add t9 input engine

This commit is contained in:
xianjimli 2020-04-21 10:22:05 +08:00
parent 8df353f3c2
commit bf26e67fbf
79 changed files with 970178 additions and 6323 deletions

View File

@ -35,6 +35,9 @@ TK_DEMO_ROOT = joinPath(TK_ROOT, 'demos')
GTEST_ROOT = joinPath(TK_ROOT, '3rd/gtest/googletest')
#INPUT_ENGINE='null'
#INPUT_ENGINE='spinyin'
#INPUT_ENGINE='t9'
#INPUT_ENGINE='t9ext'
INPUT_ENGINE='pinyin'
VGCANVAS='NANOVG'
@ -84,6 +87,17 @@ GRAPHIC_BUFFER='default'
#only for c compiler flags
COMMON_CFLAGS=''
if INPUT_ENGINE == 't9':
COMMON_CCFLAGS = COMMON_CCFLAGS + ' -DWITH_IME_T9 '
elif INPUT_ENGINE == 't9ext' :
COMMON_CCFLAGS = COMMON_CCFLAGS + ' -DWITH_IME_T9EXT'
elif INPUT_ENGINE == 'pinyin' :
COMMON_CCFLAGS = COMMON_CCFLAGS + ' -DWITH_IME_PINYIN '
elif INPUT_ENGINE == 'spinyin' :
COMMON_CCFLAGS = COMMON_CCFLAGS + ' -DWITH_IME_SPINYIN '
elif INPUT_ENGINE == 'null' :
COMMON_CCFLAGS = COMMON_CCFLAGS + ' -DWITH_IME_NULL '
if LCD == 'SDL_GPU':
COMMON_CCFLAGS = COMMON_CCFLAGS + ' -DWITH_NANOVG_GPU -DWITH_VGCANVAS_LCD'
COMMON_CCFLAGS=COMMON_CCFLAGS+' -DWITH_STB_FONT '

View File

@ -71,7 +71,7 @@ static ret_t widget_set_theme_without_file_system(widget_t* widget, const char*
log_debug("theme changed: %s\n", name);
return RET_OK;
#else /*WITH_FS_RES*/
#else /*WITH_FS_RES*/
return RET_NOT_IMPL;
#endif /*WITH_FS_RES*/
}

File diff suppressed because it is too large Load Diff

View File

@ -1,67 +1,97 @@
TK_CONST_DATA_ALIGN(const unsigned char style_keyboard[]) = {
0x03,0x00,0x00,0x01,0x04,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x6b,0x65,0x79,0x62,0x6f,0x61,0x72,0x64,
0x03,0x00,0x00,0x01,0x41,0x0b,0x00,0x00,0x00,0x00,0x00,0x00,0x6b,0x65,0x79,0x62,0x6f,0x61,0x72,0x64,
0x00,0x64,0x61,0x74,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xfd,0xfc,0xfb,0xfa,0x00,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x20,0x05,0x00,0x00,
0x00,0x00,0x00,0x00,0xfd,0xfc,0xfb,0xfa,0x00,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x78,0x07,0x00,0x00,
0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,
0x74,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5d,0x05,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xb5,0x07,0x00,0x00,
0x70,0x72,0x65,0x73,0x73,0x65,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,
0x74,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9a,0x05,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf2,0x07,0x00,0x00,
0x6f,0x76,0x65,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,
0x74,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd7,0x05,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2f,0x08,0x00,0x00,
0x64,0x69,0x73,0x61,0x62,0x6c,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,
0x74,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x06,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6c,0x08,0x00,0x00,
0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x61,0x6e,0x64,0x69,0x64,0x61,0x74,
0x65,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x06,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x83,0x08,0x00,0x00,
0x70,0x72,0x65,0x73,0x73,0x65,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x61,0x6e,0x64,0x69,0x64,0x61,0x74,
0x65,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x68,0x06,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x08,0x00,0x00,
0x6f,0x76,0x65,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x61,0x6e,0x64,0x69,0x64,0x61,0x74,
0x65,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xa5,0x06,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfd,0x08,0x00,0x00,
0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x61,0x6e,0x64,0x69,0x64,0x61,0x74,
0x65,0x73,0x5f,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x09,0x00,0x00,
0x70,0x72,0x65,0x73,0x73,0x65,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x61,0x6e,0x64,0x69,0x64,0x61,0x74,
0x65,0x73,0x5f,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x51,0x09,0x00,0x00,
0x6f,0x76,0x65,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x61,0x6e,0x64,0x69,0x64,0x61,0x74,
0x65,0x73,0x5f,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8e,0x09,0x00,0x00,
0x66,0x6f,0x63,0x75,0x73,0x65,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x61,0x6e,0x64,0x69,0x64,0x61,0x74,
0x65,0x73,0x5f,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xb6,0x09,0x00,0x00,
0x64,0x69,0x73,0x61,0x62,0x6c,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x61,0x6e,0x64,0x69,0x64,0x61,0x74,
0x65,0x73,0x5f,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xde,0x09,0x00,0x00,
0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x6c,0x6f,0x73,0x65,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf7,0x06,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x0a,0x00,0x00,
0x70,0x72,0x65,0x73,0x73,0x65,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x6c,0x6f,0x73,0x65,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5e,0x07,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x0a,0x00,0x00,
0x6f,0x76,0x65,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x6c,0x6f,0x73,0x65,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc5,0x07,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x0a,0x00,0x00,
0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x63,0x61,0x6e,0x64,0x69,0x64,0x61,0x74,0x65,0x73,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xda,0x07,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x13,0x0b,0x00,0x00,
0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x6b,0x65,0x79,0x62,0x6f,0x61,0x72,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xef,0x07,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x0b,0x00,0x00,
0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x74,0x72,0x61,0x6e,0x73,0x70,0x61,0x72,
0x65,0x6e,0x74,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x6b,0x65,0x79,0x62,0x6f,0x61,0x72,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2c,0x0b,0x00,0x00,
0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x6c,0x61,0x63,0x65,0x68,0x6f,0x6c,
0x64,0x65,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
@ -86,21 +116,33 @@ TK_CONST_DATA_ALIGN(const unsigned char style_keyboard[]) = {
0xa0,0xa0,0xa0,0xff,0x03,0x00,0x00,0x00,0x07,0x0b,0x04,0x00,0x74,0x65,0x78,0x74,0x5f,0x63,0x6f,0x6c,
0x6f,0x72,0x00,0x00,0x00,0x00,0xff,0x07,0x09,0x04,0x00,0x62,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x00,
0xe0,0xe0,0xe0,0xff,0x07,0x0d,0x04,0x00,0x62,0x6f,0x72,0x64,0x65,0x72,0x5f,0x63,0x6f,0x6c,0x6f,0x72,
0x00,0xa0,0xa0,0xa0,0xff,0x04,0x00,0x00,0x00,0x07,0x0b,0x04,0x00,0x74,0x65,0x78,0x74,0x5f,0x63,0x6f,
0x6c,0x6f,0x72,0x00,0x00,0x00,0x00,0xff,0x07,0x0d,0x04,0x00,0x74,0x65,0x78,0x74,0x5f,0x61,0x6c,0x69,
0x67,0x6e,0x5f,0x68,0x00,0x01,0x00,0x00,0x00,0x07,0x0d,0x04,0x00,0x74,0x65,0x78,0x74,0x5f,0x61,0x6c,
0x69,0x67,0x6e,0x5f,0x76,0x00,0x01,0x00,0x00,0x00,0x07,0x09,0x04,0x00,0x62,0x67,0x5f,0x63,0x6f,0x6c,
0x6f,0x72,0x00,0xf0,0xf0,0xf0,0xff,0x05,0x00,0x00,0x00,0x07,0x0b,0x04,0x00,0x74,0x65,0x78,0x74,0x5f,
0x63,0x6f,0x6c,0x6f,0x72,0x00,0x00,0x00,0x00,0xff,0x07,0x0d,0x04,0x00,0x74,0x65,0x78,0x74,0x5f,0x61,
0x6c,0x69,0x67,0x6e,0x5f,0x68,0x00,0x01,0x00,0x00,0x00,0x07,0x0d,0x04,0x00,0x74,0x65,0x78,0x74,0x5f,
0x61,0x6c,0x69,0x67,0x6e,0x5f,0x76,0x00,0x01,0x00,0x00,0x00,0x07,0x09,0x04,0x00,0x62,0x67,0x5f,0x63,
0x6f,0x6c,0x6f,0x72,0x00,0xc0,0xc0,0xc0,0xff,0x07,0x0d,0x04,0x00,0x62,0x6f,0x72,0x64,0x65,0x72,0x5f,
0x63,0x6f,0x6c,0x6f,0x72,0x00,0xa0,0xa0,0xa0,0xff,0x05,0x00,0x00,0x00,0x07,0x0b,0x04,0x00,0x74,0x65,
0x00,0xa0,0xa0,0xa0,0xff,0x01,0x00,0x00,0x00,0x07,0x0b,0x04,0x00,0x74,0x65,0x78,0x74,0x5f,0x63,0x6f,
0x6c,0x6f,0x72,0x00,0x00,0x00,0x00,0xff,0x03,0x00,0x00,0x00,0x07,0x0b,0x04,0x00,0x74,0x65,0x78,0x74,
0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x00,0x00,0x00,0x00,0xff,0x07,0x09,0x04,0x00,0x62,0x67,0x5f,0x63,0x6f,
0x6c,0x6f,0x72,0x00,0xc0,0xc0,0xc0,0xff,0x07,0x0d,0x04,0x00,0x62,0x6f,0x72,0x64,0x65,0x72,0x5f,0x63,
0x6f,0x6c,0x6f,0x72,0x00,0xa0,0xa0,0xa0,0xff,0x03,0x00,0x00,0x00,0x07,0x0b,0x04,0x00,0x74,0x65,0x78,
0x74,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x00,0x00,0x00,0x00,0xff,0x07,0x09,0x04,0x00,0x62,0x67,0x5f,0x63,
0x6f,0x6c,0x6f,0x72,0x00,0xe0,0xe0,0xe0,0xff,0x07,0x0d,0x04,0x00,0x62,0x6f,0x72,0x64,0x65,0x72,0x5f,
0x63,0x6f,0x6c,0x6f,0x72,0x00,0xa0,0xa0,0xa0,0xff,0x02,0x00,0x00,0x00,0x07,0x0b,0x04,0x00,0x74,0x65,
0x78,0x74,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x00,0x00,0x00,0x00,0xff,0x07,0x09,0x04,0x00,0x62,0x67,0x5f,
0x63,0x6f,0x6c,0x6f,0x72,0x00,0xe0,0xe0,0xe0,0xff,0x02,0x00,0x00,0x00,0x07,0x0b,0x04,0x00,0x74,0x65,
0x78,0x74,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x00,0xd0,0xd0,0xd0,0xff,0x07,0x09,0x04,0x00,0x62,0x67,0x5f,
0x63,0x6f,0x6c,0x6f,0x72,0x00,0xbe,0xbe,0xbe,0xff,0x04,0x00,0x00,0x00,0x07,0x0b,0x04,0x00,0x74,0x65,
0x78,0x74,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x00,0x00,0x00,0x00,0xff,0x07,0x0d,0x04,0x00,0x74,0x65,0x78,
0x74,0x5f,0x61,0x6c,0x69,0x67,0x6e,0x5f,0x68,0x00,0x01,0x00,0x00,0x00,0x07,0x0d,0x04,0x00,0x74,0x65,
0x78,0x74,0x5f,0x61,0x6c,0x69,0x67,0x6e,0x5f,0x76,0x00,0x01,0x00,0x00,0x00,0x07,0x09,0x04,0x00,0x62,
0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x00,0xe0,0xe0,0xe0,0xff,0x07,0x0d,0x04,0x00,0x62,0x6f,0x72,0x64,
0x65,0x72,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x00,0xa0,0xa0,0xa0,0xff,0x01,0x00,0x00,0x00,0x07,0x09,0x04,
0x00,0x62,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x00,0xfa,0xfa,0xfa,0xff,0x01,0x00,0x00,0x00,0x07,0x09,
0x04,0x00,0x62,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x00,0xcf,0xd4,0xda,0xff,0x01,0x00,0x00,0x00,0x07,
0x09,0x04,0x00,0x62,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x00,0xf0,0xf0,0xf0,0xff,0x00,0x00,0x00,0x00,};/*2100*/
0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x00,0xf0,0xf0,0xf0,0xff,0x05,0x00,0x00,0x00,0x07,0x0b,0x04,0x00,
0x74,0x65,0x78,0x74,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x00,0x00,0x00,0x00,0xff,0x07,0x0d,0x04,0x00,0x74,
0x65,0x78,0x74,0x5f,0x61,0x6c,0x69,0x67,0x6e,0x5f,0x68,0x00,0x01,0x00,0x00,0x00,0x07,0x0d,0x04,0x00,
0x74,0x65,0x78,0x74,0x5f,0x61,0x6c,0x69,0x67,0x6e,0x5f,0x76,0x00,0x01,0x00,0x00,0x00,0x07,0x09,0x04,
0x00,0x62,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x00,0xc0,0xc0,0xc0,0xff,0x07,0x0d,0x04,0x00,0x62,0x6f,
0x72,0x64,0x65,0x72,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x00,0xa0,0xa0,0xa0,0xff,0x05,0x00,0x00,0x00,0x07,
0x0b,0x04,0x00,0x74,0x65,0x78,0x74,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x00,0x00,0x00,0x00,0xff,0x07,0x0d,
0x04,0x00,0x74,0x65,0x78,0x74,0x5f,0x61,0x6c,0x69,0x67,0x6e,0x5f,0x68,0x00,0x01,0x00,0x00,0x00,0x07,
0x0d,0x04,0x00,0x74,0x65,0x78,0x74,0x5f,0x61,0x6c,0x69,0x67,0x6e,0x5f,0x76,0x00,0x01,0x00,0x00,0x00,
0x07,0x09,0x04,0x00,0x62,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x00,0xe0,0xe0,0xe0,0xff,0x07,0x0d,0x04,
0x00,0x62,0x6f,0x72,0x64,0x65,0x72,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x00,0xa0,0xa0,0xa0,0xff,0x01,0x00,
0x00,0x00,0x07,0x09,0x04,0x00,0x62,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x00,0xfa,0xfa,0xfa,0xff,0x01,
0x00,0x00,0x00,0x07,0x09,0x04,0x00,0x62,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x00,0xcf,0xd4,0xda,0xff,
0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x09,0x04,0x00,0x62,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,
0x00,0xf0,0xf0,0xf0,0xff,0x00,0x00,0x00,0x00,};/*2929*/

View File

@ -0,0 +1,382 @@
TK_CONST_DATA_ALIGN(const unsigned char ui_kb_ascii_t9[]) = {
0x04,0x00,0x01,0x01,0x8c,0x1d,0x00,0x00,0x00,0x00,0x00,0x00,0x6b,0x62,0x5f,0x61,0x73,0x63,0x69,0x69,
0x5f,0x74,0x39,0x00,0x64,0x61,0x74,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x12,0x12,0x22,0x11,0x6b,0x65,0x79,0x62,0x6f,0x61,0x72,0x64,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,
0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x30,0x2c,
0x79,0x3d,0x62,0x6f,0x74,0x74,0x6f,0x6d,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x34,0x30,
0x25,0x29,0x00,0x74,0x68,0x65,0x6d,0x65,0x00,0x6b,0x65,0x79,0x62,0x6f,0x61,0x72,0x64,0x00,0x00,0x70,
0x61,0x67,0x65,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,
0x00,0x00,0x00,0xe4,0xff,0xff,0xff,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,
0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x30,0x2c,0x79,0x3d,0x62,0x6f,0x74,0x74,0x6f,0x6d,0x2c,
0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x2d,0x32,0x38,0x29,0x00,0x61,0x63,0x74,0x69,0x76,0x65,
0x00,0x32,0x00,0x00,0x76,0x69,0x65,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,
0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x30,0x2c,0x79,0x3d,0x30,0x2c,
0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x6e,0x61,0x6d,0x65,0x00,
0x6e,0x75,0x6d,0x62,0x65,0x72,0x00,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x5f,0x6c,0x61,0x79,0x6f,
0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x72,0x3d,0x34,0x2c,0x63,0x3d,0x35,0x2c,0x73,
0x3d,0x32,0x2c,0x6d,0x3d,0x32,0x29,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,
0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x31,0x00,0x74,0x65,0x78,0x74,0x00,
0x31,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,
0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x32,0x00,0x74,0x65,0x78,0x74,0x00,0x32,0x00,0x00,0x00,0x62,
0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,
0x6d,0x65,0x00,0x33,0x00,0x74,0x65,0x78,0x74,0x00,0x33,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x2b,0x00,
0x74,0x65,0x78,0x74,0x00,0x2b,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,
0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6b,0x65,0x79,0x3a,0x62,0x61,0x63,
0x6b,0x73,0x70,0x61,0x63,0x65,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,
0x68,0x74,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,
0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x63,0x65,0x6e,0x74,0x65,0x72,
0x2c,0x79,0x3d,0x6d,0x69,0x64,0x64,0x6c,0x65,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,
0x30,0x30,0x25,0x29,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x69,0x63,0x6f,0x6e,0x00,
0x69,0x6d,0x61,0x67,0x65,0x00,0x62,0x61,0x63,0x6b,0x73,0x70,0x61,0x63,0x65,0x00,0x00,0x00,0x00,0x62,
0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,
0x6d,0x65,0x00,0x34,0x00,0x74,0x65,0x78,0x74,0x00,0x34,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x35,0x00,
0x74,0x65,0x78,0x74,0x00,0x35,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,
0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x36,0x00,0x74,0x65,0x78,0x74,0x00,
0x36,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,
0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x2d,0x00,0x74,0x65,0x78,0x74,0x00,0x2d,0x00,0x00,0x00,0x62,
0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x70,0x61,0x67,0x65,0x3a,0x6c,0x6f,0x77,
0x65,0x72,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x74,
0x65,0x78,0x74,0x00,0x61,0x62,0x63,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,
0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x37,0x00,0x74,0x65,0x78,0x74,
0x00,0x37,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,
0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x38,0x00,0x74,0x65,0x78,0x74,0x00,0x38,0x00,0x00,0x00,
0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,
0x61,0x6d,0x65,0x00,0x39,0x00,0x74,0x65,0x78,0x74,0x00,0x39,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,
0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x2a,
0x00,0x74,0x65,0x78,0x74,0x00,0x2a,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,
0x6d,0x65,0x00,0x70,0x61,0x67,0x65,0x3a,0x75,0x70,0x70,0x65,0x72,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,
0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x41,0x42,0x43,0x00,0x00,
0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,
0x6e,0x61,0x6d,0x65,0x00,0x2e,0x00,0x74,0x65,0x78,0x74,0x00,0x2e,0x00,0x00,0x00,0x62,0x75,0x74,0x74,
0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,
0x30,0x00,0x74,0x65,0x78,0x74,0x00,0x30,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,
0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x25,0x00,0x74,0x65,0x78,
0x74,0x00,0x25,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,
0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x2f,0x00,0x74,0x65,0x78,0x74,0x00,0x2f,0x00,0x00,
0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x70,0x61,0x67,0x65,0x3a,0x73,
0x79,0x6d,0x62,0x6f,0x6c,0x73,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,
0x68,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x23,0x2b,0x3d,0x00,0x00,0x00,0x00,0x76,0x69,0x65,0x77,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,
0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,
0x6c,0x74,0x28,0x78,0x3d,0x30,0x2c,0x79,0x3d,0x30,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,
0x31,0x30,0x30,0x25,0x29,0x00,0x6e,0x61,0x6d,0x65,0x00,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x00,0x63,
0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,
0x6c,0x74,0x28,0x72,0x3d,0x34,0x2c,0x63,0x3d,0x35,0x2c,0x73,0x3d,0x32,0x2c,0x6d,0x3d,0x32,0x29,0x00,
0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,
0x6e,0x61,0x6d,0x65,0x00,0x3c,0x00,0x74,0x65,0x78,0x74,0x00,0x3c,0x00,0x00,0x00,0x62,0x75,0x74,0x74,
0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,
0x3e,0x00,0x74,0x65,0x78,0x74,0x00,0x3e,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,
0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x28,0x00,0x74,0x65,0x78,
0x74,0x00,0x28,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,
0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x29,0x00,0x74,0x65,0x78,0x74,0x00,0x29,0x00,0x00,
0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,
0x6e,0x61,0x6d,0x65,0x00,0x6b,0x65,0x79,0x3a,0x62,0x61,0x63,0x6b,0x73,0x70,0x61,0x63,0x65,0x00,0x73,
0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x00,0x69,0x6d,0x61,0x67,
0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,
0x75,0x6c,0x74,0x28,0x78,0x3d,0x63,0x65,0x6e,0x74,0x65,0x72,0x2c,0x79,0x3d,0x6d,0x69,0x64,0x64,0x6c,
0x65,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x64,0x72,0x61,
0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x69,0x63,0x6f,0x6e,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x62,0x61,
0x63,0x6b,0x73,0x70,0x61,0x63,0x65,0x00,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,
0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x7b,0x00,0x74,0x65,0x78,
0x74,0x00,0x7b,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,
0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x7d,0x00,0x74,0x65,0x78,0x74,0x00,0x7d,0x00,0x00,
0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,
0x6e,0x61,0x6d,0x65,0x00,0x5b,0x00,0x74,0x65,0x78,0x74,0x00,0x5b,0x00,0x00,0x00,0x62,0x75,0x74,0x74,
0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,
0x5d,0x00,0x74,0x65,0x78,0x74,0x00,0x5d,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,
0x61,0x6d,0x65,0x00,0x70,0x61,0x67,0x65,0x3a,0x6c,0x6f,0x77,0x65,0x72,0x00,0x73,0x74,0x79,0x6c,0x65,
0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x61,0x62,0x63,0x00,
0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,
0x00,0x6e,0x61,0x6d,0x65,0x00,0x24,0x00,0x74,0x65,0x78,0x74,0x00,0x24,0x00,0x00,0x00,0x62,0x75,0x74,
0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,
0x00,0x40,0x00,0x74,0x65,0x78,0x74,0x00,0x40,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x22,0x00,0x74,0x65,
0x78,0x74,0x00,0x22,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,
0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x27,0x00,0x74,0x65,0x78,0x74,0x00,0x27,0x00,
0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x70,0x61,0x67,0x65,0x3a,
0x75,0x70,0x70,0x65,0x72,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,
0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x41,0x42,0x43,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x23,0x00,0x74,
0x65,0x78,0x74,0x00,0x23,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,
0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x3d,0x00,0x74,0x65,0x78,0x74,0x00,0x3d,
0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,
0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x2c,0x00,0x74,0x65,0x78,0x74,0x00,0x2c,0x00,0x00,0x00,0x62,0x75,
0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,
0x65,0x00,0x3f,0x00,0x74,0x65,0x78,0x74,0x00,0x3f,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x6e,0x61,0x6d,0x65,0x00,0x70,0x61,0x67,0x65,0x3a,0x6e,0x75,0x6d,0x62,0x65,0x72,0x00,0x73,0x74,
0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x31,
0x32,0x33,0x00,0x00,0x00,0x00,0x76,0x69,0x65,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,
0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x30,0x2c,0x79,0x3d,
0x30,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x6e,0x61,0x6d,
0x65,0x00,0x6c,0x6f,0x77,0x65,0x72,0x00,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x5f,0x6c,0x61,0x79,
0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x72,0x3d,0x34,0x2c,0x63,0x3d,0x34,0x2c,
0x73,0x3d,0x32,0x2c,0x6d,0x3d,0x32,0x29,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,
0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x74,0x3a,0x2e,0x5f,
0x40,0x2f,0x25,0x00,0x74,0x65,0x78,0x74,0x00,0x2e,0x5f,0x40,0x2f,0x25,0x00,0x00,0x00,0x62,0x75,0x74,
0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,
0x00,0x6f,0x70,0x74,0x3a,0x61,0x62,0x63,0x00,0x74,0x65,0x78,0x74,0x00,0x61,0x62,0x63,0x00,0x00,0x00,
0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,
0x61,0x6d,0x65,0x00,0x6f,0x70,0x74,0x3a,0x64,0x65,0x66,0x00,0x74,0x65,0x78,0x74,0x00,0x64,0x65,0x66,
0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,
0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6b,0x65,0x79,0x3a,0x62,0x61,0x63,0x6b,0x73,0x70,0x61,0x63,0x65,
0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x00,0x69,0x6d,
0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,
0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,
0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x63,0x65,0x6e,0x74,0x65,0x72,0x2c,0x79,0x3d,0x6d,0x69,0x64,
0x64,0x6c,0x65,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x64,
0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x69,0x63,0x6f,0x6e,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,
0x62,0x61,0x63,0x6b,0x73,0x70,0x61,0x63,0x65,0x00,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x74,
0x3a,0x67,0x68,0x69,0x00,0x74,0x65,0x78,0x74,0x00,0x67,0x68,0x69,0x00,0x00,0x00,0x62,0x75,0x74,0x74,
0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,
0x6f,0x70,0x74,0x3a,0x6a,0x6b,0x6c,0x00,0x74,0x65,0x78,0x74,0x00,0x6a,0x6b,0x6c,0x00,0x00,0x00,0x62,
0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,
0x6d,0x65,0x00,0x6f,0x70,0x74,0x3a,0x6d,0x6e,0x6f,0x00,0x74,0x65,0x78,0x74,0x00,0x6d,0x6e,0x6f,0x00,
0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x70,0x61,0x67,0x65,0x3a,
0x75,0x70,0x70,0x65,0x72,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,
0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x41,0x42,0x43,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x74,
0x3a,0x70,0x71,0x72,0x73,0x00,0x74,0x65,0x78,0x74,0x00,0x70,0x71,0x72,0x73,0x00,0x00,0x00,0x62,0x75,
0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,
0x65,0x00,0x6f,0x70,0x74,0x3a,0x74,0x75,0x76,0x00,0x74,0x65,0x78,0x74,0x00,0x74,0x75,0x76,0x00,0x00,
0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,
0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x74,0x3a,0x77,0x78,0x79,0x7a,0x00,0x74,0x65,0x78,0x74,0x00,0x77,
0x78,0x79,0x7a,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x70,
0x61,0x67,0x65,0x3a,0x6e,0x75,0x6d,0x62,0x65,0x72,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,
0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x31,0x32,0x33,0x00,0x00,0x00,0x62,0x75,
0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,
0x65,0x00,0x6f,0x70,0x74,0x3a,0x2c,0x3f,0x21,0x3a,0x00,0x74,0x65,0x78,0x74,0x00,0x2c,0x3f,0x21,0x3a,
0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,
0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x63,0x6f,0x6e,0x66,0x69,0x72,0x6d,0x5f,0x70,0x72,0x65,0x65,0x64,
0x69,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x2d,0x2d,0x3e,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x73,0x70,
0x61,0x63,0x65,0x00,0x74,0x65,0x78,0x74,0x00,0x53,0x70,0x61,0x63,0x65,0x00,0x00,0x00,0x62,0x75,0x74,
0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x61,0x63,0x74,0x69,0x6f,0x6e,0x00,0x73,0x74,0x79,
0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x52,0x65,
0x74,0x75,0x72,0x6e,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,
0x70,0x61,0x67,0x65,0x3a,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,
0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x23,0x2b,0x3d,0x00,0x00,0x00,
0x00,0x76,0x69,0x65,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,
0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x30,0x2c,0x79,0x3d,0x30,0x2c,0x77,0x3d,0x31,
0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x6e,0x61,0x6d,0x65,0x00,0x75,0x70,0x70,
0x65,0x72,0x00,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,
0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x72,0x3d,0x34,0x2c,0x63,0x3d,0x34,0x2c,0x73,0x3d,0x32,0x2c,0x6d,
0x3d,0x32,0x29,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,
0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x74,0x3a,0x2e,0x5f,0x40,0x2f,0x23,0x00,0x74,
0x65,0x78,0x74,0x00,0x2e,0x5f,0x40,0x2f,0x23,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x74,0x3a,
0x41,0x42,0x43,0x00,0x74,0x65,0x78,0x74,0x00,0x41,0x42,0x43,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,
0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,
0x70,0x74,0x3a,0x44,0x45,0x46,0x00,0x74,0x65,0x78,0x74,0x00,0x44,0x45,0x46,0x00,0x00,0x00,0x62,0x75,
0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,
0x65,0x00,0x6b,0x65,0x79,0x3a,0x62,0x61,0x63,0x6b,0x73,0x70,0x61,0x63,0x65,0x00,0x73,0x74,0x79,0x6c,
0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,
0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,
0x28,0x78,0x3d,0x63,0x65,0x6e,0x74,0x65,0x72,0x2c,0x79,0x3d,0x6d,0x69,0x64,0x64,0x6c,0x65,0x2c,0x77,
0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,
0x79,0x70,0x65,0x00,0x69,0x63,0x6f,0x6e,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x62,0x61,0x63,0x6b,0x73,
0x70,0x61,0x63,0x65,0x00,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,
0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x74,0x3a,0x47,0x48,0x49,0x00,
0x74,0x65,0x78,0x74,0x00,0x47,0x48,0x49,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,
0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x74,0x3a,0x4a,
0x4b,0x4c,0x00,0x74,0x65,0x78,0x74,0x00,0x4a,0x4b,0x4c,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,
0x74,0x3a,0x4d,0x4e,0x4f,0x00,0x74,0x65,0x78,0x74,0x00,0x4d,0x4e,0x4f,0x00,0x00,0x00,0x62,0x75,0x74,
0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x70,0x61,0x67,0x65,0x3a,0x6c,0x6f,0x77,0x65,0x72,
0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x74,0x65,0x78,
0x74,0x00,0x61,0x62,0x63,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,
0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x74,0x3a,0x50,0x51,0x52,0x53,
0x00,0x74,0x65,0x78,0x74,0x00,0x50,0x51,0x52,0x53,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x74,
0x3a,0x54,0x55,0x56,0x00,0x74,0x65,0x78,0x74,0x00,0x54,0x55,0x56,0x00,0x00,0x00,0x62,0x75,0x74,0x74,
0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,
0x6f,0x70,0x74,0x3a,0x57,0x58,0x59,0x5a,0x00,0x74,0x65,0x78,0x74,0x00,0x57,0x58,0x59,0x5a,0x00,0x00,
0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x70,0x61,0x67,0x65,0x3a,0x6e,
0x75,0x6d,0x62,0x65,0x72,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,
0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x31,0x32,0x33,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x63,0x6f,0x6e,
0x66,0x69,0x72,0x6d,0x5f,0x70,0x72,0x65,0x65,0x64,0x69,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x2d,0x2d,
0x3e,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,
0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x73,0x70,0x61,0x63,0x65,0x00,0x74,0x65,0x78,0x74,0x00,0x53,
0x70,0x61,0x63,0x65,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,
0x61,0x63,0x74,0x69,0x6f,0x6e,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,
0x68,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x52,0x65,0x74,0x75,0x72,0x6e,0x00,0x00,0x00,0x62,0x75,0x74,
0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x70,0x61,0x67,0x65,0x3a,0x73,0x79,0x6d,0x62,0x6f,
0x6c,0x73,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x74,
0x65,0x78,0x74,0x00,0x23,0x2b,0x3d,0x00,0x00,0x00,0x00,0x00,0x63,0x61,0x6e,0x64,0x69,0x64,0x61,0x74,
0x65,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,
0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,
0x78,0x3d,0x30,0x2c,0x79,0x3d,0x30,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x33,0x30,0x29,
0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x63,0x6c,0x6f,0x73,
0x65,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x63,0x6c,0x6f,0x73,0x65,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,
0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x72,0x3a,0x32,0x2c,
0x20,0x79,0x3d,0x32,0x2c,0x20,0x77,0x3d,0x32,0x30,0x2c,0x20,0x68,0x3d,0x32,0x30,0x29,0x00,0x74,0x65,
0x78,0x74,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};/*7612*/

