What changed, and why it matters
This commit fixes how the Keystone hardware wallet handles Bitcoin 'sign message' QR codes. Previously, many malformed or unsupported message formats were reported as 'unsupported transaction,' which could mislead users. The change introduces a clearer 'Invalid Message' error and adds a new Japanese font glyph. It is primarily a user-experience and error-handling improvement, not a fix for a known exploit.
Treat as a routine UX/localization fix. Review the sign-message parser to ensure the new InvalidMessage path cannot be used to hide a more serious failure mode, and verify that downstream UI code handles the new error code safely. No urgent security action is indicated by the diff alone.
Security signals we found
Error-code refactoring for malformed Bitcoin sign-message QR input
New user-facing error string 'sign message has invalid characters'
No cryptographic, parsing-bypass, or memory-safety fix visible in the diff
Font asset update for Japanese localization
Evidence from the diff
The patch refactors QR-code text parsing for Bitcoin sign-message flows. In rust/rust_c/src/common/qrcode/mod.rs, failure paths that previously returned RustCError::UnsupportedTransaction now return a new RustCError::InvalidMessage. Corresponding error-code plumbing is added in errors.rs, err_code.c/h, and the UI layer (gui_scan_widgets.c, gui_views.c, lv_i18n). A Japanese katakana glyph (ジ) is added to the font asset. Several unrelated whitespace/formatting cleanups appear in fingerprint_process.c, gui_btc.c, gui_sol.c, and the multisig view. There is no evidence in the diff of a memory-safety bug, cryptographic bypass, or authentication flaw being fixed.
Changed components
rust/rust_c/src/common/qrcode/mod.rsrust/rust_c/src/common/errors.rssrc/error_codes/err_code.csrc/error_codes/err_code.hsrc/ui/gui_widgets/gui_scan_widgets.csrc/ui/gui_views/gui_views.csrc/ui/lv_i18n/data.csvsrc/ui/lv_i18n/lv_i18n.csrc/ui/gui_assets/font/ja/jaLittleTitle.cInspect captured patch +407 / −369
diff --git a/rust/rust_c/src/common/errors.rs b/rust/rust_c/src/common/errors.rs
index 89a131e..ec07dcf 100644
--- a/rust/rust_c/src/common/errors.rs
+++ b/rust/rust_c/src/common/errors.rs
@@ -49,6 +49,7 @@ pub enum ErrorCodes {
MasterFingerprintMismatch,
InvalidHDPath,
UnsupportedTransaction,
+ InvalidMessage,
InvalidXPub,
SignFailure,
UnexpectedError,
@@ -335,6 +336,7 @@ impl From<&RustCError> for ErrorCodes {
RustCError::InvalidHex(_) => Self::InvalidHex,
RustCError::WebAuthFailed(_) => Self::WebAuthFailed,
RustCError::InvalidData(_) => Self::InvalidData,
+ RustCError::InvalidMessage => Self::InvalidMessage,
}
}
}
@@ -606,6 +608,8 @@ pub enum RustCError {
InvalidXPub,
#[error("this kind of transaction is not supported yet, {0}")]
UnsupportedTransaction(String),
+ #[error("sign message has invalid characters")]
+ InvalidMessage,
#[error("Unexpected error: {0}")]
UnexpectedError(String),
#[error("invalid hex value: {0}")]
diff --git a/rust/rust_c/src/common/qrcode/mod.rs b/rust/rust_c/src/common/qrcode/mod.rs
index 8b1d3b7..3be170c 100644
--- a/rust/rust_c/src/common/qrcode/mod.rs
+++ b/rust/rust_c/src/common/qrcode/mod.rs
@@ -30,14 +30,12 @@ pub unsafe extern "C" fn infer_qrcode_type(qrcode: PtrString) -> QRProtocol {
pub unsafe extern "C" fn parse_qrcode_text(qr: PtrString) -> Ptr<URParseResult> {
let (is_ok, value) = check_recover_c_char_lossy(qr);
if !is_ok {
- return URParseResult::from(RustCError::UnsupportedTransaction(value)).c_ptr();
+ return URParseResult::from(RustCError::InvalidMessage).c_ptr();
}
if value.to_lowercase().starts_with("signmessage") {
if let Some((headers, message)) = value.split_once(':') {
if message.is_empty() {
- return URParseResult::from(RustCError::UnsupportedTransaction(
- "Invalid seed signer message format".to_string(),
- ))
+ return URParseResult::from(RustCError::InvalidMessage)
.c_ptr();
}
let mut pieces = headers.split_ascii_whitespace();
@@ -60,18 +58,13 @@ pub unsafe extern "C" fn parse_qrcode_text(qr: PtrString) -> Ptr<URParseResult>
.c_ptr();
}
_ => {
- return URParseResult::from(RustCError::UnsupportedTransaction(format!(
- "message encode not supported: {encode}"
- )))
+ return URParseResult::from(RustCError::InvalidMessage)
.c_ptr()
}
}
}
}
- return URParseResult::from(RustCError::UnsupportedTransaction(
- "Invalid seed signer message format".to_string(),
- ))
- .c_ptr();
+ return URParseResult::from(RustCError::InvalidMessage).c_ptr();
}
- URParseResult::from(RustCError::UnsupportedTransaction("plain text".to_string())).c_ptr()
+ URParseResult::from(RustCError::InvalidMessage).c_ptr()
}
diff --git a/src/error_codes/err_code.c b/src/error_codes/err_code.c
index 84df303..ff39b79 100644
--- a/src/error_codes/err_code.c
+++ b/src/error_codes/err_code.c
@@ -78,6 +78,7 @@ static const ErrCodeDesc_t g_faults[] = {
{ERR_MULTISIG_IMPORT_PASSPHRASE_INVALID, "import multisig wallet when passphrase wallet"},
{ERR_MULTISIG_TRANSACTION_ALREADY_SIGNED, "transaction already been signed"},
{ERR_EXPORT_FILE_TO_MICRO_CARD_FAILED, "export file to micro card failed"},
+ {ERR_SIGN_MESSAGE_INVALID_CHARACTERS, "sign message has invalid characters"},
{ERR_END, "Unknown Error"},
};
diff --git a/src/error_codes/err_code.h b/src/error_codes/err_code.h
index 67b2a46..975fe22 100644
--- a/src/error_codes/err_code.h
+++ b/src/error_codes/err_code.h
@@ -85,6 +85,7 @@ typedef enum {
ERR_MULTISIG_TRANSACTION_ALREADY_SIGNED,
ERR_EXPORT_XPUB_SDCARD_NOT_DETECTED,
ERR_EXPORT_FILE_TO_MICRO_CARD_FAILED,
+ ERR_SIGN_MESSAGE_INVALID_CHARACTERS,
ERR_ZCASH_INVALID_ACCOUNT_INDEX,
diff --git a/src/managers/fingerprint_process.c b/src/managers/fingerprint_process.c
index 2221698..36973af 100644
--- a/src/managers/fingerprint_process.c
+++ b/src/managers/fingerprint_process.c
@@ -153,7 +153,7 @@ void FpSendTimerStart(uint16_t cmd)
break;
}
}
-
+
if (osTimerIsRunning(g_fpTimeoutTimer) == 0) {
osTimerStart(g_fpTimeoutTimer, FP_TIMEOUT_TICK_INTERVAL_MS);
}
@@ -851,7 +851,7 @@ static bool FpShouldRetryCommand(uint32_t cmdIndex)
}
FingerPrintTimeout_t *timeout = &g_cmdTimeoutMap[cmdIndex];
-
+
if (timeout->cnt == FINGERPRINT_RESPONSE_DEFAULT_TIMEOUT) {
return false;
}
@@ -871,24 +871,24 @@ static void FpRetryCommand(uint32_t cmdIndex)
}
uint16_t cmd = g_cmdHandleMap[cmdIndex].cmd;
-
+
switch (cmd) {
case FINGERPRINT_CMD_GET_REG_NUM:
FpGetNumberSend(FINGERPRINT_CMD_GET_REG_NUM, 0);
break;
-
+
case FINGERPRINT_CMD_DELETE_SINGLE:
FpDeleteSend(FINGERPRINT_CMD_DELETE_SINGLE, g_fpIndex);
break;
-
+
case FINGERPRINT_CMD_DELETE_ALL:
FpDeleteSend(FINGERPRINT_CMD_DELETE_ALL, 1);
break;
-
+
case FINGERPRINT_CMD_RECOGNIZE:
FpRecognize(g_fingerRecognizeType);
break;
-
+
default:
FpGenericSend(cmd, g_cmdHandleMap[cmdIndex].isEncrypt);
break;
@@ -899,19 +899,19 @@ static void FpRetryCommand(uint32_t cmdIndex)
void FpTimeoutHandle(void *argument)
{
bool timerStop = true;
-
+
osMutexAcquire(g_fpResponseMutex, osWaitForever);
-
+
for (uint32_t i = 1; i < NUMBER_OF_ARRAYS(g_cmdTimeoutMap); i++) {
FingerPrintTimeout_t *timeout = &g_cmdTimeoutMap[i];
-
+
if (timeout->cnt == FINGERPRINT_RESPONSE_DEFAULT_TIMEOUT) {
continue;
}
-
+
timerStop = false;
timeout->cnt++;
-
+
if (g_cmdHandleMap[i].cmd == FINGERPRINT_CMD_RECOGNIZE) {
if (timeout->cnt >= FP_RECOGNIZE_RETRY_THRESHOLD) {
// Retry recognize command and reset counter
@@ -922,26 +922,26 @@ void FpTimeoutHandle(void *argument)
for (uint32_t j = 0; j < NUMBER_OF_ARRAYS(g_cmdTimeoutMap); j++) {
g_cmdTimeoutMap[j].cnt = FINGERPRINT_RESPONSE_DEFAULT_TIMEOUT;
}
-
+
FpRetryCommand(i);
-
+
if (g_devLogSwitch) {
printf("FP timeout retry cmd:0x%04x\n", g_cmdHandleMap[i].cmd);
}
}
}
-
+
if (timerStop) {
osTimerStop(g_fpTimeoutTimer);
}
-
+
osMutexRelease(g_fpResponseMutex);
}
static void FpResponseHandle(uint16_t cmd)
{
osMutexAcquire(g_fpResponseMutex, osWaitForever);
-
+
for (uint32_t i = 0; i < NUMBER_OF_ARRAYS(g_cmdTimeoutMap); i++) {
if (g_cmdTimeoutMap[i].cmd == cmd) {
g_cmdTimeoutMap[i].cnt = FINGERPRINT_RESPONSE_DEFAULT_TIMEOUT;
diff --git a/src/ui/gui_assets/font/ja/jaLittleTitle.c b/src/ui/gui_assets/font/ja/jaLittleTitle.c
index 30720cb..de9572e 100644
--- a/src/ui/gui_assets/font/ja/jaLittleTitle.c
+++ b/src/ui/gui_assets/font/ja/jaLittleTitle.c
@@ -1,7 +1,7 @@
/*******************************************************************************
* Size: 28 px
* Bpp: 1
- * Opts: --bpp 1 --size 28 --no-compress --font NotoSansJP-Regular.ttf --symbols "!#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~£¥·€、「」いえおかがきくけこさしすせただつてでとなにのはまみらりるれわをんァアィイウェエォカキクグコサザシスズセタダチッツテデトドネバパビフブプベホポマミムメモャュョラリルレロワンー一上不中了事介件低作使侵免入公共出初利制削力功加効化単取受可合名告周問回在報変大失存完定密布引復必忘情意成所択指接敗数新方既明更最有期格検標権止正法注派済源準為無版生用由画目知確禁秘約紋終経続署能致行複要規覚解言設証試認語警財責資超転追送通達選重鍵開関限除電面項!&? --format lvgl -o ../gui_assets/font/ja/jaLittleTitle.c
+ * Opts: --bpp 1 --size 28 --no-compress --font NotoSansJP-Regular.ttf --symbols "!#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~£¥·€、「」いえおかがきくけこさしすせただつてでとなにのはまみらりるれわをんァアィイウェエォカキクグコサザシジスズセタダチッツテデトドネバパビフブプベホポマミムメモャュョラリルレロワンー一上不中了事介件低作使侵免入公共出初利制削力功加効化単取受可合名告周問回在報変大失存完定密布引復必忘情意成所択指接敗数新方既明更最有期格検標権止正法注派済源準為無版生用由画目知確禁秘約紋終経続署能致行複要規覚解言設証試認語警財責資超転追送通達選重鍵開関限除電面項!&? --format lvgl -o ../gui_assets/font/ja/jaLittleTitle.c
******************************************************************************/
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
@@ -1121,6 +1121,17 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
0x0, 0x7, 0xf8, 0x0, 0x7, 0xc0, 0x0, 0xc,
0x0, 0x0, 0x0,
+ /* U+30B8 "ジ" */
+ 0x0, 0x0, 0x18, 0x8, 0x1, 0x18, 0x3c, 0x3,
+ 0x18, 0x3e, 0x3, 0x30, 0x1e, 0x6, 0x0, 0x1c,
+ 0x6, 0x0, 0x0, 0x0, 0x60, 0x0, 0x0, 0xe0,
+ 0x0, 0xc, 0xf0, 0x0, 0x38, 0xf8, 0x0, 0x70,
+ 0x70, 0x1, 0xc0, 0x40, 0x7, 0x0, 0x0, 0x1c,
+ 0x0, 0x0, 0x70, 0x0, 0x3, 0xc0, 0x0, 0xf,
+ 0x0, 0x0, 0x7c, 0x0, 0x3, 0xe0, 0x0, 0x1f,
+ 0x0, 0x3, 0xfc, 0x0, 0xf, 0xc0, 0x0, 0xc,
+ 0x0, 0x0, 0x0,
+
/* U+30B9 "ス" */
0x3f, 0xff, 0xe0, 0xff, 0xff, 0x80, 0x0, 0xe,
0x0, 0x0, 0x70, 0x0, 0x1, 0xc0, 0x0, 0xe,
@@ -3298,178 +3309,179 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
{.bitmap_index = 5700, .adv_w = 448, .box_w = 24, .box_h = 23, .ofs_x = 2, .ofs_y = -1},
{.bitmap_index = 5769, .adv_w = 448, .box_w = 25, .box_h = 24, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 5844, .adv_w = 448, .box_w = 23, .box_h = 23, .ofs_x = 3, .ofs_y = -1},
- {.bitmap_index = 5911, .adv_w = 448, .box_w = 22, .box_h = 20, .ofs_x = 3, .ofs_y = -1},
- {.bitmap_index = 5966, .adv_w = 448, .box_w = 25, .box_h = 25, .ofs_x = 2, .ofs_y = -1},
- {.bitmap_index = 6045, .adv_w = 448, .box_w = 23, .box_h = 22, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 6109, .adv_w = 448, .box_w = 21, .box_h = 24, .ofs_x = 3, .ofs_y = -1},
- {.bitmap_index = 6172, .adv_w = 448, .box_w = 25, .box_h = 26, .ofs_x = 2, .ofs_y = -2},
- {.bitmap_index = 6254, .adv_w = 448, .box_w = 23, .box_h = 23, .ofs_x = 2, .ofs_y = -1},
- {.bitmap_index = 6321, .adv_w = 448, .box_w = 19, .box_h = 18, .ofs_x = 5, .ofs_y = -2},
- {.bitmap_index = 6364, .adv_w = 448, .box_w = 22, .box_h = 22, .ofs_x = 3, .ofs_y = -1},
- {.bitmap_index = 6425, .adv_w = 448, .box_w = 23, .box_h = 23, .ofs_x = 3, .ofs_y = -2},
- {.bitmap_index = 6492, .adv_w = 448, .box_w = 25, .box_h = 26, .ofs_x = 2, .ofs_y = -2},
- {.bitmap_index = 6574, .adv_w = 448, .box_w = 15, .box_h = 22, .ofs_x = 9, .ofs_y = -1},
- {.bitmap_index = 6616, .adv_w = 448, .box_w = 16, .box_h = 22, .ofs_x = 8, .ofs_y = -1},
- {.bitmap_index = 6660, .adv_w = 448, .box_w = 24, .box_h = 23, .ofs_x = 2, .ofs_y = -1},
- {.bitmap_index = 6729, .adv_w = 448, .box_w = 25, .box_h = 23, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 6801, .adv_w = 448, .box_w = 25, .box_h = 23, .ofs_x = 2, .ofs_y = 0},
- {.bitmap_index = 6873, .adv_w = 448, .box_w = 20, .box_h = 23, .ofs_x = 6, .ofs_y = 0},
- {.bitmap_index = 6931, .adv_w = 448, .box_w = 20, .box_h = 20, .ofs_x = 4, .ofs_y = -1},
- {.bitmap_index = 6981, .adv_w = 448, .box_w = 23, .box_h = 25, .ofs_x = 4, .ofs_y = -1},
- {.bitmap_index = 7053, .adv_w = 448, .box_w = 24, .box_h = 24, .ofs_x = 3, .ofs_y = -1},
- {.bitmap_index = 7125, .adv_w = 448, .box_w = 25, .box_h = 19, .ofs_x = 1, .ofs_y = 1},
- {.bitmap_index = 7185, .adv_w = 448, .box_w = 24, .box_h = 23, .ofs_x = 2, .ofs_y = -1},
- {.bitmap_index = 7254, .adv_w = 448, .box_w = 24, .box_h = 25, .ofs_x = 2, .ofs_y = -1},
- {.bitmap_index = 7329, .adv_w = 448, .box_w = 23, .box_h = 20, .ofs_x = 3, .ofs_y = -1},
- {.bitmap_index = 7387, .adv_w = 448, .box_w = 19, .box_h = 22, .ofs_x = 4, .ofs_y = -1},
- {.bitmap_index = 7440, .adv_w = 448, .box_w = 24, .box_h = 22, .ofs_x = 2, .ofs_y = -1},
- {.bitmap_index = 7506, .adv_w = 448, .box_w = 21, .box_h = 22, .ofs_x = 3, .ofs_y = -1},
- {.bitmap_index = 7564, .adv_w = 448, .box_w = 22, .box_h = 20, .ofs_x = 3, .ofs_y = 0},
- {.bitmap_index = 7619, .adv_w = 448, .box_w = 20, .box_h = 20, .ofs_x = 4, .ofs_y = -3},
- {.bitmap_index = 7669, .adv_w = 448, .box_w = 20, .box_h = 13, .ofs_x = 4, .ofs_y = 1},
- {.bitmap_index = 7702, .adv_w = 448, .box_w = 16, .box_h = 17, .ofs_x = 6, .ofs_y = -2},
- {.bitmap_index = 7736, .adv_w = 448, .box_w = 21, .box_h = 22, .ofs_x = 3, .ofs_y = -1},
- {.bitmap_index = 7794, .adv_w = 448, .box_w = 15, .box_h = 22, .ofs_x = 6, .ofs_y = -1},
- {.bitmap_index = 7836, .adv_w = 448, .box_w = 24, .box_h = 22, .ofs_x = 2, .ofs_y = -1},
- {.bitmap_index = 7902, .adv_w = 448, .box_w = 19, .box_h = 22, .ofs_x = 7, .ofs_y = -1},
- {.bitmap_index = 7955, .adv_w = 448, .box_w = 19, .box_h = 19, .ofs_x = 4, .ofs_y = 0},
- {.bitmap_index = 8001, .adv_w = 448, .box_w = 20, .box_h = 20, .ofs_x = 4, .ofs_y = 0},
- {.bitmap_index = 8051, .adv_w = 448, .box_w = 22, .box_h = 22, .ofs_x = 4, .ofs_y = -1},
- {.bitmap_index = 8112, .adv_w = 448, .box_w = 22, .box_h = 2, .ofs_x = 3, .ofs_y = 10},
- {.bitmap_index = 8118, .adv_w = 448, .box_w = 26, .box_h = 2, .ofs_x = 1, .ofs_y = 10},
- {.bitmap_index = 8125, .adv_w = 448, .box_w = 25, .box_h = 24, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 8200, .adv_w = 448, .box_w = 26, .box_h = 23, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 8275, .adv_w = 448, .box_w = 22, .box_h = 25, .ofs_x = 3, .ofs_y = -2},
- {.bitmap_index = 8344, .adv_w = 448, .box_w = 22, .box_h = 23, .ofs_x = 3, .ofs_y = -2},
- {.bitmap_index = 8408, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 8490, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 8575, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 8660, .adv_w = 448, .box_w = 27, .box_h = 26, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 8748, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 8830, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 8912, .adv_w = 448, .box_w = 27, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 8997, .adv_w = 448, .box_w = 25, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 9076, .adv_w = 448, .box_w = 26, .box_h = 24, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 9154, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 9236, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 9321, .adv_w = 448, .box_w = 22, .box_h = 25, .ofs_x = 3, .ofs_y = -2},
- {.bitmap_index = 9390, .adv_w = 448, .box_w = 25, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 9472, .adv_w = 448, .box_w = 25, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 9551, .adv_w = 448, .box_w = 24, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 9626, .adv_w = 448, .box_w = 24, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 9704, .adv_w = 448, .box_w = 24, .box_h = 25, .ofs_x = 2, .ofs_y = -2},
- {.bitmap_index = 9779, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 9861, .adv_w = 448, .box_w = 25, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 9940, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 10025, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 10107, .adv_w = 448, .box_w = 25, .box_h = 26, .ofs_x = 2, .ofs_y = -2},
- {.bitmap_index = 10189, .adv_w = 448, .box_w = 27, .box_h = 24, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 10270, .adv_w = 448, .box_w = 26, .box_h = 27, .ofs_x = 1, .ofs_y = -3},
- {.bitmap_index = 10358, .adv_w = 448, .box_w = 24, .box_h = 24, .ofs_x = 2, .ofs_y = -2},
- {.bitmap_index = 10430, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 2, .ofs_y = -2},
- {.bitmap_index = 10512, .adv_w = 448, .box_w = 24, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 10590, .adv_w = 448, .box_w = 25, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 10672, .adv_w = 448, .box_w = 23, .box_h = 24, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 10741, .adv_w = 448, .box_w = 23, .box_h = 24, .ofs_x = 3, .ofs_y = -2},
- {.bitmap_index = 10810, .adv_w = 448, .box_w = 23, .box_h = 24, .ofs_x = 2, .ofs_y = -2},
- {.bitmap_index = 10879, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 10961, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 11046, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 11131, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -3},
- {.bitmap_index = 11216, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 2, .ofs_y = -2},
- {.bitmap_index = 11301, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 11386, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -3},
- {.bitmap_index = 11471, .adv_w = 448, .box_w = 25, .box_h = 26, .ofs_x = 1, .ofs_y = -3},
- {.bitmap_index = 11553, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 11635, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 11717, .adv_w = 448, .box_w = 22, .box_h = 25, .ofs_x = 2, .ofs_y = -2},
- {.bitmap_index = 11786, .adv_w = 448, .box_w = 27, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 11874, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 11956, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 12041, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 12123, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 12208, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 12293, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 12375, .adv_w = 448, .box_w = 27, .box_h = 26, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 12463, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 12548, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 12633, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 12715, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 12797, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 12882, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 12967, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 13049, .adv_w = 448, .box_w = 23, .box_h = 25, .ofs_x = 2, .ofs_y = -2},
- {.bitmap_index = 13121, .adv_w = 448, .box_w = 26, .box_h = 24, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 13199, .adv_w = 448, .box_w = 26, .box_h = 24, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 13277, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 13362, .adv_w = 448, .box_w = 25, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 13441, .adv_w = 448, .box_w = 27, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 13529, .adv_w = 448, .box_w = 27, .box_h = 26, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 13617, .adv_w = 448, .box_w = 27, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 13702, .adv_w = 448, .box_w = 27, .box_h = 26, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 13790, .adv_w = 448, .box_w = 25, .box_h = 24, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 13865, .adv_w = 448, .box_w = 25, .box_h = 23, .ofs_x = 1, .ofs_y = -1},
- {.bitmap_index = 13937, .adv_w = 448, .box_w = 25, .box_h = 26, .ofs_x = 2, .ofs_y = -2},
- {.bitmap_index = 14019, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 14104, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 14189, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 14274, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 14356, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 14441, .adv_w = 448, .box_w = 25, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 14523, .adv_w = 448, .box_w = 25, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 14605, .adv_w = 448, .box_w = 27, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 14690, .adv_w = 448, .box_w = 24, .box_h = 24, .ofs_x = 2, .ofs_y = -1},
- {.bitmap_index = 14762, .adv_w = 448, .box_w = 24, .box_h = 24, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 14834, .adv_w = 448, .box_w = 21, .box_h = 25, .ofs_x = 3, .ofs_y = -2},
- {.bitmap_index = 14900, .adv_w = 448, .box_w = 24, .box_h = 24, .ofs_x = 2, .ofs_y = -2},
- {.bitmap_index = 14972, .adv_w = 448, .box_w = 18, .box_h = 24, .ofs_x = 5, .ofs_y = -2},
- {.bitmap_index = 15026, .adv_w = 448, .box_w = 24, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 15104, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 15189, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 15274, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 15359, .adv_w = 448, .box_w = 25, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 15438, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 15520, .adv_w = 448, .box_w = 27, .box_h = 26, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 15608, .adv_w = 448, .box_w = 27, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 15693, .adv_w = 448, .box_w = 27, .box_h = 26, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 15781, .adv_w = 448, .box_w = 25, .box_h = 24, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 15856, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 15941, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 16026, .adv_w = 448, .box_w = 27, .box_h = 26, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 16114, .adv_w = 448, .box_w = 27, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 16202, .adv_w = 448, .box_w = 25, .box_h = 26, .ofs_x = 1, .ofs_y = -3},
- {.bitmap_index = 16284, .adv_w = 448, .box_w = 27, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 16369, .adv_w = 448, .box_w = 25, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 16448, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 16533, .adv_w = 448, .box_w = 25, .box_h = 24, .ofs_x = 2, .ofs_y = -2},
- {.bitmap_index = 16608, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 16690, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 16772, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 16854, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 16936, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 17018, .adv_w = 448, .box_w = 25, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 17097, .adv_w = 448, .box_w = 27, .box_h = 26, .ofs_x = 0, .ofs_y = -2},
- {.bitmap_index = 17185, .adv_w = 448, .box_w = 24, .box_h = 26, .ofs_x = 2, .ofs_y = -2},
- {.bitmap_index = 17263, .adv_w = 448, .box_w = 26, .box_h = 27, .ofs_x = 1, .ofs_y = -3},
- {.bitmap_index = 17351, .adv_w = 448, .box_w = 27, .box_h = 26, .ofs_x = 1, .ofs_y = -3},
- {.bitmap_index = 17439, .adv_w = 448, .box_w = 25, .box_h = 26, .ofs_x = 2, .ofs_y = -2},
- {.bitmap_index = 17521, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 17606, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 17688, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 17770, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 17852, .adv_w = 448, .box_w = 26, .box_h = 24, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 17930, .adv_w = 448, .box_w = 25, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 18009, .adv_w = 448, .box_w = 28, .box_h = 26, .ofs_x = 0, .ofs_y = -3},
- {.bitmap_index = 18100, .adv_w = 448, .box_w = 23, .box_h = 24, .ofs_x = 3, .ofs_y = -2},
- {.bitmap_index = 18169, .adv_w = 448, .box_w = 23, .box_h = 24, .ofs_x = 3, .ofs_y = -2},
- {.bitmap_index = 18238, .adv_w = 448, .box_w = 25, .box_h = 24, .ofs_x = 2, .ofs_y = -2},
- {.bitmap_index = 18313, .adv_w = 448, .box_w = 25, .box_h = 26, .ofs_x = 2, .ofs_y = -2},
- {.bitmap_index = 18395, .adv_w = 448, .box_w = 25, .box_h = 25, .ofs_x = 2, .ofs_y = -2},
- {.bitmap_index = 18474, .adv_w = 448, .box_w = 25, .box_h = 24, .ofs_x = 2, .ofs_y = -2},
- {.bitmap_index = 18549, .adv_w = 448, .box_w = 26, .box_h = 24, .ofs_x = 1, .ofs_y = -2},
- {.bitmap_index = 18627, .adv_w = 448, .box_w = 4, .box_h = 21, .ofs_x = 12, .ofs_y = 0},
- {.bitmap_index = 18638, .adv_w = 448, .box_w = 18, .box_h = 21, .ofs_x = 6, .ofs_y = 0},
- {.bitmap_index = 18686, .adv_w = 448, .box_w = 14, .box_h = 21, .ofs_x = 7, .ofs_y = 0}
+ {.bitmap_index = 5911, .adv_w = 448, .box_w = 23, .box_h = 23, .ofs_x = 3, .ofs_y = -1},
+ {.bitmap_index = 5978, .adv_w = 448, .box_w = 22, .box_h = 20, .ofs_x = 3, .ofs_y = -1},
+ {.bitmap_index = 6033, .adv_w = 448, .box_w = 25, .box_h = 25, .ofs_x = 2, .ofs_y = -1},
+ {.bitmap_index = 6112, .adv_w = 448, .box_w = 23, .box_h = 22, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 6176, .adv_w = 448, .box_w = 21, .box_h = 24, .ofs_x = 3, .ofs_y = -1},
+ {.bitmap_index = 6239, .adv_w = 448, .box_w = 25, .box_h = 26, .ofs_x = 2, .ofs_y = -2},
+ {.bitmap_index = 6321, .adv_w = 448, .box_w = 23, .box_h = 23, .ofs_x = 2, .ofs_y = -1},
+ {.bitmap_index = 6388, .adv_w = 448, .box_w = 19, .box_h = 18, .ofs_x = 5, .ofs_y = -2},
+ {.bitmap_index = 6431, .adv_w = 448, .box_w = 22, .box_h = 22, .ofs_x = 3, .ofs_y = -1},
+ {.bitmap_index = 6492, .adv_w = 448, .box_w = 23, .box_h = 23, .ofs_x = 3, .ofs_y = -2},
+ {.bitmap_index = 6559, .adv_w = 448, .box_w = 25, .box_h = 26, .ofs_x = 2, .ofs_y = -2},
+ {.bitmap_index = 6641, .adv_w = 448, .box_w = 15, .box_h = 22, .ofs_x = 9, .ofs_y = -1},
+ {.bitmap_index = 6683, .adv_w = 448, .box_w = 16, .box_h = 22, .ofs_x = 8, .ofs_y = -1},
+ {.bitmap_index = 6727, .adv_w = 448, .box_w = 24, .box_h = 23, .ofs_x = 2, .ofs_y = -1},
+ {.bitmap_index = 6796, .adv_w = 448, .box_w = 25, .box_h = 23, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 6868, .adv_w = 448, .box_w = 25, .box_h = 23, .ofs_x = 2, .ofs_y = 0},
+ {.bitmap_index = 6940, .adv_w = 448, .box_w = 20, .box_h = 23, .ofs_x = 6, .ofs_y = 0},
+ {.bitmap_index = 6998, .adv_w = 448, .box_w = 20, .box_h = 20, .ofs_x = 4, .ofs_y = -1},
+ {.bitmap_index = 7048, .adv_w = 448, .box_w = 23, .box_h = 25, .ofs_x = 4, .ofs_y = -1},
+ {.bitmap_index = 7120, .adv_w = 448, .box_w = 24, .box_h = 24, .ofs_x = 3, .ofs_y = -1},
+ {.bitmap_index = 7192, .adv_w = 448, .box_w = 25, .box_h = 19, .ofs_x = 1, .ofs_y = 1},
+ {.bitmap_index = 7252, .adv_w = 448, .box_w = 24, .box_h = 23, .ofs_x = 2, .ofs_y = -1},
+ {.bitmap_index = 7321, .adv_w = 448, .box_w = 24, .box_h = 25, .ofs_x = 2, .ofs_y = -1},
+ {.bitmap_index = 7396, .adv_w = 448, .box_w = 23, .box_h = 20, .ofs_x = 3, .ofs_y = -1},
+ {.bitmap_index = 7454, .adv_w = 448, .box_w = 19, .box_h = 22, .ofs_x = 4, .ofs_y = -1},
+ {.bitmap_index = 7507, .adv_w = 448, .box_w = 24, .box_h = 22, .ofs_x = 2, .ofs_y = -1},
+ {.bitmap_index = 7573, .adv_w = 448, .box_w = 21, .box_h = 22, .ofs_x = 3, .ofs_y = -1},
+ {.bitmap_index = 7631, .adv_w = 448, .box_w = 22, .box_h = 20, .ofs_x = 3, .ofs_y = 0},
+ {.bitmap_index = 7686, .adv_w = 448, .box_w = 20, .box_h = 20, .ofs_x = 4, .ofs_y = -3},
+ {.bitmap_index = 7736, .adv_w = 448, .box_w = 20, .box_h = 13, .ofs_x = 4, .ofs_y = 1},
+ {.bitmap_index = 7769, .adv_w = 448, .box_w = 16, .box_h = 17, .ofs_x = 6, .ofs_y = -2},
+ {.bitmap_index = 7803, .adv_w = 448, .box_w = 21, .box_h = 22, .ofs_x = 3, .ofs_y = -1},
+ {.bitmap_index = 7861, .adv_w = 448, .box_w = 15, .box_h = 22, .ofs_x = 6, .ofs_y = -1},
+ {.bitmap_index = 7903, .adv_w = 448, .box_w = 24, .box_h = 22, .ofs_x = 2, .ofs_y = -1},
+ {.bitmap_index = 7969, .adv_w = 448, .box_w = 19, .box_h = 22, .ofs_x = 7, .ofs_y = -1},
+ {.bitmap_index = 8022, .adv_w = 448, .box_w = 19, .box_h = 19, .ofs_x = 4, .ofs_y = 0},
+ {.bitmap_index = 8068, .adv_w = 448, .box_w = 20, .box_h = 20, .ofs_x = 4, .ofs_y = 0},
+ {.bitmap_index = 8118, .adv_w = 448, .box_w = 22, .box_h = 22, .ofs_x = 4, .ofs_y = -1},
+ {.bitmap_index = 8179, .adv_w = 448, .box_w = 22, .box_h = 2, .ofs_x = 3, .ofs_y = 10},
+ {.bitmap_index = 8185, .adv_w = 448, .box_w = 26, .box_h = 2, .ofs_x = 1, .ofs_y = 10},
+ {.bitmap_index = 8192, .adv_w = 448, .box_w = 25, .box_h = 24, .ofs_x = 1, .ofs_y = -1},
+ {.bitmap_index = 8267, .adv_w = 448, .box_w = 26, .box_h = 23, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 8342, .adv_w = 448, .box_w = 22, .box_h = 25, .ofs_x = 3, .ofs_y = -2},
+ {.bitmap_index = 8411, .adv_w = 448, .box_w = 22, .box_h = 23, .ofs_x = 3, .ofs_y = -2},
+ {.bitmap_index = 8475, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 8557, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 8642, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 8727, .adv_w = 448, .box_w = 27, .box_h = 26, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 8815, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 8897, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 8979, .adv_w = 448, .box_w = 27, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 9064, .adv_w = 448, .box_w = 25, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 9143, .adv_w = 448, .box_w = 26, .box_h = 24, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 9221, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 9303, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 9388, .adv_w = 448, .box_w = 22, .box_h = 25, .ofs_x = 3, .ofs_y = -2},
+ {.bitmap_index = 9457, .adv_w = 448, .box_w = 25, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 9539, .adv_w = 448, .box_w = 25, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 9618, .adv_w = 448, .box_w = 24, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 9693, .adv_w = 448, .box_w = 24, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 9771, .adv_w = 448, .box_w = 24, .box_h = 25, .ofs_x = 2, .ofs_y = -2},
+ {.bitmap_index = 9846, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 9928, .adv_w = 448, .box_w = 25, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 10007, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 10092, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 10174, .adv_w = 448, .box_w = 25, .box_h = 26, .ofs_x = 2, .ofs_y = -2},
+ {.bitmap_index = 10256, .adv_w = 448, .box_w = 27, .box_h = 24, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 10337, .adv_w = 448, .box_w = 26, .box_h = 27, .ofs_x = 1, .ofs_y = -3},
+ {.bitmap_index = 10425, .adv_w = 448, .box_w = 24, .box_h = 24, .ofs_x = 2, .ofs_y = -2},
+ {.bitmap_index = 10497, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 2, .ofs_y = -2},
+ {.bitmap_index = 10579, .adv_w = 448, .box_w = 24, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 10657, .adv_w = 448, .box_w = 25, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 10739, .adv_w = 448, .box_w = 23, .box_h = 24, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 10808, .adv_w = 448, .box_w = 23, .box_h = 24, .ofs_x = 3, .ofs_y = -2},
+ {.bitmap_index = 10877, .adv_w = 448, .box_w = 23, .box_h = 24, .ofs_x = 2, .ofs_y = -2},
+ {.bitmap_index = 10946, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 11028, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 11113, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 11198, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -3},
+ {.bitmap_index = 11283, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 2, .ofs_y = -2},
+ {.bitmap_index = 11368, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 11453, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -3},
+ {.bitmap_index = 11538, .adv_w = 448, .box_w = 25, .box_h = 26, .ofs_x = 1, .ofs_y = -3},
+ {.bitmap_index = 11620, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 11702, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 11784, .adv_w = 448, .box_w = 22, .box_h = 25, .ofs_x = 2, .ofs_y = -2},
+ {.bitmap_index = 11853, .adv_w = 448, .box_w = 27, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 11941, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 12023, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 12108, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 12190, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 12275, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 12360, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 12442, .adv_w = 448, .box_w = 27, .box_h = 26, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 12530, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 12615, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 12700, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 12782, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 12864, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 12949, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 13034, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 13116, .adv_w = 448, .box_w = 23, .box_h = 25, .ofs_x = 2, .ofs_y = -2},
+ {.bitmap_index = 13188, .adv_w = 448, .box_w = 26, .box_h = 24, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 13266, .adv_w = 448, .box_w = 26, .box_h = 24, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 13344, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 13429, .adv_w = 448, .box_w = 25, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 13508, .adv_w = 448, .box_w = 27, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 13596, .adv_w = 448, .box_w = 27, .box_h = 26, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 13684, .adv_w = 448, .box_w = 27, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 13769, .adv_w = 448, .box_w = 27, .box_h = 26, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 13857, .adv_w = 448, .box_w = 25, .box_h = 24, .ofs_x = 1, .ofs_y = -1},
+ {.bitmap_index = 13932, .adv_w = 448, .box_w = 25, .box_h = 23, .ofs_x = 1, .ofs_y = -1},
+ {.bitmap_index = 14004, .adv_w = 448, .box_w = 25, .box_h = 26, .ofs_x = 2, .ofs_y = -2},
+ {.bitmap_index = 14086, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 14171, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 14256, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 14341, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 14423, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 14508, .adv_w = 448, .box_w = 25, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 14590, .adv_w = 448, .box_w = 25, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 14672, .adv_w = 448, .box_w = 27, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 14757, .adv_w = 448, .box_w = 24, .box_h = 24, .ofs_x = 2, .ofs_y = -1},
+ {.bitmap_index = 14829, .adv_w = 448, .box_w = 24, .box_h = 24, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 14901, .adv_w = 448, .box_w = 21, .box_h = 25, .ofs_x = 3, .ofs_y = -2},
+ {.bitmap_index = 14967, .adv_w = 448, .box_w = 24, .box_h = 24, .ofs_x = 2, .ofs_y = -2},
+ {.bitmap_index = 15039, .adv_w = 448, .box_w = 18, .box_h = 24, .ofs_x = 5, .ofs_y = -2},
+ {.bitmap_index = 15093, .adv_w = 448, .box_w = 24, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 15171, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 15256, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 15341, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 15426, .adv_w = 448, .box_w = 25, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 15505, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 15587, .adv_w = 448, .box_w = 27, .box_h = 26, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 15675, .adv_w = 448, .box_w = 27, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 15760, .adv_w = 448, .box_w = 27, .box_h = 26, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 15848, .adv_w = 448, .box_w = 25, .box_h = 24, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 15923, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 16008, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 16093, .adv_w = 448, .box_w = 27, .box_h = 26, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 16181, .adv_w = 448, .box_w = 27, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 16269, .adv_w = 448, .box_w = 25, .box_h = 26, .ofs_x = 1, .ofs_y = -3},
+ {.bitmap_index = 16351, .adv_w = 448, .box_w = 27, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 16436, .adv_w = 448, .box_w = 25, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 16515, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 16600, .adv_w = 448, .box_w = 25, .box_h = 24, .ofs_x = 2, .ofs_y = -2},
+ {.bitmap_index = 16675, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 16757, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 16839, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 16921, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 17003, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 17085, .adv_w = 448, .box_w = 25, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 17164, .adv_w = 448, .box_w = 27, .box_h = 26, .ofs_x = 0, .ofs_y = -2},
+ {.bitmap_index = 17252, .adv_w = 448, .box_w = 24, .box_h = 26, .ofs_x = 2, .ofs_y = -2},
+ {.bitmap_index = 17330, .adv_w = 448, .box_w = 26, .box_h = 27, .ofs_x = 1, .ofs_y = -3},
+ {.bitmap_index = 17418, .adv_w = 448, .box_w = 27, .box_h = 26, .ofs_x = 1, .ofs_y = -3},
+ {.bitmap_index = 17506, .adv_w = 448, .box_w = 25, .box_h = 26, .ofs_x = 2, .ofs_y = -2},
+ {.bitmap_index = 17588, .adv_w = 448, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 17673, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 17755, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 17837, .adv_w = 448, .box_w = 26, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 17919, .adv_w = 448, .box_w = 26, .box_h = 24, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 17997, .adv_w = 448, .box_w = 25, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 18076, .adv_w = 448, .box_w = 28, .box_h = 26, .ofs_x = 0, .ofs_y = -3},
+ {.bitmap_index = 18167, .adv_w = 448, .box_w = 23, .box_h = 24, .ofs_x = 3, .ofs_y = -2},
+ {.bitmap_index = 18236, .adv_w = 448, .box_w = 23, .box_h = 24, .ofs_x = 3, .ofs_y = -2},
+ {.bitmap_index = 18305, .adv_w = 448, .box_w = 25, .box_h = 24, .ofs_x = 2, .ofs_y = -2},
+ {.bitmap_index = 18380, .adv_w = 448, .box_w = 25, .box_h = 26, .ofs_x = 2, .ofs_y = -2},
+ {.bitmap_index = 18462, .adv_w = 448, .box_w = 25, .box_h = 25, .ofs_x = 2, .ofs_y = -2},
+ {.bitmap_index = 18541, .adv_w = 448, .box_w = 25, .box_h = 24, .ofs_x = 2, .ofs_y = -2},
+ {.bitmap_index = 18616, .adv_w = 448, .box_w = 26, .box_h = 24, .ofs_x = 1, .ofs_y = -2},
+ {.bitmap_index = 18694, .adv_w = 448, .box_w = 4, .box_h = 21, .ofs_x = 12, .ofs_y = 0},
+ {.bitmap_index = 18705, .adv_w = 448, .box_w = 18, .box_h = 21, .ofs_x = 6, .ofs_y = 0},
+ {.bitmap_index = 18753, .adv_w = 448, .box_w = 14, .box_h = 21, .ofs_x = 7, .ofs_y = 0}
};
/*---------------------
@@ -3483,29 +3495,29 @@ static const uint16_t unicode_list_1[] = {
0x2fc4, 0x2fc5, 0x2fc7, 0x2fc8, 0x2fcb, 0x2fcc, 0x2fdb, 0x2fdc,
0x2fe6, 0x2fe7, 0x2fe8, 0x2fe9, 0x2fec, 0x2fef, 0x2ff0, 0x2ffe,
0x2fff, 0x3000, 0x3001, 0x3003, 0x3004, 0x3005, 0x3006, 0x3008,
- 0x300a, 0x300c, 0x300d, 0x3010, 0x3012, 0x3013, 0x3014, 0x3016,
- 0x3017, 0x3018, 0x301c, 0x301d, 0x301e, 0x3020, 0x3021, 0x3023,
- 0x3024, 0x3025, 0x3026, 0x302a, 0x302d, 0x302e, 0x3030, 0x3032,
- 0x3033, 0x3034, 0x3036, 0x3038, 0x303a, 0x303b, 0x303c, 0x303d,
- 0x303e, 0x303f, 0x3040, 0x3042, 0x3044, 0x3046, 0x3047, 0x3048,
- 0x3049, 0x304a, 0x304c, 0x3050, 0x3059, 0x4d5d, 0x4d67, 0x4d6a,
- 0x4d8a, 0x4de3, 0x4de8, 0x4e28, 0x4e53, 0x4eab, 0x4eb9, 0x4edc,
- 0x4f12, 0x50aa, 0x50c2, 0x50c9, 0x50ce, 0x5157, 0x517a, 0x5186,
- 0x5193, 0x51a7, 0x51f8, 0x51fc, 0x51fd, 0x5216, 0x5273, 0x52b5,
- 0x5333, 0x5334, 0x534c, 0x5365, 0x536a, 0x53a7, 0x53c5, 0x54ac,
- 0x563b, 0x5685, 0x578e, 0x5866, 0x5884, 0x588e, 0x5ab5, 0x5ae9,
- 0x5af7, 0x5b23, 0x5d60, 0x5e72, 0x5f06, 0x5f22, 0x5f35, 0x6022,
- 0x606c, 0x616d, 0x619d, 0x61fb, 0x6264, 0x6302, 0x64b4, 0x64cd,
- 0x650d, 0x6516, 0x653f, 0x656b, 0x6651, 0x665d, 0x6666, 0x667c,
- 0x6799, 0x6879, 0x6976, 0x6986, 0x6abf, 0x6ac0, 0x6c32, 0x6c45,
- 0x6c9b, 0x6d65, 0x6ded, 0x6df3, 0x7017, 0x707e, 0x71a5, 0x747c,
- 0x7485, 0x748e, 0x7498, 0x764b, 0x7742, 0x7817, 0x78de, 0x7935,
- 0x7c61, 0x7c68, 0x7c9f, 0x7ca9, 0x7cf7, 0x7ecf, 0x805a, 0x8151,
- 0x87a9, 0x8864, 0x88de, 0x88ec, 0x88f7, 0x8940, 0x895d, 0x898a,
- 0x8999, 0x89c3, 0x89ea, 0x89fb, 0x8ac3, 0x8bfe, 0x8c09, 0x8c24,
- 0x8ce2, 0x8e3f, 0x8f5a, 0x8f5e, 0x8f77, 0x8fb1, 0x8fd5, 0x912a,
- 0x92d2, 0x94e8, 0x94ff, 0x95ad, 0x95c1, 0x9658, 0x96bf, 0x9762,
- 0xfe5e, 0xfe63, 0xfe7c
+ 0x300a, 0x300c, 0x300d, 0x3010, 0x3012, 0x3013, 0x3014, 0x3015,
+ 0x3016, 0x3017, 0x3018, 0x301c, 0x301d, 0x301e, 0x3020, 0x3021,
+ 0x3023, 0x3024, 0x3025, 0x3026, 0x302a, 0x302d, 0x302e, 0x3030,
+ 0x3032, 0x3033, 0x3034, 0x3036, 0x3038, 0x303a, 0x303b, 0x303c,
+ 0x303d, 0x303e, 0x303f, 0x3040, 0x3042, 0x3044, 0x3046, 0x3047,
+ 0x3048, 0x3049, 0x304a, 0x304c, 0x3050, 0x3059, 0x4d5d, 0x4d67,
+ 0x4d6a, 0x4d8a, 0x4de3, 0x4de8, 0x4e28, 0x4e53, 0x4eab, 0x4eb9,
+ 0x4edc, 0x4f12, 0x50aa, 0x50c2, 0x50c9, 0x50ce, 0x5157, 0x517a,
+ 0x5186, 0x5193, 0x51a7, 0x51f8, 0x51fc, 0x51fd, 0x5216, 0x5273,
+ 0x52b5, 0x5333, 0x5334, 0x534c, 0x5365, 0x536a, 0x53a7, 0x53c5,
+ 0x54ac, 0x563b, 0x5685, 0x578e, 0x5866, 0x5884, 0x588e, 0x5ab5,
+ 0x5ae9, 0x5af7, 0x5b23, 0x5d60, 0x5e72, 0x5f06, 0x5f22, 0x5f35,
+ 0x6022, 0x606c, 0x616d, 0x619d, 0x61fb, 0x6264, 0x6302, 0x64b4,
+ 0x64cd, 0x650d, 0x6516, 0x653f, 0x656b, 0x6651, 0x665d, 0x6666,
+ 0x667c, 0x6799, 0x6879, 0x6976, 0x6986, 0x6abf, 0x6ac0, 0x6c32,
+ 0x6c45, 0x6c9b, 0x6d65, 0x6ded, 0x6df3, 0x7017, 0x707e, 0x71a5,
+ 0x747c, 0x7485, 0x748e, 0x7498, 0x764b, 0x7742, 0x7817, 0x78de,
+ 0x7935, 0x7c61, 0x7c68, 0x7c9f, 0x7ca9, 0x7cf7, 0x7ecf, 0x805a,
+ 0x8151, 0x87a9, 0x8864, 0x88de, 0x88ec, 0x88f7, 0x8940, 0x895d,
+ 0x898a, 0x8999, 0x89c3, 0x89ea, 0x89fb, 0x8ac3, 0x8bfe, 0x8c09,
+ 0x8c24, 0x8ce2, 0x8e3f, 0x8f5a, 0x8f5e, 0x8f77, 0x8fb1, 0x8fd5,
+ 0x912a, 0x92d2, 0x94e8, 0x94ff, 0x95ad, 0x95c1, 0x9658, 0x96bf,
+ 0x9762, 0xfe5e, 0xfe63, 0xfe7c
};
/*Collect the unicode lists and glyph_id offsets*/
@@ -3516,7 +3528,7 @@ static const lv_font_fmt_txt_cmap_t cmaps[] = {
},
{
.range_start = 163, .range_length = 65149, .glyph_id_start = 96,
- .unicode_list = unicode_list_1, .glyph_id_ofs_list = NULL, .list_length = 227, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
+ .unicode_list = unicode_list_1, .glyph_id_ofs_list = NULL, .list_length = 228, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
}
};
@@ -4449,9 +4461,9 @@ static const uint16_t kern_pair_glyph_ids[] = {
104, 120,
104, 130,
104, 148,
- 104, 167,
104, 168,
- 104, 170,
+ 104, 169,
+ 104, 171,
106, 100,
106, 125,
107, 100,
@@ -4473,7 +4485,7 @@ static const uint16_t kern_pair_glyph_ids[] = {
114, 119,
114, 120,
114, 145,
- 114, 170,
+ 114, 171,
116, 126,
117, 100,
117, 126,
@@ -4513,8 +4525,8 @@ static const uint16_t kern_pair_glyph_ids[] = {
129, 100,
129, 118,
130, 118,
- 130, 158,
- 130, 173,
+ 130, 159,
+ 130, 174,
131, 100,
131, 118,
131, 119,
@@ -4530,160 +4542,171 @@ static const uint16_t kern_pair_glyph_ids[] = {
136, 145,
136, 146,
136, 150,
- 136, 153,
- 136, 156,
- 136, 164,
+ 136, 151,
+ 136, 154,
+ 136, 157,
136, 165,
- 136, 170,
- 136, 174,
+ 136, 166,
+ 136, 171,
136, 175,
136, 176,
- 136, 183,
- 136, 187,
+ 136, 177,
+ 136, 184,
136, 188,
+ 136, 189,
138, 100,
138, 141,
138, 145,
138, 146,
- 138, 151,
138, 152,
- 138, 154,
+ 138, 153,
138, 155,
- 138, 159,
- 138, 164,
+ 138, 156,
+ 138, 160,
138, 165,
- 138, 175,
+ 138, 166,
+ 138, 176,
139, 100,
142, 100,
143, 100,
144, 100,
- 144, 151,
- 144, 187,
+ 144, 152,
+ 144, 188,
145, 100,
145, 140,
145, 145,
145, 146,
- 145, 151,
145, 152,
- 145, 154,
+ 145, 153,
145, 155,
- 145, 164,
+ 145, 156,
145, 165,
- 145, 175,
+ 145, 166,
145, 176,
- 145, 183,
+ 145, 177,
+ 145, 184,
146, 100,
146, 145,
146, 146,
- 146, 175,
+ 146, 176,
147, 139,
148, 100,
- 148, 151,
- 148, 164,
+ 148, 152,
148, 165,
- 148, 175,
+ 148, 166,
+ 148, 176,
149, 100,
- 149, 151,
- 149, 175,
+ 149, 152,
+ 149, 176,
150, 100,
- 150, 164,
150, 165,
- 151, 170,
- 151, 173,
- 153, 176,
- 154, 100,
- 154, 176,
+ 150, 166,
+ 151, 100,
+ 151, 155,
+ 151, 156,
+ 151, 165,
+ 151, 166,
+ 151, 179,
+ 151, 180,
+ 152, 171,
+ 152, 174,
+ 154, 177,
155, 100,
- 155, 150,
- 155, 176,
+ 155, 177,
156, 100,
- 156, 175,
- 156, 178,
+ 156, 150,
+ 156, 151,
+ 156, 177,
157, 100,
+ 157, 176,
+ 157, 179,
158, 100,
- 158, 175,
159, 100,
- 159, 137,
- 159, 175,
+ 159, 176,
160, 100,
160, 137,
- 160, 175,
+ 160, 176,
161, 100,
+ 161, 137,
+ 161, 176,
162, 100,
- 163, 147,
- 164, 161,
- 164, 162,
- 164, 187,
- 165, 161,
+ 163, 100,
+ 164, 147,
165, 162,
- 165, 187,
- 166, 137,
- 167, 100,
+ 165, 163,
+ 165, 188,
+ 166, 162,
+ 166, 163,
+ 166, 188,
167, 137,
- 167, 175,
- 167, 187,
168, 100,
168, 137,
+ 168, 176,
+ 168, 188,
169, 100,
169, 137,
- 169, 179,
- 170, 151,
- 170, 152,
- 173, 100,
- 175, 167,
- 175, 168,
- 175, 169,
- 175, 181,
- 178, 100,
+ 170, 100,
+ 170, 137,
+ 170, 180,
+ 171, 152,
+ 171, 153,
+ 174, 100,
+ 176, 168,
+ 176, 169,
+ 176, 170,
+ 176, 182,
179, 100,
- 179, 136,
- 179, 184,
- 181, 100,
- 181, 150,
- 181, 151,
- 181, 152,
- 181, 164,
- 181, 165,
- 181, 175,
- 181, 176,
+ 180, 100,
+ 180, 136,
+ 180, 185,
182, 100,
- 183, 143,
- 183, 147,
- 183, 175,
- 183, 187,
- 184, 175,
- 186, 100,
- 186, 137,
- 186, 164,
- 186, 165,
+ 182, 150,
+ 182, 151,
+ 182, 152,
+ 182, 153,
+ 182, 165,
+ 182, 166,
+ 182, 176,
+ 182, 177,
+ 183, 100,
+ 184, 143,
+ 184, 147,
+ 184, 176,
+ 184, 188,
+ 185, 176,
187, 100,
- 187, 151,
- 187, 152,
- 187, 163,
- 187, 167,
- 187, 168,
- 187, 169,
- 187, 175,
- 187, 176,
+ 187, 137,
+ 187, 165,
+ 187, 166,
188, 100,
- 188, 119,
- 188, 120,
- 188, 136,
- 188, 137,
- 188, 148,
- 188, 149,
- 188, 150,
- 188, 151,
188, 152,
- 188, 158,
+ 188, 153,
188, 164,
- 188, 165,
- 188, 167,
188, 168,
188, 169,
- 188, 175,
+ 188, 170,
188, 176,
- 188, 187
+ 188, 177,
+ 189, 100,
+ 189, 119,
+ 189, 120,
+ 189, 136,
+ 189, 137,
+ 189, 148,
+ 189, 149,
+ 189, 150,
+ 189, 151,
+ 189, 152,
+ 189, 153,
+ 189, 159,
+ 189, 165,
+ 189, 166,
+ 189, 168,
+ 189, 169,
+ 189, 170,
+ 189, 176,
+ 189, 177,
+ 189, 188
};
/* Kerning between the respective left and right glyphs
@@ -4814,33 +4837,34 @@ static const int8_t kern_pair_values[] = {
-9, -18, -13, -9, -9, -13, -13, -18,
4, -18, -9, -18, 4, -9, -13, -13,
-22, -9, -22, -22, -22, -45, -9, -22,
- -22, -22, -18, -9, -9, -18, -9, -9,
- -9, -31, -22, -4, -18, -27, -9, -4,
- -9, -9, -13, -13, -18, -18, -9, -9,
- -9, -9, -13, -22, -9, -18, -13, -13,
- -40, -4, -18, -18, -13, -9, -18, -18,
- -22, -22, -36, -18, -13, -31, -9, -9,
- -9, -18, -40, -9, -18, -18, -9, -36,
- -4, -9, -9, -13, -13, -31, -13, -9,
- -13, -13, -22, 9, -13, -27, -9, -4,
- -4, -36, -9, -13, -27, -13, -13, -31,
- -9, -9, -18, -9, 13, 13, 22, 13,
- 13, 22, -9, -18, -9, -13, 9, -13,
- -13, -13, -13, -9, 9, 9, -22, -27,
- -27, -27, -22, -9, -9, -9, -9, -9,
- -9, -9, -9, -4, -4, -13, -13, -27,
- -13, -9, -9, -9, -9, -27, -13, -9,
- -9, -27, -9, -9, -9, -13, -13, -13,
- -9, -13, -4, -27, -27, -18, -18, -9,
- -9, -9, -22, -22, -9, -4, -4, -27,
- -27, -27, -13, -18, -22
+ -22, -22, -18, -18, -9, -9, -18, -9,
+ -9, -9, -31, -22, -4, -18, -27, -9,
+ -4, -9, -9, -13, -13, -18, -18, -9,
+ -9, -9, -9, -13, -22, -9, -18, -13,
+ -13, -40, -4, -18, -18, -13, -9, -18,
+ -18, -22, -22, -36, -18, -13, -31, -9,
+ -9, -9, -18, -40, -9, -18, -18, -9,
+ -36, -4, -9, -9, -13, -13, -13, -9,
+ -9, -27, -27, -22, -31, -31, -13, -9,
+ -13, -13, -22, 9, 9, -13, -27, -9,
+ -4, -4, -36, -9, -13, -27, -13, -13,
+ -31, -9, -9, -18, -9, 13, 13, 22,
+ 13, 13, 22, -9, -18, -9, -13, 9,
+ -13, -13, -13, -13, -9, 9, 9, -22,
+ -27, -27, -27, -22, -9, -9, -9, -9,
+ -9, -9, -9, -9, -9, -4, -4, -13,
+ -13, -27, -13, -9, -9, -9, -9, -27,
+ -13, -9, -9, -27, -9, -9, -9, -13,
+ -13, -13, -9, -13, -4, -27, -27, -18,
+ -18, -9, -9, -9, -9, -22, -22, -9,
+ -4, -4, -27, -27, -27, -13, -18, -22
};
/*Collect the kern pair's data in one place*/
static const lv_font_fmt_txt_kern_pair_t kern_pairs = {
.glyph_ids = kern_pair_glyph_ids,
.values = kern_pair_values,
- .pair_cnt = 1157,
+ .pair_cnt = 1168,
.glyph_ids_size = 1
};
diff --git a/src/ui/gui_chain/gui_btc.c b/src/ui/gui_chain/gui_btc.c
index 98ae253..1a4aeb7 100644
--- a/src/ui/gui_chain/gui_btc.c
+++ b/src/ui/gui_chain/gui_btc.c
@@ -173,8 +173,8 @@ static UREncodeResult *BtcSignPsbtMultisig(void *data, uint8_t *seed, int len, u
#ifdef BTC_ONLY
UREncodeResult *encodeResult = NULL;
MultisigSignResult *result = !GuiGetCurrentTransactionNeedSign()
- ? btc_export_multisig_psbt(data)
- : btc_sign_multisig_psbt(data, seed, len, mfp, mfpLen);
+ ? btc_export_multisig_psbt(data)
+ : btc_sign_multisig_psbt(data, seed, len, mfp, mfpLen);
if (result) {
encodeResult = result->ur_result;
GuiMultisigTransactionSignatureSetSignStatus(result->sign_status, result->is_completed, result->psbt_hex, result->psbt_len);
diff --git a/src/ui/gui_chain/multi/web3/gui_sol.c b/src/ui/gui_chain/multi/web3/gui_sol.c
index ce340ad..8e4d242 100644
--- a/src/ui/gui_chain/multi/web3/gui_sol.c
+++ b/src/ui/gui_chain/multi/web3/gui_sol.c
@@ -1328,8 +1328,8 @@ static void GuiShowSolTxInstructionsOverview(lv_obj_t *parent, PtrT_DisplaySolan
lv_obj_t *data_label = GuiCreateIllustrateLabel(container, buff);
lv_label_set_recolor(data_label, true);
// lv_obj_align_to(data_label, orderLabel, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 10);
- lv_obj_align_to(data_label, lv_obj_get_child(lv_obj_get_parent(data_label),
- lv_obj_get_child_cnt(lv_obj_get_parent(data_label)) - 2), LV_ALIGN_OUT_BOTTOM_LEFT, 0, 10);
+ lv_obj_align_to(data_label, lv_obj_get_child(lv_obj_get_parent(data_label),
+ lv_obj_get_child_cnt(lv_obj_get_parent(data_label)) - 2), LV_ALIGN_OUT_BOTTOM_LEFT, 0, 10);
// program address label
snprintf_s(buff, BUFFER_SIZE_128, "#4b4b4b programAddress# %s", overview_instructions->data[i].program_address);
diff --git a/src/ui/gui_views/btc_only/multi_sig/gui_multisig_transaction_signature_view.c b/src/ui/gui_views/btc_only/multi_sig/gui_multisig_transaction_signature_view.c
index 6d7a204..8697c7c 100644
--- a/src/ui/gui_views/btc_only/multi_sig/gui_multisig_transaction_signature_view.c
+++ b/src/ui/gui_views/btc_only/multi_sig/gui_multisig_transaction_signature_view.c
@@ -5,25 +5,15 @@
#include "gui_multisig_transaction_signature_widgets.h"
#include "gui_lock_widgets.h"
-static int32_t GuiMultisigTransactionSignatureViewInit(void)
-{
- GuiMultisigTransactionSignaureWidgetsInit();
- return SUCCESS_CODE;
-}
-
-static int32_t GuiMultisigTransactionSignatureViewDeInit(void)
-{
- GuiMultisigTransactionSignaureWidgetsDeInit();
- return SUCCESS_CODE;
-}
-
int32_t GuiMultisigTransactionSignatureViewEventProcess(void *self, uint16_t usEvent, void *param, uint16_t usLen)
{
switch (usEvent) {
case GUI_EVENT_OBJ_INIT:
- return GuiMultisigTransactionSignatureViewInit();
+ GuiMultisigTransactionSignaureWidgetsInit();
+ break;
case GUI_EVENT_OBJ_DEINIT:
- return GuiMultisigTransactionSignatureViewDeInit();
+ GuiMultisigTransactionSignaureWidgetsDeInit();
+ break;
case GUI_EVENT_REFRESH:
GuiMultisigTransactionSignaureWidgetsRefresh();
break;
diff --git a/src/ui/gui_views/gui_views.c b/src/ui/gui_views/gui_views.c
index fa3b096..e90a55d 100644
--- a/src/ui/gui_views/gui_views.c
+++ b/src/ui/gui_views/gui_views.c
@@ -313,6 +313,10 @@ void *GuiCreateErrorCodeWindow(int32_t errCode, lv_obj_t **param, ErrorWindowCal
titleText = _("firmware_update_sd_failed_access_title");
descText = _("firmware_update_sd_failed_access_desc");
break;
+ case ERR_SIGN_MESSAGE_INVALID_CHARACTERS:
+ titleText = _("sign_message_invalid_characters_title");
+ descText = _("sign_message_invalid_characters_desc");
+ break;
}
lv_obj_t *cont = GuiCreateConfirmHintBox(imgSrc, titleText, descText, NULL, _("OK"), WHITE_COLOR_OPA20);
diff --git a/src/ui/gui_widgets/gui_scan_widgets.c b/src/ui/gui_widgets/gui_scan_widgets.c
index 6c9b9ad..90b03f0 100644
--- a/src/ui/gui_widgets/gui_scan_widgets.c
+++ b/src/ui/gui_widgets/gui_scan_widgets.c
@@ -167,7 +167,12 @@ void GuiScanResult(bool result, void *param)
}
GuiModelCheckTransaction(g_qrcodeViewType);
} else {
- ThrowError(ERR_INVALID_QRCODE);
+ UrViewType_t *urViewType = (UrViewType_t *)param;
+ if (urViewType->viewType == InvalidMessage) {
+ ThrowError(ERR_SIGN_MESSAGE_INVALID_CHARACTERS);
+ } else {
+ ThrowError(ERR_INVALID_QRCODE);
+ }
}
}
diff --git a/src/ui/lv_i18n/data.csv b/src/ui/lv_i18n/data.csv
index a75dcca..dcd4765 100644
--- a/src/ui/lv_i18n/data.csv
+++ b/src/ui/lv_i18n/data.csv
@@ -1056,3 +1056,5 @@ Wallet Profile,24,wallet_profile_mid_btn,Wallet Profile,Профиль коше
,24,enable_passphrase,Enable Passphrase,Включить пароль,패스프레이즈 활성화,启用密码短语,Habilitar frase de contraseña,Passphrase aktivieren,パスフレーズを有効にする
,24,disable_passphrase,Disable Passphrase,Отключить пароль,패스프레이즈 비활성화,禁用密码短语,Deshabilitar frase de contraseña,Passphrase deaktivieren,パスフレーズを無効にする,
,20,ton_assets_manage_notice,"The TON wallet does not support adding other mainnets like Bitcoin or Ethereum due to incompatible seed phrase.","TON кошелек не поддерживает добавление других основных сетей, таких как Bitcoin или Ethereum, из-за несовместимой сид-фразы.","TON 지갑은 호환되지 않는 시드 구문으로 인해 Bitcoin이나 Ethereum과 같은 다른 메인넷 추가를 지원하지 않습니다.","TON钱包不支持添加其他主网(如比特币或以太坊),因为助记词不兼容。","La billetera TON no admite agregar otras redes principales como Bitcoin o Ethereum debido a la frase semilla incompatible.","Die TON-Wallet unterstützt das Hinzufügen anderer Mainnets wie Bitcoin oder Ethereum aufgrund inkompatibler Seed-Phrasen nicht.","TONウォレットは、互換性のないシードフレーズのため、BitcoinやEthereumなどの他のメインネットの追加をサポートしていません。"
+,28,sign_message_invalid_characters_title,"Invalid Message","Недопустимое сообщение","잘못된 메시지","无效消息","Mensaje inválido","Ungültige Nachricht","無効なメッセージ"
+,20,sign_message_invalid_characters_desc,"This message contains invalid characters. Please review the message content and try again.","Это сообщение содержит недопустимые символы. Пожалуйста, проверьте содержимое сообщения и попробуйте снова.","이 메시지에는 잘못된 문자가 포함되어 있습니다. 메시지 내용을 검토하고 다시 시도하세요.","此消息包含无效字符。请检查消息内容并重试。","Este mensaje contiene caracteres inválidos. Por favor, revise el contenido del mensaje e inténtelo de nuevo.","Diese Nachricht enthält ungültige Zeichen. Bitte überprüfen Sie den Nachrichteninhalt und versuchen Sie es erneut.","このメッセージには無効な文字が含まれています。メッセージの内容を確認して、もう一度お試しください。"
\ No newline at end of file
diff --git a/src/ui/lv_i18n/lv_i18n.c b/src/ui/lv_i18n/lv_i18n.c
index 74bb07f..92d34d4 100644
--- a/src/ui/lv_i18n/lv_i18n.c
+++ b/src/ui/lv_i18n/lv_i18n.c
@@ -748,6 +748,8 @@ const static lv_i18n_phrase_t en_singulars[] = {
{"sign_eth_permit_warn", "Signing Permit grants others access to your tokens, ensure safety."},
{"sign_message_check_address", "Please carefully verify and compare the address."},
{"sign_message_hash_notice_content", "Data of transaction is too large for the device to parse, please compare the Hash with the software wallet."},
+ {"sign_message_invalid_characters_desc", "This message contains invalid characters. Please review the message content and try again."},
+ {"sign_message_invalid_characters_title", "Invalid Message"},
{"sign_transaction", "Transaction Signing"},
{"sign_transaction_desc", "Please Wait..."},
{"single_backup_choose_backup_desc", "Select the preferred method for backing up your seed phrase."},
@@ -1698,6 +1700,8 @@ const static lv_i18n_phrase_t de_singulars[] = {
{"sign_eth_permit_warn", "Die Unterzeichnung der Permit gewährt anderen Zugriff auf Ihre Token, stellen Sie die Sicherheit sicher."},
{"sign_message_check_address", "Bitte überprüfen und vergleichen Sie die Adresse sorgfältig."},
{"sign_message_hash_notice_content", "Die Daten der Transaktion sind zu groß für das Gerät, um sie zu analysieren. Bitte vergleichen Sie den Hash mit der Software-Wallet."},
+ {"sign_message_invalid_characters_desc", "Diese Nachricht enthält ungültige Zeichen. Bitte überprüfen Sie den Nachrichteninhalt und versuchen Sie es erneut."},
+ {"sign_message_invalid_characters_title", "Ungültige Nachricht"},
{"sign_transaction", "Transaktionsunterzeichnung"},
{"sign_transaction_desc", "Bitte warten..."},
{"single_backup_choose_backup_desc", "Wählen Sie die bevorzugte Methode zum Sichern Ihrer Seed-Phrase aus."},
@@ -2648,6 +2652,8 @@ const static lv_i18n_phrase_t es_singulars[] = {
{"sign_eth_permit_warn", "La firma del Permit otorga a otros acceso a sus tokens, asegure la seguridad."},
{"sign_message_check_address", "Por favor, verifique cuidadosamente y compare la dirección."},
{"sign_message_hash_notice_content", "Los datos de la transacción son demasiado grandes para que el dispositivo lo analice, por favor, compare el hash con la billetera de software."},
+ {"sign_message_invalid_characters_desc", "Este mensaje contiene caracteres inválidos. Por favor, revise el contenido del mensaje e inténtelo de nuevo."},
+ {"sign_message_invalid_characters_title", "Mensaje inválido"},
{"sign_transaction", "Firma de transacción"},
{"sign_transaction_desc", "Favor de esperar..."},
{"single_backup_choose_backup_desc", "Selecciona el método preferido para hacer una copia de seguridad de tu frase semilla"},
@@ -3595,6 +3601,8 @@ const static lv_i18n_phrase_t ja_singulars[] = {
{"sign_eth_permit_warn", "Permitの署名により他者があなたのトークンにアクセスできるようになります。安全性を確認してください."},
{"sign_message_check_address", "住所を注意深く確認して比較してください"},
{"sign_message_hash_notice_content", "トランザクションのデータがデバイスで解析できないため、ソフトウェアウォレットのハッシュと比較してください。"},
+ {"sign_message_invalid_characters_desc", "このメッセージには無効な文字が含まれています。メッセージの内容を確認して、もう一度お試しください。"},
+ {"sign_message_invalid_characters_title", "無効なメッセージ"},
{"sign_transaction", "取引の署名"},
{"sign_transaction_desc", "お待ちください..."},
{"single_backup_choose_backup_desc", "シードフレーズのバックアップ方法を選択してください."},
@@ -4540,6 +4548,8 @@ const static lv_i18n_phrase_t ko_singulars[] = {
{"sign_eth_permit_warn", "Permit 서명은 다른 사람에게 토큰에 대한 접근 권한을 부여합니다. 안전을 확인하세요."},
{"sign_message_check_address", "주소를 신중하게 확인하고 비교해주세요."},
{"sign_message_hash_notice_content", "트랜잭션 데이터가 디바이스에서 파싱하기에 너무 큽니다. 소프트웨어 지갑의 해시와 비교하세요."},
+ {"sign_message_invalid_characters_desc", "이 메시지에는 잘못된 문자가 포함되어 있습니다. 메시지 내용을 검토하고 다시 시도하세요."},
+ {"sign_message_invalid_characters_title", "잘못된 메시지"},
{"sign_transaction", "트랜잭션 서명"},
{"sign_transaction_desc", "기다려주세요..."},
{"single_backup_choose_backup_desc", "시드 구문를 백업할 때 선호하는 방법을 선택합니다."},
@@ -5485,6 +5495,8 @@ const static lv_i18n_phrase_t ru_singulars[] = {
{"sign_eth_permit_warn", "Подписание Permit предоставляет другим доступ к вашим токенам, обеспечьте безопасность."},
{"sign_message_check_address", "Пожалуйста, тщательно проверьте и сравните адрес"},
{"sign_message_hash_notice_content", "Данные транзакции слишком велики для устройства для анализа, пожалуйста, сравните хэш с программным кошельком."},
+ {"sign_message_invalid_characters_desc", "Это сообщение содержит недопустимые символы. Пожалуйста, проверьте содержимое сообщения и попробуйте снова."},
+ {"sign_message_invalid_characters_title", "Недопустимое сообщение"},
{"sign_transaction", "Подписание транзакции"},
{"sign_transaction_desc", "Подождите..."},
{"single_backup_choose_backup_desc", "Выберите метод резервного копирования сид фразы."},
@@ -6438,6 +6450,8 @@ const static lv_i18n_phrase_t zh_cn_singulars[] = {
{"sign_eth_permit_warn", "签署 Permit 将授予他人访问您代币的权限,请确保安全."},
{"sign_message_check_address", "请仔细核对和比较地址"},
{"sign_message_hash_notice_content", "交易数据太大,设备无法解析,请与软件钱包中的哈希值进行比较。"},
+ {"sign_message_invalid_characters_desc", "此消息包含无效字符。请检查消息内容并重试。"},
+ {"sign_message_invalid_characters_title", "无效消息"},
{"sign_transaction", "签名"},
{"sign_transaction_desc", "请稍等..."},
{"single_backup_choose_backup_desc", "请选择您需要的方式来备份助记词."},
Why this scored 27/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.