View File

@ -0,0 +1,495 @@
TK_CONST_DATA_ALIGN(const unsigned char ui_kb_default_t9[]) = {
0x04,0x00,0x01,0x01,0x61,0x26,0x00,0x00,0x00,0x00,0x00,0x00,0x6b,0x62,0x5f,0x64,0x65,0x66,0x61,0x75,
0x6c,0x74,0x5f,0x74,0x39,0x00,0x64,0x61,0x74,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x12,0x12,0x22,0x11,0x6b,0x65,0x79,0x62,0x6f,0x61,0x72,0x64,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,
0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x30,0x2c,
0x79,0x3d,0x62,0x6f,0x74,0x74,0x6f,0x6d,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x34,0x30,
0x25,0x29,0x00,0x74,0x68,0x65,0x6d,0x65,0x00,0x6b,0x65,0x79,0x62,0x6f,0x61,0x72,0x64,0x00,0x00,0x70,
0x61,0x67,0x65,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,
0x00,0x00,0x00,0xe4,0xff,0xff,0xff,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,
0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x30,0x2c,0x79,0x3d,0x62,0x6f,0x74,0x74,0x6f,0x6d,0x2c,
0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x2d,0x32,0x38,0x29,0x00,0x61,0x63,0x74,0x69,0x76,0x65,
0x00,0x32,0x00,0x00,0x76,0x69,0x65,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,
0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x30,0x2c,0x79,0x3d,0x30,0x2c,
0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x6e,0x61,0x6d,0x65,0x00,
0x6e,0x75,0x6d,0x62,0x65,0x72,0x00,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x5f,0x6c,0x61,0x79,0x6f,
0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x72,0x3d,0x34,0x2c,0x63,0x3d,0x35,0x2c,0x73,
0x3d,0x32,0x2c,0x6d,0x3d,0x32,0x29,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,
0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x31,0x00,0x74,0x65,0x78,0x74,0x00,
0x31,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,
0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x32,0x00,0x74,0x65,0x78,0x74,0x00,0x32,0x00,0x00,0x00,0x62,
0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,
0x6d,0x65,0x00,0x33,0x00,0x74,0x65,0x78,0x74,0x00,0x33,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x2b,0x00,
0x74,0x65,0x78,0x74,0x00,0x2b,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,
0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6b,0x65,0x79,0x3a,0x62,0x61,0x63,
0x6b,0x73,0x70,0x61,0x63,0x65,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,
0x68,0x74,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,
0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x63,0x65,0x6e,0x74,0x65,0x72,
0x2c,0x79,0x3d,0x6d,0x69,0x64,0x64,0x6c,0x65,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,
0x30,0x30,0x25,0x29,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x69,0x63,0x6f,0x6e,0x00,
0x69,0x6d,0x61,0x67,0x65,0x00,0x62,0x61,0x63,0x6b,0x73,0x70,0x61,0x63,0x65,0x00,0x00,0x00,0x00,0x62,
0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,
0x6d,0x65,0x00,0x34,0x00,0x74,0x65,0x78,0x74,0x00,0x34,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x35,0x00,
0x74,0x65,0x78,0x74,0x00,0x35,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,
0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x36,0x00,0x74,0x65,0x78,0x74,0x00,
0x36,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,
0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x2d,0x00,0x74,0x65,0x78,0x74,0x00,0x2d,0x00,0x00,0x00,0x62,
0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x70,0x61,0x67,0x65,0x3a,0x6c,0x6f,0x77,
0x65,0x72,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x00,
0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,
0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x63,0x65,0x6e,0x74,0x65,0x72,0x2c,0x79,0x3d,0x6d,
0x69,0x64,0x64,0x6c,0x65,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,
0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x69,0x63,0x6f,0x6e,0x00,0x69,0x6d,0x61,0x67,
0x65,0x00,0x65,0x6e,0x00,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,
0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x37,0x00,0x74,0x65,0x78,0x74,0x00,0x37,
0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,
0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x38,0x00,0x74,0x65,0x78,0x74,0x00,0x38,0x00,0x00,0x00,0x62,0x75,
0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,
0x65,0x00,0x39,0x00,0x74,0x65,0x78,0x74,0x00,0x39,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x2a,0x00,0x74,
0x65,0x78,0x74,0x00,0x2a,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,
0x00,0x70,0x61,0x67,0x65,0x3a,0x63,0x68,0x69,0x6e,0x65,0x73,0x65,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,
0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,
0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,
0x3d,0x63,0x65,0x6e,0x74,0x65,0x72,0x2c,0x79,0x3d,0x6d,0x69,0x64,0x64,0x6c,0x65,0x2c,0x77,0x3d,0x31,
0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,
0x65,0x00,0x69,0x63,0x6f,0x6e,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x7a,0x68,0x00,0x00,0x00,0x00,0x62,
0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,
0x6d,0x65,0x00,0x2e,0x00,0x74,0x65,0x78,0x74,0x00,0x2e,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x30,0x00,
0x74,0x65,0x78,0x74,0x00,0x30,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,
0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x25,0x00,0x74,0x65,0x78,0x74,0x00,
0x25,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,
0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x2f,0x00,0x74,0x65,0x78,0x74,0x00,0x2f,0x00,0x00,0x00,0x62,
0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x70,0x61,0x67,0x65,0x3a,0x73,0x79,0x6d,
0x62,0x6f,0x6c,0x73,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,
0x00,0x74,0x65,0x78,0x74,0x00,0x23,0x2b,0x3d,0x00,0x00,0x00,0x00,0x76,0x69,0x65,0x77,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,
0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,
0x28,0x78,0x3d,0x30,0x2c,0x79,0x3d,0x30,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,
0x30,0x25,0x29,0x00,0x6e,0x61,0x6d,0x65,0x00,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x00,0x63,0x68,0x69,
0x6c,0x64,0x72,0x65,0x6e,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,
0x28,0x72,0x3d,0x34,0x2c,0x63,0x3d,0x35,0x2c,0x73,0x3d,0x32,0x2c,0x6d,0x3d,0x32,0x29,0x00,0x00,0x62,
0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,
0x6d,0x65,0x00,0x3c,0x00,0x74,0x65,0x78,0x74,0x00,0x3c,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x3e,0x00,
0x74,0x65,0x78,0x74,0x00,0x3e,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,
0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x28,0x00,0x74,0x65,0x78,0x74,0x00,
0x28,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,
0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x29,0x00,0x74,0x65,0x78,0x74,0x00,0x29,0x00,0x00,0x00,0x62,
0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,
0x6d,0x65,0x00,0x6b,0x65,0x79,0x3a,0x62,0x61,0x63,0x6b,0x73,0x70,0x61,0x63,0x65,0x00,0x73,0x74,0x79,
0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,
0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,
0x74,0x28,0x78,0x3d,0x63,0x65,0x6e,0x74,0x65,0x72,0x2c,0x79,0x3d,0x6d,0x69,0x64,0x64,0x6c,0x65,0x2c,
0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x64,0x72,0x61,0x77,0x5f,
0x74,0x79,0x70,0x65,0x00,0x69,0x63,0x6f,0x6e,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x62,0x61,0x63,0x6b,
0x73,0x70,0x61,0x63,0x65,0x00,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,
0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x7b,0x00,0x74,0x65,0x78,0x74,0x00,
0x7b,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,
0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x7d,0x00,0x74,0x65,0x78,0x74,0x00,0x7d,0x00,0x00,0x00,0x62,
0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,
0x6d,0x65,0x00,0x5b,0x00,0x74,0x65,0x78,0x74,0x00,0x5b,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x5d,0x00,
0x74,0x65,0x78,0x74,0x00,0x5d,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,
0x65,0x00,0x70,0x61,0x67,0x65,0x3a,0x6c,0x6f,0x77,0x65,0x72,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,
0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,
0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,
0x63,0x65,0x6e,0x74,0x65,0x72,0x2c,0x79,0x3d,0x6d,0x69,0x64,0x64,0x6c,0x65,0x2c,0x77,0x3d,0x31,0x30,
0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,
0x00,0x69,0x63,0x6f,0x6e,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x65,0x6e,0x00,0x00,0x00,0x00,0x62,0x75,
0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,
0x65,0x00,0x24,0x00,0x74,0x65,0x78,0x74,0x00,0x24,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x40,0x00,0x74,
0x65,0x78,0x74,0x00,0x40,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,
0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x22,0x00,0x74,0x65,0x78,0x74,0x00,0x22,
0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,
0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x27,0x00,0x74,0x65,0x78,0x74,0x00,0x27,0x00,0x00,0x00,0x62,0x75,
0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x70,0x61,0x67,0x65,0x3a,0x63,0x68,0x69,0x6e,
0x65,0x73,0x65,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,
0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,
0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x63,0x65,0x6e,0x74,0x65,0x72,0x2c,0x79,0x3d,
0x6d,0x69,0x64,0x64,0x6c,0x65,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,
0x29,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x69,0x63,0x6f,0x6e,0x00,0x69,0x6d,0x61,
0x67,0x65,0x00,0x7a,0x68,0x00,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,
0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x23,0x00,0x74,0x65,0x78,0x74,0x00,
0x23,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,
0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x3d,0x00,0x74,0x65,0x78,0x74,0x00,0x3d,0x00,0x00,0x00,0x62,
0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,
0x6d,0x65,0x00,0x2c,0x00,0x74,0x65,0x78,0x74,0x00,0x2c,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x3f,0x00,
0x74,0x65,0x78,0x74,0x00,0x3f,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,
0x65,0x00,0x70,0x61,0x67,0x65,0x3a,0x6e,0x75,0x6d,0x62,0x65,0x72,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,
0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x31,0x32,0x33,0x00,0x00,
0x00,0x00,0x76,0x69,0x65,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,
0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x30,0x2c,0x79,0x3d,0x30,0x2c,0x77,0x3d,
0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6c,0x6f,
0x77,0x65,0x72,0x00,0x6c,0x61,0x6e,0x67,0x00,0x65,0x6e,0x5f,0x75,0x73,0x00,0x63,0x68,0x69,0x6c,0x64,
0x72,0x65,0x6e,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x72,
0x3d,0x34,0x2c,0x63,0x3d,0x34,0x2c,0x73,0x3d,0x32,0x2c,0x6d,0x3d,0x32,0x29,0x00,0x00,0x62,0x75,0x74,
0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,
0x00,0x2c,0x00,0x74,0x65,0x78,0x74,0x00,0x2c,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6b,0x65,0x79,0x3a,
0x32,0x00,0x74,0x65,0x78,0x74,0x00,0x61,0x62,0x63,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6b,0x65,0x79,
0x3a,0x33,0x00,0x74,0x65,0x78,0x74,0x00,0x64,0x65,0x66,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6b,0x65,
0x79,0x3a,0x62,0x61,0x63,0x6b,0x73,0x70,0x61,0x63,0x65,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,
0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,
0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x63,
0x65,0x6e,0x74,0x65,0x72,0x2c,0x79,0x3d,0x6d,0x69,0x64,0x64,0x6c,0x65,0x2c,0x77,0x3d,0x31,0x30,0x30,
0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,
0x69,0x63,0x6f,0x6e,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x62,0x61,0x63,0x6b,0x73,0x70,0x61,0x63,0x65,
0x00,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,
0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6b,0x65,0x79,0x3a,0x34,0x00,0x74,0x65,0x78,0x74,0x00,0x67,
0x68,0x69,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,
0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6b,0x65,0x79,0x3a,0x35,0x00,0x74,0x65,0x78,0x74,0x00,
0x6a,0x6b,0x6c,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,
0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6b,0x65,0x79,0x3a,0x36,0x00,0x74,0x65,0x78,0x74,
0x00,0x6d,0x6e,0x6f,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,
0x70,0x61,0x67,0x65,0x3a,0x75,0x70,0x70,0x65,0x72,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,
0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x41,0x42,0x43,0x00,0x00,0x00,0x62,0x75,
0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,
0x65,0x00,0x6b,0x65,0x79,0x3a,0x37,0x00,0x74,0x65,0x78,0x74,0x00,0x70,0x71,0x72,0x73,0x00,0x00,0x00,
0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,
0x61,0x6d,0x65,0x00,0x6b,0x65,0x79,0x3a,0x38,0x00,0x74,0x65,0x78,0x74,0x00,0x74,0x75,0x76,0x00,0x00,
0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,
0x6e,0x61,0x6d,0x65,0x00,0x6b,0x65,0x79,0x3a,0x39,0x00,0x74,0x65,0x78,0x74,0x00,0x77,0x78,0x79,0x7a,
0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x70,0x61,0x67,0x65,
0x3a,0x63,0x68,0x69,0x6e,0x65,0x73,0x65,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,
0x69,0x67,0x68,0x74,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,
0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x63,0x65,0x6e,0x74,
0x65,0x72,0x2c,0x79,0x3d,0x6d,0x69,0x64,0x64,0x6c,0x65,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,
0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x69,0x63,0x6f,
0x6e,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x7a,0x68,0x00,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,
0x74,0x3a,0x2e,0x3f,0x21,0x00,0x74,0x65,0x78,0x74,0x00,0x2e,0x3f,0x21,0x00,0x00,0x00,0x62,0x75,0x74,
0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,
0x00,0x73,0x70,0x61,0x63,0x65,0x00,0x74,0x65,0x78,0x74,0x00,0x53,0x70,0x61,0x63,0x65,0x00,0x00,0x00,
0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x61,0x63,0x74,0x69,0x6f,0x6e,0x00,
0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x74,0x65,0x78,0x74,
0x00,0x52,0x65,0x74,0x75,0x72,0x6e,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,
0x6d,0x65,0x00,0x70,0x61,0x67,0x65,0x3a,0x6e,0x75,0x6d,0x62,0x65,0x72,0x00,0x73,0x74,0x79,0x6c,0x65,
0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x31,0x32,0x33,0x00,
0x00,0x00,0x00,0x76,0x69,0x65,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,
0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x30,0x2c,0x79,0x3d,0x30,0x2c,0x77,
0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x6e,0x61,0x6d,0x65,0x00,0x75,
0x70,0x70,0x65,0x72,0x00,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,
0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x72,0x3d,0x34,0x2c,0x63,0x3d,0x34,0x2c,0x73,0x3d,0x32,
0x2c,0x6d,0x3d,0x32,0x29,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,
0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x74,0x3a,0x2e,0x5f,0x40,0x2f,0x23,
0x00,0x74,0x65,0x78,0x74,0x00,0x2e,0x5f,0x40,0x2f,0x23,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,
0x74,0x3a,0x41,0x42,0x43,0x00,0x74,0x65,0x78,0x74,0x00,0x41,0x42,0x43,0x00,0x00,0x00,0x62,0x75,0x74,
0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,
0x00,0x6f,0x70,0x74,0x3a,0x44,0x45,0x46,0x00,0x74,0x65,0x78,0x74,0x00,0x44,0x45,0x46,0x00,0x00,0x00,
0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,
0x61,0x6d,0x65,0x00,0x6b,0x65,0x79,0x3a,0x62,0x61,0x63,0x6b,0x73,0x70,0x61,0x63,0x65,0x00,0x73,0x74,
0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,
0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,
0x6c,0x74,0x28,0x78,0x3d,0x63,0x65,0x6e,0x74,0x65,0x72,0x2c,0x79,0x3d,0x6d,0x69,0x64,0x64,0x6c,0x65,
0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x64,0x72,0x61,0x77,
0x5f,0x74,0x79,0x70,0x65,0x00,0x69,0x63,0x6f,0x6e,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x62,0x61,0x63,
0x6b,0x73,0x70,0x61,0x63,0x65,0x00,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,
0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x74,0x3a,0x47,0x48,
0x49,0x00,0x74,0x65,0x78,0x74,0x00,0x47,0x48,0x49,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x74,
0x3a,0x4a,0x4b,0x4c,0x00,0x74,0x65,0x78,0x74,0x00,0x4a,0x4b,0x4c,0x00,0x00,0x00,0x62,0x75,0x74,0x74,
0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,
0x6f,0x70,0x74,0x3a,0x4d,0x4e,0x4f,0x00,0x74,0x65,0x78,0x74,0x00,0x4d,0x4e,0x4f,0x00,0x00,0x00,0x62,
0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x70,0x61,0x67,0x65,0x3a,0x6c,0x6f,0x77,
0x65,0x72,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x74,
0x65,0x78,0x74,0x00,0x61,0x62,0x63,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,
0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x74,0x3a,0x50,0x51,
0x52,0x53,0x00,0x74,0x65,0x78,0x74,0x00,0x50,0x51,0x52,0x53,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,
0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,
0x70,0x74,0x3a,0x54,0x55,0x56,0x00,0x74,0x65,0x78,0x74,0x00,0x54,0x55,0x56,0x00,0x00,0x00,0x62,0x75,
0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,
0x65,0x00,0x6f,0x70,0x74,0x3a,0x57,0x58,0x59,0x5a,0x00,0x74,0x65,0x78,0x74,0x00,0x57,0x58,0x59,0x5a,
0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x70,0x61,0x67,0x65,
0x3a,0x63,0x68,0x69,0x6e,0x65,0x73,0x65,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,
0x69,0x67,0x68,0x74,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,
0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x63,0x65,0x6e,0x74,
0x65,0x72,0x2c,0x79,0x3d,0x6d,0x69,0x64,0x64,0x6c,0x65,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,
0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x69,0x63,0x6f,
0x6e,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x7a,0x68,0x00,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x63,0x6f,
0x6e,0x66,0x69,0x72,0x6d,0x5f,0x70,0x72,0x65,0x65,0x64,0x69,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x2d,
0x2d,0x3e,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,
0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x73,0x70,0x61,0x63,0x65,0x00,0x74,0x65,0x78,0x74,0x00,
0x53,0x70,0x61,0x63,0x65,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,
0x00,0x61,0x63,0x74,0x69,0x6f,0x6e,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,
0x67,0x68,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x52,0x65,0x74,0x75,0x72,0x6e,0x00,0x00,0x00,0x62,0x75,
0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x70,0x61,0x67,0x65,0x3a,0x6e,0x75,0x6d,0x62,
0x65,0x72,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x74,
0x65,0x78,0x74,0x00,0x31,0x32,0x33,0x00,0x00,0x00,0x00,0x76,0x69,0x65,0x77,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,
0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,
0x3d,0x30,0x2c,0x79,0x3d,0x30,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,
0x29,0x00,0x6e,0x61,0x6d,0x65,0x00,0x63,0x68,0x69,0x6e,0x65,0x73,0x65,0x00,0x6c,0x61,0x6e,0x67,0x00,
0x7a,0x68,0x5f,0x63,0x6e,0x00,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x5f,0x6c,0x61,0x79,0x6f,0x75,
0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x72,0x3d,0x34,0x2c,0x63,0x3d,0x34,0x2c,0x73,0x3d,
0x32,0x2c,0x6d,0x3d,0x32,0x29,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,
0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0xef,0xbc,0x8c,0x00,0x74,0x65,0x78,0x74,
0x00,0xef,0xbc,0x8c,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,
0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6b,0x65,0x79,0x3a,0x32,0x00,0x74,0x65,0x78,
0x74,0x00,0x41,0x42,0x43,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,
0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6b,0x65,0x79,0x3a,0x33,0x00,0x74,0x65,
0x78,0x74,0x00,0x44,0x45,0x46,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,
0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6b,0x65,0x79,0x3a,0x62,0x61,0x63,
0x6b,0x73,0x70,0x61,0x63,0x65,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,
0x68,0x74,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,
0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x63,0x65,0x6e,0x74,0x65,0x72,
0x2c,0x79,0x3d,0x6d,0x69,0x64,0x64,0x6c,0x65,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,
0x30,0x30,0x25,0x29,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x69,0x63,0x6f,0x6e,0x00,
0x69,0x6d,0x61,0x67,0x65,0x00,0x62,0x61,0x63,0x6b,0x73,0x70,0x61,0x63,0x65,0x00,0x00,0x00,0x00,0x62,
0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,
0x6d,0x65,0x00,0x6b,0x65,0x79,0x3a,0x34,0x00,0x74,0x65,0x78,0x74,0x00,0x47,0x48,0x49,0x00,0x00,0x00,
0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,
0x61,0x6d,0x65,0x00,0x6b,0x65,0x79,0x3a,0x35,0x00,0x74,0x65,0x78,0x74,0x00,0x4a,0x4b,0x4c,0x00,0x00,
0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,
0x6e,0x61,0x6d,0x65,0x00,0x6b,0x65,0x79,0x3a,0x36,0x00,0x74,0x65,0x78,0x74,0x00,0x4d,0x4e,0x4f,0x00,
0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x70,0x61,0x67,0x65,0x3a,
0x6c,0x6f,0x77,0x65,0x72,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,
0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x61,0x62,0x63,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6b,0x65,0x79,
0x3a,0x37,0x00,0x74,0x65,0x78,0x74,0x00,0x50,0x51,0x52,0x53,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,
0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6b,
0x65,0x79,0x3a,0x38,0x00,0x74,0x65,0x78,0x74,0x00,0x54,0x55,0x56,0x00,0x00,0x00,0x62,0x75,0x74,0x74,
0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,
0x6b,0x65,0x79,0x3a,0x39,0x00,0x74,0x65,0x78,0x74,0x00,0x57,0x58,0x59,0x5a,0x00,0x00,0x00,0x62,0x75,
0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x70,0x61,0x67,0x65,0x3a,0x73,0x79,0x6d,0x62,
0x6f,0x6c,0x73,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,
0x74,0x65,0x78,0x74,0x00,0x23,0x2b,0x3d,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,
0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x74,0x3a,0xe3,
0x80,0x82,0xef,0xbc,0x9f,0xef,0xbc,0x81,0x00,0x74,0x65,0x78,0x74,0x00,0xe3,0x80,0x82,0xef,0xbc,0x9f,
0xef,0xbc,0x81,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,
0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x73,0x70,0x61,0x63,0x65,0x00,0x74,0x65,0x78,0x74,
0x00,0x53,0x70,0x61,0x63,0x65,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,
0x65,0x00,0x61,0x63,0x74,0x69,0x6f,0x6e,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,
0x69,0x67,0x68,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x52,0x65,0x74,0x75,0x72,0x6e,0x00,0x00,0x00,0x62,
0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x70,0x61,0x67,0x65,0x3a,0x6e,0x75,0x6d,
0x62,0x65,0x72,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,
0x74,0x65,0x78,0x74,0x00,0x31,0x32,0x33,0x00,0x00,0x00,0x00,0x00,0x63,0x61,0x6e,0x64,0x69,0x64,0x61,
0x74,0x65,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x1e,0x00,0x00,
0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,
0x28,0x78,0x3d,0x30,0x2c,0x79,0x3d,0x30,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x33,0x30,
0x29,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x63,0x6c,0x6f,
0x73,0x65,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x63,0x6c,0x6f,0x73,0x65,0x00,0x73,0x65,0x6c,0x66,0x5f,
0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x72,0x3a,0x32,
0x2c,0x20,0x79,0x3d,0x32,0x2c,0x20,0x77,0x3d,0x32,0x30,0x2c,0x20,0x68,0x3d,0x32,0x30,0x29,0x00,0x74,
0x65,0x78,0x74,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};/*9873*/

View File

@ -0,0 +1,40 @@
TK_CONST_DATA_ALIGN(const unsigned char ui_kb_default_t9ext[]) = {
0x04,0x00,0x01,0x01,0xcd,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x6b,0x62,0x5f,0x64,0x65,0x66,0x61,0x75,
0x6c,0x74,0x5f,0x74,0x39,0x65,0x78,0x74,0x00,0x64,0x61,0x74,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x12,0x12,0x22,0x11,0x6b,0x65,0x79,0x62,0x6f,0x61,0x72,0x64,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,
0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x30,0x2c,
0x79,0x3d,0x62,0x6f,0x74,0x74,0x6f,0x6d,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x37,0x38,
0x29,0x00,0x64,0x69,0x73,0x61,0x62,0x6c,0x65,0x5f,0x61,0x6e,0x69,0x6d,0x00,0x74,0x72,0x75,0x65,0x00,
0x74,0x68,0x65,0x6d,0x65,0x00,0x6b,0x65,0x79,0x62,0x6f,0x61,0x72,0x64,0x00,0x73,0x74,0x79,0x6c,0x65,
0x00,0x74,0x72,0x61,0x6e,0x73,0x70,0x61,0x72,0x65,0x6e,0x74,0x00,0x6d,0x6f,0x76,0x65,0x5f,0x66,0x6f,
0x63,0x75,0x73,0x5f,0x75,0x70,0x5f,0x6b,0x65,0x79,0x00,0x75,0x70,0x00,0x6d,0x6f,0x76,0x65,0x5f,0x66,
0x6f,0x63,0x75,0x73,0x5f,0x64,0x6f,0x77,0x6e,0x5f,0x6b,0x65,0x79,0x00,0x64,0x6f,0x77,0x6e,0x00,0x6d,
0x6f,0x76,0x65,0x5f,0x66,0x6f,0x63,0x75,0x73,0x5f,0x6c,0x65,0x66,0x74,0x5f,0x6b,0x65,0x79,0x00,0x6c,
0x65,0x66,0x74,0x00,0x6d,0x6f,0x76,0x65,0x5f,0x66,0x6f,0x63,0x75,0x73,0x5f,0x72,0x69,0x67,0x68,0x74,
0x5f,0x6b,0x65,0x79,0x00,0x72,0x69,0x67,0x68,0x74,0x00,0x67,0x72,0x61,0x62,0x5f,0x6b,0x65,0x79,0x73,
0x00,0x74,0x72,0x75,0x65,0x00,0x00,0x6c,0x61,0x6e,0x67,0x5f,0x69,0x6e,0x64,0x69,0x63,0x61,0x74,0x6f,
0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,
0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x72,0x3a,0x32,
0x2c,0x20,0x79,0x3d,0x30,0x2c,0x20,0x77,0x3d,0x34,0x38,0x2c,0x20,0x68,0x3d,0x32,0x30,0x29,0x00,0x00,
0x00,0x63,0x61,0x6e,0x64,0x69,0x64,0x61,0x74,0x65,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x00,0x00,
0x00,0x64,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,
0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x30,0x2c,0x79,0x3d,0x32,0x30,0x2c,0x77,0x3d,
0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x33,0x30,0x29,0x00,0x70,0x72,0x65,0x00,0x74,0x72,0x75,0x65,0x00,
0x76,0x69,0x73,0x69,0x62,0x6c,0x65,0x00,0x66,0x61,0x6c,0x73,0x65,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,
0x5f,0x73,0x74,0x79,0x6c,0x65,0x00,0x63,0x61,0x6e,0x64,0x69,0x64,0x61,0x74,0x65,0x73,0x5f,0x66,0x6f,
0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x61,0x75,0x74,0x6f,0x5f,0x68,0x69,0x64,0x65,0x00,0x74,0x72,
0x75,0x65,0x00,0x73,0x65,0x6c,0x65,0x63,0x74,0x5f,0x62,0x79,0x5f,0x6e,0x75,0x6d,0x00,0x66,0x61,0x6c,
0x73,0x65,0x00,0x00,0x00,0x63,0x61,0x6e,0x64,0x69,0x64,0x61,0x74,0x65,0x73,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x30,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,
0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x30,0x2c,0x79,0x3d,0x34,
0x38,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x33,0x30,0x29,0x00,0x76,0x69,0x73,0x69,0x62,
0x6c,0x65,0x00,0x66,0x61,0x6c,0x73,0x65,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x5f,0x73,0x74,0x79,0x6c,
0x65,0x00,0x63,0x61,0x6e,0x64,0x69,0x64,0x61,0x74,0x65,0x73,0x5f,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,
0x6c,0x65,0x00,0x61,0x75,0x74,0x6f,0x5f,0x68,0x69,0x64,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x73,0x65,
0x6c,0x65,0x63,0x74,0x5f,0x62,0x79,0x5f,0x6e,0x75,0x6d,0x00,0x66,0x61,0x6c,0x73,0x65,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,};/*765*/

View File

@ -0,0 +1,495 @@
TK_CONST_DATA_ALIGN(const unsigned char ui_kb_t9[]) = {
0x04,0x00,0x01,0x01,0x61,0x26,0x00,0x00,0x00,0x00,0x00,0x00,0x6b,0x62,0x5f,0x74,0x39,0x00,0x64,0x61,
0x74,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x12,0x12,0x22,0x11,0x6b,0x65,0x79,0x62,0x6f,0x61,0x72,0x64,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,
0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x30,0x2c,
0x79,0x3d,0x62,0x6f,0x74,0x74,0x6f,0x6d,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x34,0x30,
0x25,0x29,0x00,0x74,0x68,0x65,0x6d,0x65,0x00,0x6b,0x65,0x79,0x62,0x6f,0x61,0x72,0x64,0x00,0x00,0x70,
0x61,0x67,0x65,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,
0x00,0x00,0x00,0xe4,0xff,0xff,0xff,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,
0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x30,0x2c,0x79,0x3d,0x62,0x6f,0x74,0x74,0x6f,0x6d,0x2c,
0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x2d,0x32,0x38,0x29,0x00,0x61,0x63,0x74,0x69,0x76,0x65,
0x00,0x32,0x00,0x00,0x76,0x69,0x65,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,
0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x30,0x2c,0x79,0x3d,0x30,0x2c,
0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x6e,0x61,0x6d,0x65,0x00,
0x6e,0x75,0x6d,0x62,0x65,0x72,0x00,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x5f,0x6c,0x61,0x79,0x6f,
0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x72,0x3d,0x34,0x2c,0x63,0x3d,0x35,0x2c,0x73,
0x3d,0x32,0x2c,0x6d,0x3d,0x32,0x29,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,
0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x31,0x00,0x74,0x65,0x78,0x74,0x00,
0x31,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,
0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x32,0x00,0x74,0x65,0x78,0x74,0x00,0x32,0x00,0x00,0x00,0x62,
0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,
0x6d,0x65,0x00,0x33,0x00,0x74,0x65,0x78,0x74,0x00,0x33,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x2b,0x00,
0x74,0x65,0x78,0x74,0x00,0x2b,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,
0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6b,0x65,0x79,0x3a,0x62,0x61,0x63,
0x6b,0x73,0x70,0x61,0x63,0x65,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,
0x68,0x74,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,
0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x63,0x65,0x6e,0x74,0x65,0x72,
0x2c,0x79,0x3d,0x6d,0x69,0x64,0x64,0x6c,0x65,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,
0x30,0x30,0x25,0x29,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x69,0x63,0x6f,0x6e,0x00,
0x69,0x6d,0x61,0x67,0x65,0x00,0x62,0x61,0x63,0x6b,0x73,0x70,0x61,0x63,0x65,0x00,0x00,0x00,0x00,0x62,
0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,
0x6d,0x65,0x00,0x34,0x00,0x74,0x65,0x78,0x74,0x00,0x34,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x35,0x00,
0x74,0x65,0x78,0x74,0x00,0x35,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,
0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x36,0x00,0x74,0x65,0x78,0x74,0x00,
0x36,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,
0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x2d,0x00,0x74,0x65,0x78,0x74,0x00,0x2d,0x00,0x00,0x00,0x62,
0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x70,0x61,0x67,0x65,0x3a,0x6c,0x6f,0x77,
0x65,0x72,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x00,
0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,
0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x63,0x65,0x6e,0x74,0x65,0x72,0x2c,0x79,0x3d,0x6d,
0x69,0x64,0x64,0x6c,0x65,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,
0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x69,0x63,0x6f,0x6e,0x00,0x69,0x6d,0x61,0x67,
0x65,0x00,0x65,0x6e,0x00,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,
0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x37,0x00,0x74,0x65,0x78,0x74,0x00,0x37,
0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,
0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x38,0x00,0x74,0x65,0x78,0x74,0x00,0x38,0x00,0x00,0x00,0x62,0x75,
0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,
0x65,0x00,0x39,0x00,0x74,0x65,0x78,0x74,0x00,0x39,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x2a,0x00,0x74,
0x65,0x78,0x74,0x00,0x2a,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,
0x00,0x70,0x61,0x67,0x65,0x3a,0x63,0x68,0x69,0x6e,0x65,0x73,0x65,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,
0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,
0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,
0x3d,0x63,0x65,0x6e,0x74,0x65,0x72,0x2c,0x79,0x3d,0x6d,0x69,0x64,0x64,0x6c,0x65,0x2c,0x77,0x3d,0x31,
0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,
0x65,0x00,0x69,0x63,0x6f,0x6e,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x7a,0x68,0x00,0x00,0x00,0x00,0x62,
0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,
0x6d,0x65,0x00,0x2e,0x00,0x74,0x65,0x78,0x74,0x00,0x2e,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x30,0x00,
0x74,0x65,0x78,0x74,0x00,0x30,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,
0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x25,0x00,0x74,0x65,0x78,0x74,0x00,
0x25,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,
0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x2f,0x00,0x74,0x65,0x78,0x74,0x00,0x2f,0x00,0x00,0x00,0x62,
0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x70,0x61,0x67,0x65,0x3a,0x73,0x79,0x6d,
0x62,0x6f,0x6c,0x73,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,
0x00,0x74,0x65,0x78,0x74,0x00,0x23,0x2b,0x3d,0x00,0x00,0x00,0x00,0x76,0x69,0x65,0x77,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,
0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,
0x28,0x78,0x3d,0x30,0x2c,0x79,0x3d,0x30,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,
0x30,0x25,0x29,0x00,0x6e,0x61,0x6d,0x65,0x00,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x00,0x63,0x68,0x69,
0x6c,0x64,0x72,0x65,0x6e,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,
0x28,0x72,0x3d,0x34,0x2c,0x63,0x3d,0x35,0x2c,0x73,0x3d,0x32,0x2c,0x6d,0x3d,0x32,0x29,0x00,0x00,0x62,
0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,
0x6d,0x65,0x00,0x3c,0x00,0x74,0x65,0x78,0x74,0x00,0x3c,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x3e,0x00,
0x74,0x65,0x78,0x74,0x00,0x3e,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,
0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x28,0x00,0x74,0x65,0x78,0x74,0x00,
0x28,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,
0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x29,0x00,0x74,0x65,0x78,0x74,0x00,0x29,0x00,0x00,0x00,0x62,
0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,
0x6d,0x65,0x00,0x6b,0x65,0x79,0x3a,0x62,0x61,0x63,0x6b,0x73,0x70,0x61,0x63,0x65,0x00,0x73,0x74,0x79,
0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,
0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,
0x74,0x28,0x78,0x3d,0x63,0x65,0x6e,0x74,0x65,0x72,0x2c,0x79,0x3d,0x6d,0x69,0x64,0x64,0x6c,0x65,0x2c,
0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x64,0x72,0x61,0x77,0x5f,
0x74,0x79,0x70,0x65,0x00,0x69,0x63,0x6f,0x6e,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x62,0x61,0x63,0x6b,
0x73,0x70,0x61,0x63,0x65,0x00,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,
0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x7b,0x00,0x74,0x65,0x78,0x74,0x00,
0x7b,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,
0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x7d,0x00,0x74,0x65,0x78,0x74,0x00,0x7d,0x00,0x00,0x00,0x62,
0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,
0x6d,0x65,0x00,0x5b,0x00,0x74,0x65,0x78,0x74,0x00,0x5b,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x5d,0x00,
0x74,0x65,0x78,0x74,0x00,0x5d,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,
0x65,0x00,0x70,0x61,0x67,0x65,0x3a,0x6c,0x6f,0x77,0x65,0x72,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,
0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,
0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,
0x63,0x65,0x6e,0x74,0x65,0x72,0x2c,0x79,0x3d,0x6d,0x69,0x64,0x64,0x6c,0x65,0x2c,0x77,0x3d,0x31,0x30,
0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,
0x00,0x69,0x63,0x6f,0x6e,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x65,0x6e,0x00,0x00,0x00,0x00,0x62,0x75,
0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,
0x65,0x00,0x24,0x00,0x74,0x65,0x78,0x74,0x00,0x24,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x40,0x00,0x74,
0x65,0x78,0x74,0x00,0x40,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,
0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x22,0x00,0x74,0x65,0x78,0x74,0x00,0x22,
0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,
0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x27,0x00,0x74,0x65,0x78,0x74,0x00,0x27,0x00,0x00,0x00,0x62,0x75,
0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x70,0x61,0x67,0x65,0x3a,0x63,0x68,0x69,0x6e,
0x65,0x73,0x65,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,
0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,
0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x63,0x65,0x6e,0x74,0x65,0x72,0x2c,0x79,0x3d,
0x6d,0x69,0x64,0x64,0x6c,0x65,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,
0x29,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x69,0x63,0x6f,0x6e,0x00,0x69,0x6d,0x61,
0x67,0x65,0x00,0x7a,0x68,0x00,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,
0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x23,0x00,0x74,0x65,0x78,0x74,0x00,
0x23,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,
0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x3d,0x00,0x74,0x65,0x78,0x74,0x00,0x3d,0x00,0x00,0x00,0x62,
0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,
0x6d,0x65,0x00,0x2c,0x00,0x74,0x65,0x78,0x74,0x00,0x2c,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x3f,0x00,
0x74,0x65,0x78,0x74,0x00,0x3f,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,
0x65,0x00,0x70,0x61,0x67,0x65,0x3a,0x6e,0x75,0x6d,0x62,0x65,0x72,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,
0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x31,0x32,0x33,0x00,0x00,
0x00,0x00,0x76,0x69,0x65,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,
0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x30,0x2c,0x79,0x3d,0x30,0x2c,0x77,0x3d,
0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6c,0x6f,
0x77,0x65,0x72,0x00,0x6c,0x61,0x6e,0x67,0x00,0x65,0x6e,0x5f,0x75,0x73,0x00,0x63,0x68,0x69,0x6c,0x64,
0x72,0x65,0x6e,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x72,
0x3d,0x34,0x2c,0x63,0x3d,0x34,0x2c,0x73,0x3d,0x32,0x2c,0x6d,0x3d,0x32,0x29,0x00,0x00,0x62,0x75,0x74,
0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,
0x00,0x2c,0x00,0x74,0x65,0x78,0x74,0x00,0x2c,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6b,0x65,0x79,0x3a,
0x31,0x00,0x74,0x65,0x78,0x74,0x00,0x61,0x62,0x63,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6b,0x65,0x79,
0x3a,0x32,0x00,0x74,0x65,0x78,0x74,0x00,0x64,0x65,0x66,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6b,0x65,
0x79,0x3a,0x62,0x61,0x63,0x6b,0x73,0x70,0x61,0x63,0x65,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,
0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,
0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x63,
0x65,0x6e,0x74,0x65,0x72,0x2c,0x79,0x3d,0x6d,0x69,0x64,0x64,0x6c,0x65,0x2c,0x77,0x3d,0x31,0x30,0x30,
0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,
0x69,0x63,0x6f,0x6e,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x62,0x61,0x63,0x6b,0x73,0x70,0x61,0x63,0x65,
0x00,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,
0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6b,0x65,0x79,0x3a,0x33,0x00,0x74,0x65,0x78,0x74,0x00,0x67,
0x68,0x69,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,
0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6b,0x65,0x79,0x3a,0x34,0x00,0x74,0x65,0x78,0x74,0x00,
0x6a,0x6b,0x6c,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,
0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6b,0x65,0x79,0x3a,0x35,0x00,0x74,0x65,0x78,0x74,
0x00,0x6d,0x6e,0x6f,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,
0x70,0x61,0x67,0x65,0x3a,0x75,0x70,0x70,0x65,0x72,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,
0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x41,0x42,0x43,0x00,0x00,0x00,0x62,0x75,
0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,
0x65,0x00,0x6b,0x65,0x79,0x3a,0x36,0x00,0x74,0x65,0x78,0x74,0x00,0x70,0x71,0x72,0x73,0x00,0x00,0x00,
0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,
0x61,0x6d,0x65,0x00,0x6b,0x65,0x79,0x3a,0x37,0x00,0x74,0x65,0x78,0x74,0x00,0x74,0x75,0x76,0x00,0x00,
0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,
0x6e,0x61,0x6d,0x65,0x00,0x6b,0x65,0x79,0x3a,0x38,0x00,0x74,0x65,0x78,0x74,0x00,0x77,0x78,0x79,0x7a,
0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x70,0x61,0x67,0x65,
0x3a,0x63,0x68,0x69,0x6e,0x65,0x73,0x65,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,
0x69,0x67,0x68,0x74,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,
0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x63,0x65,0x6e,0x74,
0x65,0x72,0x2c,0x79,0x3d,0x6d,0x69,0x64,0x64,0x6c,0x65,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,
0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x69,0x63,0x6f,
0x6e,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x7a,0x68,0x00,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,
0x74,0x3a,0x2e,0x3f,0x21,0x00,0x74,0x65,0x78,0x74,0x00,0x2e,0x3f,0x21,0x00,0x00,0x00,0x62,0x75,0x74,
0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,
0x00,0x73,0x70,0x61,0x63,0x65,0x00,0x74,0x65,0x78,0x74,0x00,0x53,0x70,0x61,0x63,0x65,0x00,0x00,0x00,
0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x61,0x63,0x74,0x69,0x6f,0x6e,0x00,
0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x74,0x65,0x78,0x74,
0x00,0x52,0x65,0x74,0x75,0x72,0x6e,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,
0x6d,0x65,0x00,0x70,0x61,0x67,0x65,0x3a,0x6e,0x75,0x6d,0x62,0x65,0x72,0x00,0x73,0x74,0x79,0x6c,0x65,
0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x31,0x32,0x33,0x00,
0x00,0x00,0x00,0x76,0x69,0x65,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,
0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x30,0x2c,0x79,0x3d,0x30,0x2c,0x77,
0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x6e,0x61,0x6d,0x65,0x00,0x75,
0x70,0x70,0x65,0x72,0x00,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,
0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x72,0x3d,0x34,0x2c,0x63,0x3d,0x34,0x2c,0x73,0x3d,0x32,
0x2c,0x6d,0x3d,0x32,0x29,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,
0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x74,0x3a,0x2e,0x5f,0x40,0x2f,0x23,
0x00,0x74,0x65,0x78,0x74,0x00,0x2e,0x5f,0x40,0x2f,0x23,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,
0x74,0x3a,0x41,0x42,0x43,0x00,0x74,0x65,0x78,0x74,0x00,0x41,0x42,0x43,0x00,0x00,0x00,0x62,0x75,0x74,
0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,
0x00,0x6f,0x70,0x74,0x3a,0x44,0x45,0x46,0x00,0x74,0x65,0x78,0x74,0x00,0x44,0x45,0x46,0x00,0x00,0x00,
0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,
0x61,0x6d,0x65,0x00,0x6b,0x65,0x79,0x3a,0x62,0x61,0x63,0x6b,0x73,0x70,0x61,0x63,0x65,0x00,0x73,0x74,
0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,
0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,
0x6c,0x74,0x28,0x78,0x3d,0x63,0x65,0x6e,0x74,0x65,0x72,0x2c,0x79,0x3d,0x6d,0x69,0x64,0x64,0x6c,0x65,
0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x64,0x72,0x61,0x77,
0x5f,0x74,0x79,0x70,0x65,0x00,0x69,0x63,0x6f,0x6e,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x62,0x61,0x63,
0x6b,0x73,0x70,0x61,0x63,0x65,0x00,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,
0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x74,0x3a,0x47,0x48,
0x49,0x00,0x74,0x65,0x78,0x74,0x00,0x47,0x48,0x49,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x74,
0x3a,0x4a,0x4b,0x4c,0x00,0x74,0x65,0x78,0x74,0x00,0x4a,0x4b,0x4c,0x00,0x00,0x00,0x62,0x75,0x74,0x74,
0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,
0x6f,0x70,0x74,0x3a,0x4d,0x4e,0x4f,0x00,0x74,0x65,0x78,0x74,0x00,0x4d,0x4e,0x4f,0x00,0x00,0x00,0x62,
0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x70,0x61,0x67,0x65,0x3a,0x6c,0x6f,0x77,
0x65,0x72,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x74,
0x65,0x78,0x74,0x00,0x61,0x62,0x63,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,
0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x74,0x3a,0x50,0x51,
0x52,0x53,0x00,0x74,0x65,0x78,0x74,0x00,0x50,0x51,0x52,0x53,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,
0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,
0x70,0x74,0x3a,0x54,0x55,0x56,0x00,0x74,0x65,0x78,0x74,0x00,0x54,0x55,0x56,0x00,0x00,0x00,0x62,0x75,
0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,
0x65,0x00,0x6f,0x70,0x74,0x3a,0x57,0x58,0x59,0x5a,0x00,0x74,0x65,0x78,0x74,0x00,0x57,0x58,0x59,0x5a,
0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x70,0x61,0x67,0x65,
0x3a,0x63,0x68,0x69,0x6e,0x65,0x73,0x65,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,
0x69,0x67,0x68,0x74,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,
0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x63,0x65,0x6e,0x74,
0x65,0x72,0x2c,0x79,0x3d,0x6d,0x69,0x64,0x64,0x6c,0x65,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,
0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x69,0x63,0x6f,
0x6e,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x7a,0x68,0x00,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x63,0x6f,
0x6e,0x66,0x69,0x72,0x6d,0x5f,0x70,0x72,0x65,0x65,0x64,0x69,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x2d,
0x2d,0x3e,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,
0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x73,0x70,0x61,0x63,0x65,0x00,0x74,0x65,0x78,0x74,0x00,
0x53,0x70,0x61,0x63,0x65,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,
0x00,0x61,0x63,0x74,0x69,0x6f,0x6e,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,
0x67,0x68,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x52,0x65,0x74,0x75,0x72,0x6e,0x00,0x00,0x00,0x62,0x75,
0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x70,0x61,0x67,0x65,0x3a,0x6e,0x75,0x6d,0x62,
0x65,0x72,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x74,
0x65,0x78,0x74,0x00,0x31,0x32,0x33,0x00,0x00,0x00,0x00,0x76,0x69,0x65,0x77,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,
0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,
0x3d,0x30,0x2c,0x79,0x3d,0x30,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,
0x29,0x00,0x6e,0x61,0x6d,0x65,0x00,0x63,0x68,0x69,0x6e,0x65,0x73,0x65,0x00,0x6c,0x61,0x6e,0x67,0x00,
0x7a,0x68,0x5f,0x63,0x6e,0x00,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x5f,0x6c,0x61,0x79,0x6f,0x75,
0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x72,0x3d,0x34,0x2c,0x63,0x3d,0x34,0x2c,0x73,0x3d,
0x32,0x2c,0x6d,0x3d,0x32,0x29,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,
0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0xef,0xbc,0x8c,0x00,0x74,0x65,0x78,0x74,
0x00,0xef,0xbc,0x8c,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,
0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6b,0x65,0x79,0x3a,0x31,0x00,0x74,0x65,0x78,
0x74,0x00,0x41,0x42,0x43,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,
0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6b,0x65,0x79,0x3a,0x32,0x00,0x74,0x65,
0x78,0x74,0x00,0x44,0x45,0x46,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,
0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6b,0x65,0x79,0x3a,0x62,0x61,0x63,
0x6b,0x73,0x70,0x61,0x63,0x65,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,
0x68,0x74,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,
0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x63,0x65,0x6e,0x74,0x65,0x72,
0x2c,0x79,0x3d,0x6d,0x69,0x64,0x64,0x6c,0x65,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,
0x30,0x30,0x25,0x29,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x69,0x63,0x6f,0x6e,0x00,
0x69,0x6d,0x61,0x67,0x65,0x00,0x62,0x61,0x63,0x6b,0x73,0x70,0x61,0x63,0x65,0x00,0x00,0x00,0x00,0x62,
0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,
0x6d,0x65,0x00,0x6b,0x65,0x79,0x3a,0x33,0x00,0x74,0x65,0x78,0x74,0x00,0x47,0x48,0x49,0x00,0x00,0x00,
0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,
0x61,0x6d,0x65,0x00,0x6b,0x65,0x79,0x3a,0x34,0x00,0x74,0x65,0x78,0x74,0x00,0x4a,0x4b,0x4c,0x00,0x00,
0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,
0x6e,0x61,0x6d,0x65,0x00,0x6b,0x65,0x79,0x3a,0x35,0x00,0x74,0x65,0x78,0x74,0x00,0x4d,0x4e,0x4f,0x00,
0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x70,0x61,0x67,0x65,0x3a,
0x6c,0x6f,0x77,0x65,0x72,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,
0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x61,0x62,0x63,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6b,0x65,0x79,
0x3a,0x36,0x00,0x74,0x65,0x78,0x74,0x00,0x50,0x51,0x52,0x53,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,
0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6b,
0x65,0x79,0x3a,0x37,0x00,0x74,0x65,0x78,0x74,0x00,0x54,0x55,0x56,0x00,0x00,0x00,0x62,0x75,0x74,0x74,
0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,
0x6b,0x65,0x79,0x3a,0x38,0x00,0x74,0x65,0x78,0x74,0x00,0x57,0x58,0x59,0x5a,0x00,0x00,0x00,0x62,0x75,
0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x70,0x61,0x67,0x65,0x3a,0x73,0x79,0x6d,0x62,
0x6f,0x6c,0x73,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,
0x74,0x65,0x78,0x74,0x00,0x23,0x2b,0x3d,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,
0x65,0x70,0x65,0x61,0x74,0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x74,0x3a,0xe3,
0x80,0x82,0xef,0xbc,0x9f,0xef,0xbc,0x81,0x00,0x74,0x65,0x78,0x74,0x00,0xe3,0x80,0x82,0xef,0xbc,0x9f,
0xef,0xbc,0x81,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x65,0x70,0x65,0x61,0x74,
0x00,0x33,0x30,0x30,0x00,0x6e,0x61,0x6d,0x65,0x00,0x73,0x70,0x61,0x63,0x65,0x00,0x74,0x65,0x78,0x74,
0x00,0x53,0x70,0x61,0x63,0x65,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,
0x65,0x00,0x61,0x63,0x74,0x69,0x6f,0x6e,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,
0x69,0x67,0x68,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x52,0x65,0x74,0x75,0x72,0x6e,0x00,0x00,0x00,0x62,
0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x70,0x61,0x67,0x65,0x3a,0x6e,0x75,0x6d,
0x62,0x65,0x72,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x68,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,
0x74,0x65,0x78,0x74,0x00,0x31,0x32,0x33,0x00,0x00,0x00,0x00,0x00,0x63,0x61,0x6e,0x64,0x69,0x64,0x61,
0x74,0x65,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x1e,0x00,0x00,
0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,
0x28,0x78,0x3d,0x30,0x2c,0x79,0x3d,0x30,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x33,0x30,
0x29,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x63,0x6c,0x6f,
0x73,0x65,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x63,0x6c,0x6f,0x73,0x65,0x00,0x73,0x65,0x6c,0x66,0x5f,
0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x72,0x3a,0x32,
0x2c,0x20,0x79,0x3d,0x32,0x2c,0x20,0x77,0x3d,0x32,0x30,0x2c,0x20,0x68,0x3d,0x32,0x30,0x29,0x00,0x74,
0x65,0x78,0x74,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};/*9873*/

View File

@ -155,6 +155,12 @@
</style>
</digit_clock>
<lang_indicator>
<style name="default">
<normal text_color="white" bg_color="#1296db"/>
</style>
</lang_indicator>
<label>
<style name="default">
<normal text_color="black" />

View File

@ -12,6 +12,14 @@
<over bg_color="#e0e0e0" border_color="#a0a0a0"/>
</style>
<style name="candidates_focusable" text_color="black">
<normal />
<pressed bg_color="#c0c0c0" border_color="#a0a0a0"/>
<over bg_color="#e0e0e0" border_color="#a0a0a0"/>
<focused bg_color="#e0e0e0" />
<disable bg_color="gray" text_color="#d0d0d0" />
</style>
<style name="close" text_color="black" text_align_h="center" text_align_v="middle">
<normal bg_color="#f0f0f0"/>
<pressed bg_color="#c0c0c0" border_color="#a0a0a0"/>
@ -29,6 +37,9 @@
<style name="default">
<normal bg_color="#cfd4da"/>
</style>
<style name="transparent">
<normal />
</style>
</keyboard>
<column>

Binary file not shown.

View File

@ -0,0 +1,98 @@
<keyboard theme="keyboard" x="0" y="bottom" w="100%" h="40%">
<pages x="0" y="bottom" w="100%" h="-28" active="2">
<view name="number" x="0" y="0" w="100%" h="100%" children_layout="default(r=4,c=5,s=2,m=2)">
<button repeat="300" name="1" text="1"/>
<button repeat="300" name="2" text="2"/>
<button repeat="300" name="3" text="3"/>
<button repeat="300" name="+" text="+"/>
<button repeat="300" name="key:backspace" style="highlight">
<image draw_type="icon" image="backspace" x="center" y="middle" w="100%" h="100%"/>
</button>
<button repeat="300" name="4" text="4"/>
<button repeat="300" name="5" text="5"/>
<button repeat="300" name="6" text="6"/>
<button repeat="300" name="-" text="-"/>
<button name="page:lower" style="highlight" text="abc"/>
<button repeat="300" name="7" text="7"/>
<button repeat="300" name="8" text="8"/>
<button repeat="300" name="9" text="9"/>
<button repeat="300" name="*" text="*"/>
<button name="page:upper" style="highlight" text="ABC"/>
<button repeat="300" name="." text="."/>
<button repeat="300" name="0" text="0"/>
<button repeat="300" name="%" text="%"/>
<button repeat="300" name="/" text="/"/>
<button name="page:symbols" style="highlight" text="#+="/>
</view>
<view name="symbols" x="0" y="0" w="100%" h="100%" children_layout="default(r=4,c=5,s=2,m=2)">
<button repeat="300" name="<" text="<"/>
<button repeat="300" name=">" text=">"/>
<button repeat="300" name="(" text="("/>
<button repeat="300" name=")" text=")"/>
<button repeat="300" name="key:backspace" style="highlight">
<image draw_type="icon" image="backspace" x="center" y="middle" w="100%" h="100%"/>
</button>
<button repeat="300" name="{" text="{"/>
<button repeat="300" name="}" text="}"/>
<button repeat="300" name="[" text="["/>
<button repeat="300" name="]" text="]"/>
<button name="page:lower" style="highlight" text="abc"/>
<button repeat="300" name="$" text="$"/>
<button repeat="300" name="@" text="@"/>
<button repeat="300" name="&quota;" text="&quota;"/>
<button repeat="300" name="'" text="'"/>
<button name="page:upper" style="highlight" text="ABC"/>
<button repeat="300" name="#" text="#"/>
<button repeat="300" name="=" text="="/>
<button repeat="300" name="," text=","/>
<button repeat="300" name="?" text="?"/>
<button name="page:number" style="highlight" text="123"/>
</view>
<view name="lower"
x="0" y="0" w="100%" h="100%" children_layout="default(r=4,c=4,s=2,m=2)">
<button repeat="300" name="opt:._@/%" text="._@/%"/>
<button repeat="300" name="opt:abc" text="abc"/>
<button repeat="300" name="opt:def" text="def"/>
<button repeat="300" name="key:backspace" style="highlight">
<image draw_type="icon" image="backspace" x="center" y="middle" w="100%" h="100%"/>
</button>
<button repeat="300" name="opt:ghi" text="ghi"/>
<button repeat="300" name="opt:jkl" text="jkl"/>
<button repeat="300" name="opt:mno" text="mno"/>
<button name="page:upper" style="highlight" text="ABC"/>
<button repeat="300" name="opt:pqrs" text="pqrs"/>
<button repeat="300" name="opt:tuv" text="tuv"/>
<button repeat="300" name="opt:wxyz" text="wxyz"/>
<button name="page:number" style="highlight" text="123"/>
<button repeat="300" name="opt:,?!:" text=",?!:"/>
<button repeat="300" name="confirm_preedit" text="-->"/>
<button repeat="300" name="space" text="Space"/>
<button name="action" style="highlight" text="Return"/>
<button name="page:symbols" style="highlight" text="#+="/>
</view>
<view name="upper" x="0" y="0" w="100%" h="100%" children_layout="default(r=4,c=4,s=2,m=2)">
<button repeat="300" name="opt:._@/#" text="._@/#"/>
<button repeat="300" name="opt:ABC" text="ABC"/>
<button repeat="300" name="opt:DEF" text="DEF"/>
<button repeat="300" name="key:backspace" style="highlight">
<image draw_type="icon" image="backspace" x="center" y="middle" w="100%" h="100%"/>
</button>
<button repeat="300" name="opt:GHI" text="GHI"/>
<button repeat="300" name="opt:JKL" text="JKL"/>
<button repeat="300" name="opt:MNO" text="MNO"/>
<button name="page:lower" style="highlight" text="abc"/>
<button repeat="300" name="opt:PQRS" text="PQRS"/>
<button repeat="300" name="opt:TUV" text="TUV"/>
<button repeat="300" name="opt:WXYZ" text="WXYZ"/>
<button name="page:number" style="highlight" text="123"/>
<button repeat="300" name="confirm_preedit" text="-->"/>
<button repeat="300" name="space" text="Space"/>
<button name="action" style="highlight" text="Return"/>
<button name="page:symbols" style="highlight" text="#+="/>
</view>
</pages>
<candidates x="0" y="0" w="100%" h="30"/>
<button name="close" style="close" self_layout="default(x=r:2, y=2, w=20, h=20)" text="x" />
</keyboard>

Binary file not shown.

View File

@ -0,0 +1,131 @@
<keyboard theme="keyboard" x="0" y="bottom" w="100%" h="40%">
<pages x="0" y="bottom" w="100%" h="-28" active="2">
<view name="number" x="0" y="0" w="100%" h="100%" children_layout="default(r=4,c=5,s=2,m=2)">
<button repeat="300" name="1" text="1"/>
<button repeat="300" name="2" text="2"/>
<button repeat="300" name="3" text="3"/>
<button repeat="300" name="+" text="+"/>
<button repeat="300" name="key:backspace" style="highlight">
<image draw_type="icon" image="backspace" x="center" y="middle" w="100%" h="100%"/>
</button>
<button repeat="300" name="4" text="4"/>
<button repeat="300" name="5" text="5"/>
<button repeat="300" name="6" text="6"/>
<button repeat="300" name="-" text="-"/>
<button name="page:lower" style="highlight">
<image draw_type="icon" image="en" x="center" y="middle" w="100%" h="100%"/>
</button>
<button repeat="300" name="7" text="7"/>
<button repeat="300" name="8" text="8"/>
<button repeat="300" name="9" text="9"/>
<button repeat="300" name="*" text="*"/>
<button name="page:chinese" style="highlight">
<image draw_type="icon" image="zh" x="center" y="middle" w="100%" h="100%"/>
</button>
<button repeat="300" name="." text="."/>
<button repeat="300" name="0" text="0"/>
<button repeat="300" name="%" text="%"/>
<button repeat="300" name="/" text="/"/>
<button name="page:symbols" style="highlight" text="#+="/>
</view>
<view name="symbols" x="0" y="0" w="100%" h="100%" children_layout="default(r=4,c=5,s=2,m=2)">
<button repeat="300" name="<" text="<"/>
<button repeat="300" name=">" text=">"/>
<button repeat="300" name="(" text="("/>
<button repeat="300" name=")" text=")"/>
<button repeat="300" name="key:backspace" style="highlight">
<image draw_type="icon" image="backspace" x="center" y="middle" w="100%" h="100%"/>
</button>
<button repeat="300" name="{" text="{"/>
<button repeat="300" name="}" text="}"/>
<button repeat="300" name="[" text="["/>
<button repeat="300" name="]" text="]"/>
<button name="page:lower" style="highlight">
<image draw_type="icon" image="en" x="center" y="middle" w="100%" h="100%"/>
</button>
<button repeat="300" name="$" text="$"/>
<button repeat="300" name="@" text="@"/>
<button repeat="300" name="&quota;" text="&quota;"/>
<button repeat="300" name="'" text="'"/>
<button name="page:chinese" style="highlight">
<image draw_type="icon" image="zh" x="center" y="middle" w="100%" h="100%"/>
</button>
<button repeat="300" name="#" text="#"/>
<button repeat="300" name="=" text="="/>
<button repeat="300" name="," text=","/>
<button repeat="300" name="?" text="?"/>
<button name="page:number" style="highlight" text="123"/>
</view>
<view name="lower" lang="en_us"
x="0" y="0" w="100%" h="100%" children_layout="default(r=4,c=4,s=2,m=2)">
<button repeat="300" name="," text=","/>
<button repeat="300" name="key:2" text="abc"/>
<button repeat="300" name="key:3" text="def"/>
<button repeat="300" name="key:backspace" style="highlight">
<image draw_type="icon" image="backspace" x="center" y="middle" w="100%" h="100%"/>
</button>
<button repeat="300" name="key:4" text="ghi"/>
<button repeat="300" name="key:5" text="jkl"/>
<button repeat="300" name="key:6" text="mno"/>
<button name="page:upper" style="highlight" text="ABC"/>
<button repeat="300" name="key:7" text="pqrs"/>
<button repeat="300" name="key:8" text="tuv"/>
<button repeat="300" name="key:9" text="wxyz"/>
<button name="page:chinese" style="highlight">
<image draw_type="icon" image="zh" x="center" y="middle" w="100%" h="100%"/>
</button>
<button repeat="300" name="opt:.?!" text=".?!"/>
<button repeat="300" name="space" text="Space"/>
<button name="action" style="highlight" text="Return"/>
<button name="page:number" style="highlight" text="123"/>
</view>
<view name="upper" x="0" y="0" w="100%" h="100%" children_layout="default(r=4,c=4,s=2,m=2)">
<button repeat="300" name="opt:._@/#" text="._@/#"/>
<button repeat="300" name="opt:ABC" text="ABC"/>
<button repeat="300" name="opt:DEF" text="DEF"/>
<button repeat="300" name="key:backspace" style="highlight">
<image draw_type="icon" image="backspace" x="center" y="middle" w="100%" h="100%"/>
</button>
<button repeat="300" name="opt:GHI" text="GHI"/>
<button repeat="300" name="opt:JKL" text="JKL"/>
<button repeat="300" name="opt:MNO" text="MNO"/>
<button name="page:lower" style="highlight" text="abc"/>
<button repeat="300" name="opt:PQRS" text="PQRS"/>
<button repeat="300" name="opt:TUV" text="TUV"/>
<button repeat="300" name="opt:WXYZ" text="WXYZ"/>
<button name="page:chinese" style="highlight">
<image draw_type="icon" image="zh" x="center" y="middle" w="100%" h="100%"/>
</button>
<button repeat="300" name="confirm_preedit" text="-->"/>
<button repeat="300" name="space" text="Space"/>
<button name="action" style="highlight" text="Return"/>
<button name="page:number" style="highlight" text="123"/>
</view>
<view name="chinese" lang="zh_cn"
x="0" y="0" w="100%" h="100%" children_layout="default(r=4,c=4,s=2,m=2)">
<button repeat="300" name="" text=""/>
<button repeat="300" name="key:2" text="ABC"/>
<button repeat="300" name="key:3" text="DEF"/>
<button repeat="300" name="key:backspace" style="highlight">
<image draw_type="icon" image="backspace" x="center" y="middle" w="100%" h="100%"/>
</button>
<button repeat="300" name="key:4" text="GHI"/>
<button repeat="300" name="key:5" text="JKL"/>
<button repeat="300" name="key:6" text="MNO"/>
<button name="page:lower" style="highlight" text="abc"/>
<button repeat="300" name="key:7" text="PQRS"/>
<button repeat="300" name="key:8" text="TUV"/>
<button repeat="300" name="key:9" text="WXYZ"/>
<button name="page:symbols" style="highlight" text="#+="/>
<button repeat="300" name="opt:。?!" text="。?!"/>
<button repeat="300" name="space" text="Space"/>
<button name="action" style="highlight" text="Return"/>
<button name="page:number" style="highlight" text="123"/>
</view>
</pages>
<candidates x="0" y="0" w="100%" h="30"/>
<button name="close" style="close" self_layout="default(x=r:2, y=2, w=20, h=20)" text="x" />
</keyboard>

Binary file not shown.

View File

@ -0,0 +1,18 @@
<keyboard disable_anim="true" theme="keyboard" style="transparent" x="0" y="bottom" w="100%" h="78"
move_focus_up_key="up"
move_focus_down_key="down"
move_focus_left_key="left"
move_focus_right_key="right"
grab_keys="true">
<lang_indicator self_layout="default(x=r:2, y=0, w=48, h=20)" />
<candidates pre="true" x="0" y="20" w="100%" h="30"
visible="false"
button_style="candidates_focusable"
auto_hide="true"
select_by_num="false"/>
<candidates x="0" y="48" w="100%" h="30"
visible="false"
button_style="candidates_focusable"
auto_hide="true"
select_by_num="false"/>
</keyboard>

View File

@ -47,12 +47,15 @@ extern TK_CONST_DATA_ALIGN(const unsigned char ui_digit_clock[]);
extern TK_CONST_DATA_ALIGN(const unsigned char ui_scroll_bar[]);
extern TK_CONST_DATA_ALIGN(const unsigned char ui_lua[]);
extern TK_CONST_DATA_ALIGN(const unsigned char ui_linear_gradient[]);
extern TK_CONST_DATA_ALIGN(const unsigned char ui_kb_t9[]);
extern TK_CONST_DATA_ALIGN(const unsigned char ui_preload[]);
extern TK_CONST_DATA_ALIGN(const unsigned char ui_images[]);
extern TK_CONST_DATA_ALIGN(const unsigned char ui_soft_keyboard[]);
extern TK_CONST_DATA_ALIGN(const unsigned char ui_edit[]);
extern TK_CONST_DATA_ALIGN(const unsigned char ui_menu_up_left[]);
extern TK_CONST_DATA_ALIGN(const unsigned char ui_locale[]);
extern TK_CONST_DATA_ALIGN(const unsigned char ui_kb_ascii_t9[]);
extern TK_CONST_DATA_ALIGN(const unsigned char ui_kb_default_t9[]);
extern TK_CONST_DATA_ALIGN(const unsigned char ui_kb_int[]);
extern TK_CONST_DATA_ALIGN(const unsigned char ui_tab_control[]);
extern TK_CONST_DATA_ALIGN(const unsigned char ui_slide_view_v2[]);
@ -65,6 +68,7 @@ extern TK_CONST_DATA_ALIGN(const unsigned char ui_color_picker[]);
extern TK_CONST_DATA_ALIGN(const unsigned char ui_switch[]);
extern TK_CONST_DATA_ALIGN(const unsigned char ui_back_to_home[]);
extern TK_CONST_DATA_ALIGN(const unsigned char ui_menu_right_middle[]);
extern TK_CONST_DATA_ALIGN(const unsigned char ui_kb_default_t9ext[]);
extern TK_CONST_DATA_ALIGN(const unsigned char ui_dragger[]);
extern TK_CONST_DATA_ALIGN(const unsigned char ui_dialog2[]);
extern TK_CONST_DATA_ALIGN(const unsigned char ui_color_picker_hsv[]);
@ -442,7 +446,7 @@ extern TK_CONST_DATA_ALIGN(const unsigned char image_girl[]);
extern TK_CONST_DATA_ALIGN(const unsigned char font_ap[]);
extern TK_CONST_DATA_ALIGN(const unsigned char font_default_full[]);
extern TK_CONST_DATA_ALIGN(const unsigned char font_default[]);
#else /*WITH_STB_FONT or WITH_FT_FONT*/
#else/*WITH_STB_FONT or WITH_FT_FONT*/
extern TK_CONST_DATA_ALIGN(const unsigned char font_default_20[]);
extern TK_CONST_DATA_ALIGN(const unsigned char font_default_16[]);
extern TK_CONST_DATA_ALIGN(const unsigned char font_default_18[]);
@ -506,12 +510,15 @@ ret_t assets_init_dark(void) {
assets_manager_add(am, ui_scroll_bar);
assets_manager_add(am, ui_lua);
assets_manager_add(am, ui_linear_gradient);
assets_manager_add(am, ui_kb_t9);
assets_manager_add(am, ui_preload);
assets_manager_add(am, ui_images);
assets_manager_add(am, ui_soft_keyboard);
assets_manager_add(am, ui_edit);
assets_manager_add(am, ui_menu_up_left);
assets_manager_add(am, ui_locale);
assets_manager_add(am, ui_kb_ascii_t9);
assets_manager_add(am, ui_kb_default_t9);
assets_manager_add(am, ui_kb_int);
assets_manager_add(am, ui_tab_control);
assets_manager_add(am, ui_slide_view_v2);
@ -524,6 +531,7 @@ ret_t assets_init_dark(void) {
assets_manager_add(am, ui_switch);
assets_manager_add(am, ui_back_to_home);
assets_manager_add(am, ui_menu_right_middle);
assets_manager_add(am, ui_kb_default_t9ext);
assets_manager_add(am, ui_dragger);
assets_manager_add(am, ui_dialog2);
assets_manager_add(am, ui_color_picker_hsv);
@ -756,7 +764,7 @@ ret_t assets_init_dark(void) {
assets_manager_add(am, font_ap);
assets_manager_add(am, font_default_full);
assets_manager_add(am, font_default);
#else /*WITH_STB_FONT or WITH_FT_FONT*/
#else /*WITH_STB_FONT or WITH_FT_FONT*/
assets_manager_add(am, font_default_20);
assets_manager_add(am, font_default_16);
assets_manager_add(am, font_default_18);

View File

@ -47,12 +47,15 @@
#include "assets/default/inc/ui/scroll_bar.data"
#include "assets/default/inc/ui/lua.data"
#include "assets/default/inc/ui/linear_gradient.data"
#include "assets/default/inc/ui/kb_t9.data"
#include "assets/default/inc/ui/preload.data"
#include "assets/default/inc/ui/images.data"
#include "assets/default/inc/ui/soft_keyboard.data"
#include "assets/default/inc/ui/edit.data"
#include "assets/default/inc/ui/menu_up_left.data"
#include "assets/default/inc/ui/locale.data"
#include "assets/default/inc/ui/kb_ascii_t9.data"
#include "assets/default/inc/ui/kb_default_t9.data"
#include "assets/default/inc/ui/kb_int.data"
#include "assets/default/inc/ui/tab_control.data"
#include "assets/default/inc/ui/slide_view_v2.data"
@ -65,6 +68,7 @@
#include "assets/default/inc/ui/switch.data"
#include "assets/default/inc/ui/back_to_home.data"
#include "assets/default/inc/ui/menu_right_middle.data"
#include "assets/default/inc/ui/kb_default_t9ext.data"
#include "assets/default/inc/ui/dragger.data"
#include "assets/default/inc/ui/dialog2.data"
#include "assets/default/inc/ui/color_picker_hsv.data"
@ -442,7 +446,7 @@
#include "assets/default/inc/fonts/ap.res"
#include "assets/default/inc/fonts/default_full.res"
#include "assets/default/inc/fonts/default.res"
#else /*WITH_STB_FONT or WITH_FT_FONT*/
#else/*WITH_STB_FONT or WITH_FT_FONT*/
#include "assets/default/inc/fonts/default_20.data"
#include "assets/default/inc/fonts/default_16.data"
#include "assets/default/inc/fonts/default_18.data"
@ -506,12 +510,15 @@ ret_t assets_init_default(void) {
assets_manager_add(am, ui_scroll_bar);
assets_manager_add(am, ui_lua);
assets_manager_add(am, ui_linear_gradient);
assets_manager_add(am, ui_kb_t9);
assets_manager_add(am, ui_preload);
assets_manager_add(am, ui_images);
assets_manager_add(am, ui_soft_keyboard);
assets_manager_add(am, ui_edit);
assets_manager_add(am, ui_menu_up_left);
assets_manager_add(am, ui_locale);
assets_manager_add(am, ui_kb_ascii_t9);
assets_manager_add(am, ui_kb_default_t9);
assets_manager_add(am, ui_kb_int);
assets_manager_add(am, ui_tab_control);
assets_manager_add(am, ui_slide_view_v2);
@ -524,6 +531,7 @@ ret_t assets_init_default(void) {
assets_manager_add(am, ui_switch);
assets_manager_add(am, ui_back_to_home);
assets_manager_add(am, ui_menu_right_middle);
assets_manager_add(am, ui_kb_default_t9ext);
assets_manager_add(am, ui_dragger);
assets_manager_add(am, ui_dialog2);
assets_manager_add(am, ui_color_picker_hsv);
@ -756,7 +764,7 @@ ret_t assets_init_default(void) {
assets_manager_add(am, font_ap);
assets_manager_add(am, font_default_full);
assets_manager_add(am, font_default);
#else /*WITH_STB_FONT or WITH_FT_FONT*/
#else /*WITH_STB_FONT or WITH_FT_FONT*/
assets_manager_add(am, font_default_20);
assets_manager_add(am, font_default_16);
assets_manager_add(am, font_default_18);

View File

@ -1,7 +1,9 @@
# 最新动态
* 2020/04/20
* 完善 tab button允许兄弟控件中存在非tab button控件。
* 完善 tab button允许兄弟控件中存在非 tab button 控件。
* 增加触屏版 T9 输入引擎。
* 增加按键版 T9 输入引擎。
* 2020/04/19
* 修改 strgen 中处理注释的 BUG感谢大恒提供补丁

BIN
docs/images/t9_1.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 499 KiB

212
docs/t9_notes.md Normal file
View File

@ -0,0 +1,212 @@
# T9 输入法笔记(触屏版)
## 1. T9 输入法的中文字典数据
网上可以找到 T9 输入法的中文字典数据,但是通常有两个问题:
* 采用 GPL 协议,不太适合加入 AWTK。
* 只支持单个汉字的输入,不支持词组的输入。
经过考虑之后,决定自己生成 T9 输入法的中文字典数据。AWTK 使用了谷歌拼音输入法作为缺省的拼音输入法,谷歌拼音输入法的字典数据质量还是不错的,写一个工具把谷歌拼音输入法的字典数据转换为 T9 输入法的中文字典数据即可。
谷歌拼音输入法的字典数据原始格式为:
```
汉字 频率 简体/繁体标志 拼音
```
如:
```
中 243213.912993 0 zhong
```
转换工具要做的事情的是:
* 把拼音转换成对应的数字。比 zhong 对应的是 83553。
* 生成适合查询的格式。本来想复用谷歌拼音输入的引擎,但是没有成功,最后决定自己写程序来查询。
转换工具完整的代码请参考awtk/tools/t9_gen/to_t9_zh.js
> 如果需要对字典进行裁剪,可以先编辑原始数据,然后重新生成数据。
## 2. T9 输入法的英文字典数据
要生成英文字典数据,获取一个英文单词列表,并且按照单词的使用频率进行排序。找 [github](https://github.com/first20hours/google-10000-english.git) 上找到了这样的数据。
同样需要写个小工具,把该数据转成生成适合查询的格式。
转换工具完整的代码请参考awtk/tools/t9_gen/to_t9_en.js
> 该工具应该同样适用于其它西文语言。
## 3. 对键盘、输入法框架和编辑器进行改进
为了支持 T9 输入法,需要对键盘、输入法框架和编辑器进行改进。
> 随便提一下SOLID 原则中的开闭原则通常只存在于理想(简单)情况下,一种切实可行的方法是,在早期设计时要考虑将来的扩展,但也无需过度设计,而是每次扩展时都对框架进行完善,让它更适应于将来的扩展。
### 3.1 支持语言切换
同样是在中文环境下,你可能需要输入中文,也可能需要输入英文。在中文键盘下输入中文,在英文键盘下输入英文。 在键盘切换时需要让输入法引擎知道当前的语言。
#### 3.1.1 键盘
如果需要切换语言,可以给键盘的页面设置一个 lang 属性,用于标识改键盘的语言,切换到该页面时,自动设置输入法引擎的语言。
如:
```xml
<view name="chinese" lang="zh_cn"
x="0" y="0" w="100%" h="100%" children_layout="default(r=4,c=4,s=2,m=2)">
<button repeat="300" name="" text=""/>
<button repeat="300" name="key:1" text="ABC"/>
<button repeat="300" name="key:2" text="DEF"/>
<button repeat="300" name="key:backspace" style="highlight">
<image draw_type="icon" image="backspace" x="center" y="middle" w="100%" h="100%"/>
</button>
<button repeat="300" name="key:3" text="GHI"/>
<button repeat="300" name="key:4" text="JKL"/>
<button repeat="300" name="key:5" text="MNO"/>
<button name="page:lower" style="highlight" text="abc"/>
<button repeat="300" name="key:6" text="PQRS"/>
<button repeat="300" name="key:7" text="TUV"/>
<button repeat="300" name="key:8" text="WXYZ"/>
<button name="page:symbols" style="highlight" text="#+="/>
<button repeat="300" name="opt:。?!" text="。?!"/>
<button repeat="300" name="space" text="Space"/>
<button name="action" style="highlight" text="Return"/>
<button name="page:number" style="highlight" text="123"/>
</view>
```
在切换键盘时,如果存在 lang 属性,将其设置到输入法。
```c
value_t v;
widget_t* active = widget_get_child(iter, widget_get_value(iter));
if (widget_get_prop(active, WIDGET_PROP_IM_LANG, &v) == RET_OK) {
input_method_set_lang(input_method(), value_str(&v));
}
```
#### 3.1.2 输入法提供设置语言的函数
```c
/**
* @method input_method_set_lang
* 设置语言。
*
* > 有的输入法,同时支持输入多种语言。
* > 比如 T9可以同时支持中文和英文输入配合软键盘随时切换输入的语言。
*
* @annotation ["scriptable"]
* @param {input_method_t*} im 输入法对象。
* @param {const char*} lang 语言。
*
* @return {ret_t} 返回 RET_OK 表示成功,否则表示失败。
*/
ret_t input_method_set_lang(input_method_t* im, const char* lang);
```
#### 3.1.3 输入法引擎提供设置语言的函数
```c
/**
* @engine input_engine_set_lang
* 设置语言。
* @annotation ["scriptable"]
* @param {input_engine_t*} engine 输入法引擎对象。
* @param {const char*} lang 语言。
*
* @return {ret_t} 返回 RET_OK 表示成功,否则表示失败。
*/
ret_t input_engine_set_lang(input_engine_t* engine, const char* lang);
```
### 3.2 支持预编辑状态 (preedit)
预编辑状态是在文本真正提交到编辑器之前的状态,在预编辑状态下输入的文本,可以被后面的输入覆盖。比如软键盘上,一个按键有 ABC 三个字符,按一下输入 A再按一下输入 B继续按钮输入 C在指定时间内没有按则提交当前的字符到编辑器。
![](images/t9_1.gif)
#### 3.2.1 软键盘
键盘的按钮名称以"opt:"开头的按钮,表示这个按钮需要预编辑处理。为了支持预编辑输入,软键盘在按钮事件处理函数中,要做下列处理:
* 当前不在预编辑状态时,则进入预编辑状态,并启动定时器,把当前字符的序数设置为 0并提交字符到编辑器。
* 当前在预编辑状态,更新定时器,把字符的序数设置为下一个,并提交字符到编辑器。
* 定时器超时或点击其它按钮,退出预编辑。
> 详情参考函数keyboard\_on\_button\_click
#### 3.2.2 输入法
输入法需要提供几个函数用于中转消息:
```c
/**
* @method input_method_dispatch_preedit
* 分发进入预编辑状态的事件。
* @annotation ["scriptable"]
* @param {input_method_t*} im 输入法对象。
*
* @return {ret_t} 返回 RET_OK 表示成功,否则表示失败。
*/
ret_t input_method_dispatch_preedit(input_method_t* im);
/**
* @method input_method_dispatch_preedit_confirm
* 分发确认预编辑状态的事件(提交预编辑内容,退出预编辑状态)。
* @annotation ["scriptable"]
* @param {input_method_t*} im 输入法对象。
*
* @return {ret_t} 返回 RET_OK 表示成功,否则表示失败。
*/
ret_t input_method_dispatch_preedit_confirm(input_method_t* im);
/**
* @method input_method_dispatch_preedit_abort
* 分发取消预编辑状态的事件(提交预编辑内容,退出预编辑状态)。
* @annotation ["scriptable"]
* @param {input_method_t*} im 输入法对象。
*
* @return {ret_t} 返回 RET_OK 表示成功,否则表示失败。
*/
ret_t input_method_dispatch_preedit_abort(input_method_t* im);
```
#### 3.2.3 编辑器
编辑器需要处理相关事件:
```c
case EVT_IM_PREEDIT: {
text_edit_preedit(edit->model);
break;
}
case EVT_IM_PREEDIT_CONFIRM: {
text_edit_preedit_confirm(edit->model);
break;
}
case EVT_IM_PREEDIT_ABORT: {
text_edit_preedit_abort(edit->model);
break;
}
```
>具体请参考edit.c/mledit.c
## 4. T9 输入法引擎的实现
T9 输入法引擎的实现很简单,不到 300 行代码。查找算法为:先精确查找,如果找到,将其添加到候选字列表中,否则使用前缀查找,在满足前缀的候选字中,挑选词频最高的,放到候选字列表中。
> 详情参考input_engine_t9.c/t9.c

View File

@ -62,6 +62,15 @@ else:
if os.environ['INPUT_ENGINE'] == 'null':
BASE_SOURCES += Glob('input_engines/input_engine_null.c')
elif os.environ['INPUT_ENGINE'] == 't9ext':
BASE_SOURCES += Glob('input_engines/ime_utils.c')
BASE_SOURCES += Glob('input_engines/input_engine_t9ext.c')
elif os.environ['INPUT_ENGINE'] == 't9':
BASE_SOURCES += Glob('input_engines/ime_utils.c')
BASE_SOURCES += Glob('input_engines/input_engine_t9.c')
elif os.environ['INPUT_ENGINE'] == 'spinyin':
BASE_SOURCES += Glob('input_engines/ime_utils.c')
BASE_SOURCES += Glob('input_engines/input_engine_spinyin.c')
else:
BASE_SOURCES += Glob('input_engines/input_engine_pinyin.cpp')

View File

@ -290,11 +290,40 @@ typedef enum _event_type_t {
* (im_commit_event_t)
*/
EVT_IM_COMMIT,
/**
* @const EVT_IM_PREEDIT
* (event_t)
*/
EVT_IM_PREEDIT,
/**
* @const EVT_IM_PREEDIT_CONFIRM
* 退(event_t)
*/
EVT_IM_PREEDIT_CONFIRM,
/**
* @const EVT_IM_PREEDIT_ABORT
* 退event_t)
*/
EVT_IM_PREEDIT_ABORT,
/**
* @const EVT_IM_SHOW_CANDIDATES
* (im_candidates_event_t)
*/
EVT_IM_SHOW_CANDIDATES,
/**
* @const EVT_IM_SHOW_PRE_CANDIDATES
* (im_candidates_event_t)
*/
EVT_IM_SHOW_PRE_CANDIDATES,
/**
* @const EVT_IM_LANG_CHANGED
* (event_t)
*/
EVT_IM_LANG_CHANGED,
/**
* @const EVT_IM_ACTION
* Action点击事件(event_t)

View File

@ -36,6 +36,47 @@ ret_t input_engine_reset_input(input_engine_t* engine) {
return ret;
}
ret_t input_engine_set_lang(input_engine_t* engine, const char* lang) {
ret_t ret = RET_OK;
return_value_if_fail(engine != NULL, RET_BAD_PARAMS);
if (engine->set_lang) {
ret = engine->set_lang(engine, lang);
}
return ret;
}
const char* input_engine_get_lang(input_engine_t* engine) {
return_value_if_fail(engine != NULL, NULL);
if (engine->get_lang) {
return engine->get_lang(engine);
}
return NULL;
}
ret_t input_engine_search(input_engine_t* engine, const char* keys) {
return_value_if_fail(engine != NULL && engine->search != NULL && keys != NULL, RET_BAD_PARAMS);
return engine->search(engine, keys);
}
static ret_t input_engine_append_char(input_engine_t* engine, int key) {
if (key == TK_KEY_TAB || key == TK_KEY_LEFT || key == TK_KEY_RIGHT || key == TK_KEY_UP ||
key == TK_KEY_DOWN || key == TK_KEY_PAGEUP || key == TK_KEY_PAGEDOWN ||
key == TK_KEY_RETURN || key == TK_KEY_CANCEL) {
return RET_OK;
}
if (isprint(key)) {
str_append_char(&(engine->keys), (char)key);
}
return RET_OK;
}
ret_t input_engine_input(input_engine_t* engine, int key) {
ret_t ret = RET_OK;
return_value_if_fail(engine != NULL, RET_BAD_PARAMS);
@ -45,6 +86,7 @@ ret_t input_engine_input(input_engine_t* engine, int key) {
engine->keys.size--;
engine->keys.str[engine->keys.size] = '\0';
} else {
input_engine_reset_input(engine);
return RET_FAIL;
}
} else {
@ -52,11 +94,19 @@ ret_t input_engine_input(input_engine_t* engine, int key) {
return RET_BAD_PARAMS;
}
str_append_char(&(engine->keys), (char)key);
if (engine->input != NULL) {
if (engine->input(engine, key) == RET_OK) {
input_engine_append_char(engine, key);
} else {
return RET_FAIL;
}
} else {
input_engine_append_char(engine, key);
}
}
if (engine->input) {
ret = engine->input(engine, key);
if (engine->search) {
ret = engine->search(engine, engine->keys.str);
}
return ret;

View File

@ -23,17 +23,18 @@
#define TK_INPUT_ENGINE_H
#include "tkc/str.h"
#include "base/types_def.h"
BEGIN_C_DECLS
struct _input_engine_t;
typedef struct _input_engine_t input_engine_t;
typedef ret_t (*input_engine_search_t)(input_engine_t* engine, const char* keys);
typedef ret_t (*input_engine_reset_input_t)(input_engine_t* engine);
typedef ret_t (*input_engine_input_t)(input_engine_t* engine, int key);
typedef ret_t (*input_engine_set_lang_t)(input_engine_t* engine, const char* lang);
typedef const char* (*input_engine_get_lang_t)(input_engine_t* engine);
#define TK_IM_MAX_INPUT_CHARS 11
#define TK_IM_MAX_CANDIDATE_CHARS 127
#define TK_IM_MAX_INPUT_CHARS 15
#define TK_IM_MAX_CANDIDATE_CHARS 255
/**
* @class input_engine_t
@ -75,17 +76,25 @@ struct _input_engine_t {
/*具体实现需要实现的函数*/
input_engine_input_t input;
input_engine_search_t search;
input_engine_set_lang_t set_lang;
input_engine_get_lang_t get_lang;
input_engine_reset_input_t reset_input;
/*private*/
input_method_t* im;
char lang[TK_NAME_LEN + 1];
};
/**
* @method input_engine_create
* @annotation ["constructor"]
* @param {input_method_t*} im
*
*
* @return {input_engine_t*}
*/
input_engine_t* input_engine_create(void);
input_engine_t* input_engine_create(input_method_t* im);
/**
* @method input_engine_destroy
@ -106,6 +115,32 @@ ret_t input_engine_destroy(input_engine_t* engine);
*/
ret_t input_engine_reset_input(input_engine_t* engine);
/**
* @engine input_engine_set_lang
*
* >
* > T9输入法
* >
* >
*
* @annotation ["scriptable"]
* @param {input_engine_t*} engine
* @param {const char*} lang +/zh_cn和en_us等
*
* @return {ret_t} RET_OK表示成功
*/
ret_t input_engine_set_lang(input_engine_t* engine, const char* lang);
/**
* @engine input_engine_get_lang
*
* @annotation ["scriptable"]
* @param {input_engine_t*} engine
*
* @return {const char*}
*/
const char* input_engine_get_lang(input_engine_t* engine);
/**
* @method input_engine_input
*
@ -116,6 +151,16 @@ ret_t input_engine_reset_input(input_engine_t* engine);
*/
ret_t input_engine_input(input_engine_t* engine, int key);
/**
* @method input_engine_search
* pre候选字
* @param {input_engine_t*} engine
* @param {const char*} keys
*
* @return {ret_t} RET_OK表示成功
*/
ret_t input_engine_search(input_engine_t* engine, const char* keys);
END_C_DECLS
#endif /*TK_INPUT_ENGINE_H*/

View File

@ -29,6 +29,24 @@ ret_t input_method_dispatch(input_method_t* im, event_t* e) {
return emitter_dispatch(&(im->emitter), e);
}
ret_t input_method_dispatch_preedit(input_method_t* im) {
event_t e = event_init(EVT_IM_PREEDIT, im);
return input_method_dispatch_to_widget(im, &e);
}
ret_t input_method_dispatch_preedit_confirm(input_method_t* im) {
event_t e = event_init(EVT_IM_PREEDIT_CONFIRM, im);
return input_method_dispatch_to_widget(im, &e);
}
ret_t input_method_dispatch_preedit_abort(input_method_t* im) {
event_t e = event_init(EVT_IM_PREEDIT_ABORT, im);
return input_method_dispatch_to_widget(im, &e);
}
ret_t input_method_dispatch_to_widget(input_method_t* im, event_t* e) {
return_value_if_fail(im != NULL && im->widget != NULL && e != NULL, RET_BAD_PARAMS);
@ -113,28 +131,49 @@ static ret_t input_method_dispatch_key_only(input_method_t* im, uint32_t key) {
ret_t input_method_dispatch_key(input_method_t* im, uint32_t key) {
return_value_if_fail(im != NULL, RET_BAD_PARAMS);
if (key == TK_KEY_TAB || key == TK_KEY_LEFT || key == TK_KEY_RIGHT || key == TK_KEY_UP ||
key == TK_KEY_DOWN || key == TK_KEY_PAGEUP || key == TK_KEY_PAGEDOWN ||
key == TK_KEY_RETURN || key == TK_KEY_CANCEL) {
return input_method_dispatch_key_only(im, key);
}
if (im->engine != NULL) {
if (input_engine_input(im->engine, (char)key) == RET_OK) {
input_method_dispatch_candidates(im, (const char*)(im->engine->candidates),
im->engine->candidates_nr);
return RET_OK;
} else {
if (key != TK_KEY_BACKSPACE && key != TK_KEY_DELETE) {
return RET_FAIL;
}
}
}
return input_method_dispatch_key_only(im, key);
}
ret_t input_method_dispatch_keys(input_method_t* im, const char* keys) {
return_value_if_fail(im != NULL && keys != NULL, RET_BAD_PARAMS);
if (im->engine != NULL) {
return input_engine_search(im->engine, keys);
}
return RET_OK;
}
ret_t input_method_set_lang(input_method_t* im, const char* lang) {
return_value_if_fail(im != NULL, RET_BAD_PARAMS);
if (im->engine != NULL) {
if (input_engine_set_lang(im->engine, lang) == RET_OK) {
event_t e = event_init(EVT_IM_LANG_CHANGED, im);
input_method_dispatch(im, &e);
return RET_OK;
}
}
return RET_FAIL;
}
const char* input_method_get_lang(input_method_t* im) {
return_value_if_fail(im != NULL, NULL);
if (im->engine != NULL) {
return input_engine_get_lang(im->engine);
}
return NULL;
}
ret_t input_method_dispatch_candidates(input_method_t* im, const char* strs, uint32_t nr) {
im_candidates_event_t ce;
@ -145,6 +184,18 @@ ret_t input_method_dispatch_candidates(input_method_t* im, const char* strs, uin
return input_method_dispatch(im, (event_t*)(&ce));
}
ret_t input_method_dispatch_pre_candidates(input_method_t* im, const char* strs, uint32_t nr,
int32_t selected) {
im_candidates_event_t ce;
ce.e = event_init(EVT_IM_SHOW_PRE_CANDIDATES, im);
ce.candidates_nr = nr;
ce.candidates = strs;
ce.selected = selected;
return input_method_dispatch(im, (event_t*)(&ce));
}
ret_t input_method_commit_text_ex(input_method_t* im, bool_t replace, const char* text) {
im_commit_event_t e;
return_value_if_fail(im != NULL && text != NULL, RET_BAD_PARAMS);

View File

@ -28,9 +28,6 @@
BEGIN_C_DECLS
struct _input_method_t;
typedef struct _input_method_t input_method_t;
typedef ret_t (*input_method_request_t)(input_method_t* im, widget_t* widget);
typedef ret_t (*input_method_destroy_t)(input_method_t* im);
@ -118,6 +115,7 @@ typedef struct _im_commit_event_t {
*
*/
bool_t replace;
} im_commit_event_t;
/**
@ -161,6 +159,13 @@ typedef struct _im_candidates_event_t {
*
*/
uint32_t candidates_nr;
/**
* @property {int32_t} selected;
* @annotation ["readable"]
* 0
*/
int32_t selected;
} im_candidates_event_t;
/**
@ -341,12 +346,40 @@ ret_t input_method_dispatch_action(input_method_t* im);
*
* @annotation ["scriptable"]
* @param {input_method_t*} im
* @param {char*} text
* @param {const char*} text
*
* @return {ret_t} RET_OK表示成功
*/
ret_t input_method_commit_text(input_method_t* im, const char* text);
/**
* @method input_method_set_lang
*
*
* >
* > T9输入法
* >
* >
*
* @annotation ["scriptable"]
* @param {input_method_t*} im
* @param {const char*} lang +/zh_cn和en_us等
*
* @return {ret_t} RET_OK表示成功
*/
ret_t input_method_set_lang(input_method_t* im, const char* lang);
/**
* @method input_method_get_lang
*
*
* @annotation ["scriptable"]
* @param {input_method_t*} im
*
* @return {const char*}
*/
const char* input_method_get_lang(input_method_t* im);
/**
* @method input_method_commit_text_ex
*
@ -369,6 +402,47 @@ ret_t input_method_commit_text_ex(input_method_t* im, bool_t replace, const char
*/
ret_t input_method_dispatch_key(input_method_t* im, uint32_t key);
/**
* @method input_method_dispatch_keys
*
* @annotation ["scriptable"]
* @param {input_method_t*} im
* @param {uint32_t} key
*
* @return {ret_t} RET_OK表示成功
*/
ret_t input_method_dispatch_keys(input_method_t* im, const char* keys);
/**
* @method input_method_dispatch_preedit
*
* @annotation ["scriptable"]
* @param {input_method_t*} im
*
* @return {ret_t} RET_OK表示成功
*/
ret_t input_method_dispatch_preedit(input_method_t* im);
/**
* @method input_method_dispatch_preedit_confirm
* (退)
* @annotation ["scriptable"]
* @param {input_method_t*} im
*
* @return {ret_t} RET_OK表示成功
*/
ret_t input_method_dispatch_preedit_confirm(input_method_t* im);
/**
* @method input_method_dispatch_preedit_abort
* (退)
* @annotation ["scriptable"]
* @param {input_method_t*} im
*
* @return {ret_t} RET_OK表示成功
*/
ret_t input_method_dispatch_preedit_abort(input_method_t* im);
/**
* @method input_method_dispatch_candidates
*
@ -380,6 +454,23 @@ ret_t input_method_dispatch_key(input_method_t* im, uint32_t key);
*/
ret_t input_method_dispatch_candidates(input_method_t* im, const char* strs, uint32_t nr);
/**
* @method input_method_dispatch_pre_candidates
*
*
* > : T9硬键盘输入时12
* >
*
* @param {input_method_t*} im
* @param {char*} strs
* @param {uint32_t} nr
* @param {int32_t} selected
*
* @return {ret_t} RET_OK表示成功
*/
ret_t input_method_dispatch_pre_candidates(input_method_t* im, const char* strs, uint32_t nr,
int32_t selected);
/**
* @method input_method_create
*
@ -416,8 +507,17 @@ input_method_t* input_method(void);
*/
ret_t input_method_set(input_method_t* im);
/*public for internal use*/
event_t* im_commit_event_init(im_commit_event_t* e, const char* text, bool_t replace);
#define IM_LANG_DIGIT "123"
#define IM_LANG_LOWER "abc"
#define IM_LANG_UPPER "ABC"
#define IM_LANG_SYMBOL "sym"
#define IM_LANG_EN_US "en_us"
#define IM_LANG_ZH_CN "zh_cn"
#define IM_LANG_ZH_TW "zh_tw"
END_C_DECLS
#endif /*TK_INPUT_METHOD_H*/

View File

@ -106,12 +106,6 @@ static ret_t suggest_words_update(suggest_words_t* suggest_words, const uint8_t*
}
}
if (suggest_words->words_nr < 5) {
if (wbuffer_write_string(&wb, "") == RET_OK) {
suggest_words->words_nr++;
}
}
return RET_OK;
}

View File

@ -85,6 +85,9 @@ typedef struct _text_edit_impl_t {
uint32_t last_line_number;
text_layout_info_t layout_info;
bool_t preedit;
uint32_t preedit_chars_nr;
/*for single line edit*/
wchar_t mask_char;
bool_t mask;
@ -569,8 +572,13 @@ static ret_t text_edit_paint_line(text_edit_t* text_edit, canvas_t* c, row_info_
if (chr != STB_TEXTEDIT_NEWLINE) {
uint32_t rx = x - layout_info->ox;
uint32_t ry = y - layout_info->oy;
uint32_t cursor = state->cursor;
if (offset >= select_start && offset < select_end) {
bool_t selected = offset >= select_start && offset < select_end;
bool_t preedit =
impl->preedit && offset < cursor && offset >= (cursor - impl->preedit_chars_nr);
if (selected || preedit) {
color_t select_bg_color = style_get_color(style, STYLE_ID_SELECTED_BG_COLOR, white);
color_t select_text_color = style_get_color(style, STYLE_ID_SELECTED_TEXT_COLOR, black);
@ -1099,6 +1107,9 @@ ret_t text_edit_paste(text_edit_t* text_edit, const wchar_t* str, uint32_t size)
return_value_if_fail(text_edit != NULL && str != NULL, RET_BAD_PARAMS);
stb_textedit_paste(text_edit, &(impl->state), str, size);
if (impl->preedit) {
impl->preedit_chars_nr += size;
}
text_edit_layout(text_edit);
return RET_OK;
@ -1219,6 +1230,7 @@ ret_t text_edit_get_state(text_edit_t* text_edit, text_edit_state_t* state) {
state->virtual_h = impl->layout_info.virtual_h;
state->rows = impl->rows->size;
state->caret = impl->caret;
state->preedit = impl->preedit;
state->line_height = impl->line_height;
state->cursor = impl->state.cursor;
@ -1280,3 +1292,46 @@ ret_t text_edit_set_on_state_changed(text_edit_t* text_edit,
return RET_OK;
}
ret_t text_edit_preedit(text_edit_t* text_edit) {
DECL_IMPL(text_edit);
return_value_if_fail(text_edit != NULL, RET_BAD_PARAMS);
impl->preedit = TRUE;
impl->preedit_chars_nr = 0;
return RET_OK;
}
ret_t text_edit_preedit_confirm(text_edit_t* text_edit) {
DECL_IMPL(text_edit);
return_value_if_fail(text_edit != NULL, RET_BAD_PARAMS);
impl->preedit = FALSE;
impl->preedit_chars_nr = 0;
return RET_OK;
}
ret_t text_edit_preedit_clear(text_edit_t* text_edit) {
DECL_IMPL(text_edit);
return_value_if_fail(text_edit != NULL, RET_BAD_PARAMS);
if (impl->preedit_chars_nr > 0) {
text_edit_remove(text_edit, impl->state.cursor - impl->preedit_chars_nr,
impl->preedit_chars_nr);
impl->preedit_chars_nr = 0;
}
return RET_OK;
}
ret_t text_edit_preedit_abort(text_edit_t* text_edit) {
DECL_IMPL(text_edit);
return_value_if_fail(text_edit != NULL, RET_BAD_PARAMS);
impl->preedit = FALSE;
text_edit_preedit_clear(text_edit);
return RET_OK;
}

View File

@ -44,6 +44,7 @@ typedef struct _text_edit_state_t {
uint32_t last_line_number;
bool_t mask;
bool_t preedit;
bool_t wrap_word;
wchar_t mask_char;
bool_t caret_visible;
@ -320,6 +321,42 @@ ret_t text_edit_set_on_state_changed(text_edit_t* text_edit,
*/
ret_t text_edit_destroy(text_edit_t* text_edit);
/**
* @method text_edit_preedit_clear
*
* @param {text_edit_t*} text_edit text_edit对象
*
* @return {ret_t} RET_OK表示成功
*/
ret_t text_edit_preedit_clear(text_edit_t* text_edit);
/**
* @method text_edit_preedit
*
* @param {text_edit_t*} text_edit text_edit对象
*
* @return {ret_t} RET_OK表示成功
*/
ret_t text_edit_preedit(text_edit_t* text_edit);
/**
* @method text_edit_preedit_confirm
* 退
* @param {text_edit_t*} text_edit text_edit对象
*
* @return {ret_t} RET_OK表示成功
*/
ret_t text_edit_preedit_confirm(text_edit_t* text_edit);
/**
* @method text_edit_preedit_abort
* 退
* @param {text_edit_t*} text_edit text_edit对象
*
* @return {ret_t} RET_OK表示成功
*/
ret_t text_edit_preedit_abort(text_edit_t* text_edit);
END_C_DECLS
#endif /*TK_TEXT_EDIT_H*/

View File

@ -452,4 +452,10 @@ typedef enum _bitmap_flag_t {
struct _bitmap_t;
typedef struct _bitmap_t bitmap_t;
struct _input_method_t;
typedef struct _input_method_t input_method_t;
struct _input_engine_t;
typedef struct _input_engine_t input_engine_t;
#endif /*TK_TYPES_DEF_H*/

View File

@ -189,6 +189,10 @@ static bool_t widget_with_focus_state(widget_t* widget) {
static bool_t widget_is_focusable(widget_t* widget) {
return_value_if_fail(widget != NULL && widget->vt != NULL, FALSE);
if (!widget->visible || !widget->sensitive) {
return FALSE;
}
return widget->focusable || widget->vt->focusable;
}
@ -2190,6 +2194,34 @@ static ret_t widget_on_keyup_impl(widget_t* widget, key_event_t* e) {
widget_dispatch(widget, pointer_event_init(&click, EVT_CLICK, widget, 0, 0));
ret = RET_STOP;
} else if (widget_is_move_focus_next_key(widget, e)) {
if (widget_is_focusable(widget)) {
ret = RET_STOP;
} else if (widget_is_window(widget) && !widget_has_focused_widget_in_window(widget)) {
ret = RET_STOP;
}
} else if (widget_is_move_focus_prev_key(widget, e)) {
if (widget_is_focusable(widget)) {
ret = RET_STOP;
} else if (widget_is_window(widget) && !widget_has_focused_widget_in_window(widget)) {
ret = RET_STOP;
}
} else if (widget_is_move_focus_up_key(widget, e)) {
if (widget_is_focusable(widget)) {
ret = RET_STOP;
}
} else if (widget_is_move_focus_down_key(widget, e)) {
if (widget_is_focusable(widget)) {
ret = RET_STOP;
}
} else if (widget_is_move_focus_left_key(widget, e)) {
if (widget_is_focusable(widget)) {
ret = RET_STOP;
}
} else if (widget_is_move_focus_right_key(widget, e)) {
if (widget_is_focusable(widget)) {
ret = RET_STOP;
}
}
return ret;

View File

@ -317,15 +317,21 @@ BEGIN_C_DECLS
*/
#define WIDGET_PROP_FULLSCREEN "fullscreen"
/**
* @const WIDGET_PROP_DISABLE_ANIM
*
*/
#define WIDGET_PROP_DISABLE_ANIM "disable_anim"
/**
* @const WIDGET_PROP_OPEN_ANIM_HINT
*
*
*/
#define WIDGET_PROP_OPEN_ANIM_HINT "open_anim_hint"
/**
* @const WIDGET_PROP_CLOSE_ANIM_HINT
*
*
*/
#define WIDGET_PROP_CLOSE_ANIM_HINT "close_anim_hint"

View File

@ -102,13 +102,28 @@ ret_t window_base_get_prop(widget_t* widget, const char* name, value_t* v) {
return_value_if_fail(widget != NULL && name != NULL && v != NULL, RET_BAD_PARAMS);
if (tk_str_eq(name, WIDGET_PROP_ANIM_HINT)) {
value_set_str(v, window_base->open_anim_hint);
if (window_base->disable_anim) {
value_set_str(v, NULL);
} else {
value_set_str(v, window_base->open_anim_hint);
}
return RET_OK;
} else if (tk_str_eq(name, WIDGET_PROP_OPEN_ANIM_HINT)) {
value_set_str(v, window_base->open_anim_hint);
if (window_base->disable_anim) {
value_set_str(v, NULL);
} else {
value_set_str(v, window_base->open_anim_hint);
}
return RET_OK;
} else if (tk_str_eq(name, WIDGET_PROP_CLOSE_ANIM_HINT)) {
value_set_str(v, window_base->close_anim_hint);
if (window_base->disable_anim) {
value_set_str(v, NULL);
} else {
value_set_str(v, window_base->close_anim_hint);
}
return RET_OK;
} else if (tk_str_eq(name, WIDGET_PROP_DISABLE_ANIM)) {
value_set_bool(v, window_base->disable_anim);
return RET_OK;
} else if (tk_str_eq(name, WIDGET_PROP_NATIVE_WINDOW)) {
value_set_pointer(v, window_base->native_window);
@ -174,6 +189,9 @@ ret_t window_base_set_prop(widget_t* widget, const char* name, const value_t* v)
} else if (tk_str_eq(name, WIDGET_PROP_OPEN_ANIM_HINT)) {
window_base->open_anim_hint = tk_str_copy(window_base->open_anim_hint, value_str(v));
return RET_OK;
} else if (tk_str_eq(name, WIDGET_PROP_DISABLE_ANIM)) {
window_base->disable_anim = value_bool(v);
return RET_OK;
} else if (tk_str_eq(name, WIDGET_PROP_NATIVE_WINDOW)) {
window_base->native_window = (native_window_t*)value_pointer(v);
return RET_OK;

View File

@ -60,6 +60,13 @@ typedef struct _window_base_t {
*/
char* theme;
/**
* @property {bool_t} disable_anim
* @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
*
*/
bool_t disable_anim;
/**
* @property {window_closable_t} closable
* @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]

View File

@ -29,9 +29,10 @@
#include "gif_image/gif_image.h"
#include "svg_image/svg_image.h"
#include "keyboard/keyboard.h"
#include "keyboard/candidates.h"
#include "keyboard/lang_indicator.h"
#include "base/widget_factory.h"
#include "rich_text/rich_text.h"
#include "keyboard/candidates.h"
#include "slide_menu/slide_menu.h"
#include "image_value/image_value.h"
#include "time_clock/time_clock.h"
@ -84,6 +85,7 @@ ret_t tk_ext_widgets_init() {
widget_factory_register(f, WIDGET_TYPE_SLIDE_INDICATOR, slide_indicator_create);
widget_factory_register(f, WIDGET_TYPE_SLIDE_INDICATOR_ARC, slide_indicator_create_arc);
widget_factory_register(f, WIDGET_TYPE_KEYBOARD, keyboard_create);
widget_factory_register(f, WIDGET_TYPE_LANG_INDICATOR, lang_indicator_create);
widget_factory_register(f, WIDGET_TYPE_CANDIDATES, candidates_create);
widget_factory_register(f, WIDGET_TYPE_TIME_CLOCK, time_clock_create);
widget_factory_register(f, WIDGET_TYPE_GUAGE, guage_create);

View File

@ -28,32 +28,70 @@
#include "base/system_info.h"
#include "base/widget_vtable.h"
static ret_t candidates_on_button_click(void* ctx, event_t* e) {
char str[32];
input_method_t* im = input_method();
wstr_t* text = &(WIDGET(ctx)->text);
wchar_t c = text->str[text->size - 1];
return_value_if_fail(im != NULL && text->size > 0, RET_FAIL);
static ret_t candidates_on_im_candidates_event(void* ctx, event_t* e);
static ret_t candidates_on_button_focused(void* ctx, event_t* e) {
char str[32];
widget_t* button = WIDGET(e->target);
input_method_t* im = input_method();
wstr_t* text = &(button->text);
candidates_t* candidates = CANDIDATES(ctx);
return_value_if_fail(im != NULL && text->size > 0, RET_FAIL);
tk_utf8_from_utf16(text->str, str, sizeof(str) - 1);
if (input_method_commit_text(im, str) == RET_OK) {
suggest_words_t* suggest_words = im->suggest_words;
if (suggest_words && suggest_words_find(suggest_words, c) == RET_OK) {
input_method_dispatch_candidates(im, suggest_words->words, suggest_words->words_nr);
}
if (candidates->pre) {
input_method_dispatch_keys(im, str);
}
(void)e;
return RET_OK;
}
static ret_t candidates_on_button_click(void* ctx, event_t* e) {
char str[32];
widget_t* button = WIDGET(e->target);
input_method_t* im = input_method();
wstr_t* text = &(button->text);
candidates_t* candidates = CANDIDATES(ctx);
return_value_if_fail(im != NULL, RET_FAIL);
if (text->size > 0) {
wchar_t c = text->str[text->size - 1];
tk_utf8_from_utf16(text->str, str, sizeof(str) - 1);
if (input_method_commit_text(im, str) == RET_OK) {
if (!candidates->pre) {
suggest_words_t* suggest_words = im->suggest_words;
if (suggest_words && suggest_words_find(suggest_words, c) == RET_OK) {
input_method_dispatch_candidates(im, suggest_words->words, suggest_words->words_nr);
if (suggest_words->words_nr > 0) {
widget_set_focused(widget_get_child(button->parent, 0), TRUE);
}
log_debug("suggest_words->words:%s\n", suggest_words->words);
}
}
}
}
return RET_OK;
}
static ret_t candidates_create_button(widget_t* widget) {
candidates_t* candidates = CANDIDATES(widget);
widget_t* button = button_create(widget, 0, 0, 0, 0);
return_value_if_fail(button != NULL, RET_BAD_PARAMS);
widget_use_style(button, "candidates");
widget_on(button, EVT_CLICK, candidates_on_button_click, button);
if (candidates->pre) {
widget_on(button, EVT_FOCUS, candidates_on_button_focused, widget);
widget_on(button, EVT_CLICK, candidates_on_button_click, widget);
} else {
widget_on(button, EVT_CLICK, candidates_on_button_click, widget);
}
if (candidates->button_style != NULL) {
widget_use_style(button, candidates->button_style);
}
widget_set_focusable(button, TRUE);
return RET_OK;
@ -91,19 +129,20 @@ static ret_t candidates_relayout_children(widget_t* widget) {
xy_t child_x = margin;
xy_t child_y = margin;
widget_t* iter = NULL;
widget_t* focused = NULL;
uint32_t nr = widget->children->size;
wh_t child_h = widget->h - margin * 2;
candidates_t* candidates = CANDIDATES(widget);
widget_t** children = (widget_t**)(widget->children->elms);
canvas_t* c = candidates->canvas;
style_t* style = children[0]->astyle;
canvas_t* c = widget_get_canvas(widget);
const char* font = system_info_fix_font_name(NULL);
uint16_t font_size = style_get_int(style, STYLE_ID_FONT_SIZE, TK_DEFAULT_FONT_SIZE);
canvas_set_font(c, font, font_size);
for (i = 0; i < nr; i++) {
iter = children[i];
child_w = candidates_calc_child_width(candidates->canvas, iter);
child_w = candidates_calc_child_width(c, iter);
if (iter->text.size) {
widget_set_visible(iter, TRUE, FALSE);
} else {
@ -112,15 +151,24 @@ static ret_t candidates_relayout_children(widget_t* widget) {
}
widget_move_resize(iter, child_x, child_y, child_w, child_h);
child_x += child_w + margin;
if (iter->focused) {
focused = iter;
}
}
hscrollable_set_xoffset(candidates->hscrollable, 0);
hscrollable_set_virtual_w(candidates->hscrollable, child_x + 30);
if (focused != NULL && focused->x > widget->w / 2) {
hscrollable_set_xoffset(candidates->hscrollable, focused->x);
} else {
hscrollable_set_xoffset(candidates->hscrollable, 0);
}
return RET_OK;
}
static ret_t candidates_update_candidates(widget_t* widget, const char* strs, uint32_t nr) {
static ret_t candidates_update_candidates(widget_t* widget, const char* strs, uint32_t nr,
int32_t selected) {
uint32_t i = 0;
widget_t* iter = NULL;
const char* text = strs;
@ -133,17 +181,30 @@ static ret_t candidates_update_candidates(widget_t* widget, const char* strs, ui
for (i = 0; i < nr; i++) {
iter = children[i];
widget_set_visible(iter, TRUE, FALSE);
widget_set_text_utf8(iter, text);
widget_set_focused(iter, i == 0);
if (selected == i) {
widget_set_focused(iter, TRUE);
} else {
widget_set_focused(iter, FALSE);
}
text += strlen(text) + 1;
}
for (; i < widget->children->size; i++) {
iter = children[i];
widget_set_visible(iter, FALSE, FALSE);
widget_set_text_utf8(iter, "");
}
candidates->candidates_nr = nr;
if (candidates->auto_hide) {
widget_set_visible(widget, nr > 0, FALSE);
} else {
widget_set_visible(widget, TRUE, FALSE);
}
candidates_relayout_children(widget);
widget_invalidate_force(widget, NULL);
@ -154,6 +215,7 @@ static ret_t candidates_on_destroy_default(widget_t* widget) {
candidates_t* candidates = CANDIDATES(widget);
return_value_if_fail(widget != NULL && candidates != NULL, RET_BAD_PARAMS);
TKMEM_FREE(candidates->button_style);
hscrollable_destroy(candidates->hscrollable);
input_method_off(input_method(), candidates->event_id);
@ -164,7 +226,6 @@ static ret_t candidates_on_paint_self(widget_t* widget, canvas_t* c) {
candidates_t* candidates = CANDIDATES(widget);
return_value_if_fail(widget != NULL && candidates != NULL, RET_BAD_PARAMS);
candidates->canvas = c;
return widget_paint_helper(widget, c, NULL, NULL);
}
@ -172,6 +233,16 @@ static ret_t candidates_on_event(widget_t* widget, event_t* e) {
candidates_t* candidates = CANDIDATES(widget);
return_value_if_fail(candidates != NULL, RET_BAD_PARAMS);
if (e->type == EVT_WINDOW_OPEN) {
if (candidates->pre) {
candidates->event_id = input_method_on(input_method(), EVT_IM_SHOW_PRE_CANDIDATES,
candidates_on_im_candidates_event, candidates);
} else {
candidates->event_id = input_method_on(input_method(), EVT_IM_SHOW_CANDIDATES,
candidates_on_im_candidates_event, candidates);
}
}
return hscrollable_on_event(candidates->hscrollable, e);
}
@ -186,7 +257,19 @@ static ret_t candidates_get_prop(widget_t* widget, const char* name, value_t* v)
candidates_t* candidates = CANDIDATES(widget);
return_value_if_fail(candidates != NULL, RET_BAD_PARAMS);
if (candidates->hscrollable != NULL) {
if (tk_str_eq(name, CANDIDATES_PROP_PRE)) {
value_set_bool(v, candidates->pre);
return RET_OK;
} else if (tk_str_eq(name, CANDIDATES_PROP_SELECT_BY_NUM)) {
value_set_bool(v, candidates->select_by_num);
return RET_OK;
} else if (tk_str_eq(name, CANDIDATES_PROP_AUTO_HIDE)) {
value_set_bool(v, candidates->auto_hide);
return RET_OK;
} else if (tk_str_eq(name, CANDIDATES_PROP_BUTTON_STYLE)) {
value_set_str(v, candidates->button_style);
return RET_OK;
} else if (candidates->hscrollable != NULL) {
return hscrollable_get_prop(candidates->hscrollable, name, v);
} else {
return RET_NOT_FOUND;
@ -197,6 +280,15 @@ static ret_t candidates_set_prop(widget_t* widget, const char* name, const value
candidates_t* candidates = CANDIDATES(widget);
return_value_if_fail(candidates != NULL, RET_BAD_PARAMS);
if (tk_str_eq(name, CANDIDATES_PROP_PRE)) {
return candidates_set_pre(widget, value_bool(v));
} else if (tk_str_eq(name, CANDIDATES_PROP_SELECT_BY_NUM)) {
return candidates_set_select_by_num(widget, value_bool(v));
} else if (tk_str_eq(name, CANDIDATES_PROP_AUTO_HIDE)) {
return candidates_set_auto_hide(widget, value_bool(v));
} else if (tk_str_eq(name, CANDIDATES_PROP_BUTTON_STYLE)) {
return candidates_set_button_style(widget, value_str(v));
}
if (candidates->hscrollable != NULL) {
return hscrollable_set_prop(candidates->hscrollable, name, v);
} else {
@ -237,14 +329,14 @@ static ret_t candidates_on_keydown(widget_t* widget, key_event_t* e) {
return_value_if_fail(widget != NULL, RET_BAD_PARAMS);
if (nr > 1) {
if (e->key >= TK_KEY_0 && e->key <= TK_KEY_9) {
int32_t i = e->key - (int32_t)TK_KEY_0;
if (e->key >= TK_KEY_1 && e->key <= TK_KEY_9 && candidates->select_by_num) {
int32_t i = e->key - (int32_t)TK_KEY_0 - 1;
if (i >= 0 && i < nr) {
event_t click = event_init(EVT_CLICK, NULL);
child = widget_get_child(widget, i);
if (child->text.size > 0) {
if (child->text.size > 0 && child->visible) {
widget_dispatch(child, &click);
ret = RET_STOP;
}
@ -260,10 +352,16 @@ static ret_t candidates_on_keydown(widget_t* widget, key_event_t* e) {
return ret;
}
static const char* const s_candidates_properties[] = {
CANDIDATES_PROP_PRE, CANDIDATES_PROP_SELECT_BY_NUM, CANDIDATES_PROP_BUTTON_STYLE,
CANDIDATES_PROP_AUTO_HIDE, NULL};
TK_DECL_VTABLE(candidates) = {.size = sizeof(candidates_t),
.scrollable = TRUE,
.type = WIDGET_TYPE_CANDIDATES,
.parent = TK_PARENT_VTABLE(widget),
.clone_properties = s_candidates_properties,
.persistent_properties = s_candidates_properties,
.create = candidates_create,
.on_event = candidates_on_event,
.on_paint_self = candidates_on_paint_self,
@ -275,9 +373,20 @@ TK_DECL_VTABLE(candidates) = {.size = sizeof(candidates_t),
static ret_t candidates_on_im_candidates_event(void* ctx, event_t* e) {
widget_t* widget = WIDGET(ctx);
candidates_t* candidates = CANDIDATES(widget);
im_candidates_event_t* evt = (im_candidates_event_t*)e;
return candidates_update_candidates(widget, evt->candidates, evt->candidates_nr);
if (candidates->pre) {
if (e->type == EVT_IM_SHOW_PRE_CANDIDATES) {
candidates_update_candidates(widget, evt->candidates, evt->candidates_nr, evt->selected);
}
} else {
if (e->type == EVT_IM_SHOW_CANDIDATES) {
candidates_update_candidates(widget, evt->candidates, evt->candidates_nr, evt->selected);
}
}
return RET_OK;
}
widget_t* candidates_create(widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h) {
@ -285,10 +394,9 @@ widget_t* candidates_create(widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h) {
candidates_t* candidates = CANDIDATES(widget);
return_value_if_fail(candidates != NULL, NULL);
candidates->select_by_num = TRUE;
candidates->hscrollable = hscrollable_create(widget);
hscrollable_set_always_scrollable(candidates->hscrollable, TRUE);
candidates->event_id = input_method_on(input_method(), EVT_IM_SHOW_CANDIDATES,
candidates_on_im_candidates_event, candidates);
ENSURE(candidates->hscrollable != NULL);
@ -300,3 +408,39 @@ widget_t* candidates_cast(widget_t* widget) {
return widget;
}
ret_t candidates_set_pre(widget_t* widget, bool_t pre) {
candidates_t* candidates = CANDIDATES(widget);
return_value_if_fail(candidates != NULL, RET_BAD_PARAMS);
candidates->pre = pre;
return RET_OK;
}
ret_t candidates_set_select_by_num(widget_t* widget, bool_t select_by_num) {
candidates_t* candidates = CANDIDATES(widget);
return_value_if_fail(candidates != NULL, RET_BAD_PARAMS);
candidates->select_by_num = select_by_num;
return RET_OK;
}
ret_t candidates_set_auto_hide(widget_t* widget, bool_t auto_hide) {
candidates_t* candidates = CANDIDATES(widget);
return_value_if_fail(candidates != NULL, RET_BAD_PARAMS);
candidates->auto_hide = auto_hide;
return RET_OK;
}
ret_t candidates_set_button_style(widget_t* widget, const char* button_style) {
candidates_t* candidates = CANDIDATES(widget);
return_value_if_fail(candidates != NULL, RET_BAD_PARAMS);
candidates->button_style = tk_str_copy(candidates->button_style, button_style);
return RET_OK;
}

View File

@ -59,11 +59,43 @@ BEGIN_C_DECLS
typedef struct _candidates_t {
widget_t widget;
/**
* @property {bool_t} pre
* @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
*
*
* > : T9硬键盘输入时12
* >
*/
bool_t pre;
/**
* @property {bool_t} select_by_num
* @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
* 1122
*
*/
bool_t select_by_num;
/**
* @property {bool_t} auto_hide
* @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
*
*
*/
bool_t auto_hide;
/**
* @property {char*} button_style
* @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
* style名称
*/
char* button_style;
/*private*/
bool_t expanded;
wh_t normal_h;
uint32_t event_id;
canvas_t* canvas;
hscrollable_t* hscrollable;
uint32_t candidates_nr;
} candidates_t;
@ -92,6 +124,61 @@ widget_t* candidates_create(widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
*/
widget_t* candidates_cast(widget_t* widget);
/**
* @method candidates_set_pre
*
*
* > EVT\_IM\_SHOW\_PRE\_CANDIDATESEVT\_IM\_SHOW\_CANDIDATES事件
*
* @annotation ["scriptable"]
* @param {widget_t*} widget
* @param {bool_t} pre
*
* @return {ret_t} RET_OK表示成功
*/
ret_t candidates_set_pre(widget_t* widget, bool_t pre);
/**
* @method candidates_set_select_by_num
*
*
* @annotation ["scriptable"]
* @param {widget_t*} widget
* @param {bool_t} select_by_num
*
* @return {ret_t} RET_OK表示成功
*/
ret_t candidates_set_select_by_num(widget_t* widget, bool_t select_by_num);
/**
* @method candidates_set_auto_hide
*
*
* @annotation ["scriptable"]
* @param {widget_t*} widget
* @param {bool_t} auto_hide
*
* @return {ret_t} RET_OK表示成功
*/
ret_t candidates_set_auto_hide(widget_t* widget, bool_t auto_hide);
/**
* @method candidates_set_button_style
* style名称
*
* @annotation ["scriptable"]
* @param {widget_t*} widget
* @param {const char*} button_style style名称
*
* @return {ret_t} RET_OK表示成功
*/
ret_t candidates_set_button_style(widget_t* widget, const char* button_style);
#define CANDIDATES_PROP_PRE "pre"
#define CANDIDATES_PROP_AUTO_HIDE "auto_hide"
#define CANDIDATES_PROP_BUTTON_STYLE "button_style"
#define CANDIDATES_PROP_SELECT_BY_NUM "select_by_num"
#define CANDIDATES(widget) ((candidates_t*)(candidates_cast(WIDGET(widget))))
/*public for subclass and runtime type check*/

View File

@ -29,6 +29,9 @@
#include "base/input_method.h"
#include "base/window_manager.h"
#define WIDGET_PROP_IM_LANG "lang"
#define WIDGET_PROP_PREEDIT_INDEX "preedit_index"
static ret_t keyboard_on_load(void* ctx, event_t* e);
static ret_t keyboard_on_action_info(void* ctx, event_t* e);
@ -39,13 +42,18 @@ static ret_t keyboard_on_destroy(widget_t* widget) {
keyboard_t* keyboard = KEYBOARD(widget);
return_value_if_fail(keyboard != NULL, RET_BAD_PARAMS);
darray_deinit(&(keyboard->action_buttons));
str_reset(&(keyboard->temp));
return window_base_on_destroy(widget);
}
static ret_t keyboard_on_event(widget_t* widget, event_t* e) {
if (e->type == EVT_KEY_DOWN || e->type == EVT_KEY_UP) {
key_event_t* evt = (key_event_t*)e;
/*goto here only when grab_keys=true*/
if (e->type == EVT_KEY_UP) {
input_method_dispatch_key(input_method(), evt->key);
}
return RET_STOP;
}
@ -73,6 +81,7 @@ widget_t* keyboard_create(widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h) {
keyboard_t* keyboard = KEYBOARD(widget);
return_value_if_fail(keyboard != NULL, NULL);
str_init(&(keyboard->temp), 0);
darray_init(&(keyboard->action_buttons), 0, NULL, NULL);
widget_on(widget, EVT_WINDOW_LOAD, keyboard_on_load, widget);
keyboard->action_info_id =
@ -111,6 +120,13 @@ static ret_t keyboard_set_active_page(widget_t* button, const char* name) {
return_value_if_fail(iter != NULL, RET_FAIL);
if (pages_set_active_by_name(iter, name) == RET_OK) {
value_t v;
widget_t* active = widget_get_child(iter, widget_get_value(iter));
if (widget_get_prop(active, WIDGET_PROP_IM_LANG, &v) == RET_OK) {
input_method_set_lang(input_method(), value_str(&v));
}
keyboard_focus_first(widget_get_child(iter, PAGES(iter)->active));
}
@ -121,20 +137,56 @@ static ret_t keyboard_set_active_page(widget_t* button, const char* name) {
#define STR_RETURN "return"
#define STR_ACTION "action"
#define STR_KEY_SPACE "space"
#define STR_KEY_OPT "opt:"
#define STR_KEY_TAB "tab"
#define STR_KEY_PREFIX "key:"
#define STR_PAGE_PREFIX "page:"
#define STR_HARD_KEY_PREFIX "hard_key:"
#define STR_KEY_TAB "tab"
#define STR_KEY_BACKSPACE "backspace"
#define STR_KEY_CONFIRM_PREEDIT "confirm_preedit"
#ifndef PREEDIT_TIMER_DURATION
#define PREEDIT_TIMER_DURATION 800
#endif /*PREEDIT_TIMER_DURATION*/
static ret_t keyboard_preedit_confirm(widget_t* widget) {
input_method_t* im = input_method();
keyboard_t* keyboard = KEYBOARD(widget);
input_method_dispatch_preedit_confirm(im);
widget_set_prop_int(widget, WIDGET_PROP_PREEDIT_INDEX, -1);
keyboard->timer_id = TK_INVALID_ID;
return RET_OK;
}
static ret_t keyboard_on_preedit_timeout(const timer_info_t* info) {
keyboard_preedit_confirm(WIDGET(info->ctx));
return RET_REMOVE;
}
static ret_t keyboard_on_button_click(void* ctx, event_t* e) {
input_method_t* im = input_method();
widget_t* button = WIDGET(e->target);
widget_t* win = widget_get_window(button);
keyboard_t* keyboard = KEYBOARD(win);
const char* name = button->name;
const char* opt = strstr(name, STR_KEY_OPT);
const char* key = strstr(name, STR_KEY_PREFIX);
const char* hard_key = strstr(name, STR_HARD_KEY_PREFIX);
const char* page_name = strstr(name, STR_PAGE_PREFIX);
if (keyboard->last_click_button != button) {
if (keyboard->timer_id != TK_INVALID_ID) {
timer_remove(keyboard->timer_id);
keyboard_preedit_confirm(win);
}
}
keyboard->last_click_button = button;
if (tk_str_eq(name, STR_CLOSE)) {
input_method_request(im, NULL);
@ -162,6 +214,33 @@ static ret_t keyboard_on_button_click(void* ctx, event_t* e) {
return_value_if_fail(kv != NULL, RET_BAD_PARAMS);
return input_method_dispatch_key(im, kv->value);
} else if (opt != NULL) {
str_t* str = &(keyboard->temp);
int32_t index = widget_get_prop_int(win, WIDGET_PROP_PREEDIT_INDEX, -1);
if (index < 0) {
index = -1;
input_method_dispatch_preedit(im);
}
if (keyboard->timer_id == TK_INVALID_ID) {
keyboard->timer_id =
widget_add_timer(win, keyboard_on_preedit_timeout, PREEDIT_TIMER_DURATION);
} else {
timer_modify(keyboard->timer_id, PREEDIT_TIMER_DURATION);
}
index = (index + 1) % button->text.size;
str_from_wstr_with_len(str, button->text.str + index, 1);
widget_set_prop_int(win, WIDGET_PROP_PREEDIT_INDEX, index);
return input_method_commit_text(input_method(), str->str);
} else if (tk_str_eq(name, STR_KEY_CONFIRM_PREEDIT)) {
if (keyboard->timer_id != TK_INVALID_ID) {
timer_remove(keyboard->timer_id);
keyboard_preedit_confirm(win);
}
return RET_OK;
} else {
if (tk_str_eq(name, STR_ACTION)) {
return input_method_dispatch_action(im);

View File

@ -64,6 +64,7 @@ BEGIN_C_DECLS
*| key: | |
*| hard_key: | |
*| page: | |
*| opt: | () |
*
*
*
@ -84,7 +85,36 @@ BEGIN_C_DECLS
* ```xml
* <button repeat="300" name="hard_key:1" text="1"/>
* ```
* *
*
* ```xml
* <button repeat="300" name="opt:._@/#" text="._@/#"/>
* <button repeat="300" name="opt:abc" text="abc"/>
* <button repeat="300" name="opt:def" text="def"/>
* ```
*
*
* *
*
*
* T9
*
* pages的页面里指定lang属性
*
* ```xml
* <pages x="0" y="bottom" w="100%" h="-28" active="2">
* <view name="lower" lang="en_us"
* x="0" y="0" w="100%" h="100%" children_layout="default(r=4,c=4,s=2,m=2)">
* ...
* </view>
* <view name="chinese" lang="zh_cn"
* x="0" y="0" w="100%" h="100%" children_layout="default(r=4,c=4,s=2,m=2)">
* ...
* </view>
* </pages>
* ```
*
* >
* [kb_default](https://github.com/zlgopen/awtk/blob/master/demos/assets/default/raw/ui/kb_default.xml)
*
@ -94,8 +124,11 @@ typedef struct _keyboard_t {
window_base_t window;
/*private*/
widget_t* last_click_button;
darray_t action_buttons;
uint32_t action_info_id;
uint32_t timer_id;
str_t temp;
} keyboard_t;
/**

View File

@ -0,0 +1,116 @@
/**
* File: lang_indicator.h
* Author: AWTK Develop Team
* Brief: lang_indicator
*
* Copyright (c) 2018 - 2020 Guangzhou ZHIYUAN Electronics Co.,Ltd.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* License file for more details.
*
*/
/**
* History:
* ================================================================
* 2020-04-20 Li XianJing <xianjimli@hotmail.com> created
*
*/
#include "tkc/mem.h"
#include "tkc/utils.h"
#include "base/input_method.h"
#include "keyboard/lang_indicator.h"
static ret_t lang_indicator_on_lang_changed(void* ctx, event_t* e) {
widget_t* widget = WIDGET(ctx);
widget_invalidate_force(widget, NULL);
return RET_OK;
}
static ret_t lang_indicator_get_prop(widget_t* widget, const char* name, value_t* v) {
lang_indicator_t* lang_indicator = LANG_INDICATOR(widget);
return_value_if_fail(lang_indicator != NULL && name != NULL && v != NULL, RET_BAD_PARAMS);
if (tk_str_eq(name, WIDGET_PROP_IMAGE)) {
value_set_str(v, lang_indicator->image);
return RET_OK;
}
return RET_NOT_FOUND;
}
static ret_t lang_indicator_set_prop(widget_t* widget, const char* name, const value_t* v) {
return_value_if_fail(widget != NULL && name != NULL && v != NULL, RET_BAD_PARAMS);
if (tk_str_eq(name, WIDGET_PROP_IMAGE)) {
return lang_indicator_set_image(widget, value_str(v));
}
return RET_NOT_FOUND;
}
static ret_t lang_indicator_on_destroy(widget_t* widget) {
lang_indicator_t* lang_indicator = LANG_INDICATOR(widget);
input_method_off(input_method(), lang_indicator->event_id);
lang_indicator->event_id = TK_INVALID_ID;
TKMEM_FREE(lang_indicator->image);
return RET_OK;
}
static ret_t lang_indicator_on_paint_self(widget_t* widget, canvas_t* c) {
wstr_t* str = &(widget->text);
lang_indicator_t* lang_indicator = LANG_INDICATOR(widget);
const char* lang = input_method_get_lang(input_method());
if (lang_indicator->image != NULL) {
char icon[128];
tk_snprintf(icon, sizeof(icon), "%s%s", lang_indicator->image, lang != NULL ? lang : "none");
widget_paint_helper(widget, c, icon, NULL);
} else {
wstr_set_utf8(str, lang != NULL ? lang : "");
widget_paint_helper(widget, c, NULL, NULL);
}
return RET_OK;
}
TK_DECL_VTABLE(lang_indicator) = {.size = sizeof(lang_indicator_t),
.type = WIDGET_TYPE_LANG_INDICATOR,
.parent = TK_PARENT_VTABLE(widget),
.set_prop = lang_indicator_set_prop,
.get_prop = lang_indicator_get_prop,
.on_destroy = lang_indicator_on_destroy,
.on_paint_self = lang_indicator_on_paint_self,
.create = lang_indicator_create};
widget_t* lang_indicator_create(widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h) {
widget_t* widget = widget_create(parent, TK_REF_VTABLE(lang_indicator), x, y, w, h);
lang_indicator_t* lang_indicator = LANG_INDICATOR(widget);
lang_indicator->event_id =
input_method_on(input_method(), EVT_IM_LANG_CHANGED, lang_indicator_on_lang_changed, widget);
return widget;
}
widget_t* lang_indicator_cast(widget_t* widget) {
return_value_if_fail(WIDGET_IS_INSTANCE_OF(widget, lang_indicator), NULL);
return widget;
}
ret_t lang_indicator_set_image(widget_t* widget, const char* image) {
lang_indicator_t* lang_indicator = LANG_INDICATOR(widget);
return_value_if_fail(lang_indicator != NULL, RET_BAD_PARAMS);
return_value_if_fail(image != NULL, RET_BAD_PARAMS);
lang_indicator->image = tk_str_copy(lang_indicator->image, image);
return RET_OK;
}

View File

@ -0,0 +1,110 @@
/**
* File: lang_indicator.h
* Author: AWTK Develop Team
* Brief: lang_indicator
*
* Copyright (c) 2018 - 2020 Guangzhou ZHIYUAN Electronics Co.,Ltd.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* License file for more details.
*
*/
/**
* History:
* ================================================================
* 2020-04-20 Li XianJing <xianjimli@hotmail.com> created
*
*/
#ifndef TK_LANG_INDICATOR_H
#define TK_LANG_INDICATOR_H
#include "base/widget.h"
BEGIN_C_DECLS
/**
* @class lang_indicator_t
* @parent widget_t
* @annotation ["scriptable","design","widget"]
*
*
*
* T9输入法
*
* lang_indicator\_t是[widget\_t](widget_t.md)widget\_t的函数均适用于lang_indicator\_t控件
*
* xml中使用"lang_indicator"lang_indicator
*
* ```xml
* <lang_indicator x="0" y="0" w="100%" h="100%" children_layout="default(c=2,r=2,m=5,s=5)">
* </lang_indicator>
* ```
*
* style来设置控件的显示风格
*
* ```xml
* <style name="default" border_color="#a0a0a0">
* <normal bg_color="#f0f0f0" />
* </style>
* ```
*/
typedef struct _lang_indicator_t {
widget_t widget;
/**
* @property {char*} image
* @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
*
*
*
*/
char* image;
/*private*/
uint32_t event_id;
} lang_indicator_t;
/**
* @method lang_indicator_create
* lang_indicator对象
* @annotation ["constructor", "scriptable"]
* @param {widget_t*} parent
* @param {xy_t} x x坐标
* @param {xy_t} y y坐标
* @param {wh_t} w
* @param {wh_t} h
*
* @return {widget_t*}
*/
widget_t* lang_indicator_create(widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
/**
* @method lang_indicator_set_image
* ()
* @annotation ["scriptable"]
* @param {widget_t*} widget
* @param {const char*} image ()
*
* @return {ret_t} RET_OK表示成功
*/
ret_t lang_indicator_set_image(widget_t* widget, const char* image);
/**
* @method lang_indicator_cast
* lang_indicator对象(使)
* @annotation ["cast", "scriptable"]
* @param {widget_t*} widget lang_indicator对象
*
* @return {widget_t*} lang_indicator对象
*/
widget_t* lang_indicator_cast(widget_t* widget);
#define WIDGET_TYPE_LANG_INDICATOR "lang_indicator"
#define LANG_INDICATOR(widget) ((lang_indicator_t*)(lang_indicator_cast(WIDGET(widget))))
END_C_DECLS
#endif /*TK_LANG_INDICATOR_H*/

View File

@ -443,10 +443,18 @@ static ret_t mledit_on_event(widget_t* widget, event_t* e) {
break;
}
case EVT_IM_COMMIT: {
text_edit_state_t state;
text_edit_get_state(mledit->model, &state);
im_commit_event_t* evt = (im_commit_event_t*)e;
if (mledit->readonly) {
break;
}
if (state.preedit) {
text_edit_preedit_clear(mledit->model);
}
if (evt->replace) {
mledit_clear(mledit);
}
@ -455,6 +463,18 @@ static ret_t mledit_on_event(widget_t* widget, event_t* e) {
widget_invalidate(widget, NULL);
break;
}
case EVT_IM_PREEDIT: {
text_edit_preedit(mledit->model);
break;
}
case EVT_IM_PREEDIT_CONFIRM: {
text_edit_preedit_confirm(mledit->model);
break;
}
case EVT_IM_PREEDIT_ABORT: {
text_edit_preedit_abort(mledit->model);
break;
}
case EVT_IM_ACTION: {
mledit_commit_str(widget, "\n");
widget_invalidate(widget, NULL);
@ -630,6 +650,8 @@ const char* s_mledit_properties[] = {
TK_DECL_VTABLE(mledit) = {.size = sizeof(mledit_t),
.type = WIDGET_TYPE_MLEDIT,
.focusable = TRUE,
.inputable = TRUE,
.clone_properties = s_mledit_properties,
.persistent_properties = s_mledit_properties,
.parent = TK_PARENT_VTABLE(widget),

View File

@ -0,0 +1,87 @@
# 输入法引擎实现
目前只支持中文输入,如果有多语言输入需求,请找专业的输入法公司合作。
这里提供的输入引擎,主要用作参考,请自行优化和裁剪。
> 如果不启用输入法,可以不用加任何输入法引擎。
## 1.输入引擎介绍
### 1.1 null 输入引擎法
* 文件 input\_engine\_null.c
* 宏WITH\_IME\_NULL
> 如果不需要中文输入法,但又需要软键盘,请启用本引擎。
### 1.2 Goole 拼音输入引擎
* 文件input\_engine\_pinyin.cpp
* 宏WITH\_IME\_PINYIN
> 如果需要拼音输入法,推荐使用本引擎。
### 1.3 简单的拼音输入引擎
* 文件input\_engine\_spinyin.c
* 宏WITH\_IME\_SPINYIN
> 优点是简单,如果不想用 Goole 拼音输入引擎,可以使用本引擎。
### 1.4 带触屏的 T9 输入法引擎
* 文件input\_engine\_t9.c
* 宏WITH\_IME\_SPINYIN
* 软键盘:
* 缺省软键盘demos/assets/default/raw/ui/kb\_default\_t9.xml
* ascii 软键盘demos/assets/default/raw/ui/kb\_ascii\_t9.xml
> 如果需要 T9 输入法,带有触摸屏,请使用本引擎。
### 1.5 不带触屏的 T9 输入法引擎
* 文件input\_engine\_t9ext.c
* 宏WITH\_IME\_T9EXT
* 软键盘:
* 缺省软键盘demos/assets/default/raw/ui/kb\_default\_t9ext.xml
> 如果需要 T9 输入法,而且没有触摸屏,使用外部硬键盘,请使用本引擎。
> 在PC上模拟测试时可以用ESC键切换输入模式在嵌入式平台可以重定义宏SWITCH\_INPUT\_MODE\_KEY来指定切换的按键。
## 2.数据生成
* t9\_en\_us.inc 由 tools/ime\_gen/to\_t9\_en.js 根据 english\_words.txt 生成。
* pinyin\_table.inc 由 tools/ime\_gen/to\_pinyin.js 根据 chinese\_words.txt 生成。
* t9\_zh\_cn.inc 由 tools/ime\_gen/to\_t9\_zh.js 根据 chinese\_words.txt 生成。
* t9ext\_zh\_cn.inc 由 tools/ime\_gen/to\_t9ext\_zh.js 根据 chinese\_words.txt 生成。
如果需要裁剪,请编辑相应的输入文件,并重新生成。
## 3. Scons 编译脚本
编辑 awtk\_config.py 中的 INPUT\_ENGINE可以选择不同的输入法引擎。
```
#INPUT_ENGINE='null'
#INPUT_ENGINE='spinyin'
#INPUT_ENGINE='t9'
#INPUT_ENGINE='t9ext'
INPUT_ENGINE='pinyin'
```
## 4. 指定软键盘
软键盘必须和输入法引擎配套使用 (T9/T9EXT),可以替换默认的软键盘 UI 文件,也可以在编辑器的属性中指定软键盘。
如:
```xml
<window anim_hint="htranslate" >
<edit x="10" y="10" w="-20" h="30" keyboard="kb_default_t9ext" focused="true" />
<edit x="10" y="50" w="-20" h="30" keyboard="kb_default_t9ext" focused="true" />
<mledit x="10" y="90" w="-20" h="80" keyboard="kb_default_t9ext" focused="true" />
</window>
```

View File

@ -0,0 +1,177 @@
/**
* File: t9.c
* Author: AWTK Develop Team
* Brief: t9 input method helper functions
*
* Copyright (c) 2018 - 2020 Guangzhou ZHIYUAN Electronics Co.,Ltd.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* License file for more details.
*
*/
/**
* History:
* ================================================================
* 2020-04-16 Li XianJing <xianjimli@hotmail.com> created
*
*/
#include "ime_utils.h"
int32_t table_search_index(const table_entry_t* items, uint32_t items_nr, const char* key,
uint32_t key_len, bool_t exact) {
int r = 0;
int32_t low = 0;
int32_t high = items_nr - 1;
while (low <= high) {
uint32_t mid = (low + high) / 2;
const table_entry_t* iter = items + mid;
if (exact) {
r = strcmp(iter->key, key);
} else {
r = strncmp(iter->key, key, key_len);
}
if (r == 0) {
return mid;
} else if (r < 0) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return -1;
}
static ret_t wbuffer_write_string_if_has_room(wbuffer_t* wb, const char* str) {
uint32_t len = 0;
if (str == NULL) {
return RET_OK;
}
len = strlen(str);
if (wbuffer_has_room(wb, len + 1)) {
return wbuffer_write_string(wb, str);
}
return RET_FAIL;
}
static uint32_t count_words(const char** words) {
uint32_t n = 0;
while (words[n] != NULL) n++;
return n;
}
uint32_t table_search(const table_entry_t* items, uint32_t items_nr, const char* key,
wbuffer_t* result, bool_t exact) {
uint32_t i = 0;
uint32_t nr = 0;
int32_t found = 0;
uint32_t key_len = 0;
const table_entry_t* iter = NULL;
return_value_if_fail(items != NULL && key != NULL && result != NULL, 0);
key_len = strlen(key);
if (key_len == 0) {
return 0;
}
/*match exact*/
found = table_search_index(items, items_nr, key, key_len, TRUE);
if (found >= 0) {
iter = items + found;
if (key_len > 1) {
nr++;
wbuffer_write_string_if_has_room(result, iter->memo);
}
while (iter->words[i] != NULL) {
if (wbuffer_write_string_if_has_room(result, iter->words[i]) != RET_OK) {
break;
}
i++;
nr++;
}
return nr;
}
if (exact) {
return nr;
}
/*match prefix*/
found = table_search_index(items, items_nr, key, key_len, FALSE);
if (found >= 0) {
uint32_t k = 0;
uint32_t key_len = strlen(key);
iter = items + found;
if (key_len > 1) {
nr++;
wbuffer_write_string_if_has_room(result, iter->memo);
}
while (found > 0) {
iter = items + found - 1;
if (strncmp(iter->key, key, key_len) == 0) {
found--;
} else {
break;
}
}
for (i = 0; i < 5; i++) {
for (k = found; k < items_nr; k++) {
iter = items + k;
if (strncmp(iter->key, key, key_len) == 0) {
if (count_words(iter->words) > i) {
if (wbuffer_write_string_if_has_room(result, iter->words[i]) != RET_OK) {
return nr;
}
nr++;
}
} else {
break;
}
}
}
}
return nr;
}
ret_t input_engine_add_chars(wbuffer_t* wb, const wchar_t** table, char c) {
char str[8];
uint32_t n = 0;
const wchar_t* p = NULL;
uint32_t index = c - '0';
return_value_if_fail(index >= 0 && index <= 9, RET_BAD_PARAMS);
p = table[index];
while (*p) {
memset(str, 0x00, sizeof(str));
tk_utf8_from_utf16_ex(p, 1, str, sizeof(str));
if (wbuffer_write_string(wb, str) != RET_OK) {
break;
}
n++;
p++;
}
return n;
}

View File

@ -0,0 +1,45 @@
/**
* File: t9.h
* Author: AWTK Develop Team
* Brief: t9 input method helper functions
*
* Copyright (c) 2018 - 2020 Guangzhou ZHIYUAN Electronics Co.,Ltd.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* License file for more details.
*
*/
/**
* History:
* ================================================================
* 2020-04-16 Li XianJing <xianjimli@hotmail.com> created
*
*/
#include "tkc/mem.h"
#include "tkc/utf8.h"
#include "tkc/buffer.h"
#ifndef TK_IME_UTILS
#define TK_IME_UTILS
BEGIN_C_DECLS
typedef struct _table_entry_t {
const char* key;
const char* memo;
const char** words;
} table_entry_t;
uint32_t table_search(const table_entry_t* items, uint32_t items_nr, const char* keys,
wbuffer_t* result, bool_t exact);
ret_t input_engine_add_chars(wbuffer_t* wb, const wchar_t** table, char c);
END_C_DECLS
#endif /*TK_IME_UTILS*/

View File

@ -22,6 +22,9 @@
#include "tkc/mem.h"
#include "tkc/buffer.h"
#include "base/input_engine.h"
#include "base/input_method.h"
#ifdef WITH_IME_NULL
static ret_t input_engine_null_reset_input(input_engine_t* engine) {
(void)engine;
@ -29,20 +32,21 @@ static ret_t input_engine_null_reset_input(input_engine_t* engine) {
return RET_OK;
}
static ret_t input_engine_null_input(input_engine_t* engine, int c) {
static ret_t input_engine_null_search(input_engine_t* engine, const char* keys) {
wbuffer_t wb;
uint32_t keys_size = strlen(keys);
wbuffer_init(&wb, (uint8_t*)(engine->candidates), sizeof(engine->candidates));
(void)c;
if (engine->keys.size > 0) {
wbuffer_write_string(&wb, engine->keys.str);
if (keys_size > 0) {
wbuffer_write_string(&wb, keys);
wbuffer_write_string(&wb, "广");
wbuffer_write_string(&wb, "");
wbuffer_write_string(&wb, "");
wbuffer_write_string(&wb, "");
wbuffer_write_string(&wb, "电子");
wbuffer_write_string(&wb, "有限公司");
engine->candidates_nr = 8;
engine->candidates_nr = 7;
input_method_dispatch_candidates(engine->im, engine->candidates, engine->candidates_nr);
} else {
engine->candidates_nr = 0;
}
@ -50,13 +54,14 @@ static ret_t input_engine_null_input(input_engine_t* engine, int c) {
return RET_OK;
}
input_engine_t* input_engine_create(void) {
input_engine_t* input_engine_create(input_method_t* im) {
input_engine_t* engine = TKMEM_ZALLOC(input_engine_t);
return_value_if_fail(engine != NULL, NULL);
str_init(&(engine->keys), TK_IM_MAX_INPUT_CHARS + 1);
engine->reset_input = input_engine_null_reset_input;
engine->input = input_engine_null_input;
engine->search = input_engine_null_search;
engine->im = im;
return engine;
}
@ -68,3 +73,4 @@ ret_t input_engine_destroy(input_engine_t* engine) {
return RET_OK;
}
#endif /*WITH_IME_NULL*/

View File

@ -23,12 +23,20 @@
#include "tkc/utf8.h"
#include "tkc/buffer.h"
#include "base/input_engine.h"
#include "base/input_method.h"
#ifdef WITH_IME_PINYIN
#include "pinyinime.h"
#define MAX_WORD_LEN 32
using namespace ime_pinyin;
static const char* input_engine_pinyin_get_lang(input_engine_t* engine) {
return IM_LANG_ZH_CN;
}
static ret_t input_engine_pinyin_reset_input(input_engine_t* engine) {
(void)engine;
im_reset_search();
@ -60,13 +68,21 @@ static ret_t input_engine_pinyin_add_candidate(input_engine_t* engine, wbuffer_t
return wbuffer_write_string(wb, str);
}
static ret_t input_engine_pinyin_input(input_engine_t* engine, int c) {
uint32_t i = 0;
static ret_t input_engine_pinyin_search(input_engine_t* engine, const char* keys) {
wbuffer_t wb;
uint32_t nr = im_search(engine->keys.str, engine->keys.size);
uint32_t i = 0;
uint32_t keys_size = strlen(keys);
uint32_t nr = im_search(keys, keys_size);
wbuffer_init(&wb, (uint8_t*)(engine->candidates), sizeof(engine->candidates));
wbuffer_write_string(&wb, engine->keys.str);
if (keys_size == 0) {
input_engine_reset_input(engine);
input_method_dispatch_candidates(engine->im, engine->candidates, 0);
return RET_OK;
}
wbuffer_write_string(&wb, keys);
engine->candidates_nr = 1;
for (i = 0; i < nr; i++) {
@ -77,18 +93,21 @@ static ret_t input_engine_pinyin_input(input_engine_t* engine, int c) {
}
}
(void)c;
input_method_dispatch_candidates(engine->im, engine->candidates, engine->candidates_nr);
return RET_OK;
}
input_engine_t* input_engine_create(void) {
input_engine_t* input_engine_create(input_method_t* im) {
input_engine_t* engine = TKMEM_ZALLOC(input_engine_t);
return_value_if_fail(engine != NULL, NULL);
str_init(&(engine->keys), TK_IM_MAX_INPUT_CHARS + 1);
engine->reset_input = input_engine_pinyin_reset_input;
engine->input = input_engine_pinyin_input;
engine->im = im;
engine->search = input_engine_pinyin_search;
engine->get_lang = input_engine_pinyin_get_lang;
im_open_decoder_rom();
im_set_max_lens(32, 16);
@ -104,3 +123,5 @@ ret_t input_engine_destroy(input_engine_t* engine) {
return RET_OK;
}
#endif /*WITH_IME_PINYIN*/

View File

@ -0,0 +1,90 @@
/**
* File: input_engine_spinyin.c
* Author: AWTK Develop Team
* Brief: simple pinyin input engine
*
* Copyright (c) 2018 - 2020 Guangzhou ZHIYUAN Electronics Co.,Ltd.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* License file for more details.
*
*/
/**
* History:
* ================================================================
* 2020-04-18 Li XianJing <xianjimli@hotmail.com> created
*
*/
#include "tkc/mem.h"
#include "tkc/utf8.h"
#include "tkc/buffer.h"
#include "base/input_engine.h"
#include "base/input_method.h"
#ifdef WITH_IME_SPINYIN
#include "ime_utils.h"
#include "pinyin_table.inc"
static const char* input_engine_spinyin_get_lang(input_engine_t* engine) {
return IM_LANG_ZH_CN;
}
static ret_t input_engine_spinyin_reset_input(input_engine_t* engine) {
input_method_dispatch_candidates(engine->im, engine->candidates, 0);
return RET_OK;
}
static ret_t input_engine_spinyin_search(input_engine_t* engine, const char* keys) {
wbuffer_t wb;
uint32_t keys_size = strlen(keys);
const table_entry_t* items = s_pinyin_chinese_items;
uint32_t items_nr = ARRAY_SIZE(s_pinyin_chinese_items);
if (keys_size < 1) {
input_engine_reset_input(engine);
return RET_OK;
}
wbuffer_init(&wb, (uint8_t*)(engine->candidates), sizeof(engine->candidates));
engine->candidates_nr = 1;
wbuffer_write_string(&wb, keys);
engine->candidates_nr += table_search(items, items_nr, keys, &wb, FALSE);
input_method_dispatch_candidates(engine->im, engine->candidates, engine->candidates_nr);
return RET_OK;
}
static ret_t input_engine_spinyin_set_lang(input_engine_t* engine, const char* lang) {
return RET_OK;
}
input_engine_t* input_engine_create(input_method_t* im) {
input_engine_t* engine = TKMEM_ZALLOC(input_engine_t);
return_value_if_fail(engine != NULL, NULL);
str_init(&(engine->keys), TK_IM_MAX_INPUT_CHARS + 1);
engine->reset_input = input_engine_spinyin_reset_input;
engine->search = input_engine_spinyin_search;
engine->set_lang = input_engine_spinyin_set_lang;
engine->get_lang = input_engine_spinyin_get_lang;
engine->im = im;
return engine;
}
ret_t input_engine_destroy(input_engine_t* engine) {
return_value_if_fail(engine != NULL, RET_BAD_PARAMS);
str_reset(&(engine->keys));
TKMEM_FREE(engine);
return RET_OK;
}
#endif /*WITH_IME_SPINYIN*/

View File

@ -0,0 +1,127 @@
/**
* File: input_engine_t9.c
* Author: AWTK Develop Team
* Brief: t9 input method engine
*
* Copyright (c) 2018 - 2020 Guangzhou ZHIYUAN Electronics Co.,Ltd.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* License file for more details.
*
*/
/**
* History:
* ================================================================
* 2020-04-16 Li XianJing <xianjimli@hotmail.com> created
*
*/
#include "tkc/mem.h"
#include "tkc/utf8.h"
#include "tkc/utils.h"
#include "tkc/buffer.h"
#include "base/input_engine.h"
#ifdef WITH_IME_T9
#include "ime_utils.h"
#include "t9_zh_cn.inc"
#include "t9_en_us.inc"
typedef struct _input_engine_t9_t {
input_engine_t input_engine;
uint32_t items_nr;
const table_entry_t* items;
char lang[TK_NAME_LEN + 1];
} input_engine_t9_t;
static const char* input_engine_t9_get_lang(input_engine_t* engine) {
input_engine_t9_t* t9 = (input_engine_t9_t*)engine;
return t9->lang;
}
static ret_t input_engine_t9_reset_input(input_engine_t* engine) {
return RET_OK;
}
static const wchar_t* s_table_num_chars[] = {
L"", L"ABC", L"DEF", L"GHI", L"JKL", L"MNO", L"PQRS", L"TUV", L"WXYZ", L"",
};
static ret_t input_engine_table_search(input_engine_t* engine, const char* keys) {
wbuffer_t wb;
uint32_t keys_size = strlen(keys);
input_engine_t9_t* t9 = (input_engine_t9_t*)engine;
wbuffer_init(&wb, (uint8_t*)(engine->candidates), sizeof(engine->candidates));
if (keys_size == 1) {
engine->candidates_nr = input_engine_add_chars(&wb, s_table_num_chars, keys[0]);
} else {
engine->candidates_nr = 0;
}
engine->candidates_nr += table_search(t9->items, t9->items_nr, keys, &wb, FALSE);
log_debug("key=%s %d\n", keys, engine->candidates_nr);
if (engine->candidates_nr == 0 && keys_size > 1) {
engine->candidates_nr = 1;
wbuffer_write_string(&wb, keys);
}
input_method_dispatch_candidates(engine->im, engine->candidates, engine->candidates_nr);
return RET_OK;
}
static ret_t input_engine_t9_set_lang(input_engine_t* engine, const char* lang) {
input_engine_t9_t* t9 = (input_engine_t9_t*)engine;
return_value_if_fail(engine != NULL, RET_BAD_PARAMS);
log_debug("input_engine_t9_set_lang: %s\n", lang);
if (tk_str_ieq(lang, "zh_cn")) {
t9->items = s_t9_numbers_pinyin;
t9->items_nr = ARRAY_SIZE(s_t9_numbers_pinyin);
} else if (tk_str_ieq(lang, "en_us")) {
t9->items = s_en_us_items;
t9->items_nr = ARRAY_SIZE(s_en_us_items);
} else {
log_debug("not support lang:%s\n", lang);
}
tk_strncpy(t9->lang, lang, TK_NAME_LEN);
return RET_OK;
}
input_engine_t* input_engine_create(input_method_t* im) {
input_engine_t9_t* t9 = TKMEM_ZALLOC(input_engine_t9_t);
input_engine_t* engine = (input_engine_t*)t9;
return_value_if_fail(engine != NULL, NULL);
str_init(&(engine->keys), TK_IM_MAX_INPUT_CHARS + 1);
engine->reset_input = input_engine_t9_reset_input;
engine->search = input_engine_table_search;
engine->set_lang = input_engine_t9_set_lang;
engine->get_lang = input_engine_t9_get_lang;
engine->im = im;
t9->items = s_en_us_items;
t9->items_nr = ARRAY_SIZE(s_en_us_items);
return engine;
}
ret_t input_engine_destroy(input_engine_t* engine) {
return_value_if_fail(engine != NULL, RET_BAD_PARAMS);
str_reset(&(engine->keys));
TKMEM_FREE(engine);
return RET_OK;
}
#endif /*WITH_IME_T9*/

View File

@ -0,0 +1,351 @@
/**
* File: input_engine_t9ext.c
* Author: AWTK Develop Team
* Brief: t9 input method engine
*
* Copyright (c) 2018 - 2020 Guangzhou ZHIYUAN Electronics Co.,Ltd.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* License file for more details.
*
*/
/**
* History:
* ================================================================
* 2020-04-16 Li XianJing <xianjimli@hotmail.com> created
*
*/
#include "tkc/mem.h"
#include "tkc/utf8.h"
#include "tkc/buffer.h"
#include "base/input_engine.h"
#include "base/input_method.h"
#ifdef WITH_IME_T9EXT
#include "ime_utils.h"
#include "t9ext_zh_cn.inc"
#include "pinyin_table.inc"
typedef enum _input_mode_t {
INPUT_MODE_DIGIT = 0,
INPUT_MODE_LOWER,
INPUT_MODE_UPPER,
INPUT_MODE_ZH,
INPUT_MODE_NR
} input_mode_t;
typedef struct _input_engine_t9ext_t {
input_engine_t input_engine;
input_mode_t mode;
char pre_candidates[128];
uint32_t pre_candidates_nr;
/*for lower/upper*/
char last_c;
uint32_t index;
uint32_t timer_id;
} input_engine_t9ext_t;
#ifndef SWITCH_INPUT_MODE_KEY
#define SWITCH_INPUT_MODE_KEY TK_KEY_ESCAPE
#endif /*SWITCH_INPUT_MODE_KEY*/
static ret_t input_engine_t9ext_input(input_engine_t* engine, int key) {
input_engine_t9ext_t* t9 = (input_engine_t9ext_t*)engine;
if (key == SWITCH_INPUT_MODE_KEY) {
event_t e = event_init(EVT_IM_LANG_CHANGED, engine->im);
t9->mode = (t9->mode + 1) % INPUT_MODE_NR;
input_engine_reset_input(engine);
t9->index = 0;
t9->last_c = 0;
if (t9->timer_id != TK_INVALID_ID) {
timer_remove(t9->timer_id);
t9->timer_id = TK_INVALID_ID;
}
input_method_dispatch(engine->im, &e);
input_method_dispatch_candidates(engine->im, engine->candidates, 0);
return RET_OK;
}
if (key >= TK_KEY_0 && key <= TK_KEY_9) {
return RET_OK;
}
if (key == TK_KEY_TAB) {
widget_focus_next(engine->im->widget);
return RET_OK;
}
return RET_FAIL;
}
static ret_t input_engine_t9ext_reset_input(input_engine_t* engine) {
input_engine_t9ext_t* t9 = (input_engine_t9ext_t*)engine;
input_method_dispatch_pre_candidates(engine->im, t9->pre_candidates, 0, -1);
return RET_OK;
}
static const wchar_t* s_table_num_chars[] = {L"", L",。、:;?!《》『』(){}【】",
L"2ABCabc", L"3DEFdef",
L"4GHIghi", L"5JKLjkl",
L"6MNOmno", L"7PQRSpqrs",
L"8TUVtuv", L"9WXYZwxyz",
NULL};
static ret_t input_engine_t9ext_commit_char(input_engine_t* engine, char c) {
char str[2] = {c, 0};
return input_method_commit_text(engine->im, str);
}
static ret_t input_engine_t9ext_search_digit(input_engine_t* engine, const char* keys) {
input_engine_t9ext_commit_char(engine, *keys);
input_engine_reset_input(engine);
return RET_OK;
}
static const wchar_t* s_table_num_lower[] = {L" ", L",.?:/@;:\"\'#$%^&*()_+-={}[]<>|\\",
L"abc", L"def",
L"ghi", L"jkl",
L"mno", L"pqrs",
L"tuv", L"wxyz",
NULL};
static const wchar_t* s_table_num_upper[] = {L" ", L",.?:/@;:\"\'#$%^&*()_+-={}[]<>|\\",
L"ABC", L"DEF",
L"GHI", L"JKL",
L"MNO", L"PQRS",
L"TUV", L"WXYZ",
NULL};
static ret_t input_engine_t9ext_preedit_confirm_timer(const timer_info_t* info) {
input_engine_t* engine = (input_engine_t*)(info->ctx);
input_engine_t9ext_t* t9 = (input_engine_t9ext_t*)(info->ctx);
t9->index = 0;
t9->last_c = 0;
t9->timer_id = TK_INVALID_ID;
input_method_dispatch_preedit_confirm(engine->im);
input_engine_reset_input(engine);
return RET_REMOVE;
}
static ret_t input_engine_t9ext_search_alpha(input_engine_t* engine, char c,
const wchar_t** table) {
uint32_t i = 0;
wbuffer_t wb;
input_engine_t9ext_t* t9 = (input_engine_t9ext_t*)engine;
return_value_if_fail(c >= '0' && c <= '9', RET_FAIL);
i = c - '0';
if (t9->timer_id == TK_INVALID_ID) {
t9->index = 0;
t9->last_c = c;
input_method_dispatch_preedit(engine->im);
t9->timer_id = timer_add(input_engine_t9ext_preedit_confirm_timer, engine, 1000);
} else {
timer_modify(t9->timer_id, 1000);
if (t9->last_c != c) {
input_method_dispatch_preedit_confirm(engine->im);
t9->index = 0;
t9->last_c = c;
input_method_dispatch_preedit(engine->im);
} else {
t9->index = (t9->index + 1) % wcslen(table[i]);
}
}
input_engine_t9ext_commit_char(engine, table[i][t9->index]);
engine->keys.size = 0;
wbuffer_init(&wb, (uint8_t*)(t9->pre_candidates), sizeof(t9->pre_candidates));
t9->pre_candidates_nr = input_engine_add_chars(&wb, table, c);
input_method_dispatch_pre_candidates(engine->im, t9->pre_candidates, t9->pre_candidates_nr,
t9->index);
return RET_OK;
}
static ret_t input_engine_t9ext_search_lower(input_engine_t* engine, const char* keys) {
return input_engine_t9ext_search_alpha(engine, *keys, s_table_num_lower);
}
static ret_t input_engine_t9ext_search_upper(input_engine_t* engine, const char* keys) {
return input_engine_t9ext_search_alpha(engine, *keys, s_table_num_upper);
}
static ret_t input_engine_t9ext_search_zh(input_engine_t* engine, const char* keys) {
wbuffer_t wb;
const char* first = NULL;
uint32_t keys_size = strlen(keys);
input_engine_t9ext_t* t9 = (input_engine_t9ext_t*)engine;
if (isdigit(keys[0])) {
/*map digits to pinyin*/
const table_entry_t* items = s_t9ext_numbers_pinyin;
uint32_t items_nr = ARRAY_SIZE(s_t9ext_numbers_pinyin);
wbuffer_init(&wb, (uint8_t*)(t9->pre_candidates), sizeof(t9->pre_candidates));
first = (const char*)(wb.data);
if (keys_size == 1) {
t9->pre_candidates_nr = 1;
wbuffer_write_string(&wb, keys);
} else {
t9->pre_candidates_nr = 0;
}
t9->pre_candidates_nr += table_search(items, items_nr, keys, &wb, FALSE);
if (t9->pre_candidates_nr == 0) {
t9->pre_candidates_nr = 1;
wbuffer_write_string(&wb, keys);
input_method_dispatch_pre_candidates(engine->im, t9->pre_candidates, t9->pre_candidates_nr,
0);
} else {
input_method_dispatch_pre_candidates(engine->im, t9->pre_candidates, t9->pre_candidates_nr,
0);
wbuffer_init(&wb, (uint8_t*)(engine->candidates), sizeof(engine->candidates));
if (keys_size == 1) {
engine->candidates_nr = input_engine_add_chars(&wb, s_table_num_chars, *keys);
} else if (*first) {
/*map first pinyin to Chinese chars*/
const table_entry_t* items = s_pinyin_chinese_items;
uint32_t items_nr = ARRAY_SIZE(s_pinyin_chinese_items);
engine->candidates_nr = table_search(items, items_nr, first, &wb, TRUE);
}
input_method_dispatch_candidates(engine->im, engine->candidates, engine->candidates_nr);
}
} else {
/*map pinyin to Chinese chars*/
const table_entry_t* items = s_pinyin_chinese_items;
uint32_t items_nr = ARRAY_SIZE(s_pinyin_chinese_items);
wbuffer_init(&wb, (uint8_t*)(engine->candidates), sizeof(engine->candidates));
engine->candidates_nr = table_search(items, items_nr, keys, &wb, TRUE);
input_method_dispatch_candidates(engine->im, engine->candidates, engine->candidates_nr);
}
return RET_OK;
}
static ret_t input_engine_t9ext_search(input_engine_t* engine, const char* keys) {
uint32_t keys_size = 0;
input_engine_t9ext_t* t9 = (input_engine_t9ext_t*)engine;
return_value_if_fail(keys != NULL, RET_FAIL);
keys_size = strlen(keys);
if (keys_size == 0) {
input_engine_reset_input(engine);
return RET_OK;
}
log_debug("keys:%s\n", keys);
if (t9->mode == INPUT_MODE_DIGIT) {
return input_engine_t9ext_search_digit(engine, keys);
}
if (keys[0] == '0') {
input_engine_reset_input(engine);
input_method_commit_text(engine->im, " ");
return RET_OK;
}
switch (t9->mode) {
case INPUT_MODE_LOWER: {
return input_engine_t9ext_search_lower(engine, keys);
}
case INPUT_MODE_UPPER: {
return input_engine_t9ext_search_upper(engine, keys);
}
default: {
if (keys[0] == '1') {
wbuffer_t wb;
wbuffer_init(&wb, (uint8_t*)(t9->pre_candidates), sizeof(t9->pre_candidates));
t9->pre_candidates_nr = 1;
wbuffer_write_string(&wb, keys);
input_engine_reset_input(engine);
input_method_dispatch_pre_candidates(engine->im, t9->pre_candidates, t9->pre_candidates_nr,
0);
wbuffer_init(&wb, (uint8_t*)(engine->candidates), sizeof(engine->candidates));
engine->candidates_nr = input_engine_add_chars(&wb, s_table_num_chars, '1');
input_method_dispatch_candidates(engine->im, engine->candidates, engine->candidates_nr);
return RET_OK;
}
return input_engine_t9ext_search_zh(engine, keys);
}
}
return RET_OK;
}
static ret_t input_engine_t9ext_set_lang(input_engine_t* engine, const char* lang) {
return RET_OK;
}
static const char* input_engine_t9ext_get_lang(input_engine_t* engine) {
input_engine_t9ext_t* t9 = (input_engine_t9ext_t*)engine;
switch (t9->mode) {
case INPUT_MODE_DIGIT: {
return IM_LANG_DIGIT;
}
case INPUT_MODE_LOWER: {
return IM_LANG_LOWER;
}
case INPUT_MODE_UPPER: {
return IM_LANG_UPPER;
}
default: { return "pinyin"; }
}
}
input_engine_t* input_engine_create(input_method_t* im) {
input_engine_t9ext_t* t9 = TKMEM_ZALLOC(input_engine_t9ext_t);
input_engine_t* engine = (input_engine_t*)t9;
return_value_if_fail(engine != NULL, NULL);
t9->mode = INPUT_MODE_ZH;
str_init(&(engine->keys), TK_IM_MAX_INPUT_CHARS + 1);
engine->im = im;
engine->input = input_engine_t9ext_input;
engine->search = input_engine_t9ext_search;
engine->set_lang = input_engine_t9ext_set_lang;
engine->get_lang = input_engine_t9ext_get_lang;
engine->reset_input = input_engine_t9ext_reset_input;
return engine;
}
ret_t input_engine_destroy(input_engine_t* engine) {
return_value_if_fail(engine != NULL, RET_BAD_PARAMS);
str_reset(&(engine->keys));
TKMEM_FREE(engine);
return RET_OK;
}
#endif /*WITH_IME_T9EXT*/

File diff suppressed because it is too large Load Diff

26325
src/input_engines/t9_en_us.inc Normal file

File diff suppressed because it is too large Load Diff

87961
src/input_engines/t9_zh_cn.inc Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -313,7 +313,7 @@ input_method_t* input_method_default_create(void) {
im->destroy = input_method_default_destroy;
emitter_init(&(im->emitter));
im->engine = input_engine_create();
im->engine = input_engine_create(im);
#ifndef WITHOUT_SUGGEST_WORDS
im->suggest_words = suggest_words_create((const asset_info_t*)(data_words_bin));

File diff suppressed because it is too large Load Diff

View File

@ -144,6 +144,12 @@ ret_t wbuffer_write_binary(wbuffer_t* wbuffer, const void* data, uint32_t size)
return RET_OK;
}
bool_t wbuffer_has_room(wbuffer_t* wbuffer, uint32_t size) {
return_value_if_fail(wbuffer != NULL && wbuffer->data != NULL, FALSE);
return (wbuffer->cursor + size) <= wbuffer->capacity;
}
ret_t wbuffer_write_string(wbuffer_t* wbuffer, const char* data) {
return_value_if_fail(data != NULL, RET_BAD_PARAMS);

View File

@ -197,6 +197,16 @@ ret_t wbuffer_write_binary(wbuffer_t* wbuffer, const void* data, uint32_t size);
*/
ret_t wbuffer_write_string(wbuffer_t* wbuffer, const char* data);
/**
* @method wbuffer_has_room
*
* @param {wbuffer_t*} wbuffer wbuffer对象
* @param {uint32_t} size
*
* @return {bool_t} FALSE表示无
*/
bool_t wbuffer_has_room(wbuffer_t* wbuffer, uint32_t size);
/**
* @class rbuffer_t
* Read Buffer

View File

@ -583,15 +583,35 @@ ret_t edit_on_event(widget_t* widget, event_t* e) {
break;
}
case EVT_IM_COMMIT: {
text_edit_state_t state;
text_edit_get_state(edit->model, &state);
im_commit_event_t* evt = (im_commit_event_t*)e;
if (state.preedit) {
text_edit_preedit_clear(edit->model);
}
if (evt->replace) {
edit_clear(edit);
}
edit_commit_str(widget, evt->text);
widget_invalidate(widget, NULL);
break;
}
case EVT_IM_PREEDIT: {
text_edit_preedit(edit->model);
break;
}
case EVT_IM_PREEDIT_CONFIRM: {
text_edit_preedit_confirm(edit->model);
break;
}
case EVT_IM_PREEDIT_ABORT: {
text_edit_preedit_abort(edit->model);
break;
}
case EVT_BLUR: {
input_method_request(input_method(), NULL);

Binary file not shown.

File diff suppressed because it is too large Load Diff

71
tools/ime_gen/helper.js Normal file
View File

@ -0,0 +1,71 @@
const fs = require('fs');
const mapTable = {
'a': '2',
'b': '2',
'c': '2',
'd': '3',
'e': '3',
'f': '3',
'g': '4',
'h': '4',
'i': '4',
'j': '5',
'k': '5',
'l': '5',
'm': '6',
'n': '6',
'o': '6',
'p': '7',
'q': '7',
'r': '7',
's': '7',
't': '8',
'u': '8',
'v': '8',
'w': '9',
'x': '9',
'y': '9',
'z': '9'
};
function mapChar(c) {
return mapTable[c]
}
function mapStr(str) {
s = ''
if (!str) {
return s;
}
for (let i = 0; i < str.length; i++) {
s += mapChar(str[i])
}
return s;
}
function saveResult(filename, result) {
const BOM = "\ufeff";
fs.writeFileSync(filename, BOM + result);
console.log(`write result to ${filename}`);
}
function mergePinyin(words) {
let pinyin = '';
for (let i = 3; i < words.length; i++) {
pinyin += words[i];
}
return pinyin;
}
module.exports = {
saveResult:saveResult,
mergePinyin : mergePinyin,
mapStr : mapStr
};

78471
tools/ime_gen/pinyin_table.inc Normal file

File diff suppressed because it is too large Load Diff

26325
tools/ime_gen/t9_en_us.inc Normal file

File diff suppressed because it is too large Load Diff

87961
tools/ime_gen/t9_zh_cn.inc Normal file

File diff suppressed because it is too large Load Diff

87084
tools/ime_gen/t9ext_zh_cn.inc Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,82 @@
const fs = require('fs');
const helper = require('./helper');
function genPinYinTable(obj) {
let arr = []
let result = ''
for (let key in obj) {
let value = obj[key];
if (value.items.length == 0) {
continue;
}
value.items.sort((a, b) => {
return b.freq - a.freq;
});
result += `static const char* s_py_${key}[] = {\n`
value.items.forEach(iter => {
result += ` \"${iter.char}\",\n`;
});
result += ' NULL\n';
result += '};\n';
arr.push(value);
}
arr.sort((a, b) => {
return a.key.localeCompare(b.key);
});
result += `static const table_entry_t s_pinyin_chinese_items[] = {\n`;
arr.forEach(iter => {
let key = iter.key;
result += ` {"${key}", NULL, s_py_${key}},\n`
});
result += '};\n';
helper.saveResult(`pinyin_table.inc`, result);
}
function toPinyin(filename, onlySimpleChinese) {
let obj = {}
const content = fs.readFileSync(filename, "utf16le");
const lines = content.split('\n');
lines.forEach((line, index) => {
const words = line.split(' ');
const char = words[0];
const freq = parseFloat(words[1]);
const tw = words[2] === '1';
const pinyin = helper.mergePinyin(words);
const key = pinyin;
const notExist = !obj[key];
if (!key) {
return;
}
if (onlySimpleChinese && tw) {
return;
}
if (notExist) {
obj[key] = {
key: key,
items: [],
}
}
let value = obj[key];
value.items.push({
char: char,
pinyin: pinyin,
freq: freq
});
});
genPinYinTable(obj);
}
toPinyin('chinese_words.txt', true);

79
tools/ime_gen/to_t9_en.js Normal file
View File

@ -0,0 +1,79 @@
const fs = require('fs');
const helper = require('./helper');
function toT9(filename, lang) {
let obj = {}
let result = ''
const content = fs.readFileSync(filename).toString();
const lines = content.split('\n');
lines.forEach((line, index) => {
const word = line;
const freq = lines.length - index;
const key = helper.mapStr(word);
const notExist = !obj[key];
if (!key) {
return;
}
console.log(`${word} => ${key}`);
if (notExist) {
obj[key] = {
key: key,
word: '',
items: []
}
}
let value = obj[key];
if (value.word.indexOf(' ' + word) < 0) {
value.word = value.word + ' ' + word;
}
value.items.push({
word: word,
freq: freq
});
});
let arr = []
for (let key in obj) {
let value = obj[key];
if (value.items.length == 0) {
continue;
}
value.items.sort((a, b) => {
return b.freq - a.freq;
});
result += `/*${value.word}*/\n`;
result += `static const char* s_${lang}_${key}[] = {\n`
value.items.forEach(iter => {
result += ` \"${iter.word}\",\n`;
});
result += ' NULL\n';
result += '};\n';
arr.push(value);
}
arr.sort((a, b) => {
return a.key.localeCompare(b.key);
});
result += `static const table_entry_t s_${lang}_items[] = {\n`;
arr.forEach(iter => {
let key = iter.key;
let word = iter.items[0].word;
result += ` {"${key}", "${word}", s_${lang}_${key}},\n`
});
result += '};\n';
helper.saveResult(`t9_${lang}.inc`, result);
}
toT9('english_words.txt', 'en_us');

88
tools/ime_gen/to_t9_zh.js Normal file
View File

@ -0,0 +1,88 @@
const fs = require('fs');
const helper = require('./helper');
function toT9(filename, onlySimpleChinese) {
let obj = {}
let result = ''
const content = fs.readFileSync(filename, "utf16le");
const lines = content.split('\n');
lines.forEach((line, index) => {
const words = line.split(' ');
const char = words[0];
const freq = parseFloat(words[1]);
const tw = words[2] === '1';
const pinyin = helper.mergePinyin(words);
const key = helper.mapStr(pinyin);
const notExist = !obj[key];
if (!key) {
return;
}
if (onlySimpleChinese && tw) {
return;
}
console.log(`${pinyin} => ${key}`);
if (notExist) {
obj[key] = {
pinyin: '',
key: key,
items: []
}
}
let value = obj[key];
if (value.pinyin.indexOf(' ' + pinyin) < 0) {
value.pinyin = value.pinyin + ' ' + pinyin;
}
value.items.push({
pinyin: pinyin,
char: char,
freq: freq
});
});
let arr = []
for (let key in obj) {
let value = obj[key];
if (value.items.length == 0) {
continue;
}
value.items.sort((a, b) => {
return b.freq - a.freq;
});
result += `/*${value.pinyin}*/\n`;
result += `static const char* s_${key}[] = {\n`
value.items.forEach(iter => {
result += ` \"${iter.char}\",\n`;
});
result += ' NULL\n';
result += '};\n';
arr.push(value);
}
arr.sort((a, b) => {
return a.key.localeCompare(b.key);
});
result += `static const table_entry_t s_t9_numbers_pinyin[] = {\n`;
arr.forEach(iter => {
let key = iter.key;
let pinyin = iter.items[0].pinyin;
result += ` {"${key}", "${pinyin}", s_${key}},\n`
});
result += '};\n';
helper.saveResult(`t9_zh_cn.inc`, result);
}
toT9('chinese_words.txt', true);

View File

@ -0,0 +1,99 @@
const fs = require('fs');
const helper = require('./helper');
function mergePinyin(words) {
let pinyin = '';
for (let i = 3; i < words.length; i++) {
pinyin += words[i];
}
return pinyin;
}
function genPinYinTable(obj) {
let arr = []
let result = ''
for (let key in obj) {
let value = obj[key];
if (value.items.length == 0) {
continue;
}
value.items.sort((a, b) => {
return b.freq - a.freq;
});
result += `/*${value.pinyin}*/\n`;
result += `static const char* s_${key}[] = {\n`
for(let pinyin in value.pinyin) {
result += ` \"${pinyin}\",\n`;
}
result += ' NULL\n';
result += '};\n';
arr.push(value);
}
arr.sort((a, b) => {
return a.key.localeCompare(b.key);
});
result += `static const table_entry_t s_t9ext_numbers_pinyin[] = {\n`;
arr.forEach(iter => {
let key = iter.key;
let pinyin = iter.items[0].pinyin;
result += ` {"${key}", NULL, s_${key}},\n`
});
result += '};\n';
helper.saveResult(`t9ext_zh_cn.inc`, result);
}
function toT9(filename, onlySimpleChinese) {
let obj = {}
const content = fs.readFileSync(filename, "utf16le");
const lines = content.split('\n');
lines.forEach((line, index) => {
const words = line.split(' ');
const char = words[0];
const freq = parseFloat(words[1]);
const tw = words[2] === '1';
const pinyin = mergePinyin(words);
const key = helper.mapStr(pinyin);
const notExist = !obj[key];
if (!key) {
return;
}
if (onlySimpleChinese && tw) {
return;
}
console.log(`${pinyin} => ${key}`);
if (notExist) {
obj[key] = {
key: key,
items: [],
pinyin: {}
}
}
let value = obj[key];
value.pinyin[pinyin] = true
value.items.push({
pinyin: pinyin,
char: char,
freq: freq
});
});
genPinYinTable(obj)
}
toT9('chinese_words.txt', true);

View File

@ -27,6 +27,16 @@ node gen_words_json.js
node to_words_bin.js
```
### 使用现有数据
chinese\_with\_freq.txt是从 https://github.com/ling0322/webdict 下载的。
如果不想自己生成,可以直接使用该文件:
```
node to_json.js
```
### 更新数据
在awtk根目录下运行

File diff suppressed because it is too large Load Diff

51
tools/word_gen/to_json.js Normal file
View File

@ -0,0 +1,51 @@
let fs = require("fs");
let content = fs.readFileSync("chinese_with_freq.txt").toString();
let lines = content.split('\n');
let obj = {};
lines.forEach(line => {
const words = line.split(' ');
const chinese = words[0];
const freq = words[1];
const c = chinese.substr(0, 1);
if(chinese.length == 1) {
return;
}
if(!obj[c]) {
obj[c] = {
c : c,
words : []
}
}
let value = obj[c];
value.words.push({
w:chinese.substr(1),
f:freq
});
});
let arr = []
for(let key in obj) {
let value = obj[key];
value.words.sort((a, b) => {
return b.f - a.f;
});
if(value.words.length > 10) {
value.words.length = 10;
}
arr.push(value);
}
arr.sort((a, b) => {
console.log(a.c, b.c)
return a.c.charCodeAt(0) - b.c.charCodeAt(0);
});
fs.writeFileSync("words.json", JSON.stringify(arr, null, '\t'));
console.log('write to words.json');

View File

@ -47,5 +47,5 @@ function outputWords(arr) {
}
outputWords(JSON.parse(fs.readFileSync("./words.json").toString()))
console.log("write to words.bin");

Binary file not shown.

File diff suppressed because it is too large Load Diff