From 895f7af02a4659d97e32c393d615645fa6220d57 Mon Sep 17 00:00:00 2001 From: Tae-Young Chung Date: Thu, 10 Sep 2020 11:09:06 +0900 Subject: [PATCH] Downgrade to version 2.6.7 sjis.c, gb18030.c gb2312.c are parts of LIBICONV opensource with GPL-2.0 license. It was added after 2.6.7 so downgrade to 2.7.1 to 2.6.7. Current version is corresponding to ``` commit 385a0a246f2d9f7a6fd774fd8edc03d3d965f49e (HEAD) Author: Robin Stuart Date: Sun Nov 17 22:03:54 2019 +0000 typo-- in isotest ``` Change-Id: If90b5f00e9db5fcf94a895b9fef8afea0f43cfd8 Signed-off-by: Tae-Young Chung --- backend/2of5.c | 43 +- backend/CMakeLists.txt | 4 +- backend/auspost.c | 21 +- backend/aztec.c | 296 +- backend/bmp.c | 87 +- backend/channel_precalcs.h | 106 - backend/codablock.c | 402 +- backend/code.c | 520 +- backend/code1.c | 63 +- backend/code128.c | 336 +- backend/code128.h | 57 - backend/code16k.c | 354 +- backend/code49.c | 39 +- backend/common.c | 324 +- backend/common.h | 80 +- backend/composite.c | 24 +- backend/dllversion.c | 4 +- backend/dmatrix.c | 52 +- backend/dmatrix.h | 20 +- backend/dotcode.c | 490 +- backend/eci.c | 20 +- backend/emf.c | 217 +- backend/emf.h | 6 - backend/gb18030.c | 2968 ------ backend/gb18030.h | 23313 ++++++++++++++++++++++++++++++++++++++++++- backend/gb2312.c | 1624 --- backend/gb2312.h | 7468 +++++++++++++- backend/general_field.c | 2 +- backend/general_field.h | 2 +- backend/gif.c | 358 +- backend/gridmtx.c | 666 +- backend/gridmtx.h | 9 +- backend/gs1.c | 25 +- backend/hanxin.c | 672 +- backend/imail.c | 192 +- backend/large.c | 389 +- backend/large.h | 46 +- backend/library.c | 382 +- backend/libzint.rc | 10 +- backend/mailmark.c | 236 +- backend/maxicode.c | 36 +- backend/medical.c | 73 +- backend/output.c | 114 - backend/output.h | 47 - backend/pcx.c | 113 +- backend/pdf417.c | 64 +- backend/plessey.c | 44 +- backend/png.c | 45 +- backend/postal.c | 67 +- backend/ps.c | 121 +- backend/qr.c | 1955 ++-- backend/qr.h | 152 +- backend/raster.c | 429 +- backend/reedsol.c | 18 +- backend/reedsol.h | 12 +- backend/render.c | 858 ++ backend/rss.c | 344 +- backend/sjis.c | 1591 --- backend/sjis.h | 6875 ++++++++++++- backend/svg.c | 50 +- backend/telepen.c | 26 +- backend/tif.c | 140 +- backend/ultra.c | 1084 +- backend/upcean.c | 46 +- backend/vector.c | 133 +- backend/zint.h | 264 +- packaging/zint.spec | 2 +- 67 files changed, 43408 insertions(+), 13222 deletions(-) delete mode 100644 backend/channel_precalcs.h delete mode 100644 backend/code128.h delete mode 100644 backend/gb18030.c delete mode 100644 backend/gb2312.c delete mode 100644 backend/output.c delete mode 100644 backend/output.h create mode 100644 backend/render.c delete mode 100644 backend/sjis.c diff --git a/backend/2of5.c b/backend/2of5.c index c3c795d..1781821 100644 --- a/backend/2of5.c +++ b/backend/2of5.c @@ -2,7 +2,7 @@ /* libzint - the open source barcode library - Copyright (C) 2008 - 2020 Robin Stuart + Copyright (C) 2008-2017 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -29,9 +29,10 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ +#include #include +#include #include "common.h" #ifdef _MSC_VER #include @@ -58,7 +59,7 @@ static inline char check_digit(unsigned int count) { } /* Code 2 of 5 Standard (Code 2 of 5 Matrix) */ -INTERNAL int matrix_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length) { +int matrix_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length) { int i, error_number; char dest[512]; /* 6 + 80 * 6 + 6 + 1 ~ 512*/ @@ -89,7 +90,7 @@ INTERNAL int matrix_two_of_five(struct zint_symbol *symbol, unsigned char source } /* Code 2 of 5 Industrial */ -INTERNAL int industrial_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length) { +int industrial_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length) { int i, error_number; char dest[512]; /* 6 + 40 * 10 + 6 + 1 */ @@ -120,7 +121,7 @@ INTERNAL int industrial_two_of_five(struct zint_symbol *symbol, unsigned char so } /* Code 2 of 5 IATA */ -INTERNAL int iata_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length) { +int iata_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length) { int i, error_number; char dest[512]; /* 4 + 45 * 10 + 3 + 1 */ @@ -150,7 +151,7 @@ INTERNAL int iata_two_of_five(struct zint_symbol *symbol, unsigned char source[] } /* Code 2 of 5 Data Logic */ -INTERNAL int logic_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length) { +int logic_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length) { int i, error_number; char dest[512]; /* 4 + 80 * 6 + 3 + 1 */ @@ -181,7 +182,7 @@ INTERNAL int logic_two_of_five(struct zint_symbol *symbol, unsigned char source[ } /* Code 2 of 5 Interleaved */ -INTERNAL int interleaved_two_of_five(struct zint_symbol *symbol, const unsigned char source[], size_t length) { +int interleaved_two_of_five(struct zint_symbol *symbol, const unsigned char source[], size_t length) { int i, j, error_number; char bars[7], spaces[7], mixed[14], dest[1000]; @@ -201,19 +202,19 @@ INTERNAL int interleaved_two_of_five(struct zint_symbol *symbol, const unsigned return error_number; } - ustrcpy(temp, ""); + ustrcpy(temp, (unsigned char *) ""); /* Input must be an even number of characters for Interlaced 2 of 5 to work: if an odd number of characters has been entered then add a leading zero */ if (length & 1) { - ustrcpy(temp, "0"); + ustrcpy(temp, (unsigned char *) "0"); length++; } - ustrcat(temp, source); + strcat((char*) temp, (char*) source); /* start character */ strcpy(dest, "1111"); - for (i = 0; i < (int) length; i += 2) { + for (i = 0; i < length; i += 2) { int k = 0; /* look up the bars and the spaces and put them in two strings */ strcpy(bars, ""); @@ -242,7 +243,7 @@ INTERNAL int interleaved_two_of_five(struct zint_symbol *symbol, const unsigned } /* Interleaved 2-of-5 (ITF) */ -INTERNAL int itf14(struct zint_symbol *symbol, unsigned char source[], int length) { +int itf14(struct zint_symbol *symbol, unsigned char source[], int length) { int i, error_number, zeroes; unsigned int count; char localstr[16]; @@ -265,7 +266,7 @@ INTERNAL int itf14(struct zint_symbol *symbol, unsigned char source[], int lengt for (i = 0; i < zeroes; i++) { localstr[i] = '0'; } - ustrcpy(localstr + zeroes, source); + strcpy(localstr + zeroes, (char *) source); /* Calculate the check digit - the same method used for EAN-13 */ for (i = 12; i >= 0; i--) { @@ -278,12 +279,12 @@ INTERNAL int itf14(struct zint_symbol *symbol, unsigned char source[], int lengt localstr[13] = check_digit(count); localstr[14] = '\0'; error_number = interleaved_two_of_five(symbol, (unsigned char *) localstr, strlen(localstr)); - ustrcpy(symbol->text, localstr); + ustrcpy(symbol->text, (unsigned char*) localstr); return error_number; } /* Deutshe Post Leitcode */ -INTERNAL int dpleit(struct zint_symbol *symbol, unsigned char source[], int length) { +int dpleit(struct zint_symbol *symbol, unsigned char source[], int length) { int i, error_number; unsigned int count; char localstr[16]; @@ -303,7 +304,7 @@ INTERNAL int dpleit(struct zint_symbol *symbol, unsigned char source[], int leng zeroes = 13 - length; for (i = 0; i < zeroes; i++) localstr[i] = '0'; - ustrcpy(localstr + zeroes, source); + strcpy(localstr + zeroes, (char *) source); for (i = 12; i >= 0; i--) { count += 4 * ctoi(localstr[i]); @@ -315,12 +316,12 @@ INTERNAL int dpleit(struct zint_symbol *symbol, unsigned char source[], int leng localstr[13] = check_digit(count); localstr[14] = '\0'; error_number = interleaved_two_of_five(symbol, (unsigned char *) localstr, strlen(localstr)); - ustrcpy(symbol->text, localstr); + ustrcpy(symbol->text, (unsigned char*) localstr); return error_number; } /* Deutsche Post Identcode */ -INTERNAL int dpident(struct zint_symbol *symbol, unsigned char source[], int length) { +int dpident(struct zint_symbol *symbol, unsigned char source[], int length) { int i, error_number, zeroes; unsigned int count; char localstr[16]; @@ -339,7 +340,7 @@ INTERNAL int dpident(struct zint_symbol *symbol, unsigned char source[], int len zeroes = 11 - length; for (i = 0; i < zeroes; i++) localstr[i] = '0'; - ustrcpy(localstr + zeroes, source); + strcpy(localstr + zeroes, (char *) source); for (i = 10; i >= 0; i--) { count += 4 * ctoi(localstr[i]); @@ -351,6 +352,8 @@ INTERNAL int dpident(struct zint_symbol *symbol, unsigned char source[], int len localstr[11] = check_digit(count); localstr[12] = '\0'; error_number = interleaved_two_of_five(symbol, (unsigned char *) localstr, strlen(localstr)); - ustrcpy(symbol->text, localstr); + ustrcpy(symbol->text, (unsigned char*) localstr); return error_number; } + + diff --git a/backend/CMakeLists.txt b/backend/CMakeLists.txt index e7baa0b..b6ecae1 100644 --- a/backend/CMakeLists.txt +++ b/backend/CMakeLists.txt @@ -2,11 +2,11 @@ project(zint) -set(zint_COMMON_SRCS common.c library.c large.c reedsol.c gs1.c eci.c general_field.c sjis.c gb2312.c gb18030.c) +set(zint_COMMON_SRCS common.c library.c render.c large.c reedsol.c gs1.c eci.c general_field.c) set(zint_ONEDIM_SRCS code.c code128.c 2of5.c upcean.c telepen.c medical.c plessey.c rss.c) set(zint_POSTAL_SRCS postal.c auspost.c imail.c mailmark.c) set(zint_TWODIM_SRCS code16k.c codablock.c dmatrix.c pdf417.c qr.c maxicode.c composite.c aztec.c code49.c code1.c gridmtx.c hanxin.c dotcode.c ultra.c) -set(zint_OUTPUT_SRCS vector.c ps.c svg.c emf.c bmp.c pcx.c gif.c png.c tif.c raster.c output.c) +set(zint_OUTPUT_SRCS vector.c render.c ps.c svg.c emf.c bmp.c pcx.c gif.c png.c tif.c raster.c) set(zint_SRCS ${zint_OUTPUT_SRCS} ${zint_COMMON_SRCS} ${zint_ONEDIM_SRCS} ${zint_POSTAL_SRCS} ${zint_TWODIM_SRCS}) add_library(zint SHARED ${zint_SRCS}) diff --git a/backend/auspost.c b/backend/auspost.c index 39d3414..c10c325 100644 --- a/backend/auspost.c +++ b/backend/auspost.c @@ -29,7 +29,6 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ #define GDSET "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz #" @@ -69,7 +68,7 @@ static inline char convert_pattern(char data, int shift) { } /* Adds Reed-Solomon error correction to auspost */ -static void rs_error(char data_pattern[]) { +void rs_error(char data_pattern[]) { size_t reader, triple_writer = 0; char triple[31]; unsigned char result[5]; @@ -91,7 +90,7 @@ static void rs_error(char data_pattern[]) { } /* Handles Australia Posts's 4 State Codes */ -INTERNAL int australia_post(struct zint_symbol *symbol, unsigned char source[], int length) { +int australia_post(struct zint_symbol *symbol, unsigned char source[], int length) { /* Customer Standard Barcode, Barcode 2 or Barcode 3 system determined automatically (i.e. the FCC doesn't need to be specified by the user) dependent on the length of the input string */ @@ -110,12 +109,7 @@ INTERNAL int australia_post(struct zint_symbol *symbol, unsigned char source[], char fcc[3] = {0, 0, 0}, dpid[10]; char localstr[30]; - /* Check input immediately to catch nuls */ - error_number = is_sane(GDSET, source, length); - if (error_number == ZINT_ERROR_INVALID_DATA) { - strcpy(symbol->errtxt, "404: Invalid characters in data"); - return error_number; - } + error_number = 0; strcpy(localstr, ""); /* Do all of the length checking first to avoid stack smashing */ @@ -170,6 +164,12 @@ INTERNAL int australia_post(struct zint_symbol *symbol, unsigned char source[], strcat(localstr, (char*) source); h = strlen(localstr); + error_number = is_sane(GDSET, (unsigned char *) localstr, h); + if (error_number == ZINT_ERROR_INVALID_DATA) { + strcpy(symbol->errtxt, "404: Invalid characters in data"); + return error_number; + } + /* Verifiy that the first 8 characters are numbers */ memcpy(dpid, localstr, 8); dpid[8] = '\0'; @@ -248,3 +248,6 @@ INTERNAL int australia_post(struct zint_symbol *symbol, unsigned char source[], return error_number; } + + + diff --git a/backend/aztec.c b/backend/aztec.c index f5e88bd..9ed059c 100644 --- a/backend/aztec.c +++ b/backend/aztec.c @@ -2,7 +2,7 @@ /* libzint - the open source barcode library - Copyright (C) 2009-2020 Robin Stuart + Copyright (C) 2009-2017 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -29,10 +29,10 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ #include #include +#include #ifdef _MSC_VER #include #endif @@ -40,9 +40,6 @@ #include "aztec.h" #include "reedsol.h" -#define AZTEC_MAX_CAPACITY 19968 /* ISO/IEC 24778:2008 5.3 Table 1 Maximum Symbol Bit Capacity */ -#define AZTEC_BIN_CAPACITY 17940 /* Above less 169 * 12 = 2028 bits (169 = 10% of 1664 + 3) */ - static int AztecMap[22801]; static int count_doubles(const unsigned char source[], const int posn, const size_t src_len) { @@ -57,7 +54,7 @@ static int count_doubles(const unsigned char source[], const int posn, const siz cond = 0; } i += 2; - } while ((i < (int) src_len) && cond); + } while ((i < src_len) && cond); return c; } @@ -118,47 +115,40 @@ static char get_next_mode(char encode_mode[], const size_t src_len, const int po do { i++; - } while ((i < (int) src_len) && (encode_mode[i] == encode_mode[posn])); - if (i >= (int) src_len) { + } while ((i < src_len) && (encode_mode[i] == encode_mode[posn])); + if (i >= src_len) { return 'E'; } else { return encode_mode[i]; } } -static int az_bin_append(const int arg, const int length, char *binary) { - size_t posn = strlen(binary); - - if (posn + length > AZTEC_BIN_CAPACITY) { - return 0; /* Fail */ - } - bin_append_posn(arg, length, binary, posn); - - binary[posn + length] = '\0'; - - return 1; /* Success */ -} - static int aztec_text_process(const unsigned char source[], const size_t src_len, char binary_string[], const int gs1, const int eci, const int debug) { + char *encode_mode; int i, j; char current_mode; int count; char next_mode; + unsigned char *reduced_source; + char *reduced_encode_mode; int reduced_length; int byte_mode = 0; -#ifndef _MSC_VER - char encode_mode[src_len + 1]; - unsigned char reduced_source[src_len + 1]; - char reduced_encode_mode[src_len + 1]; -#else - char *encode_mode = (char *) _alloca(src_len + 1); - unsigned char *reduced_source = (unsigned char *) _alloca(src_len + 1); - char *reduced_encode_mode = (char *) _alloca(src_len + 1); -#endif + encode_mode=(char*)malloc(src_len + 1); + reduced_source=(unsigned char*)malloc(src_len + 1); + reduced_encode_mode=(char*)malloc(src_len + 1); + + if ((!encode_mode) || + (!reduced_source) || + (!reduced_encode_mode)) { + free(encode_mode); + free(reduced_source); + free(reduced_encode_mode); + return -1; + } - for (i = 0; i < (int) src_len; i++) { + for (i = 0; i < src_len; i++) { if (source[i] >= 128) { encode_mode[i] = 'B'; } else { @@ -169,7 +159,7 @@ static int aztec_text_process(const unsigned char source[], const size_t src_len // Deal first with letter combinations which can be combined to one codeword // Combinations are (CR LF) (. SP) (, SP) (: SP) in Punct mode current_mode = 'U'; - for (i = 0; i < (int) src_len - 1; i++) { + for (i = 0; i < src_len - 1; i++) { // Combination (CR LF) should always be in Punct mode if ((source[i] == 13) && (source[i + 1] == 10)) { encode_mode[i] = 'P'; @@ -240,7 +230,7 @@ static int aztec_text_process(const unsigned char source[], const size_t src_len if (debug) { printf("First Pass:\n"); - for (i = 0; i < (int) src_len; i++) { + for (i = 0; i < src_len; i++) { printf("%c", encode_mode[i]); } printf("\n"); @@ -249,7 +239,7 @@ static int aztec_text_process(const unsigned char source[], const size_t src_len // Reduce two letter combinations to one codeword marked as [abcd] in Punct mode i = 0; j = 0; - while (i < (int) src_len) { + do { if ((source[i] == 13) && (source[i + 1] == 10)) { // CR LF reduced_source[j] = 'a'; reduced_encode_mode[j] = encode_mode[i]; @@ -272,7 +262,7 @@ static int aztec_text_process(const unsigned char source[], const size_t src_len i++; } j++; - } + } while (i < src_len); reduced_length = j; @@ -449,7 +439,7 @@ static int aztec_text_process(const unsigned char source[], const size_t src_len if (reduced_encode_mode[i] != current_mode) { - for (count = 0; ((i + count) < reduced_length) && (reduced_encode_mode[i + count] == reduced_encode_mode[i]); count++); + for (count = 0; ((i + count) <= reduced_length) && (reduced_encode_mode[i + count] == reduced_encode_mode[i]); count++); next_mode = get_next_mode(reduced_encode_mode, reduced_length, i); if (reduced_encode_mode[i] == 'P') { @@ -584,7 +574,7 @@ static int aztec_text_process(const unsigned char source[], const size_t src_len } current_mode = 'U'; - for (i = 0; i < reduced_length; i++) { + for(i = 0; i < reduced_length; i++) { if (reduced_encode_mode[i] != 'B') { byte_mode = 0; @@ -595,23 +585,23 @@ static int aztec_text_process(const unsigned char source[], const size_t src_len if (current_mode == 'U') { switch (reduced_encode_mode[i]) { case 'L': - if (!az_bin_append(28, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // L/L + bin_append(28, 5, binary_string); // L/L break; case 'M': - if (!az_bin_append(29, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // M/L + bin_append(29, 5, binary_string); // M/L break; case 'P': - if (!az_bin_append(29, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // M/L - if (!az_bin_append(30, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // P/L + bin_append(29, 5, binary_string); // M/L + bin_append(30, 5, binary_string); // P/L break; case 'p': - if (!az_bin_append(0, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // P/S + bin_append(0, 5, binary_string); // P/S break; case 'D': - if (!az_bin_append(30, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // D/L + bin_append(30, 5, binary_string); // D/L break; case 'B': - if (!az_bin_append(31, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // B/S + bin_append(31, 5, binary_string); // B/S break; } } @@ -619,27 +609,27 @@ static int aztec_text_process(const unsigned char source[], const size_t src_len if (current_mode == 'L') { switch (reduced_encode_mode[i]) { case 'U': - if (!az_bin_append(30, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // D/L - if (!az_bin_append(14, 4, binary_string)) return ZINT_ERROR_TOO_LONG; // U/L + bin_append(30, 5, binary_string); // D/L + bin_append(14, 4, binary_string); // U/L break; case 'u': - if (!az_bin_append(28, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // U/S + bin_append(28, 5, binary_string); // U/S break; case 'M': - if (!az_bin_append(29, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // M/L + bin_append(29, 5, binary_string); // M/L break; case 'P': - if (!az_bin_append(29, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // M/L - if (!az_bin_append(30, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // P/L + bin_append(29, 5, binary_string); // M/L + bin_append(30, 5, binary_string); // P/L break; case 'p': - if (!az_bin_append(0, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // P/S + bin_append(0, 5, binary_string); // P/S break; case 'D': - if (!az_bin_append(30, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // D/L + bin_append(30, 5, binary_string); // D/L break; case 'B': - if (!az_bin_append(31, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // B/S + bin_append(31, 5, binary_string); // B/S break; } } @@ -647,23 +637,23 @@ static int aztec_text_process(const unsigned char source[], const size_t src_len if (current_mode == 'M') { switch (reduced_encode_mode[i]) { case 'U': - if (!az_bin_append(29, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // U/L + bin_append(29, 5, binary_string); // U/L break; case 'L': - if (!az_bin_append(28, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // L/L + bin_append(28, 5, binary_string); // L/L break; case 'P': - if (!az_bin_append(30, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // P/L + bin_append(30, 5, binary_string); // P/L break; case 'p': - if (!az_bin_append(0, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // P/S + bin_append(0, 5, binary_string); // P/S break; case 'D': - if (!az_bin_append(29, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // U/L - if (!az_bin_append(30, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // D/L + bin_append(29, 5, binary_string); // U/L + bin_append(30, 5, binary_string); // D/L break; case 'B': - if (!az_bin_append(31, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // B/S + bin_append(31, 5, binary_string); // B/S break; } } @@ -671,24 +661,24 @@ static int aztec_text_process(const unsigned char source[], const size_t src_len if (current_mode == 'P') { switch (reduced_encode_mode[i]) { case 'U': - if (!az_bin_append(31, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // U/L + bin_append(31, 5, binary_string); // U/L break; case 'L': - if (!az_bin_append(31, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // U/L - if (!az_bin_append(28, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // L/L + bin_append(31, 5, binary_string); // U/L + bin_append(28, 5, binary_string); // L/L break; case 'M': - if (!az_bin_append(31, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // U/L - if (!az_bin_append(29, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // M/L + bin_append(31, 5, binary_string); // U/L + bin_append(29, 5, binary_string); // M/L break; case 'D': - if (!az_bin_append(31, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // U/L - if (!az_bin_append(30, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // D/L + bin_append(31, 5, binary_string); // U/L + bin_append(30, 5, binary_string); // D/L break; case 'B': - if (!az_bin_append(31, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // U/L + bin_append(31, 5, binary_string); // U/L current_mode = 'U'; - if (!az_bin_append(31, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // B/S + bin_append(31, 5, binary_string); // B/S break; } } @@ -696,31 +686,31 @@ static int aztec_text_process(const unsigned char source[], const size_t src_len if (current_mode == 'D') { switch (reduced_encode_mode[i]) { case 'U': - if (!az_bin_append(14, 4, binary_string)) return ZINT_ERROR_TOO_LONG; // U/L + bin_append(14, 4, binary_string); // U/L break; case 'u': - if (!az_bin_append(15, 4, binary_string)) return ZINT_ERROR_TOO_LONG; // U/S + bin_append(15, 4, binary_string); // U/S break; case 'L': - if (!az_bin_append(14, 4, binary_string)) return ZINT_ERROR_TOO_LONG; // U/L - if (!az_bin_append(28, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // L/L + bin_append(14, 4, binary_string); // U/L + bin_append(28, 5, binary_string); // L/L break; case 'M': - if (!az_bin_append(14, 4, binary_string)) return ZINT_ERROR_TOO_LONG; // U/L - if (!az_bin_append(29, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // M/L + bin_append(14, 4, binary_string); // U/L + bin_append(29, 5, binary_string); // M/L break; case 'P': - if (!az_bin_append(14, 4, binary_string)) return ZINT_ERROR_TOO_LONG; // U/L - if (!az_bin_append(29, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // M/L - if (!az_bin_append(30, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // P/L + bin_append(14, 4, binary_string); // U/L + bin_append(29, 5, binary_string); // M/L + bin_append(30, 5, binary_string); // P/L break; case 'p': - if (!az_bin_append(0, 4, binary_string)) return ZINT_ERROR_TOO_LONG; // P/S + bin_append(0, 4, binary_string); // P/S break; case 'B': - if (!az_bin_append(14, 4, binary_string)) return ZINT_ERROR_TOO_LONG; // U/L + bin_append(14, 4, binary_string); // U/L current_mode = 'U'; - if (!az_bin_append(31, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // B/S + bin_append(31, 5, binary_string); // B/S break; } } @@ -735,11 +725,11 @@ static int aztec_text_process(const unsigned char source[], const size_t src_len if (count > 31) { /* Put 00000 followed by 11-bit number of bytes less 31 */ - if (!az_bin_append(0, 5, binary_string)) return ZINT_ERROR_TOO_LONG; - if (!az_bin_append(count - 31, 11, binary_string)) return ZINT_ERROR_TOO_LONG; + bin_append(0, 5, binary_string); + bin_append(count - 31, 11, binary_string); } else { /* Put 5-bit number of bytes */ - if (!az_bin_append(count, 5, binary_string)) return ZINT_ERROR_TOO_LONG; + bin_append(count, 5, binary_string); } byte_mode = 1; } @@ -751,67 +741,66 @@ static int aztec_text_process(const unsigned char source[], const size_t src_len if ((reduced_encode_mode[i] == 'U') || (reduced_encode_mode[i] == 'u')) { if (reduced_source[i] == ' ') { - if (!az_bin_append(1, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // SP + bin_append(1, 5, binary_string); // SP } else { - if (!az_bin_append(AztecSymbolChar[(int) reduced_source[i]], 5, binary_string)) return ZINT_ERROR_TOO_LONG; + bin_append(AztecSymbolChar[(int) reduced_source[i]], 5, binary_string); } } if (reduced_encode_mode[i] == 'L') { if (reduced_source[i] == ' ') { - if (!az_bin_append(1, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // SP + bin_append(1, 5, binary_string); // SP } else { - if (!az_bin_append(AztecSymbolChar[(int) reduced_source[i]], 5, binary_string)) return ZINT_ERROR_TOO_LONG; + bin_append(AztecSymbolChar[(int) reduced_source[i]], 5, binary_string); } } if (reduced_encode_mode[i] == 'M') { if (reduced_source[i] == ' ') { - if (!az_bin_append(1, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // SP + bin_append(1, 5, binary_string); // SP } else if (reduced_source[i] == 13) { - if (!az_bin_append(14, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // CR + bin_append(14, 5, binary_string); // CR } else { - if (!az_bin_append(AztecSymbolChar[(int) reduced_source[i]], 5, binary_string)) return ZINT_ERROR_TOO_LONG; + bin_append(AztecSymbolChar[(int) reduced_source[i]], 5, binary_string); } } if ((reduced_encode_mode[i] == 'P') || (reduced_encode_mode[i] == 'p')) { if (gs1 && (reduced_source[i] == '[')) { - if (!az_bin_append(0, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // FLG(n) - if (!az_bin_append(0, 3, binary_string)) return ZINT_ERROR_TOO_LONG; // FLG(0) = FNC1 + bin_append(0, 5, binary_string); // FLG(0) = FNC1 } else if (reduced_source[i] == 13) { - if (!az_bin_append(1, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // CR + bin_append(1, 5, binary_string); // CR } else if (reduced_source[i] == 'a') { - if (!az_bin_append(2, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // CR LF + bin_append(2, 5, binary_string); // CR LF } else if (reduced_source[i] == 'b') { - if (!az_bin_append(3, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // . SP + bin_append(3, 5, binary_string); // . SP } else if (reduced_source[i] == 'c') { - if (!az_bin_append(4, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // , SP + bin_append(4, 5, binary_string); // , SP } else if (reduced_source[i] == 'd') { - if (!az_bin_append(5, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // : SP + bin_append(5, 5, binary_string); // : SP } else if (reduced_source[i] == ',') { - if (!az_bin_append(17, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // Comma + bin_append(17, 5, binary_string); // Comma } else if (reduced_source[i] == '.') { - if (!az_bin_append(19, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // Full stop + bin_append(19, 5, binary_string); // Full stop } else { - if (!az_bin_append(AztecSymbolChar[(int) reduced_source[i]], 5, binary_string)) return ZINT_ERROR_TOO_LONG; + bin_append(AztecSymbolChar[(int) reduced_source[i]], 5, binary_string); } } if (reduced_encode_mode[i] == 'D') { if (reduced_source[i] == ' ') { - if (!az_bin_append(1, 4, binary_string)) return ZINT_ERROR_TOO_LONG; // SP + bin_append(1, 4, binary_string); // SP } else if (reduced_source[i] == ',') { - if (!az_bin_append(12, 4, binary_string)) return ZINT_ERROR_TOO_LONG; // Comma + bin_append(12, 4, binary_string); // Comma } else if (reduced_source[i] == '.') { - if (!az_bin_append(13, 4, binary_string)) return ZINT_ERROR_TOO_LONG; // Full stop + bin_append(13, 4, binary_string); // Full stop } else { - if (!az_bin_append(AztecSymbolChar[(int) reduced_source[i]], 4, binary_string)) return ZINT_ERROR_TOO_LONG; + bin_append(AztecSymbolChar[(int) reduced_source[i]], 4, binary_string); } } if (reduced_encode_mode[i] == 'B') { - if (!az_bin_append(reduced_source[i], 8, binary_string)) return ZINT_ERROR_TOO_LONG; + bin_append(reduced_source[i], 8, binary_string); } } @@ -820,6 +809,10 @@ static int aztec_text_process(const unsigned char source[], const size_t src_len printf("%s\n", binary_string); } + free(encode_mode); + free(reduced_source); + free(reduced_encode_mode); + return 0; } @@ -976,14 +969,14 @@ static void populate_map() { AztecMap[(avoidReferenceGrid(76) * 151) + avoidReferenceGrid(77)] = 1; } -INTERNAL int aztec(struct zint_symbol *symbol, unsigned char source[], const size_t length) { +int aztec(struct zint_symbol *symbol, unsigned char source[], const size_t length) { int x, y, i, j, p, data_blocks, ecc_blocks, layers, total_bits; - char binary_string[AZTEC_BIN_CAPACITY + 1], bit_pattern[20045], descriptor[42]; - char adjusted_string[AZTEC_MAX_CAPACITY + 1]; + char binary_string[20000], bit_pattern[20045], descriptor[42]; + char adjusted_string[20000]; unsigned char desc_data[4], desc_ecc[6]; int err_code, ecc_level, compact, data_length, data_maxsize, codeword_size, adjusted_length; int remainder, padbits, count, gs1, adjustment_size; - int debug = (symbol->debug & ZINT_DEBUG_PRINT), reader = 0; + int debug = symbol->debug, reader = 0; int comp_loop = 4; #ifdef _MSC_VER @@ -991,10 +984,10 @@ INTERNAL int aztec(struct zint_symbol *symbol, unsigned char source[], const siz unsigned int* ecc_part; #endif - memset(binary_string, 0, AZTEC_BIN_CAPACITY + 1); - memset(adjusted_string, 0, AZTEC_MAX_CAPACITY + 1); + memset(binary_string, 0, 20000); + memset(adjusted_string, 0, 20000); - if ((symbol->input_mode & 0x07) == GS1_MODE) { + if (symbol->input_mode == GS1_MODE) { gs1 = 1; } else { gs1 = 0; @@ -1123,36 +1116,42 @@ INTERNAL int aztec(struct zint_symbol *symbol, unsigned char source[], const siz } j = 0; - count = 0; - for (i = 0; i < data_length; i++) { - + i = 0; + do { if ((j + 1) % codeword_size == 0) { - // Last bit of codeword - /* 7.3.1.2 "whenever the first B-1 bits ... are all “0”s, then a dummy “1” is inserted..." - * "Similarly a message codeword that starts with B-1 “1”s has a dummy “0” inserted..." */ + /* Last bit of codeword */ + int t, done = 0; + count = 0; + + /* Discover how many '1's in current codeword */ + for (t = 0; t < (codeword_size - 1); t++) { + if (binary_string[(i - (codeword_size - 1)) + t] == '1') count++; + } if (count == (codeword_size - 1)) { - // Codeword of B-1 '1's adjusted_string[j] = '0'; j++; + done = 1; } if (count == 0) { - // Codeword of B-1 '0's adjusted_string[j] = '1'; j++; + done = 1; } - count = 0; - } else if (binary_string[i] == '1') { /* Skip B so only counting B-1 */ - count++; + if (done == 0) { + adjusted_string[j] = binary_string[i]; + j++; + i++; + } } - adjusted_string[j] = binary_string[i]; j++; - } + i++; + } while (i <= (data_length + 1)); adjusted_string[j] = '\0'; - adjusted_length = j; + adjusted_length = (int) strlen(adjusted_string); adjustment_size = adjusted_length - data_length; /* Add padding */ @@ -1178,16 +1177,17 @@ INTERNAL int aztec(struct zint_symbol *symbol, unsigned char source[], const siz adjusted_string[adjusted_length - 1] = '0'; } +/* if (debug) { printf("Codewords:\n"); for (i = 0; i < (adjusted_length / codeword_size); i++) { for (j = 0; j < codeword_size; j++) { printf("%c", adjusted_string[(i * codeword_size) + j]); } - printf(" "); + printf("\n"); } - printf("\n"); } +*/ } while (adjusted_length > data_maxsize); /* This loop will only repeat on the rare occasions when the rule about not having all 1s or all 0s @@ -1226,34 +1226,42 @@ INTERNAL int aztec(struct zint_symbol *symbol, unsigned char source[], const siz } j = 0; - count = 0; - for (i = 0; i < data_length; i++) { - + i = 0; + do { if ((j + 1) % codeword_size == 0) { - // Last bit of codeword + /* Last bit of codeword */ + int t, done = 0; + count = 0; + + /* Discover how many '1's in current codeword */ + for (t = 0; t < (codeword_size - 1); t++) { + if (binary_string[(i - (codeword_size - 1)) + t] == '1') count++; + } if (count == (codeword_size - 1)) { - // Codeword of B-1 '1's adjusted_string[j] = '0'; j++; + done = 1; } if (count == 0) { - // Codeword of B-1 '0's adjusted_string[j] = '1'; j++; + done = 1; } - count = 0; - } else if (binary_string[i] == '1') { /* Skip B so only counting B-1 */ - count++; + if (done == 0) { + adjusted_string[j] = binary_string[i]; + j++; + i++; + } } - adjusted_string[j] = binary_string[i]; j++; - } + i++; + } while (i <= (data_length + 1)); adjusted_string[j] = '\0'; - adjusted_length = j; + adjusted_length = (int) strlen(adjusted_string); remainder = adjusted_length % codeword_size; @@ -1295,9 +1303,8 @@ INTERNAL int aztec(struct zint_symbol *symbol, unsigned char source[], const siz for (j = 0; j < codeword_size; j++) { printf("%c", adjusted_string[(i * codeword_size) + j]); } - printf(" "); + printf("\n"); } - printf("\n"); } } @@ -1574,7 +1581,7 @@ INTERNAL int aztec(struct zint_symbol *symbol, unsigned char source[], const siz } /* Encodes Aztec runes as specified in ISO/IEC 24778:2008 Annex A */ -INTERNAL int aztec_runes(struct zint_symbol *symbol, unsigned char source[], int length) { +int aztec_runes(struct zint_symbol *symbol, unsigned char source[], int length) { int input_value, error_number, i, y, x; char binary_string[28]; unsigned char data_codewords[3], ecc_codewords[6]; @@ -1684,3 +1691,4 @@ INTERNAL int aztec_runes(struct zint_symbol *symbol, unsigned char source[], int return 0; } + diff --git a/backend/bmp.c b/backend/bmp.c index 240c697..69dd955 100644 --- a/backend/bmp.c +++ b/backend/bmp.c @@ -2,7 +2,7 @@ /* libzint - the open source barcode library - Copyright (C) 2009 - 2020 Robin Stuart + Copyright (C) 2009-2017 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -29,40 +29,36 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ #include +#include +#include #include "common.h" #include "bmp.h" /* Bitmap header structure */ +#include #ifdef _MSC_VER #include #include #endif -INTERNAL int bmp_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) { +#define SSET "0123456789ABCDEF" + +int bmp_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) { int i, row, column; - unsigned int fgred, fggrn, fgblu, bgred, bggrn, bgblu; + int fgred, fggrn, fgblu, bgred, bggrn, bgblu; int row_size; - unsigned int data_offset, data_size, file_size; + unsigned int data_size; unsigned char *bitmap_file_start, *bmp_posn; - unsigned char *bitmap; + char *bitmap; FILE *bmp_file; bitmap_file_header_t file_header; bitmap_info_header_t info_header; - row_size = 4 * ((24 * symbol->bitmap_width + 31) / 32); - data_size = symbol->bitmap_height * row_size; - data_offset = sizeof (bitmap_file_header_t) + sizeof (bitmap_info_header_t); - file_size = data_offset + data_size; - - bitmap_file_start = (unsigned char *) malloc(file_size); - if (bitmap_file_start == NULL) { - strcpy(symbol->errtxt, "602: Out of memory"); - return ZINT_ERROR_MEMORY; - } - memset(bitmap_file_start, 0, file_size); /* Not required but keeps padding bytes consistent */ + if (symbol->bitmap != NULL) + free(symbol->bitmap); - bitmap = bitmap_file_start + data_offset; + row_size = 4 * floor((24.0 * symbol->bitmap_width + 31) / 32); + bitmap = (char *) malloc(row_size * symbol->bitmap_height); fgred = (16 * ctoi(symbol->fgcolour[0])) + ctoi(symbol->fgcolour[1]); fggrn = (16 * ctoi(symbol->fgcolour[2])) + ctoi(symbol->fgcolour[3]); @@ -72,50 +68,11 @@ INTERNAL int bmp_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) { bgblu = (16 * ctoi(symbol->bgcolour[4])) + ctoi(symbol->bgcolour[5]); /* Pixel Plotting */ + i = 0; for (row = 0; row < symbol->bitmap_height; row++) { for (column = 0; column < symbol->bitmap_width; column++) { i = (3 * column) + (row * row_size); switch (*(pixelbuf + (symbol->bitmap_width * (symbol->bitmap_height - row - 1)) + column)) { - case 'W': // White - bitmap[i] = 255; - bitmap[i + 1] = 255; - bitmap[i + 2] = 255; - break; - case 'C': // Cyan - bitmap[i] = 255; - bitmap[i + 1] = 255; - bitmap[i + 2] = 0; - break; - case 'B': // Blue - bitmap[i] = 255; - bitmap[i + 1] = 0; - bitmap[i + 2] = 0; - break; - case 'M': // Magenta - bitmap[i] = 255; - bitmap[i + 1] = 0; - bitmap[i + 2] = 255; - break; - case 'R': // Red - bitmap[i] = 0; - bitmap[i + 1] = 0; - bitmap[i + 2] = 255; - break; - case 'Y': // Yellow - bitmap[i] = 0; - bitmap[i + 1] = 255; - bitmap[i + 2] = 255; - break; - case 'G': // Green - bitmap[i] = 0; - bitmap[i + 1] = 255; - bitmap[i + 2] = 0; - break; - case 'K': // Black - bitmap[i] = 0; - bitmap[i + 1] = 0; - bitmap[i + 2] = 0; - break; case '1': bitmap[i] = fgblu; bitmap[i + 1] = fggrn; @@ -131,12 +88,13 @@ INTERNAL int bmp_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) { } } + data_size = symbol->bitmap_height * row_size; symbol->bitmap_byte_length = data_size; file_header.header_field = 0x4d42; // "BM" - file_header.file_size = file_size; + file_header.file_size = sizeof (bitmap_file_header_t) + sizeof (bitmap_info_header_t) + data_size; file_header.reserved = 0; - file_header.data_offset = data_offset; + file_header.data_offset = sizeof (bitmap_file_header_t) + sizeof (bitmap_info_header_t); info_header.header_size = sizeof (bitmap_info_header_t); info_header.width = symbol->bitmap_width; @@ -150,10 +108,15 @@ INTERNAL int bmp_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) { info_header.colours = 0; info_header.important_colours = 0; + bitmap_file_start = (unsigned char*) malloc(file_header.file_size); + memset(bitmap_file_start, 0xff, file_header.file_size); + bmp_posn = bitmap_file_start; memcpy(bitmap_file_start, &file_header, sizeof (bitmap_file_header_t)); bmp_posn += sizeof (bitmap_file_header_t); memcpy(bmp_posn, &info_header, sizeof (bitmap_info_header_t)); + bmp_posn += sizeof (bitmap_info_header_t); + memcpy(bmp_posn, bitmap, data_size); /* Open output file in binary mode */ if ((symbol->output_options & BARCODE_STDOUT) != 0) { @@ -161,6 +124,7 @@ INTERNAL int bmp_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) { if (-1 == _setmode(_fileno(stdout), _O_BINARY)) { strcpy(symbol->errtxt, "600: Can't open output file"); free(bitmap_file_start); + free(bitmap); return ZINT_ERROR_FILE_ACCESS; } #endif @@ -168,6 +132,7 @@ INTERNAL int bmp_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) { } else { if (!(bmp_file = fopen(symbol->outfile, "wb"))) { free(bitmap_file_start); + free(bitmap); strcpy(symbol->errtxt, "601: Can't open output file"); return ZINT_ERROR_FILE_ACCESS; } @@ -177,5 +142,7 @@ INTERNAL int bmp_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) { fclose(bmp_file); free(bitmap_file_start); + free(bitmap); return 0; } + diff --git a/backend/channel_precalcs.h b/backend/channel_precalcs.h deleted file mode 100644 index f979e1a..0000000 --- a/backend/channel_precalcs.h +++ /dev/null @@ -1,106 +0,0 @@ -/* - libzint - the open source barcode library - Copyright (C) 2020 Robin Stuart - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - 3. Neither the name of the project nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - SUCH DAMAGE. - */ -/* vim: set ts=4 sw=4 et : */ - -/* Channel code precalculated values to avoid excessive looping */ -/* To generate uncomment CHANNEL_GENERATE_PRECALCS define and run "./test_channel -f generate -g" */ -/* Paste result below here */ -static channel_precalc channel_precalcs7[] = { - { 115338, { 1, 3, 1, 1, 1, 1, 5, 1, }, { 1, 1, 1, 2, 1, 2, 3, 3, }, { 1, 7, 5, 5, 5, 5, 5, }, { 1, 7, 7, 7, 6, 6, 5, }, }, - { 230676, { 1, 1, 2, 2, 4, 1, 1, 2, }, { 1, 2, 1, 3, 2, 1, 3, 1, }, { 1, 7, 7, 6, 5, 2, 2, }, { 1, 7, 6, 6, 4, 3, 3, }, }, - { 346014, { 1, 2, 3, 1, 1, 1, 3, 2, }, { 1, 2, 2, 1, 1, 3, 1, 3, }, { 1, 7, 6, 4, 4, 4, 4, }, { 1, 7, 6, 5, 5, 5, 3, }, }, - { 461352, { 1, 2, 1, 1, 1, 2, 2, 4, }, { 1, 3, 1, 1, 3, 2, 2, 1, }, { 1, 7, 6, 6, 6, 6, 5, }, { 1, 7, 5, 5, 5, 3, 2, }, }, -}; -static channel_precalc channel_precalcs8[] = { - { 119121, { 2, 1, 3, 2, 1, 3, 2, 1, }, { 1, 1, 1, 4, 3, 2, 1, 2, }, { 8, 7, 7, 5, 4, 4, 2, }, { 8, 8, 8, 8, 5, 3, 2, }, }, - { 238242, { 2, 1, 1, 2, 2, 2, 1, 4, }, { 1, 1, 3, 1, 1, 2, 4, 2, }, { 8, 7, 7, 7, 6, 5, 4, }, { 8, 8, 8, 6, 6, 6, 5, }, }, - { 357363, { 2, 2, 1, 4, 1, 1, 1, 3, }, { 1, 1, 1, 1, 3, 2, 5, 1, }, { 8, 7, 6, 6, 3, 3, 3, }, { 8, 8, 8, 8, 8, 6, 5, }, }, - { 476484, { 2, 2, 1, 1, 3, 2, 3, 1, }, { 1, 1, 3, 1, 2, 2, 3, 2, }, { 8, 7, 6, 6, 6, 4, 3, }, { 8, 8, 8, 6, 6, 5, 4, }, }, - { 595605, { 2, 3, 3, 2, 1, 1, 1, 2, }, { 1, 1, 2, 1, 1, 1, 5, 3, }, { 8, 7, 5, 3, 2, 2, 2, }, { 8, 8, 8, 7, 7, 7, 7, }, }, - { 714726, { 2, 1, 1, 6, 1, 1, 2, 1, }, { 1, 2, 1, 3, 1, 4, 1, 2, }, { 8, 7, 7, 7, 2, 2, 2, }, { 8, 8, 7, 7, 5, 5, 2, }, }, - { 833847, { 2, 1, 1, 3, 1, 3, 3, 1, }, { 1, 2, 3, 1, 1, 3, 2, 2, }, { 8, 7, 7, 7, 5, 5, 3, }, { 8, 8, 7, 5, 5, 5, 3, }, }, - { 952968, { 2, 2, 2, 3, 2, 1, 2, 1, }, { 1, 2, 2, 1, 2, 2, 2, 3, }, { 8, 7, 6, 5, 3, 2, 2, }, { 8, 8, 7, 6, 6, 5, 4, }, }, - { 1072089, { 2, 5, 1, 1, 2, 2, 1, 1, }, { 1, 2, 1, 3, 1, 3, 3, 1, }, { 8, 7, 3, 3, 3, 2, 1, }, { 8, 8, 7, 7, 5, 5, 3, }, }, - { 1191210, { 2, 2, 1, 2, 1, 1, 3, 3, }, { 1, 3, 1, 1, 5, 1, 1, 2, }, { 8, 7, 6, 6, 5, 5, 5, }, { 8, 8, 6, 6, 6, 2, 2, }, }, - { 1310331, { 2, 1, 2, 1, 2, 3, 2, 2, }, { 1, 4, 1, 3, 1, 1, 2, 2, }, { 8, 7, 7, 6, 6, 5, 3, }, { 8, 8, 5, 5, 3, 3, 3, }, }, - { 1429452, { 2, 2, 1, 2, 2, 3, 2, 1, }, { 1, 5, 3, 1, 2, 1, 1, 1, }, { 8, 7, 6, 6, 5, 4, 2, }, { 8, 8, 4, 2, 2, 1, 1, }, }, - { 1548573, { 3, 1, 1, 2, 5, 1, 1, 1, }, { 1, 1, 2, 2, 1, 2, 5, 1, }, { 8, 6, 6, 6, 5, 1, 1, }, { 8, 8, 8, 7, 6, 6, 5, }, }, - { 1667694, { 3, 2, 2, 1, 1, 3, 2, 1, }, { 1, 1, 1, 1, 2, 4, 3, 2, }, { 8, 6, 5, 4, 4, 4, 2, }, { 8, 8, 8, 8, 8, 7, 4, }, }, - { 1786815, { 3, 4, 2, 1, 2, 1, 1, 1, }, { 1, 1, 2, 1, 1, 2, 1, 6, }, { 8, 6, 3, 2, 2, 1, 1, }, { 8, 8, 8, 7, 7, 7, 6, }, }, - { 1905936, { 3, 2, 1, 3, 1, 3, 1, 1, }, { 1, 2, 1, 1, 1, 4, 2, 3, }, { 8, 6, 5, 5, 3, 3, 1, }, { 8, 8, 7, 7, 7, 7, 4, }, }, - { 2025057, { 3, 1, 2, 2, 1, 1, 4, 1, }, { 1, 3, 2, 1, 1, 1, 5, 1, }, { 8, 6, 6, 5, 4, 4, 4, }, { 8, 8, 6, 5, 5, 5, 5, }, }, - { 2144178, { 3, 1, 2, 1, 2, 2, 2, 2, }, { 1, 5, 1, 1, 4, 1, 1, 1, }, { 8, 6, 6, 5, 5, 4, 3, }, { 8, 8, 4, 4, 4, 1, 1, }, }, - { 2263299, { 4, 2, 1, 2, 1, 1, 1, 3, }, { 1, 1, 1, 1, 3, 3, 3, 2, }, { 8, 5, 4, 4, 3, 3, 3, }, { 8, 8, 8, 8, 8, 6, 4, }, }, - { 2382420, { 4, 2, 1, 1, 1, 1, 4, 1, }, { 1, 2, 2, 2, 2, 2, 2, 2, }, { 8, 5, 4, 4, 4, 4, 4, }, { 8, 8, 7, 6, 5, 4, 3, }, }, - { 2501541, { 5, 1, 1, 2, 2, 1, 1, 2, }, { 1, 1, 2, 3, 3, 1, 1, 3, }, { 8, 4, 4, 4, 3, 2, 2, }, { 8, 8, 8, 7, 5, 3, 3, }, }, - { 2620662, { 6, 1, 1, 1, 2, 1, 1, 2, }, { 1, 2, 4, 1, 2, 3, 1, 1, }, { 8, 3, 3, 3, 3, 2, 2, }, { 8, 8, 7, 4, 4, 3, 1, }, }, - { 2739783, { 1, 1, 1, 1, 3, 3, 4, 1, }, { 2, 1, 2, 1, 6, 1, 1, 1, }, { 8, 8, 8, 8, 8, 6, 4, }, { 8, 7, 7, 6, 6, 1, 1, }, }, - { 2858904, { 1, 1, 2, 3, 3, 1, 3, 1, }, { 2, 1, 3, 1, 3, 1, 2, 2, }, { 8, 8, 8, 7, 5, 3, 3, }, { 8, 7, 7, 5, 5, 3, 3, }, }, - { 2978025, { 1, 2, 2, 4, 1, 2, 1, 2, }, { 2, 1, 1, 1, 1, 3, 4, 2, }, { 8, 8, 7, 6, 3, 3, 2, }, { 8, 7, 7, 7, 7, 7, 5, }, }, - { 3097146, { 1, 2, 2, 1, 3, 3, 2, 1, }, { 2, 1, 3, 3, 2, 2, 1, 1, }, { 8, 8, 7, 6, 6, 4, 2, }, { 8, 7, 7, 5, 3, 2, 1, }, }, - { 3216267, { 1, 3, 1, 1, 1, 3, 1, 4, }, { 2, 1, 3, 2, 3, 2, 1, 1, }, { 8, 8, 6, 6, 6, 6, 4, }, { 8, 7, 7, 5, 4, 2, 1, }, }, - { 3335388, { 1, 1, 1, 4, 4, 1, 2, 1, }, { 2, 2, 1, 1, 1, 1, 3, 4, }, { 8, 8, 8, 8, 5, 2, 2, }, { 8, 7, 6, 6, 6, 6, 6, }, }, - { 3454509, { 1, 1, 2, 4, 3, 1, 2, 1, }, { 2, 2, 2, 5, 1, 1, 1, 1, }, { 8, 8, 8, 7, 4, 2, 2, }, { 8, 7, 6, 5, 1, 1, 1, }, }, - { 3573630, { 1, 2, 1, 3, 1, 2, 3, 2, }, { 2, 2, 2, 1, 1, 4, 2, 1, }, { 8, 8, 7, 7, 5, 5, 4, }, { 8, 7, 6, 5, 5, 5, 2, }, }, - { 3692751, { 1, 4, 2, 3, 2, 1, 1, 1, }, { 2, 2, 1, 1, 2, 1, 2, 4, }, { 8, 8, 5, 4, 2, 1, 1, }, { 8, 7, 6, 6, 6, 5, 5, }, }, - { 3811872, { 1, 1, 2, 1, 3, 5, 1, 1, }, { 2, 3, 3, 2, 2, 1, 1, 1, }, { 8, 8, 8, 7, 7, 5, 1, }, { 8, 7, 5, 3, 2, 1, 1, }, }, - { 3930993, { 1, 1, 1, 1, 6, 2, 2, 1, }, { 2, 4, 1, 2, 1, 3, 1, 1, }, { 8, 8, 8, 8, 8, 3, 2, }, { 8, 7, 4, 4, 3, 3, 1, }, }, - { 4050114, { 1, 3, 3, 2, 2, 1, 2, 1, }, { 2, 6, 2, 1, 1, 1, 1, 1, }, { 8, 8, 6, 4, 3, 2, 2, }, { 8, 7, 2, 1, 1, 1, 1, }, }, - { 4169235, { 2, 1, 2, 2, 4, 2, 1, 1, }, { 2, 1, 2, 1, 1, 1, 4, 3, }, { 8, 7, 7, 6, 5, 2, 1, }, { 8, 7, 7, 6, 6, 6, 6, }, }, - { 4288356, { 2, 2, 2, 1, 1, 3, 3, 1, }, { 2, 1, 1, 4, 2, 1, 1, 3, }, { 8, 7, 6, 5, 5, 5, 3, }, { 8, 7, 7, 7, 4, 3, 3, }, }, - { 4407477, { 2, 3, 3, 1, 2, 1, 1, 2, }, { 2, 1, 3, 2, 4, 1, 1, 1, }, { 8, 7, 5, 3, 3, 2, 2, }, { 8, 7, 7, 5, 4, 1, 1, }, }, - { 4526598, { 2, 1, 4, 1, 4, 1, 1, 1, }, { 2, 2, 2, 1, 2, 3, 1, 2, }, { 8, 7, 7, 4, 4, 1, 1, }, { 8, 7, 6, 5, 5, 4, 2, }, }, - { 4645719, { 2, 4, 2, 1, 1, 2, 1, 2, }, { 2, 2, 1, 1, 3, 2, 3, 1, }, { 8, 7, 4, 3, 3, 3, 2, }, { 8, 7, 6, 6, 6, 4, 3, }, }, - { 4764840, { 2, 1, 1, 1, 2, 4, 1, 3, }, { 2, 4, 1, 2, 1, 3, 1, 1, }, { 8, 7, 7, 7, 7, 6, 3, }, { 8, 7, 4, 4, 3, 3, 1, }, }, - { 4883961, { 3, 1, 1, 3, 2, 2, 1, 2, }, { 2, 1, 2, 2, 2, 1, 2, 3, }, { 8, 6, 6, 6, 4, 3, 2, }, { 8, 7, 7, 6, 5, 4, 4, }, }, - { 5003082, { 3, 3, 3, 1, 1, 1, 2, 1, }, { 2, 1, 2, 1, 1, 3, 1, 4, }, { 8, 6, 4, 2, 2, 2, 2, }, { 8, 7, 7, 6, 6, 6, 4, }, }, - { 5122203, { 3, 1, 1, 2, 1, 2, 1, 4, }, { 2, 3, 1, 1, 1, 2, 4, 1, }, { 8, 6, 6, 6, 5, 5, 4, }, { 8, 7, 5, 5, 5, 5, 4, }, }, - { 5241324, { 4, 1, 1, 3, 1, 2, 2, 1, }, { 2, 1, 3, 1, 1, 3, 3, 1, }, { 8, 5, 5, 5, 3, 3, 2, }, { 8, 7, 7, 5, 5, 5, 3, }, }, - { 5360445, { 4, 3, 1, 1, 2, 1, 1, 2, }, { 2, 4, 1, 3, 2, 1, 1, 1, }, { 8, 5, 3, 3, 3, 2, 2, }, { 8, 7, 4, 4, 2, 1, 1, }, }, - { 5479566, { 1, 1, 3, 1, 3, 2, 1, 3, }, { 3, 1, 1, 2, 1, 2, 1, 4, }, { 8, 8, 8, 6, 6, 4, 3, }, { 8, 6, 6, 6, 5, 5, 4, }, }, - { 5598687, { 1, 2, 1, 1, 5, 1, 3, 1, }, { 3, 1, 1, 1, 1, 3, 1, 4, }, { 8, 8, 7, 7, 7, 3, 3, }, { 8, 6, 6, 6, 6, 6, 4, }, }, - { 5717808, { 1, 3, 1, 2, 1, 3, 1, 3, }, { 3, 1, 1, 2, 4, 1, 1, 2, }, { 8, 8, 6, 6, 5, 5, 3, }, { 8, 6, 6, 6, 5, 2, 2, }, }, - { 5836929, { 1, 1, 2, 3, 1, 2, 3, 2, }, { 3, 2, 1, 1, 1, 1, 2, 4, }, { 8, 8, 8, 7, 5, 5, 4, }, { 8, 6, 5, 5, 5, 5, 5, }, }, - { 5956050, { 1, 2, 3, 3, 2, 2, 1, 1, }, { 3, 2, 3, 1, 1, 1, 1, 3, }, { 8, 8, 7, 5, 3, 2, 1, }, { 8, 6, 5, 3, 3, 3, 3, }, }, - { 6075171, { 1, 3, 1, 1, 3, 3, 2, 1, }, { 3, 3, 1, 1, 3, 1, 2, 1, }, { 8, 8, 6, 6, 6, 4, 2, }, { 8, 6, 4, 4, 4, 2, 2, }, }, - { 6194292, { 2, 1, 1, 3, 4, 1, 2, 1, }, { 3, 1, 2, 1, 3, 1, 3, 1, }, { 8, 7, 7, 7, 5, 2, 2, }, { 8, 6, 6, 5, 5, 3, 3, }, }, - { 6313413, { 2, 3, 2, 2, 1, 2, 2, 1, }, { 3, 1, 1, 2, 1, 3, 2, 2, }, { 8, 7, 5, 4, 3, 3, 2, }, { 8, 6, 6, 6, 5, 5, 3, }, }, - { 6432534, { 2, 3, 1, 1, 2, 2, 3, 1, }, { 3, 2, 1, 2, 3, 1, 2, 1, }, { 8, 7, 5, 5, 5, 4, 3, }, { 8, 6, 5, 5, 4, 2, 2, }, }, - { 6551655, { 3, 1, 1, 2, 1, 4, 1, 2, }, { 3, 1, 2, 3, 1, 1, 3, 1, }, { 8, 6, 6, 6, 5, 5, 2, }, { 8, 6, 6, 5, 3, 3, 3, }, }, - { 6670776, { 3, 1, 1, 1, 1, 3, 4, 1, }, { 3, 3, 1, 2, 1, 1, 3, 1, }, { 8, 6, 6, 6, 6, 6, 4, }, { 8, 6, 4, 4, 3, 3, 3, }, }, - { 6789897, { 5, 2, 1, 1, 2, 1, 2, 1, }, { 3, 1, 1, 1, 2, 2, 3, 2, }, { 8, 4, 3, 3, 3, 2, 2, }, { 8, 6, 6, 6, 6, 5, 4, }, }, - { 6909018, { 1, 2, 2, 2, 2, 1, 4, 1, }, { 4, 1, 1, 2, 1, 2, 1, 3, }, { 8, 8, 7, 6, 5, 4, 4, }, { 8, 5, 5, 5, 4, 4, 3, }, }, - { 7028139, { 1, 1, 3, 2, 2, 2, 1, 3, }, { 4, 2, 2, 1, 2, 2, 1, 1, }, { 8, 8, 8, 6, 5, 4, 3, }, { 8, 5, 4, 3, 3, 2, 1, }, }, - { 7147260, { 2, 1, 4, 3, 2, 1, 1, 1, }, { 4, 1, 1, 1, 4, 1, 1, 2, }, { 8, 7, 7, 4, 2, 1, 1, }, { 8, 5, 5, 5, 5, 2, 2, }, }, - { 7266381, { 2, 4, 1, 3, 2, 1, 1, 1, }, { 4, 2, 1, 1, 1, 2, 1, 3, }, { 8, 7, 4, 4, 2, 1, 1, }, { 8, 5, 4, 4, 4, 4, 3, }, }, - { 7385502, { 4, 2, 1, 3, 1, 2, 1, 1, }, { 4, 1, 1, 4, 2, 1, 1, 1, }, { 8, 5, 4, 4, 2, 2, 1, }, { 8, 5, 5, 5, 2, 1, 1, }, }, - { 7504623, { 1, 1, 3, 4, 3, 1, 1, 1, }, { 5, 2, 1, 1, 1, 1, 1, 3, }, { 8, 8, 8, 6, 3, 1, 1, }, { 8, 4, 3, 3, 3, 3, 3, }, }, - { 7623744, { 3, 1, 1, 2, 2, 1, 2, 3, }, { 5, 2, 1, 1, 1, 2, 1, 2, }, { 8, 6, 6, 6, 5, 4, 4, }, { 8, 4, 3, 3, 3, 3, 2, }, }, -}; diff --git a/backend/codablock.c b/backend/codablock.c index 2eef2a7..2f49ea2 100644 --- a/backend/codablock.c +++ b/backend/codablock.c @@ -2,7 +2,7 @@ /* libzint - the open source barcode library - Copyright (C) 2016 - 2020 Harald Oehlmann + Copyright (C) 2016 Harald Oehlmann Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -29,18 +29,16 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ #include #include #include +#include #ifdef _MSC_VER #include #endif -#include #include "common.h" - -INTERNAL int code_128(struct zint_symbol *symbol, const unsigned char source[], const size_t length); +#include "gs1.h" #define uchar unsigned char @@ -52,7 +50,6 @@ INTERNAL int code_128(struct zint_symbol *symbol, const unsigned char source[], #define CShift 16 #define CFill 32 #define CodeFNC1 64 -#define CodeFNC4 128 #define ZTNum (CodeA+CodeB+CodeC) #define ZTFNC1 (CodeA+CodeB+CodeC+CodeFNC1) @@ -93,34 +90,32 @@ typedef struct sCharacterSetTable } CharacterSetTable; /* Find the possible Code-128 Character sets for a character - * The result is an or of CodeA, CodeB, CodeC, CodeFNC1, CodeFNC4 depending on the + * The result is an or of CodeA,CodeB,CodeC,CodeFNC1 in dependency of the * possible Code 128 character sets. */ -static int GetPossibleCharacterSet(unsigned char C) +int GetPossibleCharacterSet(unsigned char C) { - if (C<='\x1f') /* Control chars */ + if (C<='\x19') /* Dec:31 */ return CodeA; if (C>='0' && C<='9') return ZTNum; /* ZTNum=CodeA+CodeB+CodeC */ if (C==aFNC1) return ZTFNC1; /* ZTFNC1=CodeA+CodeB+CodeC+CodeFNC1 */ - if (C==aFNC4) - return (CodeA | CodeB | CodeFNC4); if (C>='\x60' && C<='\x7f') /* 60 to 127 */ return CodeB; return CodeA+CodeB; } /* Create a Table with the following information for each Data character: - * int CharacterSet is an or of CodeA, CodeB, CodeC, CodeFNC1, CodeFNC4, - * depending on which character set is applicable. + * int CharacterSet is an or of CodeA,CodeB,CodeC,CodeFNC1, in + * dependency which character set is applicable. * (Result of GetPossibleCharacterSet) * int AFollowing,BFollowing The number of source characters you still may encode * in this character set. * int CFollowing The number of characters encodable in CodeC if we * start here. */ -static void CreateCharacterSetTable(CharacterSetTable T[], unsigned char *data, const int dataLength) +static void CreateCharacterSetTable(CharacterSetTable T[], unsigned char *data,const size_t dataLength) { int charCur; int runChar; @@ -151,7 +146,7 @@ static void CreateCharacterSetTable(CharacterSetTable T[], unsigned char *data, /* CodeC possible */ runChar=charCur; do{ - /* Whether this is FNC1, whether next is */ + /* Wether this is FNC1 wether next is */ /* numeric */ if (T[runChar].CharacterSet==ZTFNC1) /* FNC1 */ @@ -177,7 +172,7 @@ static void CreateCharacterSetTable(CharacterSetTable T[], unsigned char *data, * one bundle into the line (up to here). This is calculated online because * it depends on the space in the line. */ -static int RemainingDigits(CharacterSetTable *T, int charCur,int emptyColumns) +int RemainingDigits(CharacterSetTable *T, int charCur,int emptyColumns) { int digitCount; /* Numerical digits fitting in the line */ int runChar; @@ -198,17 +193,19 @@ static int RemainingDigits(CharacterSetTable *T, int charCur,int emptyColumns) } /* Find the Character distribution at a given column count. - * If too many rows (>44) are requested the columns are extended. + * If to many rows (>44) are requested the columns is extended. + * A oneLigner may be choosen if shorter. * Parameters : * T Pointer on the Characters which fit in the row * If a different count is calculated it is corrected * in the callers workspace. * pFillings Output of filling characters * pSet Output of the character sets used, allocated by me. + * Data The Data string to encode, exceptionnally not an out * Return value Resulting row count */ -static int Columns2Rows(struct zint_symbol *symbol, CharacterSetTable *T, const int dataLength, +static int Columns2Rows(CharacterSetTable *T, unsigned char *data, const size_t dataLength, int * pRows, int * pUseColumns, int * pSet, int * pFillings) { int useColumns; /* Usable Characters per line */ @@ -219,20 +216,24 @@ static int Columns2Rows(struct zint_symbol *symbol, CharacterSetTable *T, const int emptyColumns2; /* Alternative emptyColumns to compare */ int CPaires; /* Number of digit pairs which may fit in the line */ int characterSetCur; /* Current Character Set */ - int isFNC4; /* Set if current character FNC4 */ useColumns=*pUseColumns; + if (useColumns<3) + useColumns=3; - /* >>> Loop until rowsCur <= 44 */ + /* >>> Loop until rowsCur<44 */ do { int charCur=0; + int fOneLiner=1; /* First try one-Liner */ memset(pSet,0,dataLength*sizeof(int)); rowsCur=0; - /* >>> Line Loop */ + /* >>> Line and OneLiner-try Loop */ do{ /* >> Start Character */ emptyColumns=useColumns; /* Remained place in Line */ + if (fOneLiner) + emptyColumns+=2; /* >>Choose in Set A or B */ /* (C is changed as an option later on) */ @@ -262,7 +263,7 @@ static int Columns2Rows(struct zint_symbol *symbol, CharacterSetTable *T, const /* Start odd is not better */ /* We start in C */ pSet[charCur]=characterSetCur=CodeC; - /* Increment charCur */ + /* Inkrement charCur */ if (T[charCur].CharacterSet!=ZTFNC1) ++charCur; /* 2 Num.Digits */ } @@ -273,7 +274,6 @@ static int Columns2Rows(struct zint_symbol *symbol, CharacterSetTable *T, const /* >> Following characters */ while(emptyColumns>0 && charCur12 */ } else if (characterSetCur==CodeA) { - if (T[charCur].AFollowing == 0 || (isFNC4 && T[charCur].AFollowing == 1)) + if(T[charCur].AFollowing==0) { /* Must change to B */ - if (emptyColumns == 1 || (isFNC4 && emptyColumns == 2)) + if (emptyColumns==1) { /* Can't switch: */ pSet[charCur-1]|=CEnd+CFill; emptyColumns=0; }else{ /* or ? */ - if (T[charCur].BFollowing == 1 || (isFNC4 && T[charCur].BFollowing == 2)) + if (T[charCur].BFollowing==1) { - /* Note using order "FNC4 shift char" (same as CODE128) not "shift FNC4 char" as given in Table B.1 and Table B.2 */ - if (isFNC4) { /* So skip FNC4 and shift value instead */ - --emptyColumns; - ++charCur; - } pSet[charCur]|=CShift; } else { pSet[charCur]|=CodeB; @@ -318,32 +313,23 @@ static int Columns2Rows(struct zint_symbol *symbol, CharacterSetTable *T, const emptyColumns-=2; ++charCur; } - } else if (isFNC4 && emptyColumns == 1) { - /* Can't fit extended ASCII on same line */ - pSet[charCur-1]|=CEnd+CFill; - emptyColumns=0; }else{ --emptyColumns; ++charCur; } } else { /* Last possibility : CodeB */ - if (T[charCur].BFollowing == 0 || (isFNC4 && T[charCur].BFollowing == 1)) + if(T[charCur].BFollowing==0) { /* Must change to A */ - if (emptyColumns == 1 || (isFNC4 && emptyColumns == 2)) + if (emptyColumns==1) { /* Can't switch: */ pSet[charCur-1]|=CEnd+CFill; emptyColumns=0; } else { /* or ? */ - if (T[charCur].AFollowing == 1 || (isFNC4 && T[charCur].AFollowing == 2)) + if (T[charCur].AFollowing==1) { - /* Note using order "FNC4 shift char" (same as CODE128) not "shift FNC4 char" as given in Table B.1 and Table B.2 */ - if (isFNC4) { /* So skip FNC4 and shift value instead */ - --emptyColumns; - ++charCur; - } pSet[charCur]|=CShift; } else { pSet[charCur]|=CodeA; @@ -352,10 +338,6 @@ static int Columns2Rows(struct zint_symbol *symbol, CharacterSetTable *T, const emptyColumns-=2; ++charCur; } - } else if (isFNC4 && emptyColumns == 1) { - /* Can't fit extended ASCII on same line */ - pSet[charCur-1]|=CEnd+CFill; - emptyColumns=0; }else{ --emptyColumns; ++charCur; @@ -390,23 +372,43 @@ static int Columns2Rows(struct zint_symbol *symbol, CharacterSetTable *T, const /* > End of Codeline */ pSet[charCur-1]|=CEnd; ++rowsCur; + if ( fOneLiner) + { + if (charCur44) { @@ -414,35 +416,30 @@ static int Columns2Rows(struct zint_symbol *symbol, CharacterSetTable *T, const if (useColumns > 62) { return ZINT_ERROR_TOO_LONG; } - } else if (rowsCur == 1) { - rowsCur = 2; - fillings += useColumns; } } while(rowsCur>44); - if (symbol->debug & ZINT_DEBUG_PRINT) { + #ifdef _DEBUG printf(" -> out: rowsCur <%i>, useColumns <%i>, fillings <%i>\n",rowsCur,useColumns,fillings); - } + #endif *pUseColumns=useColumns; *pRows=rowsCur; *pFillings=fillings; return 0; } - /* Find columns if row count is given. */ -static int Rows2Columns(struct zint_symbol *symbol, CharacterSetTable *T, const int dataLength, +static int Rows2Columns(CharacterSetTable *T, unsigned char *data, const size_t dataLength, int * pRows, int * pUseColumns, int * pSet, int * pFillings) { int rowsCur; int rowsRequested; /* Number of requested rows */ - int columnsRequested; /* Number of requested columns (if any) */ int backupRows = 0; int fillings; int backupFillings = 0; int useColumns; int testColumns; /* To enter into Width2Rows */ int backupColumns = 0; - int fBackupOk = 0; /* The memorised set is o.k. */ + int fBackupOk = 0; /* The memorysed set is o.k. */ int testListSize = 0; int pTestList[62]; #ifndef _MSC_VER @@ -452,21 +449,21 @@ static int Rows2Columns(struct zint_symbol *symbol, CharacterSetTable *T, const #endif rowsRequested=*pRows; - columnsRequested = *pUseColumns >= 4 ? *pUseColumns : 0; - if (symbol->debug & ZINT_DEBUG_PRINT) { - printf("Optimizer : Searching <%i> rows\n", rowsRequested); - } + #ifdef _DEBUG + fprintf(stderr,"Optimizer : Searching <%i> rows\n",rowsRequested); + #endif - if (columnsRequested) { - testColumns = columnsRequested; - } else { + if (rowsRequested==1) + /* OneLiners are self-calibrating */ + testColumns=32767; + else { /* First guess */ testColumns=dataLength/rowsRequested; if (testColumns > 62) testColumns = 62; - else if (testColumns < 4) - testColumns = 4; + else if (testColumns < 1) + testColumns = 1; } for (;;) { @@ -474,13 +471,13 @@ static int Rows2Columns(struct zint_symbol *symbol, CharacterSetTable *T, const pTestList[testListSize] = testColumns; testListSize++; useColumns=testColumns; /* Make a copy because it may be modified */ - errorCur = Columns2Rows(symbol, T, dataLength, &rowsCur, &useColumns, pSet, &fillings); + errorCur = Columns2Rows(T, data, dataLength, &rowsCur, &useColumns, pSet, &fillings); if (errorCur != 0) return errorCur; if (rowsCur<=rowsRequested) { /* Less or exactly line number found */ - /* check if column count below already tested or at smallest/requested */ - int fInTestList = (rowsCur == 2 || testColumns == 4 || testColumns == columnsRequested); + /* check if column count below already tested or Count = 1*/ + int fInTestList = (rowsCur == 1 || testColumns == 1); int posCur; for (posCur = 0; posCur < testListSize && ! fInTestList; posCur++) { if ( pTestList[posCur] == testColumns-1 ) @@ -488,16 +485,21 @@ static int Rows2Columns(struct zint_symbol *symbol, CharacterSetTable *T, const } if (fInTestList) { /* >> Smaller Width already tested + * if rowsCur=rowsRequested->Exit + * if rowsCur0 + * -> New search for rowsRequested:=rowsCur */ - if (rowsCur < rowsRequested) { - fillings += useColumns * (rowsRequested - rowsCur); - rowsCur = rowsRequested; + if ( rowsCur == rowsRequested || fillings == 0 || testColumns == 1 ) { + /* Exit with actual */ + *pFillings=fillings; + *pRows=rowsCur; + *pUseColumns = useColumns; + return 0; } - /* Exit with actual */ - *pFillings=fillings; - *pRows=rowsCur; - *pUseColumns = useColumns; - return 0; + /* Search again for smaller Line number */ + rowsRequested=rowsCur; + pTestList[0] = testColumns; + testListSize = 1; } /* > Test more rows (shorter CDB) */ fBackupOk=(rowsCur==rowsRequested); @@ -507,7 +509,7 @@ static int Rows2Columns(struct zint_symbol *symbol, CharacterSetTable *T, const backupRows=rowsCur; --testColumns; } else { - /* > Too many rows */ + /* > To many rows */ int fInTestList = fBackupOk; int posCur; for (posCur = 0; posCur < testListSize && ! fInTestList; posCur++) { @@ -538,7 +540,7 @@ static int Rows2Columns(struct zint_symbol *symbol, CharacterSetTable *T, const /* Print a character in character set A */ -static void A2C128_A(uchar **ppOutPos,uchar c) +void A2C128_A(uchar **ppOutPos,uchar c) { uchar * pOutPos = *ppOutPos; switch(c){ @@ -559,10 +561,9 @@ static void A2C128_A(uchar **ppOutPos,uchar c) } (*ppOutPos)++; } - /* Output c in Set B */ -static void A2C128_B(uchar **ppOutPos,uchar c) +void A2C128_B(uchar **ppOutPos,uchar c) { uchar * pOutPos = *ppOutPos; switch(c){ @@ -577,10 +578,9 @@ static void A2C128_B(uchar **ppOutPos,uchar c) } ++(*ppOutPos); } - /* Output c1, c2 in Set C */ -static void A2C128_C(uchar **ppOutPos,uchar c1,uchar c2) +void A2C128_C(uchar **ppOutPos,uchar c1,uchar c2) { uchar * pOutPos = *ppOutPos; switch(c1){ @@ -591,10 +591,9 @@ static void A2C128_C(uchar **ppOutPos,uchar c1,uchar c2) } (*ppOutPos)++; } - /* Output a character in Characterset */ -static void ASCIIZ128(uchar **ppOutPos, int CharacterSet,uchar c1, uchar c2) +void ASCIIZ128(uchar **ppOutPos, int CharacterSet,uchar c1, uchar c2) { if (CharacterSet==CodeA) A2C128_A(ppOutPos,c1); @@ -603,13 +602,14 @@ static void ASCIIZ128(uchar **ppOutPos, int CharacterSet,uchar c1, uchar c2) else A2C128_C(ppOutPos,c1,c2); } - -/* XLate Tables D.2, D.3 and F.1 of Codablock-F Specification and call output +/* XLate Table A of Codablock-F Specification and call output */ -static void SumASCII(uchar **ppOutPos, int Sum, int CharacterSet) +void SumASCII(uchar **ppOutPos, int Sum, int CharacterSet) { switch (CharacterSet){ - case CodeA: /* Row # Indicators and Data Check Characters K1/K2 for CodeA and CodeB are the same */ + case CodeA: + A2C128_A(ppOutPos, (uchar)Sum); + break; case CodeB: if (Sum<=31) A2C128_B(ppOutPos, (uchar)(Sum+96)); @@ -627,8 +627,8 @@ static void SumASCII(uchar **ppOutPos, int Sum, int CharacterSet) /* Main function called by zint framework */ -INTERNAL int codablock(struct zint_symbol *symbol,const unsigned char source[], const size_t length) { - int charCur, dataLength; +int codablock(struct zint_symbol *symbol,const unsigned char source[], const size_t length) { + size_t charCur,dataLength; int Error; int rows, columns, useColumns; int fillings; @@ -637,41 +637,33 @@ INTERNAL int codablock(struct zint_symbol *symbol,const unsigned char source[], int rowCur; int characterSetCur; int emptyColumns; - char dest[1000]; - int r, c; + char dest[1000]; + int r, c; #ifdef _MSC_VER CharacterSetTable *T; unsigned char *data; int *pSet; uchar * pOutput; #endif - /* Suppresses clang-analyzer-core.VLASize warning */ - assert(length > 0); /* Parameter check */ - /* option1: rows <= 0: automatic, 1..44 */ + /* option1: rows 0: automatic, 1..44 */ rows = symbol->option_1; - if (rows == 1) { - Error = code_128(symbol, source, length); - if (Error < 5) { - symbol->output_options |= BARCODE_BIND; - if (symbol->border_width == 0) { /* Allow override if non-zero */ - symbol->border_width = 1; /* AIM ISS-X-24 Section 4.6.1 b) (note change from previous default 2) */ - } - } - return Error; - } if (rows > 44) { - strcpy(symbol->errtxt, "410: Rows parameter not in 0..44"); + strcpy(symbol->errtxt, "410: Row parameter not in 0..44"); return ZINT_ERROR_INVALID_OPTION; } - /* option_2: (usable data) columns: <= 0: automatic, 9..67 (min 9 == 4 data, max 67 == 62 data) */ + /* option_2: (usable data) columns: 0: automatic, 6..66 */ columns = symbol->option_2; - if ( ! (columns <= 0 || (columns >= 9 && columns <= 67)) ) { - strcpy(symbol->errtxt, "411: Columns parameter not in 0, 9..67"); + if ( ! (columns <= 0 || (columns >= 6 && columns <=66)) ) { + strcpy(symbol->errtxt, "411: Columns parameter not in 0,6..66"); + return ZINT_ERROR_INVALID_OPTION; + } + /* GS1 not implemented */ + if (symbol->input_mode == GS1_MODE) { + strcpy(symbol->errtxt, "412: GS1 mode not supported"); return ZINT_ERROR_INVALID_OPTION; } - #ifndef _MSC_VER unsigned char data[length*2+1]; #else @@ -684,7 +676,7 @@ INTERNAL int codablock(struct zint_symbol *symbol,const unsigned char source[], dataLength++; } /* Replace all Codes>127 with Code-128 */ - for (charCur = 0; charCur < (int) length; charCur++) { + for (charCur=0;charCur127) { data[dataLength] = aFNC4; @@ -707,46 +699,51 @@ INTERNAL int codablock(struct zint_symbol *symbol,const unsigned char source[], /* Find final row and column count */ /* nor row nor column count given */ - if (rows <= 0 && columns <= 0) { - /* use 1/1 aspect/ratio Codablock */ - columns = floor(sqrt(dataLength)) + 5; - if (columns > 67) { - columns = 67; - } else if (columns < 9) { - columns = 9; - } - if (symbol->debug & ZINT_DEBUG_PRINT) { - printf("Auto column count for %d characters:%d\n", dataLength, columns); + if ( rows <= 0 && columns <= 5 ) { + /* Use Code128 until reasonable size */ + if (dataLength < 9) { + rows = 1; + } else { + /* use 1/1 aspect/ratio Codablock */ + columns = ((int)floor(sqrt(1.0*dataLength))+5); + if (columns > 64) + columns = 64; + #ifdef _DEBUG + printf("Auto column count for %zu characters:%d\n",dataLength,columns); + #endif } } /* There are 5 Codewords for Organisation Start(2),row(1),CheckSum,Stop */ useColumns = columns - 5; if ( rows > 0 ) { /* row count given */ - Error = Rows2Columns(symbol, T, dataLength, &rows, &useColumns, pSet, &fillings); + Error=Rows2Columns(T,data,dataLength,&rows,&useColumns,pSet,&fillings); } else { /* column count given */ - Error = Columns2Rows(symbol, T, dataLength, &rows, &useColumns, pSet, &fillings); + Error=Columns2Rows(T,data,dataLength,&rows,&useColumns,pSet,&fillings); } if (Error != 0) { - strcpy(symbol->errtxt, "413: Data string too long"); + strcpy(symbol->errtxt, "413: Data string to long"); return Error; } - /* Suppresses clang-analyzer-core.VLASize warning */ - assert(rows >= 2 && useColumns >= 4); - - /* Data Check Characters K1 and K2, Annex F */ - Sum1 = Sum2 = 0; - for (charCur = 0; charCur < (int) length; charCur++) { - Sum1 = (Sum1 + (charCur + 1) * source[charCur]) % 86; /* Mod as we go along to avoid overflow */ - Sum2 = (Sum2 + charCur * source[charCur]) % 86; + /* Checksum */ + Sum1=Sum2=0; + if (rows>1) + { + size_t charCur; + for (charCur=0 ; charCurdebug & ZINT_DEBUG_PRINT) { /* start a new level of local variables */ + #ifdef _DEBUG + { /* start a new level of local variables */ int DPos; printf("\nData:"); for (DPos=0 ; DPos< dataLength ; DPos++) fputc(data[DPos],stdout); + printf("\n Set:"); for (DPos=0 ; DPos< dataLength ; DPos++) { switch (pSet[DPos]&(CodeA+CodeB+CodeC)) { @@ -769,8 +766,8 @@ INTERNAL int codablock(struct zint_symbol *symbol,const unsigned char source[], for (DPos=0 ; DPos< dataLength ; DPos++) fputc((pSet[DPos]&CFill)==0?'.':'X',stdout); fputc('\n',stdout); - printf("K1 %d, K2 %d\n", Sum1, Sum2); } + #endif columns = useColumns + 5; @@ -787,17 +784,15 @@ INTERNAL int codablock(struct zint_symbol *symbol,const unsigned char source[], for (rowCur=0 ; rowCur=dataLength) { - /* >> Empty line with StartA, aCodeB, row #, and then filler aCodeC aCodeB etc */ + /* >> Empty line with StartCCodeBCodeC */ + characterSetCur=CodeC; + /* CDB Start C*/ *pOutPos='\x67'; pOutPos++; - *pOutPos = 100; /* aCodeB */ + *pOutPos='\x63'; pOutPos++; - characterSetCur = CodeB; - SumASCII(&pOutPos, rowCur + 42, characterSetCur); /* Row # */ - emptyColumns = useColumns; - if (rowCur == rows - 1) { - emptyColumns -= 2; - } + SumASCII(&pOutPos,rowCur+42,CodeC); + emptyColumns=useColumns-2; while (emptyColumns>0) { if(characterSetCur==CodeC) @@ -817,36 +812,60 @@ INTERNAL int codablock(struct zint_symbol *symbol,const unsigned char source[], case CodeA: *pOutPos = '\x67'; pOutPos++; - *pOutPos = '\x62'; - pOutPos++; + if (rows>1) { + *pOutPos = '\x62'; + pOutPos++; + } characterSetCur=CodeA; break; case CodeB: - *pOutPos = '\x67'; - pOutPos++; - *pOutPos = '\x64'; - pOutPos++; + if (rows==1) { + *pOutPos = '\x68'; + pOutPos++; + } else { + *pOutPos = '\x67'; + pOutPos++; + *pOutPos = '\x64'; + pOutPos++; + } characterSetCur=CodeB; break; case CodeC: default: - *pOutPos = '\x67'; - pOutPos++; - *pOutPos = '\x63'; - pOutPos++; + if (rows==1) { + *pOutPos = '\x69'; + pOutPos++; + } else { + *pOutPos = '\x67'; + pOutPos++; + *pOutPos = '\x63'; + pOutPos++; + } characterSetCur=CodeC; break; } - /* > Set F1 */ - /* In first line : # of rows */ - SumASCII(&pOutPos, rowCur == 0 ? rows - 2 : rowCur + 42, characterSetCur); + if (rows>1) + { + /* > Set F1 */ + /* In first line : # of rows */ + /* In Case of CodeA we shifted to CodeB */ + SumASCII(&pOutPos + ,(rowCur==0)?rows-2:rowCur+42 + ,(characterSetCur==CodeA)?CodeB:characterSetCur + ); + } /* >>> Data */ emptyColumns=useColumns; + /* +++ One liner don't have start/stop code */ + if (rows == 1) + emptyColumns +=2; /* >> Character loop */ - while (emptyColumns > 0 && charCur < dataLength) + while (emptyColumns>0) { /* ? Change character set */ - if (emptyColumns < useColumns) + /* not at first possition (It was then the start set) */ + /* +++ special case for one-ligner */ + if (emptyColumns> End Criteria */ - if ((pSet[charCur] & CFill) || (pSet[charCur] & CEnd)) + if ((pSet[charCur] & CFill)!=0) { /* Fill Line but leave space for checks in last line */ - if (rowCur == rows - 1) { - emptyColumns -= 2; - } + if(rowCur==rows-1 && emptyColumns>=2) + emptyColumns-=2; while(emptyColumns>0) { switch(characterSetCur){ @@ -919,23 +937,27 @@ INTERNAL int codablock(struct zint_symbol *symbol,const unsigned char source[], --emptyColumns; } } + if ((pSet[charCur] & CEnd)!=0) + emptyColumns=0; ++charCur; } /* Loop over characters */ } /* if filling-Line / normal */ /* Add checksum in last line */ - if (rowCur == rows - 1) + if(rows>1 && rowCur==rows-1) { SumASCII(&pOutPos,Sum1,characterSetCur); SumASCII(&pOutPos,Sum2,characterSetCur); } /* Add Code 128 checksum */ { - int Sum = pOutput[columns * rowCur] % 103; - int Pos = 1; + int Sum=0; + int Pos=0; for ( ; Pos < useColumns+3 ; Pos++) { - Sum = (Sum + pOutput[columns * rowCur + Pos] * Pos) % 103; + Sum = (Sum + + ((Pos==0?1:Pos) * pOutput[columns*rowCur+Pos]) % 103 + ) % 103; } *pOutPos=(uchar)Sum; pOutPos++; @@ -945,7 +967,7 @@ INTERNAL int codablock(struct zint_symbol *symbol,const unsigned char source[], pOutPos++; } /* End Lineloop */ - if (symbol->debug & ZINT_DEBUG_PRINT) { + #ifdef _DEBUG /* Dump the output to the screen */ printf("\nCode 128 Code Numbers:\n"); @@ -961,12 +983,7 @@ INTERNAL int codablock(struct zint_symbol *symbol,const unsigned char source[], } } printf("rows=%i columns=%i fillings=%i\n", rows, columns, fillings); - } -#ifdef ZINT_TEST - if (symbol->debug & ZINT_DEBUG_TEST) { - debug_test_codeword_dump(symbol, pOutput, rows * columns); - } -#endif + #endif /* Paint the C128 patterns */ for (r = 0; r < rows; r++) { @@ -978,11 +995,14 @@ INTERNAL int codablock(struct zint_symbol *symbol,const unsigned char source[], symbol->row_height[r] = 10; } - symbol->output_options |= BARCODE_BIND; - - if (symbol->border_width == 0) { /* Allow override if non-zero */ - symbol->border_width = 1; /* AIM ISS-X-24 Section 4.6.1 b) (note change from previous default 2) */ + if (!(symbol->output_options & BARCODE_BIND)) { + symbol->output_options += BARCODE_BIND; } + if (symbol->border_width < 2) { + symbol->border_width = 2; + } return 0; } + + diff --git a/backend/code.c b/backend/code.c index 455491c..ede641f 100644 --- a/backend/code.c +++ b/backend/code.c @@ -1,11 +1,8 @@ -/* code.c - Handles Code 11, 39, 39+, 93, PZN, Channel and VIN */ -/* LOGMARS MIL-STD-1189 Rev. B https://apps.dtic.mil/dtic/tr/fulltext/u2/a473534.pdf */ -/* PZN https://www.ifaffm.de/mandanten/1/documents/04_ifa_coding_system/IFA_Info_Code_39_EN.pdf */ -/* PZN https://www.ifaffm.de/mandanten/1/documents/04_ifa_coding_system/IFA-Info_Check_Digit_Calculations_PZN_PPN_UDI_EN.pdf */ +/* code.c - Handles Code 11, 39, 39+ and 93 */ /* libzint - the open source barcode library - Copyright (C) 2008 - 2020 Robin Stuart + Copyright (C) 2008-2017 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -32,16 +29,16 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ /* In version 0.5 this file was 1,553 lines long! */ +#include #include -#include +#include #include "common.h" -#define SODIUM "0123456789-" -#define SILVER "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%abcd" +#define SODIUM "0123456789-" +#define SILVER "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%abcd" #define ARSENIC "0123456789ABCDEFGHJKLMNPRSTUVWXYZ" static const char *C11Table[11] = { @@ -97,18 +94,24 @@ static const char *C93Table[47] = { "121221", "312111", "311121", "122211" }; +/* Global Variables for Channel Code */ +int S[11], B[11]; +long value; +long target_value; +char pattern[30]; + +/* Function Prototypes */ +void NextS(int Chan, int i, int MaxS, int MaxB); +void NextB(int Chan, int i, int MaxB, int MaxS); + /* *********************** CODE 11 ******************** */ -INTERNAL int code_11(struct zint_symbol *symbol, unsigned char source[], int length) { /* Code 11 */ +int code_11(struct zint_symbol *symbol, unsigned char source[], int length) { /* Code 11 */ - int i; + unsigned int i; int h, c_digit, c_weight, c_count, k_digit, k_weight, k_count; - int weight[122], error_number; - char dest[750]; /* 6 + 121 * 6 + 2 * 6 + 5 + 1 == 750 */ + int weight[128], error_number; + char dest[1024]; /* 6 + 121 * 6 + 2 * 6 + 5 + 1 ~ 1024*/ char checkstr[3]; - int num_check_digits; - - /* Suppresses clang-tidy clang-analyzer-core.UndefinedBinaryOperatorResult warning */ - assert(length > 0); if (length > 121) { strcpy(symbol->errtxt, "320: Input too long"); @@ -119,19 +122,6 @@ INTERNAL int code_11(struct zint_symbol *symbol, unsigned char source[], int len strcpy(symbol->errtxt, "321: Invalid characters in data"); return error_number; } - - if (symbol->option_2 < 0 || symbol->option_2 > 2) { - strcpy(symbol->errtxt, "339: Invalid check digit version"); - return ZINT_ERROR_INVALID_OPTION; - } - if (symbol->option_2 == 2) { - num_check_digits = 0; - } else if (symbol->option_2 == 1) { - num_check_digits = 1; - } else { - num_check_digits = 2; - } - c_weight = 1; c_count = 0; k_weight = 1; @@ -141,7 +131,7 @@ INTERNAL int code_11(struct zint_symbol *symbol, unsigned char source[], int len strcpy(dest, "112211"); /* Draw main body of barcode */ - for (i = 0; i < length; i++) { + for (i = 0; i < (unsigned int) length; i++) { lookup(SODIUM, C11Table, source[i], dest); if (source[i] == '-') weight[i] = 10; @@ -149,52 +139,41 @@ INTERNAL int code_11(struct zint_symbol *symbol, unsigned char source[], int len weight[i] = ctoi(source[i]); } - if (num_check_digits) { - /* Calculate C checksum */ - for (h = length - 1; h >= 0; h--) { - c_count += (c_weight * weight[h]); - c_weight++; + /* Calculate C checksum */ + for (h = length - 1; h >= 0; h--) { + c_count += (c_weight * weight[h]); + c_weight++; - if (c_weight > 10) { - c_weight = 1; - } + if (c_weight > 10) { + c_weight = 1; } - c_digit = c_count % 11; - - if (num_check_digits == 1) { - checkstr[0] = itoc(c_digit); - if (checkstr[0] == 'A') { - checkstr[0] = '-'; - } - checkstr[1] = '\0'; - lookup(SODIUM, C11Table, checkstr[0], dest); - } else { - weight[length] = c_digit; + } + c_digit = c_count % 11; - /* Calculate K checksum */ - for (h = length; h >= 0; h--) { - k_count += (k_weight * weight[h]); - k_weight++; + weight[length] = c_digit; - if (k_weight > 9) { - k_weight = 1; - } - } - k_digit = k_count % 11; + /* Calculate K checksum */ + for (h = length; h >= 0; h--) { + k_count += (k_weight * weight[h]); + k_weight++; - checkstr[0] = itoc(c_digit); - checkstr[1] = itoc(k_digit); - if (checkstr[0] == 'A') { - checkstr[0] = '-'; - } - if (checkstr[1] == 'A') { - checkstr[1] = '-'; - } - checkstr[2] = '\0'; - lookup(SODIUM, C11Table, checkstr[0], dest); - lookup(SODIUM, C11Table, checkstr[1], dest); + if (k_weight > 9) { + k_weight = 1; } } + k_digit = k_count % 11; + + checkstr[0] = itoc(c_digit); + checkstr[1] = itoc(k_digit); + if (checkstr[0] == 'A') { + checkstr[0] = '-'; + } + if (checkstr[1] == 'A') { + checkstr[1] = '-'; + } + checkstr[2] = '\0'; + lookup(SODIUM, C11Table, checkstr[0], dest); + lookup(SODIUM, C11Table, checkstr[1], dest); /* Stop character */ strcat(dest, "11221"); @@ -202,18 +181,16 @@ INTERNAL int code_11(struct zint_symbol *symbol, unsigned char source[], int len expand(symbol, dest); ustrcpy(symbol->text, source); - if (num_check_digits) { - ustrcat(symbol->text, checkstr); - } + strcat((char*) symbol->text, checkstr); return error_number; } /* Code 39 */ -INTERNAL int c39(struct zint_symbol *symbol, unsigned char source[], const size_t length) { - int i; - int counter; +int c39(struct zint_symbol *symbol, unsigned char source[], const size_t length) { + unsigned int i; + unsigned int counter; int error_number; - char dest[880]; /* 10 (Start) + 85 * 10 + 10 (Check) + 9 (Stop) + 1 = 880 */ + char dest[775]; char localstr[2] = {0}; counter = 0; @@ -222,13 +199,10 @@ INTERNAL int c39(struct zint_symbol *symbol, unsigned char source[], const size_ symbol->option_2 = 0; } - if ((symbol->symbology == BARCODE_LOGMARS) && (length > 30)) { /* MIL-STD-1189 Rev. B Section 5.2.6.2 */ + if ((symbol->symbology == BARCODE_LOGMARS) && (length > 59)) { strcpy(symbol->errtxt, "322: Input too long"); return ZINT_ERROR_TOO_LONG; - } else if ((symbol->symbology == BARCODE_HIBC_39) && (length > 68)) { /* Prevent encoded_data out-of-bounds >= 143 due to wider 'wide' bars */ - strcpy(symbol->errtxt, "319: Input too long"); /* Note use 319 (2of5 range) as 340 taken by CODE128 */ - return ZINT_ERROR_TOO_LONG; - } else if (length > 85) { + } else if (length > 74) { strcpy(symbol->errtxt, "323: Input too long"); return ZINT_ERROR_TOO_LONG; } @@ -242,12 +216,12 @@ INTERNAL int c39(struct zint_symbol *symbol, unsigned char source[], const size_ /* Start character */ strcpy(dest, "1211212111"); - for (i = 0; i < (int) length; i++) { + for (i = 0; i < (unsigned int) length; i++) { lookup(SILVER, C39Table, source[i], dest); counter += posn(SILVER, source[i]); } - if (symbol->option_2 == 1) { + if ((symbol->symbology == BARCODE_LOGMARS) || (symbol->option_2 == 1)) { char check_digit; counter = counter % 43; @@ -293,7 +267,7 @@ INTERNAL int c39(struct zint_symbol *symbol, unsigned char source[], const size_ if ((symbol->symbology == BARCODE_LOGMARS) || (symbol->symbology == BARCODE_HIBC_39)) { /* LOGMARS uses wider 'wide' bars than normal Code 39 */ - counter = strlen(dest); + counter = (unsigned int) strlen(dest); for (i = 0; i < counter; i++) { if (dest[i] == '2') { dest[i] = '3'; @@ -304,24 +278,25 @@ INTERNAL int c39(struct zint_symbol *symbol, unsigned char source[], const size_ expand(symbol, dest); if (symbol->symbology == BARCODE_CODE39) { - ustrcpy(symbol->text, "*"); - ustrcat(symbol->text, source); - ustrcat(symbol->text, localstr); - ustrcat(symbol->text, "*"); + strcpy((char*) symbol->text, "*"); + strcat((char*) symbol->text, (char*) source); + strcat((char*) symbol->text, localstr); + strcat((char*) symbol->text, "*"); } else { - ustrcpy(symbol->text, source); - ustrcat(symbol->text, localstr); + strcpy((char*) symbol->text, (char*) source); + strcat((char*) symbol->text, localstr); } return error_number; } /* Pharmazentral Nummer (PZN) */ -INTERNAL int pharmazentral(struct zint_symbol *symbol, unsigned char source[], int length) { +int pharmazentral(struct zint_symbol *symbol, unsigned char source[], int length) { int i, error_number, zeroes; unsigned int count, check_digit; char localstr[11]; + count = 0; if (length > 7) { strcpy(symbol->errtxt, "325: Input wrong length"); return ZINT_ERROR_TOO_LONG; @@ -336,57 +311,54 @@ INTERNAL int pharmazentral(struct zint_symbol *symbol, unsigned char source[], i zeroes = 7 - length + 1; for (i = 1; i < zeroes; i++) localstr[i] = '0'; - ustrcpy(localstr + zeroes, source); + strcpy(localstr + zeroes, (char *) source); - count = 0; for (i = 1; i < 8; i++) { count += i * ctoi(localstr[i]); } check_digit = count % 11; - - if (symbol->debug & ZINT_DEBUG_PRINT) { - printf("PZN: %s, check digit %d\n", localstr, check_digit); + if (check_digit == 11) { + check_digit = 0; } - - if (check_digit == 10) { + localstr[8] = itoc(check_digit); + localstr[9] = '\0'; + if (localstr[8] == 'A') { strcpy(symbol->errtxt, "327: Invalid PZN Data"); return ZINT_ERROR_INVALID_DATA; } - localstr[8] = itoc(check_digit); - localstr[9] = '\0'; error_number = c39(symbol, (unsigned char *) localstr, strlen(localstr)); - ustrcpy(symbol->text, "PZN "); - ustrcat(symbol->text, localstr); + ustrcpy(symbol->text, (unsigned char *) "PZN"); + strcat((char*) symbol->text, localstr); return error_number; } /* Extended Code 39 - ISO/IEC 16388:2007 Annex A */ -INTERNAL int ec39(struct zint_symbol *symbol, unsigned char source[], int length) { +int ec39(struct zint_symbol *symbol, unsigned char source[], int length) { - unsigned char buffer[85 * 2 + 1] = {0}; - int i; + unsigned char buffer[150] = {0}; + unsigned int i; int error_number; - if (length > 85) { + if (length > 74) { strcpy(symbol->errtxt, "328: Input too long"); return ZINT_ERROR_TOO_LONG; } /* Creates a buffer string and places control characters into it */ - for (i = 0; i < length; i++) { + for (i = 0; i < (unsigned int) length; i++) { if (source[i] > 127) { /* Cannot encode extended ASCII */ strcpy(symbol->errtxt, "329: Invalid characters in input data"); return ZINT_ERROR_INVALID_DATA; } - ustrcat(buffer, EC39Ctrl[source[i]]); + strcat((char*) buffer, EC39Ctrl[source[i]]); } /* Then sends the buffer to the C39 function */ error_number = c39(symbol, buffer, ustrlen(buffer)); - for (i = 0; i < length; i++) + for (i = 0; i < (unsigned int) length; i++) symbol->text[i] = source[i] ? source[i] : ' '; symbol->text[length] = '\0'; @@ -394,7 +366,7 @@ INTERNAL int ec39(struct zint_symbol *symbol, unsigned char source[], int length } /* Code 93 is an advancement on Code 39 and the definition is a lot tighter */ -INTERNAL int c93(struct zint_symbol *symbol, unsigned char source[], int length) { +int c93(struct zint_symbol *symbol, unsigned char source[], int length) { /* SILVER includes the extra characters a, b, c and d to represent Code 93 specific shift characters 1, 2, 3 and 4 respectively. These characters are never used by @@ -482,136 +454,66 @@ INTERNAL int c93(struct zint_symbol *symbol, unsigned char source[], int length) return error_number; } -typedef const struct s_channel_precalc { - long value; unsigned char B[8]; unsigned char S[8]; unsigned char bmax[7]; unsigned char smax[7]; -} channel_precalc; - -//#define CHANNEL_GENERATE_PRECALCS +/* NextS() and NextB() are from ANSI/AIM BC12-1998 and are Copyright (c) AIM 1997 */ -#ifdef CHANNEL_GENERATE_PRECALCS -/* To generate precalc tables uncomment define and run "./test_channel -f generate -g" and place result in "channel_precalcs.h" */ -static void channel_generate_precalc(int channels, long value, int mod, int last, int B[8], int S[8], int bmax[7], int smax[7]) { - int i; - if (value == mod) printf("static channel_precalc channel_precalcs%d[] = {\n", channels); - printf(" { %7ld, {", value); for (i = 0; i < 8; i++) printf(" %d,", B[i]); printf(" },"); - printf(" {"); for (i = 0; i < 8; i++) printf(" %d,", S[i]); printf(" },"); - printf(" {"); for (i = 0; i < 7; i++) printf(" %d,", bmax[i]); printf(" },"); - printf(" {"); for (i = 0; i < 7; i++) printf(" %d,", smax[i]); printf(" }, },\n"); - if (value == last) printf("};\n"); -} -#else -#include "channel_precalcs.h" -#endif +/* Their are used here on the understanding that they form part of the specification + for Channel Code and therefore their use is permitted under the following terms + set out in that document: -static long channel_copy_precalc(channel_precalc precalc, int B[8], int S[8], int bmax[7], int smax[7]) { - int i; + "It is the intent and understanding of AIM [t]hat the symbology presented in this + specification is entirely in the public domain and free of all use restrictions, + licenses and fees. AIM USA, its member companies, or individual officers + assume no liability for the use of this document." */ - for (i = 0; i < 7; i++) { - B[i] = precalc.B[i]; - S[i] = precalc.S[i]; - bmax[i] = precalc.bmax[i]; - smax[i] = precalc.smax[i]; +void CheckCharacter() { + + if (value == target_value) { + int i; + /* Target reached - save the generated pattern */ + strcpy(pattern, "11110"); + for (i = 0; i < 11; i++) { + char part[3]; + part[0] = itoc(S[i]); + part[1] = itoc(B[i]); + part[2] = '\0'; + strcat(pattern, part); + } } - B[7] = precalc.B[7]; - S[7] = precalc.S[7]; - - return precalc.value; } -/* CHNCHR is adapted from ANSI/AIM BC12-1998 Annex D Figure D5 and is Copyright (c) AIM 1997 */ +void NextB(int Chan, int i, int MaxB, int MaxS) { + int b; -/* It is used here on the understanding that it forms part of the specification - for Channel Code and therefore its use is permitted under the following terms - set out in that document: + b = (S[i] + B[i - 1] + S[i - 1] + B[i - 2] > 4) ? 1 : 2; + if (i < Chan + 2) { + for (; b <= MaxB; b++) { + B[i] = b; + NextS(Chan, i + 1, MaxS, MaxB + 1 - b); + } + } else if (b <= MaxB) { + B[i] = MaxB; + CheckCharacter(); + value++; + } +} - "It is the intent and understanding of AIM [t]hat the symbology presented in this - specification is entirely in the public domain and free of all use restrictions, - licenses and fees. AIM USA, its member companies, or individual officers - assume no liability for the use of this document." */ +void NextS(int Chan, int i, int MaxS, int MaxB) { + int s; -static void CHNCHR(int channels, long target_value, int B[8], int S[8]) { - /* Use of initial pre-calculations taken from Barcode Writer in Pure PostScript (bwipp) - * Copyright (c) 2004-2020 Terry Burton (MIT/X-Consortium license) */ - static channel_precalc initial_precalcs[6] = { - { 0, { 1, 1, 1, 1, 1, 2, 1, 2, }, { 1, 1, 1, 1, 1, 1, 1, 3, }, { 1, 1, 1, 1, 1, 3, 2, }, { 1, 1, 1, 1, 1, 3, 3, }, }, - { 0, { 1, 1, 1, 1, 2, 1, 1, 3, }, { 1, 1, 1, 1, 1, 1, 1, 4, }, { 1, 1, 1, 1, 4, 3, 3, }, { 1, 1, 1, 1, 4, 4, 4, }, }, - { 0, { 1, 1, 1, 2, 1, 1, 2, 3, }, { 1, 1, 1, 1, 1, 1, 1, 5, }, { 1, 1, 1, 5, 4, 4, 4, }, { 1, 1, 1, 5, 5, 5, 5, }, }, - { 0, { 1, 1, 2, 1, 1, 2, 1, 4, }, { 1, 1, 1, 1, 1, 1, 1, 6, }, { 1, 1, 6, 5, 5, 5, 4, }, { 1, 1, 6, 6, 6, 6, 6, }, }, - { 0, { 1, 2, 1, 1, 2, 1, 1, 5, }, { 1, 1, 1, 1, 1, 1, 1, 7, }, { 1, 7, 6, 6, 6, 5, 5, }, { 1, 7, 7, 7, 7, 7, 7, }, }, - { 0, { 2, 1, 1, 2, 1, 1, 2, 5, }, { 1, 1, 1, 1, 1, 1, 1, 8, }, { 8, 7, 7, 7, 6, 6, 6, }, { 8, 8, 8, 8, 8, 8, 8, }, }, - }; - int bmax[7], smax[7]; - long value = 0; - - channel_copy_precalc(initial_precalcs[channels - 3], B, S, bmax, smax); - -#ifndef CHANNEL_GENERATE_PRECALCS - if (channels == 7 && target_value >= channel_precalcs7[0].value) { - value = channel_copy_precalc(channel_precalcs7[(target_value / channel_precalcs7[0].value) - 1], B, S, bmax, smax); - } else if (channels == 8 && target_value >= channel_precalcs8[0].value) { - value = channel_copy_precalc(channel_precalcs8[(target_value / channel_precalcs8[0].value) - 1], B, S, bmax, smax); - } -#endif - - goto chkchr; - -ls0:smax[1] = smax[0] + 1 - S[0]; B[0] = 1; - if (S[0] == 1) goto nb0; -lb0: bmax[1] = bmax[0] + 1 - B[0]; S[1] = 1; -ls1: smax[2] = smax[1] + 1 - S[1]; B[1] = 1; - if (S[0] + B[0] + S[1] == 3) goto nb1; -lb1: bmax[2] = bmax[1] + 1 - B[1]; S[2] = 1; -ls2: smax[3] = smax[2] + 1 - S[2]; B[2] = 1; - if (B[0] + S[1] + B[1] + S[2] == 4) goto nb2; -lb2: bmax[3] = bmax[2] + 1 - B[2]; S[3] = 1; -ls3: smax[4] = smax[3] + 1 - S[3]; B[3] = 1; - if (B[1] + S[2] + B[2] + S[3] == 4) goto nb3; -lb3: bmax[4] = bmax[3] + 1 - B[3]; S[4] = 1; -ls4: smax[5] = smax[4] + 1 - S[4]; B[4] = 1; - if (B[2] + S[3] + B[3] + S[4] == 4) goto nb4; -lb4: bmax[5] = bmax[4] + 1 - B[4]; S[5] = 1; -ls5: smax[6] = smax[5] + 1 - S[5]; B[5] = 1; - if (B[3] + S[4] + B[4] + S[5] == 4) goto nb5; -lb5: bmax[6] = bmax[5] + 1 - B[5]; S[6] = 1; -ls6: S[7] = smax[6] + 1 - S[6]; B[6] = 1; - if (B[4] + S[5] + B[5] + S[6] == 4) goto nb6; -lb6: B[7] = bmax[6] + 1 - B[6]; - if (B[5] + S[6] + B[6] + S[7] + B[7] == 5) goto nb6; -chkchr: -#ifdef CHANNEL_GENERATE_PRECALCS - if (channels == 7 && value && value % 115338 == 0) { /* 115338 == (576688 + 2) / 5 */ - channel_generate_precalc(channels, value, 115338, 115338 * (5 - 1), B, S, bmax, smax); - } else if (channels == 8 && value && value % 119121 == 0) { /* 119121 == (7742862 + 3) / 65 */ - channel_generate_precalc(channels, value, 119121, 119121 * (65 - 1), B, S, bmax, smax); - } -#endif - if (value == target_value) return; - value++; -nb6: if (++B[6] <= bmax[6]) goto lb6; - if (++S[6] <= smax[6]) goto ls6; -nb5: if (++B[5] <= bmax[5]) goto lb5; - if (++S[5] <= smax[5]) goto ls5; -nb4: if (++B[4] <= bmax[4]) goto lb4; - if (++S[4] <= smax[4]) goto ls4; -nb3: if (++B[3] <= bmax[3]) goto lb3; - if (++S[3] <= smax[3]) goto ls3; -nb2: if (++B[2] <= bmax[2]) goto lb2; - if (++S[2] <= smax[2]) goto ls2; -nb1: if (++B[1] <= bmax[1]) goto lb1; - if (++S[1] <= smax[1]) goto ls1; -nb0: if (++B[0] <= bmax[0]) goto lb0; - if (++S[0] <= smax[0]) goto ls0; + for (s = (i < Chan + 2) ? 1 : MaxS; s <= MaxS; s++) { + S[i] = s; + NextB(Chan, i, MaxB, MaxS + 1 - s); + } } /* Channel Code - According to ANSI/AIM BC12-1998 */ -INTERNAL int channel_code(struct zint_symbol *symbol, unsigned char source[], int length) { - int S[8] = {0}, B[8] = {0}; - long target_value = 0; - char pattern[30]; +int channel_code(struct zint_symbol *symbol, unsigned char source[], int length) { int channels, i; - int error_number, range = 0, zeroes; + int error_number = 0, range = 0, zeroes; char hrt[9]; + target_value = 0; + if (length > 7) { strcpy(symbol->errtxt, "333: Input too long"); return ZINT_ERROR_TOO_LONG; @@ -627,30 +529,18 @@ INTERNAL int channel_code(struct zint_symbol *symbol, unsigned char source[], in } else { channels = symbol->option_2; } - - for (i = 0; i < length; i++) { - target_value *= 10; - target_value += ctoi((char) source[i]); - } - if (channels == 0) { channels = length + 1; - if (target_value > 576688 && channels < 8) { - channels = 8; - } else if (target_value > 44072 && channels < 7) { - channels = 7; - } else if (target_value > 3493 && channels < 6) { - channels = 6; - } else if (target_value > 292 && channels < 5) { - channels = 5; - } else if (target_value > 26 && channels < 4) { - channels = 4; - } } if (channels == 2) { channels = 3; } + for (i = 0; i < length; i++) { + target_value *= 10; + target_value += ctoi((char) source[i]); + } + switch (channels) { case 3: if (target_value > 26) { range = 1; @@ -682,35 +572,35 @@ INTERNAL int channel_code(struct zint_symbol *symbol, unsigned char source[], in return ZINT_ERROR_INVALID_DATA; } - CHNCHR(channels, target_value, B, S); - - strcpy(pattern, "111111111"); /* Finder pattern */ - for (i = 8 - channels; i < 8; i++) { - char part[3]; - part[0] = itoc(S[i]); - part[1] = itoc(B[i]); - part[2] = '\0'; - strcat(pattern, part); + for (i = 0; i < 11; i++) { + B[i] = 0; + S[i] = 0; } + B[0] = S[1] = B[1] = S[2] = B[2] = 1; + value = 0; + NextS(channels, 3, channels, channels); + zeroes = channels - 1 - length; if (zeroes < 0) { zeroes = 0; } memset(hrt, '0', zeroes); - ustrcpy(hrt + zeroes, source); - ustrcpy(symbol->text, hrt); + strcpy(hrt + zeroes, (char *) source); + ustrcpy(symbol->text, (unsigned char *) hrt); expand(symbol, pattern); return error_number; } -/* Vehicle Identification Number (VIN) */ -INTERNAL int vin(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length) { +/* Vehicle Identification Number (VIN) */ +int vin(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length) { + /* This code verifies the check digit present in North American VIN codes */ - + + int zeros; char local_source[18]; char dest[200]; char input_check; @@ -720,80 +610,86 @@ INTERNAL int vin(struct zint_symbol *symbol, const unsigned char source[], const int sum; int i; int length = (int) in_length; - + // Check length - if (length != 17) { - strcpy(symbol->errtxt, "336: Input wrong length, 17 characters required"); + if (length > 17) { + strcpy(symbol->errtxt, "336: Input too long"); return ZINT_ERROR_TOO_LONG; } - + + // Pad with zeros + zeros = 17 - length; + + for (i = 0; i < 17; i++) { + local_source[i] = '0'; + } + local_source[17] = '\0'; + + for (i = 0; i < length; i++) { + local_source[zeros + i] = source[i]; + } + + to_upper((unsigned char *) local_source); + // Check input characters, I, O and Q are not allowed - if (is_sane(ARSENIC, source, length) == ZINT_ERROR_INVALID_DATA) { + if (is_sane(ARSENIC, (unsigned char *) local_source, length) == ZINT_ERROR_INVALID_DATA) { strcpy(symbol->errtxt, "337: Invalid characters in input data"); return ZINT_ERROR_INVALID_DATA; } - - ustrcpy(local_source, source); - - to_upper((unsigned char *) local_source); - - - // Check digit only valid for North America - if (local_source[0] >= '1' && local_source[0] <= '5') { - input_check = local_source[8]; - - for (i = 0; i < 17; i++) { - if ((local_source[i] >= '0') && (local_source[i] <= '9')) { - value[i] = local_source[i] - '0'; - } else if ((local_source[i] >= 'A') && (local_source[i] <= 'I')) { - value[i] = (local_source[i] - 'A') + 1; - } else if ((local_source[i] >= 'J') && (local_source[i] <= 'R')) { - value[i] = (local_source[i] - 'J') + 1; - } else if ((local_source[i] >= 'S') && (local_source[i] <= 'Z')) { - value[i] = (local_source[i] - 'S') + 2; - } - } - - sum = 0; - for (i = 0; i < 17; i++) { - sum += value[i] * weight[i]; + + input_check = local_source[8]; + + for (i = 0; i < 17; i++) { + if ((local_source[i] >= '0') && (local_source[i] <= '9')) { + value[i] = local_source[i] - '0'; } - - output_check = '0' + (sum % 11); - - if (output_check == ':') { - // Check digit was 10 - output_check = 'X'; + if ((local_source[i] >= 'A') && (local_source[i] <= 'I')) { + value[i] = (local_source[i] - 'A') + 1; } - - if (symbol->debug & ZINT_DEBUG_PRINT) { - printf("Producing VIN code: %s\n", local_source); - printf("Input check was %c, calculated check is %c\n", input_check, output_check); + if ((local_source[i] >= 'J') && (local_source[i] <= 'R')) { + value[i] = (local_source[i] - 'J') + 1; } - - if (input_check != output_check) { - strcpy(symbol->errtxt, "338: Invalid check digit in input data"); - return ZINT_ERROR_INVALID_DATA; + if ((local_source[i] >= 'S') && (local_source[i] <= 'Z')) { + value[i] = (local_source[i] - 'S') + 2; } } - + + sum = 0; + for (i = 0; i < 17; i++) { + sum += value[i] * weight[i]; + } + + output_check = '0' + (sum % 11); + + if (output_check == ':') { + // Check digit was 10 + output_check = 'X'; + } + + if (symbol->debug) { + printf("Producing VIN code: %s\n", local_source); + printf("Input check was %c, calculated check is %c\n", input_check, output_check); + } + + if (input_check != output_check) { + strcpy(symbol->errtxt, "338: Invalid check digit in input data"); + return ZINT_ERROR_INVALID_DATA; + } + /* Start character */ strcpy(dest, "1211212111"); - - /* Import character 'I' prefix? */ - if (symbol->option_2 & 1) { - strcat(dest, "1121122111"); - } - + // Copy glyphs to symbol for (i = 0; i < 17; i++) { lookup(SILVER, C39Table, local_source[i], dest); } - + + /* Stop character */ strcat(dest, "121121211"); - - ustrcpy(symbol->text, local_source); + + ustrcpy(symbol->text, (unsigned char *) local_source); expand(symbol, dest); - + return 0; } + diff --git a/backend/code1.c b/backend/code1.c index 8ba456b..62b09a6 100644 --- a/backend/code1.c +++ b/backend/code1.c @@ -2,7 +2,7 @@ /* libzint - the open source barcode library - Copyright (C) 2009-2020 Robin Stuart + Copyright (C) 2009-2017 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -29,16 +29,16 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ #include "common.h" #include "code1.h" #include "reedsol.h" #include "large.h" #include +#include #include -static void horiz(struct zint_symbol *symbol, int row_no, int full) { +void horiz(struct zint_symbol *symbol, int row_no, int full) { int i; if (full) { @@ -52,7 +52,7 @@ static void horiz(struct zint_symbol *symbol, int row_no, int full) { } } -static void central_finder(struct zint_symbol *symbol, int start_row, int row_count, int full_rows) { +void central_finder(struct zint_symbol *symbol, int start_row, int row_count, int full_rows) { int i; for (i = 0; i < row_count; i++) { @@ -68,7 +68,7 @@ static void central_finder(struct zint_symbol *symbol, int start_row, int row_co } } -static void vert(struct zint_symbol *symbol, int column, int height, int top) { +void vert(struct zint_symbol *symbol, int column, int height, int top) { int i; if (top) { @@ -82,7 +82,7 @@ static void vert(struct zint_symbol *symbol, int column, int height, int top) { } } -static void spigot(struct zint_symbol *symbol, int row_no) { +void spigot(struct zint_symbol *symbol, int row_no) { int i; for (i = symbol->width - 1; i > 0; i--) { @@ -92,7 +92,7 @@ static void spigot(struct zint_symbol *symbol, int row_no) { } } -static int isedi(unsigned char input) { +int isedi(unsigned char input) { int result = 0; if (input == 13) { @@ -117,19 +117,15 @@ static int isedi(unsigned char input) { return result; } -static int dq4bi(unsigned char source[], int sourcelen, int position) { +int dq4bi(unsigned char source[], int sourcelen, int position) { int i; - for (i = 0; ((position + i) < sourcelen) && isedi(source[position + i]); i++); + for (i = position; isedi(source[position + i]) && ((position + i) < sourcelen); i++); if ((position + i) == sourcelen) { /* Reached end of input */ return 0; } - if (i == 0) { - /* Not EDI */ - return 0; - } if (source[position + i - 1] == 13) { return 1; @@ -323,6 +319,7 @@ static int c1_look_ahead_test(unsigned char source[], int sourcelen, int positio if (c40_count < edi_count) { best_scheme = C1_C40; } else { + done = 0; if (c40_count == edi_count) { if (dq4bi(source, sourcelen, position)) { best_scheme = C1_EDI; @@ -352,7 +349,7 @@ static int c1_look_ahead_test(unsigned char source[], int sourcelen, int positio return best_scheme; } -static int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigned int target[], int length) { +int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigned int target[], int length) { int current_mode, next_mode; int sp, tp, gs1, i, j, p, latch; int c40_buffer[6], c40_p; @@ -363,6 +360,7 @@ static int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigne sp = 0; tp = 0; + latch = 0; memset(c40_buffer, 0, sizeof(*c40_buffer)); c40_p = 0; memset(text_buffer, 0, sizeof(*text_buffer)); @@ -371,7 +369,7 @@ static int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigne edi_p = 0; strcpy(decimal_binary, ""); - if ((symbol->input_mode & 0x07) == GS1_MODE) { + if (symbol->input_mode == GS1_MODE) { gs1 = 1; } else { gs1 = 0; @@ -443,7 +441,7 @@ static int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigne if (j == 13) { latch = 0; for (i = sp + 13; i < length; i++) { - if (!((source[i] >= '0') && (source[i] <= '9'))) { + if (!((source[sp + i] >= '0') && (source[sp + i] <= '9'))) { latch = 1; } } @@ -456,7 +454,7 @@ static int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigne } if (next_mode == C1_ASCII) { /* Step B3 */ - if (istwodigits(source, length, sp)) { + if (istwodigits(source, sp) && ((sp + 1) != length)) { target[tp] = (10 * ctoi(source[sp])) + ctoi(source[sp + 1]) + 130; tp++; sp += 2; @@ -492,7 +490,7 @@ static int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigne if (j == 7) { latch = 0; for (i = sp + 7; i < length; i++) { - if (!((source[i] >= '0') && (source[i] <= '9'))) { + if (!((source[sp + i] >= '0') && (source[sp + i] <= '9'))) { latch = 1; } } @@ -1173,7 +1171,7 @@ static int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigne return tp; } -static void block_copy(struct zint_symbol *symbol, char grid[][120], int start_row, int start_col, int height, int width, int row_offset, int col_offset) { +void block_copy(struct zint_symbol *symbol, char grid[][120], int start_row, int start_col, int height, int width, int row_offset, int col_offset) { int i, j; for (i = start_row; i < (start_row + height); i++) { @@ -1185,7 +1183,7 @@ static void block_copy(struct zint_symbol *symbol, char grid[][120], int start_r } } -INTERNAL int code_one(struct zint_symbol *symbol, unsigned char source[], int length) { +int code_one(struct zint_symbol *symbol, unsigned char source[], int length) { int size = 1, i, j; char datagrid[136][120]; @@ -1200,7 +1198,7 @@ INTERNAL int code_one(struct zint_symbol *symbol, unsigned char source[], int le if (symbol->option_2 == 9) { /* Version S */ int codewords; - large_int elreg; + short int elreg[112]; unsigned int data[15], ecc[15]; int stream[30]; int block_width; @@ -1230,14 +1228,20 @@ INTERNAL int code_one(struct zint_symbol *symbol, unsigned char source[], int le block_width = 2; } - large_load_str_u64(&elreg, source, length); + binary_load(elreg, (char *) source, length); for (i = 0; i < 15; i++) { data[i] = 0; ecc[i] = 0; } - large_uint_array(&elreg, data, codewords, 5 /*bits*/); + for (i = 0; i < codewords; i++) { + data[codewords - i - 1] += 1 * elreg[(i * 5)]; + data[codewords - i - 1] += 2 * elreg[(i * 5) + 1]; + data[codewords - i - 1] += 4 * elreg[(i * 5) + 2]; + data[codewords - i - 1] += 8 * elreg[(i * 5) + 3]; + data[codewords - i - 1] += 16 * elreg[(i * 5) + 4]; + } rs_init_gf(0x25); rs_init_code(codewords, 1); @@ -1299,17 +1303,14 @@ INTERNAL int code_one(struct zint_symbol *symbol, unsigned char source[], int le if (symbol->option_2 == 10) { /* Version T */ - unsigned int data[80] = {0}; /* Allow for doubled digits */ - unsigned int ecc[22]; - unsigned int stream[60]; + unsigned int data[40], ecc[25]; + unsigned int stream[65]; int data_length; int data_cw, ecc_cw, block_width; - if (length > 80) { - strcpy(symbol->errtxt, "519: Input data too long"); - return ZINT_ERROR_TOO_LONG; + for (i = 0; i < 40; i++) { + data[i] = 0; } - data_length = c1_encode(symbol, source, data, length); if (data_length == 0) { @@ -1768,3 +1769,5 @@ INTERNAL int code_one(struct zint_symbol *symbol, unsigned char source[], int le return 0; } + + diff --git a/backend/code128.c b/backend/code128.c index b69613a..e9279cb 100644 --- a/backend/code128.c +++ b/backend/code128.c @@ -2,7 +2,7 @@ /* libzint - the open source barcode library - Copyright (C) 2008-2020 Robin Stuart + Copyright (C) 2008-2019 Robin Stuart Bugfixes thanks to Christian Sakowski and BogDan Vatra Redistribution and use in source and binary forms, with or without @@ -34,14 +34,28 @@ #include #include +#include #ifdef _MSC_VER #include #endif -#include #include "common.h" -#include "code128.h" #include "gs1.h" +#define TRUE 1 +#define FALSE 0 +#define SHIFTA 90 +#define LATCHA 91 +#define SHIFTB 92 +#define LATCHB 93 +#define SHIFTC 94 +#define LATCHC 95 +#define AORB 96 +#define ABORC 97 + +#define DPDSET "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ*" + +static int list[2][170]; + /* Code 128 tables checked against ISO/IEC 15417:2007 */ static const char *C128Table[107] = { @@ -62,8 +76,9 @@ static const char *C128Table[107] = { }; /* Determine appropriate mode for a given character */ -INTERNAL int parunmodd(const unsigned char llyth) { +int parunmodd(const unsigned char llyth) { int modd; + modd = 0; if (llyth <= 31) { modd = SHIFTA; @@ -87,7 +102,7 @@ INTERNAL int parunmodd(const unsigned char llyth) { /** * bring together same type blocks */ -static void grwp(int list[2][C128_MAX], int *indexliste) { +void grwp(int *indexliste) { /* bring together same type blocks */ if (*(indexliste) > 1) { @@ -99,7 +114,7 @@ static void grwp(int list[2][C128_MAX], int *indexliste) { list[0][i - 1] = list[0][i - 1] + list[0][i]; j = i + 1; - /* decrease the list */ + /* decreace the list */ while (j < *(indexliste)) { list[0][j - 1] = list[0][j]; list[1][j - 1] = list[1][j]; @@ -116,11 +131,11 @@ static void grwp(int list[2][C128_MAX], int *indexliste) { /** * Implements rules from ISO 15417 Annex E */ -INTERNAL void dxsmooth(int list[2][C128_MAX], int *indexliste) { +void dxsmooth(int *indexliste) { int i, last, next; for (i = 0; i < *(indexliste); i++) { - int current = list[1][i]; /* Either ABORC, AORB, SHIFTA or SHIFTB */ + int current = list[1][i]; int length = list[0][i]; if (i != 0) { last = list[1][i - 1]; @@ -134,84 +149,99 @@ INTERNAL void dxsmooth(int list[2][C128_MAX], int *indexliste) { } if (i == 0) { /* first block */ + if ((*(indexliste) == 1) && ((length == 2) && (current == ABORC))) { + /* Rule 1a */ + list[1][i] = LATCHC; + } if (current == ABORC) { - if ((*(indexliste) == 1) && (length == 2)) { - /* Rule 1a */ - list[1][i] = LATCHC; - current = LATCHC; - } else if (length >= 4) { + if (length >= 4) { /* Rule 1b */ list[1][i] = LATCHC; - current = LATCHC; } else { - current = AORB; /* Determine below */ + list[1][i] = AORB; + current = AORB; } } - if (current == AORB) { - if (next == SHIFTA) { - /* Rule 1c */ - list[1][i] = LATCHA; - } else { - /* Rule 1d */ - list[1][i] = LATCHB; - } - } else if (current == SHIFTA) { + if (current == SHIFTA) { + /* Rule 1c */ + list[1][i] = LATCHA; + } + if ((current == AORB) && (next == SHIFTA)) { /* Rule 1c */ list[1][i] = LATCHA; - } else if (current == SHIFTB) { /* Unless LATCHC set above, can only be SHIFTB */ + current = LATCHA; + } + if (current == AORB) { /* Rule 1d */ list[1][i] = LATCHB; } } else { + if ((current == ABORC) && (length >= 4)) { + /* Rule 3 */ + list[1][i] = LATCHC; + current = LATCHC; + } if (current == ABORC) { - if (length >= 4) { - /* Rule 3 */ - list[1][i] = LATCHC; - current = LATCHC; - } else { - current = AORB; /* Determine below */ - } + list[1][i] = AORB; + current = AORB; + } + if ((current == AORB) && (last == LATCHA)) { + list[1][i] = LATCHA; + current = LATCHA; + } + if ((current == AORB) && (last == LATCHB)) { + list[1][i] = LATCHB; + current = LATCHB; + } + if ((current == AORB) && (next == SHIFTA)) { + list[1][i] = LATCHA; + current = LATCHA; + } + if ((current == AORB) && (next == SHIFTB)) { + list[1][i] = LATCHB; + current = LATCHB; } if (current == AORB) { - if (last == LATCHA || last == SHIFTB) { /* Maintain state */ - list[1][i] = LATCHA; - } else if (last == LATCHB || last == SHIFTA) { /* Maintain state */ - list[1][i] = LATCHB; - } else if (next == SHIFTA) { - list[1][i] = LATCHA; - } else { - list[1][i] = LATCHB; - } - } else if (current == SHIFTA) { - if (length > 1) { - /* Rule 4 */ - list[1][i] = LATCHA; - } else if (last == LATCHA || last == SHIFTB) { /* Maintain state */ - list[1][i] = LATCHA; - } else if (last == LATCHC) { - list[1][i] = LATCHA; - } - } else if (current == SHIFTB) { /* Unless LATCHC set above, can only be SHIFTB */ - if (length > 1) { - /* Rule 5 */ - list[1][i] = LATCHB; - } else if (last == LATCHB || last == SHIFTA) { /* Maintain state */ - list[1][i] = LATCHB; - } else if (last == LATCHC) { - list[1][i] = LATCHB; - } + list[1][i] = LATCHB; + current = LATCHB; + } + if ((current == SHIFTA) && (length > 1)) { + /* Rule 4 */ + list[1][i] = LATCHA; + current = LATCHA; } - } /* Rule 2 is implemented elsewhere, Rule 6 is implied */ + if ((current == SHIFTB) && (length > 1)) { + /* Rule 5 */ + list[1][i] = LATCHB; + current = LATCHB; + } + if ((current == SHIFTA) && (last == LATCHA)) { + list[1][i] = LATCHA; + current = LATCHA; + } + if ((current == SHIFTB) && (last == LATCHB)) { + list[1][i] = LATCHB; + current = LATCHB; + } + if ((current == SHIFTA) && (last == LATCHC)) { + list[1][i] = LATCHA; + current = LATCHA; + } + if ((current == SHIFTB) && (last == LATCHC)) { + list[1][i] = LATCHB; + current = LATCHB; + } + } /* Rule 2 is implimented elsewhere, Rule 6 is implied */ } + grwp(indexliste); - grwp(list, indexliste); } /** * Translate Code 128 Set A characters into barcodes. - * This set handles all control characters NUL to US. + * This set handles all control characters NULL to US. */ -static void c128_set_a(unsigned char source, char dest[], int values[], int *bar_chars) { +void c128_set_a(unsigned char source, char dest[], int values[], int *bar_chars) { if (source > 127) { if (source < 160) { @@ -238,7 +268,7 @@ static void c128_set_a(unsigned char source, char dest[], int values[], int *bar * This set handles all characters which are not part of long numbers and not * control characters. */ -static void c128_set_b(unsigned char source, char dest[], int values[], int *bar_chars) { +void c128_set_b(unsigned char source, char dest[], int values[], int *bar_chars) { if (source > 127) { strcat(dest, C128Table[source - 32 - 128]); values[(*bar_chars)] = source - 32 - 128; @@ -252,7 +282,7 @@ static void c128_set_b(unsigned char source, char dest[], int values[], int *bar /* Translate Code 128 Set C characters into barcodes * This set handles numbers in a compressed form */ -static void c128_set_c(unsigned char source_a, unsigned char source_b, char dest[], int values[], int *bar_chars) { +void c128_set_c(unsigned char source_a, unsigned char source_b, char dest[], int values[], int *bar_chars) { int weight; weight = (10 * ctoi(source_a)) + ctoi(source_b); @@ -261,29 +291,26 @@ static void c128_set_c(unsigned char source_a, unsigned char source_b, char dest (*bar_chars)++; } -/* Handle Code 128, 128B and HIBC 128 */ -INTERNAL int code_128(struct zint_symbol *symbol, const unsigned char source[], const size_t length) { - int i, j, k, values[C128_MAX] = {0}, bar_characters, read, total_sum; +/* Handle Code 128 and NVE-18 */ +int code_128(struct zint_symbol *symbol, unsigned char source[], const size_t length) { + int i, j, k, values[170] = {0}, bar_characters, read, total_sum; int error_number, indexchaine, indexliste, f_state; - int sourcelen; - int list[2][C128_MAX] = {{0}}; - char set[C128_MAX] = {0}, fset[C128_MAX], mode, last_set, current_set = ' '; + size_t sourcelen; + char set[170] = {' '}, fset[170] = {' '}, mode, last_set, current_set = ' '; float glyph_count; char dest[1000]; - /* Suppresses clang-analyzer-core.UndefinedBinaryOperatorResult warning on fset which is fully set */ - assert(length > 0); - error_number = 0; strcpy(dest, ""); sourcelen = length; + j = 0; bar_characters = 0; f_state = 0; - if (sourcelen > C128_MAX) { - /* This only blocks ridiculously long input - the actual length of the + if (sourcelen > 160) { + /* This only blocks rediculously long input - the actual length of the resulting barcode depends on the type of data, so this is trapped later */ strcpy(symbol->errtxt, "340: Input too long"); return ZINT_ERROR_TOO_LONG; @@ -291,8 +318,10 @@ INTERNAL int code_128(struct zint_symbol *symbol, const unsigned char source[], /* Detect extended ASCII characters */ for (i = 0; i < sourcelen; i++) { - fset[i] = source[i] >= 128 ? 'f' : ' '; + if (source[i] >= 128) + fset[i] = 'f'; } + fset[i] = '\0'; /* Decide when to latch to extended mode - Annex E note 3 */ j = 0; @@ -320,15 +349,10 @@ INTERNAL int code_128(struct zint_symbol *symbol, const unsigned char source[], for (i = 1; i < sourcelen; i++) { if ((fset[i - 1] == 'F') && (fset[i] == ' ')) { /* Detected a change from 8859-1 to 646 - count how long for */ - for (j = 0; ((i + j) < sourcelen) && (fset[i + j] == ' '); j++); - /* Count how many 8859-1 beyond */ - k = 0; - if (i + j < sourcelen) { - for (k = 1; ((i + j + k) < sourcelen) && (fset[i + j + k] != ' '); k++); - } - if (j < 3 || (j < 5 && k > 2)) { + for (j = 0; (fset[i + j] == ' ') && ((i + j) < sourcelen); j++); + if ((j < 5) || ((j < 3) && ((i + j) == (sourcelen - 1)))) { + /* Uses the same figures recommended by Annex E note 3 */ /* Change to shifting back rather than latching back */ - /* Inverts the same figures recommended by Annex E note 3 */ for (k = 0; k < j; k++) { fset[i + k] = 'n'; } @@ -345,14 +369,15 @@ INTERNAL int code_128(struct zint_symbol *symbol, const unsigned char source[], mode = AORB; } + for (i = 0; i < 170; i++) { + list[0][i] = 0; + } + do { list[1][indexliste] = mode; while ((list[1][indexliste] == mode) && (indexchaine < sourcelen)) { list[0][indexliste]++; indexchaine++; - if (indexchaine == sourcelen) { - break; - } mode = parunmodd(source[indexchaine]); if ((symbol->symbology == BARCODE_CODE128B) && (mode == ABORC)) { mode = AORB; @@ -361,7 +386,7 @@ INTERNAL int code_128(struct zint_symbol *symbol, const unsigned char source[], indexliste++; } while (indexchaine < sourcelen); - dxsmooth(list, &indexliste); + dxsmooth(&indexliste); /* Resolve odd length LATCHC blocks */ if ((list[1][0] == LATCHC) && (list[0][0] & 1)) { @@ -405,15 +430,26 @@ INTERNAL int code_128(struct zint_symbol *symbol, const unsigned char source[], } } - if (symbol->debug & ZINT_DEBUG_PRINT) { - printf("Data: %.*s (%d)\n", sourcelen, source, sourcelen); - printf(" Set: %.*s\n", sourcelen, set); - printf("FSet: %.*s\n", sourcelen, fset); + /* Adjust for strings which start with shift characters - make them latch instead */ + if (set[0] == 'a') { + i = 0; + do { + set[i] = 'A'; + i++; + } while (set[i] == 'a'); + } + + if (set[0] == 'b') { + i = 0; + do { + set[i] = 'B'; + i++; + } while (set[i] == 'b'); } /* Now we can calculate how long the barcode is going to be - and stop it from being too long */ - last_set = set[0]; + last_set = ' '; glyph_count = 0.0; for (i = 0; i < sourcelen; i++) { if ((set[i] == 'a') || (set[i] == 'b')) { @@ -504,6 +540,7 @@ INTERNAL int code_128(struct zint_symbol *symbol, const unsigned char source[], } } bar_characters++; + last_set = set[0]; if (fset[0] == 'F') { switch (current_set) { @@ -629,61 +666,48 @@ INTERNAL int code_128(struct zint_symbol *symbol, const unsigned char source[], } while (read < sourcelen); /* check digit calculation */ - total_sum = values[0] % 103; /* Mod as we go along to avoid overflow */ + total_sum = 0; - for (i = 1; i < bar_characters; i++) { - total_sum = (total_sum + values[i] * i) % 103; + for (i = 0; i < bar_characters; i++) { + if (i > 0) { + values[i] *= i; + } + total_sum += values[i]; } - strcat(dest, C128Table[total_sum]); - values[bar_characters] = total_sum; - bar_characters++; + strcat(dest, C128Table[total_sum % 103]); /* Stop character */ strcat(dest, C128Table[106]); - values[bar_characters] = 106; - bar_characters++; - - if (symbol->debug & ZINT_DEBUG_PRINT) { - printf("Codewords:"); - for (i = 0; i < bar_characters; i++) { - printf(" %d", values[i]); - } - printf("\n"); - } -#ifdef ZINT_TEST - if (symbol->debug & ZINT_DEBUG_TEST) { - debug_test_codeword_dump_int(symbol, values, bar_characters); - } -#endif - expand(symbol, dest); return error_number; } /* Handle EAN-128 (Now known as GS1-128) */ -INTERNAL int ean_128(struct zint_symbol *symbol, unsigned char source[], const size_t length) { - int i, j, values[C128_MAX] = {0}, bar_characters, read, total_sum; +int ean_128(struct zint_symbol *symbol, unsigned char source[], const size_t length) { + int i, j, values[170], bar_characters, read, total_sum; int error_number, indexchaine, indexliste; - int list[2][C128_MAX] = {{0}}; - char set[C128_MAX] = {0}, mode, last_set; + char set[170], mode, last_set; float glyph_count; char dest[1000]; int separator_row, linkage_flag, c_count; - int reduced_length; #ifndef _MSC_VER char reduced[length + 1]; #else char* reduced = (char*) _alloca(length + 1); #endif - + error_number = 0; strcpy(dest, ""); linkage_flag = 0; + j = 0; bar_characters = 0; separator_row = 0; - if (length > C128_MAX) { - /* This only blocks ridiculously long input - the actual length of the + memset(values, 0, sizeof (values)); + memset(set, ' ', sizeof (set)); + + if (length > 160) { + /* This only blocks rediculously long input - the actual length of the resulting barcode depends on the type of data, so this is trapped later */ strcpy(symbol->errtxt, "342: Input too long"); return ZINT_ERROR_TOO_LONG; @@ -700,7 +724,6 @@ INTERNAL int ean_128(struct zint_symbol *symbol, unsigned char source[], const s if (error_number != 0) { return error_number; } - reduced_length = strlen(reduced); /* Decide on mode using same system as PDF417 and rules of ISO 15417 Annex E */ indexliste = 0; @@ -711,23 +734,24 @@ INTERNAL int ean_128(struct zint_symbol *symbol, unsigned char source[], const s mode = ABORC; } + for (i = 0; i < 170; i++) { + list[0][i] = 0; + } + do { list[1][indexliste] = mode; - while ((list[1][indexliste] == mode) && (indexchaine < reduced_length)) { + while ((list[1][indexliste] == mode) && (indexchaine < (int) strlen(reduced))) { list[0][indexliste]++; indexchaine++; - if (indexchaine == reduced_length) { - break; - } mode = parunmodd(reduced[indexchaine]); if (reduced[indexchaine] == '[') { mode = ABORC; } } indexliste++; - } while (indexchaine < reduced_length); + } while (indexchaine < (int) strlen(reduced)); - dxsmooth(list, &indexliste); + dxsmooth(&indexliste); /* Put set data into set[] */ read = 0; @@ -789,16 +813,11 @@ INTERNAL int ean_128(struct zint_symbol *symbol, unsigned char source[], const s } } - if (symbol->debug & ZINT_DEBUG_PRINT) { - printf("Data: %s (%d)\n", reduced, reduced_length); - printf(" Set: %.*s\n", reduced_length, set); - } - /* Now we can calculate how long the barcode is going to be - and stop it from being too long */ - last_set = set[0]; + last_set = ' '; glyph_count = 0.0; - for (i = 0; i < reduced_length; i++) { + for (i = 0; i < (int) strlen(reduced); i++) { if ((set[i] == 'a') || (set[i] == 'b')) { glyph_count = glyph_count + 1.0; } @@ -892,7 +911,7 @@ INTERNAL int ean_128(struct zint_symbol *symbol, unsigned char source[], const s bar_characters++; read++; } - } while (read < reduced_length); + } while (read < (int) strlen(reduced)); /* "...note that the linkage flag is an extra code set character between the last data character and the Symbol Check Character" (GS1 Specification) */ @@ -903,7 +922,7 @@ INTERNAL int ean_128(struct zint_symbol *symbol, unsigned char source[], const s case 1: case 2: /* CC-A or CC-B 2D component */ - switch (set[reduced_length - 1]) { + switch (set[strlen(reduced) - 1]) { case 'A': linkage_flag = 100; break; case 'B': linkage_flag = 99; @@ -914,7 +933,7 @@ INTERNAL int ean_128(struct zint_symbol *symbol, unsigned char source[], const s break; case 3: /* CC-C 2D component */ - switch (set[reduced_length - 1]) { + switch (set[strlen(reduced) - 1]) { case 'A': linkage_flag = 99; break; case 'B': linkage_flag = 101; @@ -932,33 +951,22 @@ INTERNAL int ean_128(struct zint_symbol *symbol, unsigned char source[], const s } /* check digit calculation */ - total_sum = values[0] % 103; /* Mod as we go along to avoid overflow */ + total_sum = 0; + for (i = 0; i < bar_characters; i++) { + if (i > 0) { + values[i] *= i; - for (i = 1; i < bar_characters; i++) { - total_sum = (total_sum + values[i] * i) % 103; + } + total_sum += values[i]; } - strcat(dest, C128Table[total_sum]); - values[bar_characters] = total_sum; + strcat(dest, C128Table[total_sum % 103]); + values[bar_characters] = total_sum % 103; bar_characters++; /* Stop character */ strcat(dest, C128Table[106]); values[bar_characters] = 106; bar_characters++; - - if (symbol->debug & ZINT_DEBUG_PRINT) { - printf("Codewords:"); - for (i = 0; i < bar_characters; i++) { - printf(" %d", values[i]); - } - printf("\n"); - } -#ifdef ZINT_TEST - if (symbol->debug & ZINT_DEBUG_TEST) { - debug_test_codeword_dump_int(symbol, values, bar_characters); - } -#endif - expand(symbol, dest); /* Add the separator pattern for composite symbols */ @@ -970,7 +978,7 @@ INTERNAL int ean_128(struct zint_symbol *symbol, unsigned char source[], const s } } - for (i = 0; i < (int) length; i++) { + for (i = 0; i < length; i++) { if ((source[i] != '[') && (source[i] != ']')) { symbol->text[i] = source[i]; } @@ -986,7 +994,7 @@ INTERNAL int ean_128(struct zint_symbol *symbol, unsigned char source[], const s } /* Add check digit if encoding an NVE18 symbol */ -INTERNAL int nve_18(struct zint_symbol *symbol, unsigned char source[], int length) { +int nve_18(struct zint_symbol *symbol, unsigned char source[], int length) { int error_number, zeroes, i, nve_check, total_sum, sourcelen; unsigned char ean128_equiv[25]; @@ -1029,7 +1037,7 @@ INTERNAL int nve_18(struct zint_symbol *symbol, unsigned char source[], int leng } /* EAN-14 - A version of EAN-128 */ -INTERNAL int ean_14(struct zint_symbol *symbol, unsigned char source[], int length) { +int ean_14(struct zint_symbol *symbol, unsigned char source[], int length) { int i, count, check_digit; int error_number, zeroes; unsigned char ean128_equiv[20]; @@ -1069,3 +1077,5 @@ INTERNAL int ean_14(struct zint_symbol *symbol, unsigned char source[], int leng return error_number; } + + diff --git a/backend/code128.h b/backend/code128.h deleted file mode 100644 index 0b1f042..0000000 --- a/backend/code128.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - libzint - the open source barcode library - Copyright (C) 2020 Robin Stuart - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - 3. Neither the name of the project nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - SUCH DAMAGE. - */ -/* vim: set ts=4 sw=4 et : */ - -#ifndef CODE128_H -#define CODE128_H - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -#define C128_MAX 160 - -#define SHIFTA 90 -#define LATCHA 91 -#define SHIFTB 92 -#define LATCHB 93 -#define SHIFTC 94 -#define LATCHC 95 -#define AORB 96 -#define ABORC 97 - -INTERNAL int parunmodd(const unsigned char llyth); -INTERNAL void dxsmooth(int list[2][C128_MAX], int *indexliste); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* CODE128_H */ diff --git a/backend/code16k.c b/backend/code16k.c index c7394c5..86fd6c2 100644 --- a/backend/code16k.c +++ b/backend/code16k.c @@ -2,7 +2,7 @@ /* libzint - the open source barcode library - Copyright (C) 2008 - 2020 Robin Stuart + Copyright (C) 2008-2017 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -29,7 +29,6 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ /* Updated to comply with BS EN 12323:2005 */ @@ -37,9 +36,25 @@ #include #include -#include +#include #include "common.h" -#include "code128.h" + +#define TRUE 1 +#define FALSE 0 +#define SHIFTA 90 +#define LATCHA 91 +#define SHIFTB 92 +#define LATCHB 93 +#define SHIFTC 94 +#define LATCHC 95 +#define AORB 96 +#define ABORC 97 +#define CANDB 98 +#define CANDBB 99 + +extern int parunmodd(const unsigned char llyth); + +static int list[2][170]; static const char *C16KTable[107] = { /* EN 12323 Table 1 - "Code 16K" character encodations */ @@ -73,7 +88,141 @@ static const int C16KStopValues[16] = { 0, 1, 2, 3, 4, 5, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3 }; -static void c16k_set_a(const unsigned char source, int values[], int *bar_chars) { +static void grwp16(unsigned int *indexliste) { + + /* bring together same type blocks */ + if (*(indexliste) > 1) { + int i = 1; + while(i < (int)*(indexliste)) { + if (list[1][i - 1] == list[1][i]) { + int j; + /* bring together */ + list[0][i - 1] = list[0][i - 1] + list[0][i]; + j = i + 1; + + /* decreace the list */ + while(j < (int)*(indexliste)) { + list[0][j - 1] = list[0][j]; + list[1][j - 1] = list[1][j]; + j++; + } + *(indexliste) = *(indexliste) - 1; + i--; + } + i++; + } + } +} + +/* Implements rules from ISO 15417 Annex E */ +static void dxsmooth16(unsigned int *indexliste) { + int i, last, next; + + for(i = 0; i < (int)*(indexliste); i++) { + int current = list[1][i]; + int length = list[0][i]; + if (i != 0) { + last = list[1][i - 1]; + } else { + last = FALSE; + } + if (i != *(indexliste) - 1) { + next = list[1][i + 1]; + } else { + next = FALSE; + } + + if (i == 0) { + /* first block */ + if ((*(indexliste) == 1) && ((length == 2) && (current == ABORC))) { + /* Rule 1a */ + list[1][i] = LATCHC; + } + if (current == ABORC) { + if (length >= 4) { + /* Rule 1b */ + list[1][i] = LATCHC; + } else { + list[1][i] = AORB; + current = AORB; + } + } + if (current == SHIFTA) { + /* Rule 1c */ + list[1][i] = LATCHA; + } + if ((current == AORB) && (next == SHIFTA)) { + /* Rule 1c */ + list[1][i] = LATCHA; + current = LATCHA; + } + if (current == AORB) { + /* Rule 1d */ + list[1][i] = LATCHB; + } + } else { + if ((current == ABORC) && (length >= 4)) { + /* Rule 3 */ + list[1][i] = LATCHC; + current = LATCHC; + } + if (current == ABORC) { + list[1][i] = AORB; + current = AORB; + } + if ((current == AORB) && (last == LATCHA)) { + list[1][i] = LATCHA; + current = LATCHA; + } + if ((current == AORB) && (last == LATCHB)) { + list[1][i] = LATCHB; + current = LATCHB; + } + if ((current == AORB) && (next == SHIFTA)) { + list[1][i] = LATCHA; + current = LATCHA; + } + if ((current == AORB) && (next == SHIFTB)) { + list[1][i] = LATCHB; + current = LATCHB; + } + if (current == AORB) { + list[1][i] = LATCHB; + current = LATCHB; + } + if ((current == SHIFTA) && (length > 1)) { + /* Rule 4 */ + list[1][i] = LATCHA; + current = LATCHA; + } + if ((current == SHIFTB) && (length > 1)) { + /* Rule 5 */ + list[1][i] = LATCHB; + current = LATCHB; + } + if ((current == SHIFTA) && (last == LATCHA)) { + list[1][i] = LATCHA; + current = LATCHA; + } + if ((current == SHIFTB) && (last == LATCHB)) { + list[1][i] = LATCHB; + current = LATCHB; + } + if ((current == SHIFTA) && (last == LATCHC)) { + list[1][i] = LATCHA; + current = LATCHA; + } + if ((current == SHIFTB) && (last == LATCHC)) { + list[1][i] = LATCHB; + current = LATCHB; + } + } /* Rule 2 is implimented elsewhere, Rule 6 is implied */ + } + grwp16(indexliste); + +} + +static void c16k_set_a(const unsigned char source, unsigned int values[], unsigned int *bar_chars) { if (source > 127) { if (source < 160) { values[(*bar_chars)] = source + 64 - 128; @@ -90,7 +239,7 @@ static void c16k_set_a(const unsigned char source, int values[], int *bar_chars) (*bar_chars)++; } -static void c16k_set_b(const unsigned char source, int values[], int *bar_chars) { +static void c16k_set_b(const unsigned char source, unsigned int values[], unsigned int *bar_chars) { if (source > 127) { values[(*bar_chars)] = source - 32 - 128; } else { @@ -99,7 +248,7 @@ static void c16k_set_b(const unsigned char source, int values[], int *bar_chars) (*bar_chars)++; } -static void c16k_set_c(const unsigned char source_a, unsigned char source_b, int values[], int *bar_chars) { +static void c16k_set_c(const unsigned char source_a, unsigned char source_b, unsigned int values[], unsigned int *bar_chars) { int weight; weight = (10 * ctoi(source_a)) + ctoi(source_b); @@ -107,34 +256,30 @@ static void c16k_set_c(const unsigned char source_a, unsigned char source_b, int (*bar_chars)++; } -INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const size_t length) { +int code16k(struct zint_symbol *symbol, unsigned char source[], const size_t length) { char width_pattern[100]; int current_row, rows_needed, looper, first_check, second_check; - int indexchaine; - int list[2][C128_MAX] = {{0}}; - char set[C128_MAX] = {0}, fset[C128_MAX], mode, last_set, current_set; - int pads_needed, indexliste, i, j, m, read, mx_reader; - int values[C128_MAX] = {0}; - int bar_characters; + int indexchaine, f_state; + char set[160] = {' '}, fset[160] = {' '}, mode, last_set, current_set; + unsigned int pads_needed, indexliste, i, j, k, m, read, mx_reader; + unsigned int values[160] = {0}; + unsigned int bar_characters; float glyph_count; int errornum, first_sum, second_sum; - int input_length; + size_t input_length; int gs1, c_count; - /* Suppresses clang-analyzer-core.UndefinedBinaryOperatorResult warning on fset which is fully set */ - assert(length > 0); - errornum = 0; strcpy(width_pattern, ""); input_length = length; - if ((symbol->input_mode & 0x07) == GS1_MODE) { + if (symbol->input_mode == GS1_MODE) { gs1 = 1; } else { gs1 = 0; } - if (input_length > C128_MAX) { + if (input_length > 157) { strcpy(symbol->errtxt, "420: Input too long"); return ZINT_ERROR_TOO_LONG; } @@ -142,11 +287,43 @@ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const s bar_characters = 0; /* Detect extended ASCII characters */ - for (i = 0; i < input_length; i++) { - fset[i] = source[i] >= 128 ? 'f' : ' '; + for (i = 0; i < (unsigned int) input_length; i++) { + if (source[i] >= 128) { + fset[i] = 'f'; + } } - /* Note to be safe not using extended ASCII latch as not mentioned in BS EN 12323:2005 */ + fset[i] = '\0'; + /* Decide when to latch to extended mode */ + for (i = 0; i < (unsigned int) input_length; i++) { + j = 0; + if (fset[i] == 'f') { + do { + j++; + } while (fset[i + j] == 'f'); + if ((j >= 5) || ((j >= 3) && ((i + j) == (input_length - 1)))) { + for (k = 0; k <= j; k++) { + fset[i + k] = 'F'; + } + } + } + } + + /* Decide if it is worth reverting to 646 encodation for a few characters */ + if (input_length > 1) { + for (i = 1; i < (unsigned int) input_length; i++) { + if ((fset[i - 1] == 'F') && (fset[i] == ' ')) { + /* Detected a change from 8859-1 to 646 - count how long for */ + for (j = 0; (fset[i + j] == ' ') && ((i + j) < (unsigned int) input_length); j++); + if ((j < 5) || ((j < 3) && ((i + j) == (input_length - 1)))) { + /* Change to shifting back rather than latching back */ + for (k = 0; k < j; k++) { + fset[i + k] = 'n'; + } + } + } + } + } /* Detect mode A, B and C characters */ indexliste = 0; indexchaine = 0; @@ -156,14 +333,15 @@ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const s mode = ABORC; } /* FNC1 */ + for (i = 0; i < 160; i++) { + list[0][i] = 0; + } + do { list[1][indexliste] = mode; while ((list[1][indexliste] == mode) && (indexchaine < input_length)) { list[0][indexliste]++; indexchaine++; - if (indexchaine == input_length) { - break; - } mode = parunmodd(source[indexchaine]); if ((gs1) && (source[indexchaine] == '[')) { mode = ABORC; @@ -172,7 +350,7 @@ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const s indexliste++; } while (indexchaine < input_length); - dxsmooth(list, &indexliste); + dxsmooth16(&indexliste); /* Put set data into set[] */ read = 0; @@ -194,6 +372,23 @@ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const s } } + /* Adjust for strings which start with shift characters - make them latch instead */ + if (set[0] == 'a') { + i = 0; + do { + set[i] = 'A'; + i++; + } while (set[i] == 'a'); + } + + if (set[0] == 'b') { + i = 0; + do { + set[i] = 'B'; + i++; + } while (set[i] == 'b'); + } + /* Watch out for odd-length Mode C blocks */ c_count = 0; for (i = 0; i < read; i++) { @@ -234,20 +429,14 @@ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const s } } - if (symbol->debug & ZINT_DEBUG_PRINT) { - printf("Data: %.*s\n", input_length, source); - printf(" Set: %.*s\n", input_length, set); - printf("FSet: %.*s\n", input_length, fset); - } - /* Make sure the data will fit in the symbol */ - last_set = set[0]; + last_set = ' '; glyph_count = 0.0; for (i = 0; i < input_length; i++) { if ((set[i] == 'a') || (set[i] == 'b')) { glyph_count = glyph_count + 1.0; } - if (fset[i] == 'f') { + if ((fset[i] == 'f') || (fset[i] == 'n')) { glyph_count = glyph_count + 1.0; } if (((set[i] == 'A') || (set[i] == 'B')) || (set[i] == 'C')) { @@ -265,6 +454,16 @@ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const s glyph_count = glyph_count - 1.0; } } + if (fset[i] == 'F') { + glyph_count = glyph_count + 2.0; + } + } else { + if ((fset[i] == 'F') && (fset[i - 1] != 'F')) { + glyph_count = glyph_count + 2.0; + } + if ((fset[i] != 'F') && (fset[i - 1] == 'F')) { + glyph_count = glyph_count + 2.0; + } } if ((set[i] == 'C') && (!((gs1) && (source[i] == '[')))) { @@ -344,6 +543,24 @@ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const s } current_set = set[0]; + f_state = 0; + /* f_state remembers if we are in Extended ASCII mode (value 1) or + in ISO/IEC 646 mode (value 0) */ + if (fset[0] == 'F') { + switch (current_set) { + case 'A': + values[bar_characters] = 101; + values[bar_characters + 1] = 101; + break; + case 'B': + values[bar_characters] = 100; + values[bar_characters + 1] = 100; + break; + } + bar_characters += 2; + f_state = 1; + } + read = 0; /* Encode the data */ @@ -376,7 +593,40 @@ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const s } } - if (fset[read] == 'f') { + if (read != 0) { + if ((fset[read] == 'F') && (f_state == 0)) { + /* Latch beginning of extended mode */ + switch (current_set) { + case 'A': + values[bar_characters] = 101; + values[bar_characters + 1] = 101; + break; + case 'B': + values[bar_characters] = 100; + values[bar_characters + 1] = 100; + break; + } + bar_characters += 2; + f_state = 1; + } + if ((fset[read] == ' ') && (f_state == 1)) { + /* Latch end of extended mode */ + switch (current_set) { + case 'A': + values[bar_characters] = 101; + values[bar_characters + 1] = 101; + break; + case 'B': + values[bar_characters] = 100; + values[bar_characters + 1] = 100; + break; + } + bar_characters += 2; + f_state = 0; + } + } + + if ((fset[i] == 'f') || (fset[i] == 'n')) { /* Shift extended mode */ switch (current_set) { case 'A': @@ -389,7 +639,7 @@ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const s bar_characters++; } - if ((set[read] == 'a') || (set[read] == 'b')) { + if ((set[i] == 'a') || (set[i] == 'b')) { /* Insert shift character */ values[bar_characters] = 98; bar_characters++; @@ -416,7 +666,7 @@ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const s bar_characters++; read++; } - } while (read < input_length); + } while (read < ustrlen(source)); pads_needed = 5 - ((bar_characters + 2) % 5); if (pads_needed == 5) { @@ -426,7 +676,7 @@ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const s pads_needed += 8 - (bar_characters + pads_needed); } for (i = 0; i < pads_needed; i++) { - values[bar_characters] = 103; + values[bar_characters] = 106; bar_characters++; } @@ -444,23 +694,9 @@ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const s values[bar_characters + 1] = second_check; bar_characters += 2; - if (symbol->debug & ZINT_DEBUG_PRINT) { - printf("Codewords:"); - for (i = 0; i < bar_characters; i++) { - printf(" %d", values[i]); - } - printf("\n"); - } -#ifdef ZINT_TEST - if (symbol->debug & ZINT_DEBUG_TEST) { - debug_test_codeword_dump_int(symbol, values, bar_characters); /* Missing row start/stop */ - } -#endif - for (current_row = 0; current_row < rows_needed; current_row++) { - int writer; + unsigned int writer; int flip_flop; - int len; strcpy(width_pattern, ""); strcat(width_pattern, C16KStartStop[C16KStartValues[current_row]]); @@ -473,7 +709,7 @@ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const s /* Write the information into the symbol */ writer = 0; flip_flop = 1; - for (mx_reader = 0, len = strlen(width_pattern); mx_reader < len; mx_reader++) { + for (mx_reader = 0; mx_reader < strlen(width_pattern); mx_reader++) { for (looper = 0; looper < ctoi(width_pattern[mx_reader]); looper++) { if (flip_flop == 1) { set_module(symbol, current_row, writer); @@ -493,12 +729,8 @@ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], const s symbol->rows = rows_needed; symbol->width = 70; + return errornum; +} - symbol->output_options |= BARCODE_BIND; - if (symbol->border_width == 0) { /* Allow override if non-zero */ - symbol->border_width = 1; /* BS EN 12323:2005 Section 4.3.7 minimum (note change from previous default 2) */ - } - return errornum; -} diff --git a/backend/code49.c b/backend/code49.c index 3d7aebf..4ffcdb3 100644 --- a/backend/code49.c +++ b/backend/code49.c @@ -2,7 +2,7 @@ /* libzint - the open source barcode library - Copyright (C) 2009 - 2020 Robin Stuart + Copyright (C) 2009-2017 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -29,18 +29,18 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ #include #include +#include #include "common.h" #include "code49.h" -#define INSET "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%!&*" +#define INSET "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%!&*" /* "!" represents Shift 1 and "&" represents Shift 2, "*" represents FNC1 */ -INTERNAL int code_49(struct zint_symbol *symbol, unsigned char source[], const int length) { +int code_49(struct zint_symbol *symbol, unsigned char source[], const int length) { int i, j, rows, M, x_count, y_count, z_count, posn_val, local_value; char intermediate[170] = ""; int codewords[170], codeword_count; @@ -49,13 +49,13 @@ INTERNAL int code_49(struct zint_symbol *symbol, unsigned char source[], const i int pad_count = 0; char pattern[80]; int gs1; - int h, len; + size_t h; if (length > 81) { strcpy(symbol->errtxt, "430: Input too long"); return ZINT_ERROR_TOO_LONG; } - if ((symbol->input_mode & 0x07) == GS1_MODE) { + if (symbol->input_mode == GS1_MODE) { gs1 = 1; strcpy(intermediate, "*"); /* FNC1 */ } else { @@ -298,21 +298,6 @@ INTERNAL int code_49(struct zint_symbol *symbol, unsigned char source[], const i } c_grid[rows - 1][7] = j % 49; - if (symbol->debug & ZINT_DEBUG_PRINT) { - printf("Codewords:\n"); - for (i = 0; i < rows; i++) { - for (j = 0; j < 8; j++) { - printf(" %2d", c_grid[i][j]); - } - printf("\n"); - } - } -#ifdef ZINT_TEST - if (symbol->debug & ZINT_DEBUG_TEST) { - debug_test_codeword_dump_int(symbol, (int *)c_grid, rows * 8); - } -#endif - /* Transfer data to symbol character array (w grid) */ for (i = 0; i < rows; i++) { for (j = 0; j < 4; j++) { @@ -341,7 +326,7 @@ INTERNAL int code_49(struct zint_symbol *symbol, unsigned char source[], const i /* Expand into symbol */ symbol->row_height[i] = 10; - for (j = 0, len = strlen(pattern); j < len; j++) { + for (j = 0; j < strlen(pattern); j++) { if (pattern[j] == '1') { set_module(symbol, i, j); } @@ -350,12 +335,12 @@ INTERNAL int code_49(struct zint_symbol *symbol, unsigned char source[], const i symbol->rows = rows; symbol->width = strlen(pattern); - - symbol->output_options |= BARCODE_BIND; - - if (symbol->border_width == 0) { /* Allow override if non-zero */ - symbol->border_width = 1; /* ANSI/AIM BC6-2000 Section 2.1 (note change from previous default 2) */ + symbol->whitespace_width = 10; + if (!(symbol->output_options & BARCODE_BIND)) { + symbol->output_options += BARCODE_BIND; } + symbol->border_width = 2; return 0; } + diff --git a/backend/common.c b/backend/common.c index f295099..ac30221 100644 --- a/backend/common.c +++ b/backend/common.c @@ -2,7 +2,7 @@ /* libzint - the open source barcode library - Copyright (C) 2008 - 2020 Robin Stuart + Copyright (C) 2008-2017 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -30,14 +30,18 @@ SUCH DAMAGE. */ /* vim: set ts=4 sw=4 et : */ +#include #include -#ifdef _MSC_VER -#include -#endif +#include #include "common.h" +/* Local replacement for strlen() with unsigned char strings */ +size_t ustrlen(const unsigned char data[]) { + return strlen((const char*) data); +} + /* Converts a character 0-9 to its equivalent integer value */ -INTERNAL int ctoi(const char source) { +int ctoi(const char source) { if ((source >= '0') && (source <= '9')) return (source - '0'); if ((source >= 'A') && (source <= 'F')) @@ -47,19 +51,12 @@ INTERNAL int ctoi(const char source) { return -1; } -/* Convert an integer value to a string representing its binary equivalent */ -INTERNAL void bin_append(const int arg, const int length, char *binary) { - size_t posn = strlen(binary); - - bin_append_posn(arg, length, binary, posn); - - binary[posn + length] = '\0'; -} -/* Convert an integer value to a string representing its binary equivalent at a set position */ -INTERNAL void bin_append_posn(const int arg, const int length, char *binary, size_t posn) { +/* Convert an integer value to a string representing its binary equivalent */ +void bin_append(const int arg, const int length, char *binary) { int i; int start; + size_t posn = strlen(binary); start = 0x01 << (length - 1); @@ -69,19 +66,21 @@ INTERNAL void bin_append_posn(const int arg, const int length, char *binary, siz binary[posn + i] = '1'; } } + binary[posn + length] = '\0'; + + return; } /* Converts an integer value to its hexadecimal character */ -INTERNAL char itoc(const int source) { +char itoc(const int source) { if ((source >= 0) && (source <= 9)) { return ('0' + source); } else { return ('A' + (source - 10)); } } - /* Converts lower case characters to upper case in a string source[] */ -INTERNAL void to_upper(unsigned char source[]) { +void to_upper(unsigned char source[]) { size_t i, src_len = ustrlen(source); for (i = 0; i < src_len; i++) { @@ -92,7 +91,7 @@ INTERNAL void to_upper(unsigned char source[]) { } /* Verifies that a string only uses valid characters */ -INTERNAL int is_sane(const char test_string[], const unsigned char source[], const size_t length) { +int is_sane(const char test_string[], const unsigned char source[], const size_t length) { unsigned int j; size_t i, lt = strlen(test_string); @@ -113,7 +112,7 @@ INTERNAL int is_sane(const char test_string[], const unsigned char source[], con } /* Replaces huge switch statements for looking up in tables */ -INTERNAL void lookup(const char set_string[], const char *table[], const char data, char dest[]) { +void lookup(const char set_string[], const char *table[], const char data, char dest[]) { size_t i, n = strlen(set_string); for (i = 0; i < n; i++) { @@ -124,7 +123,7 @@ INTERNAL void lookup(const char set_string[], const char *table[], const char da } /* Returns the position of data in set_string */ -INTERNAL int posn(const char set_string[], const char data) { +int posn(const char set_string[], const char data) { int i, n = (int)strlen(set_string); for (i = 0; i < n; i++) { @@ -136,9 +135,9 @@ INTERNAL int posn(const char set_string[], const char data) { } /* Returns the number of times a character occurs in a string */ -INTERNAL int ustrchr_cnt(const unsigned char string[], const size_t length, const unsigned char c) { +int ustrchr_cnt(const unsigned char string[], const size_t length, const unsigned char c) { int count = 0; - unsigned int i; + int i; for (i = 0; i < length; i++) { if (string[i] == c) { count++; @@ -147,32 +146,23 @@ INTERNAL int ustrchr_cnt(const unsigned char string[], const size_t length, cons return count; } -/* Return true (1) if a module is dark/black/colour, otherwise false (0) */ -INTERNAL int module_is_set(const struct zint_symbol *symbol, const int y_coord, const int x_coord) { - if (symbol->symbology == BARCODE_ULTRA) { - return symbol->encoded_data[y_coord][x_coord]; - } else { - return (symbol->encoded_data[y_coord][x_coord / 8] >> (x_coord % 8)) & 1; - } +/* Return true (1) if a module is dark/black, otherwise false (0) */ +int module_is_set(const struct zint_symbol *symbol, const int y_coord, const int x_coord) { + return (symbol->encoded_data[y_coord][x_coord / 7] >> (x_coord % 7)) & 1; } /* Set a module to dark/black */ -INTERNAL void set_module(struct zint_symbol *symbol, const int y_coord, const int x_coord) { - symbol->encoded_data[y_coord][x_coord / 8] |= 1 << (x_coord % 8); -} - -/* Set a module to a colour */ -INTERNAL void set_module_colour(struct zint_symbol *symbol, const int y_coord, const int x_coord, const int colour) { - symbol->encoded_data[y_coord][x_coord] = colour; +void set_module(struct zint_symbol *symbol, const int y_coord, const int x_coord) { + symbol->encoded_data[y_coord][x_coord / 7] |= 1 << (x_coord % 7); } /* Set (or unset) a module to white */ -INTERNAL void unset_module(struct zint_symbol *symbol, const int y_coord, const int x_coord) { - symbol->encoded_data[y_coord][x_coord / 8] &= ~(1 << (x_coord % 8)); +void unset_module(struct zint_symbol *symbol, const int y_coord, const int x_coord) { + symbol->encoded_data[y_coord][x_coord / 7] &= ~(1 << (x_coord % 7)); } /* Expands from a width pattern to a bit pattern */ -INTERNAL void expand(struct zint_symbol *symbol, const char data[]) { +void expand(struct zint_symbol *symbol, const char data[]) { size_t reader, n = strlen(data); int writer, i; @@ -205,9 +195,8 @@ INTERNAL void expand(struct zint_symbol *symbol, const char data[]) { symbol->rows = symbol->rows + 1; } -/* Indicates which symbologies can have row binding - * Note: if change this must also change version in frontend/main.c */ -INTERNAL int is_stackable(const int symbology) { +/* Indicates which symbologies can have row binding */ +int is_stackable(const int symbology) { if (symbology < BARCODE_PDF417) { return 1; } @@ -223,7 +212,6 @@ INTERNAL int is_stackable(const int symbology) { case BARCODE_ITF14: case BARCODE_CODE32: case BARCODE_CODABLOCKF: - case BARCODE_HIBC_BLOCKF: return 1; } @@ -231,7 +219,7 @@ INTERNAL int is_stackable(const int symbology) { } /* Indicates which symbols can have addon (EAN-2 and EAN-5) */ -INTERNAL int is_extendable(const int symbology) { +int is_extendable(const int symbology) { if (symbology == BARCODE_EANX || symbology == BARCODE_EANX_CHK) { return 1; } @@ -258,99 +246,75 @@ INTERNAL int is_extendable(const int symbology) { } /* Indicates which symbols can have composite 2D component data */ -INTERNAL int is_composite(int symbology) { +int is_composite(int symbology) { return symbology >= BARCODE_EANX_CC && symbology <= BARCODE_RSS_EXPSTACK_CC; } -INTERNAL int istwodigits(const unsigned char source[], const int length, const int position) { - if ((position + 1 < length) && (source[position] >= '0') && (source[position] <= '9') - && (source[position + 1] >= '0') && (source[position + 1] <= '9')) { - return 1; +int istwodigits(const unsigned char source[], const size_t position) { + if ((source[position] >= '0') && (source[position] <= '9')) { + if ((source[position + 1] >= '0') && (source[position + 1] <= '9')) { + return 1; + } } return 0; } -/* State machine to decode UTF-8 to Unicode codepoints (state 0 means done, state 12 means error) */ -INTERNAL unsigned int decode_utf8(unsigned int* state, unsigned int* codep, const unsigned char byte) { - /* - Copyright (c) 2008-2009 Bjoern Hoehrmann - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation - files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, - modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - - See https://bjoern.hoehrmann.de/utf-8/decoder/dfa/ for details. - */ - - static const unsigned char utf8d[] = { - /* The first part of the table maps bytes to character classes that - * reduce the size of the transition table and create bitmasks. */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, - 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, - 8,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 10,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3, 11,6,6,6,5,8,8,8,8,8,8,8,8,8,8,8, - - /* The second part is a transition table that maps a combination - * of a state of the automaton and a character class to a state. */ - 0,12,24,36,60,96,84,12,12,12,48,72, 12,12,12,12,12,12,12,12,12,12,12,12, - 12, 0,12,12,12,12,12, 0,12, 0,12,12, 12,24,12,12,12,12,12,24,12,24,12,12, - 12,12,12,12,12,12,12,24,12,12,12,12, 12,24,12,12,12,12,12,12,12,24,12,12, - 12,12,12,12,12,12,12,36,12,36,12,12, 12,36,12,12,12,12,12,36,12,36,12,12, - 12,36,12,12,12,12,12,12,12,12,12,12, - }; - - unsigned int type = utf8d[byte]; - - *codep = *state != 0 ? (byte & 0x3fu) | (*codep << 6) : (0xff >> type) & byte; - - *state = utf8d[256 + *state + type]; - - return *state; -} - -/* Convert UTF-8 to Unicode. If `disallow_4byte` unset, allow all values (UTF-32). - * If `disallow_4byte` set, only allow codepoints <= U+FFFF (ie four-byte sequences not allowed) (UTF-16, no surrogates) */ -INTERNAL int utf8_to_unicode(struct zint_symbol *symbol, const unsigned char source[], unsigned int vals[], size_t *length, int disallow_4byte) { +int utf8toutf16(struct zint_symbol *symbol, const unsigned char source[], int vals[], size_t *length) { size_t bpos; - int jpos; - unsigned int codepoint, state = 0; + int jpos, error_number; + int next; bpos = 0; jpos = 0; + error_number = 0; + next = 0; + + do { + if (source[bpos] <= 0x7f) { + /* 1 byte mode (7-bit ASCII) */ + vals[jpos] = source[bpos]; + next = bpos + 1; + jpos++; + } else { + if ((source[bpos] >= 0x80) && (source[bpos] <= 0xbf)) { + strcpy(symbol->errtxt, "240: Corrupt Unicode data"); + return ZINT_ERROR_INVALID_DATA; + } + if ((source[bpos] >= 0xc0) && (source[bpos] <= 0xc1)) { + strcpy(symbol->errtxt, "241: Overlong encoding not supported"); + return ZINT_ERROR_INVALID_DATA; + } - while (bpos < *length) { - do { - decode_utf8(&state, &codepoint, source[bpos++]); - } while (bpos < *length && state != 0 && state != 12); - - if (state != 0) { - strcpy(symbol->errtxt, "240: Corrupt Unicode data"); - return ZINT_ERROR_INVALID_DATA; - } - if (disallow_4byte && codepoint > 0xffff) { - strcpy(symbol->errtxt, "242: Unicode sequences of more than 3 bytes not supported"); - return ZINT_ERROR_INVALID_DATA; + if ((source[bpos] >= 0xc2) && (source[bpos] <= 0xdf)) { + /* 2 byte mode */ + vals[jpos] = ((source[bpos] & 0x1f) << 6) + (source[bpos + 1] & 0x3f); + next = bpos + 2; + jpos++; + } else + if ((source[bpos] >= 0xe0) && (source[bpos] <= 0xef)) { + /* 3 byte mode */ + vals[jpos] = ((source[bpos] & 0x0f) << 12) + ((source[bpos + 1] & 0x3f) << 6) + (source[bpos + 2] & 0x3f); + next = bpos + 3; + jpos++; + } else + if (source[bpos] >= 0xf0) { + strcpy(symbol->errtxt, "242: Unicode sequences of more than 3 bytes not supported"); + return ZINT_ERROR_INVALID_DATA; + } } - vals[jpos] = codepoint; - jpos++; - } + bpos = next; + } while (bpos < *length); *length = jpos; - return 0; + return error_number; } -/* Enforce minimum permissable height of rows */ -INTERNAL void set_minimum_height(struct zint_symbol *symbol, const int min_height) { + +void set_minimum_height(struct zint_symbol *symbol, const int min_height) { + /* Enforce minimum permissable height of rows */ int fixed_height = 0; int zero_count = 0; int i; @@ -374,127 +338,3 @@ INTERNAL void set_minimum_height(struct zint_symbol *symbol, const int min_heigh } } -/* Calculate optimized encoding modes. Adapted from Project Nayuki */ -INTERNAL void pn_define_mode(char* mode, const unsigned int data[], const size_t length, const int debug, - unsigned int state[], const char mode_types[], const int num_modes, pn_head_costs head_costs, pn_switch_cost switch_cost, pn_eod_cost eod_cost, pn_cur_cost cur_cost) { - /* - * Copyright (c) Project Nayuki. (MIT License) - * https://www.nayuki.io/page/qr-code-generator-library - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - */ - int i, j, k, cm_i; - unsigned int min_cost; - char cur_mode; -#ifndef _MSC_VER - unsigned int prev_costs[num_modes]; - char char_modes[length * num_modes]; - unsigned int cur_costs[num_modes]; -#else - unsigned int* prev_costs; - char* char_modes; - unsigned int* cur_costs; - prev_costs = (unsigned int*) _alloca(num_modes * sizeof(unsigned int)); - char_modes = (char*) _alloca(length * num_modes); - cur_costs = (unsigned int*) _alloca(num_modes * sizeof(unsigned int)); -#endif - - /* char_modes[i * num_modes + j] represents the mode to encode the code point at index i such that the final - * segment ends in mode_types[j] and the total number of bits is minimized over all possible choices */ - memset(char_modes, 0, length * num_modes); - - /* At the beginning of each iteration of the loop below, prev_costs[j] is the minimum number of 1/6 (1/XX_MULT) - * bits needed to encode the entire string prefix of length i, and end in mode_types[j] */ - memcpy(prev_costs, (*head_costs)(state), num_modes * sizeof(unsigned int)); - - /* Calculate costs using dynamic programming */ - for (i = 0, cm_i = 0; i < (int) length; i++, cm_i += num_modes) { - memset(cur_costs, 0, num_modes * sizeof(unsigned int)); - - (*cur_cost)(state, data, length, i, char_modes, prev_costs, cur_costs); - - if (eod_cost && i == (int) length - 1) { /* Add end of data costs if last character */ - for (j = 0; j < num_modes; j++) { - if (char_modes[cm_i + j]) { - cur_costs[j] += (*eod_cost)(state, j); - } - } - } - - /* Start new segment at the end to switch modes */ - for (j = 0; j < num_modes; j++) { /* To mode */ - for (k = 0; k < num_modes; k++) { /* From mode */ - if (j != k && char_modes[cm_i + k]) { - unsigned int new_cost = cur_costs[k] + (*switch_cost)(state, k, j); - if (!char_modes[cm_i + j] || new_cost < cur_costs[j]) { - cur_costs[j] = new_cost; - char_modes[cm_i + j] = mode_types[k]; - } - } - } - } - - memcpy(prev_costs, cur_costs, num_modes * sizeof(unsigned int)); - } - - /* Find optimal ending mode */ - min_cost = prev_costs[0]; - cur_mode = mode_types[0]; - for (i = 1; i < num_modes; i++) { - if (prev_costs[i] < min_cost) { - min_cost = prev_costs[i]; - cur_mode = mode_types[i]; - } - } - - /* Get optimal mode for each code point by tracing backwards */ - for (i = length - 1, cm_i = i * num_modes; i >= 0; i--, cm_i -= num_modes) { - j = strchr(mode_types, cur_mode) - mode_types; - cur_mode = char_modes[cm_i + j]; - mode[i] = cur_mode; - } - - if (debug & ZINT_DEBUG_PRINT) { - printf(" Mode: %.*s\n", (int)length, mode); - } -} - -#ifdef ZINT_TEST -/* Dumps hex-formatted codewords in symbol->errtxt (for use in testing) */ -void debug_test_codeword_dump(struct zint_symbol *symbol, unsigned char* codewords, int length) { - int i, max = length, cnt_len = 0; - if (length > 30) { /* 30*3 < errtxt 92 (100 - "Warning ") chars */ - sprintf(symbol->errtxt, "(%d) ", length); /* Place the number of codewords at the front */ - cnt_len = strlen(symbol->errtxt); - max = 30 - (cnt_len + 2) / 3; - } - for (i = 0; i < max; i++) { - sprintf(symbol->errtxt + cnt_len + i * 3, "%02X ", codewords[i]); - } - symbol->errtxt[strlen(symbol->errtxt) - 1] = '\0'; /* Zap last space */ -} - -void debug_test_codeword_dump_int(struct zint_symbol *symbol, int* codewords, int length) { - int i, max = 0, cnt_len, errtxt_len; - char temp[20]; - errtxt_len = sprintf(symbol->errtxt, "(%d) ", length); /* Place the number of codewords at the front */ - for (i = 0, cnt_len = errtxt_len; i < length; i++) { - cnt_len += sprintf(temp, "%d ", codewords[i]); - if (cnt_len > 92) { - break; - } - max++; - } - for (i = 0; i < max; i++) { - errtxt_len += sprintf(symbol->errtxt + errtxt_len, "%d ", codewords[i]); - } - symbol->errtxt[strlen(symbol->errtxt) - 1] = '\0'; /* Zap last space */ -} -#endif diff --git a/backend/common.h b/backend/common.h index 649eaeb..3bb535d 100644 --- a/backend/common.h +++ b/backend/common.h @@ -2,7 +2,7 @@ /* libzint - the open source barcode library - Copyright (C) 2009 - 2020 Robin Stuart + Copyright (C) 2009-2017 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -36,75 +36,45 @@ #define __COMMON_H #ifndef FALSE -#define FALSE 0 +#define FALSE 0 #endif #ifndef TRUE -#define TRUE 1 +#define TRUE 1 #endif /* The most commonly used set */ -#define NEON "0123456789" +#define NEON "0123456789" #include "zint.h" #include -#include -/* Helpers to cast away char pointer signedness */ -#define ustrlen(source) strlen((const char *) (source)) -#define ustrcpy(target, source) strcpy((char *) (target), (const char *) (source)) -#define ustrcat(target, source) strcat((char *) (target), (const char *) (source)) - -#if defined(__GNUC__) && !defined(_WIN32) && !defined(ZINT_TEST) -#define INTERNAL __attribute__ ((visibility ("hidden"))) -#else -#define INTERNAL -#endif - -#if defined(ZINT_TEST) -#define STATIC_UNLESS_ZINT_TEST -#else -#define STATIC_UNLESS_ZINT_TEST static -#endif +#define ustrcpy(target,source) strcpy((char*)target,(const char*)source) #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ - INTERNAL int ctoi(const char source); - INTERNAL char itoc(const int source); - INTERNAL void to_upper(unsigned char source[]); - INTERNAL int is_sane(const char test_string[], const unsigned char source[], const size_t length); - INTERNAL void lookup(const char set_string[], const char *table[], const char data, char dest[]); - INTERNAL void bin_append(const int arg, const int length, char *binary); - INTERNAL void bin_append_posn(const int arg, const int length, char *binary, size_t posn); - INTERNAL int posn(const char set_string[], const char data); - INTERNAL int ustrchr_cnt(const unsigned char string[], const size_t length, const unsigned char c); - INTERNAL int module_is_set(const struct zint_symbol *symbol, const int y_coord, const int x_coord); - INTERNAL void set_module(struct zint_symbol *symbol, const int y_coord, const int x_coord); - INTERNAL void set_module_colour(struct zint_symbol *symbol, const int y_coord, const int x_coord, const int colour); - INTERNAL void unset_module(struct zint_symbol *symbol, const int y_coord, const int x_coord); - INTERNAL void expand(struct zint_symbol *symbol, const char data[]); - INTERNAL int is_stackable(const int symbology); - INTERNAL int is_extendable(const int symbology); - INTERNAL int is_composite(const int symbology); - INTERNAL int istwodigits(const unsigned char source[], int length, const int position); - INTERNAL unsigned int decode_utf8(unsigned int* state, unsigned int* codep, const unsigned char byte); - INTERNAL int utf8_to_unicode(struct zint_symbol *symbol, const unsigned char source[], unsigned int vals[], size_t *length, int disallow_4byte); - INTERNAL void set_minimum_height(struct zint_symbol *symbol, const int min_height); - - typedef unsigned int* (*pn_head_costs)(unsigned int state[]); - typedef unsigned int (*pn_switch_cost)(unsigned int state[], const int k, const int j); - typedef unsigned int (*pn_eod_cost)(unsigned int state[], const int k); - typedef void (*pn_cur_cost)(unsigned int state[], const unsigned int data[], const size_t length, const int i, char* char_modes, unsigned int prev_costs[], unsigned int cur_costs[]); - INTERNAL void pn_define_mode(char* mode, const unsigned int data[], const size_t length, const int debug, - unsigned int state[], const char mode_types[], const int num_modes, pn_head_costs head_costs, pn_switch_cost switch_cost, pn_eod_cost eod_cost, pn_cur_cost cur_cost); - - #ifdef ZINT_TEST - void debug_test_codeword_dump(struct zint_symbol *symbol, unsigned char* codewords, int length); - void debug_test_codeword_dump_int(struct zint_symbol *symbol, int* codewords, int length); - #endif - + extern size_t ustrlen(const unsigned char data[]); + extern int ctoi(const char source); + extern char itoc(const int source); + extern void to_upper(unsigned char source[]); + extern int is_sane(const char test_string[], const unsigned char source[], const size_t length); + extern void lookup(const char set_string[], const char *table[], const char data, char dest[]); + extern void bin_append(const int arg, const int length, char *binary); + extern int posn(const char set_string[], const char data); + extern int ustrchr_cnt(const unsigned char string[], const size_t length, const unsigned char c); + extern int module_is_set(const struct zint_symbol *symbol, const int y_coord, const int x_coord); + extern void set_module(struct zint_symbol *symbol, const int y_coord, const int x_coord); + extern int istwodigits(const unsigned char source[], const size_t position); + extern int parunmodd(const unsigned char llyth); + extern void expand(struct zint_symbol *symbol, const char data[]); + extern void unset_module(struct zint_symbol *symbol, const int y_coord, const int x_coord); + extern int is_stackable(const int symbology); + extern int is_extendable(const int symbology); + extern int is_composite(const int symbology); + extern int utf8toutf16(struct zint_symbol *symbol, const unsigned char source[], int vals[], size_t *length); + extern void set_minimum_height(struct zint_symbol *symbol, const int min_height); #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/backend/composite.c b/backend/composite.c index 1184965..7d057e5 100644 --- a/backend/composite.c +++ b/backend/composite.c @@ -65,12 +65,12 @@ #define UINT unsigned short -INTERNAL int eanx(struct zint_symbol *symbol, unsigned char source[], int length); -INTERNAL int ean_128(struct zint_symbol *symbol, unsigned char source[], const size_t length); -INTERNAL void ean_leading_zeroes(struct zint_symbol *symbol, unsigned char source[], unsigned char local_source[]); -INTERNAL int rss14(struct zint_symbol *symbol, unsigned char source[], int length); -INTERNAL int rsslimited(struct zint_symbol *symbol, unsigned char source[], int length); -INTERNAL int rssexpanded(struct zint_symbol *symbol, unsigned char source[], int length); +extern int eanx(struct zint_symbol *symbol, unsigned char source[], int length); +extern int ean_128(struct zint_symbol *symbol, unsigned char source[], const size_t length); +extern void ean_leading_zeroes(struct zint_symbol *symbol, unsigned char source[], unsigned char local_source[]); +extern int rss14(struct zint_symbol *symbol, unsigned char source[], int length); +extern int rsslimited(struct zint_symbol *symbol, unsigned char source[], int length); +extern int rssexpanded(struct zint_symbol *symbol, unsigned char source[], int length); static UINT pwr928[69][7]; @@ -233,6 +233,7 @@ static int cc_a(struct zint_symbol *symbol, char source[], int cc_width) { for (i = 0; i < 8; i++) { rsCodeWords[i] = 0; } + total = 0; for (i = 0; i < cwCnt; i++) { total = (codeWords[i] + rsCodeWords[k - 1]) % 929; for (j = k - 1; j >= 0; j--) { @@ -485,6 +486,7 @@ static int cc_b(struct zint_symbol *symbol, char source[], int cc_width) { for (loop = 0; loop < 50; loop++) { mccorrection[loop] = 0; } + total = 0; for (i = 0; i < longueur; i++) { total = (chainemc[i] + mccorrection[k - 1]) % 929; for (j = k - 1; j >= 0; j--) { @@ -655,6 +657,7 @@ static int cc_c(struct zint_symbol *symbol, char source[], int cc_width, int ecc for (loop = 0; loop < 520; loop++) { mccorrection[loop] = 0; } + total = 0; for (i = 0; i < longueur; i++) { total = (chainemc[i] + mccorrection[k - 1]) % 929; for (j = k - 1; j >= 0; j--) { @@ -793,7 +796,7 @@ static int calc_padding_cca(int binary_length, int cc_width) { return target_bitsize; } -static int calc_padding_ccb(int binary_length, int cc_width) { +int calc_padding_ccb(int binary_length, int cc_width) { int target_bitsize = 0; switch (cc_width) { @@ -892,7 +895,7 @@ static int calc_padding_ccb(int binary_length, int cc_width) { return target_bitsize; } -static int calc_padding_ccc(int binary_length, int *cc_width, int lin_width, int *ecc) { +int calc_padding_ccc(int binary_length, int *cc_width, int lin_width, int *ecc) { int target_bitsize = 0; int byte_length, codewords_used, ecc_level, ecc_codewords, rows; int codewords_total, target_codewords, target_bytesize; @@ -1062,7 +1065,6 @@ static int cc_binary_string(struct zint_symbol *symbol, const char source[], cha following the two-digit AI 90 starts with an alphanumeric string which complies with a specific format." (para 5.3.2) */ - memset(ninety, 0, source_len + 1); i = 0; do { ninety[i] = source[i + 2]; @@ -1342,7 +1344,7 @@ static int cc_binary_string(struct zint_symbol *symbol, const char source[], cha return 0; } -static int linear_dummy_run(unsigned char *source, int length) { +int linear_dummy_run(unsigned char *source, int length) { struct zint_symbol *dummy; int error_number; int linear_width; @@ -1361,7 +1363,7 @@ static int linear_dummy_run(unsigned char *source, int length) { } } -INTERNAL int composite(struct zint_symbol *symbol, unsigned char source[], int length) { +int composite(struct zint_symbol *symbol, unsigned char source[], int length) { int error_number, cc_mode, cc_width, ecc_level; int j, i, k; unsigned int bs = 13 * length + 500 + 1; /* Allow for 8 bits + 5-bit latch per char + 500 bits overhead/padding */ diff --git a/backend/dllversion.c b/backend/dllversion.c index 71f5a75..d59725e 100644 --- a/backend/dllversion.c +++ b/backend/dllversion.c @@ -20,11 +20,11 @@ HRESULT DllGetVersion (DLLVERSIONINFO2* pdvi) return (E_INVALIDARG); pdvi->info1.dwMajorVersion = 2; - pdvi->info1.dwMinorVersion = 8; + pdvi->info1.dwMinorVersion = 2; pdvi->info1.dwBuildNumber = 1; pdvi->info1.dwPlatformID = DLLVER_PLATFORM_WINDOWS; if (sizeof(DLLVERSIONINFO2) == pdvi->info1.cbSize) - pdvi->ullVersion = MAKEDLLVERULL(2, 8, 1, 0); + pdvi->ullVersion = MAKEDLLVERULL(2, 2, 1, 0); return S_OK; } diff --git a/backend/dmatrix.c b/backend/dmatrix.c index 212eb6d..bec48d6 100644 --- a/backend/dmatrix.c +++ b/backend/dmatrix.c @@ -37,9 +37,9 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ #include +#include #include #include #include @@ -51,8 +51,8 @@ #define ceilf ceil #endif #endif -#include "common.h" #include "reedsol.h" +#include "common.h" #include "dmatrix.h" /* Annex M placement alorithm low level */ @@ -528,7 +528,7 @@ static int look_ahead_test(const unsigned char inputData[], const size_t sourcel /* Encodes data using ASCII, C40, Text, X12, EDIFACT or Base 256 modes as appropriate Supports encoding FNC1 in supporting systems */ -static int dm200encode(struct zint_symbol *symbol, const unsigned char source[], unsigned char target[], int *last_mode, size_t *length_p, int process_buffer[], int *process_p, int *binlen_p) { +static int dm200encode(struct zint_symbol *symbol, const unsigned char source[], unsigned char target[], int *last_mode, size_t *length_p, int process_buffer[], int *process_p) { size_t sp; int tp, i, gs1; @@ -536,9 +536,9 @@ static int dm200encode(struct zint_symbol *symbol, const unsigned char source[], size_t inputlen = *length_p; int debug = symbol->debug; #ifndef _MSC_VER - char binary[2 * inputlen + 1 + 4 + 1]; /* Allow for GS1/READER_INIT, ECI and nul chars overhead */ + char binary[2 * inputlen]; #else - char* binary = (char*) _alloca(2 * inputlen + 1 + 4 + 1); + char* binary = (char*) _alloca(2 * inputlen); #endif sp = 0; @@ -552,7 +552,7 @@ static int dm200encode(struct zint_symbol *symbol, const unsigned char source[], next_mode = DM_ASCII; /* gs1 flag values: 0: no gs1, 1: gs1 with FNC1 serparator, 2: GS separator */ - if ((symbol->input_mode & 0x07) == GS1_MODE) { + if (symbol->input_mode == GS1_MODE) { if (symbol->output_options & GS1_GS_SEPARATOR) { gs1 = 2; } else { @@ -571,7 +571,7 @@ static int dm200encode(struct zint_symbol *symbol, const unsigned char source[], if (symbol->output_options & READER_INIT) { if (gs1) { - strcpy(symbol->errtxt, "521: Cannot encode in GS1 mode and Reader Initialisation at the same time"); + strcpy(symbol->errtxt, "519: Cannot encode in GS1 mode and Reader Initialisation at the same time"); return ZINT_ERROR_INVALID_OPTION; } else { target[tp] = 234; @@ -643,7 +643,7 @@ static int dm200encode(struct zint_symbol *symbol, const unsigned char source[], if (current_mode == DM_ASCII) { next_mode = DM_ASCII; - if (istwodigits(source, inputlen, sp)) { + if (istwodigits(source, sp) && ((sp + 1) != inputlen)) { target[tp] = (unsigned char) ((10 * ctoi(source[sp])) + ctoi(source[sp + 1]) + 130); if (debug) printf("N%d ", target[tp] - 130); tp++; @@ -756,7 +756,7 @@ static int dm200encode(struct zint_symbol *symbol, const unsigned char source[], process_buffer[*process_p] = value; (*process_p)++; - while (*process_p >= 3) { + if (*process_p >= 3) { int iv; iv = (1600 * process_buffer[0]) + (40 * process_buffer[1]) + (process_buffer[2]) + 1; @@ -824,7 +824,7 @@ static int dm200encode(struct zint_symbol *symbol, const unsigned char source[], process_buffer[*process_p] = value; (*process_p)++; - while (*process_p >= 3) { + if (*process_p >= 3) { int iv; iv = (1600 * process_buffer[0]) + (40 * process_buffer[1]) + (process_buffer[2]) + 1; @@ -885,7 +885,7 @@ static int dm200encode(struct zint_symbol *symbol, const unsigned char source[], process_buffer[*process_p] = value; (*process_p)++; - while (*process_p >= 3) { + if (*process_p >= 3) { int iv; iv = (1600 * process_buffer[0]) + (40 * process_buffer[1]) + (process_buffer[2]) + 1; @@ -932,7 +932,7 @@ static int dm200encode(struct zint_symbol *symbol, const unsigned char source[], sp++; } - while (*process_p >= 4) { + if (*process_p >= 4) { target[tp] = (unsigned char) ((process_buffer[0] << 2) + ((process_buffer[1] & 0x30) >> 4)); tp++; target[tp] = ((process_buffer[1] & 0x0f) << 4) + ((process_buffer[2] & 0x3c) >> 2); @@ -971,8 +971,7 @@ static int dm200encode(struct zint_symbol *symbol, const unsigned char source[], } if (tp > 1558) { - strcpy(symbol->errtxt, "520: Data too long to fit in symbol"); - return ZINT_ERROR_TOO_LONG; + return 0; } } /* while */ @@ -1019,8 +1018,7 @@ static int dm200encode(struct zint_symbol *symbol, const unsigned char source[], } *(last_mode) = current_mode; - *binlen_p = tp; - return 0; + return tp; } static int dm200encode_remainder(unsigned char target[], int target_length, const unsigned char source[], const size_t inputlen, const int last_mode, const int process_buffer[], const int process_p, const int symbols_left) { @@ -1163,9 +1161,9 @@ static void add_tail(unsigned char target[], int tp, const int tail_length) { } } -static int data_matrix_200(struct zint_symbol *symbol,const unsigned char source[], const size_t in_length) { - int i, skew = 0; - size_t inputlen = in_length; +int data_matrix_200(struct zint_symbol *symbol,const unsigned char source[], const size_t in_length) { + int i, skew = 0; + size_t inputlen=in_length; unsigned char binary[2200]; int binlen; int process_buffer[8]; /* holds remaining data to finalised */ @@ -1177,9 +1175,11 @@ static int data_matrix_200(struct zint_symbol *symbol,const unsigned char source int symbols_left; /* inputlen may be decremented by 2 if macro character is used */ - error_number = dm200encode(symbol, source, binary, &last_mode, &inputlen, process_buffer, &process_p, &binlen); - if (error_number != 0) { - return error_number; + binlen = dm200encode(symbol, source, binary, &last_mode, &inputlen, process_buffer, &process_p); + + if (binlen == 0) { + strcpy(symbol->errtxt, "520: Data too long to fit in symbol"); + return ZINT_ERROR_TOO_LONG; } if ((symbol->option_2 >= 1) && (symbol->option_2 <= DMSIZESCOUNT)) { @@ -1253,7 +1253,7 @@ static int data_matrix_200(struct zint_symbol *symbol,const unsigned char source #ifdef DEBUG { int CWCount; - int posCur; + int posCur; if (skew) CWCount = 1558 + 620; else @@ -1289,7 +1289,7 @@ static int data_matrix_200(struct zint_symbol *symbol,const unsigned char source // Print position matrix as in standard for (y = NR - 1; y >= 0; y--) { for (x = 0; x < NC; x++) { - int v; + int v; if (x != 0) fprintf(stderr, "|"); v = places[(NR - y - 1) * NC + x]; @@ -1326,7 +1326,7 @@ static int data_matrix_200(struct zint_symbol *symbol,const unsigned char source return error_number; } -INTERNAL int dmatrix(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length) { +int dmatrix(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length) { int error_number; if (symbol->option_1 <= 1) { @@ -1340,3 +1340,5 @@ INTERNAL int dmatrix(struct zint_symbol *symbol, const unsigned char source[], c return error_number; } + + diff --git a/backend/dmatrix.h b/backend/dmatrix.h index ef39825..4403f43 100644 --- a/backend/dmatrix.h +++ b/backend/dmatrix.h @@ -29,7 +29,6 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ /* Containes Extended Rectangular Data Matrix (DMRE) @@ -37,8 +36,19 @@ Contact: harald.oehlmann@eurodatacouncil.org */ -#ifndef __DMATRIX_H -#define __DMATRIX_H +#include "common.h" + +#ifndef __IEC16022ECC200_H +#define __IEC16022ECC200_H +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +extern int data_matrix_200(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ #define MAXBARCODE 3116 @@ -245,4 +255,6 @@ static const unsigned short int matrixrsblock[] = { /*44*/ 56, /*104x104*/ 68, /*120x120*/ 62, /*132x132*/ 62 /*144x144*/ }; -#endif /* __DMATRIX_H */ + +#endif + diff --git a/backend/dotcode.c b/backend/dotcode.c index 78f3914..c1407c4 100644 --- a/backend/dotcode.c +++ b/backend/dotcode.c @@ -2,7 +2,7 @@ /* libzint - the open source barcode library - Copyright (C) 2017-2020 Robin Stuart + Copyright (C) 2017-2019 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -29,15 +29,15 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ /* - * Attempts to encode DotCode according to (AIMD013) ISS DotCode Rev. 4.0, DRAFT 0.15, TSC Pre-PR #5, dated May 28, 2019 + * Attempts to encode DotCode according to AIMD013 Rev 1.34a, dated Feb 19, 2009 * Incorporating suggestions from Terry Burton at BWIPP */ #include #include +#include #include #ifndef _MSC_VER #include @@ -68,7 +68,6 @@ static const unsigned short int dot_patterns[113] = { 0x1b8, 0x1c6, 0x1cc }; -// Printed() routine from Annex A adapted to char array of ASCII 1's and 0's static int get_dot(char Dots[], const int Hgt, const int Wid, const int x, const int y) { int retval = 0; @@ -103,67 +102,61 @@ static int clr_row(char *Dots, const int Hgt, const int Wid, const int y) { return 1; } -// calc penalty for empty interior columns -static int col_penalty(char *Dots, int Hgt, int Wid) { - int x, penalty = 0, penalty_local = 0; +/* Dot pattern scoring routine from Annex A */ +const int score_array(char Dots[], int Hgt, int Wid) { + int x, y, worstedge, first, last, sum; + int penalty_local = 0; + int penalty = 0; - for (x = 1; x < Wid - 1; x++) { - if (clr_col(Dots, Hgt, Wid, x)) { - if (penalty_local == 0) { - penalty_local = Hgt; - } else { - penalty_local *= Hgt; - } - } else { - if (penalty_local) { - penalty += penalty_local; - penalty_local = 0; + // first, guard against "pathelogical" gaps in the array + if (Hgt & 1) { + if (Hgt < 12) { + sum = 0; + for (x = 1; x < Wid - 1; x++) { + if (!(clr_col(Dots, Hgt, Wid, x))) { + sum = 0; + if (penalty_local) { + penalty += penalty_local; + penalty_local = 0; + } + } else { + sum++; + if (sum == 1) { + penalty_local = Hgt; + } else { + penalty_local *= Hgt; + } + } } } - } - - return penalty + penalty_local; -} - -// calc penalty for empty interior rows -static int row_penalty(char *Dots, int Hgt, int Wid) { - int y, penalty = 0, penalty_local = 0; - - for (y = 1; y < Hgt - 1; y++) { - if (clr_row(Dots, Hgt, Wid, y)) { - if (penalty_local == 0) { - penalty_local = Wid; - } else { - penalty_local *= Wid; - } - } else { - if (penalty_local) { - penalty += penalty_local; - penalty_local = 0; + } else { + if (Wid < 12) { + sum = 0; + for (y = 1; y < Hgt - 1; y++) { + if (!(clr_row(Dots, Hgt, Wid, y))) { + sum = 0; + if (penalty_local) { + penalty += penalty_local; + penalty_local = 0; + } + } else { + sum++; + if (sum == 1) { + penalty_local = Wid; + } else { + penalty_local *= Wid; + } + } } } } - return penalty + penalty_local; -} - -/* Dot pattern scoring routine from Annex A */ -static int score_array(char Dots[], int Hgt, int Wid) { - int x, y, worstedge, first, last, sum; - int penalty = 0; - - // first, guard against "pathelogical" gaps in the array - // subtract a penalty score for empty rows/columns from total code score for each mask, - // where the penalty is Sum(N ^ n), where N is the number of positions in a column/row, - // and n is the number of consecutive empty rows/columns - penalty = row_penalty(Dots, Hgt, Wid) + col_penalty(Dots, Hgt, Wid); - sum = 0; first = -1; last = -1; // across the top edge, count printed dots and measure their extent - for (x = 0; x < Wid; x += 2) { + for (x = 0; x < Wid; x += 2) if (get_dot(Dots, Hgt, Wid, x, 0)) { if (first < 0) { first = x; @@ -171,20 +164,19 @@ static int score_array(char Dots[], int Hgt, int Wid) { last = x; sum++; } - } + worstedge = sum + last - first; + worstedge *= Hgt; + if (sum == 0) { return SCORE_UNLIT_EDGE; // guard against empty top edge } - worstedge = sum + last - first; - worstedge *= Hgt; - sum = 0; first = -1; last = -1; - // across the bottom edge, ditto - for (x = Wid & 1; x < Wid; x += 2) { + //across the bottom edge, ditto + for (x = Wid & 1; x < Wid; x += 2) if (get_dot(Dots, Hgt, Wid, x, Hgt - 1)) { if (first < 0) { first = x; @@ -192,23 +184,22 @@ static int score_array(char Dots[], int Hgt, int Wid) { last = x; sum++; } - } - if (sum == 0) { - return SCORE_UNLIT_EDGE; // guard against empty bottom edge - } - sum += last - first; sum *= Hgt; if (sum < worstedge) { worstedge = sum; } + if (sum == 0) { + return SCORE_UNLIT_EDGE; // guard against empty bottom edge + } + sum = 0; first = -1; last = -1; - // down the left edge, ditto - for (y = 0; y < Hgt; y += 2) { + //down the left edge, ditto + for (y = 0; y < Hgt; y += 2) if (get_dot(Dots, Hgt, Wid, 0, y)) { if (first < 0) { first = y; @@ -216,23 +207,22 @@ static int score_array(char Dots[], int Hgt, int Wid) { last = y; sum++; } - } - if (sum == 0) { - return SCORE_UNLIT_EDGE; // guard against empty left edge - } - sum += last - first; sum *= Wid; if (sum < worstedge) { worstedge = sum; } + if (sum == 0) { + return SCORE_UNLIT_EDGE; // guard against empty left edge + } + sum = 0; first = -1; last = -1; - // down the right edge, ditto - for (y = Hgt & 1; y < Hgt; y += 2) { + //down the right edge, ditto + for (y = Hgt & 1; y < Hgt; y += 2) if (get_dot(Dots, Hgt, Wid, Wid - 1, y)) { if (first < 0) { first = y; @@ -240,17 +230,16 @@ static int score_array(char Dots[], int Hgt, int Wid) { last = y; sum++; } - } - if (sum == 0) { - return SCORE_UNLIT_EDGE; // guard against empty right edge - } - sum += last - first; sum *= Wid; if (sum < worstedge) { worstedge = sum; } + if (sum == 0) { + return SCORE_UNLIT_EDGE; // guard against empty right edge + } + // throughout the array, count the # of unprinted 5-somes (cross patterns) // plus the # of printed dots surrounded by 8 unprinted neighbors sum = 0; @@ -278,23 +267,13 @@ static int score_array(char Dots[], int Hgt, int Wid) { // employing Galois Field GF, where GF is prime, with a prime modulus of PM //------------------------------------------------------------------------- -static void rsencode(int nd, int nc, unsigned char *wd) { - // roots (antilogs): root[0] = 1; for (i = 1; i < GF - 1; i++) root[i] = (PM * root[i - 1]) % GF; - static int root[GF - 1] = { - 1, 3, 9, 27, 81, 17, 51, 40, 7, 21, - 63, 76, 2, 6, 18, 54, 49, 34, 102, 80, - 14, 42, 13, 39, 4, 12, 36, 108, 98, 68, - 91, 47, 28, 84, 26, 78, 8, 24, 72, 103, - 83, 23, 69, 94, 56, 55, 52, 43, 16, 48, - 31, 93, 53, 46, 25, 75, 112, 110, 104, 86, - 32, 96, 62, 73, 106, 92, 50, 37, 111, 107, - 95, 59, 64, 79, 11, 33, 99, 71, 100, 74, - 109, 101, 77, 5, 15, 45, 22, 66, 85, 29, - 87, 35, 105, 89, 41, 10, 30, 90, 44, 19, - 57, 58, 61, 70, 97, 65, 82, 20, 60, 67, - 88, 38 - }; - int i, j, k, nw, start, step, c[GF]; +void rsencode(int nd, int nc, unsigned char *wd) { + int i, j, k, nw, start, step, root[GF], c[GF]; + + // Start by generating "nc" roots (antilogs): + root[0] = 1; + for (i = 1; (i <= nc) && (i < GF); i++) + root[i] = (PM * root[i - 1]) % GF; // Here we compute how many interleaved R-S blocks will be needed nw = nd + nc; @@ -302,14 +281,13 @@ static void rsencode(int nd, int nc, unsigned char *wd) { // ...& then for each such block: for (start = 0; start < step; start++) { - int ND = (nd - start + step - 1) / step; - int NW = (nw - start + step - 1) / step; - int NC = NW - ND; + int ND = (nd - start + step - 1) / step, NW = (nw - start + step - 1) / step, NC = NW - ND; // first compute the generator polynomial "c" of order "NC": - memset(c, 0, GF * sizeof(int)); // Keep clang-tidy happy (as far as UndefinedBinaryOperatorResult warning below at least) - + for (i = 1; i <= NC; i++) + c[i] = 0; c[0] = 1; + for (i = 1; i <= NC; i++) { for (j = NC; j >= 1; j--) { c[j] = (GF + c[j] - (root[i] * c[j - 1]) % GF) % GF; @@ -318,24 +296,22 @@ static void rsencode(int nd, int nc, unsigned char *wd) { // & then compute the corresponding checkword values into wd[] // ... (a) starting at wd[start] & (b) stepping by step - for (i = ND; i < NW; i++) { + for (i = ND; i < NW; i++) wd[start + i * step] = 0; - } for (i = 0; i < ND; i++) { - k = (wd[start + i * step] + wd[start + ND * step]) % GF; // NOLINT wd set 0..(nd - 1) and start + i * step <= nd - 1 + k = (wd[start + i * step] + wd[start + ND * step]) % GF; for (j = 0; j < NC - 1; j++) { wd[start + (ND + j) * step] = (GF - ((c[j + 1] * k) % GF) + wd[start + (ND + j + 1) * step]) % GF; } wd[start + (ND + NC - 1) * step] = (GF - ((c[NC] * k) % GF)) % GF; } - for (i = ND; i < NW; i++) { + for (i = ND; i < NW; i++) wd[start + i * step] = (GF - wd[start + i * step]) % GF; - } } } /* Check if the next character is directly encodable in code set A (Annex F.II.D) */ -static int datum_a(const unsigned char source[], int position, int length) { +int datum_a(const unsigned char source[], int position, int length) { int retval = 0; if (position < length) { @@ -347,8 +323,8 @@ static int datum_a(const unsigned char source[], int position, int length) { return retval; } -/* Check if the next character is directly encodable in code set B (Annex F.II.D). Note changed to return 2 if CR/LF */ -static int datum_b(const unsigned char source[], int position, int length) { +/* Check if the next character is directly encodable in code set B (Annex F.II.D) */ +int datum_b(const unsigned char source[], int position, int length) { int retval = 0; if (position < length) { @@ -364,9 +340,9 @@ static int datum_b(const unsigned char source[], int position, int length) { retval = 1; } - if (position + 1 < length) { + if (position != length - 2) { if ((source[position] == 13) && (source[position + 1] == 10)) { // CRLF - retval = 2; + retval = 1; } } } @@ -375,7 +351,7 @@ static int datum_b(const unsigned char source[], int position, int length) { } /* Check if the next characters are directly encodable in code set C (Annex F.II.D) */ -static int datum_c(const unsigned char source[], int position, int length) { +int datum_c(const unsigned char source[], int position, int length) { int retval = 0; if (position <= length - 2) { @@ -388,7 +364,7 @@ static int datum_c(const unsigned char source[], int position, int length) { } /* Returns how many consecutive digits lie immediately ahead (Annex F.II.A) */ -static int n_digits(const unsigned char source[], int position, int length) { +int n_digits(const unsigned char source[], int position, int length) { int i; for (i = position; ((source[i] >= '0') && (source[i] <= '9')) && (i < length); i++); @@ -397,7 +373,7 @@ static int n_digits(const unsigned char source[], int position, int length) { } /* checks ahead for 10 or more digits starting "17xxxxxx10..." (Annex F.II.B) */ -static int seventeen_ten(const unsigned char source[], int position, int length) { +int seventeen_ten(const unsigned char source[], int position, int length) { int found = 0; if (n_digits(source, position, length) >= 10) { @@ -413,7 +389,7 @@ static int seventeen_ten(const unsigned char source[], int position, int length) /* checks how many characters ahead can be reached while datum_c is true, * returning the resulting number of codewords (Annex F.II.E) */ -static int ahead_c(const unsigned char source[], int position, int length) { +int ahead_c(const unsigned char source[], int position, int length) { int count = 0; int i; @@ -425,7 +401,7 @@ static int ahead_c(const unsigned char source[], int position, int length) { } /* Annex F.II.F */ -static int try_c(const unsigned char source[], int position, int length) { +int try_c(const unsigned char source[], int position, int length) { int retval = 0; if (n_digits(source, position, length) > 0) { @@ -438,7 +414,7 @@ static int try_c(const unsigned char source[], int position, int length) { } /* Annex F.II.G */ -static int ahead_a(const unsigned char source[], int position, int length) { +int ahead_a(const unsigned char source[], int position, int length) { int count = 0; int i; @@ -450,28 +426,24 @@ static int ahead_a(const unsigned char source[], int position, int length) { return count; } -/* Annex F.II.H Note: changed to return number of chars encodable. Number of codewords returned in *p_nx. */ -static int ahead_b(const unsigned char source[], int position, int length, int *p_nx) { +/* Annex F.II.H */ +int ahead_b(const unsigned char source[], int position, int length) { int count = 0; - int i, incr; + int i; - for (i = position; (i < length) && (incr = datum_b(source, i, length)) - && (try_c(source, i, length) < 2); i += incr) { + for (i = position; ((i < length) && datum_b(source, i, length)) + && (try_c(source, i, length) < 2); i++) { count++; } - if (p_nx != NULL) { - *p_nx = count; - } - - return i - position; + return count; } /* checks if the next character is in the range 128 to 255 (Annex F.II.I) */ -static int binary(const unsigned char source[], int length, int position) { +int binary(const unsigned char source[], int position) { int retval = 0; - if (position < length && source[position] >= 128) { + if (source[position] >= 128) { retval = 1; } @@ -479,16 +451,13 @@ static int binary(const unsigned char source[], int length, int position) { } /* Analyse input data stream and encode using algorithm from Annex F */ -static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned char source[], int length, unsigned char *codeword_array, int *binary_finish) { - static char lead_specials[] = "\x09\x1C\x1D\x1E"; // HT, FS, GS, RS - +int dotcode_encode_message(struct zint_symbol *symbol, const unsigned char source[], int length, unsigned char *codeword_array, int *binary_finish) { int input_position, array_length, i; char encoding_mode; int inside_macro; - int debug = (symbol->debug & ZINT_DEBUG_PRINT); + int debug = symbol->debug; int binary_buffer_size = 0; int lawrencium[6]; // Reversed radix 103 values - int nx; #if defined(_MSC_VER) && _MSC_VER == 1200 uint64_t binary_buffer = 0; @@ -506,7 +475,7 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha array_length++; } - if ((symbol->input_mode & 0x07) != GS1_MODE) { + if (symbol->input_mode != GS1_MODE) { if (length > 2) { if (((source[input_position] >= '0') && (source[input_position] <= '9')) && ((source[input_position + 1] >= '0') && (source[input_position + 1] <= '9'))) { @@ -526,8 +495,8 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha // the next three codewords valued A, B & C encode the ECI value of // (A - 40) * 12769 + B * 113 + C + 40 (Section 5.2.1) int a, b, c; - a = (symbol->eci - 40) / 12769; - b = ((symbol->eci - 40) - (12769 * a)) / 113; + a = (symbol->eci - 40) % 12769; + b = ((symbol->eci - 40) - (12769 * a)) % 113; c = (symbol->eci - 40) - (12769 * a) - (113 * b); codeword_array[array_length] = a + 40; @@ -540,16 +509,39 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha } // Prevent encodation as a macro if a special character is in first position - if (strchr(lead_specials, source[input_position]) != NULL) { + if (source[input_position] == 9) { codeword_array[array_length] = 101; // Latch A array_length++; - codeword_array[array_length] = source[input_position] + 64; + codeword_array[array_length] = 73; // HT array_length++; encoding_mode = 'A'; - input_position++; } - while (input_position < length) { + if (source[input_position] == 28) { + codeword_array[array_length] = 101; // Latch A + array_length++; + codeword_array[array_length] = 92; // FS + array_length++; + encoding_mode = 'A'; + } + + if (source[input_position] == 29) { + codeword_array[array_length] = 101; // Latch A + array_length++; + codeword_array[array_length] = 93; // GS + array_length++; + encoding_mode = 'A'; + } + + if (source[input_position] == 30) { + codeword_array[array_length] = 101; // Latch A + array_length++; + codeword_array[array_length] = 94; // RS + array_length++; + encoding_mode = 'A'; + } + + do { int done = 0; /* Step A */ if ((input_position == length - 2) && (inside_macro != 0) && (inside_macro != 100)) { @@ -561,89 +553,84 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha } } - /* Step B */ if ((input_position == length - 1) && (inside_macro == 100)) { // inside_macro only gets set to 100 if the last character is EOT input_position++; done = 1; if (debug) { - printf("B "); + printf("A "); } } - /* Step C1 */ + /* Step B1 */ if ((!done) && (encoding_mode == 'C')) { - if ((array_length == 0) && (length > 6)) { + if ((array_length == 0) && (length > 9)) { if ((source[input_position] == '[') && (source[input_position + 1] == ')') && (source[input_position + 2] == '>') && (source[input_position + 3] == 30) // RS - && (source[length - 1] == 4)) { // EOT + && (source[length - 1] == 04)) { // EOT if ((source[input_position + 6] == 29) && (source[length - 2] == 30)) { // GS/RS if ((source[input_position + 4] == '0') && (source[input_position + 5] == '5')) { - codeword_array[array_length] = 106; // Latch B + codeword_array[array_length] = 102; // Shift B array_length++; - encoding_mode = 'B'; codeword_array[array_length] = 97; // Macro array_length++; input_position += 7; inside_macro = 97; done = 1; if (debug) { - printf("C1/1 "); + printf("B1/1 "); } } - if ((!done) && (source[input_position + 4] == '0') && (source[input_position + 5] == '6')) { - codeword_array[array_length] = 106; // Latch B + if ((source[input_position + 4] == '0') && (source[input_position + 5] == '6')) { + codeword_array[array_length] = 102; // Shift B array_length++; - encoding_mode = 'B'; codeword_array[array_length] = 98; // Macro array_length++; input_position += 7; inside_macro = 98; done = 1; if (debug) { - printf("C1/2 "); + printf("B1/2 "); } } - if ((!done) && (source[input_position + 4] == '1') && (source[input_position + 5] == '2')) { - codeword_array[array_length] = 106; // Latch B + if ((source[input_position + 4] == '1') && (source[input_position + 5] == '2')) { + codeword_array[array_length] = 102; // Shift B array_length++; - encoding_mode = 'B'; codeword_array[array_length] = 99; // Macro array_length++; input_position += 7; inside_macro = 99; done = 1; if (debug) { - printf("C1/3 "); + printf("B1/3 "); } } } - if ((!done) && (source[input_position + 4] >= '0') && (source[input_position + 4] <= '9') && - (source[input_position + 5] >= '0') && (source[input_position + 5] <= '9')) { - codeword_array[array_length] = 106; // Latch B + if ((!done) && (source[input_position] >= '0') && (source[input_position] <= '9') && + (source[input_position + 1] >= '0') && (source[input_position + 1] <= '9')) { + codeword_array[array_length] = 102; // Shift B array_length++; - encoding_mode = 'B'; codeword_array[array_length] = 100; // Macro array_length++; input_position += 4; inside_macro = 100; done = 1; if (debug) { - printf("C1/4 "); + printf("B1/4 "); } } } } } - /* Step C2 */ + /* Step B2 */ if ((!done) && (encoding_mode == 'C')) { if (seventeen_ten(source, input_position, length)) { codeword_array[array_length] = 100; // (17)...(10) @@ -657,13 +644,13 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha input_position += 10; done = 1; if (debug) { - printf("C2/1 "); + printf("B2/1 "); } } } if ((!done) && (encoding_mode == 'C')) { - if (datum_c(source, input_position, length) || ((source[input_position] == '[') && ((symbol->input_mode & 0x07) == GS1_MODE))) { + if (datum_c(source, input_position, length) || ((source[input_position] == '[') && (symbol->input_mode == GS1_MODE))) { if (source[input_position] == '[') { codeword_array[array_length] = 107; // FNC1 input_position++; @@ -674,22 +661,22 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha array_length++; done = 1; if (debug) { - printf("C2/2 "); + printf("B2/2 "); } } } - /* Step C3 */ + /* Step B3 */ if ((!done) && (encoding_mode == 'C')) { - if (binary(source, length, input_position)) { + if (binary(source, input_position)) { if (n_digits(source, input_position + 1, length) > 0) { if ((source[input_position] - 128) < 32) { - codeword_array[array_length] = 110; // Upper Shift A + codeword_array[array_length] = 110; // Bin Shift A array_length++; codeword_array[array_length] = source[input_position] - 128 + 64; array_length++; } else { - codeword_array[array_length] = 111; // Upper Shift B + codeword_array[array_length] = 111; // Bin Shift B array_length++; codeword_array[array_length] = source[input_position] - 128 - 32; array_length++; @@ -702,38 +689,26 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha } done = 1; if (debug) { - printf("C3 "); + printf("B3 "); } } } - /* Step C4 */ + /* Step B4 */ if ((!done) && (encoding_mode == 'C')) { int m = ahead_a(source, input_position, length); - int n = ahead_b(source, input_position, length, &nx); + int n = ahead_b(source, input_position, length); if (m > n) { codeword_array[array_length] = 101; // Latch A array_length++; encoding_mode = 'A'; } else { - if (nx >= 1 && nx <= 4) { - codeword_array[array_length] = 101 + nx; // nx Shift B + if (n <= 4) { + codeword_array[array_length] = 101 + n; // nx Shift B array_length++; - for (i = 0; i < nx; i++) { - if (source[input_position] >= 32) { - codeword_array[array_length] = source[input_position] - 32; - } else if (source[input_position] == 13) { // CR/LF - codeword_array[array_length] = 96; - input_position++; - } else { - switch(source[input_position]) { - case 9: codeword_array[array_length] = 97; break; // HT - case 28: codeword_array[array_length] = 98; break; // FS - case 29: codeword_array[array_length] = 99; break; // GS - case 30: codeword_array[array_length] = 100; break; // RS - } - } + for (i = 0; i < n; i++) { + codeword_array[array_length] = source[input_position] - 32; array_length++; input_position++; } @@ -745,11 +720,11 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha } done = 1; if (debug) { - printf("C4 "); + printf("B4 "); } } - /* Step D1 */ + /* Step C1 */ if ((!done) && (encoding_mode == 'B')) { int n = try_c(source, input_position, length); @@ -769,20 +744,20 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha } done = 1; if (debug) { - printf("D1 "); + printf("C1 "); } } } - /* Step D2 */ + /* Step C2 */ if ((!done) && (encoding_mode == 'B')) { - if ((source[input_position] == '[') && ((symbol->input_mode & 0x07) == GS1_MODE)) { + if ((source[input_position] == '[') && (symbol->input_mode == GS1_MODE)) { codeword_array[array_length] = 107; // FNC1 array_length++; input_position++; done = 1; if (debug) { - printf("D2/1 "); + printf("C2/1 "); } } else { if (datum_b(source, input_position, length)) { @@ -820,16 +795,16 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha array_length++; input_position++; if (debug) { - printf("D2/2 "); + printf("C2/2 "); } } } } } - /* Step D3 */ + /* Step C3 */ if ((!done) && (encoding_mode == 'B')) { - if (binary(source, length, input_position)) { + if (binary(source, input_position)) { if (datum_b(source, input_position + 1, length)) { if ((source[input_position] - 128) < 32) { codeword_array[array_length] = 110; // Bin Shift A @@ -850,12 +825,12 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha } done = 1; if (debug) { - printf("D3 "); + printf("C3 "); } } } - /* Step D4 */ + /* Step C4 */ if ((!done) && (encoding_mode == 'B')) { if (ahead_a(source, input_position, length) == 1) { codeword_array[array_length] = 101; // Shift A @@ -874,11 +849,11 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha } done = 1; if (debug) { - printf("D4 "); + printf("C4 "); } } - /* Step E1 */ + /* Step D1 */ if ((!done) && (encoding_mode == 'A')) { int n = try_c(source, input_position, length); if (n >= 2) { @@ -897,21 +872,20 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha } done = 1; if (debug) { - printf("E1 "); + printf("D1 "); } } } - /* Step E2 */ + /* Step D2 */ if ((!done) && (encoding_mode == 'A')) { - if ((source[input_position] == '[') && ((symbol->input_mode & 0x07) == GS1_MODE)) { - // Note: this branch probably never reached as no reason to be in Code Set A for GS1 data + if ((source[input_position] == '[') && (symbol->input_mode == GS1_MODE)) { codeword_array[array_length] = 107; // FNC1 array_length++; input_position++; done = 1; if (debug) { - printf("E2/1 "); + printf("D2/1 "); } } else { if (datum_a(source, input_position, length)) { @@ -924,15 +898,15 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha input_position++; done = 1; if (debug) { - printf("E2/2 "); + printf("D2/2 "); } } } } - /* Step E3 */ + /* Step D3 */ if ((!done) && (encoding_mode == 'A')) { - if (binary(source, length, input_position)) { + if (binary(source, input_position)) { if (datum_a(source, input_position + 1, length)) { if ((source[input_position] - 128) < 32) { codeword_array[array_length] = 110; // Bin Shift A @@ -953,32 +927,20 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha } done = 1; if (debug) { - printf("E3 "); + printf("D3 "); } } } - /* Step E4 */ + /* Step D4 */ if ((!done) && (encoding_mode == 'A')) { - ahead_b(source, input_position, length, &nx); + int n = ahead_b(source, input_position, length); - if (nx >= 1 && nx <= 6) { - codeword_array[array_length] = 95 + nx; // nx Shift B + if (n <= 6) { + codeword_array[array_length] = 95 + n; // nx Shift B array_length++; - for (i = 0; i < nx; i++) { - if (source[input_position] >= 32) { - codeword_array[array_length] = source[input_position] - 32; - } else if (source[input_position] == 13) { // CR/LF - codeword_array[array_length] = 96; - input_position++; - } else { - switch(source[input_position]) { - case 9: codeword_array[array_length] = 97; break; // HT - case 28: codeword_array[array_length] = 98; break; // FS - case 29: codeword_array[array_length] = 99; break; // GS - case 30: codeword_array[array_length] = 100; break; // RS - } - } + for (i = 0; i < n; i++) { + codeword_array[array_length] = source[input_position] - 32; array_length++; input_position++; } @@ -989,11 +951,11 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha } done = 1; if (debug) { - printf("E4 "); + printf("D4 "); } } - /* Step F1 */ + /* Step E1 */ if ((!done) && (encoding_mode == 'X')) { int n = try_c(source, input_position, length); @@ -1026,21 +988,21 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha } done = 1; if (debug) { - printf("F1 "); + printf("E1 "); } } } - /* Step F2 */ + /* Step E2 */ /* Section 5.2.1.1 para D.2.i states: * "Groups of six codewords, each valued between 0 and 102, are radix converted from * base 103 into five base 259 values..." */ if ((!done) && (encoding_mode == 'X')) { - if (binary(source, length, input_position) - || binary(source, length, input_position + 1) - || binary(source, length, input_position + 2) - || binary(source, length, input_position + 3)) { + if (binary(source, input_position) + || binary(source, input_position + 1) + || binary(source, input_position + 2) + || binary(source, input_position + 3)) { binary_buffer *= 259; binary_buffer += source[input_position]; binary_buffer_size++; @@ -1061,12 +1023,12 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha input_position++; done = 1; if (debug) { - printf("F2 "); + printf("E2 "); } } } - /* Step F3 */ + /* Step E3 */ if ((!done) && (encoding_mode == 'X')) { /* Empty binary buffer */ for (i = 0; i < (binary_buffer_size + 1); i++) { @@ -1081,7 +1043,7 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha binary_buffer = 0; binary_buffer_size = 0; - if (ahead_a(source, input_position, length) > ahead_b(source, input_position, length, NULL)) { + if (ahead_a(source, input_position, length) > ahead_b(source, input_position, length)) { codeword_array[array_length] = 109; // Terminate with Latch to A encoding_mode = 'A'; } else { @@ -1089,12 +1051,12 @@ static int dotcode_encode_message(struct zint_symbol *symbol, const unsigned cha encoding_mode = 'B'; } array_length++; - // done = 1 // As long as last branch not needed + done = 1; if (debug) { - printf("F3 "); + printf("E3 "); } } - } + } while (input_position < length); if (encoding_mode == 'X') { if (binary_buffer_size != 0) { @@ -1130,7 +1092,7 @@ static size_t make_dotstream(unsigned char masked_array[], int array_length, cha /* The rest of the data uses 9-bit dot patterns from Annex C */ for (i = 1; i < array_length; i++) { - bin_append(dot_patterns[masked_array[i]], 9, dot_stream); // NOLINT masked_array values modulo 113 and fully set + bin_append(dot_patterns[masked_array[i]], 9, dot_stream); } return strlen(dot_stream); @@ -1139,7 +1101,7 @@ static size_t make_dotstream(unsigned char masked_array[], int array_length, cha /* Determines if a given dot is a reserved corner dot * to be used by one of the last six bits */ -static int is_corner(int column, int row, int width, int height) { +int is_corner(int column, int row, int width, int height) { int corner = 0; /* Top Left */ @@ -1181,7 +1143,7 @@ static int is_corner(int column, int row, int width, int height) { } /* Place the dots in the symbol*/ -static void fold_dotstream(char dot_stream[], int width, int height, char dot_array[]) { +void fold_dotstream(char dot_stream[], int width, int height, char dot_array[]) { int column, row; int input_position = 0; @@ -1246,7 +1208,7 @@ static void fold_dotstream(char dot_stream[], int width, int height, char dot_ar } } -static void apply_mask(int mask, int data_length, unsigned char *masked_codeword_array, unsigned char *codeword_array, int ecc_length) { +void apply_mask(int mask, int data_length, unsigned char *masked_codeword_array, unsigned char *codeword_array, int ecc_length, char *dot_stream) { int weight = 0; int j; @@ -1283,7 +1245,7 @@ static void apply_mask(int mask, int data_length, unsigned char *masked_codeword rsencode(data_length + 1, ecc_length, masked_codeword_array); } -static void force_corners(int width, int height, char *dot_array) { +void force_corners(int width, int height, char *dot_array) { if (width % 2) { // "Vertical" symbol dot_array[0] = '1'; @@ -1303,7 +1265,7 @@ static void force_corners(int width, int height, char *dot_array) { } } -INTERNAL int dotcode(struct zint_symbol *symbol, const unsigned char source[], int length) { +int dotcode(struct zint_symbol *symbol, const unsigned char source[], int length) { int i, j, k; size_t jc, n_dots; int data_length, ecc_length; @@ -1315,17 +1277,16 @@ INTERNAL int dotcode(struct zint_symbol *symbol, const unsigned char source[], i int binary_finish = 0; int debug = symbol->debug; int padding_dots, is_first; - int codeword_array_len = length * 4 + 8; /* Allow up to 4 codewords per input + 2 (FNC) + 4 (ECI) + 2 (special char 1st position) */ #ifdef _MSC_VER unsigned char* masked_codeword_array; #endif #ifndef _MSC_VER - unsigned char codeword_array[codeword_array_len]; + unsigned char codeword_array[length * 3]; #else char* dot_stream; char* dot_array; - unsigned char* codeword_array = (unsigned char *) _alloca(codeword_array_len); + unsigned char* codeword_array = (unsigned char *) _alloca(length * 3 * sizeof (unsigned char)); #endif /* _MSC_VER */ if (symbol->eci > 811799) { @@ -1337,7 +1298,7 @@ INTERNAL int dotcode(struct zint_symbol *symbol, const unsigned char source[], i ecc_length = 3 + (data_length / 2); - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("Codeword length = %d, ECC length = %d\n", data_length, ecc_length); printf("Codewords: "); for (i = 0; i < data_length; i++) { @@ -1345,11 +1306,6 @@ INTERNAL int dotcode(struct zint_symbol *symbol, const unsigned char source[], i } printf("\n"); } -#ifdef ZINT_TEST - if (debug & ZINT_DEBUG_TEST) { - debug_test_codeword_dump(symbol, codeword_array, data_length); - } -#endif min_dots = 9 * (data_length + 3 + (data_length / 2)) + 2; min_area = min_dots * 2; @@ -1404,10 +1360,6 @@ INTERNAL int dotcode(struct zint_symbol *symbol, const unsigned char source[], i } } - if (debug & ZINT_DEBUG_PRINT) { - printf("Width = %d, Height = %d\n", width, height); - } - if ((height > 200) || (width > 200)) { strcpy(symbol->errtxt, "526: Specified symbol size is too large"); return ZINT_ERROR_INVALID_OPTION; @@ -1458,7 +1410,6 @@ INTERNAL int dotcode(struct zint_symbol *symbol, const unsigned char source[], i ecc_length = 3 + (data_length / 2); - #ifndef _MSC_VER unsigned char masked_codeword_array[data_length + 1 + ecc_length]; #else @@ -1468,7 +1419,7 @@ INTERNAL int dotcode(struct zint_symbol *symbol, const unsigned char source[], i /* Evaluate data mask options */ for (i = 0; i < 4; i++) { - apply_mask(i, data_length, masked_codeword_array, codeword_array, ecc_length); + apply_mask(i, data_length, masked_codeword_array, codeword_array, ecc_length, dot_stream); dot_stream_length = make_dotstream(masked_codeword_array, (data_length + ecc_length + 1), dot_stream); @@ -1481,7 +1432,7 @@ INTERNAL int dotcode(struct zint_symbol *symbol, const unsigned char source[], i mask_score[i] = score_array(dot_array, height, width); - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("Mask %d score is %d\n", i, mask_score[i]); } } @@ -1500,7 +1451,7 @@ INTERNAL int dotcode(struct zint_symbol *symbol, const unsigned char source[], i if (best_mask <= (height * width) / 2) { for (i = 0; i < 4; i++) { - apply_mask(i, data_length, masked_codeword_array, codeword_array, ecc_length); + apply_mask(i, data_length, masked_codeword_array, codeword_array, ecc_length, dot_stream); dot_stream_length = make_dotstream(masked_codeword_array, (data_length + ecc_length + 1), dot_stream); @@ -1515,7 +1466,7 @@ INTERNAL int dotcode(struct zint_symbol *symbol, const unsigned char source[], i mask_score[i + 4] = score_array(dot_array, height, width); - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("Mask %d score is %d\n", i + 4, mask_score[i + 4]); } } @@ -1528,12 +1479,12 @@ INTERNAL int dotcode(struct zint_symbol *symbol, const unsigned char source[], i } } - if (debug & ZINT_DEBUG_PRINT) { - printf("Applying mask %d, high_score %d\n", best_mask, high_score); + if (debug) { + printf("Applying mask %d\n", best_mask); } /* Apply best mask */ - apply_mask(best_mask % 4, data_length, masked_codeword_array, codeword_array, ecc_length); + apply_mask(best_mask % 4, data_length, masked_codeword_array, codeword_array, ecc_length, dot_stream); dot_stream_length = make_dotstream(masked_codeword_array, (data_length + ecc_length + 1), dot_stream); @@ -1567,3 +1518,4 @@ INTERNAL int dotcode(struct zint_symbol *symbol, const unsigned char source[], i return 0; } + diff --git a/backend/eci.c b/backend/eci.c index 4227790..22b6b0f 100644 --- a/backend/eci.c +++ b/backend/eci.c @@ -1,7 +1,7 @@ /* eci.c - Extended Channel Interpretations libzint - the open source barcode library - Copyright (C) 2009 - 2020 Robin Stuart + Copyright (C) 2009-2017 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -28,18 +28,18 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ #include #include +#include #include "eci.h" -#include "common.h" +#include "zint.h" #ifdef _MSC_VER #include #endif /* Convert Unicode to other character encodings */ -INTERNAL int utf_to_eci(const int eci, const unsigned char source[], unsigned char dest[], size_t *length) { +int utf_to_eci(const int eci, const unsigned char source[], unsigned char dest[], size_t *length) { int in_posn; int out_posn; int ext; @@ -69,7 +69,7 @@ INTERNAL int utf_to_eci(const int eci, const unsigned char source[], unsigned ch bytelen = 2; glyph = (source[in_posn] & 0x1f) << 6; - if ((int) *length < (in_posn + 2)) { + if (*length < (in_posn + 2)) { return ZINT_ERROR_INVALID_DATA; } @@ -85,11 +85,11 @@ INTERNAL int utf_to_eci(const int eci, const unsigned char source[], unsigned ch bytelen = 3; glyph = (source[in_posn] & 0x0f) << 12; - if ((int) *length < (in_posn + 2)) { + if (*length < (in_posn + 2)) { return ZINT_ERROR_INVALID_DATA; } - if ((int) *length < (in_posn + 3)) { + if (*length < (in_posn + 3)) { return ZINT_ERROR_INVALID_DATA; } @@ -245,7 +245,7 @@ INTERNAL int utf_to_eci(const int eci, const unsigned char source[], unsigned ch in_posn += bytelen; out_posn++; - } while (in_posn < (int) *length); + } while (in_posn < *length); dest[out_posn] = '\0'; *length = out_posn; @@ -253,7 +253,7 @@ INTERNAL int utf_to_eci(const int eci, const unsigned char source[], unsigned ch } /* Find the lowest ECI mode which will encode a given set of Unicode text */ -INTERNAL int get_best_eci(unsigned char source[], size_t length) { +int get_best_eci(unsigned char source[], size_t length) { int eci = 3; #ifndef _MSC_VER @@ -271,3 +271,5 @@ INTERNAL int get_best_eci(unsigned char source[], size_t length) { return 26; // If all of these fail, use Unicode! } + + diff --git a/backend/emf.c b/backend/emf.c index bd6f6a2..e6c799d 100644 --- a/backend/emf.c +++ b/backend/emf.c @@ -1,7 +1,7 @@ /* emf.c - Support for Microsoft Enhanced Metafile Format libzint - the open source barcode library - Copyright (C) 2016 - 2020 Robin Stuart + Copyright (C) 2016-2018 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -28,7 +28,6 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ /* Developed according to [MS-EMF] - v20160714, Released July 14, 2016 * and [MS-WMF] - v20160714, Released July 14, 2016 */ @@ -42,52 +41,7 @@ #include "common.h" #include "emf.h" -int colour_to_red(int colour) { - int return_val = 0; - - switch(colour) { - case 0: // White - case 3: // Magenta - case 4: // Red - case 5: // Yellow - return_val = 255; - break; - } - - return return_val; -} - -int colour_to_green(int colour) { - int return_val = 0; - - switch(colour) { - case 0: // White - case 1: // Cyan - case 5: // Yellow - case 6: // Green - return_val = 255; - break; - } - - return return_val; -} - -int colour_to_blue(int colour) { - int return_val = 0; - - switch(colour) { - case 0: // White - case 1: // Cyan - case 2: // Blue - case 3: // Magenta - return_val = 255; - break; - } - - return return_val; -} - -static int count_rectangles(struct zint_symbol *symbol) { +int count_rectangles(struct zint_symbol *symbol) { int rectangles = 0; struct zint_vector_rect *rect; @@ -100,7 +54,7 @@ static int count_rectangles(struct zint_symbol *symbol) { return rectangles; } -static int count_circles(struct zint_symbol *symbol) { +int count_circles(struct zint_symbol *symbol) { int circles = 0; struct zint_vector_circle *circ; @@ -113,7 +67,7 @@ static int count_circles(struct zint_symbol *symbol) { return circles; } -static int count_hexagons(struct zint_symbol *symbol) { +int count_hexagons(struct zint_symbol *symbol) { int hexagons = 0; struct zint_vector_hexagon *hex; @@ -126,7 +80,7 @@ static int count_hexagons(struct zint_symbol *symbol) { return hexagons; } -static int count_strings(struct zint_symbol *symbol) { +int count_strings(struct zint_symbol *symbol) { int strings = 0; struct zint_vector_string *str; @@ -139,7 +93,7 @@ static int count_strings(struct zint_symbol *symbol) { return strings; } -static void utfle_copy(unsigned char *output, unsigned char *input, int length) { +void utfle_copy(unsigned char *output, unsigned char *input, int length) { int i; int o; @@ -163,7 +117,7 @@ static void utfle_copy(unsigned char *output, unsigned char *input, int length) } while (i < length); } -static int bump_up(int input) { +int bump_up(int input) { /* Strings length must be a multiple of 4 bytes */ if ((input % 2) == 1) { input++; @@ -171,7 +125,7 @@ static int bump_up(int input) { return input; } -INTERNAL int emf_plot(struct zint_symbol *symbol) { +int emf_plot(struct zint_symbol *symbol) { int i,j; FILE *emf_file; int fgred, fggrn, fgblu, bgred, bggrn, bgblu; @@ -182,8 +136,6 @@ INTERNAL int emf_plot(struct zint_symbol *symbol) { int string_count, this_text; int bytecount, recordcount; float radius; - int colours_used = 0; - int rectangle_count_bycolour[8]; unsigned char *this_string[6]; uint32_t spacing; @@ -198,10 +150,8 @@ INTERNAL int emf_plot(struct zint_symbol *symbol) { emr_eof_t emr_eof; emr_createbrushindirect_t emr_createbrushindirect_fg; emr_createbrushindirect_t emr_createbrushindirect_bg; - emr_createbrushindirect_t emr_createbrushindirect_colour[8]; // Used for colour symbols only emr_selectobject_t emr_selectobject_fgbrush; emr_selectobject_t emr_selectobject_bgbrush; - emr_selectobject_t emr_selectobject_colour[8]; // Used for colour symbols only emr_createpen_t emr_createpen; emr_selectobject_t emr_selectobject_pen; emr_rectangle_t background; @@ -230,36 +180,20 @@ INTERNAL int emf_plot(struct zint_symbol *symbol) { string_count = count_strings(symbol); #ifndef _MSC_VER - emr_rectangle_t rectangle[rectangle_count ? rectangle_count : 1]; // Avoid sanitize runtime error by making always non-zero - emr_ellipse_t circle[circle_count ? circle_count : 1]; - emr_polygon_t hexagon[hexagon_count ? hexagon_count : 1]; - emr_exttextoutw_t text[string_count ? string_count: 1]; + emr_rectangle_t rectangle[rectangle_count]; + emr_ellipse_t circle[circle_count]; + emr_polygon_t hexagon[hexagon_count]; + emr_exttextoutw_t text[string_count]; #else rectangle = (emr_rectangle_t*) _alloca(rectangle_count * sizeof (emr_rectangle_t)); circle = (emr_ellipse_t*) _alloca(circle_count * sizeof (emr_ellipse_t)); hexagon = (emr_polygon_t*) _alloca(hexagon_count * sizeof (emr_polygon_t)); text = (emr_exttextoutw_t*) _alloca(string_count * sizeof (emr_exttextoutw_t)); #endif - - //Calculate how many coloured rectangles - if (symbol->symbology == BARCODE_ULTRA) { - for (i = 0; i < 8; i++) { - rectangle_count_bycolour[i] = 0; - } - - rect = symbol->vector->rectangles; - while (rect) { - if (rectangle_count_bycolour[rect->colour] == 0) { - colours_used++; - } - rectangle_count_bycolour[rect->colour]++; - rect = rect->next; - } - } - + /* Header */ emr_header.type = 0x00000001; // EMR_HEADER - emr_header.size = 108; // Including extensions + emr_header.size = 88; // Assuming no additional data in header emr_header.emf_header.bounds.left = 0; emr_header.emf_header.bounds.right = ceil(symbol->vector->width); emr_header.emf_header.bounds.bottom = ceil(symbol->vector->height); @@ -279,20 +213,25 @@ INTERNAL int emf_plot(struct zint_symbol *symbol) { emr_header.emf_header.device.cy = 1000; emr_header.emf_header.millimeters.cx = 300; emr_header.emf_header.millimeters.cy = 300; - /* HeaderExtension1 */ - emr_header.emf_header.cb_pixel_format = 0x0000; // None set - emr_header.emf_header.off_pixel_format = 0x0000; // None set - emr_header.emf_header.b_open_gl = 0x0000; // OpenGL not present - /* HeaderExtension2 */ - emr_header.emf_header.micrometers.cx = 0; - emr_header.emf_header.micrometers.cy = 0; - bytecount = 108; + bytecount = 88; recordcount = 1; /* Create Brushes */ + emr_createbrushindirect_fg.type = 0x00000027; // EMR_CREATEBRUSHINDIRECT + emr_createbrushindirect_fg.size = 24; + emr_createbrushindirect_fg.ih_brush = 1; + emr_createbrushindirect_fg.log_brush.brush_style = 0x0000; // BS_SOLID + emr_createbrushindirect_fg.log_brush.color.red = fgred; + emr_createbrushindirect_fg.log_brush.color.green = fggrn; + emr_createbrushindirect_fg.log_brush.color.blue = fgblu; + emr_createbrushindirect_fg.log_brush.color.reserved = 0; + emr_createbrushindirect_fg.log_brush.brush_hatch = 0x0006; // HS_SOLIDCLR + bytecount += 24; + recordcount++; + emr_createbrushindirect_bg.type = 0x00000027; // EMR_CREATEBRUSHINDIRECT emr_createbrushindirect_bg.size = 24; - emr_createbrushindirect_bg.ih_brush = 1; + emr_createbrushindirect_bg.ih_brush = 2; emr_createbrushindirect_bg.log_brush.brush_style = 0x0000; // BS_SOLID emr_createbrushindirect_bg.log_brush.color.red = bgred; emr_createbrushindirect_bg.log_brush.color.green = bggrn; @@ -302,60 +241,22 @@ INTERNAL int emf_plot(struct zint_symbol *symbol) { bytecount += 24; recordcount++; - if (symbol->symbology == BARCODE_ULTRA) { - for (i = 0; i < 8; i++) { - emr_createbrushindirect_colour[i].type = 0x00000027; // EMR_CREATEBRUSHINDIRECT - emr_createbrushindirect_colour[i].size = 24; - emr_createbrushindirect_colour[i].ih_brush = 2 + i; - emr_createbrushindirect_colour[i].log_brush.brush_style = 0x0000; // BS_SOLID - emr_createbrushindirect_colour[i].log_brush.color.red = colour_to_red(i); - emr_createbrushindirect_colour[i].log_brush.color.green = colour_to_green(i); - emr_createbrushindirect_colour[i].log_brush.color.blue = colour_to_blue(i); - emr_createbrushindirect_colour[i].log_brush.color.reserved = 0; - emr_createbrushindirect_colour[i].log_brush.brush_hatch = 0x0006; // HS_SOLIDCLR - } - bytecount += colours_used * 24; - recordcount += colours_used; - } else { - emr_createbrushindirect_fg.type = 0x00000027; // EMR_CREATEBRUSHINDIRECT - emr_createbrushindirect_fg.size = 24; - emr_createbrushindirect_fg.ih_brush = 2; - emr_createbrushindirect_fg.log_brush.brush_style = 0x0000; // BS_SOLID - emr_createbrushindirect_fg.log_brush.color.red = fgred; - emr_createbrushindirect_fg.log_brush.color.green = fggrn; - emr_createbrushindirect_fg.log_brush.color.blue = fgblu; - emr_createbrushindirect_fg.log_brush.color.reserved = 0; - emr_createbrushindirect_fg.log_brush.brush_hatch = 0x0006; // HS_SOLIDCLR - bytecount += 24; - recordcount++; - } + emr_selectobject_fgbrush.type = 0x00000025; // EMR_SELECTOBJECT + emr_selectobject_fgbrush.size = 12; + emr_selectobject_fgbrush.ih_object = 1; + bytecount += 12; + recordcount++; emr_selectobject_bgbrush.type = 0x00000025; // EMR_SELECTOBJECT emr_selectobject_bgbrush.size = 12; - emr_selectobject_bgbrush.ih_object = 1; + emr_selectobject_bgbrush.ih_object = 2; bytecount += 12; recordcount++; - if (symbol->symbology == BARCODE_ULTRA) { - for (i = 0; i < 8; i++) { - emr_selectobject_colour[i].type = 0x00000025; // EMR_SELECTOBJECT - emr_selectobject_colour[i].size = 12; - emr_selectobject_colour[i].ih_object = 2 + i; - } - bytecount += colours_used * 12; - recordcount += colours_used; - } else { - emr_selectobject_fgbrush.type = 0x00000025; // EMR_SELECTOBJECT - emr_selectobject_fgbrush.size = 12; - emr_selectobject_fgbrush.ih_object = 2; - bytecount += 12; - recordcount++; - } - /* Create Pens */ emr_createpen.type = 0x00000026; // EMR_CREATEPEN emr_createpen.size = 28; - emr_createpen.ih_pen = 10; + emr_createpen.ih_pen = 3; emr_createpen.log_pen.pen_style = 0x00000005; // PS_NULL emr_createpen.log_pen.width.x = 1; emr_createpen.log_pen.width.y = 0; // ignored @@ -368,7 +269,7 @@ INTERNAL int emf_plot(struct zint_symbol *symbol) { emr_selectobject_pen.type = 0x00000025; // EMR_SELECTOBJECT emr_selectobject_pen.size = 12; - emr_selectobject_pen.ih_object = 10; + emr_selectobject_pen.ih_object = 3; bytecount += 12; recordcount++; @@ -558,18 +459,8 @@ INTERNAL int emf_plot(struct zint_symbol *symbol) { fwrite(&emr_header, sizeof (emr_header_t), 1, emf_file); + fwrite(&emr_createbrushindirect_fg, sizeof (emr_createbrushindirect_t), 1, emf_file); fwrite(&emr_createbrushindirect_bg, sizeof (emr_createbrushindirect_t), 1, emf_file); - - if (symbol->symbology == BARCODE_ULTRA) { - for (i = 0; i < 8; i++) { - if (rectangle_count_bycolour[i]) { - fwrite(&emr_createbrushindirect_colour[i], sizeof (emr_createbrushindirect_t), 1, emf_file); - } - } - } else { - fwrite(&emr_createbrushindirect_fg, sizeof (emr_createbrushindirect_t), 1, emf_file); - } - fwrite(&emr_createpen, sizeof (emr_createpen_t), 1, emf_file); if (symbol->vector->strings) { @@ -580,29 +471,11 @@ INTERNAL int emf_plot(struct zint_symbol *symbol) { fwrite(&emr_selectobject_pen, sizeof (emr_selectobject_t), 1, emf_file); fwrite(&background, sizeof (emr_rectangle_t), 1, emf_file); - if (symbol->symbology == BARCODE_ULTRA) { - for(i = 0; i < 8; i++) { - if (rectangle_count_bycolour[i]) { - fwrite(&emr_selectobject_colour[i], sizeof (emr_selectobject_t), 1, emf_file); - - rect = symbol->vector->rectangles; - this_rectangle = 0; - while (rect) { - if (rect->colour == i) { - fwrite(&rectangle[this_rectangle], sizeof (emr_rectangle_t), 1, emf_file); - } - this_rectangle++; - rect = rect->next; - } - } - } - } else { - fwrite(&emr_selectobject_fgbrush, sizeof (emr_selectobject_t), 1, emf_file); + fwrite(&emr_selectobject_fgbrush, sizeof (emr_selectobject_t), 1, emf_file); - // Rectangles - for (i = 0; i < rectangle_count; i++) { - fwrite(&rectangle[i], sizeof (emr_rectangle_t), 1, emf_file); - } + // Rectangles + for (i = 0; i < rectangle_count; i++) { + fwrite(&rectangle[i], sizeof (emr_rectangle_t), 1, emf_file); } // Hexagons @@ -630,15 +503,11 @@ INTERNAL int emf_plot(struct zint_symbol *symbol) { } // Text - if (string_count > 0) { - fwrite(&emr_selectobject_font, sizeof (emr_selectobject_t), 1, emf_file); - } - for (i = 0; i < string_count; i++) { spacing = 8 * symbol->scale; + fwrite(&emr_selectobject_font, sizeof (emr_selectobject_t), 1, emf_file); fwrite(&text[i], sizeof (emr_exttextoutw_t), 1, emf_file); - fwrite(this_string[i], bump_up(text[i].w_emr_text.chars + 1) * 2, 1, emf_file); // NOLINT text set 0..(string_count - 1) - free(this_string[i]); + fwrite(this_string[i], bump_up(text[i].w_emr_text.chars + 1) * 2, 1, emf_file); for (j = 0; j < bump_up(text[i].w_emr_text.chars + 1); j++) { fwrite(&spacing, 4, 1, emf_file); } diff --git a/backend/emf.h b/backend/emf.h index 5ecb23d..ffd4521 100644 --- a/backend/emf.h +++ b/backend/emf.h @@ -121,12 +121,6 @@ extern "C" { uint32_t n_pal_entries; size_l_t device; size_l_t millimeters; - // HeaderExtension1 Object - uint32_t cb_pixel_format; - uint32_t off_pixel_format; - uint32_t b_open_gl; - // HeaderExtension2 Object - size_l_t micrometers; } emf_header_t; typedef struct emr_header { diff --git a/backend/gb18030.c b/backend/gb18030.c deleted file mode 100644 index ae67fd7..0000000 --- a/backend/gb18030.c +++ /dev/null @@ -1,2968 +0,0 @@ -/* - libzint - the open source barcode library - Copyright (C) 2008-2020 Robin Stuart - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - 3. Neither the name of the project nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - SUCH DAMAGE. - */ -/* vim: set ts=4 sw=4 et : */ -/* - * Adapted from GNU LIBICONV library and patched to allow 2 duplicate mappings - * for compatibility with GB 2312 (GB2312.TXT): - * 1) U+30FB to 0xA1A4 (duplicate of U+00B7) - * 2) U+2015 to 0xA1AA (duplicate of U+2014) - */ -/* - * Copyright (C) 1999-2001, 2005, 2012, 2016 Free Software Foundation, Inc. - * This file is part of the GNU LIBICONV Library. - * - * The GNU LIBICONV Library is free software; you can redistribute it - * and/or modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * The GNU LIBICONV Library 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 GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with the GNU LIBICONV Library; see the file COPYING.LIB. - * If not, see . - */ -#include -#ifdef _MSC_VER -#include -#endif -#include "common.h" -#include "gb2312.h" -#include "gb18030.h" - -INTERNAL int utf_to_eci(const int eci, const unsigned char source[], unsigned char dest[], size_t *length); /* Convert Unicode to other encodings */ - -/* - * CP936 extensions (libiconv-1.16/lib/cp936ext.h) - */ - -static const unsigned short cp936ext_page01[16] = { - 0x0000, 0x0000, 0x0000, 0x0000, 0xa8bd, 0x0000, 0x0000, 0x0000, /*0x40-0x47*/ - 0xa8be, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x48-0x4f*/ -}; -static const unsigned short cp936ext_page02[24] = { - 0x0000, 0xa8bb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x50-0x57*/ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x58-0x5f*/ - 0x0000, 0xa8c0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x60-0x67*/ -}; -static const unsigned short cp936ext_pagefe[24] = { - 0x0000, 0xa6f2, 0x0000, 0xa6f4, 0xa6f5, 0xa6e0, 0xa6e1, 0xa6f0, /*0x30-0x37*/ - 0xa6f1, 0xa6e2, 0xa6e3, 0xa6ee, 0xa6ef, 0xa6e6, 0xa6e7, 0xa6e4, /*0x38-0x3f*/ - 0xa6e5, 0xa6e8, 0xa6e9, 0xa6ea, 0xa6eb, 0x0000, 0x0000, 0x0000, /*0x40-0x47*/ -}; - -static int cp936ext_wctomb(unsigned int* r, unsigned int wc) { - unsigned short c = 0; - if (wc >= 0x0140 && wc < 0x0150) { - c = cp936ext_page01[wc-0x0140]; - } else if (wc >= 0x0250 && wc < 0x0268) { - c = cp936ext_page02[wc-0x0250]; - } else if (wc >= 0xfe30 && wc < 0xfe48) { - c = cp936ext_pagefe[wc-0xfe30]; - } - if (c != 0) { - *r = c; - return 2; - } - return 0; -} - -/* - * GBK extensions (libiconv-1.16/lib/gbkext_inv.h) - */ - -static const unsigned short gbkext_inv_2charset[14313] = { - 0xa840, 0xa841, 0xa842, 0xa95c, 0xa843, 0xa844, 0xa845, 0xa846, - 0xa847, 0xa848, 0xa959, 0xa849, 0xa84a, 0xa84b, 0xa84c, 0xa84d, - 0xa84e, 0xa84f, 0xa850, 0xa851, 0xa852, 0xa892, 0xa853, 0xa854, - 0xa855, 0xa856, 0xa857, 0xa858, 0xa859, 0xa85a, 0xa85b, 0xa85c, - 0xa85d, 0xa85e, 0xa85f, 0xa860, 0xa861, 0xa862, 0xa863, 0xa864, - 0xa865, 0xa866, 0xa867, 0xa868, 0xa869, 0xa86a, 0xa86b, 0xa86c, - 0xa86d, 0xa86e, 0xa86f, 0xa870, 0xa871, 0xa872, 0xa873, 0xa874, - 0xa875, 0xa876, 0xa877, 0xa878, 0xa879, 0xa87a, 0xa87b, 0xa87c, - 0xa87d, 0xa87e, 0xa880, 0xa881, 0xa882, 0xa883, 0xa884, 0xa885, - 0xa886, 0xa887, 0xa888, 0xa889, 0xa88a, 0xa88b, 0xa88c, 0xa88d, - 0xa88e, 0xa88f, 0xa890, 0xa891, 0xa965, 0xa996, 0xa893, 0xa894, - 0xa895, 0xa940, 0xa941, 0xa942, 0xa943, 0xa944, 0xa945, 0xa946, - 0xa947, 0xa948, 0xa961, 0xa962, 0xa966, 0xa967, 0xa960, 0xa963, - 0xa964, 0xa95a, 0xa949, 0xa94a, 0xa94b, 0xa94c, 0xa94d, 0xa94e, - 0xa94f, 0xa950, 0xa951, 0xa952, 0xa953, 0xa954, 0x8140, 0x8141, - 0x8142, 0x8143, 0x8144, 0x8145, 0x8146, 0x8147, 0x8148, 0x8149, - 0x814a, 0x814b, 0x814c, 0x814d, 0x814e, 0x814f, 0x8150, 0x8151, - 0x8152, 0x8153, 0x8154, 0x8155, 0x8156, 0x8157, 0x8158, 0x8159, - 0x815a, 0x815b, 0x815c, 0x815d, 0x815e, 0x815f, 0x8160, 0x8161, - 0x8162, 0x8163, 0x8164, 0x8165, 0x8166, 0x8167, 0x8168, 0x8169, - 0x816a, 0x816b, 0x816c, 0x816d, 0x816e, 0x816f, 0x8170, 0x8171, - 0x8172, 0x8173, 0x8174, 0x8175, 0x8176, 0x8177, 0x8178, 0x8179, - 0x817a, 0x817b, 0x817c, 0x817d, 0x817e, 0x8180, 0x8181, 0x8182, - 0x8183, 0x8184, 0x8185, 0x8186, 0x8187, 0x8188, 0x8189, 0x818a, - 0x818b, 0x818c, 0x818d, 0x818e, 0x818f, 0x8190, 0x8191, 0x8192, - 0x8193, 0x8194, 0x8195, 0x8196, 0x8197, 0x8198, 0x8199, 0x819a, - 0x819b, 0x819c, 0x819d, 0x819e, 0x819f, 0x81a0, 0x81a1, 0x81a2, - 0x81a3, 0x81a4, 0x81a5, 0x81a6, 0x81a7, 0x81a8, 0x81a9, 0x81aa, - 0x81ab, 0x81ac, 0x81ad, 0x81ae, 0x81af, 0x81b0, 0x81b1, 0x81b2, - 0x81b3, 0x81b4, 0x81b5, 0x81b6, 0x81b7, 0x81b8, 0x81b9, 0x81ba, - 0x81bb, 0x81bc, 0x81bd, 0x81be, 0x81bf, 0x81c0, 0x81c1, 0x81c2, - 0x81c3, 0x81c4, 0x81c5, 0x81c6, 0x81c7, 0x81c8, 0x81c9, 0x81ca, - 0x81cb, 0x81cc, 0x81cd, 0x81ce, 0x81cf, 0x81d0, 0x81d1, 0x81d2, - 0x81d3, 0x81d4, 0x81d5, 0x81d6, 0x81d7, 0x81d8, 0x81d9, 0x81da, - 0x81db, 0x81dc, 0x81dd, 0x81de, 0x81df, 0x81e0, 0x81e1, 0x81e2, - 0x81e3, 0x81e4, 0x81e5, 0x81e6, 0x81e7, 0x81e8, 0x81e9, 0x81ea, - 0x81eb, 0x81ec, 0x81ed, 0x81ee, 0x81ef, 0x81f0, 0x81f1, 0x81f2, - 0x81f3, 0x81f4, 0x81f5, 0x81f6, 0x81f7, 0x81f8, 0x81f9, 0x81fa, - 0x81fb, 0x81fc, 0x81fd, 0x81fe, 0x8240, 0x8241, 0x8242, 0x8243, - 0x8244, 0x8245, 0x8246, 0x8247, 0x8248, 0x8249, 0x824a, 0x824b, - 0x824c, 0x824d, 0x824e, 0x824f, 0x8250, 0x8251, 0x8252, 0x8253, - 0x8254, 0x8255, 0x8256, 0x8257, 0x8258, 0x8259, 0x825a, 0x825b, - 0x825c, 0x825d, 0x825e, 0x825f, 0x8260, 0x8261, 0x8262, 0x8263, - 0x8264, 0x8265, 0x8266, 0x8267, 0x8268, 0x8269, 0x826a, 0x826b, - 0x826c, 0x826d, 0x826e, 0x826f, 0x8270, 0x8271, 0x8272, 0x8273, - 0x8274, 0x8275, 0x8276, 0x8277, 0x8278, 0x8279, 0x827a, 0x827b, - 0x827c, 0x827d, 0x827e, 0x8280, 0x8281, 0x8282, 0x8283, 0x8284, - 0x8285, 0x8286, 0x8287, 0x8288, 0x8289, 0x828a, 0x828b, 0x828c, - 0x828d, 0x828e, 0x828f, 0x8290, 0x8291, 0x8292, 0x8293, 0x8294, - 0x8295, 0x8296, 0x8297, 0x8298, 0x8299, 0x829a, 0x829b, 0x829c, - 0x829d, 0x829e, 0x829f, 0x82a0, 0x82a1, 0x82a2, 0x82a3, 0x82a4, - 0x82a5, 0x82a6, 0x82a7, 0x82a8, 0x82a9, 0x82aa, 0x82ab, 0x82ac, - 0x82ad, 0x82ae, 0x82af, 0x82b0, 0x82b1, 0x82b2, 0x82b3, 0x82b4, - 0x82b5, 0x82b6, 0x82b7, 0x82b8, 0x82b9, 0x82ba, 0x82bb, 0x82bc, - 0x82bd, 0x82be, 0x82bf, 0x82c0, 0x82c1, 0x82c2, 0x82c3, 0x82c4, - 0x82c5, 0x82c6, 0x82c7, 0x82c8, 0x82c9, 0x82ca, 0x82cb, 0x82cc, - 0x82cd, 0x82ce, 0x82cf, 0x82d0, 0x82d1, 0x82d2, 0x82d3, 0x82d4, - 0x82d5, 0x82d6, 0x82d7, 0x82d8, 0x82d9, 0x82da, 0x82db, 0x82dc, - 0x82dd, 0x82de, 0x82df, 0x82e0, 0x82e1, 0x82e2, 0x82e3, 0x82e4, - 0x82e5, 0x82e6, 0x82e7, 0x82e8, 0x82e9, 0x82ea, 0x82eb, 0x82ec, - 0x82ed, 0x82ee, 0x82ef, 0x82f0, 0x82f1, 0x82f2, 0x82f3, 0x82f4, - 0x82f5, 0x82f6, 0x82f7, 0x82f8, 0x82f9, 0x82fa, 0x82fb, 0x82fc, - 0x82fd, 0x82fe, 0x8340, 0x8341, 0x8342, 0x8343, 0x8344, 0x8345, - 0x8346, 0x8347, 0x8348, 0x8349, 0x834a, 0x834b, 0x834c, 0x834d, - 0x834e, 0x834f, 0x8350, 0x8351, 0x8352, 0x8353, 0x8354, 0x8355, - 0x8356, 0x8357, 0x8358, 0x8359, 0x835a, 0x835b, 0x835c, 0x835d, - 0x835e, 0x835f, 0x8360, 0x8361, 0x8362, 0x8363, 0x8364, 0x8365, - 0x8366, 0x8367, 0x8368, 0x8369, 0x836a, 0x836b, 0x836c, 0x836d, - 0x836e, 0x836f, 0x8370, 0x8371, 0x8372, 0x8373, 0x8374, 0x8375, - 0x8376, 0x8377, 0x8378, 0x8379, 0x837a, 0x837b, 0x837c, 0x837d, - 0x837e, 0x8380, 0x8381, 0x8382, 0x8383, 0x8384, 0x8385, 0x8386, - 0x8387, 0x8388, 0x8389, 0x838a, 0x838b, 0x838c, 0x838d, 0x838e, - 0x838f, 0x8390, 0x8391, 0x8392, 0x8393, 0x8394, 0x8395, 0x8396, - 0x8397, 0x8398, 0x8399, 0x839a, 0x839b, 0x839c, 0x839d, 0x839e, - 0x839f, 0x83a0, 0x83a1, 0x83a2, 0x83a3, 0x83a4, 0x83a5, 0x83a6, - 0x83a7, 0x83a8, 0x83a9, 0x83aa, 0x83ab, 0x83ac, 0x83ad, 0x83ae, - 0x83af, 0x83b0, 0x83b1, 0x83b2, 0x83b3, 0x83b4, 0x83b5, 0x83b6, - 0x83b7, 0x83b8, 0x83b9, 0x83ba, 0x83bb, 0x83bc, 0x83bd, 0x83be, - 0x83bf, 0x83c0, 0x83c1, 0x83c2, 0x83c3, 0x83c4, 0x83c5, 0x83c6, - 0x83c7, 0x83c8, 0x83c9, 0x83ca, 0x83cb, 0x83cc, 0x83cd, 0x83ce, - 0x83cf, 0x83d0, 0x83d1, 0x83d2, 0x83d3, 0x83d4, 0x83d5, 0x83d6, - 0x83d7, 0x83d8, 0x83d9, 0x83da, 0x83db, 0x83dc, 0x83dd, 0x83de, - 0x83df, 0x83e0, 0x83e1, 0x83e2, 0x83e3, 0x83e4, 0x83e5, 0x83e6, - 0x83e7, 0x83e8, 0x83e9, 0x83ea, 0x83eb, 0x83ec, 0x83ed, 0x83ee, - 0x83ef, 0x83f0, 0x83f1, 0x83f2, 0x83f3, 0x83f4, 0x83f5, 0x83f6, - 0x83f7, 0x83f8, 0x83f9, 0x83fa, 0x83fb, 0x83fc, 0x83fd, 0x83fe, - 0x8440, 0x8441, 0x8442, 0x8443, 0x8444, 0x8445, 0x8446, 0x8447, - 0x8448, 0x8449, 0x844a, 0x844b, 0x844c, 0x844d, 0x844e, 0x844f, - 0x8450, 0x8451, 0x8452, 0x8453, 0x8454, 0x8455, 0x8456, 0x8457, - 0x8458, 0x8459, 0x845a, 0x845b, 0x845c, 0x845d, 0x845e, 0x845f, - 0x8460, 0x8461, 0x8462, 0x8463, 0x8464, 0x8465, 0x8466, 0x8467, - 0x8468, 0x8469, 0x846a, 0x846b, 0x846c, 0x846d, 0x846e, 0x846f, - 0x8470, 0x8471, 0x8472, 0x8473, 0x8474, 0x8475, 0x8476, 0x8477, - 0x8478, 0x8479, 0x847a, 0x847b, 0x847c, 0x847d, 0x847e, 0x8480, - 0x8481, 0x8482, 0x8483, 0x8484, 0x8485, 0x8486, 0x8487, 0x8488, - 0x8489, 0x848a, 0x848b, 0x848c, 0x848d, 0x848e, 0x848f, 0x8490, - 0x8491, 0x8492, 0x8493, 0x8494, 0x8495, 0x8496, 0x8497, 0x8498, - 0x8499, 0x849a, 0x849b, 0x849c, 0x849d, 0x849e, 0x849f, 0x84a0, - 0x84a1, 0x84a2, 0x84a3, 0x84a4, 0x84a5, 0x84a6, 0x84a7, 0x84a8, - 0x84a9, 0x84aa, 0x84ab, 0x84ac, 0x84ad, 0x84ae, 0x84af, 0x84b0, - 0x84b1, 0x84b2, 0x84b3, 0x84b4, 0x84b5, 0x84b6, 0x84b7, 0x84b8, - 0x84b9, 0x84ba, 0x84bb, 0x84bc, 0x84bd, 0x84be, 0x84bf, 0x84c0, - 0x84c1, 0x84c2, 0x84c3, 0x84c4, 0x84c5, 0x84c6, 0x84c7, 0x84c8, - 0x84c9, 0x84ca, 0x84cb, 0x84cc, 0x84cd, 0x84ce, 0x84cf, 0x84d0, - 0x84d1, 0x84d2, 0x84d3, 0x84d4, 0x84d5, 0x84d6, 0x84d7, 0x84d8, - 0x84d9, 0x84da, 0x84db, 0x84dc, 0x84dd, 0x84de, 0x84df, 0x84e0, - 0x84e1, 0x84e2, 0x84e3, 0x84e4, 0x84e5, 0x84e6, 0x84e7, 0x84e8, - 0x84e9, 0x84ea, 0x84eb, 0x84ec, 0x84ed, 0x84ee, 0x84ef, 0x84f0, - 0x84f1, 0x84f2, 0x84f3, 0x84f4, 0x84f5, 0x84f6, 0x84f7, 0x84f8, - 0x84f9, 0x84fa, 0x84fb, 0x84fc, 0x84fd, 0x84fe, 0x8540, 0x8541, - 0x8542, 0x8543, 0x8544, 0x8545, 0x8546, 0x8547, 0x8548, 0x8549, - 0x854a, 0x854b, 0x854c, 0x854d, 0x854e, 0x854f, 0x8550, 0x8551, - 0x8552, 0x8553, 0x8554, 0x8555, 0x8556, 0x8557, 0x8558, 0x8559, - 0x855a, 0x855b, 0x855c, 0x855d, 0x855e, 0x855f, 0x8560, 0x8561, - 0x8562, 0x8563, 0x8564, 0x8565, 0x8566, 0x8567, 0x8568, 0x8569, - 0x856a, 0x856b, 0x856c, 0x856d, 0x856e, 0x856f, 0x8570, 0x8571, - 0x8572, 0x8573, 0x8574, 0x8575, 0x8576, 0x8577, 0x8578, 0x8579, - 0x857a, 0x857b, 0x857c, 0x857d, 0x857e, 0x8580, 0x8581, 0x8582, - 0x8583, 0x8584, 0x8585, 0x8586, 0x8587, 0x8588, 0x8589, 0x858a, - 0x858b, 0x858c, 0x858d, 0x858e, 0x858f, 0x8590, 0x8591, 0x8592, - 0x8593, 0x8594, 0x8595, 0x8596, 0x8597, 0x8598, 0x8599, 0x859a, - 0x859b, 0x859c, 0x859d, 0x859e, 0x859f, 0x85a0, 0x85a1, 0x85a2, - 0x85a3, 0x85a4, 0x85a5, 0x85a6, 0x85a7, 0x85a8, 0x85a9, 0x85aa, - 0x85ab, 0x85ac, 0x85ad, 0x85ae, 0x85af, 0x85b0, 0x85b1, 0x85b2, - 0x85b3, 0x85b4, 0x85b5, 0x85b6, 0x85b7, 0x85b8, 0x85b9, 0x85ba, - 0x85bb, 0x85bc, 0x85bd, 0x85be, 0x85bf, 0x85c0, 0x85c1, 0x85c2, - 0x85c3, 0x85c4, 0x85c5, 0x85c6, 0x85c7, 0x85c8, 0x85c9, 0x85ca, - 0x85cb, 0x85cc, 0x85cd, 0x85ce, 0x85cf, 0x85d0, 0x85d1, 0x85d2, - 0x85d3, 0x85d4, 0x85d5, 0x85d6, 0x85d7, 0x85d8, 0x85d9, 0x85da, - 0x85db, 0x85dc, 0x85dd, 0x85de, 0x85df, 0x85e0, 0x85e1, 0x85e2, - 0x85e3, 0x85e4, 0x85e5, 0x85e6, 0x85e7, 0x85e8, 0x85e9, 0x85ea, - 0x85eb, 0x85ec, 0x85ed, 0x85ee, 0x85ef, 0x85f0, 0x85f1, 0x85f2, - 0x85f3, 0x85f4, 0x85f5, 0x85f6, 0x85f7, 0x85f8, 0x85f9, 0x85fa, - 0x85fb, 0x85fc, 0x85fd, 0x85fe, 0x8640, 0x8641, 0x8642, 0x8643, - 0x8644, 0x8645, 0x8646, 0x8647, 0x8648, 0x8649, 0x864a, 0x864b, - 0x864c, 0x864d, 0x864e, 0x864f, 0x8650, 0x8651, 0x8652, 0x8653, - 0x8654, 0x8655, 0x8656, 0x8657, 0x8658, 0x8659, 0x865a, 0x865b, - 0x865c, 0x865d, 0x865e, 0x865f, 0x8660, 0x8661, 0x8662, 0x8663, - 0x8664, 0x8665, 0x8666, 0x8667, 0x8668, 0x8669, 0x866a, 0x866b, - 0x866c, 0x866d, 0x866e, 0x866f, 0x8670, 0x8671, 0x8672, 0x8673, - 0x8674, 0x8675, 0x8676, 0x8677, 0x8678, 0x8679, 0x867a, 0x867b, - 0x867c, 0x867d, 0x867e, 0x8680, 0x8681, 0x8682, 0x8683, 0x8684, - 0x8685, 0x8686, 0x8687, 0x8688, 0x8689, 0x868a, 0x868b, 0x868c, - 0x868d, 0x868e, 0x868f, 0x8690, 0x8691, 0x8692, 0x8693, 0x8694, - 0x8695, 0x8696, 0x8697, 0x8698, 0x8699, 0x869a, 0x869b, 0x869c, - 0x869d, 0x869e, 0x869f, 0x86a0, 0x86a1, 0x86a2, 0x86a3, 0x86a4, - 0x86a5, 0x86a6, 0x86a7, 0x86a8, 0x86a9, 0x86aa, 0x86ab, 0x86ac, - 0x86ad, 0x86ae, 0x86af, 0x86b0, 0x86b1, 0x86b2, 0x86b3, 0x86b4, - 0x86b5, 0x86b6, 0x86b7, 0x86b8, 0x86b9, 0x86ba, 0x86bb, 0x86bc, - 0x86bd, 0x86be, 0x86bf, 0x86c0, 0x86c1, 0x86c2, 0x86c3, 0x86c4, - 0x86c5, 0x86c6, 0x86c7, 0x86c8, 0x86c9, 0x86ca, 0x86cb, 0x86cc, - 0x86cd, 0x86ce, 0x86cf, 0x86d0, 0x86d1, 0x86d2, 0x86d3, 0x86d4, - 0x86d5, 0x86d6, 0x86d7, 0x86d8, 0x86d9, 0x86da, 0x86db, 0x86dc, - 0x86dd, 0x86de, 0x86df, 0x86e0, 0x86e1, 0x86e2, 0x86e3, 0x86e4, - 0x86e5, 0x86e6, 0x86e7, 0x86e8, 0x86e9, 0x86ea, 0x86eb, 0x86ec, - 0x86ed, 0x86ee, 0x86ef, 0x86f0, 0x86f1, 0x86f2, 0x86f3, 0x86f4, - 0x86f5, 0x86f6, 0x86f7, 0x86f8, 0x86f9, 0x86fa, 0x86fb, 0x86fc, - 0x86fd, 0x86fe, 0x8740, 0x8741, 0x8742, 0x8743, 0x8744, 0x8745, - 0x8746, 0x8747, 0x8748, 0x8749, 0x874a, 0x874b, 0x874c, 0x874d, - 0x874e, 0x874f, 0x8750, 0x8751, 0x8752, 0x8753, 0x8754, 0x8755, - 0x8756, 0x8757, 0x8758, 0x8759, 0x875a, 0x875b, 0x875c, 0x875d, - 0x875e, 0x875f, 0x8760, 0x8761, 0x8762, 0x8763, 0x8764, 0x8765, - 0x8766, 0x8767, 0x8768, 0x8769, 0x876a, 0x876b, 0x876c, 0x876d, - 0x876e, 0x876f, 0x8770, 0x8771, 0x8772, 0x8773, 0x8774, 0x8775, - 0x8776, 0x8777, 0x8778, 0x8779, 0x877a, 0x877b, 0x877c, 0x877d, - 0x877e, 0x8780, 0x8781, 0x8782, 0x8783, 0x8784, 0x8785, 0x8786, - 0x8787, 0x8788, 0x8789, 0x878a, 0x878b, 0x878c, 0x878d, 0x878e, - 0x878f, 0x8790, 0x8791, 0x8792, 0x8793, 0x8794, 0x8795, 0x8796, - 0x8797, 0x8798, 0x8799, 0x879a, 0x879b, 0x879c, 0x879d, 0x879e, - 0x879f, 0x87a0, 0x87a1, 0x87a2, 0x87a3, 0x87a4, 0x87a5, 0x87a6, - 0x87a7, 0x87a8, 0x87a9, 0x87aa, 0x87ab, 0x87ac, 0x87ad, 0x87ae, - 0x87af, 0x87b0, 0x87b1, 0x87b2, 0x87b3, 0x87b4, 0x87b5, 0x87b6, - 0x87b7, 0x87b8, 0x87b9, 0x87ba, 0x87bb, 0x87bc, 0x87bd, 0x87be, - 0x87bf, 0x87c0, 0x87c1, 0x87c2, 0x87c3, 0x87c4, 0x87c5, 0x87c6, - 0x87c7, 0x87c8, 0x87c9, 0x87ca, 0x87cb, 0x87cc, 0x87cd, 0x87ce, - 0x87cf, 0x87d0, 0x87d1, 0x87d2, 0x87d3, 0x87d4, 0x87d5, 0x87d6, - 0x87d7, 0x87d8, 0x87d9, 0x87da, 0x87db, 0x87dc, 0x87dd, 0x87de, - 0x87df, 0x87e0, 0x87e1, 0x87e2, 0x87e3, 0x87e4, 0x87e5, 0x87e6, - 0x87e7, 0x87e8, 0x87e9, 0x87ea, 0x87eb, 0x87ec, 0x87ed, 0x87ee, - 0x87ef, 0x87f0, 0x87f1, 0x87f2, 0x87f3, 0x87f4, 0x87f5, 0x87f6, - 0x87f7, 0x87f8, 0x87f9, 0x87fa, 0x87fb, 0x87fc, 0x87fd, 0x87fe, - 0x8840, 0x8841, 0x8842, 0x8843, 0x8844, 0x8845, 0x8846, 0x8847, - 0x8848, 0x8849, 0x884a, 0x884b, 0x884c, 0x884d, 0x884e, 0x884f, - 0x8850, 0x8851, 0x8852, 0x8853, 0x8854, 0x8855, 0x8856, 0x8857, - 0x8858, 0x8859, 0x885a, 0x885b, 0x885c, 0x885d, 0x885e, 0x885f, - 0x8860, 0x8861, 0x8862, 0x8863, 0x8864, 0x8865, 0x8866, 0x8867, - 0x8868, 0x8869, 0x886a, 0x886b, 0x886c, 0x886d, 0x886e, 0x886f, - 0x8870, 0x8871, 0x8872, 0x8873, 0x8874, 0x8875, 0x8876, 0x8877, - 0x8878, 0x8879, 0x887a, 0x887b, 0x887c, 0x887d, 0x887e, 0x8880, - 0x8881, 0x8882, 0x8883, 0x8884, 0x8885, 0x8886, 0x8887, 0x8888, - 0x8889, 0x888a, 0x888b, 0x888c, 0x888d, 0x888e, 0x888f, 0x8890, - 0x8891, 0x8892, 0x8893, 0x8894, 0x8895, 0x8896, 0x8897, 0x8898, - 0x8899, 0x889a, 0x889b, 0x889c, 0x889d, 0x889e, 0x889f, 0x88a0, - 0x88a1, 0x88a2, 0x88a3, 0x88a4, 0x88a5, 0x88a6, 0x88a7, 0x88a8, - 0x88a9, 0x88aa, 0x88ab, 0x88ac, 0x88ad, 0x88ae, 0x88af, 0x88b0, - 0x88b1, 0x88b2, 0x88b3, 0x88b4, 0x88b5, 0x88b6, 0x88b7, 0x88b8, - 0x88b9, 0x88ba, 0x88bb, 0x88bc, 0x88bd, 0x88be, 0x88bf, 0x88c0, - 0x88c1, 0x88c2, 0x88c3, 0x88c4, 0x88c5, 0x88c6, 0x88c7, 0x88c8, - 0x88c9, 0x88ca, 0x88cb, 0x88cc, 0x88cd, 0x88ce, 0x88cf, 0x88d0, - 0x88d1, 0x88d2, 0x88d3, 0x88d4, 0x88d5, 0x88d6, 0x88d7, 0x88d8, - 0x88d9, 0x88da, 0x88db, 0x88dc, 0x88dd, 0x88de, 0x88df, 0x88e0, - 0x88e1, 0x88e2, 0x88e3, 0x88e4, 0x88e5, 0x88e6, 0x88e7, 0x88e8, - 0x88e9, 0x88ea, 0x88eb, 0x88ec, 0x88ed, 0x88ee, 0x88ef, 0x88f0, - 0x88f1, 0x88f2, 0x88f3, 0x88f4, 0x88f5, 0x88f6, 0x88f7, 0x88f8, - 0x88f9, 0x88fa, 0x88fb, 0x88fc, 0x88fd, 0x88fe, 0x8940, 0x8941, - 0x8942, 0x8943, 0x8944, 0x8945, 0x8946, 0x8947, 0x8948, 0x8949, - 0x894a, 0x894b, 0x894c, 0x894d, 0x894e, 0x894f, 0x8950, 0x8951, - 0x8952, 0x8953, 0x8954, 0x8955, 0x8956, 0x8957, 0x8958, 0x8959, - 0x895a, 0x895b, 0x895c, 0x895d, 0x895e, 0x895f, 0x8960, 0x8961, - 0x8962, 0x8963, 0x8964, 0x8965, 0x8966, 0x8967, 0x8968, 0x8969, - 0x896a, 0x896b, 0x896c, 0x896d, 0x896e, 0x896f, 0x8970, 0x8971, - 0x8972, 0x8973, 0x8974, 0x8975, 0x8976, 0x8977, 0x8978, 0x8979, - 0x897a, 0x897b, 0x897c, 0x897d, 0x897e, 0x8980, 0x8981, 0x8982, - 0x8983, 0x8984, 0x8985, 0x8986, 0x8987, 0x8988, 0x8989, 0x898a, - 0x898b, 0x898c, 0x898d, 0x898e, 0x898f, 0x8990, 0x8991, 0x8992, - 0x8993, 0x8994, 0x8995, 0x8996, 0x8997, 0x8998, 0x8999, 0x899a, - 0x899b, 0x899c, 0x899d, 0x899e, 0x899f, 0x89a0, 0x89a1, 0x89a2, - 0x89a3, 0x89a4, 0x89a5, 0x89a6, 0x89a7, 0x89a8, 0x89a9, 0x89aa, - 0x89ab, 0x89ac, 0x89ad, 0x89ae, 0x89af, 0x89b0, 0x89b1, 0x89b2, - 0x89b3, 0x89b4, 0x89b5, 0x89b6, 0x89b7, 0x89b8, 0x89b9, 0x89ba, - 0x89bb, 0x89bc, 0x89bd, 0x89be, 0x89bf, 0x89c0, 0x89c1, 0x89c2, - 0x89c3, 0x89c4, 0x89c5, 0x89c6, 0x89c7, 0x89c8, 0x89c9, 0x89ca, - 0x89cb, 0x89cc, 0x89cd, 0x89ce, 0x89cf, 0x89d0, 0x89d1, 0x89d2, - 0x89d3, 0x89d4, 0x89d5, 0x89d6, 0x89d7, 0x89d8, 0x89d9, 0x89da, - 0x89db, 0x89dc, 0x89dd, 0x89de, 0x89df, 0x89e0, 0x89e1, 0x89e2, - 0x89e3, 0x89e4, 0x89e5, 0x89e6, 0x89e7, 0x89e8, 0x89e9, 0x89ea, - 0x89eb, 0x89ec, 0x89ed, 0x89ee, 0x89ef, 0x89f0, 0x89f1, 0x89f2, - 0x89f3, 0x89f4, 0x89f5, 0x89f6, 0x89f7, 0x89f8, 0x89f9, 0x89fa, - 0x89fb, 0x89fc, 0x89fd, 0x89fe, 0x8a40, 0x8a41, 0x8a42, 0x8a43, - 0x8a44, 0x8a45, 0x8a46, 0x8a47, 0x8a48, 0x8a49, 0x8a4a, 0x8a4b, - 0x8a4c, 0x8a4d, 0x8a4e, 0x8a4f, 0x8a50, 0x8a51, 0x8a52, 0x8a53, - 0x8a54, 0x8a55, 0x8a56, 0x8a57, 0x8a58, 0x8a59, 0x8a5a, 0x8a5b, - 0x8a5c, 0x8a5d, 0x8a5e, 0x8a5f, 0x8a60, 0x8a61, 0x8a62, 0x8a63, - 0x8a64, 0x8a65, 0x8a66, 0x8a67, 0x8a68, 0x8a69, 0x8a6a, 0x8a6b, - 0x8a6c, 0x8a6d, 0x8a6e, 0x8a6f, 0x8a70, 0x8a71, 0x8a72, 0x8a73, - 0x8a74, 0x8a75, 0x8a76, 0x8a77, 0x8a78, 0x8a79, 0x8a7a, 0x8a7b, - 0x8a7c, 0x8a7d, 0x8a7e, 0x8a80, 0x8a81, 0x8a82, 0x8a83, 0x8a84, - 0x8a85, 0x8a86, 0x8a87, 0x8a88, 0x8a89, 0x8a8a, 0x8a8b, 0x8a8c, - 0x8a8d, 0x8a8e, 0x8a8f, 0x8a90, 0x8a91, 0x8a92, 0x8a93, 0x8a94, - 0x8a95, 0x8a96, 0x8a97, 0x8a98, 0x8a99, 0x8a9a, 0x8a9b, 0x8a9c, - 0x8a9d, 0x8a9e, 0x8a9f, 0x8aa0, 0x8aa1, 0x8aa2, 0x8aa3, 0x8aa4, - 0x8aa5, 0x8aa6, 0x8aa7, 0x8aa8, 0x8aa9, 0x8aaa, 0x8aab, 0x8aac, - 0x8aad, 0x8aae, 0x8aaf, 0x8ab0, 0x8ab1, 0x8ab2, 0x8ab3, 0x8ab4, - 0x8ab5, 0x8ab6, 0x8ab7, 0x8ab8, 0x8ab9, 0x8aba, 0x8abb, 0x8abc, - 0x8abd, 0x8abe, 0x8abf, 0x8ac0, 0x8ac1, 0x8ac2, 0x8ac3, 0x8ac4, - 0x8ac5, 0x8ac6, 0x8ac7, 0x8ac8, 0x8ac9, 0x8aca, 0x8acb, 0x8acc, - 0x8acd, 0x8ace, 0x8acf, 0x8ad0, 0x8ad1, 0x8ad2, 0x8ad3, 0x8ad4, - 0x8ad5, 0x8ad6, 0x8ad7, 0x8ad8, 0x8ad9, 0x8ada, 0x8adb, 0x8adc, - 0x8add, 0x8ade, 0x8adf, 0x8ae0, 0x8ae1, 0x8ae2, 0x8ae3, 0x8ae4, - 0x8ae5, 0x8ae6, 0x8ae7, 0x8ae8, 0x8ae9, 0x8aea, 0x8aeb, 0x8aec, - 0x8aed, 0x8aee, 0x8aef, 0x8af0, 0x8af1, 0x8af2, 0x8af3, 0x8af4, - 0x8af5, 0x8af6, 0x8af7, 0x8af8, 0x8af9, 0x8afa, 0x8afb, 0x8afc, - 0x8afd, 0x8afe, 0x8b40, 0x8b41, 0x8b42, 0x8b43, 0x8b44, 0x8b45, - 0x8b46, 0x8b47, 0x8b48, 0x8b49, 0x8b4a, 0x8b4b, 0x8b4c, 0x8b4d, - 0x8b4e, 0x8b4f, 0x8b50, 0x8b51, 0x8b52, 0x8b53, 0x8b54, 0x8b55, - 0x8b56, 0x8b57, 0x8b58, 0x8b59, 0x8b5a, 0x8b5b, 0x8b5c, 0x8b5d, - 0x8b5e, 0x8b5f, 0x8b60, 0x8b61, 0x8b62, 0x8b63, 0x8b64, 0x8b65, - 0x8b66, 0x8b67, 0x8b68, 0x8b69, 0x8b6a, 0x8b6b, 0x8b6c, 0x8b6d, - 0x8b6e, 0x8b6f, 0x8b70, 0x8b71, 0x8b72, 0x8b73, 0x8b74, 0x8b75, - 0x8b76, 0x8b77, 0x8b78, 0x8b79, 0x8b7a, 0x8b7b, 0x8b7c, 0x8b7d, - 0x8b7e, 0x8b80, 0x8b81, 0x8b82, 0x8b83, 0x8b84, 0x8b85, 0x8b86, - 0x8b87, 0x8b88, 0x8b89, 0x8b8a, 0x8b8b, 0x8b8c, 0x8b8d, 0x8b8e, - 0x8b8f, 0x8b90, 0x8b91, 0x8b92, 0x8b93, 0x8b94, 0x8b95, 0x8b96, - 0x8b97, 0x8b98, 0x8b99, 0x8b9a, 0x8b9b, 0x8b9c, 0x8b9d, 0x8b9e, - 0x8b9f, 0x8ba0, 0x8ba1, 0x8ba2, 0x8ba3, 0x8ba4, 0x8ba5, 0x8ba6, - 0x8ba7, 0x8ba8, 0x8ba9, 0x8baa, 0x8bab, 0x8bac, 0x8bad, 0x8bae, - 0x8baf, 0x8bb0, 0x8bb1, 0x8bb2, 0x8bb3, 0x8bb4, 0x8bb5, 0x8bb6, - 0x8bb7, 0x8bb8, 0x8bb9, 0x8bba, 0x8bbb, 0x8bbc, 0x8bbd, 0x8bbe, - 0x8bbf, 0x8bc0, 0x8bc1, 0x8bc2, 0x8bc3, 0x8bc4, 0x8bc5, 0x8bc6, - 0x8bc7, 0x8bc8, 0x8bc9, 0x8bca, 0x8bcb, 0x8bcc, 0x8bcd, 0x8bce, - 0x8bcf, 0x8bd0, 0x8bd1, 0x8bd2, 0x8bd3, 0x8bd4, 0x8bd5, 0x8bd6, - 0x8bd7, 0x8bd8, 0x8bd9, 0x8bda, 0x8bdb, 0x8bdc, 0x8bdd, 0x8bde, - 0x8bdf, 0x8be0, 0x8be1, 0x8be2, 0x8be3, 0x8be4, 0x8be5, 0x8be6, - 0x8be7, 0x8be8, 0x8be9, 0x8bea, 0x8beb, 0x8bec, 0x8bed, 0x8bee, - 0x8bef, 0x8bf0, 0x8bf1, 0x8bf2, 0x8bf3, 0x8bf4, 0x8bf5, 0x8bf6, - 0x8bf7, 0x8bf8, 0x8bf9, 0x8bfa, 0x8bfb, 0x8bfc, 0x8bfd, 0x8bfe, - 0x8c40, 0x8c41, 0x8c42, 0x8c43, 0x8c44, 0x8c45, 0x8c46, 0x8c47, - 0x8c48, 0x8c49, 0x8c4a, 0x8c4b, 0x8c4c, 0x8c4d, 0x8c4e, 0x8c4f, - 0x8c50, 0x8c51, 0x8c52, 0x8c53, 0x8c54, 0x8c55, 0x8c56, 0x8c57, - 0x8c58, 0x8c59, 0x8c5a, 0x8c5b, 0x8c5c, 0x8c5d, 0x8c5e, 0x8c5f, - 0x8c60, 0x8c61, 0x8c62, 0x8c63, 0x8c64, 0x8c65, 0x8c66, 0x8c67, - 0x8c68, 0x8c69, 0x8c6a, 0x8c6b, 0x8c6c, 0x8c6d, 0x8c6e, 0x8c6f, - 0x8c70, 0x8c71, 0x8c72, 0x8c73, 0x8c74, 0x8c75, 0x8c76, 0x8c77, - 0x8c78, 0x8c79, 0x8c7a, 0x8c7b, 0x8c7c, 0x8c7d, 0x8c7e, 0x8c80, - 0x8c81, 0x8c82, 0x8c83, 0x8c84, 0x8c85, 0x8c86, 0x8c87, 0x8c88, - 0x8c89, 0x8c8a, 0x8c8b, 0x8c8c, 0x8c8d, 0x8c8e, 0x8c8f, 0x8c90, - 0x8c91, 0x8c92, 0x8c93, 0x8c94, 0x8c95, 0x8c96, 0x8c97, 0x8c98, - 0x8c99, 0x8c9a, 0x8c9b, 0x8c9c, 0x8c9d, 0x8c9e, 0x8c9f, 0x8ca0, - 0x8ca1, 0x8ca2, 0x8ca3, 0x8ca4, 0x8ca5, 0x8ca6, 0x8ca7, 0x8ca8, - 0x8ca9, 0x8caa, 0x8cab, 0x8cac, 0x8cad, 0x8cae, 0x8caf, 0x8cb0, - 0x8cb1, 0x8cb2, 0x8cb3, 0x8cb4, 0x8cb5, 0x8cb6, 0x8cb7, 0x8cb8, - 0x8cb9, 0x8cba, 0x8cbb, 0x8cbc, 0x8cbd, 0x8cbe, 0x8cbf, 0x8cc0, - 0x8cc1, 0x8cc2, 0x8cc3, 0x8cc4, 0x8cc5, 0x8cc6, 0x8cc7, 0x8cc8, - 0x8cc9, 0x8cca, 0x8ccb, 0x8ccc, 0x8ccd, 0x8cce, 0x8ccf, 0x8cd0, - 0x8cd1, 0x8cd2, 0x8cd3, 0x8cd4, 0x8cd5, 0x8cd6, 0x8cd7, 0x8cd8, - 0x8cd9, 0x8cda, 0x8cdb, 0x8cdc, 0x8cdd, 0x8cde, 0x8cdf, 0x8ce0, - 0x8ce1, 0x8ce2, 0x8ce3, 0x8ce4, 0x8ce5, 0x8ce6, 0x8ce7, 0x8ce8, - 0x8ce9, 0x8cea, 0x8ceb, 0x8cec, 0x8ced, 0x8cee, 0x8cef, 0x8cf0, - 0x8cf1, 0x8cf2, 0x8cf3, 0x8cf4, 0x8cf5, 0x8cf6, 0x8cf7, 0x8cf8, - 0x8cf9, 0x8cfa, 0x8cfb, 0x8cfc, 0x8cfd, 0x8cfe, 0x8d40, 0x8d41, - 0x8d42, 0x8d43, 0x8d44, 0x8d45, 0x8d46, 0x8d47, 0x8d48, 0x8d49, - 0x8d4a, 0x8d4b, 0x8d4c, 0x8d4d, 0x8d4e, 0x8d4f, 0x8d50, 0x8d51, - 0x8d52, 0x8d53, 0x8d54, 0x8d55, 0x8d56, 0x8d57, 0x8d58, 0x8d59, - 0x8d5a, 0x8d5b, 0x8d5c, 0x8d5d, 0x8d5e, 0x8d5f, 0x8d60, 0x8d61, - 0x8d62, 0x8d63, 0x8d64, 0x8d65, 0x8d66, 0x8d67, 0x8d68, 0x8d69, - 0x8d6a, 0x8d6b, 0x8d6c, 0x8d6d, 0x8d6e, 0x8d6f, 0x8d70, 0x8d71, - 0x8d72, 0x8d73, 0x8d74, 0x8d75, 0x8d76, 0x8d77, 0x8d78, 0x8d79, - 0x8d7a, 0x8d7b, 0x8d7c, 0x8d7d, 0x8d7e, 0x8d80, 0x8d81, 0x8d82, - 0x8d83, 0x8d84, 0x8d85, 0x8d86, 0x8d87, 0x8d88, 0x8d89, 0x8d8a, - 0x8d8b, 0x8d8c, 0x8d8d, 0x8d8e, 0x8d8f, 0x8d90, 0x8d91, 0x8d92, - 0x8d93, 0x8d94, 0x8d95, 0x8d96, 0x8d97, 0x8d98, 0x8d99, 0x8d9a, - 0x8d9b, 0x8d9c, 0x8d9d, 0x8d9e, 0x8d9f, 0x8da0, 0x8da1, 0x8da2, - 0x8da3, 0x8da4, 0x8da5, 0x8da6, 0x8da7, 0x8da8, 0x8da9, 0x8daa, - 0x8dab, 0x8dac, 0x8dad, 0x8dae, 0x8daf, 0x8db0, 0x8db1, 0x8db2, - 0x8db3, 0x8db4, 0x8db5, 0x8db6, 0x8db7, 0x8db8, 0x8db9, 0x8dba, - 0x8dbb, 0x8dbc, 0x8dbd, 0x8dbe, 0x8dbf, 0x8dc0, 0x8dc1, 0x8dc2, - 0x8dc3, 0x8dc4, 0x8dc5, 0x8dc6, 0x8dc7, 0x8dc8, 0x8dc9, 0x8dca, - 0x8dcb, 0x8dcc, 0x8dcd, 0x8dce, 0x8dcf, 0x8dd0, 0x8dd1, 0x8dd2, - 0x8dd3, 0x8dd4, 0x8dd5, 0x8dd6, 0x8dd7, 0x8dd8, 0x8dd9, 0x8dda, - 0x8ddb, 0x8ddc, 0x8ddd, 0x8dde, 0x8ddf, 0x8de0, 0x8de1, 0x8de2, - 0x8de3, 0x8de4, 0x8de5, 0x8de6, 0x8de7, 0x8de8, 0x8de9, 0x8dea, - 0x8deb, 0x8dec, 0x8ded, 0x8dee, 0x8def, 0x8df0, 0x8df1, 0x8df2, - 0x8df3, 0x8df4, 0x8df5, 0x8df6, 0x8df7, 0x8df8, 0x8df9, 0x8dfa, - 0x8dfb, 0x8dfc, 0x8dfd, 0x8dfe, 0x8e40, 0x8e41, 0x8e42, 0x8e43, - 0x8e44, 0x8e45, 0x8e46, 0x8e47, 0x8e48, 0x8e49, 0x8e4a, 0x8e4b, - 0x8e4c, 0x8e4d, 0x8e4e, 0x8e4f, 0x8e50, 0x8e51, 0x8e52, 0x8e53, - 0x8e54, 0x8e55, 0x8e56, 0x8e57, 0x8e58, 0x8e59, 0x8e5a, 0x8e5b, - 0x8e5c, 0x8e5d, 0x8e5e, 0x8e5f, 0x8e60, 0x8e61, 0x8e62, 0x8e63, - 0x8e64, 0x8e65, 0x8e66, 0x8e67, 0x8e68, 0x8e69, 0x8e6a, 0x8e6b, - 0x8e6c, 0x8e6d, 0x8e6e, 0x8e6f, 0x8e70, 0x8e71, 0x8e72, 0x8e73, - 0x8e74, 0x8e75, 0x8e76, 0x8e77, 0x8e78, 0x8e79, 0x8e7a, 0x8e7b, - 0x8e7c, 0x8e7d, 0x8e7e, 0x8e80, 0x8e81, 0x8e82, 0x8e83, 0x8e84, - 0x8e85, 0x8e86, 0x8e87, 0x8e88, 0x8e89, 0x8e8a, 0x8e8b, 0x8e8c, - 0x8e8d, 0x8e8e, 0x8e8f, 0x8e90, 0x8e91, 0x8e92, 0x8e93, 0x8e94, - 0x8e95, 0x8e96, 0x8e97, 0x8e98, 0x8e99, 0x8e9a, 0x8e9b, 0x8e9c, - 0x8e9d, 0x8e9e, 0x8e9f, 0x8ea0, 0x8ea1, 0x8ea2, 0x8ea3, 0x8ea4, - 0x8ea5, 0x8ea6, 0x8ea7, 0x8ea8, 0x8ea9, 0x8eaa, 0x8eab, 0x8eac, - 0x8ead, 0x8eae, 0x8eaf, 0x8eb0, 0x8eb1, 0x8eb2, 0x8eb3, 0x8eb4, - 0x8eb5, 0x8eb6, 0x8eb7, 0x8eb8, 0x8eb9, 0x8eba, 0x8ebb, 0x8ebc, - 0x8ebd, 0x8ebe, 0x8ebf, 0x8ec0, 0x8ec1, 0x8ec2, 0x8ec3, 0x8ec4, - 0x8ec5, 0x8ec6, 0x8ec7, 0x8ec8, 0x8ec9, 0x8eca, 0x8ecb, 0x8ecc, - 0x8ecd, 0x8ece, 0x8ecf, 0x8ed0, 0x8ed1, 0x8ed2, 0x8ed3, 0x8ed4, - 0x8ed5, 0x8ed6, 0x8ed7, 0x8ed8, 0x8ed9, 0x8eda, 0x8edb, 0x8edc, - 0x8edd, 0x8ede, 0x8edf, 0x8ee0, 0x8ee1, 0x8ee2, 0x8ee3, 0x8ee4, - 0x8ee5, 0x8ee6, 0x8ee7, 0x8ee8, 0x8ee9, 0x8eea, 0x8eeb, 0x8eec, - 0x8eed, 0x8eee, 0x8eef, 0x8ef0, 0x8ef1, 0x8ef2, 0x8ef3, 0x8ef4, - 0x8ef5, 0x8ef6, 0x8ef7, 0x8ef8, 0x8ef9, 0x8efa, 0x8efb, 0x8efc, - 0x8efd, 0x8efe, 0x8f40, 0x8f41, 0x8f42, 0x8f43, 0x8f44, 0x8f45, - 0x8f46, 0x8f47, 0x8f48, 0x8f49, 0x8f4a, 0x8f4b, 0x8f4c, 0x8f4d, - 0x8f4e, 0x8f4f, 0x8f50, 0x8f51, 0x8f52, 0x8f53, 0x8f54, 0x8f55, - 0x8f56, 0x8f57, 0x8f58, 0x8f59, 0x8f5a, 0x8f5b, 0x8f5c, 0x8f5d, - 0x8f5e, 0x8f5f, 0x8f60, 0x8f61, 0x8f62, 0x8f63, 0x8f64, 0x8f65, - 0x8f66, 0x8f67, 0x8f68, 0x8f69, 0x8f6a, 0x8f6b, 0x8f6c, 0x8f6d, - 0x8f6e, 0x8f6f, 0x8f70, 0x8f71, 0x8f72, 0x8f73, 0x8f74, 0x8f75, - 0x8f76, 0x8f77, 0x8f78, 0x8f79, 0x8f7a, 0x8f7b, 0x8f7c, 0x8f7d, - 0x8f7e, 0x8f80, 0x8f81, 0x8f82, 0x8f83, 0x8f84, 0x8f85, 0x8f86, - 0x8f87, 0x8f88, 0x8f89, 0x8f8a, 0x8f8b, 0x8f8c, 0x8f8d, 0x8f8e, - 0x8f8f, 0x8f90, 0x8f91, 0x8f92, 0x8f93, 0x8f94, 0x8f95, 0x8f96, - 0x8f97, 0x8f98, 0x8f99, 0x8f9a, 0x8f9b, 0x8f9c, 0x8f9d, 0x8f9e, - 0x8f9f, 0x8fa0, 0x8fa1, 0x8fa2, 0x8fa3, 0x8fa4, 0x8fa5, 0x8fa6, - 0x8fa7, 0x8fa8, 0x8fa9, 0x8faa, 0x8fab, 0x8fac, 0x8fad, 0x8fae, - 0x8faf, 0x8fb0, 0x8fb1, 0x8fb2, 0x8fb3, 0x8fb4, 0x8fb5, 0x8fb6, - 0x8fb7, 0x8fb8, 0x8fb9, 0x8fba, 0x8fbb, 0x8fbc, 0x8fbd, 0x8fbe, - 0x8fbf, 0x8fc0, 0x8fc1, 0x8fc2, 0x8fc3, 0x8fc4, 0x8fc5, 0x8fc6, - 0x8fc7, 0x8fc8, 0x8fc9, 0x8fca, 0x8fcb, 0x8fcc, 0x8fcd, 0x8fce, - 0x8fcf, 0x8fd0, 0x8fd1, 0x8fd2, 0x8fd3, 0x8fd4, 0x8fd5, 0x8fd6, - 0x8fd7, 0x8fd8, 0x8fd9, 0x8fda, 0x8fdb, 0x8fdc, 0x8fdd, 0x8fde, - 0x8fdf, 0x8fe0, 0x8fe1, 0x8fe2, 0x8fe3, 0x8fe4, 0x8fe5, 0x8fe6, - 0x8fe7, 0x8fe8, 0x8fe9, 0x8fea, 0x8feb, 0x8fec, 0x8fed, 0x8fee, - 0x8fef, 0x8ff0, 0x8ff1, 0x8ff2, 0x8ff3, 0x8ff4, 0x8ff5, 0x8ff6, - 0x8ff7, 0x8ff8, 0x8ff9, 0x8ffa, 0x8ffb, 0x8ffc, 0x8ffd, 0x8ffe, - 0x9040, 0x9041, 0x9042, 0x9043, 0x9044, 0x9045, 0x9046, 0x9047, - 0x9048, 0x9049, 0x904a, 0x904b, 0x904c, 0x904d, 0x904e, 0x904f, - 0x9050, 0x9051, 0x9052, 0x9053, 0x9054, 0x9055, 0x9056, 0x9057, - 0x9058, 0x9059, 0x905a, 0x905b, 0x905c, 0x905d, 0x905e, 0x905f, - 0x9060, 0x9061, 0x9062, 0x9063, 0x9064, 0x9065, 0x9066, 0x9067, - 0x9068, 0x9069, 0x906a, 0x906b, 0x906c, 0x906d, 0x906e, 0x906f, - 0x9070, 0x9071, 0x9072, 0x9073, 0x9074, 0x9075, 0x9076, 0x9077, - 0x9078, 0x9079, 0x907a, 0x907b, 0x907c, 0x907d, 0x907e, 0x9080, - 0x9081, 0x9082, 0x9083, 0x9084, 0x9085, 0x9086, 0x9087, 0x9088, - 0x9089, 0x908a, 0x908b, 0x908c, 0x908d, 0x908e, 0x908f, 0x9090, - 0x9091, 0x9092, 0x9093, 0x9094, 0x9095, 0x9096, 0x9097, 0x9098, - 0x9099, 0x909a, 0x909b, 0x909c, 0x909d, 0x909e, 0x909f, 0x90a0, - 0x90a1, 0x90a2, 0x90a3, 0x90a4, 0x90a5, 0x90a6, 0x90a7, 0x90a8, - 0x90a9, 0x90aa, 0x90ab, 0x90ac, 0x90ad, 0x90ae, 0x90af, 0x90b0, - 0x90b1, 0x90b2, 0x90b3, 0x90b4, 0x90b5, 0x90b6, 0x90b7, 0x90b8, - 0x90b9, 0x90ba, 0x90bb, 0x90bc, 0x90bd, 0x90be, 0x90bf, 0x90c0, - 0x90c1, 0x90c2, 0x90c3, 0x90c4, 0x90c5, 0x90c6, 0x90c7, 0x90c8, - 0x90c9, 0x90ca, 0x90cb, 0x90cc, 0x90cd, 0x90ce, 0x90cf, 0x90d0, - 0x90d1, 0x90d2, 0x90d3, 0x90d4, 0x90d5, 0x90d6, 0x90d7, 0x90d8, - 0x90d9, 0x90da, 0x90db, 0x90dc, 0x90dd, 0x90de, 0x90df, 0x90e0, - 0x90e1, 0x90e2, 0x90e3, 0x90e4, 0x90e5, 0x90e6, 0x90e7, 0x90e8, - 0x90e9, 0x90ea, 0x90eb, 0x90ec, 0x90ed, 0x90ee, 0x90ef, 0x90f0, - 0x90f1, 0x90f2, 0x90f3, 0x90f4, 0x90f5, 0x90f6, 0x90f7, 0x90f8, - 0x90f9, 0x90fa, 0x90fb, 0x90fc, 0x90fd, 0x90fe, 0x9140, 0x9141, - 0x9142, 0x9143, 0x9144, 0x9145, 0x9146, 0x9147, 0x9148, 0x9149, - 0x914a, 0x914b, 0x914c, 0x914d, 0x914e, 0x914f, 0x9150, 0x9151, - 0x9152, 0x9153, 0x9154, 0x9155, 0x9156, 0x9157, 0x9158, 0x9159, - 0x915a, 0x915b, 0x915c, 0x915d, 0x915e, 0x915f, 0x9160, 0x9161, - 0x9162, 0x9163, 0x9164, 0x9165, 0x9166, 0x9167, 0x9168, 0x9169, - 0x916a, 0x916b, 0x916c, 0x916d, 0x916e, 0x916f, 0x9170, 0x9171, - 0x9172, 0x9173, 0x9174, 0x9175, 0x9176, 0x9177, 0x9178, 0x9179, - 0x917a, 0x917b, 0x917c, 0x917d, 0x917e, 0x9180, 0x9181, 0x9182, - 0x9183, 0x9184, 0x9185, 0x9186, 0x9187, 0x9188, 0x9189, 0x918a, - 0x918b, 0x918c, 0x918d, 0x918e, 0x918f, 0x9190, 0x9191, 0x9192, - 0x9193, 0x9194, 0x9195, 0x9196, 0x9197, 0x9198, 0x9199, 0x919a, - 0x919b, 0x919c, 0x919d, 0x919e, 0x919f, 0x91a0, 0x91a1, 0x91a2, - 0x91a3, 0x91a4, 0x91a5, 0x91a6, 0x91a7, 0x91a8, 0x91a9, 0x91aa, - 0x91ab, 0x91ac, 0x91ad, 0x91ae, 0x91af, 0x91b0, 0x91b1, 0x91b2, - 0x91b3, 0x91b4, 0x91b5, 0x91b6, 0x91b7, 0x91b8, 0x91b9, 0x91ba, - 0x91bb, 0x91bc, 0x91bd, 0x91be, 0x91bf, 0x91c0, 0x91c1, 0x91c2, - 0x91c3, 0x91c4, 0x91c5, 0x91c6, 0x91c7, 0x91c8, 0x91c9, 0x91ca, - 0x91cb, 0x91cc, 0x91cd, 0x91ce, 0x91cf, 0x91d0, 0x91d1, 0x91d2, - 0x91d3, 0x91d4, 0x91d5, 0x91d6, 0x91d7, 0x91d8, 0x91d9, 0x91da, - 0x91db, 0x91dc, 0x91dd, 0x91de, 0x91df, 0x91e0, 0x91e1, 0x91e2, - 0x91e3, 0x91e4, 0x91e5, 0x91e6, 0x91e7, 0x91e8, 0x91e9, 0x91ea, - 0x91eb, 0x91ec, 0x91ed, 0x91ee, 0x91ef, 0x91f0, 0x91f1, 0x91f2, - 0x91f3, 0x91f4, 0x91f5, 0x91f6, 0x91f7, 0x91f8, 0x91f9, 0x91fa, - 0x91fb, 0x91fc, 0x91fd, 0x91fe, 0x9240, 0x9241, 0x9242, 0x9243, - 0x9244, 0x9245, 0x9246, 0x9247, 0x9248, 0x9249, 0x924a, 0x924b, - 0x924c, 0x924d, 0x924e, 0x924f, 0x9250, 0x9251, 0x9252, 0x9253, - 0x9254, 0x9255, 0x9256, 0x9257, 0x9258, 0x9259, 0x925a, 0x925b, - 0x925c, 0x925d, 0x925e, 0x925f, 0x9260, 0x9261, 0x9262, 0x9263, - 0x9264, 0x9265, 0x9266, 0x9267, 0x9268, 0x9269, 0x926a, 0x926b, - 0x926c, 0x926d, 0x926e, 0x926f, 0x9270, 0x9271, 0x9272, 0x9273, - 0x9274, 0x9275, 0x9276, 0x9277, 0x9278, 0x9279, 0x927a, 0x927b, - 0x927c, 0x927d, 0x927e, 0x9280, 0x9281, 0x9282, 0x9283, 0x9284, - 0x9285, 0x9286, 0x9287, 0x9288, 0x9289, 0x928a, 0x928b, 0x928c, - 0x928d, 0x928e, 0x928f, 0x9290, 0x9291, 0x9292, 0x9293, 0x9294, - 0x9295, 0x9296, 0x9297, 0x9298, 0x9299, 0x929a, 0x929b, 0x929c, - 0x929d, 0x929e, 0x929f, 0x92a0, 0x92a1, 0x92a2, 0x92a3, 0x92a4, - 0x92a5, 0x92a6, 0x92a7, 0x92a8, 0x92a9, 0x92aa, 0x92ab, 0x92ac, - 0x92ad, 0x92ae, 0x92af, 0x92b0, 0x92b1, 0x92b2, 0x92b3, 0x92b4, - 0x92b5, 0x92b6, 0x92b7, 0x92b8, 0x92b9, 0x92ba, 0x92bb, 0x92bc, - 0x92bd, 0x92be, 0x92bf, 0x92c0, 0x92c1, 0x92c2, 0x92c3, 0x92c4, - 0x92c5, 0x92c6, 0x92c7, 0x92c8, 0x92c9, 0x92ca, 0x92cb, 0x92cc, - 0x92cd, 0x92ce, 0x92cf, 0x92d0, 0x92d1, 0x92d2, 0x92d3, 0x92d4, - 0x92d5, 0x92d6, 0x92d7, 0x92d8, 0x92d9, 0x92da, 0x92db, 0x92dc, - 0x92dd, 0x92de, 0x92df, 0x92e0, 0x92e1, 0x92e2, 0x92e3, 0x92e4, - 0x92e5, 0x92e6, 0x92e7, 0x92e8, 0x92e9, 0x92ea, 0x92eb, 0x92ec, - 0x92ed, 0x92ee, 0x92ef, 0x92f0, 0x92f1, 0x92f2, 0x92f3, 0x92f4, - 0x92f5, 0x92f6, 0x92f7, 0x92f8, 0x92f9, 0x92fa, 0x92fb, 0x92fc, - 0x92fd, 0x92fe, 0x9340, 0x9341, 0x9342, 0x9343, 0x9344, 0x9345, - 0x9346, 0x9347, 0x9348, 0x9349, 0x934a, 0x934b, 0x934c, 0x934d, - 0x934e, 0x934f, 0x9350, 0x9351, 0x9352, 0x9353, 0x9354, 0x9355, - 0x9356, 0x9357, 0x9358, 0x9359, 0x935a, 0x935b, 0x935c, 0x935d, - 0x935e, 0x935f, 0x9360, 0x9361, 0x9362, 0x9363, 0x9364, 0x9365, - 0x9366, 0x9367, 0x9368, 0x9369, 0x936a, 0x936b, 0x936c, 0x936d, - 0x936e, 0x936f, 0x9370, 0x9371, 0x9372, 0x9373, 0x9374, 0x9375, - 0x9376, 0x9377, 0x9378, 0x9379, 0x937a, 0x937b, 0x937c, 0x937d, - 0x937e, 0x9380, 0x9381, 0x9382, 0x9383, 0x9384, 0x9385, 0x9386, - 0x9387, 0x9388, 0x9389, 0x938a, 0x938b, 0x938c, 0x938d, 0x938e, - 0x938f, 0x9390, 0x9391, 0x9392, 0x9393, 0x9394, 0x9395, 0x9396, - 0x9397, 0x9398, 0x9399, 0x939a, 0x939b, 0x939c, 0x939d, 0x939e, - 0x939f, 0x93a0, 0x93a1, 0x93a2, 0x93a3, 0x93a4, 0x93a5, 0x93a6, - 0x93a7, 0x93a8, 0x93a9, 0x93aa, 0x93ab, 0x93ac, 0x93ad, 0x93ae, - 0x93af, 0x93b0, 0x93b1, 0x93b2, 0x93b3, 0x93b4, 0x93b5, 0x93b6, - 0x93b7, 0x93b8, 0x93b9, 0x93ba, 0x93bb, 0x93bc, 0x93bd, 0x93be, - 0x93bf, 0x93c0, 0x93c1, 0x93c2, 0x93c3, 0x93c4, 0x93c5, 0x93c6, - 0x93c7, 0x93c8, 0x93c9, 0x93ca, 0x93cb, 0x93cc, 0x93cd, 0x93ce, - 0x93cf, 0x93d0, 0x93d1, 0x93d2, 0x93d3, 0x93d4, 0x93d5, 0x93d6, - 0x93d7, 0x93d8, 0x93d9, 0x93da, 0x93db, 0x93dc, 0x93dd, 0x93de, - 0x93df, 0x93e0, 0x93e1, 0x93e2, 0x93e3, 0x93e4, 0x93e5, 0x93e6, - 0x93e7, 0x93e8, 0x93e9, 0x93ea, 0x93eb, 0x93ec, 0x93ed, 0x93ee, - 0x93ef, 0x93f0, 0x93f1, 0x93f2, 0x93f3, 0x93f4, 0x93f5, 0x93f6, - 0x93f7, 0x93f8, 0x93f9, 0x93fa, 0x93fb, 0x93fc, 0x93fd, 0x93fe, - 0x9440, 0x9441, 0x9442, 0x9443, 0x9444, 0x9445, 0x9446, 0x9447, - 0x9448, 0x9449, 0x944a, 0x944b, 0x944c, 0x944d, 0x944e, 0x944f, - 0x9450, 0x9451, 0x9452, 0x9453, 0x9454, 0x9455, 0x9456, 0x9457, - 0x9458, 0x9459, 0x945a, 0x945b, 0x945c, 0x945d, 0x945e, 0x945f, - 0x9460, 0x9461, 0x9462, 0x9463, 0x9464, 0x9465, 0x9466, 0x9467, - 0x9468, 0x9469, 0x946a, 0x946b, 0x946c, 0x946d, 0x946e, 0x946f, - 0x9470, 0x9471, 0x9472, 0x9473, 0x9474, 0x9475, 0x9476, 0x9477, - 0x9478, 0x9479, 0x947a, 0x947b, 0x947c, 0x947d, 0x947e, 0x9480, - 0x9481, 0x9482, 0x9483, 0x9484, 0x9485, 0x9486, 0x9487, 0x9488, - 0x9489, 0x948a, 0x948b, 0x948c, 0x948d, 0x948e, 0x948f, 0x9490, - 0x9491, 0x9492, 0x9493, 0x9494, 0x9495, 0x9496, 0x9497, 0x9498, - 0x9499, 0x949a, 0x949b, 0x949c, 0x949d, 0x949e, 0x949f, 0x94a0, - 0x94a1, 0x94a2, 0x94a3, 0x94a4, 0x94a5, 0x94a6, 0x94a7, 0x94a8, - 0x94a9, 0x94aa, 0x94ab, 0x94ac, 0x94ad, 0x94ae, 0x94af, 0x94b0, - 0x94b1, 0x94b2, 0x94b3, 0x94b4, 0x94b5, 0x94b6, 0x94b7, 0x94b8, - 0x94b9, 0x94ba, 0x94bb, 0x94bc, 0x94bd, 0x94be, 0x94bf, 0x94c0, - 0x94c1, 0x94c2, 0x94c3, 0x94c4, 0x94c5, 0x94c6, 0x94c7, 0x94c8, - 0x94c9, 0x94ca, 0x94cb, 0x94cc, 0x94cd, 0x94ce, 0x94cf, 0x94d0, - 0x94d1, 0x94d2, 0x94d3, 0x94d4, 0x94d5, 0x94d6, 0x94d7, 0x94d8, - 0x94d9, 0x94da, 0x94db, 0x94dc, 0x94dd, 0x94de, 0x94df, 0x94e0, - 0x94e1, 0x94e2, 0x94e3, 0x94e4, 0x94e5, 0x94e6, 0x94e7, 0x94e8, - 0x94e9, 0x94ea, 0x94eb, 0x94ec, 0x94ed, 0x94ee, 0x94ef, 0x94f0, - 0x94f1, 0x94f2, 0x94f3, 0x94f4, 0x94f5, 0x94f6, 0x94f7, 0x94f8, - 0x94f9, 0x94fa, 0x94fb, 0x94fc, 0x94fd, 0x94fe, 0x9540, 0x9541, - 0x9542, 0x9543, 0x9544, 0x9545, 0x9546, 0x9547, 0x9548, 0x9549, - 0x954a, 0x954b, 0x954c, 0x954d, 0x954e, 0x954f, 0x9550, 0x9551, - 0x9552, 0x9553, 0x9554, 0x9555, 0x9556, 0x9557, 0x9558, 0x9559, - 0x955a, 0x955b, 0x955c, 0x955d, 0x955e, 0x955f, 0x9560, 0x9561, - 0x9562, 0x9563, 0x9564, 0x9565, 0x9566, 0x9567, 0x9568, 0x9569, - 0x956a, 0x956b, 0x956c, 0x956d, 0x956e, 0x956f, 0x9570, 0x9571, - 0x9572, 0x9573, 0x9574, 0x9575, 0x9576, 0x9577, 0x9578, 0x9579, - 0x957a, 0x957b, 0x957c, 0x957d, 0x957e, 0x9580, 0x9581, 0x9582, - 0x9583, 0x9584, 0x9585, 0x9586, 0x9587, 0x9588, 0x9589, 0x958a, - 0x958b, 0x958c, 0x958d, 0x958e, 0x958f, 0x9590, 0x9591, 0x9592, - 0x9593, 0x9594, 0x9595, 0x9596, 0x9597, 0x9598, 0x9599, 0x959a, - 0x959b, 0x959c, 0x959d, 0x959e, 0x959f, 0x95a0, 0x95a1, 0x95a2, - 0x95a3, 0x95a4, 0x95a5, 0x95a6, 0x95a7, 0x95a8, 0x95a9, 0x95aa, - 0x95ab, 0x95ac, 0x95ad, 0x95ae, 0x95af, 0x95b0, 0x95b1, 0x95b2, - 0x95b3, 0x95b4, 0x95b5, 0x95b6, 0x95b7, 0x95b8, 0x95b9, 0x95ba, - 0x95bb, 0x95bc, 0x95bd, 0x95be, 0x95bf, 0x95c0, 0x95c1, 0x95c2, - 0x95c3, 0x95c4, 0x95c5, 0x95c6, 0x95c7, 0x95c8, 0x95c9, 0x95ca, - 0x95cb, 0x95cc, 0x95cd, 0x95ce, 0x95cf, 0x95d0, 0x95d1, 0x95d2, - 0x95d3, 0x95d4, 0x95d5, 0x95d6, 0x95d7, 0x95d8, 0x95d9, 0x95da, - 0x95db, 0x95dc, 0x95dd, 0x95de, 0x95df, 0x95e0, 0x95e1, 0x95e2, - 0x95e3, 0x95e4, 0x95e5, 0x95e6, 0x95e7, 0x95e8, 0x95e9, 0x95ea, - 0x95eb, 0x95ec, 0x95ed, 0x95ee, 0x95ef, 0x95f0, 0x95f1, 0x95f2, - 0x95f3, 0x95f4, 0x95f5, 0x95f6, 0x95f7, 0x95f8, 0x95f9, 0x95fa, - 0x95fb, 0x95fc, 0x95fd, 0x95fe, 0x9640, 0x9641, 0x9642, 0x9643, - 0x9644, 0x9645, 0x9646, 0x9647, 0x9648, 0x9649, 0x964a, 0x964b, - 0x964c, 0x964d, 0x964e, 0x964f, 0x9650, 0x9651, 0x9652, 0x9653, - 0x9654, 0x9655, 0x9656, 0x9657, 0x9658, 0x9659, 0x965a, 0x965b, - 0x965c, 0x965d, 0x965e, 0x965f, 0x9660, 0x9661, 0x9662, 0x9663, - 0x9664, 0x9665, 0x9666, 0x9667, 0x9668, 0x9669, 0x966a, 0x966b, - 0x966c, 0x966d, 0x966e, 0x966f, 0x9670, 0x9671, 0x9672, 0x9673, - 0x9674, 0x9675, 0x9676, 0x9677, 0x9678, 0x9679, 0x967a, 0x967b, - 0x967c, 0x967d, 0x967e, 0x9680, 0x9681, 0x9682, 0x9683, 0x9684, - 0x9685, 0x9686, 0x9687, 0x9688, 0x9689, 0x968a, 0x968b, 0x968c, - 0x968d, 0x968e, 0x968f, 0x9690, 0x9691, 0x9692, 0x9693, 0x9694, - 0x9695, 0x9696, 0x9697, 0x9698, 0x9699, 0x969a, 0x969b, 0x969c, - 0x969d, 0x969e, 0x969f, 0x96a0, 0x96a1, 0x96a2, 0x96a3, 0x96a4, - 0x96a5, 0x96a6, 0x96a7, 0x96a8, 0x96a9, 0x96aa, 0x96ab, 0x96ac, - 0x96ad, 0x96ae, 0x96af, 0x96b0, 0x96b1, 0x96b2, 0x96b3, 0x96b4, - 0x96b5, 0x96b6, 0x96b7, 0x96b8, 0x96b9, 0x96ba, 0x96bb, 0x96bc, - 0x96bd, 0x96be, 0x96bf, 0x96c0, 0x96c1, 0x96c2, 0x96c3, 0x96c4, - 0x96c5, 0x96c6, 0x96c7, 0x96c8, 0x96c9, 0x96ca, 0x96cb, 0x96cc, - 0x96cd, 0x96ce, 0x96cf, 0x96d0, 0x96d1, 0x96d2, 0x96d3, 0x96d4, - 0x96d5, 0x96d6, 0x96d7, 0x96d8, 0x96d9, 0x96da, 0x96db, 0x96dc, - 0x96dd, 0x96de, 0x96df, 0x96e0, 0x96e1, 0x96e2, 0x96e3, 0x96e4, - 0x96e5, 0x96e6, 0x96e7, 0x96e8, 0x96e9, 0x96ea, 0x96eb, 0x96ec, - 0x96ed, 0x96ee, 0x96ef, 0x96f0, 0x96f1, 0x96f2, 0x96f3, 0x96f4, - 0x96f5, 0x96f6, 0x96f7, 0x96f8, 0x96f9, 0x96fa, 0x96fb, 0x96fc, - 0x96fd, 0x96fe, 0x9740, 0x9741, 0x9742, 0x9743, 0x9744, 0x9745, - 0x9746, 0x9747, 0x9748, 0x9749, 0x974a, 0x974b, 0x974c, 0x974d, - 0x974e, 0x974f, 0x9750, 0x9751, 0x9752, 0x9753, 0x9754, 0x9755, - 0x9756, 0x9757, 0x9758, 0x9759, 0x975a, 0x975b, 0x975c, 0x975d, - 0x975e, 0x975f, 0x9760, 0x9761, 0x9762, 0x9763, 0x9764, 0x9765, - 0x9766, 0x9767, 0x9768, 0x9769, 0x976a, 0x976b, 0x976c, 0x976d, - 0x976e, 0x976f, 0x9770, 0x9771, 0x9772, 0x9773, 0x9774, 0x9775, - 0x9776, 0x9777, 0x9778, 0x9779, 0x977a, 0x977b, 0x977c, 0x977d, - 0x977e, 0x9780, 0x9781, 0x9782, 0x9783, 0x9784, 0x9785, 0x9786, - 0x9787, 0x9788, 0x9789, 0x978a, 0x978b, 0x978c, 0x978d, 0x978e, - 0x978f, 0x9790, 0x9791, 0x9792, 0x9793, 0x9794, 0x9795, 0x9796, - 0x9797, 0x9798, 0x9799, 0x979a, 0x979b, 0x979c, 0x979d, 0x979e, - 0x979f, 0x97a0, 0x97a1, 0x97a2, 0x97a3, 0x97a4, 0x97a5, 0x97a6, - 0x97a7, 0x97a8, 0x97a9, 0x97aa, 0x97ab, 0x97ac, 0x97ad, 0x97ae, - 0x97af, 0x97b0, 0x97b1, 0x97b2, 0x97b3, 0x97b4, 0x97b5, 0x97b6, - 0x97b7, 0x97b8, 0x97b9, 0x97ba, 0x97bb, 0x97bc, 0x97bd, 0x97be, - 0x97bf, 0x97c0, 0x97c1, 0x97c2, 0x97c3, 0x97c4, 0x97c5, 0x97c6, - 0x97c7, 0x97c8, 0x97c9, 0x97ca, 0x97cb, 0x97cc, 0x97cd, 0x97ce, - 0x97cf, 0x97d0, 0x97d1, 0x97d2, 0x97d3, 0x97d4, 0x97d5, 0x97d6, - 0x97d7, 0x97d8, 0x97d9, 0x97da, 0x97db, 0x97dc, 0x97dd, 0x97de, - 0x97df, 0x97e0, 0x97e1, 0x97e2, 0x97e3, 0x97e4, 0x97e5, 0x97e6, - 0x97e7, 0x97e8, 0x97e9, 0x97ea, 0x97eb, 0x97ec, 0x97ed, 0x97ee, - 0x97ef, 0x97f0, 0x97f1, 0x97f2, 0x97f3, 0x97f4, 0x97f5, 0x97f6, - 0x97f7, 0x97f8, 0x97f9, 0x97fa, 0x97fb, 0x97fc, 0x97fd, 0x97fe, - 0x9840, 0x9841, 0x9842, 0x9843, 0x9844, 0x9845, 0x9846, 0x9847, - 0x9848, 0x9849, 0x984a, 0x984b, 0x984c, 0x984d, 0x984e, 0x984f, - 0x9850, 0x9851, 0x9852, 0x9853, 0x9854, 0x9855, 0x9856, 0x9857, - 0x9858, 0x9859, 0x985a, 0x985b, 0x985c, 0x985d, 0x985e, 0x985f, - 0x9860, 0x9861, 0x9862, 0x9863, 0x9864, 0x9865, 0x9866, 0x9867, - 0x9868, 0x9869, 0x986a, 0x986b, 0x986c, 0x986d, 0x986e, 0x986f, - 0x9870, 0x9871, 0x9872, 0x9873, 0x9874, 0x9875, 0x9876, 0x9877, - 0x9878, 0x9879, 0x987a, 0x987b, 0x987c, 0x987d, 0x987e, 0x9880, - 0x9881, 0x9882, 0x9883, 0x9884, 0x9885, 0x9886, 0x9887, 0x9888, - 0x9889, 0x988a, 0x988b, 0x988c, 0x988d, 0x988e, 0x988f, 0x9890, - 0x9891, 0x9892, 0x9893, 0x9894, 0x9895, 0x9896, 0x9897, 0x9898, - 0x9899, 0x989a, 0x989b, 0x989c, 0x989d, 0x989e, 0x989f, 0x98a0, - 0x98a1, 0x98a2, 0x98a3, 0x98a4, 0x98a5, 0x98a6, 0x98a7, 0x98a8, - 0x98a9, 0x98aa, 0x98ab, 0x98ac, 0x98ad, 0x98ae, 0x98af, 0x98b0, - 0x98b1, 0x98b2, 0x98b3, 0x98b4, 0x98b5, 0x98b6, 0x98b7, 0x98b8, - 0x98b9, 0x98ba, 0x98bb, 0x98bc, 0x98bd, 0x98be, 0x98bf, 0x98c0, - 0x98c1, 0x98c2, 0x98c3, 0x98c4, 0x98c5, 0x98c6, 0x98c7, 0x98c8, - 0x98c9, 0x98ca, 0x98cb, 0x98cc, 0x98cd, 0x98ce, 0x98cf, 0x98d0, - 0x98d1, 0x98d2, 0x98d3, 0x98d4, 0x98d5, 0x98d6, 0x98d7, 0x98d8, - 0x98d9, 0x98da, 0x98db, 0x98dc, 0x98dd, 0x98de, 0x98df, 0x98e0, - 0x98e1, 0x98e2, 0x98e3, 0x98e4, 0x98e5, 0x98e6, 0x98e7, 0x98e8, - 0x98e9, 0x98ea, 0x98eb, 0x98ec, 0x98ed, 0x98ee, 0x98ef, 0x98f0, - 0x98f1, 0x98f2, 0x98f3, 0x98f4, 0x98f5, 0x98f6, 0x98f7, 0x98f8, - 0x98f9, 0x98fa, 0x98fb, 0x98fc, 0x98fd, 0x98fe, 0x9940, 0x9941, - 0x9942, 0x9943, 0x9944, 0x9945, 0x9946, 0x9947, 0x9948, 0x9949, - 0x994a, 0x994b, 0x994c, 0x994d, 0x994e, 0x994f, 0x9950, 0x9951, - 0x9952, 0x9953, 0x9954, 0x9955, 0x9956, 0x9957, 0x9958, 0x9959, - 0x995a, 0x995b, 0x995c, 0x995d, 0x995e, 0x995f, 0x9960, 0x9961, - 0x9962, 0x9963, 0x9964, 0x9965, 0x9966, 0x9967, 0x9968, 0x9969, - 0x996a, 0x996b, 0x996c, 0x996d, 0x996e, 0x996f, 0x9970, 0x9971, - 0x9972, 0x9973, 0x9974, 0x9975, 0x9976, 0x9977, 0x9978, 0x9979, - 0x997a, 0x997b, 0x997c, 0x997d, 0x997e, 0x9980, 0x9981, 0x9982, - 0x9983, 0x9984, 0x9985, 0x9986, 0x9987, 0x9988, 0x9989, 0x998a, - 0x998b, 0x998c, 0x998d, 0x998e, 0x998f, 0x9990, 0x9991, 0x9992, - 0x9993, 0x9994, 0x9995, 0x9996, 0x9997, 0x9998, 0x9999, 0x999a, - 0x999b, 0x999c, 0x999d, 0x999e, 0x999f, 0x99a0, 0x99a1, 0x99a2, - 0x99a3, 0x99a4, 0x99a5, 0x99a6, 0x99a7, 0x99a8, 0x99a9, 0x99aa, - 0x99ab, 0x99ac, 0x99ad, 0x99ae, 0x99af, 0x99b0, 0x99b1, 0x99b2, - 0x99b3, 0x99b4, 0x99b5, 0x99b6, 0x99b7, 0x99b8, 0x99b9, 0x99ba, - 0x99bb, 0x99bc, 0x99bd, 0x99be, 0x99bf, 0x99c0, 0x99c1, 0x99c2, - 0x99c3, 0x99c4, 0x99c5, 0x99c6, 0x99c7, 0x99c8, 0x99c9, 0x99ca, - 0x99cb, 0x99cc, 0x99cd, 0x99ce, 0x99cf, 0x99d0, 0x99d1, 0x99d2, - 0x99d3, 0x99d4, 0x99d5, 0x99d6, 0x99d7, 0x99d8, 0x99d9, 0x99da, - 0x99db, 0x99dc, 0x99dd, 0x99de, 0x99df, 0x99e0, 0x99e1, 0x99e2, - 0x99e3, 0x99e4, 0x99e5, 0x99e6, 0x99e7, 0x99e8, 0x99e9, 0x99ea, - 0x99eb, 0x99ec, 0x99ed, 0x99ee, 0x99ef, 0x99f0, 0x99f1, 0x99f2, - 0x99f3, 0x99f4, 0x99f5, 0x99f6, 0x99f7, 0x99f8, 0x99f9, 0x99fa, - 0x99fb, 0x99fc, 0x99fd, 0x99fe, 0x9a40, 0x9a41, 0x9a42, 0x9a43, - 0x9a44, 0x9a45, 0x9a46, 0x9a47, 0x9a48, 0x9a49, 0x9a4a, 0x9a4b, - 0x9a4c, 0x9a4d, 0x9a4e, 0x9a4f, 0x9a50, 0x9a51, 0x9a52, 0x9a53, - 0x9a54, 0x9a55, 0x9a56, 0x9a57, 0x9a58, 0x9a59, 0x9a5a, 0x9a5b, - 0x9a5c, 0x9a5d, 0x9a5e, 0x9a5f, 0x9a60, 0x9a61, 0x9a62, 0x9a63, - 0x9a64, 0x9a65, 0x9a66, 0x9a67, 0x9a68, 0x9a69, 0x9a6a, 0x9a6b, - 0x9a6c, 0x9a6d, 0x9a6e, 0x9a6f, 0x9a70, 0x9a71, 0x9a72, 0x9a73, - 0x9a74, 0x9a75, 0x9a76, 0x9a77, 0x9a78, 0x9a79, 0x9a7a, 0x9a7b, - 0x9a7c, 0x9a7d, 0x9a7e, 0x9a80, 0x9a81, 0x9a82, 0x9a83, 0x9a84, - 0x9a85, 0x9a86, 0x9a87, 0x9a88, 0x9a89, 0x9a8a, 0x9a8b, 0x9a8c, - 0x9a8d, 0x9a8e, 0x9a8f, 0x9a90, 0x9a91, 0x9a92, 0x9a93, 0x9a94, - 0x9a95, 0x9a96, 0x9a97, 0x9a98, 0x9a99, 0x9a9a, 0x9a9b, 0x9a9c, - 0x9a9d, 0x9a9e, 0x9a9f, 0x9aa0, 0x9aa1, 0x9aa2, 0x9aa3, 0x9aa4, - 0x9aa5, 0x9aa6, 0x9aa7, 0x9aa8, 0x9aa9, 0x9aaa, 0x9aab, 0x9aac, - 0x9aad, 0x9aae, 0x9aaf, 0x9ab0, 0x9ab1, 0x9ab2, 0x9ab3, 0x9ab4, - 0x9ab5, 0x9ab6, 0x9ab7, 0x9ab8, 0x9ab9, 0x9aba, 0x9abb, 0x9abc, - 0x9abd, 0x9abe, 0x9abf, 0x9ac0, 0x9ac1, 0x9ac2, 0x9ac3, 0x9ac4, - 0x9ac5, 0x9ac6, 0x9ac7, 0x9ac8, 0x9ac9, 0x9aca, 0x9acb, 0x9acc, - 0x9acd, 0x9ace, 0x9acf, 0x9ad0, 0x9ad1, 0x9ad2, 0x9ad3, 0x9ad4, - 0x9ad5, 0x9ad6, 0x9ad7, 0x9ad8, 0x9ad9, 0x9ada, 0x9adb, 0x9adc, - 0x9add, 0x9ade, 0x9adf, 0x9ae0, 0x9ae1, 0x9ae2, 0x9ae3, 0x9ae4, - 0x9ae5, 0x9ae6, 0x9ae7, 0x9ae8, 0x9ae9, 0x9aea, 0x9aeb, 0x9aec, - 0x9aed, 0x9aee, 0x9aef, 0x9af0, 0x9af1, 0x9af2, 0x9af3, 0x9af4, - 0x9af5, 0x9af6, 0x9af7, 0x9af8, 0x9af9, 0x9afa, 0x9afb, 0x9afc, - 0x9afd, 0x9afe, 0x9b40, 0x9b41, 0x9b42, 0x9b43, 0x9b44, 0x9b45, - 0x9b46, 0x9b47, 0x9b48, 0x9b49, 0x9b4a, 0x9b4b, 0x9b4c, 0x9b4d, - 0x9b4e, 0x9b4f, 0x9b50, 0x9b51, 0x9b52, 0x9b53, 0x9b54, 0x9b55, - 0x9b56, 0x9b57, 0x9b58, 0x9b59, 0x9b5a, 0x9b5b, 0x9b5c, 0x9b5d, - 0x9b5e, 0x9b5f, 0x9b60, 0x9b61, 0x9b62, 0x9b63, 0x9b64, 0x9b65, - 0x9b66, 0x9b67, 0x9b68, 0x9b69, 0x9b6a, 0x9b6b, 0x9b6c, 0x9b6d, - 0x9b6e, 0x9b6f, 0x9b70, 0x9b71, 0x9b72, 0x9b73, 0x9b74, 0x9b75, - 0x9b76, 0x9b77, 0x9b78, 0x9b79, 0x9b7a, 0x9b7b, 0x9b7c, 0x9b7d, - 0x9b7e, 0x9b80, 0x9b81, 0x9b82, 0x9b83, 0x9b84, 0x9b85, 0x9b86, - 0x9b87, 0x9b88, 0x9b89, 0x9b8a, 0x9b8b, 0x9b8c, 0x9b8d, 0x9b8e, - 0x9b8f, 0x9b90, 0x9b91, 0x9b92, 0x9b93, 0x9b94, 0x9b95, 0x9b96, - 0x9b97, 0x9b98, 0x9b99, 0x9b9a, 0x9b9b, 0x9b9c, 0x9b9d, 0x9b9e, - 0x9b9f, 0x9ba0, 0x9ba1, 0x9ba2, 0x9ba3, 0x9ba4, 0x9ba5, 0x9ba6, - 0x9ba7, 0x9ba8, 0x9ba9, 0x9baa, 0x9bab, 0x9bac, 0x9bad, 0x9bae, - 0x9baf, 0x9bb0, 0x9bb1, 0x9bb2, 0x9bb3, 0x9bb4, 0x9bb5, 0x9bb6, - 0x9bb7, 0x9bb8, 0x9bb9, 0x9bba, 0x9bbb, 0x9bbc, 0x9bbd, 0x9bbe, - 0x9bbf, 0x9bc0, 0x9bc1, 0x9bc2, 0x9bc3, 0x9bc4, 0x9bc5, 0x9bc6, - 0x9bc7, 0x9bc8, 0x9bc9, 0x9bca, 0x9bcb, 0x9bcc, 0x9bcd, 0x9bce, - 0x9bcf, 0x9bd0, 0x9bd1, 0x9bd2, 0x9bd3, 0x9bd4, 0x9bd5, 0x9bd6, - 0x9bd7, 0x9bd8, 0x9bd9, 0x9bda, 0x9bdb, 0x9bdc, 0x9bdd, 0x9bde, - 0x9bdf, 0x9be0, 0x9be1, 0x9be2, 0x9be3, 0x9be4, 0x9be5, 0x9be6, - 0x9be7, 0x9be8, 0x9be9, 0x9bea, 0x9beb, 0x9bec, 0x9bed, 0x9bee, - 0x9bef, 0x9bf0, 0x9bf1, 0x9bf2, 0x9bf3, 0x9bf4, 0x9bf5, 0x9bf6, - 0x9bf7, 0x9bf8, 0x9bf9, 0x9bfa, 0x9bfb, 0x9bfc, 0x9bfd, 0x9bfe, - 0x9c40, 0x9c41, 0x9c42, 0x9c43, 0x9c44, 0x9c45, 0x9c46, 0x9c47, - 0x9c48, 0x9c49, 0x9c4a, 0x9c4b, 0x9c4c, 0x9c4d, 0x9c4e, 0x9c4f, - 0x9c50, 0x9c51, 0x9c52, 0x9c53, 0x9c54, 0x9c55, 0x9c56, 0x9c57, - 0x9c58, 0x9c59, 0x9c5a, 0x9c5b, 0x9c5c, 0x9c5d, 0x9c5e, 0x9c5f, - 0x9c60, 0x9c61, 0x9c62, 0x9c63, 0x9c64, 0x9c65, 0x9c66, 0x9c67, - 0x9c68, 0x9c69, 0x9c6a, 0x9c6b, 0x9c6c, 0x9c6d, 0x9c6e, 0x9c6f, - 0x9c70, 0x9c71, 0x9c72, 0x9c73, 0x9c74, 0x9c75, 0x9c76, 0x9c77, - 0x9c78, 0x9c79, 0x9c7a, 0x9c7b, 0x9c7c, 0x9c7d, 0x9c7e, 0x9c80, - 0x9c81, 0x9c82, 0x9c83, 0x9c84, 0x9c85, 0x9c86, 0x9c87, 0x9c88, - 0x9c89, 0x9c8a, 0x9c8b, 0x9c8c, 0x9c8d, 0x9c8e, 0x9c8f, 0x9c90, - 0x9c91, 0x9c92, 0x9c93, 0x9c94, 0x9c95, 0x9c96, 0x9c97, 0x9c98, - 0x9c99, 0x9c9a, 0x9c9b, 0x9c9c, 0x9c9d, 0x9c9e, 0x9c9f, 0x9ca0, - 0x9ca1, 0x9ca2, 0x9ca3, 0x9ca4, 0x9ca5, 0x9ca6, 0x9ca7, 0x9ca8, - 0x9ca9, 0x9caa, 0x9cab, 0x9cac, 0x9cad, 0x9cae, 0x9caf, 0x9cb0, - 0x9cb1, 0x9cb2, 0x9cb3, 0x9cb4, 0x9cb5, 0x9cb6, 0x9cb7, 0x9cb8, - 0x9cb9, 0x9cba, 0x9cbb, 0x9cbc, 0x9cbd, 0x9cbe, 0x9cbf, 0x9cc0, - 0x9cc1, 0x9cc2, 0x9cc3, 0x9cc4, 0x9cc5, 0x9cc6, 0x9cc7, 0x9cc8, - 0x9cc9, 0x9cca, 0x9ccb, 0x9ccc, 0x9ccd, 0x9cce, 0x9ccf, 0x9cd0, - 0x9cd1, 0x9cd2, 0x9cd3, 0x9cd4, 0x9cd5, 0x9cd6, 0x9cd7, 0x9cd8, - 0x9cd9, 0x9cda, 0x9cdb, 0x9cdc, 0x9cdd, 0x9cde, 0x9cdf, 0x9ce0, - 0x9ce1, 0x9ce2, 0x9ce3, 0x9ce4, 0x9ce5, 0x9ce6, 0x9ce7, 0x9ce8, - 0x9ce9, 0x9cea, 0x9ceb, 0x9cec, 0x9ced, 0x9cee, 0x9cef, 0x9cf0, - 0x9cf1, 0x9cf2, 0x9cf3, 0x9cf4, 0x9cf5, 0x9cf6, 0x9cf7, 0x9cf8, - 0x9cf9, 0x9cfa, 0x9cfb, 0x9cfc, 0x9cfd, 0x9cfe, 0x9d40, 0x9d41, - 0x9d42, 0x9d43, 0x9d44, 0x9d45, 0x9d46, 0x9d47, 0x9d48, 0x9d49, - 0x9d4a, 0x9d4b, 0x9d4c, 0x9d4d, 0x9d4e, 0x9d4f, 0x9d50, 0x9d51, - 0x9d52, 0x9d53, 0x9d54, 0x9d55, 0x9d56, 0x9d57, 0x9d58, 0x9d59, - 0x9d5a, 0x9d5b, 0x9d5c, 0x9d5d, 0x9d5e, 0x9d5f, 0x9d60, 0x9d61, - 0x9d62, 0x9d63, 0x9d64, 0x9d65, 0x9d66, 0x9d67, 0x9d68, 0x9d69, - 0x9d6a, 0x9d6b, 0x9d6c, 0x9d6d, 0x9d6e, 0x9d6f, 0x9d70, 0x9d71, - 0x9d72, 0x9d73, 0x9d74, 0x9d75, 0x9d76, 0x9d77, 0x9d78, 0x9d79, - 0x9d7a, 0x9d7b, 0x9d7c, 0x9d7d, 0x9d7e, 0x9d80, 0x9d81, 0x9d82, - 0x9d83, 0x9d84, 0x9d85, 0x9d86, 0x9d87, 0x9d88, 0x9d89, 0x9d8a, - 0x9d8b, 0x9d8c, 0x9d8d, 0x9d8e, 0x9d8f, 0x9d90, 0x9d91, 0x9d92, - 0x9d93, 0x9d94, 0x9d95, 0x9d96, 0x9d97, 0x9d98, 0x9d99, 0x9d9a, - 0x9d9b, 0x9d9c, 0x9d9d, 0x9d9e, 0x9d9f, 0x9da0, 0x9da1, 0x9da2, - 0x9da3, 0x9da4, 0x9da5, 0x9da6, 0x9da7, 0x9da8, 0x9da9, 0x9daa, - 0x9dab, 0x9dac, 0x9dad, 0x9dae, 0x9daf, 0x9db0, 0x9db1, 0x9db2, - 0x9db3, 0x9db4, 0x9db5, 0x9db6, 0x9db7, 0x9db8, 0x9db9, 0x9dba, - 0x9dbb, 0x9dbc, 0x9dbd, 0x9dbe, 0x9dbf, 0x9dc0, 0x9dc1, 0x9dc2, - 0x9dc3, 0x9dc4, 0x9dc5, 0x9dc6, 0x9dc7, 0x9dc8, 0x9dc9, 0x9dca, - 0x9dcb, 0x9dcc, 0x9dcd, 0x9dce, 0x9dcf, 0x9dd0, 0x9dd1, 0x9dd2, - 0x9dd3, 0x9dd4, 0x9dd5, 0x9dd6, 0x9dd7, 0x9dd8, 0x9dd9, 0x9dda, - 0x9ddb, 0x9ddc, 0x9ddd, 0x9dde, 0x9ddf, 0x9de0, 0x9de1, 0x9de2, - 0x9de3, 0x9de4, 0x9de5, 0x9de6, 0x9de7, 0x9de8, 0x9de9, 0x9dea, - 0x9deb, 0x9dec, 0x9ded, 0x9dee, 0x9def, 0x9df0, 0x9df1, 0x9df2, - 0x9df3, 0x9df4, 0x9df5, 0x9df6, 0x9df7, 0x9df8, 0x9df9, 0x9dfa, - 0x9dfb, 0x9dfc, 0x9dfd, 0x9dfe, 0x9e40, 0x9e41, 0x9e42, 0x9e43, - 0x9e44, 0x9e45, 0x9e46, 0x9e47, 0x9e48, 0x9e49, 0x9e4a, 0x9e4b, - 0x9e4c, 0x9e4d, 0x9e4e, 0x9e4f, 0x9e50, 0x9e51, 0x9e52, 0x9e53, - 0x9e54, 0x9e55, 0x9e56, 0x9e57, 0x9e58, 0x9e59, 0x9e5a, 0x9e5b, - 0x9e5c, 0x9e5d, 0x9e5e, 0x9e5f, 0x9e60, 0x9e61, 0x9e62, 0x9e63, - 0x9e64, 0x9e65, 0x9e66, 0x9e67, 0x9e68, 0x9e69, 0x9e6a, 0x9e6b, - 0x9e6c, 0x9e6d, 0x9e6e, 0x9e6f, 0x9e70, 0x9e71, 0x9e72, 0x9e73, - 0x9e74, 0x9e75, 0x9e76, 0x9e77, 0x9e78, 0x9e79, 0x9e7a, 0x9e7b, - 0x9e7c, 0x9e7d, 0x9e7e, 0x9e80, 0x9e81, 0x9e82, 0x9e83, 0x9e84, - 0x9e85, 0x9e86, 0x9e87, 0x9e88, 0x9e89, 0x9e8a, 0x9e8b, 0x9e8c, - 0x9e8d, 0x9e8e, 0x9e8f, 0x9e90, 0x9e91, 0x9e92, 0x9e93, 0x9e94, - 0x9e95, 0x9e96, 0x9e97, 0x9e98, 0x9e99, 0x9e9a, 0x9e9b, 0x9e9c, - 0x9e9d, 0x9e9e, 0x9e9f, 0x9ea0, 0x9ea1, 0x9ea2, 0x9ea3, 0x9ea4, - 0x9ea5, 0x9ea6, 0x9ea7, 0x9ea8, 0x9ea9, 0x9eaa, 0x9eab, 0x9eac, - 0x9ead, 0x9eae, 0x9eaf, 0x9eb0, 0x9eb1, 0x9eb2, 0x9eb3, 0x9eb4, - 0x9eb5, 0x9eb6, 0x9eb7, 0x9eb8, 0x9eb9, 0x9eba, 0x9ebb, 0x9ebc, - 0x9ebd, 0x9ebe, 0x9ebf, 0x9ec0, 0x9ec1, 0x9ec2, 0x9ec3, 0x9ec4, - 0x9ec5, 0x9ec6, 0x9ec7, 0x9ec8, 0x9ec9, 0x9eca, 0x9ecb, 0x9ecc, - 0x9ecd, 0x9ece, 0x9ecf, 0x9ed0, 0x9ed1, 0x9ed2, 0x9ed3, 0x9ed4, - 0x9ed5, 0x9ed6, 0x9ed7, 0x9ed8, 0x9ed9, 0x9eda, 0x9edb, 0x9edc, - 0x9edd, 0x9ede, 0x9edf, 0x9ee0, 0x9ee1, 0x9ee2, 0x9ee3, 0x9ee4, - 0x9ee5, 0x9ee6, 0x9ee7, 0x9ee8, 0x9ee9, 0x9eea, 0x9eeb, 0x9eec, - 0x9eed, 0x9eee, 0x9eef, 0x9ef0, 0x9ef1, 0x9ef2, 0x9ef3, 0x9ef4, - 0x9ef5, 0x9ef6, 0x9ef7, 0x9ef8, 0x9ef9, 0x9efa, 0x9efb, 0x9efc, - 0x9efd, 0x9efe, 0x9f40, 0x9f41, 0x9f42, 0x9f43, 0x9f44, 0x9f45, - 0x9f46, 0x9f47, 0x9f48, 0x9f49, 0x9f4a, 0x9f4b, 0x9f4c, 0x9f4d, - 0x9f4e, 0x9f4f, 0x9f50, 0x9f51, 0x9f52, 0x9f53, 0x9f54, 0x9f55, - 0x9f56, 0x9f57, 0x9f58, 0x9f59, 0x9f5a, 0x9f5b, 0x9f5c, 0x9f5d, - 0x9f5e, 0x9f5f, 0x9f60, 0x9f61, 0x9f62, 0x9f63, 0x9f64, 0x9f65, - 0x9f66, 0x9f67, 0x9f68, 0x9f69, 0x9f6a, 0x9f6b, 0x9f6c, 0x9f6d, - 0x9f6e, 0x9f6f, 0x9f70, 0x9f71, 0x9f72, 0x9f73, 0x9f74, 0x9f75, - 0x9f76, 0x9f77, 0x9f78, 0x9f79, 0x9f7a, 0x9f7b, 0x9f7c, 0x9f7d, - 0x9f7e, 0x9f80, 0x9f81, 0x9f82, 0x9f83, 0x9f84, 0x9f85, 0x9f86, - 0x9f87, 0x9f88, 0x9f89, 0x9f8a, 0x9f8b, 0x9f8c, 0x9f8d, 0x9f8e, - 0x9f8f, 0x9f90, 0x9f91, 0x9f92, 0x9f93, 0x9f94, 0x9f95, 0x9f96, - 0x9f97, 0x9f98, 0x9f99, 0x9f9a, 0x9f9b, 0x9f9c, 0x9f9d, 0x9f9e, - 0x9f9f, 0x9fa0, 0x9fa1, 0x9fa2, 0x9fa3, 0x9fa4, 0x9fa5, 0x9fa6, - 0x9fa7, 0x9fa8, 0x9fa9, 0x9faa, 0x9fab, 0x9fac, 0x9fad, 0x9fae, - 0x9faf, 0x9fb0, 0x9fb1, 0x9fb2, 0x9fb3, 0x9fb4, 0x9fb5, 0x9fb6, - 0x9fb7, 0x9fb8, 0x9fb9, 0x9fba, 0x9fbb, 0x9fbc, 0x9fbd, 0x9fbe, - 0x9fbf, 0x9fc0, 0x9fc1, 0x9fc2, 0x9fc3, 0x9fc4, 0x9fc5, 0x9fc6, - 0x9fc7, 0x9fc8, 0x9fc9, 0x9fca, 0x9fcb, 0x9fcc, 0x9fcd, 0x9fce, - 0x9fcf, 0x9fd0, 0x9fd1, 0x9fd2, 0x9fd3, 0x9fd4, 0x9fd5, 0x9fd6, - 0x9fd7, 0x9fd8, 0x9fd9, 0x9fda, 0x9fdb, 0x9fdc, 0x9fdd, 0x9fde, - 0x9fdf, 0x9fe0, 0x9fe1, 0x9fe2, 0x9fe3, 0x9fe4, 0x9fe5, 0x9fe6, - 0x9fe7, 0x9fe8, 0x9fe9, 0x9fea, 0x9feb, 0x9fec, 0x9fed, 0x9fee, - 0x9fef, 0x9ff0, 0x9ff1, 0x9ff2, 0x9ff3, 0x9ff4, 0x9ff5, 0x9ff6, - 0x9ff7, 0x9ff8, 0x9ff9, 0x9ffa, 0x9ffb, 0x9ffc, 0x9ffd, 0x9ffe, - 0xa040, 0xa041, 0xa042, 0xa043, 0xa044, 0xa045, 0xa046, 0xa047, - 0xa048, 0xa049, 0xa04a, 0xa04b, 0xa04c, 0xa04d, 0xa04e, 0xa04f, - 0xa050, 0xa051, 0xa052, 0xa053, 0xa054, 0xa055, 0xa056, 0xa057, - 0xa058, 0xa059, 0xa05a, 0xa05b, 0xa05c, 0xa05d, 0xa05e, 0xa05f, - 0xa060, 0xa061, 0xa062, 0xa063, 0xa064, 0xa065, 0xa066, 0xa067, - 0xa068, 0xa069, 0xa06a, 0xa06b, 0xa06c, 0xa06d, 0xa06e, 0xa06f, - 0xa070, 0xa071, 0xa072, 0xa073, 0xa074, 0xa075, 0xa076, 0xa077, - 0xa078, 0xa079, 0xa07a, 0xa07b, 0xa07c, 0xa07d, 0xa07e, 0xa080, - 0xa081, 0xa082, 0xa083, 0xa084, 0xa085, 0xa086, 0xa087, 0xa088, - 0xa089, 0xa08a, 0xa08b, 0xa08c, 0xa08d, 0xa08e, 0xa08f, 0xa090, - 0xa091, 0xa092, 0xa093, 0xa094, 0xa095, 0xa096, 0xa097, 0xa098, - 0xa099, 0xa09a, 0xa09b, 0xa09c, 0xa09d, 0xa09e, 0xa09f, 0xa0a0, - 0xa0a1, 0xa0a2, 0xa0a3, 0xa0a4, 0xa0a5, 0xa0a6, 0xa0a7, 0xa0a8, - 0xa0a9, 0xa0aa, 0xa0ab, 0xa0ac, 0xa0ad, 0xa0ae, 0xa0af, 0xa0b0, - 0xa0b1, 0xa0b2, 0xa0b3, 0xa0b4, 0xa0b5, 0xa0b6, 0xa0b7, 0xa0b8, - 0xa0b9, 0xa0ba, 0xa0bb, 0xa0bc, 0xa0bd, 0xa0be, 0xa0bf, 0xa0c0, - 0xa0c1, 0xa0c2, 0xa0c3, 0xa0c4, 0xa0c5, 0xa0c6, 0xa0c7, 0xa0c8, - 0xa0c9, 0xa0ca, 0xa0cb, 0xa0cc, 0xa0cd, 0xa0ce, 0xa0cf, 0xa0d0, - 0xa0d1, 0xa0d2, 0xa0d3, 0xa0d4, 0xa0d5, 0xa0d6, 0xa0d7, 0xa0d8, - 0xa0d9, 0xa0da, 0xa0db, 0xa0dc, 0xa0dd, 0xa0de, 0xa0df, 0xa0e0, - 0xa0e1, 0xa0e2, 0xa0e3, 0xa0e4, 0xa0e5, 0xa0e6, 0xa0e7, 0xa0e8, - 0xa0e9, 0xa0ea, 0xa0eb, 0xa0ec, 0xa0ed, 0xa0ee, 0xa0ef, 0xa0f0, - 0xa0f1, 0xa0f2, 0xa0f3, 0xa0f4, 0xa0f5, 0xa0f6, 0xa0f7, 0xa0f8, - 0xa0f9, 0xa0fa, 0xa0fb, 0xa0fc, 0xa0fd, 0xa0fe, 0xaa40, 0xaa41, - 0xaa42, 0xaa43, 0xaa44, 0xaa45, 0xaa46, 0xaa47, 0xaa48, 0xaa49, - 0xaa4a, 0xaa4b, 0xaa4c, 0xaa4d, 0xaa4e, 0xaa4f, 0xaa50, 0xaa51, - 0xaa52, 0xaa53, 0xaa54, 0xaa55, 0xaa56, 0xaa57, 0xaa58, 0xaa59, - 0xaa5a, 0xaa5b, 0xaa5c, 0xaa5d, 0xaa5e, 0xaa5f, 0xaa60, 0xaa61, - 0xaa62, 0xaa63, 0xaa64, 0xaa65, 0xaa66, 0xaa67, 0xaa68, 0xaa69, - 0xaa6a, 0xaa6b, 0xaa6c, 0xaa6d, 0xaa6e, 0xaa6f, 0xaa70, 0xaa71, - 0xaa72, 0xaa73, 0xaa74, 0xaa75, 0xaa76, 0xaa77, 0xaa78, 0xaa79, - 0xaa7a, 0xaa7b, 0xaa7c, 0xaa7d, 0xaa7e, 0xaa80, 0xaa81, 0xaa82, - 0xaa83, 0xaa84, 0xaa85, 0xaa86, 0xaa87, 0xaa88, 0xaa89, 0xaa8a, - 0xaa8b, 0xaa8c, 0xaa8d, 0xaa8e, 0xaa8f, 0xaa90, 0xaa91, 0xaa92, - 0xaa93, 0xaa94, 0xaa95, 0xaa96, 0xaa97, 0xaa98, 0xaa99, 0xaa9a, - 0xaa9b, 0xaa9c, 0xaa9d, 0xaa9e, 0xaa9f, 0xaaa0, 0xab40, 0xab41, - 0xab42, 0xab43, 0xab44, 0xab45, 0xab46, 0xab47, 0xab48, 0xab49, - 0xab4a, 0xab4b, 0xab4c, 0xab4d, 0xab4e, 0xab4f, 0xab50, 0xab51, - 0xab52, 0xab53, 0xab54, 0xab55, 0xab56, 0xab57, 0xab58, 0xab59, - 0xab5a, 0xab5b, 0xab5c, 0xab5d, 0xab5e, 0xab5f, 0xab60, 0xab61, - 0xab62, 0xab63, 0xab64, 0xab65, 0xab66, 0xab67, 0xab68, 0xab69, - 0xab6a, 0xab6b, 0xab6c, 0xab6d, 0xab6e, 0xab6f, 0xab70, 0xab71, - 0xab72, 0xab73, 0xab74, 0xab75, 0xab76, 0xab77, 0xab78, 0xab79, - 0xab7a, 0xab7b, 0xab7c, 0xab7d, 0xab7e, 0xab80, 0xab81, 0xab82, - 0xab83, 0xab84, 0xab85, 0xab86, 0xab87, 0xab88, 0xab89, 0xab8a, - 0xab8b, 0xab8c, 0xab8d, 0xab8e, 0xab8f, 0xab90, 0xab91, 0xab92, - 0xab93, 0xab94, 0xab95, 0xab96, 0xab97, 0xab98, 0xab99, 0xab9a, - 0xab9b, 0xab9c, 0xab9d, 0xab9e, 0xab9f, 0xaba0, 0xac40, 0xac41, - 0xac42, 0xac43, 0xac44, 0xac45, 0xac46, 0xac47, 0xac48, 0xac49, - 0xac4a, 0xac4b, 0xac4c, 0xac4d, 0xac4e, 0xac4f, 0xac50, 0xac51, - 0xac52, 0xac53, 0xac54, 0xac55, 0xac56, 0xac57, 0xac58, 0xac59, - 0xac5a, 0xac5b, 0xac5c, 0xac5d, 0xac5e, 0xac5f, 0xac60, 0xac61, - 0xac62, 0xac63, 0xac64, 0xac65, 0xac66, 0xac67, 0xac68, 0xac69, - 0xac6a, 0xac6b, 0xac6c, 0xac6d, 0xac6e, 0xac6f, 0xac70, 0xac71, - 0xac72, 0xac73, 0xac74, 0xac75, 0xac76, 0xac77, 0xac78, 0xac79, - 0xac7a, 0xac7b, 0xac7c, 0xac7d, 0xac7e, 0xac80, 0xac81, 0xac82, - 0xac83, 0xac84, 0xac85, 0xac86, 0xac87, 0xac88, 0xac89, 0xac8a, - 0xac8b, 0xac8c, 0xac8d, 0xac8e, 0xac8f, 0xac90, 0xac91, 0xac92, - 0xac93, 0xac94, 0xac95, 0xac96, 0xac97, 0xac98, 0xac99, 0xac9a, - 0xac9b, 0xac9c, 0xac9d, 0xac9e, 0xac9f, 0xaca0, 0xad40, 0xad41, - 0xad42, 0xad43, 0xad44, 0xad45, 0xad46, 0xad47, 0xad48, 0xad49, - 0xad4a, 0xad4b, 0xad4c, 0xad4d, 0xad4e, 0xad4f, 0xad50, 0xad51, - 0xad52, 0xad53, 0xad54, 0xad55, 0xad56, 0xad57, 0xad58, 0xad59, - 0xad5a, 0xad5b, 0xad5c, 0xad5d, 0xad5e, 0xad5f, 0xad60, 0xad61, - 0xad62, 0xad63, 0xad64, 0xad65, 0xad66, 0xad67, 0xad68, 0xad69, - 0xad6a, 0xad6b, 0xad6c, 0xad6d, 0xad6e, 0xad6f, 0xad70, 0xad71, - 0xad72, 0xad73, 0xad74, 0xad75, 0xad76, 0xad77, 0xad78, 0xad79, - 0xad7a, 0xad7b, 0xad7c, 0xad7d, 0xad7e, 0xad80, 0xad81, 0xad82, - 0xad83, 0xad84, 0xad85, 0xad86, 0xad87, 0xad88, 0xad89, 0xad8a, - 0xad8b, 0xad8c, 0xad8d, 0xad8e, 0xad8f, 0xad90, 0xad91, 0xad92, - 0xad93, 0xad94, 0xad95, 0xad96, 0xad97, 0xad98, 0xad99, 0xad9a, - 0xad9b, 0xad9c, 0xad9d, 0xad9e, 0xad9f, 0xada0, 0xae40, 0xae41, - 0xae42, 0xae43, 0xae44, 0xae45, 0xae46, 0xae47, 0xae48, 0xae49, - 0xae4a, 0xae4b, 0xae4c, 0xae4d, 0xae4e, 0xae4f, 0xae50, 0xae51, - 0xae52, 0xae53, 0xae54, 0xae55, 0xae56, 0xae57, 0xae58, 0xae59, - 0xae5a, 0xae5b, 0xae5c, 0xae5d, 0xae5e, 0xae5f, 0xae60, 0xae61, - 0xae62, 0xae63, 0xae64, 0xae65, 0xae66, 0xae67, 0xae68, 0xae69, - 0xae6a, 0xae6b, 0xae6c, 0xae6d, 0xae6e, 0xae6f, 0xae70, 0xae71, - 0xae72, 0xae73, 0xae74, 0xae75, 0xae76, 0xae77, 0xae78, 0xae79, - 0xae7a, 0xae7b, 0xae7c, 0xae7d, 0xae7e, 0xae80, 0xae81, 0xae82, - 0xae83, 0xae84, 0xae85, 0xae86, 0xae87, 0xae88, 0xae89, 0xae8a, - 0xae8b, 0xae8c, 0xae8d, 0xae8e, 0xae8f, 0xae90, 0xae91, 0xae92, - 0xae93, 0xae94, 0xae95, 0xae96, 0xae97, 0xae98, 0xae99, 0xae9a, - 0xae9b, 0xae9c, 0xae9d, 0xae9e, 0xae9f, 0xaea0, 0xaf40, 0xaf41, - 0xaf42, 0xaf43, 0xaf44, 0xaf45, 0xaf46, 0xaf47, 0xaf48, 0xaf49, - 0xaf4a, 0xaf4b, 0xaf4c, 0xaf4d, 0xaf4e, 0xaf4f, 0xaf50, 0xaf51, - 0xaf52, 0xaf53, 0xaf54, 0xaf55, 0xaf56, 0xaf57, 0xaf58, 0xaf59, - 0xaf5a, 0xaf5b, 0xaf5c, 0xaf5d, 0xaf5e, 0xaf5f, 0xaf60, 0xaf61, - 0xaf62, 0xaf63, 0xaf64, 0xaf65, 0xaf66, 0xaf67, 0xaf68, 0xaf69, - 0xaf6a, 0xaf6b, 0xaf6c, 0xaf6d, 0xaf6e, 0xaf6f, 0xaf70, 0xaf71, - 0xaf72, 0xaf73, 0xaf74, 0xaf75, 0xaf76, 0xaf77, 0xaf78, 0xaf79, - 0xaf7a, 0xaf7b, 0xaf7c, 0xaf7d, 0xaf7e, 0xaf80, 0xaf81, 0xaf82, - 0xaf83, 0xaf84, 0xaf85, 0xaf86, 0xaf87, 0xaf88, 0xaf89, 0xaf8a, - 0xaf8b, 0xaf8c, 0xaf8d, 0xaf8e, 0xaf8f, 0xaf90, 0xaf91, 0xaf92, - 0xaf93, 0xaf94, 0xaf95, 0xaf96, 0xaf97, 0xaf98, 0xaf99, 0xaf9a, - 0xaf9b, 0xaf9c, 0xaf9d, 0xaf9e, 0xaf9f, 0xafa0, 0xb040, 0xb041, - 0xb042, 0xb043, 0xb044, 0xb045, 0xb046, 0xb047, 0xb048, 0xb049, - 0xb04a, 0xb04b, 0xb04c, 0xb04d, 0xb04e, 0xb04f, 0xb050, 0xb051, - 0xb052, 0xb053, 0xb054, 0xb055, 0xb056, 0xb057, 0xb058, 0xb059, - 0xb05a, 0xb05b, 0xb05c, 0xb05d, 0xb05e, 0xb05f, 0xb060, 0xb061, - 0xb062, 0xb063, 0xb064, 0xb065, 0xb066, 0xb067, 0xb068, 0xb069, - 0xb06a, 0xb06b, 0xb06c, 0xb06d, 0xb06e, 0xb06f, 0xb070, 0xb071, - 0xb072, 0xb073, 0xb074, 0xb075, 0xb076, 0xb077, 0xb078, 0xb079, - 0xb07a, 0xb07b, 0xb07c, 0xb07d, 0xb07e, 0xb080, 0xb081, 0xb082, - 0xb083, 0xb084, 0xb085, 0xb086, 0xb087, 0xb088, 0xb089, 0xb08a, - 0xb08b, 0xb08c, 0xb08d, 0xb08e, 0xb08f, 0xb090, 0xb091, 0xb092, - 0xb093, 0xb094, 0xb095, 0xb096, 0xb097, 0xb098, 0xb099, 0xb09a, - 0xb09b, 0xb09c, 0xb09d, 0xb09e, 0xb09f, 0xb0a0, 0xb140, 0xb141, - 0xb142, 0xb143, 0xb144, 0xb145, 0xb146, 0xb147, 0xb148, 0xb149, - 0xb14a, 0xb14b, 0xb14c, 0xb14d, 0xb14e, 0xb14f, 0xb150, 0xb151, - 0xb152, 0xb153, 0xb154, 0xb155, 0xb156, 0xb157, 0xb158, 0xb159, - 0xb15a, 0xb15b, 0xb15c, 0xb15d, 0xb15e, 0xb15f, 0xb160, 0xb161, - 0xb162, 0xb163, 0xb164, 0xb165, 0xb166, 0xb167, 0xb168, 0xb169, - 0xb16a, 0xb16b, 0xb16c, 0xb16d, 0xb16e, 0xb16f, 0xb170, 0xb171, - 0xb172, 0xb173, 0xb174, 0xb175, 0xb176, 0xb177, 0xb178, 0xb179, - 0xb17a, 0xb17b, 0xb17c, 0xb17d, 0xb17e, 0xb180, 0xb181, 0xb182, - 0xb183, 0xb184, 0xb185, 0xb186, 0xb187, 0xb188, 0xb189, 0xb18a, - 0xb18b, 0xb18c, 0xb18d, 0xb18e, 0xb18f, 0xb190, 0xb191, 0xb192, - 0xb193, 0xb194, 0xb195, 0xb196, 0xb197, 0xb198, 0xb199, 0xb19a, - 0xb19b, 0xb19c, 0xb19d, 0xb19e, 0xb19f, 0xb1a0, 0xb240, 0xb241, - 0xb242, 0xb243, 0xb244, 0xb245, 0xb246, 0xb247, 0xb248, 0xb249, - 0xb24a, 0xb24b, 0xb24c, 0xb24d, 0xb24e, 0xb24f, 0xb250, 0xb251, - 0xb252, 0xb253, 0xb254, 0xb255, 0xb256, 0xb257, 0xb258, 0xb259, - 0xb25a, 0xb25b, 0xb25c, 0xb25d, 0xb25e, 0xb25f, 0xb260, 0xb261, - 0xb262, 0xb263, 0xb264, 0xb265, 0xb266, 0xb267, 0xb268, 0xb269, - 0xb26a, 0xb26b, 0xb26c, 0xb26d, 0xb26e, 0xb26f, 0xb270, 0xb271, - 0xb272, 0xb273, 0xb274, 0xb275, 0xb276, 0xb277, 0xb278, 0xb279, - 0xb27a, 0xb27b, 0xb27c, 0xb27d, 0xb27e, 0xb280, 0xb281, 0xb282, - 0xb283, 0xb284, 0xb285, 0xb286, 0xb287, 0xb288, 0xb289, 0xb28a, - 0xb28b, 0xb28c, 0xb28d, 0xb28e, 0xb28f, 0xb290, 0xb291, 0xb292, - 0xb293, 0xb294, 0xb295, 0xb296, 0xb297, 0xb298, 0xb299, 0xb29a, - 0xb29b, 0xb29c, 0xb29d, 0xb29e, 0xb29f, 0xb2a0, 0xb340, 0xb341, - 0xb342, 0xb343, 0xb344, 0xb345, 0xb346, 0xb347, 0xb348, 0xb349, - 0xb34a, 0xb34b, 0xb34c, 0xb34d, 0xb34e, 0xb34f, 0xb350, 0xb351, - 0xb352, 0xb353, 0xb354, 0xb355, 0xb356, 0xb357, 0xb358, 0xb359, - 0xb35a, 0xb35b, 0xb35c, 0xb35d, 0xb35e, 0xb35f, 0xb360, 0xb361, - 0xb362, 0xb363, 0xb364, 0xb365, 0xb366, 0xb367, 0xb368, 0xb369, - 0xb36a, 0xb36b, 0xb36c, 0xb36d, 0xb36e, 0xb36f, 0xb370, 0xb371, - 0xb372, 0xb373, 0xb374, 0xb375, 0xb376, 0xb377, 0xb378, 0xb379, - 0xb37a, 0xb37b, 0xb37c, 0xb37d, 0xb37e, 0xb380, 0xb381, 0xb382, - 0xb383, 0xb384, 0xb385, 0xb386, 0xb387, 0xb388, 0xb389, 0xb38a, - 0xb38b, 0xb38c, 0xb38d, 0xb38e, 0xb38f, 0xb390, 0xb391, 0xb392, - 0xb393, 0xb394, 0xb395, 0xb396, 0xb397, 0xb398, 0xb399, 0xb39a, - 0xb39b, 0xb39c, 0xb39d, 0xb39e, 0xb39f, 0xb3a0, 0xb440, 0xb441, - 0xb442, 0xb443, 0xb444, 0xb445, 0xb446, 0xb447, 0xb448, 0xb449, - 0xb44a, 0xb44b, 0xb44c, 0xb44d, 0xb44e, 0xb44f, 0xb450, 0xb451, - 0xb452, 0xb453, 0xb454, 0xb455, 0xb456, 0xb457, 0xb458, 0xb459, - 0xb45a, 0xb45b, 0xb45c, 0xb45d, 0xb45e, 0xb45f, 0xb460, 0xb461, - 0xb462, 0xb463, 0xb464, 0xb465, 0xb466, 0xb467, 0xb468, 0xb469, - 0xb46a, 0xb46b, 0xb46c, 0xb46d, 0xb46e, 0xb46f, 0xb470, 0xb471, - 0xb472, 0xb473, 0xb474, 0xb475, 0xb476, 0xb477, 0xb478, 0xb479, - 0xb47a, 0xb47b, 0xb47c, 0xb47d, 0xb47e, 0xb480, 0xb481, 0xb482, - 0xb483, 0xb484, 0xb485, 0xb486, 0xb487, 0xb488, 0xb489, 0xb48a, - 0xb48b, 0xb48c, 0xb48d, 0xb48e, 0xb48f, 0xb490, 0xb491, 0xb492, - 0xb493, 0xb494, 0xb495, 0xb496, 0xb497, 0xb498, 0xb499, 0xb49a, - 0xb49b, 0xb49c, 0xb49d, 0xb49e, 0xb49f, 0xb4a0, 0xb540, 0xb541, - 0xb542, 0xb543, 0xb544, 0xb545, 0xb546, 0xb547, 0xb548, 0xb549, - 0xb54a, 0xb54b, 0xb54c, 0xb54d, 0xb54e, 0xb54f, 0xb550, 0xb551, - 0xb552, 0xb553, 0xb554, 0xb555, 0xb556, 0xb557, 0xb558, 0xb559, - 0xb55a, 0xb55b, 0xb55c, 0xb55d, 0xb55e, 0xb55f, 0xb560, 0xb561, - 0xb562, 0xb563, 0xb564, 0xb565, 0xb566, 0xb567, 0xb568, 0xb569, - 0xb56a, 0xb56b, 0xb56c, 0xb56d, 0xb56e, 0xb56f, 0xb570, 0xb571, - 0xb572, 0xb573, 0xb574, 0xb575, 0xb576, 0xb577, 0xb578, 0xb579, - 0xb57a, 0xb57b, 0xb57c, 0xb57d, 0xb57e, 0xb580, 0xb581, 0xb582, - 0xb583, 0xb584, 0xb585, 0xb586, 0xb587, 0xb588, 0xb589, 0xb58a, - 0xb58b, 0xb58c, 0xb58d, 0xb58e, 0xb58f, 0xb590, 0xb591, 0xb592, - 0xb593, 0xb594, 0xb595, 0xb596, 0xb597, 0xb598, 0xb599, 0xb59a, - 0xb59b, 0xb59c, 0xb59d, 0xb59e, 0xb59f, 0xb5a0, 0xb640, 0xb641, - 0xb642, 0xb643, 0xb644, 0xb645, 0xb646, 0xb647, 0xb648, 0xb649, - 0xb64a, 0xb64b, 0xb64c, 0xb64d, 0xb64e, 0xb64f, 0xb650, 0xb651, - 0xb652, 0xb653, 0xb654, 0xb655, 0xb656, 0xb657, 0xb658, 0xb659, - 0xb65a, 0xb65b, 0xb65c, 0xb65d, 0xb65e, 0xb65f, 0xb660, 0xb661, - 0xb662, 0xb663, 0xb664, 0xb665, 0xb666, 0xb667, 0xb668, 0xb669, - 0xb66a, 0xb66b, 0xb66c, 0xb66d, 0xb66e, 0xb66f, 0xb670, 0xb671, - 0xb672, 0xb673, 0xb674, 0xb675, 0xb676, 0xb677, 0xb678, 0xb679, - 0xb67a, 0xb67b, 0xb67c, 0xb67d, 0xb67e, 0xb680, 0xb681, 0xb682, - 0xb683, 0xb684, 0xb685, 0xb686, 0xb687, 0xb688, 0xb689, 0xb68a, - 0xb68b, 0xb68c, 0xb68d, 0xb68e, 0xb68f, 0xb690, 0xb691, 0xb692, - 0xb693, 0xb694, 0xb695, 0xb696, 0xb697, 0xb698, 0xb699, 0xb69a, - 0xb69b, 0xb69c, 0xb69d, 0xb69e, 0xb69f, 0xb6a0, 0xb740, 0xb741, - 0xb742, 0xb743, 0xb744, 0xb745, 0xb746, 0xb747, 0xb748, 0xb749, - 0xb74a, 0xb74b, 0xb74c, 0xb74d, 0xb74e, 0xb74f, 0xb750, 0xb751, - 0xb752, 0xb753, 0xb754, 0xb755, 0xb756, 0xb757, 0xb758, 0xb759, - 0xb75a, 0xb75b, 0xb75c, 0xb75d, 0xb75e, 0xb75f, 0xb760, 0xb761, - 0xb762, 0xb763, 0xb764, 0xb765, 0xb766, 0xb767, 0xb768, 0xb769, - 0xb76a, 0xb76b, 0xb76c, 0xb76d, 0xb76e, 0xb76f, 0xb770, 0xb771, - 0xb772, 0xb773, 0xb774, 0xb775, 0xb776, 0xb777, 0xb778, 0xb779, - 0xb77a, 0xb77b, 0xb77c, 0xb77d, 0xb77e, 0xb780, 0xb781, 0xb782, - 0xb783, 0xb784, 0xb785, 0xb786, 0xb787, 0xb788, 0xb789, 0xb78a, - 0xb78b, 0xb78c, 0xb78d, 0xb78e, 0xb78f, 0xb790, 0xb791, 0xb792, - 0xb793, 0xb794, 0xb795, 0xb796, 0xb797, 0xb798, 0xb799, 0xb79a, - 0xb79b, 0xb79c, 0xb79d, 0xb79e, 0xb79f, 0xb7a0, 0xb840, 0xb841, - 0xb842, 0xb843, 0xb844, 0xb845, 0xb846, 0xb847, 0xb848, 0xb849, - 0xb84a, 0xb84b, 0xb84c, 0xb84d, 0xb84e, 0xb84f, 0xb850, 0xb851, - 0xb852, 0xb853, 0xb854, 0xb855, 0xb856, 0xb857, 0xb858, 0xb859, - 0xb85a, 0xb85b, 0xb85c, 0xb85d, 0xb85e, 0xb85f, 0xb860, 0xb861, - 0xb862, 0xb863, 0xb864, 0xb865, 0xb866, 0xb867, 0xb868, 0xb869, - 0xb86a, 0xb86b, 0xb86c, 0xb86d, 0xb86e, 0xb86f, 0xb870, 0xb871, - 0xb872, 0xb873, 0xb874, 0xb875, 0xb876, 0xb877, 0xb878, 0xb879, - 0xb87a, 0xb87b, 0xb87c, 0xb87d, 0xb87e, 0xb880, 0xb881, 0xb882, - 0xb883, 0xb884, 0xb885, 0xb886, 0xb887, 0xb888, 0xb889, 0xb88a, - 0xb88b, 0xb88c, 0xb88d, 0xb88e, 0xb88f, 0xb890, 0xb891, 0xb892, - 0xb893, 0xb894, 0xb895, 0xb896, 0xb897, 0xb898, 0xb899, 0xb89a, - 0xb89b, 0xb89c, 0xb89d, 0xb89e, 0xb89f, 0xb8a0, 0xb940, 0xb941, - 0xb942, 0xb943, 0xb944, 0xb945, 0xb946, 0xb947, 0xb948, 0xb949, - 0xb94a, 0xb94b, 0xb94c, 0xb94d, 0xb94e, 0xb94f, 0xb950, 0xb951, - 0xb952, 0xb953, 0xb954, 0xb955, 0xb956, 0xb957, 0xb958, 0xb959, - 0xb95a, 0xb95b, 0xb95c, 0xb95d, 0xb95e, 0xb95f, 0xb960, 0xb961, - 0xb962, 0xb963, 0xb964, 0xb965, 0xb966, 0xb967, 0xb968, 0xb969, - 0xb96a, 0xb96b, 0xb96c, 0xb96d, 0xb96e, 0xb96f, 0xb970, 0xb971, - 0xb972, 0xb973, 0xb974, 0xb975, 0xb976, 0xb977, 0xb978, 0xb979, - 0xb97a, 0xb97b, 0xb97c, 0xb97d, 0xb97e, 0xb980, 0xb981, 0xb982, - 0xb983, 0xb984, 0xb985, 0xb986, 0xb987, 0xb988, 0xb989, 0xb98a, - 0xb98b, 0xb98c, 0xb98d, 0xb98e, 0xb98f, 0xb990, 0xb991, 0xb992, - 0xb993, 0xb994, 0xb995, 0xb996, 0xb997, 0xb998, 0xb999, 0xb99a, - 0xb99b, 0xb99c, 0xb99d, 0xb99e, 0xb99f, 0xb9a0, 0xba40, 0xba41, - 0xba42, 0xba43, 0xba44, 0xba45, 0xba46, 0xba47, 0xba48, 0xba49, - 0xba4a, 0xba4b, 0xba4c, 0xba4d, 0xba4e, 0xba4f, 0xba50, 0xba51, - 0xba52, 0xba53, 0xba54, 0xba55, 0xba56, 0xba57, 0xba58, 0xba59, - 0xba5a, 0xba5b, 0xba5c, 0xba5d, 0xba5e, 0xba5f, 0xba60, 0xba61, - 0xba62, 0xba63, 0xba64, 0xba65, 0xba66, 0xba67, 0xba68, 0xba69, - 0xba6a, 0xba6b, 0xba6c, 0xba6d, 0xba6e, 0xba6f, 0xba70, 0xba71, - 0xba72, 0xba73, 0xba74, 0xba75, 0xba76, 0xba77, 0xba78, 0xba79, - 0xba7a, 0xba7b, 0xba7c, 0xba7d, 0xba7e, 0xba80, 0xba81, 0xba82, - 0xba83, 0xba84, 0xba85, 0xba86, 0xba87, 0xba88, 0xba89, 0xba8a, - 0xba8b, 0xba8c, 0xba8d, 0xba8e, 0xba8f, 0xba90, 0xba91, 0xba92, - 0xba93, 0xba94, 0xba95, 0xba96, 0xba97, 0xba98, 0xba99, 0xba9a, - 0xba9b, 0xba9c, 0xba9d, 0xba9e, 0xba9f, 0xbaa0, 0xbb40, 0xbb41, - 0xbb42, 0xbb43, 0xbb44, 0xbb45, 0xbb46, 0xbb47, 0xbb48, 0xbb49, - 0xbb4a, 0xbb4b, 0xbb4c, 0xbb4d, 0xbb4e, 0xbb4f, 0xbb50, 0xbb51, - 0xbb52, 0xbb53, 0xbb54, 0xbb55, 0xbb56, 0xbb57, 0xbb58, 0xbb59, - 0xbb5a, 0xbb5b, 0xbb5c, 0xbb5d, 0xbb5e, 0xbb5f, 0xbb60, 0xbb61, - 0xbb62, 0xbb63, 0xbb64, 0xbb65, 0xbb66, 0xbb67, 0xbb68, 0xbb69, - 0xbb6a, 0xbb6b, 0xbb6c, 0xbb6d, 0xbb6e, 0xbb6f, 0xbb70, 0xbb71, - 0xbb72, 0xbb73, 0xbb74, 0xbb75, 0xbb76, 0xbb77, 0xbb78, 0xbb79, - 0xbb7a, 0xbb7b, 0xbb7c, 0xbb7d, 0xbb7e, 0xbb80, 0xbb81, 0xbb82, - 0xbb83, 0xbb84, 0xbb85, 0xbb86, 0xbb87, 0xbb88, 0xbb89, 0xbb8a, - 0xbb8b, 0xbb8c, 0xbb8d, 0xbb8e, 0xbb8f, 0xbb90, 0xbb91, 0xbb92, - 0xbb93, 0xbb94, 0xbb95, 0xbb96, 0xbb97, 0xbb98, 0xbb99, 0xbb9a, - 0xbb9b, 0xbb9c, 0xbb9d, 0xbb9e, 0xbb9f, 0xbba0, 0xbc40, 0xbc41, - 0xbc42, 0xbc43, 0xbc44, 0xbc45, 0xbc46, 0xbc47, 0xbc48, 0xbc49, - 0xbc4a, 0xbc4b, 0xbc4c, 0xbc4d, 0xbc4e, 0xbc4f, 0xbc50, 0xbc51, - 0xbc52, 0xbc53, 0xbc54, 0xbc55, 0xbc56, 0xbc57, 0xbc58, 0xbc59, - 0xbc5a, 0xbc5b, 0xbc5c, 0xbc5d, 0xbc5e, 0xbc5f, 0xbc60, 0xbc61, - 0xbc62, 0xbc63, 0xbc64, 0xbc65, 0xbc66, 0xbc67, 0xbc68, 0xbc69, - 0xbc6a, 0xbc6b, 0xbc6c, 0xbc6d, 0xbc6e, 0xbc6f, 0xbc70, 0xbc71, - 0xbc72, 0xbc73, 0xbc74, 0xbc75, 0xbc76, 0xbc77, 0xbc78, 0xbc79, - 0xbc7a, 0xbc7b, 0xbc7c, 0xbc7d, 0xbc7e, 0xbc80, 0xbc81, 0xbc82, - 0xbc83, 0xbc84, 0xbc85, 0xbc86, 0xbc87, 0xbc88, 0xbc89, 0xbc8a, - 0xbc8b, 0xbc8c, 0xbc8d, 0xbc8e, 0xbc8f, 0xbc90, 0xbc91, 0xbc92, - 0xbc93, 0xbc94, 0xbc95, 0xbc96, 0xbc97, 0xbc98, 0xbc99, 0xbc9a, - 0xbc9b, 0xbc9c, 0xbc9d, 0xbc9e, 0xbc9f, 0xbca0, 0xbd40, 0xbd41, - 0xbd42, 0xbd43, 0xbd44, 0xbd45, 0xbd46, 0xbd47, 0xbd48, 0xbd49, - 0xbd4a, 0xbd4b, 0xbd4c, 0xbd4d, 0xbd4e, 0xbd4f, 0xbd50, 0xbd51, - 0xbd52, 0xbd53, 0xbd54, 0xbd55, 0xbd56, 0xbd57, 0xbd58, 0xbd59, - 0xbd5a, 0xbd5b, 0xbd5c, 0xbd5d, 0xbd5e, 0xbd5f, 0xbd60, 0xbd61, - 0xbd62, 0xbd63, 0xbd64, 0xbd65, 0xbd66, 0xbd67, 0xbd68, 0xbd69, - 0xbd6a, 0xbd6b, 0xbd6c, 0xbd6d, 0xbd6e, 0xbd6f, 0xbd70, 0xbd71, - 0xbd72, 0xbd73, 0xbd74, 0xbd75, 0xbd76, 0xbd77, 0xbd78, 0xbd79, - 0xbd7a, 0xbd7b, 0xbd7c, 0xbd7d, 0xbd7e, 0xbd80, 0xbd81, 0xbd82, - 0xbd83, 0xbd84, 0xbd85, 0xbd86, 0xbd87, 0xbd88, 0xbd89, 0xbd8a, - 0xbd8b, 0xbd8c, 0xbd8d, 0xbd8e, 0xbd8f, 0xbd90, 0xbd91, 0xbd92, - 0xbd93, 0xbd94, 0xbd95, 0xbd96, 0xbd97, 0xbd98, 0xbd99, 0xbd9a, - 0xbd9b, 0xbd9c, 0xbd9d, 0xbd9e, 0xbd9f, 0xbda0, 0xbe40, 0xbe41, - 0xbe42, 0xbe43, 0xbe44, 0xbe45, 0xbe46, 0xbe47, 0xbe48, 0xbe49, - 0xbe4a, 0xbe4b, 0xbe4c, 0xbe4d, 0xbe4e, 0xbe4f, 0xbe50, 0xbe51, - 0xbe52, 0xbe53, 0xbe54, 0xbe55, 0xbe56, 0xbe57, 0xbe58, 0xbe59, - 0xbe5a, 0xbe5b, 0xbe5c, 0xbe5d, 0xbe5e, 0xbe5f, 0xbe60, 0xbe61, - 0xbe62, 0xbe63, 0xbe64, 0xbe65, 0xbe66, 0xbe67, 0xbe68, 0xbe69, - 0xbe6a, 0xbe6b, 0xbe6c, 0xbe6d, 0xbe6e, 0xbe6f, 0xbe70, 0xbe71, - 0xbe72, 0xbe73, 0xbe74, 0xbe75, 0xbe76, 0xbe77, 0xbe78, 0xbe79, - 0xbe7a, 0xbe7b, 0xbe7c, 0xbe7d, 0xbe7e, 0xbe80, 0xbe81, 0xbe82, - 0xbe83, 0xbe84, 0xbe85, 0xbe86, 0xbe87, 0xbe88, 0xbe89, 0xbe8a, - 0xbe8b, 0xbe8c, 0xbe8d, 0xbe8e, 0xbe8f, 0xbe90, 0xbe91, 0xbe92, - 0xbe93, 0xbe94, 0xbe95, 0xbe96, 0xbe97, 0xbe98, 0xbe99, 0xbe9a, - 0xbe9b, 0xbe9c, 0xbe9d, 0xbe9e, 0xbe9f, 0xbea0, 0xbf40, 0xbf41, - 0xbf42, 0xbf43, 0xbf44, 0xbf45, 0xbf46, 0xbf47, 0xbf48, 0xbf49, - 0xbf4a, 0xbf4b, 0xbf4c, 0xbf4d, 0xbf4e, 0xbf4f, 0xbf50, 0xbf51, - 0xbf52, 0xbf53, 0xbf54, 0xbf55, 0xbf56, 0xbf57, 0xbf58, 0xbf59, - 0xbf5a, 0xbf5b, 0xbf5c, 0xbf5d, 0xbf5e, 0xbf5f, 0xbf60, 0xbf61, - 0xbf62, 0xbf63, 0xbf64, 0xbf65, 0xbf66, 0xbf67, 0xbf68, 0xbf69, - 0xbf6a, 0xbf6b, 0xbf6c, 0xbf6d, 0xbf6e, 0xbf6f, 0xbf70, 0xbf71, - 0xbf72, 0xbf73, 0xbf74, 0xbf75, 0xbf76, 0xbf77, 0xbf78, 0xbf79, - 0xbf7a, 0xbf7b, 0xbf7c, 0xbf7d, 0xbf7e, 0xbf80, 0xbf81, 0xbf82, - 0xbf83, 0xbf84, 0xbf85, 0xbf86, 0xbf87, 0xbf88, 0xbf89, 0xbf8a, - 0xbf8b, 0xbf8c, 0xbf8d, 0xbf8e, 0xbf8f, 0xbf90, 0xbf91, 0xbf92, - 0xbf93, 0xbf94, 0xbf95, 0xbf96, 0xbf97, 0xbf98, 0xbf99, 0xbf9a, - 0xbf9b, 0xbf9c, 0xbf9d, 0xbf9e, 0xbf9f, 0xbfa0, 0xc040, 0xc041, - 0xc042, 0xc043, 0xc044, 0xc045, 0xc046, 0xc047, 0xc048, 0xc049, - 0xc04a, 0xc04b, 0xc04c, 0xc04d, 0xc04e, 0xc04f, 0xc050, 0xc051, - 0xc052, 0xc053, 0xc054, 0xc055, 0xc056, 0xc057, 0xc058, 0xc059, - 0xc05a, 0xc05b, 0xc05c, 0xc05d, 0xc05e, 0xc05f, 0xc060, 0xc061, - 0xc062, 0xc063, 0xc064, 0xc065, 0xc066, 0xc067, 0xc068, 0xc069, - 0xc06a, 0xc06b, 0xc06c, 0xc06d, 0xc06e, 0xc06f, 0xc070, 0xc071, - 0xc072, 0xc073, 0xc074, 0xc075, 0xc076, 0xc077, 0xc078, 0xc079, - 0xc07a, 0xc07b, 0xc07c, 0xc07d, 0xc07e, 0xc080, 0xc081, 0xc082, - 0xc083, 0xc084, 0xc085, 0xc086, 0xc087, 0xc088, 0xc089, 0xc08a, - 0xc08b, 0xc08c, 0xc08d, 0xc08e, 0xc08f, 0xc090, 0xc091, 0xc092, - 0xc093, 0xc094, 0xc095, 0xc096, 0xc097, 0xc098, 0xc099, 0xc09a, - 0xc09b, 0xc09c, 0xc09d, 0xc09e, 0xc09f, 0xc0a0, 0xc140, 0xc141, - 0xc142, 0xc143, 0xc144, 0xc145, 0xc146, 0xc147, 0xc148, 0xc149, - 0xc14a, 0xc14b, 0xc14c, 0xc14d, 0xc14e, 0xc14f, 0xc150, 0xc151, - 0xc152, 0xc153, 0xc154, 0xc155, 0xc156, 0xc157, 0xc158, 0xc159, - 0xc15a, 0xc15b, 0xc15c, 0xc15d, 0xc15e, 0xc15f, 0xc160, 0xc161, - 0xc162, 0xc163, 0xc164, 0xc165, 0xc166, 0xc167, 0xc168, 0xc169, - 0xc16a, 0xc16b, 0xc16c, 0xc16d, 0xc16e, 0xc16f, 0xc170, 0xc171, - 0xc172, 0xc173, 0xc174, 0xc175, 0xc176, 0xc177, 0xc178, 0xc179, - 0xc17a, 0xc17b, 0xc17c, 0xc17d, 0xc17e, 0xc180, 0xc181, 0xc182, - 0xc183, 0xc184, 0xc185, 0xc186, 0xc187, 0xc188, 0xc189, 0xc18a, - 0xc18b, 0xc18c, 0xc18d, 0xc18e, 0xc18f, 0xc190, 0xc191, 0xc192, - 0xc193, 0xc194, 0xc195, 0xc196, 0xc197, 0xc198, 0xc199, 0xc19a, - 0xc19b, 0xc19c, 0xc19d, 0xc19e, 0xc19f, 0xc1a0, 0xc240, 0xc241, - 0xc242, 0xc243, 0xc244, 0xc245, 0xc246, 0xc247, 0xc248, 0xc249, - 0xc24a, 0xc24b, 0xc24c, 0xc24d, 0xc24e, 0xc24f, 0xc250, 0xc251, - 0xc252, 0xc253, 0xc254, 0xc255, 0xc256, 0xc257, 0xc258, 0xc259, - 0xc25a, 0xc25b, 0xc25c, 0xc25d, 0xc25e, 0xc25f, 0xc260, 0xc261, - 0xc262, 0xc263, 0xc264, 0xc265, 0xc266, 0xc267, 0xc268, 0xc269, - 0xc26a, 0xc26b, 0xc26c, 0xc26d, 0xc26e, 0xc26f, 0xc270, 0xc271, - 0xc272, 0xc273, 0xc274, 0xc275, 0xc276, 0xc277, 0xc278, 0xc279, - 0xc27a, 0xc27b, 0xc27c, 0xc27d, 0xc27e, 0xc280, 0xc281, 0xc282, - 0xc283, 0xc284, 0xc285, 0xc286, 0xc287, 0xc288, 0xc289, 0xc28a, - 0xc28b, 0xc28c, 0xc28d, 0xc28e, 0xc28f, 0xc290, 0xc291, 0xc292, - 0xc293, 0xc294, 0xc295, 0xc296, 0xc297, 0xc298, 0xc299, 0xc29a, - 0xc29b, 0xc29c, 0xc29d, 0xc29e, 0xc29f, 0xc2a0, 0xc340, 0xc341, - 0xc342, 0xc343, 0xc344, 0xc345, 0xc346, 0xc347, 0xc348, 0xc349, - 0xc34a, 0xc34b, 0xc34c, 0xc34d, 0xc34e, 0xc34f, 0xc350, 0xc351, - 0xc352, 0xc353, 0xc354, 0xc355, 0xc356, 0xc357, 0xc358, 0xc359, - 0xc35a, 0xc35b, 0xc35c, 0xc35d, 0xc35e, 0xc35f, 0xc360, 0xc361, - 0xc362, 0xc363, 0xc364, 0xc365, 0xc366, 0xc367, 0xc368, 0xc369, - 0xc36a, 0xc36b, 0xc36c, 0xc36d, 0xc36e, 0xc36f, 0xc370, 0xc371, - 0xc372, 0xc373, 0xc374, 0xc375, 0xc376, 0xc377, 0xc378, 0xc379, - 0xc37a, 0xc37b, 0xc37c, 0xc37d, 0xc37e, 0xc380, 0xc381, 0xc382, - 0xc383, 0xc384, 0xc385, 0xc386, 0xc387, 0xc388, 0xc389, 0xc38a, - 0xc38b, 0xc38c, 0xc38d, 0xc38e, 0xc38f, 0xc390, 0xc391, 0xc392, - 0xc393, 0xc394, 0xc395, 0xc396, 0xc397, 0xc398, 0xc399, 0xc39a, - 0xc39b, 0xc39c, 0xc39d, 0xc39e, 0xc39f, 0xc3a0, 0xc440, 0xc441, - 0xc442, 0xc443, 0xc444, 0xc445, 0xc446, 0xc447, 0xc448, 0xc449, - 0xc44a, 0xc44b, 0xc44c, 0xc44d, 0xc44e, 0xc44f, 0xc450, 0xc451, - 0xc452, 0xc453, 0xc454, 0xc455, 0xc456, 0xc457, 0xc458, 0xc459, - 0xc45a, 0xc45b, 0xc45c, 0xc45d, 0xc45e, 0xc45f, 0xc460, 0xc461, - 0xc462, 0xc463, 0xc464, 0xc465, 0xc466, 0xc467, 0xc468, 0xc469, - 0xc46a, 0xc46b, 0xc46c, 0xc46d, 0xc46e, 0xc46f, 0xc470, 0xc471, - 0xc472, 0xc473, 0xc474, 0xc475, 0xc476, 0xc477, 0xc478, 0xc479, - 0xc47a, 0xc47b, 0xc47c, 0xc47d, 0xc47e, 0xc480, 0xc481, 0xc482, - 0xc483, 0xc484, 0xc485, 0xc486, 0xc487, 0xc488, 0xc489, 0xc48a, - 0xc48b, 0xc48c, 0xc48d, 0xc48e, 0xc48f, 0xc490, 0xc491, 0xc492, - 0xc493, 0xc494, 0xc495, 0xc496, 0xc497, 0xc498, 0xc499, 0xc49a, - 0xc49b, 0xc49c, 0xc49d, 0xc49e, 0xc49f, 0xc4a0, 0xc540, 0xc541, - 0xc542, 0xc543, 0xc544, 0xc545, 0xc546, 0xc547, 0xc548, 0xc549, - 0xc54a, 0xc54b, 0xc54c, 0xc54d, 0xc54e, 0xc54f, 0xc550, 0xc551, - 0xc552, 0xc553, 0xc554, 0xc555, 0xc556, 0xc557, 0xc558, 0xc559, - 0xc55a, 0xc55b, 0xc55c, 0xc55d, 0xc55e, 0xc55f, 0xc560, 0xc561, - 0xc562, 0xc563, 0xc564, 0xc565, 0xc566, 0xc567, 0xc568, 0xc569, - 0xc56a, 0xc56b, 0xc56c, 0xc56d, 0xc56e, 0xc56f, 0xc570, 0xc571, - 0xc572, 0xc573, 0xc574, 0xc575, 0xc576, 0xc577, 0xc578, 0xc579, - 0xc57a, 0xc57b, 0xc57c, 0xc57d, 0xc57e, 0xc580, 0xc581, 0xc582, - 0xc583, 0xc584, 0xc585, 0xc586, 0xc587, 0xc588, 0xc589, 0xc58a, - 0xc58b, 0xc58c, 0xc58d, 0xc58e, 0xc58f, 0xc590, 0xc591, 0xc592, - 0xc593, 0xc594, 0xc595, 0xc596, 0xc597, 0xc598, 0xc599, 0xc59a, - 0xc59b, 0xc59c, 0xc59d, 0xc59e, 0xc59f, 0xc5a0, 0xc640, 0xc641, - 0xc642, 0xc643, 0xc644, 0xc645, 0xc646, 0xc647, 0xc648, 0xc649, - 0xc64a, 0xc64b, 0xc64c, 0xc64d, 0xc64e, 0xc64f, 0xc650, 0xc651, - 0xc652, 0xc653, 0xc654, 0xc655, 0xc656, 0xc657, 0xc658, 0xc659, - 0xc65a, 0xc65b, 0xc65c, 0xc65d, 0xc65e, 0xc65f, 0xc660, 0xc661, - 0xc662, 0xc663, 0xc664, 0xc665, 0xc666, 0xc667, 0xc668, 0xc669, - 0xc66a, 0xc66b, 0xc66c, 0xc66d, 0xc66e, 0xc66f, 0xc670, 0xc671, - 0xc672, 0xc673, 0xc674, 0xc675, 0xc676, 0xc677, 0xc678, 0xc679, - 0xc67a, 0xc67b, 0xc67c, 0xc67d, 0xc67e, 0xc680, 0xc681, 0xc682, - 0xc683, 0xc684, 0xc685, 0xc686, 0xc687, 0xc688, 0xc689, 0xc68a, - 0xc68b, 0xc68c, 0xc68d, 0xc68e, 0xc68f, 0xc690, 0xc691, 0xc692, - 0xc693, 0xc694, 0xc695, 0xc696, 0xc697, 0xc698, 0xc699, 0xc69a, - 0xc69b, 0xc69c, 0xc69d, 0xc69e, 0xc69f, 0xc6a0, 0xc740, 0xc741, - 0xc742, 0xc743, 0xc744, 0xc745, 0xc746, 0xc747, 0xc748, 0xc749, - 0xc74a, 0xc74b, 0xc74c, 0xc74d, 0xc74e, 0xc74f, 0xc750, 0xc751, - 0xc752, 0xc753, 0xc754, 0xc755, 0xc756, 0xc757, 0xc758, 0xc759, - 0xc75a, 0xc75b, 0xc75c, 0xc75d, 0xc75e, 0xc75f, 0xc760, 0xc761, - 0xc762, 0xc763, 0xc764, 0xc765, 0xc766, 0xc767, 0xc768, 0xc769, - 0xc76a, 0xc76b, 0xc76c, 0xc76d, 0xc76e, 0xc76f, 0xc770, 0xc771, - 0xc772, 0xc773, 0xc774, 0xc775, 0xc776, 0xc777, 0xc778, 0xc779, - 0xc77a, 0xc77b, 0xc77c, 0xc77d, 0xc77e, 0xc780, 0xc781, 0xc782, - 0xc783, 0xc784, 0xc785, 0xc786, 0xc787, 0xc788, 0xc789, 0xc78a, - 0xc78b, 0xc78c, 0xc78d, 0xc78e, 0xc78f, 0xc790, 0xc791, 0xc792, - 0xc793, 0xc794, 0xc795, 0xc796, 0xc797, 0xc798, 0xc799, 0xc79a, - 0xc79b, 0xc79c, 0xc79d, 0xc79e, 0xc79f, 0xc7a0, 0xc840, 0xc841, - 0xc842, 0xc843, 0xc844, 0xc845, 0xc846, 0xc847, 0xc848, 0xc849, - 0xc84a, 0xc84b, 0xc84c, 0xc84d, 0xc84e, 0xc84f, 0xc850, 0xc851, - 0xc852, 0xc853, 0xc854, 0xc855, 0xc856, 0xc857, 0xc858, 0xc859, - 0xc85a, 0xc85b, 0xc85c, 0xc85d, 0xc85e, 0xc85f, 0xc860, 0xc861, - 0xc862, 0xc863, 0xc864, 0xc865, 0xc866, 0xc867, 0xc868, 0xc869, - 0xc86a, 0xc86b, 0xc86c, 0xc86d, 0xc86e, 0xc86f, 0xc870, 0xc871, - 0xc872, 0xc873, 0xc874, 0xc875, 0xc876, 0xc877, 0xc878, 0xc879, - 0xc87a, 0xc87b, 0xc87c, 0xc87d, 0xc87e, 0xc880, 0xc881, 0xc882, - 0xc883, 0xc884, 0xc885, 0xc886, 0xc887, 0xc888, 0xc889, 0xc88a, - 0xc88b, 0xc88c, 0xc88d, 0xc88e, 0xc88f, 0xc890, 0xc891, 0xc892, - 0xc893, 0xc894, 0xc895, 0xc896, 0xc897, 0xc898, 0xc899, 0xc89a, - 0xc89b, 0xc89c, 0xc89d, 0xc89e, 0xc89f, 0xc8a0, 0xc940, 0xc941, - 0xc942, 0xc943, 0xc944, 0xc945, 0xc946, 0xc947, 0xc948, 0xc949, - 0xc94a, 0xc94b, 0xc94c, 0xc94d, 0xc94e, 0xc94f, 0xc950, 0xc951, - 0xc952, 0xc953, 0xc954, 0xc955, 0xc956, 0xc957, 0xc958, 0xc959, - 0xc95a, 0xc95b, 0xc95c, 0xc95d, 0xc95e, 0xc95f, 0xc960, 0xc961, - 0xc962, 0xc963, 0xc964, 0xc965, 0xc966, 0xc967, 0xc968, 0xc969, - 0xc96a, 0xc96b, 0xc96c, 0xc96d, 0xc96e, 0xc96f, 0xc970, 0xc971, - 0xc972, 0xc973, 0xc974, 0xc975, 0xc976, 0xc977, 0xc978, 0xc979, - 0xc97a, 0xc97b, 0xc97c, 0xc97d, 0xc97e, 0xc980, 0xc981, 0xc982, - 0xc983, 0xc984, 0xc985, 0xc986, 0xc987, 0xc988, 0xc989, 0xc98a, - 0xc98b, 0xc98c, 0xc98d, 0xc98e, 0xc98f, 0xc990, 0xc991, 0xc992, - 0xc993, 0xc994, 0xc995, 0xc996, 0xc997, 0xc998, 0xc999, 0xc99a, - 0xc99b, 0xc99c, 0xc99d, 0xc99e, 0xc99f, 0xc9a0, 0xca40, 0xca41, - 0xca42, 0xca43, 0xca44, 0xca45, 0xca46, 0xca47, 0xca48, 0xca49, - 0xca4a, 0xca4b, 0xca4c, 0xca4d, 0xca4e, 0xca4f, 0xca50, 0xca51, - 0xca52, 0xca53, 0xca54, 0xca55, 0xca56, 0xca57, 0xca58, 0xca59, - 0xca5a, 0xca5b, 0xca5c, 0xca5d, 0xca5e, 0xca5f, 0xca60, 0xca61, - 0xca62, 0xca63, 0xca64, 0xca65, 0xca66, 0xca67, 0xca68, 0xca69, - 0xca6a, 0xca6b, 0xca6c, 0xca6d, 0xca6e, 0xca6f, 0xca70, 0xca71, - 0xca72, 0xca73, 0xca74, 0xca75, 0xca76, 0xca77, 0xca78, 0xca79, - 0xca7a, 0xca7b, 0xca7c, 0xca7d, 0xca7e, 0xca80, 0xca81, 0xca82, - 0xca83, 0xca84, 0xca85, 0xca86, 0xca87, 0xca88, 0xca89, 0xca8a, - 0xca8b, 0xca8c, 0xca8d, 0xca8e, 0xca8f, 0xca90, 0xca91, 0xca92, - 0xca93, 0xca94, 0xca95, 0xca96, 0xca97, 0xca98, 0xca99, 0xca9a, - 0xca9b, 0xca9c, 0xca9d, 0xca9e, 0xca9f, 0xcaa0, 0xcb40, 0xcb41, - 0xcb42, 0xcb43, 0xcb44, 0xcb45, 0xcb46, 0xcb47, 0xcb48, 0xcb49, - 0xcb4a, 0xcb4b, 0xcb4c, 0xcb4d, 0xcb4e, 0xcb4f, 0xcb50, 0xcb51, - 0xcb52, 0xcb53, 0xcb54, 0xcb55, 0xcb56, 0xcb57, 0xcb58, 0xcb59, - 0xcb5a, 0xcb5b, 0xcb5c, 0xcb5d, 0xcb5e, 0xcb5f, 0xcb60, 0xcb61, - 0xcb62, 0xcb63, 0xcb64, 0xcb65, 0xcb66, 0xcb67, 0xcb68, 0xcb69, - 0xcb6a, 0xcb6b, 0xcb6c, 0xcb6d, 0xcb6e, 0xcb6f, 0xcb70, 0xcb71, - 0xcb72, 0xcb73, 0xcb74, 0xcb75, 0xcb76, 0xcb77, 0xcb78, 0xcb79, - 0xcb7a, 0xcb7b, 0xcb7c, 0xcb7d, 0xcb7e, 0xcb80, 0xcb81, 0xcb82, - 0xcb83, 0xcb84, 0xcb85, 0xcb86, 0xcb87, 0xcb88, 0xcb89, 0xcb8a, - 0xcb8b, 0xcb8c, 0xcb8d, 0xcb8e, 0xcb8f, 0xcb90, 0xcb91, 0xcb92, - 0xcb93, 0xcb94, 0xcb95, 0xcb96, 0xcb97, 0xcb98, 0xcb99, 0xcb9a, - 0xcb9b, 0xcb9c, 0xcb9d, 0xcb9e, 0xcb9f, 0xcba0, 0xcc40, 0xcc41, - 0xcc42, 0xcc43, 0xcc44, 0xcc45, 0xcc46, 0xcc47, 0xcc48, 0xcc49, - 0xcc4a, 0xcc4b, 0xcc4c, 0xcc4d, 0xcc4e, 0xcc4f, 0xcc50, 0xcc51, - 0xcc52, 0xcc53, 0xcc54, 0xcc55, 0xcc56, 0xcc57, 0xcc58, 0xcc59, - 0xcc5a, 0xcc5b, 0xcc5c, 0xcc5d, 0xcc5e, 0xcc5f, 0xcc60, 0xcc61, - 0xcc62, 0xcc63, 0xcc64, 0xcc65, 0xcc66, 0xcc67, 0xcc68, 0xcc69, - 0xcc6a, 0xcc6b, 0xcc6c, 0xcc6d, 0xcc6e, 0xcc6f, 0xcc70, 0xcc71, - 0xcc72, 0xcc73, 0xcc74, 0xcc75, 0xcc76, 0xcc77, 0xcc78, 0xcc79, - 0xcc7a, 0xcc7b, 0xcc7c, 0xcc7d, 0xcc7e, 0xcc80, 0xcc81, 0xcc82, - 0xcc83, 0xcc84, 0xcc85, 0xcc86, 0xcc87, 0xcc88, 0xcc89, 0xcc8a, - 0xcc8b, 0xcc8c, 0xcc8d, 0xcc8e, 0xcc8f, 0xcc90, 0xcc91, 0xcc92, - 0xcc93, 0xcc94, 0xcc95, 0xcc96, 0xcc97, 0xcc98, 0xcc99, 0xcc9a, - 0xcc9b, 0xcc9c, 0xcc9d, 0xcc9e, 0xcc9f, 0xcca0, 0xcd40, 0xcd41, - 0xcd42, 0xcd43, 0xcd44, 0xcd45, 0xcd46, 0xcd47, 0xcd48, 0xcd49, - 0xcd4a, 0xcd4b, 0xcd4c, 0xcd4d, 0xcd4e, 0xcd4f, 0xcd50, 0xcd51, - 0xcd52, 0xcd53, 0xcd54, 0xcd55, 0xcd56, 0xcd57, 0xcd58, 0xcd59, - 0xcd5a, 0xcd5b, 0xcd5c, 0xcd5d, 0xcd5e, 0xcd5f, 0xcd60, 0xcd61, - 0xcd62, 0xcd63, 0xcd64, 0xcd65, 0xcd66, 0xcd67, 0xcd68, 0xcd69, - 0xcd6a, 0xcd6b, 0xcd6c, 0xcd6d, 0xcd6e, 0xcd6f, 0xcd70, 0xcd71, - 0xcd72, 0xcd73, 0xcd74, 0xcd75, 0xcd76, 0xcd77, 0xcd78, 0xcd79, - 0xcd7a, 0xcd7b, 0xcd7c, 0xcd7d, 0xcd7e, 0xcd80, 0xcd81, 0xcd82, - 0xcd83, 0xcd84, 0xcd85, 0xcd86, 0xcd87, 0xcd88, 0xcd89, 0xcd8a, - 0xcd8b, 0xcd8c, 0xcd8d, 0xcd8e, 0xcd8f, 0xcd90, 0xcd91, 0xcd92, - 0xcd93, 0xcd94, 0xcd95, 0xcd96, 0xcd97, 0xcd98, 0xcd99, 0xcd9a, - 0xcd9b, 0xcd9c, 0xcd9d, 0xcd9e, 0xcd9f, 0xcda0, 0xce40, 0xce41, - 0xce42, 0xce43, 0xce44, 0xce45, 0xce46, 0xce47, 0xce48, 0xce49, - 0xce4a, 0xce4b, 0xce4c, 0xce4d, 0xce4e, 0xce4f, 0xce50, 0xce51, - 0xce52, 0xce53, 0xce54, 0xce55, 0xce56, 0xce57, 0xce58, 0xce59, - 0xce5a, 0xce5b, 0xce5c, 0xce5d, 0xce5e, 0xce5f, 0xce60, 0xce61, - 0xce62, 0xce63, 0xce64, 0xce65, 0xce66, 0xce67, 0xce68, 0xce69, - 0xce6a, 0xce6b, 0xce6c, 0xce6d, 0xce6e, 0xce6f, 0xce70, 0xce71, - 0xce72, 0xce73, 0xce74, 0xce75, 0xce76, 0xce77, 0xce78, 0xce79, - 0xce7a, 0xce7b, 0xce7c, 0xce7d, 0xce7e, 0xce80, 0xce81, 0xce82, - 0xce83, 0xce84, 0xce85, 0xce86, 0xce87, 0xce88, 0xce89, 0xce8a, - 0xce8b, 0xce8c, 0xce8d, 0xce8e, 0xce8f, 0xce90, 0xce91, 0xce92, - 0xce93, 0xce94, 0xce95, 0xce96, 0xce97, 0xce98, 0xce99, 0xce9a, - 0xce9b, 0xce9c, 0xce9d, 0xce9e, 0xce9f, 0xcea0, 0xcf40, 0xcf41, - 0xcf42, 0xcf43, 0xcf44, 0xcf45, 0xcf46, 0xcf47, 0xcf48, 0xcf49, - 0xcf4a, 0xcf4b, 0xcf4c, 0xcf4d, 0xcf4e, 0xcf4f, 0xcf50, 0xcf51, - 0xcf52, 0xcf53, 0xcf54, 0xcf55, 0xcf56, 0xcf57, 0xcf58, 0xcf59, - 0xcf5a, 0xcf5b, 0xcf5c, 0xcf5d, 0xcf5e, 0xcf5f, 0xcf60, 0xcf61, - 0xcf62, 0xcf63, 0xcf64, 0xcf65, 0xcf66, 0xcf67, 0xcf68, 0xcf69, - 0xcf6a, 0xcf6b, 0xcf6c, 0xcf6d, 0xcf6e, 0xcf6f, 0xcf70, 0xcf71, - 0xcf72, 0xcf73, 0xcf74, 0xcf75, 0xcf76, 0xcf77, 0xcf78, 0xcf79, - 0xcf7a, 0xcf7b, 0xcf7c, 0xcf7d, 0xcf7e, 0xcf80, 0xcf81, 0xcf82, - 0xcf83, 0xcf84, 0xcf85, 0xcf86, 0xcf87, 0xcf88, 0xcf89, 0xcf8a, - 0xcf8b, 0xcf8c, 0xcf8d, 0xcf8e, 0xcf8f, 0xcf90, 0xcf91, 0xcf92, - 0xcf93, 0xcf94, 0xcf95, 0xcf96, 0xcf97, 0xcf98, 0xcf99, 0xcf9a, - 0xcf9b, 0xcf9c, 0xcf9d, 0xcf9e, 0xcf9f, 0xcfa0, 0xd040, 0xd041, - 0xd042, 0xd043, 0xd044, 0xd045, 0xd046, 0xd047, 0xd048, 0xd049, - 0xd04a, 0xd04b, 0xd04c, 0xd04d, 0xd04e, 0xd04f, 0xd050, 0xd051, - 0xd052, 0xd053, 0xd054, 0xd055, 0xd056, 0xd057, 0xd058, 0xd059, - 0xd05a, 0xd05b, 0xd05c, 0xd05d, 0xd05e, 0xd05f, 0xd060, 0xd061, - 0xd062, 0xd063, 0xd064, 0xd065, 0xd066, 0xd067, 0xd068, 0xd069, - 0xd06a, 0xd06b, 0xd06c, 0xd06d, 0xd06e, 0xd06f, 0xd070, 0xd071, - 0xd072, 0xd073, 0xd074, 0xd075, 0xd076, 0xd077, 0xd078, 0xd079, - 0xd07a, 0xd07b, 0xd07c, 0xd07d, 0xd07e, 0xd080, 0xd081, 0xd082, - 0xd083, 0xd084, 0xd085, 0xd086, 0xd087, 0xd088, 0xd089, 0xd08a, - 0xd08b, 0xd08c, 0xd08d, 0xd08e, 0xd08f, 0xd090, 0xd091, 0xd092, - 0xd093, 0xd094, 0xd095, 0xd096, 0xd097, 0xd098, 0xd099, 0xd09a, - 0xd09b, 0xd09c, 0xd09d, 0xd09e, 0xd09f, 0xd0a0, 0xd140, 0xd141, - 0xd142, 0xd143, 0xd144, 0xd145, 0xd146, 0xd147, 0xd148, 0xd149, - 0xd14a, 0xd14b, 0xd14c, 0xd14d, 0xd14e, 0xd14f, 0xd150, 0xd151, - 0xd152, 0xd153, 0xd154, 0xd155, 0xd156, 0xd157, 0xd158, 0xd159, - 0xd15a, 0xd15b, 0xd15c, 0xd15d, 0xd15e, 0xd15f, 0xd160, 0xd161, - 0xd162, 0xd163, 0xd164, 0xd165, 0xd166, 0xd167, 0xd168, 0xd169, - 0xd16a, 0xd16b, 0xd16c, 0xd16d, 0xd16e, 0xd16f, 0xd170, 0xd171, - 0xd172, 0xd173, 0xd174, 0xd175, 0xd176, 0xd177, 0xd178, 0xd179, - 0xd17a, 0xd17b, 0xd17c, 0xd17d, 0xd17e, 0xd180, 0xd181, 0xd182, - 0xd183, 0xd184, 0xd185, 0xd186, 0xd187, 0xd188, 0xd189, 0xd18a, - 0xd18b, 0xd18c, 0xd18d, 0xd18e, 0xd18f, 0xd190, 0xd191, 0xd192, - 0xd193, 0xd194, 0xd195, 0xd196, 0xd197, 0xd198, 0xd199, 0xd19a, - 0xd19b, 0xd19c, 0xd19d, 0xd19e, 0xd19f, 0xd1a0, 0xd240, 0xd241, - 0xd242, 0xd243, 0xd244, 0xd245, 0xd246, 0xd247, 0xd248, 0xd249, - 0xd24a, 0xd24b, 0xd24c, 0xd24d, 0xd24e, 0xd24f, 0xd250, 0xd251, - 0xd252, 0xd253, 0xd254, 0xd255, 0xd256, 0xd257, 0xd258, 0xd259, - 0xd25a, 0xd25b, 0xd25c, 0xd25d, 0xd25e, 0xd25f, 0xd260, 0xd261, - 0xd262, 0xd263, 0xd264, 0xd265, 0xd266, 0xd267, 0xd268, 0xd269, - 0xd26a, 0xd26b, 0xd26c, 0xd26d, 0xd26e, 0xd26f, 0xd270, 0xd271, - 0xd272, 0xd273, 0xd274, 0xd275, 0xd276, 0xd277, 0xd278, 0xd279, - 0xd27a, 0xd27b, 0xd27c, 0xd27d, 0xd27e, 0xd280, 0xd281, 0xd282, - 0xd283, 0xd284, 0xd285, 0xd286, 0xd287, 0xd288, 0xd289, 0xd28a, - 0xd28b, 0xd28c, 0xd28d, 0xd28e, 0xd28f, 0xd290, 0xd291, 0xd292, - 0xd293, 0xd294, 0xd295, 0xd296, 0xd297, 0xd298, 0xd299, 0xd29a, - 0xd29b, 0xd29c, 0xd29d, 0xd29e, 0xd29f, 0xd2a0, 0xd340, 0xd341, - 0xd342, 0xd343, 0xd344, 0xd345, 0xd346, 0xd347, 0xd348, 0xd349, - 0xd34a, 0xd34b, 0xd34c, 0xd34d, 0xd34e, 0xd34f, 0xd350, 0xd351, - 0xd352, 0xd353, 0xd354, 0xd355, 0xd356, 0xd357, 0xd358, 0xd359, - 0xd35a, 0xd35b, 0xd35c, 0xd35d, 0xd35e, 0xd35f, 0xd360, 0xd361, - 0xd362, 0xd363, 0xd364, 0xd365, 0xd366, 0xd367, 0xd368, 0xd369, - 0xd36a, 0xd36b, 0xd36c, 0xd36d, 0xd36e, 0xd36f, 0xd370, 0xd371, - 0xd372, 0xd373, 0xd374, 0xd375, 0xd376, 0xd377, 0xd378, 0xd379, - 0xd37a, 0xd37b, 0xd37c, 0xd37d, 0xd37e, 0xd380, 0xd381, 0xd382, - 0xd383, 0xd384, 0xd385, 0xd386, 0xd387, 0xd388, 0xd389, 0xd38a, - 0xd38b, 0xd38c, 0xd38d, 0xd38e, 0xd38f, 0xd390, 0xd391, 0xd392, - 0xd393, 0xd394, 0xd395, 0xd396, 0xd397, 0xd398, 0xd399, 0xd39a, - 0xd39b, 0xd39c, 0xd39d, 0xd39e, 0xd39f, 0xd3a0, 0xd440, 0xd441, - 0xd442, 0xd443, 0xd444, 0xd445, 0xd446, 0xd447, 0xd448, 0xd449, - 0xd44a, 0xd44b, 0xd44c, 0xd44d, 0xd44e, 0xd44f, 0xd450, 0xd451, - 0xd452, 0xd453, 0xd454, 0xd455, 0xd456, 0xd457, 0xd458, 0xd459, - 0xd45a, 0xd45b, 0xd45c, 0xd45d, 0xd45e, 0xd45f, 0xd460, 0xd461, - 0xd462, 0xd463, 0xd464, 0xd465, 0xd466, 0xd467, 0xd468, 0xd469, - 0xd46a, 0xd46b, 0xd46c, 0xd46d, 0xd46e, 0xd46f, 0xd470, 0xd471, - 0xd472, 0xd473, 0xd474, 0xd475, 0xd476, 0xd477, 0xd478, 0xd479, - 0xd47a, 0xd47b, 0xd47c, 0xd47d, 0xd47e, 0xd480, 0xd481, 0xd482, - 0xd483, 0xd484, 0xd485, 0xd486, 0xd487, 0xd488, 0xd489, 0xd48a, - 0xd48b, 0xd48c, 0xd48d, 0xd48e, 0xd48f, 0xd490, 0xd491, 0xd492, - 0xd493, 0xd494, 0xd495, 0xd496, 0xd497, 0xd498, 0xd499, 0xd49a, - 0xd49b, 0xd49c, 0xd49d, 0xd49e, 0xd49f, 0xd4a0, 0xd540, 0xd541, - 0xd542, 0xd543, 0xd544, 0xd545, 0xd546, 0xd547, 0xd548, 0xd549, - 0xd54a, 0xd54b, 0xd54c, 0xd54d, 0xd54e, 0xd54f, 0xd550, 0xd551, - 0xd552, 0xd553, 0xd554, 0xd555, 0xd556, 0xd557, 0xd558, 0xd559, - 0xd55a, 0xd55b, 0xd55c, 0xd55d, 0xd55e, 0xd55f, 0xd560, 0xd561, - 0xd562, 0xd563, 0xd564, 0xd565, 0xd566, 0xd567, 0xd568, 0xd569, - 0xd56a, 0xd56b, 0xd56c, 0xd56d, 0xd56e, 0xd56f, 0xd570, 0xd571, - 0xd572, 0xd573, 0xd574, 0xd575, 0xd576, 0xd577, 0xd578, 0xd579, - 0xd57a, 0xd57b, 0xd57c, 0xd57d, 0xd57e, 0xd580, 0xd581, 0xd582, - 0xd583, 0xd584, 0xd585, 0xd586, 0xd587, 0xd588, 0xd589, 0xd58a, - 0xd58b, 0xd58c, 0xd58d, 0xd58e, 0xd58f, 0xd590, 0xd591, 0xd592, - 0xd593, 0xd594, 0xd595, 0xd596, 0xd597, 0xd598, 0xd599, 0xd59a, - 0xd59b, 0xd59c, 0xd59d, 0xd59e, 0xd59f, 0xd5a0, 0xd640, 0xd641, - 0xd642, 0xd643, 0xd644, 0xd645, 0xd646, 0xd647, 0xd648, 0xd649, - 0xd64a, 0xd64b, 0xd64c, 0xd64d, 0xd64e, 0xd64f, 0xd650, 0xd651, - 0xd652, 0xd653, 0xd654, 0xd655, 0xd656, 0xd657, 0xd658, 0xd659, - 0xd65a, 0xd65b, 0xd65c, 0xd65d, 0xd65e, 0xd65f, 0xd660, 0xd661, - 0xd662, 0xd663, 0xd664, 0xd665, 0xd666, 0xd667, 0xd668, 0xd669, - 0xd66a, 0xd66b, 0xd66c, 0xd66d, 0xd66e, 0xd66f, 0xd670, 0xd671, - 0xd672, 0xd673, 0xd674, 0xd675, 0xd676, 0xd677, 0xd678, 0xd679, - 0xd67a, 0xd67b, 0xd67c, 0xd67d, 0xd67e, 0xd680, 0xd681, 0xd682, - 0xd683, 0xd684, 0xd685, 0xd686, 0xd687, 0xd688, 0xd689, 0xd68a, - 0xd68b, 0xd68c, 0xd68d, 0xd68e, 0xd68f, 0xd690, 0xd691, 0xd692, - 0xd693, 0xd694, 0xd695, 0xd696, 0xd697, 0xd698, 0xd699, 0xd69a, - 0xd69b, 0xd69c, 0xd69d, 0xd69e, 0xd69f, 0xd6a0, 0xd740, 0xd741, - 0xd742, 0xd743, 0xd744, 0xd745, 0xd746, 0xd747, 0xd748, 0xd749, - 0xd74a, 0xd74b, 0xd74c, 0xd74d, 0xd74e, 0xd74f, 0xd750, 0xd751, - 0xd752, 0xd753, 0xd754, 0xd755, 0xd756, 0xd757, 0xd758, 0xd759, - 0xd75a, 0xd75b, 0xd75c, 0xd75d, 0xd75e, 0xd75f, 0xd760, 0xd761, - 0xd762, 0xd763, 0xd764, 0xd765, 0xd766, 0xd767, 0xd768, 0xd769, - 0xd76a, 0xd76b, 0xd76c, 0xd76d, 0xd76e, 0xd76f, 0xd770, 0xd771, - 0xd772, 0xd773, 0xd774, 0xd775, 0xd776, 0xd777, 0xd778, 0xd779, - 0xd77a, 0xd77b, 0xd77c, 0xd77d, 0xd77e, 0xd780, 0xd781, 0xd782, - 0xd783, 0xd784, 0xd785, 0xd786, 0xd787, 0xd788, 0xd789, 0xd78a, - 0xd78b, 0xd78c, 0xd78d, 0xd78e, 0xd78f, 0xd790, 0xd791, 0xd792, - 0xd793, 0xd794, 0xd795, 0xd796, 0xd797, 0xd798, 0xd799, 0xd79a, - 0xd79b, 0xd79c, 0xd79d, 0xd79e, 0xd79f, 0xd7a0, 0xd840, 0xd841, - 0xd842, 0xd843, 0xd844, 0xd845, 0xd846, 0xd847, 0xd848, 0xd849, - 0xd84a, 0xd84b, 0xd84c, 0xd84d, 0xd84e, 0xd84f, 0xd850, 0xd851, - 0xd852, 0xd853, 0xd854, 0xd855, 0xd856, 0xd857, 0xd858, 0xd859, - 0xd85a, 0xd85b, 0xd85c, 0xd85d, 0xd85e, 0xd85f, 0xd860, 0xd861, - 0xd862, 0xd863, 0xd864, 0xd865, 0xd866, 0xd867, 0xd868, 0xd869, - 0xd86a, 0xd86b, 0xd86c, 0xd86d, 0xd86e, 0xd86f, 0xd870, 0xd871, - 0xd872, 0xd873, 0xd874, 0xd875, 0xd876, 0xd877, 0xd878, 0xd879, - 0xd87a, 0xd87b, 0xd87c, 0xd87d, 0xd87e, 0xd880, 0xd881, 0xd882, - 0xd883, 0xd884, 0xd885, 0xd886, 0xd887, 0xd888, 0xd889, 0xd88a, - 0xd88b, 0xd88c, 0xd88d, 0xd88e, 0xd88f, 0xd890, 0xd891, 0xd892, - 0xd893, 0xd894, 0xd895, 0xd896, 0xd897, 0xd898, 0xd899, 0xd89a, - 0xd89b, 0xd89c, 0xd89d, 0xd89e, 0xd89f, 0xd8a0, 0xd940, 0xd941, - 0xd942, 0xd943, 0xd944, 0xd945, 0xd946, 0xd947, 0xd948, 0xd949, - 0xd94a, 0xd94b, 0xd94c, 0xd94d, 0xd94e, 0xd94f, 0xd950, 0xd951, - 0xd952, 0xd953, 0xd954, 0xd955, 0xd956, 0xd957, 0xd958, 0xd959, - 0xd95a, 0xd95b, 0xd95c, 0xd95d, 0xd95e, 0xd95f, 0xd960, 0xd961, - 0xd962, 0xd963, 0xd964, 0xd965, 0xd966, 0xd967, 0xd968, 0xd969, - 0xd96a, 0xd96b, 0xd96c, 0xd96d, 0xd96e, 0xd96f, 0xd970, 0xd971, - 0xd972, 0xd973, 0xd974, 0xd975, 0xd976, 0xd977, 0xd978, 0xd979, - 0xd97a, 0xd97b, 0xd97c, 0xd97d, 0xd97e, 0xd980, 0xd981, 0xd982, - 0xd983, 0xd984, 0xd985, 0xd986, 0xd987, 0xd988, 0xd989, 0xd98a, - 0xd98b, 0xd98c, 0xd98d, 0xd98e, 0xd98f, 0xd990, 0xd991, 0xd992, - 0xd993, 0xd994, 0xd995, 0xd996, 0xd997, 0xd998, 0xd999, 0xd99a, - 0xd99b, 0xd99c, 0xd99d, 0xd99e, 0xd99f, 0xd9a0, 0xda40, 0xda41, - 0xda42, 0xda43, 0xda44, 0xda45, 0xda46, 0xda47, 0xda48, 0xda49, - 0xda4a, 0xda4b, 0xda4c, 0xda4d, 0xda4e, 0xda4f, 0xda50, 0xda51, - 0xda52, 0xda53, 0xda54, 0xda55, 0xda56, 0xda57, 0xda58, 0xda59, - 0xda5a, 0xda5b, 0xda5c, 0xda5d, 0xda5e, 0xda5f, 0xda60, 0xda61, - 0xda62, 0xda63, 0xda64, 0xda65, 0xda66, 0xda67, 0xda68, 0xda69, - 0xda6a, 0xda6b, 0xda6c, 0xda6d, 0xda6e, 0xda6f, 0xda70, 0xda71, - 0xda72, 0xda73, 0xda74, 0xda75, 0xda76, 0xda77, 0xda78, 0xda79, - 0xda7a, 0xda7b, 0xda7c, 0xda7d, 0xda7e, 0xda80, 0xda81, 0xda82, - 0xda83, 0xda84, 0xda85, 0xda86, 0xda87, 0xda88, 0xda89, 0xda8a, - 0xda8b, 0xda8c, 0xda8d, 0xda8e, 0xda8f, 0xda90, 0xda91, 0xda92, - 0xda93, 0xda94, 0xda95, 0xda96, 0xda97, 0xda98, 0xda99, 0xda9a, - 0xda9b, 0xda9c, 0xda9d, 0xda9e, 0xda9f, 0xdaa0, 0xdb40, 0xdb41, - 0xdb42, 0xdb43, 0xdb44, 0xdb45, 0xdb46, 0xdb47, 0xdb48, 0xdb49, - 0xdb4a, 0xdb4b, 0xdb4c, 0xdb4d, 0xdb4e, 0xdb4f, 0xdb50, 0xdb51, - 0xdb52, 0xdb53, 0xdb54, 0xdb55, 0xdb56, 0xdb57, 0xdb58, 0xdb59, - 0xdb5a, 0xdb5b, 0xdb5c, 0xdb5d, 0xdb5e, 0xdb5f, 0xdb60, 0xdb61, - 0xdb62, 0xdb63, 0xdb64, 0xdb65, 0xdb66, 0xdb67, 0xdb68, 0xdb69, - 0xdb6a, 0xdb6b, 0xdb6c, 0xdb6d, 0xdb6e, 0xdb6f, 0xdb70, 0xdb71, - 0xdb72, 0xdb73, 0xdb74, 0xdb75, 0xdb76, 0xdb77, 0xdb78, 0xdb79, - 0xdb7a, 0xdb7b, 0xdb7c, 0xdb7d, 0xdb7e, 0xdb80, 0xdb81, 0xdb82, - 0xdb83, 0xdb84, 0xdb85, 0xdb86, 0xdb87, 0xdb88, 0xdb89, 0xdb8a, - 0xdb8b, 0xdb8c, 0xdb8d, 0xdb8e, 0xdb8f, 0xdb90, 0xdb91, 0xdb92, - 0xdb93, 0xdb94, 0xdb95, 0xdb96, 0xdb97, 0xdb98, 0xdb99, 0xdb9a, - 0xdb9b, 0xdb9c, 0xdb9d, 0xdb9e, 0xdb9f, 0xdba0, 0xdc40, 0xdc41, - 0xdc42, 0xdc43, 0xdc44, 0xdc45, 0xdc46, 0xdc47, 0xdc48, 0xdc49, - 0xdc4a, 0xdc4b, 0xdc4c, 0xdc4d, 0xdc4e, 0xdc4f, 0xdc50, 0xdc51, - 0xdc52, 0xdc53, 0xdc54, 0xdc55, 0xdc56, 0xdc57, 0xdc58, 0xdc59, - 0xdc5a, 0xdc5b, 0xdc5c, 0xdc5d, 0xdc5e, 0xdc5f, 0xdc60, 0xdc61, - 0xdc62, 0xdc63, 0xdc64, 0xdc65, 0xdc66, 0xdc67, 0xdc68, 0xdc69, - 0xdc6a, 0xdc6b, 0xdc6c, 0xdc6d, 0xdc6e, 0xdc6f, 0xdc70, 0xdc71, - 0xdc72, 0xdc73, 0xdc74, 0xdc75, 0xdc76, 0xdc77, 0xdc78, 0xdc79, - 0xdc7a, 0xdc7b, 0xdc7c, 0xdc7d, 0xdc7e, 0xdc80, 0xdc81, 0xdc82, - 0xdc83, 0xdc84, 0xdc85, 0xdc86, 0xdc87, 0xdc88, 0xdc89, 0xdc8a, - 0xdc8b, 0xdc8c, 0xdc8d, 0xdc8e, 0xdc8f, 0xdc90, 0xdc91, 0xdc92, - 0xdc93, 0xdc94, 0xdc95, 0xdc96, 0xdc97, 0xdc98, 0xdc99, 0xdc9a, - 0xdc9b, 0xdc9c, 0xdc9d, 0xdc9e, 0xdc9f, 0xdca0, 0xdd40, 0xdd41, - 0xdd42, 0xdd43, 0xdd44, 0xdd45, 0xdd46, 0xdd47, 0xdd48, 0xdd49, - 0xdd4a, 0xdd4b, 0xdd4c, 0xdd4d, 0xdd4e, 0xdd4f, 0xdd50, 0xdd51, - 0xdd52, 0xdd53, 0xdd54, 0xdd55, 0xdd56, 0xdd57, 0xdd58, 0xdd59, - 0xdd5a, 0xdd5b, 0xdd5c, 0xdd5d, 0xdd5e, 0xdd5f, 0xdd60, 0xdd61, - 0xdd62, 0xdd63, 0xdd64, 0xdd65, 0xdd66, 0xdd67, 0xdd68, 0xdd69, - 0xdd6a, 0xdd6b, 0xdd6c, 0xdd6d, 0xdd6e, 0xdd6f, 0xdd70, 0xdd71, - 0xdd72, 0xdd73, 0xdd74, 0xdd75, 0xdd76, 0xdd77, 0xdd78, 0xdd79, - 0xdd7a, 0xdd7b, 0xdd7c, 0xdd7d, 0xdd7e, 0xdd80, 0xdd81, 0xdd82, - 0xdd83, 0xdd84, 0xdd85, 0xdd86, 0xdd87, 0xdd88, 0xdd89, 0xdd8a, - 0xdd8b, 0xdd8c, 0xdd8d, 0xdd8e, 0xdd8f, 0xdd90, 0xdd91, 0xdd92, - 0xdd93, 0xdd94, 0xdd95, 0xdd96, 0xdd97, 0xdd98, 0xdd99, 0xdd9a, - 0xdd9b, 0xdd9c, 0xdd9d, 0xdd9e, 0xdd9f, 0xdda0, 0xde40, 0xde41, - 0xde42, 0xde43, 0xde44, 0xde45, 0xde46, 0xde47, 0xde48, 0xde49, - 0xde4a, 0xde4b, 0xde4c, 0xde4d, 0xde4e, 0xde4f, 0xde50, 0xde51, - 0xde52, 0xde53, 0xde54, 0xde55, 0xde56, 0xde57, 0xde58, 0xde59, - 0xde5a, 0xde5b, 0xde5c, 0xde5d, 0xde5e, 0xde5f, 0xde60, 0xde61, - 0xde62, 0xde63, 0xde64, 0xde65, 0xde66, 0xde67, 0xde68, 0xde69, - 0xde6a, 0xde6b, 0xde6c, 0xde6d, 0xde6e, 0xde6f, 0xde70, 0xde71, - 0xde72, 0xde73, 0xde74, 0xde75, 0xde76, 0xde77, 0xde78, 0xde79, - 0xde7a, 0xde7b, 0xde7c, 0xde7d, 0xde7e, 0xde80, 0xde81, 0xde82, - 0xde83, 0xde84, 0xde85, 0xde86, 0xde87, 0xde88, 0xde89, 0xde8a, - 0xde8b, 0xde8c, 0xde8d, 0xde8e, 0xde8f, 0xde90, 0xde91, 0xde92, - 0xde93, 0xde94, 0xde95, 0xde96, 0xde97, 0xde98, 0xde99, 0xde9a, - 0xde9b, 0xde9c, 0xde9d, 0xde9e, 0xde9f, 0xdea0, 0xdf40, 0xdf41, - 0xdf42, 0xdf43, 0xdf44, 0xdf45, 0xdf46, 0xdf47, 0xdf48, 0xdf49, - 0xdf4a, 0xdf4b, 0xdf4c, 0xdf4d, 0xdf4e, 0xdf4f, 0xdf50, 0xdf51, - 0xdf52, 0xdf53, 0xdf54, 0xdf55, 0xdf56, 0xdf57, 0xdf58, 0xdf59, - 0xdf5a, 0xdf5b, 0xdf5c, 0xdf5d, 0xdf5e, 0xdf5f, 0xdf60, 0xdf61, - 0xdf62, 0xdf63, 0xdf64, 0xdf65, 0xdf66, 0xdf67, 0xdf68, 0xdf69, - 0xdf6a, 0xdf6b, 0xdf6c, 0xdf6d, 0xdf6e, 0xdf6f, 0xdf70, 0xdf71, - 0xdf72, 0xdf73, 0xdf74, 0xdf75, 0xdf76, 0xdf77, 0xdf78, 0xdf79, - 0xdf7a, 0xdf7b, 0xdf7c, 0xdf7d, 0xdf7e, 0xdf80, 0xdf81, 0xdf82, - 0xdf83, 0xdf84, 0xdf85, 0xdf86, 0xdf87, 0xdf88, 0xdf89, 0xdf8a, - 0xdf8b, 0xdf8c, 0xdf8d, 0xdf8e, 0xdf8f, 0xdf90, 0xdf91, 0xdf92, - 0xdf93, 0xdf94, 0xdf95, 0xdf96, 0xdf97, 0xdf98, 0xdf99, 0xdf9a, - 0xdf9b, 0xdf9c, 0xdf9d, 0xdf9e, 0xdf9f, 0xdfa0, 0xe040, 0xe041, - 0xe042, 0xe043, 0xe044, 0xe045, 0xe046, 0xe047, 0xe048, 0xe049, - 0xe04a, 0xe04b, 0xe04c, 0xe04d, 0xe04e, 0xe04f, 0xe050, 0xe051, - 0xe052, 0xe053, 0xe054, 0xe055, 0xe056, 0xe057, 0xe058, 0xe059, - 0xe05a, 0xe05b, 0xe05c, 0xe05d, 0xe05e, 0xe05f, 0xe060, 0xe061, - 0xe062, 0xe063, 0xe064, 0xe065, 0xe066, 0xe067, 0xe068, 0xe069, - 0xe06a, 0xe06b, 0xe06c, 0xe06d, 0xe06e, 0xe06f, 0xe070, 0xe071, - 0xe072, 0xe073, 0xe074, 0xe075, 0xe076, 0xe077, 0xe078, 0xe079, - 0xe07a, 0xe07b, 0xe07c, 0xe07d, 0xe07e, 0xe080, 0xe081, 0xe082, - 0xe083, 0xe084, 0xe085, 0xe086, 0xe087, 0xe088, 0xe089, 0xe08a, - 0xe08b, 0xe08c, 0xe08d, 0xe08e, 0xe08f, 0xe090, 0xe091, 0xe092, - 0xe093, 0xe094, 0xe095, 0xe096, 0xe097, 0xe098, 0xe099, 0xe09a, - 0xe09b, 0xe09c, 0xe09d, 0xe09e, 0xe09f, 0xe0a0, 0xe140, 0xe141, - 0xe142, 0xe143, 0xe144, 0xe145, 0xe146, 0xe147, 0xe148, 0xe149, - 0xe14a, 0xe14b, 0xe14c, 0xe14d, 0xe14e, 0xe14f, 0xe150, 0xe151, - 0xe152, 0xe153, 0xe154, 0xe155, 0xe156, 0xe157, 0xe158, 0xe159, - 0xe15a, 0xe15b, 0xe15c, 0xe15d, 0xe15e, 0xe15f, 0xe160, 0xe161, - 0xe162, 0xe163, 0xe164, 0xe165, 0xe166, 0xe167, 0xe168, 0xe169, - 0xe16a, 0xe16b, 0xe16c, 0xe16d, 0xe16e, 0xe16f, 0xe170, 0xe171, - 0xe172, 0xe173, 0xe174, 0xe175, 0xe176, 0xe177, 0xe178, 0xe179, - 0xe17a, 0xe17b, 0xe17c, 0xe17d, 0xe17e, 0xe180, 0xe181, 0xe182, - 0xe183, 0xe184, 0xe185, 0xe186, 0xe187, 0xe188, 0xe189, 0xe18a, - 0xe18b, 0xe18c, 0xe18d, 0xe18e, 0xe18f, 0xe190, 0xe191, 0xe192, - 0xe193, 0xe194, 0xe195, 0xe196, 0xe197, 0xe198, 0xe199, 0xe19a, - 0xe19b, 0xe19c, 0xe19d, 0xe19e, 0xe19f, 0xe1a0, 0xe240, 0xe241, - 0xe242, 0xe243, 0xe244, 0xe245, 0xe246, 0xe247, 0xe248, 0xe249, - 0xe24a, 0xe24b, 0xe24c, 0xe24d, 0xe24e, 0xe24f, 0xe250, 0xe251, - 0xe252, 0xe253, 0xe254, 0xe255, 0xe256, 0xe257, 0xe258, 0xe259, - 0xe25a, 0xe25b, 0xe25c, 0xe25d, 0xe25e, 0xe25f, 0xe260, 0xe261, - 0xe262, 0xe263, 0xe264, 0xe265, 0xe266, 0xe267, 0xe268, 0xe269, - 0xe26a, 0xe26b, 0xe26c, 0xe26d, 0xe26e, 0xe26f, 0xe270, 0xe271, - 0xe272, 0xe273, 0xe274, 0xe275, 0xe276, 0xe277, 0xe278, 0xe279, - 0xe27a, 0xe27b, 0xe27c, 0xe27d, 0xe27e, 0xe280, 0xe281, 0xe282, - 0xe283, 0xe284, 0xe285, 0xe286, 0xe287, 0xe288, 0xe289, 0xe28a, - 0xe28b, 0xe28c, 0xe28d, 0xe28e, 0xe28f, 0xe290, 0xe291, 0xe292, - 0xe293, 0xe294, 0xe295, 0xe296, 0xe297, 0xe298, 0xe299, 0xe29a, - 0xe29b, 0xe29c, 0xe29d, 0xe29e, 0xe29f, 0xe2a0, 0xe340, 0xe341, - 0xe342, 0xe343, 0xe344, 0xe345, 0xe346, 0xe347, 0xe348, 0xe349, - 0xe34a, 0xe34b, 0xe34c, 0xe34d, 0xe34e, 0xe34f, 0xe350, 0xe351, - 0xe352, 0xe353, 0xe354, 0xe355, 0xe356, 0xe357, 0xe358, 0xe359, - 0xe35a, 0xe35b, 0xe35c, 0xe35d, 0xe35e, 0xe35f, 0xe360, 0xe361, - 0xe362, 0xe363, 0xe364, 0xe365, 0xe366, 0xe367, 0xe368, 0xe369, - 0xe36a, 0xe36b, 0xe36c, 0xe36d, 0xe36e, 0xe36f, 0xe370, 0xe371, - 0xe372, 0xe373, 0xe374, 0xe375, 0xe376, 0xe377, 0xe378, 0xe379, - 0xe37a, 0xe37b, 0xe37c, 0xe37d, 0xe37e, 0xe380, 0xe381, 0xe382, - 0xe383, 0xe384, 0xe385, 0xe386, 0xe387, 0xe388, 0xe389, 0xe38a, - 0xe38b, 0xe38c, 0xe38d, 0xe38e, 0xe38f, 0xe390, 0xe391, 0xe392, - 0xe393, 0xe394, 0xe395, 0xe396, 0xe397, 0xe398, 0xe399, 0xe39a, - 0xe39b, 0xe39c, 0xe39d, 0xe39e, 0xe39f, 0xe3a0, 0xe440, 0xe441, - 0xe442, 0xe443, 0xe444, 0xe445, 0xe446, 0xe447, 0xe448, 0xe449, - 0xe44a, 0xe44b, 0xe44c, 0xe44d, 0xe44e, 0xe44f, 0xe450, 0xe451, - 0xe452, 0xe453, 0xe454, 0xe455, 0xe456, 0xe457, 0xe458, 0xe459, - 0xe45a, 0xe45b, 0xe45c, 0xe45d, 0xe45e, 0xe45f, 0xe460, 0xe461, - 0xe462, 0xe463, 0xe464, 0xe465, 0xe466, 0xe467, 0xe468, 0xe469, - 0xe46a, 0xe46b, 0xe46c, 0xe46d, 0xe46e, 0xe46f, 0xe470, 0xe471, - 0xe472, 0xe473, 0xe474, 0xe475, 0xe476, 0xe477, 0xe478, 0xe479, - 0xe47a, 0xe47b, 0xe47c, 0xe47d, 0xe47e, 0xe480, 0xe481, 0xe482, - 0xe483, 0xe484, 0xe485, 0xe486, 0xe487, 0xe488, 0xe489, 0xe48a, - 0xe48b, 0xe48c, 0xe48d, 0xe48e, 0xe48f, 0xe490, 0xe491, 0xe492, - 0xe493, 0xe494, 0xe495, 0xe496, 0xe497, 0xe498, 0xe499, 0xe49a, - 0xe49b, 0xe49c, 0xe49d, 0xe49e, 0xe49f, 0xe4a0, 0xe540, 0xe541, - 0xe542, 0xe543, 0xe544, 0xe545, 0xe546, 0xe547, 0xe548, 0xe549, - 0xe54a, 0xe54b, 0xe54c, 0xe54d, 0xe54e, 0xe54f, 0xe550, 0xe551, - 0xe552, 0xe553, 0xe554, 0xe555, 0xe556, 0xe557, 0xe558, 0xe559, - 0xe55a, 0xe55b, 0xe55c, 0xe55d, 0xe55e, 0xe55f, 0xe560, 0xe561, - 0xe562, 0xe563, 0xe564, 0xe565, 0xe566, 0xe567, 0xe568, 0xe569, - 0xe56a, 0xe56b, 0xe56c, 0xe56d, 0xe56e, 0xe56f, 0xe570, 0xe571, - 0xe572, 0xe573, 0xe574, 0xe575, 0xe576, 0xe577, 0xe578, 0xe579, - 0xe57a, 0xe57b, 0xe57c, 0xe57d, 0xe57e, 0xe580, 0xe581, 0xe582, - 0xe583, 0xe584, 0xe585, 0xe586, 0xe587, 0xe588, 0xe589, 0xe58a, - 0xe58b, 0xe58c, 0xe58d, 0xe58e, 0xe58f, 0xe590, 0xe591, 0xe592, - 0xe593, 0xe594, 0xe595, 0xe596, 0xe597, 0xe598, 0xe599, 0xe59a, - 0xe59b, 0xe59c, 0xe59d, 0xe59e, 0xe59f, 0xe5a0, 0xe640, 0xe641, - 0xe642, 0xe643, 0xe644, 0xe645, 0xe646, 0xe647, 0xe648, 0xe649, - 0xe64a, 0xe64b, 0xe64c, 0xe64d, 0xe64e, 0xe64f, 0xe650, 0xe651, - 0xe652, 0xe653, 0xe654, 0xe655, 0xe656, 0xe657, 0xe658, 0xe659, - 0xe65a, 0xe65b, 0xe65c, 0xe65d, 0xe65e, 0xe65f, 0xe660, 0xe661, - 0xe662, 0xe663, 0xe664, 0xe665, 0xe666, 0xe667, 0xe668, 0xe669, - 0xe66a, 0xe66b, 0xe66c, 0xe66d, 0xe66e, 0xe66f, 0xe670, 0xe671, - 0xe672, 0xe673, 0xe674, 0xe675, 0xe676, 0xe677, 0xe678, 0xe679, - 0xe67a, 0xe67b, 0xe67c, 0xe67d, 0xe67e, 0xe680, 0xe681, 0xe682, - 0xe683, 0xe684, 0xe685, 0xe686, 0xe687, 0xe688, 0xe689, 0xe68a, - 0xe68b, 0xe68c, 0xe68d, 0xe68e, 0xe68f, 0xe690, 0xe691, 0xe692, - 0xe693, 0xe694, 0xe695, 0xe696, 0xe697, 0xe698, 0xe699, 0xe69a, - 0xe69b, 0xe69c, 0xe69d, 0xe69e, 0xe69f, 0xe6a0, 0xe740, 0xe741, - 0xe742, 0xe743, 0xe744, 0xe745, 0xe746, 0xe747, 0xe748, 0xe749, - 0xe74a, 0xe74b, 0xe74c, 0xe74d, 0xe74e, 0xe74f, 0xe750, 0xe751, - 0xe752, 0xe753, 0xe754, 0xe755, 0xe756, 0xe757, 0xe758, 0xe759, - 0xe75a, 0xe75b, 0xe75c, 0xe75d, 0xe75e, 0xe75f, 0xe760, 0xe761, - 0xe762, 0xe763, 0xe764, 0xe765, 0xe766, 0xe767, 0xe768, 0xe769, - 0xe76a, 0xe76b, 0xe76c, 0xe76d, 0xe76e, 0xe76f, 0xe770, 0xe771, - 0xe772, 0xe773, 0xe774, 0xe775, 0xe776, 0xe777, 0xe778, 0xe779, - 0xe77a, 0xe77b, 0xe77c, 0xe77d, 0xe77e, 0xe780, 0xe781, 0xe782, - 0xe783, 0xe784, 0xe785, 0xe786, 0xe787, 0xe788, 0xe789, 0xe78a, - 0xe78b, 0xe78c, 0xe78d, 0xe78e, 0xe78f, 0xe790, 0xe791, 0xe792, - 0xe793, 0xe794, 0xe795, 0xe796, 0xe797, 0xe798, 0xe799, 0xe79a, - 0xe79b, 0xe79c, 0xe79d, 0xe79e, 0xe79f, 0xe7a0, 0xe840, 0xe841, - 0xe842, 0xe843, 0xe844, 0xe845, 0xe846, 0xe847, 0xe848, 0xe849, - 0xe84a, 0xe84b, 0xe84c, 0xe84d, 0xe84e, 0xe84f, 0xe850, 0xe851, - 0xe852, 0xe853, 0xe854, 0xe855, 0xe856, 0xe857, 0xe858, 0xe859, - 0xe85a, 0xe85b, 0xe85c, 0xe85d, 0xe85e, 0xe85f, 0xe860, 0xe861, - 0xe862, 0xe863, 0xe864, 0xe865, 0xe866, 0xe867, 0xe868, 0xe869, - 0xe86a, 0xe86b, 0xe86c, 0xe86d, 0xe86e, 0xe86f, 0xe870, 0xe871, - 0xe872, 0xe873, 0xe874, 0xe875, 0xe876, 0xe877, 0xe878, 0xe879, - 0xe87a, 0xe87b, 0xe87c, 0xe87d, 0xe87e, 0xe880, 0xe881, 0xe882, - 0xe883, 0xe884, 0xe885, 0xe886, 0xe887, 0xe888, 0xe889, 0xe88a, - 0xe88b, 0xe88c, 0xe88d, 0xe88e, 0xe88f, 0xe890, 0xe891, 0xe892, - 0xe893, 0xe894, 0xe895, 0xe896, 0xe897, 0xe898, 0xe899, 0xe89a, - 0xe89b, 0xe89c, 0xe89d, 0xe89e, 0xe89f, 0xe8a0, 0xe940, 0xe941, - 0xe942, 0xe943, 0xe944, 0xe945, 0xe946, 0xe947, 0xe948, 0xe949, - 0xe94a, 0xe94b, 0xe94c, 0xe94d, 0xe94e, 0xe94f, 0xe950, 0xe951, - 0xe952, 0xe953, 0xe954, 0xe955, 0xe956, 0xe957, 0xe958, 0xe959, - 0xe95a, 0xe95b, 0xe95c, 0xe95d, 0xe95e, 0xe95f, 0xe960, 0xe961, - 0xe962, 0xe963, 0xe964, 0xe965, 0xe966, 0xe967, 0xe968, 0xe969, - 0xe96a, 0xe96b, 0xe96c, 0xe96d, 0xe96e, 0xe96f, 0xe970, 0xe971, - 0xe972, 0xe973, 0xe974, 0xe975, 0xe976, 0xe977, 0xe978, 0xe979, - 0xe97a, 0xe97b, 0xe97c, 0xe97d, 0xe97e, 0xe980, 0xe981, 0xe982, - 0xe983, 0xe984, 0xe985, 0xe986, 0xe987, 0xe988, 0xe989, 0xe98a, - 0xe98b, 0xe98c, 0xe98d, 0xe98e, 0xe98f, 0xe990, 0xe991, 0xe992, - 0xe993, 0xe994, 0xe995, 0xe996, 0xe997, 0xe998, 0xe999, 0xe99a, - 0xe99b, 0xe99c, 0xe99d, 0xe99e, 0xe99f, 0xe9a0, 0xea40, 0xea41, - 0xea42, 0xea43, 0xea44, 0xea45, 0xea46, 0xea47, 0xea48, 0xea49, - 0xea4a, 0xea4b, 0xea4c, 0xea4d, 0xea4e, 0xea4f, 0xea50, 0xea51, - 0xea52, 0xea53, 0xea54, 0xea55, 0xea56, 0xea57, 0xea58, 0xea59, - 0xea5a, 0xea5b, 0xea5c, 0xea5d, 0xea5e, 0xea5f, 0xea60, 0xea61, - 0xea62, 0xea63, 0xea64, 0xea65, 0xea66, 0xea67, 0xea68, 0xea69, - 0xea6a, 0xea6b, 0xea6c, 0xea6d, 0xea6e, 0xea6f, 0xea70, 0xea71, - 0xea72, 0xea73, 0xea74, 0xea75, 0xea76, 0xea77, 0xea78, 0xea79, - 0xea7a, 0xea7b, 0xea7c, 0xea7d, 0xea7e, 0xea80, 0xea81, 0xea82, - 0xea83, 0xea84, 0xea85, 0xea86, 0xea87, 0xea88, 0xea89, 0xea8a, - 0xea8b, 0xea8c, 0xea8d, 0xea8e, 0xea8f, 0xea90, 0xea91, 0xea92, - 0xea93, 0xea94, 0xea95, 0xea96, 0xea97, 0xea98, 0xea99, 0xea9a, - 0xea9b, 0xea9c, 0xea9d, 0xea9e, 0xea9f, 0xeaa0, 0xeb40, 0xeb41, - 0xeb42, 0xeb43, 0xeb44, 0xeb45, 0xeb46, 0xeb47, 0xeb48, 0xeb49, - 0xeb4a, 0xeb4b, 0xeb4c, 0xeb4d, 0xeb4e, 0xeb4f, 0xeb50, 0xeb51, - 0xeb52, 0xeb53, 0xeb54, 0xeb55, 0xeb56, 0xeb57, 0xeb58, 0xeb59, - 0xeb5a, 0xeb5b, 0xeb5c, 0xeb5d, 0xeb5e, 0xeb5f, 0xeb60, 0xeb61, - 0xeb62, 0xeb63, 0xeb64, 0xeb65, 0xeb66, 0xeb67, 0xeb68, 0xeb69, - 0xeb6a, 0xeb6b, 0xeb6c, 0xeb6d, 0xeb6e, 0xeb6f, 0xeb70, 0xeb71, - 0xeb72, 0xeb73, 0xeb74, 0xeb75, 0xeb76, 0xeb77, 0xeb78, 0xeb79, - 0xeb7a, 0xeb7b, 0xeb7c, 0xeb7d, 0xeb7e, 0xeb80, 0xeb81, 0xeb82, - 0xeb83, 0xeb84, 0xeb85, 0xeb86, 0xeb87, 0xeb88, 0xeb89, 0xeb8a, - 0xeb8b, 0xeb8c, 0xeb8d, 0xeb8e, 0xeb8f, 0xeb90, 0xeb91, 0xeb92, - 0xeb93, 0xeb94, 0xeb95, 0xeb96, 0xeb97, 0xeb98, 0xeb99, 0xeb9a, - 0xeb9b, 0xeb9c, 0xeb9d, 0xeb9e, 0xeb9f, 0xeba0, 0xec40, 0xec41, - 0xec42, 0xec43, 0xec44, 0xec45, 0xec46, 0xec47, 0xec48, 0xec49, - 0xec4a, 0xec4b, 0xec4c, 0xec4d, 0xec4e, 0xec4f, 0xec50, 0xec51, - 0xec52, 0xec53, 0xec54, 0xec55, 0xec56, 0xec57, 0xec58, 0xec59, - 0xec5a, 0xec5b, 0xec5c, 0xec5d, 0xec5e, 0xec5f, 0xec60, 0xec61, - 0xec62, 0xec63, 0xec64, 0xec65, 0xec66, 0xec67, 0xec68, 0xec69, - 0xec6a, 0xec6b, 0xec6c, 0xec6d, 0xec6e, 0xec6f, 0xec70, 0xec71, - 0xec72, 0xec73, 0xec74, 0xec75, 0xec76, 0xec77, 0xec78, 0xec79, - 0xec7a, 0xec7b, 0xec7c, 0xec7d, 0xec7e, 0xec80, 0xec81, 0xec82, - 0xec83, 0xec84, 0xec85, 0xec86, 0xec87, 0xec88, 0xec89, 0xec8a, - 0xec8b, 0xec8c, 0xec8d, 0xec8e, 0xec8f, 0xec90, 0xec91, 0xec92, - 0xec93, 0xec94, 0xec95, 0xec96, 0xec97, 0xec98, 0xec99, 0xec9a, - 0xec9b, 0xec9c, 0xec9d, 0xec9e, 0xec9f, 0xeca0, 0xed40, 0xed41, - 0xed42, 0xed43, 0xed44, 0xed45, 0xed46, 0xed47, 0xed48, 0xed49, - 0xed4a, 0xed4b, 0xed4c, 0xed4d, 0xed4e, 0xed4f, 0xed50, 0xed51, - 0xed52, 0xed53, 0xed54, 0xed55, 0xed56, 0xed57, 0xed58, 0xed59, - 0xed5a, 0xed5b, 0xed5c, 0xed5d, 0xed5e, 0xed5f, 0xed60, 0xed61, - 0xed62, 0xed63, 0xed64, 0xed65, 0xed66, 0xed67, 0xed68, 0xed69, - 0xed6a, 0xed6b, 0xed6c, 0xed6d, 0xed6e, 0xed6f, 0xed70, 0xed71, - 0xed72, 0xed73, 0xed74, 0xed75, 0xed76, 0xed77, 0xed78, 0xed79, - 0xed7a, 0xed7b, 0xed7c, 0xed7d, 0xed7e, 0xed80, 0xed81, 0xed82, - 0xed83, 0xed84, 0xed85, 0xed86, 0xed87, 0xed88, 0xed89, 0xed8a, - 0xed8b, 0xed8c, 0xed8d, 0xed8e, 0xed8f, 0xed90, 0xed91, 0xed92, - 0xed93, 0xed94, 0xed95, 0xed96, 0xed97, 0xed98, 0xed99, 0xed9a, - 0xed9b, 0xed9c, 0xed9d, 0xed9e, 0xed9f, 0xeda0, 0xee40, 0xee41, - 0xee42, 0xee43, 0xee44, 0xee45, 0xee46, 0xee47, 0xee48, 0xee49, - 0xee4a, 0xee4b, 0xee4c, 0xee4d, 0xee4e, 0xee4f, 0xee50, 0xee51, - 0xee52, 0xee53, 0xee54, 0xee55, 0xee56, 0xee57, 0xee58, 0xee59, - 0xee5a, 0xee5b, 0xee5c, 0xee5d, 0xee5e, 0xee5f, 0xee60, 0xee61, - 0xee62, 0xee63, 0xee64, 0xee65, 0xee66, 0xee67, 0xee68, 0xee69, - 0xee6a, 0xee6b, 0xee6c, 0xee6d, 0xee6e, 0xee6f, 0xee70, 0xee71, - 0xee72, 0xee73, 0xee74, 0xee75, 0xee76, 0xee77, 0xee78, 0xee79, - 0xee7a, 0xee7b, 0xee7c, 0xee7d, 0xee7e, 0xee80, 0xee81, 0xee82, - 0xee83, 0xee84, 0xee85, 0xee86, 0xee87, 0xee88, 0xee89, 0xee8a, - 0xee8b, 0xee8c, 0xee8d, 0xee8e, 0xee8f, 0xee90, 0xee91, 0xee92, - 0xee93, 0xee94, 0xee95, 0xee96, 0xee97, 0xee98, 0xee99, 0xee9a, - 0xee9b, 0xee9c, 0xee9d, 0xee9e, 0xee9f, 0xeea0, 0xef40, 0xef41, - 0xef42, 0xef43, 0xef44, 0xef45, 0xef46, 0xef47, 0xef48, 0xef49, - 0xef4a, 0xef4b, 0xef4c, 0xef4d, 0xef4e, 0xef4f, 0xef50, 0xef51, - 0xef52, 0xef53, 0xef54, 0xef55, 0xef56, 0xef57, 0xef58, 0xef59, - 0xef5a, 0xef5b, 0xef5c, 0xef5d, 0xef5e, 0xef5f, 0xef60, 0xef61, - 0xef62, 0xef63, 0xef64, 0xef65, 0xef66, 0xef67, 0xef68, 0xef69, - 0xef6a, 0xef6b, 0xef6c, 0xef6d, 0xef6e, 0xef6f, 0xef70, 0xef71, - 0xef72, 0xef73, 0xef74, 0xef75, 0xef76, 0xef77, 0xef78, 0xef79, - 0xef7a, 0xef7b, 0xef7c, 0xef7d, 0xef7e, 0xef80, 0xef81, 0xef82, - 0xef83, 0xef84, 0xef85, 0xef86, 0xef87, 0xef88, 0xef89, 0xef8a, - 0xef8b, 0xef8c, 0xef8d, 0xef8e, 0xef8f, 0xef90, 0xef91, 0xef92, - 0xef93, 0xef94, 0xef95, 0xef96, 0xef97, 0xef98, 0xef99, 0xef9a, - 0xef9b, 0xef9c, 0xef9d, 0xef9e, 0xef9f, 0xefa0, 0xf040, 0xf041, - 0xf042, 0xf043, 0xf044, 0xf045, 0xf046, 0xf047, 0xf048, 0xf049, - 0xf04a, 0xf04b, 0xf04c, 0xf04d, 0xf04e, 0xf04f, 0xf050, 0xf051, - 0xf052, 0xf053, 0xf054, 0xf055, 0xf056, 0xf057, 0xf058, 0xf059, - 0xf05a, 0xf05b, 0xf05c, 0xf05d, 0xf05e, 0xf05f, 0xf060, 0xf061, - 0xf062, 0xf063, 0xf064, 0xf065, 0xf066, 0xf067, 0xf068, 0xf069, - 0xf06a, 0xf06b, 0xf06c, 0xf06d, 0xf06e, 0xf06f, 0xf070, 0xf071, - 0xf072, 0xf073, 0xf074, 0xf075, 0xf076, 0xf077, 0xf078, 0xf079, - 0xf07a, 0xf07b, 0xf07c, 0xf07d, 0xf07e, 0xf080, 0xf081, 0xf082, - 0xf083, 0xf084, 0xf085, 0xf086, 0xf087, 0xf088, 0xf089, 0xf08a, - 0xf08b, 0xf08c, 0xf08d, 0xf08e, 0xf08f, 0xf090, 0xf091, 0xf092, - 0xf093, 0xf094, 0xf095, 0xf096, 0xf097, 0xf098, 0xf099, 0xf09a, - 0xf09b, 0xf09c, 0xf09d, 0xf09e, 0xf09f, 0xf0a0, 0xf140, 0xf141, - 0xf142, 0xf143, 0xf144, 0xf145, 0xf146, 0xf147, 0xf148, 0xf149, - 0xf14a, 0xf14b, 0xf14c, 0xf14d, 0xf14e, 0xf14f, 0xf150, 0xf151, - 0xf152, 0xf153, 0xf154, 0xf155, 0xf156, 0xf157, 0xf158, 0xf159, - 0xf15a, 0xf15b, 0xf15c, 0xf15d, 0xf15e, 0xf15f, 0xf160, 0xf161, - 0xf162, 0xf163, 0xf164, 0xf165, 0xf166, 0xf167, 0xf168, 0xf169, - 0xf16a, 0xf16b, 0xf16c, 0xf16d, 0xf16e, 0xf16f, 0xf170, 0xf171, - 0xf172, 0xf173, 0xf174, 0xf175, 0xf176, 0xf177, 0xf178, 0xf179, - 0xf17a, 0xf17b, 0xf17c, 0xf17d, 0xf17e, 0xf180, 0xf181, 0xf182, - 0xf183, 0xf184, 0xf185, 0xf186, 0xf187, 0xf188, 0xf189, 0xf18a, - 0xf18b, 0xf18c, 0xf18d, 0xf18e, 0xf18f, 0xf190, 0xf191, 0xf192, - 0xf193, 0xf194, 0xf195, 0xf196, 0xf197, 0xf198, 0xf199, 0xf19a, - 0xf19b, 0xf19c, 0xf19d, 0xf19e, 0xf19f, 0xf1a0, 0xf240, 0xf241, - 0xf242, 0xf243, 0xf244, 0xf245, 0xf246, 0xf247, 0xf248, 0xf249, - 0xf24a, 0xf24b, 0xf24c, 0xf24d, 0xf24e, 0xf24f, 0xf250, 0xf251, - 0xf252, 0xf253, 0xf254, 0xf255, 0xf256, 0xf257, 0xf258, 0xf259, - 0xf25a, 0xf25b, 0xf25c, 0xf25d, 0xf25e, 0xf25f, 0xf260, 0xf261, - 0xf262, 0xf263, 0xf264, 0xf265, 0xf266, 0xf267, 0xf268, 0xf269, - 0xf26a, 0xf26b, 0xf26c, 0xf26d, 0xf26e, 0xf26f, 0xf270, 0xf271, - 0xf272, 0xf273, 0xf274, 0xf275, 0xf276, 0xf277, 0xf278, 0xf279, - 0xf27a, 0xf27b, 0xf27c, 0xf27d, 0xf27e, 0xf280, 0xf281, 0xf282, - 0xf283, 0xf284, 0xf285, 0xf286, 0xf287, 0xf288, 0xf289, 0xf28a, - 0xf28b, 0xf28c, 0xf28d, 0xf28e, 0xf28f, 0xf290, 0xf291, 0xf292, - 0xf293, 0xf294, 0xf295, 0xf296, 0xf297, 0xf298, 0xf299, 0xf29a, - 0xf29b, 0xf29c, 0xf29d, 0xf29e, 0xf29f, 0xf2a0, 0xf340, 0xf341, - 0xf342, 0xf343, 0xf344, 0xf345, 0xf346, 0xf347, 0xf348, 0xf349, - 0xf34a, 0xf34b, 0xf34c, 0xf34d, 0xf34e, 0xf34f, 0xf350, 0xf351, - 0xf352, 0xf353, 0xf354, 0xf355, 0xf356, 0xf357, 0xf358, 0xf359, - 0xf35a, 0xf35b, 0xf35c, 0xf35d, 0xf35e, 0xf35f, 0xf360, 0xf361, - 0xf362, 0xf363, 0xf364, 0xf365, 0xf366, 0xf367, 0xf368, 0xf369, - 0xf36a, 0xf36b, 0xf36c, 0xf36d, 0xf36e, 0xf36f, 0xf370, 0xf371, - 0xf372, 0xf373, 0xf374, 0xf375, 0xf376, 0xf377, 0xf378, 0xf379, - 0xf37a, 0xf37b, 0xf37c, 0xf37d, 0xf37e, 0xf380, 0xf381, 0xf382, - 0xf383, 0xf384, 0xf385, 0xf386, 0xf387, 0xf388, 0xf389, 0xf38a, - 0xf38b, 0xf38c, 0xf38d, 0xf38e, 0xf38f, 0xf390, 0xf391, 0xf392, - 0xf393, 0xf394, 0xf395, 0xf396, 0xf397, 0xf398, 0xf399, 0xf39a, - 0xf39b, 0xf39c, 0xf39d, 0xf39e, 0xf39f, 0xf3a0, 0xf440, 0xf441, - 0xf442, 0xf443, 0xf444, 0xf445, 0xf446, 0xf447, 0xf448, 0xf449, - 0xf44a, 0xf44b, 0xf44c, 0xf44d, 0xf44e, 0xf44f, 0xf450, 0xf451, - 0xf452, 0xf453, 0xf454, 0xf455, 0xf456, 0xf457, 0xf458, 0xf459, - 0xf45a, 0xf45b, 0xf45c, 0xf45d, 0xf45e, 0xf45f, 0xf460, 0xf461, - 0xf462, 0xf463, 0xf464, 0xf465, 0xf466, 0xf467, 0xf468, 0xf469, - 0xf46a, 0xf46b, 0xf46c, 0xf46d, 0xf46e, 0xf46f, 0xf470, 0xf471, - 0xf472, 0xf473, 0xf474, 0xf475, 0xf476, 0xf477, 0xf478, 0xf479, - 0xf47a, 0xf47b, 0xf47c, 0xf47d, 0xf47e, 0xf480, 0xf481, 0xf482, - 0xf483, 0xf484, 0xf485, 0xf486, 0xf487, 0xf488, 0xf489, 0xf48a, - 0xf48b, 0xf48c, 0xf48d, 0xf48e, 0xf48f, 0xf490, 0xf491, 0xf492, - 0xf493, 0xf494, 0xf495, 0xf496, 0xf497, 0xf498, 0xf499, 0xf49a, - 0xf49b, 0xf49c, 0xf49d, 0xf49e, 0xf49f, 0xf4a0, 0xf540, 0xf541, - 0xf542, 0xf543, 0xf544, 0xf545, 0xf546, 0xf547, 0xf548, 0xf549, - 0xf54a, 0xf54b, 0xf54c, 0xf54d, 0xf54e, 0xf54f, 0xf550, 0xf551, - 0xf552, 0xf553, 0xf554, 0xf555, 0xf556, 0xf557, 0xf558, 0xf559, - 0xf55a, 0xf55b, 0xf55c, 0xf55d, 0xf55e, 0xf55f, 0xf560, 0xf561, - 0xf562, 0xf563, 0xf564, 0xf565, 0xf566, 0xf567, 0xf568, 0xf569, - 0xf56a, 0xf56b, 0xf56c, 0xf56d, 0xf56e, 0xf56f, 0xf570, 0xf571, - 0xf572, 0xf573, 0xf574, 0xf575, 0xf576, 0xf577, 0xf578, 0xf579, - 0xf57a, 0xf57b, 0xf57c, 0xf57d, 0xf57e, 0xf580, 0xf581, 0xf582, - 0xf583, 0xf584, 0xf585, 0xf586, 0xf587, 0xf588, 0xf589, 0xf58a, - 0xf58b, 0xf58c, 0xf58d, 0xf58e, 0xf58f, 0xf590, 0xf591, 0xf592, - 0xf593, 0xf594, 0xf595, 0xf596, 0xf597, 0xf598, 0xf599, 0xf59a, - 0xf59b, 0xf59c, 0xf59d, 0xf59e, 0xf59f, 0xf5a0, 0xf640, 0xf641, - 0xf642, 0xf643, 0xf644, 0xf645, 0xf646, 0xf647, 0xf648, 0xf649, - 0xf64a, 0xf64b, 0xf64c, 0xf64d, 0xf64e, 0xf64f, 0xf650, 0xf651, - 0xf652, 0xf653, 0xf654, 0xf655, 0xf656, 0xf657, 0xf658, 0xf659, - 0xf65a, 0xf65b, 0xf65c, 0xf65d, 0xf65e, 0xf65f, 0xf660, 0xf661, - 0xf662, 0xf663, 0xf664, 0xf665, 0xf666, 0xf667, 0xf668, 0xf669, - 0xf66a, 0xf66b, 0xf66c, 0xf66d, 0xf66e, 0xf66f, 0xf670, 0xf671, - 0xf672, 0xf673, 0xf674, 0xf675, 0xf676, 0xf677, 0xf678, 0xf679, - 0xf67a, 0xf67b, 0xf67c, 0xf67d, 0xf67e, 0xf680, 0xf681, 0xf682, - 0xf683, 0xf684, 0xf685, 0xf686, 0xf687, 0xf688, 0xf689, 0xf68a, - 0xf68b, 0xf68c, 0xf68d, 0xf68e, 0xf68f, 0xf690, 0xf691, 0xf692, - 0xf693, 0xf694, 0xf695, 0xf696, 0xf697, 0xf698, 0xf699, 0xf69a, - 0xf69b, 0xf69c, 0xf69d, 0xf69e, 0xf69f, 0xf6a0, 0xf740, 0xf741, - 0xf742, 0xf743, 0xf744, 0xf745, 0xf746, 0xf747, 0xf748, 0xf749, - 0xf74a, 0xf74b, 0xf74c, 0xf74d, 0xf74e, 0xf74f, 0xf750, 0xf751, - 0xf752, 0xf753, 0xf754, 0xf755, 0xf756, 0xf757, 0xf758, 0xf759, - 0xf75a, 0xf75b, 0xf75c, 0xf75d, 0xf75e, 0xf75f, 0xf760, 0xf761, - 0xf762, 0xf763, 0xf764, 0xf765, 0xf766, 0xf767, 0xf768, 0xf769, - 0xf76a, 0xf76b, 0xf76c, 0xf76d, 0xf76e, 0xf76f, 0xf770, 0xf771, - 0xf772, 0xf773, 0xf774, 0xf775, 0xf776, 0xf777, 0xf778, 0xf779, - 0xf77a, 0xf77b, 0xf77c, 0xf77d, 0xf77e, 0xf780, 0xf781, 0xf782, - 0xf783, 0xf784, 0xf785, 0xf786, 0xf787, 0xf788, 0xf789, 0xf78a, - 0xf78b, 0xf78c, 0xf78d, 0xf78e, 0xf78f, 0xf790, 0xf791, 0xf792, - 0xf793, 0xf794, 0xf795, 0xf796, 0xf797, 0xf798, 0xf799, 0xf79a, - 0xf79b, 0xf79c, 0xf79d, 0xf79e, 0xf79f, 0xf7a0, 0xf840, 0xf841, - 0xf842, 0xf843, 0xf844, 0xf845, 0xf846, 0xf847, 0xf848, 0xf849, - 0xf84a, 0xf84b, 0xf84c, 0xf84d, 0xf84e, 0xf84f, 0xf850, 0xf851, - 0xf852, 0xf853, 0xf854, 0xf855, 0xf856, 0xf857, 0xf858, 0xf859, - 0xf85a, 0xf85b, 0xf85c, 0xf85d, 0xf85e, 0xf85f, 0xf860, 0xf861, - 0xf862, 0xf863, 0xf864, 0xf865, 0xf866, 0xf867, 0xf868, 0xf869, - 0xf86a, 0xf86b, 0xf86c, 0xf86d, 0xf86e, 0xf86f, 0xf870, 0xf871, - 0xf872, 0xf873, 0xf874, 0xf875, 0xf876, 0xf877, 0xf878, 0xf879, - 0xf87a, 0xf87b, 0xf87c, 0xf87d, 0xf87e, 0xf880, 0xf881, 0xf882, - 0xf883, 0xf884, 0xf885, 0xf886, 0xf887, 0xf888, 0xf889, 0xf88a, - 0xf88b, 0xf88c, 0xf88d, 0xf88e, 0xf88f, 0xf890, 0xf891, 0xf892, - 0xf893, 0xf894, 0xf895, 0xf896, 0xf897, 0xf898, 0xf899, 0xf89a, - 0xf89b, 0xf89c, 0xf89d, 0xf89e, 0xf89f, 0xf8a0, 0xf940, 0xf941, - 0xf942, 0xf943, 0xf944, 0xf945, 0xf946, 0xf947, 0xf948, 0xf949, - 0xf94a, 0xf94b, 0xf94c, 0xf94d, 0xf94e, 0xf94f, 0xf950, 0xf951, - 0xf952, 0xf953, 0xf954, 0xf955, 0xf956, 0xf957, 0xf958, 0xf959, - 0xf95a, 0xf95b, 0xf95c, 0xf95d, 0xf95e, 0xf95f, 0xf960, 0xf961, - 0xf962, 0xf963, 0xf964, 0xf965, 0xf966, 0xf967, 0xf968, 0xf969, - 0xf96a, 0xf96b, 0xf96c, 0xf96d, 0xf96e, 0xf96f, 0xf970, 0xf971, - 0xf972, 0xf973, 0xf974, 0xf975, 0xf976, 0xf977, 0xf978, 0xf979, - 0xf97a, 0xf97b, 0xf97c, 0xf97d, 0xf97e, 0xf980, 0xf981, 0xf982, - 0xf983, 0xf984, 0xf985, 0xf986, 0xf987, 0xf988, 0xf989, 0xf98a, - 0xf98b, 0xf98c, 0xf98d, 0xf98e, 0xf98f, 0xf990, 0xf991, 0xf992, - 0xf993, 0xf994, 0xf995, 0xf996, 0xf997, 0xf998, 0xf999, 0xf99a, - 0xf99b, 0xf99c, 0xf99d, 0xf99e, 0xf99f, 0xf9a0, 0xfa40, 0xfa41, - 0xfa42, 0xfa43, 0xfa44, 0xfa45, 0xfa46, 0xfa47, 0xfa48, 0xfa49, - 0xfa4a, 0xfa4b, 0xfa4c, 0xfa4d, 0xfa4e, 0xfa4f, 0xfa50, 0xfa51, - 0xfa52, 0xfa53, 0xfa54, 0xfa55, 0xfa56, 0xfa57, 0xfa58, 0xfa59, - 0xfa5a, 0xfa5b, 0xfa5c, 0xfa5d, 0xfa5e, 0xfa5f, 0xfa60, 0xfa61, - 0xfa62, 0xfa63, 0xfa64, 0xfa65, 0xfa66, 0xfa67, 0xfa68, 0xfa69, - 0xfa6a, 0xfa6b, 0xfa6c, 0xfa6d, 0xfa6e, 0xfa6f, 0xfa70, 0xfa71, - 0xfa72, 0xfa73, 0xfa74, 0xfa75, 0xfa76, 0xfa77, 0xfa78, 0xfa79, - 0xfa7a, 0xfa7b, 0xfa7c, 0xfa7d, 0xfa7e, 0xfa80, 0xfa81, 0xfa82, - 0xfa83, 0xfa84, 0xfa85, 0xfa86, 0xfa87, 0xfa88, 0xfa89, 0xfa8a, - 0xfa8b, 0xfa8c, 0xfa8d, 0xfa8e, 0xfa8f, 0xfa90, 0xfa91, 0xfa92, - 0xfa93, 0xfa94, 0xfa95, 0xfa96, 0xfa97, 0xfa98, 0xfa99, 0xfa9a, - 0xfa9b, 0xfa9c, 0xfa9d, 0xfa9e, 0xfa9f, 0xfaa0, 0xfb40, 0xfb41, - 0xfb42, 0xfb43, 0xfb44, 0xfb45, 0xfb46, 0xfb47, 0xfb48, 0xfb49, - 0xfb4a, 0xfb4b, 0xfb4c, 0xfb4d, 0xfb4e, 0xfb4f, 0xfb50, 0xfb51, - 0xfb52, 0xfb53, 0xfb54, 0xfb55, 0xfb56, 0xfb57, 0xfb58, 0xfb59, - 0xfb5a, 0xfb5b, 0xfb5c, 0xfb5d, 0xfb5e, 0xfb5f, 0xfb60, 0xfb61, - 0xfb62, 0xfb63, 0xfb64, 0xfb65, 0xfb66, 0xfb67, 0xfb68, 0xfb69, - 0xfb6a, 0xfb6b, 0xfb6c, 0xfb6d, 0xfb6e, 0xfb6f, 0xfb70, 0xfb71, - 0xfb72, 0xfb73, 0xfb74, 0xfb75, 0xfb76, 0xfb77, 0xfb78, 0xfb79, - 0xfb7a, 0xfb7b, 0xfb7c, 0xfb7d, 0xfb7e, 0xfb80, 0xfb81, 0xfb82, - 0xfb83, 0xfb84, 0xfb85, 0xfb86, 0xfb87, 0xfb88, 0xfb89, 0xfb8a, - 0xfb8b, 0xfb8c, 0xfb8d, 0xfb8e, 0xfb8f, 0xfb90, 0xfb91, 0xfb92, - 0xfb93, 0xfb94, 0xfb95, 0xfb96, 0xfb97, 0xfb98, 0xfb99, 0xfb9a, - 0xfb9b, 0xfb9c, 0xfb9d, 0xfb9e, 0xfb9f, 0xfba0, 0xfc40, 0xfc41, - 0xfc42, 0xfc43, 0xfc44, 0xfc45, 0xfc46, 0xfc47, 0xfc48, 0xfc49, - 0xfc4a, 0xfc4b, 0xfc4c, 0xfc4d, 0xfc4e, 0xfc4f, 0xfc50, 0xfc51, - 0xfc52, 0xfc53, 0xfc54, 0xfc55, 0xfc56, 0xfc57, 0xfc58, 0xfc59, - 0xfc5a, 0xfc5b, 0xfc5c, 0xfc5d, 0xfc5e, 0xfc5f, 0xfc60, 0xfc61, - 0xfc62, 0xfc63, 0xfc64, 0xfc65, 0xfc66, 0xfc67, 0xfc68, 0xfc69, - 0xfc6a, 0xfc6b, 0xfc6c, 0xfc6d, 0xfc6e, 0xfc6f, 0xfc70, 0xfc71, - 0xfc72, 0xfc73, 0xfc74, 0xfc75, 0xfc76, 0xfc77, 0xfc78, 0xfc79, - 0xfc7a, 0xfc7b, 0xfc7c, 0xfc7d, 0xfc7e, 0xfc80, 0xfc81, 0xfc82, - 0xfc83, 0xfc84, 0xfc85, 0xfc86, 0xfc87, 0xfc88, 0xfc89, 0xfc8a, - 0xfc8b, 0xfc8c, 0xfc8d, 0xfc8e, 0xfc8f, 0xfc90, 0xfc91, 0xfc92, - 0xfc93, 0xfc94, 0xfc95, 0xfc96, 0xfc97, 0xfc98, 0xfc99, 0xfc9a, - 0xfc9b, 0xfc9c, 0xfc9d, 0xfc9e, 0xfc9f, 0xfca0, 0xfd40, 0xfd41, - 0xfd42, 0xfd43, 0xfd44, 0xfd45, 0xfd46, 0xfd47, 0xfd48, 0xfd49, - 0xfd4a, 0xfd4b, 0xfd4c, 0xfd4d, 0xfd4e, 0xfd4f, 0xfd50, 0xfd51, - 0xfd52, 0xfd53, 0xfd54, 0xfd55, 0xfd56, 0xfd57, 0xfd58, 0xfd59, - 0xfd5a, 0xfd5b, 0xfd5c, 0xfd5d, 0xfd5e, 0xfd5f, 0xfd60, 0xfd61, - 0xfd62, 0xfd63, 0xfd64, 0xfd65, 0xfd66, 0xfd67, 0xfd68, 0xfd69, - 0xfd6a, 0xfd6b, 0xfd6c, 0xfd6d, 0xfd6e, 0xfd6f, 0xfd70, 0xfd71, - 0xfd72, 0xfd73, 0xfd74, 0xfd75, 0xfd76, 0xfd77, 0xfd78, 0xfd79, - 0xfd7a, 0xfd7b, 0xfd7c, 0xfd7d, 0xfd7e, 0xfd80, 0xfd81, 0xfd82, - 0xfd83, 0xfd84, 0xfd85, 0xfd86, 0xfd87, 0xfd88, 0xfd89, 0xfd8a, - 0xfd8b, 0xfd8c, 0xfd8d, 0xfd8e, 0xfd8f, 0xfd90, 0xfd91, 0xfd92, - 0xfd93, 0xfd94, 0xfd95, 0xfd96, 0xfd97, 0xfd98, 0xfd99, 0xfd9a, - 0xfd9b, 0xfd9c, 0xfd9d, 0xfd9e, 0xfd9f, 0xfda0, 0xfe40, 0xfe41, - 0xfe42, 0xfe43, 0xfe44, 0xfe45, 0xfe46, 0xfe47, 0xfe48, 0xfe49, - 0xfe4a, 0xfe4b, 0xfe4c, 0xfe4d, 0xfe4e, 0xfe4f, 0xa955, 0xa968, - 0xa969, 0xa96a, 0xa96b, 0xa96c, 0xa96d, 0xa96e, 0xa96f, 0xa970, - 0xa971, 0xa972, 0xa973, 0xa974, 0xa975, 0xa976, 0xa977, 0xa978, - 0xa979, 0xa97a, 0xa97b, 0xa97c, 0xa97d, 0xa97e, 0xa980, 0xa981, - 0xa982, 0xa983, 0xa984, 0xa985, 0xa986, 0xa987, 0xa988, 0xa956, - 0xa957, -}; - -typedef struct { - unsigned short indx; /* index into big table */ - unsigned short used; /* bitmask of used entries */ -} Summary16; - -static const Summary16 gbkext_inv_uni2indx_page02[14] = { - /* 0x0200 */ - { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, - { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, - { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, - { 0, 0x0c00 }, { 2, 0x0200 }, -}; -static const Summary16 gbkext_inv_uni2indx_page20[44] = { - /* 0x2000 */ - { 3, 0x0000 }, { 3, 0x0029 }, { 6, 0x0020 }, { 7, 0x0020 }, - { 8, 0x0000 }, { 8, 0x0000 }, { 8, 0x0000 }, { 8, 0x0000 }, - { 8, 0x0000 }, { 8, 0x0000 }, { 8, 0x0000 }, { 8, 0x0000 }, - { 8, 0x0000 }, { 8, 0x0000 }, { 8, 0x0000 }, { 8, 0x0000 }, - /* 0x2100 */ - { 8, 0x0220 }, { 10, 0x0000 }, { 10, 0x0002 }, { 11, 0x0000 }, - { 11, 0x0000 }, { 11, 0x0000 }, { 11, 0x0000 }, { 11, 0x0000 }, - { 11, 0x0000 }, { 11, 0x03c0 }, { 15, 0x0000 }, { 15, 0x0000 }, - { 15, 0x0000 }, { 15, 0x0000 }, { 15, 0x0000 }, { 15, 0x0000 }, - /* 0x2200 */ - { 15, 0x0000 }, { 15, 0x8020 }, { 17, 0x0008 }, { 18, 0x0000 }, - { 18, 0x0000 }, { 18, 0x0004 }, { 19, 0x00c0 }, { 21, 0x0000 }, - { 21, 0x0000 }, { 21, 0x0020 }, { 22, 0x0000 }, { 22, 0x8000 }, -}; -static const Summary16 gbkext_inv_uni2indx_page25[17] = { - /* 0x2500 */ - { 23, 0x0000 }, { 23, 0x0000 }, { 23, 0x0000 }, { 23, 0x0000 }, - { 23, 0x0000 }, { 23, 0xffff }, { 39, 0xffff }, { 55, 0x000f }, - { 59, 0xfffe }, { 74, 0x0038 }, { 77, 0x0000 }, { 77, 0x3000 }, - { 79, 0x0000 }, { 79, 0x0000 }, { 79, 0x003c }, { 83, 0x0000 }, - /* 0x2600 */ - { 83, 0x0200 }, -}; -static const Summary16 gbkext_inv_uni2indx_page30[16] = { - /* 0x3000 */ - { 84, 0x00c0 }, { 86, 0x6004 }, { 89, 0x03fe }, { 98, 0x0000 }, - { 98, 0x0000 }, { 98, 0x0000 }, { 98, 0x0000 }, { 98, 0x0000 }, - { 98, 0x0000 }, { 98, 0x7800 }, { 102, 0x0000 }, { 102, 0x0000 }, - { 102, 0x0000 }, { 102, 0x0000 }, { 102, 0x0000 }, { 102, 0x7000 }, -}; -static const Summary16 gbkext_inv_uni2indx_page32[30] = { - /* 0x3200 */ - { 105, 0x0000 }, { 105, 0x0000 }, { 105, 0x0000 }, { 105, 0x0002 }, - { 106, 0x0000 }, { 106, 0x0000 }, { 106, 0x0000 }, { 106, 0x0000 }, - { 106, 0x0000 }, { 106, 0x0000 }, { 106, 0x0008 }, { 107, 0x0000 }, - { 107, 0x0000 }, { 107, 0x0000 }, { 107, 0x0000 }, { 107, 0x0000 }, - /* 0x3300 */ - { 107, 0x0000 }, { 107, 0x0000 }, { 107, 0x0000 }, { 107, 0x0000 }, - { 107, 0x0000 }, { 107, 0x0000 }, { 107, 0x0000 }, { 107, 0x0000 }, - { 107, 0xc000 }, { 109, 0x7000 }, { 112, 0x0002 }, { 113, 0x0000 }, - { 113, 0x4010 }, { 115, 0x0026 }, -}; -static const Summary16 gbkext_inv_uni2indx_page4e[1307] = { - /* 0x4e00 */ - { 118, 0x8074 }, { 123, 0x8084 }, { 126, 0xc24b }, { 133, 0x10aa }, - { 138, 0x0457 }, { 144, 0x0ca2 }, { 149, 0xfdbc }, { 161, 0xbff4 }, - { 173, 0x04bf }, { 181, 0x72c1 }, { 188, 0x8408 }, { 191, 0x73d3 }, - { 201, 0x9100 }, { 204, 0x1c05 }, { 209, 0xe2c5 }, { 217, 0x5712 }, - /* 0x4f00 */ - { 224, 0x19fd }, { 234, 0x307c }, { 241, 0x730a }, { 248, 0xcaaa }, - { 256, 0x1fb7 }, { 267, 0x0054 }, { 270, 0x6d46 }, { 278, 0x27a6 }, - { 286, 0x54e7 }, { 295, 0xd76d }, { 306, 0x2816 }, { 311, 0x7fdf }, - { 325, 0x3bc7 }, { 335, 0x0a7c }, { 342, 0x18b5 }, { 349, 0xbaf5 }, - /* 0x5000 */ - { 360, 0x4fff }, { 373, 0x68eb }, { 382, 0x889d }, { 389, 0xabff }, - { 402, 0x2e77 }, { 412, 0xebdf }, { 425, 0xefdf }, { 439, 0x373f }, - { 450, 0xdede }, { 462, 0xffff }, { 478, 0xec57 }, { 488, 0xf3fb }, - { 501, 0x7fff }, { 516, 0xfbbf }, { 530, 0x8f3f }, { 541, 0xf7d7 }, - /* 0x5100 */ - { 554, 0xf73f }, { 567, 0xfffb }, { 582, 0xfffd }, { 597, 0x7fff }, - { 612, 0xd484 }, { 618, 0xeb8d }, { 628, 0x86db }, { 637, 0xc404 }, - { 641, 0xccd8 }, { 649, 0xe51b }, { 658, 0x67ca }, { 667, 0xc710 }, - { 673, 0x652e }, { 681, 0xd7fd }, { 694, 0x57ec }, { 704, 0x4096 }, - /* 0x5200 */ - { 709, 0x9a30 }, { 715, 0xd039 }, { 722, 0x94ee }, { 731, 0x5036 }, - { 737, 0xcbf0 }, { 746, 0xafac }, { 756, 0x795d }, { 766, 0x5ffb }, - { 779, 0xfef9 }, { 792, 0x17f6 }, { 802, 0xc0f0 }, { 808, 0x3ff1 }, - { 819, 0xf577 }, { 831, 0x7eba }, { 842, 0xffef }, { 857, 0x39fe }, - /* 0x5300 */ - { 868, 0x5e9e }, { 878, 0xd91e }, { 887, 0xbbb4 }, { 897, 0x31ff }, - { 908, 0x3855 }, { 915, 0x2b11 }, { 921, 0x3520 }, { 926, 0x7a44 }, - { 933, 0xc58b }, { 941, 0x5adf }, { 952, 0xbc93 }, { 961, 0x77bf }, - { 974, 0xc0f9 }, { 982, 0x742d }, { 990, 0x0086 }, { 993, 0xc410 }, - /* 0x5400 */ - { 997, 0x08a5 }, { 1002, 0x1710 }, { 1007, 0x0434 }, { 1011, 0xa4c9 }, - { 1018, 0xf2b6 }, { 1028, 0xe402 }, { 1033, 0xfeab }, { 1045, 0xc611 }, - { 1051, 0x27aa }, { 1059, 0xd18a }, { 1066, 0x4027 }, { 1071, 0x56e5 }, - { 1080, 0x0c28 }, { 1084, 0x0940 }, { 1087, 0x981f }, { 1095, 0x4bf3 }, - /* 0x5500 */ - { 1105, 0x7d3d }, { 1116, 0xf7ec }, { 1128, 0x2b62 }, { 1135, 0x2f74 }, - { 1144, 0xf9a5 }, { 1154, 0xef9e }, { 1166, 0x8b0d }, { 1173, 0xa61f }, - { 1182, 0x7060 }, { 1187, 0x4ced }, { 1196, 0xff7f }, { 1211, 0x9555 }, - { 1219, 0xcdcf }, { 1230, 0x4fa1 }, { 1238, 0x6285 }, { 1244, 0x9f53 }, - /* 0x5600 */ - { 1254, 0x2cfc }, { 1263, 0x36ff }, { 1275, 0xcf67 }, { 1286, 0x75a9 }, - { 1295, 0x8fff }, { 1308, 0xec6f }, { 1319, 0xe0eb }, { 1328, 0xe7bd }, - { 1340, 0x3f9f }, { 1352, 0xfff7 }, { 1367, 0x7ff7 }, { 1381, 0xef7f }, - { 1395, 0xfbff }, { 1410, 0x136f }, { 1419, 0xd7e8 }, { 1429, 0x19cc }, - /* 0x5700 */ - { 1436, 0xf8a7 }, { 1446, 0x6fff }, { 1460, 0x08f7 }, { 1468, 0xb1f6 }, - { 1478, 0x0b7a }, { 1486, 0x037c }, { 1493, 0x50ac }, { 1499, 0xe737 }, - { 1510, 0xe783 }, { 1519, 0xf7f3 }, { 1532, 0x9520 }, { 1537, 0xfeeb }, - { 1550, 0x37f3 }, { 1561, 0x58cb }, { 1569, 0x5fee }, { 1581, 0xd8ef }, - /* 0x5800 */ - { 1592, 0xd73a }, { 1602, 0xbddd }, { 1614, 0xfbec }, { 1626, 0xffde }, - { 1640, 0xcfef }, { 1653, 0xbeed }, { 1665, 0xe7df }, { 1678, 0xbfff }, - { 1693, 0xfdd4 }, { 1704, 0x39f3 }, { 1714, 0xfcff }, { 1728, 0xefff }, - { 1743, 0xffdd }, { 1757, 0xffdd }, { 1771, 0xa7ef }, { 1783, 0xfdb6 }, - /* 0x5900 */ - { 1795, 0x5f6b }, { 1806, 0x698f }, { 1815, 0x114f }, { 1822, 0xe86d }, - { 1831, 0x3469 }, { 1838, 0xfa0d }, { 1847, 0xffda }, { 1860, 0xdca7 }, - { 1870, 0xda21 }, { 1877, 0xbd33 }, { 1887, 0x30c7 }, { 1894, 0xb5fb }, - { 1906, 0xf3bf }, { 1919, 0xca60 }, { 1925, 0xeed7 }, { 1937, 0x75ff }, - /* 0x5a00 */ - { 1950, 0xec05 }, { 1957, 0x6ef5 }, { 1968, 0xfdd6 }, { 1980, 0xefa9 }, - { 1991, 0xf9be }, { 2003, 0xfbdf }, { 2017, 0xfb7b }, { 2030, 0x7b0f }, - { 2040, 0xffff }, { 2056, 0xf3fb }, { 2069, 0xfbff }, { 2084, 0xbed3 }, - { 2095, 0xedf9 }, { 2107, 0xeeab }, { 2118, 0xf5b4 }, { 2128, 0xfffd }, - /* 0x5b00 */ - { 2143, 0xfdff }, { 2158, 0xff3f }, { 2172, 0xffff }, { 2188, 0xff6b }, - { 2201, 0xfffe }, { 2216, 0x4044 }, { 2219, 0xe983 }, { 2227, 0xdbd4 }, - { 2237, 0x6444 }, { 2242, 0x8057 }, { 2248, 0xf380 }, { 2255, 0x1c86 }, - { 2261, 0xef0b }, { 2271, 0x1ff2 }, { 2281, 0xbecd }, { 2292, 0x60fe }, - /* 0x5c00 */ - { 2301, 0x79ad }, { 2311, 0xca8d }, { 2319, 0xef4b }, { 2330, 0x00ed }, - { 2336, 0x30d8 }, { 2342, 0xbddc }, { 2353, 0x3f94 }, { 2362, 0x79fd }, - { 2374, 0xcef9 }, { 2385, 0xe02c }, { 2391, 0xc5f3 }, { 2401, 0x5e55 }, - { 2410, 0xf7ed }, { 2423, 0xfdfb }, { 2437, 0xda8d }, { 2446, 0xf7fe }, - /* 0x5d00 */ - { 2460, 0xbf33 }, { 2471, 0xb7af }, { 2483, 0x9d2f }, { 2493, 0x9fef }, - { 2506, 0xe37f }, { 2518, 0xd6ff }, { 2531, 0x65ff }, { 2543, 0xffef }, - { 2558, 0xfffb }, { 2573, 0xddff }, { 2587, 0xffff }, { 2603, 0xff7f }, - { 2618, 0xdfdf }, { 2632, 0x97ff }, { 2645, 0x3419 }, { 2651, 0x9f61 }, - /* 0x5e00 */ - { 2660, 0x6e91 }, { 2668, 0xc08c }, { 2673, 0x9f3f }, { 2685, 0xc67d }, - { 2695, 0xefcb }, { 2707, 0xb7cf }, { 2719, 0xfff9 }, { 2733, 0x42a3 }, - { 2739, 0x732e }, { 2748, 0x2904 }, { 2752, 0xdf1e }, { 2763, 0xbc17 }, - { 2772, 0xf9ff }, { 2786, 0xf7b1 }, { 2797, 0xfaff }, { 2811, 0x3b2f }, - /* 0x5f00 */ - { 2821, 0x72e0 }, { 2828, 0x7655 }, { 2837, 0x591e }, { 2845, 0xe9fd }, - { 2857, 0xfffe }, { 2872, 0xde12 }, { 2880, 0xc9a9 }, { 2888, 0xe574 }, - { 2897, 0xe048 }, { 2902, 0xec5a }, { 2911, 0x9afd }, { 2922, 0xcf5f }, - { 2934, 0x4d87 }, { 2942, 0xdc38 }, { 2950, 0x936c }, { 2958, 0x16dd }, - /* 0x6000 */ - { 2967, 0x1b80 }, { 2972, 0xc58b }, { 2980, 0x701c }, { 2986, 0x67df }, - { 2998, 0xd7f1 }, { 3009, 0xd9da }, { 3019, 0x4063 }, { 3024, 0x40b6 }, - { 3030, 0xcde7 }, { 3041, 0x53ab }, { 3050, 0x46b6 }, { 3058, 0xe6e9 }, - { 3068, 0xf39f }, { 3080, 0x4add }, { 3089, 0x043e }, { 3095, 0xf9a6 }, - /* 0x6100 */ - { 3105, 0x1cbc }, { 3113, 0x7bdf }, { 3126, 0xf726 }, { 3136, 0x7fff }, - { 3151, 0xaaff }, { 3163, 0xdfdd }, { 3176, 0xfe7b }, { 3189, 0xff5e }, - { 3202, 0xb7ff }, { 3216, 0xdfef }, { 3230, 0xec7f }, { 3242, 0xbf7f }, - { 3256, 0xf2fb }, { 3268, 0xffe9 }, { 3281, 0xffbf }, { 3296, 0x7fdf }, - /* 0x6200 */ - { 3310, 0x02bf }, { 3318, 0x7218 }, { 3324, 0xabc9 }, { 3333, 0x1f67 }, - { 3343, 0x8474 }, { 3349, 0xf6e1 }, { 3359, 0x0137 }, { 3365, 0x2db6 }, - { 3374, 0xf9ee }, { 3386, 0x7211 }, { 3392, 0xe6c8 }, { 3400, 0x45dd }, - { 3409, 0x880b }, { 3414, 0x6022 }, { 3418, 0x0c13 }, { 3423, 0x0f25 }, - /* 0x6300 */ - { 3430, 0xbc79 }, { 3440, 0x13bd }, { 3449, 0x72c0 }, { 3455, 0xd9fb }, - { 3467, 0x0593 }, { 3473, 0x3fde }, { 3485, 0x9d71 }, { 3494, 0xf33d }, - { 3505, 0x287a }, { 3512, 0xfeba }, { 3524, 0x8852 }, { 3529, 0xaa66 }, - { 3537, 0x1daf }, { 3547, 0xbfba }, { 3559, 0xd9f4 }, { 3569, 0x5eab }, - /* 0x6400 */ - { 3579, 0x67d8 }, { 3588, 0xa7e6 }, { 3598, 0xcbbc }, { 3608, 0x5bef }, - { 3620, 0xfa0d }, { 3629, 0xbeeb }, { 3641, 0xdd7f }, { 3654, 0xf8ff }, - { 3667, 0xff4b }, { 3679, 0xbd99 }, { 3689, 0x8def }, { 3700, 0xea5e }, - { 3710, 0x9fda }, { 3721, 0xbe7a }, { 3732, 0xffab }, { 3745, 0xffff }, - /* 0x6500 */ - { 3761, 0xfdfe }, { 3775, 0xfefb }, { 3789, 0x37df }, { 3801, 0x348f }, - { 3809, 0x6cdf }, { 3820, 0x959d }, { 3829, 0xe7b3 }, { 3840, 0xff6a }, - { 3852, 0xe77f }, { 3865, 0x6574 }, { 3873, 0x554d }, { 3881, 0xcdfe }, - { 3893, 0x2785 }, { 3900, 0xff3b }, { 3913, 0x0c1a }, { 3918, 0xfb3c }, - /* 0x6600 */ - { 3929, 0x2bb2 }, { 3937, 0x5dc7 }, { 3947, 0x5e5e }, { 3957, 0xaf8d }, - { 3967, 0x67f5 }, { 3978, 0x7b03 }, { 3986, 0x3ead }, { 3996, 0xbb2e }, - { 4006, 0xef6b }, { 4018, 0xdf3d }, { 4030, 0xbe7f }, { 4043, 0xbdef }, - { 4056, 0xffff }, { 4072, 0xc5ff }, { 4084, 0xfdbf }, { 4098, 0x2d62 }, - /* 0x6700 */ - { 4105, 0xd0fe }, { 4115, 0x574e }, { 4124, 0x42bf }, { 4133, 0xdbcd }, - { 4144, 0x2cb2 }, { 4151, 0x2fb4 }, { 4160, 0x58dc }, { 4168, 0x2f52 }, - { 4176, 0xf56d }, { 4187, 0x8a5e }, { 4195, 0x5253 }, { 4202, 0xfe16 }, - { 4212, 0x7fe5 }, { 4224, 0x88e0 }, { 4229, 0x6dda }, { 4239, 0x5fe4 }, - /* 0x6800 */ - { 4249, 0x205e }, { 4255, 0xdf35 }, { 4266, 0xf9fd }, { 4279, 0x8c73 }, - { 4287, 0xa880 }, { 4291, 0xffc4 }, { 4302, 0xf400 }, { 4307, 0xff2f }, - { 4320, 0x7f95 }, { 4331, 0xff77 }, { 4345, 0x5e3b }, { 4355, 0xffd6 }, - { 4368, 0xd5fa }, { 4379, 0xfadb }, { 4391, 0xbff6 }, { 4404, 0xe9dc }, - /* 0x6900 */ - { 4414, 0x97dd }, { 4425, 0x7ffa }, { 4438, 0xdfee }, { 4451, 0x5dee }, - { 4462, 0xfffb }, { 4477, 0x9b6f }, { 4488, 0xb7b6 }, { 4499, 0xec7d }, - { 4510, 0xdc2a }, { 4518, 0xe6cf }, { 4529, 0xd67f }, { 4541, 0xf76d }, - { 4553, 0xabfd }, { 4565, 0x77ee }, { 4577, 0xdffe }, { 4591, 0x5ffb }, - /* 0x6a00 */ - { 4604, 0xfbff }, { 4619, 0x7e7f }, { 4632, 0x7afd }, { 4644, 0x9fdd }, - { 4656, 0xff6f }, { 4670, 0xf4fe }, { 4682, 0xffdd }, { 4696, 0xedfd }, - { 4709, 0xbfee }, { 4722, 0xff7c }, { 4735, 0xe5fe }, { 4747, 0xffff }, - { 4763, 0xffff }, { 4779, 0xffff }, { 4795, 0xffff }, { 4811, 0xffff }, - /* 0x6b00 */ - { 4827, 0xffff }, { 4843, 0xffff }, { 4859, 0xff60 }, { 4869, 0xb97b }, - { 4880, 0xed37 }, { 4891, 0xfdff }, { 4906, 0xfb03 }, { 4915, 0xe5ff }, - { 4928, 0xd121 }, { 4934, 0xf3b3 }, { 4945, 0xfbfd }, { 4959, 0x7f47 }, - { 4970, 0x57d9 }, { 4980, 0xf503 }, { 4988, 0x73fd }, { 5000, 0xddd7 }, - /* 0x6c00 */ - { 5012, 0x5f1f }, { 5023, 0x7084 }, { 5028, 0x3829 }, { 5034, 0xdeca }, - { 5044, 0xf938 }, { 5053, 0x074e }, { 5060, 0xf8ec }, { 5070, 0x9daa }, - { 5079, 0x6c91 }, { 5086, 0x75e6 }, { 5096, 0x9105 }, { 5101, 0x04f1 }, - { 5107, 0xe9cf }, { 5118, 0xb706 }, { 5126, 0x32d0 }, { 5132, 0x8214 }, - /* 0x6d00 */ - { 5136, 0xa76d }, { 5146, 0xb17b }, { 5156, 0xb35f }, { 5167, 0x85d1 }, - { 5174, 0x1215 }, { 5179, 0xa9e1 }, { 5187, 0x39b6 }, { 5196, 0xee6f }, - { 5208, 0xacdb }, { 5218, 0x17c5 }, { 5226, 0x3024 }, { 5230, 0x7edb }, - { 5242, 0xe70e }, { 5251, 0x9cbd }, { 5261, 0xa7ac }, { 5270, 0xe575 }, - /* 0x6e00 */ - { 5280, 0x8bdf }, { 5291, 0xdb2c }, { 5300, 0x55c4 }, { 5307, 0xfaeb }, - { 5319, 0x9fe7 }, { 5331, 0x76a7 }, { 5341, 0xb7ff }, { 5355, 0x3fff }, - { 5369, 0x7d97 }, { 5380, 0x6efe }, { 5392, 0x7b5b }, { 5403, 0xd329 }, - { 5411, 0x7779 }, { 5422, 0x3b45 }, { 5430, 0xfc88 }, { 5438, 0xfdef }, - /* 0x6f00 */ - { 5452, 0x7dbb }, { 5464, 0xffc7 }, { 5477, 0x51ee }, { 5486, 0xbfb5 }, - { 5498, 0xd73f }, { 5510, 0xaeff }, { 5523, 0x9fbb }, { 5535, 0xeaeb }, - { 5546, 0x8cef }, { 5556, 0xefff }, { 5571, 0xff7d }, { 5585, 0xfdb7 }, - { 5598, 0xfdfa }, { 5611, 0xbff9 }, { 5624, 0x3ffc }, { 5636, 0xffff }, - /* 0x7000 */ - { 5652, 0xffff }, { 5668, 0xf3fd }, { 5681, 0xfff7 }, { 5696, 0xfddf }, - { 5710, 0x6fff }, { 5724, 0xbfff }, { 5739, 0x47ff }, { 5751, 0x2e9e }, - { 5760, 0xb9de }, { 5771, 0xcd8b }, { 5780, 0x07ff }, { 5791, 0xc475 }, - { 5799, 0xfaf0 }, { 5809, 0x74ff }, { 5821, 0x442f }, { 5828, 0xdd7f }, - /* 0x7100 */ - { 5841, 0xf9ff }, { 5855, 0xf896 }, { 5864, 0x7fbf }, { 5878, 0xffbc }, - { 5891, 0xabdf }, { 5903, 0xafff }, { 5917, 0xbe2f }, { 5928, 0xdaf3 }, - { 5939, 0x7bef }, { 5952, 0x7cef }, { 5964, 0xeefe }, { 5977, 0xfdd7 }, - { 5990, 0xbff7 }, { 6004, 0xffcf }, { 6018, 0xbf5e }, { 6030, 0xfdff }, - /* 0x7200 */ - { 6045, 0xffbf }, { 6060, 0xdfff }, { 6075, 0xeaff }, { 6088, 0x541c }, - { 6094, 0xce7f }, { 6106, 0x55bb }, { 6116, 0x3d39 }, { 6125, 0x39db }, - { 6135, 0x53ec }, { 6144, 0x7ffb }, { 6158, 0x4fff }, { 6171, 0xfc2e }, - { 6181, 0x9ee1 }, { 6190, 0xbd7a }, { 6201, 0x0cfc }, { 6209, 0xe260 }, - /* 0x7300 */ - { 6215, 0xbbf5 }, { 6227, 0x8717 }, { 6235, 0xa1d9 }, { 6243, 0x3c6d }, - { 6252, 0xdfff }, { 6267, 0xff7a }, { 6280, 0x4ffe }, { 6292, 0xbfff }, - { 6307, 0xb56f }, { 6318, 0x77bd }, { 6330, 0x35fb }, { 6341, 0xf372 }, - { 6351, 0x58fa }, { 6360, 0xbdfc }, { 6372, 0xdd5e }, { 6383, 0xfffb }, - /* 0x7400 */ - { 6398, 0x7997 }, { 6408, 0xf3fe }, { 6421, 0xaa9b }, { 6430, 0xef86 }, - { 6440, 0xfffd }, { 6455, 0x215f }, { 6463, 0xdfff }, { 6478, 0xbf3e }, - { 6490, 0xb774 }, { 6500, 0xaffe }, { 6513, 0xfc7f }, { 6526, 0xfbff }, - { 6541, 0xffff }, { 6557, 0xaffb }, { 6570, 0x3fa2 }, { 6579, 0x7f2f }, - /* 0x7500 */ - { 6591, 0x5fef }, { 6604, 0x68f5 }, { 6613, 0x44df }, { 6622, 0xb250 }, - { 6628, 0x26de }, { 6637, 0xe1ef }, { 6648, 0xfb9f }, { 6661, 0x7ceb }, - { 6672, 0x77b7 }, { 6684, 0x5929 }, { 6691, 0x27c4 }, { 6698, 0x8cc0 }, - { 6703, 0xd843 }, { 6710, 0xb68b }, { 6719, 0xf223 }, { 6727, 0x6dec }, - /* 0x7600 */ - { 6737, 0xebd4 }, { 6747, 0x745e }, { 6756, 0xd18a }, { 6763, 0x2ec6 }, - { 6771, 0xcff6 }, { 6783, 0xafaf }, { 6795, 0x77f7 }, { 6808, 0x96ff }, - { 6820, 0xb62b }, { 6829, 0xfdb5 }, { 6841, 0xbfef }, { 6855, 0x7fe9 }, - { 6867, 0x1a9b }, { 6875, 0x7628 }, { 6882, 0x3fdf }, { 6895, 0xace9 }, - /* 0x7700 */ - { 6904, 0xd46d }, { 6913, 0x79ff }, { 6926, 0x5cba }, { 6935, 0xea1f }, - { 6945, 0xff74 }, { 6957, 0xf3fc }, { 6969, 0xe691 }, { 6977, 0x1dff }, - { 6989, 0x8fce }, { 6999, 0x7ff9 }, { 7012, 0xe95a }, { 7021, 0x57d6 }, - { 7031, 0xdfff }, { 7046, 0xe77f }, { 7059, 0x8553 }, { 7066, 0x1eb7 }, - /* 0x7800 */ - { 7076, 0xcdf8 }, { 7086, 0x4a29 }, { 7092, 0xcd17 }, { 7101, 0xa06e }, - { 7108, 0xaf5e }, { 7119, 0xdf1a }, { 7129, 0x83ff }, { 7140, 0xef7f }, - { 7154, 0x8d7f }, { 7165, 0x6275 }, { 7173, 0xff55 }, { 7185, 0xbde0 }, - { 7194, 0xf1dd }, { 7205, 0xfdce }, { 7217, 0xeeff }, { 7231, 0xfb6b }, - /* 0x7900 */ - { 7243, 0xffdd }, { 7257, 0xbff7 }, { 7271, 0xffef }, { 7286, 0xa3ef }, - { 7297, 0xfcbc }, { 7308, 0x0337 }, { 7315, 0x5e5a }, { 7324, 0xfa7f }, - { 7337, 0x7bcc }, { 7347, 0xfbff }, { 7362, 0xff7f }, { 7377, 0x91f7 }, - { 7387, 0xd5b4 }, { 7396, 0x7ed9 }, { 7407, 0x5527 }, { 7415, 0xd6fe }, - /* 0x7a00 */ - { 7427, 0x97b2 }, { 7436, 0xbb6f }, { 7448, 0xfff6 }, { 7462, 0x4577 }, - { 7471, 0xffbf }, { 7486, 0xff7d }, { 7500, 0xffff }, { 7516, 0x782e }, - { 7524, 0xdea4 }, { 7533, 0x4e19 }, { 7540, 0xce9e }, { 7550, 0x7ff7 }, - { 7564, 0xf7ff }, { 7579, 0x3dbf }, { 7591, 0x5f96 }, { 7601, 0x59ff }, - /* 0x7b00 */ - { 7613, 0x72a7 }, { 7622, 0xb5cd }, { 7632, 0xa28e }, { 7639, 0xaaf5 }, - { 7649, 0x655f }, { 7659, 0xd2a8 }, { 7666, 0xbffa }, { 7679, 0xb559 }, - { 7688, 0xdfde }, { 7701, 0xcf4e }, { 7711, 0xc039 }, { 7717, 0xfeed }, - { 7730, 0xef3d }, { 7742, 0xd9f5 }, { 7753, 0xbb9d }, { 7764, 0xaf7d }, - /* 0x7c00 */ - { 7776, 0x677f }, { 7788, 0x7fbf }, { 7802, 0xfb3f }, { 7815, 0x7eff }, - { 7829, 0xdffc }, { 7842, 0xffff }, { 7858, 0xffff }, { 7874, 0xc7e7 }, - { 7885, 0xfdff }, { 7900, 0x0e59 }, { 7907, 0xbbcb }, { 7918, 0x8df1 }, - { 7927, 0xca5d }, { 7936, 0x6d1f }, { 7946, 0x7efe }, { 7959, 0xf6ff }, - /* 0x7d00 */ - { 7973, 0xfbff }, { 7988, 0xffff }, { 8004, 0x777a }, { 8015, 0xffff }, - { 8031, 0xffff }, { 8047, 0xffff }, { 8063, 0xbfff }, { 8078, 0xff7f }, - { 8093, 0xffff }, { 8109, 0xffff }, { 8125, 0xbfbf }, { 8139, 0xffff }, - { 8155, 0xffff }, { 8171, 0xffff }, { 8187, 0xffff }, { 8203, 0xffff }, - /* 0x7e00 */ - { 8219, 0xffff }, { 8235, 0xffff }, { 8251, 0xffff }, { 8267, 0xf7ff }, - { 8282, 0xff7d }, { 8296, 0xffff }, { 8312, 0xffff }, { 8328, 0xffff }, - { 8344, 0xfffb }, { 8359, 0x77ff }, { 8373, 0x4000 }, { 8374, 0x1810 }, - { 8377, 0x0000 }, { 8377, 0x0040 }, { 8378, 0x1010 }, { 8380, 0x0200 }, - /* 0x7f00 */ - { 8381, 0x0400 }, { 8382, 0x4001 }, { 8384, 0x0000 }, { 8384, 0xfa80 }, - { 8391, 0xffcb }, { 8404, 0x7a4c }, { 8412, 0xb8f9 }, { 8422, 0xbde9 }, - { 8433, 0xabfd }, { 8445, 0x1bef }, { 8456, 0x7f6d }, { 8468, 0x4cfa }, - { 8477, 0xabdd }, { 8488, 0x7ecf }, { 8500, 0xbd9c }, { 8510, 0xe7f4 }, - /* 0x8000 */ - { 8521, 0xc784 }, { 8528, 0xec0a }, { 8535, 0xf81a }, { 8543, 0x5615 }, - { 8550, 0xc3b3 }, { 8559, 0xfaeb }, { 8571, 0xf9ff }, { 8585, 0x7ffd }, - { 8599, 0xe526 }, { 8607, 0x42b7 }, { 8615, 0x11c8 }, { 8620, 0x0b69 }, - { 8627, 0x8fa0 }, { 8634, 0x813f }, { 8642, 0x404d }, { 8647, 0xcaa0 }, - /* 0x8100 */ - { 8653, 0x19bb }, { 8662, 0xbaa0 }, { 8669, 0x6fff }, { 8683, 0xbeb9 }, - { 8694, 0xe2bf }, { 8705, 0xf9c4 }, { 8714, 0x9d5e }, { 8724, 0x01ec }, - { 8730, 0x7afa }, { 8741, 0xc6fd }, { 8752, 0xfab7 }, { 8764, 0xf3f7 }, - { 8777, 0xebb0 }, { 8786, 0xffff }, { 8802, 0xcb77 }, { 8813, 0xa7e7 }, - /* 0x8200 */ - { 8824, 0xcf88 }, { 8832, 0x27ea }, { 8841, 0x42f1 }, { 8848, 0xb404 }, - { 8853, 0x756f }, { 8864, 0x7aff }, { 8877, 0x3eff }, { 8890, 0x19e2 }, - { 8897, 0x12eb }, { 8905, 0x4c79 }, { 8913, 0x008d }, { 8917, 0x9c64 }, - { 8924, 0x026d }, { 8930, 0x2641 }, { 8935, 0x7784 }, { 8943, 0xf56d }, - /* 0x8300 */ - { 8954, 0x2c01 }, { 8958, 0xe34d }, { 8967, 0x467f }, { 8977, 0xe885 }, - { 8984, 0x7d36 }, { 8994, 0x23e8 }, { 9001, 0x0004 }, { 9002, 0xc67f }, - { 9013, 0xbd9f }, { 9025, 0xa6f3 }, { 9035, 0xf0fe }, { 9046, 0xc820 }, - { 9050, 0x6b5c }, { 9059, 0x4eaf }, { 9069, 0xf9dc }, { 9080, 0xdcf8 }, - /* 0x8400 */ - { 9090, 0x07a5 }, { 9097, 0xcefd }, { 9109, 0xfe0f }, { 9120, 0xcefd }, - { 9132, 0xffbf }, { 9147, 0xe17d }, { 9157, 0xc5f5 }, { 9167, 0xfa95 }, - { 9177, 0xa47b }, { 9186, 0xed7f }, { 9199, 0x7ffd }, { 9213, 0x58eb }, - { 9222, 0xd9ed }, { 9233, 0x5fb4 }, { 9243, 0xef96 }, { 9254, 0x6ffe }, - /* 0x8500 */ - { 9267, 0xefff }, { 9282, 0x7b75 }, { 9293, 0xe7fd }, { 9306, 0xc07f }, - { 9315, 0xf8f7 }, { 9327, 0xbdbf }, { 9340, 0xfeef }, { 9354, 0xb1eb }, - { 9364, 0x7f4f }, { 9376, 0xe7ff }, { 9390, 0x3aef }, { 9401, 0xfd7e }, - { 9414, 0x7dfd }, { 9427, 0xefd6 }, { 9439, 0xfdef }, { 9453, 0x77ff }, - /* 0x8600 */ - { 9467, 0xffdf }, { 9482, 0xffbd }, { 9496, 0xfd7f }, { 9510, 0xeeff }, - { 9524, 0x1fff }, { 9537, 0xbbec }, { 9548, 0xa7fb }, { 9560, 0x01fd }, - { 9568, 0xc3f8 }, { 9577, 0xcfd7 }, { 9589, 0x6867 }, { 9597, 0xfb8c }, - { 9607, 0x312e }, { 9614, 0x34ec }, { 9622, 0x9def }, { 9634, 0xbce0 }, - /* 0x8700 */ - { 9642, 0xd872 }, { 9650, 0xaa53 }, { 9658, 0xbdd1 }, { 9668, 0x376d }, - { 9678, 0xac7f }, { 9689, 0xfd77 }, { 9702, 0xbfc6 }, { 9713, 0x87ae }, - { 9722, 0xd6d3 }, { 9732, 0x7f77 }, { 9745, 0x46ff }, { 9756, 0xdbd7 }, - { 9768, 0xf3be }, { 9780, 0xf7f1 }, { 9792, 0xbbde }, { 9804, 0xbdff }, - /* 0x8800 */ - { 9818, 0xfbf7 }, { 9832, 0xf797 }, { 9844, 0xfff9 }, { 9858, 0xedfb }, - { 9871, 0xcfce }, { 9882, 0xfd6f }, { 9895, 0xa4c1 }, { 9901, 0x1f7a }, - { 9911, 0xd6c9 }, { 9920, 0xefbb }, { 9933, 0xd7eb }, { 9945, 0xef7d }, - { 9958, 0xbd99 }, { 9968, 0x7ccb }, { 9978, 0xfec3 }, { 9989, 0xace4 }, - /* 0x8900 */ - { 9997, 0xfbfb }, { 10011, 0xf1f2 }, { 10021, 0xf3dd }, { 10033, 0xffae }, - { 10046, 0xffed }, { 10060, 0x3fff }, { 10074, 0xffbf }, { 10089, 0x77ff }, - { 10103, 0xffb5 }, { 10116, 0xffff }, { 10132, 0xffff }, { 10148, 0xffff }, - { 10164, 0x2009 }, { 10167, 0xabb8 }, { 10176, 0x7797 }, { 10187, 0xfff7 }, - /* 0x8a00 */ - { 10202, 0xff7e }, { 10216, 0xffff }, { 10232, 0xffff }, { 10248, 0xbfff }, - { 10263, 0xfeff }, { 10278, 0xffff }, { 10294, 0xffff }, { 10310, 0xfdff }, - { 10325, 0xf9ff }, { 10339, 0xfff7 }, { 10354, 0xffff }, { 10370, 0xffff }, - { 10386, 0xffff }, { 10402, 0xffff }, { 10418, 0xffff }, { 10434, 0xffff }, - /* 0x8b00 */ - { 10450, 0xff7f }, { 10465, 0xffff }, { 10481, 0xffbf }, { 10496, 0xffff }, - { 10512, 0xffff }, { 10528, 0xffff }, { 10544, 0xefbf }, { 10558, 0xffff }, - { 10574, 0xffff }, { 10590, 0xffff }, { 10606, 0x1000 }, { 10607, 0x0802 }, - { 10609, 0x0080 }, { 10610, 0x0001 }, { 10611, 0x0400 }, { 10612, 0x0000 }, - /* 0x8c00 */ - { 10612, 0x0200 }, { 10613, 0x4000 }, { 10614, 0x0000 }, { 10614, 0xff00 }, - { 10622, 0xed3d }, { 10633, 0xfbdf }, { 10647, 0xf3f9 }, { 10659, 0xf8f7 }, - { 10671, 0xe9db }, { 10682, 0xfeef }, { 10696, 0xffff }, { 10712, 0xffff }, - { 10728, 0xffff }, { 10744, 0xffff }, { 10760, 0xffff }, { 10776, 0xffff }, - /* 0x8d00 */ - { 10792, 0xffff }, { 10808, 0x1fff }, { 10821, 0x0001 }, { 10822, 0x0000 }, - { 10822, 0x0000 }, { 10822, 0x8086 }, { 10826, 0xd720 }, { 10833, 0xff06 }, - { 10843, 0xf3cd }, { 10854, 0x7fed }, { 10867, 0xfff7 }, { 10882, 0x2ac5 }, - { 10889, 0x27a7 }, { 10898, 0x133d }, { 10906, 0x62e7 }, { 10915, 0xd057 }, - /* 0x8e00 */ - { 10923, 0x69df }, { 10934, 0x1fef }, { 10946, 0x29f3 }, { 10955, 0xd9dd }, - { 10966, 0xf068 }, { 10973, 0xfdf9 }, { 10986, 0x4dbf }, { 10997, 0x6faa }, - { 11007, 0x7f5d }, { 11019, 0xafee }, { 11031, 0x67ff }, { 11044, 0xfbfb }, - { 11058, 0xbfff }, { 11073, 0xffff }, { 11089, 0xffff }, { 11105, 0xffff }, - /* 0x8f00 */ - { 11121, 0xffff }, { 11137, 0xffff }, { 11153, 0xffff }, { 11169, 0xffff }, - { 11185, 0xffff }, { 11201, 0xffff }, { 11217, 0x043f }, { 11224, 0x0000 }, - { 11224, 0x1001 }, { 11226, 0x2004 }, { 11228, 0xf4f7 }, { 11240, 0x9dbc }, - { 11250, 0xbe49 }, { 11259, 0x04c4 }, { 11263, 0x908b }, { 11269, 0xdc76 }, - /* 0x9000 */ - { 11279, 0x5180 }, { 11283, 0x1328 }, { 11288, 0x1fb8 }, { 11297, 0xa69f }, - { 11307, 0x5f69 }, { 11317, 0xf670 }, { 11326, 0x9ed3 }, { 11336, 0x5fcf }, - { 11348, 0xf6f2 }, { 11359, 0xd555 }, { 11368, 0x2bb1 }, { 11376, 0xb084 }, - { 11381, 0x3b4d }, { 11390, 0xc774 }, { 11399, 0x5639 }, { 11407, 0x9eef }, - /* 0x9100 */ - { 11419, 0xffeb }, { 11433, 0xbdff }, { 11447, 0x7ff3 }, { 11460, 0xfdfd }, - { 11474, 0x01b7 }, { 11481, 0x9b7a }, { 11491, 0x29c1 }, { 11497, 0x1c08 }, - { 11501, 0xc55f }, { 11511, 0xf3f8 }, { 11522, 0x1bf3 }, { 11532, 0xfbcf }, - { 11545, 0x097f }, { 11554, 0xeffd }, { 11568, 0xffff }, { 11584, 0xffff }, - /* 0x9200 */ - { 11600, 0xffff }, { 11616, 0xffff }, { 11632, 0xffff }, { 11648, 0xffff }, - { 11664, 0xffff }, { 11680, 0xffff }, { 11696, 0xffff }, { 11712, 0xffef }, - { 11727, 0xbfff }, { 11742, 0xffff }, { 11758, 0xbfff }, { 11773, 0xffff }, - { 11789, 0xfeff }, { 11804, 0xffff }, { 11820, 0xffff }, { 11836, 0xffff }, - /* 0x9300 */ - { 11852, 0xffff }, { 11868, 0xffff }, { 11884, 0xffff }, { 11900, 0xbfff }, - { 11915, 0xffff }, { 11931, 0xffff }, { 11947, 0xfbff }, { 11962, 0xffff }, - { 11978, 0x7fff }, { 11993, 0xffff }, { 12009, 0xffff }, { 12025, 0xffff }, - { 12041, 0xfbff }, { 12056, 0xffbf }, { 12071, 0xffff }, { 12087, 0xffff }, - /* 0x9400 */ - { 12103, 0xffff }, { 12119, 0xffff }, { 12135, 0xffff }, { 12151, 0xbfff }, - { 12166, 0xffff }, { 12182, 0xffff }, { 12198, 0xf7ff }, { 12213, 0xffff }, - { 12229, 0x001f }, { 12234, 0x0142 }, { 12237, 0x0000 }, { 12237, 0x0000 }, - { 12237, 0x8080 }, { 12239, 0x0418 }, { 12242, 0x0040 }, { 12243, 0x0800 }, - /* 0x9500 */ - { 12244, 0x0000 }, { 12244, 0x1000 }, { 12245, 0x0081 }, { 12247, 0x2008 }, - { 12249, 0x0908 }, { 12252, 0x0420 }, { 12254, 0x4001 }, { 12256, 0x7fb0 }, - { 12266, 0xffff }, { 12282, 0xffff }, { 12298, 0xffff }, { 12314, 0xffff }, - { 12330, 0xffff }, { 12346, 0xffff }, { 12362, 0x10ff }, { 12371, 0x8000 }, - /* 0x9600 */ - { 12372, 0x0080 }, { 12373, 0x4908 }, { 12377, 0xbbf9 }, { 12389, 0x4781 }, - { 12395, 0xc40a }, { 12400, 0x77ce }, { 12411, 0xe869 }, { 12419, 0xff0b }, - { 12430, 0x569f }, { 12440, 0xec6e }, { 12450, 0xff7f }, { 12465, 0x8db6 }, - { 12474, 0x0d0c }, { 12479, 0xffdb }, { 12493, 0x78fe }, { 12504, 0xbd37 }, - /* 0x9700 */ - { 12515, 0x1c2c }, { 12521, 0xafb7 }, { 12533, 0xdbff }, { 12547, 0xbcfa }, - { 12558, 0xffff }, { 12574, 0xb5b3 }, { 12584, 0xfdd8 }, { 12595, 0xefa7 }, - { 12607, 0xd7df }, { 12620, 0xfee9 }, { 12632, 0x57f6 }, { 12643, 0xffeb }, - { 12657, 0xffff }, { 12673, 0xffff }, { 12689, 0xc13f }, { 12698, 0xff97 }, - /* 0x9800 */ - { 12711, 0xffff }, { 12727, 0xffff }, { 12743, 0xffff }, { 12759, 0xffff }, - { 12775, 0xffff }, { 12791, 0xffff }, { 12807, 0xffff }, { 12823, 0x001f }, - { 12828, 0x4800 }, { 12830, 0x0224 }, { 12833, 0xff08 }, { 12842, 0xffff }, - { 12858, 0xbfff }, { 12873, 0x38d1 }, { 12880, 0xfe7f }, { 12894, 0xffff }, - /* 0x9900 */ - { 12910, 0xdfff }, { 12925, 0xfffe }, { 12940, 0xbfff }, { 12955, 0xffff }, - { 12971, 0xffff }, { 12987, 0xffcf }, { 13001, 0x0057 }, { 13006, 0x4b08 }, - { 13011, 0x520c }, { 13016, 0xfc00 }, { 13022, 0xfedf }, { 13036, 0xffff }, - { 13052, 0xffff }, { 13068, 0xffff }, { 13084, 0xffff }, { 13100, 0xffff }, - /* 0x9a00 */ - { 13116, 0xffff }, { 13132, 0xffff }, { 13148, 0xffff }, { 13164, 0xffff }, - { 13180, 0xffff }, { 13196, 0xffff }, { 13212, 0x0fff }, { 13224, 0x0004 }, - { 13225, 0x6208 }, { 13229, 0x0230 }, { 13232, 0xfe40 }, { 13240, 0xea3c }, - { 13249, 0xe7d8 }, { 13259, 0x7ef5 }, { 13271, 0x57bd }, { 13282, 0xf5ff }, - /* 0x9b00 */ - { 13296, 0x7ef7 }, { 13309, 0x7ff7 }, { 13323, 0x7ff7 }, { 13337, 0xe7fb }, - { 13350, 0x5c41 }, { 13356, 0xffed }, { 13370, 0xffff }, { 13386, 0xffff }, - { 13402, 0xffff }, { 13418, 0xffff }, { 13434, 0xffff }, { 13450, 0xffff }, - { 13466, 0xffff }, { 13482, 0xffff }, { 13498, 0xffff }, { 13514, 0xffff }, - /* 0x9c00 */ - { 13530, 0xffff }, { 13546, 0xffff }, { 13562, 0xffff }, { 13578, 0xffff }, - { 13594, 0xffff }, { 13610, 0xffff }, { 13626, 0xffff }, { 13642, 0x6fff }, - { 13656, 0x9619 }, { 13663, 0x23c8 }, { 13669, 0x9400 }, { 13672, 0xc200 }, - { 13675, 0x0307 }, { 13680, 0x0c06 }, { 13684, 0xfffb }, { 13699, 0xffff }, - /* 0x9d00 */ - { 13715, 0xffff }, { 13731, 0xffff }, { 13747, 0xffff }, { 13763, 0xffff }, - { 13779, 0xffff }, { 13795, 0xffff }, { 13811, 0xffff }, { 13827, 0xffff }, - { 13843, 0xffff }, { 13859, 0xffff }, { 13875, 0xffff }, { 13891, 0xffff }, - { 13907, 0xffff }, { 13923, 0xffff }, { 13939, 0xffff }, { 13955, 0xffff }, - /* 0x9e00 */ - { 13971, 0xffff }, { 13987, 0x7fff }, { 14002, 0x4090 }, { 14005, 0x1811 }, - { 14009, 0x2001 }, { 14011, 0xa25d }, { 14019, 0xc027 }, { 14025, 0x3ff4 }, - { 14036, 0xf67b }, { 14048, 0x5ff3 }, { 14060, 0xffbf }, { 14075, 0x96ef }, - { 14086, 0x1def }, { 14097, 0x46ed }, { 14106, 0x795a }, { 14115, 0xa5ff }, - /* 0x9f00 */ - { 14127, 0x97ff }, { 14140, 0xfd76 }, { 14152, 0x6ffa }, { 14164, 0x957f }, - { 14175, 0xffef }, { 14190, 0xfffc }, { 14204, 0xffff }, { 14220, 0x7fff }, - { 14235, 0xe006 }, { 14240, 0x71ff }, { 14252, 0x003e }, -}; -static const Summary16 gbkext_inv_uni2indx_pagef9[19] = { - /* 0xf900 */ - { 14257, 0x0000 }, { 14257, 0x0000 }, { 14257, 0x1000 }, { 14258, 0x0000 }, - { 14258, 0x0000 }, { 14258, 0x0000 }, { 14258, 0x0000 }, { 14258, 0x0200 }, - { 14259, 0x0000 }, { 14259, 0x0020 }, { 14260, 0x0000 }, { 14260, 0x0000 }, - { 14260, 0x0000 }, { 14260, 0x0000 }, { 14260, 0x0080 }, { 14261, 0x0002 }, - /* 0xfa00 */ - { 14262, 0xf000 }, { 14266, 0x811a }, { 14271, 0x039b }, -}; -static const Summary16 gbkext_inv_uni2indx_pagefe[31] = { - /* 0xfe00 */ - { 14278, 0x0000 }, { 14278, 0x0000 }, { 14278, 0x0000 }, { 14278, 0x0001 }, - { 14279, 0xfe00 }, { 14286, 0xfef7 }, { 14300, 0x0f7f }, { 14311, 0x0000 }, - { 14311, 0x0000 }, { 14311, 0x0000 }, { 14311, 0x0000 }, { 14311, 0x0000 }, - { 14311, 0x0000 }, { 14311, 0x0000 }, { 14311, 0x0000 }, { 14311, 0x0000 }, - /* 0xff00 */ - { 14311, 0x0000 }, { 14311, 0x0000 }, { 14311, 0x0000 }, { 14311, 0x0000 }, - { 14311, 0x0000 }, { 14311, 0x0000 }, { 14311, 0x0000 }, { 14311, 0x0000 }, - { 14311, 0x0000 }, { 14311, 0x0000 }, { 14311, 0x0000 }, { 14311, 0x0000 }, - { 14311, 0x0000 }, { 14311, 0x0000 }, { 14311, 0x0014 }, -}; - -static int gbkext_inv_wctomb(unsigned int* r, unsigned int wc) { - const Summary16 *summary = NULL; - if (wc >= 0x0200 && wc < 0x02e0) { - summary = &gbkext_inv_uni2indx_page02[(wc>>4)-0x020]; - } else if (wc >= 0x2000 && wc < 0x22c0) { - summary = &gbkext_inv_uni2indx_page20[(wc>>4)-0x200]; - } else if (wc >= 0x2500 && wc < 0x2610) { - summary = &gbkext_inv_uni2indx_page25[(wc>>4)-0x250]; - } else if (wc >= 0x3000 && wc < 0x3100) { - summary = &gbkext_inv_uni2indx_page30[(wc>>4)-0x300]; - } else if (wc >= 0x3200 && wc < 0x33e0) { - summary = &gbkext_inv_uni2indx_page32[(wc>>4)-0x320]; - } else if (wc >= 0x4e00 && wc < 0x9fb0) { - summary = &gbkext_inv_uni2indx_page4e[(wc>>4)-0x4e0]; - } else if (wc >= 0xf900 && wc < 0xfa30) { - summary = &gbkext_inv_uni2indx_pagef9[(wc>>4)-0xf90]; - } else if (wc >= 0xfe00 && wc < 0xfff0) { - summary = &gbkext_inv_uni2indx_pagefe[(wc>>4)-0xfe0]; - } - if (summary) { - unsigned short used = summary->used; - unsigned int i = wc & 0x0f; - if (used & ((unsigned short) 1 << i)) { - /* Keep in 'used' only the bits 0..i-1. */ - used &= ((unsigned short) 1 << i) - 1; - /* Add 'summary->indx' and the number of bits set in 'used'. */ - used = (used & 0x5555) + ((used & 0xaaaa) >> 1); - used = (used & 0x3333) + ((used & 0xcccc) >> 2); - used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4); - used = (used & 0x00ff) + (used >> 8); - *r = gbkext_inv_2charset[summary->indx + used]; - return 2; - } - } - return 0; -} - -/* - * GBK (libiconv-1.16/lib/gbk.h) - */ - -static int gbk_wctomb(unsigned int* r, unsigned int wc) { - int ret; - - /* ZINT: Note these mappings U+30FB and U+2015 different from GB 2312 */ - if (wc != 0x30fb && wc != 0x2015) { - ret = gb2312_wctomb_zint(r, wc); /* In gb2312.c */ - if (ret) { - return ret; - } - } - ret = gbkext_inv_wctomb(r, wc); - if (ret) { - return ret; - } - if (wc >= 0x2170 && wc <= 0x2179) { - *r = 0xa2a1 + (wc-0x2170); - return 2; - } - ret = cp936ext_wctomb(r, wc); - if (ret) { - return ret; - } - /* ZINT: gb2312_wctomb_zint() is patched to map U+00B7 to 0xA1A4 and U+2014 to 0xA1AA */ - - return 0; -} - -/* - * GB18030 two-byte extension (libiconv-1.16/lib/gb18030ext.h) - */ - -static const unsigned short gb18030ext_page2e[80] = { - 0x0000, 0xfe50, 0x0000, 0x0000, 0xfe54, 0x0000, 0x0000, 0x0000, /*0x80-0x87*/ - 0xfe57, 0x0000, 0x0000, 0xfe58, 0xfe5d, 0x0000, 0x0000, 0x0000, /*0x88-0x8f*/ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe5e, /*0x90-0x97*/ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x98-0x9f*/ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe6b, /*0xa0-0xa7*/ - 0x0000, 0x0000, 0xfe6e, 0x0000, 0x0000, 0x0000, 0xfe71, 0x0000, /*0xa8-0xaf*/ - 0x0000, 0x0000, 0x0000, 0xfe73, 0x0000, 0x0000, 0xfe74, 0xfe75, /*0xb0-0xb7*/ - 0x0000, 0x0000, 0x0000, 0xfe79, 0x0000, 0x0000, 0x0000, 0x0000, /*0xb8-0xbf*/ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xc0-0xc7*/ - 0x0000, 0x0000, 0xfe84, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xc8-0xcf*/ -}; -static const unsigned short gb18030ext_page2f[16] = { - 0xa98a, 0xa98b, 0xa98c, 0xa98d, 0xa98e, 0xa98f, 0xa990, 0xa991, /*0xf0-0xf7*/ - 0xa992, 0xa993, 0xa994, 0xa995, 0x0000, 0x0000, 0x0000, 0x0000, /*0xf8-0xff*/ -}; -static const unsigned short gb18030ext_page34[56] = { - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe56, /*0x40-0x47*/ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x48-0x4f*/ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x50-0x57*/ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x58-0x5f*/ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x60-0x67*/ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x68-0x6f*/ - 0x0000, 0x0000, 0x0000, 0xfe55, 0x0000, 0x0000, 0x0000, 0x0000, /*0x70-0x77*/ -}; -static const unsigned short gb18030ext_page36[24] = { - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe5c, 0x0000, /*0x08-0x0f*/ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x10-0x17*/ - 0x0000, 0x0000, 0xfe5b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x18-0x1f*/ -}; -static const unsigned short gb18030ext_page39[24] = { - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe62, /*0xc8-0xcf*/ - 0xfe65, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xd0-0xd7*/ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe63, /*0xd8-0xdf*/ -}; -static const unsigned short gb18030ext_page43[56] = { - 0x0000, 0x0000, 0x0000, 0x0000, 0xfe78, 0x0000, 0x0000, 0x0000, /*0xa8-0xaf*/ - 0x0000, 0xfe77, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xb0-0xb7*/ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xb8-0xbf*/ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xc0-0xc7*/ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xc8-0xcf*/ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xd0-0xd7*/ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe7a, 0x0000, 0x0000, /*0xd8-0xdf*/ -}; -static const unsigned short gb18030ext_page46[32] = { - 0x0000, 0x0000, 0x0000, 0x0000, 0xfe7d, 0x0000, 0x0000, 0x0000, /*0x48-0x4f*/ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x50-0x57*/ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x58-0x5f*/ - 0x0000, 0xfe7c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x60-0x67*/ -}; -static const unsigned short gb18030ext_page47_1[16] = { - 0x0000, 0x0000, 0x0000, 0xfe80, 0x0000, 0x0000, 0x0000, 0x0000, /*0x20-0x27*/ - 0x0000, 0xfe81, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x28-0x2f*/ -}; -static const unsigned short gb18030ext_page47_2[24] = { - 0x0000, 0x0000, 0x0000, 0x0000, 0xfe82, 0x0000, 0x0000, 0x0000, /*0x78-0x7f*/ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x80-0x87*/ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe83, 0x0000, 0x0000, /*0x88-0x8f*/ -}; -static const unsigned short gb18030ext_page49[120] = { - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe85, /*0x40-0x47*/ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x48-0x4f*/ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x50-0x57*/ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x58-0x5f*/ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x60-0x67*/ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x68-0x6f*/ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x70-0x77*/ - 0x0000, 0x0000, 0xfe86, 0x0000, 0x0000, 0xfe87, 0x0000, 0x0000, /*0x78-0x7f*/ - 0x0000, 0x0000, 0xfe88, 0xfe89, 0x0000, 0xfe8a, 0xfe8b, 0x0000, /*0x80-0x87*/ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x88-0x8f*/ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x90-0x97*/ - 0x0000, 0x0000, 0x0000, 0xfe8d, 0x0000, 0x0000, 0x0000, 0xfe8c, /*0x98-0x9f*/ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xa0-0xa7*/ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xa8-0xaf*/ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe8f, 0xfe8e, /*0xb0-0xb7*/ -}; -static const unsigned short gb18030ext_page4c[56] = { - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe96, /*0x70-0x77*/ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x78-0x7f*/ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x80-0x87*/ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x88-0x8f*/ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x90-0x97*/ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe93, /*0x98-0x9f*/ - 0xfe94, 0xfe95, 0xfe97, 0xfe92, 0x0000, 0x0000, 0x0000, 0x0000, /*0xa0-0xa7*/ -}; -static const unsigned short gb18030ext_page4d[16] = { - 0x0000, 0x0000, 0x0000, 0xfe98, 0xfe99, 0xfe9a, 0xfe9b, 0xfe9c, /*0x10-0x17*/ - 0xfe9d, 0xfe9e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x18-0x1f*/ -}; -static const unsigned short gb18030ext_page9f[16] = { - 0x0000, 0x0000, 0x0000, 0x0000, 0xfe59, 0xfe61, 0xfe66, 0xfe67, /*0xb0-0xb7*/ - 0xfe6d, 0xfe7e, 0xfe90, 0xfea0, 0x0000, 0x0000, 0x0000, 0x0000, /*0xb8-0xbf*/ -}; -static const unsigned short gb18030ext_pagefe[16] = { - 0xa6d9, 0xa6db, 0xa6da, 0xa6dc, 0xa6dd, 0xa6de, 0xa6df, 0xa6ec, /*0x10-0x17*/ - 0xa6ed, 0xa6f3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x18-0x1f*/ -}; - -static int gb18030ext_wctomb(unsigned int* r, unsigned int wc) { - unsigned short c = 0; - if (wc == 0x01f9) { - c = 0xa8bf; - } else if (wc == 0x1e3f) { - c = 0xa8bc; - } else if (wc == 0x20ac) { - c = 0xa2e3; - } else if (wc >= 0x2e80 && wc < 0x2ed0) { - c = gb18030ext_page2e[wc-0x2e80]; - } else if (wc >= 0x2ff0 && wc < 0x3000) { - c = gb18030ext_page2f[wc-0x2ff0]; - } else if (wc == 0x303e) { - c = 0xa989; - } else if (wc >= 0x3440 && wc < 0x3478) { - c = gb18030ext_page34[wc-0x3440]; - } else if (wc == 0x359e) { - c = 0xfe5a; - } else if (wc >= 0x3608 && wc < 0x3620) { - c = gb18030ext_page36[wc-0x3608]; - } else if (wc == 0x3918) { - c = 0xfe60; - } else if (wc == 0x396e) { - c = 0xfe5f; - } else if (wc >= 0x39c8 && wc < 0x39e0) { - c = gb18030ext_page39[wc-0x39c8]; - } else if (wc == 0x3a73) { - c = 0xfe64; - } else if (wc == 0x3b4e) { - c = 0xfe68; - } else if (wc == 0x3c6e) { - c = 0xfe69; - } else if (wc == 0x3ce0) { - c = 0xfe6a; - } else if (wc == 0x4056) { - c = 0xfe6f; - } else if (wc == 0x415f) { - c = 0xfe70; - } else if (wc == 0x4337) { - c = 0xfe72; - } else if (wc >= 0x43a8 && wc < 0x43e0) { - c = gb18030ext_page43[wc-0x43a8]; - } else if (wc == 0x44d6) { - c = 0xfe7b; - } else if (wc >= 0x4648 && wc < 0x4668) { - c = gb18030ext_page46[wc-0x4648]; - } else if (wc >= 0x4720 && wc < 0x4730) { - c = gb18030ext_page47_1[wc-0x4720]; - } else if (wc >= 0x4778 && wc < 0x4790) { - c = gb18030ext_page47_2[wc-0x4778]; - } else if (wc >= 0x4940 && wc < 0x49b8) { - c = gb18030ext_page49[wc-0x4940]; - } else if (wc >= 0x4c70 && wc < 0x4ca8) { - c = gb18030ext_page4c[wc-0x4c70]; - } else if (wc >= 0x4d10 && wc < 0x4d20) { - c = gb18030ext_page4d[wc-0x4d10]; - } else if (wc == 0x4dae) { - c = 0xfe9f; - } else if (wc >= 0x9fb4 && wc < 0x9fbc) { - c = gb18030ext_page9f[wc-0x9fb0]; - } else if (wc >= 0xfe10 && wc < 0xfe1a) { - c = gb18030ext_pagefe[wc-0xfe10]; - } else if (wc == 0x20087) { - c = 0xfe51; - } else if (wc == 0x20089) { - c = 0xfe52; - } else if (wc == 0x200cc) { - c = 0xfe53; - } else if (wc == 0x215d7) { - c = 0xfe6c; - } else if (wc == 0x2298f) { - c = 0xfe76; - } else if (wc == 0x241fe) { - c = 0xfe91; - } - if (c != 0) { - *r = c; - return 2; - } - return 0; -} - -/* - * GB18030 four-byte extension (libiconv-1.16/lib/gb18030uni.h) - */ - -static const unsigned short gb18030uni_uni2charset_ranges[412] = { - 0x0080, 0x00a3, 0x00a5, 0x00a6, 0x00a9, 0x00af, 0x00b2, 0x00b6, - 0x00b8, 0x00d6, 0x00d8, 0x00df, 0x00e2, 0x00e7, 0x00eb, 0x00eb, - 0x00ee, 0x00f1, 0x00f4, 0x00f6, 0x00f8, 0x00f8, 0x00fb, 0x00fb, - 0x00fd, 0x0100, 0x0102, 0x0112, 0x0114, 0x011a, 0x011c, 0x012a, - 0x012c, 0x0143, 0x0145, 0x0147, 0x0149, 0x014c, 0x014e, 0x016a, - 0x016c, 0x01cd, 0x01cf, 0x01cf, 0x01d1, 0x01d1, 0x01d3, 0x01d3, - 0x01d5, 0x01d5, 0x01d7, 0x01d7, 0x01d9, 0x01d9, 0x01db, 0x01db, - 0x01dd, 0x01f8, 0x01fa, 0x0250, 0x0252, 0x0260, 0x0262, 0x02c6, - 0x02c8, 0x02c8, 0x02cc, 0x02d8, 0x02da, 0x0390, 0x03a2, 0x03a2, - 0x03aa, 0x03b0, 0x03c2, 0x03c2, 0x03ca, 0x0400, 0x0402, 0x040f, - 0x0450, 0x0450, 0x0452, 0x200f, 0x2011, 0x2012, 0x2017, 0x2017, - 0x201a, 0x201b, 0x201e, 0x2024, 0x2027, 0x202f, 0x2031, 0x2031, - 0x2034, 0x2034, 0x2036, 0x203a, 0x203c, 0x20ab, 0x20ad, 0x2102, - 0x2104, 0x2104, 0x2106, 0x2108, 0x210a, 0x2115, 0x2117, 0x2120, - 0x2122, 0x215f, 0x216c, 0x216f, 0x217a, 0x218f, 0x2194, 0x2195, - 0x219a, 0x2207, 0x2209, 0x220e, 0x2210, 0x2210, 0x2212, 0x2214, - 0x2216, 0x2219, 0x221b, 0x221c, 0x2221, 0x2222, 0x2224, 0x2224, - 0x2226, 0x2226, 0x222c, 0x222d, 0x222f, 0x2233, 0x2238, 0x223c, - 0x223e, 0x2247, 0x2249, 0x224b, 0x224d, 0x2251, 0x2253, 0x225f, - 0x2262, 0x2263, 0x2268, 0x226d, 0x2270, 0x2294, 0x2296, 0x2298, - 0x229a, 0x22a4, 0x22a6, 0x22be, 0x22c0, 0x2311, 0x2313, 0x245f, - 0x246a, 0x2473, 0x249c, 0x24ff, 0x254c, 0x254f, 0x2574, 0x2580, - 0x2590, 0x2592, 0x2596, 0x259f, 0x25a2, 0x25b1, 0x25b4, 0x25bb, - 0x25be, 0x25c5, 0x25c8, 0x25ca, 0x25cc, 0x25cd, 0x25d0, 0x25e1, - 0x25e6, 0x2604, 0x2607, 0x2608, 0x260a, 0x263f, 0x2641, 0x2641, - 0x2643, 0x2e80, 0x2e82, 0x2e83, 0x2e85, 0x2e87, 0x2e89, 0x2e8a, - 0x2e8d, 0x2e96, 0x2e98, 0x2ea6, 0x2ea8, 0x2ea9, 0x2eab, 0x2ead, - 0x2eaf, 0x2eb2, 0x2eb4, 0x2eb5, 0x2eb8, 0x2eba, 0x2ebc, 0x2ec9, - 0x2ecb, 0x2fef, 0x2ffc, 0x2fff, 0x3004, 0x3004, 0x3018, 0x301c, - 0x301f, 0x3020, 0x302a, 0x303d, 0x303f, 0x3040, 0x3094, 0x309a, - 0x309f, 0x30a0, 0x30f7, 0x30fb, 0x30ff, 0x3104, 0x312a, 0x321f, - 0x322a, 0x3230, 0x3232, 0x32a2, 0x32a4, 0x338d, 0x3390, 0x339b, - 0x339f, 0x33a0, 0x33a2, 0x33c3, 0x33c5, 0x33cd, 0x33cf, 0x33d0, - 0x33d3, 0x33d4, 0x33d6, 0x3446, 0x3448, 0x3472, 0x3474, 0x359d, - 0x359f, 0x360d, 0x360f, 0x3619, 0x361b, 0x3917, 0x3919, 0x396d, - 0x396f, 0x39ce, 0x39d1, 0x39de, 0x39e0, 0x3a72, 0x3a74, 0x3b4d, - 0x3b4f, 0x3c6d, 0x3c6f, 0x3cdf, 0x3ce1, 0x4055, 0x4057, 0x415e, - 0x4160, 0x4336, 0x4338, 0x43ab, 0x43ad, 0x43b0, 0x43b2, 0x43dc, - 0x43de, 0x44d5, 0x44d7, 0x464b, 0x464d, 0x4660, 0x4662, 0x4722, - 0x4724, 0x4728, 0x472a, 0x477b, 0x477d, 0x478c, 0x478e, 0x4946, - 0x4948, 0x4979, 0x497b, 0x497c, 0x497e, 0x4981, 0x4984, 0x4984, - 0x4987, 0x499a, 0x499c, 0x499e, 0x49a0, 0x49b5, 0x49b8, 0x4c76, - 0x4c78, 0x4c9e, 0x4ca4, 0x4d12, 0x4d1a, 0x4dad, 0x4daf, 0x4dff, - 0x9fa6, 0xd7ff, - 0xe76c, 0xe76c, 0xe7c8, 0xe7c8, 0xe7e7, 0xe7f3, - 0xe815, 0xe815, 0xe819, 0xe81d, 0xe81f, 0xe825, 0xe827, 0xe82a, - 0xe82d, 0xe830, 0xe833, 0xe83a, 0xe83c, 0xe842, 0xe844, 0xe853, - 0xe856, 0xe863, - 0xe865, 0xf92b, 0xf92d, 0xf978, 0xf97a, 0xf994, - 0xf996, 0xf9e6, 0xf9e8, 0xf9f0, 0xf9f2, 0xfa0b, 0xfa10, 0xfa10, - 0xfa12, 0xfa12, 0xfa15, 0xfa17, 0xfa19, 0xfa1e, 0xfa22, 0xfa22, - 0xfa25, 0xfa26, 0xfa2a, 0xfe2f, 0xfe32, 0xfe32, 0xfe45, 0xfe48, - 0xfe53, 0xfe53, 0xfe58, 0xfe58, 0xfe67, 0xfe67, 0xfe6c, 0xff00, - 0xff5f, 0xffdf, 0xffe6, 0xffff -}; - -static const unsigned short gb18030uni_ranges[206] = { - 128, 129, 131, 133, 134, 135, 137, 140, - 142, 144, 145, 147, 148, 149, 150, 151, - 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, - 168, 171, 172, 189, 196, 213, 220, 221, - 285, 286, 287, 291, 293, 295, 297, 298, - 300, 301, 302, 303, 304, 305, 306, 307, - 308, 320, 330, 334, 338, 339, 340, 341, - 342, 343, 347, 348, 349, 354, 355, 359, - 360, 361, 362, 363, 365, 369, 371, 372, - 373, 374, 375, 376, 386, 426, 502, 538, - 553, 556, 558, 560, 562, 564, 565, 567, - 571, 573, 574, 575, 576, 577, 578, 579, - 581, 582, 583, 584, 585, 586, 588, 589, - 590, 602, 606, 625, 627, 636, 637, 720, - 724, 810, 813, 850, 860, 861, 862, 864, - 867, 868, 869, 870, 872, 873, 874, 875, - 876, 877, 878, 879, 880, 882, 883, 884, - 885, 886, 887, 888, 889, 890, 891, 892, - 893, 894, 895, 896, 897, 898, 899, 900, - 901, 902, 903, 905, 907, 908, 909, 911, - 912, 917, 924, 925, 21827, - 25775, 25866, 25896, - 25929, 25932, 25933, 25934, 25936, 25938, 25939, 25940, - 25942, - 25943, 25944, 25945, 25946, 25947, 25948, 25952, - 25953, 25955, 25956, 25959, 25961, 25964, 25966, 25984, - 25994, 25998, 26012, 26016, 26110, 26116 -}; - -static int gb18030uni_wctomb(unsigned int* r1, unsigned int* r2, unsigned int wc) { - unsigned int i = wc; - if (i >= 0x0080 && i <= 0xffff) { - if (i == 0xe7c7) { - i = 7457; - } else { - unsigned int k1 = 0; - unsigned int k2 = 205; - while (k1 < k2) { - unsigned int k = (k1 + k2) / 2; - if (i <= gb18030uni_uni2charset_ranges[2*k+1]) { - k2 = k; - } else if (i >= gb18030uni_uni2charset_ranges[2*k+2]) { - k1 = k + 1; - } else { - return 0; - } - } - { - unsigned int diff = gb18030uni_ranges[k1]; - i -= diff; - } - } - *r2 = (i % 10) + 0x30; i = i / 10; - *r2 |= ((i % 126) + 0x81) << 8; i = i / 126; - *r1 = (i % 10) + 0x30; i = i / 10; - *r1 |= (i + 0x81) << 8; - return 4; - } - return 0; -} - -/* - * GB18030 (libiconv-1.16/lib/gb18030.h) - */ - -static const unsigned short gb18030_pua2charset[31*3] = { -/* Unicode range GB18030 range */ - 0xe766, 0xe76b, 0xa2ab, /*.. 0xa2b0, */ - 0xe76d, 0xe76d, 0xa2e4, - 0xe76e, 0xe76f, 0xa2ef, /*.. 0xa2f0, */ - 0xe770, 0xe771, 0xa2fd, /*.. 0xa2fe, */ - 0xe772, 0xe77c, 0xa4f4, /*.. 0xa4fe, */ - 0xe77d, 0xe784, 0xa5f7, /*.. 0xa5fe, */ - 0xe785, 0xe78c, 0xa6b9, /*.. 0xa6c0, */ - 0xe78d, 0xe793, 0xa6d9, /*.. 0xa6df, */ - 0xe794, 0xe795, 0xa6ec, /*.. 0xa6ed, */ - 0xe796, 0xe796, 0xa6f3, - 0xe797, 0xe79f, 0xa6f6, /*.. 0xa6fe, */ - 0xe7a0, 0xe7ae, 0xa7c2, /*.. 0xa7d0, */ - 0xe7af, 0xe7bb, 0xa7f2, /*.. 0xa7fe, */ - 0xe7bc, 0xe7c6, 0xa896, /*.. 0xa8a0, */ - 0xe7c9, 0xe7cc, 0xa8c1, /*.. 0xa8c4, */ - 0xe7cd, 0xe7e1, 0xa8ea, /*.. 0xa8fe, */ - 0xe7e2, 0xe7e2, 0xa958, - 0xe7e3, 0xe7e3, 0xa95b, - 0xe7e4, 0xe7e6, 0xa95d, /*.. 0xa95f, */ - 0xe7f4, 0xe800, 0xa997, /*.. 0xa9a3, */ - 0xe801, 0xe80f, 0xa9f0, /*.. 0xa9fe, */ - 0xe810, 0xe814, 0xd7fa, /*.. 0xd7fe, */ - 0xe816, 0xe818, 0xfe51, /*.. 0xfe53, */ - 0xe81e, 0xe81e, 0xfe59, - 0xe826, 0xe826, 0xfe61, - 0xe82b, 0xe82c, 0xfe66, /*.. 0xfe67, */ - 0xe831, 0xe832, 0xfe6c, /*.. 0xfe6d, */ - 0xe83b, 0xe83b, 0xfe76, - 0xe843, 0xe843, 0xfe7e, - 0xe854, 0xe855, 0xfe90, /*.. 0xfe91, */ - 0xe864, 0xe864, 0xfea0, -}; - -INTERNAL int gb18030_wctomb_zint(unsigned int* r1, unsigned int* r2, unsigned int wc) { - int ret; - - /* Code set 0 (ASCII) */ - if (wc < 0x0080) { - *r1 = wc; - return 1; - } - - /* Code set 1 (GBK extended) */ - ret = gbk_wctomb(r1, wc); - if (ret) { - return ret; - } - - ret = gb18030ext_wctomb(r1, wc); - if (ret) { - return ret; - } - - /* Code set 2 (remainder of Unicode U+0000..U+FFFF) */ - if (wc >= 0xe000 && wc <= 0xe864) { - if (wc < 0xe766) { - /* User-defined characters range U+E000..U+E765 */ - if (wc < 0xe4c6) { - unsigned int i = wc - 0xe000; - *r1 = (i % 94) + 0xa1; i = i / 94; - *r1 |= (i < 6 ? i + 0xaa : i + 0xf2) << 8; - return 2; - } else { - unsigned int i = wc - 0xe4c6; - *r1 = ((i / 96) + 0xa1) << 8; i = i % 96; - *r1 |= i + (i >= 0x3f ? 0x41 : 0x40); - return 2; - } - } else { - /* User-defined characters, two-byte part of range U+E766..U+E864 */ - unsigned int k1 = 0; - unsigned int k2 = 31; - /* Invariant: We know that if wc occurs in Unicode interval in - gb18030_pua2charset, it does so at a k with k1 <= k < k2. */ - while (k1 < k2) { - unsigned int k = (k1 + k2) / 2; - if (wc < gb18030_pua2charset[k*3+0]) { - k2 = k; - } else if (wc > gb18030_pua2charset[k*3+1]) { - k1 = k + 1; - } else { - *r1 = gb18030_pua2charset[k*3+2] + (wc - gb18030_pua2charset[k*3+0]); - return 2; - } - } - } - } - ret = gb18030uni_wctomb(r1, r2, wc); - if (ret) { - return ret; - } - - /* Code set 3 (Unicode U+10000..U+10FFFF) */ - if (wc >= 0x10000 && wc < 0x110000) { - unsigned int i = wc - 0x10000; - *r2 = (i % 10) + 0x30; i = i / 10; - *r2 |= ((i % 126) + 0x81) << 8; i = i / 126; - *r1 = (i % 10) + 0x30; i = i / 10; - *r1 |= (i + 0x90) << 8; - return 4; - } - return 0; -} - -/* Convert UTF-8 string to GB 18030 and place in array of ints */ -INTERNAL int gb18030_utf8tomb(struct zint_symbol *symbol, const unsigned char source[], size_t* p_length, unsigned int* gbdata) { - int error_number, ret; - unsigned int i, j, length; -#ifndef _MSC_VER - unsigned int utfdata[*p_length + 1]; -#else - unsigned int* utfdata = (unsigned int*) _alloca((*p_length + 1) * sizeof(unsigned int)); -#endif - - error_number = utf8_to_unicode(symbol, source, utfdata, p_length, 0 /*disallow_4byte*/); - if (error_number != 0) { - return error_number; - } - - for (i = 0, j = 0, length = *p_length; i < length; i++, j++) { - if (utfdata[i] < 0x80) { - gbdata[j] = utfdata[i]; - } else { - ret = gb18030_wctomb_zint(gbdata + j, gbdata + j + 1, utfdata[i]); - if (ret == 0) { - strcpy(symbol->errtxt, "820: Invalid character in input data"); - return ZINT_ERROR_INVALID_DATA; - } - if (ret == 4) { - j++; - } - } - } - - *p_length = j; - - return 0; -} - -/* Convert UTF-8 string to single byte ECI and place in array of ints */ -INTERNAL int gb18030_utf8tosb(int eci, const unsigned char source[], size_t* p_length, unsigned int* gbdata, int full_multibyte) { - int error_number; -#ifndef _MSC_VER - unsigned char single_byte[*p_length + 1]; -#else - unsigned char* single_byte = (unsigned char*) _alloca(*p_length + 1); -#endif - - error_number = utf_to_eci(eci, source, single_byte, p_length); - if (error_number != 0) { - /* Note not setting `symbol->errtxt`, up to caller */ - return error_number; - } - - gb18030_cpy(single_byte, p_length, gbdata, full_multibyte); - - return 0; -} - -/* If `full_multibyte` set, copy byte input stream to array of ints, putting double-bytes that match HANXIN Chinese mode in single entry, - * and quad-bytes in 2 entries. If `full_multibyte` not set, do a straight copy */ -INTERNAL void gb18030_cpy(const unsigned char source[], size_t* p_length, unsigned int* gbdata, int full_multibyte) { - unsigned int i, j, length; - int done; - unsigned char c1, c2, c3, c4; - - if (full_multibyte) { - for (i = 0, j = 0, length = *p_length; i < length; i++, j++) { - done = 0; - c1 = source[i]; - if (length - i >= 2) { - if (c1 >= 0x81 && c1 <= 0xFE) { - c2 = source[i + 1]; - if ((c2 >= 0x40 && c2 <= 0x7E) || (c2 >= 0x80 && c2 <= 0xFE)) { - gbdata[j] = (c1 << 8) | c2; - i++; - done = 1; - } else if (length - i >= 4 && (c2 >= 0x30 && c2 <= 0x39)) { - c3 = source[i + 2]; - c4 = source[i + 3]; - if ((c3 >= 0x81 && c3 <= 0xFE) && (c4 >= 0x30 && c4 <= 0x39)) { - gbdata[j++] = (c1 << 8) | c2; - gbdata[j] = (c3 << 8) | c4; - i += 3; - done = 1; - } - } - } - } - if (!done) { - gbdata[j] = c1; - } - } - *p_length = j; - } else { - /* Straight copy */ - for (i = 0, length = *p_length; i < length; i++) { - gbdata[i] = source[i]; - } - } -} diff --git a/backend/gb18030.h b/backend/gb18030.h index 704e4bd..5cdd5ea 100644 --- a/backend/gb18030.h +++ b/backend/gb18030.h @@ -1,7 +1,7 @@ -/* gb18030.h - Unicode to GB 18030 +/* gb18030.h - Unicode to GB 18030 lookup table libzint - the open source barcode library - Copyright (C) 2009-2020 Robin Stuart + Copyright (C) 2009-2017 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -28,22 +28,23297 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ -#ifndef GB18030_H -#define GB18030_H +static const unsigned short int gb18030_twobyte_lookup[] = { + 0x0144, 0xA8BD, + 0x0148, 0xA8BE, + 0x01F9, 0xA8BF, + 0x0251, 0xA8BB, + 0x0261, 0xA8C0, + 0x02CA, 0xA840, + 0x02CB, 0xA841, + 0x02D9, 0xA842, + 0x2010, 0xA95C, + 0x2013, 0xA843, + 0x2015, 0xA844, + 0x2025, 0xA845, + 0x2035, 0xA846, + 0x20AC, 0xA2E3, + 0x2105, 0xA847, + 0x2109, 0xA848, + 0x2121, 0xA959, + 0x2170, 0xA2A1, + 0x2171, 0xA2A2, + 0x2172, 0xA2A3, + 0x2173, 0xA2A4, + 0x2174, 0xA2A5, + 0x2175, 0xA2A6, + 0x2176, 0xA2A7, + 0x2177, 0xA2A8, + 0x2178, 0xA2A9, + 0x2179, 0xA2AA, + 0x2196, 0xA849, + 0x2197, 0xA84A, + 0x2198, 0xA84B, + 0x2199, 0xA84C, + 0x2215, 0xA84D, + 0x221F, 0xA84E, + 0x2223, 0xA84F, + 0x2252, 0xA850, + 0x2266, 0xA851, + 0x2267, 0xA852, + 0x2295, 0xA892, + 0x22BF, 0xA853, + 0x2550, 0xA854, + 0x2551, 0xA855, + 0x2552, 0xA856, + 0x2553, 0xA857, + 0x2554, 0xA858, + 0x2555, 0xA859, + 0x2556, 0xA85A, + 0x2557, 0xA85B, + 0x2558, 0xA85C, + 0x2559, 0xA85D, + 0x255A, 0xA85E, + 0x255B, 0xA85F, + 0x255C, 0xA860, + 0x255D, 0xA861, + 0x255E, 0xA862, + 0x255F, 0xA863, + 0x2560, 0xA864, + 0x2561, 0xA865, + 0x2562, 0xA866, + 0x2563, 0xA867, + 0x2564, 0xA868, + 0x2565, 0xA869, + 0x2566, 0xA86A, + 0x2567, 0xA86B, + 0x2568, 0xA86C, + 0x2569, 0xA86D, + 0x256A, 0xA86E, + 0x256B, 0xA86F, + 0x256C, 0xA870, + 0x256D, 0xA871, + 0x256E, 0xA872, + 0x256F, 0xA873, + 0x2570, 0xA874, + 0x2571, 0xA875, + 0x2572, 0xA876, + 0x2573, 0xA877, + 0x2581, 0xA878, + 0x2582, 0xA879, + 0x2583, 0xA87A, + 0x2584, 0xA87B, + 0x2585, 0xA87C, + 0x2586, 0xA87D, + 0x2587, 0xA87E, + 0x2588, 0xA880, + 0x2589, 0xA881, + 0x258A, 0xA882, + 0x258B, 0xA883, + 0x258C, 0xA884, + 0x258D, 0xA885, + 0x258E, 0xA886, + 0x258F, 0xA887, + 0x2593, 0xA888, + 0x2594, 0xA889, + 0x2595, 0xA88A, + 0x25BC, 0xA88B, + 0x25BD, 0xA88C, + 0x25E2, 0xA88D, + 0x25E3, 0xA88E, + 0x25E4, 0xA88F, + 0x25E5, 0xA890, + 0x2609, 0xA891, + 0x2E81, 0xFE50, + 0x2E84, 0xFE54, + 0x2E88, 0xFE57, + 0x2E8B, 0xFE58, + 0x2E8C, 0xFE5D, + 0x2E97, 0xFE5E, + 0x2EA7, 0xFE6B, + 0x2EAA, 0xFE6E, + 0x2EAE, 0xFE71, + 0x2EB3, 0xFE73, + 0x2EB6, 0xFE74, + 0x2EB7, 0xFE75, + 0x2EBB, 0xFE79, + 0x2ECA, 0xFE84, + 0x2FF0, 0xA98A, + 0x2FF1, 0xA98B, + 0x2FF2, 0xA98C, + 0x2FF3, 0xA98D, + 0x2FF4, 0xA98E, + 0x2FF5, 0xA98F, + 0x2FF6, 0xA990, + 0x2FF7, 0xA991, + 0x2FF8, 0xA992, + 0x2FF9, 0xA993, + 0x2FFA, 0xA994, + 0x2FFB, 0xA995, + 0x3006, 0xA965, + 0x3007, 0xA996, + 0x3012, 0xA893, + 0x301D, 0xA894, + 0x301E, 0xA895, + 0x3021, 0xA940, + 0x3022, 0xA941, + 0x3023, 0xA942, + 0x3024, 0xA943, + 0x3025, 0xA944, + 0x3026, 0xA945, + 0x3027, 0xA946, + 0x3028, 0xA947, + 0x3029, 0xA948, + 0x303E, 0xA989, + 0x309B, 0xA961, + 0x309C, 0xA962, + 0x309D, 0xA966, + 0x309E, 0xA967, + 0x30FC, 0xA960, + 0x30FD, 0xA963, + 0x30FE, 0xA964, + 0x3231, 0xA95A, + 0x32A3, 0xA949, + 0x338E, 0xA94A, + 0x338F, 0xA94B, + 0x339C, 0xA94C, + 0x339D, 0xA94D, + 0x339E, 0xA94E, + 0x33A1, 0xA94F, + 0x33C4, 0xA950, + 0x33CE, 0xA951, + 0x33D1, 0xA952, + 0x33D2, 0xA953, + 0x33D5, 0xA954, + 0x3447, 0xFE56, + 0x3473, 0xFE55, + 0x359E, 0xFE5A, + 0x360E, 0xFE5C, + 0x361A, 0xFE5B, + 0x3918, 0xFE60, + 0x396E, 0xFE5F, + 0x39CF, 0xFE62, + 0x39D0, 0xFE65, + 0x39DF, 0xFE63, + 0x3A73, 0xFE64, + 0x3B4E, 0xFE68, + 0x3C6E, 0xFE69, + 0x3CE0, 0xFE6A, + 0x4056, 0xFE6F, + 0x415F, 0xFE70, + 0x4337, 0xFE72, + 0x43AC, 0xFE78, + 0x43B1, 0xFE77, + 0x43DD, 0xFE7A, + 0x44D6, 0xFE7B, + 0x464C, 0xFE7D, + 0x4661, 0xFE7C, + 0x4723, 0xFE80, + 0x4729, 0xFE81, + 0x477C, 0xFE82, + 0x478D, 0xFE83, + 0x4947, 0xFE85, + 0x497A, 0xFE86, + 0x497D, 0xFE87, + 0x4982, 0xFE88, + 0x4983, 0xFE89, + 0x4985, 0xFE8A, + 0x4986, 0xFE8B, + 0x499B, 0xFE8D, + 0x499F, 0xFE8C, + 0x49B6, 0xFE8F, + 0x49B7, 0xFE8E, + 0x4C77, 0xFE96, + 0x4C9F, 0xFE93, + 0x4CA0, 0xFE94, + 0x4CA1, 0xFE95, + 0x4CA2, 0xFE97, + 0x4CA3, 0xFE92, + 0x4D13, 0xFE98, + 0x4D14, 0xFE99, + 0x4D15, 0xFE9A, + 0x4D16, 0xFE9B, + 0x4D17, 0xFE9C, + 0x4D18, 0xFE9D, + 0x4D19, 0xFE9E, + 0x4DAE, 0xFE9F, + 0x4E02, 0x8140, + 0x4E04, 0x8141, + 0x4E05, 0x8142, + 0x4E06, 0x8143, + 0x4E0F, 0x8144, + 0x4E12, 0x8145, + 0x4E17, 0x8146, + 0x4E1F, 0x8147, + 0x4E20, 0x8148, + 0x4E21, 0x8149, + 0x4E23, 0x814A, + 0x4E26, 0x814B, + 0x4E29, 0x814C, + 0x4E2E, 0x814D, + 0x4E2F, 0x814E, + 0x4E31, 0x814F, + 0x4E33, 0x8150, + 0x4E35, 0x8151, + 0x4E37, 0x8152, + 0x4E3C, 0x8153, + 0x4E40, 0x8154, + 0x4E41, 0x8155, + 0x4E42, 0x8156, + 0x4E44, 0x8157, + 0x4E46, 0x8158, + 0x4E4A, 0x8159, + 0x4E51, 0x815A, + 0x4E55, 0x815B, + 0x4E57, 0x815C, + 0x4E5A, 0x815D, + 0x4E5B, 0x815E, + 0x4E62, 0x815F, + 0x4E63, 0x8160, + 0x4E64, 0x8161, + 0x4E65, 0x8162, + 0x4E67, 0x8163, + 0x4E68, 0x8164, + 0x4E6A, 0x8165, + 0x4E6B, 0x8166, + 0x4E6C, 0x8167, + 0x4E6D, 0x8168, + 0x4E6E, 0x8169, + 0x4E6F, 0x816A, + 0x4E72, 0x816B, + 0x4E74, 0x816C, + 0x4E75, 0x816D, + 0x4E76, 0x816E, + 0x4E77, 0x816F, + 0x4E78, 0x8170, + 0x4E79, 0x8171, + 0x4E7A, 0x8172, + 0x4E7B, 0x8173, + 0x4E7C, 0x8174, + 0x4E7D, 0x8175, + 0x4E7F, 0x8176, + 0x4E80, 0x8177, + 0x4E81, 0x8178, + 0x4E82, 0x8179, + 0x4E83, 0x817A, + 0x4E84, 0x817B, + 0x4E85, 0x817C, + 0x4E87, 0x817D, + 0x4E8A, 0x817E, + 0x4E90, 0x8180, + 0x4E96, 0x8181, + 0x4E97, 0x8182, + 0x4E99, 0x8183, + 0x4E9C, 0x8184, + 0x4E9D, 0x8185, + 0x4E9E, 0x8186, + 0x4EA3, 0x8187, + 0x4EAA, 0x8188, + 0x4EAF, 0x8189, + 0x4EB0, 0x818A, + 0x4EB1, 0x818B, + 0x4EB4, 0x818C, + 0x4EB6, 0x818D, + 0x4EB7, 0x818E, + 0x4EB8, 0x818F, + 0x4EB9, 0x8190, + 0x4EBC, 0x8191, + 0x4EBD, 0x8192, + 0x4EBE, 0x8193, + 0x4EC8, 0x8194, + 0x4ECC, 0x8195, + 0x4ECF, 0x8196, + 0x4ED0, 0x8197, + 0x4ED2, 0x8198, + 0x4EDA, 0x8199, + 0x4EDB, 0x819A, + 0x4EDC, 0x819B, + 0x4EE0, 0x819C, + 0x4EE2, 0x819D, + 0x4EE6, 0x819E, + 0x4EE7, 0x819F, + 0x4EE9, 0x81A0, + 0x4EED, 0x81A1, + 0x4EEE, 0x81A2, + 0x4EEF, 0x81A3, + 0x4EF1, 0x81A4, + 0x4EF4, 0x81A5, + 0x4EF8, 0x81A6, + 0x4EF9, 0x81A7, + 0x4EFA, 0x81A8, + 0x4EFC, 0x81A9, + 0x4EFE, 0x81AA, + 0x4F00, 0x81AB, + 0x4F02, 0x81AC, + 0x4F03, 0x81AD, + 0x4F04, 0x81AE, + 0x4F05, 0x81AF, + 0x4F06, 0x81B0, + 0x4F07, 0x81B1, + 0x4F08, 0x81B2, + 0x4F0B, 0x81B3, + 0x4F0C, 0x81B4, + 0x4F12, 0x81B5, + 0x4F13, 0x81B6, + 0x4F14, 0x81B7, + 0x4F15, 0x81B8, + 0x4F16, 0x81B9, + 0x4F1C, 0x81BA, + 0x4F1D, 0x81BB, + 0x4F21, 0x81BC, + 0x4F23, 0x81BD, + 0x4F28, 0x81BE, + 0x4F29, 0x81BF, + 0x4F2C, 0x81C0, + 0x4F2D, 0x81C1, + 0x4F2E, 0x81C2, + 0x4F31, 0x81C3, + 0x4F33, 0x81C4, + 0x4F35, 0x81C5, + 0x4F37, 0x81C6, + 0x4F39, 0x81C7, + 0x4F3B, 0x81C8, + 0x4F3E, 0x81C9, + 0x4F3F, 0x81CA, + 0x4F40, 0x81CB, + 0x4F41, 0x81CC, + 0x4F42, 0x81CD, + 0x4F44, 0x81CE, + 0x4F45, 0x81CF, + 0x4F47, 0x81D0, + 0x4F48, 0x81D1, + 0x4F49, 0x81D2, + 0x4F4A, 0x81D3, + 0x4F4B, 0x81D4, + 0x4F4C, 0x81D5, + 0x4F52, 0x81D6, + 0x4F54, 0x81D7, + 0x4F56, 0x81D8, + 0x4F61, 0x81D9, + 0x4F62, 0x81DA, + 0x4F66, 0x81DB, + 0x4F68, 0x81DC, + 0x4F6A, 0x81DD, + 0x4F6B, 0x81DE, + 0x4F6D, 0x81DF, + 0x4F6E, 0x81E0, + 0x4F71, 0x81E1, + 0x4F72, 0x81E2, + 0x4F75, 0x81E3, + 0x4F77, 0x81E4, + 0x4F78, 0x81E5, + 0x4F79, 0x81E6, + 0x4F7A, 0x81E7, + 0x4F7D, 0x81E8, + 0x4F80, 0x81E9, + 0x4F81, 0x81EA, + 0x4F82, 0x81EB, + 0x4F85, 0x81EC, + 0x4F86, 0x81ED, + 0x4F87, 0x81EE, + 0x4F8A, 0x81EF, + 0x4F8C, 0x81F0, + 0x4F8E, 0x81F1, + 0x4F90, 0x81F2, + 0x4F92, 0x81F3, + 0x4F93, 0x81F4, + 0x4F95, 0x81F5, + 0x4F96, 0x81F6, + 0x4F98, 0x81F7, + 0x4F99, 0x81F8, + 0x4F9A, 0x81F9, + 0x4F9C, 0x81FA, + 0x4F9E, 0x81FB, + 0x4F9F, 0x81FC, + 0x4FA1, 0x81FD, + 0x4FA2, 0x81FE, + 0x4FA4, 0x8240, + 0x4FAB, 0x8241, + 0x4FAD, 0x8242, + 0x4FB0, 0x8243, + 0x4FB1, 0x8244, + 0x4FB2, 0x8245, + 0x4FB3, 0x8246, + 0x4FB4, 0x8247, + 0x4FB6, 0x8248, + 0x4FB7, 0x8249, + 0x4FB8, 0x824A, + 0x4FB9, 0x824B, + 0x4FBA, 0x824C, + 0x4FBB, 0x824D, + 0x4FBC, 0x824E, + 0x4FBD, 0x824F, + 0x4FBE, 0x8250, + 0x4FC0, 0x8251, + 0x4FC1, 0x8252, + 0x4FC2, 0x8253, + 0x4FC6, 0x8254, + 0x4FC7, 0x8255, + 0x4FC8, 0x8256, + 0x4FC9, 0x8257, + 0x4FCB, 0x8258, + 0x4FCC, 0x8259, + 0x4FCD, 0x825A, + 0x4FD2, 0x825B, + 0x4FD3, 0x825C, + 0x4FD4, 0x825D, + 0x4FD5, 0x825E, + 0x4FD6, 0x825F, + 0x4FD9, 0x8260, + 0x4FDB, 0x8261, + 0x4FE0, 0x8262, + 0x4FE2, 0x8263, + 0x4FE4, 0x8264, + 0x4FE5, 0x8265, + 0x4FE7, 0x8266, + 0x4FEB, 0x8267, + 0x4FEC, 0x8268, + 0x4FF0, 0x8269, + 0x4FF2, 0x826A, + 0x4FF4, 0x826B, + 0x4FF5, 0x826C, + 0x4FF6, 0x826D, + 0x4FF7, 0x826E, + 0x4FF9, 0x826F, + 0x4FFB, 0x8270, + 0x4FFC, 0x8271, + 0x4FFD, 0x8272, + 0x4FFF, 0x8273, + 0x5000, 0x8274, + 0x5001, 0x8275, + 0x5002, 0x8276, + 0x5003, 0x8277, + 0x5004, 0x8278, + 0x5005, 0x8279, + 0x5006, 0x827A, + 0x5007, 0x827B, + 0x5008, 0x827C, + 0x5009, 0x827D, + 0x500A, 0x827E, + 0x500B, 0x8280, + 0x500E, 0x8281, + 0x5010, 0x8282, + 0x5011, 0x8283, + 0x5013, 0x8284, + 0x5015, 0x8285, + 0x5016, 0x8286, + 0x5017, 0x8287, + 0x501B, 0x8288, + 0x501D, 0x8289, + 0x501E, 0x828A, + 0x5020, 0x828B, + 0x5022, 0x828C, + 0x5023, 0x828D, + 0x5024, 0x828E, + 0x5027, 0x828F, + 0x502B, 0x8290, + 0x502F, 0x8291, + 0x5030, 0x8292, + 0x5031, 0x8293, + 0x5032, 0x8294, + 0x5033, 0x8295, + 0x5034, 0x8296, + 0x5035, 0x8297, + 0x5036, 0x8298, + 0x5037, 0x8299, + 0x5038, 0x829A, + 0x5039, 0x829B, + 0x503B, 0x829C, + 0x503D, 0x829D, + 0x503F, 0x829E, + 0x5040, 0x829F, + 0x5041, 0x82A0, + 0x5042, 0x82A1, + 0x5044, 0x82A2, + 0x5045, 0x82A3, + 0x5046, 0x82A4, + 0x5049, 0x82A5, + 0x504A, 0x82A6, + 0x504B, 0x82A7, + 0x504D, 0x82A8, + 0x5050, 0x82A9, + 0x5051, 0x82AA, + 0x5052, 0x82AB, + 0x5053, 0x82AC, + 0x5054, 0x82AD, + 0x5056, 0x82AE, + 0x5057, 0x82AF, + 0x5058, 0x82B0, + 0x5059, 0x82B1, + 0x505B, 0x82B2, + 0x505D, 0x82B3, + 0x505E, 0x82B4, + 0x505F, 0x82B5, + 0x5060, 0x82B6, + 0x5061, 0x82B7, + 0x5062, 0x82B8, + 0x5063, 0x82B9, + 0x5064, 0x82BA, + 0x5066, 0x82BB, + 0x5067, 0x82BC, + 0x5068, 0x82BD, + 0x5069, 0x82BE, + 0x506A, 0x82BF, + 0x506B, 0x82C0, + 0x506D, 0x82C1, + 0x506E, 0x82C2, + 0x506F, 0x82C3, + 0x5070, 0x82C4, + 0x5071, 0x82C5, + 0x5072, 0x82C6, + 0x5073, 0x82C7, + 0x5074, 0x82C8, + 0x5075, 0x82C9, + 0x5078, 0x82CA, + 0x5079, 0x82CB, + 0x507A, 0x82CC, + 0x507C, 0x82CD, + 0x507D, 0x82CE, + 0x5081, 0x82CF, + 0x5082, 0x82D0, + 0x5083, 0x82D1, + 0x5084, 0x82D2, + 0x5086, 0x82D3, + 0x5087, 0x82D4, + 0x5089, 0x82D5, + 0x508A, 0x82D6, + 0x508B, 0x82D7, + 0x508C, 0x82D8, + 0x508E, 0x82D9, + 0x508F, 0x82DA, + 0x5090, 0x82DB, + 0x5091, 0x82DC, + 0x5092, 0x82DD, + 0x5093, 0x82DE, + 0x5094, 0x82DF, + 0x5095, 0x82E0, + 0x5096, 0x82E1, + 0x5097, 0x82E2, + 0x5098, 0x82E3, + 0x5099, 0x82E4, + 0x509A, 0x82E5, + 0x509B, 0x82E6, + 0x509C, 0x82E7, + 0x509D, 0x82E8, + 0x509E, 0x82E9, + 0x509F, 0x82EA, + 0x50A0, 0x82EB, + 0x50A1, 0x82EC, + 0x50A2, 0x82ED, + 0x50A4, 0x82EE, + 0x50A6, 0x82EF, + 0x50AA, 0x82F0, + 0x50AB, 0x82F1, + 0x50AD, 0x82F2, + 0x50AE, 0x82F3, + 0x50AF, 0x82F4, + 0x50B0, 0x82F5, + 0x50B1, 0x82F6, + 0x50B3, 0x82F7, + 0x50B4, 0x82F8, + 0x50B5, 0x82F9, + 0x50B6, 0x82FA, + 0x50B7, 0x82FB, + 0x50B8, 0x82FC, + 0x50B9, 0x82FD, + 0x50BC, 0x82FE, + 0x50BD, 0x8340, + 0x50BE, 0x8341, + 0x50BF, 0x8342, + 0x50C0, 0x8343, + 0x50C1, 0x8344, + 0x50C2, 0x8345, + 0x50C3, 0x8346, + 0x50C4, 0x8347, + 0x50C5, 0x8348, + 0x50C6, 0x8349, + 0x50C7, 0x834A, + 0x50C8, 0x834B, + 0x50C9, 0x834C, + 0x50CA, 0x834D, + 0x50CB, 0x834E, + 0x50CC, 0x834F, + 0x50CD, 0x8350, + 0x50CE, 0x8351, + 0x50D0, 0x8352, + 0x50D1, 0x8353, + 0x50D2, 0x8354, + 0x50D3, 0x8355, + 0x50D4, 0x8356, + 0x50D5, 0x8357, + 0x50D7, 0x8358, + 0x50D8, 0x8359, + 0x50D9, 0x835A, + 0x50DB, 0x835B, + 0x50DC, 0x835C, + 0x50DD, 0x835D, + 0x50DE, 0x835E, + 0x50DF, 0x835F, + 0x50E0, 0x8360, + 0x50E1, 0x8361, + 0x50E2, 0x8362, + 0x50E3, 0x8363, + 0x50E4, 0x8364, + 0x50E5, 0x8365, + 0x50E8, 0x8366, + 0x50E9, 0x8367, + 0x50EA, 0x8368, + 0x50EB, 0x8369, + 0x50EF, 0x836A, + 0x50F0, 0x836B, + 0x50F1, 0x836C, + 0x50F2, 0x836D, + 0x50F4, 0x836E, + 0x50F6, 0x836F, + 0x50F7, 0x8370, + 0x50F8, 0x8371, + 0x50F9, 0x8372, + 0x50FA, 0x8373, + 0x50FC, 0x8374, + 0x50FD, 0x8375, + 0x50FE, 0x8376, + 0x50FF, 0x8377, + 0x5100, 0x8378, + 0x5101, 0x8379, + 0x5102, 0x837A, + 0x5103, 0x837B, + 0x5104, 0x837C, + 0x5105, 0x837D, + 0x5108, 0x837E, + 0x5109, 0x8380, + 0x510A, 0x8381, + 0x510C, 0x8382, + 0x510D, 0x8383, + 0x510E, 0x8384, + 0x510F, 0x8385, + 0x5110, 0x8386, + 0x5111, 0x8387, + 0x5113, 0x8388, + 0x5114, 0x8389, + 0x5115, 0x838A, + 0x5116, 0x838B, + 0x5117, 0x838C, + 0x5118, 0x838D, + 0x5119, 0x838E, + 0x511A, 0x838F, + 0x511B, 0x8390, + 0x511C, 0x8391, + 0x511D, 0x8392, + 0x511E, 0x8393, + 0x511F, 0x8394, + 0x5120, 0x8395, + 0x5122, 0x8396, + 0x5123, 0x8397, + 0x5124, 0x8398, + 0x5125, 0x8399, + 0x5126, 0x839A, + 0x5127, 0x839B, + 0x5128, 0x839C, + 0x5129, 0x839D, + 0x512A, 0x839E, + 0x512B, 0x839F, + 0x512C, 0x83A0, + 0x512D, 0x83A1, + 0x512E, 0x83A2, + 0x512F, 0x83A3, + 0x5130, 0x83A4, + 0x5131, 0x83A5, + 0x5132, 0x83A6, + 0x5133, 0x83A7, + 0x5134, 0x83A8, + 0x5135, 0x83A9, + 0x5136, 0x83AA, + 0x5137, 0x83AB, + 0x5138, 0x83AC, + 0x5139, 0x83AD, + 0x513A, 0x83AE, + 0x513B, 0x83AF, + 0x513C, 0x83B0, + 0x513D, 0x83B1, + 0x513E, 0x83B2, + 0x5142, 0x83B3, + 0x5147, 0x83B4, + 0x514A, 0x83B5, + 0x514C, 0x83B6, + 0x514E, 0x83B7, + 0x514F, 0x83B8, + 0x5150, 0x83B9, + 0x5152, 0x83BA, + 0x5153, 0x83BB, + 0x5157, 0x83BC, + 0x5158, 0x83BD, + 0x5159, 0x83BE, + 0x515B, 0x83BF, + 0x515D, 0x83C0, + 0x515E, 0x83C1, + 0x515F, 0x83C2, + 0x5160, 0x83C3, + 0x5161, 0x83C4, + 0x5163, 0x83C5, + 0x5164, 0x83C6, + 0x5166, 0x83C7, + 0x5167, 0x83C8, + 0x5169, 0x83C9, + 0x516A, 0x83CA, + 0x516F, 0x83CB, + 0x5172, 0x83CC, + 0x517A, 0x83CD, + 0x517E, 0x83CE, + 0x517F, 0x83CF, + 0x5183, 0x83D0, + 0x5184, 0x83D1, + 0x5186, 0x83D2, + 0x5187, 0x83D3, + 0x518A, 0x83D4, + 0x518B, 0x83D5, + 0x518E, 0x83D6, + 0x518F, 0x83D7, + 0x5190, 0x83D8, + 0x5191, 0x83D9, + 0x5193, 0x83DA, + 0x5194, 0x83DB, + 0x5198, 0x83DC, + 0x519A, 0x83DD, + 0x519D, 0x83DE, + 0x519E, 0x83DF, + 0x519F, 0x83E0, + 0x51A1, 0x83E1, + 0x51A3, 0x83E2, + 0x51A6, 0x83E3, + 0x51A7, 0x83E4, + 0x51A8, 0x83E5, + 0x51A9, 0x83E6, + 0x51AA, 0x83E7, + 0x51AD, 0x83E8, + 0x51AE, 0x83E9, + 0x51B4, 0x83EA, + 0x51B8, 0x83EB, + 0x51B9, 0x83EC, + 0x51BA, 0x83ED, + 0x51BE, 0x83EE, + 0x51BF, 0x83EF, + 0x51C1, 0x83F0, + 0x51C2, 0x83F1, + 0x51C3, 0x83F2, + 0x51C5, 0x83F3, + 0x51C8, 0x83F4, + 0x51CA, 0x83F5, + 0x51CD, 0x83F6, + 0x51CE, 0x83F7, + 0x51D0, 0x83F8, + 0x51D2, 0x83F9, + 0x51D3, 0x83FA, + 0x51D4, 0x83FB, + 0x51D5, 0x83FC, + 0x51D6, 0x83FD, + 0x51D7, 0x83FE, + 0x51D8, 0x8440, + 0x51D9, 0x8441, + 0x51DA, 0x8442, + 0x51DC, 0x8443, + 0x51DE, 0x8444, + 0x51DF, 0x8445, + 0x51E2, 0x8446, + 0x51E3, 0x8447, + 0x51E5, 0x8448, + 0x51E6, 0x8449, + 0x51E7, 0x844A, + 0x51E8, 0x844B, + 0x51E9, 0x844C, + 0x51EA, 0x844D, + 0x51EC, 0x844E, + 0x51EE, 0x844F, + 0x51F1, 0x8450, + 0x51F2, 0x8451, + 0x51F4, 0x8452, + 0x51F7, 0x8453, + 0x51FE, 0x8454, + 0x5204, 0x8455, + 0x5205, 0x8456, + 0x5209, 0x8457, + 0x520B, 0x8458, + 0x520C, 0x8459, + 0x520F, 0x845A, + 0x5210, 0x845B, + 0x5213, 0x845C, + 0x5214, 0x845D, + 0x5215, 0x845E, + 0x521C, 0x845F, + 0x521E, 0x8460, + 0x521F, 0x8461, + 0x5221, 0x8462, + 0x5222, 0x8463, + 0x5223, 0x8464, + 0x5225, 0x8465, + 0x5226, 0x8466, + 0x5227, 0x8467, + 0x522A, 0x8468, + 0x522C, 0x8469, + 0x522F, 0x846A, + 0x5231, 0x846B, + 0x5232, 0x846C, + 0x5234, 0x846D, + 0x5235, 0x846E, + 0x523C, 0x846F, + 0x523E, 0x8470, + 0x5244, 0x8471, + 0x5245, 0x8472, + 0x5246, 0x8473, + 0x5247, 0x8474, + 0x5248, 0x8475, + 0x5249, 0x8476, + 0x524B, 0x8477, + 0x524E, 0x8478, + 0x524F, 0x8479, + 0x5252, 0x847A, + 0x5253, 0x847B, + 0x5255, 0x847C, + 0x5257, 0x847D, + 0x5258, 0x847E, + 0x5259, 0x8480, + 0x525A, 0x8481, + 0x525B, 0x8482, + 0x525D, 0x8483, + 0x525F, 0x8484, + 0x5260, 0x8485, + 0x5262, 0x8486, + 0x5263, 0x8487, + 0x5264, 0x8488, + 0x5266, 0x8489, + 0x5268, 0x848A, + 0x526B, 0x848B, + 0x526C, 0x848C, + 0x526D, 0x848D, + 0x526E, 0x848E, + 0x5270, 0x848F, + 0x5271, 0x8490, + 0x5273, 0x8491, + 0x5274, 0x8492, + 0x5275, 0x8493, + 0x5276, 0x8494, + 0x5277, 0x8495, + 0x5278, 0x8496, + 0x5279, 0x8497, + 0x527A, 0x8498, + 0x527B, 0x8499, + 0x527C, 0x849A, + 0x527E, 0x849B, + 0x5280, 0x849C, + 0x5283, 0x849D, + 0x5284, 0x849E, + 0x5285, 0x849F, + 0x5286, 0x84A0, + 0x5287, 0x84A1, + 0x5289, 0x84A2, + 0x528A, 0x84A3, + 0x528B, 0x84A4, + 0x528C, 0x84A5, + 0x528D, 0x84A6, + 0x528E, 0x84A7, + 0x528F, 0x84A8, + 0x5291, 0x84A9, + 0x5292, 0x84AA, + 0x5294, 0x84AB, + 0x5295, 0x84AC, + 0x5296, 0x84AD, + 0x5297, 0x84AE, + 0x5298, 0x84AF, + 0x5299, 0x84B0, + 0x529A, 0x84B1, + 0x529C, 0x84B2, + 0x52A4, 0x84B3, + 0x52A5, 0x84B4, + 0x52A6, 0x84B5, + 0x52A7, 0x84B6, + 0x52AE, 0x84B7, + 0x52AF, 0x84B8, + 0x52B0, 0x84B9, + 0x52B4, 0x84BA, + 0x52B5, 0x84BB, + 0x52B6, 0x84BC, + 0x52B7, 0x84BD, + 0x52B8, 0x84BE, + 0x52B9, 0x84BF, + 0x52BA, 0x84C0, + 0x52BB, 0x84C1, + 0x52BC, 0x84C2, + 0x52BD, 0x84C3, + 0x52C0, 0x84C4, + 0x52C1, 0x84C5, + 0x52C2, 0x84C6, + 0x52C4, 0x84C7, + 0x52C5, 0x84C8, + 0x52C6, 0x84C9, + 0x52C8, 0x84CA, + 0x52CA, 0x84CB, + 0x52CC, 0x84CC, + 0x52CD, 0x84CD, + 0x52CE, 0x84CE, + 0x52CF, 0x84CF, + 0x52D1, 0x84D0, + 0x52D3, 0x84D1, + 0x52D4, 0x84D2, + 0x52D5, 0x84D3, + 0x52D7, 0x84D4, + 0x52D9, 0x84D5, + 0x52DA, 0x84D6, + 0x52DB, 0x84D7, + 0x52DC, 0x84D8, + 0x52DD, 0x84D9, + 0x52DE, 0x84DA, + 0x52E0, 0x84DB, + 0x52E1, 0x84DC, + 0x52E2, 0x84DD, + 0x52E3, 0x84DE, + 0x52E5, 0x84DF, + 0x52E6, 0x84E0, + 0x52E7, 0x84E1, + 0x52E8, 0x84E2, + 0x52E9, 0x84E3, + 0x52EA, 0x84E4, + 0x52EB, 0x84E5, + 0x52EC, 0x84E6, + 0x52ED, 0x84E7, + 0x52EE, 0x84E8, + 0x52EF, 0x84E9, + 0x52F1, 0x84EA, + 0x52F2, 0x84EB, + 0x52F3, 0x84EC, + 0x52F4, 0x84ED, + 0x52F5, 0x84EE, + 0x52F6, 0x84EF, + 0x52F7, 0x84F0, + 0x52F8, 0x84F1, + 0x52FB, 0x84F2, + 0x52FC, 0x84F3, + 0x52FD, 0x84F4, + 0x5301, 0x84F5, + 0x5302, 0x84F6, + 0x5303, 0x84F7, + 0x5304, 0x84F8, + 0x5307, 0x84F9, + 0x5309, 0x84FA, + 0x530A, 0x84FB, + 0x530B, 0x84FC, + 0x530C, 0x84FD, + 0x530E, 0x84FE, + 0x5311, 0x8540, + 0x5312, 0x8541, + 0x5313, 0x8542, + 0x5314, 0x8543, + 0x5318, 0x8544, + 0x531B, 0x8545, + 0x531C, 0x8546, + 0x531E, 0x8547, + 0x531F, 0x8548, + 0x5322, 0x8549, + 0x5324, 0x854A, + 0x5325, 0x854B, + 0x5327, 0x854C, + 0x5328, 0x854D, + 0x5329, 0x854E, + 0x532B, 0x854F, + 0x532C, 0x8550, + 0x532D, 0x8551, + 0x532F, 0x8552, + 0x5330, 0x8553, + 0x5331, 0x8554, + 0x5332, 0x8555, + 0x5333, 0x8556, + 0x5334, 0x8557, + 0x5335, 0x8558, + 0x5336, 0x8559, + 0x5337, 0x855A, + 0x5338, 0x855B, + 0x533C, 0x855C, + 0x533D, 0x855D, + 0x5340, 0x855E, + 0x5342, 0x855F, + 0x5344, 0x8560, + 0x5346, 0x8561, + 0x534B, 0x8562, + 0x534C, 0x8563, + 0x534D, 0x8564, + 0x5350, 0x8565, + 0x5354, 0x8566, + 0x5358, 0x8567, + 0x5359, 0x8568, + 0x535B, 0x8569, + 0x535D, 0x856A, + 0x5365, 0x856B, + 0x5368, 0x856C, + 0x536A, 0x856D, + 0x536C, 0x856E, + 0x536D, 0x856F, + 0x5372, 0x8570, + 0x5376, 0x8571, + 0x5379, 0x8572, + 0x537B, 0x8573, + 0x537C, 0x8574, + 0x537D, 0x8575, + 0x537E, 0x8576, + 0x5380, 0x8577, + 0x5381, 0x8578, + 0x5383, 0x8579, + 0x5387, 0x857A, + 0x5388, 0x857B, + 0x538A, 0x857C, + 0x538E, 0x857D, + 0x538F, 0x857E, + 0x5390, 0x8580, + 0x5391, 0x8581, + 0x5392, 0x8582, + 0x5393, 0x8583, + 0x5394, 0x8584, + 0x5396, 0x8585, + 0x5397, 0x8586, + 0x5399, 0x8587, + 0x539B, 0x8588, + 0x539C, 0x8589, + 0x539E, 0x858A, + 0x53A0, 0x858B, + 0x53A1, 0x858C, + 0x53A4, 0x858D, + 0x53A7, 0x858E, + 0x53AA, 0x858F, + 0x53AB, 0x8590, + 0x53AC, 0x8591, + 0x53AD, 0x8592, + 0x53AF, 0x8593, + 0x53B0, 0x8594, + 0x53B1, 0x8595, + 0x53B2, 0x8596, + 0x53B3, 0x8597, + 0x53B4, 0x8598, + 0x53B5, 0x8599, + 0x53B7, 0x859A, + 0x53B8, 0x859B, + 0x53B9, 0x859C, + 0x53BA, 0x859D, + 0x53BC, 0x859E, + 0x53BD, 0x859F, + 0x53BE, 0x85A0, + 0x53C0, 0x85A1, + 0x53C3, 0x85A2, + 0x53C4, 0x85A3, + 0x53C5, 0x85A4, + 0x53C6, 0x85A5, + 0x53C7, 0x85A6, + 0x53CE, 0x85A7, + 0x53CF, 0x85A8, + 0x53D0, 0x85A9, + 0x53D2, 0x85AA, + 0x53D3, 0x85AB, + 0x53D5, 0x85AC, + 0x53DA, 0x85AD, + 0x53DC, 0x85AE, + 0x53DD, 0x85AF, + 0x53DE, 0x85B0, + 0x53E1, 0x85B1, + 0x53E2, 0x85B2, + 0x53E7, 0x85B3, + 0x53F4, 0x85B4, + 0x53FA, 0x85B5, + 0x53FE, 0x85B6, + 0x53FF, 0x85B7, + 0x5400, 0x85B8, + 0x5402, 0x85B9, + 0x5405, 0x85BA, + 0x5407, 0x85BB, + 0x540B, 0x85BC, + 0x5414, 0x85BD, + 0x5418, 0x85BE, + 0x5419, 0x85BF, + 0x541A, 0x85C0, + 0x541C, 0x85C1, + 0x5422, 0x85C2, + 0x5424, 0x85C3, + 0x5425, 0x85C4, + 0x542A, 0x85C5, + 0x5430, 0x85C6, + 0x5433, 0x85C7, + 0x5436, 0x85C8, + 0x5437, 0x85C9, + 0x543A, 0x85CA, + 0x543D, 0x85CB, + 0x543F, 0x85CC, + 0x5441, 0x85CD, + 0x5442, 0x85CE, + 0x5444, 0x85CF, + 0x5445, 0x85D0, + 0x5447, 0x85D1, + 0x5449, 0x85D2, + 0x544C, 0x85D3, + 0x544D, 0x85D4, + 0x544E, 0x85D5, + 0x544F, 0x85D6, + 0x5451, 0x85D7, + 0x545A, 0x85D8, + 0x545D, 0x85D9, + 0x545E, 0x85DA, + 0x545F, 0x85DB, + 0x5460, 0x85DC, + 0x5461, 0x85DD, + 0x5463, 0x85DE, + 0x5465, 0x85DF, + 0x5467, 0x85E0, + 0x5469, 0x85E1, + 0x546A, 0x85E2, + 0x546B, 0x85E3, + 0x546C, 0x85E4, + 0x546D, 0x85E5, + 0x546E, 0x85E6, + 0x546F, 0x85E7, + 0x5470, 0x85E8, + 0x5474, 0x85E9, + 0x5479, 0x85EA, + 0x547A, 0x85EB, + 0x547E, 0x85EC, + 0x547F, 0x85ED, + 0x5481, 0x85EE, + 0x5483, 0x85EF, + 0x5485, 0x85F0, + 0x5487, 0x85F1, + 0x5488, 0x85F2, + 0x5489, 0x85F3, + 0x548A, 0x85F4, + 0x548D, 0x85F5, + 0x5491, 0x85F6, + 0x5493, 0x85F7, + 0x5497, 0x85F8, + 0x5498, 0x85F9, + 0x549C, 0x85FA, + 0x549E, 0x85FB, + 0x549F, 0x85FC, + 0x54A0, 0x85FD, + 0x54A1, 0x85FE, + 0x54A2, 0x8640, + 0x54A5, 0x8641, + 0x54AE, 0x8642, + 0x54B0, 0x8643, + 0x54B2, 0x8644, + 0x54B5, 0x8645, + 0x54B6, 0x8646, + 0x54B7, 0x8647, + 0x54B9, 0x8648, + 0x54BA, 0x8649, + 0x54BC, 0x864A, + 0x54BE, 0x864B, + 0x54C3, 0x864C, + 0x54C5, 0x864D, + 0x54CA, 0x864E, + 0x54CB, 0x864F, + 0x54D6, 0x8650, + 0x54D8, 0x8651, + 0x54DB, 0x8652, + 0x54E0, 0x8653, + 0x54E1, 0x8654, + 0x54E2, 0x8655, + 0x54E3, 0x8656, + 0x54E4, 0x8657, + 0x54EB, 0x8658, + 0x54EC, 0x8659, + 0x54EF, 0x865A, + 0x54F0, 0x865B, + 0x54F1, 0x865C, + 0x54F4, 0x865D, + 0x54F5, 0x865E, + 0x54F6, 0x865F, + 0x54F7, 0x8660, + 0x54F8, 0x8661, + 0x54F9, 0x8662, + 0x54FB, 0x8663, + 0x54FE, 0x8664, + 0x5500, 0x8665, + 0x5502, 0x8666, + 0x5503, 0x8667, + 0x5504, 0x8668, + 0x5505, 0x8669, + 0x5508, 0x866A, + 0x550A, 0x866B, + 0x550B, 0x866C, + 0x550C, 0x866D, + 0x550D, 0x866E, + 0x550E, 0x866F, + 0x5512, 0x8670, + 0x5513, 0x8671, + 0x5515, 0x8672, + 0x5516, 0x8673, + 0x5517, 0x8674, + 0x5518, 0x8675, + 0x5519, 0x8676, + 0x551A, 0x8677, + 0x551C, 0x8678, + 0x551D, 0x8679, + 0x551E, 0x867A, + 0x551F, 0x867B, + 0x5521, 0x867C, + 0x5525, 0x867D, + 0x5526, 0x867E, + 0x5528, 0x8680, + 0x5529, 0x8681, + 0x552B, 0x8682, + 0x552D, 0x8683, + 0x5532, 0x8684, + 0x5534, 0x8685, + 0x5535, 0x8686, + 0x5536, 0x8687, + 0x5538, 0x8688, + 0x5539, 0x8689, + 0x553A, 0x868A, + 0x553B, 0x868B, + 0x553D, 0x868C, + 0x5540, 0x868D, + 0x5542, 0x868E, + 0x5545, 0x868F, + 0x5547, 0x8690, + 0x5548, 0x8691, + 0x554B, 0x8692, + 0x554C, 0x8693, + 0x554D, 0x8694, + 0x554E, 0x8695, + 0x554F, 0x8696, + 0x5551, 0x8697, + 0x5552, 0x8698, + 0x5553, 0x8699, + 0x5554, 0x869A, + 0x5557, 0x869B, + 0x5558, 0x869C, + 0x5559, 0x869D, + 0x555A, 0x869E, + 0x555B, 0x869F, + 0x555D, 0x86A0, + 0x555E, 0x86A1, + 0x555F, 0x86A2, + 0x5560, 0x86A3, + 0x5562, 0x86A4, + 0x5563, 0x86A5, + 0x5568, 0x86A6, + 0x5569, 0x86A7, + 0x556B, 0x86A8, + 0x556F, 0x86A9, + 0x5570, 0x86AA, + 0x5571, 0x86AB, + 0x5572, 0x86AC, + 0x5573, 0x86AD, + 0x5574, 0x86AE, + 0x5579, 0x86AF, + 0x557A, 0x86B0, + 0x557D, 0x86B1, + 0x557F, 0x86B2, + 0x5585, 0x86B3, + 0x5586, 0x86B4, + 0x558C, 0x86B5, + 0x558D, 0x86B6, + 0x558E, 0x86B7, + 0x5590, 0x86B8, + 0x5592, 0x86B9, + 0x5593, 0x86BA, + 0x5595, 0x86BB, + 0x5596, 0x86BC, + 0x5597, 0x86BD, + 0x559A, 0x86BE, + 0x559B, 0x86BF, + 0x559E, 0x86C0, + 0x55A0, 0x86C1, + 0x55A1, 0x86C2, + 0x55A2, 0x86C3, + 0x55A3, 0x86C4, + 0x55A4, 0x86C5, + 0x55A5, 0x86C6, + 0x55A6, 0x86C7, + 0x55A8, 0x86C8, + 0x55A9, 0x86C9, + 0x55AA, 0x86CA, + 0x55AB, 0x86CB, + 0x55AC, 0x86CC, + 0x55AD, 0x86CD, + 0x55AE, 0x86CE, + 0x55AF, 0x86CF, + 0x55B0, 0x86D0, + 0x55B2, 0x86D1, + 0x55B4, 0x86D2, + 0x55B6, 0x86D3, + 0x55B8, 0x86D4, + 0x55BA, 0x86D5, + 0x55BC, 0x86D6, + 0x55BF, 0x86D7, + 0x55C0, 0x86D8, + 0x55C1, 0x86D9, + 0x55C2, 0x86DA, + 0x55C3, 0x86DB, + 0x55C6, 0x86DC, + 0x55C7, 0x86DD, + 0x55C8, 0x86DE, + 0x55CA, 0x86DF, + 0x55CB, 0x86E0, + 0x55CE, 0x86E1, + 0x55CF, 0x86E2, + 0x55D0, 0x86E3, + 0x55D5, 0x86E4, + 0x55D7, 0x86E5, + 0x55D8, 0x86E6, + 0x55D9, 0x86E7, + 0x55DA, 0x86E8, + 0x55DB, 0x86E9, + 0x55DE, 0x86EA, + 0x55E0, 0x86EB, + 0x55E2, 0x86EC, + 0x55E7, 0x86ED, + 0x55E9, 0x86EE, + 0x55ED, 0x86EF, + 0x55EE, 0x86F0, + 0x55F0, 0x86F1, + 0x55F1, 0x86F2, + 0x55F4, 0x86F3, + 0x55F6, 0x86F4, + 0x55F8, 0x86F5, + 0x55F9, 0x86F6, + 0x55FA, 0x86F7, + 0x55FB, 0x86F8, + 0x55FC, 0x86F9, + 0x55FF, 0x86FA, + 0x5602, 0x86FB, + 0x5603, 0x86FC, + 0x5604, 0x86FD, + 0x5605, 0x86FE, + 0x5606, 0x8740, + 0x5607, 0x8741, + 0x560A, 0x8742, + 0x560B, 0x8743, + 0x560D, 0x8744, + 0x5610, 0x8745, + 0x5611, 0x8746, + 0x5612, 0x8747, + 0x5613, 0x8748, + 0x5614, 0x8749, + 0x5615, 0x874A, + 0x5616, 0x874B, + 0x5617, 0x874C, + 0x5619, 0x874D, + 0x561A, 0x874E, + 0x561C, 0x874F, + 0x561D, 0x8750, + 0x5620, 0x8751, + 0x5621, 0x8752, + 0x5622, 0x8753, + 0x5625, 0x8754, + 0x5626, 0x8755, + 0x5628, 0x8756, + 0x5629, 0x8757, + 0x562A, 0x8758, + 0x562B, 0x8759, + 0x562E, 0x875A, + 0x562F, 0x875B, + 0x5630, 0x875C, + 0x5633, 0x875D, + 0x5635, 0x875E, + 0x5637, 0x875F, + 0x5638, 0x8760, + 0x563A, 0x8761, + 0x563C, 0x8762, + 0x563D, 0x8763, + 0x563E, 0x8764, + 0x5640, 0x8765, + 0x5641, 0x8766, + 0x5642, 0x8767, + 0x5643, 0x8768, + 0x5644, 0x8769, + 0x5645, 0x876A, + 0x5646, 0x876B, + 0x5647, 0x876C, + 0x5648, 0x876D, + 0x5649, 0x876E, + 0x564A, 0x876F, + 0x564B, 0x8770, + 0x564F, 0x8771, + 0x5650, 0x8772, + 0x5651, 0x8773, + 0x5652, 0x8774, + 0x5653, 0x8775, + 0x5655, 0x8776, + 0x5656, 0x8777, + 0x565A, 0x8778, + 0x565B, 0x8779, + 0x565D, 0x877A, + 0x565E, 0x877B, + 0x565F, 0x877C, + 0x5660, 0x877D, + 0x5661, 0x877E, + 0x5663, 0x8780, + 0x5665, 0x8781, + 0x5666, 0x8782, + 0x5667, 0x8783, + 0x566D, 0x8784, + 0x566E, 0x8785, + 0x566F, 0x8786, + 0x5670, 0x8787, + 0x5672, 0x8788, + 0x5673, 0x8789, + 0x5674, 0x878A, + 0x5675, 0x878B, + 0x5677, 0x878C, + 0x5678, 0x878D, + 0x5679, 0x878E, + 0x567A, 0x878F, + 0x567D, 0x8790, + 0x567E, 0x8791, + 0x567F, 0x8792, + 0x5680, 0x8793, + 0x5681, 0x8794, + 0x5682, 0x8795, + 0x5683, 0x8796, + 0x5684, 0x8797, + 0x5687, 0x8798, + 0x5688, 0x8799, + 0x5689, 0x879A, + 0x568A, 0x879B, + 0x568B, 0x879C, + 0x568C, 0x879D, + 0x568D, 0x879E, + 0x5690, 0x879F, + 0x5691, 0x87A0, + 0x5692, 0x87A1, + 0x5694, 0x87A2, + 0x5695, 0x87A3, + 0x5696, 0x87A4, + 0x5697, 0x87A5, + 0x5698, 0x87A6, + 0x5699, 0x87A7, + 0x569A, 0x87A8, + 0x569B, 0x87A9, + 0x569C, 0x87AA, + 0x569D, 0x87AB, + 0x569E, 0x87AC, + 0x569F, 0x87AD, + 0x56A0, 0x87AE, + 0x56A1, 0x87AF, + 0x56A2, 0x87B0, + 0x56A4, 0x87B1, + 0x56A5, 0x87B2, + 0x56A6, 0x87B3, + 0x56A7, 0x87B4, + 0x56A8, 0x87B5, + 0x56A9, 0x87B6, + 0x56AA, 0x87B7, + 0x56AB, 0x87B8, + 0x56AC, 0x87B9, + 0x56AD, 0x87BA, + 0x56AE, 0x87BB, + 0x56B0, 0x87BC, + 0x56B1, 0x87BD, + 0x56B2, 0x87BE, + 0x56B3, 0x87BF, + 0x56B4, 0x87C0, + 0x56B5, 0x87C1, + 0x56B6, 0x87C2, + 0x56B8, 0x87C3, + 0x56B9, 0x87C4, + 0x56BA, 0x87C5, + 0x56BB, 0x87C6, + 0x56BD, 0x87C7, + 0x56BE, 0x87C8, + 0x56BF, 0x87C9, + 0x56C0, 0x87CA, + 0x56C1, 0x87CB, + 0x56C2, 0x87CC, + 0x56C3, 0x87CD, + 0x56C4, 0x87CE, + 0x56C5, 0x87CF, + 0x56C6, 0x87D0, + 0x56C7, 0x87D1, + 0x56C8, 0x87D2, + 0x56C9, 0x87D3, + 0x56CB, 0x87D4, + 0x56CC, 0x87D5, + 0x56CD, 0x87D6, + 0x56CE, 0x87D7, + 0x56CF, 0x87D8, + 0x56D0, 0x87D9, + 0x56D1, 0x87DA, + 0x56D2, 0x87DB, + 0x56D3, 0x87DC, + 0x56D5, 0x87DD, + 0x56D6, 0x87DE, + 0x56D8, 0x87DF, + 0x56D9, 0x87E0, + 0x56DC, 0x87E1, + 0x56E3, 0x87E2, + 0x56E5, 0x87E3, + 0x56E6, 0x87E4, + 0x56E7, 0x87E5, + 0x56E8, 0x87E6, + 0x56E9, 0x87E7, + 0x56EA, 0x87E8, + 0x56EC, 0x87E9, + 0x56EE, 0x87EA, + 0x56EF, 0x87EB, + 0x56F2, 0x87EC, + 0x56F3, 0x87ED, + 0x56F6, 0x87EE, + 0x56F7, 0x87EF, + 0x56F8, 0x87F0, + 0x56FB, 0x87F1, + 0x56FC, 0x87F2, + 0x5700, 0x87F3, + 0x5701, 0x87F4, + 0x5702, 0x87F5, + 0x5705, 0x87F6, + 0x5707, 0x87F7, + 0x570B, 0x87F8, + 0x570C, 0x87F9, + 0x570D, 0x87FA, + 0x570E, 0x87FB, + 0x570F, 0x87FC, + 0x5710, 0x87FD, + 0x5711, 0x87FE, + 0x5712, 0x8840, + 0x5713, 0x8841, + 0x5714, 0x8842, + 0x5715, 0x8843, + 0x5716, 0x8844, + 0x5717, 0x8845, + 0x5718, 0x8846, + 0x5719, 0x8847, + 0x571A, 0x8848, + 0x571B, 0x8849, + 0x571D, 0x884A, + 0x571E, 0x884B, + 0x5720, 0x884C, + 0x5721, 0x884D, + 0x5722, 0x884E, + 0x5724, 0x884F, + 0x5725, 0x8850, + 0x5726, 0x8851, + 0x5727, 0x8852, + 0x572B, 0x8853, + 0x5731, 0x8854, + 0x5732, 0x8855, + 0x5734, 0x8856, + 0x5735, 0x8857, + 0x5736, 0x8858, + 0x5737, 0x8859, + 0x5738, 0x885A, + 0x573C, 0x885B, + 0x573D, 0x885C, + 0x573F, 0x885D, + 0x5741, 0x885E, + 0x5743, 0x885F, + 0x5744, 0x8860, + 0x5745, 0x8861, + 0x5746, 0x8862, + 0x5748, 0x8863, + 0x5749, 0x8864, + 0x574B, 0x8865, + 0x5752, 0x8866, + 0x5753, 0x8867, + 0x5754, 0x8868, + 0x5755, 0x8869, + 0x5756, 0x886A, + 0x5758, 0x886B, + 0x5759, 0x886C, + 0x5762, 0x886D, + 0x5763, 0x886E, + 0x5765, 0x886F, + 0x5767, 0x8870, + 0x576C, 0x8871, + 0x576E, 0x8872, + 0x5770, 0x8873, + 0x5771, 0x8874, + 0x5772, 0x8875, + 0x5774, 0x8876, + 0x5775, 0x8877, + 0x5778, 0x8878, + 0x5779, 0x8879, + 0x577A, 0x887A, + 0x577D, 0x887B, + 0x577E, 0x887C, + 0x577F, 0x887D, + 0x5780, 0x887E, + 0x5781, 0x8880, + 0x5787, 0x8881, + 0x5788, 0x8882, + 0x5789, 0x8883, + 0x578A, 0x8884, + 0x578D, 0x8885, + 0x578E, 0x8886, + 0x578F, 0x8887, + 0x5790, 0x8888, + 0x5791, 0x8889, + 0x5794, 0x888A, + 0x5795, 0x888B, + 0x5796, 0x888C, + 0x5797, 0x888D, + 0x5798, 0x888E, + 0x5799, 0x888F, + 0x579A, 0x8890, + 0x579C, 0x8891, + 0x579D, 0x8892, + 0x579E, 0x8893, + 0x579F, 0x8894, + 0x57A5, 0x8895, + 0x57A8, 0x8896, + 0x57AA, 0x8897, + 0x57AC, 0x8898, + 0x57AF, 0x8899, + 0x57B0, 0x889A, + 0x57B1, 0x889B, + 0x57B3, 0x889C, + 0x57B5, 0x889D, + 0x57B6, 0x889E, + 0x57B7, 0x889F, + 0x57B9, 0x88A0, + 0x57BA, 0x88A1, + 0x57BB, 0x88A2, + 0x57BC, 0x88A3, + 0x57BD, 0x88A4, + 0x57BE, 0x88A5, + 0x57BF, 0x88A6, + 0x57C0, 0x88A7, + 0x57C1, 0x88A8, + 0x57C4, 0x88A9, + 0x57C5, 0x88AA, + 0x57C6, 0x88AB, + 0x57C7, 0x88AC, + 0x57C8, 0x88AD, + 0x57C9, 0x88AE, + 0x57CA, 0x88AF, + 0x57CC, 0x88B0, + 0x57CD, 0x88B1, + 0x57D0, 0x88B2, + 0x57D1, 0x88B3, + 0x57D3, 0x88B4, + 0x57D6, 0x88B5, + 0x57D7, 0x88B6, + 0x57DB, 0x88B7, + 0x57DC, 0x88B8, + 0x57DE, 0x88B9, + 0x57E1, 0x88BA, + 0x57E2, 0x88BB, + 0x57E3, 0x88BC, + 0x57E5, 0x88BD, + 0x57E6, 0x88BE, + 0x57E7, 0x88BF, + 0x57E8, 0x88C0, + 0x57E9, 0x88C1, + 0x57EA, 0x88C2, + 0x57EB, 0x88C3, + 0x57EC, 0x88C4, + 0x57EE, 0x88C5, + 0x57F0, 0x88C6, + 0x57F1, 0x88C7, + 0x57F2, 0x88C8, + 0x57F3, 0x88C9, + 0x57F5, 0x88CA, + 0x57F6, 0x88CB, + 0x57F7, 0x88CC, + 0x57FB, 0x88CD, + 0x57FC, 0x88CE, + 0x57FE, 0x88CF, + 0x57FF, 0x88D0, + 0x5801, 0x88D1, + 0x5803, 0x88D2, + 0x5804, 0x88D3, + 0x5805, 0x88D4, + 0x5808, 0x88D5, + 0x5809, 0x88D6, + 0x580A, 0x88D7, + 0x580C, 0x88D8, + 0x580E, 0x88D9, + 0x580F, 0x88DA, + 0x5810, 0x88DB, + 0x5812, 0x88DC, + 0x5813, 0x88DD, + 0x5814, 0x88DE, + 0x5816, 0x88DF, + 0x5817, 0x88E0, + 0x5818, 0x88E1, + 0x581A, 0x88E2, + 0x581B, 0x88E3, + 0x581C, 0x88E4, + 0x581D, 0x88E5, + 0x581F, 0x88E6, + 0x5822, 0x88E7, + 0x5823, 0x88E8, + 0x5825, 0x88E9, + 0x5826, 0x88EA, + 0x5827, 0x88EB, + 0x5828, 0x88EC, + 0x5829, 0x88ED, + 0x582B, 0x88EE, + 0x582C, 0x88EF, + 0x582D, 0x88F0, + 0x582E, 0x88F1, + 0x582F, 0x88F2, + 0x5831, 0x88F3, + 0x5832, 0x88F4, + 0x5833, 0x88F5, + 0x5834, 0x88F6, + 0x5836, 0x88F7, + 0x5837, 0x88F8, + 0x5838, 0x88F9, + 0x5839, 0x88FA, + 0x583A, 0x88FB, + 0x583B, 0x88FC, + 0x583C, 0x88FD, + 0x583D, 0x88FE, + 0x583E, 0x8940, + 0x583F, 0x8941, + 0x5840, 0x8942, + 0x5841, 0x8943, + 0x5842, 0x8944, + 0x5843, 0x8945, + 0x5845, 0x8946, + 0x5846, 0x8947, + 0x5847, 0x8948, + 0x5848, 0x8949, + 0x5849, 0x894A, + 0x584A, 0x894B, + 0x584B, 0x894C, + 0x584E, 0x894D, + 0x584F, 0x894E, + 0x5850, 0x894F, + 0x5852, 0x8950, + 0x5853, 0x8951, + 0x5855, 0x8952, + 0x5856, 0x8953, + 0x5857, 0x8954, + 0x5859, 0x8955, + 0x585A, 0x8956, + 0x585B, 0x8957, + 0x585C, 0x8958, + 0x585D, 0x8959, + 0x585F, 0x895A, + 0x5860, 0x895B, + 0x5861, 0x895C, + 0x5862, 0x895D, + 0x5863, 0x895E, + 0x5864, 0x895F, + 0x5866, 0x8960, + 0x5867, 0x8961, + 0x5868, 0x8962, + 0x5869, 0x8963, + 0x586A, 0x8964, + 0x586D, 0x8965, + 0x586E, 0x8966, + 0x586F, 0x8967, + 0x5870, 0x8968, + 0x5871, 0x8969, + 0x5872, 0x896A, + 0x5873, 0x896B, + 0x5874, 0x896C, + 0x5875, 0x896D, + 0x5876, 0x896E, + 0x5877, 0x896F, + 0x5878, 0x8970, + 0x5879, 0x8971, + 0x587A, 0x8972, + 0x587B, 0x8973, + 0x587C, 0x8974, + 0x587D, 0x8975, + 0x587F, 0x8976, + 0x5882, 0x8977, + 0x5884, 0x8978, + 0x5886, 0x8979, + 0x5887, 0x897A, + 0x5888, 0x897B, + 0x588A, 0x897C, + 0x588B, 0x897D, + 0x588C, 0x897E, + 0x588D, 0x8980, + 0x588E, 0x8981, + 0x588F, 0x8982, + 0x5890, 0x8983, + 0x5891, 0x8984, + 0x5894, 0x8985, + 0x5895, 0x8986, + 0x5896, 0x8987, + 0x5897, 0x8988, + 0x5898, 0x8989, + 0x589B, 0x898A, + 0x589C, 0x898B, + 0x589D, 0x898C, + 0x58A0, 0x898D, + 0x58A1, 0x898E, + 0x58A2, 0x898F, + 0x58A3, 0x8990, + 0x58A4, 0x8991, + 0x58A5, 0x8992, + 0x58A6, 0x8993, + 0x58A7, 0x8994, + 0x58AA, 0x8995, + 0x58AB, 0x8996, + 0x58AC, 0x8997, + 0x58AD, 0x8998, + 0x58AE, 0x8999, + 0x58AF, 0x899A, + 0x58B0, 0x899B, + 0x58B1, 0x899C, + 0x58B2, 0x899D, + 0x58B3, 0x899E, + 0x58B4, 0x899F, + 0x58B5, 0x89A0, + 0x58B6, 0x89A1, + 0x58B7, 0x89A2, + 0x58B8, 0x89A3, + 0x58B9, 0x89A4, + 0x58BA, 0x89A5, + 0x58BB, 0x89A6, + 0x58BD, 0x89A7, + 0x58BE, 0x89A8, + 0x58BF, 0x89A9, + 0x58C0, 0x89AA, + 0x58C2, 0x89AB, + 0x58C3, 0x89AC, + 0x58C4, 0x89AD, + 0x58C6, 0x89AE, + 0x58C7, 0x89AF, + 0x58C8, 0x89B0, + 0x58C9, 0x89B1, + 0x58CA, 0x89B2, + 0x58CB, 0x89B3, + 0x58CC, 0x89B4, + 0x58CD, 0x89B5, + 0x58CE, 0x89B6, + 0x58CF, 0x89B7, + 0x58D0, 0x89B8, + 0x58D2, 0x89B9, + 0x58D3, 0x89BA, + 0x58D4, 0x89BB, + 0x58D6, 0x89BC, + 0x58D7, 0x89BD, + 0x58D8, 0x89BE, + 0x58D9, 0x89BF, + 0x58DA, 0x89C0, + 0x58DB, 0x89C1, + 0x58DC, 0x89C2, + 0x58DD, 0x89C3, + 0x58DE, 0x89C4, + 0x58DF, 0x89C5, + 0x58E0, 0x89C6, + 0x58E1, 0x89C7, + 0x58E2, 0x89C8, + 0x58E3, 0x89C9, + 0x58E5, 0x89CA, + 0x58E6, 0x89CB, + 0x58E7, 0x89CC, + 0x58E8, 0x89CD, + 0x58E9, 0x89CE, + 0x58EA, 0x89CF, + 0x58ED, 0x89D0, + 0x58EF, 0x89D1, + 0x58F1, 0x89D2, + 0x58F2, 0x89D3, + 0x58F4, 0x89D4, + 0x58F5, 0x89D5, + 0x58F7, 0x89D6, + 0x58F8, 0x89D7, + 0x58FA, 0x89D8, + 0x58FB, 0x89D9, + 0x58FC, 0x89DA, + 0x58FD, 0x89DB, + 0x58FE, 0x89DC, + 0x58FF, 0x89DD, + 0x5900, 0x89DE, + 0x5901, 0x89DF, + 0x5903, 0x89E0, + 0x5905, 0x89E1, + 0x5906, 0x89E2, + 0x5908, 0x89E3, + 0x5909, 0x89E4, + 0x590A, 0x89E5, + 0x590B, 0x89E6, + 0x590C, 0x89E7, + 0x590E, 0x89E8, + 0x5910, 0x89E9, + 0x5911, 0x89EA, + 0x5912, 0x89EB, + 0x5913, 0x89EC, + 0x5917, 0x89ED, + 0x5918, 0x89EE, + 0x591B, 0x89EF, + 0x591D, 0x89F0, + 0x591E, 0x89F1, + 0x5920, 0x89F2, + 0x5921, 0x89F3, + 0x5922, 0x89F4, + 0x5923, 0x89F5, + 0x5926, 0x89F6, + 0x5928, 0x89F7, + 0x592C, 0x89F8, + 0x5930, 0x89F9, + 0x5932, 0x89FA, + 0x5933, 0x89FB, + 0x5935, 0x89FC, + 0x5936, 0x89FD, + 0x593B, 0x89FE, + 0x593D, 0x8A40, + 0x593E, 0x8A41, + 0x593F, 0x8A42, + 0x5940, 0x8A43, + 0x5943, 0x8A44, + 0x5945, 0x8A45, + 0x5946, 0x8A46, + 0x594A, 0x8A47, + 0x594C, 0x8A48, + 0x594D, 0x8A49, + 0x5950, 0x8A4A, + 0x5952, 0x8A4B, + 0x5953, 0x8A4C, + 0x5959, 0x8A4D, + 0x595B, 0x8A4E, + 0x595C, 0x8A4F, + 0x595D, 0x8A50, + 0x595E, 0x8A51, + 0x595F, 0x8A52, + 0x5961, 0x8A53, + 0x5963, 0x8A54, + 0x5964, 0x8A55, + 0x5966, 0x8A56, + 0x5967, 0x8A57, + 0x5968, 0x8A58, + 0x5969, 0x8A59, + 0x596A, 0x8A5A, + 0x596B, 0x8A5B, + 0x596C, 0x8A5C, + 0x596D, 0x8A5D, + 0x596E, 0x8A5E, + 0x596F, 0x8A5F, + 0x5970, 0x8A60, + 0x5971, 0x8A61, + 0x5972, 0x8A62, + 0x5975, 0x8A63, + 0x5977, 0x8A64, + 0x597A, 0x8A65, + 0x597B, 0x8A66, + 0x597C, 0x8A67, + 0x597E, 0x8A68, + 0x597F, 0x8A69, + 0x5980, 0x8A6A, + 0x5985, 0x8A6B, + 0x5989, 0x8A6C, + 0x598B, 0x8A6D, + 0x598C, 0x8A6E, + 0x598E, 0x8A6F, + 0x598F, 0x8A70, + 0x5990, 0x8A71, + 0x5991, 0x8A72, + 0x5994, 0x8A73, + 0x5995, 0x8A74, + 0x5998, 0x8A75, + 0x599A, 0x8A76, + 0x599B, 0x8A77, + 0x599C, 0x8A78, + 0x599D, 0x8A79, + 0x599F, 0x8A7A, + 0x59A0, 0x8A7B, + 0x59A1, 0x8A7C, + 0x59A2, 0x8A7D, + 0x59A6, 0x8A7E, + 0x59A7, 0x8A80, + 0x59AC, 0x8A81, + 0x59AD, 0x8A82, + 0x59B0, 0x8A83, + 0x59B1, 0x8A84, + 0x59B3, 0x8A85, + 0x59B4, 0x8A86, + 0x59B5, 0x8A87, + 0x59B6, 0x8A88, + 0x59B7, 0x8A89, + 0x59B8, 0x8A8A, + 0x59BA, 0x8A8B, + 0x59BC, 0x8A8C, + 0x59BD, 0x8A8D, + 0x59BF, 0x8A8E, + 0x59C0, 0x8A8F, + 0x59C1, 0x8A90, + 0x59C2, 0x8A91, + 0x59C3, 0x8A92, + 0x59C4, 0x8A93, + 0x59C5, 0x8A94, + 0x59C7, 0x8A95, + 0x59C8, 0x8A96, + 0x59C9, 0x8A97, + 0x59CC, 0x8A98, + 0x59CD, 0x8A99, + 0x59CE, 0x8A9A, + 0x59CF, 0x8A9B, + 0x59D5, 0x8A9C, + 0x59D6, 0x8A9D, + 0x59D9, 0x8A9E, + 0x59DB, 0x8A9F, + 0x59DE, 0x8AA0, + 0x59DF, 0x8AA1, + 0x59E0, 0x8AA2, + 0x59E1, 0x8AA3, + 0x59E2, 0x8AA4, + 0x59E4, 0x8AA5, + 0x59E6, 0x8AA6, + 0x59E7, 0x8AA7, + 0x59E9, 0x8AA8, + 0x59EA, 0x8AA9, + 0x59EB, 0x8AAA, + 0x59ED, 0x8AAB, + 0x59EE, 0x8AAC, + 0x59EF, 0x8AAD, + 0x59F0, 0x8AAE, + 0x59F1, 0x8AAF, + 0x59F2, 0x8AB0, + 0x59F3, 0x8AB1, + 0x59F4, 0x8AB2, + 0x59F5, 0x8AB3, + 0x59F6, 0x8AB4, + 0x59F7, 0x8AB5, + 0x59F8, 0x8AB6, + 0x59FA, 0x8AB7, + 0x59FC, 0x8AB8, + 0x59FD, 0x8AB9, + 0x59FE, 0x8ABA, + 0x5A00, 0x8ABB, + 0x5A02, 0x8ABC, + 0x5A0A, 0x8ABD, + 0x5A0B, 0x8ABE, + 0x5A0D, 0x8ABF, + 0x5A0E, 0x8AC0, + 0x5A0F, 0x8AC1, + 0x5A10, 0x8AC2, + 0x5A12, 0x8AC3, + 0x5A14, 0x8AC4, + 0x5A15, 0x8AC5, + 0x5A16, 0x8AC6, + 0x5A17, 0x8AC7, + 0x5A19, 0x8AC8, + 0x5A1A, 0x8AC9, + 0x5A1B, 0x8ACA, + 0x5A1D, 0x8ACB, + 0x5A1E, 0x8ACC, + 0x5A21, 0x8ACD, + 0x5A22, 0x8ACE, + 0x5A24, 0x8ACF, + 0x5A26, 0x8AD0, + 0x5A27, 0x8AD1, + 0x5A28, 0x8AD2, + 0x5A2A, 0x8AD3, + 0x5A2B, 0x8AD4, + 0x5A2C, 0x8AD5, + 0x5A2D, 0x8AD6, + 0x5A2E, 0x8AD7, + 0x5A2F, 0x8AD8, + 0x5A30, 0x8AD9, + 0x5A33, 0x8ADA, + 0x5A35, 0x8ADB, + 0x5A37, 0x8ADC, + 0x5A38, 0x8ADD, + 0x5A39, 0x8ADE, + 0x5A3A, 0x8ADF, + 0x5A3B, 0x8AE0, + 0x5A3D, 0x8AE1, + 0x5A3E, 0x8AE2, + 0x5A3F, 0x8AE3, + 0x5A41, 0x8AE4, + 0x5A42, 0x8AE5, + 0x5A43, 0x8AE6, + 0x5A44, 0x8AE7, + 0x5A45, 0x8AE8, + 0x5A47, 0x8AE9, + 0x5A48, 0x8AEA, + 0x5A4B, 0x8AEB, + 0x5A4C, 0x8AEC, + 0x5A4D, 0x8AED, + 0x5A4E, 0x8AEE, + 0x5A4F, 0x8AEF, + 0x5A50, 0x8AF0, + 0x5A51, 0x8AF1, + 0x5A52, 0x8AF2, + 0x5A53, 0x8AF3, + 0x5A54, 0x8AF4, + 0x5A56, 0x8AF5, + 0x5A57, 0x8AF6, + 0x5A58, 0x8AF7, + 0x5A59, 0x8AF8, + 0x5A5B, 0x8AF9, + 0x5A5C, 0x8AFA, + 0x5A5D, 0x8AFB, + 0x5A5E, 0x8AFC, + 0x5A5F, 0x8AFD, + 0x5A60, 0x8AFE, + 0x5A61, 0x8B40, + 0x5A63, 0x8B41, + 0x5A64, 0x8B42, + 0x5A65, 0x8B43, + 0x5A66, 0x8B44, + 0x5A68, 0x8B45, + 0x5A69, 0x8B46, + 0x5A6B, 0x8B47, + 0x5A6C, 0x8B48, + 0x5A6D, 0x8B49, + 0x5A6E, 0x8B4A, + 0x5A6F, 0x8B4B, + 0x5A70, 0x8B4C, + 0x5A71, 0x8B4D, + 0x5A72, 0x8B4E, + 0x5A73, 0x8B4F, + 0x5A78, 0x8B50, + 0x5A79, 0x8B51, + 0x5A7B, 0x8B52, + 0x5A7C, 0x8B53, + 0x5A7D, 0x8B54, + 0x5A7E, 0x8B55, + 0x5A80, 0x8B56, + 0x5A81, 0x8B57, + 0x5A82, 0x8B58, + 0x5A83, 0x8B59, + 0x5A84, 0x8B5A, + 0x5A85, 0x8B5B, + 0x5A86, 0x8B5C, + 0x5A87, 0x8B5D, + 0x5A88, 0x8B5E, + 0x5A89, 0x8B5F, + 0x5A8A, 0x8B60, + 0x5A8B, 0x8B61, + 0x5A8C, 0x8B62, + 0x5A8D, 0x8B63, + 0x5A8E, 0x8B64, + 0x5A8F, 0x8B65, + 0x5A90, 0x8B66, + 0x5A91, 0x8B67, + 0x5A93, 0x8B68, + 0x5A94, 0x8B69, + 0x5A95, 0x8B6A, + 0x5A96, 0x8B6B, + 0x5A97, 0x8B6C, + 0x5A98, 0x8B6D, + 0x5A99, 0x8B6E, + 0x5A9C, 0x8B6F, + 0x5A9D, 0x8B70, + 0x5A9E, 0x8B71, + 0x5A9F, 0x8B72, + 0x5AA0, 0x8B73, + 0x5AA1, 0x8B74, + 0x5AA2, 0x8B75, + 0x5AA3, 0x8B76, + 0x5AA4, 0x8B77, + 0x5AA5, 0x8B78, + 0x5AA6, 0x8B79, + 0x5AA7, 0x8B7A, + 0x5AA8, 0x8B7B, + 0x5AA9, 0x8B7C, + 0x5AAB, 0x8B7D, + 0x5AAC, 0x8B7E, + 0x5AAD, 0x8B80, + 0x5AAE, 0x8B81, + 0x5AAF, 0x8B82, + 0x5AB0, 0x8B83, + 0x5AB1, 0x8B84, + 0x5AB4, 0x8B85, + 0x5AB6, 0x8B86, + 0x5AB7, 0x8B87, + 0x5AB9, 0x8B88, + 0x5ABA, 0x8B89, + 0x5ABB, 0x8B8A, + 0x5ABC, 0x8B8B, + 0x5ABD, 0x8B8C, + 0x5ABF, 0x8B8D, + 0x5AC0, 0x8B8E, + 0x5AC3, 0x8B8F, + 0x5AC4, 0x8B90, + 0x5AC5, 0x8B91, + 0x5AC6, 0x8B92, + 0x5AC7, 0x8B93, + 0x5AC8, 0x8B94, + 0x5ACA, 0x8B95, + 0x5ACB, 0x8B96, + 0x5ACD, 0x8B97, + 0x5ACE, 0x8B98, + 0x5ACF, 0x8B99, + 0x5AD0, 0x8B9A, + 0x5AD1, 0x8B9B, + 0x5AD3, 0x8B9C, + 0x5AD5, 0x8B9D, + 0x5AD7, 0x8B9E, + 0x5AD9, 0x8B9F, + 0x5ADA, 0x8BA0, + 0x5ADB, 0x8BA1, + 0x5ADD, 0x8BA2, + 0x5ADE, 0x8BA3, + 0x5ADF, 0x8BA4, + 0x5AE2, 0x8BA5, + 0x5AE4, 0x8BA6, + 0x5AE5, 0x8BA7, + 0x5AE7, 0x8BA8, + 0x5AE8, 0x8BA9, + 0x5AEA, 0x8BAA, + 0x5AEC, 0x8BAB, + 0x5AED, 0x8BAC, + 0x5AEE, 0x8BAD, + 0x5AEF, 0x8BAE, + 0x5AF0, 0x8BAF, + 0x5AF2, 0x8BB0, + 0x5AF3, 0x8BB1, + 0x5AF4, 0x8BB2, + 0x5AF5, 0x8BB3, + 0x5AF6, 0x8BB4, + 0x5AF7, 0x8BB5, + 0x5AF8, 0x8BB6, + 0x5AF9, 0x8BB7, + 0x5AFA, 0x8BB8, + 0x5AFB, 0x8BB9, + 0x5AFC, 0x8BBA, + 0x5AFD, 0x8BBB, + 0x5AFE, 0x8BBC, + 0x5AFF, 0x8BBD, + 0x5B00, 0x8BBE, + 0x5B01, 0x8BBF, + 0x5B02, 0x8BC0, + 0x5B03, 0x8BC1, + 0x5B04, 0x8BC2, + 0x5B05, 0x8BC3, + 0x5B06, 0x8BC4, + 0x5B07, 0x8BC5, + 0x5B08, 0x8BC6, + 0x5B0A, 0x8BC7, + 0x5B0B, 0x8BC8, + 0x5B0C, 0x8BC9, + 0x5B0D, 0x8BCA, + 0x5B0E, 0x8BCB, + 0x5B0F, 0x8BCC, + 0x5B10, 0x8BCD, + 0x5B11, 0x8BCE, + 0x5B12, 0x8BCF, + 0x5B13, 0x8BD0, + 0x5B14, 0x8BD1, + 0x5B15, 0x8BD2, + 0x5B18, 0x8BD3, + 0x5B19, 0x8BD4, + 0x5B1A, 0x8BD5, + 0x5B1B, 0x8BD6, + 0x5B1C, 0x8BD7, + 0x5B1D, 0x8BD8, + 0x5B1E, 0x8BD9, + 0x5B1F, 0x8BDA, + 0x5B20, 0x8BDB, + 0x5B21, 0x8BDC, + 0x5B22, 0x8BDD, + 0x5B23, 0x8BDE, + 0x5B24, 0x8BDF, + 0x5B25, 0x8BE0, + 0x5B26, 0x8BE1, + 0x5B27, 0x8BE2, + 0x5B28, 0x8BE3, + 0x5B29, 0x8BE4, + 0x5B2A, 0x8BE5, + 0x5B2B, 0x8BE6, + 0x5B2C, 0x8BE7, + 0x5B2D, 0x8BE8, + 0x5B2E, 0x8BE9, + 0x5B2F, 0x8BEA, + 0x5B30, 0x8BEB, + 0x5B31, 0x8BEC, + 0x5B33, 0x8BED, + 0x5B35, 0x8BEE, + 0x5B36, 0x8BEF, + 0x5B38, 0x8BF0, + 0x5B39, 0x8BF1, + 0x5B3A, 0x8BF2, + 0x5B3B, 0x8BF3, + 0x5B3C, 0x8BF4, + 0x5B3D, 0x8BF5, + 0x5B3E, 0x8BF6, + 0x5B3F, 0x8BF7, + 0x5B41, 0x8BF8, + 0x5B42, 0x8BF9, + 0x5B43, 0x8BFA, + 0x5B44, 0x8BFB, + 0x5B45, 0x8BFC, + 0x5B46, 0x8BFD, + 0x5B47, 0x8BFE, + 0x5B48, 0x8C40, + 0x5B49, 0x8C41, + 0x5B4A, 0x8C42, + 0x5B4B, 0x8C43, + 0x5B4C, 0x8C44, + 0x5B4D, 0x8C45, + 0x5B4E, 0x8C46, + 0x5B4F, 0x8C47, + 0x5B52, 0x8C48, + 0x5B56, 0x8C49, + 0x5B5E, 0x8C4A, + 0x5B60, 0x8C4B, + 0x5B61, 0x8C4C, + 0x5B67, 0x8C4D, + 0x5B68, 0x8C4E, + 0x5B6B, 0x8C4F, + 0x5B6D, 0x8C50, + 0x5B6E, 0x8C51, + 0x5B6F, 0x8C52, + 0x5B72, 0x8C53, + 0x5B74, 0x8C54, + 0x5B76, 0x8C55, + 0x5B77, 0x8C56, + 0x5B78, 0x8C57, + 0x5B79, 0x8C58, + 0x5B7B, 0x8C59, + 0x5B7C, 0x8C5A, + 0x5B7E, 0x8C5B, + 0x5B7F, 0x8C5C, + 0x5B82, 0x8C5D, + 0x5B86, 0x8C5E, + 0x5B8A, 0x8C5F, + 0x5B8D, 0x8C60, + 0x5B8E, 0x8C61, + 0x5B90, 0x8C62, + 0x5B91, 0x8C63, + 0x5B92, 0x8C64, + 0x5B94, 0x8C65, + 0x5B96, 0x8C66, + 0x5B9F, 0x8C67, + 0x5BA7, 0x8C68, + 0x5BA8, 0x8C69, + 0x5BA9, 0x8C6A, + 0x5BAC, 0x8C6B, + 0x5BAD, 0x8C6C, + 0x5BAE, 0x8C6D, + 0x5BAF, 0x8C6E, + 0x5BB1, 0x8C6F, + 0x5BB2, 0x8C70, + 0x5BB7, 0x8C71, + 0x5BBA, 0x8C72, + 0x5BBB, 0x8C73, + 0x5BBC, 0x8C74, + 0x5BC0, 0x8C75, + 0x5BC1, 0x8C76, + 0x5BC3, 0x8C77, + 0x5BC8, 0x8C78, + 0x5BC9, 0x8C79, + 0x5BCA, 0x8C7A, + 0x5BCB, 0x8C7B, + 0x5BCD, 0x8C7C, + 0x5BCE, 0x8C7D, + 0x5BCF, 0x8C7E, + 0x5BD1, 0x8C80, + 0x5BD4, 0x8C81, + 0x5BD5, 0x8C82, + 0x5BD6, 0x8C83, + 0x5BD7, 0x8C84, + 0x5BD8, 0x8C85, + 0x5BD9, 0x8C86, + 0x5BDA, 0x8C87, + 0x5BDB, 0x8C88, + 0x5BDC, 0x8C89, + 0x5BE0, 0x8C8A, + 0x5BE2, 0x8C8B, + 0x5BE3, 0x8C8C, + 0x5BE6, 0x8C8D, + 0x5BE7, 0x8C8E, + 0x5BE9, 0x8C8F, + 0x5BEA, 0x8C90, + 0x5BEB, 0x8C91, + 0x5BEC, 0x8C92, + 0x5BED, 0x8C93, + 0x5BEF, 0x8C94, + 0x5BF1, 0x8C95, + 0x5BF2, 0x8C96, + 0x5BF3, 0x8C97, + 0x5BF4, 0x8C98, + 0x5BF5, 0x8C99, + 0x5BF6, 0x8C9A, + 0x5BF7, 0x8C9B, + 0x5BFD, 0x8C9C, + 0x5BFE, 0x8C9D, + 0x5C00, 0x8C9E, + 0x5C02, 0x8C9F, + 0x5C03, 0x8CA0, + 0x5C05, 0x8CA1, + 0x5C07, 0x8CA2, + 0x5C08, 0x8CA3, + 0x5C0B, 0x8CA4, + 0x5C0C, 0x8CA5, + 0x5C0D, 0x8CA6, + 0x5C0E, 0x8CA7, + 0x5C10, 0x8CA8, + 0x5C12, 0x8CA9, + 0x5C13, 0x8CAA, + 0x5C17, 0x8CAB, + 0x5C19, 0x8CAC, + 0x5C1B, 0x8CAD, + 0x5C1E, 0x8CAE, + 0x5C1F, 0x8CAF, + 0x5C20, 0x8CB0, + 0x5C21, 0x8CB1, + 0x5C23, 0x8CB2, + 0x5C26, 0x8CB3, + 0x5C28, 0x8CB4, + 0x5C29, 0x8CB5, + 0x5C2A, 0x8CB6, + 0x5C2B, 0x8CB7, + 0x5C2D, 0x8CB8, + 0x5C2E, 0x8CB9, + 0x5C2F, 0x8CBA, + 0x5C30, 0x8CBB, + 0x5C32, 0x8CBC, + 0x5C33, 0x8CBD, + 0x5C35, 0x8CBE, + 0x5C36, 0x8CBF, + 0x5C37, 0x8CC0, + 0x5C43, 0x8CC1, + 0x5C44, 0x8CC2, + 0x5C46, 0x8CC3, + 0x5C47, 0x8CC4, + 0x5C4C, 0x8CC5, + 0x5C4D, 0x8CC6, + 0x5C52, 0x8CC7, + 0x5C53, 0x8CC8, + 0x5C54, 0x8CC9, + 0x5C56, 0x8CCA, + 0x5C57, 0x8CCB, + 0x5C58, 0x8CCC, + 0x5C5A, 0x8CCD, + 0x5C5B, 0x8CCE, + 0x5C5C, 0x8CCF, + 0x5C5D, 0x8CD0, + 0x5C5F, 0x8CD1, + 0x5C62, 0x8CD2, + 0x5C64, 0x8CD3, + 0x5C67, 0x8CD4, + 0x5C68, 0x8CD5, + 0x5C69, 0x8CD6, + 0x5C6A, 0x8CD7, + 0x5C6B, 0x8CD8, + 0x5C6C, 0x8CD9, + 0x5C6D, 0x8CDA, + 0x5C70, 0x8CDB, + 0x5C72, 0x8CDC, + 0x5C73, 0x8CDD, + 0x5C74, 0x8CDE, + 0x5C75, 0x8CDF, + 0x5C76, 0x8CE0, + 0x5C77, 0x8CE1, + 0x5C78, 0x8CE2, + 0x5C7B, 0x8CE3, + 0x5C7C, 0x8CE4, + 0x5C7D, 0x8CE5, + 0x5C7E, 0x8CE6, + 0x5C80, 0x8CE7, + 0x5C83, 0x8CE8, + 0x5C84, 0x8CE9, + 0x5C85, 0x8CEA, + 0x5C86, 0x8CEB, + 0x5C87, 0x8CEC, + 0x5C89, 0x8CED, + 0x5C8A, 0x8CEE, + 0x5C8B, 0x8CEF, + 0x5C8E, 0x8CF0, + 0x5C8F, 0x8CF1, + 0x5C92, 0x8CF2, + 0x5C93, 0x8CF3, + 0x5C95, 0x8CF4, + 0x5C9D, 0x8CF5, + 0x5C9E, 0x8CF6, + 0x5C9F, 0x8CF7, + 0x5CA0, 0x8CF8, + 0x5CA1, 0x8CF9, + 0x5CA4, 0x8CFA, + 0x5CA5, 0x8CFB, + 0x5CA6, 0x8CFC, + 0x5CA7, 0x8CFD, + 0x5CA8, 0x8CFE, + 0x5CAA, 0x8D40, + 0x5CAE, 0x8D41, + 0x5CAF, 0x8D42, + 0x5CB0, 0x8D43, + 0x5CB2, 0x8D44, + 0x5CB4, 0x8D45, + 0x5CB6, 0x8D46, + 0x5CB9, 0x8D47, + 0x5CBA, 0x8D48, + 0x5CBB, 0x8D49, + 0x5CBC, 0x8D4A, + 0x5CBE, 0x8D4B, + 0x5CC0, 0x8D4C, + 0x5CC2, 0x8D4D, + 0x5CC3, 0x8D4E, + 0x5CC5, 0x8D4F, + 0x5CC6, 0x8D50, + 0x5CC7, 0x8D51, + 0x5CC8, 0x8D52, + 0x5CC9, 0x8D53, + 0x5CCA, 0x8D54, + 0x5CCC, 0x8D55, + 0x5CCD, 0x8D56, + 0x5CCE, 0x8D57, + 0x5CCF, 0x8D58, + 0x5CD0, 0x8D59, + 0x5CD1, 0x8D5A, + 0x5CD3, 0x8D5B, + 0x5CD4, 0x8D5C, + 0x5CD5, 0x8D5D, + 0x5CD6, 0x8D5E, + 0x5CD7, 0x8D5F, + 0x5CD8, 0x8D60, + 0x5CDA, 0x8D61, + 0x5CDB, 0x8D62, + 0x5CDC, 0x8D63, + 0x5CDD, 0x8D64, + 0x5CDE, 0x8D65, + 0x5CDF, 0x8D66, + 0x5CE0, 0x8D67, + 0x5CE2, 0x8D68, + 0x5CE3, 0x8D69, + 0x5CE7, 0x8D6A, + 0x5CE9, 0x8D6B, + 0x5CEB, 0x8D6C, + 0x5CEC, 0x8D6D, + 0x5CEE, 0x8D6E, + 0x5CEF, 0x8D6F, + 0x5CF1, 0x8D70, + 0x5CF2, 0x8D71, + 0x5CF3, 0x8D72, + 0x5CF4, 0x8D73, + 0x5CF5, 0x8D74, + 0x5CF6, 0x8D75, + 0x5CF7, 0x8D76, + 0x5CF8, 0x8D77, + 0x5CF9, 0x8D78, + 0x5CFA, 0x8D79, + 0x5CFC, 0x8D7A, + 0x5CFD, 0x8D7B, + 0x5CFE, 0x8D7C, + 0x5CFF, 0x8D7D, + 0x5D00, 0x8D7E, + 0x5D01, 0x8D80, + 0x5D04, 0x8D81, + 0x5D05, 0x8D82, + 0x5D08, 0x8D83, + 0x5D09, 0x8D84, + 0x5D0A, 0x8D85, + 0x5D0B, 0x8D86, + 0x5D0C, 0x8D87, + 0x5D0D, 0x8D88, + 0x5D0F, 0x8D89, + 0x5D10, 0x8D8A, + 0x5D11, 0x8D8B, + 0x5D12, 0x8D8C, + 0x5D13, 0x8D8D, + 0x5D15, 0x8D8E, + 0x5D17, 0x8D8F, + 0x5D18, 0x8D90, + 0x5D19, 0x8D91, + 0x5D1A, 0x8D92, + 0x5D1C, 0x8D93, + 0x5D1D, 0x8D94, + 0x5D1F, 0x8D95, + 0x5D20, 0x8D96, + 0x5D21, 0x8D97, + 0x5D22, 0x8D98, + 0x5D23, 0x8D99, + 0x5D25, 0x8D9A, + 0x5D28, 0x8D9B, + 0x5D2A, 0x8D9C, + 0x5D2B, 0x8D9D, + 0x5D2C, 0x8D9E, + 0x5D2F, 0x8D9F, + 0x5D30, 0x8DA0, + 0x5D31, 0x8DA1, + 0x5D32, 0x8DA2, + 0x5D33, 0x8DA3, + 0x5D35, 0x8DA4, + 0x5D36, 0x8DA5, + 0x5D37, 0x8DA6, + 0x5D38, 0x8DA7, + 0x5D39, 0x8DA8, + 0x5D3A, 0x8DA9, + 0x5D3B, 0x8DAA, + 0x5D3C, 0x8DAB, + 0x5D3F, 0x8DAC, + 0x5D40, 0x8DAD, + 0x5D41, 0x8DAE, + 0x5D42, 0x8DAF, + 0x5D43, 0x8DB0, + 0x5D44, 0x8DB1, + 0x5D45, 0x8DB2, + 0x5D46, 0x8DB3, + 0x5D48, 0x8DB4, + 0x5D49, 0x8DB5, + 0x5D4D, 0x8DB6, + 0x5D4E, 0x8DB7, + 0x5D4F, 0x8DB8, + 0x5D50, 0x8DB9, + 0x5D51, 0x8DBA, + 0x5D52, 0x8DBB, + 0x5D53, 0x8DBC, + 0x5D54, 0x8DBD, + 0x5D55, 0x8DBE, + 0x5D56, 0x8DBF, + 0x5D57, 0x8DC0, + 0x5D59, 0x8DC1, + 0x5D5A, 0x8DC2, + 0x5D5C, 0x8DC3, + 0x5D5E, 0x8DC4, + 0x5D5F, 0x8DC5, + 0x5D60, 0x8DC6, + 0x5D61, 0x8DC7, + 0x5D62, 0x8DC8, + 0x5D63, 0x8DC9, + 0x5D64, 0x8DCA, + 0x5D65, 0x8DCB, + 0x5D66, 0x8DCC, + 0x5D67, 0x8DCD, + 0x5D68, 0x8DCE, + 0x5D6A, 0x8DCF, + 0x5D6D, 0x8DD0, + 0x5D6E, 0x8DD1, + 0x5D70, 0x8DD2, + 0x5D71, 0x8DD3, + 0x5D72, 0x8DD4, + 0x5D73, 0x8DD5, + 0x5D75, 0x8DD6, + 0x5D76, 0x8DD7, + 0x5D77, 0x8DD8, + 0x5D78, 0x8DD9, + 0x5D79, 0x8DDA, + 0x5D7A, 0x8DDB, + 0x5D7B, 0x8DDC, + 0x5D7C, 0x8DDD, + 0x5D7D, 0x8DDE, + 0x5D7E, 0x8DDF, + 0x5D7F, 0x8DE0, + 0x5D80, 0x8DE1, + 0x5D81, 0x8DE2, + 0x5D83, 0x8DE3, + 0x5D84, 0x8DE4, + 0x5D85, 0x8DE5, + 0x5D86, 0x8DE6, + 0x5D87, 0x8DE7, + 0x5D88, 0x8DE8, + 0x5D89, 0x8DE9, + 0x5D8A, 0x8DEA, + 0x5D8B, 0x8DEB, + 0x5D8C, 0x8DEC, + 0x5D8D, 0x8DED, + 0x5D8E, 0x8DEE, + 0x5D8F, 0x8DEF, + 0x5D90, 0x8DF0, + 0x5D91, 0x8DF1, + 0x5D92, 0x8DF2, + 0x5D93, 0x8DF3, + 0x5D94, 0x8DF4, + 0x5D95, 0x8DF5, + 0x5D96, 0x8DF6, + 0x5D97, 0x8DF7, + 0x5D98, 0x8DF8, + 0x5D9A, 0x8DF9, + 0x5D9B, 0x8DFA, + 0x5D9C, 0x8DFB, + 0x5D9E, 0x8DFC, + 0x5D9F, 0x8DFD, + 0x5DA0, 0x8DFE, + 0x5DA1, 0x8E40, + 0x5DA2, 0x8E41, + 0x5DA3, 0x8E42, + 0x5DA4, 0x8E43, + 0x5DA5, 0x8E44, + 0x5DA6, 0x8E45, + 0x5DA7, 0x8E46, + 0x5DA8, 0x8E47, + 0x5DA9, 0x8E48, + 0x5DAA, 0x8E49, + 0x5DAB, 0x8E4A, + 0x5DAC, 0x8E4B, + 0x5DAD, 0x8E4C, + 0x5DAE, 0x8E4D, + 0x5DAF, 0x8E4E, + 0x5DB0, 0x8E4F, + 0x5DB1, 0x8E50, + 0x5DB2, 0x8E51, + 0x5DB3, 0x8E52, + 0x5DB4, 0x8E53, + 0x5DB5, 0x8E54, + 0x5DB6, 0x8E55, + 0x5DB8, 0x8E56, + 0x5DB9, 0x8E57, + 0x5DBA, 0x8E58, + 0x5DBB, 0x8E59, + 0x5DBC, 0x8E5A, + 0x5DBD, 0x8E5B, + 0x5DBE, 0x8E5C, + 0x5DBF, 0x8E5D, + 0x5DC0, 0x8E5E, + 0x5DC1, 0x8E5F, + 0x5DC2, 0x8E60, + 0x5DC3, 0x8E61, + 0x5DC4, 0x8E62, + 0x5DC6, 0x8E63, + 0x5DC7, 0x8E64, + 0x5DC8, 0x8E65, + 0x5DC9, 0x8E66, + 0x5DCA, 0x8E67, + 0x5DCB, 0x8E68, + 0x5DCC, 0x8E69, + 0x5DCE, 0x8E6A, + 0x5DCF, 0x8E6B, + 0x5DD0, 0x8E6C, + 0x5DD1, 0x8E6D, + 0x5DD2, 0x8E6E, + 0x5DD3, 0x8E6F, + 0x5DD4, 0x8E70, + 0x5DD5, 0x8E71, + 0x5DD6, 0x8E72, + 0x5DD7, 0x8E73, + 0x5DD8, 0x8E74, + 0x5DD9, 0x8E75, + 0x5DDA, 0x8E76, + 0x5DDC, 0x8E77, + 0x5DDF, 0x8E78, + 0x5DE0, 0x8E79, + 0x5DE3, 0x8E7A, + 0x5DE4, 0x8E7B, + 0x5DEA, 0x8E7C, + 0x5DEC, 0x8E7D, + 0x5DED, 0x8E7E, + 0x5DF0, 0x8E80, + 0x5DF5, 0x8E81, + 0x5DF6, 0x8E82, + 0x5DF8, 0x8E83, + 0x5DF9, 0x8E84, + 0x5DFA, 0x8E85, + 0x5DFB, 0x8E86, + 0x5DFC, 0x8E87, + 0x5DFF, 0x8E88, + 0x5E00, 0x8E89, + 0x5E04, 0x8E8A, + 0x5E07, 0x8E8B, + 0x5E09, 0x8E8C, + 0x5E0A, 0x8E8D, + 0x5E0B, 0x8E8E, + 0x5E0D, 0x8E8F, + 0x5E0E, 0x8E90, + 0x5E12, 0x8E91, + 0x5E13, 0x8E92, + 0x5E17, 0x8E93, + 0x5E1E, 0x8E94, + 0x5E1F, 0x8E95, + 0x5E20, 0x8E96, + 0x5E21, 0x8E97, + 0x5E22, 0x8E98, + 0x5E23, 0x8E99, + 0x5E24, 0x8E9A, + 0x5E25, 0x8E9B, + 0x5E28, 0x8E9C, + 0x5E29, 0x8E9D, + 0x5E2A, 0x8E9E, + 0x5E2B, 0x8E9F, + 0x5E2C, 0x8EA0, + 0x5E2F, 0x8EA1, + 0x5E30, 0x8EA2, + 0x5E32, 0x8EA3, + 0x5E33, 0x8EA4, + 0x5E34, 0x8EA5, + 0x5E35, 0x8EA6, + 0x5E36, 0x8EA7, + 0x5E39, 0x8EA8, + 0x5E3A, 0x8EA9, + 0x5E3E, 0x8EAA, + 0x5E3F, 0x8EAB, + 0x5E40, 0x8EAC, + 0x5E41, 0x8EAD, + 0x5E43, 0x8EAE, + 0x5E46, 0x8EAF, + 0x5E47, 0x8EB0, + 0x5E48, 0x8EB1, + 0x5E49, 0x8EB2, + 0x5E4A, 0x8EB3, + 0x5E4B, 0x8EB4, + 0x5E4D, 0x8EB5, + 0x5E4E, 0x8EB6, + 0x5E4F, 0x8EB7, + 0x5E50, 0x8EB8, + 0x5E51, 0x8EB9, + 0x5E52, 0x8EBA, + 0x5E53, 0x8EBB, + 0x5E56, 0x8EBC, + 0x5E57, 0x8EBD, + 0x5E58, 0x8EBE, + 0x5E59, 0x8EBF, + 0x5E5A, 0x8EC0, + 0x5E5C, 0x8EC1, + 0x5E5D, 0x8EC2, + 0x5E5F, 0x8EC3, + 0x5E60, 0x8EC4, + 0x5E63, 0x8EC5, + 0x5E64, 0x8EC6, + 0x5E65, 0x8EC7, + 0x5E66, 0x8EC8, + 0x5E67, 0x8EC9, + 0x5E68, 0x8ECA, + 0x5E69, 0x8ECB, + 0x5E6A, 0x8ECC, + 0x5E6B, 0x8ECD, + 0x5E6C, 0x8ECE, + 0x5E6D, 0x8ECF, + 0x5E6E, 0x8ED0, + 0x5E6F, 0x8ED1, + 0x5E70, 0x8ED2, + 0x5E71, 0x8ED3, + 0x5E75, 0x8ED4, + 0x5E77, 0x8ED5, + 0x5E79, 0x8ED6, + 0x5E7E, 0x8ED7, + 0x5E81, 0x8ED8, + 0x5E82, 0x8ED9, + 0x5E83, 0x8EDA, + 0x5E85, 0x8EDB, + 0x5E88, 0x8EDC, + 0x5E89, 0x8EDD, + 0x5E8C, 0x8EDE, + 0x5E8D, 0x8EDF, + 0x5E8E, 0x8EE0, + 0x5E92, 0x8EE1, + 0x5E98, 0x8EE2, + 0x5E9B, 0x8EE3, + 0x5E9D, 0x8EE4, + 0x5EA1, 0x8EE5, + 0x5EA2, 0x8EE6, + 0x5EA3, 0x8EE7, + 0x5EA4, 0x8EE8, + 0x5EA8, 0x8EE9, + 0x5EA9, 0x8EEA, + 0x5EAA, 0x8EEB, + 0x5EAB, 0x8EEC, + 0x5EAC, 0x8EED, + 0x5EAE, 0x8EEE, + 0x5EAF, 0x8EEF, + 0x5EB0, 0x8EF0, + 0x5EB1, 0x8EF1, + 0x5EB2, 0x8EF2, + 0x5EB4, 0x8EF3, + 0x5EBA, 0x8EF4, + 0x5EBB, 0x8EF5, + 0x5EBC, 0x8EF6, + 0x5EBD, 0x8EF7, + 0x5EBF, 0x8EF8, + 0x5EC0, 0x8EF9, + 0x5EC1, 0x8EFA, + 0x5EC2, 0x8EFB, + 0x5EC3, 0x8EFC, + 0x5EC4, 0x8EFD, + 0x5EC5, 0x8EFE, + 0x5EC6, 0x8F40, + 0x5EC7, 0x8F41, + 0x5EC8, 0x8F42, + 0x5ECB, 0x8F43, + 0x5ECC, 0x8F44, + 0x5ECD, 0x8F45, + 0x5ECE, 0x8F46, + 0x5ECF, 0x8F47, + 0x5ED0, 0x8F48, + 0x5ED4, 0x8F49, + 0x5ED5, 0x8F4A, + 0x5ED7, 0x8F4B, + 0x5ED8, 0x8F4C, + 0x5ED9, 0x8F4D, + 0x5EDA, 0x8F4E, + 0x5EDC, 0x8F4F, + 0x5EDD, 0x8F50, + 0x5EDE, 0x8F51, + 0x5EDF, 0x8F52, + 0x5EE0, 0x8F53, + 0x5EE1, 0x8F54, + 0x5EE2, 0x8F55, + 0x5EE3, 0x8F56, + 0x5EE4, 0x8F57, + 0x5EE5, 0x8F58, + 0x5EE6, 0x8F59, + 0x5EE7, 0x8F5A, + 0x5EE9, 0x8F5B, + 0x5EEB, 0x8F5C, + 0x5EEC, 0x8F5D, + 0x5EED, 0x8F5E, + 0x5EEE, 0x8F5F, + 0x5EEF, 0x8F60, + 0x5EF0, 0x8F61, + 0x5EF1, 0x8F62, + 0x5EF2, 0x8F63, + 0x5EF3, 0x8F64, + 0x5EF5, 0x8F65, + 0x5EF8, 0x8F66, + 0x5EF9, 0x8F67, + 0x5EFB, 0x8F68, + 0x5EFC, 0x8F69, + 0x5EFD, 0x8F6A, + 0x5F05, 0x8F6B, + 0x5F06, 0x8F6C, + 0x5F07, 0x8F6D, + 0x5F09, 0x8F6E, + 0x5F0C, 0x8F6F, + 0x5F0D, 0x8F70, + 0x5F0E, 0x8F71, + 0x5F10, 0x8F72, + 0x5F12, 0x8F73, + 0x5F14, 0x8F74, + 0x5F16, 0x8F75, + 0x5F19, 0x8F76, + 0x5F1A, 0x8F77, + 0x5F1C, 0x8F78, + 0x5F1D, 0x8F79, + 0x5F1E, 0x8F7A, + 0x5F21, 0x8F7B, + 0x5F22, 0x8F7C, + 0x5F23, 0x8F7D, + 0x5F24, 0x8F7E, + 0x5F28, 0x8F80, + 0x5F2B, 0x8F81, + 0x5F2C, 0x8F82, + 0x5F2E, 0x8F83, + 0x5F30, 0x8F84, + 0x5F32, 0x8F85, + 0x5F33, 0x8F86, + 0x5F34, 0x8F87, + 0x5F35, 0x8F88, + 0x5F36, 0x8F89, + 0x5F37, 0x8F8A, + 0x5F38, 0x8F8B, + 0x5F3B, 0x8F8C, + 0x5F3D, 0x8F8D, + 0x5F3E, 0x8F8E, + 0x5F3F, 0x8F8F, + 0x5F41, 0x8F90, + 0x5F42, 0x8F91, + 0x5F43, 0x8F92, + 0x5F44, 0x8F93, + 0x5F45, 0x8F94, + 0x5F46, 0x8F95, + 0x5F47, 0x8F96, + 0x5F48, 0x8F97, + 0x5F49, 0x8F98, + 0x5F4A, 0x8F99, + 0x5F4B, 0x8F9A, + 0x5F4C, 0x8F9B, + 0x5F4D, 0x8F9C, + 0x5F4E, 0x8F9D, + 0x5F4F, 0x8F9E, + 0x5F51, 0x8F9F, + 0x5F54, 0x8FA0, + 0x5F59, 0x8FA1, + 0x5F5A, 0x8FA2, + 0x5F5B, 0x8FA3, + 0x5F5C, 0x8FA4, + 0x5F5E, 0x8FA5, + 0x5F5F, 0x8FA6, + 0x5F60, 0x8FA7, + 0x5F63, 0x8FA8, + 0x5F65, 0x8FA9, + 0x5F67, 0x8FAA, + 0x5F68, 0x8FAB, + 0x5F6B, 0x8FAC, + 0x5F6E, 0x8FAD, + 0x5F6F, 0x8FAE, + 0x5F72, 0x8FAF, + 0x5F74, 0x8FB0, + 0x5F75, 0x8FB1, + 0x5F76, 0x8FB2, + 0x5F78, 0x8FB3, + 0x5F7A, 0x8FB4, + 0x5F7D, 0x8FB5, + 0x5F7E, 0x8FB6, + 0x5F7F, 0x8FB7, + 0x5F83, 0x8FB8, + 0x5F86, 0x8FB9, + 0x5F8D, 0x8FBA, + 0x5F8E, 0x8FBB, + 0x5F8F, 0x8FBC, + 0x5F91, 0x8FBD, + 0x5F93, 0x8FBE, + 0x5F94, 0x8FBF, + 0x5F96, 0x8FC0, + 0x5F9A, 0x8FC1, + 0x5F9B, 0x8FC2, + 0x5F9D, 0x8FC3, + 0x5F9E, 0x8FC4, + 0x5F9F, 0x8FC5, + 0x5FA0, 0x8FC6, + 0x5FA2, 0x8FC7, + 0x5FA3, 0x8FC8, + 0x5FA4, 0x8FC9, + 0x5FA5, 0x8FCA, + 0x5FA6, 0x8FCB, + 0x5FA7, 0x8FCC, + 0x5FA9, 0x8FCD, + 0x5FAB, 0x8FCE, + 0x5FAC, 0x8FCF, + 0x5FAF, 0x8FD0, + 0x5FB0, 0x8FD1, + 0x5FB1, 0x8FD2, + 0x5FB2, 0x8FD3, + 0x5FB3, 0x8FD4, + 0x5FB4, 0x8FD5, + 0x5FB6, 0x8FD6, + 0x5FB8, 0x8FD7, + 0x5FB9, 0x8FD8, + 0x5FBA, 0x8FD9, + 0x5FBB, 0x8FDA, + 0x5FBE, 0x8FDB, + 0x5FBF, 0x8FDC, + 0x5FC0, 0x8FDD, + 0x5FC1, 0x8FDE, + 0x5FC2, 0x8FDF, + 0x5FC7, 0x8FE0, + 0x5FC8, 0x8FE1, + 0x5FCA, 0x8FE2, + 0x5FCB, 0x8FE3, + 0x5FCE, 0x8FE4, + 0x5FD3, 0x8FE5, + 0x5FD4, 0x8FE6, + 0x5FD5, 0x8FE7, + 0x5FDA, 0x8FE8, + 0x5FDB, 0x8FE9, + 0x5FDC, 0x8FEA, + 0x5FDE, 0x8FEB, + 0x5FDF, 0x8FEC, + 0x5FE2, 0x8FED, + 0x5FE3, 0x8FEE, + 0x5FE5, 0x8FEF, + 0x5FE6, 0x8FF0, + 0x5FE8, 0x8FF1, + 0x5FE9, 0x8FF2, + 0x5FEC, 0x8FF3, + 0x5FEF, 0x8FF4, + 0x5FF0, 0x8FF5, + 0x5FF2, 0x8FF6, + 0x5FF3, 0x8FF7, + 0x5FF4, 0x8FF8, + 0x5FF6, 0x8FF9, + 0x5FF7, 0x8FFA, + 0x5FF9, 0x8FFB, + 0x5FFA, 0x8FFC, + 0x5FFC, 0x8FFD, + 0x6007, 0x8FFE, + 0x6008, 0x9040, + 0x6009, 0x9041, + 0x600B, 0x9042, + 0x600C, 0x9043, + 0x6010, 0x9044, + 0x6011, 0x9045, + 0x6013, 0x9046, + 0x6017, 0x9047, + 0x6018, 0x9048, + 0x601A, 0x9049, + 0x601E, 0x904A, + 0x601F, 0x904B, + 0x6022, 0x904C, + 0x6023, 0x904D, + 0x6024, 0x904E, + 0x602C, 0x904F, + 0x602D, 0x9050, + 0x602E, 0x9051, + 0x6030, 0x9052, + 0x6031, 0x9053, + 0x6032, 0x9054, + 0x6033, 0x9055, + 0x6034, 0x9056, + 0x6036, 0x9057, + 0x6037, 0x9058, + 0x6038, 0x9059, + 0x6039, 0x905A, + 0x603A, 0x905B, + 0x603D, 0x905C, + 0x603E, 0x905D, + 0x6040, 0x905E, + 0x6044, 0x905F, + 0x6045, 0x9060, + 0x6046, 0x9061, + 0x6047, 0x9062, + 0x6048, 0x9063, + 0x6049, 0x9064, + 0x604A, 0x9065, + 0x604C, 0x9066, + 0x604E, 0x9067, + 0x604F, 0x9068, + 0x6051, 0x9069, + 0x6053, 0x906A, + 0x6054, 0x906B, + 0x6056, 0x906C, + 0x6057, 0x906D, + 0x6058, 0x906E, + 0x605B, 0x906F, + 0x605C, 0x9070, + 0x605E, 0x9071, + 0x605F, 0x9072, + 0x6060, 0x9073, + 0x6061, 0x9074, + 0x6065, 0x9075, + 0x6066, 0x9076, + 0x606E, 0x9077, + 0x6071, 0x9078, + 0x6072, 0x9079, + 0x6074, 0x907A, + 0x6075, 0x907B, + 0x6077, 0x907C, + 0x607E, 0x907D, + 0x6080, 0x907E, + 0x6081, 0x9080, + 0x6082, 0x9081, + 0x6085, 0x9082, + 0x6086, 0x9083, + 0x6087, 0x9084, + 0x6088, 0x9085, + 0x608A, 0x9086, + 0x608B, 0x9087, + 0x608E, 0x9088, + 0x608F, 0x9089, + 0x6090, 0x908A, + 0x6091, 0x908B, + 0x6093, 0x908C, + 0x6095, 0x908D, + 0x6097, 0x908E, + 0x6098, 0x908F, + 0x6099, 0x9090, + 0x609C, 0x9091, + 0x609E, 0x9092, + 0x60A1, 0x9093, + 0x60A2, 0x9094, + 0x60A4, 0x9095, + 0x60A5, 0x9096, + 0x60A7, 0x9097, + 0x60A9, 0x9098, + 0x60AA, 0x9099, + 0x60AE, 0x909A, + 0x60B0, 0x909B, + 0x60B3, 0x909C, + 0x60B5, 0x909D, + 0x60B6, 0x909E, + 0x60B7, 0x909F, + 0x60B9, 0x90A0, + 0x60BA, 0x90A1, + 0x60BD, 0x90A2, + 0x60BE, 0x90A3, + 0x60BF, 0x90A4, + 0x60C0, 0x90A5, + 0x60C1, 0x90A6, + 0x60C2, 0x90A7, + 0x60C3, 0x90A8, + 0x60C4, 0x90A9, + 0x60C7, 0x90AA, + 0x60C8, 0x90AB, + 0x60C9, 0x90AC, + 0x60CC, 0x90AD, + 0x60CD, 0x90AE, + 0x60CE, 0x90AF, + 0x60CF, 0x90B0, + 0x60D0, 0x90B1, + 0x60D2, 0x90B2, + 0x60D3, 0x90B3, + 0x60D4, 0x90B4, + 0x60D6, 0x90B5, + 0x60D7, 0x90B6, + 0x60D9, 0x90B7, + 0x60DB, 0x90B8, + 0x60DE, 0x90B9, + 0x60E1, 0x90BA, + 0x60E2, 0x90BB, + 0x60E3, 0x90BC, + 0x60E4, 0x90BD, + 0x60E5, 0x90BE, + 0x60EA, 0x90BF, + 0x60F1, 0x90C0, + 0x60F2, 0x90C1, + 0x60F5, 0x90C2, + 0x60F7, 0x90C3, + 0x60F8, 0x90C4, + 0x60FB, 0x90C5, + 0x60FC, 0x90C6, + 0x60FD, 0x90C7, + 0x60FE, 0x90C8, + 0x60FF, 0x90C9, + 0x6102, 0x90CA, + 0x6103, 0x90CB, + 0x6104, 0x90CC, + 0x6105, 0x90CD, + 0x6107, 0x90CE, + 0x610A, 0x90CF, + 0x610B, 0x90D0, + 0x610C, 0x90D1, + 0x6110, 0x90D2, + 0x6111, 0x90D3, + 0x6112, 0x90D4, + 0x6113, 0x90D5, + 0x6114, 0x90D6, + 0x6116, 0x90D7, + 0x6117, 0x90D8, + 0x6118, 0x90D9, + 0x6119, 0x90DA, + 0x611B, 0x90DB, + 0x611C, 0x90DC, + 0x611D, 0x90DD, + 0x611E, 0x90DE, + 0x6121, 0x90DF, + 0x6122, 0x90E0, + 0x6125, 0x90E1, + 0x6128, 0x90E2, + 0x6129, 0x90E3, + 0x612A, 0x90E4, + 0x612C, 0x90E5, + 0x612D, 0x90E6, + 0x612E, 0x90E7, + 0x612F, 0x90E8, + 0x6130, 0x90E9, + 0x6131, 0x90EA, + 0x6132, 0x90EB, + 0x6133, 0x90EC, + 0x6134, 0x90ED, + 0x6135, 0x90EE, + 0x6136, 0x90EF, + 0x6137, 0x90F0, + 0x6138, 0x90F1, + 0x6139, 0x90F2, + 0x613A, 0x90F3, + 0x613B, 0x90F4, + 0x613C, 0x90F5, + 0x613D, 0x90F6, + 0x613E, 0x90F7, + 0x6140, 0x90F8, + 0x6141, 0x90F9, + 0x6142, 0x90FA, + 0x6143, 0x90FB, + 0x6144, 0x90FC, + 0x6145, 0x90FD, + 0x6146, 0x90FE, + 0x6147, 0x9140, + 0x6149, 0x9141, + 0x614B, 0x9142, + 0x614D, 0x9143, + 0x614F, 0x9144, + 0x6150, 0x9145, + 0x6152, 0x9146, + 0x6153, 0x9147, + 0x6154, 0x9148, + 0x6156, 0x9149, + 0x6157, 0x914A, + 0x6158, 0x914B, + 0x6159, 0x914C, + 0x615A, 0x914D, + 0x615B, 0x914E, + 0x615C, 0x914F, + 0x615E, 0x9150, + 0x615F, 0x9151, + 0x6160, 0x9152, + 0x6161, 0x9153, + 0x6163, 0x9154, + 0x6164, 0x9155, + 0x6165, 0x9156, + 0x6166, 0x9157, + 0x6169, 0x9158, + 0x616A, 0x9159, + 0x616B, 0x915A, + 0x616C, 0x915B, + 0x616D, 0x915C, + 0x616E, 0x915D, + 0x616F, 0x915E, + 0x6171, 0x915F, + 0x6172, 0x9160, + 0x6173, 0x9161, + 0x6174, 0x9162, + 0x6176, 0x9163, + 0x6178, 0x9164, + 0x6179, 0x9165, + 0x617A, 0x9166, + 0x617B, 0x9167, + 0x617C, 0x9168, + 0x617D, 0x9169, + 0x617E, 0x916A, + 0x617F, 0x916B, + 0x6180, 0x916C, + 0x6181, 0x916D, + 0x6182, 0x916E, + 0x6183, 0x916F, + 0x6184, 0x9170, + 0x6185, 0x9171, + 0x6186, 0x9172, + 0x6187, 0x9173, + 0x6188, 0x9174, + 0x6189, 0x9175, + 0x618A, 0x9176, + 0x618C, 0x9177, + 0x618D, 0x9178, + 0x618F, 0x9179, + 0x6190, 0x917A, + 0x6191, 0x917B, + 0x6192, 0x917C, + 0x6193, 0x917D, + 0x6195, 0x917E, + 0x6196, 0x9180, + 0x6197, 0x9181, + 0x6198, 0x9182, + 0x6199, 0x9183, + 0x619A, 0x9184, + 0x619B, 0x9185, + 0x619C, 0x9186, + 0x619E, 0x9187, + 0x619F, 0x9188, + 0x61A0, 0x9189, + 0x61A1, 0x918A, + 0x61A2, 0x918B, + 0x61A3, 0x918C, + 0x61A4, 0x918D, + 0x61A5, 0x918E, + 0x61A6, 0x918F, + 0x61AA, 0x9190, + 0x61AB, 0x9191, + 0x61AD, 0x9192, + 0x61AE, 0x9193, + 0x61AF, 0x9194, + 0x61B0, 0x9195, + 0x61B1, 0x9196, + 0x61B2, 0x9197, + 0x61B3, 0x9198, + 0x61B4, 0x9199, + 0x61B5, 0x919A, + 0x61B6, 0x919B, + 0x61B8, 0x919C, + 0x61B9, 0x919D, + 0x61BA, 0x919E, + 0x61BB, 0x919F, + 0x61BC, 0x91A0, + 0x61BD, 0x91A1, + 0x61BF, 0x91A2, + 0x61C0, 0x91A3, + 0x61C1, 0x91A4, + 0x61C3, 0x91A5, + 0x61C4, 0x91A6, + 0x61C5, 0x91A7, + 0x61C6, 0x91A8, + 0x61C7, 0x91A9, + 0x61C9, 0x91AA, + 0x61CC, 0x91AB, + 0x61CD, 0x91AC, + 0x61CE, 0x91AD, + 0x61CF, 0x91AE, + 0x61D0, 0x91AF, + 0x61D3, 0x91B0, + 0x61D5, 0x91B1, + 0x61D6, 0x91B2, + 0x61D7, 0x91B3, + 0x61D8, 0x91B4, + 0x61D9, 0x91B5, + 0x61DA, 0x91B6, + 0x61DB, 0x91B7, + 0x61DC, 0x91B8, + 0x61DD, 0x91B9, + 0x61DE, 0x91BA, + 0x61DF, 0x91BB, + 0x61E0, 0x91BC, + 0x61E1, 0x91BD, + 0x61E2, 0x91BE, + 0x61E3, 0x91BF, + 0x61E4, 0x91C0, + 0x61E5, 0x91C1, + 0x61E7, 0x91C2, + 0x61E8, 0x91C3, + 0x61E9, 0x91C4, + 0x61EA, 0x91C5, + 0x61EB, 0x91C6, + 0x61EC, 0x91C7, + 0x61ED, 0x91C8, + 0x61EE, 0x91C9, + 0x61EF, 0x91CA, + 0x61F0, 0x91CB, + 0x61F1, 0x91CC, + 0x61F2, 0x91CD, + 0x61F3, 0x91CE, + 0x61F4, 0x91CF, + 0x61F6, 0x91D0, + 0x61F7, 0x91D1, + 0x61F8, 0x91D2, + 0x61F9, 0x91D3, + 0x61FA, 0x91D4, + 0x61FB, 0x91D5, + 0x61FC, 0x91D6, + 0x61FD, 0x91D7, + 0x61FE, 0x91D8, + 0x6200, 0x91D9, + 0x6201, 0x91DA, + 0x6202, 0x91DB, + 0x6203, 0x91DC, + 0x6204, 0x91DD, + 0x6205, 0x91DE, + 0x6207, 0x91DF, + 0x6209, 0x91E0, + 0x6213, 0x91E1, + 0x6214, 0x91E2, + 0x6219, 0x91E3, + 0x621C, 0x91E4, + 0x621D, 0x91E5, + 0x621E, 0x91E6, + 0x6220, 0x91E7, + 0x6223, 0x91E8, + 0x6226, 0x91E9, + 0x6227, 0x91EA, + 0x6228, 0x91EB, + 0x6229, 0x91EC, + 0x622B, 0x91ED, + 0x622D, 0x91EE, + 0x622F, 0x91EF, + 0x6230, 0x91F0, + 0x6231, 0x91F1, + 0x6232, 0x91F2, + 0x6235, 0x91F3, + 0x6236, 0x91F4, + 0x6238, 0x91F5, + 0x6239, 0x91F6, + 0x623A, 0x91F7, + 0x623B, 0x91F8, + 0x623C, 0x91F9, + 0x6242, 0x91FA, + 0x6244, 0x91FB, + 0x6245, 0x91FC, + 0x6246, 0x91FD, + 0x624A, 0x91FE, + 0x624F, 0x9240, + 0x6250, 0x9241, + 0x6255, 0x9242, + 0x6256, 0x9243, + 0x6257, 0x9244, + 0x6259, 0x9245, + 0x625A, 0x9246, + 0x625C, 0x9247, + 0x625D, 0x9248, + 0x625E, 0x9249, + 0x625F, 0x924A, + 0x6260, 0x924B, + 0x6261, 0x924C, + 0x6262, 0x924D, + 0x6264, 0x924E, + 0x6265, 0x924F, + 0x6268, 0x9250, + 0x6271, 0x9251, + 0x6272, 0x9252, + 0x6274, 0x9253, + 0x6275, 0x9254, + 0x6277, 0x9255, + 0x6278, 0x9256, + 0x627A, 0x9257, + 0x627B, 0x9258, + 0x627D, 0x9259, + 0x6281, 0x925A, + 0x6282, 0x925B, + 0x6283, 0x925C, + 0x6285, 0x925D, + 0x6286, 0x925E, + 0x6287, 0x925F, + 0x6288, 0x9260, + 0x628B, 0x9261, + 0x628C, 0x9262, + 0x628D, 0x9263, + 0x628E, 0x9264, + 0x628F, 0x9265, + 0x6290, 0x9266, + 0x6294, 0x9267, + 0x6299, 0x9268, + 0x629C, 0x9269, + 0x629D, 0x926A, + 0x629E, 0x926B, + 0x62A3, 0x926C, + 0x62A6, 0x926D, + 0x62A7, 0x926E, + 0x62A9, 0x926F, + 0x62AA, 0x9270, + 0x62AD, 0x9271, + 0x62AE, 0x9272, + 0x62AF, 0x9273, + 0x62B0, 0x9274, + 0x62B2, 0x9275, + 0x62B3, 0x9276, + 0x62B4, 0x9277, + 0x62B6, 0x9278, + 0x62B7, 0x9279, + 0x62B8, 0x927A, + 0x62BA, 0x927B, + 0x62BE, 0x927C, + 0x62C0, 0x927D, + 0x62C1, 0x927E, + 0x62C3, 0x9280, + 0x62CB, 0x9281, + 0x62CF, 0x9282, + 0x62D1, 0x9283, + 0x62D5, 0x9284, + 0x62DD, 0x9285, + 0x62DE, 0x9286, + 0x62E0, 0x9287, + 0x62E1, 0x9288, + 0x62E4, 0x9289, + 0x62EA, 0x928A, + 0x62EB, 0x928B, + 0x62F0, 0x928C, + 0x62F2, 0x928D, + 0x62F5, 0x928E, + 0x62F8, 0x928F, + 0x62F9, 0x9290, + 0x62FA, 0x9291, + 0x62FB, 0x9292, + 0x6300, 0x9293, + 0x6303, 0x9294, + 0x6304, 0x9295, + 0x6305, 0x9296, + 0x6306, 0x9297, + 0x630A, 0x9298, + 0x630B, 0x9299, + 0x630C, 0x929A, + 0x630D, 0x929B, + 0x630F, 0x929C, + 0x6310, 0x929D, + 0x6312, 0x929E, + 0x6313, 0x929F, + 0x6314, 0x92A0, + 0x6315, 0x92A1, + 0x6317, 0x92A2, + 0x6318, 0x92A3, + 0x6319, 0x92A4, + 0x631C, 0x92A5, + 0x6326, 0x92A6, + 0x6327, 0x92A7, + 0x6329, 0x92A8, + 0x632C, 0x92A9, + 0x632D, 0x92AA, + 0x632E, 0x92AB, + 0x6330, 0x92AC, + 0x6331, 0x92AD, + 0x6333, 0x92AE, + 0x6334, 0x92AF, + 0x6335, 0x92B0, + 0x6336, 0x92B1, + 0x6337, 0x92B2, + 0x6338, 0x92B3, + 0x633B, 0x92B4, + 0x633C, 0x92B5, + 0x633E, 0x92B6, + 0x633F, 0x92B7, + 0x6340, 0x92B8, + 0x6341, 0x92B9, + 0x6344, 0x92BA, + 0x6347, 0x92BB, + 0x6348, 0x92BC, + 0x634A, 0x92BD, + 0x6351, 0x92BE, + 0x6352, 0x92BF, + 0x6353, 0x92C0, + 0x6354, 0x92C1, + 0x6356, 0x92C2, + 0x6357, 0x92C3, + 0x6358, 0x92C4, + 0x6359, 0x92C5, + 0x635A, 0x92C6, + 0x635B, 0x92C7, + 0x635C, 0x92C8, + 0x635D, 0x92C9, + 0x6360, 0x92CA, + 0x6364, 0x92CB, + 0x6365, 0x92CC, + 0x6366, 0x92CD, + 0x6368, 0x92CE, + 0x636A, 0x92CF, + 0x636B, 0x92D0, + 0x636C, 0x92D1, + 0x636F, 0x92D2, + 0x6370, 0x92D3, + 0x6372, 0x92D4, + 0x6373, 0x92D5, + 0x6374, 0x92D6, + 0x6375, 0x92D7, + 0x6378, 0x92D8, + 0x6379, 0x92D9, + 0x637C, 0x92DA, + 0x637D, 0x92DB, + 0x637E, 0x92DC, + 0x637F, 0x92DD, + 0x6381, 0x92DE, + 0x6383, 0x92DF, + 0x6384, 0x92E0, + 0x6385, 0x92E1, + 0x6386, 0x92E2, + 0x638B, 0x92E3, + 0x638D, 0x92E4, + 0x6391, 0x92E5, + 0x6393, 0x92E6, + 0x6394, 0x92E7, + 0x6395, 0x92E8, + 0x6397, 0x92E9, + 0x6399, 0x92EA, + 0x639A, 0x92EB, + 0x639B, 0x92EC, + 0x639C, 0x92ED, + 0x639D, 0x92EE, + 0x639E, 0x92EF, + 0x639F, 0x92F0, + 0x63A1, 0x92F1, + 0x63A4, 0x92F2, + 0x63A6, 0x92F3, + 0x63AB, 0x92F4, + 0x63AF, 0x92F5, + 0x63B1, 0x92F6, + 0x63B2, 0x92F7, + 0x63B5, 0x92F8, + 0x63B6, 0x92F9, + 0x63B9, 0x92FA, + 0x63BB, 0x92FB, + 0x63BD, 0x92FC, + 0x63BF, 0x92FD, + 0x63C0, 0x92FE, + 0x63C1, 0x9340, + 0x63C2, 0x9341, + 0x63C3, 0x9342, + 0x63C5, 0x9343, + 0x63C7, 0x9344, + 0x63C8, 0x9345, + 0x63CA, 0x9346, + 0x63CB, 0x9347, + 0x63CC, 0x9348, + 0x63D1, 0x9349, + 0x63D3, 0x934A, + 0x63D4, 0x934B, + 0x63D5, 0x934C, + 0x63D7, 0x934D, + 0x63D8, 0x934E, + 0x63D9, 0x934F, + 0x63DA, 0x9350, + 0x63DB, 0x9351, + 0x63DC, 0x9352, + 0x63DD, 0x9353, + 0x63DF, 0x9354, + 0x63E2, 0x9355, + 0x63E4, 0x9356, + 0x63E5, 0x9357, + 0x63E6, 0x9358, + 0x63E7, 0x9359, + 0x63E8, 0x935A, + 0x63EB, 0x935B, + 0x63EC, 0x935C, + 0x63EE, 0x935D, + 0x63EF, 0x935E, + 0x63F0, 0x935F, + 0x63F1, 0x9360, + 0x63F3, 0x9361, + 0x63F5, 0x9362, + 0x63F7, 0x9363, + 0x63F9, 0x9364, + 0x63FA, 0x9365, + 0x63FB, 0x9366, + 0x63FC, 0x9367, + 0x63FE, 0x9368, + 0x6403, 0x9369, + 0x6404, 0x936A, + 0x6406, 0x936B, + 0x6407, 0x936C, + 0x6408, 0x936D, + 0x6409, 0x936E, + 0x640A, 0x936F, + 0x640D, 0x9370, + 0x640E, 0x9371, + 0x6411, 0x9372, + 0x6412, 0x9373, + 0x6415, 0x9374, + 0x6416, 0x9375, + 0x6417, 0x9376, + 0x6418, 0x9377, + 0x6419, 0x9378, + 0x641A, 0x9379, + 0x641D, 0x937A, + 0x641F, 0x937B, + 0x6422, 0x937C, + 0x6423, 0x937D, + 0x6424, 0x937E, + 0x6425, 0x9380, + 0x6427, 0x9381, + 0x6428, 0x9382, + 0x6429, 0x9383, + 0x642B, 0x9384, + 0x642E, 0x9385, + 0x642F, 0x9386, + 0x6430, 0x9387, + 0x6431, 0x9388, + 0x6432, 0x9389, + 0x6433, 0x938A, + 0x6435, 0x938B, + 0x6436, 0x938C, + 0x6437, 0x938D, + 0x6438, 0x938E, + 0x6439, 0x938F, + 0x643B, 0x9390, + 0x643C, 0x9391, + 0x643E, 0x9392, + 0x6440, 0x9393, + 0x6442, 0x9394, + 0x6443, 0x9395, + 0x6449, 0x9396, + 0x644B, 0x9397, + 0x644C, 0x9398, + 0x644D, 0x9399, + 0x644E, 0x939A, + 0x644F, 0x939B, + 0x6450, 0x939C, + 0x6451, 0x939D, + 0x6453, 0x939E, + 0x6455, 0x939F, + 0x6456, 0x93A0, + 0x6457, 0x93A1, + 0x6459, 0x93A2, + 0x645A, 0x93A3, + 0x645B, 0x93A4, + 0x645C, 0x93A5, + 0x645D, 0x93A6, + 0x645F, 0x93A7, + 0x6460, 0x93A8, + 0x6461, 0x93A9, + 0x6462, 0x93AA, + 0x6463, 0x93AB, + 0x6464, 0x93AC, + 0x6465, 0x93AD, + 0x6466, 0x93AE, + 0x6468, 0x93AF, + 0x646A, 0x93B0, + 0x646B, 0x93B1, + 0x646C, 0x93B2, + 0x646E, 0x93B3, + 0x646F, 0x93B4, + 0x6470, 0x93B5, + 0x6471, 0x93B6, + 0x6472, 0x93B7, + 0x6473, 0x93B8, + 0x6474, 0x93B9, + 0x6475, 0x93BA, + 0x6476, 0x93BB, + 0x6477, 0x93BC, + 0x647B, 0x93BD, + 0x647C, 0x93BE, + 0x647D, 0x93BF, + 0x647E, 0x93C0, + 0x647F, 0x93C1, + 0x6480, 0x93C2, + 0x6481, 0x93C3, + 0x6483, 0x93C4, + 0x6486, 0x93C5, + 0x6488, 0x93C6, + 0x6489, 0x93C7, + 0x648A, 0x93C8, + 0x648B, 0x93C9, + 0x648C, 0x93CA, + 0x648D, 0x93CB, + 0x648E, 0x93CC, + 0x648F, 0x93CD, + 0x6490, 0x93CE, + 0x6493, 0x93CF, + 0x6494, 0x93D0, + 0x6497, 0x93D1, + 0x6498, 0x93D2, + 0x649A, 0x93D3, + 0x649B, 0x93D4, + 0x649C, 0x93D5, + 0x649D, 0x93D6, + 0x649F, 0x93D7, + 0x64A0, 0x93D8, + 0x64A1, 0x93D9, + 0x64A2, 0x93DA, + 0x64A3, 0x93DB, + 0x64A5, 0x93DC, + 0x64A6, 0x93DD, + 0x64A7, 0x93DE, + 0x64A8, 0x93DF, + 0x64AA, 0x93E0, + 0x64AB, 0x93E1, + 0x64AF, 0x93E2, + 0x64B1, 0x93E3, + 0x64B2, 0x93E4, + 0x64B3, 0x93E5, + 0x64B4, 0x93E6, + 0x64B6, 0x93E7, + 0x64B9, 0x93E8, + 0x64BB, 0x93E9, + 0x64BD, 0x93EA, + 0x64BE, 0x93EB, + 0x64BF, 0x93EC, + 0x64C1, 0x93ED, + 0x64C3, 0x93EE, + 0x64C4, 0x93EF, + 0x64C6, 0x93F0, + 0x64C7, 0x93F1, + 0x64C8, 0x93F2, + 0x64C9, 0x93F3, + 0x64CA, 0x93F4, + 0x64CB, 0x93F5, + 0x64CC, 0x93F6, + 0x64CF, 0x93F7, + 0x64D1, 0x93F8, + 0x64D3, 0x93F9, + 0x64D4, 0x93FA, + 0x64D5, 0x93FB, + 0x64D6, 0x93FC, + 0x64D9, 0x93FD, + 0x64DA, 0x93FE, + 0x64DB, 0x9440, + 0x64DC, 0x9441, + 0x64DD, 0x9442, + 0x64DF, 0x9443, + 0x64E0, 0x9444, + 0x64E1, 0x9445, + 0x64E3, 0x9446, + 0x64E5, 0x9447, + 0x64E7, 0x9448, + 0x64E8, 0x9449, + 0x64E9, 0x944A, + 0x64EA, 0x944B, + 0x64EB, 0x944C, + 0x64EC, 0x944D, + 0x64ED, 0x944E, + 0x64EE, 0x944F, + 0x64EF, 0x9450, + 0x64F0, 0x9451, + 0x64F1, 0x9452, + 0x64F2, 0x9453, + 0x64F3, 0x9454, + 0x64F4, 0x9455, + 0x64F5, 0x9456, + 0x64F6, 0x9457, + 0x64F7, 0x9458, + 0x64F8, 0x9459, + 0x64F9, 0x945A, + 0x64FA, 0x945B, + 0x64FB, 0x945C, + 0x64FC, 0x945D, + 0x64FD, 0x945E, + 0x64FE, 0x945F, + 0x64FF, 0x9460, + 0x6501, 0x9461, + 0x6502, 0x9462, + 0x6503, 0x9463, + 0x6504, 0x9464, + 0x6505, 0x9465, + 0x6506, 0x9466, + 0x6507, 0x9467, + 0x6508, 0x9468, + 0x650A, 0x9469, + 0x650B, 0x946A, + 0x650C, 0x946B, + 0x650D, 0x946C, + 0x650E, 0x946D, + 0x650F, 0x946E, + 0x6510, 0x946F, + 0x6511, 0x9470, + 0x6513, 0x9471, + 0x6514, 0x9472, + 0x6515, 0x9473, + 0x6516, 0x9474, + 0x6517, 0x9475, + 0x6519, 0x9476, + 0x651A, 0x9477, + 0x651B, 0x9478, + 0x651C, 0x9479, + 0x651D, 0x947A, + 0x651E, 0x947B, + 0x651F, 0x947C, + 0x6520, 0x947D, + 0x6521, 0x947E, + 0x6522, 0x9480, + 0x6523, 0x9481, + 0x6524, 0x9482, + 0x6526, 0x9483, + 0x6527, 0x9484, + 0x6528, 0x9485, + 0x6529, 0x9486, + 0x652A, 0x9487, + 0x652C, 0x9488, + 0x652D, 0x9489, + 0x6530, 0x948A, + 0x6531, 0x948B, + 0x6532, 0x948C, + 0x6533, 0x948D, + 0x6537, 0x948E, + 0x653A, 0x948F, + 0x653C, 0x9490, + 0x653D, 0x9491, + 0x6540, 0x9492, + 0x6541, 0x9493, + 0x6542, 0x9494, + 0x6543, 0x9495, + 0x6544, 0x9496, + 0x6546, 0x9497, + 0x6547, 0x9498, + 0x654A, 0x9499, + 0x654B, 0x949A, + 0x654D, 0x949B, + 0x654E, 0x949C, + 0x6550, 0x949D, + 0x6552, 0x949E, + 0x6553, 0x949F, + 0x6554, 0x94A0, + 0x6557, 0x94A1, + 0x6558, 0x94A2, + 0x655A, 0x94A3, + 0x655C, 0x94A4, + 0x655F, 0x94A5, + 0x6560, 0x94A6, + 0x6561, 0x94A7, + 0x6564, 0x94A8, + 0x6565, 0x94A9, + 0x6567, 0x94AA, + 0x6568, 0x94AB, + 0x6569, 0x94AC, + 0x656A, 0x94AD, + 0x656D, 0x94AE, + 0x656E, 0x94AF, + 0x656F, 0x94B0, + 0x6571, 0x94B1, + 0x6573, 0x94B2, + 0x6575, 0x94B3, + 0x6576, 0x94B4, + 0x6578, 0x94B5, + 0x6579, 0x94B6, + 0x657A, 0x94B7, + 0x657B, 0x94B8, + 0x657C, 0x94B9, + 0x657D, 0x94BA, + 0x657E, 0x94BB, + 0x657F, 0x94BC, + 0x6580, 0x94BD, + 0x6581, 0x94BE, + 0x6582, 0x94BF, + 0x6583, 0x94C0, + 0x6584, 0x94C1, + 0x6585, 0x94C2, + 0x6586, 0x94C3, + 0x6588, 0x94C4, + 0x6589, 0x94C5, + 0x658A, 0x94C6, + 0x658D, 0x94C7, + 0x658E, 0x94C8, + 0x658F, 0x94C9, + 0x6592, 0x94CA, + 0x6594, 0x94CB, + 0x6595, 0x94CC, + 0x6596, 0x94CD, + 0x6598, 0x94CE, + 0x659A, 0x94CF, + 0x659D, 0x94D0, + 0x659E, 0x94D1, + 0x65A0, 0x94D2, + 0x65A2, 0x94D3, + 0x65A3, 0x94D4, + 0x65A6, 0x94D5, + 0x65A8, 0x94D6, + 0x65AA, 0x94D7, + 0x65AC, 0x94D8, + 0x65AE, 0x94D9, + 0x65B1, 0x94DA, + 0x65B2, 0x94DB, + 0x65B3, 0x94DC, + 0x65B4, 0x94DD, + 0x65B5, 0x94DE, + 0x65B6, 0x94DF, + 0x65B7, 0x94E0, + 0x65B8, 0x94E1, + 0x65BA, 0x94E2, + 0x65BB, 0x94E3, + 0x65BE, 0x94E4, + 0x65BF, 0x94E5, + 0x65C0, 0x94E6, + 0x65C2, 0x94E7, + 0x65C7, 0x94E8, + 0x65C8, 0x94E9, + 0x65C9, 0x94EA, + 0x65CA, 0x94EB, + 0x65CD, 0x94EC, + 0x65D0, 0x94ED, + 0x65D1, 0x94EE, + 0x65D3, 0x94EF, + 0x65D4, 0x94F0, + 0x65D5, 0x94F1, + 0x65D8, 0x94F2, + 0x65D9, 0x94F3, + 0x65DA, 0x94F4, + 0x65DB, 0x94F5, + 0x65DC, 0x94F6, + 0x65DD, 0x94F7, + 0x65DE, 0x94F8, + 0x65DF, 0x94F9, + 0x65E1, 0x94FA, + 0x65E3, 0x94FB, + 0x65E4, 0x94FC, + 0x65EA, 0x94FD, + 0x65EB, 0x94FE, + 0x65F2, 0x9540, + 0x65F3, 0x9541, + 0x65F4, 0x9542, + 0x65F5, 0x9543, + 0x65F8, 0x9544, + 0x65F9, 0x9545, + 0x65FB, 0x9546, + 0x65FC, 0x9547, + 0x65FD, 0x9548, + 0x65FE, 0x9549, + 0x65FF, 0x954A, + 0x6601, 0x954B, + 0x6604, 0x954C, + 0x6605, 0x954D, + 0x6607, 0x954E, + 0x6608, 0x954F, + 0x6609, 0x9550, + 0x660B, 0x9551, + 0x660D, 0x9552, + 0x6610, 0x9553, + 0x6611, 0x9554, + 0x6612, 0x9555, + 0x6616, 0x9556, + 0x6617, 0x9557, + 0x6618, 0x9558, + 0x661A, 0x9559, + 0x661B, 0x955A, + 0x661C, 0x955B, + 0x661E, 0x955C, + 0x6621, 0x955D, + 0x6622, 0x955E, + 0x6623, 0x955F, + 0x6624, 0x9560, + 0x6626, 0x9561, + 0x6629, 0x9562, + 0x662A, 0x9563, + 0x662B, 0x9564, + 0x662C, 0x9565, + 0x662E, 0x9566, + 0x6630, 0x9567, + 0x6632, 0x9568, + 0x6633, 0x9569, + 0x6637, 0x956A, + 0x6638, 0x956B, + 0x6639, 0x956C, + 0x663A, 0x956D, + 0x663B, 0x956E, + 0x663D, 0x956F, + 0x663F, 0x9570, + 0x6640, 0x9571, + 0x6642, 0x9572, + 0x6644, 0x9573, + 0x6645, 0x9574, + 0x6646, 0x9575, + 0x6647, 0x9576, + 0x6648, 0x9577, + 0x6649, 0x9578, + 0x664A, 0x9579, + 0x664D, 0x957A, + 0x664E, 0x957B, + 0x6650, 0x957C, + 0x6651, 0x957D, + 0x6658, 0x957E, + 0x6659, 0x9580, + 0x665B, 0x9581, + 0x665C, 0x9582, + 0x665D, 0x9583, + 0x665E, 0x9584, + 0x6660, 0x9585, + 0x6662, 0x9586, + 0x6663, 0x9587, + 0x6665, 0x9588, + 0x6667, 0x9589, + 0x6669, 0x958A, + 0x666A, 0x958B, + 0x666B, 0x958C, + 0x666C, 0x958D, + 0x666D, 0x958E, + 0x6671, 0x958F, + 0x6672, 0x9590, + 0x6673, 0x9591, + 0x6675, 0x9592, + 0x6678, 0x9593, + 0x6679, 0x9594, + 0x667B, 0x9595, + 0x667C, 0x9596, + 0x667D, 0x9597, + 0x667F, 0x9598, + 0x6680, 0x9599, + 0x6681, 0x959A, + 0x6683, 0x959B, + 0x6685, 0x959C, + 0x6686, 0x959D, + 0x6688, 0x959E, + 0x6689, 0x959F, + 0x668A, 0x95A0, + 0x668B, 0x95A1, + 0x668D, 0x95A2, + 0x668E, 0x95A3, + 0x668F, 0x95A4, + 0x6690, 0x95A5, + 0x6692, 0x95A6, + 0x6693, 0x95A7, + 0x6694, 0x95A8, + 0x6695, 0x95A9, + 0x6698, 0x95AA, + 0x6699, 0x95AB, + 0x669A, 0x95AC, + 0x669B, 0x95AD, + 0x669C, 0x95AE, + 0x669E, 0x95AF, + 0x669F, 0x95B0, + 0x66A0, 0x95B1, + 0x66A1, 0x95B2, + 0x66A2, 0x95B3, + 0x66A3, 0x95B4, + 0x66A4, 0x95B5, + 0x66A5, 0x95B6, + 0x66A6, 0x95B7, + 0x66A9, 0x95B8, + 0x66AA, 0x95B9, + 0x66AB, 0x95BA, + 0x66AC, 0x95BB, + 0x66AD, 0x95BC, + 0x66AF, 0x95BD, + 0x66B0, 0x95BE, + 0x66B1, 0x95BF, + 0x66B2, 0x95C0, + 0x66B3, 0x95C1, + 0x66B5, 0x95C2, + 0x66B6, 0x95C3, + 0x66B7, 0x95C4, + 0x66B8, 0x95C5, + 0x66BA, 0x95C6, + 0x66BB, 0x95C7, + 0x66BC, 0x95C8, + 0x66BD, 0x95C9, + 0x66BF, 0x95CA, + 0x66C0, 0x95CB, + 0x66C1, 0x95CC, + 0x66C2, 0x95CD, + 0x66C3, 0x95CE, + 0x66C4, 0x95CF, + 0x66C5, 0x95D0, + 0x66C6, 0x95D1, + 0x66C7, 0x95D2, + 0x66C8, 0x95D3, + 0x66C9, 0x95D4, + 0x66CA, 0x95D5, + 0x66CB, 0x95D6, + 0x66CC, 0x95D7, + 0x66CD, 0x95D8, + 0x66CE, 0x95D9, + 0x66CF, 0x95DA, + 0x66D0, 0x95DB, + 0x66D1, 0x95DC, + 0x66D2, 0x95DD, + 0x66D3, 0x95DE, + 0x66D4, 0x95DF, + 0x66D5, 0x95E0, + 0x66D6, 0x95E1, + 0x66D7, 0x95E2, + 0x66D8, 0x95E3, + 0x66DA, 0x95E4, + 0x66DE, 0x95E5, + 0x66DF, 0x95E6, + 0x66E0, 0x95E7, + 0x66E1, 0x95E8, + 0x66E2, 0x95E9, + 0x66E3, 0x95EA, + 0x66E4, 0x95EB, + 0x66E5, 0x95EC, + 0x66E7, 0x95ED, + 0x66E8, 0x95EE, + 0x66EA, 0x95EF, + 0x66EB, 0x95F0, + 0x66EC, 0x95F1, + 0x66ED, 0x95F2, + 0x66EE, 0x95F3, + 0x66EF, 0x95F4, + 0x66F1, 0x95F5, + 0x66F5, 0x95F6, + 0x66F6, 0x95F7, + 0x66F8, 0x95F8, + 0x66FA, 0x95F9, + 0x66FB, 0x95FA, + 0x66FD, 0x95FB, + 0x6701, 0x95FC, + 0x6702, 0x95FD, + 0x6703, 0x95FE, + 0x6704, 0x9640, + 0x6705, 0x9641, + 0x6706, 0x9642, + 0x6707, 0x9643, + 0x670C, 0x9644, + 0x670E, 0x9645, + 0x670F, 0x9646, + 0x6711, 0x9647, + 0x6712, 0x9648, + 0x6713, 0x9649, + 0x6716, 0x964A, + 0x6718, 0x964B, + 0x6719, 0x964C, + 0x671A, 0x964D, + 0x671C, 0x964E, + 0x671E, 0x964F, + 0x6720, 0x9650, + 0x6721, 0x9651, + 0x6722, 0x9652, + 0x6723, 0x9653, + 0x6724, 0x9654, + 0x6725, 0x9655, + 0x6727, 0x9656, + 0x6729, 0x9657, + 0x672E, 0x9658, + 0x6730, 0x9659, + 0x6732, 0x965A, + 0x6733, 0x965B, + 0x6736, 0x965C, + 0x6737, 0x965D, + 0x6738, 0x965E, + 0x6739, 0x965F, + 0x673B, 0x9660, + 0x673C, 0x9661, + 0x673E, 0x9662, + 0x673F, 0x9663, + 0x6741, 0x9664, + 0x6744, 0x9665, + 0x6745, 0x9666, + 0x6747, 0x9667, + 0x674A, 0x9668, + 0x674B, 0x9669, + 0x674D, 0x966A, + 0x6752, 0x966B, + 0x6754, 0x966C, + 0x6755, 0x966D, + 0x6757, 0x966E, + 0x6758, 0x966F, + 0x6759, 0x9670, + 0x675A, 0x9671, + 0x675B, 0x9672, + 0x675D, 0x9673, + 0x6762, 0x9674, + 0x6763, 0x9675, + 0x6764, 0x9676, + 0x6766, 0x9677, + 0x6767, 0x9678, + 0x676B, 0x9679, + 0x676C, 0x967A, + 0x676E, 0x967B, + 0x6771, 0x967C, + 0x6774, 0x967D, + 0x6776, 0x967E, + 0x6778, 0x9680, + 0x6779, 0x9681, + 0x677A, 0x9682, + 0x677B, 0x9683, + 0x677D, 0x9684, + 0x6780, 0x9685, + 0x6782, 0x9686, + 0x6783, 0x9687, + 0x6785, 0x9688, + 0x6786, 0x9689, + 0x6788, 0x968A, + 0x678A, 0x968B, + 0x678C, 0x968C, + 0x678D, 0x968D, + 0x678E, 0x968E, + 0x678F, 0x968F, + 0x6791, 0x9690, + 0x6792, 0x9691, + 0x6793, 0x9692, + 0x6794, 0x9693, + 0x6796, 0x9694, + 0x6799, 0x9695, + 0x679B, 0x9696, + 0x679F, 0x9697, + 0x67A0, 0x9698, + 0x67A1, 0x9699, + 0x67A4, 0x969A, + 0x67A6, 0x969B, + 0x67A9, 0x969C, + 0x67AC, 0x969D, + 0x67AE, 0x969E, + 0x67B1, 0x969F, + 0x67B2, 0x96A0, + 0x67B4, 0x96A1, + 0x67B9, 0x96A2, + 0x67BA, 0x96A3, + 0x67BB, 0x96A4, + 0x67BC, 0x96A5, + 0x67BD, 0x96A6, + 0x67BE, 0x96A7, + 0x67BF, 0x96A8, + 0x67C0, 0x96A9, + 0x67C2, 0x96AA, + 0x67C5, 0x96AB, + 0x67C6, 0x96AC, + 0x67C7, 0x96AD, + 0x67C8, 0x96AE, + 0x67C9, 0x96AF, + 0x67CA, 0x96B0, + 0x67CB, 0x96B1, + 0x67CC, 0x96B2, + 0x67CD, 0x96B3, + 0x67CE, 0x96B4, + 0x67D5, 0x96B5, + 0x67D6, 0x96B6, + 0x67D7, 0x96B7, + 0x67DB, 0x96B8, + 0x67DF, 0x96B9, + 0x67E1, 0x96BA, + 0x67E3, 0x96BB, + 0x67E4, 0x96BC, + 0x67E6, 0x96BD, + 0x67E7, 0x96BE, + 0x67E8, 0x96BF, + 0x67EA, 0x96C0, + 0x67EB, 0x96C1, + 0x67ED, 0x96C2, + 0x67EE, 0x96C3, + 0x67F2, 0x96C4, + 0x67F5, 0x96C5, + 0x67F6, 0x96C6, + 0x67F7, 0x96C7, + 0x67F8, 0x96C8, + 0x67F9, 0x96C9, + 0x67FA, 0x96CA, + 0x67FB, 0x96CB, + 0x67FC, 0x96CC, + 0x67FE, 0x96CD, + 0x6801, 0x96CE, + 0x6802, 0x96CF, + 0x6803, 0x96D0, + 0x6804, 0x96D1, + 0x6806, 0x96D2, + 0x680D, 0x96D3, + 0x6810, 0x96D4, + 0x6812, 0x96D5, + 0x6814, 0x96D6, + 0x6815, 0x96D7, + 0x6818, 0x96D8, + 0x6819, 0x96D9, + 0x681A, 0x96DA, + 0x681B, 0x96DB, + 0x681C, 0x96DC, + 0x681E, 0x96DD, + 0x681F, 0x96DE, + 0x6820, 0x96DF, + 0x6822, 0x96E0, + 0x6823, 0x96E1, + 0x6824, 0x96E2, + 0x6825, 0x96E3, + 0x6826, 0x96E4, + 0x6827, 0x96E5, + 0x6828, 0x96E6, + 0x682B, 0x96E7, + 0x682C, 0x96E8, + 0x682D, 0x96E9, + 0x682E, 0x96EA, + 0x682F, 0x96EB, + 0x6830, 0x96EC, + 0x6831, 0x96ED, + 0x6834, 0x96EE, + 0x6835, 0x96EF, + 0x6836, 0x96F0, + 0x683A, 0x96F1, + 0x683B, 0x96F2, + 0x683F, 0x96F3, + 0x6847, 0x96F4, + 0x684B, 0x96F5, + 0x684D, 0x96F6, + 0x684F, 0x96F7, + 0x6852, 0x96F8, + 0x6856, 0x96F9, + 0x6857, 0x96FA, + 0x6858, 0x96FB, + 0x6859, 0x96FC, + 0x685A, 0x96FD, + 0x685B, 0x96FE, + 0x685C, 0x9740, + 0x685D, 0x9741, + 0x685E, 0x9742, + 0x685F, 0x9743, + 0x686A, 0x9744, + 0x686C, 0x9745, + 0x686D, 0x9746, + 0x686E, 0x9747, + 0x686F, 0x9748, + 0x6870, 0x9749, + 0x6871, 0x974A, + 0x6872, 0x974B, + 0x6873, 0x974C, + 0x6875, 0x974D, + 0x6878, 0x974E, + 0x6879, 0x974F, + 0x687A, 0x9750, + 0x687B, 0x9751, + 0x687C, 0x9752, + 0x687D, 0x9753, + 0x687E, 0x9754, + 0x687F, 0x9755, + 0x6880, 0x9756, + 0x6882, 0x9757, + 0x6884, 0x9758, + 0x6887, 0x9759, + 0x6888, 0x975A, + 0x6889, 0x975B, + 0x688A, 0x975C, + 0x688B, 0x975D, + 0x688C, 0x975E, + 0x688D, 0x975F, + 0x688E, 0x9760, + 0x6890, 0x9761, + 0x6891, 0x9762, + 0x6892, 0x9763, + 0x6894, 0x9764, + 0x6895, 0x9765, + 0x6896, 0x9766, + 0x6898, 0x9767, + 0x6899, 0x9768, + 0x689A, 0x9769, + 0x689B, 0x976A, + 0x689C, 0x976B, + 0x689D, 0x976C, + 0x689E, 0x976D, + 0x689F, 0x976E, + 0x68A0, 0x976F, + 0x68A1, 0x9770, + 0x68A3, 0x9771, + 0x68A4, 0x9772, + 0x68A5, 0x9773, + 0x68A9, 0x9774, + 0x68AA, 0x9775, + 0x68AB, 0x9776, + 0x68AC, 0x9777, + 0x68AE, 0x9778, + 0x68B1, 0x9779, + 0x68B2, 0x977A, + 0x68B4, 0x977B, + 0x68B6, 0x977C, + 0x68B7, 0x977D, + 0x68B8, 0x977E, + 0x68B9, 0x9780, + 0x68BA, 0x9781, + 0x68BB, 0x9782, + 0x68BC, 0x9783, + 0x68BD, 0x9784, + 0x68BE, 0x9785, + 0x68BF, 0x9786, + 0x68C1, 0x9787, + 0x68C3, 0x9788, + 0x68C4, 0x9789, + 0x68C5, 0x978A, + 0x68C6, 0x978B, + 0x68C7, 0x978C, + 0x68C8, 0x978D, + 0x68CA, 0x978E, + 0x68CC, 0x978F, + 0x68CE, 0x9790, + 0x68CF, 0x9791, + 0x68D0, 0x9792, + 0x68D1, 0x9793, + 0x68D3, 0x9794, + 0x68D4, 0x9795, + 0x68D6, 0x9796, + 0x68D7, 0x9797, + 0x68D9, 0x9798, + 0x68DB, 0x9799, + 0x68DC, 0x979A, + 0x68DD, 0x979B, + 0x68DE, 0x979C, + 0x68DF, 0x979D, + 0x68E1, 0x979E, + 0x68E2, 0x979F, + 0x68E4, 0x97A0, + 0x68E5, 0x97A1, + 0x68E6, 0x97A2, + 0x68E7, 0x97A3, + 0x68E8, 0x97A4, + 0x68E9, 0x97A5, + 0x68EA, 0x97A6, + 0x68EB, 0x97A7, + 0x68EC, 0x97A8, + 0x68ED, 0x97A9, + 0x68EF, 0x97AA, + 0x68F2, 0x97AB, + 0x68F3, 0x97AC, + 0x68F4, 0x97AD, + 0x68F6, 0x97AE, + 0x68F7, 0x97AF, + 0x68F8, 0x97B0, + 0x68FB, 0x97B1, + 0x68FD, 0x97B2, + 0x68FE, 0x97B3, + 0x68FF, 0x97B4, + 0x6900, 0x97B5, + 0x6902, 0x97B6, + 0x6903, 0x97B7, + 0x6904, 0x97B8, + 0x6906, 0x97B9, + 0x6907, 0x97BA, + 0x6908, 0x97BB, + 0x6909, 0x97BC, + 0x690A, 0x97BD, + 0x690C, 0x97BE, + 0x690F, 0x97BF, + 0x6911, 0x97C0, + 0x6913, 0x97C1, + 0x6914, 0x97C2, + 0x6915, 0x97C3, + 0x6916, 0x97C4, + 0x6917, 0x97C5, + 0x6918, 0x97C6, + 0x6919, 0x97C7, + 0x691A, 0x97C8, + 0x691B, 0x97C9, + 0x691C, 0x97CA, + 0x691D, 0x97CB, + 0x691E, 0x97CC, + 0x6921, 0x97CD, + 0x6922, 0x97CE, + 0x6923, 0x97CF, + 0x6925, 0x97D0, + 0x6926, 0x97D1, + 0x6927, 0x97D2, + 0x6928, 0x97D3, + 0x6929, 0x97D4, + 0x692A, 0x97D5, + 0x692B, 0x97D6, + 0x692C, 0x97D7, + 0x692E, 0x97D8, + 0x692F, 0x97D9, + 0x6931, 0x97DA, + 0x6932, 0x97DB, + 0x6933, 0x97DC, + 0x6935, 0x97DD, + 0x6936, 0x97DE, + 0x6937, 0x97DF, + 0x6938, 0x97E0, + 0x693A, 0x97E1, + 0x693B, 0x97E2, + 0x693C, 0x97E3, + 0x693E, 0x97E4, + 0x6940, 0x97E5, + 0x6941, 0x97E6, + 0x6943, 0x97E7, + 0x6944, 0x97E8, + 0x6945, 0x97E9, + 0x6946, 0x97EA, + 0x6947, 0x97EB, + 0x6948, 0x97EC, + 0x6949, 0x97ED, + 0x694A, 0x97EE, + 0x694B, 0x97EF, + 0x694C, 0x97F0, + 0x694D, 0x97F1, + 0x694E, 0x97F2, + 0x694F, 0x97F3, + 0x6950, 0x97F4, + 0x6951, 0x97F5, + 0x6952, 0x97F6, + 0x6953, 0x97F7, + 0x6955, 0x97F8, + 0x6956, 0x97F9, + 0x6958, 0x97FA, + 0x6959, 0x97FB, + 0x695B, 0x97FC, + 0x695C, 0x97FD, + 0x695F, 0x97FE, + 0x6961, 0x9840, + 0x6962, 0x9841, + 0x6964, 0x9842, + 0x6965, 0x9843, + 0x6967, 0x9844, + 0x6968, 0x9845, + 0x6969, 0x9846, + 0x696A, 0x9847, + 0x696C, 0x9848, + 0x696D, 0x9849, + 0x696F, 0x984A, + 0x6970, 0x984B, + 0x6972, 0x984C, + 0x6973, 0x984D, + 0x6974, 0x984E, + 0x6975, 0x984F, + 0x6976, 0x9850, + 0x697A, 0x9851, + 0x697B, 0x9852, + 0x697D, 0x9853, + 0x697E, 0x9854, + 0x697F, 0x9855, + 0x6981, 0x9856, + 0x6983, 0x9857, + 0x6985, 0x9858, + 0x698A, 0x9859, + 0x698B, 0x985A, + 0x698C, 0x985B, + 0x698E, 0x985C, + 0x698F, 0x985D, + 0x6990, 0x985E, + 0x6991, 0x985F, + 0x6992, 0x9860, + 0x6993, 0x9861, + 0x6996, 0x9862, + 0x6997, 0x9863, + 0x6999, 0x9864, + 0x699A, 0x9865, + 0x699D, 0x9866, + 0x699E, 0x9867, + 0x699F, 0x9868, + 0x69A0, 0x9869, + 0x69A1, 0x986A, + 0x69A2, 0x986B, + 0x69A3, 0x986C, + 0x69A4, 0x986D, + 0x69A5, 0x986E, + 0x69A6, 0x986F, + 0x69A9, 0x9870, + 0x69AA, 0x9871, + 0x69AC, 0x9872, + 0x69AE, 0x9873, + 0x69AF, 0x9874, + 0x69B0, 0x9875, + 0x69B2, 0x9876, + 0x69B3, 0x9877, + 0x69B5, 0x9878, + 0x69B6, 0x9879, + 0x69B8, 0x987A, + 0x69B9, 0x987B, + 0x69BA, 0x987C, + 0x69BC, 0x987D, + 0x69BD, 0x987E, + 0x69BE, 0x9880, + 0x69BF, 0x9881, + 0x69C0, 0x9882, + 0x69C2, 0x9883, + 0x69C3, 0x9884, + 0x69C4, 0x9885, + 0x69C5, 0x9886, + 0x69C6, 0x9887, + 0x69C7, 0x9888, + 0x69C8, 0x9889, + 0x69C9, 0x988A, + 0x69CB, 0x988B, + 0x69CD, 0x988C, + 0x69CF, 0x988D, + 0x69D1, 0x988E, + 0x69D2, 0x988F, + 0x69D3, 0x9890, + 0x69D5, 0x9891, + 0x69D6, 0x9892, + 0x69D7, 0x9893, + 0x69D8, 0x9894, + 0x69D9, 0x9895, + 0x69DA, 0x9896, + 0x69DC, 0x9897, + 0x69DD, 0x9898, + 0x69DE, 0x9899, + 0x69E1, 0x989A, + 0x69E2, 0x989B, + 0x69E3, 0x989C, + 0x69E4, 0x989D, + 0x69E5, 0x989E, + 0x69E6, 0x989F, + 0x69E7, 0x98A0, + 0x69E8, 0x98A1, + 0x69E9, 0x98A2, + 0x69EA, 0x98A3, + 0x69EB, 0x98A4, + 0x69EC, 0x98A5, + 0x69EE, 0x98A6, + 0x69EF, 0x98A7, + 0x69F0, 0x98A8, + 0x69F1, 0x98A9, + 0x69F3, 0x98AA, + 0x69F4, 0x98AB, + 0x69F5, 0x98AC, + 0x69F6, 0x98AD, + 0x69F7, 0x98AE, + 0x69F8, 0x98AF, + 0x69F9, 0x98B0, + 0x69FA, 0x98B1, + 0x69FB, 0x98B2, + 0x69FC, 0x98B3, + 0x69FE, 0x98B4, + 0x6A00, 0x98B5, + 0x6A01, 0x98B6, + 0x6A02, 0x98B7, + 0x6A03, 0x98B8, + 0x6A04, 0x98B9, + 0x6A05, 0x98BA, + 0x6A06, 0x98BB, + 0x6A07, 0x98BC, + 0x6A08, 0x98BD, + 0x6A09, 0x98BE, + 0x6A0B, 0x98BF, + 0x6A0C, 0x98C0, + 0x6A0D, 0x98C1, + 0x6A0E, 0x98C2, + 0x6A0F, 0x98C3, + 0x6A10, 0x98C4, + 0x6A11, 0x98C5, + 0x6A12, 0x98C6, + 0x6A13, 0x98C7, + 0x6A14, 0x98C8, + 0x6A15, 0x98C9, + 0x6A16, 0x98CA, + 0x6A19, 0x98CB, + 0x6A1A, 0x98CC, + 0x6A1B, 0x98CD, + 0x6A1C, 0x98CE, + 0x6A1D, 0x98CF, + 0x6A1E, 0x98D0, + 0x6A20, 0x98D1, + 0x6A22, 0x98D2, + 0x6A23, 0x98D3, + 0x6A24, 0x98D4, + 0x6A25, 0x98D5, + 0x6A26, 0x98D6, + 0x6A27, 0x98D7, + 0x6A29, 0x98D8, + 0x6A2B, 0x98D9, + 0x6A2C, 0x98DA, + 0x6A2D, 0x98DB, + 0x6A2E, 0x98DC, + 0x6A30, 0x98DD, + 0x6A32, 0x98DE, + 0x6A33, 0x98DF, + 0x6A34, 0x98E0, + 0x6A36, 0x98E1, + 0x6A37, 0x98E2, + 0x6A38, 0x98E3, + 0x6A39, 0x98E4, + 0x6A3A, 0x98E5, + 0x6A3B, 0x98E6, + 0x6A3C, 0x98E7, + 0x6A3F, 0x98E8, + 0x6A40, 0x98E9, + 0x6A41, 0x98EA, + 0x6A42, 0x98EB, + 0x6A43, 0x98EC, + 0x6A45, 0x98ED, + 0x6A46, 0x98EE, + 0x6A48, 0x98EF, + 0x6A49, 0x98F0, + 0x6A4A, 0x98F1, + 0x6A4B, 0x98F2, + 0x6A4C, 0x98F3, + 0x6A4D, 0x98F4, + 0x6A4E, 0x98F5, + 0x6A4F, 0x98F6, + 0x6A51, 0x98F7, + 0x6A52, 0x98F8, + 0x6A53, 0x98F9, + 0x6A54, 0x98FA, + 0x6A55, 0x98FB, + 0x6A56, 0x98FC, + 0x6A57, 0x98FD, + 0x6A5A, 0x98FE, + 0x6A5C, 0x9940, + 0x6A5D, 0x9941, + 0x6A5E, 0x9942, + 0x6A5F, 0x9943, + 0x6A60, 0x9944, + 0x6A62, 0x9945, + 0x6A63, 0x9946, + 0x6A64, 0x9947, + 0x6A66, 0x9948, + 0x6A67, 0x9949, + 0x6A68, 0x994A, + 0x6A69, 0x994B, + 0x6A6A, 0x994C, + 0x6A6B, 0x994D, + 0x6A6C, 0x994E, + 0x6A6D, 0x994F, + 0x6A6E, 0x9950, + 0x6A6F, 0x9951, + 0x6A70, 0x9952, + 0x6A72, 0x9953, + 0x6A73, 0x9954, + 0x6A74, 0x9955, + 0x6A75, 0x9956, + 0x6A76, 0x9957, + 0x6A77, 0x9958, + 0x6A78, 0x9959, + 0x6A7A, 0x995A, + 0x6A7B, 0x995B, + 0x6A7D, 0x995C, + 0x6A7E, 0x995D, + 0x6A7F, 0x995E, + 0x6A81, 0x995F, + 0x6A82, 0x9960, + 0x6A83, 0x9961, + 0x6A85, 0x9962, + 0x6A86, 0x9963, + 0x6A87, 0x9964, + 0x6A88, 0x9965, + 0x6A89, 0x9966, + 0x6A8A, 0x9967, + 0x6A8B, 0x9968, + 0x6A8C, 0x9969, + 0x6A8D, 0x996A, + 0x6A8F, 0x996B, + 0x6A92, 0x996C, + 0x6A93, 0x996D, + 0x6A94, 0x996E, + 0x6A95, 0x996F, + 0x6A96, 0x9970, + 0x6A98, 0x9971, + 0x6A99, 0x9972, + 0x6A9A, 0x9973, + 0x6A9B, 0x9974, + 0x6A9C, 0x9975, + 0x6A9D, 0x9976, + 0x6A9E, 0x9977, + 0x6A9F, 0x9978, + 0x6AA1, 0x9979, + 0x6AA2, 0x997A, + 0x6AA3, 0x997B, + 0x6AA4, 0x997C, + 0x6AA5, 0x997D, + 0x6AA6, 0x997E, + 0x6AA7, 0x9980, + 0x6AA8, 0x9981, + 0x6AAA, 0x9982, + 0x6AAD, 0x9983, + 0x6AAE, 0x9984, + 0x6AAF, 0x9985, + 0x6AB0, 0x9986, + 0x6AB1, 0x9987, + 0x6AB2, 0x9988, + 0x6AB3, 0x9989, + 0x6AB4, 0x998A, + 0x6AB5, 0x998B, + 0x6AB6, 0x998C, + 0x6AB7, 0x998D, + 0x6AB8, 0x998E, + 0x6AB9, 0x998F, + 0x6ABA, 0x9990, + 0x6ABB, 0x9991, + 0x6ABC, 0x9992, + 0x6ABD, 0x9993, + 0x6ABE, 0x9994, + 0x6ABF, 0x9995, + 0x6AC0, 0x9996, + 0x6AC1, 0x9997, + 0x6AC2, 0x9998, + 0x6AC3, 0x9999, + 0x6AC4, 0x999A, + 0x6AC5, 0x999B, + 0x6AC6, 0x999C, + 0x6AC7, 0x999D, + 0x6AC8, 0x999E, + 0x6AC9, 0x999F, + 0x6ACA, 0x99A0, + 0x6ACB, 0x99A1, + 0x6ACC, 0x99A2, + 0x6ACD, 0x99A3, + 0x6ACE, 0x99A4, + 0x6ACF, 0x99A5, + 0x6AD0, 0x99A6, + 0x6AD1, 0x99A7, + 0x6AD2, 0x99A8, + 0x6AD3, 0x99A9, + 0x6AD4, 0x99AA, + 0x6AD5, 0x99AB, + 0x6AD6, 0x99AC, + 0x6AD7, 0x99AD, + 0x6AD8, 0x99AE, + 0x6AD9, 0x99AF, + 0x6ADA, 0x99B0, + 0x6ADB, 0x99B1, + 0x6ADC, 0x99B2, + 0x6ADD, 0x99B3, + 0x6ADE, 0x99B4, + 0x6ADF, 0x99B5, + 0x6AE0, 0x99B6, + 0x6AE1, 0x99B7, + 0x6AE2, 0x99B8, + 0x6AE3, 0x99B9, + 0x6AE4, 0x99BA, + 0x6AE5, 0x99BB, + 0x6AE6, 0x99BC, + 0x6AE7, 0x99BD, + 0x6AE8, 0x99BE, + 0x6AE9, 0x99BF, + 0x6AEA, 0x99C0, + 0x6AEB, 0x99C1, + 0x6AEC, 0x99C2, + 0x6AED, 0x99C3, + 0x6AEE, 0x99C4, + 0x6AEF, 0x99C5, + 0x6AF0, 0x99C6, + 0x6AF1, 0x99C7, + 0x6AF2, 0x99C8, + 0x6AF3, 0x99C9, + 0x6AF4, 0x99CA, + 0x6AF5, 0x99CB, + 0x6AF6, 0x99CC, + 0x6AF7, 0x99CD, + 0x6AF8, 0x99CE, + 0x6AF9, 0x99CF, + 0x6AFA, 0x99D0, + 0x6AFB, 0x99D1, + 0x6AFC, 0x99D2, + 0x6AFD, 0x99D3, + 0x6AFE, 0x99D4, + 0x6AFF, 0x99D5, + 0x6B00, 0x99D6, + 0x6B01, 0x99D7, + 0x6B02, 0x99D8, + 0x6B03, 0x99D9, + 0x6B04, 0x99DA, + 0x6B05, 0x99DB, + 0x6B06, 0x99DC, + 0x6B07, 0x99DD, + 0x6B08, 0x99DE, + 0x6B09, 0x99DF, + 0x6B0A, 0x99E0, + 0x6B0B, 0x99E1, + 0x6B0C, 0x99E2, + 0x6B0D, 0x99E3, + 0x6B0E, 0x99E4, + 0x6B0F, 0x99E5, + 0x6B10, 0x99E6, + 0x6B11, 0x99E7, + 0x6B12, 0x99E8, + 0x6B13, 0x99E9, + 0x6B14, 0x99EA, + 0x6B15, 0x99EB, + 0x6B16, 0x99EC, + 0x6B17, 0x99ED, + 0x6B18, 0x99EE, + 0x6B19, 0x99EF, + 0x6B1A, 0x99F0, + 0x6B1B, 0x99F1, + 0x6B1C, 0x99F2, + 0x6B1D, 0x99F3, + 0x6B1E, 0x99F4, + 0x6B1F, 0x99F5, + 0x6B25, 0x99F6, + 0x6B26, 0x99F7, + 0x6B28, 0x99F8, + 0x6B29, 0x99F9, + 0x6B2A, 0x99FA, + 0x6B2B, 0x99FB, + 0x6B2C, 0x99FC, + 0x6B2D, 0x99FD, + 0x6B2E, 0x99FE, + 0x6B2F, 0x9A40, + 0x6B30, 0x9A41, + 0x6B31, 0x9A42, + 0x6B33, 0x9A43, + 0x6B34, 0x9A44, + 0x6B35, 0x9A45, + 0x6B36, 0x9A46, + 0x6B38, 0x9A47, + 0x6B3B, 0x9A48, + 0x6B3C, 0x9A49, + 0x6B3D, 0x9A4A, + 0x6B3F, 0x9A4B, + 0x6B40, 0x9A4C, + 0x6B41, 0x9A4D, + 0x6B42, 0x9A4E, + 0x6B44, 0x9A4F, + 0x6B45, 0x9A50, + 0x6B48, 0x9A51, + 0x6B4A, 0x9A52, + 0x6B4B, 0x9A53, + 0x6B4D, 0x9A54, + 0x6B4E, 0x9A55, + 0x6B4F, 0x9A56, + 0x6B50, 0x9A57, + 0x6B51, 0x9A58, + 0x6B52, 0x9A59, + 0x6B53, 0x9A5A, + 0x6B54, 0x9A5B, + 0x6B55, 0x9A5C, + 0x6B56, 0x9A5D, + 0x6B57, 0x9A5E, + 0x6B58, 0x9A5F, + 0x6B5A, 0x9A60, + 0x6B5B, 0x9A61, + 0x6B5C, 0x9A62, + 0x6B5D, 0x9A63, + 0x6B5E, 0x9A64, + 0x6B5F, 0x9A65, + 0x6B60, 0x9A66, + 0x6B61, 0x9A67, + 0x6B68, 0x9A68, + 0x6B69, 0x9A69, + 0x6B6B, 0x9A6A, + 0x6B6C, 0x9A6B, + 0x6B6D, 0x9A6C, + 0x6B6E, 0x9A6D, + 0x6B6F, 0x9A6E, + 0x6B70, 0x9A6F, + 0x6B71, 0x9A70, + 0x6B72, 0x9A71, + 0x6B73, 0x9A72, + 0x6B74, 0x9A73, + 0x6B75, 0x9A74, + 0x6B76, 0x9A75, + 0x6B77, 0x9A76, + 0x6B78, 0x9A77, + 0x6B7A, 0x9A78, + 0x6B7D, 0x9A79, + 0x6B7E, 0x9A7A, + 0x6B7F, 0x9A7B, + 0x6B80, 0x9A7C, + 0x6B85, 0x9A7D, + 0x6B88, 0x9A7E, + 0x6B8C, 0x9A80, + 0x6B8E, 0x9A81, + 0x6B8F, 0x9A82, + 0x6B90, 0x9A83, + 0x6B91, 0x9A84, + 0x6B94, 0x9A85, + 0x6B95, 0x9A86, + 0x6B97, 0x9A87, + 0x6B98, 0x9A88, + 0x6B99, 0x9A89, + 0x6B9C, 0x9A8A, + 0x6B9D, 0x9A8B, + 0x6B9E, 0x9A8C, + 0x6B9F, 0x9A8D, + 0x6BA0, 0x9A8E, + 0x6BA2, 0x9A8F, + 0x6BA3, 0x9A90, + 0x6BA4, 0x9A91, + 0x6BA5, 0x9A92, + 0x6BA6, 0x9A93, + 0x6BA7, 0x9A94, + 0x6BA8, 0x9A95, + 0x6BA9, 0x9A96, + 0x6BAB, 0x9A97, + 0x6BAC, 0x9A98, + 0x6BAD, 0x9A99, + 0x6BAE, 0x9A9A, + 0x6BAF, 0x9A9B, + 0x6BB0, 0x9A9C, + 0x6BB1, 0x9A9D, + 0x6BB2, 0x9A9E, + 0x6BB6, 0x9A9F, + 0x6BB8, 0x9AA0, + 0x6BB9, 0x9AA1, + 0x6BBA, 0x9AA2, + 0x6BBB, 0x9AA3, + 0x6BBC, 0x9AA4, + 0x6BBD, 0x9AA5, + 0x6BBE, 0x9AA6, + 0x6BC0, 0x9AA7, + 0x6BC3, 0x9AA8, + 0x6BC4, 0x9AA9, + 0x6BC6, 0x9AAA, + 0x6BC7, 0x9AAB, + 0x6BC8, 0x9AAC, + 0x6BC9, 0x9AAD, + 0x6BCA, 0x9AAE, + 0x6BCC, 0x9AAF, + 0x6BCE, 0x9AB0, + 0x6BD0, 0x9AB1, + 0x6BD1, 0x9AB2, + 0x6BD8, 0x9AB3, + 0x6BDA, 0x9AB4, + 0x6BDC, 0x9AB5, + 0x6BDD, 0x9AB6, + 0x6BDE, 0x9AB7, + 0x6BDF, 0x9AB8, + 0x6BE0, 0x9AB9, + 0x6BE2, 0x9ABA, + 0x6BE3, 0x9ABB, + 0x6BE4, 0x9ABC, + 0x6BE5, 0x9ABD, + 0x6BE6, 0x9ABE, + 0x6BE7, 0x9ABF, + 0x6BE8, 0x9AC0, + 0x6BE9, 0x9AC1, + 0x6BEC, 0x9AC2, + 0x6BED, 0x9AC3, + 0x6BEE, 0x9AC4, + 0x6BF0, 0x9AC5, + 0x6BF1, 0x9AC6, + 0x6BF2, 0x9AC7, + 0x6BF4, 0x9AC8, + 0x6BF6, 0x9AC9, + 0x6BF7, 0x9ACA, + 0x6BF8, 0x9ACB, + 0x6BFA, 0x9ACC, + 0x6BFB, 0x9ACD, + 0x6BFC, 0x9ACE, + 0x6BFE, 0x9ACF, + 0x6BFF, 0x9AD0, + 0x6C00, 0x9AD1, + 0x6C01, 0x9AD2, + 0x6C02, 0x9AD3, + 0x6C03, 0x9AD4, + 0x6C04, 0x9AD5, + 0x6C08, 0x9AD6, + 0x6C09, 0x9AD7, + 0x6C0A, 0x9AD8, + 0x6C0B, 0x9AD9, + 0x6C0C, 0x9ADA, + 0x6C0E, 0x9ADB, + 0x6C12, 0x9ADC, + 0x6C17, 0x9ADD, + 0x6C1C, 0x9ADE, + 0x6C1D, 0x9ADF, + 0x6C1E, 0x9AE0, + 0x6C20, 0x9AE1, + 0x6C23, 0x9AE2, + 0x6C25, 0x9AE3, + 0x6C2B, 0x9AE4, + 0x6C2C, 0x9AE5, + 0x6C2D, 0x9AE6, + 0x6C31, 0x9AE7, + 0x6C33, 0x9AE8, + 0x6C36, 0x9AE9, + 0x6C37, 0x9AEA, + 0x6C39, 0x9AEB, + 0x6C3A, 0x9AEC, + 0x6C3B, 0x9AED, + 0x6C3C, 0x9AEE, + 0x6C3E, 0x9AEF, + 0x6C3F, 0x9AF0, + 0x6C43, 0x9AF1, + 0x6C44, 0x9AF2, + 0x6C45, 0x9AF3, + 0x6C48, 0x9AF4, + 0x6C4B, 0x9AF5, + 0x6C4C, 0x9AF6, + 0x6C4D, 0x9AF7, + 0x6C4E, 0x9AF8, + 0x6C4F, 0x9AF9, + 0x6C51, 0x9AFA, + 0x6C52, 0x9AFB, + 0x6C53, 0x9AFC, + 0x6C56, 0x9AFD, + 0x6C58, 0x9AFE, + 0x6C59, 0x9B40, + 0x6C5A, 0x9B41, + 0x6C62, 0x9B42, + 0x6C63, 0x9B43, + 0x6C65, 0x9B44, + 0x6C66, 0x9B45, + 0x6C67, 0x9B46, + 0x6C6B, 0x9B47, + 0x6C6C, 0x9B48, + 0x6C6D, 0x9B49, + 0x6C6E, 0x9B4A, + 0x6C6F, 0x9B4B, + 0x6C71, 0x9B4C, + 0x6C73, 0x9B4D, + 0x6C75, 0x9B4E, + 0x6C77, 0x9B4F, + 0x6C78, 0x9B50, + 0x6C7A, 0x9B51, + 0x6C7B, 0x9B52, + 0x6C7C, 0x9B53, + 0x6C7F, 0x9B54, + 0x6C80, 0x9B55, + 0x6C84, 0x9B56, + 0x6C87, 0x9B57, + 0x6C8A, 0x9B58, + 0x6C8B, 0x9B59, + 0x6C8D, 0x9B5A, + 0x6C8E, 0x9B5B, + 0x6C91, 0x9B5C, + 0x6C92, 0x9B5D, + 0x6C95, 0x9B5E, + 0x6C96, 0x9B5F, + 0x6C97, 0x9B60, + 0x6C98, 0x9B61, + 0x6C9A, 0x9B62, + 0x6C9C, 0x9B63, + 0x6C9D, 0x9B64, + 0x6C9E, 0x9B65, + 0x6CA0, 0x9B66, + 0x6CA2, 0x9B67, + 0x6CA8, 0x9B68, + 0x6CAC, 0x9B69, + 0x6CAF, 0x9B6A, + 0x6CB0, 0x9B6B, + 0x6CB4, 0x9B6C, + 0x6CB5, 0x9B6D, + 0x6CB6, 0x9B6E, + 0x6CB7, 0x9B6F, + 0x6CBA, 0x9B70, + 0x6CC0, 0x9B71, + 0x6CC1, 0x9B72, + 0x6CC2, 0x9B73, + 0x6CC3, 0x9B74, + 0x6CC6, 0x9B75, + 0x6CC7, 0x9B76, + 0x6CC8, 0x9B77, + 0x6CCB, 0x9B78, + 0x6CCD, 0x9B79, + 0x6CCE, 0x9B7A, + 0x6CCF, 0x9B7B, + 0x6CD1, 0x9B7C, + 0x6CD2, 0x9B7D, + 0x6CD8, 0x9B7E, + 0x6CD9, 0x9B80, + 0x6CDA, 0x9B81, + 0x6CDC, 0x9B82, + 0x6CDD, 0x9B83, + 0x6CDF, 0x9B84, + 0x6CE4, 0x9B85, + 0x6CE6, 0x9B86, + 0x6CE7, 0x9B87, + 0x6CE9, 0x9B88, + 0x6CEC, 0x9B89, + 0x6CED, 0x9B8A, + 0x6CF2, 0x9B8B, + 0x6CF4, 0x9B8C, + 0x6CF9, 0x9B8D, + 0x6CFF, 0x9B8E, + 0x6D00, 0x9B8F, + 0x6D02, 0x9B90, + 0x6D03, 0x9B91, + 0x6D05, 0x9B92, + 0x6D06, 0x9B93, + 0x6D08, 0x9B94, + 0x6D09, 0x9B95, + 0x6D0A, 0x9B96, + 0x6D0D, 0x9B97, + 0x6D0F, 0x9B98, + 0x6D10, 0x9B99, + 0x6D11, 0x9B9A, + 0x6D13, 0x9B9B, + 0x6D14, 0x9B9C, + 0x6D15, 0x9B9D, + 0x6D16, 0x9B9E, + 0x6D18, 0x9B9F, + 0x6D1C, 0x9BA0, + 0x6D1D, 0x9BA1, + 0x6D1F, 0x9BA2, + 0x6D20, 0x9BA3, + 0x6D21, 0x9BA4, + 0x6D22, 0x9BA5, + 0x6D23, 0x9BA6, + 0x6D24, 0x9BA7, + 0x6D26, 0x9BA8, + 0x6D28, 0x9BA9, + 0x6D29, 0x9BAA, + 0x6D2C, 0x9BAB, + 0x6D2D, 0x9BAC, + 0x6D2F, 0x9BAD, + 0x6D30, 0x9BAE, + 0x6D34, 0x9BAF, + 0x6D36, 0x9BB0, + 0x6D37, 0x9BB1, + 0x6D38, 0x9BB2, + 0x6D3A, 0x9BB3, + 0x6D3F, 0x9BB4, + 0x6D40, 0x9BB5, + 0x6D42, 0x9BB6, + 0x6D44, 0x9BB7, + 0x6D49, 0x9BB8, + 0x6D4C, 0x9BB9, + 0x6D50, 0x9BBA, + 0x6D55, 0x9BBB, + 0x6D56, 0x9BBC, + 0x6D57, 0x9BBD, + 0x6D58, 0x9BBE, + 0x6D5B, 0x9BBF, + 0x6D5D, 0x9BC0, + 0x6D5F, 0x9BC1, + 0x6D61, 0x9BC2, + 0x6D62, 0x9BC3, + 0x6D64, 0x9BC4, + 0x6D65, 0x9BC5, + 0x6D67, 0x9BC6, + 0x6D68, 0x9BC7, + 0x6D6B, 0x9BC8, + 0x6D6C, 0x9BC9, + 0x6D6D, 0x9BCA, + 0x6D70, 0x9BCB, + 0x6D71, 0x9BCC, + 0x6D72, 0x9BCD, + 0x6D73, 0x9BCE, + 0x6D75, 0x9BCF, + 0x6D76, 0x9BD0, + 0x6D79, 0x9BD1, + 0x6D7A, 0x9BD2, + 0x6D7B, 0x9BD3, + 0x6D7D, 0x9BD4, + 0x6D7E, 0x9BD5, + 0x6D7F, 0x9BD6, + 0x6D80, 0x9BD7, + 0x6D81, 0x9BD8, + 0x6D83, 0x9BD9, + 0x6D84, 0x9BDA, + 0x6D86, 0x9BDB, + 0x6D87, 0x9BDC, + 0x6D8A, 0x9BDD, + 0x6D8B, 0x9BDE, + 0x6D8D, 0x9BDF, + 0x6D8F, 0x9BE0, + 0x6D90, 0x9BE1, + 0x6D92, 0x9BE2, + 0x6D96, 0x9BE3, + 0x6D97, 0x9BE4, + 0x6D98, 0x9BE5, + 0x6D99, 0x9BE6, + 0x6D9A, 0x9BE7, + 0x6D9C, 0x9BE8, + 0x6DA2, 0x9BE9, + 0x6DA5, 0x9BEA, + 0x6DAC, 0x9BEB, + 0x6DAD, 0x9BEC, + 0x6DB0, 0x9BED, + 0x6DB1, 0x9BEE, + 0x6DB3, 0x9BEF, + 0x6DB4, 0x9BF0, + 0x6DB6, 0x9BF1, + 0x6DB7, 0x9BF2, + 0x6DB9, 0x9BF3, + 0x6DBA, 0x9BF4, + 0x6DBB, 0x9BF5, + 0x6DBC, 0x9BF6, + 0x6DBD, 0x9BF7, + 0x6DBE, 0x9BF8, + 0x6DC1, 0x9BF9, + 0x6DC2, 0x9BFA, + 0x6DC3, 0x9BFB, + 0x6DC8, 0x9BFC, + 0x6DC9, 0x9BFD, + 0x6DCA, 0x9BFE, + 0x6DCD, 0x9C40, + 0x6DCE, 0x9C41, + 0x6DCF, 0x9C42, + 0x6DD0, 0x9C43, + 0x6DD2, 0x9C44, + 0x6DD3, 0x9C45, + 0x6DD4, 0x9C46, + 0x6DD5, 0x9C47, + 0x6DD7, 0x9C48, + 0x6DDA, 0x9C49, + 0x6DDB, 0x9C4A, + 0x6DDC, 0x9C4B, + 0x6DDF, 0x9C4C, + 0x6DE2, 0x9C4D, + 0x6DE3, 0x9C4E, + 0x6DE5, 0x9C4F, + 0x6DE7, 0x9C50, + 0x6DE8, 0x9C51, + 0x6DE9, 0x9C52, + 0x6DEA, 0x9C53, + 0x6DED, 0x9C54, + 0x6DEF, 0x9C55, + 0x6DF0, 0x9C56, + 0x6DF2, 0x9C57, + 0x6DF4, 0x9C58, + 0x6DF5, 0x9C59, + 0x6DF6, 0x9C5A, + 0x6DF8, 0x9C5B, + 0x6DFA, 0x9C5C, + 0x6DFD, 0x9C5D, + 0x6DFE, 0x9C5E, + 0x6DFF, 0x9C5F, + 0x6E00, 0x9C60, + 0x6E01, 0x9C61, + 0x6E02, 0x9C62, + 0x6E03, 0x9C63, + 0x6E04, 0x9C64, + 0x6E06, 0x9C65, + 0x6E07, 0x9C66, + 0x6E08, 0x9C67, + 0x6E09, 0x9C68, + 0x6E0B, 0x9C69, + 0x6E0F, 0x9C6A, + 0x6E12, 0x9C6B, + 0x6E13, 0x9C6C, + 0x6E15, 0x9C6D, + 0x6E18, 0x9C6E, + 0x6E19, 0x9C6F, + 0x6E1B, 0x9C70, + 0x6E1C, 0x9C71, + 0x6E1E, 0x9C72, + 0x6E1F, 0x9C73, + 0x6E22, 0x9C74, + 0x6E26, 0x9C75, + 0x6E27, 0x9C76, + 0x6E28, 0x9C77, + 0x6E2A, 0x9C78, + 0x6E2C, 0x9C79, + 0x6E2E, 0x9C7A, + 0x6E30, 0x9C7B, + 0x6E31, 0x9C7C, + 0x6E33, 0x9C7D, + 0x6E35, 0x9C7E, + 0x6E36, 0x9C80, + 0x6E37, 0x9C81, + 0x6E39, 0x9C82, + 0x6E3B, 0x9C83, + 0x6E3C, 0x9C84, + 0x6E3D, 0x9C85, + 0x6E3E, 0x9C86, + 0x6E3F, 0x9C87, + 0x6E40, 0x9C88, + 0x6E41, 0x9C89, + 0x6E42, 0x9C8A, + 0x6E45, 0x9C8B, + 0x6E46, 0x9C8C, + 0x6E47, 0x9C8D, + 0x6E48, 0x9C8E, + 0x6E49, 0x9C8F, + 0x6E4A, 0x9C90, + 0x6E4B, 0x9C91, + 0x6E4C, 0x9C92, + 0x6E4F, 0x9C93, + 0x6E50, 0x9C94, + 0x6E51, 0x9C95, + 0x6E52, 0x9C96, + 0x6E55, 0x9C97, + 0x6E57, 0x9C98, + 0x6E59, 0x9C99, + 0x6E5A, 0x9C9A, + 0x6E5C, 0x9C9B, + 0x6E5D, 0x9C9C, + 0x6E5E, 0x9C9D, + 0x6E60, 0x9C9E, + 0x6E61, 0x9C9F, + 0x6E62, 0x9CA0, + 0x6E63, 0x9CA1, + 0x6E64, 0x9CA2, + 0x6E65, 0x9CA3, + 0x6E66, 0x9CA4, + 0x6E67, 0x9CA5, + 0x6E68, 0x9CA6, + 0x6E69, 0x9CA7, + 0x6E6A, 0x9CA8, + 0x6E6C, 0x9CA9, + 0x6E6D, 0x9CAA, + 0x6E6F, 0x9CAB, + 0x6E70, 0x9CAC, + 0x6E71, 0x9CAD, + 0x6E72, 0x9CAE, + 0x6E73, 0x9CAF, + 0x6E74, 0x9CB0, + 0x6E75, 0x9CB1, + 0x6E76, 0x9CB2, + 0x6E77, 0x9CB3, + 0x6E78, 0x9CB4, + 0x6E79, 0x9CB5, + 0x6E7A, 0x9CB6, + 0x6E7B, 0x9CB7, + 0x6E7C, 0x9CB8, + 0x6E7D, 0x9CB9, + 0x6E80, 0x9CBA, + 0x6E81, 0x9CBB, + 0x6E82, 0x9CBC, + 0x6E84, 0x9CBD, + 0x6E87, 0x9CBE, + 0x6E88, 0x9CBF, + 0x6E8A, 0x9CC0, + 0x6E8B, 0x9CC1, + 0x6E8C, 0x9CC2, + 0x6E8D, 0x9CC3, + 0x6E8E, 0x9CC4, + 0x6E91, 0x9CC5, + 0x6E92, 0x9CC6, + 0x6E93, 0x9CC7, + 0x6E94, 0x9CC8, + 0x6E95, 0x9CC9, + 0x6E96, 0x9CCA, + 0x6E97, 0x9CCB, + 0x6E99, 0x9CCC, + 0x6E9A, 0x9CCD, + 0x6E9B, 0x9CCE, + 0x6E9D, 0x9CCF, + 0x6E9E, 0x9CD0, + 0x6EA0, 0x9CD1, + 0x6EA1, 0x9CD2, + 0x6EA3, 0x9CD3, + 0x6EA4, 0x9CD4, + 0x6EA6, 0x9CD5, + 0x6EA8, 0x9CD6, + 0x6EA9, 0x9CD7, + 0x6EAB, 0x9CD8, + 0x6EAC, 0x9CD9, + 0x6EAD, 0x9CDA, + 0x6EAE, 0x9CDB, + 0x6EB0, 0x9CDC, + 0x6EB3, 0x9CDD, + 0x6EB5, 0x9CDE, + 0x6EB8, 0x9CDF, + 0x6EB9, 0x9CE0, + 0x6EBC, 0x9CE1, + 0x6EBE, 0x9CE2, + 0x6EBF, 0x9CE3, + 0x6EC0, 0x9CE4, + 0x6EC3, 0x9CE5, + 0x6EC4, 0x9CE6, + 0x6EC5, 0x9CE7, + 0x6EC6, 0x9CE8, + 0x6EC8, 0x9CE9, + 0x6EC9, 0x9CEA, + 0x6ECA, 0x9CEB, + 0x6ECC, 0x9CEC, + 0x6ECD, 0x9CED, + 0x6ECE, 0x9CEE, + 0x6ED0, 0x9CEF, + 0x6ED2, 0x9CF0, + 0x6ED6, 0x9CF1, + 0x6ED8, 0x9CF2, + 0x6ED9, 0x9CF3, + 0x6EDB, 0x9CF4, + 0x6EDC, 0x9CF5, + 0x6EDD, 0x9CF6, + 0x6EE3, 0x9CF7, + 0x6EE7, 0x9CF8, + 0x6EEA, 0x9CF9, + 0x6EEB, 0x9CFA, + 0x6EEC, 0x9CFB, + 0x6EED, 0x9CFC, + 0x6EEE, 0x9CFD, + 0x6EEF, 0x9CFE, + 0x6EF0, 0x9D40, + 0x6EF1, 0x9D41, + 0x6EF2, 0x9D42, + 0x6EF3, 0x9D43, + 0x6EF5, 0x9D44, + 0x6EF6, 0x9D45, + 0x6EF7, 0x9D46, + 0x6EF8, 0x9D47, + 0x6EFA, 0x9D48, + 0x6EFB, 0x9D49, + 0x6EFC, 0x9D4A, + 0x6EFD, 0x9D4B, + 0x6EFE, 0x9D4C, + 0x6EFF, 0x9D4D, + 0x6F00, 0x9D4E, + 0x6F01, 0x9D4F, + 0x6F03, 0x9D50, + 0x6F04, 0x9D51, + 0x6F05, 0x9D52, + 0x6F07, 0x9D53, + 0x6F08, 0x9D54, + 0x6F0A, 0x9D55, + 0x6F0B, 0x9D56, + 0x6F0C, 0x9D57, + 0x6F0D, 0x9D58, + 0x6F0E, 0x9D59, + 0x6F10, 0x9D5A, + 0x6F11, 0x9D5B, + 0x6F12, 0x9D5C, + 0x6F16, 0x9D5D, + 0x6F17, 0x9D5E, + 0x6F18, 0x9D5F, + 0x6F19, 0x9D60, + 0x6F1A, 0x9D61, + 0x6F1B, 0x9D62, + 0x6F1C, 0x9D63, + 0x6F1D, 0x9D64, + 0x6F1E, 0x9D65, + 0x6F1F, 0x9D66, + 0x6F21, 0x9D67, + 0x6F22, 0x9D68, + 0x6F23, 0x9D69, + 0x6F25, 0x9D6A, + 0x6F26, 0x9D6B, + 0x6F27, 0x9D6C, + 0x6F28, 0x9D6D, + 0x6F2C, 0x9D6E, + 0x6F2E, 0x9D6F, + 0x6F30, 0x9D70, + 0x6F32, 0x9D71, + 0x6F34, 0x9D72, + 0x6F35, 0x9D73, + 0x6F37, 0x9D74, + 0x6F38, 0x9D75, + 0x6F39, 0x9D76, + 0x6F3A, 0x9D77, + 0x6F3B, 0x9D78, + 0x6F3C, 0x9D79, + 0x6F3D, 0x9D7A, + 0x6F3F, 0x9D7B, + 0x6F40, 0x9D7C, + 0x6F41, 0x9D7D, + 0x6F42, 0x9D7E, + 0x6F43, 0x9D80, + 0x6F44, 0x9D81, + 0x6F45, 0x9D82, + 0x6F48, 0x9D83, + 0x6F49, 0x9D84, + 0x6F4A, 0x9D85, + 0x6F4C, 0x9D86, + 0x6F4E, 0x9D87, + 0x6F4F, 0x9D88, + 0x6F50, 0x9D89, + 0x6F51, 0x9D8A, + 0x6F52, 0x9D8B, + 0x6F53, 0x9D8C, + 0x6F54, 0x9D8D, + 0x6F55, 0x9D8E, + 0x6F56, 0x9D8F, + 0x6F57, 0x9D90, + 0x6F59, 0x9D91, + 0x6F5A, 0x9D92, + 0x6F5B, 0x9D93, + 0x6F5D, 0x9D94, + 0x6F5F, 0x9D95, + 0x6F60, 0x9D96, + 0x6F61, 0x9D97, + 0x6F63, 0x9D98, + 0x6F64, 0x9D99, + 0x6F65, 0x9D9A, + 0x6F67, 0x9D9B, + 0x6F68, 0x9D9C, + 0x6F69, 0x9D9D, + 0x6F6A, 0x9D9E, + 0x6F6B, 0x9D9F, + 0x6F6C, 0x9DA0, + 0x6F6F, 0x9DA1, + 0x6F70, 0x9DA2, + 0x6F71, 0x9DA3, + 0x6F73, 0x9DA4, + 0x6F75, 0x9DA5, + 0x6F76, 0x9DA6, + 0x6F77, 0x9DA7, + 0x6F79, 0x9DA8, + 0x6F7B, 0x9DA9, + 0x6F7D, 0x9DAA, + 0x6F7E, 0x9DAB, + 0x6F7F, 0x9DAC, + 0x6F80, 0x9DAD, + 0x6F81, 0x9DAE, + 0x6F82, 0x9DAF, + 0x6F83, 0x9DB0, + 0x6F85, 0x9DB1, + 0x6F86, 0x9DB2, + 0x6F87, 0x9DB3, + 0x6F8A, 0x9DB4, + 0x6F8B, 0x9DB5, + 0x6F8F, 0x9DB6, + 0x6F90, 0x9DB7, + 0x6F91, 0x9DB8, + 0x6F92, 0x9DB9, + 0x6F93, 0x9DBA, + 0x6F94, 0x9DBB, + 0x6F95, 0x9DBC, + 0x6F96, 0x9DBD, + 0x6F97, 0x9DBE, + 0x6F98, 0x9DBF, + 0x6F99, 0x9DC0, + 0x6F9A, 0x9DC1, + 0x6F9B, 0x9DC2, + 0x6F9D, 0x9DC3, + 0x6F9E, 0x9DC4, + 0x6F9F, 0x9DC5, + 0x6FA0, 0x9DC6, + 0x6FA2, 0x9DC7, + 0x6FA3, 0x9DC8, + 0x6FA4, 0x9DC9, + 0x6FA5, 0x9DCA, + 0x6FA6, 0x9DCB, + 0x6FA8, 0x9DCC, + 0x6FA9, 0x9DCD, + 0x6FAA, 0x9DCE, + 0x6FAB, 0x9DCF, + 0x6FAC, 0x9DD0, + 0x6FAD, 0x9DD1, + 0x6FAE, 0x9DD2, + 0x6FAF, 0x9DD3, + 0x6FB0, 0x9DD4, + 0x6FB1, 0x9DD5, + 0x6FB2, 0x9DD6, + 0x6FB4, 0x9DD7, + 0x6FB5, 0x9DD8, + 0x6FB7, 0x9DD9, + 0x6FB8, 0x9DDA, + 0x6FBA, 0x9DDB, + 0x6FBB, 0x9DDC, + 0x6FBC, 0x9DDD, + 0x6FBD, 0x9DDE, + 0x6FBE, 0x9DDF, + 0x6FBF, 0x9DE0, + 0x6FC1, 0x9DE1, + 0x6FC3, 0x9DE2, + 0x6FC4, 0x9DE3, + 0x6FC5, 0x9DE4, + 0x6FC6, 0x9DE5, + 0x6FC7, 0x9DE6, + 0x6FC8, 0x9DE7, + 0x6FCA, 0x9DE8, + 0x6FCB, 0x9DE9, + 0x6FCC, 0x9DEA, + 0x6FCD, 0x9DEB, + 0x6FCE, 0x9DEC, + 0x6FCF, 0x9DED, + 0x6FD0, 0x9DEE, + 0x6FD3, 0x9DEF, + 0x6FD4, 0x9DF0, + 0x6FD5, 0x9DF1, + 0x6FD6, 0x9DF2, + 0x6FD7, 0x9DF3, + 0x6FD8, 0x9DF4, + 0x6FD9, 0x9DF5, + 0x6FDA, 0x9DF6, + 0x6FDB, 0x9DF7, + 0x6FDC, 0x9DF8, + 0x6FDD, 0x9DF9, + 0x6FDF, 0x9DFA, + 0x6FE2, 0x9DFB, + 0x6FE3, 0x9DFC, + 0x6FE4, 0x9DFD, + 0x6FE5, 0x9DFE, + 0x6FE6, 0x9E40, + 0x6FE7, 0x9E41, + 0x6FE8, 0x9E42, + 0x6FE9, 0x9E43, + 0x6FEA, 0x9E44, + 0x6FEB, 0x9E45, + 0x6FEC, 0x9E46, + 0x6FED, 0x9E47, + 0x6FF0, 0x9E48, + 0x6FF1, 0x9E49, + 0x6FF2, 0x9E4A, + 0x6FF3, 0x9E4B, + 0x6FF4, 0x9E4C, + 0x6FF5, 0x9E4D, + 0x6FF6, 0x9E4E, + 0x6FF7, 0x9E4F, + 0x6FF8, 0x9E50, + 0x6FF9, 0x9E51, + 0x6FFA, 0x9E52, + 0x6FFB, 0x9E53, + 0x6FFC, 0x9E54, + 0x6FFD, 0x9E55, + 0x6FFE, 0x9E56, + 0x6FFF, 0x9E57, + 0x7000, 0x9E58, + 0x7001, 0x9E59, + 0x7002, 0x9E5A, + 0x7003, 0x9E5B, + 0x7004, 0x9E5C, + 0x7005, 0x9E5D, + 0x7006, 0x9E5E, + 0x7007, 0x9E5F, + 0x7008, 0x9E60, + 0x7009, 0x9E61, + 0x700A, 0x9E62, + 0x700B, 0x9E63, + 0x700C, 0x9E64, + 0x700D, 0x9E65, + 0x700E, 0x9E66, + 0x700F, 0x9E67, + 0x7010, 0x9E68, + 0x7012, 0x9E69, + 0x7013, 0x9E6A, + 0x7014, 0x9E6B, + 0x7015, 0x9E6C, + 0x7016, 0x9E6D, + 0x7017, 0x9E6E, + 0x7018, 0x9E6F, + 0x7019, 0x9E70, + 0x701C, 0x9E71, + 0x701D, 0x9E72, + 0x701E, 0x9E73, + 0x701F, 0x9E74, + 0x7020, 0x9E75, + 0x7021, 0x9E76, + 0x7022, 0x9E77, + 0x7024, 0x9E78, + 0x7025, 0x9E79, + 0x7026, 0x9E7A, + 0x7027, 0x9E7B, + 0x7028, 0x9E7C, + 0x7029, 0x9E7D, + 0x702A, 0x9E7E, + 0x702B, 0x9E80, + 0x702C, 0x9E81, + 0x702D, 0x9E82, + 0x702E, 0x9E83, + 0x702F, 0x9E84, + 0x7030, 0x9E85, + 0x7031, 0x9E86, + 0x7032, 0x9E87, + 0x7033, 0x9E88, + 0x7034, 0x9E89, + 0x7036, 0x9E8A, + 0x7037, 0x9E8B, + 0x7038, 0x9E8C, + 0x703A, 0x9E8D, + 0x703B, 0x9E8E, + 0x703C, 0x9E8F, + 0x703D, 0x9E90, + 0x703E, 0x9E91, + 0x703F, 0x9E92, + 0x7040, 0x9E93, + 0x7041, 0x9E94, + 0x7042, 0x9E95, + 0x7043, 0x9E96, + 0x7044, 0x9E97, + 0x7045, 0x9E98, + 0x7046, 0x9E99, + 0x7047, 0x9E9A, + 0x7048, 0x9E9B, + 0x7049, 0x9E9C, + 0x704A, 0x9E9D, + 0x704B, 0x9E9E, + 0x704D, 0x9E9F, + 0x704E, 0x9EA0, + 0x7050, 0x9EA1, + 0x7051, 0x9EA2, + 0x7052, 0x9EA3, + 0x7053, 0x9EA4, + 0x7054, 0x9EA5, + 0x7055, 0x9EA6, + 0x7056, 0x9EA7, + 0x7057, 0x9EA8, + 0x7058, 0x9EA9, + 0x7059, 0x9EAA, + 0x705A, 0x9EAB, + 0x705B, 0x9EAC, + 0x705C, 0x9EAD, + 0x705D, 0x9EAE, + 0x705F, 0x9EAF, + 0x7060, 0x9EB0, + 0x7061, 0x9EB1, + 0x7062, 0x9EB2, + 0x7063, 0x9EB3, + 0x7064, 0x9EB4, + 0x7065, 0x9EB5, + 0x7066, 0x9EB6, + 0x7067, 0x9EB7, + 0x7068, 0x9EB8, + 0x7069, 0x9EB9, + 0x706A, 0x9EBA, + 0x706E, 0x9EBB, + 0x7071, 0x9EBC, + 0x7072, 0x9EBD, + 0x7073, 0x9EBE, + 0x7074, 0x9EBF, + 0x7077, 0x9EC0, + 0x7079, 0x9EC1, + 0x707A, 0x9EC2, + 0x707B, 0x9EC3, + 0x707D, 0x9EC4, + 0x7081, 0x9EC5, + 0x7082, 0x9EC6, + 0x7083, 0x9EC7, + 0x7084, 0x9EC8, + 0x7086, 0x9EC9, + 0x7087, 0x9ECA, + 0x7088, 0x9ECB, + 0x708B, 0x9ECC, + 0x708C, 0x9ECD, + 0x708D, 0x9ECE, + 0x708F, 0x9ECF, + 0x7090, 0x9ED0, + 0x7091, 0x9ED1, + 0x7093, 0x9ED2, + 0x7097, 0x9ED3, + 0x7098, 0x9ED4, + 0x709A, 0x9ED5, + 0x709B, 0x9ED6, + 0x709E, 0x9ED7, + 0x709F, 0x9ED8, + 0x70A0, 0x9ED9, + 0x70A1, 0x9EDA, + 0x70A2, 0x9EDB, + 0x70A3, 0x9EDC, + 0x70A4, 0x9EDD, + 0x70A5, 0x9EDE, + 0x70A6, 0x9EDF, + 0x70A7, 0x9EE0, + 0x70A8, 0x9EE1, + 0x70A9, 0x9EE2, + 0x70AA, 0x9EE3, + 0x70B0, 0x9EE4, + 0x70B2, 0x9EE5, + 0x70B4, 0x9EE6, + 0x70B5, 0x9EE7, + 0x70B6, 0x9EE8, + 0x70BA, 0x9EE9, + 0x70BE, 0x9EEA, + 0x70BF, 0x9EEB, + 0x70C4, 0x9EEC, + 0x70C5, 0x9EED, + 0x70C6, 0x9EEE, + 0x70C7, 0x9EEF, + 0x70C9, 0x9EF0, + 0x70CB, 0x9EF1, + 0x70CC, 0x9EF2, + 0x70CD, 0x9EF3, + 0x70CE, 0x9EF4, + 0x70CF, 0x9EF5, + 0x70D0, 0x9EF6, + 0x70D1, 0x9EF7, + 0x70D2, 0x9EF8, + 0x70D3, 0x9EF9, + 0x70D4, 0x9EFA, + 0x70D5, 0x9EFB, + 0x70D6, 0x9EFC, + 0x70D7, 0x9EFD, + 0x70DA, 0x9EFE, + 0x70DC, 0x9F40, + 0x70DD, 0x9F41, + 0x70DE, 0x9F42, + 0x70E0, 0x9F43, + 0x70E1, 0x9F44, + 0x70E2, 0x9F45, + 0x70E3, 0x9F46, + 0x70E5, 0x9F47, + 0x70EA, 0x9F48, + 0x70EE, 0x9F49, + 0x70F0, 0x9F4A, + 0x70F1, 0x9F4B, + 0x70F2, 0x9F4C, + 0x70F3, 0x9F4D, + 0x70F4, 0x9F4E, + 0x70F5, 0x9F4F, + 0x70F6, 0x9F50, + 0x70F8, 0x9F51, + 0x70FA, 0x9F52, + 0x70FB, 0x9F53, + 0x70FC, 0x9F54, + 0x70FE, 0x9F55, + 0x70FF, 0x9F56, + 0x7100, 0x9F57, + 0x7101, 0x9F58, + 0x7102, 0x9F59, + 0x7103, 0x9F5A, + 0x7104, 0x9F5B, + 0x7105, 0x9F5C, + 0x7106, 0x9F5D, + 0x7107, 0x9F5E, + 0x7108, 0x9F5F, + 0x710B, 0x9F60, + 0x710C, 0x9F61, + 0x710D, 0x9F62, + 0x710E, 0x9F63, + 0x710F, 0x9F64, + 0x7111, 0x9F65, + 0x7112, 0x9F66, + 0x7114, 0x9F67, + 0x7117, 0x9F68, + 0x711B, 0x9F69, + 0x711C, 0x9F6A, + 0x711D, 0x9F6B, + 0x711E, 0x9F6C, + 0x711F, 0x9F6D, + 0x7120, 0x9F6E, + 0x7121, 0x9F6F, + 0x7122, 0x9F70, + 0x7123, 0x9F71, + 0x7124, 0x9F72, + 0x7125, 0x9F73, + 0x7127, 0x9F74, + 0x7128, 0x9F75, + 0x7129, 0x9F76, + 0x712A, 0x9F77, + 0x712B, 0x9F78, + 0x712C, 0x9F79, + 0x712D, 0x9F7A, + 0x712E, 0x9F7B, + 0x7132, 0x9F7C, + 0x7133, 0x9F7D, + 0x7134, 0x9F7E, + 0x7135, 0x9F80, + 0x7137, 0x9F81, + 0x7138, 0x9F82, + 0x7139, 0x9F83, + 0x713A, 0x9F84, + 0x713B, 0x9F85, + 0x713C, 0x9F86, + 0x713D, 0x9F87, + 0x713E, 0x9F88, + 0x713F, 0x9F89, + 0x7140, 0x9F8A, + 0x7141, 0x9F8B, + 0x7142, 0x9F8C, + 0x7143, 0x9F8D, + 0x7144, 0x9F8E, + 0x7146, 0x9F8F, + 0x7147, 0x9F90, + 0x7148, 0x9F91, + 0x7149, 0x9F92, + 0x714B, 0x9F93, + 0x714D, 0x9F94, + 0x714F, 0x9F95, + 0x7150, 0x9F96, + 0x7151, 0x9F97, + 0x7152, 0x9F98, + 0x7153, 0x9F99, + 0x7154, 0x9F9A, + 0x7155, 0x9F9B, + 0x7156, 0x9F9C, + 0x7157, 0x9F9D, + 0x7158, 0x9F9E, + 0x7159, 0x9F9F, + 0x715A, 0x9FA0, + 0x715B, 0x9FA1, + 0x715D, 0x9FA2, + 0x715F, 0x9FA3, + 0x7160, 0x9FA4, + 0x7161, 0x9FA5, + 0x7162, 0x9FA6, + 0x7163, 0x9FA7, + 0x7165, 0x9FA8, + 0x7169, 0x9FA9, + 0x716A, 0x9FAA, + 0x716B, 0x9FAB, + 0x716C, 0x9FAC, + 0x716D, 0x9FAD, + 0x716F, 0x9FAE, + 0x7170, 0x9FAF, + 0x7171, 0x9FB0, + 0x7174, 0x9FB1, + 0x7175, 0x9FB2, + 0x7176, 0x9FB3, + 0x7177, 0x9FB4, + 0x7179, 0x9FB5, + 0x717B, 0x9FB6, + 0x717C, 0x9FB7, + 0x717E, 0x9FB8, + 0x717F, 0x9FB9, + 0x7180, 0x9FBA, + 0x7181, 0x9FBB, + 0x7182, 0x9FBC, + 0x7183, 0x9FBD, + 0x7185, 0x9FBE, + 0x7186, 0x9FBF, + 0x7187, 0x9FC0, + 0x7188, 0x9FC1, + 0x7189, 0x9FC2, + 0x718B, 0x9FC3, + 0x718C, 0x9FC4, + 0x718D, 0x9FC5, + 0x718E, 0x9FC6, + 0x7190, 0x9FC7, + 0x7191, 0x9FC8, + 0x7192, 0x9FC9, + 0x7193, 0x9FCA, + 0x7195, 0x9FCB, + 0x7196, 0x9FCC, + 0x7197, 0x9FCD, + 0x719A, 0x9FCE, + 0x719B, 0x9FCF, + 0x719C, 0x9FD0, + 0x719D, 0x9FD1, + 0x719E, 0x9FD2, + 0x71A1, 0x9FD3, + 0x71A2, 0x9FD4, + 0x71A3, 0x9FD5, + 0x71A4, 0x9FD6, + 0x71A5, 0x9FD7, + 0x71A6, 0x9FD8, + 0x71A7, 0x9FD9, + 0x71A9, 0x9FDA, + 0x71AA, 0x9FDB, + 0x71AB, 0x9FDC, + 0x71AD, 0x9FDD, + 0x71AE, 0x9FDE, + 0x71AF, 0x9FDF, + 0x71B0, 0x9FE0, + 0x71B1, 0x9FE1, + 0x71B2, 0x9FE2, + 0x71B4, 0x9FE3, + 0x71B6, 0x9FE4, + 0x71B7, 0x9FE5, + 0x71B8, 0x9FE6, + 0x71BA, 0x9FE7, + 0x71BB, 0x9FE8, + 0x71BC, 0x9FE9, + 0x71BD, 0x9FEA, + 0x71BE, 0x9FEB, + 0x71BF, 0x9FEC, + 0x71C0, 0x9FED, + 0x71C1, 0x9FEE, + 0x71C2, 0x9FEF, + 0x71C4, 0x9FF0, + 0x71C5, 0x9FF1, + 0x71C6, 0x9FF2, + 0x71C7, 0x9FF3, + 0x71C8, 0x9FF4, + 0x71C9, 0x9FF5, + 0x71CA, 0x9FF6, + 0x71CB, 0x9FF7, + 0x71CC, 0x9FF8, + 0x71CD, 0x9FF9, + 0x71CF, 0x9FFA, + 0x71D0, 0x9FFB, + 0x71D1, 0x9FFC, + 0x71D2, 0x9FFD, + 0x71D3, 0x9FFE, + 0x71D6, 0xA040, + 0x71D7, 0xA041, + 0x71D8, 0xA042, + 0x71D9, 0xA043, + 0x71DA, 0xA044, + 0x71DB, 0xA045, + 0x71DC, 0xA046, + 0x71DD, 0xA047, + 0x71DE, 0xA048, + 0x71DF, 0xA049, + 0x71E1, 0xA04A, + 0x71E2, 0xA04B, + 0x71E3, 0xA04C, + 0x71E4, 0xA04D, + 0x71E6, 0xA04E, + 0x71E8, 0xA04F, + 0x71E9, 0xA050, + 0x71EA, 0xA051, + 0x71EB, 0xA052, + 0x71EC, 0xA053, + 0x71ED, 0xA054, + 0x71EF, 0xA055, + 0x71F0, 0xA056, + 0x71F1, 0xA057, + 0x71F2, 0xA058, + 0x71F3, 0xA059, + 0x71F4, 0xA05A, + 0x71F5, 0xA05B, + 0x71F6, 0xA05C, + 0x71F7, 0xA05D, + 0x71F8, 0xA05E, + 0x71FA, 0xA05F, + 0x71FB, 0xA060, + 0x71FC, 0xA061, + 0x71FD, 0xA062, + 0x71FE, 0xA063, + 0x71FF, 0xA064, + 0x7200, 0xA065, + 0x7201, 0xA066, + 0x7202, 0xA067, + 0x7203, 0xA068, + 0x7204, 0xA069, + 0x7205, 0xA06A, + 0x7207, 0xA06B, + 0x7208, 0xA06C, + 0x7209, 0xA06D, + 0x720A, 0xA06E, + 0x720B, 0xA06F, + 0x720C, 0xA070, + 0x720D, 0xA071, + 0x720E, 0xA072, + 0x720F, 0xA073, + 0x7210, 0xA074, + 0x7211, 0xA075, + 0x7212, 0xA076, + 0x7213, 0xA077, + 0x7214, 0xA078, + 0x7215, 0xA079, + 0x7216, 0xA07A, + 0x7217, 0xA07B, + 0x7218, 0xA07C, + 0x7219, 0xA07D, + 0x721A, 0xA07E, + 0x721B, 0xA080, + 0x721C, 0xA081, + 0x721E, 0xA082, + 0x721F, 0xA083, + 0x7220, 0xA084, + 0x7221, 0xA085, + 0x7222, 0xA086, + 0x7223, 0xA087, + 0x7224, 0xA088, + 0x7225, 0xA089, + 0x7226, 0xA08A, + 0x7227, 0xA08B, + 0x7229, 0xA08C, + 0x722B, 0xA08D, + 0x722D, 0xA08E, + 0x722E, 0xA08F, + 0x722F, 0xA090, + 0x7232, 0xA091, + 0x7233, 0xA092, + 0x7234, 0xA093, + 0x723A, 0xA094, + 0x723C, 0xA095, + 0x723E, 0xA096, + 0x7240, 0xA097, + 0x7241, 0xA098, + 0x7242, 0xA099, + 0x7243, 0xA09A, + 0x7244, 0xA09B, + 0x7245, 0xA09C, + 0x7246, 0xA09D, + 0x7249, 0xA09E, + 0x724A, 0xA09F, + 0x724B, 0xA0A0, + 0x724E, 0xA0A1, + 0x724F, 0xA0A2, + 0x7250, 0xA0A3, + 0x7251, 0xA0A4, + 0x7253, 0xA0A5, + 0x7254, 0xA0A6, + 0x7255, 0xA0A7, + 0x7257, 0xA0A8, + 0x7258, 0xA0A9, + 0x725A, 0xA0AA, + 0x725C, 0xA0AB, + 0x725E, 0xA0AC, + 0x7260, 0xA0AD, + 0x7263, 0xA0AE, + 0x7264, 0xA0AF, + 0x7265, 0xA0B0, + 0x7268, 0xA0B1, + 0x726A, 0xA0B2, + 0x726B, 0xA0B3, + 0x726C, 0xA0B4, + 0x726D, 0xA0B5, + 0x7270, 0xA0B6, + 0x7271, 0xA0B7, + 0x7273, 0xA0B8, + 0x7274, 0xA0B9, + 0x7276, 0xA0BA, + 0x7277, 0xA0BB, + 0x7278, 0xA0BC, + 0x727B, 0xA0BD, + 0x727C, 0xA0BE, + 0x727D, 0xA0BF, + 0x7282, 0xA0C0, + 0x7283, 0xA0C1, + 0x7285, 0xA0C2, + 0x7286, 0xA0C3, + 0x7287, 0xA0C4, + 0x7288, 0xA0C5, + 0x7289, 0xA0C6, + 0x728C, 0xA0C7, + 0x728E, 0xA0C8, + 0x7290, 0xA0C9, + 0x7291, 0xA0CA, + 0x7293, 0xA0CB, + 0x7294, 0xA0CC, + 0x7295, 0xA0CD, + 0x7296, 0xA0CE, + 0x7297, 0xA0CF, + 0x7298, 0xA0D0, + 0x7299, 0xA0D1, + 0x729A, 0xA0D2, + 0x729B, 0xA0D3, + 0x729C, 0xA0D4, + 0x729D, 0xA0D5, + 0x729E, 0xA0D6, + 0x72A0, 0xA0D7, + 0x72A1, 0xA0D8, + 0x72A2, 0xA0D9, + 0x72A3, 0xA0DA, + 0x72A4, 0xA0DB, + 0x72A5, 0xA0DC, + 0x72A6, 0xA0DD, + 0x72A7, 0xA0DE, + 0x72A8, 0xA0DF, + 0x72A9, 0xA0E0, + 0x72AA, 0xA0E1, + 0x72AB, 0xA0E2, + 0x72AE, 0xA0E3, + 0x72B1, 0xA0E4, + 0x72B2, 0xA0E5, + 0x72B3, 0xA0E6, + 0x72B5, 0xA0E7, + 0x72BA, 0xA0E8, + 0x72BB, 0xA0E9, + 0x72BC, 0xA0EA, + 0x72BD, 0xA0EB, + 0x72BE, 0xA0EC, + 0x72BF, 0xA0ED, + 0x72C0, 0xA0EE, + 0x72C5, 0xA0EF, + 0x72C6, 0xA0F0, + 0x72C7, 0xA0F1, + 0x72C9, 0xA0F2, + 0x72CA, 0xA0F3, + 0x72CB, 0xA0F4, + 0x72CC, 0xA0F5, + 0x72CF, 0xA0F6, + 0x72D1, 0xA0F7, + 0x72D3, 0xA0F8, + 0x72D4, 0xA0F9, + 0x72D5, 0xA0FA, + 0x72D6, 0xA0FB, + 0x72D8, 0xA0FC, + 0x72DA, 0xA0FD, + 0x72DB, 0xA0FE, + 0x72DC, 0xAA40, + 0x72DD, 0xAA41, + 0x72DF, 0xAA42, + 0x72E2, 0xAA43, + 0x72E3, 0xAA44, + 0x72E4, 0xAA45, + 0x72E5, 0xAA46, + 0x72E6, 0xAA47, + 0x72E7, 0xAA48, + 0x72EA, 0xAA49, + 0x72EB, 0xAA4A, + 0x72F5, 0xAA4B, + 0x72F6, 0xAA4C, + 0x72F9, 0xAA4D, + 0x72FD, 0xAA4E, + 0x72FE, 0xAA4F, + 0x72FF, 0xAA50, + 0x7300, 0xAA51, + 0x7302, 0xAA52, + 0x7304, 0xAA53, + 0x7305, 0xAA54, + 0x7306, 0xAA55, + 0x7307, 0xAA56, + 0x7308, 0xAA57, + 0x7309, 0xAA58, + 0x730B, 0xAA59, + 0x730C, 0xAA5A, + 0x730D, 0xAA5B, + 0x730F, 0xAA5C, + 0x7310, 0xAA5D, + 0x7311, 0xAA5E, + 0x7312, 0xAA5F, + 0x7314, 0xAA60, + 0x7318, 0xAA61, + 0x7319, 0xAA62, + 0x731A, 0xAA63, + 0x731F, 0xAA64, + 0x7320, 0xAA65, + 0x7323, 0xAA66, + 0x7324, 0xAA67, + 0x7326, 0xAA68, + 0x7327, 0xAA69, + 0x7328, 0xAA6A, + 0x732D, 0xAA6B, + 0x732F, 0xAA6C, + 0x7330, 0xAA6D, + 0x7332, 0xAA6E, + 0x7333, 0xAA6F, + 0x7335, 0xAA70, + 0x7336, 0xAA71, + 0x733A, 0xAA72, + 0x733B, 0xAA73, + 0x733C, 0xAA74, + 0x733D, 0xAA75, + 0x7340, 0xAA76, + 0x7341, 0xAA77, + 0x7342, 0xAA78, + 0x7343, 0xAA79, + 0x7344, 0xAA7A, + 0x7345, 0xAA7B, + 0x7346, 0xAA7C, + 0x7347, 0xAA7D, + 0x7348, 0xAA7E, + 0x7349, 0xAA80, + 0x734A, 0xAA81, + 0x734B, 0xAA82, + 0x734C, 0xAA83, + 0x734E, 0xAA84, + 0x734F, 0xAA85, + 0x7351, 0xAA86, + 0x7353, 0xAA87, + 0x7354, 0xAA88, + 0x7355, 0xAA89, + 0x7356, 0xAA8A, + 0x7358, 0xAA8B, + 0x7359, 0xAA8C, + 0x735A, 0xAA8D, + 0x735B, 0xAA8E, + 0x735C, 0xAA8F, + 0x735D, 0xAA90, + 0x735E, 0xAA91, + 0x735F, 0xAA92, + 0x7361, 0xAA93, + 0x7362, 0xAA94, + 0x7363, 0xAA95, + 0x7364, 0xAA96, + 0x7365, 0xAA97, + 0x7366, 0xAA98, + 0x7367, 0xAA99, + 0x7368, 0xAA9A, + 0x7369, 0xAA9B, + 0x736A, 0xAA9C, + 0x736B, 0xAA9D, + 0x736E, 0xAA9E, + 0x7370, 0xAA9F, + 0x7371, 0xAAA0, + 0x7372, 0xAB40, + 0x7373, 0xAB41, + 0x7374, 0xAB42, + 0x7375, 0xAB43, + 0x7376, 0xAB44, + 0x7377, 0xAB45, + 0x7378, 0xAB46, + 0x7379, 0xAB47, + 0x737A, 0xAB48, + 0x737B, 0xAB49, + 0x737C, 0xAB4A, + 0x737D, 0xAB4B, + 0x737F, 0xAB4C, + 0x7380, 0xAB4D, + 0x7381, 0xAB4E, + 0x7382, 0xAB4F, + 0x7383, 0xAB50, + 0x7385, 0xAB51, + 0x7386, 0xAB52, + 0x7388, 0xAB53, + 0x738A, 0xAB54, + 0x738C, 0xAB55, + 0x738D, 0xAB56, + 0x738F, 0xAB57, + 0x7390, 0xAB58, + 0x7392, 0xAB59, + 0x7393, 0xAB5A, + 0x7394, 0xAB5B, + 0x7395, 0xAB5C, + 0x7397, 0xAB5D, + 0x7398, 0xAB5E, + 0x7399, 0xAB5F, + 0x739A, 0xAB60, + 0x739C, 0xAB61, + 0x739D, 0xAB62, + 0x739E, 0xAB63, + 0x73A0, 0xAB64, + 0x73A1, 0xAB65, + 0x73A3, 0xAB66, + 0x73A4, 0xAB67, + 0x73A5, 0xAB68, + 0x73A6, 0xAB69, + 0x73A7, 0xAB6A, + 0x73A8, 0xAB6B, + 0x73AA, 0xAB6C, + 0x73AC, 0xAB6D, + 0x73AD, 0xAB6E, + 0x73B1, 0xAB6F, + 0x73B4, 0xAB70, + 0x73B5, 0xAB71, + 0x73B6, 0xAB72, + 0x73B8, 0xAB73, + 0x73B9, 0xAB74, + 0x73BC, 0xAB75, + 0x73BD, 0xAB76, + 0x73BE, 0xAB77, + 0x73BF, 0xAB78, + 0x73C1, 0xAB79, + 0x73C3, 0xAB7A, + 0x73C4, 0xAB7B, + 0x73C5, 0xAB7C, + 0x73C6, 0xAB7D, + 0x73C7, 0xAB7E, + 0x73CB, 0xAB80, + 0x73CC, 0xAB81, + 0x73CE, 0xAB82, + 0x73D2, 0xAB83, + 0x73D3, 0xAB84, + 0x73D4, 0xAB85, + 0x73D5, 0xAB86, + 0x73D6, 0xAB87, + 0x73D7, 0xAB88, + 0x73D8, 0xAB89, + 0x73DA, 0xAB8A, + 0x73DB, 0xAB8B, + 0x73DC, 0xAB8C, + 0x73DD, 0xAB8D, + 0x73DF, 0xAB8E, + 0x73E1, 0xAB8F, + 0x73E2, 0xAB90, + 0x73E3, 0xAB91, + 0x73E4, 0xAB92, + 0x73E6, 0xAB93, + 0x73E8, 0xAB94, + 0x73EA, 0xAB95, + 0x73EB, 0xAB96, + 0x73EC, 0xAB97, + 0x73EE, 0xAB98, + 0x73EF, 0xAB99, + 0x73F0, 0xAB9A, + 0x73F1, 0xAB9B, + 0x73F3, 0xAB9C, + 0x73F4, 0xAB9D, + 0x73F5, 0xAB9E, + 0x73F6, 0xAB9F, + 0x73F7, 0xABA0, + 0x73F8, 0xAC40, + 0x73F9, 0xAC41, + 0x73FA, 0xAC42, + 0x73FB, 0xAC43, + 0x73FC, 0xAC44, + 0x73FD, 0xAC45, + 0x73FE, 0xAC46, + 0x73FF, 0xAC47, + 0x7400, 0xAC48, + 0x7401, 0xAC49, + 0x7402, 0xAC4A, + 0x7404, 0xAC4B, + 0x7407, 0xAC4C, + 0x7408, 0xAC4D, + 0x740B, 0xAC4E, + 0x740C, 0xAC4F, + 0x740D, 0xAC50, + 0x740E, 0xAC51, + 0x7411, 0xAC52, + 0x7412, 0xAC53, + 0x7413, 0xAC54, + 0x7414, 0xAC55, + 0x7415, 0xAC56, + 0x7416, 0xAC57, + 0x7417, 0xAC58, + 0x7418, 0xAC59, + 0x7419, 0xAC5A, + 0x741C, 0xAC5B, + 0x741D, 0xAC5C, + 0x741E, 0xAC5D, + 0x741F, 0xAC5E, + 0x7420, 0xAC5F, + 0x7421, 0xAC60, + 0x7423, 0xAC61, + 0x7424, 0xAC62, + 0x7427, 0xAC63, + 0x7429, 0xAC64, + 0x742B, 0xAC65, + 0x742D, 0xAC66, + 0x742F, 0xAC67, + 0x7431, 0xAC68, + 0x7432, 0xAC69, + 0x7437, 0xAC6A, + 0x7438, 0xAC6B, + 0x7439, 0xAC6C, + 0x743A, 0xAC6D, + 0x743B, 0xAC6E, + 0x743D, 0xAC6F, + 0x743E, 0xAC70, + 0x743F, 0xAC71, + 0x7440, 0xAC72, + 0x7442, 0xAC73, + 0x7443, 0xAC74, + 0x7444, 0xAC75, + 0x7445, 0xAC76, + 0x7446, 0xAC77, + 0x7447, 0xAC78, + 0x7448, 0xAC79, + 0x7449, 0xAC7A, + 0x744A, 0xAC7B, + 0x744B, 0xAC7C, + 0x744C, 0xAC7D, + 0x744D, 0xAC7E, + 0x744E, 0xAC80, + 0x744F, 0xAC81, + 0x7450, 0xAC82, + 0x7451, 0xAC83, + 0x7452, 0xAC84, + 0x7453, 0xAC85, + 0x7454, 0xAC86, + 0x7456, 0xAC87, + 0x7458, 0xAC88, + 0x745D, 0xAC89, + 0x7460, 0xAC8A, + 0x7461, 0xAC8B, + 0x7462, 0xAC8C, + 0x7463, 0xAC8D, + 0x7464, 0xAC8E, + 0x7465, 0xAC8F, + 0x7466, 0xAC90, + 0x7467, 0xAC91, + 0x7468, 0xAC92, + 0x7469, 0xAC93, + 0x746A, 0xAC94, + 0x746B, 0xAC95, + 0x746C, 0xAC96, + 0x746E, 0xAC97, + 0x746F, 0xAC98, + 0x7471, 0xAC99, + 0x7472, 0xAC9A, + 0x7473, 0xAC9B, + 0x7474, 0xAC9C, + 0x7475, 0xAC9D, + 0x7478, 0xAC9E, + 0x7479, 0xAC9F, + 0x747A, 0xACA0, + 0x747B, 0xAD40, + 0x747C, 0xAD41, + 0x747D, 0xAD42, + 0x747F, 0xAD43, + 0x7482, 0xAD44, + 0x7484, 0xAD45, + 0x7485, 0xAD46, + 0x7486, 0xAD47, + 0x7488, 0xAD48, + 0x7489, 0xAD49, + 0x748A, 0xAD4A, + 0x748C, 0xAD4B, + 0x748D, 0xAD4C, + 0x748F, 0xAD4D, + 0x7491, 0xAD4E, + 0x7492, 0xAD4F, + 0x7493, 0xAD50, + 0x7494, 0xAD51, + 0x7495, 0xAD52, + 0x7496, 0xAD53, + 0x7497, 0xAD54, + 0x7498, 0xAD55, + 0x7499, 0xAD56, + 0x749A, 0xAD57, + 0x749B, 0xAD58, + 0x749D, 0xAD59, + 0x749F, 0xAD5A, + 0x74A0, 0xAD5B, + 0x74A1, 0xAD5C, + 0x74A2, 0xAD5D, + 0x74A3, 0xAD5E, + 0x74A4, 0xAD5F, + 0x74A5, 0xAD60, + 0x74A6, 0xAD61, + 0x74AA, 0xAD62, + 0x74AB, 0xAD63, + 0x74AC, 0xAD64, + 0x74AD, 0xAD65, + 0x74AE, 0xAD66, + 0x74AF, 0xAD67, + 0x74B0, 0xAD68, + 0x74B1, 0xAD69, + 0x74B2, 0xAD6A, + 0x74B3, 0xAD6B, + 0x74B4, 0xAD6C, + 0x74B5, 0xAD6D, + 0x74B6, 0xAD6E, + 0x74B7, 0xAD6F, + 0x74B8, 0xAD70, + 0x74B9, 0xAD71, + 0x74BB, 0xAD72, + 0x74BC, 0xAD73, + 0x74BD, 0xAD74, + 0x74BE, 0xAD75, + 0x74BF, 0xAD76, + 0x74C0, 0xAD77, + 0x74C1, 0xAD78, + 0x74C2, 0xAD79, + 0x74C3, 0xAD7A, + 0x74C4, 0xAD7B, + 0x74C5, 0xAD7C, + 0x74C6, 0xAD7D, + 0x74C7, 0xAD7E, + 0x74C8, 0xAD80, + 0x74C9, 0xAD81, + 0x74CA, 0xAD82, + 0x74CB, 0xAD83, + 0x74CC, 0xAD84, + 0x74CD, 0xAD85, + 0x74CE, 0xAD86, + 0x74CF, 0xAD87, + 0x74D0, 0xAD88, + 0x74D1, 0xAD89, + 0x74D3, 0xAD8A, + 0x74D4, 0xAD8B, + 0x74D5, 0xAD8C, + 0x74D6, 0xAD8D, + 0x74D7, 0xAD8E, + 0x74D8, 0xAD8F, + 0x74D9, 0xAD90, + 0x74DA, 0xAD91, + 0x74DB, 0xAD92, + 0x74DD, 0xAD93, + 0x74DF, 0xAD94, + 0x74E1, 0xAD95, + 0x74E5, 0xAD96, + 0x74E7, 0xAD97, + 0x74E8, 0xAD98, + 0x74E9, 0xAD99, + 0x74EA, 0xAD9A, + 0x74EB, 0xAD9B, + 0x74EC, 0xAD9C, + 0x74ED, 0xAD9D, + 0x74F0, 0xAD9E, + 0x74F1, 0xAD9F, + 0x74F2, 0xADA0, + 0x74F3, 0xAE40, + 0x74F5, 0xAE41, + 0x74F8, 0xAE42, + 0x74F9, 0xAE43, + 0x74FA, 0xAE44, + 0x74FB, 0xAE45, + 0x74FC, 0xAE46, + 0x74FD, 0xAE47, + 0x74FE, 0xAE48, + 0x7500, 0xAE49, + 0x7501, 0xAE4A, + 0x7502, 0xAE4B, + 0x7503, 0xAE4C, + 0x7505, 0xAE4D, + 0x7506, 0xAE4E, + 0x7507, 0xAE4F, + 0x7508, 0xAE50, + 0x7509, 0xAE51, + 0x750A, 0xAE52, + 0x750B, 0xAE53, + 0x750C, 0xAE54, + 0x750E, 0xAE55, + 0x7510, 0xAE56, + 0x7512, 0xAE57, + 0x7514, 0xAE58, + 0x7515, 0xAE59, + 0x7516, 0xAE5A, + 0x7517, 0xAE5B, + 0x751B, 0xAE5C, + 0x751D, 0xAE5D, + 0x751E, 0xAE5E, + 0x7520, 0xAE5F, + 0x7521, 0xAE60, + 0x7522, 0xAE61, + 0x7523, 0xAE62, + 0x7524, 0xAE63, + 0x7526, 0xAE64, + 0x7527, 0xAE65, + 0x752A, 0xAE66, + 0x752E, 0xAE67, + 0x7534, 0xAE68, + 0x7536, 0xAE69, + 0x7539, 0xAE6A, + 0x753C, 0xAE6B, + 0x753D, 0xAE6C, + 0x753F, 0xAE6D, + 0x7541, 0xAE6E, + 0x7542, 0xAE6F, + 0x7543, 0xAE70, + 0x7544, 0xAE71, + 0x7546, 0xAE72, + 0x7547, 0xAE73, + 0x7549, 0xAE74, + 0x754A, 0xAE75, + 0x754D, 0xAE76, + 0x7550, 0xAE77, + 0x7551, 0xAE78, + 0x7552, 0xAE79, + 0x7553, 0xAE7A, + 0x7555, 0xAE7B, + 0x7556, 0xAE7C, + 0x7557, 0xAE7D, + 0x7558, 0xAE7E, + 0x755D, 0xAE80, + 0x755E, 0xAE81, + 0x755F, 0xAE82, + 0x7560, 0xAE83, + 0x7561, 0xAE84, + 0x7562, 0xAE85, + 0x7563, 0xAE86, + 0x7564, 0xAE87, + 0x7567, 0xAE88, + 0x7568, 0xAE89, + 0x7569, 0xAE8A, + 0x756B, 0xAE8B, + 0x756C, 0xAE8C, + 0x756D, 0xAE8D, + 0x756E, 0xAE8E, + 0x756F, 0xAE8F, + 0x7570, 0xAE90, + 0x7571, 0xAE91, + 0x7573, 0xAE92, + 0x7575, 0xAE93, + 0x7576, 0xAE94, + 0x7577, 0xAE95, + 0x757A, 0xAE96, + 0x757B, 0xAE97, + 0x757C, 0xAE98, + 0x757D, 0xAE99, + 0x757E, 0xAE9A, + 0x7580, 0xAE9B, + 0x7581, 0xAE9C, + 0x7582, 0xAE9D, + 0x7584, 0xAE9E, + 0x7585, 0xAE9F, + 0x7587, 0xAEA0, + 0x7588, 0xAF40, + 0x7589, 0xAF41, + 0x758A, 0xAF42, + 0x758C, 0xAF43, + 0x758D, 0xAF44, + 0x758E, 0xAF45, + 0x7590, 0xAF46, + 0x7593, 0xAF47, + 0x7595, 0xAF48, + 0x7598, 0xAF49, + 0x759B, 0xAF4A, + 0x759C, 0xAF4B, + 0x759E, 0xAF4C, + 0x75A2, 0xAF4D, + 0x75A6, 0xAF4E, + 0x75A7, 0xAF4F, + 0x75A8, 0xAF50, + 0x75A9, 0xAF51, + 0x75AA, 0xAF52, + 0x75AD, 0xAF53, + 0x75B6, 0xAF54, + 0x75B7, 0xAF55, + 0x75BA, 0xAF56, + 0x75BB, 0xAF57, + 0x75BF, 0xAF58, + 0x75C0, 0xAF59, + 0x75C1, 0xAF5A, + 0x75C6, 0xAF5B, + 0x75CB, 0xAF5C, + 0x75CC, 0xAF5D, + 0x75CE, 0xAF5E, + 0x75CF, 0xAF5F, + 0x75D0, 0xAF60, + 0x75D1, 0xAF61, + 0x75D3, 0xAF62, + 0x75D7, 0xAF63, + 0x75D9, 0xAF64, + 0x75DA, 0xAF65, + 0x75DC, 0xAF66, + 0x75DD, 0xAF67, + 0x75DF, 0xAF68, + 0x75E0, 0xAF69, + 0x75E1, 0xAF6A, + 0x75E5, 0xAF6B, + 0x75E9, 0xAF6C, + 0x75EC, 0xAF6D, + 0x75ED, 0xAF6E, + 0x75EE, 0xAF6F, + 0x75EF, 0xAF70, + 0x75F2, 0xAF71, + 0x75F3, 0xAF72, + 0x75F5, 0xAF73, + 0x75F6, 0xAF74, + 0x75F7, 0xAF75, + 0x75F8, 0xAF76, + 0x75FA, 0xAF77, + 0x75FB, 0xAF78, + 0x75FD, 0xAF79, + 0x75FE, 0xAF7A, + 0x7602, 0xAF7B, + 0x7604, 0xAF7C, + 0x7606, 0xAF7D, + 0x7607, 0xAF7E, + 0x7608, 0xAF80, + 0x7609, 0xAF81, + 0x760B, 0xAF82, + 0x760D, 0xAF83, + 0x760E, 0xAF84, + 0x760F, 0xAF85, + 0x7611, 0xAF86, + 0x7612, 0xAF87, + 0x7613, 0xAF88, + 0x7614, 0xAF89, + 0x7616, 0xAF8A, + 0x761A, 0xAF8B, + 0x761C, 0xAF8C, + 0x761D, 0xAF8D, + 0x761E, 0xAF8E, + 0x7621, 0xAF8F, + 0x7623, 0xAF90, + 0x7627, 0xAF91, + 0x7628, 0xAF92, + 0x762C, 0xAF93, + 0x762E, 0xAF94, + 0x762F, 0xAF95, + 0x7631, 0xAF96, + 0x7632, 0xAF97, + 0x7636, 0xAF98, + 0x7637, 0xAF99, + 0x7639, 0xAF9A, + 0x763A, 0xAF9B, + 0x763B, 0xAF9C, + 0x763D, 0xAF9D, + 0x7641, 0xAF9E, + 0x7642, 0xAF9F, + 0x7644, 0xAFA0, + 0x7645, 0xB040, + 0x7646, 0xB041, + 0x7647, 0xB042, + 0x7648, 0xB043, + 0x7649, 0xB044, + 0x764A, 0xB045, + 0x764B, 0xB046, + 0x764E, 0xB047, + 0x764F, 0xB048, + 0x7650, 0xB049, + 0x7651, 0xB04A, + 0x7652, 0xB04B, + 0x7653, 0xB04C, + 0x7655, 0xB04D, + 0x7657, 0xB04E, + 0x7658, 0xB04F, + 0x7659, 0xB050, + 0x765A, 0xB051, + 0x765B, 0xB052, + 0x765D, 0xB053, + 0x765F, 0xB054, + 0x7660, 0xB055, + 0x7661, 0xB056, + 0x7662, 0xB057, + 0x7664, 0xB058, + 0x7665, 0xB059, + 0x7666, 0xB05A, + 0x7667, 0xB05B, + 0x7668, 0xB05C, + 0x7669, 0xB05D, + 0x766A, 0xB05E, + 0x766C, 0xB05F, + 0x766D, 0xB060, + 0x766E, 0xB061, + 0x7670, 0xB062, + 0x7671, 0xB063, + 0x7672, 0xB064, + 0x7673, 0xB065, + 0x7674, 0xB066, + 0x7675, 0xB067, + 0x7676, 0xB068, + 0x7677, 0xB069, + 0x7679, 0xB06A, + 0x767A, 0xB06B, + 0x767C, 0xB06C, + 0x767F, 0xB06D, + 0x7680, 0xB06E, + 0x7681, 0xB06F, + 0x7683, 0xB070, + 0x7685, 0xB071, + 0x7689, 0xB072, + 0x768A, 0xB073, + 0x768C, 0xB074, + 0x768D, 0xB075, + 0x768F, 0xB076, + 0x7690, 0xB077, + 0x7692, 0xB078, + 0x7694, 0xB079, + 0x7695, 0xB07A, + 0x7697, 0xB07B, + 0x7698, 0xB07C, + 0x769A, 0xB07D, + 0x769B, 0xB07E, + 0x769C, 0xB080, + 0x769D, 0xB081, + 0x769E, 0xB082, + 0x769F, 0xB083, + 0x76A0, 0xB084, + 0x76A1, 0xB085, + 0x76A2, 0xB086, + 0x76A3, 0xB087, + 0x76A5, 0xB088, + 0x76A6, 0xB089, + 0x76A7, 0xB08A, + 0x76A8, 0xB08B, + 0x76A9, 0xB08C, + 0x76AA, 0xB08D, + 0x76AB, 0xB08E, + 0x76AC, 0xB08F, + 0x76AD, 0xB090, + 0x76AF, 0xB091, + 0x76B0, 0xB092, + 0x76B3, 0xB093, + 0x76B5, 0xB094, + 0x76B6, 0xB095, + 0x76B7, 0xB096, + 0x76B8, 0xB097, + 0x76B9, 0xB098, + 0x76BA, 0xB099, + 0x76BB, 0xB09A, + 0x76BC, 0xB09B, + 0x76BD, 0xB09C, + 0x76BE, 0xB09D, + 0x76C0, 0xB09E, + 0x76C1, 0xB09F, + 0x76C3, 0xB0A0, + 0x76C4, 0xB140, + 0x76C7, 0xB141, + 0x76C9, 0xB142, + 0x76CB, 0xB143, + 0x76CC, 0xB144, + 0x76D3, 0xB145, + 0x76D5, 0xB146, + 0x76D9, 0xB147, + 0x76DA, 0xB148, + 0x76DC, 0xB149, + 0x76DD, 0xB14A, + 0x76DE, 0xB14B, + 0x76E0, 0xB14C, + 0x76E1, 0xB14D, + 0x76E2, 0xB14E, + 0x76E3, 0xB14F, + 0x76E4, 0xB150, + 0x76E6, 0xB151, + 0x76E7, 0xB152, + 0x76E8, 0xB153, + 0x76E9, 0xB154, + 0x76EA, 0xB155, + 0x76EB, 0xB156, + 0x76EC, 0xB157, + 0x76ED, 0xB158, + 0x76F0, 0xB159, + 0x76F3, 0xB15A, + 0x76F5, 0xB15B, + 0x76F6, 0xB15C, + 0x76F7, 0xB15D, + 0x76FA, 0xB15E, + 0x76FB, 0xB15F, + 0x76FD, 0xB160, + 0x76FF, 0xB161, + 0x7700, 0xB162, + 0x7702, 0xB163, + 0x7703, 0xB164, + 0x7705, 0xB165, + 0x7706, 0xB166, + 0x770A, 0xB167, + 0x770C, 0xB168, + 0x770E, 0xB169, + 0x770F, 0xB16A, + 0x7710, 0xB16B, + 0x7711, 0xB16C, + 0x7712, 0xB16D, + 0x7713, 0xB16E, + 0x7714, 0xB16F, + 0x7715, 0xB170, + 0x7716, 0xB171, + 0x7717, 0xB172, + 0x7718, 0xB173, + 0x771B, 0xB174, + 0x771C, 0xB175, + 0x771D, 0xB176, + 0x771E, 0xB177, + 0x7721, 0xB178, + 0x7723, 0xB179, + 0x7724, 0xB17A, + 0x7725, 0xB17B, + 0x7727, 0xB17C, + 0x772A, 0xB17D, + 0x772B, 0xB17E, + 0x772C, 0xB180, + 0x772E, 0xB181, + 0x7730, 0xB182, + 0x7731, 0xB183, + 0x7732, 0xB184, + 0x7733, 0xB185, + 0x7734, 0xB186, + 0x7739, 0xB187, + 0x773B, 0xB188, + 0x773D, 0xB189, + 0x773E, 0xB18A, + 0x773F, 0xB18B, + 0x7742, 0xB18C, + 0x7744, 0xB18D, + 0x7745, 0xB18E, + 0x7746, 0xB18F, + 0x7748, 0xB190, + 0x7749, 0xB191, + 0x774A, 0xB192, + 0x774B, 0xB193, + 0x774C, 0xB194, + 0x774D, 0xB195, + 0x774E, 0xB196, + 0x774F, 0xB197, + 0x7752, 0xB198, + 0x7753, 0xB199, + 0x7754, 0xB19A, + 0x7755, 0xB19B, + 0x7756, 0xB19C, + 0x7757, 0xB19D, + 0x7758, 0xB19E, + 0x7759, 0xB19F, + 0x775C, 0xB1A0, + 0x775D, 0xB240, + 0x775E, 0xB241, + 0x775F, 0xB242, + 0x7760, 0xB243, + 0x7764, 0xB244, + 0x7767, 0xB245, + 0x7769, 0xB246, + 0x776A, 0xB247, + 0x776D, 0xB248, + 0x776E, 0xB249, + 0x776F, 0xB24A, + 0x7770, 0xB24B, + 0x7771, 0xB24C, + 0x7772, 0xB24D, + 0x7773, 0xB24E, + 0x7774, 0xB24F, + 0x7775, 0xB250, + 0x7776, 0xB251, + 0x7777, 0xB252, + 0x7778, 0xB253, + 0x777A, 0xB254, + 0x777B, 0xB255, + 0x777C, 0xB256, + 0x7781, 0xB257, + 0x7782, 0xB258, + 0x7783, 0xB259, + 0x7786, 0xB25A, + 0x7787, 0xB25B, + 0x7788, 0xB25C, + 0x7789, 0xB25D, + 0x778A, 0xB25E, + 0x778B, 0xB25F, + 0x778F, 0xB260, + 0x7790, 0xB261, + 0x7793, 0xB262, + 0x7794, 0xB263, + 0x7795, 0xB264, + 0x7796, 0xB265, + 0x7797, 0xB266, + 0x7798, 0xB267, + 0x7799, 0xB268, + 0x779A, 0xB269, + 0x779B, 0xB26A, + 0x779C, 0xB26B, + 0x779D, 0xB26C, + 0x779E, 0xB26D, + 0x77A1, 0xB26E, + 0x77A3, 0xB26F, + 0x77A4, 0xB270, + 0x77A6, 0xB271, + 0x77A8, 0xB272, + 0x77AB, 0xB273, + 0x77AD, 0xB274, + 0x77AE, 0xB275, + 0x77AF, 0xB276, + 0x77B1, 0xB277, + 0x77B2, 0xB278, + 0x77B4, 0xB279, + 0x77B6, 0xB27A, + 0x77B7, 0xB27B, + 0x77B8, 0xB27C, + 0x77B9, 0xB27D, + 0x77BA, 0xB27E, + 0x77BC, 0xB280, + 0x77BE, 0xB281, + 0x77C0, 0xB282, + 0x77C1, 0xB283, + 0x77C2, 0xB284, + 0x77C3, 0xB285, + 0x77C4, 0xB286, + 0x77C5, 0xB287, + 0x77C6, 0xB288, + 0x77C7, 0xB289, + 0x77C8, 0xB28A, + 0x77C9, 0xB28B, + 0x77CA, 0xB28C, + 0x77CB, 0xB28D, + 0x77CC, 0xB28E, + 0x77CE, 0xB28F, + 0x77CF, 0xB290, + 0x77D0, 0xB291, + 0x77D1, 0xB292, + 0x77D2, 0xB293, + 0x77D3, 0xB294, + 0x77D4, 0xB295, + 0x77D5, 0xB296, + 0x77D6, 0xB297, + 0x77D8, 0xB298, + 0x77D9, 0xB299, + 0x77DA, 0xB29A, + 0x77DD, 0xB29B, + 0x77DE, 0xB29C, + 0x77DF, 0xB29D, + 0x77E0, 0xB29E, + 0x77E1, 0xB29F, + 0x77E4, 0xB2A0, + 0x77E6, 0xB340, + 0x77E8, 0xB341, + 0x77EA, 0xB342, + 0x77EF, 0xB343, + 0x77F0, 0xB344, + 0x77F1, 0xB345, + 0x77F2, 0xB346, + 0x77F4, 0xB347, + 0x77F5, 0xB348, + 0x77F7, 0xB349, + 0x77F9, 0xB34A, + 0x77FA, 0xB34B, + 0x77FB, 0xB34C, + 0x77FC, 0xB34D, + 0x7803, 0xB34E, + 0x7804, 0xB34F, + 0x7805, 0xB350, + 0x7806, 0xB351, + 0x7807, 0xB352, + 0x7808, 0xB353, + 0x780A, 0xB354, + 0x780B, 0xB355, + 0x780E, 0xB356, + 0x780F, 0xB357, + 0x7810, 0xB358, + 0x7813, 0xB359, + 0x7815, 0xB35A, + 0x7819, 0xB35B, + 0x781B, 0xB35C, + 0x781E, 0xB35D, + 0x7820, 0xB35E, + 0x7821, 0xB35F, + 0x7822, 0xB360, + 0x7824, 0xB361, + 0x7828, 0xB362, + 0x782A, 0xB363, + 0x782B, 0xB364, + 0x782E, 0xB365, + 0x782F, 0xB366, + 0x7831, 0xB367, + 0x7832, 0xB368, + 0x7833, 0xB369, + 0x7835, 0xB36A, + 0x7836, 0xB36B, + 0x783D, 0xB36C, + 0x783F, 0xB36D, + 0x7841, 0xB36E, + 0x7842, 0xB36F, + 0x7843, 0xB370, + 0x7844, 0xB371, + 0x7846, 0xB372, + 0x7848, 0xB373, + 0x7849, 0xB374, + 0x784A, 0xB375, + 0x784B, 0xB376, + 0x784D, 0xB377, + 0x784F, 0xB378, + 0x7851, 0xB379, + 0x7853, 0xB37A, + 0x7854, 0xB37B, + 0x7858, 0xB37C, + 0x7859, 0xB37D, + 0x785A, 0xB37E, + 0x785B, 0xB380, + 0x785C, 0xB381, + 0x785E, 0xB382, + 0x785F, 0xB383, + 0x7860, 0xB384, + 0x7861, 0xB385, + 0x7862, 0xB386, + 0x7863, 0xB387, + 0x7864, 0xB388, + 0x7865, 0xB389, + 0x7866, 0xB38A, + 0x7867, 0xB38B, + 0x7868, 0xB38C, + 0x7869, 0xB38D, + 0x786F, 0xB38E, + 0x7870, 0xB38F, + 0x7871, 0xB390, + 0x7872, 0xB391, + 0x7873, 0xB392, + 0x7874, 0xB393, + 0x7875, 0xB394, + 0x7876, 0xB395, + 0x7878, 0xB396, + 0x7879, 0xB397, + 0x787A, 0xB398, + 0x787B, 0xB399, + 0x787D, 0xB39A, + 0x787E, 0xB39B, + 0x787F, 0xB39C, + 0x7880, 0xB39D, + 0x7881, 0xB39E, + 0x7882, 0xB39F, + 0x7883, 0xB3A0, + 0x7884, 0xB440, + 0x7885, 0xB441, + 0x7886, 0xB442, + 0x7888, 0xB443, + 0x788A, 0xB444, + 0x788B, 0xB445, + 0x788F, 0xB446, + 0x7890, 0xB447, + 0x7892, 0xB448, + 0x7894, 0xB449, + 0x7895, 0xB44A, + 0x7896, 0xB44B, + 0x7899, 0xB44C, + 0x789D, 0xB44D, + 0x789E, 0xB44E, + 0x78A0, 0xB44F, + 0x78A2, 0xB450, + 0x78A4, 0xB451, + 0x78A6, 0xB452, + 0x78A8, 0xB453, + 0x78A9, 0xB454, + 0x78AA, 0xB455, + 0x78AB, 0xB456, + 0x78AC, 0xB457, + 0x78AD, 0xB458, + 0x78AE, 0xB459, + 0x78AF, 0xB45A, + 0x78B5, 0xB45B, + 0x78B6, 0xB45C, + 0x78B7, 0xB45D, + 0x78B8, 0xB45E, + 0x78BA, 0xB45F, + 0x78BB, 0xB460, + 0x78BC, 0xB461, + 0x78BD, 0xB462, + 0x78BF, 0xB463, + 0x78C0, 0xB464, + 0x78C2, 0xB465, + 0x78C3, 0xB466, + 0x78C4, 0xB467, + 0x78C6, 0xB468, + 0x78C7, 0xB469, + 0x78C8, 0xB46A, + 0x78CC, 0xB46B, + 0x78CD, 0xB46C, + 0x78CE, 0xB46D, + 0x78CF, 0xB46E, + 0x78D1, 0xB46F, + 0x78D2, 0xB470, + 0x78D3, 0xB471, + 0x78D6, 0xB472, + 0x78D7, 0xB473, + 0x78D8, 0xB474, + 0x78DA, 0xB475, + 0x78DB, 0xB476, + 0x78DC, 0xB477, + 0x78DD, 0xB478, + 0x78DE, 0xB479, + 0x78DF, 0xB47A, + 0x78E0, 0xB47B, + 0x78E1, 0xB47C, + 0x78E2, 0xB47D, + 0x78E3, 0xB47E, + 0x78E4, 0xB480, + 0x78E5, 0xB481, + 0x78E6, 0xB482, + 0x78E7, 0xB483, + 0x78E9, 0xB484, + 0x78EA, 0xB485, + 0x78EB, 0xB486, + 0x78ED, 0xB487, + 0x78EE, 0xB488, + 0x78EF, 0xB489, + 0x78F0, 0xB48A, + 0x78F1, 0xB48B, + 0x78F3, 0xB48C, + 0x78F5, 0xB48D, + 0x78F6, 0xB48E, + 0x78F8, 0xB48F, + 0x78F9, 0xB490, + 0x78FB, 0xB491, + 0x78FC, 0xB492, + 0x78FD, 0xB493, + 0x78FE, 0xB494, + 0x78FF, 0xB495, + 0x7900, 0xB496, + 0x7902, 0xB497, + 0x7903, 0xB498, + 0x7904, 0xB499, + 0x7906, 0xB49A, + 0x7907, 0xB49B, + 0x7908, 0xB49C, + 0x7909, 0xB49D, + 0x790A, 0xB49E, + 0x790B, 0xB49F, + 0x790C, 0xB4A0, + 0x790D, 0xB540, + 0x790E, 0xB541, + 0x790F, 0xB542, + 0x7910, 0xB543, + 0x7911, 0xB544, + 0x7912, 0xB545, + 0x7914, 0xB546, + 0x7915, 0xB547, + 0x7916, 0xB548, + 0x7917, 0xB549, + 0x7918, 0xB54A, + 0x7919, 0xB54B, + 0x791A, 0xB54C, + 0x791B, 0xB54D, + 0x791C, 0xB54E, + 0x791D, 0xB54F, + 0x791F, 0xB550, + 0x7920, 0xB551, + 0x7921, 0xB552, + 0x7922, 0xB553, + 0x7923, 0xB554, + 0x7925, 0xB555, + 0x7926, 0xB556, + 0x7927, 0xB557, + 0x7928, 0xB558, + 0x7929, 0xB559, + 0x792A, 0xB55A, + 0x792B, 0xB55B, + 0x792C, 0xB55C, + 0x792D, 0xB55D, + 0x792E, 0xB55E, + 0x792F, 0xB55F, + 0x7930, 0xB560, + 0x7931, 0xB561, + 0x7932, 0xB562, + 0x7933, 0xB563, + 0x7935, 0xB564, + 0x7936, 0xB565, + 0x7937, 0xB566, + 0x7938, 0xB567, + 0x7939, 0xB568, + 0x793D, 0xB569, + 0x793F, 0xB56A, + 0x7942, 0xB56B, + 0x7943, 0xB56C, + 0x7944, 0xB56D, + 0x7945, 0xB56E, + 0x7947, 0xB56F, + 0x794A, 0xB570, + 0x794B, 0xB571, + 0x794C, 0xB572, + 0x794D, 0xB573, + 0x794E, 0xB574, + 0x794F, 0xB575, + 0x7950, 0xB576, + 0x7951, 0xB577, + 0x7952, 0xB578, + 0x7954, 0xB579, + 0x7955, 0xB57A, + 0x7958, 0xB57B, + 0x7959, 0xB57C, + 0x7961, 0xB57D, + 0x7963, 0xB57E, + 0x7964, 0xB580, + 0x7966, 0xB581, + 0x7969, 0xB582, + 0x796A, 0xB583, + 0x796B, 0xB584, + 0x796C, 0xB585, + 0x796E, 0xB586, + 0x7970, 0xB587, + 0x7971, 0xB588, + 0x7972, 0xB589, + 0x7973, 0xB58A, + 0x7974, 0xB58B, + 0x7975, 0xB58C, + 0x7976, 0xB58D, + 0x7979, 0xB58E, + 0x797B, 0xB58F, + 0x797C, 0xB590, + 0x797D, 0xB591, + 0x797E, 0xB592, + 0x797F, 0xB593, + 0x7982, 0xB594, + 0x7983, 0xB595, + 0x7986, 0xB596, + 0x7987, 0xB597, + 0x7988, 0xB598, + 0x7989, 0xB599, + 0x798B, 0xB59A, + 0x798C, 0xB59B, + 0x798D, 0xB59C, + 0x798E, 0xB59D, + 0x7990, 0xB59E, + 0x7991, 0xB59F, + 0x7992, 0xB5A0, + 0x7993, 0xB640, + 0x7994, 0xB641, + 0x7995, 0xB642, + 0x7996, 0xB643, + 0x7997, 0xB644, + 0x7998, 0xB645, + 0x7999, 0xB646, + 0x799B, 0xB647, + 0x799C, 0xB648, + 0x799D, 0xB649, + 0x799E, 0xB64A, + 0x799F, 0xB64B, + 0x79A0, 0xB64C, + 0x79A1, 0xB64D, + 0x79A2, 0xB64E, + 0x79A3, 0xB64F, + 0x79A4, 0xB650, + 0x79A5, 0xB651, + 0x79A6, 0xB652, + 0x79A8, 0xB653, + 0x79A9, 0xB654, + 0x79AA, 0xB655, + 0x79AB, 0xB656, + 0x79AC, 0xB657, + 0x79AD, 0xB658, + 0x79AE, 0xB659, + 0x79AF, 0xB65A, + 0x79B0, 0xB65B, + 0x79B1, 0xB65C, + 0x79B2, 0xB65D, + 0x79B4, 0xB65E, + 0x79B5, 0xB65F, + 0x79B6, 0xB660, + 0x79B7, 0xB661, + 0x79B8, 0xB662, + 0x79BC, 0xB663, + 0x79BF, 0xB664, + 0x79C2, 0xB665, + 0x79C4, 0xB666, + 0x79C5, 0xB667, + 0x79C7, 0xB668, + 0x79C8, 0xB669, + 0x79CA, 0xB66A, + 0x79CC, 0xB66B, + 0x79CE, 0xB66C, + 0x79CF, 0xB66D, + 0x79D0, 0xB66E, + 0x79D3, 0xB66F, + 0x79D4, 0xB670, + 0x79D6, 0xB671, + 0x79D7, 0xB672, + 0x79D9, 0xB673, + 0x79DA, 0xB674, + 0x79DB, 0xB675, + 0x79DC, 0xB676, + 0x79DD, 0xB677, + 0x79DE, 0xB678, + 0x79E0, 0xB679, + 0x79E1, 0xB67A, + 0x79E2, 0xB67B, + 0x79E5, 0xB67C, + 0x79E8, 0xB67D, + 0x79EA, 0xB67E, + 0x79EC, 0xB680, + 0x79EE, 0xB681, + 0x79F1, 0xB682, + 0x79F2, 0xB683, + 0x79F3, 0xB684, + 0x79F4, 0xB685, + 0x79F5, 0xB686, + 0x79F6, 0xB687, + 0x79F7, 0xB688, + 0x79F9, 0xB689, + 0x79FA, 0xB68A, + 0x79FC, 0xB68B, + 0x79FE, 0xB68C, + 0x79FF, 0xB68D, + 0x7A01, 0xB68E, + 0x7A04, 0xB68F, + 0x7A05, 0xB690, + 0x7A07, 0xB691, + 0x7A08, 0xB692, + 0x7A09, 0xB693, + 0x7A0A, 0xB694, + 0x7A0C, 0xB695, + 0x7A0F, 0xB696, + 0x7A10, 0xB697, + 0x7A11, 0xB698, + 0x7A12, 0xB699, + 0x7A13, 0xB69A, + 0x7A15, 0xB69B, + 0x7A16, 0xB69C, + 0x7A18, 0xB69D, + 0x7A19, 0xB69E, + 0x7A1B, 0xB69F, + 0x7A1C, 0xB6A0, + 0x7A1D, 0xB740, + 0x7A1F, 0xB741, + 0x7A21, 0xB742, + 0x7A22, 0xB743, + 0x7A24, 0xB744, + 0x7A25, 0xB745, + 0x7A26, 0xB746, + 0x7A27, 0xB747, + 0x7A28, 0xB748, + 0x7A29, 0xB749, + 0x7A2A, 0xB74A, + 0x7A2B, 0xB74B, + 0x7A2C, 0xB74C, + 0x7A2D, 0xB74D, + 0x7A2E, 0xB74E, + 0x7A2F, 0xB74F, + 0x7A30, 0xB750, + 0x7A31, 0xB751, + 0x7A32, 0xB752, + 0x7A34, 0xB753, + 0x7A35, 0xB754, + 0x7A36, 0xB755, + 0x7A38, 0xB756, + 0x7A3A, 0xB757, + 0x7A3E, 0xB758, + 0x7A40, 0xB759, + 0x7A41, 0xB75A, + 0x7A42, 0xB75B, + 0x7A43, 0xB75C, + 0x7A44, 0xB75D, + 0x7A45, 0xB75E, + 0x7A47, 0xB75F, + 0x7A48, 0xB760, + 0x7A49, 0xB761, + 0x7A4A, 0xB762, + 0x7A4B, 0xB763, + 0x7A4C, 0xB764, + 0x7A4D, 0xB765, + 0x7A4E, 0xB766, + 0x7A4F, 0xB767, + 0x7A50, 0xB768, + 0x7A52, 0xB769, + 0x7A53, 0xB76A, + 0x7A54, 0xB76B, + 0x7A55, 0xB76C, + 0x7A56, 0xB76D, + 0x7A58, 0xB76E, + 0x7A59, 0xB76F, + 0x7A5A, 0xB770, + 0x7A5B, 0xB771, + 0x7A5C, 0xB772, + 0x7A5D, 0xB773, + 0x7A5E, 0xB774, + 0x7A5F, 0xB775, + 0x7A60, 0xB776, + 0x7A61, 0xB777, + 0x7A62, 0xB778, + 0x7A63, 0xB779, + 0x7A64, 0xB77A, + 0x7A65, 0xB77B, + 0x7A66, 0xB77C, + 0x7A67, 0xB77D, + 0x7A68, 0xB77E, + 0x7A69, 0xB780, + 0x7A6A, 0xB781, + 0x7A6B, 0xB782, + 0x7A6C, 0xB783, + 0x7A6D, 0xB784, + 0x7A6E, 0xB785, + 0x7A6F, 0xB786, + 0x7A71, 0xB787, + 0x7A72, 0xB788, + 0x7A73, 0xB789, + 0x7A75, 0xB78A, + 0x7A7B, 0xB78B, + 0x7A7C, 0xB78C, + 0x7A7D, 0xB78D, + 0x7A7E, 0xB78E, + 0x7A82, 0xB78F, + 0x7A85, 0xB790, + 0x7A87, 0xB791, + 0x7A89, 0xB792, + 0x7A8A, 0xB793, + 0x7A8B, 0xB794, + 0x7A8C, 0xB795, + 0x7A8E, 0xB796, + 0x7A8F, 0xB797, + 0x7A90, 0xB798, + 0x7A93, 0xB799, + 0x7A94, 0xB79A, + 0x7A99, 0xB79B, + 0x7A9A, 0xB79C, + 0x7A9B, 0xB79D, + 0x7A9E, 0xB79E, + 0x7AA1, 0xB79F, + 0x7AA2, 0xB7A0, + 0x7AA3, 0xB840, + 0x7AA4, 0xB841, + 0x7AA7, 0xB842, + 0x7AA9, 0xB843, + 0x7AAA, 0xB844, + 0x7AAB, 0xB845, + 0x7AAE, 0xB846, + 0x7AAF, 0xB847, + 0x7AB0, 0xB848, + 0x7AB1, 0xB849, + 0x7AB2, 0xB84A, + 0x7AB4, 0xB84B, + 0x7AB5, 0xB84C, + 0x7AB6, 0xB84D, + 0x7AB7, 0xB84E, + 0x7AB8, 0xB84F, + 0x7AB9, 0xB850, + 0x7ABA, 0xB851, + 0x7ABB, 0xB852, + 0x7ABC, 0xB853, + 0x7ABD, 0xB854, + 0x7ABE, 0xB855, + 0x7AC0, 0xB856, + 0x7AC1, 0xB857, + 0x7AC2, 0xB858, + 0x7AC3, 0xB859, + 0x7AC4, 0xB85A, + 0x7AC5, 0xB85B, + 0x7AC6, 0xB85C, + 0x7AC7, 0xB85D, + 0x7AC8, 0xB85E, + 0x7AC9, 0xB85F, + 0x7ACA, 0xB860, + 0x7ACC, 0xB861, + 0x7ACD, 0xB862, + 0x7ACE, 0xB863, + 0x7ACF, 0xB864, + 0x7AD0, 0xB865, + 0x7AD1, 0xB866, + 0x7AD2, 0xB867, + 0x7AD3, 0xB868, + 0x7AD4, 0xB869, + 0x7AD5, 0xB86A, + 0x7AD7, 0xB86B, + 0x7AD8, 0xB86C, + 0x7ADA, 0xB86D, + 0x7ADB, 0xB86E, + 0x7ADC, 0xB86F, + 0x7ADD, 0xB870, + 0x7AE1, 0xB871, + 0x7AE2, 0xB872, + 0x7AE4, 0xB873, + 0x7AE7, 0xB874, + 0x7AE8, 0xB875, + 0x7AE9, 0xB876, + 0x7AEA, 0xB877, + 0x7AEB, 0xB878, + 0x7AEC, 0xB879, + 0x7AEE, 0xB87A, + 0x7AF0, 0xB87B, + 0x7AF1, 0xB87C, + 0x7AF2, 0xB87D, + 0x7AF3, 0xB87E, + 0x7AF4, 0xB880, + 0x7AF5, 0xB881, + 0x7AF6, 0xB882, + 0x7AF7, 0xB883, + 0x7AF8, 0xB884, + 0x7AFB, 0xB885, + 0x7AFC, 0xB886, + 0x7AFE, 0xB887, + 0x7B00, 0xB888, + 0x7B01, 0xB889, + 0x7B02, 0xB88A, + 0x7B05, 0xB88B, + 0x7B07, 0xB88C, + 0x7B09, 0xB88D, + 0x7B0C, 0xB88E, + 0x7B0D, 0xB88F, + 0x7B0E, 0xB890, + 0x7B10, 0xB891, + 0x7B12, 0xB892, + 0x7B13, 0xB893, + 0x7B16, 0xB894, + 0x7B17, 0xB895, + 0x7B18, 0xB896, + 0x7B1A, 0xB897, + 0x7B1C, 0xB898, + 0x7B1D, 0xB899, + 0x7B1F, 0xB89A, + 0x7B21, 0xB89B, + 0x7B22, 0xB89C, + 0x7B23, 0xB89D, + 0x7B27, 0xB89E, + 0x7B29, 0xB89F, + 0x7B2D, 0xB8A0, + 0x7B2F, 0xB940, + 0x7B30, 0xB941, + 0x7B32, 0xB942, + 0x7B34, 0xB943, + 0x7B35, 0xB944, + 0x7B36, 0xB945, + 0x7B37, 0xB946, + 0x7B39, 0xB947, + 0x7B3B, 0xB948, + 0x7B3D, 0xB949, + 0x7B3F, 0xB94A, + 0x7B40, 0xB94B, + 0x7B41, 0xB94C, + 0x7B42, 0xB94D, + 0x7B43, 0xB94E, + 0x7B44, 0xB94F, + 0x7B46, 0xB950, + 0x7B48, 0xB951, + 0x7B4A, 0xB952, + 0x7B4D, 0xB953, + 0x7B4E, 0xB954, + 0x7B53, 0xB955, + 0x7B55, 0xB956, + 0x7B57, 0xB957, + 0x7B59, 0xB958, + 0x7B5C, 0xB959, + 0x7B5E, 0xB95A, + 0x7B5F, 0xB95B, + 0x7B61, 0xB95C, + 0x7B63, 0xB95D, + 0x7B64, 0xB95E, + 0x7B65, 0xB95F, + 0x7B66, 0xB960, + 0x7B67, 0xB961, + 0x7B68, 0xB962, + 0x7B69, 0xB963, + 0x7B6A, 0xB964, + 0x7B6B, 0xB965, + 0x7B6C, 0xB966, + 0x7B6D, 0xB967, + 0x7B6F, 0xB968, + 0x7B70, 0xB969, + 0x7B73, 0xB96A, + 0x7B74, 0xB96B, + 0x7B76, 0xB96C, + 0x7B78, 0xB96D, + 0x7B7A, 0xB96E, + 0x7B7C, 0xB96F, + 0x7B7D, 0xB970, + 0x7B7F, 0xB971, + 0x7B81, 0xB972, + 0x7B82, 0xB973, + 0x7B83, 0xB974, + 0x7B84, 0xB975, + 0x7B86, 0xB976, + 0x7B87, 0xB977, + 0x7B88, 0xB978, + 0x7B89, 0xB979, + 0x7B8A, 0xB97A, + 0x7B8B, 0xB97B, + 0x7B8C, 0xB97C, + 0x7B8E, 0xB97D, + 0x7B8F, 0xB97E, + 0x7B91, 0xB980, + 0x7B92, 0xB981, + 0x7B93, 0xB982, + 0x7B96, 0xB983, + 0x7B98, 0xB984, + 0x7B99, 0xB985, + 0x7B9A, 0xB986, + 0x7B9B, 0xB987, + 0x7B9E, 0xB988, + 0x7B9F, 0xB989, + 0x7BA0, 0xB98A, + 0x7BA3, 0xB98B, + 0x7BA4, 0xB98C, + 0x7BA5, 0xB98D, + 0x7BAE, 0xB98E, + 0x7BAF, 0xB98F, + 0x7BB0, 0xB990, + 0x7BB2, 0xB991, + 0x7BB3, 0xB992, + 0x7BB5, 0xB993, + 0x7BB6, 0xB994, + 0x7BB7, 0xB995, + 0x7BB9, 0xB996, + 0x7BBA, 0xB997, + 0x7BBB, 0xB998, + 0x7BBC, 0xB999, + 0x7BBD, 0xB99A, + 0x7BBE, 0xB99B, + 0x7BBF, 0xB99C, + 0x7BC0, 0xB99D, + 0x7BC2, 0xB99E, + 0x7BC3, 0xB99F, + 0x7BC4, 0xB9A0, + 0x7BC5, 0xBA40, + 0x7BC8, 0xBA41, + 0x7BC9, 0xBA42, + 0x7BCA, 0xBA43, + 0x7BCB, 0xBA44, + 0x7BCD, 0xBA45, + 0x7BCE, 0xBA46, + 0x7BCF, 0xBA47, + 0x7BD0, 0xBA48, + 0x7BD2, 0xBA49, + 0x7BD4, 0xBA4A, + 0x7BD5, 0xBA4B, + 0x7BD6, 0xBA4C, + 0x7BD7, 0xBA4D, + 0x7BD8, 0xBA4E, + 0x7BDB, 0xBA4F, + 0x7BDC, 0xBA50, + 0x7BDE, 0xBA51, + 0x7BDF, 0xBA52, + 0x7BE0, 0xBA53, + 0x7BE2, 0xBA54, + 0x7BE3, 0xBA55, + 0x7BE4, 0xBA56, + 0x7BE7, 0xBA57, + 0x7BE8, 0xBA58, + 0x7BE9, 0xBA59, + 0x7BEB, 0xBA5A, + 0x7BEC, 0xBA5B, + 0x7BED, 0xBA5C, + 0x7BEF, 0xBA5D, + 0x7BF0, 0xBA5E, + 0x7BF2, 0xBA5F, + 0x7BF3, 0xBA60, + 0x7BF4, 0xBA61, + 0x7BF5, 0xBA62, + 0x7BF6, 0xBA63, + 0x7BF8, 0xBA64, + 0x7BF9, 0xBA65, + 0x7BFA, 0xBA66, + 0x7BFB, 0xBA67, + 0x7BFD, 0xBA68, + 0x7BFF, 0xBA69, + 0x7C00, 0xBA6A, + 0x7C01, 0xBA6B, + 0x7C02, 0xBA6C, + 0x7C03, 0xBA6D, + 0x7C04, 0xBA6E, + 0x7C05, 0xBA6F, + 0x7C06, 0xBA70, + 0x7C08, 0xBA71, + 0x7C09, 0xBA72, + 0x7C0A, 0xBA73, + 0x7C0D, 0xBA74, + 0x7C0E, 0xBA75, + 0x7C10, 0xBA76, + 0x7C11, 0xBA77, + 0x7C12, 0xBA78, + 0x7C13, 0xBA79, + 0x7C14, 0xBA7A, + 0x7C15, 0xBA7B, + 0x7C17, 0xBA7C, + 0x7C18, 0xBA7D, + 0x7C19, 0xBA7E, + 0x7C1A, 0xBA80, + 0x7C1B, 0xBA81, + 0x7C1C, 0xBA82, + 0x7C1D, 0xBA83, + 0x7C1E, 0xBA84, + 0x7C20, 0xBA85, + 0x7C21, 0xBA86, + 0x7C22, 0xBA87, + 0x7C23, 0xBA88, + 0x7C24, 0xBA89, + 0x7C25, 0xBA8A, + 0x7C28, 0xBA8B, + 0x7C29, 0xBA8C, + 0x7C2B, 0xBA8D, + 0x7C2C, 0xBA8E, + 0x7C2D, 0xBA8F, + 0x7C2E, 0xBA90, + 0x7C2F, 0xBA91, + 0x7C30, 0xBA92, + 0x7C31, 0xBA93, + 0x7C32, 0xBA94, + 0x7C33, 0xBA95, + 0x7C34, 0xBA96, + 0x7C35, 0xBA97, + 0x7C36, 0xBA98, + 0x7C37, 0xBA99, + 0x7C39, 0xBA9A, + 0x7C3A, 0xBA9B, + 0x7C3B, 0xBA9C, + 0x7C3C, 0xBA9D, + 0x7C3D, 0xBA9E, + 0x7C3E, 0xBA9F, + 0x7C42, 0xBAA0, + 0x7C43, 0xBB40, + 0x7C44, 0xBB41, + 0x7C45, 0xBB42, + 0x7C46, 0xBB43, + 0x7C47, 0xBB44, + 0x7C48, 0xBB45, + 0x7C49, 0xBB46, + 0x7C4A, 0xBB47, + 0x7C4B, 0xBB48, + 0x7C4C, 0xBB49, + 0x7C4E, 0xBB4A, + 0x7C4F, 0xBB4B, + 0x7C50, 0xBB4C, + 0x7C51, 0xBB4D, + 0x7C52, 0xBB4E, + 0x7C53, 0xBB4F, + 0x7C54, 0xBB50, + 0x7C55, 0xBB51, + 0x7C56, 0xBB52, + 0x7C57, 0xBB53, + 0x7C58, 0xBB54, + 0x7C59, 0xBB55, + 0x7C5A, 0xBB56, + 0x7C5B, 0xBB57, + 0x7C5C, 0xBB58, + 0x7C5D, 0xBB59, + 0x7C5E, 0xBB5A, + 0x7C5F, 0xBB5B, + 0x7C60, 0xBB5C, + 0x7C61, 0xBB5D, + 0x7C62, 0xBB5E, + 0x7C63, 0xBB5F, + 0x7C64, 0xBB60, + 0x7C65, 0xBB61, + 0x7C66, 0xBB62, + 0x7C67, 0xBB63, + 0x7C68, 0xBB64, + 0x7C69, 0xBB65, + 0x7C6A, 0xBB66, + 0x7C6B, 0xBB67, + 0x7C6C, 0xBB68, + 0x7C6D, 0xBB69, + 0x7C6E, 0xBB6A, + 0x7C6F, 0xBB6B, + 0x7C70, 0xBB6C, + 0x7C71, 0xBB6D, + 0x7C72, 0xBB6E, + 0x7C75, 0xBB6F, + 0x7C76, 0xBB70, + 0x7C77, 0xBB71, + 0x7C78, 0xBB72, + 0x7C79, 0xBB73, + 0x7C7A, 0xBB74, + 0x7C7E, 0xBB75, + 0x7C7F, 0xBB76, + 0x7C80, 0xBB77, + 0x7C81, 0xBB78, + 0x7C82, 0xBB79, + 0x7C83, 0xBB7A, + 0x7C84, 0xBB7B, + 0x7C85, 0xBB7C, + 0x7C86, 0xBB7D, + 0x7C87, 0xBB7E, + 0x7C88, 0xBB80, + 0x7C8A, 0xBB81, + 0x7C8B, 0xBB82, + 0x7C8C, 0xBB83, + 0x7C8D, 0xBB84, + 0x7C8E, 0xBB85, + 0x7C8F, 0xBB86, + 0x7C90, 0xBB87, + 0x7C93, 0xBB88, + 0x7C94, 0xBB89, + 0x7C96, 0xBB8A, + 0x7C99, 0xBB8B, + 0x7C9A, 0xBB8C, + 0x7C9B, 0xBB8D, + 0x7CA0, 0xBB8E, + 0x7CA1, 0xBB8F, + 0x7CA3, 0xBB90, + 0x7CA6, 0xBB91, + 0x7CA7, 0xBB92, + 0x7CA8, 0xBB93, + 0x7CA9, 0xBB94, + 0x7CAB, 0xBB95, + 0x7CAC, 0xBB96, + 0x7CAD, 0xBB97, + 0x7CAF, 0xBB98, + 0x7CB0, 0xBB99, + 0x7CB4, 0xBB9A, + 0x7CB5, 0xBB9B, + 0x7CB6, 0xBB9C, + 0x7CB7, 0xBB9D, + 0x7CB8, 0xBB9E, + 0x7CBA, 0xBB9F, + 0x7CBB, 0xBBA0, + 0x7CBF, 0xBC40, + 0x7CC0, 0xBC41, + 0x7CC2, 0xBC42, + 0x7CC3, 0xBC43, + 0x7CC4, 0xBC44, + 0x7CC6, 0xBC45, + 0x7CC9, 0xBC46, + 0x7CCB, 0xBC47, + 0x7CCE, 0xBC48, + 0x7CCF, 0xBC49, + 0x7CD0, 0xBC4A, + 0x7CD1, 0xBC4B, + 0x7CD2, 0xBC4C, + 0x7CD3, 0xBC4D, + 0x7CD4, 0xBC4E, + 0x7CD8, 0xBC4F, + 0x7CDA, 0xBC50, + 0x7CDB, 0xBC51, + 0x7CDD, 0xBC52, + 0x7CDE, 0xBC53, + 0x7CE1, 0xBC54, + 0x7CE2, 0xBC55, + 0x7CE3, 0xBC56, + 0x7CE4, 0xBC57, + 0x7CE5, 0xBC58, + 0x7CE6, 0xBC59, + 0x7CE7, 0xBC5A, + 0x7CE9, 0xBC5B, + 0x7CEA, 0xBC5C, + 0x7CEB, 0xBC5D, + 0x7CEC, 0xBC5E, + 0x7CED, 0xBC5F, + 0x7CEE, 0xBC60, + 0x7CF0, 0xBC61, + 0x7CF1, 0xBC62, + 0x7CF2, 0xBC63, + 0x7CF3, 0xBC64, + 0x7CF4, 0xBC65, + 0x7CF5, 0xBC66, + 0x7CF6, 0xBC67, + 0x7CF7, 0xBC68, + 0x7CF9, 0xBC69, + 0x7CFA, 0xBC6A, + 0x7CFC, 0xBC6B, + 0x7CFD, 0xBC6C, + 0x7CFE, 0xBC6D, + 0x7CFF, 0xBC6E, + 0x7D00, 0xBC6F, + 0x7D01, 0xBC70, + 0x7D02, 0xBC71, + 0x7D03, 0xBC72, + 0x7D04, 0xBC73, + 0x7D05, 0xBC74, + 0x7D06, 0xBC75, + 0x7D07, 0xBC76, + 0x7D08, 0xBC77, + 0x7D09, 0xBC78, + 0x7D0B, 0xBC79, + 0x7D0C, 0xBC7A, + 0x7D0D, 0xBC7B, + 0x7D0E, 0xBC7C, + 0x7D0F, 0xBC7D, + 0x7D10, 0xBC7E, + 0x7D11, 0xBC80, + 0x7D12, 0xBC81, + 0x7D13, 0xBC82, + 0x7D14, 0xBC83, + 0x7D15, 0xBC84, + 0x7D16, 0xBC85, + 0x7D17, 0xBC86, + 0x7D18, 0xBC87, + 0x7D19, 0xBC88, + 0x7D1A, 0xBC89, + 0x7D1B, 0xBC8A, + 0x7D1C, 0xBC8B, + 0x7D1D, 0xBC8C, + 0x7D1E, 0xBC8D, + 0x7D1F, 0xBC8E, + 0x7D21, 0xBC8F, + 0x7D23, 0xBC90, + 0x7D24, 0xBC91, + 0x7D25, 0xBC92, + 0x7D26, 0xBC93, + 0x7D28, 0xBC94, + 0x7D29, 0xBC95, + 0x7D2A, 0xBC96, + 0x7D2C, 0xBC97, + 0x7D2D, 0xBC98, + 0x7D2E, 0xBC99, + 0x7D30, 0xBC9A, + 0x7D31, 0xBC9B, + 0x7D32, 0xBC9C, + 0x7D33, 0xBC9D, + 0x7D34, 0xBC9E, + 0x7D35, 0xBC9F, + 0x7D36, 0xBCA0, + 0x7D37, 0xBD40, + 0x7D38, 0xBD41, + 0x7D39, 0xBD42, + 0x7D3A, 0xBD43, + 0x7D3B, 0xBD44, + 0x7D3C, 0xBD45, + 0x7D3D, 0xBD46, + 0x7D3E, 0xBD47, + 0x7D3F, 0xBD48, + 0x7D40, 0xBD49, + 0x7D41, 0xBD4A, + 0x7D42, 0xBD4B, + 0x7D43, 0xBD4C, + 0x7D44, 0xBD4D, + 0x7D45, 0xBD4E, + 0x7D46, 0xBD4F, + 0x7D47, 0xBD50, + 0x7D48, 0xBD51, + 0x7D49, 0xBD52, + 0x7D4A, 0xBD53, + 0x7D4B, 0xBD54, + 0x7D4C, 0xBD55, + 0x7D4D, 0xBD56, + 0x7D4E, 0xBD57, + 0x7D4F, 0xBD58, + 0x7D50, 0xBD59, + 0x7D51, 0xBD5A, + 0x7D52, 0xBD5B, + 0x7D53, 0xBD5C, + 0x7D54, 0xBD5D, + 0x7D55, 0xBD5E, + 0x7D56, 0xBD5F, + 0x7D57, 0xBD60, + 0x7D58, 0xBD61, + 0x7D59, 0xBD62, + 0x7D5A, 0xBD63, + 0x7D5B, 0xBD64, + 0x7D5C, 0xBD65, + 0x7D5D, 0xBD66, + 0x7D5E, 0xBD67, + 0x7D5F, 0xBD68, + 0x7D60, 0xBD69, + 0x7D61, 0xBD6A, + 0x7D62, 0xBD6B, + 0x7D63, 0xBD6C, + 0x7D64, 0xBD6D, + 0x7D65, 0xBD6E, + 0x7D66, 0xBD6F, + 0x7D67, 0xBD70, + 0x7D68, 0xBD71, + 0x7D69, 0xBD72, + 0x7D6A, 0xBD73, + 0x7D6B, 0xBD74, + 0x7D6C, 0xBD75, + 0x7D6D, 0xBD76, + 0x7D6F, 0xBD77, + 0x7D70, 0xBD78, + 0x7D71, 0xBD79, + 0x7D72, 0xBD7A, + 0x7D73, 0xBD7B, + 0x7D74, 0xBD7C, + 0x7D75, 0xBD7D, + 0x7D76, 0xBD7E, + 0x7D78, 0xBD80, + 0x7D79, 0xBD81, + 0x7D7A, 0xBD82, + 0x7D7B, 0xBD83, + 0x7D7C, 0xBD84, + 0x7D7D, 0xBD85, + 0x7D7E, 0xBD86, + 0x7D7F, 0xBD87, + 0x7D80, 0xBD88, + 0x7D81, 0xBD89, + 0x7D82, 0xBD8A, + 0x7D83, 0xBD8B, + 0x7D84, 0xBD8C, + 0x7D85, 0xBD8D, + 0x7D86, 0xBD8E, + 0x7D87, 0xBD8F, + 0x7D88, 0xBD90, + 0x7D89, 0xBD91, + 0x7D8A, 0xBD92, + 0x7D8B, 0xBD93, + 0x7D8C, 0xBD94, + 0x7D8D, 0xBD95, + 0x7D8E, 0xBD96, + 0x7D8F, 0xBD97, + 0x7D90, 0xBD98, + 0x7D91, 0xBD99, + 0x7D92, 0xBD9A, + 0x7D93, 0xBD9B, + 0x7D94, 0xBD9C, + 0x7D95, 0xBD9D, + 0x7D96, 0xBD9E, + 0x7D97, 0xBD9F, + 0x7D98, 0xBDA0, + 0x7D99, 0xBE40, + 0x7D9A, 0xBE41, + 0x7D9B, 0xBE42, + 0x7D9C, 0xBE43, + 0x7D9D, 0xBE44, + 0x7D9E, 0xBE45, + 0x7D9F, 0xBE46, + 0x7DA0, 0xBE47, + 0x7DA1, 0xBE48, + 0x7DA2, 0xBE49, + 0x7DA3, 0xBE4A, + 0x7DA4, 0xBE4B, + 0x7DA5, 0xBE4C, + 0x7DA7, 0xBE4D, + 0x7DA8, 0xBE4E, + 0x7DA9, 0xBE4F, + 0x7DAA, 0xBE50, + 0x7DAB, 0xBE51, + 0x7DAC, 0xBE52, + 0x7DAD, 0xBE53, + 0x7DAF, 0xBE54, + 0x7DB0, 0xBE55, + 0x7DB1, 0xBE56, + 0x7DB2, 0xBE57, + 0x7DB3, 0xBE58, + 0x7DB4, 0xBE59, + 0x7DB5, 0xBE5A, + 0x7DB6, 0xBE5B, + 0x7DB7, 0xBE5C, + 0x7DB8, 0xBE5D, + 0x7DB9, 0xBE5E, + 0x7DBA, 0xBE5F, + 0x7DBB, 0xBE60, + 0x7DBC, 0xBE61, + 0x7DBD, 0xBE62, + 0x7DBE, 0xBE63, + 0x7DBF, 0xBE64, + 0x7DC0, 0xBE65, + 0x7DC1, 0xBE66, + 0x7DC2, 0xBE67, + 0x7DC3, 0xBE68, + 0x7DC4, 0xBE69, + 0x7DC5, 0xBE6A, + 0x7DC6, 0xBE6B, + 0x7DC7, 0xBE6C, + 0x7DC8, 0xBE6D, + 0x7DC9, 0xBE6E, + 0x7DCA, 0xBE6F, + 0x7DCB, 0xBE70, + 0x7DCC, 0xBE71, + 0x7DCD, 0xBE72, + 0x7DCE, 0xBE73, + 0x7DCF, 0xBE74, + 0x7DD0, 0xBE75, + 0x7DD1, 0xBE76, + 0x7DD2, 0xBE77, + 0x7DD3, 0xBE78, + 0x7DD4, 0xBE79, + 0x7DD5, 0xBE7A, + 0x7DD6, 0xBE7B, + 0x7DD7, 0xBE7C, + 0x7DD8, 0xBE7D, + 0x7DD9, 0xBE7E, + 0x7DDA, 0xBE80, + 0x7DDB, 0xBE81, + 0x7DDC, 0xBE82, + 0x7DDD, 0xBE83, + 0x7DDE, 0xBE84, + 0x7DDF, 0xBE85, + 0x7DE0, 0xBE86, + 0x7DE1, 0xBE87, + 0x7DE2, 0xBE88, + 0x7DE3, 0xBE89, + 0x7DE4, 0xBE8A, + 0x7DE5, 0xBE8B, + 0x7DE6, 0xBE8C, + 0x7DE7, 0xBE8D, + 0x7DE8, 0xBE8E, + 0x7DE9, 0xBE8F, + 0x7DEA, 0xBE90, + 0x7DEB, 0xBE91, + 0x7DEC, 0xBE92, + 0x7DED, 0xBE93, + 0x7DEE, 0xBE94, + 0x7DEF, 0xBE95, + 0x7DF0, 0xBE96, + 0x7DF1, 0xBE97, + 0x7DF2, 0xBE98, + 0x7DF3, 0xBE99, + 0x7DF4, 0xBE9A, + 0x7DF5, 0xBE9B, + 0x7DF6, 0xBE9C, + 0x7DF7, 0xBE9D, + 0x7DF8, 0xBE9E, + 0x7DF9, 0xBE9F, + 0x7DFA, 0xBEA0, + 0x7DFB, 0xBF40, + 0x7DFC, 0xBF41, + 0x7DFD, 0xBF42, + 0x7DFE, 0xBF43, + 0x7DFF, 0xBF44, + 0x7E00, 0xBF45, + 0x7E01, 0xBF46, + 0x7E02, 0xBF47, + 0x7E03, 0xBF48, + 0x7E04, 0xBF49, + 0x7E05, 0xBF4A, + 0x7E06, 0xBF4B, + 0x7E07, 0xBF4C, + 0x7E08, 0xBF4D, + 0x7E09, 0xBF4E, + 0x7E0A, 0xBF4F, + 0x7E0B, 0xBF50, + 0x7E0C, 0xBF51, + 0x7E0D, 0xBF52, + 0x7E0E, 0xBF53, + 0x7E0F, 0xBF54, + 0x7E10, 0xBF55, + 0x7E11, 0xBF56, + 0x7E12, 0xBF57, + 0x7E13, 0xBF58, + 0x7E14, 0xBF59, + 0x7E15, 0xBF5A, + 0x7E16, 0xBF5B, + 0x7E17, 0xBF5C, + 0x7E18, 0xBF5D, + 0x7E19, 0xBF5E, + 0x7E1A, 0xBF5F, + 0x7E1B, 0xBF60, + 0x7E1C, 0xBF61, + 0x7E1D, 0xBF62, + 0x7E1E, 0xBF63, + 0x7E1F, 0xBF64, + 0x7E20, 0xBF65, + 0x7E21, 0xBF66, + 0x7E22, 0xBF67, + 0x7E23, 0xBF68, + 0x7E24, 0xBF69, + 0x7E25, 0xBF6A, + 0x7E26, 0xBF6B, + 0x7E27, 0xBF6C, + 0x7E28, 0xBF6D, + 0x7E29, 0xBF6E, + 0x7E2A, 0xBF6F, + 0x7E2B, 0xBF70, + 0x7E2C, 0xBF71, + 0x7E2D, 0xBF72, + 0x7E2E, 0xBF73, + 0x7E2F, 0xBF74, + 0x7E30, 0xBF75, + 0x7E31, 0xBF76, + 0x7E32, 0xBF77, + 0x7E33, 0xBF78, + 0x7E34, 0xBF79, + 0x7E35, 0xBF7A, + 0x7E36, 0xBF7B, + 0x7E37, 0xBF7C, + 0x7E38, 0xBF7D, + 0x7E39, 0xBF7E, + 0x7E3A, 0xBF80, + 0x7E3C, 0xBF81, + 0x7E3D, 0xBF82, + 0x7E3E, 0xBF83, + 0x7E3F, 0xBF84, + 0x7E40, 0xBF85, + 0x7E42, 0xBF86, + 0x7E43, 0xBF87, + 0x7E44, 0xBF88, + 0x7E45, 0xBF89, + 0x7E46, 0xBF8A, + 0x7E48, 0xBF8B, + 0x7E49, 0xBF8C, + 0x7E4A, 0xBF8D, + 0x7E4B, 0xBF8E, + 0x7E4C, 0xBF8F, + 0x7E4D, 0xBF90, + 0x7E4E, 0xBF91, + 0x7E4F, 0xBF92, + 0x7E50, 0xBF93, + 0x7E51, 0xBF94, + 0x7E52, 0xBF95, + 0x7E53, 0xBF96, + 0x7E54, 0xBF97, + 0x7E55, 0xBF98, + 0x7E56, 0xBF99, + 0x7E57, 0xBF9A, + 0x7E58, 0xBF9B, + 0x7E59, 0xBF9C, + 0x7E5A, 0xBF9D, + 0x7E5B, 0xBF9E, + 0x7E5C, 0xBF9F, + 0x7E5D, 0xBFA0, + 0x7E5E, 0xC040, + 0x7E5F, 0xC041, + 0x7E60, 0xC042, + 0x7E61, 0xC043, + 0x7E62, 0xC044, + 0x7E63, 0xC045, + 0x7E64, 0xC046, + 0x7E65, 0xC047, + 0x7E66, 0xC048, + 0x7E67, 0xC049, + 0x7E68, 0xC04A, + 0x7E69, 0xC04B, + 0x7E6A, 0xC04C, + 0x7E6B, 0xC04D, + 0x7E6C, 0xC04E, + 0x7E6D, 0xC04F, + 0x7E6E, 0xC050, + 0x7E6F, 0xC051, + 0x7E70, 0xC052, + 0x7E71, 0xC053, + 0x7E72, 0xC054, + 0x7E73, 0xC055, + 0x7E74, 0xC056, + 0x7E75, 0xC057, + 0x7E76, 0xC058, + 0x7E77, 0xC059, + 0x7E78, 0xC05A, + 0x7E79, 0xC05B, + 0x7E7A, 0xC05C, + 0x7E7B, 0xC05D, + 0x7E7C, 0xC05E, + 0x7E7D, 0xC05F, + 0x7E7E, 0xC060, + 0x7E7F, 0xC061, + 0x7E80, 0xC062, + 0x7E81, 0xC063, + 0x7E83, 0xC064, + 0x7E84, 0xC065, + 0x7E85, 0xC066, + 0x7E86, 0xC067, + 0x7E87, 0xC068, + 0x7E88, 0xC069, + 0x7E89, 0xC06A, + 0x7E8A, 0xC06B, + 0x7E8B, 0xC06C, + 0x7E8C, 0xC06D, + 0x7E8D, 0xC06E, + 0x7E8E, 0xC06F, + 0x7E8F, 0xC070, + 0x7E90, 0xC071, + 0x7E91, 0xC072, + 0x7E92, 0xC073, + 0x7E93, 0xC074, + 0x7E94, 0xC075, + 0x7E95, 0xC076, + 0x7E96, 0xC077, + 0x7E97, 0xC078, + 0x7E98, 0xC079, + 0x7E99, 0xC07A, + 0x7E9A, 0xC07B, + 0x7E9C, 0xC07C, + 0x7E9D, 0xC07D, + 0x7E9E, 0xC07E, + 0x7EAE, 0xC080, + 0x7EB4, 0xC081, + 0x7EBB, 0xC082, + 0x7EBC, 0xC083, + 0x7ED6, 0xC084, + 0x7EE4, 0xC085, + 0x7EEC, 0xC086, + 0x7EF9, 0xC087, + 0x7F0A, 0xC088, + 0x7F10, 0xC089, + 0x7F1E, 0xC08A, + 0x7F37, 0xC08B, + 0x7F39, 0xC08C, + 0x7F3B, 0xC08D, + 0x7F3C, 0xC08E, + 0x7F3D, 0xC08F, + 0x7F3E, 0xC090, + 0x7F3F, 0xC091, + 0x7F40, 0xC092, + 0x7F41, 0xC093, + 0x7F43, 0xC094, + 0x7F46, 0xC095, + 0x7F47, 0xC096, + 0x7F48, 0xC097, + 0x7F49, 0xC098, + 0x7F4A, 0xC099, + 0x7F4B, 0xC09A, + 0x7F4C, 0xC09B, + 0x7F4D, 0xC09C, + 0x7F4E, 0xC09D, + 0x7F4F, 0xC09E, + 0x7F52, 0xC09F, + 0x7F53, 0xC0A0, + 0x7F56, 0xC140, + 0x7F59, 0xC141, + 0x7F5B, 0xC142, + 0x7F5C, 0xC143, + 0x7F5D, 0xC144, + 0x7F5E, 0xC145, + 0x7F60, 0xC146, + 0x7F63, 0xC147, + 0x7F64, 0xC148, + 0x7F65, 0xC149, + 0x7F66, 0xC14A, + 0x7F67, 0xC14B, + 0x7F6B, 0xC14C, + 0x7F6C, 0xC14D, + 0x7F6D, 0xC14E, + 0x7F6F, 0xC14F, + 0x7F70, 0xC150, + 0x7F73, 0xC151, + 0x7F75, 0xC152, + 0x7F76, 0xC153, + 0x7F77, 0xC154, + 0x7F78, 0xC155, + 0x7F7A, 0xC156, + 0x7F7B, 0xC157, + 0x7F7C, 0xC158, + 0x7F7D, 0xC159, + 0x7F7F, 0xC15A, + 0x7F80, 0xC15B, + 0x7F82, 0xC15C, + 0x7F83, 0xC15D, + 0x7F84, 0xC15E, + 0x7F85, 0xC15F, + 0x7F86, 0xC160, + 0x7F87, 0xC161, + 0x7F88, 0xC162, + 0x7F89, 0xC163, + 0x7F8B, 0xC164, + 0x7F8D, 0xC165, + 0x7F8F, 0xC166, + 0x7F90, 0xC167, + 0x7F91, 0xC168, + 0x7F92, 0xC169, + 0x7F93, 0xC16A, + 0x7F95, 0xC16B, + 0x7F96, 0xC16C, + 0x7F97, 0xC16D, + 0x7F98, 0xC16E, + 0x7F99, 0xC16F, + 0x7F9B, 0xC170, + 0x7F9C, 0xC171, + 0x7FA0, 0xC172, + 0x7FA2, 0xC173, + 0x7FA3, 0xC174, + 0x7FA5, 0xC175, + 0x7FA6, 0xC176, + 0x7FA8, 0xC177, + 0x7FA9, 0xC178, + 0x7FAA, 0xC179, + 0x7FAB, 0xC17A, + 0x7FAC, 0xC17B, + 0x7FAD, 0xC17C, + 0x7FAE, 0xC17D, + 0x7FB1, 0xC17E, + 0x7FB3, 0xC180, + 0x7FB4, 0xC181, + 0x7FB5, 0xC182, + 0x7FB6, 0xC183, + 0x7FB7, 0xC184, + 0x7FBA, 0xC185, + 0x7FBB, 0xC186, + 0x7FBE, 0xC187, + 0x7FC0, 0xC188, + 0x7FC2, 0xC189, + 0x7FC3, 0xC18A, + 0x7FC4, 0xC18B, + 0x7FC6, 0xC18C, + 0x7FC7, 0xC18D, + 0x7FC8, 0xC18E, + 0x7FC9, 0xC18F, + 0x7FCB, 0xC190, + 0x7FCD, 0xC191, + 0x7FCF, 0xC192, + 0x7FD0, 0xC193, + 0x7FD1, 0xC194, + 0x7FD2, 0xC195, + 0x7FD3, 0xC196, + 0x7FD6, 0xC197, + 0x7FD7, 0xC198, + 0x7FD9, 0xC199, + 0x7FDA, 0xC19A, + 0x7FDB, 0xC19B, + 0x7FDC, 0xC19C, + 0x7FDD, 0xC19D, + 0x7FDE, 0xC19E, + 0x7FE2, 0xC19F, + 0x7FE3, 0xC1A0, + 0x7FE4, 0xC240, + 0x7FE7, 0xC241, + 0x7FE8, 0xC242, + 0x7FEA, 0xC243, + 0x7FEB, 0xC244, + 0x7FEC, 0xC245, + 0x7FED, 0xC246, + 0x7FEF, 0xC247, + 0x7FF2, 0xC248, + 0x7FF4, 0xC249, + 0x7FF5, 0xC24A, + 0x7FF6, 0xC24B, + 0x7FF7, 0xC24C, + 0x7FF8, 0xC24D, + 0x7FF9, 0xC24E, + 0x7FFA, 0xC24F, + 0x7FFD, 0xC250, + 0x7FFE, 0xC251, + 0x7FFF, 0xC252, + 0x8002, 0xC253, + 0x8007, 0xC254, + 0x8008, 0xC255, + 0x8009, 0xC256, + 0x800A, 0xC257, + 0x800E, 0xC258, + 0x800F, 0xC259, + 0x8011, 0xC25A, + 0x8013, 0xC25B, + 0x801A, 0xC25C, + 0x801B, 0xC25D, + 0x801D, 0xC25E, + 0x801E, 0xC25F, + 0x801F, 0xC260, + 0x8021, 0xC261, + 0x8023, 0xC262, + 0x8024, 0xC263, + 0x802B, 0xC264, + 0x802C, 0xC265, + 0x802D, 0xC266, + 0x802E, 0xC267, + 0x802F, 0xC268, + 0x8030, 0xC269, + 0x8032, 0xC26A, + 0x8034, 0xC26B, + 0x8039, 0xC26C, + 0x803A, 0xC26D, + 0x803C, 0xC26E, + 0x803E, 0xC26F, + 0x8040, 0xC270, + 0x8041, 0xC271, + 0x8044, 0xC272, + 0x8045, 0xC273, + 0x8047, 0xC274, + 0x8048, 0xC275, + 0x8049, 0xC276, + 0x804E, 0xC277, + 0x804F, 0xC278, + 0x8050, 0xC279, + 0x8051, 0xC27A, + 0x8053, 0xC27B, + 0x8055, 0xC27C, + 0x8056, 0xC27D, + 0x8057, 0xC27E, + 0x8059, 0xC280, + 0x805B, 0xC281, + 0x805C, 0xC282, + 0x805D, 0xC283, + 0x805E, 0xC284, + 0x805F, 0xC285, + 0x8060, 0xC286, + 0x8061, 0xC287, + 0x8062, 0xC288, + 0x8063, 0xC289, + 0x8064, 0xC28A, + 0x8065, 0xC28B, + 0x8066, 0xC28C, + 0x8067, 0xC28D, + 0x8068, 0xC28E, + 0x806B, 0xC28F, + 0x806C, 0xC290, + 0x806D, 0xC291, + 0x806E, 0xC292, + 0x806F, 0xC293, + 0x8070, 0xC294, + 0x8072, 0xC295, + 0x8073, 0xC296, + 0x8074, 0xC297, + 0x8075, 0xC298, + 0x8076, 0xC299, + 0x8077, 0xC29A, + 0x8078, 0xC29B, + 0x8079, 0xC29C, + 0x807A, 0xC29D, + 0x807B, 0xC29E, + 0x807C, 0xC29F, + 0x807D, 0xC2A0, + 0x807E, 0xC340, + 0x8081, 0xC341, + 0x8082, 0xC342, + 0x8085, 0xC343, + 0x8088, 0xC344, + 0x808A, 0xC345, + 0x808D, 0xC346, + 0x808E, 0xC347, + 0x808F, 0xC348, + 0x8090, 0xC349, + 0x8091, 0xC34A, + 0x8092, 0xC34B, + 0x8094, 0xC34C, + 0x8095, 0xC34D, + 0x8097, 0xC34E, + 0x8099, 0xC34F, + 0x809E, 0xC350, + 0x80A3, 0xC351, + 0x80A6, 0xC352, + 0x80A7, 0xC353, + 0x80A8, 0xC354, + 0x80AC, 0xC355, + 0x80B0, 0xC356, + 0x80B3, 0xC357, + 0x80B5, 0xC358, + 0x80B6, 0xC359, + 0x80B8, 0xC35A, + 0x80B9, 0xC35B, + 0x80BB, 0xC35C, + 0x80C5, 0xC35D, + 0x80C7, 0xC35E, + 0x80C8, 0xC35F, + 0x80C9, 0xC360, + 0x80CA, 0xC361, + 0x80CB, 0xC362, + 0x80CF, 0xC363, + 0x80D0, 0xC364, + 0x80D1, 0xC365, + 0x80D2, 0xC366, + 0x80D3, 0xC367, + 0x80D4, 0xC368, + 0x80D5, 0xC369, + 0x80D8, 0xC36A, + 0x80DF, 0xC36B, + 0x80E0, 0xC36C, + 0x80E2, 0xC36D, + 0x80E3, 0xC36E, + 0x80E6, 0xC36F, + 0x80EE, 0xC370, + 0x80F5, 0xC371, + 0x80F7, 0xC372, + 0x80F9, 0xC373, + 0x80FB, 0xC374, + 0x80FE, 0xC375, + 0x80FF, 0xC376, + 0x8100, 0xC377, + 0x8101, 0xC378, + 0x8103, 0xC379, + 0x8104, 0xC37A, + 0x8105, 0xC37B, + 0x8107, 0xC37C, + 0x8108, 0xC37D, + 0x810B, 0xC37E, + 0x810C, 0xC380, + 0x8115, 0xC381, + 0x8117, 0xC382, + 0x8119, 0xC383, + 0x811B, 0xC384, + 0x811C, 0xC385, + 0x811D, 0xC386, + 0x811F, 0xC387, + 0x8120, 0xC388, + 0x8121, 0xC389, + 0x8122, 0xC38A, + 0x8123, 0xC38B, + 0x8124, 0xC38C, + 0x8125, 0xC38D, + 0x8126, 0xC38E, + 0x8127, 0xC38F, + 0x8128, 0xC390, + 0x8129, 0xC391, + 0x812A, 0xC392, + 0x812B, 0xC393, + 0x812D, 0xC394, + 0x812E, 0xC395, + 0x8130, 0xC396, + 0x8133, 0xC397, + 0x8134, 0xC398, + 0x8135, 0xC399, + 0x8137, 0xC39A, + 0x8139, 0xC39B, + 0x813A, 0xC39C, + 0x813B, 0xC39D, + 0x813C, 0xC39E, + 0x813D, 0xC39F, + 0x813F, 0xC3A0, + 0x8140, 0xC440, + 0x8141, 0xC441, + 0x8142, 0xC442, + 0x8143, 0xC443, + 0x8144, 0xC444, + 0x8145, 0xC445, + 0x8147, 0xC446, + 0x8149, 0xC447, + 0x814D, 0xC448, + 0x814E, 0xC449, + 0x814F, 0xC44A, + 0x8152, 0xC44B, + 0x8156, 0xC44C, + 0x8157, 0xC44D, + 0x8158, 0xC44E, + 0x815B, 0xC44F, + 0x815C, 0xC450, + 0x815D, 0xC451, + 0x815E, 0xC452, + 0x815F, 0xC453, + 0x8161, 0xC454, + 0x8162, 0xC455, + 0x8163, 0xC456, + 0x8164, 0xC457, + 0x8166, 0xC458, + 0x8168, 0xC459, + 0x816A, 0xC45A, + 0x816B, 0xC45B, + 0x816C, 0xC45C, + 0x816F, 0xC45D, + 0x8172, 0xC45E, + 0x8173, 0xC45F, + 0x8175, 0xC460, + 0x8176, 0xC461, + 0x8177, 0xC462, + 0x8178, 0xC463, + 0x8181, 0xC464, + 0x8183, 0xC465, + 0x8184, 0xC466, + 0x8185, 0xC467, + 0x8186, 0xC468, + 0x8187, 0xC469, + 0x8189, 0xC46A, + 0x818B, 0xC46B, + 0x818C, 0xC46C, + 0x818D, 0xC46D, + 0x818E, 0xC46E, + 0x8190, 0xC46F, + 0x8192, 0xC470, + 0x8193, 0xC471, + 0x8194, 0xC472, + 0x8195, 0xC473, + 0x8196, 0xC474, + 0x8197, 0xC475, + 0x8199, 0xC476, + 0x819A, 0xC477, + 0x819E, 0xC478, + 0x819F, 0xC479, + 0x81A0, 0xC47A, + 0x81A1, 0xC47B, + 0x81A2, 0xC47C, + 0x81A4, 0xC47D, + 0x81A5, 0xC47E, + 0x81A7, 0xC480, + 0x81A9, 0xC481, + 0x81AB, 0xC482, + 0x81AC, 0xC483, + 0x81AD, 0xC484, + 0x81AE, 0xC485, + 0x81AF, 0xC486, + 0x81B0, 0xC487, + 0x81B1, 0xC488, + 0x81B2, 0xC489, + 0x81B4, 0xC48A, + 0x81B5, 0xC48B, + 0x81B6, 0xC48C, + 0x81B7, 0xC48D, + 0x81B8, 0xC48E, + 0x81B9, 0xC48F, + 0x81BC, 0xC490, + 0x81BD, 0xC491, + 0x81BE, 0xC492, + 0x81BF, 0xC493, + 0x81C4, 0xC494, + 0x81C5, 0xC495, + 0x81C7, 0xC496, + 0x81C8, 0xC497, + 0x81C9, 0xC498, + 0x81CB, 0xC499, + 0x81CD, 0xC49A, + 0x81CE, 0xC49B, + 0x81CF, 0xC49C, + 0x81D0, 0xC49D, + 0x81D1, 0xC49E, + 0x81D2, 0xC49F, + 0x81D3, 0xC4A0, + 0x81D4, 0xC540, + 0x81D5, 0xC541, + 0x81D6, 0xC542, + 0x81D7, 0xC543, + 0x81D8, 0xC544, + 0x81D9, 0xC545, + 0x81DA, 0xC546, + 0x81DB, 0xC547, + 0x81DC, 0xC548, + 0x81DD, 0xC549, + 0x81DE, 0xC54A, + 0x81DF, 0xC54B, + 0x81E0, 0xC54C, + 0x81E1, 0xC54D, + 0x81E2, 0xC54E, + 0x81E4, 0xC54F, + 0x81E5, 0xC550, + 0x81E6, 0xC551, + 0x81E8, 0xC552, + 0x81E9, 0xC553, + 0x81EB, 0xC554, + 0x81EE, 0xC555, + 0x81EF, 0xC556, + 0x81F0, 0xC557, + 0x81F1, 0xC558, + 0x81F2, 0xC559, + 0x81F5, 0xC55A, + 0x81F6, 0xC55B, + 0x81F7, 0xC55C, + 0x81F8, 0xC55D, + 0x81F9, 0xC55E, + 0x81FA, 0xC55F, + 0x81FD, 0xC560, + 0x81FF, 0xC561, + 0x8203, 0xC562, + 0x8207, 0xC563, + 0x8208, 0xC564, + 0x8209, 0xC565, + 0x820A, 0xC566, + 0x820B, 0xC567, + 0x820E, 0xC568, + 0x820F, 0xC569, + 0x8211, 0xC56A, + 0x8213, 0xC56B, + 0x8215, 0xC56C, + 0x8216, 0xC56D, + 0x8217, 0xC56E, + 0x8218, 0xC56F, + 0x8219, 0xC570, + 0x821A, 0xC571, + 0x821D, 0xC572, + 0x8220, 0xC573, + 0x8224, 0xC574, + 0x8225, 0xC575, + 0x8226, 0xC576, + 0x8227, 0xC577, + 0x8229, 0xC578, + 0x822E, 0xC579, + 0x8232, 0xC57A, + 0x823A, 0xC57B, + 0x823C, 0xC57C, + 0x823D, 0xC57D, + 0x823F, 0xC57E, + 0x8240, 0xC580, + 0x8241, 0xC581, + 0x8242, 0xC582, + 0x8243, 0xC583, + 0x8245, 0xC584, + 0x8246, 0xC585, + 0x8248, 0xC586, + 0x824A, 0xC587, + 0x824C, 0xC588, + 0x824D, 0xC589, + 0x824E, 0xC58A, + 0x8250, 0xC58B, + 0x8251, 0xC58C, + 0x8252, 0xC58D, + 0x8253, 0xC58E, + 0x8254, 0xC58F, + 0x8255, 0xC590, + 0x8256, 0xC591, + 0x8257, 0xC592, + 0x8259, 0xC593, + 0x825B, 0xC594, + 0x825C, 0xC595, + 0x825D, 0xC596, + 0x825E, 0xC597, + 0x8260, 0xC598, + 0x8261, 0xC599, + 0x8262, 0xC59A, + 0x8263, 0xC59B, + 0x8264, 0xC59C, + 0x8265, 0xC59D, + 0x8266, 0xC59E, + 0x8267, 0xC59F, + 0x8269, 0xC5A0, + 0x826A, 0xC640, + 0x826B, 0xC641, + 0x826C, 0xC642, + 0x826D, 0xC643, + 0x8271, 0xC644, + 0x8275, 0xC645, + 0x8276, 0xC646, + 0x8277, 0xC647, + 0x8278, 0xC648, + 0x827B, 0xC649, + 0x827C, 0xC64A, + 0x8280, 0xC64B, + 0x8281, 0xC64C, + 0x8283, 0xC64D, + 0x8285, 0xC64E, + 0x8286, 0xC64F, + 0x8287, 0xC650, + 0x8289, 0xC651, + 0x828C, 0xC652, + 0x8290, 0xC653, + 0x8293, 0xC654, + 0x8294, 0xC655, + 0x8295, 0xC656, + 0x8296, 0xC657, + 0x829A, 0xC658, + 0x829B, 0xC659, + 0x829E, 0xC65A, + 0x82A0, 0xC65B, + 0x82A2, 0xC65C, + 0x82A3, 0xC65D, + 0x82A7, 0xC65E, + 0x82B2, 0xC65F, + 0x82B5, 0xC660, + 0x82B6, 0xC661, + 0x82BA, 0xC662, + 0x82BB, 0xC663, + 0x82BC, 0xC664, + 0x82BF, 0xC665, + 0x82C0, 0xC666, + 0x82C2, 0xC667, + 0x82C3, 0xC668, + 0x82C5, 0xC669, + 0x82C6, 0xC66A, + 0x82C9, 0xC66B, + 0x82D0, 0xC66C, + 0x82D6, 0xC66D, + 0x82D9, 0xC66E, + 0x82DA, 0xC66F, + 0x82DD, 0xC670, + 0x82E2, 0xC671, + 0x82E7, 0xC672, + 0x82E8, 0xC673, + 0x82E9, 0xC674, + 0x82EA, 0xC675, + 0x82EC, 0xC676, + 0x82ED, 0xC677, + 0x82EE, 0xC678, + 0x82F0, 0xC679, + 0x82F2, 0xC67A, + 0x82F3, 0xC67B, + 0x82F5, 0xC67C, + 0x82F6, 0xC67D, + 0x82F8, 0xC67E, + 0x82FA, 0xC680, + 0x82FC, 0xC681, + 0x82FD, 0xC682, + 0x82FE, 0xC683, + 0x82FF, 0xC684, + 0x8300, 0xC685, + 0x830A, 0xC686, + 0x830B, 0xC687, + 0x830D, 0xC688, + 0x8310, 0xC689, + 0x8312, 0xC68A, + 0x8313, 0xC68B, + 0x8316, 0xC68C, + 0x8318, 0xC68D, + 0x8319, 0xC68E, + 0x831D, 0xC68F, + 0x831E, 0xC690, + 0x831F, 0xC691, + 0x8320, 0xC692, + 0x8321, 0xC693, + 0x8322, 0xC694, + 0x8323, 0xC695, + 0x8324, 0xC696, + 0x8325, 0xC697, + 0x8326, 0xC698, + 0x8329, 0xC699, + 0x832A, 0xC69A, + 0x832E, 0xC69B, + 0x8330, 0xC69C, + 0x8332, 0xC69D, + 0x8337, 0xC69E, + 0x833B, 0xC69F, + 0x833D, 0xC6A0, + 0x833E, 0xC740, + 0x833F, 0xC741, + 0x8341, 0xC742, + 0x8342, 0xC743, + 0x8344, 0xC744, + 0x8345, 0xC745, + 0x8348, 0xC746, + 0x834A, 0xC747, + 0x834B, 0xC748, + 0x834C, 0xC749, + 0x834D, 0xC74A, + 0x834E, 0xC74B, + 0x8353, 0xC74C, + 0x8355, 0xC74D, + 0x8356, 0xC74E, + 0x8357, 0xC74F, + 0x8358, 0xC750, + 0x8359, 0xC751, + 0x835D, 0xC752, + 0x8362, 0xC753, + 0x8370, 0xC754, + 0x8371, 0xC755, + 0x8372, 0xC756, + 0x8373, 0xC757, + 0x8374, 0xC758, + 0x8375, 0xC759, + 0x8376, 0xC75A, + 0x8379, 0xC75B, + 0x837A, 0xC75C, + 0x837E, 0xC75D, + 0x837F, 0xC75E, + 0x8380, 0xC75F, + 0x8381, 0xC760, + 0x8382, 0xC761, + 0x8383, 0xC762, + 0x8384, 0xC763, + 0x8387, 0xC764, + 0x8388, 0xC765, + 0x838A, 0xC766, + 0x838B, 0xC767, + 0x838C, 0xC768, + 0x838D, 0xC769, + 0x838F, 0xC76A, + 0x8390, 0xC76B, + 0x8391, 0xC76C, + 0x8394, 0xC76D, + 0x8395, 0xC76E, + 0x8396, 0xC76F, + 0x8397, 0xC770, + 0x8399, 0xC771, + 0x839A, 0xC772, + 0x839D, 0xC773, + 0x839F, 0xC774, + 0x83A1, 0xC775, + 0x83A2, 0xC776, + 0x83A3, 0xC777, + 0x83A4, 0xC778, + 0x83A5, 0xC779, + 0x83A6, 0xC77A, + 0x83A7, 0xC77B, + 0x83AC, 0xC77C, + 0x83AD, 0xC77D, + 0x83AE, 0xC77E, + 0x83AF, 0xC780, + 0x83B5, 0xC781, + 0x83BB, 0xC782, + 0x83BE, 0xC783, + 0x83BF, 0xC784, + 0x83C2, 0xC785, + 0x83C3, 0xC786, + 0x83C4, 0xC787, + 0x83C6, 0xC788, + 0x83C8, 0xC789, + 0x83C9, 0xC78A, + 0x83CB, 0xC78B, + 0x83CD, 0xC78C, + 0x83CE, 0xC78D, + 0x83D0, 0xC78E, + 0x83D1, 0xC78F, + 0x83D2, 0xC790, + 0x83D3, 0xC791, + 0x83D5, 0xC792, + 0x83D7, 0xC793, + 0x83D9, 0xC794, + 0x83DA, 0xC795, + 0x83DB, 0xC796, + 0x83DE, 0xC797, + 0x83E2, 0xC798, + 0x83E3, 0xC799, + 0x83E4, 0xC79A, + 0x83E6, 0xC79B, + 0x83E7, 0xC79C, + 0x83E8, 0xC79D, + 0x83EB, 0xC79E, + 0x83EC, 0xC79F, + 0x83ED, 0xC7A0, + 0x83EE, 0xC840, + 0x83EF, 0xC841, + 0x83F3, 0xC842, + 0x83F4, 0xC843, + 0x83F5, 0xC844, + 0x83F6, 0xC845, + 0x83F7, 0xC846, + 0x83FA, 0xC847, + 0x83FB, 0xC848, + 0x83FC, 0xC849, + 0x83FE, 0xC84A, + 0x83FF, 0xC84B, + 0x8400, 0xC84C, + 0x8402, 0xC84D, + 0x8405, 0xC84E, + 0x8407, 0xC84F, + 0x8408, 0xC850, + 0x8409, 0xC851, + 0x840A, 0xC852, + 0x8410, 0xC853, + 0x8412, 0xC854, + 0x8413, 0xC855, + 0x8414, 0xC856, + 0x8415, 0xC857, + 0x8416, 0xC858, + 0x8417, 0xC859, + 0x8419, 0xC85A, + 0x841A, 0xC85B, + 0x841B, 0xC85C, + 0x841E, 0xC85D, + 0x841F, 0xC85E, + 0x8420, 0xC85F, + 0x8421, 0xC860, + 0x8422, 0xC861, + 0x8423, 0xC862, + 0x8429, 0xC863, + 0x842A, 0xC864, + 0x842B, 0xC865, + 0x842C, 0xC866, + 0x842D, 0xC867, + 0x842E, 0xC868, + 0x842F, 0xC869, + 0x8430, 0xC86A, + 0x8432, 0xC86B, + 0x8433, 0xC86C, + 0x8434, 0xC86D, + 0x8435, 0xC86E, + 0x8436, 0xC86F, + 0x8437, 0xC870, + 0x8439, 0xC871, + 0x843A, 0xC872, + 0x843B, 0xC873, + 0x843E, 0xC874, + 0x843F, 0xC875, + 0x8440, 0xC876, + 0x8441, 0xC877, + 0x8442, 0xC878, + 0x8443, 0xC879, + 0x8444, 0xC87A, + 0x8445, 0xC87B, + 0x8447, 0xC87C, + 0x8448, 0xC87D, + 0x8449, 0xC87E, + 0x844A, 0xC880, + 0x844B, 0xC881, + 0x844C, 0xC882, + 0x844D, 0xC883, + 0x844E, 0xC884, + 0x844F, 0xC885, + 0x8450, 0xC886, + 0x8452, 0xC887, + 0x8453, 0xC888, + 0x8454, 0xC889, + 0x8455, 0xC88A, + 0x8456, 0xC88B, + 0x8458, 0xC88C, + 0x845D, 0xC88D, + 0x845E, 0xC88E, + 0x845F, 0xC88F, + 0x8460, 0xC890, + 0x8462, 0xC891, + 0x8464, 0xC892, + 0x8465, 0xC893, + 0x8466, 0xC894, + 0x8467, 0xC895, + 0x8468, 0xC896, + 0x846A, 0xC897, + 0x846E, 0xC898, + 0x846F, 0xC899, + 0x8470, 0xC89A, + 0x8472, 0xC89B, + 0x8474, 0xC89C, + 0x8477, 0xC89D, + 0x8479, 0xC89E, + 0x847B, 0xC89F, + 0x847C, 0xC8A0, + 0x847D, 0xC940, + 0x847E, 0xC941, + 0x847F, 0xC942, + 0x8480, 0xC943, + 0x8481, 0xC944, + 0x8483, 0xC945, + 0x8484, 0xC946, + 0x8485, 0xC947, + 0x8486, 0xC948, + 0x848A, 0xC949, + 0x848D, 0xC94A, + 0x848F, 0xC94B, + 0x8490, 0xC94C, + 0x8491, 0xC94D, + 0x8492, 0xC94E, + 0x8493, 0xC94F, + 0x8494, 0xC950, + 0x8495, 0xC951, + 0x8496, 0xC952, + 0x8498, 0xC953, + 0x849A, 0xC954, + 0x849B, 0xC955, + 0x849D, 0xC956, + 0x849E, 0xC957, + 0x849F, 0xC958, + 0x84A0, 0xC959, + 0x84A2, 0xC95A, + 0x84A3, 0xC95B, + 0x84A4, 0xC95C, + 0x84A5, 0xC95D, + 0x84A6, 0xC95E, + 0x84A7, 0xC95F, + 0x84A8, 0xC960, + 0x84A9, 0xC961, + 0x84AA, 0xC962, + 0x84AB, 0xC963, + 0x84AC, 0xC964, + 0x84AD, 0xC965, + 0x84AE, 0xC966, + 0x84B0, 0xC967, + 0x84B1, 0xC968, + 0x84B3, 0xC969, + 0x84B5, 0xC96A, + 0x84B6, 0xC96B, + 0x84B7, 0xC96C, + 0x84BB, 0xC96D, + 0x84BC, 0xC96E, + 0x84BE, 0xC96F, + 0x84C0, 0xC970, + 0x84C2, 0xC971, + 0x84C3, 0xC972, + 0x84C5, 0xC973, + 0x84C6, 0xC974, + 0x84C7, 0xC975, + 0x84C8, 0xC976, + 0x84CB, 0xC977, + 0x84CC, 0xC978, + 0x84CE, 0xC979, + 0x84CF, 0xC97A, + 0x84D2, 0xC97B, + 0x84D4, 0xC97C, + 0x84D5, 0xC97D, + 0x84D7, 0xC97E, + 0x84D8, 0xC980, + 0x84D9, 0xC981, + 0x84DA, 0xC982, + 0x84DB, 0xC983, + 0x84DC, 0xC984, + 0x84DE, 0xC985, + 0x84E1, 0xC986, + 0x84E2, 0xC987, + 0x84E4, 0xC988, + 0x84E7, 0xC989, + 0x84E8, 0xC98A, + 0x84E9, 0xC98B, + 0x84EA, 0xC98C, + 0x84EB, 0xC98D, + 0x84ED, 0xC98E, + 0x84EE, 0xC98F, + 0x84EF, 0xC990, + 0x84F1, 0xC991, + 0x84F2, 0xC992, + 0x84F3, 0xC993, + 0x84F4, 0xC994, + 0x84F5, 0xC995, + 0x84F6, 0xC996, + 0x84F7, 0xC997, + 0x84F8, 0xC998, + 0x84F9, 0xC999, + 0x84FA, 0xC99A, + 0x84FB, 0xC99B, + 0x84FD, 0xC99C, + 0x84FE, 0xC99D, + 0x8500, 0xC99E, + 0x8501, 0xC99F, + 0x8502, 0xC9A0, + 0x8503, 0xCA40, + 0x8504, 0xCA41, + 0x8505, 0xCA42, + 0x8506, 0xCA43, + 0x8507, 0xCA44, + 0x8508, 0xCA45, + 0x8509, 0xCA46, + 0x850A, 0xCA47, + 0x850B, 0xCA48, + 0x850D, 0xCA49, + 0x850E, 0xCA4A, + 0x850F, 0xCA4B, + 0x8510, 0xCA4C, + 0x8512, 0xCA4D, + 0x8514, 0xCA4E, + 0x8515, 0xCA4F, + 0x8516, 0xCA50, + 0x8518, 0xCA51, + 0x8519, 0xCA52, + 0x851B, 0xCA53, + 0x851C, 0xCA54, + 0x851D, 0xCA55, + 0x851E, 0xCA56, + 0x8520, 0xCA57, + 0x8522, 0xCA58, + 0x8523, 0xCA59, + 0x8524, 0xCA5A, + 0x8525, 0xCA5B, + 0x8526, 0xCA5C, + 0x8527, 0xCA5D, + 0x8528, 0xCA5E, + 0x8529, 0xCA5F, + 0x852A, 0xCA60, + 0x852D, 0xCA61, + 0x852E, 0xCA62, + 0x852F, 0xCA63, + 0x8530, 0xCA64, + 0x8531, 0xCA65, + 0x8532, 0xCA66, + 0x8533, 0xCA67, + 0x8534, 0xCA68, + 0x8535, 0xCA69, + 0x8536, 0xCA6A, + 0x853E, 0xCA6B, + 0x853F, 0xCA6C, + 0x8540, 0xCA6D, + 0x8541, 0xCA6E, + 0x8542, 0xCA6F, + 0x8544, 0xCA70, + 0x8545, 0xCA71, + 0x8546, 0xCA72, + 0x8547, 0xCA73, + 0x854B, 0xCA74, + 0x854C, 0xCA75, + 0x854D, 0xCA76, + 0x854E, 0xCA77, + 0x854F, 0xCA78, + 0x8550, 0xCA79, + 0x8551, 0xCA7A, + 0x8552, 0xCA7B, + 0x8553, 0xCA7C, + 0x8554, 0xCA7D, + 0x8555, 0xCA7E, + 0x8557, 0xCA80, + 0x8558, 0xCA81, + 0x855A, 0xCA82, + 0x855B, 0xCA83, + 0x855C, 0xCA84, + 0x855D, 0xCA85, + 0x855F, 0xCA86, + 0x8560, 0xCA87, + 0x8561, 0xCA88, + 0x8562, 0xCA89, + 0x8563, 0xCA8A, + 0x8565, 0xCA8B, + 0x8566, 0xCA8C, + 0x8567, 0xCA8D, + 0x8569, 0xCA8E, + 0x856A, 0xCA8F, + 0x856B, 0xCA90, + 0x856C, 0xCA91, + 0x856D, 0xCA92, + 0x856E, 0xCA93, + 0x856F, 0xCA94, + 0x8570, 0xCA95, + 0x8571, 0xCA96, + 0x8573, 0xCA97, + 0x8575, 0xCA98, + 0x8576, 0xCA99, + 0x8577, 0xCA9A, + 0x8578, 0xCA9B, + 0x857C, 0xCA9C, + 0x857D, 0xCA9D, + 0x857F, 0xCA9E, + 0x8580, 0xCA9F, + 0x8581, 0xCAA0, + 0x8582, 0xCB40, + 0x8583, 0xCB41, + 0x8586, 0xCB42, + 0x8588, 0xCB43, + 0x8589, 0xCB44, + 0x858A, 0xCB45, + 0x858B, 0xCB46, + 0x858C, 0xCB47, + 0x858D, 0xCB48, + 0x858E, 0xCB49, + 0x8590, 0xCB4A, + 0x8591, 0xCB4B, + 0x8592, 0xCB4C, + 0x8593, 0xCB4D, + 0x8594, 0xCB4E, + 0x8595, 0xCB4F, + 0x8596, 0xCB50, + 0x8597, 0xCB51, + 0x8598, 0xCB52, + 0x8599, 0xCB53, + 0x859A, 0xCB54, + 0x859D, 0xCB55, + 0x859E, 0xCB56, + 0x859F, 0xCB57, + 0x85A0, 0xCB58, + 0x85A1, 0xCB59, + 0x85A2, 0xCB5A, + 0x85A3, 0xCB5B, + 0x85A5, 0xCB5C, + 0x85A6, 0xCB5D, + 0x85A7, 0xCB5E, + 0x85A9, 0xCB5F, + 0x85AB, 0xCB60, + 0x85AC, 0xCB61, + 0x85AD, 0xCB62, + 0x85B1, 0xCB63, + 0x85B2, 0xCB64, + 0x85B3, 0xCB65, + 0x85B4, 0xCB66, + 0x85B5, 0xCB67, + 0x85B6, 0xCB68, + 0x85B8, 0xCB69, + 0x85BA, 0xCB6A, + 0x85BB, 0xCB6B, + 0x85BC, 0xCB6C, + 0x85BD, 0xCB6D, + 0x85BE, 0xCB6E, + 0x85BF, 0xCB6F, + 0x85C0, 0xCB70, + 0x85C2, 0xCB71, + 0x85C3, 0xCB72, + 0x85C4, 0xCB73, + 0x85C5, 0xCB74, + 0x85C6, 0xCB75, + 0x85C7, 0xCB76, + 0x85C8, 0xCB77, + 0x85CA, 0xCB78, + 0x85CB, 0xCB79, + 0x85CC, 0xCB7A, + 0x85CD, 0xCB7B, + 0x85CE, 0xCB7C, + 0x85D1, 0xCB7D, + 0x85D2, 0xCB7E, + 0x85D4, 0xCB80, + 0x85D6, 0xCB81, + 0x85D7, 0xCB82, + 0x85D8, 0xCB83, + 0x85D9, 0xCB84, + 0x85DA, 0xCB85, + 0x85DB, 0xCB86, + 0x85DD, 0xCB87, + 0x85DE, 0xCB88, + 0x85DF, 0xCB89, + 0x85E0, 0xCB8A, + 0x85E1, 0xCB8B, + 0x85E2, 0xCB8C, + 0x85E3, 0xCB8D, + 0x85E5, 0xCB8E, + 0x85E6, 0xCB8F, + 0x85E7, 0xCB90, + 0x85E8, 0xCB91, + 0x85EA, 0xCB92, + 0x85EB, 0xCB93, + 0x85EC, 0xCB94, + 0x85ED, 0xCB95, + 0x85EE, 0xCB96, + 0x85EF, 0xCB97, + 0x85F0, 0xCB98, + 0x85F1, 0xCB99, + 0x85F2, 0xCB9A, + 0x85F3, 0xCB9B, + 0x85F4, 0xCB9C, + 0x85F5, 0xCB9D, + 0x85F6, 0xCB9E, + 0x85F7, 0xCB9F, + 0x85F8, 0xCBA0, + 0x85F9, 0xCC40, + 0x85FA, 0xCC41, + 0x85FC, 0xCC42, + 0x85FD, 0xCC43, + 0x85FE, 0xCC44, + 0x8600, 0xCC45, + 0x8601, 0xCC46, + 0x8602, 0xCC47, + 0x8603, 0xCC48, + 0x8604, 0xCC49, + 0x8606, 0xCC4A, + 0x8607, 0xCC4B, + 0x8608, 0xCC4C, + 0x8609, 0xCC4D, + 0x860A, 0xCC4E, + 0x860B, 0xCC4F, + 0x860C, 0xCC50, + 0x860D, 0xCC51, + 0x860E, 0xCC52, + 0x860F, 0xCC53, + 0x8610, 0xCC54, + 0x8612, 0xCC55, + 0x8613, 0xCC56, + 0x8614, 0xCC57, + 0x8615, 0xCC58, + 0x8617, 0xCC59, + 0x8618, 0xCC5A, + 0x8619, 0xCC5B, + 0x861A, 0xCC5C, + 0x861B, 0xCC5D, + 0x861C, 0xCC5E, + 0x861D, 0xCC5F, + 0x861E, 0xCC60, + 0x861F, 0xCC61, + 0x8620, 0xCC62, + 0x8621, 0xCC63, + 0x8622, 0xCC64, + 0x8623, 0xCC65, + 0x8624, 0xCC66, + 0x8625, 0xCC67, + 0x8626, 0xCC68, + 0x8628, 0xCC69, + 0x862A, 0xCC6A, + 0x862B, 0xCC6B, + 0x862C, 0xCC6C, + 0x862D, 0xCC6D, + 0x862E, 0xCC6E, + 0x862F, 0xCC6F, + 0x8630, 0xCC70, + 0x8631, 0xCC71, + 0x8632, 0xCC72, + 0x8633, 0xCC73, + 0x8634, 0xCC74, + 0x8635, 0xCC75, + 0x8636, 0xCC76, + 0x8637, 0xCC77, + 0x8639, 0xCC78, + 0x863A, 0xCC79, + 0x863B, 0xCC7A, + 0x863D, 0xCC7B, + 0x863E, 0xCC7C, + 0x863F, 0xCC7D, + 0x8640, 0xCC7E, + 0x8641, 0xCC80, + 0x8642, 0xCC81, + 0x8643, 0xCC82, + 0x8644, 0xCC83, + 0x8645, 0xCC84, + 0x8646, 0xCC85, + 0x8647, 0xCC86, + 0x8648, 0xCC87, + 0x8649, 0xCC88, + 0x864A, 0xCC89, + 0x864B, 0xCC8A, + 0x864C, 0xCC8B, + 0x8652, 0xCC8C, + 0x8653, 0xCC8D, + 0x8655, 0xCC8E, + 0x8656, 0xCC8F, + 0x8657, 0xCC90, + 0x8658, 0xCC91, + 0x8659, 0xCC92, + 0x865B, 0xCC93, + 0x865C, 0xCC94, + 0x865D, 0xCC95, + 0x865F, 0xCC96, + 0x8660, 0xCC97, + 0x8661, 0xCC98, + 0x8663, 0xCC99, + 0x8664, 0xCC9A, + 0x8665, 0xCC9B, + 0x8666, 0xCC9C, + 0x8667, 0xCC9D, + 0x8668, 0xCC9E, + 0x8669, 0xCC9F, + 0x866A, 0xCCA0, + 0x866D, 0xCD40, + 0x866F, 0xCD41, + 0x8670, 0xCD42, + 0x8672, 0xCD43, + 0x8673, 0xCD44, + 0x8674, 0xCD45, + 0x8675, 0xCD46, + 0x8676, 0xCD47, + 0x8677, 0xCD48, + 0x8678, 0xCD49, + 0x8683, 0xCD4A, + 0x8684, 0xCD4B, + 0x8685, 0xCD4C, + 0x8686, 0xCD4D, + 0x8687, 0xCD4E, + 0x8688, 0xCD4F, + 0x8689, 0xCD50, + 0x868E, 0xCD51, + 0x868F, 0xCD52, + 0x8690, 0xCD53, + 0x8691, 0xCD54, + 0x8692, 0xCD55, + 0x8694, 0xCD56, + 0x8696, 0xCD57, + 0x8697, 0xCD58, + 0x8698, 0xCD59, + 0x8699, 0xCD5A, + 0x869A, 0xCD5B, + 0x869B, 0xCD5C, + 0x869E, 0xCD5D, + 0x869F, 0xCD5E, + 0x86A0, 0xCD5F, + 0x86A1, 0xCD60, + 0x86A2, 0xCD61, + 0x86A5, 0xCD62, + 0x86A6, 0xCD63, + 0x86AB, 0xCD64, + 0x86AD, 0xCD65, + 0x86AE, 0xCD66, + 0x86B2, 0xCD67, + 0x86B3, 0xCD68, + 0x86B7, 0xCD69, + 0x86B8, 0xCD6A, + 0x86B9, 0xCD6B, + 0x86BB, 0xCD6C, + 0x86BC, 0xCD6D, + 0x86BD, 0xCD6E, + 0x86BE, 0xCD6F, + 0x86BF, 0xCD70, + 0x86C1, 0xCD71, + 0x86C2, 0xCD72, + 0x86C3, 0xCD73, + 0x86C5, 0xCD74, + 0x86C8, 0xCD75, + 0x86CC, 0xCD76, + 0x86CD, 0xCD77, + 0x86D2, 0xCD78, + 0x86D3, 0xCD79, + 0x86D5, 0xCD7A, + 0x86D6, 0xCD7B, + 0x86D7, 0xCD7C, + 0x86DA, 0xCD7D, + 0x86DC, 0xCD7E, + 0x86DD, 0xCD80, + 0x86E0, 0xCD81, + 0x86E1, 0xCD82, + 0x86E2, 0xCD83, + 0x86E3, 0xCD84, + 0x86E5, 0xCD85, + 0x86E6, 0xCD86, + 0x86E7, 0xCD87, + 0x86E8, 0xCD88, + 0x86EA, 0xCD89, + 0x86EB, 0xCD8A, + 0x86EC, 0xCD8B, + 0x86EF, 0xCD8C, + 0x86F5, 0xCD8D, + 0x86F6, 0xCD8E, + 0x86F7, 0xCD8F, + 0x86FA, 0xCD90, + 0x86FB, 0xCD91, + 0x86FC, 0xCD92, + 0x86FD, 0xCD93, + 0x86FF, 0xCD94, + 0x8701, 0xCD95, + 0x8704, 0xCD96, + 0x8705, 0xCD97, + 0x8706, 0xCD98, + 0x870B, 0xCD99, + 0x870C, 0xCD9A, + 0x870E, 0xCD9B, + 0x870F, 0xCD9C, + 0x8710, 0xCD9D, + 0x8711, 0xCD9E, + 0x8714, 0xCD9F, + 0x8716, 0xCDA0, + 0x8719, 0xCE40, + 0x871B, 0xCE41, + 0x871D, 0xCE42, + 0x871F, 0xCE43, + 0x8720, 0xCE44, + 0x8724, 0xCE45, + 0x8726, 0xCE46, + 0x8727, 0xCE47, + 0x8728, 0xCE48, + 0x872A, 0xCE49, + 0x872B, 0xCE4A, + 0x872C, 0xCE4B, + 0x872D, 0xCE4C, + 0x872F, 0xCE4D, + 0x8730, 0xCE4E, + 0x8732, 0xCE4F, + 0x8733, 0xCE50, + 0x8735, 0xCE51, + 0x8736, 0xCE52, + 0x8738, 0xCE53, + 0x8739, 0xCE54, + 0x873A, 0xCE55, + 0x873C, 0xCE56, + 0x873D, 0xCE57, + 0x8740, 0xCE58, + 0x8741, 0xCE59, + 0x8742, 0xCE5A, + 0x8743, 0xCE5B, + 0x8744, 0xCE5C, + 0x8745, 0xCE5D, + 0x8746, 0xCE5E, + 0x874A, 0xCE5F, + 0x874B, 0xCE60, + 0x874D, 0xCE61, + 0x874F, 0xCE62, + 0x8750, 0xCE63, + 0x8751, 0xCE64, + 0x8752, 0xCE65, + 0x8754, 0xCE66, + 0x8755, 0xCE67, + 0x8756, 0xCE68, + 0x8758, 0xCE69, + 0x875A, 0xCE6A, + 0x875B, 0xCE6B, + 0x875C, 0xCE6C, + 0x875D, 0xCE6D, + 0x875E, 0xCE6E, + 0x875F, 0xCE6F, + 0x8761, 0xCE70, + 0x8762, 0xCE71, + 0x8766, 0xCE72, + 0x8767, 0xCE73, + 0x8768, 0xCE74, + 0x8769, 0xCE75, + 0x876A, 0xCE76, + 0x876B, 0xCE77, + 0x876C, 0xCE78, + 0x876D, 0xCE79, + 0x876F, 0xCE7A, + 0x8771, 0xCE7B, + 0x8772, 0xCE7C, + 0x8773, 0xCE7D, + 0x8775, 0xCE7E, + 0x8777, 0xCE80, + 0x8778, 0xCE81, + 0x8779, 0xCE82, + 0x877A, 0xCE83, + 0x877F, 0xCE84, + 0x8780, 0xCE85, + 0x8781, 0xCE86, + 0x8784, 0xCE87, + 0x8786, 0xCE88, + 0x8787, 0xCE89, + 0x8789, 0xCE8A, + 0x878A, 0xCE8B, + 0x878C, 0xCE8C, + 0x878E, 0xCE8D, + 0x878F, 0xCE8E, + 0x8790, 0xCE8F, + 0x8791, 0xCE90, + 0x8792, 0xCE91, + 0x8794, 0xCE92, + 0x8795, 0xCE93, + 0x8796, 0xCE94, + 0x8798, 0xCE95, + 0x8799, 0xCE96, + 0x879A, 0xCE97, + 0x879B, 0xCE98, + 0x879C, 0xCE99, + 0x879D, 0xCE9A, + 0x879E, 0xCE9B, + 0x87A0, 0xCE9C, + 0x87A1, 0xCE9D, + 0x87A2, 0xCE9E, + 0x87A3, 0xCE9F, + 0x87A4, 0xCEA0, + 0x87A5, 0xCF40, + 0x87A6, 0xCF41, + 0x87A7, 0xCF42, + 0x87A9, 0xCF43, + 0x87AA, 0xCF44, + 0x87AE, 0xCF45, + 0x87B0, 0xCF46, + 0x87B1, 0xCF47, + 0x87B2, 0xCF48, + 0x87B4, 0xCF49, + 0x87B6, 0xCF4A, + 0x87B7, 0xCF4B, + 0x87B8, 0xCF4C, + 0x87B9, 0xCF4D, + 0x87BB, 0xCF4E, + 0x87BC, 0xCF4F, + 0x87BE, 0xCF50, + 0x87BF, 0xCF51, + 0x87C1, 0xCF52, + 0x87C2, 0xCF53, + 0x87C3, 0xCF54, + 0x87C4, 0xCF55, + 0x87C5, 0xCF56, + 0x87C7, 0xCF57, + 0x87C8, 0xCF58, + 0x87C9, 0xCF59, + 0x87CC, 0xCF5A, + 0x87CD, 0xCF5B, + 0x87CE, 0xCF5C, + 0x87CF, 0xCF5D, + 0x87D0, 0xCF5E, + 0x87D4, 0xCF5F, + 0x87D5, 0xCF60, + 0x87D6, 0xCF61, + 0x87D7, 0xCF62, + 0x87D8, 0xCF63, + 0x87D9, 0xCF64, + 0x87DA, 0xCF65, + 0x87DC, 0xCF66, + 0x87DD, 0xCF67, + 0x87DE, 0xCF68, + 0x87DF, 0xCF69, + 0x87E1, 0xCF6A, + 0x87E2, 0xCF6B, + 0x87E3, 0xCF6C, + 0x87E4, 0xCF6D, + 0x87E6, 0xCF6E, + 0x87E7, 0xCF6F, + 0x87E8, 0xCF70, + 0x87E9, 0xCF71, + 0x87EB, 0xCF72, + 0x87EC, 0xCF73, + 0x87ED, 0xCF74, + 0x87EF, 0xCF75, + 0x87F0, 0xCF76, + 0x87F1, 0xCF77, + 0x87F2, 0xCF78, + 0x87F3, 0xCF79, + 0x87F4, 0xCF7A, + 0x87F5, 0xCF7B, + 0x87F6, 0xCF7C, + 0x87F7, 0xCF7D, + 0x87F8, 0xCF7E, + 0x87FA, 0xCF80, + 0x87FB, 0xCF81, + 0x87FC, 0xCF82, + 0x87FD, 0xCF83, + 0x87FF, 0xCF84, + 0x8800, 0xCF85, + 0x8801, 0xCF86, + 0x8802, 0xCF87, + 0x8804, 0xCF88, + 0x8805, 0xCF89, + 0x8806, 0xCF8A, + 0x8807, 0xCF8B, + 0x8808, 0xCF8C, + 0x8809, 0xCF8D, + 0x880B, 0xCF8E, + 0x880C, 0xCF8F, + 0x880D, 0xCF90, + 0x880E, 0xCF91, + 0x880F, 0xCF92, + 0x8810, 0xCF93, + 0x8811, 0xCF94, + 0x8812, 0xCF95, + 0x8814, 0xCF96, + 0x8817, 0xCF97, + 0x8818, 0xCF98, + 0x8819, 0xCF99, + 0x881A, 0xCF9A, + 0x881C, 0xCF9B, + 0x881D, 0xCF9C, + 0x881E, 0xCF9D, + 0x881F, 0xCF9E, + 0x8820, 0xCF9F, + 0x8823, 0xCFA0, + 0x8824, 0xD040, + 0x8825, 0xD041, + 0x8826, 0xD042, + 0x8827, 0xD043, + 0x8828, 0xD044, + 0x8829, 0xD045, + 0x882A, 0xD046, + 0x882B, 0xD047, + 0x882C, 0xD048, + 0x882D, 0xD049, + 0x882E, 0xD04A, + 0x882F, 0xD04B, + 0x8830, 0xD04C, + 0x8831, 0xD04D, + 0x8833, 0xD04E, + 0x8834, 0xD04F, + 0x8835, 0xD050, + 0x8836, 0xD051, + 0x8837, 0xD052, + 0x8838, 0xD053, + 0x883A, 0xD054, + 0x883B, 0xD055, + 0x883D, 0xD056, + 0x883E, 0xD057, + 0x883F, 0xD058, + 0x8841, 0xD059, + 0x8842, 0xD05A, + 0x8843, 0xD05B, + 0x8846, 0xD05C, + 0x8847, 0xD05D, + 0x8848, 0xD05E, + 0x8849, 0xD05F, + 0x884A, 0xD060, + 0x884B, 0xD061, + 0x884E, 0xD062, + 0x884F, 0xD063, + 0x8850, 0xD064, + 0x8851, 0xD065, + 0x8852, 0xD066, + 0x8853, 0xD067, + 0x8855, 0xD068, + 0x8856, 0xD069, + 0x8858, 0xD06A, + 0x885A, 0xD06B, + 0x885B, 0xD06C, + 0x885C, 0xD06D, + 0x885D, 0xD06E, + 0x885E, 0xD06F, + 0x885F, 0xD070, + 0x8860, 0xD071, + 0x8866, 0xD072, + 0x8867, 0xD073, + 0x886A, 0xD074, + 0x886D, 0xD075, + 0x886F, 0xD076, + 0x8871, 0xD077, + 0x8873, 0xD078, + 0x8874, 0xD079, + 0x8875, 0xD07A, + 0x8876, 0xD07B, + 0x8878, 0xD07C, + 0x8879, 0xD07D, + 0x887A, 0xD07E, + 0x887B, 0xD080, + 0x887C, 0xD081, + 0x8880, 0xD082, + 0x8883, 0xD083, + 0x8886, 0xD084, + 0x8887, 0xD085, + 0x8889, 0xD086, + 0x888A, 0xD087, + 0x888C, 0xD088, + 0x888E, 0xD089, + 0x888F, 0xD08A, + 0x8890, 0xD08B, + 0x8891, 0xD08C, + 0x8893, 0xD08D, + 0x8894, 0xD08E, + 0x8895, 0xD08F, + 0x8897, 0xD090, + 0x8898, 0xD091, + 0x8899, 0xD092, + 0x889A, 0xD093, + 0x889B, 0xD094, + 0x889D, 0xD095, + 0x889E, 0xD096, + 0x889F, 0xD097, + 0x88A0, 0xD098, + 0x88A1, 0xD099, + 0x88A3, 0xD09A, + 0x88A5, 0xD09B, + 0x88A6, 0xD09C, + 0x88A7, 0xD09D, + 0x88A8, 0xD09E, + 0x88A9, 0xD09F, + 0x88AA, 0xD0A0, + 0x88AC, 0xD140, + 0x88AE, 0xD141, + 0x88AF, 0xD142, + 0x88B0, 0xD143, + 0x88B2, 0xD144, + 0x88B3, 0xD145, + 0x88B4, 0xD146, + 0x88B5, 0xD147, + 0x88B6, 0xD148, + 0x88B8, 0xD149, + 0x88B9, 0xD14A, + 0x88BA, 0xD14B, + 0x88BB, 0xD14C, + 0x88BD, 0xD14D, + 0x88BE, 0xD14E, + 0x88BF, 0xD14F, + 0x88C0, 0xD150, + 0x88C3, 0xD151, + 0x88C4, 0xD152, + 0x88C7, 0xD153, + 0x88C8, 0xD154, + 0x88CA, 0xD155, + 0x88CB, 0xD156, + 0x88CC, 0xD157, + 0x88CD, 0xD158, + 0x88CF, 0xD159, + 0x88D0, 0xD15A, + 0x88D1, 0xD15B, + 0x88D3, 0xD15C, + 0x88D6, 0xD15D, + 0x88D7, 0xD15E, + 0x88DA, 0xD15F, + 0x88DB, 0xD160, + 0x88DC, 0xD161, + 0x88DD, 0xD162, + 0x88DE, 0xD163, + 0x88E0, 0xD164, + 0x88E1, 0xD165, + 0x88E6, 0xD166, + 0x88E7, 0xD167, + 0x88E9, 0xD168, + 0x88EA, 0xD169, + 0x88EB, 0xD16A, + 0x88EC, 0xD16B, + 0x88ED, 0xD16C, + 0x88EE, 0xD16D, + 0x88EF, 0xD16E, + 0x88F2, 0xD16F, + 0x88F5, 0xD170, + 0x88F6, 0xD171, + 0x88F7, 0xD172, + 0x88FA, 0xD173, + 0x88FB, 0xD174, + 0x88FD, 0xD175, + 0x88FF, 0xD176, + 0x8900, 0xD177, + 0x8901, 0xD178, + 0x8903, 0xD179, + 0x8904, 0xD17A, + 0x8905, 0xD17B, + 0x8906, 0xD17C, + 0x8907, 0xD17D, + 0x8908, 0xD17E, + 0x8909, 0xD180, + 0x890B, 0xD181, + 0x890C, 0xD182, + 0x890D, 0xD183, + 0x890E, 0xD184, + 0x890F, 0xD185, + 0x8911, 0xD186, + 0x8914, 0xD187, + 0x8915, 0xD188, + 0x8916, 0xD189, + 0x8917, 0xD18A, + 0x8918, 0xD18B, + 0x891C, 0xD18C, + 0x891D, 0xD18D, + 0x891E, 0xD18E, + 0x891F, 0xD18F, + 0x8920, 0xD190, + 0x8922, 0xD191, + 0x8923, 0xD192, + 0x8924, 0xD193, + 0x8926, 0xD194, + 0x8927, 0xD195, + 0x8928, 0xD196, + 0x8929, 0xD197, + 0x892C, 0xD198, + 0x892D, 0xD199, + 0x892E, 0xD19A, + 0x892F, 0xD19B, + 0x8931, 0xD19C, + 0x8932, 0xD19D, + 0x8933, 0xD19E, + 0x8935, 0xD19F, + 0x8937, 0xD1A0, + 0x8938, 0xD240, + 0x8939, 0xD241, + 0x893A, 0xD242, + 0x893B, 0xD243, + 0x893C, 0xD244, + 0x893D, 0xD245, + 0x893E, 0xD246, + 0x893F, 0xD247, + 0x8940, 0xD248, + 0x8942, 0xD249, + 0x8943, 0xD24A, + 0x8945, 0xD24B, + 0x8946, 0xD24C, + 0x8947, 0xD24D, + 0x8948, 0xD24E, + 0x8949, 0xD24F, + 0x894A, 0xD250, + 0x894B, 0xD251, + 0x894C, 0xD252, + 0x894D, 0xD253, + 0x894E, 0xD254, + 0x894F, 0xD255, + 0x8950, 0xD256, + 0x8951, 0xD257, + 0x8952, 0xD258, + 0x8953, 0xD259, + 0x8954, 0xD25A, + 0x8955, 0xD25B, + 0x8956, 0xD25C, + 0x8957, 0xD25D, + 0x8958, 0xD25E, + 0x8959, 0xD25F, + 0x895A, 0xD260, + 0x895B, 0xD261, + 0x895C, 0xD262, + 0x895D, 0xD263, + 0x8960, 0xD264, + 0x8961, 0xD265, + 0x8962, 0xD266, + 0x8963, 0xD267, + 0x8964, 0xD268, + 0x8965, 0xD269, + 0x8967, 0xD26A, + 0x8968, 0xD26B, + 0x8969, 0xD26C, + 0x896A, 0xD26D, + 0x896B, 0xD26E, + 0x896C, 0xD26F, + 0x896D, 0xD270, + 0x896E, 0xD271, + 0x896F, 0xD272, + 0x8970, 0xD273, + 0x8971, 0xD274, + 0x8972, 0xD275, + 0x8973, 0xD276, + 0x8974, 0xD277, + 0x8975, 0xD278, + 0x8976, 0xD279, + 0x8977, 0xD27A, + 0x8978, 0xD27B, + 0x8979, 0xD27C, + 0x897A, 0xD27D, + 0x897C, 0xD27E, + 0x897D, 0xD280, + 0x897E, 0xD281, + 0x8980, 0xD282, + 0x8982, 0xD283, + 0x8984, 0xD284, + 0x8985, 0xD285, + 0x8987, 0xD286, + 0x8988, 0xD287, + 0x8989, 0xD288, + 0x898A, 0xD289, + 0x898B, 0xD28A, + 0x898C, 0xD28B, + 0x898D, 0xD28C, + 0x898E, 0xD28D, + 0x898F, 0xD28E, + 0x8990, 0xD28F, + 0x8991, 0xD290, + 0x8992, 0xD291, + 0x8993, 0xD292, + 0x8994, 0xD293, + 0x8995, 0xD294, + 0x8996, 0xD295, + 0x8997, 0xD296, + 0x8998, 0xD297, + 0x8999, 0xD298, + 0x899A, 0xD299, + 0x899B, 0xD29A, + 0x899C, 0xD29B, + 0x899D, 0xD29C, + 0x899E, 0xD29D, + 0x899F, 0xD29E, + 0x89A0, 0xD29F, + 0x89A1, 0xD2A0, + 0x89A2, 0xD340, + 0x89A3, 0xD341, + 0x89A4, 0xD342, + 0x89A5, 0xD343, + 0x89A6, 0xD344, + 0x89A7, 0xD345, + 0x89A8, 0xD346, + 0x89A9, 0xD347, + 0x89AA, 0xD348, + 0x89AB, 0xD349, + 0x89AC, 0xD34A, + 0x89AD, 0xD34B, + 0x89AE, 0xD34C, + 0x89AF, 0xD34D, + 0x89B0, 0xD34E, + 0x89B1, 0xD34F, + 0x89B2, 0xD350, + 0x89B3, 0xD351, + 0x89B4, 0xD352, + 0x89B5, 0xD353, + 0x89B6, 0xD354, + 0x89B7, 0xD355, + 0x89B8, 0xD356, + 0x89B9, 0xD357, + 0x89BA, 0xD358, + 0x89BB, 0xD359, + 0x89BC, 0xD35A, + 0x89BD, 0xD35B, + 0x89BE, 0xD35C, + 0x89BF, 0xD35D, + 0x89C0, 0xD35E, + 0x89C3, 0xD35F, + 0x89CD, 0xD360, + 0x89D3, 0xD361, + 0x89D4, 0xD362, + 0x89D5, 0xD363, + 0x89D7, 0xD364, + 0x89D8, 0xD365, + 0x89D9, 0xD366, + 0x89DB, 0xD367, + 0x89DD, 0xD368, + 0x89DF, 0xD369, + 0x89E0, 0xD36A, + 0x89E1, 0xD36B, + 0x89E2, 0xD36C, + 0x89E4, 0xD36D, + 0x89E7, 0xD36E, + 0x89E8, 0xD36F, + 0x89E9, 0xD370, + 0x89EA, 0xD371, + 0x89EC, 0xD372, + 0x89ED, 0xD373, + 0x89EE, 0xD374, + 0x89F0, 0xD375, + 0x89F1, 0xD376, + 0x89F2, 0xD377, + 0x89F4, 0xD378, + 0x89F5, 0xD379, + 0x89F6, 0xD37A, + 0x89F7, 0xD37B, + 0x89F8, 0xD37C, + 0x89F9, 0xD37D, + 0x89FA, 0xD37E, + 0x89FB, 0xD380, + 0x89FC, 0xD381, + 0x89FD, 0xD382, + 0x89FE, 0xD383, + 0x89FF, 0xD384, + 0x8A01, 0xD385, + 0x8A02, 0xD386, + 0x8A03, 0xD387, + 0x8A04, 0xD388, + 0x8A05, 0xD389, + 0x8A06, 0xD38A, + 0x8A08, 0xD38B, + 0x8A09, 0xD38C, + 0x8A0A, 0xD38D, + 0x8A0B, 0xD38E, + 0x8A0C, 0xD38F, + 0x8A0D, 0xD390, + 0x8A0E, 0xD391, + 0x8A0F, 0xD392, + 0x8A10, 0xD393, + 0x8A11, 0xD394, + 0x8A12, 0xD395, + 0x8A13, 0xD396, + 0x8A14, 0xD397, + 0x8A15, 0xD398, + 0x8A16, 0xD399, + 0x8A17, 0xD39A, + 0x8A18, 0xD39B, + 0x8A19, 0xD39C, + 0x8A1A, 0xD39D, + 0x8A1B, 0xD39E, + 0x8A1C, 0xD39F, + 0x8A1D, 0xD3A0, + 0x8A1E, 0xD440, + 0x8A1F, 0xD441, + 0x8A20, 0xD442, + 0x8A21, 0xD443, + 0x8A22, 0xD444, + 0x8A23, 0xD445, + 0x8A24, 0xD446, + 0x8A25, 0xD447, + 0x8A26, 0xD448, + 0x8A27, 0xD449, + 0x8A28, 0xD44A, + 0x8A29, 0xD44B, + 0x8A2A, 0xD44C, + 0x8A2B, 0xD44D, + 0x8A2C, 0xD44E, + 0x8A2D, 0xD44F, + 0x8A2E, 0xD450, + 0x8A2F, 0xD451, + 0x8A30, 0xD452, + 0x8A31, 0xD453, + 0x8A32, 0xD454, + 0x8A33, 0xD455, + 0x8A34, 0xD456, + 0x8A35, 0xD457, + 0x8A36, 0xD458, + 0x8A37, 0xD459, + 0x8A38, 0xD45A, + 0x8A39, 0xD45B, + 0x8A3A, 0xD45C, + 0x8A3B, 0xD45D, + 0x8A3C, 0xD45E, + 0x8A3D, 0xD45F, + 0x8A3F, 0xD460, + 0x8A40, 0xD461, + 0x8A41, 0xD462, + 0x8A42, 0xD463, + 0x8A43, 0xD464, + 0x8A44, 0xD465, + 0x8A45, 0xD466, + 0x8A46, 0xD467, + 0x8A47, 0xD468, + 0x8A49, 0xD469, + 0x8A4A, 0xD46A, + 0x8A4B, 0xD46B, + 0x8A4C, 0xD46C, + 0x8A4D, 0xD46D, + 0x8A4E, 0xD46E, + 0x8A4F, 0xD46F, + 0x8A50, 0xD470, + 0x8A51, 0xD471, + 0x8A52, 0xD472, + 0x8A53, 0xD473, + 0x8A54, 0xD474, + 0x8A55, 0xD475, + 0x8A56, 0xD476, + 0x8A57, 0xD477, + 0x8A58, 0xD478, + 0x8A59, 0xD479, + 0x8A5A, 0xD47A, + 0x8A5B, 0xD47B, + 0x8A5C, 0xD47C, + 0x8A5D, 0xD47D, + 0x8A5E, 0xD47E, + 0x8A5F, 0xD480, + 0x8A60, 0xD481, + 0x8A61, 0xD482, + 0x8A62, 0xD483, + 0x8A63, 0xD484, + 0x8A64, 0xD485, + 0x8A65, 0xD486, + 0x8A66, 0xD487, + 0x8A67, 0xD488, + 0x8A68, 0xD489, + 0x8A69, 0xD48A, + 0x8A6A, 0xD48B, + 0x8A6B, 0xD48C, + 0x8A6C, 0xD48D, + 0x8A6D, 0xD48E, + 0x8A6E, 0xD48F, + 0x8A6F, 0xD490, + 0x8A70, 0xD491, + 0x8A71, 0xD492, + 0x8A72, 0xD493, + 0x8A73, 0xD494, + 0x8A74, 0xD495, + 0x8A75, 0xD496, + 0x8A76, 0xD497, + 0x8A77, 0xD498, + 0x8A78, 0xD499, + 0x8A7A, 0xD49A, + 0x8A7B, 0xD49B, + 0x8A7C, 0xD49C, + 0x8A7D, 0xD49D, + 0x8A7E, 0xD49E, + 0x8A7F, 0xD49F, + 0x8A80, 0xD4A0, + 0x8A81, 0xD540, + 0x8A82, 0xD541, + 0x8A83, 0xD542, + 0x8A84, 0xD543, + 0x8A85, 0xD544, + 0x8A86, 0xD545, + 0x8A87, 0xD546, + 0x8A88, 0xD547, + 0x8A8B, 0xD548, + 0x8A8C, 0xD549, + 0x8A8D, 0xD54A, + 0x8A8E, 0xD54B, + 0x8A8F, 0xD54C, + 0x8A90, 0xD54D, + 0x8A91, 0xD54E, + 0x8A92, 0xD54F, + 0x8A94, 0xD550, + 0x8A95, 0xD551, + 0x8A96, 0xD552, + 0x8A97, 0xD553, + 0x8A98, 0xD554, + 0x8A99, 0xD555, + 0x8A9A, 0xD556, + 0x8A9B, 0xD557, + 0x8A9C, 0xD558, + 0x8A9D, 0xD559, + 0x8A9E, 0xD55A, + 0x8A9F, 0xD55B, + 0x8AA0, 0xD55C, + 0x8AA1, 0xD55D, + 0x8AA2, 0xD55E, + 0x8AA3, 0xD55F, + 0x8AA4, 0xD560, + 0x8AA5, 0xD561, + 0x8AA6, 0xD562, + 0x8AA7, 0xD563, + 0x8AA8, 0xD564, + 0x8AA9, 0xD565, + 0x8AAA, 0xD566, + 0x8AAB, 0xD567, + 0x8AAC, 0xD568, + 0x8AAD, 0xD569, + 0x8AAE, 0xD56A, + 0x8AAF, 0xD56B, + 0x8AB0, 0xD56C, + 0x8AB1, 0xD56D, + 0x8AB2, 0xD56E, + 0x8AB3, 0xD56F, + 0x8AB4, 0xD570, + 0x8AB5, 0xD571, + 0x8AB6, 0xD572, + 0x8AB7, 0xD573, + 0x8AB8, 0xD574, + 0x8AB9, 0xD575, + 0x8ABA, 0xD576, + 0x8ABB, 0xD577, + 0x8ABC, 0xD578, + 0x8ABD, 0xD579, + 0x8ABE, 0xD57A, + 0x8ABF, 0xD57B, + 0x8AC0, 0xD57C, + 0x8AC1, 0xD57D, + 0x8AC2, 0xD57E, + 0x8AC3, 0xD580, + 0x8AC4, 0xD581, + 0x8AC5, 0xD582, + 0x8AC6, 0xD583, + 0x8AC7, 0xD584, + 0x8AC8, 0xD585, + 0x8AC9, 0xD586, + 0x8ACA, 0xD587, + 0x8ACB, 0xD588, + 0x8ACC, 0xD589, + 0x8ACD, 0xD58A, + 0x8ACE, 0xD58B, + 0x8ACF, 0xD58C, + 0x8AD0, 0xD58D, + 0x8AD1, 0xD58E, + 0x8AD2, 0xD58F, + 0x8AD3, 0xD590, + 0x8AD4, 0xD591, + 0x8AD5, 0xD592, + 0x8AD6, 0xD593, + 0x8AD7, 0xD594, + 0x8AD8, 0xD595, + 0x8AD9, 0xD596, + 0x8ADA, 0xD597, + 0x8ADB, 0xD598, + 0x8ADC, 0xD599, + 0x8ADD, 0xD59A, + 0x8ADE, 0xD59B, + 0x8ADF, 0xD59C, + 0x8AE0, 0xD59D, + 0x8AE1, 0xD59E, + 0x8AE2, 0xD59F, + 0x8AE3, 0xD5A0, + 0x8AE4, 0xD640, + 0x8AE5, 0xD641, + 0x8AE6, 0xD642, + 0x8AE7, 0xD643, + 0x8AE8, 0xD644, + 0x8AE9, 0xD645, + 0x8AEA, 0xD646, + 0x8AEB, 0xD647, + 0x8AEC, 0xD648, + 0x8AED, 0xD649, + 0x8AEE, 0xD64A, + 0x8AEF, 0xD64B, + 0x8AF0, 0xD64C, + 0x8AF1, 0xD64D, + 0x8AF2, 0xD64E, + 0x8AF3, 0xD64F, + 0x8AF4, 0xD650, + 0x8AF5, 0xD651, + 0x8AF6, 0xD652, + 0x8AF7, 0xD653, + 0x8AF8, 0xD654, + 0x8AF9, 0xD655, + 0x8AFA, 0xD656, + 0x8AFB, 0xD657, + 0x8AFC, 0xD658, + 0x8AFD, 0xD659, + 0x8AFE, 0xD65A, + 0x8AFF, 0xD65B, + 0x8B00, 0xD65C, + 0x8B01, 0xD65D, + 0x8B02, 0xD65E, + 0x8B03, 0xD65F, + 0x8B04, 0xD660, + 0x8B05, 0xD661, + 0x8B06, 0xD662, + 0x8B08, 0xD663, + 0x8B09, 0xD664, + 0x8B0A, 0xD665, + 0x8B0B, 0xD666, + 0x8B0C, 0xD667, + 0x8B0D, 0xD668, + 0x8B0E, 0xD669, + 0x8B0F, 0xD66A, + 0x8B10, 0xD66B, + 0x8B11, 0xD66C, + 0x8B12, 0xD66D, + 0x8B13, 0xD66E, + 0x8B14, 0xD66F, + 0x8B15, 0xD670, + 0x8B16, 0xD671, + 0x8B17, 0xD672, + 0x8B18, 0xD673, + 0x8B19, 0xD674, + 0x8B1A, 0xD675, + 0x8B1B, 0xD676, + 0x8B1C, 0xD677, + 0x8B1D, 0xD678, + 0x8B1E, 0xD679, + 0x8B1F, 0xD67A, + 0x8B20, 0xD67B, + 0x8B21, 0xD67C, + 0x8B22, 0xD67D, + 0x8B23, 0xD67E, + 0x8B24, 0xD680, + 0x8B25, 0xD681, + 0x8B27, 0xD682, + 0x8B28, 0xD683, + 0x8B29, 0xD684, + 0x8B2A, 0xD685, + 0x8B2B, 0xD686, + 0x8B2C, 0xD687, + 0x8B2D, 0xD688, + 0x8B2E, 0xD689, + 0x8B2F, 0xD68A, + 0x8B30, 0xD68B, + 0x8B31, 0xD68C, + 0x8B32, 0xD68D, + 0x8B33, 0xD68E, + 0x8B34, 0xD68F, + 0x8B35, 0xD690, + 0x8B36, 0xD691, + 0x8B37, 0xD692, + 0x8B38, 0xD693, + 0x8B39, 0xD694, + 0x8B3A, 0xD695, + 0x8B3B, 0xD696, + 0x8B3C, 0xD697, + 0x8B3D, 0xD698, + 0x8B3E, 0xD699, + 0x8B3F, 0xD69A, + 0x8B40, 0xD69B, + 0x8B41, 0xD69C, + 0x8B42, 0xD69D, + 0x8B43, 0xD69E, + 0x8B44, 0xD69F, + 0x8B45, 0xD6A0, + 0x8B46, 0xD740, + 0x8B47, 0xD741, + 0x8B48, 0xD742, + 0x8B49, 0xD743, + 0x8B4A, 0xD744, + 0x8B4B, 0xD745, + 0x8B4C, 0xD746, + 0x8B4D, 0xD747, + 0x8B4E, 0xD748, + 0x8B4F, 0xD749, + 0x8B50, 0xD74A, + 0x8B51, 0xD74B, + 0x8B52, 0xD74C, + 0x8B53, 0xD74D, + 0x8B54, 0xD74E, + 0x8B55, 0xD74F, + 0x8B56, 0xD750, + 0x8B57, 0xD751, + 0x8B58, 0xD752, + 0x8B59, 0xD753, + 0x8B5A, 0xD754, + 0x8B5B, 0xD755, + 0x8B5C, 0xD756, + 0x8B5D, 0xD757, + 0x8B5E, 0xD758, + 0x8B5F, 0xD759, + 0x8B60, 0xD75A, + 0x8B61, 0xD75B, + 0x8B62, 0xD75C, + 0x8B63, 0xD75D, + 0x8B64, 0xD75E, + 0x8B65, 0xD75F, + 0x8B67, 0xD760, + 0x8B68, 0xD761, + 0x8B69, 0xD762, + 0x8B6A, 0xD763, + 0x8B6B, 0xD764, + 0x8B6D, 0xD765, + 0x8B6E, 0xD766, + 0x8B6F, 0xD767, + 0x8B70, 0xD768, + 0x8B71, 0xD769, + 0x8B72, 0xD76A, + 0x8B73, 0xD76B, + 0x8B74, 0xD76C, + 0x8B75, 0xD76D, + 0x8B76, 0xD76E, + 0x8B77, 0xD76F, + 0x8B78, 0xD770, + 0x8B79, 0xD771, + 0x8B7A, 0xD772, + 0x8B7B, 0xD773, + 0x8B7C, 0xD774, + 0x8B7D, 0xD775, + 0x8B7E, 0xD776, + 0x8B7F, 0xD777, + 0x8B80, 0xD778, + 0x8B81, 0xD779, + 0x8B82, 0xD77A, + 0x8B83, 0xD77B, + 0x8B84, 0xD77C, + 0x8B85, 0xD77D, + 0x8B86, 0xD77E, + 0x8B87, 0xD780, + 0x8B88, 0xD781, + 0x8B89, 0xD782, + 0x8B8A, 0xD783, + 0x8B8B, 0xD784, + 0x8B8C, 0xD785, + 0x8B8D, 0xD786, + 0x8B8E, 0xD787, + 0x8B8F, 0xD788, + 0x8B90, 0xD789, + 0x8B91, 0xD78A, + 0x8B92, 0xD78B, + 0x8B93, 0xD78C, + 0x8B94, 0xD78D, + 0x8B95, 0xD78E, + 0x8B96, 0xD78F, + 0x8B97, 0xD790, + 0x8B98, 0xD791, + 0x8B99, 0xD792, + 0x8B9A, 0xD793, + 0x8B9B, 0xD794, + 0x8B9C, 0xD795, + 0x8B9D, 0xD796, + 0x8B9E, 0xD797, + 0x8B9F, 0xD798, + 0x8BAC, 0xD799, + 0x8BB1, 0xD79A, + 0x8BBB, 0xD79B, + 0x8BC7, 0xD79C, + 0x8BD0, 0xD79D, + 0x8BEA, 0xD79E, + 0x8C09, 0xD79F, + 0x8C1E, 0xD7A0, + 0x8C38, 0xD840, + 0x8C39, 0xD841, + 0x8C3A, 0xD842, + 0x8C3B, 0xD843, + 0x8C3C, 0xD844, + 0x8C3D, 0xD845, + 0x8C3E, 0xD846, + 0x8C3F, 0xD847, + 0x8C40, 0xD848, + 0x8C42, 0xD849, + 0x8C43, 0xD84A, + 0x8C44, 0xD84B, + 0x8C45, 0xD84C, + 0x8C48, 0xD84D, + 0x8C4A, 0xD84E, + 0x8C4B, 0xD84F, + 0x8C4D, 0xD850, + 0x8C4E, 0xD851, + 0x8C4F, 0xD852, + 0x8C50, 0xD853, + 0x8C51, 0xD854, + 0x8C52, 0xD855, + 0x8C53, 0xD856, + 0x8C54, 0xD857, + 0x8C56, 0xD858, + 0x8C57, 0xD859, + 0x8C58, 0xD85A, + 0x8C59, 0xD85B, + 0x8C5B, 0xD85C, + 0x8C5C, 0xD85D, + 0x8C5D, 0xD85E, + 0x8C5E, 0xD85F, + 0x8C5F, 0xD860, + 0x8C60, 0xD861, + 0x8C63, 0xD862, + 0x8C64, 0xD863, + 0x8C65, 0xD864, + 0x8C66, 0xD865, + 0x8C67, 0xD866, + 0x8C68, 0xD867, + 0x8C69, 0xD868, + 0x8C6C, 0xD869, + 0x8C6D, 0xD86A, + 0x8C6E, 0xD86B, + 0x8C6F, 0xD86C, + 0x8C70, 0xD86D, + 0x8C71, 0xD86E, + 0x8C72, 0xD86F, + 0x8C74, 0xD870, + 0x8C75, 0xD871, + 0x8C76, 0xD872, + 0x8C77, 0xD873, + 0x8C7B, 0xD874, + 0x8C7C, 0xD875, + 0x8C7D, 0xD876, + 0x8C7E, 0xD877, + 0x8C7F, 0xD878, + 0x8C80, 0xD879, + 0x8C81, 0xD87A, + 0x8C83, 0xD87B, + 0x8C84, 0xD87C, + 0x8C86, 0xD87D, + 0x8C87, 0xD87E, + 0x8C88, 0xD880, + 0x8C8B, 0xD881, + 0x8C8D, 0xD882, + 0x8C8E, 0xD883, + 0x8C8F, 0xD884, + 0x8C90, 0xD885, + 0x8C91, 0xD886, + 0x8C92, 0xD887, + 0x8C93, 0xD888, + 0x8C95, 0xD889, + 0x8C96, 0xD88A, + 0x8C97, 0xD88B, + 0x8C99, 0xD88C, + 0x8C9A, 0xD88D, + 0x8C9B, 0xD88E, + 0x8C9C, 0xD88F, + 0x8C9D, 0xD890, + 0x8C9E, 0xD891, + 0x8C9F, 0xD892, + 0x8CA0, 0xD893, + 0x8CA1, 0xD894, + 0x8CA2, 0xD895, + 0x8CA3, 0xD896, + 0x8CA4, 0xD897, + 0x8CA5, 0xD898, + 0x8CA6, 0xD899, + 0x8CA7, 0xD89A, + 0x8CA8, 0xD89B, + 0x8CA9, 0xD89C, + 0x8CAA, 0xD89D, + 0x8CAB, 0xD89E, + 0x8CAC, 0xD89F, + 0x8CAD, 0xD8A0, + 0x8CAE, 0xD940, + 0x8CAF, 0xD941, + 0x8CB0, 0xD942, + 0x8CB1, 0xD943, + 0x8CB2, 0xD944, + 0x8CB3, 0xD945, + 0x8CB4, 0xD946, + 0x8CB5, 0xD947, + 0x8CB6, 0xD948, + 0x8CB7, 0xD949, + 0x8CB8, 0xD94A, + 0x8CB9, 0xD94B, + 0x8CBA, 0xD94C, + 0x8CBB, 0xD94D, + 0x8CBC, 0xD94E, + 0x8CBD, 0xD94F, + 0x8CBE, 0xD950, + 0x8CBF, 0xD951, + 0x8CC0, 0xD952, + 0x8CC1, 0xD953, + 0x8CC2, 0xD954, + 0x8CC3, 0xD955, + 0x8CC4, 0xD956, + 0x8CC5, 0xD957, + 0x8CC6, 0xD958, + 0x8CC7, 0xD959, + 0x8CC8, 0xD95A, + 0x8CC9, 0xD95B, + 0x8CCA, 0xD95C, + 0x8CCB, 0xD95D, + 0x8CCC, 0xD95E, + 0x8CCD, 0xD95F, + 0x8CCE, 0xD960, + 0x8CCF, 0xD961, + 0x8CD0, 0xD962, + 0x8CD1, 0xD963, + 0x8CD2, 0xD964, + 0x8CD3, 0xD965, + 0x8CD4, 0xD966, + 0x8CD5, 0xD967, + 0x8CD6, 0xD968, + 0x8CD7, 0xD969, + 0x8CD8, 0xD96A, + 0x8CD9, 0xD96B, + 0x8CDA, 0xD96C, + 0x8CDB, 0xD96D, + 0x8CDC, 0xD96E, + 0x8CDD, 0xD96F, + 0x8CDE, 0xD970, + 0x8CDF, 0xD971, + 0x8CE0, 0xD972, + 0x8CE1, 0xD973, + 0x8CE2, 0xD974, + 0x8CE3, 0xD975, + 0x8CE4, 0xD976, + 0x8CE5, 0xD977, + 0x8CE6, 0xD978, + 0x8CE7, 0xD979, + 0x8CE8, 0xD97A, + 0x8CE9, 0xD97B, + 0x8CEA, 0xD97C, + 0x8CEB, 0xD97D, + 0x8CEC, 0xD97E, + 0x8CED, 0xD980, + 0x8CEE, 0xD981, + 0x8CEF, 0xD982, + 0x8CF0, 0xD983, + 0x8CF1, 0xD984, + 0x8CF2, 0xD985, + 0x8CF3, 0xD986, + 0x8CF4, 0xD987, + 0x8CF5, 0xD988, + 0x8CF6, 0xD989, + 0x8CF7, 0xD98A, + 0x8CF8, 0xD98B, + 0x8CF9, 0xD98C, + 0x8CFA, 0xD98D, + 0x8CFB, 0xD98E, + 0x8CFC, 0xD98F, + 0x8CFD, 0xD990, + 0x8CFE, 0xD991, + 0x8CFF, 0xD992, + 0x8D00, 0xD993, + 0x8D01, 0xD994, + 0x8D02, 0xD995, + 0x8D03, 0xD996, + 0x8D04, 0xD997, + 0x8D05, 0xD998, + 0x8D06, 0xD999, + 0x8D07, 0xD99A, + 0x8D08, 0xD99B, + 0x8D09, 0xD99C, + 0x8D0A, 0xD99D, + 0x8D0B, 0xD99E, + 0x8D0C, 0xD99F, + 0x8D0D, 0xD9A0, + 0x8D0E, 0xDA40, + 0x8D0F, 0xDA41, + 0x8D10, 0xDA42, + 0x8D11, 0xDA43, + 0x8D12, 0xDA44, + 0x8D13, 0xDA45, + 0x8D14, 0xDA46, + 0x8D15, 0xDA47, + 0x8D16, 0xDA48, + 0x8D17, 0xDA49, + 0x8D18, 0xDA4A, + 0x8D19, 0xDA4B, + 0x8D1A, 0xDA4C, + 0x8D1B, 0xDA4D, + 0x8D1C, 0xDA4E, + 0x8D20, 0xDA4F, + 0x8D51, 0xDA50, + 0x8D52, 0xDA51, + 0x8D57, 0xDA52, + 0x8D5F, 0xDA53, + 0x8D65, 0xDA54, + 0x8D68, 0xDA55, + 0x8D69, 0xDA56, + 0x8D6A, 0xDA57, + 0x8D6C, 0xDA58, + 0x8D6E, 0xDA59, + 0x8D6F, 0xDA5A, + 0x8D71, 0xDA5B, + 0x8D72, 0xDA5C, + 0x8D78, 0xDA5D, + 0x8D79, 0xDA5E, + 0x8D7A, 0xDA5F, + 0x8D7B, 0xDA60, + 0x8D7C, 0xDA61, + 0x8D7D, 0xDA62, + 0x8D7E, 0xDA63, + 0x8D7F, 0xDA64, + 0x8D80, 0xDA65, + 0x8D82, 0xDA66, + 0x8D83, 0xDA67, + 0x8D86, 0xDA68, + 0x8D87, 0xDA69, + 0x8D88, 0xDA6A, + 0x8D89, 0xDA6B, + 0x8D8C, 0xDA6C, + 0x8D8D, 0xDA6D, + 0x8D8E, 0xDA6E, + 0x8D8F, 0xDA6F, + 0x8D90, 0xDA70, + 0x8D92, 0xDA71, + 0x8D93, 0xDA72, + 0x8D95, 0xDA73, + 0x8D96, 0xDA74, + 0x8D97, 0xDA75, + 0x8D98, 0xDA76, + 0x8D99, 0xDA77, + 0x8D9A, 0xDA78, + 0x8D9B, 0xDA79, + 0x8D9C, 0xDA7A, + 0x8D9D, 0xDA7B, + 0x8D9E, 0xDA7C, + 0x8DA0, 0xDA7D, + 0x8DA1, 0xDA7E, + 0x8DA2, 0xDA80, + 0x8DA4, 0xDA81, + 0x8DA5, 0xDA82, + 0x8DA6, 0xDA83, + 0x8DA7, 0xDA84, + 0x8DA8, 0xDA85, + 0x8DA9, 0xDA86, + 0x8DAA, 0xDA87, + 0x8DAB, 0xDA88, + 0x8DAC, 0xDA89, + 0x8DAD, 0xDA8A, + 0x8DAE, 0xDA8B, + 0x8DAF, 0xDA8C, + 0x8DB0, 0xDA8D, + 0x8DB2, 0xDA8E, + 0x8DB6, 0xDA8F, + 0x8DB7, 0xDA90, + 0x8DB9, 0xDA91, + 0x8DBB, 0xDA92, + 0x8DBD, 0xDA93, + 0x8DC0, 0xDA94, + 0x8DC1, 0xDA95, + 0x8DC2, 0xDA96, + 0x8DC5, 0xDA97, + 0x8DC7, 0xDA98, + 0x8DC8, 0xDA99, + 0x8DC9, 0xDA9A, + 0x8DCA, 0xDA9B, + 0x8DCD, 0xDA9C, + 0x8DD0, 0xDA9D, + 0x8DD2, 0xDA9E, + 0x8DD3, 0xDA9F, + 0x8DD4, 0xDAA0, + 0x8DD5, 0xDB40, + 0x8DD8, 0xDB41, + 0x8DD9, 0xDB42, + 0x8DDC, 0xDB43, + 0x8DE0, 0xDB44, + 0x8DE1, 0xDB45, + 0x8DE2, 0xDB46, + 0x8DE5, 0xDB47, + 0x8DE6, 0xDB48, + 0x8DE7, 0xDB49, + 0x8DE9, 0xDB4A, + 0x8DED, 0xDB4B, + 0x8DEE, 0xDB4C, + 0x8DF0, 0xDB4D, + 0x8DF1, 0xDB4E, + 0x8DF2, 0xDB4F, + 0x8DF4, 0xDB50, + 0x8DF6, 0xDB51, + 0x8DFC, 0xDB52, + 0x8DFE, 0xDB53, + 0x8DFF, 0xDB54, + 0x8E00, 0xDB55, + 0x8E01, 0xDB56, + 0x8E02, 0xDB57, + 0x8E03, 0xDB58, + 0x8E04, 0xDB59, + 0x8E06, 0xDB5A, + 0x8E07, 0xDB5B, + 0x8E08, 0xDB5C, + 0x8E0B, 0xDB5D, + 0x8E0D, 0xDB5E, + 0x8E0E, 0xDB5F, + 0x8E10, 0xDB60, + 0x8E11, 0xDB61, + 0x8E12, 0xDB62, + 0x8E13, 0xDB63, + 0x8E15, 0xDB64, + 0x8E16, 0xDB65, + 0x8E17, 0xDB66, + 0x8E18, 0xDB67, + 0x8E19, 0xDB68, + 0x8E1A, 0xDB69, + 0x8E1B, 0xDB6A, + 0x8E1C, 0xDB6B, + 0x8E20, 0xDB6C, + 0x8E21, 0xDB6D, + 0x8E24, 0xDB6E, + 0x8E25, 0xDB6F, + 0x8E26, 0xDB70, + 0x8E27, 0xDB71, + 0x8E28, 0xDB72, + 0x8E2B, 0xDB73, + 0x8E2D, 0xDB74, + 0x8E30, 0xDB75, + 0x8E32, 0xDB76, + 0x8E33, 0xDB77, + 0x8E34, 0xDB78, + 0x8E36, 0xDB79, + 0x8E37, 0xDB7A, + 0x8E38, 0xDB7B, + 0x8E3B, 0xDB7C, + 0x8E3C, 0xDB7D, + 0x8E3E, 0xDB7E, + 0x8E3F, 0xDB80, + 0x8E43, 0xDB81, + 0x8E45, 0xDB82, + 0x8E46, 0xDB83, + 0x8E4C, 0xDB84, + 0x8E4D, 0xDB85, + 0x8E4E, 0xDB86, + 0x8E4F, 0xDB87, + 0x8E50, 0xDB88, + 0x8E53, 0xDB89, + 0x8E54, 0xDB8A, + 0x8E55, 0xDB8B, + 0x8E56, 0xDB8C, + 0x8E57, 0xDB8D, + 0x8E58, 0xDB8E, + 0x8E5A, 0xDB8F, + 0x8E5B, 0xDB90, + 0x8E5C, 0xDB91, + 0x8E5D, 0xDB92, + 0x8E5E, 0xDB93, + 0x8E5F, 0xDB94, + 0x8E60, 0xDB95, + 0x8E61, 0xDB96, + 0x8E62, 0xDB97, + 0x8E63, 0xDB98, + 0x8E64, 0xDB99, + 0x8E65, 0xDB9A, + 0x8E67, 0xDB9B, + 0x8E68, 0xDB9C, + 0x8E6A, 0xDB9D, + 0x8E6B, 0xDB9E, + 0x8E6E, 0xDB9F, + 0x8E71, 0xDBA0, + 0x8E73, 0xDC40, + 0x8E75, 0xDC41, + 0x8E77, 0xDC42, + 0x8E78, 0xDC43, + 0x8E79, 0xDC44, + 0x8E7A, 0xDC45, + 0x8E7B, 0xDC46, + 0x8E7D, 0xDC47, + 0x8E7E, 0xDC48, + 0x8E80, 0xDC49, + 0x8E82, 0xDC4A, + 0x8E83, 0xDC4B, + 0x8E84, 0xDC4C, + 0x8E86, 0xDC4D, + 0x8E88, 0xDC4E, + 0x8E89, 0xDC4F, + 0x8E8A, 0xDC50, + 0x8E8B, 0xDC51, + 0x8E8C, 0xDC52, + 0x8E8D, 0xDC53, + 0x8E8E, 0xDC54, + 0x8E91, 0xDC55, + 0x8E92, 0xDC56, + 0x8E93, 0xDC57, + 0x8E95, 0xDC58, + 0x8E96, 0xDC59, + 0x8E97, 0xDC5A, + 0x8E98, 0xDC5B, + 0x8E99, 0xDC5C, + 0x8E9A, 0xDC5D, + 0x8E9B, 0xDC5E, + 0x8E9D, 0xDC5F, + 0x8E9F, 0xDC60, + 0x8EA0, 0xDC61, + 0x8EA1, 0xDC62, + 0x8EA2, 0xDC63, + 0x8EA3, 0xDC64, + 0x8EA4, 0xDC65, + 0x8EA5, 0xDC66, + 0x8EA6, 0xDC67, + 0x8EA7, 0xDC68, + 0x8EA8, 0xDC69, + 0x8EA9, 0xDC6A, + 0x8EAA, 0xDC6B, + 0x8EAD, 0xDC6C, + 0x8EAE, 0xDC6D, + 0x8EB0, 0xDC6E, + 0x8EB1, 0xDC6F, + 0x8EB3, 0xDC70, + 0x8EB4, 0xDC71, + 0x8EB5, 0xDC72, + 0x8EB6, 0xDC73, + 0x8EB7, 0xDC74, + 0x8EB8, 0xDC75, + 0x8EB9, 0xDC76, + 0x8EBB, 0xDC77, + 0x8EBC, 0xDC78, + 0x8EBD, 0xDC79, + 0x8EBE, 0xDC7A, + 0x8EBF, 0xDC7B, + 0x8EC0, 0xDC7C, + 0x8EC1, 0xDC7D, + 0x8EC2, 0xDC7E, + 0x8EC3, 0xDC80, + 0x8EC4, 0xDC81, + 0x8EC5, 0xDC82, + 0x8EC6, 0xDC83, + 0x8EC7, 0xDC84, + 0x8EC8, 0xDC85, + 0x8EC9, 0xDC86, + 0x8ECA, 0xDC87, + 0x8ECB, 0xDC88, + 0x8ECC, 0xDC89, + 0x8ECD, 0xDC8A, + 0x8ECF, 0xDC8B, + 0x8ED0, 0xDC8C, + 0x8ED1, 0xDC8D, + 0x8ED2, 0xDC8E, + 0x8ED3, 0xDC8F, + 0x8ED4, 0xDC90, + 0x8ED5, 0xDC91, + 0x8ED6, 0xDC92, + 0x8ED7, 0xDC93, + 0x8ED8, 0xDC94, + 0x8ED9, 0xDC95, + 0x8EDA, 0xDC96, + 0x8EDB, 0xDC97, + 0x8EDC, 0xDC98, + 0x8EDD, 0xDC99, + 0x8EDE, 0xDC9A, + 0x8EDF, 0xDC9B, + 0x8EE0, 0xDC9C, + 0x8EE1, 0xDC9D, + 0x8EE2, 0xDC9E, + 0x8EE3, 0xDC9F, + 0x8EE4, 0xDCA0, + 0x8EE5, 0xDD40, + 0x8EE6, 0xDD41, + 0x8EE7, 0xDD42, + 0x8EE8, 0xDD43, + 0x8EE9, 0xDD44, + 0x8EEA, 0xDD45, + 0x8EEB, 0xDD46, + 0x8EEC, 0xDD47, + 0x8EED, 0xDD48, + 0x8EEE, 0xDD49, + 0x8EEF, 0xDD4A, + 0x8EF0, 0xDD4B, + 0x8EF1, 0xDD4C, + 0x8EF2, 0xDD4D, + 0x8EF3, 0xDD4E, + 0x8EF4, 0xDD4F, + 0x8EF5, 0xDD50, + 0x8EF6, 0xDD51, + 0x8EF7, 0xDD52, + 0x8EF8, 0xDD53, + 0x8EF9, 0xDD54, + 0x8EFA, 0xDD55, + 0x8EFB, 0xDD56, + 0x8EFC, 0xDD57, + 0x8EFD, 0xDD58, + 0x8EFE, 0xDD59, + 0x8EFF, 0xDD5A, + 0x8F00, 0xDD5B, + 0x8F01, 0xDD5C, + 0x8F02, 0xDD5D, + 0x8F03, 0xDD5E, + 0x8F04, 0xDD5F, + 0x8F05, 0xDD60, + 0x8F06, 0xDD61, + 0x8F07, 0xDD62, + 0x8F08, 0xDD63, + 0x8F09, 0xDD64, + 0x8F0A, 0xDD65, + 0x8F0B, 0xDD66, + 0x8F0C, 0xDD67, + 0x8F0D, 0xDD68, + 0x8F0E, 0xDD69, + 0x8F0F, 0xDD6A, + 0x8F10, 0xDD6B, + 0x8F11, 0xDD6C, + 0x8F12, 0xDD6D, + 0x8F13, 0xDD6E, + 0x8F14, 0xDD6F, + 0x8F15, 0xDD70, + 0x8F16, 0xDD71, + 0x8F17, 0xDD72, + 0x8F18, 0xDD73, + 0x8F19, 0xDD74, + 0x8F1A, 0xDD75, + 0x8F1B, 0xDD76, + 0x8F1C, 0xDD77, + 0x8F1D, 0xDD78, + 0x8F1E, 0xDD79, + 0x8F1F, 0xDD7A, + 0x8F20, 0xDD7B, + 0x8F21, 0xDD7C, + 0x8F22, 0xDD7D, + 0x8F23, 0xDD7E, + 0x8F24, 0xDD80, + 0x8F25, 0xDD81, + 0x8F26, 0xDD82, + 0x8F27, 0xDD83, + 0x8F28, 0xDD84, + 0x8F29, 0xDD85, + 0x8F2A, 0xDD86, + 0x8F2B, 0xDD87, + 0x8F2C, 0xDD88, + 0x8F2D, 0xDD89, + 0x8F2E, 0xDD8A, + 0x8F2F, 0xDD8B, + 0x8F30, 0xDD8C, + 0x8F31, 0xDD8D, + 0x8F32, 0xDD8E, + 0x8F33, 0xDD8F, + 0x8F34, 0xDD90, + 0x8F35, 0xDD91, + 0x8F36, 0xDD92, + 0x8F37, 0xDD93, + 0x8F38, 0xDD94, + 0x8F39, 0xDD95, + 0x8F3A, 0xDD96, + 0x8F3B, 0xDD97, + 0x8F3C, 0xDD98, + 0x8F3D, 0xDD99, + 0x8F3E, 0xDD9A, + 0x8F3F, 0xDD9B, + 0x8F40, 0xDD9C, + 0x8F41, 0xDD9D, + 0x8F42, 0xDD9E, + 0x8F43, 0xDD9F, + 0x8F44, 0xDDA0, + 0x8F45, 0xDE40, + 0x8F46, 0xDE41, + 0x8F47, 0xDE42, + 0x8F48, 0xDE43, + 0x8F49, 0xDE44, + 0x8F4A, 0xDE45, + 0x8F4B, 0xDE46, + 0x8F4C, 0xDE47, + 0x8F4D, 0xDE48, + 0x8F4E, 0xDE49, + 0x8F4F, 0xDE4A, + 0x8F50, 0xDE4B, + 0x8F51, 0xDE4C, + 0x8F52, 0xDE4D, + 0x8F53, 0xDE4E, + 0x8F54, 0xDE4F, + 0x8F55, 0xDE50, + 0x8F56, 0xDE51, + 0x8F57, 0xDE52, + 0x8F58, 0xDE53, + 0x8F59, 0xDE54, + 0x8F5A, 0xDE55, + 0x8F5B, 0xDE56, + 0x8F5C, 0xDE57, + 0x8F5D, 0xDE58, + 0x8F5E, 0xDE59, + 0x8F5F, 0xDE5A, + 0x8F60, 0xDE5B, + 0x8F61, 0xDE5C, + 0x8F62, 0xDE5D, + 0x8F63, 0xDE5E, + 0x8F64, 0xDE5F, + 0x8F65, 0xDE60, + 0x8F6A, 0xDE61, + 0x8F80, 0xDE62, + 0x8F8C, 0xDE63, + 0x8F92, 0xDE64, + 0x8F9D, 0xDE65, + 0x8FA0, 0xDE66, + 0x8FA1, 0xDE67, + 0x8FA2, 0xDE68, + 0x8FA4, 0xDE69, + 0x8FA5, 0xDE6A, + 0x8FA6, 0xDE6B, + 0x8FA7, 0xDE6C, + 0x8FAA, 0xDE6D, + 0x8FAC, 0xDE6E, + 0x8FAD, 0xDE6F, + 0x8FAE, 0xDE70, + 0x8FAF, 0xDE71, + 0x8FB2, 0xDE72, + 0x8FB3, 0xDE73, + 0x8FB4, 0xDE74, + 0x8FB5, 0xDE75, + 0x8FB7, 0xDE76, + 0x8FB8, 0xDE77, + 0x8FBA, 0xDE78, + 0x8FBB, 0xDE79, + 0x8FBC, 0xDE7A, + 0x8FBF, 0xDE7B, + 0x8FC0, 0xDE7C, + 0x8FC3, 0xDE7D, + 0x8FC6, 0xDE7E, + 0x8FC9, 0xDE80, + 0x8FCA, 0xDE81, + 0x8FCB, 0xDE82, + 0x8FCC, 0xDE83, + 0x8FCD, 0xDE84, + 0x8FCF, 0xDE85, + 0x8FD2, 0xDE86, + 0x8FD6, 0xDE87, + 0x8FD7, 0xDE88, + 0x8FDA, 0xDE89, + 0x8FE0, 0xDE8A, + 0x8FE1, 0xDE8B, + 0x8FE3, 0xDE8C, + 0x8FE7, 0xDE8D, + 0x8FEC, 0xDE8E, + 0x8FEF, 0xDE8F, + 0x8FF1, 0xDE90, + 0x8FF2, 0xDE91, + 0x8FF4, 0xDE92, + 0x8FF5, 0xDE93, + 0x8FF6, 0xDE94, + 0x8FFA, 0xDE95, + 0x8FFB, 0xDE96, + 0x8FFC, 0xDE97, + 0x8FFE, 0xDE98, + 0x8FFF, 0xDE99, + 0x9007, 0xDE9A, + 0x9008, 0xDE9B, + 0x900C, 0xDE9C, + 0x900E, 0xDE9D, + 0x9013, 0xDE9E, + 0x9015, 0xDE9F, + 0x9018, 0xDEA0, + 0x9019, 0xDF40, + 0x901C, 0xDF41, + 0x9023, 0xDF42, + 0x9024, 0xDF43, + 0x9025, 0xDF44, + 0x9027, 0xDF45, + 0x9028, 0xDF46, + 0x9029, 0xDF47, + 0x902A, 0xDF48, + 0x902B, 0xDF49, + 0x902C, 0xDF4A, + 0x9030, 0xDF4B, + 0x9031, 0xDF4C, + 0x9032, 0xDF4D, + 0x9033, 0xDF4E, + 0x9034, 0xDF4F, + 0x9037, 0xDF50, + 0x9039, 0xDF51, + 0x903A, 0xDF52, + 0x903D, 0xDF53, + 0x903F, 0xDF54, + 0x9040, 0xDF55, + 0x9043, 0xDF56, + 0x9045, 0xDF57, + 0x9046, 0xDF58, + 0x9048, 0xDF59, + 0x9049, 0xDF5A, + 0x904A, 0xDF5B, + 0x904B, 0xDF5C, + 0x904C, 0xDF5D, + 0x904E, 0xDF5E, + 0x9054, 0xDF5F, + 0x9055, 0xDF60, + 0x9056, 0xDF61, + 0x9059, 0xDF62, + 0x905A, 0xDF63, + 0x905C, 0xDF64, + 0x905D, 0xDF65, + 0x905E, 0xDF66, + 0x905F, 0xDF67, + 0x9060, 0xDF68, + 0x9061, 0xDF69, + 0x9064, 0xDF6A, + 0x9066, 0xDF6B, + 0x9067, 0xDF6C, + 0x9069, 0xDF6D, + 0x906A, 0xDF6E, + 0x906B, 0xDF6F, + 0x906C, 0xDF70, + 0x906F, 0xDF71, + 0x9070, 0xDF72, + 0x9071, 0xDF73, + 0x9072, 0xDF74, + 0x9073, 0xDF75, + 0x9076, 0xDF76, + 0x9077, 0xDF77, + 0x9078, 0xDF78, + 0x9079, 0xDF79, + 0x907A, 0xDF7A, + 0x907B, 0xDF7B, + 0x907C, 0xDF7C, + 0x907E, 0xDF7D, + 0x9081, 0xDF7E, + 0x9084, 0xDF80, + 0x9085, 0xDF81, + 0x9086, 0xDF82, + 0x9087, 0xDF83, + 0x9089, 0xDF84, + 0x908A, 0xDF85, + 0x908C, 0xDF86, + 0x908D, 0xDF87, + 0x908E, 0xDF88, + 0x908F, 0xDF89, + 0x9090, 0xDF8A, + 0x9092, 0xDF8B, + 0x9094, 0xDF8C, + 0x9096, 0xDF8D, + 0x9098, 0xDF8E, + 0x909A, 0xDF8F, + 0x909C, 0xDF90, + 0x909E, 0xDF91, + 0x909F, 0xDF92, + 0x90A0, 0xDF93, + 0x90A4, 0xDF94, + 0x90A5, 0xDF95, + 0x90A7, 0xDF96, + 0x90A8, 0xDF97, + 0x90A9, 0xDF98, + 0x90AB, 0xDF99, + 0x90AD, 0xDF9A, + 0x90B2, 0xDF9B, + 0x90B7, 0xDF9C, + 0x90BC, 0xDF9D, + 0x90BD, 0xDF9E, + 0x90BF, 0xDF9F, + 0x90C0, 0xDFA0, + 0x90C2, 0xE040, + 0x90C3, 0xE041, + 0x90C6, 0xE042, + 0x90C8, 0xE043, + 0x90C9, 0xE044, + 0x90CB, 0xE045, + 0x90CC, 0xE046, + 0x90CD, 0xE047, + 0x90D2, 0xE048, + 0x90D4, 0xE049, + 0x90D5, 0xE04A, + 0x90D6, 0xE04B, + 0x90D8, 0xE04C, + 0x90D9, 0xE04D, + 0x90DA, 0xE04E, + 0x90DE, 0xE04F, + 0x90DF, 0xE050, + 0x90E0, 0xE051, + 0x90E3, 0xE052, + 0x90E4, 0xE053, + 0x90E5, 0xE054, + 0x90E9, 0xE055, + 0x90EA, 0xE056, + 0x90EC, 0xE057, + 0x90EE, 0xE058, + 0x90F0, 0xE059, + 0x90F1, 0xE05A, + 0x90F2, 0xE05B, + 0x90F3, 0xE05C, + 0x90F5, 0xE05D, + 0x90F6, 0xE05E, + 0x90F7, 0xE05F, + 0x90F9, 0xE060, + 0x90FA, 0xE061, + 0x90FB, 0xE062, + 0x90FC, 0xE063, + 0x90FF, 0xE064, + 0x9100, 0xE065, + 0x9101, 0xE066, + 0x9103, 0xE067, + 0x9105, 0xE068, + 0x9106, 0xE069, + 0x9107, 0xE06A, + 0x9108, 0xE06B, + 0x9109, 0xE06C, + 0x910A, 0xE06D, + 0x910B, 0xE06E, + 0x910C, 0xE06F, + 0x910D, 0xE070, + 0x910E, 0xE071, + 0x910F, 0xE072, + 0x9110, 0xE073, + 0x9111, 0xE074, + 0x9112, 0xE075, + 0x9113, 0xE076, + 0x9114, 0xE077, + 0x9115, 0xE078, + 0x9116, 0xE079, + 0x9117, 0xE07A, + 0x9118, 0xE07B, + 0x911A, 0xE07C, + 0x911B, 0xE07D, + 0x911C, 0xE07E, + 0x911D, 0xE080, + 0x911F, 0xE081, + 0x9120, 0xE082, + 0x9121, 0xE083, + 0x9124, 0xE084, + 0x9125, 0xE085, + 0x9126, 0xE086, + 0x9127, 0xE087, + 0x9128, 0xE088, + 0x9129, 0xE089, + 0x912A, 0xE08A, + 0x912B, 0xE08B, + 0x912C, 0xE08C, + 0x912D, 0xE08D, + 0x912E, 0xE08E, + 0x9130, 0xE08F, + 0x9132, 0xE090, + 0x9133, 0xE091, + 0x9134, 0xE092, + 0x9135, 0xE093, + 0x9136, 0xE094, + 0x9137, 0xE095, + 0x9138, 0xE096, + 0x913A, 0xE097, + 0x913B, 0xE098, + 0x913C, 0xE099, + 0x913D, 0xE09A, + 0x913E, 0xE09B, + 0x913F, 0xE09C, + 0x9140, 0xE09D, + 0x9141, 0xE09E, + 0x9142, 0xE09F, + 0x9144, 0xE0A0, + 0x9145, 0xE140, + 0x9147, 0xE141, + 0x9148, 0xE142, + 0x9151, 0xE143, + 0x9153, 0xE144, + 0x9154, 0xE145, + 0x9155, 0xE146, + 0x9156, 0xE147, + 0x9158, 0xE148, + 0x9159, 0xE149, + 0x915B, 0xE14A, + 0x915C, 0xE14B, + 0x915F, 0xE14C, + 0x9160, 0xE14D, + 0x9166, 0xE14E, + 0x9167, 0xE14F, + 0x9168, 0xE150, + 0x916B, 0xE151, + 0x916D, 0xE152, + 0x9173, 0xE153, + 0x917A, 0xE154, + 0x917B, 0xE155, + 0x917C, 0xE156, + 0x9180, 0xE157, + 0x9181, 0xE158, + 0x9182, 0xE159, + 0x9183, 0xE15A, + 0x9184, 0xE15B, + 0x9186, 0xE15C, + 0x9188, 0xE15D, + 0x918A, 0xE15E, + 0x918E, 0xE15F, + 0x918F, 0xE160, + 0x9193, 0xE161, + 0x9194, 0xE162, + 0x9195, 0xE163, + 0x9196, 0xE164, + 0x9197, 0xE165, + 0x9198, 0xE166, + 0x9199, 0xE167, + 0x919C, 0xE168, + 0x919D, 0xE169, + 0x919E, 0xE16A, + 0x919F, 0xE16B, + 0x91A0, 0xE16C, + 0x91A1, 0xE16D, + 0x91A4, 0xE16E, + 0x91A5, 0xE16F, + 0x91A6, 0xE170, + 0x91A7, 0xE171, + 0x91A8, 0xE172, + 0x91A9, 0xE173, + 0x91AB, 0xE174, + 0x91AC, 0xE175, + 0x91B0, 0xE176, + 0x91B1, 0xE177, + 0x91B2, 0xE178, + 0x91B3, 0xE179, + 0x91B6, 0xE17A, + 0x91B7, 0xE17B, + 0x91B8, 0xE17C, + 0x91B9, 0xE17D, + 0x91BB, 0xE17E, + 0x91BC, 0xE180, + 0x91BD, 0xE181, + 0x91BE, 0xE182, + 0x91BF, 0xE183, + 0x91C0, 0xE184, + 0x91C1, 0xE185, + 0x91C2, 0xE186, + 0x91C3, 0xE187, + 0x91C4, 0xE188, + 0x91C5, 0xE189, + 0x91C6, 0xE18A, + 0x91C8, 0xE18B, + 0x91CB, 0xE18C, + 0x91D0, 0xE18D, + 0x91D2, 0xE18E, + 0x91D3, 0xE18F, + 0x91D4, 0xE190, + 0x91D5, 0xE191, + 0x91D6, 0xE192, + 0x91D7, 0xE193, + 0x91D8, 0xE194, + 0x91D9, 0xE195, + 0x91DA, 0xE196, + 0x91DB, 0xE197, + 0x91DD, 0xE198, + 0x91DE, 0xE199, + 0x91DF, 0xE19A, + 0x91E0, 0xE19B, + 0x91E1, 0xE19C, + 0x91E2, 0xE19D, + 0x91E3, 0xE19E, + 0x91E4, 0xE19F, + 0x91E5, 0xE1A0, + 0x91E6, 0xE240, + 0x91E7, 0xE241, + 0x91E8, 0xE242, + 0x91E9, 0xE243, + 0x91EA, 0xE244, + 0x91EB, 0xE245, + 0x91EC, 0xE246, + 0x91ED, 0xE247, + 0x91EE, 0xE248, + 0x91EF, 0xE249, + 0x91F0, 0xE24A, + 0x91F1, 0xE24B, + 0x91F2, 0xE24C, + 0x91F3, 0xE24D, + 0x91F4, 0xE24E, + 0x91F5, 0xE24F, + 0x91F6, 0xE250, + 0x91F7, 0xE251, + 0x91F8, 0xE252, + 0x91F9, 0xE253, + 0x91FA, 0xE254, + 0x91FB, 0xE255, + 0x91FC, 0xE256, + 0x91FD, 0xE257, + 0x91FE, 0xE258, + 0x91FF, 0xE259, + 0x9200, 0xE25A, + 0x9201, 0xE25B, + 0x9202, 0xE25C, + 0x9203, 0xE25D, + 0x9204, 0xE25E, + 0x9205, 0xE25F, + 0x9206, 0xE260, + 0x9207, 0xE261, + 0x9208, 0xE262, + 0x9209, 0xE263, + 0x920A, 0xE264, + 0x920B, 0xE265, + 0x920C, 0xE266, + 0x920D, 0xE267, + 0x920E, 0xE268, + 0x920F, 0xE269, + 0x9210, 0xE26A, + 0x9211, 0xE26B, + 0x9212, 0xE26C, + 0x9213, 0xE26D, + 0x9214, 0xE26E, + 0x9215, 0xE26F, + 0x9216, 0xE270, + 0x9217, 0xE271, + 0x9218, 0xE272, + 0x9219, 0xE273, + 0x921A, 0xE274, + 0x921B, 0xE275, + 0x921C, 0xE276, + 0x921D, 0xE277, + 0x921E, 0xE278, + 0x921F, 0xE279, + 0x9220, 0xE27A, + 0x9221, 0xE27B, + 0x9222, 0xE27C, + 0x9223, 0xE27D, + 0x9224, 0xE27E, + 0x9225, 0xE280, + 0x9226, 0xE281, + 0x9227, 0xE282, + 0x9228, 0xE283, + 0x9229, 0xE284, + 0x922A, 0xE285, + 0x922B, 0xE286, + 0x922C, 0xE287, + 0x922D, 0xE288, + 0x922E, 0xE289, + 0x922F, 0xE28A, + 0x9230, 0xE28B, + 0x9231, 0xE28C, + 0x9232, 0xE28D, + 0x9233, 0xE28E, + 0x9234, 0xE28F, + 0x9235, 0xE290, + 0x9236, 0xE291, + 0x9237, 0xE292, + 0x9238, 0xE293, + 0x9239, 0xE294, + 0x923A, 0xE295, + 0x923B, 0xE296, + 0x923C, 0xE297, + 0x923D, 0xE298, + 0x923E, 0xE299, + 0x923F, 0xE29A, + 0x9240, 0xE29B, + 0x9241, 0xE29C, + 0x9242, 0xE29D, + 0x9243, 0xE29E, + 0x9244, 0xE29F, + 0x9245, 0xE2A0, + 0x9246, 0xE340, + 0x9247, 0xE341, + 0x9248, 0xE342, + 0x9249, 0xE343, + 0x924A, 0xE344, + 0x924B, 0xE345, + 0x924C, 0xE346, + 0x924D, 0xE347, + 0x924E, 0xE348, + 0x924F, 0xE349, + 0x9250, 0xE34A, + 0x9251, 0xE34B, + 0x9252, 0xE34C, + 0x9253, 0xE34D, + 0x9254, 0xE34E, + 0x9255, 0xE34F, + 0x9256, 0xE350, + 0x9257, 0xE351, + 0x9258, 0xE352, + 0x9259, 0xE353, + 0x925A, 0xE354, + 0x925B, 0xE355, + 0x925C, 0xE356, + 0x925D, 0xE357, + 0x925E, 0xE358, + 0x925F, 0xE359, + 0x9260, 0xE35A, + 0x9261, 0xE35B, + 0x9262, 0xE35C, + 0x9263, 0xE35D, + 0x9264, 0xE35E, + 0x9265, 0xE35F, + 0x9266, 0xE360, + 0x9267, 0xE361, + 0x9268, 0xE362, + 0x9269, 0xE363, + 0x926A, 0xE364, + 0x926B, 0xE365, + 0x926C, 0xE366, + 0x926D, 0xE367, + 0x926E, 0xE368, + 0x926F, 0xE369, + 0x9270, 0xE36A, + 0x9271, 0xE36B, + 0x9272, 0xE36C, + 0x9273, 0xE36D, + 0x9275, 0xE36E, + 0x9276, 0xE36F, + 0x9277, 0xE370, + 0x9278, 0xE371, + 0x9279, 0xE372, + 0x927A, 0xE373, + 0x927B, 0xE374, + 0x927C, 0xE375, + 0x927D, 0xE376, + 0x927E, 0xE377, + 0x927F, 0xE378, + 0x9280, 0xE379, + 0x9281, 0xE37A, + 0x9282, 0xE37B, + 0x9283, 0xE37C, + 0x9284, 0xE37D, + 0x9285, 0xE37E, + 0x9286, 0xE380, + 0x9287, 0xE381, + 0x9288, 0xE382, + 0x9289, 0xE383, + 0x928A, 0xE384, + 0x928B, 0xE385, + 0x928C, 0xE386, + 0x928D, 0xE387, + 0x928F, 0xE388, + 0x9290, 0xE389, + 0x9291, 0xE38A, + 0x9292, 0xE38B, + 0x9293, 0xE38C, + 0x9294, 0xE38D, + 0x9295, 0xE38E, + 0x9296, 0xE38F, + 0x9297, 0xE390, + 0x9298, 0xE391, + 0x9299, 0xE392, + 0x929A, 0xE393, + 0x929B, 0xE394, + 0x929C, 0xE395, + 0x929D, 0xE396, + 0x929E, 0xE397, + 0x929F, 0xE398, + 0x92A0, 0xE399, + 0x92A1, 0xE39A, + 0x92A2, 0xE39B, + 0x92A3, 0xE39C, + 0x92A4, 0xE39D, + 0x92A5, 0xE39E, + 0x92A6, 0xE39F, + 0x92A7, 0xE3A0, + 0x92A8, 0xE440, + 0x92A9, 0xE441, + 0x92AA, 0xE442, + 0x92AB, 0xE443, + 0x92AC, 0xE444, + 0x92AD, 0xE445, + 0x92AF, 0xE446, + 0x92B0, 0xE447, + 0x92B1, 0xE448, + 0x92B2, 0xE449, + 0x92B3, 0xE44A, + 0x92B4, 0xE44B, + 0x92B5, 0xE44C, + 0x92B6, 0xE44D, + 0x92B7, 0xE44E, + 0x92B8, 0xE44F, + 0x92B9, 0xE450, + 0x92BA, 0xE451, + 0x92BB, 0xE452, + 0x92BC, 0xE453, + 0x92BD, 0xE454, + 0x92BE, 0xE455, + 0x92BF, 0xE456, + 0x92C0, 0xE457, + 0x92C1, 0xE458, + 0x92C2, 0xE459, + 0x92C3, 0xE45A, + 0x92C4, 0xE45B, + 0x92C5, 0xE45C, + 0x92C6, 0xE45D, + 0x92C7, 0xE45E, + 0x92C9, 0xE45F, + 0x92CA, 0xE460, + 0x92CB, 0xE461, + 0x92CC, 0xE462, + 0x92CD, 0xE463, + 0x92CE, 0xE464, + 0x92CF, 0xE465, + 0x92D0, 0xE466, + 0x92D1, 0xE467, + 0x92D2, 0xE468, + 0x92D3, 0xE469, + 0x92D4, 0xE46A, + 0x92D5, 0xE46B, + 0x92D6, 0xE46C, + 0x92D7, 0xE46D, + 0x92D8, 0xE46E, + 0x92D9, 0xE46F, + 0x92DA, 0xE470, + 0x92DB, 0xE471, + 0x92DC, 0xE472, + 0x92DD, 0xE473, + 0x92DE, 0xE474, + 0x92DF, 0xE475, + 0x92E0, 0xE476, + 0x92E1, 0xE477, + 0x92E2, 0xE478, + 0x92E3, 0xE479, + 0x92E4, 0xE47A, + 0x92E5, 0xE47B, + 0x92E6, 0xE47C, + 0x92E7, 0xE47D, + 0x92E8, 0xE47E, + 0x92E9, 0xE480, + 0x92EA, 0xE481, + 0x92EB, 0xE482, + 0x92EC, 0xE483, + 0x92ED, 0xE484, + 0x92EE, 0xE485, + 0x92EF, 0xE486, + 0x92F0, 0xE487, + 0x92F1, 0xE488, + 0x92F2, 0xE489, + 0x92F3, 0xE48A, + 0x92F4, 0xE48B, + 0x92F5, 0xE48C, + 0x92F6, 0xE48D, + 0x92F7, 0xE48E, + 0x92F8, 0xE48F, + 0x92F9, 0xE490, + 0x92FA, 0xE491, + 0x92FB, 0xE492, + 0x92FC, 0xE493, + 0x92FD, 0xE494, + 0x92FE, 0xE495, + 0x92FF, 0xE496, + 0x9300, 0xE497, + 0x9301, 0xE498, + 0x9302, 0xE499, + 0x9303, 0xE49A, + 0x9304, 0xE49B, + 0x9305, 0xE49C, + 0x9306, 0xE49D, + 0x9307, 0xE49E, + 0x9308, 0xE49F, + 0x9309, 0xE4A0, + 0x930A, 0xE540, + 0x930B, 0xE541, + 0x930C, 0xE542, + 0x930D, 0xE543, + 0x930E, 0xE544, + 0x930F, 0xE545, + 0x9310, 0xE546, + 0x9311, 0xE547, + 0x9312, 0xE548, + 0x9313, 0xE549, + 0x9314, 0xE54A, + 0x9315, 0xE54B, + 0x9316, 0xE54C, + 0x9317, 0xE54D, + 0x9318, 0xE54E, + 0x9319, 0xE54F, + 0x931A, 0xE550, + 0x931B, 0xE551, + 0x931C, 0xE552, + 0x931D, 0xE553, + 0x931E, 0xE554, + 0x931F, 0xE555, + 0x9320, 0xE556, + 0x9321, 0xE557, + 0x9322, 0xE558, + 0x9323, 0xE559, + 0x9324, 0xE55A, + 0x9325, 0xE55B, + 0x9326, 0xE55C, + 0x9327, 0xE55D, + 0x9328, 0xE55E, + 0x9329, 0xE55F, + 0x932A, 0xE560, + 0x932B, 0xE561, + 0x932C, 0xE562, + 0x932D, 0xE563, + 0x932E, 0xE564, + 0x932F, 0xE565, + 0x9330, 0xE566, + 0x9331, 0xE567, + 0x9332, 0xE568, + 0x9333, 0xE569, + 0x9334, 0xE56A, + 0x9335, 0xE56B, + 0x9336, 0xE56C, + 0x9337, 0xE56D, + 0x9338, 0xE56E, + 0x9339, 0xE56F, + 0x933A, 0xE570, + 0x933B, 0xE571, + 0x933C, 0xE572, + 0x933D, 0xE573, + 0x933F, 0xE574, + 0x9340, 0xE575, + 0x9341, 0xE576, + 0x9342, 0xE577, + 0x9343, 0xE578, + 0x9344, 0xE579, + 0x9345, 0xE57A, + 0x9346, 0xE57B, + 0x9347, 0xE57C, + 0x9348, 0xE57D, + 0x9349, 0xE57E, + 0x934A, 0xE580, + 0x934B, 0xE581, + 0x934C, 0xE582, + 0x934D, 0xE583, + 0x934E, 0xE584, + 0x934F, 0xE585, + 0x9350, 0xE586, + 0x9351, 0xE587, + 0x9352, 0xE588, + 0x9353, 0xE589, + 0x9354, 0xE58A, + 0x9355, 0xE58B, + 0x9356, 0xE58C, + 0x9357, 0xE58D, + 0x9358, 0xE58E, + 0x9359, 0xE58F, + 0x935A, 0xE590, + 0x935B, 0xE591, + 0x935C, 0xE592, + 0x935D, 0xE593, + 0x935E, 0xE594, + 0x935F, 0xE595, + 0x9360, 0xE596, + 0x9361, 0xE597, + 0x9362, 0xE598, + 0x9363, 0xE599, + 0x9364, 0xE59A, + 0x9365, 0xE59B, + 0x9366, 0xE59C, + 0x9367, 0xE59D, + 0x9368, 0xE59E, + 0x9369, 0xE59F, + 0x936B, 0xE5A0, + 0x936C, 0xE640, + 0x936D, 0xE641, + 0x936E, 0xE642, + 0x936F, 0xE643, + 0x9370, 0xE644, + 0x9371, 0xE645, + 0x9372, 0xE646, + 0x9373, 0xE647, + 0x9374, 0xE648, + 0x9375, 0xE649, + 0x9376, 0xE64A, + 0x9377, 0xE64B, + 0x9378, 0xE64C, + 0x9379, 0xE64D, + 0x937A, 0xE64E, + 0x937B, 0xE64F, + 0x937C, 0xE650, + 0x937D, 0xE651, + 0x937E, 0xE652, + 0x937F, 0xE653, + 0x9380, 0xE654, + 0x9381, 0xE655, + 0x9382, 0xE656, + 0x9383, 0xE657, + 0x9384, 0xE658, + 0x9385, 0xE659, + 0x9386, 0xE65A, + 0x9387, 0xE65B, + 0x9388, 0xE65C, + 0x9389, 0xE65D, + 0x938A, 0xE65E, + 0x938B, 0xE65F, + 0x938C, 0xE660, + 0x938D, 0xE661, + 0x938E, 0xE662, + 0x9390, 0xE663, + 0x9391, 0xE664, + 0x9392, 0xE665, + 0x9393, 0xE666, + 0x9394, 0xE667, + 0x9395, 0xE668, + 0x9396, 0xE669, + 0x9397, 0xE66A, + 0x9398, 0xE66B, + 0x9399, 0xE66C, + 0x939A, 0xE66D, + 0x939B, 0xE66E, + 0x939C, 0xE66F, + 0x939D, 0xE670, + 0x939E, 0xE671, + 0x939F, 0xE672, + 0x93A0, 0xE673, + 0x93A1, 0xE674, + 0x93A2, 0xE675, + 0x93A3, 0xE676, + 0x93A4, 0xE677, + 0x93A5, 0xE678, + 0x93A6, 0xE679, + 0x93A7, 0xE67A, + 0x93A8, 0xE67B, + 0x93A9, 0xE67C, + 0x93AA, 0xE67D, + 0x93AB, 0xE67E, + 0x93AC, 0xE680, + 0x93AD, 0xE681, + 0x93AE, 0xE682, + 0x93AF, 0xE683, + 0x93B0, 0xE684, + 0x93B1, 0xE685, + 0x93B2, 0xE686, + 0x93B3, 0xE687, + 0x93B4, 0xE688, + 0x93B5, 0xE689, + 0x93B6, 0xE68A, + 0x93B7, 0xE68B, + 0x93B8, 0xE68C, + 0x93B9, 0xE68D, + 0x93BA, 0xE68E, + 0x93BB, 0xE68F, + 0x93BC, 0xE690, + 0x93BD, 0xE691, + 0x93BE, 0xE692, + 0x93BF, 0xE693, + 0x93C0, 0xE694, + 0x93C1, 0xE695, + 0x93C2, 0xE696, + 0x93C3, 0xE697, + 0x93C4, 0xE698, + 0x93C5, 0xE699, + 0x93C6, 0xE69A, + 0x93C7, 0xE69B, + 0x93C8, 0xE69C, + 0x93C9, 0xE69D, + 0x93CB, 0xE69E, + 0x93CC, 0xE69F, + 0x93CD, 0xE6A0, + 0x93CE, 0xE740, + 0x93CF, 0xE741, + 0x93D0, 0xE742, + 0x93D1, 0xE743, + 0x93D2, 0xE744, + 0x93D3, 0xE745, + 0x93D4, 0xE746, + 0x93D5, 0xE747, + 0x93D7, 0xE748, + 0x93D8, 0xE749, + 0x93D9, 0xE74A, + 0x93DA, 0xE74B, + 0x93DB, 0xE74C, + 0x93DC, 0xE74D, + 0x93DD, 0xE74E, + 0x93DE, 0xE74F, + 0x93DF, 0xE750, + 0x93E0, 0xE751, + 0x93E1, 0xE752, + 0x93E2, 0xE753, + 0x93E3, 0xE754, + 0x93E4, 0xE755, + 0x93E5, 0xE756, + 0x93E6, 0xE757, + 0x93E7, 0xE758, + 0x93E8, 0xE759, + 0x93E9, 0xE75A, + 0x93EA, 0xE75B, + 0x93EB, 0xE75C, + 0x93EC, 0xE75D, + 0x93ED, 0xE75E, + 0x93EE, 0xE75F, + 0x93EF, 0xE760, + 0x93F0, 0xE761, + 0x93F1, 0xE762, + 0x93F2, 0xE763, + 0x93F3, 0xE764, + 0x93F4, 0xE765, + 0x93F5, 0xE766, + 0x93F6, 0xE767, + 0x93F7, 0xE768, + 0x93F8, 0xE769, + 0x93F9, 0xE76A, + 0x93FA, 0xE76B, + 0x93FB, 0xE76C, + 0x93FC, 0xE76D, + 0x93FD, 0xE76E, + 0x93FE, 0xE76F, + 0x93FF, 0xE770, + 0x9400, 0xE771, + 0x9401, 0xE772, + 0x9402, 0xE773, + 0x9403, 0xE774, + 0x9404, 0xE775, + 0x9405, 0xE776, + 0x9406, 0xE777, + 0x9407, 0xE778, + 0x9408, 0xE779, + 0x9409, 0xE77A, + 0x940A, 0xE77B, + 0x940B, 0xE77C, + 0x940C, 0xE77D, + 0x940D, 0xE77E, + 0x940E, 0xE780, + 0x940F, 0xE781, + 0x9410, 0xE782, + 0x9411, 0xE783, + 0x9412, 0xE784, + 0x9413, 0xE785, + 0x9414, 0xE786, + 0x9415, 0xE787, + 0x9416, 0xE788, + 0x9417, 0xE789, + 0x9418, 0xE78A, + 0x9419, 0xE78B, + 0x941A, 0xE78C, + 0x941B, 0xE78D, + 0x941C, 0xE78E, + 0x941D, 0xE78F, + 0x941E, 0xE790, + 0x941F, 0xE791, + 0x9420, 0xE792, + 0x9421, 0xE793, + 0x9422, 0xE794, + 0x9423, 0xE795, + 0x9424, 0xE796, + 0x9425, 0xE797, + 0x9426, 0xE798, + 0x9427, 0xE799, + 0x9428, 0xE79A, + 0x9429, 0xE79B, + 0x942A, 0xE79C, + 0x942B, 0xE79D, + 0x942C, 0xE79E, + 0x942D, 0xE79F, + 0x942E, 0xE7A0, + 0x942F, 0xE840, + 0x9430, 0xE841, + 0x9431, 0xE842, + 0x9432, 0xE843, + 0x9433, 0xE844, + 0x9434, 0xE845, + 0x9435, 0xE846, + 0x9436, 0xE847, + 0x9437, 0xE848, + 0x9438, 0xE849, + 0x9439, 0xE84A, + 0x943A, 0xE84B, + 0x943B, 0xE84C, + 0x943C, 0xE84D, + 0x943D, 0xE84E, + 0x943F, 0xE84F, + 0x9440, 0xE850, + 0x9441, 0xE851, + 0x9442, 0xE852, + 0x9443, 0xE853, + 0x9444, 0xE854, + 0x9445, 0xE855, + 0x9446, 0xE856, + 0x9447, 0xE857, + 0x9448, 0xE858, + 0x9449, 0xE859, + 0x944A, 0xE85A, + 0x944B, 0xE85B, + 0x944C, 0xE85C, + 0x944D, 0xE85D, + 0x944E, 0xE85E, + 0x944F, 0xE85F, + 0x9450, 0xE860, + 0x9451, 0xE861, + 0x9452, 0xE862, + 0x9453, 0xE863, + 0x9454, 0xE864, + 0x9455, 0xE865, + 0x9456, 0xE866, + 0x9457, 0xE867, + 0x9458, 0xE868, + 0x9459, 0xE869, + 0x945A, 0xE86A, + 0x945B, 0xE86B, + 0x945C, 0xE86C, + 0x945D, 0xE86D, + 0x945E, 0xE86E, + 0x945F, 0xE86F, + 0x9460, 0xE870, + 0x9461, 0xE871, + 0x9462, 0xE872, + 0x9463, 0xE873, + 0x9464, 0xE874, + 0x9465, 0xE875, + 0x9466, 0xE876, + 0x9467, 0xE877, + 0x9468, 0xE878, + 0x9469, 0xE879, + 0x946A, 0xE87A, + 0x946C, 0xE87B, + 0x946D, 0xE87C, + 0x946E, 0xE87D, + 0x946F, 0xE87E, + 0x9470, 0xE880, + 0x9471, 0xE881, + 0x9472, 0xE882, + 0x9473, 0xE883, + 0x9474, 0xE884, + 0x9475, 0xE885, + 0x9476, 0xE886, + 0x9477, 0xE887, + 0x9478, 0xE888, + 0x9479, 0xE889, + 0x947A, 0xE88A, + 0x947B, 0xE88B, + 0x947C, 0xE88C, + 0x947D, 0xE88D, + 0x947E, 0xE88E, + 0x947F, 0xE88F, + 0x9480, 0xE890, + 0x9481, 0xE891, + 0x9482, 0xE892, + 0x9483, 0xE893, + 0x9484, 0xE894, + 0x9491, 0xE895, + 0x9496, 0xE896, + 0x9498, 0xE897, + 0x94C7, 0xE898, + 0x94CF, 0xE899, + 0x94D3, 0xE89A, + 0x94D4, 0xE89B, + 0x94DA, 0xE89C, + 0x94E6, 0xE89D, + 0x94FB, 0xE89E, + 0x951C, 0xE89F, + 0x9520, 0xE8A0, + 0x9527, 0xE940, + 0x9533, 0xE941, + 0x953D, 0xE942, + 0x9543, 0xE943, + 0x9548, 0xE944, + 0x954B, 0xE945, + 0x9555, 0xE946, + 0x955A, 0xE947, + 0x9560, 0xE948, + 0x956E, 0xE949, + 0x9574, 0xE94A, + 0x9575, 0xE94B, + 0x9577, 0xE94C, + 0x9578, 0xE94D, + 0x9579, 0xE94E, + 0x957A, 0xE94F, + 0x957B, 0xE950, + 0x957C, 0xE951, + 0x957D, 0xE952, + 0x957E, 0xE953, + 0x9580, 0xE954, + 0x9581, 0xE955, + 0x9582, 0xE956, + 0x9583, 0xE957, + 0x9584, 0xE958, + 0x9585, 0xE959, + 0x9586, 0xE95A, + 0x9587, 0xE95B, + 0x9588, 0xE95C, + 0x9589, 0xE95D, + 0x958A, 0xE95E, + 0x958B, 0xE95F, + 0x958C, 0xE960, + 0x958D, 0xE961, + 0x958E, 0xE962, + 0x958F, 0xE963, + 0x9590, 0xE964, + 0x9591, 0xE965, + 0x9592, 0xE966, + 0x9593, 0xE967, + 0x9594, 0xE968, + 0x9595, 0xE969, + 0x9596, 0xE96A, + 0x9597, 0xE96B, + 0x9598, 0xE96C, + 0x9599, 0xE96D, + 0x959A, 0xE96E, + 0x959B, 0xE96F, + 0x959C, 0xE970, + 0x959D, 0xE971, + 0x959E, 0xE972, + 0x959F, 0xE973, + 0x95A0, 0xE974, + 0x95A1, 0xE975, + 0x95A2, 0xE976, + 0x95A3, 0xE977, + 0x95A4, 0xE978, + 0x95A5, 0xE979, + 0x95A6, 0xE97A, + 0x95A7, 0xE97B, + 0x95A8, 0xE97C, + 0x95A9, 0xE97D, + 0x95AA, 0xE97E, + 0x95AB, 0xE980, + 0x95AC, 0xE981, + 0x95AD, 0xE982, + 0x95AE, 0xE983, + 0x95AF, 0xE984, + 0x95B0, 0xE985, + 0x95B1, 0xE986, + 0x95B2, 0xE987, + 0x95B3, 0xE988, + 0x95B4, 0xE989, + 0x95B5, 0xE98A, + 0x95B6, 0xE98B, + 0x95B7, 0xE98C, + 0x95B8, 0xE98D, + 0x95B9, 0xE98E, + 0x95BA, 0xE98F, + 0x95BB, 0xE990, + 0x95BC, 0xE991, + 0x95BD, 0xE992, + 0x95BE, 0xE993, + 0x95BF, 0xE994, + 0x95C0, 0xE995, + 0x95C1, 0xE996, + 0x95C2, 0xE997, + 0x95C3, 0xE998, + 0x95C4, 0xE999, + 0x95C5, 0xE99A, + 0x95C6, 0xE99B, + 0x95C7, 0xE99C, + 0x95C8, 0xE99D, + 0x95C9, 0xE99E, + 0x95CA, 0xE99F, + 0x95CB, 0xE9A0, + 0x95CC, 0xEA40, + 0x95CD, 0xEA41, + 0x95CE, 0xEA42, + 0x95CF, 0xEA43, + 0x95D0, 0xEA44, + 0x95D1, 0xEA45, + 0x95D2, 0xEA46, + 0x95D3, 0xEA47, + 0x95D4, 0xEA48, + 0x95D5, 0xEA49, + 0x95D6, 0xEA4A, + 0x95D7, 0xEA4B, + 0x95D8, 0xEA4C, + 0x95D9, 0xEA4D, + 0x95DA, 0xEA4E, + 0x95DB, 0xEA4F, + 0x95DC, 0xEA50, + 0x95DD, 0xEA51, + 0x95DE, 0xEA52, + 0x95DF, 0xEA53, + 0x95E0, 0xEA54, + 0x95E1, 0xEA55, + 0x95E2, 0xEA56, + 0x95E3, 0xEA57, + 0x95E4, 0xEA58, + 0x95E5, 0xEA59, + 0x95E6, 0xEA5A, + 0x95E7, 0xEA5B, + 0x95EC, 0xEA5C, + 0x95FF, 0xEA5D, + 0x9607, 0xEA5E, + 0x9613, 0xEA5F, + 0x9618, 0xEA60, + 0x961B, 0xEA61, + 0x961E, 0xEA62, + 0x9620, 0xEA63, + 0x9623, 0xEA64, + 0x9624, 0xEA65, + 0x9625, 0xEA66, + 0x9626, 0xEA67, + 0x9627, 0xEA68, + 0x9628, 0xEA69, + 0x9629, 0xEA6A, + 0x962B, 0xEA6B, + 0x962C, 0xEA6C, + 0x962D, 0xEA6D, + 0x962F, 0xEA6E, + 0x9630, 0xEA6F, + 0x9637, 0xEA70, + 0x9638, 0xEA71, + 0x9639, 0xEA72, + 0x963A, 0xEA73, + 0x963E, 0xEA74, + 0x9641, 0xEA75, + 0x9643, 0xEA76, + 0x964A, 0xEA77, + 0x964E, 0xEA78, + 0x964F, 0xEA79, + 0x9651, 0xEA7A, + 0x9652, 0xEA7B, + 0x9653, 0xEA7C, + 0x9656, 0xEA7D, + 0x9657, 0xEA7E, + 0x9658, 0xEA80, + 0x9659, 0xEA81, + 0x965A, 0xEA82, + 0x965C, 0xEA83, + 0x965D, 0xEA84, + 0x965E, 0xEA85, + 0x9660, 0xEA86, + 0x9663, 0xEA87, + 0x9665, 0xEA88, + 0x9666, 0xEA89, + 0x966B, 0xEA8A, + 0x966D, 0xEA8B, + 0x966E, 0xEA8C, + 0x966F, 0xEA8D, + 0x9670, 0xEA8E, + 0x9671, 0xEA8F, + 0x9673, 0xEA90, + 0x9678, 0xEA91, + 0x9679, 0xEA92, + 0x967A, 0xEA93, + 0x967B, 0xEA94, + 0x967C, 0xEA95, + 0x967D, 0xEA96, + 0x967E, 0xEA97, + 0x967F, 0xEA98, + 0x9680, 0xEA99, + 0x9681, 0xEA9A, + 0x9682, 0xEA9B, + 0x9683, 0xEA9C, + 0x9684, 0xEA9D, + 0x9687, 0xEA9E, + 0x9689, 0xEA9F, + 0x968A, 0xEAA0, + 0x968C, 0xEB40, + 0x968E, 0xEB41, + 0x9691, 0xEB42, + 0x9692, 0xEB43, + 0x9693, 0xEB44, + 0x9695, 0xEB45, + 0x9696, 0xEB46, + 0x969A, 0xEB47, + 0x969B, 0xEB48, + 0x969D, 0xEB49, + 0x969E, 0xEB4A, + 0x969F, 0xEB4B, + 0x96A0, 0xEB4C, + 0x96A1, 0xEB4D, + 0x96A2, 0xEB4E, + 0x96A3, 0xEB4F, + 0x96A4, 0xEB50, + 0x96A5, 0xEB51, + 0x96A6, 0xEB52, + 0x96A8, 0xEB53, + 0x96A9, 0xEB54, + 0x96AA, 0xEB55, + 0x96AB, 0xEB56, + 0x96AC, 0xEB57, + 0x96AD, 0xEB58, + 0x96AE, 0xEB59, + 0x96AF, 0xEB5A, + 0x96B1, 0xEB5B, + 0x96B2, 0xEB5C, + 0x96B4, 0xEB5D, + 0x96B5, 0xEB5E, + 0x96B7, 0xEB5F, + 0x96B8, 0xEB60, + 0x96BA, 0xEB61, + 0x96BB, 0xEB62, + 0x96BF, 0xEB63, + 0x96C2, 0xEB64, + 0x96C3, 0xEB65, + 0x96C8, 0xEB66, + 0x96CA, 0xEB67, + 0x96CB, 0xEB68, + 0x96D0, 0xEB69, + 0x96D1, 0xEB6A, + 0x96D3, 0xEB6B, + 0x96D4, 0xEB6C, + 0x96D6, 0xEB6D, + 0x96D7, 0xEB6E, + 0x96D8, 0xEB6F, + 0x96D9, 0xEB70, + 0x96DA, 0xEB71, + 0x96DB, 0xEB72, + 0x96DC, 0xEB73, + 0x96DD, 0xEB74, + 0x96DE, 0xEB75, + 0x96DF, 0xEB76, + 0x96E1, 0xEB77, + 0x96E2, 0xEB78, + 0x96E3, 0xEB79, + 0x96E4, 0xEB7A, + 0x96E5, 0xEB7B, + 0x96E6, 0xEB7C, + 0x96E7, 0xEB7D, + 0x96EB, 0xEB7E, + 0x96EC, 0xEB80, + 0x96ED, 0xEB81, + 0x96EE, 0xEB82, + 0x96F0, 0xEB83, + 0x96F1, 0xEB84, + 0x96F2, 0xEB85, + 0x96F4, 0xEB86, + 0x96F5, 0xEB87, + 0x96F8, 0xEB88, + 0x96FA, 0xEB89, + 0x96FB, 0xEB8A, + 0x96FC, 0xEB8B, + 0x96FD, 0xEB8C, + 0x96FF, 0xEB8D, + 0x9702, 0xEB8E, + 0x9703, 0xEB8F, + 0x9705, 0xEB90, + 0x970A, 0xEB91, + 0x970B, 0xEB92, + 0x970C, 0xEB93, + 0x9710, 0xEB94, + 0x9711, 0xEB95, + 0x9712, 0xEB96, + 0x9714, 0xEB97, + 0x9715, 0xEB98, + 0x9717, 0xEB99, + 0x9718, 0xEB9A, + 0x9719, 0xEB9B, + 0x971A, 0xEB9C, + 0x971B, 0xEB9D, + 0x971D, 0xEB9E, + 0x971F, 0xEB9F, + 0x9720, 0xEBA0, + 0x9721, 0xEC40, + 0x9722, 0xEC41, + 0x9723, 0xEC42, + 0x9724, 0xEC43, + 0x9725, 0xEC44, + 0x9726, 0xEC45, + 0x9727, 0xEC46, + 0x9728, 0xEC47, + 0x9729, 0xEC48, + 0x972B, 0xEC49, + 0x972C, 0xEC4A, + 0x972E, 0xEC4B, + 0x972F, 0xEC4C, + 0x9731, 0xEC4D, + 0x9733, 0xEC4E, + 0x9734, 0xEC4F, + 0x9735, 0xEC50, + 0x9736, 0xEC51, + 0x9737, 0xEC52, + 0x973A, 0xEC53, + 0x973B, 0xEC54, + 0x973C, 0xEC55, + 0x973D, 0xEC56, + 0x973F, 0xEC57, + 0x9740, 0xEC58, + 0x9741, 0xEC59, + 0x9742, 0xEC5A, + 0x9743, 0xEC5B, + 0x9744, 0xEC5C, + 0x9745, 0xEC5D, + 0x9746, 0xEC5E, + 0x9747, 0xEC5F, + 0x9748, 0xEC60, + 0x9749, 0xEC61, + 0x974A, 0xEC62, + 0x974B, 0xEC63, + 0x974C, 0xEC64, + 0x974D, 0xEC65, + 0x974E, 0xEC66, + 0x974F, 0xEC67, + 0x9750, 0xEC68, + 0x9751, 0xEC69, + 0x9754, 0xEC6A, + 0x9755, 0xEC6B, + 0x9757, 0xEC6C, + 0x9758, 0xEC6D, + 0x975A, 0xEC6E, + 0x975C, 0xEC6F, + 0x975D, 0xEC70, + 0x975F, 0xEC71, + 0x9763, 0xEC72, + 0x9764, 0xEC73, + 0x9766, 0xEC74, + 0x9767, 0xEC75, + 0x9768, 0xEC76, + 0x976A, 0xEC77, + 0x976B, 0xEC78, + 0x976C, 0xEC79, + 0x976D, 0xEC7A, + 0x976E, 0xEC7B, + 0x976F, 0xEC7C, + 0x9770, 0xEC7D, + 0x9771, 0xEC7E, + 0x9772, 0xEC80, + 0x9775, 0xEC81, + 0x9777, 0xEC82, + 0x9778, 0xEC83, + 0x9779, 0xEC84, + 0x977A, 0xEC85, + 0x977B, 0xEC86, + 0x977D, 0xEC87, + 0x977E, 0xEC88, + 0x977F, 0xEC89, + 0x9780, 0xEC8A, + 0x9781, 0xEC8B, + 0x9782, 0xEC8C, + 0x9783, 0xEC8D, + 0x9784, 0xEC8E, + 0x9786, 0xEC8F, + 0x9787, 0xEC90, + 0x9788, 0xEC91, + 0x9789, 0xEC92, + 0x978A, 0xEC93, + 0x978C, 0xEC94, + 0x978E, 0xEC95, + 0x978F, 0xEC96, + 0x9790, 0xEC97, + 0x9793, 0xEC98, + 0x9795, 0xEC99, + 0x9796, 0xEC9A, + 0x9797, 0xEC9B, + 0x9799, 0xEC9C, + 0x979A, 0xEC9D, + 0x979B, 0xEC9E, + 0x979C, 0xEC9F, + 0x979D, 0xECA0, + 0x979E, 0xED40, + 0x979F, 0xED41, + 0x97A1, 0xED42, + 0x97A2, 0xED43, + 0x97A4, 0xED44, + 0x97A5, 0xED45, + 0x97A6, 0xED46, + 0x97A7, 0xED47, + 0x97A8, 0xED48, + 0x97A9, 0xED49, + 0x97AA, 0xED4A, + 0x97AC, 0xED4B, + 0x97AE, 0xED4C, + 0x97B0, 0xED4D, + 0x97B1, 0xED4E, + 0x97B3, 0xED4F, + 0x97B5, 0xED50, + 0x97B6, 0xED51, + 0x97B7, 0xED52, + 0x97B8, 0xED53, + 0x97B9, 0xED54, + 0x97BA, 0xED55, + 0x97BB, 0xED56, + 0x97BC, 0xED57, + 0x97BD, 0xED58, + 0x97BE, 0xED59, + 0x97BF, 0xED5A, + 0x97C0, 0xED5B, + 0x97C1, 0xED5C, + 0x97C2, 0xED5D, + 0x97C3, 0xED5E, + 0x97C4, 0xED5F, + 0x97C5, 0xED60, + 0x97C6, 0xED61, + 0x97C7, 0xED62, + 0x97C8, 0xED63, + 0x97C9, 0xED64, + 0x97CA, 0xED65, + 0x97CB, 0xED66, + 0x97CC, 0xED67, + 0x97CD, 0xED68, + 0x97CE, 0xED69, + 0x97CF, 0xED6A, + 0x97D0, 0xED6B, + 0x97D1, 0xED6C, + 0x97D2, 0xED6D, + 0x97D3, 0xED6E, + 0x97D4, 0xED6F, + 0x97D5, 0xED70, + 0x97D6, 0xED71, + 0x97D7, 0xED72, + 0x97D8, 0xED73, + 0x97D9, 0xED74, + 0x97DA, 0xED75, + 0x97DB, 0xED76, + 0x97DC, 0xED77, + 0x97DD, 0xED78, + 0x97DE, 0xED79, + 0x97DF, 0xED7A, + 0x97E0, 0xED7B, + 0x97E1, 0xED7C, + 0x97E2, 0xED7D, + 0x97E3, 0xED7E, + 0x97E4, 0xED80, + 0x97E5, 0xED81, + 0x97E8, 0xED82, + 0x97EE, 0xED83, + 0x97EF, 0xED84, + 0x97F0, 0xED85, + 0x97F1, 0xED86, + 0x97F2, 0xED87, + 0x97F4, 0xED88, + 0x97F7, 0xED89, + 0x97F8, 0xED8A, + 0x97F9, 0xED8B, + 0x97FA, 0xED8C, + 0x97FB, 0xED8D, + 0x97FC, 0xED8E, + 0x97FD, 0xED8F, + 0x97FE, 0xED90, + 0x97FF, 0xED91, + 0x9800, 0xED92, + 0x9801, 0xED93, + 0x9802, 0xED94, + 0x9803, 0xED95, + 0x9804, 0xED96, + 0x9805, 0xED97, + 0x9806, 0xED98, + 0x9807, 0xED99, + 0x9808, 0xED9A, + 0x9809, 0xED9B, + 0x980A, 0xED9C, + 0x980B, 0xED9D, + 0x980C, 0xED9E, + 0x980D, 0xED9F, + 0x980E, 0xEDA0, + 0x980F, 0xEE40, + 0x9810, 0xEE41, + 0x9811, 0xEE42, + 0x9812, 0xEE43, + 0x9813, 0xEE44, + 0x9814, 0xEE45, + 0x9815, 0xEE46, + 0x9816, 0xEE47, + 0x9817, 0xEE48, + 0x9818, 0xEE49, + 0x9819, 0xEE4A, + 0x981A, 0xEE4B, + 0x981B, 0xEE4C, + 0x981C, 0xEE4D, + 0x981D, 0xEE4E, + 0x981E, 0xEE4F, + 0x981F, 0xEE50, + 0x9820, 0xEE51, + 0x9821, 0xEE52, + 0x9822, 0xEE53, + 0x9823, 0xEE54, + 0x9824, 0xEE55, + 0x9825, 0xEE56, + 0x9826, 0xEE57, + 0x9827, 0xEE58, + 0x9828, 0xEE59, + 0x9829, 0xEE5A, + 0x982A, 0xEE5B, + 0x982B, 0xEE5C, + 0x982C, 0xEE5D, + 0x982D, 0xEE5E, + 0x982E, 0xEE5F, + 0x982F, 0xEE60, + 0x9830, 0xEE61, + 0x9831, 0xEE62, + 0x9832, 0xEE63, + 0x9833, 0xEE64, + 0x9834, 0xEE65, + 0x9835, 0xEE66, + 0x9836, 0xEE67, + 0x9837, 0xEE68, + 0x9838, 0xEE69, + 0x9839, 0xEE6A, + 0x983A, 0xEE6B, + 0x983B, 0xEE6C, + 0x983C, 0xEE6D, + 0x983D, 0xEE6E, + 0x983E, 0xEE6F, + 0x983F, 0xEE70, + 0x9840, 0xEE71, + 0x9841, 0xEE72, + 0x9842, 0xEE73, + 0x9843, 0xEE74, + 0x9844, 0xEE75, + 0x9845, 0xEE76, + 0x9846, 0xEE77, + 0x9847, 0xEE78, + 0x9848, 0xEE79, + 0x9849, 0xEE7A, + 0x984A, 0xEE7B, + 0x984B, 0xEE7C, + 0x984C, 0xEE7D, + 0x984D, 0xEE7E, + 0x984E, 0xEE80, + 0x984F, 0xEE81, + 0x9850, 0xEE82, + 0x9851, 0xEE83, + 0x9852, 0xEE84, + 0x9853, 0xEE85, + 0x9854, 0xEE86, + 0x9855, 0xEE87, + 0x9856, 0xEE88, + 0x9857, 0xEE89, + 0x9858, 0xEE8A, + 0x9859, 0xEE8B, + 0x985A, 0xEE8C, + 0x985B, 0xEE8D, + 0x985C, 0xEE8E, + 0x985D, 0xEE8F, + 0x985E, 0xEE90, + 0x985F, 0xEE91, + 0x9860, 0xEE92, + 0x9861, 0xEE93, + 0x9862, 0xEE94, + 0x9863, 0xEE95, + 0x9864, 0xEE96, + 0x9865, 0xEE97, + 0x9866, 0xEE98, + 0x9867, 0xEE99, + 0x9868, 0xEE9A, + 0x9869, 0xEE9B, + 0x986A, 0xEE9C, + 0x986B, 0xEE9D, + 0x986C, 0xEE9E, + 0x986D, 0xEE9F, + 0x986E, 0xEEA0, + 0x986F, 0xEF40, + 0x9870, 0xEF41, + 0x9871, 0xEF42, + 0x9872, 0xEF43, + 0x9873, 0xEF44, + 0x9874, 0xEF45, + 0x988B, 0xEF46, + 0x988E, 0xEF47, + 0x9892, 0xEF48, + 0x9895, 0xEF49, + 0x9899, 0xEF4A, + 0x98A3, 0xEF4B, + 0x98A8, 0xEF4C, + 0x98A9, 0xEF4D, + 0x98AA, 0xEF4E, + 0x98AB, 0xEF4F, + 0x98AC, 0xEF50, + 0x98AD, 0xEF51, + 0x98AE, 0xEF52, + 0x98AF, 0xEF53, + 0x98B0, 0xEF54, + 0x98B1, 0xEF55, + 0x98B2, 0xEF56, + 0x98B3, 0xEF57, + 0x98B4, 0xEF58, + 0x98B5, 0xEF59, + 0x98B6, 0xEF5A, + 0x98B7, 0xEF5B, + 0x98B8, 0xEF5C, + 0x98B9, 0xEF5D, + 0x98BA, 0xEF5E, + 0x98BB, 0xEF5F, + 0x98BC, 0xEF60, + 0x98BD, 0xEF61, + 0x98BE, 0xEF62, + 0x98BF, 0xEF63, + 0x98C0, 0xEF64, + 0x98C1, 0xEF65, + 0x98C2, 0xEF66, + 0x98C3, 0xEF67, + 0x98C4, 0xEF68, + 0x98C5, 0xEF69, + 0x98C6, 0xEF6A, + 0x98C7, 0xEF6B, + 0x98C8, 0xEF6C, + 0x98C9, 0xEF6D, + 0x98CA, 0xEF6E, + 0x98CB, 0xEF6F, + 0x98CC, 0xEF70, + 0x98CD, 0xEF71, + 0x98CF, 0xEF72, + 0x98D0, 0xEF73, + 0x98D4, 0xEF74, + 0x98D6, 0xEF75, + 0x98D7, 0xEF76, + 0x98DB, 0xEF77, + 0x98DC, 0xEF78, + 0x98DD, 0xEF79, + 0x98E0, 0xEF7A, + 0x98E1, 0xEF7B, + 0x98E2, 0xEF7C, + 0x98E3, 0xEF7D, + 0x98E4, 0xEF7E, + 0x98E5, 0xEF80, + 0x98E6, 0xEF81, + 0x98E9, 0xEF82, + 0x98EA, 0xEF83, + 0x98EB, 0xEF84, + 0x98EC, 0xEF85, + 0x98ED, 0xEF86, + 0x98EE, 0xEF87, + 0x98EF, 0xEF88, + 0x98F0, 0xEF89, + 0x98F1, 0xEF8A, + 0x98F2, 0xEF8B, + 0x98F3, 0xEF8C, + 0x98F4, 0xEF8D, + 0x98F5, 0xEF8E, + 0x98F6, 0xEF8F, + 0x98F7, 0xEF90, + 0x98F8, 0xEF91, + 0x98F9, 0xEF92, + 0x98FA, 0xEF93, + 0x98FB, 0xEF94, + 0x98FC, 0xEF95, + 0x98FD, 0xEF96, + 0x98FE, 0xEF97, + 0x98FF, 0xEF98, + 0x9900, 0xEF99, + 0x9901, 0xEF9A, + 0x9902, 0xEF9B, + 0x9903, 0xEF9C, + 0x9904, 0xEF9D, + 0x9905, 0xEF9E, + 0x9906, 0xEF9F, + 0x9907, 0xEFA0, + 0x9908, 0xF040, + 0x9909, 0xF041, + 0x990A, 0xF042, + 0x990B, 0xF043, + 0x990C, 0xF044, + 0x990E, 0xF045, + 0x990F, 0xF046, + 0x9911, 0xF047, + 0x9912, 0xF048, + 0x9913, 0xF049, + 0x9914, 0xF04A, + 0x9915, 0xF04B, + 0x9916, 0xF04C, + 0x9917, 0xF04D, + 0x9918, 0xF04E, + 0x9919, 0xF04F, + 0x991A, 0xF050, + 0x991B, 0xF051, + 0x991C, 0xF052, + 0x991D, 0xF053, + 0x991E, 0xF054, + 0x991F, 0xF055, + 0x9920, 0xF056, + 0x9921, 0xF057, + 0x9922, 0xF058, + 0x9923, 0xF059, + 0x9924, 0xF05A, + 0x9925, 0xF05B, + 0x9926, 0xF05C, + 0x9927, 0xF05D, + 0x9928, 0xF05E, + 0x9929, 0xF05F, + 0x992A, 0xF060, + 0x992B, 0xF061, + 0x992C, 0xF062, + 0x992D, 0xF063, + 0x992F, 0xF064, + 0x9930, 0xF065, + 0x9931, 0xF066, + 0x9932, 0xF067, + 0x9933, 0xF068, + 0x9934, 0xF069, + 0x9935, 0xF06A, + 0x9936, 0xF06B, + 0x9937, 0xF06C, + 0x9938, 0xF06D, + 0x9939, 0xF06E, + 0x993A, 0xF06F, + 0x993B, 0xF070, + 0x993C, 0xF071, + 0x993D, 0xF072, + 0x993E, 0xF073, + 0x993F, 0xF074, + 0x9940, 0xF075, + 0x9941, 0xF076, + 0x9942, 0xF077, + 0x9943, 0xF078, + 0x9944, 0xF079, + 0x9945, 0xF07A, + 0x9946, 0xF07B, + 0x9947, 0xF07C, + 0x9948, 0xF07D, + 0x9949, 0xF07E, + 0x994A, 0xF080, + 0x994B, 0xF081, + 0x994C, 0xF082, + 0x994D, 0xF083, + 0x994E, 0xF084, + 0x994F, 0xF085, + 0x9950, 0xF086, + 0x9951, 0xF087, + 0x9952, 0xF088, + 0x9953, 0xF089, + 0x9956, 0xF08A, + 0x9957, 0xF08B, + 0x9958, 0xF08C, + 0x9959, 0xF08D, + 0x995A, 0xF08E, + 0x995B, 0xF08F, + 0x995C, 0xF090, + 0x995D, 0xF091, + 0x995E, 0xF092, + 0x995F, 0xF093, + 0x9960, 0xF094, + 0x9961, 0xF095, + 0x9962, 0xF096, + 0x9964, 0xF097, + 0x9966, 0xF098, + 0x9973, 0xF099, + 0x9978, 0xF09A, + 0x9979, 0xF09B, + 0x997B, 0xF09C, + 0x997E, 0xF09D, + 0x9982, 0xF09E, + 0x9983, 0xF09F, + 0x9989, 0xF0A0, + 0x998C, 0xF140, + 0x998E, 0xF141, + 0x999A, 0xF142, + 0x999B, 0xF143, + 0x999C, 0xF144, + 0x999D, 0xF145, + 0x999E, 0xF146, + 0x999F, 0xF147, + 0x99A0, 0xF148, + 0x99A1, 0xF149, + 0x99A2, 0xF14A, + 0x99A3, 0xF14B, + 0x99A4, 0xF14C, + 0x99A6, 0xF14D, + 0x99A7, 0xF14E, + 0x99A9, 0xF14F, + 0x99AA, 0xF150, + 0x99AB, 0xF151, + 0x99AC, 0xF152, + 0x99AD, 0xF153, + 0x99AE, 0xF154, + 0x99AF, 0xF155, + 0x99B0, 0xF156, + 0x99B1, 0xF157, + 0x99B2, 0xF158, + 0x99B3, 0xF159, + 0x99B4, 0xF15A, + 0x99B5, 0xF15B, + 0x99B6, 0xF15C, + 0x99B7, 0xF15D, + 0x99B8, 0xF15E, + 0x99B9, 0xF15F, + 0x99BA, 0xF160, + 0x99BB, 0xF161, + 0x99BC, 0xF162, + 0x99BD, 0xF163, + 0x99BE, 0xF164, + 0x99BF, 0xF165, + 0x99C0, 0xF166, + 0x99C1, 0xF167, + 0x99C2, 0xF168, + 0x99C3, 0xF169, + 0x99C4, 0xF16A, + 0x99C5, 0xF16B, + 0x99C6, 0xF16C, + 0x99C7, 0xF16D, + 0x99C8, 0xF16E, + 0x99C9, 0xF16F, + 0x99CA, 0xF170, + 0x99CB, 0xF171, + 0x99CC, 0xF172, + 0x99CD, 0xF173, + 0x99CE, 0xF174, + 0x99CF, 0xF175, + 0x99D0, 0xF176, + 0x99D1, 0xF177, + 0x99D2, 0xF178, + 0x99D3, 0xF179, + 0x99D4, 0xF17A, + 0x99D5, 0xF17B, + 0x99D6, 0xF17C, + 0x99D7, 0xF17D, + 0x99D8, 0xF17E, + 0x99D9, 0xF180, + 0x99DA, 0xF181, + 0x99DB, 0xF182, + 0x99DC, 0xF183, + 0x99DD, 0xF184, + 0x99DE, 0xF185, + 0x99DF, 0xF186, + 0x99E0, 0xF187, + 0x99E1, 0xF188, + 0x99E2, 0xF189, + 0x99E3, 0xF18A, + 0x99E4, 0xF18B, + 0x99E5, 0xF18C, + 0x99E6, 0xF18D, + 0x99E7, 0xF18E, + 0x99E8, 0xF18F, + 0x99E9, 0xF190, + 0x99EA, 0xF191, + 0x99EB, 0xF192, + 0x99EC, 0xF193, + 0x99ED, 0xF194, + 0x99EE, 0xF195, + 0x99EF, 0xF196, + 0x99F0, 0xF197, + 0x99F1, 0xF198, + 0x99F2, 0xF199, + 0x99F3, 0xF19A, + 0x99F4, 0xF19B, + 0x99F5, 0xF19C, + 0x99F6, 0xF19D, + 0x99F7, 0xF19E, + 0x99F8, 0xF19F, + 0x99F9, 0xF1A0, + 0x99FA, 0xF240, + 0x99FB, 0xF241, + 0x99FC, 0xF242, + 0x99FD, 0xF243, + 0x99FE, 0xF244, + 0x99FF, 0xF245, + 0x9A00, 0xF246, + 0x9A01, 0xF247, + 0x9A02, 0xF248, + 0x9A03, 0xF249, + 0x9A04, 0xF24A, + 0x9A05, 0xF24B, + 0x9A06, 0xF24C, + 0x9A07, 0xF24D, + 0x9A08, 0xF24E, + 0x9A09, 0xF24F, + 0x9A0A, 0xF250, + 0x9A0B, 0xF251, + 0x9A0C, 0xF252, + 0x9A0D, 0xF253, + 0x9A0E, 0xF254, + 0x9A0F, 0xF255, + 0x9A10, 0xF256, + 0x9A11, 0xF257, + 0x9A12, 0xF258, + 0x9A13, 0xF259, + 0x9A14, 0xF25A, + 0x9A15, 0xF25B, + 0x9A16, 0xF25C, + 0x9A17, 0xF25D, + 0x9A18, 0xF25E, + 0x9A19, 0xF25F, + 0x9A1A, 0xF260, + 0x9A1B, 0xF261, + 0x9A1C, 0xF262, + 0x9A1D, 0xF263, + 0x9A1E, 0xF264, + 0x9A1F, 0xF265, + 0x9A20, 0xF266, + 0x9A21, 0xF267, + 0x9A22, 0xF268, + 0x9A23, 0xF269, + 0x9A24, 0xF26A, + 0x9A25, 0xF26B, + 0x9A26, 0xF26C, + 0x9A27, 0xF26D, + 0x9A28, 0xF26E, + 0x9A29, 0xF26F, + 0x9A2A, 0xF270, + 0x9A2B, 0xF271, + 0x9A2C, 0xF272, + 0x9A2D, 0xF273, + 0x9A2E, 0xF274, + 0x9A2F, 0xF275, + 0x9A30, 0xF276, + 0x9A31, 0xF277, + 0x9A32, 0xF278, + 0x9A33, 0xF279, + 0x9A34, 0xF27A, + 0x9A35, 0xF27B, + 0x9A36, 0xF27C, + 0x9A37, 0xF27D, + 0x9A38, 0xF27E, + 0x9A39, 0xF280, + 0x9A3A, 0xF281, + 0x9A3B, 0xF282, + 0x9A3C, 0xF283, + 0x9A3D, 0xF284, + 0x9A3E, 0xF285, + 0x9A3F, 0xF286, + 0x9A40, 0xF287, + 0x9A41, 0xF288, + 0x9A42, 0xF289, + 0x9A43, 0xF28A, + 0x9A44, 0xF28B, + 0x9A45, 0xF28C, + 0x9A46, 0xF28D, + 0x9A47, 0xF28E, + 0x9A48, 0xF28F, + 0x9A49, 0xF290, + 0x9A4A, 0xF291, + 0x9A4B, 0xF292, + 0x9A4C, 0xF293, + 0x9A4D, 0xF294, + 0x9A4E, 0xF295, + 0x9A4F, 0xF296, + 0x9A50, 0xF297, + 0x9A51, 0xF298, + 0x9A52, 0xF299, + 0x9A53, 0xF29A, + 0x9A54, 0xF29B, + 0x9A55, 0xF29C, + 0x9A56, 0xF29D, + 0x9A57, 0xF29E, + 0x9A58, 0xF29F, + 0x9A59, 0xF2A0, + 0x9A5A, 0xF340, + 0x9A5B, 0xF341, + 0x9A5C, 0xF342, + 0x9A5D, 0xF343, + 0x9A5E, 0xF344, + 0x9A5F, 0xF345, + 0x9A60, 0xF346, + 0x9A61, 0xF347, + 0x9A62, 0xF348, + 0x9A63, 0xF349, + 0x9A64, 0xF34A, + 0x9A65, 0xF34B, + 0x9A66, 0xF34C, + 0x9A67, 0xF34D, + 0x9A68, 0xF34E, + 0x9A69, 0xF34F, + 0x9A6A, 0xF350, + 0x9A6B, 0xF351, + 0x9A72, 0xF352, + 0x9A83, 0xF353, + 0x9A89, 0xF354, + 0x9A8D, 0xF355, + 0x9A8E, 0xF356, + 0x9A94, 0xF357, + 0x9A95, 0xF358, + 0x9A99, 0xF359, + 0x9AA6, 0xF35A, + 0x9AA9, 0xF35B, + 0x9AAA, 0xF35C, + 0x9AAB, 0xF35D, + 0x9AAC, 0xF35E, + 0x9AAD, 0xF35F, + 0x9AAE, 0xF360, + 0x9AAF, 0xF361, + 0x9AB2, 0xF362, + 0x9AB3, 0xF363, + 0x9AB4, 0xF364, + 0x9AB5, 0xF365, + 0x9AB9, 0xF366, + 0x9ABB, 0xF367, + 0x9ABD, 0xF368, + 0x9ABE, 0xF369, + 0x9ABF, 0xF36A, + 0x9AC3, 0xF36B, + 0x9AC4, 0xF36C, + 0x9AC6, 0xF36D, + 0x9AC7, 0xF36E, + 0x9AC8, 0xF36F, + 0x9AC9, 0xF370, + 0x9ACA, 0xF371, + 0x9ACD, 0xF372, + 0x9ACE, 0xF373, + 0x9ACF, 0xF374, + 0x9AD0, 0xF375, + 0x9AD2, 0xF376, + 0x9AD4, 0xF377, + 0x9AD5, 0xF378, + 0x9AD6, 0xF379, + 0x9AD7, 0xF37A, + 0x9AD9, 0xF37B, + 0x9ADA, 0xF37C, + 0x9ADB, 0xF37D, + 0x9ADC, 0xF37E, + 0x9ADD, 0xF380, + 0x9ADE, 0xF381, + 0x9AE0, 0xF382, + 0x9AE2, 0xF383, + 0x9AE3, 0xF384, + 0x9AE4, 0xF385, + 0x9AE5, 0xF386, + 0x9AE7, 0xF387, + 0x9AE8, 0xF388, + 0x9AE9, 0xF389, + 0x9AEA, 0xF38A, + 0x9AEC, 0xF38B, + 0x9AEE, 0xF38C, + 0x9AF0, 0xF38D, + 0x9AF1, 0xF38E, + 0x9AF2, 0xF38F, + 0x9AF3, 0xF390, + 0x9AF4, 0xF391, + 0x9AF5, 0xF392, + 0x9AF6, 0xF393, + 0x9AF7, 0xF394, + 0x9AF8, 0xF395, + 0x9AFA, 0xF396, + 0x9AFC, 0xF397, + 0x9AFD, 0xF398, + 0x9AFE, 0xF399, + 0x9AFF, 0xF39A, + 0x9B00, 0xF39B, + 0x9B01, 0xF39C, + 0x9B02, 0xF39D, + 0x9B04, 0xF39E, + 0x9B05, 0xF39F, + 0x9B06, 0xF3A0, + 0x9B07, 0xF440, + 0x9B09, 0xF441, + 0x9B0A, 0xF442, + 0x9B0B, 0xF443, + 0x9B0C, 0xF444, + 0x9B0D, 0xF445, + 0x9B0E, 0xF446, + 0x9B10, 0xF447, + 0x9B11, 0xF448, + 0x9B12, 0xF449, + 0x9B14, 0xF44A, + 0x9B15, 0xF44B, + 0x9B16, 0xF44C, + 0x9B17, 0xF44D, + 0x9B18, 0xF44E, + 0x9B19, 0xF44F, + 0x9B1A, 0xF450, + 0x9B1B, 0xF451, + 0x9B1C, 0xF452, + 0x9B1D, 0xF453, + 0x9B1E, 0xF454, + 0x9B20, 0xF455, + 0x9B21, 0xF456, + 0x9B22, 0xF457, + 0x9B24, 0xF458, + 0x9B25, 0xF459, + 0x9B26, 0xF45A, + 0x9B27, 0xF45B, + 0x9B28, 0xF45C, + 0x9B29, 0xF45D, + 0x9B2A, 0xF45E, + 0x9B2B, 0xF45F, + 0x9B2C, 0xF460, + 0x9B2D, 0xF461, + 0x9B2E, 0xF462, + 0x9B30, 0xF463, + 0x9B31, 0xF464, + 0x9B33, 0xF465, + 0x9B34, 0xF466, + 0x9B35, 0xF467, + 0x9B36, 0xF468, + 0x9B37, 0xF469, + 0x9B38, 0xF46A, + 0x9B39, 0xF46B, + 0x9B3A, 0xF46C, + 0x9B3D, 0xF46D, + 0x9B3E, 0xF46E, + 0x9B3F, 0xF46F, + 0x9B40, 0xF470, + 0x9B46, 0xF471, + 0x9B4A, 0xF472, + 0x9B4B, 0xF473, + 0x9B4C, 0xF474, + 0x9B4E, 0xF475, + 0x9B50, 0xF476, + 0x9B52, 0xF477, + 0x9B53, 0xF478, + 0x9B55, 0xF479, + 0x9B56, 0xF47A, + 0x9B57, 0xF47B, + 0x9B58, 0xF47C, + 0x9B59, 0xF47D, + 0x9B5A, 0xF47E, + 0x9B5B, 0xF480, + 0x9B5C, 0xF481, + 0x9B5D, 0xF482, + 0x9B5E, 0xF483, + 0x9B5F, 0xF484, + 0x9B60, 0xF485, + 0x9B61, 0xF486, + 0x9B62, 0xF487, + 0x9B63, 0xF488, + 0x9B64, 0xF489, + 0x9B65, 0xF48A, + 0x9B66, 0xF48B, + 0x9B67, 0xF48C, + 0x9B68, 0xF48D, + 0x9B69, 0xF48E, + 0x9B6A, 0xF48F, + 0x9B6B, 0xF490, + 0x9B6C, 0xF491, + 0x9B6D, 0xF492, + 0x9B6E, 0xF493, + 0x9B6F, 0xF494, + 0x9B70, 0xF495, + 0x9B71, 0xF496, + 0x9B72, 0xF497, + 0x9B73, 0xF498, + 0x9B74, 0xF499, + 0x9B75, 0xF49A, + 0x9B76, 0xF49B, + 0x9B77, 0xF49C, + 0x9B78, 0xF49D, + 0x9B79, 0xF49E, + 0x9B7A, 0xF49F, + 0x9B7B, 0xF4A0, + 0x9B7C, 0xF540, + 0x9B7D, 0xF541, + 0x9B7E, 0xF542, + 0x9B7F, 0xF543, + 0x9B80, 0xF544, + 0x9B81, 0xF545, + 0x9B82, 0xF546, + 0x9B83, 0xF547, + 0x9B84, 0xF548, + 0x9B85, 0xF549, + 0x9B86, 0xF54A, + 0x9B87, 0xF54B, + 0x9B88, 0xF54C, + 0x9B89, 0xF54D, + 0x9B8A, 0xF54E, + 0x9B8B, 0xF54F, + 0x9B8C, 0xF550, + 0x9B8D, 0xF551, + 0x9B8E, 0xF552, + 0x9B8F, 0xF553, + 0x9B90, 0xF554, + 0x9B91, 0xF555, + 0x9B92, 0xF556, + 0x9B93, 0xF557, + 0x9B94, 0xF558, + 0x9B95, 0xF559, + 0x9B96, 0xF55A, + 0x9B97, 0xF55B, + 0x9B98, 0xF55C, + 0x9B99, 0xF55D, + 0x9B9A, 0xF55E, + 0x9B9B, 0xF55F, + 0x9B9C, 0xF560, + 0x9B9D, 0xF561, + 0x9B9E, 0xF562, + 0x9B9F, 0xF563, + 0x9BA0, 0xF564, + 0x9BA1, 0xF565, + 0x9BA2, 0xF566, + 0x9BA3, 0xF567, + 0x9BA4, 0xF568, + 0x9BA5, 0xF569, + 0x9BA6, 0xF56A, + 0x9BA7, 0xF56B, + 0x9BA8, 0xF56C, + 0x9BA9, 0xF56D, + 0x9BAA, 0xF56E, + 0x9BAB, 0xF56F, + 0x9BAC, 0xF570, + 0x9BAD, 0xF571, + 0x9BAE, 0xF572, + 0x9BAF, 0xF573, + 0x9BB0, 0xF574, + 0x9BB1, 0xF575, + 0x9BB2, 0xF576, + 0x9BB3, 0xF577, + 0x9BB4, 0xF578, + 0x9BB5, 0xF579, + 0x9BB6, 0xF57A, + 0x9BB7, 0xF57B, + 0x9BB8, 0xF57C, + 0x9BB9, 0xF57D, + 0x9BBA, 0xF57E, + 0x9BBB, 0xF580, + 0x9BBC, 0xF581, + 0x9BBD, 0xF582, + 0x9BBE, 0xF583, + 0x9BBF, 0xF584, + 0x9BC0, 0xF585, + 0x9BC1, 0xF586, + 0x9BC2, 0xF587, + 0x9BC3, 0xF588, + 0x9BC4, 0xF589, + 0x9BC5, 0xF58A, + 0x9BC6, 0xF58B, + 0x9BC7, 0xF58C, + 0x9BC8, 0xF58D, + 0x9BC9, 0xF58E, + 0x9BCA, 0xF58F, + 0x9BCB, 0xF590, + 0x9BCC, 0xF591, + 0x9BCD, 0xF592, + 0x9BCE, 0xF593, + 0x9BCF, 0xF594, + 0x9BD0, 0xF595, + 0x9BD1, 0xF596, + 0x9BD2, 0xF597, + 0x9BD3, 0xF598, + 0x9BD4, 0xF599, + 0x9BD5, 0xF59A, + 0x9BD6, 0xF59B, + 0x9BD7, 0xF59C, + 0x9BD8, 0xF59D, + 0x9BD9, 0xF59E, + 0x9BDA, 0xF59F, + 0x9BDB, 0xF5A0, + 0x9BDC, 0xF640, + 0x9BDD, 0xF641, + 0x9BDE, 0xF642, + 0x9BDF, 0xF643, + 0x9BE0, 0xF644, + 0x9BE1, 0xF645, + 0x9BE2, 0xF646, + 0x9BE3, 0xF647, + 0x9BE4, 0xF648, + 0x9BE5, 0xF649, + 0x9BE6, 0xF64A, + 0x9BE7, 0xF64B, + 0x9BE8, 0xF64C, + 0x9BE9, 0xF64D, + 0x9BEA, 0xF64E, + 0x9BEB, 0xF64F, + 0x9BEC, 0xF650, + 0x9BED, 0xF651, + 0x9BEE, 0xF652, + 0x9BEF, 0xF653, + 0x9BF0, 0xF654, + 0x9BF1, 0xF655, + 0x9BF2, 0xF656, + 0x9BF3, 0xF657, + 0x9BF4, 0xF658, + 0x9BF5, 0xF659, + 0x9BF6, 0xF65A, + 0x9BF7, 0xF65B, + 0x9BF8, 0xF65C, + 0x9BF9, 0xF65D, + 0x9BFA, 0xF65E, + 0x9BFB, 0xF65F, + 0x9BFC, 0xF660, + 0x9BFD, 0xF661, + 0x9BFE, 0xF662, + 0x9BFF, 0xF663, + 0x9C00, 0xF664, + 0x9C01, 0xF665, + 0x9C02, 0xF666, + 0x9C03, 0xF667, + 0x9C04, 0xF668, + 0x9C05, 0xF669, + 0x9C06, 0xF66A, + 0x9C07, 0xF66B, + 0x9C08, 0xF66C, + 0x9C09, 0xF66D, + 0x9C0A, 0xF66E, + 0x9C0B, 0xF66F, + 0x9C0C, 0xF670, + 0x9C0D, 0xF671, + 0x9C0E, 0xF672, + 0x9C0F, 0xF673, + 0x9C10, 0xF674, + 0x9C11, 0xF675, + 0x9C12, 0xF676, + 0x9C13, 0xF677, + 0x9C14, 0xF678, + 0x9C15, 0xF679, + 0x9C16, 0xF67A, + 0x9C17, 0xF67B, + 0x9C18, 0xF67C, + 0x9C19, 0xF67D, + 0x9C1A, 0xF67E, + 0x9C1B, 0xF680, + 0x9C1C, 0xF681, + 0x9C1D, 0xF682, + 0x9C1E, 0xF683, + 0x9C1F, 0xF684, + 0x9C20, 0xF685, + 0x9C21, 0xF686, + 0x9C22, 0xF687, + 0x9C23, 0xF688, + 0x9C24, 0xF689, + 0x9C25, 0xF68A, + 0x9C26, 0xF68B, + 0x9C27, 0xF68C, + 0x9C28, 0xF68D, + 0x9C29, 0xF68E, + 0x9C2A, 0xF68F, + 0x9C2B, 0xF690, + 0x9C2C, 0xF691, + 0x9C2D, 0xF692, + 0x9C2E, 0xF693, + 0x9C2F, 0xF694, + 0x9C30, 0xF695, + 0x9C31, 0xF696, + 0x9C32, 0xF697, + 0x9C33, 0xF698, + 0x9C34, 0xF699, + 0x9C35, 0xF69A, + 0x9C36, 0xF69B, + 0x9C37, 0xF69C, + 0x9C38, 0xF69D, + 0x9C39, 0xF69E, + 0x9C3A, 0xF69F, + 0x9C3B, 0xF6A0, + 0x9C3C, 0xF740, + 0x9C3D, 0xF741, + 0x9C3E, 0xF742, + 0x9C3F, 0xF743, + 0x9C40, 0xF744, + 0x9C41, 0xF745, + 0x9C42, 0xF746, + 0x9C43, 0xF747, + 0x9C44, 0xF748, + 0x9C45, 0xF749, + 0x9C46, 0xF74A, + 0x9C47, 0xF74B, + 0x9C48, 0xF74C, + 0x9C49, 0xF74D, + 0x9C4A, 0xF74E, + 0x9C4B, 0xF74F, + 0x9C4C, 0xF750, + 0x9C4D, 0xF751, + 0x9C4E, 0xF752, + 0x9C4F, 0xF753, + 0x9C50, 0xF754, + 0x9C51, 0xF755, + 0x9C52, 0xF756, + 0x9C53, 0xF757, + 0x9C54, 0xF758, + 0x9C55, 0xF759, + 0x9C56, 0xF75A, + 0x9C57, 0xF75B, + 0x9C58, 0xF75C, + 0x9C59, 0xF75D, + 0x9C5A, 0xF75E, + 0x9C5B, 0xF75F, + 0x9C5C, 0xF760, + 0x9C5D, 0xF761, + 0x9C5E, 0xF762, + 0x9C5F, 0xF763, + 0x9C60, 0xF764, + 0x9C61, 0xF765, + 0x9C62, 0xF766, + 0x9C63, 0xF767, + 0x9C64, 0xF768, + 0x9C65, 0xF769, + 0x9C66, 0xF76A, + 0x9C67, 0xF76B, + 0x9C68, 0xF76C, + 0x9C69, 0xF76D, + 0x9C6A, 0xF76E, + 0x9C6B, 0xF76F, + 0x9C6C, 0xF770, + 0x9C6D, 0xF771, + 0x9C6E, 0xF772, + 0x9C6F, 0xF773, + 0x9C70, 0xF774, + 0x9C71, 0xF775, + 0x9C72, 0xF776, + 0x9C73, 0xF777, + 0x9C74, 0xF778, + 0x9C75, 0xF779, + 0x9C76, 0xF77A, + 0x9C77, 0xF77B, + 0x9C78, 0xF77C, + 0x9C79, 0xF77D, + 0x9C7A, 0xF77E, + 0x9C7B, 0xF780, + 0x9C7D, 0xF781, + 0x9C7E, 0xF782, + 0x9C80, 0xF783, + 0x9C83, 0xF784, + 0x9C84, 0xF785, + 0x9C89, 0xF786, + 0x9C8A, 0xF787, + 0x9C8C, 0xF788, + 0x9C8F, 0xF789, + 0x9C93, 0xF78A, + 0x9C96, 0xF78B, + 0x9C97, 0xF78C, + 0x9C98, 0xF78D, + 0x9C99, 0xF78E, + 0x9C9D, 0xF78F, + 0x9CAA, 0xF790, + 0x9CAC, 0xF791, + 0x9CAF, 0xF792, + 0x9CB9, 0xF793, + 0x9CBE, 0xF794, + 0x9CBF, 0xF795, + 0x9CC0, 0xF796, + 0x9CC1, 0xF797, + 0x9CC2, 0xF798, + 0x9CC8, 0xF799, + 0x9CC9, 0xF79A, + 0x9CD1, 0xF79B, + 0x9CD2, 0xF79C, + 0x9CDA, 0xF79D, + 0x9CDB, 0xF79E, + 0x9CE0, 0xF79F, + 0x9CE1, 0xF7A0, + 0x9CE3, 0xF840, + 0x9CE4, 0xF841, + 0x9CE5, 0xF842, + 0x9CE6, 0xF843, + 0x9CE7, 0xF844, + 0x9CE8, 0xF845, + 0x9CE9, 0xF846, + 0x9CEA, 0xF847, + 0x9CEB, 0xF848, + 0x9CEC, 0xF849, + 0x9CED, 0xF84A, + 0x9CEE, 0xF84B, + 0x9CEF, 0xF84C, + 0x9CF0, 0xF84D, + 0x9CF1, 0xF84E, + 0x9CF2, 0xF84F, + 0x9CF3, 0xF850, + 0x9CF4, 0xF851, + 0x9CF5, 0xF852, + 0x9CF6, 0xF853, + 0x9CF7, 0xF854, + 0x9CF8, 0xF855, + 0x9CF9, 0xF856, + 0x9CFA, 0xF857, + 0x9CFB, 0xF858, + 0x9CFC, 0xF859, + 0x9CFD, 0xF85A, + 0x9CFE, 0xF85B, + 0x9CFF, 0xF85C, + 0x9D00, 0xF85D, + 0x9D01, 0xF85E, + 0x9D02, 0xF85F, + 0x9D03, 0xF860, + 0x9D04, 0xF861, + 0x9D05, 0xF862, + 0x9D06, 0xF863, + 0x9D07, 0xF864, + 0x9D08, 0xF865, + 0x9D09, 0xF866, + 0x9D0A, 0xF867, + 0x9D0B, 0xF868, + 0x9D0C, 0xF869, + 0x9D0D, 0xF86A, + 0x9D0E, 0xF86B, + 0x9D0F, 0xF86C, + 0x9D10, 0xF86D, + 0x9D11, 0xF86E, + 0x9D12, 0xF86F, + 0x9D13, 0xF870, + 0x9D14, 0xF871, + 0x9D15, 0xF872, + 0x9D16, 0xF873, + 0x9D17, 0xF874, + 0x9D18, 0xF875, + 0x9D19, 0xF876, + 0x9D1A, 0xF877, + 0x9D1B, 0xF878, + 0x9D1C, 0xF879, + 0x9D1D, 0xF87A, + 0x9D1E, 0xF87B, + 0x9D1F, 0xF87C, + 0x9D20, 0xF87D, + 0x9D21, 0xF87E, + 0x9D22, 0xF880, + 0x9D23, 0xF881, + 0x9D24, 0xF882, + 0x9D25, 0xF883, + 0x9D26, 0xF884, + 0x9D27, 0xF885, + 0x9D28, 0xF886, + 0x9D29, 0xF887, + 0x9D2A, 0xF888, + 0x9D2B, 0xF889, + 0x9D2C, 0xF88A, + 0x9D2D, 0xF88B, + 0x9D2E, 0xF88C, + 0x9D2F, 0xF88D, + 0x9D30, 0xF88E, + 0x9D31, 0xF88F, + 0x9D32, 0xF890, + 0x9D33, 0xF891, + 0x9D34, 0xF892, + 0x9D35, 0xF893, + 0x9D36, 0xF894, + 0x9D37, 0xF895, + 0x9D38, 0xF896, + 0x9D39, 0xF897, + 0x9D3A, 0xF898, + 0x9D3B, 0xF899, + 0x9D3C, 0xF89A, + 0x9D3D, 0xF89B, + 0x9D3E, 0xF89C, + 0x9D3F, 0xF89D, + 0x9D40, 0xF89E, + 0x9D41, 0xF89F, + 0x9D42, 0xF8A0, + 0x9D43, 0xF940, + 0x9D44, 0xF941, + 0x9D45, 0xF942, + 0x9D46, 0xF943, + 0x9D47, 0xF944, + 0x9D48, 0xF945, + 0x9D49, 0xF946, + 0x9D4A, 0xF947, + 0x9D4B, 0xF948, + 0x9D4C, 0xF949, + 0x9D4D, 0xF94A, + 0x9D4E, 0xF94B, + 0x9D4F, 0xF94C, + 0x9D50, 0xF94D, + 0x9D51, 0xF94E, + 0x9D52, 0xF94F, + 0x9D53, 0xF950, + 0x9D54, 0xF951, + 0x9D55, 0xF952, + 0x9D56, 0xF953, + 0x9D57, 0xF954, + 0x9D58, 0xF955, + 0x9D59, 0xF956, + 0x9D5A, 0xF957, + 0x9D5B, 0xF958, + 0x9D5C, 0xF959, + 0x9D5D, 0xF95A, + 0x9D5E, 0xF95B, + 0x9D5F, 0xF95C, + 0x9D60, 0xF95D, + 0x9D61, 0xF95E, + 0x9D62, 0xF95F, + 0x9D63, 0xF960, + 0x9D64, 0xF961, + 0x9D65, 0xF962, + 0x9D66, 0xF963, + 0x9D67, 0xF964, + 0x9D68, 0xF965, + 0x9D69, 0xF966, + 0x9D6A, 0xF967, + 0x9D6B, 0xF968, + 0x9D6C, 0xF969, + 0x9D6D, 0xF96A, + 0x9D6E, 0xF96B, + 0x9D6F, 0xF96C, + 0x9D70, 0xF96D, + 0x9D71, 0xF96E, + 0x9D72, 0xF96F, + 0x9D73, 0xF970, + 0x9D74, 0xF971, + 0x9D75, 0xF972, + 0x9D76, 0xF973, + 0x9D77, 0xF974, + 0x9D78, 0xF975, + 0x9D79, 0xF976, + 0x9D7A, 0xF977, + 0x9D7B, 0xF978, + 0x9D7C, 0xF979, + 0x9D7D, 0xF97A, + 0x9D7E, 0xF97B, + 0x9D7F, 0xF97C, + 0x9D80, 0xF97D, + 0x9D81, 0xF97E, + 0x9D82, 0xF980, + 0x9D83, 0xF981, + 0x9D84, 0xF982, + 0x9D85, 0xF983, + 0x9D86, 0xF984, + 0x9D87, 0xF985, + 0x9D88, 0xF986, + 0x9D89, 0xF987, + 0x9D8A, 0xF988, + 0x9D8B, 0xF989, + 0x9D8C, 0xF98A, + 0x9D8D, 0xF98B, + 0x9D8E, 0xF98C, + 0x9D8F, 0xF98D, + 0x9D90, 0xF98E, + 0x9D91, 0xF98F, + 0x9D92, 0xF990, + 0x9D93, 0xF991, + 0x9D94, 0xF992, + 0x9D95, 0xF993, + 0x9D96, 0xF994, + 0x9D97, 0xF995, + 0x9D98, 0xF996, + 0x9D99, 0xF997, + 0x9D9A, 0xF998, + 0x9D9B, 0xF999, + 0x9D9C, 0xF99A, + 0x9D9D, 0xF99B, + 0x9D9E, 0xF99C, + 0x9D9F, 0xF99D, + 0x9DA0, 0xF99E, + 0x9DA1, 0xF99F, + 0x9DA2, 0xF9A0, + 0x9DA3, 0xFA40, + 0x9DA4, 0xFA41, + 0x9DA5, 0xFA42, + 0x9DA6, 0xFA43, + 0x9DA7, 0xFA44, + 0x9DA8, 0xFA45, + 0x9DA9, 0xFA46, + 0x9DAA, 0xFA47, + 0x9DAB, 0xFA48, + 0x9DAC, 0xFA49, + 0x9DAD, 0xFA4A, + 0x9DAE, 0xFA4B, + 0x9DAF, 0xFA4C, + 0x9DB0, 0xFA4D, + 0x9DB1, 0xFA4E, + 0x9DB2, 0xFA4F, + 0x9DB3, 0xFA50, + 0x9DB4, 0xFA51, + 0x9DB5, 0xFA52, + 0x9DB6, 0xFA53, + 0x9DB7, 0xFA54, + 0x9DB8, 0xFA55, + 0x9DB9, 0xFA56, + 0x9DBA, 0xFA57, + 0x9DBB, 0xFA58, + 0x9DBC, 0xFA59, + 0x9DBD, 0xFA5A, + 0x9DBE, 0xFA5B, + 0x9DBF, 0xFA5C, + 0x9DC0, 0xFA5D, + 0x9DC1, 0xFA5E, + 0x9DC2, 0xFA5F, + 0x9DC3, 0xFA60, + 0x9DC4, 0xFA61, + 0x9DC5, 0xFA62, + 0x9DC6, 0xFA63, + 0x9DC7, 0xFA64, + 0x9DC8, 0xFA65, + 0x9DC9, 0xFA66, + 0x9DCA, 0xFA67, + 0x9DCB, 0xFA68, + 0x9DCC, 0xFA69, + 0x9DCD, 0xFA6A, + 0x9DCE, 0xFA6B, + 0x9DCF, 0xFA6C, + 0x9DD0, 0xFA6D, + 0x9DD1, 0xFA6E, + 0x9DD2, 0xFA6F, + 0x9DD3, 0xFA70, + 0x9DD4, 0xFA71, + 0x9DD5, 0xFA72, + 0x9DD6, 0xFA73, + 0x9DD7, 0xFA74, + 0x9DD8, 0xFA75, + 0x9DD9, 0xFA76, + 0x9DDA, 0xFA77, + 0x9DDB, 0xFA78, + 0x9DDC, 0xFA79, + 0x9DDD, 0xFA7A, + 0x9DDE, 0xFA7B, + 0x9DDF, 0xFA7C, + 0x9DE0, 0xFA7D, + 0x9DE1, 0xFA7E, + 0x9DE2, 0xFA80, + 0x9DE3, 0xFA81, + 0x9DE4, 0xFA82, + 0x9DE5, 0xFA83, + 0x9DE6, 0xFA84, + 0x9DE7, 0xFA85, + 0x9DE8, 0xFA86, + 0x9DE9, 0xFA87, + 0x9DEA, 0xFA88, + 0x9DEB, 0xFA89, + 0x9DEC, 0xFA8A, + 0x9DED, 0xFA8B, + 0x9DEE, 0xFA8C, + 0x9DEF, 0xFA8D, + 0x9DF0, 0xFA8E, + 0x9DF1, 0xFA8F, + 0x9DF2, 0xFA90, + 0x9DF3, 0xFA91, + 0x9DF4, 0xFA92, + 0x9DF5, 0xFA93, + 0x9DF6, 0xFA94, + 0x9DF7, 0xFA95, + 0x9DF8, 0xFA96, + 0x9DF9, 0xFA97, + 0x9DFA, 0xFA98, + 0x9DFB, 0xFA99, + 0x9DFC, 0xFA9A, + 0x9DFD, 0xFA9B, + 0x9DFE, 0xFA9C, + 0x9DFF, 0xFA9D, + 0x9E00, 0xFA9E, + 0x9E01, 0xFA9F, + 0x9E02, 0xFAA0, + 0x9E03, 0xFB40, + 0x9E04, 0xFB41, + 0x9E05, 0xFB42, + 0x9E06, 0xFB43, + 0x9E07, 0xFB44, + 0x9E08, 0xFB45, + 0x9E09, 0xFB46, + 0x9E0A, 0xFB47, + 0x9E0B, 0xFB48, + 0x9E0C, 0xFB49, + 0x9E0D, 0xFB4A, + 0x9E0E, 0xFB4B, + 0x9E0F, 0xFB4C, + 0x9E10, 0xFB4D, + 0x9E11, 0xFB4E, + 0x9E12, 0xFB4F, + 0x9E13, 0xFB50, + 0x9E14, 0xFB51, + 0x9E15, 0xFB52, + 0x9E16, 0xFB53, + 0x9E17, 0xFB54, + 0x9E18, 0xFB55, + 0x9E19, 0xFB56, + 0x9E1A, 0xFB57, + 0x9E1B, 0xFB58, + 0x9E1C, 0xFB59, + 0x9E1D, 0xFB5A, + 0x9E1E, 0xFB5B, + 0x9E24, 0xFB5C, + 0x9E27, 0xFB5D, + 0x9E2E, 0xFB5E, + 0x9E30, 0xFB5F, + 0x9E34, 0xFB60, + 0x9E3B, 0xFB61, + 0x9E3C, 0xFB62, + 0x9E40, 0xFB63, + 0x9E4D, 0xFB64, + 0x9E50, 0xFB65, + 0x9E52, 0xFB66, + 0x9E53, 0xFB67, + 0x9E54, 0xFB68, + 0x9E56, 0xFB69, + 0x9E59, 0xFB6A, + 0x9E5D, 0xFB6B, + 0x9E5F, 0xFB6C, + 0x9E60, 0xFB6D, + 0x9E61, 0xFB6E, + 0x9E62, 0xFB6F, + 0x9E65, 0xFB70, + 0x9E6E, 0xFB71, + 0x9E6F, 0xFB72, + 0x9E72, 0xFB73, + 0x9E74, 0xFB74, + 0x9E75, 0xFB75, + 0x9E76, 0xFB76, + 0x9E77, 0xFB77, + 0x9E78, 0xFB78, + 0x9E79, 0xFB79, + 0x9E7A, 0xFB7A, + 0x9E7B, 0xFB7B, + 0x9E7C, 0xFB7C, + 0x9E7D, 0xFB7D, + 0x9E80, 0xFB7E, + 0x9E81, 0xFB80, + 0x9E83, 0xFB81, + 0x9E84, 0xFB82, + 0x9E85, 0xFB83, + 0x9E86, 0xFB84, + 0x9E89, 0xFB85, + 0x9E8A, 0xFB86, + 0x9E8C, 0xFB87, + 0x9E8D, 0xFB88, + 0x9E8E, 0xFB89, + 0x9E8F, 0xFB8A, + 0x9E90, 0xFB8B, + 0x9E91, 0xFB8C, + 0x9E94, 0xFB8D, + 0x9E95, 0xFB8E, + 0x9E96, 0xFB8F, + 0x9E97, 0xFB90, + 0x9E98, 0xFB91, + 0x9E99, 0xFB92, + 0x9E9A, 0xFB93, + 0x9E9B, 0xFB94, + 0x9E9C, 0xFB95, + 0x9E9E, 0xFB96, + 0x9EA0, 0xFB97, + 0x9EA1, 0xFB98, + 0x9EA2, 0xFB99, + 0x9EA3, 0xFB9A, + 0x9EA4, 0xFB9B, + 0x9EA5, 0xFB9C, + 0x9EA7, 0xFB9D, + 0x9EA8, 0xFB9E, + 0x9EA9, 0xFB9F, + 0x9EAA, 0xFBA0, + 0x9EAB, 0xFC40, + 0x9EAC, 0xFC41, + 0x9EAD, 0xFC42, + 0x9EAE, 0xFC43, + 0x9EAF, 0xFC44, + 0x9EB0, 0xFC45, + 0x9EB1, 0xFC46, + 0x9EB2, 0xFC47, + 0x9EB3, 0xFC48, + 0x9EB5, 0xFC49, + 0x9EB6, 0xFC4A, + 0x9EB7, 0xFC4B, + 0x9EB9, 0xFC4C, + 0x9EBA, 0xFC4D, + 0x9EBC, 0xFC4E, + 0x9EBF, 0xFC4F, + 0x9EC0, 0xFC50, + 0x9EC1, 0xFC51, + 0x9EC2, 0xFC52, + 0x9EC3, 0xFC53, + 0x9EC5, 0xFC54, + 0x9EC6, 0xFC55, + 0x9EC7, 0xFC56, + 0x9EC8, 0xFC57, + 0x9ECA, 0xFC58, + 0x9ECB, 0xFC59, + 0x9ECC, 0xFC5A, + 0x9ED0, 0xFC5B, + 0x9ED2, 0xFC5C, + 0x9ED3, 0xFC5D, + 0x9ED5, 0xFC5E, + 0x9ED6, 0xFC5F, + 0x9ED7, 0xFC60, + 0x9ED9, 0xFC61, + 0x9EDA, 0xFC62, + 0x9EDE, 0xFC63, + 0x9EE1, 0xFC64, + 0x9EE3, 0xFC65, + 0x9EE4, 0xFC66, + 0x9EE6, 0xFC67, + 0x9EE8, 0xFC68, + 0x9EEB, 0xFC69, + 0x9EEC, 0xFC6A, + 0x9EED, 0xFC6B, + 0x9EEE, 0xFC6C, + 0x9EF0, 0xFC6D, + 0x9EF1, 0xFC6E, + 0x9EF2, 0xFC6F, + 0x9EF3, 0xFC70, + 0x9EF4, 0xFC71, + 0x9EF5, 0xFC72, + 0x9EF6, 0xFC73, + 0x9EF7, 0xFC74, + 0x9EF8, 0xFC75, + 0x9EFA, 0xFC76, + 0x9EFD, 0xFC77, + 0x9EFF, 0xFC78, + 0x9F00, 0xFC79, + 0x9F01, 0xFC7A, + 0x9F02, 0xFC7B, + 0x9F03, 0xFC7C, + 0x9F04, 0xFC7D, + 0x9F05, 0xFC7E, + 0x9F06, 0xFC80, + 0x9F07, 0xFC81, + 0x9F08, 0xFC82, + 0x9F09, 0xFC83, + 0x9F0A, 0xFC84, + 0x9F0C, 0xFC85, + 0x9F0F, 0xFC86, + 0x9F11, 0xFC87, + 0x9F12, 0xFC88, + 0x9F14, 0xFC89, + 0x9F15, 0xFC8A, + 0x9F16, 0xFC8B, + 0x9F18, 0xFC8C, + 0x9F1A, 0xFC8D, + 0x9F1B, 0xFC8E, + 0x9F1C, 0xFC8F, + 0x9F1D, 0xFC90, + 0x9F1E, 0xFC91, + 0x9F1F, 0xFC92, + 0x9F21, 0xFC93, + 0x9F23, 0xFC94, + 0x9F24, 0xFC95, + 0x9F25, 0xFC96, + 0x9F26, 0xFC97, + 0x9F27, 0xFC98, + 0x9F28, 0xFC99, + 0x9F29, 0xFC9A, + 0x9F2A, 0xFC9B, + 0x9F2B, 0xFC9C, + 0x9F2D, 0xFC9D, + 0x9F2E, 0xFC9E, + 0x9F30, 0xFC9F, + 0x9F31, 0xFCA0, + 0x9F32, 0xFD40, + 0x9F33, 0xFD41, + 0x9F34, 0xFD42, + 0x9F35, 0xFD43, + 0x9F36, 0xFD44, + 0x9F38, 0xFD45, + 0x9F3A, 0xFD46, + 0x9F3C, 0xFD47, + 0x9F3F, 0xFD48, + 0x9F40, 0xFD49, + 0x9F41, 0xFD4A, + 0x9F42, 0xFD4B, + 0x9F43, 0xFD4C, + 0x9F45, 0xFD4D, + 0x9F46, 0xFD4E, + 0x9F47, 0xFD4F, + 0x9F48, 0xFD50, + 0x9F49, 0xFD51, + 0x9F4A, 0xFD52, + 0x9F4B, 0xFD53, + 0x9F4C, 0xFD54, + 0x9F4D, 0xFD55, + 0x9F4E, 0xFD56, + 0x9F4F, 0xFD57, + 0x9F52, 0xFD58, + 0x9F53, 0xFD59, + 0x9F54, 0xFD5A, + 0x9F55, 0xFD5B, + 0x9F56, 0xFD5C, + 0x9F57, 0xFD5D, + 0x9F58, 0xFD5E, + 0x9F59, 0xFD5F, + 0x9F5A, 0xFD60, + 0x9F5B, 0xFD61, + 0x9F5C, 0xFD62, + 0x9F5D, 0xFD63, + 0x9F5E, 0xFD64, + 0x9F5F, 0xFD65, + 0x9F60, 0xFD66, + 0x9F61, 0xFD67, + 0x9F62, 0xFD68, + 0x9F63, 0xFD69, + 0x9F64, 0xFD6A, + 0x9F65, 0xFD6B, + 0x9F66, 0xFD6C, + 0x9F67, 0xFD6D, + 0x9F68, 0xFD6E, + 0x9F69, 0xFD6F, + 0x9F6A, 0xFD70, + 0x9F6B, 0xFD71, + 0x9F6C, 0xFD72, + 0x9F6D, 0xFD73, + 0x9F6E, 0xFD74, + 0x9F6F, 0xFD75, + 0x9F70, 0xFD76, + 0x9F71, 0xFD77, + 0x9F72, 0xFD78, + 0x9F73, 0xFD79, + 0x9F74, 0xFD7A, + 0x9F75, 0xFD7B, + 0x9F76, 0xFD7C, + 0x9F77, 0xFD7D, + 0x9F78, 0xFD7E, + 0x9F79, 0xFD80, + 0x9F7A, 0xFD81, + 0x9F7B, 0xFD82, + 0x9F7C, 0xFD83, + 0x9F7D, 0xFD84, + 0x9F7E, 0xFD85, + 0x9F81, 0xFD86, + 0x9F82, 0xFD87, + 0x9F8D, 0xFD88, + 0x9F8E, 0xFD89, + 0x9F8F, 0xFD8A, + 0x9F90, 0xFD8B, + 0x9F91, 0xFD8C, + 0x9F92, 0xFD8D, + 0x9F93, 0xFD8E, + 0x9F94, 0xFD8F, + 0x9F95, 0xFD90, + 0x9F96, 0xFD91, + 0x9F97, 0xFD92, + 0x9F98, 0xFD93, + 0x9F9C, 0xFD94, + 0x9F9D, 0xFD95, + 0x9F9E, 0xFD96, + 0x9FA1, 0xFD97, + 0x9FA2, 0xFD98, + 0x9FA3, 0xFD99, + 0x9FA4, 0xFD9A, + 0x9FA5, 0xFD9B, + 0xE000, 0xAAA1, + 0xE001, 0xAAA2, + 0xE002, 0xAAA3, + 0xE003, 0xAAA4, + 0xE004, 0xAAA5, + 0xE005, 0xAAA6, + 0xE006, 0xAAA7, + 0xE007, 0xAAA8, + 0xE008, 0xAAA9, + 0xE009, 0xAAAA, + 0xE00A, 0xAAAB, + 0xE00B, 0xAAAC, + 0xE00C, 0xAAAD, + 0xE00D, 0xAAAE, + 0xE00E, 0xAAAF, + 0xE00F, 0xAAB0, + 0xE010, 0xAAB1, + 0xE011, 0xAAB2, + 0xE012, 0xAAB3, + 0xE013, 0xAAB4, + 0xE014, 0xAAB5, + 0xE015, 0xAAB6, + 0xE016, 0xAAB7, + 0xE017, 0xAAB8, + 0xE018, 0xAAB9, + 0xE019, 0xAABA, + 0xE01A, 0xAABB, + 0xE01B, 0xAABC, + 0xE01C, 0xAABD, + 0xE01D, 0xAABE, + 0xE01E, 0xAABF, + 0xE01F, 0xAAC0, + 0xE020, 0xAAC1, + 0xE021, 0xAAC2, + 0xE022, 0xAAC3, + 0xE023, 0xAAC4, + 0xE024, 0xAAC5, + 0xE025, 0xAAC6, + 0xE026, 0xAAC7, + 0xE027, 0xAAC8, + 0xE028, 0xAAC9, + 0xE029, 0xAACA, + 0xE02A, 0xAACB, + 0xE02B, 0xAACC, + 0xE02C, 0xAACD, + 0xE02D, 0xAACE, + 0xE02E, 0xAACF, + 0xE02F, 0xAAD0, + 0xE030, 0xAAD1, + 0xE031, 0xAAD2, + 0xE032, 0xAAD3, + 0xE033, 0xAAD4, + 0xE034, 0xAAD5, + 0xE035, 0xAAD6, + 0xE036, 0xAAD7, + 0xE037, 0xAAD8, + 0xE038, 0xAAD9, + 0xE039, 0xAADA, + 0xE03A, 0xAADB, + 0xE03B, 0xAADC, + 0xE03C, 0xAADD, + 0xE03D, 0xAADE, + 0xE03E, 0xAADF, + 0xE03F, 0xAAE0, + 0xE040, 0xAAE1, + 0xE041, 0xAAE2, + 0xE042, 0xAAE3, + 0xE043, 0xAAE4, + 0xE044, 0xAAE5, + 0xE045, 0xAAE6, + 0xE046, 0xAAE7, + 0xE047, 0xAAE8, + 0xE048, 0xAAE9, + 0xE049, 0xAAEA, + 0xE04A, 0xAAEB, + 0xE04B, 0xAAEC, + 0xE04C, 0xAAED, + 0xE04D, 0xAAEE, + 0xE04E, 0xAAEF, + 0xE04F, 0xAAF0, + 0xE050, 0xAAF1, + 0xE051, 0xAAF2, + 0xE052, 0xAAF3, + 0xE053, 0xAAF4, + 0xE054, 0xAAF5, + 0xE055, 0xAAF6, + 0xE056, 0xAAF7, + 0xE057, 0xAAF8, + 0xE058, 0xAAF9, + 0xE059, 0xAAFA, + 0xE05A, 0xAAFB, + 0xE05B, 0xAAFC, + 0xE05C, 0xAAFD, + 0xE05D, 0xAAFE, + 0xE05E, 0xABA1, + 0xE05F, 0xABA2, + 0xE060, 0xABA3, + 0xE061, 0xABA4, + 0xE062, 0xABA5, + 0xE063, 0xABA6, + 0xE064, 0xABA7, + 0xE065, 0xABA8, + 0xE066, 0xABA9, + 0xE067, 0xABAA, + 0xE068, 0xABAB, + 0xE069, 0xABAC, + 0xE06A, 0xABAD, + 0xE06B, 0xABAE, + 0xE06C, 0xABAF, + 0xE06D, 0xABB0, + 0xE06E, 0xABB1, + 0xE06F, 0xABB2, + 0xE070, 0xABB3, + 0xE071, 0xABB4, + 0xE072, 0xABB5, + 0xE073, 0xABB6, + 0xE074, 0xABB7, + 0xE075, 0xABB8, + 0xE076, 0xABB9, + 0xE077, 0xABBA, + 0xE078, 0xABBB, + 0xE079, 0xABBC, + 0xE07A, 0xABBD, + 0xE07B, 0xABBE, + 0xE07C, 0xABBF, + 0xE07D, 0xABC0, + 0xE07E, 0xABC1, + 0xE07F, 0xABC2, + 0xE080, 0xABC3, + 0xE081, 0xABC4, + 0xE082, 0xABC5, + 0xE083, 0xABC6, + 0xE084, 0xABC7, + 0xE085, 0xABC8, + 0xE086, 0xABC9, + 0xE087, 0xABCA, + 0xE088, 0xABCB, + 0xE089, 0xABCC, + 0xE08A, 0xABCD, + 0xE08B, 0xABCE, + 0xE08C, 0xABCF, + 0xE08D, 0xABD0, + 0xE08E, 0xABD1, + 0xE08F, 0xABD2, + 0xE090, 0xABD3, + 0xE091, 0xABD4, + 0xE092, 0xABD5, + 0xE093, 0xABD6, + 0xE094, 0xABD7, + 0xE095, 0xABD8, + 0xE096, 0xABD9, + 0xE097, 0xABDA, + 0xE098, 0xABDB, + 0xE099, 0xABDC, + 0xE09A, 0xABDD, + 0xE09B, 0xABDE, + 0xE09C, 0xABDF, + 0xE09D, 0xABE0, + 0xE09E, 0xABE1, + 0xE09F, 0xABE2, + 0xE0A0, 0xABE3, + 0xE0A1, 0xABE4, + 0xE0A2, 0xABE5, + 0xE0A3, 0xABE6, + 0xE0A4, 0xABE7, + 0xE0A5, 0xABE8, + 0xE0A6, 0xABE9, + 0xE0A7, 0xABEA, + 0xE0A8, 0xABEB, + 0xE0A9, 0xABEC, + 0xE0AA, 0xABED, + 0xE0AB, 0xABEE, + 0xE0AC, 0xABEF, + 0xE0AD, 0xABF0, + 0xE0AE, 0xABF1, + 0xE0AF, 0xABF2, + 0xE0B0, 0xABF3, + 0xE0B1, 0xABF4, + 0xE0B2, 0xABF5, + 0xE0B3, 0xABF6, + 0xE0B4, 0xABF7, + 0xE0B5, 0xABF8, + 0xE0B6, 0xABF9, + 0xE0B7, 0xABFA, + 0xE0B8, 0xABFB, + 0xE0B9, 0xABFC, + 0xE0BA, 0xABFD, + 0xE0BB, 0xABFE, + 0xE0BC, 0xACA1, + 0xE0BD, 0xACA2, + 0xE0BE, 0xACA3, + 0xE0BF, 0xACA4, + 0xE0C0, 0xACA5, + 0xE0C1, 0xACA6, + 0xE0C2, 0xACA7, + 0xE0C3, 0xACA8, + 0xE0C4, 0xACA9, + 0xE0C5, 0xACAA, + 0xE0C6, 0xACAB, + 0xE0C7, 0xACAC, + 0xE0C8, 0xACAD, + 0xE0C9, 0xACAE, + 0xE0CA, 0xACAF, + 0xE0CB, 0xACB0, + 0xE0CC, 0xACB1, + 0xE0CD, 0xACB2, + 0xE0CE, 0xACB3, + 0xE0CF, 0xACB4, + 0xE0D0, 0xACB5, + 0xE0D1, 0xACB6, + 0xE0D2, 0xACB7, + 0xE0D3, 0xACB8, + 0xE0D4, 0xACB9, + 0xE0D5, 0xACBA, + 0xE0D6, 0xACBB, + 0xE0D7, 0xACBC, + 0xE0D8, 0xACBD, + 0xE0D9, 0xACBE, + 0xE0DA, 0xACBF, + 0xE0DB, 0xACC0, + 0xE0DC, 0xACC1, + 0xE0DD, 0xACC2, + 0xE0DE, 0xACC3, + 0xE0DF, 0xACC4, + 0xE0E0, 0xACC5, + 0xE0E1, 0xACC6, + 0xE0E2, 0xACC7, + 0xE0E3, 0xACC8, + 0xE0E4, 0xACC9, + 0xE0E5, 0xACCA, + 0xE0E6, 0xACCB, + 0xE0E7, 0xACCC, + 0xE0E8, 0xACCD, + 0xE0E9, 0xACCE, + 0xE0EA, 0xACCF, + 0xE0EB, 0xACD0, + 0xE0EC, 0xACD1, + 0xE0ED, 0xACD2, + 0xE0EE, 0xACD3, + 0xE0EF, 0xACD4, + 0xE0F0, 0xACD5, + 0xE0F1, 0xACD6, + 0xE0F2, 0xACD7, + 0xE0F3, 0xACD8, + 0xE0F4, 0xACD9, + 0xE0F5, 0xACDA, + 0xE0F6, 0xACDB, + 0xE0F7, 0xACDC, + 0xE0F8, 0xACDD, + 0xE0F9, 0xACDE, + 0xE0FA, 0xACDF, + 0xE0FB, 0xACE0, + 0xE0FC, 0xACE1, + 0xE0FD, 0xACE2, + 0xE0FE, 0xACE3, + 0xE0FF, 0xACE4, + 0xE100, 0xACE5, + 0xE101, 0xACE6, + 0xE102, 0xACE7, + 0xE103, 0xACE8, + 0xE104, 0xACE9, + 0xE105, 0xACEA, + 0xE106, 0xACEB, + 0xE107, 0xACEC, + 0xE108, 0xACED, + 0xE109, 0xACEE, + 0xE10A, 0xACEF, + 0xE10B, 0xACF0, + 0xE10C, 0xACF1, + 0xE10D, 0xACF2, + 0xE10E, 0xACF3, + 0xE10F, 0xACF4, + 0xE110, 0xACF5, + 0xE111, 0xACF6, + 0xE112, 0xACF7, + 0xE113, 0xACF8, + 0xE114, 0xACF9, + 0xE115, 0xACFA, + 0xE116, 0xACFB, + 0xE117, 0xACFC, + 0xE118, 0xACFD, + 0xE119, 0xACFE, + 0xE11A, 0xADA1, + 0xE11B, 0xADA2, + 0xE11C, 0xADA3, + 0xE11D, 0xADA4, + 0xE11E, 0xADA5, + 0xE11F, 0xADA6, + 0xE120, 0xADA7, + 0xE121, 0xADA8, + 0xE122, 0xADA9, + 0xE123, 0xADAA, + 0xE124, 0xADAB, + 0xE125, 0xADAC, + 0xE126, 0xADAD, + 0xE127, 0xADAE, + 0xE128, 0xADAF, + 0xE129, 0xADB0, + 0xE12A, 0xADB1, + 0xE12B, 0xADB2, + 0xE12C, 0xADB3, + 0xE12D, 0xADB4, + 0xE12E, 0xADB5, + 0xE12F, 0xADB6, + 0xE130, 0xADB7, + 0xE131, 0xADB8, + 0xE132, 0xADB9, + 0xE133, 0xADBA, + 0xE134, 0xADBB, + 0xE135, 0xADBC, + 0xE136, 0xADBD, + 0xE137, 0xADBE, + 0xE138, 0xADBF, + 0xE139, 0xADC0, + 0xE13A, 0xADC1, + 0xE13B, 0xADC2, + 0xE13C, 0xADC3, + 0xE13D, 0xADC4, + 0xE13E, 0xADC5, + 0xE13F, 0xADC6, + 0xE140, 0xADC7, + 0xE141, 0xADC8, + 0xE142, 0xADC9, + 0xE143, 0xADCA, + 0xE144, 0xADCB, + 0xE145, 0xADCC, + 0xE146, 0xADCD, + 0xE147, 0xADCE, + 0xE148, 0xADCF, + 0xE149, 0xADD0, + 0xE14A, 0xADD1, + 0xE14B, 0xADD2, + 0xE14C, 0xADD3, + 0xE14D, 0xADD4, + 0xE14E, 0xADD5, + 0xE14F, 0xADD6, + 0xE150, 0xADD7, + 0xE151, 0xADD8, + 0xE152, 0xADD9, + 0xE153, 0xADDA, + 0xE154, 0xADDB, + 0xE155, 0xADDC, + 0xE156, 0xADDD, + 0xE157, 0xADDE, + 0xE158, 0xADDF, + 0xE159, 0xADE0, + 0xE15A, 0xADE1, + 0xE15B, 0xADE2, + 0xE15C, 0xADE3, + 0xE15D, 0xADE4, + 0xE15E, 0xADE5, + 0xE15F, 0xADE6, + 0xE160, 0xADE7, + 0xE161, 0xADE8, + 0xE162, 0xADE9, + 0xE163, 0xADEA, + 0xE164, 0xADEB, + 0xE165, 0xADEC, + 0xE166, 0xADED, + 0xE167, 0xADEE, + 0xE168, 0xADEF, + 0xE169, 0xADF0, + 0xE16A, 0xADF1, + 0xE16B, 0xADF2, + 0xE16C, 0xADF3, + 0xE16D, 0xADF4, + 0xE16E, 0xADF5, + 0xE16F, 0xADF6, + 0xE170, 0xADF7, + 0xE171, 0xADF8, + 0xE172, 0xADF9, + 0xE173, 0xADFA, + 0xE174, 0xADFB, + 0xE175, 0xADFC, + 0xE176, 0xADFD, + 0xE177, 0xADFE, + 0xE178, 0xAEA1, + 0xE179, 0xAEA2, + 0xE17A, 0xAEA3, + 0xE17B, 0xAEA4, + 0xE17C, 0xAEA5, + 0xE17D, 0xAEA6, + 0xE17E, 0xAEA7, + 0xE17F, 0xAEA8, + 0xE180, 0xAEA9, + 0xE181, 0xAEAA, + 0xE182, 0xAEAB, + 0xE183, 0xAEAC, + 0xE184, 0xAEAD, + 0xE185, 0xAEAE, + 0xE186, 0xAEAF, + 0xE187, 0xAEB0, + 0xE188, 0xAEB1, + 0xE189, 0xAEB2, + 0xE18A, 0xAEB3, + 0xE18B, 0xAEB4, + 0xE18C, 0xAEB5, + 0xE18D, 0xAEB6, + 0xE18E, 0xAEB7, + 0xE18F, 0xAEB8, + 0xE190, 0xAEB9, + 0xE191, 0xAEBA, + 0xE192, 0xAEBB, + 0xE193, 0xAEBC, + 0xE194, 0xAEBD, + 0xE195, 0xAEBE, + 0xE196, 0xAEBF, + 0xE197, 0xAEC0, + 0xE198, 0xAEC1, + 0xE199, 0xAEC2, + 0xE19A, 0xAEC3, + 0xE19B, 0xAEC4, + 0xE19C, 0xAEC5, + 0xE19D, 0xAEC6, + 0xE19E, 0xAEC7, + 0xE19F, 0xAEC8, + 0xE1A0, 0xAEC9, + 0xE1A1, 0xAECA, + 0xE1A2, 0xAECB, + 0xE1A3, 0xAECC, + 0xE1A4, 0xAECD, + 0xE1A5, 0xAECE, + 0xE1A6, 0xAECF, + 0xE1A7, 0xAED0, + 0xE1A8, 0xAED1, + 0xE1A9, 0xAED2, + 0xE1AA, 0xAED3, + 0xE1AB, 0xAED4, + 0xE1AC, 0xAED5, + 0xE1AD, 0xAED6, + 0xE1AE, 0xAED7, + 0xE1AF, 0xAED8, + 0xE1B0, 0xAED9, + 0xE1B1, 0xAEDA, + 0xE1B2, 0xAEDB, + 0xE1B3, 0xAEDC, + 0xE1B4, 0xAEDD, + 0xE1B5, 0xAEDE, + 0xE1B6, 0xAEDF, + 0xE1B7, 0xAEE0, + 0xE1B8, 0xAEE1, + 0xE1B9, 0xAEE2, + 0xE1BA, 0xAEE3, + 0xE1BB, 0xAEE4, + 0xE1BC, 0xAEE5, + 0xE1BD, 0xAEE6, + 0xE1BE, 0xAEE7, + 0xE1BF, 0xAEE8, + 0xE1C0, 0xAEE9, + 0xE1C1, 0xAEEA, + 0xE1C2, 0xAEEB, + 0xE1C3, 0xAEEC, + 0xE1C4, 0xAEED, + 0xE1C5, 0xAEEE, + 0xE1C6, 0xAEEF, + 0xE1C7, 0xAEF0, + 0xE1C8, 0xAEF1, + 0xE1C9, 0xAEF2, + 0xE1CA, 0xAEF3, + 0xE1CB, 0xAEF4, + 0xE1CC, 0xAEF5, + 0xE1CD, 0xAEF6, + 0xE1CE, 0xAEF7, + 0xE1CF, 0xAEF8, + 0xE1D0, 0xAEF9, + 0xE1D1, 0xAEFA, + 0xE1D2, 0xAEFB, + 0xE1D3, 0xAEFC, + 0xE1D4, 0xAEFD, + 0xE1D5, 0xAEFE, + 0xE1D6, 0xAFA1, + 0xE1D7, 0xAFA2, + 0xE1D8, 0xAFA3, + 0xE1D9, 0xAFA4, + 0xE1DA, 0xAFA5, + 0xE1DB, 0xAFA6, + 0xE1DC, 0xAFA7, + 0xE1DD, 0xAFA8, + 0xE1DE, 0xAFA9, + 0xE1DF, 0xAFAA, + 0xE1E0, 0xAFAB, + 0xE1E1, 0xAFAC, + 0xE1E2, 0xAFAD, + 0xE1E3, 0xAFAE, + 0xE1E4, 0xAFAF, + 0xE1E5, 0xAFB0, + 0xE1E6, 0xAFB1, + 0xE1E7, 0xAFB2, + 0xE1E8, 0xAFB3, + 0xE1E9, 0xAFB4, + 0xE1EA, 0xAFB5, + 0xE1EB, 0xAFB6, + 0xE1EC, 0xAFB7, + 0xE1ED, 0xAFB8, + 0xE1EE, 0xAFB9, + 0xE1EF, 0xAFBA, + 0xE1F0, 0xAFBB, + 0xE1F1, 0xAFBC, + 0xE1F2, 0xAFBD, + 0xE1F3, 0xAFBE, + 0xE1F4, 0xAFBF, + 0xE1F5, 0xAFC0, + 0xE1F6, 0xAFC1, + 0xE1F7, 0xAFC2, + 0xE1F8, 0xAFC3, + 0xE1F9, 0xAFC4, + 0xE1FA, 0xAFC5, + 0xE1FB, 0xAFC6, + 0xE1FC, 0xAFC7, + 0xE1FD, 0xAFC8, + 0xE1FE, 0xAFC9, + 0xE1FF, 0xAFCA, + 0xE200, 0xAFCB, + 0xE201, 0xAFCC, + 0xE202, 0xAFCD, + 0xE203, 0xAFCE, + 0xE204, 0xAFCF, + 0xE205, 0xAFD0, + 0xE206, 0xAFD1, + 0xE207, 0xAFD2, + 0xE208, 0xAFD3, + 0xE209, 0xAFD4, + 0xE20A, 0xAFD5, + 0xE20B, 0xAFD6, + 0xE20C, 0xAFD7, + 0xE20D, 0xAFD8, + 0xE20E, 0xAFD9, + 0xE20F, 0xAFDA, + 0xE210, 0xAFDB, + 0xE211, 0xAFDC, + 0xE212, 0xAFDD, + 0xE213, 0xAFDE, + 0xE214, 0xAFDF, + 0xE215, 0xAFE0, + 0xE216, 0xAFE1, + 0xE217, 0xAFE2, + 0xE218, 0xAFE3, + 0xE219, 0xAFE4, + 0xE21A, 0xAFE5, + 0xE21B, 0xAFE6, + 0xE21C, 0xAFE7, + 0xE21D, 0xAFE8, + 0xE21E, 0xAFE9, + 0xE21F, 0xAFEA, + 0xE220, 0xAFEB, + 0xE221, 0xAFEC, + 0xE222, 0xAFED, + 0xE223, 0xAFEE, + 0xE224, 0xAFEF, + 0xE225, 0xAFF0, + 0xE226, 0xAFF1, + 0xE227, 0xAFF2, + 0xE228, 0xAFF3, + 0xE229, 0xAFF4, + 0xE22A, 0xAFF5, + 0xE22B, 0xAFF6, + 0xE22C, 0xAFF7, + 0xE22D, 0xAFF8, + 0xE22E, 0xAFF9, + 0xE22F, 0xAFFA, + 0xE230, 0xAFFB, + 0xE231, 0xAFFC, + 0xE232, 0xAFFD, + 0xE233, 0xAFFE, + 0xE234, 0xF8A1, + 0xE235, 0xF8A2, + 0xE236, 0xF8A3, + 0xE237, 0xF8A4, + 0xE238, 0xF8A5, + 0xE239, 0xF8A6, + 0xE23A, 0xF8A7, + 0xE23B, 0xF8A8, + 0xE23C, 0xF8A9, + 0xE23D, 0xF8AA, + 0xE23E, 0xF8AB, + 0xE23F, 0xF8AC, + 0xE240, 0xF8AD, + 0xE241, 0xF8AE, + 0xE242, 0xF8AF, + 0xE243, 0xF8B0, + 0xE244, 0xF8B1, + 0xE245, 0xF8B2, + 0xE246, 0xF8B3, + 0xE247, 0xF8B4, + 0xE248, 0xF8B5, + 0xE249, 0xF8B6, + 0xE24A, 0xF8B7, + 0xE24B, 0xF8B8, + 0xE24C, 0xF8B9, + 0xE24D, 0xF8BA, + 0xE24E, 0xF8BB, + 0xE24F, 0xF8BC, + 0xE250, 0xF8BD, + 0xE251, 0xF8BE, + 0xE252, 0xF8BF, + 0xE253, 0xF8C0, + 0xE254, 0xF8C1, + 0xE255, 0xF8C2, + 0xE256, 0xF8C3, + 0xE257, 0xF8C4, + 0xE258, 0xF8C5, + 0xE259, 0xF8C6, + 0xE25A, 0xF8C7, + 0xE25B, 0xF8C8, + 0xE25C, 0xF8C9, + 0xE25D, 0xF8CA, + 0xE25E, 0xF8CB, + 0xE25F, 0xF8CC, + 0xE260, 0xF8CD, + 0xE261, 0xF8CE, + 0xE262, 0xF8CF, + 0xE263, 0xF8D0, + 0xE264, 0xF8D1, + 0xE265, 0xF8D2, + 0xE266, 0xF8D3, + 0xE267, 0xF8D4, + 0xE268, 0xF8D5, + 0xE269, 0xF8D6, + 0xE26A, 0xF8D7, + 0xE26B, 0xF8D8, + 0xE26C, 0xF8D9, + 0xE26D, 0xF8DA, + 0xE26E, 0xF8DB, + 0xE26F, 0xF8DC, + 0xE270, 0xF8DD, + 0xE271, 0xF8DE, + 0xE272, 0xF8DF, + 0xE273, 0xF8E0, + 0xE274, 0xF8E1, + 0xE275, 0xF8E2, + 0xE276, 0xF8E3, + 0xE277, 0xF8E4, + 0xE278, 0xF8E5, + 0xE279, 0xF8E6, + 0xE27A, 0xF8E7, + 0xE27B, 0xF8E8, + 0xE27C, 0xF8E9, + 0xE27D, 0xF8EA, + 0xE27E, 0xF8EB, + 0xE27F, 0xF8EC, + 0xE280, 0xF8ED, + 0xE281, 0xF8EE, + 0xE282, 0xF8EF, + 0xE283, 0xF8F0, + 0xE284, 0xF8F1, + 0xE285, 0xF8F2, + 0xE286, 0xF8F3, + 0xE287, 0xF8F4, + 0xE288, 0xF8F5, + 0xE289, 0xF8F6, + 0xE28A, 0xF8F7, + 0xE28B, 0xF8F8, + 0xE28C, 0xF8F9, + 0xE28D, 0xF8FA, + 0xE28E, 0xF8FB, + 0xE28F, 0xF8FC, + 0xE290, 0xF8FD, + 0xE291, 0xF8FE, + 0xE292, 0xF9A1, + 0xE293, 0xF9A2, + 0xE294, 0xF9A3, + 0xE295, 0xF9A4, + 0xE296, 0xF9A5, + 0xE297, 0xF9A6, + 0xE298, 0xF9A7, + 0xE299, 0xF9A8, + 0xE29A, 0xF9A9, + 0xE29B, 0xF9AA, + 0xE29C, 0xF9AB, + 0xE29D, 0xF9AC, + 0xE29E, 0xF9AD, + 0xE29F, 0xF9AE, + 0xE2A0, 0xF9AF, + 0xE2A1, 0xF9B0, + 0xE2A2, 0xF9B1, + 0xE2A3, 0xF9B2, + 0xE2A4, 0xF9B3, + 0xE2A5, 0xF9B4, + 0xE2A6, 0xF9B5, + 0xE2A7, 0xF9B6, + 0xE2A8, 0xF9B7, + 0xE2A9, 0xF9B8, + 0xE2AA, 0xF9B9, + 0xE2AB, 0xF9BA, + 0xE2AC, 0xF9BB, + 0xE2AD, 0xF9BC, + 0xE2AE, 0xF9BD, + 0xE2AF, 0xF9BE, + 0xE2B0, 0xF9BF, + 0xE2B1, 0xF9C0, + 0xE2B2, 0xF9C1, + 0xE2B3, 0xF9C2, + 0xE2B4, 0xF9C3, + 0xE2B5, 0xF9C4, + 0xE2B6, 0xF9C5, + 0xE2B7, 0xF9C6, + 0xE2B8, 0xF9C7, + 0xE2B9, 0xF9C8, + 0xE2BA, 0xF9C9, + 0xE2BB, 0xF9CA, + 0xE2BC, 0xF9CB, + 0xE2BD, 0xF9CC, + 0xE2BE, 0xF9CD, + 0xE2BF, 0xF9CE, + 0xE2C0, 0xF9CF, + 0xE2C1, 0xF9D0, + 0xE2C2, 0xF9D1, + 0xE2C3, 0xF9D2, + 0xE2C4, 0xF9D3, + 0xE2C5, 0xF9D4, + 0xE2C6, 0xF9D5, + 0xE2C7, 0xF9D6, + 0xE2C8, 0xF9D7, + 0xE2C9, 0xF9D8, + 0xE2CA, 0xF9D9, + 0xE2CB, 0xF9DA, + 0xE2CC, 0xF9DB, + 0xE2CD, 0xF9DC, + 0xE2CE, 0xF9DD, + 0xE2CF, 0xF9DE, + 0xE2D0, 0xF9DF, + 0xE2D1, 0xF9E0, + 0xE2D2, 0xF9E1, + 0xE2D3, 0xF9E2, + 0xE2D4, 0xF9E3, + 0xE2D5, 0xF9E4, + 0xE2D6, 0xF9E5, + 0xE2D7, 0xF9E6, + 0xE2D8, 0xF9E7, + 0xE2D9, 0xF9E8, + 0xE2DA, 0xF9E9, + 0xE2DB, 0xF9EA, + 0xE2DC, 0xF9EB, + 0xE2DD, 0xF9EC, + 0xE2DE, 0xF9ED, + 0xE2DF, 0xF9EE, + 0xE2E0, 0xF9EF, + 0xE2E1, 0xF9F0, + 0xE2E2, 0xF9F1, + 0xE2E3, 0xF9F2, + 0xE2E4, 0xF9F3, + 0xE2E5, 0xF9F4, + 0xE2E6, 0xF9F5, + 0xE2E7, 0xF9F6, + 0xE2E8, 0xF9F7, + 0xE2E9, 0xF9F8, + 0xE2EA, 0xF9F9, + 0xE2EB, 0xF9FA, + 0xE2EC, 0xF9FB, + 0xE2ED, 0xF9FC, + 0xE2EE, 0xF9FD, + 0xE2EF, 0xF9FE, + 0xE2F0, 0xFAA1, + 0xE2F1, 0xFAA2, + 0xE2F2, 0xFAA3, + 0xE2F3, 0xFAA4, + 0xE2F4, 0xFAA5, + 0xE2F5, 0xFAA6, + 0xE2F6, 0xFAA7, + 0xE2F7, 0xFAA8, + 0xE2F8, 0xFAA9, + 0xE2F9, 0xFAAA, + 0xE2FA, 0xFAAB, + 0xE2FB, 0xFAAC, + 0xE2FC, 0xFAAD, + 0xE2FD, 0xFAAE, + 0xE2FE, 0xFAAF, + 0xE2FF, 0xFAB0, + 0xE300, 0xFAB1, + 0xE301, 0xFAB2, + 0xE302, 0xFAB3, + 0xE303, 0xFAB4, + 0xE304, 0xFAB5, + 0xE305, 0xFAB6, + 0xE306, 0xFAB7, + 0xE307, 0xFAB8, + 0xE308, 0xFAB9, + 0xE309, 0xFABA, + 0xE30A, 0xFABB, + 0xE30B, 0xFABC, + 0xE30C, 0xFABD, + 0xE30D, 0xFABE, + 0xE30E, 0xFABF, + 0xE30F, 0xFAC0, + 0xE310, 0xFAC1, + 0xE311, 0xFAC2, + 0xE312, 0xFAC3, + 0xE313, 0xFAC4, + 0xE314, 0xFAC5, + 0xE315, 0xFAC6, + 0xE316, 0xFAC7, + 0xE317, 0xFAC8, + 0xE318, 0xFAC9, + 0xE319, 0xFACA, + 0xE31A, 0xFACB, + 0xE31B, 0xFACC, + 0xE31C, 0xFACD, + 0xE31D, 0xFACE, + 0xE31E, 0xFACF, + 0xE31F, 0xFAD0, + 0xE320, 0xFAD1, + 0xE321, 0xFAD2, + 0xE322, 0xFAD3, + 0xE323, 0xFAD4, + 0xE324, 0xFAD5, + 0xE325, 0xFAD6, + 0xE326, 0xFAD7, + 0xE327, 0xFAD8, + 0xE328, 0xFAD9, + 0xE329, 0xFADA, + 0xE32A, 0xFADB, + 0xE32B, 0xFADC, + 0xE32C, 0xFADD, + 0xE32D, 0xFADE, + 0xE32E, 0xFADF, + 0xE32F, 0xFAE0, + 0xE330, 0xFAE1, + 0xE331, 0xFAE2, + 0xE332, 0xFAE3, + 0xE333, 0xFAE4, + 0xE334, 0xFAE5, + 0xE335, 0xFAE6, + 0xE336, 0xFAE7, + 0xE337, 0xFAE8, + 0xE338, 0xFAE9, + 0xE339, 0xFAEA, + 0xE33A, 0xFAEB, + 0xE33B, 0xFAEC, + 0xE33C, 0xFAED, + 0xE33D, 0xFAEE, + 0xE33E, 0xFAEF, + 0xE33F, 0xFAF0, + 0xE340, 0xFAF1, + 0xE341, 0xFAF2, + 0xE342, 0xFAF3, + 0xE343, 0xFAF4, + 0xE344, 0xFAF5, + 0xE345, 0xFAF6, + 0xE346, 0xFAF7, + 0xE347, 0xFAF8, + 0xE348, 0xFAF9, + 0xE349, 0xFAFA, + 0xE34A, 0xFAFB, + 0xE34B, 0xFAFC, + 0xE34C, 0xFAFD, + 0xE34D, 0xFAFE, + 0xE34E, 0xFBA1, + 0xE34F, 0xFBA2, + 0xE350, 0xFBA3, + 0xE351, 0xFBA4, + 0xE352, 0xFBA5, + 0xE353, 0xFBA6, + 0xE354, 0xFBA7, + 0xE355, 0xFBA8, + 0xE356, 0xFBA9, + 0xE357, 0xFBAA, + 0xE358, 0xFBAB, + 0xE359, 0xFBAC, + 0xE35A, 0xFBAD, + 0xE35B, 0xFBAE, + 0xE35C, 0xFBAF, + 0xE35D, 0xFBB0, + 0xE35E, 0xFBB1, + 0xE35F, 0xFBB2, + 0xE360, 0xFBB3, + 0xE361, 0xFBB4, + 0xE362, 0xFBB5, + 0xE363, 0xFBB6, + 0xE364, 0xFBB7, + 0xE365, 0xFBB8, + 0xE366, 0xFBB9, + 0xE367, 0xFBBA, + 0xE368, 0xFBBB, + 0xE369, 0xFBBC, + 0xE36A, 0xFBBD, + 0xE36B, 0xFBBE, + 0xE36C, 0xFBBF, + 0xE36D, 0xFBC0, + 0xE36E, 0xFBC1, + 0xE36F, 0xFBC2, + 0xE370, 0xFBC3, + 0xE371, 0xFBC4, + 0xE372, 0xFBC5, + 0xE373, 0xFBC6, + 0xE374, 0xFBC7, + 0xE375, 0xFBC8, + 0xE376, 0xFBC9, + 0xE377, 0xFBCA, + 0xE378, 0xFBCB, + 0xE379, 0xFBCC, + 0xE37A, 0xFBCD, + 0xE37B, 0xFBCE, + 0xE37C, 0xFBCF, + 0xE37D, 0xFBD0, + 0xE37E, 0xFBD1, + 0xE37F, 0xFBD2, + 0xE380, 0xFBD3, + 0xE381, 0xFBD4, + 0xE382, 0xFBD5, + 0xE383, 0xFBD6, + 0xE384, 0xFBD7, + 0xE385, 0xFBD8, + 0xE386, 0xFBD9, + 0xE387, 0xFBDA, + 0xE388, 0xFBDB, + 0xE389, 0xFBDC, + 0xE38A, 0xFBDD, + 0xE38B, 0xFBDE, + 0xE38C, 0xFBDF, + 0xE38D, 0xFBE0, + 0xE38E, 0xFBE1, + 0xE38F, 0xFBE2, + 0xE390, 0xFBE3, + 0xE391, 0xFBE4, + 0xE392, 0xFBE5, + 0xE393, 0xFBE6, + 0xE394, 0xFBE7, + 0xE395, 0xFBE8, + 0xE396, 0xFBE9, + 0xE397, 0xFBEA, + 0xE398, 0xFBEB, + 0xE399, 0xFBEC, + 0xE39A, 0xFBED, + 0xE39B, 0xFBEE, + 0xE39C, 0xFBEF, + 0xE39D, 0xFBF0, + 0xE39E, 0xFBF1, + 0xE39F, 0xFBF2, + 0xE3A0, 0xFBF3, + 0xE3A1, 0xFBF4, + 0xE3A2, 0xFBF5, + 0xE3A3, 0xFBF6, + 0xE3A4, 0xFBF7, + 0xE3A5, 0xFBF8, + 0xE3A6, 0xFBF9, + 0xE3A7, 0xFBFA, + 0xE3A8, 0xFBFB, + 0xE3A9, 0xFBFC, + 0xE3AA, 0xFBFD, + 0xE3AB, 0xFBFE, + 0xE3AC, 0xFCA1, + 0xE3AD, 0xFCA2, + 0xE3AE, 0xFCA3, + 0xE3AF, 0xFCA4, + 0xE3B0, 0xFCA5, + 0xE3B1, 0xFCA6, + 0xE3B2, 0xFCA7, + 0xE3B3, 0xFCA8, + 0xE3B4, 0xFCA9, + 0xE3B5, 0xFCAA, + 0xE3B6, 0xFCAB, + 0xE3B7, 0xFCAC, + 0xE3B8, 0xFCAD, + 0xE3B9, 0xFCAE, + 0xE3BA, 0xFCAF, + 0xE3BB, 0xFCB0, + 0xE3BC, 0xFCB1, + 0xE3BD, 0xFCB2, + 0xE3BE, 0xFCB3, + 0xE3BF, 0xFCB4, + 0xE3C0, 0xFCB5, + 0xE3C1, 0xFCB6, + 0xE3C2, 0xFCB7, + 0xE3C3, 0xFCB8, + 0xE3C4, 0xFCB9, + 0xE3C5, 0xFCBA, + 0xE3C6, 0xFCBB, + 0xE3C7, 0xFCBC, + 0xE3C8, 0xFCBD, + 0xE3C9, 0xFCBE, + 0xE3CA, 0xFCBF, + 0xE3CB, 0xFCC0, + 0xE3CC, 0xFCC1, + 0xE3CD, 0xFCC2, + 0xE3CE, 0xFCC3, + 0xE3CF, 0xFCC4, + 0xE3D0, 0xFCC5, + 0xE3D1, 0xFCC6, + 0xE3D2, 0xFCC7, + 0xE3D3, 0xFCC8, + 0xE3D4, 0xFCC9, + 0xE3D5, 0xFCCA, + 0xE3D6, 0xFCCB, + 0xE3D7, 0xFCCC, + 0xE3D8, 0xFCCD, + 0xE3D9, 0xFCCE, + 0xE3DA, 0xFCCF, + 0xE3DB, 0xFCD0, + 0xE3DC, 0xFCD1, + 0xE3DD, 0xFCD2, + 0xE3DE, 0xFCD3, + 0xE3DF, 0xFCD4, + 0xE3E0, 0xFCD5, + 0xE3E1, 0xFCD6, + 0xE3E2, 0xFCD7, + 0xE3E3, 0xFCD8, + 0xE3E4, 0xFCD9, + 0xE3E5, 0xFCDA, + 0xE3E6, 0xFCDB, + 0xE3E7, 0xFCDC, + 0xE3E8, 0xFCDD, + 0xE3E9, 0xFCDE, + 0xE3EA, 0xFCDF, + 0xE3EB, 0xFCE0, + 0xE3EC, 0xFCE1, + 0xE3ED, 0xFCE2, + 0xE3EE, 0xFCE3, + 0xE3EF, 0xFCE4, + 0xE3F0, 0xFCE5, + 0xE3F1, 0xFCE6, + 0xE3F2, 0xFCE7, + 0xE3F3, 0xFCE8, + 0xE3F4, 0xFCE9, + 0xE3F5, 0xFCEA, + 0xE3F6, 0xFCEB, + 0xE3F7, 0xFCEC, + 0xE3F8, 0xFCED, + 0xE3F9, 0xFCEE, + 0xE3FA, 0xFCEF, + 0xE3FB, 0xFCF0, + 0xE3FC, 0xFCF1, + 0xE3FD, 0xFCF2, + 0xE3FE, 0xFCF3, + 0xE3FF, 0xFCF4, + 0xE400, 0xFCF5, + 0xE401, 0xFCF6, + 0xE402, 0xFCF7, + 0xE403, 0xFCF8, + 0xE404, 0xFCF9, + 0xE405, 0xFCFA, + 0xE406, 0xFCFB, + 0xE407, 0xFCFC, + 0xE408, 0xFCFD, + 0xE409, 0xFCFE, + 0xE40A, 0xFDA1, + 0xE40B, 0xFDA2, + 0xE40C, 0xFDA3, + 0xE40D, 0xFDA4, + 0xE40E, 0xFDA5, + 0xE40F, 0xFDA6, + 0xE410, 0xFDA7, + 0xE411, 0xFDA8, + 0xE412, 0xFDA9, + 0xE413, 0xFDAA, + 0xE414, 0xFDAB, + 0xE415, 0xFDAC, + 0xE416, 0xFDAD, + 0xE417, 0xFDAE, + 0xE418, 0xFDAF, + 0xE419, 0xFDB0, + 0xE41A, 0xFDB1, + 0xE41B, 0xFDB2, + 0xE41C, 0xFDB3, + 0xE41D, 0xFDB4, + 0xE41E, 0xFDB5, + 0xE41F, 0xFDB6, + 0xE420, 0xFDB7, + 0xE421, 0xFDB8, + 0xE422, 0xFDB9, + 0xE423, 0xFDBA, + 0xE424, 0xFDBB, + 0xE425, 0xFDBC, + 0xE426, 0xFDBD, + 0xE427, 0xFDBE, + 0xE428, 0xFDBF, + 0xE429, 0xFDC0, + 0xE42A, 0xFDC1, + 0xE42B, 0xFDC2, + 0xE42C, 0xFDC3, + 0xE42D, 0xFDC4, + 0xE42E, 0xFDC5, + 0xE42F, 0xFDC6, + 0xE430, 0xFDC7, + 0xE431, 0xFDC8, + 0xE432, 0xFDC9, + 0xE433, 0xFDCA, + 0xE434, 0xFDCB, + 0xE435, 0xFDCC, + 0xE436, 0xFDCD, + 0xE437, 0xFDCE, + 0xE438, 0xFDCF, + 0xE439, 0xFDD0, + 0xE43A, 0xFDD1, + 0xE43B, 0xFDD2, + 0xE43C, 0xFDD3, + 0xE43D, 0xFDD4, + 0xE43E, 0xFDD5, + 0xE43F, 0xFDD6, + 0xE440, 0xFDD7, + 0xE441, 0xFDD8, + 0xE442, 0xFDD9, + 0xE443, 0xFDDA, + 0xE444, 0xFDDB, + 0xE445, 0xFDDC, + 0xE446, 0xFDDD, + 0xE447, 0xFDDE, + 0xE448, 0xFDDF, + 0xE449, 0xFDE0, + 0xE44A, 0xFDE1, + 0xE44B, 0xFDE2, + 0xE44C, 0xFDE3, + 0xE44D, 0xFDE4, + 0xE44E, 0xFDE5, + 0xE44F, 0xFDE6, + 0xE450, 0xFDE7, + 0xE451, 0xFDE8, + 0xE452, 0xFDE9, + 0xE453, 0xFDEA, + 0xE454, 0xFDEB, + 0xE455, 0xFDEC, + 0xE456, 0xFDED, + 0xE457, 0xFDEE, + 0xE458, 0xFDEF, + 0xE459, 0xFDF0, + 0xE45A, 0xFDF1, + 0xE45B, 0xFDF2, + 0xE45C, 0xFDF3, + 0xE45D, 0xFDF4, + 0xE45E, 0xFDF5, + 0xE45F, 0xFDF6, + 0xE460, 0xFDF7, + 0xE461, 0xFDF8, + 0xE462, 0xFDF9, + 0xE463, 0xFDFA, + 0xE464, 0xFDFB, + 0xE465, 0xFDFC, + 0xE466, 0xFDFD, + 0xE467, 0xFDFE, + 0xE468, 0xFEA1, + 0xE469, 0xFEA2, + 0xE46A, 0xFEA3, + 0xE46B, 0xFEA4, + 0xE46C, 0xFEA5, + 0xE46D, 0xFEA6, + 0xE46E, 0xFEA7, + 0xE46F, 0xFEA8, + 0xE470, 0xFEA9, + 0xE471, 0xFEAA, + 0xE472, 0xFEAB, + 0xE473, 0xFEAC, + 0xE474, 0xFEAD, + 0xE475, 0xFEAE, + 0xE476, 0xFEAF, + 0xE477, 0xFEB0, + 0xE478, 0xFEB1, + 0xE479, 0xFEB2, + 0xE47A, 0xFEB3, + 0xE47B, 0xFEB4, + 0xE47C, 0xFEB5, + 0xE47D, 0xFEB6, + 0xE47E, 0xFEB7, + 0xE47F, 0xFEB8, + 0xE480, 0xFEB9, + 0xE481, 0xFEBA, + 0xE482, 0xFEBB, + 0xE483, 0xFEBC, + 0xE484, 0xFEBD, + 0xE485, 0xFEBE, + 0xE486, 0xFEBF, + 0xE487, 0xFEC0, + 0xE488, 0xFEC1, + 0xE489, 0xFEC2, + 0xE48A, 0xFEC3, + 0xE48B, 0xFEC4, + 0xE48C, 0xFEC5, + 0xE48D, 0xFEC6, + 0xE48E, 0xFEC7, + 0xE48F, 0xFEC8, + 0xE490, 0xFEC9, + 0xE491, 0xFECA, + 0xE492, 0xFECB, + 0xE493, 0xFECC, + 0xE494, 0xFECD, + 0xE495, 0xFECE, + 0xE496, 0xFECF, + 0xE497, 0xFED0, + 0xE498, 0xFED1, + 0xE499, 0xFED2, + 0xE49A, 0xFED3, + 0xE49B, 0xFED4, + 0xE49C, 0xFED5, + 0xE49D, 0xFED6, + 0xE49E, 0xFED7, + 0xE49F, 0xFED8, + 0xE4A0, 0xFED9, + 0xE4A1, 0xFEDA, + 0xE4A2, 0xFEDB, + 0xE4A3, 0xFEDC, + 0xE4A4, 0xFEDD, + 0xE4A5, 0xFEDE, + 0xE4A6, 0xFEDF, + 0xE4A7, 0xFEE0, + 0xE4A8, 0xFEE1, + 0xE4A9, 0xFEE2, + 0xE4AA, 0xFEE3, + 0xE4AB, 0xFEE4, + 0xE4AC, 0xFEE5, + 0xE4AD, 0xFEE6, + 0xE4AE, 0xFEE7, + 0xE4AF, 0xFEE8, + 0xE4B0, 0xFEE9, + 0xE4B1, 0xFEEA, + 0xE4B2, 0xFEEB, + 0xE4B3, 0xFEEC, + 0xE4B4, 0xFEED, + 0xE4B5, 0xFEEE, + 0xE4B6, 0xFEEF, + 0xE4B7, 0xFEF0, + 0xE4B8, 0xFEF1, + 0xE4B9, 0xFEF2, + 0xE4BA, 0xFEF3, + 0xE4BB, 0xFEF4, + 0xE4BC, 0xFEF5, + 0xE4BD, 0xFEF6, + 0xE4BE, 0xFEF7, + 0xE4BF, 0xFEF8, + 0xE4C0, 0xFEF9, + 0xE4C1, 0xFEFA, + 0xE4C2, 0xFEFB, + 0xE4C3, 0xFEFC, + 0xE4C4, 0xFEFD, + 0xE4C5, 0xFEFE, + 0xE4C6, 0xA140, + 0xE4C7, 0xA141, + 0xE4C8, 0xA142, + 0xE4C9, 0xA143, + 0xE4CA, 0xA144, + 0xE4CB, 0xA145, + 0xE4CC, 0xA146, + 0xE4CD, 0xA147, + 0xE4CE, 0xA148, + 0xE4CF, 0xA149, + 0xE4D0, 0xA14A, + 0xE4D1, 0xA14B, + 0xE4D2, 0xA14C, + 0xE4D3, 0xA14D, + 0xE4D4, 0xA14E, + 0xE4D5, 0xA14F, + 0xE4D6, 0xA150, + 0xE4D7, 0xA151, + 0xE4D8, 0xA152, + 0xE4D9, 0xA153, + 0xE4DA, 0xA154, + 0xE4DB, 0xA155, + 0xE4DC, 0xA156, + 0xE4DD, 0xA157, + 0xE4DE, 0xA158, + 0xE4DF, 0xA159, + 0xE4E0, 0xA15A, + 0xE4E1, 0xA15B, + 0xE4E2, 0xA15C, + 0xE4E3, 0xA15D, + 0xE4E4, 0xA15E, + 0xE4E5, 0xA15F, + 0xE4E6, 0xA160, + 0xE4E7, 0xA161, + 0xE4E8, 0xA162, + 0xE4E9, 0xA163, + 0xE4EA, 0xA164, + 0xE4EB, 0xA165, + 0xE4EC, 0xA166, + 0xE4ED, 0xA167, + 0xE4EE, 0xA168, + 0xE4EF, 0xA169, + 0xE4F0, 0xA16A, + 0xE4F1, 0xA16B, + 0xE4F2, 0xA16C, + 0xE4F3, 0xA16D, + 0xE4F4, 0xA16E, + 0xE4F5, 0xA16F, + 0xE4F6, 0xA170, + 0xE4F7, 0xA171, + 0xE4F8, 0xA172, + 0xE4F9, 0xA173, + 0xE4FA, 0xA174, + 0xE4FB, 0xA175, + 0xE4FC, 0xA176, + 0xE4FD, 0xA177, + 0xE4FE, 0xA178, + 0xE4FF, 0xA179, + 0xE500, 0xA17A, + 0xE501, 0xA17B, + 0xE502, 0xA17C, + 0xE503, 0xA17D, + 0xE504, 0xA17E, + 0xE505, 0xA180, + 0xE506, 0xA181, + 0xE507, 0xA182, + 0xE508, 0xA183, + 0xE509, 0xA184, + 0xE50A, 0xA185, + 0xE50B, 0xA186, + 0xE50C, 0xA187, + 0xE50D, 0xA188, + 0xE50E, 0xA189, + 0xE50F, 0xA18A, + 0xE510, 0xA18B, + 0xE511, 0xA18C, + 0xE512, 0xA18D, + 0xE513, 0xA18E, + 0xE514, 0xA18F, + 0xE515, 0xA190, + 0xE516, 0xA191, + 0xE517, 0xA192, + 0xE518, 0xA193, + 0xE519, 0xA194, + 0xE51A, 0xA195, + 0xE51B, 0xA196, + 0xE51C, 0xA197, + 0xE51D, 0xA198, + 0xE51E, 0xA199, + 0xE51F, 0xA19A, + 0xE520, 0xA19B, + 0xE521, 0xA19C, + 0xE522, 0xA19D, + 0xE523, 0xA19E, + 0xE524, 0xA19F, + 0xE525, 0xA1A0, + 0xE526, 0xA240, + 0xE527, 0xA241, + 0xE528, 0xA242, + 0xE529, 0xA243, + 0xE52A, 0xA244, + 0xE52B, 0xA245, + 0xE52C, 0xA246, + 0xE52D, 0xA247, + 0xE52E, 0xA248, + 0xE52F, 0xA249, + 0xE530, 0xA24A, + 0xE531, 0xA24B, + 0xE532, 0xA24C, + 0xE533, 0xA24D, + 0xE534, 0xA24E, + 0xE535, 0xA24F, + 0xE536, 0xA250, + 0xE537, 0xA251, + 0xE538, 0xA252, + 0xE539, 0xA253, + 0xE53A, 0xA254, + 0xE53B, 0xA255, + 0xE53C, 0xA256, + 0xE53D, 0xA257, + 0xE53E, 0xA258, + 0xE53F, 0xA259, + 0xE540, 0xA25A, + 0xE541, 0xA25B, + 0xE542, 0xA25C, + 0xE543, 0xA25D, + 0xE544, 0xA25E, + 0xE545, 0xA25F, + 0xE546, 0xA260, + 0xE547, 0xA261, + 0xE548, 0xA262, + 0xE549, 0xA263, + 0xE54A, 0xA264, + 0xE54B, 0xA265, + 0xE54C, 0xA266, + 0xE54D, 0xA267, + 0xE54E, 0xA268, + 0xE54F, 0xA269, + 0xE550, 0xA26A, + 0xE551, 0xA26B, + 0xE552, 0xA26C, + 0xE553, 0xA26D, + 0xE554, 0xA26E, + 0xE555, 0xA26F, + 0xE556, 0xA270, + 0xE557, 0xA271, + 0xE558, 0xA272, + 0xE559, 0xA273, + 0xE55A, 0xA274, + 0xE55B, 0xA275, + 0xE55C, 0xA276, + 0xE55D, 0xA277, + 0xE55E, 0xA278, + 0xE55F, 0xA279, + 0xE560, 0xA27A, + 0xE561, 0xA27B, + 0xE562, 0xA27C, + 0xE563, 0xA27D, + 0xE564, 0xA27E, + 0xE565, 0xA280, + 0xE566, 0xA281, + 0xE567, 0xA282, + 0xE568, 0xA283, + 0xE569, 0xA284, + 0xE56A, 0xA285, + 0xE56B, 0xA286, + 0xE56C, 0xA287, + 0xE56D, 0xA288, + 0xE56E, 0xA289, + 0xE56F, 0xA28A, + 0xE570, 0xA28B, + 0xE571, 0xA28C, + 0xE572, 0xA28D, + 0xE573, 0xA28E, + 0xE574, 0xA28F, + 0xE575, 0xA290, + 0xE576, 0xA291, + 0xE577, 0xA292, + 0xE578, 0xA293, + 0xE579, 0xA294, + 0xE57A, 0xA295, + 0xE57B, 0xA296, + 0xE57C, 0xA297, + 0xE57D, 0xA298, + 0xE57E, 0xA299, + 0xE57F, 0xA29A, + 0xE580, 0xA29B, + 0xE581, 0xA29C, + 0xE582, 0xA29D, + 0xE583, 0xA29E, + 0xE584, 0xA29F, + 0xE585, 0xA2A0, + 0xE586, 0xA340, + 0xE587, 0xA341, + 0xE588, 0xA342, + 0xE589, 0xA343, + 0xE58A, 0xA344, + 0xE58B, 0xA345, + 0xE58C, 0xA346, + 0xE58D, 0xA347, + 0xE58E, 0xA348, + 0xE58F, 0xA349, + 0xE590, 0xA34A, + 0xE591, 0xA34B, + 0xE592, 0xA34C, + 0xE593, 0xA34D, + 0xE594, 0xA34E, + 0xE595, 0xA34F, + 0xE596, 0xA350, + 0xE597, 0xA351, + 0xE598, 0xA352, + 0xE599, 0xA353, + 0xE59A, 0xA354, + 0xE59B, 0xA355, + 0xE59C, 0xA356, + 0xE59D, 0xA357, + 0xE59E, 0xA358, + 0xE59F, 0xA359, + 0xE5A0, 0xA35A, + 0xE5A1, 0xA35B, + 0xE5A2, 0xA35C, + 0xE5A3, 0xA35D, + 0xE5A4, 0xA35E, + 0xE5A5, 0xA35F, + 0xE5A6, 0xA360, + 0xE5A7, 0xA361, + 0xE5A8, 0xA362, + 0xE5A9, 0xA363, + 0xE5AA, 0xA364, + 0xE5AB, 0xA365, + 0xE5AC, 0xA366, + 0xE5AD, 0xA367, + 0xE5AE, 0xA368, + 0xE5AF, 0xA369, + 0xE5B0, 0xA36A, + 0xE5B1, 0xA36B, + 0xE5B2, 0xA36C, + 0xE5B3, 0xA36D, + 0xE5B4, 0xA36E, + 0xE5B5, 0xA36F, + 0xE5B6, 0xA370, + 0xE5B7, 0xA371, + 0xE5B8, 0xA372, + 0xE5B9, 0xA373, + 0xE5BA, 0xA374, + 0xE5BB, 0xA375, + 0xE5BC, 0xA376, + 0xE5BD, 0xA377, + 0xE5BE, 0xA378, + 0xE5BF, 0xA379, + 0xE5C0, 0xA37A, + 0xE5C1, 0xA37B, + 0xE5C2, 0xA37C, + 0xE5C3, 0xA37D, + 0xE5C4, 0xA37E, + 0xE5C5, 0xA380, + 0xE5C6, 0xA381, + 0xE5C7, 0xA382, + 0xE5C8, 0xA383, + 0xE5C9, 0xA384, + 0xE5CA, 0xA385, + 0xE5CB, 0xA386, + 0xE5CC, 0xA387, + 0xE5CD, 0xA388, + 0xE5CE, 0xA389, + 0xE5CF, 0xA38A, + 0xE5D0, 0xA38B, + 0xE5D1, 0xA38C, + 0xE5D2, 0xA38D, + 0xE5D3, 0xA38E, + 0xE5D4, 0xA38F, + 0xE5D5, 0xA390, + 0xE5D6, 0xA391, + 0xE5D7, 0xA392, + 0xE5D8, 0xA393, + 0xE5D9, 0xA394, + 0xE5DA, 0xA395, + 0xE5DB, 0xA396, + 0xE5DC, 0xA397, + 0xE5DD, 0xA398, + 0xE5DE, 0xA399, + 0xE5DF, 0xA39A, + 0xE5E0, 0xA39B, + 0xE5E1, 0xA39C, + 0xE5E2, 0xA39D, + 0xE5E3, 0xA39E, + 0xE5E4, 0xA39F, + 0xE5E5, 0xA3A0, + 0xE5E6, 0xA440, + 0xE5E7, 0xA441, + 0xE5E8, 0xA442, + 0xE5E9, 0xA443, + 0xE5EA, 0xA444, + 0xE5EB, 0xA445, + 0xE5EC, 0xA446, + 0xE5ED, 0xA447, + 0xE5EE, 0xA448, + 0xE5EF, 0xA449, + 0xE5F0, 0xA44A, + 0xE5F1, 0xA44B, + 0xE5F2, 0xA44C, + 0xE5F3, 0xA44D, + 0xE5F4, 0xA44E, + 0xE5F5, 0xA44F, + 0xE5F6, 0xA450, + 0xE5F7, 0xA451, + 0xE5F8, 0xA452, + 0xE5F9, 0xA453, + 0xE5FA, 0xA454, + 0xE5FB, 0xA455, + 0xE5FC, 0xA456, + 0xE5FD, 0xA457, + 0xE5FE, 0xA458, + 0xE5FF, 0xA459, + 0xE600, 0xA45A, + 0xE601, 0xA45B, + 0xE602, 0xA45C, + 0xE603, 0xA45D, + 0xE604, 0xA45E, + 0xE605, 0xA45F, + 0xE606, 0xA460, + 0xE607, 0xA461, + 0xE608, 0xA462, + 0xE609, 0xA463, + 0xE60A, 0xA464, + 0xE60B, 0xA465, + 0xE60C, 0xA466, + 0xE60D, 0xA467, + 0xE60E, 0xA468, + 0xE60F, 0xA469, + 0xE610, 0xA46A, + 0xE611, 0xA46B, + 0xE612, 0xA46C, + 0xE613, 0xA46D, + 0xE614, 0xA46E, + 0xE615, 0xA46F, + 0xE616, 0xA470, + 0xE617, 0xA471, + 0xE618, 0xA472, + 0xE619, 0xA473, + 0xE61A, 0xA474, + 0xE61B, 0xA475, + 0xE61C, 0xA476, + 0xE61D, 0xA477, + 0xE61E, 0xA478, + 0xE61F, 0xA479, + 0xE620, 0xA47A, + 0xE621, 0xA47B, + 0xE622, 0xA47C, + 0xE623, 0xA47D, + 0xE624, 0xA47E, + 0xE625, 0xA480, + 0xE626, 0xA481, + 0xE627, 0xA482, + 0xE628, 0xA483, + 0xE629, 0xA484, + 0xE62A, 0xA485, + 0xE62B, 0xA486, + 0xE62C, 0xA487, + 0xE62D, 0xA488, + 0xE62E, 0xA489, + 0xE62F, 0xA48A, + 0xE630, 0xA48B, + 0xE631, 0xA48C, + 0xE632, 0xA48D, + 0xE633, 0xA48E, + 0xE634, 0xA48F, + 0xE635, 0xA490, + 0xE636, 0xA491, + 0xE637, 0xA492, + 0xE638, 0xA493, + 0xE639, 0xA494, + 0xE63A, 0xA495, + 0xE63B, 0xA496, + 0xE63C, 0xA497, + 0xE63D, 0xA498, + 0xE63E, 0xA499, + 0xE63F, 0xA49A, + 0xE640, 0xA49B, + 0xE641, 0xA49C, + 0xE642, 0xA49D, + 0xE643, 0xA49E, + 0xE644, 0xA49F, + 0xE645, 0xA4A0, + 0xE646, 0xA540, + 0xE647, 0xA541, + 0xE648, 0xA542, + 0xE649, 0xA543, + 0xE64A, 0xA544, + 0xE64B, 0xA545, + 0xE64C, 0xA546, + 0xE64D, 0xA547, + 0xE64E, 0xA548, + 0xE64F, 0xA549, + 0xE650, 0xA54A, + 0xE651, 0xA54B, + 0xE652, 0xA54C, + 0xE653, 0xA54D, + 0xE654, 0xA54E, + 0xE655, 0xA54F, + 0xE656, 0xA550, + 0xE657, 0xA551, + 0xE658, 0xA552, + 0xE659, 0xA553, + 0xE65A, 0xA554, + 0xE65B, 0xA555, + 0xE65C, 0xA556, + 0xE65D, 0xA557, + 0xE65E, 0xA558, + 0xE65F, 0xA559, + 0xE660, 0xA55A, + 0xE661, 0xA55B, + 0xE662, 0xA55C, + 0xE663, 0xA55D, + 0xE664, 0xA55E, + 0xE665, 0xA55F, + 0xE666, 0xA560, + 0xE667, 0xA561, + 0xE668, 0xA562, + 0xE669, 0xA563, + 0xE66A, 0xA564, + 0xE66B, 0xA565, + 0xE66C, 0xA566, + 0xE66D, 0xA567, + 0xE66E, 0xA568, + 0xE66F, 0xA569, + 0xE670, 0xA56A, + 0xE671, 0xA56B, + 0xE672, 0xA56C, + 0xE673, 0xA56D, + 0xE674, 0xA56E, + 0xE675, 0xA56F, + 0xE676, 0xA570, + 0xE677, 0xA571, + 0xE678, 0xA572, + 0xE679, 0xA573, + 0xE67A, 0xA574, + 0xE67B, 0xA575, + 0xE67C, 0xA576, + 0xE67D, 0xA577, + 0xE67E, 0xA578, + 0xE67F, 0xA579, + 0xE680, 0xA57A, + 0xE681, 0xA57B, + 0xE682, 0xA57C, + 0xE683, 0xA57D, + 0xE684, 0xA57E, + 0xE685, 0xA580, + 0xE686, 0xA581, + 0xE687, 0xA582, + 0xE688, 0xA583, + 0xE689, 0xA584, + 0xE68A, 0xA585, + 0xE68B, 0xA586, + 0xE68C, 0xA587, + 0xE68D, 0xA588, + 0xE68E, 0xA589, + 0xE68F, 0xA58A, + 0xE690, 0xA58B, + 0xE691, 0xA58C, + 0xE692, 0xA58D, + 0xE693, 0xA58E, + 0xE694, 0xA58F, + 0xE695, 0xA590, + 0xE696, 0xA591, + 0xE697, 0xA592, + 0xE698, 0xA593, + 0xE699, 0xA594, + 0xE69A, 0xA595, + 0xE69B, 0xA596, + 0xE69C, 0xA597, + 0xE69D, 0xA598, + 0xE69E, 0xA599, + 0xE69F, 0xA59A, + 0xE6A0, 0xA59B, + 0xE6A1, 0xA59C, + 0xE6A2, 0xA59D, + 0xE6A3, 0xA59E, + 0xE6A4, 0xA59F, + 0xE6A5, 0xA5A0, + 0xE6A6, 0xA640, + 0xE6A7, 0xA641, + 0xE6A8, 0xA642, + 0xE6A9, 0xA643, + 0xE6AA, 0xA644, + 0xE6AB, 0xA645, + 0xE6AC, 0xA646, + 0xE6AD, 0xA647, + 0xE6AE, 0xA648, + 0xE6AF, 0xA649, + 0xE6B0, 0xA64A, + 0xE6B1, 0xA64B, + 0xE6B2, 0xA64C, + 0xE6B3, 0xA64D, + 0xE6B4, 0xA64E, + 0xE6B5, 0xA64F, + 0xE6B6, 0xA650, + 0xE6B7, 0xA651, + 0xE6B8, 0xA652, + 0xE6B9, 0xA653, + 0xE6BA, 0xA654, + 0xE6BB, 0xA655, + 0xE6BC, 0xA656, + 0xE6BD, 0xA657, + 0xE6BE, 0xA658, + 0xE6BF, 0xA659, + 0xE6C0, 0xA65A, + 0xE6C1, 0xA65B, + 0xE6C2, 0xA65C, + 0xE6C3, 0xA65D, + 0xE6C4, 0xA65E, + 0xE6C5, 0xA65F, + 0xE6C6, 0xA660, + 0xE6C7, 0xA661, + 0xE6C8, 0xA662, + 0xE6C9, 0xA663, + 0xE6CA, 0xA664, + 0xE6CB, 0xA665, + 0xE6CC, 0xA666, + 0xE6CD, 0xA667, + 0xE6CE, 0xA668, + 0xE6CF, 0xA669, + 0xE6D0, 0xA66A, + 0xE6D1, 0xA66B, + 0xE6D2, 0xA66C, + 0xE6D3, 0xA66D, + 0xE6D4, 0xA66E, + 0xE6D5, 0xA66F, + 0xE6D6, 0xA670, + 0xE6D7, 0xA671, + 0xE6D8, 0xA672, + 0xE6D9, 0xA673, + 0xE6DA, 0xA674, + 0xE6DB, 0xA675, + 0xE6DC, 0xA676, + 0xE6DD, 0xA677, + 0xE6DE, 0xA678, + 0xE6DF, 0xA679, + 0xE6E0, 0xA67A, + 0xE6E1, 0xA67B, + 0xE6E2, 0xA67C, + 0xE6E3, 0xA67D, + 0xE6E4, 0xA67E, + 0xE6E5, 0xA680, + 0xE6E6, 0xA681, + 0xE6E7, 0xA682, + 0xE6E8, 0xA683, + 0xE6E9, 0xA684, + 0xE6EA, 0xA685, + 0xE6EB, 0xA686, + 0xE6EC, 0xA687, + 0xE6ED, 0xA688, + 0xE6EE, 0xA689, + 0xE6EF, 0xA68A, + 0xE6F0, 0xA68B, + 0xE6F1, 0xA68C, + 0xE6F2, 0xA68D, + 0xE6F3, 0xA68E, + 0xE6F4, 0xA68F, + 0xE6F5, 0xA690, + 0xE6F6, 0xA691, + 0xE6F7, 0xA692, + 0xE6F8, 0xA693, + 0xE6F9, 0xA694, + 0xE6FA, 0xA695, + 0xE6FB, 0xA696, + 0xE6FC, 0xA697, + 0xE6FD, 0xA698, + 0xE6FE, 0xA699, + 0xE6FF, 0xA69A, + 0xE700, 0xA69B, + 0xE701, 0xA69C, + 0xE702, 0xA69D, + 0xE703, 0xA69E, + 0xE704, 0xA69F, + 0xE705, 0xA6A0, + 0xE706, 0xA740, + 0xE707, 0xA741, + 0xE708, 0xA742, + 0xE709, 0xA743, + 0xE70A, 0xA744, + 0xE70B, 0xA745, + 0xE70C, 0xA746, + 0xE70D, 0xA747, + 0xE70E, 0xA748, + 0xE70F, 0xA749, + 0xE710, 0xA74A, + 0xE711, 0xA74B, + 0xE712, 0xA74C, + 0xE713, 0xA74D, + 0xE714, 0xA74E, + 0xE715, 0xA74F, + 0xE716, 0xA750, + 0xE717, 0xA751, + 0xE718, 0xA752, + 0xE719, 0xA753, + 0xE71A, 0xA754, + 0xE71B, 0xA755, + 0xE71C, 0xA756, + 0xE71D, 0xA757, + 0xE71E, 0xA758, + 0xE71F, 0xA759, + 0xE720, 0xA75A, + 0xE721, 0xA75B, + 0xE722, 0xA75C, + 0xE723, 0xA75D, + 0xE724, 0xA75E, + 0xE725, 0xA75F, + 0xE726, 0xA760, + 0xE727, 0xA761, + 0xE728, 0xA762, + 0xE729, 0xA763, + 0xE72A, 0xA764, + 0xE72B, 0xA765, + 0xE72C, 0xA766, + 0xE72D, 0xA767, + 0xE72E, 0xA768, + 0xE72F, 0xA769, + 0xE730, 0xA76A, + 0xE731, 0xA76B, + 0xE732, 0xA76C, + 0xE733, 0xA76D, + 0xE734, 0xA76E, + 0xE735, 0xA76F, + 0xE736, 0xA770, + 0xE737, 0xA771, + 0xE738, 0xA772, + 0xE739, 0xA773, + 0xE73A, 0xA774, + 0xE73B, 0xA775, + 0xE73C, 0xA776, + 0xE73D, 0xA777, + 0xE73E, 0xA778, + 0xE73F, 0xA779, + 0xE740, 0xA77A, + 0xE741, 0xA77B, + 0xE742, 0xA77C, + 0xE743, 0xA77D, + 0xE744, 0xA77E, + 0xE745, 0xA780, + 0xE746, 0xA781, + 0xE747, 0xA782, + 0xE748, 0xA783, + 0xE749, 0xA784, + 0xE74A, 0xA785, + 0xE74B, 0xA786, + 0xE74C, 0xA787, + 0xE74D, 0xA788, + 0xE74E, 0xA789, + 0xE74F, 0xA78A, + 0xE750, 0xA78B, + 0xE751, 0xA78C, + 0xE752, 0xA78D, + 0xE753, 0xA78E, + 0xE754, 0xA78F, + 0xE755, 0xA790, + 0xE756, 0xA791, + 0xE757, 0xA792, + 0xE758, 0xA793, + 0xE759, 0xA794, + 0xE75A, 0xA795, + 0xE75B, 0xA796, + 0xE75C, 0xA797, + 0xE75D, 0xA798, + 0xE75E, 0xA799, + 0xE75F, 0xA79A, + 0xE760, 0xA79B, + 0xE761, 0xA79C, + 0xE762, 0xA79D, + 0xE763, 0xA79E, + 0xE764, 0xA79F, + 0xE765, 0xA7A0, + 0xE766, 0xA2AB, + 0xE767, 0xA2AC, + 0xE768, 0xA2AD, + 0xE769, 0xA2AE, + 0xE76A, 0xA2AF, + 0xE76B, 0xA2B0, + 0xE76D, 0xA2E4, + 0xE76E, 0xA2EF, + 0xE76F, 0xA2F0, + 0xE770, 0xA2FD, + 0xE771, 0xA2FE, + 0xE772, 0xA4F4, + 0xE773, 0xA4F5, + 0xE774, 0xA4F6, + 0xE775, 0xA4F7, + 0xE776, 0xA4F8, + 0xE777, 0xA4F9, + 0xE778, 0xA4FA, + 0xE779, 0xA4FB, + 0xE77A, 0xA4FC, + 0xE77B, 0xA4FD, + 0xE77C, 0xA4FE, + 0xE77D, 0xA5F7, + 0xE77E, 0xA5F8, + 0xE77F, 0xA5F9, + 0xE780, 0xA5FA, + 0xE781, 0xA5FB, + 0xE782, 0xA5FC, + 0xE783, 0xA5FD, + 0xE784, 0xA5FE, + 0xE785, 0xA6B9, + 0xE786, 0xA6BA, + 0xE787, 0xA6BB, + 0xE788, 0xA6BC, + 0xE789, 0xA6BD, + 0xE78A, 0xA6BE, + 0xE78B, 0xA6BF, + 0xE78C, 0xA6C0, + 0xE78D, 0xA6D9, + 0xE78E, 0xA6DA, + 0xE78F, 0xA6DB, + 0xE790, 0xA6DC, + 0xE791, 0xA6DD, + 0xE792, 0xA6DE, + 0xE793, 0xA6DF, + 0xE794, 0xA6EC, + 0xE795, 0xA6ED, + 0xE796, 0xA6F3, + 0xE797, 0xA6F6, + 0xE798, 0xA6F7, + 0xE799, 0xA6F8, + 0xE79A, 0xA6F9, + 0xE79B, 0xA6FA, + 0xE79C, 0xA6FB, + 0xE79D, 0xA6FC, + 0xE79E, 0xA6FD, + 0xE79F, 0xA6FE, + 0xE7A0, 0xA7C2, + 0xE7A1, 0xA7C3, + 0xE7A2, 0xA7C4, + 0xE7A3, 0xA7C5, + 0xE7A4, 0xA7C6, + 0xE7A5, 0xA7C7, + 0xE7A6, 0xA7C8, + 0xE7A7, 0xA7C9, + 0xE7A8, 0xA7CA, + 0xE7A9, 0xA7CB, + 0xE7AA, 0xA7CC, + 0xE7AB, 0xA7CD, + 0xE7AC, 0xA7CE, + 0xE7AD, 0xA7CF, + 0xE7AE, 0xA7D0, + 0xE7AF, 0xA7F2, + 0xE7B0, 0xA7F3, + 0xE7B1, 0xA7F4, + 0xE7B2, 0xA7F5, + 0xE7B3, 0xA7F6, + 0xE7B4, 0xA7F7, + 0xE7B5, 0xA7F8, + 0xE7B6, 0xA7F9, + 0xE7B7, 0xA7FA, + 0xE7B8, 0xA7FB, + 0xE7B9, 0xA7FC, + 0xE7BA, 0xA7FD, + 0xE7BB, 0xA7FE, + 0xE7BC, 0xA896, + 0xE7BD, 0xA897, + 0xE7BE, 0xA898, + 0xE7BF, 0xA899, + 0xE7C0, 0xA89A, + 0xE7C1, 0xA89B, + 0xE7C2, 0xA89C, + 0xE7C3, 0xA89D, + 0xE7C4, 0xA89E, + 0xE7C5, 0xA89F, + 0xE7C6, 0xA8A0, + 0xE7C7, 0xA8BC, + 0xE7C9, 0xA8C1, + 0xE7CA, 0xA8C2, + 0xE7CB, 0xA8C3, + 0xE7CC, 0xA8C4, + 0xE7CD, 0xA8EA, + 0xE7CE, 0xA8EB, + 0xE7CF, 0xA8EC, + 0xE7D0, 0xA8ED, + 0xE7D1, 0xA8EE, + 0xE7D2, 0xA8EF, + 0xE7D3, 0xA8F0, + 0xE7D4, 0xA8F1, + 0xE7D5, 0xA8F2, + 0xE7D6, 0xA8F3, + 0xE7D7, 0xA8F4, + 0xE7D8, 0xA8F5, + 0xE7D9, 0xA8F6, + 0xE7DA, 0xA8F7, + 0xE7DB, 0xA8F8, + 0xE7DC, 0xA8F9, + 0xE7DD, 0xA8FA, + 0xE7DE, 0xA8FB, + 0xE7DF, 0xA8FC, + 0xE7E0, 0xA8FD, + 0xE7E1, 0xA8FE, + 0xE7E2, 0xA958, + 0xE7E3, 0xA95B, + 0xE7E4, 0xA95D, + 0xE7E5, 0xA95E, + 0xE7E6, 0xA95F, + 0xE7F4, 0xA997, + 0xE7F5, 0xA998, + 0xE7F6, 0xA999, + 0xE7F7, 0xA99A, + 0xE7F8, 0xA99B, + 0xE7F9, 0xA99C, + 0xE7FA, 0xA99D, + 0xE7FB, 0xA99E, + 0xE7FC, 0xA99F, + 0xE7FD, 0xA9A0, + 0xE7FE, 0xA9A1, + 0xE7FF, 0xA9A2, + 0xE800, 0xA9A3, + 0xE801, 0xA9F0, + 0xE802, 0xA9F1, + 0xE803, 0xA9F2, + 0xE804, 0xA9F3, + 0xE805, 0xA9F4, + 0xE806, 0xA9F5, + 0xE807, 0xA9F6, + 0xE808, 0xA9F7, + 0xE809, 0xA9F8, + 0xE80A, 0xA9F9, + 0xE80B, 0xA9FA, + 0xE80C, 0xA9FB, + 0xE80D, 0xA9FC, + 0xE80E, 0xA9FD, + 0xE80F, 0xA9FE, + 0xE810, 0xD7FA, + 0xE811, 0xD7FB, + 0xE812, 0xD7FC, + 0xE813, 0xD7FD, + 0xE814, 0xD7FE, + 0xE816, 0xFE51, + 0xE817, 0xFE52, + 0xE818, 0xFE53, + 0xE81E, 0xFE59, + 0xE826, 0xFE61, + 0xE82B, 0xFE66, + 0xE82C, 0xFE67, + 0xE831, 0xFE6C, + 0xE832, 0xFE6D, + 0xE83B, 0xFE76, + 0xE843, 0xFE7E, + 0xE854, 0xFE90, + 0xE855, 0xFE91, + 0xE864, 0xFEA0, + 0xF92C, 0xFD9C, + 0xF979, 0xFD9D, + 0xF995, 0xFD9E, + 0xF9E7, 0xFD9F, + 0xF9F1, 0xFDA0, + 0xFA0C, 0xFE40, + 0xFA0D, 0xFE41, + 0xFA0E, 0xFE42, + 0xFA0F, 0xFE43, + 0xFA11, 0xFE44, + 0xFA13, 0xFE45, + 0xFA14, 0xFE46, + 0xFA18, 0xFE47, + 0xFA1F, 0xFE48, + 0xFA20, 0xFE49, + 0xFA21, 0xFE4A, + 0xFA23, 0xFE4B, + 0xFA24, 0xFE4C, + 0xFA27, 0xFE4D, + 0xFA28, 0xFE4E, + 0xFA29, 0xFE4F, + 0xFE30, 0xA955, + 0xFE31, 0xA6F2, + 0xFE33, 0xA6F4, + 0xFE34, 0xA6F5, + 0xFE35, 0xA6E0, + 0xFE36, 0xA6E1, + 0xFE37, 0xA6F0, + 0xFE38, 0xA6F1, + 0xFE39, 0xA6E2, + 0xFE3A, 0xA6E3, + 0xFE3B, 0xA6EE, + 0xFE3C, 0xA6EF, + 0xFE3D, 0xA6E6, + 0xFE3E, 0xA6E7, + 0xFE3F, 0xA6E4, + 0xFE40, 0xA6E5, + 0xFE41, 0xA6E8, + 0xFE42, 0xA6E9, + 0xFE43, 0xA6EA, + 0xFE44, 0xA6EB, + 0xFE49, 0xA968, + 0xFE4A, 0xA969, + 0xFE4B, 0xA96A, + 0xFE4C, 0xA96B, + 0xFE4D, 0xA96C, + 0xFE4E, 0xA96D, + 0xFE4F, 0xA96E, + 0xFE50, 0xA96F, + 0xFE51, 0xA970, + 0xFE52, 0xA971, + 0xFE54, 0xA972, + 0xFE55, 0xA973, + 0xFE56, 0xA974, + 0xFE57, 0xA975, + 0xFE59, 0xA976, + 0xFE5A, 0xA977, + 0xFE5B, 0xA978, + 0xFE5C, 0xA979, + 0xFE5D, 0xA97A, + 0xFE5E, 0xA97B, + 0xFE5F, 0xA97C, + 0xFE60, 0xA97D, + 0xFE61, 0xA97E, + 0xFE62, 0xA980, + 0xFE63, 0xA981, + 0xFE64, 0xA982, + 0xFE65, 0xA983, + 0xFE66, 0xA984, + 0xFE68, 0xA985, + 0xFE69, 0xA986, + 0xFE6A, 0xA987, + 0xFE6B, 0xA988, + 0xFFE2, 0xA956, + 0xFFE4, 0xA957 +}; -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -INTERNAL int gb18030_wctomb_zint(unsigned int* r1, unsigned int* r2, unsigned int wc); -INTERNAL int gb18030_utf8tomb(struct zint_symbol *symbol, const unsigned char source[], size_t* p_length, unsigned int* gbdata); -INTERNAL int gb18030_utf8tosb(int eci, const unsigned char source[], size_t* p_length, unsigned int* gbdata, int full_multibyte); -INTERNAL void gb18030_cpy(const unsigned char source[], size_t* p_length, unsigned int* gbdata, int full_multibyte); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* GB18030_H */ +static const unsigned short int gb18030_fourbyte_lookup[] = { + 0x0080, 0x8130, 0x8130, + 0x0081, 0x8130, 0x8131, + 0x0082, 0x8130, 0x8132, + 0x0083, 0x8130, 0x8133, + 0x0084, 0x8130, 0x8134, + 0x0085, 0x8130, 0x8135, + 0x0086, 0x8130, 0x8136, + 0x0087, 0x8130, 0x8137, + 0x0088, 0x8130, 0x8138, + 0x0089, 0x8130, 0x8139, + 0x008A, 0x8130, 0x8230, + 0x008B, 0x8130, 0x8231, + 0x008C, 0x8130, 0x8232, + 0x008D, 0x8130, 0x8233, + 0x008E, 0x8130, 0x8234, + 0x008F, 0x8130, 0x8235, + 0x0090, 0x8130, 0x8236, + 0x0091, 0x8130, 0x8237, + 0x0092, 0x8130, 0x8238, + 0x0093, 0x8130, 0x8239, + 0x0094, 0x8130, 0x8330, + 0x0095, 0x8130, 0x8331, + 0x0096, 0x8130, 0x8332, + 0x0097, 0x8130, 0x8333, + 0x0098, 0x8130, 0x8334, + 0x0099, 0x8130, 0x8335, + 0x009A, 0x8130, 0x8336, + 0x009B, 0x8130, 0x8337, + 0x009C, 0x8130, 0x8338, + 0x009D, 0x8130, 0x8339, + 0x009E, 0x8130, 0x8430, + 0x009F, 0x8130, 0x8431, + 0x00A0, 0x8130, 0x8432, + 0x00A1, 0x8130, 0x8433, + 0x00A2, 0x8130, 0x8434, + 0x00A3, 0x8130, 0x8435, + 0x00A5, 0x8130, 0x8436, + 0x00A6, 0x8130, 0x8437, + 0x00A9, 0x8130, 0x8438, + 0x00AA, 0x8130, 0x8439, + 0x00AB, 0x8130, 0x8530, + 0x00AC, 0x8130, 0x8531, + 0x00AD, 0x8130, 0x8532, + 0x00AE, 0x8130, 0x8533, + 0x00AF, 0x8130, 0x8534, + 0x00B2, 0x8130, 0x8535, + 0x00B3, 0x8130, 0x8536, + 0x00B4, 0x8130, 0x8537, + 0x00B5, 0x8130, 0x8538, + 0x00B6, 0x8130, 0x8539, + 0x00B8, 0x8130, 0x8630, + 0x00B9, 0x8130, 0x8631, + 0x00BA, 0x8130, 0x8632, + 0x00BB, 0x8130, 0x8633, + 0x00BC, 0x8130, 0x8634, + 0x00BD, 0x8130, 0x8635, + 0x00BE, 0x8130, 0x8636, + 0x00BF, 0x8130, 0x8637, + 0x00C0, 0x8130, 0x8638, + 0x00C1, 0x8130, 0x8639, + 0x00C2, 0x8130, 0x8730, + 0x00C3, 0x8130, 0x8731, + 0x00C4, 0x8130, 0x8732, + 0x00C5, 0x8130, 0x8733, + 0x00C6, 0x8130, 0x8734, + 0x00C7, 0x8130, 0x8735, + 0x00C8, 0x8130, 0x8736, + 0x00C9, 0x8130, 0x8737, + 0x00CA, 0x8130, 0x8738, + 0x00CB, 0x8130, 0x8739, + 0x00CC, 0x8130, 0x8830, + 0x00CD, 0x8130, 0x8831, + 0x00CE, 0x8130, 0x8832, + 0x00CF, 0x8130, 0x8833, + 0x00D0, 0x8130, 0x8834, + 0x00D1, 0x8130, 0x8835, + 0x00D2, 0x8130, 0x8836, + 0x00D3, 0x8130, 0x8837, + 0x00D4, 0x8130, 0x8838, + 0x00D5, 0x8130, 0x8839, + 0x00D6, 0x8130, 0x8930, + 0x00D8, 0x8130, 0x8931, + 0x00D9, 0x8130, 0x8932, + 0x00DA, 0x8130, 0x8933, + 0x00DB, 0x8130, 0x8934, + 0x00DC, 0x8130, 0x8935, + 0x00DD, 0x8130, 0x8936, + 0x00DE, 0x8130, 0x8937, + 0x00DF, 0x8130, 0x8938, + 0x00E2, 0x8130, 0x8939, + 0x00E3, 0x8130, 0x8A30, + 0x00E4, 0x8130, 0x8A31, + 0x00E5, 0x8130, 0x8A32, + 0x00E6, 0x8130, 0x8A33, + 0x00E7, 0x8130, 0x8A34, + 0x00EB, 0x8130, 0x8A35, + 0x00EE, 0x8130, 0x8A36, + 0x00EF, 0x8130, 0x8A37, + 0x00F0, 0x8130, 0x8A38, + 0x00F1, 0x8130, 0x8A39, + 0x00F4, 0x8130, 0x8B30, + 0x00F5, 0x8130, 0x8B31, + 0x00F6, 0x8130, 0x8B32, + 0x00F8, 0x8130, 0x8B33, + 0x00FB, 0x8130, 0x8B34, + 0x00FD, 0x8130, 0x8B35, + 0x00FE, 0x8130, 0x8B36, + 0x00FF, 0x8130, 0x8B37, + 0x0100, 0x8130, 0x8B38, + 0x0102, 0x8130, 0x8B39, + 0x0103, 0x8130, 0x8C30, + 0x0104, 0x8130, 0x8C31, + 0x0105, 0x8130, 0x8C32, + 0x0106, 0x8130, 0x8C33, + 0x0107, 0x8130, 0x8C34, + 0x0108, 0x8130, 0x8C35, + 0x0109, 0x8130, 0x8C36, + 0x010A, 0x8130, 0x8C37, + 0x010B, 0x8130, 0x8C38, + 0x010C, 0x8130, 0x8C39, + 0x010D, 0x8130, 0x8D30, + 0x010E, 0x8130, 0x8D31, + 0x010F, 0x8130, 0x8D32, + 0x0110, 0x8130, 0x8D33, + 0x0111, 0x8130, 0x8D34, + 0x0112, 0x8130, 0x8D35, + 0x0114, 0x8130, 0x8D36, + 0x0115, 0x8130, 0x8D37, + 0x0116, 0x8130, 0x8D38, + 0x0117, 0x8130, 0x8D39, + 0x0118, 0x8130, 0x8E30, + 0x0119, 0x8130, 0x8E31, + 0x011A, 0x8130, 0x8E32, + 0x011C, 0x8130, 0x8E33, + 0x011D, 0x8130, 0x8E34, + 0x011E, 0x8130, 0x8E35, + 0x011F, 0x8130, 0x8E36, + 0x0120, 0x8130, 0x8E37, + 0x0121, 0x8130, 0x8E38, + 0x0122, 0x8130, 0x8E39, + 0x0123, 0x8130, 0x8F30, + 0x0124, 0x8130, 0x8F31, + 0x0125, 0x8130, 0x8F32, + 0x0126, 0x8130, 0x8F33, + 0x0127, 0x8130, 0x8F34, + 0x0128, 0x8130, 0x8F35, + 0x0129, 0x8130, 0x8F36, + 0x012A, 0x8130, 0x8F37, + 0x012C, 0x8130, 0x8F38, + 0x012D, 0x8130, 0x8F39, + 0x012E, 0x8130, 0x9030, + 0x012F, 0x8130, 0x9031, + 0x0130, 0x8130, 0x9032, + 0x0131, 0x8130, 0x9033, + 0x0132, 0x8130, 0x9034, + 0x0133, 0x8130, 0x9035, + 0x0134, 0x8130, 0x9036, + 0x0135, 0x8130, 0x9037, + 0x0136, 0x8130, 0x9038, + 0x0137, 0x8130, 0x9039, + 0x0138, 0x8130, 0x9130, + 0x0139, 0x8130, 0x9131, + 0x013A, 0x8130, 0x9132, + 0x013B, 0x8130, 0x9133, + 0x013C, 0x8130, 0x9134, + 0x013D, 0x8130, 0x9135, + 0x013E, 0x8130, 0x9136, + 0x013F, 0x8130, 0x9137, + 0x0140, 0x8130, 0x9138, + 0x0141, 0x8130, 0x9139, + 0x0142, 0x8130, 0x9230, + 0x0143, 0x8130, 0x9231, + 0x0145, 0x8130, 0x9232, + 0x0146, 0x8130, 0x9233, + 0x0147, 0x8130, 0x9234, + 0x0149, 0x8130, 0x9235, + 0x014A, 0x8130, 0x9236, + 0x014B, 0x8130, 0x9237, + 0x014C, 0x8130, 0x9238, + 0x014E, 0x8130, 0x9239, + 0x014F, 0x8130, 0x9330, + 0x0150, 0x8130, 0x9331, + 0x0151, 0x8130, 0x9332, + 0x0152, 0x8130, 0x9333, + 0x0153, 0x8130, 0x9334, + 0x0154, 0x8130, 0x9335, + 0x0155, 0x8130, 0x9336, + 0x0156, 0x8130, 0x9337, + 0x0157, 0x8130, 0x9338, + 0x0158, 0x8130, 0x9339, + 0x0159, 0x8130, 0x9430, + 0x015A, 0x8130, 0x9431, + 0x015B, 0x8130, 0x9432, + 0x015C, 0x8130, 0x9433, + 0x015D, 0x8130, 0x9434, + 0x015E, 0x8130, 0x9435, + 0x015F, 0x8130, 0x9436, + 0x0160, 0x8130, 0x9437, + 0x0161, 0x8130, 0x9438, + 0x0162, 0x8130, 0x9439, + 0x0163, 0x8130, 0x9530, + 0x0164, 0x8130, 0x9531, + 0x0165, 0x8130, 0x9532, + 0x0166, 0x8130, 0x9533, + 0x0167, 0x8130, 0x9534, + 0x0168, 0x8130, 0x9535, + 0x0169, 0x8130, 0x9536, + 0x016A, 0x8130, 0x9537, + 0x016C, 0x8130, 0x9538, + 0x016D, 0x8130, 0x9539, + 0x016E, 0x8130, 0x9630, + 0x016F, 0x8130, 0x9631, + 0x0170, 0x8130, 0x9632, + 0x0171, 0x8130, 0x9633, + 0x0172, 0x8130, 0x9634, + 0x0173, 0x8130, 0x9635, + 0x0174, 0x8130, 0x9636, + 0x0175, 0x8130, 0x9637, + 0x0176, 0x8130, 0x9638, + 0x0177, 0x8130, 0x9639, + 0x0178, 0x8130, 0x9730, + 0x0179, 0x8130, 0x9731, + 0x017A, 0x8130, 0x9732, + 0x017B, 0x8130, 0x9733, + 0x017C, 0x8130, 0x9734, + 0x017D, 0x8130, 0x9735, + 0x017E, 0x8130, 0x9736, + 0x017F, 0x8130, 0x9737, + 0x0180, 0x8130, 0x9738, + 0x0181, 0x8130, 0x9739, + 0x0182, 0x8130, 0x9830, + 0x0183, 0x8130, 0x9831, + 0x0184, 0x8130, 0x9832, + 0x0185, 0x8130, 0x9833, + 0x0186, 0x8130, 0x9834, + 0x0187, 0x8130, 0x9835, + 0x0188, 0x8130, 0x9836, + 0x0189, 0x8130, 0x9837, + 0x018A, 0x8130, 0x9838, + 0x018B, 0x8130, 0x9839, + 0x018C, 0x8130, 0x9930, + 0x018D, 0x8130, 0x9931, + 0x018E, 0x8130, 0x9932, + 0x018F, 0x8130, 0x9933, + 0x0190, 0x8130, 0x9934, + 0x0191, 0x8130, 0x9935, + 0x0192, 0x8130, 0x9936, + 0x0193, 0x8130, 0x9937, + 0x0194, 0x8130, 0x9938, + 0x0195, 0x8130, 0x9939, + 0x0196, 0x8130, 0x9A30, + 0x0197, 0x8130, 0x9A31, + 0x0198, 0x8130, 0x9A32, + 0x0199, 0x8130, 0x9A33, + 0x019A, 0x8130, 0x9A34, + 0x019B, 0x8130, 0x9A35, + 0x019C, 0x8130, 0x9A36, + 0x019D, 0x8130, 0x9A37, + 0x019E, 0x8130, 0x9A38, + 0x019F, 0x8130, 0x9A39, + 0x01A0, 0x8130, 0x9B30, + 0x01A1, 0x8130, 0x9B31, + 0x01A2, 0x8130, 0x9B32, + 0x01A3, 0x8130, 0x9B33, + 0x01A4, 0x8130, 0x9B34, + 0x01A5, 0x8130, 0x9B35, + 0x01A6, 0x8130, 0x9B36, + 0x01A7, 0x8130, 0x9B37, + 0x01A8, 0x8130, 0x9B38, + 0x01A9, 0x8130, 0x9B39, + 0x01AA, 0x8130, 0x9C30, + 0x01AB, 0x8130, 0x9C31, + 0x01AC, 0x8130, 0x9C32, + 0x01AD, 0x8130, 0x9C33, + 0x01AE, 0x8130, 0x9C34, + 0x01AF, 0x8130, 0x9C35, + 0x01B0, 0x8130, 0x9C36, + 0x01B1, 0x8130, 0x9C37, + 0x01B2, 0x8130, 0x9C38, + 0x01B3, 0x8130, 0x9C39, + 0x01B4, 0x8130, 0x9D30, + 0x01B5, 0x8130, 0x9D31, + 0x01B6, 0x8130, 0x9D32, + 0x01B7, 0x8130, 0x9D33, + 0x01B8, 0x8130, 0x9D34, + 0x01B9, 0x8130, 0x9D35, + 0x01BA, 0x8130, 0x9D36, + 0x01BB, 0x8130, 0x9D37, + 0x01BC, 0x8130, 0x9D38, + 0x01BD, 0x8130, 0x9D39, + 0x01BE, 0x8130, 0x9E30, + 0x01BF, 0x8130, 0x9E31, + 0x01C0, 0x8130, 0x9E32, + 0x01C1, 0x8130, 0x9E33, + 0x01C2, 0x8130, 0x9E34, + 0x01C3, 0x8130, 0x9E35, + 0x01C4, 0x8130, 0x9E36, + 0x01C5, 0x8130, 0x9E37, + 0x01C6, 0x8130, 0x9E38, + 0x01C7, 0x8130, 0x9E39, + 0x01C8, 0x8130, 0x9F30, + 0x01C9, 0x8130, 0x9F31, + 0x01CA, 0x8130, 0x9F32, + 0x01CB, 0x8130, 0x9F33, + 0x01CC, 0x8130, 0x9F34, + 0x01CD, 0x8130, 0x9F35, + 0x01CF, 0x8130, 0x9F36, + 0x01D1, 0x8130, 0x9F37, + 0x01D3, 0x8130, 0x9F38, + 0x01D5, 0x8130, 0x9F39, + 0x01D7, 0x8130, 0xA030, + 0x01D9, 0x8130, 0xA031, + 0x01DB, 0x8130, 0xA032, + 0x01DD, 0x8130, 0xA033, + 0x01DE, 0x8130, 0xA034, + 0x01DF, 0x8130, 0xA035, + 0x01E0, 0x8130, 0xA036, + 0x01E1, 0x8130, 0xA037, + 0x01E2, 0x8130, 0xA038, + 0x01E3, 0x8130, 0xA039, + 0x01E4, 0x8130, 0xA130, + 0x01E5, 0x8130, 0xA131, + 0x01E6, 0x8130, 0xA132, + 0x01E7, 0x8130, 0xA133, + 0x01E8, 0x8130, 0xA134, + 0x01E9, 0x8130, 0xA135, + 0x01EA, 0x8130, 0xA136, + 0x01EB, 0x8130, 0xA137, + 0x01EC, 0x8130, 0xA138, + 0x01ED, 0x8130, 0xA139, + 0x01EE, 0x8130, 0xA230, + 0x01EF, 0x8130, 0xA231, + 0x01F0, 0x8130, 0xA232, + 0x01F1, 0x8130, 0xA233, + 0x01F2, 0x8130, 0xA234, + 0x01F3, 0x8130, 0xA235, + 0x01F4, 0x8130, 0xA236, + 0x01F5, 0x8130, 0xA237, + 0x01F6, 0x8130, 0xA238, + 0x01F7, 0x8130, 0xA239, + 0x01F8, 0x8130, 0xA330, + 0x01FA, 0x8130, 0xA331, + 0x01FB, 0x8130, 0xA332, + 0x01FC, 0x8130, 0xA333, + 0x01FD, 0x8130, 0xA334, + 0x01FE, 0x8130, 0xA335, + 0x01FF, 0x8130, 0xA336, + 0x0200, 0x8130, 0xA337, + 0x0201, 0x8130, 0xA338, + 0x0202, 0x8130, 0xA339, + 0x0203, 0x8130, 0xA430, + 0x0204, 0x8130, 0xA431, + 0x0205, 0x8130, 0xA432, + 0x0206, 0x8130, 0xA433, + 0x0207, 0x8130, 0xA434, + 0x0208, 0x8130, 0xA435, + 0x0209, 0x8130, 0xA436, + 0x020A, 0x8130, 0xA437, + 0x020B, 0x8130, 0xA438, + 0x020C, 0x8130, 0xA439, + 0x020D, 0x8130, 0xA530, + 0x020E, 0x8130, 0xA531, + 0x020F, 0x8130, 0xA532, + 0x0210, 0x8130, 0xA533, + 0x0211, 0x8130, 0xA534, + 0x0212, 0x8130, 0xA535, + 0x0213, 0x8130, 0xA536, + 0x0214, 0x8130, 0xA537, + 0x0215, 0x8130, 0xA538, + 0x0216, 0x8130, 0xA539, + 0x0217, 0x8130, 0xA630, + 0x0218, 0x8130, 0xA631, + 0x0219, 0x8130, 0xA632, + 0x021A, 0x8130, 0xA633, + 0x021B, 0x8130, 0xA634, + 0x021C, 0x8130, 0xA635, + 0x021D, 0x8130, 0xA636, + 0x021E, 0x8130, 0xA637, + 0x021F, 0x8130, 0xA638, + 0x0220, 0x8130, 0xA639, + 0x0221, 0x8130, 0xA730, + 0x0222, 0x8130, 0xA731, + 0x0223, 0x8130, 0xA732, + 0x0224, 0x8130, 0xA733, + 0x0225, 0x8130, 0xA734, + 0x0226, 0x8130, 0xA735, + 0x0227, 0x8130, 0xA736, + 0x0228, 0x8130, 0xA737, + 0x0229, 0x8130, 0xA738, + 0x022A, 0x8130, 0xA739, + 0x022B, 0x8130, 0xA830, + 0x022C, 0x8130, 0xA831, + 0x022D, 0x8130, 0xA832, + 0x022E, 0x8130, 0xA833, + 0x022F, 0x8130, 0xA834, + 0x0230, 0x8130, 0xA835, + 0x0231, 0x8130, 0xA836, + 0x0232, 0x8130, 0xA837, + 0x0233, 0x8130, 0xA838, + 0x0234, 0x8130, 0xA839, + 0x0235, 0x8130, 0xA930, + 0x0236, 0x8130, 0xA931, + 0x0237, 0x8130, 0xA932, + 0x0238, 0x8130, 0xA933, + 0x0239, 0x8130, 0xA934, + 0x023A, 0x8130, 0xA935, + 0x023B, 0x8130, 0xA936, + 0x023C, 0x8130, 0xA937, + 0x023D, 0x8130, 0xA938, + 0x023E, 0x8130, 0xA939, + 0x023F, 0x8130, 0xAA30, + 0x0240, 0x8130, 0xAA31, + 0x0241, 0x8130, 0xAA32, + 0x0242, 0x8130, 0xAA33, + 0x0243, 0x8130, 0xAA34, + 0x0244, 0x8130, 0xAA35, + 0x0245, 0x8130, 0xAA36, + 0x0246, 0x8130, 0xAA37, + 0x0247, 0x8130, 0xAA38, + 0x0248, 0x8130, 0xAA39, + 0x0249, 0x8130, 0xAB30, + 0x024A, 0x8130, 0xAB31, + 0x024B, 0x8130, 0xAB32, + 0x024C, 0x8130, 0xAB33, + 0x024D, 0x8130, 0xAB34, + 0x024E, 0x8130, 0xAB35, + 0x024F, 0x8130, 0xAB36, + 0x0250, 0x8130, 0xAB37, + 0x0252, 0x8130, 0xAB38, + 0x0253, 0x8130, 0xAB39, + 0x0254, 0x8130, 0xAC30, + 0x0255, 0x8130, 0xAC31, + 0x0256, 0x8130, 0xAC32, + 0x0257, 0x8130, 0xAC33, + 0x0258, 0x8130, 0xAC34, + 0x0259, 0x8130, 0xAC35, + 0x025A, 0x8130, 0xAC36, + 0x025B, 0x8130, 0xAC37, + 0x025C, 0x8130, 0xAC38, + 0x025D, 0x8130, 0xAC39, + 0x025E, 0x8130, 0xAD30, + 0x025F, 0x8130, 0xAD31, + 0x0260, 0x8130, 0xAD32, + 0x0262, 0x8130, 0xAD33, + 0x0263, 0x8130, 0xAD34, + 0x0264, 0x8130, 0xAD35, + 0x0265, 0x8130, 0xAD36, + 0x0266, 0x8130, 0xAD37, + 0x0267, 0x8130, 0xAD38, + 0x0268, 0x8130, 0xAD39, + 0x0269, 0x8130, 0xAE30, + 0x026A, 0x8130, 0xAE31, + 0x026B, 0x8130, 0xAE32, + 0x026C, 0x8130, 0xAE33, + 0x026D, 0x8130, 0xAE34, + 0x026E, 0x8130, 0xAE35, + 0x026F, 0x8130, 0xAE36, + 0x0270, 0x8130, 0xAE37, + 0x0271, 0x8130, 0xAE38, + 0x0272, 0x8130, 0xAE39, + 0x0273, 0x8130, 0xAF30, + 0x0274, 0x8130, 0xAF31, + 0x0275, 0x8130, 0xAF32, + 0x0276, 0x8130, 0xAF33, + 0x0277, 0x8130, 0xAF34, + 0x0278, 0x8130, 0xAF35, + 0x0279, 0x8130, 0xAF36, + 0x027A, 0x8130, 0xAF37, + 0x027B, 0x8130, 0xAF38, + 0x027C, 0x8130, 0xAF39, + 0x027D, 0x8130, 0xB030, + 0x027E, 0x8130, 0xB031, + 0x027F, 0x8130, 0xB032, + 0x0280, 0x8130, 0xB033, + 0x0281, 0x8130, 0xB034, + 0x0282, 0x8130, 0xB035, + 0x0283, 0x8130, 0xB036, + 0x0284, 0x8130, 0xB037, + 0x0285, 0x8130, 0xB038, + 0x0286, 0x8130, 0xB039, + 0x0287, 0x8130, 0xB130, + 0x0288, 0x8130, 0xB131, + 0x0289, 0x8130, 0xB132, + 0x028A, 0x8130, 0xB133, + 0x028B, 0x8130, 0xB134, + 0x028C, 0x8130, 0xB135, + 0x028D, 0x8130, 0xB136, + 0x028E, 0x8130, 0xB137, + 0x028F, 0x8130, 0xB138, + 0x0290, 0x8130, 0xB139, + 0x0291, 0x8130, 0xB230, + 0x0292, 0x8130, 0xB231, + 0x0293, 0x8130, 0xB232, + 0x0294, 0x8130, 0xB233, + 0x0295, 0x8130, 0xB234, + 0x0296, 0x8130, 0xB235, + 0x0297, 0x8130, 0xB236, + 0x0298, 0x8130, 0xB237, + 0x0299, 0x8130, 0xB238, + 0x029A, 0x8130, 0xB239, + 0x029B, 0x8130, 0xB330, + 0x029C, 0x8130, 0xB331, + 0x029D, 0x8130, 0xB332, + 0x029E, 0x8130, 0xB333, + 0x029F, 0x8130, 0xB334, + 0x02A0, 0x8130, 0xB335, + 0x02A1, 0x8130, 0xB336, + 0x02A2, 0x8130, 0xB337, + 0x02A3, 0x8130, 0xB338, + 0x02A4, 0x8130, 0xB339, + 0x02A5, 0x8130, 0xB430, + 0x02A6, 0x8130, 0xB431, + 0x02A7, 0x8130, 0xB432, + 0x02A8, 0x8130, 0xB433, + 0x02A9, 0x8130, 0xB434, + 0x02AA, 0x8130, 0xB435, + 0x02AB, 0x8130, 0xB436, + 0x02AC, 0x8130, 0xB437, + 0x02AD, 0x8130, 0xB438, + 0x02AE, 0x8130, 0xB439, + 0x02AF, 0x8130, 0xB530, + 0x02B0, 0x8130, 0xB531, + 0x02B1, 0x8130, 0xB532, + 0x02B2, 0x8130, 0xB533, + 0x02B3, 0x8130, 0xB534, + 0x02B4, 0x8130, 0xB535, + 0x02B5, 0x8130, 0xB536, + 0x02B6, 0x8130, 0xB537, + 0x02B7, 0x8130, 0xB538, + 0x02B8, 0x8130, 0xB539, + 0x02B9, 0x8130, 0xB630, + 0x02BA, 0x8130, 0xB631, + 0x02BB, 0x8130, 0xB632, + 0x02BC, 0x8130, 0xB633, + 0x02BD, 0x8130, 0xB634, + 0x02BE, 0x8130, 0xB635, + 0x02BF, 0x8130, 0xB636, + 0x02C0, 0x8130, 0xB637, + 0x02C1, 0x8130, 0xB638, + 0x02C2, 0x8130, 0xB639, + 0x02C3, 0x8130, 0xB730, + 0x02C4, 0x8130, 0xB731, + 0x02C5, 0x8130, 0xB732, + 0x02C6, 0x8130, 0xB733, + 0x02C8, 0x8130, 0xB734, + 0x02CC, 0x8130, 0xB735, + 0x02CD, 0x8130, 0xB736, + 0x02CE, 0x8130, 0xB737, + 0x02CF, 0x8130, 0xB738, + 0x02D0, 0x8130, 0xB739, + 0x02D1, 0x8130, 0xB830, + 0x02D2, 0x8130, 0xB831, + 0x02D3, 0x8130, 0xB832, + 0x02D4, 0x8130, 0xB833, + 0x02D5, 0x8130, 0xB834, + 0x02D6, 0x8130, 0xB835, + 0x02D7, 0x8130, 0xB836, + 0x02D8, 0x8130, 0xB837, + 0x02DA, 0x8130, 0xB838, + 0x02DB, 0x8130, 0xB839, + 0x02DC, 0x8130, 0xB930, + 0x02DD, 0x8130, 0xB931, + 0x02DE, 0x8130, 0xB932, + 0x02DF, 0x8130, 0xB933, + 0x02E0, 0x8130, 0xB934, + 0x02E1, 0x8130, 0xB935, + 0x02E2, 0x8130, 0xB936, + 0x02E3, 0x8130, 0xB937, + 0x02E4, 0x8130, 0xB938, + 0x02E5, 0x8130, 0xB939, + 0x02E6, 0x8130, 0xBA30, + 0x02E7, 0x8130, 0xBA31, + 0x02E8, 0x8130, 0xBA32, + 0x02E9, 0x8130, 0xBA33, + 0x02EA, 0x8130, 0xBA34, + 0x02EB, 0x8130, 0xBA35, + 0x02EC, 0x8130, 0xBA36, + 0x02ED, 0x8130, 0xBA37, + 0x02EE, 0x8130, 0xBA38, + 0x02EF, 0x8130, 0xBA39, + 0x02F0, 0x8130, 0xBB30, + 0x02F1, 0x8130, 0xBB31, + 0x02F2, 0x8130, 0xBB32, + 0x02F3, 0x8130, 0xBB33, + 0x02F4, 0x8130, 0xBB34, + 0x02F5, 0x8130, 0xBB35, + 0x02F6, 0x8130, 0xBB36, + 0x02F7, 0x8130, 0xBB37, + 0x02F8, 0x8130, 0xBB38, + 0x02F9, 0x8130, 0xBB39, + 0x02FA, 0x8130, 0xBC30, + 0x02FB, 0x8130, 0xBC31, + 0x02FC, 0x8130, 0xBC32, + 0x02FD, 0x8130, 0xBC33, + 0x02FE, 0x8130, 0xBC34, + 0x02FF, 0x8130, 0xBC35, + 0x0300, 0x8130, 0xBC36, + 0x0301, 0x8130, 0xBC37, + 0x0302, 0x8130, 0xBC38, + 0x0303, 0x8130, 0xBC39, + 0x0304, 0x8130, 0xBD30, + 0x0305, 0x8130, 0xBD31, + 0x0306, 0x8130, 0xBD32, + 0x0307, 0x8130, 0xBD33, + 0x0308, 0x8130, 0xBD34, + 0x0309, 0x8130, 0xBD35, + 0x030A, 0x8130, 0xBD36, + 0x030B, 0x8130, 0xBD37, + 0x030C, 0x8130, 0xBD38, + 0x030D, 0x8130, 0xBD39, + 0x030E, 0x8130, 0xBE30, + 0x030F, 0x8130, 0xBE31, + 0x0310, 0x8130, 0xBE32, + 0x0311, 0x8130, 0xBE33, + 0x0312, 0x8130, 0xBE34, + 0x0313, 0x8130, 0xBE35, + 0x0314, 0x8130, 0xBE36, + 0x0315, 0x8130, 0xBE37, + 0x0316, 0x8130, 0xBE38, + 0x0317, 0x8130, 0xBE39, + 0x0318, 0x8130, 0xBF30, + 0x0319, 0x8130, 0xBF31, + 0x031A, 0x8130, 0xBF32, + 0x031B, 0x8130, 0xBF33, + 0x031C, 0x8130, 0xBF34, + 0x031D, 0x8130, 0xBF35, + 0x031E, 0x8130, 0xBF36, + 0x031F, 0x8130, 0xBF37, + 0x0320, 0x8130, 0xBF38, + 0x0321, 0x8130, 0xBF39, + 0x0322, 0x8130, 0xC030, + 0x0323, 0x8130, 0xC031, + 0x0324, 0x8130, 0xC032, + 0x0325, 0x8130, 0xC033, + 0x0326, 0x8130, 0xC034, + 0x0327, 0x8130, 0xC035, + 0x0328, 0x8130, 0xC036, + 0x0329, 0x8130, 0xC037, + 0x032A, 0x8130, 0xC038, + 0x032B, 0x8130, 0xC039, + 0x032C, 0x8130, 0xC130, + 0x032D, 0x8130, 0xC131, + 0x032E, 0x8130, 0xC132, + 0x032F, 0x8130, 0xC133, + 0x0330, 0x8130, 0xC134, + 0x0331, 0x8130, 0xC135, + 0x0332, 0x8130, 0xC136, + 0x0333, 0x8130, 0xC137, + 0x0334, 0x8130, 0xC138, + 0x0335, 0x8130, 0xC139, + 0x0336, 0x8130, 0xC230, + 0x0337, 0x8130, 0xC231, + 0x0338, 0x8130, 0xC232, + 0x0339, 0x8130, 0xC233, + 0x033A, 0x8130, 0xC234, + 0x033B, 0x8130, 0xC235, + 0x033C, 0x8130, 0xC236, + 0x033D, 0x8130, 0xC237, + 0x033E, 0x8130, 0xC238, + 0x033F, 0x8130, 0xC239, + 0x0340, 0x8130, 0xC330, + 0x0341, 0x8130, 0xC331, + 0x0342, 0x8130, 0xC332, + 0x0343, 0x8130, 0xC333, + 0x0344, 0x8130, 0xC334, + 0x0345, 0x8130, 0xC335, + 0x0346, 0x8130, 0xC336, + 0x0347, 0x8130, 0xC337, + 0x0348, 0x8130, 0xC338, + 0x0349, 0x8130, 0xC339, + 0x034A, 0x8130, 0xC430, + 0x034B, 0x8130, 0xC431, + 0x034C, 0x8130, 0xC432, + 0x034D, 0x8130, 0xC433, + 0x034E, 0x8130, 0xC434, + 0x034F, 0x8130, 0xC435, + 0x0350, 0x8130, 0xC436, + 0x0351, 0x8130, 0xC437, + 0x0352, 0x8130, 0xC438, + 0x0353, 0x8130, 0xC439, + 0x0354, 0x8130, 0xC530, + 0x0355, 0x8130, 0xC531, + 0x0356, 0x8130, 0xC532, + 0x0357, 0x8130, 0xC533, + 0x0358, 0x8130, 0xC534, + 0x0359, 0x8130, 0xC535, + 0x035A, 0x8130, 0xC536, + 0x035B, 0x8130, 0xC537, + 0x035C, 0x8130, 0xC538, + 0x035D, 0x8130, 0xC539, + 0x035E, 0x8130, 0xC630, + 0x035F, 0x8130, 0xC631, + 0x0360, 0x8130, 0xC632, + 0x0361, 0x8130, 0xC633, + 0x0362, 0x8130, 0xC634, + 0x0363, 0x8130, 0xC635, + 0x0364, 0x8130, 0xC636, + 0x0365, 0x8130, 0xC637, + 0x0366, 0x8130, 0xC638, + 0x0367, 0x8130, 0xC639, + 0x0368, 0x8130, 0xC730, + 0x0369, 0x8130, 0xC731, + 0x036A, 0x8130, 0xC732, + 0x036B, 0x8130, 0xC733, + 0x036C, 0x8130, 0xC734, + 0x036D, 0x8130, 0xC735, + 0x036E, 0x8130, 0xC736, + 0x036F, 0x8130, 0xC737, + 0x0370, 0x8130, 0xC738, + 0x0371, 0x8130, 0xC739, + 0x0372, 0x8130, 0xC830, + 0x0373, 0x8130, 0xC831, + 0x0374, 0x8130, 0xC832, + 0x0375, 0x8130, 0xC833, + 0x0376, 0x8130, 0xC834, + 0x0377, 0x8130, 0xC835, + 0x0378, 0x8130, 0xC836, + 0x0379, 0x8130, 0xC837, + 0x037A, 0x8130, 0xC838, + 0x037B, 0x8130, 0xC839, + 0x037C, 0x8130, 0xC930, + 0x037D, 0x8130, 0xC931, + 0x037E, 0x8130, 0xC932, + 0x037F, 0x8130, 0xC933, + 0x0380, 0x8130, 0xC934, + 0x0381, 0x8130, 0xC935, + 0x0382, 0x8130, 0xC936, + 0x0383, 0x8130, 0xC937, + 0x0384, 0x8130, 0xC938, + 0x0385, 0x8130, 0xC939, + 0x0386, 0x8130, 0xCA30, + 0x0387, 0x8130, 0xCA31, + 0x0388, 0x8130, 0xCA32, + 0x0389, 0x8130, 0xCA33, + 0x038A, 0x8130, 0xCA34, + 0x038B, 0x8130, 0xCA35, + 0x038C, 0x8130, 0xCA36, + 0x038D, 0x8130, 0xCA37, + 0x038E, 0x8130, 0xCA38, + 0x038F, 0x8130, 0xCA39, + 0x0390, 0x8130, 0xCB30, + 0x03A2, 0x8130, 0xCB31, + 0x03AA, 0x8130, 0xCB32, + 0x03AB, 0x8130, 0xCB33, + 0x03AC, 0x8130, 0xCB34, + 0x03AD, 0x8130, 0xCB35, + 0x03AE, 0x8130, 0xCB36, + 0x03AF, 0x8130, 0xCB37, + 0x03B0, 0x8130, 0xCB38, + 0x03C2, 0x8130, 0xCB39, + 0x03CA, 0x8130, 0xCC30, + 0x03CB, 0x8130, 0xCC31, + 0x03CC, 0x8130, 0xCC32, + 0x03CD, 0x8130, 0xCC33, + 0x03CE, 0x8130, 0xCC34, + 0x03CF, 0x8130, 0xCC35, + 0x03D0, 0x8130, 0xCC36, + 0x03D1, 0x8130, 0xCC37, + 0x03D2, 0x8130, 0xCC38, + 0x03D3, 0x8130, 0xCC39, + 0x03D4, 0x8130, 0xCD30, + 0x03D5, 0x8130, 0xCD31, + 0x03D6, 0x8130, 0xCD32, + 0x03D7, 0x8130, 0xCD33, + 0x03D8, 0x8130, 0xCD34, + 0x03D9, 0x8130, 0xCD35, + 0x03DA, 0x8130, 0xCD36, + 0x03DB, 0x8130, 0xCD37, + 0x03DC, 0x8130, 0xCD38, + 0x03DD, 0x8130, 0xCD39, + 0x03DE, 0x8130, 0xCE30, + 0x03DF, 0x8130, 0xCE31, + 0x03E0, 0x8130, 0xCE32, + 0x03E1, 0x8130, 0xCE33, + 0x03E2, 0x8130, 0xCE34, + 0x03E3, 0x8130, 0xCE35, + 0x03E4, 0x8130, 0xCE36, + 0x03E5, 0x8130, 0xCE37, + 0x03E6, 0x8130, 0xCE38, + 0x03E7, 0x8130, 0xCE39, + 0x03E8, 0x8130, 0xCF30, + 0x03E9, 0x8130, 0xCF31, + 0x03EA, 0x8130, 0xCF32, + 0x03EB, 0x8130, 0xCF33, + 0x03EC, 0x8130, 0xCF34, + 0x03ED, 0x8130, 0xCF35, + 0x03EE, 0x8130, 0xCF36, + 0x03EF, 0x8130, 0xCF37, + 0x03F0, 0x8130, 0xCF38, + 0x03F1, 0x8130, 0xCF39, + 0x03F2, 0x8130, 0xD030, + 0x03F3, 0x8130, 0xD031, + 0x03F4, 0x8130, 0xD032, + 0x03F5, 0x8130, 0xD033, + 0x03F6, 0x8130, 0xD034, + 0x03F7, 0x8130, 0xD035, + 0x03F8, 0x8130, 0xD036, + 0x03F9, 0x8130, 0xD037, + 0x03FA, 0x8130, 0xD038, + 0x03FB, 0x8130, 0xD039, + 0x03FC, 0x8130, 0xD130, + 0x03FD, 0x8130, 0xD131, + 0x03FE, 0x8130, 0xD132, + 0x03FF, 0x8130, 0xD133, + 0x0400, 0x8130, 0xD134, + 0x0402, 0x8130, 0xD135, + 0x0403, 0x8130, 0xD136, + 0x0404, 0x8130, 0xD137, + 0x0405, 0x8130, 0xD138, + 0x0406, 0x8130, 0xD139, + 0x0407, 0x8130, 0xD230, + 0x0408, 0x8130, 0xD231, + 0x0409, 0x8130, 0xD232, + 0x040A, 0x8130, 0xD233, + 0x040B, 0x8130, 0xD234, + 0x040C, 0x8130, 0xD235, + 0x040D, 0x8130, 0xD236, + 0x040E, 0x8130, 0xD237, + 0x040F, 0x8130, 0xD238, + 0x0450, 0x8130, 0xD239, + 0x2011, 0x8136, 0xA532, + 0x2012, 0x8136, 0xA533, + 0x2017, 0x8136, 0xA534, + 0x201A, 0x8136, 0xA535, + 0x201B, 0x8136, 0xA536, + 0x201E, 0x8136, 0xA537, + 0x201F, 0x8136, 0xA538, + 0x2020, 0x8136, 0xA539, + 0x2021, 0x8136, 0xA630, + 0x2022, 0x8136, 0xA631, + 0x2023, 0x8136, 0xA632, + 0x2024, 0x8136, 0xA633, + 0x2027, 0x8136, 0xA634, + 0x2028, 0x8136, 0xA635, + 0x2029, 0x8136, 0xA636, + 0x202A, 0x8136, 0xA637, + 0x202B, 0x8136, 0xA638, + 0x202C, 0x8136, 0xA639, + 0x202D, 0x8136, 0xA730, + 0x202E, 0x8136, 0xA731, + 0x202F, 0x8136, 0xA732, + 0x2031, 0x8136, 0xA733, + 0x2034, 0x8136, 0xA734, + 0x2036, 0x8136, 0xA735, + 0x2037, 0x8136, 0xA736, + 0x2038, 0x8136, 0xA737, + 0x2039, 0x8136, 0xA738, + 0x203A, 0x8136, 0xA739, + 0x203C, 0x8136, 0xA830, + 0x203D, 0x8136, 0xA831, + 0x203E, 0x8136, 0xA832, + 0x203F, 0x8136, 0xA833, + 0x2040, 0x8136, 0xA834, + 0x2041, 0x8136, 0xA835, + 0x2042, 0x8136, 0xA836, + 0x2043, 0x8136, 0xA837, + 0x2044, 0x8136, 0xA838, + 0x2045, 0x8136, 0xA839, + 0x2046, 0x8136, 0xA930, + 0x2047, 0x8136, 0xA931, + 0x2048, 0x8136, 0xA932, + 0x2049, 0x8136, 0xA933, + 0x204A, 0x8136, 0xA934, + 0x204B, 0x8136, 0xA935, + 0x204C, 0x8136, 0xA936, + 0x204D, 0x8136, 0xA937, + 0x204E, 0x8136, 0xA938, + 0x204F, 0x8136, 0xA939, + 0x2050, 0x8136, 0xAA30, + 0x2051, 0x8136, 0xAA31, + 0x2052, 0x8136, 0xAA32, + 0x2053, 0x8136, 0xAA33, + 0x2054, 0x8136, 0xAA34, + 0x2055, 0x8136, 0xAA35, + 0x2056, 0x8136, 0xAA36, + 0x2057, 0x8136, 0xAA37, + 0x2058, 0x8136, 0xAA38, + 0x2059, 0x8136, 0xAA39, + 0x205A, 0x8136, 0xAB30, + 0x205B, 0x8136, 0xAB31, + 0x205C, 0x8136, 0xAB32, + 0x205D, 0x8136, 0xAB33, + 0x205E, 0x8136, 0xAB34, + 0x205F, 0x8136, 0xAB35, + 0x2060, 0x8136, 0xAB36, + 0x2061, 0x8136, 0xAB37, + 0x2062, 0x8136, 0xAB38, + 0x2063, 0x8136, 0xAB39, + 0x2064, 0x8136, 0xAC30, + 0x2065, 0x8136, 0xAC31, + 0x2066, 0x8136, 0xAC32, + 0x2067, 0x8136, 0xAC33, + 0x2068, 0x8136, 0xAC34, + 0x2069, 0x8136, 0xAC35, + 0x206A, 0x8136, 0xAC36, + 0x206B, 0x8136, 0xAC37, + 0x206C, 0x8136, 0xAC38, + 0x206D, 0x8136, 0xAC39, + 0x206E, 0x8136, 0xAD30, + 0x206F, 0x8136, 0xAD31, + 0x2070, 0x8136, 0xAD32, + 0x2071, 0x8136, 0xAD33, + 0x2072, 0x8136, 0xAD34, + 0x2073, 0x8136, 0xAD35, + 0x2074, 0x8136, 0xAD36, + 0x2075, 0x8136, 0xAD37, + 0x2076, 0x8136, 0xAD38, + 0x2077, 0x8136, 0xAD39, + 0x2078, 0x8136, 0xAE30, + 0x2079, 0x8136, 0xAE31, + 0x207A, 0x8136, 0xAE32, + 0x207B, 0x8136, 0xAE33, + 0x207C, 0x8136, 0xAE34, + 0x207D, 0x8136, 0xAE35, + 0x207E, 0x8136, 0xAE36, + 0x207F, 0x8136, 0xAE37, + 0x2080, 0x8136, 0xAE38, + 0x2081, 0x8136, 0xAE39, + 0x2082, 0x8136, 0xAF30, + 0x2083, 0x8136, 0xAF31, + 0x2084, 0x8136, 0xAF32, + 0x2085, 0x8136, 0xAF33, + 0x2086, 0x8136, 0xAF34, + 0x2087, 0x8136, 0xAF35, + 0x2088, 0x8136, 0xAF36, + 0x2089, 0x8136, 0xAF37, + 0x208A, 0x8136, 0xAF38, + 0x208B, 0x8136, 0xAF39, + 0x208C, 0x8136, 0xB030, + 0x208D, 0x8136, 0xB031, + 0x208E, 0x8136, 0xB032, + 0x208F, 0x8136, 0xB033, + 0x2090, 0x8136, 0xB034, + 0x2091, 0x8136, 0xB035, + 0x2092, 0x8136, 0xB036, + 0x2093, 0x8136, 0xB037, + 0x2094, 0x8136, 0xB038, + 0x2095, 0x8136, 0xB039, + 0x2096, 0x8136, 0xB130, + 0x2097, 0x8136, 0xB131, + 0x2098, 0x8136, 0xB132, + 0x2099, 0x8136, 0xB133, + 0x209A, 0x8136, 0xB134, + 0x209B, 0x8136, 0xB135, + 0x209C, 0x8136, 0xB136, + 0x209D, 0x8136, 0xB137, + 0x209E, 0x8136, 0xB138, + 0x209F, 0x8136, 0xB139, + 0x20A0, 0x8136, 0xB230, + 0x20A1, 0x8136, 0xB231, + 0x20A2, 0x8136, 0xB232, + 0x20A3, 0x8136, 0xB233, + 0x20A4, 0x8136, 0xB234, + 0x20A5, 0x8136, 0xB235, + 0x20A6, 0x8136, 0xB236, + 0x20A7, 0x8136, 0xB237, + 0x20A8, 0x8136, 0xB238, + 0x20A9, 0x8136, 0xB239, + 0x20AA, 0x8136, 0xB330, + 0x20AB, 0x8136, 0xB331, + 0x20AD, 0x8136, 0xB332, + 0x20AE, 0x8136, 0xB333, + 0x20AF, 0x8136, 0xB334, + 0x20B0, 0x8136, 0xB335, + 0x20B1, 0x8136, 0xB336, + 0x20B2, 0x8136, 0xB337, + 0x20B3, 0x8136, 0xB338, + 0x20B4, 0x8136, 0xB339, + 0x20B5, 0x8136, 0xB430, + 0x20B6, 0x8136, 0xB431, + 0x20B7, 0x8136, 0xB432, + 0x20B8, 0x8136, 0xB433, + 0x20B9, 0x8136, 0xB434, + 0x20BA, 0x8136, 0xB435, + 0x20BB, 0x8136, 0xB436, + 0x20BC, 0x8136, 0xB437, + 0x20BD, 0x8136, 0xB438, + 0x20BE, 0x8136, 0xB439, + 0x20BF, 0x8136, 0xB530, + 0x20C0, 0x8136, 0xB531, + 0x20C1, 0x8136, 0xB532, + 0x20C2, 0x8136, 0xB533, + 0x20C3, 0x8136, 0xB534, + 0x20C4, 0x8136, 0xB535, + 0x20C5, 0x8136, 0xB536, + 0x20C6, 0x8136, 0xB537, + 0x20C7, 0x8136, 0xB538, + 0x20C8, 0x8136, 0xB539, + 0x20C9, 0x8136, 0xB630, + 0x20CA, 0x8136, 0xB631, + 0x20CB, 0x8136, 0xB632, + 0x20CC, 0x8136, 0xB633, + 0x20CD, 0x8136, 0xB634, + 0x20CE, 0x8136, 0xB635, + 0x20CF, 0x8136, 0xB636, + 0x20D0, 0x8136, 0xB637, + 0x20D1, 0x8136, 0xB638, + 0x20D2, 0x8136, 0xB639, + 0x20D3, 0x8136, 0xB730, + 0x20D4, 0x8136, 0xB731, + 0x20D5, 0x8136, 0xB732, + 0x20D6, 0x8136, 0xB733, + 0x20D7, 0x8136, 0xB734, + 0x20D8, 0x8136, 0xB735, + 0x20D9, 0x8136, 0xB736, + 0x20DA, 0x8136, 0xB737, + 0x20DB, 0x8136, 0xB738, + 0x20DC, 0x8136, 0xB739, + 0x20DD, 0x8136, 0xB830, + 0x20DE, 0x8136, 0xB831, + 0x20DF, 0x8136, 0xB832, + 0x20E0, 0x8136, 0xB833, + 0x20E1, 0x8136, 0xB834, + 0x20E2, 0x8136, 0xB835, + 0x20E3, 0x8136, 0xB836, + 0x20E4, 0x8136, 0xB837, + 0x20E5, 0x8136, 0xB838, + 0x20E6, 0x8136, 0xB839, + 0x20E7, 0x8136, 0xB930, + 0x20E8, 0x8136, 0xB931, + 0x20E9, 0x8136, 0xB932, + 0x20EA, 0x8136, 0xB933, + 0x20EB, 0x8136, 0xB934, + 0x20EC, 0x8136, 0xB935, + 0x20ED, 0x8136, 0xB936, + 0x20EE, 0x8136, 0xB937, + 0x20EF, 0x8136, 0xB938, + 0x20F0, 0x8136, 0xB939, + 0x20F1, 0x8136, 0xBA30, + 0x20F2, 0x8136, 0xBA31, + 0x20F3, 0x8136, 0xBA32, + 0x20F4, 0x8136, 0xBA33, + 0x20F5, 0x8136, 0xBA34, + 0x20F6, 0x8136, 0xBA35, + 0x20F7, 0x8136, 0xBA36, + 0x20F8, 0x8136, 0xBA37, + 0x20F9, 0x8136, 0xBA38, + 0x20FA, 0x8136, 0xBA39, + 0x20FB, 0x8136, 0xBB30, + 0x20FC, 0x8136, 0xBB31, + 0x20FD, 0x8136, 0xBB32, + 0x20FE, 0x8136, 0xBB33, + 0x20FF, 0x8136, 0xBB34, + 0x2100, 0x8136, 0xBB35, + 0x2101, 0x8136, 0xBB36, + 0x2102, 0x8136, 0xBB37, + 0x2104, 0x8136, 0xBB38, + 0x2106, 0x8136, 0xBB39, + 0x2107, 0x8136, 0xBC30, + 0x2108, 0x8136, 0xBC31, + 0x210A, 0x8136, 0xBC32, + 0x210B, 0x8136, 0xBC33, + 0x210C, 0x8136, 0xBC34, + 0x210D, 0x8136, 0xBC35, + 0x210E, 0x8136, 0xBC36, + 0x210F, 0x8136, 0xBC37, + 0x2110, 0x8136, 0xBC38, + 0x2111, 0x8136, 0xBC39, + 0x2112, 0x8136, 0xBD30, + 0x2113, 0x8136, 0xBD31, + 0x2114, 0x8136, 0xBD32, + 0x2115, 0x8136, 0xBD33, + 0x2117, 0x8136, 0xBD34, + 0x2118, 0x8136, 0xBD35, + 0x2119, 0x8136, 0xBD36, + 0x211A, 0x8136, 0xBD37, + 0x211B, 0x8136, 0xBD38, + 0x211C, 0x8136, 0xBD39, + 0x211D, 0x8136, 0xBE30, + 0x211E, 0x8136, 0xBE31, + 0x211F, 0x8136, 0xBE32, + 0x2120, 0x8136, 0xBE33, + 0x2122, 0x8136, 0xBE34, + 0x2123, 0x8136, 0xBE35, + 0x2124, 0x8136, 0xBE36, + 0x2125, 0x8136, 0xBE37, + 0x2126, 0x8136, 0xBE38, + 0x2127, 0x8136, 0xBE39, + 0x2128, 0x8136, 0xBF30, + 0x2129, 0x8136, 0xBF31, + 0x212A, 0x8136, 0xBF32, + 0x212B, 0x8136, 0xBF33, + 0x212C, 0x8136, 0xBF34, + 0x212D, 0x8136, 0xBF35, + 0x212E, 0x8136, 0xBF36, + 0x212F, 0x8136, 0xBF37, + 0x2130, 0x8136, 0xBF38, + 0x2131, 0x8136, 0xBF39, + 0x2132, 0x8136, 0xC030, + 0x2133, 0x8136, 0xC031, + 0x2134, 0x8136, 0xC032, + 0x2135, 0x8136, 0xC033, + 0x2136, 0x8136, 0xC034, + 0x2137, 0x8136, 0xC035, + 0x2138, 0x8136, 0xC036, + 0x2139, 0x8136, 0xC037, + 0x213A, 0x8136, 0xC038, + 0x213B, 0x8136, 0xC039, + 0x213C, 0x8136, 0xC130, + 0x213D, 0x8136, 0xC131, + 0x213E, 0x8136, 0xC132, + 0x213F, 0x8136, 0xC133, + 0x2140, 0x8136, 0xC134, + 0x2141, 0x8136, 0xC135, + 0x2142, 0x8136, 0xC136, + 0x2143, 0x8136, 0xC137, + 0x2144, 0x8136, 0xC138, + 0x2145, 0x8136, 0xC139, + 0x2146, 0x8136, 0xC230, + 0x2147, 0x8136, 0xC231, + 0x2148, 0x8136, 0xC232, + 0x2149, 0x8136, 0xC233, + 0x214A, 0x8136, 0xC234, + 0x214B, 0x8136, 0xC235, + 0x214C, 0x8136, 0xC236, + 0x214D, 0x8136, 0xC237, + 0x214E, 0x8136, 0xC238, + 0x214F, 0x8136, 0xC239, + 0x2150, 0x8136, 0xC330, + 0x2151, 0x8136, 0xC331, + 0x2152, 0x8136, 0xC332, + 0x2153, 0x8136, 0xC333, + 0x2154, 0x8136, 0xC334, + 0x2155, 0x8136, 0xC335, + 0x2156, 0x8136, 0xC336, + 0x2157, 0x8136, 0xC337, + 0x2158, 0x8136, 0xC338, + 0x2159, 0x8136, 0xC339, + 0x215A, 0x8136, 0xC430, + 0x215B, 0x8136, 0xC431, + 0x215C, 0x8136, 0xC432, + 0x215D, 0x8136, 0xC433, + 0x215E, 0x8136, 0xC434, + 0x215F, 0x8136, 0xC435, + 0x216C, 0x8136, 0xC436, + 0x216D, 0x8136, 0xC437, + 0x216E, 0x8136, 0xC438, + 0x216F, 0x8136, 0xC439, + 0x217A, 0x8136, 0xC530, + 0x217B, 0x8136, 0xC531, + 0x217C, 0x8136, 0xC532, + 0x217D, 0x8136, 0xC533, + 0x217E, 0x8136, 0xC534, + 0x217F, 0x8136, 0xC535, + 0x2180, 0x8136, 0xC536, + 0x2181, 0x8136, 0xC537, + 0x2182, 0x8136, 0xC538, + 0x2183, 0x8136, 0xC539, + 0x2184, 0x8136, 0xC630, + 0x2185, 0x8136, 0xC631, + 0x2186, 0x8136, 0xC632, + 0x2187, 0x8136, 0xC633, + 0x2188, 0x8136, 0xC634, + 0x2189, 0x8136, 0xC635, + 0x218A, 0x8136, 0xC636, + 0x218B, 0x8136, 0xC637, + 0x218C, 0x8136, 0xC638, + 0x218D, 0x8136, 0xC639, + 0x218E, 0x8136, 0xC730, + 0x218F, 0x8136, 0xC731, + 0x2194, 0x8136, 0xC732, + 0x2195, 0x8136, 0xC733, + 0x219A, 0x8136, 0xC734, + 0x219B, 0x8136, 0xC735, + 0x219C, 0x8136, 0xC736, + 0x219D, 0x8136, 0xC737, + 0x219E, 0x8136, 0xC738, + 0x219F, 0x8136, 0xC739, + 0x21A0, 0x8136, 0xC830, + 0x21A1, 0x8136, 0xC831, + 0x21A2, 0x8136, 0xC832, + 0x21A3, 0x8136, 0xC833, + 0x21A4, 0x8136, 0xC834, + 0x21A5, 0x8136, 0xC835, + 0x21A6, 0x8136, 0xC836, + 0x21A7, 0x8136, 0xC837, + 0x21A8, 0x8136, 0xC838, + 0x21A9, 0x8136, 0xC839, + 0x21AA, 0x8136, 0xC930, + 0x21AB, 0x8136, 0xC931, + 0x21AC, 0x8136, 0xC932, + 0x21AD, 0x8136, 0xC933, + 0x21AE, 0x8136, 0xC934, + 0x21AF, 0x8136, 0xC935, + 0x21B0, 0x8136, 0xC936, + 0x21B1, 0x8136, 0xC937, + 0x21B2, 0x8136, 0xC938, + 0x21B3, 0x8136, 0xC939, + 0x21B4, 0x8136, 0xCA30, + 0x21B5, 0x8136, 0xCA31, + 0x21B6, 0x8136, 0xCA32, + 0x21B7, 0x8136, 0xCA33, + 0x21B8, 0x8136, 0xCA34, + 0x21B9, 0x8136, 0xCA35, + 0x21BA, 0x8136, 0xCA36, + 0x21BB, 0x8136, 0xCA37, + 0x21BC, 0x8136, 0xCA38, + 0x21BD, 0x8136, 0xCA39, + 0x21BE, 0x8136, 0xCB30, + 0x21BF, 0x8136, 0xCB31, + 0x21C0, 0x8136, 0xCB32, + 0x21C1, 0x8136, 0xCB33, + 0x21C2, 0x8136, 0xCB34, + 0x21C3, 0x8136, 0xCB35, + 0x21C4, 0x8136, 0xCB36, + 0x21C5, 0x8136, 0xCB37, + 0x21C6, 0x8136, 0xCB38, + 0x21C7, 0x8136, 0xCB39, + 0x21C8, 0x8136, 0xCC30, + 0x21C9, 0x8136, 0xCC31, + 0x21CA, 0x8136, 0xCC32, + 0x21CB, 0x8136, 0xCC33, + 0x21CC, 0x8136, 0xCC34, + 0x21CD, 0x8136, 0xCC35, + 0x21CE, 0x8136, 0xCC36, + 0x21CF, 0x8136, 0xCC37, + 0x21D0, 0x8136, 0xCC38, + 0x21D1, 0x8136, 0xCC39, + 0x21D2, 0x8136, 0xCD30, + 0x21D3, 0x8136, 0xCD31, + 0x21D4, 0x8136, 0xCD32, + 0x21D5, 0x8136, 0xCD33, + 0x21D6, 0x8136, 0xCD34, + 0x21D7, 0x8136, 0xCD35, + 0x21D8, 0x8136, 0xCD36, + 0x21D9, 0x8136, 0xCD37, + 0x21DA, 0x8136, 0xCD38, + 0x21DB, 0x8136, 0xCD39, + 0x21DC, 0x8136, 0xCE30, + 0x21DD, 0x8136, 0xCE31, + 0x21DE, 0x8136, 0xCE32, + 0x21DF, 0x8136, 0xCE33, + 0x21E0, 0x8136, 0xCE34, + 0x21E1, 0x8136, 0xCE35, + 0x21E2, 0x8136, 0xCE36, + 0x21E3, 0x8136, 0xCE37, + 0x21E4, 0x8136, 0xCE38, + 0x21E5, 0x8136, 0xCE39, + 0x21E6, 0x8136, 0xCF30, + 0x21E7, 0x8136, 0xCF31, + 0x21E8, 0x8136, 0xCF32, + 0x21E9, 0x8136, 0xCF33, + 0x21EA, 0x8136, 0xCF34, + 0x21EB, 0x8136, 0xCF35, + 0x21EC, 0x8136, 0xCF36, + 0x21ED, 0x8136, 0xCF37, + 0x21EE, 0x8136, 0xCF38, + 0x21EF, 0x8136, 0xCF39, + 0x21F0, 0x8136, 0xD030, + 0x21F1, 0x8136, 0xD031, + 0x21F2, 0x8136, 0xD032, + 0x21F3, 0x8136, 0xD033, + 0x21F4, 0x8136, 0xD034, + 0x21F5, 0x8136, 0xD035, + 0x21F6, 0x8136, 0xD036, + 0x21F7, 0x8136, 0xD037, + 0x21F8, 0x8136, 0xD038, + 0x21F9, 0x8136, 0xD039, + 0x21FA, 0x8136, 0xD130, + 0x21FB, 0x8136, 0xD131, + 0x21FC, 0x8136, 0xD132, + 0x21FD, 0x8136, 0xD133, + 0x21FE, 0x8136, 0xD134, + 0x21FF, 0x8136, 0xD135, + 0x2200, 0x8136, 0xD136, + 0x2201, 0x8136, 0xD137, + 0x2202, 0x8136, 0xD138, + 0x2203, 0x8136, 0xD139, + 0x2204, 0x8136, 0xD230, + 0x2205, 0x8136, 0xD231, + 0x2206, 0x8136, 0xD232, + 0x2207, 0x8136, 0xD233, + 0x2209, 0x8136, 0xD234, + 0x220A, 0x8136, 0xD235, + 0x220B, 0x8136, 0xD236, + 0x220C, 0x8136, 0xD237, + 0x220D, 0x8136, 0xD238, + 0x220E, 0x8136, 0xD239, + 0x2210, 0x8136, 0xD330, + 0x2212, 0x8136, 0xD331, + 0x2213, 0x8136, 0xD332, + 0x2214, 0x8136, 0xD333, + 0x2216, 0x8136, 0xD334, + 0x2217, 0x8136, 0xD335, + 0x2218, 0x8136, 0xD336, + 0x2219, 0x8136, 0xD337, + 0x221B, 0x8136, 0xD338, + 0x221C, 0x8136, 0xD339, + 0x2221, 0x8136, 0xD430, + 0x2222, 0x8136, 0xD431, + 0x2224, 0x8136, 0xD432, + 0x2226, 0x8136, 0xD433, + 0x222C, 0x8136, 0xD434, + 0x222D, 0x8136, 0xD435, + 0x222F, 0x8136, 0xD436, + 0x2230, 0x8136, 0xD437, + 0x2231, 0x8136, 0xD438, + 0x2232, 0x8136, 0xD439, + 0x2233, 0x8136, 0xD530, + 0x2238, 0x8136, 0xD531, + 0x2239, 0x8136, 0xD532, + 0x223A, 0x8136, 0xD533, + 0x223B, 0x8136, 0xD534, + 0x223C, 0x8136, 0xD535, + 0x223E, 0x8136, 0xD536, + 0x223F, 0x8136, 0xD537, + 0x2240, 0x8136, 0xD538, + 0x2241, 0x8136, 0xD539, + 0x2242, 0x8136, 0xD630, + 0x2243, 0x8136, 0xD631, + 0x2244, 0x8136, 0xD632, + 0x2245, 0x8136, 0xD633, + 0x2246, 0x8136, 0xD634, + 0x2247, 0x8136, 0xD635, + 0x2249, 0x8136, 0xD636, + 0x224A, 0x8136, 0xD637, + 0x224B, 0x8136, 0xD638, + 0x224D, 0x8136, 0xD639, + 0x224E, 0x8136, 0xD730, + 0x224F, 0x8136, 0xD731, + 0x2250, 0x8136, 0xD732, + 0x2251, 0x8136, 0xD733, + 0x2253, 0x8136, 0xD734, + 0x2254, 0x8136, 0xD735, + 0x2255, 0x8136, 0xD736, + 0x2256, 0x8136, 0xD737, + 0x2257, 0x8136, 0xD738, + 0x2258, 0x8136, 0xD739, + 0x2259, 0x8136, 0xD830, + 0x225A, 0x8136, 0xD831, + 0x225B, 0x8136, 0xD832, + 0x225C, 0x8136, 0xD833, + 0x225D, 0x8136, 0xD834, + 0x225E, 0x8136, 0xD835, + 0x225F, 0x8136, 0xD836, + 0x2262, 0x8136, 0xD837, + 0x2263, 0x8136, 0xD838, + 0x2268, 0x8136, 0xD839, + 0x2269, 0x8136, 0xD930, + 0x226A, 0x8136, 0xD931, + 0x226B, 0x8136, 0xD932, + 0x226C, 0x8136, 0xD933, + 0x226D, 0x8136, 0xD934, + 0x2270, 0x8136, 0xD935, + 0x2271, 0x8136, 0xD936, + 0x2272, 0x8136, 0xD937, + 0x2273, 0x8136, 0xD938, + 0x2274, 0x8136, 0xD939, + 0x2275, 0x8136, 0xDA30, + 0x2276, 0x8136, 0xDA31, + 0x2277, 0x8136, 0xDA32, + 0x2278, 0x8136, 0xDA33, + 0x2279, 0x8136, 0xDA34, + 0x227A, 0x8136, 0xDA35, + 0x227B, 0x8136, 0xDA36, + 0x227C, 0x8136, 0xDA37, + 0x227D, 0x8136, 0xDA38, + 0x227E, 0x8136, 0xDA39, + 0x227F, 0x8136, 0xDB30, + 0x2280, 0x8136, 0xDB31, + 0x2281, 0x8136, 0xDB32, + 0x2282, 0x8136, 0xDB33, + 0x2283, 0x8136, 0xDB34, + 0x2284, 0x8136, 0xDB35, + 0x2285, 0x8136, 0xDB36, + 0x2286, 0x8136, 0xDB37, + 0x2287, 0x8136, 0xDB38, + 0x2288, 0x8136, 0xDB39, + 0x2289, 0x8136, 0xDC30, + 0x228A, 0x8136, 0xDC31, + 0x228B, 0x8136, 0xDC32, + 0x228C, 0x8136, 0xDC33, + 0x228D, 0x8136, 0xDC34, + 0x228E, 0x8136, 0xDC35, + 0x228F, 0x8136, 0xDC36, + 0x2290, 0x8136, 0xDC37, + 0x2291, 0x8136, 0xDC38, + 0x2292, 0x8136, 0xDC39, + 0x2293, 0x8136, 0xDD30, + 0x2294, 0x8136, 0xDD31, + 0x2296, 0x8136, 0xDD32, + 0x2297, 0x8136, 0xDD33, + 0x2298, 0x8136, 0xDD34, + 0x229A, 0x8136, 0xDD35, + 0x229B, 0x8136, 0xDD36, + 0x229C, 0x8136, 0xDD37, + 0x229D, 0x8136, 0xDD38, + 0x229E, 0x8136, 0xDD39, + 0x229F, 0x8136, 0xDE30, + 0x22A0, 0x8136, 0xDE31, + 0x22A1, 0x8136, 0xDE32, + 0x22A2, 0x8136, 0xDE33, + 0x22A3, 0x8136, 0xDE34, + 0x22A4, 0x8136, 0xDE35, + 0x22A6, 0x8136, 0xDE36, + 0x22A7, 0x8136, 0xDE37, + 0x22A8, 0x8136, 0xDE38, + 0x22A9, 0x8136, 0xDE39, + 0x22AA, 0x8136, 0xDF30, + 0x22AB, 0x8136, 0xDF31, + 0x22AC, 0x8136, 0xDF32, + 0x22AD, 0x8136, 0xDF33, + 0x22AE, 0x8136, 0xDF34, + 0x22AF, 0x8136, 0xDF35, + 0x22B0, 0x8136, 0xDF36, + 0x22B1, 0x8136, 0xDF37, + 0x22B2, 0x8136, 0xDF38, + 0x22B3, 0x8136, 0xDF39, + 0x22B4, 0x8136, 0xE030, + 0x22B5, 0x8136, 0xE031, + 0x22B6, 0x8136, 0xE032, + 0x22B7, 0x8136, 0xE033, + 0x22B8, 0x8136, 0xE034, + 0x22B9, 0x8136, 0xE035, + 0x22BA, 0x8136, 0xE036, + 0x22BB, 0x8136, 0xE037, + 0x22BC, 0x8136, 0xE038, + 0x22BD, 0x8136, 0xE039, + 0x22BE, 0x8136, 0xE130, + 0x22C0, 0x8136, 0xE131, + 0x22C1, 0x8136, 0xE132, + 0x22C2, 0x8136, 0xE133, + 0x22C3, 0x8136, 0xE134, + 0x22C4, 0x8136, 0xE135, + 0x22C5, 0x8136, 0xE136, + 0x22C6, 0x8136, 0xE137, + 0x22C7, 0x8136, 0xE138, + 0x22C8, 0x8136, 0xE139, + 0x22C9, 0x8136, 0xE230, + 0x22CA, 0x8136, 0xE231, + 0x22CB, 0x8136, 0xE232, + 0x22CC, 0x8136, 0xE233, + 0x22CD, 0x8136, 0xE234, + 0x22CE, 0x8136, 0xE235, + 0x22CF, 0x8136, 0xE236, + 0x22D0, 0x8136, 0xE237, + 0x22D1, 0x8136, 0xE238, + 0x22D2, 0x8136, 0xE239, + 0x22D3, 0x8136, 0xE330, + 0x22D4, 0x8136, 0xE331, + 0x22D5, 0x8136, 0xE332, + 0x22D6, 0x8136, 0xE333, + 0x22D7, 0x8136, 0xE334, + 0x22D8, 0x8136, 0xE335, + 0x22D9, 0x8136, 0xE336, + 0x22DA, 0x8136, 0xE337, + 0x22DB, 0x8136, 0xE338, + 0x22DC, 0x8136, 0xE339, + 0x22DD, 0x8136, 0xE430, + 0x22DE, 0x8136, 0xE431, + 0x22DF, 0x8136, 0xE432, + 0x22E0, 0x8136, 0xE433, + 0x22E1, 0x8136, 0xE434, + 0x22E2, 0x8136, 0xE435, + 0x22E3, 0x8136, 0xE436, + 0x22E4, 0x8136, 0xE437, + 0x22E5, 0x8136, 0xE438, + 0x22E6, 0x8136, 0xE439, + 0x22E7, 0x8136, 0xE530, + 0x22E8, 0x8136, 0xE531, + 0x22E9, 0x8136, 0xE532, + 0x22EA, 0x8136, 0xE533, + 0x22EB, 0x8136, 0xE534, + 0x22EC, 0x8136, 0xE535, + 0x22ED, 0x8136, 0xE536, + 0x22EE, 0x8136, 0xE537, + 0x22EF, 0x8136, 0xE538, + 0x22F0, 0x8136, 0xE539, + 0x22F1, 0x8136, 0xE630, + 0x22F2, 0x8136, 0xE631, + 0x22F3, 0x8136, 0xE632, + 0x22F4, 0x8136, 0xE633, + 0x22F5, 0x8136, 0xE634, + 0x22F6, 0x8136, 0xE635, + 0x22F7, 0x8136, 0xE636, + 0x22F8, 0x8136, 0xE637, + 0x22F9, 0x8136, 0xE638, + 0x22FA, 0x8136, 0xE639, + 0x22FB, 0x8136, 0xE730, + 0x22FC, 0x8136, 0xE731, + 0x22FD, 0x8136, 0xE732, + 0x22FE, 0x8136, 0xE733, + 0x22FF, 0x8136, 0xE734, + 0x2300, 0x8136, 0xE735, + 0x2301, 0x8136, 0xE736, + 0x2302, 0x8136, 0xE737, + 0x2303, 0x8136, 0xE738, + 0x2304, 0x8136, 0xE739, + 0x2305, 0x8136, 0xE830, + 0x2306, 0x8136, 0xE831, + 0x2307, 0x8136, 0xE832, + 0x2308, 0x8136, 0xE833, + 0x2309, 0x8136, 0xE834, + 0x230A, 0x8136, 0xE835, + 0x230B, 0x8136, 0xE836, + 0x230C, 0x8136, 0xE837, + 0x230D, 0x8136, 0xE838, + 0x230E, 0x8136, 0xE839, + 0x230F, 0x8136, 0xE930, + 0x2310, 0x8136, 0xE931, + 0x2311, 0x8136, 0xE932, + 0x2313, 0x8136, 0xE933, + 0x2314, 0x8136, 0xE934, + 0x2315, 0x8136, 0xE935, + 0x2316, 0x8136, 0xE936, + 0x2317, 0x8136, 0xE937, + 0x2318, 0x8136, 0xE938, + 0x2319, 0x8136, 0xE939, + 0x231A, 0x8136, 0xEA30, + 0x231B, 0x8136, 0xEA31, + 0x231C, 0x8136, 0xEA32, + 0x231D, 0x8136, 0xEA33, + 0x231E, 0x8136, 0xEA34, + 0x231F, 0x8136, 0xEA35, + 0x2320, 0x8136, 0xEA36, + 0x2321, 0x8136, 0xEA37, + 0x2322, 0x8136, 0xEA38, + 0x2323, 0x8136, 0xEA39, + 0x2324, 0x8136, 0xEB30, + 0x2325, 0x8136, 0xEB31, + 0x2326, 0x8136, 0xEB32, + 0x2327, 0x8136, 0xEB33, + 0x2328, 0x8136, 0xEB34, + 0x2329, 0x8136, 0xEB35, + 0x232A, 0x8136, 0xEB36, + 0x232B, 0x8136, 0xEB37, + 0x232C, 0x8136, 0xEB38, + 0x232D, 0x8136, 0xEB39, + 0x232E, 0x8136, 0xEC30, + 0x232F, 0x8136, 0xEC31, + 0x2330, 0x8136, 0xEC32, + 0x2331, 0x8136, 0xEC33, + 0x2332, 0x8136, 0xEC34, + 0x2333, 0x8136, 0xEC35, + 0x2334, 0x8136, 0xEC36, + 0x2335, 0x8136, 0xEC37, + 0x2336, 0x8136, 0xEC38, + 0x2337, 0x8136, 0xEC39, + 0x2338, 0x8136, 0xED30, + 0x2339, 0x8136, 0xED31, + 0x233A, 0x8136, 0xED32, + 0x233B, 0x8136, 0xED33, + 0x233C, 0x8136, 0xED34, + 0x233D, 0x8136, 0xED35, + 0x233E, 0x8136, 0xED36, + 0x233F, 0x8136, 0xED37, + 0x2340, 0x8136, 0xED38, + 0x2341, 0x8136, 0xED39, + 0x2342, 0x8136, 0xEE30, + 0x2343, 0x8136, 0xEE31, + 0x2344, 0x8136, 0xEE32, + 0x2345, 0x8136, 0xEE33, + 0x2346, 0x8136, 0xEE34, + 0x2347, 0x8136, 0xEE35, + 0x2348, 0x8136, 0xEE36, + 0x2349, 0x8136, 0xEE37, + 0x234A, 0x8136, 0xEE38, + 0x234B, 0x8136, 0xEE39, + 0x234C, 0x8136, 0xEF30, + 0x234D, 0x8136, 0xEF31, + 0x234E, 0x8136, 0xEF32, + 0x234F, 0x8136, 0xEF33, + 0x2350, 0x8136, 0xEF34, + 0x2351, 0x8136, 0xEF35, + 0x2352, 0x8136, 0xEF36, + 0x2353, 0x8136, 0xEF37, + 0x2354, 0x8136, 0xEF38, + 0x2355, 0x8136, 0xEF39, + 0x2356, 0x8136, 0xF030, + 0x2357, 0x8136, 0xF031, + 0x2358, 0x8136, 0xF032, + 0x2359, 0x8136, 0xF033, + 0x235A, 0x8136, 0xF034, + 0x235B, 0x8136, 0xF035, + 0x235C, 0x8136, 0xF036, + 0x235D, 0x8136, 0xF037, + 0x235E, 0x8136, 0xF038, + 0x235F, 0x8136, 0xF039, + 0x2360, 0x8136, 0xF130, + 0x2361, 0x8136, 0xF131, + 0x2362, 0x8136, 0xF132, + 0x2363, 0x8136, 0xF133, + 0x2364, 0x8136, 0xF134, + 0x2365, 0x8136, 0xF135, + 0x2366, 0x8136, 0xF136, + 0x2367, 0x8136, 0xF137, + 0x2368, 0x8136, 0xF138, + 0x2369, 0x8136, 0xF139, + 0x236A, 0x8136, 0xF230, + 0x236B, 0x8136, 0xF231, + 0x236C, 0x8136, 0xF232, + 0x236D, 0x8136, 0xF233, + 0x236E, 0x8136, 0xF234, + 0x236F, 0x8136, 0xF235, + 0x2370, 0x8136, 0xF236, + 0x2371, 0x8136, 0xF237, + 0x2372, 0x8136, 0xF238, + 0x2373, 0x8136, 0xF239, + 0x2374, 0x8136, 0xF330, + 0x2375, 0x8136, 0xF331, + 0x2376, 0x8136, 0xF332, + 0x2377, 0x8136, 0xF333, + 0x2378, 0x8136, 0xF334, + 0x2379, 0x8136, 0xF335, + 0x237A, 0x8136, 0xF336, + 0x237B, 0x8136, 0xF337, + 0x237C, 0x8136, 0xF338, + 0x237D, 0x8136, 0xF339, + 0x237E, 0x8136, 0xF430, + 0x237F, 0x8136, 0xF431, + 0x2380, 0x8136, 0xF432, + 0x2381, 0x8136, 0xF433, + 0x2382, 0x8136, 0xF434, + 0x2383, 0x8136, 0xF435, + 0x2384, 0x8136, 0xF436, + 0x2385, 0x8136, 0xF437, + 0x2386, 0x8136, 0xF438, + 0x2387, 0x8136, 0xF439, + 0x2388, 0x8136, 0xF530, + 0x2389, 0x8136, 0xF531, + 0x238A, 0x8136, 0xF532, + 0x238B, 0x8136, 0xF533, + 0x238C, 0x8136, 0xF534, + 0x238D, 0x8136, 0xF535, + 0x238E, 0x8136, 0xF536, + 0x238F, 0x8136, 0xF537, + 0x2390, 0x8136, 0xF538, + 0x2391, 0x8136, 0xF539, + 0x2392, 0x8136, 0xF630, + 0x2393, 0x8136, 0xF631, + 0x2394, 0x8136, 0xF632, + 0x2395, 0x8136, 0xF633, + 0x2396, 0x8136, 0xF634, + 0x2397, 0x8136, 0xF635, + 0x2398, 0x8136, 0xF636, + 0x2399, 0x8136, 0xF637, + 0x239A, 0x8136, 0xF638, + 0x239B, 0x8136, 0xF639, + 0x239C, 0x8136, 0xF730, + 0x239D, 0x8136, 0xF731, + 0x239E, 0x8136, 0xF732, + 0x239F, 0x8136, 0xF733, + 0x23A0, 0x8136, 0xF734, + 0x23A1, 0x8136, 0xF735, + 0x23A2, 0x8136, 0xF736, + 0x23A3, 0x8136, 0xF737, + 0x23A4, 0x8136, 0xF738, + 0x23A5, 0x8136, 0xF739, + 0x23A6, 0x8136, 0xF830, + 0x23A7, 0x8136, 0xF831, + 0x23A8, 0x8136, 0xF832, + 0x23A9, 0x8136, 0xF833, + 0x23AA, 0x8136, 0xF834, + 0x23AB, 0x8136, 0xF835, + 0x23AC, 0x8136, 0xF836, + 0x23AD, 0x8136, 0xF837, + 0x23AE, 0x8136, 0xF838, + 0x23AF, 0x8136, 0xF839, + 0x23B0, 0x8136, 0xF930, + 0x23B1, 0x8136, 0xF931, + 0x23B2, 0x8136, 0xF932, + 0x23B3, 0x8136, 0xF933, + 0x23B4, 0x8136, 0xF934, + 0x23B5, 0x8136, 0xF935, + 0x23B6, 0x8136, 0xF936, + 0x23B7, 0x8136, 0xF937, + 0x23B8, 0x8136, 0xF938, + 0x23B9, 0x8136, 0xF939, + 0x23BA, 0x8136, 0xFA30, + 0x23BB, 0x8136, 0xFA31, + 0x23BC, 0x8136, 0xFA32, + 0x23BD, 0x8136, 0xFA33, + 0x23BE, 0x8136, 0xFA34, + 0x23BF, 0x8136, 0xFA35, + 0x23C0, 0x8136, 0xFA36, + 0x23C1, 0x8136, 0xFA37, + 0x23C2, 0x8136, 0xFA38, + 0x23C3, 0x8136, 0xFA39, + 0x23C4, 0x8136, 0xFB30, + 0x23C5, 0x8136, 0xFB31, + 0x23C6, 0x8136, 0xFB32, + 0x23C7, 0x8136, 0xFB33, + 0x23C8, 0x8136, 0xFB34, + 0x23C9, 0x8136, 0xFB35, + 0x23CA, 0x8136, 0xFB36, + 0x23CB, 0x8136, 0xFB37, + 0x23CC, 0x8136, 0xFB38, + 0x23CD, 0x8136, 0xFB39, + 0x23CE, 0x8136, 0xFC30, + 0x23CF, 0x8136, 0xFC31, + 0x23D0, 0x8136, 0xFC32, + 0x23D1, 0x8136, 0xFC33, + 0x23D2, 0x8136, 0xFC34, + 0x23D3, 0x8136, 0xFC35, + 0x23D4, 0x8136, 0xFC36, + 0x23D5, 0x8136, 0xFC37, + 0x23D6, 0x8136, 0xFC38, + 0x23D7, 0x8136, 0xFC39, + 0x23D8, 0x8136, 0xFD30, + 0x23D9, 0x8136, 0xFD31, + 0x23DA, 0x8136, 0xFD32, + 0x23DB, 0x8136, 0xFD33, + 0x23DC, 0x8136, 0xFD34, + 0x23DD, 0x8136, 0xFD35, + 0x23DE, 0x8136, 0xFD36, + 0x23DF, 0x8136, 0xFD37, + 0x23E0, 0x8136, 0xFD38, + 0x23E1, 0x8136, 0xFD39, + 0x23E2, 0x8136, 0xFE30, + 0x23E3, 0x8136, 0xFE31, + 0x23E4, 0x8136, 0xFE32, + 0x23E5, 0x8136, 0xFE33, + 0x23E6, 0x8136, 0xFE34, + 0x23E7, 0x8136, 0xFE35, + 0x23E8, 0x8136, 0xFE36, + 0x23E9, 0x8136, 0xFE37, + 0x23EA, 0x8136, 0xFE38, + 0x23EB, 0x8136, 0xFE39, + 0x23EC, 0x8137, 0x8130, + 0x23ED, 0x8137, 0x8131, + 0x23EE, 0x8137, 0x8132, + 0x23EF, 0x8137, 0x8133, + 0x23F0, 0x8137, 0x8134, + 0x23F1, 0x8137, 0x8135, + 0x23F2, 0x8137, 0x8136, + 0x23F3, 0x8137, 0x8137, + 0x23F4, 0x8137, 0x8138, + 0x23F5, 0x8137, 0x8139, + 0x23F6, 0x8137, 0x8230, + 0x23F7, 0x8137, 0x8231, + 0x23F8, 0x8137, 0x8232, + 0x23F9, 0x8137, 0x8233, + 0x23FA, 0x8137, 0x8234, + 0x23FB, 0x8137, 0x8235, + 0x23FC, 0x8137, 0x8236, + 0x23FD, 0x8137, 0x8237, + 0x23FE, 0x8137, 0x8238, + 0x23FF, 0x8137, 0x8239, + 0x2400, 0x8137, 0x8330, + 0x2401, 0x8137, 0x8331, + 0x2402, 0x8137, 0x8332, + 0x2403, 0x8137, 0x8333, + 0x2404, 0x8137, 0x8334, + 0x2405, 0x8137, 0x8335, + 0x2406, 0x8137, 0x8336, + 0x2407, 0x8137, 0x8337, + 0x2408, 0x8137, 0x8338, + 0x2409, 0x8137, 0x8339, + 0x240A, 0x8137, 0x8430, + 0x240B, 0x8137, 0x8431, + 0x240C, 0x8137, 0x8432, + 0x240D, 0x8137, 0x8433, + 0x240E, 0x8137, 0x8434, + 0x240F, 0x8137, 0x8435, + 0x2410, 0x8137, 0x8436, + 0x2411, 0x8137, 0x8437, + 0x2412, 0x8137, 0x8438, + 0x2413, 0x8137, 0x8439, + 0x2414, 0x8137, 0x8530, + 0x2415, 0x8137, 0x8531, + 0x2416, 0x8137, 0x8532, + 0x2417, 0x8137, 0x8533, + 0x2418, 0x8137, 0x8534, + 0x2419, 0x8137, 0x8535, + 0x241A, 0x8137, 0x8536, + 0x241B, 0x8137, 0x8537, + 0x241C, 0x8137, 0x8538, + 0x241D, 0x8137, 0x8539, + 0x241E, 0x8137, 0x8630, + 0x241F, 0x8137, 0x8631, + 0x2420, 0x8137, 0x8632, + 0x2421, 0x8137, 0x8633, + 0x2422, 0x8137, 0x8634, + 0x2423, 0x8137, 0x8635, + 0x2424, 0x8137, 0x8636, + 0x2425, 0x8137, 0x8637, + 0x2426, 0x8137, 0x8638, + 0x2427, 0x8137, 0x8639, + 0x2428, 0x8137, 0x8730, + 0x2429, 0x8137, 0x8731, + 0x242A, 0x8137, 0x8732, + 0x242B, 0x8137, 0x8733, + 0x242C, 0x8137, 0x8734, + 0x242D, 0x8137, 0x8735, + 0x242E, 0x8137, 0x8736, + 0x242F, 0x8137, 0x8737, + 0x2430, 0x8137, 0x8738, + 0x2431, 0x8137, 0x8739, + 0x2432, 0x8137, 0x8830, + 0x2433, 0x8137, 0x8831, + 0x2434, 0x8137, 0x8832, + 0x2435, 0x8137, 0x8833, + 0x2436, 0x8137, 0x8834, + 0x2437, 0x8137, 0x8835, + 0x2438, 0x8137, 0x8836, + 0x2439, 0x8137, 0x8837, + 0x243A, 0x8137, 0x8838, + 0x243B, 0x8137, 0x8839, + 0x243C, 0x8137, 0x8930, + 0x243D, 0x8137, 0x8931, + 0x243E, 0x8137, 0x8932, + 0x243F, 0x8137, 0x8933, + 0x2440, 0x8137, 0x8934, + 0x2441, 0x8137, 0x8935, + 0x2442, 0x8137, 0x8936, + 0x2443, 0x8137, 0x8937, + 0x2444, 0x8137, 0x8938, + 0x2445, 0x8137, 0x8939, + 0x2446, 0x8137, 0x8A30, + 0x2447, 0x8137, 0x8A31, + 0x2448, 0x8137, 0x8A32, + 0x2449, 0x8137, 0x8A33, + 0x244A, 0x8137, 0x8A34, + 0x244B, 0x8137, 0x8A35, + 0x244C, 0x8137, 0x8A36, + 0x244D, 0x8137, 0x8A37, + 0x244E, 0x8137, 0x8A38, + 0x244F, 0x8137, 0x8A39, + 0x2450, 0x8137, 0x8B30, + 0x2451, 0x8137, 0x8B31, + 0x2452, 0x8137, 0x8B32, + 0x2453, 0x8137, 0x8B33, + 0x2454, 0x8137, 0x8B34, + 0x2455, 0x8137, 0x8B35, + 0x2456, 0x8137, 0x8B36, + 0x2457, 0x8137, 0x8B37, + 0x2458, 0x8137, 0x8B38, + 0x2459, 0x8137, 0x8B39, + 0x245A, 0x8137, 0x8C30, + 0x245B, 0x8137, 0x8C31, + 0x245C, 0x8137, 0x8C32, + 0x245D, 0x8137, 0x8C33, + 0x245E, 0x8137, 0x8C34, + 0x245F, 0x8137, 0x8C35, + 0x246A, 0x8137, 0x8C36, + 0x246B, 0x8137, 0x8C37, + 0x246C, 0x8137, 0x8C38, + 0x246D, 0x8137, 0x8C39, + 0x246E, 0x8137, 0x8D30, + 0x246F, 0x8137, 0x8D31, + 0x2470, 0x8137, 0x8D32, + 0x2471, 0x8137, 0x8D33, + 0x2472, 0x8137, 0x8D34, + 0x2473, 0x8137, 0x8D35, + 0x249C, 0x8137, 0x8D36, + 0x249D, 0x8137, 0x8D37, + 0x249E, 0x8137, 0x8D38, + 0x249F, 0x8137, 0x8D39, + 0x24A0, 0x8137, 0x8E30, + 0x24A1, 0x8137, 0x8E31, + 0x24A2, 0x8137, 0x8E32, + 0x24A3, 0x8137, 0x8E33, + 0x24A4, 0x8137, 0x8E34, + 0x24A5, 0x8137, 0x8E35, + 0x24A6, 0x8137, 0x8E36, + 0x24A7, 0x8137, 0x8E37, + 0x24A8, 0x8137, 0x8E38, + 0x24A9, 0x8137, 0x8E39, + 0x24AA, 0x8137, 0x8F30, + 0x24AB, 0x8137, 0x8F31, + 0x24AC, 0x8137, 0x8F32, + 0x24AD, 0x8137, 0x8F33, + 0x24AE, 0x8137, 0x8F34, + 0x24AF, 0x8137, 0x8F35, + 0x24B0, 0x8137, 0x8F36, + 0x24B1, 0x8137, 0x8F37, + 0x24B2, 0x8137, 0x8F38, + 0x24B3, 0x8137, 0x8F39, + 0x24B4, 0x8137, 0x9030, + 0x24B5, 0x8137, 0x9031, + 0x24B6, 0x8137, 0x9032, + 0x24B7, 0x8137, 0x9033, + 0x24B8, 0x8137, 0x9034, + 0x24B9, 0x8137, 0x9035, + 0x24BA, 0x8137, 0x9036, + 0x24BB, 0x8137, 0x9037, + 0x24BC, 0x8137, 0x9038, + 0x24BD, 0x8137, 0x9039, + 0x24BE, 0x8137, 0x9130, + 0x24BF, 0x8137, 0x9131, + 0x24C0, 0x8137, 0x9132, + 0x24C1, 0x8137, 0x9133, + 0x24C2, 0x8137, 0x9134, + 0x24C3, 0x8137, 0x9135, + 0x24C4, 0x8137, 0x9136, + 0x24C5, 0x8137, 0x9137, + 0x24C6, 0x8137, 0x9138, + 0x24C7, 0x8137, 0x9139, + 0x24C8, 0x8137, 0x9230, + 0x24C9, 0x8137, 0x9231, + 0x24CA, 0x8137, 0x9232, + 0x24CB, 0x8137, 0x9233, + 0x24CC, 0x8137, 0x9234, + 0x24CD, 0x8137, 0x9235, + 0x24CE, 0x8137, 0x9236, + 0x24CF, 0x8137, 0x9237, + 0x24D0, 0x8137, 0x9238, + 0x24D1, 0x8137, 0x9239, + 0x24D2, 0x8137, 0x9330, + 0x24D3, 0x8137, 0x9331, + 0x24D4, 0x8137, 0x9332, + 0x24D5, 0x8137, 0x9333, + 0x24D6, 0x8137, 0x9334, + 0x24D7, 0x8137, 0x9335, + 0x24D8, 0x8137, 0x9336, + 0x24D9, 0x8137, 0x9337, + 0x24DA, 0x8137, 0x9338, + 0x24DB, 0x8137, 0x9339, + 0x24DC, 0x8137, 0x9430, + 0x24DD, 0x8137, 0x9431, + 0x24DE, 0x8137, 0x9432, + 0x24DF, 0x8137, 0x9433, + 0x24E0, 0x8137, 0x9434, + 0x24E1, 0x8137, 0x9435, + 0x24E2, 0x8137, 0x9436, + 0x24E3, 0x8137, 0x9437, + 0x24E4, 0x8137, 0x9438, + 0x24E5, 0x8137, 0x9439, + 0x24E6, 0x8137, 0x9530, + 0x24E7, 0x8137, 0x9531, + 0x24E8, 0x8137, 0x9532, + 0x24E9, 0x8137, 0x9533, + 0x24EA, 0x8137, 0x9534, + 0x24EB, 0x8137, 0x9535, + 0x24EC, 0x8137, 0x9536, + 0x24ED, 0x8137, 0x9537, + 0x24EE, 0x8137, 0x9538, + 0x24EF, 0x8137, 0x9539, + 0x24F0, 0x8137, 0x9630, + 0x24F1, 0x8137, 0x9631, + 0x24F2, 0x8137, 0x9632, + 0x24F3, 0x8137, 0x9633, + 0x24F4, 0x8137, 0x9634, + 0x24F5, 0x8137, 0x9635, + 0x24F6, 0x8137, 0x9636, + 0x24F7, 0x8137, 0x9637, + 0x24F8, 0x8137, 0x9638, + 0x24F9, 0x8137, 0x9639, + 0x24FA, 0x8137, 0x9730, + 0x24FB, 0x8137, 0x9731, + 0x24FC, 0x8137, 0x9732, + 0x24FD, 0x8137, 0x9733, + 0x24FE, 0x8137, 0x9734, + 0x24FF, 0x8137, 0x9735, + 0x254C, 0x8137, 0x9736, + 0x254D, 0x8137, 0x9737, + 0x254E, 0x8137, 0x9738, + 0x254F, 0x8137, 0x9739, + 0x2574, 0x8137, 0x9830, + 0x2575, 0x8137, 0x9831, + 0x2576, 0x8137, 0x9832, + 0x2577, 0x8137, 0x9833, + 0x2578, 0x8137, 0x9834, + 0x2579, 0x8137, 0x9835, + 0x257A, 0x8137, 0x9836, + 0x257B, 0x8137, 0x9837, + 0x257C, 0x8137, 0x9838, + 0x257D, 0x8137, 0x9839, + 0x257E, 0x8137, 0x9930, + 0x257F, 0x8137, 0x9931, + 0x2580, 0x8137, 0x9932, + 0x2590, 0x8137, 0x9933, + 0x2591, 0x8137, 0x9934, + 0x2592, 0x8137, 0x9935, + 0x2596, 0x8137, 0x9936, + 0x2597, 0x8137, 0x9937, + 0x2598, 0x8137, 0x9938, + 0x2599, 0x8137, 0x9939, + 0x259A, 0x8137, 0x9A30, + 0x259B, 0x8137, 0x9A31, + 0x259C, 0x8137, 0x9A32, + 0x259D, 0x8137, 0x9A33, + 0x259E, 0x8137, 0x9A34, + 0x259F, 0x8137, 0x9A35, + 0x25A2, 0x8137, 0x9A36, + 0x25A3, 0x8137, 0x9A37, + 0x25A4, 0x8137, 0x9A38, + 0x25A5, 0x8137, 0x9A39, + 0x25A6, 0x8137, 0x9B30, + 0x25A7, 0x8137, 0x9B31, + 0x25A8, 0x8137, 0x9B32, + 0x25A9, 0x8137, 0x9B33, + 0x25AA, 0x8137, 0x9B34, + 0x25AB, 0x8137, 0x9B35, + 0x25AC, 0x8137, 0x9B36, + 0x25AD, 0x8137, 0x9B37, + 0x25AE, 0x8137, 0x9B38, + 0x25AF, 0x8137, 0x9B39, + 0x25B0, 0x8137, 0x9C30, + 0x25B1, 0x8137, 0x9C31, + 0x25B4, 0x8137, 0x9C32, + 0x25B5, 0x8137, 0x9C33, + 0x25B6, 0x8137, 0x9C34, + 0x25B7, 0x8137, 0x9C35, + 0x25B8, 0x8137, 0x9C36, + 0x25B9, 0x8137, 0x9C37, + 0x25BA, 0x8137, 0x9C38, + 0x25BB, 0x8137, 0x9C39, + 0x25BE, 0x8137, 0x9D30, + 0x25BF, 0x8137, 0x9D31, + 0x25C0, 0x8137, 0x9D32, + 0x25C1, 0x8137, 0x9D33, + 0x25C2, 0x8137, 0x9D34, + 0x25C3, 0x8137, 0x9D35, + 0x25C4, 0x8137, 0x9D36, + 0x25C5, 0x8137, 0x9D37, + 0x25C8, 0x8137, 0x9D38, + 0x25C9, 0x8137, 0x9D39, + 0x25CA, 0x8137, 0x9E30, + 0x25CC, 0x8137, 0x9E31, + 0x25CD, 0x8137, 0x9E32, + 0x25D0, 0x8137, 0x9E33, + 0x25D1, 0x8137, 0x9E34, + 0x25D2, 0x8137, 0x9E35, + 0x25D3, 0x8137, 0x9E36, + 0x25D4, 0x8137, 0x9E37, + 0x25D5, 0x8137, 0x9E38, + 0x25D6, 0x8137, 0x9E39, + 0x25D7, 0x8137, 0x9F30, + 0x25D8, 0x8137, 0x9F31, + 0x25D9, 0x8137, 0x9F32, + 0x25DA, 0x8137, 0x9F33, + 0x25DB, 0x8137, 0x9F34, + 0x25DC, 0x8137, 0x9F35, + 0x25DD, 0x8137, 0x9F36, + 0x25DE, 0x8137, 0x9F37, + 0x25DF, 0x8137, 0x9F38, + 0x25E0, 0x8137, 0x9F39, + 0x25E1, 0x8137, 0xA030, + 0x25E6, 0x8137, 0xA031, + 0x25E7, 0x8137, 0xA032, + 0x25E8, 0x8137, 0xA033, + 0x25E9, 0x8137, 0xA034, + 0x25EA, 0x8137, 0xA035, + 0x25EB, 0x8137, 0xA036, + 0x25EC, 0x8137, 0xA037, + 0x25ED, 0x8137, 0xA038, + 0x25EE, 0x8137, 0xA039, + 0x25EF, 0x8137, 0xA130, + 0x25F0, 0x8137, 0xA131, + 0x25F1, 0x8137, 0xA132, + 0x25F2, 0x8137, 0xA133, + 0x25F3, 0x8137, 0xA134, + 0x25F4, 0x8137, 0xA135, + 0x25F5, 0x8137, 0xA136, + 0x25F6, 0x8137, 0xA137, + 0x25F7, 0x8137, 0xA138, + 0x25F8, 0x8137, 0xA139, + 0x25F9, 0x8137, 0xA230, + 0x25FA, 0x8137, 0xA231, + 0x25FB, 0x8137, 0xA232, + 0x25FC, 0x8137, 0xA233, + 0x25FD, 0x8137, 0xA234, + 0x25FE, 0x8137, 0xA235, + 0x25FF, 0x8137, 0xA236, + 0x2600, 0x8137, 0xA237, + 0x2601, 0x8137, 0xA238, + 0x2602, 0x8137, 0xA239, + 0x2603, 0x8137, 0xA330, + 0x2604, 0x8137, 0xA331, + 0x2607, 0x8137, 0xA332, + 0x2608, 0x8137, 0xA333, + 0x260A, 0x8137, 0xA334, + 0x260B, 0x8137, 0xA335, + 0x260C, 0x8137, 0xA336, + 0x260D, 0x8137, 0xA337, + 0x260E, 0x8137, 0xA338, + 0x260F, 0x8137, 0xA339, + 0x2610, 0x8137, 0xA430, + 0x2611, 0x8137, 0xA431, + 0x2612, 0x8137, 0xA432, + 0x2613, 0x8137, 0xA433, + 0x2614, 0x8137, 0xA434, + 0x2615, 0x8137, 0xA435, + 0x2616, 0x8137, 0xA436, + 0x2617, 0x8137, 0xA437, + 0x2618, 0x8137, 0xA438, + 0x2619, 0x8137, 0xA439, + 0x261A, 0x8137, 0xA530, + 0x261B, 0x8137, 0xA531, + 0x261C, 0x8137, 0xA532, + 0x261D, 0x8137, 0xA533, + 0x261E, 0x8137, 0xA534, + 0x261F, 0x8137, 0xA535, + 0x2620, 0x8137, 0xA536, + 0x2621, 0x8137, 0xA537, + 0x2622, 0x8137, 0xA538, + 0x2623, 0x8137, 0xA539, + 0x2624, 0x8137, 0xA630, + 0x2625, 0x8137, 0xA631, + 0x2626, 0x8137, 0xA632, + 0x2627, 0x8137, 0xA633, + 0x2628, 0x8137, 0xA634, + 0x2629, 0x8137, 0xA635, + 0x262A, 0x8137, 0xA636, + 0x262B, 0x8137, 0xA637, + 0x262C, 0x8137, 0xA638, + 0x262D, 0x8137, 0xA639, + 0x262E, 0x8137, 0xA730, + 0x262F, 0x8137, 0xA731, + 0x2630, 0x8137, 0xA732, + 0x2631, 0x8137, 0xA733, + 0x2632, 0x8137, 0xA734, + 0x2633, 0x8137, 0xA735, + 0x2634, 0x8137, 0xA736, + 0x2635, 0x8137, 0xA737, + 0x2636, 0x8137, 0xA738, + 0x2637, 0x8137, 0xA739, + 0x2638, 0x8137, 0xA830, + 0x2639, 0x8137, 0xA831, + 0x263A, 0x8137, 0xA832, + 0x263B, 0x8137, 0xA833, + 0x263C, 0x8137, 0xA834, + 0x263D, 0x8137, 0xA835, + 0x263E, 0x8137, 0xA836, + 0x263F, 0x8137, 0xA837, + 0x2641, 0x8137, 0xA838, + 0x2E82, 0x8138, 0xFD39, + 0x2E83, 0x8138, 0xFE30, + 0x2E85, 0x8138, 0xFE31, + 0x2E86, 0x8138, 0xFE32, + 0x2E87, 0x8138, 0xFE33, + 0x2E89, 0x8138, 0xFE34, + 0x2E8A, 0x8138, 0xFE35, + 0x2E8D, 0x8138, 0xFE36, + 0x2E8E, 0x8138, 0xFE37, + 0x2E8F, 0x8138, 0xFE38, + 0x2E90, 0x8138, 0xFE39, + 0x2E91, 0x8139, 0x8130, + 0x2E92, 0x8139, 0x8131, + 0x2E93, 0x8139, 0x8132, + 0x2E94, 0x8139, 0x8133, + 0x2E95, 0x8139, 0x8134, + 0x2E96, 0x8139, 0x8135, + 0x2E98, 0x8139, 0x8136, + 0x2E99, 0x8139, 0x8137, + 0x2E9A, 0x8139, 0x8138, + 0x2E9B, 0x8139, 0x8139, + 0x2E9C, 0x8139, 0x8230, + 0x2E9D, 0x8139, 0x8231, + 0x2E9E, 0x8139, 0x8232, + 0x2E9F, 0x8139, 0x8233, + 0x2EA0, 0x8139, 0x8234, + 0x2EA1, 0x8139, 0x8235, + 0x2EA2, 0x8139, 0x8236, + 0x2EA3, 0x8139, 0x8237, + 0x2EA4, 0x8139, 0x8238, + 0x2EA5, 0x8139, 0x8239, + 0x2EA6, 0x8139, 0x8330, + 0x2EA8, 0x8139, 0x8331, + 0x2EA9, 0x8139, 0x8332, + 0x2EAB, 0x8139, 0x8333, + 0x2EAC, 0x8139, 0x8334, + 0x2EAD, 0x8139, 0x8335, + 0x2EAF, 0x8139, 0x8336, + 0x2EB0, 0x8139, 0x8337, + 0x2EB1, 0x8139, 0x8338, + 0x2EB2, 0x8139, 0x8339, + 0x2EB4, 0x8139, 0x8430, + 0x2EB5, 0x8139, 0x8431, + 0x2EB8, 0x8139, 0x8432, + 0x2EB9, 0x8139, 0x8433, + 0x2EBA, 0x8139, 0x8434, + 0x2EBC, 0x8139, 0x8435, + 0x2EBD, 0x8139, 0x8436, + 0x2EBE, 0x8139, 0x8437, + 0x2EBF, 0x8139, 0x8438, + 0x2EC0, 0x8139, 0x8439, + 0x2EC1, 0x8139, 0x8530, + 0x2EC2, 0x8139, 0x8531, + 0x2EC3, 0x8139, 0x8532, + 0x2EC4, 0x8139, 0x8533, + 0x2EC5, 0x8139, 0x8534, + 0x2EC6, 0x8139, 0x8535, + 0x2EC7, 0x8139, 0x8536, + 0x2EC8, 0x8139, 0x8537, + 0x2EC9, 0x8139, 0x8538, + 0x2ECB, 0x8139, 0x8539, + 0x2ECC, 0x8139, 0x8630, + 0x2ECD, 0x8139, 0x8631, + 0x2ECE, 0x8139, 0x8632, + 0x2ECF, 0x8139, 0x8633, + 0x2ED0, 0x8139, 0x8634, + 0x2ED1, 0x8139, 0x8635, + 0x2ED2, 0x8139, 0x8636, + 0x2ED3, 0x8139, 0x8637, + 0x2ED4, 0x8139, 0x8638, + 0x2ED5, 0x8139, 0x8639, + 0x2ED6, 0x8139, 0x8730, + 0x2ED7, 0x8139, 0x8731, + 0x2ED8, 0x8139, 0x8732, + 0x2ED9, 0x8139, 0x8733, + 0x2EDA, 0x8139, 0x8734, + 0x2EDB, 0x8139, 0x8735, + 0x2EDC, 0x8139, 0x8736, + 0x2EDD, 0x8139, 0x8737, + 0x2EDE, 0x8139, 0x8738, + 0x2EDF, 0x8139, 0x8739, + 0x2EE0, 0x8139, 0x8830, + 0x2EE1, 0x8139, 0x8831, + 0x2EE2, 0x8139, 0x8832, + 0x2EE3, 0x8139, 0x8833, + 0x2EE4, 0x8139, 0x8834, + 0x2EE5, 0x8139, 0x8835, + 0x2EE6, 0x8139, 0x8836, + 0x2EE7, 0x8139, 0x8837, + 0x2EE8, 0x8139, 0x8838, + 0x2EE9, 0x8139, 0x8839, + 0x2EEA, 0x8139, 0x8930, + 0x2EEB, 0x8139, 0x8931, + 0x2EEC, 0x8139, 0x8932, + 0x2EED, 0x8139, 0x8933, + 0x2EEE, 0x8139, 0x8934, + 0x2EEF, 0x8139, 0x8935, + 0x2EF0, 0x8139, 0x8936, + 0x2EF1, 0x8139, 0x8937, + 0x2EF2, 0x8139, 0x8938, + 0x2EF3, 0x8139, 0x8939, + 0x2EF4, 0x8139, 0x8A30, + 0x2EF5, 0x8139, 0x8A31, + 0x2EF6, 0x8139, 0x8A32, + 0x2EF7, 0x8139, 0x8A33, + 0x2EF8, 0x8139, 0x8A34, + 0x2EF9, 0x8139, 0x8A35, + 0x2EFA, 0x8139, 0x8A36, + 0x2EFB, 0x8139, 0x8A37, + 0x2EFC, 0x8139, 0x8A38, + 0x2EFD, 0x8139, 0x8A39, + 0x2EFE, 0x8139, 0x8B30, + 0x2EFF, 0x8139, 0x8B31, + 0x2F00, 0x8139, 0x8B32, + 0x2F01, 0x8139, 0x8B33, + 0x2F02, 0x8139, 0x8B34, + 0x2F03, 0x8139, 0x8B35, + 0x2F04, 0x8139, 0x8B36, + 0x2F05, 0x8139, 0x8B37, + 0x2F06, 0x8139, 0x8B38, + 0x2F07, 0x8139, 0x8B39, + 0x2F08, 0x8139, 0x8C30, + 0x2F09, 0x8139, 0x8C31, + 0x2F0A, 0x8139, 0x8C32, + 0x2F0B, 0x8139, 0x8C33, + 0x2F0C, 0x8139, 0x8C34, + 0x2F0D, 0x8139, 0x8C35, + 0x2F0E, 0x8139, 0x8C36, + 0x2F0F, 0x8139, 0x8C37, + 0x2F10, 0x8139, 0x8C38, + 0x2F11, 0x8139, 0x8C39, + 0x2F12, 0x8139, 0x8D30, + 0x2F13, 0x8139, 0x8D31, + 0x2F14, 0x8139, 0x8D32, + 0x2F15, 0x8139, 0x8D33, + 0x2F16, 0x8139, 0x8D34, + 0x2F17, 0x8139, 0x8D35, + 0x2F18, 0x8139, 0x8D36, + 0x2F19, 0x8139, 0x8D37, + 0x2F1A, 0x8139, 0x8D38, + 0x2F1B, 0x8139, 0x8D39, + 0x2F1C, 0x8139, 0x8E30, + 0x2F1D, 0x8139, 0x8E31, + 0x2F1E, 0x8139, 0x8E32, + 0x2F1F, 0x8139, 0x8E33, + 0x2F20, 0x8139, 0x8E34, + 0x2F21, 0x8139, 0x8E35, + 0x2F22, 0x8139, 0x8E36, + 0x2F23, 0x8139, 0x8E37, + 0x2F24, 0x8139, 0x8E38, + 0x2F25, 0x8139, 0x8E39, + 0x2F26, 0x8139, 0x8F30, + 0x2F27, 0x8139, 0x8F31, + 0x2F28, 0x8139, 0x8F32, + 0x2F29, 0x8139, 0x8F33, + 0x2F2A, 0x8139, 0x8F34, + 0x2F2B, 0x8139, 0x8F35, + 0x2F2C, 0x8139, 0x8F36, + 0x2F2D, 0x8139, 0x8F37, + 0x2F2E, 0x8139, 0x8F38, + 0x2F2F, 0x8139, 0x8F39, + 0x2F30, 0x8139, 0x9030, + 0x2F31, 0x8139, 0x9031, + 0x2F32, 0x8139, 0x9032, + 0x2F33, 0x8139, 0x9033, + 0x2F34, 0x8139, 0x9034, + 0x2F35, 0x8139, 0x9035, + 0x2F36, 0x8139, 0x9036, + 0x2F37, 0x8139, 0x9037, + 0x2F38, 0x8139, 0x9038, + 0x2F39, 0x8139, 0x9039, + 0x2F3A, 0x8139, 0x9130, + 0x2F3B, 0x8139, 0x9131, + 0x2F3C, 0x8139, 0x9132, + 0x2F3D, 0x8139, 0x9133, + 0x2F3E, 0x8139, 0x9134, + 0x2F3F, 0x8139, 0x9135, + 0x2F40, 0x8139, 0x9136, + 0x2F41, 0x8139, 0x9137, + 0x2F42, 0x8139, 0x9138, + 0x2F43, 0x8139, 0x9139, + 0x2F44, 0x8139, 0x9230, + 0x2F45, 0x8139, 0x9231, + 0x2F46, 0x8139, 0x9232, + 0x2F47, 0x8139, 0x9233, + 0x2F48, 0x8139, 0x9234, + 0x2F49, 0x8139, 0x9235, + 0x2F4A, 0x8139, 0x9236, + 0x2F4B, 0x8139, 0x9237, + 0x2F4C, 0x8139, 0x9238, + 0x2F4D, 0x8139, 0x9239, + 0x2F4E, 0x8139, 0x9330, + 0x2F4F, 0x8139, 0x9331, + 0x2F50, 0x8139, 0x9332, + 0x2F51, 0x8139, 0x9333, + 0x2F52, 0x8139, 0x9334, + 0x2F53, 0x8139, 0x9335, + 0x2F54, 0x8139, 0x9336, + 0x2F55, 0x8139, 0x9337, + 0x2F56, 0x8139, 0x9338, + 0x2F57, 0x8139, 0x9339, + 0x2F58, 0x8139, 0x9430, + 0x2F59, 0x8139, 0x9431, + 0x2F5A, 0x8139, 0x9432, + 0x2F5B, 0x8139, 0x9433, + 0x2F5C, 0x8139, 0x9434, + 0x2F5D, 0x8139, 0x9435, + 0x2F5E, 0x8139, 0x9436, + 0x2F5F, 0x8139, 0x9437, + 0x2F60, 0x8139, 0x9438, + 0x2F61, 0x8139, 0x9439, + 0x2F62, 0x8139, 0x9530, + 0x2F63, 0x8139, 0x9531, + 0x2F64, 0x8139, 0x9532, + 0x2F65, 0x8139, 0x9533, + 0x2F66, 0x8139, 0x9534, + 0x2F67, 0x8139, 0x9535, + 0x2F68, 0x8139, 0x9536, + 0x2F69, 0x8139, 0x9537, + 0x2F6A, 0x8139, 0x9538, + 0x2F6B, 0x8139, 0x9539, + 0x2F6C, 0x8139, 0x9630, + 0x2F6D, 0x8139, 0x9631, + 0x2F6E, 0x8139, 0x9632, + 0x2F6F, 0x8139, 0x9633, + 0x2F70, 0x8139, 0x9634, + 0x2F71, 0x8139, 0x9635, + 0x2F72, 0x8139, 0x9636, + 0x2F73, 0x8139, 0x9637, + 0x2F74, 0x8139, 0x9638, + 0x2F75, 0x8139, 0x9639, + 0x2F76, 0x8139, 0x9730, + 0x2F77, 0x8139, 0x9731, + 0x2F78, 0x8139, 0x9732, + 0x2F79, 0x8139, 0x9733, + 0x2F7A, 0x8139, 0x9734, + 0x2F7B, 0x8139, 0x9735, + 0x2F7C, 0x8139, 0x9736, + 0x2F7D, 0x8139, 0x9737, + 0x2F7E, 0x8139, 0x9738, + 0x2F7F, 0x8139, 0x9739, + 0x2F80, 0x8139, 0x9830, + 0x2F81, 0x8139, 0x9831, + 0x2F82, 0x8139, 0x9832, + 0x2F83, 0x8139, 0x9833, + 0x2F84, 0x8139, 0x9834, + 0x2F85, 0x8139, 0x9835, + 0x2F86, 0x8139, 0x9836, + 0x2F87, 0x8139, 0x9837, + 0x2F88, 0x8139, 0x9838, + 0x2F89, 0x8139, 0x9839, + 0x2F8A, 0x8139, 0x9930, + 0x2F8B, 0x8139, 0x9931, + 0x2F8C, 0x8139, 0x9932, + 0x2F8D, 0x8139, 0x9933, + 0x2F8E, 0x8139, 0x9934, + 0x2F8F, 0x8139, 0x9935, + 0x2F90, 0x8139, 0x9936, + 0x2F91, 0x8139, 0x9937, + 0x2F92, 0x8139, 0x9938, + 0x2F93, 0x8139, 0x9939, + 0x2F94, 0x8139, 0x9A30, + 0x2F95, 0x8139, 0x9A31, + 0x2F96, 0x8139, 0x9A32, + 0x2F97, 0x8139, 0x9A33, + 0x2F98, 0x8139, 0x9A34, + 0x2F99, 0x8139, 0x9A35, + 0x2F9A, 0x8139, 0x9A36, + 0x2F9B, 0x8139, 0x9A37, + 0x2F9C, 0x8139, 0x9A38, + 0x2F9D, 0x8139, 0x9A39, + 0x2F9E, 0x8139, 0x9B30, + 0x2F9F, 0x8139, 0x9B31, + 0x2FA0, 0x8139, 0x9B32, + 0x2FA1, 0x8139, 0x9B33, + 0x2FA2, 0x8139, 0x9B34, + 0x2FA3, 0x8139, 0x9B35, + 0x2FA4, 0x8139, 0x9B36, + 0x2FA5, 0x8139, 0x9B37, + 0x2FA6, 0x8139, 0x9B38, + 0x2FA7, 0x8139, 0x9B39, + 0x2FA8, 0x8139, 0x9C30, + 0x2FA9, 0x8139, 0x9C31, + 0x2FAA, 0x8139, 0x9C32, + 0x2FAB, 0x8139, 0x9C33, + 0x2FAC, 0x8139, 0x9C34, + 0x2FAD, 0x8139, 0x9C35, + 0x2FAE, 0x8139, 0x9C36, + 0x2FAF, 0x8139, 0x9C37, + 0x2FB0, 0x8139, 0x9C38, + 0x2FB1, 0x8139, 0x9C39, + 0x2FB2, 0x8139, 0x9D30, + 0x2FB3, 0x8139, 0x9D31, + 0x2FB4, 0x8139, 0x9D32, + 0x2FB5, 0x8139, 0x9D33, + 0x2FB6, 0x8139, 0x9D34, + 0x2FB7, 0x8139, 0x9D35, + 0x2FB8, 0x8139, 0x9D36, + 0x2FB9, 0x8139, 0x9D37, + 0x2FBA, 0x8139, 0x9D38, + 0x2FBB, 0x8139, 0x9D39, + 0x2FBC, 0x8139, 0x9E30, + 0x2FBD, 0x8139, 0x9E31, + 0x2FBE, 0x8139, 0x9E32, + 0x2FBF, 0x8139, 0x9E33, + 0x2FC0, 0x8139, 0x9E34, + 0x2FC1, 0x8139, 0x9E35, + 0x2FC2, 0x8139, 0x9E36, + 0x2FC3, 0x8139, 0x9E37, + 0x2FC4, 0x8139, 0x9E38, + 0x2FC5, 0x8139, 0x9E39, + 0x2FC6, 0x8139, 0x9F30, + 0x2FC7, 0x8139, 0x9F31, + 0x2FC8, 0x8139, 0x9F32, + 0x2FC9, 0x8139, 0x9F33, + 0x2FCA, 0x8139, 0x9F34, + 0x2FCB, 0x8139, 0x9F35, + 0x2FCC, 0x8139, 0x9F36, + 0x2FCD, 0x8139, 0x9F37, + 0x2FCE, 0x8139, 0x9F38, + 0x2FCF, 0x8139, 0x9F39, + 0x2FD0, 0x8139, 0xA030, + 0x2FD1, 0x8139, 0xA031, + 0x2FD2, 0x8139, 0xA032, + 0x2FD3, 0x8139, 0xA033, + 0x2FD4, 0x8139, 0xA034, + 0x2FD5, 0x8139, 0xA035, + 0x2FD6, 0x8139, 0xA036, + 0x2FD7, 0x8139, 0xA037, + 0x2FD8, 0x8139, 0xA038, + 0x2FD9, 0x8139, 0xA039, + 0x2FDA, 0x8139, 0xA130, + 0x2FDB, 0x8139, 0xA131, + 0x2FDC, 0x8139, 0xA132, + 0x2FDD, 0x8139, 0xA133, + 0x2FDE, 0x8139, 0xA134, + 0x2FDF, 0x8139, 0xA135, + 0x2FE0, 0x8139, 0xA136, + 0x2FE1, 0x8139, 0xA137, + 0x2FE2, 0x8139, 0xA138, + 0x2FE3, 0x8139, 0xA139, + 0x2FE4, 0x8139, 0xA230, + 0x2FE5, 0x8139, 0xA231, + 0x2FE6, 0x8139, 0xA232, + 0x2FE7, 0x8139, 0xA233, + 0x2FE8, 0x8139, 0xA234, + 0x2FE9, 0x8139, 0xA235, + 0x2FEA, 0x8139, 0xA236, + 0x2FEB, 0x8139, 0xA237, + 0x2FEC, 0x8139, 0xA238, + 0x2FED, 0x8139, 0xA239, + 0x2FEE, 0x8139, 0xA330, + 0x2FEF, 0x8139, 0xA331, + 0x2FFC, 0x8139, 0xA332, + 0x2FFD, 0x8139, 0xA333, + 0x2FFE, 0x8139, 0xA334, + 0x2FFF, 0x8139, 0xA335, + 0x3004, 0x8139, 0xA336, + 0x3018, 0x8139, 0xA337, + 0x3019, 0x8139, 0xA338, + 0x301A, 0x8139, 0xA339, + 0x301B, 0x8139, 0xA430, + 0x301C, 0x8139, 0xA431, + 0x301F, 0x8139, 0xA432, + 0x3020, 0x8139, 0xA433, + 0x302A, 0x8139, 0xA434, + 0x302B, 0x8139, 0xA435, + 0x302C, 0x8139, 0xA436, + 0x302D, 0x8139, 0xA437, + 0x302E, 0x8139, 0xA438, + 0x302F, 0x8139, 0xA439, + 0x3030, 0x8139, 0xA530, + 0x3031, 0x8139, 0xA531, + 0x3032, 0x8139, 0xA532, + 0x3033, 0x8139, 0xA533, + 0x3034, 0x8139, 0xA534, + 0x3035, 0x8139, 0xA535, + 0x3036, 0x8139, 0xA536, + 0x3037, 0x8139, 0xA537, + 0x3038, 0x8139, 0xA538, + 0x3039, 0x8139, 0xA539, + 0x303A, 0x8139, 0xA630, + 0x303B, 0x8139, 0xA631, + 0x303C, 0x8139, 0xA632, + 0x303D, 0x8139, 0xA633, + 0x303F, 0x8139, 0xA634, + 0x3040, 0x8139, 0xA635, + 0x3094, 0x8139, 0xA636, + 0x3095, 0x8139, 0xA637, + 0x3096, 0x8139, 0xA638, + 0x3097, 0x8139, 0xA639, + 0x3098, 0x8139, 0xA730, + 0x3099, 0x8139, 0xA731, + 0x309A, 0x8139, 0xA732, + 0x309F, 0x8139, 0xA733, + 0x30A0, 0x8139, 0xA734, + 0x30F7, 0x8139, 0xA735, + 0x30F8, 0x8139, 0xA736, + 0x30F9, 0x8139, 0xA737, + 0x30FA, 0x8139, 0xA738, + 0x30FB, 0x8139, 0xA739, + 0x30FF, 0x8139, 0xA830, + 0x3100, 0x8139, 0xA831, + 0x3101, 0x8139, 0xA832, + 0x3102, 0x8139, 0xA833, + 0x3103, 0x8139, 0xA834, + 0x3104, 0x8139, 0xA835, + 0x312A, 0x8139, 0xA836, + 0x312B, 0x8139, 0xA837, + 0x312C, 0x8139, 0xA838, + 0x312D, 0x8139, 0xA839, + 0x312E, 0x8139, 0xA930, + 0x312F, 0x8139, 0xA931, + 0x3130, 0x8139, 0xA932, + 0x3131, 0x8139, 0xA933, + 0x3132, 0x8139, 0xA934, + 0x3133, 0x8139, 0xA935, + 0x3134, 0x8139, 0xA936, + 0x3135, 0x8139, 0xA937, + 0x3136, 0x8139, 0xA938, + 0x3137, 0x8139, 0xA939, + 0x3138, 0x8139, 0xAA30, + 0x3139, 0x8139, 0xAA31, + 0x313A, 0x8139, 0xAA32, + 0x313B, 0x8139, 0xAA33, + 0x313C, 0x8139, 0xAA34, + 0x313D, 0x8139, 0xAA35, + 0x313E, 0x8139, 0xAA36, + 0x313F, 0x8139, 0xAA37, + 0x3140, 0x8139, 0xAA38, + 0x3141, 0x8139, 0xAA39, + 0x3142, 0x8139, 0xAB30, + 0x3143, 0x8139, 0xAB31, + 0x3144, 0x8139, 0xAB32, + 0x3145, 0x8139, 0xAB33, + 0x3146, 0x8139, 0xAB34, + 0x3147, 0x8139, 0xAB35, + 0x3148, 0x8139, 0xAB36, + 0x3149, 0x8139, 0xAB37, + 0x314A, 0x8139, 0xAB38, + 0x314B, 0x8139, 0xAB39, + 0x314C, 0x8139, 0xAC30, + 0x314D, 0x8139, 0xAC31, + 0x314E, 0x8139, 0xAC32, + 0x314F, 0x8139, 0xAC33, + 0x3150, 0x8139, 0xAC34, + 0x3151, 0x8139, 0xAC35, + 0x3152, 0x8139, 0xAC36, + 0x3153, 0x8139, 0xAC37, + 0x3154, 0x8139, 0xAC38, + 0x3155, 0x8139, 0xAC39, + 0x3156, 0x8139, 0xAD30, + 0x3157, 0x8139, 0xAD31, + 0x3158, 0x8139, 0xAD32, + 0x3159, 0x8139, 0xAD33, + 0x315A, 0x8139, 0xAD34, + 0x315B, 0x8139, 0xAD35, + 0x315C, 0x8139, 0xAD36, + 0x315D, 0x8139, 0xAD37, + 0x315E, 0x8139, 0xAD38, + 0x315F, 0x8139, 0xAD39, + 0x3160, 0x8139, 0xAE30, + 0x3161, 0x8139, 0xAE31, + 0x3162, 0x8139, 0xAE32, + 0x3163, 0x8139, 0xAE33, + 0x3164, 0x8139, 0xAE34, + 0x3165, 0x8139, 0xAE35, + 0x3166, 0x8139, 0xAE36, + 0x3167, 0x8139, 0xAE37, + 0x3168, 0x8139, 0xAE38, + 0x3169, 0x8139, 0xAE39, + 0x316A, 0x8139, 0xAF30, + 0x316B, 0x8139, 0xAF31, + 0x316C, 0x8139, 0xAF32, + 0x316D, 0x8139, 0xAF33, + 0x316E, 0x8139, 0xAF34, + 0x316F, 0x8139, 0xAF35, + 0x3170, 0x8139, 0xAF36, + 0x3171, 0x8139, 0xAF37, + 0x3172, 0x8139, 0xAF38, + 0x3173, 0x8139, 0xAF39, + 0x3174, 0x8139, 0xB030, + 0x3175, 0x8139, 0xB031, + 0x3176, 0x8139, 0xB032, + 0x3177, 0x8139, 0xB033, + 0x3178, 0x8139, 0xB034, + 0x3179, 0x8139, 0xB035, + 0x317A, 0x8139, 0xB036, + 0x317B, 0x8139, 0xB037, + 0x317C, 0x8139, 0xB038, + 0x317D, 0x8139, 0xB039, + 0x317E, 0x8139, 0xB130, + 0x317F, 0x8139, 0xB131, + 0x3180, 0x8139, 0xB132, + 0x3181, 0x8139, 0xB133, + 0x3182, 0x8139, 0xB134, + 0x3183, 0x8139, 0xB135, + 0x3184, 0x8139, 0xB136, + 0x3185, 0x8139, 0xB137, + 0x3186, 0x8139, 0xB138, + 0x3187, 0x8139, 0xB139, + 0x3188, 0x8139, 0xB230, + 0x3189, 0x8139, 0xB231, + 0x318A, 0x8139, 0xB232, + 0x318B, 0x8139, 0xB233, + 0x318C, 0x8139, 0xB234, + 0x318D, 0x8139, 0xB235, + 0x318E, 0x8139, 0xB236, + 0x318F, 0x8139, 0xB237, + 0x3190, 0x8139, 0xB238, + 0x3191, 0x8139, 0xB239, + 0x3192, 0x8139, 0xB330, + 0x3193, 0x8139, 0xB331, + 0x3194, 0x8139, 0xB332, + 0x3195, 0x8139, 0xB333, + 0x3196, 0x8139, 0xB334, + 0x3197, 0x8139, 0xB335, + 0x3198, 0x8139, 0xB336, + 0x3199, 0x8139, 0xB337, + 0x319A, 0x8139, 0xB338, + 0x319B, 0x8139, 0xB339, + 0x319C, 0x8139, 0xB430, + 0x319D, 0x8139, 0xB431, + 0x319E, 0x8139, 0xB432, + 0x319F, 0x8139, 0xB433, + 0x31A0, 0x8139, 0xB434, + 0x31A1, 0x8139, 0xB435, + 0x31A2, 0x8139, 0xB436, + 0x31A3, 0x8139, 0xB437, + 0x31A4, 0x8139, 0xB438, + 0x31A5, 0x8139, 0xB439, + 0x31A6, 0x8139, 0xB530, + 0x31A7, 0x8139, 0xB531, + 0x31A8, 0x8139, 0xB532, + 0x31A9, 0x8139, 0xB533, + 0x31AA, 0x8139, 0xB534, + 0x31AB, 0x8139, 0xB535, + 0x31AC, 0x8139, 0xB536, + 0x31AD, 0x8139, 0xB537, + 0x31AE, 0x8139, 0xB538, + 0x31AF, 0x8139, 0xB539, + 0x31B0, 0x8139, 0xB630, + 0x31B1, 0x8139, 0xB631, + 0x31B2, 0x8139, 0xB632, + 0x31B3, 0x8139, 0xB633, + 0x31B4, 0x8139, 0xB634, + 0x31B5, 0x8139, 0xB635, + 0x31B6, 0x8139, 0xB636, + 0x31B7, 0x8139, 0xB637, + 0x31B8, 0x8139, 0xB638, + 0x31B9, 0x8139, 0xB639, + 0x31BA, 0x8139, 0xB730, + 0x31BB, 0x8139, 0xB731, + 0x31BC, 0x8139, 0xB732, + 0x31BD, 0x8139, 0xB733, + 0x31BE, 0x8139, 0xB734, + 0x31BF, 0x8139, 0xB735, + 0x31C0, 0x8139, 0xB736, + 0x31C1, 0x8139, 0xB737, + 0x31C2, 0x8139, 0xB738, + 0x31C3, 0x8139, 0xB739, + 0x31C4, 0x8139, 0xB830, + 0x31C5, 0x8139, 0xB831, + 0x31C6, 0x8139, 0xB832, + 0x31C7, 0x8139, 0xB833, + 0x31C8, 0x8139, 0xB834, + 0x31C9, 0x8139, 0xB835, + 0x31CA, 0x8139, 0xB836, + 0x31CB, 0x8139, 0xB837, + 0x31CC, 0x8139, 0xB838, + 0x31CD, 0x8139, 0xB839, + 0x31CE, 0x8139, 0xB930, + 0x31CF, 0x8139, 0xB931, + 0x31D0, 0x8139, 0xB932, + 0x31D1, 0x8139, 0xB933, + 0x31D2, 0x8139, 0xB934, + 0x31D3, 0x8139, 0xB935, + 0x31D4, 0x8139, 0xB936, + 0x31D5, 0x8139, 0xB937, + 0x31D6, 0x8139, 0xB938, + 0x31D7, 0x8139, 0xB939, + 0x31D8, 0x8139, 0xBA30, + 0x31D9, 0x8139, 0xBA31, + 0x31DA, 0x8139, 0xBA32, + 0x31DB, 0x8139, 0xBA33, + 0x31DC, 0x8139, 0xBA34, + 0x31DD, 0x8139, 0xBA35, + 0x31DE, 0x8139, 0xBA36, + 0x31DF, 0x8139, 0xBA37, + 0x31E0, 0x8139, 0xBA38, + 0x31E1, 0x8139, 0xBA39, + 0x31E2, 0x8139, 0xBB30, + 0x31E3, 0x8139, 0xBB31, + 0x31E4, 0x8139, 0xBB32, + 0x31E5, 0x8139, 0xBB33, + 0x31E6, 0x8139, 0xBB34, + 0x31E7, 0x8139, 0xBB35, + 0x31E8, 0x8139, 0xBB36, + 0x31E9, 0x8139, 0xBB37, + 0x31EA, 0x8139, 0xBB38, + 0x31EB, 0x8139, 0xBB39, + 0x31EC, 0x8139, 0xBC30, + 0x31ED, 0x8139, 0xBC31, + 0x31EE, 0x8139, 0xBC32, + 0x31EF, 0x8139, 0xBC33, + 0x31F0, 0x8139, 0xBC34, + 0x31F1, 0x8139, 0xBC35, + 0x31F2, 0x8139, 0xBC36, + 0x31F3, 0x8139, 0xBC37, + 0x31F4, 0x8139, 0xBC38, + 0x31F5, 0x8139, 0xBC39, + 0x31F6, 0x8139, 0xBD30, + 0x31F7, 0x8139, 0xBD31, + 0x31F8, 0x8139, 0xBD32, + 0x31F9, 0x8139, 0xBD33, + 0x31FA, 0x8139, 0xBD34, + 0x31FB, 0x8139, 0xBD35, + 0x31FC, 0x8139, 0xBD36, + 0x31FD, 0x8139, 0xBD37, + 0x31FE, 0x8139, 0xBD38, + 0x31FF, 0x8139, 0xBD39, + 0x3200, 0x8139, 0xBE30, + 0x3201, 0x8139, 0xBE31, + 0x3202, 0x8139, 0xBE32, + 0x3203, 0x8139, 0xBE33, + 0x3204, 0x8139, 0xBE34, + 0x3205, 0x8139, 0xBE35, + 0x3206, 0x8139, 0xBE36, + 0x3207, 0x8139, 0xBE37, + 0x3208, 0x8139, 0xBE38, + 0x3209, 0x8139, 0xBE39, + 0x320A, 0x8139, 0xBF30, + 0x320B, 0x8139, 0xBF31, + 0x320C, 0x8139, 0xBF32, + 0x320D, 0x8139, 0xBF33, + 0x320E, 0x8139, 0xBF34, + 0x320F, 0x8139, 0xBF35, + 0x3210, 0x8139, 0xBF36, + 0x3211, 0x8139, 0xBF37, + 0x3212, 0x8139, 0xBF38, + 0x3213, 0x8139, 0xBF39, + 0x3214, 0x8139, 0xC030, + 0x3215, 0x8139, 0xC031, + 0x3216, 0x8139, 0xC032, + 0x3217, 0x8139, 0xC033, + 0x3218, 0x8139, 0xC034, + 0x3219, 0x8139, 0xC035, + 0x321A, 0x8139, 0xC036, + 0x321B, 0x8139, 0xC037, + 0x321C, 0x8139, 0xC038, + 0x321D, 0x8139, 0xC039, + 0x321E, 0x8139, 0xC130, + 0x321F, 0x8139, 0xC131, + 0x322A, 0x8139, 0xC132, + 0x322B, 0x8139, 0xC133, + 0x322C, 0x8139, 0xC134, + 0x322D, 0x8139, 0xC135, + 0x322E, 0x8139, 0xC136, + 0x322F, 0x8139, 0xC137, + 0x3230, 0x8139, 0xC138, + 0x3232, 0x8139, 0xC139, + 0x3233, 0x8139, 0xC230, + 0x3234, 0x8139, 0xC231, + 0x3235, 0x8139, 0xC232, + 0x3236, 0x8139, 0xC233, + 0x3237, 0x8139, 0xC234, + 0x3238, 0x8139, 0xC235, + 0x3239, 0x8139, 0xC236, + 0x323A, 0x8139, 0xC237, + 0x323B, 0x8139, 0xC238, + 0x323C, 0x8139, 0xC239, + 0x323D, 0x8139, 0xC330, + 0x323E, 0x8139, 0xC331, + 0x323F, 0x8139, 0xC332, + 0x3240, 0x8139, 0xC333, + 0x3241, 0x8139, 0xC334, + 0x3242, 0x8139, 0xC335, + 0x3243, 0x8139, 0xC336, + 0x3244, 0x8139, 0xC337, + 0x3245, 0x8139, 0xC338, + 0x3246, 0x8139, 0xC339, + 0x3247, 0x8139, 0xC430, + 0x3248, 0x8139, 0xC431, + 0x3249, 0x8139, 0xC432, + 0x324A, 0x8139, 0xC433, + 0x324B, 0x8139, 0xC434, + 0x324C, 0x8139, 0xC435, + 0x324D, 0x8139, 0xC436, + 0x324E, 0x8139, 0xC437, + 0x324F, 0x8139, 0xC438, + 0x3250, 0x8139, 0xC439, + 0x3251, 0x8139, 0xC530, + 0x3252, 0x8139, 0xC531, + 0x3253, 0x8139, 0xC532, + 0x3254, 0x8139, 0xC533, + 0x3255, 0x8139, 0xC534, + 0x3256, 0x8139, 0xC535, + 0x3257, 0x8139, 0xC536, + 0x3258, 0x8139, 0xC537, + 0x3259, 0x8139, 0xC538, + 0x325A, 0x8139, 0xC539, + 0x325B, 0x8139, 0xC630, + 0x325C, 0x8139, 0xC631, + 0x325D, 0x8139, 0xC632, + 0x325E, 0x8139, 0xC633, + 0x325F, 0x8139, 0xC634, + 0x3260, 0x8139, 0xC635, + 0x3261, 0x8139, 0xC636, + 0x3262, 0x8139, 0xC637, + 0x3263, 0x8139, 0xC638, + 0x3264, 0x8139, 0xC639, + 0x3265, 0x8139, 0xC730, + 0x3266, 0x8139, 0xC731, + 0x3267, 0x8139, 0xC732, + 0x3268, 0x8139, 0xC733, + 0x3269, 0x8139, 0xC734, + 0x326A, 0x8139, 0xC735, + 0x326B, 0x8139, 0xC736, + 0x326C, 0x8139, 0xC737, + 0x326D, 0x8139, 0xC738, + 0x326E, 0x8139, 0xC739, + 0x326F, 0x8139, 0xC830, + 0x3270, 0x8139, 0xC831, + 0x3271, 0x8139, 0xC832, + 0x3272, 0x8139, 0xC833, + 0x3273, 0x8139, 0xC834, + 0x3274, 0x8139, 0xC835, + 0x3275, 0x8139, 0xC836, + 0x3276, 0x8139, 0xC837, + 0x3277, 0x8139, 0xC838, + 0x3278, 0x8139, 0xC839, + 0x3279, 0x8139, 0xC930, + 0x327A, 0x8139, 0xC931, + 0x327B, 0x8139, 0xC932, + 0x327C, 0x8139, 0xC933, + 0x327D, 0x8139, 0xC934, + 0x327E, 0x8139, 0xC935, + 0x327F, 0x8139, 0xC936, + 0x3280, 0x8139, 0xC937, + 0x3281, 0x8139, 0xC938, + 0x3282, 0x8139, 0xC939, + 0x3283, 0x8139, 0xCA30, + 0x3284, 0x8139, 0xCA31, + 0x3285, 0x8139, 0xCA32, + 0x3286, 0x8139, 0xCA33, + 0x3287, 0x8139, 0xCA34, + 0x3288, 0x8139, 0xCA35, + 0x3289, 0x8139, 0xCA36, + 0x328A, 0x8139, 0xCA37, + 0x328B, 0x8139, 0xCA38, + 0x328C, 0x8139, 0xCA39, + 0x328D, 0x8139, 0xCB30, + 0x328E, 0x8139, 0xCB31, + 0x328F, 0x8139, 0xCB32, + 0x3290, 0x8139, 0xCB33, + 0x3291, 0x8139, 0xCB34, + 0x3292, 0x8139, 0xCB35, + 0x3293, 0x8139, 0xCB36, + 0x3294, 0x8139, 0xCB37, + 0x3295, 0x8139, 0xCB38, + 0x3296, 0x8139, 0xCB39, + 0x3297, 0x8139, 0xCC30, + 0x3298, 0x8139, 0xCC31, + 0x3299, 0x8139, 0xCC32, + 0x329A, 0x8139, 0xCC33, + 0x329B, 0x8139, 0xCC34, + 0x329C, 0x8139, 0xCC35, + 0x329D, 0x8139, 0xCC36, + 0x329E, 0x8139, 0xCC37, + 0x329F, 0x8139, 0xCC38, + 0x32A0, 0x8139, 0xCC39, + 0x32A1, 0x8139, 0xCD30, + 0x32A2, 0x8139, 0xCD31, + 0x32A4, 0x8139, 0xCD32, + 0x32A5, 0x8139, 0xCD33, + 0x32A6, 0x8139, 0xCD34, + 0x32A7, 0x8139, 0xCD35, + 0x32A8, 0x8139, 0xCD36, + 0x32A9, 0x8139, 0xCD37, + 0x32AA, 0x8139, 0xCD38, + 0x32AB, 0x8139, 0xCD39, + 0x32AC, 0x8139, 0xCE30, + 0x32AD, 0x8139, 0xCE31, + 0x32AE, 0x8139, 0xCE32, + 0x32AF, 0x8139, 0xCE33, + 0x32B0, 0x8139, 0xCE34, + 0x32B1, 0x8139, 0xCE35, + 0x32B2, 0x8139, 0xCE36, + 0x32B3, 0x8139, 0xCE37, + 0x32B4, 0x8139, 0xCE38, + 0x32B5, 0x8139, 0xCE39, + 0x32B6, 0x8139, 0xCF30, + 0x32B7, 0x8139, 0xCF31, + 0x32B8, 0x8139, 0xCF32, + 0x32B9, 0x8139, 0xCF33, + 0x32BA, 0x8139, 0xCF34, + 0x32BB, 0x8139, 0xCF35, + 0x32BC, 0x8139, 0xCF36, + 0x32BD, 0x8139, 0xCF37, + 0x32BE, 0x8139, 0xCF38, + 0x32BF, 0x8139, 0xCF39, + 0x32C0, 0x8139, 0xD030, + 0x32C1, 0x8139, 0xD031, + 0x32C2, 0x8139, 0xD032, + 0x32C3, 0x8139, 0xD033, + 0x32C4, 0x8139, 0xD034, + 0x32C5, 0x8139, 0xD035, + 0x32C6, 0x8139, 0xD036, + 0x32C7, 0x8139, 0xD037, + 0x32C8, 0x8139, 0xD038, + 0x32C9, 0x8139, 0xD039, + 0x32CA, 0x8139, 0xD130, + 0x32CB, 0x8139, 0xD131, + 0x32CC, 0x8139, 0xD132, + 0x32CD, 0x8139, 0xD133, + 0x32CE, 0x8139, 0xD134, + 0x32CF, 0x8139, 0xD135, + 0x32D0, 0x8139, 0xD136, + 0x32D1, 0x8139, 0xD137, + 0x32D2, 0x8139, 0xD138, + 0x32D3, 0x8139, 0xD139, + 0x32D4, 0x8139, 0xD230, + 0x32D5, 0x8139, 0xD231, + 0x32D6, 0x8139, 0xD232, + 0x32D7, 0x8139, 0xD233, + 0x32D8, 0x8139, 0xD234, + 0x32D9, 0x8139, 0xD235, + 0x32DA, 0x8139, 0xD236, + 0x32DB, 0x8139, 0xD237, + 0x32DC, 0x8139, 0xD238, + 0x32DD, 0x8139, 0xD239, + 0x32DE, 0x8139, 0xD330, + 0x32DF, 0x8139, 0xD331, + 0x32E0, 0x8139, 0xD332, + 0x32E1, 0x8139, 0xD333, + 0x32E2, 0x8139, 0xD334, + 0x32E3, 0x8139, 0xD335, + 0x32E4, 0x8139, 0xD336, + 0x32E5, 0x8139, 0xD337, + 0x32E6, 0x8139, 0xD338, + 0x32E7, 0x8139, 0xD339, + 0x32E8, 0x8139, 0xD430, + 0x32E9, 0x8139, 0xD431, + 0x32EA, 0x8139, 0xD432, + 0x32EB, 0x8139, 0xD433, + 0x32EC, 0x8139, 0xD434, + 0x32ED, 0x8139, 0xD435, + 0x32EE, 0x8139, 0xD436, + 0x32EF, 0x8139, 0xD437, + 0x32F0, 0x8139, 0xD438, + 0x32F1, 0x8139, 0xD439, + 0x32F2, 0x8139, 0xD530, + 0x32F3, 0x8139, 0xD531, + 0x32F4, 0x8139, 0xD532, + 0x32F5, 0x8139, 0xD533, + 0x32F6, 0x8139, 0xD534, + 0x32F7, 0x8139, 0xD535, + 0x32F8, 0x8139, 0xD536, + 0x32F9, 0x8139, 0xD537, + 0x32FA, 0x8139, 0xD538, + 0x32FB, 0x8139, 0xD539, + 0x32FC, 0x8139, 0xD630, + 0x32FD, 0x8139, 0xD631, + 0x32FE, 0x8139, 0xD632, + 0x32FF, 0x8139, 0xD633, + 0x3300, 0x8139, 0xD634, + 0x3301, 0x8139, 0xD635, + 0x3302, 0x8139, 0xD636, + 0x3303, 0x8139, 0xD637, + 0x3304, 0x8139, 0xD638, + 0x3305, 0x8139, 0xD639, + 0x3306, 0x8139, 0xD730, + 0x3307, 0x8139, 0xD731, + 0x3308, 0x8139, 0xD732, + 0x3309, 0x8139, 0xD733, + 0x330A, 0x8139, 0xD734, + 0x330B, 0x8139, 0xD735, + 0x330C, 0x8139, 0xD736, + 0x330D, 0x8139, 0xD737, + 0x330E, 0x8139, 0xD738, + 0x330F, 0x8139, 0xD739, + 0x3310, 0x8139, 0xD830, + 0x3311, 0x8139, 0xD831, + 0x3312, 0x8139, 0xD832, + 0x3313, 0x8139, 0xD833, + 0x3314, 0x8139, 0xD834, + 0x3315, 0x8139, 0xD835, + 0x3316, 0x8139, 0xD836, + 0x3317, 0x8139, 0xD837, + 0x3318, 0x8139, 0xD838, + 0x3319, 0x8139, 0xD839, + 0x331A, 0x8139, 0xD930, + 0x331B, 0x8139, 0xD931, + 0x331C, 0x8139, 0xD932, + 0x331D, 0x8139, 0xD933, + 0x331E, 0x8139, 0xD934, + 0x331F, 0x8139, 0xD935, + 0x3320, 0x8139, 0xD936, + 0x3321, 0x8139, 0xD937, + 0x3322, 0x8139, 0xD938, + 0x3323, 0x8139, 0xD939, + 0x3324, 0x8139, 0xDA30, + 0x3325, 0x8139, 0xDA31, + 0x3326, 0x8139, 0xDA32, + 0x3327, 0x8139, 0xDA33, + 0x3328, 0x8139, 0xDA34, + 0x3329, 0x8139, 0xDA35, + 0x332A, 0x8139, 0xDA36, + 0x332B, 0x8139, 0xDA37, + 0x332C, 0x8139, 0xDA38, + 0x332D, 0x8139, 0xDA39, + 0x332E, 0x8139, 0xDB30, + 0x332F, 0x8139, 0xDB31, + 0x3330, 0x8139, 0xDB32, + 0x3331, 0x8139, 0xDB33, + 0x3332, 0x8139, 0xDB34, + 0x3333, 0x8139, 0xDB35, + 0x3334, 0x8139, 0xDB36, + 0x3335, 0x8139, 0xDB37, + 0x3336, 0x8139, 0xDB38, + 0x3337, 0x8139, 0xDB39, + 0x3338, 0x8139, 0xDC30, + 0x3339, 0x8139, 0xDC31, + 0x333A, 0x8139, 0xDC32, + 0x333B, 0x8139, 0xDC33, + 0x333C, 0x8139, 0xDC34, + 0x333D, 0x8139, 0xDC35, + 0x333E, 0x8139, 0xDC36, + 0x333F, 0x8139, 0xDC37, + 0x3340, 0x8139, 0xDC38, + 0x3341, 0x8139, 0xDC39, + 0x3342, 0x8139, 0xDD30, + 0x3343, 0x8139, 0xDD31, + 0x3344, 0x8139, 0xDD32, + 0x3345, 0x8139, 0xDD33, + 0x3346, 0x8139, 0xDD34, + 0x3347, 0x8139, 0xDD35, + 0x3348, 0x8139, 0xDD36, + 0x3349, 0x8139, 0xDD37, + 0x334A, 0x8139, 0xDD38, + 0x334B, 0x8139, 0xDD39, + 0x334C, 0x8139, 0xDE30, + 0x334D, 0x8139, 0xDE31, + 0x334E, 0x8139, 0xDE32, + 0x334F, 0x8139, 0xDE33, + 0x3350, 0x8139, 0xDE34, + 0x3351, 0x8139, 0xDE35, + 0x3352, 0x8139, 0xDE36, + 0x3353, 0x8139, 0xDE37, + 0x3354, 0x8139, 0xDE38, + 0x3355, 0x8139, 0xDE39, + 0x3356, 0x8139, 0xDF30, + 0x3357, 0x8139, 0xDF31, + 0x3358, 0x8139, 0xDF32, + 0x3359, 0x8139, 0xDF33, + 0x335A, 0x8139, 0xDF34, + 0x335B, 0x8139, 0xDF35, + 0x335C, 0x8139, 0xDF36, + 0x335D, 0x8139, 0xDF37, + 0x335E, 0x8139, 0xDF38, + 0x335F, 0x8139, 0xDF39, + 0x3360, 0x8139, 0xE030, + 0x3361, 0x8139, 0xE031, + 0x3362, 0x8139, 0xE032, + 0x3363, 0x8139, 0xE033, + 0x3364, 0x8139, 0xE034, + 0x3365, 0x8139, 0xE035, + 0x3366, 0x8139, 0xE036, + 0x3367, 0x8139, 0xE037, + 0x3368, 0x8139, 0xE038, + 0x3369, 0x8139, 0xE039, + 0x336A, 0x8139, 0xE130, + 0x336B, 0x8139, 0xE131, + 0x336C, 0x8139, 0xE132, + 0x336D, 0x8139, 0xE133, + 0x336E, 0x8139, 0xE134, + 0x336F, 0x8139, 0xE135, + 0x3370, 0x8139, 0xE136, + 0x3371, 0x8139, 0xE137, + 0x3372, 0x8139, 0xE138, + 0x3373, 0x8139, 0xE139, + 0x3374, 0x8139, 0xE230, + 0x3375, 0x8139, 0xE231, + 0x3376, 0x8139, 0xE232, + 0x3377, 0x8139, 0xE233, + 0x3378, 0x8139, 0xE234, + 0x3379, 0x8139, 0xE235, + 0x337A, 0x8139, 0xE236, + 0x337B, 0x8139, 0xE237, + 0x337C, 0x8139, 0xE238, + 0x337D, 0x8139, 0xE239, + 0x337E, 0x8139, 0xE330, + 0x337F, 0x8139, 0xE331, + 0x3380, 0x8139, 0xE332, + 0x3381, 0x8139, 0xE333, + 0x3382, 0x8139, 0xE334, + 0x3383, 0x8139, 0xE335, + 0x3384, 0x8139, 0xE336, + 0x3385, 0x8139, 0xE337, + 0x3386, 0x8139, 0xE338, + 0x3387, 0x8139, 0xE339, + 0x3388, 0x8139, 0xE430, + 0x3389, 0x8139, 0xE431, + 0x338A, 0x8139, 0xE432, + 0x338B, 0x8139, 0xE433, + 0x338C, 0x8139, 0xE434, + 0x338D, 0x8139, 0xE435, + 0x3390, 0x8139, 0xE436, + 0x3391, 0x8139, 0xE437, + 0x3392, 0x8139, 0xE438, + 0x3393, 0x8139, 0xE439, + 0x3394, 0x8139, 0xE530, + 0x3395, 0x8139, 0xE531, + 0x3396, 0x8139, 0xE532, + 0x3397, 0x8139, 0xE533, + 0x3398, 0x8139, 0xE534, + 0x3399, 0x8139, 0xE535, + 0x339A, 0x8139, 0xE536, + 0x339B, 0x8139, 0xE537, + 0x339F, 0x8139, 0xE538, + 0x33A0, 0x8139, 0xE539, + 0x33A2, 0x8139, 0xE630, + 0x33A3, 0x8139, 0xE631, + 0x33A4, 0x8139, 0xE632, + 0x33A5, 0x8139, 0xE633, + 0x33A6, 0x8139, 0xE634, + 0x33A7, 0x8139, 0xE635, + 0x33A8, 0x8139, 0xE636, + 0x33A9, 0x8139, 0xE637, + 0x33AA, 0x8139, 0xE638, + 0x33AB, 0x8139, 0xE639, + 0x33AC, 0x8139, 0xE730, + 0x33AD, 0x8139, 0xE731, + 0x33AE, 0x8139, 0xE732, + 0x33AF, 0x8139, 0xE733, + 0x33B0, 0x8139, 0xE734, + 0x33B1, 0x8139, 0xE735, + 0x33B2, 0x8139, 0xE736, + 0x33B3, 0x8139, 0xE737, + 0x33B4, 0x8139, 0xE738, + 0x33B5, 0x8139, 0xE739, + 0x33B6, 0x8139, 0xE830, + 0x33B7, 0x8139, 0xE831, + 0x33B8, 0x8139, 0xE832, + 0x33B9, 0x8139, 0xE833, + 0x33BA, 0x8139, 0xE834, + 0x33BB, 0x8139, 0xE835, + 0x33BC, 0x8139, 0xE836, + 0x33BD, 0x8139, 0xE837, + 0x33BE, 0x8139, 0xE838, + 0x33BF, 0x8139, 0xE839, + 0x33C0, 0x8139, 0xE930, + 0x33C1, 0x8139, 0xE931, + 0x33C2, 0x8139, 0xE932, + 0x33C3, 0x8139, 0xE933, + 0x33C5, 0x8139, 0xE934, + 0x33C6, 0x8139, 0xE935, + 0x33C7, 0x8139, 0xE936, + 0x33C8, 0x8139, 0xE937, + 0x33C9, 0x8139, 0xE938, + 0x33CA, 0x8139, 0xE939, + 0x33CB, 0x8139, 0xEA30, + 0x33CC, 0x8139, 0xEA31, + 0x33CD, 0x8139, 0xEA32, + 0x33CF, 0x8139, 0xEA33, + 0x33D0, 0x8139, 0xEA34, + 0x33D3, 0x8139, 0xEA35, + 0x33D4, 0x8139, 0xEA36, + 0x33D6, 0x8139, 0xEA37, + 0x33D7, 0x8139, 0xEA38, + 0x33D8, 0x8139, 0xEA39, + 0x33D9, 0x8139, 0xEB30, + 0x33DA, 0x8139, 0xEB31, + 0x33DB, 0x8139, 0xEB32, + 0x33DC, 0x8139, 0xEB33, + 0x33DD, 0x8139, 0xEB34, + 0x33DE, 0x8139, 0xEB35, + 0x33DF, 0x8139, 0xEB36, + 0x33E0, 0x8139, 0xEB37, + 0x33E1, 0x8139, 0xEB38, + 0x33E2, 0x8139, 0xEB39, + 0x33E3, 0x8139, 0xEC30, + 0x33E4, 0x8139, 0xEC31, + 0x33E5, 0x8139, 0xEC32, + 0x33E6, 0x8139, 0xEC33, + 0x33E7, 0x8139, 0xEC34, + 0x33E8, 0x8139, 0xEC35, + 0x33E9, 0x8139, 0xEC36, + 0x33EA, 0x8139, 0xEC37, + 0x33EB, 0x8139, 0xEC38, + 0x33EC, 0x8139, 0xEC39, + 0x33ED, 0x8139, 0xED30, + 0x33EE, 0x8139, 0xED31, + 0x33EF, 0x8139, 0xED32, + 0x33F0, 0x8139, 0xED33, + 0x33F1, 0x8139, 0xED34, + 0x33F2, 0x8139, 0xED35, + 0x33F3, 0x8139, 0xED36, + 0x33F4, 0x8139, 0xED37, + 0x33F5, 0x8139, 0xED38, + 0x33F6, 0x8139, 0xED39, + 0x33F7, 0x8139, 0xEE30, + 0x33F8, 0x8139, 0xEE31, + 0x33F9, 0x8139, 0xEE32, + 0x33FA, 0x8139, 0xEE33, + 0x33FB, 0x8139, 0xEE34, + 0x33FC, 0x8139, 0xEE35, + 0x33FD, 0x8139, 0xEE36, + 0x33FE, 0x8139, 0xEE37, + 0x33FF, 0x8139, 0xEE38, + 0x3400, 0x8139, 0xEE39, + 0x3401, 0x8139, 0xEF30, + 0x3402, 0x8139, 0xEF31, + 0x3403, 0x8139, 0xEF32, + 0x3404, 0x8139, 0xEF33, + 0x3405, 0x8139, 0xEF34, + 0x3406, 0x8139, 0xEF35, + 0x3407, 0x8139, 0xEF36, + 0x3408, 0x8139, 0xEF37, + 0x3409, 0x8139, 0xEF38, + 0x340A, 0x8139, 0xEF39, + 0x340B, 0x8139, 0xF030, + 0x340C, 0x8139, 0xF031, + 0x340D, 0x8139, 0xF032, + 0x340E, 0x8139, 0xF033, + 0x340F, 0x8139, 0xF034, + 0x3410, 0x8139, 0xF035, + 0x3411, 0x8139, 0xF036, + 0x3412, 0x8139, 0xF037, + 0x3413, 0x8139, 0xF038, + 0x3414, 0x8139, 0xF039, + 0x3415, 0x8139, 0xF130, + 0x3416, 0x8139, 0xF131, + 0x3417, 0x8139, 0xF132, + 0x3418, 0x8139, 0xF133, + 0x3419, 0x8139, 0xF134, + 0x341A, 0x8139, 0xF135, + 0x341B, 0x8139, 0xF136, + 0x341C, 0x8139, 0xF137, + 0x341D, 0x8139, 0xF138, + 0x341E, 0x8139, 0xF139, + 0x341F, 0x8139, 0xF230, + 0x3420, 0x8139, 0xF231, + 0x3421, 0x8139, 0xF232, + 0x3422, 0x8139, 0xF233, + 0x3423, 0x8139, 0xF234, + 0x3424, 0x8139, 0xF235, + 0x3425, 0x8139, 0xF236, + 0x3426, 0x8139, 0xF237, + 0x3427, 0x8139, 0xF238, + 0x3428, 0x8139, 0xF239, + 0x3429, 0x8139, 0xF330, + 0x342A, 0x8139, 0xF331, + 0x342B, 0x8139, 0xF332, + 0x342C, 0x8139, 0xF333, + 0x342D, 0x8139, 0xF334, + 0x342E, 0x8139, 0xF335, + 0x342F, 0x8139, 0xF336, + 0x3430, 0x8139, 0xF337, + 0x3431, 0x8139, 0xF338, + 0x3432, 0x8139, 0xF339, + 0x3433, 0x8139, 0xF430, + 0x3434, 0x8139, 0xF431, + 0x3435, 0x8139, 0xF432, + 0x3436, 0x8139, 0xF433, + 0x3437, 0x8139, 0xF434, + 0x3438, 0x8139, 0xF435, + 0x3439, 0x8139, 0xF436, + 0x343A, 0x8139, 0xF437, + 0x343B, 0x8139, 0xF438, + 0x343C, 0x8139, 0xF439, + 0x343D, 0x8139, 0xF530, + 0x343E, 0x8139, 0xF531, + 0x343F, 0x8139, 0xF532, + 0x3440, 0x8139, 0xF533, + 0x3441, 0x8139, 0xF534, + 0x3442, 0x8139, 0xF535, + 0x3443, 0x8139, 0xF536, + 0x3444, 0x8139, 0xF537, + 0x3445, 0x8139, 0xF538, + 0x3446, 0x8139, 0xF539, + 0x3448, 0x8139, 0xF630, + 0x3449, 0x8139, 0xF631, + 0x344A, 0x8139, 0xF632, + 0x344B, 0x8139, 0xF633, + 0x344C, 0x8139, 0xF634, + 0x344D, 0x8139, 0xF635, + 0x344E, 0x8139, 0xF636, + 0x344F, 0x8139, 0xF637, + 0x3450, 0x8139, 0xF638, + 0x3451, 0x8139, 0xF639, + 0x3452, 0x8139, 0xF730, + 0x3453, 0x8139, 0xF731, + 0x3454, 0x8139, 0xF732, + 0x3455, 0x8139, 0xF733, + 0x3456, 0x8139, 0xF734, + 0x3457, 0x8139, 0xF735, + 0x3458, 0x8139, 0xF736, + 0x3459, 0x8139, 0xF737, + 0x345A, 0x8139, 0xF738, + 0x345B, 0x8139, 0xF739, + 0x345C, 0x8139, 0xF830, + 0x345D, 0x8139, 0xF831, + 0x345E, 0x8139, 0xF832, + 0x345F, 0x8139, 0xF833, + 0x3460, 0x8139, 0xF834, + 0x3461, 0x8139, 0xF835, + 0x3462, 0x8139, 0xF836, + 0x3463, 0x8139, 0xF837, + 0x3464, 0x8139, 0xF838, + 0x3465, 0x8139, 0xF839, + 0x3466, 0x8139, 0xF930, + 0x3467, 0x8139, 0xF931, + 0x3468, 0x8139, 0xF932, + 0x3469, 0x8139, 0xF933, + 0x346A, 0x8139, 0xF934, + 0x346B, 0x8139, 0xF935, + 0x346C, 0x8139, 0xF936, + 0x346D, 0x8139, 0xF937, + 0x346E, 0x8139, 0xF938, + 0x346F, 0x8139, 0xF939, + 0x3470, 0x8139, 0xFA30, + 0x3471, 0x8139, 0xFA31, + 0x3472, 0x8139, 0xFA32, + 0x3474, 0x8139, 0xFA33, + 0x3475, 0x8139, 0xFA34, + 0x3476, 0x8139, 0xFA35, + 0x3477, 0x8139, 0xFA36, + 0x3478, 0x8139, 0xFA37, + 0x3479, 0x8139, 0xFA38, + 0x347A, 0x8139, 0xFA39, + 0x347B, 0x8139, 0xFB30, + 0x347C, 0x8139, 0xFB31, + 0x347D, 0x8139, 0xFB32, + 0x347E, 0x8139, 0xFB33, + 0x347F, 0x8139, 0xFB34, + 0x3480, 0x8139, 0xFB35, + 0x3481, 0x8139, 0xFB36, + 0x3482, 0x8139, 0xFB37, + 0x3483, 0x8139, 0xFB38, + 0x3484, 0x8139, 0xFB39, + 0x3485, 0x8139, 0xFC30, + 0x3486, 0x8139, 0xFC31, + 0x3487, 0x8139, 0xFC32, + 0x3488, 0x8139, 0xFC33, + 0x3489, 0x8139, 0xFC34, + 0x348A, 0x8139, 0xFC35, + 0x348B, 0x8139, 0xFC36, + 0x348C, 0x8139, 0xFC37, + 0x348D, 0x8139, 0xFC38, + 0x348E, 0x8139, 0xFC39, + 0x348F, 0x8139, 0xFD30, + 0x3490, 0x8139, 0xFD31, + 0x3491, 0x8139, 0xFD32, + 0x3492, 0x8139, 0xFD33, + 0x3493, 0x8139, 0xFD34, + 0x3494, 0x8139, 0xFD35, + 0x3495, 0x8139, 0xFD36, + 0x3496, 0x8139, 0xFD37, + 0x3497, 0x8139, 0xFD38, + 0x3498, 0x8139, 0xFD39, + 0x3499, 0x8139, 0xFE30, + 0x349A, 0x8139, 0xFE31, + 0x349B, 0x8139, 0xFE32, + 0x349C, 0x8139, 0xFE33, + 0x349D, 0x8139, 0xFE34, + 0x349E, 0x8139, 0xFE35, + 0x349F, 0x8139, 0xFE36, + 0x34A0, 0x8139, 0xFE37, + 0x34A1, 0x8139, 0xFE38, + 0x34A2, 0x8139, 0xFE39, + 0x34A3, 0x8230, 0x8130, + 0x34A4, 0x8230, 0x8131, + 0x34A5, 0x8230, 0x8132, + 0x34A6, 0x8230, 0x8133, + 0x34A7, 0x8230, 0x8134, + 0x34A8, 0x8230, 0x8135, + 0x34A9, 0x8230, 0x8136, + 0x34AA, 0x8230, 0x8137, + 0x34AB, 0x8230, 0x8138, + 0x34AC, 0x8230, 0x8139, + 0x34AD, 0x8230, 0x8230, + 0x34AE, 0x8230, 0x8231, + 0x34AF, 0x8230, 0x8232, + 0x34B0, 0x8230, 0x8233, + 0x34B1, 0x8230, 0x8234, + 0x34B2, 0x8230, 0x8235, + 0x34B3, 0x8230, 0x8236, + 0x34B4, 0x8230, 0x8237, + 0x34B5, 0x8230, 0x8238, + 0x34B6, 0x8230, 0x8239, + 0x34B7, 0x8230, 0x8330, + 0x34B8, 0x8230, 0x8331, + 0x34B9, 0x8230, 0x8332, + 0x34BA, 0x8230, 0x8333, + 0x34BB, 0x8230, 0x8334, + 0x34BC, 0x8230, 0x8335, + 0x34BD, 0x8230, 0x8336, + 0x34BE, 0x8230, 0x8337, + 0x34BF, 0x8230, 0x8338, + 0x34C0, 0x8230, 0x8339, + 0x34C1, 0x8230, 0x8430, + 0x34C2, 0x8230, 0x8431, + 0x34C3, 0x8230, 0x8432, + 0x34C4, 0x8230, 0x8433, + 0x34C5, 0x8230, 0x8434, + 0x34C6, 0x8230, 0x8435, + 0x34C7, 0x8230, 0x8436, + 0x34C8, 0x8230, 0x8437, + 0x34C9, 0x8230, 0x8438, + 0x34CA, 0x8230, 0x8439, + 0x34CB, 0x8230, 0x8530, + 0x34CC, 0x8230, 0x8531, + 0x34CD, 0x8230, 0x8532, + 0x34CE, 0x8230, 0x8533, + 0x34CF, 0x8230, 0x8534, + 0x34D0, 0x8230, 0x8535, + 0x34D1, 0x8230, 0x8536, + 0x34D2, 0x8230, 0x8537, + 0x34D3, 0x8230, 0x8538, + 0x34D4, 0x8230, 0x8539, + 0x34D5, 0x8230, 0x8630, + 0x34D6, 0x8230, 0x8631, + 0x34D7, 0x8230, 0x8632, + 0x34D8, 0x8230, 0x8633, + 0x34D9, 0x8230, 0x8634, + 0x34DA, 0x8230, 0x8635, + 0x34DB, 0x8230, 0x8636, + 0x34DC, 0x8230, 0x8637, + 0x34DD, 0x8230, 0x8638, + 0x34DE, 0x8230, 0x8639, + 0x34DF, 0x8230, 0x8730, + 0x34E0, 0x8230, 0x8731, + 0x34E1, 0x8230, 0x8732, + 0x34E2, 0x8230, 0x8733, + 0x34E3, 0x8230, 0x8734, + 0x34E4, 0x8230, 0x8735, + 0x34E5, 0x8230, 0x8736, + 0x34E6, 0x8230, 0x8737, + 0x34E7, 0x8230, 0x8738, + 0x34E8, 0x8230, 0x8739, + 0x34E9, 0x8230, 0x8830, + 0x34EA, 0x8230, 0x8831, + 0x34EB, 0x8230, 0x8832, + 0x34EC, 0x8230, 0x8833, + 0x34ED, 0x8230, 0x8834, + 0x34EE, 0x8230, 0x8835, + 0x34EF, 0x8230, 0x8836, + 0x34F0, 0x8230, 0x8837, + 0x34F1, 0x8230, 0x8838, + 0x34F2, 0x8230, 0x8839, + 0x34F3, 0x8230, 0x8930, + 0x34F4, 0x8230, 0x8931, + 0x34F5, 0x8230, 0x8932, + 0x34F6, 0x8230, 0x8933, + 0x34F7, 0x8230, 0x8934, + 0x34F8, 0x8230, 0x8935, + 0x34F9, 0x8230, 0x8936, + 0x34FA, 0x8230, 0x8937, + 0x34FB, 0x8230, 0x8938, + 0x34FC, 0x8230, 0x8939, + 0x34FD, 0x8230, 0x8A30, + 0x34FE, 0x8230, 0x8A31, + 0x34FF, 0x8230, 0x8A32, + 0x3500, 0x8230, 0x8A33, + 0x3501, 0x8230, 0x8A34, + 0x3502, 0x8230, 0x8A35, + 0x3503, 0x8230, 0x8A36, + 0x3504, 0x8230, 0x8A37, + 0x3505, 0x8230, 0x8A38, + 0x3506, 0x8230, 0x8A39, + 0x3507, 0x8230, 0x8B30, + 0x3508, 0x8230, 0x8B31, + 0x3509, 0x8230, 0x8B32, + 0x350A, 0x8230, 0x8B33, + 0x350B, 0x8230, 0x8B34, + 0x350C, 0x8230, 0x8B35, + 0x350D, 0x8230, 0x8B36, + 0x350E, 0x8230, 0x8B37, + 0x350F, 0x8230, 0x8B38, + 0x3510, 0x8230, 0x8B39, + 0x3511, 0x8230, 0x8C30, + 0x3512, 0x8230, 0x8C31, + 0x3513, 0x8230, 0x8C32, + 0x3514, 0x8230, 0x8C33, + 0x3515, 0x8230, 0x8C34, + 0x3516, 0x8230, 0x8C35, + 0x3517, 0x8230, 0x8C36, + 0x3518, 0x8230, 0x8C37, + 0x3519, 0x8230, 0x8C38, + 0x351A, 0x8230, 0x8C39, + 0x351B, 0x8230, 0x8D30, + 0x351C, 0x8230, 0x8D31, + 0x351D, 0x8230, 0x8D32, + 0x351E, 0x8230, 0x8D33, + 0x351F, 0x8230, 0x8D34, + 0x3520, 0x8230, 0x8D35, + 0x3521, 0x8230, 0x8D36, + 0x3522, 0x8230, 0x8D37, + 0x3523, 0x8230, 0x8D38, + 0x3524, 0x8230, 0x8D39, + 0x3525, 0x8230, 0x8E30, + 0x3526, 0x8230, 0x8E31, + 0x3527, 0x8230, 0x8E32, + 0x3528, 0x8230, 0x8E33, + 0x3529, 0x8230, 0x8E34, + 0x352A, 0x8230, 0x8E35, + 0x352B, 0x8230, 0x8E36, + 0x352C, 0x8230, 0x8E37, + 0x352D, 0x8230, 0x8E38, + 0x352E, 0x8230, 0x8E39, + 0x352F, 0x8230, 0x8F30, + 0x3530, 0x8230, 0x8F31, + 0x3531, 0x8230, 0x8F32, + 0x3532, 0x8230, 0x8F33, + 0x3533, 0x8230, 0x8F34, + 0x3534, 0x8230, 0x8F35, + 0x3535, 0x8230, 0x8F36, + 0x3536, 0x8230, 0x8F37, + 0x3537, 0x8230, 0x8F38, + 0x3538, 0x8230, 0x8F39, + 0x3539, 0x8230, 0x9030, + 0x353A, 0x8230, 0x9031, + 0x353B, 0x8230, 0x9032, + 0x353C, 0x8230, 0x9033, + 0x353D, 0x8230, 0x9034, + 0x353E, 0x8230, 0x9035, + 0x353F, 0x8230, 0x9036, + 0x3540, 0x8230, 0x9037, + 0x3541, 0x8230, 0x9038, + 0x3542, 0x8230, 0x9039, + 0x3543, 0x8230, 0x9130, + 0x3544, 0x8230, 0x9131, + 0x3545, 0x8230, 0x9132, + 0x3546, 0x8230, 0x9133, + 0x3547, 0x8230, 0x9134, + 0x3548, 0x8230, 0x9135, + 0x3549, 0x8230, 0x9136, + 0x354A, 0x8230, 0x9137, + 0x354B, 0x8230, 0x9138, + 0x354C, 0x8230, 0x9139, + 0x354D, 0x8230, 0x9230, + 0x354E, 0x8230, 0x9231, + 0x354F, 0x8230, 0x9232, + 0x3550, 0x8230, 0x9233, + 0x3551, 0x8230, 0x9234, + 0x3552, 0x8230, 0x9235, + 0x3553, 0x8230, 0x9236, + 0x3554, 0x8230, 0x9237, + 0x3555, 0x8230, 0x9238, + 0x3556, 0x8230, 0x9239, + 0x3557, 0x8230, 0x9330, + 0x3558, 0x8230, 0x9331, + 0x3559, 0x8230, 0x9332, + 0x355A, 0x8230, 0x9333, + 0x355B, 0x8230, 0x9334, + 0x355C, 0x8230, 0x9335, + 0x355D, 0x8230, 0x9336, + 0x355E, 0x8230, 0x9337, + 0x355F, 0x8230, 0x9338, + 0x3560, 0x8230, 0x9339, + 0x3561, 0x8230, 0x9430, + 0x3562, 0x8230, 0x9431, + 0x3563, 0x8230, 0x9432, + 0x3564, 0x8230, 0x9433, + 0x3565, 0x8230, 0x9434, + 0x3566, 0x8230, 0x9435, + 0x3567, 0x8230, 0x9436, + 0x3568, 0x8230, 0x9437, + 0x3569, 0x8230, 0x9438, + 0x356A, 0x8230, 0x9439, + 0x356B, 0x8230, 0x9530, + 0x356C, 0x8230, 0x9531, + 0x356D, 0x8230, 0x9532, + 0x356E, 0x8230, 0x9533, + 0x356F, 0x8230, 0x9534, + 0x3570, 0x8230, 0x9535, + 0x3571, 0x8230, 0x9536, + 0x3572, 0x8230, 0x9537, + 0x3573, 0x8230, 0x9538, + 0x3574, 0x8230, 0x9539, + 0x3575, 0x8230, 0x9630, + 0x3576, 0x8230, 0x9631, + 0x3577, 0x8230, 0x9632, + 0x3578, 0x8230, 0x9633, + 0x3579, 0x8230, 0x9634, + 0x357A, 0x8230, 0x9635, + 0x357B, 0x8230, 0x9636, + 0x357C, 0x8230, 0x9637, + 0x357D, 0x8230, 0x9638, + 0x357E, 0x8230, 0x9639, + 0x357F, 0x8230, 0x9730, + 0x3580, 0x8230, 0x9731, + 0x3581, 0x8230, 0x9732, + 0x3582, 0x8230, 0x9733, + 0x3583, 0x8230, 0x9734, + 0x3584, 0x8230, 0x9735, + 0x3585, 0x8230, 0x9736, + 0x3586, 0x8230, 0x9737, + 0x3587, 0x8230, 0x9738, + 0x3588, 0x8230, 0x9739, + 0x3589, 0x8230, 0x9830, + 0x358A, 0x8230, 0x9831, + 0x358B, 0x8230, 0x9832, + 0x358C, 0x8230, 0x9833, + 0x358D, 0x8230, 0x9834, + 0x358E, 0x8230, 0x9835, + 0x358F, 0x8230, 0x9836, + 0x3590, 0x8230, 0x9837, + 0x3591, 0x8230, 0x9838, + 0x3592, 0x8230, 0x9839, + 0x3593, 0x8230, 0x9930, + 0x3594, 0x8230, 0x9931, + 0x3595, 0x8230, 0x9932, + 0x3596, 0x8230, 0x9933, + 0x3597, 0x8230, 0x9934, + 0x3598, 0x8230, 0x9935, + 0x3599, 0x8230, 0x9936, + 0x359A, 0x8230, 0x9937, + 0x359B, 0x8230, 0x9938, + 0x359C, 0x8230, 0x9939, + 0x359D, 0x8230, 0x9A30, + 0x359F, 0x8230, 0x9A31, + 0x35A0, 0x8230, 0x9A32, + 0x35A1, 0x8230, 0x9A33, + 0x35A2, 0x8230, 0x9A34, + 0x35A3, 0x8230, 0x9A35, + 0x35A4, 0x8230, 0x9A36, + 0x35A5, 0x8230, 0x9A37, + 0x35A6, 0x8230, 0x9A38, + 0x35A7, 0x8230, 0x9A39, + 0x35A8, 0x8230, 0x9B30, + 0x35A9, 0x8230, 0x9B31, + 0x35AA, 0x8230, 0x9B32, + 0x35AB, 0x8230, 0x9B33, + 0x35AC, 0x8230, 0x9B34, + 0x35AD, 0x8230, 0x9B35, + 0x35AE, 0x8230, 0x9B36, + 0x35AF, 0x8230, 0x9B37, + 0x35B0, 0x8230, 0x9B38, + 0x35B1, 0x8230, 0x9B39, + 0x35B2, 0x8230, 0x9C30, + 0x35B3, 0x8230, 0x9C31, + 0x35B4, 0x8230, 0x9C32, + 0x35B5, 0x8230, 0x9C33, + 0x35B6, 0x8230, 0x9C34, + 0x35B7, 0x8230, 0x9C35, + 0x35B8, 0x8230, 0x9C36, + 0x35B9, 0x8230, 0x9C37, + 0x35BA, 0x8230, 0x9C38, + 0x35BB, 0x8230, 0x9C39, + 0x35BC, 0x8230, 0x9D30, + 0x35BD, 0x8230, 0x9D31, + 0x35BE, 0x8230, 0x9D32, + 0x35BF, 0x8230, 0x9D33, + 0x35C0, 0x8230, 0x9D34, + 0x35C1, 0x8230, 0x9D35, + 0x35C2, 0x8230, 0x9D36, + 0x35C3, 0x8230, 0x9D37, + 0x35C4, 0x8230, 0x9D38, + 0x35C5, 0x8230, 0x9D39, + 0x35C6, 0x8230, 0x9E30, + 0x35C7, 0x8230, 0x9E31, + 0x35C8, 0x8230, 0x9E32, + 0x35C9, 0x8230, 0x9E33, + 0x35CA, 0x8230, 0x9E34, + 0x35CB, 0x8230, 0x9E35, + 0x35CC, 0x8230, 0x9E36, + 0x35CD, 0x8230, 0x9E37, + 0x35CE, 0x8230, 0x9E38, + 0x35CF, 0x8230, 0x9E39, + 0x35D0, 0x8230, 0x9F30, + 0x35D1, 0x8230, 0x9F31, + 0x35D2, 0x8230, 0x9F32, + 0x35D3, 0x8230, 0x9F33, + 0x35D4, 0x8230, 0x9F34, + 0x35D5, 0x8230, 0x9F35, + 0x35D6, 0x8230, 0x9F36, + 0x35D7, 0x8230, 0x9F37, + 0x35D8, 0x8230, 0x9F38, + 0x35D9, 0x8230, 0x9F39, + 0x35DA, 0x8230, 0xA030, + 0x35DB, 0x8230, 0xA031, + 0x35DC, 0x8230, 0xA032, + 0x35DD, 0x8230, 0xA033, + 0x35DE, 0x8230, 0xA034, + 0x35DF, 0x8230, 0xA035, + 0x35E0, 0x8230, 0xA036, + 0x35E1, 0x8230, 0xA037, + 0x35E2, 0x8230, 0xA038, + 0x35E3, 0x8230, 0xA039, + 0x35E4, 0x8230, 0xA130, + 0x35E5, 0x8230, 0xA131, + 0x35E6, 0x8230, 0xA132, + 0x35E7, 0x8230, 0xA133, + 0x35E8, 0x8230, 0xA134, + 0x35E9, 0x8230, 0xA135, + 0x35EA, 0x8230, 0xA136, + 0x35EB, 0x8230, 0xA137, + 0x35EC, 0x8230, 0xA138, + 0x35ED, 0x8230, 0xA139, + 0x35EE, 0x8230, 0xA230, + 0x35EF, 0x8230, 0xA231, + 0x35F0, 0x8230, 0xA232, + 0x35F1, 0x8230, 0xA233, + 0x35F2, 0x8230, 0xA234, + 0x35F3, 0x8230, 0xA235, + 0x35F4, 0x8230, 0xA236, + 0x35F5, 0x8230, 0xA237, + 0x35F6, 0x8230, 0xA238, + 0x35F7, 0x8230, 0xA239, + 0x35F8, 0x8230, 0xA330, + 0x35F9, 0x8230, 0xA331, + 0x35FA, 0x8230, 0xA332, + 0x35FB, 0x8230, 0xA333, + 0x35FC, 0x8230, 0xA334, + 0x35FD, 0x8230, 0xA335, + 0x35FE, 0x8230, 0xA336, + 0x35FF, 0x8230, 0xA337, + 0x3600, 0x8230, 0xA338, + 0x3601, 0x8230, 0xA339, + 0x3602, 0x8230, 0xA430, + 0x3603, 0x8230, 0xA431, + 0x3604, 0x8230, 0xA432, + 0x3605, 0x8230, 0xA433, + 0x3606, 0x8230, 0xA434, + 0x3607, 0x8230, 0xA435, + 0x3608, 0x8230, 0xA436, + 0x3609, 0x8230, 0xA437, + 0x360A, 0x8230, 0xA438, + 0x360B, 0x8230, 0xA439, + 0x360C, 0x8230, 0xA530, + 0x360D, 0x8230, 0xA531, + 0x360F, 0x8230, 0xA532, + 0x3610, 0x8230, 0xA533, + 0x3611, 0x8230, 0xA534, + 0x3612, 0x8230, 0xA535, + 0x3613, 0x8230, 0xA536, + 0x3614, 0x8230, 0xA537, + 0x3615, 0x8230, 0xA538, + 0x3616, 0x8230, 0xA539, + 0x3617, 0x8230, 0xA630, + 0x3618, 0x8230, 0xA631, + 0x3619, 0x8230, 0xA632, + 0x3919, 0x8230, 0xF238, + 0x391A, 0x8230, 0xF239, + 0x391B, 0x8230, 0xF330, + 0x391C, 0x8230, 0xF331, + 0x391D, 0x8230, 0xF332, + 0x391E, 0x8230, 0xF333, + 0x391F, 0x8230, 0xF334, + 0x3920, 0x8230, 0xF335, + 0x3921, 0x8230, 0xF336, + 0x3922, 0x8230, 0xF337, + 0x3923, 0x8230, 0xF338, + 0x3924, 0x8230, 0xF339, + 0x3925, 0x8230, 0xF430, + 0x3926, 0x8230, 0xF431, + 0x3927, 0x8230, 0xF432, + 0x3928, 0x8230, 0xF433, + 0x3929, 0x8230, 0xF434, + 0x392A, 0x8230, 0xF435, + 0x392B, 0x8230, 0xF436, + 0x392C, 0x8230, 0xF437, + 0x392D, 0x8230, 0xF438, + 0x392E, 0x8230, 0xF439, + 0x392F, 0x8230, 0xF530, + 0x3930, 0x8230, 0xF531, + 0x3931, 0x8230, 0xF532, + 0x3932, 0x8230, 0xF533, + 0x3933, 0x8230, 0xF534, + 0x3934, 0x8230, 0xF535, + 0x3935, 0x8230, 0xF536, + 0x3936, 0x8230, 0xF537, + 0x3937, 0x8230, 0xF538, + 0x3938, 0x8230, 0xF539, + 0x3939, 0x8230, 0xF630, + 0x393A, 0x8230, 0xF631, + 0x393B, 0x8230, 0xF632, + 0x393C, 0x8230, 0xF633, + 0x393D, 0x8230, 0xF634, + 0x393E, 0x8230, 0xF635, + 0x393F, 0x8230, 0xF636, + 0x3940, 0x8230, 0xF637, + 0x3941, 0x8230, 0xF638, + 0x3942, 0x8230, 0xF639, + 0x3943, 0x8230, 0xF730, + 0x3944, 0x8230, 0xF731, + 0x3945, 0x8230, 0xF732, + 0x3946, 0x8230, 0xF733, + 0x3947, 0x8230, 0xF734, + 0x3948, 0x8230, 0xF735, + 0x3949, 0x8230, 0xF736, + 0x394A, 0x8230, 0xF737, + 0x394B, 0x8230, 0xF738, + 0x394C, 0x8230, 0xF739, + 0x394D, 0x8230, 0xF830, + 0x394E, 0x8230, 0xF831, + 0x394F, 0x8230, 0xF832, + 0x3950, 0x8230, 0xF833, + 0x3951, 0x8230, 0xF834, + 0x3952, 0x8230, 0xF835, + 0x3953, 0x8230, 0xF836, + 0x3954, 0x8230, 0xF837, + 0x3955, 0x8230, 0xF838, + 0x3956, 0x8230, 0xF839, + 0x3957, 0x8230, 0xF930, + 0x3958, 0x8230, 0xF931, + 0x3959, 0x8230, 0xF932, + 0x395A, 0x8230, 0xF933, + 0x395B, 0x8230, 0xF934, + 0x395C, 0x8230, 0xF935, + 0x395D, 0x8230, 0xF936, + 0x395E, 0x8230, 0xF937, + 0x395F, 0x8230, 0xF938, + 0x3960, 0x8230, 0xF939, + 0x3961, 0x8230, 0xFA30, + 0x3962, 0x8230, 0xFA31, + 0x3963, 0x8230, 0xFA32, + 0x3964, 0x8230, 0xFA33, + 0x3965, 0x8230, 0xFA34, + 0x3966, 0x8230, 0xFA35, + 0x3967, 0x8230, 0xFA36, + 0x3968, 0x8230, 0xFA37, + 0x3969, 0x8230, 0xFA38, + 0x396A, 0x8230, 0xFA39, + 0x396B, 0x8230, 0xFB30, + 0x396C, 0x8230, 0xFB31, + 0x396D, 0x8230, 0xFB32, + 0x396F, 0x8230, 0xFB33, + 0x3970, 0x8230, 0xFB34, + 0x3971, 0x8230, 0xFB35, + 0x3972, 0x8230, 0xFB36, + 0x3973, 0x8230, 0xFB37, + 0x3974, 0x8230, 0xFB38, + 0x3975, 0x8230, 0xFB39, + 0x3976, 0x8230, 0xFC30, + 0x3977, 0x8230, 0xFC31, + 0x3978, 0x8230, 0xFC32, + 0x3979, 0x8230, 0xFC33, + 0x397A, 0x8230, 0xFC34, + 0x397B, 0x8230, 0xFC35, + 0x397C, 0x8230, 0xFC36, + 0x397D, 0x8230, 0xFC37, + 0x397E, 0x8230, 0xFC38, + 0x397F, 0x8230, 0xFC39, + 0x3980, 0x8230, 0xFD30, + 0x3981, 0x8230, 0xFD31, + 0x3982, 0x8230, 0xFD32, + 0x3983, 0x8230, 0xFD33, + 0x3984, 0x8230, 0xFD34, + 0x3985, 0x8230, 0xFD35, + 0x3986, 0x8230, 0xFD36, + 0x3987, 0x8230, 0xFD37, + 0x3988, 0x8230, 0xFD38, + 0x3989, 0x8230, 0xFD39, + 0x398A, 0x8230, 0xFE30, + 0x398B, 0x8230, 0xFE31, + 0x398C, 0x8230, 0xFE32, + 0x398D, 0x8230, 0xFE33, + 0x398E, 0x8230, 0xFE34, + 0x398F, 0x8230, 0xFE35, + 0x3990, 0x8230, 0xFE36, + 0x3991, 0x8230, 0xFE37, + 0x3992, 0x8230, 0xFE38, + 0x3993, 0x8230, 0xFE39, + 0x3994, 0x8231, 0x8130, + 0x3995, 0x8231, 0x8131, + 0x3996, 0x8231, 0x8132, + 0x3997, 0x8231, 0x8133, + 0x3998, 0x8231, 0x8134, + 0x3999, 0x8231, 0x8135, + 0x399A, 0x8231, 0x8136, + 0x399B, 0x8231, 0x8137, + 0x399C, 0x8231, 0x8138, + 0x399D, 0x8231, 0x8139, + 0x399E, 0x8231, 0x8230, + 0x399F, 0x8231, 0x8231, + 0x39A0, 0x8231, 0x8232, + 0x39A1, 0x8231, 0x8233, + 0x39A2, 0x8231, 0x8234, + 0x39A3, 0x8231, 0x8235, + 0x39A4, 0x8231, 0x8236, + 0x39A5, 0x8231, 0x8237, + 0x39A6, 0x8231, 0x8238, + 0x39A7, 0x8231, 0x8239, + 0x39A8, 0x8231, 0x8330, + 0x39A9, 0x8231, 0x8331, + 0x39AA, 0x8231, 0x8332, + 0x39AB, 0x8231, 0x8333, + 0x39AC, 0x8231, 0x8334, + 0x39AD, 0x8231, 0x8335, + 0x39AE, 0x8231, 0x8336, + 0x39AF, 0x8231, 0x8337, + 0x39B0, 0x8231, 0x8338, + 0x39B1, 0x8231, 0x8339, + 0x39B2, 0x8231, 0x8430, + 0x39B3, 0x8231, 0x8431, + 0x39B4, 0x8231, 0x8432, + 0x39B5, 0x8231, 0x8433, + 0x39B6, 0x8231, 0x8434, + 0x39B7, 0x8231, 0x8435, + 0x39B8, 0x8231, 0x8436, + 0x39B9, 0x8231, 0x8437, + 0x39BA, 0x8231, 0x8438, + 0x39BB, 0x8231, 0x8439, + 0x39BC, 0x8231, 0x8530, + 0x39BD, 0x8231, 0x8531, + 0x39BE, 0x8231, 0x8532, + 0x39BF, 0x8231, 0x8533, + 0x39C0, 0x8231, 0x8534, + 0x39C1, 0x8231, 0x8535, + 0x39C2, 0x8231, 0x8536, + 0x39C3, 0x8231, 0x8537, + 0x39C4, 0x8231, 0x8538, + 0x39C5, 0x8231, 0x8539, + 0x39C6, 0x8231, 0x8630, + 0x39C7, 0x8231, 0x8631, + 0x39C8, 0x8231, 0x8632, + 0x39C9, 0x8231, 0x8633, + 0x39CA, 0x8231, 0x8634, + 0x39CB, 0x8231, 0x8635, + 0x39CC, 0x8231, 0x8636, + 0x39CD, 0x8231, 0x8637, + 0x39CE, 0x8231, 0x8638, + 0x39D1, 0x8231, 0x8639, + 0x39D2, 0x8231, 0x8730, + 0x39D3, 0x8231, 0x8731, + 0x39D4, 0x8231, 0x8732, + 0x39D5, 0x8231, 0x8733, + 0x39D6, 0x8231, 0x8734, + 0x39D7, 0x8231, 0x8735, + 0x39D8, 0x8231, 0x8736, + 0x39D9, 0x8231, 0x8737, + 0x39DA, 0x8231, 0x8738, + 0x39DB, 0x8231, 0x8739, + 0x39DC, 0x8231, 0x8830, + 0x39DD, 0x8231, 0x8831, + 0x39DE, 0x8231, 0x8832, + 0x39E0, 0x8231, 0x8833, + 0x39E1, 0x8231, 0x8834, + 0x39E2, 0x8231, 0x8835, + 0x39E3, 0x8231, 0x8836, + 0x39E4, 0x8231, 0x8837, + 0x39E5, 0x8231, 0x8838, + 0x39E6, 0x8231, 0x8839, + 0x39E7, 0x8231, 0x8930, + 0x39E8, 0x8231, 0x8931, + 0x39E9, 0x8231, 0x8932, + 0x39EA, 0x8231, 0x8933, + 0x39EB, 0x8231, 0x8934, + 0x39EC, 0x8231, 0x8935, + 0x39ED, 0x8231, 0x8936, + 0x39EE, 0x8231, 0x8937, + 0x39EF, 0x8231, 0x8938, + 0x39F0, 0x8231, 0x8939, + 0x39F1, 0x8231, 0x8A30, + 0x39F2, 0x8231, 0x8A31, + 0x39F3, 0x8231, 0x8A32, + 0x39F4, 0x8231, 0x8A33, + 0x39F5, 0x8231, 0x8A34, + 0x39F6, 0x8231, 0x8A35, + 0x39F7, 0x8231, 0x8A36, + 0x39F8, 0x8231, 0x8A37, + 0x39F9, 0x8231, 0x8A38, + 0x39FA, 0x8231, 0x8A39, + 0x39FB, 0x8231, 0x8B30, + 0x39FC, 0x8231, 0x8B31, + 0x39FD, 0x8231, 0x8B32, + 0x39FE, 0x8231, 0x8B33, + 0x39FF, 0x8231, 0x8B34, + 0x3A00, 0x8231, 0x8B35, + 0x3A01, 0x8231, 0x8B36, + 0x3A02, 0x8231, 0x8B37, + 0x3A03, 0x8231, 0x8B38, + 0x3A04, 0x8231, 0x8B39, + 0x3A05, 0x8231, 0x8C30, + 0x3A06, 0x8231, 0x8C31, + 0x3A07, 0x8231, 0x8C32, + 0x3A08, 0x8231, 0x8C33, + 0x3A09, 0x8231, 0x8C34, + 0x3A0A, 0x8231, 0x8C35, + 0x3A0B, 0x8231, 0x8C36, + 0x3A0C, 0x8231, 0x8C37, + 0x3A0D, 0x8231, 0x8C38, + 0x3A0E, 0x8231, 0x8C39, + 0x3A0F, 0x8231, 0x8D30, + 0x3A10, 0x8231, 0x8D31, + 0x3A11, 0x8231, 0x8D32, + 0x3A12, 0x8231, 0x8D33, + 0x3A13, 0x8231, 0x8D34, + 0x3A14, 0x8231, 0x8D35, + 0x3A15, 0x8231, 0x8D36, + 0x3A16, 0x8231, 0x8D37, + 0x3A17, 0x8231, 0x8D38, + 0x3A18, 0x8231, 0x8D39, + 0x3A19, 0x8231, 0x8E30, + 0x3A1A, 0x8231, 0x8E31, + 0x3A1B, 0x8231, 0x8E32, + 0x3A1C, 0x8231, 0x8E33, + 0x3A1D, 0x8231, 0x8E34, + 0x3A1E, 0x8231, 0x8E35, + 0x3A1F, 0x8231, 0x8E36, + 0x3A20, 0x8231, 0x8E37, + 0x3A21, 0x8231, 0x8E38, + 0x3A22, 0x8231, 0x8E39, + 0x3A23, 0x8231, 0x8F30, + 0x3A24, 0x8231, 0x8F31, + 0x3A25, 0x8231, 0x8F32, + 0x3A26, 0x8231, 0x8F33, + 0x3A27, 0x8231, 0x8F34, + 0x3A28, 0x8231, 0x8F35, + 0x3A29, 0x8231, 0x8F36, + 0x3A2A, 0x8231, 0x8F37, + 0x3A2B, 0x8231, 0x8F38, + 0x3A2C, 0x8231, 0x8F39, + 0x3A2D, 0x8231, 0x9030, + 0x3A2E, 0x8231, 0x9031, + 0x3A2F, 0x8231, 0x9032, + 0x3A30, 0x8231, 0x9033, + 0x3A31, 0x8231, 0x9034, + 0x3A32, 0x8231, 0x9035, + 0x3A33, 0x8231, 0x9036, + 0x3A34, 0x8231, 0x9037, + 0x3A35, 0x8231, 0x9038, + 0x3A36, 0x8231, 0x9039, + 0x3A37, 0x8231, 0x9130, + 0x3A38, 0x8231, 0x9131, + 0x3A39, 0x8231, 0x9132, + 0x3A3A, 0x8231, 0x9133, + 0x3A3B, 0x8231, 0x9134, + 0x3A3C, 0x8231, 0x9135, + 0x3A3D, 0x8231, 0x9136, + 0x3A3E, 0x8231, 0x9137, + 0x3A3F, 0x8231, 0x9138, + 0x3A40, 0x8231, 0x9139, + 0x3A41, 0x8231, 0x9230, + 0x3A42, 0x8231, 0x9231, + 0x3A43, 0x8231, 0x9232, + 0x3A44, 0x8231, 0x9233, + 0x3A45, 0x8231, 0x9234, + 0x3A46, 0x8231, 0x9235, + 0x3A47, 0x8231, 0x9236, + 0x3A48, 0x8231, 0x9237, + 0x3A49, 0x8231, 0x9238, + 0x3A4A, 0x8231, 0x9239, + 0x3A4B, 0x8231, 0x9330, + 0x3A4C, 0x8231, 0x9331, + 0x3A4D, 0x8231, 0x9332, + 0x3A4E, 0x8231, 0x9333, + 0x3A4F, 0x8231, 0x9334, + 0x3A50, 0x8231, 0x9335, + 0x3A51, 0x8231, 0x9336, + 0x3A52, 0x8231, 0x9337, + 0x3A53, 0x8231, 0x9338, + 0x3A54, 0x8231, 0x9339, + 0x3A55, 0x8231, 0x9430, + 0x3A56, 0x8231, 0x9431, + 0x3A57, 0x8231, 0x9432, + 0x3A58, 0x8231, 0x9433, + 0x3A59, 0x8231, 0x9434, + 0x3A5A, 0x8231, 0x9435, + 0x3A5B, 0x8231, 0x9436, + 0x3A5C, 0x8231, 0x9437, + 0x3A5D, 0x8231, 0x9438, + 0x3A5E, 0x8231, 0x9439, + 0x3A5F, 0x8231, 0x9530, + 0x3A60, 0x8231, 0x9531, + 0x3A61, 0x8231, 0x9532, + 0x3A62, 0x8231, 0x9533, + 0x3A63, 0x8231, 0x9534, + 0x3A64, 0x8231, 0x9535, + 0x3A65, 0x8231, 0x9536, + 0x3A66, 0x8231, 0x9537, + 0x3A67, 0x8231, 0x9538, + 0x3A68, 0x8231, 0x9539, + 0x3A69, 0x8231, 0x9630, + 0x3A6A, 0x8231, 0x9631, + 0x3A6B, 0x8231, 0x9632, + 0x3A6C, 0x8231, 0x9633, + 0x3A6D, 0x8231, 0x9634, + 0x3A6E, 0x8231, 0x9635, + 0x3A6F, 0x8231, 0x9636, + 0x3A70, 0x8231, 0x9637, + 0x3A71, 0x8231, 0x9638, + 0x3A72, 0x8231, 0x9639, + 0x3A74, 0x8231, 0x9730, + 0x3A75, 0x8231, 0x9731, + 0x3A76, 0x8231, 0x9732, + 0x3A77, 0x8231, 0x9733, + 0x3A78, 0x8231, 0x9734, + 0x3A79, 0x8231, 0x9735, + 0x3A7A, 0x8231, 0x9736, + 0x3A7B, 0x8231, 0x9737, + 0x3A7C, 0x8231, 0x9738, + 0x3A7D, 0x8231, 0x9739, + 0x3A7E, 0x8231, 0x9830, + 0x3A7F, 0x8231, 0x9831, + 0x3A80, 0x8231, 0x9832, + 0x3A81, 0x8231, 0x9833, + 0x3A82, 0x8231, 0x9834, + 0x3A83, 0x8231, 0x9835, + 0x3A84, 0x8231, 0x9836, + 0x3A85, 0x8231, 0x9837, + 0x3A86, 0x8231, 0x9838, + 0x3A87, 0x8231, 0x9839, + 0x3A88, 0x8231, 0x9930, + 0x3A89, 0x8231, 0x9931, + 0x3A8A, 0x8231, 0x9932, + 0x3A8B, 0x8231, 0x9933, + 0x3A8C, 0x8231, 0x9934, + 0x3A8D, 0x8231, 0x9935, + 0x3A8E, 0x8231, 0x9936, + 0x3A8F, 0x8231, 0x9937, + 0x3A90, 0x8231, 0x9938, + 0x3A91, 0x8231, 0x9939, + 0x3A92, 0x8231, 0x9A30, + 0x3A93, 0x8231, 0x9A31, + 0x3A94, 0x8231, 0x9A32, + 0x3A95, 0x8231, 0x9A33, + 0x3A96, 0x8231, 0x9A34, + 0x3A97, 0x8231, 0x9A35, + 0x3A98, 0x8231, 0x9A36, + 0x3A99, 0x8231, 0x9A37, + 0x3A9A, 0x8231, 0x9A38, + 0x3A9B, 0x8231, 0x9A39, + 0x3A9C, 0x8231, 0x9B30, + 0x3A9D, 0x8231, 0x9B31, + 0x3A9E, 0x8231, 0x9B32, + 0x3A9F, 0x8231, 0x9B33, + 0x3AA0, 0x8231, 0x9B34, + 0x3AA1, 0x8231, 0x9B35, + 0x3AA2, 0x8231, 0x9B36, + 0x3AA3, 0x8231, 0x9B37, + 0x3AA4, 0x8231, 0x9B38, + 0x3AA5, 0x8231, 0x9B39, + 0x3AA6, 0x8231, 0x9C30, + 0x3AA7, 0x8231, 0x9C31, + 0x3AA8, 0x8231, 0x9C32, + 0x3AA9, 0x8231, 0x9C33, + 0x3AAA, 0x8231, 0x9C34, + 0x3AAB, 0x8231, 0x9C35, + 0x3AAC, 0x8231, 0x9C36, + 0x3AAD, 0x8231, 0x9C37, + 0x3AAE, 0x8231, 0x9C38, + 0x3AAF, 0x8231, 0x9C39, + 0x3AB0, 0x8231, 0x9D30, + 0x3AB1, 0x8231, 0x9D31, + 0x3AB2, 0x8231, 0x9D32, + 0x3AB3, 0x8231, 0x9D33, + 0x3AB4, 0x8231, 0x9D34, + 0x3AB5, 0x8231, 0x9D35, + 0x3AB6, 0x8231, 0x9D36, + 0x3AB7, 0x8231, 0x9D37, + 0x3AB8, 0x8231, 0x9D38, + 0x3AB9, 0x8231, 0x9D39, + 0x3ABA, 0x8231, 0x9E30, + 0x3ABB, 0x8231, 0x9E31, + 0x3ABC, 0x8231, 0x9E32, + 0x3ABD, 0x8231, 0x9E33, + 0x3ABE, 0x8231, 0x9E34, + 0x3ABF, 0x8231, 0x9E35, + 0x3AC0, 0x8231, 0x9E36, + 0x3AC1, 0x8231, 0x9E37, + 0x3AC2, 0x8231, 0x9E38, + 0x3AC3, 0x8231, 0x9E39, + 0x3AC4, 0x8231, 0x9F30, + 0x3AC5, 0x8231, 0x9F31, + 0x3AC6, 0x8231, 0x9F32, + 0x3AC7, 0x8231, 0x9F33, + 0x3AC8, 0x8231, 0x9F34, + 0x3AC9, 0x8231, 0x9F35, + 0x3ACA, 0x8231, 0x9F36, + 0x3ACB, 0x8231, 0x9F37, + 0x3ACC, 0x8231, 0x9F38, + 0x3ACD, 0x8231, 0x9F39, + 0x3ACE, 0x8231, 0xA030, + 0x3ACF, 0x8231, 0xA031, + 0x3AD0, 0x8231, 0xA032, + 0x3AD1, 0x8231, 0xA033, + 0x3AD2, 0x8231, 0xA034, + 0x3AD3, 0x8231, 0xA035, + 0x3AD4, 0x8231, 0xA036, + 0x3AD5, 0x8231, 0xA037, + 0x3AD6, 0x8231, 0xA038, + 0x3AD7, 0x8231, 0xA039, + 0x3AD8, 0x8231, 0xA130, + 0x3AD9, 0x8231, 0xA131, + 0x3ADA, 0x8231, 0xA132, + 0x3ADB, 0x8231, 0xA133, + 0x3ADC, 0x8231, 0xA134, + 0x3ADD, 0x8231, 0xA135, + 0x3ADE, 0x8231, 0xA136, + 0x3ADF, 0x8231, 0xA137, + 0x3AE0, 0x8231, 0xA138, + 0x3AE1, 0x8231, 0xA139, + 0x3AE2, 0x8231, 0xA230, + 0x3AE3, 0x8231, 0xA231, + 0x3AE4, 0x8231, 0xA232, + 0x3AE5, 0x8231, 0xA233, + 0x3AE6, 0x8231, 0xA234, + 0x3AE7, 0x8231, 0xA235, + 0x3AE8, 0x8231, 0xA236, + 0x3AE9, 0x8231, 0xA237, + 0x3AEA, 0x8231, 0xA238, + 0x3AEB, 0x8231, 0xA239, + 0x3AEC, 0x8231, 0xA330, + 0x3AED, 0x8231, 0xA331, + 0x3AEE, 0x8231, 0xA332, + 0x3AEF, 0x8231, 0xA333, + 0x3AF0, 0x8231, 0xA334, + 0x3AF1, 0x8231, 0xA335, + 0x3AF2, 0x8231, 0xA336, + 0x3AF3, 0x8231, 0xA337, + 0x3AF4, 0x8231, 0xA338, + 0x3AF5, 0x8231, 0xA339, + 0x3AF6, 0x8231, 0xA430, + 0x3AF7, 0x8231, 0xA431, + 0x3AF8, 0x8231, 0xA432, + 0x3AF9, 0x8231, 0xA433, + 0x3AFA, 0x8231, 0xA434, + 0x3AFB, 0x8231, 0xA435, + 0x3AFC, 0x8231, 0xA436, + 0x3AFD, 0x8231, 0xA437, + 0x3AFE, 0x8231, 0xA438, + 0x3AFF, 0x8231, 0xA439, + 0x3B00, 0x8231, 0xA530, + 0x3B01, 0x8231, 0xA531, + 0x3B02, 0x8231, 0xA532, + 0x3B03, 0x8231, 0xA533, + 0x3B04, 0x8231, 0xA534, + 0x3B05, 0x8231, 0xA535, + 0x3B06, 0x8231, 0xA536, + 0x3B07, 0x8231, 0xA537, + 0x3B08, 0x8231, 0xA538, + 0x3B09, 0x8231, 0xA539, + 0x3B0A, 0x8231, 0xA630, + 0x3B0B, 0x8231, 0xA631, + 0x3B0C, 0x8231, 0xA632, + 0x3B0D, 0x8231, 0xA633, + 0x3B0E, 0x8231, 0xA634, + 0x3B0F, 0x8231, 0xA635, + 0x3B10, 0x8231, 0xA636, + 0x3B11, 0x8231, 0xA637, + 0x3B12, 0x8231, 0xA638, + 0x3B13, 0x8231, 0xA639, + 0x3B14, 0x8231, 0xA730, + 0x3B15, 0x8231, 0xA731, + 0x3B16, 0x8231, 0xA732, + 0x3B17, 0x8231, 0xA733, + 0x3B18, 0x8231, 0xA734, + 0x3B19, 0x8231, 0xA735, + 0x3B1A, 0x8231, 0xA736, + 0x3B1B, 0x8231, 0xA737, + 0x3B1C, 0x8231, 0xA738, + 0x3B1D, 0x8231, 0xA739, + 0x3B1E, 0x8231, 0xA830, + 0x3B1F, 0x8231, 0xA831, + 0x3B20, 0x8231, 0xA832, + 0x3B21, 0x8231, 0xA833, + 0x3B22, 0x8231, 0xA834, + 0x3B23, 0x8231, 0xA835, + 0x3B24, 0x8231, 0xA836, + 0x3B25, 0x8231, 0xA837, + 0x3B26, 0x8231, 0xA838, + 0x3B27, 0x8231, 0xA839, + 0x3B28, 0x8231, 0xA930, + 0x3B29, 0x8231, 0xA931, + 0x3B2A, 0x8231, 0xA932, + 0x3B2B, 0x8231, 0xA933, + 0x3B2C, 0x8231, 0xA934, + 0x3B2D, 0x8231, 0xA935, + 0x3B2E, 0x8231, 0xA936, + 0x3B2F, 0x8231, 0xA937, + 0x3B30, 0x8231, 0xA938, + 0x3B31, 0x8231, 0xA939, + 0x3B32, 0x8231, 0xAA30, + 0x3B33, 0x8231, 0xAA31, + 0x3B34, 0x8231, 0xAA32, + 0x3B35, 0x8231, 0xAA33, + 0x3B36, 0x8231, 0xAA34, + 0x3B37, 0x8231, 0xAA35, + 0x3B38, 0x8231, 0xAA36, + 0x3B39, 0x8231, 0xAA37, + 0x3B3A, 0x8231, 0xAA38, + 0x3B3B, 0x8231, 0xAA39, + 0x3B3C, 0x8231, 0xAB30, + 0x3B3D, 0x8231, 0xAB31, + 0x3B3E, 0x8231, 0xAB32, + 0x3B3F, 0x8231, 0xAB33, + 0x3B40, 0x8231, 0xAB34, + 0x3B41, 0x8231, 0xAB35, + 0x3B42, 0x8231, 0xAB36, + 0x3B43, 0x8231, 0xAB37, + 0x3B44, 0x8231, 0xAB38, + 0x3B45, 0x8231, 0xAB39, + 0x3B46, 0x8231, 0xAC30, + 0x3B47, 0x8231, 0xAC31, + 0x3B48, 0x8231, 0xAC32, + 0x3B49, 0x8231, 0xAC33, + 0x3B4A, 0x8231, 0xAC34, + 0x3B4B, 0x8231, 0xAC35, + 0x3B4C, 0x8231, 0xAC36, + 0x3B4D, 0x8231, 0xAC37, + 0x3B4F, 0x8231, 0xAC38, + 0x3B50, 0x8231, 0xAC39, + 0x3B51, 0x8231, 0xAD30, + 0x3B52, 0x8231, 0xAD31, + 0x3B53, 0x8231, 0xAD32, + 0x3B54, 0x8231, 0xAD33, + 0x3B55, 0x8231, 0xAD34, + 0x3B56, 0x8231, 0xAD35, + 0x3B57, 0x8231, 0xAD36, + 0x3B58, 0x8231, 0xAD37, + 0x3B59, 0x8231, 0xAD38, + 0x3B5A, 0x8231, 0xAD39, + 0x3B5B, 0x8231, 0xAE30, + 0x3B5C, 0x8231, 0xAE31, + 0x3B5D, 0x8231, 0xAE32, + 0x3B5E, 0x8231, 0xAE33, + 0x3B5F, 0x8231, 0xAE34, + 0x3B60, 0x8231, 0xAE35, + 0x3B61, 0x8231, 0xAE36, + 0x3B62, 0x8231, 0xAE37, + 0x3B63, 0x8231, 0xAE38, + 0x3B64, 0x8231, 0xAE39, + 0x3B65, 0x8231, 0xAF30, + 0x3B66, 0x8231, 0xAF31, + 0x3B67, 0x8231, 0xAF32, + 0x3B68, 0x8231, 0xAF33, + 0x3B69, 0x8231, 0xAF34, + 0x3B6A, 0x8231, 0xAF35, + 0x3B6B, 0x8231, 0xAF36, + 0x3B6C, 0x8231, 0xAF37, + 0x3B6D, 0x8231, 0xAF38, + 0x3B6E, 0x8231, 0xAF39, + 0x3B6F, 0x8231, 0xB030, + 0x3B70, 0x8231, 0xB031, + 0x3B71, 0x8231, 0xB032, + 0x3B72, 0x8231, 0xB033, + 0x3B73, 0x8231, 0xB034, + 0x3B74, 0x8231, 0xB035, + 0x3B75, 0x8231, 0xB036, + 0x3B76, 0x8231, 0xB037, + 0x3B77, 0x8231, 0xB038, + 0x3B78, 0x8231, 0xB039, + 0x3B79, 0x8231, 0xB130, + 0x3B7A, 0x8231, 0xB131, + 0x3B7B, 0x8231, 0xB132, + 0x3B7C, 0x8231, 0xB133, + 0x3B7D, 0x8231, 0xB134, + 0x3B7E, 0x8231, 0xB135, + 0x3B7F, 0x8231, 0xB136, + 0x3B80, 0x8231, 0xB137, + 0x3B81, 0x8231, 0xB138, + 0x3B82, 0x8231, 0xB139, + 0x3B83, 0x8231, 0xB230, + 0x3B84, 0x8231, 0xB231, + 0x3B85, 0x8231, 0xB232, + 0x3B86, 0x8231, 0xB233, + 0x3B87, 0x8231, 0xB234, + 0x3B88, 0x8231, 0xB235, + 0x3B89, 0x8231, 0xB236, + 0x3B8A, 0x8231, 0xB237, + 0x3B8B, 0x8231, 0xB238, + 0x3B8C, 0x8231, 0xB239, + 0x3B8D, 0x8231, 0xB330, + 0x3B8E, 0x8231, 0xB331, + 0x3B8F, 0x8231, 0xB332, + 0x3B90, 0x8231, 0xB333, + 0x3B91, 0x8231, 0xB334, + 0x3B92, 0x8231, 0xB335, + 0x3B93, 0x8231, 0xB336, + 0x3B94, 0x8231, 0xB337, + 0x3B95, 0x8231, 0xB338, + 0x3B96, 0x8231, 0xB339, + 0x3B97, 0x8231, 0xB430, + 0x3B98, 0x8231, 0xB431, + 0x3B99, 0x8231, 0xB432, + 0x3B9A, 0x8231, 0xB433, + 0x3B9B, 0x8231, 0xB434, + 0x3B9C, 0x8231, 0xB435, + 0x3B9D, 0x8231, 0xB436, + 0x3B9E, 0x8231, 0xB437, + 0x3B9F, 0x8231, 0xB438, + 0x3BA0, 0x8231, 0xB439, + 0x3BA1, 0x8231, 0xB530, + 0x3BA2, 0x8231, 0xB531, + 0x3BA3, 0x8231, 0xB532, + 0x3BA4, 0x8231, 0xB533, + 0x3BA5, 0x8231, 0xB534, + 0x3BA6, 0x8231, 0xB535, + 0x3BA7, 0x8231, 0xB536, + 0x3BA8, 0x8231, 0xB537, + 0x3BA9, 0x8231, 0xB538, + 0x3BAA, 0x8231, 0xB539, + 0x3BAB, 0x8231, 0xB630, + 0x3BAC, 0x8231, 0xB631, + 0x3BAD, 0x8231, 0xB632, + 0x3BAE, 0x8231, 0xB633, + 0x3BAF, 0x8231, 0xB634, + 0x3BB0, 0x8231, 0xB635, + 0x3BB1, 0x8231, 0xB636, + 0x3BB2, 0x8231, 0xB637, + 0x3BB3, 0x8231, 0xB638, + 0x3BB4, 0x8231, 0xB639, + 0x3BB5, 0x8231, 0xB730, + 0x3BB6, 0x8231, 0xB731, + 0x3BB7, 0x8231, 0xB732, + 0x3BB8, 0x8231, 0xB733, + 0x3BB9, 0x8231, 0xB734, + 0x3BBA, 0x8231, 0xB735, + 0x3BBB, 0x8231, 0xB736, + 0x3BBC, 0x8231, 0xB737, + 0x3BBD, 0x8231, 0xB738, + 0x3BBE, 0x8231, 0xB739, + 0x3BBF, 0x8231, 0xB830, + 0x3BC0, 0x8231, 0xB831, + 0x3BC1, 0x8231, 0xB832, + 0x3BC2, 0x8231, 0xB833, + 0x3BC3, 0x8231, 0xB834, + 0x3BC4, 0x8231, 0xB835, + 0x3BC5, 0x8231, 0xB836, + 0x3BC6, 0x8231, 0xB837, + 0x3BC7, 0x8231, 0xB838, + 0x3BC8, 0x8231, 0xB839, + 0x3BC9, 0x8231, 0xB930, + 0x3BCA, 0x8231, 0xB931, + 0x3BCB, 0x8231, 0xB932, + 0x3BCC, 0x8231, 0xB933, + 0x3BCD, 0x8231, 0xB934, + 0x3BCE, 0x8231, 0xB935, + 0x3BCF, 0x8231, 0xB936, + 0x3BD0, 0x8231, 0xB937, + 0x3BD1, 0x8231, 0xB938, + 0x3BD2, 0x8231, 0xB939, + 0x3BD3, 0x8231, 0xBA30, + 0x3BD4, 0x8231, 0xBA31, + 0x3BD5, 0x8231, 0xBA32, + 0x3BD6, 0x8231, 0xBA33, + 0x3BD7, 0x8231, 0xBA34, + 0x3BD8, 0x8231, 0xBA35, + 0x3BD9, 0x8231, 0xBA36, + 0x3BDA, 0x8231, 0xBA37, + 0x3BDB, 0x8231, 0xBA38, + 0x3BDC, 0x8231, 0xBA39, + 0x3BDD, 0x8231, 0xBB30, + 0x3BDE, 0x8231, 0xBB31, + 0x3BDF, 0x8231, 0xBB32, + 0x3BE0, 0x8231, 0xBB33, + 0x3BE1, 0x8231, 0xBB34, + 0x3BE2, 0x8231, 0xBB35, + 0x3BE3, 0x8231, 0xBB36, + 0x3BE4, 0x8231, 0xBB37, + 0x3BE5, 0x8231, 0xBB38, + 0x3BE6, 0x8231, 0xBB39, + 0x3BE7, 0x8231, 0xBC30, + 0x3BE8, 0x8231, 0xBC31, + 0x3BE9, 0x8231, 0xBC32, + 0x3BEA, 0x8231, 0xBC33, + 0x3BEB, 0x8231, 0xBC34, + 0x3BEC, 0x8231, 0xBC35, + 0x3BED, 0x8231, 0xBC36, + 0x3BEE, 0x8231, 0xBC37, + 0x3BEF, 0x8231, 0xBC38, + 0x3BF0, 0x8231, 0xBC39, + 0x3BF1, 0x8231, 0xBD30, + 0x3BF2, 0x8231, 0xBD31, + 0x3BF3, 0x8231, 0xBD32, + 0x3BF4, 0x8231, 0xBD33, + 0x3BF5, 0x8231, 0xBD34, + 0x3BF6, 0x8231, 0xBD35, + 0x3BF7, 0x8231, 0xBD36, + 0x3BF8, 0x8231, 0xBD37, + 0x3BF9, 0x8231, 0xBD38, + 0x3BFA, 0x8231, 0xBD39, + 0x3BFB, 0x8231, 0xBE30, + 0x3BFC, 0x8231, 0xBE31, + 0x3BFD, 0x8231, 0xBE32, + 0x3BFE, 0x8231, 0xBE33, + 0x3BFF, 0x8231, 0xBE34, + 0x3C00, 0x8231, 0xBE35, + 0x3C01, 0x8231, 0xBE36, + 0x3C02, 0x8231, 0xBE37, + 0x3C03, 0x8231, 0xBE38, + 0x3C04, 0x8231, 0xBE39, + 0x3C05, 0x8231, 0xBF30, + 0x3C06, 0x8231, 0xBF31, + 0x3C07, 0x8231, 0xBF32, + 0x3C08, 0x8231, 0xBF33, + 0x3C09, 0x8231, 0xBF34, + 0x3C0A, 0x8231, 0xBF35, + 0x3C0B, 0x8231, 0xBF36, + 0x3C0C, 0x8231, 0xBF37, + 0x3C0D, 0x8231, 0xBF38, + 0x3C0E, 0x8231, 0xBF39, + 0x3C0F, 0x8231, 0xC030, + 0x3C10, 0x8231, 0xC031, + 0x3C11, 0x8231, 0xC032, + 0x3C12, 0x8231, 0xC033, + 0x3C13, 0x8231, 0xC034, + 0x3C14, 0x8231, 0xC035, + 0x3C15, 0x8231, 0xC036, + 0x3C16, 0x8231, 0xC037, + 0x3C17, 0x8231, 0xC038, + 0x3C18, 0x8231, 0xC039, + 0x3C19, 0x8231, 0xC130, + 0x3C1A, 0x8231, 0xC131, + 0x3C1B, 0x8231, 0xC132, + 0x3C1C, 0x8231, 0xC133, + 0x3C1D, 0x8231, 0xC134, + 0x3C1E, 0x8231, 0xC135, + 0x3C1F, 0x8231, 0xC136, + 0x3C20, 0x8231, 0xC137, + 0x3C21, 0x8231, 0xC138, + 0x3C22, 0x8231, 0xC139, + 0x3C23, 0x8231, 0xC230, + 0x3C24, 0x8231, 0xC231, + 0x3C25, 0x8231, 0xC232, + 0x3C26, 0x8231, 0xC233, + 0x3C27, 0x8231, 0xC234, + 0x3C28, 0x8231, 0xC235, + 0x3C29, 0x8231, 0xC236, + 0x3C2A, 0x8231, 0xC237, + 0x3C2B, 0x8231, 0xC238, + 0x3C2C, 0x8231, 0xC239, + 0x3C2D, 0x8231, 0xC330, + 0x3C2E, 0x8231, 0xC331, + 0x3C2F, 0x8231, 0xC332, + 0x3C30, 0x8231, 0xC333, + 0x3C31, 0x8231, 0xC334, + 0x3C32, 0x8231, 0xC335, + 0x3C33, 0x8231, 0xC336, + 0x3C34, 0x8231, 0xC337, + 0x3C35, 0x8231, 0xC338, + 0x3C36, 0x8231, 0xC339, + 0x3C37, 0x8231, 0xC430, + 0x3C38, 0x8231, 0xC431, + 0x3C39, 0x8231, 0xC432, + 0x3C3A, 0x8231, 0xC433, + 0x3C3B, 0x8231, 0xC434, + 0x3C3C, 0x8231, 0xC435, + 0x3C3D, 0x8231, 0xC436, + 0x3C3E, 0x8231, 0xC437, + 0x3C3F, 0x8231, 0xC438, + 0x3C40, 0x8231, 0xC439, + 0x3C41, 0x8231, 0xC530, + 0x3C42, 0x8231, 0xC531, + 0x3C43, 0x8231, 0xC532, + 0x3C44, 0x8231, 0xC533, + 0x3C45, 0x8231, 0xC534, + 0x3C46, 0x8231, 0xC535, + 0x3C47, 0x8231, 0xC536, + 0x3C48, 0x8231, 0xC537, + 0x3C49, 0x8231, 0xC538, + 0x3C4A, 0x8231, 0xC539, + 0x3C4B, 0x8231, 0xC630, + 0x3C4C, 0x8231, 0xC631, + 0x3C4D, 0x8231, 0xC632, + 0x3C4E, 0x8231, 0xC633, + 0x3C4F, 0x8231, 0xC634, + 0x3C50, 0x8231, 0xC635, + 0x3C51, 0x8231, 0xC636, + 0x3C52, 0x8231, 0xC637, + 0x3C53, 0x8231, 0xC638, + 0x3C54, 0x8231, 0xC639, + 0x3C55, 0x8231, 0xC730, + 0x3C56, 0x8231, 0xC731, + 0x3C57, 0x8231, 0xC732, + 0x3C58, 0x8231, 0xC733, + 0x3C59, 0x8231, 0xC734, + 0x3C5A, 0x8231, 0xC735, + 0x3C5B, 0x8231, 0xC736, + 0x3C5C, 0x8231, 0xC737, + 0x3C5D, 0x8231, 0xC738, + 0x3C5E, 0x8231, 0xC739, + 0x3C5F, 0x8231, 0xC830, + 0x3C60, 0x8231, 0xC831, + 0x3C61, 0x8231, 0xC832, + 0x3C62, 0x8231, 0xC833, + 0x3C63, 0x8231, 0xC834, + 0x3C64, 0x8231, 0xC835, + 0x3C65, 0x8231, 0xC836, + 0x3C66, 0x8231, 0xC837, + 0x3C67, 0x8231, 0xC838, + 0x3C68, 0x8231, 0xC839, + 0x3C69, 0x8231, 0xC930, + 0x3C6A, 0x8231, 0xC931, + 0x3C6B, 0x8231, 0xC932, + 0x3C6C, 0x8231, 0xC933, + 0x3C6D, 0x8231, 0xC934, + 0x3C6F, 0x8231, 0xC935, + 0x3C70, 0x8231, 0xC936, + 0x3C71, 0x8231, 0xC937, + 0x3C72, 0x8231, 0xC938, + 0x3C73, 0x8231, 0xC939, + 0x3C74, 0x8231, 0xCA30, + 0x3C75, 0x8231, 0xCA31, + 0x3C76, 0x8231, 0xCA32, + 0x3C77, 0x8231, 0xCA33, + 0x3C78, 0x8231, 0xCA34, + 0x3C79, 0x8231, 0xCA35, + 0x3C7A, 0x8231, 0xCA36, + 0x3C7B, 0x8231, 0xCA37, + 0x3C7C, 0x8231, 0xCA38, + 0x3C7D, 0x8231, 0xCA39, + 0x3C7E, 0x8231, 0xCB30, + 0x3C7F, 0x8231, 0xCB31, + 0x3C80, 0x8231, 0xCB32, + 0x3C81, 0x8231, 0xCB33, + 0x3C82, 0x8231, 0xCB34, + 0x3C83, 0x8231, 0xCB35, + 0x3C84, 0x8231, 0xCB36, + 0x3C85, 0x8231, 0xCB37, + 0x3C86, 0x8231, 0xCB38, + 0x3C87, 0x8231, 0xCB39, + 0x3C88, 0x8231, 0xCC30, + 0x3C89, 0x8231, 0xCC31, + 0x3C8A, 0x8231, 0xCC32, + 0x3C8B, 0x8231, 0xCC33, + 0x3C8C, 0x8231, 0xCC34, + 0x3C8D, 0x8231, 0xCC35, + 0x3C8E, 0x8231, 0xCC36, + 0x3C8F, 0x8231, 0xCC37, + 0x3C90, 0x8231, 0xCC38, + 0x3C91, 0x8231, 0xCC39, + 0x3C92, 0x8231, 0xCD30, + 0x3C93, 0x8231, 0xCD31, + 0x3C94, 0x8231, 0xCD32, + 0x3C95, 0x8231, 0xCD33, + 0x3C96, 0x8231, 0xCD34, + 0x3C97, 0x8231, 0xCD35, + 0x3C98, 0x8231, 0xCD36, + 0x3C99, 0x8231, 0xCD37, + 0x3C9A, 0x8231, 0xCD38, + 0x3C9B, 0x8231, 0xCD39, + 0x3C9C, 0x8231, 0xCE30, + 0x3C9D, 0x8231, 0xCE31, + 0x3C9E, 0x8231, 0xCE32, + 0x3C9F, 0x8231, 0xCE33, + 0x3CA0, 0x8231, 0xCE34, + 0x3CA1, 0x8231, 0xCE35, + 0x3CA2, 0x8231, 0xCE36, + 0x3CA3, 0x8231, 0xCE37, + 0x3CA4, 0x8231, 0xCE38, + 0x3CA5, 0x8231, 0xCE39, + 0x3CA6, 0x8231, 0xCF30, + 0x3CA7, 0x8231, 0xCF31, + 0x3CA8, 0x8231, 0xCF32, + 0x3CA9, 0x8231, 0xCF33, + 0x3CAA, 0x8231, 0xCF34, + 0x3CAB, 0x8231, 0xCF35, + 0x3CAC, 0x8231, 0xCF36, + 0x3CAD, 0x8231, 0xCF37, + 0x3CAE, 0x8231, 0xCF38, + 0x3CAF, 0x8231, 0xCF39, + 0x3CB0, 0x8231, 0xD030, + 0x3CB1, 0x8231, 0xD031, + 0x3CB2, 0x8231, 0xD032, + 0x3CB3, 0x8231, 0xD033, + 0x3CB4, 0x8231, 0xD034, + 0x3CB5, 0x8231, 0xD035, + 0x3CB6, 0x8231, 0xD036, + 0x3CB7, 0x8231, 0xD037, + 0x3CB8, 0x8231, 0xD038, + 0x3CB9, 0x8231, 0xD039, + 0x3CBA, 0x8231, 0xD130, + 0x3CBB, 0x8231, 0xD131, + 0x3CBC, 0x8231, 0xD132, + 0x3CBD, 0x8231, 0xD133, + 0x3CBE, 0x8231, 0xD134, + 0x3CBF, 0x8231, 0xD135, + 0x3CC0, 0x8231, 0xD136, + 0x3CC1, 0x8231, 0xD137, + 0x3CC2, 0x8231, 0xD138, + 0x3CC3, 0x8231, 0xD139, + 0x3CC4, 0x8231, 0xD230, + 0x3CC5, 0x8231, 0xD231, + 0x3CC6, 0x8231, 0xD232, + 0x3CC7, 0x8231, 0xD233, + 0x3CC8, 0x8231, 0xD234, + 0x3CC9, 0x8231, 0xD235, + 0x3CCA, 0x8231, 0xD236, + 0x3CCB, 0x8231, 0xD237, + 0x3CCC, 0x8231, 0xD238, + 0x3CCD, 0x8231, 0xD239, + 0x3CCE, 0x8231, 0xD330, + 0x3CCF, 0x8231, 0xD331, + 0x3CD0, 0x8231, 0xD332, + 0x3CD1, 0x8231, 0xD333, + 0x3CD2, 0x8231, 0xD334, + 0x3CD3, 0x8231, 0xD335, + 0x3CD4, 0x8231, 0xD336, + 0x3CD5, 0x8231, 0xD337, + 0x3CD6, 0x8231, 0xD338, + 0x3CD7, 0x8231, 0xD339, + 0x3CD8, 0x8231, 0xD430, + 0x3CD9, 0x8231, 0xD431, + 0x3CDA, 0x8231, 0xD432, + 0x3CDB, 0x8231, 0xD433, + 0x3CDC, 0x8231, 0xD434, + 0x3CDD, 0x8231, 0xD435, + 0x3CDE, 0x8231, 0xD436, + 0x3CDF, 0x8231, 0xD437, + 0x4057, 0x8232, 0xAF33, + 0x4058, 0x8232, 0xAF34, + 0x4059, 0x8232, 0xAF35, + 0x405A, 0x8232, 0xAF36, + 0x405B, 0x8232, 0xAF37, + 0x405C, 0x8232, 0xAF38, + 0x405D, 0x8232, 0xAF39, + 0x405E, 0x8232, 0xB030, + 0x405F, 0x8232, 0xB031, + 0x4060, 0x8232, 0xB032, + 0x4061, 0x8232, 0xB033, + 0x4062, 0x8232, 0xB034, + 0x4063, 0x8232, 0xB035, + 0x4064, 0x8232, 0xB036, + 0x4065, 0x8232, 0xB037, + 0x4066, 0x8232, 0xB038, + 0x4067, 0x8232, 0xB039, + 0x4068, 0x8232, 0xB130, + 0x4069, 0x8232, 0xB131, + 0x406A, 0x8232, 0xB132, + 0x406B, 0x8232, 0xB133, + 0x406C, 0x8232, 0xB134, + 0x406D, 0x8232, 0xB135, + 0x406E, 0x8232, 0xB136, + 0x406F, 0x8232, 0xB137, + 0x4070, 0x8232, 0xB138, + 0x4071, 0x8232, 0xB139, + 0x4072, 0x8232, 0xB230, + 0x4073, 0x8232, 0xB231, + 0x4074, 0x8232, 0xB232, + 0x4075, 0x8232, 0xB233, + 0x4076, 0x8232, 0xB234, + 0x4077, 0x8232, 0xB235, + 0x4078, 0x8232, 0xB236, + 0x4079, 0x8232, 0xB237, + 0x407A, 0x8232, 0xB238, + 0x407B, 0x8232, 0xB239, + 0x407C, 0x8232, 0xB330, + 0x407D, 0x8232, 0xB331, + 0x407E, 0x8232, 0xB332, + 0x407F, 0x8232, 0xB333, + 0x4080, 0x8232, 0xB334, + 0x4081, 0x8232, 0xB335, + 0x4082, 0x8232, 0xB336, + 0x4083, 0x8232, 0xB337, + 0x4084, 0x8232, 0xB338, + 0x4085, 0x8232, 0xB339, + 0x4086, 0x8232, 0xB430, + 0x4087, 0x8232, 0xB431, + 0x4088, 0x8232, 0xB432, + 0x4089, 0x8232, 0xB433, + 0x408A, 0x8232, 0xB434, + 0x408B, 0x8232, 0xB435, + 0x408C, 0x8232, 0xB436, + 0x408D, 0x8232, 0xB437, + 0x408E, 0x8232, 0xB438, + 0x408F, 0x8232, 0xB439, + 0x4090, 0x8232, 0xB530, + 0x4091, 0x8232, 0xB531, + 0x4092, 0x8232, 0xB532, + 0x4093, 0x8232, 0xB533, + 0x4094, 0x8232, 0xB534, + 0x4095, 0x8232, 0xB535, + 0x4096, 0x8232, 0xB536, + 0x4097, 0x8232, 0xB537, + 0x4098, 0x8232, 0xB538, + 0x4099, 0x8232, 0xB539, + 0x409A, 0x8232, 0xB630, + 0x409B, 0x8232, 0xB631, + 0x409C, 0x8232, 0xB632, + 0x409D, 0x8232, 0xB633, + 0x409E, 0x8232, 0xB634, + 0x409F, 0x8232, 0xB635, + 0x40A0, 0x8232, 0xB636, + 0x40A1, 0x8232, 0xB637, + 0x40A2, 0x8232, 0xB638, + 0x40A3, 0x8232, 0xB639, + 0x40A4, 0x8232, 0xB730, + 0x40A5, 0x8232, 0xB731, + 0x40A6, 0x8232, 0xB732, + 0x40A7, 0x8232, 0xB733, + 0x40A8, 0x8232, 0xB734, + 0x40A9, 0x8232, 0xB735, + 0x40AA, 0x8232, 0xB736, + 0x40AB, 0x8232, 0xB737, + 0x40AC, 0x8232, 0xB738, + 0x40AD, 0x8232, 0xB739, + 0x40AE, 0x8232, 0xB830, + 0x40AF, 0x8232, 0xB831, + 0x40B0, 0x8232, 0xB832, + 0x40B1, 0x8232, 0xB833, + 0x40B2, 0x8232, 0xB834, + 0x40B3, 0x8232, 0xB835, + 0x40B4, 0x8232, 0xB836, + 0x40B5, 0x8232, 0xB837, + 0x40B6, 0x8232, 0xB838, + 0x40B7, 0x8232, 0xB839, + 0x40B8, 0x8232, 0xB930, + 0x40B9, 0x8232, 0xB931, + 0x40BA, 0x8232, 0xB932, + 0x40BB, 0x8232, 0xB933, + 0x40BC, 0x8232, 0xB934, + 0x40BD, 0x8232, 0xB935, + 0x40BE, 0x8232, 0xB936, + 0x40BF, 0x8232, 0xB937, + 0x40C0, 0x8232, 0xB938, + 0x40C1, 0x8232, 0xB939, + 0x40C2, 0x8232, 0xBA30, + 0x40C3, 0x8232, 0xBA31, + 0x40C4, 0x8232, 0xBA32, + 0x40C5, 0x8232, 0xBA33, + 0x40C6, 0x8232, 0xBA34, + 0x40C7, 0x8232, 0xBA35, + 0x40C8, 0x8232, 0xBA36, + 0x40C9, 0x8232, 0xBA37, + 0x40CA, 0x8232, 0xBA38, + 0x40CB, 0x8232, 0xBA39, + 0x40CC, 0x8232, 0xBB30, + 0x40CD, 0x8232, 0xBB31, + 0x40CE, 0x8232, 0xBB32, + 0x40CF, 0x8232, 0xBB33, + 0x40D0, 0x8232, 0xBB34, + 0x40D1, 0x8232, 0xBB35, + 0x40D2, 0x8232, 0xBB36, + 0x40D3, 0x8232, 0xBB37, + 0x40D4, 0x8232, 0xBB38, + 0x40D5, 0x8232, 0xBB39, + 0x40D6, 0x8232, 0xBC30, + 0x40D7, 0x8232, 0xBC31, + 0x40D8, 0x8232, 0xBC32, + 0x40D9, 0x8232, 0xBC33, + 0x40DA, 0x8232, 0xBC34, + 0x40DB, 0x8232, 0xBC35, + 0x40DC, 0x8232, 0xBC36, + 0x40DD, 0x8232, 0xBC37, + 0x40DE, 0x8232, 0xBC38, + 0x40DF, 0x8232, 0xBC39, + 0x40E0, 0x8232, 0xBD30, + 0x40E1, 0x8232, 0xBD31, + 0x40E2, 0x8232, 0xBD32, + 0x40E3, 0x8232, 0xBD33, + 0x40E4, 0x8232, 0xBD34, + 0x40E5, 0x8232, 0xBD35, + 0x40E6, 0x8232, 0xBD36, + 0x40E7, 0x8232, 0xBD37, + 0x40E8, 0x8232, 0xBD38, + 0x40E9, 0x8232, 0xBD39, + 0x40EA, 0x8232, 0xBE30, + 0x40EB, 0x8232, 0xBE31, + 0x40EC, 0x8232, 0xBE32, + 0x40ED, 0x8232, 0xBE33, + 0x40EE, 0x8232, 0xBE34, + 0x40EF, 0x8232, 0xBE35, + 0x40F0, 0x8232, 0xBE36, + 0x40F1, 0x8232, 0xBE37, + 0x40F2, 0x8232, 0xBE38, + 0x40F3, 0x8232, 0xBE39, + 0x40F4, 0x8232, 0xBF30, + 0x40F5, 0x8232, 0xBF31, + 0x40F6, 0x8232, 0xBF32, + 0x40F7, 0x8232, 0xBF33, + 0x40F8, 0x8232, 0xBF34, + 0x40F9, 0x8232, 0xBF35, + 0x40FA, 0x8232, 0xBF36, + 0x40FB, 0x8232, 0xBF37, + 0x40FC, 0x8232, 0xBF38, + 0x40FD, 0x8232, 0xBF39, + 0x40FE, 0x8232, 0xC030, + 0x40FF, 0x8232, 0xC031, + 0x4100, 0x8232, 0xC032, + 0x4101, 0x8232, 0xC033, + 0x4102, 0x8232, 0xC034, + 0x4103, 0x8232, 0xC035, + 0x4104, 0x8232, 0xC036, + 0x4105, 0x8232, 0xC037, + 0x4106, 0x8232, 0xC038, + 0x4107, 0x8232, 0xC039, + 0x4108, 0x8232, 0xC130, + 0x4109, 0x8232, 0xC131, + 0x410A, 0x8232, 0xC132, + 0x410B, 0x8232, 0xC133, + 0x410C, 0x8232, 0xC134, + 0x410D, 0x8232, 0xC135, + 0x410E, 0x8232, 0xC136, + 0x410F, 0x8232, 0xC137, + 0x4110, 0x8232, 0xC138, + 0x4111, 0x8232, 0xC139, + 0x4112, 0x8232, 0xC230, + 0x4113, 0x8232, 0xC231, + 0x4114, 0x8232, 0xC232, + 0x4115, 0x8232, 0xC233, + 0x4116, 0x8232, 0xC234, + 0x4117, 0x8232, 0xC235, + 0x4118, 0x8232, 0xC236, + 0x4119, 0x8232, 0xC237, + 0x411A, 0x8232, 0xC238, + 0x411B, 0x8232, 0xC239, + 0x411C, 0x8232, 0xC330, + 0x411D, 0x8232, 0xC331, + 0x411E, 0x8232, 0xC332, + 0x411F, 0x8232, 0xC333, + 0x4120, 0x8232, 0xC334, + 0x4121, 0x8232, 0xC335, + 0x4122, 0x8232, 0xC336, + 0x4123, 0x8232, 0xC337, + 0x4124, 0x8232, 0xC338, + 0x4125, 0x8232, 0xC339, + 0x4126, 0x8232, 0xC430, + 0x4127, 0x8232, 0xC431, + 0x4128, 0x8232, 0xC432, + 0x4129, 0x8232, 0xC433, + 0x412A, 0x8232, 0xC434, + 0x412B, 0x8232, 0xC435, + 0x412C, 0x8232, 0xC436, + 0x412D, 0x8232, 0xC437, + 0x412E, 0x8232, 0xC438, + 0x412F, 0x8232, 0xC439, + 0x4130, 0x8232, 0xC530, + 0x4131, 0x8232, 0xC531, + 0x4132, 0x8232, 0xC532, + 0x4133, 0x8232, 0xC533, + 0x4134, 0x8232, 0xC534, + 0x4135, 0x8232, 0xC535, + 0x4136, 0x8232, 0xC536, + 0x4137, 0x8232, 0xC537, + 0x4138, 0x8232, 0xC538, + 0x4139, 0x8232, 0xC539, + 0x413A, 0x8232, 0xC630, + 0x413B, 0x8232, 0xC631, + 0x413C, 0x8232, 0xC632, + 0x413D, 0x8232, 0xC633, + 0x413E, 0x8232, 0xC634, + 0x413F, 0x8232, 0xC635, + 0x4140, 0x8232, 0xC636, + 0x4141, 0x8232, 0xC637, + 0x4142, 0x8232, 0xC638, + 0x4143, 0x8232, 0xC639, + 0x4144, 0x8232, 0xC730, + 0x4145, 0x8232, 0xC731, + 0x4146, 0x8232, 0xC732, + 0x4147, 0x8232, 0xC733, + 0x4148, 0x8232, 0xC734, + 0x4149, 0x8232, 0xC735, + 0x414A, 0x8232, 0xC736, + 0x414B, 0x8232, 0xC737, + 0x414C, 0x8232, 0xC738, + 0x414D, 0x8232, 0xC739, + 0x414E, 0x8232, 0xC830, + 0x414F, 0x8232, 0xC831, + 0x4150, 0x8232, 0xC832, + 0x4151, 0x8232, 0xC833, + 0x4152, 0x8232, 0xC834, + 0x4153, 0x8232, 0xC835, + 0x4154, 0x8232, 0xC836, + 0x4155, 0x8232, 0xC837, + 0x4156, 0x8232, 0xC838, + 0x4157, 0x8232, 0xC839, + 0x4158, 0x8232, 0xC930, + 0x4159, 0x8232, 0xC931, + 0x415A, 0x8232, 0xC932, + 0x415B, 0x8232, 0xC933, + 0x415C, 0x8232, 0xC934, + 0x415D, 0x8232, 0xC935, + 0x415E, 0x8232, 0xC936, + 0x4338, 0x8232, 0xF838, + 0x4339, 0x8232, 0xF839, + 0x433A, 0x8232, 0xF930, + 0x433B, 0x8232, 0xF931, + 0x433C, 0x8232, 0xF932, + 0x433D, 0x8232, 0xF933, + 0x433E, 0x8232, 0xF934, + 0x433F, 0x8232, 0xF935, + 0x4340, 0x8232, 0xF936, + 0x4341, 0x8232, 0xF937, + 0x4342, 0x8232, 0xF938, + 0x4343, 0x8232, 0xF939, + 0x4344, 0x8232, 0xFA30, + 0x4345, 0x8232, 0xFA31, + 0x4346, 0x8232, 0xFA32, + 0x4347, 0x8232, 0xFA33, + 0x4348, 0x8232, 0xFA34, + 0x4349, 0x8232, 0xFA35, + 0x434A, 0x8232, 0xFA36, + 0x434B, 0x8232, 0xFA37, + 0x434C, 0x8232, 0xFA38, + 0x434D, 0x8232, 0xFA39, + 0x434E, 0x8232, 0xFB30, + 0x434F, 0x8232, 0xFB31, + 0x4350, 0x8232, 0xFB32, + 0x4351, 0x8232, 0xFB33, + 0x4352, 0x8232, 0xFB34, + 0x4353, 0x8232, 0xFB35, + 0x4354, 0x8232, 0xFB36, + 0x4355, 0x8232, 0xFB37, + 0x4356, 0x8232, 0xFB38, + 0x4357, 0x8232, 0xFB39, + 0x4358, 0x8232, 0xFC30, + 0x4359, 0x8232, 0xFC31, + 0x435A, 0x8232, 0xFC32, + 0x435B, 0x8232, 0xFC33, + 0x435C, 0x8232, 0xFC34, + 0x435D, 0x8232, 0xFC35, + 0x435E, 0x8232, 0xFC36, + 0x435F, 0x8232, 0xFC37, + 0x4360, 0x8232, 0xFC38, + 0x4361, 0x8232, 0xFC39, + 0x4362, 0x8232, 0xFD30, + 0x4363, 0x8232, 0xFD31, + 0x4364, 0x8232, 0xFD32, + 0x4365, 0x8232, 0xFD33, + 0x4366, 0x8232, 0xFD34, + 0x4367, 0x8232, 0xFD35, + 0x4368, 0x8232, 0xFD36, + 0x4369, 0x8232, 0xFD37, + 0x436A, 0x8232, 0xFD38, + 0x436B, 0x8232, 0xFD39, + 0x436C, 0x8232, 0xFE30, + 0x436D, 0x8232, 0xFE31, + 0x436E, 0x8232, 0xFE32, + 0x436F, 0x8232, 0xFE33, + 0x4370, 0x8232, 0xFE34, + 0x4371, 0x8232, 0xFE35, + 0x4372, 0x8232, 0xFE36, + 0x4373, 0x8232, 0xFE37, + 0x4374, 0x8232, 0xFE38, + 0x4375, 0x8232, 0xFE39, + 0x4376, 0x8233, 0x8130, + 0x4377, 0x8233, 0x8131, + 0x4378, 0x8233, 0x8132, + 0x4379, 0x8233, 0x8133, + 0x437A, 0x8233, 0x8134, + 0x437B, 0x8233, 0x8135, + 0x437C, 0x8233, 0x8136, + 0x437D, 0x8233, 0x8137, + 0x437E, 0x8233, 0x8138, + 0x437F, 0x8233, 0x8139, + 0x4380, 0x8233, 0x8230, + 0x4381, 0x8233, 0x8231, + 0x4382, 0x8233, 0x8232, + 0x4383, 0x8233, 0x8233, + 0x4384, 0x8233, 0x8234, + 0x4385, 0x8233, 0x8235, + 0x4386, 0x8233, 0x8236, + 0x4387, 0x8233, 0x8237, + 0x4388, 0x8233, 0x8238, + 0x4389, 0x8233, 0x8239, + 0x438A, 0x8233, 0x8330, + 0x438B, 0x8233, 0x8331, + 0x438C, 0x8233, 0x8332, + 0x438D, 0x8233, 0x8333, + 0x438E, 0x8233, 0x8334, + 0x438F, 0x8233, 0x8335, + 0x4390, 0x8233, 0x8336, + 0x4391, 0x8233, 0x8337, + 0x4392, 0x8233, 0x8338, + 0x4393, 0x8233, 0x8339, + 0x4394, 0x8233, 0x8430, + 0x4395, 0x8233, 0x8431, + 0x4396, 0x8233, 0x8432, + 0x4397, 0x8233, 0x8433, + 0x4398, 0x8233, 0x8434, + 0x4399, 0x8233, 0x8435, + 0x439A, 0x8233, 0x8436, + 0x439B, 0x8233, 0x8437, + 0x439C, 0x8233, 0x8438, + 0x439D, 0x8233, 0x8439, + 0x439E, 0x8233, 0x8530, + 0x439F, 0x8233, 0x8531, + 0x43A0, 0x8233, 0x8532, + 0x43A1, 0x8233, 0x8533, + 0x43A2, 0x8233, 0x8534, + 0x43A3, 0x8233, 0x8535, + 0x43A4, 0x8233, 0x8536, + 0x43A5, 0x8233, 0x8537, + 0x43A6, 0x8233, 0x8538, + 0x43A7, 0x8233, 0x8539, + 0x43A8, 0x8233, 0x8630, + 0x43A9, 0x8233, 0x8631, + 0x43AA, 0x8233, 0x8632, + 0x43AB, 0x8233, 0x8633, + 0x43AD, 0x8233, 0x8634, + 0x43AE, 0x8233, 0x8635, + 0x43AF, 0x8233, 0x8636, + 0x43B0, 0x8233, 0x8637, + 0x43B2, 0x8233, 0x8638, + 0x43B3, 0x8233, 0x8639, + 0x43B4, 0x8233, 0x8730, + 0x43B5, 0x8233, 0x8731, + 0x43B6, 0x8233, 0x8732, + 0x43B7, 0x8233, 0x8733, + 0x43B8, 0x8233, 0x8734, + 0x43B9, 0x8233, 0x8735, + 0x43BA, 0x8233, 0x8736, + 0x43BB, 0x8233, 0x8737, + 0x43BC, 0x8233, 0x8738, + 0x43BD, 0x8233, 0x8739, + 0x43BE, 0x8233, 0x8830, + 0x43BF, 0x8233, 0x8831, + 0x43C0, 0x8233, 0x8832, + 0x43C1, 0x8233, 0x8833, + 0x43C2, 0x8233, 0x8834, + 0x43C3, 0x8233, 0x8835, + 0x43C4, 0x8233, 0x8836, + 0x43C5, 0x8233, 0x8837, + 0x43C6, 0x8233, 0x8838, + 0x43C7, 0x8233, 0x8839, + 0x43C8, 0x8233, 0x8930, + 0x43C9, 0x8233, 0x8931, + 0x43CA, 0x8233, 0x8932, + 0x43CB, 0x8233, 0x8933, + 0x43CC, 0x8233, 0x8934, + 0x43CD, 0x8233, 0x8935, + 0x43CE, 0x8233, 0x8936, + 0x43CF, 0x8233, 0x8937, + 0x43D0, 0x8233, 0x8938, + 0x43D1, 0x8233, 0x8939, + 0x43D2, 0x8233, 0x8A30, + 0x43D3, 0x8233, 0x8A31, + 0x43D4, 0x8233, 0x8A32, + 0x43D5, 0x8233, 0x8A33, + 0x43D6, 0x8233, 0x8A34, + 0x43D7, 0x8233, 0x8A35, + 0x43D8, 0x8233, 0x8A36, + 0x43D9, 0x8233, 0x8A37, + 0x43DA, 0x8233, 0x8A38, + 0x43DB, 0x8233, 0x8A39, + 0x43DC, 0x8233, 0x8B30, + 0x43DE, 0x8233, 0x8B31, + 0x43DF, 0x8233, 0x8B32, + 0x43E0, 0x8233, 0x8B33, + 0x43E1, 0x8233, 0x8B34, + 0x43E2, 0x8233, 0x8B35, + 0x43E3, 0x8233, 0x8B36, + 0x43E4, 0x8233, 0x8B37, + 0x43E5, 0x8233, 0x8B38, + 0x43E6, 0x8233, 0x8B39, + 0x43E7, 0x8233, 0x8C30, + 0x43E8, 0x8233, 0x8C31, + 0x43E9, 0x8233, 0x8C32, + 0x43EA, 0x8233, 0x8C33, + 0x43EB, 0x8233, 0x8C34, + 0x43EC, 0x8233, 0x8C35, + 0x43ED, 0x8233, 0x8C36, + 0x43EE, 0x8233, 0x8C37, + 0x43EF, 0x8233, 0x8C38, + 0x43F0, 0x8233, 0x8C39, + 0x43F1, 0x8233, 0x8D30, + 0x43F2, 0x8233, 0x8D31, + 0x43F3, 0x8233, 0x8D32, + 0x43F4, 0x8233, 0x8D33, + 0x43F5, 0x8233, 0x8D34, + 0x43F6, 0x8233, 0x8D35, + 0x43F7, 0x8233, 0x8D36, + 0x43F8, 0x8233, 0x8D37, + 0x43F9, 0x8233, 0x8D38, + 0x43FA, 0x8233, 0x8D39, + 0x43FB, 0x8233, 0x8E30, + 0x43FC, 0x8233, 0x8E31, + 0x43FD, 0x8233, 0x8E32, + 0x43FE, 0x8233, 0x8E33, + 0x43FF, 0x8233, 0x8E34, + 0x4400, 0x8233, 0x8E35, + 0x4401, 0x8233, 0x8E36, + 0x4402, 0x8233, 0x8E37, + 0x4403, 0x8233, 0x8E38, + 0x4404, 0x8233, 0x8E39, + 0x4405, 0x8233, 0x8F30, + 0x4406, 0x8233, 0x8F31, + 0x4407, 0x8233, 0x8F32, + 0x4408, 0x8233, 0x8F33, + 0x4409, 0x8233, 0x8F34, + 0x440A, 0x8233, 0x8F35, + 0x440B, 0x8233, 0x8F36, + 0x440C, 0x8233, 0x8F37, + 0x440D, 0x8233, 0x8F38, + 0x440E, 0x8233, 0x8F39, + 0x440F, 0x8233, 0x9030, + 0x4410, 0x8233, 0x9031, + 0x4411, 0x8233, 0x9032, + 0x4412, 0x8233, 0x9033, + 0x4413, 0x8233, 0x9034, + 0x4414, 0x8233, 0x9035, + 0x4415, 0x8233, 0x9036, + 0x4416, 0x8233, 0x9037, + 0x4417, 0x8233, 0x9038, + 0x4418, 0x8233, 0x9039, + 0x4419, 0x8233, 0x9130, + 0x441A, 0x8233, 0x9131, + 0x441B, 0x8233, 0x9132, + 0x441C, 0x8233, 0x9133, + 0x441D, 0x8233, 0x9134, + 0x441E, 0x8233, 0x9135, + 0x441F, 0x8233, 0x9136, + 0x4420, 0x8233, 0x9137, + 0x4421, 0x8233, 0x9138, + 0x4422, 0x8233, 0x9139, + 0x4423, 0x8233, 0x9230, + 0x4424, 0x8233, 0x9231, + 0x4425, 0x8233, 0x9232, + 0x4426, 0x8233, 0x9233, + 0x4427, 0x8233, 0x9234, + 0x4428, 0x8233, 0x9235, + 0x4429, 0x8233, 0x9236, + 0x442A, 0x8233, 0x9237, + 0x442B, 0x8233, 0x9238, + 0x442C, 0x8233, 0x9239, + 0x442D, 0x8233, 0x9330, + 0x442E, 0x8233, 0x9331, + 0x442F, 0x8233, 0x9332, + 0x4430, 0x8233, 0x9333, + 0x4431, 0x8233, 0x9334, + 0x4432, 0x8233, 0x9335, + 0x4433, 0x8233, 0x9336, + 0x4434, 0x8233, 0x9337, + 0x4435, 0x8233, 0x9338, + 0x4436, 0x8233, 0x9339, + 0x4437, 0x8233, 0x9430, + 0x4438, 0x8233, 0x9431, + 0x4439, 0x8233, 0x9432, + 0x443A, 0x8233, 0x9433, + 0x443B, 0x8233, 0x9434, + 0x443C, 0x8233, 0x9435, + 0x443D, 0x8233, 0x9436, + 0x443E, 0x8233, 0x9437, + 0x443F, 0x8233, 0x9438, + 0x4440, 0x8233, 0x9439, + 0x4441, 0x8233, 0x9530, + 0x4442, 0x8233, 0x9531, + 0x4443, 0x8233, 0x9532, + 0x4444, 0x8233, 0x9533, + 0x4445, 0x8233, 0x9534, + 0x4446, 0x8233, 0x9535, + 0x4447, 0x8233, 0x9536, + 0x4448, 0x8233, 0x9537, + 0x4449, 0x8233, 0x9538, + 0x444A, 0x8233, 0x9539, + 0x444B, 0x8233, 0x9630, + 0x444C, 0x8233, 0x9631, + 0x444D, 0x8233, 0x9632, + 0x444E, 0x8233, 0x9633, + 0x444F, 0x8233, 0x9634, + 0x4450, 0x8233, 0x9635, + 0x4451, 0x8233, 0x9636, + 0x4452, 0x8233, 0x9637, + 0x4453, 0x8233, 0x9638, + 0x4454, 0x8233, 0x9639, + 0x4455, 0x8233, 0x9730, + 0x4456, 0x8233, 0x9731, + 0x4457, 0x8233, 0x9732, + 0x4458, 0x8233, 0x9733, + 0x4459, 0x8233, 0x9734, + 0x445A, 0x8233, 0x9735, + 0x445B, 0x8233, 0x9736, + 0x445C, 0x8233, 0x9737, + 0x445D, 0x8233, 0x9738, + 0x445E, 0x8233, 0x9739, + 0x445F, 0x8233, 0x9830, + 0x4460, 0x8233, 0x9831, + 0x4461, 0x8233, 0x9832, + 0x4462, 0x8233, 0x9833, + 0x4463, 0x8233, 0x9834, + 0x4464, 0x8233, 0x9835, + 0x4465, 0x8233, 0x9836, + 0x4466, 0x8233, 0x9837, + 0x4467, 0x8233, 0x9838, + 0x4468, 0x8233, 0x9839, + 0x4469, 0x8233, 0x9930, + 0x446A, 0x8233, 0x9931, + 0x446B, 0x8233, 0x9932, + 0x446C, 0x8233, 0x9933, + 0x446D, 0x8233, 0x9934, + 0x446E, 0x8233, 0x9935, + 0x446F, 0x8233, 0x9936, + 0x4470, 0x8233, 0x9937, + 0x4471, 0x8233, 0x9938, + 0x4472, 0x8233, 0x9939, + 0x4473, 0x8233, 0x9A30, + 0x4474, 0x8233, 0x9A31, + 0x4475, 0x8233, 0x9A32, + 0x4476, 0x8233, 0x9A33, + 0x4477, 0x8233, 0x9A34, + 0x4478, 0x8233, 0x9A35, + 0x4479, 0x8233, 0x9A36, + 0x447A, 0x8233, 0x9A37, + 0x447B, 0x8233, 0x9A38, + 0x447C, 0x8233, 0x9A39, + 0x447D, 0x8233, 0x9B30, + 0x447E, 0x8233, 0x9B31, + 0x447F, 0x8233, 0x9B32, + 0x4480, 0x8233, 0x9B33, + 0x4481, 0x8233, 0x9B34, + 0x4482, 0x8233, 0x9B35, + 0x4483, 0x8233, 0x9B36, + 0x4484, 0x8233, 0x9B37, + 0x4485, 0x8233, 0x9B38, + 0x4486, 0x8233, 0x9B39, + 0x4487, 0x8233, 0x9C30, + 0x4488, 0x8233, 0x9C31, + 0x4489, 0x8233, 0x9C32, + 0x448A, 0x8233, 0x9C33, + 0x448B, 0x8233, 0x9C34, + 0x448C, 0x8233, 0x9C35, + 0x448D, 0x8233, 0x9C36, + 0x448E, 0x8233, 0x9C37, + 0x448F, 0x8233, 0x9C38, + 0x4490, 0x8233, 0x9C39, + 0x4491, 0x8233, 0x9D30, + 0x4492, 0x8233, 0x9D31, + 0x4493, 0x8233, 0x9D32, + 0x4494, 0x8233, 0x9D33, + 0x4495, 0x8233, 0x9D34, + 0x4496, 0x8233, 0x9D35, + 0x4497, 0x8233, 0x9D36, + 0x4498, 0x8233, 0x9D37, + 0x4499, 0x8233, 0x9D38, + 0x449A, 0x8233, 0x9D39, + 0x449B, 0x8233, 0x9E30, + 0x449C, 0x8233, 0x9E31, + 0x449D, 0x8233, 0x9E32, + 0x449E, 0x8233, 0x9E33, + 0x449F, 0x8233, 0x9E34, + 0x44A0, 0x8233, 0x9E35, + 0x44A1, 0x8233, 0x9E36, + 0x44A2, 0x8233, 0x9E37, + 0x44A3, 0x8233, 0x9E38, + 0x44A4, 0x8233, 0x9E39, + 0x44A5, 0x8233, 0x9F30, + 0x44A6, 0x8233, 0x9F31, + 0x44A7, 0x8233, 0x9F32, + 0x44A8, 0x8233, 0x9F33, + 0x44A9, 0x8233, 0x9F34, + 0x44AA, 0x8233, 0x9F35, + 0x44AB, 0x8233, 0x9F36, + 0x44AC, 0x8233, 0x9F37, + 0x44AD, 0x8233, 0x9F38, + 0x44AE, 0x8233, 0x9F39, + 0x44AF, 0x8233, 0xA030, + 0x44B0, 0x8233, 0xA031, + 0x44B1, 0x8233, 0xA032, + 0x44B2, 0x8233, 0xA033, + 0x44B3, 0x8233, 0xA034, + 0x44B4, 0x8233, 0xA035, + 0x44B5, 0x8233, 0xA036, + 0x44B6, 0x8233, 0xA037, + 0x44B7, 0x8233, 0xA038, + 0x44B8, 0x8233, 0xA039, + 0x44B9, 0x8233, 0xA130, + 0x44BA, 0x8233, 0xA131, + 0x44BB, 0x8233, 0xA132, + 0x44BC, 0x8233, 0xA133, + 0x44BD, 0x8233, 0xA134, + 0x44BE, 0x8233, 0xA135, + 0x44BF, 0x8233, 0xA136, + 0x44C0, 0x8233, 0xA137, + 0x44C1, 0x8233, 0xA138, + 0x44C2, 0x8233, 0xA139, + 0x44C3, 0x8233, 0xA230, + 0x44C4, 0x8233, 0xA231, + 0x44C5, 0x8233, 0xA232, + 0x44C6, 0x8233, 0xA233, + 0x44C7, 0x8233, 0xA234, + 0x44C8, 0x8233, 0xA235, + 0x44C9, 0x8233, 0xA236, + 0x44CA, 0x8233, 0xA237, + 0x44CB, 0x8233, 0xA238, + 0x44CC, 0x8233, 0xA239, + 0x44CD, 0x8233, 0xA330, + 0x44CE, 0x8233, 0xA331, + 0x44CF, 0x8233, 0xA332, + 0x44D0, 0x8233, 0xA333, + 0x44D1, 0x8233, 0xA334, + 0x44D2, 0x8233, 0xA335, + 0x44D3, 0x8233, 0xA336, + 0x44D4, 0x8233, 0xA337, + 0x44D5, 0x8233, 0xA338, + 0x464D, 0x8233, 0xC932, + 0x464E, 0x8233, 0xC933, + 0x464F, 0x8233, 0xC934, + 0x4650, 0x8233, 0xC935, + 0x4651, 0x8233, 0xC936, + 0x4652, 0x8233, 0xC937, + 0x4653, 0x8233, 0xC938, + 0x4654, 0x8233, 0xC939, + 0x4655, 0x8233, 0xCA30, + 0x4656, 0x8233, 0xCA31, + 0x4657, 0x8233, 0xCA32, + 0x4658, 0x8233, 0xCA33, + 0x4659, 0x8233, 0xCA34, + 0x465A, 0x8233, 0xCA35, + 0x465B, 0x8233, 0xCA36, + 0x465C, 0x8233, 0xCA37, + 0x465D, 0x8233, 0xCA38, + 0x465E, 0x8233, 0xCA39, + 0x465F, 0x8233, 0xCB30, + 0x4660, 0x8233, 0xCB31, + 0x4662, 0x8233, 0xCB32, + 0x4663, 0x8233, 0xCB33, + 0x4664, 0x8233, 0xCB34, + 0x4665, 0x8233, 0xCB35, + 0x4666, 0x8233, 0xCB36, + 0x4667, 0x8233, 0xCB37, + 0x4668, 0x8233, 0xCB38, + 0x4669, 0x8233, 0xCB39, + 0x466A, 0x8233, 0xCC30, + 0x466B, 0x8233, 0xCC31, + 0x466C, 0x8233, 0xCC32, + 0x466D, 0x8233, 0xCC33, + 0x466E, 0x8233, 0xCC34, + 0x466F, 0x8233, 0xCC35, + 0x4670, 0x8233, 0xCC36, + 0x4671, 0x8233, 0xCC37, + 0x4672, 0x8233, 0xCC38, + 0x4673, 0x8233, 0xCC39, + 0x4674, 0x8233, 0xCD30, + 0x4675, 0x8233, 0xCD31, + 0x4676, 0x8233, 0xCD32, + 0x4677, 0x8233, 0xCD33, + 0x4678, 0x8233, 0xCD34, + 0x4679, 0x8233, 0xCD35, + 0x467A, 0x8233, 0xCD36, + 0x467B, 0x8233, 0xCD37, + 0x467C, 0x8233, 0xCD38, + 0x467D, 0x8233, 0xCD39, + 0x467E, 0x8233, 0xCE30, + 0x467F, 0x8233, 0xCE31, + 0x4680, 0x8233, 0xCE32, + 0x4681, 0x8233, 0xCE33, + 0x4682, 0x8233, 0xCE34, + 0x4683, 0x8233, 0xCE35, + 0x4684, 0x8233, 0xCE36, + 0x4685, 0x8233, 0xCE37, + 0x4686, 0x8233, 0xCE38, + 0x4687, 0x8233, 0xCE39, + 0x4688, 0x8233, 0xCF30, + 0x4689, 0x8233, 0xCF31, + 0x468A, 0x8233, 0xCF32, + 0x468B, 0x8233, 0xCF33, + 0x468C, 0x8233, 0xCF34, + 0x468D, 0x8233, 0xCF35, + 0x468E, 0x8233, 0xCF36, + 0x468F, 0x8233, 0xCF37, + 0x4690, 0x8233, 0xCF38, + 0x4691, 0x8233, 0xCF39, + 0x4692, 0x8233, 0xD030, + 0x4693, 0x8233, 0xD031, + 0x4694, 0x8233, 0xD032, + 0x4695, 0x8233, 0xD033, + 0x4696, 0x8233, 0xD034, + 0x4697, 0x8233, 0xD035, + 0x4698, 0x8233, 0xD036, + 0x4699, 0x8233, 0xD037, + 0x469A, 0x8233, 0xD038, + 0x469B, 0x8233, 0xD039, + 0x469C, 0x8233, 0xD130, + 0x469D, 0x8233, 0xD131, + 0x469E, 0x8233, 0xD132, + 0x469F, 0x8233, 0xD133, + 0x46A0, 0x8233, 0xD134, + 0x46A1, 0x8233, 0xD135, + 0x46A2, 0x8233, 0xD136, + 0x46A3, 0x8233, 0xD137, + 0x46A4, 0x8233, 0xD138, + 0x46A5, 0x8233, 0xD139, + 0x46A6, 0x8233, 0xD230, + 0x46A7, 0x8233, 0xD231, + 0x46A8, 0x8233, 0xD232, + 0x46A9, 0x8233, 0xD233, + 0x46AA, 0x8233, 0xD234, + 0x46AB, 0x8233, 0xD235, + 0x46AC, 0x8233, 0xD236, + 0x46AD, 0x8233, 0xD237, + 0x46AE, 0x8233, 0xD238, + 0x46AF, 0x8233, 0xD239, + 0x46B0, 0x8233, 0xD330, + 0x46B1, 0x8233, 0xD331, + 0x46B2, 0x8233, 0xD332, + 0x46B3, 0x8233, 0xD333, + 0x46B4, 0x8233, 0xD334, + 0x46B5, 0x8233, 0xD335, + 0x46B6, 0x8233, 0xD336, + 0x46B7, 0x8233, 0xD337, + 0x46B8, 0x8233, 0xD338, + 0x46B9, 0x8233, 0xD339, + 0x46BA, 0x8233, 0xD430, + 0x46BB, 0x8233, 0xD431, + 0x46BC, 0x8233, 0xD432, + 0x46BD, 0x8233, 0xD433, + 0x46BE, 0x8233, 0xD434, + 0x46BF, 0x8233, 0xD435, + 0x46C0, 0x8233, 0xD436, + 0x46C1, 0x8233, 0xD437, + 0x46C2, 0x8233, 0xD438, + 0x46C3, 0x8233, 0xD439, + 0x46C4, 0x8233, 0xD530, + 0x46C5, 0x8233, 0xD531, + 0x46C6, 0x8233, 0xD532, + 0x46C7, 0x8233, 0xD533, + 0x46C8, 0x8233, 0xD534, + 0x46C9, 0x8233, 0xD535, + 0x46CA, 0x8233, 0xD536, + 0x46CB, 0x8233, 0xD537, + 0x46CC, 0x8233, 0xD538, + 0x46CD, 0x8233, 0xD539, + 0x46CE, 0x8233, 0xD630, + 0x46CF, 0x8233, 0xD631, + 0x46D0, 0x8233, 0xD632, + 0x46D1, 0x8233, 0xD633, + 0x46D2, 0x8233, 0xD634, + 0x46D3, 0x8233, 0xD635, + 0x46D4, 0x8233, 0xD636, + 0x46D5, 0x8233, 0xD637, + 0x46D6, 0x8233, 0xD638, + 0x46D7, 0x8233, 0xD639, + 0x46D8, 0x8233, 0xD730, + 0x46D9, 0x8233, 0xD731, + 0x46DA, 0x8233, 0xD732, + 0x46DB, 0x8233, 0xD733, + 0x46DC, 0x8233, 0xD734, + 0x46DD, 0x8233, 0xD735, + 0x46DE, 0x8233, 0xD736, + 0x46DF, 0x8233, 0xD737, + 0x46E0, 0x8233, 0xD738, + 0x46E1, 0x8233, 0xD739, + 0x46E2, 0x8233, 0xD830, + 0x46E3, 0x8233, 0xD831, + 0x46E4, 0x8233, 0xD832, + 0x46E5, 0x8233, 0xD833, + 0x46E6, 0x8233, 0xD834, + 0x46E7, 0x8233, 0xD835, + 0x46E8, 0x8233, 0xD836, + 0x46E9, 0x8233, 0xD837, + 0x46EA, 0x8233, 0xD838, + 0x46EB, 0x8233, 0xD839, + 0x46EC, 0x8233, 0xD930, + 0x46ED, 0x8233, 0xD931, + 0x46EE, 0x8233, 0xD932, + 0x46EF, 0x8233, 0xD933, + 0x46F0, 0x8233, 0xD934, + 0x46F1, 0x8233, 0xD935, + 0x46F2, 0x8233, 0xD936, + 0x46F3, 0x8233, 0xD937, + 0x46F4, 0x8233, 0xD938, + 0x46F5, 0x8233, 0xD939, + 0x46F6, 0x8233, 0xDA30, + 0x46F7, 0x8233, 0xDA31, + 0x46F8, 0x8233, 0xDA32, + 0x46F9, 0x8233, 0xDA33, + 0x46FA, 0x8233, 0xDA34, + 0x46FB, 0x8233, 0xDA35, + 0x46FC, 0x8233, 0xDA36, + 0x46FD, 0x8233, 0xDA37, + 0x46FE, 0x8233, 0xDA38, + 0x46FF, 0x8233, 0xDA39, + 0x4700, 0x8233, 0xDB30, + 0x4701, 0x8233, 0xDB31, + 0x4702, 0x8233, 0xDB32, + 0x4703, 0x8233, 0xDB33, + 0x4704, 0x8233, 0xDB34, + 0x4705, 0x8233, 0xDB35, + 0x4706, 0x8233, 0xDB36, + 0x4707, 0x8233, 0xDB37, + 0x4708, 0x8233, 0xDB38, + 0x4709, 0x8233, 0xDB39, + 0x470A, 0x8233, 0xDC30, + 0x470B, 0x8233, 0xDC31, + 0x470C, 0x8233, 0xDC32, + 0x470D, 0x8233, 0xDC33, + 0x470E, 0x8233, 0xDC34, + 0x470F, 0x8233, 0xDC35, + 0x4710, 0x8233, 0xDC36, + 0x4711, 0x8233, 0xDC37, + 0x4712, 0x8233, 0xDC38, + 0x4713, 0x8233, 0xDC39, + 0x4714, 0x8233, 0xDD30, + 0x4715, 0x8233, 0xDD31, + 0x4716, 0x8233, 0xDD32, + 0x4717, 0x8233, 0xDD33, + 0x4718, 0x8233, 0xDD34, + 0x4719, 0x8233, 0xDD35, + 0x471A, 0x8233, 0xDD36, + 0x471B, 0x8233, 0xDD37, + 0x471C, 0x8233, 0xDD38, + 0x471D, 0x8233, 0xDD39, + 0x471E, 0x8233, 0xDE30, + 0x471F, 0x8233, 0xDE31, + 0x4720, 0x8233, 0xDE32, + 0x4721, 0x8233, 0xDE33, + 0x4722, 0x8233, 0xDE34, + 0x4724, 0x8233, 0xDE35, + 0x4725, 0x8233, 0xDE36, + 0x4726, 0x8233, 0xDE37, + 0x4727, 0x8233, 0xDE38, + 0x4728, 0x8233, 0xDE39, + 0x472A, 0x8233, 0xDF30, + 0x472B, 0x8233, 0xDF31, + 0x472C, 0x8233, 0xDF32, + 0x472D, 0x8233, 0xDF33, + 0x472E, 0x8233, 0xDF34, + 0x472F, 0x8233, 0xDF35, + 0x4730, 0x8233, 0xDF36, + 0x4731, 0x8233, 0xDF37, + 0x4732, 0x8233, 0xDF38, + 0x4733, 0x8233, 0xDF39, + 0x4734, 0x8233, 0xE030, + 0x4735, 0x8233, 0xE031, + 0x4736, 0x8233, 0xE032, + 0x4737, 0x8233, 0xE033, + 0x4738, 0x8233, 0xE034, + 0x4739, 0x8233, 0xE035, + 0x473A, 0x8233, 0xE036, + 0x473B, 0x8233, 0xE037, + 0x473C, 0x8233, 0xE038, + 0x473D, 0x8233, 0xE039, + 0x473E, 0x8233, 0xE130, + 0x473F, 0x8233, 0xE131, + 0x4740, 0x8233, 0xE132, + 0x4741, 0x8233, 0xE133, + 0x4742, 0x8233, 0xE134, + 0x4743, 0x8233, 0xE135, + 0x4744, 0x8233, 0xE136, + 0x4745, 0x8233, 0xE137, + 0x4746, 0x8233, 0xE138, + 0x4747, 0x8233, 0xE139, + 0x4748, 0x8233, 0xE230, + 0x4749, 0x8233, 0xE231, + 0x474A, 0x8233, 0xE232, + 0x474B, 0x8233, 0xE233, + 0x474C, 0x8233, 0xE234, + 0x474D, 0x8233, 0xE235, + 0x474E, 0x8233, 0xE236, + 0x474F, 0x8233, 0xE237, + 0x4750, 0x8233, 0xE238, + 0x4751, 0x8233, 0xE239, + 0x4752, 0x8233, 0xE330, + 0x4753, 0x8233, 0xE331, + 0x4754, 0x8233, 0xE332, + 0x4755, 0x8233, 0xE333, + 0x4756, 0x8233, 0xE334, + 0x4757, 0x8233, 0xE335, + 0x4758, 0x8233, 0xE336, + 0x4759, 0x8233, 0xE337, + 0x475A, 0x8233, 0xE338, + 0x475B, 0x8233, 0xE339, + 0x475C, 0x8233, 0xE430, + 0x475D, 0x8233, 0xE431, + 0x475E, 0x8233, 0xE432, + 0x475F, 0x8233, 0xE433, + 0x4760, 0x8233, 0xE434, + 0x4761, 0x8233, 0xE435, + 0x4762, 0x8233, 0xE436, + 0x4763, 0x8233, 0xE437, + 0x4764, 0x8233, 0xE438, + 0x4765, 0x8233, 0xE439, + 0x4766, 0x8233, 0xE530, + 0x4767, 0x8233, 0xE531, + 0x4768, 0x8233, 0xE532, + 0x4769, 0x8233, 0xE533, + 0x476A, 0x8233, 0xE534, + 0x476B, 0x8233, 0xE535, + 0x476C, 0x8233, 0xE536, + 0x476D, 0x8233, 0xE537, + 0x476E, 0x8233, 0xE538, + 0x476F, 0x8233, 0xE539, + 0x4770, 0x8233, 0xE630, + 0x4771, 0x8233, 0xE631, + 0x4772, 0x8233, 0xE632, + 0x4773, 0x8233, 0xE633, + 0x4774, 0x8233, 0xE634, + 0x4775, 0x8233, 0xE635, + 0x4776, 0x8233, 0xE636, + 0x4777, 0x8233, 0xE637, + 0x4778, 0x8233, 0xE638, + 0x4779, 0x8233, 0xE639, + 0x477A, 0x8233, 0xE730, + 0x477B, 0x8233, 0xE731, + 0x477D, 0x8233, 0xE732, + 0x477E, 0x8233, 0xE733, + 0x477F, 0x8233, 0xE734, + 0x4780, 0x8233, 0xE735, + 0x4781, 0x8233, 0xE736, + 0x4782, 0x8233, 0xE737, + 0x4783, 0x8233, 0xE738, + 0x4784, 0x8233, 0xE739, + 0x4785, 0x8233, 0xE830, + 0x4786, 0x8233, 0xE831, + 0x4787, 0x8233, 0xE832, + 0x4788, 0x8233, 0xE833, + 0x4789, 0x8233, 0xE834, + 0x478A, 0x8233, 0xE835, + 0x478B, 0x8233, 0xE836, + 0x478C, 0x8233, 0xE837, + 0x4948, 0x8234, 0x9639, + 0x4949, 0x8234, 0x9730, + 0x494A, 0x8234, 0x9731, + 0x494B, 0x8234, 0x9732, + 0x494C, 0x8234, 0x9733, + 0x494D, 0x8234, 0x9734, + 0x494E, 0x8234, 0x9735, + 0x494F, 0x8234, 0x9736, + 0x4950, 0x8234, 0x9737, + 0x4951, 0x8234, 0x9738, + 0x4952, 0x8234, 0x9739, + 0x4953, 0x8234, 0x9830, + 0x4954, 0x8234, 0x9831, + 0x4955, 0x8234, 0x9832, + 0x4956, 0x8234, 0x9833, + 0x4957, 0x8234, 0x9834, + 0x4958, 0x8234, 0x9835, + 0x4959, 0x8234, 0x9836, + 0x495A, 0x8234, 0x9837, + 0x495B, 0x8234, 0x9838, + 0x495C, 0x8234, 0x9839, + 0x495D, 0x8234, 0x9930, + 0x495E, 0x8234, 0x9931, + 0x495F, 0x8234, 0x9932, + 0x4960, 0x8234, 0x9933, + 0x4961, 0x8234, 0x9934, + 0x4962, 0x8234, 0x9935, + 0x4963, 0x8234, 0x9936, + 0x4964, 0x8234, 0x9937, + 0x4965, 0x8234, 0x9938, + 0x4966, 0x8234, 0x9939, + 0x4967, 0x8234, 0x9A30, + 0x4968, 0x8234, 0x9A31, + 0x4969, 0x8234, 0x9A32, + 0x496A, 0x8234, 0x9A33, + 0x496B, 0x8234, 0x9A34, + 0x496C, 0x8234, 0x9A35, + 0x496D, 0x8234, 0x9A36, + 0x496E, 0x8234, 0x9A37, + 0x496F, 0x8234, 0x9A38, + 0x4970, 0x8234, 0x9A39, + 0x4971, 0x8234, 0x9B30, + 0x4972, 0x8234, 0x9B31, + 0x4973, 0x8234, 0x9B32, + 0x4974, 0x8234, 0x9B33, + 0x4975, 0x8234, 0x9B34, + 0x4976, 0x8234, 0x9B35, + 0x4977, 0x8234, 0x9B36, + 0x4978, 0x8234, 0x9B37, + 0x4979, 0x8234, 0x9B38, + 0x497B, 0x8234, 0x9B39, + 0x497C, 0x8234, 0x9C30, + 0x497E, 0x8234, 0x9C31, + 0x497F, 0x8234, 0x9C32, + 0x4980, 0x8234, 0x9C33, + 0x4981, 0x8234, 0x9C34, + 0x4984, 0x8234, 0x9C35, + 0x4987, 0x8234, 0x9C36, + 0x4988, 0x8234, 0x9C37, + 0x4989, 0x8234, 0x9C38, + 0x498A, 0x8234, 0x9C39, + 0x498B, 0x8234, 0x9D30, + 0x498C, 0x8234, 0x9D31, + 0x498D, 0x8234, 0x9D32, + 0x498E, 0x8234, 0x9D33, + 0x498F, 0x8234, 0x9D34, + 0x4990, 0x8234, 0x9D35, + 0x4991, 0x8234, 0x9D36, + 0x4992, 0x8234, 0x9D37, + 0x4993, 0x8234, 0x9D38, + 0x4994, 0x8234, 0x9D39, + 0x4995, 0x8234, 0x9E30, + 0x4996, 0x8234, 0x9E31, + 0x4997, 0x8234, 0x9E32, + 0x4998, 0x8234, 0x9E33, + 0x4999, 0x8234, 0x9E34, + 0x499A, 0x8234, 0x9E35, + 0x499C, 0x8234, 0x9E36, + 0x499D, 0x8234, 0x9E37, + 0x499E, 0x8234, 0x9E38, + 0x49A0, 0x8234, 0x9E39, + 0x49A1, 0x8234, 0x9F30, + 0x49A2, 0x8234, 0x9F31, + 0x49A3, 0x8234, 0x9F32, + 0x49A4, 0x8234, 0x9F33, + 0x49A5, 0x8234, 0x9F34, + 0x49A6, 0x8234, 0x9F35, + 0x49A7, 0x8234, 0x9F36, + 0x49A8, 0x8234, 0x9F37, + 0x49A9, 0x8234, 0x9F38, + 0x49AA, 0x8234, 0x9F39, + 0x49AB, 0x8234, 0xA030, + 0x49AC, 0x8234, 0xA031, + 0x49AD, 0x8234, 0xA032, + 0x49AE, 0x8234, 0xA033, + 0x49AF, 0x8234, 0xA034, + 0x49B0, 0x8234, 0xA035, + 0x49B1, 0x8234, 0xA036, + 0x49B2, 0x8234, 0xA037, + 0x49B3, 0x8234, 0xA038, + 0x49B4, 0x8234, 0xA039, + 0x49B5, 0x8234, 0xA130, + 0x4C78, 0x8234, 0xE734, + 0x4C79, 0x8234, 0xE735, + 0x4C7A, 0x8234, 0xE736, + 0x4C7B, 0x8234, 0xE737, + 0x4C7C, 0x8234, 0xE738, + 0x4C7D, 0x8234, 0xE739, + 0x4C7E, 0x8234, 0xE830, + 0x4C7F, 0x8234, 0xE831, + 0x4C80, 0x8234, 0xE832, + 0x4C81, 0x8234, 0xE833, + 0x4C82, 0x8234, 0xE834, + 0x4C83, 0x8234, 0xE835, + 0x4C84, 0x8234, 0xE836, + 0x4C85, 0x8234, 0xE837, + 0x4C86, 0x8234, 0xE838, + 0x4C87, 0x8234, 0xE839, + 0x4C88, 0x8234, 0xE930, + 0x4C89, 0x8234, 0xE931, + 0x4C8A, 0x8234, 0xE932, + 0x4C8B, 0x8234, 0xE933, + 0x4C8C, 0x8234, 0xE934, + 0x4C8D, 0x8234, 0xE935, + 0x4C8E, 0x8234, 0xE936, + 0x4C8F, 0x8234, 0xE937, + 0x4C90, 0x8234, 0xE938, + 0x4C91, 0x8234, 0xE939, + 0x4C92, 0x8234, 0xEA30, + 0x4C93, 0x8234, 0xEA31, + 0x4C94, 0x8234, 0xEA32, + 0x4C95, 0x8234, 0xEA33, + 0x4C96, 0x8234, 0xEA34, + 0x4C97, 0x8234, 0xEA35, + 0x4C98, 0x8234, 0xEA36, + 0x4C99, 0x8234, 0xEA37, + 0x4C9A, 0x8234, 0xEA38, + 0x4C9B, 0x8234, 0xEA39, + 0x4C9C, 0x8234, 0xEB30, + 0x4C9D, 0x8234, 0xEB31, + 0x4C9E, 0x8234, 0xEB32, + 0x4CA4, 0x8234, 0xEB33, + 0x4CA5, 0x8234, 0xEB34, + 0x4CA6, 0x8234, 0xEB35, + 0x4CA7, 0x8234, 0xEB36, + 0x4CA8, 0x8234, 0xEB37, + 0x4CA9, 0x8234, 0xEB38, + 0x4CAA, 0x8234, 0xEB39, + 0x4CAB, 0x8234, 0xEC30, + 0x4CAC, 0x8234, 0xEC31, + 0x4CAD, 0x8234, 0xEC32, + 0x4CAE, 0x8234, 0xEC33, + 0x4CAF, 0x8234, 0xEC34, + 0x4CB0, 0x8234, 0xEC35, + 0x4CB1, 0x8234, 0xEC36, + 0x4CB2, 0x8234, 0xEC37, + 0x4CB3, 0x8234, 0xEC38, + 0x4CB4, 0x8234, 0xEC39, + 0x4CB5, 0x8234, 0xED30, + 0x4CB6, 0x8234, 0xED31, + 0x4CB7, 0x8234, 0xED32, + 0x4CB8, 0x8234, 0xED33, + 0x4CB9, 0x8234, 0xED34, + 0x4CBA, 0x8234, 0xED35, + 0x4CBB, 0x8234, 0xED36, + 0x4CBC, 0x8234, 0xED37, + 0x4CBD, 0x8234, 0xED38, + 0x4CBE, 0x8234, 0xED39, + 0x4CBF, 0x8234, 0xEE30, + 0x4CC0, 0x8234, 0xEE31, + 0x4CC1, 0x8234, 0xEE32, + 0x4CC2, 0x8234, 0xEE33, + 0x4CC3, 0x8234, 0xEE34, + 0x4CC4, 0x8234, 0xEE35, + 0x4CC5, 0x8234, 0xEE36, + 0x4CC6, 0x8234, 0xEE37, + 0x4CC7, 0x8234, 0xEE38, + 0x4CC8, 0x8234, 0xEE39, + 0x4CC9, 0x8234, 0xEF30, + 0x4CCA, 0x8234, 0xEF31, + 0x4CCB, 0x8234, 0xEF32, + 0x4CCC, 0x8234, 0xEF33, + 0x4CCD, 0x8234, 0xEF34, + 0x4CCE, 0x8234, 0xEF35, + 0x4CCF, 0x8234, 0xEF36, + 0x4CD0, 0x8234, 0xEF37, + 0x4CD1, 0x8234, 0xEF38, + 0x4CD2, 0x8234, 0xEF39, + 0x4CD3, 0x8234, 0xF030, + 0x4CD4, 0x8234, 0xF031, + 0x4CD5, 0x8234, 0xF032, + 0x4CD6, 0x8234, 0xF033, + 0x4CD7, 0x8234, 0xF034, + 0x4CD8, 0x8234, 0xF035, + 0x4CD9, 0x8234, 0xF036, + 0x4CDA, 0x8234, 0xF037, + 0x4CDB, 0x8234, 0xF038, + 0x4CDC, 0x8234, 0xF039, + 0x4CDD, 0x8234, 0xF130, + 0x4CDE, 0x8234, 0xF131, + 0x4CDF, 0x8234, 0xF132, + 0x4CE0, 0x8234, 0xF133, + 0x4CE1, 0x8234, 0xF134, + 0x4CE2, 0x8234, 0xF135, + 0x4CE3, 0x8234, 0xF136, + 0x4CE4, 0x8234, 0xF137, + 0x4CE5, 0x8234, 0xF138, + 0x4CE6, 0x8234, 0xF139, + 0x4CE7, 0x8234, 0xF230, + 0x4CE8, 0x8234, 0xF231, + 0x4CE9, 0x8234, 0xF232, + 0x4CEA, 0x8234, 0xF233, + 0x4CEB, 0x8234, 0xF234, + 0x4CEC, 0x8234, 0xF235, + 0x4CED, 0x8234, 0xF236, + 0x4CEE, 0x8234, 0xF237, + 0x4CEF, 0x8234, 0xF238, + 0x4CF0, 0x8234, 0xF239, + 0x4CF1, 0x8234, 0xF330, + 0x4CF2, 0x8234, 0xF331, + 0x4CF3, 0x8234, 0xF332, + 0x4CF4, 0x8234, 0xF333, + 0x4CF5, 0x8234, 0xF334, + 0x4CF6, 0x8234, 0xF335, + 0x4CF7, 0x8234, 0xF336, + 0x4CF8, 0x8234, 0xF337, + 0x4CF9, 0x8234, 0xF338, + 0x4CFA, 0x8234, 0xF339, + 0x4CFB, 0x8234, 0xF430, + 0x4CFC, 0x8234, 0xF431, + 0x4CFD, 0x8234, 0xF432, + 0x4CFE, 0x8234, 0xF433, + 0x4CFF, 0x8234, 0xF434, + 0x4D00, 0x8234, 0xF435, + 0x4D01, 0x8234, 0xF436, + 0x4D02, 0x8234, 0xF437, + 0x4D03, 0x8234, 0xF438, + 0x4D04, 0x8234, 0xF439, + 0x4D05, 0x8234, 0xF530, + 0x4D06, 0x8234, 0xF531, + 0x4D07, 0x8234, 0xF532, + 0x4D08, 0x8234, 0xF533, + 0x4D09, 0x8234, 0xF534, + 0x4D0A, 0x8234, 0xF535, + 0x4D0B, 0x8234, 0xF536, + 0x4D0C, 0x8234, 0xF537, + 0x4D0D, 0x8234, 0xF538, + 0x4D0E, 0x8234, 0xF539, + 0x4D0F, 0x8234, 0xF630, + 0x4D10, 0x8234, 0xF631, + 0x4D11, 0x8234, 0xF632, + 0x4D12, 0x8234, 0xF633, + 0x4D1A, 0x8234, 0xF634, + 0x4D1B, 0x8234, 0xF635, + 0x4D1C, 0x8234, 0xF636, + 0x4D1D, 0x8234, 0xF637, + 0x4D1E, 0x8234, 0xF638, + 0x4D1F, 0x8234, 0xF639, + 0x4D20, 0x8234, 0xF730, + 0x4D21, 0x8234, 0xF731, + 0x4D22, 0x8234, 0xF732, + 0x4D23, 0x8234, 0xF733, + 0x4D24, 0x8234, 0xF734, + 0x4D25, 0x8234, 0xF735, + 0x4D26, 0x8234, 0xF736, + 0x4D27, 0x8234, 0xF737, + 0x4D28, 0x8234, 0xF738, + 0x4D29, 0x8234, 0xF739, + 0x4D2A, 0x8234, 0xF830, + 0x4D2B, 0x8234, 0xF831, + 0x4D2C, 0x8234, 0xF832, + 0x4D2D, 0x8234, 0xF833, + 0x4D2E, 0x8234, 0xF834, + 0x4D2F, 0x8234, 0xF835, + 0x4D30, 0x8234, 0xF836, + 0x4D31, 0x8234, 0xF837, + 0x4D32, 0x8234, 0xF838, + 0x4D33, 0x8234, 0xF839, + 0x4D34, 0x8234, 0xF930, + 0x4D35, 0x8234, 0xF931, + 0x4D36, 0x8234, 0xF932, + 0x4D37, 0x8234, 0xF933, + 0x4D38, 0x8234, 0xF934, + 0x4D39, 0x8234, 0xF935, + 0x4D3A, 0x8234, 0xF936, + 0x4D3B, 0x8234, 0xF937, + 0x4D3C, 0x8234, 0xF938, + 0x4D3D, 0x8234, 0xF939, + 0x4D3E, 0x8234, 0xFA30, + 0x4D3F, 0x8234, 0xFA31, + 0x4D40, 0x8234, 0xFA32, + 0x4D41, 0x8234, 0xFA33, + 0x4D42, 0x8234, 0xFA34, + 0x4D43, 0x8234, 0xFA35, + 0x4D44, 0x8234, 0xFA36, + 0x4D45, 0x8234, 0xFA37, + 0x4D46, 0x8234, 0xFA38, + 0x4D47, 0x8234, 0xFA39, + 0x4D48, 0x8234, 0xFB30, + 0x4D49, 0x8234, 0xFB31, + 0x4D4A, 0x8234, 0xFB32, + 0x4D4B, 0x8234, 0xFB33, + 0x4D4C, 0x8234, 0xFB34, + 0x4D4D, 0x8234, 0xFB35, + 0x4D4E, 0x8234, 0xFB36, + 0x4D4F, 0x8234, 0xFB37, + 0x4D50, 0x8234, 0xFB38, + 0x4D51, 0x8234, 0xFB39, + 0x4D52, 0x8234, 0xFC30, + 0x4D53, 0x8234, 0xFC31, + 0x4D54, 0x8234, 0xFC32, + 0x4D55, 0x8234, 0xFC33, + 0x4D56, 0x8234, 0xFC34, + 0x4D57, 0x8234, 0xFC35, + 0x4D58, 0x8234, 0xFC36, + 0x4D59, 0x8234, 0xFC37, + 0x4D5A, 0x8234, 0xFC38, + 0x4D5B, 0x8234, 0xFC39, + 0x4D5C, 0x8234, 0xFD30, + 0x4D5D, 0x8234, 0xFD31, + 0x4D5E, 0x8234, 0xFD32, + 0x4D5F, 0x8234, 0xFD33, + 0x4D60, 0x8234, 0xFD34, + 0x4D61, 0x8234, 0xFD35, + 0x4D62, 0x8234, 0xFD36, + 0x4D63, 0x8234, 0xFD37, + 0x4D64, 0x8234, 0xFD38, + 0x4D65, 0x8234, 0xFD39, + 0x4D66, 0x8234, 0xFE30, + 0x4D67, 0x8234, 0xFE31, + 0x4D68, 0x8234, 0xFE32, + 0x4D69, 0x8234, 0xFE33, + 0x4D6A, 0x8234, 0xFE34, + 0x4D6B, 0x8234, 0xFE35, + 0x4D6C, 0x8234, 0xFE36, + 0x4D6D, 0x8234, 0xFE37, + 0x4D6E, 0x8234, 0xFE38, + 0x4D6F, 0x8234, 0xFE39, + 0x4D70, 0x8235, 0x8130, + 0x4D71, 0x8235, 0x8131, + 0x4D72, 0x8235, 0x8132, + 0x4D73, 0x8235, 0x8133, + 0x4D74, 0x8235, 0x8134, + 0x4D75, 0x8235, 0x8135, + 0x4D76, 0x8235, 0x8136, + 0x4D77, 0x8235, 0x8137, + 0x4D78, 0x8235, 0x8138, + 0x4D79, 0x8235, 0x8139, + 0x4D7A, 0x8235, 0x8230, + 0x4D7B, 0x8235, 0x8231, + 0x4D7C, 0x8235, 0x8232, + 0x4D7D, 0x8235, 0x8233, + 0x4D7E, 0x8235, 0x8234, + 0x4D7F, 0x8235, 0x8235, + 0x4D80, 0x8235, 0x8236, + 0x4D81, 0x8235, 0x8237, + 0x4D82, 0x8235, 0x8238, + 0x4D83, 0x8235, 0x8239, + 0x4D84, 0x8235, 0x8330, + 0x4D85, 0x8235, 0x8331, + 0x4D86, 0x8235, 0x8332, + 0x4D87, 0x8235, 0x8333, + 0x4D88, 0x8235, 0x8334, + 0x4D89, 0x8235, 0x8335, + 0x4D8A, 0x8235, 0x8336, + 0x4D8B, 0x8235, 0x8337, + 0x4D8C, 0x8235, 0x8338, + 0x4D8D, 0x8235, 0x8339, + 0x4D8E, 0x8235, 0x8430, + 0x4D8F, 0x8235, 0x8431, + 0x4D90, 0x8235, 0x8432, + 0x4D91, 0x8235, 0x8433, + 0x4D92, 0x8235, 0x8434, + 0x4D93, 0x8235, 0x8435, + 0x4D94, 0x8235, 0x8436, + 0x4D95, 0x8235, 0x8437, + 0x4D96, 0x8235, 0x8438, + 0x4D97, 0x8235, 0x8439, + 0x4D98, 0x8235, 0x8530, + 0x4D99, 0x8235, 0x8531, + 0x4D9A, 0x8235, 0x8532, + 0x4D9B, 0x8235, 0x8533, + 0x4D9C, 0x8235, 0x8534, + 0x4D9D, 0x8235, 0x8535, + 0x4D9E, 0x8235, 0x8536, + 0x4D9F, 0x8235, 0x8537, + 0x4DA0, 0x8235, 0x8538, + 0x4DA1, 0x8235, 0x8539, + 0x4DA2, 0x8235, 0x8630, + 0x4DA3, 0x8235, 0x8631, + 0x4DA4, 0x8235, 0x8632, + 0x4DA5, 0x8235, 0x8633, + 0x4DA6, 0x8235, 0x8634, + 0x4DA7, 0x8235, 0x8635, + 0x4DA8, 0x8235, 0x8636, + 0x4DA9, 0x8235, 0x8637, + 0x4DAA, 0x8235, 0x8638, + 0x4DAB, 0x8235, 0x8639, + 0x4DAC, 0x8235, 0x8730, + 0x4DAD, 0x8235, 0x8731, + 0x4DAF, 0x8235, 0x8732, + 0x4DB0, 0x8235, 0x8733, + 0x4DB1, 0x8235, 0x8734, + 0x4DB2, 0x8235, 0x8735, + 0x4DB3, 0x8235, 0x8736, + 0x4DB4, 0x8235, 0x8737, + 0x4DB5, 0x8235, 0x8738, + 0x4DB6, 0x8235, 0x8739, + 0x4DB7, 0x8235, 0x8830, + 0x4DB8, 0x8235, 0x8831, + 0x4DB9, 0x8235, 0x8832, + 0x4DBA, 0x8235, 0x8833, + 0x4DBB, 0x8235, 0x8834, + 0x4DBC, 0x8235, 0x8835, + 0x4DBD, 0x8235, 0x8836, + 0x4DBE, 0x8235, 0x8837, + 0x4DBF, 0x8235, 0x8838, + 0x4DC0, 0x8235, 0x8839, + 0x4DC1, 0x8235, 0x8930, + 0x4DC2, 0x8235, 0x8931, + 0x4DC3, 0x8235, 0x8932, + 0x4DC4, 0x8235, 0x8933, + 0x4DC5, 0x8235, 0x8934, + 0x4DC6, 0x8235, 0x8935, + 0x4DC7, 0x8235, 0x8936, + 0x4DC8, 0x8235, 0x8937, + 0x4DC9, 0x8235, 0x8938, + 0x4DCA, 0x8235, 0x8939, + 0x4DCB, 0x8235, 0x8A30, + 0x4DCC, 0x8235, 0x8A31, + 0x4DCD, 0x8235, 0x8A32, + 0x4DCE, 0x8235, 0x8A33, + 0x4DCF, 0x8235, 0x8A34, + 0x4DD0, 0x8235, 0x8A35, + 0x4DD1, 0x8235, 0x8A36, + 0x4DD2, 0x8235, 0x8A37, + 0x4DD3, 0x8235, 0x8A38, + 0x4DD4, 0x8235, 0x8A39, + 0x4DD5, 0x8235, 0x8B30, + 0x4DD6, 0x8235, 0x8B31, + 0x4DD7, 0x8235, 0x8B32, + 0x4DD8, 0x8235, 0x8B33, + 0x4DD9, 0x8235, 0x8B34, + 0x4DDA, 0x8235, 0x8B35, + 0x4DDB, 0x8235, 0x8B36, + 0x4DDC, 0x8235, 0x8B37, + 0x4DDD, 0x8235, 0x8B38, + 0x4DDE, 0x8235, 0x8B39, + 0x4DDF, 0x8235, 0x8C30, + 0x4DE0, 0x8235, 0x8C31, + 0x4DE1, 0x8235, 0x8C32, + 0x4DE2, 0x8235, 0x8C33, + 0x4DE3, 0x8235, 0x8C34, + 0x4DE4, 0x8235, 0x8C35, + 0x4DE5, 0x8235, 0x8C36, + 0x4DE6, 0x8235, 0x8C37, + 0x4DE7, 0x8235, 0x8C38, + 0x4DE8, 0x8235, 0x8C39, + 0x4DE9, 0x8235, 0x8D30, + 0x4DEA, 0x8235, 0x8D31, + 0x4DEB, 0x8235, 0x8D32, + 0x4DEC, 0x8235, 0x8D33, + 0x4DED, 0x8235, 0x8D34, + 0x4DEE, 0x8235, 0x8D35, + 0x4DEF, 0x8235, 0x8D36, + 0x4DF0, 0x8235, 0x8D37, + 0x4DF1, 0x8235, 0x8D38, + 0x4DF2, 0x8235, 0x8D39, + 0x4DF3, 0x8235, 0x8E30, + 0x4DF4, 0x8235, 0x8E31, + 0x4DF5, 0x8235, 0x8E32, + 0x4DF6, 0x8235, 0x8E33, + 0x4DF7, 0x8235, 0x8E34, + 0x4DF8, 0x8235, 0x8E35, + 0x4DF9, 0x8235, 0x8E36, + 0x4DFA, 0x8235, 0x8E37, + 0x4DFB, 0x8235, 0x8E38, + 0x4DFC, 0x8235, 0x8E39, + 0x4DFD, 0x8235, 0x8F30, + 0x4DFE, 0x8235, 0x8F31, + 0x4DFF, 0x8235, 0x8F32, + 0xE76C, 0x8336, 0xC739, + 0xE7C8, 0x8336, 0xC830, + 0xE7E7, 0x8336, 0xC831, + 0xE7E8, 0x8336, 0xC832, + 0xE7E9, 0x8336, 0xC833, + 0xE7EA, 0x8336, 0xC834, + 0xE7EB, 0x8336, 0xC835, + 0xE7EC, 0x8336, 0xC836, + 0xE7ED, 0x8336, 0xC837, + 0xE7EE, 0x8336, 0xC838, + 0xE7EF, 0x8336, 0xC839, + 0xE7F0, 0x8336, 0xC930, + 0xE7F1, 0x8336, 0xC931, + 0xE7F2, 0x8336, 0xC932, + 0xE7F3, 0x8336, 0xC933, + 0xE815, 0x8336, 0xC934, + 0xE819, 0x8336, 0xC935, + 0xE81A, 0x8336, 0xC936, + 0xE81B, 0x8336, 0xC937, + 0xE81C, 0x8336, 0xC938, + 0xE81D, 0x8336, 0xC939, + 0xE81F, 0x8336, 0xCA30, + 0xE820, 0x8336, 0xCA31, + 0xE821, 0x8336, 0xCA32, + 0xE822, 0x8336, 0xCA33, + 0xE823, 0x8336, 0xCA34, + 0xE824, 0x8336, 0xCA35, + 0xE825, 0x8336, 0xCA36, + 0xE827, 0x8336, 0xCA37, + 0xE828, 0x8336, 0xCA38, + 0xE829, 0x8336, 0xCA39, + 0xE82A, 0x8336, 0xCB30, + 0xE82D, 0x8336, 0xCB31, + 0xE82E, 0x8336, 0xCB32, + 0xE82F, 0x8336, 0xCB33, + 0xE830, 0x8336, 0xCB34, + 0xE833, 0x8336, 0xCB35, + 0xE834, 0x8336, 0xCB36, + 0xE835, 0x8336, 0xCB37, + 0xE836, 0x8336, 0xCB38, + 0xE837, 0x8336, 0xCB39, + 0xE838, 0x8336, 0xCC30, + 0xE839, 0x8336, 0xCC31, + 0xE83A, 0x8336, 0xCC32, + 0xE83C, 0x8336, 0xCC33, + 0xE83D, 0x8336, 0xCC34, + 0xE83E, 0x8336, 0xCC35, + 0xE83F, 0x8336, 0xCC36, + 0xE840, 0x8336, 0xCC37, + 0xE841, 0x8336, 0xCC38, + 0xE842, 0x8336, 0xCC39, + 0xE844, 0x8336, 0xCD30, + 0xE845, 0x8336, 0xCD31, + 0xE846, 0x8336, 0xCD32, + 0xE847, 0x8336, 0xCD33, + 0xE848, 0x8336, 0xCD34, + 0xE849, 0x8336, 0xCD35, + 0xE84A, 0x8336, 0xCD36, + 0xE84B, 0x8336, 0xCD37, + 0xE84C, 0x8336, 0xCD38, + 0xE84D, 0x8336, 0xCD39, + 0xE84E, 0x8336, 0xCE30, + 0xE84F, 0x8336, 0xCE31, + 0xE850, 0x8336, 0xCE32, + 0xE851, 0x8336, 0xCE33, + 0xE852, 0x8336, 0xCE34, + 0xE853, 0x8336, 0xCE35, + 0xE856, 0x8336, 0xCE36, + 0xE857, 0x8336, 0xCE37, + 0xE858, 0x8336, 0xCE38, + 0xE859, 0x8336, 0xCE39, + 0xE85A, 0x8336, 0xCF30, + 0xE85B, 0x8336, 0xCF31, + 0xE85C, 0x8336, 0xCF32, + 0xE85D, 0x8336, 0xCF33, + 0xE85E, 0x8336, 0xCF34, + 0xE85F, 0x8336, 0xCF35, + 0xE860, 0x8336, 0xCF36, + 0xE861, 0x8336, 0xCF37, + 0xE862, 0x8336, 0xCF38, + 0xE863, 0x8336, 0xCF39, + 0xF92D, 0x8430, 0x8535, + 0xF92E, 0x8430, 0x8536, + 0xF92F, 0x8430, 0x8537, + 0xF930, 0x8430, 0x8538, + 0xF931, 0x8430, 0x8539, + 0xF932, 0x8430, 0x8630, + 0xF933, 0x8430, 0x8631, + 0xF934, 0x8430, 0x8632, + 0xF935, 0x8430, 0x8633, + 0xF936, 0x8430, 0x8634, + 0xF937, 0x8430, 0x8635, + 0xF938, 0x8430, 0x8636, + 0xF939, 0x8430, 0x8637, + 0xF93A, 0x8430, 0x8638, + 0xF93B, 0x8430, 0x8639, + 0xF93C, 0x8430, 0x8730, + 0xF93D, 0x8430, 0x8731, + 0xF93E, 0x8430, 0x8732, + 0xF93F, 0x8430, 0x8733, + 0xF940, 0x8430, 0x8734, + 0xF941, 0x8430, 0x8735, + 0xF942, 0x8430, 0x8736, + 0xF943, 0x8430, 0x8737, + 0xF944, 0x8430, 0x8738, + 0xF945, 0x8430, 0x8739, + 0xF946, 0x8430, 0x8830, + 0xF947, 0x8430, 0x8831, + 0xF948, 0x8430, 0x8832, + 0xF949, 0x8430, 0x8833, + 0xF94A, 0x8430, 0x8834, + 0xF94B, 0x8430, 0x8835, + 0xF94C, 0x8430, 0x8836, + 0xF94D, 0x8430, 0x8837, + 0xF94E, 0x8430, 0x8838, + 0xF94F, 0x8430, 0x8839, + 0xF950, 0x8430, 0x8930, + 0xF951, 0x8430, 0x8931, + 0xF952, 0x8430, 0x8932, + 0xF953, 0x8430, 0x8933, + 0xF954, 0x8430, 0x8934, + 0xF955, 0x8430, 0x8935, + 0xF956, 0x8430, 0x8936, + 0xF957, 0x8430, 0x8937, + 0xF958, 0x8430, 0x8938, + 0xF959, 0x8430, 0x8939, + 0xF95A, 0x8430, 0x8A30, + 0xF95B, 0x8430, 0x8A31, + 0xF95C, 0x8430, 0x8A32, + 0xF95D, 0x8430, 0x8A33, + 0xF95E, 0x8430, 0x8A34, + 0xF95F, 0x8430, 0x8A35, + 0xF960, 0x8430, 0x8A36, + 0xF961, 0x8430, 0x8A37, + 0xF962, 0x8430, 0x8A38, + 0xF963, 0x8430, 0x8A39, + 0xF964, 0x8430, 0x8B30, + 0xF965, 0x8430, 0x8B31, + 0xF966, 0x8430, 0x8B32, + 0xF967, 0x8430, 0x8B33, + 0xF968, 0x8430, 0x8B34, + 0xF969, 0x8430, 0x8B35, + 0xF96A, 0x8430, 0x8B36, + 0xF96B, 0x8430, 0x8B37, + 0xF96C, 0x8430, 0x8B38, + 0xF96D, 0x8430, 0x8B39, + 0xF96E, 0x8430, 0x8C30, + 0xF96F, 0x8430, 0x8C31, + 0xF970, 0x8430, 0x8C32, + 0xF971, 0x8430, 0x8C33, + 0xF972, 0x8430, 0x8C34, + 0xF973, 0x8430, 0x8C35, + 0xF974, 0x8430, 0x8C36, + 0xF975, 0x8430, 0x8C37, + 0xF976, 0x8430, 0x8C38, + 0xF977, 0x8430, 0x8C39, + 0xF978, 0x8430, 0x8D30, + 0xF97A, 0x8430, 0x8D31, + 0xF97B, 0x8430, 0x8D32, + 0xF97C, 0x8430, 0x8D33, + 0xF97D, 0x8430, 0x8D34, + 0xF97E, 0x8430, 0x8D35, + 0xF97F, 0x8430, 0x8D36, + 0xF980, 0x8430, 0x8D37, + 0xF981, 0x8430, 0x8D38, + 0xF982, 0x8430, 0x8D39, + 0xF983, 0x8430, 0x8E30, + 0xF984, 0x8430, 0x8E31, + 0xF985, 0x8430, 0x8E32, + 0xF986, 0x8430, 0x8E33, + 0xF987, 0x8430, 0x8E34, + 0xF988, 0x8430, 0x8E35, + 0xF989, 0x8430, 0x8E36, + 0xF98A, 0x8430, 0x8E37, + 0xF98B, 0x8430, 0x8E38, + 0xF98C, 0x8430, 0x8E39, + 0xF98D, 0x8430, 0x8F30, + 0xF98E, 0x8430, 0x8F31, + 0xF98F, 0x8430, 0x8F32, + 0xF990, 0x8430, 0x8F33, + 0xF991, 0x8430, 0x8F34, + 0xF992, 0x8430, 0x8F35, + 0xF993, 0x8430, 0x8F36, + 0xF994, 0x8430, 0x8F37, + 0xF996, 0x8430, 0x8F38, + 0xF997, 0x8430, 0x8F39, + 0xF998, 0x8430, 0x9030, + 0xF999, 0x8430, 0x9031, + 0xF99A, 0x8430, 0x9032, + 0xF99B, 0x8430, 0x9033, + 0xF99C, 0x8430, 0x9034, + 0xF99D, 0x8430, 0x9035, + 0xF99E, 0x8430, 0x9036, + 0xF99F, 0x8430, 0x9037, + 0xF9A0, 0x8430, 0x9038, + 0xF9A1, 0x8430, 0x9039, + 0xF9A2, 0x8430, 0x9130, + 0xF9A3, 0x8430, 0x9131, + 0xF9A4, 0x8430, 0x9132, + 0xF9A5, 0x8430, 0x9133, + 0xF9A6, 0x8430, 0x9134, + 0xF9A7, 0x8430, 0x9135, + 0xF9A8, 0x8430, 0x9136, + 0xF9A9, 0x8430, 0x9137, + 0xF9AA, 0x8430, 0x9138, + 0xF9AB, 0x8430, 0x9139, + 0xF9AC, 0x8430, 0x9230, + 0xF9AD, 0x8430, 0x9231, + 0xF9AE, 0x8430, 0x9232, + 0xF9AF, 0x8430, 0x9233, + 0xF9B0, 0x8430, 0x9234, + 0xF9B1, 0x8430, 0x9235, + 0xF9B2, 0x8430, 0x9236, + 0xF9B3, 0x8430, 0x9237, + 0xF9B4, 0x8430, 0x9238, + 0xF9B5, 0x8430, 0x9239, + 0xF9B6, 0x8430, 0x9330, + 0xF9B7, 0x8430, 0x9331, + 0xF9B8, 0x8430, 0x9332, + 0xF9B9, 0x8430, 0x9333, + 0xF9BA, 0x8430, 0x9334, + 0xF9BB, 0x8430, 0x9335, + 0xF9BC, 0x8430, 0x9336, + 0xF9BD, 0x8430, 0x9337, + 0xF9BE, 0x8430, 0x9338, + 0xF9BF, 0x8430, 0x9339, + 0xF9C0, 0x8430, 0x9430, + 0xF9C1, 0x8430, 0x9431, + 0xF9C2, 0x8430, 0x9432, + 0xF9C3, 0x8430, 0x9433, + 0xF9C4, 0x8430, 0x9434, + 0xF9C5, 0x8430, 0x9435, + 0xF9C6, 0x8430, 0x9436, + 0xF9C7, 0x8430, 0x9437, + 0xF9C8, 0x8430, 0x9438, + 0xF9C9, 0x8430, 0x9439, + 0xF9CA, 0x8430, 0x9530, + 0xF9CB, 0x8430, 0x9531, + 0xF9CC, 0x8430, 0x9532, + 0xF9CD, 0x8430, 0x9533, + 0xF9CE, 0x8430, 0x9534, + 0xF9CF, 0x8430, 0x9535, + 0xF9D0, 0x8430, 0x9536, + 0xF9D1, 0x8430, 0x9537, + 0xF9D2, 0x8430, 0x9538, + 0xF9D3, 0x8430, 0x9539, + 0xF9D4, 0x8430, 0x9630, + 0xF9D5, 0x8430, 0x9631, + 0xF9D6, 0x8430, 0x9632, + 0xF9D7, 0x8430, 0x9633, + 0xF9D8, 0x8430, 0x9634, + 0xF9D9, 0x8430, 0x9635, + 0xF9DA, 0x8430, 0x9636, + 0xF9DB, 0x8430, 0x9637, + 0xF9DC, 0x8430, 0x9638, + 0xF9DD, 0x8430, 0x9639, + 0xF9DE, 0x8430, 0x9730, + 0xF9DF, 0x8430, 0x9731, + 0xF9E0, 0x8430, 0x9732, + 0xF9E1, 0x8430, 0x9733, + 0xF9E2, 0x8430, 0x9734, + 0xF9E3, 0x8430, 0x9735, + 0xF9E4, 0x8430, 0x9736, + 0xF9E5, 0x8430, 0x9737, + 0xF9E6, 0x8430, 0x9738, + 0xF9E8, 0x8430, 0x9739, + 0xF9E9, 0x8430, 0x9830, + 0xF9EA, 0x8430, 0x9831, + 0xF9EB, 0x8430, 0x9832, + 0xF9EC, 0x8430, 0x9833, + 0xF9ED, 0x8430, 0x9834, + 0xF9EE, 0x8430, 0x9835, + 0xF9EF, 0x8430, 0x9836, + 0xF9F0, 0x8430, 0x9837, + 0xF9F2, 0x8430, 0x9838, + 0xF9F3, 0x8430, 0x9839, + 0xF9F4, 0x8430, 0x9930, + 0xF9F5, 0x8430, 0x9931, + 0xF9F6, 0x8430, 0x9932, + 0xF9F7, 0x8430, 0x9933, + 0xF9F8, 0x8430, 0x9934, + 0xF9F9, 0x8430, 0x9935, + 0xF9FA, 0x8430, 0x9936, + 0xF9FB, 0x8430, 0x9937, + 0xF9FC, 0x8430, 0x9938, + 0xF9FD, 0x8430, 0x9939, + 0xF9FE, 0x8430, 0x9A30, + 0xF9FF, 0x8430, 0x9A31, + 0xFA00, 0x8430, 0x9A32, + 0xFA01, 0x8430, 0x9A33, + 0xFA02, 0x8430, 0x9A34, + 0xFA03, 0x8430, 0x9A35, + 0xFA04, 0x8430, 0x9A36, + 0xFA05, 0x8430, 0x9A37, + 0xFA06, 0x8430, 0x9A38, + 0xFA07, 0x8430, 0x9A39, + 0xFA08, 0x8430, 0x9B30, + 0xFA09, 0x8430, 0x9B31, + 0xFA0A, 0x8430, 0x9B32, + 0xFA0B, 0x8430, 0x9B33, + 0xFA10, 0x8430, 0x9B34, + 0xFA12, 0x8430, 0x9B35, + 0xFA15, 0x8430, 0x9B36, + 0xFA16, 0x8430, 0x9B37, + 0xFA17, 0x8430, 0x9B38, + 0xFA19, 0x8430, 0x9B39, + 0xFA1A, 0x8430, 0x9C30, + 0xFA1B, 0x8430, 0x9C31, + 0xFA1C, 0x8430, 0x9C32, + 0xFA1D, 0x8430, 0x9C33, + 0xFA1E, 0x8430, 0x9C34, + 0xFA22, 0x8430, 0x9C35, + 0xFA25, 0x8430, 0x9C36, + 0xFA26, 0x8430, 0x9C37, + 0xFE32, 0x8431, 0x8538, + 0xFE45, 0x8431, 0x8539, + 0xFE46, 0x8431, 0x8630, + 0xFE47, 0x8431, 0x8631, + 0xFE48, 0x8431, 0x8632, + 0xFE53, 0x8431, 0x8633, + 0xFE58, 0x8431, 0x8634, + 0xFE67, 0x8431, 0x8635, + 0xFE6C, 0x8431, 0x8636, + 0xFE6D, 0x8431, 0x8637, + 0xFE6E, 0x8431, 0x8638, + 0xFE6F, 0x8431, 0x8639, + 0xFE70, 0x8431, 0x8730, + 0xFE71, 0x8431, 0x8731, + 0xFE72, 0x8431, 0x8732, + 0xFE73, 0x8431, 0x8733, + 0xFE74, 0x8431, 0x8734, + 0xFE75, 0x8431, 0x8735, + 0xFE76, 0x8431, 0x8736, + 0xFE77, 0x8431, 0x8737, + 0xFE78, 0x8431, 0x8738, + 0xFE79, 0x8431, 0x8739, + 0xFE7A, 0x8431, 0x8830, + 0xFE7B, 0x8431, 0x8831, + 0xFE7C, 0x8431, 0x8832, + 0xFE7D, 0x8431, 0x8833, + 0xFE7E, 0x8431, 0x8834, + 0xFE7F, 0x8431, 0x8835, + 0xFE80, 0x8431, 0x8836, + 0xFE81, 0x8431, 0x8837, + 0xFE82, 0x8431, 0x8838, + 0xFE83, 0x8431, 0x8839, + 0xFE84, 0x8431, 0x8930, + 0xFE85, 0x8431, 0x8931, + 0xFE86, 0x8431, 0x8932, + 0xFE87, 0x8431, 0x8933, + 0xFE88, 0x8431, 0x8934, + 0xFE89, 0x8431, 0x8935, + 0xFE8A, 0x8431, 0x8936, + 0xFE8B, 0x8431, 0x8937, + 0xFE8C, 0x8431, 0x8938, + 0xFE8D, 0x8431, 0x8939, + 0xFE8E, 0x8431, 0x8A30, + 0xFE8F, 0x8431, 0x8A31, + 0xFE90, 0x8431, 0x8A32, + 0xFE91, 0x8431, 0x8A33, + 0xFE92, 0x8431, 0x8A34, + 0xFE93, 0x8431, 0x8A35, + 0xFE94, 0x8431, 0x8A36, + 0xFE95, 0x8431, 0x8A37, + 0xFE96, 0x8431, 0x8A38, + 0xFE97, 0x8431, 0x8A39, + 0xFE98, 0x8431, 0x8B30, + 0xFE99, 0x8431, 0x8B31, + 0xFE9A, 0x8431, 0x8B32, + 0xFE9B, 0x8431, 0x8B33, + 0xFE9C, 0x8431, 0x8B34, + 0xFE9D, 0x8431, 0x8B35, + 0xFE9E, 0x8431, 0x8B36, + 0xFE9F, 0x8431, 0x8B37, + 0xFEA0, 0x8431, 0x8B38, + 0xFEA1, 0x8431, 0x8B39, + 0xFEA2, 0x8431, 0x8C30, + 0xFEA3, 0x8431, 0x8C31, + 0xFEA4, 0x8431, 0x8C32, + 0xFEA5, 0x8431, 0x8C33, + 0xFEA6, 0x8431, 0x8C34, + 0xFEA7, 0x8431, 0x8C35, + 0xFEA8, 0x8431, 0x8C36, + 0xFEA9, 0x8431, 0x8C37, + 0xFEAA, 0x8431, 0x8C38, + 0xFEAB, 0x8431, 0x8C39, + 0xFEAC, 0x8431, 0x8D30, + 0xFEAD, 0x8431, 0x8D31, + 0xFEAE, 0x8431, 0x8D32, + 0xFEAF, 0x8431, 0x8D33, + 0xFEB0, 0x8431, 0x8D34, + 0xFEB1, 0x8431, 0x8D35, + 0xFEB2, 0x8431, 0x8D36, + 0xFEB3, 0x8431, 0x8D37, + 0xFEB4, 0x8431, 0x8D38, + 0xFEB5, 0x8431, 0x8D39, + 0xFEB6, 0x8431, 0x8E30, + 0xFEB7, 0x8431, 0x8E31, + 0xFEB8, 0x8431, 0x8E32, + 0xFEB9, 0x8431, 0x8E33, + 0xFEBA, 0x8431, 0x8E34, + 0xFEBB, 0x8431, 0x8E35, + 0xFEBC, 0x8431, 0x8E36, + 0xFEBD, 0x8431, 0x8E37, + 0xFEBE, 0x8431, 0x8E38, + 0xFEBF, 0x8431, 0x8E39, + 0xFEC0, 0x8431, 0x8F30, + 0xFEC1, 0x8431, 0x8F31, + 0xFEC2, 0x8431, 0x8F32, + 0xFEC3, 0x8431, 0x8F33, + 0xFEC4, 0x8431, 0x8F34, + 0xFEC5, 0x8431, 0x8F35, + 0xFEC6, 0x8431, 0x8F36, + 0xFEC7, 0x8431, 0x8F37, + 0xFEC8, 0x8431, 0x8F38, + 0xFEC9, 0x8431, 0x8F39, + 0xFECA, 0x8431, 0x9030, + 0xFECB, 0x8431, 0x9031, + 0xFECC, 0x8431, 0x9032, + 0xFECD, 0x8431, 0x9033, + 0xFECE, 0x8431, 0x9034, + 0xFECF, 0x8431, 0x9035, + 0xFED0, 0x8431, 0x9036, + 0xFED1, 0x8431, 0x9037, + 0xFED2, 0x8431, 0x9038, + 0xFED3, 0x8431, 0x9039, + 0xFED4, 0x8431, 0x9130, + 0xFED5, 0x8431, 0x9131, + 0xFED6, 0x8431, 0x9132, + 0xFED7, 0x8431, 0x9133, + 0xFED8, 0x8431, 0x9134, + 0xFED9, 0x8431, 0x9135, + 0xFEDA, 0x8431, 0x9136, + 0xFEDB, 0x8431, 0x9137, + 0xFEDC, 0x8431, 0x9138, + 0xFEDD, 0x8431, 0x9139, + 0xFEDE, 0x8431, 0x9230, + 0xFEDF, 0x8431, 0x9231, + 0xFEE0, 0x8431, 0x9232, + 0xFEE1, 0x8431, 0x9233, + 0xFEE2, 0x8431, 0x9234, + 0xFEE3, 0x8431, 0x9235, + 0xFEE4, 0x8431, 0x9236, + 0xFEE5, 0x8431, 0x9237, + 0xFEE6, 0x8431, 0x9238, + 0xFEE7, 0x8431, 0x9239, + 0xFEE8, 0x8431, 0x9330, + 0xFEE9, 0x8431, 0x9331, + 0xFEEA, 0x8431, 0x9332, + 0xFEEB, 0x8431, 0x9333, + 0xFEEC, 0x8431, 0x9334, + 0xFEED, 0x8431, 0x9335, + 0xFEEE, 0x8431, 0x9336, + 0xFEEF, 0x8431, 0x9337, + 0xFEF0, 0x8431, 0x9338, + 0xFEF1, 0x8431, 0x9339, + 0xFEF2, 0x8431, 0x9430, + 0xFEF3, 0x8431, 0x9431, + 0xFEF4, 0x8431, 0x9432, + 0xFEF5, 0x8431, 0x9433, + 0xFEF6, 0x8431, 0x9434, + 0xFEF7, 0x8431, 0x9435, + 0xFEF8, 0x8431, 0x9436, + 0xFEF9, 0x8431, 0x9437, + 0xFEFA, 0x8431, 0x9438, + 0xFEFB, 0x8431, 0x9439, + 0xFEFC, 0x8431, 0x9530, + 0xFEFD, 0x8431, 0x9531, + 0xFEFE, 0x8431, 0x9532, + 0xFEFF, 0x8431, 0x9533, + 0xFF00, 0x8431, 0x9534, + 0xFF5F, 0x8431, 0x9535, + 0xFF60, 0x8431, 0x9536, + 0xFF61, 0x8431, 0x9537, + 0xFF62, 0x8431, 0x9538, + 0xFF63, 0x8431, 0x9539, + 0xFF64, 0x8431, 0x9630, + 0xFF65, 0x8431, 0x9631, + 0xFF66, 0x8431, 0x9632, + 0xFF67, 0x8431, 0x9633, + 0xFF68, 0x8431, 0x9634, + 0xFF69, 0x8431, 0x9635, + 0xFF6A, 0x8431, 0x9636, + 0xFF6B, 0x8431, 0x9637, + 0xFF6C, 0x8431, 0x9638, + 0xFF6D, 0x8431, 0x9639, + 0xFF6E, 0x8431, 0x9730, + 0xFF6F, 0x8431, 0x9731, + 0xFF70, 0x8431, 0x9732, + 0xFF71, 0x8431, 0x9733, + 0xFF72, 0x8431, 0x9734, + 0xFF73, 0x8431, 0x9735, + 0xFF74, 0x8431, 0x9736, + 0xFF75, 0x8431, 0x9737, + 0xFF76, 0x8431, 0x9738, + 0xFF77, 0x8431, 0x9739, + 0xFF78, 0x8431, 0x9830, + 0xFF79, 0x8431, 0x9831, + 0xFF7A, 0x8431, 0x9832, + 0xFF7B, 0x8431, 0x9833, + 0xFF7C, 0x8431, 0x9834, + 0xFF7D, 0x8431, 0x9835, + 0xFF7E, 0x8431, 0x9836, + 0xFF7F, 0x8431, 0x9837, + 0xFF80, 0x8431, 0x9838, + 0xFF81, 0x8431, 0x9839, + 0xFF82, 0x8431, 0x9930, + 0xFF83, 0x8431, 0x9931, + 0xFF84, 0x8431, 0x9932, + 0xFF85, 0x8431, 0x9933, + 0xFF86, 0x8431, 0x9934, + 0xFF87, 0x8431, 0x9935, + 0xFF88, 0x8431, 0x9936, + 0xFF89, 0x8431, 0x9937, + 0xFF8A, 0x8431, 0x9938, + 0xFF8B, 0x8431, 0x9939, + 0xFF8C, 0x8431, 0x9A30, + 0xFF8D, 0x8431, 0x9A31, + 0xFF8E, 0x8431, 0x9A32, + 0xFF8F, 0x8431, 0x9A33, + 0xFF90, 0x8431, 0x9A34, + 0xFF91, 0x8431, 0x9A35, + 0xFF92, 0x8431, 0x9A36, + 0xFF93, 0x8431, 0x9A37, + 0xFF94, 0x8431, 0x9A38, + 0xFF95, 0x8431, 0x9A39, + 0xFF96, 0x8431, 0x9B30, + 0xFF97, 0x8431, 0x9B31, + 0xFF98, 0x8431, 0x9B32, + 0xFF99, 0x8431, 0x9B33, + 0xFF9A, 0x8431, 0x9B34, + 0xFF9B, 0x8431, 0x9B35, + 0xFF9C, 0x8431, 0x9B36, + 0xFF9D, 0x8431, 0x9B37, + 0xFF9E, 0x8431, 0x9B38, + 0xFF9F, 0x8431, 0x9B39, + 0xFFA0, 0x8431, 0x9C30, + 0xFFA1, 0x8431, 0x9C31, + 0xFFA2, 0x8431, 0x9C32, + 0xFFA3, 0x8431, 0x9C33, + 0xFFA4, 0x8431, 0x9C34, + 0xFFA5, 0x8431, 0x9C35, + 0xFFA6, 0x8431, 0x9C36, + 0xFFA7, 0x8431, 0x9C37, + 0xFFA8, 0x8431, 0x9C38, + 0xFFA9, 0x8431, 0x9C39, + 0xFFAA, 0x8431, 0x9D30, + 0xFFAB, 0x8431, 0x9D31, + 0xFFAC, 0x8431, 0x9D32, + 0xFFAD, 0x8431, 0x9D33, + 0xFFAE, 0x8431, 0x9D34, + 0xFFAF, 0x8431, 0x9D35, + 0xFFB0, 0x8431, 0x9D36, + 0xFFB1, 0x8431, 0x9D37, + 0xFFB2, 0x8431, 0x9D38, + 0xFFB3, 0x8431, 0x9D39, + 0xFFB4, 0x8431, 0x9E30, + 0xFFB5, 0x8431, 0x9E31, + 0xFFB6, 0x8431, 0x9E32, + 0xFFB7, 0x8431, 0x9E33, + 0xFFB8, 0x8431, 0x9E34, + 0xFFB9, 0x8431, 0x9E35, + 0xFFBA, 0x8431, 0x9E36, + 0xFFBB, 0x8431, 0x9E37, + 0xFFBC, 0x8431, 0x9E38, + 0xFFBD, 0x8431, 0x9E39, + 0xFFBE, 0x8431, 0x9F30, + 0xFFBF, 0x8431, 0x9F31, + 0xFFC0, 0x8431, 0x9F32, + 0xFFC1, 0x8431, 0x9F33, + 0xFFC2, 0x8431, 0x9F34, + 0xFFC3, 0x8431, 0x9F35, + 0xFFC4, 0x8431, 0x9F36, + 0xFFC5, 0x8431, 0x9F37, + 0xFFC6, 0x8431, 0x9F38, + 0xFFC7, 0x8431, 0x9F39, + 0xFFC8, 0x8431, 0xA030, + 0xFFC9, 0x8431, 0xA031, + 0xFFCA, 0x8431, 0xA032, + 0xFFCB, 0x8431, 0xA033, + 0xFFCC, 0x8431, 0xA034, + 0xFFCD, 0x8431, 0xA035, + 0xFFCE, 0x8431, 0xA036, + 0xFFCF, 0x8431, 0xA037, + 0xFFD0, 0x8431, 0xA038, + 0xFFD1, 0x8431, 0xA039, + 0xFFD2, 0x8431, 0xA130, + 0xFFD3, 0x8431, 0xA131, + 0xFFD4, 0x8431, 0xA132, + 0xFFD5, 0x8431, 0xA133, + 0xFFD6, 0x8431, 0xA134, + 0xFFD7, 0x8431, 0xA135, + 0xFFD8, 0x8431, 0xA136, + 0xFFD9, 0x8431, 0xA137, + 0xFFDA, 0x8431, 0xA138, + 0xFFDB, 0x8431, 0xA139, + 0xFFDC, 0x8431, 0xA230, + 0xFFDD, 0x8431, 0xA231, + 0xFFDE, 0x8431, 0xA232, + 0xFFDF, 0x8431, 0xA233 +}; diff --git a/backend/gb2312.c b/backend/gb2312.c deleted file mode 100644 index 1259f68..0000000 --- a/backend/gb2312.c +++ /dev/null @@ -1,1624 +0,0 @@ -/* - libzint - the open source barcode library - Copyright (C) 2008-2020 Robin Stuart - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - 3. Neither the name of the project nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - SUCH DAMAGE. - */ -/* vim: set ts=4 sw=4 et : */ -/* - * Adapted from GNU LIBICONV library and patched to add 2 duplicate mappings - * for compatibility with GB 18030 subset: - * 1) U+00B7 to 0xA1A4 (duplicate of U+30FB) - * 2) U+2014 to 0xA1AA (duplicate of U+2015) - */ -/* - * Copyright (C) 1999-2001, 2012, 2016 Free Software Foundation, Inc. - * This file is part of the GNU LIBICONV Library. - * - * The GNU LIBICONV Library is free software; you can redistribute it - * and/or modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * The GNU LIBICONV Library 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 GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with the GNU LIBICONV Library; see the file COPYING.LIB. - * If not, see . - */ -#include -#ifdef _MSC_VER -#include -#endif -#include "common.h" -#include "gb2312.h" - -INTERNAL int utf_to_eci(const int eci, const unsigned char source[], unsigned char dest[], size_t *length); /* Convert Unicode to other encodings */ - -/* - * GB2312.1980-0 (libiconv-1.16/lib/gb2312.h) - */ - -/* ZINT: Table converted from GB 2312 to EUC-CN values using tools/cnv_gb2312.php: - * -while ($line = fgets(STDIN)) { - echo preg_replace_callback('/0x([0-9a-f]{4})/', function ($matches) { - return '0x' . dechex(hexdec($matches[1]) + 0x8080); - }, $line); -} - */ -static const unsigned short gb2312_2charset[7445] = { - 0xa1e8, 0xa1ec, 0xa1a7, 0xa1e3, 0xa1c0, 0xa1c1, 0xa8a4, 0xa8a2, - 0xa8a8, 0xa8a6, 0xa8ba, 0xa8ac, 0xa8aa, 0xa8b0, 0xa8ae, 0xa1c2, - 0xa8b4, 0xa8b2, 0xa8b9, 0xa8a1, 0xa8a5, 0xa8a7, 0xa8a9, 0xa8ad, - 0xa8b1, 0xa8a3, 0xa8ab, 0xa8af, 0xa8b3, 0xa8b5, 0xa8b6, 0xa8b7, - 0xa8b8, 0xa1a6, 0xa1a5, 0xa6a1, 0xa6a2, 0xa6a3, 0xa6a4, 0xa6a5, - 0xa6a6, 0xa6a7, 0xa6a8, 0xa6a9, 0xa6aa, 0xa6ab, 0xa6ac, 0xa6ad, - 0xa6ae, 0xa6af, 0xa6b0, 0xa6b1, 0xa6b2, 0xa6b3, 0xa6b4, 0xa6b5, - 0xa6b6, 0xa6b7, 0xa6b8, 0xa6c1, 0xa6c2, 0xa6c3, 0xa6c4, 0xa6c5, - 0xa6c6, 0xa6c7, 0xa6c8, 0xa6c9, 0xa6ca, 0xa6cb, 0xa6cc, 0xa6cd, - 0xa6ce, 0xa6cf, 0xa6d0, 0xa6d1, 0xa6d2, 0xa6d3, 0xa6d4, 0xa6d5, - 0xa6d6, 0xa6d7, 0xa6d8, 0xa7a7, 0xa7a1, 0xa7a2, 0xa7a3, 0xa7a4, - 0xa7a5, 0xa7a6, 0xa7a8, 0xa7a9, 0xa7aa, 0xa7ab, 0xa7ac, 0xa7ad, - 0xa7ae, 0xa7af, 0xa7b0, 0xa7b1, 0xa7b2, 0xa7b3, 0xa7b4, 0xa7b5, - 0xa7b6, 0xa7b7, 0xa7b8, 0xa7b9, 0xa7ba, 0xa7bb, 0xa7bc, 0xa7bd, - 0xa7be, 0xa7bf, 0xa7c0, 0xa7c1, 0xa7d1, 0xa7d2, 0xa7d3, 0xa7d4, - 0xa7d5, 0xa7d6, 0xa7d8, 0xa7d9, 0xa7da, 0xa7db, 0xa7dc, 0xa7dd, - 0xa7de, 0xa7df, 0xa7e0, 0xa7e1, 0xa7e2, 0xa7e3, 0xa7e4, 0xa7e5, - 0xa7e6, 0xa7e7, 0xa7e8, 0xa7e9, 0xa7ea, 0xa7eb, 0xa7ec, 0xa7ed, - 0xa7ee, 0xa7ef, 0xa7f0, 0xa7f1, 0xa7d7, 0xa1aa, 0xa1ac, 0xa1ae, - 0xa1af, 0xa1b0, 0xa1b1, 0xa1ad, 0xa1eb, 0xa1e4, 0xa1e5, 0xa1f9, - 0xa1e6, 0xa1ed, 0xa2f1, 0xa2f2, 0xa2f3, 0xa2f4, 0xa2f5, 0xa2f6, - 0xa2f7, 0xa2f8, 0xa2f9, 0xa2fa, 0xa2fb, 0xa2fc, 0xa1fb, 0xa1fc, - 0xa1fa, 0xa1fd, 0xa1ca, 0xa1c7, 0xa1c6, 0xa1cc, 0xa1d8, 0xa1de, - 0xa1cf, 0xa1ce, 0xa1c4, 0xa1c5, 0xa1c9, 0xa1c8, 0xa1d2, 0xa1d3, - 0xa1e0, 0xa1df, 0xa1c3, 0xa1cb, 0xa1d7, 0xa1d6, 0xa1d5, 0xa1d9, - 0xa1d4, 0xa1dc, 0xa1dd, 0xa1da, 0xa1db, 0xa1d1, 0xa1cd, 0xa1d0, - 0xa2d9, 0xa2da, 0xa2db, 0xa2dc, 0xa2dd, 0xa2de, 0xa2df, 0xa2e0, - 0xa2e1, 0xa2e2, 0xa2c5, 0xa2c6, 0xa2c7, 0xa2c8, 0xa2c9, 0xa2ca, - 0xa2cb, 0xa2cc, 0xa2cd, 0xa2ce, 0xa2cf, 0xa2d0, 0xa2d1, 0xa2d2, - 0xa2d3, 0xa2d4, 0xa2d5, 0xa2d6, 0xa2d7, 0xa2d8, 0xa2b1, 0xa2b2, - 0xa2b3, 0xa2b4, 0xa2b5, 0xa2b6, 0xa2b7, 0xa2b8, 0xa2b9, 0xa2ba, - 0xa2bb, 0xa2bc, 0xa2bd, 0xa2be, 0xa2bf, 0xa2c0, 0xa2c1, 0xa2c2, - 0xa2c3, 0xa2c4, 0xa9a4, 0xa9a5, 0xa9a6, 0xa9a7, 0xa9a8, 0xa9a9, - 0xa9aa, 0xa9ab, 0xa9ac, 0xa9ad, 0xa9ae, 0xa9af, 0xa9b0, 0xa9b1, - 0xa9b2, 0xa9b3, 0xa9b4, 0xa9b5, 0xa9b6, 0xa9b7, 0xa9b8, 0xa9b9, - 0xa9ba, 0xa9bb, 0xa9bc, 0xa9bd, 0xa9be, 0xa9bf, 0xa9c0, 0xa9c1, - 0xa9c2, 0xa9c3, 0xa9c4, 0xa9c5, 0xa9c6, 0xa9c7, 0xa9c8, 0xa9c9, - 0xa9ca, 0xa9cb, 0xa9cc, 0xa9cd, 0xa9ce, 0xa9cf, 0xa9d0, 0xa9d1, - 0xa9d2, 0xa9d3, 0xa9d4, 0xa9d5, 0xa9d6, 0xa9d7, 0xa9d8, 0xa9d9, - 0xa9da, 0xa9db, 0xa9dc, 0xa9dd, 0xa9de, 0xa9df, 0xa9e0, 0xa9e1, - 0xa9e2, 0xa9e3, 0xa9e4, 0xa9e5, 0xa9e6, 0xa9e7, 0xa9e8, 0xa9e9, - 0xa9ea, 0xa9eb, 0xa9ec, 0xa9ed, 0xa9ee, 0xa9ef, 0xa1f6, 0xa1f5, - 0xa1f8, 0xa1f7, 0xa1f4, 0xa1f3, 0xa1f0, 0xa1f2, 0xa1f1, 0xa1ef, - 0xa1ee, 0xa1e2, 0xa1e1, 0xa1a1, 0xa1a2, 0xa1a3, 0xa1a8, 0xa1a9, - 0xa1b4, 0xa1b5, 0xa1b6, 0xa1b7, 0xa1b8, 0xa1b9, 0xa1ba, 0xa1bb, - 0xa1be, 0xa1bf, 0xa1fe, 0xa1b2, 0xa1b3, 0xa1bc, 0xa1bd, 0xa4a1, - 0xa4a2, 0xa4a3, 0xa4a4, 0xa4a5, 0xa4a6, 0xa4a7, 0xa4a8, 0xa4a9, - 0xa4aa, 0xa4ab, 0xa4ac, 0xa4ad, 0xa4ae, 0xa4af, 0xa4b0, 0xa4b1, - 0xa4b2, 0xa4b3, 0xa4b4, 0xa4b5, 0xa4b6, 0xa4b7, 0xa4b8, 0xa4b9, - 0xa4ba, 0xa4bb, 0xa4bc, 0xa4bd, 0xa4be, 0xa4bf, 0xa4c0, 0xa4c1, - 0xa4c2, 0xa4c3, 0xa4c4, 0xa4c5, 0xa4c6, 0xa4c7, 0xa4c8, 0xa4c9, - 0xa4ca, 0xa4cb, 0xa4cc, 0xa4cd, 0xa4ce, 0xa4cf, 0xa4d0, 0xa4d1, - 0xa4d2, 0xa4d3, 0xa4d4, 0xa4d5, 0xa4d6, 0xa4d7, 0xa4d8, 0xa4d9, - 0xa4da, 0xa4db, 0xa4dc, 0xa4dd, 0xa4de, 0xa4df, 0xa4e0, 0xa4e1, - 0xa4e2, 0xa4e3, 0xa4e4, 0xa4e5, 0xa4e6, 0xa4e7, 0xa4e8, 0xa4e9, - 0xa4ea, 0xa4eb, 0xa4ec, 0xa4ed, 0xa4ee, 0xa4ef, 0xa4f0, 0xa4f1, - 0xa4f2, 0xa4f3, 0xa5a1, 0xa5a2, 0xa5a3, 0xa5a4, 0xa5a5, 0xa5a6, - 0xa5a7, 0xa5a8, 0xa5a9, 0xa5aa, 0xa5ab, 0xa5ac, 0xa5ad, 0xa5ae, - 0xa5af, 0xa5b0, 0xa5b1, 0xa5b2, 0xa5b3, 0xa5b4, 0xa5b5, 0xa5b6, - 0xa5b7, 0xa5b8, 0xa5b9, 0xa5ba, 0xa5bb, 0xa5bc, 0xa5bd, 0xa5be, - 0xa5bf, 0xa5c0, 0xa5c1, 0xa5c2, 0xa5c3, 0xa5c4, 0xa5c5, 0xa5c6, - 0xa5c7, 0xa5c8, 0xa5c9, 0xa5ca, 0xa5cb, 0xa5cc, 0xa5cd, 0xa5ce, - 0xa5cf, 0xa5d0, 0xa5d1, 0xa5d2, 0xa5d3, 0xa5d4, 0xa5d5, 0xa5d6, - 0xa5d7, 0xa5d8, 0xa5d9, 0xa5da, 0xa5db, 0xa5dc, 0xa5dd, 0xa5de, - 0xa5df, 0xa5e0, 0xa5e1, 0xa5e2, 0xa5e3, 0xa5e4, 0xa5e5, 0xa5e6, - 0xa5e7, 0xa5e8, 0xa5e9, 0xa5ea, 0xa5eb, 0xa5ec, 0xa5ed, 0xa5ee, - 0xa5ef, 0xa5f0, 0xa5f1, 0xa5f2, 0xa5f3, 0xa5f4, 0xa5f5, 0xa5f6, - 0xa1a4, 0xa8c5, 0xa8c6, 0xa8c7, 0xa8c8, 0xa8c9, 0xa8ca, 0xa8cb, - 0xa8cc, 0xa8cd, 0xa8ce, 0xa8cf, 0xa8d0, 0xa8d1, 0xa8d2, 0xa8d3, - 0xa8d4, 0xa8d5, 0xa8d6, 0xa8d7, 0xa8d8, 0xa8d9, 0xa8da, 0xa8db, - 0xa8dc, 0xa8dd, 0xa8de, 0xa8df, 0xa8e0, 0xa8e1, 0xa8e2, 0xa8e3, - 0xa8e4, 0xa8e5, 0xa8e6, 0xa8e7, 0xa8e8, 0xa8e9, 0xa2e5, 0xa2e6, - 0xa2e7, 0xa2e8, 0xa2e9, 0xa2ea, 0xa2eb, 0xa2ec, 0xa2ed, 0xa2ee, - 0xd2bb, 0xb6a1, 0xc6df, 0xcdf2, 0xd5c9, 0xc8fd, 0xc9cf, 0xcfc2, - 0xd8a2, 0xb2bb, 0xd3eb, 0xd8a4, 0xb3f3, 0xd7a8, 0xc7d2, 0xd8a7, - 0xcac0, 0xc7f0, 0xb1fb, 0xd2b5, 0xb4d4, 0xb6ab, 0xcbbf, 0xd8a9, - 0xb6aa, 0xc1bd, 0xd1cf, 0xc9a5, 0xd8ad, 0xb8f6, 0xd1be, 0xe3dc, - 0xd6d0, 0xb7e1, 0xb4ae, 0xc1d9, 0xd8bc, 0xcde8, 0xb5a4, 0xceaa, - 0xd6f7, 0xc0f6, 0xbed9, 0xd8af, 0xc4cb, 0xbec3, 0xd8b1, 0xc3b4, - 0xd2e5, 0xd6ae, 0xceda, 0xd5a7, 0xbaf5, 0xb7a6, 0xc0d6, 0xc6b9, - 0xc5d2, 0xc7c7, 0xb9d4, 0xb3cb, 0xd2d2, 0xd8bf, 0xbec5, 0xc6f2, - 0xd2b2, 0xcfb0, 0xcfe7, 0xcae9, 0xd8c0, 0xc2f2, 0xc2d2, 0xc8e9, - 0xc7ac, 0xc1cb, 0xd3e8, 0xd5f9, 0xcac2, 0xb6fe, 0xd8a1, 0xd3da, - 0xbff7, 0xd4c6, 0xbba5, 0xd8c1, 0xcee5, 0xbeae, 0xd8a8, 0xd1c7, - 0xd0a9, 0xd8bd, 0xd9ef, 0xcdf6, 0xbfba, 0xbdbb, 0xbaa5, 0xd2e0, - 0xb2fa, 0xbae0, 0xc4b6, 0xcfed, 0xbea9, 0xcda4, 0xc1c1, 0xc7d7, - 0xd9f1, 0xd9f4, 0xc8cb, 0xd8e9, 0xd2da, 0xcab2, 0xc8ca, 0xd8ec, - 0xd8ea, 0xd8c6, 0xbdf6, 0xc6cd, 0xb3f0, 0xd8eb, 0xbdf1, 0xbde9, - 0xc8d4, 0xb4d3, 0xc2d8, 0xb2d6, 0xd7d0, 0xcacb, 0xcbfb, 0xd5cc, - 0xb8b6, 0xcfc9, 0xd9da, 0xd8f0, 0xc7aa, 0xd8ee, 0xb4fa, 0xc1ee, - 0xd2d4, 0xd8ed, 0xd2c7, 0xd8ef, 0xc3c7, 0xd1f6, 0xd6d9, 0xd8f2, - 0xd8f5, 0xbcfe, 0xbcdb, 0xc8ce, 0xb7dd, 0xb7c2, 0xc6f3, 0xd8f8, - 0xd2c1, 0xcee9, 0xbcbf, 0xb7fc, 0xb7a5, 0xd0dd, 0xd6da, 0xd3c5, - 0xbbef, 0xbbe1, 0xd8f1, 0xc9a1, 0xceb0, 0xb4ab, 0xd8f3, 0xc9cb, - 0xd8f6, 0xc2d7, 0xd8f7, 0xceb1, 0xd8f9, 0xb2ae, 0xb9c0, 0xd9a3, - 0xb0e9, 0xc1e6, 0xc9ec, 0xcbc5, 0xcbc6, 0xd9a4, 0xb5e8, 0xb5ab, - 0xcebb, 0xb5cd, 0xd7a1, 0xd7f4, 0xd3d3, 0xcce5, 0xbace, 0xd9a2, - 0xd9dc, 0xd3e0, 0xd8fd, 0xb7f0, 0xd7f7, 0xd8fe, 0xd8fa, 0xd9a1, - 0xc4e3, 0xd3b6, 0xd8f4, 0xd9dd, 0xd8fb, 0xc5e5, 0xc0d0, 0xd1f0, - 0xb0db, 0xbcd1, 0xd9a6, 0xd9a5, 0xd9ac, 0xd9ae, 0xd9ab, 0xcab9, - 0xd9a9, 0xd6b6, 0xb3de, 0xd9a8, 0xc0fd, 0xcacc, 0xd9aa, 0xd9a7, - 0xd9b0, 0xb6b1, 0xb9a9, 0xd2c0, 0xcfc0, 0xc2c2, 0xbdc4, 0xd5ec, - 0xb2e0, 0xc7c8, 0xbfeb, 0xd9ad, 0xd9af, 0xceea, 0xbaee, 0xc7d6, - 0xb1e3, 0xb4d9, 0xb6ed, 0xd9b4, 0xbfa1, 0xd9de, 0xc7ce, 0xc0fe, - 0xd9b8, 0xcbd7, 0xb7fd, 0xd9b5, 0xd9b7, 0xb1a3, 0xd3e1, 0xd9b9, - 0xd0c5, 0xd9b6, 0xd9b1, 0xd9b2, 0xc1a9, 0xd9b3, 0xbcf3, 0xd0de, - 0xb8a9, 0xbee3, 0xd9bd, 0xd9ba, 0xb0b3, 0xd9c2, 0xd9c4, 0xb1b6, - 0xd9bf, 0xb5b9, 0xbef3, 0xccc8, 0xbaf2, 0xd2d0, 0xd9c3, 0xbde8, - 0xb3ab, 0xd9c5, 0xbeeb, 0xd9c6, 0xd9bb, 0xc4df, 0xd9be, 0xd9c1, - 0xd9c0, 0xd5ae, 0xd6b5, 0xc7e3, 0xd9c8, 0xbcd9, 0xd9ca, 0xd9bc, - 0xd9cb, 0xc6ab, 0xd9c9, 0xd7f6, 0xcda3, 0xbda1, 0xd9cc, 0xc5bc, - 0xcdb5, 0xd9cd, 0xd9c7, 0xb3a5, 0xbffe, 0xb8b5, 0xc0fc, 0xb0f8, - 0xb4f6, 0xd9ce, 0xd9cf, 0xb4a2, 0xd9d0, 0xb4df, 0xb0c1, 0xd9d1, - 0xc9b5, 0xcff1, 0xd9d2, 0xc1c5, 0xd9d6, 0xc9ae, 0xd9d5, 0xd9d4, - 0xd9d7, 0xcbdb, 0xbda9, 0xc6a7, 0xd9d3, 0xd9d8, 0xd9d9, 0xc8e5, - 0xc0dc, 0xb6f9, 0xd8a3, 0xd4ca, 0xd4aa, 0xd0d6, 0xb3e4, 0xd5d7, - 0xcfc8, 0xb9e2, 0xbfcb, 0xc3e2, 0xb6d2, 0xcdc3, 0xd9ee, 0xd9f0, - 0xb5b3, 0xb6b5, 0xbea4, 0xc8eb, 0xc8ab, 0xb0cb, 0xb9ab, 0xc1f9, - 0xd9e2, 0xc0bc, 0xb9b2, 0xb9d8, 0xd0cb, 0xb1f8, 0xc6e4, 0xbedf, - 0xb5e4, 0xd7c8, 0xd1f8, 0xbce6, 0xcade, 0xbcbd, 0xd9e6, 0xd8e7, - 0xc4da, 0xb8d4, 0xc8bd, 0xb2e1, 0xd4d9, 0xc3b0, 0xc3e1, 0xdaa2, - 0xc8df, 0xd0b4, 0xbefc, 0xc5a9, 0xb9da, 0xdaa3, 0xd4a9, 0xdaa4, - 0xd9fb, 0xb6ac, 0xb7eb, 0xb1f9, 0xd9fc, 0xb3e5, 0xbef6, 0xbff6, - 0xd2b1, 0xc0e4, 0xb6b3, 0xd9fe, 0xd9fd, 0xbebb, 0xc6e0, 0xd7bc, - 0xdaa1, 0xc1b9, 0xb5f2, 0xc1e8, 0xbcf5, 0xb4d5, 0xc1dd, 0xc4fd, - 0xbcb8, 0xb7b2, 0xb7ef, 0xd9ec, 0xc6be, 0xbfad, 0xbbcb, 0xb5ca, - 0xdbc9, 0xd0d7, 0xcdb9, 0xb0bc, 0xb3f6, 0xbbf7, 0xdbca, 0xbaaf, - 0xd4e4, 0xb5b6, 0xb5f3, 0xd8d6, 0xc8d0, 0xb7d6, 0xc7d0, 0xd8d7, - 0xbfaf, 0xdbbb, 0xd8d8, 0xd0cc, 0xbbae, 0xebbe, 0xc1d0, 0xc1f5, - 0xd4f2, 0xb8d5, 0xb4b4, 0xb3f5, 0xc9be, 0xc5d0, 0xc5d9, 0xc0fb, - 0xb1f0, 0xd8d9, 0xb9ce, 0xb5bd, 0xd8da, 0xd6c6, 0xcba2, 0xc8af, - 0xc9b2, 0xb4cc, 0xbfcc, 0xb9f4, 0xd8db, 0xd8dc, 0xb6e7, 0xbcc1, - 0xccea, 0xcff7, 0xd8dd, 0xc7b0, 0xb9d0, 0xbda3, 0xccde, 0xc6ca, - 0xd8e0, 0xd8de, 0xd8df, 0xb0fe, 0xbee7, 0xcaa3, 0xbcf4, 0xb8b1, - 0xb8ee, 0xd8e2, 0xbdcb, 0xd8e4, 0xd8e3, 0xc5fc, 0xd8e5, 0xd8e6, - 0xc1a6, 0xc8b0, 0xb0ec, 0xb9a6, 0xbcd3, 0xcef1, 0xdbbd, 0xc1d3, - 0xb6af, 0xd6fa, 0xc5ac, 0xbdd9, 0xdbbe, 0xdbbf, 0xc0f8, 0xbea2, - 0xc0cd, 0xdbc0, 0xcac6, 0xb2aa, 0xd3c2, 0xc3e3, 0xd1ab, 0xdbc2, - 0xc0d5, 0xdbc3, 0xbfb1, 0xc4bc, 0xc7da, 0xdbc4, 0xd9e8, 0xc9d7, - 0xb9b4, 0xcef0, 0xd4c8, 0xb0fc, 0xb4d2, 0xd0d9, 0xd9e9, 0xdecb, - 0xd9eb, 0xd8b0, 0xbbaf, 0xb1b1, 0xb3d7, 0xd8ce, 0xd4d1, 0xbdb3, - 0xbfef, 0xcfbb, 0xd8d0, 0xb7cb, 0xd8d1, 0xc6a5, 0xc7f8, 0xd2bd, - 0xd8d2, 0xc4e4, 0xcaae, 0xc7a7, 0xd8a6, 0xc9fd, 0xcee7, 0xbbdc, - 0xb0eb, 0xbbaa, 0xd0ad, 0xb1b0, 0xd7e4, 0xd7bf, 0xb5a5, 0xc2f4, - 0xc4cf, 0xb2a9, 0xb2b7, 0xb1e5, 0xdfb2, 0xd5bc, 0xbfa8, 0xc2ac, - 0xd8d5, 0xc2b1, 0xd8d4, 0xced4, 0xdae0, 0xcec0, 0xd8b4, 0xc3ae, - 0xd3a1, 0xcea3, 0xbcb4, 0xc8b4, 0xc2d1, 0xbeed, 0xd0b6, 0xdae1, - 0xc7e4, 0xb3a7, 0xb6f2, 0xccfc, 0xc0fa, 0xc0f7, 0xd1b9, 0xd1e1, - 0xd8c7, 0xb2de, 0xc0e5, 0xbaf1, 0xd8c8, 0xd4ad, 0xcfe1, 0xd8c9, - 0xd8ca, 0xcfc3, 0xb3f8, 0xbec7, 0xd8cb, 0xdbcc, 0xc8a5, 0xcfd8, - 0xc8fe, 0xb2ce, 0xd3d6, 0xb2e6, 0xbcb0, 0xd3d1, 0xcbab, 0xb7b4, - 0xb7a2, 0xcae5, 0xc8a1, 0xcadc, 0xb1e4, 0xd0f0, 0xc5d1, 0xdbc5, - 0xb5fe, 0xbfda, 0xb9c5, 0xbee4, 0xc1ed, 0xdfb6, 0xdfb5, 0xd6bb, - 0xbdd0, 0xd5d9, 0xb0c8, 0xb6a3, 0xbfc9, 0xcca8, 0xdfb3, 0xcab7, - 0xd3d2, 0xd8cf, 0xd2b6, 0xbac5, 0xcbbe, 0xccbe, 0xdfb7, 0xb5f0, - 0xdfb4, 0xd3f5, 0xb3d4, 0xb8f7, 0xdfba, 0xbacf, 0xbcaa, 0xb5f5, - 0xcdac, 0xc3fb, 0xbaf3, 0xc0f4, 0xcdc2, 0xcff2, 0xdfb8, 0xcfc5, - 0xc2c0, 0xdfb9, 0xc2f0, 0xbefd, 0xc1df, 0xcdcc, 0xd2f7, 0xb7cd, - 0xdfc1, 0xdfc4, 0xb7f1, 0xb0c9, 0xb6d6, 0xb7d4, 0xbaac, 0xccfd, - 0xbfd4, 0xcbb1, 0xc6f4, 0xd6a8, 0xdfc5, 0xcee2, 0xb3b3, 0xcefc, - 0xb4b5, 0xcec7, 0xbaf0, 0xcee1, 0xd1bd, 0xdfc0, 0xb4f4, 0xb3ca, - 0xb8e6, 0xdfbb, 0xc4c5, 0xdfbc, 0xdfbd, 0xdfbe, 0xc5bb, 0xdfbf, - 0xdfc2, 0xd4b1, 0xdfc3, 0xc7ba, 0xced8, 0xc4d8, 0xdfca, 0xdfcf, - 0xd6dc, 0xdfc9, 0xdfda, 0xceb6, 0xbac7, 0xdfce, 0xdfc8, 0xc5de, - 0xc9eb, 0xbaf4, 0xc3fc, 0xbed7, 0xdfc6, 0xdfcd, 0xc5d8, 0xd5a6, - 0xbacd, 0xbecc, 0xd3bd, 0xb8c0, 0xd6e4, 0xdfc7, 0xb9be, 0xbfa7, - 0xc1fc, 0xdfcb, 0xdfcc, 0xdfd0, 0xdfdb, 0xdfe5, 0xdfd7, 0xdfd6, - 0xd7c9, 0xdfe3, 0xdfe4, 0xe5eb, 0xd2a7, 0xdfd2, 0xbfa9, 0xd4db, - 0xbfc8, 0xdfd4, 0xcfcc, 0xdfdd, 0xd1ca, 0xdfde, 0xb0a7, 0xc6b7, - 0xdfd3, 0xbae5, 0xb6df, 0xcddb, 0xb9fe, 0xd4d5, 0xdfdf, 0xcfec, - 0xb0a5, 0xdfe7, 0xdfd1, 0xd1c6, 0xdfd5, 0xdfd8, 0xdfd9, 0xdfdc, - 0xbba9, 0xdfe0, 0xdfe1, 0xdfe2, 0xdfe6, 0xdfe8, 0xd3b4, 0xb8e7, - 0xc5b6, 0xdfea, 0xc9da, 0xc1a8, 0xc4c4, 0xbfde, 0xcff8, 0xd5dc, - 0xdfee, 0xb2b8, 0xbadf, 0xdfec, 0xdbc1, 0xd1e4, 0xcbf4, 0xb4bd, - 0xb0a6, 0xdff1, 0xccc6, 0xdff2, 0xdfed, 0xdfe9, 0xdfeb, 0xdfef, - 0xdff0, 0xbbbd, 0xdff3, 0xdff4, 0xbba3, 0xcadb, 0xcea8, 0xe0a7, - 0xb3aa, 0xe0a6, 0xe0a1, 0xdffe, 0xcdd9, 0xdffc, 0xdffa, 0xbfd0, - 0xd7c4, 0xc9cc, 0xdff8, 0xb0a1, 0xdffd, 0xdffb, 0xe0a2, 0xe0a8, - 0xb7c8, 0xc6a1, 0xc9b6, 0xc0b2, 0xdff5, 0xc5be, 0xd8c4, 0xdff9, - 0xc4f6, 0xe0a3, 0xe0a4, 0xe0a5, 0xd0a5, 0xe0b4, 0xcce4, 0xe0b1, - 0xbfa6, 0xe0af, 0xceb9, 0xe0ab, 0xc9c6, 0xc0ae, 0xe0ae, 0xbaed, - 0xbab0, 0xe0a9, 0xdff6, 0xe0b3, 0xe0b8, 0xb4ad, 0xe0b9, 0xcfb2, - 0xbac8, 0xe0b0, 0xd0fa, 0xe0ac, 0xd4fb, 0xdff7, 0xc5e7, 0xe0ad, - 0xd3f7, 0xe0b6, 0xe0b7, 0xe0c4, 0xd0e1, 0xe0bc, 0xe0c9, 0xe0ca, - 0xe0be, 0xe0aa, 0xc9a4, 0xe0c1, 0xe0b2, 0xcac8, 0xe0c3, 0xe0b5, - 0xcecb, 0xcbc3, 0xe0cd, 0xe0c6, 0xe0c2, 0xe0cb, 0xe0ba, 0xe0bf, - 0xe0c0, 0xe0c5, 0xe0c7, 0xe0c8, 0xe0cc, 0xe0bb, 0xcbd4, 0xe0d5, - 0xe0d6, 0xe0d2, 0xe0d0, 0xbcce, 0xe0d1, 0xb8c2, 0xd8c5, 0xd0ea, - 0xc2ef, 0xe0cf, 0xe0bd, 0xe0d4, 0xe0d3, 0xe0d7, 0xe0dc, 0xe0d8, - 0xd6f6, 0xb3b0, 0xd7ec, 0xcbbb, 0xe0da, 0xcefb, 0xbad9, 0xe0e1, - 0xe0dd, 0xd2ad, 0xe0e2, 0xe0db, 0xe0d9, 0xe0df, 0xe0e0, 0xe0de, - 0xe0e4, 0xc6f7, 0xd8ac, 0xd4eb, 0xe0e6, 0xcac9, 0xe0e5, 0xb8c1, - 0xe0e7, 0xe0e8, 0xe0e9, 0xe0e3, 0xbabf, 0xcce7, 0xe0ea, 0xcff9, - 0xe0eb, 0xc8c2, 0xbdc0, 0xc4d2, 0xe0ec, 0xe0ed, 0xc7f4, 0xcbc4, - 0xe0ee, 0xbbd8, 0xd8b6, 0xd2f2, 0xe0ef, 0xcdc5, 0xb6da, 0xe0f1, - 0xd4b0, 0xc0a7, 0xb4d1, 0xcea7, 0xe0f0, 0xe0f2, 0xb9cc, 0xb9fa, - 0xcdbc, 0xe0f3, 0xc6d4, 0xe0f4, 0xd4b2, 0xc8a6, 0xe0f6, 0xe0f5, - 0xe0f7, 0xcdc1, 0xcaa5, 0xd4da, 0xdbd7, 0xdbd9, 0xdbd8, 0xb9e7, - 0xdbdc, 0xdbdd, 0xb5d8, 0xdbda, 0xdbdb, 0xb3a1, 0xdbdf, 0xbbf8, - 0xd6b7, 0xdbe0, 0xbef9, 0xb7bb, 0xdbd0, 0xccae, 0xbfb2, 0xbbb5, - 0xd7f8, 0xbfd3, 0xbfe9, 0xbce1, 0xccb3, 0xdbde, 0xb0d3, 0xceeb, - 0xb7d8, 0xd7b9, 0xc6c2, 0xc0a4, 0xccb9, 0xdbe7, 0xdbe1, 0xc6ba, - 0xdbe3, 0xdbe8, 0xc5f7, 0xdbea, 0xdbe9, 0xbfc0, 0xdbe6, 0xdbe5, - 0xb4b9, 0xc0ac, 0xc2a2, 0xdbe2, 0xdbe4, 0xd0cd, 0xdbed, 0xc0dd, - 0xdbf2, 0xb6e2, 0xdbf3, 0xdbd2, 0xb9b8, 0xd4ab, 0xdbec, 0xbfd1, - 0xdbf0, 0xdbd1, 0xb5e6, 0xdbeb, 0xbfe5, 0xdbee, 0xdbf1, 0xdbf9, - 0xb9a1, 0xb0a3, 0xc2f1, 0xb3c7, 0xdbef, 0xdbf8, 0xc6d2, 0xdbf4, - 0xdbf5, 0xdbf7, 0xdbf6, 0xdbfe, 0xd3f2, 0xb2ba, 0xdbfd, 0xdca4, - 0xdbfb, 0xdbfa, 0xdbfc, 0xc5e0, 0xbbf9, 0xdca3, 0xdca5, 0xccc3, - 0xb6d1, 0xddc0, 0xdca1, 0xdca2, 0xc7b5, 0xb6e9, 0xdca7, 0xdca6, - 0xdca9, 0xb1a4, 0xb5cc, 0xbfb0, 0xd1df, 0xb6c2, 0xdca8, 0xcbfa, - 0xebf3, 0xcbdc, 0xcbfe, 0xccc1, 0xc8fb, 0xdcaa, 0xccee, 0xdcab, - 0xdbd3, 0xdcaf, 0xdcac, 0xbeb3, 0xcafb, 0xdcad, 0xc9ca, 0xc4b9, - 0xc7bd, 0xdcae, 0xd4f6, 0xd0e6, 0xc4ab, 0xb6d5, 0xdbd4, 0xb1da, - 0xdbd5, 0xdbd6, 0xbabe, 0xc8c0, 0xcabf, 0xc8c9, 0xd7b3, 0xc9f9, - 0xbfc7, 0xbaf8, 0xd2bc, 0xe2ba, 0xb4a6, 0xb1b8, 0xb8b4, 0xcfc4, - 0xd9e7, 0xcfa6, 0xcde2, 0xd9ed, 0xb6e0, 0xd2b9, 0xb9bb, 0xe2b9, - 0xe2b7, 0xb4f3, 0xccec, 0xccab, 0xb7f2, 0xd8b2, 0xd1eb, 0xbabb, - 0xcaa7, 0xcdb7, 0xd2c4, 0xbfe4, 0xbcd0, 0xb6e1, 0xdec5, 0xdec6, - 0xdbbc, 0xd1d9, 0xc6e6, 0xc4ce, 0xb7ee, 0xb7dc, 0xbffc, 0xd7e0, - 0xc6f5, 0xb1bc, 0xdec8, 0xbdb1, 0xccd7, 0xdeca, 0xdec9, 0xb5ec, - 0xc9dd, 0xb0c2, 0xc5ae, 0xc5ab, 0xc4cc, 0xbce9, 0xcbfd, 0xbac3, - 0xe5f9, 0xc8e7, 0xe5fa, 0xcdfd, 0xd7b1, 0xb8be, 0xc2e8, 0xc8d1, - 0xe5fb, 0xb6ca, 0xbccb, 0xd1fd, 0xe6a1, 0xc3ee, 0xe6a4, 0xe5fe, - 0xe6a5, 0xcdd7, 0xb7c1, 0xe5fc, 0xe5fd, 0xe6a3, 0xc4dd, 0xe6a8, - 0xe6a7, 0xc3c3, 0xc6de, 0xe6aa, 0xc4b7, 0xe6a2, 0xcabc, 0xbde3, - 0xb9c3, 0xe6a6, 0xd0d5, 0xceaf, 0xe6a9, 0xe6b0, 0xd2a6, 0xbdaa, - 0xe6ad, 0xe6af, 0xc0d1, 0xd2cc, 0xbca7, 0xe6b1, 0xd2f6, 0xd7cb, - 0xcdfe, 0xcdde, 0xc2a6, 0xe6ab, 0xe6ac, 0xbdbf, 0xe6ae, 0xe6b3, - 0xe6b2, 0xe6b6, 0xe6b8, 0xc4ef, 0xc4c8, 0xbeea, 0xc9ef, 0xe6b7, - 0xb6f0, 0xc3e4, 0xd3e9, 0xe6b4, 0xe6b5, 0xc8a2, 0xe6bd, 0xe6b9, - 0xc6c5, 0xcdf1, 0xe6bb, 0xe6bc, 0xbbe9, 0xe6be, 0xe6ba, 0xc0b7, - 0xd3a4, 0xe6bf, 0xc9f4, 0xe6c3, 0xe6c4, 0xd0f6, 0xc3bd, 0xc3c4, - 0xe6c2, 0xe6c1, 0xe6c7, 0xcfb1, 0xebf4, 0xe6ca, 0xe6c5, 0xbcde, - 0xc9a9, 0xbcb5, 0xcfd3, 0xe6c8, 0xe6c9, 0xe6ce, 0xe6d0, 0xe6d1, - 0xe6cb, 0xb5d5, 0xe6cc, 0xe6cf, 0xc4db, 0xe6c6, 0xe6cd, 0xe6d2, - 0xe6d4, 0xe6d3, 0xe6d5, 0xd9f8, 0xe6d6, 0xe6d7, 0xd7d3, 0xe6dd, - 0xe6de, 0xbfd7, 0xd4d0, 0xd7d6, 0xb4e6, 0xcbef, 0xe6da, 0xd8c3, - 0xd7ce, 0xd0a2, 0xc3cf, 0xe6df, 0xbcbe, 0xb9c2, 0xe6db, 0xd1a7, - 0xbaa2, 0xc2cf, 0xd8ab, 0xcaeb, 0xe5ee, 0xe6dc, 0xb7f5, 0xc8e6, - 0xc4f5, 0xe5b2, 0xc4fe, 0xcbfc, 0xe5b3, 0xd5ac, 0xd3ee, 0xcad8, - 0xb0b2, 0xcbce, 0xcdea, 0xbaea, 0xe5b5, 0xe5b4, 0xd7da, 0xb9d9, - 0xd6e6, 0xb6a8, 0xcdf0, 0xd2cb, 0xb1a6, 0xcab5, 0xb3e8, 0xc9f3, - 0xbfcd, 0xd0fb, 0xcad2, 0xe5b6, 0xbbc2, 0xcfdc, 0xb9ac, 0xd4d7, - 0xbaa6, 0xd1e7, 0xcffc, 0xbcd2, 0xe5b7, 0xc8dd, 0xbfed, 0xb1f6, - 0xcbde, 0xbcc5, 0xbcc4, 0xd2fa, 0xc3dc, 0xbfdc, 0xb8bb, 0xc3c2, - 0xbaae, 0xd4a2, 0xc7de, 0xc4af, 0xb2ec, 0xb9d1, 0xe5bb, 0xc1c8, - 0xd5af, 0xe5bc, 0xe5be, 0xb4e7, 0xb6d4, 0xcbc2, 0xd1b0, 0xb5bc, - 0xcad9, 0xb7e2, 0xc9e4, 0xbdab, 0xcebe, 0xd7f0, 0xd0a1, 0xc9d9, - 0xb6fb, 0xe6d8, 0xbce2, 0xb3be, 0xc9d0, 0xe6d9, 0xb3a2, 0xdecc, - 0xd3c8, 0xdecd, 0xd2a2, 0xdece, 0xbecd, 0xdecf, 0xcaac, 0xd2fc, - 0xb3df, 0xe5ea, 0xc4e1, 0xbea1, 0xceb2, 0xc4f2, 0xbed6, 0xc6a8, - 0xb2e3, 0xbed3, 0xc7fc, 0xcceb, 0xbdec, 0xcedd, 0xcaba, 0xc6c1, - 0xe5ec, 0xd0bc, 0xd5b9, 0xe5ed, 0xcaf4, 0xcdc0, 0xc2c5, 0xe5ef, - 0xc2c4, 0xe5f0, 0xe5f8, 0xcdcd, 0xc9bd, 0xd2d9, 0xe1a8, 0xd3ec, - 0xcbea, 0xc6f1, 0xe1ac, 0xe1a7, 0xe1a9, 0xe1aa, 0xe1af, 0xb2ed, - 0xe1ab, 0xb8da, 0xe1ad, 0xe1ae, 0xe1b0, 0xb5ba, 0xe1b1, 0xe1b3, - 0xe1b8, 0xd1d2, 0xe1b6, 0xe1b5, 0xc1eb, 0xe1b7, 0xd4c0, 0xe1b2, - 0xe1ba, 0xb0b6, 0xe1b4, 0xbff9, 0xe1b9, 0xe1bb, 0xe1be, 0xe1bc, - 0xd6c5, 0xcfbf, 0xe1bd, 0xe1bf, 0xc2cd, 0xb6eb, 0xd3f8, 0xc7cd, - 0xb7e5, 0xbefe, 0xe1c0, 0xe1c1, 0xe1c7, 0xb3e7, 0xc6e9, 0xb4de, - 0xd1c2, 0xe1c8, 0xe1c6, 0xe1c5, 0xe1c3, 0xe1c2, 0xb1c0, 0xd5b8, - 0xe1c4, 0xe1cb, 0xe1cc, 0xe1ca, 0xeffa, 0xe1d3, 0xe1d2, 0xc7b6, - 0xe1c9, 0xe1ce, 0xe1d0, 0xe1d4, 0xe1d1, 0xe1cd, 0xe1cf, 0xe1d5, - 0xe1d6, 0xe1d7, 0xe1d8, 0xe1da, 0xe1db, 0xcea1, 0xe7dd, 0xb4a8, - 0xd6dd, 0xd1b2, 0xb3b2, 0xb9a4, 0xd7f3, 0xc7c9, 0xbede, 0xb9ae, - 0xced7, 0xb2ee, 0xdbcf, 0xbcba, 0xd2d1, 0xcbc8, 0xb0cd, 0xcfef, - 0xd9e3, 0xbded, 0xb1d2, 0xcad0, 0xb2bc, 0xcba7, 0xb7ab, 0xcaa6, - 0xcfa3, 0xe0f8, 0xd5ca, 0xe0fb, 0xe0fa, 0xc5c1, 0xccfb, 0xc1b1, - 0xe0f9, 0xd6e3, 0xb2af, 0xd6c4, 0xb5db, 0xb4f8, 0xd6a1, 0xcfaf, - 0xb0ef, 0xe0fc, 0xe1a1, 0xb3a3, 0xe0fd, 0xe0fe, 0xc3b1, 0xc3dd, - 0xe1a2, 0xb7f9, 0xbbcf, 0xe1a3, 0xc4bb, 0xe1a4, 0xe1a5, 0xe1a6, - 0xb4b1, 0xb8c9, 0xc6bd, 0xc4ea, 0xb2a2, 0xd0d2, 0xe7db, 0xbbc3, - 0xd3d7, 0xd3c4, 0xb9e3, 0xe2cf, 0xd7af, 0xc7ec, 0xb1d3, 0xb4b2, - 0xe2d1, 0xd0f2, 0xc2ae, 0xe2d0, 0xbfe2, 0xd3a6, 0xb5d7, 0xe2d2, - 0xb5ea, 0xc3ed, 0xb8fd, 0xb8ae, 0xc5d3, 0xb7cf, 0xe2d4, 0xe2d3, - 0xb6c8, 0xd7f9, 0xcda5, 0xe2d8, 0xe2d6, 0xcafc, 0xbfb5, 0xd3b9, - 0xe2d5, 0xe2d7, 0xc1ae, 0xc0c8, 0xe2db, 0xe2da, 0xc0aa, 0xc1ce, - 0xe2dc, 0xe2dd, 0xe2de, 0xdbc8, 0xd1d3, 0xcda2, 0xbda8, 0xdec3, - 0xd8a5, 0xbfaa, 0xdbcd, 0xd2ec, 0xc6fa, 0xc5aa, 0xdec4, 0xb1d7, - 0xdfae, 0xcabd, 0xdfb1, 0xb9ad, 0xd2fd, 0xb8a5, 0xbaeb, 0xb3da, - 0xb5dc, 0xd5c5, 0xc3d6, 0xcfd2, 0xbba1, 0xe5f3, 0xe5f2, 0xe5f4, - 0xcde4, 0xc8f5, 0xb5af, 0xc7bf, 0xe5f6, 0xecb0, 0xe5e6, 0xb9e9, - 0xb5b1, 0xc2bc, 0xe5e8, 0xe5e7, 0xe5e9, 0xd2cd, 0xe1ea, 0xd0ce, - 0xcdae, 0xd1e5, 0xb2ca, 0xb1eb, 0xb1f2, 0xc5ed, 0xd5c3, 0xd3b0, - 0xe1dc, 0xe1dd, 0xd2db, 0xb3b9, 0xb1cb, 0xcdf9, 0xd5f7, 0xe1de, - 0xbeb6, 0xb4fd, 0xe1df, 0xbadc, 0xe1e0, 0xbbb2, 0xc2c9, 0xe1e1, - 0xd0ec, 0xcdbd, 0xe1e2, 0xb5c3, 0xc5c7, 0xe1e3, 0xe1e4, 0xd3f9, - 0xe1e5, 0xd1ad, 0xe1e6, 0xcea2, 0xe1e7, 0xb5c2, 0xe1e8, 0xbbd5, - 0xd0c4, 0xe2e0, 0xb1d8, 0xd2e4, 0xe2e1, 0xbcc9, 0xc8cc, 0xe2e3, - 0xecfe, 0xecfd, 0xdfaf, 0xe2e2, 0xd6be, 0xcdfc, 0xc3a6, 0xe3c3, - 0xd6d2, 0xe2e7, 0xe2e8, 0xd3c7, 0xe2ec, 0xbfec, 0xe2ed, 0xe2e5, - 0xb3c0, 0xc4ee, 0xe2ee, 0xd0c3, 0xbaf6, 0xe2e9, 0xb7de, 0xbbb3, - 0xccac, 0xcbcb, 0xe2e4, 0xe2e6, 0xe2ea, 0xe2eb, 0xe2f7, 0xe2f4, - 0xd4f5, 0xe2f3, 0xc5ad, 0xd5fa, 0xc5c2, 0xb2c0, 0xe2ef, 0xe2f2, - 0xc1af, 0xcbbc, 0xb5a1, 0xe2f9, 0xbcb1, 0xe2f1, 0xd0d4, 0xd4b9, - 0xe2f5, 0xb9d6, 0xe2f6, 0xc7d3, 0xe2f0, 0xd7dc, 0xeda1, 0xe2f8, - 0xeda5, 0xe2fe, 0xcad1, 0xc1b5, 0xbbd0, 0xbfd6, 0xbae3, 0xcba1, - 0xeda6, 0xeda3, 0xeda2, 0xbbd6, 0xeda7, 0xd0f4, 0xeda4, 0xbade, - 0xb6f7, 0xe3a1, 0xb6b2, 0xccf1, 0xb9a7, 0xcfa2, 0xc7a1, 0xbfd2, - 0xb6f1, 0xe2fa, 0xe2fb, 0xe2fd, 0xe2fc, 0xc4d5, 0xe3a2, 0xd3c1, - 0xe3a7, 0xc7c4, 0xcfa4, 0xe3a9, 0xbab7, 0xe3a8, 0xbbda, 0xe3a3, - 0xe3a4, 0xe3aa, 0xe3a6, 0xcef2, 0xd3c6, 0xbbbc, 0xd4c3, 0xc4fa, - 0xeda8, 0xd0fc, 0xe3a5, 0xc3f5, 0xe3ad, 0xb1af, 0xe3b2, 0xbcc2, - 0xe3ac, 0xb5bf, 0xc7e9, 0xe3b0, 0xbeaa, 0xcdef, 0xbbf3, 0xcce8, - 0xe3af, 0xe3b1, 0xcfa7, 0xe3ae, 0xcea9, 0xbbdd, 0xb5eb, 0xbee5, - 0xb2d2, 0xb3cd, 0xb1b9, 0xe3ab, 0xb2d1, 0xb5ac, 0xb9df, 0xb6e8, - 0xcfeb, 0xe3b7, 0xbbcc, 0xc8c7, 0xd0ca, 0xe3b8, 0xb3ee, 0xeda9, - 0xd3fa, 0xd3e4, 0xedaa, 0xe3b9, 0xd2e2, 0xe3b5, 0xd3de, 0xb8d0, - 0xe3b3, 0xe3b6, 0xb7df, 0xe3b4, 0xc0a2, 0xe3ba, 0xd4b8, 0xb4c8, - 0xe3bb, 0xbbc5, 0xc9f7, 0xc9e5, 0xc4bd, 0xedab, 0xc2fd, 0xbbdb, - 0xbfae, 0xcebf, 0xe3bc, 0xbfb6, 0xb1ef, 0xd4f7, 0xe3be, 0xedad, - 0xe3bf, 0xbaa9, 0xedac, 0xe3bd, 0xe3c0, 0xbab6, 0xb6ae, 0xd0b8, - 0xb0c3, 0xedae, 0xedaf, 0xc0c1, 0xe3c1, 0xc5b3, 0xe3c2, 0xdcb2, - 0xedb0, 0xb8ea, 0xceec, 0xeaa7, 0xd0e7, 0xcaf9, 0xc8d6, 0xcfb7, - 0xb3c9, 0xced2, 0xbde4, 0xe3de, 0xbbf2, 0xeaa8, 0xd5bd, 0xc6dd, - 0xeaa9, 0xeaaa, 0xeaac, 0xeaab, 0xeaae, 0xeaad, 0xbdd8, 0xeaaf, - 0xc2be, 0xb4c1, 0xb4f7, 0xbba7, 0xece6, 0xece5, 0xb7bf, 0xcbf9, - 0xb1e2, 0xece7, 0xc9c8, 0xece8, 0xece9, 0xcad6, 0xded0, 0xb2c5, - 0xd4fa, 0xc6cb, 0xb0c7, 0xb4f2, 0xc8d3, 0xcdd0, 0xbfb8, 0xbfdb, - 0xc7a4, 0xd6b4, 0xc0a9, 0xded1, 0xc9a8, 0xd1ef, 0xc5a4, 0xb0e7, - 0xb3b6, 0xc8c5, 0xb0e2, 0xb7f6, 0xc5fa, 0xb6f3, 0xd5d2, 0xb3d0, - 0xbcbc, 0xb3ad, 0xbef1, 0xb0d1, 0xd2d6, 0xcae3, 0xd7a5, 0xcdb6, - 0xb6b6, 0xbfb9, 0xd5db, 0xb8a7, 0xc5d7, 0xded2, 0xbfd9, 0xc2d5, - 0xc7c0, 0xbba4, 0xb1a8, 0xc5ea, 0xc5fb, 0xcca7, 0xb1a7, 0xb5d6, - 0xc4a8, 0xded3, 0xd1ba, 0xb3e9, 0xc3f2, 0xb7f7, 0xd6f4, 0xb5a3, - 0xb2f0, 0xc4b4, 0xc4e9, 0xc0ad, 0xded4, 0xb0e8, 0xc5c4, 0xc1e0, - 0xb9d5, 0xbedc, 0xcdd8, 0xb0ce, 0xcdcf, 0xded6, 0xbed0, 0xd7be, - 0xded5, 0xd5d0, 0xb0dd, 0xc4e2, 0xc2a3, 0xbcf0, 0xd3b5, 0xc0b9, - 0xc5a1, 0xb2a6, 0xd4f1, 0xc0a8, 0xcac3, 0xded7, 0xd5fc, 0xb9b0, - 0xc8ad, 0xcba9, 0xded9, 0xbfbd, 0xc6b4, 0xd7a7, 0xcab0, 0xc4c3, - 0xb3d6, 0xb9d2, 0xd6b8, 0xeafc, 0xb0b4, 0xbfe6, 0xccf4, 0xcdda, - 0xd6bf, 0xc2ce, 0xcece, 0xcca2, 0xd0ae, 0xc4d3, 0xb5b2, 0xded8, - 0xd5f5, 0xbcb7, 0xbbd3, 0xb0a4, 0xc5b2, 0xb4ec, 0xd5f1, 0xeafd, - 0xdeda, 0xcda6, 0xcdec, 0xcee6, 0xdedc, 0xcdb1, 0xc0a6, 0xd7bd, - 0xdedb, 0xb0c6, 0xbab4, 0xc9d3, 0xc4f3, 0xbee8, 0xb2b6, 0xc0cc, - 0xcbf0, 0xbcf1, 0xbbbb, 0xb5b7, 0xc5f5, 0xdee6, 0xdee3, 0xbedd, - 0xdedf, 0xb4b7, 0xbddd, 0xdee0, 0xc4ed, 0xcfc6, 0xb5e0, 0xb6de, - 0xcada, 0xb5f4, 0xdee5, 0xd5c6, 0xdee1, 0xcccd, 0xc6fe, 0xc5c5, - 0xd2b4, 0xbef2, 0xc2d3, 0xccbd, 0xb3b8, 0xbdd3, 0xbfd8, 0xcdc6, - 0xd1da, 0xb4eb, 0xdee4, 0xdedd, 0xdee7, 0xeafe, 0xc2b0, 0xdee2, - 0xd6c0, 0xb5a7, 0xb2f4, 0xdee8, 0xdef2, 0xdeed, 0xdef1, 0xc8e0, - 0xd7e1, 0xdeef, 0xc3e8, 0xcce1, 0xb2e5, 0xd2be, 0xdeee, 0xdeeb, - 0xced5, 0xb4a7, 0xbfab, 0xbebe, 0xbdd2, 0xdee9, 0xd4ae, 0xdede, - 0xdeea, 0xc0bf, 0xdeec, 0xb2f3, 0xb8e9, 0xc2a7, 0xbdc1, 0xdef5, - 0xdef8, 0xb2ab, 0xb4a4, 0xb4ea, 0xc9a6, 0xdef6, 0xcbd1, 0xb8e3, - 0xdef7, 0xdefa, 0xdef9, 0xccc2, 0xb0e1, 0xb4ee, 0xe5ba, 0xd0af, - 0xb2eb, 0xeba1, 0xdef4, 0xc9e3, 0xdef3, 0xb0da, 0xd2a1, 0xb1f7, - 0xccaf, 0xdef0, 0xcba4, 0xd5aa, 0xdefb, 0xb4dd, 0xc4a6, 0xdefd, - 0xc3fe, 0xc4a1, 0xdfa1, 0xc1cc, 0xdefc, 0xbeef, 0xc6b2, 0xb3c5, - 0xc8f6, 0xcbba, 0xdefe, 0xdfa4, 0xd7b2, 0xb3b7, 0xc1c3, 0xc7cb, - 0xb2a5, 0xb4e9, 0xd7ab, 0xc4ec, 0xdfa2, 0xdfa3, 0xdfa5, 0xbab3, - 0xdfa6, 0xc0de, 0xc9c3, 0xb2d9, 0xc7e6, 0xdfa7, 0xc7dc, 0xdfa8, - 0xeba2, 0xcbd3, 0xdfaa, 0xdfa9, 0xb2c1, 0xc5ca, 0xdfab, 0xd4dc, - 0xc8c1, 0xdfac, 0xbef0, 0xdfad, 0xd6a7, 0xeab7, 0xebb6, 0xcad5, - 0xd8fc, 0xb8c4, 0xb9a5, 0xb7c5, 0xd5fe, 0xb9ca, 0xd0a7, 0xf4cd, - 0xb5d0, 0xc3f4, 0xbec8, 0xebb7, 0xb0bd, 0xbdcc, 0xc1b2, 0xb1d6, - 0xb3a8, 0xb8d2, 0xc9a2, 0xb6d8, 0xebb8, 0xbeb4, 0xcafd, 0xc7c3, - 0xd5fb, 0xb7f3, 0xcec4, 0xd5ab, 0xb1f3, 0xecb3, 0xb0df, 0xecb5, - 0xb6b7, 0xc1cf, 0xf5fa, 0xd0b1, 0xd5e5, 0xced3, 0xbdef, 0xb3e2, - 0xb8ab, 0xd5b6, 0xedbd, 0xb6cf, 0xcbb9, 0xd0c2, 0xb7bd, 0xecb6, - 0xcaa9, 0xc5d4, 0xecb9, 0xecb8, 0xc2c3, 0xecb7, 0xd0fd, 0xecba, - 0xecbb, 0xd7e5, 0xecbc, 0xecbd, 0xc6ec, 0xcede, 0xbcc8, 0xc8d5, - 0xb5a9, 0xbec9, 0xd6bc, 0xd4e7, 0xd1ae, 0xd0f1, 0xeab8, 0xeab9, - 0xeaba, 0xbab5, 0xcab1, 0xbff5, 0xcdfa, 0xeac0, 0xb0ba, 0xeabe, - 0xc0a5, 0xeabb, 0xb2fd, 0xc3f7, 0xbbe8, 0xd2d7, 0xcef4, 0xeabf, - 0xeabc, 0xeac3, 0xd0c7, 0xd3b3, 0xb4ba, 0xc3c1, 0xd7f2, 0xd5d1, - 0xcac7, 0xeac5, 0xeac4, 0xeac7, 0xeac6, 0xd6e7, 0xcfd4, 0xeacb, - 0xbbce, 0xbdfa, 0xc9ce, 0xeacc, 0xc9b9, 0xcffe, 0xeaca, 0xd4ce, - 0xeacd, 0xeacf, 0xcded, 0xeac9, 0xeace, 0xceee, 0xbbde, 0xb3bf, - 0xc6d5, 0xbeb0, 0xcefa, 0xc7e7, 0xbea7, 0xead0, 0xd6c7, 0xc1c0, - 0xd4dd, 0xead1, 0xcfbe, 0xead2, 0xcaee, 0xc5af, 0xb0b5, 0xead4, - 0xead3, 0xf4df, 0xc4ba, 0xb1a9, 0xe5df, 0xead5, 0xcaef, 0xead6, - 0xead7, 0xc6d8, 0xead8, 0xead9, 0xd4bb, 0xc7fa, 0xd2b7, 0xb8fc, - 0xeac2, 0xb2dc, 0xc2fc, 0xd4f8, 0xcce6, 0xd7ee, 0xd4c2, 0xd3d0, - 0xebc3, 0xc5f3, 0xb7fe, 0xebd4, 0xcbb7, 0xebde, 0xc0ca, 0xcdfb, - 0xb3af, 0xc6da, 0xebfc, 0xc4be, 0xceb4, 0xc4a9, 0xb1be, 0xd4fd, - 0xcaf5, 0xd6ec, 0xc6d3, 0xb6e4, 0xbbfa, 0xd0e0, 0xc9b1, 0xd4d3, - 0xc8a8, 0xb8cb, 0xe8be, 0xc9bc, 0xe8bb, 0xc0ee, 0xd0d3, 0xb2c4, - 0xb4e5, 0xe8bc, 0xd5c8, 0xb6c5, 0xe8bd, 0xcaf8, 0xb8dc, 0xccf5, - 0xc0b4, 0xd1ee, 0xe8bf, 0xe8c2, 0xbabc, 0xb1ad, 0xbddc, 0xeabd, - 0xe8c3, 0xe8c6, 0xe8cb, 0xe8cc, 0xcbc9, 0xb0e5, 0xbcab, 0xb9b9, - 0xe8c1, 0xcdf7, 0xe8ca, 0xcef6, 0xd5ed, 0xc1d6, 0xe8c4, 0xc3b6, - 0xb9fb, 0xd6a6, 0xe8c8, 0xcae0, 0xd4e6, 0xe8c0, 0xe8c5, 0xe8c7, - 0xc7b9, 0xb7e3, 0xe8c9, 0xbfdd, 0xe8d2, 0xe8d7, 0xe8d5, 0xbcdc, - 0xbccf, 0xe8db, 0xe8de, 0xe8da, 0xb1fa, 0xb0d8, 0xc4b3, 0xb8cc, - 0xc6e2, 0xc8be, 0xc8e1, 0xe8cf, 0xe8d4, 0xe8d6, 0xb9f1, 0xe8d8, - 0xd7f5, 0xc4fb, 0xe8dc, 0xb2e9, 0xe8d1, 0xbced, 0xbfc2, 0xe8cd, - 0xd6f9, 0xc1f8, 0xb2f1, 0xe8df, 0xcac1, 0xe8d9, 0xd5a4, 0xb1ea, - 0xd5bb, 0xe8ce, 0xe8d0, 0xb6b0, 0xe8d3, 0xe8dd, 0xc0b8, 0xcaf7, - 0xcba8, 0xc6dc, 0xc0f5, 0xe8e9, 0xd0a3, 0xe8f2, 0xd6ea, 0xe8e0, - 0xe8e1, 0xd1f9, 0xbacb, 0xb8f9, 0xb8f1, 0xd4d4, 0xe8ef, 0xe8ee, - 0xe8ec, 0xb9f0, 0xccd2, 0xe8e6, 0xcea6, 0xbff2, 0xb0b8, 0xe8f1, - 0xe8f0, 0xd7c0, 0xe8e4, 0xcda9, 0xc9a3, 0xbbb8, 0xbddb, 0xe8ea, - 0xe8e2, 0xe8e3, 0xe8e5, 0xb5b5, 0xe8e7, 0xc7c5, 0xe8eb, 0xe8ed, - 0xbdb0, 0xd7ae, 0xe8f8, 0xe8f5, 0xcdb0, 0xe8f6, 0xc1ba, 0xe8e8, - 0xc3b7, 0xb0f0, 0xe8f4, 0xe8f7, 0xb9a3, 0xc9d2, 0xc3ce, 0xcee0, - 0xc0e6, 0xcbf3, 0xccdd, 0xd0b5, 0xcae1, 0xe8f3, 0xbcec, 0xe8f9, - 0xc3de, 0xc6e5, 0xb9f7, 0xb0f4, 0xd7d8, 0xbcac, 0xc5ef, 0xccc4, - 0xe9a6, 0xc9ad, 0xe9a2, 0xc0e2, 0xbfc3, 0xe8fe, 0xb9d7, 0xe8fb, - 0xe9a4, 0xd2ce, 0xe9a3, 0xd6b2, 0xd7b5, 0xe9a7, 0xbdb7, 0xe8fc, - 0xe8fd, 0xe9a1, 0xcdd6, 0xd2ac, 0xe9b2, 0xe9a9, 0xb4aa, 0xb4bb, - 0xe9ab, 0xd0a8, 0xe9a5, 0xb3fe, 0xe9ac, 0xc0e3, 0xe9aa, 0xe9b9, - 0xe9b8, 0xe9ae, 0xe8fa, 0xe9a8, 0xbfac, 0xe9b1, 0xe9ba, 0xc2a5, - 0xe9af, 0xb8c5, 0xe9ad, 0xd3dc, 0xe9b4, 0xe9b5, 0xe9b7, 0xe9c7, - 0xc0c6, 0xe9c5, 0xe9b0, 0xe9bb, 0xb0f1, 0xe9bc, 0xd5a5, 0xe9be, - 0xe9bf, 0xe9c1, 0xc1f1, 0xc8b6, 0xe9bd, 0xe9c2, 0xe9c3, 0xe9b3, - 0xe9b6, 0xbbb1, 0xe9c0, 0xbcf7, 0xe9c4, 0xe9c6, 0xe9ca, 0xe9ce, - 0xb2db, 0xe9c8, 0xb7ae, 0xe9cb, 0xe9cc, 0xd5c1, 0xc4a3, 0xe9d8, - 0xbae1, 0xe9c9, 0xd3a3, 0xe9d4, 0xe9d7, 0xe9d0, 0xe9cf, 0xc7c1, - 0xe9d2, 0xe9d9, 0xb3c8, 0xe9d3, 0xcff0, 0xe9cd, 0xb3f7, 0xe9d6, - 0xe9da, 0xccb4, 0xcfad, 0xe9d5, 0xe9dc, 0xe9db, 0xe9de, 0xe9d1, - 0xe9dd, 0xe9df, 0xc3ca, 0xc7b7, 0xb4ce, 0xbbb6, 0xd0c0, 0xeca3, - 0xc5b7, 0xd3fb, 0xeca4, 0xeca5, 0xc6db, 0xbfee, 0xeca6, 0xeca7, - 0xd0aa, 0xc7b8, 0xb8e8, 0xeca8, 0xd6b9, 0xd5fd, 0xb4cb, 0xb2bd, - 0xcee4, 0xc6e7, 0xcde1, 0xb4f5, 0xcbc0, 0xbcdf, 0xe9e2, 0xe9e3, - 0xd1ea, 0xe9e5, 0xb4f9, 0xe9e4, 0xd1b3, 0xcae2, 0xb2d0, 0xe9e8, - 0xe9e6, 0xe9e7, 0xd6b3, 0xe9e9, 0xe9ea, 0xe9eb, 0xe9ec, 0xecaf, - 0xc5b9, 0xb6ce, 0xd2f3, 0xb5ee, 0xbbd9, 0xecb1, 0xd2e3, 0xcee3, - 0xc4b8, 0xc3bf, 0xb6be, 0xd8b9, 0xb1c8, 0xb1cf, 0xb1d1, 0xc5fe, - 0xb1d0, 0xc3ab, 0xd5b1, 0xeba4, 0xbac1, 0xccba, 0xeba5, 0xeba7, - 0xeba8, 0xeba6, 0xeba9, 0xebab, 0xebaa, 0xebac, 0xcacf, 0xd8b5, - 0xc3f1, 0xc3a5, 0xc6f8, 0xebad, 0xc4ca, 0xebae, 0xebaf, 0xebb0, - 0xb7d5, 0xb7fa, 0xebb1, 0xc7e2, 0xebb3, 0xbaa4, 0xd1f5, 0xb0b1, - 0xebb2, 0xebb4, 0xb5aa, 0xc2c8, 0xc7e8, 0xebb5, 0xcbae, 0xe3df, - 0xd3c0, 0xd9db, 0xcda1, 0xd6ad, 0xc7f3, 0xd9e0, 0xbbe3, 0xbaba, - 0xe3e2, 0xcfab, 0xe3e0, 0xc9c7, 0xbab9, 0xd1b4, 0xe3e1, 0xc8ea, - 0xb9af, 0xbdad, 0xb3d8, 0xcedb, 0xccc0, 0xe3e8, 0xe3e9, 0xcdf4, - 0xccad, 0xbcb3, 0xe3ea, 0xe3eb, 0xd0da, 0xc6fb, 0xb7da, 0xc7df, - 0xd2ca, 0xced6, 0xe3e4, 0xe3ec, 0xc9f2, 0xb3c1, 0xe3e7, 0xc6e3, - 0xe3e5, 0xedb3, 0xe3e6, 0xc9b3, 0xc5e6, 0xb9b5, 0xc3bb, 0xe3e3, - 0xc5bd, 0xc1a4, 0xc2d9, 0xb2d7, 0xe3ed, 0xbba6, 0xc4ad, 0xe3f0, - 0xbeda, 0xe3fb, 0xe3f5, 0xbad3, 0xb7d0, 0xd3cd, 0xd6ce, 0xd5d3, - 0xb9c1, 0xd5b4, 0xd1d8, 0xd0b9, 0xc7f6, 0xc8aa, 0xb2b4, 0xc3da, - 0xe3ee, 0xe3fc, 0xe3ef, 0xb7a8, 0xe3f7, 0xe3f4, 0xb7ba, 0xc5a2, - 0xe3f6, 0xc5dd, 0xb2a8, 0xc6fc, 0xc4e0, 0xd7a2, 0xc0e1, 0xe3f9, - 0xe3fa, 0xe3fd, 0xcca9, 0xe3f3, 0xd3be, 0xb1c3, 0xedb4, 0xe3f1, - 0xe3f2, 0xe3f8, 0xd0ba, 0xc6c3, 0xd4f3, 0xe3fe, 0xbde0, 0xe4a7, - 0xe4a6, 0xd1f3, 0xe4a3, 0xe4a9, 0xc8f7, 0xcfb4, 0xe4a8, 0xe4ae, - 0xc2e5, 0xb6b4, 0xbdf2, 0xe4a2, 0xbae9, 0xe4aa, 0xe4ac, 0xb6fd, - 0xd6de, 0xe4b2, 0xe4ad, 0xe4a1, 0xbbee, 0xcddd, 0xc7a2, 0xc5c9, - 0xc1f7, 0xe4a4, 0xc7b3, 0xbdac, 0xbdbd, 0xe4a5, 0xd7c7, 0xb2e2, - 0xe4ab, 0xbcc3, 0xe4af, 0xbbeb, 0xe4b0, 0xc5a8, 0xe4b1, 0xd5e3, - 0xbfa3, 0xe4ba, 0xe4b7, 0xe4bb, 0xe4bd, 0xc6d6, 0xbac6, 0xc0cb, - 0xb8a1, 0xe4b4, 0xd4a1, 0xbaa3, 0xbdfe, 0xe4bc, 0xcdbf, 0xc4f9, - 0xcffb, 0xc9e6, 0xd3bf, 0xcfd1, 0xe4b3, 0xe4b8, 0xe4b9, 0xcce9, - 0xccce, 0xc0d4, 0xe4b5, 0xc1b0, 0xe4b6, 0xced0, 0xbbc1, 0xb5d3, - 0xc8f3, 0xbda7, 0xd5c7, 0xc9ac, 0xb8a2, 0xe4ca, 0xe4cc, 0xd1c4, - 0xd2ba, 0xbaad, 0xbad4, 0xe4c3, 0xb5ed, 0xd7cd, 0xe4c0, 0xcffd, - 0xe4bf, 0xc1dc, 0xccca, 0xcae7, 0xc4d7, 0xccd4, 0xe4c8, 0xe4c7, - 0xe4c1, 0xe4c4, 0xb5ad, 0xd3d9, 0xe4c6, 0xd2f9, 0xb4e3, 0xbbb4, - 0xc9ee, 0xb4be, 0xbbec, 0xd1cd, 0xcced, 0xedb5, 0xc7e5, 0xd4a8, - 0xe4cb, 0xd7d5, 0xe4c2, 0xbda5, 0xe4c5, 0xd3e6, 0xe4c9, 0xc9f8, - 0xe4be, 0xd3e5, 0xc7fe, 0xb6c9, 0xd4fc, 0xb2b3, 0xe4d7, 0xcec2, - 0xe4cd, 0xcebc, 0xb8db, 0xe4d6, 0xbfca, 0xd3ce, 0xc3ec, 0xc5c8, - 0xe4d8, 0xcdc4, 0xe4cf, 0xe4d4, 0xe4d5, 0xbafe, 0xcfe6, 0xd5bf, - 0xe4d2, 0xe4d0, 0xe4ce, 0xcde5, 0xcaaa, 0xc0a3, 0xbda6, 0xe4d3, - 0xb8c8, 0xe4e7, 0xd4b4, 0xe4db, 0xc1ef, 0xe4e9, 0xd2e7, 0xe4df, - 0xe4e0, 0xcfaa, 0xcbdd, 0xe4da, 0xe4d1, 0xe4e5, 0xc8dc, 0xe4e3, - 0xc4e7, 0xe4e2, 0xe4e1, 0xb3fc, 0xe4e8, 0xb5e1, 0xd7cc, 0xe4e6, - 0xbbac, 0xd7d2, 0xcccf, 0xebf8, 0xe4e4, 0xb9f6, 0xd6cd, 0xe4d9, - 0xe4dc, 0xc2fa, 0xe4de, 0xc2cb, 0xc0c4, 0xc2d0, 0xb1f5, 0xccb2, - 0xb5ce, 0xe4ef, 0xc6af, 0xc6e1, 0xe4f5, 0xc2a9, 0xc0ec, 0xd1dd, - 0xe4ee, 0xc4ae, 0xe4ed, 0xe4f6, 0xe4f4, 0xc2fe, 0xe4dd, 0xe4f0, - 0xcafe, 0xd5c4, 0xe4f1, 0xd1fa, 0xe4eb, 0xe4ec, 0xe4f2, 0xceab, - 0xc5cb, 0xc7b1, 0xc2ba, 0xe4ea, 0xc1ca, 0xccb6, 0xb3b1, 0xe4fb, - 0xe4f3, 0xe4fa, 0xe4fd, 0xe4fc, 0xb3ce, 0xb3ba, 0xe4f7, 0xe4f9, - 0xe4f8, 0xc5ec, 0xc0bd, 0xd4e8, 0xe5a2, 0xb0c4, 0xe5a4, 0xe5a3, - 0xbca4, 0xe5a5, 0xe5a1, 0xe4fe, 0xb1f4, 0xe5a8, 0xe5a9, 0xe5a6, - 0xe5a7, 0xe5aa, 0xc6d9, 0xe5ab, 0xe5ad, 0xe5ac, 0xe5af, 0xe5ae, - 0xb9e0, 0xe5b0, 0xe5b1, 0xbbf0, 0xece1, 0xc3f0, 0xb5c6, 0xbbd2, - 0xc1e9, 0xd4ee, 0xbec4, 0xd7c6, 0xd4d6, 0xb2d3, 0xecbe, 0xeac1, - 0xc2af, 0xb4b6, 0xd1d7, 0xb3b4, 0xc8b2, 0xbfbb, 0xecc0, 0xd6cb, - 0xecbf, 0xecc1, 0xecc5, 0xbee6, 0xccbf, 0xc5da, 0xbebc, 0xecc6, - 0xb1fe, 0xecc4, 0xd5a8, 0xb5e3, 0xecc2, 0xc1b6, 0xb3e3, 0xecc3, - 0xcbb8, 0xc0c3, 0xccfe, 0xc1d2, 0xecc8, 0xbae6, 0xc0d3, 0xd6f2, - 0xd1cc, 0xbfbe, 0xb7b3, 0xc9d5, 0xecc7, 0xbbe2, 0xcccc, 0xbdfd, - 0xc8c8, 0xcfa9, 0xcde9, 0xc5eb, 0xb7e9, 0xd1c9, 0xbab8, 0xecc9, - 0xecca, 0xbbc0, 0xeccb, 0xece2, 0xb1ba, 0xb7d9, 0xbdb9, 0xeccc, - 0xd1e6, 0xeccd, 0xc8bb, 0xecd1, 0xecd3, 0xbbcd, 0xbce5, 0xeccf, - 0xc9b7, 0xc3ba, 0xece3, 0xd5d5, 0xecd0, 0xd6f3, 0xecd2, 0xecce, - 0xecd4, 0xecd5, 0xc9bf, 0xcfa8, 0xd0dc, 0xd1ac, 0xc8db, 0xecd6, - 0xcef5, 0xcaec, 0xecda, 0xecd9, 0xb0be, 0xecd7, 0xecd8, 0xece4, - 0xc8bc, 0xc1c7, 0xecdc, 0xd1e0, 0xecdb, 0xd4ef, 0xecdd, 0xdbc6, - 0xecde, 0xb1ac, 0xecdf, 0xece0, 0xd7a6, 0xc5c0, 0xebbc, 0xb0ae, - 0xbef4, 0xb8b8, 0xd2af, 0xb0d6, 0xb5f9, 0xd8b3, 0xcbac, 0xe3dd, - 0xc6ac, 0xb0e6, 0xc5c6, 0xebb9, 0xebba, 0xebbb, 0xd1c0, 0xc5a3, - 0xeaf2, 0xc4b2, 0xc4b5, 0xc0ce, 0xeaf3, 0xc4c1, 0xceef, 0xeaf0, - 0xeaf4, 0xc9fc, 0xc7a3, 0xccd8, 0xcefe, 0xeaf5, 0xeaf6, 0xcfac, - 0xc0e7, 0xeaf7, 0xb6bf, 0xeaf8, 0xeaf9, 0xeafa, 0xeafb, 0xeaf1, - 0xc8ae, 0xe1eb, 0xb7b8, 0xe1ec, 0xe1ed, 0xd7b4, 0xe1ee, 0xe1ef, - 0xd3cc, 0xe1f1, 0xbff1, 0xe1f0, 0xb5d2, 0xb1b7, 0xe1f3, 0xe1f2, - 0xbafc, 0xe1f4, 0xb9b7, 0xbed1, 0xc4fc, 0xbadd, 0xbdc6, 0xe1f5, - 0xe1f7, 0xb6c0, 0xcfc1, 0xcaa8, 0xe1f6, 0xd5f8, 0xd3fc, 0xe1f8, - 0xe1fc, 0xe1f9, 0xe1fa, 0xc0ea, 0xe1fe, 0xe2a1, 0xc0c7, 0xe1fb, - 0xe1fd, 0xe2a5, 0xc1d4, 0xe2a3, 0xe2a8, 0xb2fe, 0xe2a2, 0xc3cd, - 0xb2c2, 0xe2a7, 0xe2a6, 0xe2a4, 0xe2a9, 0xe2ab, 0xd0c9, 0xd6ed, - 0xc3a8, 0xe2ac, 0xcfd7, 0xe2ae, 0xbaef, 0xe9e0, 0xe2ad, 0xe2aa, - 0xbbab, 0xd4b3, 0xe2b0, 0xe2af, 0xe9e1, 0xe2b1, 0xe2b2, 0xe2b3, - 0xcca1, 0xe2b4, 0xe2b5, 0xd0fe, 0xc2ca, 0xd3f1, 0xcdf5, 0xe7e0, - 0xe7e1, 0xbec1, 0xc2ea, 0xe7e4, 0xe7e3, 0xcde6, 0xc3b5, 0xe7e2, - 0xbbb7, 0xcfd6, 0xc1e1, 0xe7e9, 0xe7e8, 0xe7f4, 0xb2a3, 0xe7ea, - 0xe7e6, 0xe7ec, 0xe7eb, 0xc9ba, 0xd5e4, 0xe7e5, 0xb7a9, 0xe7e7, - 0xe7ee, 0xe7f3, 0xd6e9, 0xe7ed, 0xe7f2, 0xe7f1, 0xb0e0, 0xe7f5, - 0xc7f2, 0xc0c5, 0xc0ed, 0xc1f0, 0xe7f0, 0xe7f6, 0xcbf6, 0xe8a2, - 0xe8a1, 0xd7c1, 0xe7fa, 0xe7f9, 0xe7fb, 0xe7f7, 0xe7fe, 0xe7fd, - 0xe7fc, 0xc1d5, 0xc7d9, 0xc5fd, 0xc5c3, 0xc7ed, 0xe8a3, 0xe8a6, - 0xe8a5, 0xe8a7, 0xbaf7, 0xe7f8, 0xe8a4, 0xc8f0, 0xc9aa, 0xe8a9, - 0xb9e5, 0xd1fe, 0xe8a8, 0xe8aa, 0xe8ad, 0xe8ae, 0xc1a7, 0xe8af, - 0xe8b0, 0xe8ac, 0xe8b4, 0xe8ab, 0xe8b1, 0xe8b5, 0xe8b2, 0xe8b3, - 0xe8b7, 0xe8b6, 0xb9cf, 0xf0ac, 0xf0ad, 0xc6b0, 0xb0ea, 0xc8bf, - 0xcddf, 0xcecd, 0xeab1, 0xeab2, 0xc6bf, 0xb4c9, 0xeab3, 0xd5e7, - 0xddf9, 0xeab4, 0xeab5, 0xeab6, 0xb8ca, 0xdfb0, 0xc9f5, 0xccf0, - 0xc9fa, 0xc9fb, 0xd3c3, 0xcba6, 0xb8a6, 0xf0ae, 0xb1c2, 0xe5b8, - 0xccef, 0xd3c9, 0xbcd7, 0xc9ea, 0xb5e7, 0xc4d0, 0xb5e9, 0xeeae, - 0xbbad, 0xe7de, 0xeeaf, 0xb3a9, 0xeeb2, 0xeeb1, 0xbde7, 0xeeb0, - 0xceb7, 0xc5cf, 0xc1f4, 0xdbce, 0xeeb3, 0xd0f3, 0xc2d4, 0xc6e8, - 0xb7ac, 0xeeb4, 0xb3eb, 0xbbfb, 0xeeb5, 0xe7dc, 0xeeb6, 0xbdae, - 0xf1e2, 0xcae8, 0xd2c9, 0xf0da, 0xf0db, 0xf0dc, 0xc1c6, 0xb8ed, - 0xbece, 0xf0de, 0xc5b1, 0xf0dd, 0xd1f1, 0xf0e0, 0xb0cc, 0xbdea, - 0xd2df, 0xf0df, 0xb4af, 0xb7e8, 0xf0e6, 0xf0e5, 0xc6a3, 0xf0e1, - 0xf0e2, 0xb4c3, 0xf0e3, 0xd5ee, 0xccdb, 0xbed2, 0xbcb2, 0xf0e8, - 0xf0e7, 0xf0e4, 0xb2a1, 0xd6a2, 0xd3b8, 0xbeb7, 0xc8ac, 0xf0ea, - 0xd1f7, 0xd6cc, 0xbadb, 0xf0e9, 0xb6bb, 0xcdb4, 0xc6a6, 0xc1a1, - 0xf0eb, 0xf0ee, 0xf0ed, 0xf0f0, 0xf0ec, 0xbbbe, 0xf0ef, 0xccb5, - 0xf0f2, 0xb3d5, 0xb1d4, 0xf0f3, 0xf0f4, 0xf0f6, 0xb4e1, 0xf0f1, - 0xf0f7, 0xf0fa, 0xf0f8, 0xf0f5, 0xf0fd, 0xf0f9, 0xf0fc, 0xf0fe, - 0xf1a1, 0xcec1, 0xf1a4, 0xf1a3, 0xc1f6, 0xf0fb, 0xcadd, 0xb4f1, - 0xb1f1, 0xccb1, 0xf1a6, 0xf1a7, 0xf1ac, 0xd5ce, 0xf1a9, 0xc8b3, - 0xf1a2, 0xf1ab, 0xf1a8, 0xf1a5, 0xf1aa, 0xb0a9, 0xf1ad, 0xf1af, - 0xf1b1, 0xf1b0, 0xf1ae, 0xd1a2, 0xf1b2, 0xf1b3, 0xb9ef, 0xb5c7, - 0xb0d7, 0xb0d9, 0xd4ed, 0xb5c4, 0xbdd4, 0xbbca, 0xf0a7, 0xb8de, - 0xf0a8, 0xb0a8, 0xf0a9, 0xcdee, 0xf0aa, 0xf0ab, 0xc6a4, 0xd6e5, - 0xf1e4, 0xf1e5, 0xc3f3, 0xd3db, 0xd6d1, 0xc5e8, 0xd3af, 0xd2e6, - 0xeec1, 0xb0bb, 0xd5b5, 0xd1ce, 0xbce0, 0xbad0, 0xbff8, 0xb8c7, - 0xb5c1, 0xc5cc, 0xcaa2, 0xc3cb, 0xeec2, 0xc4bf, 0xb6a2, 0xedec, - 0xc3a4, 0xd6b1, 0xcfe0, 0xedef, 0xc5ce, 0xb6dc, 0xcaa1, 0xeded, - 0xedf0, 0xedf1, 0xc3bc, 0xbfb4, 0xedee, 0xedf4, 0xedf2, 0xd5e6, - 0xc3df, 0xedf3, 0xedf6, 0xd5a3, 0xd1a3, 0xedf5, 0xc3d0, 0xedf7, - 0xbff4, 0xbeec, 0xedf8, 0xccf7, 0xd1db, 0xd7c5, 0xd5f6, 0xedfc, - 0xedfb, 0xedf9, 0xedfa, 0xedfd, 0xbea6, 0xcbaf, 0xeea1, 0xb6bd, - 0xeea2, 0xc4c0, 0xedfe, 0xbdde, 0xb2c7, 0xb6c3, 0xeea5, 0xd8ba, - 0xeea3, 0xeea6, 0xc3e9, 0xb3f2, 0xeea7, 0xeea4, 0xcfb9, 0xeea8, - 0xc2f7, 0xeea9, 0xeeaa, 0xdeab, 0xc6b3, 0xc7c6, 0xd6f5, 0xb5c9, - 0xcbb2, 0xeeab, 0xcdab, 0xeeac, 0xd5b0, 0xeead, 0xf6c4, 0xdbc7, - 0xb4a3, 0xc3ac, 0xf1e6, 0xcab8, 0xd2d3, 0xd6aa, 0xeff2, 0xbed8, - 0xbdc3, 0xeff3, 0xb6cc, 0xb0ab, 0xcaaf, 0xedb6, 0xedb7, 0xcef9, - 0xb7af, 0xbff3, 0xedb8, 0xc2eb, 0xc9b0, 0xedb9, 0xc6f6, 0xbfb3, - 0xedbc, 0xc5f8, 0xd1d0, 0xd7a9, 0xedba, 0xedbb, 0xd1e2, 0xedbf, - 0xedc0, 0xedc4, 0xedc8, 0xedc6, 0xedce, 0xd5e8, 0xedc9, 0xedc7, - 0xedbe, 0xc5e9, 0xc6c6, 0xc9e9, 0xd4d2, 0xedc1, 0xedc2, 0xedc3, - 0xedc5, 0xc0f9, 0xb4a1, 0xb9e8, 0xedd0, 0xedd1, 0xedca, 0xedcf, - 0xcef8, 0xcbb6, 0xedcc, 0xedcd, 0xcff5, 0xedd2, 0xc1f2, 0xd3b2, - 0xedcb, 0xc8b7, 0xbcef, 0xc5f0, 0xedd6, 0xb5ef, 0xc2b5, 0xb0ad, - 0xcbe9, 0xb1ae, 0xedd4, 0xcdeb, 0xb5e2, 0xedd5, 0xedd3, 0xedd7, - 0xb5fa, 0xedd8, 0xedd9, 0xeddc, 0xb1cc, 0xc5f6, 0xbcee, 0xedda, - 0xccbc, 0xb2ea, 0xeddb, 0xc4eb, 0xb4c5, 0xb0f5, 0xeddf, 0xc0da, - 0xb4e8, 0xc5cd, 0xeddd, 0xbfc4, 0xedde, 0xc4a5, 0xede0, 0xede1, - 0xede3, 0xc1d7, 0xbbc7, 0xbdb8, 0xede2, 0xede4, 0xede6, 0xede5, - 0xede7, 0xcabe, 0xecea, 0xc0f1, 0xc9e7, 0xeceb, 0xc6ee, 0xecec, - 0xc6ed, 0xeced, 0xecf0, 0xd7e6, 0xecf3, 0xecf1, 0xecee, 0xecef, - 0xd7a3, 0xc9f1, 0xcbee, 0xecf4, 0xecf2, 0xcfe9, 0xecf6, 0xc6b1, - 0xbcc0, 0xecf5, 0xb5bb, 0xbbf6, 0xecf7, 0xd9f7, 0xbdfb, 0xc2bb, - 0xecf8, 0xecf9, 0xb8a3, 0xecfa, 0xecfb, 0xecfc, 0xd3ed, 0xd8ae, - 0xc0eb, 0xc7dd, 0xbacc, 0xd0e3, 0xcbbd, 0xcdba, 0xb8d1, 0xb1fc, - 0xc7ef, 0xd6d6, 0xbfc6, 0xc3eb, 0xeff5, 0xc3d8, 0xd7e2, 0xeff7, - 0xb3d3, 0xc7d8, 0xd1ed, 0xd6c8, 0xeff8, 0xeff6, 0xbbfd, 0xb3c6, - 0xbdd5, 0xd2c6, 0xbbe0, 0xcfa1, 0xeffc, 0xeffb, 0xeff9, 0xb3cc, - 0xc9d4, 0xcbb0, 0xeffe, 0xb0de, 0xd6c9, 0xeffd, 0xb3ed, 0xf6d5, - 0xcec8, 0xf0a2, 0xf0a1, 0xb5be, 0xbcda, 0xbbfc, 0xb8e5, 0xc4c2, - 0xf0a3, 0xcbeb, 0xf0a6, 0xd1a8, 0xbebf, 0xc7ee, 0xf1b6, 0xf1b7, - 0xbfd5, 0xb4a9, 0xf1b8, 0xcdbb, 0xc7d4, 0xd5ad, 0xf1b9, 0xf1ba, - 0xc7cf, 0xd2a4, 0xd6cf, 0xf1bb, 0xbdd1, 0xb4b0, 0xbebd, 0xb4dc, - 0xced1, 0xbfdf, 0xf1bd, 0xbffa, 0xf1bc, 0xf1bf, 0xf1be, 0xf1c0, - 0xf1c1, 0xc1fe, 0xc1a2, 0xcafa, 0xd5be, 0xbeba, 0xbeb9, 0xd5c2, - 0xbfa2, 0xcdaf, 0xf1b5, 0xbddf, 0xb6cb, 0xd6f1, 0xf3c3, 0xf3c4, - 0xb8cd, 0xf3c6, 0xf3c7, 0xb0ca, 0xf3c5, 0xf3c9, 0xcbf1, 0xf3cb, - 0xd0a6, 0xb1ca, 0xf3c8, 0xf3cf, 0xb5d1, 0xf3d7, 0xf3d2, 0xf3d4, - 0xf3d3, 0xb7fb, 0xb1bf, 0xf3ce, 0xf3ca, 0xb5da, 0xf3d0, 0xf3d1, - 0xf3d5, 0xf3cd, 0xbce3, 0xc1fd, 0xf3d6, 0xf3da, 0xf3cc, 0xb5c8, - 0xbdee, 0xf3dc, 0xb7a4, 0xbff0, 0xd6fe, 0xcdb2, 0xb4f0, 0xb2df, - 0xf3d8, 0xf3d9, 0xc9b8, 0xf3dd, 0xf3de, 0xf3e1, 0xf3df, 0xf3e3, - 0xf3e2, 0xf3db, 0xbfea, 0xb3ef, 0xf3e0, 0xc7a9, 0xbcf2, 0xf3eb, - 0xb9bf, 0xf3e4, 0xb2ad, 0xbbfe, 0xcbe3, 0xf3ed, 0xf3e9, 0xb9dc, - 0xf3ee, 0xf3e5, 0xf3e6, 0xf3ea, 0xc2e1, 0xf3ec, 0xf3ef, 0xf3e8, - 0xbcfd, 0xcfe4, 0xf3f0, 0xf3e7, 0xf3f2, 0xd7ad, 0xc6aa, 0xf3f3, - 0xf3f1, 0xc2a8, 0xb8dd, 0xf3f5, 0xf3f4, 0xb4db, 0xf3f6, 0xf3f7, - 0xf3f8, 0xc0ba, 0xc0e9, 0xc5f1, 0xf3fb, 0xf3fa, 0xb4d8, 0xf3fe, - 0xf3f9, 0xf3fc, 0xf3fd, 0xf4a1, 0xf4a3, 0xbbc9, 0xf4a2, 0xf4a4, - 0xb2be, 0xf4a6, 0xf4a5, 0xbcae, 0xc3d7, 0xd9e1, 0xc0e0, 0xf4cc, - 0xd7d1, 0xb7db, 0xf4ce, 0xc1a3, 0xc6c9, 0xb4d6, 0xd5b3, 0xf4d0, - 0xf4cf, 0xf4d1, 0xcbda, 0xf4d2, 0xd4c1, 0xd6e0, 0xb7e0, 0xc1b8, - 0xc1bb, 0xf4d3, 0xbeac, 0xb4e2, 0xf4d4, 0xf4d5, 0xbeab, 0xf4d6, - 0xf4db, 0xf4d7, 0xf4da, 0xbafd, 0xf4d8, 0xf4d9, 0xb8e2, 0xccc7, - 0xf4dc, 0xb2da, 0xc3d3, 0xd4e3, 0xbfb7, 0xf4dd, 0xc5b4, 0xf4e9, - 0xcfb5, 0xcec9, 0xcbd8, 0xcbf7, 0xbdf4, 0xd7cf, 0xc0db, 0xd0f5, - 0xf4ea, 0xf4eb, 0xf4ec, 0xf7e3, 0xb7b1, 0xf4ed, 0xd7eb, 0xf4ee, - 0xe6f9, 0xbec0, 0xe6fa, 0xbaec, 0xe6fb, 0xcfcb, 0xe6fc, 0xd4bc, - 0xbcb6, 0xe6fd, 0xe6fe, 0xbccd, 0xc8d2, 0xceb3, 0xe7a1, 0xb4bf, - 0xe7a2, 0xc9b4, 0xb8d9, 0xc4c9, 0xd7dd, 0xc2da, 0xb7d7, 0xd6bd, - 0xcec6, 0xb7c4, 0xc5a6, 0xe7a3, 0xcfdf, 0xe7a4, 0xe7a5, 0xe7a6, - 0xc1b7, 0xd7e9, 0xc9f0, 0xcfb8, 0xd6af, 0xd6d5, 0xe7a7, 0xb0ed, - 0xe7a8, 0xe7a9, 0xc9dc, 0xd2ef, 0xbead, 0xe7aa, 0xb0f3, 0xc8de, - 0xbde1, 0xe7ab, 0xc8c6, 0xe7ac, 0xbbe6, 0xb8f8, 0xd1a4, 0xe7ad, - 0xc2e7, 0xbef8, 0xbdca, 0xcdb3, 0xe7ae, 0xe7af, 0xbeee, 0xd0e5, - 0xcbe7, 0xccd0, 0xbccc, 0xe7b0, 0xbca8, 0xd0f7, 0xe7b1, 0xd0f8, - 0xe7b2, 0xe7b3, 0xb4c2, 0xe7b4, 0xe7b5, 0xc9fe, 0xceac, 0xc3e0, - 0xe7b7, 0xb1c1, 0xb3f1, 0xe7b8, 0xe7b9, 0xd7db, 0xd5c0, 0xe7ba, - 0xc2cc, 0xd7ba, 0xe7bb, 0xe7bc, 0xe7bd, 0xbcea, 0xc3e5, 0xc0c2, - 0xe7be, 0xe7bf, 0xbca9, 0xe7c0, 0xe7c1, 0xe7b6, 0xb6d0, 0xe7c2, - 0xe7c3, 0xe7c4, 0xbbba, 0xb5de, 0xc2c6, 0xb1e0, 0xe7c5, 0xd4b5, - 0xe7c6, 0xb8bf, 0xe7c8, 0xe7c7, 0xb7ec, 0xe7c9, 0xb2f8, 0xe7ca, - 0xe7cb, 0xe7cc, 0xe7cd, 0xe7ce, 0xe7cf, 0xe7d0, 0xd3a7, 0xcbf5, - 0xe7d1, 0xe7d2, 0xe7d3, 0xe7d4, 0xc9c9, 0xe7d5, 0xe7d6, 0xe7d7, - 0xe7d8, 0xe7d9, 0xbdc9, 0xe7da, 0xf3be, 0xb8d7, 0xc8b1, 0xf3bf, - 0xf3c0, 0xf3c1, 0xb9de, 0xcdf8, 0xd8e8, 0xbab1, 0xc2de, 0xeeb7, - 0xb7a3, 0xeeb9, 0xeeb8, 0xb0d5, 0xeebb, 0xd5d6, 0xd7ef, 0xd6c3, - 0xeebd, 0xcaf0, 0xeebc, 0xeebe, 0xeec0, 0xeebf, 0xd1f2, 0xc7bc, - 0xc3c0, 0xb8e1, 0xc1e7, 0xf4c6, 0xd0df, 0xf4c7, 0xcfdb, 0xc8ba, - 0xf4c8, 0xf4c9, 0xf4ca, 0xf4cb, 0xd9fa, 0xb8fe, 0xe5f1, 0xd3f0, - 0xf4e0, 0xcecc, 0xb3e1, 0xf1b4, 0xd2ee, 0xf4e1, 0xcfe8, 0xf4e2, - 0xc7cc, 0xb5d4, 0xb4e4, 0xf4e4, 0xf4e3, 0xf4e5, 0xf4e6, 0xf4e7, - 0xbab2, 0xb0bf, 0xf4e8, 0xb7ad, 0xd2ed, 0xd2ab, 0xc0cf, 0xbfbc, - 0xeba3, 0xd5df, 0xeac8, 0xf1f3, 0xb6f8, 0xcba3, 0xc4cd, 0xf1e7, - 0xf1e8, 0xb8fb, 0xf1e9, 0xbac4, 0xd4c5, 0xb0d2, 0xf1ea, 0xf1eb, - 0xf1ec, 0xf1ed, 0xf1ee, 0xf1ef, 0xf1f1, 0xf1f0, 0xc5d5, 0xf1f2, - 0xb6fa, 0xf1f4, 0xd2ae, 0xdec7, 0xcbca, 0xb3dc, 0xb5a2, 0xb9a2, - 0xc4f4, 0xf1f5, 0xf1f6, 0xc1c4, 0xc1fb, 0xd6b0, 0xf1f7, 0xf1f8, - 0xc1aa, 0xc6b8, 0xbedb, 0xf1f9, 0xb4cf, 0xf1fa, 0xedb2, 0xedb1, - 0xcbe0, 0xd2de, 0xcbc1, 0xd5d8, 0xc8e2, 0xc0df, 0xbca1, 0xebc1, - 0xd0a4, 0xd6e2, 0xb6c7, 0xb8d8, 0xebc0, 0xb8ce, 0xebbf, 0xb3a6, - 0xb9c9, 0xd6ab, 0xb7f4, 0xb7ca, 0xbce7, 0xb7be, 0xebc6, 0xebc7, - 0xb0b9, 0xbfcf, 0xebc5, 0xd3fd, 0xebc8, 0xebc9, 0xb7ce, 0xebc2, - 0xebc4, 0xc9f6, 0xd6d7, 0xd5cd, 0xd0b2, 0xebcf, 0xceb8, 0xebd0, - 0xb5a8, 0xb1b3, 0xebd2, 0xcca5, 0xc5d6, 0xebd3, 0xebd1, 0xc5df, - 0xebce, 0xcaa4, 0xebd5, 0xb0fb, 0xbafa, 0xd8b7, 0xf1e3, 0xebca, - 0xebcb, 0xebcc, 0xebcd, 0xebd6, 0xe6c0, 0xebd9, 0xbfe8, 0xd2c8, - 0xebd7, 0xebdc, 0xb8ec, 0xebd8, 0xbdba, 0xd0d8, 0xb0b7, 0xebdd, - 0xc4dc, 0xd6ac, 0xb4e0, 0xc2f6, 0xbcb9, 0xebda, 0xebdb, 0xd4e0, - 0xc6ea, 0xc4d4, 0xebdf, 0xc5a7, 0xd9f5, 0xb2b1, 0xebe4, 0xbdc5, - 0xebe2, 0xebe3, 0xb8ac, 0xcdd1, 0xebe5, 0xebe1, 0xc1b3, 0xc6a2, - 0xccf3, 0xebe6, 0xc0b0, 0xd2b8, 0xebe7, 0xb8af, 0xb8ad, 0xebe8, - 0xc7bb, 0xcdf3, 0xebea, 0xebeb, 0xebed, 0xd0c8, 0xebf2, 0xebee, - 0xebf1, 0xc8f9, 0xd1fc, 0xebec, 0xebe9, 0xb8b9, 0xcfd9, 0xc4e5, - 0xebef, 0xebf0, 0xccda, 0xcdc8, 0xb0f2, 0xebf6, 0xebf5, 0xb2b2, - 0xb8e0, 0xebf7, 0xb1ec, 0xccc5, 0xc4a4, 0xcfa5, 0xebf9, 0xeca2, - 0xc5f2, 0xebfa, 0xc9c5, 0xe2df, 0xebfe, 0xcdce, 0xeca1, 0xb1db, - 0xd3b7, 0xd2dc, 0xebfd, 0xebfb, 0xb3bc, 0xeab0, 0xd7d4, 0xf4ab, - 0xb3f4, 0xd6c1, 0xd6c2, 0xd5e9, 0xbeca, 0xf4a7, 0xd2a8, 0xf4a8, - 0xf4a9, 0xf4aa, 0xbecb, 0xd3df, 0xc9e0, 0xc9e1, 0xf3c2, 0xcae6, - 0xccf2, 0xe2b6, 0xcbb4, 0xcee8, 0xd6db, 0xf4ad, 0xf4ae, 0xf4af, - 0xf4b2, 0xbabd, 0xf4b3, 0xb0e3, 0xf4b0, 0xf4b1, 0xbda2, 0xb2d5, - 0xf4b6, 0xf4b7, 0xb6e6, 0xb2b0, 0xcfcf, 0xf4b4, 0xb4ac, 0xf4b5, - 0xf4b8, 0xf4b9, 0xcda7, 0xf4ba, 0xf4bb, 0xf4bc, 0xcbd2, 0xf4bd, - 0xf4be, 0xf4bf, 0xf4de, 0xc1bc, 0xbce8, 0xc9ab, 0xd1de, 0xe5f5, - 0xdcb3, 0xd2d5, 0xdcb4, 0xb0ac, 0xdcb5, 0xbdda, 0xdcb9, 0xd8c2, - 0xdcb7, 0xd3f3, 0xc9d6, 0xdcba, 0xdcb6, 0xdcbb, 0xc3a2, 0xdcbc, - 0xdcc5, 0xdcbd, 0xcedf, 0xd6a5, 0xdccf, 0xdccd, 0xdcd2, 0xbde6, - 0xc2ab, 0xdcb8, 0xdccb, 0xdcce, 0xdcbe, 0xb7d2, 0xb0c5, 0xdcc7, - 0xd0be, 0xdcc1, 0xbba8, 0xb7bc, 0xdccc, 0xdcc6, 0xdcbf, 0xc7db, - 0xd1bf, 0xdcc0, 0xdcca, 0xdcd0, 0xcead, 0xdcc2, 0xdcc3, 0xdcc8, - 0xdcc9, 0xb2d4, 0xdcd1, 0xcbd5, 0xd4b7, 0xdcdb, 0xdcdf, 0xcca6, - 0xdce6, 0xc3e7, 0xdcdc, 0xbfc1, 0xdcd9, 0xb0fa, 0xb9b6, 0xdce5, - 0xdcd3, 0xdcc4, 0xdcd6, 0xc8f4, 0xbfe0, 0xc9bb, 0xb1bd, 0xd3a2, - 0xdcda, 0xdcd5, 0xc6bb, 0xdcde, 0xd7c2, 0xc3af, 0xb7b6, 0xc7d1, - 0xc3a9, 0xdce2, 0xdcd8, 0xdceb, 0xdcd4, 0xdcdd, 0xbea5, 0xdcd7, - 0xdce0, 0xdce3, 0xdce4, 0xdcf8, 0xdce1, 0xdda2, 0xdce7, 0xbceb, - 0xb4c4, 0xc3a3, 0xb2e7, 0xdcfa, 0xdcf2, 0xdcef, 0xdcfc, 0xdcee, - 0xd2f0, 0xb2e8, 0xc8d7, 0xc8e3, 0xdcfb, 0xdced, 0xdcf7, 0xdcf5, - 0xbea3, 0xdcf4, 0xb2dd, 0xdcf3, 0xbcf6, 0xdce8, 0xbbc4, 0xc0f3, - 0xbcd4, 0xdce9, 0xdcea, 0xdcf1, 0xdcf6, 0xdcf9, 0xb5b4, 0xc8d9, - 0xbbe7, 0xdcfe, 0xdcfd, 0xd3ab, 0xdda1, 0xdda3, 0xdda5, 0xd2f1, - 0xdda4, 0xdda6, 0xdda7, 0xd2a9, 0xbac9, 0xdda9, 0xddb6, 0xddb1, - 0xddb4, 0xddb0, 0xc6ce, 0xc0f2, 0xc9af, 0xdcec, 0xddae, 0xddb7, - 0xdcf0, 0xddaf, 0xddb8, 0xddac, 0xddb9, 0xddb3, 0xddad, 0xc4aa, - 0xdda8, 0xc0b3, 0xc1ab, 0xddaa, 0xddab, 0xddb2, 0xbbf1, 0xddb5, - 0xd3a8, 0xddba, 0xddbb, 0xc3a7, 0xddd2, 0xddbc, 0xddd1, 0xb9bd, - 0xbed5, 0xbefa, 0xbaca, 0xddca, 0xddc5, 0xddbf, 0xb2cb, 0xddc3, - 0xddcb, 0xb2a4, 0xddd5, 0xddbe, 0xc6d0, 0xddd0, 0xddd4, 0xc1e2, - 0xb7c6, 0xddce, 0xddcf, 0xddc4, 0xddbd, 0xddcd, 0xccd1, 0xddc9, - 0xddc2, 0xc3c8, 0xc6bc, 0xceae, 0xddcc, 0xddc8, 0xddc1, 0xddc6, - 0xc2dc, 0xd3a9, 0xd3aa, 0xddd3, 0xcff4, 0xc8f8, 0xdde6, 0xddc7, - 0xdde0, 0xc2e4, 0xdde1, 0xddd7, 0xd6f8, 0xddd9, 0xddd8, 0xb8f0, - 0xddd6, 0xc6cf, 0xb6ad, 0xdde2, 0xbaf9, 0xd4e1, 0xdde7, 0xb4d0, - 0xddda, 0xbffb, 0xdde3, 0xdddf, 0xdddd, 0xb5d9, 0xdddb, 0xdddc, - 0xddde, 0xbdaf, 0xdde4, 0xdde5, 0xddf5, 0xc3c9, 0xcbe2, 0xddf2, - 0xd8e1, 0xc6d1, 0xddf4, 0xd5f4, 0xddf3, 0xddf0, 0xddec, 0xddef, - 0xdde8, 0xd0ee, 0xc8d8, 0xddee, 0xdde9, 0xddea, 0xcbf2, 0xdded, - 0xb1cd, 0xc0b6, 0xbcbb, 0xddf1, 0xddf7, 0xddf6, 0xddeb, 0xc5ee, - 0xddfb, 0xdea4, 0xdea3, 0xddf8, 0xc3ef, 0xc2fb, 0xd5e1, 0xceb5, - 0xddfd, 0xb2cc, 0xc4e8, 0xcadf, 0xc7be, 0xddfa, 0xddfc, 0xddfe, - 0xdea2, 0xb0aa, 0xb1ce, 0xdeac, 0xdea6, 0xbdb6, 0xc8ef, 0xdea1, - 0xdea5, 0xdea9, 0xdea8, 0xdea7, 0xdead, 0xd4cc, 0xdeb3, 0xdeaa, - 0xdeae, 0xc0d9, 0xb1a1, 0xdeb6, 0xdeb1, 0xdeb2, 0xd1a6, 0xdeb5, - 0xdeaf, 0xdeb0, 0xd0bd, 0xdeb4, 0xcaed, 0xdeb9, 0xdeb8, 0xdeb7, - 0xdebb, 0xbde5, 0xb2d8, 0xc3ea, 0xdeba, 0xc5ba, 0xdebc, 0xccd9, - 0xb7aa, 0xd4e5, 0xdebd, 0xdebf, 0xc4a2, 0xdec1, 0xdebe, 0xdec0, - 0xd5ba, 0xdec2, 0xf2ae, 0xbba2, 0xc2b2, 0xc5b0, 0xc2c7, 0xf2af, - 0xd0e9, 0xd3dd, 0xebbd, 0xb3e6, 0xf2b0, 0xf2b1, 0xcaad, 0xbae7, - 0xf2b3, 0xf2b5, 0xf2b4, 0xcbe4, 0xcfba, 0xf2b2, 0xcab4, 0xd2cf, - 0xc2ec, 0xcec3, 0xf2b8, 0xb0f6, 0xf2b7, 0xf2be, 0xb2cf, 0xd1c1, - 0xf2ba, 0xf2bc, 0xd4e9, 0xf2bb, 0xf2b6, 0xf2bf, 0xf2bd, 0xf2b9, - 0xf2c7, 0xf2c4, 0xf2c6, 0xf2ca, 0xf2c2, 0xf2c0, 0xf2c5, 0xd6fb, - 0xf2c1, 0xc7f9, 0xc9df, 0xf2c8, 0xb9c6, 0xb5b0, 0xf2c3, 0xf2c9, - 0xf2d0, 0xf2d6, 0xbbd7, 0xf2d5, 0xcddc, 0xd6eb, 0xf2d2, 0xf2d4, - 0xb8f2, 0xf2cb, 0xf2ce, 0xc2f9, 0xd5dd, 0xf2cc, 0xf2cd, 0xf2cf, - 0xf2d3, 0xf2d9, 0xd3bc, 0xb6ea, 0xcaf1, 0xb7e4, 0xf2d7, 0xf2d8, - 0xf2da, 0xf2dd, 0xf2db, 0xf2dc, 0xd1d1, 0xf2d1, 0xcdc9, 0xcecf, - 0xd6a9, 0xf2e3, 0xc3db, 0xf2e0, 0xc0af, 0xf2ec, 0xf2de, 0xf2e1, - 0xf2e8, 0xf2e2, 0xf2e7, 0xf2e6, 0xf2e9, 0xf2df, 0xf2e4, 0xf2ea, - 0xd3ac, 0xf2e5, 0xb2f5, 0xf2f2, 0xd0ab, 0xf2f5, 0xbbc8, 0xf2f9, - 0xf2f0, 0xf2f6, 0xf2f8, 0xf2fa, 0xf2f3, 0xf2f1, 0xbafb, 0xb5fb, - 0xf2ef, 0xf2f7, 0xf2ed, 0xf2ee, 0xf2eb, 0xf3a6, 0xf3a3, 0xf3a2, - 0xf2f4, 0xc8da, 0xf2fb, 0xf3a5, 0xc3f8, 0xf2fd, 0xf3a7, 0xf3a9, - 0xf3a4, 0xf2fc, 0xf3ab, 0xf3aa, 0xc2dd, 0xf3ae, 0xf3b0, 0xf3a1, - 0xf3b1, 0xf3ac, 0xf3af, 0xf2fe, 0xf3ad, 0xf3b2, 0xf3b4, 0xf3a8, - 0xf3b3, 0xf3b5, 0xd0b7, 0xf3b8, 0xd9f9, 0xf3b9, 0xf3b7, 0xc8e4, - 0xf3b6, 0xf3ba, 0xf3bb, 0xb4c0, 0xeec3, 0xf3bc, 0xf3bd, 0xd1aa, - 0xf4ac, 0xd0c6, 0xd0d0, 0xd1dc, 0xcfce, 0xbdd6, 0xd1c3, 0xbae2, - 0xe1e9, 0xd2c2, 0xf1c2, 0xb2b9, 0xb1ed, 0xf1c3, 0xc9c0, 0xb3c4, - 0xd9f2, 0xcba5, 0xf1c4, 0xd6d4, 0xf1c5, 0xf4c0, 0xf1c6, 0xd4ac, - 0xf1c7, 0xb0c0, 0xf4c1, 0xf4c2, 0xb4fc, 0xc5db, 0xccbb, 0xd0e4, - 0xcde0, 0xf1c8, 0xd9f3, 0xb1bb, 0xcfae, 0xb8a4, 0xf1ca, 0xf1cb, - 0xb2c3, 0xc1d1, 0xd7b0, 0xf1c9, 0xf1cc, 0xf1ce, 0xd9f6, 0xd2e1, - 0xd4a3, 0xf4c3, 0xc8b9, 0xf4c4, 0xf1cd, 0xf1cf, 0xbfe3, 0xf1d0, - 0xf1d4, 0xf1d6, 0xf1d1, 0xc9d1, 0xc5e1, 0xc2e3, 0xb9fc, 0xf1d3, - 0xf1d5, 0xb9d3, 0xf1db, 0xbad6, 0xb0fd, 0xf1d9, 0xf1d8, 0xf1d2, - 0xf1da, 0xf1d7, 0xc8ec, 0xcdca, 0xf1dd, 0xe5bd, 0xf1dc, 0xf1de, - 0xf1df, 0xcfe5, 0xf4c5, 0xbdf3, 0xf1e0, 0xf1e1, 0xcef7, 0xd2aa, - 0xf1fb, 0xb8b2, 0xbcfb, 0xb9db, 0xb9e6, 0xc3d9, 0xcad3, 0xeae8, - 0xc0c0, 0xbef5, 0xeae9, 0xeaea, 0xeaeb, 0xeaec, 0xeaed, 0xeaee, - 0xeaef, 0xbdc7, 0xf5fb, 0xf5fd, 0xf5fe, 0xf5fc, 0xbde2, 0xf6a1, - 0xb4a5, 0xf6a2, 0xf6a3, 0xecb2, 0xd1d4, 0xd9ea, 0xf6a4, 0xeeba, - 0xd5b2, 0xd3fe, 0xccdc, 0xcac4, 0xe5c0, 0xf6a5, 0xbeaf, 0xc6a9, - 0xdaa5, 0xbcc6, 0xb6a9, 0xb8bc, 0xc8cf, 0xbca5, 0xdaa6, 0xdaa7, - 0xccd6, 0xc8c3, 0xdaa8, 0xc6fd, 0xd1b5, 0xd2e9, 0xd1b6, 0xbcc7, - 0xbdb2, 0xbbe4, 0xdaa9, 0xdaaa, 0xd1c8, 0xdaab, 0xd0ed, 0xb6ef, - 0xc2db, 0xcbcf, 0xb7ed, 0xc9e8, 0xb7c3, 0xbef7, 0xd6a4, 0xdaac, - 0xdaad, 0xc6c0, 0xd7e7, 0xcab6, 0xd5a9, 0xcbdf, 0xd5ef, 0xdaae, - 0xd6df, 0xb4ca, 0xdab0, 0xdaaf, 0xd2eb, 0xdab1, 0xdab2, 0xdab3, - 0xcad4, 0xdab4, 0xcaab, 0xdab5, 0xdab6, 0xb3cf, 0xd6ef, 0xdab7, - 0xbbb0, 0xb5ae, 0xdab8, 0xdab9, 0xb9ee, 0xd1af, 0xd2e8, 0xdaba, - 0xb8c3, 0xcfea, 0xb2ef, 0xdabb, 0xdabc, 0xbdeb, 0xcedc, 0xd3ef, - 0xdabd, 0xcef3, 0xdabe, 0xd3d5, 0xbbe5, 0xdabf, 0xcbb5, 0xcbd0, - 0xdac0, 0xc7eb, 0xd6ee, 0xdac1, 0xc5b5, 0xb6c1, 0xdac2, 0xb7cc, - 0xbfce, 0xdac3, 0xdac4, 0xcbad, 0xdac5, 0xb5f7, 0xdac6, 0xc1c2, - 0xd7bb, 0xdac7, 0xccb8, 0xd2ea, 0xc4b1, 0xdac8, 0xb5fd, 0xbbd1, - 0xdac9, 0xd0b3, 0xdaca, 0xdacb, 0xcebd, 0xdacc, 0xdacd, 0xdace, - 0xb2f7, 0xdad1, 0xdacf, 0xd1e8, 0xdad0, 0xc3d5, 0xdad2, 0xdad3, - 0xdad4, 0xdad5, 0xd0bb, 0xd2a5, 0xb0f9, 0xdad6, 0xc7ab, 0xdad7, - 0xbdf7, 0xc3a1, 0xdad8, 0xdad9, 0xc3fd, 0xccb7, 0xdada, 0xdadb, - 0xc0be, 0xc6d7, 0xdadc, 0xdadd, 0xc7b4, 0xdade, 0xdadf, 0xb9c8, - 0xbbed, 0xb6b9, 0xf4f8, 0xf4f9, 0xcde3, 0xf5b9, 0xebe0, 0xcff3, - 0xbbbf, 0xbac0, 0xd4a5, 0xe1d9, 0xf5f4, 0xb1aa, 0xb2f2, 0xf5f5, - 0xf5f7, 0xbad1, 0xf5f6, 0xc3b2, 0xf5f9, 0xf5f8, 0xb1b4, 0xd5ea, - 0xb8ba, 0xb9b1, 0xb2c6, 0xd4f0, 0xcfcd, 0xb0dc, 0xd5cb, 0xbbf5, - 0xd6ca, 0xb7b7, 0xccb0, 0xc6b6, 0xb1e1, 0xb9ba, 0xd6fc, 0xb9e1, - 0xb7a1, 0xbcfa, 0xeada, 0xeadb, 0xccf9, 0xb9f3, 0xeadc, 0xb4fb, - 0xc3b3, 0xb7d1, 0xbad8, 0xeadd, 0xd4f4, 0xeade, 0xbcd6, 0xbbdf, - 0xeadf, 0xc1de, 0xc2b8, 0xd4df, 0xd7ca, 0xeae0, 0xeae1, 0xeae4, - 0xeae2, 0xeae3, 0xc9de, 0xb8b3, 0xb6c4, 0xeae5, 0xcaea, 0xc9cd, - 0xb4cd, 0xe2d9, 0xc5e2, 0xeae6, 0xc0b5, 0xd7b8, 0xeae7, 0xd7ac, - 0xc8fc, 0xd8d3, 0xd8cd, 0xd4de, 0xd4f9, 0xc9c4, 0xd3ae, 0xb8d3, - 0xb3e0, 0xc9e2, 0xf4f6, 0xbad5, 0xf4f7, 0xd7df, 0xf4f1, 0xb8b0, - 0xd5d4, 0xb8cf, 0xc6f0, 0xb3c3, 0xf4f2, 0xb3ac, 0xd4bd, 0xc7f7, - 0xf4f4, 0xf4f3, 0xcccb, 0xc8a4, 0xf4f5, 0xd7e3, 0xc5bf, 0xf5c0, - 0xf5bb, 0xf5c3, 0xf5c2, 0xd6ba, 0xf5c1, 0xd4be, 0xf5c4, 0xf5cc, - 0xb0cf, 0xb5f8, 0xf5c9, 0xf5ca, 0xc5dc, 0xf5c5, 0xf5c6, 0xf5c7, - 0xf5cb, 0xbee0, 0xf5c8, 0xb8fa, 0xf5d0, 0xf5d3, 0xbfe7, 0xb9f2, - 0xf5bc, 0xf5cd, 0xc2b7, 0xccf8, 0xbcf9, 0xf5ce, 0xf5cf, 0xf5d1, - 0xb6e5, 0xf5d2, 0xf5d5, 0xf5bd, 0xf5d4, 0xd3bb, 0xb3ec, 0xcca4, - 0xf5d6, 0xf5d7, 0xbee1, 0xf5d8, 0xccdf, 0xf5db, 0xb2c8, 0xd7d9, - 0xf5d9, 0xf5da, 0xf5dc, 0xf5e2, 0xf5e0, 0xf5df, 0xf5dd, 0xf5e1, - 0xf5de, 0xf5e4, 0xf5e5, 0xcce3, 0xe5bf, 0xb5b8, 0xf5e3, 0xf5e8, - 0xcca3, 0xf5e6, 0xf5e7, 0xf5be, 0xb1c4, 0xf5bf, 0xb5c5, 0xb2e4, - 0xf5ec, 0xf5e9, 0xb6d7, 0xf5ed, 0xf5ea, 0xf5eb, 0xb4da, 0xd4ea, - 0xf5ee, 0xb3f9, 0xf5ef, 0xf5f1, 0xf5f0, 0xf5f2, 0xf5f3, 0xc9ed, - 0xb9aa, 0xc7fb, 0xb6e3, 0xccc9, 0xeaa6, 0xb3b5, 0xd4fe, 0xb9ec, - 0xd0f9, 0xe9ed, 0xd7aa, 0xe9ee, 0xc2d6, 0xc8ed, 0xbae4, 0xe9ef, - 0xe9f0, 0xe9f1, 0xd6e1, 0xe9f2, 0xe9f3, 0xe9f5, 0xe9f4, 0xe9f6, - 0xe9f7, 0xc7e1, 0xe9f8, 0xd4d8, 0xe9f9, 0xbdce, 0xe9fa, 0xe9fb, - 0xbdcf, 0xe9fc, 0xb8a8, 0xc1be, 0xe9fd, 0xb1b2, 0xbbd4, 0xb9f5, - 0xe9fe, 0xeaa1, 0xeaa2, 0xeaa3, 0xb7f8, 0xbcad, 0xcae4, 0xe0ce, - 0xd4af, 0xcfbd, 0xd5b7, 0xeaa4, 0xd5de, 0xeaa5, 0xd0c1, 0xb9bc, - 0xb4c7, 0xb1d9, 0xc0b1, 0xb1e6, 0xb1e7, 0xb1e8, 0xb3bd, 0xc8e8, - 0xe5c1, 0xb1df, 0xc1c9, 0xb4ef, 0xc7a8, 0xd3d8, 0xc6f9, 0xd1b8, - 0xb9fd, 0xc2f5, 0xd3ad, 0xd4cb, 0xbdfc, 0xe5c2, 0xb7b5, 0xe5c3, - 0xbbb9, 0xd5e2, 0xbdf8, 0xd4b6, 0xcea5, 0xc1ac, 0xb3d9, 0xccf6, - 0xe5c6, 0xe5c4, 0xe5c8, 0xe5ca, 0xe5c7, 0xb5cf, 0xc6c8, 0xb5fc, - 0xe5c5, 0xcaf6, 0xe5c9, 0xc3d4, 0xb1c5, 0xbca3, 0xd7b7, 0xcdcb, - 0xcbcd, 0xcaca, 0xccd3, 0xe5cc, 0xe5cb, 0xc4e6, 0xd1a1, 0xd1b7, - 0xe5cd, 0xe5d0, 0xcdb8, 0xd6f0, 0xe5cf, 0xb5dd, 0xcdbe, 0xe5d1, - 0xb6ba, 0xcda8, 0xb9e4, 0xcac5, 0xb3d1, 0xcbd9, 0xd4ec, 0xe5d2, - 0xb7ea, 0xe5ce, 0xe5d5, 0xb4fe, 0xe5d6, 0xe5d3, 0xe5d4, 0xd2dd, - 0xc2df, 0xb1c6, 0xd3e2, 0xb6dd, 0xcbec, 0xe5d7, 0xd3f6, 0xb1e9, - 0xb6f4, 0xe5da, 0xe5d8, 0xe5d9, 0xb5c0, 0xd2c5, 0xe5dc, 0xe5de, - 0xe5dd, 0xc7b2, 0xd2a3, 0xe5db, 0xd4e2, 0xd5da, 0xe5e0, 0xd7f1, - 0xe5e1, 0xb1dc, 0xd1fb, 0xe5e2, 0xe5e4, 0xe5e3, 0xe5e5, 0xd2d8, - 0xb5cb, 0xe7df, 0xdaf5, 0xdaf8, 0xdaf6, 0xdaf7, 0xdafa, 0xd0cf, - 0xc4c7, 0xb0ee, 0xd0b0, 0xdaf9, 0xd3ca, 0xbaaa, 0xdba2, 0xc7f1, - 0xdafc, 0xdafb, 0xc9db, 0xdafd, 0xdba1, 0xd7de, 0xdafe, 0xc1da, - 0xdba5, 0xd3f4, 0xdba7, 0xdba4, 0xdba8, 0xbdbc, 0xc0c9, 0xdba3, - 0xdba6, 0xd6a3, 0xdba9, 0xdbad, 0xdbae, 0xdbac, 0xbac2, 0xbfa4, - 0xdbab, 0xdbaa, 0xd4c7, 0xb2bf, 0xdbaf, 0xb9f9, 0xdbb0, 0xb3bb, - 0xb5a6, 0xb6bc, 0xdbb1, 0xb6f5, 0xdbb2, 0xb1c9, 0xdbb4, 0xdbb3, - 0xdbb5, 0xdbb7, 0xdbb6, 0xdbb8, 0xdbb9, 0xdbba, 0xd3cf, 0xf4fa, - 0xc7f5, 0xd7c3, 0xc5e4, 0xf4fc, 0xf4fd, 0xf4fb, 0xbec6, 0xd0ef, - 0xb7d3, 0xd4cd, 0xccaa, 0xf5a2, 0xf5a1, 0xbaa8, 0xf4fe, 0xcbd6, - 0xf5a4, 0xc0d2, 0xb3ea, 0xcdaa, 0xf5a5, 0xf5a3, 0xbdb4, 0xf5a8, - 0xf5a9, 0xbdcd, 0xc3b8, 0xbfe1, 0xcbe1, 0xf5aa, 0xf5a6, 0xf5a7, - 0xc4f0, 0xf5ac, 0xb4bc, 0xd7ed, 0xb4d7, 0xf5ab, 0xf5ae, 0xf5ad, - 0xf5af, 0xd0d1, 0xc3d1, 0xc8a9, 0xf5b0, 0xf5b1, 0xf5b2, 0xf5b3, - 0xf5b4, 0xf5b5, 0xf5b7, 0xf5b6, 0xf5b8, 0xb2c9, 0xd3d4, 0xcacd, - 0xc0ef, 0xd6d8, 0xd2b0, 0xc1bf, 0xbdf0, 0xb8aa, 0xbcf8, 0xf6c6, - 0xf6c7, 0xf6c8, 0xf6c9, 0xf6ca, 0xf6cc, 0xf6cb, 0xf7e9, 0xf6cd, - 0xf6ce, 0xeec4, 0xeec5, 0xeec6, 0xd5eb, 0xb6a4, 0xeec8, 0xeec7, - 0xeec9, 0xeeca, 0xc7a5, 0xeecb, 0xeecc, 0xb7b0, 0xb5f6, 0xeecd, - 0xeecf, 0xeece, 0xb8c6, 0xeed0, 0xeed1, 0xeed2, 0xb6db, 0xb3ae, - 0xd6d3, 0xc4c6, 0xb1b5, 0xb8d6, 0xeed3, 0xeed4, 0xd4bf, 0xc7d5, - 0xbefb, 0xced9, 0xb9b3, 0xeed6, 0xeed5, 0xeed8, 0xeed7, 0xc5a5, - 0xeed9, 0xeeda, 0xc7ae, 0xeedb, 0xc7af, 0xeedc, 0xb2a7, 0xeedd, - 0xeede, 0xeedf, 0xeee0, 0xeee1, 0xd7ea, 0xeee2, 0xeee3, 0xbcd8, - 0xeee4, 0xd3cb, 0xccfa, 0xb2ac, 0xc1e5, 0xeee5, 0xc7a6, 0xc3ad, - 0xeee6, 0xeee7, 0xeee8, 0xeee9, 0xeeea, 0xeeeb, 0xeeec, 0xeeed, - 0xeeee, 0xeeef, 0xeef0, 0xeef1, 0xeef2, 0xeef4, 0xeef3, 0xeef5, - 0xcdad, 0xc2c1, 0xeef6, 0xeef7, 0xeef8, 0xd5a1, 0xeef9, 0xcfb3, - 0xeefa, 0xeefb, 0xeefc, 0xeefd, 0xefa1, 0xeefe, 0xefa2, 0xb8f5, - 0xc3fa, 0xefa3, 0xefa4, 0xbdc2, 0xd2bf, 0xb2f9, 0xefa5, 0xefa6, - 0xefa7, 0xd2f8, 0xefa8, 0xd6fd, 0xefa9, 0xc6cc, 0xefaa, 0xefab, - 0xc1b4, 0xefac, 0xcffa, 0xcbf8, 0xefae, 0xefad, 0xb3fa, 0xb9f8, - 0xefaf, 0xefb0, 0xd0e2, 0xefb1, 0xefb2, 0xb7e6, 0xd0bf, 0xefb3, - 0xefb4, 0xefb5, 0xc8f1, 0xcce0, 0xefb6, 0xefb7, 0xefb8, 0xefb9, - 0xefba, 0xd5e0, 0xefbb, 0xb4ed, 0xc3aa, 0xefbc, 0xefbd, 0xefbe, - 0xefbf, 0xcefd, 0xefc0, 0xc2e0, 0xb4b8, 0xd7b6, 0xbdf5, 0xcfc7, - 0xefc3, 0xefc1, 0xefc2, 0xefc4, 0xb6a7, 0xbcfc, 0xbee2, 0xc3cc, - 0xefc5, 0xefc6, 0xefc7, 0xefcf, 0xefc8, 0xefc9, 0xefca, 0xc7c2, - 0xeff1, 0xb6cd, 0xefcb, 0xefcc, 0xefcd, 0xb6c6, 0xc3be, 0xefce, - 0xefd0, 0xefd1, 0xefd2, 0xd5f2, 0xefd3, 0xc4f7, 0xefd4, 0xc4f8, - 0xefd5, 0xefd6, 0xb8e4, 0xb0f7, 0xefd7, 0xefd8, 0xefd9, 0xefda, - 0xefdb, 0xefdc, 0xefdd, 0xefde, 0xbeb5, 0xefe1, 0xefdf, 0xefe0, - 0xefe2, 0xefe3, 0xc1cd, 0xefe4, 0xefe5, 0xefe6, 0xefe7, 0xefe8, - 0xefe9, 0xefea, 0xefeb, 0xefec, 0xc0d8, 0xefed, 0xc1ad, 0xefee, - 0xefef, 0xeff0, 0xcfe2, 0xb3a4, 0xc3c5, 0xe3c5, 0xc9c1, 0xe3c6, - 0xb1d5, 0xceca, 0xb4b3, 0xc8f2, 0xe3c7, 0xcfd0, 0xe3c8, 0xbce4, - 0xe3c9, 0xe3ca, 0xc3c6, 0xd5a2, 0xc4d6, 0xb9eb, 0xcec5, 0xe3cb, - 0xc3f6, 0xe3cc, 0xb7a7, 0xb8f3, 0xbad2, 0xe3cd, 0xe3ce, 0xd4c4, - 0xe3cf, 0xe3d0, 0xd1cb, 0xe3d1, 0xe3d2, 0xe3d3, 0xe3d4, 0xd1d6, - 0xe3d5, 0xb2fb, 0xc0bb, 0xe3d6, 0xc0ab, 0xe3d7, 0xe3d8, 0xe3d9, - 0xe3da, 0xe3db, 0xb8b7, 0xdae2, 0xb6d3, 0xdae4, 0xdae3, 0xdae6, - 0xc8ee, 0xdae5, 0xb7c0, 0xd1f4, 0xd2f5, 0xd5f3, 0xbdd7, 0xd7e8, - 0xdae8, 0xdae7, 0xb0a2, 0xcdd3, 0xdae9, 0xb8bd, 0xbcca, 0xc2bd, - 0xc2a4, 0xb3c2, 0xdaea, 0xc2aa, 0xc4b0, 0xbdb5, 0xcfde, 0xdaeb, - 0xc9c2, 0xb1dd, 0xdaec, 0xb6b8, 0xd4ba, 0xb3fd, 0xdaed, 0xd4c9, - 0xcfd5, 0xc5e3, 0xdaee, 0xdaef, 0xdaf0, 0xc1ea, 0xccd5, 0xcfdd, - 0xd3e7, 0xc2a1, 0xdaf1, 0xcbe5, 0xdaf2, 0xcbe6, 0xd2fe, 0xb8f4, - 0xdaf3, 0xb0af, 0xcfb6, 0xd5cf, 0xcbed, 0xdaf4, 0xe3c4, 0xc1a5, - 0xf6bf, 0xf6c0, 0xf6c1, 0xc4d1, 0xc8b8, 0xd1e3, 0xd0db, 0xd1c5, - 0xbcaf, 0xb9cd, 0xeff4, 0xb4c6, 0xd3ba, 0xf6c2, 0xb3fb, 0xf6c3, - 0xb5f1, 0xf6c5, 0xd3ea, 0xf6a7, 0xd1a9, 0xf6a9, 0xf6a8, 0xc1e3, - 0xc0d7, 0xb1a2, 0xceed, 0xd0e8, 0xf6ab, 0xcff6, 0xf6aa, 0xd5f0, - 0xf6ac, 0xc3b9, 0xbbf4, 0xf6ae, 0xf6ad, 0xc4de, 0xc1d8, 0xcbaa, - 0xcfbc, 0xf6af, 0xf6b0, 0xf6b1, 0xc2b6, 0xb0d4, 0xc5f9, 0xf6b2, - 0xc7e0, 0xf6a6, 0xbeb8, 0xbeb2, 0xb5e5, 0xb7c7, 0xbfbf, 0xc3d2, - 0xc3e6, 0xd8cc, 0xb8ef, 0xbdf9, 0xd1a5, 0xb0d0, 0xf7b0, 0xf7b1, - 0xd0ac, 0xb0b0, 0xf7b2, 0xf7b3, 0xf7b4, 0xc7ca, 0xbecf, 0xf7b7, - 0xf7b6, 0xb1de, 0xf7b5, 0xf7b8, 0xf7b9, 0xcea4, 0xc8cd, 0xbaab, - 0xe8b8, 0xe8b9, 0xe8ba, 0xbec2, 0xd2f4, 0xd4cf, 0xc9d8, 0xd2b3, - 0xb6a5, 0xc7ea, 0xf1fc, 0xcfee, 0xcbb3, 0xd0eb, 0xe7ef, 0xcde7, - 0xb9cb, 0xb6d9, 0xf1fd, 0xb0e4, 0xcbcc, 0xf1fe, 0xd4a4, 0xc2ad, - 0xc1ec, 0xc6c4, 0xbeb1, 0xf2a1, 0xbcd5, 0xf2a2, 0xf2a3, 0xf2a4, - 0xd2c3, 0xc6b5, 0xcdc7, 0xf2a5, 0xd3b1, 0xbfc5, 0xcce2, 0xf2a6, - 0xf2a7, 0xd1d5, 0xb6ee, 0xf2a8, 0xf2a9, 0xb5df, 0xf2aa, 0xf2ab, - 0xb2fc, 0xf2ac, 0xf2ad, 0xc8a7, 0xb7e7, 0xeca9, 0xecaa, 0xecab, - 0xecac, 0xc6ae, 0xecad, 0xecae, 0xb7c9, 0xcab3, 0xe2b8, 0xf7cf, - 0xf7d0, 0xb2cd, 0xf7d1, 0xf7d3, 0xf7d2, 0xe2bb, 0xbca2, 0xe2bc, - 0xe2bd, 0xe2be, 0xe2bf, 0xe2c0, 0xe2c1, 0xb7b9, 0xd2fb, 0xbda4, - 0xcace, 0xb1a5, 0xcbc7, 0xe2c2, 0xb6fc, 0xc8c4, 0xe2c3, 0xbdc8, - 0xb1fd, 0xe2c4, 0xb6f6, 0xe2c5, 0xc4d9, 0xe2c6, 0xcfda, 0xb9dd, - 0xe2c7, 0xc0a1, 0xe2c8, 0xb2f6, 0xe2c9, 0xc1f3, 0xe2ca, 0xe2cb, - 0xc2f8, 0xe2cc, 0xe2cd, 0xe2ce, 0xcad7, 0xd8b8, 0xd9e5, 0xcfe3, - 0xf0a5, 0xdcb0, 0xc2ed, 0xd4a6, 0xcdd4, 0xd1b1, 0xb3db, 0xc7fd, - 0xb2b5, 0xc2bf, 0xe6e0, 0xcabb, 0xe6e1, 0xe6e2, 0xbed4, 0xe6e3, - 0xd7a4, 0xcdd5, 0xe6e5, 0xbcdd, 0xe6e4, 0xe6e6, 0xe6e7, 0xc2ee, - 0xbdbe, 0xe6e8, 0xc2e6, 0xbaa7, 0xe6e9, 0xe6ea, 0xb3d2, 0xd1e9, - 0xbfa5, 0xe6eb, 0xc6ef, 0xe6ec, 0xe6ed, 0xe6ee, 0xc6ad, 0xe6ef, - 0xc9a7, 0xe6f0, 0xe6f1, 0xe6f2, 0xe5b9, 0xe6f3, 0xe6f4, 0xc2e2, - 0xe6f5, 0xe6f6, 0xd6e8, 0xe6f7, 0xe6f8, 0xb9c7, 0xf7bb, 0xf7ba, - 0xf7be, 0xf7bc, 0xbaa1, 0xf7bf, 0xf7c0, 0xf7c2, 0xf7c1, 0xf7c4, - 0xf7c3, 0xf7c5, 0xf7c6, 0xf7c7, 0xcbe8, 0xb8df, 0xf7d4, 0xf7d5, - 0xf7d6, 0xf7d8, 0xf7da, 0xf7d7, 0xf7db, 0xf7d9, 0xd7d7, 0xf7dc, - 0xf7dd, 0xf7de, 0xf7df, 0xf7e0, 0xdbcb, 0xd8aa, 0xe5f7, 0xb9ed, - 0xbffd, 0xbbea, 0xf7c9, 0xc6c7, 0xf7c8, 0xf7ca, 0xf7cc, 0xf7cb, - 0xf7cd, 0xceba, 0xf7ce, 0xc4a7, 0xd3e3, 0xf6cf, 0xc2b3, 0xf6d0, - 0xf6d1, 0xf6d2, 0xf6d3, 0xf6d4, 0xf6d6, 0xb1ab, 0xf6d7, 0xf6d8, - 0xf6d9, 0xf6da, 0xf6db, 0xf6dc, 0xf6dd, 0xf6de, 0xcfca, 0xf6df, - 0xf6e0, 0xf6e1, 0xf6e2, 0xf6e3, 0xf6e4, 0xc0f0, 0xf6e5, 0xf6e6, - 0xf6e7, 0xf6e8, 0xf6e9, 0xf6ea, 0xf6eb, 0xf6ec, 0xf6ed, 0xf6ee, - 0xf6ef, 0xf6f0, 0xf6f1, 0xf6f2, 0xf6f3, 0xf6f4, 0xbea8, 0xf6f5, - 0xf6f6, 0xf6f7, 0xf6f8, 0xc8fa, 0xf6f9, 0xf6fa, 0xf6fb, 0xf6fc, - 0xf6fd, 0xf6fe, 0xf7a1, 0xf7a2, 0xf7a3, 0xf7a4, 0xf7a5, 0xf7a6, - 0xf7a7, 0xf7a8, 0xb1ee, 0xf7a9, 0xf7aa, 0xf7ab, 0xf7ac, 0xf7ad, - 0xc1db, 0xf7ae, 0xf7af, 0xc4f1, 0xf0af, 0xbca6, 0xf0b0, 0xc3f9, - 0xc5b8, 0xd1bb, 0xf0b1, 0xf0b2, 0xf0b3, 0xf0b4, 0xf0b5, 0xd1bc, - 0xd1ec, 0xf0b7, 0xf0b6, 0xd4a7, 0xcdd2, 0xf0b8, 0xf0ba, 0xf0b9, - 0xf0bb, 0xf0bc, 0xb8eb, 0xf0bd, 0xbae8, 0xf0be, 0xf0bf, 0xbee9, - 0xf0c0, 0xb6ec, 0xf0c1, 0xf0c2, 0xf0c3, 0xf0c4, 0xc8b5, 0xf0c5, - 0xf0c6, 0xf0c7, 0xc5f4, 0xf0c8, 0xf0c9, 0xf0ca, 0xf7bd, 0xf0cb, - 0xf0cc, 0xf0cd, 0xf0ce, 0xf0cf, 0xbad7, 0xf0d0, 0xf0d1, 0xf0d2, - 0xf0d3, 0xf0d4, 0xf0d5, 0xf0d6, 0xf0d8, 0xd3a5, 0xf0d7, 0xf0d9, - 0xf5ba, 0xc2b9, 0xf7e4, 0xf7e5, 0xf7e6, 0xf7e7, 0xf7e8, 0xc2b4, - 0xf7ea, 0xf7eb, 0xc2f3, 0xf4f0, 0xf4ef, 0xc2e9, 0xf7e1, 0xf7e2, - 0xbbc6, 0xd9e4, 0xcaf2, 0xc0e8, 0xf0a4, 0xbada, 0xc7ad, 0xc4ac, - 0xf7ec, 0xf7ed, 0xf7ee, 0xf7f0, 0xf7ef, 0xf7f1, 0xf7f4, 0xf7f3, - 0xf7f2, 0xf7f5, 0xf7f6, 0xede9, 0xedea, 0xedeb, 0xf6bc, 0xf6bd, - 0xf6be, 0xb6a6, 0xd8be, 0xb9c4, 0xd8bb, 0xdcb1, 0xcaf3, 0xf7f7, - 0xf7f8, 0xf7f9, 0xf7fb, 0xf7fa, 0xb1c7, 0xf7fc, 0xf7fd, 0xf7fe, - 0xc6eb, 0xecb4, 0xb3dd, 0xf6b3, 0xf6b4, 0xc1e4, 0xf6b5, 0xf6b6, - 0xf6b7, 0xf6b8, 0xf6b9, 0xf6ba, 0xc8a3, 0xf6bb, 0xc1fa, 0xb9a8, - 0xede8, 0xb9ea, 0xd9df, 0xa3a1, 0xa3a2, 0xa3a3, 0xa1e7, 0xa3a5, - 0xa3a6, 0xa3a7, 0xa3a8, 0xa3a9, 0xa3aa, 0xa3ab, 0xa3ac, 0xa3ad, - 0xa3ae, 0xa3af, 0xa3b0, 0xa3b1, 0xa3b2, 0xa3b3, 0xa3b4, 0xa3b5, - 0xa3b6, 0xa3b7, 0xa3b8, 0xa3b9, 0xa3ba, 0xa3bb, 0xa3bc, 0xa3bd, - 0xa3be, 0xa3bf, 0xa3c0, 0xa3c1, 0xa3c2, 0xa3c3, 0xa3c4, 0xa3c5, - 0xa3c6, 0xa3c7, 0xa3c8, 0xa3c9, 0xa3ca, 0xa3cb, 0xa3cc, 0xa3cd, - 0xa3ce, 0xa3cf, 0xa3d0, 0xa3d1, 0xa3d2, 0xa3d3, 0xa3d4, 0xa3d5, - 0xa3d6, 0xa3d7, 0xa3d8, 0xa3d9, 0xa3da, 0xa3db, 0xa3dc, 0xa3dd, - 0xa3de, 0xa3df, 0xa3e0, 0xa3e1, 0xa3e2, 0xa3e3, 0xa3e4, 0xa3e5, - 0xa3e6, 0xa3e7, 0xa3e8, 0xa3e9, 0xa3ea, 0xa3eb, 0xa3ec, 0xa3ed, - 0xa3ee, 0xa3ef, 0xa3f0, 0xa3f1, 0xa3f2, 0xa3f3, 0xa3f4, 0xa3f5, - 0xa3f6, 0xa3f7, 0xa3f8, 0xa3f9, 0xa3fa, 0xa3fb, 0xa3fc, 0xa3fd, - 0xa1ab, 0xa1e9, 0xa1ea, 0xa3fe, 0xa3a4, -}; - -typedef struct { - unsigned short indx; /* index into big table */ - unsigned short used; /* bitmask of used entries */ -} Summary16; - -static const Summary16 gb2312_uni2indx_page00[70] = { - /* 0x0000 */ - { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, - { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, - { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0190 }, { 3, 0x0003 }, - { 5, 0x0000 }, { 5, 0x0080 }, { 6, 0x3703 }, { 13, 0x168c }, - /* 0x0100 */ - { 19, 0x0002 }, { 20, 0x0808 }, { 22, 0x0800 }, { 23, 0x0000 }, - { 23, 0x2000 }, { 24, 0x0000 }, { 24, 0x0800 }, { 25, 0x0000 }, - { 25, 0x0000 }, { 25, 0x0000 }, { 25, 0x0000 }, { 25, 0x0000 }, - { 25, 0x4000 }, { 26, 0x1555 }, { 33, 0x0000 }, { 33, 0x0000 }, - /* 0x0200 */ - { 33, 0x0000 }, { 33, 0x0000 }, { 33, 0x0000 }, { 33, 0x0000 }, - { 33, 0x0000 }, { 33, 0x0000 }, { 33, 0x0000 }, { 33, 0x0000 }, - { 33, 0x0000 }, { 33, 0x0000 }, { 33, 0x0000 }, { 33, 0x0000 }, - { 33, 0x0280 }, { 35, 0x0000 }, { 35, 0x0000 }, { 35, 0x0000 }, - /* 0x0300 */ - { 35, 0x0000 }, { 35, 0x0000 }, { 35, 0x0000 }, { 35, 0x0000 }, - { 35, 0x0000 }, { 35, 0x0000 }, { 35, 0x0000 }, { 35, 0x0000 }, - { 35, 0x0000 }, { 35, 0xfffe }, { 50, 0x03fb }, { 59, 0xfffe }, - { 74, 0x03fb }, { 83, 0x0000 }, { 83, 0x0000 }, { 83, 0x0000 }, - /* 0x0400 */ - { 83, 0x0002 }, { 84, 0xffff }, { 100, 0xffff }, { 116, 0xffff }, - { 132, 0xffff }, { 148, 0x0002 }, -}; -static const Summary16 gb2312_uni2indx_page20[101] = { - /* 0x2000 */ - { 149, 0x0000 }, { 149, 0x3360 }, { 155, 0x0040 }, { 156, 0x080d }, - { 160, 0x0000 }, { 160, 0x0000 }, { 160, 0x0000 }, { 160, 0x0000 }, - { 160, 0x0000 }, { 160, 0x0000 }, { 160, 0x0000 }, { 160, 0x0000 }, - { 160, 0x0000 }, { 160, 0x0000 }, { 160, 0x0000 }, { 160, 0x0000 }, - /* 0x2100 */ - { 160, 0x0008 }, { 161, 0x0040 }, { 162, 0x0000 }, { 162, 0x0000 }, - { 162, 0x0000 }, { 162, 0x0000 }, { 162, 0x0fff }, { 174, 0x0000 }, - { 174, 0x0000 }, { 174, 0x000f }, { 178, 0x0000 }, { 178, 0x0000 }, - { 178, 0x0000 }, { 178, 0x0000 }, { 178, 0x0000 }, { 178, 0x0000 }, - /* 0x2200 */ - { 178, 0x8100 }, { 180, 0x6402 }, { 184, 0x4fa1 }, { 192, 0x20f0 }, - { 197, 0x1100 }, { 199, 0x0000 }, { 199, 0xc033 }, { 205, 0x0000 }, - { 205, 0x0000 }, { 205, 0x0200 }, { 206, 0x0020 }, { 207, 0x0000 }, - { 207, 0x0000 }, { 207, 0x0000 }, { 207, 0x0000 }, { 207, 0x0000 }, - /* 0x2300 */ - { 207, 0x0000 }, { 207, 0x0004 }, { 208, 0x0000 }, { 208, 0x0000 }, - { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, - { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, - { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, - /* 0x2400 */ - { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, - { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x03ff }, { 218, 0xfff0 }, - { 230, 0xffff }, { 246, 0x0fff }, { 258, 0x0000 }, { 258, 0x0000 }, - { 258, 0x0000 }, { 258, 0x0000 }, { 258, 0x0000 }, { 258, 0x0000 }, - /* 0x2500 */ - { 258, 0xffff }, { 274, 0xffff }, { 290, 0xffff }, { 306, 0xffff }, - { 322, 0x0fff }, { 334, 0x0000 }, { 334, 0x0000 }, { 334, 0x0000 }, - { 334, 0x0000 }, { 334, 0x0000 }, { 334, 0x0003 }, { 336, 0x000c }, - { 338, 0xc8c0 }, { 343, 0x0000 }, { 343, 0x0000 }, { 343, 0x0000 }, - /* 0x2600 */ - { 343, 0x0060 }, { 345, 0x0000 }, { 345, 0x0000 }, { 345, 0x0000 }, - { 345, 0x0005 }, -}; -static const Summary16 gb2312_uni2indx_page30[35] = { - /* 0x3000 */ - { 347, 0xff2f }, { 360, 0x00fb }, { 367, 0x0000 }, { 367, 0x0000 }, - { 367, 0xfffe }, { 382, 0xffff }, { 398, 0xffff }, { 414, 0xffff }, - { 430, 0xffff }, { 446, 0x000f }, { 450, 0xfffe }, { 465, 0xffff }, - { 481, 0xffff }, { 497, 0xffff }, { 513, 0xffff }, { 529, 0x087f }, - /* 0x3100 */ - { 537, 0xffe0 }, { 548, 0xffff }, { 564, 0x03ff }, { 574, 0x0000 }, - { 574, 0x0000 }, { 574, 0x0000 }, { 574, 0x0000 }, { 574, 0x0000 }, - { 574, 0x0000 }, { 574, 0x0000 }, { 574, 0x0000 }, { 574, 0x0000 }, - { 574, 0x0000 }, { 574, 0x0000 }, { 574, 0x0000 }, { 574, 0x0000 }, - /* 0x3200 */ - { 574, 0x0000 }, { 574, 0x0000 }, { 574, 0x03ff }, -}; -static const Summary16 gb2312_uni2indx_page4e[1263] = { - /* 0x4e00 */ - { 584, 0x7f8b }, { 595, 0x7f7b }, { 608, 0x3db4 }, { 617, 0xef55 }, - { 628, 0xfba8 }, { 638, 0xf35d }, { 649, 0x0243 }, { 653, 0x400b }, - { 657, 0xfb40 }, { 665, 0x8d3e }, { 674, 0x7bf7 }, { 687, 0x8c2c }, - { 693, 0x6eff }, { 706, 0xe3fa }, { 717, 0x1d3a }, { 725, 0xa8ed }, - /* 0x4f00 */ - { 734, 0xe602 }, { 740, 0xcf83 }, { 749, 0x8cf5 }, { 758, 0x3555 }, - { 766, 0xe048 }, { 771, 0xffab }, { 784, 0x92b9 }, { 792, 0xd859 }, - { 800, 0xab18 }, { 807, 0x2892 }, { 812, 0xd7e9 }, { 823, 0x8020 }, - { 825, 0xc438 }, { 831, 0xf583 }, { 840, 0xe74a }, { 849, 0x450a }, - /* 0x5000 */ - { 854, 0xb000 }, { 857, 0x9714 }, { 864, 0x7762 }, { 873, 0x5400 }, - { 876, 0xd188 }, { 882, 0x1420 }, { 885, 0x1020 }, { 887, 0xc8c0 }, - { 892, 0x2121 }, { 896, 0x0000 }, { 896, 0x13a8 }, { 902, 0x0c04 }, - { 905, 0x8000 }, { 906, 0x0440 }, { 908, 0x70c0 }, { 913, 0x0828 }, - /* 0x5100 */ - { 916, 0x08c0 }, { 919, 0x0004 }, { 920, 0x0002 }, { 921, 0x8000 }, - { 922, 0x2b7b }, { 932, 0x1472 }, { 938, 0x7924 }, { 945, 0x3bfb }, - { 957, 0x3327 }, { 965, 0x1ae4 }, { 972, 0x9835 }, { 979, 0x38ef }, - { 989, 0x9ad1 }, { 997, 0x2802 }, { 1000, 0xa813 }, { 1006, 0xbf69 }, - /* 0x5200 */ - { 1017, 0x65cf }, { 1027, 0x2fc6 }, { 1036, 0x6b11 }, { 1043, 0xafc9 }, - { 1053, 0x340f }, { 1060, 0x5053 }, { 1066, 0x86a2 }, { 1072, 0xa004 }, - { 1075, 0x0106 }, { 1078, 0xe809 }, { 1084, 0x3f0f }, { 1094, 0xc00e }, - { 1099, 0x0a88 }, { 1103, 0x8145 }, { 1108, 0x0010 }, { 1109, 0xc601 }, - /* 0x5300 */ - { 1114, 0xa161 }, { 1120, 0x26e1 }, { 1127, 0x444b }, { 1133, 0xce00 }, - { 1138, 0xc7aa }, { 1147, 0xd4ee }, { 1157, 0xcadf }, { 1168, 0x85bb }, - { 1177, 0x3a74 }, { 1185, 0xa520 }, { 1190, 0x436c }, { 1197, 0x8840 }, - { 1200, 0x3f06 }, { 1208, 0x8bd2 }, { 1216, 0xff79 }, { 1229, 0x3bef }, - /* 0x5400 */ - { 1241, 0xf75a }, { 1252, 0xe8ef }, { 1263, 0xfbcb }, { 1275, 0x5b36 }, - { 1284, 0x0d49 }, { 1290, 0x1bfd }, { 1301, 0x0154 }, { 1305, 0x39ee }, - { 1315, 0xd855 }, { 1323, 0x2e75 }, { 1332, 0xbfd8 }, { 1343, 0xa91a }, - { 1350, 0xf3d7 }, { 1362, 0xf6bf }, { 1375, 0x67e0 }, { 1383, 0xb40c }, - /* 0x5500 */ - { 1389, 0x82c2 }, { 1394, 0x0813 }, { 1398, 0xd49d }, { 1407, 0xd08b }, - { 1414, 0x065a }, { 1420, 0x1061 }, { 1424, 0x74f2 }, { 1433, 0x59e0 }, - { 1440, 0x8f9f }, { 1451, 0xb312 }, { 1458, 0x0080 }, { 1459, 0x6aaa }, - { 1467, 0x3230 }, { 1472, 0xb05e }, { 1480, 0x9d7a }, { 1490, 0x60ac }, - /* 0x5600 */ - { 1496, 0xd303 }, { 1503, 0xc900 }, { 1507, 0x3098 }, { 1512, 0x8a56 }, - { 1519, 0x7000 }, { 1522, 0x1390 }, { 1527, 0x1f14 }, { 1534, 0x1842 }, - { 1538, 0xc060 }, { 1542, 0x0008 }, { 1543, 0x8008 }, { 1545, 0x1080 }, - { 1547, 0x0400 }, { 1548, 0xec90 }, { 1555, 0x2817 }, { 1561, 0xe633 }, - /* 0x5700 */ - { 1570, 0x0758 }, { 1576, 0x9000 }, { 1578, 0xf708 }, { 1586, 0x4e09 }, - { 1592, 0xf485 }, { 1600, 0xfc83 }, { 1609, 0xaf53 }, { 1619, 0x18c8 }, - { 1624, 0x187c }, { 1631, 0x080c }, { 1634, 0x6adf }, { 1645, 0x0114 }, - { 1648, 0xc80c }, { 1653, 0xa734 }, { 1661, 0xa011 }, { 1665, 0x2710 }, - /* 0x5800 */ - { 1670, 0x28c5 }, { 1676, 0x4222 }, { 1680, 0x0413 }, { 1684, 0x0021 }, - { 1686, 0x3010 }, { 1689, 0x4112 }, { 1693, 0x1820 }, { 1696, 0x4000 }, - { 1697, 0x022b }, { 1702, 0xc60c }, { 1708, 0x0300 }, { 1710, 0x1000 }, - { 1711, 0x0022 }, { 1713, 0x0022 }, { 1715, 0x5810 }, { 1719, 0x0249 }, - /* 0x5900 */ - { 1723, 0xa094 }, { 1728, 0x9670 }, { 1735, 0xeeb0 }, { 1744, 0x1792 }, - { 1751, 0xcb96 }, { 1760, 0x05f2 }, { 1767, 0x0025 }, { 1770, 0x2358 }, - { 1776, 0x25de }, { 1785, 0x42cc }, { 1791, 0xcf38 }, { 1800, 0x4a04 }, - { 1804, 0x0c40 }, { 1807, 0x359f }, { 1817, 0x1128 }, { 1821, 0x8a00 }, - /* 0x5a00 */ - { 1824, 0x13fa }, { 1833, 0x910a }, { 1838, 0x0229 }, { 1842, 0x1056 }, - { 1847, 0x0641 }, { 1851, 0x0420 }, { 1853, 0x0484 }, { 1856, 0x84f0 }, - { 1862, 0x0000 }, { 1862, 0x0c04 }, { 1865, 0x0400 }, { 1866, 0x412c }, - { 1871, 0x1206 }, { 1875, 0x1154 }, { 1880, 0x0a4b }, { 1886, 0x0002 }, - /* 0x5b00 */ - { 1887, 0x0200 }, { 1888, 0x00c0 }, { 1890, 0x0000 }, { 1890, 0x0094 }, - { 1893, 0x0001 }, { 1894, 0xbfbb }, { 1907, 0x167c }, { 1915, 0x242b }, - { 1921, 0x9bbb }, { 1932, 0x7fa8 }, { 1942, 0x0c7f }, { 1951, 0xe379 }, - { 1961, 0x10f4 }, { 1967, 0xe00d }, { 1973, 0x4132 }, { 1978, 0x9f01 }, - /* 0x5c00 */ - { 1985, 0x8652 }, { 1991, 0x3572 }, { 1999, 0x10b4 }, { 2004, 0xff12 }, - { 2014, 0xcf27 }, { 2024, 0x4223 }, { 2029, 0xc06b }, { 2036, 0x8602 }, - { 2040, 0x3106 }, { 2045, 0x1fd3 }, { 2055, 0x3a0c }, { 2061, 0xa1aa }, - { 2068, 0x0812 }, { 2071, 0x0204 }, { 2073, 0x2572 }, { 2080, 0x0801 }, - /* 0x5d00 */ - { 2082, 0x40cc }, { 2087, 0x4850 }, { 2091, 0x62d0 }, { 2097, 0x6010 }, - { 2100, 0x1c80 }, { 2104, 0x2900 }, { 2107, 0x9a00 }, { 2111, 0x0010 }, - { 2112, 0x0004 }, { 2113, 0x2200 }, { 2115, 0x0000 }, { 2115, 0x0080 }, - { 2116, 0x2020 }, { 2118, 0x6800 }, { 2121, 0xcbe6 }, { 2131, 0x609e }, - /* 0x5e00 */ - { 2138, 0x916e }, { 2146, 0x3f73 }, { 2157, 0x60c0 }, { 2161, 0x3982 }, - { 2167, 0x1034 }, { 2171, 0x4830 }, { 2175, 0x0006 }, { 2177, 0xbd5c }, - { 2187, 0x8cd1 }, { 2194, 0xd6fb }, { 2206, 0x20e1 }, { 2211, 0x43e8 }, - { 2218, 0x0600 }, { 2220, 0x084e }, { 2225, 0x0500 }, { 2227, 0xc4d0 }, - /* 0x5f00 */ - { 2233, 0x8d1f }, { 2242, 0x89aa }, { 2249, 0xa6e1 }, { 2257, 0x1602 }, - { 2261, 0x0001 }, { 2262, 0x21ed }, { 2270, 0x3656 }, { 2278, 0x1a8b }, - { 2285, 0x1fb7 }, { 2296, 0x13a5 }, { 2303, 0x6502 }, { 2308, 0x30a0 }, - { 2312, 0xb278 }, { 2320, 0x23c7 }, { 2328, 0x6c93 }, { 2336, 0xe922 }, - /* 0x6000 */ - { 2343, 0xe47f }, { 2354, 0x3a74 }, { 2362, 0x8fe3 }, { 2372, 0x9820 }, - { 2376, 0x280e }, { 2381, 0x2625 }, { 2387, 0xbf9c }, { 2398, 0xbf49 }, - { 2408, 0x3218 }, { 2413, 0xac54 }, { 2420, 0xb949 }, { 2428, 0x1916 }, - { 2434, 0x0c60 }, { 2438, 0xb522 }, { 2445, 0xfbc1 }, { 2455, 0x0659 }, - /* 0x6100 */ - { 2461, 0xe343 }, { 2469, 0x8420 }, { 2472, 0x08d9 }, { 2478, 0x8000 }, - { 2479, 0x5500 }, { 2483, 0x2022 }, { 2486, 0x0184 }, { 2489, 0x00a1 }, - { 2492, 0x4800 }, { 2494, 0x2010 }, { 2496, 0x1380 }, { 2500, 0x4080 }, - { 2502, 0x0d04 }, { 2506, 0x0016 }, { 2509, 0x0040 }, { 2510, 0x8020 }, - /* 0x6200 */ - { 2512, 0xfd40 }, { 2520, 0x8de7 }, { 2530, 0x5436 }, { 2537, 0xe098 }, - { 2543, 0x7b8b }, { 2553, 0x091e }, { 2559, 0xfec8 }, { 2569, 0xd249 }, - { 2576, 0x0611 }, { 2580, 0x8dee }, { 2590, 0x1937 }, { 2598, 0xba22 }, - { 2605, 0x77f4 }, { 2616, 0x9fdd }, { 2628, 0xf3ec }, { 2639, 0xf0da }, - /* 0x6300 */ - { 2648, 0x4386 }, { 2654, 0xec42 }, { 2661, 0x8d3f }, { 2671, 0x2604 }, - { 2675, 0xfa6c }, { 2685, 0xc021 }, { 2689, 0x628e }, { 2696, 0x0cc2 }, - { 2701, 0xd785 }, { 2710, 0x0145 }, { 2714, 0x77ad }, { 2725, 0x5599 }, - { 2733, 0xe250 }, { 2739, 0x4045 }, { 2743, 0x260b }, { 2749, 0xa154 }, - /* 0x6400 */ - { 2755, 0x9827 }, { 2762, 0x5819 }, { 2768, 0x3443 }, { 2774, 0xa410 }, - { 2778, 0x05f2 }, { 2785, 0x4114 }, { 2789, 0x2280 }, { 2792, 0x0700 }, - { 2795, 0x00b4 }, { 2799, 0x4266 }, { 2805, 0x7210 }, { 2810, 0x15a1 }, - { 2816, 0x6025 }, { 2821, 0x4185 }, { 2826, 0x0054 }, { 2829, 0x0000 }, - /* 0x6500 */ - { 2829, 0x0201 }, { 2831, 0x0104 }, { 2833, 0xc820 }, { 2837, 0xcb70 }, - { 2845, 0x9320 }, { 2850, 0x6a62 }, { 2857, 0x184c }, { 2862, 0x0095 }, - { 2866, 0x1880 }, { 2869, 0x9a8b }, { 2877, 0xaab2 }, { 2885, 0x3201 }, - { 2889, 0xd87a }, { 2898, 0x00c4 }, { 2901, 0xf3e5 }, { 2912, 0x04c3 }, - /* 0x6600 */ - { 2917, 0xd44d }, { 2925, 0xa238 }, { 2931, 0xa1a1 }, { 2937, 0x5072 }, - { 2943, 0x980a }, { 2948, 0x84fc }, { 2956, 0xc152 }, { 2962, 0x44d1 }, - { 2968, 0x1094 }, { 2972, 0x20c2 }, { 2976, 0x4180 }, { 2979, 0x4210 }, - { 2982, 0x0000 }, { 2982, 0x3a00 }, { 2986, 0x0240 }, { 2988, 0xd29d }, - /* 0x6700 */ - { 2997, 0x2f01 }, { 3003, 0xa8b1 }, { 3010, 0xbd40 }, { 3017, 0x2432 }, - { 3022, 0xd34d }, { 3031, 0xd04b }, { 3038, 0xa723 }, { 3046, 0xd0ad }, - { 3054, 0x0a92 }, { 3059, 0x75a1 }, { 3067, 0xadac }, { 3076, 0x01e9 }, - { 3082, 0x801a }, { 3086, 0x771f }, { 3097, 0x9225 }, { 3103, 0xa01b }, - /* 0x6800 */ - { 3109, 0xdfa1 }, { 3119, 0x20ca }, { 3124, 0x0602 }, { 3127, 0x738c }, - { 3135, 0x577f }, { 3147, 0x003b }, { 3152, 0x0bff }, { 3163, 0x00d0 }, - { 3166, 0x806a }, { 3171, 0x0088 }, { 3173, 0xa1c4 }, { 3179, 0x0029 }, - { 3182, 0x2a05 }, { 3187, 0x0524 }, { 3191, 0x4009 }, { 3194, 0x1623 }, - /* 0x6900 */ - { 3200, 0x6822 }, { 3205, 0x8005 }, { 3208, 0x2011 }, { 3211, 0xa211 }, - { 3216, 0x0004 }, { 3217, 0x6490 }, { 3222, 0x4849 }, { 3227, 0x1382 }, - { 3232, 0x23d5 }, { 3240, 0x1930 }, { 3245, 0x2980 }, { 3249, 0x0892 }, - { 3253, 0x5402 }, { 3257, 0x8811 }, { 3261, 0x2001 }, { 3263, 0xa004 }, - /* 0x6a00 */ - { 3266, 0x0400 }, { 3267, 0x8180 }, { 3270, 0x8502 }, { 3274, 0x6022 }, - { 3278, 0x0090 }, { 3280, 0x0b01 }, { 3284, 0x0022 }, { 3286, 0x1202 }, - { 3289, 0x4011 }, { 3292, 0x0083 }, { 3295, 0x1a01 }, { 3299, 0x0000 }, - { 3299, 0x0000 }, { 3299, 0x0000 }, { 3299, 0x0000 }, { 3299, 0x0000 }, - /* 0x6b00 */ - { 3299, 0x0000 }, { 3299, 0x0000 }, { 3299, 0x009f }, { 3305, 0x4684 }, - { 3310, 0x12c8 }, { 3315, 0x0200 }, { 3316, 0x04fc }, { 3323, 0x1a00 }, - { 3326, 0x2ede }, { 3336, 0x0c4c }, { 3341, 0x0402 }, { 3343, 0x80b8 }, - { 3348, 0xa826 }, { 3354, 0x0afc }, { 3362, 0x8c02 }, { 3366, 0x2228 }, - /* 0x6c00 */ - { 3370, 0xa0e0 }, { 3375, 0x8f7b }, { 3386, 0xc7d6 }, { 3396, 0x2135 }, - { 3402, 0x06c7 }, { 3409, 0xf8b1 }, { 3418, 0x0713 }, { 3424, 0x6255 }, - { 3431, 0x936e }, { 3440, 0x8a19 }, { 3446, 0x6efa }, { 3457, 0xfb0e }, - { 3467, 0x1630 }, { 3472, 0x48f9 }, { 3480, 0xcd2f }, { 3490, 0x7deb }, - /* 0x6d00 */ - { 3502, 0x5892 }, { 3508, 0x4e84 }, { 3514, 0x4ca0 }, { 3519, 0x7a2e }, - { 3528, 0xedea }, { 3539, 0x561e }, { 3547, 0xc649 }, { 3554, 0x1190 }, - { 3558, 0x5324 }, { 3564, 0xe83a }, { 3572, 0xcfdb }, { 3584, 0x8124 }, - { 3588, 0x18f1 }, { 3595, 0x6342 }, { 3601, 0x5853 }, { 3608, 0x1a8a }, - /* 0x6e00 */ - { 3614, 0x7420 }, { 3619, 0x24d3 }, { 3626, 0xaa3b }, { 3635, 0x0514 }, - { 3639, 0x6018 }, { 3643, 0x8958 }, { 3649, 0x4800 }, { 3651, 0xc000 }, - { 3653, 0x8268 }, { 3658, 0x9101 }, { 3662, 0x84a4 }, { 3667, 0x2cd6 }, - { 3675, 0x8886 }, { 3680, 0xc4ba }, { 3688, 0x0377 }, { 3696, 0x0210 }, - /* 0x6f00 */ - { 3698, 0x8244 }, { 3702, 0x0038 }, { 3705, 0xae11 }, { 3712, 0x404a }, - { 3716, 0x28c0 }, { 3720, 0x5100 }, { 3723, 0x6044 }, { 3727, 0x1514 }, - { 3732, 0x7310 }, { 3738, 0x1000 }, { 3739, 0x0082 }, { 3741, 0x0248 }, - { 3744, 0x0205 }, { 3747, 0x4006 }, { 3750, 0xc003 }, { 3754, 0x0000 }, - /* 0x7000 */ - { 3754, 0x0000 }, { 3754, 0x0c02 }, { 3757, 0x0008 }, { 3758, 0x0220 }, - { 3760, 0x9000 }, { 3762, 0x4000 }, { 3763, 0xb800 }, { 3767, 0xd161 }, - { 3774, 0x4621 }, { 3779, 0x3274 }, { 3786, 0xf800 }, { 3791, 0x3b8a }, - { 3799, 0x050f }, { 3805, 0x8b00 }, { 3809, 0xbbd0 }, { 3818, 0x2280 }, - /* 0x7100 */ - { 3821, 0x0600 }, { 3823, 0x0769 }, { 3830, 0x8040 }, { 3832, 0x0043 }, - { 3835, 0x5420 }, { 3839, 0x5000 }, { 3841, 0x41d0 }, { 3846, 0x250c }, - { 3851, 0x8410 }, { 3854, 0x8310 }, { 3858, 0x1101 }, { 3861, 0x0228 }, - { 3864, 0x4008 }, { 3866, 0x0030 }, { 3868, 0x40a1 }, { 3872, 0x0200 }, - /* 0x7200 */ - { 3873, 0x0040 }, { 3874, 0x2000 }, { 3875, 0x1500 }, { 3878, 0xabe3 }, - { 3888, 0x3180 }, { 3892, 0xaa44 }, { 3898, 0xc2c6 }, { 3905, 0xc624 }, - { 3911, 0xac13 }, { 3918, 0x8004 }, { 3920, 0xb000 }, { 3923, 0x03d1 }, - { 3929, 0x611e }, { 3936, 0x4285 }, { 3941, 0xf303 }, { 3949, 0x1d9f }, - /* 0x7300 */ - { 3959, 0x440a }, { 3963, 0x78e8 }, { 3971, 0x5e26 }, { 3979, 0xc392 }, - { 3986, 0x2000 }, { 3987, 0x0085 }, { 3990, 0xb001 }, { 3994, 0x4000 }, - { 3995, 0x4a90 }, { 4000, 0x8842 }, { 4004, 0xca04 }, { 4009, 0x0c8d }, - { 4015, 0xa705 }, { 4022, 0x4203 }, { 4026, 0x22a1 }, { 4031, 0x0004 }, - /* 0x7400 */ - { 4032, 0x8668 }, { 4038, 0x0c01 }, { 4041, 0x5564 }, { 4048, 0x1079 }, - { 4054, 0x0002 }, { 4055, 0xdea0 }, { 4063, 0x2000 }, { 4064, 0x40c1 }, - { 4068, 0x488b }, { 4074, 0x5001 }, { 4077, 0x0380 }, { 4080, 0x0400 }, - { 4081, 0x0000 }, { 4081, 0x5004 }, { 4084, 0xc05d }, { 4091, 0x80d0 }, - /* 0x7500 */ - { 4095, 0xa010 }, { 4098, 0x970a }, { 4105, 0xbb20 }, { 4112, 0x4daf }, - { 4122, 0xd921 }, { 4129, 0x1e10 }, { 4134, 0x0460 }, { 4137, 0x8314 }, - { 4142, 0x8848 }, { 4146, 0xa6d6 }, { 4155, 0xd83b }, { 4164, 0x733f }, - { 4175, 0x27bc }, { 4184, 0x4974 }, { 4191, 0x0ddc }, { 4199, 0x9213 }, - /* 0x7600 */ - { 4205, 0x142b }, { 4211, 0x8ba1 }, { 4218, 0x2e75 }, { 4227, 0xd139 }, - { 4235, 0x3009 }, { 4239, 0x5050 }, { 4243, 0x8808 }, { 4246, 0x6900 }, - { 4250, 0x49d4 }, { 4257, 0x024a }, { 4261, 0x4010 }, { 4263, 0x8016 }, - { 4267, 0xe564 }, { 4275, 0x89d7 }, { 4284, 0xc020 }, { 4287, 0x5316 }, - /* 0x7700 */ - { 4294, 0x2b92 }, { 4301, 0x8600 }, { 4304, 0xa345 }, { 4311, 0x15e0 }, - { 4317, 0x008b }, { 4321, 0x0c03 }, { 4325, 0x196e }, { 4333, 0xe200 }, - { 4337, 0x7031 }, { 4343, 0x8006 }, { 4346, 0x16a5 }, { 4353, 0xa829 }, - { 4359, 0x2000 }, { 4360, 0x1880 }, { 4363, 0x7aac }, { 4372, 0xe148 }, - /* 0x7800 */ - { 4378, 0x3207 }, { 4384, 0xb5d6 }, { 4394, 0x32e8 }, { 4401, 0x5f91 }, - { 4410, 0x50a1 }, { 4415, 0x20e5 }, { 4421, 0x7c00 }, { 4426, 0x1080 }, - { 4428, 0x7280 }, { 4433, 0x9d8a }, { 4441, 0x00aa }, { 4445, 0x421f }, - { 4452, 0x0e22 }, { 4457, 0x0231 }, { 4461, 0x1100 }, { 4463, 0x0494 }, - /* 0x7900 */ - { 4467, 0x0022 }, { 4469, 0x4008 }, { 4471, 0x0010 }, { 4472, 0x5c10 }, - { 4477, 0x0343 }, { 4482, 0xfcc8 }, { 4491, 0xa1a5 }, { 4498, 0x0580 }, - { 4501, 0x8433 }, { 4507, 0x0400 }, { 4508, 0x0080 }, { 4509, 0x6e08 }, - { 4515, 0x2a4b }, { 4522, 0x8126 }, { 4527, 0xaad8 }, { 4535, 0x2901 }, - /* 0x7a00 */ - { 4539, 0x684d }, { 4546, 0x4490 }, { 4550, 0x0009 }, { 4552, 0xba88 }, - { 4559, 0x0040 }, { 4560, 0x0082 }, { 4562, 0x0000 }, { 4562, 0x87d1 }, - { 4570, 0x215b }, { 4577, 0xb1e6 }, { 4586, 0x3161 }, { 4592, 0x8008 }, - { 4594, 0x0800 }, { 4595, 0xc240 }, { 4599, 0xa069 }, { 4605, 0xa600 }, - /* 0x7b00 */ - { 4609, 0x8d58 }, { 4616, 0x4a32 }, { 4622, 0x5d71 }, { 4631, 0x550a }, - { 4637, 0x9aa0 }, { 4643, 0x2d57 }, { 4652, 0x4005 }, { 4655, 0x4aa6 }, - { 4662, 0x2021 }, { 4665, 0x30b1 }, { 4671, 0x3fc6 }, { 4681, 0x0112 }, - { 4684, 0x10c2 }, { 4688, 0x260a }, { 4693, 0x4462 }, { 4698, 0x5082 }, - /* 0x7c00 */ - { 4702, 0x9880 }, { 4706, 0x8040 }, { 4708, 0x04c0 }, { 4711, 0x8100 }, - { 4713, 0x2003 }, { 4716, 0x0000 }, { 4716, 0x0000 }, { 4716, 0x3818 }, - { 4721, 0x0200 }, { 4722, 0xf1a6 }, { 4731, 0x4434 }, { 4736, 0x720e }, - { 4743, 0x35a2 }, { 4750, 0x92e0 }, { 4756, 0x8101 }, { 4759, 0x0900 }, - /* 0x7d00 */ - { 4761, 0x0400 }, { 4762, 0x0000 }, { 4762, 0x8885 }, { 4767, 0x0000 }, - { 4767, 0x0000 }, { 4767, 0x0000 }, { 4767, 0x4000 }, { 4768, 0x0080 }, - { 4769, 0x0000 }, { 4769, 0x0000 }, { 4769, 0x4040 }, { 4771, 0x0000 }, - { 4771, 0x0000 }, { 4771, 0x0000 }, { 4771, 0x0000 }, { 4771, 0x0000 }, - /* 0x7e00 */ - { 4771, 0x0000 }, { 4771, 0x0000 }, { 4771, 0x0000 }, { 4771, 0x0800 }, - { 4772, 0x0082 }, { 4774, 0x0000 }, { 4774, 0x0000 }, { 4774, 0x0000 }, - { 4774, 0x0004 }, { 4775, 0x8800 }, { 4777, 0xbfff }, { 4792, 0xe7ef }, - { 4805, 0xffff }, { 4821, 0xffbf }, { 4836, 0xefef }, { 4850, 0xfdff }, - /* 0x7f00 */ - { 4865, 0xfbff }, { 4880, 0xbffe }, { 4894, 0xffff }, { 4910, 0x057f }, - { 4919, 0x0034 }, { 4922, 0x85b3 }, { 4930, 0x4706 }, { 4936, 0x4216 }, - { 4941, 0x5402 }, { 4945, 0xe410 }, { 4950, 0x8092 }, { 4954, 0xb305 }, - { 4961, 0x5422 }, { 4966, 0x8130 }, { 4970, 0x4263 }, { 4976, 0x180b }, - /* 0x8000 */ - { 4981, 0x387b }, { 4990, 0x13f5 }, { 4999, 0x07e5 }, { 5007, 0xa9ea }, - { 5016, 0x3c4c }, { 5023, 0x0514 }, { 5027, 0x0600 }, { 5029, 0x8002 }, - { 5031, 0x1ad9 }, { 5039, 0xbd48 }, { 5047, 0xee37 }, { 5058, 0xf496 }, - { 5067, 0x705f }, { 5076, 0x7ec0 }, { 5084, 0xbfb2 }, { 5095, 0x355f }, - /* 0x8100 */ - { 5105, 0xe644 }, { 5112, 0x455f }, { 5121, 0x9000 }, { 5123, 0x4146 }, - { 5128, 0x1d40 }, { 5133, 0x063b }, { 5140, 0x62a1 }, { 5146, 0xfe13 }, - { 5156, 0x8505 }, { 5161, 0x3902 }, { 5166, 0x0548 }, { 5170, 0x0c08 }, - { 5173, 0x144f }, { 5180, 0x0000 }, { 5180, 0x3488 }, { 5185, 0x5818 }, - /* 0x8200 */ - { 5190, 0x3077 }, { 5198, 0xd815 }, { 5205, 0xbd0e }, { 5214, 0x4bfb }, - { 5225, 0x8a90 }, { 5230, 0x8500 }, { 5233, 0xc100 }, { 5236, 0xe61d }, - { 5245, 0xed14 }, { 5253, 0xb386 }, { 5261, 0xff72 }, { 5273, 0x639b }, - { 5282, 0xfd92 }, { 5292, 0xd9be }, { 5303, 0x887b }, { 5311, 0x0a92 }, - /* 0x8300 */ - { 5316, 0xd3fe }, { 5328, 0x1cb2 }, { 5335, 0xb980 }, { 5341, 0x177a }, - { 5350, 0x82c9 }, { 5356, 0xdc17 }, { 5365, 0xfffb }, { 5380, 0x3980 }, - { 5385, 0x4260 }, { 5389, 0x590c }, { 5395, 0x0f01 }, { 5400, 0x37df }, - { 5412, 0x94a3 }, { 5419, 0xb150 }, { 5425, 0x0623 }, { 5430, 0x2307 }, - /* 0x8400 */ - { 5436, 0xf85a }, { 5445, 0x3102 }, { 5449, 0x01f0 }, { 5454, 0x3102 }, - { 5458, 0x0040 }, { 5459, 0x1e82 }, { 5465, 0x3a0a }, { 5471, 0x056a }, - { 5477, 0x5b84 }, { 5484, 0x1280 }, { 5487, 0x8002 }, { 5489, 0xa714 }, - { 5496, 0x2612 }, { 5501, 0xa04b }, { 5507, 0x1069 }, { 5512, 0x9001 }, - /* 0x8500 */ - { 5515, 0x1000 }, { 5516, 0x848a }, { 5521, 0x1802 }, { 5524, 0x3f80 }, - { 5531, 0x0708 }, { 5535, 0x4240 }, { 5538, 0x0110 }, { 5540, 0x4e14 }, - { 5546, 0x80b0 }, { 5550, 0x1800 }, { 5552, 0xc510 }, { 5557, 0x0281 }, - { 5560, 0x8202 }, { 5563, 0x1029 }, { 5567, 0x0210 }, { 5569, 0x8800 }, - /* 0x8600 */ - { 5571, 0x0020 }, { 5572, 0x0042 }, { 5574, 0x0280 }, { 5576, 0x1100 }, - { 5578, 0xe000 }, { 5581, 0x4413 }, { 5586, 0x5804 }, { 5590, 0xfe02 }, - { 5598, 0x3c07 }, { 5605, 0x3028 }, { 5609, 0x9798 }, { 5617, 0x0473 }, - { 5623, 0xced1 }, { 5632, 0xcb13 }, { 5640, 0x6210 }, { 5644, 0x431f }, - /* 0x8700 */ - { 5652, 0x278d }, { 5660, 0x55ac }, { 5668, 0x422e }, { 5674, 0xc892 }, - { 5680, 0x5380 }, { 5685, 0x0288 }, { 5688, 0x4039 }, { 5693, 0x7851 }, - { 5700, 0x292c }, { 5706, 0x8088 }, { 5709, 0xb900 }, { 5714, 0x2428 }, - { 5718, 0x0c41 }, { 5722, 0x080e }, { 5726, 0x4421 }, { 5730, 0x4200 }, - /* 0x8800 */ - { 5732, 0x0408 }, { 5734, 0x0868 }, { 5738, 0x0006 }, { 5740, 0x1204 }, - { 5743, 0x3031 }, { 5748, 0x0290 }, { 5751, 0x5b3e }, { 5761, 0xe085 }, - { 5767, 0x2936 }, { 5774, 0x1044 }, { 5777, 0x2814 }, { 5781, 0x1082 }, - { 5784, 0x4266 }, { 5790, 0x8334 }, { 5796, 0x013c }, { 5801, 0x531b }, - /* 0x8900 */ - { 5809, 0x0404 }, { 5811, 0x0e0d }, { 5817, 0x0c22 }, { 5821, 0x0051 }, - { 5824, 0x0012 }, { 5826, 0xc000 }, { 5828, 0x0040 }, { 5829, 0x8800 }, - { 5831, 0x004a }, { 5834, 0x0000 }, { 5834, 0x0000 }, { 5834, 0x0000 }, - { 5834, 0xdff6 }, { 5847, 0x5447 }, { 5854, 0x8868 }, { 5859, 0x0008 }, - /* 0x8a00 */ - { 5860, 0x0081 }, { 5862, 0x0000 }, { 5862, 0x0000 }, { 5862, 0x4000 }, - { 5863, 0x0100 }, { 5864, 0x0000 }, { 5864, 0x0000 }, { 5864, 0x0200 }, - { 5865, 0x0600 }, { 5867, 0x0008 }, { 5868, 0x0000 }, { 5868, 0x0000 }, - { 5868, 0x0000 }, { 5868, 0x0000 }, { 5868, 0x0000 }, { 5868, 0x0000 }, - /* 0x8b00 */ - { 5868, 0x0080 }, { 5869, 0x0000 }, { 5869, 0x0040 }, { 5870, 0x0000 }, - { 5870, 0x0000 }, { 5870, 0x0000 }, { 5870, 0x1040 }, { 5872, 0x0000 }, - { 5872, 0x0000 }, { 5872, 0x0000 }, { 5872, 0xefff }, { 5887, 0xf7fd }, - { 5901, 0xff7f }, { 5916, 0xfffe }, { 5931, 0xfbff }, { 5946, 0xffff }, - /* 0x8c00 */ - { 5962, 0xfdff }, { 5977, 0xbfff }, { 5992, 0xffff }, { 6008, 0x00ff }, - { 6016, 0x12c2 }, { 6021, 0x0420 }, { 6023, 0x0c06 }, { 6027, 0x0708 }, - { 6031, 0x1624 }, { 6036, 0x0110 }, { 6038, 0x0000 }, { 6038, 0x0000 }, - { 6038, 0x0000 }, { 6038, 0x0000 }, { 6038, 0x0000 }, { 6038, 0x0000 }, - /* 0x8d00 */ - { 6038, 0x0000 }, { 6038, 0xe000 }, { 6041, 0xfffe }, { 6056, 0xffff }, - { 6072, 0xffff }, { 6088, 0x7f79 }, { 6100, 0x28df }, { 6109, 0x00f9 }, - { 6115, 0x0c32 }, { 6120, 0x8012 }, { 6123, 0x0008 }, { 6124, 0xd53a }, - { 6133, 0xd858 }, { 6140, 0xecc2 }, { 6148, 0x9d18 }, { 6155, 0x2fa8 }, - /* 0x8e00 */ - { 6163, 0x9620 }, { 6168, 0xe010 }, { 6172, 0xd60c }, { 6179, 0x2622 }, - { 6184, 0x0f97 }, { 6193, 0x0206 }, { 6196, 0xb240 }, { 6201, 0x9055 }, - { 6207, 0x80a2 }, { 6211, 0x5011 }, { 6215, 0x9800 }, { 6218, 0x0404 }, - { 6220, 0x4000 }, { 6221, 0x0000 }, { 6221, 0x0000 }, { 6221, 0x0000 }, - /* 0x8f00 */ - { 6221, 0x0000 }, { 6221, 0x0000 }, { 6221, 0x0000 }, { 6221, 0x0000 }, - { 6221, 0x0000 }, { 6221, 0x0000 }, { 6221, 0xfbc0 }, { 6230, 0xffff }, - { 6246, 0xeffe }, { 6260, 0xdffb }, { 6274, 0x0b08 }, { 6278, 0x6243 }, - { 6284, 0x41b6 }, { 6291, 0xfb3b }, { 6303, 0x6f74 }, { 6313, 0x2389 }, - /* 0x9000 */ - { 6319, 0xae7f }, { 6331, 0xecd7 }, { 6342, 0xe047 }, { 6349, 0x5960 }, - { 6355, 0xa096 }, { 6361, 0x098f }, { 6368, 0x612c }, { 6374, 0xa030 }, - { 6378, 0x090d }, { 6383, 0x2aaa }, { 6390, 0xd44e }, { 6398, 0x4f7b }, - { 6409, 0xc4b2 }, { 6416, 0x388b }, { 6423, 0xa9c6 }, { 6431, 0x6110 }, - /* 0x9100 */ - { 6435, 0x0014 }, { 6437, 0x4200 }, { 6439, 0x800c }, { 6442, 0x0202 }, - { 6444, 0xfe48 }, { 6453, 0x6485 }, { 6459, 0xd63e }, { 6469, 0xe3f7 }, - { 6481, 0x3aa0 }, { 6487, 0x0c07 }, { 6492, 0xe40c }, { 6498, 0x0430 }, - { 6501, 0xf680 }, { 6508, 0x1002 }, { 6510, 0x0000 }, { 6510, 0x0000 }, - /* 0x9200 */ - { 6510, 0x0000 }, { 6510, 0x0000 }, { 6510, 0x0000 }, { 6510, 0x0000 }, - { 6510, 0x0000 }, { 6510, 0x0000 }, { 6510, 0x0000 }, { 6510, 0x0010 }, - { 6511, 0x4000 }, { 6512, 0x0000 }, { 6512, 0x4000 }, { 6513, 0x0000 }, - { 6513, 0x0100 }, { 6514, 0x0000 }, { 6514, 0x0000 }, { 6514, 0x0000 }, - /* 0x9300 */ - { 6514, 0x0000 }, { 6514, 0x0000 }, { 6514, 0x0000 }, { 6514, 0x4000 }, - { 6515, 0x0000 }, { 6515, 0x0000 }, { 6515, 0x0400 }, { 6516, 0x0000 }, - { 6516, 0x8000 }, { 6517, 0x0000 }, { 6517, 0x0000 }, { 6517, 0x0000 }, - { 6517, 0x0400 }, { 6518, 0x0040 }, { 6519, 0x0000 }, { 6519, 0x0000 }, - /* 0x9400 */ - { 6519, 0x0000 }, { 6519, 0x0000 }, { 6519, 0x0000 }, { 6519, 0x4000 }, - { 6520, 0x0000 }, { 6520, 0x0000 }, { 6520, 0x0800 }, { 6521, 0x0000 }, - { 6521, 0xffe0 }, { 6532, 0xfebd }, { 6545, 0xffff }, { 6561, 0xffff }, - { 6577, 0x7f7f }, { 6591, 0xfbe7 }, { 6604, 0xffbf }, { 6619, 0xf7ff }, - /* 0x9500 */ - { 6634, 0xffff }, { 6650, 0xefff }, { 6665, 0xff7e }, { 6679, 0xdff7 }, - { 6693, 0xf6f7 }, { 6706, 0xfbdf }, { 6720, 0xbffe }, { 6734, 0x804f }, - { 6740, 0x0000 }, { 6740, 0x0000 }, { 6740, 0x0000 }, { 6740, 0x0000 }, - { 6740, 0x0000 }, { 6740, 0x0000 }, { 6740, 0xef00 }, { 6747, 0x7fff }, - /* 0x9600 */ - { 6762, 0xff7f }, { 6777, 0xb6f7 }, { 6789, 0x4406 }, { 6793, 0xb87e }, - { 6803, 0x3bf5 }, { 6814, 0x8831 }, { 6819, 0x1796 }, { 6827, 0x00f4 }, - { 6832, 0xa960 }, { 6838, 0x1391 }, { 6844, 0x0080 }, { 6845, 0x7249 }, - { 6852, 0xf2f3 }, { 6863, 0x0024 }, { 6865, 0x8701 }, { 6870, 0x42c8 }, - /* 0x9700 */ - { 6875, 0xe3d3 }, { 6885, 0x5048 }, { 6889, 0x2400 }, { 6891, 0x4305 }, - { 6896, 0x0000 }, { 6896, 0x4a4c }, { 6902, 0x0227 }, { 6907, 0x1058 }, - { 6911, 0x2820 }, { 6914, 0x0116 }, { 6918, 0xa809 }, { 6923, 0x0014 }, - { 6925, 0x0000 }, { 6925, 0x0000 }, { 6925, 0x3ec0 }, { 6932, 0x0068 }, - /* 0x9800 */ - { 6935, 0x0000 }, { 6935, 0x0000 }, { 6935, 0x0000 }, { 6935, 0x0000 }, - { 6935, 0x0000 }, { 6935, 0x0000 }, { 6935, 0x0000 }, { 6935, 0xffe0 }, - { 6946, 0xb7ff }, { 6960, 0xfddb }, { 6973, 0x00f7 }, { 6980, 0x0000 }, - { 6980, 0x4000 }, { 6981, 0xc72e }, { 6990, 0x0180 }, { 6992, 0x0000 }, - /* 0x9900 */ - { 6992, 0x2000 }, { 6993, 0x0001 }, { 6994, 0x4000 }, { 6995, 0x0000 }, - { 6995, 0x0000 }, { 6995, 0x0030 }, { 6997, 0xffa8 }, { 7008, 0xb4f7 }, - { 7019, 0xadf3 }, { 7030, 0x03ff }, { 7040, 0x0120 }, { 7042, 0x0000 }, - { 7042, 0x0000 }, { 7042, 0x0000 }, { 7042, 0x0000 }, { 7042, 0x0000 }, - /* 0x9a00 */ - { 7042, 0x0000 }, { 7042, 0x0000 }, { 7042, 0x0000 }, { 7042, 0x0000 }, - { 7042, 0x0000 }, { 7042, 0x0000 }, { 7042, 0xf000 }, { 7046, 0xfffb }, - { 7061, 0x9df7 }, { 7073, 0xfdcf }, { 7086, 0x01bf }, { 7094, 0x15c3 }, - { 7101, 0x1827 }, { 7107, 0x810a }, { 7111, 0xa842 }, { 7116, 0x0a00 }, - /* 0x9b00 */ - { 7118, 0x8108 }, { 7121, 0x8008 }, { 7123, 0x8008 }, { 7125, 0x1804 }, - { 7128, 0xa3be }, { 7138, 0x0012 }, { 7140, 0x0000 }, { 7140, 0x0000 }, - { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, - { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, - /* 0x9c00 */ - { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, - { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x9000 }, - { 7142, 0x69e6 }, { 7151, 0xdc37 }, { 7161, 0x6bff }, { 7174, 0x3dff }, - { 7187, 0xfcf8 }, { 7198, 0xf3f9 }, { 7210, 0x0004 }, -}; -static const Summary16 gb2312_uni2indx_page9e[27] = { - /* 0x9e00 */ - { 7211, 0x0000 }, { 7211, 0x8000 }, { 7212, 0xbf6f }, { 7225, 0xe7ee }, - { 7237, 0xdffe }, { 7251, 0x5da2 }, { 7259, 0x3fd8 }, { 7269, 0xc00b }, - { 7274, 0x0984 }, { 7278, 0xa00c }, { 7282, 0x0040 }, { 7283, 0x6910 }, - { 7288, 0xe210 }, { 7293, 0xb912 }, { 7300, 0x86a5 }, { 7307, 0x5a00 }, - /* 0x9f00 */ - { 7311, 0x6800 }, { 7314, 0x0289 }, { 7318, 0x9005 }, { 7322, 0x6a80 }, - { 7327, 0x0010 }, { 7328, 0x0003 }, { 7330, 0x0000 }, { 7330, 0x8000 }, - { 7331, 0x1ff9 }, { 7342, 0x8e00 }, { 7346, 0x0001 }, -}; -static const Summary16 gb2312_uni2indx_pageff[15] = { - /* 0xff00 */ - { 7347, 0xfffe }, { 7362, 0xffff }, { 7378, 0xffff }, { 7394, 0xffff }, - { 7410, 0xffff }, { 7426, 0x7fff }, { 7441, 0x0000 }, { 7441, 0x0000 }, - { 7441, 0x0000 }, { 7441, 0x0000 }, { 7441, 0x0000 }, { 7441, 0x0000 }, - { 7441, 0x0000 }, { 7441, 0x0000 }, { 7441, 0x002b }, -}; - -INTERNAL int gb2312_wctomb_zint(unsigned int* r, unsigned int wc) { - const Summary16 *summary = NULL; - if (wc < 0x0460) { - if (wc == 0x00b7) { /* ZINT: Patched to duplicate map to 0xA1A4 */ - *r = 0xA1A4; - return 2; - } - summary = &gb2312_uni2indx_page00[(wc>>4)]; - } else if (wc >= 0x2000 && wc < 0x2650) { - if (wc == 0x2014) { /* ZINT: Patched to duplicate map to 0xA1AA */ - *r = 0xA1AA; - return 2; - } - summary = &gb2312_uni2indx_page20[(wc>>4)-0x200]; - } else if (wc >= 0x3000 && wc < 0x3230) { - summary = &gb2312_uni2indx_page30[(wc>>4)-0x300]; - } else if (wc >= 0x4e00 && wc < 0x9cf0) { - summary = &gb2312_uni2indx_page4e[(wc>>4)-0x4e0]; - } else if (wc >= 0x9e00 && wc < 0x9fb0) { - summary = &gb2312_uni2indx_page9e[(wc>>4)-0x9e0]; - } else if (wc >= 0xff00 && wc < 0xfff0) { - summary = &gb2312_uni2indx_pageff[(wc>>4)-0xff0]; - } - if (summary) { - unsigned short used = summary->used; - unsigned int i = wc & 0x0f; - if (used & ((unsigned short) 1 << i)) { - /* Keep in 'used' only the bits 0..i-1. */ - used &= ((unsigned short) 1 << i) - 1; - /* Add 'summary->indx' and the number of bits set in 'used'. */ - used = (used & 0x5555) + ((used & 0xaaaa) >> 1); - used = (used & 0x3333) + ((used & 0xcccc) >> 2); - used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4); - used = (used & 0x00ff) + (used >> 8); - *r = gb2312_2charset[summary->indx + used]; - return 2; - } - } - return 0; -} - -/* Convert UTF-8 string to GB 2312 (EUC-CN) and place in array of ints */ -INTERNAL int gb2312_utf8tomb(struct zint_symbol *symbol, const unsigned char source[], size_t* p_length, unsigned int* gbdata) { - int error_number; - unsigned int i, length; -#ifndef _MSC_VER - unsigned int utfdata[*p_length + 1]; -#else - unsigned int* utfdata = (unsigned int*) _alloca((*p_length + 1) * sizeof(unsigned int)); -#endif - - error_number = utf8_to_unicode(symbol, source, utfdata, p_length, 1 /*disallow_4byte*/); - if (error_number != 0) { - return error_number; - } - - for (i = 0, length = *p_length; i < length; i++) { - if (utfdata[i] < 0x80) { - gbdata[i] = utfdata[i]; - } else { - if (!gb2312_wctomb_zint(gbdata + i, utfdata[i])) { - strcpy(symbol->errtxt, "810: Invalid character in input data"); - return ZINT_ERROR_INVALID_DATA; - } - } - } - - return 0; -} - -/* Convert UTF-8 string to single byte ECI and place in array of ints */ -INTERNAL int gb2312_utf8tosb(int eci, const unsigned char source[], size_t* p_length, unsigned int* gbdata, int full_multibyte) { - int error_number; -#ifndef _MSC_VER - unsigned char single_byte[*p_length + 1]; -#else - unsigned char* single_byte = (unsigned char*) _alloca(*p_length + 1); -#endif - - error_number = utf_to_eci(eci, source, single_byte, p_length); - if (error_number != 0) { - /* Note not setting `symbol->errtxt`, up to caller */ - return error_number; - } - - gb2312_cpy(single_byte, p_length, gbdata, full_multibyte); - - return 0; -} - -/* If `full_multibyte` set, copy byte input stream to array of ints, putting double-bytes that match GRIDMATRIX Chinese mode in a single entry. - * If `full_multibyte` not set, do a straight copy */ -INTERNAL void gb2312_cpy(const unsigned char source[], size_t* p_length, unsigned int* gbdata, int full_multibyte) { - unsigned int i, j, length; - unsigned char c1, c2; - - if (full_multibyte) { - for (i = 0, j = 0, length = *p_length; i < length; i++, j++) { - if (length - i >= 2) { - c1 = source[i]; - c2 = source[i + 1]; - if (((c1 >= 0xA1 && c1 <= 0xA9) || (c1 >= 0xB0 && c1 <= 0xF7)) && c2 >= 0xA1 && c2 <= 0xFE) { - /* This may or may not be valid GB 2312 (EUC-CN), but don't care as long as it can be encoded in GRIDMATRIX Chinese mode */ - gbdata[j] = (c1 << 8) | c2; - i++; - } else { - gbdata[j] = c1; - } - } else { - gbdata[j] = source[i]; - } - } - *p_length = j; - } else { - /* Straight copy */ - for (i = 0, length = *p_length; i < length; i++) { - gbdata[i] = source[i]; - } - } -} diff --git a/backend/gb2312.h b/backend/gb2312.h index b3ca91b..909748f 100644 --- a/backend/gb2312.h +++ b/backend/gb2312.h @@ -1,7 +1,7 @@ -/* gb2312.h - Unicode to GB 2312-1980 (EUC-CN) +/* gb2312.h - Unicode to GB 2312-1980 lookup table libzint - the open source barcode library - Copyright (C) 2009-2020 Robin Stuart + Copyright (C) 2009-2017 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -28,22 +28,7452 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ -#ifndef GB2312_H -#define GB2312_H +static const unsigned short int gb2312_lookup[] = { + 0x00A4, 0xA1E8, + 0x00A7, 0xA1EC, + 0x00A8, 0xA1A7, + 0x00B0, 0xA1E3, + 0x00B1, 0xA1C0, + 0x00B7, 0xA1A4, + 0x00D7, 0xA1C1, + 0x00E0, 0xA8A4, + 0x00E1, 0xA8A2, + 0x00E8, 0xA8A8, + 0x00E9, 0xA8A6, + 0x00EA, 0xA8BA, + 0x00EC, 0xA8AC, + 0x00ED, 0xA8AA, + 0x00F2, 0xA8B0, + 0x00F3, 0xA8AE, + 0x00F7, 0xA1C2, + 0x00F9, 0xA8B4, + 0x00FA, 0xA8B2, + 0x00FC, 0xA8B9, + 0x0101, 0xA8A1, + 0x0113, 0xA8A5, + 0x011B, 0xA8A7, + 0x012B, 0xA8A9, + 0x014D, 0xA8AD, + 0x016B, 0xA8B1, + 0x01CE, 0xA8A3, + 0x01D0, 0xA8AB, + 0x01D2, 0xA8AF, + 0x01D4, 0xA8B3, + 0x01D6, 0xA8B5, + 0x01D8, 0xA8B6, + 0x01DA, 0xA8B7, + 0x01DC, 0xA8B8, + 0x02C7, 0xA1A6, + 0x02C9, 0xA1A5, + 0x0391, 0xA6A1, + 0x0392, 0xA6A2, + 0x0393, 0xA6A3, + 0x0394, 0xA6A4, + 0x0395, 0xA6A5, + 0x0396, 0xA6A6, + 0x0397, 0xA6A7, + 0x0398, 0xA6A8, + 0x0399, 0xA6A9, + 0x039A, 0xA6AA, + 0x039B, 0xA6AB, + 0x039C, 0xA6AC, + 0x039D, 0xA6AD, + 0x039E, 0xA6AE, + 0x039F, 0xA6AF, + 0x03A0, 0xA6B0, + 0x03A1, 0xA6B1, + 0x03A3, 0xA6B2, + 0x03A4, 0xA6B3, + 0x03A5, 0xA6B4, + 0x03A6, 0xA6B5, + 0x03A7, 0xA6B6, + 0x03A8, 0xA6B7, + 0x03A9, 0xA6B8, + 0x03B1, 0xA6C1, + 0x03B2, 0xA6C2, + 0x03B3, 0xA6C3, + 0x03B4, 0xA6C4, + 0x03B5, 0xA6C5, + 0x03B6, 0xA6C6, + 0x03B7, 0xA6C7, + 0x03B8, 0xA6C8, + 0x03B9, 0xA6C9, + 0x03BA, 0xA6CA, + 0x03BB, 0xA6CB, + 0x03BC, 0xA6CC, + 0x03BD, 0xA6CD, + 0x03BE, 0xA6CE, + 0x03BF, 0xA6CF, + 0x03C0, 0xA6D0, + 0x03C1, 0xA6D1, + 0x03C3, 0xA6D2, + 0x03C4, 0xA6D3, + 0x03C5, 0xA6D4, + 0x03C6, 0xA6D5, + 0x03C7, 0xA6D6, + 0x03C8, 0xA6D7, + 0x03C9, 0xA6D8, + 0x0401, 0xA7A7, + 0x0410, 0xA7A1, + 0x0411, 0xA7A2, + 0x0412, 0xA7A3, + 0x0413, 0xA7A4, + 0x0414, 0xA7A5, + 0x0415, 0xA7A6, + 0x0416, 0xA7A8, + 0x0417, 0xA7A9, + 0x0418, 0xA7AA, + 0x0419, 0xA7AB, + 0x041A, 0xA7AC, + 0x041B, 0xA7AD, + 0x041C, 0xA7AE, + 0x041D, 0xA7AF, + 0x041E, 0xA7B0, + 0x041F, 0xA7B1, + 0x0420, 0xA7B2, + 0x0421, 0xA7B3, + 0x0422, 0xA7B4, + 0x0423, 0xA7B5, + 0x0424, 0xA7B6, + 0x0425, 0xA7B7, + 0x0426, 0xA7B8, + 0x0427, 0xA7B9, + 0x0428, 0xA7BA, + 0x0429, 0xA7BB, + 0x042A, 0xA7BC, + 0x042B, 0xA7BD, + 0x042C, 0xA7BE, + 0x042D, 0xA7BF, + 0x042E, 0xA7C0, + 0x042F, 0xA7C1, + 0x0430, 0xA7D1, + 0x0431, 0xA7D2, + 0x0432, 0xA7D3, + 0x0433, 0xA7D4, + 0x0434, 0xA7D5, + 0x0435, 0xA7D6, + 0x0436, 0xA7D8, + 0x0437, 0xA7D9, + 0x0438, 0xA7DA, + 0x0439, 0xA7DB, + 0x043A, 0xA7DC, + 0x043B, 0xA7DD, + 0x043C, 0xA7DE, + 0x043D, 0xA7DF, + 0x043E, 0xA7E0, + 0x043F, 0xA7E1, + 0x0440, 0xA7E2, + 0x0441, 0xA7E3, + 0x0442, 0xA7E4, + 0x0443, 0xA7E5, + 0x0444, 0xA7E6, + 0x0445, 0xA7E7, + 0x0446, 0xA7E8, + 0x0447, 0xA7E9, + 0x0448, 0xA7EA, + 0x0449, 0xA7EB, + 0x044A, 0xA7EC, + 0x044B, 0xA7ED, + 0x044C, 0xA7EE, + 0x044D, 0xA7EF, + 0x044E, 0xA7F0, + 0x044F, 0xA7F1, + 0x0451, 0xA7D7, + 0x2014, 0xA1AA, + 0x2016, 0xA1AC, + 0x2018, 0xA1AE, + 0x2019, 0xA1AF, + 0x201C, 0xA1B0, + 0x201D, 0xA1B1, + 0x2026, 0xA1AD, + 0x2030, 0xA1EB, + 0x2032, 0xA1E4, + 0x2033, 0xA1E5, + 0x203B, 0xA1F9, + 0x2103, 0xA1E6, + 0x2116, 0xA1ED, + 0x2160, 0xA2F1, + 0x2161, 0xA2F2, + 0x2162, 0xA2F3, + 0x2163, 0xA2F4, + 0x2164, 0xA2F5, + 0x2165, 0xA2F6, + 0x2166, 0xA2F7, + 0x2167, 0xA2F8, + 0x2168, 0xA2F9, + 0x2169, 0xA2FA, + 0x216A, 0xA2FB, + 0x216B, 0xA2FC, + 0x2190, 0xA1FB, + 0x2191, 0xA1FC, + 0x2192, 0xA1FA, + 0x2193, 0xA1FD, + 0x2208, 0xA1CA, + 0x220F, 0xA1C7, + 0x2211, 0xA1C6, + 0x221A, 0xA1CC, + 0x221D, 0xA1D8, + 0x221E, 0xA1DE, + 0x2220, 0xA1CF, + 0x2225, 0xA1CE, + 0x2227, 0xA1C4, + 0x2228, 0xA1C5, + 0x2229, 0xA1C9, + 0x222A, 0xA1C8, + 0x222B, 0xA1D2, + 0x222E, 0xA1D3, + 0x2234, 0xA1E0, + 0x2235, 0xA1DF, + 0x2236, 0xA1C3, + 0x2237, 0xA1CB, + 0x223D, 0xA1D7, + 0x2248, 0xA1D6, + 0x224C, 0xA1D5, + 0x2260, 0xA1D9, + 0x2261, 0xA1D4, + 0x2264, 0xA1DC, + 0x2265, 0xA1DD, + 0x226E, 0xA1DA, + 0x226F, 0xA1DB, + 0x2299, 0xA1D1, + 0x22A5, 0xA1CD, + 0x2312, 0xA1D0, + 0x2460, 0xA2D9, + 0x2461, 0xA2DA, + 0x2462, 0xA2DB, + 0x2463, 0xA2DC, + 0x2464, 0xA2DD, + 0x2465, 0xA2DE, + 0x2466, 0xA2DF, + 0x2467, 0xA2E0, + 0x2468, 0xA2E1, + 0x2469, 0xA2E2, + 0x2474, 0xA2C5, + 0x2475, 0xA2C6, + 0x2476, 0xA2C7, + 0x2477, 0xA2C8, + 0x2478, 0xA2C9, + 0x2479, 0xA2CA, + 0x247A, 0xA2CB, + 0x247B, 0xA2CC, + 0x247C, 0xA2CD, + 0x247D, 0xA2CE, + 0x247E, 0xA2CF, + 0x247F, 0xA2D0, + 0x2480, 0xA2D1, + 0x2481, 0xA2D2, + 0x2482, 0xA2D3, + 0x2483, 0xA2D4, + 0x2484, 0xA2D5, + 0x2485, 0xA2D6, + 0x2486, 0xA2D7, + 0x2487, 0xA2D8, + 0x2488, 0xA2B1, + 0x2489, 0xA2B2, + 0x248A, 0xA2B3, + 0x248B, 0xA2B4, + 0x248C, 0xA2B5, + 0x248D, 0xA2B6, + 0x248E, 0xA2B7, + 0x248F, 0xA2B8, + 0x2490, 0xA2B9, + 0x2491, 0xA2BA, + 0x2492, 0xA2BB, + 0x2493, 0xA2BC, + 0x2494, 0xA2BD, + 0x2495, 0xA2BE, + 0x2496, 0xA2BF, + 0x2497, 0xA2C0, + 0x2498, 0xA2C1, + 0x2499, 0xA2C2, + 0x249A, 0xA2C3, + 0x249B, 0xA2C4, + 0x2500, 0xA9A4, + 0x2501, 0xA9A5, + 0x2502, 0xA9A6, + 0x2503, 0xA9A7, + 0x2504, 0xA9A8, + 0x2505, 0xA9A9, + 0x2506, 0xA9AA, + 0x2507, 0xA9AB, + 0x2508, 0xA9AC, + 0x2509, 0xA9AD, + 0x250A, 0xA9AE, + 0x250B, 0xA9AF, + 0x250C, 0xA9B0, + 0x250D, 0xA9B1, + 0x250E, 0xA9B2, + 0x250F, 0xA9B3, + 0x2510, 0xA9B4, + 0x2511, 0xA9B5, + 0x2512, 0xA9B6, + 0x2513, 0xA9B7, + 0x2514, 0xA9B8, + 0x2515, 0xA9B9, + 0x2516, 0xA9BA, + 0x2517, 0xA9BB, + 0x2518, 0xA9BC, + 0x2519, 0xA9BD, + 0x251A, 0xA9BE, + 0x251B, 0xA9BF, + 0x251C, 0xA9C0, + 0x251D, 0xA9C1, + 0x251E, 0xA9C2, + 0x251F, 0xA9C3, + 0x2520, 0xA9C4, + 0x2521, 0xA9C5, + 0x2522, 0xA9C6, + 0x2523, 0xA9C7, + 0x2524, 0xA9C8, + 0x2525, 0xA9C9, + 0x2526, 0xA9CA, + 0x2527, 0xA9CB, + 0x2528, 0xA9CC, + 0x2529, 0xA9CD, + 0x252A, 0xA9CE, + 0x252B, 0xA9CF, + 0x252C, 0xA9D0, + 0x252D, 0xA9D1, + 0x252E, 0xA9D2, + 0x252F, 0xA9D3, + 0x2530, 0xA9D4, + 0x2531, 0xA9D5, + 0x2532, 0xA9D6, + 0x2533, 0xA9D7, + 0x2534, 0xA9D8, + 0x2535, 0xA9D9, + 0x2536, 0xA9DA, + 0x2537, 0xA9DB, + 0x2538, 0xA9DC, + 0x2539, 0xA9DD, + 0x253A, 0xA9DE, + 0x253B, 0xA9DF, + 0x253C, 0xA9E0, + 0x253D, 0xA9E1, + 0x253E, 0xA9E2, + 0x253F, 0xA9E3, + 0x2540, 0xA9E4, + 0x2541, 0xA9E5, + 0x2542, 0xA9E6, + 0x2543, 0xA9E7, + 0x2544, 0xA9E8, + 0x2545, 0xA9E9, + 0x2546, 0xA9EA, + 0x2547, 0xA9EB, + 0x2548, 0xA9EC, + 0x2549, 0xA9ED, + 0x254A, 0xA9EE, + 0x254B, 0xA9EF, + 0x25A0, 0xA1F6, + 0x25A1, 0xA1F5, + 0x25B2, 0xA1F8, + 0x25B3, 0xA1F7, + 0x25C6, 0xA1F4, + 0x25C7, 0xA1F3, + 0x25CB, 0xA1F0, + 0x25CE, 0xA1F2, + 0x25CF, 0xA1F1, + 0x2605, 0xA1EF, + 0x2606, 0xA1EE, + 0x2640, 0xA1E2, + 0x2642, 0xA1E1, + 0x3000, 0xA1A1, + 0x3001, 0xA1A2, + 0x3002, 0xA1A3, + 0x3003, 0xA1A8, + 0x3005, 0xA1A9, + 0x3008, 0xA1B4, + 0x3009, 0xA1B5, + 0x300A, 0xA1B6, + 0x300B, 0xA1B7, + 0x300C, 0xA1B8, + 0x300D, 0xA1B9, + 0x300E, 0xA1BA, + 0x300F, 0xA1BB, + 0x3010, 0xA1BE, + 0x3011, 0xA1BF, + 0x3013, 0xA1FE, + 0x3014, 0xA1B2, + 0x3015, 0xA1B3, + 0x3016, 0xA1BC, + 0x3017, 0xA1BD, + 0x3041, 0xA4A1, + 0x3042, 0xA4A2, + 0x3043, 0xA4A3, + 0x3044, 0xA4A4, + 0x3045, 0xA4A5, + 0x3046, 0xA4A6, + 0x3047, 0xA4A7, + 0x3048, 0xA4A8, + 0x3049, 0xA4A9, + 0x304A, 0xA4AA, + 0x304B, 0xA4AB, + 0x304C, 0xA4AC, + 0x304D, 0xA4AD, + 0x304E, 0xA4AE, + 0x304F, 0xA4AF, + 0x3050, 0xA4B0, + 0x3051, 0xA4B1, + 0x3052, 0xA4B2, + 0x3053, 0xA4B3, + 0x3054, 0xA4B4, + 0x3055, 0xA4B5, + 0x3056, 0xA4B6, + 0x3057, 0xA4B7, + 0x3058, 0xA4B8, + 0x3059, 0xA4B9, + 0x305A, 0xA4BA, + 0x305B, 0xA4BB, + 0x305C, 0xA4BC, + 0x305D, 0xA4BD, + 0x305E, 0xA4BE, + 0x305F, 0xA4BF, + 0x3060, 0xA4C0, + 0x3061, 0xA4C1, + 0x3062, 0xA4C2, + 0x3063, 0xA4C3, + 0x3064, 0xA4C4, + 0x3065, 0xA4C5, + 0x3066, 0xA4C6, + 0x3067, 0xA4C7, + 0x3068, 0xA4C8, + 0x3069, 0xA4C9, + 0x306A, 0xA4CA, + 0x306B, 0xA4CB, + 0x306C, 0xA4CC, + 0x306D, 0xA4CD, + 0x306E, 0xA4CE, + 0x306F, 0xA4CF, + 0x3070, 0xA4D0, + 0x3071, 0xA4D1, + 0x3072, 0xA4D2, + 0x3073, 0xA4D3, + 0x3074, 0xA4D4, + 0x3075, 0xA4D5, + 0x3076, 0xA4D6, + 0x3077, 0xA4D7, + 0x3078, 0xA4D8, + 0x3079, 0xA4D9, + 0x307A, 0xA4DA, + 0x307B, 0xA4DB, + 0x307C, 0xA4DC, + 0x307D, 0xA4DD, + 0x307E, 0xA4DE, + 0x307F, 0xA4DF, + 0x3080, 0xA4E0, + 0x3081, 0xA4E1, + 0x3082, 0xA4E2, + 0x3083, 0xA4E3, + 0x3084, 0xA4E4, + 0x3085, 0xA4E5, + 0x3086, 0xA4E6, + 0x3087, 0xA4E7, + 0x3088, 0xA4E8, + 0x3089, 0xA4E9, + 0x308A, 0xA4EA, + 0x308B, 0xA4EB, + 0x308C, 0xA4EC, + 0x308D, 0xA4ED, + 0x308E, 0xA4EE, + 0x308F, 0xA4EF, + 0x3090, 0xA4F0, + 0x3091, 0xA4F1, + 0x3092, 0xA4F2, + 0x3093, 0xA4F3, + 0x30A1, 0xA5A1, + 0x30A2, 0xA5A2, + 0x30A3, 0xA5A3, + 0x30A4, 0xA5A4, + 0x30A5, 0xA5A5, + 0x30A6, 0xA5A6, + 0x30A7, 0xA5A7, + 0x30A8, 0xA5A8, + 0x30A9, 0xA5A9, + 0x30AA, 0xA5AA, + 0x30AB, 0xA5AB, + 0x30AC, 0xA5AC, + 0x30AD, 0xA5AD, + 0x30AE, 0xA5AE, + 0x30AF, 0xA5AF, + 0x30B0, 0xA5B0, + 0x30B1, 0xA5B1, + 0x30B2, 0xA5B2, + 0x30B3, 0xA5B3, + 0x30B4, 0xA5B4, + 0x30B5, 0xA5B5, + 0x30B6, 0xA5B6, + 0x30B7, 0xA5B7, + 0x30B8, 0xA5B8, + 0x30B9, 0xA5B9, + 0x30BA, 0xA5BA, + 0x30BB, 0xA5BB, + 0x30BC, 0xA5BC, + 0x30BD, 0xA5BD, + 0x30BE, 0xA5BE, + 0x30BF, 0xA5BF, + 0x30C0, 0xA5C0, + 0x30C1, 0xA5C1, + 0x30C2, 0xA5C2, + 0x30C3, 0xA5C3, + 0x30C4, 0xA5C4, + 0x30C5, 0xA5C5, + 0x30C6, 0xA5C6, + 0x30C7, 0xA5C7, + 0x30C8, 0xA5C8, + 0x30C9, 0xA5C9, + 0x30CA, 0xA5CA, + 0x30CB, 0xA5CB, + 0x30CC, 0xA5CC, + 0x30CD, 0xA5CD, + 0x30CE, 0xA5CE, + 0x30CF, 0xA5CF, + 0x30D0, 0xA5D0, + 0x30D1, 0xA5D1, + 0x30D2, 0xA5D2, + 0x30D3, 0xA5D3, + 0x30D4, 0xA5D4, + 0x30D5, 0xA5D5, + 0x30D6, 0xA5D6, + 0x30D7, 0xA5D7, + 0x30D8, 0xA5D8, + 0x30D9, 0xA5D9, + 0x30DA, 0xA5DA, + 0x30DB, 0xA5DB, + 0x30DC, 0xA5DC, + 0x30DD, 0xA5DD, + 0x30DE, 0xA5DE, + 0x30DF, 0xA5DF, + 0x30E0, 0xA5E0, + 0x30E1, 0xA5E1, + 0x30E2, 0xA5E2, + 0x30E3, 0xA5E3, + 0x30E4, 0xA5E4, + 0x30E5, 0xA5E5, + 0x30E6, 0xA5E6, + 0x30E7, 0xA5E7, + 0x30E8, 0xA5E8, + 0x30E9, 0xA5E9, + 0x30EA, 0xA5EA, + 0x30EB, 0xA5EB, + 0x30EC, 0xA5EC, + 0x30ED, 0xA5ED, + 0x30EE, 0xA5EE, + 0x30EF, 0xA5EF, + 0x30F0, 0xA5F0, + 0x30F1, 0xA5F1, + 0x30F2, 0xA5F2, + 0x30F3, 0xA5F3, + 0x30F4, 0xA5F4, + 0x30F5, 0xA5F5, + 0x30F6, 0xA5F6, + 0x3105, 0xA8C5, + 0x3106, 0xA8C6, + 0x3107, 0xA8C7, + 0x3108, 0xA8C8, + 0x3109, 0xA8C9, + 0x310A, 0xA8CA, + 0x310B, 0xA8CB, + 0x310C, 0xA8CC, + 0x310D, 0xA8CD, + 0x310E, 0xA8CE, + 0x310F, 0xA8CF, + 0x3110, 0xA8D0, + 0x3111, 0xA8D1, + 0x3112, 0xA8D2, + 0x3113, 0xA8D3, + 0x3114, 0xA8D4, + 0x3115, 0xA8D5, + 0x3116, 0xA8D6, + 0x3117, 0xA8D7, + 0x3118, 0xA8D8, + 0x3119, 0xA8D9, + 0x311A, 0xA8DA, + 0x311B, 0xA8DB, + 0x311C, 0xA8DC, + 0x311D, 0xA8DD, + 0x311E, 0xA8DE, + 0x311F, 0xA8DF, + 0x3120, 0xA8E0, + 0x3121, 0xA8E1, + 0x3122, 0xA8E2, + 0x3123, 0xA8E3, + 0x3124, 0xA8E4, + 0x3125, 0xA8E5, + 0x3126, 0xA8E6, + 0x3127, 0xA8E7, + 0x3128, 0xA8E8, + 0x3129, 0xA8E9, + 0x3220, 0xA2E5, + 0x3221, 0xA2E6, + 0x3222, 0xA2E7, + 0x3223, 0xA2E8, + 0x3224, 0xA2E9, + 0x3225, 0xA2EA, + 0x3226, 0xA2EB, + 0x3227, 0xA2EC, + 0x3228, 0xA2ED, + 0x3229, 0xA2EE, + 0x4E00, 0xD2BB, + 0x4E01, 0xB6A1, + 0x4E03, 0xC6DF, + 0x4E07, 0xCDF2, + 0x4E08, 0xD5C9, + 0x4E09, 0xC8FD, + 0x4E0A, 0xC9CF, + 0x4E0B, 0xCFC2, + 0x4E0C, 0xD8A2, + 0x4E0D, 0xB2BB, + 0x4E0E, 0xD3EB, + 0x4E10, 0xD8A4, + 0x4E11, 0xB3F3, + 0x4E13, 0xD7A8, + 0x4E14, 0xC7D2, + 0x4E15, 0xD8A7, + 0x4E16, 0xCAC0, + 0x4E18, 0xC7F0, + 0x4E19, 0xB1FB, + 0x4E1A, 0xD2B5, + 0x4E1B, 0xB4D4, + 0x4E1C, 0xB6AB, + 0x4E1D, 0xCBBF, + 0x4E1E, 0xD8A9, + 0x4E22, 0xB6AA, + 0x4E24, 0xC1BD, + 0x4E25, 0xD1CF, + 0x4E27, 0xC9A5, + 0x4E28, 0xD8AD, + 0x4E2A, 0xB8F6, + 0x4E2B, 0xD1BE, + 0x4E2C, 0xE3DC, + 0x4E2D, 0xD6D0, + 0x4E30, 0xB7E1, + 0x4E32, 0xB4AE, + 0x4E34, 0xC1D9, + 0x4E36, 0xD8BC, + 0x4E38, 0xCDE8, + 0x4E39, 0xB5A4, + 0x4E3A, 0xCEAA, + 0x4E3B, 0xD6F7, + 0x4E3D, 0xC0F6, + 0x4E3E, 0xBED9, + 0x4E3F, 0xD8AF, + 0x4E43, 0xC4CB, + 0x4E45, 0xBEC3, + 0x4E47, 0xD8B1, + 0x4E48, 0xC3B4, + 0x4E49, 0xD2E5, + 0x4E4B, 0xD6AE, + 0x4E4C, 0xCEDA, + 0x4E4D, 0xD5A7, + 0x4E4E, 0xBAF5, + 0x4E4F, 0xB7A6, + 0x4E50, 0xC0D6, + 0x4E52, 0xC6B9, + 0x4E53, 0xC5D2, + 0x4E54, 0xC7C7, + 0x4E56, 0xB9D4, + 0x4E58, 0xB3CB, + 0x4E59, 0xD2D2, + 0x4E5C, 0xD8BF, + 0x4E5D, 0xBEC5, + 0x4E5E, 0xC6F2, + 0x4E5F, 0xD2B2, + 0x4E60, 0xCFB0, + 0x4E61, 0xCFE7, + 0x4E66, 0xCAE9, + 0x4E69, 0xD8C0, + 0x4E70, 0xC2F2, + 0x4E71, 0xC2D2, + 0x4E73, 0xC8E9, + 0x4E7E, 0xC7AC, + 0x4E86, 0xC1CB, + 0x4E88, 0xD3E8, + 0x4E89, 0xD5F9, + 0x4E8B, 0xCAC2, + 0x4E8C, 0xB6FE, + 0x4E8D, 0xD8A1, + 0x4E8E, 0xD3DA, + 0x4E8F, 0xBFF7, + 0x4E91, 0xD4C6, + 0x4E92, 0xBBA5, + 0x4E93, 0xD8C1, + 0x4E94, 0xCEE5, + 0x4E95, 0xBEAE, + 0x4E98, 0xD8A8, + 0x4E9A, 0xD1C7, + 0x4E9B, 0xD0A9, + 0x4E9F, 0xD8BD, + 0x4EA0, 0xD9EF, + 0x4EA1, 0xCDF6, + 0x4EA2, 0xBFBA, + 0x4EA4, 0xBDBB, + 0x4EA5, 0xBAA5, + 0x4EA6, 0xD2E0, + 0x4EA7, 0xB2FA, + 0x4EA8, 0xBAE0, + 0x4EA9, 0xC4B6, + 0x4EAB, 0xCFED, + 0x4EAC, 0xBEA9, + 0x4EAD, 0xCDA4, + 0x4EAE, 0xC1C1, + 0x4EB2, 0xC7D7, + 0x4EB3, 0xD9F1, + 0x4EB5, 0xD9F4, + 0x4EBA, 0xC8CB, + 0x4EBB, 0xD8E9, + 0x4EBF, 0xD2DA, + 0x4EC0, 0xCAB2, + 0x4EC1, 0xC8CA, + 0x4EC2, 0xD8EC, + 0x4EC3, 0xD8EA, + 0x4EC4, 0xD8C6, + 0x4EC5, 0xBDF6, + 0x4EC6, 0xC6CD, + 0x4EC7, 0xB3F0, + 0x4EC9, 0xD8EB, + 0x4ECA, 0xBDF1, + 0x4ECB, 0xBDE9, + 0x4ECD, 0xC8D4, + 0x4ECE, 0xB4D3, + 0x4ED1, 0xC2D8, + 0x4ED3, 0xB2D6, + 0x4ED4, 0xD7D0, + 0x4ED5, 0xCACB, + 0x4ED6, 0xCBFB, + 0x4ED7, 0xD5CC, + 0x4ED8, 0xB8B6, + 0x4ED9, 0xCFC9, + 0x4EDD, 0xD9DA, + 0x4EDE, 0xD8F0, + 0x4EDF, 0xC7AA, + 0x4EE1, 0xD8EE, + 0x4EE3, 0xB4FA, + 0x4EE4, 0xC1EE, + 0x4EE5, 0xD2D4, + 0x4EE8, 0xD8ED, + 0x4EEA, 0xD2C7, + 0x4EEB, 0xD8EF, + 0x4EEC, 0xC3C7, + 0x4EF0, 0xD1F6, + 0x4EF2, 0xD6D9, + 0x4EF3, 0xD8F2, + 0x4EF5, 0xD8F5, + 0x4EF6, 0xBCFE, + 0x4EF7, 0xBCDB, + 0x4EFB, 0xC8CE, + 0x4EFD, 0xB7DD, + 0x4EFF, 0xB7C2, + 0x4F01, 0xC6F3, + 0x4F09, 0xD8F8, + 0x4F0A, 0xD2C1, + 0x4F0D, 0xCEE9, + 0x4F0E, 0xBCBF, + 0x4F0F, 0xB7FC, + 0x4F10, 0xB7A5, + 0x4F11, 0xD0DD, + 0x4F17, 0xD6DA, + 0x4F18, 0xD3C5, + 0x4F19, 0xBBEF, + 0x4F1A, 0xBBE1, + 0x4F1B, 0xD8F1, + 0x4F1E, 0xC9A1, + 0x4F1F, 0xCEB0, + 0x4F20, 0xB4AB, + 0x4F22, 0xD8F3, + 0x4F24, 0xC9CB, + 0x4F25, 0xD8F6, + 0x4F26, 0xC2D7, + 0x4F27, 0xD8F7, + 0x4F2A, 0xCEB1, + 0x4F2B, 0xD8F9, + 0x4F2F, 0xB2AE, + 0x4F30, 0xB9C0, + 0x4F32, 0xD9A3, + 0x4F34, 0xB0E9, + 0x4F36, 0xC1E6, + 0x4F38, 0xC9EC, + 0x4F3A, 0xCBC5, + 0x4F3C, 0xCBC6, + 0x4F3D, 0xD9A4, + 0x4F43, 0xB5E8, + 0x4F46, 0xB5AB, + 0x4F4D, 0xCEBB, + 0x4F4E, 0xB5CD, + 0x4F4F, 0xD7A1, + 0x4F50, 0xD7F4, + 0x4F51, 0xD3D3, + 0x4F53, 0xCCE5, + 0x4F55, 0xBACE, + 0x4F57, 0xD9A2, + 0x4F58, 0xD9DC, + 0x4F59, 0xD3E0, + 0x4F5A, 0xD8FD, + 0x4F5B, 0xB7F0, + 0x4F5C, 0xD7F7, + 0x4F5D, 0xD8FE, + 0x4F5E, 0xD8FA, + 0x4F5F, 0xD9A1, + 0x4F60, 0xC4E3, + 0x4F63, 0xD3B6, + 0x4F64, 0xD8F4, + 0x4F65, 0xD9DD, + 0x4F67, 0xD8FB, + 0x4F69, 0xC5E5, + 0x4F6C, 0xC0D0, + 0x4F6F, 0xD1F0, + 0x4F70, 0xB0DB, + 0x4F73, 0xBCD1, + 0x4F74, 0xD9A6, + 0x4F76, 0xD9A5, + 0x4F7B, 0xD9AC, + 0x4F7C, 0xD9AE, + 0x4F7E, 0xD9AB, + 0x4F7F, 0xCAB9, + 0x4F83, 0xD9A9, + 0x4F84, 0xD6B6, + 0x4F88, 0xB3DE, + 0x4F89, 0xD9A8, + 0x4F8B, 0xC0FD, + 0x4F8D, 0xCACC, + 0x4F8F, 0xD9AA, + 0x4F91, 0xD9A7, + 0x4F94, 0xD9B0, + 0x4F97, 0xB6B1, + 0x4F9B, 0xB9A9, + 0x4F9D, 0xD2C0, + 0x4FA0, 0xCFC0, + 0x4FA3, 0xC2C2, + 0x4FA5, 0xBDC4, + 0x4FA6, 0xD5EC, + 0x4FA7, 0xB2E0, + 0x4FA8, 0xC7C8, + 0x4FA9, 0xBFEB, + 0x4FAA, 0xD9AD, + 0x4FAC, 0xD9AF, + 0x4FAE, 0xCEEA, + 0x4FAF, 0xBAEE, + 0x4FB5, 0xC7D6, + 0x4FBF, 0xB1E3, + 0x4FC3, 0xB4D9, + 0x4FC4, 0xB6ED, + 0x4FC5, 0xD9B4, + 0x4FCA, 0xBFA1, + 0x4FCE, 0xD9DE, + 0x4FCF, 0xC7CE, + 0x4FD0, 0xC0FE, + 0x4FD1, 0xD9B8, + 0x4FD7, 0xCBD7, + 0x4FD8, 0xB7FD, + 0x4FDA, 0xD9B5, + 0x4FDC, 0xD9B7, + 0x4FDD, 0xB1A3, + 0x4FDE, 0xD3E1, + 0x4FDF, 0xD9B9, + 0x4FE1, 0xD0C5, + 0x4FE3, 0xD9B6, + 0x4FE6, 0xD9B1, + 0x4FE8, 0xD9B2, + 0x4FE9, 0xC1A9, + 0x4FEA, 0xD9B3, + 0x4FED, 0xBCF3, + 0x4FEE, 0xD0DE, + 0x4FEF, 0xB8A9, + 0x4FF1, 0xBEE3, + 0x4FF3, 0xD9BD, + 0x4FF8, 0xD9BA, + 0x4FFA, 0xB0B3, + 0x4FFE, 0xD9C2, + 0x500C, 0xD9C4, + 0x500D, 0xB1B6, + 0x500F, 0xD9BF, + 0x5012, 0xB5B9, + 0x5014, 0xBEF3, + 0x5018, 0xCCC8, + 0x5019, 0xBAF2, + 0x501A, 0xD2D0, + 0x501C, 0xD9C3, + 0x501F, 0xBDE8, + 0x5021, 0xB3AB, + 0x5025, 0xD9C5, + 0x5026, 0xBEEB, + 0x5028, 0xD9C6, + 0x5029, 0xD9BB, + 0x502A, 0xC4DF, + 0x502C, 0xD9BE, + 0x502D, 0xD9C1, + 0x502E, 0xD9C0, + 0x503A, 0xD5AE, + 0x503C, 0xD6B5, + 0x503E, 0xC7E3, + 0x5043, 0xD9C8, + 0x5047, 0xBCD9, + 0x5048, 0xD9CA, + 0x504C, 0xD9BC, + 0x504E, 0xD9CB, + 0x504F, 0xC6AB, + 0x5055, 0xD9C9, + 0x505A, 0xD7F6, + 0x505C, 0xCDA3, + 0x5065, 0xBDA1, + 0x506C, 0xD9CC, + 0x5076, 0xC5BC, + 0x5077, 0xCDB5, + 0x507B, 0xD9CD, + 0x507E, 0xD9C7, + 0x507F, 0xB3A5, + 0x5080, 0xBFFE, + 0x5085, 0xB8B5, + 0x5088, 0xC0FC, + 0x508D, 0xB0F8, + 0x50A3, 0xB4F6, + 0x50A5, 0xD9CE, + 0x50A7, 0xD9CF, + 0x50A8, 0xB4A2, + 0x50A9, 0xD9D0, + 0x50AC, 0xB4DF, + 0x50B2, 0xB0C1, + 0x50BA, 0xD9D1, + 0x50BB, 0xC9B5, + 0x50CF, 0xCFF1, + 0x50D6, 0xD9D2, + 0x50DA, 0xC1C5, + 0x50E6, 0xD9D6, + 0x50E7, 0xC9AE, + 0x50EC, 0xD9D5, + 0x50ED, 0xD9D4, + 0x50EE, 0xD9D7, + 0x50F3, 0xCBDB, + 0x50F5, 0xBDA9, + 0x50FB, 0xC6A7, + 0x5106, 0xD9D3, + 0x5107, 0xD9D8, + 0x510B, 0xD9D9, + 0x5112, 0xC8E5, + 0x5121, 0xC0DC, + 0x513F, 0xB6F9, + 0x5140, 0xD8A3, + 0x5141, 0xD4CA, + 0x5143, 0xD4AA, + 0x5144, 0xD0D6, + 0x5145, 0xB3E4, + 0x5146, 0xD5D7, + 0x5148, 0xCFC8, + 0x5149, 0xB9E2, + 0x514B, 0xBFCB, + 0x514D, 0xC3E2, + 0x5151, 0xB6D2, + 0x5154, 0xCDC3, + 0x5155, 0xD9EE, + 0x5156, 0xD9F0, + 0x515A, 0xB5B3, + 0x515C, 0xB6B5, + 0x5162, 0xBEA4, + 0x5165, 0xC8EB, + 0x5168, 0xC8AB, + 0x516B, 0xB0CB, + 0x516C, 0xB9AB, + 0x516D, 0xC1F9, + 0x516E, 0xD9E2, + 0x5170, 0xC0BC, + 0x5171, 0xB9B2, + 0x5173, 0xB9D8, + 0x5174, 0xD0CB, + 0x5175, 0xB1F8, + 0x5176, 0xC6E4, + 0x5177, 0xBEDF, + 0x5178, 0xB5E4, + 0x5179, 0xD7C8, + 0x517B, 0xD1F8, + 0x517C, 0xBCE6, + 0x517D, 0xCADE, + 0x5180, 0xBCBD, + 0x5181, 0xD9E6, + 0x5182, 0xD8E7, + 0x5185, 0xC4DA, + 0x5188, 0xB8D4, + 0x5189, 0xC8BD, + 0x518C, 0xB2E1, + 0x518D, 0xD4D9, + 0x5192, 0xC3B0, + 0x5195, 0xC3E1, + 0x5196, 0xDAA2, + 0x5197, 0xC8DF, + 0x5199, 0xD0B4, + 0x519B, 0xBEFC, + 0x519C, 0xC5A9, + 0x51A0, 0xB9DA, + 0x51A2, 0xDAA3, + 0x51A4, 0xD4A9, + 0x51A5, 0xDAA4, + 0x51AB, 0xD9FB, + 0x51AC, 0xB6AC, + 0x51AF, 0xB7EB, + 0x51B0, 0xB1F9, + 0x51B1, 0xD9FC, + 0x51B2, 0xB3E5, + 0x51B3, 0xBEF6, + 0x51B5, 0xBFF6, + 0x51B6, 0xD2B1, + 0x51B7, 0xC0E4, + 0x51BB, 0xB6B3, + 0x51BC, 0xD9FE, + 0x51BD, 0xD9FD, + 0x51C0, 0xBEBB, + 0x51C4, 0xC6E0, + 0x51C6, 0xD7BC, + 0x51C7, 0xDAA1, + 0x51C9, 0xC1B9, + 0x51CB, 0xB5F2, + 0x51CC, 0xC1E8, + 0x51CF, 0xBCF5, + 0x51D1, 0xB4D5, + 0x51DB, 0xC1DD, + 0x51DD, 0xC4FD, + 0x51E0, 0xBCB8, + 0x51E1, 0xB7B2, + 0x51E4, 0xB7EF, + 0x51EB, 0xD9EC, + 0x51ED, 0xC6BE, + 0x51EF, 0xBFAD, + 0x51F0, 0xBBCB, + 0x51F3, 0xB5CA, + 0x51F5, 0xDBC9, + 0x51F6, 0xD0D7, + 0x51F8, 0xCDB9, + 0x51F9, 0xB0BC, + 0x51FA, 0xB3F6, + 0x51FB, 0xBBF7, + 0x51FC, 0xDBCA, + 0x51FD, 0xBAAF, + 0x51FF, 0xD4E4, + 0x5200, 0xB5B6, + 0x5201, 0xB5F3, + 0x5202, 0xD8D6, + 0x5203, 0xC8D0, + 0x5206, 0xB7D6, + 0x5207, 0xC7D0, + 0x5208, 0xD8D7, + 0x520A, 0xBFAF, + 0x520D, 0xDBBB, + 0x520E, 0xD8D8, + 0x5211, 0xD0CC, + 0x5212, 0xBBAE, + 0x5216, 0xEBBE, + 0x5217, 0xC1D0, + 0x5218, 0xC1F5, + 0x5219, 0xD4F2, + 0x521A, 0xB8D5, + 0x521B, 0xB4B4, + 0x521D, 0xB3F5, + 0x5220, 0xC9BE, + 0x5224, 0xC5D0, + 0x5228, 0xC5D9, + 0x5229, 0xC0FB, + 0x522B, 0xB1F0, + 0x522D, 0xD8D9, + 0x522E, 0xB9CE, + 0x5230, 0xB5BD, + 0x5233, 0xD8DA, + 0x5236, 0xD6C6, + 0x5237, 0xCBA2, + 0x5238, 0xC8AF, + 0x5239, 0xC9B2, + 0x523A, 0xB4CC, + 0x523B, 0xBFCC, + 0x523D, 0xB9F4, + 0x523F, 0xD8DB, + 0x5240, 0xD8DC, + 0x5241, 0xB6E7, + 0x5242, 0xBCC1, + 0x5243, 0xCCEA, + 0x524A, 0xCFF7, + 0x524C, 0xD8DD, + 0x524D, 0xC7B0, + 0x5250, 0xB9D0, + 0x5251, 0xBDA3, + 0x5254, 0xCCDE, + 0x5256, 0xC6CA, + 0x525C, 0xD8E0, + 0x525E, 0xD8DE, + 0x5261, 0xD8DF, + 0x5265, 0xB0FE, + 0x5267, 0xBEE7, + 0x5269, 0xCAA3, + 0x526A, 0xBCF4, + 0x526F, 0xB8B1, + 0x5272, 0xB8EE, + 0x527D, 0xD8E2, + 0x527F, 0xBDCB, + 0x5281, 0xD8E4, + 0x5282, 0xD8E3, + 0x5288, 0xC5FC, + 0x5290, 0xD8E5, + 0x5293, 0xD8E6, + 0x529B, 0xC1A6, + 0x529D, 0xC8B0, + 0x529E, 0xB0EC, + 0x529F, 0xB9A6, + 0x52A0, 0xBCD3, + 0x52A1, 0xCEF1, + 0x52A2, 0xDBBD, + 0x52A3, 0xC1D3, + 0x52A8, 0xB6AF, + 0x52A9, 0xD6FA, + 0x52AA, 0xC5AC, + 0x52AB, 0xBDD9, + 0x52AC, 0xDBBE, + 0x52AD, 0xDBBF, + 0x52B1, 0xC0F8, + 0x52B2, 0xBEA2, + 0x52B3, 0xC0CD, + 0x52BE, 0xDBC0, + 0x52BF, 0xCAC6, + 0x52C3, 0xB2AA, + 0x52C7, 0xD3C2, + 0x52C9, 0xC3E3, + 0x52CB, 0xD1AB, + 0x52D0, 0xDBC2, + 0x52D2, 0xC0D5, + 0x52D6, 0xDBC3, + 0x52D8, 0xBFB1, + 0x52DF, 0xC4BC, + 0x52E4, 0xC7DA, + 0x52F0, 0xDBC4, + 0x52F9, 0xD9E8, + 0x52FA, 0xC9D7, + 0x52FE, 0xB9B4, + 0x52FF, 0xCEF0, + 0x5300, 0xD4C8, + 0x5305, 0xB0FC, + 0x5306, 0xB4D2, + 0x5308, 0xD0D9, + 0x530D, 0xD9E9, + 0x530F, 0xDECB, + 0x5310, 0xD9EB, + 0x5315, 0xD8B0, + 0x5316, 0xBBAF, + 0x5317, 0xB1B1, + 0x5319, 0xB3D7, + 0x531A, 0xD8CE, + 0x531D, 0xD4D1, + 0x5320, 0xBDB3, + 0x5321, 0xBFEF, + 0x5323, 0xCFBB, + 0x5326, 0xD8D0, + 0x532A, 0xB7CB, + 0x532E, 0xD8D1, + 0x5339, 0xC6A5, + 0x533A, 0xC7F8, + 0x533B, 0xD2BD, + 0x533E, 0xD8D2, + 0x533F, 0xC4E4, + 0x5341, 0xCAAE, + 0x5343, 0xC7A7, + 0x5345, 0xD8A6, + 0x5347, 0xC9FD, + 0x5348, 0xCEE7, + 0x5349, 0xBBDC, + 0x534A, 0xB0EB, + 0x534E, 0xBBAA, + 0x534F, 0xD0AD, + 0x5351, 0xB1B0, + 0x5352, 0xD7E4, + 0x5353, 0xD7BF, + 0x5355, 0xB5A5, + 0x5356, 0xC2F4, + 0x5357, 0xC4CF, + 0x535A, 0xB2A9, + 0x535C, 0xB2B7, + 0x535E, 0xB1E5, + 0x535F, 0xDFB2, + 0x5360, 0xD5BC, + 0x5361, 0xBFA8, + 0x5362, 0xC2AC, + 0x5363, 0xD8D5, + 0x5364, 0xC2B1, + 0x5366, 0xD8D4, + 0x5367, 0xCED4, + 0x5369, 0xDAE0, + 0x536B, 0xCEC0, + 0x536E, 0xD8B4, + 0x536F, 0xC3AE, + 0x5370, 0xD3A1, + 0x5371, 0xCEA3, + 0x5373, 0xBCB4, + 0x5374, 0xC8B4, + 0x5375, 0xC2D1, + 0x5377, 0xBEED, + 0x5378, 0xD0B6, + 0x537A, 0xDAE1, + 0x537F, 0xC7E4, + 0x5382, 0xB3A7, + 0x5384, 0xB6F2, + 0x5385, 0xCCFC, + 0x5386, 0xC0FA, + 0x5389, 0xC0F7, + 0x538B, 0xD1B9, + 0x538C, 0xD1E1, + 0x538D, 0xD8C7, + 0x5395, 0xB2DE, + 0x5398, 0xC0E5, + 0x539A, 0xBAF1, + 0x539D, 0xD8C8, + 0x539F, 0xD4AD, + 0x53A2, 0xCFE1, + 0x53A3, 0xD8C9, + 0x53A5, 0xD8CA, + 0x53A6, 0xCFC3, + 0x53A8, 0xB3F8, + 0x53A9, 0xBEC7, + 0x53AE, 0xD8CB, + 0x53B6, 0xDBCC, + 0x53BB, 0xC8A5, + 0x53BF, 0xCFD8, + 0x53C1, 0xC8FE, + 0x53C2, 0xB2CE, + 0x53C8, 0xD3D6, + 0x53C9, 0xB2E6, + 0x53CA, 0xBCB0, + 0x53CB, 0xD3D1, + 0x53CC, 0xCBAB, + 0x53CD, 0xB7B4, + 0x53D1, 0xB7A2, + 0x53D4, 0xCAE5, + 0x53D6, 0xC8A1, + 0x53D7, 0xCADC, + 0x53D8, 0xB1E4, + 0x53D9, 0xD0F0, + 0x53DB, 0xC5D1, + 0x53DF, 0xDBC5, + 0x53E0, 0xB5FE, + 0x53E3, 0xBFDA, + 0x53E4, 0xB9C5, + 0x53E5, 0xBEE4, + 0x53E6, 0xC1ED, + 0x53E8, 0xDFB6, + 0x53E9, 0xDFB5, + 0x53EA, 0xD6BB, + 0x53EB, 0xBDD0, + 0x53EC, 0xD5D9, + 0x53ED, 0xB0C8, + 0x53EE, 0xB6A3, + 0x53EF, 0xBFC9, + 0x53F0, 0xCCA8, + 0x53F1, 0xDFB3, + 0x53F2, 0xCAB7, + 0x53F3, 0xD3D2, + 0x53F5, 0xD8CF, + 0x53F6, 0xD2B6, + 0x53F7, 0xBAC5, + 0x53F8, 0xCBBE, + 0x53F9, 0xCCBE, + 0x53FB, 0xDFB7, + 0x53FC, 0xB5F0, + 0x53FD, 0xDFB4, + 0x5401, 0xD3F5, + 0x5403, 0xB3D4, + 0x5404, 0xB8F7, + 0x5406, 0xDFBA, + 0x5408, 0xBACF, + 0x5409, 0xBCAA, + 0x540A, 0xB5F5, + 0x540C, 0xCDAC, + 0x540D, 0xC3FB, + 0x540E, 0xBAF3, + 0x540F, 0xC0F4, + 0x5410, 0xCDC2, + 0x5411, 0xCFF2, + 0x5412, 0xDFB8, + 0x5413, 0xCFC5, + 0x5415, 0xC2C0, + 0x5416, 0xDFB9, + 0x5417, 0xC2F0, + 0x541B, 0xBEFD, + 0x541D, 0xC1DF, + 0x541E, 0xCDCC, + 0x541F, 0xD2F7, + 0x5420, 0xB7CD, + 0x5421, 0xDFC1, + 0x5423, 0xDFC4, + 0x5426, 0xB7F1, + 0x5427, 0xB0C9, + 0x5428, 0xB6D6, + 0x5429, 0xB7D4, + 0x542B, 0xBAAC, + 0x542C, 0xCCFD, + 0x542D, 0xBFD4, + 0x542E, 0xCBB1, + 0x542F, 0xC6F4, + 0x5431, 0xD6A8, + 0x5432, 0xDFC5, + 0x5434, 0xCEE2, + 0x5435, 0xB3B3, + 0x5438, 0xCEFC, + 0x5439, 0xB4B5, + 0x543B, 0xCEC7, + 0x543C, 0xBAF0, + 0x543E, 0xCEE1, + 0x5440, 0xD1BD, + 0x5443, 0xDFC0, + 0x5446, 0xB4F4, + 0x5448, 0xB3CA, + 0x544A, 0xB8E6, + 0x544B, 0xDFBB, + 0x5450, 0xC4C5, + 0x5452, 0xDFBC, + 0x5453, 0xDFBD, + 0x5454, 0xDFBE, + 0x5455, 0xC5BB, + 0x5456, 0xDFBF, + 0x5457, 0xDFC2, + 0x5458, 0xD4B1, + 0x5459, 0xDFC3, + 0x545B, 0xC7BA, + 0x545C, 0xCED8, + 0x5462, 0xC4D8, + 0x5464, 0xDFCA, + 0x5466, 0xDFCF, + 0x5468, 0xD6DC, + 0x5471, 0xDFC9, + 0x5472, 0xDFDA, + 0x5473, 0xCEB6, + 0x5475, 0xBAC7, + 0x5476, 0xDFCE, + 0x5477, 0xDFC8, + 0x5478, 0xC5DE, + 0x547B, 0xC9EB, + 0x547C, 0xBAF4, + 0x547D, 0xC3FC, + 0x5480, 0xBED7, + 0x5482, 0xDFC6, + 0x5484, 0xDFCD, + 0x5486, 0xC5D8, + 0x548B, 0xD5A6, + 0x548C, 0xBACD, + 0x548E, 0xBECC, + 0x548F, 0xD3BD, + 0x5490, 0xB8C0, + 0x5492, 0xD6E4, + 0x5494, 0xDFC7, + 0x5495, 0xB9BE, + 0x5496, 0xBFA7, + 0x5499, 0xC1FC, + 0x549A, 0xDFCB, + 0x549B, 0xDFCC, + 0x549D, 0xDFD0, + 0x54A3, 0xDFDB, + 0x54A4, 0xDFE5, + 0x54A6, 0xDFD7, + 0x54A7, 0xDFD6, + 0x54A8, 0xD7C9, + 0x54A9, 0xDFE3, + 0x54AA, 0xDFE4, + 0x54AB, 0xE5EB, + 0x54AC, 0xD2A7, + 0x54AD, 0xDFD2, + 0x54AF, 0xBFA9, + 0x54B1, 0xD4DB, + 0x54B3, 0xBFC8, + 0x54B4, 0xDFD4, + 0x54B8, 0xCFCC, + 0x54BB, 0xDFDD, + 0x54BD, 0xD1CA, + 0x54BF, 0xDFDE, + 0x54C0, 0xB0A7, + 0x54C1, 0xC6B7, + 0x54C2, 0xDFD3, + 0x54C4, 0xBAE5, + 0x54C6, 0xB6DF, + 0x54C7, 0xCDDB, + 0x54C8, 0xB9FE, + 0x54C9, 0xD4D5, + 0x54CC, 0xDFDF, + 0x54CD, 0xCFEC, + 0x54CE, 0xB0A5, + 0x54CF, 0xDFE7, + 0x54D0, 0xDFD1, + 0x54D1, 0xD1C6, + 0x54D2, 0xDFD5, + 0x54D3, 0xDFD8, + 0x54D4, 0xDFD9, + 0x54D5, 0xDFDC, + 0x54D7, 0xBBA9, + 0x54D9, 0xDFE0, + 0x54DA, 0xDFE1, + 0x54DC, 0xDFE2, + 0x54DD, 0xDFE6, + 0x54DE, 0xDFE8, + 0x54DF, 0xD3B4, + 0x54E5, 0xB8E7, + 0x54E6, 0xC5B6, + 0x54E7, 0xDFEA, + 0x54E8, 0xC9DA, + 0x54E9, 0xC1A8, + 0x54EA, 0xC4C4, + 0x54ED, 0xBFDE, + 0x54EE, 0xCFF8, + 0x54F2, 0xD5DC, + 0x54F3, 0xDFEE, + 0x54FA, 0xB2B8, + 0x54FC, 0xBADF, + 0x54FD, 0xDFEC, + 0x54FF, 0xDBC1, + 0x5501, 0xD1E4, + 0x5506, 0xCBF4, + 0x5507, 0xB4BD, + 0x5509, 0xB0A6, + 0x550F, 0xDFF1, + 0x5510, 0xCCC6, + 0x5511, 0xDFF2, + 0x5514, 0xDFED, + 0x551B, 0xDFE9, + 0x5520, 0xDFEB, + 0x5522, 0xDFEF, + 0x5523, 0xDFF0, + 0x5524, 0xBBBD, + 0x5527, 0xDFF3, + 0x552A, 0xDFF4, + 0x552C, 0xBBA3, + 0x552E, 0xCADB, + 0x552F, 0xCEA8, + 0x5530, 0xE0A7, + 0x5531, 0xB3AA, + 0x5533, 0xE0A6, + 0x5537, 0xE0A1, + 0x553C, 0xDFFE, + 0x553E, 0xCDD9, + 0x553F, 0xDFFC, + 0x5541, 0xDFFA, + 0x5543, 0xBFD0, + 0x5544, 0xD7C4, + 0x5546, 0xC9CC, + 0x5549, 0xDFF8, + 0x554A, 0xB0A1, + 0x5550, 0xDFFD, + 0x5555, 0xDFFB, + 0x5556, 0xE0A2, + 0x555C, 0xE0A8, + 0x5561, 0xB7C8, + 0x5564, 0xC6A1, + 0x5565, 0xC9B6, + 0x5566, 0xC0B2, + 0x5567, 0xDFF5, + 0x556A, 0xC5BE, + 0x556C, 0xD8C4, + 0x556D, 0xDFF9, + 0x556E, 0xC4F6, + 0x5575, 0xE0A3, + 0x5576, 0xE0A4, + 0x5577, 0xE0A5, + 0x5578, 0xD0A5, + 0x557B, 0xE0B4, + 0x557C, 0xCCE4, + 0x557E, 0xE0B1, + 0x5580, 0xBFA6, + 0x5581, 0xE0AF, + 0x5582, 0xCEB9, + 0x5583, 0xE0AB, + 0x5584, 0xC9C6, + 0x5587, 0xC0AE, + 0x5588, 0xE0AE, + 0x5589, 0xBAED, + 0x558A, 0xBAB0, + 0x558B, 0xE0A9, + 0x558F, 0xDFF6, + 0x5591, 0xE0B3, + 0x5594, 0xE0B8, + 0x5598, 0xB4AD, + 0x5599, 0xE0B9, + 0x559C, 0xCFB2, + 0x559D, 0xBAC8, + 0x559F, 0xE0B0, + 0x55A7, 0xD0FA, + 0x55B1, 0xE0AC, + 0x55B3, 0xD4FB, + 0x55B5, 0xDFF7, + 0x55B7, 0xC5E7, + 0x55B9, 0xE0AD, + 0x55BB, 0xD3F7, + 0x55BD, 0xE0B6, + 0x55BE, 0xE0B7, + 0x55C4, 0xE0C4, + 0x55C5, 0xD0E1, + 0x55C9, 0xE0BC, + 0x55CC, 0xE0C9, + 0x55CD, 0xE0CA, + 0x55D1, 0xE0BE, + 0x55D2, 0xE0AA, + 0x55D3, 0xC9A4, + 0x55D4, 0xE0C1, + 0x55D6, 0xE0B2, + 0x55DC, 0xCAC8, + 0x55DD, 0xE0C3, + 0x55DF, 0xE0B5, + 0x55E1, 0xCECB, + 0x55E3, 0xCBC3, + 0x55E4, 0xE0CD, + 0x55E5, 0xE0C6, + 0x55E6, 0xE0C2, + 0x55E8, 0xE0CB, + 0x55EA, 0xE0BA, + 0x55EB, 0xE0BF, + 0x55EC, 0xE0C0, + 0x55EF, 0xE0C5, + 0x55F2, 0xE0C7, + 0x55F3, 0xE0C8, + 0x55F5, 0xE0CC, + 0x55F7, 0xE0BB, + 0x55FD, 0xCBD4, + 0x55FE, 0xE0D5, + 0x5600, 0xE0D6, + 0x5601, 0xE0D2, + 0x5608, 0xE0D0, + 0x5609, 0xBCCE, + 0x560C, 0xE0D1, + 0x560E, 0xB8C2, + 0x560F, 0xD8C5, + 0x5618, 0xD0EA, + 0x561B, 0xC2EF, + 0x561E, 0xE0CF, + 0x561F, 0xE0BD, + 0x5623, 0xE0D4, + 0x5624, 0xE0D3, + 0x5627, 0xE0D7, + 0x562C, 0xE0DC, + 0x562D, 0xE0D8, + 0x5631, 0xD6F6, + 0x5632, 0xB3B0, + 0x5634, 0xD7EC, + 0x5636, 0xCBBB, + 0x5639, 0xE0DA, + 0x563B, 0xCEFB, + 0x563F, 0xBAD9, + 0x564C, 0xE0E1, + 0x564D, 0xE0DD, + 0x564E, 0xD2AD, + 0x5654, 0xE0E2, + 0x5657, 0xE0DB, + 0x5658, 0xE0D9, + 0x5659, 0xE0DF, + 0x565C, 0xE0E0, + 0x5662, 0xE0DE, + 0x5664, 0xE0E4, + 0x5668, 0xC6F7, + 0x5669, 0xD8AC, + 0x566A, 0xD4EB, + 0x566B, 0xE0E6, + 0x566C, 0xCAC9, + 0x5671, 0xE0E5, + 0x5676, 0xB8C1, + 0x567B, 0xE0E7, + 0x567C, 0xE0E8, + 0x5685, 0xE0E9, + 0x5686, 0xE0E3, + 0x568E, 0xBABF, + 0x568F, 0xCCE7, + 0x5693, 0xE0EA, + 0x56A3, 0xCFF9, + 0x56AF, 0xE0EB, + 0x56B7, 0xC8C2, + 0x56BC, 0xBDC0, + 0x56CA, 0xC4D2, + 0x56D4, 0xE0EC, + 0x56D7, 0xE0ED, + 0x56DA, 0xC7F4, + 0x56DB, 0xCBC4, + 0x56DD, 0xE0EE, + 0x56DE, 0xBBD8, + 0x56DF, 0xD8B6, + 0x56E0, 0xD2F2, + 0x56E1, 0xE0EF, + 0x56E2, 0xCDC5, + 0x56E4, 0xB6DA, + 0x56EB, 0xE0F1, + 0x56ED, 0xD4B0, + 0x56F0, 0xC0A7, + 0x56F1, 0xB4D1, + 0x56F4, 0xCEA7, + 0x56F5, 0xE0F0, + 0x56F9, 0xE0F2, + 0x56FA, 0xB9CC, + 0x56FD, 0xB9FA, + 0x56FE, 0xCDBC, + 0x56FF, 0xE0F3, + 0x5703, 0xC6D4, + 0x5704, 0xE0F4, + 0x5706, 0xD4B2, + 0x5708, 0xC8A6, + 0x5709, 0xE0F6, + 0x570A, 0xE0F5, + 0x571C, 0xE0F7, + 0x571F, 0xCDC1, + 0x5723, 0xCAA5, + 0x5728, 0xD4DA, + 0x5729, 0xDBD7, + 0x572A, 0xDBD9, + 0x572C, 0xDBD8, + 0x572D, 0xB9E7, + 0x572E, 0xDBDC, + 0x572F, 0xDBDD, + 0x5730, 0xB5D8, + 0x5733, 0xDBDA, + 0x5739, 0xDBDB, + 0x573A, 0xB3A1, + 0x573B, 0xDBDF, + 0x573E, 0xBBF8, + 0x5740, 0xD6B7, + 0x5742, 0xDBE0, + 0x5747, 0xBEF9, + 0x574A, 0xB7BB, + 0x574C, 0xDBD0, + 0x574D, 0xCCAE, + 0x574E, 0xBFB2, + 0x574F, 0xBBB5, + 0x5750, 0xD7F8, + 0x5751, 0xBFD3, + 0x5757, 0xBFE9, + 0x575A, 0xBCE1, + 0x575B, 0xCCB3, + 0x575C, 0xDBDE, + 0x575D, 0xB0D3, + 0x575E, 0xCEEB, + 0x575F, 0xB7D8, + 0x5760, 0xD7B9, + 0x5761, 0xC6C2, + 0x5764, 0xC0A4, + 0x5766, 0xCCB9, + 0x5768, 0xDBE7, + 0x5769, 0xDBE1, + 0x576A, 0xC6BA, + 0x576B, 0xDBE3, + 0x576D, 0xDBE8, + 0x576F, 0xC5F7, + 0x5773, 0xDBEA, + 0x5776, 0xDBE9, + 0x5777, 0xBFC0, + 0x577B, 0xDBE6, + 0x577C, 0xDBE5, + 0x5782, 0xB4B9, + 0x5783, 0xC0AC, + 0x5784, 0xC2A2, + 0x5785, 0xDBE2, + 0x5786, 0xDBE4, + 0x578B, 0xD0CD, + 0x578C, 0xDBED, + 0x5792, 0xC0DD, + 0x5793, 0xDBF2, + 0x579B, 0xB6E2, + 0x57A0, 0xDBF3, + 0x57A1, 0xDBD2, + 0x57A2, 0xB9B8, + 0x57A3, 0xD4AB, + 0x57A4, 0xDBEC, + 0x57A6, 0xBFD1, + 0x57A7, 0xDBF0, + 0x57A9, 0xDBD1, + 0x57AB, 0xB5E6, + 0x57AD, 0xDBEB, + 0x57AE, 0xBFE5, + 0x57B2, 0xDBEE, + 0x57B4, 0xDBF1, + 0x57B8, 0xDBF9, + 0x57C2, 0xB9A1, + 0x57C3, 0xB0A3, + 0x57CB, 0xC2F1, + 0x57CE, 0xB3C7, + 0x57CF, 0xDBEF, + 0x57D2, 0xDBF8, + 0x57D4, 0xC6D2, + 0x57D5, 0xDBF4, + 0x57D8, 0xDBF5, + 0x57D9, 0xDBF7, + 0x57DA, 0xDBF6, + 0x57DD, 0xDBFE, + 0x57DF, 0xD3F2, + 0x57E0, 0xB2BA, + 0x57E4, 0xDBFD, + 0x57ED, 0xDCA4, + 0x57EF, 0xDBFB, + 0x57F4, 0xDBFA, + 0x57F8, 0xDBFC, + 0x57F9, 0xC5E0, + 0x57FA, 0xBBF9, + 0x57FD, 0xDCA3, + 0x5800, 0xDCA5, + 0x5802, 0xCCC3, + 0x5806, 0xB6D1, + 0x5807, 0xDDC0, + 0x580B, 0xDCA1, + 0x580D, 0xDCA2, + 0x5811, 0xC7B5, + 0x5815, 0xB6E9, + 0x5819, 0xDCA7, + 0x581E, 0xDCA6, + 0x5820, 0xDCA9, + 0x5821, 0xB1A4, + 0x5824, 0xB5CC, + 0x582A, 0xBFB0, + 0x5830, 0xD1DF, + 0x5835, 0xB6C2, + 0x5844, 0xDCA8, + 0x584C, 0xCBFA, + 0x584D, 0xEBF3, + 0x5851, 0xCBDC, + 0x5854, 0xCBFE, + 0x5858, 0xCCC1, + 0x585E, 0xC8FB, + 0x5865, 0xDCAA, + 0x586B, 0xCCEE, + 0x586C, 0xDCAB, + 0x587E, 0xDBD3, + 0x5880, 0xDCAF, + 0x5881, 0xDCAC, + 0x5883, 0xBEB3, + 0x5885, 0xCAFB, + 0x5889, 0xDCAD, + 0x5892, 0xC9CA, + 0x5893, 0xC4B9, + 0x5899, 0xC7BD, + 0x589A, 0xDCAE, + 0x589E, 0xD4F6, + 0x589F, 0xD0E6, + 0x58A8, 0xC4AB, + 0x58A9, 0xB6D5, + 0x58BC, 0xDBD4, + 0x58C1, 0xB1DA, + 0x58C5, 0xDBD5, + 0x58D1, 0xDBD6, + 0x58D5, 0xBABE, + 0x58E4, 0xC8C0, + 0x58EB, 0xCABF, + 0x58EC, 0xC8C9, + 0x58EE, 0xD7B3, + 0x58F0, 0xC9F9, + 0x58F3, 0xBFC7, + 0x58F6, 0xBAF8, + 0x58F9, 0xD2BC, + 0x5902, 0xE2BA, + 0x5904, 0xB4A6, + 0x5907, 0xB1B8, + 0x590D, 0xB8B4, + 0x590F, 0xCFC4, + 0x5914, 0xD9E7, + 0x5915, 0xCFA6, + 0x5916, 0xCDE2, + 0x5919, 0xD9ED, + 0x591A, 0xB6E0, + 0x591C, 0xD2B9, + 0x591F, 0xB9BB, + 0x5924, 0xE2B9, + 0x5925, 0xE2B7, + 0x5927, 0xB4F3, + 0x5929, 0xCCEC, + 0x592A, 0xCCAB, + 0x592B, 0xB7F2, + 0x592D, 0xD8B2, + 0x592E, 0xD1EB, + 0x592F, 0xBABB, + 0x5931, 0xCAA7, + 0x5934, 0xCDB7, + 0x5937, 0xD2C4, + 0x5938, 0xBFE4, + 0x5939, 0xBCD0, + 0x593A, 0xB6E1, + 0x593C, 0xDEC5, + 0x5941, 0xDEC6, + 0x5942, 0xDBBC, + 0x5944, 0xD1D9, + 0x5947, 0xC6E6, + 0x5948, 0xC4CE, + 0x5949, 0xB7EE, + 0x594B, 0xB7DC, + 0x594E, 0xBFFC, + 0x594F, 0xD7E0, + 0x5951, 0xC6F5, + 0x5954, 0xB1BC, + 0x5955, 0xDEC8, + 0x5956, 0xBDB1, + 0x5957, 0xCCD7, + 0x5958, 0xDECA, + 0x595A, 0xDEC9, + 0x5960, 0xB5EC, + 0x5962, 0xC9DD, + 0x5965, 0xB0C2, + 0x5973, 0xC5AE, + 0x5974, 0xC5AB, + 0x5976, 0xC4CC, + 0x5978, 0xBCE9, + 0x5979, 0xCBFD, + 0x597D, 0xBAC3, + 0x5981, 0xE5F9, + 0x5982, 0xC8E7, + 0x5983, 0xE5FA, + 0x5984, 0xCDFD, + 0x5986, 0xD7B1, + 0x5987, 0xB8BE, + 0x5988, 0xC2E8, + 0x598A, 0xC8D1, + 0x598D, 0xE5FB, + 0x5992, 0xB6CA, + 0x5993, 0xBCCB, + 0x5996, 0xD1FD, + 0x5997, 0xE6A1, + 0x5999, 0xC3EE, + 0x599E, 0xE6A4, + 0x59A3, 0xE5FE, + 0x59A4, 0xE6A5, + 0x59A5, 0xCDD7, + 0x59A8, 0xB7C1, + 0x59A9, 0xE5FC, + 0x59AA, 0xE5FD, + 0x59AB, 0xE6A3, + 0x59AE, 0xC4DD, + 0x59AF, 0xE6A8, + 0x59B2, 0xE6A7, + 0x59B9, 0xC3C3, + 0x59BB, 0xC6DE, + 0x59BE, 0xE6AA, + 0x59C6, 0xC4B7, + 0x59CA, 0xE6A2, + 0x59CB, 0xCABC, + 0x59D0, 0xBDE3, + 0x59D1, 0xB9C3, + 0x59D2, 0xE6A6, + 0x59D3, 0xD0D5, + 0x59D4, 0xCEAF, + 0x59D7, 0xE6A9, + 0x59D8, 0xE6B0, + 0x59DA, 0xD2A6, + 0x59DC, 0xBDAA, + 0x59DD, 0xE6AD, + 0x59E3, 0xE6AF, + 0x59E5, 0xC0D1, + 0x59E8, 0xD2CC, + 0x59EC, 0xBCA7, + 0x59F9, 0xE6B1, + 0x59FB, 0xD2F6, + 0x59FF, 0xD7CB, + 0x5A01, 0xCDFE, + 0x5A03, 0xCDDE, + 0x5A04, 0xC2A6, + 0x5A05, 0xE6AB, + 0x5A06, 0xE6AC, + 0x5A07, 0xBDBF, + 0x5A08, 0xE6AE, + 0x5A09, 0xE6B3, + 0x5A0C, 0xE6B2, + 0x5A11, 0xE6B6, + 0x5A13, 0xE6B8, + 0x5A18, 0xC4EF, + 0x5A1C, 0xC4C8, + 0x5A1F, 0xBEEA, + 0x5A20, 0xC9EF, + 0x5A23, 0xE6B7, + 0x5A25, 0xB6F0, + 0x5A29, 0xC3E4, + 0x5A31, 0xD3E9, + 0x5A32, 0xE6B4, + 0x5A34, 0xE6B5, + 0x5A36, 0xC8A2, + 0x5A3C, 0xE6BD, + 0x5A40, 0xE6B9, + 0x5A46, 0xC6C5, + 0x5A49, 0xCDF1, + 0x5A4A, 0xE6BB, + 0x5A55, 0xE6BC, + 0x5A5A, 0xBBE9, + 0x5A62, 0xE6BE, + 0x5A67, 0xE6BA, + 0x5A6A, 0xC0B7, + 0x5A74, 0xD3A4, + 0x5A75, 0xE6BF, + 0x5A76, 0xC9F4, + 0x5A77, 0xE6C3, + 0x5A7A, 0xE6C4, + 0x5A7F, 0xD0F6, + 0x5A92, 0xC3BD, + 0x5A9A, 0xC3C4, + 0x5A9B, 0xE6C2, + 0x5AAA, 0xE6C1, + 0x5AB2, 0xE6C7, + 0x5AB3, 0xCFB1, + 0x5AB5, 0xEBF4, + 0x5AB8, 0xE6CA, + 0x5ABE, 0xE6C5, + 0x5AC1, 0xBCDE, + 0x5AC2, 0xC9A9, + 0x5AC9, 0xBCB5, + 0x5ACC, 0xCFD3, + 0x5AD2, 0xE6C8, + 0x5AD4, 0xE6C9, + 0x5AD6, 0xE6CE, + 0x5AD8, 0xE6D0, + 0x5ADC, 0xE6D1, + 0x5AE0, 0xE6CB, + 0x5AE1, 0xB5D5, + 0x5AE3, 0xE6CC, + 0x5AE6, 0xE6CF, + 0x5AE9, 0xC4DB, + 0x5AEB, 0xE6C6, + 0x5AF1, 0xE6CD, + 0x5B09, 0xE6D2, + 0x5B16, 0xE6D4, + 0x5B17, 0xE6D3, + 0x5B32, 0xE6D5, + 0x5B34, 0xD9F8, + 0x5B37, 0xE6D6, + 0x5B40, 0xE6D7, + 0x5B50, 0xD7D3, + 0x5B51, 0xE6DD, + 0x5B53, 0xE6DE, + 0x5B54, 0xBFD7, + 0x5B55, 0xD4D0, + 0x5B57, 0xD7D6, + 0x5B58, 0xB4E6, + 0x5B59, 0xCBEF, + 0x5B5A, 0xE6DA, + 0x5B5B, 0xD8C3, + 0x5B5C, 0xD7CE, + 0x5B5D, 0xD0A2, + 0x5B5F, 0xC3CF, + 0x5B62, 0xE6DF, + 0x5B63, 0xBCBE, + 0x5B64, 0xB9C2, + 0x5B65, 0xE6DB, + 0x5B66, 0xD1A7, + 0x5B69, 0xBAA2, + 0x5B6A, 0xC2CF, + 0x5B6C, 0xD8AB, + 0x5B70, 0xCAEB, + 0x5B71, 0xE5EE, + 0x5B73, 0xE6DC, + 0x5B75, 0xB7F5, + 0x5B7A, 0xC8E6, + 0x5B7D, 0xC4F5, + 0x5B80, 0xE5B2, + 0x5B81, 0xC4FE, + 0x5B83, 0xCBFC, + 0x5B84, 0xE5B3, + 0x5B85, 0xD5AC, + 0x5B87, 0xD3EE, + 0x5B88, 0xCAD8, + 0x5B89, 0xB0B2, + 0x5B8B, 0xCBCE, + 0x5B8C, 0xCDEA, + 0x5B8F, 0xBAEA, + 0x5B93, 0xE5B5, + 0x5B95, 0xE5B4, + 0x5B97, 0xD7DA, + 0x5B98, 0xB9D9, + 0x5B99, 0xD6E6, + 0x5B9A, 0xB6A8, + 0x5B9B, 0xCDF0, + 0x5B9C, 0xD2CB, + 0x5B9D, 0xB1A6, + 0x5B9E, 0xCAB5, + 0x5BA0, 0xB3E8, + 0x5BA1, 0xC9F3, + 0x5BA2, 0xBFCD, + 0x5BA3, 0xD0FB, + 0x5BA4, 0xCAD2, + 0x5BA5, 0xE5B6, + 0x5BA6, 0xBBC2, + 0x5BAA, 0xCFDC, + 0x5BAB, 0xB9AC, + 0x5BB0, 0xD4D7, + 0x5BB3, 0xBAA6, + 0x5BB4, 0xD1E7, + 0x5BB5, 0xCFFC, + 0x5BB6, 0xBCD2, + 0x5BB8, 0xE5B7, + 0x5BB9, 0xC8DD, + 0x5BBD, 0xBFED, + 0x5BBE, 0xB1F6, + 0x5BBF, 0xCBDE, + 0x5BC2, 0xBCC5, + 0x5BC4, 0xBCC4, + 0x5BC5, 0xD2FA, + 0x5BC6, 0xC3DC, + 0x5BC7, 0xBFDC, + 0x5BCC, 0xB8BB, + 0x5BD0, 0xC3C2, + 0x5BD2, 0xBAAE, + 0x5BD3, 0xD4A2, + 0x5BDD, 0xC7DE, + 0x5BDE, 0xC4AF, + 0x5BDF, 0xB2EC, + 0x5BE1, 0xB9D1, + 0x5BE4, 0xE5BB, + 0x5BE5, 0xC1C8, + 0x5BE8, 0xD5AF, + 0x5BEE, 0xE5BC, + 0x5BF0, 0xE5BE, + 0x5BF8, 0xB4E7, + 0x5BF9, 0xB6D4, + 0x5BFA, 0xCBC2, + 0x5BFB, 0xD1B0, + 0x5BFC, 0xB5BC, + 0x5BFF, 0xCAD9, + 0x5C01, 0xB7E2, + 0x5C04, 0xC9E4, + 0x5C06, 0xBDAB, + 0x5C09, 0xCEBE, + 0x5C0A, 0xD7F0, + 0x5C0F, 0xD0A1, + 0x5C11, 0xC9D9, + 0x5C14, 0xB6FB, + 0x5C15, 0xE6D8, + 0x5C16, 0xBCE2, + 0x5C18, 0xB3BE, + 0x5C1A, 0xC9D0, + 0x5C1C, 0xE6D9, + 0x5C1D, 0xB3A2, + 0x5C22, 0xDECC, + 0x5C24, 0xD3C8, + 0x5C25, 0xDECD, + 0x5C27, 0xD2A2, + 0x5C2C, 0xDECE, + 0x5C31, 0xBECD, + 0x5C34, 0xDECF, + 0x5C38, 0xCAAC, + 0x5C39, 0xD2FC, + 0x5C3A, 0xB3DF, + 0x5C3B, 0xE5EA, + 0x5C3C, 0xC4E1, + 0x5C3D, 0xBEA1, + 0x5C3E, 0xCEB2, + 0x5C3F, 0xC4F2, + 0x5C40, 0xBED6, + 0x5C41, 0xC6A8, + 0x5C42, 0xB2E3, + 0x5C45, 0xBED3, + 0x5C48, 0xC7FC, + 0x5C49, 0xCCEB, + 0x5C4A, 0xBDEC, + 0x5C4B, 0xCEDD, + 0x5C4E, 0xCABA, + 0x5C4F, 0xC6C1, + 0x5C50, 0xE5EC, + 0x5C51, 0xD0BC, + 0x5C55, 0xD5B9, + 0x5C59, 0xE5ED, + 0x5C5E, 0xCAF4, + 0x5C60, 0xCDC0, + 0x5C61, 0xC2C5, + 0x5C63, 0xE5EF, + 0x5C65, 0xC2C4, + 0x5C66, 0xE5F0, + 0x5C6E, 0xE5F8, + 0x5C6F, 0xCDCD, + 0x5C71, 0xC9BD, + 0x5C79, 0xD2D9, + 0x5C7A, 0xE1A8, + 0x5C7F, 0xD3EC, + 0x5C81, 0xCBEA, + 0x5C82, 0xC6F1, + 0x5C88, 0xE1AC, + 0x5C8C, 0xE1A7, + 0x5C8D, 0xE1A9, + 0x5C90, 0xE1AA, + 0x5C91, 0xE1AF, + 0x5C94, 0xB2ED, + 0x5C96, 0xE1AB, + 0x5C97, 0xB8DA, + 0x5C98, 0xE1AD, + 0x5C99, 0xE1AE, + 0x5C9A, 0xE1B0, + 0x5C9B, 0xB5BA, + 0x5C9C, 0xE1B1, + 0x5CA2, 0xE1B3, + 0x5CA3, 0xE1B8, + 0x5CA9, 0xD1D2, + 0x5CAB, 0xE1B6, + 0x5CAC, 0xE1B5, + 0x5CAD, 0xC1EB, + 0x5CB1, 0xE1B7, + 0x5CB3, 0xD4C0, + 0x5CB5, 0xE1B2, + 0x5CB7, 0xE1BA, + 0x5CB8, 0xB0B6, + 0x5CBD, 0xE1B4, + 0x5CBF, 0xBFF9, + 0x5CC1, 0xE1B9, + 0x5CC4, 0xE1BB, + 0x5CCB, 0xE1BE, + 0x5CD2, 0xE1BC, + 0x5CD9, 0xD6C5, + 0x5CE1, 0xCFBF, + 0x5CE4, 0xE1BD, + 0x5CE5, 0xE1BF, + 0x5CE6, 0xC2CD, + 0x5CE8, 0xB6EB, + 0x5CEA, 0xD3F8, + 0x5CED, 0xC7CD, + 0x5CF0, 0xB7E5, + 0x5CFB, 0xBEFE, + 0x5D02, 0xE1C0, + 0x5D03, 0xE1C1, + 0x5D06, 0xE1C7, + 0x5D07, 0xB3E7, + 0x5D0E, 0xC6E9, + 0x5D14, 0xB4DE, + 0x5D16, 0xD1C2, + 0x5D1B, 0xE1C8, + 0x5D1E, 0xE1C6, + 0x5D24, 0xE1C5, + 0x5D26, 0xE1C3, + 0x5D27, 0xE1C2, + 0x5D29, 0xB1C0, + 0x5D2D, 0xD5B8, + 0x5D2E, 0xE1C4, + 0x5D34, 0xE1CB, + 0x5D3D, 0xE1CC, + 0x5D3E, 0xE1CA, + 0x5D47, 0xEFFA, + 0x5D4A, 0xE1D3, + 0x5D4B, 0xE1D2, + 0x5D4C, 0xC7B6, + 0x5D58, 0xE1C9, + 0x5D5B, 0xE1CE, + 0x5D5D, 0xE1D0, + 0x5D69, 0xE1D4, + 0x5D6B, 0xE1D1, + 0x5D6C, 0xE1CD, + 0x5D6F, 0xE1CF, + 0x5D74, 0xE1D5, + 0x5D82, 0xE1D6, + 0x5D99, 0xE1D7, + 0x5D9D, 0xE1D8, + 0x5DB7, 0xE1DA, + 0x5DC5, 0xE1DB, + 0x5DCD, 0xCEA1, + 0x5DDB, 0xE7DD, + 0x5DDD, 0xB4A8, + 0x5DDE, 0xD6DD, + 0x5DE1, 0xD1B2, + 0x5DE2, 0xB3B2, + 0x5DE5, 0xB9A4, + 0x5DE6, 0xD7F3, + 0x5DE7, 0xC7C9, + 0x5DE8, 0xBEDE, + 0x5DE9, 0xB9AE, + 0x5DEB, 0xCED7, + 0x5DEE, 0xB2EE, + 0x5DEF, 0xDBCF, + 0x5DF1, 0xBCBA, + 0x5DF2, 0xD2D1, + 0x5DF3, 0xCBC8, + 0x5DF4, 0xB0CD, + 0x5DF7, 0xCFEF, + 0x5DFD, 0xD9E3, + 0x5DFE, 0xBDED, + 0x5E01, 0xB1D2, + 0x5E02, 0xCAD0, + 0x5E03, 0xB2BC, + 0x5E05, 0xCBA7, + 0x5E06, 0xB7AB, + 0x5E08, 0xCAA6, + 0x5E0C, 0xCFA3, + 0x5E0F, 0xE0F8, + 0x5E10, 0xD5CA, + 0x5E11, 0xE0FB, + 0x5E14, 0xE0FA, + 0x5E15, 0xC5C1, + 0x5E16, 0xCCFB, + 0x5E18, 0xC1B1, + 0x5E19, 0xE0F9, + 0x5E1A, 0xD6E3, + 0x5E1B, 0xB2AF, + 0x5E1C, 0xD6C4, + 0x5E1D, 0xB5DB, + 0x5E26, 0xB4F8, + 0x5E27, 0xD6A1, + 0x5E2D, 0xCFAF, + 0x5E2E, 0xB0EF, + 0x5E31, 0xE0FC, + 0x5E37, 0xE1A1, + 0x5E38, 0xB3A3, + 0x5E3B, 0xE0FD, + 0x5E3C, 0xE0FE, + 0x5E3D, 0xC3B1, + 0x5E42, 0xC3DD, + 0x5E44, 0xE1A2, + 0x5E45, 0xB7F9, + 0x5E4C, 0xBBCF, + 0x5E54, 0xE1A3, + 0x5E55, 0xC4BB, + 0x5E5B, 0xE1A4, + 0x5E5E, 0xE1A5, + 0x5E61, 0xE1A6, + 0x5E62, 0xB4B1, + 0x5E72, 0xB8C9, + 0x5E73, 0xC6BD, + 0x5E74, 0xC4EA, + 0x5E76, 0xB2A2, + 0x5E78, 0xD0D2, + 0x5E7A, 0xE7DB, + 0x5E7B, 0xBBC3, + 0x5E7C, 0xD3D7, + 0x5E7D, 0xD3C4, + 0x5E7F, 0xB9E3, + 0x5E80, 0xE2CF, + 0x5E84, 0xD7AF, + 0x5E86, 0xC7EC, + 0x5E87, 0xB1D3, + 0x5E8A, 0xB4B2, + 0x5E8B, 0xE2D1, + 0x5E8F, 0xD0F2, + 0x5E90, 0xC2AE, + 0x5E91, 0xE2D0, + 0x5E93, 0xBFE2, + 0x5E94, 0xD3A6, + 0x5E95, 0xB5D7, + 0x5E96, 0xE2D2, + 0x5E97, 0xB5EA, + 0x5E99, 0xC3ED, + 0x5E9A, 0xB8FD, + 0x5E9C, 0xB8AE, + 0x5E9E, 0xC5D3, + 0x5E9F, 0xB7CF, + 0x5EA0, 0xE2D4, + 0x5EA5, 0xE2D3, + 0x5EA6, 0xB6C8, + 0x5EA7, 0xD7F9, + 0x5EAD, 0xCDA5, + 0x5EB3, 0xE2D8, + 0x5EB5, 0xE2D6, + 0x5EB6, 0xCAFC, + 0x5EB7, 0xBFB5, + 0x5EB8, 0xD3B9, + 0x5EB9, 0xE2D5, + 0x5EBE, 0xE2D7, + 0x5EC9, 0xC1AE, + 0x5ECA, 0xC0C8, + 0x5ED1, 0xE2DB, + 0x5ED2, 0xE2DA, + 0x5ED3, 0xC0AA, + 0x5ED6, 0xC1CE, + 0x5EDB, 0xE2DC, + 0x5EE8, 0xE2DD, + 0x5EEA, 0xE2DE, + 0x5EF4, 0xDBC8, + 0x5EF6, 0xD1D3, + 0x5EF7, 0xCDA2, + 0x5EFA, 0xBDA8, + 0x5EFE, 0xDEC3, + 0x5EFF, 0xD8A5, + 0x5F00, 0xBFAA, + 0x5F01, 0xDBCD, + 0x5F02, 0xD2EC, + 0x5F03, 0xC6FA, + 0x5F04, 0xC5AA, + 0x5F08, 0xDEC4, + 0x5F0A, 0xB1D7, + 0x5F0B, 0xDFAE, + 0x5F0F, 0xCABD, + 0x5F11, 0xDFB1, + 0x5F13, 0xB9AD, + 0x5F15, 0xD2FD, + 0x5F17, 0xB8A5, + 0x5F18, 0xBAEB, + 0x5F1B, 0xB3DA, + 0x5F1F, 0xB5DC, + 0x5F20, 0xD5C5, + 0x5F25, 0xC3D6, + 0x5F26, 0xCFD2, + 0x5F27, 0xBBA1, + 0x5F29, 0xE5F3, + 0x5F2A, 0xE5F2, + 0x5F2D, 0xE5F4, + 0x5F2F, 0xCDE4, + 0x5F31, 0xC8F5, + 0x5F39, 0xB5AF, + 0x5F3A, 0xC7BF, + 0x5F3C, 0xE5F6, + 0x5F40, 0xECB0, + 0x5F50, 0xE5E6, + 0x5F52, 0xB9E9, + 0x5F53, 0xB5B1, + 0x5F55, 0xC2BC, + 0x5F56, 0xE5E8, + 0x5F57, 0xE5E7, + 0x5F58, 0xE5E9, + 0x5F5D, 0xD2CD, + 0x5F61, 0xE1EA, + 0x5F62, 0xD0CE, + 0x5F64, 0xCDAE, + 0x5F66, 0xD1E5, + 0x5F69, 0xB2CA, + 0x5F6A, 0xB1EB, + 0x5F6C, 0xB1F2, + 0x5F6D, 0xC5ED, + 0x5F70, 0xD5C3, + 0x5F71, 0xD3B0, + 0x5F73, 0xE1DC, + 0x5F77, 0xE1DD, + 0x5F79, 0xD2DB, + 0x5F7B, 0xB3B9, + 0x5F7C, 0xB1CB, + 0x5F80, 0xCDF9, + 0x5F81, 0xD5F7, + 0x5F82, 0xE1DE, + 0x5F84, 0xBEB6, + 0x5F85, 0xB4FD, + 0x5F87, 0xE1DF, + 0x5F88, 0xBADC, + 0x5F89, 0xE1E0, + 0x5F8A, 0xBBB2, + 0x5F8B, 0xC2C9, + 0x5F8C, 0xE1E1, + 0x5F90, 0xD0EC, + 0x5F92, 0xCDBD, + 0x5F95, 0xE1E2, + 0x5F97, 0xB5C3, + 0x5F98, 0xC5C7, + 0x5F99, 0xE1E3, + 0x5F9C, 0xE1E4, + 0x5FA1, 0xD3F9, + 0x5FA8, 0xE1E5, + 0x5FAA, 0xD1AD, + 0x5FAD, 0xE1E6, + 0x5FAE, 0xCEA2, + 0x5FB5, 0xE1E7, + 0x5FB7, 0xB5C2, + 0x5FBC, 0xE1E8, + 0x5FBD, 0xBBD5, + 0x5FC3, 0xD0C4, + 0x5FC4, 0xE2E0, + 0x5FC5, 0xB1D8, + 0x5FC6, 0xD2E4, + 0x5FC9, 0xE2E1, + 0x5FCC, 0xBCC9, + 0x5FCD, 0xC8CC, + 0x5FCF, 0xE2E3, + 0x5FD0, 0xECFE, + 0x5FD1, 0xECFD, + 0x5FD2, 0xDFAF, + 0x5FD6, 0xE2E2, + 0x5FD7, 0xD6BE, + 0x5FD8, 0xCDFC, + 0x5FD9, 0xC3A6, + 0x5FDD, 0xE3C3, + 0x5FE0, 0xD6D2, + 0x5FE1, 0xE2E7, + 0x5FE4, 0xE2E8, + 0x5FE7, 0xD3C7, + 0x5FEA, 0xE2EC, + 0x5FEB, 0xBFEC, + 0x5FED, 0xE2ED, + 0x5FEE, 0xE2E5, + 0x5FF1, 0xB3C0, + 0x5FF5, 0xC4EE, + 0x5FF8, 0xE2EE, + 0x5FFB, 0xD0C3, + 0x5FFD, 0xBAF6, + 0x5FFE, 0xE2E9, + 0x5FFF, 0xB7DE, + 0x6000, 0xBBB3, + 0x6001, 0xCCAC, + 0x6002, 0xCBCB, + 0x6003, 0xE2E4, + 0x6004, 0xE2E6, + 0x6005, 0xE2EA, + 0x6006, 0xE2EB, + 0x600A, 0xE2F7, + 0x600D, 0xE2F4, + 0x600E, 0xD4F5, + 0x600F, 0xE2F3, + 0x6012, 0xC5AD, + 0x6014, 0xD5FA, + 0x6015, 0xC5C2, + 0x6016, 0xB2C0, + 0x6019, 0xE2EF, + 0x601B, 0xE2F2, + 0x601C, 0xC1AF, + 0x601D, 0xCBBC, + 0x6020, 0xB5A1, + 0x6021, 0xE2F9, + 0x6025, 0xBCB1, + 0x6026, 0xE2F1, + 0x6027, 0xD0D4, + 0x6028, 0xD4B9, + 0x6029, 0xE2F5, + 0x602A, 0xB9D6, + 0x602B, 0xE2F6, + 0x602F, 0xC7D3, + 0x6035, 0xE2F0, + 0x603B, 0xD7DC, + 0x603C, 0xEDA1, + 0x603F, 0xE2F8, + 0x6041, 0xEDA5, + 0x6042, 0xE2FE, + 0x6043, 0xCAD1, + 0x604B, 0xC1B5, + 0x604D, 0xBBD0, + 0x6050, 0xBFD6, + 0x6052, 0xBAE3, + 0x6055, 0xCBA1, + 0x6059, 0xEDA6, + 0x605A, 0xEDA3, + 0x605D, 0xEDA2, + 0x6062, 0xBBD6, + 0x6063, 0xEDA7, + 0x6064, 0xD0F4, + 0x6067, 0xEDA4, + 0x6068, 0xBADE, + 0x6069, 0xB6F7, + 0x606A, 0xE3A1, + 0x606B, 0xB6B2, + 0x606C, 0xCCF1, + 0x606D, 0xB9A7, + 0x606F, 0xCFA2, + 0x6070, 0xC7A1, + 0x6073, 0xBFD2, + 0x6076, 0xB6F1, + 0x6078, 0xE2FA, + 0x6079, 0xE2FB, + 0x607A, 0xE2FD, + 0x607B, 0xE2FC, + 0x607C, 0xC4D5, + 0x607D, 0xE3A2, + 0x607F, 0xD3C1, + 0x6083, 0xE3A7, + 0x6084, 0xC7C4, + 0x6089, 0xCFA4, + 0x608C, 0xE3A9, + 0x608D, 0xBAB7, + 0x6092, 0xE3A8, + 0x6094, 0xBBDA, + 0x6096, 0xE3A3, + 0x609A, 0xE3A4, + 0x609B, 0xE3AA, + 0x609D, 0xE3A6, + 0x609F, 0xCEF2, + 0x60A0, 0xD3C6, + 0x60A3, 0xBBBC, + 0x60A6, 0xD4C3, + 0x60A8, 0xC4FA, + 0x60AB, 0xEDA8, + 0x60AC, 0xD0FC, + 0x60AD, 0xE3A5, + 0x60AF, 0xC3F5, + 0x60B1, 0xE3AD, + 0x60B2, 0xB1AF, + 0x60B4, 0xE3B2, + 0x60B8, 0xBCC2, + 0x60BB, 0xE3AC, + 0x60BC, 0xB5BF, + 0x60C5, 0xC7E9, + 0x60C6, 0xE3B0, + 0x60CA, 0xBEAA, + 0x60CB, 0xCDEF, + 0x60D1, 0xBBF3, + 0x60D5, 0xCCE8, + 0x60D8, 0xE3AF, + 0x60DA, 0xE3B1, + 0x60DC, 0xCFA7, + 0x60DD, 0xE3AE, + 0x60DF, 0xCEA9, + 0x60E0, 0xBBDD, + 0x60E6, 0xB5EB, + 0x60E7, 0xBEE5, + 0x60E8, 0xB2D2, + 0x60E9, 0xB3CD, + 0x60EB, 0xB1B9, + 0x60EC, 0xE3AB, + 0x60ED, 0xB2D1, + 0x60EE, 0xB5AC, + 0x60EF, 0xB9DF, + 0x60F0, 0xB6E8, + 0x60F3, 0xCFEB, + 0x60F4, 0xE3B7, + 0x60F6, 0xBBCC, + 0x60F9, 0xC8C7, + 0x60FA, 0xD0CA, + 0x6100, 0xE3B8, + 0x6101, 0xB3EE, + 0x6106, 0xEDA9, + 0x6108, 0xD3FA, + 0x6109, 0xD3E4, + 0x610D, 0xEDAA, + 0x610E, 0xE3B9, + 0x610F, 0xD2E2, + 0x6115, 0xE3B5, + 0x611A, 0xD3DE, + 0x611F, 0xB8D0, + 0x6120, 0xE3B3, + 0x6123, 0xE3B6, + 0x6124, 0xB7DF, + 0x6126, 0xE3B4, + 0x6127, 0xC0A2, + 0x612B, 0xE3BA, + 0x613F, 0xD4B8, + 0x6148, 0xB4C8, + 0x614A, 0xE3BB, + 0x614C, 0xBBC5, + 0x614E, 0xC9F7, + 0x6151, 0xC9E5, + 0x6155, 0xC4BD, + 0x615D, 0xEDAB, + 0x6162, 0xC2FD, + 0x6167, 0xBBDB, + 0x6168, 0xBFAE, + 0x6170, 0xCEBF, + 0x6175, 0xE3BC, + 0x6177, 0xBFB6, + 0x618B, 0xB1EF, + 0x618E, 0xD4F7, + 0x6194, 0xE3BE, + 0x619D, 0xEDAD, + 0x61A7, 0xE3BF, + 0x61A8, 0xBAA9, + 0x61A9, 0xEDAC, + 0x61AC, 0xE3BD, + 0x61B7, 0xE3C0, + 0x61BE, 0xBAB6, + 0x61C2, 0xB6AE, + 0x61C8, 0xD0B8, + 0x61CA, 0xB0C3, + 0x61CB, 0xEDAE, + 0x61D1, 0xEDAF, + 0x61D2, 0xC0C1, + 0x61D4, 0xE3C1, + 0x61E6, 0xC5B3, + 0x61F5, 0xE3C2, + 0x61FF, 0xDCB2, + 0x6206, 0xEDB0, + 0x6208, 0xB8EA, + 0x620A, 0xCEEC, + 0x620B, 0xEAA7, + 0x620C, 0xD0E7, + 0x620D, 0xCAF9, + 0x620E, 0xC8D6, + 0x620F, 0xCFB7, + 0x6210, 0xB3C9, + 0x6211, 0xCED2, + 0x6212, 0xBDE4, + 0x6215, 0xE3DE, + 0x6216, 0xBBF2, + 0x6217, 0xEAA8, + 0x6218, 0xD5BD, + 0x621A, 0xC6DD, + 0x621B, 0xEAA9, + 0x621F, 0xEAAA, + 0x6221, 0xEAAC, + 0x6222, 0xEAAB, + 0x6224, 0xEAAE, + 0x6225, 0xEAAD, + 0x622A, 0xBDD8, + 0x622C, 0xEAAF, + 0x622E, 0xC2BE, + 0x6233, 0xB4C1, + 0x6234, 0xB4F7, + 0x6237, 0xBBA7, + 0x623D, 0xECE6, + 0x623E, 0xECE5, + 0x623F, 0xB7BF, + 0x6240, 0xCBF9, + 0x6241, 0xB1E2, + 0x6243, 0xECE7, + 0x6247, 0xC9C8, + 0x6248, 0xECE8, + 0x6249, 0xECE9, + 0x624B, 0xCAD6, + 0x624C, 0xDED0, + 0x624D, 0xB2C5, + 0x624E, 0xD4FA, + 0x6251, 0xC6CB, + 0x6252, 0xB0C7, + 0x6253, 0xB4F2, + 0x6254, 0xC8D3, + 0x6258, 0xCDD0, + 0x625B, 0xBFB8, + 0x6263, 0xBFDB, + 0x6266, 0xC7A4, + 0x6267, 0xD6B4, + 0x6269, 0xC0A9, + 0x626A, 0xDED1, + 0x626B, 0xC9A8, + 0x626C, 0xD1EF, + 0x626D, 0xC5A4, + 0x626E, 0xB0E7, + 0x626F, 0xB3B6, + 0x6270, 0xC8C5, + 0x6273, 0xB0E2, + 0x6276, 0xB7F6, + 0x6279, 0xC5FA, + 0x627C, 0xB6F3, + 0x627E, 0xD5D2, + 0x627F, 0xB3D0, + 0x6280, 0xBCBC, + 0x6284, 0xB3AD, + 0x6289, 0xBEF1, + 0x628A, 0xB0D1, + 0x6291, 0xD2D6, + 0x6292, 0xCAE3, + 0x6293, 0xD7A5, + 0x6295, 0xCDB6, + 0x6296, 0xB6B6, + 0x6297, 0xBFB9, + 0x6298, 0xD5DB, + 0x629A, 0xB8A7, + 0x629B, 0xC5D7, + 0x629F, 0xDED2, + 0x62A0, 0xBFD9, + 0x62A1, 0xC2D5, + 0x62A2, 0xC7C0, + 0x62A4, 0xBBA4, + 0x62A5, 0xB1A8, + 0x62A8, 0xC5EA, + 0x62AB, 0xC5FB, + 0x62AC, 0xCCA7, + 0x62B1, 0xB1A7, + 0x62B5, 0xB5D6, + 0x62B9, 0xC4A8, + 0x62BB, 0xDED3, + 0x62BC, 0xD1BA, + 0x62BD, 0xB3E9, + 0x62BF, 0xC3F2, + 0x62C2, 0xB7F7, + 0x62C4, 0xD6F4, + 0x62C5, 0xB5A3, + 0x62C6, 0xB2F0, + 0x62C7, 0xC4B4, + 0x62C8, 0xC4E9, + 0x62C9, 0xC0AD, + 0x62CA, 0xDED4, + 0x62CC, 0xB0E8, + 0x62CD, 0xC5C4, + 0x62CE, 0xC1E0, + 0x62D0, 0xB9D5, + 0x62D2, 0xBEDC, + 0x62D3, 0xCDD8, + 0x62D4, 0xB0CE, + 0x62D6, 0xCDCF, + 0x62D7, 0xDED6, + 0x62D8, 0xBED0, + 0x62D9, 0xD7BE, + 0x62DA, 0xDED5, + 0x62DB, 0xD5D0, + 0x62DC, 0xB0DD, + 0x62DF, 0xC4E2, + 0x62E2, 0xC2A3, + 0x62E3, 0xBCF0, + 0x62E5, 0xD3B5, + 0x62E6, 0xC0B9, + 0x62E7, 0xC5A1, + 0x62E8, 0xB2A6, + 0x62E9, 0xD4F1, + 0x62EC, 0xC0A8, + 0x62ED, 0xCAC3, + 0x62EE, 0xDED7, + 0x62EF, 0xD5FC, + 0x62F1, 0xB9B0, + 0x62F3, 0xC8AD, + 0x62F4, 0xCBA9, + 0x62F6, 0xDED9, + 0x62F7, 0xBFBD, + 0x62FC, 0xC6B4, + 0x62FD, 0xD7A7, + 0x62FE, 0xCAB0, + 0x62FF, 0xC4C3, + 0x6301, 0xB3D6, + 0x6302, 0xB9D2, + 0x6307, 0xD6B8, + 0x6308, 0xEAFC, + 0x6309, 0xB0B4, + 0x630E, 0xBFE6, + 0x6311, 0xCCF4, + 0x6316, 0xCDDA, + 0x631A, 0xD6BF, + 0x631B, 0xC2CE, + 0x631D, 0xCECE, + 0x631E, 0xCCA2, + 0x631F, 0xD0AE, + 0x6320, 0xC4D3, + 0x6321, 0xB5B2, + 0x6322, 0xDED8, + 0x6323, 0xD5F5, + 0x6324, 0xBCB7, + 0x6325, 0xBBD3, + 0x6328, 0xB0A4, + 0x632A, 0xC5B2, + 0x632B, 0xB4EC, + 0x632F, 0xD5F1, + 0x6332, 0xEAFD, + 0x6339, 0xDEDA, + 0x633A, 0xCDA6, + 0x633D, 0xCDEC, + 0x6342, 0xCEE6, + 0x6343, 0xDEDC, + 0x6345, 0xCDB1, + 0x6346, 0xC0A6, + 0x6349, 0xD7BD, + 0x634B, 0xDEDB, + 0x634C, 0xB0C6, + 0x634D, 0xBAB4, + 0x634E, 0xC9D3, + 0x634F, 0xC4F3, + 0x6350, 0xBEE8, + 0x6355, 0xB2B6, + 0x635E, 0xC0CC, + 0x635F, 0xCBF0, + 0x6361, 0xBCF1, + 0x6362, 0xBBBB, + 0x6363, 0xB5B7, + 0x6367, 0xC5F5, + 0x6369, 0xDEE6, + 0x636D, 0xDEE3, + 0x636E, 0xBEDD, + 0x6371, 0xDEDF, + 0x6376, 0xB4B7, + 0x6377, 0xBDDD, + 0x637A, 0xDEE0, + 0x637B, 0xC4ED, + 0x6380, 0xCFC6, + 0x6382, 0xB5E0, + 0x6387, 0xB6DE, + 0x6388, 0xCADA, + 0x6389, 0xB5F4, + 0x638A, 0xDEE5, + 0x638C, 0xD5C6, + 0x638E, 0xDEE1, + 0x638F, 0xCCCD, + 0x6390, 0xC6FE, + 0x6392, 0xC5C5, + 0x6396, 0xD2B4, + 0x6398, 0xBEF2, + 0x63A0, 0xC2D3, + 0x63A2, 0xCCBD, + 0x63A3, 0xB3B8, + 0x63A5, 0xBDD3, + 0x63A7, 0xBFD8, + 0x63A8, 0xCDC6, + 0x63A9, 0xD1DA, + 0x63AA, 0xB4EB, + 0x63AC, 0xDEE4, + 0x63AD, 0xDEDD, + 0x63AE, 0xDEE7, + 0x63B0, 0xEAFE, + 0x63B3, 0xC2B0, + 0x63B4, 0xDEE2, + 0x63B7, 0xD6C0, + 0x63B8, 0xB5A7, + 0x63BA, 0xB2F4, + 0x63BC, 0xDEE8, + 0x63BE, 0xDEF2, + 0x63C4, 0xDEED, + 0x63C6, 0xDEF1, + 0x63C9, 0xC8E0, + 0x63CD, 0xD7E1, + 0x63CE, 0xDEEF, + 0x63CF, 0xC3E8, + 0x63D0, 0xCCE1, + 0x63D2, 0xB2E5, + 0x63D6, 0xD2BE, + 0x63DE, 0xDEEE, + 0x63E0, 0xDEEB, + 0x63E1, 0xCED5, + 0x63E3, 0xB4A7, + 0x63E9, 0xBFAB, + 0x63EA, 0xBEBE, + 0x63ED, 0xBDD2, + 0x63F2, 0xDEE9, + 0x63F4, 0xD4AE, + 0x63F6, 0xDEDE, + 0x63F8, 0xDEEA, + 0x63FD, 0xC0BF, + 0x63FF, 0xDEEC, + 0x6400, 0xB2F3, + 0x6401, 0xB8E9, + 0x6402, 0xC2A7, + 0x6405, 0xBDC1, + 0x640B, 0xDEF5, + 0x640C, 0xDEF8, + 0x640F, 0xB2AB, + 0x6410, 0xB4A4, + 0x6413, 0xB4EA, + 0x6414, 0xC9A6, + 0x641B, 0xDEF6, + 0x641C, 0xCBD1, + 0x641E, 0xB8E3, + 0x6420, 0xDEF7, + 0x6421, 0xDEFA, + 0x6426, 0xDEF9, + 0x642A, 0xCCC2, + 0x642C, 0xB0E1, + 0x642D, 0xB4EE, + 0x6434, 0xE5BA, + 0x643A, 0xD0AF, + 0x643D, 0xB2EB, + 0x643F, 0xEBA1, + 0x6441, 0xDEF4, + 0x6444, 0xC9E3, + 0x6445, 0xDEF3, + 0x6446, 0xB0DA, + 0x6447, 0xD2A1, + 0x6448, 0xB1F7, + 0x644A, 0xCCAF, + 0x6452, 0xDEF0, + 0x6454, 0xCBA4, + 0x6458, 0xD5AA, + 0x645E, 0xDEFB, + 0x6467, 0xB4DD, + 0x6469, 0xC4A6, + 0x646D, 0xDEFD, + 0x6478, 0xC3FE, + 0x6479, 0xC4A1, + 0x647A, 0xDFA1, + 0x6482, 0xC1CC, + 0x6484, 0xDEFC, + 0x6485, 0xBEEF, + 0x6487, 0xC6B2, + 0x6491, 0xB3C5, + 0x6492, 0xC8F6, + 0x6495, 0xCBBA, + 0x6496, 0xDEFE, + 0x6499, 0xDFA4, + 0x649E, 0xD7B2, + 0x64A4, 0xB3B7, + 0x64A9, 0xC1C3, + 0x64AC, 0xC7CB, + 0x64AD, 0xB2A5, + 0x64AE, 0xB4E9, + 0x64B0, 0xD7AB, + 0x64B5, 0xC4EC, + 0x64B7, 0xDFA2, + 0x64B8, 0xDFA3, + 0x64BA, 0xDFA5, + 0x64BC, 0xBAB3, + 0x64C0, 0xDFA6, + 0x64C2, 0xC0DE, + 0x64C5, 0xC9C3, + 0x64CD, 0xB2D9, + 0x64CE, 0xC7E6, + 0x64D0, 0xDFA7, + 0x64D2, 0xC7DC, + 0x64D7, 0xDFA8, + 0x64D8, 0xEBA2, + 0x64DE, 0xCBD3, + 0x64E2, 0xDFAA, + 0x64E4, 0xDFA9, + 0x64E6, 0xB2C1, + 0x6500, 0xC5CA, + 0x6509, 0xDFAB, + 0x6512, 0xD4DC, + 0x6518, 0xC8C1, + 0x6525, 0xDFAC, + 0x652B, 0xBEF0, + 0x652E, 0xDFAD, + 0x652F, 0xD6A7, + 0x6534, 0xEAB7, + 0x6535, 0xEBB6, + 0x6536, 0xCAD5, + 0x6538, 0xD8FC, + 0x6539, 0xB8C4, + 0x653B, 0xB9A5, + 0x653E, 0xB7C5, + 0x653F, 0xD5FE, + 0x6545, 0xB9CA, + 0x6548, 0xD0A7, + 0x6549, 0xF4CD, + 0x654C, 0xB5D0, + 0x654F, 0xC3F4, + 0x6551, 0xBEC8, + 0x6555, 0xEBB7, + 0x6556, 0xB0BD, + 0x6559, 0xBDCC, + 0x655B, 0xC1B2, + 0x655D, 0xB1D6, + 0x655E, 0xB3A8, + 0x6562, 0xB8D2, + 0x6563, 0xC9A2, + 0x6566, 0xB6D8, + 0x656B, 0xEBB8, + 0x656C, 0xBEB4, + 0x6570, 0xCAFD, + 0x6572, 0xC7C3, + 0x6574, 0xD5FB, + 0x6577, 0xB7F3, + 0x6587, 0xCEC4, + 0x658B, 0xD5AB, + 0x658C, 0xB1F3, + 0x6590, 0xECB3, + 0x6591, 0xB0DF, + 0x6593, 0xECB5, + 0x6597, 0xB6B7, + 0x6599, 0xC1CF, + 0x659B, 0xF5FA, + 0x659C, 0xD0B1, + 0x659F, 0xD5E5, + 0x65A1, 0xCED3, + 0x65A4, 0xBDEF, + 0x65A5, 0xB3E2, + 0x65A7, 0xB8AB, + 0x65A9, 0xD5B6, + 0x65AB, 0xEDBD, + 0x65AD, 0xB6CF, + 0x65AF, 0xCBB9, + 0x65B0, 0xD0C2, + 0x65B9, 0xB7BD, + 0x65BC, 0xECB6, + 0x65BD, 0xCAA9, + 0x65C1, 0xC5D4, + 0x65C3, 0xECB9, + 0x65C4, 0xECB8, + 0x65C5, 0xC2C3, + 0x65C6, 0xECB7, + 0x65CB, 0xD0FD, + 0x65CC, 0xECBA, + 0x65CE, 0xECBB, + 0x65CF, 0xD7E5, + 0x65D2, 0xECBC, + 0x65D6, 0xECBD, + 0x65D7, 0xC6EC, + 0x65E0, 0xCEDE, + 0x65E2, 0xBCC8, + 0x65E5, 0xC8D5, + 0x65E6, 0xB5A9, + 0x65E7, 0xBEC9, + 0x65E8, 0xD6BC, + 0x65E9, 0xD4E7, + 0x65EC, 0xD1AE, + 0x65ED, 0xD0F1, + 0x65EE, 0xEAB8, + 0x65EF, 0xEAB9, + 0x65F0, 0xEABA, + 0x65F1, 0xBAB5, + 0x65F6, 0xCAB1, + 0x65F7, 0xBFF5, + 0x65FA, 0xCDFA, + 0x6600, 0xEAC0, + 0x6602, 0xB0BA, + 0x6603, 0xEABE, + 0x6606, 0xC0A5, + 0x660A, 0xEABB, + 0x660C, 0xB2FD, + 0x660E, 0xC3F7, + 0x660F, 0xBBE8, + 0x6613, 0xD2D7, + 0x6614, 0xCEF4, + 0x6615, 0xEABF, + 0x6619, 0xEABC, + 0x661D, 0xEAC3, + 0x661F, 0xD0C7, + 0x6620, 0xD3B3, + 0x6625, 0xB4BA, + 0x6627, 0xC3C1, + 0x6628, 0xD7F2, + 0x662D, 0xD5D1, + 0x662F, 0xCAC7, + 0x6631, 0xEAC5, + 0x6634, 0xEAC4, + 0x6635, 0xEAC7, + 0x6636, 0xEAC6, + 0x663C, 0xD6E7, + 0x663E, 0xCFD4, + 0x6641, 0xEACB, + 0x6643, 0xBBCE, + 0x664B, 0xBDFA, + 0x664C, 0xC9CE, + 0x664F, 0xEACC, + 0x6652, 0xC9B9, + 0x6653, 0xCFFE, + 0x6654, 0xEACA, + 0x6655, 0xD4CE, + 0x6656, 0xEACD, + 0x6657, 0xEACF, + 0x665A, 0xCDED, + 0x665F, 0xEAC9, + 0x6661, 0xEACE, + 0x6664, 0xCEEE, + 0x6666, 0xBBDE, + 0x6668, 0xB3BF, + 0x666E, 0xC6D5, + 0x666F, 0xBEB0, + 0x6670, 0xCEFA, + 0x6674, 0xC7E7, + 0x6676, 0xBEA7, + 0x6677, 0xEAD0, + 0x667A, 0xD6C7, + 0x667E, 0xC1C0, + 0x6682, 0xD4DD, + 0x6684, 0xEAD1, + 0x6687, 0xCFBE, + 0x668C, 0xEAD2, + 0x6691, 0xCAEE, + 0x6696, 0xC5AF, + 0x6697, 0xB0B5, + 0x669D, 0xEAD4, + 0x66A7, 0xEAD3, + 0x66A8, 0xF4DF, + 0x66AE, 0xC4BA, + 0x66B4, 0xB1A9, + 0x66B9, 0xE5DF, + 0x66BE, 0xEAD5, + 0x66D9, 0xCAEF, + 0x66DB, 0xEAD6, + 0x66DC, 0xEAD7, + 0x66DD, 0xC6D8, + 0x66E6, 0xEAD8, + 0x66E9, 0xEAD9, + 0x66F0, 0xD4BB, + 0x66F2, 0xC7FA, + 0x66F3, 0xD2B7, + 0x66F4, 0xB8FC, + 0x66F7, 0xEAC2, + 0x66F9, 0xB2DC, + 0x66FC, 0xC2FC, + 0x66FE, 0xD4F8, + 0x66FF, 0xCCE6, + 0x6700, 0xD7EE, + 0x6708, 0xD4C2, + 0x6709, 0xD3D0, + 0x670A, 0xEBC3, + 0x670B, 0xC5F3, + 0x670D, 0xB7FE, + 0x6710, 0xEBD4, + 0x6714, 0xCBB7, + 0x6715, 0xEBDE, + 0x6717, 0xC0CA, + 0x671B, 0xCDFB, + 0x671D, 0xB3AF, + 0x671F, 0xC6DA, + 0x6726, 0xEBFC, + 0x6728, 0xC4BE, + 0x672A, 0xCEB4, + 0x672B, 0xC4A9, + 0x672C, 0xB1BE, + 0x672D, 0xD4FD, + 0x672F, 0xCAF5, + 0x6731, 0xD6EC, + 0x6734, 0xC6D3, + 0x6735, 0xB6E4, + 0x673A, 0xBBFA, + 0x673D, 0xD0E0, + 0x6740, 0xC9B1, + 0x6742, 0xD4D3, + 0x6743, 0xC8A8, + 0x6746, 0xB8CB, + 0x6748, 0xE8BE, + 0x6749, 0xC9BC, + 0x674C, 0xE8BB, + 0x674E, 0xC0EE, + 0x674F, 0xD0D3, + 0x6750, 0xB2C4, + 0x6751, 0xB4E5, + 0x6753, 0xE8BC, + 0x6756, 0xD5C8, + 0x675C, 0xB6C5, + 0x675E, 0xE8BD, + 0x675F, 0xCAF8, + 0x6760, 0xB8DC, + 0x6761, 0xCCF5, + 0x6765, 0xC0B4, + 0x6768, 0xD1EE, + 0x6769, 0xE8BF, + 0x676A, 0xE8C2, + 0x676D, 0xBABC, + 0x676F, 0xB1AD, + 0x6770, 0xBDDC, + 0x6772, 0xEABD, + 0x6773, 0xE8C3, + 0x6775, 0xE8C6, + 0x6777, 0xE8CB, + 0x677C, 0xE8CC, + 0x677E, 0xCBC9, + 0x677F, 0xB0E5, + 0x6781, 0xBCAB, + 0x6784, 0xB9B9, + 0x6787, 0xE8C1, + 0x6789, 0xCDF7, + 0x678B, 0xE8CA, + 0x6790, 0xCEF6, + 0x6795, 0xD5ED, + 0x6797, 0xC1D6, + 0x6798, 0xE8C4, + 0x679A, 0xC3B6, + 0x679C, 0xB9FB, + 0x679D, 0xD6A6, + 0x679E, 0xE8C8, + 0x67A2, 0xCAE0, + 0x67A3, 0xD4E6, + 0x67A5, 0xE8C0, + 0x67A7, 0xE8C5, + 0x67A8, 0xE8C7, + 0x67AA, 0xC7B9, + 0x67AB, 0xB7E3, + 0x67AD, 0xE8C9, + 0x67AF, 0xBFDD, + 0x67B0, 0xE8D2, + 0x67B3, 0xE8D7, + 0x67B5, 0xE8D5, + 0x67B6, 0xBCDC, + 0x67B7, 0xBCCF, + 0x67B8, 0xE8DB, + 0x67C1, 0xE8DE, + 0x67C3, 0xE8DA, + 0x67C4, 0xB1FA, + 0x67CF, 0xB0D8, + 0x67D0, 0xC4B3, + 0x67D1, 0xB8CC, + 0x67D2, 0xC6E2, + 0x67D3, 0xC8BE, + 0x67D4, 0xC8E1, + 0x67D8, 0xE8CF, + 0x67D9, 0xE8D4, + 0x67DA, 0xE8D6, + 0x67DC, 0xB9F1, + 0x67DD, 0xE8D8, + 0x67DE, 0xD7F5, + 0x67E0, 0xC4FB, + 0x67E2, 0xE8DC, + 0x67E5, 0xB2E9, + 0x67E9, 0xE8D1, + 0x67EC, 0xBCED, + 0x67EF, 0xBFC2, + 0x67F0, 0xE8CD, + 0x67F1, 0xD6F9, + 0x67F3, 0xC1F8, + 0x67F4, 0xB2F1, + 0x67FD, 0xE8DF, + 0x67FF, 0xCAC1, + 0x6800, 0xE8D9, + 0x6805, 0xD5A4, + 0x6807, 0xB1EA, + 0x6808, 0xD5BB, + 0x6809, 0xE8CE, + 0x680A, 0xE8D0, + 0x680B, 0xB6B0, + 0x680C, 0xE8D3, + 0x680E, 0xE8DD, + 0x680F, 0xC0B8, + 0x6811, 0xCAF7, + 0x6813, 0xCBA8, + 0x6816, 0xC6DC, + 0x6817, 0xC0F5, + 0x681D, 0xE8E9, + 0x6821, 0xD0A3, + 0x6829, 0xE8F2, + 0x682A, 0xD6EA, + 0x6832, 0xE8E0, + 0x6833, 0xE8E1, + 0x6837, 0xD1F9, + 0x6838, 0xBACB, + 0x6839, 0xB8F9, + 0x683C, 0xB8F1, + 0x683D, 0xD4D4, + 0x683E, 0xE8EF, + 0x6840, 0xE8EE, + 0x6841, 0xE8EC, + 0x6842, 0xB9F0, + 0x6843, 0xCCD2, + 0x6844, 0xE8E6, + 0x6845, 0xCEA6, + 0x6846, 0xBFF2, + 0x6848, 0xB0B8, + 0x6849, 0xE8F1, + 0x684A, 0xE8F0, + 0x684C, 0xD7C0, + 0x684E, 0xE8E4, + 0x6850, 0xCDA9, + 0x6851, 0xC9A3, + 0x6853, 0xBBB8, + 0x6854, 0xBDDB, + 0x6855, 0xE8EA, + 0x6860, 0xE8E2, + 0x6861, 0xE8E3, + 0x6862, 0xE8E5, + 0x6863, 0xB5B5, + 0x6864, 0xE8E7, + 0x6865, 0xC7C5, + 0x6866, 0xE8EB, + 0x6867, 0xE8ED, + 0x6868, 0xBDB0, + 0x6869, 0xD7AE, + 0x686B, 0xE8F8, + 0x6874, 0xE8F5, + 0x6876, 0xCDB0, + 0x6877, 0xE8F6, + 0x6881, 0xC1BA, + 0x6883, 0xE8E8, + 0x6885, 0xC3B7, + 0x6886, 0xB0F0, + 0x688F, 0xE8F4, + 0x6893, 0xE8F7, + 0x6897, 0xB9A3, + 0x68A2, 0xC9D2, + 0x68A6, 0xC3CE, + 0x68A7, 0xCEE0, + 0x68A8, 0xC0E6, + 0x68AD, 0xCBF3, + 0x68AF, 0xCCDD, + 0x68B0, 0xD0B5, + 0x68B3, 0xCAE1, + 0x68B5, 0xE8F3, + 0x68C0, 0xBCEC, + 0x68C2, 0xE8F9, + 0x68C9, 0xC3DE, + 0x68CB, 0xC6E5, + 0x68CD, 0xB9F7, + 0x68D2, 0xB0F4, + 0x68D5, 0xD7D8, + 0x68D8, 0xBCAC, + 0x68DA, 0xC5EF, + 0x68E0, 0xCCC4, + 0x68E3, 0xE9A6, + 0x68EE, 0xC9AD, + 0x68F0, 0xE9A2, + 0x68F1, 0xC0E2, + 0x68F5, 0xBFC3, + 0x68F9, 0xE8FE, + 0x68FA, 0xB9D7, + 0x68FC, 0xE8FB, + 0x6901, 0xE9A4, + 0x6905, 0xD2CE, + 0x690B, 0xE9A3, + 0x690D, 0xD6B2, + 0x690E, 0xD7B5, + 0x6910, 0xE9A7, + 0x6912, 0xBDB7, + 0x691F, 0xE8FC, + 0x6920, 0xE8FD, + 0x6924, 0xE9A1, + 0x692D, 0xCDD6, + 0x6930, 0xD2AC, + 0x6934, 0xE9B2, + 0x6939, 0xE9A9, + 0x693D, 0xB4AA, + 0x693F, 0xB4BB, + 0x6942, 0xE9AB, + 0x6954, 0xD0A8, + 0x6957, 0xE9A5, + 0x695A, 0xB3FE, + 0x695D, 0xE9AC, + 0x695E, 0xC0E3, + 0x6960, 0xE9AA, + 0x6963, 0xE9B9, + 0x6966, 0xE9B8, + 0x696B, 0xE9AE, + 0x696E, 0xE8FA, + 0x6971, 0xE9A8, + 0x6977, 0xBFAC, + 0x6978, 0xE9B1, + 0x6979, 0xE9BA, + 0x697C, 0xC2A5, + 0x6980, 0xE9AF, + 0x6982, 0xB8C5, + 0x6984, 0xE9AD, + 0x6986, 0xD3DC, + 0x6987, 0xE9B4, + 0x6988, 0xE9B5, + 0x6989, 0xE9B7, + 0x698D, 0xE9C7, + 0x6994, 0xC0C6, + 0x6995, 0xE9C5, + 0x6998, 0xE9B0, + 0x699B, 0xE9BB, + 0x699C, 0xB0F1, + 0x69A7, 0xE9BC, + 0x69A8, 0xD5A5, + 0x69AB, 0xE9BE, + 0x69AD, 0xE9BF, + 0x69B1, 0xE9C1, + 0x69B4, 0xC1F1, + 0x69B7, 0xC8B6, + 0x69BB, 0xE9BD, + 0x69C1, 0xE9C2, + 0x69CA, 0xE9C3, + 0x69CC, 0xE9B3, + 0x69CE, 0xE9B6, + 0x69D0, 0xBBB1, + 0x69D4, 0xE9C0, + 0x69DB, 0xBCF7, + 0x69DF, 0xE9C4, + 0x69E0, 0xE9C6, + 0x69ED, 0xE9CA, + 0x69F2, 0xE9CE, + 0x69FD, 0xB2DB, + 0x69FF, 0xE9C8, + 0x6A0A, 0xB7AE, + 0x6A17, 0xE9CB, + 0x6A18, 0xE9CC, + 0x6A1F, 0xD5C1, + 0x6A21, 0xC4A3, + 0x6A28, 0xE9D8, + 0x6A2A, 0xBAE1, + 0x6A2F, 0xE9C9, + 0x6A31, 0xD3A3, + 0x6A35, 0xE9D4, + 0x6A3D, 0xE9D7, + 0x6A3E, 0xE9D0, + 0x6A44, 0xE9CF, + 0x6A47, 0xC7C1, + 0x6A50, 0xE9D2, + 0x6A58, 0xE9D9, + 0x6A59, 0xB3C8, + 0x6A5B, 0xE9D3, + 0x6A61, 0xCFF0, + 0x6A65, 0xE9CD, + 0x6A71, 0xB3F7, + 0x6A79, 0xE9D6, + 0x6A7C, 0xE9DA, + 0x6A80, 0xCCB4, + 0x6A84, 0xCFAD, + 0x6A8E, 0xE9D5, + 0x6A90, 0xE9DC, + 0x6A91, 0xE9DB, + 0x6A97, 0xE9DE, + 0x6AA0, 0xE9D1, + 0x6AA9, 0xE9DD, + 0x6AAB, 0xE9DF, + 0x6AAC, 0xC3CA, + 0x6B20, 0xC7B7, + 0x6B21, 0xB4CE, + 0x6B22, 0xBBB6, + 0x6B23, 0xD0C0, + 0x6B24, 0xECA3, + 0x6B27, 0xC5B7, + 0x6B32, 0xD3FB, + 0x6B37, 0xECA4, + 0x6B39, 0xECA5, + 0x6B3A, 0xC6DB, + 0x6B3E, 0xBFEE, + 0x6B43, 0xECA6, + 0x6B46, 0xECA7, + 0x6B47, 0xD0AA, + 0x6B49, 0xC7B8, + 0x6B4C, 0xB8E8, + 0x6B59, 0xECA8, + 0x6B62, 0xD6B9, + 0x6B63, 0xD5FD, + 0x6B64, 0xB4CB, + 0x6B65, 0xB2BD, + 0x6B66, 0xCEE4, + 0x6B67, 0xC6E7, + 0x6B6A, 0xCDE1, + 0x6B79, 0xB4F5, + 0x6B7B, 0xCBC0, + 0x6B7C, 0xBCDF, + 0x6B81, 0xE9E2, + 0x6B82, 0xE9E3, + 0x6B83, 0xD1EA, + 0x6B84, 0xE9E5, + 0x6B86, 0xB4F9, + 0x6B87, 0xE9E4, + 0x6B89, 0xD1B3, + 0x6B8A, 0xCAE2, + 0x6B8B, 0xB2D0, + 0x6B8D, 0xE9E8, + 0x6B92, 0xE9E6, + 0x6B93, 0xE9E7, + 0x6B96, 0xD6B3, + 0x6B9A, 0xE9E9, + 0x6B9B, 0xE9EA, + 0x6BA1, 0xE9EB, + 0x6BAA, 0xE9EC, + 0x6BB3, 0xECAF, + 0x6BB4, 0xC5B9, + 0x6BB5, 0xB6CE, + 0x6BB7, 0xD2F3, + 0x6BBF, 0xB5EE, + 0x6BC1, 0xBBD9, + 0x6BC2, 0xECB1, + 0x6BC5, 0xD2E3, + 0x6BCB, 0xCEE3, + 0x6BCD, 0xC4B8, + 0x6BCF, 0xC3BF, + 0x6BD2, 0xB6BE, + 0x6BD3, 0xD8B9, + 0x6BD4, 0xB1C8, + 0x6BD5, 0xB1CF, + 0x6BD6, 0xB1D1, + 0x6BD7, 0xC5FE, + 0x6BD9, 0xB1D0, + 0x6BDB, 0xC3AB, + 0x6BE1, 0xD5B1, + 0x6BEA, 0xEBA4, + 0x6BEB, 0xBAC1, + 0x6BEF, 0xCCBA, + 0x6BF3, 0xEBA5, + 0x6BF5, 0xEBA7, + 0x6BF9, 0xEBA8, + 0x6BFD, 0xEBA6, + 0x6C05, 0xEBA9, + 0x6C06, 0xEBAB, + 0x6C07, 0xEBAA, + 0x6C0D, 0xEBAC, + 0x6C0F, 0xCACF, + 0x6C10, 0xD8B5, + 0x6C11, 0xC3F1, + 0x6C13, 0xC3A5, + 0x6C14, 0xC6F8, + 0x6C15, 0xEBAD, + 0x6C16, 0xC4CA, + 0x6C18, 0xEBAE, + 0x6C19, 0xEBAF, + 0x6C1A, 0xEBB0, + 0x6C1B, 0xB7D5, + 0x6C1F, 0xB7FA, + 0x6C21, 0xEBB1, + 0x6C22, 0xC7E2, + 0x6C24, 0xEBB3, + 0x6C26, 0xBAA4, + 0x6C27, 0xD1F5, + 0x6C28, 0xB0B1, + 0x6C29, 0xEBB2, + 0x6C2A, 0xEBB4, + 0x6C2E, 0xB5AA, + 0x6C2F, 0xC2C8, + 0x6C30, 0xC7E8, + 0x6C32, 0xEBB5, + 0x6C34, 0xCBAE, + 0x6C35, 0xE3DF, + 0x6C38, 0xD3C0, + 0x6C3D, 0xD9DB, + 0x6C40, 0xCDA1, + 0x6C41, 0xD6AD, + 0x6C42, 0xC7F3, + 0x6C46, 0xD9E0, + 0x6C47, 0xBBE3, + 0x6C49, 0xBABA, + 0x6C4A, 0xE3E2, + 0x6C50, 0xCFAB, + 0x6C54, 0xE3E0, + 0x6C55, 0xC9C7, + 0x6C57, 0xBAB9, + 0x6C5B, 0xD1B4, + 0x6C5C, 0xE3E1, + 0x6C5D, 0xC8EA, + 0x6C5E, 0xB9AF, + 0x6C5F, 0xBDAD, + 0x6C60, 0xB3D8, + 0x6C61, 0xCEDB, + 0x6C64, 0xCCC0, + 0x6C68, 0xE3E8, + 0x6C69, 0xE3E9, + 0x6C6A, 0xCDF4, + 0x6C70, 0xCCAD, + 0x6C72, 0xBCB3, + 0x6C74, 0xE3EA, + 0x6C76, 0xE3EB, + 0x6C79, 0xD0DA, + 0x6C7D, 0xC6FB, + 0x6C7E, 0xB7DA, + 0x6C81, 0xC7DF, + 0x6C82, 0xD2CA, + 0x6C83, 0xCED6, + 0x6C85, 0xE3E4, + 0x6C86, 0xE3EC, + 0x6C88, 0xC9F2, + 0x6C89, 0xB3C1, + 0x6C8C, 0xE3E7, + 0x6C8F, 0xC6E3, + 0x6C90, 0xE3E5, + 0x6C93, 0xEDB3, + 0x6C94, 0xE3E6, + 0x6C99, 0xC9B3, + 0x6C9B, 0xC5E6, + 0x6C9F, 0xB9B5, + 0x6CA1, 0xC3BB, + 0x6CA3, 0xE3E3, + 0x6CA4, 0xC5BD, + 0x6CA5, 0xC1A4, + 0x6CA6, 0xC2D9, + 0x6CA7, 0xB2D7, + 0x6CA9, 0xE3ED, + 0x6CAA, 0xBBA6, + 0x6CAB, 0xC4AD, + 0x6CAD, 0xE3F0, + 0x6CAE, 0xBEDA, + 0x6CB1, 0xE3FB, + 0x6CB2, 0xE3F5, + 0x6CB3, 0xBAD3, + 0x6CB8, 0xB7D0, + 0x6CB9, 0xD3CD, + 0x6CBB, 0xD6CE, + 0x6CBC, 0xD5D3, + 0x6CBD, 0xB9C1, + 0x6CBE, 0xD5B4, + 0x6CBF, 0xD1D8, + 0x6CC4, 0xD0B9, + 0x6CC5, 0xC7F6, + 0x6CC9, 0xC8AA, + 0x6CCA, 0xB2B4, + 0x6CCC, 0xC3DA, + 0x6CD0, 0xE3EE, + 0x6CD3, 0xE3FC, + 0x6CD4, 0xE3EF, + 0x6CD5, 0xB7A8, + 0x6CD6, 0xE3F7, + 0x6CD7, 0xE3F4, + 0x6CDB, 0xB7BA, + 0x6CDE, 0xC5A2, + 0x6CE0, 0xE3F6, + 0x6CE1, 0xC5DD, + 0x6CE2, 0xB2A8, + 0x6CE3, 0xC6FC, + 0x6CE5, 0xC4E0, + 0x6CE8, 0xD7A2, + 0x6CEA, 0xC0E1, + 0x6CEB, 0xE3F9, + 0x6CEE, 0xE3FA, + 0x6CEF, 0xE3FD, + 0x6CF0, 0xCCA9, + 0x6CF1, 0xE3F3, + 0x6CF3, 0xD3BE, + 0x6CF5, 0xB1C3, + 0x6CF6, 0xEDB4, + 0x6CF7, 0xE3F1, + 0x6CF8, 0xE3F2, + 0x6CFA, 0xE3F8, + 0x6CFB, 0xD0BA, + 0x6CFC, 0xC6C3, + 0x6CFD, 0xD4F3, + 0x6CFE, 0xE3FE, + 0x6D01, 0xBDE0, + 0x6D04, 0xE4A7, + 0x6D07, 0xE4A6, + 0x6D0B, 0xD1F3, + 0x6D0C, 0xE4A3, + 0x6D0E, 0xE4A9, + 0x6D12, 0xC8F7, + 0x6D17, 0xCFB4, + 0x6D19, 0xE4A8, + 0x6D1A, 0xE4AE, + 0x6D1B, 0xC2E5, + 0x6D1E, 0xB6B4, + 0x6D25, 0xBDF2, + 0x6D27, 0xE4A2, + 0x6D2A, 0xBAE9, + 0x6D2B, 0xE4AA, + 0x6D2E, 0xE4AC, + 0x6D31, 0xB6FD, + 0x6D32, 0xD6DE, + 0x6D33, 0xE4B2, + 0x6D35, 0xE4AD, + 0x6D39, 0xE4A1, + 0x6D3B, 0xBBEE, + 0x6D3C, 0xCDDD, + 0x6D3D, 0xC7A2, + 0x6D3E, 0xC5C9, + 0x6D41, 0xC1F7, + 0x6D43, 0xE4A4, + 0x6D45, 0xC7B3, + 0x6D46, 0xBDAC, + 0x6D47, 0xBDBD, + 0x6D48, 0xE4A5, + 0x6D4A, 0xD7C7, + 0x6D4B, 0xB2E2, + 0x6D4D, 0xE4AB, + 0x6D4E, 0xBCC3, + 0x6D4F, 0xE4AF, + 0x6D51, 0xBBEB, + 0x6D52, 0xE4B0, + 0x6D53, 0xC5A8, + 0x6D54, 0xE4B1, + 0x6D59, 0xD5E3, + 0x6D5A, 0xBFA3, + 0x6D5C, 0xE4BA, + 0x6D5E, 0xE4B7, + 0x6D60, 0xE4BB, + 0x6D63, 0xE4BD, + 0x6D66, 0xC6D6, + 0x6D69, 0xBAC6, + 0x6D6A, 0xC0CB, + 0x6D6E, 0xB8A1, + 0x6D6F, 0xE4B4, + 0x6D74, 0xD4A1, + 0x6D77, 0xBAA3, + 0x6D78, 0xBDFE, + 0x6D7C, 0xE4BC, + 0x6D82, 0xCDBF, + 0x6D85, 0xC4F9, + 0x6D88, 0xCFFB, + 0x6D89, 0xC9E6, + 0x6D8C, 0xD3BF, + 0x6D8E, 0xCFD1, + 0x6D91, 0xE4B3, + 0x6D93, 0xE4B8, + 0x6D94, 0xE4B9, + 0x6D95, 0xCCE9, + 0x6D9B, 0xCCCE, + 0x6D9D, 0xC0D4, + 0x6D9E, 0xE4B5, + 0x6D9F, 0xC1B0, + 0x6DA0, 0xE4B6, + 0x6DA1, 0xCED0, + 0x6DA3, 0xBBC1, + 0x6DA4, 0xB5D3, + 0x6DA6, 0xC8F3, + 0x6DA7, 0xBDA7, + 0x6DA8, 0xD5C7, + 0x6DA9, 0xC9AC, + 0x6DAA, 0xB8A2, + 0x6DAB, 0xE4CA, + 0x6DAE, 0xE4CC, + 0x6DAF, 0xD1C4, + 0x6DB2, 0xD2BA, + 0x6DB5, 0xBAAD, + 0x6DB8, 0xBAD4, + 0x6DBF, 0xE4C3, + 0x6DC0, 0xB5ED, + 0x6DC4, 0xD7CD, + 0x6DC5, 0xE4C0, + 0x6DC6, 0xCFFD, + 0x6DC7, 0xE4BF, + 0x6DCB, 0xC1DC, + 0x6DCC, 0xCCCA, + 0x6DD1, 0xCAE7, + 0x6DD6, 0xC4D7, + 0x6DD8, 0xCCD4, + 0x6DD9, 0xE4C8, + 0x6DDD, 0xE4C7, + 0x6DDE, 0xE4C1, + 0x6DE0, 0xE4C4, + 0x6DE1, 0xB5AD, + 0x6DE4, 0xD3D9, + 0x6DE6, 0xE4C6, + 0x6DEB, 0xD2F9, + 0x6DEC, 0xB4E3, + 0x6DEE, 0xBBB4, + 0x6DF1, 0xC9EE, + 0x6DF3, 0xB4BE, + 0x6DF7, 0xBBEC, + 0x6DF9, 0xD1CD, + 0x6DFB, 0xCCED, + 0x6DFC, 0xEDB5, + 0x6E05, 0xC7E5, + 0x6E0A, 0xD4A8, + 0x6E0C, 0xE4CB, + 0x6E0D, 0xD7D5, + 0x6E0E, 0xE4C2, + 0x6E10, 0xBDA5, + 0x6E11, 0xE4C5, + 0x6E14, 0xD3E6, + 0x6E16, 0xE4C9, + 0x6E17, 0xC9F8, + 0x6E1A, 0xE4BE, + 0x6E1D, 0xD3E5, + 0x6E20, 0xC7FE, + 0x6E21, 0xB6C9, + 0x6E23, 0xD4FC, + 0x6E24, 0xB2B3, + 0x6E25, 0xE4D7, + 0x6E29, 0xCEC2, + 0x6E2B, 0xE4CD, + 0x6E2D, 0xCEBC, + 0x6E2F, 0xB8DB, + 0x6E32, 0xE4D6, + 0x6E34, 0xBFCA, + 0x6E38, 0xD3CE, + 0x6E3A, 0xC3EC, + 0x6E43, 0xC5C8, + 0x6E44, 0xE4D8, + 0x6E4D, 0xCDC4, + 0x6E4E, 0xE4CF, + 0x6E53, 0xE4D4, + 0x6E54, 0xE4D5, + 0x6E56, 0xBAFE, + 0x6E58, 0xCFE6, + 0x6E5B, 0xD5BF, + 0x6E5F, 0xE4D2, + 0x6E6B, 0xE4D0, + 0x6E6E, 0xE4CE, + 0x6E7E, 0xCDE5, + 0x6E7F, 0xCAAA, + 0x6E83, 0xC0A3, + 0x6E85, 0xBDA6, + 0x6E86, 0xE4D3, + 0x6E89, 0xB8C8, + 0x6E8F, 0xE4E7, + 0x6E90, 0xD4B4, + 0x6E98, 0xE4DB, + 0x6E9C, 0xC1EF, + 0x6E9F, 0xE4E9, + 0x6EA2, 0xD2E7, + 0x6EA5, 0xE4DF, + 0x6EA7, 0xE4E0, + 0x6EAA, 0xCFAA, + 0x6EAF, 0xCBDD, + 0x6EB1, 0xE4DA, + 0x6EB2, 0xE4D1, + 0x6EB4, 0xE4E5, + 0x6EB6, 0xC8DC, + 0x6EB7, 0xE4E3, + 0x6EBA, 0xC4E7, + 0x6EBB, 0xE4E2, + 0x6EBD, 0xE4E1, + 0x6EC1, 0xB3FC, + 0x6EC2, 0xE4E8, + 0x6EC7, 0xB5E1, + 0x6ECB, 0xD7CC, + 0x6ECF, 0xE4E6, + 0x6ED1, 0xBBAC, + 0x6ED3, 0xD7D2, + 0x6ED4, 0xCCCF, + 0x6ED5, 0xEBF8, + 0x6ED7, 0xE4E4, + 0x6EDA, 0xB9F6, + 0x6EDE, 0xD6CD, + 0x6EDF, 0xE4D9, + 0x6EE0, 0xE4DC, + 0x6EE1, 0xC2FA, + 0x6EE2, 0xE4DE, + 0x6EE4, 0xC2CB, + 0x6EE5, 0xC0C4, + 0x6EE6, 0xC2D0, + 0x6EE8, 0xB1F5, + 0x6EE9, 0xCCB2, + 0x6EF4, 0xB5CE, + 0x6EF9, 0xE4EF, + 0x6F02, 0xC6AF, + 0x6F06, 0xC6E1, + 0x6F09, 0xE4F5, + 0x6F0F, 0xC2A9, + 0x6F13, 0xC0EC, + 0x6F14, 0xD1DD, + 0x6F15, 0xE4EE, + 0x6F20, 0xC4AE, + 0x6F24, 0xE4ED, + 0x6F29, 0xE4F6, + 0x6F2A, 0xE4F4, + 0x6F2B, 0xC2FE, + 0x6F2D, 0xE4DD, + 0x6F2F, 0xE4F0, + 0x6F31, 0xCAFE, + 0x6F33, 0xD5C4, + 0x6F36, 0xE4F1, + 0x6F3E, 0xD1FA, + 0x6F46, 0xE4EB, + 0x6F47, 0xE4EC, + 0x6F4B, 0xE4F2, + 0x6F4D, 0xCEAB, + 0x6F58, 0xC5CB, + 0x6F5C, 0xC7B1, + 0x6F5E, 0xC2BA, + 0x6F62, 0xE4EA, + 0x6F66, 0xC1CA, + 0x6F6D, 0xCCB6, + 0x6F6E, 0xB3B1, + 0x6F72, 0xE4FB, + 0x6F74, 0xE4F3, + 0x6F78, 0xE4FA, + 0x6F7A, 0xE4FD, + 0x6F7C, 0xE4FC, + 0x6F84, 0xB3CE, + 0x6F88, 0xB3BA, + 0x6F89, 0xE4F7, + 0x6F8C, 0xE4F9, + 0x6F8D, 0xE4F8, + 0x6F8E, 0xC5EC, + 0x6F9C, 0xC0BD, + 0x6FA1, 0xD4E8, + 0x6FA7, 0xE5A2, + 0x6FB3, 0xB0C4, + 0x6FB6, 0xE5A4, + 0x6FB9, 0xE5A3, + 0x6FC0, 0xBCA4, + 0x6FC2, 0xE5A5, + 0x6FC9, 0xE5A1, + 0x6FD1, 0xE4FE, + 0x6FD2, 0xB1F4, + 0x6FDE, 0xE5A8, + 0x6FE0, 0xE5A9, + 0x6FE1, 0xE5A6, + 0x6FEE, 0xE5A7, + 0x6FEF, 0xE5AA, + 0x7011, 0xC6D9, + 0x701A, 0xE5AB, + 0x701B, 0xE5AD, + 0x7023, 0xE5AC, + 0x7035, 0xE5AF, + 0x7039, 0xE5AE, + 0x704C, 0xB9E0, + 0x704F, 0xE5B0, + 0x705E, 0xE5B1, + 0x706B, 0xBBF0, + 0x706C, 0xECE1, + 0x706D, 0xC3F0, + 0x706F, 0xB5C6, + 0x7070, 0xBBD2, + 0x7075, 0xC1E9, + 0x7076, 0xD4EE, + 0x7078, 0xBEC4, + 0x707C, 0xD7C6, + 0x707E, 0xD4D6, + 0x707F, 0xB2D3, + 0x7080, 0xECBE, + 0x7085, 0xEAC1, + 0x7089, 0xC2AF, + 0x708A, 0xB4B6, + 0x708E, 0xD1D7, + 0x7092, 0xB3B4, + 0x7094, 0xC8B2, + 0x7095, 0xBFBB, + 0x7096, 0xECC0, + 0x7099, 0xD6CB, + 0x709C, 0xECBF, + 0x709D, 0xECC1, + 0x70AB, 0xECC5, + 0x70AC, 0xBEE6, + 0x70AD, 0xCCBF, + 0x70AE, 0xC5DA, + 0x70AF, 0xBEBC, + 0x70B1, 0xECC6, + 0x70B3, 0xB1FE, + 0x70B7, 0xECC4, + 0x70B8, 0xD5A8, + 0x70B9, 0xB5E3, + 0x70BB, 0xECC2, + 0x70BC, 0xC1B6, + 0x70BD, 0xB3E3, + 0x70C0, 0xECC3, + 0x70C1, 0xCBB8, + 0x70C2, 0xC0C3, + 0x70C3, 0xCCFE, + 0x70C8, 0xC1D2, + 0x70CA, 0xECC8, + 0x70D8, 0xBAE6, + 0x70D9, 0xC0D3, + 0x70DB, 0xD6F2, + 0x70DF, 0xD1CC, + 0x70E4, 0xBFBE, + 0x70E6, 0xB7B3, + 0x70E7, 0xC9D5, + 0x70E8, 0xECC7, + 0x70E9, 0xBBE2, + 0x70EB, 0xCCCC, + 0x70EC, 0xBDFD, + 0x70ED, 0xC8C8, + 0x70EF, 0xCFA9, + 0x70F7, 0xCDE9, + 0x70F9, 0xC5EB, + 0x70FD, 0xB7E9, + 0x7109, 0xD1C9, + 0x710A, 0xBAB8, + 0x7110, 0xECC9, + 0x7113, 0xECCA, + 0x7115, 0xBBC0, + 0x7116, 0xECCB, + 0x7118, 0xECE2, + 0x7119, 0xB1BA, + 0x711A, 0xB7D9, + 0x7126, 0xBDB9, + 0x712F, 0xECCC, + 0x7130, 0xD1E6, + 0x7131, 0xECCD, + 0x7136, 0xC8BB, + 0x7145, 0xECD1, + 0x714A, 0xECD3, + 0x714C, 0xBBCD, + 0x714E, 0xBCE5, + 0x715C, 0xECCF, + 0x715E, 0xC9B7, + 0x7164, 0xC3BA, + 0x7166, 0xECE3, + 0x7167, 0xD5D5, + 0x7168, 0xECD0, + 0x716E, 0xD6F3, + 0x7172, 0xECD2, + 0x7173, 0xECCE, + 0x7178, 0xECD4, + 0x717A, 0xECD5, + 0x717D, 0xC9BF, + 0x7184, 0xCFA8, + 0x718A, 0xD0DC, + 0x718F, 0xD1AC, + 0x7194, 0xC8DB, + 0x7198, 0xECD6, + 0x7199, 0xCEF5, + 0x719F, 0xCAEC, + 0x71A0, 0xECDA, + 0x71A8, 0xECD9, + 0x71AC, 0xB0BE, + 0x71B3, 0xECD7, + 0x71B5, 0xECD8, + 0x71B9, 0xECE4, + 0x71C3, 0xC8BC, + 0x71CE, 0xC1C7, + 0x71D4, 0xECDC, + 0x71D5, 0xD1E0, + 0x71E0, 0xECDB, + 0x71E5, 0xD4EF, + 0x71E7, 0xECDD, + 0x71EE, 0xDBC6, + 0x71F9, 0xECDE, + 0x7206, 0xB1AC, + 0x721D, 0xECDF, + 0x7228, 0xECE0, + 0x722A, 0xD7A6, + 0x722C, 0xC5C0, + 0x7230, 0xEBBC, + 0x7231, 0xB0AE, + 0x7235, 0xBEF4, + 0x7236, 0xB8B8, + 0x7237, 0xD2AF, + 0x7238, 0xB0D6, + 0x7239, 0xB5F9, + 0x723B, 0xD8B3, + 0x723D, 0xCBAC, + 0x723F, 0xE3DD, + 0x7247, 0xC6AC, + 0x7248, 0xB0E6, + 0x724C, 0xC5C6, + 0x724D, 0xEBB9, + 0x7252, 0xEBBA, + 0x7256, 0xEBBB, + 0x7259, 0xD1C0, + 0x725B, 0xC5A3, + 0x725D, 0xEAF2, + 0x725F, 0xC4B2, + 0x7261, 0xC4B5, + 0x7262, 0xC0CE, + 0x7266, 0xEAF3, + 0x7267, 0xC4C1, + 0x7269, 0xCEEF, + 0x726E, 0xEAF0, + 0x726F, 0xEAF4, + 0x7272, 0xC9FC, + 0x7275, 0xC7A3, + 0x7279, 0xCCD8, + 0x727A, 0xCEFE, + 0x727E, 0xEAF5, + 0x727F, 0xEAF6, + 0x7280, 0xCFAC, + 0x7281, 0xC0E7, + 0x7284, 0xEAF7, + 0x728A, 0xB6BF, + 0x728B, 0xEAF8, + 0x728D, 0xEAF9, + 0x728F, 0xEAFA, + 0x7292, 0xEAFB, + 0x729F, 0xEAF1, + 0x72AC, 0xC8AE, + 0x72AD, 0xE1EB, + 0x72AF, 0xB7B8, + 0x72B0, 0xE1EC, + 0x72B4, 0xE1ED, + 0x72B6, 0xD7B4, + 0x72B7, 0xE1EE, + 0x72B8, 0xE1EF, + 0x72B9, 0xD3CC, + 0x72C1, 0xE1F1, + 0x72C2, 0xBFF1, + 0x72C3, 0xE1F0, + 0x72C4, 0xB5D2, + 0x72C8, 0xB1B7, + 0x72CD, 0xE1F3, + 0x72CE, 0xE1F2, + 0x72D0, 0xBAFC, + 0x72D2, 0xE1F4, + 0x72D7, 0xB9B7, + 0x72D9, 0xBED1, + 0x72DE, 0xC4FC, + 0x72E0, 0xBADD, + 0x72E1, 0xBDC6, + 0x72E8, 0xE1F5, + 0x72E9, 0xE1F7, + 0x72EC, 0xB6C0, + 0x72ED, 0xCFC1, + 0x72EE, 0xCAA8, + 0x72EF, 0xE1F6, + 0x72F0, 0xD5F8, + 0x72F1, 0xD3FC, + 0x72F2, 0xE1F8, + 0x72F3, 0xE1FC, + 0x72F4, 0xE1F9, + 0x72F7, 0xE1FA, + 0x72F8, 0xC0EA, + 0x72FA, 0xE1FE, + 0x72FB, 0xE2A1, + 0x72FC, 0xC0C7, + 0x7301, 0xE1FB, + 0x7303, 0xE1FD, + 0x730A, 0xE2A5, + 0x730E, 0xC1D4, + 0x7313, 0xE2A3, + 0x7315, 0xE2A8, + 0x7316, 0xB2FE, + 0x7317, 0xE2A2, + 0x731B, 0xC3CD, + 0x731C, 0xB2C2, + 0x731D, 0xE2A7, + 0x731E, 0xE2A6, + 0x7321, 0xE2A4, + 0x7322, 0xE2A9, + 0x7325, 0xE2AB, + 0x7329, 0xD0C9, + 0x732A, 0xD6ED, + 0x732B, 0xC3A8, + 0x732C, 0xE2AC, + 0x732E, 0xCFD7, + 0x7331, 0xE2AE, + 0x7334, 0xBAEF, + 0x7337, 0xE9E0, + 0x7338, 0xE2AD, + 0x7339, 0xE2AA, + 0x733E, 0xBBAB, + 0x733F, 0xD4B3, + 0x734D, 0xE2B0, + 0x7350, 0xE2AF, + 0x7352, 0xE9E1, + 0x7357, 0xE2B1, + 0x7360, 0xE2B2, + 0x736C, 0xE2B3, + 0x736D, 0xCCA1, + 0x736F, 0xE2B4, + 0x737E, 0xE2B5, + 0x7384, 0xD0FE, + 0x7387, 0xC2CA, + 0x7389, 0xD3F1, + 0x738B, 0xCDF5, + 0x738E, 0xE7E0, + 0x7391, 0xE7E1, + 0x7396, 0xBEC1, + 0x739B, 0xC2EA, + 0x739F, 0xE7E4, + 0x73A2, 0xE7E3, + 0x73A9, 0xCDE6, + 0x73AB, 0xC3B5, + 0x73AE, 0xE7E2, + 0x73AF, 0xBBB7, + 0x73B0, 0xCFD6, + 0x73B2, 0xC1E1, + 0x73B3, 0xE7E9, + 0x73B7, 0xE7E8, + 0x73BA, 0xE7F4, + 0x73BB, 0xB2A3, + 0x73C0, 0xE7EA, + 0x73C2, 0xE7E6, + 0x73C8, 0xE7EC, + 0x73C9, 0xE7EB, + 0x73CA, 0xC9BA, + 0x73CD, 0xD5E4, + 0x73CF, 0xE7E5, + 0x73D0, 0xB7A9, + 0x73D1, 0xE7E7, + 0x73D9, 0xE7EE, + 0x73DE, 0xE7F3, + 0x73E0, 0xD6E9, + 0x73E5, 0xE7ED, + 0x73E7, 0xE7F2, + 0x73E9, 0xE7F1, + 0x73ED, 0xB0E0, + 0x73F2, 0xE7F5, + 0x7403, 0xC7F2, + 0x7405, 0xC0C5, + 0x7406, 0xC0ED, + 0x7409, 0xC1F0, + 0x740A, 0xE7F0, + 0x740F, 0xE7F6, + 0x7410, 0xCBF6, + 0x741A, 0xE8A2, + 0x741B, 0xE8A1, + 0x7422, 0xD7C1, + 0x7425, 0xE7FA, + 0x7426, 0xE7F9, + 0x7428, 0xE7FB, + 0x742A, 0xE7F7, + 0x742C, 0xE7FE, + 0x742E, 0xE7FD, + 0x7430, 0xE7FC, + 0x7433, 0xC1D5, + 0x7434, 0xC7D9, + 0x7435, 0xC5FD, + 0x7436, 0xC5C3, + 0x743C, 0xC7ED, + 0x7441, 0xE8A3, + 0x7455, 0xE8A6, + 0x7457, 0xE8A5, + 0x7459, 0xE8A7, + 0x745A, 0xBAF7, + 0x745B, 0xE7F8, + 0x745C, 0xE8A4, + 0x745E, 0xC8F0, + 0x745F, 0xC9AA, + 0x746D, 0xE8A9, + 0x7470, 0xB9E5, + 0x7476, 0xD1FE, + 0x7477, 0xE8A8, + 0x747E, 0xE8AA, + 0x7480, 0xE8AD, + 0x7481, 0xE8AE, + 0x7483, 0xC1A7, + 0x7487, 0xE8AF, + 0x748B, 0xE8B0, + 0x748E, 0xE8AC, + 0x7490, 0xE8B4, + 0x749C, 0xE8AB, + 0x749E, 0xE8B1, + 0x74A7, 0xE8B5, + 0x74A8, 0xE8B2, + 0x74A9, 0xE8B3, + 0x74BA, 0xE8B7, + 0x74D2, 0xE8B6, + 0x74DC, 0xB9CF, + 0x74DE, 0xF0AC, + 0x74E0, 0xF0AD, + 0x74E2, 0xC6B0, + 0x74E3, 0xB0EA, + 0x74E4, 0xC8BF, + 0x74E6, 0xCDDF, + 0x74EE, 0xCECD, + 0x74EF, 0xEAB1, + 0x74F4, 0xEAB2, + 0x74F6, 0xC6BF, + 0x74F7, 0xB4C9, + 0x74FF, 0xEAB3, + 0x7504, 0xD5E7, + 0x750D, 0xDDF9, + 0x750F, 0xEAB4, + 0x7511, 0xEAB5, + 0x7513, 0xEAB6, + 0x7518, 0xB8CA, + 0x7519, 0xDFB0, + 0x751A, 0xC9F5, + 0x751C, 0xCCF0, + 0x751F, 0xC9FA, + 0x7525, 0xC9FB, + 0x7528, 0xD3C3, + 0x7529, 0xCBA6, + 0x752B, 0xB8A6, + 0x752C, 0xF0AE, + 0x752D, 0xB1C2, + 0x752F, 0xE5B8, + 0x7530, 0xCCEF, + 0x7531, 0xD3C9, + 0x7532, 0xBCD7, + 0x7533, 0xC9EA, + 0x7535, 0xB5E7, + 0x7537, 0xC4D0, + 0x7538, 0xB5E9, + 0x753A, 0xEEAE, + 0x753B, 0xBBAD, + 0x753E, 0xE7DE, + 0x7540, 0xEEAF, + 0x7545, 0xB3A9, + 0x7548, 0xEEB2, + 0x754B, 0xEEB1, + 0x754C, 0xBDE7, + 0x754E, 0xEEB0, + 0x754F, 0xCEB7, + 0x7554, 0xC5CF, + 0x7559, 0xC1F4, + 0x755A, 0xDBCE, + 0x755B, 0xEEB3, + 0x755C, 0xD0F3, + 0x7565, 0xC2D4, + 0x7566, 0xC6E8, + 0x756A, 0xB7AC, + 0x7572, 0xEEB4, + 0x7574, 0xB3EB, + 0x7578, 0xBBFB, + 0x7579, 0xEEB5, + 0x757F, 0xE7DC, + 0x7583, 0xEEB6, + 0x7586, 0xBDAE, + 0x758B, 0xF1E2, + 0x758F, 0xCAE8, + 0x7591, 0xD2C9, + 0x7592, 0xF0DA, + 0x7594, 0xF0DB, + 0x7596, 0xF0DC, + 0x7597, 0xC1C6, + 0x7599, 0xB8ED, + 0x759A, 0xBECE, + 0x759D, 0xF0DE, + 0x759F, 0xC5B1, + 0x75A0, 0xF0DD, + 0x75A1, 0xD1F1, + 0x75A3, 0xF0E0, + 0x75A4, 0xB0CC, + 0x75A5, 0xBDEA, + 0x75AB, 0xD2DF, + 0x75AC, 0xF0DF, + 0x75AE, 0xB4AF, + 0x75AF, 0xB7E8, + 0x75B0, 0xF0E6, + 0x75B1, 0xF0E5, + 0x75B2, 0xC6A3, + 0x75B3, 0xF0E1, + 0x75B4, 0xF0E2, + 0x75B5, 0xB4C3, + 0x75B8, 0xF0E3, + 0x75B9, 0xD5EE, + 0x75BC, 0xCCDB, + 0x75BD, 0xBED2, + 0x75BE, 0xBCB2, + 0x75C2, 0xF0E8, + 0x75C3, 0xF0E7, + 0x75C4, 0xF0E4, + 0x75C5, 0xB2A1, + 0x75C7, 0xD6A2, + 0x75C8, 0xD3B8, + 0x75C9, 0xBEB7, + 0x75CA, 0xC8AC, + 0x75CD, 0xF0EA, + 0x75D2, 0xD1F7, + 0x75D4, 0xD6CC, + 0x75D5, 0xBADB, + 0x75D6, 0xF0E9, + 0x75D8, 0xB6BB, + 0x75DB, 0xCDB4, + 0x75DE, 0xC6A6, + 0x75E2, 0xC1A1, + 0x75E3, 0xF0EB, + 0x75E4, 0xF0EE, + 0x75E6, 0xF0ED, + 0x75E7, 0xF0F0, + 0x75E8, 0xF0EC, + 0x75EA, 0xBBBE, + 0x75EB, 0xF0EF, + 0x75F0, 0xCCB5, + 0x75F1, 0xF0F2, + 0x75F4, 0xB3D5, + 0x75F9, 0xB1D4, + 0x75FC, 0xF0F3, + 0x75FF, 0xF0F4, + 0x7600, 0xF0F6, + 0x7601, 0xB4E1, + 0x7603, 0xF0F1, + 0x7605, 0xF0F7, + 0x760A, 0xF0FA, + 0x760C, 0xF0F8, + 0x7610, 0xF0F5, + 0x7615, 0xF0FD, + 0x7617, 0xF0F9, + 0x7618, 0xF0FC, + 0x7619, 0xF0FE, + 0x761B, 0xF1A1, + 0x761F, 0xCEC1, + 0x7620, 0xF1A4, + 0x7622, 0xF1A3, + 0x7624, 0xC1F6, + 0x7625, 0xF0FB, + 0x7626, 0xCADD, + 0x7629, 0xB4F1, + 0x762A, 0xB1F1, + 0x762B, 0xCCB1, + 0x762D, 0xF1A6, + 0x7630, 0xF1A7, + 0x7633, 0xF1AC, + 0x7634, 0xD5CE, + 0x7635, 0xF1A9, + 0x7638, 0xC8B3, + 0x763C, 0xF1A2, + 0x763E, 0xF1AB, + 0x763F, 0xF1A8, + 0x7640, 0xF1A5, + 0x7643, 0xF1AA, + 0x764C, 0xB0A9, + 0x764D, 0xF1AD, + 0x7654, 0xF1AF, + 0x7656, 0xF1B1, + 0x765C, 0xF1B0, + 0x765E, 0xF1AE, + 0x7663, 0xD1A2, + 0x766B, 0xF1B2, + 0x766F, 0xF1B3, + 0x7678, 0xB9EF, + 0x767B, 0xB5C7, + 0x767D, 0xB0D7, + 0x767E, 0xB0D9, + 0x7682, 0xD4ED, + 0x7684, 0xB5C4, + 0x7686, 0xBDD4, + 0x7687, 0xBBCA, + 0x7688, 0xF0A7, + 0x768B, 0xB8DE, + 0x768E, 0xF0A8, + 0x7691, 0xB0A8, + 0x7693, 0xF0A9, + 0x7696, 0xCDEE, + 0x7699, 0xF0AA, + 0x76A4, 0xF0AB, + 0x76AE, 0xC6A4, + 0x76B1, 0xD6E5, + 0x76B2, 0xF1E4, + 0x76B4, 0xF1E5, + 0x76BF, 0xC3F3, + 0x76C2, 0xD3DB, + 0x76C5, 0xD6D1, + 0x76C6, 0xC5E8, + 0x76C8, 0xD3AF, + 0x76CA, 0xD2E6, + 0x76CD, 0xEEC1, + 0x76CE, 0xB0BB, + 0x76CF, 0xD5B5, + 0x76D0, 0xD1CE, + 0x76D1, 0xBCE0, + 0x76D2, 0xBAD0, + 0x76D4, 0xBFF8, + 0x76D6, 0xB8C7, + 0x76D7, 0xB5C1, + 0x76D8, 0xC5CC, + 0x76DB, 0xCAA2, + 0x76DF, 0xC3CB, + 0x76E5, 0xEEC2, + 0x76EE, 0xC4BF, + 0x76EF, 0xB6A2, + 0x76F1, 0xEDEC, + 0x76F2, 0xC3A4, + 0x76F4, 0xD6B1, + 0x76F8, 0xCFE0, + 0x76F9, 0xEDEF, + 0x76FC, 0xC5CE, + 0x76FE, 0xB6DC, + 0x7701, 0xCAA1, + 0x7704, 0xEDED, + 0x7707, 0xEDF0, + 0x7708, 0xEDF1, + 0x7709, 0xC3BC, + 0x770B, 0xBFB4, + 0x770D, 0xEDEE, + 0x7719, 0xEDF4, + 0x771A, 0xEDF2, + 0x771F, 0xD5E6, + 0x7720, 0xC3DF, + 0x7722, 0xEDF3, + 0x7726, 0xEDF6, + 0x7728, 0xD5A3, + 0x7729, 0xD1A3, + 0x772D, 0xEDF5, + 0x772F, 0xC3D0, + 0x7735, 0xEDF7, + 0x7736, 0xBFF4, + 0x7737, 0xBEEC, + 0x7738, 0xEDF8, + 0x773A, 0xCCF7, + 0x773C, 0xD1DB, + 0x7740, 0xD7C5, + 0x7741, 0xD5F6, + 0x7743, 0xEDFC, + 0x7747, 0xEDFB, + 0x7750, 0xEDF9, + 0x7751, 0xEDFA, + 0x775A, 0xEDFD, + 0x775B, 0xBEA6, + 0x7761, 0xCBAF, + 0x7762, 0xEEA1, + 0x7763, 0xB6BD, + 0x7765, 0xEEA2, + 0x7766, 0xC4C0, + 0x7768, 0xEDFE, + 0x776B, 0xBDDE, + 0x776C, 0xB2C7, + 0x7779, 0xB6C3, + 0x777D, 0xEEA5, + 0x777E, 0xD8BA, + 0x777F, 0xEEA3, + 0x7780, 0xEEA6, + 0x7784, 0xC3E9, + 0x7785, 0xB3F2, + 0x778C, 0xEEA7, + 0x778D, 0xEEA4, + 0x778E, 0xCFB9, + 0x7791, 0xEEA8, + 0x7792, 0xC2F7, + 0x779F, 0xEEA9, + 0x77A0, 0xEEAA, + 0x77A2, 0xDEAB, + 0x77A5, 0xC6B3, + 0x77A7, 0xC7C6, + 0x77A9, 0xD6F5, + 0x77AA, 0xB5C9, + 0x77AC, 0xCBB2, + 0x77B0, 0xEEAB, + 0x77B3, 0xCDAB, + 0x77B5, 0xEEAC, + 0x77BB, 0xD5B0, + 0x77BD, 0xEEAD, + 0x77BF, 0xF6C4, + 0x77CD, 0xDBC7, + 0x77D7, 0xB4A3, + 0x77DB, 0xC3AC, + 0x77DC, 0xF1E6, + 0x77E2, 0xCAB8, + 0x77E3, 0xD2D3, + 0x77E5, 0xD6AA, + 0x77E7, 0xEFF2, + 0x77E9, 0xBED8, + 0x77EB, 0xBDC3, + 0x77EC, 0xEFF3, + 0x77ED, 0xB6CC, + 0x77EE, 0xB0AB, + 0x77F3, 0xCAAF, + 0x77F6, 0xEDB6, + 0x77F8, 0xEDB7, + 0x77FD, 0xCEF9, + 0x77FE, 0xB7AF, + 0x77FF, 0xBFF3, + 0x7800, 0xEDB8, + 0x7801, 0xC2EB, + 0x7802, 0xC9B0, + 0x7809, 0xEDB9, + 0x780C, 0xC6F6, + 0x780D, 0xBFB3, + 0x7811, 0xEDBC, + 0x7812, 0xC5F8, + 0x7814, 0xD1D0, + 0x7816, 0xD7A9, + 0x7817, 0xEDBA, + 0x7818, 0xEDBB, + 0x781A, 0xD1E2, + 0x781C, 0xEDBF, + 0x781D, 0xEDC0, + 0x781F, 0xEDC4, + 0x7823, 0xEDC8, + 0x7825, 0xEDC6, + 0x7826, 0xEDCE, + 0x7827, 0xD5E8, + 0x7829, 0xEDC9, + 0x782C, 0xEDC7, + 0x782D, 0xEDBE, + 0x7830, 0xC5E9, + 0x7834, 0xC6C6, + 0x7837, 0xC9E9, + 0x7838, 0xD4D2, + 0x7839, 0xEDC1, + 0x783A, 0xEDC2, + 0x783B, 0xEDC3, + 0x783C, 0xEDC5, + 0x783E, 0xC0F9, + 0x7840, 0xB4A1, + 0x7845, 0xB9E8, + 0x7847, 0xEDD0, + 0x784C, 0xEDD1, + 0x784E, 0xEDCA, + 0x7850, 0xEDCF, + 0x7852, 0xCEF8, + 0x7855, 0xCBB6, + 0x7856, 0xEDCC, + 0x7857, 0xEDCD, + 0x785D, 0xCFF5, + 0x786A, 0xEDD2, + 0x786B, 0xC1F2, + 0x786C, 0xD3B2, + 0x786D, 0xEDCB, + 0x786E, 0xC8B7, + 0x7877, 0xBCEF, + 0x787C, 0xC5F0, + 0x7887, 0xEDD6, + 0x7889, 0xB5EF, + 0x788C, 0xC2B5, + 0x788D, 0xB0AD, + 0x788E, 0xCBE9, + 0x7891, 0xB1AE, + 0x7893, 0xEDD4, + 0x7897, 0xCDEB, + 0x7898, 0xB5E2, + 0x789A, 0xEDD5, + 0x789B, 0xEDD3, + 0x789C, 0xEDD7, + 0x789F, 0xB5FA, + 0x78A1, 0xEDD8, + 0x78A3, 0xEDD9, + 0x78A5, 0xEDDC, + 0x78A7, 0xB1CC, + 0x78B0, 0xC5F6, + 0x78B1, 0xBCEE, + 0x78B2, 0xEDDA, + 0x78B3, 0xCCBC, + 0x78B4, 0xB2EA, + 0x78B9, 0xEDDB, + 0x78BE, 0xC4EB, + 0x78C1, 0xB4C5, + 0x78C5, 0xB0F5, + 0x78C9, 0xEDDF, + 0x78CA, 0xC0DA, + 0x78CB, 0xB4E8, + 0x78D0, 0xC5CD, + 0x78D4, 0xEDDD, + 0x78D5, 0xBFC4, + 0x78D9, 0xEDDE, + 0x78E8, 0xC4A5, + 0x78EC, 0xEDE0, + 0x78F2, 0xEDE1, + 0x78F4, 0xEDE3, + 0x78F7, 0xC1D7, + 0x78FA, 0xBBC7, + 0x7901, 0xBDB8, + 0x7905, 0xEDE2, + 0x7913, 0xEDE4, + 0x791E, 0xEDE6, + 0x7924, 0xEDE5, + 0x7934, 0xEDE7, + 0x793A, 0xCABE, + 0x793B, 0xECEA, + 0x793C, 0xC0F1, + 0x793E, 0xC9E7, + 0x7940, 0xECEB, + 0x7941, 0xC6EE, + 0x7946, 0xECEC, + 0x7948, 0xC6ED, + 0x7949, 0xECED, + 0x7953, 0xECF0, + 0x7956, 0xD7E6, + 0x7957, 0xECF3, + 0x795A, 0xECF1, + 0x795B, 0xECEE, + 0x795C, 0xECEF, + 0x795D, 0xD7A3, + 0x795E, 0xC9F1, + 0x795F, 0xCBEE, + 0x7960, 0xECF4, + 0x7962, 0xECF2, + 0x7965, 0xCFE9, + 0x7967, 0xECF6, + 0x7968, 0xC6B1, + 0x796D, 0xBCC0, + 0x796F, 0xECF5, + 0x7977, 0xB5BB, + 0x7978, 0xBBF6, + 0x797A, 0xECF7, + 0x7980, 0xD9F7, + 0x7981, 0xBDFB, + 0x7984, 0xC2BB, + 0x7985, 0xECF8, + 0x798A, 0xECF9, + 0x798F, 0xB8A3, + 0x799A, 0xECFA, + 0x79A7, 0xECFB, + 0x79B3, 0xECFC, + 0x79B9, 0xD3ED, + 0x79BA, 0xD8AE, + 0x79BB, 0xC0EB, + 0x79BD, 0xC7DD, + 0x79BE, 0xBACC, + 0x79C0, 0xD0E3, + 0x79C1, 0xCBBD, + 0x79C3, 0xCDBA, + 0x79C6, 0xB8D1, + 0x79C9, 0xB1FC, + 0x79CB, 0xC7EF, + 0x79CD, 0xD6D6, + 0x79D1, 0xBFC6, + 0x79D2, 0xC3EB, + 0x79D5, 0xEFF5, + 0x79D8, 0xC3D8, + 0x79DF, 0xD7E2, + 0x79E3, 0xEFF7, + 0x79E4, 0xB3D3, + 0x79E6, 0xC7D8, + 0x79E7, 0xD1ED, + 0x79E9, 0xD6C8, + 0x79EB, 0xEFF8, + 0x79ED, 0xEFF6, + 0x79EF, 0xBBFD, + 0x79F0, 0xB3C6, + 0x79F8, 0xBDD5, + 0x79FB, 0xD2C6, + 0x79FD, 0xBBE0, + 0x7A00, 0xCFA1, + 0x7A02, 0xEFFC, + 0x7A03, 0xEFFB, + 0x7A06, 0xEFF9, + 0x7A0B, 0xB3CC, + 0x7A0D, 0xC9D4, + 0x7A0E, 0xCBB0, + 0x7A14, 0xEFFE, + 0x7A17, 0xB0DE, + 0x7A1A, 0xD6C9, + 0x7A1E, 0xEFFD, + 0x7A20, 0xB3ED, + 0x7A23, 0xF6D5, + 0x7A33, 0xCEC8, + 0x7A37, 0xF0A2, + 0x7A39, 0xF0A1, + 0x7A3B, 0xB5BE, + 0x7A3C, 0xBCDA, + 0x7A3D, 0xBBFC, + 0x7A3F, 0xB8E5, + 0x7A46, 0xC4C2, + 0x7A51, 0xF0A3, + 0x7A57, 0xCBEB, + 0x7A70, 0xF0A6, + 0x7A74, 0xD1A8, + 0x7A76, 0xBEBF, + 0x7A77, 0xC7EE, + 0x7A78, 0xF1B6, + 0x7A79, 0xF1B7, + 0x7A7A, 0xBFD5, + 0x7A7F, 0xB4A9, + 0x7A80, 0xF1B8, + 0x7A81, 0xCDBB, + 0x7A83, 0xC7D4, + 0x7A84, 0xD5AD, + 0x7A86, 0xF1B9, + 0x7A88, 0xF1BA, + 0x7A8D, 0xC7CF, + 0x7A91, 0xD2A4, + 0x7A92, 0xD6CF, + 0x7A95, 0xF1BB, + 0x7A96, 0xBDD1, + 0x7A97, 0xB4B0, + 0x7A98, 0xBEBD, + 0x7A9C, 0xB4DC, + 0x7A9D, 0xCED1, + 0x7A9F, 0xBFDF, + 0x7AA0, 0xF1BD, + 0x7AA5, 0xBFFA, + 0x7AA6, 0xF1BC, + 0x7AA8, 0xF1BF, + 0x7AAC, 0xF1BE, + 0x7AAD, 0xF1C0, + 0x7AB3, 0xF1C1, + 0x7ABF, 0xC1FE, + 0x7ACB, 0xC1A2, + 0x7AD6, 0xCAFA, + 0x7AD9, 0xD5BE, + 0x7ADE, 0xBEBA, + 0x7ADF, 0xBEB9, + 0x7AE0, 0xD5C2, + 0x7AE3, 0xBFA2, + 0x7AE5, 0xCDAF, + 0x7AE6, 0xF1B5, + 0x7AED, 0xBDDF, + 0x7AEF, 0xB6CB, + 0x7AF9, 0xD6F1, + 0x7AFA, 0xF3C3, + 0x7AFD, 0xF3C4, + 0x7AFF, 0xB8CD, + 0x7B03, 0xF3C6, + 0x7B04, 0xF3C7, + 0x7B06, 0xB0CA, + 0x7B08, 0xF3C5, + 0x7B0A, 0xF3C9, + 0x7B0B, 0xCBF1, + 0x7B0F, 0xF3CB, + 0x7B11, 0xD0A6, + 0x7B14, 0xB1CA, + 0x7B15, 0xF3C8, + 0x7B19, 0xF3CF, + 0x7B1B, 0xB5D1, + 0x7B1E, 0xF3D7, + 0x7B20, 0xF3D2, + 0x7B24, 0xF3D4, + 0x7B25, 0xF3D3, + 0x7B26, 0xB7FB, + 0x7B28, 0xB1BF, + 0x7B2A, 0xF3CE, + 0x7B2B, 0xF3CA, + 0x7B2C, 0xB5DA, + 0x7B2E, 0xF3D0, + 0x7B31, 0xF3D1, + 0x7B33, 0xF3D5, + 0x7B38, 0xF3CD, + 0x7B3A, 0xBCE3, + 0x7B3C, 0xC1FD, + 0x7B3E, 0xF3D6, + 0x7B45, 0xF3DA, + 0x7B47, 0xF3CC, + 0x7B49, 0xB5C8, + 0x7B4B, 0xBDEE, + 0x7B4C, 0xF3DC, + 0x7B4F, 0xB7A4, + 0x7B50, 0xBFF0, + 0x7B51, 0xD6FE, + 0x7B52, 0xCDB2, + 0x7B54, 0xB4F0, + 0x7B56, 0xB2DF, + 0x7B58, 0xF3D8, + 0x7B5A, 0xF3D9, + 0x7B5B, 0xC9B8, + 0x7B5D, 0xF3DD, + 0x7B60, 0xF3DE, + 0x7B62, 0xF3E1, + 0x7B6E, 0xF3DF, + 0x7B71, 0xF3E3, + 0x7B72, 0xF3E2, + 0x7B75, 0xF3DB, + 0x7B77, 0xBFEA, + 0x7B79, 0xB3EF, + 0x7B7B, 0xF3E0, + 0x7B7E, 0xC7A9, + 0x7B80, 0xBCF2, + 0x7B85, 0xF3EB, + 0x7B8D, 0xB9BF, + 0x7B90, 0xF3E4, + 0x7B94, 0xB2AD, + 0x7B95, 0xBBFE, + 0x7B97, 0xCBE3, + 0x7B9C, 0xF3ED, + 0x7B9D, 0xF3E9, + 0x7BA1, 0xB9DC, + 0x7BA2, 0xF3EE, + 0x7BA6, 0xF3E5, + 0x7BA7, 0xF3E6, + 0x7BA8, 0xF3EA, + 0x7BA9, 0xC2E1, + 0x7BAA, 0xF3EC, + 0x7BAB, 0xF3EF, + 0x7BAC, 0xF3E8, + 0x7BAD, 0xBCFD, + 0x7BB1, 0xCFE4, + 0x7BB4, 0xF3F0, + 0x7BB8, 0xF3E7, + 0x7BC1, 0xF3F2, + 0x7BC6, 0xD7AD, + 0x7BC7, 0xC6AA, + 0x7BCC, 0xF3F3, + 0x7BD1, 0xF3F1, + 0x7BD3, 0xC2A8, + 0x7BD9, 0xB8DD, + 0x7BDA, 0xF3F5, + 0x7BDD, 0xF3F4, + 0x7BE1, 0xB4DB, + 0x7BE5, 0xF3F6, + 0x7BE6, 0xF3F7, + 0x7BEA, 0xF3F8, + 0x7BEE, 0xC0BA, + 0x7BF1, 0xC0E9, + 0x7BF7, 0xC5F1, + 0x7BFC, 0xF3FB, + 0x7BFE, 0xF3FA, + 0x7C07, 0xB4D8, + 0x7C0B, 0xF3FE, + 0x7C0C, 0xF3F9, + 0x7C0F, 0xF3FC, + 0x7C16, 0xF3FD, + 0x7C1F, 0xF4A1, + 0x7C26, 0xF4A3, + 0x7C27, 0xBBC9, + 0x7C2A, 0xF4A2, + 0x7C38, 0xF4A4, + 0x7C3F, 0xB2BE, + 0x7C40, 0xF4A6, + 0x7C41, 0xF4A5, + 0x7C4D, 0xBCAE, + 0x7C73, 0xC3D7, + 0x7C74, 0xD9E1, + 0x7C7B, 0xC0E0, + 0x7C7C, 0xF4CC, + 0x7C7D, 0xD7D1, + 0x7C89, 0xB7DB, + 0x7C91, 0xF4CE, + 0x7C92, 0xC1A3, + 0x7C95, 0xC6C9, + 0x7C97, 0xB4D6, + 0x7C98, 0xD5B3, + 0x7C9C, 0xF4D0, + 0x7C9D, 0xF4CF, + 0x7C9E, 0xF4D1, + 0x7C9F, 0xCBDA, + 0x7CA2, 0xF4D2, + 0x7CA4, 0xD4C1, + 0x7CA5, 0xD6E0, + 0x7CAA, 0xB7E0, + 0x7CAE, 0xC1B8, + 0x7CB1, 0xC1BB, + 0x7CB2, 0xF4D3, + 0x7CB3, 0xBEAC, + 0x7CB9, 0xB4E2, + 0x7CBC, 0xF4D4, + 0x7CBD, 0xF4D5, + 0x7CBE, 0xBEAB, + 0x7CC1, 0xF4D6, + 0x7CC5, 0xF4DB, + 0x7CC7, 0xF4D7, + 0x7CC8, 0xF4DA, + 0x7CCA, 0xBAFD, + 0x7CCC, 0xF4D8, + 0x7CCD, 0xF4D9, + 0x7CD5, 0xB8E2, + 0x7CD6, 0xCCC7, + 0x7CD7, 0xF4DC, + 0x7CD9, 0xB2DA, + 0x7CDC, 0xC3D3, + 0x7CDF, 0xD4E3, + 0x7CE0, 0xBFB7, + 0x7CE8, 0xF4DD, + 0x7CEF, 0xC5B4, + 0x7CF8, 0xF4E9, + 0x7CFB, 0xCFB5, + 0x7D0A, 0xCEC9, + 0x7D20, 0xCBD8, + 0x7D22, 0xCBF7, + 0x7D27, 0xBDF4, + 0x7D2B, 0xD7CF, + 0x7D2F, 0xC0DB, + 0x7D6E, 0xD0F5, + 0x7D77, 0xF4EA, + 0x7DA6, 0xF4EB, + 0x7DAE, 0xF4EC, + 0x7E3B, 0xF7E3, + 0x7E41, 0xB7B1, + 0x7E47, 0xF4ED, + 0x7E82, 0xD7EB, + 0x7E9B, 0xF4EE, + 0x7E9F, 0xE6F9, + 0x7EA0, 0xBEC0, + 0x7EA1, 0xE6FA, + 0x7EA2, 0xBAEC, + 0x7EA3, 0xE6FB, + 0x7EA4, 0xCFCB, + 0x7EA5, 0xE6FC, + 0x7EA6, 0xD4BC, + 0x7EA7, 0xBCB6, + 0x7EA8, 0xE6FD, + 0x7EA9, 0xE6FE, + 0x7EAA, 0xBCCD, + 0x7EAB, 0xC8D2, + 0x7EAC, 0xCEB3, + 0x7EAD, 0xE7A1, + 0x7EAF, 0xB4BF, + 0x7EB0, 0xE7A2, + 0x7EB1, 0xC9B4, + 0x7EB2, 0xB8D9, + 0x7EB3, 0xC4C9, + 0x7EB5, 0xD7DD, + 0x7EB6, 0xC2DA, + 0x7EB7, 0xB7D7, + 0x7EB8, 0xD6BD, + 0x7EB9, 0xCEC6, + 0x7EBA, 0xB7C4, + 0x7EBD, 0xC5A6, + 0x7EBE, 0xE7A3, + 0x7EBF, 0xCFDF, + 0x7EC0, 0xE7A4, + 0x7EC1, 0xE7A5, + 0x7EC2, 0xE7A6, + 0x7EC3, 0xC1B7, + 0x7EC4, 0xD7E9, + 0x7EC5, 0xC9F0, + 0x7EC6, 0xCFB8, + 0x7EC7, 0xD6AF, + 0x7EC8, 0xD6D5, + 0x7EC9, 0xE7A7, + 0x7ECA, 0xB0ED, + 0x7ECB, 0xE7A8, + 0x7ECC, 0xE7A9, + 0x7ECD, 0xC9DC, + 0x7ECE, 0xD2EF, + 0x7ECF, 0xBEAD, + 0x7ED0, 0xE7AA, + 0x7ED1, 0xB0F3, + 0x7ED2, 0xC8DE, + 0x7ED3, 0xBDE1, + 0x7ED4, 0xE7AB, + 0x7ED5, 0xC8C6, + 0x7ED7, 0xE7AC, + 0x7ED8, 0xBBE6, + 0x7ED9, 0xB8F8, + 0x7EDA, 0xD1A4, + 0x7EDB, 0xE7AD, + 0x7EDC, 0xC2E7, + 0x7EDD, 0xBEF8, + 0x7EDE, 0xBDCA, + 0x7EDF, 0xCDB3, + 0x7EE0, 0xE7AE, + 0x7EE1, 0xE7AF, + 0x7EE2, 0xBEEE, + 0x7EE3, 0xD0E5, + 0x7EE5, 0xCBE7, + 0x7EE6, 0xCCD0, + 0x7EE7, 0xBCCC, + 0x7EE8, 0xE7B0, + 0x7EE9, 0xBCA8, + 0x7EEA, 0xD0F7, + 0x7EEB, 0xE7B1, + 0x7EED, 0xD0F8, + 0x7EEE, 0xE7B2, + 0x7EEF, 0xE7B3, + 0x7EF0, 0xB4C2, + 0x7EF1, 0xE7B4, + 0x7EF2, 0xE7B5, + 0x7EF3, 0xC9FE, + 0x7EF4, 0xCEAC, + 0x7EF5, 0xC3E0, + 0x7EF6, 0xE7B7, + 0x7EF7, 0xB1C1, + 0x7EF8, 0xB3F1, + 0x7EFA, 0xE7B8, + 0x7EFB, 0xE7B9, + 0x7EFC, 0xD7DB, + 0x7EFD, 0xD5C0, + 0x7EFE, 0xE7BA, + 0x7EFF, 0xC2CC, + 0x7F00, 0xD7BA, + 0x7F01, 0xE7BB, + 0x7F02, 0xE7BC, + 0x7F03, 0xE7BD, + 0x7F04, 0xBCEA, + 0x7F05, 0xC3E5, + 0x7F06, 0xC0C2, + 0x7F07, 0xE7BE, + 0x7F08, 0xE7BF, + 0x7F09, 0xBCA9, + 0x7F0B, 0xE7C0, + 0x7F0C, 0xE7C1, + 0x7F0D, 0xE7B6, + 0x7F0E, 0xB6D0, + 0x7F0F, 0xE7C2, + 0x7F11, 0xE7C3, + 0x7F12, 0xE7C4, + 0x7F13, 0xBBBA, + 0x7F14, 0xB5DE, + 0x7F15, 0xC2C6, + 0x7F16, 0xB1E0, + 0x7F17, 0xE7C5, + 0x7F18, 0xD4B5, + 0x7F19, 0xE7C6, + 0x7F1A, 0xB8BF, + 0x7F1B, 0xE7C8, + 0x7F1C, 0xE7C7, + 0x7F1D, 0xB7EC, + 0x7F1F, 0xE7C9, + 0x7F20, 0xB2F8, + 0x7F21, 0xE7CA, + 0x7F22, 0xE7CB, + 0x7F23, 0xE7CC, + 0x7F24, 0xE7CD, + 0x7F25, 0xE7CE, + 0x7F26, 0xE7CF, + 0x7F27, 0xE7D0, + 0x7F28, 0xD3A7, + 0x7F29, 0xCBF5, + 0x7F2A, 0xE7D1, + 0x7F2B, 0xE7D2, + 0x7F2C, 0xE7D3, + 0x7F2D, 0xE7D4, + 0x7F2E, 0xC9C9, + 0x7F2F, 0xE7D5, + 0x7F30, 0xE7D6, + 0x7F31, 0xE7D7, + 0x7F32, 0xE7D8, + 0x7F33, 0xE7D9, + 0x7F34, 0xBDC9, + 0x7F35, 0xE7DA, + 0x7F36, 0xF3BE, + 0x7F38, 0xB8D7, + 0x7F3A, 0xC8B1, + 0x7F42, 0xF3BF, + 0x7F44, 0xF3C0, + 0x7F45, 0xF3C1, + 0x7F50, 0xB9DE, + 0x7F51, 0xCDF8, + 0x7F54, 0xD8E8, + 0x7F55, 0xBAB1, + 0x7F57, 0xC2DE, + 0x7F58, 0xEEB7, + 0x7F5A, 0xB7A3, + 0x7F5F, 0xEEB9, + 0x7F61, 0xEEB8, + 0x7F62, 0xB0D5, + 0x7F68, 0xEEBB, + 0x7F69, 0xD5D6, + 0x7F6A, 0xD7EF, + 0x7F6E, 0xD6C3, + 0x7F71, 0xEEBD, + 0x7F72, 0xCAF0, + 0x7F74, 0xEEBC, + 0x7F79, 0xEEBE, + 0x7F7E, 0xEEC0, + 0x7F81, 0xEEBF, + 0x7F8A, 0xD1F2, + 0x7F8C, 0xC7BC, + 0x7F8E, 0xC3C0, + 0x7F94, 0xB8E1, + 0x7F9A, 0xC1E7, + 0x7F9D, 0xF4C6, + 0x7F9E, 0xD0DF, + 0x7F9F, 0xF4C7, + 0x7FA1, 0xCFDB, + 0x7FA4, 0xC8BA, + 0x7FA7, 0xF4C8, + 0x7FAF, 0xF4C9, + 0x7FB0, 0xF4CA, + 0x7FB2, 0xF4CB, + 0x7FB8, 0xD9FA, + 0x7FB9, 0xB8FE, + 0x7FBC, 0xE5F1, + 0x7FBD, 0xD3F0, + 0x7FBF, 0xF4E0, + 0x7FC1, 0xCECC, + 0x7FC5, 0xB3E1, + 0x7FCA, 0xF1B4, + 0x7FCC, 0xD2EE, + 0x7FCE, 0xF4E1, + 0x7FD4, 0xCFE8, + 0x7FD5, 0xF4E2, + 0x7FD8, 0xC7CC, + 0x7FDF, 0xB5D4, + 0x7FE0, 0xB4E4, + 0x7FE1, 0xF4E4, + 0x7FE5, 0xF4E3, + 0x7FE6, 0xF4E5, + 0x7FE9, 0xF4E6, + 0x7FEE, 0xF4E7, + 0x7FF0, 0xBAB2, + 0x7FF1, 0xB0BF, + 0x7FF3, 0xF4E8, + 0x7FFB, 0xB7AD, + 0x7FFC, 0xD2ED, + 0x8000, 0xD2AB, + 0x8001, 0xC0CF, + 0x8003, 0xBFBC, + 0x8004, 0xEBA3, + 0x8005, 0xD5DF, + 0x8006, 0xEAC8, + 0x800B, 0xF1F3, + 0x800C, 0xB6F8, + 0x800D, 0xCBA3, + 0x8010, 0xC4CD, + 0x8012, 0xF1E7, + 0x8014, 0xF1E8, + 0x8015, 0xB8FB, + 0x8016, 0xF1E9, + 0x8017, 0xBAC4, + 0x8018, 0xD4C5, + 0x8019, 0xB0D2, + 0x801C, 0xF1EA, + 0x8020, 0xF1EB, + 0x8022, 0xF1EC, + 0x8025, 0xF1ED, + 0x8026, 0xF1EE, + 0x8027, 0xF1EF, + 0x8028, 0xF1F1, + 0x8029, 0xF1F0, + 0x802A, 0xC5D5, + 0x8031, 0xF1F2, + 0x8033, 0xB6FA, + 0x8035, 0xF1F4, + 0x8036, 0xD2AE, + 0x8037, 0xDEC7, + 0x8038, 0xCBCA, + 0x803B, 0xB3DC, + 0x803D, 0xB5A2, + 0x803F, 0xB9A2, + 0x8042, 0xC4F4, + 0x8043, 0xF1F5, + 0x8046, 0xF1F6, + 0x804A, 0xC1C4, + 0x804B, 0xC1FB, + 0x804C, 0xD6B0, + 0x804D, 0xF1F7, + 0x8052, 0xF1F8, + 0x8054, 0xC1AA, + 0x8058, 0xC6B8, + 0x805A, 0xBEDB, + 0x8069, 0xF1F9, + 0x806A, 0xB4CF, + 0x8071, 0xF1FA, + 0x807F, 0xEDB2, + 0x8080, 0xEDB1, + 0x8083, 0xCBE0, + 0x8084, 0xD2DE, + 0x8086, 0xCBC1, + 0x8087, 0xD5D8, + 0x8089, 0xC8E2, + 0x808B, 0xC0DF, + 0x808C, 0xBCA1, + 0x8093, 0xEBC1, + 0x8096, 0xD0A4, + 0x8098, 0xD6E2, + 0x809A, 0xB6C7, + 0x809B, 0xB8D8, + 0x809C, 0xEBC0, + 0x809D, 0xB8CE, + 0x809F, 0xEBBF, + 0x80A0, 0xB3A6, + 0x80A1, 0xB9C9, + 0x80A2, 0xD6AB, + 0x80A4, 0xB7F4, + 0x80A5, 0xB7CA, + 0x80A9, 0xBCE7, + 0x80AA, 0xB7BE, + 0x80AB, 0xEBC6, + 0x80AD, 0xEBC7, + 0x80AE, 0xB0B9, + 0x80AF, 0xBFCF, + 0x80B1, 0xEBC5, + 0x80B2, 0xD3FD, + 0x80B4, 0xEBC8, + 0x80B7, 0xEBC9, + 0x80BA, 0xB7CE, + 0x80BC, 0xEBC2, + 0x80BD, 0xEBC4, + 0x80BE, 0xC9F6, + 0x80BF, 0xD6D7, + 0x80C0, 0xD5CD, + 0x80C1, 0xD0B2, + 0x80C2, 0xEBCF, + 0x80C3, 0xCEB8, + 0x80C4, 0xEBD0, + 0x80C6, 0xB5A8, + 0x80CC, 0xB1B3, + 0x80CD, 0xEBD2, + 0x80CE, 0xCCA5, + 0x80D6, 0xC5D6, + 0x80D7, 0xEBD3, + 0x80D9, 0xEBD1, + 0x80DA, 0xC5DF, + 0x80DB, 0xEBCE, + 0x80DC, 0xCAA4, + 0x80DD, 0xEBD5, + 0x80DE, 0xB0FB, + 0x80E1, 0xBAFA, + 0x80E4, 0xD8B7, + 0x80E5, 0xF1E3, + 0x80E7, 0xEBCA, + 0x80E8, 0xEBCB, + 0x80E9, 0xEBCC, + 0x80EA, 0xEBCD, + 0x80EB, 0xEBD6, + 0x80EC, 0xE6C0, + 0x80ED, 0xEBD9, + 0x80EF, 0xBFE8, + 0x80F0, 0xD2C8, + 0x80F1, 0xEBD7, + 0x80F2, 0xEBDC, + 0x80F3, 0xB8EC, + 0x80F4, 0xEBD8, + 0x80F6, 0xBDBA, + 0x80F8, 0xD0D8, + 0x80FA, 0xB0B7, + 0x80FC, 0xEBDD, + 0x80FD, 0xC4DC, + 0x8102, 0xD6AC, + 0x8106, 0xB4E0, + 0x8109, 0xC2F6, + 0x810A, 0xBCB9, + 0x810D, 0xEBDA, + 0x810E, 0xEBDB, + 0x810F, 0xD4E0, + 0x8110, 0xC6EA, + 0x8111, 0xC4D4, + 0x8112, 0xEBDF, + 0x8113, 0xC5A7, + 0x8114, 0xD9F5, + 0x8116, 0xB2B1, + 0x8118, 0xEBE4, + 0x811A, 0xBDC5, + 0x811E, 0xEBE2, + 0x812C, 0xEBE3, + 0x812F, 0xB8AC, + 0x8131, 0xCDD1, + 0x8132, 0xEBE5, + 0x8136, 0xEBE1, + 0x8138, 0xC1B3, + 0x813E, 0xC6A2, + 0x8146, 0xCCF3, + 0x8148, 0xEBE6, + 0x814A, 0xC0B0, + 0x814B, 0xD2B8, + 0x814C, 0xEBE7, + 0x8150, 0xB8AF, + 0x8151, 0xB8AD, + 0x8153, 0xEBE8, + 0x8154, 0xC7BB, + 0x8155, 0xCDF3, + 0x8159, 0xEBEA, + 0x815A, 0xEBEB, + 0x8160, 0xEBED, + 0x8165, 0xD0C8, + 0x8167, 0xEBF2, + 0x8169, 0xEBEE, + 0x816D, 0xEBF1, + 0x816E, 0xC8F9, + 0x8170, 0xD1FC, + 0x8171, 0xEBEC, + 0x8174, 0xEBE9, + 0x8179, 0xB8B9, + 0x817A, 0xCFD9, + 0x817B, 0xC4E5, + 0x817C, 0xEBEF, + 0x817D, 0xEBF0, + 0x817E, 0xCCDA, + 0x817F, 0xCDC8, + 0x8180, 0xB0F2, + 0x8182, 0xEBF6, + 0x8188, 0xEBF5, + 0x818A, 0xB2B2, + 0x818F, 0xB8E0, + 0x8191, 0xEBF7, + 0x8198, 0xB1EC, + 0x819B, 0xCCC5, + 0x819C, 0xC4A4, + 0x819D, 0xCFA5, + 0x81A3, 0xEBF9, + 0x81A6, 0xECA2, + 0x81A8, 0xC5F2, + 0x81AA, 0xEBFA, + 0x81B3, 0xC9C5, + 0x81BA, 0xE2DF, + 0x81BB, 0xEBFE, + 0x81C0, 0xCDCE, + 0x81C1, 0xECA1, + 0x81C2, 0xB1DB, + 0x81C3, 0xD3B7, + 0x81C6, 0xD2DC, + 0x81CA, 0xEBFD, + 0x81CC, 0xEBFB, + 0x81E3, 0xB3BC, + 0x81E7, 0xEAB0, + 0x81EA, 0xD7D4, + 0x81EC, 0xF4AB, + 0x81ED, 0xB3F4, + 0x81F3, 0xD6C1, + 0x81F4, 0xD6C2, + 0x81FB, 0xD5E9, + 0x81FC, 0xBECA, + 0x81FE, 0xF4A7, + 0x8200, 0xD2A8, + 0x8201, 0xF4A8, + 0x8202, 0xF4A9, + 0x8204, 0xF4AA, + 0x8205, 0xBECB, + 0x8206, 0xD3DF, + 0x820C, 0xC9E0, + 0x820D, 0xC9E1, + 0x8210, 0xF3C2, + 0x8212, 0xCAE6, + 0x8214, 0xCCF2, + 0x821B, 0xE2B6, + 0x821C, 0xCBB4, + 0x821E, 0xCEE8, + 0x821F, 0xD6DB, + 0x8221, 0xF4AD, + 0x8222, 0xF4AE, + 0x8223, 0xF4AF, + 0x8228, 0xF4B2, + 0x822A, 0xBABD, + 0x822B, 0xF4B3, + 0x822C, 0xB0E3, + 0x822D, 0xF4B0, + 0x822F, 0xF4B1, + 0x8230, 0xBDA2, + 0x8231, 0xB2D5, + 0x8233, 0xF4B6, + 0x8234, 0xF4B7, + 0x8235, 0xB6E6, + 0x8236, 0xB2B0, + 0x8237, 0xCFCF, + 0x8238, 0xF4B4, + 0x8239, 0xB4AC, + 0x823B, 0xF4B5, + 0x823E, 0xF4B8, + 0x8244, 0xF4B9, + 0x8247, 0xCDA7, + 0x8249, 0xF4BA, + 0x824B, 0xF4BB, + 0x824F, 0xF4BC, + 0x8258, 0xCBD2, + 0x825A, 0xF4BD, + 0x825F, 0xF4BE, + 0x8268, 0xF4BF, + 0x826E, 0xF4DE, + 0x826F, 0xC1BC, + 0x8270, 0xBCE8, + 0x8272, 0xC9AB, + 0x8273, 0xD1DE, + 0x8274, 0xE5F5, + 0x8279, 0xDCB3, + 0x827A, 0xD2D5, + 0x827D, 0xDCB4, + 0x827E, 0xB0AC, + 0x827F, 0xDCB5, + 0x8282, 0xBDDA, + 0x8284, 0xDCB9, + 0x8288, 0xD8C2, + 0x828A, 0xDCB7, + 0x828B, 0xD3F3, + 0x828D, 0xC9D6, + 0x828E, 0xDCBA, + 0x828F, 0xDCB6, + 0x8291, 0xDCBB, + 0x8292, 0xC3A2, + 0x8297, 0xDCBC, + 0x8298, 0xDCC5, + 0x8299, 0xDCBD, + 0x829C, 0xCEDF, + 0x829D, 0xD6A5, + 0x829F, 0xDCCF, + 0x82A1, 0xDCCD, + 0x82A4, 0xDCD2, + 0x82A5, 0xBDE6, + 0x82A6, 0xC2AB, + 0x82A8, 0xDCB8, + 0x82A9, 0xDCCB, + 0x82AA, 0xDCCE, + 0x82AB, 0xDCBE, + 0x82AC, 0xB7D2, + 0x82AD, 0xB0C5, + 0x82AE, 0xDCC7, + 0x82AF, 0xD0BE, + 0x82B0, 0xDCC1, + 0x82B1, 0xBBA8, + 0x82B3, 0xB7BC, + 0x82B4, 0xDCCC, + 0x82B7, 0xDCC6, + 0x82B8, 0xDCBF, + 0x82B9, 0xC7DB, + 0x82BD, 0xD1BF, + 0x82BE, 0xDCC0, + 0x82C1, 0xDCCA, + 0x82C4, 0xDCD0, + 0x82C7, 0xCEAD, + 0x82C8, 0xDCC2, + 0x82CA, 0xDCC3, + 0x82CB, 0xDCC8, + 0x82CC, 0xDCC9, + 0x82CD, 0xB2D4, + 0x82CE, 0xDCD1, + 0x82CF, 0xCBD5, + 0x82D1, 0xD4B7, + 0x82D2, 0xDCDB, + 0x82D3, 0xDCDF, + 0x82D4, 0xCCA6, + 0x82D5, 0xDCE6, + 0x82D7, 0xC3E7, + 0x82D8, 0xDCDC, + 0x82DB, 0xBFC1, + 0x82DC, 0xDCD9, + 0x82DE, 0xB0FA, + 0x82DF, 0xB9B6, + 0x82E0, 0xDCE5, + 0x82E1, 0xDCD3, + 0x82E3, 0xDCC4, + 0x82E4, 0xDCD6, + 0x82E5, 0xC8F4, + 0x82E6, 0xBFE0, + 0x82EB, 0xC9BB, + 0x82EF, 0xB1BD, + 0x82F1, 0xD3A2, + 0x82F4, 0xDCDA, + 0x82F7, 0xDCD5, + 0x82F9, 0xC6BB, + 0x82FB, 0xDCDE, + 0x8301, 0xD7C2, + 0x8302, 0xC3AF, + 0x8303, 0xB7B6, + 0x8304, 0xC7D1, + 0x8305, 0xC3A9, + 0x8306, 0xDCE2, + 0x8307, 0xDCD8, + 0x8308, 0xDCEB, + 0x8309, 0xDCD4, + 0x830C, 0xDCDD, + 0x830E, 0xBEA5, + 0x830F, 0xDCD7, + 0x8311, 0xDCE0, + 0x8314, 0xDCE3, + 0x8315, 0xDCE4, + 0x8317, 0xDCF8, + 0x831A, 0xDCE1, + 0x831B, 0xDDA2, + 0x831C, 0xDCE7, + 0x8327, 0xBCEB, + 0x8328, 0xB4C4, + 0x832B, 0xC3A3, + 0x832C, 0xB2E7, + 0x832D, 0xDCFA, + 0x832F, 0xDCF2, + 0x8331, 0xDCEF, + 0x8333, 0xDCFC, + 0x8334, 0xDCEE, + 0x8335, 0xD2F0, + 0x8336, 0xB2E8, + 0x8338, 0xC8D7, + 0x8339, 0xC8E3, + 0x833A, 0xDCFB, + 0x833C, 0xDCED, + 0x8340, 0xDCF7, + 0x8343, 0xDCF5, + 0x8346, 0xBEA3, + 0x8347, 0xDCF4, + 0x8349, 0xB2DD, + 0x834F, 0xDCF3, + 0x8350, 0xBCF6, + 0x8351, 0xDCE8, + 0x8352, 0xBBC4, + 0x8354, 0xC0F3, + 0x835A, 0xBCD4, + 0x835B, 0xDCE9, + 0x835C, 0xDCEA, + 0x835E, 0xDCF1, + 0x835F, 0xDCF6, + 0x8360, 0xDCF9, + 0x8361, 0xB5B4, + 0x8363, 0xC8D9, + 0x8364, 0xBBE7, + 0x8365, 0xDCFE, + 0x8366, 0xDCFD, + 0x8367, 0xD3AB, + 0x8368, 0xDDA1, + 0x8369, 0xDDA3, + 0x836A, 0xDDA5, + 0x836B, 0xD2F1, + 0x836C, 0xDDA4, + 0x836D, 0xDDA6, + 0x836E, 0xDDA7, + 0x836F, 0xD2A9, + 0x8377, 0xBAC9, + 0x8378, 0xDDA9, + 0x837B, 0xDDB6, + 0x837C, 0xDDB1, + 0x837D, 0xDDB4, + 0x8385, 0xDDB0, + 0x8386, 0xC6CE, + 0x8389, 0xC0F2, + 0x838E, 0xC9AF, + 0x8392, 0xDCEC, + 0x8393, 0xDDAE, + 0x8398, 0xDDB7, + 0x839B, 0xDCF0, + 0x839C, 0xDDAF, + 0x839E, 0xDDB8, + 0x83A0, 0xDDAC, + 0x83A8, 0xDDB9, + 0x83A9, 0xDDB3, + 0x83AA, 0xDDAD, + 0x83AB, 0xC4AA, + 0x83B0, 0xDDA8, + 0x83B1, 0xC0B3, + 0x83B2, 0xC1AB, + 0x83B3, 0xDDAA, + 0x83B4, 0xDDAB, + 0x83B6, 0xDDB2, + 0x83B7, 0xBBF1, + 0x83B8, 0xDDB5, + 0x83B9, 0xD3A8, + 0x83BA, 0xDDBA, + 0x83BC, 0xDDBB, + 0x83BD, 0xC3A7, + 0x83C0, 0xDDD2, + 0x83C1, 0xDDBC, + 0x83C5, 0xDDD1, + 0x83C7, 0xB9BD, + 0x83CA, 0xBED5, + 0x83CC, 0xBEFA, + 0x83CF, 0xBACA, + 0x83D4, 0xDDCA, + 0x83D6, 0xDDC5, + 0x83D8, 0xDDBF, + 0x83DC, 0xB2CB, + 0x83DD, 0xDDC3, + 0x83DF, 0xDDCB, + 0x83E0, 0xB2A4, + 0x83E1, 0xDDD5, + 0x83E5, 0xDDBE, + 0x83E9, 0xC6D0, + 0x83EA, 0xDDD0, + 0x83F0, 0xDDD4, + 0x83F1, 0xC1E2, + 0x83F2, 0xB7C6, + 0x83F8, 0xDDCE, + 0x83F9, 0xDDCF, + 0x83FD, 0xDDC4, + 0x8401, 0xDDBD, + 0x8403, 0xDDCD, + 0x8404, 0xCCD1, + 0x8406, 0xDDC9, + 0x840B, 0xDDC2, + 0x840C, 0xC3C8, + 0x840D, 0xC6BC, + 0x840E, 0xCEAE, + 0x840F, 0xDDCC, + 0x8411, 0xDDC8, + 0x8418, 0xDDC1, + 0x841C, 0xDDC6, + 0x841D, 0xC2DC, + 0x8424, 0xD3A9, + 0x8425, 0xD3AA, + 0x8426, 0xDDD3, + 0x8427, 0xCFF4, + 0x8428, 0xC8F8, + 0x8431, 0xDDE6, + 0x8438, 0xDDC7, + 0x843C, 0xDDE0, + 0x843D, 0xC2E4, + 0x8446, 0xDDE1, + 0x8451, 0xDDD7, + 0x8457, 0xD6F8, + 0x8459, 0xDDD9, + 0x845A, 0xDDD8, + 0x845B, 0xB8F0, + 0x845C, 0xDDD6, + 0x8461, 0xC6CF, + 0x8463, 0xB6AD, + 0x8469, 0xDDE2, + 0x846B, 0xBAF9, + 0x846C, 0xD4E1, + 0x846D, 0xDDE7, + 0x8471, 0xB4D0, + 0x8473, 0xDDDA, + 0x8475, 0xBFFB, + 0x8476, 0xDDE3, + 0x8478, 0xDDDF, + 0x847A, 0xDDDD, + 0x8482, 0xB5D9, + 0x8487, 0xDDDB, + 0x8488, 0xDDDC, + 0x8489, 0xDDDE, + 0x848B, 0xBDAF, + 0x848C, 0xDDE4, + 0x848E, 0xDDE5, + 0x8497, 0xDDF5, + 0x8499, 0xC3C9, + 0x849C, 0xCBE2, + 0x84A1, 0xDDF2, + 0x84AF, 0xD8E1, + 0x84B2, 0xC6D1, + 0x84B4, 0xDDF4, + 0x84B8, 0xD5F4, + 0x84B9, 0xDDF3, + 0x84BA, 0xDDF0, + 0x84BD, 0xDDEC, + 0x84BF, 0xDDEF, + 0x84C1, 0xDDE8, + 0x84C4, 0xD0EE, + 0x84C9, 0xC8D8, + 0x84CA, 0xDDEE, + 0x84CD, 0xDDE9, + 0x84D0, 0xDDEA, + 0x84D1, 0xCBF2, + 0x84D3, 0xDDED, + 0x84D6, 0xB1CD, + 0x84DD, 0xC0B6, + 0x84DF, 0xBCBB, + 0x84E0, 0xDDF1, + 0x84E3, 0xDDF7, + 0x84E5, 0xDDF6, + 0x84E6, 0xDDEB, + 0x84EC, 0xC5EE, + 0x84F0, 0xDDFB, + 0x84FC, 0xDEA4, + 0x84FF, 0xDEA3, + 0x850C, 0xDDF8, + 0x8511, 0xC3EF, + 0x8513, 0xC2FB, + 0x8517, 0xD5E1, + 0x851A, 0xCEB5, + 0x851F, 0xDDFD, + 0x8521, 0xB2CC, + 0x852B, 0xC4E8, + 0x852C, 0xCADF, + 0x8537, 0xC7BE, + 0x8538, 0xDDFA, + 0x8539, 0xDDFC, + 0x853A, 0xDDFE, + 0x853B, 0xDEA2, + 0x853C, 0xB0AA, + 0x853D, 0xB1CE, + 0x8543, 0xDEAC, + 0x8548, 0xDEA6, + 0x8549, 0xBDB6, + 0x854A, 0xC8EF, + 0x8556, 0xDEA1, + 0x8559, 0xDEA5, + 0x855E, 0xDEA9, + 0x8564, 0xDEA8, + 0x8568, 0xDEA7, + 0x8572, 0xDEAD, + 0x8574, 0xD4CC, + 0x8579, 0xDEB3, + 0x857A, 0xDEAA, + 0x857B, 0xDEAE, + 0x857E, 0xC0D9, + 0x8584, 0xB1A1, + 0x8585, 0xDEB6, + 0x8587, 0xDEB1, + 0x858F, 0xDEB2, + 0x859B, 0xD1A6, + 0x859C, 0xDEB5, + 0x85A4, 0xDEAF, + 0x85A8, 0xDEB0, + 0x85AA, 0xD0BD, + 0x85AE, 0xDEB4, + 0x85AF, 0xCAED, + 0x85B0, 0xDEB9, + 0x85B7, 0xDEB8, + 0x85B9, 0xDEB7, + 0x85C1, 0xDEBB, + 0x85C9, 0xBDE5, + 0x85CF, 0xB2D8, + 0x85D0, 0xC3EA, + 0x85D3, 0xDEBA, + 0x85D5, 0xC5BA, + 0x85DC, 0xDEBC, + 0x85E4, 0xCCD9, + 0x85E9, 0xB7AA, + 0x85FB, 0xD4E5, + 0x85FF, 0xDEBD, + 0x8605, 0xDEBF, + 0x8611, 0xC4A2, + 0x8616, 0xDEC1, + 0x8627, 0xDEBE, + 0x8629, 0xDEC0, + 0x8638, 0xD5BA, + 0x863C, 0xDEC2, + 0x864D, 0xF2AE, + 0x864E, 0xBBA2, + 0x864F, 0xC2B2, + 0x8650, 0xC5B0, + 0x8651, 0xC2C7, + 0x8654, 0xF2AF, + 0x865A, 0xD0E9, + 0x865E, 0xD3DD, + 0x8662, 0xEBBD, + 0x866B, 0xB3E6, + 0x866C, 0xF2B0, + 0x866E, 0xF2B1, + 0x8671, 0xCAAD, + 0x8679, 0xBAE7, + 0x867A, 0xF2B3, + 0x867B, 0xF2B5, + 0x867C, 0xF2B4, + 0x867D, 0xCBE4, + 0x867E, 0xCFBA, + 0x867F, 0xF2B2, + 0x8680, 0xCAB4, + 0x8681, 0xD2CF, + 0x8682, 0xC2EC, + 0x868A, 0xCEC3, + 0x868B, 0xF2B8, + 0x868C, 0xB0F6, + 0x868D, 0xF2B7, + 0x8693, 0xF2BE, + 0x8695, 0xB2CF, + 0x869C, 0xD1C1, + 0x869D, 0xF2BA, + 0x86A3, 0xF2BC, + 0x86A4, 0xD4E9, + 0x86A7, 0xF2BB, + 0x86A8, 0xF2B6, + 0x86A9, 0xF2BF, + 0x86AA, 0xF2BD, + 0x86AC, 0xF2B9, + 0x86AF, 0xF2C7, + 0x86B0, 0xF2C4, + 0x86B1, 0xF2C6, + 0x86B4, 0xF2CA, + 0x86B5, 0xF2C2, + 0x86B6, 0xF2C0, + 0x86BA, 0xF2C5, + 0x86C0, 0xD6FB, + 0x86C4, 0xF2C1, + 0x86C6, 0xC7F9, + 0x86C7, 0xC9DF, + 0x86C9, 0xF2C8, + 0x86CA, 0xB9C6, + 0x86CB, 0xB5B0, + 0x86CE, 0xF2C3, + 0x86CF, 0xF2C9, + 0x86D0, 0xF2D0, + 0x86D1, 0xF2D6, + 0x86D4, 0xBBD7, + 0x86D8, 0xF2D5, + 0x86D9, 0xCDDC, + 0x86DB, 0xD6EB, + 0x86DE, 0xF2D2, + 0x86DF, 0xF2D4, + 0x86E4, 0xB8F2, + 0x86E9, 0xF2CB, + 0x86ED, 0xF2CE, + 0x86EE, 0xC2F9, + 0x86F0, 0xD5DD, + 0x86F1, 0xF2CC, + 0x86F2, 0xF2CD, + 0x86F3, 0xF2CF, + 0x86F4, 0xF2D3, + 0x86F8, 0xF2D9, + 0x86F9, 0xD3BC, + 0x86FE, 0xB6EA, + 0x8700, 0xCAF1, + 0x8702, 0xB7E4, + 0x8703, 0xF2D7, + 0x8707, 0xF2D8, + 0x8708, 0xF2DA, + 0x8709, 0xF2DD, + 0x870A, 0xF2DB, + 0x870D, 0xF2DC, + 0x8712, 0xD1D1, + 0x8713, 0xF2D1, + 0x8715, 0xCDC9, + 0x8717, 0xCECF, + 0x8718, 0xD6A9, + 0x871A, 0xF2E3, + 0x871C, 0xC3DB, + 0x871E, 0xF2E0, + 0x8721, 0xC0AF, + 0x8722, 0xF2EC, + 0x8723, 0xF2DE, + 0x8725, 0xF2E1, + 0x8729, 0xF2E8, + 0x872E, 0xF2E2, + 0x8731, 0xF2E7, + 0x8734, 0xF2E6, + 0x8737, 0xF2E9, + 0x873B, 0xF2DF, + 0x873E, 0xF2E4, + 0x873F, 0xF2EA, + 0x8747, 0xD3AC, + 0x8748, 0xF2E5, + 0x8749, 0xB2F5, + 0x874C, 0xF2F2, + 0x874E, 0xD0AB, + 0x8753, 0xF2F5, + 0x8757, 0xBBC8, + 0x8759, 0xF2F9, + 0x8760, 0xF2F0, + 0x8763, 0xF2F6, + 0x8764, 0xF2F8, + 0x8765, 0xF2FA, + 0x876E, 0xF2F3, + 0x8770, 0xF2F1, + 0x8774, 0xBAFB, + 0x8776, 0xB5FB, + 0x877B, 0xF2EF, + 0x877C, 0xF2F7, + 0x877D, 0xF2ED, + 0x877E, 0xF2EE, + 0x8782, 0xF2EB, + 0x8783, 0xF3A6, + 0x8785, 0xF3A3, + 0x8788, 0xF3A2, + 0x878B, 0xF2F4, + 0x878D, 0xC8DA, + 0x8793, 0xF2FB, + 0x8797, 0xF3A5, + 0x879F, 0xC3F8, + 0x87A8, 0xF2FD, + 0x87AB, 0xF3A7, + 0x87AC, 0xF3A9, + 0x87AD, 0xF3A4, + 0x87AF, 0xF2FC, + 0x87B3, 0xF3AB, + 0x87B5, 0xF3AA, + 0x87BA, 0xC2DD, + 0x87BD, 0xF3AE, + 0x87C0, 0xF3B0, + 0x87C6, 0xF3A1, + 0x87CA, 0xF3B1, + 0x87CB, 0xF3AC, + 0x87D1, 0xF3AF, + 0x87D2, 0xF2FE, + 0x87D3, 0xF3AD, + 0x87DB, 0xF3B2, + 0x87E0, 0xF3B4, + 0x87E5, 0xF3A8, + 0x87EA, 0xF3B3, + 0x87EE, 0xF3B5, + 0x87F9, 0xD0B7, + 0x87FE, 0xF3B8, + 0x8803, 0xD9F9, + 0x880A, 0xF3B9, + 0x8813, 0xF3B7, + 0x8815, 0xC8E4, + 0x8816, 0xF3B6, + 0x881B, 0xF3BA, + 0x8821, 0xF3BB, + 0x8822, 0xB4C0, + 0x8832, 0xEEC3, + 0x8839, 0xF3BC, + 0x883C, 0xF3BD, + 0x8840, 0xD1AA, + 0x8844, 0xF4AC, + 0x8845, 0xD0C6, + 0x884C, 0xD0D0, + 0x884D, 0xD1DC, + 0x8854, 0xCFCE, + 0x8857, 0xBDD6, + 0x8859, 0xD1C3, + 0x8861, 0xBAE2, + 0x8862, 0xE1E9, + 0x8863, 0xD2C2, + 0x8864, 0xF1C2, + 0x8865, 0xB2B9, + 0x8868, 0xB1ED, + 0x8869, 0xF1C3, + 0x886B, 0xC9C0, + 0x886C, 0xB3C4, + 0x886E, 0xD9F2, + 0x8870, 0xCBA5, + 0x8872, 0xF1C4, + 0x8877, 0xD6D4, + 0x887D, 0xF1C5, + 0x887E, 0xF4C0, + 0x887F, 0xF1C6, + 0x8881, 0xD4AC, + 0x8882, 0xF1C7, + 0x8884, 0xB0C0, + 0x8885, 0xF4C1, + 0x8888, 0xF4C2, + 0x888B, 0xB4FC, + 0x888D, 0xC5DB, + 0x8892, 0xCCBB, + 0x8896, 0xD0E4, + 0x889C, 0xCDE0, + 0x88A2, 0xF1C8, + 0x88A4, 0xD9F3, + 0x88AB, 0xB1BB, + 0x88AD, 0xCFAE, + 0x88B1, 0xB8A4, + 0x88B7, 0xF1CA, + 0x88BC, 0xF1CB, + 0x88C1, 0xB2C3, + 0x88C2, 0xC1D1, + 0x88C5, 0xD7B0, + 0x88C6, 0xF1C9, + 0x88C9, 0xF1CC, + 0x88CE, 0xF1CE, + 0x88D2, 0xD9F6, + 0x88D4, 0xD2E1, + 0x88D5, 0xD4A3, + 0x88D8, 0xF4C3, + 0x88D9, 0xC8B9, + 0x88DF, 0xF4C4, + 0x88E2, 0xF1CD, + 0x88E3, 0xF1CF, + 0x88E4, 0xBFE3, + 0x88E5, 0xF1D0, + 0x88E8, 0xF1D4, + 0x88F0, 0xF1D6, + 0x88F1, 0xF1D1, + 0x88F3, 0xC9D1, + 0x88F4, 0xC5E1, + 0x88F8, 0xC2E3, + 0x88F9, 0xB9FC, + 0x88FC, 0xF1D3, + 0x88FE, 0xF1D5, + 0x8902, 0xB9D3, + 0x890A, 0xF1DB, + 0x8910, 0xBAD6, + 0x8912, 0xB0FD, + 0x8913, 0xF1D9, + 0x8919, 0xF1D8, + 0x891A, 0xF1D2, + 0x891B, 0xF1DA, + 0x8921, 0xF1D7, + 0x8925, 0xC8EC, + 0x892A, 0xCDCA, + 0x892B, 0xF1DD, + 0x8930, 0xE5BD, + 0x8934, 0xF1DC, + 0x8936, 0xF1DE, + 0x8941, 0xF1DF, + 0x8944, 0xCFE5, + 0x895E, 0xF4C5, + 0x895F, 0xBDF3, + 0x8966, 0xF1E0, + 0x897B, 0xF1E1, + 0x897F, 0xCEF7, + 0x8981, 0xD2AA, + 0x8983, 0xF1FB, + 0x8986, 0xB8B2, + 0x89C1, 0xBCFB, + 0x89C2, 0xB9DB, + 0x89C4, 0xB9E6, + 0x89C5, 0xC3D9, + 0x89C6, 0xCAD3, + 0x89C7, 0xEAE8, + 0x89C8, 0xC0C0, + 0x89C9, 0xBEF5, + 0x89CA, 0xEAE9, + 0x89CB, 0xEAEA, + 0x89CC, 0xEAEB, + 0x89CE, 0xEAEC, + 0x89CF, 0xEAED, + 0x89D0, 0xEAEE, + 0x89D1, 0xEAEF, + 0x89D2, 0xBDC7, + 0x89D6, 0xF5FB, + 0x89DA, 0xF5FD, + 0x89DC, 0xF5FE, + 0x89DE, 0xF5FC, + 0x89E3, 0xBDE2, + 0x89E5, 0xF6A1, + 0x89E6, 0xB4A5, + 0x89EB, 0xF6A2, + 0x89EF, 0xF6A3, + 0x89F3, 0xECB2, + 0x8A00, 0xD1D4, + 0x8A07, 0xD9EA, + 0x8A3E, 0xF6A4, + 0x8A48, 0xEEBA, + 0x8A79, 0xD5B2, + 0x8A89, 0xD3FE, + 0x8A8A, 0xCCDC, + 0x8A93, 0xCAC4, + 0x8B07, 0xE5C0, + 0x8B26, 0xF6A5, + 0x8B66, 0xBEAF, + 0x8B6C, 0xC6A9, + 0x8BA0, 0xDAA5, + 0x8BA1, 0xBCC6, + 0x8BA2, 0xB6A9, + 0x8BA3, 0xB8BC, + 0x8BA4, 0xC8CF, + 0x8BA5, 0xBCA5, + 0x8BA6, 0xDAA6, + 0x8BA7, 0xDAA7, + 0x8BA8, 0xCCD6, + 0x8BA9, 0xC8C3, + 0x8BAA, 0xDAA8, + 0x8BAB, 0xC6FD, + 0x8BAD, 0xD1B5, + 0x8BAE, 0xD2E9, + 0x8BAF, 0xD1B6, + 0x8BB0, 0xBCC7, + 0x8BB2, 0xBDB2, + 0x8BB3, 0xBBE4, + 0x8BB4, 0xDAA9, + 0x8BB5, 0xDAAA, + 0x8BB6, 0xD1C8, + 0x8BB7, 0xDAAB, + 0x8BB8, 0xD0ED, + 0x8BB9, 0xB6EF, + 0x8BBA, 0xC2DB, + 0x8BBC, 0xCBCF, + 0x8BBD, 0xB7ED, + 0x8BBE, 0xC9E8, + 0x8BBF, 0xB7C3, + 0x8BC0, 0xBEF7, + 0x8BC1, 0xD6A4, + 0x8BC2, 0xDAAC, + 0x8BC3, 0xDAAD, + 0x8BC4, 0xC6C0, + 0x8BC5, 0xD7E7, + 0x8BC6, 0xCAB6, + 0x8BC8, 0xD5A9, + 0x8BC9, 0xCBDF, + 0x8BCA, 0xD5EF, + 0x8BCB, 0xDAAE, + 0x8BCC, 0xD6DF, + 0x8BCD, 0xB4CA, + 0x8BCE, 0xDAB0, + 0x8BCF, 0xDAAF, + 0x8BD1, 0xD2EB, + 0x8BD2, 0xDAB1, + 0x8BD3, 0xDAB2, + 0x8BD4, 0xDAB3, + 0x8BD5, 0xCAD4, + 0x8BD6, 0xDAB4, + 0x8BD7, 0xCAAB, + 0x8BD8, 0xDAB5, + 0x8BD9, 0xDAB6, + 0x8BDA, 0xB3CF, + 0x8BDB, 0xD6EF, + 0x8BDC, 0xDAB7, + 0x8BDD, 0xBBB0, + 0x8BDE, 0xB5AE, + 0x8BDF, 0xDAB8, + 0x8BE0, 0xDAB9, + 0x8BE1, 0xB9EE, + 0x8BE2, 0xD1AF, + 0x8BE3, 0xD2E8, + 0x8BE4, 0xDABA, + 0x8BE5, 0xB8C3, + 0x8BE6, 0xCFEA, + 0x8BE7, 0xB2EF, + 0x8BE8, 0xDABB, + 0x8BE9, 0xDABC, + 0x8BEB, 0xBDEB, + 0x8BEC, 0xCEDC, + 0x8BED, 0xD3EF, + 0x8BEE, 0xDABD, + 0x8BEF, 0xCEF3, + 0x8BF0, 0xDABE, + 0x8BF1, 0xD3D5, + 0x8BF2, 0xBBE5, + 0x8BF3, 0xDABF, + 0x8BF4, 0xCBB5, + 0x8BF5, 0xCBD0, + 0x8BF6, 0xDAC0, + 0x8BF7, 0xC7EB, + 0x8BF8, 0xD6EE, + 0x8BF9, 0xDAC1, + 0x8BFA, 0xC5B5, + 0x8BFB, 0xB6C1, + 0x8BFC, 0xDAC2, + 0x8BFD, 0xB7CC, + 0x8BFE, 0xBFCE, + 0x8BFF, 0xDAC3, + 0x8C00, 0xDAC4, + 0x8C01, 0xCBAD, + 0x8C02, 0xDAC5, + 0x8C03, 0xB5F7, + 0x8C04, 0xDAC6, + 0x8C05, 0xC1C2, + 0x8C06, 0xD7BB, + 0x8C07, 0xDAC7, + 0x8C08, 0xCCB8, + 0x8C0A, 0xD2EA, + 0x8C0B, 0xC4B1, + 0x8C0C, 0xDAC8, + 0x8C0D, 0xB5FD, + 0x8C0E, 0xBBD1, + 0x8C0F, 0xDAC9, + 0x8C10, 0xD0B3, + 0x8C11, 0xDACA, + 0x8C12, 0xDACB, + 0x8C13, 0xCEBD, + 0x8C14, 0xDACC, + 0x8C15, 0xDACD, + 0x8C16, 0xDACE, + 0x8C17, 0xB2F7, + 0x8C18, 0xDAD1, + 0x8C19, 0xDACF, + 0x8C1A, 0xD1E8, + 0x8C1B, 0xDAD0, + 0x8C1C, 0xC3D5, + 0x8C1D, 0xDAD2, + 0x8C1F, 0xDAD3, + 0x8C20, 0xDAD4, + 0x8C21, 0xDAD5, + 0x8C22, 0xD0BB, + 0x8C23, 0xD2A5, + 0x8C24, 0xB0F9, + 0x8C25, 0xDAD6, + 0x8C26, 0xC7AB, + 0x8C27, 0xDAD7, + 0x8C28, 0xBDF7, + 0x8C29, 0xC3A1, + 0x8C2A, 0xDAD8, + 0x8C2B, 0xDAD9, + 0x8C2C, 0xC3FD, + 0x8C2D, 0xCCB7, + 0x8C2E, 0xDADA, + 0x8C2F, 0xDADB, + 0x8C30, 0xC0BE, + 0x8C31, 0xC6D7, + 0x8C32, 0xDADC, + 0x8C33, 0xDADD, + 0x8C34, 0xC7B4, + 0x8C35, 0xDADE, + 0x8C36, 0xDADF, + 0x8C37, 0xB9C8, + 0x8C41, 0xBBED, + 0x8C46, 0xB6B9, + 0x8C47, 0xF4F8, + 0x8C49, 0xF4F9, + 0x8C4C, 0xCDE3, + 0x8C55, 0xF5B9, + 0x8C5A, 0xEBE0, + 0x8C61, 0xCFF3, + 0x8C62, 0xBBBF, + 0x8C6A, 0xBAC0, + 0x8C6B, 0xD4A5, + 0x8C73, 0xE1D9, + 0x8C78, 0xF5F4, + 0x8C79, 0xB1AA, + 0x8C7A, 0xB2F2, + 0x8C82, 0xF5F5, + 0x8C85, 0xF5F7, + 0x8C89, 0xBAD1, + 0x8C8A, 0xF5F6, + 0x8C8C, 0xC3B2, + 0x8C94, 0xF5F9, + 0x8C98, 0xF5F8, + 0x8D1D, 0xB1B4, + 0x8D1E, 0xD5EA, + 0x8D1F, 0xB8BA, + 0x8D21, 0xB9B1, + 0x8D22, 0xB2C6, + 0x8D23, 0xD4F0, + 0x8D24, 0xCFCD, + 0x8D25, 0xB0DC, + 0x8D26, 0xD5CB, + 0x8D27, 0xBBF5, + 0x8D28, 0xD6CA, + 0x8D29, 0xB7B7, + 0x8D2A, 0xCCB0, + 0x8D2B, 0xC6B6, + 0x8D2C, 0xB1E1, + 0x8D2D, 0xB9BA, + 0x8D2E, 0xD6FC, + 0x8D2F, 0xB9E1, + 0x8D30, 0xB7A1, + 0x8D31, 0xBCFA, + 0x8D32, 0xEADA, + 0x8D33, 0xEADB, + 0x8D34, 0xCCF9, + 0x8D35, 0xB9F3, + 0x8D36, 0xEADC, + 0x8D37, 0xB4FB, + 0x8D38, 0xC3B3, + 0x8D39, 0xB7D1, + 0x8D3A, 0xBAD8, + 0x8D3B, 0xEADD, + 0x8D3C, 0xD4F4, + 0x8D3D, 0xEADE, + 0x8D3E, 0xBCD6, + 0x8D3F, 0xBBDF, + 0x8D40, 0xEADF, + 0x8D41, 0xC1DE, + 0x8D42, 0xC2B8, + 0x8D43, 0xD4DF, + 0x8D44, 0xD7CA, + 0x8D45, 0xEAE0, + 0x8D46, 0xEAE1, + 0x8D47, 0xEAE4, + 0x8D48, 0xEAE2, + 0x8D49, 0xEAE3, + 0x8D4A, 0xC9DE, + 0x8D4B, 0xB8B3, + 0x8D4C, 0xB6C4, + 0x8D4D, 0xEAE5, + 0x8D4E, 0xCAEA, + 0x8D4F, 0xC9CD, + 0x8D50, 0xB4CD, + 0x8D53, 0xE2D9, + 0x8D54, 0xC5E2, + 0x8D55, 0xEAE6, + 0x8D56, 0xC0B5, + 0x8D58, 0xD7B8, + 0x8D59, 0xEAE7, + 0x8D5A, 0xD7AC, + 0x8D5B, 0xC8FC, + 0x8D5C, 0xD8D3, + 0x8D5D, 0xD8CD, + 0x8D5E, 0xD4DE, + 0x8D60, 0xD4F9, + 0x8D61, 0xC9C4, + 0x8D62, 0xD3AE, + 0x8D63, 0xB8D3, + 0x8D64, 0xB3E0, + 0x8D66, 0xC9E2, + 0x8D67, 0xF4F6, + 0x8D6B, 0xBAD5, + 0x8D6D, 0xF4F7, + 0x8D70, 0xD7DF, + 0x8D73, 0xF4F1, + 0x8D74, 0xB8B0, + 0x8D75, 0xD5D4, + 0x8D76, 0xB8CF, + 0x8D77, 0xC6F0, + 0x8D81, 0xB3C3, + 0x8D84, 0xF4F2, + 0x8D85, 0xB3AC, + 0x8D8A, 0xD4BD, + 0x8D8B, 0xC7F7, + 0x8D91, 0xF4F4, + 0x8D94, 0xF4F3, + 0x8D9F, 0xCCCB, + 0x8DA3, 0xC8A4, + 0x8DB1, 0xF4F5, + 0x8DB3, 0xD7E3, + 0x8DB4, 0xC5BF, + 0x8DB5, 0xF5C0, + 0x8DB8, 0xF5BB, + 0x8DBA, 0xF5C3, + 0x8DBC, 0xF5C2, + 0x8DBE, 0xD6BA, + 0x8DBF, 0xF5C1, + 0x8DC3, 0xD4BE, + 0x8DC4, 0xF5C4, + 0x8DC6, 0xF5CC, + 0x8DCB, 0xB0CF, + 0x8DCC, 0xB5F8, + 0x8DCE, 0xF5C9, + 0x8DCF, 0xF5CA, + 0x8DD1, 0xC5DC, + 0x8DD6, 0xF5C5, + 0x8DD7, 0xF5C6, + 0x8DDA, 0xF5C7, + 0x8DDB, 0xF5CB, + 0x8DDD, 0xBEE0, + 0x8DDE, 0xF5C8, + 0x8DDF, 0xB8FA, + 0x8DE3, 0xF5D0, + 0x8DE4, 0xF5D3, + 0x8DE8, 0xBFE7, + 0x8DEA, 0xB9F2, + 0x8DEB, 0xF5BC, + 0x8DEC, 0xF5CD, + 0x8DEF, 0xC2B7, + 0x8DF3, 0xCCF8, + 0x8DF5, 0xBCF9, + 0x8DF7, 0xF5CE, + 0x8DF8, 0xF5CF, + 0x8DF9, 0xF5D1, + 0x8DFA, 0xB6E5, + 0x8DFB, 0xF5D2, + 0x8DFD, 0xF5D5, + 0x8E05, 0xF5BD, + 0x8E09, 0xF5D4, + 0x8E0A, 0xD3BB, + 0x8E0C, 0xB3EC, + 0x8E0F, 0xCCA4, + 0x8E14, 0xF5D6, + 0x8E1D, 0xF5D7, + 0x8E1E, 0xBEE1, + 0x8E1F, 0xF5D8, + 0x8E22, 0xCCDF, + 0x8E23, 0xF5DB, + 0x8E29, 0xB2C8, + 0x8E2A, 0xD7D9, + 0x8E2C, 0xF5D9, + 0x8E2E, 0xF5DA, + 0x8E2F, 0xF5DC, + 0x8E31, 0xF5E2, + 0x8E35, 0xF5E0, + 0x8E39, 0xF5DF, + 0x8E3A, 0xF5DD, + 0x8E3D, 0xF5E1, + 0x8E40, 0xF5DE, + 0x8E41, 0xF5E4, + 0x8E42, 0xF5E5, + 0x8E44, 0xCCE3, + 0x8E47, 0xE5BF, + 0x8E48, 0xB5B8, + 0x8E49, 0xF5E3, + 0x8E4A, 0xF5E8, + 0x8E4B, 0xCCA3, + 0x8E51, 0xF5E6, + 0x8E52, 0xF5E7, + 0x8E59, 0xF5BE, + 0x8E66, 0xB1C4, + 0x8E69, 0xF5BF, + 0x8E6C, 0xB5C5, + 0x8E6D, 0xB2E4, + 0x8E6F, 0xF5EC, + 0x8E70, 0xF5E9, + 0x8E72, 0xB6D7, + 0x8E74, 0xF5ED, + 0x8E76, 0xF5EA, + 0x8E7C, 0xF5EB, + 0x8E7F, 0xB4DA, + 0x8E81, 0xD4EA, + 0x8E85, 0xF5EE, + 0x8E87, 0xB3F9, + 0x8E8F, 0xF5EF, + 0x8E90, 0xF5F1, + 0x8E94, 0xF5F0, + 0x8E9C, 0xF5F2, + 0x8E9E, 0xF5F3, + 0x8EAB, 0xC9ED, + 0x8EAC, 0xB9AA, + 0x8EAF, 0xC7FB, + 0x8EB2, 0xB6E3, + 0x8EBA, 0xCCC9, + 0x8ECE, 0xEAA6, + 0x8F66, 0xB3B5, + 0x8F67, 0xD4FE, + 0x8F68, 0xB9EC, + 0x8F69, 0xD0F9, + 0x8F6B, 0xE9ED, + 0x8F6C, 0xD7AA, + 0x8F6D, 0xE9EE, + 0x8F6E, 0xC2D6, + 0x8F6F, 0xC8ED, + 0x8F70, 0xBAE4, + 0x8F71, 0xE9EF, + 0x8F72, 0xE9F0, + 0x8F73, 0xE9F1, + 0x8F74, 0xD6E1, + 0x8F75, 0xE9F2, + 0x8F76, 0xE9F3, + 0x8F77, 0xE9F5, + 0x8F78, 0xE9F4, + 0x8F79, 0xE9F6, + 0x8F7A, 0xE9F7, + 0x8F7B, 0xC7E1, + 0x8F7C, 0xE9F8, + 0x8F7D, 0xD4D8, + 0x8F7E, 0xE9F9, + 0x8F7F, 0xBDCE, + 0x8F81, 0xE9FA, + 0x8F82, 0xE9FB, + 0x8F83, 0xBDCF, + 0x8F84, 0xE9FC, + 0x8F85, 0xB8A8, + 0x8F86, 0xC1BE, + 0x8F87, 0xE9FD, + 0x8F88, 0xB1B2, + 0x8F89, 0xBBD4, + 0x8F8A, 0xB9F5, + 0x8F8B, 0xE9FE, + 0x8F8D, 0xEAA1, + 0x8F8E, 0xEAA2, + 0x8F8F, 0xEAA3, + 0x8F90, 0xB7F8, + 0x8F91, 0xBCAD, + 0x8F93, 0xCAE4, + 0x8F94, 0xE0CE, + 0x8F95, 0xD4AF, + 0x8F96, 0xCFBD, + 0x8F97, 0xD5B7, + 0x8F98, 0xEAA4, + 0x8F99, 0xD5DE, + 0x8F9A, 0xEAA5, + 0x8F9B, 0xD0C1, + 0x8F9C, 0xB9BC, + 0x8F9E, 0xB4C7, + 0x8F9F, 0xB1D9, + 0x8FA3, 0xC0B1, + 0x8FA8, 0xB1E6, + 0x8FA9, 0xB1E7, + 0x8FAB, 0xB1E8, + 0x8FB0, 0xB3BD, + 0x8FB1, 0xC8E8, + 0x8FB6, 0xE5C1, + 0x8FB9, 0xB1DF, + 0x8FBD, 0xC1C9, + 0x8FBE, 0xB4EF, + 0x8FC1, 0xC7A8, + 0x8FC2, 0xD3D8, + 0x8FC4, 0xC6F9, + 0x8FC5, 0xD1B8, + 0x8FC7, 0xB9FD, + 0x8FC8, 0xC2F5, + 0x8FCE, 0xD3AD, + 0x8FD0, 0xD4CB, + 0x8FD1, 0xBDFC, + 0x8FD3, 0xE5C2, + 0x8FD4, 0xB7B5, + 0x8FD5, 0xE5C3, + 0x8FD8, 0xBBB9, + 0x8FD9, 0xD5E2, + 0x8FDB, 0xBDF8, + 0x8FDC, 0xD4B6, + 0x8FDD, 0xCEA5, + 0x8FDE, 0xC1AC, + 0x8FDF, 0xB3D9, + 0x8FE2, 0xCCF6, + 0x8FE4, 0xE5C6, + 0x8FE5, 0xE5C4, + 0x8FE6, 0xE5C8, + 0x8FE8, 0xE5CA, + 0x8FE9, 0xE5C7, + 0x8FEA, 0xB5CF, + 0x8FEB, 0xC6C8, + 0x8FED, 0xB5FC, + 0x8FEE, 0xE5C5, + 0x8FF0, 0xCAF6, + 0x8FF3, 0xE5C9, + 0x8FF7, 0xC3D4, + 0x8FF8, 0xB1C5, + 0x8FF9, 0xBCA3, + 0x8FFD, 0xD7B7, + 0x9000, 0xCDCB, + 0x9001, 0xCBCD, + 0x9002, 0xCACA, + 0x9003, 0xCCD3, + 0x9004, 0xE5CC, + 0x9005, 0xE5CB, + 0x9006, 0xC4E6, + 0x9009, 0xD1A1, + 0x900A, 0xD1B7, + 0x900B, 0xE5CD, + 0x900D, 0xE5D0, + 0x900F, 0xCDB8, + 0x9010, 0xD6F0, + 0x9011, 0xE5CF, + 0x9012, 0xB5DD, + 0x9014, 0xCDBE, + 0x9016, 0xE5D1, + 0x9017, 0xB6BA, + 0x901A, 0xCDA8, + 0x901B, 0xB9E4, + 0x901D, 0xCAC5, + 0x901E, 0xB3D1, + 0x901F, 0xCBD9, + 0x9020, 0xD4EC, + 0x9021, 0xE5D2, + 0x9022, 0xB7EA, + 0x9026, 0xE5CE, + 0x902D, 0xE5D5, + 0x902E, 0xB4FE, + 0x902F, 0xE5D6, + 0x9035, 0xE5D3, + 0x9036, 0xE5D4, + 0x9038, 0xD2DD, + 0x903B, 0xC2DF, + 0x903C, 0xB1C6, + 0x903E, 0xD3E2, + 0x9041, 0xB6DD, + 0x9042, 0xCBEC, + 0x9044, 0xE5D7, + 0x9047, 0xD3F6, + 0x904D, 0xB1E9, + 0x904F, 0xB6F4, + 0x9050, 0xE5DA, + 0x9051, 0xE5D8, + 0x9052, 0xE5D9, + 0x9053, 0xB5C0, + 0x9057, 0xD2C5, + 0x9058, 0xE5DC, + 0x905B, 0xE5DE, + 0x9062, 0xE5DD, + 0x9063, 0xC7B2, + 0x9065, 0xD2A3, + 0x9068, 0xE5DB, + 0x906D, 0xD4E2, + 0x906E, 0xD5DA, + 0x9074, 0xE5E0, + 0x9075, 0xD7F1, + 0x907D, 0xE5E1, + 0x907F, 0xB1DC, + 0x9080, 0xD1FB, + 0x9082, 0xE5E2, + 0x9083, 0xE5E4, + 0x9088, 0xE5E3, + 0x908B, 0xE5E5, + 0x9091, 0xD2D8, + 0x9093, 0xB5CB, + 0x9095, 0xE7DF, + 0x9097, 0xDAF5, + 0x9099, 0xDAF8, + 0x909B, 0xDAF6, + 0x909D, 0xDAF7, + 0x90A1, 0xDAFA, + 0x90A2, 0xD0CF, + 0x90A3, 0xC4C7, + 0x90A6, 0xB0EE, + 0x90AA, 0xD0B0, + 0x90AC, 0xDAF9, + 0x90AE, 0xD3CA, + 0x90AF, 0xBAAA, + 0x90B0, 0xDBA2, + 0x90B1, 0xC7F1, + 0x90B3, 0xDAFC, + 0x90B4, 0xDAFB, + 0x90B5, 0xC9DB, + 0x90B6, 0xDAFD, + 0x90B8, 0xDBA1, + 0x90B9, 0xD7DE, + 0x90BA, 0xDAFE, + 0x90BB, 0xC1DA, + 0x90BE, 0xDBA5, + 0x90C1, 0xD3F4, + 0x90C4, 0xDBA7, + 0x90C5, 0xDBA4, + 0x90C7, 0xDBA8, + 0x90CA, 0xBDBC, + 0x90CE, 0xC0C9, + 0x90CF, 0xDBA3, + 0x90D0, 0xDBA6, + 0x90D1, 0xD6A3, + 0x90D3, 0xDBA9, + 0x90D7, 0xDBAD, + 0x90DB, 0xDBAE, + 0x90DC, 0xDBAC, + 0x90DD, 0xBAC2, + 0x90E1, 0xBFA4, + 0x90E2, 0xDBAB, + 0x90E6, 0xDBAA, + 0x90E7, 0xD4C7, + 0x90E8, 0xB2BF, + 0x90EB, 0xDBAF, + 0x90ED, 0xB9F9, + 0x90EF, 0xDBB0, + 0x90F4, 0xB3BB, + 0x90F8, 0xB5A6, + 0x90FD, 0xB6BC, + 0x90FE, 0xDBB1, + 0x9102, 0xB6F5, + 0x9104, 0xDBB2, + 0x9119, 0xB1C9, + 0x911E, 0xDBB4, + 0x9122, 0xDBB3, + 0x9123, 0xDBB5, + 0x912F, 0xDBB7, + 0x9131, 0xDBB6, + 0x9139, 0xDBB8, + 0x9143, 0xDBB9, + 0x9146, 0xDBBA, + 0x9149, 0xD3CF, + 0x914A, 0xF4FA, + 0x914B, 0xC7F5, + 0x914C, 0xD7C3, + 0x914D, 0xC5E4, + 0x914E, 0xF4FC, + 0x914F, 0xF4FD, + 0x9150, 0xF4FB, + 0x9152, 0xBEC6, + 0x9157, 0xD0EF, + 0x915A, 0xB7D3, + 0x915D, 0xD4CD, + 0x915E, 0xCCAA, + 0x9161, 0xF5A2, + 0x9162, 0xF5A1, + 0x9163, 0xBAA8, + 0x9164, 0xF4FE, + 0x9165, 0xCBD6, + 0x9169, 0xF5A4, + 0x916A, 0xC0D2, + 0x916C, 0xB3EA, + 0x916E, 0xCDAA, + 0x916F, 0xF5A5, + 0x9170, 0xF5A3, + 0x9171, 0xBDB4, + 0x9172, 0xF5A8, + 0x9174, 0xF5A9, + 0x9175, 0xBDCD, + 0x9176, 0xC3B8, + 0x9177, 0xBFE1, + 0x9178, 0xCBE1, + 0x9179, 0xF5AA, + 0x917D, 0xF5A6, + 0x917E, 0xF5A7, + 0x917F, 0xC4F0, + 0x9185, 0xF5AC, + 0x9187, 0xB4BC, + 0x9189, 0xD7ED, + 0x918B, 0xB4D7, + 0x918C, 0xF5AB, + 0x918D, 0xF5AE, + 0x9190, 0xF5AD, + 0x9191, 0xF5AF, + 0x9192, 0xD0D1, + 0x919A, 0xC3D1, + 0x919B, 0xC8A9, + 0x91A2, 0xF5B0, + 0x91A3, 0xF5B1, + 0x91AA, 0xF5B2, + 0x91AD, 0xF5B3, + 0x91AE, 0xF5B4, + 0x91AF, 0xF5B5, + 0x91B4, 0xF5B7, + 0x91B5, 0xF5B6, + 0x91BA, 0xF5B8, + 0x91C7, 0xB2C9, + 0x91C9, 0xD3D4, + 0x91CA, 0xCACD, + 0x91CC, 0xC0EF, + 0x91CD, 0xD6D8, + 0x91CE, 0xD2B0, + 0x91CF, 0xC1BF, + 0x91D1, 0xBDF0, + 0x91DC, 0xB8AA, + 0x9274, 0xBCF8, + 0x928E, 0xF6C6, + 0x92AE, 0xF6C7, + 0x92C8, 0xF6C8, + 0x933E, 0xF6C9, + 0x936A, 0xF6CA, + 0x938F, 0xF6CC, + 0x93CA, 0xF6CB, + 0x93D6, 0xF7E9, + 0x943E, 0xF6CD, + 0x946B, 0xF6CE, + 0x9485, 0xEEC4, + 0x9486, 0xEEC5, + 0x9487, 0xEEC6, + 0x9488, 0xD5EB, + 0x9489, 0xB6A4, + 0x948A, 0xEEC8, + 0x948B, 0xEEC7, + 0x948C, 0xEEC9, + 0x948D, 0xEECA, + 0x948E, 0xC7A5, + 0x948F, 0xEECB, + 0x9490, 0xEECC, + 0x9492, 0xB7B0, + 0x9493, 0xB5F6, + 0x9494, 0xEECD, + 0x9495, 0xEECF, + 0x9497, 0xEECE, + 0x9499, 0xB8C6, + 0x949A, 0xEED0, + 0x949B, 0xEED1, + 0x949C, 0xEED2, + 0x949D, 0xB6DB, + 0x949E, 0xB3AE, + 0x949F, 0xD6D3, + 0x94A0, 0xC4C6, + 0x94A1, 0xB1B5, + 0x94A2, 0xB8D6, + 0x94A3, 0xEED3, + 0x94A4, 0xEED4, + 0x94A5, 0xD4BF, + 0x94A6, 0xC7D5, + 0x94A7, 0xBEFB, + 0x94A8, 0xCED9, + 0x94A9, 0xB9B3, + 0x94AA, 0xEED6, + 0x94AB, 0xEED5, + 0x94AC, 0xEED8, + 0x94AD, 0xEED7, + 0x94AE, 0xC5A5, + 0x94AF, 0xEED9, + 0x94B0, 0xEEDA, + 0x94B1, 0xC7AE, + 0x94B2, 0xEEDB, + 0x94B3, 0xC7AF, + 0x94B4, 0xEEDC, + 0x94B5, 0xB2A7, + 0x94B6, 0xEEDD, + 0x94B7, 0xEEDE, + 0x94B8, 0xEEDF, + 0x94B9, 0xEEE0, + 0x94BA, 0xEEE1, + 0x94BB, 0xD7EA, + 0x94BC, 0xEEE2, + 0x94BD, 0xEEE3, + 0x94BE, 0xBCD8, + 0x94BF, 0xEEE4, + 0x94C0, 0xD3CB, + 0x94C1, 0xCCFA, + 0x94C2, 0xB2AC, + 0x94C3, 0xC1E5, + 0x94C4, 0xEEE5, + 0x94C5, 0xC7A6, + 0x94C6, 0xC3AD, + 0x94C8, 0xEEE6, + 0x94C9, 0xEEE7, + 0x94CA, 0xEEE8, + 0x94CB, 0xEEE9, + 0x94CC, 0xEEEA, + 0x94CD, 0xEEEB, + 0x94CE, 0xEEEC, + 0x94D0, 0xEEED, + 0x94D1, 0xEEEE, + 0x94D2, 0xEEEF, + 0x94D5, 0xEEF0, + 0x94D6, 0xEEF1, + 0x94D7, 0xEEF2, + 0x94D8, 0xEEF4, + 0x94D9, 0xEEF3, + 0x94DB, 0xEEF5, + 0x94DC, 0xCDAD, + 0x94DD, 0xC2C1, + 0x94DE, 0xEEF6, + 0x94DF, 0xEEF7, + 0x94E0, 0xEEF8, + 0x94E1, 0xD5A1, + 0x94E2, 0xEEF9, + 0x94E3, 0xCFB3, + 0x94E4, 0xEEFA, + 0x94E5, 0xEEFB, + 0x94E7, 0xEEFC, + 0x94E8, 0xEEFD, + 0x94E9, 0xEFA1, + 0x94EA, 0xEEFE, + 0x94EB, 0xEFA2, + 0x94EC, 0xB8F5, + 0x94ED, 0xC3FA, + 0x94EE, 0xEFA3, + 0x94EF, 0xEFA4, + 0x94F0, 0xBDC2, + 0x94F1, 0xD2BF, + 0x94F2, 0xB2F9, + 0x94F3, 0xEFA5, + 0x94F4, 0xEFA6, + 0x94F5, 0xEFA7, + 0x94F6, 0xD2F8, + 0x94F7, 0xEFA8, + 0x94F8, 0xD6FD, + 0x94F9, 0xEFA9, + 0x94FA, 0xC6CC, + 0x94FC, 0xEFAA, + 0x94FD, 0xEFAB, + 0x94FE, 0xC1B4, + 0x94FF, 0xEFAC, + 0x9500, 0xCFFA, + 0x9501, 0xCBF8, + 0x9502, 0xEFAE, + 0x9503, 0xEFAD, + 0x9504, 0xB3FA, + 0x9505, 0xB9F8, + 0x9506, 0xEFAF, + 0x9507, 0xEFB0, + 0x9508, 0xD0E2, + 0x9509, 0xEFB1, + 0x950A, 0xEFB2, + 0x950B, 0xB7E6, + 0x950C, 0xD0BF, + 0x950D, 0xEFB3, + 0x950E, 0xEFB4, + 0x950F, 0xEFB5, + 0x9510, 0xC8F1, + 0x9511, 0xCCE0, + 0x9512, 0xEFB6, + 0x9513, 0xEFB7, + 0x9514, 0xEFB8, + 0x9515, 0xEFB9, + 0x9516, 0xEFBA, + 0x9517, 0xD5E0, + 0x9518, 0xEFBB, + 0x9519, 0xB4ED, + 0x951A, 0xC3AA, + 0x951B, 0xEFBC, + 0x951D, 0xEFBD, + 0x951E, 0xEFBE, + 0x951F, 0xEFBF, + 0x9521, 0xCEFD, + 0x9522, 0xEFC0, + 0x9523, 0xC2E0, + 0x9524, 0xB4B8, + 0x9525, 0xD7B6, + 0x9526, 0xBDF5, + 0x9528, 0xCFC7, + 0x9529, 0xEFC3, + 0x952A, 0xEFC1, + 0x952B, 0xEFC2, + 0x952C, 0xEFC4, + 0x952D, 0xB6A7, + 0x952E, 0xBCFC, + 0x952F, 0xBEE2, + 0x9530, 0xC3CC, + 0x9531, 0xEFC5, + 0x9532, 0xEFC6, + 0x9534, 0xEFC7, + 0x9535, 0xEFCF, + 0x9536, 0xEFC8, + 0x9537, 0xEFC9, + 0x9538, 0xEFCA, + 0x9539, 0xC7C2, + 0x953A, 0xEFF1, + 0x953B, 0xB6CD, + 0x953C, 0xEFCB, + 0x953E, 0xEFCC, + 0x953F, 0xEFCD, + 0x9540, 0xB6C6, + 0x9541, 0xC3BE, + 0x9542, 0xEFCE, + 0x9544, 0xEFD0, + 0x9545, 0xEFD1, + 0x9546, 0xEFD2, + 0x9547, 0xD5F2, + 0x9549, 0xEFD3, + 0x954A, 0xC4F7, + 0x954C, 0xEFD4, + 0x954D, 0xC4F8, + 0x954E, 0xEFD5, + 0x954F, 0xEFD6, + 0x9550, 0xB8E4, + 0x9551, 0xB0F7, + 0x9552, 0xEFD7, + 0x9553, 0xEFD8, + 0x9554, 0xEFD9, + 0x9556, 0xEFDA, + 0x9557, 0xEFDB, + 0x9558, 0xEFDC, + 0x9559, 0xEFDD, + 0x955B, 0xEFDE, + 0x955C, 0xBEB5, + 0x955D, 0xEFE1, + 0x955E, 0xEFDF, + 0x955F, 0xEFE0, + 0x9561, 0xEFE2, + 0x9562, 0xEFE3, + 0x9563, 0xC1CD, + 0x9564, 0xEFE4, + 0x9565, 0xEFE5, + 0x9566, 0xEFE6, + 0x9567, 0xEFE7, + 0x9568, 0xEFE8, + 0x9569, 0xEFE9, + 0x956A, 0xEFEA, + 0x956B, 0xEFEB, + 0x956C, 0xEFEC, + 0x956D, 0xC0D8, + 0x956F, 0xEFED, + 0x9570, 0xC1AD, + 0x9571, 0xEFEE, + 0x9572, 0xEFEF, + 0x9573, 0xEFF0, + 0x9576, 0xCFE2, + 0x957F, 0xB3A4, + 0x95E8, 0xC3C5, + 0x95E9, 0xE3C5, + 0x95EA, 0xC9C1, + 0x95EB, 0xE3C6, + 0x95ED, 0xB1D5, + 0x95EE, 0xCECA, + 0x95EF, 0xB4B3, + 0x95F0, 0xC8F2, + 0x95F1, 0xE3C7, + 0x95F2, 0xCFD0, + 0x95F3, 0xE3C8, + 0x95F4, 0xBCE4, + 0x95F5, 0xE3C9, + 0x95F6, 0xE3CA, + 0x95F7, 0xC3C6, + 0x95F8, 0xD5A2, + 0x95F9, 0xC4D6, + 0x95FA, 0xB9EB, + 0x95FB, 0xCEC5, + 0x95FC, 0xE3CB, + 0x95FD, 0xC3F6, + 0x95FE, 0xE3CC, + 0x9600, 0xB7A7, + 0x9601, 0xB8F3, + 0x9602, 0xBAD2, + 0x9603, 0xE3CD, + 0x9604, 0xE3CE, + 0x9605, 0xD4C4, + 0x9606, 0xE3CF, + 0x9608, 0xE3D0, + 0x9609, 0xD1CB, + 0x960A, 0xE3D1, + 0x960B, 0xE3D2, + 0x960C, 0xE3D3, + 0x960D, 0xE3D4, + 0x960E, 0xD1D6, + 0x960F, 0xE3D5, + 0x9610, 0xB2FB, + 0x9611, 0xC0BB, + 0x9612, 0xE3D6, + 0x9614, 0xC0AB, + 0x9615, 0xE3D7, + 0x9616, 0xE3D8, + 0x9617, 0xE3D9, + 0x9619, 0xE3DA, + 0x961A, 0xE3DB, + 0x961C, 0xB8B7, + 0x961D, 0xDAE2, + 0x961F, 0xB6D3, + 0x9621, 0xDAE4, + 0x9622, 0xDAE3, + 0x962A, 0xDAE6, + 0x962E, 0xC8EE, + 0x9631, 0xDAE5, + 0x9632, 0xB7C0, + 0x9633, 0xD1F4, + 0x9634, 0xD2F5, + 0x9635, 0xD5F3, + 0x9636, 0xBDD7, + 0x963B, 0xD7E8, + 0x963C, 0xDAE8, + 0x963D, 0xDAE7, + 0x963F, 0xB0A2, + 0x9640, 0xCDD3, + 0x9642, 0xDAE9, + 0x9644, 0xB8BD, + 0x9645, 0xBCCA, + 0x9646, 0xC2BD, + 0x9647, 0xC2A4, + 0x9648, 0xB3C2, + 0x9649, 0xDAEA, + 0x964B, 0xC2AA, + 0x964C, 0xC4B0, + 0x964D, 0xBDB5, + 0x9650, 0xCFDE, + 0x9654, 0xDAEB, + 0x9655, 0xC9C2, + 0x965B, 0xB1DD, + 0x965F, 0xDAEC, + 0x9661, 0xB6B8, + 0x9662, 0xD4BA, + 0x9664, 0xB3FD, + 0x9667, 0xDAED, + 0x9668, 0xD4C9, + 0x9669, 0xCFD5, + 0x966A, 0xC5E3, + 0x966C, 0xDAEE, + 0x9672, 0xDAEF, + 0x9674, 0xDAF0, + 0x9675, 0xC1EA, + 0x9676, 0xCCD5, + 0x9677, 0xCFDD, + 0x9685, 0xD3E7, + 0x9686, 0xC2A1, + 0x9688, 0xDAF1, + 0x968B, 0xCBE5, + 0x968D, 0xDAF2, + 0x968F, 0xCBE6, + 0x9690, 0xD2FE, + 0x9694, 0xB8F4, + 0x9697, 0xDAF3, + 0x9698, 0xB0AF, + 0x9699, 0xCFB6, + 0x969C, 0xD5CF, + 0x96A7, 0xCBED, + 0x96B0, 0xDAF4, + 0x96B3, 0xE3C4, + 0x96B6, 0xC1A5, + 0x96B9, 0xF6BF, + 0x96BC, 0xF6C0, + 0x96BD, 0xF6C1, + 0x96BE, 0xC4D1, + 0x96C0, 0xC8B8, + 0x96C1, 0xD1E3, + 0x96C4, 0xD0DB, + 0x96C5, 0xD1C5, + 0x96C6, 0xBCAF, + 0x96C7, 0xB9CD, + 0x96C9, 0xEFF4, + 0x96CC, 0xB4C6, + 0x96CD, 0xD3BA, + 0x96CE, 0xF6C2, + 0x96CF, 0xB3FB, + 0x96D2, 0xF6C3, + 0x96D5, 0xB5F1, + 0x96E0, 0xF6C5, + 0x96E8, 0xD3EA, + 0x96E9, 0xF6A7, + 0x96EA, 0xD1A9, + 0x96EF, 0xF6A9, + 0x96F3, 0xF6A8, + 0x96F6, 0xC1E3, + 0x96F7, 0xC0D7, + 0x96F9, 0xB1A2, + 0x96FE, 0xCEED, + 0x9700, 0xD0E8, + 0x9701, 0xF6AB, + 0x9704, 0xCFF6, + 0x9706, 0xF6AA, + 0x9707, 0xD5F0, + 0x9708, 0xF6AC, + 0x9709, 0xC3B9, + 0x970D, 0xBBF4, + 0x970E, 0xF6AE, + 0x970F, 0xF6AD, + 0x9713, 0xC4DE, + 0x9716, 0xC1D8, + 0x971C, 0xCBAA, + 0x971E, 0xCFBC, + 0x972A, 0xF6AF, + 0x972D, 0xF6B0, + 0x9730, 0xF6B1, + 0x9732, 0xC2B6, + 0x9738, 0xB0D4, + 0x9739, 0xC5F9, + 0x973E, 0xF6B2, + 0x9752, 0xC7E0, + 0x9753, 0xF6A6, + 0x9756, 0xBEB8, + 0x9759, 0xBEB2, + 0x975B, 0xB5E5, + 0x975E, 0xB7C7, + 0x9760, 0xBFBF, + 0x9761, 0xC3D2, + 0x9762, 0xC3E6, + 0x9765, 0xD8CC, + 0x9769, 0xB8EF, + 0x9773, 0xBDF9, + 0x9774, 0xD1A5, + 0x9776, 0xB0D0, + 0x977C, 0xF7B0, + 0x9785, 0xF7B1, + 0x978B, 0xD0AC, + 0x978D, 0xB0B0, + 0x9791, 0xF7B2, + 0x9792, 0xF7B3, + 0x9794, 0xF7B4, + 0x9798, 0xC7CA, + 0x97A0, 0xBECF, + 0x97A3, 0xF7B7, + 0x97AB, 0xF7B6, + 0x97AD, 0xB1DE, + 0x97AF, 0xF7B5, + 0x97B2, 0xF7B8, + 0x97B4, 0xF7B9, + 0x97E6, 0xCEA4, + 0x97E7, 0xC8CD, + 0x97E9, 0xBAAB, + 0x97EA, 0xE8B8, + 0x97EB, 0xE8B9, + 0x97EC, 0xE8BA, + 0x97ED, 0xBEC2, + 0x97F3, 0xD2F4, + 0x97F5, 0xD4CF, + 0x97F6, 0xC9D8, + 0x9875, 0xD2B3, + 0x9876, 0xB6A5, + 0x9877, 0xC7EA, + 0x9878, 0xF1FC, + 0x9879, 0xCFEE, + 0x987A, 0xCBB3, + 0x987B, 0xD0EB, + 0x987C, 0xE7EF, + 0x987D, 0xCDE7, + 0x987E, 0xB9CB, + 0x987F, 0xB6D9, + 0x9880, 0xF1FD, + 0x9881, 0xB0E4, + 0x9882, 0xCBCC, + 0x9883, 0xF1FE, + 0x9884, 0xD4A4, + 0x9885, 0xC2AD, + 0x9886, 0xC1EC, + 0x9887, 0xC6C4, + 0x9888, 0xBEB1, + 0x9889, 0xF2A1, + 0x988A, 0xBCD5, + 0x988C, 0xF2A2, + 0x988D, 0xF2A3, + 0x988F, 0xF2A4, + 0x9890, 0xD2C3, + 0x9891, 0xC6B5, + 0x9893, 0xCDC7, + 0x9894, 0xF2A5, + 0x9896, 0xD3B1, + 0x9897, 0xBFC5, + 0x9898, 0xCCE2, + 0x989A, 0xF2A6, + 0x989B, 0xF2A7, + 0x989C, 0xD1D5, + 0x989D, 0xB6EE, + 0x989E, 0xF2A8, + 0x989F, 0xF2A9, + 0x98A0, 0xB5DF, + 0x98A1, 0xF2AA, + 0x98A2, 0xF2AB, + 0x98A4, 0xB2FC, + 0x98A5, 0xF2AC, + 0x98A6, 0xF2AD, + 0x98A7, 0xC8A7, + 0x98CE, 0xB7E7, + 0x98D1, 0xECA9, + 0x98D2, 0xECAA, + 0x98D3, 0xECAB, + 0x98D5, 0xECAC, + 0x98D8, 0xC6AE, + 0x98D9, 0xECAD, + 0x98DA, 0xECAE, + 0x98DE, 0xB7C9, + 0x98DF, 0xCAB3, + 0x98E7, 0xE2B8, + 0x98E8, 0xF7CF, + 0x990D, 0xF7D0, + 0x9910, 0xB2CD, + 0x992E, 0xF7D1, + 0x9954, 0xF7D3, + 0x9955, 0xF7D2, + 0x9963, 0xE2BB, + 0x9965, 0xBCA2, + 0x9967, 0xE2BC, + 0x9968, 0xE2BD, + 0x9969, 0xE2BE, + 0x996A, 0xE2BF, + 0x996B, 0xE2C0, + 0x996C, 0xE2C1, + 0x996D, 0xB7B9, + 0x996E, 0xD2FB, + 0x996F, 0xBDA4, + 0x9970, 0xCACE, + 0x9971, 0xB1A5, + 0x9972, 0xCBC7, + 0x9974, 0xE2C2, + 0x9975, 0xB6FC, + 0x9976, 0xC8C4, + 0x9977, 0xE2C3, + 0x997A, 0xBDC8, + 0x997C, 0xB1FD, + 0x997D, 0xE2C4, + 0x997F, 0xB6F6, + 0x9980, 0xE2C5, + 0x9981, 0xC4D9, + 0x9984, 0xE2C6, + 0x9985, 0xCFDA, + 0x9986, 0xB9DD, + 0x9987, 0xE2C7, + 0x9988, 0xC0A1, + 0x998A, 0xE2C8, + 0x998B, 0xB2F6, + 0x998D, 0xE2C9, + 0x998F, 0xC1F3, + 0x9990, 0xE2CA, + 0x9991, 0xE2CB, + 0x9992, 0xC2F8, + 0x9993, 0xE2CC, + 0x9994, 0xE2CD, + 0x9995, 0xE2CE, + 0x9996, 0xCAD7, + 0x9997, 0xD8B8, + 0x9998, 0xD9E5, + 0x9999, 0xCFE3, + 0x99A5, 0xF0A5, + 0x99A8, 0xDCB0, + 0x9A6C, 0xC2ED, + 0x9A6D, 0xD4A6, + 0x9A6E, 0xCDD4, + 0x9A6F, 0xD1B1, + 0x9A70, 0xB3DB, + 0x9A71, 0xC7FD, + 0x9A73, 0xB2B5, + 0x9A74, 0xC2BF, + 0x9A75, 0xE6E0, + 0x9A76, 0xCABB, + 0x9A77, 0xE6E1, + 0x9A78, 0xE6E2, + 0x9A79, 0xBED4, + 0x9A7A, 0xE6E3, + 0x9A7B, 0xD7A4, + 0x9A7C, 0xCDD5, + 0x9A7D, 0xE6E5, + 0x9A7E, 0xBCDD, + 0x9A7F, 0xE6E4, + 0x9A80, 0xE6E6, + 0x9A81, 0xE6E7, + 0x9A82, 0xC2EE, + 0x9A84, 0xBDBE, + 0x9A85, 0xE6E8, + 0x9A86, 0xC2E6, + 0x9A87, 0xBAA7, + 0x9A88, 0xE6E9, + 0x9A8A, 0xE6EA, + 0x9A8B, 0xB3D2, + 0x9A8C, 0xD1E9, + 0x9A8F, 0xBFA5, + 0x9A90, 0xE6EB, + 0x9A91, 0xC6EF, + 0x9A92, 0xE6EC, + 0x9A93, 0xE6ED, + 0x9A96, 0xE6EE, + 0x9A97, 0xC6AD, + 0x9A98, 0xE6EF, + 0x9A9A, 0xC9A7, + 0x9A9B, 0xE6F0, + 0x9A9C, 0xE6F1, + 0x9A9D, 0xE6F2, + 0x9A9E, 0xE5B9, + 0x9A9F, 0xE6F3, + 0x9AA0, 0xE6F4, + 0x9AA1, 0xC2E2, + 0x9AA2, 0xE6F5, + 0x9AA3, 0xE6F6, + 0x9AA4, 0xD6E8, + 0x9AA5, 0xE6F7, + 0x9AA7, 0xE6F8, + 0x9AA8, 0xB9C7, + 0x9AB0, 0xF7BB, + 0x9AB1, 0xF7BA, + 0x9AB6, 0xF7BE, + 0x9AB7, 0xF7BC, + 0x9AB8, 0xBAA1, + 0x9ABA, 0xF7BF, + 0x9ABC, 0xF7C0, + 0x9AC0, 0xF7C2, + 0x9AC1, 0xF7C1, + 0x9AC2, 0xF7C4, + 0x9AC5, 0xF7C3, + 0x9ACB, 0xF7C5, + 0x9ACC, 0xF7C6, + 0x9AD1, 0xF7C7, + 0x9AD3, 0xCBE8, + 0x9AD8, 0xB8DF, + 0x9ADF, 0xF7D4, + 0x9AE1, 0xF7D5, + 0x9AE6, 0xF7D6, + 0x9AEB, 0xF7D8, + 0x9AED, 0xF7DA, + 0x9AEF, 0xF7D7, + 0x9AF9, 0xF7DB, + 0x9AFB, 0xF7D9, + 0x9B03, 0xD7D7, + 0x9B08, 0xF7DC, + 0x9B0F, 0xF7DD, + 0x9B13, 0xF7DE, + 0x9B1F, 0xF7DF, + 0x9B23, 0xF7E0, + 0x9B2F, 0xDBCB, + 0x9B32, 0xD8AA, + 0x9B3B, 0xE5F7, + 0x9B3C, 0xB9ED, + 0x9B41, 0xBFFD, + 0x9B42, 0xBBEA, + 0x9B43, 0xF7C9, + 0x9B44, 0xC6C7, + 0x9B45, 0xF7C8, + 0x9B47, 0xF7CA, + 0x9B48, 0xF7CC, + 0x9B49, 0xF7CB, + 0x9B4D, 0xF7CD, + 0x9B4F, 0xCEBA, + 0x9B51, 0xF7CE, + 0x9B54, 0xC4A7, + 0x9C7C, 0xD3E3, + 0x9C7F, 0xF6CF, + 0x9C81, 0xC2B3, + 0x9C82, 0xF6D0, + 0x9C85, 0xF6D1, + 0x9C86, 0xF6D2, + 0x9C87, 0xF6D3, + 0x9C88, 0xF6D4, + 0x9C8B, 0xF6D6, + 0x9C8D, 0xB1AB, + 0x9C8E, 0xF6D7, + 0x9C90, 0xF6D8, + 0x9C91, 0xF6D9, + 0x9C92, 0xF6DA, + 0x9C94, 0xF6DB, + 0x9C95, 0xF6DC, + 0x9C9A, 0xF6DD, + 0x9C9B, 0xF6DE, + 0x9C9C, 0xCFCA, + 0x9C9E, 0xF6DF, + 0x9C9F, 0xF6E0, + 0x9CA0, 0xF6E1, + 0x9CA1, 0xF6E2, + 0x9CA2, 0xF6E3, + 0x9CA3, 0xF6E4, + 0x9CA4, 0xC0F0, + 0x9CA5, 0xF6E5, + 0x9CA6, 0xF6E6, + 0x9CA7, 0xF6E7, + 0x9CA8, 0xF6E8, + 0x9CA9, 0xF6E9, + 0x9CAB, 0xF6EA, + 0x9CAD, 0xF6EB, + 0x9CAE, 0xF6EC, + 0x9CB0, 0xF6ED, + 0x9CB1, 0xF6EE, + 0x9CB2, 0xF6EF, + 0x9CB3, 0xF6F0, + 0x9CB4, 0xF6F1, + 0x9CB5, 0xF6F2, + 0x9CB6, 0xF6F3, + 0x9CB7, 0xF6F4, + 0x9CB8, 0xBEA8, + 0x9CBA, 0xF6F5, + 0x9CBB, 0xF6F6, + 0x9CBC, 0xF6F7, + 0x9CBD, 0xF6F8, + 0x9CC3, 0xC8FA, + 0x9CC4, 0xF6F9, + 0x9CC5, 0xF6FA, + 0x9CC6, 0xF6FB, + 0x9CC7, 0xF6FC, + 0x9CCA, 0xF6FD, + 0x9CCB, 0xF6FE, + 0x9CCC, 0xF7A1, + 0x9CCD, 0xF7A2, + 0x9CCE, 0xF7A3, + 0x9CCF, 0xF7A4, + 0x9CD0, 0xF7A5, + 0x9CD3, 0xF7A6, + 0x9CD4, 0xF7A7, + 0x9CD5, 0xF7A8, + 0x9CD6, 0xB1EE, + 0x9CD7, 0xF7A9, + 0x9CD8, 0xF7AA, + 0x9CD9, 0xF7AB, + 0x9CDC, 0xF7AC, + 0x9CDD, 0xF7AD, + 0x9CDE, 0xC1DB, + 0x9CDF, 0xF7AE, + 0x9CE2, 0xF7AF, + 0x9E1F, 0xC4F1, + 0x9E20, 0xF0AF, + 0x9E21, 0xBCA6, + 0x9E22, 0xF0B0, + 0x9E23, 0xC3F9, + 0x9E25, 0xC5B8, + 0x9E26, 0xD1BB, + 0x9E28, 0xF0B1, + 0x9E29, 0xF0B2, + 0x9E2A, 0xF0B3, + 0x9E2B, 0xF0B4, + 0x9E2C, 0xF0B5, + 0x9E2D, 0xD1BC, + 0x9E2F, 0xD1EC, + 0x9E31, 0xF0B7, + 0x9E32, 0xF0B6, + 0x9E33, 0xD4A7, + 0x9E35, 0xCDD2, + 0x9E36, 0xF0B8, + 0x9E37, 0xF0BA, + 0x9E38, 0xF0B9, + 0x9E39, 0xF0BB, + 0x9E3A, 0xF0BC, + 0x9E3D, 0xB8EB, + 0x9E3E, 0xF0BD, + 0x9E3F, 0xBAE8, + 0x9E41, 0xF0BE, + 0x9E42, 0xF0BF, + 0x9E43, 0xBEE9, + 0x9E44, 0xF0C0, + 0x9E45, 0xB6EC, + 0x9E46, 0xF0C1, + 0x9E47, 0xF0C2, + 0x9E48, 0xF0C3, + 0x9E49, 0xF0C4, + 0x9E4A, 0xC8B5, + 0x9E4B, 0xF0C5, + 0x9E4C, 0xF0C6, + 0x9E4E, 0xF0C7, + 0x9E4F, 0xC5F4, + 0x9E51, 0xF0C8, + 0x9E55, 0xF0C9, + 0x9E57, 0xF0CA, + 0x9E58, 0xF7BD, + 0x9E5A, 0xF0CB, + 0x9E5B, 0xF0CC, + 0x9E5C, 0xF0CD, + 0x9E5E, 0xF0CE, + 0x9E63, 0xF0CF, + 0x9E64, 0xBAD7, + 0x9E66, 0xF0D0, + 0x9E67, 0xF0D1, + 0x9E68, 0xF0D2, + 0x9E69, 0xF0D3, + 0x9E6A, 0xF0D4, + 0x9E6B, 0xF0D5, + 0x9E6C, 0xF0D6, + 0x9E6D, 0xF0D8, + 0x9E70, 0xD3A5, + 0x9E71, 0xF0D7, + 0x9E73, 0xF0D9, + 0x9E7E, 0xF5BA, + 0x9E7F, 0xC2B9, + 0x9E82, 0xF7E4, + 0x9E87, 0xF7E5, + 0x9E88, 0xF7E6, + 0x9E8B, 0xF7E7, + 0x9E92, 0xF7E8, + 0x9E93, 0xC2B4, + 0x9E9D, 0xF7EA, + 0x9E9F, 0xF7EB, + 0x9EA6, 0xC2F3, + 0x9EB4, 0xF4F0, + 0x9EB8, 0xF4EF, + 0x9EBB, 0xC2E9, + 0x9EBD, 0xF7E1, + 0x9EBE, 0xF7E2, + 0x9EC4, 0xBBC6, + 0x9EC9, 0xD9E4, + 0x9ECD, 0xCAF2, + 0x9ECE, 0xC0E8, + 0x9ECF, 0xF0A4, + 0x9ED1, 0xBADA, + 0x9ED4, 0xC7AD, + 0x9ED8, 0xC4AC, + 0x9EDB, 0xF7EC, + 0x9EDC, 0xF7ED, + 0x9EDD, 0xF7EE, + 0x9EDF, 0xF7F0, + 0x9EE0, 0xF7EF, + 0x9EE2, 0xF7F1, + 0x9EE5, 0xF7F4, + 0x9EE7, 0xF7F3, + 0x9EE9, 0xF7F2, + 0x9EEA, 0xF7F5, + 0x9EEF, 0xF7F6, + 0x9EF9, 0xEDE9, + 0x9EFB, 0xEDEA, + 0x9EFC, 0xEDEB, + 0x9EFE, 0xF6BC, + 0x9F0B, 0xF6BD, + 0x9F0D, 0xF6BE, + 0x9F0E, 0xB6A6, + 0x9F10, 0xD8BE, + 0x9F13, 0xB9C4, + 0x9F17, 0xD8BB, + 0x9F19, 0xDCB1, + 0x9F20, 0xCAF3, + 0x9F22, 0xF7F7, + 0x9F2C, 0xF7F8, + 0x9F2F, 0xF7F9, + 0x9F37, 0xF7FB, + 0x9F39, 0xF7FA, + 0x9F3B, 0xB1C7, + 0x9F3D, 0xF7FC, + 0x9F3E, 0xF7FD, + 0x9F44, 0xF7FE, + 0x9F50, 0xC6EB, + 0x9F51, 0xECB4, + 0x9F7F, 0xB3DD, + 0x9F80, 0xF6B3, + 0x9F83, 0xF6B4, + 0x9F84, 0xC1E4, + 0x9F85, 0xF6B5, + 0x9F86, 0xF6B6, + 0x9F87, 0xF6B7, + 0x9F88, 0xF6B8, + 0x9F89, 0xF6B9, + 0x9F8A, 0xF6BA, + 0x9F8B, 0xC8A3, + 0x9F8C, 0xF6BB, + 0x9F99, 0xC1FA, + 0x9F9A, 0xB9A8, + 0x9F9B, 0xEDE8, + 0x9F9F, 0xB9EA, + 0x9FA0, 0xD9DF, + 0xFF01, 0xA3A1, + 0xFF02, 0xA3A2, + 0xFF03, 0xA3A3, + 0xFF04, 0xA1E7, + 0xFF05, 0xA3A5, + 0xFF06, 0xA3A6, + 0xFF07, 0xA3A7, + 0xFF08, 0xA3A8, + 0xFF09, 0xA3A9, + 0xFF0A, 0xA3AA, + 0xFF0B, 0xA3AB, + 0xFF0C, 0xA3AC, + 0xFF0D, 0xA3AD, + 0xFF0E, 0xA3AE, + 0xFF0F, 0xA3AF, + 0xFF10, 0xA3B0, + 0xFF11, 0xA3B1, + 0xFF12, 0xA3B2, + 0xFF13, 0xA3B3, + 0xFF14, 0xA3B4, + 0xFF15, 0xA3B5, + 0xFF16, 0xA3B6, + 0xFF17, 0xA3B7, + 0xFF18, 0xA3B8, + 0xFF19, 0xA3B9, + 0xFF1A, 0xA3BA, + 0xFF1B, 0xA3BB, + 0xFF1C, 0xA3BC, + 0xFF1D, 0xA3BD, + 0xFF1E, 0xA3BE, + 0xFF1F, 0xA3BF, + 0xFF20, 0xA3C0, + 0xFF21, 0xA3C1, + 0xFF22, 0xA3C2, + 0xFF23, 0xA3C3, + 0xFF24, 0xA3C4, + 0xFF25, 0xA3C5, + 0xFF26, 0xA3C6, + 0xFF27, 0xA3C7, + 0xFF28, 0xA3C8, + 0xFF29, 0xA3C9, + 0xFF2A, 0xA3CA, + 0xFF2B, 0xA3CB, + 0xFF2C, 0xA3CC, + 0xFF2D, 0xA3CD, + 0xFF2E, 0xA3CE, + 0xFF2F, 0xA3CF, + 0xFF30, 0xA3D0, + 0xFF31, 0xA3D1, + 0xFF32, 0xA3D2, + 0xFF33, 0xA3D3, + 0xFF34, 0xA3D4, + 0xFF35, 0xA3D5, + 0xFF36, 0xA3D6, + 0xFF37, 0xA3D7, + 0xFF38, 0xA3D8, + 0xFF39, 0xA3D9, + 0xFF3A, 0xA3DA, + 0xFF3B, 0xA3DB, + 0xFF3C, 0xA3DC, + 0xFF3D, 0xA3DD, + 0xFF3E, 0xA3DE, + 0xFF3F, 0xA3DF, + 0xFF40, 0xA3E0, + 0xFF41, 0xA3E1, + 0xFF42, 0xA3E2, + 0xFF43, 0xA3E3, + 0xFF44, 0xA3E4, + 0xFF45, 0xA3E5, + 0xFF46, 0xA3E6, + 0xFF47, 0xA3E7, + 0xFF48, 0xA3E8, + 0xFF49, 0xA3E9, + 0xFF4A, 0xA3EA, + 0xFF4B, 0xA3EB, + 0xFF4C, 0xA3EC, + 0xFF4D, 0xA3ED, + 0xFF4E, 0xA3EE, + 0xFF4F, 0xA3EF, + 0xFF50, 0xA3F0, + 0xFF51, 0xA3F1, + 0xFF52, 0xA3F2, + 0xFF53, 0xA3F3, + 0xFF54, 0xA3F4, + 0xFF55, 0xA3F5, + 0xFF56, 0xA3F6, + 0xFF57, 0xA3F7, + 0xFF58, 0xA3F8, + 0xFF59, 0xA3F9, + 0xFF5A, 0xA3FA, + 0xFF5B, 0xA3FB, + 0xFF5C, 0xA3FC, + 0xFF5D, 0xA3FD, + 0xFF5E, 0xA1AB, + 0xFFE0, 0xA1E9, + 0xFFE1, 0xA1EA, + 0xFFE3, 0xA3FE, + 0xFFE5, 0xA3A4 +}; -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -INTERNAL int gb2312_wctomb_zint(unsigned int* r, unsigned int wc); -INTERNAL int gb2312_utf8tomb(struct zint_symbol *symbol, const unsigned char source[], size_t* p_length, unsigned int* gbdata); -INTERNAL int gb2312_utf8tosb(int eci, const unsigned char source[], size_t* p_length, unsigned int* gbdata, int full_multibyte); -INTERNAL void gb2312_cpy(const unsigned char source[], size_t* p_length, unsigned int* gbdata, int full_multibyte); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* GB2312_H */ diff --git a/backend/general_field.c b/backend/general_field.c index 13c5ed0..a2fdc75 100644 --- a/backend/general_field.c +++ b/backend/general_field.c @@ -91,7 +91,7 @@ static int general_field_next_none(char* general_field, int i, int general_field /* Attempts to apply encoding rules from sections 7.2.5.5.1 to 7.2.5.5.3 * of ISO/IEC 24724:2011 (same as sections 5.4.1 to 5.4.3 of ISO/IEC 24723:2010) */ -INTERNAL int general_field_encode(char* general_field, int* p_mode, int* p_last_digit, char binary_string[]) { +int general_field_encode(char* general_field, int* p_mode, int* p_last_digit, char binary_string[]) { int i, d1, d2; int mode = *p_mode; int last_digit = 0; /* Set to odd remaining digit at end if any */ diff --git a/backend/general_field.h b/backend/general_field.h index 11db071..18be2f3 100644 --- a/backend/general_field.h +++ b/backend/general_field.h @@ -39,7 +39,7 @@ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ - INTERNAL int general_field_encode(char* general_field, int* p_mode, int* p_last_digit, char binary_string[]); + extern int general_field_encode(char* general_field, int* p_mode, int* p_last_digit, char binary_string[]); #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/backend/gif.c b/backend/gif.c index c5b19ee..c02aefe 100644 --- a/backend/gif.c +++ b/backend/gif.c @@ -2,7 +2,7 @@ /* libzint - the open source barcode library - Copyright (C) 2009 - 2020 Robin Stuart + Copyright (C) 2009-2017 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -29,9 +29,9 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ #include +#include #include #include "common.h" #include @@ -41,13 +41,17 @@ #include #endif -#define SSET "0123456789ABCDEF" +#define SSET "0123456789ABCDEF" /* Index of transparent color, -1 for no transparent color * This might be set into a variable if transparency is activated as an option */ #define TRANSPARENT_INDEX (-1) +/* Used bit depth, may be changed for bigger pallet in future */ +#define DESTINATION_IMAGE_BITS 1 +#include + typedef struct s_statestruct { unsigned char * pOut; unsigned char *pIn; @@ -62,30 +66,8 @@ typedef struct s_statestruct { unsigned short NodeAxon[4096]; unsigned short NodeNext[4096]; unsigned char NodePix[4096]; - unsigned char colourCode[10]; - unsigned char colourPaletteIndex[10]; - int colourCount; } statestruct; -/* Transform a Pixel to a lzw colourmap index and move to next pixel. - * All colour values are listed in colourCode with corresponding palette index - */ -static unsigned char NextPaletteIndex(statestruct *pState) -{ - unsigned char pixelColour; - int colourIndex; - pixelColour = *(pState->pIn); - (pState->pIn)++; - (pState->InLen)--; - for (colourIndex = 0; colourIndex < pState->colourCount; colourIndex++) { - if (pixelColour == pState->colourCode[colourIndex]) - return pState->colourPaletteIndex[colourIndex]; - - } - return 0; /* Not reached */ -} - - static char BufferNextByte(statestruct *pState) { (pState->OutPosCur)++; /* Check if this position is a byte count position @@ -102,7 +84,6 @@ static char BufferNextByte(statestruct *pState) { } if (pState->OutPosCur >= pState->OutLength) return 1; - (pState->pOut)[pState->OutPosCur] = 0x00; return 0; } @@ -129,7 +110,7 @@ static char AddCodeToBuffer(statestruct *pState, unsigned short CodeIn, unsigned /* The remaining bits of CodeIn fit in the current byte. */ if (CodeBits > 0) { (pState->pOut)[pState->OutPosCur] |= (unsigned char) - (CodeIn << (8 - pState->OutBitsFree)); + (CodeIn << (8 - pState->OutBitsFree)); pState->OutBitsFree -= CodeBits; } return 0; @@ -142,7 +123,7 @@ static void FlushStringTable(statestruct *pState) { } } -static unsigned short FindPixelOutlet(statestruct *pState, unsigned short HeadNode, unsigned char Byte) { +unsigned short FindPixelOutlet(statestruct *pState, unsigned short HeadNode, unsigned char Byte) { unsigned short Outlet; Outlet = (pState->NodeAxon)[HeadNode]; @@ -162,14 +143,18 @@ static char NextCode(statestruct *pState, unsigned char * pPixelValueCur, unsign if ((pState->InLen) == 0) return AddCodeToBuffer(pState, UpNode, CodeBits); - *pPixelValueCur = NextPaletteIndex(pState); + *pPixelValueCur = (*(pState->pIn)) - '0'; + (pState->pIn)++; + (pState->InLen)--; /* Follow the string table and the data stream to the end of the longest string that has a code */ while (0 != (DownNode = FindPixelOutlet(pState, UpNode, *pPixelValueCur))) { UpNode = DownNode; if ((pState->InLen) == 0) return AddCodeToBuffer(pState, UpNode, CodeBits); - *pPixelValueCur = NextPaletteIndex(pState); + *pPixelValueCur = (*(pState->pIn)) - '0'; + (pState->pIn)++; + (pState->InLen)--; } /* Submit 'UpNode' which is the code of the longest string */ if (AddCodeToBuffer(pState, UpNode, CodeBits)) @@ -191,125 +176,103 @@ static char NextCode(statestruct *pState, unsigned char * pPixelValueCur, unsign return 1; } -static int gif_lzw(statestruct *pState, int paletteBitSize) { +int gif_lzw(unsigned char *pOut, int OutLength, unsigned char *pIn, int InLen) { unsigned char PixelValueCur; unsigned char CodeBits; unsigned short Pos; + statestruct State; + State.pIn = pIn; + State.InLen = InLen; + State.pOut = pOut; + State.OutLength = OutLength; // > Get first data byte - if (pState->InLen == 0) + if (State.InLen == 0) return 0; - PixelValueCur = NextPaletteIndex(pState); - /* Number of bits per data item (=pixel) - * We need at least a value of 2, otherwise the cc and eoi code consumes - * the whole string table - */ - if (paletteBitSize == 1) - paletteBitSize = 2; - - /* initial size of compression codes */ - CodeBits = paletteBitSize+1; - pState->ClearCode = (1 << paletteBitSize); - pState->FreeCode = pState->ClearCode+2; - pState->OutBitsFree = 8; - pState->OutPosCur = -1; - pState->fByteCountByteSet = 0; - - if (BufferNextByte(pState)) + + PixelValueCur = (unsigned char) ((*(State.pIn)) - '0'); + (State.pIn)++; + (State.InLen)--; + CodeBits = 3; + State.ClearCode = 4; + State.FreeCode = 6; + State.OutBitsFree = 8; + State.OutPosCur = -1; + State.fByteCountByteSet = 0; + + if (BufferNextByte(&State)) return 0; - for (Pos = 0; Pos < pState->ClearCode; Pos++) - (pState->NodePix)[Pos] = (unsigned char) Pos; + for (Pos = 0; Pos < State.ClearCode; Pos++) + State.NodePix[Pos] = (unsigned char) Pos; - FlushStringTable(pState); + FlushStringTable(&State); /* Write what the GIF specification calls the "code size". */ - (pState->pOut)[pState->OutPosCur] = paletteBitSize; + (State.pOut)[State.OutPosCur] = 2; /* Reserve first bytecount byte */ - if (BufferNextByte(pState)) + if (BufferNextByte(&State)) return 0; - pState->OutByteCountPos = pState->OutPosCur; - if (BufferNextByte(pState)) + State.OutByteCountPos = State.OutPosCur; + if (BufferNextByte(&State)) return 0; - pState->fByteCountByteSet = 1; + State.fByteCountByteSet = 1; /* Submit one 'ClearCode' as the first code */ - if (AddCodeToBuffer(pState, pState->ClearCode, CodeBits)) + if (AddCodeToBuffer(&State, State.ClearCode, CodeBits)) return 0; for (;;) { char Res; /* generate and save the next code, which may consist of multiple input pixels. */ - Res = NextCode(pState, &PixelValueCur, CodeBits); + Res = NextCode(&State, &PixelValueCur, CodeBits); if (Res < 0) return 0; //* Check for end of data stream */ if (!Res) { /* submit 'eoi' as the last item of the code stream */ - if (AddCodeToBuffer(pState, (unsigned short) (pState->ClearCode + 1), CodeBits)) + if (AddCodeToBuffer(&State, (unsigned short) (State.ClearCode + 1), CodeBits)) return 0; - pState->fByteCountByteSet = 0; - if (pState->OutBitsFree < 8) { - if (BufferNextByte(pState)) + State.fByteCountByteSet = 0; + if (State.OutBitsFree < 8) { + if (BufferNextByte(&State)) return 0; } // > Update last bytecount byte; - if (pState->OutByteCountPos < pState->OutPosCur) { - (pState->pOut)[pState->OutByteCountPos] = (unsigned char) (pState->OutPosCur - pState->OutByteCountPos - 1); + if (State.OutByteCountPos < State.OutPosCur) { + (State.pOut)[State.OutByteCountPos] = (unsigned char) (State.OutPosCur - State.OutByteCountPos - 1); } - pState->OutPosCur++; - return pState->OutPosCur; + State.OutPosCur++; + return State.OutPosCur; } /* Check for currently last code */ - if (pState->FreeCode == (1U << CodeBits)) + if (State.FreeCode == (1U << CodeBits)) CodeBits++; - pState->FreeCode++; + State.FreeCode++; /* Check for full stringtable */ - if (pState->FreeCode == 0xfff) { - FlushStringTable(pState); - if (AddCodeToBuffer(pState, pState->ClearCode, CodeBits)) + if (State.FreeCode == 0xfff) { + FlushStringTable(&State); + if (AddCodeToBuffer(&State, State.ClearCode, CodeBits)) return 0; - CodeBits = (unsigned char) (1 + paletteBitSize); - pState->FreeCode = (unsigned short) (pState->ClearCode + 2); + CodeBits = (unsigned char) (1 + 2); + State.FreeCode = (unsigned short) (State.ClearCode + 2); } } } -/* - * Called function to save in gif format - */ -INTERNAL int gif_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) { - unsigned char outbuf[10]; +int gif_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) { + char outbuf[10]; FILE *gif_file; unsigned short usTemp; int byte_out; - int colourCount; - unsigned char paletteRGB[10][3]; - int paletteCount, paletteCountCur, paletteIndex; - int pixelIndex; - int paletteBitSize; - int paletteSize; - statestruct State; - - unsigned char backgroundColourIndex; - unsigned char RGBCur[3]; - - int colourIndex; - - int fFound; - - unsigned char pixelColour; - - /* Allow for overhead of 4 == code size + byte count + overflow byte + zero terminator */ - unsigned int lzoutbufSize = symbol->bitmap_height * symbol->bitmap_width + 4; #ifdef _MSC_VER char * lzwoutbuf; #endif #ifndef _MSC_VER - char lzwoutbuf[lzoutbufSize]; + char lzwoutbuf[symbol->bitmap_height * symbol->bitmap_width]; #else - lzwoutbuf = (char *) _alloca(lzoutbufSize); + lzwoutbuf = (char *) _alloca((symbol->bitmap_height * symbol->bitmap_width) * sizeof (char)); #endif /* _MSC_VER */ /* Open output file in binary mode */ @@ -327,147 +290,18 @@ INTERNAL int gif_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) { return ZINT_ERROR_FILE_ACCESS; } } - - /* - * Build a table of the used palette items. - * Currently, there are the following 10 colour codes: - * '0': standard background - * '1': standard foreground - * 'W': white - * 'C': cyan - * 'B': blue - * 'M': magenta - * 'R': red - * 'Y': yellow - * 'G': green - * 'K': black - * '0' and '1' may be identical to one of the other values - * - * A data structure is set up as follows: - * state.colourCode: list of colour codes - * paletteIndex: palette index of the corresponding colour code - * There are colourCount entries in the upper lists. - * paletteRGB: RGB value at the palette position - * There are paletteCount entries. - * This value is smaller to colourCount, if multiple colour codes have the - * same RGB value and point to the same palette value. - * Example: - * 0 1 W K are present. 0 is equal to white, while 1 is blue - * The resulting tables are: - * paletteItem: ['0']=0 (white), ['1']=1 (blue), ['W']=0 (white), - * ['K']=2 (black) - * Thus, there are 4 colour codes and 3 palette entries. - + /*ImageWidth = 2; + ImageHeight = 2; + rotated_bitmap[0] = 1; + rotated_bitmap[1] = 1; + rotated_bitmap[2] = 0; + rotated_bitmap[3] = 0; */ - colourCount = 0; - paletteCount = 0; - /* loop over all pixels */ - for ( pixelIndex = 0; pixelIndex < (symbol->bitmap_height * symbol->bitmap_width); pixelIndex++) - { - fFound = 0; - /* get pixel colour code */ - pixelColour = pixelbuf[pixelIndex]; - /* look, if colour code is already in colour list */ - for (colourIndex = 0; colourIndex < colourCount; colourIndex++) { - if ((State.colourCode)[colourIndex] == pixelColour) { - fFound = 1; - break; - } - } - /* If colour is already present, go to next colour code */ - if (fFound) - continue; - - /* Colour code not present - add colour code */ - /* Get RGB value */ - switch (pixelColour) { - case '0': /* standard background */ - RGBCur[0] = (unsigned char) (16 * ctoi(symbol->bgcolour[0])) + ctoi(symbol->bgcolour[1]); - RGBCur[1] = (unsigned char) (16 * ctoi(symbol->bgcolour[2])) + ctoi(symbol->bgcolour[3]); - RGBCur[2] = (unsigned char) (16 * ctoi(symbol->bgcolour[4])) + ctoi(symbol->bgcolour[5]); - break; - case '1': /* standard foreground */ - RGBCur[0] = (unsigned char) (16 * ctoi(symbol->fgcolour[0])) + ctoi(symbol->fgcolour[1]); - RGBCur[1] = (unsigned char) (16 * ctoi(symbol->fgcolour[2])) + ctoi(symbol->fgcolour[3]); - RGBCur[2] = (unsigned char) (16 * ctoi(symbol->fgcolour[4])) + ctoi(symbol->fgcolour[5]); - break; - case 'W': /* white */ - RGBCur[0] = 255; RGBCur[1] = 255; RGBCur[2] = 255; - break; - case 'C': /* cyan */ - RGBCur[0] = 0; RGBCur[1] = 255; RGBCur[2] = 255; - break; - case 'B': /* blue */ - RGBCur[0] = 0; RGBCur[1] = 0; RGBCur[2] = 255; - break; - case 'M': /* magenta */ - RGBCur[0] = 255; RGBCur[1] = 0; RGBCur[2] = 255; - break; - case 'R': /* red */ - RGBCur[0] = 255; RGBCur[1] = 0; RGBCur[2] = 0; - break; - case 'Y': /* yellow */ - RGBCur[0] = 255; RGBCur[1] = 255; RGBCur[2] = 0; - break; - case 'G': /* green */ - RGBCur[0] = 0; RGBCur[1] = 255; RGBCur[2] = 0; - break; - case 'K': /* black */ - RGBCur[0] = 0; RGBCur[1] = 0; RGBCur[2] = 0; - break; - default: /* error case - return */ - strcpy(symbol->errtxt, "611: unknown pixel colour"); - return ZINT_ERROR_INVALID_DATA; - } - /* Search, if RGB value is already present */ - fFound = 0; - for (paletteIndex = 0; paletteIndex < paletteCount; paletteIndex++) { - if (RGBCur[0] == paletteRGB[paletteIndex][0] - && RGBCur[1] == paletteRGB[paletteIndex][1] - && RGBCur[2] == paletteRGB[paletteIndex][2]) - { - fFound = 1; - break; - } - } - /* RGB not present, add it */ - if (!fFound) { - paletteIndex = paletteCount; - paletteRGB[paletteIndex][0] = RGBCur[0]; - paletteRGB[paletteIndex][1] = RGBCur[1]; - - paletteRGB[paletteIndex][2] = RGBCur[2]; - - paletteCount++; - } - /* Add palette index to current colour code */ - (State.colourCode)[colourCount] = pixelColour; - (State.colourPaletteIndex)[colourCount] = paletteIndex; - colourCount++; - } - State.colourCount = colourCount; - - /* find palette bit size from palette size*/ - - /* 1,2 -> 1, 3,4 ->2, 5,6,7,8->3 */ - paletteBitSize = 0; - paletteCountCur = paletteCount-1; - while (paletteCountCur != 0) { - paletteBitSize++; - paletteCountCur >>= 1; - } - /* Minimum is 1 */ - if (paletteBitSize == 0) - paletteBitSize = 1; - - /* palette size 2 ^ bit size */ - paletteSize = 1<bgcolour[0])) + ctoi(symbol->bgcolour[1]); + outbuf[1] = (unsigned char) (16 * ctoi(symbol->bgcolour[2])) + ctoi(symbol->bgcolour[3]); + outbuf[2] = (unsigned char) (16 * ctoi(symbol->bgcolour[4])) + ctoi(symbol->bgcolour[5]); + /* RGB 1 color */ + outbuf[3] = (unsigned char) (16 * ctoi(symbol->fgcolour[0])) + ctoi(symbol->fgcolour[1]); + outbuf[4] = (unsigned char) (16 * ctoi(symbol->fgcolour[2])) + ctoi(symbol->fgcolour[3]); + outbuf[5] = (unsigned char) (16 * ctoi(symbol->fgcolour[4])) + ctoi(symbol->fgcolour[5]); + fwrite(outbuf, 6, 1, gif_file); /* Graphic control extension (8) */ /* A graphic control extension block is used for overlay gifs. @@ -559,17 +379,15 @@ INTERNAL int gif_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) { * information on the local color table. * There is no local color table if its most significant bit is reset. */ - outbuf[9] = 0x00; + outbuf[9] = (unsigned char) (0 | (0x7 & (DESTINATION_IMAGE_BITS - 1))); fwrite(outbuf, 10, 1, gif_file); - /* prepare state array */ - State.pIn = (unsigned char *) pixelbuf; - State.InLen = symbol->bitmap_height * symbol->bitmap_width; - State.pOut = (unsigned char *) lzwoutbuf; - State.OutLength = lzoutbufSize; - /* call lzw encoding */ - byte_out = gif_lzw(&State, paletteBitSize); + byte_out = gif_lzw( + (unsigned char *) lzwoutbuf, + symbol->bitmap_height * symbol->bitmap_width, + (unsigned char *) pixelbuf, + symbol->bitmap_height * symbol->bitmap_width); if (byte_out <= 0) { fclose(gif_file); return ZINT_ERROR_MEMORY; diff --git a/backend/gridmtx.c b/backend/gridmtx.c index 627057d..3ef4bd6 100644 --- a/backend/gridmtx.c +++ b/backend/gridmtx.c @@ -1,7 +1,7 @@ /* gridmtx.c - Grid Matrix libzint - the open source barcode library - Copyright (C) 2009-2020 Robin Stuart + Copyright (C) 2009-2017 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -28,13 +28,13 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ -/* This file implements Grid Matrix as specified in +/* This file impliments Grid Matrix as specified in AIM Global Document Number AIMD014 Rev. 1.63 Revised 9 Dec 2008 */ #include #include +#include #ifdef _MSC_VER #include #endif @@ -43,235 +43,317 @@ #include "gridmtx.h" #include "gb2312.h" -/* define_mode() stuff */ - -/* Bits multiplied by this for costs, so as to be whole integer divisible by 2 and 3 */ -#define GM_MULT 6 - -static const char numeral_nondigits[] = " +-.,"; /* Non-digit numeral set, excluding EOL (carriage return/linefeed) */ - -/* Whether in numeral or not. If in numeral, *p_numeral_end is set to position after numeral, and *p_numeral_cost is set to per-numeral cost */ -static int in_numeral(const unsigned int gbdata[], const size_t length, const unsigned int posn, unsigned int* p_numeral_end, unsigned int* p_numeral_cost) { - unsigned int i, digit_cnt, nondigit, nondigit_posn; - - if (posn < *p_numeral_end) { - return 1; - } - - /* Attempt to calculate the average 'cost' of using numeric mode in number of bits (times GM_MULT) */ +int number_lat(int gbdata[], const size_t length, const size_t position) { + /* Attempt to calculate the 'cost' of using numeric mode from a given position in number of bits */ /* Also ensures that numeric mode is not selected when it cannot be used: for example in a string which has "2.2.0" (cannot have more than one non-numeric character for each block of three numeric characters) */ - for (i = posn, digit_cnt = 0, nondigit = 0, nondigit_posn = 0; i < length && i < posn + 4 && digit_cnt < 3; i++) { - if (gbdata[i] >= '0' && gbdata[i] <= '9') { - digit_cnt++; - } else if (strchr(numeral_nondigits, gbdata[i])) { - if (nondigit) { - break; - } - nondigit = 1; - nondigit_posn = i; - } else if (i < length - 1 && gbdata[i] == 13 && gbdata[i + 1] == 10) { - if (nondigit) { - break; + size_t sp; + int numb = 0, nonum = 0; + int tally = 0; + + sp = position; + + do { + int done = 0; + + if ((gbdata[sp] >= '0') && (gbdata[sp] <= '9')) { + numb++; + done = 1; + } + switch (gbdata[sp]) { + case ' ': + case '+': + case '-': + case '.': + case ',': + nonum++; + done = 1; + } + if ((sp + 1) < length) { + if ((gbdata[sp] == 0x13) && (gbdata[sp + 1] == 0x10)) { + nonum++; + done = 1; + sp++; } - i++; - nondigit = 2; - nondigit_posn = i; + } + + if (done == 0) { + tally += 80; } else { - break; + if (numb == 3) { + if (nonum == 0) { + tally += 10; + } + if (nonum == 1) { + tally += 20; + } + if (nonum > 1) { + tally += 80; + } + numb = 0; + nonum = 0; + } } + + sp++; + } while ((sp < length) && (sp <= (position + 8))); + + if (numb == 0) { + tally += 80; } - if (digit_cnt == 0) { /* Must have at least one digit */ - *p_numeral_end = 0; - return 0; + + if (numb > 1) { + if (nonum == 0) { + tally += 10; + } + if (nonum == 1) { + tally += 20; + } + if (nonum > 1) { + tally += 80; + } } - if (nondigit && nondigit_posn == i - 1) { /* Non-digit can't be at end */ - nondigit = 0; + + return tally; +} + +static int seek_forward(int gbdata[], const size_t length, const size_t position, int current_mode) { + /* In complete contrast to the method recommended in Annex D of the ANSI standard this + code uses a look-ahead test in the same manner as Data Matrix. This decision was made + because the "official" algorithm does not provide clear methods for dealing with all + possible combinations of input data */ + + int number_count, byte_count, mixed_count, upper_count, lower_count, chinese_count; + int best_mode; + size_t sp; + int best_count, last = -1; + int debug = 0; + + if (gbdata[position] > 0xff) { + return GM_CHINESE; } - *p_numeral_end = posn + digit_cnt + nondigit; - /* Calculate per-numeral cost where 120 == (10 + 10) * GM_MULT, 60 == 10 * GM_MULT */ - if (digit_cnt == 3) { - *p_numeral_cost = nondigit == 2 ? 24 /* (120 / 5) */ : nondigit == 1 ? 30 /* (120 / 4) */ : 20 /* (60 / 3) */; - } else if (digit_cnt == 2) { - *p_numeral_cost = nondigit == 2 ? 30 /* (120 / 4) */ : nondigit == 1 ? 40 /* (120 / 3) */ : 30 /* (60 / 2) */; - } else { - *p_numeral_cost = nondigit == 2 ? 40 /* (120 / 3) */ : nondigit == 1 ? 60 /* (120 / 2) */ : 60 /* (60 / 1) */; + + switch (current_mode) { + case GM_CHINESE: + number_count = 13; + byte_count = 13; + mixed_count = 13; + upper_count = 13; + lower_count = 13; + chinese_count = 0; + break; + case GM_NUMBER: + number_count = 0; + byte_count = 10; + mixed_count = 10; + upper_count = 10; + lower_count = 10; + chinese_count = 10; + break; + case GM_LOWER: + number_count = 5; + byte_count = 7; + mixed_count = 7; + upper_count = 5; + lower_count = 0; + chinese_count = 5; + break; + case GM_UPPER: + number_count = 5; + byte_count = 7; + mixed_count = 7; + upper_count = 0; + lower_count = 5; + chinese_count = 5; + break; + case GM_MIXED: + number_count = 10; + byte_count = 10; + mixed_count = 0; + upper_count = 10; + lower_count = 10; + chinese_count = 10; + break; + case GM_BYTE: + number_count = 4; + byte_count = 0; + mixed_count = 4; + upper_count = 4; + lower_count = 4; + chinese_count = 4; + break; + default: /* Start of symbol */ + number_count = 4; + byte_count = 4; + mixed_count = 4; + upper_count = 4; + lower_count = 4; + chinese_count = 4; } - return 1; -} -/* Encoding modes */ -#define GM_CHINESE 'H' -#define GM_NUMBER 'N' -#define GM_LOWER 'L' -#define GM_UPPER 'U' -#define GM_MIXED 'M' -#define GM_BYTE 'B' -/* Note Control is a submode of Lower, Upper and Mixed modes */ - -/* Indexes into mode_types array */ -#define GM_H 0 /* Chinese (Hanzi) */ -#define GM_N 1 /* Numeral */ -#define GM_L 2 /* Lower case */ -#define GM_U 3 /* Upper case */ -#define GM_M 4 /* Mixed */ -#define GM_B 5 /* Byte */ - -#define GM_NUM_MODES 6 - -/* Initial mode costs */ -static unsigned int head_costs[GM_NUM_MODES] = { -/* H N (+pad prefix) L U M B (+byte count) */ - 4 * GM_MULT, (4 + 2) * GM_MULT, 4 * GM_MULT, 4 * GM_MULT, 4 * GM_MULT, (4 + 9) * GM_MULT -}; - -static unsigned int* gm_head_costs(unsigned int state[]) { - (void)state; /* Unused */ - return head_costs; -} + for (sp = position; (sp < length) && (sp <= (position + 8)); sp++) { -/* Cost of switching modes from k to j - see AIMD014 Rev. 1.63 Table 9 – Type conversion codes */ -static unsigned int gm_switch_cost(unsigned int state[], const int k, const int j) { - static const unsigned int switch_costs[GM_NUM_MODES][GM_NUM_MODES] = { - /* H N L U M B */ - /*H*/ { 0, (13 + 2) * GM_MULT, 13 * GM_MULT, 13 * GM_MULT, 13 * GM_MULT, (13 + 9) * GM_MULT }, - /*N*/ { 10 * GM_MULT, 0, 10 * GM_MULT, 10 * GM_MULT, 10 * GM_MULT, (10 + 9) * GM_MULT }, - /*L*/ { 5 * GM_MULT, (5 + 2) * GM_MULT, 0, 5 * GM_MULT, 7 * GM_MULT, (7 + 9) * GM_MULT }, - /*U*/ { 5 * GM_MULT, (5 + 2) * GM_MULT, 5 * GM_MULT, 0, 7 * GM_MULT, (7 + 9) * GM_MULT }, - /*M*/ { 10 * GM_MULT, (10 + 2) * GM_MULT, 10 * GM_MULT, 10 * GM_MULT, 0, (10 + 9) * GM_MULT }, - /*B*/ { 4 * GM_MULT, (4 + 2) * GM_MULT, 4 * GM_MULT, 4 * GM_MULT, 4 * GM_MULT, 0 }, - }; - - (void)state; /* Unused */ - return switch_costs[k][j]; -} + int done = 0; -/* Final end-of-data cost - see AIMD014 Rev. 1.63 Table 9 – Type conversion codes */ -static unsigned int gm_eod_cost(unsigned int state[], const int k) { - static const unsigned int eod_costs[GM_NUM_MODES] = { - /* H N L U M B */ - 13 * GM_MULT, 10 * GM_MULT, 5 * GM_MULT, 5 * GM_MULT, 10 * GM_MULT, 4 * GM_MULT - }; + if (gbdata[sp] >= 0xff) { + byte_count += 17; + mixed_count += 23; + upper_count += 18; + lower_count += 18; + chinese_count += 13; + done = 1; + } - (void)state; /* Unused */ - return eod_costs[k]; -} + if ((gbdata[sp] >= 'a') && (gbdata[sp] <= 'z')) { + byte_count += 8; + mixed_count += 6; + upper_count += 10; + lower_count += 5; + chinese_count += 13; + done = 1; + } -/* Calculate cost of encoding current character */ -static void gm_cur_cost(unsigned int state[], const unsigned int gbdata[], const size_t length, const int i, char* char_modes, unsigned int prev_costs[], unsigned int cur_costs[]) { - int cm_i = i * GM_NUM_MODES; - int double_byte, space, numeric, lower, upper, control, double_digit, eol; - unsigned int* p_numeral_end = &state[0]; - unsigned int* p_numeral_cost = &state[1]; - unsigned int* p_byte_count = &state[2]; - - double_byte = gbdata[i] > 0xFF; - space = gbdata[i] == ' '; - numeric = gbdata[i] >= '0' && gbdata[i] <= '9'; - lower = gbdata[i] >= 'a' && gbdata[i] <= 'z'; - upper = gbdata[i] >= 'A' && gbdata[i] <= 'Z'; - control = !space && !numeric && !lower && !upper && gbdata[i] < 0x7F; /* Exclude DEL */ - double_digit = i < (int) length - 1 && numeric && gbdata[i + 1] >= '0' && gbdata[i + 1] <= '9'; - eol = i < (int) length - 1 && gbdata[i] == 13 && gbdata[i + 1] == 10; - - /* Hanzi mode can encode anything */ - cur_costs[GM_H] = prev_costs[GM_H] + (double_digit || eol ? 39 : 78); /* (6.5 : 13) * GM_MULT */ - char_modes[cm_i + GM_H] = GM_CHINESE; - - /* Byte mode can encode anything */ - if (*p_byte_count == 512 || (double_byte && *p_byte_count == 511)) { - cur_costs[GM_B] = head_costs[GM_B]; - if (double_byte && *p_byte_count == 511) { - cur_costs[GM_B] += 48; /* 8 * GM_MULT */ - double_byte = 0; /* Splitting double-byte so mark as single */ + if ((gbdata[sp] >= 'A') && (gbdata[sp] <= 'Z')) { + byte_count += 8; + mixed_count += 6; + upper_count += 5; + lower_count += 10; + chinese_count += 13; + done = 1; } - *p_byte_count = 0; - } - cur_costs[GM_B] += prev_costs[GM_B] + (double_byte ? 96 : 48); /* (16 : 8) * GM_MULT */ - char_modes[cm_i + GM_B] = GM_BYTE; - *p_byte_count += double_byte ? 2 : 1; - if (in_numeral(gbdata, length, i, p_numeral_end, p_numeral_cost)) { - cur_costs[GM_N] = prev_costs[GM_N] + *p_numeral_cost; - char_modes[cm_i + GM_N] = GM_NUMBER; - } + if ((gbdata[sp] >= '0') && (gbdata[sp] <= '9')) { + byte_count += 8; + mixed_count += 6; + upper_count += 8; + lower_count += 8; + chinese_count += 13; + done = 1; + } - if (control) { - cur_costs[GM_L] = prev_costs[GM_L] + 78; /* (7 + 6) * GM_MULT */ - char_modes[cm_i + GM_L] = GM_LOWER; - cur_costs[GM_U] = prev_costs[GM_U] + 78; /* (7 + 6) * GM_MULT */ - char_modes[cm_i + GM_U] = GM_UPPER; - cur_costs[GM_M] = prev_costs[GM_M] + 96; /* (10 + 6) * GM_MULT */ - char_modes[cm_i + GM_M] = GM_MIXED; - } else { - if (lower || space) { - cur_costs[GM_L] = prev_costs[GM_L] + 30; /* 5 * GM_MULT */ - char_modes[cm_i + GM_L] = GM_LOWER; + if (gbdata[sp] == ' ') { + byte_count += 8; + mixed_count += 6; + upper_count += 5; + lower_count += 5; + chinese_count += 13; + done = 1; } - if (upper || space) { - cur_costs[GM_U] = prev_costs[GM_U] + 30; /* 5 * GM_MULT */ - char_modes[cm_i + GM_U] = GM_UPPER; + + if (done == 0) { + /* Control character */ + byte_count += 8; + mixed_count += 16; + upper_count += 13; + lower_count += 13; + chinese_count += 13; } - if (numeric || lower || upper || space) { - cur_costs[GM_M] = prev_costs[GM_M] + 36; /* 6 * GM_MULT */ - char_modes[cm_i + GM_M] = GM_MIXED; + + if (gbdata[sp] >= 0x7f) { + mixed_count += 20; + upper_count += 20; + lower_count += 20; } } -} -/* Calculate optimized encoding modes */ -static void define_mode(char* mode, const unsigned int gbdata[], const size_t length, const int debug) { - static const char mode_types[] = { GM_CHINESE, GM_NUMBER, GM_LOWER, GM_UPPER, GM_MIXED, GM_BYTE }; /* Must be in same order as GM_H etc */ - unsigned int state[3] = { 0 /*numeral_end*/, 0 /*numeral_cost*/, 0 /*byte_count*/ }; + /* Adjust for */ + for (sp = position; (sp < (length - 1)) && (sp <= (position + 7)); sp++) { + if ((gbdata[sp] == 0x13) && (gbdata[sp + 1] == 0x10)) { + chinese_count -= 13; + } + } + + /* Adjust for double digits */ + for (sp = position; (sp < (length - 1)) && (sp <= (position + 7)); sp++) { + if (sp != last) { + if (((gbdata[sp] >= '0') && (gbdata[sp] <= '9')) && ((gbdata[sp + 1] >= '0') && (gbdata[sp + 1] <= '9'))) { + chinese_count -= 13; + last = (int)(sp + 1); + } + } + } + + /* Numeric mode is more complex */ + number_count += number_lat(gbdata, length, position); + + if (debug) { + printf("C %d / B %d / M %d / U %d / L %d / N %d\n", chinese_count, byte_count, mixed_count, upper_count, lower_count, number_count); + } + + best_count = chinese_count; + best_mode = GM_CHINESE; + + if (byte_count <= best_count) { + best_count = byte_count; + best_mode = GM_BYTE; + } + + if (mixed_count <= best_count) { + best_count = mixed_count; + best_mode = GM_MIXED; + } + + if (upper_count <= best_count) { + best_count = upper_count; + best_mode = GM_UPPER; + } + + if (lower_count <= best_count) { + best_count = lower_count; + best_mode = GM_LOWER; + } + + if (number_count <= best_count) { + best_count = number_count; + best_mode = GM_NUMBER; + } - pn_define_mode(mode, gbdata, length, debug, state, mode_types, GM_NUM_MODES, gm_head_costs, gm_switch_cost, gm_eod_cost, gm_cur_cost); + return best_mode; } /* Add the length indicator for byte encoded blocks */ static void add_byte_count(char binary[], const size_t byte_count_posn, const int byte_count) { - /* AIMD014 6.3.7: "Let L be the number of bytes of input data to be encoded in the 8-bit binary data set. - * First output (L-1) as a 9-bit binary prefix to record the number of bytes..." */ - bin_append_posn(byte_count - 1, 9, binary, byte_count_posn); + int p; + + for (p = 0; p < 8; p++) { + if (byte_count & (0x100 >> p)) { + binary[byte_count_posn + p] = '0'; + } else { + binary[byte_count_posn + p] = '1'; + } + } } /* Add a control character to the data stream */ -static void add_shift_char(char binary[], int shifty, int debug) { - int i; +void add_shift_char(char binary[], int shifty) { + int i, debug = 0; int glyph = 0; for (i = 0; i < 64; i++) { if (shift_set[i] == shifty) { glyph = i; - break; } } - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("SHIFT [%d] ", glyph); } bin_append(glyph, 6, binary); } -static int gm_encode(unsigned int gbdata[], const size_t length, char binary[], const int reader, const int eci, int debug) { +static int gm_encode(int gbdata[], const size_t length, char binary[],const int reader,const int eci, int debug) { /* Create a binary stream representation of the input data. 7 sets are defined - Chinese characters, Numerals, Lower case letters, Upper case letters, Mixed numerals and latters, Control characters and 8-bit binary data */ - unsigned int sp; - int current_mode, last_mode; - unsigned int glyph = 0; + int sp, current_mode, last_mode, glyph = 0; int c1, c2, done; int p = 0, ppos; int numbuf[3], punt = 0; size_t number_pad_posn, byte_count_posn = 0; int byte_count = 0; int shift; -#ifndef _MSC_VER - char mode[length]; -#else - char* mode = (char*) _alloca(length); -#endif strcpy(binary, ""); @@ -300,10 +382,8 @@ static int gm_encode(unsigned int gbdata[], const size_t length, char binary[], } } - define_mode(mode, gbdata, length, debug); - do { - int next_mode = mode[sp]; + int next_mode = seek_forward(gbdata, length, sp, current_mode); if (next_mode != current_mode) { switch (current_mode) { @@ -411,7 +491,7 @@ static int gm_encode(unsigned int gbdata[], const size_t length, char binary[], } break; } - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { switch (next_mode) { case GM_CHINESE: printf("CHIN "); break; @@ -439,21 +519,22 @@ static int gm_encode(unsigned int gbdata[], const size_t length, char binary[], c1 = (gbdata[sp] & 0xff00) >> 8; c2 = gbdata[sp] & 0xff; - if ((c1 >= 0xa1) && (c1 <= 0xa9)) { + if ((c1 >= 0xa0) && (c1 <= 0xa9)) { glyph = (0x60 * (c1 - 0xa1)) + (c2 - 0xa0); - } else if ((c1 >= 0xb0) && (c1 <= 0xf7)) { + } + if ((c1 >= 0xb0) && (c1 <= 0xf7)) { glyph = (0x60 * (c1 - 0xb0 + 9)) + (c2 - 0xa0); } - done = 1; /* GB 2312 always within above ranges */ + done = 1; } if (!(done)) { if (sp != (length - 1)) { - if ((gbdata[sp] == 13) && (gbdata[sp + 1] == 10)) { + if ((gbdata[sp] == 0x13) && (gbdata[sp + 1] == 0x10)) { /* End of Line */ glyph = 7776; sp++; - done = 1; } + done = 1; } } if (!(done)) { @@ -463,7 +544,6 @@ static int gm_encode(unsigned int gbdata[], const size_t length, char binary[], /* Two digits */ glyph = 8033 + (10 * (gbdata[sp] - '0')) + (gbdata[sp + 1] - '0'); sp++; - done = 1; } } } @@ -472,7 +552,7 @@ static int gm_encode(unsigned int gbdata[], const size_t length, char binary[], glyph = 7777 + gbdata[sp]; } - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("[%d] ", glyph); } @@ -498,26 +578,29 @@ static int gm_encode(unsigned int gbdata[], const size_t length, char binary[], do { if ((gbdata[sp] >= '0') && (gbdata[sp] <= '9')) { numbuf[p] = gbdata[sp]; + sp++; p++; - } else if (strchr(numeral_nondigits, gbdata[sp])) { - if (ppos != -1) { - break; - } - punt = gbdata[sp]; - ppos = p; - } else if (sp < (length - 1) && (gbdata[sp] == 13) && (gbdata[sp + 1] == 10)) { - /* */ - if (ppos != -1) { + } + switch (gbdata[sp]) { + case ' ': + case '+': + case '-': + case '.': + case ',': + punt = gbdata[sp]; + sp++; + ppos = p; break; + } + if (sp < (length - 1)) { + if ((gbdata[sp] == 0x13) && (gbdata[sp + 1] == 0x10)) { + /* */ + punt = gbdata[sp]; + sp += 2; + ppos = p; } - punt = gbdata[sp]; - sp++; - ppos = p; - } else { - break; } - sp++; - } while ((p < 3) && (sp < length) && mode[sp] == GM_NUMBER); + } while ((p < 3) && (sp < length)); if (ppos != -1) { switch (punt) { @@ -531,13 +614,13 @@ static int gm_encode(unsigned int gbdata[], const size_t length, char binary[], break; case ',': glyph = 12; break; - case 13: glyph = 15; + case 0x13: glyph = 15; break; } glyph += ppos; glyph += 1000; - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("[%d] ", glyph); } @@ -545,7 +628,7 @@ static int gm_encode(unsigned int gbdata[], const size_t length, char binary[], } glyph = (100 * (numbuf[0] - '0')) + (10 * (numbuf[1] - '0')) + (numbuf[2] - '0'); - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("[%d] ", glyph); } @@ -558,14 +641,8 @@ static int gm_encode(unsigned int gbdata[], const size_t length, char binary[], byte_count_posn = strlen(binary); strcat(binary, "LLLLLLLLL"); } - glyph = gbdata[sp]; - if (byte_count == 512 || (glyph > 0xFF && byte_count == 511)) { + if (byte_count == 512) { /* Maximum byte block size is 512 bytes. If longer is needed then start a new block */ - if (glyph > 0xFF && byte_count == 511) { /* Split double-byte */ - bin_append(glyph >> 8, 8, binary); - glyph &= 0xFF; - byte_count++; - } add_byte_count(binary, byte_count_posn, byte_count); bin_append(7, 4, binary); byte_count_posn = strlen(binary); @@ -573,15 +650,13 @@ static int gm_encode(unsigned int gbdata[], const size_t length, char binary[], byte_count = 0; } - if (debug & ZINT_DEBUG_PRINT) { + glyph = gbdata[sp]; + if (debug) { printf("[%d] ", glyph); } - bin_append(glyph, glyph > 0xFF ? 16 : 8, binary); + bin_append(glyph, 8, binary); sp++; byte_count++; - if (glyph > 0xFF) { - byte_count++; - } break; case GM_MIXED: @@ -602,7 +677,7 @@ static int gm_encode(unsigned int gbdata[], const size_t length, char binary[], if (shift == 0) { /* Mixed Mode character */ glyph = posn(EUROPIUM, gbdata[sp]); - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("[%d] ", glyph); } @@ -610,7 +685,7 @@ static int gm_encode(unsigned int gbdata[], const size_t length, char binary[], } else { /* Shift Mode character */ bin_append(1014, 10, binary); /* shift indicator */ - add_shift_char(binary, gbdata[sp], debug); + add_shift_char(binary, gbdata[sp]); } sp++; @@ -628,7 +703,7 @@ static int gm_encode(unsigned int gbdata[], const size_t length, char binary[], if (shift == 0) { /* Upper Case character */ glyph = posn("ABCDEFGHIJKLMNOPQRSTUVWXYZ ", gbdata[sp]); - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("[%d] ", glyph); } @@ -636,7 +711,7 @@ static int gm_encode(unsigned int gbdata[], const size_t length, char binary[], } else { /* Shift Mode character */ bin_append(125, 7, binary); /* shift indicator */ - add_shift_char(binary, gbdata[sp], debug); + add_shift_char(binary, gbdata[sp]); } sp++; @@ -654,7 +729,7 @@ static int gm_encode(unsigned int gbdata[], const size_t length, char binary[], if (shift == 0) { /* Lower Case character */ glyph = posn("abcdefghijklmnopqrstuvwxyz ", gbdata[sp]); - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("[%d] ", glyph); } @@ -662,7 +737,7 @@ static int gm_encode(unsigned int gbdata[], const size_t length, char binary[], } else { /* Shift Mode character */ bin_append(125, 7, binary); /* shift indicator */ - add_shift_char(binary, gbdata[sp], debug); + add_shift_char(binary, gbdata[sp]); } sp++; @@ -711,9 +786,10 @@ static int gm_encode(unsigned int gbdata[], const size_t length, char binary[], /* Add padding bits if required */ p = 7 - (strlen(binary) % 7); - if (p % 7) { - bin_append(0, p, binary); + if (p == 7) { + p = 0; } + bin_append(0, p, binary); if (strlen(binary) > 9191) { return ZINT_ERROR_TOO_LONG; @@ -721,11 +797,11 @@ static int gm_encode(unsigned int gbdata[], const size_t length, char binary[], return 0; } -static void gm_add_ecc(const char binary[], const size_t data_posn, const int layers, const int ecc_level, unsigned char word[]) { +static void gm_add_ecc(const char binary[], const size_t data_posn, const int layers, const int ecc_level, int word[]) { int data_cw, i, j, wp, p; int n1, b1, n2, b2, e1, b3, e2; int block_size, ecc_size; - unsigned char data[1320], block[130]; + int data[1320], block[130]; unsigned char data_block[115], ecc_block[70]; data_cw = gm_data_codewords[((layers - 1) * 5) + (ecc_level - 1)]; @@ -734,8 +810,8 @@ static void gm_add_ecc(const char binary[], const size_t data_posn, const int la data[i] = 0; } - /* Convert from binary stream to 7-bit codewords */ - for (i = 0; i < (int) data_posn; i++) { + /* Convert from binary sream to 7-bit codewords */ + for (i = 0; i < data_posn; i++) { for (p = 0; p < 7; p++) { if (binary[i * 7 + p] == '1') { data[i] += (0x40 >> p); @@ -808,7 +884,7 @@ static void gm_add_ecc(const char binary[], const size_t data_posn, const int la } } -static void place_macromodule(char grid[], int x, int y, int word1, int word2, int size) { +void place_macromodule(char grid[], int x, int y, int word1, int word2, int size) { int i, j; i = (x * 6) + 1; @@ -858,7 +934,7 @@ static void place_macromodule(char grid[], int x, int y, int word1, int word2, i } } -static void place_data_in_grid(unsigned char word[], char grid[], int modules, int size) { +void place_data_in_grid(int word[], char grid[], int modules, int size) { int x, y, macromodule, offset; offset = 13 - ((modules - 1) / 2); @@ -871,7 +947,7 @@ static void place_data_in_grid(unsigned char word[], char grid[], int modules, i } /* Place the layer ID into each macromodule */ -static void place_layer_id(char* grid, int size, int layers, int modules, int ecc_level) { +void place_layer_id(char* grid, int size, int layers, int modules, int ecc_level) { int i, j, layer, start, stop; #ifndef _MSC_VER @@ -924,48 +1000,55 @@ static void place_layer_id(char* grid, int size, int layers, int modules, int ec } } -INTERNAL int grid_matrix(struct zint_symbol *symbol, const unsigned char source[], size_t length) { +int grid_matrix(struct zint_symbol *symbol, const unsigned char source[], size_t length) { int size, modules, error_number; int auto_layers, min_layers, layers, auto_ecc_level, min_ecc_level, ecc_level; int x, y, i; - int full_multibyte; char binary[9300]; int data_cw, input_latch = 0; - unsigned char word[1460]; - int data_max, reader = 0; + int word[1460], data_max, reader = 0; #ifndef _MSC_VER - unsigned int gbdata[length + 1]; + int utfdata[length + 1]; + int gbdata[length + 1]; #else char* grid; - unsigned int* gbdata = (unsigned int *) _alloca((length + 1) * sizeof (unsigned int)); + int* utfdata = (int *) _alloca((length + 1) * sizeof (int)); + int* gbdata = (int *) _alloca((length + 1) * sizeof (int)); #endif for (i = 0; i < 1460; i++) { word[i] = 0; } - full_multibyte = symbol->option_3 == ZINT_FULL_MULTIBYTE; /* If set use Hanzi mode in DATA_MODE or for single-byte Latin */ - - if ((symbol->input_mode & 0x07) == DATA_MODE) { - gb2312_cpy(source, &length, gbdata, full_multibyte); + if ((symbol->input_mode == DATA_MODE) || (symbol->eci != 0)) { + for (i = 0; i < length; i++) { + gbdata[i] = (int) source[i]; + } } else { - int done = 0; - if (symbol->eci != 29) { /* Unless ECI 29 (GB) */ - /* Try single byte (Latin) conversion first */ - int error_number = gb2312_utf8tosb(symbol->eci && symbol->eci <= 899 ? symbol->eci : 3, source, &length, gbdata, full_multibyte); - if (error_number == 0) { - done = 1; - } else if (symbol->eci && symbol->eci <= 899) { - strcpy(symbol->errtxt, "575: Invalid characters in input data"); - return error_number; - } + /* Convert Unicode input to GB-2312 */ + error_number = utf8toutf16(symbol, source, utfdata, &length); + if (error_number != 0) { + return error_number; } - if (!done) { - /* Try GB 2312 (EUC-CN) */ - int error_number = gb2312_utf8tomb(symbol, source, &length, gbdata); - if (error_number != 0) { - return error_number; + + for (i = 0; i < length; i++) { + if (utfdata[i] <= 0xff) { + gbdata[i] = utfdata[i]; + } else { + int j = 0; + int glyph = 0; + do { + if (gb2312_lookup[j * 2] == utfdata[i]) { + glyph = gb2312_lookup[(j * 2) + 1]; + } + j++; + } while ((j < 7445) && (glyph == 0)); + if (glyph == 0) { + strcpy(symbol->errtxt, "530: Invalid character in input data"); + return ZINT_ERROR_INVALID_DATA; + } + gbdata[i] = glyph; } } } @@ -999,17 +1082,6 @@ INTERNAL int grid_matrix(struct zint_symbol *symbol, const unsigned char source[ } } layers = auto_layers; - - if ((symbol->option_2 >= 1) && (symbol->option_2 <= 13)) { - input_latch = 1; - if (symbol->option_2 >= min_layers) { - layers = symbol->option_2; - } else { - strcpy(symbol->errtxt, "534: Input data too long for selected symbol size"); - return ZINT_ERROR_TOO_LONG; - } - } - auto_ecc_level = 3; if (layers == 1) { auto_ecc_level = 5; @@ -1017,34 +1089,51 @@ INTERNAL int grid_matrix(struct zint_symbol *symbol, const unsigned char source[ if ((layers == 2) || (layers == 3)) { auto_ecc_level = 4; } - ecc_level = auto_ecc_level; - min_ecc_level = 1; if (layers == 1) { min_ecc_level = 4; } - if (layers == 2) { + if ((layers == 2) || (layers == 3)) { min_ecc_level = 2; } + ecc_level = auto_ecc_level; - if ((symbol->option_1 >= 1) && (symbol->option_1 <= 5)) { - if (symbol->option_1 >= min_ecc_level) { - ecc_level = symbol->option_1; + if ((symbol->option_2 >= 1) && (symbol->option_2 <= 13)) { + input_latch = 1; + if (symbol->option_2 > min_layers) { + layers = symbol->option_2; } else { - ecc_level = min_ecc_level; + strcpy(symbol->errtxt, "534: Input data too long for selected symbol size"); + return ZINT_ERROR_TOO_LONG; } } - if (data_cw > gm_data_codewords[(5 * (layers - 1)) + (ecc_level - 1)]) { - if (input_latch && ecc_level > min_ecc_level) { /* If layers user-specified (option_2), try reducing ECC level first */ - do { - ecc_level--; - } while ((data_cw > gm_data_codewords[(5 * (layers - 1)) + (ecc_level - 1)]) && (ecc_level > min_ecc_level)); + + if (input_latch == 1) { + auto_ecc_level = 3; + if (layers == 1) { + auto_ecc_level = 5; + } + if ((layers == 2) || (layers == 3)) { + auto_ecc_level = 4; } - while (data_cw > gm_data_codewords[(5 * (layers - 1)) + (ecc_level - 1)] && (layers < 13)) { + ecc_level = auto_ecc_level; + if (data_cw > gm_data_codewords[(5 * (layers - 1)) + (ecc_level - 1)]) { layers++; } - while (data_cw > gm_data_codewords[(5 * (layers - 1)) + (ecc_level - 1)] && ecc_level > 1) { /* ECC min level 1 for layers > 2 */ - ecc_level--; + } + + if (input_latch == 0) { + if ((symbol->option_1 >= 1) && (symbol->option_1 <= 5)) { + if (symbol->option_1 > min_ecc_level) { + ecc_level = symbol->option_1; + } else { + ecc_level = min_ecc_level; + } + } + if (data_cw > gm_data_codewords[(5 * (layers - 1)) + (ecc_level - 1)]) { + do { + layers++; + } while ((data_cw > gm_data_codewords[(5 * (layers - 1)) + (ecc_level - 1)]) && (layers <= 13)); } } @@ -1066,9 +1155,6 @@ INTERNAL int grid_matrix(struct zint_symbol *symbol, const unsigned char source[ } gm_add_ecc(binary, data_cw, layers, ecc_level, word); -#ifdef ZINT_TEST - if (symbol->debug & ZINT_DEBUG_TEST) debug_test_codeword_dump(symbol, word, data_cw); -#endif size = 6 + (layers * 12); modules = 1 + (layers * 2); @@ -1121,3 +1207,5 @@ INTERNAL int grid_matrix(struct zint_symbol *symbol, const unsigned char source[ return 0; } + + diff --git a/backend/gridmtx.h b/backend/gridmtx.h index f0d58c8..b7f70ab 100644 --- a/backend/gridmtx.h +++ b/backend/gridmtx.h @@ -28,7 +28,14 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ + +#define GM_NUMBER 1 +#define GM_LOWER 2 +#define GM_UPPER 3 +#define GM_MIXED 4 +#define GM_CONTROL 5 +#define GM_BYTE 6 +#define GM_CHINESE 7 #define EUROPIUM "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz " diff --git a/backend/gs1.c b/backend/gs1.c index 39791f8..5015c49 100644 --- a/backend/gs1.c +++ b/backend/gs1.c @@ -2,7 +2,7 @@ /* libzint - the open source barcode library - Copyright (C) 2009 - 2020 Robin Stuart + Copyright (C) 2009-2017 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -32,6 +32,7 @@ /* vim: set ts=4 sw=4 et : */ #include +#include #include #ifdef _MSC_VER #include @@ -43,7 +44,7 @@ to be bulletproof, nor does it report very accurately what problem was found or where, but should prevent some of the more common encoding errors */ -static void itostr(char ai_string[], int ai_value) { +void itostr(char ai_string[], int ai_value) { int thou, hund, ten, unit; char temp[2]; @@ -69,7 +70,7 @@ static void itostr(char ai_string[], int ai_value) { strcat(ai_string, ")"); } -INTERNAL int gs1_verify(struct zint_symbol *symbol, const unsigned char source[], const size_t src_len, char reduced[]) { +int gs1_verify(struct zint_symbol *symbol, const unsigned char source[], const size_t src_len, char reduced[]) { int i, j, last_ai, ai_latch; char ai_string[7]; /* 6 char max "(NNNN)" */ int bracket_level, max_bracket_level, ai_length, max_ai_length, min_ai_length; @@ -92,7 +93,7 @@ INTERNAL int gs1_verify(struct zint_symbol *symbol, const unsigned char source[] #endif /* Detect extended ASCII characters */ - for (i = 0; i < (int) src_len; i++) { + for (i = 0; i < src_len; i++) { if (source[i] >= 128) { strcpy(symbol->errtxt, "250: Extended ASCII characters are not supported by GS1"); return ZINT_ERROR_INVALID_DATA; @@ -105,10 +106,6 @@ INTERNAL int gs1_verify(struct zint_symbol *symbol, const unsigned char source[] strcpy(symbol->errtxt, "251: Control characters are not supported by GS1"); return ZINT_ERROR_INVALID_DATA; } - if (source[i] == 127) { - strcpy(symbol->errtxt, "263: DEL characters are not supported by GS1"); - return ZINT_ERROR_INVALID_DATA; - } } if (source[0] != '[') { @@ -124,7 +121,7 @@ INTERNAL int gs1_verify(struct zint_symbol *symbol, const unsigned char source[] min_ai_length = 5; j = 0; ai_latch = 0; - for (i = 0; i < (int) src_len; i++) { + for (i = 0; i < src_len; i++) { ai_length += j; if (((j == 1) && (source[i] != ']')) && ((source[i] < '0') || (source[i] > '9'))) { ai_latch = 1; @@ -181,7 +178,7 @@ INTERNAL int gs1_verify(struct zint_symbol *symbol, const unsigned char source[] } ai_count = 0; - for (i = 1; i < (int) src_len; i++) { + for (i = 1; i < src_len; i++) { if (source[i - 1] == '[') { ai_location[ai_count] = i; j = 0; @@ -206,7 +203,7 @@ INTERNAL int gs1_verify(struct zint_symbol *symbol, const unsigned char source[] data_length[i] = 0; do { data_length[i]++; - } while ((source[data_location[i] + data_length[i] - 1] != '[') && (data_location[i] + data_length[i] <= (int) src_len)); + } while ((source[data_location[i] + data_length[i] - 1] != '[') && (data_location[i] + data_length[i] <= src_len)); data_length[i]--; } @@ -494,7 +491,7 @@ INTERNAL int gs1_verify(struct zint_symbol *symbol, const unsigned char source[] } if (ai_value[i] == 253) { // GDTI - if ((data_length[i] < 13) || (data_length[i] > 30)) { + if ((data_length[i] < 14) || (data_length[i] > 30)) { error_latch = 1; } else { error_latch = 0; @@ -502,7 +499,7 @@ INTERNAL int gs1_verify(struct zint_symbol *symbol, const unsigned char source[] } if (ai_value[i] == 255) { // GCN - if ((data_length[i] < 13) || (data_length[i] > 25)) { + if ((data_length[i] < 14) || (data_length[i] > 25)) { error_latch = 1; } else { error_latch = 0; @@ -665,7 +662,7 @@ INTERNAL int gs1_verify(struct zint_symbol *symbol, const unsigned char source[] j = 0; last_ai = 0; ai_latch = 1; - for (i = 0; i < (int) src_len; i++) { + for (i = 0; i < src_len; i++) { if ((source[i] != '[') && (source[i] != ']')) { reduced[j++] = source[i]; } diff --git a/backend/hanxin.c b/backend/hanxin.c index 15dff6b..b055cf5 100644 --- a/backend/hanxin.c +++ b/backend/hanxin.c @@ -1,7 +1,7 @@ /* hanxin.c - Han Xin Code libzint - the open source barcode library - Copyright (C) 2009-2020 Robin Stuart + Copyright (C) 2009-2019 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -28,12 +28,12 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ -/* This code attempts to implement Han Xin Code according to ISO/IEC 20830 (draft 2019-10-10) (previously AIMD-015:2010 (Rev 0.8)) */ +/* This code attempts to implement Han Xin Code according to AIMD-015:2010 (Rev 0.8) */ #include #include +#include #ifdef _MSC_VER #include #endif @@ -45,7 +45,7 @@ #include "assert.h" /* Find which submode to use for a text character */ -static int getsubmode(unsigned int input) { +int getsubmode(char input) { int submode = 2; if ((input >= '0') && (input <= '9')) { @@ -63,104 +63,83 @@ static int getsubmode(unsigned int input) { return submode; } -/* Return length of terminator for encoding mode */ -static int terminator_length(char mode) { - int result = 0; - - switch (mode) { - case 'n': - result = 10; - break; - case 't': - result = 6; - break; - case '1': - case '2': - result = 12; - break; - case 'd': - result = 15; - break; - } - - return result; -} - -/* Calculate the length of the binary string */ -static int calculate_binlength(char mode[], unsigned int source[], const size_t length, int eci) { +/* Calculate the approximate length of the binary string */ +static int calculate_binlength(char mode[], int source[], const size_t length, int eci) { size_t i; - char lastmode = '\0'; + char lastmode = 't'; int est_binlen = 0; int submode = 1; - int numeric_run = 0; if (eci != 0) { - est_binlen += 4; - if (eci <= 127) { - est_binlen += 8; - } else if ((eci >= 128) && (eci <= 16383)) { - est_binlen += 16; - } else { - est_binlen += 24; - } + est_binlen += 12; } i = 0; do { - if (mode[i] != lastmode) { - if (i > 0) { - est_binlen += terminator_length(lastmode); - } - /* GB 4-byte has indicator for each character (and no terminator) so not included here */ - /* Region1/Region2 have special terminator to go directly into each other's mode so not included here */ - if (mode[i] != 'f' || ((mode[i] == '1' && lastmode == '2') || (mode[i] == '2' && lastmode == '1'))) { - est_binlen += 4; - } - if (mode[i] == 'b') { /* Byte mode has byte count (and no terminator) */ - est_binlen += 13; - } - lastmode = mode[i]; - submode = 1; - numeric_run = 0; - } switch (mode[i]) { case 'n': - if (numeric_run % 3 == 0) { - est_binlen += 10; + if (lastmode != 'n') { + est_binlen += 14; + lastmode = 'n'; } - numeric_run++; + est_binlen += 4; break; case 't': - if (getsubmode(source[i]) != submode) { + if (lastmode != 't') { + est_binlen += 10; + lastmode = 't'; + submode = 1; + } + if (getsubmode((char) source[i]) != submode) { est_binlen += 6; - submode = getsubmode(source[i]); + submode = getsubmode((char) source[i]); } est_binlen += 6; break; case 'b': - est_binlen += source[i] > 0xFF ? 16 : 8; + if (lastmode != 'b') { + est_binlen += 17; + lastmode = 'b'; + } + est_binlen += 8; break; case '1': + if (lastmode != '1') { + est_binlen += 16; + lastmode = '1'; + } + est_binlen += 12; + break; case '2': + if (lastmode != '2') { + est_binlen += 16; + lastmode = '2'; + } est_binlen += 12; break; case 'd': + if (lastmode != 'd') { + est_binlen += 16; + lastmode = 'd'; + } est_binlen += 15; break; case 'f': - est_binlen += 25; + if (lastmode != 'f') { + est_binlen += 4; + lastmode = 'f'; + } + est_binlen += 21; i++; break; } i++; } while (i < length); - est_binlen += terminator_length(lastmode); - return est_binlen; } -static int isRegion1(unsigned int glyph) { +int isRegion1(int glyph) { int first_byte, second_byte; int valid = 0; @@ -186,7 +165,7 @@ static int isRegion1(unsigned int glyph) { return valid; } -static int isRegion2(unsigned int glyph) { +int isRegion2(int glyph) { int first_byte, second_byte; int valid = 0; @@ -202,7 +181,7 @@ static int isRegion2(unsigned int glyph) { return valid; } -static int isDoubleByte(unsigned int glyph) { +int isDoubleByte(int glyph) { int first_byte, second_byte; int valid = 0; @@ -222,7 +201,7 @@ static int isDoubleByte(unsigned int glyph) { return valid; } -static int isFourByte(unsigned int glyph, unsigned int glyph2) { +int isFourByte(int glyph, int glyph2) { int first_byte, second_byte; int third_byte, fourth_byte; int valid = 0; @@ -245,9 +224,70 @@ static int isFourByte(unsigned int glyph, unsigned int glyph2) { return valid; } +/* Calculate mode switching */ +static void hx_define_mode(char mode[], int source[], const size_t length) { + size_t i; + char lastmode = 't'; + + i = 0; + do { + int done = 0; + + if (isRegion1(source[i])) { + mode[i] = '1'; + done = 1; + i++; + } + + if ((done == 0) && (isRegion2(source[i]))) { + mode[i] = '2'; + done = 1; + i++; + } + + if ((done == 0) && (isDoubleByte(source[i]))) { + mode[i] = 'd'; + done = 1; + i++; + } + + if ((done == 0) && (i < length - 1)) { + if (isFourByte(source[i], source[i + 1])) { + mode[i] = 'f'; + mode[i + 1] = 'f'; + done = 1; + i += 2; + } + } + + if (done == 0) { + if ((source[i] >= '0') && (source[i] <= '9')) { + mode[i] = 'n'; + if (lastmode != 'n') { + lastmode = 'n'; + } + } else { + if ((source[i] <= 127) && ((source[i] <= 27) || (source[i] >= 32))) { + mode[i] = 't'; + if (lastmode != 't') { + lastmode = 't'; + } + } else { + mode[i] = 'b'; + if (lastmode != 'b') { + lastmode = 'b'; + } + } + } + i++; + } + } while (i < length); + mode[length] = '\0'; +} + /* Convert Text 1 sub-mode character to encoding value, as given in table 3 */ -static int lookup_text1(unsigned int input) { - int encoding_value = -1; +int lookup_text1(char input) { + int encoding_value = 0; if ((input >= '0') && (input <= '9')) { encoding_value = input - '0'; @@ -265,10 +305,10 @@ static int lookup_text1(unsigned int input) { } /* Convert Text 2 sub-mode character to encoding value, as given in table 4 */ -static int lookup_text2(unsigned int input) { - int encoding_value = -1; +int lookup_text2(char input) { + int encoding_value = 0; - if (input <= 27) { + if ((input >= 0) && (input <= 27)) { encoding_value = input; } @@ -276,10 +316,6 @@ static int lookup_text2(unsigned int input) { encoding_value = input - ' ' + 28; } - if ((input >= ':') && (input <= '@')) { - encoding_value = input - ':' + 44; - } - if ((input >= '[') && (input <= 96)) { encoding_value = input - '[' + 51; } @@ -291,162 +327,9 @@ static int lookup_text2(unsigned int input) { return encoding_value; } -/* hx_define_mode() stuff */ - -/* Bits multiplied by this for costs, so as to be whole integer divisible by 2 and 3 */ -#define HX_MULT 6 - -/* Whether in numeric or not. If in numeric, *p_end is set to position after numeric, and *p_cost is set to per-numeric cost */ -static int in_numeric(const unsigned int gbdata[], const size_t length, const unsigned int posn, unsigned int* p_end, unsigned int* p_cost) { - unsigned int i, digit_cnt; - - if (posn < *p_end) { - return 1; - } - - /* Attempt to calculate the average 'cost' of using numeric mode in number of bits (times HX_MULT) */ - for (i = posn; i < length && i < posn + 4 && gbdata[i] >= '0' && gbdata[i] <= '9'; i++); - - digit_cnt = i - posn; - - if (digit_cnt == 0) { - *p_end = 0; - return 0; - } - *p_end = i; - *p_cost = digit_cnt == 1 ? 60 /* 10 * HX_MULT */ : digit_cnt == 2 ? 30 /* (10 / 2) * HX_MULT */ : 20 /* (10 / 3) * HX_MULT */; - return 1; -} - -/* Whether in four-byte or not. If in four-byte, *p_fourbyte is set to position after four-byte, and *p_fourbyte_cost is set to per-position cost */ -static int in_fourbyte(const unsigned int gbdata[], const size_t length, const unsigned int posn, unsigned int* p_end, unsigned int* p_cost) { - if (posn < *p_end) { - return 1; - } - - if (posn == length - 1 || !isFourByte(gbdata[posn], gbdata[posn + 1])) { - *p_end = 0; - return 0; - } - *p_end = posn + 2; - *p_cost = 75; /* ((4 + 21) / 2) * HX_MULT */ - return 1; -} - -/* Indexes into mode_types array */ -#define HX_N 0 /* Numeric */ -#define HX_T 1 /* Text */ -#define HX_B 2 /* Binary */ -#define HX_1 3 /* Common Chinese Region One */ -#define HX_2 4 /* Common Chinese Region Two */ -#define HX_D 5 /* GB 18030 2-byte Region */ -#define HX_F 6 /* GB 18030 4-byte Region */ -/* Note Unicode, GS1 and URI modes not implemented */ - -#define HX_NUM_MODES 7 - -/* Initial mode costs */ -static unsigned int* hx_head_costs(unsigned int state[]) { - static unsigned int head_costs[HX_NUM_MODES] = { - /* N T B 1 2 D F */ - 4 * HX_MULT, 4 * HX_MULT, (4 + 13) * HX_MULT, 4 * HX_MULT, 4 * HX_MULT, 4 * HX_MULT, 0 - }; - - (void)state; /* Unused */ - return head_costs; -} - -/* Cost of switching modes from k to j */ -static unsigned int hx_switch_cost(unsigned int state[], const int k, const int j) { - static const unsigned int switch_costs[HX_NUM_MODES][HX_NUM_MODES] = { - /* N T B 1 2 D F */ - /*N*/ { 0, (10 + 4) * HX_MULT, (10 + 4 + 13) * HX_MULT, (10 + 4) * HX_MULT, (10 + 4) * HX_MULT, (10 + 4) * HX_MULT, 10 * HX_MULT }, - /*T*/ { (6 + 4) * HX_MULT, 0, (6 + 4 + 13) * HX_MULT, (6 + 4) * HX_MULT, (6 + 4) * HX_MULT, (6 + 4) * HX_MULT, 6 * HX_MULT }, - /*B*/ { 4 * HX_MULT, 4 * HX_MULT, 0, 4 * HX_MULT, 4 * HX_MULT, 4 * HX_MULT, 0 }, - /*1*/ { (12 + 4) * HX_MULT, (12 + 4) * HX_MULT, (12 + 4 + 13) * HX_MULT, 0, 12 * HX_MULT, (12 + 4) * HX_MULT, 12 * HX_MULT }, - /*2*/ { (12 + 4) * HX_MULT, (12 + 4) * HX_MULT, (12 + 4 + 13) * HX_MULT, 12 * HX_MULT, 0, (12 + 4) * HX_MULT, 12 * HX_MULT }, - /*D*/ { (15 + 4) * HX_MULT, (15 + 4) * HX_MULT, (15 + 4 + 13) * HX_MULT, (15 + 4) * HX_MULT, (15 + 4) * HX_MULT, 0, 15 * HX_MULT }, - /*F*/ { 4 * HX_MULT, 4 * HX_MULT, (4 + 13) * HX_MULT, 4 * HX_MULT, 4 * HX_MULT, 4 * HX_MULT, 0 }, - }; - - (void)state; /* Unused */ - return switch_costs[k][j]; -} - -/* Final end-of-data costs */ -static unsigned int hx_eod_cost(unsigned int state[], const int k) { - static const unsigned int eod_costs[HX_NUM_MODES] = { - /* N T B 1 2 D F */ - 10 * HX_MULT, 6 * HX_MULT, 0, 12 * HX_MULT, 12 * HX_MULT, 15 * HX_MULT, 0 - }; - - (void)state; /* Unused */ - return eod_costs[k]; -} - -/* Calculate cost of encoding character */ -static void hx_cur_cost(unsigned int state[], const unsigned int gbdata[], const size_t length, const int i, char* char_modes, unsigned int prev_costs[], unsigned int cur_costs[]) { - int cm_i = i * HX_NUM_MODES; - int text1, text2; - unsigned int* p_numeric_end = &state[0]; - unsigned int* p_numeric_cost = &state[1]; - unsigned int* p_text_submode = &state[2]; - unsigned int* p_fourbyte_end = &state[3]; - unsigned int* p_fourbyte_cost = &state[4]; - - if (in_numeric(gbdata, length, i, p_numeric_end, p_numeric_cost)) { - cur_costs[HX_N] = prev_costs[HX_N] + *p_numeric_cost; - char_modes[cm_i + HX_N] = 'n'; - } - - text1 = lookup_text1(gbdata[i]) != -1; - text2 = lookup_text2(gbdata[i]) != -1; - - if (text1 || text2) { - if ((*p_text_submode == 1 && text2) || (*p_text_submode == 2 && text1)) { - cur_costs[HX_T] = prev_costs[HX_T] + 72; /* (6 + 6) * HX_MULT */ - *p_text_submode = text2 ? 2 : 1; - } else { - cur_costs[HX_T] = prev_costs[HX_T] + 36; /* 6 * HX_MULT */ - } - char_modes[cm_i + HX_T] = 't'; - } else { - *p_text_submode = 1; - } - - /* Binary mode can encode anything */ - cur_costs[HX_B] = prev_costs[HX_B] + (gbdata[i] > 0xFF ? 96 : 48); /* (16 : 8) * HX_MULT */ - char_modes[cm_i + HX_B] = 'b'; - - if (isRegion1(gbdata[i])) { - cur_costs[HX_1] = prev_costs[HX_1] + 72; /* 12 * HX_MULT */ - char_modes[cm_i + HX_1] = '1'; - } - if (isRegion2(gbdata[i])) { - cur_costs[HX_2] = prev_costs[HX_2] + 72; /* 12 * HX_MULT */ - char_modes[cm_i + HX_2] = '2'; - } - if (isDoubleByte(gbdata[i])) { - cur_costs[HX_D] = prev_costs[HX_D] + 90; /* 15 * HX_MULT */ - char_modes[cm_i + HX_D] = 'd'; - } - if (in_fourbyte(gbdata, length, i, p_fourbyte_end, p_fourbyte_cost)) { - cur_costs[HX_F] = prev_costs[HX_F] + *p_fourbyte_cost; - char_modes[cm_i + HX_F] = 'f'; - } -} - -/* Calculate optimized encoding modes */ -static void hx_define_mode(char* mode, const unsigned int gbdata[], const size_t length, const int debug) { - static const char mode_types[] = { 'n', 't', 'b', '1', '2', 'd', 'f' }; /* Must be in same order as HX_N etc */ - unsigned int state[5] = { 0 /*numeric_end*/, 0 /*numeric_cost*/, 1 /*text_submode*/, 0 /*fourbyte_end*/, 0 /*fourbyte_cost*/ }; - - pn_define_mode(mode, gbdata, length, debug, state, mode_types, HX_NUM_MODES, hx_head_costs, hx_switch_cost, hx_eod_cost, hx_cur_cost); -} - /* Convert input data to binary stream */ -static void calculate_binary(char binary[], char mode[], unsigned int source[], const size_t length, const int eci, int debug) { - unsigned int position = 0; +static void calculate_binary(char binary[], char mode[], int source[], const size_t length, const int eci, int debug) { + int position = 0; int i, count, encoding_value; int first_byte, second_byte; int third_byte, fourth_byte; @@ -471,13 +354,9 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[], do { int block_length = 0; - int double_byte = 0; do { - if (mode[position] == 'b' && source[position + block_length] > 0xFF) { - double_byte++; - } block_length++; - } while (position + block_length < length && mode[position + block_length] == mode[position]); + } while (mode[position + block_length] == mode[position]); switch (mode[position]) { case 'n': @@ -485,11 +364,10 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[], /* Mode indicator */ bin_append(1, 4, binary); - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("Numeric\n"); } - count = 0; /* Suppress gcc -Wmaybe-uninitialized */ i = 0; while (i < block_length) { @@ -513,7 +391,7 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[], bin_append(encoding_value, 10, binary); - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("0x%4x (%d)", encoding_value, encoding_value); } @@ -533,18 +411,20 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[], break; } - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf(" (TERM %d)\n", count); } break; case 't': /* Text mode */ - /* Mode indicator */ - bin_append(2, 4, binary); + if (position != 0) { + /* Mode indicator */ + bin_append(2, 4, binary); - if (debug & ZINT_DEBUG_PRINT) { - printf("Text\n"); + if (debug) { + printf("Text\n"); + } } submode = 1; @@ -553,24 +433,24 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[], while (i < block_length) { - if (getsubmode(source[i + position]) != submode) { + if (getsubmode((char) source[i + position]) != submode) { /* Change submode */ bin_append(62, 6, binary); - submode = getsubmode(source[i + position]); - if (debug & ZINT_DEBUG_PRINT) { + submode = getsubmode((char) source[i + position]); + if (debug) { printf("SWITCH "); } } if (submode == 1) { - encoding_value = lookup_text1(source[i + position]); + encoding_value = lookup_text1((char) source[i + position]); } else { - encoding_value = lookup_text2(source[i + position]); + encoding_value = lookup_text2((char) source[i + position]); } bin_append(encoding_value, 6, binary); - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("%.2x [ASC %.2x] ", encoding_value, source[i + position]); } i++; @@ -579,7 +459,7 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[], /* Terminator */ bin_append(63, 6, binary); - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("\n"); } break; @@ -589,10 +469,10 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[], bin_append(3, 4, binary); /* Count indicator */ - bin_append(block_length + double_byte, 13, binary); + bin_append(block_length, 13, binary); - if (debug & ZINT_DEBUG_PRINT) { - printf("Binary (length %d)\n", block_length + double_byte); + if (debug) { + printf("Binary (length %d)\n", block_length); } i = 0; @@ -600,27 +480,25 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[], while (i < block_length) { /* 8-bit bytes with no conversion */ - bin_append(source[i + position], source[i + position] > 0xFF ? 16 : 8, binary); + bin_append(source[i + position], 8, binary); - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("%d ", source[i + position]); } i++; } - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("\n"); } break; case '1': /* Region 1 encoding */ /* Mode indicator */ - if (position == 0 || mode[position - 1] != '2') { /* Unless previous mode Region 2 */ - bin_append(4, 4, binary); - } + bin_append(4, 4, binary); - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("Region 1\n"); } @@ -645,7 +523,7 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[], glyph = (second_byte - 0xa1) + 0xfca; } - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("%.4x [GB %.4x] ", glyph, source[i + position]); } @@ -654,9 +532,9 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[], } /* Terminator */ - bin_append(position == length - 1 || mode[position + 1] != '2' ? 4095 : 4094, 12, binary); + bin_append(4095, 12, binary); - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("\n"); } @@ -664,11 +542,9 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[], case '2': /* Region 2 encoding */ /* Mode indicator */ - if (position == 0 || mode[position - 1] != '1') { /* Unless previous mode Region 1 */ - bin_append(5, 4, binary); - } + bin_append(5, 4, binary); - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("Region 2\n"); } @@ -680,7 +556,7 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[], glyph = (0x5e * (first_byte - 0xd8)) + (second_byte - 0xa1); - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("%.4x [GB %.4x] ", glyph, source[i + position]); } @@ -689,9 +565,9 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[], } /* Terminator */ - bin_append(position == length - 1 || mode[position + 1] != '1' ? 4095 : 4094, 12, binary); + bin_append(4095, 12, binary); - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("\n"); } break; @@ -700,7 +576,7 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[], /* Mode indicator */ bin_append(6, 4, binary); - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("Double byte\n"); } @@ -716,7 +592,7 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[], glyph = (0xbe * (first_byte - 0x81)) + (second_byte - 0x41); } - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("%.4x ", glyph); } @@ -729,13 +605,13 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[], /* Terminator sequence of length 12 is a mistake - confirmed by Wang Yi */ - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("\n"); } break; case 'f': /* Four-byte encoding */ - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("Four byte\n"); } @@ -754,7 +630,7 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[], glyph = (0x3138 * (first_byte - 0x81)) + (0x04ec * (second_byte - 0x30)) + (0x0a * (third_byte - 0x81)) + (fourth_byte - 0x30); - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("%d ", glyph); } @@ -764,7 +640,7 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[], /* No terminator */ - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("\n"); } break; @@ -777,7 +653,7 @@ static void calculate_binary(char binary[], char mode[], unsigned int source[], } /* Finder pattern for top left of symbol */ -static void hx_place_finder_top_left(unsigned char* grid, int size) { +void hx_place_finder_top_left(unsigned char* grid, int size) { int xp, yp; int x = 0, y = 0; char finder[] = {0x7F, 0x40, 0x5F, 0x50, 0x57, 0x57, 0x57}; @@ -794,7 +670,7 @@ static void hx_place_finder_top_left(unsigned char* grid, int size) { } /* Finder pattern for top right and bottom left of symbol */ -static void hx_place_finder(unsigned char* grid, int size, int x, int y) { +void hx_place_finder(unsigned char* grid, int size, int x, int y) { int xp, yp; char finder[] = {0x7F, 0x01, 0x7D, 0x05, 0x75, 0x75, 0x75}; @@ -810,7 +686,7 @@ static void hx_place_finder(unsigned char* grid, int size, int x, int y) { } /* Finder pattern for bottom right of symbol */ -static void hx_place_finder_bottom_right(unsigned char* grid, int size) { +void hx_place_finder_bottom_right(unsigned char* grid, int size) { int xp, yp; int x = size - 7, y = size - 7; char finder[] = {0x75, 0x75, 0x75, 0x05, 0x7D, 0x01, 0x7F}; @@ -827,7 +703,7 @@ static void hx_place_finder_bottom_right(unsigned char* grid, int size) { } /* Avoid plotting outside symbol or over finder patterns */ -static void hx_safe_plot(unsigned char *grid, int size, int x, int y, int value) { +void hx_safe_plot(unsigned char *grid, int size, int x, int y, int value) { if ((x >= 0) && (x < size)) { if ((y >= 0) && (y < size)) { if (grid[(y * size) + x] == 0) { @@ -838,7 +714,7 @@ static void hx_safe_plot(unsigned char *grid, int size, int x, int y, int value) } /* Plot an alignment pattern around top and right of a module */ -static void hx_plot_alignment(unsigned char *grid, int size, int x, int y, int w, int h) { +void hx_plot_alignment(unsigned char *grid, int size, int x, int y, int w, int h) { int i; hx_safe_plot(grid, size, x, y, 0x11); hx_safe_plot(grid, size, x - 1, y + 1, 0x10); @@ -857,7 +733,7 @@ static void hx_plot_alignment(unsigned char *grid, int size, int x, int y, int w } /* Plot assistant alignment patterns */ -static void hx_plot_assistant(unsigned char *grid, int size, int x, int y) { +void hx_plot_assistant(unsigned char *grid, int size, int x, int y) { hx_safe_plot(grid, size, x - 1, y - 1, 0x10); hx_safe_plot(grid, size, x, y - 1, 0x10); hx_safe_plot(grid, size, x + 1, y - 1, 0x10); @@ -870,7 +746,7 @@ static void hx_plot_assistant(unsigned char *grid, int size, int x, int y) { } /* Put static elements in the grid */ -static void hx_setup_grid(unsigned char* grid, int size, int version) { +void hx_setup_grid(unsigned char* grid, int size, int version) { int i, j; for (i = 0; i < size; i++) { @@ -1028,7 +904,7 @@ static void hx_setup_grid(unsigned char* grid, int size, int version) { } /* Calculate error correction codes */ -static void hx_add_ecc(unsigned char fullstream[], unsigned char datastream[], int data_codewords, int version, int ecc_level) { +void hx_add_ecc(unsigned char fullstream[], unsigned char datastream[], int version, int ecc_level) { unsigned char data_block[180]; unsigned char ecc_block[36]; int i, j, block; @@ -1045,8 +921,8 @@ static void hx_add_ecc(unsigned char fullstream[], unsigned char datastream[], i for (j = 0; j < data_length; j++) { input_position++; output_position++; - data_block[j] = input_position < data_codewords ? datastream[input_position] : 0; - fullstream[output_position] = data_block[j]; + data_block[j] = datastream[input_position]; + fullstream[output_position] = datastream[input_position]; } rs_init_gf(0x163); // x^8 + x^6 + x^5 + x + 1 = 0 @@ -1063,7 +939,7 @@ static void hx_add_ecc(unsigned char fullstream[], unsigned char datastream[], i } /* Rearrange data in batches of 13 codewords (section 5.8.2) */ -static void make_picket_fence(unsigned char fullstream[], unsigned char picket_fence[], int streamsize) { +void make_picket_fence(unsigned char fullstream[], unsigned char picket_fence[], int streamsize) { int i, start; int output_position = 0; @@ -1078,7 +954,7 @@ static void make_picket_fence(unsigned char fullstream[], unsigned char picket_f } /* Evaluate a bitmask according to table 9 */ -static int hx_evaluate(unsigned char *eval, int size, int pattern) { +int hx_evaluate(unsigned char *eval, int size, int pattern) { int x, y, block, weight; int result = 0; char state; @@ -1095,9 +971,7 @@ static int hx_evaluate(unsigned char *eval, int size, int pattern) { * desired pattern.*/ for (x = 0; x < size; x++) { for (y = 0; y < size; y++) { - if (eval[(y * size) + x] & 0xf0) { - local[(y * size) + x] = 0; - } else if ((eval[(y * size) + x] & (0x01 << pattern)) != 0) { + if ((eval[(y * size) + x] & (0x01 << pattern)) != 0) { local[(y * size) + x] = '1'; } else { local[(y * size) + x] = '0'; @@ -1109,9 +983,6 @@ static int hx_evaluate(unsigned char *eval, int size, int pattern) { /* Vertical */ for (x = 0; x < size; x++) { for (y = 0; y < (size - 7); y++) { - if (local[(y * size) + x] == 0) { - continue; - } p = 0; for (weight = 0; weight < 7; weight++) { if (local[((y + weight) * size) + x] == '1') { @@ -1128,7 +999,7 @@ static int hx_evaluate(unsigned char *eval, int size, int pattern) { if (local[(b * size) + x] == '0') { beforeCount++; } else { - break; + beforeCount = 0; } } } @@ -1141,7 +1012,7 @@ static int hx_evaluate(unsigned char *eval, int size, int pattern) { if (local[(a * size) + x] == '0') { afterCount++; } else { - break; + afterCount = 0; } } } @@ -1158,9 +1029,6 @@ static int hx_evaluate(unsigned char *eval, int size, int pattern) { /* Horizontal */ for (y = 0; y < size; y++) { for (x = 0; x < (size - 7); x++) { - if (local[(y * size) + x] == 0) { - continue; - } p = 0; for (weight = 0; weight < 7; weight++) { if (local[(y * size) + x + weight] == '1') { @@ -1177,7 +1045,7 @@ static int hx_evaluate(unsigned char *eval, int size, int pattern) { if (local[(y * size) + b] == '0') { beforeCount++; } else { - break; + beforeCount = 0; } } } @@ -1190,7 +1058,7 @@ static int hx_evaluate(unsigned char *eval, int size, int pattern) { if (local[(y * size) + a] == '0') { afterCount++; } else { - break; + afterCount = 0; } } } @@ -1209,31 +1077,23 @@ static int hx_evaluate(unsigned char *eval, int size, int pattern) { * position of the module.” - however i being the length of the run of the * same colour (i.e. "block" below) in the same fashion as ISO/IEC 18004 * makes more sense. -- Confirmed by Wang Yi */ - /* Fixed in ISO/IEC 20830 (draft 2019-10-10) section 5.8.3.2 "In Table 12 below, i refers to the modules with same color." */ /* Vertical */ for (x = 0; x < size; x++) { + state = local[x]; block = 0; - state = 0; for (y = 0; y < size; y++) { - if (local[(y * size) + x] == 0) { - if (block >= 3) { - result += (3 + block) * 4; - } - block = 0; - state = 0; - } else if (local[(y * size) + x] == state || state == 0) { + if (local[(y * size) + x] == state) { block++; - state = local[(y * size) + x]; } else { - if (block >= 3) { + if (block > 3) { result += (3 + block) * 4; } - block = 1; + block = 0; state = local[(y * size) + x]; } } - if (block >= 3) { + if (block > 3) { result += (3 + block) * 4; } } @@ -1243,24 +1103,17 @@ static int hx_evaluate(unsigned char *eval, int size, int pattern) { state = local[y * size]; block = 0; for (x = 0; x < size; x++) { - if (local[(y * size) + x] == 0) { - if (block >= 3) { - result += (3 + block) * 4; - } - block = 0; - state = 0; - } else if (local[(y * size) + x] == state || state == 0) { + if (local[(y * size) + x] == state) { block++; - state = local[(y * size) + x]; } else { - if (block >= 3) { + if (block > 3) { result += (3 + block) * 4; } - block = 1; + block = 0; state = local[(y * size) + x]; } } - if (block >= 3) { + if (block > 3) { result += (3 + block) * 4; } } @@ -1269,8 +1122,7 @@ static int hx_evaluate(unsigned char *eval, int size, int pattern) { } /* Apply the four possible bitmasks for evaluation */ -/* TODO: Haven't been able to replicate (or even get close to) the penalty scores in ISO/IEC 20830 (draft 2019-10-10) Annex K examples */ -static int hx_apply_bitmask(unsigned char *grid, int size) { +int hx_apply_bitmask(unsigned char *grid, int size) { int x, y; int i, j; int pattern, penalty[4]; @@ -1279,8 +1131,8 @@ static int hx_apply_bitmask(unsigned char *grid, int size) { unsigned char p; #ifndef _MSC_VER - unsigned char mask[(unsigned int)(size * size)]; /* Cast to suppress gcc -Walloc-size-larger-than */ - unsigned char eval[(unsigned int)(size * size)]; + unsigned char mask[size * size]; + unsigned char eval[size * size]; #else unsigned char* mask = (unsigned char *) _alloca((size * size) * sizeof (unsigned char)); unsigned char* eval = (unsigned char *) _alloca((size * size) * sizeof (unsigned char)); @@ -1310,10 +1162,8 @@ static int hx_apply_bitmask(unsigned char *grid, int size) { // apply data masks to grid, result in eval for (x = 0; x < size; x++) { for (y = 0; y < size; y++) { - if (grid[(y * size) + x] & 0xf0) { - p = 0xf0; - } else if (grid[(y * size) + x] & 0x01) { - p = 0x0f; + if (grid[(y * size) + x] & 0x01) { + p = 0xff; } else { p = 0x00; } @@ -1372,11 +1222,10 @@ static int hx_apply_bitmask(unsigned char *grid, int size) { } /* Han Xin Code - main */ -INTERNAL int han_xin(struct zint_symbol *symbol, const unsigned char source[], size_t length) { +int han_xin(struct zint_symbol *symbol, const unsigned char source[], size_t length) { int est_binlen; int ecc_level = symbol->option_1; int i, j, version; - int full_multibyte; int data_codewords = 0, size; int codewords; int bitmask; @@ -1386,10 +1235,12 @@ INTERNAL int han_xin(struct zint_symbol *symbol, const unsigned char source[], s unsigned char fi_ecc[4]; #ifndef _MSC_VER - unsigned int gbdata[(length + 1) * 2]; + int utfdata[length + 1]; + int gbdata[(length + 1) * 2]; char mode[length + 1]; #else - unsigned int* gbdata = (unsigned int *) _alloca(((length + 1) * 2) * sizeof (unsigned int)); + int* utfdata = (int *) _alloca((length + 1) * sizeof (int)); + int* gbdata = (int *) _alloca(((length + 1) * 2) * sizeof (int)); char* mode = (char *) _alloca((length + 1) * sizeof (char)); char* binary; unsigned char *datastream; @@ -1398,39 +1249,105 @@ INTERNAL int han_xin(struct zint_symbol *symbol, const unsigned char source[], s unsigned char *grid; #endif - full_multibyte = symbol->option_3 == ZINT_FULL_MULTIBYTE; /* If set use Hanzi mode in DATA_MODE or for single-byte Latin */ - - if ((symbol->input_mode & 0x07) == DATA_MODE) { - gb18030_cpy(source, &length, gbdata, full_multibyte); + if ((symbol->input_mode == DATA_MODE) || (symbol->eci != 0)) { + for (i = 0; i < length; i++) { + gbdata[i] = (int) source[i]; + } } else { - int done = 0; - if (symbol->eci != 29) { /* Unless ECI 29 (GB) */ - /* Try single byte (Latin) conversion first */ - int error_number = gb18030_utf8tosb(symbol->eci && symbol->eci <= 899 ? symbol->eci : 3, source, &length, gbdata, full_multibyte); - if (error_number == 0) { + int posn; + /* Convert Unicode input to GB-18030 */ + int error_number = utf8toutf16(symbol, source, utfdata, &length); + if (error_number != 0) { + return error_number; + } + + posn = 0; + for (i = 0; i < length; i++) { + int done = 0; + gbdata[posn] = 0; + + /* Single byte characters in range U+0000 -> U+007F */ + if (utfdata[i] <= 0x7f) { + gbdata[posn] = utfdata[i]; + posn++; done = 1; - } else if (symbol->eci && symbol->eci <= 899) { - strcpy(symbol->errtxt, "575: Invalid characters in input data"); - return error_number; } - } - if (!done) { - /* Try GB 18030 */ - int error_number = gb18030_utf8tomb(symbol, source, &length, gbdata); - if (error_number != 0) { - return error_number; + + /* Two bytes characters in GB-2312 */ + if (done == 0) { + j = 0; + do { + if (gb2312_lookup[j * 2] == utfdata[i]) { + gbdata[posn] = gb2312_lookup[(j * 2) + 1]; + posn++; + done = 1; + } + j++; + } while ((j < 7445) && (done == 0)); + } + + /* Two byte characters in GB-18030 */ + if (done == 0) { + j = 0; + do { + if (gb18030_twobyte_lookup[j * 2] == utfdata[i]) { + gbdata[posn] = gb18030_twobyte_lookup[(j * 2) + 1]; + posn++; + done = 1; + } + j++; + } while ((j < 16495) && (done == 0)); + } + + /* Four byte characters in range U+0080 -> U+FFFF */ + if (done == 0) { + j = 0; + do { + if (gb18030_fourbyte_lookup[j * 3] == utfdata[i]) { + gbdata[posn] = gb18030_fourbyte_lookup[(j * 3) + 1]; + gbdata[posn + 1] = gb18030_fourbyte_lookup[(j * 3) + 2]; + posn += 2; + done = 1; + } + j++; + } while ((j < 6793) && (done == 0)); + } + + /* Supplementary planes U+10000 -> U+1FFFF */ + if (done == 0) { + if (utfdata[i] >= 0x10000 && utfdata[i] < 0x110000) { + /* algorithm from libiconv-1.15\lib\gb18030.h */ + int j, r3, r2, r1, r0; + + j = utfdata[i] - 0x10000; + r3 = (j % 10) + 0x30; j = j / 10; + r2 = (j % 126) + 0x81; j = j / 126; + r1 = (j % 10) + 0x30; j = j / 10; + r0 = j + 0x90; + gbdata[posn] = (r0 << 8) + r1; + gbdata[posn + 1] = (r2 << 8) + r3; + posn += 2; + done = 1; + } + } + + /* Character not found */ + if (done == 0) { + strcpy(symbol->errtxt, "540: Unknown character in input data"); + return ZINT_ERROR_INVALID_DATA; } } + length = posn; } - hx_define_mode(mode, gbdata, length, symbol->debug); + hx_define_mode(mode, gbdata, length); est_binlen = calculate_binlength(mode, gbdata, length, symbol->eci); #ifndef _MSC_VER - char binary[est_binlen + 1]; + char binary[est_binlen + 10]; #else - binary = (char *) _alloca((est_binlen + 1) * sizeof (char)); + binary = (char *) _alloca((est_binlen + 10) * sizeof (char)); #endif memset(binary, 0, (est_binlen + 1) * sizeof (char)); @@ -1498,21 +1415,19 @@ INTERNAL int han_xin(struct zint_symbol *symbol, const unsigned char source[], s /* If there is spare capacity, increase the level of ECC */ - if (symbol->option_1 == -1 || symbol->option_1 != ecc_level) { /* Unless explicitly specified (within min/max bounds) by user */ - if ((ecc_level == 1) && (codewords < hx_data_codewords_L2[version - 1])) { - ecc_level = 2; - data_codewords = hx_data_codewords_L2[version - 1]; - } + if ((ecc_level == 1) && (codewords < hx_data_codewords_L2[version - 1])) { + ecc_level = 2; + data_codewords = hx_data_codewords_L2[version - 1]; + } - if ((ecc_level == 2) && (codewords < hx_data_codewords_L3[version - 1])) { - ecc_level = 3; - data_codewords = hx_data_codewords_L3[version - 1]; - } + if ((ecc_level == 2) && (codewords < hx_data_codewords_L3[version - 1])) { + ecc_level = 3; + data_codewords = hx_data_codewords_L3[version - 1]; + } - if ((ecc_level == 3) && (codewords < hx_data_codewords_L4[version - 1])) { - ecc_level = 4; - data_codewords = hx_data_codewords_L4[version - 1]; - } + if ((ecc_level == 3) && (codewords < hx_data_codewords_L4[version - 1])) { + ecc_level = 4; + data_codewords = hx_data_codewords_L4[version - 1]; } size = (version * 2) + 21; @@ -1539,7 +1454,7 @@ INTERNAL int han_xin(struct zint_symbol *symbol, const unsigned char source[], s } } - if (symbol->debug & ZINT_DEBUG_PRINT) { + if (symbol->debug) { printf("Datastream length: %d\n", data_codewords); printf("Datastream:\n"); for (i = 0; i < data_codewords; i++) { @@ -1547,13 +1462,10 @@ INTERNAL int han_xin(struct zint_symbol *symbol, const unsigned char source[], s } printf("\n"); } -#ifdef ZINT_TEST - if (symbol->debug & ZINT_DEBUG_TEST) debug_test_codeword_dump(symbol, datastream, data_codewords); -#endif hx_setup_grid(grid, size, version); - hx_add_ecc(fullstream, datastream, data_codewords, version, ecc_level); + hx_add_ecc(fullstream, datastream, version, ecc_level); make_picket_fence(fullstream, picket_fence, hx_total_codewords[version - 1]); @@ -1606,6 +1518,8 @@ INTERNAL int han_xin(struct zint_symbol *symbol, const unsigned char source[], s } } + + for (i = 0; i < 3; i++) { for (j = 0; j < 4; j++) { if (function_information[(i * 4) + j] == '1') { @@ -1663,3 +1577,5 @@ INTERNAL int han_xin(struct zint_symbol *symbol, const unsigned char source[], s return 0; } + + diff --git a/backend/imail.c b/backend/imail.c index 1b90efe..09f41c8 100644 --- a/backend/imail.c +++ b/backend/imail.c @@ -2,7 +2,7 @@ /* libzint - the open source barcode library - Copyright (C) 2008 - 2020 Robin Stuart + Copyright (C) 2008-2017 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -29,16 +29,17 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ /* The function "USPS_MSB_Math_CRC11GenerateFrameCheckSequence" is Copyright (C) 2006 United States Postal Service */ +#include +#include #include #include "common.h" #include "large.h" -#define SODIUM "0123456789-" +#define SODIUM "0123456789-" /* The following lookup tables were generated using the code in Appendix C */ @@ -201,14 +202,14 @@ static const unsigned short int AppxD_IV[130] = { ** USPS_MSB_Math_CRC11GenerateFrameCheckSequence ** ** Inputs: - ** ByteAttayPtr is the address of a 13 byte array holding 102 bits which + ** ByteAttayPtr is the address of a 13 byte array holding 102 bytes which ** are right justified - ie: the leftmost 2 bits of the first byte do not ** hold data and must be set to zero. ** ** Outputs: ** return unsigned short - 11 bit Frame Check Sequence (right justified) ***************************************************************************/ -static unsigned short USPS_MSB_Math_CRC11GenerateFrameCheckSequence(unsigned char *ByteArrayPtr) { +extern unsigned short USPS_MSB_Math_CRC11GenerateFrameCheckSequence(unsigned char *ByteArrayPtr) { unsigned short GeneratorPolynomial = 0x0F35; unsigned short FrameCheckSequence = 0x07FF; unsigned short Data; @@ -242,19 +243,20 @@ static unsigned short USPS_MSB_Math_CRC11GenerateFrameCheckSequence(unsigned cha return FrameCheckSequence; } -INTERNAL int imail(struct zint_symbol *symbol, unsigned char source[], int length) { +int imail(struct zint_symbol *symbol, unsigned char source[], int length) { char data_pattern[200]; int error_number; int i, j, read; - char zip[35], tracker[35], temp[2]; - large_int accum; - large_int byte_array_reg; + char zip[35], tracker[35], zip_adder[11], temp[2]; + short int accum[112], x_reg[112], y_reg[112]; unsigned char byte_array[13]; unsigned short usps_crc; int codeword[10]; unsigned short characters[10]; short int bar_map[130]; - int zip_len, len; + int zip_len; + + error_number = 0; if (length > 32) { strcpy(symbol->errtxt, "450: Input too long"); @@ -315,62 +317,185 @@ INTERNAL int imail(struct zint_symbol *symbol, unsigned char source[], int lengt /* Routing code first */ - large_load_str_u64(&accum, (unsigned char *) zip, zip_len); + for (i = 0; i < 112; i++) { + accum[i] = 0; + } + + for (read = 0; read < zip_len; read++) { + + binary_multiply(accum, "10"); + binary_load(x_reg, "0", 1); + + for (i = 0; i < 4; i++) { + if (ctoi(zip[read]) & (0x01 << i)) x_reg[i] = 1; + } + + binary_add(accum, x_reg); + } /* add weight to routing code */ + + for (i = 0; i < 112; i++) { + x_reg[i] = accum[i]; + } + if (zip_len > 9) { - large_add_u64(&accum, 1000100001); - } else if (zip_len > 5) { - large_add_u64(&accum, 100001); - } else if (zip_len > 0) { - large_add_u64(&accum, 1); + strcpy(zip_adder, "1000100001"); + } else { + if (zip_len > 5) { + strcpy(zip_adder, "100001"); + } else { + if (zip_len > 0) { + strcpy(zip_adder, "1"); + } else { + strcpy(zip_adder, "0"); + } + } + } + + for (i = 0; i < 112; i++) { + accum[i] = 0; + } + + for (read = 0; read < strlen(zip_adder); read++) { + + binary_multiply(accum, "10"); + binary_load(y_reg, "0", 1); + + for (i = 0; i < 4; i++) { + if (ctoi(zip_adder[read]) & (0x01 << i)) y_reg[i] = 1; + } + + binary_add(accum, y_reg); } + binary_add(accum, x_reg); + /* tracking code */ /* multiply by 10 */ - large_mul_u64(&accum, 10); + binary_multiply(accum, "10"); + binary_load(y_reg, "0", 1); /* add first digit of tracker */ - large_add_u64(&accum, ctoi(tracker[0])); + for (i = 0; i < 4; i++) { + if (ctoi(tracker[0]) & (0x01 << i)) y_reg[i] = 1; + } + + binary_add(accum, y_reg); /* multiply by 5 */ - large_mul_u64(&accum, 5); + binary_multiply(accum, "5"); + binary_load(y_reg, "0", 1); /* add second digit */ - large_add_u64(&accum, ctoi(tracker[1])); + for (i = 0; i < 4; i++) { + if (ctoi(tracker[1]) & (0x01 << i)) y_reg[i] = 1; + } + + binary_add(accum, y_reg); /* and then the rest */ - for (read = 2, len = strlen(tracker); read < len; read++) { + for (read = 2; read < strlen(tracker); read++) { - large_mul_u64(&accum, 10); - large_add_u64(&accum, ctoi(tracker[read])); - } + binary_multiply(accum, "10"); + binary_load(y_reg, "0", 1); - /* *** Step 2 - Generation of 11-bit CRC on Binary Data *** */ + for (i = 0; i < 4; i++) { + if (ctoi(tracker[read]) & (0x01 << i)) y_reg[i] = 1; + } - large_load(&byte_array_reg, &accum); + binary_add(accum, y_reg); + } - large_unset_bit(&byte_array_reg, 102); - large_unset_bit(&byte_array_reg, 103); + /* *** Step 2 - Generation of 11-bit CRC on Binary Data *** */ - large_uchar_array(&byte_array_reg, byte_array, 13, 8 /*bits*/); + accum[103] = 0; + accum[102] = 0; + + memset(byte_array, 0, 13); + for (j = 0; j < 13; j++) { + i = 96 - (8 * j); + byte_array[j] = 0; + byte_array[j] += accum[i]; + byte_array[j] += 2 * accum[i + 1]; + byte_array[j] += 4 * accum[i + 2]; + byte_array[j] += 8 * accum[i + 3]; + byte_array[j] += 16 * accum[i + 4]; + byte_array[j] += 32 * accum[i + 5]; + byte_array[j] += 64 * accum[i + 6]; + byte_array[j] += 128 * accum[i + 7]; + } usps_crc = USPS_MSB_Math_CRC11GenerateFrameCheckSequence(byte_array); /* *** Step 3 - Conversion from Binary Data to Codewords *** */ /* start with codeword J which is base 636 */ - codeword[9] = large_div_u64(&accum, 636); + for (i = 0; i < 112; i++) { + x_reg[i] = 0; + y_reg[i] = 0; + } + + x_reg[101] = 1; + x_reg[98] = 1; + x_reg[97] = 1; + x_reg[96] = 1; + x_reg[95] = 1; + x_reg[94] = 1; + + for (i = 92; i >= 0; i--) { + y_reg[i] = !islarger(x_reg, accum); + if (y_reg[i] == 1) { + binary_subtract(accum, x_reg); + } + shiftdown(x_reg); + } + + codeword[9] = (accum[9] * 512) + (accum[8] * 256) + (accum[7] * 128) + (accum[6] * 64) + + (accum[5] * 32) + (accum[4] * 16) + (accum[3] * 8) + (accum[2] * 4) + + (accum[1] * 2) + accum[0]; /* then codewords I to B with base 1365 */ for (j = 8; j > 0; j--) { - codeword[j] = large_div_u64(&accum, 1365); + for (i = 0; i < 112; i++) { + accum[i] = y_reg[i]; + y_reg[i] = 0; + x_reg[i] = 0; + } + x_reg[101] = 1; + x_reg[99] = 1; + x_reg[97] = 1; + x_reg[95] = 1; + x_reg[93] = 1; + x_reg[91] = 1; + for (i = 91; i >= 0; i--) { + y_reg[i] = !islarger(x_reg, accum); + if (y_reg[i] == 1) { + binary_subtract(accum, x_reg); + } + shiftdown(x_reg); + } + + codeword[j] = (accum[10] * 1024) + (accum[9] * 512) + (accum[8] * 256) + + (accum[7] * 128) + (accum[6] * 64) + (accum[5] * 32) + + (accum[4] * 16) + (accum[3] * 8) + (accum[2] * 4) + + (accum[1] * 2) + accum[0]; } - codeword[0] = large_lo(&accum); + codeword[0] = (y_reg[10] * 1024) + (y_reg[9] * 512) + (y_reg[8] * 256) + + (y_reg[7] * 128) + (y_reg[6] * 64) + (y_reg[5] * 32) + + (y_reg[4] * 16) + (y_reg[3] * 8) + (y_reg[2] * 4) + + (y_reg[1] * 2) + y_reg[0]; + + for (i = 0; i < 8; i++) { + if (codeword[i] == 1365) { + codeword[i] = 0; + codeword[i + 1]++; + } + } /* *** Step 4 - Inserting Additional Information into Codewords *** */ @@ -421,7 +546,7 @@ INTERNAL int imail(struct zint_symbol *symbol, unsigned char source[], int lengt /* Translate 4-state data pattern to symbol */ read = 0; - for (i = 0, len = strlen(data_pattern); i < len; i++) { + for (i = 0; i < strlen(data_pattern); i++) { if ((data_pattern[i] == '1') || (data_pattern[i] == '0')) { set_module(symbol, 0, read); } @@ -440,3 +565,4 @@ INTERNAL int imail(struct zint_symbol *symbol, unsigned char source[], int lengt symbol->width = read - 1; return error_number; } + diff --git a/backend/large.c b/backend/large.c index 6f7d7af..32e7e28 100644 --- a/backend/large.c +++ b/backend/large.c @@ -2,7 +2,7 @@ /* libzint - the open source barcode library - Copyright (C) 2008 - 2020 Robin Stuart + Copyright (C) 2008-2017 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -29,289 +29,184 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ - -/* `large_mul_u64()` and `large_div_u64()` are adapted from articles by F. W. Jacob - * https://www.codeproject.com/Tips/618570/UInt-Multiplication-Squaring - * "This article, along with any associated source code and files, is licensed under The BSD License" - * http://www.codeproject.com/Tips/785014/UInt-Division-Modulus - * "This article, along with any associated source code and files, is licensed under The BSD License" - * - * These in turn are based on Hacker's Delight (2nd Edition, 2012) by Henry S. Warren, Jr. - * "You are free to use, copy, and distribute any of the code on this web site, whether modified by you or not." - * https://web.archive.org/web/20190716204559/http://www.hackersdelight.org/permissions.htm - * - * `clz_u64()` and other bits and pieces are adapted from r128.h by Alan Hickman (fahickman) - * https://github.com/fahickman/r128/blob/master/r128.h - * "R128 is released into the public domain. See LICENSE for details." LICENSE is The Unlicense. - */ + #include -#ifdef _MSC_VER -#include -#endif +#include #include "common.h" #include "large.h" -#define MASK32 0xFFFFFFFF - -/* Convert decimal string `s` of (at most) length `length` to 64-bit and place in 128-bit `t` */ -INTERNAL void large_load_str_u64(large_int *t, const unsigned char *s, int length) { - uint64_t val = 0; - const unsigned char *se = s + length; - for (; s < se && *s >= '0' && *s <= '9'; s++) { - val *= 10; - val += *s - '0'; +void binary_add(short int accumulator[], short int input_buffer[]) { /* Binary addition */ + int i, carry; + carry = 0; + + for (i = 0; i < 112; i++) { + int done = 0; + if (((input_buffer[i] == 0) && (accumulator[i] == 0)) + && ((carry == 0) && (done == 0))) { + accumulator[i] = 0; + carry = 0; + done = 1; + } + if (((input_buffer[i] == 0) && (accumulator[i] == 0)) + && ((carry == 1) && (done == 0))) { + accumulator[i] = 1; + carry = 0; + done = 1; + } + if (((input_buffer[i] == 0) && (accumulator[i] == 1)) + && ((carry == 0) && (done == 0))) { + accumulator[i] = 1; + carry = 0; + done = 1; + } + if (((input_buffer[i] == 0) && (accumulator[i] == 1)) + && ((carry == 1) && (done == 0))) { + accumulator[i] = 0; + carry = 1; + done = 1; + } + if (((input_buffer[i] == 1) && (accumulator[i] == 0)) + && ((carry == 0) && (done == 0))) { + accumulator[i] = 1; + carry = 0; + done = 1; + } + if (((input_buffer[i] == 1) && (accumulator[i] == 0)) + && ((carry == 1) && (done == 0))) { + accumulator[i] = 0; + carry = 1; + done = 1; + } + if (((input_buffer[i] == 1) && (accumulator[i] == 1)) + && ((carry == 0) && (done == 0))) { + accumulator[i] = 0; + carry = 1; + done = 1; + } + if (((input_buffer[i] == 1) && (accumulator[i] == 1)) + && ((carry == 1) && (done == 0))) { + accumulator[i] = 1; + carry = 1; + done = 1; + } } - t->lo = val; - t->hi = 0; } -/* Add 128-bit `s` to 128-bit `t` */ -INTERNAL void large_add(large_int *t, const large_int *s) { - t->lo += s->lo; - t->hi += s->hi + (t->lo < s->lo); -} - -/* Add 64-bit `s` to 128-bit `t` */ -INTERNAL void large_add_u64(large_int *t, uint64_t s) { - t->lo += s; - if (t->lo < s) { - t->hi++; - } -} +void binary_subtract(short int accumulator[], short int input_buffer[]) { + /* 2's compliment subtraction */ + /* take input_buffer from accumulator and put answer in accumulator */ + int i; + short int sub_buffer[112]; -/* Subtract 64-bit `s` from 128-bit `t` */ -INTERNAL void large_sub_u64(large_int *t, uint64_t s) { - uint64_t r = t->lo - s; - if (r > t->lo) { - t->hi--; + for (i = 0; i < 112; i++) { + if (input_buffer[i] == 0) { + sub_buffer[i] = 1; + } else { + sub_buffer[i] = 0; + } } - t->lo = r; -} - -/* Multiply 128-bit `t` by 64-bit `s` - * See Jacob `mult64to128()` and Warren Section 8-2 - * Note '0' denotes low 32-bits, '1' high 32-bits - * if p00 == s0 * tlo0 - * k00 == carry of p00 - * p01 == s0 * tlo1 - * k01 == carry of (p01 + k00) - * p10 == s1 * tlo0 - * k10 == carry of p10 - * p11 == s1 * tlo1 (unmasked, i.e. including unshifted carry if any) - * then t->lo == (p01 + p10 + k00) << 32 + p00 - * and t->hi == p11 + k10 + k01 + thi * s - * - * (thi) tlo1 tlo0 - * x s1 s0 - * ------------------------- - * p00 - * k01 p01 + k00 - * p10 - * p11 + k10 - */ -INTERNAL void large_mul_u64(large_int *t, uint64_t s) { - uint64_t thi = t->hi; - uint64_t tlo0 = t->lo & MASK32; - uint64_t tlo1 = t->lo >> 32; - - uint64_t s0 = s & MASK32; - uint64_t s1 = s >> 32; + binary_add(accumulator, sub_buffer); - uint64_t tmp = s0 * tlo0; /* p00 (unmasked) */ - uint64_t p00 = tmp & MASK32; - uint64_t k10; + sub_buffer[0] = 1; - tmp = (s1 * tlo0) + (tmp >> 32); /* (p10 + k00) (p10 unmasked) */ - k10 = tmp >> 32; - - tmp = (s0 * tlo1) + (tmp & MASK32); /* (p01 + p10 + k00) (p01 unmasked) */ - - t->lo = (tmp << 32) + p00; /* (p01 + p10 + k00) << 32 + p00 (note any carry from unmasked p01 shifted out) */ - t->hi = (s1 * tlo1) + k10 + (tmp >> 32) + thi * s; /* p11 + k10 + k01 + thi * s */ -} - -/* Count leading zeroes. See Hickman `r128__clz64()` */ -STATIC_UNLESS_ZINT_TEST int clz_u64(uint64_t x) { - uint64_t n = 64, y; - y = x >> 32; if (y) { n -= 32; x = y; } - y = x >> 16; if (y) { n -= 16; x = y; } - y = x >> 8; if (y) { n -= 8; x = y; } - y = x >> 4; if (y) { n -= 4; x = y; } - y = x >> 2; if (y) { n -= 2; x = y; } - y = x >> 1; if (y) { n -= 1; x = y; } - return (int) (n - x); + for (i = 1; i < 112; i++) { + sub_buffer[i] = 0; + } + binary_add(accumulator, sub_buffer); } -/* Divide 128-bit dividend `t` by 64-bit divisor `v` - * See Jacob `divmod128by128/64()` and Warren Section 9–2 (divmu64.c.txt) - * Note digits are 32-bit parts */ -INTERNAL uint64_t large_div_u64(large_int *t, uint64_t v) { - const uint64_t b = 0x100000000; /* Number base (2**32) */ - uint64_t qhi = 0; /* High digit of returned quotient */ - - uint64_t tnhi, tnlo, tnlo1, tnlo0, vn1, vn0; /* Normalized forms of (parts of) t and v */ - uint64_t rnhilo1; /* Remainder after dividing 1st 3 digits of t by v */ - uint64_t qhat1, qhat0; /* Estimated quotient digits */ - uint64_t rhat; /* Remainder of estimated quotient digit */ - uint64_t tmp; - int norm_shift; - - /* Deal with single-digit (i.e. 32-bit) divisor here */ - if (v < b) { - qhi = t->hi / v; - tmp = ((t->hi - qhi * v) << 32) + (t->lo >> 32); /* k * b + tlo1 */ - qhat1 = tmp / v; - tmp = ((tmp - qhat1 * v) << 32) + (t->lo & MASK32); /* k * b + tlo0 */ - qhat0 = tmp / v; - t->lo = (qhat1 << 32) | qhat0; - t->hi = qhi; - return tmp - qhat0 * v; +void binary_multiply(short int reg[], char data[]) { + /* Multiply the contents of reg[] by a number */ + short int temp[112] = {0}; + short int accum[112] = {0}; + int i; + + binary_load(temp, data, strlen(data)); + + for (i = 0; i < 102; i++) { + if (temp[i] == 1) { + binary_add(accum, reg); + } + shiftup(reg); } - - /* Main algorithm requires t->hi < v */ - if (t->hi >= v) { - qhi = t->hi / v; - t->hi %= v; + + for (i = 0; i < 112; i++) { + reg[i] = accum[i]; } +} - /* Normalize by shifting v left just enough so that its high-order - * bit is on, and shift t left the same amount. Note don't need extra - * high-end digit for dividend as t->hi < v */ - - norm_shift = clz_u64(v); - v <<= norm_shift; - vn1 = v >> 32; - vn0 = v & MASK32; - - if (norm_shift > 0) { - tnhi = (t->hi << norm_shift) | (t->lo >> (64 - norm_shift)); - tnlo = t->lo << norm_shift; - } else { - tnhi = t->hi; - tnlo = t->lo; - } +void shiftdown(short int buffer[]) { + int i; - tnlo1 = tnlo >> 32; - tnlo0 = tnlo & MASK32; + buffer[102] = 0; + buffer[103] = 0; - /* Compute qhat1 estimate */ + for (i = 0; i < 102; i++) { + buffer[i] = buffer[i + 1]; + } +} - qhat1 = tnhi / vn1; /* Divide first digit of v into first 2 digits of t */ - rhat = tnhi % vn1; +void shiftup(short int buffer[]) { + int i; - /* Loop until qhat1 one digit and <= (rhat * b + 3rd digit of t) / vn0 */ - for (tmp = qhat1 * vn0; qhat1 >= b || tmp > (rhat << 32) + tnlo1; tmp -= vn0) { - --qhat1; - rhat += vn1; - if (rhat >= b) { /* Must check here as (rhat << 32) would overflow */ - break; /* qhat1 * vn0 < b * b (since vn0 < b) */ - } + for (i = 102; i > 0; i--) { + buffer[i] = buffer[i - 1]; } - /* Note qhat1 will be exact as have fully divided by 2-digit divisor - * (can only be too high by 1 (and require "add back" step) if divisor at least 3 digits) */ - rnhilo1 = (tnhi << 32) + tnlo1 - (qhat1 * v); /* Note high digit (if any) of both tnhi and (qhat1 * v) shifted out */ + buffer[0] = 0; +} - /* Compute qhat0 estimate */ +short int islarger(short int accum[], short int reg[]) { + /* Returns 1 if accum[] is larger than reg[], else 0 */ + int i, latch, larger; + latch = 0; + i = 103; + larger = 0; - qhat0 = rnhilo1 / vn1; /* Divide first digit of v into 2-digit remains of first 3 digits of t */ - rhat = rnhilo1 % vn1; - /* Loop until qhat0 one digit and <= (rhat * b + 4th digit of t) / vn0 */ - for (tmp = qhat0 * vn0; qhat0 >= b || tmp > (rhat << 32) + tnlo0; tmp -= vn0) { - --qhat0; - rhat += vn1; - if (rhat >= b) { - break; + do { + if ((accum[i] == 1) && (reg[i] == 0)) { + latch = 1; + larger = 1; } - } - /* Similarly qhat0 will be exact */ - - t->lo = (qhat1 << 32) | qhat0; - t->hi = qhi; + if ((accum[i] == 0) && (reg[i] == 1)) { + latch = 1; + } + i--; + } while ((latch == 0) && (i >= 0)); - /* Unnormalize remainder */ - return ((rnhilo1 << 32) + tnlo0 - (qhat0 * v)) >> norm_shift; + return larger; } -/* Unset a bit (zero-based) */ -INTERNAL void large_unset_bit(large_int *t, int bit) { - if (bit < 64) { - t->lo &= ~(((uint64_t) 1) << bit); - } else if (bit < 128) { - t->hi &= ~(((uint64_t) 1) << (bit - 64)); - } -} +void binary_load(short int reg[], char data[], const size_t src_len) { + size_t read; + int i; + short int temp[112] = {0}; -/* Ouput large_int into an unsigned int array of size `size`, each element containing `bits` bits */ -INTERNAL void large_uint_array(const large_int *t, unsigned int *uint_array, int size, int bits) { - int i, j; - uint64_t mask; - if (bits <= 0) { - bits = 8; - } else if (bits > 32) { - bits = 32; - } - mask = ~(((uint64_t) -1) << bits); - for (i = 0, j = 0; i < size && j < 64; i++, j += bits) { - uint_array[size - 1 - i] = (t->lo >> j) & mask; /* Little-endian order */ + for (i = 0; i < 112; i++) { + reg[i] = 0; } - if (i < size) { - if (j != 64) { - j -= 64; - /* (first j bits of t->hi) << (bits - j) | (last (bits - j) bits of t->lo) */ - uint_array[size - i] = ((t->hi & ~((((uint64_t) -1) << j))) << (bits - j)) | (t->lo >> (64 - (bits - j)) & mask); - } else { - j = 0; - } - for (; i < size && j < 64; i++, j += bits) { - uint_array[size - 1 - i] = (t->hi >> j) & mask; + + for (read = 0; read < src_len; read++) { + + for (i = 0; i < 112; i++) { + temp[i] = reg[i]; } - if (i < size && j != 128) { - uint_array[size - 1 - i] = t->hi >> (j - bits) & mask; + + for (i = 0; i < 9; i++) { + binary_add(reg, temp); } - } -} -/* As `large_uint_array()` above, except output to unsigned char array */ -INTERNAL void large_uchar_array(const large_int *t, unsigned char *uchar_array, int size, int bits) { - int i; -#ifndef _MSC_VER - unsigned int uint_array[size ? size : 1]; /* Avoid run-time warning if size is 0 */ -#else - unsigned int *uint_array = (unsigned int *) _alloca((size ? size : 1) * sizeof(unsigned int)); -#endif + for (i = 0; i < 112; i++) { + temp[i] = 0; + } - large_uint_array(t, uint_array, size, bits); + for (i = 0; i < 4; i++) { + if (ctoi(data[read]) & (0x01 << i)) temp[i] = 1; + } - for (i = 0; i < size; i++) { - uchar_array[i] = uint_array[i]; + binary_add(reg, temp); } } -/* Output formatted large_int to stdout */ -INTERNAL void large_print(large_int *t) { - char buf[35]; /* 2 (0x) + 32 (hex) + 1 */ - puts(large_dump(t, buf)); -} - -/* Format large_int into buffer, which should be at least 35 chars in size */ -INTERNAL char *large_dump(large_int *t, char *buf) { - unsigned int tlo1 = large_lo(t) >> 32; - unsigned int tlo0 = large_lo(t) & MASK32; - unsigned int thi1 = large_hi(t) >> 32; - unsigned int thi0 = large_hi(t) & MASK32; - - if (thi1) { - sprintf(buf, "0x%X%08X%08X%08X", thi1, thi0, tlo1, tlo0); - } else if (thi0) { - sprintf(buf, "0x%X%08X%08X", thi0, tlo1, tlo0); - } else if (tlo1) { - sprintf(buf, "0x%X%08X", tlo1, tlo0); - } else { - sprintf(buf, "0x%X", tlo0); - } - return buf; -} diff --git a/backend/large.h b/backend/large.h index 06325f5..01f89aa 100644 --- a/backend/large.h +++ b/backend/large.h @@ -2,7 +2,7 @@ /* libzint - the open source barcode library - Copyright (C) 2008 - 2020 Robin Stuart + Copyright (C) 2008-2017 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -29,52 +29,24 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ #ifndef __LARGE_H #define __LARGE_H -#ifndef _MSC_VER -#include -#else -#include "ms_stdint.h" -#endif - #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ -typedef struct { uint64_t lo; uint64_t hi; } large_int; - -#define large_lo(s) ((s)->lo) -#define large_hi(s) ((s)->hi) - -/* Set 128-bit `t` from 128-bit `s` */ -#define large_load(t, s) do { (t)->lo = (s)->lo; (t)->hi = (s)->hi; } while (0) - -/* Set 128-bit `t` from 64-bit `s` */ -#define large_load_u64(t, s) do { (t)->lo = (s); (t)->hi = 0; } while (0) - -INTERNAL void large_load_str_u64(large_int *t, const unsigned char *s, int length); - -INTERNAL void large_add(large_int *t, const large_int *s); -INTERNAL void large_add_u64(large_int *t, uint64_t s); - -INTERNAL void large_sub_u64(large_int *t, uint64_t s); - -INTERNAL void large_mul_u64(large_int *t, uint64_t s); - -INTERNAL uint64_t large_div_u64(large_int *t, uint64_t v); - -INTERNAL void large_unset_bit(large_int *t, int bit); - -INTERNAL void large_uint_array(const large_int *t, unsigned int *uint_array, int size, int bits); -INTERNAL void large_uchar_array(const large_int *t, unsigned char *uchar_array, int size, int bits); - -INTERNAL void large_print(large_int *t); -INTERNAL char *large_dump(large_int *t, char *buf); +extern void binary_load(short int reg[], char data[], const size_t src_len); +extern void binary_add(short int accumulator[], short int input_buffer[]); +extern void binary_subtract(short int accumulator[], short int input_buffer[]); +extern void shiftdown(short int buffer[]); +extern void shiftup(short int buffer[]); +extern short int islarger(short int accum[], short int reg[]); +extern void binary_multiply(short int reg[], char data[]); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __LARGE_H */ + diff --git a/backend/library.c b/backend/library.c index a9714af..48a9c62 100644 --- a/backend/library.c +++ b/backend/library.c @@ -1,7 +1,7 @@ /* library.c - external functions of libzint libzint - the open source barcode library - Copyright (C) 2009 - 2020 Robin Stuart + Copyright (C) 2009-2019 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -31,6 +31,8 @@ /* vim: set ts=4 sw=4 et : */ #include +#include +#include #include #ifdef _MSC_VER #include @@ -38,7 +40,7 @@ #include "common.h" #include "gs1.h" -#define TECHNETIUM "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%" +#define TECHNETIUM "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%" struct zint_symbol *ZBarcode_Create() { struct zint_symbol *symbol; @@ -60,21 +62,24 @@ struct zint_symbol *ZBarcode_Create() { symbol->scale = 1.0; symbol->option_1 = -1; symbol->option_2 = 0; - symbol->option_3 = 0; + symbol->option_3 = 928; // PDF_MAX symbol->show_hrt = 1; // Show human readable text symbol->fontsize = 8; symbol->input_mode = DATA_MODE; + strcpy(symbol->primary, ""); + memset(&(symbol->encoded_data[0][0]), 0, sizeof (symbol->encoded_data)); + memset(&(symbol->row_height[0]), 0, sizeof (symbol->row_height)); symbol->bitmap = NULL; symbol->bitmap_width = 0; symbol->bitmap_height = 0; symbol->eci = 0; // Default 0 uses ECI 3 symbol->dot_size = 4.0 / 5.0; - symbol->vector = NULL; symbol->debug = 0; return symbol; } -INTERNAL void vector_free(struct zint_symbol *symbol); /* Free vector structures */ +extern void render_free(struct zint_symbol *symbol); /* Free render structures */ +extern void vector_free(struct zint_symbol *symbol); /* Free vector structures */ void ZBarcode_Clear(struct zint_symbol *symbol) { int i, j; @@ -96,6 +101,7 @@ void ZBarcode_Clear(struct zint_symbol *symbol) { symbol->bitmap_height = 0; // If there is a rendered version, ensure its memory is released + render_free(symbol); vector_free(symbol); } @@ -104,82 +110,84 @@ void ZBarcode_Delete(struct zint_symbol *symbol) { free(symbol->bitmap); // If there is a rendered version, ensure its memory is released + render_free(symbol); vector_free(symbol); free(symbol); } -INTERNAL int get_best_eci(unsigned char source[], size_t length); /* Calculate suitable ECI mode */ -INTERNAL int utf_to_eci(const int eci, const unsigned char source[], unsigned char dest[], size_t *length); /* Convert Unicode to other encodings */ - - -INTERNAL int eanx(struct zint_symbol *symbol, unsigned char source[], int length); /* EAN system barcodes */ -INTERNAL int c39(struct zint_symbol *symbol, unsigned char source[], const size_t length); /* Code 3 from 9 (or Code 39) */ -INTERNAL int pharmazentral(struct zint_symbol *symbol, unsigned char source[], int length); /* Pharmazentral Nummer (PZN) */ -INTERNAL int ec39(struct zint_symbol *symbol, unsigned char source[], int length); /* Extended Code 3 from 9 (or Code 39+) */ -INTERNAL int codabar(struct zint_symbol *symbol, unsigned char source[], int length); /* Codabar - a simple substitution cipher */ -INTERNAL int matrix_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 2 of 5 Standard (& Matrix) */ -INTERNAL int industrial_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 2 of 5 Industrial */ -INTERNAL int iata_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 2 of 5 IATA */ -INTERNAL int interleaved_two_of_five(struct zint_symbol *symbol, const unsigned char source[], size_t length); /* Code 2 of 5 Interleaved */ -INTERNAL int logic_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 2 of 5 Data Logic */ -INTERNAL int itf14(struct zint_symbol *symbol, unsigned char source[], int length); /* ITF-14 */ -INTERNAL int dpleit(struct zint_symbol *symbol, unsigned char source[], int length); /* Deutsche Post Leitcode */ -INTERNAL int dpident(struct zint_symbol *symbol, unsigned char source[], int length); /* Deutsche Post Identcode */ -INTERNAL int c93(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 93 - a re-working of Code 39+, generates 2 check digits */ -INTERNAL int code_128(struct zint_symbol *symbol, const unsigned char source[], const size_t length); /* Code 128 and NVE-18 */ -INTERNAL int ean_128(struct zint_symbol *symbol, unsigned char source[], const size_t length); /* EAN-128 (GS1-128) */ -INTERNAL int code_11(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 11 */ -INTERNAL int msi_handle(struct zint_symbol *symbol, unsigned char source[], int length); /* MSI Plessey */ -INTERNAL int telepen(struct zint_symbol *symbol, unsigned char source[], const size_t length); /* Telepen ASCII */ -INTERNAL int telepen_num(struct zint_symbol *symbol, unsigned char source[], const size_t length); /* Telepen Numeric */ -INTERNAL int plessey(struct zint_symbol *symbol, unsigned char source[], const size_t length); /* Plessey Code */ -INTERNAL int pharma_one(struct zint_symbol *symbol, unsigned char source[], int length); /* Pharmacode One Track */ -INTERNAL int flattermarken(struct zint_symbol *symbol, unsigned char source[], int length); /* Flattermarken */ -INTERNAL int fim(struct zint_symbol *symbol, unsigned char source[], int length); /* Facing Identification Mark */ -INTERNAL int pharma_two(struct zint_symbol *symbol, unsigned char source[], int length); /* Pharmacode Two Track */ -INTERNAL int post_plot(struct zint_symbol *symbol, unsigned char source[], int length); /* Postnet */ -INTERNAL int planet_plot(struct zint_symbol *symbol, unsigned char source[], int length); /* PLANET */ -INTERNAL int imail(struct zint_symbol *symbol, unsigned char source[], int length); /* Intelligent Mail (aka USPS OneCode) */ -INTERNAL int royal_plot(struct zint_symbol *symbol, unsigned char source[], int length); /* RM4SCC */ -INTERNAL int australia_post(struct zint_symbol *symbol, unsigned char source[], int length); /* Australia Post 4-state */ -INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[],const size_t length); /* Code 16k */ -INTERNAL int pdf417enc(struct zint_symbol *symbol, unsigned char source[], const size_t length); /* PDF417 */ -INTERNAL int micro_pdf417(struct zint_symbol *symbol, unsigned char chaine[], const size_t length); /* Micro PDF417 */ -INTERNAL int maxicode(struct zint_symbol *symbol, unsigned char source[], int length); /* Maxicode */ -INTERNAL int rss14(struct zint_symbol *symbol, unsigned char source[], int length); /* RSS-14 */ -INTERNAL int rsslimited(struct zint_symbol *symbol, unsigned char source[], int length); /* RSS Limited */ -INTERNAL int rssexpanded(struct zint_symbol *symbol, unsigned char source[], int length); /* RSS Expanded */ -INTERNAL int composite(struct zint_symbol *symbol, unsigned char source[], int length); /* Composite Symbology */ -INTERNAL int kix_code(struct zint_symbol *symbol, unsigned char source[], int length); /* TNT KIX Code */ -INTERNAL int aztec(struct zint_symbol *symbol, unsigned char source[], const size_t length); /* Aztec Code */ -INTERNAL int code32(struct zint_symbol *symbol, unsigned char source[], int length); /* Italian Pharmacode */ -INTERNAL int daft_code(struct zint_symbol *symbol, unsigned char source[], int length); /* DAFT Code */ -INTERNAL int ean_14(struct zint_symbol *symbol, unsigned char source[], int length); /* EAN-14 */ -INTERNAL int nve_18(struct zint_symbol *symbol, unsigned char source[], int length); /* NVE-18 */ -INTERNAL int microqr(struct zint_symbol *symbol, const unsigned char source[], size_t length); /* Micro QR Code */ -INTERNAL int aztec_runes(struct zint_symbol *symbol, unsigned char source[], int length); /* Aztec Runes */ -INTERNAL int korea_post(struct zint_symbol *symbol, unsigned char source[], int length); /* Korea Post */ -INTERNAL int japan_post(struct zint_symbol *symbol, unsigned char source[], int length); /* Japanese Post */ -INTERNAL int code_49(struct zint_symbol *symbol, unsigned char source[], const int length); /* Code 49 */ -INTERNAL int channel_code(struct zint_symbol *symbol, unsigned char source[], int length); /* Channel Code */ -INTERNAL int code_one(struct zint_symbol *symbol, unsigned char source[], int length); /* Code One */ -INTERNAL int grid_matrix(struct zint_symbol *symbol, const unsigned char source[], size_t length); /* Grid Matrix */ -INTERNAL int han_xin(struct zint_symbol * symbol, const unsigned char source[], size_t length); /* Han Xin */ -INTERNAL int dotcode(struct zint_symbol * symbol, const unsigned char source[], int length); /* DotCode */ -INTERNAL int codablock(struct zint_symbol * symbol, const unsigned char source[], const size_t length); /* Codablock */ -INTERNAL int upnqr(struct zint_symbol *symbol, const unsigned char source[], size_t length); /* UPNQR */ -INTERNAL int qr_code(struct zint_symbol *symbol, const unsigned char source[], size_t length); /* QR Code */ -INTERNAL int dmatrix(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length); /* Data Matrix (IEC16022) */ -INTERNAL int vin(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length); /* VIN Code (Vehicle Identification Number) */ -INTERNAL int mailmark(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length); /* Royal Mail 4-state Mailmark */ -INTERNAL int ultracode(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length); /* Ultracode */ -INTERNAL int rmqr(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length); /* rMQR */ - -INTERNAL int plot_raster(struct zint_symbol *symbol, int rotate_angle, int file_type); /* Plot to PNG/BMP/PCX */ -INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_type); /* Plot to EPS/EMF/SVG */ - -static void error_tag(char error_string[], int error_number) { +extern int get_best_eci(unsigned char source[], size_t length); /* Calculate suitable ECI mode */ +extern int utf_to_eci(const int eci, const unsigned char source[], unsigned char dest[], size_t *length); /* Convert Unicode to other encodings */ + + +extern int eanx(struct zint_symbol *symbol, unsigned char source[], int length); /* EAN system barcodes */ +extern int c39(struct zint_symbol *symbol, unsigned char source[], const size_t length); /* Code 3 from 9 (or Code 39) */ +extern int pharmazentral(struct zint_symbol *symbol, unsigned char source[], int length); /* Pharmazentral Nummer (PZN) */ +extern int ec39(struct zint_symbol *symbol, unsigned char source[], int length); /* Extended Code 3 from 9 (or Code 39+) */ +extern int codabar(struct zint_symbol *symbol, unsigned char source[], int length); /* Codabar - a simple substitution cipher */ +extern int matrix_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 2 of 5 Standard (& Matrix) */ +extern int industrial_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 2 of 5 Industrial */ +extern int iata_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 2 of 5 IATA */ +extern int interleaved_two_of_five(struct zint_symbol *symbol, const unsigned char source[], size_t length); /* Code 2 of 5 Interleaved */ +extern int logic_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 2 of 5 Data Logic */ +extern int itf14(struct zint_symbol *symbol, unsigned char source[], int length); /* ITF-14 */ +extern int dpleit(struct zint_symbol *symbol, unsigned char source[], int length); /* Deutsche Post Leitcode */ +extern int dpident(struct zint_symbol *symbol, unsigned char source[], int length); /* Deutsche Post Identcode */ +extern int c93(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 93 - a re-working of Code 39+, generates 2 check digits */ +extern int code_128(struct zint_symbol *symbol, unsigned char source[], const size_t length); /* Code 128 and NVE-18 */ +extern int ean_128(struct zint_symbol *symbol, unsigned char source[], const size_t length); /* EAN-128 (GS1-128) */ +extern int code_11(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 11 */ +extern int msi_handle(struct zint_symbol *symbol, unsigned char source[], int length); /* MSI Plessey */ +extern int telepen(struct zint_symbol *symbol, unsigned char source[], const size_t length); /* Telepen ASCII */ +extern int telepen_num(struct zint_symbol *symbol, unsigned char source[], const size_t length); /* Telepen Numeric */ +extern int plessey(struct zint_symbol *symbol, unsigned char source[], const size_t length); /* Plessey Code */ +extern int pharma_one(struct zint_symbol *symbol, unsigned char source[], int length); /* Pharmacode One Track */ +extern int flattermarken(struct zint_symbol *symbol, unsigned char source[], int length); /* Flattermarken */ +extern int fim(struct zint_symbol *symbol, unsigned char source[], int length); /* Facing Identification Mark */ +extern int pharma_two(struct zint_symbol *symbol, unsigned char source[], int length); /* Pharmacode Two Track */ +extern int post_plot(struct zint_symbol *symbol, unsigned char source[], int length); /* Postnet */ +extern int planet_plot(struct zint_symbol *symbol, unsigned char source[], int length); /* PLANET */ +extern int imail(struct zint_symbol *symbol, unsigned char source[], int length); /* Intelligent Mail (aka USPS OneCode) */ +extern int royal_plot(struct zint_symbol *symbol, unsigned char source[], int length); /* RM4SCC */ +extern int australia_post(struct zint_symbol *symbol, unsigned char source[], int length); /* Australia Post 4-state */ +extern int code16k(struct zint_symbol *symbol, unsigned char source[],const size_t length); /* Code 16k */ +extern int pdf417enc(struct zint_symbol *symbol, unsigned char source[], const size_t length); /* PDF417 */ +extern int micro_pdf417(struct zint_symbol *symbol, unsigned char chaine[], const size_t length); /* Micro PDF417 */ +extern int maxicode(struct zint_symbol *symbol, unsigned char source[], int length); /* Maxicode */ +extern int rss14(struct zint_symbol *symbol, unsigned char source[], int length); /* RSS-14 */ +extern int rsslimited(struct zint_symbol *symbol, unsigned char source[], int length); /* RSS Limited */ +extern int rssexpanded(struct zint_symbol *symbol, unsigned char source[], int length); /* RSS Expanded */ +extern int composite(struct zint_symbol *symbol, unsigned char source[], int length); /* Composite Symbology */ +extern int kix_code(struct zint_symbol *symbol, unsigned char source[], int length); /* TNT KIX Code */ +extern int aztec(struct zint_symbol *symbol, unsigned char source[], const size_t length); /* Aztec Code */ +extern int code32(struct zint_symbol *symbol, unsigned char source[], int length); /* Italian Pharmacode */ +extern int daft_code(struct zint_symbol *symbol, unsigned char source[], int length); /* DAFT Code */ +extern int ean_14(struct zint_symbol *symbol, unsigned char source[], int length); /* EAN-14 */ +extern int nve_18(struct zint_symbol *symbol, unsigned char source[], int length); /* NVE-18 */ +extern int microqr(struct zint_symbol *symbol, const unsigned char source[], size_t length); /* Micro QR Code */ +extern int aztec_runes(struct zint_symbol *symbol, unsigned char source[], int length); /* Aztec Runes */ +extern int korea_post(struct zint_symbol *symbol, unsigned char source[], int length); /* Korea Post */ +extern int japan_post(struct zint_symbol *symbol, unsigned char source[], int length); /* Japanese Post */ +extern int code_49(struct zint_symbol *symbol, unsigned char source[], const int length); /* Code 49 */ +extern int channel_code(struct zint_symbol *symbol, unsigned char source[], int length); /* Channel Code */ +extern int code_one(struct zint_symbol *symbol, unsigned char source[], int length); /* Code One */ +extern int grid_matrix(struct zint_symbol *symbol, const unsigned char source[], size_t length); /* Grid Matrix */ +extern int han_xin(struct zint_symbol * symbol, const unsigned char source[], size_t length); /* Han Xin */ +extern int dotcode(struct zint_symbol * symbol, const unsigned char source[], int length); /* DotCode */ +extern int codablock(struct zint_symbol * symbol, const unsigned char source[], const size_t length); /* Codablock */ +extern int upnqr(struct zint_symbol *symbol, const unsigned char source[], size_t length); /* UPNQR */ +extern int qr_code(struct zint_symbol *symbol, const unsigned char source[], size_t length); /* QR Code */ +extern int dmatrix(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length); /* Data Matrix (IEC16022) */ +extern int vin(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length); /* VIN Code (Vehicle Identification Number) */ +extern int mailmark(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length); /* Royal Mail 4-state Mailmark */ +extern int ultracode(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length); /* Ultracode */ + +extern int plot_raster(struct zint_symbol *symbol, int rotate_angle, int file_type); /* Plot to PNG/BMP/PCX */ +extern int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_type); /* Plot to EPS/EMF/SVG */ + +extern int render_plot(struct zint_symbol *symbol, float width, float height); /* Plot to gLabels - depreciated */ + +void error_tag(char error_string[], int error_number) { if (error_number != 0) { char error_buffer[100]; @@ -196,7 +204,7 @@ static void error_tag(char error_string[], int error_number) { } /* Output a hexadecimal representation of the rendered symbol */ -static int dump_plot(struct zint_symbol *symbol) { +int dump_plot(struct zint_symbol *symbol) { FILE *f; int i, r; char hex[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', @@ -377,7 +385,7 @@ static void check_row_heights(struct zint_symbol *symbol) { static int check_force_gs1(const int symbology) { /* Returns 1 if symbology MUST have GS1 data */ - + int result = is_composite(symbology); switch (symbology) { @@ -389,7 +397,7 @@ static int check_force_gs1(const int symbology) { result = 1; break; } - + return result; } @@ -406,8 +414,6 @@ static int gs1_compliant(const int symbology) { case BARCODE_CODE49: case BARCODE_QRCODE: case BARCODE_DOTCODE: - case BARCODE_RMQR: - case BARCODE_ULTRA: result = 1; break; } @@ -434,7 +440,6 @@ static int is_matrix(const int symbology) { case BARCODE_HANXIN: case BARCODE_DOTCODE: case BARCODE_UPNQR: - case BARCODE_RMQR: result = 1; break; } @@ -444,7 +449,7 @@ static int is_matrix(const int symbology) { static int is_linear(const int symbology) { /* Returns 1 if symbology is linear (1 dimensional) */ - + int result = 0; switch (symbology) { case BARCODE_CODE11: @@ -501,7 +506,7 @@ static int is_linear(const int symbology) { result = 1; break; } - + return result; } @@ -628,7 +633,6 @@ int ZBarcode_ValidID(int symbol_id) { case BARCODE_VIN: case BARCODE_MAILMARK: case BARCODE_ULTRA: - case BARCODE_RMQR: result = 1; break; } @@ -636,13 +640,11 @@ int ZBarcode_ValidID(int symbol_id) { return result; } -static int reduced_charset(struct zint_symbol *symbol, const unsigned char *source, size_t in_length); - -static int extended_or_reduced_charset(struct zint_symbol *symbol, const unsigned char *source, const int length) { +static int extended_charset(struct zint_symbol *symbol, const unsigned char *source, const int length) { int error_number = 0; - + + /* These are the "elite" standards which can support multiple character sets */ switch (symbol->symbology) { - /* These are the "elite" standards which have support for specific character sets */ case BARCODE_QRCODE: error_number = qr_code(symbol, source, length); break; case BARCODE_MICROQR: error_number = microqr(symbol, source, length); @@ -653,17 +655,13 @@ static int extended_or_reduced_charset(struct zint_symbol *symbol, const unsigne break; case BARCODE_UPNQR: error_number = upnqr(symbol, source, length); break; - case BARCODE_RMQR: error_number = rmqr(symbol, source, length); - break; - default: error_number = reduced_charset(symbol, source, length); - break; } return error_number; } static int reduced_charset(struct zint_symbol *symbol, const unsigned char *source, size_t in_length) { - /* These are the "norm" standards which only support Latin-1 at most, though a few support ECI */ + /* These are the "norm" standards which only support Latin-1 at most */ int error_number = 0; #ifndef _MSC_VER @@ -671,15 +669,23 @@ static int reduced_charset(struct zint_symbol *symbol, const unsigned char *sour #else unsigned char* preprocessed = (unsigned char*) _alloca(in_length + 1); #endif - - if (symbol->symbology == BARCODE_ITF14) { + + if (symbol->symbology == BARCODE_CODE16K) { + symbol->whitespace_width = 16; + symbol->border_width = 2; + if (!(symbol->output_options & BARCODE_BIND)) { + symbol->output_options += BARCODE_BIND; + } + } + else + if (symbol->symbology == BARCODE_ITF14) { symbol->whitespace_width = 20; symbol->border_width = 8; if (!(symbol->output_options & BARCODE_BOX)) { symbol->output_options += BARCODE_BOX; } } - + switch (symbol->input_mode & 0x07) { case DATA_MODE: case GS1_MODE: @@ -687,19 +693,18 @@ static int reduced_charset(struct zint_symbol *symbol, const unsigned char *sour preprocessed[in_length] = '\0'; break; case UNICODE_MODE: - /* Prior check ensures ECI only set for those that support it */ - error_number = utf_to_eci(symbol->eci && symbol->eci <= 899 ? symbol->eci : 3, source, preprocessed, &in_length); + error_number = utf_to_eci(symbol->eci, source, preprocessed, &in_length); if (error_number != 0) { strcpy(symbol->errtxt, "204: Invalid characters in input data"); return error_number; } break; } - + if ((symbol->height == 0) && is_linear(symbol->symbology)) { symbol->height = 50; } - + switch (symbol->symbology) { case BARCODE_C25MATRIX: error_number = matrix_two_of_five(symbol, preprocessed, in_length); break; @@ -862,7 +867,7 @@ static int reduced_charset(struct zint_symbol *symbol, const unsigned char *sour return error_number; } -static void strip_bom(unsigned char *source, int *input_length) { +void strip_bom(unsigned char *source, int *input_length) { int i; if (*input_length > 3) { @@ -876,7 +881,7 @@ static void strip_bom(unsigned char *source, int *input_length) { } } -static int escape_char_process(struct zint_symbol *symbol, unsigned char *input_string, int *length) { +int escape_char_process(struct zint_symbol *symbol, unsigned char *input_string, int *length) { int error_number; int in_posn, out_posn; int hex1, hex2; @@ -889,13 +894,9 @@ static int escape_char_process(struct zint_symbol *symbol, unsigned char *input_ in_posn = 0; out_posn = 0; - + do { if (input_string[in_posn] == '\\') { - if (in_posn + 1 >= *length) { - strcpy(symbol->errtxt, "236: Incomplete escape character in input data"); - return ZINT_ERROR_INVALID_DATA; - } switch (input_string[in_posn + 1]) { case '0': escaped_string[out_posn] = 0x00; /* Null */ in_posn += 2; @@ -940,7 +941,7 @@ static int escape_char_process(struct zint_symbol *symbol, unsigned char *input_ hex1 = ctoi(input_string[in_posn + 2]); hex2 = ctoi(input_string[in_posn + 3]); if ((hex1 >= 0) && (hex2 >= 0)) { - if (hex1 > 7 && (symbol->input_mode & 0x07) == UNICODE_MODE) { + if (hex1 > 7 && (symbol->input_mode & UNICODE_MODE) != 0) { // Convert to UTF-8 escaped_string[out_posn] = 0xc0 + (hex1 >> 2); out_posn++; @@ -967,11 +968,11 @@ static int escape_char_process(struct zint_symbol *symbol, unsigned char *input_ } out_posn++; } while (in_posn < *length); - + memcpy(input_string, escaped_string, out_posn); input_string[out_posn] = '\0'; *length = out_posn; - + error_number = 0; return error_number; @@ -979,6 +980,7 @@ static int escape_char_process(struct zint_symbol *symbol, unsigned char *input_ int ZBarcode_Encode(struct zint_symbol *symbol, const unsigned char *source, int in_length) { int error_number, error_buffer, i; + int input_mode = symbol->input_mode; #ifdef _MSC_VER unsigned char* local_source; #endif @@ -1123,7 +1125,7 @@ int ZBarcode_Encode(struct zint_symbol *symbol, const unsigned char *source, int } } /* Everything from 128 up is Zint-specific */ - if (symbol->symbology > 145) { + if (symbol->symbology >= 145) { strcpy(symbol->errtxt, "216: Symbology out of range, using Code 128"); symbol->symbology = BARCODE_CODE128; error_number = ZINT_WARN_INVALID_OPTION; @@ -1144,10 +1146,6 @@ int ZBarcode_Encode(struct zint_symbol *symbol, const unsigned char *source, int error_number = ZINT_ERROR_INVALID_OPTION; } - if ((symbol->input_mode & 0x07) > 2) { - symbol->input_mode = DATA_MODE; /* Reset completely */ - } - if (error_number > 4) { error_tag(symbol->errtxt, error_number); return error_number; @@ -1159,19 +1157,16 @@ int ZBarcode_Encode(struct zint_symbol *symbol, const unsigned char *source, int local_source[in_length] = '\0'; /* Start acting on input mode */ - if (symbol->input_mode & ESCAPE_MODE) { + if (input_mode & ESCAPE_MODE) { error_number = escape_char_process(symbol, local_source, &in_length); if (error_number != 0) { error_tag(symbol->errtxt, error_number); return error_number; } + input_mode -= ESCAPE_MODE; } - if ((symbol->input_mode & 0x07) == UNICODE_MODE) { - strip_bom(local_source, &in_length); - } - - if (((symbol->input_mode & 0x07) == GS1_MODE) || (check_force_gs1(symbol->symbology))) { + if ((input_mode == GS1_MODE) || (check_force_gs1(symbol->symbology))) { if (gs1_compliant(symbol->symbology) == 1) { // Reduce input for composite and non-forced symbologies, others (EAN128 and RSS_EXP based) will handle it themselves if (is_composite(symbol->symbology) || !check_force_gs1(symbol->symbology)) { @@ -1195,21 +1190,68 @@ int ZBarcode_Encode(struct zint_symbol *symbol, const unsigned char *source, int } } - error_number = extended_or_reduced_charset(symbol, local_source, in_length); + if ((input_mode < 0) || (input_mode > 2)) { + input_mode = DATA_MODE; + } + + if ((symbol->eci != 0) && (symbol->eci != 26)) { + input_mode = DATA_MODE; + } + + if (input_mode == UNICODE_MODE) { + strip_bom(local_source, &in_length); + } + + switch (symbol->symbology) { + case BARCODE_QRCODE: + case BARCODE_MICROQR: + case BARCODE_GRIDMATRIX: + case BARCODE_HANXIN: + case BARCODE_UPNQR: + error_number = extended_charset(symbol, local_source, in_length); + break; + default: + error_number = reduced_charset(symbol, local_source, in_length); + break; + } - if ((error_number == ZINT_ERROR_INVALID_DATA) && symbol->eci == 0 && supports_eci(symbol->symbology) - && (symbol->input_mode & 0x07) == UNICODE_MODE) { + if ((error_number == ZINT_ERROR_INVALID_DATA) && (supports_eci(symbol->symbology) + && (input_mode == UNICODE_MODE))) { /* Try another ECI mode */ symbol->eci = get_best_eci(local_source, in_length); - error_number = extended_or_reduced_charset(symbol, local_source, in_length); - + switch (symbol->symbology) { + case BARCODE_QRCODE: + case BARCODE_MICROQR: + case BARCODE_GRIDMATRIX: + case BARCODE_HANXIN: + { +#ifndef _MSC_VER + unsigned char temp[in_length + 1]; +#else + unsigned char *temp = (unsigned char*) _alloca(in_length + 1); +#endif + size_t temp_len = in_length; + memcpy(temp, local_source, temp_len); + temp[temp_len] = '\0'; + error_number = utf_to_eci(symbol->eci, local_source, temp, &temp_len); + if (error_number == 0) { + in_length = (int) temp_len; + memcpy(local_source, temp, in_length); + local_source[in_length] = '\0'; + error_number = extended_charset(symbol, local_source, in_length); + } + } + break; + default: + error_number = reduced_charset(symbol, local_source, in_length); + break; + } + if (error_number == 0) { error_number = ZINT_WARN_USES_ECI; - if (!(symbol->debug & ZINT_DEBUG_TEST)) { - strcpy(symbol->errtxt, "222: Encoded data includes ECI"); - } - if (symbol->debug & ZINT_DEBUG_PRINT) printf("Data ECI %d\n", symbol->eci); + strcpy(symbol->errtxt, "222: Encoded data includes ECI"); + if (symbol->debug) printf("Data ECI %d\n", symbol->eci); } } @@ -1227,7 +1269,7 @@ int ZBarcode_Encode(struct zint_symbol *symbol, const unsigned char *source, int } error_tag(symbol->errtxt, error_number); - if (error_number < 5) { + if (error_number <= 5) { check_row_heights(symbol); } @@ -1299,7 +1341,7 @@ int ZBarcode_Print(struct zint_symbol *symbol, int rotate_angle) { error_number = dump_plot(symbol); } else if (!(strcmp(output, "EPS"))) { - error_number = plot_vector(symbol, rotate_angle, OUT_EPS_FILE); + error_number = plot_vector(symbol, rotate_angle, OUT_EPS_FILE); } else if (!(strcmp(output, "SVG"))) { error_number = plot_vector(symbol, rotate_angle, OUT_SVG_FILE); @@ -1336,14 +1378,6 @@ int ZBarcode_Buffer(struct zint_symbol *symbol, int rotate_angle) { return ZINT_ERROR_INVALID_OPTION; } - if (symbol->output_options & BARCODE_DOTTY_MODE) { - if (!(is_matrix(symbol->symbology))) { - strcpy(symbol->errtxt, "237: Selected symbology cannot be rendered as dots"); - error_tag(symbol->errtxt, ZINT_ERROR_INVALID_OPTION); - return ZINT_ERROR_INVALID_OPTION; - } - } - error_number = plot_raster(symbol, rotate_angle, OUT_BUFFER); error_tag(symbol->errtxt, error_number); return error_number; @@ -1364,14 +1398,6 @@ int ZBarcode_Buffer_Vector(struct zint_symbol *symbol, int rotate_angle) { return ZINT_ERROR_INVALID_OPTION; } - if (symbol->output_options & BARCODE_DOTTY_MODE) { - if (!(is_matrix(symbol->symbology))) { - strcpy(symbol->errtxt, "238: Selected symbology cannot be rendered as dots"); - error_tag(symbol->errtxt, ZINT_ERROR_INVALID_OPTION); - return ZINT_ERROR_INVALID_OPTION; - } - } - error_number = plot_vector(symbol, rotate_angle, OUT_BUFFER); error_tag(symbol->errtxt, error_number); return error_number; @@ -1408,7 +1434,7 @@ int ZBarcode_Encode_and_Buffer(struct zint_symbol *symbol, unsigned char *input, if (error_number == 0) { error_number = first_err; } - + return error_number; } @@ -1426,21 +1452,20 @@ int ZBarcode_Encode_and_Buffer_Vector(struct zint_symbol *symbol, unsigned char if (error_number == 0) { error_number = first_err; } - + return error_number; } int ZBarcode_Encode_File(struct zint_symbol *symbol, char *filename) { FILE *file; unsigned char *buffer; - long fileLen; - size_t n; - int nRead = 0; + unsigned long fileLen; + unsigned int nRead = 0, n = 0; int ret; if (!strcmp(filename, "-")) { file = stdin; - fileLen = 7900; + fileLen = 7100; } else { file = fopen(filename, "rb"); if (!file) { @@ -1454,19 +1479,13 @@ int ZBarcode_Encode_File(struct zint_symbol *symbol, char *filename) { fileLen = ftell(file); fseek(file, 0, SEEK_SET); - if (fileLen > 7900) { - /* The largest amount of data that can be encoded is 7827 numeric digits in Han Xin Code */ + if (fileLen > 7100) { + /* The largest amount of data that can be encoded is 7089 numeric digits in QR Code */ strcpy(symbol->errtxt, "230: Input file too long"); error_tag(symbol->errtxt, ZINT_ERROR_INVALID_DATA); fclose(file); return ZINT_ERROR_INVALID_DATA; } - if (fileLen <= 0) { - strcpy(symbol->errtxt, "235: Input file empty or unseekable"); - error_tag(symbol->errtxt, ZINT_ERROR_INVALID_DATA); - fclose(file); - return ZINT_ERROR_INVALID_DATA; - } } /* Allocate memory */ @@ -1474,9 +1493,8 @@ int ZBarcode_Encode_File(struct zint_symbol *symbol, char *filename) { if (!buffer) { strcpy(symbol->errtxt, "231: Internal memory error"); error_tag(symbol->errtxt, ZINT_ERROR_MEMORY); - if (strcmp(filename, "-")) { + if (strcmp(filename, "-")) fclose(file); - } return ZINT_ERROR_MEMORY; } @@ -1486,18 +1504,12 @@ int ZBarcode_Encode_File(struct zint_symbol *symbol, char *filename) { n = fread(buffer + nRead, 1, fileLen - nRead, file); if (ferror(file)) { strcpy(symbol->errtxt, strerror(errno)); - if (strcmp(filename, "-")) { - fclose(file); - } - free(buffer); return ZINT_ERROR_INVALID_DATA; } nRead += n; } while (!feof(file) && (0 < n) && (nRead < fileLen)); - if (strcmp(filename, "-")) { - fclose(file); - } + fclose(file); ret = ZBarcode_Encode(symbol, buffer, nRead); free(buffer); return ret; @@ -1511,13 +1523,13 @@ int ZBarcode_Encode_File_and_Print(struct zint_symbol *symbol, char *filename, i if (error_number >= 5) { return error_number; } - + first_err = error_number; error_number = ZBarcode_Print(symbol, rotate_angle); if (error_number == 0) { error_number = first_err; } - + return error_number; } @@ -1529,7 +1541,7 @@ int ZBarcode_Encode_File_and_Buffer(struct zint_symbol *symbol, char *filename, if (error_number >= 5) { return error_number; } - + first_err = error_number; error_number = ZBarcode_Buffer(symbol, rotate_angle); if (error_number == 0) { @@ -1547,7 +1559,7 @@ int ZBarcode_Encode_File_and_Buffer_Vector(struct zint_symbol *symbol, char *fil if (error_number >= 5) { return error_number; } - + first_err = error_number; error_number = ZBarcode_Buffer_Vector(symbol, rotate_angle); if (error_number == 0) { @@ -1557,6 +1569,22 @@ int ZBarcode_Encode_File_and_Buffer_Vector(struct zint_symbol *symbol, char *fil return error_number; } +/* + * Rendering support, initially added by Sam Lown. + * + * Converts encoded data into an intermediate format to be interpreted + * in other applications using this library. + * + * If the width and height are not set to zero, the barcode will be resized to those + * dimensions. The symbol->scale and symbol->height values are totally ignored in this case. + * + */ +int ZBarcode_Render(struct zint_symbol *symbol, const float width, const float height) { + // Send the request to the render_plot method + return render_plot(symbol, width, height); +} + int ZBarcode_Version() { return (ZINT_VERSION_MAJOR * 10000) + (ZINT_VERSION_MINOR * 100) + ZINT_VERSION_RELEASE; } + diff --git a/backend/libzint.rc b/backend/libzint.rc index ba08f73..016f3de 100644 --- a/backend/libzint.rc +++ b/backend/libzint.rc @@ -7,8 +7,8 @@ VS_VERSION_INFO VERSIONINFO #else VS_VERSION_INFO VERSIONINFO #endif - FILEVERSION 2,8,1,0 - PRODUCTVERSION 2,8,1,0 + FILEVERSION 2,6,0,0 + PRODUCTVERSION 2,6,0,0 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK #ifdef _DEBUG FILEFLAGS VS_FF_DEBUG @@ -25,12 +25,12 @@ BEGIN //language ID = U.S. English, char set = Windows, Multilingual BEGIN VALUE "FileDescription", "libzint barcode library\0" - VALUE "FileVersion", "2.8.1.0\0" + VALUE "FileVersion", "2.6.0.0\0" VALUE "InternalName", "zint.dll\0" - VALUE "LegalCopyright", "Copyright © 2020 Robin Stuart & BogDan Vatra\0" + VALUE "LegalCopyright", "Copyright © 2017 Robin Stuart & BogDan Vatra\0" VALUE "OriginalFilename", "zint.dll\0" VALUE "ProductName", "libzint\0" - VALUE "ProductVersion", "2.8.1.0\0" + VALUE "ProductVersion", "2.6.0.0\0" VALUE "License", "BSD License version 3\0" VALUE "WWW", "http://www.sourceforge.net/projects/zint" END diff --git a/backend/mailmark.c b/backend/mailmark.c index 6e0588f..0aebc22 100644 --- a/backend/mailmark.c +++ b/backend/mailmark.c @@ -2,7 +2,7 @@ /* libzint - the open source barcode library - Copyright (C) 2008 - 2020 Robin Stuart + Copyright (C) 2008-2018 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -29,7 +29,6 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ /* * Developed in accordance with "Royal Mail Mailmark barcode C encoding and deconding instructions" @@ -40,6 +39,7 @@ */ #include +#include #include #ifdef _MSC_VER #include @@ -81,7 +81,7 @@ static const unsigned short extender_group_l[26] = { 2, 5, 7, 8, 13, 14, 15, 16, 21, 22, 23, 0, 1, 3, 4, 6, 9, 10, 11, 12, 17, 18, 19, 20, 24, 25 }; -static int verify_character(char input, char type) { +int verify_character(char input, char type) { int val = 0; switch (type) { @@ -106,7 +106,7 @@ static int verify_character(char input, char type) { } } -static int verify_postcode(char* postcode, int type) { +int verify_postcode(char* postcode, int type) { int i; char pattern[11]; @@ -122,7 +122,7 @@ static int verify_postcode(char* postcode, int type) { } /* Royal Mail Mailmark */ -INTERNAL int mailmark(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length) { +int mailmark(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length) { char local_source[28]; int format; @@ -133,16 +133,18 @@ INTERNAL int mailmark(struct zint_symbol *symbol, const unsigned char source[], char postcode[10]; int postcode_type; char pattern[10]; - large_int destination_postcode; - large_int b; - large_int cdv; + short int destination_postcode[112]; + short int a[112]; + short int b[112]; + short int temp[112]; + short int cdv[112]; unsigned char data[26]; int data_top, data_step; unsigned char check[7]; short int extender[27]; char bar[80]; int check_count; - int i, j, len; + int i, j; int length = (int) in_length; if (length > 26) { @@ -168,7 +170,7 @@ INTERNAL int mailmark(struct zint_symbol *symbol, const unsigned char source[], to_upper((unsigned char*) local_source); - if (symbol->debug & ZINT_DEBUG_PRINT) { + if (symbol->debug) { printf("Producing Mailmark %s\n", local_source); } @@ -240,6 +242,7 @@ INTERNAL int mailmark(struct zint_symbol *symbol, const unsigned char source[], * 7 = International designation */ + postcode_type = 0; if (strcmp(postcode, "XY11 ") == 0) { postcode_type = 7; } else { @@ -277,107 +280,164 @@ INTERNAL int mailmark(struct zint_symbol *symbol, const unsigned char source[], } // Convert postcode to internal user field - - large_load_u64(&destination_postcode, 0); - + for (i = 0; i < 112; i++) { + destination_postcode[i] = 0; + a[i] = 0; + b[i] = 0; + } + if (postcode_type != 7) { strcpy(pattern, postcode_format[postcode_type - 1]); - large_load_u64(&b, 0); - + binary_load(b, "0", 1); + for (i = 0; i < 9; i++) { switch (pattern[i]) { case 'F': - large_mul_u64(&b, 26); - large_add_u64(&b, posn(SET_F, postcode[i])); + binary_multiply(b, "26"); + + binary_load(temp, "0", 1); + for (j = 0; j < 5; j++) { + if (posn(SET_F, postcode[i]) & (0x01 << j)) temp[j] = 1; + } + + binary_add(b, temp); break; case 'L': - large_mul_u64(&b, 20); - large_add_u64(&b, posn(SET_L, postcode[i])); + binary_multiply(b, "20"); + + binary_load(temp, "0", 1); + for (j = 0; j < 5; j++) { + if (posn(SET_L, postcode[i]) & (0x01 << j)) temp[j] = 1; + } + + binary_add(b, temp); break; case 'N': - large_mul_u64(&b, 10); - large_add_u64(&b, posn(SET_N, postcode[i])); + binary_multiply(b, "10"); + + binary_load(temp, "0", 1); + for (j = 0; j < 4; j++) { + if (posn(SET_N, postcode[i]) & (0x01 << j)) temp[j] = 1; + } + + binary_add(b, temp); break; - // case 'S' ignored as value is 0 + // case 'S' ignorred as value is 0 } } - - large_load(&destination_postcode, &b); - + // destination_postcode = a + b - large_load_u64(&b, 1); + binary_load(destination_postcode, "0", 1); + binary_add(destination_postcode, b); + + binary_load(a, "1", 1); if (postcode_type == 1) { - large_add(&destination_postcode, &b); + binary_add(destination_postcode, a); } - large_add_u64(&b, 5408000000); + binary_load(temp, "5408000000", 10); + binary_add(a, temp); if (postcode_type == 2) { - large_add(&destination_postcode, &b); + binary_add(destination_postcode, a); } - large_add_u64(&b, 5408000000); + binary_load(temp, "5408000000", 10); + binary_add(a, temp); if (postcode_type == 3) { - large_add(&destination_postcode, &b); + binary_add(destination_postcode, a); } - large_add_u64(&b, 54080000000); + binary_load(temp, "54080000000", 11); + binary_add(a, temp); if (postcode_type == 4) { - large_add(&destination_postcode, &b); + binary_add(destination_postcode, a); } - large_add_u64(&b, 140608000000); + binary_load(temp, "140608000000", 12); + binary_add(a, temp); if (postcode_type == 5) { - large_add(&destination_postcode, &b); + binary_add(destination_postcode, a); } - large_add_u64(&b, 208000000); + binary_load(temp, "208000000", 9); + binary_add(a, temp); if (postcode_type == 6) { - large_add(&destination_postcode, &b); + binary_add(destination_postcode, a); } } // Conversion from Internal User Fields to Consolidated Data Value // Set CDV to 0 - large_load_u64(&cdv, 0); - + binary_load(cdv, "0", 1); + // Add Destination Post Code plus DPS - large_add(&cdv, &destination_postcode); - + binary_add(cdv, destination_postcode); + // Multiply by 100,000,000 - large_mul_u64(&cdv, 100000000); - + binary_multiply(cdv, "100000000"); + // Add Item ID - large_add_u64(&cdv, item_id); - + binary_load(temp, "0", 1); + for (i = 0; i < 31; i++) { + if (0x01 & (item_id >> i)) temp[i] = 1; + } + binary_add(cdv, temp); + if (length == 22) { // Barcode C - Multiply by 100 - large_mul_u64(&cdv, 100); + binary_multiply(cdv, "100"); } else { // Barcode L - Multiply by 1,000,000 - large_mul_u64(&cdv, 1000000); + binary_multiply(cdv, "1000000"); } - + // Add Supply Chain ID - large_add_u64(&cdv, supply_chain_id); - + binary_load(temp, "0", 1); + for (i = 0; i < 20; i++) { + if (0x01 & (supply_chain_id >> i)) temp[i] = 1; + } + binary_add(cdv, temp); + // Multiply by 15 - large_mul_u64(&cdv, 15); - + binary_multiply(cdv, "15"); + // Add Class - large_add_u64(&cdv, mail_class); - + binary_load(temp, "0", 1); + for (i = 0; i < 4; i++) { + if (0x01 & (mail_class >> i)) temp[i] = 1; + } + binary_add(cdv, temp); + // Multiply by 5 - large_mul_u64(&cdv, 5); - + binary_multiply(cdv, "5"); + // Add Format - large_add_u64(&cdv, format); - + binary_load(temp, "0", 1); + for (i = 0; i < 4; i++) { + if (0x01 & (format >> i)) temp[i] = 1; + } + binary_add(cdv, temp); + // Multiply by 4 - large_mul_u64(&cdv, 4); - + binary_multiply(cdv, "4"); + // Add Version ID - large_add_u64(&cdv, version_id); - - if (symbol->debug & ZINT_DEBUG_PRINT) { + binary_load(temp, "0", 1); + for (i = 0; i < 4; i++) { + if (0x01 & (version_id >> i)) temp[i] = 1; + } + binary_add(cdv, temp); + + if (symbol->debug) { printf("DPC type %d\n", postcode_type); printf("CDV: "); - large_print(&cdv); + for (i = 96; i >= 0; i-= 4) { + j = 0; + + j += cdv[i]; + j += cdv[i + 1] * 2; + j += cdv[i + 2] * 4; + j += cdv[i + 3] * 8; + + printf("%c", itoc(j)); + } + printf("\n"); } @@ -392,13 +452,49 @@ INTERNAL int mailmark(struct zint_symbol *symbol, const unsigned char source[], } // Conversion from Consolidated Data Value to Data Numbers - + for (i = 0; i < 112; i++) { + b[i] = cdv[i]; + } + for (j = data_top; j >= (data_step + 1); j--) { - data[j] = large_div_u64(&cdv, 32); + for (i = 0; i < 112; i++) { + cdv[i] = b[i]; + b[i] = 0; + a[i] = 0; + } + a[96] = 1; + for (i = 91; i >= 0; i--) { + b[i] = !islarger(a, cdv); + if (b[i] == 1) { + binary_subtract(cdv, a); + } + shiftdown(a); + } + + data[j] = (cdv[4] * 16) + (cdv[3] * 8) + (cdv[2] * 4) + + (cdv[1] * 2) + cdv[0]; } for (j = data_step; j >= 0; j--) { - data[j] = large_div_u64(&cdv, 30); + for (i = 0; i < 112; i++) { + cdv[i] = b[i]; + b[i] = 0; + a[i] = 0; + } + a[95] = 1; + a[94] = 1; + a[93] = 1; + a[92] = 1; + for (i = 91; i >= 0; i--) { + b[i] = !islarger(a, cdv); + if (b[i] == 1) { + binary_subtract(cdv, a); + } + shiftdown(a); + } + + data[j] = (cdv[4] * 16) + (cdv[3] * 8) + (cdv[2] * 4) + + (cdv[1] * 2) + cdv[0]; } // Generation of Reed-Solomon Check Numbers @@ -412,7 +508,7 @@ INTERNAL int mailmark(struct zint_symbol *symbol, const unsigned char source[], data[data_top + i] = check[check_count - i]; } - if (symbol->debug & ZINT_DEBUG_PRINT) { + if (symbol->debug) { printf("Codewords: "); for (i = 0; i <= data_top + check_count; i++) { printf("%d ", (int) data[i]); @@ -470,13 +566,13 @@ INTERNAL int mailmark(struct zint_symbol *symbol, const unsigned char source[], bar[(length * 3)] = '\0'; - if (symbol->debug & ZINT_DEBUG_PRINT) { + if (symbol->debug) { printf("Bar pattern: %s\n", bar); } /* Translate 4-state data pattern to symbol */ j = 0; - for (i = 0, len = strlen(bar); i < len; i++) { + for (i = 0; i < strlen(bar); i++) { if ((bar[i] == 'F') || (bar[i] == 'A')) { set_module(symbol, 0, j); } diff --git a/backend/maxicode.c b/backend/maxicode.c index cf7200f..25a61c4 100644 --- a/backend/maxicode.c +++ b/backend/maxicode.c @@ -2,7 +2,7 @@ /* libzint - the open source barcode library - Copyright (C) 2010-2020 Robin Stuart + Copyright (C) 2010-2017 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -29,18 +29,18 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ /* Includes corrections thanks to Monica Swanson @ Source Technologies */ #include "common.h" #include "maxicode.h" #include "reedsol.h" #include +#include -static int maxi_codeword[144]; +int maxi_codeword[144]; /* Handles error correction of primary message */ -static void maxi_do_primary_check() { +void maxi_do_primary_check() { unsigned char data[15]; unsigned char results[15]; int j; @@ -61,7 +61,7 @@ static void maxi_do_primary_check() { } /* Handles error correction of odd characters in secondary */ -static void maxi_do_secondary_chk_odd(int ecclen) { +void maxi_do_secondary_chk_odd(int ecclen) { unsigned char data[100]; unsigned char results[30]; int j; @@ -85,7 +85,7 @@ static void maxi_do_secondary_chk_odd(int ecclen) { } /* Handles error correction of even characters in secondary */ -static void maxi_do_secondary_chk_even(int ecclen) { +void maxi_do_secondary_chk_even(int ecclen) { unsigned char data[100]; unsigned char results[30]; int j; @@ -109,7 +109,7 @@ static void maxi_do_secondary_chk_even(int ecclen) { } /* Moves everything up so that a shift or latch can be inserted */ -static void maxi_bump(int set[], int character[], int bump_posn) { +void maxi_bump(int set[], int character[], int bump_posn) { int i; for (i = 143; i > bump_posn; i--) { @@ -119,7 +119,7 @@ static void maxi_bump(int set[], int character[], int bump_posn) { } /* If the value is present in array, return the value, else return badvalue */ -static int value_in_array(int val, int arr[], int badvalue, int arrLength) { +int value_in_array(int val, int arr[], int badvalue, int arrLength){ int i; for(i = 0; i < arrLength; i++){ if(arr[i] == val) return val; @@ -128,7 +128,7 @@ static int value_in_array(int val, int arr[], int badvalue, int arrLength) { } /* Choose the best set from previous and next set in the range of the setval array, if no value can be found we return setval[0] */ -static int bestSurroundingSet(int index, int length, int set[], int setval[], int setLength) { +int bestSurroundingSet(int index, int length, int set[], int setval[], int setLength) { int badValue = -1; int option1 = value_in_array(set[index - 1], setval, badValue, setLength); if (index + 1 < length) { @@ -146,7 +146,7 @@ static int bestSurroundingSet(int index, int length, int set[], int setval[], in } /* Format text according to Appendix A */ -static int maxi_text_process(int mode, unsigned char source[], int length, int eci) { +int maxi_text_process(int mode, unsigned char source[], int length, int eci) { /* This code doesn't make use of [Lock in C], [Lock in D] and [Lock in E] and so is not always the most efficient at compressing data, but should suffice for most applications */ @@ -293,7 +293,7 @@ static int maxi_text_process(int mode, unsigned char source[], int length, int e } /* Number compression not allowed in primary message */ count = 0; - for (i = j; i < 144; i++) { + for (i = j; i < 143; i++) { if ((set[i] == 1) && ((character[i] >= 48) && (character[i] <= 57))) { /* Character is a number */ count++; @@ -425,7 +425,7 @@ static int maxi_text_process(int mode, unsigned char source[], int length, int e do { if (set[i] == 6) { /* Number compression */ - char substring[10]; + char substring[11]; int value; for (j = 0; j < 9; j++) { @@ -442,7 +442,7 @@ static int maxi_text_process(int mode, unsigned char source[], int length, int e character[i + 5] = (value & 0x3f); i += 6; - for (j = i; j < 141; j++) { + for (j = i; j < 140; j++) { set[j] = set[j + 3]; character[j] = character[j + 3]; } @@ -450,7 +450,7 @@ static int maxi_text_process(int mode, unsigned char source[], int length, int e } else { i++; } - } while (i <= 135); /* 144 - 9 */ + } while (i <= 143); /* Insert ECI at the beginning of message if needed */ /* Encode ECI assignment numbers according to table 3 */ @@ -533,7 +533,7 @@ static int maxi_text_process(int mode, unsigned char source[], int length, int e } /* Format structured primary for Mode 2 */ -static void maxi_do_primary_2(char postcode[], int country, int service) { +void maxi_do_primary_2(char postcode[], int country, int service) { size_t postcode_length; int postcode_num, i; @@ -559,7 +559,7 @@ static void maxi_do_primary_2(char postcode[], int country, int service) { } /* Format structured primary for Mode 3 */ -static void maxi_do_primary_3(char postcode[], int country, int service) { +void maxi_do_primary_3(char postcode[], int country, int service) { int i, h; h = strlen(postcode); @@ -589,7 +589,7 @@ static void maxi_do_primary_3(char postcode[], int country, int service) { maxi_codeword[9] = ((service & 0x3f0) >> 4); } -INTERNAL int maxicode(struct zint_symbol *symbol, unsigned char local_source[], const int length) { +int maxicode(struct zint_symbol *symbol, unsigned char local_source[], const int length) { int i, j, block, bit, mode, lp = 0; int bit_pattern[7], internal_error = 0, eclen; char postcode[12], countrystr[4], servicestr[4]; @@ -734,3 +734,5 @@ INTERNAL int maxicode(struct zint_symbol *symbol, unsigned char local_source[], return internal_error; } + + diff --git a/backend/medical.c b/backend/medical.c index 51e77eb..8092633 100644 --- a/backend/medical.c +++ b/backend/medical.c @@ -2,7 +2,7 @@ /* libzint - the open source barcode library - Copyright (C) 2008 - 2020 Robin Stuart + Copyright (C) 2008-2017 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -29,17 +29,16 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ #include +#include +#include #include "common.h" -INTERNAL int c39(struct zint_symbol *symbol, unsigned char source[], const size_t length); - +extern int c39(struct zint_symbol *symbol, unsigned char source[], const size_t length); /* Codabar table checked against EN 798:1995 */ -#define CALCIUM "0123456789-$:/.+ABCD" -#define CALCIUM_INNER "0123456789-$:/.+" +#define CALCIUM "0123456789-$:/.+ABCD" static const char *CodaTable[20] = { "11111221", "11112211", "11121121", "22111111", "11211211", "21111211", @@ -47,7 +46,7 @@ static const char *CodaTable[20] = { "21212111", "11212121", "11221211", "12121121", "11121221", "11122211" }; -INTERNAL int pharma_one(struct zint_symbol *symbol, unsigned char source[], int length) { +int pharma_one(struct zint_symbol *symbol, unsigned char source[], int length) { /* "Pharmacode can represent only a single integer from 3 to 131070. Unlike other commonly used one-dimensional barcode schemes, pharmacode does not store the data in a form corresponding to the human-readable digits; the number is encoded in binary, rather @@ -107,7 +106,7 @@ INTERNAL int pharma_one(struct zint_symbol *symbol, unsigned char source[], int return error_number; } -static int pharma_two_calc(struct zint_symbol *symbol, unsigned char source[], char dest[]) { +int pharma_two_calc(struct zint_symbol *symbol, unsigned char source[], char dest[]) { /* This code uses the Two Track Pharamacode defined in the document at http://www.laetus.com/laetus.php?request=file&id=69 and using a modified algorithm from the One Track system. This standard accepts integet values @@ -152,7 +151,7 @@ static int pharma_two_calc(struct zint_symbol *symbol, unsigned char source[], c return error_number; } -INTERNAL int pharma_two(struct zint_symbol *symbol, unsigned char source[], int length) { +int pharma_two(struct zint_symbol *symbol, unsigned char source[], int length) { /* Draws the patterns for two track pharmacode */ char height_pattern[200]; unsigned int loopey, h; @@ -193,11 +192,10 @@ INTERNAL int pharma_two(struct zint_symbol *symbol, unsigned char source[], int } /* The Codabar system consisting of simple substitution */ -INTERNAL int codabar(struct zint_symbol *symbol, unsigned char source[], int length) { +int codabar(struct zint_symbol *symbol, unsigned char source[], int length) { int i, error_number; char dest[512]; - int add_checksum, count, checksum; strcpy(dest, ""); @@ -205,52 +203,26 @@ INTERNAL int codabar(struct zint_symbol *symbol, unsigned char source[], int len strcpy(symbol->errtxt, "356: Input too long"); return ZINT_ERROR_TOO_LONG; } - /* BS EN 798:1995 4.2 "'Codabar' symbols shall consist of ... b) start character; - * c) one or more symbol characters representing data ... d) stop character ..." */ - if (length < 3) { - strcpy(symbol->errtxt, "362: Input too short"); - return ZINT_ERROR_TOO_LONG; - } to_upper(source); - + error_number = is_sane(CALCIUM, source, length); + if (error_number == ZINT_ERROR_INVALID_DATA) { + strcpy(symbol->errtxt, "357: Invalid characters in data"); + return error_number; + } /* Codabar must begin and end with the characters A, B, C or D */ if ((source[0] != 'A') && (source[0] != 'B') && (source[0] != 'C') && (source[0] != 'D')) { - strcpy(symbol->errtxt, "358: Does not begin with \"A\", \"B\", \"C\" or \"D\""); + strcpy(symbol->errtxt, "358: Invalid characters in data"); return ZINT_ERROR_INVALID_DATA; } + if ((source[length - 1] != 'A') && (source[length - 1] != 'B') && (source[length - 1] != 'C') && (source[length - 1] != 'D')) { - strcpy(symbol->errtxt, "359: Does not end with \"A\", \"B\", \"C\" or \"D\""); + strcpy(symbol->errtxt, "359: Invalid characters in data"); return ZINT_ERROR_INVALID_DATA; } - /* And must not use A, B, C or D otherwise (BS EN 798:1995 4.3.2) */ - error_number = is_sane(CALCIUM_INNER, source + 1, length - 2); - if (error_number) { - strcpy(symbol->errtxt, "363: Cannot contain \"A\", \"B\", \"C\" or \"D\""); - return error_number; - } - - add_checksum = symbol->option_2 == 1; - if (add_checksum) { - count = 0; - } - for (i = 0; i < length; i++) { - if (add_checksum) { - count += strchr(CALCIUM, source[i]) - CALCIUM; - if (i + 1 == length) { - checksum = count % 16; - if (checksum) { - checksum = 16 - checksum; - } - if (symbol->debug & ZINT_DEBUG_PRINT) { - printf("Codabar: %s, count %d, checksum %d\n", source, count, checksum); - } - strcat(dest, CodaTable[checksum]); - } - } lookup(CALCIUM, CodaTable, source[i], dest); } @@ -260,7 +232,7 @@ INTERNAL int codabar(struct zint_symbol *symbol, unsigned char source[], int len } /* Italian Pharmacode */ -INTERNAL int code32(struct zint_symbol *symbol, unsigned char source[], int length) { +int code32(struct zint_symbol *symbol, unsigned char source[], int length) { int i, zeroes, error_number, checksum, checkpart, checkdigit; char localstr[10], risultante[7]; long int pharmacode, devisor; @@ -281,10 +253,11 @@ INTERNAL int code32(struct zint_symbol *symbol, unsigned char source[], int leng /* Add leading zeros as required */ zeroes = 8 - length; memset(localstr, '0', zeroes); - ustrcpy(localstr + zeroes, source); + strcpy(localstr + zeroes, (char*) source); /* Calculate the check digit */ checksum = 0; + checkpart = 0; for (i = 0; i < 4; i++) { checkpart = ctoi(localstr[i * 2]); checksum += checkpart; @@ -327,8 +300,10 @@ INTERNAL int code32(struct zint_symbol *symbol, unsigned char source[], int leng } /* Override the normal text output with the Pharmacode number */ - ustrcpy(symbol->text, "A"); - ustrcat(symbol->text, localstr); + strcpy((char*) symbol->text, "A"); + strcat((char*) symbol->text, (char*) localstr); return error_number; } + + diff --git a/backend/output.c b/backend/output.c deleted file mode 100644 index 07c9885..0000000 --- a/backend/output.c +++ /dev/null @@ -1,114 +0,0 @@ -/* output.c - Common routines for raster/vector - - libzint - the open source barcode library - Copyright (C) 2020 Robin Stuart - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - 3. Neither the name of the project nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - SUCH DAMAGE. - */ -/* vim: set ts=4 sw=4 et : */ - -#include -#include "common.h" -#include "output.h" - -#define SSET "0123456789ABCDEF" - -/* Check colour options are good. Note: using raster.c error nos 651-654 */ -INTERNAL int check_colour_options(struct zint_symbol *symbol) { - int error_number; - - if (strlen(symbol->fgcolour) != 6) { - strcpy(symbol->errtxt, "651: Malformed foreground colour target"); - return ZINT_ERROR_INVALID_OPTION; - } - if (strlen(symbol->bgcolour) != 6) { - strcpy(symbol->errtxt, "652: Malformed background colour target"); - return ZINT_ERROR_INVALID_OPTION; - } - - to_upper((unsigned char *) symbol->fgcolour); - to_upper((unsigned char *) symbol->bgcolour); - - error_number = is_sane(SSET, (unsigned char *) symbol->fgcolour, strlen(symbol->fgcolour)); - if (error_number == ZINT_ERROR_INVALID_DATA) { - strcpy(symbol->errtxt, "653: Malformed foreground colour target"); - return ZINT_ERROR_INVALID_OPTION; - } - - error_number = is_sane(SSET, (unsigned char *) symbol->bgcolour, strlen(symbol->fgcolour)); - if (error_number == ZINT_ERROR_INVALID_DATA) { - strcpy(symbol->errtxt, "654: Malformed background colour target"); - return ZINT_ERROR_INVALID_OPTION; - } - - return 0; -} - -/* Return minimum quiet zones for each symbology */ -static void quiet_zones(struct zint_symbol *symbol, int *left, int *right, int *top, int *bottom) { - *left = *right = *top = *bottom = 0; - - switch (symbol->symbology) { - case BARCODE_CODE16K: - /* BS EN 12323:2005 Section 4.5 c) */ - *left = 10; - *right = 1; - break; - case BARCODE_CODE49: - /* ANSI/AIM BC6-2000 Section 2.4 */ - *left = 10; - *right = 1; - break; - case BARCODE_CODABLOCKF: - case BARCODE_HIBC_BLOCKF: - /* AIM ISS-X-24 Section 4.6.1 */ - *left = 10; - *right = 10; - break; - /* TODO: others */ - } -} - -/* Set left (x), top (y), right and bottom offsets for whitespace */ -INTERNAL void set_whitespace_offsets(struct zint_symbol *symbol, int *xoffset, int *yoffset, int *roffset, int *boffset) { - int qz_left, qz_right, qz_top, qz_bottom; - - quiet_zones(symbol, &qz_left, &qz_right, &qz_top, &qz_bottom); - - *xoffset = symbol->whitespace_width + qz_left; - *roffset = symbol->whitespace_width + qz_right; - if (symbol->output_options & BARCODE_BOX) { - *xoffset += symbol->border_width; - *roffset += symbol->border_width; - } - - *yoffset = qz_top; - *boffset = qz_bottom; - if (symbol->output_options & (BARCODE_BOX | BARCODE_BIND)) { - *yoffset += symbol->border_width; - *boffset += symbol->border_width; - } -} diff --git a/backend/output.h b/backend/output.h deleted file mode 100644 index 7e5ecd6..0000000 --- a/backend/output.h +++ /dev/null @@ -1,47 +0,0 @@ -/* output.h - Common routines for raster/vector - - libzint - the open source barcode library - Copyright (C) 2020 Robin Stuart - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - 3. Neither the name of the project nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - SUCH DAMAGE. - */ -/* vim: set ts=4 sw=4 et : */ - -#ifndef OUTPUT_H -#define OUTPUT_H - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -INTERNAL int check_colour_options(struct zint_symbol *symbol); -INTERNAL void set_whitespace_offsets(struct zint_symbol *symbol, int *xoffset, int *yoffset, int *roffset, int *boffset); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* OUTPUT_H */ diff --git a/backend/pcx.c b/backend/pcx.c index 22bd3bd..4505a53 100644 --- a/backend/pcx.c +++ b/backend/pcx.c @@ -1,9 +1,8 @@ /* pcx.c - Handles output to ZSoft PCX file */ -/* ZSoft PCX File Format Technical Reference Manual http://bespin.org/~qz/pc-gpe/pcx.txt */ /* libzint - the open source barcode library - Copyright (C) 2009 - 2020 Robin Stuart + Copyright (C) 2009-2017 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -30,9 +29,9 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ #include +#include #include #include "common.h" #include "pcx.h" /* PCX header structure */ @@ -43,26 +42,24 @@ #include #endif -INTERNAL int pcx_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) { +#define SSET "0123456789ABCDEF" + +int pcx_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) { int fgred, fggrn, fgblu, bgred, bggrn, bgblu; int row, column, i, colour; int run_count; FILE *pcx_file; pcx_header_t header; - int bytes_per_line = symbol->bitmap_width + (symbol->bitmap_width & 1); // Must be even - unsigned char previous; #ifdef _MSC_VER unsigned char* rle_row; #endif #ifndef _MSC_VER - unsigned char rle_row[bytes_per_line]; + unsigned char rle_row[symbol->bitmap_width]; #else - rle_row = (unsigned char *) _alloca(bytes_per_line); + rle_row = (unsigned char *) _alloca((symbol->bitmap_width * 6) * sizeof (unsigned char)); #endif /* _MSC_VER */ - rle_row[bytes_per_line - 1] = 0; // Will remain zero if bitmap_width odd - fgred = (16 * ctoi(symbol->fgcolour[0])) + ctoi(symbol->fgcolour[1]); fggrn = (16 * ctoi(symbol->fgcolour[2])) + ctoi(symbol->fgcolour[3]); fgblu = (16 * ctoi(symbol->fgcolour[4])) + ctoi(symbol->fgcolour[5]); @@ -89,7 +86,11 @@ INTERNAL int pcx_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) { header.reserved = 0; header.number_of_planes = 3; - header.bytes_per_line = bytes_per_line; + if (symbol->bitmap_width % 2) { + header.bytes_per_line = symbol->bitmap_width + 1; + } else { + header.bytes_per_line = symbol->bitmap_width; + } header.palette_info = 1; // Colour header.horiz_screen_size = 0; @@ -122,97 +123,46 @@ INTERNAL int pcx_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) { for (column = 0; column < symbol->bitmap_width; column++) { switch (colour) { case 0: - switch(pixelbuf[(row * symbol->bitmap_width) + column]) { - case 'W': // White - case 'M': // Magenta - case 'R': // Red - case 'Y': // Yellow - rle_row[column] = 255; - break; - case 'C': // Cyan - case 'B': // Blue - case 'G': // Green - case 'K': // Black - rle_row[column] = 0; - break; - case '1': - rle_row[column] = fgred; - break; - default: - rle_row[column] = bgred; - break; + if (pixelbuf[(row * symbol->bitmap_width) + column] == '1') { + rle_row[column] = fgred; + } else { + rle_row[column] = bgred; } break; case 1: - switch(pixelbuf[(row * symbol->bitmap_width) + column]) { - case 'W': // White - case 'C': // Cyan - case 'Y': // Yellow - case 'G': // Green - rle_row[column] = 255; - break; - case 'B': // Blue - case 'M': // Magenta - case 'R': // Red - case 'K': // Black - rle_row[column] = 0; - break; - case '1': - rle_row[column] = fggrn; - break; - default: - rle_row[column] = bggrn; - break; + if (pixelbuf[(row * symbol->bitmap_width) + column] == '1') { + rle_row[column] = fggrn; + } else { + rle_row[column] = bggrn; } break; case 2: - switch(pixelbuf[(row * symbol->bitmap_width) + column]) { - case 'W': // White - case 'C': // Cyan - case 'B': // Blue - case 'M': // Magenta - rle_row[column] = 255; - break; - case 'R': // Red - case 'Y': // Yellow - case 'G': // Green - case 'K': // Black - rle_row[column] = 0; - break; - case '1': - rle_row[column] = fgblu; - break; - default: - rle_row[column] = bgblu; - break; + if (pixelbuf[(row * symbol->bitmap_width) + column] == '1') { + rle_row[column] = fgblu; + } else { + rle_row[column] = bgblu; } break; } } - /* Based on ImageMagick/coders/pcx.c PCXWritePixels() - * Copyright 1999-2020 ImageMagick Studio LLC */ - previous = rle_row[0]; run_count = 1; - for (column = 1; column < bytes_per_line; column++) { // Note going up to bytes_per_line - if ((previous == rle_row[column]) && (run_count < 63)) { + for (column = 1; column < symbol->bitmap_width; column++) { + if ((rle_row[column - 1] == rle_row[column]) && (run_count < 63)) { run_count++; } else { - if (run_count > 1 || (previous & 0xc0) == 0xc0) { - run_count += 0xc0; - fputc(run_count, pcx_file); - } - fputc(previous, pcx_file); - previous = rle_row[column]; + run_count += 0xc0; + fputc(run_count, pcx_file); + fputc(rle_row[column - 1], pcx_file); run_count = 1; } } - if (run_count > 1 || (previous & 0xc0) == 0xc0) { + if (run_count > 1) { run_count += 0xc0; fputc(run_count, pcx_file); + fputc(rle_row[column - 1], pcx_file); } - fputc(previous, pcx_file); } } @@ -220,3 +170,4 @@ INTERNAL int pcx_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) { return 0; } + diff --git a/backend/pdf417.c b/backend/pdf417.c index eb39741..bbfcae6 100644 --- a/backend/pdf417.c +++ b/backend/pdf417.c @@ -1,7 +1,7 @@ /* pdf417.c - Handles PDF417 stacked symbology */ /* Zint - A barcode generating program using libpng - Copyright (C) 2008-2020 Robin Stuart + Copyright (C) 2008-2017 Robin Stuart Portions Copyright (C) 2004 Grandzebu Bug Fixes thanks to KL Chin @@ -30,7 +30,6 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ /* This code is adapted from "Code barre PDF 417 / PDF 417 barcode" v2.5.0 which is Copyright (C) 2004 (Grandzebu). @@ -44,6 +43,7 @@ #include #include +#include #include #ifndef _MSC_VER #include @@ -81,14 +81,11 @@ static const char MicroAutosize[56] = { 1, 14, 2, 7, 3, 25, 8, 16, 5, 17, 9, 6, 10, 11, 28, 12, 19, 13, 29, 20, 30, 21, 22, 31, 23, 32, 33, 34 }; -#define PDF417_MAX_LEN 2710 /* ISO/IEC 15438:2015 5.1.1 c) 3) Max possible number of characters at error correction level 0 (Numeric Compaction mode) */ -#define MICRO_PDF417_MAX_LEN 366 /* ISO/IEC 24728:2006 5.1.1 c) 3) Max possible number of characters (Numeric Compaction mode) */ - -static int liste[2][PDF417_MAX_LEN]; /* global */ +int liste[2][1000]; /* global */ /* 866 */ -static int quelmode(char codeascii) { +int quelmode(char codeascii) { int mode = BYT; if ((codeascii == '\t') || (codeascii == '\n') || (codeascii == '\r') || ((codeascii >= ' ') && (codeascii <= '~'))) { mode = TEX; @@ -102,7 +99,7 @@ static int quelmode(char codeascii) { } /* 844 */ -static void regroupe(int *indexliste) { +void regroupe(int *indexliste) { /* bring together same type blocks */ if (*(indexliste) > 1) { @@ -130,7 +127,7 @@ static void regroupe(int *indexliste) { } /* 478 */ -static void pdfsmooth(int *indexliste) { +void pdfsmooth(int *indexliste) { int i, crnt, last, next, length; for (i = 0; i < *(indexliste); i++) { @@ -226,12 +223,12 @@ static void pdfsmooth(int *indexliste) { } /* 547 */ -static void textprocess(int *chainemc, int *mclength, char chaine[], int start, int length) { - int j, indexlistet, curtable, listet[2][PDF417_MAX_LEN], chainet[PDF417_MAX_LEN], wnet; +void textprocess(int *chainemc, int *mclength, char chaine[], int start, int length) { + int j, indexlistet, curtable, listet[2][5000], chainet[5000], wnet; wnet = 0; - for (j = 0; j < PDF417_MAX_LEN; j++) { + for (j = 0; j < 1000; j++) { listet[0][j] = 0; } /* listet will contain the table numbers and the value of each characters */ @@ -417,7 +414,7 @@ static void textprocess(int *chainemc, int *mclength, char chaine[], int start, } /* 671 */ -INTERNAL void byteprocess(int *chainemc, int *mclength, unsigned char chaine[], int start, int length) { +void byteprocess(int *chainemc, int *mclength, unsigned char chaine[], int start, int length) { int debug = 0; if (debug) printf("\nEntering byte mode at position %d\n", start); @@ -442,7 +439,7 @@ INTERNAL void byteprocess(int *chainemc, int *mclength, unsigned char chaine[], len = 0; while (len < length) { - uint64_t total; + uint64_t total; unsigned int chunkLen = length - len; if (6 <= chunkLen) /* Take groups of 6 */ { chunkLen = 6; @@ -485,7 +482,7 @@ INTERNAL void byteprocess(int *chainemc, int *mclength, unsigned char chaine[], } /* 712 */ -static void numbprocess(int *chainemc, int *mclength, char chaine[], int start, int length) { +void numbprocess(int *chainemc, int *mclength, char chaine[], int start, int length) { int j, loop, dummy[100], diviseur, nombre; char chainemod[50], chainemult[100], temp; @@ -520,7 +517,7 @@ static void numbprocess(int *chainemc, int *mclength, char chaine[], int start, while (strlen(chainemod) != 0) { nombre *= 10; nombre += ctoi(chainemod[0]); - for (loop = 0; loop < (int)strlen(chainemod); loop++) { + for (loop = 0; loop < strlen(chainemod); loop++) { chainemod[loop] = chainemod[loop + 1]; } if (nombre < diviseur) { @@ -555,34 +552,30 @@ static void numbprocess(int *chainemc, int *mclength, char chaine[], int start, /* 366 */ static int pdf417(struct zint_symbol *symbol, unsigned char chaine[], const size_t length) { int i, k, j, indexchaine, indexliste, mode, longueur, loop, mccorrection[520], offset; - int total, chainemc[PDF417_MAX_LEN], mclength, c1, c2, c3, dummy[35], calcheight; + int total, chainemc[2700], mclength, c1, c2, c3, dummy[35], calcheight; char pattern[580]; int debug = symbol->debug; - if (length > PDF417_MAX_LEN) { - return 2; - } - /* 456 */ indexliste = 0; indexchaine = 0; mode = quelmode(chaine[indexchaine]); - for (i = 0; i < PDF417_MAX_LEN; i++) { + for (i = 0; i < 1000; i++) { liste[0][i] = 0; } /* 463 */ do { liste[1][indexliste] = mode; - while ((liste[1][indexliste] == mode) && (indexchaine < (int)length)) { + while ((liste[1][indexliste] == mode) && (indexchaine < length)) { liste[0][indexliste]++; indexchaine++; mode = quelmode(chaine[indexchaine]); } indexliste++; - } while (indexchaine < (int)length); + } while (indexchaine < length); /* 474 */ pdfsmooth(&indexliste); @@ -819,7 +812,7 @@ static int pdf417(struct zint_symbol *symbol, unsigned char chaine[], const size bin_append(0x3FA29, 18, pattern); /* Row Stop */ } - for (loop = 0; loop < (int)strlen(pattern); loop++) { + for (loop = 0; loop < strlen(pattern); loop++) { if (pattern[loop] == '1') { set_module(symbol, i, loop); } @@ -844,7 +837,7 @@ static int pdf417(struct zint_symbol *symbol, unsigned char chaine[], const size } /* 345 */ -INTERNAL int pdf417enc(struct zint_symbol *symbol, unsigned char source[], const size_t length) { +int pdf417enc(struct zint_symbol *symbol, unsigned char source[], const size_t length) { int codeerr, error_number; error_number = 0; @@ -897,19 +890,14 @@ INTERNAL int pdf417enc(struct zint_symbol *symbol, unsigned char source[], const } /* like PDF417 only much smaller! */ -INTERNAL int micro_pdf417(struct zint_symbol *symbol, unsigned char chaine[], const size_t length) { +int micro_pdf417(struct zint_symbol *symbol, unsigned char chaine[], const size_t length) { int i, k, j, indexchaine, indexliste, mode, longueur, mccorrection[50], offset; - int total, chainemc[PDF417_MAX_LEN], mclength, dummy[5], codeerr; + int total, chainemc[2700], mclength, dummy[5], codeerr; char pattern[580]; int variant, LeftRAPStart, CentreRAPStart, RightRAPStart, StartCluster; int LeftRAP, CentreRAP, RightRAP, Cluster, loop, calcheight; int debug = 0; - if (length > MICRO_PDF417_MAX_LEN) { - strcpy(symbol->errtxt, "474: Input data too long"); - return ZINT_ERROR_TOO_LONG; - } - /* Encoding starts out the same as PDF417, so use the same code */ codeerr = 0; @@ -919,20 +907,20 @@ INTERNAL int micro_pdf417(struct zint_symbol *symbol, unsigned char chaine[], co mode = quelmode(chaine[indexchaine]); - for (i = 0; i < PDF417_MAX_LEN; i++) { + for (i = 0; i < 1000; i++) { liste[0][i] = 0; } /* 463 */ do { liste[1][indexliste] = mode; - while ((liste[1][indexliste] == mode) && (indexchaine < (int)length)) { + while ((liste[1][indexliste] == mode) && (indexchaine < length)) { liste[0][indexliste]++; indexchaine++; mode = quelmode(chaine[indexchaine]); } indexliste++; - } while (indexchaine < (int)length); + } while (indexchaine < length); /* 474 */ pdfsmooth(&indexliste); @@ -1285,7 +1273,7 @@ INTERNAL int micro_pdf417(struct zint_symbol *symbol, unsigned char chaine[], co if (debug) printf("%s\n", pattern); /* so now pattern[] holds the string of '1's and '0's. - copy this to the symbol */ - for (loop = 0; loop < (int)strlen(pattern); loop++) { + for (loop = 0; loop < strlen(pattern); loop++) { if (pattern[loop] == '1') { set_module(symbol, i, loop); } @@ -1325,3 +1313,5 @@ INTERNAL int micro_pdf417(struct zint_symbol *symbol, unsigned char chaine[], co return codeerr; } + + diff --git a/backend/plessey.c b/backend/plessey.c index dcc7eaf..83278cb 100644 --- a/backend/plessey.c +++ b/backend/plessey.c @@ -2,7 +2,7 @@ /* libzint - the open source barcode library - Copyright (C) 2008 - 2020 Robin Stuart + Copyright (C) 2008-2017 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -29,13 +29,14 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ #include +#include +#include #include "common.h" -#define SSET "0123456789ABCDEF" +#define SSET "0123456789ABCDEF" static const char *PlessTable[16] = { "13131313", "31131313", "13311313", "31311313", "13133113", "31133113", "13313113", "31313113", "13131331", "31131331", "13311331", "31311331", "13133131", @@ -48,7 +49,7 @@ static const char *MSITable[10] = { }; /* Not MSI/Plessey but the older Plessey standard */ -INTERNAL int plessey(struct zint_symbol *symbol, unsigned char source[], const size_t length) { +int plessey(struct zint_symbol *symbol, unsigned char source[], const size_t length) { unsigned int i; unsigned char *checkptr; @@ -110,9 +111,9 @@ INTERNAL int plessey(struct zint_symbol *symbol, unsigned char source[], const s } /* Plain MSI Plessey - does not calculate any check character */ -static int msi_plessey(struct zint_symbol *symbol, unsigned char source[], const int length) { +int msi_plessey(struct zint_symbol *symbol, unsigned char source[], const size_t length) { - int i; + size_t i; char dest[512]; /* 2 + 55 * 8 + 3 + 1 ~ 512 */ if (length > 55) { @@ -137,10 +138,10 @@ static int msi_plessey(struct zint_symbol *symbol, unsigned char source[], const /* MSI Plessey with Modulo 10 check digit - algorithm from Barcode Island * http://www.barcodeisland.com/ */ -static int msi_plessey_mod10(struct zint_symbol *symbol, unsigned char source[], int length) { +int msi_plessey_mod10(struct zint_symbol *symbol, unsigned char source[], int length) { - int i, wright, pump, n; - unsigned long dau, pedwar; + + unsigned long i, wright, dau, pedwar, pump, n; char un[200], tri[32]; int error_number, h; char dest[1000]; @@ -204,10 +205,10 @@ static int msi_plessey_mod10(struct zint_symbol *symbol, unsigned char source[], /* MSI Plessey with two Modulo 10 check digits - algorithm from * Barcode Island http://www.barcodeisland.com/ */ -static int msi_plessey_mod1010(struct zint_symbol *symbol, unsigned char source[], const int src_len) { +int msi_plessey_mod1010(struct zint_symbol *symbol, unsigned char source[], const unsigned int src_len) { + - int i, n, wright, pump; - unsigned long dau, pedwar, chwech; + unsigned long i, n, wright, dau, pedwar, pump, chwech; char un[16], tri[32]; int error_number, h; char dest[1000]; @@ -308,10 +309,9 @@ static int msi_plessey_mod1010(struct zint_symbol *symbol, unsigned char source[ /* Calculate a Modulo 11 check digit using the system discussed on Wikipedia - see http://en.wikipedia.org/wiki/Talk:MSI_Barcode */ -static int msi_plessey_mod11(struct zint_symbol *symbol, unsigned char source[], const int src_len) { +int msi_plessey_mod11(struct zint_symbol *symbol, unsigned char source[], const unsigned int src_len) { /* uses the IBM weight system */ - int i, weight, check; - unsigned long x; + int i, weight, x, check; int error_number; char dest[1000]; @@ -367,17 +367,16 @@ static int msi_plessey_mod11(struct zint_symbol *symbol, unsigned char source[], /* Combining the Barcode Island and Wikipedia code * Verified against http://www.bokai.com/BarcodeJSP/applet/BarcodeSampleApplet.htm */ -static int msi_plessey_mod1110(struct zint_symbol *symbol, unsigned char source[], const int src_len) { +int msi_plessey_mod1110(struct zint_symbol *symbol, unsigned char source[], const unsigned int src_len) { /* Weighted using the IBM system */ - int i, weight, check, wright, pump; - unsigned long x, dau, pedwar; - int h; - int si; + unsigned long i, weight, x, check, wright, dau, pedwar, pump; + size_t h; + long si; char un[16], tri[16]; int error_number; char dest[1000]; unsigned char temp[32]; - int temp_len; + unsigned int temp_len; error_number = 0; @@ -463,7 +462,7 @@ static int msi_plessey_mod1110(struct zint_symbol *symbol, unsigned char source[ return error_number; } -INTERNAL int msi_handle(struct zint_symbol *symbol, unsigned char source[], int length) { +int msi_handle(struct zint_symbol *symbol, unsigned char source[], int length) { int error_number; error_number = is_sane(NEON, source, length); @@ -492,3 +491,4 @@ INTERNAL int msi_handle(struct zint_symbol *symbol, unsigned char source[], int return error_number; } + diff --git a/backend/png.c b/backend/png.c index f2e41f1..62ccf2f 100644 --- a/backend/png.c +++ b/backend/png.c @@ -29,7 +29,6 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ #include #ifdef _MSC_VER @@ -72,7 +71,7 @@ static void writepng_error_handler(png_structp png_ptr, png_const_charp msg) { longjmp(graphic->jmpbuf, 1); } -INTERNAL int png_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) { +int png_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) { struct mainprog_info_type wpng_info; struct mainprog_info_type *graphic; png_structp png_ptr; @@ -159,46 +158,6 @@ INTERNAL int png_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) { for (column = 0; column < symbol->bitmap_width; column++) { i = column * 3; switch (*(pixelbuf + (symbol->bitmap_width * row) + column)) { - case 'W': // White - outdata[i] = 255; - outdata[i + 1] = 255; - outdata[i + 2] = 255; - break; - case 'C': // Cyan - outdata[i] = 0; - outdata[i + 1] = 255; - outdata[i + 2] = 255; - break; - case 'B': // Blue - outdata[i] = 0; - outdata[i + 1] = 0; - outdata[i + 2] = 255; - break; - case 'M': // Magenta - outdata[i] = 255; - outdata[i + 1] = 0; - outdata[i + 2] = 255; - break; - case 'R': // Red - outdata[i] = 255; - outdata[i + 1] = 0; - outdata[i + 2] = 0; - break; - case 'Y': // Yellow - outdata[i] = 255; - outdata[i + 1] = 255; - outdata[i + 2] = 0; - break; - case 'G': // Green - outdata[i] = 0; - outdata[i + 1] = 255; - outdata[i + 2] = 0; - break; - case 'K': // Black - outdata[i] = 0; - outdata[i + 1] = 0; - outdata[i + 2] = 0; - break; case '1': outdata[i] = fgred; outdata[i + 1] = fggrn; @@ -230,3 +189,5 @@ INTERNAL int png_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) { return 0; } #endif /* NO_PNG */ + + diff --git a/backend/postal.c b/backend/postal.c index b90743d..08f0dbf 100644 --- a/backend/postal.c +++ b/backend/postal.c @@ -2,7 +2,7 @@ /* libzint - the open source barcode library - Copyright (C) 2008 - 2020 Robin Stuart + Copyright (C) 2008-2017 Robin Stuart Including bug fixes by Bryan Hatton Redistribution and use in source and binary forms, with or without @@ -30,15 +30,16 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ +#include +#include #include #ifdef _MSC_VER #include #endif #include "common.h" -#define DAFTSET "DAFT" +#define DAFTSET "DAFT" #define KRSET "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" #define KASUTSET "1234567890-abcdefgh" #define CHKASUTSET "0123456789-abcdefgh" @@ -84,10 +85,12 @@ static const char *JapanTable[19] = { }; /* Handles the PostNet system used for Zip codes in the US */ -static int postnet(struct zint_symbol *symbol, unsigned char source[], char dest[], int length) { - int i, sum, check_digit; +int postnet(struct zint_symbol *symbol, unsigned char source[], char dest[], int length) { + unsigned int i, sum, check_digit; int error_number; + error_number = 0; + if (length != 5 && length != 9 && length != 11) { strcpy(symbol->errtxt, "480: Input wrong length"); return ZINT_ERROR_TOO_LONG; @@ -117,12 +120,14 @@ static int postnet(struct zint_symbol *symbol, unsigned char source[], char dest } /* Puts PostNet barcodes into the pattern matrix */ -INTERNAL int post_plot(struct zint_symbol *symbol, unsigned char source[], int length) { +int post_plot(struct zint_symbol *symbol, unsigned char source[], int length) { char height_pattern[256]; /* 5 + 38 * 5 + 5 + 5 + 1 ~ 256 */ unsigned int loopey, h; int writer; int error_number; + error_number = 0; + error_number = postnet(symbol, source, height_pattern, length); if (error_number != 0) { return error_number; @@ -146,10 +151,12 @@ INTERNAL int post_plot(struct zint_symbol *symbol, unsigned char source[], int l } /* Handles the PLANET system used for item tracking in the US */ -static int planet(struct zint_symbol *symbol, unsigned char source[], char dest[], int length) { - int i, sum, check_digit; +int planet(struct zint_symbol *symbol, unsigned char source[], char dest[], int length) { + unsigned int i, sum, check_digit; int error_number; + error_number = 0; + if (length != 11 && length != 13) { strcpy(symbol->errtxt, "482: Input wrong length"); return ZINT_ERROR_TOO_LONG; @@ -179,12 +186,14 @@ static int planet(struct zint_symbol *symbol, unsigned char source[], char dest[ } /* Puts PLANET barcodes into the pattern matrix */ -INTERNAL int planet_plot(struct zint_symbol *symbol, unsigned char source[], int length) { +int planet_plot(struct zint_symbol *symbol, unsigned char source[], int length) { char height_pattern[256]; /* 5 + 38 * 5 + 5 + 5 + 1 ~ 256 */ unsigned int loopey, h; int writer; int error_number; + error_number = 0; + error_number = planet(symbol, source, height_pattern, length); if (error_number != 0) { return error_number; @@ -207,10 +216,11 @@ INTERNAL int planet_plot(struct zint_symbol *symbol, unsigned char source[], int } /* Korean Postal Authority */ -INTERNAL int korea_post(struct zint_symbol *symbol, unsigned char source[], int length) { +int korea_post(struct zint_symbol *symbol, unsigned char source[], int length) { int total, loop, check, zeroes, error_number; char localstr[8], dest[80]; + error_number = 0; if (length > 6) { strcpy(symbol->errtxt, "484: Input too long"); return ZINT_ERROR_TOO_LONG; @@ -246,7 +256,8 @@ INTERNAL int korea_post(struct zint_symbol *symbol, unsigned char source[], int /* The simplest barcode symbology ever! Supported by MS Word, so here it is! glyphs from http://en.wikipedia.org/wiki/Facing_Identification_Mark */ -INTERNAL int fim(struct zint_symbol *symbol, unsigned char source[], int length) { +int fim(struct zint_symbol *symbol, unsigned char source[], int length) { + char dest[16] = {0}; @@ -283,8 +294,8 @@ INTERNAL int fim(struct zint_symbol *symbol, unsigned char source[], int length) } /* Handles the 4 State barcodes used in the UK by Royal Mail */ -static char rm4scc(char source[], unsigned char dest[], int length) { - int i; +char rm4scc(char source[], unsigned char dest[], int length) { + unsigned int i; int top, bottom, row, column, check_digit; char values[3], set_copy[] = KRSET; @@ -320,13 +331,15 @@ static char rm4scc(char source[], unsigned char dest[], int length) { } /* Puts RM4SCC into the data matrix */ -INTERNAL int royal_plot(struct zint_symbol *symbol, unsigned char source[], int length) { +int royal_plot(struct zint_symbol *symbol, unsigned char source[], int length) { char height_pattern[210]; - int loopey, h; + unsigned int loopey, h; int writer; int error_number; strcpy(height_pattern, ""); + error_number = 0; + if (length > 50) { strcpy(symbol->errtxt, "488: Input too long"); return ZINT_ERROR_TOO_LONG; @@ -364,13 +377,15 @@ INTERNAL int royal_plot(struct zint_symbol *symbol, unsigned char source[], int /* Handles Dutch Post TNT KIX symbols The same as RM4SCC but without check digit Specification at http://www.tntpost.nl/zakelijk/klantenservice/downloads/kIX_code/download.aspx */ -INTERNAL int kix_code(struct zint_symbol *symbol, unsigned char source[], int length) { +int kix_code(struct zint_symbol *symbol, unsigned char source[], int length) { char height_pattern[75], localstr[20]; - int loopey; + unsigned int loopey; int writer, i, h; - int error_number; + int error_number; /* zeroes; */ strcpy(height_pattern, ""); + error_number = 0; + if (length > 18) { strcpy(symbol->errtxt, "490: Input too long"); return ZINT_ERROR_TOO_LONG; @@ -412,12 +427,13 @@ INTERNAL int kix_code(struct zint_symbol *symbol, unsigned char source[], int le } /* Handles DAFT Code symbols */ -INTERNAL int daft_code(struct zint_symbol *symbol, unsigned char source[], int length) { +int daft_code(struct zint_symbol *symbol, unsigned char source[], int length) { char height_pattern[100]; unsigned int loopey, h; int writer, i, error_number; strcpy(height_pattern, ""); + error_number = 0; if (length > 50) { strcpy(symbol->errtxt, "492: Input too long"); return ZINT_ERROR_TOO_LONG; @@ -468,10 +484,12 @@ INTERNAL int daft_code(struct zint_symbol *symbol, unsigned char source[], int l } /* Flattermarken - Not really a barcode symbology! */ -INTERNAL int flattermarken(struct zint_symbol *symbol, unsigned char source[], int length) { +int flattermarken(struct zint_symbol *symbol, unsigned char source[], int length) { int loop, error_number; char dest[512]; /* 90 * 4 + 1 ~ */ + error_number = 0; + if (length > 90) { strcpy(symbol->errtxt, "494: Input too long"); return ZINT_ERROR_TOO_LONG; @@ -491,7 +509,7 @@ INTERNAL int flattermarken(struct zint_symbol *symbol, unsigned char source[], i } /* Japanese Postal Code (Kasutama Barcode) */ -INTERNAL int japan_post(struct zint_symbol *symbol, unsigned char source[], int length) { +int japan_post(struct zint_symbol *symbol, unsigned char source[], int length) { int error_number, h; char pattern[69]; int writer, loopey, inter_posn, i, sum, check; @@ -509,6 +527,7 @@ INTERNAL int japan_post(struct zint_symbol *symbol, unsigned char source[], int return ZINT_ERROR_TOO_LONG; } + inter_posn = 0; error_number = 0; strcpy(local_source, (char*) source); @@ -563,9 +582,11 @@ INTERNAL int japan_post(struct zint_symbol *symbol, unsigned char source[], int } if (check <= 9) { check_char = check + '0'; - } else if (check == 10) { + } + if (check == 10) { check_char = '-'; - } else { + } + if (check >= 11) { check_char = (check - 11) + 'a'; } strcat(pattern, JapanTable[posn(KASUTSET, check_char)]); diff --git a/backend/ps.c b/backend/ps.c index 31a2f39..a8006ff 100644 --- a/backend/ps.c +++ b/backend/ps.c @@ -29,7 +29,6 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ #include #include @@ -38,70 +37,7 @@ #include #include "common.h" -void colour_to_pscolor(int option, int colour, char* output) { - strcpy(output, ""); - if ((option & CMYK_COLOUR) == 0) { - // Use RGB colour space - switch(colour) { - case 0: // White - strcat(output, "1.00 1.00 1.00"); - break; - case 1: // Cyan - strcat(output, "0.00 1.00 1.00"); - break; - case 2: // Blue - strcat(output, "0.00 0.00 1.00"); - break; - case 3: // Magenta - strcat(output, "1.00 0.00 1.00"); - break; - case 4: // Red - strcat(output, "1.00 0.00 0.00"); - break; - case 5: // Yellow - strcat(output, "1.00 1.00 0.00"); - break; - case 6: // Green - strcat(output, "0.00 1.00 0.00"); - break; - default: // Black - strcat(output, "0.00 0.00 0.00"); - break; - } - strcat(output, " setrgbcolor"); - } else { - // Use CMYK colour space - switch(colour) { - case 0: // White - strcat(output, "0.00 0.00 0.00 0.00"); - break; - case 1: // Cyan - strcat(output, "1.00 0.00 0.00 0.00"); - break; - case 2: // Blue - strcat(output, "1.00 1.00 0.00 0.00"); - break; - case 3: // Magenta - strcat(output, "0.00 1.00 0.00 0.00"); - break; - case 4: // Red - strcat(output, "0.00 1.00 1.00 0.00"); - break; - case 5: // Yellow - strcat(output, "0.00 0.00 1.00 0.00"); - break; - case 6: // Green - strcat(output, "1.00 0.00 1.00 0.00"); - break; - default: // Black - strcat(output, "0.00 0.00 0.00 1.00"); - break; - } - strcat(output, " setcmykcolor"); - } -} - -INTERNAL int ps_plot(struct zint_symbol *symbol) { +int ps_plot(struct zint_symbol *symbol) { FILE *feps; int fgred, fggrn, fgblu, bgred, bggrn, bgblu; float red_ink, green_ink, blue_ink, red_paper, green_paper, blue_paper; @@ -110,9 +46,7 @@ INTERNAL int ps_plot(struct zint_symbol *symbol) { int error_number = 0; float ax, ay, bx, by, cx, cy, dx, dy, ex, ey, fx, fy; float radius; - int colour_index, colour_rect_counter; - char ps_color[30]; - + struct zint_vector_rect *rect; struct zint_vector_hexagon *hex; struct zint_vector_circle *circle; @@ -218,42 +152,19 @@ INTERNAL int ps_plot(struct zint_symbol *symbol) { fprintf(feps, "%.2f 0.00 TB 0.00 %.2f TR\n", symbol->vector->height, symbol->vector->width); fprintf(feps, "TE\n"); - if (symbol->symbology != BARCODE_ULTRA) { - if ((symbol->output_options & CMYK_COLOUR) == 0) { - fprintf(feps, "%.2f %.2f %.2f setrgbcolor\n", red_ink, green_ink, blue_ink); - } else { - fprintf(feps, "%.2f %.2f %.2f %.2f setcmykcolor\n", cyan_ink, magenta_ink, yellow_ink, black_ink); - } + if ((symbol->output_options & CMYK_COLOUR) == 0) { + fprintf(feps, "%.2f %.2f %.2f setrgbcolor\n", red_ink, green_ink, blue_ink); + } else { + fprintf(feps, "%.2f %.2f %.2f %.2f setcmykcolor\n", cyan_ink, magenta_ink, yellow_ink, black_ink); } - + // Rectangles - if (symbol->symbology == BARCODE_ULTRA) { - for (colour_index = 0; colour_index <= 7; colour_index++) { - colour_rect_counter = 0; - rect = symbol->vector->rectangles; - while (rect) { - if (rect->colour == colour_index) { - if (colour_rect_counter == 0) { - //Set new colour - colour_to_pscolor(symbol->output_options, colour_index, ps_color); - fprintf(feps, "%s\n", ps_color); - } - colour_rect_counter++; - fprintf(feps, "%.2f %.2f TB %.2f %.2f TR\n", rect->height, (symbol->vector->height - rect->y) - rect->height, rect->x, rect->width); - fprintf(feps, "TE\n"); - } - rect = rect->next; - } - } - } else { - rect = symbol->vector->rectangles; - while (rect) { - fprintf(feps, "%.2f %.2f TB %.2f %.2f TR\n", rect->height, (symbol->vector->height - rect->y) - rect->height, rect->x, rect->width); - fprintf(feps, "TE\n"); - rect = rect->next; - } + rect = symbol->vector->rectangles; + while (rect) { + fprintf(feps, "%.2f %.2f TB %.2f %.2f TR\n", rect->height, (symbol->vector->height - rect->y) - rect->height, rect->x, rect->width); + rect = rect->next; } - + // Hexagons hex = symbol->vector->hexagons; while (hex) { @@ -273,7 +184,7 @@ INTERNAL int ps_plot(struct zint_symbol *symbol) { fprintf(feps, "%.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f TH\n", ax, ay, bx, by, cx, cy, dx, dy, ex, ey, fx, fy); hex = hex->next; } - + // Circles circle = symbol->vector->circles; while (circle) { @@ -298,7 +209,7 @@ INTERNAL int ps_plot(struct zint_symbol *symbol) { } circle = circle->next; } - + // Text string = symbol->vector->strings; while (string) { @@ -313,8 +224,8 @@ INTERNAL int ps_plot(struct zint_symbol *symbol) { fprintf(feps, "setmatrix\n"); string = string->next; } - - //fprintf(feps, "\nshowpage\n"); + + fprintf(feps, "\nshowpage\n"); if (symbol->output_options & BARCODE_STDOUT) { fflush(feps); diff --git a/backend/qr.c b/backend/qr.c index 40a1c32..6793d6f 100644 --- a/backend/qr.c +++ b/backend/qr.c @@ -1,7 +1,8 @@ -/* qr.c Handles QR Code, Micro QR Code, UPNQR and rMQR +/* qr.c Handles QR Code */ +/* libzint - the open source barcode library - Copyright (C) 2009 - 2020 Robin Stuart + Copyright (C) 2009 -2017 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -28,7 +29,6 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ #include #ifdef _MSC_VER @@ -39,297 +39,118 @@ #include "sjis.h" #include "qr.h" #include "reedsol.h" +#include /* abs */ #include -INTERNAL int utf_to_eci(const int eci, const unsigned char source[], unsigned char dest[], size_t *length); /* Convert Unicode to other encodings */ +extern int utf_to_eci(const int eci, const unsigned char source[], unsigned char dest[], size_t *length); /* Convert Unicode to other encodings */ /* Returns true if input glyph is in the Alphanumeric set */ -static int is_alpha(const unsigned int glyph, const int gs1) { +static int in_alpha(const int glyph) { int retval = 0; + char cglyph = (char) glyph; - if ((glyph >= '0') && (glyph <= '9')) { + if ((cglyph >= '0') && (cglyph <= '9')) { retval = 1; - } else if ((glyph >= 'A') && (glyph <= 'Z')) { - retval = 1; - } else if (gs1 && glyph == '[') { + } + if ((cglyph >= 'A') && (cglyph <= 'Z')) { retval = 1; - } else { - switch (glyph) { - case ' ': - case '$': - case '%': - case '*': - case '+': - case '-': - case '.': - case '/': - case ':': - retval = 1; - break; - } } - - return retval; -} - -/* Bits multiplied by this for costs, so as to be whole integer divisible by 2 and 3 */ -#define QR_MULT 6 - -/* Whether in numeric or not. If in numeric, *p_end is set to position after numeric, and *p_cost is set to per-numeric cost */ -static int in_numeric(const unsigned int jisdata[], const size_t length, const unsigned int posn, unsigned int* p_end, unsigned int* p_cost) { - unsigned int i, digit_cnt; - - if (posn < *p_end) { - return 1; + switch (cglyph) { + case ' ': + case '$': + case '%': + case '*': + case '+': + case '-': + case '.': + case '/': + case ':': + retval = 1; + break; } - /* Attempt to calculate the average 'cost' of using numeric mode in number of bits (times QR_MULT) */ - for (i = posn; i < length && i < posn + 4 && jisdata[i] >= '0' && jisdata[i] <= '9'; i++); - - digit_cnt = i - posn; - - if (digit_cnt == 0) { - *p_end = 0; - return 0; - } - *p_end = i; - *p_cost = digit_cnt == 1 ? 24 /* 4 * QR_MULT */ : digit_cnt == 2 ? 21 /* (7 / 2) * QR_MULT */ : 20 /* (10 / 3) * QR_MULT) */; - return 1; + return retval; } -/* Whether in alpha or not. If in alpha, *p_end is set to position after alpha, and *p_cost is set to per-alpha cost. For GS1, *p_pcent set if 2nd char percent */ -static int in_alpha(const unsigned int jisdata[], const size_t length, const unsigned int posn, unsigned int* p_end, unsigned int* p_cost, unsigned int* p_pcent, unsigned int gs1) { - int two_alphas; +static void define_mode(char mode[],const int jisdata[], const size_t length,const int gs1) { + /* Values placed into mode[] are: K = Kanji, B = Binary, A = Alphanumeric, N = Numeric */ + size_t i; + int mlen, j; - if (posn < *p_end) { - if (gs1 && *p_pcent) { - /* Previous 2nd char was a percent, so allow for second half of doubled-up percent here */ - two_alphas = posn < length - 1 && is_alpha(jisdata[posn + 1], gs1); - *p_cost = two_alphas ? 33 /* (11 / 2) * QR_MULT */ : 36 /* 6 * QR_MULT */; - *p_pcent = 0; + for (i = 0; i < length; i++) { + if (jisdata[i] > 0xff) { + mode[i] = 'K'; + } else { + mode[i] = 'B'; + if (in_alpha(jisdata[i])) { + mode[i] = 'A'; + } + if (gs1 && (jisdata[i] == '[')) { + mode[i] = 'A'; + } + if ((jisdata[i] >= '0') && (jisdata[i] <= '9')) { + mode[i] = 'N'; + } } - return 1; - } - - /* Attempt to calculate the average 'cost' of using alphanumeric mode in number of bits (times QR_MULT) */ - if (!is_alpha(jisdata[posn], gs1)) { - *p_end = 0; - *p_pcent = 0; - return 0; - } - - if (gs1 && jisdata[posn] == '%') { /* Must double-up so counts as 2 chars */ - *p_end = posn + 1; - *p_cost = 66; /* 11 * QR_MULT */ - *p_pcent = 0; - return 1; } - two_alphas = posn < length - 1 && is_alpha(jisdata[posn + 1], gs1); - - *p_end = two_alphas ? posn + 2 : posn + 1; - *p_cost = two_alphas ? 33 /* (11 / 2) * QR_MULT */ : 36 /* 6 * QR_MULT */; - *p_pcent = two_alphas && gs1 && jisdata[posn + 1] == '%'; /* 2nd char is percent */ - return 1; -} - -/* Indexes into mode_types array (and state array) */ -#define QR_N 0 /* Numeric */ -#define QR_A 1 /* Alphanumeric */ -#define QR_B 2 /* Byte */ -#define QR_K 3 /* Kanji */ - -static const char mode_types[] = { 'N', 'A', 'B', 'K', }; /* Must be in same order as QR_N etc */ - -#define QR_NUM_MODES 4 - -/* Indexes into state array (0..3 head costs) */ -#define QR_VER 4 /* Version */ -#define QR_GS1 5 /* GS1 mode (boolean) */ -#define QR_N_END 6 /* Numeric end index */ -#define QR_N_COST 7 /* Numeric cost */ -#define QR_A_END 8 /* Alpha end index */ -#define QR_A_COST 9 /* Alpha cost */ -#define QR_A_PCENT 10 /* Alpha 2nd char percent (GS1-specific) */ - -/* Costs set to this for invalid MICROQR modes for versions M1 and M2. - * 128 is the max number of data bits for M4-L (ISO/IEC 18004:2015 Table 7) */ -#define QR_MICROQR_MAX 774 /* (128 + 1) * QR_MULT */ - -/* Initial mode costs */ -static unsigned int* qr_head_costs(unsigned int state[]) { - static const int head_costs[7][QR_NUM_MODES] = { - /* N A B K */ - { (10 + 4) * QR_MULT, (9 + 4) * QR_MULT, (8 + 4) * QR_MULT, (8 + 4) * QR_MULT, }, /* QR */ - { (12 + 4) * QR_MULT, (11 + 4) * QR_MULT, (16 + 4) * QR_MULT, (10 + 4) * QR_MULT, }, - { (14 + 4) * QR_MULT, (13 + 4) * QR_MULT, (16 + 4) * QR_MULT, (12 + 4) * QR_MULT, }, - { 3 * QR_MULT, QR_MICROQR_MAX, QR_MICROQR_MAX, QR_MICROQR_MAX, }, /* MICROQR */ - { (4 + 1) * QR_MULT, (3 + 1) * QR_MULT, QR_MICROQR_MAX, QR_MICROQR_MAX, }, - { (5 + 2) * QR_MULT, (4 + 2) * QR_MULT, (4 + 2) * QR_MULT, (3 + 2) * QR_MULT, }, - { (6 + 3) * QR_MULT, (5 + 3) * QR_MULT, (5 + 3) * QR_MULT, (4 + 3) * QR_MULT, } - }; - int version; - - /* Head costs kept in states 0..3 */ - if (state[QR_N] != 0) { /* Numeric non-zero in all configs */ - return state; /* Already set */ - } - - version = state[QR_VER]; - - if (version < RMQR_VERSION) { /* QRCODE */ - if (version < 10) { - memcpy(state, head_costs, QR_NUM_MODES * sizeof(unsigned int)); - } else if (version < 27) { - memcpy(state, head_costs + 1, QR_NUM_MODES * sizeof(unsigned int)); - } else { - memcpy(state, head_costs + 2, QR_NUM_MODES * sizeof(unsigned int)); + /* If less than 6 numeric digits together then don't use numeric mode */ + for (i = 0; i < length; i++) { + if (mode[i] == 'N') { + if (((i != 0) && (mode[i - 1] != 'N')) || (i == 0)) { + mlen = 0; + while (((mlen + i) < length) && (mode[mlen + i] == 'N')) { + mlen++; + }; + if (mlen < 6) { + for (j = 0; j < mlen; j++) { + mode[i + j] = 'A'; + } + } + } } - } else if (version < MICROQR_VERSION) { /* RMQR */ - version -= RMQR_VERSION; - state[QR_N] = (rmqr_numeric_cci[version] + 3) * QR_MULT; - state[QR_A] = (rmqr_alphanum_cci[version] + 3) * QR_MULT; - state[QR_B] = (rmqr_byte_cci[version] + 3) * QR_MULT; - state[QR_K] = (rmqr_kanji_cci[version] + 3) * QR_MULT; - } else { /* MICROQR */ - memcpy(state, head_costs + 3 + (version - MICROQR_VERSION), QR_NUM_MODES * sizeof(unsigned int)); } - return state; -} - -/* Costs of switching modes from k to j */ -static unsigned int qr_switch_cost(unsigned int state[], const int k, const int j) { - (void)k; /* Unused */ - return state[j]; /* Same as head cost */ -} - -/* Calculate cost of encoding character */ -static void qr_cur_cost(unsigned int state[], const unsigned int jisdata[], const size_t length, const int i, char* char_modes, unsigned int prev_costs[], unsigned int cur_costs[]) { - int cm_i = i * QR_NUM_MODES, m1, m2; - unsigned int version = state[QR_VER]; - unsigned int gs1 = state[QR_GS1]; - unsigned int* p_numeric_end = &state[QR_N_END]; - unsigned int* p_numeric_cost = &state[QR_N_COST]; - unsigned int* p_alpha_end = &state[QR_A_END]; - unsigned int* p_alpha_cost = &state[QR_A_COST]; - unsigned int* p_alpha_pcent = &state[QR_A_PCENT]; - - m1 = version == MICROQR_VERSION; - m2 = version == MICROQR_VERSION + 1; - - if (jisdata[i] > 0xFF) { - cur_costs[QR_B] = prev_costs[QR_B] + ((m1 || m2) ? QR_MICROQR_MAX : 96); /* 16 * QR_MULT */ - char_modes[cm_i + QR_B] = 'B'; - cur_costs[QR_K] = prev_costs[QR_K] + ((m1 || m2) ? QR_MICROQR_MAX : 78); /* 13 * QR_MULT */ - char_modes[cm_i + QR_K] = 'K'; - } else { - if (in_numeric(jisdata, length, i, p_numeric_end, p_numeric_cost)) { - cur_costs[QR_N] = prev_costs[QR_N] + *p_numeric_cost; - char_modes[cm_i + QR_N] = 'N'; - } - if (in_alpha(jisdata, length, i, p_alpha_end, p_alpha_cost, p_alpha_pcent, gs1)) { - cur_costs[QR_A] = prev_costs[QR_A] + (m1 ? QR_MICROQR_MAX : *p_alpha_cost); - char_modes[cm_i + QR_A] = 'A'; + /* If less than 4 alphanumeric characters together then don't use alphanumeric mode */ + for (i = 0; i < length; i++) { + if (mode[i] == 'A') { + if (((i != 0) && (mode[i - 1] != 'A')) || (i == 0)) { + mlen = 0; + while (((mlen + i) < length) && (mode[mlen + i] == 'A')) { + mlen++; + }; + if (mlen < 4) { + for (j = 0; j < mlen; j++) { + mode[i + j] = 'B'; + } + } + } } - cur_costs[QR_B] = prev_costs[QR_B] + ((m1 || m2) ? QR_MICROQR_MAX : 48); /* 8 * QR_MULT */ - char_modes[cm_i + QR_B] = 'B'; } } -static void qr_define_mode(char mode[], const unsigned int jisdata[], const size_t length, const int gs1, const int version, const int debug) { - unsigned int state[11] = { - 0 /*N*/, 0 /*A*/, 0 /*B*/, 0 /*K*/, - (unsigned int) version, (unsigned int) gs1, - 0 /*numeric_end*/, 0 /*numeric_cost*/, 0 /*alpha_end*/, 0 /*alpha_cost*/, 0 /*alpha_pcent*/ - }; +/* Choose from three numbers based on version */ +static int tribus(const int version,const int a,const int b,const int c) { + int RetVal; - pn_define_mode(mode, jisdata, length, debug, state, mode_types, QR_NUM_MODES, qr_head_costs, qr_switch_cost, NULL, qr_cur_cost); -} + RetVal = c; -/* Return mode indicator bits based on version */ -static int mode_bits(const int version) { - if (version < RMQR_VERSION) { - return 4; /* QRCODE */ + if (version < 10) { + RetVal = a; } - if (version < MICROQR_VERSION) { - return 3; /* RMQR */ - } - return version - MICROQR_VERSION; /* MICROQR */ -} - -/* Return character count indicator bits based on version and mode */ -static int cci_bits(const int version, const int mode) { - static const int cci_bits[7][QR_NUM_MODES] = { - /* N A B K */ - { 10, 9, 8, 8, }, /* QRCODE */ - { 12, 11, 16, 10, }, - { 14, 13, 16, 12, }, - { 3, 0, 0, 0, }, /* MICROQR */ - { 4, 3, 0, 0, }, - { 5, 4, 4, 3, }, - { 6, 5, 5, 4, } - }; - static const unsigned short int* rmqr_ccis[QR_NUM_MODES] = { - rmqr_numeric_cci, rmqr_alphanum_cci, rmqr_byte_cci, rmqr_kanji_cci, - }; - int mode_index = strchr(mode_types, mode) - mode_types; - - if (version < RMQR_VERSION) { /* QRCODE */ - if (version < 10) { - return cci_bits[0][mode_index]; - } - if (version < 27) { - return cci_bits[1][mode_index]; - } - return cci_bits[2][mode_index]; - } - if (version < MICROQR_VERSION) { /* RMQR */ - return rmqr_ccis[mode_index][version - RMQR_VERSION]; - } - return cci_bits[3 + (version - MICROQR_VERSION)][mode_index]; /* MICROQR */ -} -/* Returns mode indicator based on version and mode */ -static const char* mode_indicator(const int version, const int mode) { - static const char* mode_indicators[6][QR_NUM_MODES] = { - /* N A B K */ - { "0001", "0010", "0100", "1000", }, /* QRCODE */ - { "001", "010", "011", "100", }, /* RMQR */ - { "", "", "", "", }, /* MICROQR */ - { "0", "1", "", "", }, - { "00", "01", "10", "11", }, - { "000", "001", "010", "011", }, - }; - - int mode_index = strchr(mode_types, mode) - mode_types; - - if (version < RMQR_VERSION) { - return mode_indicators[0][mode_index]; /* QRCODE */ + if ((version >= 10) && (version <= 26)) { + RetVal = b; } - if (version < MICROQR_VERSION) { - return mode_indicators[1][mode_index] /* RMQR */; - } - return mode_indicators[2 + version - MICROQR_VERSION][mode_index]; /* MICROQR */ -} -/* Returns terminator bits based on version */ -static int terminator_bits(const int version) { - if (version < RMQR_VERSION) { - return 4; /* QRCODE */ - } - if (version < MICROQR_VERSION) { - return 3; /* RMQR */ - } - return 3 + (version - MICROQR_VERSION) * 2; /* MICROQR (Note not actually using this at the moment) */ + return RetVal; } /* Convert input data to a binary stream and add padding */ -static void qr_binary(unsigned char datastream[], const int version, const int target_codewords, const char mode[], const unsigned int jisdata[], const size_t length, - const int gs1, const int eci, const int est_binlen, const int debug) { - unsigned int position = 0; +static void qr_binary(int datastream[], const int version, const int target_binlen, const char mode[], const int jisdata[], const size_t length, const int gs1, const int eci, const int est_binlen,const int debug) { + int position = 0; int i; - int termbits, padbits; + char padbits; int current_binlen, current_bytes; int toggle, percent; int percent_count; @@ -341,15 +162,11 @@ static void qr_binary(unsigned char datastream[], const int version, const int t #endif strcpy(binary, ""); - if (gs1) { /* Not applicable to MICROQR */ - if (version < RMQR_VERSION) { - strcat(binary, "0101"); /* FNC1 */ - } else { - strcat(binary, "101"); - } + if (gs1) { + strcat(binary, "0101"); /* FNC1 */ } - if (eci != 0) { /* Not applicable to RMQR or MICROQR */ + if (eci != 0) { strcat(binary, "0111"); /* ECI (Table 4) */ if (eci <= 127) { bin_append(eci, 8, binary); /* 000000 to 000127 */ @@ -360,8 +177,8 @@ static void qr_binary(unsigned char datastream[], const int version, const int t } } - if (debug & ZINT_DEBUG_PRINT) { - for (i = 0; i < (int) length; i++) { + if (debug) { + for (i = 0; i < length; i++) { printf("%c", mode[i]); } printf("\n"); @@ -372,11 +189,7 @@ static void qr_binary(unsigned char datastream[], const int version, const int t do { char data_block = mode[position]; int short_data_block_length = 0; - int double_byte = 0; do { - if (data_block == 'B' && jisdata[position + short_data_block_length] > 0xFF) { - double_byte++; - } short_data_block_length++; } while (((short_data_block_length + position) < length) && (mode[position + short_data_block_length] == data_block)); @@ -385,18 +198,18 @@ static void qr_binary(unsigned char datastream[], const int version, const int t case 'K': /* Kanji mode */ /* Mode indicator */ - strcat(binary, mode_indicator(version, data_block)); + strcat(binary, "1000"); /* Character count indicator */ - bin_append(short_data_block_length, cci_bits(version, data_block), binary); + bin_append(short_data_block_length, tribus(version, 8, 10, 12), binary); - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("Kanji block (length %d)\n\t", short_data_block_length); } /* Character representation */ for (i = 0; i < short_data_block_length; i++) { - unsigned int jis = jisdata[position + i]; + int jis = jisdata[position + i]; int prod; if (jis >= 0x8140 && jis <= 0x9ffc) @@ -409,12 +222,12 @@ static void qr_binary(unsigned char datastream[], const int version, const int t bin_append(prod, 13, binary); - if (debug & ZINT_DEBUG_PRINT) { - printf("0x%04X ", prod); + if (debug) { + printf("0x%4X ", prod); } } - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("\n"); } @@ -422,31 +235,31 @@ static void qr_binary(unsigned char datastream[], const int version, const int t case 'B': /* Byte mode */ /* Mode indicator */ - strcat(binary, mode_indicator(version, data_block)); + strcat(binary, "0100"); /* Character count indicator */ - bin_append(short_data_block_length + double_byte, cci_bits(version, data_block), binary); + bin_append(short_data_block_length, tribus(version, 8, 16, 16), binary); - if (debug & ZINT_DEBUG_PRINT) { - printf("Byte block (length %d)\n\t", short_data_block_length + double_byte); + if (debug) { + printf("Byte block (length %d)\n\t", short_data_block_length); } /* Character representation */ for (i = 0; i < short_data_block_length; i++) { - unsigned int byte = jisdata[position + i]; + int byte = jisdata[position + i]; if (gs1 && (byte == '[')) { byte = 0x1d; /* FNC1 */ } - bin_append(byte, byte > 0xFF ? 16 : 8, binary); + bin_append(byte, 8, binary); - if (debug & ZINT_DEBUG_PRINT) { - printf("0x%02X(%d) ", byte, byte); + if (debug) { + printf("0x%2X(%d) ", byte, byte); } } - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("\n"); } @@ -454,21 +267,19 @@ static void qr_binary(unsigned char datastream[], const int version, const int t case 'A': /* Alphanumeric mode */ /* Mode indicator */ - strcat(binary, mode_indicator(version, data_block)); + strcat(binary, "0010"); percent_count = 0; - if (gs1) { - for (i = 0; i < short_data_block_length; i++) { - if (jisdata[position + i] == '%') { - percent_count++; - } + for (i = 0; i < short_data_block_length; i++) { + if (gs1 && (jisdata[position + i] == '%')) { + percent_count++; } } - + /* Character count indicator */ - bin_append(short_data_block_length + percent_count, cci_bits(version, data_block), binary); + bin_append(short_data_block_length + percent_count, tribus(version, 9, 11, 13), binary); - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("Alpha block (length %d)\n\t", short_data_block_length + percent_count); } @@ -541,12 +352,12 @@ static void qr_binary(unsigned char datastream[], const int version, const int t bin_append(prod, 1 + (5 * count), binary); - if (debug & ZINT_DEBUG_PRINT) { - printf("0x%X ", prod); + if (debug) { + printf("0x%4X ", prod); } - } + }; - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("\n"); } @@ -554,12 +365,12 @@ static void qr_binary(unsigned char datastream[], const int version, const int t case 'N': /* Numeric mode */ /* Mode indicator */ - strcat(binary, mode_indicator(version, data_block)); + strcat(binary, "0001"); /* Character count indicator */ - bin_append(short_data_block_length, cci_bits(version, data_block), binary); + bin_append(short_data_block_length, tribus(version, 10, 12, 14), binary); - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("Number block (length %d)\n\t", short_data_block_length); } @@ -587,14 +398,14 @@ static void qr_binary(unsigned char datastream[], const int version, const int t bin_append(prod, 1 + (3 * count), binary); - if (debug & ZINT_DEBUG_PRINT) { - printf("0x%X(%d) ", prod, prod); + if (debug) { + printf("0x%4X (%d)", prod, prod); } i += count; }; - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("\n"); } @@ -604,34 +415,19 @@ static void qr_binary(unsigned char datastream[], const int version, const int t position += short_data_block_length; } while (position < length); - if (version >= MICROQR_VERSION && version < MICROQR_VERSION + 4) { - /* MICROQR does its own terminating/padding */ - strcpy((char*)datastream, binary); - return; - } - /* Terminator */ - current_binlen = (int)strlen(binary); - termbits = 8 - current_binlen % 8; - if (termbits == 8) { - termbits = 0; - } - current_bytes = (current_binlen + termbits) / 8; - if (termbits || current_bytes < target_codewords) { - int max_termbits = terminator_bits(version); - termbits = termbits < max_termbits && current_bytes == target_codewords ? termbits : max_termbits; - bin_append(0, termbits, binary); - current_binlen += termbits; - } + strcat(binary, "0000"); - /* Padding bits */ - padbits = 8 - current_binlen % 8; + current_binlen = (int)strlen(binary); + padbits = 8 - (current_binlen % 8); if (padbits == 8) { padbits = 0; } - if (padbits) { - current_bytes = (current_binlen + padbits) / 8; - bin_append(0, padbits, binary); + current_bytes = (current_binlen + padbits) / 8; + + /* Padding bits */ + for (i = 0; i < padbits; i++) { + strcat(binary, "0"); } /* Put data into 8-bit codewords */ @@ -647,7 +443,7 @@ static void qr_binary(unsigned char datastream[], const int version, const int t /* Add pad codewords */ toggle = 0; - for (i = current_bytes; i < target_codewords; i++) { + for (i = current_bytes; i < target_binlen; i++) { if (toggle == 0) { datastream[i] = 0xec; toggle = 1; @@ -657,52 +453,35 @@ static void qr_binary(unsigned char datastream[], const int version, const int t } } - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("Resulting codewords:\n\t"); - for (i = 0; i < target_codewords; i++) { - printf("0x%02X ", datastream[i]); + for (i = 0; i < target_binlen; i++) { + printf("0x%2X ", datastream[i]); } printf("\n"); } } /* Split data into blocks, add error correction and then interleave the blocks and error correction data */ -static void add_ecc(unsigned char fullstream[], const unsigned char datastream[], const int version, const int data_cw, const int blocks, int debug) { - int ecc_cw; - int short_data_block_length; - int qty_long_blocks; - int qty_short_blocks; - int ecc_block_length; - int i, j, length_this_block, posn; -#ifdef _MSC_VER - unsigned char* data_block; - unsigned char* ecc_block; - unsigned char* interleaved_data; - unsigned char* interleaved_ecc; -#endif - - if (version < RMQR_VERSION) { - ecc_cw = qr_total_codewords[version - 1] - data_cw; - } else { - ecc_cw = rmqr_total_codewords[version - RMQR_VERSION] - data_cw; - } - - short_data_block_length = data_cw / blocks; - qty_long_blocks = data_cw % blocks; - qty_short_blocks = blocks - qty_long_blocks; - ecc_block_length = ecc_cw / blocks; +static void add_ecc(int fullstream[],const int datastream[],const int version,const int data_cw,const int blocks) { + int ecc_cw = qr_total_codewords[version - 1] - data_cw; + int short_data_block_length = data_cw / blocks; + int qty_long_blocks = data_cw % blocks; + int qty_short_blocks = blocks - qty_long_blocks; + int ecc_block_length = ecc_cw / blocks; + int i, j, length_this_block, posn, debug = 0; #ifndef _MSC_VER - unsigned char data_block[short_data_block_length + 1]; - unsigned char ecc_block[ecc_block_length]; - unsigned char interleaved_data[data_cw]; - unsigned char interleaved_ecc[ecc_cw]; + unsigned char data_block[short_data_block_length + 2]; + unsigned char ecc_block[ecc_block_length + 2]; + int interleaved_data[data_cw + 2]; + int interleaved_ecc[ecc_cw + 2]; #else - data_block = (unsigned char *) _alloca(short_data_block_length + 1); - ecc_block = (unsigned char *) _alloca(ecc_block_length); - interleaved_data = (unsigned char *) _alloca(data_cw); - interleaved_ecc = (unsigned char *) _alloca(ecc_cw); + unsigned char* data_block = (unsigned char *) _alloca(short_data_block_length + 2); + unsigned char* ecc_block = (unsigned char *) _alloca(ecc_block_length + 2); + int* interleaved_data = (int *) _alloca((data_cw + 2) * sizeof (int)); + int* interleaved_ecc = (int *) _alloca((ecc_cw + 2) * sizeof (int)); #endif posn = 0; @@ -719,7 +498,7 @@ static void add_ecc(unsigned char fullstream[], const unsigned char datastream[] } for (j = 0; j < length_this_block; j++) { - data_block[j] = datastream[posn + j]; + data_block[j] = (unsigned char) datastream[posn + j]; } rs_init_gf(0x11d); @@ -727,7 +506,7 @@ static void add_ecc(unsigned char fullstream[], const unsigned char datastream[] rs_encode(length_this_block, data_block, ecc_block); rs_free(); - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("Block %d: ", i + 1); for (j = 0; j < length_this_block; j++) { printf("%2X ", data_block[j]); @@ -743,29 +522,28 @@ static void add_ecc(unsigned char fullstream[], const unsigned char datastream[] } for (j = 0; j < short_data_block_length; j++) { - interleaved_data[(j * blocks) + i] = data_block[j]; + interleaved_data[(j * blocks) + i] = (int) data_block[j]; } if (i >= qty_short_blocks) { - /* NOLINT suppress clang-tidy warning: data_block[short_data_block_length] set for i >= qty_short_blocks */ - interleaved_data[(short_data_block_length * blocks) + (i - qty_short_blocks)] = data_block[short_data_block_length]; // NOLINT + interleaved_data[(short_data_block_length * blocks) + (i - qty_short_blocks)] = (int) data_block[short_data_block_length]; } for (j = 0; j < ecc_block_length; j++) { - interleaved_ecc[(j * blocks) + i] = ecc_block[ecc_block_length - j - 1]; + interleaved_ecc[(j * blocks) + i] = (int) ecc_block[ecc_block_length - j - 1]; } posn += length_this_block; } for (j = 0; j < data_cw; j++) { - fullstream[j] = interleaved_data[j]; // NOLINT suppress clang-tidy warning: interleaved_data[data_cw] fully set + fullstream[j] = interleaved_data[j]; } for (j = 0; j < ecc_cw; j++) { - fullstream[j + data_cw] = interleaved_ecc[j]; // NOLINT suppress clang-tidy warning: interleaved_ecc[ecc_cw] fully set + fullstream[j + data_cw] = interleaved_ecc[j]; } - if (debug & ZINT_DEBUG_PRINT) { + if (debug) { printf("\nData Stream: \n"); for (j = 0; j < (data_cw + ecc_cw); j++) { printf("%2X ", fullstream[j]); @@ -882,7 +660,7 @@ static void setup_grid(unsigned char* grid,const int size,const int version) { } } -static int cwbit(const unsigned char* fullstream, const int i) { +static int cwbit(const int* fullstream,const int i) { int resultant = 0; if (fullstream[(i / 8)] & (0x80 >> (i % 8))) { @@ -892,36 +670,35 @@ static int cwbit(const unsigned char* fullstream, const int i) { return resultant; } -static void populate_grid(unsigned char* grid, const int h_size, const int v_size, const unsigned char* fullstream, const int cw) { +static void populate_grid(unsigned char* grid,const int size,const int* fullstream,const int cw) { int direction = 1; /* up */ int row = 0; /* right hand side */ int i, n, y; n = cw * 8; - y = v_size - 1; + y = size - 1; i = 0; - while (i < n) { - int x = (h_size - 2) - (row * 2); - - if ((x < 6) && (v_size == h_size)) + do { + int x = (size - 2) - (row * 2); + if (x < 6) x--; /* skip over vertical timing pattern */ - if (!(grid[(y * h_size) + (x + 1)] & 0xf0)) { + if (!(grid[(y * size) + (x + 1)] & 0xf0)) { if (cwbit(fullstream, i)) { - grid[(y * h_size) + (x + 1)] = 0x01; + grid[(y * size) + (x + 1)] = 0x01; } else { - grid[(y * h_size) + (x + 1)] = 0x00; + grid[(y * size) + (x + 1)] = 0x00; } i++; } if (i < n) { - if (!(grid[(y * h_size) + x] & 0xf0)) { + if (!(grid[(y * size) + x] & 0xf0)) { if (cwbit(fullstream, i)) { - grid[(y * h_size) + x] = 0x01; + grid[(y * size) + x] = 0x01; } else { - grid[(y * h_size) + x] = 0x00; + grid[(y * size) + x] = 0x00; } i++; } @@ -938,18 +715,18 @@ static void populate_grid(unsigned char* grid, const int h_size, const int v_siz y = 0; direction = 0; } - if (y == v_size) { + if (y == size) { /* reached the bottom */ row++; - y = v_size - 1; + y = size - 1; direction = 1; } - } + } while (i < n); } #ifdef ZINTLOG -static int append_log(char log) { +int append_log(char log) { FILE *file; file = fopen("zintlog.txt", "a+"); @@ -958,7 +735,7 @@ static int append_log(char log) { return 0; } -static int write_log(char log[]) { +int write_log(char log[]) { FILE *file; file = fopen("zintlog.txt", "a+"); @@ -1072,10 +849,9 @@ static int evaluate(unsigned char *eval,const int size,const int pattern) { /* Test 2: Block of modules in same color */ for (x = 0; x < size - 1; x++) { for (y = 0; y < size - 1; y++) { - /* NOLINT suppress clang-tidy warning: local[size * size] fully set */ - if (((local[(y * size) + x] == local[((y + 1) * size) + x]) && // NOLINT + if (((local[(y * size) + x] == local[((y + 1) * size) + x]) && (local[(y * size) + x] == local[(y * size) + (x + 1)])) && - (local[(y * size) + x] == local[((y + 1) * size) + (x + 1)])) { // NOLINT + (local[(y * size) + x] == local[((y + 1) * size) + (x + 1)])) { result += 3; } } @@ -1413,6 +1189,122 @@ static void add_version_info(unsigned char *grid,const int size,const int versio } } +/* Implements a custom optimisation algorithm, more efficient than that + given in Annex J. */ +static void applyOptimisation(const int version,char inputMode[], const size_t inputLength) { + + + int blockCount = 0, block; + int i, j; + char currentMode = ' '; // Null + int *blockLength; + char *blockMode; + + for (i = 0; i < inputLength; i++) { + if (inputMode[i] != currentMode) { + currentMode = inputMode[i]; + blockCount++; + } + } + + blockLength = (int*) malloc(sizeof (int)*blockCount); + assert(blockLength); + if (!blockLength) return; + blockMode = (char*) malloc(sizeof (char)*blockCount); + assert(blockMode); + if (!blockMode) { + free(blockLength); + return; + } + + j = -1; + currentMode = ' '; // Null + for (i = 0; i < inputLength; i++) { + if (inputMode[i] != currentMode) { + j++; + blockLength[j] = 1; + blockMode[j] = inputMode[i]; + currentMode = inputMode[i]; + } else { + blockLength[j]++; + } + } + + if (blockCount > 1) { + // Search forward + for (i = 0; i <= (blockCount - 2); i++) { + if (blockMode[i] == 'B') { + switch (blockMode[i + 1]) { + case 'K': + if (blockLength[i + 1] < tribus(version, 4, 5, 6)) { + blockMode[i + 1] = 'B'; + } + break; + case 'A': + if (blockLength[i + 1] < tribus(version, 7, 8, 9)) { + blockMode[i + 1] = 'B'; + } + break; + case 'N': + if (blockLength[i + 1] < tribus(version, 3, 4, 5)) { + blockMode[i + 1] = 'B'; + } + break; + } + } + + if ((blockMode[i] == 'A') + && (blockMode[i + 1] == 'N')) { + if (blockLength[i + 1] < tribus(version, 6, 8, 10)) { + blockMode[i + 1] = 'A'; + } + } + } + + // Search backward + for (i = blockCount - 1; i > 0; i--) { + if (blockMode[i] == 'B') { + switch (blockMode[i - 1]) { + case 'K': + if (blockLength[i - 1] < tribus(version, 4, 5, 6)) { + blockMode[i - 1] = 'B'; + } + break; + case 'A': + if (blockLength[i - 1] < tribus(version, 7, 8, 9)) { + blockMode[i - 1] = 'B'; + } + break; + case 'N': + if (blockLength[i - 1] < tribus(version, 3, 4, 5)) { + blockMode[i - 1] = 'B'; + } + break; + } + } + + if ((blockMode[i] == 'A') + && (blockMode[i - 1] == 'N')) { + if (blockLength[i - 1] < tribus(version, 6, 8, 10)) { + blockMode[i - 1] = 'A'; + } + } + } + } + + j = 0; + for (block = 0; block < blockCount; block++) { + currentMode = blockMode[block]; + for (i = 0; i < blockLength[block]; i++) { + inputMode[j] = currentMode; + j++; + } + } + + free(blockLength); + free(blockMode); +} + static size_t blockLength(const size_t start,const char inputMode[],const size_t inputLength) { /* Find the length of the block starting from 'start' */ size_t i; @@ -1429,47 +1321,38 @@ static size_t blockLength(const size_t start,const char inputMode[],const size_t return count; } -static int getBinaryLength(const int version, char inputMode[], const unsigned int inputData[], const size_t inputLength, const int gs1, const int eci, const int debug) { +static int getBinaryLength(const int version,char inputMode[],const int inputData[],const size_t inputLength,const int gs1,const int eci) { /* Calculate the actual bitlength of the proposed binary string */ - size_t i, j; + size_t i; char currentMode; + int j; int count = 0; int alphalength; - int blocklength; + int percent = 0; - qr_define_mode(inputMode, inputData, inputLength, gs1, version, debug); + applyOptimisation(version, inputMode, inputLength); currentMode = ' '; // Null - if (gs1 == 1) { /* Not applicable to MICROQR */ - if (version < RMQR_VERSION) { - count += 4; - } else { - count += 3; - } + if (gs1 == 1) { + count += 4; } - if (eci != 0) { // RMQR and MICROQR do not support ECI - count += 4; - if (eci <= 127) { - count += 8; - } else if (eci <= 16383) { - count += 16; - } else { - count += 24; - } + if (eci != 0) { + count += 12; } for (i = 0; i < inputLength; i++) { if (inputMode[i] != currentMode) { - count += mode_bits(version) + cci_bits(version, inputMode[i]); - blocklength = blockLength(i, inputMode, inputLength); + count += 4; switch (inputMode[i]) { case 'K': - count += (blocklength * 13); + count += tribus(version, 8, 10, 12); + count += (blockLength(i, inputMode, inputLength) * 13); break; case 'B': - for (j = i; j < (i + blocklength); j++) { + count += tribus(version, 8, 16, 16); + for (j = i; j < (i + blockLength(i, inputMode, inputLength)); j++) { if (inputData[j] > 0xff) { count += 16; } else { @@ -1478,15 +1361,15 @@ static int getBinaryLength(const int version, char inputMode[], const unsigned i } break; case 'A': - alphalength = blocklength; - if (gs1) { - // In alphanumeric mode % becomes %% - for (j = i; j < (i + blocklength); j++) { - if (inputData[j] == '%') { - alphalength++; - } + count += tribus(version, 9, 11, 13); + alphalength = blockLength(i, inputMode, inputLength); + // In alphanumeric mode % becomes %% + for (j = i; j < (i + alphalength); j++) { + if (inputData[j] == '%') { + percent++; } } + alphalength += percent; switch (alphalength % 2) { case 0: count += (alphalength / 2) * 11; @@ -1498,16 +1381,17 @@ static int getBinaryLength(const int version, char inputMode[], const unsigned i } break; case 'N': - switch (blocklength % 3) { + count += tribus(version, 10, 12, 14); + switch (blockLength(i, inputMode, inputLength) % 3) { case 0: - count += (blocklength / 3) * 10; + count += (blockLength(i, inputMode, inputLength) / 3) * 10; break; case 1: - count += ((blocklength - 1) / 3) * 10; + count += ((blockLength(i, inputMode, inputLength) - 1) / 3) * 10; count += 4; break; case 2: - count += ((blocklength - 2) / 3) * 10; + count += ((blockLength(i, inputMode, inputLength) - 2) / 3) * 10; count += 7; break; } @@ -1517,64 +1401,71 @@ static int getBinaryLength(const int version, char inputMode[], const unsigned i } } - if (debug & ZINT_DEBUG_PRINT) { - printf("Estimated Binary Length: %d (version %d, eci %d, gs1 %d)\n", count, version, eci, gs1); - } - return count; } -INTERNAL int qr_code(struct zint_symbol *symbol, const unsigned char source[], size_t length) { +int qr_code(struct zint_symbol *symbol, const unsigned char source[], size_t length) { int i, j, est_binlen; - int ecc_level, autosize, version, max_cw, target_codewords, blocks, size; + int ecc_level, autosize, version, max_cw, target_binlen, blocks, size; int bitmask, gs1; - int full_multibyte; int canShrink; #ifndef _MSC_VER - unsigned int jisdata[length + 1]; + int utfdata[length + 1]; + int jisdata[length + 1]; char mode[length + 1]; #else - unsigned char* datastream; - unsigned char* fullstream; + int* datastream; + int* fullstream; unsigned char* grid; - unsigned int* jisdata = (unsigned int *) _alloca((length + 1) * sizeof (unsigned int)); + int* utfdata = (int *) _alloca((length + 1) * sizeof (int)); + int* jisdata = (int *) _alloca((length + 1) * sizeof (int)); char* mode = (char *) _alloca(length + 1); #endif - gs1 = ((symbol->input_mode & 0x07) == GS1_MODE); - full_multibyte = symbol->option_3 == ZINT_FULL_MULTIBYTE; /* If set use Kanji mode in DATA_MODE or for single-byte Latin */ + gs1 = (symbol->input_mode == GS1_MODE); - if ((symbol->input_mode & 0x07) == DATA_MODE) { - sjis_cpy(source, &length, jisdata, full_multibyte); + if ((symbol->input_mode == DATA_MODE) || (symbol->eci != 0)) { + for (i = 0; i < length; i++) { + jisdata[i] = (int) source[i]; + } } else { - int done = 0; - if (symbol->eci != 20) { /* Unless ECI 20 (Shift JIS) */ - /* Try single byte (Latin) conversion first */ - int error_number = sjis_utf8tosb(symbol->eci && symbol->eci <= 899 ? symbol->eci : 3, source, &length, jisdata, full_multibyte); - if (error_number == 0) { - done = 1; - } else if (symbol->eci && symbol->eci <= 899) { - strcpy(symbol->errtxt, "575: Invalid characters in input data"); - return error_number; - } + /* Convert Unicode input to Shift-JIS */ + int error_number = utf8toutf16(symbol, source, utfdata, &length); + if (error_number != 0) { + return error_number; } - if (!done) { - /* Try Shift-JIS */ - int error_number = sjis_utf8tomb(symbol, source, &length, jisdata); - if (error_number != 0) { - return error_number; + + for (i = 0; i < length; i++) { + if (utfdata[i] <= 0xff) { + jisdata[i] = utfdata[i]; + } else { + int glyph = 0; + j = 0; + do { + if (sjis_lookup[j * 2] == utfdata[i]) { + glyph = sjis_lookup[(j * 2) + 1]; + } + j++; + } while ((j < 6843) && (glyph == 0)); + if (glyph == 0) { + strcpy(symbol->errtxt, "560: Invalid character in input data"); + return ZINT_ERROR_INVALID_DATA; + } + jisdata[i] = glyph; } } } - est_binlen = getBinaryLength(40, mode, jisdata, length, gs1, symbol->eci, symbol->debug); + define_mode(mode, jisdata, length, gs1); + est_binlen = getBinaryLength(40, mode, jisdata, length, gs1, symbol->eci); ecc_level = LEVEL_L; max_cw = 2956; if ((symbol->option_1 >= 1) && (symbol->option_1 <= 4)) { switch (symbol->option_1) { - case 1: + case 1: ecc_level = LEVEL_L; + max_cw = 2956; break; case 2: ecc_level = LEVEL_M; max_cw = 2334; @@ -1618,9 +1509,6 @@ INTERNAL int qr_code(struct zint_symbol *symbol, const unsigned char source[], s break; } } - if (autosize != 40) { - est_binlen = getBinaryLength(autosize, mode, jisdata, length, gs1, symbol->eci, symbol->debug); - } // Now see if the optimised binary will fit in a smaller symbol. canShrink = 1; @@ -1629,7 +1517,7 @@ INTERNAL int qr_code(struct zint_symbol *symbol, const unsigned char source[], s if (autosize == 1) { canShrink = 0; } else { - est_binlen = getBinaryLength(autosize - 1, mode, jisdata, length, gs1, symbol->eci, symbol->debug); + est_binlen = getBinaryLength(autosize - 1, mode, jisdata, length, gs1, symbol->eci); switch (ecc_level) { case LEVEL_L: @@ -1659,7 +1547,7 @@ INTERNAL int qr_code(struct zint_symbol *symbol, const unsigned char source[], s autosize--; } else { // Data did not fit in the smaller symbol, revert to original size - est_binlen = getBinaryLength(autosize, mode, jisdata, length, gs1, symbol->eci, symbol->debug); + est_binlen = getBinaryLength(autosize, mode, jisdata, length, gs1, symbol->eci); } } } while (canShrink == 1); @@ -1673,7 +1561,7 @@ INTERNAL int qr_code(struct zint_symbol *symbol, const unsigned char source[], s */ if (symbol->option_2 > version) { version = symbol->option_2; - est_binlen = getBinaryLength(symbol->option_2, mode, jisdata, length, gs1, symbol->eci, symbol->debug); + est_binlen = getBinaryLength(symbol->option_2, mode, jisdata, length, gs1, symbol->eci); } if (symbol->option_2 < version) { @@ -1681,47 +1569,42 @@ INTERNAL int qr_code(struct zint_symbol *symbol, const unsigned char source[], s return ZINT_ERROR_TOO_LONG; } } - - /* Ensure maxium error correction capacity unless user-specified */ - if (symbol->option_1 == -1 || symbol->option_1 != ecc_level) { - if (est_binlen <= qr_data_codewords_M[version - 1] * 8) { - ecc_level = LEVEL_M; - } - if (est_binlen <= qr_data_codewords_Q[version - 1] * 8) { - ecc_level = LEVEL_Q; - } - if (est_binlen <= qr_data_codewords_H[version - 1] * 8) { - ecc_level = LEVEL_H; - } + + /* Ensure maxium error correction capacity */ + if (est_binlen <= qr_data_codewords_M[version - 1] * 8) { + ecc_level = LEVEL_M; + } + if (est_binlen <= qr_data_codewords_Q[version - 1] * 8) { + ecc_level = LEVEL_Q; + } + if (est_binlen <= qr_data_codewords_H[version - 1] * 8) { + ecc_level = LEVEL_H; } - target_codewords = qr_data_codewords_L[version - 1]; + target_binlen = qr_data_codewords_L[version - 1]; blocks = qr_blocks_L[version - 1]; switch (ecc_level) { - case LEVEL_M: target_codewords = qr_data_codewords_M[version - 1]; + case LEVEL_M: target_binlen = qr_data_codewords_M[version - 1]; blocks = qr_blocks_M[version - 1]; break; - case LEVEL_Q: target_codewords = qr_data_codewords_Q[version - 1]; + case LEVEL_Q: target_binlen = qr_data_codewords_Q[version - 1]; blocks = qr_blocks_Q[version - 1]; break; - case LEVEL_H: target_codewords = qr_data_codewords_H[version - 1]; + case LEVEL_H: target_binlen = qr_data_codewords_H[version - 1]; blocks = qr_blocks_H[version - 1]; break; } #ifndef _MSC_VER - unsigned char datastream[target_codewords + 1]; - unsigned char fullstream[qr_total_codewords[version - 1] + 1]; + int datastream[target_binlen + 1]; + int fullstream[qr_total_codewords[version - 1] + 1]; #else - datastream = (unsigned char *) _alloca(target_codewords + 1); - fullstream = (unsigned char *) _alloca(qr_total_codewords[version - 1] + 1); + datastream = (int *) _alloca((target_binlen + 1) * sizeof (int)); + fullstream = (int *) _alloca((qr_total_codewords[version - 1] + 1) * sizeof (int)); #endif - qr_binary(datastream, version, target_codewords, mode, jisdata, length, gs1, symbol->eci, est_binlen, symbol->debug); -#ifdef ZINT_TEST - if (symbol->debug & ZINT_DEBUG_TEST) debug_test_codeword_dump(symbol, datastream, target_codewords); -#endif - add_ecc(fullstream, datastream, version, target_codewords, blocks, symbol->debug); + qr_binary(datastream, version, target_binlen, mode, jisdata, length, gs1, symbol->eci, est_binlen, symbol->debug); + add_ecc(fullstream, datastream, version, target_binlen, blocks); size = qr_sizes[version - 1]; #ifndef _MSC_VER @@ -1737,7 +1620,7 @@ INTERNAL int qr_code(struct zint_symbol *symbol, const unsigned char source[], s } setup_grid(grid, size, version); - populate_grid(grid, size, size, fullstream, qr_total_codewords[version - 1]); + populate_grid(grid, size, fullstream, qr_total_codewords[version - 1]); if (version >= 7) { add_version_info(grid, size, version); @@ -1747,6 +1630,8 @@ INTERNAL int qr_code(struct zint_symbol *symbol, const unsigned char source[], s add_format_info(grid, size, ecc_level, bitmask); + + symbol->width = size; symbol->rows = size; @@ -1762,87 +1647,435 @@ INTERNAL int qr_code(struct zint_symbol *symbol, const unsigned char source[], s return 0; } -static void micro_qr_m1(struct zint_symbol *symbol, char binary_data[]) { - int i, j, latch; - int bits_total, bits_left; - int data_codewords, ecc_codewords; - unsigned char data_blocks[4], ecc_blocks[3]; +/* NOTE: From this point forward concerns Micro QR Code only */ - bits_total = 20; - latch = 0; +static int micro_qr_intermediate(char binary[], const int jisdata[], const char mode[], const size_t length, int *kanji_used, int *alphanum_used, int *byte_used,const int debug) { + /* Convert input data to an "intermediate stage" where data is binary encoded but + control information is not */ + int position = 0; + int i; + char buffer[2]; - /* Add terminator */ - bits_left = bits_total - (int)strlen(binary_data); - if (bits_left <= 3) { - for (i = 0; i < bits_left; i++) { - strcat(binary_data, "0"); - } - latch = 1; - } else { - strcat(binary_data, "000"); - } + strcpy(binary, ""); - if (latch == 0) { - /* Manage last (4-bit) block */ - bits_left = bits_total - (int)strlen(binary_data); - if (bits_left <= 4) { - for (i = 0; i < bits_left; i++) { - strcat(binary_data, "0"); - } - latch = 1; + if (debug) { + for (i = 0; i < length; i++) { + printf("%c", mode[i]); } + printf("\n"); } - if (latch == 0) { - /* Complete current byte */ - int remainder = 8 - (strlen(binary_data) % 8); - if (remainder == 8) { - remainder = 0; - } - for (i = 0; i < remainder; i++) { - strcat(binary_data, "0"); + do { + char data_block; + int short_data_block_length = 0; + if (strlen(binary) > 128) { + return ZINT_ERROR_TOO_LONG; } - /* Add padding */ - bits_left = bits_total - (int)strlen(binary_data); - if (bits_left > 4) { - remainder = (bits_left - 4) / 8; - for (i = 0; i < remainder; i++) { - strcat(binary_data, (i & 1) ? "00010001" : "11101100"); - } - } - bin_append(0, 4, binary_data); - } + data_block = mode[position]; + do { + short_data_block_length++; + } while (((short_data_block_length + position) < length) && (mode[position + short_data_block_length] == data_block)); - data_codewords = 3; - ecc_codewords = 2; + switch (data_block) { + case 'K': + /* Kanji mode */ + /* Mode indicator */ + strcat(binary, "K"); + *kanji_used = 1; - /* Copy data into codewords */ - for (i = 0; i < (data_codewords - 1); i++) { - data_blocks[i] = 0; - for (j = 0; j < 8; j++) { - if (binary_data[(i * 8) + j] == '1') { - data_blocks[i] += 0x80 >> j; - } - } - } - data_blocks[2] = 0; - for (j = 0; j < 4; j++) { - if (binary_data[16 + j] == '1') { - data_blocks[2] += 0x80 >> j; - } - } -#ifdef ZINT_TEST - if (symbol->debug & ZINT_DEBUG_TEST) debug_test_codeword_dump(symbol, data_blocks, data_codewords); -#else - (void)symbol; /* Unused */ -#endif + /* Character count indicator */ + buffer[0] = short_data_block_length; + buffer[1] = '\0'; + strcat(binary, buffer); - /* Calculate Reed-Solomon error codewords */ - rs_init_gf(0x11d); - rs_init_code(ecc_codewords, 0); - rs_encode(data_codewords, data_blocks, ecc_blocks); - rs_free(); + if (debug) { + printf("Kanji block (length %d)\n\t", short_data_block_length); + } + + /* Character representation */ + for (i = 0; i < short_data_block_length; i++) { + int jis = jisdata[position + i]; + int prod; + + if (jis >= 0x8140 && jis <= 0x9ffc) + jis -= 0x8140; + + else if (jis >= 0xe040 && jis <= 0xebbf) + jis -= 0xc140; + + prod = ((jis >> 8) * 0xc0) + (jis & 0xff); + + bin_append(prod, 13, binary); + + if (debug) { + printf("0x%4X ", prod); + } + + if (strlen(binary) > 128) { + return ZINT_ERROR_TOO_LONG; + } + } + + if (debug) { + printf("\n"); + } + + break; + case 'B': + /* Byte mode */ + /* Mode indicator */ + strcat(binary, "B"); + *byte_used = 1; + + /* Character count indicator */ + buffer[0] = short_data_block_length; + buffer[1] = '\0'; + strcat(binary, buffer); + + if (debug) { + printf("Byte block (length %d)\n\t", short_data_block_length); + } + + /* Character representation */ + for (i = 0; i < short_data_block_length; i++) { + int byte = jisdata[position + i]; + + bin_append(byte, 8, binary); + + if (debug) { + printf("0x%4X ", byte); + } + + if (strlen(binary) > 128) { + return ZINT_ERROR_TOO_LONG; + } + } + + if (debug) { + printf("\n"); + } + + break; + case 'A': + /* Alphanumeric mode */ + /* Mode indicator */ + strcat(binary, "A"); + *alphanum_used = 1; + + /* Character count indicator */ + buffer[0] = short_data_block_length; + buffer[1] = '\0'; + strcat(binary, buffer); + + if (debug) { + printf("Alpha block (length %d)\n\t", short_data_block_length); + } + + /* Character representation */ + i = 0; + while (i < short_data_block_length) { + int count; + int first = 0, prod; + + first = posn(RHODIUM, (char) jisdata[position + i]); + count = 1; + prod = first; + + if (i + 1 < short_data_block_length && mode[position + i + 1] == 'A') { + int second = posn(RHODIUM, (char) jisdata[position + i + 1]); + count = 2; + prod = (first * 45) + second; + } + + bin_append(prod, 1 + (5 * count), binary); + + if (debug) { + printf("0x%4X ", prod); + } + + if (strlen(binary) > 128) { + return ZINT_ERROR_TOO_LONG; + } + + i += 2; + }; + + if (debug) { + printf("\n"); + } + + break; + case 'N': + /* Numeric mode */ + /* Mode indicator */ + strcat(binary, "N"); + + /* Character count indicator */ + buffer[0] = short_data_block_length; + buffer[1] = '\0'; + strcat(binary, buffer); + + if (debug) { + printf("Number block (length %d)\n\t", short_data_block_length); + } + + /* Character representation */ + i = 0; + while (i < short_data_block_length) { + int count; + int first = 0, prod; + + first = posn(NEON, (char) jisdata[position + i]); + count = 1; + prod = first; + + if (i + 1 < short_data_block_length && mode[position + i + 1] == 'N') { + int second = posn(NEON, (char) jisdata[position + i + 1]); + count = 2; + prod = (prod * 10) + second; + } + + if (i + 2 < short_data_block_length && mode[position + i + 2] == 'N') { + int third = posn(NEON, (char) jisdata[position + i + 2]); + count = 3; + prod = (prod * 10) + third; + } + + bin_append(prod, 1 + (3 * count), binary); + + if (debug) { + printf("0x%4X (%d)", prod, prod); + } + + if (strlen(binary) > 128) { + return ZINT_ERROR_TOO_LONG; + } + + i += 3; + }; + + if (debug) { + printf("\n"); + } + + break; + } + + position += short_data_block_length; + } while (position < length - 1); + + return 0; +} + +static void get_bitlength(int count[],const char stream[]) { + size_t length; + int i; + + length = strlen(stream); + + for (i = 0; i < 4; i++) { + count[i] = 0; + } + + i = 0; + do { + if ((stream[i] == '0') || (stream[i] == '1')) { + count[0]++; + count[1]++; + count[2]++; + count[3]++; + i++; + } else { + switch (stream[i]) { + case 'K': + count[2] += 5; + count[3] += 7; + i += 2; + break; + case 'B': + count[2] += 6; + count[3] += 8; + i += 2; + break; + case 'A': + count[1] += 4; + count[2] += 6; + count[3] += 8; + i += 2; + break; + case 'N': + count[0] += 3; + count[1] += 5; + count[2] += 7; + count[3] += 9; + i += 2; + break; + } + } + } while (i < length); +} + +static void microqr_expand_binary(const char binary_stream[], char full_stream[],const int version) { + int i; + size_t length; + + length = strlen(binary_stream); + + i = 0; + do { + switch (binary_stream[i]) { + case '1': strcat(full_stream, "1"); + i++; + break; + case '0': strcat(full_stream, "0"); + i++; + break; + case 'N': + /* Numeric Mode */ + /* Mode indicator */ + switch (version) { + case 1: strcat(full_stream, "0"); + break; + case 2: strcat(full_stream, "00"); + break; + case 3: strcat(full_stream, "000"); + break; + } + + /* Character count indicator */ + bin_append(binary_stream[i + 1], 3 + version, full_stream); /* version = 0..3 */ + + i += 2; + break; + case 'A': + /* Alphanumeric Mode */ + /* Mode indicator */ + switch (version) { + case 1: strcat(full_stream, "1"); + break; + case 2: strcat(full_stream, "01"); + break; + case 3: strcat(full_stream, "001"); + break; + } + + /* Character count indicator */ + bin_append(binary_stream[i + 1], 2 + version, full_stream); /* version = 1..3 */ + + i += 2; + break; + case 'B': + /* Byte Mode */ + /* Mode indicator */ + switch (version) { + case 2: strcat(full_stream, "10"); + break; + case 3: strcat(full_stream, "010"); + break; + } + + /* Character count indicator */ + bin_append(binary_stream[i + 1], 2 + version, full_stream); /* version = 2..3 */ + + i += 2; + break; + case 'K': + /* Kanji Mode */ + /* Mode indicator */ + switch (version) { + case 2: strcat(full_stream, "11"); + break; + case 3: strcat(full_stream, "011"); + break; + } + + /* Character count indicator */ + bin_append(binary_stream[i + 1], 1 + version, full_stream); /* version = 2..3 */ + + i += 2; + break; + } + + } while (i < length); +} + +static void micro_qr_m1(char binary_data[]) { + int i, j, latch; + int bits_total, bits_left; + int data_codewords, ecc_codewords; + unsigned char data_blocks[4], ecc_blocks[3]; + + bits_total = 20; + latch = 0; + + /* Add terminator */ + bits_left = bits_total - (int)strlen(binary_data); + if (bits_left <= 3) { + for (i = 0; i < bits_left; i++) { + strcat(binary_data, "0"); + } + latch = 1; + } else { + strcat(binary_data, "000"); + } + + if (latch == 0) { + /* Manage last (4-bit) block */ + bits_left = bits_total - (int)strlen(binary_data); + if (bits_left <= 4) { + for (i = 0; i < bits_left; i++) { + strcat(binary_data, "0"); + } + latch = 1; + } + } + + if (latch == 0) { + /* Complete current byte */ + int remainder = 8 - (strlen(binary_data) % 8); + if (remainder == 8) { + remainder = 0; + } + for (i = 0; i < remainder; i++) { + strcat(binary_data, "0"); + } + + /* Add padding */ + bits_left = bits_total - (int)strlen(binary_data); + if (bits_left > 4) { + remainder = (bits_left - 4) / 8; + for (i = 0; i < remainder; i++) { + strcat(binary_data, (i & 1) ? "00010001" : "11101100"); + } + } + bin_append(0, 4, binary_data); + } + + data_codewords = 3; + ecc_codewords = 2; + + /* Copy data into codewords */ + for (i = 0; i < (data_codewords - 1); i++) { + data_blocks[i] = 0; + for (j = 0; j < 8; j++) { + if (binary_data[(i * 8) + j] == '1') { + data_blocks[i] += 0x80 >> j; + } + } + } + data_blocks[2] = 0; + for (j = 0; j < 4; j++) { + if (binary_data[16 + j] == '1') { + data_blocks[2] += 0x80 >> j; + } + } + + /* Calculate Reed-Solomon error codewords */ + rs_init_gf(0x11d); + rs_init_code(ecc_codewords, 0); + rs_encode(data_codewords, data_blocks, ecc_blocks); + rs_free(); /* Add Reed-Solomon codewords to binary data */ for (i = 0; i < ecc_codewords; i++) { @@ -1850,7 +2083,7 @@ static void micro_qr_m1(struct zint_symbol *symbol, char binary_data[]) { } } -static void micro_qr_m2(struct zint_symbol *symbol, char binary_data[], const int ecc_mode) { +static void micro_qr_m2(char binary_data[],const int ecc_mode) { int i, j, latch; int bits_total=0, bits_left; int data_codewords=0, ecc_codewords=0; @@ -1915,11 +2148,6 @@ static void micro_qr_m2(struct zint_symbol *symbol, char binary_data[], const in } } } -#ifdef ZINT_TEST - if (symbol->debug & ZINT_DEBUG_TEST) debug_test_codeword_dump(symbol, data_blocks, data_codewords); -#else - (void)symbol; /* Unused */ -#endif /* Calculate Reed-Solomon error codewords */ rs_init_gf(0x11d); @@ -1935,7 +2163,7 @@ static void micro_qr_m2(struct zint_symbol *symbol, char binary_data[], const in return; } -static void micro_qr_m3(struct zint_symbol *symbol, char binary_data[], const int ecc_mode) { +static void micro_qr_m3(char binary_data[],const int ecc_mode) { int i, j, latch; int bits_total=0, bits_left; int data_codewords=0, ecc_codewords=0; @@ -2032,11 +2260,6 @@ static void micro_qr_m3(struct zint_symbol *symbol, char binary_data[], const in } } } -#ifdef ZINT_TEST - if (symbol->debug & ZINT_DEBUG_TEST) debug_test_codeword_dump(symbol, data_blocks, data_codewords); -#else - (void)symbol; /* Unused */ -#endif /* Calculate Reed-Solomon error codewords */ rs_init_gf(0x11d); @@ -2052,7 +2275,7 @@ static void micro_qr_m3(struct zint_symbol *symbol, char binary_data[], const in return; } -static void micro_qr_m4(struct zint_symbol *symbol, char binary_data[], const int ecc_mode) { +static void micro_qr_m4(char binary_data[],const int ecc_mode) { int i, j, latch; int bits_total=0, bits_left; int data_codewords=0, ecc_codewords=0; @@ -2124,11 +2347,6 @@ static void micro_qr_m4(struct zint_symbol *symbol, char binary_data[], const in } } } -#ifdef ZINT_TEST - if (symbol->debug & ZINT_DEBUG_TEST) debug_test_codeword_dump(symbol, data_blocks, data_codewords); -#else - (void)symbol; /* Unused */ -#endif /* Calculate Reed-Solomon error codewords */ rs_init_gf(0x11d); @@ -2180,8 +2398,8 @@ static void micro_setup_grid(unsigned char* grid,const int size) { static void micro_populate_grid(unsigned char* grid,const int size,const char full_stream[]) { int direction = 1; /* up */ int row = 0; /* right hand side */ - size_t n, i; - int y; + size_t n; + int i, y; n = strlen(full_stream); y = size - 1; @@ -2345,18 +2563,20 @@ static int micro_apply_bitmask(unsigned char *grid,const int size) { return best_pattern; } -INTERNAL int microqr(struct zint_symbol *symbol, const unsigned char source[], size_t length) { - size_t i, size, j; +int microqr(struct zint_symbol *symbol, const unsigned char source[], size_t length) { + size_t i; + int j, size; + char binary_stream[200]; char full_stream[200]; - int full_multibyte; + int utfdata[40]; - unsigned int jisdata[40]; + int jisdata[40]; char mode[40]; - int alpha_used = 0, byte_or_kanji_used = 0; + int error_number, kanji_used = 0, alphanum_used = 0, byte_used = 0; int version_valid[4]; int binary_count[4]; int ecc_level, autoversion, version; - int bitmask, format, format_full; + int n_count, a_count, bitmask, format, format_full; #ifdef _MSC_VER unsigned char* grid; #endif @@ -2386,61 +2606,90 @@ INTERNAL int microqr(struct zint_symbol *symbol, const unsigned char source[], s ecc_level = symbol->option_1; } - full_multibyte = symbol->option_3 == ZINT_FULL_MULTIBYTE; /* If set use Kanji mode in DATA_MODE or for single-byte Latin */ + for (i = 0; i < 4; i++) { + version_valid[i] = 1; + } - if ((symbol->input_mode & 0x07) == DATA_MODE) { - sjis_cpy(source, &length, jisdata, full_multibyte); + if (symbol->input_mode == DATA_MODE) { + for (i = 0; i < length; i++) { + jisdata[i] = (int) source[i]; + } } else { - /* Try ISO 8859-1 conversion first */ - int error_number = sjis_utf8tosb(3, source, &length, jisdata, full_multibyte); + /* Convert Unicode input to Shift-JIS */ + error_number = utf8toutf16(symbol, source, utfdata, &length); if (error_number != 0) { - /* Try Shift-JIS */ - error_number = sjis_utf8tomb(symbol, source, &length, jisdata); - if (error_number != 0) { - return error_number; - } + return error_number; } - } - /* Determine if alpha (excluding numerics), byte or kanji used */ - for (i = 0; i < length && (alpha_used == 0 || byte_or_kanji_used == 0); i++) { - if (jisdata[i] < '0' || jisdata[i] > '9') { - if (is_alpha(jisdata[i], 0 /*gs1*/)) { - alpha_used = 1; + for (i = 0; i < length; i++) { + if (utfdata[i] <= 0xff) { + jisdata[i] = utfdata[i]; } else { - byte_or_kanji_used = 1; + int glyph = 0; + j = 0; + do { + if (sjis_lookup[j * 2] == utfdata[i]) { + glyph = sjis_lookup[(j * 2) + 1]; + } + j++; + } while ((j < 6843) && (glyph == 0)); + if (glyph == 0) { + strcpy(symbol->errtxt, "563: Invalid character in input data"); + return ZINT_ERROR_INVALID_DATA; + } + jisdata[i] = glyph; } } } - for (i = 0; i < 4; i++) { - version_valid[i] = 1; + define_mode(mode, jisdata, length, 0); + + n_count = 0; + a_count = 0; + for (i = 0; i < length; i++) { + if ((jisdata[i] >= '0') && (jisdata[i] <= '9')) { + n_count++; + } + if (in_alpha(jisdata[i])) { + a_count++; + } } - /* Eliminate possible versions depending on type of content */ - if (byte_or_kanji_used) { - version_valid[0] = 0; - version_valid[1] = 0; - } else if (alpha_used) { - version_valid[0] = 0; + if (a_count == length) { + /* All data can be encoded in Alphanumeric mode */ + for (i = 0; i < length; i++) { + mode[i] = 'A'; + } } - /* Eliminate possible versions depending on error correction level specified */ - if (ecc_level == LEVEL_Q) { + if (n_count == length) { + /* All data can be encoded in Numeric mode */ + for (i = 0; i < length; i++) { + mode[i] = 'N'; + } + } + + error_number = micro_qr_intermediate(binary_stream, jisdata, mode, length, &kanji_used, &alphanum_used, &byte_used, symbol->debug); + if (error_number != 0) { + strcpy(symbol->errtxt, "564: Input data too long"); + return error_number; + } + + get_bitlength(binary_count, binary_stream); + + /* Eliminate possivle versions depending on type of content */ + if (byte_used) { version_valid[0] = 0; version_valid[1] = 0; - version_valid[2] = 0; - } else if (ecc_level == LEVEL_M) { + } + + if (alphanum_used) { version_valid[0] = 0; } - /* Determine length of binary data */ - for (i = 0; i < 4; i++) { - if (version_valid[i]) { - binary_count[i] = getBinaryLength(MICROQR_VERSION + i, mode, jisdata, length, 0 /*gs1*/, 0 /*eci*/, symbol->debug); - } else { - binary_count[i] = 128 + 1; - } + if (kanji_used) { + version_valid[0] = 0; + version_valid[1] = 0; } /* Eliminate possible versions depending on length of binary data */ @@ -2458,13 +2707,19 @@ INTERNAL int microqr(struct zint_symbol *symbol, const unsigned char source[], s return ZINT_ERROR_TOO_LONG; } - /* Eliminate possible versions depending on binary length and error correction level specified */ + /* Eliminate possible versions depending on error correction level specified */ if (ecc_level == LEVEL_Q) { + version_valid[0] = 0; + version_valid[1] = 0; + version_valid[2] = 0; if (binary_count[3] > 80) { strcpy(symbol->errtxt, "567: Input data too long"); return ZINT_ERROR_TOO_LONG; } - } else if (ecc_level == LEVEL_M) { + } + + if (ecc_level == LEVEL_M) { + version_valid[0] = 0; if (binary_count[1] > 32) { version_valid[1] = 0; } @@ -2499,38 +2754,39 @@ INTERNAL int microqr(struct zint_symbol *symbol, const unsigned char source[], s } } - /* If there is enough unused space then increase the error correction level, unless user-specified */ - if (symbol->option_1 == -1 || symbol->option_1 != ecc_level) { - if (version == 3) { - if (binary_count[3] <= 112) { - ecc_level = LEVEL_M; - } - if (binary_count[3] <= 80) { - ecc_level = LEVEL_Q; - } - } else if (version == 2) { - if (binary_count[2] <= 68) { - ecc_level = LEVEL_M; - } - } else if (version == 1) { - if (binary_count[1] <= 32) { - ecc_level = LEVEL_M; - } + /* If there is enough unused space then increase the error correction level */ + if (version == 3) { + if (binary_count[3] <= 112) { + ecc_level = LEVEL_M; + } + if (binary_count[3] <= 80) { + ecc_level = LEVEL_Q; } } - qr_define_mode(mode, jisdata, length, 0 /*gs1*/, MICROQR_VERSION + version, symbol->debug); + if (version == 2) { + if (binary_count[2] <= 68) { + ecc_level = LEVEL_M; + } + } - qr_binary((unsigned char*)full_stream, MICROQR_VERSION + version, 0 /*target_codewords*/, mode, jisdata, length, 0 /*gs1*/, 0 /*eci*/, binary_count[version], symbol->debug); + if (version == 1) { + if (binary_count[1] <= 32) { + ecc_level = LEVEL_M; + } + } + + strcpy(full_stream, ""); + microqr_expand_binary(binary_stream, full_stream, version); switch (version) { - case 0: micro_qr_m1(symbol, full_stream); + case 0: micro_qr_m1(full_stream); break; - case 1: micro_qr_m2(symbol, full_stream, ecc_level); + case 1: micro_qr_m2(full_stream, ecc_level); break; - case 2: micro_qr_m3(symbol, full_stream, ecc_level); + case 2: micro_qr_m3(full_stream, ecc_level); break; - case 3: micro_qr_m4(symbol, full_stream, ecc_level); + case 3: micro_qr_m4(full_stream, ecc_level); break; } @@ -2643,19 +2899,19 @@ INTERNAL int microqr(struct zint_symbol *symbol, const unsigned char source[], s } /* For UPNQR the symbol size and error correction capacity is fixed */ -INTERNAL int upnqr(struct zint_symbol *symbol, const unsigned char source[], size_t length) { +int upnqr(struct zint_symbol *symbol, const unsigned char source[], size_t length) { int i, j, est_binlen; - int ecc_level, version, target_codewords, blocks, size; + int ecc_level, version, target_binlen, blocks, size; int bitmask, error_number; #ifndef _MSC_VER - unsigned int jisdata[length + 1]; + int jisdata[length + 1]; char mode[length + 1]; #else - unsigned char* datastream; - unsigned char* fullstream; + int* datastream; + int* fullstream; unsigned char* grid; - unsigned int* jisdata = (unsigned int *) _alloca((length + 1) * sizeof (unsigned int)); + int* jisdata = (int *) _alloca((length + 1) * sizeof (int)); char* mode = (char *) _alloca(length + 1); #endif @@ -2665,13 +2921,11 @@ INTERNAL int upnqr(struct zint_symbol *symbol, const unsigned char source[], siz unsigned char* preprocessed = (unsigned char*) _alloca(length + 1); #endif - symbol->eci = 4; /* Set before any processing */ - - switch (symbol->input_mode & 0x07) { + switch(symbol->input_mode) { case DATA_MODE: /* Input is already in ISO-8859-2 format */ - for (i = 0; i < (int) length; i++) { - jisdata[i] = source[i]; + for (i = 0; i < length; i++) { + jisdata[i] = (int) source[i]; mode[i] = 'B'; } break; @@ -2685,14 +2939,15 @@ INTERNAL int upnqr(struct zint_symbol *symbol, const unsigned char source[], siz strcpy(symbol->errtxt, "572: Invalid characters in input data"); return error_number; } - for (i = 0; i < (int) length; i++) { - jisdata[i] = preprocessed[i]; + for (i = 0; i < length; i++) { + jisdata[i] = (int) preprocessed[i]; mode[i] = 'B'; } break; } - est_binlen = getBinaryLength(15, mode, jisdata, length, 0, symbol->eci, symbol->debug); + symbol->eci = 4; + est_binlen = getBinaryLength(15, mode, jisdata, length, 0, symbol->eci); ecc_level = LEVEL_M; @@ -2703,21 +2958,19 @@ INTERNAL int upnqr(struct zint_symbol *symbol, const unsigned char source[], siz version = 15; // 77 x 77 - target_codewords = qr_data_codewords_M[version - 1]; + target_binlen = qr_data_codewords_M[version - 1]; blocks = qr_blocks_M[version - 1]; + #ifndef _MSC_VER - unsigned char datastream[target_codewords + 1]; - unsigned char fullstream[qr_total_codewords[version - 1] + 1]; + int datastream[target_binlen + 1]; + int fullstream[qr_total_codewords[version - 1] + 1]; #else - datastream = (unsigned char *) _alloca(target_codewords + 1); - fullstream = (unsigned char *) _alloca(qr_total_codewords[version - 1] + 1); + datastream = (int *) _alloca((target_binlen + 1) * sizeof (int)); + fullstream = (int *) _alloca((qr_total_codewords[version - 1] + 1) * sizeof (int)); #endif - qr_binary(datastream, version, target_codewords, mode, jisdata, length, 0, symbol->eci, est_binlen, symbol->debug); -#ifdef ZINT_TEST - if (symbol->debug & ZINT_DEBUG_TEST) debug_test_codeword_dump(symbol, datastream, target_codewords); -#endif - add_ecc(fullstream, datastream, version, target_codewords, blocks, symbol->debug); + qr_binary(datastream, version, target_binlen, mode, jisdata, length, 0, symbol->eci, est_binlen, symbol->debug); + add_ecc(fullstream, datastream, version, target_binlen, blocks); size = qr_sizes[version - 1]; #ifndef _MSC_VER @@ -2733,7 +2986,7 @@ INTERNAL int upnqr(struct zint_symbol *symbol, const unsigned char source[], siz } setup_grid(grid, size, version); - populate_grid(grid, size, size, fullstream, qr_total_codewords[version - 1]); + populate_grid(grid, size, fullstream, qr_total_codewords[version - 1]); add_version_info(grid, size, version); @@ -2756,352 +3009,4 @@ INTERNAL int upnqr(struct zint_symbol *symbol, const unsigned char source[], siz return 0; } -static void setup_rmqr_grid(unsigned char* grid, const int h_size, const int v_size) { - int i, j; - char alignment[] = {0x1F, 0x11, 0x15, 0x11, 0x1F}; - int h_version, finder_position; - - /* Add timing patterns - top and bottom */ - for (i = 0; i < h_size; i++) { - if (i % 2) { - grid[i] = 0x20; - grid[((v_size - 1) * h_size) + i] = 0x20; - } else { - grid[i] = 0x21; - grid[((v_size - 1) * h_size) + i] = 0x21; - } - } - - /* Add timing patterns - left and right */ - for (i = 0; i < v_size; i++) { - if (i % 2) { - grid[i * h_size] = 0x20; - grid[(i * h_size) + (h_size - 1)] = 0x20; - } else { - grid[i * h_size] = 0x21; - grid[(i * h_size) + (h_size - 1)] = 0x21; - } - } - - /* Add finder pattern */ - place_finder(grid, h_size, 0, 0); // This works because finder is always top left - - /* Add finder sub-pattern to bottom right */ - for (i = 0; i < 5; i++) { - for (j = 0; j < 5; j++) { - if (alignment[j] & 0x10 >> i) { - grid[((v_size - 5) * h_size) + (h_size * i) + (h_size - 5) + j] = 0x11; - } else { - grid[((v_size - 5) * h_size) + (h_size * i) + (h_size - 5) + j] = 0x10; - } - } - } - - /* Add corner finder pattern - bottom left */ - grid[(v_size - 2) * h_size] = 0x11; - grid[((v_size - 2) * h_size) + 1] = 0x10; - grid[((v_size - 1) * h_size) + 1] = 0x11; - - /* Add corner finder pattern - top right */ - grid[h_size - 2] = 0x11; - grid[(h_size * 2) - 2] = 0x10; - grid[(h_size * 2) - 1] = 0x11; - - /* Add seperator */ - for (i = 0; i < 7; i++) { - grid[(i * h_size) + 7] = 0x20; - } - if (v_size > 7) { - // Note for v_size = 9 this overrides the bottom right corner finder pattern - for(i = 0; i < 8; i++) { - grid[(7 * h_size) + i] = 0x20; - } - } - - /* Add alignment patterns */ - if (h_size > 27) { - for(i = 0; i < 5; i++) { - if (h_size == rmqr_width[i]) { - h_version = i; - } - } - - for(i = 0; i < 4; i++) { - finder_position = rmqr_table_d1[(h_version * 4) + i]; - - if (finder_position != 0) { - for (j = 0; j < v_size; j++) { - if (j % 2) { - grid[(j * h_size) + finder_position] = 0x10; - } else { - grid[(j * h_size) + finder_position] = 0x11; - } - } - - // Top square - grid[h_size + finder_position - 1] = 0x11; - grid[(h_size * 2) + finder_position - 1] = 0x11; - grid[h_size + finder_position + 1] = 0x11; - grid[(h_size * 2) + finder_position + 1] = 0x11; - - // Bottom square - grid[(h_size * (v_size - 3)) + finder_position - 1] = 0x11; - grid[(h_size * (v_size - 2)) + finder_position - 1] = 0x11; - grid[(h_size * (v_size - 3)) + finder_position + 1] = 0x11; - grid[(h_size * (v_size - 2)) + finder_position + 1] = 0x11; - } - } - } - - /* Reserve space for format information */ - for (i = 0; i < 5; i++) { - for (j = 0; j < 3; j++) { - grid[(h_size * (i + 1)) + j + 8] = 0x20; - grid[(h_size * (v_size - 6)) + (h_size * i) + j + (h_size - 8)] = 0x20; - } - } - grid[(h_size * 1) + 11] = 0x20; - grid[(h_size * 2) + 11] = 0x20; - grid[(h_size * 3) + 11] = 0x20; - grid[(h_size * (v_size - 6)) + (h_size - 5)] = 0x20; - grid[(h_size * (v_size - 6)) + (h_size - 4)] = 0x20; - grid[(h_size * (v_size - 6)) + (h_size - 3)] = 0x20; -} - -/* rMQR according to 2018 draft standard */ -INTERNAL int rmqr(struct zint_symbol *symbol, const unsigned char source[], size_t length) { - int i, j, est_binlen; - int ecc_level, autosize, version, max_cw, target_codewords, blocks, h_size, v_size; - int gs1; - int full_multibyte; - int footprint, best_footprint, format_data; - unsigned int left_format_info, right_format_info; - -#ifndef _MSC_VER - unsigned int jisdata[length + 1]; - char mode[length + 1]; -#else - unsigned char* datastream; - unsigned char* fullstream; - unsigned char* grid; - unsigned int* jisdata = (unsigned int *) _alloca((length + 1) * sizeof (unsigned int)); - char* mode = (char *) _alloca(length + 1); -#endif - - gs1 = ((symbol->input_mode & 0x07) == GS1_MODE); - full_multibyte = symbol->option_3 == ZINT_FULL_MULTIBYTE; /* If set use Kanji mode in DATA_MODE or for single-byte Latin */ - - if ((symbol->input_mode & 0x07) == DATA_MODE) { - sjis_cpy(source, &length, jisdata, full_multibyte); - } else { - /* Try ISO 8859-1 conversion first */ - int error_number = sjis_utf8tosb(3, source, &length, jisdata, full_multibyte); - if (error_number != 0) { - /* Try Shift-JIS */ - error_number = sjis_utf8tomb(symbol, source, &length, jisdata); - if (error_number != 0) { - return error_number; - } - } - } - - est_binlen = getBinaryLength(RMQR_VERSION + 31, mode, jisdata, length, gs1, 0 /*eci*/, symbol->debug); - - ecc_level = LEVEL_M; - max_cw = 152; - if (symbol->option_1 == 1) { - strcpy(symbol->errtxt, "576: Error correction level L not available in rMQR"); - return ZINT_ERROR_INVALID_OPTION; - } - - if (symbol->option_1 == 3) { - strcpy(symbol->errtxt, "577: Error correction level Q not available in rMQR"); - return ZINT_ERROR_INVALID_OPTION; - } - - if (symbol->option_1 == 4) { - ecc_level = LEVEL_H; - max_cw = 76; - } - - if (est_binlen > (8 * max_cw)) { - strcpy(symbol->errtxt, "578: Input too long for selected error correction level"); - return ZINT_ERROR_TOO_LONG; - } - - if ((symbol->option_2 < 0) || (symbol->option_2 > 38)) { - strcpy(symbol->errtxt, "579: Invalid rMQR symbol size"); - return ZINT_ERROR_INVALID_OPTION; - } - - version = 31; // Set default to keep compiler happy - - if (symbol->option_2 == 0) { - // Automatic symbol size - autosize = 31; - best_footprint = rmqr_height[31] * rmqr_width[31]; - for (version = 30; version >= 0; version--) { - est_binlen = getBinaryLength(RMQR_VERSION + version, mode, jisdata, length, gs1, 0 /*eci*/, symbol->debug); - footprint = rmqr_height[version] * rmqr_width[version]; - if (ecc_level == LEVEL_M) { - if (8 * rmqr_data_codewords_M[version] >= est_binlen) { - if (footprint < best_footprint) { - autosize = version; - best_footprint = footprint; - } - } - } else { - if (8 * rmqr_data_codewords_H[version] >= est_binlen) { - if (footprint < best_footprint) { - autosize = version; - best_footprint = footprint; - } - } - } - } - version = autosize; - est_binlen = getBinaryLength(RMQR_VERSION + version, mode, jisdata, length, gs1, 0 /*eci*/, symbol->debug); - } - - if ((symbol->option_2 >= 1) && (symbol->option_2 <= 32)) { - // User specified symbol size - version = symbol->option_2 - 1; - est_binlen = getBinaryLength(RMQR_VERSION + version, mode, jisdata, length, gs1, 0 /*eci*/, symbol->debug); - } - - if (symbol->option_2 >= 33) { - // User has specified symbol height only - version = rmqr_fixed_height_upper_bound[symbol->option_2 - 32]; - for(i = version - 1; i > rmqr_fixed_height_upper_bound[symbol->option_2 - 33]; i--) { - est_binlen = getBinaryLength(RMQR_VERSION + i, mode, jisdata, length, gs1, 0 /*eci*/, symbol->debug); - if (ecc_level == LEVEL_M) { - if (8 * rmqr_data_codewords_M[i] >= est_binlen) { - version = i; - } - } else { - if (8 * rmqr_data_codewords_H[i] >= est_binlen) { - version = i; - } - } - } - est_binlen = getBinaryLength(RMQR_VERSION + version, mode, jisdata, length, gs1, 0 /*eci*/, symbol->debug); - } - - if (symbol->option_1 == -1) { - // Detect if there is enough free space to increase ECC level - if (est_binlen < (rmqr_data_codewords_H[version] * 8)) { - ecc_level = LEVEL_H; - } - } - - if (ecc_level == LEVEL_M) { - target_codewords = rmqr_data_codewords_M[version]; - blocks = rmqr_blocks_M[version]; - } else { - target_codewords = rmqr_data_codewords_H[version]; - blocks = rmqr_blocks_H[version]; - } - if (est_binlen > (target_codewords * 8)) { - // User has selected a symbol too small for the data - strcpy(symbol->errtxt, "580: Input too long for selected symbol size"); - return ZINT_ERROR_TOO_LONG; - } - - if (symbol->debug & ZINT_DEBUG_PRINT) { - printf("Minimum codewords = %d\n", est_binlen / 8); - printf("Selected version: %d = R%dx%d-", (version + 1), rmqr_height[version], rmqr_width[version]); - if (ecc_level == LEVEL_M) { - printf("M\n"); - } else { - printf("H\n"); - } - printf("Number of data codewords in symbol = %d\n", target_codewords); - printf("Number of ECC blocks = %d\n", blocks); - } - -#ifndef _MSC_VER - unsigned char datastream[target_codewords + 1]; - unsigned char fullstream[rmqr_total_codewords[version] + 1]; -#else - datastream = (unsigned char *) _alloca((target_codewords + 1) * sizeof (unsigned char)); - fullstream = (unsigned char *) _alloca((rmqr_total_codewords[version] + 1) * sizeof (unsigned char)); -#endif - - qr_binary(datastream, RMQR_VERSION + version, target_codewords, mode, jisdata, length, gs1, 0 /*eci*/, est_binlen, symbol->debug); -#ifdef ZINT_TEST - if (symbol->debug & ZINT_DEBUG_TEST) debug_test_codeword_dump(symbol, datastream, target_codewords); -#endif - add_ecc(fullstream, datastream, RMQR_VERSION + version, target_codewords, blocks, symbol->debug); - - h_size = rmqr_width[version]; - v_size = rmqr_height[version]; - -#ifndef _MSC_VER - unsigned char grid[h_size * v_size]; -#else - grid = (unsigned char *) _alloca((h_size * v_size) * sizeof (unsigned char)); -#endif - - for (i = 0; i < v_size; i++) { - for (j = 0; j < h_size; j++) { - grid[(i * h_size) + j] = 0; - } - } - - setup_rmqr_grid(grid, h_size, v_size); - populate_grid(grid, h_size, v_size, fullstream, rmqr_total_codewords[version]); - - /* apply bitmask */ - for (i = 0; i < v_size; i++) { - for (j = 0; j < h_size; j++) { - if ((grid[(i * h_size) + j] & 0xf0) == 0) { - // This is a data module - if (((i / 2) + (j / 3)) % 2 == 0) { // < This is the data mask from section 7.8.2 - // This module needs to be changed - if (grid[(i * h_size) + j] == 0x01) { - grid[(i * h_size) + j] = 0x00; - } else { - grid[(i * h_size) + j] = 0x01; - } - } - } - } - } - - /* add format information */ - format_data = version; - if (ecc_level == LEVEL_H) { - format_data += 32; - } - left_format_info = rmqr_format_info_left[format_data]; - right_format_info = rmqr_format_info_right[format_data]; - - for (i = 0; i < 5; i++) { - for (j = 0; j < 3; j++) { - grid[(h_size * (i + 1)) + j + 8] = (left_format_info >> ((j * 5) + i)) & 0x01; - grid[(h_size * (v_size - 6)) + (h_size * i) + j + (h_size - 8)] = (right_format_info >> ((j * 5) + i)) & 0x01; - } - } - grid[(h_size * 1) + 11] = (left_format_info >> 15) & 0x01; - grid[(h_size * 2) + 11] = (left_format_info >> 16) & 0x01; - grid[(h_size * 3) + 11] = (left_format_info >> 17) & 0x01; - grid[(h_size * (v_size - 6)) + (h_size - 5)] = (right_format_info >> 15) & 0x01; - grid[(h_size * (v_size - 6)) + (h_size - 4)] = (right_format_info >> 16) & 0x01; - grid[(h_size * (v_size - 6)) + (h_size - 3)] = (right_format_info >> 17) & 0x01; - - - symbol->width = h_size; - symbol->rows = v_size; - - for (i = 0; i < v_size; i++) { - for (j = 0; j < h_size; j++) { - if (grid[(i * h_size) + j] & 0x01) { - set_module(symbol, i, j); - } - } - symbol->row_height[i] = 1; - } - - return 0; -} diff --git a/backend/qr.h b/backend/qr.h index b19ded6..c5a23c9 100644 --- a/backend/qr.h +++ b/backend/qr.h @@ -1,7 +1,8 @@ -/* qr.h Data for QR Code, Micro QR Code and rMQR +/* qr.h Data for QR Code */ +/* libzint - the open source barcode library - Copyright (C) 2008-2019 Robin Stuart + Copyright (C) 2008-2017 Robin Stuart Copyright (C) 2006 Kentaro Fukuchi Redistribution and use in source and binary forms, with or without @@ -30,16 +31,13 @@ SUCH DAMAGE. */ -#define LEVEL_L 1 -#define LEVEL_M 2 -#define LEVEL_Q 3 -#define LEVEL_H 4 +#define LEVEL_L 1 +#define LEVEL_M 2 +#define LEVEL_Q 3 +#define LEVEL_H 4 #define RHODIUM "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:" -#define RMQR_VERSION 100 -#define MICROQR_VERSION 200 - /* From ISO/IEC 18004:2006 Table 7 */ static const unsigned short int qr_data_codewords_L[] = { 19, 34, 55, 80, 108, 136, 156, 194, 232, 274, 324, 370, 428, 461, 523, 589, 647, @@ -71,92 +69,6 @@ static const unsigned short int qr_total_codewords[] = { 2185, 2323, 2465, 2611, 2761, 2876, 3034, 3196, 3362, 3532, 3706 }; -static const unsigned short int rmqr_height[] = { - 7, 7, 7, 7, 7, - 9, 9, 9, 9, 9, - 11, 11, 11, 11, 11, 11, - 13, 13, 13, 13, 13, 13, - 15, 15, 15, 15, 15, - 17, 17, 17, 17, 17 -}; - -static const unsigned short int rmqr_width[] = { - 43, 59, 77, 99, 139, - 43, 59, 77, 99, 139, - 27, 43, 59, 77, 99, 139, - 27, 43, 59, 77, 99, 139, - 43, 59, 77, 99, 139, - 43, 59, 77, 99, 139 -}; - -static const unsigned short int rmqr_data_codewords_M[] = { - 6, 12, 20, 28, 44, // R7x - 12, 21, 31, 42, 63, // R9x - 7, 19, 31, 43, 57, 84, // R11x - 12, 27, 38, 53, 73, 106, // R13x - 33, 48, 67, 88, 127, // R15x - 39, 56, 78, 100, 152 // R17x -}; - -static const unsigned short int rmqr_data_codewords_H[] = { - 3, 7, 10, 14, 24, // R7x - 7, 11, 17, 22, 33, // R9x - 5, 11, 15, 23, 29, 42, // R11x - 7, 13, 20, 29, 35, 54, // R13x - 15, 26, 31, 48, 69, // R15x - 21, 28, 38, 56, 76 // R17x -}; - -static const short int rmqr_fixed_height_upper_bound[] = { - -1, 4, 9, 15, 21, 26, 31 -}; - -static const unsigned short int rmqr_total_codewords[] = { - 13, 21, 32, 44, 68, // R7x - 21, 33, 49, 66, 99, // R9x - 15, 31, 47, 67, 89, 132, // R11x - 21, 41, 60, 85, 113, 166, // R13x - 51, 74, 103, 136, 199, // R15x - 61, 88, 122, 160, 232 // R17x -}; - - -static const unsigned short int rmqr_numeric_cci[] = { - 4, 5, 6, 7, 7, - 5, 6, 7, 7, 8, - 5, 6, 7, 7, 8, 8, - 5, 7, 7, 8, 8, 8, - 7, 7, 8, 8, 9, - 7, 8, 8, 8, 9 -}; - -static const unsigned short int rmqr_alphanum_cci[] = { - 4, 5, 5, 6, 6, - 5, 5, 6, 6, 7, - 4, 5, 6, 6, 7, 7, - 5, 6, 6, 7, 7, 8, - 6, 7, 7, 7, 8, - 6, 7, 7, 8, 8 -}; - -static const unsigned short int rmqr_byte_cci[] = { - 3, 4, 5, 5, 6, - 4, 5, 5, 6, 6, - 3, 5, 5, 6, 6, 7, - 4, 5, 6, 6, 7, 7, - 6, 6, 7, 7, 7, - 6, 6, 7, 7, 8 -}; - -static const unsigned short int rmqr_kanji_cci[] = { - 2, 3, 4, 5, 5, - 3, 4, 5, 5, 6, - 2, 4, 5, 5, 6, 6, - 3, 5, 5, 6, 6, 7, - 5, 5, 6, 6, 7, - 5, 6, 6, 6, 7 -}; - static const char qr_blocks_L[] = { 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25 @@ -177,24 +89,6 @@ static const char qr_blocks_H[] = { 32, 35, 37, 40, 42, 45, 48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81 }; -static const char rmqr_blocks_M[] = { - 1, 1, 1, 1, 1, // R7x - 1, 1, 1, 1, 2, // R9x - 1, 1, 1, 1, 2, 2, // R11x - 1, 1, 1, 2, 2, 3, // R13x - 1, 1, 2, 2, 3, // R15x - 1, 2, 2, 3, 4 // R17x -}; - -static const char rmqr_blocks_H[] = { - 1, 1, 1, 1, 2, // R7x - 1, 1, 2, 2, 3, // R9x - 1, 1, 2, 2, 2, 3, // R11x - 1, 1, 2, 2, 3, 4, // R13x - 2, 2, 3, 4, 5, // R15x - 2, 2, 3, 4, 6 // R17x -}; - static const unsigned short int qr_sizes[] = { 21, 25, 29, 33, 37, 41, 45, 49, 53, 57, 61, 65, 69, 73, 77, 81, 85, 89, 93, 97, 101, 105, 109, 113, 117, 121, 125, 129, 133, 137, 141, 145, 149, 153, 157, 161, 165, 169, 173, 177 @@ -208,7 +102,6 @@ static const char qr_align_loopsize[] = { 0, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7 }; -// Table E1 - Row/column coordinates of center module of alignment patterns static const unsigned short int qr_table_e1[] = { 6, 18, 0, 0, 0, 0, 0, 6, 22, 0, 0, 0, 0, 0, @@ -251,15 +144,6 @@ static const unsigned short int qr_table_e1[] = { 6, 30, 58, 86, 114, 142, 170 }; -// Table D1 - Column coordinates of centre module of alignment patterns -static const unsigned short int rmqr_table_d1[] = { - 21, 0, 0, 0, - 19, 39, 0, 0, - 25, 51, 0, 0, - 23, 49, 75, 0, - 27, 55, 83, 111 -}; - static const unsigned int qr_annex_c[] = { /* Format information bit sequences */ 0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0, 0x77c4, 0x72f3, 0x7daa, 0x789d, @@ -281,25 +165,3 @@ static const unsigned int qr_annex_c1[] = { 0x7c16, 0x7921, 0x06de, 0x03e9, 0x0cb0, 0x0987, 0x1735, 0x1202, 0x1d5b, 0x186c, 0x2508, 0x203f, 0x2f66, 0x2a51, 0x34e3, 0x31d4, 0x3e8d, 0x3bba }; - -static const unsigned int rmqr_format_info_left[] = { - /* rMQR format information for finder pattern side */ - 0x1FAB2, 0x1E597, 0x1DBDD, 0x1C4F8, 0x1B86C, 0x1A749, 0x19903, 0x18626, 0x17F0E, 0x1602B, - 0x15E61, 0x14144, 0x13DD0, 0x122F5, 0x11CBF, 0x1039A, 0x0F1CA, 0x0EEEF, 0x0D0A5, 0x0CF80, - 0x0B314, 0x0AC31, 0x0927B, 0x08D5E, 0x07476, 0x06B53, 0x05519, 0x04A3C, 0x036A8, 0x0298D, - 0x017C7, 0x008E2, 0x3F367, 0x3EC42, 0x3D208, 0x3CD2D, 0x3B1B9, 0x3AE9C, 0x390D6, 0x38FF3, - 0x376DB, 0x369FE, 0x357B4, 0x34891, 0x33405, 0x32B20, 0x3156A, 0x30A4F, 0x2F81F, 0x2E73A, - 0x2D970, 0x2C655, 0x2BAC1, 0x2A5E4, 0x29BAE, 0x2848B, 0x27DA3, 0x26286, 0x25CCC, 0x243E9, - 0x23F7D, 0x22058, 0x21E12, 0x20137 -}; - -static const unsigned int rmqr_format_info_right[] = { - /* rMQR format information for subfinder pattern side */ - 0x20A7B, 0x2155E, 0x22B14, 0x23431, 0x248A5, 0x25780, 0x269CA, 0x276EF, 0x28FC7, 0x290E2, - 0x2AEA8, 0x2B18D, 0x2CD19, 0x2D23C, 0x2EC76, 0x2F353, 0x30103, 0x31E26, 0x3206C, 0x33F49, - 0x343DD, 0x35CF8, 0x362B2, 0x37D97, 0x384BF, 0x39B9A, 0x3A5D0, 0x3BAF5, 0x3C661, 0x3D944, - 0x3E70E, 0x3F82B, 0x003AE, 0x01C8B, 0x022C1, 0x03DE4, 0x04170, 0x05E55, 0x0601F, 0x07F3A, - 0x08612, 0x09937, 0x0A77D, 0x0B858, 0x0C4CC, 0x0DBE9, 0x0E5A3, 0x0FA86, 0x108D6, 0x117F3, - 0x129B9, 0x1369C, 0x14A08, 0x1552D, 0x16B67, 0x17442, 0x18D6A, 0x1924F, 0x1AC05, 0x1B320, - 0x1CFB4, 0x1D091, 0x1EEDB, 0x1F1FE -}; diff --git a/backend/raster.c b/backend/raster.c index 434ab8f..d609e30 100644 --- a/backend/raster.c +++ b/backend/raster.c @@ -2,7 +2,7 @@ /* libzint - the open source barcode library - Copyright (C) 2009 - 2020 Robin Stuart + Copyright (C) 2009-2017 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -36,9 +36,9 @@ #include #include #endif +#include #include #include "common.h" -#include "output.h" #ifdef _MSC_VER #include @@ -48,33 +48,20 @@ #define SSET "0123456789ABCDEF" -#define DEFAULT_INK '1' -#define DEFAULT_PAPER '0' - #ifndef NO_PNG -INTERNAL int png_pixel_plot(struct zint_symbol *symbol, char *pixelbuf); +extern int png_pixel_plot(struct zint_symbol *symbol, char *pixelbuf); #endif /* NO_PNG */ -INTERNAL int bmp_pixel_plot(struct zint_symbol *symbol, char *pixelbuf); -INTERNAL int pcx_pixel_plot(struct zint_symbol *symbol, char *pixelbuf); -INTERNAL int gif_pixel_plot(struct zint_symbol *symbol, char *pixelbuf); -INTERNAL int tif_pixel_plot(struct zint_symbol *symbol, char *pixelbuf); - -static const char ultra_colour[] = "WCBMRYGK"; +extern int bmp_pixel_plot(struct zint_symbol *symbol, char *pixelbuf); +extern int pcx_pixel_plot(struct zint_symbol *symbol, char *pixelbuf); +extern int gif_pixel_plot(struct zint_symbol *symbol, char *pixelbuf); +extern int tif_pixel_plot(struct zint_symbol *symbol, char *pixelbuf); -static int buffer_plot(struct zint_symbol *symbol, char *pixelbuf) { +void buffer_plot(struct zint_symbol *symbol, char *pixelbuf) { /* Place pixelbuffer into symbol */ int fgred, fggrn, fgblu, bgred, bggrn, bgblu; int row, column, i; - if (symbol->bitmap != NULL) { - free(symbol->bitmap); - symbol->bitmap = NULL; - } - symbol->bitmap = (unsigned char *) malloc(symbol->bitmap_width * symbol->bitmap_height * 3); - if (symbol->bitmap == NULL) { - strcpy(symbol->errtxt, "661: Insufficient memory for bitmap buffer"); - return ZINT_ERROR_MEMORY; - } + symbol->bitmap = (char *) malloc(symbol->bitmap_width * symbol->bitmap_height * 3); fgred = (16 * ctoi(symbol->fgcolour[0])) + ctoi(symbol->fgcolour[1]); fggrn = (16 * ctoi(symbol->fgcolour[2])) + ctoi(symbol->fgcolour[3]); @@ -82,57 +69,17 @@ static int buffer_plot(struct zint_symbol *symbol, char *pixelbuf) { bgred = (16 * ctoi(symbol->bgcolour[0])) + ctoi(symbol->bgcolour[1]); bggrn = (16 * ctoi(symbol->bgcolour[2])) + ctoi(symbol->bgcolour[3]); bgblu = (16 * ctoi(symbol->bgcolour[4])) + ctoi(symbol->bgcolour[5]); - + for (row = 0; row < symbol->bitmap_height; row++) { for (column = 0; column < symbol->bitmap_width; column++) { i = ((row * symbol->bitmap_width) + column) * 3; switch (*(pixelbuf + (symbol->bitmap_width * row) + column)) { - case 'W': // White - symbol->bitmap[i] = 255; - symbol->bitmap[i + 1] = 255; - symbol->bitmap[i + 2] = 255; - break; - case 'C': // Cyan - symbol->bitmap[i] = 0; - symbol->bitmap[i + 1] = 255; - symbol->bitmap[i + 2] = 255; - break; - case 'B': // Blue - symbol->bitmap[i] = 0; - symbol->bitmap[i + 1] = 0; - symbol->bitmap[i + 2] = 255; - break; - case 'M': // Magenta - symbol->bitmap[i] = 255; - symbol->bitmap[i + 1] = 0; - symbol->bitmap[i + 2] = 255; - break; - case 'R': // Red - symbol->bitmap[i] = 255; - symbol->bitmap[i + 1] = 0; - symbol->bitmap[i + 2] = 0; - break; - case 'Y': // Yellow - symbol->bitmap[i] = 255; - symbol->bitmap[i + 1] = 255; - symbol->bitmap[i + 2] = 0; - break; - case 'G': // Green - symbol->bitmap[i] = 0; - symbol->bitmap[i + 1] = 255; - symbol->bitmap[i + 2] = 0; - break; - case 'K': // Black - symbol->bitmap[i] = 0; - symbol->bitmap[i + 1] = 0; - symbol->bitmap[i + 2] = 0; - break; - case DEFAULT_INK: + case '1': symbol->bitmap[i] = fgred; symbol->bitmap[i + 1] = fggrn; symbol->bitmap[i + 2] = fgblu; break; - default: // DEFAULT_PAPER + default: symbol->bitmap[i] = bgred; symbol->bitmap[i + 1] = bggrn; symbol->bitmap[i + 2] = bgblu; @@ -141,15 +88,18 @@ static int buffer_plot(struct zint_symbol *symbol, char *pixelbuf) { } } } - - return 0; } -static int save_raster_image_to_file(struct zint_symbol *symbol, int image_height, int image_width, char *pixelbuf, int rotate_angle, int image_type) { +int save_raster_image_to_file(struct zint_symbol *symbol, int image_height, int image_width, char *pixelbuf, int rotate_angle, int image_type) { int error_number; int row, column; - char *rotated_pixbuf = pixelbuf; + char *rotated_pixbuf; + + if (!(rotated_pixbuf = (char *) malloc(image_width * image_height))) { + strcpy(symbol->errtxt, "650: Insufficient memory for pixel buffer"); + return ZINT_ERROR_ENCODING_PROBLEM; + } switch (rotate_angle) { case 0: @@ -164,17 +114,42 @@ static int save_raster_image_to_file(struct zint_symbol *symbol, int image_heigh break; } - if (rotate_angle) { - if (!(rotated_pixbuf = (char *) malloc(image_width * image_height))) { - strcpy(symbol->errtxt, "650: Insufficient memory for pixel buffer"); - return ZINT_ERROR_ENCODING_PROBLEM; - } + /* sort out colour options */ + to_upper((unsigned char*) symbol->fgcolour); + to_upper((unsigned char*) symbol->bgcolour); + + if (strlen(symbol->fgcolour) != 6) { + strcpy(symbol->errtxt, "651: Malformed foreground colour target"); + free(rotated_pixbuf); + return ZINT_ERROR_INVALID_OPTION; + } + if (strlen(symbol->bgcolour) != 6) { + strcpy(symbol->errtxt, "652: Malformed background colour target"); + free(rotated_pixbuf); + return ZINT_ERROR_INVALID_OPTION; + } + error_number = is_sane(SSET, (unsigned char*) symbol->fgcolour, strlen(symbol->fgcolour)); + if (error_number == ZINT_ERROR_INVALID_DATA) { + strcpy(symbol->errtxt, "653: Malformed foreground colour target"); + free(rotated_pixbuf); + return ZINT_ERROR_INVALID_OPTION; + } + error_number = is_sane(SSET, (unsigned char*) symbol->bgcolour, strlen(symbol->fgcolour)); + if (error_number == ZINT_ERROR_INVALID_DATA) { + strcpy(symbol->errtxt, "654: Malformed background colour target"); + free(rotated_pixbuf); + return ZINT_ERROR_INVALID_OPTION; } /* Rotate image before plotting */ switch (rotate_angle) { case 0: /* Plot the right way up */ - /* Nothing to do */ + for (row = 0; row < image_height; row++) { + for (column = 0; column < image_width; column++) { + rotated_pixbuf[(row * image_width) + column] = + pixelbuf[(image_width * row) + column]; + } + } break; case 90: /* Plot 90 degrees clockwise */ for (row = 0; row < image_width; row++) { @@ -204,15 +179,14 @@ static int save_raster_image_to_file(struct zint_symbol *symbol, int image_heigh switch (image_type) { case OUT_BUFFER: - error_number = buffer_plot(symbol, rotated_pixbuf); + buffer_plot(symbol, rotated_pixbuf); + error_number = 0; break; case OUT_PNG_FILE: #ifndef NO_PNG error_number = png_pixel_plot(symbol, rotated_pixbuf); #else - if (rotate_angle) { - free(rotated_pixbuf); - } + free(rotated_pixbuf); return ZINT_ERROR_INVALID_OPTION; #endif break; @@ -230,13 +204,11 @@ static int save_raster_image_to_file(struct zint_symbol *symbol, int image_heigh break; } - if (rotate_angle) { - free(rotated_pixbuf); - } + free(rotated_pixbuf); return error_number; } -static void draw_bar(char *pixelbuf, int xpos, int xlen, int ypos, int ylen, int image_width, int image_height, char fill) { +void draw_bar(char *pixelbuf, int xpos, int xlen, int ypos, int ylen, int image_width, int image_height) { /* Draw a rectangle */ int i, j, png_ypos; @@ -246,12 +218,12 @@ static void draw_bar(char *pixelbuf, int xpos, int xlen, int ypos, int ylen, int for (i = (xpos); i < (xpos + xlen); i++) { for (j = (png_ypos); j < (png_ypos + ylen); j++) { - *(pixelbuf + (image_width * j) + i) = fill; + *(pixelbuf + (image_width * j) + i) = '1'; } } } -static void draw_circle(char *pixelbuf, int image_width, int image_height, int x0, int y0, float radius, char fill) { +void draw_circle(char *pixelbuf, int image_width, int image_height, int x0, int y0, float radius, char fill) { int x, y; int radius_i = (int) radius; @@ -267,7 +239,7 @@ static void draw_circle(char *pixelbuf, int image_width, int image_height, int x } } -static void draw_bullseye(char *pixelbuf, int image_width, int image_height, int xoffset, int yoffset, int scaler) { +void draw_bullseye(char *pixelbuf, int image_width, int image_height, int xoffset, int yoffset, int scaler) { /* Central bullseye in Maxicode symbols */ float x = 14.5 * scaler; float y = 15.0 * scaler; @@ -275,29 +247,29 @@ static void draw_bullseye(char *pixelbuf, int image_width, int image_height, int x = 16.0 * scaler; y = 16.5 * scaler; } - - draw_circle(pixelbuf, image_width, image_height, x + xoffset, y + yoffset, (4.571 * scaler) + 1, DEFAULT_INK); - draw_circle(pixelbuf, image_width, image_height, x + xoffset, y + yoffset, (3.779 * scaler) + 1, DEFAULT_PAPER); - draw_circle(pixelbuf, image_width, image_height, x + xoffset, y + yoffset, (2.988 * scaler) + 1, DEFAULT_INK); - draw_circle(pixelbuf, image_width, image_height, x + xoffset, y + yoffset, (2.196 * scaler) + 1, DEFAULT_PAPER); - draw_circle(pixelbuf, image_width, image_height, x + xoffset, y + yoffset, (1.394 * scaler) + 1, DEFAULT_INK); - draw_circle(pixelbuf, image_width, image_height, x + xoffset, y + yoffset, (0.602 * scaler) + 1, DEFAULT_PAPER); + + draw_circle(pixelbuf, image_width, image_height, x + xoffset, y + yoffset, (4.571 * scaler) + 1, '1'); + draw_circle(pixelbuf, image_width, image_height, x + xoffset, y + yoffset, (3.779 * scaler) + 1, '0'); + draw_circle(pixelbuf, image_width, image_height, x + xoffset, y + yoffset, (2.988 * scaler) + 1, '1'); + draw_circle(pixelbuf, image_width, image_height, x + xoffset, y + yoffset, (2.196 * scaler) + 1, '0'); + draw_circle(pixelbuf, image_width, image_height, x + xoffset, y + yoffset, (1.394 * scaler) + 1, '1'); + draw_circle(pixelbuf, image_width, image_height, x + xoffset, y + yoffset, (0.602 * scaler) + 1, '0'); } -static void draw_hexagon(char *pixelbuf, int image_width, char *scaled_hexagon, int hexagon_size, int xposn, int yposn) { +void draw_hexagon(char *pixelbuf, int image_width, char *scaled_hexagon, int hexagon_size, int xposn, int yposn) { /* Put a hexagon into the pixel buffer */ int i, j; for (i = 0; i < hexagon_size; i++) { for (j = 0; j < hexagon_size; j++) { - if (scaled_hexagon[(i * hexagon_size) + j] == DEFAULT_INK) { - *(pixelbuf + (image_width * i) + (image_width * yposn) + xposn + j) = DEFAULT_INK; + if (scaled_hexagon[(i * hexagon_size) + j] == '1') { + *(pixelbuf + (image_width * i) + (image_width * yposn) + xposn + j) = '1'; } } } } -static void draw_letter(char *pixelbuf, unsigned char letter, int xposn, int yposn, int textflags, int image_width, int image_height) { +void draw_letter(char *pixelbuf, unsigned char letter, int xposn, int yposn, int textflags, int image_width, int image_height) { /* Put a letter into a position */ int skip; @@ -342,7 +314,7 @@ static void draw_letter(char *pixelbuf, unsigned char letter, int xposn, int ypo for (y = 0; y < max_y; y++) { for (x = 0; x < max_x; x++) { if (small_font[(glyph_no * 9) + y] & (0x10 >> x)) { - *(pixelbuf + (y * image_width) + (yposn * image_width) + xposn + x) = DEFAULT_INK; + *(pixelbuf + (y * image_width) + (yposn * image_width) + xposn + x) = '1'; } } } @@ -366,13 +338,13 @@ static void draw_letter(char *pixelbuf, unsigned char letter, int xposn, int ypo for (y = 0; y < max_y; y++) { char * pixelPtr = linePtr; int extra_dot = 0; - for (x = 0; x < max_x; x++) { + for (x = 0; x < 7; x++) { if (ascii_font[(glyph_no * 14) + y] & (0x40 >> x)) { - *pixelPtr = DEFAULT_INK; + *pixelPtr = '1'; extra_dot = 1; } else { if (extra_dot) { - *pixelPtr = DEFAULT_INK; + *pixelPtr = '1'; } extra_dot = 0; @@ -382,7 +354,7 @@ static void draw_letter(char *pixelbuf, unsigned char letter, int xposn, int ypo } if (extra_dot) { - *pixelPtr = DEFAULT_INK; + *pixelPtr = '1'; } linePtr += image_width; @@ -390,7 +362,7 @@ static void draw_letter(char *pixelbuf, unsigned char letter, int xposn, int ypo } break; - default: // regular font 7x14 + default: // regular font 7x15 max_x = 7; max_y = 14; @@ -403,9 +375,9 @@ static void draw_letter(char *pixelbuf, unsigned char letter, int xposn, int ypo } for (y = 0; y < max_y; y++) { - for (x = 0; x < max_x; x++) { + for (x = 0; x < 7; x++) { if (ascii_font[(glyph_no * 14) + y] & (0x40 >> x)) { - *(pixelbuf + (y * image_width) + (yposn * image_width) + xposn + x) = DEFAULT_INK; + *(pixelbuf + (y * image_width) + (yposn * image_width) + xposn + x) = '1'; } } } @@ -415,7 +387,7 @@ static void draw_letter(char *pixelbuf, unsigned char letter, int xposn, int ypo } /* Plot a string into the pixel buffer */ -static void draw_string(char *pixbuf, char input_string[], int xposn, int yposn, int textflags, int image_width, int image_height) { +void draw_string(char *pixbuf, char input_string[], int xposn, int yposn, int textflags, int image_width, int image_height) { int i, string_length, string_left_hand, letter_width = 7; switch (textflags) { @@ -436,13 +408,12 @@ static void draw_string(char *pixbuf, char input_string[], int xposn, int yposn, string_left_hand = xposn - ((letter_width * string_length) / 2); for (i = 0; i < string_length; i++) { - // NOLINTNEXTLINE(clang-analyzer-core.CallAndMessage) suppress false positive about 2nd arg input_string[i] being uninitialized draw_letter(pixbuf, input_string[i], string_left_hand + (i * letter_width), yposn, textflags, image_width, image_height); } } -static void plot_hexline(char *scaled_hexagon, int hexagon_size, float start_x, float start_y, float end_x, float end_y) { +void plot_hexline(char *scaled_hexagon, int hexagon_size, float start_x, float start_y, float end_x, float end_y) { /* Draw a straight line from start to end */ int i; float inc_x, inc_y; @@ -454,12 +425,12 @@ static void plot_hexline(char *scaled_hexagon, int hexagon_size, float start_x, float this_x = start_x + ((float)i * inc_x); float this_y = start_y + ((float)i * inc_y); if (((this_x >= 0) && (this_x < hexagon_size)) && ((this_y >= 0) && (this_y < hexagon_size))) { - scaled_hexagon[(hexagon_size * (int)this_y) + (int)this_x] = DEFAULT_INK; + scaled_hexagon[(hexagon_size * (int)this_y) + (int)this_x] = '1'; } } } -static void plot_hexagon(char *scaled_hexagon, int hexagon_size) { +void plot_hexagon(char *scaled_hexagon, int hexagon_size) { /* Create a hexagon shape and fill it */ int line, i; @@ -498,49 +469,47 @@ static void plot_hexagon(char *scaled_hexagon, int hexagon_size) { /* Fill hexagon */ for (line = 0; line < hexagon_size; line++) { - char ink = DEFAULT_PAPER; + char ink = '0'; for (i = 0; i < hexagon_size; i++) { - if (scaled_hexagon[(hexagon_size * line) + i] == DEFAULT_INK) { + if (scaled_hexagon[(hexagon_size * line) + i] == '1') { if (i < (hexagon_size / 2)) { - ink = DEFAULT_INK; + ink = '1'; } else { - ink = DEFAULT_PAPER; + ink = '0'; } } - if (ink == DEFAULT_INK) { + if (ink == '1') { scaled_hexagon[(hexagon_size * line) + i] = ink; } } } } -static int plot_raster_maxicode(struct zint_symbol *symbol, int rotate_angle, int data_type) { +int plot_raster_maxicode(struct zint_symbol *symbol, int rotate_angle, int data_type) { /* Plot a MaxiCode symbol with hexagons and bullseye */ - int row, column, xposn; + int i, row, column, xposn; int image_height, image_width; char *pixelbuf; int error_number; int xoffset, yoffset; - int roffset, boffset; float scaler = symbol->scale; char *scaled_hexagon; int hexagon_size; - if (scaler <= 0) { - scaler = 0.5; - } - - set_whitespace_offsets(symbol, &xoffset, &yoffset, &roffset, &boffset); - - image_width = (300 + 2 * (xoffset + roffset)) * scaler; - image_height = (300 + 2 * (yoffset + boffset)) * scaler; + xoffset = symbol->border_width + symbol->whitespace_width; + yoffset = symbol->border_width; + image_width = (300 + (2 * xoffset * 2)) * scaler; + image_height = (300 + (2 * yoffset * 2)) * scaler; if (!(pixelbuf = (char *) malloc(image_width * image_height))) { strcpy(symbol->errtxt, "655: Insufficient memory for pixel buffer"); return ZINT_ERROR_ENCODING_PROBLEM; + } else { + for (i = 0; i < (image_width * image_height); i++) { + *(pixelbuf + i) = '0'; + } } - memset(pixelbuf, DEFAULT_PAPER, image_width * image_height); hexagon_size = (int)(scaler * 10); @@ -548,8 +517,11 @@ static int plot_raster_maxicode(struct zint_symbol *symbol, int rotate_angle, in strcpy(symbol->errtxt, "656: Insufficient memory for pixel buffer"); free(pixelbuf); return ZINT_ERROR_ENCODING_PROBLEM; + } else { + for (i = 0; i < (hexagon_size * hexagon_size); i++) { + *(scaled_hexagon + i) = '0'; + } } - memset(scaled_hexagon, DEFAULT_PAPER, hexagon_size * hexagon_size); plot_hexagon(scaled_hexagon, hexagon_size); @@ -577,14 +549,14 @@ static int plot_raster_maxicode(struct zint_symbol *symbol, int rotate_angle, in if ((symbol->output_options & BARCODE_BOX) || (symbol->output_options & BARCODE_BIND)) { /* boundary bars */ - draw_bar(pixelbuf, 0, image_width, 0, symbol->border_width * 2, image_width, image_height, DEFAULT_INK); - draw_bar(pixelbuf, 0, image_width, 300 + (symbol->border_width * 2), symbol->border_width * 2, image_width, image_height, DEFAULT_INK); + draw_bar(pixelbuf, 0, image_width, 0, symbol->border_width * 2, image_width, image_height); + draw_bar(pixelbuf, 0, image_width, 300 + (symbol->border_width * 2), symbol->border_width * 2, image_width, image_height); } if (symbol->output_options & BARCODE_BOX) { /* side bars */ - draw_bar(pixelbuf, 0, symbol->border_width * 2, 0, image_height, image_width, image_height, DEFAULT_INK); - draw_bar(pixelbuf, 300 + ((symbol->border_width + symbol->whitespace_width + symbol->whitespace_width) * 2), symbol->border_width * 2, 0, image_height, image_width, image_height, DEFAULT_INK); + draw_bar(pixelbuf, 0, symbol->border_width * 2, 0, image_height, image_width, image_height); + draw_bar(pixelbuf, 300 + ((symbol->border_width + symbol->whitespace_width + symbol->whitespace_width) * 2), symbol->border_width * 2, 0, image_height, image_width, image_height); } error_number = save_raster_image_to_file(symbol, image_height, image_width, pixelbuf, rotate_angle, data_type); @@ -594,7 +566,7 @@ static int plot_raster_maxicode(struct zint_symbol *symbol, int rotate_angle, in } /* Convert UTF-8 to Latin1 Codepage for the interpretation line */ -static void to_latin1(unsigned char source[], unsigned char preprocessed[]) { +void to_latin1(unsigned char source[], unsigned char preprocessed[]) { int j, i, input_length; input_length = ustrlen(source); @@ -632,21 +604,20 @@ static void to_latin1(unsigned char source[], unsigned char preprocessed[]) { return; } -static int plot_raster_dotty(struct zint_symbol *symbol, int rotate_angle, int data_type) { +int plot_raster_dotty(struct zint_symbol *symbol, int rotate_angle, int data_type) { float scaler = 2 * symbol->scale; char *scaled_pixelbuf; int r, i; int scale_width, scale_height; int error_number = 0; int xoffset, yoffset, image_width, image_height; - int roffset, boffset; symbol->height = symbol->rows; // This is true because only 2d matrix symbols are processed here - set_whitespace_offsets(symbol, &xoffset, &yoffset, &roffset, &boffset); - - image_width = symbol->width + xoffset + roffset; - image_height = symbol->height + yoffset + boffset; + xoffset = symbol->border_width + symbol->whitespace_width; + yoffset = symbol->border_width; + image_width = symbol->width + xoffset + xoffset; + image_height = symbol->height + yoffset + yoffset; if (scaler < 2.0) { scaler = 2.0; @@ -658,8 +629,11 @@ static int plot_raster_dotty(struct zint_symbol *symbol, int rotate_angle, int d if (!(scaled_pixelbuf = (char *) malloc(scale_width * scale_height))) { strcpy(symbol->errtxt, "657: Insufficient memory for pixel buffer"); return ZINT_ERROR_ENCODING_PROBLEM; + } else { + for (i = 0; i < (scale_width * scale_height); i++) { + *(scaled_pixelbuf + i) = '0'; + } } - memset(scaled_pixelbuf, DEFAULT_PAPER, scale_width * scale_height); /* Plot the body of the symbol to the pixel buffer */ for (r = 0; r < symbol->rows; r++) { @@ -669,7 +643,7 @@ static int plot_raster_dotty(struct zint_symbol *symbol, int rotate_angle, int d (int) ((i + xoffset) * scaler) + (scaler / 2.0), (int) ((r + yoffset) * scaler) + (scaler / 2.0), (symbol->dot_size / 2.0) * scaler, - DEFAULT_INK); + '1'); } } } @@ -680,12 +654,11 @@ static int plot_raster_dotty(struct zint_symbol *symbol, int rotate_angle, int d return error_number; } -static int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int data_type) { +int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int data_type) { int textdone, main_width, comp_offset, large_bar_count; char textpart[10], addon[6]; float addon_text_posn, preset_height, large_bar_height; int i, r, textoffset, yoffset, xoffset, latch, image_width, image_height; - int roffset, boffset; char *pixelbuf; int addon_latch = 0, textflags = 0; int block_width, textpos; @@ -711,24 +684,26 @@ static int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int if (is_extendable(symbol->symbology)) { /* For these symbols use dummy text to ensure formatting is done * properly even if no text is required */ - for (i = 0; i < (int) ustrlen(symbol->text); i++) { + for (i = 0; i < ustrlen(symbol->text); i++) { if (symbol->text[i] == '+') { local_text[i] = '+'; } else { local_text[i] = ' '; } + local_text[ustrlen(symbol->text)] = '\0'; } - local_text[ustrlen(symbol->text)] = '\0'; } else { /* For everything else, just remove the text */ - memset(local_text, 0, ustrlen(symbol->text) + 1); /* Note using memset() here to suppress clang-tidy false positives */ + local_text[0] = '\0'; } } textdone = 0; main_width = symbol->width; + strcpy(addon, ""); comp_offset = 0; addon_text_posn = 0.0; + row_height = 0; if (symbol->output_options & SMALL_TEXT) { textflags = 1; } else if (symbol->output_options & BOLD_TEXT) { @@ -794,7 +769,7 @@ static int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int r = 0; /* Isolate add-on text */ if (is_extendable(symbol->symbology)) { - for (i = 0; i < (int) ustrlen(local_text); i++) { + for (i = 0; i < ustrlen(local_text); i++) { if (latch == 1) { addon[r] = local_text[i]; r++; @@ -812,18 +787,25 @@ static int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int textoffset = 0; } - set_whitespace_offsets(symbol, &xoffset, &yoffset, &roffset, &boffset); - - image_width = 2 * (symbol->width + xoffset + roffset); - image_height = 2 * (symbol->height + textoffset + yoffset + boffset); + xoffset = symbol->border_width + symbol->whitespace_width; + yoffset = symbol->border_width; + image_width = 2 * (symbol->width + xoffset + xoffset); + image_height = 2 * (symbol->height + textoffset + yoffset + yoffset); if (!(pixelbuf = (char *) malloc(image_width * image_height))) { strcpy(symbol->errtxt, "658: Insufficient memory for pixel buffer"); return ZINT_ERROR_ENCODING_PROBLEM; + } else { + for (i = 0; i < (image_width * image_height); i++) { + *(pixelbuf + i) = '0'; + } } - memset(pixelbuf, DEFAULT_PAPER, image_width * image_height); - default_text_posn = image_height - 17; + if ((symbol->output_options & BARCODE_BOX) || (symbol->output_options & BARCODE_BIND)) { + default_text_posn = image_height - 17; + } else { + default_text_posn = image_height - 17 - symbol->border_width - symbol->border_width; + } row_posn = textoffset + yoffset; next_yposn = textoffset + yoffset; @@ -834,7 +816,6 @@ static int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int int plot_yposn; int plot_height; int this_row = symbol->rows - r - 1; /* invert r otherwise plots upside down */ - int module_fill; row_posn += row_height; plot_yposn = next_yposn; if (symbol->row_height[this_row] == 0) { @@ -846,27 +827,30 @@ static int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int plot_height = next_yposn - plot_yposn; i = 0; + if (module_is_set(symbol, this_row, 0)) { + latch = 1; + } else { + latch = 0; + } do { - module_fill = module_is_set(symbol, this_row, i); block_width = 0; do { block_width++; - } while ((i + block_width < symbol->width) && module_is_set(symbol, this_row, i + block_width) == module_is_set(symbol, this_row, i)); - + } while ((i + block_width < symbol->width )&& module_is_set(symbol, this_row, i + block_width) == module_is_set(symbol, this_row, i)); if ((addon_latch == 0) && (r == 0) && (i > main_width)) { plot_height = (int) (row_height - 5.0); plot_yposn = (int) (row_posn - 5.0); addon_text_posn = row_posn + row_height - 8.0; addon_latch = 1; } - if (module_fill) { + if (latch == 1) { /* a bar */ - if (symbol->symbology == BARCODE_ULTRA) { - draw_bar(pixelbuf, (i + xoffset) * 2, block_width * 2, plot_yposn * 2, plot_height * 2, image_width, image_height, ultra_colour[module_fill]); - } else { - draw_bar(pixelbuf, (i + xoffset) * 2, block_width * 2, plot_yposn * 2, plot_height * 2, image_width, image_height, DEFAULT_INK); - } + draw_bar(pixelbuf, (i + xoffset) * 2, block_width * 2, plot_yposn * 2, plot_height * 2, image_width, image_height); + latch = 0; + } else { + /* a space */ + latch = 1; } i += block_width; @@ -882,12 +866,12 @@ static int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int case 8: /* EAN-8 */ case 11: case 14: - draw_bar(pixelbuf, (0 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK); - draw_bar(pixelbuf, (2 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK); - draw_bar(pixelbuf, (32 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK); - draw_bar(pixelbuf, (34 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK); - draw_bar(pixelbuf, (64 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK); - draw_bar(pixelbuf, (66 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK); + draw_bar(pixelbuf, (0 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height); + draw_bar(pixelbuf, (2 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height); + draw_bar(pixelbuf, (32 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height); + draw_bar(pixelbuf, (34 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height); + draw_bar(pixelbuf, (64 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height); + draw_bar(pixelbuf, (66 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height); for (i = 0; i < 4; i++) { textpart[i] = local_text[i]; } @@ -917,12 +901,12 @@ static int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int case 13: /* EAN 13 */ case 16: case 19: - draw_bar(pixelbuf, (0 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK); - draw_bar(pixelbuf, (2 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK); - draw_bar(pixelbuf, (46 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK); - draw_bar(pixelbuf, (48 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK); - draw_bar(pixelbuf, (92 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK); - draw_bar(pixelbuf, (94 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK); + draw_bar(pixelbuf, (0 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height); + draw_bar(pixelbuf, (2 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height); + draw_bar(pixelbuf, (46 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height); + draw_bar(pixelbuf, (48 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height); + draw_bar(pixelbuf, (92 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height); + draw_bar(pixelbuf, (94 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height); textpart[0] = local_text[0]; textpart[1] = '\0'; @@ -965,10 +949,10 @@ static int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int block_width = 0; do { block_width++; - } while ((i + block_width < symbol->width) && module_is_set(symbol, symbol->rows - 1, i + block_width) == module_is_set(symbol, symbol->rows - 1, i)); + } while (module_is_set(symbol, symbol->rows - 1, i + block_width) == module_is_set(symbol, symbol->rows - 1, i)); if (latch == 1) { /* a bar */ - draw_bar(pixelbuf, (i + xoffset - comp_offset) * 2, block_width * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK); + draw_bar(pixelbuf, (i + xoffset - comp_offset) * 2, block_width * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height); latch = 0; } else { /* a space */ @@ -976,18 +960,18 @@ static int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int } i += block_width; } while (i < 11 + comp_offset); - draw_bar(pixelbuf, (46 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK); - draw_bar(pixelbuf, (48 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK); + draw_bar(pixelbuf, (46 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height); + draw_bar(pixelbuf, (48 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height); latch = 1; i = 85 + comp_offset; do { block_width = 0; do { block_width++; - } while ((i + block_width < symbol->width) && module_is_set(symbol, symbol->rows - 1, i + block_width) == module_is_set(symbol, symbol->rows - 1, i)); + } while (module_is_set(symbol, symbol->rows - 1, i + block_width) == module_is_set(symbol, symbol->rows - 1, i)); if (latch == 1) { /* a bar */ - draw_bar(pixelbuf, (i + xoffset - comp_offset) * 2, block_width * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK); + draw_bar(pixelbuf, (i + xoffset - comp_offset) * 2, block_width * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height); latch = 0; } else { /* a space */ @@ -1030,11 +1014,11 @@ static int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int } else if ((symbol->symbology == BARCODE_UPCE) || (symbol->symbology == BARCODE_UPCE_CHK) || (symbol->symbology == BARCODE_UPCE_CC)) { /* guard bar extensions and text formatting for UPCE */ - draw_bar(pixelbuf, (0 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK); - draw_bar(pixelbuf, (2 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK); - draw_bar(pixelbuf, (46 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK); - draw_bar(pixelbuf, (48 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK); - draw_bar(pixelbuf, (50 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height, DEFAULT_INK); + draw_bar(pixelbuf, (0 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height); + draw_bar(pixelbuf, (2 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height); + draw_bar(pixelbuf, (46 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height); + draw_bar(pixelbuf, (48 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height); + draw_bar(pixelbuf, (50 + xoffset) * 2, 1 * 2, (4 + (int) yoffset) * 2, 5 * 2, image_width, image_height); textpart[0] = local_text[0]; textpart[1] = '\0'; @@ -1069,28 +1053,23 @@ static int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int /* Put boundary bars or box around symbol */ if ((symbol->output_options & BARCODE_BOX) || (symbol->output_options & BARCODE_BIND)) { /* boundary bars */ - if ((symbol->output_options & BARCODE_BOX) || (symbol->symbology != BARCODE_CODABLOCKF && symbol->symbology != BARCODE_HIBC_BLOCKF)) { - draw_bar(pixelbuf, 0, (symbol->width + xoffset + roffset) * 2, textoffset * 2, symbol->border_width * 2, image_width, image_height, DEFAULT_INK); - draw_bar(pixelbuf, 0, (symbol->width + xoffset + roffset) * 2, (textoffset + symbol->height + symbol->border_width) * 2, symbol->border_width * 2, image_width, image_height, DEFAULT_INK); + if (symbol->symbology != BARCODE_CODABLOCKF) { + draw_bar(pixelbuf, 0, (symbol->width + xoffset + xoffset) * 2, textoffset * 2, symbol->border_width * 2, image_width, image_height); + draw_bar(pixelbuf, 0, (symbol->width + xoffset + xoffset) * 2, (textoffset + symbol->height + symbol->border_width) * 2, symbol->border_width * 2, image_width, image_height); } else { - draw_bar(pixelbuf, xoffset * 2, symbol->width * 2, textoffset * 2, symbol->border_width * 2, image_width, image_height, DEFAULT_INK); - draw_bar(pixelbuf, xoffset * 2, symbol->width * 2, (textoffset + symbol->height + symbol->border_width) * 2, symbol->border_width * 2, image_width, image_height, DEFAULT_INK); + draw_bar(pixelbuf, xoffset * 2, symbol->width * 2, textoffset * 2, symbol->border_width * 2, image_width, image_height); + draw_bar(pixelbuf, xoffset * 2, symbol->width * 2, (textoffset + symbol->height + symbol->border_width) * 2, symbol->border_width * 2, image_width, image_height); } if ((symbol->output_options & BARCODE_BIND) != 0) { if ((symbol->rows > 1) && (is_stackable(symbol->symbology) == 1)) { - double sep_height = 1; - if (symbol->option_3 > 0 && symbol->option_3 <= 4) { - sep_height = symbol->option_3; - } /* row binding */ - if (symbol->symbology != BARCODE_CODABLOCKF && symbol->symbology != BARCODE_HIBC_BLOCKF) { + if (symbol->symbology != BARCODE_CODABLOCKF) { for (r = 1; r < symbol->rows; r++) { - draw_bar(pixelbuf, xoffset * 2, symbol->width * 2, ((r * row_height) + textoffset + yoffset - sep_height / 2) * 2, sep_height * 2, image_width, image_height, DEFAULT_INK); + draw_bar(pixelbuf, xoffset * 2, symbol->width * 2, ((r * row_height) + textoffset + yoffset - 1) * 2, 2 * 2, image_width, image_height); } } else { for (r = 1; r < symbol->rows; r++) { - /* Avoid 11-module start and 13-module stop chars */ - draw_bar(pixelbuf, (xoffset + 11) * 2, (symbol->width - 24) * 2, ((r * row_height) + textoffset + yoffset - sep_height / 2) * 2, sep_height * 2, image_width, image_height, DEFAULT_INK); + draw_bar(pixelbuf, (xoffset + 11) * 2 , (symbol->width - 25) * 2, ((r * row_height) + textoffset + yoffset - 1) * 2, 2 * 2, image_width, image_height); } } } @@ -1099,8 +1078,8 @@ static int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int if (symbol->output_options & BARCODE_BOX) { /* side bars */ - draw_bar(pixelbuf, 0, symbol->border_width * 2, textoffset * 2, (symbol->height + (2 * symbol->border_width)) * 2, image_width, image_height, DEFAULT_INK); - draw_bar(pixelbuf, (symbol->width + xoffset + roffset - symbol->border_width) * 2, symbol->border_width * 2, textoffset * 2, (symbol->height + (2 * symbol->border_width)) * 2, image_width, image_height, DEFAULT_INK); + draw_bar(pixelbuf, 0, symbol->border_width * 2, textoffset * 2, (symbol->height + (2 * symbol->border_width)) * 2, image_width, image_height); + draw_bar(pixelbuf, (symbol->width + xoffset + xoffset - symbol->border_width) * 2, symbol->border_width * 2, textoffset * 2, (symbol->height + (2 * symbol->border_width)) * 2, image_width, image_height); } /* Put the human readable text at the bottom */ @@ -1110,52 +1089,44 @@ static int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int } - if (scaler <= 0) { + if (scaler == 0) { scaler = 0.5; } + scale_width = image_width * scaler; + scale_height = image_height * scaler; - if (scaler != 1.0) { - scale_width = image_width * scaler; - scale_height = image_height * scaler; - - /* Apply scale options by creating another pixel buffer */ - if (!(scaled_pixelbuf = (char *) malloc(scale_width * scale_height))) { - free(pixelbuf); - strcpy(symbol->errtxt, "659: Insufficient memory for pixel buffer"); - return ZINT_ERROR_ENCODING_PROBLEM; + /* Apply scale options by creating another pixel buffer */ + if (!(scaled_pixelbuf = (char *) malloc(scale_width * scale_height))) { + free(pixelbuf); + strcpy(symbol->errtxt, "659: Insufficient memory for pixel buffer"); + return ZINT_ERROR_ENCODING_PROBLEM; + } else { + for (i = 0; i < (scale_width * scale_height); i++) { + *(scaled_pixelbuf + i) = '0'; } - memset(scaled_pixelbuf, DEFAULT_PAPER, scale_width * scale_height); + } - for (vert = 0; vert < scale_height; vert++) { - for (horiz = 0; horiz < scale_width; horiz++) { - *(scaled_pixelbuf + (vert * scale_width) + horiz) = *(pixelbuf + ((int) (vert / scaler) * image_width) + (int) (horiz / scaler)); - } + for (vert = 0; vert < scale_height; vert++) { + for (horiz = 0; horiz < scale_width; horiz++) { + *(scaled_pixelbuf + (vert * scale_width) + horiz) = *(pixelbuf + ((int) (vert / scaler) * image_width) + (int) (horiz / scaler)); } - - error_number = save_raster_image_to_file(symbol, scale_height, scale_width, scaled_pixelbuf, rotate_angle, data_type); - free(scaled_pixelbuf); - } else { - error_number = save_raster_image_to_file(symbol, image_height, image_width, pixelbuf, rotate_angle, data_type); } + + error_number = save_raster_image_to_file(symbol, scale_height, scale_width, scaled_pixelbuf, rotate_angle, data_type); + free(scaled_pixelbuf); free(pixelbuf); return error_number; } -INTERNAL int plot_raster(struct zint_symbol *symbol, int rotate_angle, int file_type) { +int plot_raster(struct zint_symbol *symbol, int rotate_angle, int file_type) { int error; #ifdef NO_PNG if (file_type == OUT_PNG_FILE) { - strcpy(symbol->errtxt, "660: PNG format disabled at compile time"); return ZINT_ERROR_INVALID_OPTION; } #endif /* NO_PNG */ - error = check_colour_options(symbol); - if (error != 0) { - return error; - } - if (symbol->output_options & BARCODE_DOTTY_MODE) { error = plot_raster_dotty(symbol, rotate_angle, file_type); } else { @@ -1168,3 +1139,5 @@ INTERNAL int plot_raster(struct zint_symbol *symbol, int rotate_angle, int file_ return error; } + + diff --git a/backend/reedsol.c b/backend/reedsol.c index 6d908e4..b161080 100644 --- a/backend/reedsol.c +++ b/backend/reedsol.c @@ -28,7 +28,6 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ // It is not written with high efficiency in mind, so is probably // not suitable for real-time encoding. The aim was to keep it @@ -49,10 +48,8 @@ // malloc/free can be avoided by using static arrays of a suitable // size. -#ifdef _MSC_VER +#include // only needed for debug (main) #include -#endif -#include "common.h" #include "reedsol.h" static int logmod; // 2**symsize - 1 static int rlen; @@ -69,7 +66,7 @@ static int *logt = NULL, *alog = NULL, *rspoly = NULL; // polynomial. e.g. for ECC200 (8-bit symbols) the polynomial is // a**8 + a**5 + a**3 + a**2 + 1, which translates to 0x12d. -INTERNAL void rs_init_gf(const int poly) { +void rs_init_gf(const int poly) { int m, b, p, v; // Find the top bit, and hence the symbol size @@ -104,7 +101,7 @@ INTERNAL void rs_init_gf(const int poly) { // (x + 2**i)*(x + 2**(i+1))*... [nsym terms] // For ECC200, index is 1. -INTERNAL void rs_init_code(const int nsym, int index) { +void rs_init_code(const int nsym, int index) { int i, k; rspoly = (int *) malloc(sizeof (int) * (nsym + 1)); @@ -124,11 +121,11 @@ INTERNAL void rs_init_code(const int nsym, int index) { } } -INTERNAL void rs_encode(const size_t len, const unsigned char *data, unsigned char *res) { +void rs_encode(const size_t len,const unsigned char *data, unsigned char *res) { int i, k; for (i = 0; i < rlen; i++) res[i] = 0; - for (i = 0; i < (int) len; i++) { + for (i = 0; i < len; i++) { int m = res[rlen - 1] ^ data[i]; for (k = rlen - 1; k > 0; k--) { if (m && rspoly[k]) @@ -144,7 +141,7 @@ INTERNAL void rs_encode(const size_t len, const unsigned char *data, unsigned ch } /* The same as above but for larger bitlengths - Aztec code compatible */ -INTERNAL void rs_encode_long(const int len, const unsigned int *data, unsigned int *res) { +void rs_encode_long(const int len, const unsigned int *data, unsigned int *res) { int i, k; for (i = 0; i < rlen; i++) res[i] = 0; @@ -164,9 +161,10 @@ INTERNAL void rs_encode_long(const int len, const unsigned int *data, unsigned i } /* Free memory */ -INTERNAL void rs_free(void) { +void rs_free(void) { free(logt); free(alog); free(rspoly); rspoly = NULL; } + diff --git a/backend/reedsol.h b/backend/reedsol.h index d0703c9..73630f1 100644 --- a/backend/reedsol.h +++ b/backend/reedsol.h @@ -29,7 +29,6 @@ SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ #ifndef __REEDSOL_H #define __REEDSOL_H @@ -38,14 +37,15 @@ extern "C" { #endif /* __cplusplus */ -INTERNAL void rs_init_gf(const int poly); -INTERNAL void rs_init_code(const int nsym,int index); -INTERNAL void rs_encode(const size_t len,const unsigned char *data, unsigned char *res); -INTERNAL void rs_encode_long(const int len,const unsigned int *data, unsigned int *res); -INTERNAL void rs_free(void); +extern void rs_init_gf(const int poly); +extern void rs_init_code(const int nsym,int index); +extern void rs_encode(const size_t len,const unsigned char *data, unsigned char *res); +extern void rs_encode_long(const int len,const unsigned int *data, unsigned int *res); + extern void rs_free(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __REEDSOL_H */ + diff --git a/backend/render.c b/backend/render.c new file mode 100644 index 0000000..72cdaaf --- /dev/null +++ b/backend/render.c @@ -0,0 +1,858 @@ +/* + * render.c - Generic Rendered Format + * + * Initiall written by Sam Lown for use in gLabels. Converts encoded + * data into a generic internal structure of lines and characters + * usable in external applications. + */ + +/* + libzint - the open source barcode library + Copyright (C) 2009-2017 Robin Stuart + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the project nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + */ + +#include +#include +#include +#include +#ifdef _MSC_VER +#include +#endif +#include "common.h" + +#define GL_CONST 2.8346 + +struct zint_render_line *render_plot_create_line(float x, float y, float width, float length); +int render_plot_add_line(struct zint_symbol *symbol, struct zint_render_line *line, struct zint_render_line **last_line); +struct zint_render_ring *render_plot_create_ring(float x, float y, float radius, float line_width); +int render_plot_add_ring(struct zint_symbol *symbol, struct zint_render_ring *ring, struct zint_render_ring **last_ring); +struct zint_render_hexagon *render_plot_create_hexagon(float x, float y, float height); +int render_plot_add_hexagon(struct zint_symbol *symbol, struct zint_render_hexagon *hexagon, struct zint_render_hexagon **last_hexagon); + +int render_plot_add_string(struct zint_symbol *symbol, unsigned char *text, float x, float y, float fsize, float width, struct zint_render_string **last_string); +void render_free(struct zint_symbol *symbol); + +int render_plot(struct zint_symbol *symbol, float width, float height) { + struct zint_render *render; + struct zint_render_line *line, *last_line = NULL; + struct zint_render_string *last_string = NULL; + struct zint_render_ring *last_ring = NULL; + struct zint_render_hexagon *last_hexagon = NULL; + + int i, r, latch; + float textpos, large_bar_height, preset_height, row_height, row_posn = 0.0; + // int error_number = 0; + int text_offset, text_height, xoffset, yoffset, textdone, main_symbol_width_x, addon_width_x; + char addon[6]; + int large_bar_count, symbol_lead_in, total_symbol_width_x, total_area_width_x; + float addon_text_posn; + float default_text_posn; + float scaler; + const char *locale = NULL; + int hide_text = 0; + float symbol_aspect = 1; + float x_dimension; + int upceanflag = 0; + + // Free any previous rendering structures + render_free(symbol); + // Allocate memory for the rendered version + render = symbol->rendered = (struct zint_render *) malloc(sizeof (struct zint_render)); + if (!symbol->rendered) return ZINT_ERROR_MEMORY; + render->lines = NULL; + render->strings = NULL; + render->rings = NULL; + render->hexagons = NULL; + + locale = setlocale(LC_ALL, "C"); + + row_height = 0; + textdone = 0; + textpos = 0.0; + main_symbol_width_x = symbol->width; + strcpy(addon, ""); + symbol_lead_in = 0; + addon_text_posn = 0.0; + addon_width_x = 0; + + /* + * Determine if there will be any addon texts and text height + */ + latch = 0; + r = 0; + /* Isolate add-on text */ + if (is_extendable(symbol->symbology)) { + for(i = 0; i < (int)ustrlen(symbol->text); i++) { + if (latch == 1) { + addon[r] = symbol->text[i]; + r++; + } + if (symbol->text[i] == '+') { + latch = 1; + } + } + } + addon[r] = '\0'; + + + /* + * Calculate the width of the barcode, especially if there are any extra + * borders or white space to add. + */ + + while (!(module_is_set(symbol, symbol->rows - 1, symbol_lead_in))) { + symbol_lead_in++; + } + + /* Certain symbols need whitespace otherwise characters get chopped off the sides */ + if ((((symbol->symbology == BARCODE_EANX) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_EANX_CC)) + || (symbol->symbology == BARCODE_ISBNX)) { + switch (ustrlen(symbol->text)) { + case 13: /* EAN 13 */ + case 16: + case 19: + if (symbol->whitespace_width == 0) { + symbol->whitespace_width = 10; + } + main_symbol_width_x = 96 + symbol_lead_in; + upceanflag = 13; + break; + case 2: + main_symbol_width_x = 22 + symbol_lead_in; + upceanflag = 2; + break; + case 5: + main_symbol_width_x = 49 + symbol_lead_in; + upceanflag = 5; + break; + default: + main_symbol_width_x = 68 + symbol_lead_in; + upceanflag = 8; + } + switch (ustrlen(symbol->text)) { + case 11: + case 16: + /* EAN-2 add-on */ + addon_width_x = 31; + break; + case 14: + case 19: + /* EAN-5 add-on */ + addon_width_x = 58; + break; + } + } + else if (((symbol->symbology == BARCODE_UPCA) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_UPCA_CC)) { + upceanflag = 12; + if (symbol->whitespace_width < 10) { + symbol->whitespace_width = 10; + main_symbol_width_x = 96 + symbol_lead_in; + } + switch (ustrlen(symbol->text)) { + case 15: + /* EAN-2 add-on */ + addon_width_x = 31; + break; + case 18: + /* EAN-5 add-on */ + addon_width_x = 58; + break; + } + } + else if (((symbol->symbology == BARCODE_UPCE) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_UPCE_CC)) { + upceanflag = 6; + if (symbol->whitespace_width == 0) { + symbol->whitespace_width = 10; + main_symbol_width_x = 51 + symbol_lead_in; + } + switch (ustrlen(symbol->text)) { + case 11: + /* EAN-2 add-on */ + addon_width_x = 31; + break; + case 14: + /* EAN-5 add-on */ + addon_width_x = 58; + break; + } + } + + if ((!symbol->show_hrt) || (ustrlen(symbol->text) == 0)) { + hide_text = 1; + text_height = text_offset = 0.0; + } + else { + text_height = upceanflag ? 11.0 : 9.0; + text_offset = 2.0; + } + if (symbol->output_options & SMALL_TEXT) + text_height *= 0.8; + + total_symbol_width_x = 0.0 + main_symbol_width_x + addon_width_x; + total_area_width_x = total_symbol_width_x + (2 * (symbol->border_width + symbol->whitespace_width)); + + xoffset = symbol->border_width + symbol->whitespace_width; + yoffset = symbol->border_width; + + + // Determine if height should be overridden + large_bar_count = 0; + preset_height = 0.0; + for (i = 0; i < symbol->rows; i++) { + preset_height += symbol->row_height[i]; + if (symbol->row_height[i] == 0) { + large_bar_count++; + } + } + + + /* Set minimum size of symbol */ + /* Barcode must be at least 2mm high by 2mm across */ + if (width < (2.0 * GL_CONST)) { + width = (2.0 * GL_CONST); + } + x_dimension = width / total_area_width_x / GL_CONST; + if (height < ((x_dimension * ((2 * symbol->border_width) + text_offset + text_height)) + 2.0) * GL_CONST) { + height = ((x_dimension * ((2 * symbol->border_width) + text_offset + text_height)) + 2.0) * GL_CONST; + } + + if (symbol->symbology == BARCODE_CODABAR) { + /* The minimum X-dimension of Codabar is 0.191mm. The minimum bar height is 5mm */ + if (x_dimension < 0.191) { + x_dimension = 0.191; + width = 0.191 * GL_CONST * total_area_width_x; + } + if (height < ((x_dimension * ((2 * symbol->border_width) + text_offset + text_height)) + 5.0) * GL_CONST) { + height = ((x_dimension * ((2 * symbol->border_width) + text_offset + text_height)) + 5.0) * GL_CONST; + } + } + else if (symbol->symbology == BARCODE_CODE49) { + /* The minimum X-dimension of Code 49 is 0.191mm */ + if (x_dimension < 0.191) { + float encoded_symbol_aspect; + x_dimension = 0.191; + width = 0.191 * GL_CONST * total_area_width_x; + encoded_symbol_aspect = total_area_width_x; + encoded_symbol_aspect /= (preset_height + (2 * yoffset) + text_offset + text_height); + height = width / encoded_symbol_aspect; + } + } + + if (upceanflag != 0) { + /* The X-dimension of UPC/EAN symbols is fixed at 0.330mm */ + /* The phrase before is questionable. It may scale in certain percentages (80% - 200%). + see https://internationalbarcodes.com/ean-13-specifications/ */ + // Can now cope with sizes between 80% and 200%, enforces correct aspect ratio + /* NOTE: This code will need adjustment before it correctly deals with composite symbols */ + //x_dimension = 0.330; + if (x_dimension < 0.26) { + x_dimension = 0.26; + } + if (x_dimension > 0.66) { + x_dimension = 0.66; + } + width = x_dimension * GL_CONST * total_area_width_x; + + switch (upceanflag) { + case 6: + case 12: + case 13: + /* UPC-A, UPC-E and EAN-13 */ + /* Height of bars should be 22.85mm */ + height = ((x_dimension * ((2 * symbol->border_width) + text_offset + text_height)) + (22.85 * (x_dimension / 0.33))) * GL_CONST; + break; + case 8: + /* EAN-8 */ + /* Height of bars should be 18.23mm */ + height = ((x_dimension * ((2 * symbol->border_width) + text_offset + text_height)) + (18.23 * (x_dimension / 0.33))) * GL_CONST; + break; + default: + /* EAN-2 and EAN-5 */ + /* Height of bars should be 21.10mm */ + height = ((x_dimension * ((2 * symbol->border_width) + text_offset + text_height)) + (21.10 * (x_dimension / 0.33))) * GL_CONST; + } + } + + if (symbol->symbology == BARCODE_ONECODE) { + /* The size of USPS Intelligent Mail barcode is fixed */ + x_dimension = 0.508; + width = 0.508 * GL_CONST * total_area_width_x; + height = 4.064 * GL_CONST; + } + else if ((symbol->symbology == BARCODE_POSTNET) || (symbol->symbology == BARCODE_PLANET)) { + /* The size of PostNet and PLANET are fized */ + x_dimension = 0.508; + width = 0.508 * GL_CONST * total_area_width_x; + height = 2.921 * GL_CONST; + } + else if (((symbol->symbology == BARCODE_AUSPOST) || (symbol->symbology == BARCODE_AUSREPLY)) || + ((symbol->symbology == BARCODE_AUSROUTE) || (symbol->symbology == BARCODE_AUSREDIRECT))) { + /* Australia Post use the same sizes as USPS */ + x_dimension = 0.508; + width = 0.508 * GL_CONST * total_area_width_x; + height = 4.064 * GL_CONST; + } + else if ((symbol->symbology == BARCODE_RM4SCC) || (symbol->symbology == BARCODE_KIX)) { + /* Royal Mail and KIX Code uses 22 bars per inch */ + x_dimension = 0.577; + width = 0.577 * GL_CONST * total_area_width_x; + height = 5.22 * GL_CONST; + } + + + if (large_bar_count == 0) { + float required_aspect = width / height; + symbol_aspect = (total_symbol_width_x + (2 * xoffset)) / (preset_height + (2 * yoffset) + text_offset + text_height); + symbol->height = (int) preset_height; + if (required_aspect > symbol_aspect) { + /* the area is too wide */ + scaler = height / (preset_height + (2 * yoffset) + text_offset + text_height); + render->width = symbol_aspect * height; + render->height = height; + } else { + /* the area is too high */ + scaler = width / (total_symbol_width_x + (2 * xoffset)); + render->width = width; + render->height = width / symbol_aspect; + } + } else { + scaler = width / (total_symbol_width_x + (2 * xoffset)); + symbol->height = (int) ((height / scaler) - ((2 * yoffset) + text_offset + text_height)); + + render->width = width; + render->height = height; + } + large_bar_height = (symbol->height - preset_height) / large_bar_count; + + if ((symbol->output_options & BARCODE_BOX) || (symbol->output_options & BARCODE_BIND)) { + default_text_posn = (symbol->height + text_offset + symbol->border_width + symbol->border_width) * scaler; + } else { + default_text_posn = (symbol->height + text_offset + symbol->border_width) * scaler; + } + + + if (symbol->symbology == BARCODE_MAXICODE) { + struct zint_render_ring *ring; + /* Maxicode is a fixed size */ + scaler = GL_CONST; /* Converts from millimeters to the scale used by glabels */ + render->width = 28.16 * scaler; + render->height = 26.86 * scaler; + + /* Central bullseye pattern */ + ring = render_plot_create_ring(13.64 * scaler, 13.43 * scaler, 0.85 * scaler, 0.67 * scaler); + render_plot_add_ring(symbol, ring, &last_ring); + ring = render_plot_create_ring(13.64 * scaler, 13.43 * scaler, 2.20 * scaler, 0.67 * scaler); + render_plot_add_ring(symbol, ring, &last_ring); + ring = render_plot_create_ring(13.64 * scaler, 13.43 * scaler, 3.54 * scaler, 0.67 * scaler); + render_plot_add_ring(symbol, ring, &last_ring); + + /* Hexagons */ + for (r = 0; r < symbol->rows; r++) { + for (i = 0; i < symbol->width; i++) { + if (module_is_set(symbol, r, i)) { + struct zint_render_hexagon *hexagon = render_plot_create_hexagon(((i * 0.88) + ((r & 1) ? 1.76 : 1.32)) * scaler, ((r * 0.76) + 0.76) * scaler, 1. * scaler); + render_plot_add_hexagon(symbol, hexagon, &last_hexagon); + } + } + } + + } else { + /* everything else uses rectangles (or squares) */ + /* Works from the bottom of the symbol up */ + int addon_latch = 0; + + for (r = 0; r < symbol->rows; r++) { + int this_row = r; + if (symbol->row_height[this_row] == 0) { + row_height = large_bar_height; + } else { + row_height = symbol->row_height[this_row]; + } + row_posn = 0; + for (i = 0; i < r; i++) { + if (symbol->row_height[i] == 0) { + row_posn += large_bar_height; + } else { + row_posn += symbol->row_height[i]; + } + } + row_posn += yoffset; + + i = 0; + if (module_is_set(symbol, this_row, 0)) { + latch = 1; + } else { + latch = 0; + } + + do { + int block_width = 0; + do { + block_width++; + } while (module_is_set(symbol, this_row, i + block_width) == module_is_set(symbol, this_row, i)); + if ((addon_latch == 0) && (r == (symbol->rows - 1)) && (i > main_symbol_width_x)) { + addon_text_posn = row_posn * scaler; + addon_latch = 1; + } + if (latch == 1) { + /* a bar */ + if (addon_latch == 0) { + line = render_plot_create_line((i + xoffset) * scaler, (row_posn) * scaler, block_width * scaler, row_height * scaler); + } else { + line = render_plot_create_line((i + xoffset) * scaler, (row_posn + 10.0) * scaler, block_width * scaler, (row_height - 5.0) * scaler); + } + latch = 0; + + render_plot_add_line(symbol, line, &last_line); + } else { + /* a space */ + latch = 1; + } + i += block_width; + + } while (i < symbol->width); + } + } + /* That's done the actual data area, everything else is human-friendly */ + + + /* Add the text */ + xoffset -= symbol_lead_in; + row_posn = (row_posn + large_bar_height) * scaler; + + if (!hide_text) { + char textpart[10]; + float textwidth; + if (upceanflag == 8) { + /* guard bar extensions and text formatting for EAN-8 */ + i = 0; + for (line = symbol->rendered->lines; line != NULL; line = line->next) { + switch (i) { + case 0: + case 1: + case 10: + case 11: + case 20: + case 21: + line->length += (5.0 * scaler); + break; + } + i++; + } + + for (i = 0; i < 4; i++) { + textpart[i] = symbol->text[i]; + } + textpart[4] = '\0'; + textpos = 17; + textwidth = 4.0 * 8.5; + render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn, text_height * scaler, textwidth * scaler, &last_string); + for (i = 0; i < 4; i++) { + textpart[i] = symbol->text[i + 4]; + } + textpart[4] = '\0'; + textpos = 50; + render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn, text_height * scaler, textwidth * scaler, &last_string); + textdone = 1; + switch (strlen(addon)) { + case 2: + textpos = xoffset + 86; + textwidth = 2.0 * 8.5; + render_plot_add_string(symbol, (unsigned char *) addon, textpos * scaler, addon_text_posn * scaler, text_height * scaler, textwidth * scaler, &last_string); + break; + case 5: + textpos = xoffset + 100; + textwidth = 5.0 * 8.5; + render_plot_add_string(symbol, (unsigned char *) addon, textpos * scaler, addon_text_posn * scaler, text_height * scaler, textwidth * scaler, &last_string); + break; + } + + } + + if (upceanflag == 13) { + /* guard bar extensions and text formatting for EAN-13 */ + i = 0; + for (line = symbol->rendered->lines; line != NULL; line = line->next) { + switch (i) { + case 0: + case 1: + case 14: + case 15: + case 28: + case 29: + line->length += (5.0 * scaler); + break; + } + i++; + } + + textpart[0] = symbol->text[0]; + textpart[1] = '\0'; + textpos = -5; // 7 + textwidth = 8.5; + render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn, text_height * scaler, textwidth * scaler, &last_string); + + for (i = 0; i < 6; i++) { + textpart[i] = symbol->text[i + 1]; + } + textpart[6] = '\0'; + textpos = 25; + textwidth = 6.0 * 8.5; + render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn, text_height * scaler, textwidth * scaler, &last_string); + for (i = 0; i < 6; i++) { + textpart[i] = symbol->text[i + 7]; + } + textpart[6] = '\0'; + textpos = 72; + render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn, text_height * scaler, textwidth * scaler, &last_string); + textdone = 1; + switch (strlen(addon)) { + case 2: + textpos = xoffset + 114; + textwidth = 2.0 * 8.5; + render_plot_add_string(symbol, (unsigned char *) addon, textpos * scaler, addon_text_posn * scaler, text_height * scaler, textwidth * scaler, &last_string); + break; + case 5: + textpos = xoffset + 128; + textwidth = 5.0 * 8.5; + render_plot_add_string(symbol, (unsigned char *) addon, textpos * scaler, addon_text_posn * scaler, text_height * scaler, textwidth * scaler, &last_string); + break; + } + } + + if (upceanflag == 12) { + /* guard bar extensions and text formatting for UPCA */ + i = 0; + for (line = symbol->rendered->lines; line != NULL; line = line->next) { + switch (i) { + case 0: + case 1: + case 2: + case 3: + case 14: + case 15: + case 26: + case 27: + case 28: + case 29: + line->length += (5.0 * scaler); + break; + } + i++; + } + + textpart[0] = symbol->text[0]; + textpart[1] = '\0'; + textpos = -5; + textwidth = 6.2; + render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn + (2.0 * scaler), text_height * (8.0 / 11.0) * scaler, textwidth * scaler, &last_string); + for (i = 0; i < 5; i++) { + textpart[i] = symbol->text[i + 1]; + } + textpart[5] = '\0'; + textpos = 27; + textwidth = 5.0 * 8.5; + render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn, text_height * scaler, textwidth * scaler, &last_string); + for (i = 0; i < 5; i++) { + textpart[i] = symbol->text[i + 6]; + } + textpos = 68; + render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn, text_height * scaler, textwidth * scaler, &last_string); + textpart[0] = symbol->text[11]; + textpart[1] = '\0'; + textpos = 100; + textwidth = 6.2; + render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn + (2.0 * scaler), text_height * (8.0 / 11.0) * scaler, textwidth * scaler, &last_string); + textdone = 1; + switch (strlen(addon)) { + case 2: + textpos = xoffset + 116; + textwidth = 2.0 * 8.5; + render_plot_add_string(symbol, (unsigned char *) addon, textpos * scaler, addon_text_posn * scaler, text_height * scaler, textwidth * scaler, &last_string); + break; + case 5: + textpos = xoffset + 130; + textwidth = 5.0 * 8.5; + render_plot_add_string(symbol, (unsigned char *) addon, textpos * scaler, addon_text_posn * scaler, text_height * scaler, textwidth * scaler, &last_string); + break; + } + } + + if (upceanflag == 6) { + /* guard bar extensions and text formatting for UPCE */ + i = 0; + for (line = symbol->rendered->lines; line != NULL; line = line->next) { + switch (i) { + case 0: + case 1: + case 14: + case 15: + case 16: + line->length += (5.0 * scaler); + break; + } + i++; + } + + textpart[0] = symbol->text[0]; + textpart[1] = '\0'; + textpos = -5; + textwidth = 6.2; + render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn + (2.0 * scaler), text_height * (8.0 / 11.0) * scaler, textwidth * scaler, &last_string); + for (i = 0; i < 6; i++) { + textpart[i] = symbol->text[i + 1]; + } + textpart[6] = '\0'; + textpos = 24; + textwidth = 6.0 * 8.5; + render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn, text_height * scaler, textwidth * scaler, &last_string); + textpart[0] = symbol->text[7]; + textpart[1] = '\0'; + textpos = 55; + textwidth = 6.2; + render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn + (2.0 * scaler), text_height * (8.0 / 11.0) * scaler, textwidth * scaler, &last_string); + textdone = 1; + switch (strlen(addon)) { + case 2: + textpos = xoffset + 70; + textwidth = 2.0 * 8.5; + render_plot_add_string(symbol, (unsigned char *) addon, textpos * scaler, addon_text_posn * scaler, text_height * scaler, textwidth * scaler, &last_string); + break; + case 5: + textpos = xoffset + 84; + textwidth = 5.0 * 8.5; + render_plot_add_string(symbol, (unsigned char *) addon, textpos * scaler, addon_text_posn * scaler, text_height * scaler, textwidth * scaler, &last_string); + break; + } + } + + /* Put normal human readable text at the bottom (and centered) */ + if (textdone == 0) { + // caculate start xoffset to center text + render_plot_add_string(symbol, symbol->text, ((symbol->width / 2.0) + xoffset) * scaler, default_text_posn, text_height * scaler, symbol->width * scaler, &last_string); + } + } + + switch (symbol->symbology) { + case BARCODE_MAXICODE: + /* Do nothing! */ + break; + default: + if ((symbol->output_options & BARCODE_BIND) != 0) { + if ((symbol->rows > 1) && (is_stackable(symbol->symbology) == 1)) { + /* row binding */ + for (r = 1; r < symbol->rows; r++) { + line = render_plot_create_line(xoffset * scaler, ((r * row_height) + yoffset - 1) * scaler, symbol->width * scaler, 2.0 * scaler); + render_plot_add_line(symbol, line, &last_line); + } + } + } + if ((symbol->output_options & BARCODE_BOX) || (symbol->output_options & BARCODE_BIND)) { + line = render_plot_create_line(0, 0, (symbol->width + xoffset + xoffset) * scaler, symbol->border_width * scaler); + render_plot_add_line(symbol, line, &last_line); + line = render_plot_create_line(0, (symbol->height + symbol->border_width) * scaler, (symbol->width + xoffset + xoffset) * scaler, symbol->border_width * scaler); + render_plot_add_line(symbol, line, &last_line); + } + if (symbol->output_options & BARCODE_BOX) { + /* side bars */ + line = render_plot_create_line(0, 0, symbol->border_width * scaler, (symbol->height + (2 * symbol->border_width)) * scaler); + render_plot_add_line(symbol, line, &last_line); + line = render_plot_create_line((symbol->width + xoffset + xoffset - symbol->border_width) * scaler, 0, symbol->border_width * scaler, (symbol->height + (2 * symbol->border_width)) * scaler); + render_plot_add_line(symbol, line, &last_line); + } + break; + } + + if (locale) + setlocale(LC_ALL, locale); + + return 1; +} + +/* + * Create a new line with its memory allocated ready for adding to the + * rendered structure. + * + * This is much quicker than writing out each line manually (in some cases!) + */ +struct zint_render_line *render_plot_create_line(float x, float y, float width, float length) { + struct zint_render_line *line; + + line = (struct zint_render_line*) malloc(sizeof (struct zint_render_line)); + if (!line) return NULL; + + line->next = NULL; + line->x = x; + line->y = y; + line->width = width; + line->length = length; + + return line; +} + +/* + * Add the line to the current rendering and update the last line's + * next value. + */ +int render_plot_add_line(struct zint_symbol *symbol, struct zint_render_line *line, struct zint_render_line **last_line) { + if (!line) return ZINT_ERROR_MEMORY; + if (*last_line) + (*last_line)->next = line; + else + symbol->rendered->lines = line; // first line + + *last_line = line; + return 1; +} + +struct zint_render_ring *render_plot_create_ring(float x, float y, float radius, float line_width) { + struct zint_render_ring *ring; + + ring = (struct zint_render_ring *) malloc(sizeof (struct zint_render_ring)); + if (!ring) return NULL; + ring->next = NULL; + ring->x = x; + ring->y = y; + ring->radius = radius; + ring->line_width = line_width; + + return ring; +} + +int render_plot_add_ring(struct zint_symbol *symbol, struct zint_render_ring *ring, struct zint_render_ring **last_ring) { + if (!ring) return ZINT_ERROR_MEMORY; + if (*last_ring) + (*last_ring)->next = ring; + else + symbol->rendered->rings = ring; // first ring + + *last_ring = ring; + return 1; +} + +struct zint_render_hexagon *render_plot_create_hexagon(float x, float y, float height) { + struct zint_render_hexagon *hexagon; + + hexagon = (struct zint_render_hexagon*) malloc(sizeof (struct zint_render_hexagon)); + if (!hexagon) return NULL; + hexagon->next = NULL; + hexagon->x = x; + hexagon->y = y; + hexagon->height = height; + + return hexagon; +} + +int render_plot_add_hexagon(struct zint_symbol *symbol, struct zint_render_hexagon *hexagon, struct zint_render_hexagon **last_hexagon) { + if (!hexagon) return ZINT_ERROR_MEMORY; + if (*last_hexagon) + (*last_hexagon)->next = hexagon; + else + symbol->rendered->hexagons = hexagon; // first hexagon + + *last_hexagon = hexagon; + return 1; +} + +/* + * Add a string structure to the symbol. + * Coordinates assumed to be from top-center. + */ +int render_plot_add_string(struct zint_symbol *symbol, + unsigned char *text, float x, float y, float fsize, float width, + struct zint_render_string **last_string) { + struct zint_render_string *string; + + string = (struct zint_render_string*) malloc(sizeof (struct zint_render_string)); + string->next = NULL; + string->x = x; + string->y = y; + string->width = width; + string->fsize = fsize; + string->length = ustrlen(text); + string->text = (unsigned char*) malloc(sizeof (unsigned char) * (ustrlen(text) + 1)); + ustrcpy(string->text, text); + + if (*last_string) + (*last_string)->next = string; + else + symbol->rendered->strings = string; // First character + *last_string = string; + + return 1; +} + +/* + * Free the data structures created by render_plot + */ +void render_free(struct zint_symbol *symbol) { + if (symbol->rendered != NULL) { + struct zint_render_line *line; + struct zint_render_string *string; + struct zint_render_ring *ring; + struct zint_render_hexagon *hexagon; + + // Free lines + line = symbol->rendered->lines; + while (line) { + struct zint_render_line *l = line; + line = line->next; + free(l); + } + // Free Strings + string = symbol->rendered->strings; + while (string) { + struct zint_render_string *s = string; + string = string->next; + free(s->text); + free(s); + } + + // Free Rings + ring = symbol->rendered->rings; + while (ring) { + struct zint_render_ring *r = ring; + ring = ring->next; + free(r); + } + + // Free Hexagons + hexagon = symbol->rendered->hexagons; + while (hexagon) { + struct zint_render_hexagon *h = hexagon; + hexagon = hexagon->next; + free(h); + } + + // Free Render + free(symbol->rendered); + symbol->rendered = NULL; + } +} + + diff --git a/backend/rss.c b/backend/rss.c index d71177b..b6b331a 100644 --- a/backend/rss.c +++ b/backend/rss.c @@ -2,7 +2,7 @@ /* libzint - the open source barcode library - Copyright (C) 2008-2020 Robin Stuart + Copyright (C) 2008-2019 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -64,6 +64,8 @@ */ #include +#include +#include #ifdef _MSC_VER #include #endif @@ -77,7 +79,7 @@ * combins(n,r): returns the number of Combinations of r selected from n: * Combinations = n! / ((n - r)! * r!) **********************************************************************/ -static int combins(int n, int r) { +int combins(int n, int r) { int i, j; int maxDenom, minDenom; int val; @@ -118,7 +120,7 @@ static int combins(int n, int r) { * Return: * static int widths[] = element widths **********************************************************************/ -static void getRSSwidths(int val, int n, int elements, int maxWidth, int noNarrow) { +void getRSSwidths(int val, int n, int elements, int maxWidth, int noNarrow) { int bar; int elmWidth; int mxwElement; @@ -159,13 +161,12 @@ static void getRSSwidths(int val, int n, int elements, int maxWidth, int noNarro } /* GS1 DataBar-14 */ -INTERNAL int rss14(struct zint_symbol *symbol, unsigned char source[], int src_len) { - int error_number = 0, i, j; - large_int accum; - uint64_t left_pair, right_pair; - int data_character[4] = {0}, data_group[4] = {0}, v_odd[4], v_even[4]; +int rss14(struct zint_symbol *symbol, unsigned char source[], int src_len) { + int error_number = 0, i, j, mask; + short int accum[112], left_reg[112], right_reg[112], x_reg[112], y_reg[112]; + int data_character[4], data_group[4], v_odd[4], v_even[4]; int data_widths[8][4], checksum, c_left, c_right, total_widths[46], writer; - char latch; + char latch, temp[32]; int separator_row; separator_row = 0; @@ -191,25 +192,110 @@ INTERNAL int rss14(struct zint_symbol *symbol, unsigned char source[], int src_l break; } - large_load_str_u64(&accum, source, src_len); + for (i = 0; i < 112; i++) { + accum[i] = 0; + x_reg[i] = 0; + y_reg[i] = 0; + } + + for (i = 0; i < 4; i++) { + data_character[i] = 0; + data_group[i] = 0; + } + binary_load(accum, (char*) source, src_len); + strcpy(temp, "10000000000000"); if (symbol->option_1 == 2) { /* Add symbol linkage flag */ - large_add_u64(&accum, 10000000000000); + binary_load(y_reg, temp, strlen(temp)); + binary_add(accum, y_reg); + for (i = 0; i < 112; i++) { + y_reg[i] = 0; + } } /* Calculate left and right pair values */ + strcpy(temp, "4537077"); + binary_load(x_reg, temp, strlen(temp)); + + for (i = 0; i < 24; i++) { + shiftup(x_reg); + } + + for (i = 24; i >= 0; i--) { + y_reg[i] = !islarger(x_reg, accum); + if (y_reg[i] == 1) { + binary_subtract(accum, x_reg); + } + shiftdown(x_reg); + } - right_pair = large_div_u64(&accum, 4537077); - left_pair = large_lo(&accum); + for (i = 0; i < 112; i++) { + left_reg[i] = y_reg[i]; + right_reg[i] = accum[i]; + } /* Calculate four data characters */ + strcpy(temp, "1597"); + binary_load(x_reg, temp, strlen(temp)); + for (i = 0; i < 112; i++) { + accum[i] = left_reg[i]; + } - data_character[0] = left_pair / 1597; - data_character[1] = left_pair % 1597; + for (i = 0; i < 24; i++) { + shiftup(x_reg); + } + + for (i = 24; i >= 0; i--) { + y_reg[i] = !islarger(x_reg, accum); + if (y_reg[i] == 1) { + binary_subtract(accum, x_reg); + } + shiftdown(x_reg); + } + + data_character[0] = 0; + data_character[1] = 0; + mask = 0x2000; + for (i = 13; i >= 0; i--) { + if (y_reg[i] == 1) { + data_character[0] += mask; + } + if (accum[i] == 1) { + data_character[1] += mask; + } + mask = mask >> 1; + } + strcpy(temp, "1597"); + binary_load(x_reg, temp, strlen(temp)); + for (i = 0; i < 112; i++) { + accum[i] = right_reg[i]; + } - data_character[2] = right_pair / 1597; - data_character[3] = right_pair % 1597; + for (i = 0; i < 24; i++) { + shiftup(x_reg); + } + + for (i = 24; i >= 0; i--) { + y_reg[i] = !islarger(x_reg, accum); + if (y_reg[i] == 1) { + binary_subtract(accum, x_reg); + } + shiftdown(x_reg); + } + + data_character[2] = 0; + data_character[3] = 0; + mask = 0x2000; + for (i = 13; i >= 0; i--) { + if (y_reg[i] == 1) { + data_character[2] += mask; + } + if (accum[i] == 1) { + data_character[3] += mask; + } + mask = mask >> 1; + } /* Calculate odd and even subset values */ @@ -482,7 +568,7 @@ INTERNAL int rss14(struct zint_symbol *symbol, unsigned char source[], int src_l } symbol->row_height[symbol->rows] = 7; /* separator pattern */ - for (i = 1; i < 46; i++) { + for (i = 4; i < 46; i++) { if (module_is_set(symbol, symbol->rows - 2, i) == module_is_set(symbol, symbol->rows, i)) { if (!(module_is_set(symbol, symbol->rows - 2, i))) { set_module(symbol, symbol->rows - 1, i); @@ -493,9 +579,6 @@ INTERNAL int rss14(struct zint_symbol *symbol, unsigned char source[], int src_l } } } - unset_module(symbol, symbol->rows - 1, 1); - unset_module(symbol, symbol->rows - 1, 2); - unset_module(symbol, symbol->rows - 1, 3); symbol->row_height[symbol->rows - 1] = 1; if (symbol->symbology == BARCODE_RSS14STACK_CC) { /* separator pattern for composite symbol */ @@ -649,14 +732,13 @@ INTERNAL int rss14(struct zint_symbol *symbol, unsigned char source[], int src_l } /* GS1 DataBar Limited */ -INTERNAL int rsslimited(struct zint_symbol *symbol, unsigned char source[], int src_len) { - int error_number = 0, i; - large_int accum; - uint64_t left_character, right_character; +int rsslimited(struct zint_symbol *symbol, unsigned char source[], int src_len) { + int error_number = 0, i, mask; + short int accum[112], left_reg[112], right_reg[112], x_reg[112], y_reg[112]; int left_group, right_group, left_odd, left_even, right_odd, right_even; - int left_widths[14], right_widths[14]; + int left_character, right_character, left_widths[14], right_widths[14]; int checksum, check_elements[14], total_widths[46], writer, j, check_digit, count; - char latch, hrt[15]; + char latch, hrt[15], temp[32]; int separator_row; separator_row = 0; @@ -684,60 +766,172 @@ INTERNAL int rsslimited(struct zint_symbol *symbol, unsigned char source[], int symbol->rows += 1; } - large_load_str_u64(&accum, source, src_len); + for (i = 0; i < 112; i++) { + accum[i] = 0; + x_reg[i] = 0; + y_reg[i] = 0; + } + binary_load(accum, (char*) source, src_len); if (symbol->option_1 == 2) { /* Add symbol linkage flag */ - large_add_u64(&accum, 2015133531096); + strcpy(temp, "2015133531096"); + binary_load(y_reg, temp, strlen(temp)); + binary_add(accum, y_reg); + for (i = 0; i < 112; i++) { + y_reg[i] = 0; + } } /* Calculate left and right pair values */ + strcpy(temp, "2013571"); + binary_load(x_reg, temp, strlen(temp)); - right_character = large_div_u64(&accum, 2013571); - left_character = large_lo(&accum); + for (i = 0; i < 24; i++) { + shiftup(x_reg); + } - if (left_character >= 1996939) { - left_group = 6; - left_character -= 1996939; - } else if (left_character >= 1979845) { - left_group = 5; - left_character -= 1979845; - } else if (left_character >= 1491021) { - left_group = 4; - left_character -= 1491021; - } else if (left_character >= 1000776) { - left_group = 3; - left_character -= 1000776; - } else if (left_character >= 820064) { - left_group = 2; - left_character -= 820064; - } else if (left_character >= 183064) { - left_group = 1; - left_character -= 183064; - } else { - left_group = 0; + for (i = 24; i >= 0; i--) { + y_reg[i] = !islarger(x_reg, accum); + if (y_reg[i] == 1) { + binary_subtract(accum, x_reg); + } + shiftdown(x_reg); } - if (right_character >= 1996939) { - right_group = 6; - right_character -= 1996939; - } else if (right_character >= 1979845) { - right_group = 5; - right_character -= 1979845; - } else if (right_character >= 1491021) { - right_group = 4; - right_character -= 1491021; - } else if (right_character >= 1000776) { - right_group = 3; - right_character -= 1000776; - } else if (right_character >= 820064) { - right_group = 2; - right_character -= 820064; - } else if (right_character >= 183064) { + for (i = 0; i < 112; i++) { + left_reg[i] = y_reg[i]; + right_reg[i] = accum[i]; + } + + left_group = 0; + strcpy(temp, "183063"); + binary_load(accum, temp, strlen(temp)); + if (islarger(left_reg, accum)) { + left_group = 1; + } + strcpy(temp, "820063"); + binary_load(accum, temp, strlen(temp)); + if (islarger(left_reg, accum)) { + left_group = 2; + } + strcpy(temp, "1000775"); + binary_load(accum, temp, strlen(temp)); + if (islarger(left_reg, accum)) { + left_group = 3; + } + strcpy(temp, "1491020"); + binary_load(accum, temp, strlen(temp)); + if (islarger(left_reg, accum)) { + left_group = 4; + } + strcpy(temp, "1979844"); + binary_load(accum, temp, strlen(temp)); + if (islarger(left_reg, accum)) { + left_group = 5; + } + strcpy(temp, "1996938"); + binary_load(accum, temp, strlen(temp)); + if (islarger(left_reg, accum)) { + left_group = 6; + } + right_group = 0; + strcpy(temp, "183063"); + binary_load(accum, temp, strlen(temp)); + if (islarger(right_reg, accum)) { right_group = 1; - right_character -= 183064; - } else { - right_group = 0; + } + strcpy(temp, "820063"); + binary_load(accum, temp, strlen(temp)); + if (islarger(right_reg, accum)) { + right_group = 2; + } + strcpy(temp, "1000775"); + binary_load(accum, temp, strlen(temp)); + if (islarger(right_reg, accum)) { + right_group = 3; + } + strcpy(temp, "1491020"); + binary_load(accum, temp, strlen(temp)); + if (islarger(right_reg, accum)) { + right_group = 4; + } + strcpy(temp, "1979844"); + binary_load(accum, temp, strlen(temp)); + if (islarger(right_reg, accum)) { + right_group = 5; + } + strcpy(temp, "1996938"); + binary_load(accum, temp, strlen(temp)); + if (islarger(right_reg, accum)) { + right_group = 6; + } + + switch (left_group) { + case 1: strcpy(temp, "183064"); + binary_load(accum, temp, strlen(temp)); + binary_subtract(left_reg, accum); + break; + case 2: strcpy(temp, "820064"); + binary_load(accum, temp, strlen(temp)); + binary_subtract(left_reg, accum); + break; + case 3: strcpy(temp, "1000776"); + binary_load(accum, temp, strlen(temp)); + binary_subtract(left_reg, accum); + break; + case 4: strcpy(temp, "1491021"); + binary_load(accum, temp, strlen(temp)); + binary_subtract(left_reg, accum); + break; + case 5: strcpy(temp, "1979845"); + binary_load(accum, temp, strlen(temp)); + binary_subtract(left_reg, accum); + break; + case 6: strcpy(temp, "1996939"); + binary_load(accum, temp, strlen(temp)); + binary_subtract(left_reg, accum); + break; + } + + switch (right_group) { + case 1: strcpy(temp, "183064"); + binary_load(accum, temp, strlen(temp)); + binary_subtract(right_reg, accum); + break; + case 2: strcpy(temp, "820064"); + binary_load(accum, temp, strlen(temp)); + binary_subtract(right_reg, accum); + break; + case 3: strcpy(temp, "1000776"); + binary_load(accum, temp, strlen(temp)); + binary_subtract(right_reg, accum); + break; + case 4: strcpy(temp, "1491021"); + binary_load(accum, temp, strlen(temp)); + binary_subtract(right_reg, accum); + break; + case 5: strcpy(temp, "1979845"); + binary_load(accum, temp, strlen(temp)); + binary_subtract(right_reg, accum); + break; + case 6: strcpy(temp, "1996939"); + binary_load(accum, temp, strlen(temp)); + binary_subtract(right_reg, accum); + break; + } + + left_character = 0; + right_character = 0; + mask = 0x800000; + for (i = 23; i >= 0; i--) { + if (left_reg[i] == 1) { + left_character += mask; + } + if (right_reg[i] == 1) { + right_character += mask; + } + mask = mask >> 1; } left_odd = left_character / t_even_ltd[left_group]; @@ -864,8 +1058,8 @@ INTERNAL int rsslimited(struct zint_symbol *symbol, unsigned char source[], int } /* Handles all data encodation from section 7.2.5 of ISO/IEC 24724 */ -static int rss_binary_string(struct zint_symbol *symbol, char source[], char binary_string[]) { - int encoding_method, i, j, read_posn, last_digit, debug = (symbol->debug & ZINT_DEBUG_PRINT), mode = NUMERIC; +int rss_binary_string(struct zint_symbol *symbol, char source[], char binary_string[]) { + int encoding_method, i, j, read_posn, last_digit, debug = symbol->debug, mode = NUMERIC; int symbol_characters, characters_per_row; #ifndef _MSC_VER char general_field[strlen(source) + 1]; @@ -1189,7 +1383,7 @@ static int rss_binary_string(struct zint_symbol *symbol, char source[], char bin rest of the data (if any) goes into a general-purpose data compaction field */ j = 0; - for (i = read_posn; i < (int) strlen(source); i++) { + for (i = read_posn; i < strlen(source); i++) { general_field[j] = source[i]; j++; } @@ -1316,7 +1510,7 @@ static int rss_binary_string(struct zint_symbol *symbol, char source[], char bin } /* GS1 DataBar Expanded */ -INTERNAL int rssexpanded(struct zint_symbol *symbol, unsigned char source[], int src_len) { +int rssexpanded(struct zint_symbol *symbol, unsigned char source[], int src_len) { int i, j, k, p, data_chars, vs[21], group[21], v_odd[21], v_even[21]; char substring[21][14], latch; int char_widths[21][8], checksum, check_widths[8], c_group; @@ -1763,3 +1957,5 @@ INTERNAL int rssexpanded(struct zint_symbol *symbol, unsigned char source[], int return 0; } + + diff --git a/backend/sjis.c b/backend/sjis.c deleted file mode 100644 index daa8aae..0000000 --- a/backend/sjis.c +++ /dev/null @@ -1,1591 +0,0 @@ -/* - libzint - the open source barcode library - Copyright (C) 2008-2020 Robin Stuart - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - 3. Neither the name of the project nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - SUCH DAMAGE. - */ -/* vim: set ts=4 sw=4 et : */ -/* - * Adapted from the GNU LIBICONV library and patched to make compatible with - * https://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/SHIFTJIS.TXT - * with the exception of one duplicate mapping to reverse solidus 0x815F - * and the mapping of user-defined PUA codepoints U+E000..E757. - */ -/* - * Copyright (C) 1999-2002, 2016 Free Software Foundation, Inc. - * This file is part of the GNU LIBICONV Library. - * - * The GNU LIBICONV Library is free software; you can redistribute it - * and/or modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * The GNU LIBICONV Library 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 GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with the GNU LIBICONV Library; see the file COPYING.LIB. - * If not, see . - */ -#include -#ifdef _MSC_VER -#include -#endif -#include "common.h" -#include "sjis.h" - -INTERNAL int utf_to_eci(const int eci, const unsigned char source[], unsigned char dest[], size_t *length); /* Convert Unicode to other encodings */ - -/* - * JISX0201.1976-0 (libiconv-1.16/lib/jisx0201.h) - */ - -static int jisx0201_wctomb(unsigned int* r, unsigned int wc) { - if (wc < 0x0080 && !(wc == 0x005c || wc == 0x007e)) { - *r = wc; - return 1; - } - if (wc == 0x00a5) { - *r = 0x5c; - return 1; - } - if (wc == 0x203e) { - *r = 0x7e; - return 1; - } - if (wc >= 0xff61 && wc < 0xffa0) { - *r = wc - 0xfec0; - return 1; - } - return 0; -} - -/* - * JISX0208.1990-0 (libiconv-1.16/lib/jisx0208.h) - */ - -/* ZINT: Table converted from JIS X 0208 to Shift JIS values using tools/cnv_sjis.php: - * -while ($line = fgets(STDIN)) { - echo preg_replace_callback('/0x([0-9a-f]{4})/', function ($matches) { - $dec = hexdec($matches[1]); - $c1 = $dec >> 8; - $c2 = ($dec & 0xFF); - $t1 = ($c1 - 0x21) >> 1; - $t2 = ((($c1 - 0x21) & 1) ? 0x5e : 0) + ($c2 - 0x21); - $r = (($t1 < 0x1f ? ($t1 + 0x81) : ($t1 + 0xc1)) << 8) | ($t2 < 0x3f ? ($t2 + 0x40) : ($t2 + 0x41)); - return '0x' . dechex($r); - }, $line); -} - */ -static const unsigned short jisx0208_2charset[6879] = { - 0x8191, 0x8192, 0x8198, 0x814e, 0x81ca, 0x818b, 0x817d, 0x814c, - 0x81f7, 0x817e, 0x8180, 0x839f, 0x83a0, 0x83a1, 0x83a2, 0x83a3, - 0x83a4, 0x83a5, 0x83a6, 0x83a7, 0x83a8, 0x83a9, 0x83aa, 0x83ab, - 0x83ac, 0x83ad, 0x83ae, 0x83af, 0x83b0, 0x83b1, 0x83b2, 0x83b3, - 0x83b4, 0x83b5, 0x83b6, 0x83bf, 0x83c0, 0x83c1, 0x83c2, 0x83c3, - 0x83c4, 0x83c5, 0x83c6, 0x83c7, 0x83c8, 0x83c9, 0x83ca, 0x83cb, - 0x83cc, 0x83cd, 0x83ce, 0x83cf, 0x83d0, 0x83d1, 0x83d2, 0x83d3, - 0x83d4, 0x83d5, 0x83d6, 0x8446, 0x8440, 0x8441, 0x8442, 0x8443, - 0x8444, 0x8445, 0x8447, 0x8448, 0x8449, 0x844a, 0x844b, 0x844c, - 0x844d, 0x844e, 0x844f, 0x8450, 0x8451, 0x8452, 0x8453, 0x8454, - 0x8455, 0x8456, 0x8457, 0x8458, 0x8459, 0x845a, 0x845b, 0x845c, - 0x845d, 0x845e, 0x845f, 0x8460, 0x8470, 0x8471, 0x8472, 0x8473, - 0x8474, 0x8475, 0x8477, 0x8478, 0x8479, 0x847a, 0x847b, 0x847c, - 0x847d, 0x847e, 0x8480, 0x8481, 0x8482, 0x8483, 0x8484, 0x8485, - 0x8486, 0x8487, 0x8488, 0x8489, 0x848a, 0x848b, 0x848c, 0x848d, - 0x848e, 0x848f, 0x8490, 0x8491, 0x8476, 0x815d, 0x815c, 0x8161, - 0x8165, 0x8166, 0x8167, 0x8168, 0x81f5, 0x81f6, 0x8164, 0x8163, - 0x81f1, 0x818c, 0x818d, 0x81a6, 0x818e, 0x81f0, 0x81a9, 0x81aa, - 0x81a8, 0x81ab, 0x81cb, 0x81cc, 0x81cd, 0x81dd, 0x81ce, 0x81de, - 0x81b8, 0x81b9, 0x817c, 0x81e3, 0x81e5, 0x8187, 0x81da, 0x81c8, - 0x81c9, 0x81bf, 0x81be, 0x81e7, 0x81e8, 0x8188, 0x81e6, 0x81e4, - 0x81e0, 0x8182, 0x81df, 0x8185, 0x8186, 0x81e1, 0x81e2, 0x81bc, - 0x81bd, 0x81ba, 0x81bb, 0x81db, 0x81dc, 0x849f, 0x84aa, 0x84a0, - 0x84ab, 0x84a1, 0x84ac, 0x84a2, 0x84ad, 0x84a4, 0x84af, 0x84a3, - 0x84ae, 0x84a5, 0x84ba, 0x84b5, 0x84b0, 0x84a7, 0x84bc, 0x84b7, - 0x84b2, 0x84a6, 0x84b6, 0x84bb, 0x84b1, 0x84a8, 0x84b8, 0x84bd, - 0x84b3, 0x84a9, 0x84b9, 0x84be, 0x84b4, 0x81a1, 0x81a0, 0x81a3, - 0x81a2, 0x81a5, 0x81a4, 0x819f, 0x819e, 0x819b, 0x819d, 0x819c, - 0x81fc, 0x819a, 0x8199, 0x818a, 0x8189, 0x81f4, 0x81f3, 0x81f2, - 0x8140, 0x8141, 0x8142, 0x8156, 0x8158, 0x8159, 0x815a, 0x8171, - 0x8172, 0x8173, 0x8174, 0x8175, 0x8176, 0x8177, 0x8178, 0x8179, - 0x817a, 0x81a7, 0x81ac, 0x816b, 0x816c, 0x8160, 0x829f, 0x82a0, - 0x82a1, 0x82a2, 0x82a3, 0x82a4, 0x82a5, 0x82a6, 0x82a7, 0x82a8, - 0x82a9, 0x82aa, 0x82ab, 0x82ac, 0x82ad, 0x82ae, 0x82af, 0x82b0, - 0x82b1, 0x82b2, 0x82b3, 0x82b4, 0x82b5, 0x82b6, 0x82b7, 0x82b8, - 0x82b9, 0x82ba, 0x82bb, 0x82bc, 0x82bd, 0x82be, 0x82bf, 0x82c0, - 0x82c1, 0x82c2, 0x82c3, 0x82c4, 0x82c5, 0x82c6, 0x82c7, 0x82c8, - 0x82c9, 0x82ca, 0x82cb, 0x82cc, 0x82cd, 0x82ce, 0x82cf, 0x82d0, - 0x82d1, 0x82d2, 0x82d3, 0x82d4, 0x82d5, 0x82d6, 0x82d7, 0x82d8, - 0x82d9, 0x82da, 0x82db, 0x82dc, 0x82dd, 0x82de, 0x82df, 0x82e0, - 0x82e1, 0x82e2, 0x82e3, 0x82e4, 0x82e5, 0x82e6, 0x82e7, 0x82e8, - 0x82e9, 0x82ea, 0x82eb, 0x82ec, 0x82ed, 0x82ee, 0x82ef, 0x82f0, - 0x82f1, 0x814a, 0x814b, 0x8154, 0x8155, 0x8340, 0x8341, 0x8342, - 0x8343, 0x8344, 0x8345, 0x8346, 0x8347, 0x8348, 0x8349, 0x834a, - 0x834b, 0x834c, 0x834d, 0x834e, 0x834f, 0x8350, 0x8351, 0x8352, - 0x8353, 0x8354, 0x8355, 0x8356, 0x8357, 0x8358, 0x8359, 0x835a, - 0x835b, 0x835c, 0x835d, 0x835e, 0x835f, 0x8360, 0x8361, 0x8362, - 0x8363, 0x8364, 0x8365, 0x8366, 0x8367, 0x8368, 0x8369, 0x836a, - 0x836b, 0x836c, 0x836d, 0x836e, 0x836f, 0x8370, 0x8371, 0x8372, - 0x8373, 0x8374, 0x8375, 0x8376, 0x8377, 0x8378, 0x8379, 0x837a, - 0x837b, 0x837c, 0x837d, 0x837e, 0x8380, 0x8381, 0x8382, 0x8383, - 0x8384, 0x8385, 0x8386, 0x8387, 0x8388, 0x8389, 0x838a, 0x838b, - 0x838c, 0x838d, 0x838e, 0x838f, 0x8390, 0x8391, 0x8392, 0x8393, - 0x8394, 0x8395, 0x8396, 0x8145, 0x815b, 0x8152, 0x8153, 0x88ea, - 0x929a, 0x8eb5, 0x969c, 0x8fe4, 0x8e4f, 0x8fe3, 0x89ba, 0x9573, - 0x975e, 0x98a0, 0x894e, 0x8a8e, 0x98a1, 0x90a2, 0x99c0, 0x8b75, - 0x95b8, 0x8fe5, 0x97bc, 0x95c0, 0x98a2, 0x9286, 0x98a3, 0x8bf8, - 0x98a4, 0x8adb, 0x924f, 0x8ee5, 0x98a5, 0x98a6, 0x98a7, 0x9454, - 0x8b76, 0x9456, 0x93e1, 0x8cc1, 0x9652, 0xe568, 0x98a8, 0x8fe6, - 0x98a9, 0x89b3, 0x8be3, 0x8cee, 0x96e7, 0x9ba4, 0x9790, 0x93fb, - 0x8aa3, 0x8b54, 0x98aa, 0x98ab, 0x97b9, 0x975c, 0x9188, 0x98ad, - 0x8e96, 0x93f1, 0x98b0, 0x895d, 0x8cdd, 0x8cdc, 0x88e4, 0x986a, - 0x9869, 0x8db1, 0x889f, 0x98b1, 0x98b2, 0x98b3, 0x9653, 0x98b4, - 0x8cf0, 0x88e5, 0x9692, 0x8b9c, 0x8b9d, 0x8b9e, 0x92e0, 0x97ba, - 0x98b5, 0x98b6, 0x98b7, 0x906c, 0x8f59, 0x906d, 0x98bc, 0x98ba, - 0x98bb, 0x8b77, 0x8da1, 0x89ee, 0x98b9, 0x98b8, 0x95a7, 0x8e65, - 0x8e64, 0x91bc, 0x98bd, 0x9574, 0x90e5, 0x8157, 0x98be, 0x98c0, - 0x91e3, 0x97df, 0x88c8, 0x98bf, 0x89bc, 0x8bc2, 0x9287, 0x8c8f, - 0x98c1, 0x9443, 0x8ae9, 0x98c2, 0x88c9, 0x8cde, 0x8aea, 0x959a, - 0x94b0, 0x8b78, 0x89ef, 0x98e5, 0x9360, 0x948c, 0x98c4, 0x94ba, - 0x97e0, 0x904c, 0x8e66, 0x8e97, 0x89be, 0x92cf, 0x9241, 0x98c8, - 0x88ca, 0x92e1, 0x8f5a, 0x8db2, 0x9743, 0x91cc, 0x89bd, 0x98c7, - 0x975d, 0x98c3, 0x98c5, 0x8dec, 0x98c6, 0x9b43, 0x98ce, 0x98d1, - 0x98cf, 0x89c0, 0x95b9, 0x98c9, 0x98cd, 0x8cf1, 0x8e67, 0x8aa4, - 0x98d2, 0x98ca, 0x97e1, 0x8e98, 0x98cb, 0x98d0, 0x98d3, 0x98cc, - 0x8b9f, 0x88cb, 0x8ba0, 0x89bf, 0x9b44, 0x9699, 0x958e, 0x8cf2, - 0x904e, 0x97b5, 0x95d6, 0x8c57, 0x91a3, 0x89e2, 0x8f72, 0x98d7, - 0x98dc, 0x98da, 0x98d5, 0x91ad, 0x98d8, 0x98db, 0x98d9, 0x95db, - 0x98d6, 0x904d, 0x9693, 0x98dd, 0x98de, 0x8f43, 0x98eb, 0x946f, - 0x9555, 0x98e6, 0x95ee, 0x89b4, 0x98ea, 0x98e4, 0x98ed, 0x9171, - 0x8cc2, 0x947b, 0xe0c5, 0x98ec, 0x937c, 0x98e1, 0x8cf4, 0x8cf3, - 0x98df, 0x8ed8, 0x98e7, 0x95ed, 0x926c, 0x98e3, 0x8c91, 0x98e0, - 0x98e8, 0x98e2, 0x97cf, 0x98e9, 0x9860, 0x8be4, 0x8c90, 0x98ee, - 0x98ef, 0x98f3, 0x88cc, 0x95ce, 0x98f2, 0x98f1, 0x98f5, 0x98f4, - 0x92e2, 0x8c92, 0x98f6, 0x8ec3, 0x91a4, 0x92e3, 0x8bf4, 0x98f7, - 0x8b55, 0x98f8, 0x98fa, 0x9654, 0x8c86, 0x8e50, 0x94f5, 0x98f9, - 0x8dc3, 0x9762, 0x98fc, 0x9942, 0x98fb, 0x8dc2, 0x8f9d, 0x8c58, - 0x9943, 0x8bcd, 0x9940, 0x9941, 0x93ad, 0x919c, 0x8ba1, 0x966c, - 0x9944, 0x97bb, 0x9945, 0x9948, 0x9946, 0x916d, 0x9947, 0x9949, - 0x994b, 0x994a, 0x95c6, 0x8b56, 0x994d, 0x994e, 0x89ad, 0x994c, - 0x8ef2, 0x9951, 0x9950, 0x994f, 0x98d4, 0x9952, 0x8f9e, 0x9953, - 0x9744, 0x96d7, 0x9955, 0x9954, 0x9957, 0x9956, 0x9958, 0x9959, - 0x88f2, 0x8cb3, 0x8c5a, 0x8f5b, 0x929b, 0x8ba2, 0x90e6, 0x8cf5, - 0x8d8e, 0x995b, 0x96c6, 0x9365, 0x8e99, 0x995a, 0x995c, 0x937d, - 0x8a95, 0x995d, 0x93fc, 0x9153, 0x995f, 0x9960, 0x94aa, 0x8cf6, - 0x985a, 0x9961, 0x8ba4, 0x95ba, 0x91b4, 0x8bef, 0x9354, 0x8c93, - 0x9962, 0x9963, 0x93e0, 0x897e, 0x9966, 0x8dfb, 0x9965, 0x8dc4, - 0x9967, 0xe3ec, 0x9968, 0x9660, 0x9969, 0x996a, 0x996b, 0x8fe7, - 0x8eca, 0x8aa5, 0x996e, 0x996c, 0x96bb, 0x996d, 0x9579, 0x996f, - 0x9970, 0x9971, 0x937e, 0x9975, 0x9973, 0x9974, 0x9972, 0x8de1, - 0x9976, 0x96e8, 0x97e2, 0x9977, 0x90a6, 0x9978, 0x8f79, 0x9979, - 0x929c, 0x97bd, 0x9380, 0x99c3, 0x997a, 0xeaa3, 0x8bc3, 0x997b, - 0x967d, 0x8f88, 0x91fa, 0x997d, 0x93e2, 0x997e, 0x9980, 0x8a4d, - 0x9981, 0x8ba5, 0x93ca, 0x899a, 0x8f6f, 0x949f, 0x9982, 0x9381, - 0x906e, 0x9983, 0x95aa, 0x90d8, 0x8aa0, 0x8aa7, 0x9984, 0x9986, - 0x8c59, 0x9985, 0x97f1, 0x8f89, 0x94bb, 0x95ca, 0x9987, 0x9798, - 0x9988, 0x9989, 0x939e, 0x998a, 0x90a7, 0x8dfc, 0x8c94, 0x998b, - 0x8e68, 0x8d8f, 0x92e4, 0x998d, 0x91a5, 0x8ded, 0x998e, 0x998f, - 0x914f, 0x998c, 0x9991, 0x9655, 0x8d84, 0x9990, 0x8c95, 0x8ddc, - 0x948d, 0x9994, 0x9992, 0x959b, 0x8fe8, 0x999b, 0x8a84, 0x9995, - 0x9993, 0x916e, 0x9997, 0x9996, 0x8a63, 0x8c80, 0x999c, 0x97ab, - 0x9998, 0x999d, 0x999a, 0x9999, 0x97cd, 0x8cf7, 0x89c1, 0x97f2, - 0x8f95, 0x9377, 0x8d85, 0x99a0, 0x99a1, 0x97e3, 0x984a, 0x99a3, - 0x8cf8, 0x99a2, 0x8a4e, 0x99a4, 0x9675, 0x92ba, 0x9745, 0x95d7, - 0x99a5, 0xe8d3, 0x93ae, 0x99a6, 0x8aa8, 0x96b1, 0x8f9f, 0x99a7, - 0x95e5, 0x99ab, 0x90a8, 0x99a8, 0x8bce, 0x99a9, 0x8aa9, 0x8c4d, - 0x99ac, 0x99ad, 0x99ae, 0x99af, 0x8ed9, 0x8cf9, 0x96dc, 0x96e6, - 0x93f5, 0x95ef, 0x99b0, 0x99b1, 0x99b3, 0x99b5, 0x99b4, 0x99b6, - 0x89bb, 0x966b, 0x8dfa, 0x99b7, 0x9178, 0x8fa0, 0x8ba7, 0x99b8, - 0x94d9, 0x99b9, 0x99ba, 0x99bb, 0x99bc, 0x9543, 0x8be6, 0x88e3, - 0x93bd, 0x99bd, 0x8f5c, 0x90e7, 0x99bf, 0x99be, 0x8fa1, 0x8cdf, - 0x99c1, 0x94bc, 0x99c2, 0x94da, 0x91b2, 0x91ec, 0x8ba6, 0x93ec, - 0x9250, 0x948e, 0x966d, 0x99c4, 0x90e8, 0x8c54, 0x99c5, 0x99c6, - 0x894b, 0x88f3, 0x8aeb, 0x91a6, 0x8b70, 0x9791, 0x99c9, 0x89b5, - 0x99c8, 0x8ba8, 0x99ca, 0x96ef, 0x99cb, 0x97d0, 0x8cfa, 0x8cb4, - 0x99cc, 0x99ce, 0x99cd, 0x907e, 0x8958, 0x897d, 0x99cf, 0x99d0, - 0x8cb5, 0x99d1, 0x8b8e, 0x8e51, 0x99d2, 0x9694, 0x8db3, 0x8b79, - 0x9746, 0x916f, 0x94bd, 0x8efb, 0x8f66, 0x8ee6, 0x8ef3, 0x8f96, - 0x94be, 0x99d5, 0x8962, 0x9170, 0x8cfb, 0x8cc3, 0x8be5, 0x99d9, - 0x9240, 0x91fc, 0x8ba9, 0x8fa2, 0x99da, 0x99d8, 0x89c2, 0x91e4, - 0x8eb6, 0x8e6a, 0x8945, 0x8a90, 0x8d86, 0x8e69, 0x99db, 0x99dc, - 0x8b68, 0x8a65, 0x8d87, 0x8b67, 0x92dd, 0x8944, 0x93af, 0x96bc, - 0x8d40, 0x9799, 0x9366, 0x8cfc, 0x8c4e, 0x99e5, 0x8be1, 0x9669, - 0x94db, 0x99e4, 0x8adc, 0x99df, 0x99e0, 0x99e2, 0x99e3, 0x8b7a, - 0x9081, 0x95ab, 0x99e1, 0x99dd, 0x8ce1, 0x99de, 0x9843, 0x95f0, - 0x92e6, 0x8ce0, 0x8d90, 0x99e6, 0x93db, 0x99ea, 0x8efc, 0x8ef4, - 0x99ed, 0x99eb, 0x96a1, 0x99e8, 0x99f1, 0x99ec, 0x99ef, 0x8cc4, - 0x96bd, 0x99f0, 0x99f2, 0x99f4, 0x8dee, 0x9861, 0x99e9, 0x99e7, - 0x99f3, 0x99ee, 0x99f6, 0x9a42, 0x99f8, 0x99fc, 0x9a40, 0x99f9, - 0x9a5d, 0x8de7, 0x8a50, 0x99f7, 0x9a44, 0x88f4, 0x9a43, 0x88a3, - 0x9569, 0x9a41, 0x99fa, 0x99f5, 0x99fb, 0x8dc6, 0x9a45, 0x88f5, - 0x9a4e, 0x9a46, 0x9a47, 0x8fa3, 0x9689, 0x9a4c, 0x9a4b, 0x934e, - 0x9a4d, 0x9a4a, 0x8953, 0x8db4, 0x904f, 0x9a48, 0x9382, 0x9a49, - 0x88a0, 0x9a53, 0x9742, 0x8fa5, 0x9a59, 0x9a58, 0x9a4f, 0x91c1, - 0x9a50, 0x91ed, 0x9a55, 0x8fa4, 0x9a52, 0x96e2, 0x8c5b, 0x9a56, - 0x9a57, 0x9a54, 0x9a5a, 0x9a51, 0x9a60, 0x9a65, 0x9a61, 0x9a5c, - 0x9a66, 0x9150, 0x9a68, 0x8d41, 0x9a5e, 0x929d, 0x9a62, 0x9a5b, - 0x8aab, 0x8aec, 0x8a85, 0x9a63, 0x9a5f, 0x8c96, 0x9a69, 0x9a67, - 0x9172, 0x8b69, 0x8baa, 0x9a64, 0x8bf2, 0x8963, 0x9a6d, 0x9a6b, - 0x9aa5, 0x9a70, 0x9a6a, 0x9a6e, 0x9a6c, 0x8e6b, 0x9a6f, 0x9a72, - 0x9a77, 0x9a75, 0x9a74, 0x9251, 0x89c3, 0x9a71, 0x9a73, 0x8fa6, - 0x8952, 0x9a76, 0x89dc, 0x9a82, 0x8ffa, 0x9a7d, 0x9a7b, 0x9a7c, - 0x9a7e, 0x895c, 0x9158, 0x9a78, 0x9a79, 0x8a9a, 0x9a81, 0x8aed, - 0x9a84, 0x9a80, 0x9a83, 0x95ac, 0x93d3, 0x94b6, 0x9a86, 0x9a85, - 0x8a64, 0x9a87, 0x9a8a, 0x9a89, 0x9a88, 0x9458, 0x9a8b, 0x9a8c, - 0x9a8e, 0x9a8d, 0x9a90, 0x9a93, 0x9a91, 0x9a8f, 0x9a92, 0x9a94, - 0x9a95, 0x9a96, 0x9a97, 0x9a98, 0x9964, 0x8efa, 0x8e6c, 0x89f1, - 0x88f6, 0x9263, 0x9a99, 0x8da2, 0x88cd, 0x907d, 0x9a9a, 0x8cc5, - 0x8d91, 0x9a9c, 0x9a9b, 0x95de, 0x9a9d, 0x9a9f, 0x9a9e, 0x9aa0, - 0x9aa1, 0x8c97, 0x8980, 0x9aa2, 0x9aa4, 0x9aa3, 0x9aa6, 0x9379, - 0x9aa7, 0x88b3, 0x8ddd, 0x8c5c, 0x926e, 0x9aa8, 0x9aa9, 0x9aab, - 0x9aac, 0x8de2, 0x8bcf, 0x9656, 0x9aaa, 0x9aad, 0x8dbf, 0x8d42, - 0x9ab1, 0x8da3, 0x9252, 0x9aae, 0x92d8, 0x9ab2, 0x9082, 0x9ab0, - 0x9ab3, 0x8c5e, 0x9ab4, 0x9ab5, 0x8d43, 0x8a5f, 0x9ab7, 0x9ab8, - 0x9ab9, 0x9ab6, 0x9aaf, 0x9aba, 0x9abb, 0x9684, 0x8fe9, 0x9abd, - 0x9abe, 0x9abc, 0x9ac0, 0x9457, 0x88e6, 0x9575, 0x9ac1, 0x8ffb, - 0x8eb7, 0x947c, 0x8aee, 0x8de9, 0x9678, 0x93b0, 0x8c98, 0x91cd, - 0x9abf, 0x9ac2, 0x91c2, 0x9ac3, 0x9ac4, 0x9ac6, 0x92e7, 0x8aac, - 0xea9f, 0x8981, 0x95f1, 0x8fea, 0x9367, 0x8de4, 0x9acc, 0x95bb, - 0x97db, 0x89f2, 0x9ac8, 0x9159, 0x9acb, 0x9383, 0x9368, 0x9384, - 0x94b7, 0x92cb, 0x8dc7, 0x9ac7, 0x8996, 0x9355, 0x9ac9, 0x9ac5, - 0x906f, 0x9acd, 0x8f6d, 0x8bab, 0x9ace, 0x95e6, 0x919d, 0x92c4, - 0x9ad0, 0x966e, 0x9ad1, 0x9ad6, 0x95ad, 0x9ad5, 0x9acf, 0x9ad2, - 0x9ad4, 0x8da4, 0x95c7, 0x9ad7, 0x9264, 0x89f3, 0x8feb, 0x9ad9, - 0x9ad8, 0x8d88, 0x9ada, 0x9adc, 0x9adb, 0x9ade, 0x9ad3, 0x9ae0, - 0x9adf, 0x9add, 0x8e6d, 0x9070, 0x9173, 0x9ae1, 0x90ba, 0x88eb, - 0x9484, 0x92d9, 0x9ae3, 0x9ae2, 0x9ae4, 0x9ae5, 0x9ae6, 0x9ae7, - 0x95cf, 0x9ae8, 0x89c4, 0x9ae9, 0x975b, 0x8a4f, 0x99c7, 0x8f67, - 0x91bd, 0x9aea, 0x96e9, 0x96b2, 0x9aec, 0x91e5, 0x9356, 0x91be, - 0x9576, 0x9aed, 0x9aee, 0x899b, 0x8eb8, 0x9aef, 0x88ce, 0x9af0, - 0x9af1, 0x8982, 0x8aef, 0x93de, 0x95f2, 0x9af5, 0x9174, 0x9af4, - 0x8c5f, 0x967a, 0x9af3, 0x9385, 0x9af7, 0x9af6, 0x9af9, 0x9af8, - 0x899c, 0x9afa, 0x8fa7, 0x9afc, 0x9244, 0x9afb, 0x95b1, 0x8f97, - 0x937a, 0x9b40, 0x8d44, 0x9b41, 0x9440, 0x94dc, 0x96cf, 0x9444, - 0x9b4a, 0x8b57, 0x9764, 0x96ad, 0x9baa, 0x9b42, 0x9b45, 0x91c3, - 0x9657, 0x9369, 0x9b46, 0x9685, 0x8dc8, 0x8fa8, 0x9b47, 0x8e6f, - 0x8e6e, 0x88b7, 0x8cc6, 0x90a9, 0x88cf, 0x9b4b, 0x9b4c, 0x9b49, - 0x8957, 0x8aad, 0x9b48, 0x96c3, 0x9550, 0x88a6, 0x88f7, 0x8e70, - 0x88d0, 0x88a1, 0x9b51, 0x9b4f, 0x96ba, 0x9b52, 0x9b50, 0x9b4e, - 0x9050, 0x9b4d, 0x95d8, 0x8ce2, 0x9b56, 0x9b57, 0x8fa9, 0x9b53, - 0x984b, 0x946b, 0x9b55, 0x8da5, 0x9b58, 0x9577, 0x9b59, 0x9b54, - 0x96b9, 0x947d, 0x9b5a, 0x9551, 0x9b5b, 0x9b5f, 0x9b5c, 0x89c5, - 0x9b5e, 0x8eb9, 0x9b5d, 0x8c99, 0x9b6b, 0x9b64, 0x9b61, 0x9284, - 0x9b60, 0x9b62, 0x9b63, 0x9b65, 0x9b66, 0x8af0, 0x9b68, 0x9b67, - 0x9b69, 0x8fec, 0x9b6c, 0x92da, 0x8964, 0x9b6a, 0x9b6d, 0x9b6e, - 0x9b71, 0x9b6f, 0x9b70, 0x8e71, 0x9b72, 0x8d45, 0x9b73, 0x8e9a, - 0x91b6, 0x9b74, 0x9b75, 0x8e79, 0x8d46, 0x96d0, 0x8b47, 0x8cc7, - 0x9b76, 0x8a77, 0x9b77, 0x91b7, 0x9b78, 0x9ba1, 0x9b79, 0x9b7a, - 0x9b7b, 0x9b7d, 0x9b7e, 0x9b80, 0x91ee, 0x8946, 0x8ee7, 0x88c0, - 0x9176, 0x8aae, 0x8eb3, 0x8d47, 0x9386, 0x8f40, 0x8aaf, 0x9288, - 0x92e8, 0x88b6, 0x8b58, 0x95f3, 0x8ec0, 0x8b71, 0x90e9, 0x8eba, - 0x9747, 0x9b81, 0x8b7b, 0x8dc9, 0x8a51, 0x8983, 0x8faa, 0x89c6, - 0x9b82, 0x9765, 0x8f68, 0x8ee2, 0x9b83, 0x8af1, 0x93d0, 0x96a7, - 0x9b84, 0x9b85, 0x9578, 0x9b87, 0x8aa6, 0x8bf5, 0x9b86, 0x8ab0, - 0x9051, 0x9b8b, 0x8e40, 0x89c7, 0x9b8a, 0x9b88, 0x9b8c, 0x9b89, - 0x944a, 0x9ecb, 0x9052, 0x9b8d, 0x97be, 0x9b8e, 0x9b90, 0x929e, - 0x9b8f, 0x90a1, 0x8e9b, 0x91ce, 0x8ef5, 0x9595, 0x90ea, 0x8ecb, - 0x9b91, 0x8fab, 0x9b92, 0x9b93, 0x88d1, 0x91b8, 0x9071, 0x9b94, - 0x93b1, 0x8fac, 0x8fad, 0x9b95, 0x90eb, 0x8fae, 0x9b96, 0x9b97, - 0x96de, 0x9b98, 0x8bc4, 0x8f41, 0x9b99, 0x9b9a, 0x8eda, 0x904b, - 0x93f2, 0x9073, 0x94f6, 0x9441, 0x8bc7, 0x9b9b, 0x8b8f, 0x9b9c, - 0x8bfc, 0x93cd, 0x89ae, 0x8e72, 0x9b9d, 0x9ba0, 0x9b9f, 0x8bfb, - 0x9b9e, 0x9357, 0x91ae, 0x936a, 0x8ec6, 0x9177, 0x979a, 0x9ba2, - 0x9ba3, 0x93d4, 0x8e52, 0x9ba5, 0x9ba6, 0x9ba7, 0x8af2, 0x9ba8, - 0x9ba9, 0x89aa, 0x915a, 0x8ae2, 0x9bab, 0x96a6, 0x91d0, 0x8a78, - 0x9bad, 0x9baf, 0x8add, 0x9bac, 0x9bae, 0x9bb1, 0x9bb0, 0x9bb2, - 0x9bb3, 0x93bb, 0x8bac, 0x89e3, 0x9bb4, 0x9bb9, 0x9bb7, 0x95f5, - 0x95f4, 0x9387, 0x9bb6, 0x8f73, 0x9bb5, 0x9092, 0x9bba, 0x8de8, - 0x9bc0, 0x9bc1, 0x9bbb, 0x8a52, 0x9bbc, 0x9bc5, 0x9bc4, 0x9bc3, - 0x9bbf, 0x9bbe, 0x9bc2, 0x95f6, 0x9bc9, 0x9bc6, 0x9bc8, 0x9792, - 0x9bc7, 0x9bbd, 0x9093, 0x9bca, 0x8db5, 0x9bcb, 0x9bcc, 0x9bcf, - 0x9bce, 0x9bcd, 0x9388, 0x9bb8, 0x9bd5, 0x9bd1, 0x9bd0, 0x9bd2, - 0x9bd3, 0x9bd6, 0x97e4, 0x9bd7, 0x9bd4, 0x9bd8, 0x8ade, 0x9bd9, - 0x9bdb, 0x9bda, 0x9bdc, 0x9bdd, 0x90ec, 0x8f42, 0x8f84, 0x9183, - 0x8d48, 0x8db6, 0x8d49, 0x8b90, 0x9bde, 0x8db7, 0x8cc8, 0x9bdf, - 0x96a4, 0x9462, 0x9be0, 0x8d4a, 0x8aaa, 0x9246, 0x8bd0, 0x8e73, - 0x957a, 0x94bf, 0x9be1, 0x8af3, 0x9be4, 0x929f, 0x9be3, 0x9be2, - 0x9be5, 0x92e9, 0x9083, 0x8e74, 0x90c8, 0x91d1, 0x8b41, 0x92a0, - 0x9be6, 0x9be7, 0x8fed, 0x9658, 0x9bea, 0x9be9, 0x9be8, 0x959d, - 0x9bf1, 0x9679, 0x9beb, 0x9bed, 0x968b, 0x9bec, 0x9bee, 0x94a6, - 0x9bef, 0x95bc, 0x9bf0, 0x8ab1, 0x95bd, 0x944e, 0x9bf2, 0x9bf3, - 0x8d4b, 0x8ab2, 0x9bf4, 0x8cb6, 0x9763, 0x9748, 0x8af4, 0x9bf6, - 0x92a1, 0x8d4c, 0x8faf, 0x94dd, 0x8fb0, 0x8f98, 0x92ea, 0x95f7, - 0x9358, 0x8d4d, 0x957b, 0x9bf7, 0x9378, 0x8dc0, 0x8cc9, 0x92eb, - 0x88c1, 0x8f8e, 0x8d4e, 0x9766, 0x9bf8, 0x9bf9, 0x9470, 0x9bfa, - 0x97f5, 0x984c, 0x9bfc, 0x9bfb, 0x8a66, 0x9c40, 0x9c43, 0x9c44, - 0x9c42, 0x955f, 0x8fb1, 0x9c46, 0x9c45, 0x9c41, 0x9c47, 0x9c48, - 0x9c49, 0x9c4c, 0x9c4a, 0x9c4b, 0x9c4d, 0x8984, 0x92ec, 0x9c4e, - 0x8c9a, 0x89f4, 0x9455, 0x9c4f, 0x93f9, 0x95d9, 0x9c50, 0x984d, - 0x9c51, 0x95be, 0x9c54, 0x989f, 0x98af, 0x8eae, 0x93f3, 0x9c55, - 0x8b7c, 0x92a2, 0x88f8, 0x9c56, 0x95a4, 0x8d4f, 0x926f, 0x92ed, - 0x96ed, 0x8cb7, 0x8cca, 0x9c57, 0x9c58, 0x9c5e, 0x8ee3, 0x92a3, - 0x8bad, 0x9c59, 0x954a, 0x9265, 0x9c5a, 0x9c5b, 0x8bae, 0x9c5c, - 0x9c5d, 0x9c5f, 0x9396, 0x9c60, 0x9c61, 0x9c62, 0x9c53, 0x9c52, - 0x9c63, 0x8c60, 0x9546, 0x8dca, 0x9556, 0x92a4, 0x956a, 0x9c64, - 0x8fb2, 0x8965, 0x9c65, 0x9c66, 0x96f0, 0x94de, 0x9c69, 0x899d, - 0x90aa, 0x9c68, 0x9c67, 0x8c61, 0x91d2, 0x9c6d, 0x9c6b, 0x9c6a, - 0x97a5, 0x8ce3, 0x8f99, 0x9c6c, 0x936b, 0x8f5d, 0x93be, 0x9c70, - 0x9c6f, 0x9c6e, 0x9c71, 0x8ce4, 0x9c72, 0x959c, 0x8f7a, 0x9c73, - 0x94f7, 0x93bf, 0x92a5, 0x934f, 0x9c74, 0x8b4a, 0x9053, 0x954b, - 0x8af5, 0x9445, 0x9c75, 0x8e75, 0x9659, 0x965a, 0x899e, 0x9c7a, - 0x9289, 0x9c77, 0x89f5, 0x9cab, 0x9c79, 0x944f, 0x9c78, 0x9c76, - 0x8d9a, 0x9c7c, 0x9c83, 0x9c89, 0x9c81, 0x937b, 0x9c86, 0x957c, - 0x9c80, 0x9c85, 0x97e5, 0x8e76, 0x91d3, 0x9c7d, 0x8b7d, 0x9c88, - 0x90ab, 0x8985, 0x9c82, 0x89f6, 0x9c87, 0x8baf, 0x9c84, 0x9c8a, - 0x9c8c, 0x9c96, 0x9c94, 0x9c91, 0x9c90, 0x97f6, 0x9c92, 0x8bb0, - 0x8d50, 0x8f9a, 0x9c99, 0x9c8b, 0x9c8f, 0x9c7e, 0x89f8, 0x9c93, - 0x9c95, 0x9270, 0x8da6, 0x89b6, 0x9c8d, 0x9c98, 0x9c97, 0x8bb1, - 0x91a7, 0x8a86, 0x8c62, 0x9c8e, 0x9c9a, 0x9c9d, 0x9c9f, 0x8ebb, - 0x9ca5, 0x92ee, 0x9c9b, 0x9ca3, 0x89f7, 0x9ca1, 0x9ca2, 0x9c9e, - 0x9ca0, 0x8ce5, 0x9749, 0x8ab3, 0x8978, 0x9ca4, 0x9459, 0x88ab, - 0x94df, 0x9c7b, 0x9caa, 0x9cae, 0x96e3, 0x9ca7, 0x9389, 0x9cac, - 0x8fee, 0x9cad, 0x93d5, 0x9866, 0x9ca9, 0x9caf, 0x8d9b, 0x90c9, - 0x88d2, 0x9ca8, 0x9ca6, 0x9179, 0x9c9c, 0x8e53, 0x91c4, 0x9cbb, - 0x917a, 0x9cb6, 0x9cb3, 0x9cb4, 0x8ee4, 0x9cb7, 0x9cba, 0x9cb5, - 0x8f44, 0x9cb8, 0x9cb2, 0x96fa, 0x96f9, 0x9cbc, 0x9cbd, 0x88d3, - 0x9cb1, 0x8bf0, 0x88a4, 0x8ab4, 0x9cb9, 0x9cc1, 0x9cc0, 0x9cc5, - 0x9cc6, 0x9cc4, 0x9cc7, 0x9cbf, 0x9cc3, 0x9cc8, 0x9cc9, 0x9cbe, - 0x8e9c, 0x9cc2, 0x91d4, 0x8d51, 0x9cb0, 0x9054, 0x9cd6, 0x95e7, - 0x9ccc, 0x9ccd, 0x9cce, 0x9cd5, 0x9cd4, 0x969d, 0x8ab5, 0x9cd2, - 0x8c64, 0x8a53, 0x9ccf, 0x97b6, 0x9cd1, 0x88d4, 0x9cd3, 0x9cca, - 0x9cd0, 0x9cd7, 0x8c63, 0x9ccb, 0x977c, 0x974a, 0x9cda, 0x9cde, - 0x919e, 0x97f7, 0x9cdf, 0x9cdc, 0x9cd9, 0x9cd8, 0x9cdd, 0x95ae, - 0x93b2, 0x8c65, 0x9ce0, 0x9cdb, 0x9ce1, 0x8c9b, 0x89af, 0x9ce9, - 0x8ab6, 0x9ce7, 0x9ce8, 0x8da7, 0x9ce6, 0x9ce4, 0x9ce3, 0x9cea, - 0x9ce2, 0x9cec, 0x89f9, 0x9cee, 0x9ced, 0x92a6, 0x9cf1, 0x9cef, - 0x9ce5, 0x8c9c, 0x9cf0, 0x9cf4, 0x9cf3, 0x9cf5, 0x9cf2, 0x9cf6, - 0x9cf7, 0x9cf8, 0x95e8, 0x9cfa, 0x9cf9, 0x8f5e, 0x90ac, 0x89e4, - 0x89fa, 0x9cfb, 0x88bd, 0x90ca, 0x9cfc, 0xe6c1, 0x9d40, 0x8c81, - 0x9d41, 0x90ed, 0x9d42, 0x9d43, 0x8b59, 0x9d44, 0x9d45, 0x9d46, - 0x91d5, 0x8ccb, 0x96df, 0x965b, 0x8f8a, 0x9d47, 0x90ee, 0xe7bb, - 0x94e0, 0x8ee8, 0x8dcb, 0x9d48, 0x91c5, 0x95a5, 0x91ef, 0x9d4b, - 0x9d49, 0x9d4c, 0x9d4a, 0x9d4d, 0x95af, 0x88b5, 0x957d, 0x94e1, - 0x9d4e, 0x9d51, 0x8fb3, 0x8b5a, 0x9d4f, 0x9d56, 0x8fb4, 0x9d50, - 0x9463, 0x977d, 0x9d52, 0x9d53, 0x9d57, 0x938a, 0x9d54, 0x8d52, - 0x90dc, 0x9d65, 0x94b2, 0x91f0, 0x94e2, 0x9dab, 0x95f8, 0x92ef, - 0x9695, 0x9d5a, 0x899f, 0x928a, 0x9d63, 0x9253, 0x9d5d, 0x9d64, - 0x9d5f, 0x9d66, 0x9d62, 0x9d61, 0x948f, 0x9d5b, 0x89fb, 0x9d59, - 0x8b91, 0x91f1, 0x9d55, 0x9d58, 0x8d53, 0x90d9, 0x8fb5, 0x9d60, - 0x9471, 0x8b92, 0x8a67, 0x8a87, 0x9040, 0x9d68, 0x9d6d, 0x9d69, - 0x8c9d, 0x9d6e, 0x8e41, 0x8d89, 0x8f45, 0x9d5c, 0x8e9d, 0x9d6b, - 0x8e77, 0x9d6c, 0x88c2, 0x9d67, 0x92a7, 0x8b93, 0x8bb2, 0x9d6a, - 0x88a5, 0x8dc1, 0x9055, 0x92f0, 0x94d2, 0x9d70, 0x917d, 0x91a8, - 0x8e4a, 0x9d71, 0x9d73, 0x9d6f, 0x95df, 0x92bb, 0x917b, 0x95f9, - 0x8ecc, 0x9d80, 0x9d7e, 0x9098, 0x8c9e, 0x9d78, 0x8fb7, 0x93e6, - 0x9450, 0x9d76, 0x917c, 0x8ef6, 0x9d7b, 0x8fb6, 0x9d75, 0x9d7a, - 0x9472, 0x9d74, 0x8c40, 0x8a7c, 0x9d7c, 0x97a9, 0x8dcc, 0x9254, - 0x9d79, 0x90da, 0x8d54, 0x9084, 0x8986, 0x915b, 0x9d77, 0x8b64, - 0x8c66, 0x92cd, 0x9d7d, 0x917e, 0x9d81, 0x9d83, 0x91b5, 0x9d89, - 0x9d84, 0x9d86, 0x9560, 0x92f1, 0x9d87, 0x974b, 0x9767, 0x8ab7, - 0x88ac, 0x9d85, 0x9d82, 0x8af6, 0x8987, 0x9d88, 0x9768, 0x9d8c, - 0x91b9, 0x9d93, 0x9d8d, 0x9d8a, 0x9d91, 0x9d72, 0x9d8e, 0x9d92, - 0x94c0, 0x938b, 0x9d8b, 0x9d8f, 0x8c67, 0x8def, 0x90db, 0x9d97, - 0x9345, 0x9d94, 0x9680, 0x9d95, 0x9d96, 0x96cc, 0x90a0, 0x8c82, - 0x9d9d, 0x8e54, 0x9d9a, 0x9d99, 0x9451, 0x93b3, 0x9350, 0x9d9b, - 0x9d9c, 0x958f, 0x9464, 0x8e42, 0x90ef, 0x966f, 0x8a68, 0x9da3, - 0x9d9e, 0x9769, 0x9da5, 0x9da1, 0x9da2, 0x9180, 0x9da0, 0x9d5e, - 0x9da4, 0x9d9f, 0x9da9, 0x9daa, 0x9346, 0x9dac, 0x8e43, 0x9da7, - 0x8b5b, 0x9dad, 0x9da6, 0x9db1, 0x9db0, 0x9daf, 0x9db2, 0x9db4, - 0x8fef, 0x9db3, 0x9db7, 0x9db5, 0x9db6, 0x9d90, 0x9db9, 0x9db8, - 0x9d98, 0x9dba, 0x9dae, 0x8e78, 0x9dbb, 0x9dbc, 0x9dbe, 0x9dbd, - 0x9dbf, 0x89fc, 0x8d55, 0x95fa, 0x90ad, 0x8ccc, 0x9dc1, 0x9dc4, - 0x9571, 0x8b7e, 0x9dc3, 0x9dc2, 0x9473, 0x9dc5, 0x8bb3, 0x9dc7, - 0x9dc6, 0x8ab8, 0x8e55, 0x93d6, 0x8c68, 0x9094, 0x9dc8, 0x90ae, - 0x9347, 0x957e, 0x9dc9, 0x9dca, 0x9dcb, 0x95b6, 0x9b7c, 0x90c4, - 0x956b, 0x8dd6, 0x94e3, 0x94c1, 0x936c, 0x97bf, 0x9dcd, 0x8ece, - 0x9dce, 0x88b4, 0x8bd2, 0x90cb, 0x9580, 0x9dcf, 0x8e61, 0x9266, - 0x8e7a, 0x9056, 0x9dd0, 0x95fb, 0x8997, 0x8e7b, 0x9dd3, 0x9dd1, - 0x9dd4, 0x97b7, 0x9dd2, 0x90f9, 0x9dd5, 0x91b0, 0x9dd6, 0x8af8, - 0x9dd8, 0x9dd7, 0x9dd9, 0x9dda, 0x8af9, 0x93fa, 0x9255, 0x8b8c, - 0x8e7c, 0x9181, 0x8f7b, 0x88ae, 0x9ddb, 0x89a0, 0x9ddf, 0x8d56, - 0x9dde, 0x8da9, 0x8fb8, 0x9ddd, 0x8fb9, 0x96be, 0x8da8, 0x88d5, - 0x90cc, 0x9de4, 0x90af, 0x8966, 0x8f74, 0x9686, 0x8df0, 0x8fba, - 0x90a5, 0x9de3, 0x9de1, 0x9de2, 0x928b, 0x9e45, 0x9de8, 0x8e9e, - 0x8d57, 0x9de6, 0x9de7, 0x9057, 0x9de5, 0x8e4e, 0x9dea, 0x9de9, - 0x9dee, 0x9def, 0x9deb, 0x8a41, 0x9dec, 0x9ded, 0x94d3, 0x9581, - 0x8c69, 0x9df0, 0x90b0, 0x8fbb, 0x9271, 0x8bc5, 0x9df1, 0x9df5, - 0x89c9, 0x9df2, 0x9df4, 0x9df3, 0x8f8b, 0x9267, 0x88c3, 0x9df6, - 0x9df7, 0x92a8, 0x97ef, 0x8e62, 0x95e9, 0x965c, 0x9e41, 0x9df9, - 0x9dfc, 0x9dfb, 0x9df8, 0x9e40, 0x93dc, 0x9dfa, 0x9e42, 0x8f8c, - 0x9e43, 0x976a, 0x9498, 0x9e44, 0x9e46, 0x9e47, 0x9e48, 0x8bc8, - 0x8967, 0x8d58, 0x9e49, 0x9e4a, 0x8f91, 0x9182, 0x99d6, 0x915d, - 0x915c, 0x91d6, 0x8dc5, 0x98f0, 0x8c8e, 0x974c, 0x95fc, 0x959e, - 0x9e4b, 0x8df1, 0x92bd, 0x9e4c, 0x984e, 0x965d, 0x92a9, 0x9e4d, - 0x8afa, 0x9e4e, 0x9e4f, 0x96d8, 0x96a2, 0x9696, 0x967b, 0x8e44, - 0x9e51, 0x8ee9, 0x9670, 0x9e53, 0x9e56, 0x9e55, 0x8af7, 0x8b80, - 0x9e52, 0x9e54, 0x9e57, 0x9099, 0x979b, 0x88c7, 0x8dde, 0x91ba, - 0x8edb, 0x8ff1, 0x9e5a, 0x936d, 0x9e58, 0x91a9, 0x9e59, 0x8ff0, - 0x96db, 0x9e5b, 0x9e5c, 0x9788, 0x9e61, 0x8d59, 0x9474, 0x9e5e, - 0x938c, 0x9ddc, 0x9de0, 0x8b6e, 0x9466, 0x9e60, 0x8fbc, 0x94c2, - 0x9e66, 0x94f8, 0x9e5d, 0x9e63, 0x9e62, 0x90cd, 0x968d, 0x97d1, - 0x9687, 0x89ca, 0x8e7d, 0x9867, 0x9e65, 0x9095, 0x9e64, 0x9e5f, - 0x8ccd, 0x9e6b, 0x9e69, 0x89cb, 0x9e67, 0x9e6d, 0x9e73, 0x91c6, - 0x95bf, 0x9e75, 0x9541, 0x9e74, 0x9490, 0x965e, 0x8ab9, 0x90f5, - 0x8f5f, 0x92d1, 0x974d, 0x9e70, 0x9e6f, 0x9e71, 0x9e6e, 0x9e76, - 0x9e6c, 0x9e6a, 0x9e72, 0x9e68, 0x928c, 0x96f6, 0x8ec4, 0x8df2, - 0x8db8, 0x968f, 0x8a60, 0x92cc, 0x93c8, 0x8968, 0x90f0, 0x90b2, - 0x8c49, 0x9e78, 0x8d5a, 0x8a9c, 0x9e7a, 0x8a94, 0x9e81, 0x9e7d, - 0x90f1, 0x8a6a, 0x8daa, 0x8a69, 0x8dcd, 0x9e7b, 0x8c85, 0x8c6a, - 0x938d, 0x9e79, 0x88c4, 0x9e7c, 0x9e7e, 0x8bcb, 0x8c4b, 0x8aba, - 0x8b6a, 0x9e82, 0x8df7, 0x9691, 0x8e56, 0x9e83, 0x954f, 0x9e8f, - 0x89b1, 0x9e84, 0x9e95, 0x9e85, 0x97c0, 0x9e8c, 0x947e, 0x9e94, - 0x9e87, 0x88b2, 0x9e89, 0x8d5b, 0x9e8b, 0x9e8a, 0x9e86, 0x9e91, - 0x8fbd, 0x9aeb, 0x8ce6, 0x979c, 0x9e88, 0x92f2, 0x8a42, 0x8dab, - 0x9e80, 0x9e90, 0x8a81, 0x9e8e, 0x9e92, 0x938e, 0x8afc, 0x9eb0, - 0x96c7, 0x9e97, 0x8afb, 0x9e9e, 0x965f, 0x9e9f, 0x9ea1, 0x9ea5, - 0x9e99, 0x9249, 0x938f, 0x9ea9, 0x9e9c, 0x9ea6, 0x9ea0, 0x9058, - 0x9eaa, 0x90b1, 0x9ea8, 0x8abb, 0x986f, 0x9e96, 0x9ea4, 0x88d6, - 0x9e98, 0x96b8, 0x9e9d, 0x9041, 0x92c5, 0x9e93, 0x9ea3, 0x909a, - 0x9ead, 0x8a91, 0x8c9f, 0x9eaf, 0x9e9a, 0x9eae, 0x9ea7, 0x9e9b, - 0x9eab, 0x9eac, 0x9ebd, 0x93cc, 0x9ea2, 0x9eb9, 0x9ebb, 0x92d6, - 0x976b, 0x9596, 0x9eb6, 0x91c8, 0x9ebc, 0x915e, 0x9eb3, 0x9ec0, - 0x9ebf, 0x93ed, 0x9ebe, 0x93e8, 0x9ec2, 0x9eb5, 0x8bc6, 0x9eb8, - 0x8f7c, 0x9480, 0x9eba, 0x8bc9, 0x9eb2, 0x9eb4, 0x9eb1, 0x984f, - 0x8a79, 0x9eb7, 0x9ec1, 0x8a54, 0x8de5, 0x897c, 0x9ed2, 0x9850, - 0x9ed5, 0x9059, 0x9ed4, 0x9ed3, 0x9ed0, 0x9ec4, 0x9ee1, 0x9ec3, - 0x9ed6, 0x9ece, 0x9ec9, 0x9ec6, 0x9ec7, 0x9ecf, 0xeaa0, 0x9ecc, - 0x8d5c, 0x92c6, 0x9184, 0x9eca, 0x9ec5, 0x9ec8, 0x976c, 0x968a, - 0x9ecd, 0x9ed7, 0x9edf, 0x9ed8, 0x9ee5, 0x9ee3, 0x9ede, 0x9edd, - 0x92ce, 0x9185, 0x9edb, 0x9ed9, 0x9ee0, 0x9ee6, 0x94f3, 0x9eec, - 0x9ee7, 0x9eea, 0x9ee4, 0x9294, 0x9557, 0x9eda, 0x9ee2, 0x8fbe, - 0x96cd, 0x9ef6, 0x9ee9, 0x8ca0, 0x89a1, 0x8a7e, 0x9ed1, 0x8fbf, - 0x9eee, 0x9ef5, 0x8ef7, 0x8a92, 0x924d, 0x9eeb, 0x9ef0, 0x9ef4, - 0x8bb4, 0x8b6b, 0x9ef2, 0x8b40, 0x93c9, 0x9ef1, 0x9ef3, 0x9eed, - 0x9eef, 0x8a80, 0x9268, 0x9efa, 0x9ef8, 0x8ce7, 0x9ef7, 0x9f40, - 0x9e77, 0x9ef9, 0x9efb, 0x9efc, 0x9f4b, 0x9f47, 0x9e8d, 0x9f46, - 0x9f45, 0x9f42, 0x9ee8, 0x9f44, 0x9f43, 0x9f49, 0x9845, 0x9f4c, - 0x8bf9, 0x9f48, 0x9f4a, 0x94a5, 0x9f4d, 0x9f51, 0x9f4e, 0x9793, - 0x9f4f, 0x9edc, 0x9f52, 0x9f53, 0x8954, 0x9f55, 0x8c87, 0x8e9f, - 0x8bd3, 0x89a2, 0x977e, 0x9f57, 0x9f56, 0x9f59, 0x8b5c, 0x8bd4, - 0x8abc, 0x9f5c, 0x9f5b, 0x9f5d, 0x89cc, 0x9256, 0x9f5e, 0x8abd, - 0x9f60, 0x9f5f, 0x9f61, 0x9f62, 0x9f63, 0x8e7e, 0x90b3, 0x8d9f, - 0x9590, 0x95e0, 0x9863, 0x8e95, 0x8dce, 0x97f0, 0x9f64, 0x9f65, - 0x8e80, 0x9f66, 0x9f67, 0x9f69, 0x9f68, 0x9677, 0x8f7d, 0x8eea, - 0x8e63, 0x9f6a, 0x9f6c, 0x9042, 0x9f6b, 0x9f6d, 0x9f6e, 0x9f6f, - 0x9f70, 0x9f71, 0x9f73, 0x9f72, 0x9f74, 0x89a3, 0x9269, 0x9f75, - 0x8e45, 0x8a6b, 0x9f76, 0x9361, 0x9aca, 0x8b42, 0x9f77, 0x9f78, - 0x95ea, 0x9688, 0x93c5, 0x9f79, 0x94e4, 0x94f9, 0x96d1, 0x9f7a, - 0x9f7c, 0x9f7b, 0x9f7e, 0x9f7d, 0x9f81, 0x8e81, 0x96af, 0x9f82, - 0x9f83, 0x8b43, 0x9f84, 0x9f86, 0x9f85, 0x9085, 0x9558, 0x8969, - 0x94c3, 0x92f3, 0x8f60, 0x8b81, 0x94c4, 0x8eac, 0x9f88, 0x8abe, - 0x8998, 0x93f0, 0x9f87, 0x8d5d, 0x9272, 0x9f89, 0x9f91, 0x9f8a, - 0x91bf, 0x8b82, 0x9f92, 0x8c88, 0x8b44, 0x9f90, 0x9f8e, 0x9f8b, - 0x9780, 0x92be, 0x93d7, 0x9f8c, 0x9f94, 0x9f93, 0x8c42, 0x89ab, - 0x8db9, 0x9f8d, 0x9f8f, 0x9676, 0x91f2, 0x9697, 0x9f9c, 0x9f9d, - 0x89cd, 0x95a6, 0x96fb, 0x9f9f, 0x8ea1, 0x8fc0, 0x9f98, 0x9f9e, - 0x8988, 0x8bb5, 0x9f95, 0x9f9a, 0x90f2, 0x9491, 0x94e5, 0x9f97, - 0x9640, 0x9f99, 0x9fa2, 0x9fa0, 0x9f9b, 0x9641, 0x9467, 0x8b83, - 0x9344, 0x928d, 0x9fa3, 0x9fa1, 0x91d7, 0x9f96, 0x896a, 0x976d, - 0x9fae, 0x9fad, 0x90f4, 0x9faa, 0x978c, 0x93b4, 0x9fa4, 0x92c3, - 0x896b, 0x8d5e, 0x9fa7, 0x8f46, 0x9fac, 0x9fab, 0x9fa6, 0x9fa9, - 0x8a88, 0x9fa8, 0x9468, 0x97ac, 0x8ff2, 0x90f3, 0x9fb4, 0x9fb2, - 0x956c, 0x9faf, 0x9fb1, 0x8959, 0x8d5f, 0x9851, 0x8a5c, 0x9582, - 0x9781, 0x8a43, 0x905a, 0x9fb3, 0x9fb8, 0x8fc1, 0x974f, 0x9fb5, - 0x9fb0, 0x9fb6, 0x97dc, 0x9393, 0x93c0, 0x8a55, 0x8974, 0x9fbc, - 0x9fbf, 0x97c1, 0x9784, 0x9fc6, 0x9fc0, 0x9fbd, 0x97d2, 0x9fc3, - 0x8f69, 0x9fc5, 0x9fca, 0x9391, 0x9fc8, 0x9fc2, 0x9257, 0x9fc9, - 0x9fbe, 0x9fc4, 0x9fcb, 0x88fa, 0x9fc1, 0x9fcc, 0x905b, 0x8f7e, - 0x95a3, 0x8dac, 0x9fb9, 0x9fc7, 0x9359, 0x90b4, 0x8a89, 0x8dcf, - 0x8fc2, 0x9fbb, 0x8f61, 0x8c6b, 0x9fba, 0x9fd0, 0x8f8d, 0x8cb8, - 0x9fdf, 0x9fd9, 0x8b94, 0x936e, 0x9fd4, 0x9fdd, 0x88ad, 0x8951, - 0x89b7, 0x9fd6, 0x91aa, 0x9fcd, 0x9fcf, 0x8d60, 0x9fe0, 0x9fdb, - 0x9fd3, 0x9fda, 0x96a9, 0x9fd8, 0x9fdc, 0x8cce, 0x8fc3, 0x9258, - 0x9fd2, 0x974e, 0x9fd5, 0x9fce, 0x9392, 0x9fd1, 0x9fd7, 0x9870, - 0x8ebc, 0x969e, 0x9fe1, 0x94ac, 0x9fed, 0x8cb9, 0x8f80, 0x9fe3, - 0x97ad, 0x8d61, 0x9ff0, 0x88ec, 0x9fee, 0x9fe2, 0x9fe8, 0x9fea, - 0x976e, 0x9fe5, 0x934d, 0x9fe7, 0x9fef, 0x9fe9, 0x96c5, 0x9fe4, - 0x8ea0, 0x9ffc, 0x8a8a, 0x9fe6, 0x9feb, 0x9fec, 0x91ea, 0x91d8, - 0x9ff4, 0x9ffa, 0x9ff8, 0x9348, 0xe042, 0x9ff5, 0x9ff6, 0x9fde, - 0x8b99, 0x9559, 0x8ebd, 0x8d97, 0x9852, 0x9ff2, 0xe041, 0x8989, - 0x9186, 0x9499, 0x8abf, 0x97f8, 0x969f, 0x92d0, 0x9ff9, 0x9ffb, - 0x9151, 0xe040, 0x9ff7, 0x9ff1, 0x8ac1, 0x8c89, 0xe04e, 0xe049, - 0x90f6, 0x8a83, 0x8f81, 0xe052, 0xe04b, 0x92aa, 0xe048, 0x92d7, - 0xe06b, 0xe045, 0xe044, 0xe04d, 0xe047, 0xe046, 0xe04c, 0x909f, - 0xe043, 0xe04f, 0xe050, 0x8ac0, 0xe055, 0xe054, 0xe056, 0xe059, - 0x9362, 0xe053, 0xe057, 0x8c83, 0x91f7, 0xe051, 0x945a, 0xe058, - 0xe05d, 0xe05b, 0xe05e, 0xe061, 0xe05a, 0x8d8a, 0x9447, 0x9fb7, - 0x9794, 0xe05c, 0xe060, 0x91f3, 0xe05f, 0xe04a, 0xe889, 0xe064, - 0xe068, 0xe066, 0xe062, 0xe063, 0xe067, 0xe065, 0x956d, 0xe06d, - 0xe06a, 0xe069, 0xe06c, 0x93d2, 0xe06e, 0x9295, 0x91eb, 0x90a3, - 0xe06f, 0xe071, 0xe070, 0x9ff3, 0xe072, 0x93e5, 0xe073, 0x89ce, - 0x9394, 0x8a44, 0x8b84, 0x8edc, 0x8dd0, 0x9846, 0x9086, 0x898a, - 0xe075, 0xe074, 0xe078, 0x9259, 0xe07b, 0xe076, 0xe07a, 0xe079, - 0x935f, 0x88d7, 0x97f3, 0xe07d, 0x8947, 0xe080, 0xe07e, 0xe07c, - 0xe077, 0x9642, 0xe082, 0xe081, 0x898b, 0xe084, 0x95b0, 0xe083, - 0x96b3, 0x8fc5, 0x9152, 0x8fc4, 0x97f9, 0xe08a, 0x90f7, 0xe086, - 0xe08b, 0x898c, 0xe089, 0x9481, 0xe085, 0xe088, 0x8fc6, 0x94cf, - 0xe08c, 0x8ecf, 0x90f8, 0xe08f, 0xe087, 0x8c46, 0xe08d, 0x976f, - 0xe090, 0xeaa4, 0x8f6e, 0xe091, 0xe092, 0x944d, 0xe094, 0xe095, - 0x9452, 0x9395, 0xe097, 0xe099, 0x97d3, 0xe096, 0xe098, 0x898d, - 0xe093, 0x9a7a, 0xe09a, 0x9187, 0x8e57, 0xe09c, 0xe09b, 0x9043, - 0x99d7, 0xe09d, 0xe09f, 0xe08e, 0xe09e, 0xe0a0, 0x949a, 0xe0a1, - 0xe0a2, 0xe0a3, 0xe0a4, 0x92dc, 0xe0a6, 0xe0a5, 0xe0a7, 0xe0a8, - 0x8edd, 0x9583, 0x96ea, 0xe0a9, 0xe0aa, 0x9175, 0x8ea2, 0xe0ab, - 0xe0ac, 0xe0ad, 0x95d0, 0x94c5, 0xe0ae, 0x9476, 0x92ab, 0xe0af, - 0x89e5, 0x8b8d, 0x96c4, 0x96b4, 0x89b2, 0x9853, 0x9671, 0x95a8, - 0x90b5, 0xe0b0, 0x93c1, 0x8ca1, 0xe0b1, 0x8dd2, 0xe0b3, 0xe0b2, - 0xe0b4, 0xe0b5, 0xe0b6, 0x8b5d, 0xe0b7, 0xe0b8, 0x8ca2, 0x94c6, - 0xe0ba, 0x8ff3, 0xe0b9, 0x8bb6, 0xe0bb, 0xe0bd, 0xe0bc, 0xe0be, - 0x8ccf, 0xe0bf, 0x8be7, 0x915f, 0x8d9d, 0xe0c1, 0xe0c2, 0xe0c0, - 0x8eeb, 0x93c6, 0x8bb7, 0xe0c4, 0x924b, 0xe0c3, 0x9854, 0x9482, - 0xe0c7, 0xe0c9, 0xe0c6, 0x96d2, 0xe0c8, 0xe0ca, 0x97c2, 0xe0ce, - 0xe0cd, 0x9296, 0x944c, 0x8ca3, 0xe0cc, 0xe0cb, 0x9750, 0x9751, - 0xe0cf, 0x898e, 0x8d96, 0x8e82, 0xe0d0, 0xe0d1, 0xe0d3, 0x8f62, - 0xe0d5, 0xe0d4, 0xe0d6, 0x8a6c, 0xe0d8, 0xe0d7, 0xe0da, 0xe0d9, - 0x8cba, 0x97a6, 0x8bca, 0x89a4, 0x8be8, 0x8adf, 0x97e6, 0xe0dc, - 0xe0de, 0xe0df, 0x89cf, 0xe0db, 0x8e58, 0x92bf, 0xe0dd, 0xe0e2, - 0x8eec, 0xe0e0, 0x8c5d, 0x94c7, 0xe0e1, 0xe0fc, 0xe0e7, 0x8cbb, - 0x8b85, 0xe0e4, 0x979d, 0x97ae, 0x91f4, 0xe0e6, 0xe0e8, 0x97d4, - 0x8bd5, 0x94fa, 0x9469, 0xe0e9, 0xe0eb, 0xe0ee, 0xe0ea, 0xe0ed, - 0x8ce8, 0x896c, 0xe0ef, 0x9090, 0xe0ec, 0x97da, 0xe0f2, 0xeaa2, - 0xe0f0, 0xe0f3, 0xe0e5, 0xe0f1, 0x8dba, 0xe0f4, 0xe0f5, 0x979e, - 0xe0f6, 0xe0f7, 0xe0e3, 0xe0f8, 0x8ac2, 0x8ea3, 0xe0f9, 0xe0fa, - 0xe0fb, 0x895a, 0xe140, 0x955a, 0xe141, 0x8aa2, 0xe142, 0xe143, - 0xe144, 0xe146, 0xe147, 0xe145, 0x9572, 0xe149, 0xe148, 0xe14b, - 0xe14a, 0xe14c, 0xe14d, 0xe14f, 0xe14e, 0x8d99, 0xe151, 0xe150, - 0x8ac3, 0x9072, 0x935b, 0xe152, 0x90b6, 0x8e59, 0x8999, 0xe153, - 0x9770, 0x95e1, 0xe154, 0x9363, 0x9752, 0x8d62, 0x905c, 0x926a, - 0x99b2, 0x92ac, 0x89e6, 0xe155, 0xe156, 0xe15b, 0xe159, 0xe158, - 0x9dc0, 0x8a45, 0xe157, 0x88d8, 0x94a8, 0x94c8, 0x97af, 0xe15c, - 0xe15a, 0x927b, 0x90a4, 0x94a9, 0x954c, 0xe15e, 0x97aa, 0x8c6c, - 0xe15f, 0xe15d, 0x94d4, 0xe160, 0xe161, 0x88d9, 0x8ff4, 0xe166, - 0xe163, 0x93eb, 0xe162, 0x8b45, 0xe169, 0xe164, 0xe165, 0xe168, - 0xe167, 0x9544, 0x9161, 0x9160, 0x8b5e, 0xe16a, 0xe16b, 0xe16c, - 0xe16e, 0xe16d, 0x8975, 0xe176, 0x94e6, 0xe170, 0xe172, 0xe174, - 0x905d, 0xe175, 0xe173, 0x8ebe, 0xe16f, 0xe171, 0x9561, 0x8fc7, - 0xe178, 0xe177, 0xe179, 0x8ea4, 0x8dad, 0x9397, 0xe17a, 0x92c9, - 0xe17c, 0x979f, 0xe17b, 0x9189, 0xe182, 0xe184, 0xe185, 0x9273, - 0xe183, 0xe180, 0xe17d, 0xe17e, 0xe181, 0xe188, 0xe186, 0xe187, - 0xe189, 0xe18b, 0xe18c, 0xe18d, 0xe18e, 0xe18a, 0xe190, 0xe18f, - 0xe191, 0x97c3, 0xe194, 0xe192, 0xe193, 0x8ae0, 0x96fc, 0x95c8, - 0xe196, 0xe195, 0xe197, 0xe198, 0xe19c, 0xe199, 0xe19a, 0xe19b, - 0xe19d, 0xe19e, 0xe19f, 0xe1a0, 0xe1a1, 0x94ad, 0x936f, 0xe1a2, - 0x9492, 0x9553, 0xe1a3, 0xe1a4, 0x9349, 0x8a46, 0x8d63, 0xe1a5, - 0xe1a6, 0xe1a7, 0x8e48, 0xe1a9, 0xe1a8, 0xe1aa, 0xe1ab, 0x94e7, - 0xe1ac, 0xe1ad, 0xea89, 0xe1ae, 0xe1af, 0xe1b0, 0x8e4d, 0xe1b1, - 0x9475, 0x967e, 0x896d, 0x8976, 0xe1b2, 0xe1b4, 0xe1b3, 0x9390, - 0x90b7, 0x9f58, 0xe1b5, 0x96bf, 0xe1b6, 0x8ac4, 0x94d5, 0xe1b7, - 0xe1b8, 0xe1b9, 0x96da, 0x96d3, 0x92bc, 0x918a, 0xe1bb, 0x8f82, - 0x8fc8, 0xe1be, 0xe1bd, 0xe1bc, 0x94fb, 0x8ac5, 0x8ca7, 0xe1c4, - 0xe1c1, 0x905e, 0x96b0, 0xe1c0, 0xe1c2, 0xe1c3, 0xe1bf, 0xe1c5, - 0xe1c6, 0x92ad, 0x8ae1, 0x9285, 0xe1c7, 0xe1c8, 0xe1cb, 0x9087, - 0x93c2, 0xe1cc, 0x9672, 0xe1c9, 0xe1ca, 0xe1cf, 0xe1ce, 0xe1cd, - 0xe1d1, 0xe1d0, 0xe1d2, 0xe1d4, 0xe1d3, 0x95cb, 0x8f75, 0x97c4, - 0xe1d5, 0x93b5, 0xe1d6, 0xe1d7, 0xe1db, 0xe1d9, 0xe1da, 0xe1d8, - 0xe1dc, 0xe1dd, 0xe1de, 0xe1df, 0x96b5, 0xe1e0, 0x96ee, 0xe1e1, - 0x926d, 0x948a, 0x8be9, 0x925a, 0xe1e2, 0x8bb8, 0x90ce, 0xe1e3, - 0x8dbb, 0xe1e4, 0xe1e5, 0x8ca4, 0x8dd3, 0xe1e7, 0x9375, 0x8dd4, - 0x8b6d, 0x9643, 0x946a, 0x9376, 0x8d7b, 0xe1e9, 0x8fc9, 0x97b0, - 0x8d64, 0x8ca5, 0x94a1, 0xe1eb, 0xe1ed, 0x8ce9, 0xe1ec, 0x92f4, - 0xe1ef, 0x8a56, 0xe1ea, 0x94e8, 0x894f, 0x8dea, 0x9871, 0xe1ee, - 0xe1f0, 0x95c9, 0x90d7, 0xe1f2, 0xe1f3, 0xe1f1, 0x8a6d, 0xe1f9, - 0xe1f8, 0x8ea5, 0xe1fa, 0xe1f5, 0xe1fb, 0xe1f6, 0x94d6, 0xe1f4, - 0xe1f7, 0xe241, 0xe240, 0x9681, 0xe1fc, 0x88e9, 0xe243, 0xe242, - 0x8fca, 0xe244, 0x9162, 0xe246, 0xe245, 0xe247, 0xe1e6, 0xe1e8, - 0xe249, 0xe248, 0x8ea6, 0x97e7, 0x8ed0, 0xe24a, 0x8c56, 0x8b5f, - 0x8b46, 0x8e83, 0x9753, 0xe250, 0xe24f, 0x9163, 0xe24c, 0xe24e, - 0x8f6a, 0x905f, 0xe24d, 0xe24b, 0x9449, 0x8fcb, 0x955b, 0x8dd5, - 0x9398, 0xe251, 0xe252, 0xe268, 0x8bd6, 0x985c, 0x9154, 0xe253, - 0x89d0, 0x92f5, 0x959f, 0xe254, 0x8b9a, 0xe255, 0xe257, 0xe258, - 0x9448, 0xe259, 0xe25a, 0xe25b, 0x8bd7, 0x89d1, 0x93c3, 0x8f47, - 0x8e84, 0xe25c, 0x8f48, 0x89c8, 0x9562, 0xe25d, 0x94e9, 0x9164, - 0xe260, 0xe261, 0x9489, 0x9060, 0xe25e, 0x9281, 0xe25f, 0x8fcc, - 0x88da, 0x8b48, 0xe262, 0x92f6, 0xe263, 0x90c5, 0x96ab, 0x9542, - 0xe264, 0xe265, 0x9274, 0x97c5, 0xe267, 0xe266, 0x8eed, 0xe269, - 0x88ee, 0xe26c, 0xe26a, 0x89d2, 0x8c6d, 0xe26b, 0x8d65, 0x8d92, - 0x95e4, 0xe26d, 0x9673, 0xe26f, 0x90cf, 0x896e, 0x89b8, 0x88aa, - 0xe26e, 0xe270, 0xe271, 0x8ff5, 0xe272, 0x8a6e, 0xe274, 0x8c8a, - 0x8b86, 0xe275, 0x8bf3, 0xe276, 0x90fa, 0x93cb, 0x90de, 0x8df3, - 0xe277, 0x9282, 0x918b, 0xe279, 0xe27b, 0xe278, 0xe27a, 0x8c41, - 0xe27c, 0x8c45, 0x8b87, 0x9771, 0xe27e, 0xe280, 0x894d, 0xe283, - 0x8a96, 0xe282, 0xe281, 0xe285, 0xe27d, 0xe286, 0x97a7, 0xe287, - 0xe288, 0x9af2, 0xe28a, 0xe289, 0xe28b, 0xe28c, 0x97b3, 0xe28d, - 0xe8ed, 0x8fcd, 0xe28e, 0xe28f, 0x8f76, 0x93b6, 0xe290, 0x9247, - 0xe291, 0x925b, 0xe292, 0x8ba3, 0x995e, 0x927c, 0x8eb1, 0x8ac6, - 0xe293, 0xe2a0, 0xe296, 0x8b88, 0xe295, 0xe2a2, 0xe294, 0x8fce, - 0xe298, 0xe299, 0x934a, 0xe29a, 0x8a7d, 0x9079, 0x9584, 0xe29c, - 0x91e6, 0xe297, 0xe29b, 0xe29d, 0x8df9, 0xe2a4, 0x954d, 0x94a4, - 0x9399, 0x8bd8, 0xe2a3, 0xe2a1, 0x94b3, 0xe29e, 0x927d, 0x939b, - 0x939a, 0x8df4, 0xe2b6, 0xe2a6, 0xe2a8, 0xe2ab, 0xe2ac, 0xe2a9, - 0xe2aa, 0xe2a7, 0xe2a5, 0xe29f, 0x95cd, 0x89d3, 0xe2b3, 0xe2b0, - 0xe2b5, 0xe2b4, 0x9493, 0x96a5, 0x8e5a, 0xe2ae, 0xe2b7, 0xe2b2, - 0xe2b1, 0xe2ad, 0xe2af, 0x8ac7, 0x925c, 0x90fb, 0x94a0, 0xe2bc, - 0x94a2, 0x90df, 0xe2b9, 0x94cd, 0xe2bd, 0x95d1, 0x927a, 0xe2b8, - 0xe2ba, 0xe2bb, 0xe2be, 0x8ec2, 0x93c4, 0xe2c3, 0xe2c2, 0xe2bf, - 0x9855, 0xe2c8, 0xe2cc, 0xe2c9, 0xe2c5, 0xe2c6, 0xe2cb, 0xe2c0, - 0x99d3, 0xe2c7, 0xe2c1, 0xe2ca, 0xe2d0, 0x8ac8, 0xe2cd, 0xe2ce, - 0xe2cf, 0xe2d2, 0xe2d1, 0x94f4, 0xe2d3, 0x97fa, 0x95eb, 0xe2d8, - 0xe2d5, 0xe2d4, 0x90d0, 0xe2d7, 0xe2d9, 0xe2d6, 0xe2dd, 0xe2da, - 0xe2db, 0xe2c4, 0xe2dc, 0xe2de, 0xe2df, 0x95c4, 0xe2e0, 0x96e0, - 0x8bcc, 0x8c48, 0xe2e1, 0x95b2, 0x9088, 0x96ae, 0xe2e2, 0x97b1, - 0x9494, 0x9165, 0x9453, 0x8f6c, 0x88be, 0xe2e7, 0xe2e5, 0xe2e3, - 0x8a9f, 0x8fcf, 0xe2e8, 0xe2e6, 0xe2e4, 0xe2ec, 0xe2eb, 0xe2ea, - 0xe2e9, 0xe2ed, 0xe2ee, 0x90b8, 0xe2ef, 0xe2f1, 0xe2f0, 0x8cd0, - 0x9157, 0xe2f3, 0x939c, 0xe2f2, 0xe2f4, 0x95b3, 0x918c, 0x8d66, - 0xe2f5, 0x97c6, 0xe2f7, 0xe2f8, 0xe2f9, 0xe2fa, 0x8e85, 0xe2fb, - 0x8c6e, 0x8b8a, 0x8b49, 0xe340, 0x96f1, 0x8d67, 0xe2fc, 0xe343, - 0x96e4, 0x945b, 0x9552, 0x8f83, 0xe342, 0x8ed1, 0x8d68, 0x8e86, - 0x8b89, 0x95b4, 0xe341, 0x9166, 0x9661, 0x8df5, 0x8e87, 0x92db, - 0xe346, 0x97dd, 0x8dd7, 0xe347, 0x9061, 0xe349, 0x8fd0, 0x8dae, - 0xe348, 0x8f49, 0x8cbc, 0x9167, 0xe344, 0xe34a, 0xe345, 0x8c6f, - 0xe34d, 0xe351, 0x8c8b, 0xe34c, 0xe355, 0x8d69, 0x978d, 0x88ba, - 0xe352, 0x8b8b, 0xe34f, 0xe350, 0x939d, 0xe34e, 0xe34b, 0x8a47, - 0x90e2, 0x8ca6, 0xe357, 0xe354, 0xe356, 0xe353, 0x8c70, 0x91b1, - 0xe358, 0x918e, 0xe365, 0xe361, 0xe35b, 0xe35f, 0x8ef8, 0x88db, - 0xe35a, 0xe362, 0xe366, 0x8d6a, 0x96d4, 0x92d4, 0xe35c, 0xe364, - 0xe359, 0x925d, 0xe35e, 0x88bb, 0x96c8, 0xe35d, 0x8bd9, 0x94ea, - 0x918d, 0x97ce, 0x8f8f, 0xe38e, 0xe367, 0x90fc, 0xe363, 0xe368, - 0xe36a, 0x92f7, 0xe36d, 0xe369, 0x95d2, 0x8ac9, 0x96c9, 0x88dc, - 0xe36c, 0x97fb, 0xe36b, 0x898f, 0x93ea, 0xe36e, 0xe375, 0xe36f, - 0xe376, 0xe372, 0x949b, 0x8ec8, 0xe374, 0xe371, 0xe377, 0xe370, - 0x8f63, 0x9644, 0x8f6b, 0xe373, 0xe380, 0xe37b, 0xe37e, 0xe37c, - 0xe381, 0xe37a, 0xe360, 0x90d1, 0x94c9, 0xe37d, 0xe378, 0x9140, - 0x8c71, 0x8f4a, 0x9044, 0x9155, 0xe384, 0xe386, 0xe387, 0xe383, - 0xe385, 0xe379, 0xe382, 0xe38a, 0xe389, 0x969a, 0x8c4a, 0xe388, - 0xe38c, 0xe38b, 0xe38f, 0xe391, 0x8e5b, 0xe38d, 0xe392, 0xe393, - 0xe394, 0xe39a, 0x935a, 0xe396, 0xe395, 0xe397, 0xe398, 0xe399, - 0xe39b, 0xe39c, 0x8aca, 0xe39d, 0xe39e, 0xe39f, 0xe3a0, 0xe3a1, - 0xe3a2, 0xe3a3, 0xe3a4, 0xe3a6, 0xe3a5, 0xe3a7, 0xe3a8, 0xe3a9, - 0xe3ac, 0xe3aa, 0xe3ab, 0x8ddf, 0x8c72, 0x9275, 0x94b1, 0x8f90, - 0x946c, 0x94eb, 0xe3ad, 0x9ceb, 0xe3ae, 0xe3b0, 0x9785, 0xe3af, - 0xe3b2, 0xe3b1, 0x9772, 0xe3b3, 0x94fc, 0xe3b4, 0xe3b7, 0xe3b6, - 0xe3b5, 0xe3b8, 0x8c51, 0x9141, 0x8b60, 0xe3bc, 0xe3b9, 0xe3ba, - 0xe3bd, 0xe3be, 0xe3bb, 0x8948, 0x89a5, 0xe3c0, 0xe3c1, 0xe3c2, - 0x9782, 0x8f4b, 0xe3c4, 0xe3c3, 0x9089, 0xe3c5, 0xe3c6, 0xe3c7, - 0x8ae3, 0x8acb, 0xe3c8, 0xe3c9, 0x967c, 0x9783, 0x9773, 0x9856, - 0x8d6c, 0xe3cc, 0x8ed2, 0xe3cb, 0xe3cd, 0x8ea7, 0x91cf, 0xe3ce, - 0x8d6b, 0x96d5, 0xe3cf, 0xe3d0, 0xe3d1, 0xe3d2, 0xe3d3, 0x8ea8, - 0x96eb, 0xe3d5, 0x925e, 0xe3d4, 0xe3d7, 0xe3d6, 0xe3d8, 0x90b9, - 0xe3d9, 0xe3da, 0x95b7, 0xe3db, 0x918f, 0xe3dc, 0xe3dd, 0x97fc, - 0xe3e0, 0xe3df, 0xe3de, 0x92ae, 0xe3e1, 0x9045, 0xe3e2, 0xe3e3, - 0x9857, 0xe3e4, 0xe3e5, 0xe3e7, 0xe3e6, 0x94a3, 0x93f7, 0x985d, - 0x94a7, 0xe3e9, 0x8fd1, 0x9549, 0xe3ea, 0xe3e8, 0x8acc, 0x8cd2, - 0x8e88, 0x94ec, 0x8ca8, 0x9662, 0xe3ed, 0xe3eb, 0x8d6d, 0x8d6e, - 0x88e7, 0x8de6, 0x9478, 0x88dd, 0xe3f2, 0x925f, 0x9477, 0x91d9, - 0xe3f4, 0xe3f0, 0xe3f3, 0xe3ee, 0xe3f1, 0x9645, 0x8cd3, 0x88fb, - 0xe3ef, 0xe3f6, 0xe3f7, 0x93b7, 0x8bb9, 0xe445, 0x945c, 0x8e89, - 0x8bba, 0x90c6, 0x9865, 0x96ac, 0xe3f5, 0x90d2, 0x8b72, 0xe3f8, - 0xe3fa, 0xe3f9, 0xe3fb, 0x9245, 0x945d, 0x92af, 0xe442, 0xe441, - 0xe3fc, 0x9074, 0x9585, 0xe444, 0xe443, 0x8d6f, 0x9872, 0xe454, - 0xe448, 0xe449, 0x8eee, 0xe447, 0x8d98, 0xe446, 0xe44a, 0x92b0, - 0x95a0, 0x9142, 0x91da, 0xe44e, 0xe44f, 0xe44b, 0xe44c, 0xe44d, - 0x8d70, 0xe455, 0xe451, 0x9586, 0x968c, 0x9547, 0xe450, 0xe453, - 0xe452, 0x9663, 0xe456, 0xe457, 0x9156, 0xe458, 0xe45a, 0xe45e, - 0xe45b, 0xe459, 0x945e, 0xe45c, 0xe45d, 0x89b0, 0xe464, 0xe45f, - 0xe460, 0xe461, 0x919f, 0xe463, 0xe462, 0xe465, 0xe466, 0xe467, - 0x9062, 0x89e7, 0xe468, 0x97d5, 0x8ea9, 0x8f4c, 0x8e8a, 0x9276, - 0xe469, 0xe46a, 0x8950, 0xe46b, 0xe46c, 0xe46d, 0xe46e, 0xe46f, - 0x8bbb, 0x9da8, 0xe470, 0x90e3, 0xe471, 0x8ec9, 0xe472, 0x98ae, - 0xe473, 0x95dc, 0x8ada, 0x9143, 0x8f77, 0x9591, 0x8f4d, 0xe474, - 0x8d71, 0xe475, 0x94ca, 0xe484, 0xe477, 0x91c7, 0x9495, 0x8cbd, - 0xe476, 0x9144, 0xe478, 0x92f8, 0xe47a, 0xe479, 0xe47c, 0xe47b, - 0xe47d, 0xe480, 0xe47e, 0x8acd, 0xe481, 0xe482, 0xe483, 0x8daf, - 0x97c7, 0xe485, 0x9046, 0x8990, 0xe486, 0xe487, 0xe488, 0x88f0, - 0xe489, 0xe48a, 0x9587, 0x8ec5, 0xe48c, 0x8a48, 0x88b0, 0xe48b, - 0xe48e, 0x946d, 0x9063, 0x89d4, 0x9646, 0x8c7c, 0x8bda, 0xe48d, - 0x89e8, 0x8aa1, 0x8991, 0xe492, 0x97e8, 0x91db, 0x9563, 0xe49e, - 0x89d5, 0xe49c, 0xe49a, 0xe491, 0xe48f, 0xe490, 0x8ee1, 0x8bea, - 0x9297, 0x93cf, 0x8970, 0xe494, 0xe493, 0xe499, 0xe495, 0xe498, - 0x96ce, 0xe497, 0x89d6, 0x8a9d, 0xe49b, 0xe49d, 0x8c73, 0xe4a1, - 0xe4aa, 0xe4ab, 0x88a9, 0xe4b2, 0x88ef, 0xe4a9, 0xe4a8, 0xe4a3, - 0xe4a2, 0xe4a0, 0xe49f, 0x9283, 0x91f9, 0xe4a5, 0xe4a4, 0xe4a7, - 0x9190, 0x8c74, 0x8960, 0xe4a6, 0x8d72, 0x9191, 0xe4b8, 0xe4b9, - 0x89d7, 0x89ac, 0xe4b6, 0xe4ac, 0xe4b4, 0xe4bb, 0xe4b5, 0xe4b3, - 0xe496, 0xe4b1, 0xe4ad, 0x8ace, 0xe4af, 0xe4ba, 0xe4b0, 0xe4bc, - 0xe4ae, 0x949c, 0x9789, 0xe4b7, 0xe4cd, 0xe4c5, 0x909b, 0x8b65, - 0x8bdb, 0xe4c0, 0x89d9, 0x8fd2, 0xe4c3, 0x8dd8, 0x9370, 0xe4c8, - 0x95ec, 0xe4bf, 0x89d8, 0x8cd4, 0x9548, 0xe4c9, 0xe4bd, 0xe4c6, - 0xe4d0, 0xe4c1, 0xe4c2, 0x93b8, 0xe4c7, 0xe4c4, 0x9647, 0xe4ca, - 0x88de, 0xe4be, 0xe4cc, 0xe4cb, 0x948b, 0xe4d2, 0xe4dd, 0x8a9e, - 0xe4e0, 0xe4ce, 0xe4d3, 0x978e, 0xe4dc, 0x9774, 0x97a8, 0x9298, - 0x8a8b, 0x9592, 0xe4e2, 0x939f, 0x88af, 0xe4db, 0xe4d7, 0x9192, - 0xe4d1, 0xe4d9, 0xe4de, 0x944b, 0x88a8, 0xe4d6, 0xe4df, 0x9598, - 0xe4da, 0xe4d5, 0x8fd3, 0x8f4e, 0x8eaa, 0x96d6, 0x9566, 0xe4e5, - 0xe4ee, 0xe4d8, 0x8a97, 0x8ff6, 0xe4e3, 0xe4e8, 0x9193, 0xe4e4, - 0xe4eb, 0x927e, 0xe4ec, 0x9775, 0xe4e1, 0x8a57, 0xe4e7, 0xe4ea, - 0x96aa, 0xe4ed, 0xe4e6, 0xe4e9, 0x9648, 0x9840, 0xe4f1, 0xe4f8, - 0xe4f0, 0x8ec1, 0xe4cf, 0x95cc, 0x96a0, 0xe4f7, 0xe4f6, 0xe4f2, - 0xe4f3, 0x8955, 0xe4f5, 0xe4ef, 0x92d3, 0xe4f4, 0x88fc, 0x91a0, - 0x95c1, 0xe4f9, 0xe540, 0x94d7, 0xe4fc, 0x8fd4, 0x8ec7, 0xe542, - 0x8bbc, 0xe543, 0x9599, 0xe4fb, 0xe4d4, 0xe4fa, 0x986e, 0x93a0, - 0x9593, 0xe54a, 0xe550, 0xe551, 0xe544, 0x9496, 0xe54e, 0xe546, - 0xe548, 0xe552, 0xe547, 0xe54b, 0x8992, 0x93e3, 0xe54c, 0xe54f, - 0xe545, 0x9145, 0xe549, 0x8e46, 0x9064, 0x8c4f, 0x96f2, 0x96f7, - 0x8f92, 0xe556, 0xe554, 0x986d, 0xe553, 0x9795, 0xe555, 0xe557, - 0xe558, 0xe55b, 0xe559, 0x93a1, 0xe55a, 0x94cb, 0xe54d, 0x8f93, - 0xe55c, 0xe561, 0x9194, 0xe560, 0xe541, 0xe562, 0x9168, 0xe55d, - 0xe55f, 0xe55e, 0x9f50, 0x9f41, 0xe564, 0xe563, 0x9796, 0xe1ba, - 0xe565, 0xe566, 0xe567, 0x8cd5, 0x8b73, 0xe569, 0x997c, 0x8b95, - 0x97b8, 0x8bf1, 0xe56a, 0xe56b, 0x928e, 0xe56c, 0x93f8, 0x88b8, - 0x89e1, 0xe571, 0xe572, 0xe56d, 0x8e5c, 0xe56e, 0x9461, 0xe56f, - 0xe570, 0xe57a, 0xe574, 0xe577, 0xe573, 0xe575, 0xe576, 0x8ed6, - 0xe578, 0x9260, 0x8c75, 0x8a61, 0xe57b, 0x8a5e, 0xe581, 0xe57c, - 0xe580, 0x94b8, 0xe57d, 0xe57e, 0x9567, 0x94d8, 0xe582, 0x91fb, - 0xe58c, 0xe588, 0x89e9, 0xe586, 0x9649, 0xe587, 0xe584, 0xe585, - 0xe58a, 0xe58d, 0xe58b, 0xe589, 0xe583, 0x9277, 0xe594, 0x96a8, - 0xe592, 0xe593, 0xe58e, 0xe590, 0xe591, 0xe58f, 0x90e4, 0x9858, - 0xe598, 0xe599, 0xe59f, 0x9049, 0xe59b, 0xe59e, 0xe596, 0xe595, - 0xe5a0, 0x89da, 0xe59c, 0xe5a1, 0xe59d, 0xe59a, 0x92b1, 0xe597, - 0x9488, 0xe5a5, 0x975a, 0xe5a4, 0xe5a3, 0xe5ac, 0xe5a6, 0xe5ae, - 0x9786, 0xe5b1, 0xe5a8, 0xe5a9, 0xe5ad, 0xe5b0, 0xe5af, 0xe5a7, - 0xe5aa, 0xe5bb, 0xe5b4, 0xe5b2, 0xe5b3, 0xe5b8, 0xe5b9, 0x8a49, - 0x8b61, 0xe5b7, 0xe5a2, 0xe5b6, 0xe5ba, 0xe5b5, 0xe5bc, 0xe5be, - 0xe5bd, 0xe5c0, 0xe5bf, 0xe579, 0xe5c4, 0xe5c1, 0xe5c2, 0xe5c3, - 0xe5c5, 0x8c8c, 0xe5c7, 0xe5c6, 0x8f4f, 0x8d73, 0x9fa5, 0xe5c8, - 0x8f70, 0x8a58, 0xe5c9, 0x8971, 0x8fd5, 0xe5ca, 0x8d74, 0xe5cb, - 0x88df, 0x955c, 0xe5cc, 0x908a, 0xe5d3, 0xe5d0, 0x928f, 0xe5d1, - 0xe5ce, 0x8bdc, 0xe5cd, 0xe5d4, 0x8c55, 0x91dc, 0xe5da, 0xe5d6, - 0x91b3, 0xe5d5, 0xe5d8, 0xe5cf, 0xe5d9, 0xe5db, 0x94ed, 0xe5d7, - 0xe5dc, 0xe5de, 0x8cd1, 0xe5d2, 0x88bf, 0xe5dd, 0x8dd9, 0x97f4, - 0xe5df, 0xe5e0, 0x9195, 0x97a0, 0xe5e1, 0x9754, 0xe5e2, 0xe5e3, - 0x95e2, 0xe5e4, 0x8dbe, 0x97a1, 0xe5e9, 0xe5ea, 0x8fd6, 0xe5e8, - 0x9787, 0xe5e5, 0xe5e7, 0x90bb, 0x909e, 0xe5e6, 0xe5eb, 0x95a1, - 0xe5ed, 0xe5ec, 0x8a8c, 0x964a, 0xe5ee, 0xe5fa, 0xe5f0, 0xe5f1, - 0xe5f2, 0xe5f3, 0xe5f7, 0xe5f8, 0xe5f6, 0xe5f4, 0xe5ef, 0xe5f5, - 0xe5f9, 0xe8b5, 0x89a6, 0xe5fc, 0x8bdd, 0xe5fb, 0xe641, 0xe640, - 0xe643, 0xe642, 0xe644, 0x8f50, 0xe645, 0xe646, 0xe647, 0x90bc, - 0x9776, 0xe648, 0x95a2, 0x9465, 0xe649, 0xe64a, 0x8ca9, 0x8b4b, - 0xe64b, 0x8e8b, 0x9460, 0xe64c, 0x8a6f, 0xe64d, 0xe64f, 0x9797, - 0xe64e, 0x9065, 0xe650, 0xe651, 0xe652, 0x8acf, 0xe653, 0xe654, - 0xe655, 0xe656, 0x8a70, 0xe657, 0xe658, 0xe659, 0x89f0, 0x9047, - 0xe65a, 0xe65b, 0xe65c, 0x8cbe, 0x92f9, 0xe65d, 0x8c76, 0x9075, - 0xe660, 0x93a2, 0xe65f, 0x8c50, 0xe65e, 0x91f5, 0x8b4c, 0xe661, - 0xe662, 0x8fd7, 0x8c8d, 0xe663, 0x964b, 0x90dd, 0x8b96, 0x96f3, - 0x9169, 0xe664, 0x9066, 0x9290, 0x8fd8, 0xe665, 0xe668, 0xe669, - 0x8dbc, 0x91c0, 0xe667, 0x8fd9, 0x955d, 0xe666, 0x8e8c, 0x8972, - 0xe66d, 0x8c77, 0x8e8e, 0x8e8d, 0x986c, 0xe66c, 0xe66b, 0x9146, - 0x8b6c, 0x9862, 0x8a59, 0x8fda, 0xe66a, 0xe66f, 0xe670, 0xe66e, - 0x8cd6, 0x975f, 0x8e8f, 0x9446, 0xe673, 0x90be, 0x9261, 0x9755, - 0xe676, 0x8cea, 0x90bd, 0xe672, 0xe677, 0x8ceb, 0xe674, 0xe675, - 0xe671, 0x90e0, 0x93c7, 0x924e, 0x89db, 0x94ee, 0x8b62, 0x92b2, - 0xe67a, 0xe678, 0x926b, 0x90bf, 0x8ad0, 0xe679, 0x907a, 0x97c8, - 0x985f, 0xe67b, 0xe687, 0x92b3, 0xe686, 0xe683, 0xe68b, 0xe684, - 0xe680, 0x92fa, 0xe67e, 0xe67c, 0x9740, 0x8e90, 0xe681, 0xe67d, - 0xe685, 0x8f94, 0x8cbf, 0x91f8, 0x9664, 0x8979, 0x88e0, 0x93a3, - 0xe689, 0xe688, 0x93e4, 0xe68d, 0xe682, 0xe68c, 0xe68e, 0x8caa, - 0xe68a, 0x8d75, 0x8ed3, 0xe68f, 0x9777, 0xe692, 0xe695, 0xe693, - 0x9554, 0xe690, 0x8bde, 0xe694, 0xe696, 0xe69a, 0xe697, 0xe699, - 0xe698, 0xe69b, 0x8eaf, 0xe69d, 0xe69c, 0x9588, 0xe69f, 0x8c78, - 0xe69e, 0xe6a0, 0xe6a1, 0x8b63, 0xe3bf, 0x8ff7, 0xe6a2, 0x8cec, - 0xe6a3, 0xe6a4, 0x8e5d, 0x9dcc, 0xe6a5, 0xe6a6, 0x8f51, 0xe6a7, - 0xe6a8, 0xe6a9, 0xe6aa, 0xe6ab, 0x924a, 0xe6ac, 0xe6ae, 0xe6ad, - 0x93a4, 0xe6af, 0x964c, 0xe6b0, 0xe6b1, 0xe6b2, 0xe6b3, 0x93d8, - 0x8fdb, 0xe6b4, 0x8d8b, 0x98ac, 0xe6b5, 0xe6b6, 0x955e, 0xe6b7, - 0xe6bf, 0xe6b8, 0xe6ba, 0xe6b9, 0xe6bb, 0x9665, 0xe6bc, 0xe6bd, - 0xe6be, 0xe6c0, 0x8a4c, 0x92e5, 0x9589, 0x8de0, 0x8d76, 0x956e, - 0x89dd, 0x94cc, 0xe6c3, 0x8ad1, 0x90d3, 0xe6c2, 0xe6c7, 0x9299, - 0x96e1, 0xe6c5, 0xe6c6, 0x8b4d, 0xe6c8, 0x9483, 0x91dd, 0x94ef, - 0x935c, 0xe6c4, 0x9666, 0x89ea, 0xe6ca, 0x9847, 0x92c0, 0x9864, - 0x8e91, 0xe6c9, 0x91af, 0xe6da, 0x9147, 0x93f6, 0x956f, 0xe6cd, - 0x8e5e, 0x8e92, 0x8fdc, 0x9485, 0x8cab, 0xe6cc, 0xe6cb, 0x958a, - 0x8ebf, 0x9371, 0xe6cf, 0xe6d0, 0x8d77, 0xe6ce, 0xe6d1, 0xe6d2, - 0xe6d4, 0x91a1, 0xe6d3, 0x8ae4, 0xe6d6, 0xe6d5, 0xe6d7, 0xe6d9, - 0xe6db, 0xe6dc, 0x90d4, 0x8ecd, 0xe6dd, 0x8a71, 0xe6de, 0x9196, - 0xe6df, 0xe6e0, 0x958b, 0x8b4e, 0xe6e1, 0x92b4, 0x897a, 0xe6e2, - 0x8eef, 0x9096, 0x91ab, 0xe6e5, 0xe6e4, 0xe6e3, 0xe6eb, 0xe6e9, - 0xe6e6, 0xe6e8, 0xe6e7, 0xe6ea, 0x8b97, 0xe6ee, 0x90d5, 0xe6ef, - 0x8cd7, 0xe6ec, 0xe6ed, 0x9848, 0x92b5, 0x9148, 0xe6f0, 0xe6f3, - 0xe6f1, 0xe6f2, 0x9778, 0x93a5, 0xe6f6, 0xe6f4, 0xe6f5, 0xe6f7, - 0xe748, 0xe6fa, 0xe6fb, 0xe6f9, 0xe6f8, 0x92fb, 0xe740, 0xe744, - 0xe741, 0xe6fc, 0xe742, 0xe743, 0xe74a, 0xe745, 0x90d6, 0xe747, - 0xe749, 0xe746, 0xe74c, 0x8f52, 0xe74b, 0xe74d, 0xe74e, 0xe751, - 0xe750, 0xe74f, 0xe753, 0xe752, 0x96f4, 0xe755, 0xe754, 0xe756, - 0xe757, 0xe759, 0xe758, 0x9067, 0xe75a, 0x8beb, 0xe75b, 0xe75d, - 0xe75e, 0xe75f, 0xe75c, 0xe760, 0x8ed4, 0xe761, 0x8b4f, 0x8c52, - 0x8cac, 0xe762, 0x93ee, 0x935d, 0xe763, 0xe766, 0x8eb2, 0xe765, - 0xe764, 0x8c79, 0xe767, 0x8a72, 0xe769, 0x8dda, 0xe768, 0xe771, - 0xe76b, 0xe76d, 0x95e3, 0xe76a, 0xe76c, 0xe770, 0xe76e, 0x8b50, - 0xe76f, 0xe772, 0x9479, 0x97d6, 0x8f53, 0xe773, 0x9741, 0xe775, - 0xe774, 0xe778, 0x9760, 0xe777, 0x8a8d, 0xe776, 0xe77b, 0xe77a, - 0xe779, 0x9351, 0xe77c, 0xe77d, 0xe77e, 0x8d8c, 0x8c44, 0xe780, - 0xe781, 0xe782, 0x9068, 0xe783, 0x8eab, 0xe784, 0xe785, 0x999f, - 0x999e, 0xe786, 0xe390, 0xe787, 0x9243, 0x904a, 0x945f, 0xe788, - 0x95d3, 0x92d2, 0x8d9e, 0x9248, 0x8949, 0x9698, 0x9076, 0x8c7d, - 0x8bdf, 0x95d4, 0xe789, 0xe78b, 0xe78a, 0x89de, 0x93f4, 0xe78c, - 0x9497, 0x9352, 0xe78d, 0x8f71, 0xe78f, 0x96c0, 0xe79e, 0xe791, - 0xe792, 0x92c7, 0x91de, 0x9197, 0x93a6, 0xe790, 0x8b74, 0xe799, - 0xe796, 0xe7a3, 0x93a7, 0x9280, 0xe793, 0x92fc, 0x9372, 0xe794, - 0xe798, 0x9080, 0x9487, 0x92ca, 0x90c0, 0xe797, 0x91ac, 0x91a2, - 0xe795, 0x88a7, 0x9841, 0xe79a, 0x91df, 0x8f54, 0x9069, 0xe79c, - 0xe79b, 0x88ed, 0xe79d, 0x954e, 0xe7a5, 0x93d9, 0x908b, 0x9278, - 0x8bf6, 0xe7a4, 0x9756, 0x895e, 0x95d5, 0x89df, 0xe79f, 0xe7a0, - 0xe7a1, 0xe7a2, 0x93b9, 0x9242, 0x88e1, 0xe7a6, 0xe7a7, 0xeaa1, - 0x91bb, 0xe7a8, 0x8993, 0x916b, 0x8cad, 0x9779, 0xe7a9, 0x934b, - 0x9198, 0x8ed5, 0xe7aa, 0xe7ad, 0x8f85, 0xe7ab, 0x914a, 0x9149, - 0x88e2, 0x97c9, 0xe7af, 0x94f0, 0xe7b1, 0xe7b0, 0xe7ae, 0xe284, - 0x8ad2, 0xe78e, 0xe7b3, 0xe7b2, 0xe7b4, 0x9757, 0x93df, 0x964d, - 0xe7b5, 0x8ed7, 0xe7b6, 0xe7b7, 0xe7b8, 0x9340, 0x88e8, 0x8d78, - 0x9859, 0xe7bc, 0x8c53, 0xe7b9, 0xe7ba, 0x9594, 0x8a73, 0x9758, - 0x8bbd, 0x9373, 0xe7bd, 0xe7be, 0xe7bf, 0x9341, 0xe7c1, 0xe7c0, - 0x93d1, 0xe7c2, 0x8f55, 0x8ede, 0x947a, 0x9291, 0x8ef0, 0x908c, - 0xe7c3, 0xe7c4, 0x907c, 0xe7c5, 0xe7c6, 0xe7c7, 0x978f, 0x8f56, - 0xe7c9, 0xe7c8, 0x8d79, 0x8d93, 0x8e5f, 0xe7cc, 0x8f86, 0xe7cb, - 0xe7ca, 0x91e7, 0x8ced, 0x90c1, 0x94ae, 0x8f58, 0xe7cd, 0x8fdd, - 0xe7d0, 0xe7ce, 0xe7cf, 0xe7d2, 0xe7d1, 0x8ff8, 0xe7d3, 0xe7d4, - 0xe7d5, 0x94ce, 0x8dd1, 0x8edf, 0xe7d6, 0xe7d7, 0x97a2, 0x8f64, - 0x96ec, 0x97ca, 0xe7d8, 0x8be0, 0xe7d9, 0x9342, 0xe7dc, 0x8a98, - 0x906a, 0xe7da, 0xe7db, 0x92de, 0x9674, 0x8bfa, 0xe7de, 0xe7df, - 0xe7dd, 0xe7e1, 0x93dd, 0x8a62, 0xe7e5, 0xe7e2, 0xe7e4, 0xe7e0, - 0xe86e, 0xe7e3, 0x97e9, 0x8cd8, 0xe7ed, 0x9353, 0xe7e8, 0xe7eb, - 0xe7e9, 0xe7ee, 0xe7ef, 0xe7e7, 0xe7f4, 0x8994, 0xe7e6, 0x94ab, - 0xe7ea, 0x8fde, 0x8d7a, 0x9667, 0x8be2, 0x8f65, 0x93ba, 0x914c, - 0xe7f2, 0xe7ec, 0xe7f1, 0x96c1, 0x92b6, 0xe7f3, 0xe7f0, 0x914b, - 0xe7f7, 0xe7f6, 0xe7f5, 0x964e, 0x8f9b, 0xe7f8, 0x95dd, 0x8973, - 0x9565, 0x9292, 0x8b98, 0xe7fa, 0x8d7c, 0x8e4b, 0xe7f9, 0x908d, - 0x908e, 0xe840, 0xe842, 0x8ff9, 0xe841, 0xe843, 0x8bd1, 0x9564, - 0x8ee0, 0x9842, 0xe7fc, 0x8df6, 0x985e, 0xe845, 0xe844, 0xe846, - 0xe7fb, 0x93e7, 0x9374, 0x92d5, 0xe84b, 0x9262, 0xe847, 0xe848, - 0x8c4c, 0xe84a, 0x8cae, 0xe849, 0x8fdf, 0x8a99, 0xe84f, 0x8dbd, - 0x9199, 0x92c8, 0x8a5a, 0xe84d, 0xe84e, 0x92c1, 0xe84c, 0xe850, - 0xe856, 0xe859, 0xe858, 0x934c, 0xe851, 0xe852, 0xe855, 0xe857, - 0x8bbe, 0xe85a, 0xe854, 0xe853, 0xe85e, 0xe85f, 0xe860, 0xe85d, - 0xe85c, 0x8fe0, 0x93a8, 0xe85b, 0xe864, 0xe862, 0xe863, 0xe861, - 0x91f6, 0xe865, 0xe866, 0xe868, 0x8ad3, 0xe867, 0x96f8, 0xe873, - 0xe869, 0xe86c, 0xe86a, 0xe86b, 0xe86d, 0xe86f, 0xe870, 0xe871, - 0xe874, 0xe872, 0xe875, 0xe877, 0xe876, 0x92b7, 0x96e5, 0xe878, - 0x914d, 0xe879, 0x95c2, 0xe87a, 0x8a4a, 0x895b, 0x8ad5, 0x8ad4, - 0xe87b, 0xe87c, 0xe87d, 0xe87e, 0xe880, 0x8ad6, 0x8a74, 0x8d7d, - 0x94b4, 0xe882, 0xe881, 0xe883, 0x897b, 0xe886, 0xe885, 0xe884, - 0xe887, 0xe88a, 0x88c5, 0xe888, 0xe88c, 0xe88b, 0xe88e, 0xe88d, - 0xe88f, 0x93ac, 0xe890, 0xe891, 0xe893, 0xe892, 0x958c, 0xe894, - 0xe895, 0x8de3, 0xe896, 0xe897, 0x9668, 0x916a, 0x88a2, 0x91c9, - 0xe898, 0x958d, 0xe89b, 0xe899, 0x8d7e, 0xe89a, 0x8cc0, 0x95c3, - 0xe89d, 0xe89f, 0xe89e, 0xe8a0, 0x8940, 0x9077, 0x8f9c, 0x8ad7, - 0xe8a1, 0x9486, 0xe8a3, 0x8941, 0xe8a2, 0x92c2, 0x97cb, 0x93a9, - 0xe89c, 0x97a4, 0x8caf, 0x977a, 0x8bf7, 0x97b2, 0x8c47, 0x91e0, - 0xe440, 0xe8a4, 0x8a4b, 0x908f, 0x8a75, 0xe8a6, 0xe8a7, 0xe8a5, - 0x8c84, 0x8ddb, 0x8fe1, 0x8942, 0x97d7, 0xe8a9, 0xe7ac, 0xe8a8, - 0xe8ac, 0xe8aa, 0xe8ab, 0xe8ad, 0xe8ae, 0x97ea, 0xe8af, 0xe8b0, - 0x90c7, 0x94b9, 0x909d, 0x8ae5, 0x9759, 0x89eb, 0x8f57, 0x8cd9, - 0xe8b3, 0xe8b2, 0x8e93, 0xe8b4, 0xe8b1, 0x8e47, 0xe8b8, 0xe5ab, - 0x99d4, 0x9097, 0xe8b6, 0x97a3, 0x93ef, 0x894a, 0x90e1, 0x8eb4, - 0x95b5, 0x895f, 0x97eb, 0x978b, 0xe8b9, 0x9364, 0x8ef9, 0xe8ba, - 0xe8bb, 0x906b, 0xe8bc, 0x97ec, 0xe8b7, 0xe8be, 0xe8c0, 0xe8bf, - 0xe8bd, 0xe8c1, 0xe8c2, 0x919a, 0x89e0, 0xe8c3, 0x96b6, 0xe8c4, - 0xe8c5, 0x9849, 0x9e50, 0xe8c6, 0xe8c7, 0xe8c8, 0xe8cc, 0xe8c9, - 0xe8ca, 0xe8cb, 0xe8cd, 0x90c2, 0x96f5, 0x90c3, 0xe8ce, 0x94f1, - 0xe8cf, 0xea72, 0x96ca, 0xe8d0, 0xe8d1, 0xe8d2, 0x8a76, 0xe8d4, - 0x9078, 0xe8d5, 0x8c43, 0xe8d6, 0xe8da, 0xe8d8, 0xe8d9, 0x8a93, - 0xe8d7, 0xe8db, 0xe8dc, 0x88c6, 0xe8dd, 0xe8de, 0x8fe2, 0xe8df, - 0x8b66, 0xe8e2, 0xe8e1, 0xe8e0, 0xe691, 0x95da, 0xe8e3, 0xe8e4, - 0xe8e5, 0xe8e6, 0xe8e7, 0xe8e8, 0x8ad8, 0xe8e9, 0xe8ea, 0x9442, - 0xe8ec, 0x89b9, 0xe8ef, 0xe8ee, 0x8943, 0x8bbf, 0x95c5, 0x92b8, - 0x8da0, 0x8d80, 0x8f87, 0x907b, 0xe8f1, 0xe8f0, 0x9761, 0x8ae6, - 0x94d0, 0x93da, 0x909c, 0x97cc, 0x8c7a, 0xe8f4, 0xe8f3, 0x966a, - 0x93aa, 0x896f, 0xe8f5, 0xe8f2, 0x9570, 0x978a, 0xe8f6, 0xe8f7, - 0xe8f9, 0x91e8, 0x8a7a, 0x8a7b, 0xe8f8, 0x8ae7, 0x8cb0, 0x8ae8, - 0x935e, 0x97de, 0x8cda, 0xe8fa, 0xe8fb, 0xe8fc, 0xe940, 0xe942, - 0xe941, 0x9597, 0xe943, 0xe944, 0xe945, 0xe946, 0xe948, 0xe947, - 0xe949, 0x94f2, 0xe3ca, 0x9048, 0x8b51, 0xe94a, 0xe94b, 0x99aa, - 0x9f5a, 0x94d1, 0x88f9, 0x88b9, 0x8e94, 0x964f, 0x8ffc, 0xe94c, - 0x96dd, 0xe94d, 0x977b, 0x8961, 0x8e60, 0xe94e, 0x89ec, 0xe94f, - 0xe950, 0xe952, 0xe953, 0xe955, 0xe951, 0xe954, 0x8ad9, 0xe956, - 0xe957, 0xe958, 0xe959, 0xe95a, 0xe95c, 0xe95b, 0xe95e, 0xe961, - 0xe95d, 0xe95f, 0xe960, 0xe962, 0x8bc0, 0x8ef1, 0xe963, 0xe964, - 0x8d81, 0xe965, 0x8a5d, 0x946e, 0xe966, 0xe967, 0x9279, 0x93e9, - 0xe968, 0x949d, 0x91ca, 0x8977, 0x8bec, 0x8bed, 0x9293, 0xe96d, - 0x8bee, 0x89ed, 0xe96c, 0xe96a, 0xe96b, 0xe969, 0xe977, 0xe96e, - 0xe96f, 0xe970, 0xe971, 0xe973, 0xe972, 0x8f78, 0xe974, 0xe976, - 0x8b52, 0xe975, 0x919b, 0x8cb1, 0xe978, 0x91cb, 0xe979, 0x93ab, - 0xe97a, 0xe980, 0xe97d, 0xe97c, 0xe97e, 0xe97b, 0xe982, 0xe981, - 0xe984, 0x8bc1, 0xe983, 0xe985, 0xe986, 0xe988, 0xe987, 0xe989, - 0xe98b, 0xe98a, 0x8d9c, 0xe98c, 0xe98d, 0x8a5b, 0xe98e, 0xe98f, - 0x9091, 0xe990, 0xe991, 0xe992, 0xe993, 0x8d82, 0xe994, 0xe995, - 0xe996, 0xe997, 0xe998, 0x94af, 0xe99a, 0x9545, 0xe99b, 0xe999, - 0xe99d, 0xe99c, 0xe99e, 0xe99f, 0xe9a0, 0xe9a1, 0xe9a2, 0xe9a3, - 0xe9a4, 0xe9a5, 0xe9a6, 0xe9a7, 0xe9a8, 0xe9a9, 0xe9aa, 0xe9ab, - 0xe9ac, 0x9f54, 0xe9ad, 0xe2f6, 0x8b53, 0x8a40, 0x8db0, 0xe9af, - 0xe9ae, 0x96a3, 0xe9b1, 0xe9b2, 0xe9b0, 0xe9b3, 0x9682, 0xe9b4, - 0x8b9b, 0x9844, 0xe9b5, 0xe9b7, 0x88bc, 0xe9b8, 0x95a9, 0xe9b6, - 0xe9b9, 0xe9ba, 0xe9bb, 0xe9bc, 0xe9bd, 0x968e, 0x8e4c, 0x8df8, - 0x914e, 0xe9be, 0xe9c1, 0xe9bf, 0xe9c2, 0x8cef, 0xe9c0, 0xe9c3, - 0xe9c4, 0xe9c5, 0xe9c9, 0x8e49, 0x91e2, 0xe9ca, 0xe9c7, 0xe9c6, - 0xe9c8, 0x8c7e, 0xe9ce, 0xe9cd, 0xe9cc, 0x88b1, 0xe9d8, 0xe9d4, - 0xe9d5, 0xe9d1, 0xe9d7, 0xe9d3, 0x8a82, 0x986b, 0xe9d6, 0xe9d2, - 0xe9d0, 0xe9cf, 0xe9da, 0xe9dd, 0xe9dc, 0xe9db, 0x9568, 0xe9d9, - 0x88f1, 0xe9de, 0xe9e0, 0x8a8f, 0xe9cb, 0x8956, 0xe9e2, 0xe9e1, - 0xe9df, 0x924c, 0x9690, 0x97d8, 0xe9e3, 0xe9e4, 0xe9e5, 0xe9e6, - 0xe9e7, 0x92b9, 0xe9e8, 0x94b5, 0xe9ed, 0xe9e9, 0xe9ea, 0x9650, - 0x96c2, 0x93ce, 0xe9ee, 0xe9ef, 0x93bc, 0xe9ec, 0xe9eb, 0x89a8, - 0xe9f7, 0xe9f6, 0x8995, 0xe9f4, 0xe9f3, 0xe9f1, 0x8a9b, 0xe9f0, - 0x8eb0, 0x89a7, 0x8d83, 0xe9fa, 0xe9f9, 0xe9f8, 0xe9f5, 0xe9fb, - 0xe9fc, 0xea44, 0xea43, 0xea45, 0x894c, 0xea40, 0xea41, 0x8d94, - 0x96b7, 0xea42, 0x9651, 0xea4a, 0xea46, 0xea4b, 0xea48, 0xea47, - 0x8c7b, 0xea4c, 0xea4d, 0xea4e, 0xea49, 0xe9f2, 0xea4f, 0x92df, - 0xea53, 0xea54, 0xea52, 0xea51, 0xea57, 0xea50, 0xea55, 0xea56, - 0xea59, 0xea58, 0xea5b, 0xea5c, 0xea5d, 0x9868, 0xea5a, 0x91e9, - 0x8deb, 0xea5e, 0xea5f, 0xea60, 0xea61, 0xea62, 0x8cb2, 0xea63, - 0xea64, 0x8ead, 0xea65, 0xea66, 0xea67, 0xea68, 0xea6b, 0xea69, - 0x985b, 0xea6a, 0x97ed, 0xea6c, 0x97d9, 0xea6d, 0x949e, 0xea6e, - 0xea70, 0xea71, 0xea6f, 0x8d8d, 0x96cb, 0x9683, 0x9bf5, 0x9f80, - 0x969b, 0x89a9, 0xea73, 0x8b6f, 0xea74, 0xea75, 0xea76, 0x8d95, - 0xea77, 0xe0d2, 0x96d9, 0x91e1, 0xea78, 0xea7a, 0xea79, 0xea7b, - 0xea7c, 0xea7d, 0xea7e, 0xea80, 0xea81, 0xea82, 0xea83, 0xea84, - 0xea85, 0xea86, 0xea87, 0xea88, 0x9343, 0x8cdb, 0xea8a, 0x916c, - 0xea8b, 0xea8c, 0x9540, 0xea8d, 0xea8e, 0xe256, 0xe6d8, 0xe8eb, - 0xea8f, 0xea90, 0xea92, 0xea93, 0xea94, 0x97ee, 0xea91, 0xea95, - 0xea96, 0xea98, 0xea97, 0xea9a, 0xea9b, 0xea99, 0x97b4, 0xea9c, - 0xea9d, 0xe273, 0xea9e, 0x8149, 0x8194, 0x8190, 0x8193, 0x8195, - 0x8169, 0x816a, 0x8196, 0x817b, 0x8143, 0x8144, 0x815e, 0x824f, - 0x8250, 0x8251, 0x8252, 0x8253, 0x8254, 0x8255, 0x8256, 0x8257, - 0x8258, 0x8146, 0x8147, 0x8183, 0x8181, 0x8184, 0x8148, 0x8197, - 0x8260, 0x8261, 0x8262, 0x8263, 0x8264, 0x8265, 0x8266, 0x8267, - 0x8268, 0x8269, 0x826a, 0x826b, 0x826c, 0x826d, 0x826e, 0x826f, - 0x8270, 0x8271, 0x8272, 0x8273, 0x8274, 0x8275, 0x8276, 0x8277, - 0x8278, 0x8279, 0x816d, 0x815f, 0x816e, 0x814f, 0x8151, 0x814d, - 0x8281, 0x8282, 0x8283, 0x8284, 0x8285, 0x8286, 0x8287, 0x8288, - 0x8289, 0x828a, 0x828b, 0x828c, 0x828d, 0x828e, 0x828f, 0x8290, - 0x8291, 0x8292, 0x8293, 0x8294, 0x8295, 0x8296, 0x8297, 0x8298, - 0x8299, 0x829a, 0x816f, 0x8162, 0x8170, 0x8150, 0x818f, -}; - -typedef struct { - unsigned short indx; /* index into big table */ - unsigned short used; /* bitmask of used entries */ -} Summary16; - -static const Summary16 jisx0208_uni2indx_page00[16] = { - /* 0x0000 */ - { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, - { 0, 0x0000 }, { 6843, 0x1000 }, { 0, 0x0000 }, { 0, 0x0000 }, /* ZINT: Patched reverse solidus (backslash) mapping U+005C to 0x815F */ - { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x118c }, { 5, 0x0053 }, - { 9, 0x0000 }, { 9, 0x0080 }, { 10, 0x0000 }, { 10, 0x0080 }, -}; -static const Summary16 jisx0208_uni2indx_page03[22] = { - /* 0x0300 */ - { 11, 0x0000 }, { 11, 0x0000 }, { 11, 0x0000 }, { 11, 0x0000 }, - { 11, 0x0000 }, { 11, 0x0000 }, { 11, 0x0000 }, { 11, 0x0000 }, - { 11, 0x0000 }, { 11, 0xfffe }, { 26, 0x03fb }, { 35, 0xfffe }, - { 50, 0x03fb }, { 59, 0x0000 }, { 59, 0x0000 }, { 59, 0x0000 }, - /* 0x0400 */ - { 59, 0x0002 }, { 60, 0xffff }, { 76, 0xffff }, { 92, 0xffff }, - { 108, 0xffff }, { 124, 0x0002 }, -}; -static const Summary16 jisx0208_uni2indx_page20[50] = { - /* 0x2000 */ - { 125, 0x0000 }, { 125, 0x3361 }, { 132, 0x0063 }, { 136, 0x080d }, - { 140, 0x0000 }, { 140, 0x0000 }, { 140, 0x0000 }, { 140, 0x0000 }, - { 140, 0x0000 }, { 140, 0x0000 }, { 140, 0x0000 }, { 140, 0x0000 }, - { 140, 0x0000 }, { 140, 0x0000 }, { 140, 0x0000 }, { 140, 0x0000 }, - /* 0x2100 */ - { 140, 0x0008 }, { 141, 0x0000 }, { 141, 0x0800 }, { 142, 0x0000 }, - { 142, 0x0000 }, { 142, 0x0000 }, { 142, 0x0000 }, { 142, 0x0000 }, - { 142, 0x0000 }, { 142, 0x000f }, { 146, 0x0000 }, { 146, 0x0000 }, - { 146, 0x0000 }, { 146, 0x0014 }, { 148, 0x0000 }, { 148, 0x0000 }, - /* 0x2200 */ - { 148, 0x098d }, { 154, 0x6404 }, { 158, 0x1f81 }, { 165, 0x2030 }, - { 168, 0x0000 }, { 168, 0x0004 }, { 169, 0x0cc3 }, { 175, 0x0000 }, - { 175, 0x00cc }, { 179, 0x0000 }, { 179, 0x0020 }, { 180, 0x0000 }, - { 180, 0x0000 }, { 180, 0x0000 }, { 180, 0x0000 }, { 180, 0x0000 }, - /* 0x2300 */ - { 180, 0x0000 }, { 180, 0x0004 }, -}; -static const Summary16 jisx0208_uni2indx_page25[23] = { - /* 0x2500 */ - { 181, 0x900f }, { 187, 0x3999 }, { 195, 0x9939 }, { 203, 0x9999 }, - { 211, 0x0804 }, { 213, 0x0000 }, { 213, 0x0000 }, { 213, 0x0000 }, - { 213, 0x0000 }, { 213, 0x0000 }, { 213, 0x0003 }, { 215, 0x300c }, - { 219, 0xc8c0 }, { 224, 0x0000 }, { 224, 0x8000 }, { 225, 0x0000 }, - /* 0x2600 */ - { 225, 0x0060 }, { 227, 0x0000 }, { 227, 0x0000 }, { 227, 0x0000 }, - { 227, 0x0005 }, { 229, 0x0000 }, { 229, 0xa400 }, -}; -static const Summary16 jisx0208_uni2indx_page30[16] = { - /* 0x3000 */ - { 232, 0xffef }, { 247, 0x103f }, { 254, 0x0000 }, { 254, 0x0000 }, - { 254, 0xfffe }, { 269, 0xffff }, { 285, 0xffff }, { 301, 0xffff }, - { 317, 0xffff }, { 333, 0x780f }, { 341, 0xfffe }, { 356, 0xffff }, - { 372, 0xffff }, { 388, 0xffff }, { 404, 0xffff }, { 420, 0x787f }, -}; -static const Summary16 jisx0208_uni2indx_page4e[1307] = { - /* 0x4e00 */ - { 431, 0x6f8b }, { 441, 0x43f3 }, { 450, 0x2442 }, { 454, 0x9b46 }, - { 462, 0xe82c }, { 469, 0xe3e0 }, { 477, 0x0004 }, { 478, 0x400a }, - { 481, 0x5f65 }, { 491, 0xdb36 }, { 501, 0x7977 }, { 512, 0x0449 }, - { 516, 0xecd7 }, { 527, 0xe3f0 }, { 536, 0x6038 }, { 541, 0x08c5 }, - /* 0x4f00 */ - { 546, 0xe602 }, { 552, 0x3403 }, { 557, 0x8000 }, { 558, 0x3551 }, - { 565, 0xe0c8 }, { 571, 0x7eab }, { 582, 0x8200 }, { 584, 0x9869 }, - { 591, 0xa948 }, { 597, 0x2942 }, { 602, 0xe803 }, { 608, 0x8060 }, - { 611, 0x441c }, { 616, 0xad93 }, { 625, 0xc03a }, { 631, 0x4568 }, - /* 0x5000 */ - { 637, 0xaa60 }, { 643, 0x8656 }, { 650, 0x3f7a }, { 661, 0x0240 }, - { 663, 0x8388 }, { 668, 0x1461 }, { 673, 0x1020 }, { 675, 0x2174 }, - { 681, 0x2021 }, { 684, 0x0702 }, { 688, 0x3000 }, { 690, 0x40bc }, - { 696, 0xa624 }, { 702, 0x4462 }, { 707, 0x60a8 }, { 712, 0x0a20 }, - /* 0x5100 */ - { 715, 0x0217 }, { 720, 0x8574 }, { 727, 0x0402 }, { 729, 0x9c84 }, - { 735, 0x7bfb }, { 748, 0x1415 }, { 753, 0x7f24 }, { 762, 0x11e2 }, - { 768, 0xb665 }, { 777, 0x02ef }, { 785, 0x1f75 }, { 795, 0x20ff }, - { 804, 0x3a70 }, { 811, 0x3840 }, { 815, 0x26c3 }, { 822, 0x6763 }, - /* 0x5200 */ - { 831, 0x4dd9 }, { 840, 0x2092 }, { 844, 0x46b0 }, { 850, 0x0fc9 }, - { 858, 0xbc98 }, { 866, 0x4850 }, { 870, 0x8638 }, { 876, 0xa03f }, - { 884, 0x2388 }, { 889, 0x8816 }, { 894, 0x3e09 }, { 901, 0x5232 }, - { 907, 0x22aa }, { 913, 0xe3a4 }, { 921, 0x00dd }, { 927, 0xc72c }, - /* 0x5300 */ - { 935, 0xa166 }, { 942, 0x26e1 }, { 949, 0x840b }, { 954, 0x8f0a }, - { 961, 0x27eb }, { 971, 0x559e }, { 980, 0xc241 }, { 985, 0x89bb }, - { 994, 0x0014 }, { 996, 0x8540 }, { 1000, 0x6361 }, { 1007, 0x0849 }, - { 1011, 0x7f0c }, { 1020, 0x8ad0 }, { 1026, 0xff3e }, { 1039, 0x05cf }, - /* 0x5400 */ - { 1047, 0xff1a }, { 1058, 0xa803 }, { 1063, 0x7a41 }, { 1070, 0x7b40 }, - { 1077, 0x4745 }, { 1084, 0x8002 }, { 1086, 0x0500 }, { 1088, 0x38eb }, - { 1097, 0xd851 }, { 1104, 0x0005 }, { 1106, 0x9934 }, { 1113, 0x710c }, - { 1119, 0x0397 }, { 1126, 0x0100 }, { 1127, 0x6366 }, { 1135, 0x2404 }, - /* 0x5500 */ - { 1138, 0x80d0 }, { 1142, 0x0051 }, { 1145, 0xc000 }, { 1147, 0x430a }, - { 1152, 0x9071 }, { 1158, 0x30c8 }, { 1163, 0x0008 }, { 1164, 0x5800 }, - { 1167, 0x0e99 }, { 1174, 0xf700 }, { 1181, 0x5f80 }, { 1188, 0x0041 }, - { 1190, 0x00b0 }, { 1193, 0x9410 }, { 1197, 0x0018 }, { 1199, 0x6280 }, - /* 0x5600 */ - { 1203, 0x0240 }, { 1205, 0x09d0 }, { 1210, 0x8200 }, { 1212, 0x0156 }, - { 1217, 0x5004 }, { 1220, 0x0801 }, { 1222, 0x1d10 }, { 1227, 0x0510 }, - { 1230, 0x84c1 }, { 1235, 0x0010 }, { 1236, 0x4025 }, { 1240, 0x1050 }, - { 1243, 0x410f }, { 1249, 0x4d8a }, { 1256, 0x4009 }, { 1259, 0xa60d }, - /* 0x5700 */ - { 1266, 0xab19 }, { 1274, 0x914c }, { 1280, 0x21c0 }, { 1284, 0x0981 }, - { 1288, 0xc485 }, { 1294, 0x0003 }, { 1296, 0x0652 }, { 1301, 0x8000 }, - { 1302, 0x0b04 }, { 1306, 0x0008 }, { 1307, 0x041d }, { 1312, 0x0009 }, - { 1314, 0x4849 }, { 1319, 0x905c }, { 1325, 0x0009 }, { 1327, 0x1690 }, - /* 0x5800 */ - { 1332, 0x0c65 }, { 1338, 0x2220 }, { 1341, 0x8412 }, { 1345, 0x2433 }, - { 1351, 0x0c03 }, { 1355, 0x4796 }, { 1363, 0x0a04 }, { 1366, 0x4225 }, - { 1371, 0x0028 }, { 1373, 0x9088 }, { 1377, 0x4900 }, { 1380, 0x4f08 }, - { 1386, 0x14a2 }, { 1391, 0xd3aa }, { 1400, 0xd830 }, { 1406, 0x3e87 }, - /* 0x5900 */ - { 1415, 0x8604 }, { 1419, 0x1f61 }, { 1427, 0x7ea4 }, { 1436, 0x4186 }, - { 1441, 0xc390 }, { 1447, 0x05b3 }, { 1454, 0x57a5 }, { 1463, 0x2118 }, - { 1467, 0x241e }, { 1473, 0x2a48 }, { 1478, 0x1128 }, { 1482, 0x4a04 }, - { 1486, 0x0a40 }, { 1489, 0x161b }, { 1496, 0x0d60 }, { 1501, 0x8840 }, - /* 0x5a00 */ - { 1504, 0x020a }, { 1507, 0x9502 }, { 1512, 0x8221 }, { 1516, 0x1060 }, - { 1519, 0x0243 }, { 1523, 0x0400 }, { 1524, 0x1444 }, { 1528, 0x8000 }, - { 1529, 0x0000 }, { 1529, 0x0c04 }, { 1532, 0x0000 }, { 1532, 0x7000 }, - { 1535, 0x1a06 }, { 1540, 0x00c1 }, { 1543, 0x024a }, { 1547, 0x0c00 }, - /* 0x5b00 */ - { 1549, 0x1a00 }, { 1552, 0x0040 }, { 1553, 0x1404 }, { 1556, 0x4045 }, - { 1560, 0x0029 }, { 1563, 0xbdb3 }, { 1574, 0x0a78 }, { 1580, 0x052b }, - { 1586, 0xbba9 }, { 1596, 0xbfa0 }, { 1605, 0x407c }, { 1611, 0x8379 }, - { 1619, 0x12fc }, { 1627, 0xe81d }, { 1635, 0x4bf6 }, { 1645, 0xc569 }, - /* 0x5c00 */ - { 1653, 0xeff6 }, { 1666, 0x044a }, { 1670, 0x2115 }, { 1675, 0xff02 }, - { 1684, 0xed63 }, { 1694, 0x402b }, { 1699, 0xd033 }, { 1706, 0x0242 }, - { 1709, 0x1000 }, { 1710, 0x0013 }, { 1713, 0x1b02 }, { 1718, 0x59ca }, - { 1726, 0x00a0 }, { 1728, 0x0200 }, { 1729, 0xa703 }, { 1736, 0x2c41 }, - /* 0x5d00 */ - { 1741, 0x4880 }, { 1744, 0x8ff2 }, { 1754, 0x0204 }, { 1756, 0x0000 }, - { 1756, 0x5800 }, { 1759, 0x1005 }, { 1762, 0x9200 }, { 1765, 0x0048 }, - { 1767, 0x1894 }, { 1772, 0x2001 }, { 1774, 0x5004 }, { 1777, 0x3480 }, - { 1781, 0x3200 }, { 1784, 0x684c }, { 1790, 0x49ea }, { 1798, 0x68be }, - /* 0x5e00 */ - { 1807, 0x184c }, { 1812, 0x2e42 }, { 1818, 0xa820 }, { 1822, 0x21c9 }, - { 1828, 0x50b9 }, { 1835, 0x80b0 }, { 1839, 0x001e }, { 1843, 0xff7c }, - { 1856, 0x849a }, { 1862, 0x14e0 }, { 1867, 0x28c1 }, { 1872, 0x01e0 }, - { 1876, 0x870e }, { 1883, 0xac49 }, { 1890, 0x130f }, { 1897, 0xdddb }, - /* 0x5f00 */ - { 1909, 0xbe1a }, { 1918, 0x89fb }, { 1928, 0xa2e0 }, { 1934, 0x51a2 }, - { 1940, 0x5502 }, { 1945, 0x32ca }, { 1952, 0x3e46 }, { 1960, 0x928b }, - { 1967, 0x1dbf }, { 1978, 0x438f }, { 1986, 0x6703 }, { 1993, 0x3218 }, - { 1998, 0x3028 }, { 2002, 0x33c0 }, { 2008, 0x0811 }, { 2011, 0xa923 }, - /* 0x6000 */ - { 2018, 0xc000 }, { 2020, 0x3a65 }, { 2028, 0x8fe3 }, { 2038, 0x0402 }, - { 2040, 0x2c4e }, { 2047, 0x8625 }, { 2053, 0xbf3d }, { 2065, 0x00a1 }, - { 2068, 0x3a1a }, { 2075, 0x8cd4 }, { 2082, 0x06c9 }, { 2088, 0x317c }, - { 2096, 0x00e0 }, { 2099, 0x950a }, { 2105, 0x018b }, { 2110, 0x0edb }, - /* 0x6100 */ - { 2119, 0xe34b }, { 2128, 0x8c20 }, { 2132, 0x1182 }, { 2136, 0xf010 }, - { 2141, 0x7d94 }, { 2150, 0xa728 }, { 2157, 0xc9ac }, { 2165, 0x40fb }, - { 2173, 0x4484 }, { 2177, 0x0653 }, { 2183, 0x5a90 }, { 2189, 0x4444 }, - { 2193, 0x3fc8 }, { 2202, 0x0001 }, { 2203, 0x0048 }, { 2205, 0xf5d4 }, - /* 0x6200 */ - { 2215, 0x7701 }, { 2222, 0xec57 }, { 2232, 0xc442 }, { 2237, 0x891d }, - { 2244, 0x6b83 }, { 2252, 0x4928 }, { 2257, 0x4109 }, { 2261, 0xd242 }, - { 2267, 0x061d }, { 2273, 0x59fe }, { 2284, 0x1800 }, { 2286, 0x3a22 }, - { 2292, 0xb7e4 }, { 2302, 0x3b9f }, { 2313, 0xf003 }, { 2319, 0xc0ea }, - /* 0x6300 */ - { 2326, 0x1386 }, { 2332, 0x8202 }, { 2335, 0x8980 }, { 2339, 0xe400 }, - { 2343, 0xb200 }, { 2347, 0x10a1 }, { 2351, 0x4b80 }, { 2356, 0x0cc4 }, - { 2361, 0xd309 }, { 2368, 0x8944 }, { 2373, 0x1faf }, { 2384, 0x4834 }, - { 2389, 0x8259 }, { 2395, 0x0c45 }, { 2400, 0x420a }, { 2404, 0x0450 }, - /* 0x6400 */ - { 2407, 0xa040 }, { 2410, 0x10c8 }, { 2414, 0x3140 }, { 2418, 0x4450 }, - { 2422, 0x4004 }, { 2424, 0x0100 }, { 2425, 0x8280 }, { 2428, 0x0540 }, - { 2431, 0x0108 }, { 2433, 0x442c }, { 2438, 0x6a30 }, { 2444, 0x1a05 }, - { 2449, 0x20a6 }, { 2454, 0x0514 }, { 2458, 0x90cf }, { 2466, 0x6456 }, - /* 0x6500 */ - { 2473, 0x0021 }, { 2475, 0x3100 }, { 2478, 0x9c18 }, { 2484, 0xcbf0 }, - { 2493, 0xa120 }, { 2497, 0x63e2 }, { 2505, 0x104c }, { 2509, 0x01b5 }, - { 2515, 0x538c }, { 2522, 0x9a83 }, { 2529, 0xb8b2 }, { 2537, 0x3281 }, - { 2542, 0x987a }, { 2550, 0x0a84 }, { 2554, 0x33e7 }, { 2564, 0x0c02 }, - /* 0x6600 */ - { 2567, 0xd4cc }, { 2575, 0x9018 }, { 2579, 0xa1a1 }, { 2585, 0x9070 }, - { 2590, 0x8a1e }, { 2597, 0xe004 }, { 2601, 0xc3d4 }, { 2609, 0x0451 }, - { 2613, 0x439a }, { 2620, 0x21c2 }, { 2625, 0x4844 }, { 2629, 0x5310 }, - { 2634, 0x0292 }, { 2638, 0x3640 }, { 2643, 0x0241 }, { 2646, 0xf3bd }, - /* 0x6700 */ - { 2658, 0xab09 }, { 2665, 0xe8f0 }, { 2673, 0x7dc0 }, { 2681, 0xa5d2 }, - { 2689, 0xc242 }, { 2694, 0xd24b }, { 2702, 0xa43f }, { 2711, 0xd0af }, - { 2720, 0x1aa0 }, { 2725, 0x34a1 }, { 2731, 0x8247 }, { 2737, 0x03d8 }, - { 2743, 0xc452 }, { 2749, 0x651b }, { 2757, 0xd294 }, { 2764, 0xc83a }, - /* 0x6800 */ - { 2771, 0x001c }, { 2774, 0x40c8 }, { 2778, 0x0e06 }, { 2783, 0x3314 }, - { 2789, 0x614f }, { 2797, 0xb21b }, { 2805, 0x0088 }, { 2807, 0xc0d0 }, - { 2812, 0xa02a }, { 2817, 0xa898 }, { 2823, 0xa1c5 }, { 2830, 0x166b }, - { 2838, 0x2e50 }, { 2844, 0x85b4 }, { 2851, 0xc08b }, { 2857, 0x0604 }, - /* 0x6900 */ - { 2860, 0xf933 }, { 2870, 0x1e04 }, { 2875, 0x056e }, { 2882, 0xa251 }, - { 2888, 0x0400 }, { 2889, 0x7638 }, { 2897, 0xec07 }, { 2905, 0x73b8 }, - { 2914, 0x4406 }, { 2918, 0x1832 }, { 2923, 0x4081 }, { 2926, 0xc816 }, - { 2932, 0x7c8a }, { 2940, 0x6309 }, { 2946, 0x2980 }, { 2950, 0xaa04 }, - /* 0x6a00 */ - { 2955, 0x1c24 }, { 2960, 0xca9c }, { 2968, 0x4e0e }, { 2975, 0x2760 }, - { 2981, 0x0990 }, { 2985, 0x8300 }, { 2988, 0x0046 }, { 2991, 0x8104 }, - { 2994, 0x6011 }, { 2998, 0x1081 }, { 3001, 0x540d }, { 3007, 0x0908 }, - { 3010, 0x000e }, { 3013, 0xcc0a }, { 3019, 0x0500 }, { 3021, 0x0c00 }, - /* 0x6b00 */ - { 3023, 0x0430 }, { 3026, 0xa044 }, { 3030, 0x008b }, { 3034, 0x6784 }, - { 3041, 0x5288 }, { 3046, 0x8a19 }, { 3052, 0x865e }, { 3060, 0x8b18 }, - { 3066, 0x2e59 }, { 3074, 0x4160 }, { 3078, 0x8c10 }, { 3082, 0x9cbe }, - { 3092, 0x6861 }, { 3098, 0x891c }, { 3104, 0x9800 }, { 3107, 0x0008 }, - /* 0x6c00 */ - { 3108, 0x8100 }, { 3110, 0x089a }, { 3115, 0x0018 }, { 3117, 0x4190 }, - { 3121, 0x4007 }, { 3125, 0xe4a1 }, { 3132, 0x0505 }, { 3136, 0x640d }, - { 3142, 0x310e }, { 3148, 0x0e4d }, { 3155, 0x4806 }, { 3159, 0xff0a }, - { 3169, 0x1632 }, { 3175, 0x2aa8 }, { 3181, 0x852e }, { 3188, 0x000b }, - /* 0x6d00 */ - { 3191, 0x1800 }, { 3193, 0xca84 }, { 3199, 0x0e20 }, { 3203, 0x696c }, - { 3211, 0x0032 }, { 3214, 0x1600 }, { 3217, 0x5658 }, { 3224, 0x0390 }, - { 3228, 0x5120 }, { 3232, 0x1a28 }, { 3237, 0x8000 }, { 3238, 0x1124 }, - { 3242, 0x18e1 }, { 3248, 0x4326 }, { 3254, 0x5d52 }, { 3262, 0x0eaa }, - /* 0x6e00 */ - { 3269, 0x0fa0 }, { 3275, 0xae28 }, { 3282, 0xfa7b }, { 3294, 0x4500 }, - { 3297, 0x6408 }, { 3301, 0x8940 }, { 3305, 0xc880 }, { 3309, 0xc044 }, - { 3313, 0x9005 }, { 3317, 0xb141 }, { 3323, 0x8424 }, { 3327, 0x24c4 }, - { 3332, 0x1a34 }, { 3338, 0x603a }, { 3344, 0x9000 }, { 3346, 0xc194 }, - /* 0x6f00 */ - { 3352, 0x8246 }, { 3357, 0x003a }, { 3361, 0x180d }, { 3366, 0xc106 }, - { 3371, 0x0022 }, { 3373, 0x9910 }, { 3378, 0xe050 }, { 3383, 0x1511 }, - { 3388, 0x4057 }, { 3394, 0x0082 }, { 3396, 0x041a }, { 3400, 0x020a }, - { 3403, 0x004f }, { 3408, 0x8930 }, { 3413, 0xd813 }, { 3420, 0x444a }, - /* 0x7000 */ - { 3425, 0x8a02 }, { 3429, 0xed22 }, { 3437, 0x10c0 }, { 3440, 0x4005 }, - { 3443, 0x1000 }, { 3444, 0x0102 }, { 3446, 0x8808 }, { 3449, 0x3101 }, - { 3453, 0x4600 }, { 3456, 0x0204 }, { 3458, 0xf000 }, { 3462, 0x0708 }, - { 3466, 0x8900 }, { 3469, 0xa200 }, { 3472, 0x0000 }, { 3472, 0x2202 }, - /* 0x7100 */ - { 3475, 0x0200 }, { 3476, 0x1610 }, { 3480, 0x0042 }, { 3482, 0x1040 }, - { 3484, 0x5200 }, { 3487, 0x0260 }, { 3490, 0x52f4 }, { 3498, 0x2000 }, - { 3499, 0x8510 }, { 3503, 0x8230 }, { 3507, 0x1100 }, { 3509, 0x4202 }, - { 3512, 0x4308 }, { 3516, 0x80b5 }, { 3522, 0x70e1 }, { 3529, 0x9a20 }, - /* 0x7200 */ - { 3534, 0x2040 }, { 3536, 0x0801 }, { 3538, 0x3500 }, { 3542, 0xfc65 }, - { 3552, 0x19c1 }, { 3558, 0xab04 }, { 3564, 0x0286 }, { 3568, 0x6214 }, - { 3573, 0x0087 }, { 3577, 0x0044 }, { 3579, 0x9085 }, { 3584, 0x0244 }, - { 3587, 0x405c }, { 3592, 0x0a85 }, { 3597, 0x3207 }, { 3603, 0x3380 }, - /* 0x7300 */ - { 3608, 0x0400 }, { 3609, 0xb8c0 }, { 3615, 0xce20 }, { 3621, 0xc0d0 }, - { 3626, 0xc030 }, { 3630, 0x0080 }, { 3631, 0x0508 }, { 3634, 0x0d25 }, - { 3640, 0x0a90 }, { 3644, 0x0040 }, { 3645, 0x0200 }, { 3646, 0x080c }, - { 3649, 0x6505 }, { 3655, 0x4000 }, { 3656, 0x6421 }, { 3661, 0x4102 }, - /* 0x7400 */ - { 3664, 0x0268 }, { 3668, 0x0000 }, { 3668, 0x0024 }, { 3670, 0x847c }, - { 3677, 0x0002 }, { 3678, 0xde20 }, { 3685, 0x8619 }, { 3691, 0x4049 }, - { 3695, 0x0808 }, { 3697, 0x4000 }, { 3698, 0x0084 }, { 3700, 0x2001 }, - { 3702, 0x8400 }, { 3704, 0x1010 }, { 3706, 0x42cd }, { 3713, 0x01c7 }, - /* 0x7500 */ - { 3719, 0x7038 }, { 3725, 0xd52a }, { 3733, 0x1968 }, { 3739, 0x1d8f }, - { 3748, 0xbe50 }, { 3756, 0x3e12 }, { 3763, 0x2ef5 }, { 3773, 0x81d9 }, - { 3780, 0xcec4 }, { 3788, 0x2412 }, { 3792, 0x0828 }, { 3795, 0x732e }, - { 3804, 0x24ac }, { 3810, 0x4b34 }, { 3817, 0x020c }, { 3820, 0xd41d }, - /* 0x7600 */ - { 3828, 0x2a02 }, { 3832, 0x8000 }, { 3833, 0x0097 }, { 3838, 0x0811 }, - { 3841, 0x11c4 }, { 3846, 0x1144 }, { 3850, 0x1786 }, { 3857, 0x7d45 }, - { 3866, 0x49d9 }, { 3874, 0x0649 }, { 3879, 0x4000 }, { 3880, 0x8791 }, - { 3887, 0x254c }, { 3893, 0xd8c4 }, { 3900, 0x44ba }, { 3907, 0x4914 }, - /* 0x7700 */ - { 3912, 0x1b92 }, { 3919, 0xc800 }, { 3922, 0x0271 }, { 3927, 0x1580 }, - { 3931, 0x0081 }, { 3933, 0x0c00 }, { 3935, 0x096a }, { 3941, 0xc200 }, - { 3944, 0x4800 }, { 3946, 0x4002 }, { 3948, 0x3021 }, { 3952, 0xba49 }, - { 3960, 0x2080 }, { 3962, 0x1c80 }, { 3966, 0xe2ac }, { 3974, 0x1008 }, - /* 0x7800 */ - { 3976, 0x1004 }, { 3978, 0x0034 }, { 3981, 0x00e1 }, { 3985, 0x8414 }, - { 3989, 0x0020 }, { 3990, 0x2000 }, { 3991, 0x9800 }, { 3994, 0x1014 }, - { 3997, 0x70c2 }, { 4003, 0x04aa }, { 4008, 0x8688 }, { 4013, 0x5420 }, - { 4017, 0x0c62 }, { 4022, 0x0413 }, { 4026, 0x9180 }, { 4030, 0x2010 }, - /* 0x7900 */ - { 4032, 0x4082 }, { 4035, 0x0206 }, { 4038, 0x1c40 }, { 4042, 0x5400 }, - { 4045, 0x0383 }, { 4050, 0xe4e9 }, { 4059, 0x2125 }, { 4064, 0x8480 }, - { 4067, 0xe433 }, { 4075, 0x2000 }, { 4076, 0x44c0 }, { 4080, 0xe609 }, - { 4087, 0x0a03 }, { 4091, 0x8126 }, { 4096, 0x12da }, { 4103, 0x0801 }, - /* 0x7a00 */ - { 4105, 0x6901 }, { 4110, 0x9790 }, { 4117, 0x4001 }, { 4119, 0xf886 }, - { 4127, 0xe24d }, { 4135, 0x0081 }, { 4137, 0x0a0e }, { 4142, 0xa651 }, - { 4149, 0x011a }, { 4153, 0x81ec }, { 4160, 0xc600 }, { 4164, 0x8441 }, - { 4168, 0xadb8 }, { 4177, 0xb62c }, { 4185, 0xa46f }, { 4194, 0x8741 }, - /* 0x7b00 */ - { 4200, 0x8d54 }, { 4207, 0x4b02 }, { 4212, 0x1161 }, { 4217, 0x0268 }, - { 4221, 0xbb60 }, { 4229, 0x2057 }, { 4235, 0x50a0 }, { 4239, 0x0433 }, - { 4244, 0xa8c0 }, { 4249, 0xb7b4 }, { 4259, 0x2402 }, { 4262, 0x0112 }, - { 4265, 0x9ad3 }, { 4274, 0x2000 }, { 4275, 0x2271 }, { 4281, 0x00c8 }, - /* 0x7c00 */ - { 4284, 0x2081 }, { 4287, 0x809e }, { 4293, 0x0c8a }, { 4298, 0xe180 }, - { 4303, 0xb009 }, { 4308, 0x8151 }, { 4313, 0x1031 }, { 4317, 0x4028 }, - { 4320, 0x2a0e }, { 4326, 0x89a5 }, { 4333, 0x69b6 }, { 4342, 0x620e }, - { 4348, 0x4425 }, { 4353, 0xd144 }, { 4359, 0x8085 }, { 4363, 0x4d54 }, - /* 0x7d00 */ - { 4370, 0x2c75 }, { 4378, 0x1fb1 }, { 4387, 0xd807 }, { 4394, 0x862d }, - { 4401, 0xd87c }, { 4410, 0x4841 }, { 4414, 0x414e }, { 4420, 0x226e }, - { 4427, 0x8200 }, { 4429, 0x9e08 }, { 4435, 0xf80c }, { 4442, 0xed37 }, - { 4453, 0x8c80 }, { 4457, 0x7526 }, { 4465, 0x9313 }, { 4472, 0x0814 }, - /* 0x7e00 */ - { 4475, 0x0e32 }, { 4481, 0xc804 }, { 4485, 0x484e }, { 4491, 0x6ea6 }, - { 4500, 0x2c4a }, { 4506, 0x6670 }, { 4513, 0x26c0 }, { 4518, 0xba01 }, - { 4524, 0xd30c }, { 4531, 0x185d }, { 4538, 0x0000 }, { 4538, 0x0000 }, - { 4538, 0x0000 }, { 4538, 0x0000 }, { 4538, 0x0000 }, { 4538, 0x0000 }, - /* 0x7f00 */ - { 4538, 0x0000 }, { 4538, 0x0000 }, { 4538, 0x0000 }, { 4538, 0x0540 }, - { 4541, 0x7020 }, { 4545, 0x8133 }, { 4551, 0x4f81 }, { 4558, 0x03a5 }, - { 4564, 0x55ec }, { 4573, 0x6410 }, { 4577, 0xc318 }, { 4583, 0x2344 }, - { 4588, 0x1462 }, { 4593, 0x0034 }, { 4596, 0x0a43 }, { 4601, 0x1a09 }, - /* 0x8000 */ - { 4606, 0x187b }, { 4614, 0x13a5 }, { 4621, 0x0102 }, { 4623, 0xa848 }, - { 4628, 0x0440 }, { 4630, 0xc544 }, { 4636, 0x8106 }, { 4640, 0xe2dd }, - { 4650, 0x1af0 }, { 4657, 0x2d48 }, { 4663, 0xb626 }, { 4671, 0x0416 }, - { 4675, 0x5058 }, { 4680, 0x6e40 }, { 4686, 0x8032 }, { 4690, 0x3112 }, - /* 0x8100 */ - { 4695, 0x07e4 }, { 4702, 0x0c00 }, { 4704, 0x8208 }, { 4707, 0x420a }, - { 4711, 0x4840 }, { 4714, 0x803b }, { 4720, 0x4860 }, { 4724, 0x8713 }, - { 4731, 0x850d }, { 4737, 0x3428 }, { 4742, 0x0319 }, { 4747, 0xe529 }, - { 4755, 0x2345 }, { 4761, 0x870a }, { 4767, 0x25a9 }, { 4774, 0x5c18 }, - /* 0x8200 */ - { 4780, 0x77a6 }, { 4790, 0xd9c5 }, { 4799, 0x5e00 }, { 4804, 0x03e8 }, - { 4810, 0x0081 }, { 4812, 0xa700 }, { 4817, 0xcd54 }, { 4825, 0x41c6 }, - { 4831, 0x2800 }, { 4833, 0xa204 }, { 4837, 0xb860 }, { 4843, 0x2b0a }, - { 4849, 0x0020 }, { 4850, 0xda9e }, { 4860, 0x08ea }, { 4866, 0x0e1a }, - /* 0x8300 */ - { 4872, 0x427c }, { 4879, 0x11c0 }, { 4883, 0x8908 }, { 4887, 0x0376 }, - { 4894, 0x8621 }, { 4899, 0x0105 }, { 4902, 0x0000 }, { 4902, 0x18a8 }, - { 4907, 0x46a0 }, { 4912, 0xc448 }, { 4917, 0x0d05 }, { 4922, 0x2022 }, - { 4925, 0x5422 }, { 4930, 0x9148 }, { 4935, 0x8a01 }, { 4939, 0x2897 }, - /* 0x8400 */ - { 4946, 0x7898 }, { 4953, 0x0008 }, { 4954, 0x1605 }, { 4959, 0x3122 }, - { 4964, 0x4240 }, { 4967, 0x0880 }, { 4969, 0xfa4e }, { 4979, 0x06a2 }, - { 4984, 0x0814 }, { 4987, 0x9211 }, { 4992, 0x2002 }, { 4994, 0x9b04 }, - { 5000, 0x2e52 }, { 5007, 0x0643 }, { 5012, 0x5000 }, { 5014, 0x9010 }, - /* 0x8500 */ - { 5017, 0x0041 }, { 5019, 0x85ba }, { 5027, 0x3042 }, { 5031, 0x2020 }, - { 5033, 0x4f0b }, { 5041, 0x05a0 }, { 5045, 0x2708 }, { 5050, 0x4080 }, - { 5052, 0x0591 }, { 5057, 0x1a93 }, { 5064, 0xdf50 }, { 5073, 0x0600 }, - { 5075, 0xa202 }, { 5079, 0x3021 }, { 5083, 0x0630 }, { 5087, 0x4e80 }, - /* 0x8600 */ - { 5092, 0x0cc4 }, { 5097, 0x04c8 }, { 5101, 0xa004 }, { 5104, 0x8001 }, - { 5106, 0x6000 }, { 5108, 0xd431 }, { 5115, 0x0880 }, { 5117, 0x0a02 }, - { 5120, 0x1c00 }, { 5123, 0x0028 }, { 5125, 0x8e18 }, { 5131, 0x0041 }, - { 5133, 0x6ad0 }, { 5140, 0xca10 }, { 5145, 0xf210 }, { 5151, 0x4b00 }, - /* 0x8700 */ - { 5155, 0x274d }, { 5163, 0x1506 }, { 5168, 0x0220 }, { 5170, 0x8890 }, - { 5174, 0x5a00 }, { 5178, 0x82a8 }, { 5183, 0x4549 }, { 5189, 0x8150 }, - { 5193, 0x2004 }, { 5195, 0x8000 }, { 5196, 0x8804 }, { 5199, 0x2c08 }, - { 5203, 0x08d1 }, { 5208, 0x0005 }, { 5210, 0x8001 }, { 5212, 0x4ac4 }, - /* 0x8800 */ - { 5218, 0xe020 }, { 5222, 0x0062 }, { 5225, 0x008e }, { 5229, 0x0a42 }, - { 5233, 0x3055 }, { 5239, 0x6a8c }, { 5246, 0x090e }, { 5251, 0xe0a5 }, - { 5258, 0x2906 }, { 5263, 0x42c4 }, { 5268, 0x4814 }, { 5272, 0x80b3 }, - { 5278, 0x803e }, { 5284, 0xb330 }, { 5291, 0x0102 }, { 5293, 0x731c }, - /* 0x8900 */ - { 5301, 0x1494 }, { 5306, 0x600d }, { 5311, 0x0c20 }, { 5314, 0x0940 }, - { 5317, 0x301a }, { 5322, 0xc040 }, { 5325, 0xa451 }, { 5331, 0xc094 }, - { 5336, 0x8dca }, { 5344, 0x05c8 }, { 5349, 0x96c2 }, { 5356, 0xa40c }, - { 5361, 0x0001 }, { 5362, 0x3404 }, { 5366, 0x00c8 }, { 5369, 0x0110 }, - /* 0x8a00 */ - { 5371, 0x550d }, { 5378, 0xa9c9 }, { 5386, 0x2428 }, { 5390, 0x1c5a }, - { 5397, 0x0142 }, { 5400, 0x4837 }, { 5407, 0x7a4d }, { 5416, 0x100f }, - { 5421, 0x32b4 }, { 5428, 0x452a }, { 5434, 0x317b }, { 5443, 0x9205 }, - { 5448, 0xb894 }, { 5455, 0x5c44 }, { 5461, 0x68d7 }, { 5470, 0x458a }, - /* 0x8b00 */ - { 5476, 0x5097 }, { 5483, 0x2ed1 }, { 5491, 0x1943 }, { 5497, 0x4208 }, - { 5500, 0xd202 }, { 5505, 0x9d40 }, { 5511, 0x9840 }, { 5515, 0x2097 }, - { 5521, 0x5409 }, { 5526, 0x064d }, { 5532, 0x0000 }, { 5532, 0x0000 }, - { 5532, 0x0000 }, { 5532, 0x0000 }, { 5532, 0x0000 }, { 5532, 0x0000 }, - /* 0x8c00 */ - { 5532, 0x0000 }, { 5532, 0x0000 }, { 5532, 0x0000 }, { 5532, 0x8480 }, - { 5535, 0x5542 }, { 5541, 0x0421 }, { 5544, 0x1c06 }, { 5549, 0x1700 }, - { 5553, 0x7624 }, { 5560, 0x6110 }, { 5564, 0xff87 }, { 5576, 0xb9dd }, - { 5587, 0x659f }, { 5597, 0x5c0a }, { 5603, 0x245d }, { 5610, 0x3c00 }, - /* 0x8d00 */ - { 5614, 0xadb0 }, { 5622, 0x0059 }, { 5626, 0x0000 }, { 5626, 0x0000 }, - { 5626, 0x0000 }, { 5626, 0x0000 }, { 5626, 0x28d0 }, { 5631, 0x009b }, - { 5636, 0x0422 }, { 5639, 0x0200 }, { 5640, 0x0108 }, { 5642, 0x4408 }, - { 5645, 0x9804 }, { 5649, 0xac40 }, { 5654, 0x8d0a }, { 5660, 0x9028 }, - /* 0x8e00 */ - { 5664, 0x8700 }, { 5668, 0xe001 }, { 5672, 0x0400 }, { 5673, 0x0031 }, - { 5676, 0x1794 }, { 5683, 0x8221 }, { 5687, 0x0019 }, { 5690, 0x1054 }, - { 5694, 0x2cb2 }, { 5701, 0x021a }, { 5705, 0x9c02 }, { 5710, 0x4003 }, - { 5713, 0x3d60 }, { 5720, 0x8804 }, { 5723, 0x080c }, { 5726, 0x7900 }, - /* 0x8f00 */ - { 5731, 0x1628 }, { 5736, 0xba3c }, { 5745, 0x8640 }, { 5749, 0xcb08 }, - { 5755, 0x7274 }, { 5763, 0x9080 }, { 5766, 0x001e }, { 5770, 0x0000 }, - { 5770, 0x0000 }, { 5770, 0xd800 }, { 5774, 0xe188 }, { 5780, 0x9c87 }, - { 5788, 0x4034 }, { 5792, 0x0412 }, { 5795, 0xae64 }, { 5803, 0x2791 }, - /* 0x9000 */ - { 5810, 0xe86b }, { 5819, 0xe6fb }, { 5831, 0x408f }, { 5837, 0x5366 }, - { 5845, 0xeea6 }, { 5855, 0x537f }, { 5866, 0xe32b }, { 5875, 0xb5e4 }, - { 5884, 0x869f }, { 5893, 0x0002 }, { 5894, 0x8548 }, { 5899, 0x0122 }, - { 5902, 0x4402 }, { 5905, 0x0800 }, { 5906, 0x2116 }, { 5911, 0x20a0 }, - /* 0x9100 */ - { 5914, 0x0004 }, { 5915, 0x0204 }, { 5917, 0x2000 }, { 5918, 0x0005 }, - { 5920, 0x7e00 }, { 5926, 0x0154 }, { 5930, 0x162c }, { 5936, 0x01ac }, - { 5941, 0x2a84 }, { 5946, 0x1085 }, { 5950, 0x8c14 }, { 5955, 0x0530 }, - { 5959, 0xfbc3 }, { 5970, 0xb943 }, { 5978, 0x00ca }, { 5982, 0x9060 }, - /* 0x9200 */ - { 5986, 0x6000 }, { 5988, 0x4032 }, { 5992, 0x1200 }, { 5994, 0x8090 }, - { 5997, 0x0b30 }, { 6002, 0x4c81 }, { 6007, 0x0054 }, { 6010, 0x4002 }, - { 6012, 0x0029 }, { 6015, 0x1d6a }, { 6023, 0x2000 }, { 6024, 0x0280 }, - { 6026, 0x8000 }, { 6027, 0x0004 }, { 6028, 0x2610 }, { 6032, 0x150c }, - /* 0x9300 */ - { 6037, 0x8040 }, { 6039, 0x0701 }, { 6043, 0xd94d }, { 6052, 0x0c24 }, - { 6056, 0x2810 }, { 6059, 0x1850 }, { 6063, 0x5001 }, { 6066, 0x5020 }, - { 6069, 0x1000 }, { 6070, 0x04d0 }, { 6074, 0x7080 }, { 6078, 0x0201 }, - { 6080, 0x0108 }, { 6082, 0x21c3 }, { 6088, 0x0132 }, { 6092, 0x0000 }, - /* 0x9400 */ - { 6092, 0x0088 }, { 6094, 0x0719 }, { 6100, 0x0802 }, { 6102, 0x0560 }, - { 6106, 0x0012 }, { 6108, 0x4c0e }, { 6114, 0x0405 }, { 6117, 0xf0a1 }, - { 6124, 0x0002 }, { 6125, 0x0000 }, { 6125, 0x0000 }, { 6125, 0x0000 }, - { 6125, 0x0000 }, { 6125, 0x0000 }, { 6125, 0x0000 }, { 6125, 0x0000 }, - /* 0x9500 */ - { 6125, 0x0000 }, { 6125, 0x0000 }, { 6125, 0x0000 }, { 6125, 0x0000 }, - { 6125, 0x0000 }, { 6125, 0x0000 }, { 6125, 0x0000 }, { 6125, 0x0080 }, - { 6126, 0x8e8d }, { 6134, 0x035a }, { 6140, 0x21bd }, { 6148, 0x5a04 }, - { 6153, 0x3488 }, { 6158, 0x1170 }, { 6163, 0x0026 }, { 6166, 0x0000 }, - /* 0x9600 */ - { 6166, 0x0000 }, { 6166, 0x1000 }, { 6167, 0xc502 }, { 6172, 0x8804 }, - { 6175, 0xb815 }, { 6182, 0xf801 }, { 6188, 0x147c }, { 6195, 0x25ed }, - { 6204, 0xed60 }, { 6212, 0x1bb0 }, { 6219, 0x0589 }, { 6224, 0x1bd7 }, - { 6234, 0x7af3 }, { 6245, 0x1a62 }, { 6251, 0x0d0c }, { 6256, 0x0ac5 }, - /* 0x9700 */ - { 6262, 0xe5d1 }, { 6271, 0x524a }, { 6277, 0x0490 }, { 6280, 0x6305 }, - { 6286, 0x0354 }, { 6291, 0x5244 }, { 6296, 0x2b57 }, { 6305, 0x1612 }, - { 6310, 0xa872 }, { 6317, 0x1101 }, { 6320, 0x2949 }, { 6326, 0x0018 }, - { 6328, 0x0948 }, { 6332, 0x1008 }, { 6334, 0x6000 }, { 6336, 0x886c }, - /* 0x9800 */ - { 6342, 0x916e }, { 6350, 0x058f }, { 6357, 0x3012 }, { 6361, 0x3990 }, - { 6367, 0xf840 }, { 6373, 0x4930 }, { 6378, 0x8880 }, { 6381, 0x001b }, - { 6385, 0x0000 }, { 6385, 0x0000 }, { 6385, 0x8500 }, { 6388, 0x0042 }, - { 6390, 0x0058 }, { 6393, 0x9800 }, { 6396, 0xea04 }, { 6402, 0x7014 }, - /* 0x9900 */ - { 6407, 0x1628 }, { 6412, 0x611d }, { 6419, 0x5113 }, { 6425, 0x6000 }, - { 6427, 0x1a24 }, { 6432, 0x00a7 }, { 6437, 0x0000 }, { 6437, 0x0000 }, - { 6437, 0x0000 }, { 6437, 0x03c0 }, { 6441, 0x7120 }, { 6446, 0x1018 }, - { 6449, 0x0172 }, { 6454, 0xa927 }, { 6462, 0x6004 }, { 6465, 0x8906 }, - /* 0x9a00 */ - { 6470, 0xc022 }, { 6474, 0x020c }, { 6477, 0x0900 }, { 6479, 0x4081 }, - { 6482, 0x202d }, { 6487, 0x8ca0 }, { 6492, 0x0e34 }, { 6498, 0x0000 }, - { 6498, 0x0000 }, { 6498, 0x0000 }, { 6498, 0x2100 }, { 6500, 0x1101 }, - { 6503, 0x8011 }, { 6506, 0xc11a }, { 6512, 0xec4c }, { 6520, 0x0892 }, - /* 0x9b00 */ - { 6524, 0x0040 }, { 6525, 0x8500 }, { 6528, 0xc7ac }, { 6537, 0x1806 }, - { 6541, 0xe03e }, { 6549, 0x0512 }, { 6553, 0x8000 }, { 6554, 0x0010 }, - { 6555, 0x4008 }, { 6557, 0x80ce }, { 6563, 0x6d01 }, { 6569, 0x0210 }, - { 6571, 0x8641 }, { 6576, 0x0856 }, { 6581, 0x011e }, { 6586, 0x0027 }, - /* 0x9c00 */ - { 6590, 0x3750 }, { 6597, 0x083d }, { 6603, 0xe032 }, { 6609, 0x4e05 }, - { 6615, 0x01c0 }, { 6618, 0x0484 }, { 6621, 0x0081 }, { 6623, 0x0140 }, - { 6625, 0x0000 }, { 6625, 0x0000 }, { 6625, 0x0000 }, { 6625, 0x0000 }, - { 6625, 0x0000 }, { 6625, 0x0000 }, { 6625, 0x1aa0 }, { 6630, 0x0059 }, - /* 0x9d00 */ - { 6634, 0x43c8 }, { 6640, 0x8824 }, { 6644, 0x1d48 }, { 6650, 0xc800 }, - { 6653, 0x0152 }, { 6657, 0x7203 }, { 6663, 0x9013 }, { 6668, 0x0404 }, - { 6670, 0x8280 }, { 6673, 0x0400 }, { 6674, 0x8a10 }, { 6678, 0x0d14 }, - { 6683, 0x8056 }, { 6688, 0x0208 }, { 6690, 0xa040 }, { 6693, 0x2704 }, - /* 0x9e00 */ - { 6698, 0x0000 }, { 6698, 0x4c00 }, { 6701, 0x0000 }, { 6701, 0x0000 }, - { 6701, 0x0000 }, { 6701, 0x0000 }, { 6701, 0x0000 }, { 6701, 0xa320 }, - { 6706, 0x1902 }, { 6710, 0xa0ae }, { 6717, 0x2660 }, { 6722, 0xdf00 }, - { 6729, 0xf010 }, { 6734, 0x7b15 }, { 6743, 0x8121 }, { 6747, 0x3ad0 }, - /* 0x9f00 */ - { 6754, 0x4180 }, { 6757, 0x0028 }, { 6759, 0x1003 }, { 6762, 0x4800 }, - { 6764, 0xcc00 }, { 6768, 0x8014 }, { 6771, 0x14cf }, { 6779, 0x00c4 }, - { 6782, 0x2000 }, { 6783, 0x3020 }, { 6786, 0x0001 }, -}; - -static const Summary16 jisx0208_uni2indx_pageff[15] = { - /* 0xff00 */ - { 6787, 0xdf7a }, { 6799, 0xffff }, { 6815, 0xffff }, { 6831, 0xffff }, - { 6847, 0xffff }, { 6863, 0x3fff }, { 6877, 0x0000 }, { 6877, 0x0000 }, - { 6877, 0x0000 }, { 6877, 0x0000 }, { 6877, 0x0000 }, { 6877, 0x0000 }, - { 6877, 0x0000 }, { 6877, 0x0000 }, { 6877, 0x0028 }, -}; - -static int jisx0208_wctomb(unsigned int* r, unsigned int wc) { - const Summary16 *summary = NULL; - if (wc < 0x0100) { - summary = &jisx0208_uni2indx_page00[(wc>>4)]; - } else if (wc >= 0x0300 && wc < 0x0460) { - summary = &jisx0208_uni2indx_page03[(wc>>4)-0x030]; - } else if (wc >= 0x2000 && wc < 0x2320) { - summary = &jisx0208_uni2indx_page20[(wc>>4)-0x200]; - } else if (wc >= 0x2500 && wc < 0x2670) { - summary = &jisx0208_uni2indx_page25[(wc>>4)-0x250]; - } else if (wc >= 0x3000 && wc < 0x3100) { - summary = &jisx0208_uni2indx_page30[(wc>>4)-0x300]; - } else if (wc >= 0x4e00 && wc < 0x9fb0) { - summary = &jisx0208_uni2indx_page4e[(wc>>4)-0x4e0]; - } else if (wc >= 0xff00 && wc < 0xfff0) { - summary = &jisx0208_uni2indx_pageff[(wc>>4)-0xff0]; - } - if (summary) { - unsigned short used = summary->used; - unsigned int i = wc & 0x0f; - if (used & ((unsigned short) 1 << i)) { - /* Keep in 'used' only the bits 0..i-1. */ - used &= ((unsigned short) 1 << i) - 1; - /* Add 'summary->indx' and the number of bits set in 'used'. */ - used = (used & 0x5555) + ((used & 0xaaaa) >> 1); - used = (used & 0x3333) + ((used & 0xcccc) >> 2); - used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4); - used = (used & 0x00ff) + (used >> 8); - *r = jisx0208_2charset[summary->indx + used]; - return 2; - } - } - return 0; -} - -/* - * SHIFT_JIS (libiconv-1.16/lib/sjis.h) - */ - -/* Returns 1 or 2 on success, 0 if no mapping */ -INTERNAL int sjis_wctomb_zint(unsigned int* r, unsigned int wc) { - int ret; - - /* Try JIS X 0201-1976. */ - ret = jisx0201_wctomb(r, wc); - if (ret) { - return ret; - } - - /* Try JIS X 0208-1990. */ - /* ZINT: Note leaving mapping of full-width reverse solidus U+FF3C to 0x815F (duplicate of patched U+005C) to avoid having to regen tables */ - ret = jisx0208_wctomb(r, wc); - if (ret) { - return ret; - } - - /* User-defined range. See - * Ken Lunde's "CJKV Information Processing", table 4-66, p. 206. */ - /* ZINT: https://file.allitebooks.com/20160708/CJKV%20Information%20Processing.pdf (table 4-86, p. 286, 2nd ed.) */ - if (wc >= 0xe000 && wc < 0xe758) { - unsigned char c1, c2; - c1 = (unsigned int) (wc - 0xe000) / 188; - c2 = (unsigned int) (wc - 0xe000) % 188; - *r = ((c1 + 0xf0) << 8) | (c2 < 0x3f ? c2 + 0x40 : c2 + 0x41); - return 2; - } - - return 0; -} - -/* Convert UTF-8 string to Shift JIS and place in array of ints */ -INTERNAL int sjis_utf8tomb(struct zint_symbol *symbol, const unsigned char source[], size_t* p_length, unsigned int* jisdata) { - int error_number; - unsigned int i, length; -#ifndef _MSC_VER - unsigned int utfdata[*p_length + 1]; -#else - unsigned int* utfdata = (unsigned int*) _alloca((*p_length + 1) * sizeof(unsigned int)); -#endif - - error_number = utf8_to_unicode(symbol, source, utfdata, p_length, 1 /*disallow_4byte*/); - if (error_number != 0) { - return error_number; - } - - for (i = 0, length = *p_length; i < length; i++) { - if (!sjis_wctomb_zint(jisdata + i, utfdata[i])) { - strcpy(symbol->errtxt, "800: Invalid character in input data"); - return ZINT_ERROR_INVALID_DATA; - } - } - - return 0; -} - -/* Convert UTF-8 string to single byte ECI and place in array of ints */ -INTERNAL int sjis_utf8tosb(int eci, const unsigned char source[], size_t* p_length, unsigned int* jisdata, int full_multibyte) { - int error_number; -#ifndef _MSC_VER - unsigned char single_byte[*p_length + 1]; -#else - unsigned char* single_byte = (unsigned char*) _alloca(*p_length + 1); -#endif - - error_number = utf_to_eci(eci, source, single_byte, p_length); - if (error_number != 0) { - // Note not setting `symbol->errtxt`, up to caller - return error_number; - } - - sjis_cpy(single_byte, p_length, jisdata, full_multibyte); - - return 0; -} - -/* If `full_multibyte` set, copy byte input stream to array of ints, putting double-bytes that match QR Kanji mode in a single entry. - * If `full_multibyte` not set, do a straight copy */ -INTERNAL void sjis_cpy(const unsigned char source[], size_t* p_length, unsigned int* jisdata, int full_multibyte) { - unsigned int i, j, jis, length; - unsigned char c; - - if (full_multibyte) { - for (i = 0, j = 0, length = *p_length; i < length; i++, j++) { - c = source[i]; - if (((c >= 0x81 && c <= 0x9F) || (c >= 0xE0 && c <= 0xEB)) && length - i >= 2) { - jis = (c << 8) | source[i + 1]; - if ((jis >= 0x8140 && jis <= 0x9FFC) || (jis >= 0xE040 && jis <= 0xEBBF)) { - /* This may or may not be valid Shift JIS, but don't care as long as it can be encoded in QR Kanji mode */ - jisdata[j] = jis; - i++; - } else { - jisdata[j] = c; - } - } else { - jisdata[j] = c; - } - } - *p_length = j; - } else { - /* Straight copy */ - for (i = 0, length = *p_length; i < length; i++) { - jisdata[i] = source[i]; - } - } -} diff --git a/backend/sjis.h b/backend/sjis.h index b019a1b..749e036 100644 --- a/backend/sjis.h +++ b/backend/sjis.h @@ -1,7 +1,7 @@ -/* sjis.h - Unicode to Shift JIS +/* sjis.h - Unicode to Shift JIS lookup table libzint - the open source barcode library - Copyright (C) 2009-2020 Robin Stuart + Copyright (C) 2009-2017 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -28,22 +28,6859 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ -#ifndef SJIS_H -#define SJIS_H - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -INTERNAL int sjis_wctomb_zint(unsigned int* r, unsigned int wc); -INTERNAL int sjis_utf8tomb(struct zint_symbol *symbol, const unsigned char source[], size_t* p_length, unsigned int* jisdata); -INTERNAL int sjis_utf8tosb(int eci, const unsigned char source[], size_t* p_length, unsigned int* jisdata, int full_multibyte); -INTERNAL void sjis_cpy(const unsigned char source[], size_t* p_length, unsigned int* jisdata, int full_multibyte); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ +/* Derived from : +## Shift_JIS (JIS X 0208:1997 Appendix 1) vs Unicode mapping table +## +## Date: 06 Mar 2002 06:01:22 GMT +## License: +## Copyright (C) 2001 earthian@tama.or.jp, All Rights Reserved. +## Copyright (C) 2001 I'O, All Rights Reserved. +## You can use, modify, distribute this table freely. + */ -#endif /* SJIS_H */ +static const unsigned short int sjis_lookup[] = { + 0x005C, 0x815F, // REVERSE SOLIDUS + 0x00A2, 0x8191, // CENT SIGN + 0x00A3, 0x8192, // POUND SIGN + 0x00A7, 0x8198, // SECTION SIGN + 0x00A8, 0x814E, // DIAERESIS + 0x00AC, 0x81CA, // NOT SIGN + 0x00B0, 0x818B, // DEGREE SIGN + 0x00B1, 0x817D, // PLUS-MINUS SIGN + 0x00B4, 0x814C, // ACUTE ACCENT + 0x00B6, 0x81F7, // PILCROW SIGN + 0x00D7, 0x817E, // MULTIPLICATION SIGN + 0x00F7, 0x8180, // DIVISION SIGN + 0x0391, 0x839F, // GREEK CAPITAL LETTER ALPHA + 0x0392, 0x83A0, // GREEK CAPITAL LETTER BETA + 0x0393, 0x83A1, // GREEK CAPITAL LETTER GAMMA + 0x0394, 0x83A2, // GREEK CAPITAL LETTER DELTA + 0x0395, 0x83A3, // GREEK CAPITAL LETTER EPSILON + 0x0396, 0x83A4, // GREEK CAPITAL LETTER ZETA + 0x0397, 0x83A5, // GREEK CAPITAL LETTER ETA + 0x0398, 0x83A6, // GREEK CAPITAL LETTER THETA + 0x0399, 0x83A7, // GREEK CAPITAL LETTER IOTA + 0x039A, 0x83A8, // GREEK CAPITAL LETTER KAPPA + 0x039B, 0x83A9, // GREEK CAPITAL LETTER LAMDA + 0x039C, 0x83AA, // GREEK CAPITAL LETTER MU + 0x039D, 0x83AB, // GREEK CAPITAL LETTER NU + 0x039E, 0x83AC, // GREEK CAPITAL LETTER XI + 0x039F, 0x83AD, // GREEK CAPITAL LETTER OMICRON + 0x03A0, 0x83AE, // GREEK CAPITAL LETTER PI + 0x03A1, 0x83AF, // GREEK CAPITAL LETTER RHO + 0x03A3, 0x83B0, // GREEK CAPITAL LETTER SIGMA + 0x03A4, 0x83B1, // GREEK CAPITAL LETTER TAU + 0x03A5, 0x83B2, // GREEK CAPITAL LETTER UPSILON + 0x03A6, 0x83B3, // GREEK CAPITAL LETTER PHI + 0x03A7, 0x83B4, // GREEK CAPITAL LETTER CHI + 0x03A8, 0x83B5, // GREEK CAPITAL LETTER PSI + 0x03A9, 0x83B6, // GREEK CAPITAL LETTER OMEGA + 0x03B1, 0x83BF, // GREEK SMALL LETTER ALPHA + 0x03B2, 0x83C0, // GREEK SMALL LETTER BETA + 0x03B3, 0x83C1, // GREEK SMALL LETTER GAMMA + 0x03B4, 0x83C2, // GREEK SMALL LETTER DELTA + 0x03B5, 0x83C3, // GREEK SMALL LETTER EPSILON + 0x03B6, 0x83C4, // GREEK SMALL LETTER ZETA + 0x03B7, 0x83C5, // GREEK SMALL LETTER ETA + 0x03B8, 0x83C6, // GREEK SMALL LETTER THETA + 0x03B9, 0x83C7, // GREEK SMALL LETTER IOTA + 0x03BA, 0x83C8, // GREEK SMALL LETTER KAPPA + 0x03BB, 0x83C9, // GREEK SMALL LETTER LAMDA + 0x03BC, 0x83CA, // GREEK SMALL LETTER MU + 0x03BD, 0x83CB, // GREEK SMALL LETTER NU + 0x03BE, 0x83CC, // GREEK SMALL LETTER XI + 0x03BF, 0x83CD, // GREEK SMALL LETTER OMICRON + 0x03C0, 0x83CE, // GREEK SMALL LETTER PI + 0x03C1, 0x83CF, // GREEK SMALL LETTER RHO + 0x03C3, 0x83D0, // GREEK SMALL LETTER SIGMA + 0x03C4, 0x83D1, // GREEK SMALL LETTER TAU + 0x03C5, 0x83D2, // GREEK SMALL LETTER UPSILON + 0x03C6, 0x83D3, // GREEK SMALL LETTER PHI + 0x03C7, 0x83D4, // GREEK SMALL LETTER CHI + 0x03C8, 0x83D5, // GREEK SMALL LETTER PSI + 0x03C9, 0x83D6, // GREEK SMALL LETTER OMEGA + 0x0401, 0x8446, // CYRILLIC CAPITAL LETTER IO + 0x0410, 0x8440, // CYRILLIC CAPITAL LETTER A + 0x0411, 0x8441, // CYRILLIC CAPITAL LETTER BE + 0x0412, 0x8442, // CYRILLIC CAPITAL LETTER VE + 0x0413, 0x8443, // CYRILLIC CAPITAL LETTER GHE + 0x0414, 0x8444, // CYRILLIC CAPITAL LETTER DE + 0x0415, 0x8445, // CYRILLIC CAPITAL LETTER IE + 0x0416, 0x8447, // CYRILLIC CAPITAL LETTER ZHE + 0x0417, 0x8448, // CYRILLIC CAPITAL LETTER ZE + 0x0418, 0x8449, // CYRILLIC CAPITAL LETTER I + 0x0419, 0x844A, // CYRILLIC CAPITAL LETTER SHORT I + 0x041A, 0x844B, // CYRILLIC CAPITAL LETTER KA + 0x041B, 0x844C, // CYRILLIC CAPITAL LETTER EL + 0x041C, 0x844D, // CYRILLIC CAPITAL LETTER EM + 0x041D, 0x844E, // CYRILLIC CAPITAL LETTER EN + 0x041E, 0x844F, // CYRILLIC CAPITAL LETTER O + 0x041F, 0x8450, // CYRILLIC CAPITAL LETTER PE + 0x0420, 0x8451, // CYRILLIC CAPITAL LETTER ER + 0x0421, 0x8452, // CYRILLIC CAPITAL LETTER ES + 0x0422, 0x8453, // CYRILLIC CAPITAL LETTER TE + 0x0423, 0x8454, // CYRILLIC CAPITAL LETTER U + 0x0424, 0x8455, // CYRILLIC CAPITAL LETTER EF + 0x0425, 0x8456, // CYRILLIC CAPITAL LETTER HA + 0x0426, 0x8457, // CYRILLIC CAPITAL LETTER TSE + 0x0427, 0x8458, // CYRILLIC CAPITAL LETTER CHE + 0x0428, 0x8459, // CYRILLIC CAPITAL LETTER SHA + 0x0429, 0x845A, // CYRILLIC CAPITAL LETTER SHCHA + 0x042B, 0x845C, // CYRILLIC CAPITAL LETTER YERU + 0x042C, 0x845D, // CYRILLIC CAPITAL LETTER SOFT SIGN + 0x042D, 0x845E, // CYRILLIC CAPITAL LETTER E + 0x042E, 0x845F, // CYRILLIC CAPITAL LETTER YU + 0x042F, 0x8460, // CYRILLIC CAPITAL LETTER YA + 0x0430, 0x8470, // CYRILLIC SMALL LETTER A + 0x0431, 0x8471, // CYRILLIC SMALL LETTER BE + 0x0432, 0x8472, // CYRILLIC SMALL LETTER VE + 0x0433, 0x8473, // CYRILLIC SMALL LETTER GHE + 0x0434, 0x8474, // CYRILLIC SMALL LETTER DE + 0x0435, 0x8475, // CYRILLIC SMALL LETTER IE + 0x0436, 0x8477, // CYRILLIC SMALL LETTER ZHE + 0x0437, 0x8478, // CYRILLIC SMALL LETTER ZE + 0x0438, 0x8479, // CYRILLIC SMALL LETTER I + 0x0439, 0x847A, // CYRILLIC SMALL LETTER SHORT I + 0x043A, 0x847B, // CYRILLIC SMALL LETTER KA + 0x043B, 0x847C, // CYRILLIC SMALL LETTER EL + 0x043C, 0x847D, // CYRILLIC SMALL LETTER EM + 0x043D, 0x847E, // CYRILLIC SMALL LETTER EN + 0x043E, 0x8480, // CYRILLIC SMALL LETTER O + 0x043F, 0x8481, // CYRILLIC SMALL LETTER PE + 0x0440, 0x8482, // CYRILLIC SMALL LETTER ER + 0x0441, 0x8483, // CYRILLIC SMALL LETTER ES + 0x0442, 0x8484, // CYRILLIC SMALL LETTER TE + 0x0443, 0x8485, // CYRILLIC SMALL LETTER U + 0x0444, 0x8486, // CYRILLIC SMALL LETTER EF + 0x0445, 0x8487, // CYRILLIC SMALL LETTER HA + 0x0446, 0x8488, // CYRILLIC SMALL LETTER TSE + 0x0447, 0x8489, // CYRILLIC SMALL LETTER CHE + 0x0448, 0x848A, // CYRILLIC SMALL LETTER SHA + 0x0449, 0x848B, // CYRILLIC SMALL LETTER SHCHA + 0x044A, 0x848C, // CYRILLIC SMALL LETTER HARD SIGN + 0x044B, 0x848D, // CYRILLIC SMALL LETTER YERU + 0x044C, 0x848E, // CYRILLIC SMALL LETTER SOFT SIGN + 0x044D, 0x848F, // CYRILLIC SMALL LETTER E + 0x044E, 0x8490, // CYRILLIC SMALL LETTER YU + 0x044F, 0x8491, // CYRILLIC SMALL LETTER YA + 0x0451, 0x8476, // CYRILLIC SMALL LETTER IO + 0x2010, 0x815D, // HYPHEN + 0x2014, 0x815C, // EM DASH + 0x2016, 0x8161, // DOUBLE VERTICAL LINE + 0x2018, 0x8165, // LEFT SINGLE QUOTATION MARK + 0x2019, 0x8166, // RIGHT SINGLE QUOTATION MARK + 0x201C, 0x8167, // LEFT DOUBLE QUOTATION MARK + 0x201D, 0x8168, // RIGHT DOUBLE QUOTATION MARK + 0x2020, 0x81F5, // DAGGER + 0x2021, 0x81F6, // DOUBLE DAGGER + 0x2025, 0x8164, // TWO DOT LEADER + 0x2026, 0x8163, // HORIZONTAL ELLIPSIS + 0x2030, 0x81F1, // PER MILLE SIGN + 0x2032, 0x818C, // PRIME + 0x2033, 0x818D, // DOUBLE PRIME + 0x203B, 0x81A6, // REFERENCE MARK + 0x2103, 0x818E, // DEGREE CELSIUS + 0x212B, 0x81F0, // ANGSTROM SIGN + 0x2190, 0x81A9, // LEFTWARDS ARROW + 0x2191, 0x81AA, // UPWARDS ARROW + 0x2192, 0x81A8, // RIGHTWARDS ARROW + 0x2193, 0x81AB, // DOWNWARDS ARROW + 0x21D2, 0x81CB, // RIGHTWARDS DOUBLE ARROW + 0x21D4, 0x81CC, // LEFT RIGHT DOUBLE ARROW + 0x2200, 0x81CD, // FOR ALL + 0x2202, 0x81DD, // PARTIAL DIFFERENTIAL + 0x2203, 0x81CE, // THERE EXISTS + 0x2207, 0x81DE, // NABLA + 0x2208, 0x81B8, // ELEMENT OF + 0x220B, 0x81B9, // CONTAINS AS MEMBER + 0x2212, 0x817C, // MINUS SIGN + 0x221A, 0x81E3, // SQUARE ROOT + 0x221D, 0x81E5, // PROPORTIONAL TO + 0x221E, 0x8187, // INFINITY + 0x2220, 0x81DA, // ANGLE + 0x2227, 0x81C8, // LOGICAL AND + 0x2228, 0x81C9, // LOGICAL OR + 0x2229, 0x81BF, // INTERSECTION + 0x222A, 0x81BE, // UNION + 0x222B, 0x81E7, // INTEGRAL + 0x222C, 0x81E8, // DOUBLE INTEGRAL + 0x2234, 0x8188, // THEREFORE + 0x2235, 0x81E6, // BECAUSE + 0x223D, 0x81E4, // REVERSED TILDE + 0x2252, 0x81E0, // APPROXIMATELY EQUAL TO OR THE IMAGE OF + 0x2260, 0x8182, // NOT EQUAL TO + 0x2261, 0x81DF, // IDENTICAL TO + 0x2266, 0x8185, // LESS-THAN OVER EQUAL TO + 0x2267, 0x8186, // GREATER-THAN OVER EQUAL TO + 0x226A, 0x81E1, // MUCH LESS-THAN + 0x226B, 0x81E2, // MUCH GREATER-THAN + 0x2282, 0x81BC, // SUBSET OF + 0x2283, 0x81BD, // SUPERSET OF + 0x2286, 0x81BA, // SUBSET OF OR EQUAL TO + 0x2287, 0x81BB, // SUPERSET OF OR EQUAL TO + 0x22A5, 0x81DB, // UP TACK + 0x2312, 0x81DC, // ARC + 0x2500, 0x849F, // BOX DRAWINGS LIGHT HORIZONTAL + 0x2501, 0x84AA, // BOX DRAWINGS HEAVY HORIZONTAL + 0x2502, 0x84A0, // BOX DRAWINGS LIGHT VERTICAL + 0x2503, 0x84AB, // BOX DRAWINGS HEAVY VERTICAL + 0x250C, 0x84A1, // BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x250F, 0x84AC, // BOX DRAWINGS HEAVY DOWN AND RIGHT + 0x2510, 0x84A2, // BOX DRAWINGS LIGHT DOWN AND LEFT + 0x2513, 0x84AD, // BOX DRAWINGS HEAVY DOWN AND LEFT + 0x2514, 0x84A4, // BOX DRAWINGS LIGHT UP AND RIGHT + 0x2517, 0x84AF, // BOX DRAWINGS HEAVY UP AND RIGHT + 0x2518, 0x84A3, // BOX DRAWINGS LIGHT UP AND LEFT + 0x251B, 0x84AE, // BOX DRAWINGS HEAVY UP AND LEFT + 0x251C, 0x84A5, // BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x251D, 0x84BA, // BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY + 0x2520, 0x84B5, // BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT + 0x2523, 0x84B0, // BOX DRAWINGS HEAVY VERTICAL AND RIGHT + 0x2524, 0x84A7, // BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x2525, 0x84BC, // BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY + 0x2528, 0x84B7, // BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT + 0x252B, 0x84B2, // BOX DRAWINGS HEAVY VERTICAL AND LEFT + 0x252C, 0x84A6, // BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x252F, 0x84B6, // BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY + 0x2530, 0x84BB, // BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT + 0x2533, 0x84B1, // BOX DRAWINGS HEAVY DOWN AND HORIZONTAL + 0x2534, 0x84A8, // BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x2537, 0x84B8, // BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY + 0x2538, 0x84BD, // BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT + 0x253B, 0x84B3, // BOX DRAWINGS HEAVY UP AND HORIZONTAL + 0x253C, 0x84A9, // BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x253F, 0x84B9, // BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY + 0x2542, 0x84BE, // BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT + 0x254B, 0x84B4, // BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL + 0x25A0, 0x81A1, // BLACK SQUARE + 0x25A1, 0x81A0, // WHITE SQUARE + 0x25B2, 0x81A3, // BLACK UP-POINTING TRIANGLE + 0x25B3, 0x81A2, // WHITE UP-POINTING TRIANGLE + 0x25BC, 0x81A5, // BLACK DOWN-POINTING TRIANGLE + 0x25BD, 0x81A4, // WHITE DOWN-POINTING TRIANGLE + 0x25C6, 0x819F, // BLACK DIAMOND + 0x25C7, 0x819E, // WHITE DIAMOND + 0x25CB, 0x819B, // WHITE CIRCLE + 0x25CE, 0x819D, // BULLSEYE + 0x25CF, 0x819C, // BLACK CIRCLE + 0x25EF, 0x81FC, // LARGE CIRCLE + 0x2605, 0x819A, // BLACK STAR + 0x2606, 0x8199, // WHITE STAR + 0x2640, 0x818A, // FEMALE SIGN + 0x2642, 0x8189, // MALE SIGN + 0x266A, 0x81F4, // EIGHTH NOTE + 0x266D, 0x81F3, // MUSIC FLAT SIGN + 0x266F, 0x81F2, // MUSIC SHARP SIGN + 0x3000, 0x8140, // IDEOGRAPHIC SPACE + 0x3001, 0x8141, // IDEOGRAPHIC COMMA + 0x3002, 0x8142, // IDEOGRAPHIC FULL STOP + 0x3003, 0x8156, // DITTO MARK + 0x3005, 0x8158, // IDEOGRAPHIC ITERATION MARK + 0x3006, 0x8159, // IDEOGRAPHIC CLOSING MARK + 0x3007, 0x815A, // IDEOGRAPHIC NUMBER ZERO + 0x3008, 0x8171, // LEFT ANGLE BRACKET + 0x3009, 0x8172, // RIGHT ANGLE BRACKET + 0x300A, 0x8173, // LEFT DOUBLE ANGLE BRACKET + 0x300B, 0x8174, // RIGHT DOUBLE ANGLE BRACKET + 0x300C, 0x8175, // LEFT CORNER BRACKET + 0x300D, 0x8176, // RIGHT CORNER BRACKET + 0x300E, 0x8177, // LEFT WHITE CORNER BRACKET + 0x300F, 0x8178, // RIGHT WHITE CORNER BRACKET + 0x3010, 0x8179, // LEFT BLACK LENTICULAR BRACKET + 0x3011, 0x817A, // RIGHT BLACK LENTICULAR BRACKET + 0x3012, 0x81A7, // POSTAL MARK + 0x3013, 0x81AC, // GETA MARK + 0x3014, 0x816B, // LEFT TORTOISE SHELL BRACKET + 0x3015, 0x816C, // RIGHT TORTOISE SHELL BRACKET + 0x301C, 0x8160, // WAVE DASH + 0x3041, 0x829F, // HIRAGANA LETTER SMALL A + 0x3042, 0x82A0, // HIRAGANA LETTER A + 0x3043, 0x82A1, // HIRAGANA LETTER SMALL I + 0x3044, 0x82A2, // HIRAGANA LETTER I + 0x3045, 0x82A3, // HIRAGANA LETTER SMALL U + 0x3046, 0x82A4, // HIRAGANA LETTER U + 0x3047, 0x82A5, // HIRAGANA LETTER SMALL E + 0x3048, 0x82A6, // HIRAGANA LETTER E + 0x3049, 0x82A7, // HIRAGANA LETTER SMALL O + 0x304A, 0x82A8, // HIRAGANA LETTER O + 0x304B, 0x82A9, // HIRAGANA LETTER KA + 0x304C, 0x82AA, // HIRAGANA LETTER GA + 0x304D, 0x82AB, // HIRAGANA LETTER KI + 0x304E, 0x82AC, // HIRAGANA LETTER GI + 0x304F, 0x82AD, // HIRAGANA LETTER KU + 0x3050, 0x82AE, // HIRAGANA LETTER GU + 0x3051, 0x82AF, // HIRAGANA LETTER KE + 0x3052, 0x82B0, // HIRAGANA LETTER GE + 0x3053, 0x82B1, // HIRAGANA LETTER KO + 0x3054, 0x82B2, // HIRAGANA LETTER GO + 0x3055, 0x82B3, // HIRAGANA LETTER SA + 0x3056, 0x82B4, // HIRAGANA LETTER ZA + 0x3057, 0x82B5, // HIRAGANA LETTER SI + 0x3058, 0x82B6, // HIRAGANA LETTER ZI + 0x3059, 0x82B7, // HIRAGANA LETTER SU + 0x305A, 0x82B8, // HIRAGANA LETTER ZU + 0x305B, 0x82B9, // HIRAGANA LETTER SE + 0x305C, 0x82BA, // HIRAGANA LETTER ZE + 0x305D, 0x82BB, // HIRAGANA LETTER SO + 0x305E, 0x82BC, // HIRAGANA LETTER ZO + 0x305F, 0x82BD, // HIRAGANA LETTER TA + 0x3060, 0x82BE, // HIRAGANA LETTER DA + 0x3061, 0x82BF, // HIRAGANA LETTER TI + 0x3062, 0x82C0, // HIRAGANA LETTER DI + 0x3063, 0x82C1, // HIRAGANA LETTER SMALL TU + 0x3064, 0x82C2, // HIRAGANA LETTER TU + 0x3065, 0x82C3, // HIRAGANA LETTER DU + 0x3066, 0x82C4, // HIRAGANA LETTER TE + 0x3067, 0x82C5, // HIRAGANA LETTER DE + 0x3068, 0x82C6, // HIRAGANA LETTER TO + 0x3069, 0x82C7, // HIRAGANA LETTER DO + 0x306A, 0x82C8, // HIRAGANA LETTER NA + 0x306B, 0x82C9, // HIRAGANA LETTER NI + 0x306C, 0x82CA, // HIRAGANA LETTER NU + 0x306D, 0x82CB, // HIRAGANA LETTER NE + 0x306E, 0x82CC, // HIRAGANA LETTER NO + 0x306F, 0x82CD, // HIRAGANA LETTER HA + 0x3070, 0x82CE, // HIRAGANA LETTER BA + 0x3071, 0x82CF, // HIRAGANA LETTER PA + 0x3072, 0x82D0, // HIRAGANA LETTER HI + 0x3073, 0x82D1, // HIRAGANA LETTER BI + 0x3074, 0x82D2, // HIRAGANA LETTER PI + 0x3075, 0x82D3, // HIRAGANA LETTER HU + 0x3076, 0x82D4, // HIRAGANA LETTER BU + 0x3077, 0x82D5, // HIRAGANA LETTER PU + 0x3078, 0x82D6, // HIRAGANA LETTER HE + 0x3079, 0x82D7, // HIRAGANA LETTER BE + 0x307A, 0x82D8, // HIRAGANA LETTER PE + 0x307B, 0x82D9, // HIRAGANA LETTER HO + 0x307C, 0x82DA, // HIRAGANA LETTER BO + 0x307D, 0x82DB, // HIRAGANA LETTER PO + 0x307E, 0x82DC, // HIRAGANA LETTER MA + 0x307F, 0x82DD, // HIRAGANA LETTER MI + 0x3080, 0x82DE, // HIRAGANA LETTER MU + 0x3081, 0x82DF, // HIRAGANA LETTER ME + 0x3082, 0x82E0, // HIRAGANA LETTER MO + 0x3083, 0x82E1, // HIRAGANA LETTER SMALL YA + 0x3084, 0x82E2, // HIRAGANA LETTER YA + 0x3085, 0x82E3, // HIRAGANA LETTER SMALL YU + 0x3086, 0x82E4, // HIRAGANA LETTER YU + 0x3087, 0x82E5, // HIRAGANA LETTER SMALL YO + 0x3088, 0x82E6, // HIRAGANA LETTER YO + 0x3089, 0x82E7, // HIRAGANA LETTER RA + 0x308A, 0x82E8, // HIRAGANA LETTER RI + 0x308B, 0x82E9, // HIRAGANA LETTER RU + 0x308C, 0x82EA, // HIRAGANA LETTER RE + 0x308D, 0x82EB, // HIRAGANA LETTER RO + 0x308E, 0x82EC, // HIRAGANA LETTER SMALL WA + 0x308F, 0x82ED, // HIRAGANA LETTER WA + 0x3090, 0x82EE, // HIRAGANA LETTER WI + 0x3091, 0x82EF, // HIRAGANA LETTER WE + 0x3092, 0x82F0, // HIRAGANA LETTER WO + 0x3093, 0x82F1, // HIRAGANA LETTER N + 0x309B, 0x814A, // KATAKANA-HIRAGANA VOICED SOUND MARK + 0x309C, 0x814B, // KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK + 0x309D, 0x8154, // HIRAGANA ITERATION MARK + 0x309E, 0x8155, // HIRAGANA VOICED ITERATION MARK + 0x30A1, 0x8340, // KATAKANA LETTER SMALL A + 0x30A2, 0x8341, // KATAKANA LETTER A + 0x30A3, 0x8342, // KATAKANA LETTER SMALL I + 0x30A4, 0x8343, // KATAKANA LETTER I + 0x30A5, 0x8344, // KATAKANA LETTER SMALL U + 0x30A6, 0x8345, // KATAKANA LETTER U + 0x30A7, 0x8346, // KATAKANA LETTER SMALL E + 0x30A8, 0x8347, // KATAKANA LETTER E + 0x30A9, 0x8348, // KATAKANA LETTER SMALL O + 0x30AA, 0x8349, // KATAKANA LETTER O + 0x30AB, 0x834A, // KATAKANA LETTER KA + 0x30AC, 0x834B, // KATAKANA LETTER GA + 0x30AD, 0x834C, // KATAKANA LETTER KI + 0x30AE, 0x834D, // KATAKANA LETTER GI + 0x30AF, 0x834E, // KATAKANA LETTER KU + 0x30B0, 0x834F, // KATAKANA LETTER GU + 0x30B1, 0x8350, // KATAKANA LETTER KE + 0x30B2, 0x8351, // KATAKANA LETTER GE + 0x30B3, 0x8352, // KATAKANA LETTER KO + 0x30B4, 0x8353, // KATAKANA LETTER GO + 0x30B5, 0x8354, // KATAKANA LETTER SA + 0x30B6, 0x8355, // KATAKANA LETTER ZA + 0x30B7, 0x8356, // KATAKANA LETTER SI + 0x30B8, 0x8357, // KATAKANA LETTER ZI + 0x30B9, 0x8358, // KATAKANA LETTER SU + 0x30BA, 0x8359, // KATAKANA LETTER ZU + 0x30BB, 0x835A, // KATAKANA LETTER SE + 0x30BD, 0x835C, // KATAKANA LETTER SO + 0x30BE, 0x835D, // KATAKANA LETTER ZO + 0x30BF, 0x835E, // KATAKANA LETTER TA + 0x30C0, 0x835F, // KATAKANA LETTER DA + 0x30C1, 0x8360, // KATAKANA LETTER TI + 0x30C2, 0x8361, // KATAKANA LETTER DI + 0x30C3, 0x8362, // KATAKANA LETTER SMALL TU + 0x30C4, 0x8363, // KATAKANA LETTER TU + 0x30C5, 0x8364, // KATAKANA LETTER DU + 0x30C6, 0x8365, // KATAKANA LETTER TE + 0x30C7, 0x8366, // KATAKANA LETTER DE + 0x30C8, 0x8367, // KATAKANA LETTER TO + 0x30C9, 0x8368, // KATAKANA LETTER DO + 0x30CA, 0x8369, // KATAKANA LETTER NA + 0x30CB, 0x836A, // KATAKANA LETTER NI + 0x30CC, 0x836B, // KATAKANA LETTER NU + 0x30CD, 0x836C, // KATAKANA LETTER NE + 0x30CE, 0x836D, // KATAKANA LETTER NO + 0x30CF, 0x836E, // KATAKANA LETTER HA + 0x30D0, 0x836F, // KATAKANA LETTER BA + 0x30D1, 0x8370, // KATAKANA LETTER PA + 0x30D2, 0x8371, // KATAKANA LETTER HI + 0x30D3, 0x8372, // KATAKANA LETTER BI + 0x30D4, 0x8373, // KATAKANA LETTER PI + 0x30D5, 0x8374, // KATAKANA LETTER HU + 0x30D6, 0x8375, // KATAKANA LETTER BU + 0x30D7, 0x8376, // KATAKANA LETTER PU + 0x30D8, 0x8377, // KATAKANA LETTER HE + 0x30D9, 0x8378, // KATAKANA LETTER BE + 0x30DA, 0x8379, // KATAKANA LETTER PE + 0x30DB, 0x837A, // KATAKANA LETTER HO + 0x30DC, 0x837B, // KATAKANA LETTER BO + 0x30DD, 0x837C, // KATAKANA LETTER PO + 0x30DE, 0x837D, // KATAKANA LETTER MA + 0x30DF, 0x837E, // KATAKANA LETTER MI + 0x30E0, 0x8380, // KATAKANA LETTER MU + 0x30E1, 0x8381, // KATAKANA LETTER ME + 0x30E2, 0x8382, // KATAKANA LETTER MO + 0x30E3, 0x8383, // KATAKANA LETTER SMALL YA + 0x30E4, 0x8384, // KATAKANA LETTER YA + 0x30E5, 0x8385, // KATAKANA LETTER SMALL YU + 0x30E6, 0x8386, // KATAKANA LETTER YU + 0x30E7, 0x8387, // KATAKANA LETTER SMALL YO + 0x30E8, 0x8388, // KATAKANA LETTER YO + 0x30E9, 0x8389, // KATAKANA LETTER RA + 0x30EA, 0x838A, // KATAKANA LETTER RI + 0x30EB, 0x838B, // KATAKANA LETTER RU + 0x30EC, 0x838C, // KATAKANA LETTER RE + 0x30ED, 0x838D, // KATAKANA LETTER RO + 0x30EE, 0x838E, // KATAKANA LETTER SMALL WA + 0x30EF, 0x838F, // KATAKANA LETTER WA + 0x30F0, 0x8390, // KATAKANA LETTER WI + 0x30F1, 0x8391, // KATAKANA LETTER WE + 0x30F2, 0x8392, // KATAKANA LETTER WO + 0x30F3, 0x8393, // KATAKANA LETTER N + 0x30F4, 0x8394, // KATAKANA LETTER VU + 0x30F5, 0x8395, // KATAKANA LETTER SMALL KA + 0x30F6, 0x8396, // KATAKANA LETTER SMALL KE + 0x30FB, 0x8145, // KATAKANA MIDDLE DOT + 0x30FD, 0x8152, // KATAKANA ITERATION MARK + 0x30FE, 0x8153, // KATAKANA VOICED ITERATION MARK + 0x4E00, 0x88EA, // + 0x4E01, 0x929A, // + 0x4E03, 0x8EB5, // + 0x4E07, 0x969C, // + 0x4E08, 0x8FE4, // + 0x4E09, 0x8E4F, // + 0x4E0A, 0x8FE3, // + 0x4E0B, 0x89BA, // + 0x4E0D, 0x9573, // + 0x4E0E, 0x975E, // + 0x4E10, 0x98A0, // + 0x4E11, 0x894E, // + 0x4E14, 0x8A8E, // + 0x4E15, 0x98A1, // + 0x4E16, 0x90A2, // + 0x4E17, 0x99C0, // + 0x4E18, 0x8B75, // + 0x4E19, 0x95B8, // + 0x4E1E, 0x8FE5, // + 0x4E21, 0x97BC, // + 0x4E26, 0x95C0, // + 0x4E2A, 0x98A2, // + 0x4E2D, 0x9286, // + 0x4E31, 0x98A3, // + 0x4E32, 0x8BF8, // + 0x4E36, 0x98A4, // + 0x4E38, 0x8ADB, // + 0x4E39, 0x924F, // + 0x4E3B, 0x8EE5, // + 0x4E3C, 0x98A5, // + 0x4E3F, 0x98A6, // + 0x4E42, 0x98A7, // + 0x4E43, 0x9454, // + 0x4E45, 0x8B76, // + 0x4E4B, 0x9456, // + 0x4E4D, 0x93E1, // + 0x4E4E, 0x8CC1, // + 0x4E4F, 0x9652, // + 0x4E55, 0xE568, // + 0x4E56, 0x98A8, // + 0x4E57, 0x8FE6, // + 0x4E58, 0x98A9, // + 0x4E59, 0x89B3, // + 0x4E5D, 0x8BE3, // + 0x4E5E, 0x8CEE, // + 0x4E5F, 0x96E7, // + 0x4E62, 0x9BA4, // + 0x4E71, 0x9790, // + 0x4E73, 0x93FB, // + 0x4E7E, 0x8AA3, // + 0x4E80, 0x8B54, // + 0x4E82, 0x98AA, // + 0x4E85, 0x98AB, // + 0x4E86, 0x97B9, // + 0x4E88, 0x975C, // + 0x4E89, 0x9188, // + 0x4E8A, 0x98AD, // + 0x4E8B, 0x8E96, // + 0x4E8C, 0x93F1, // + 0x4E8E, 0x98B0, // + 0x4E91, 0x895D, // + 0x4E92, 0x8CDD, // + 0x4E94, 0x8CDC, // + 0x4E95, 0x88E4, // + 0x4E98, 0x986A, // + 0x4E99, 0x9869, // + 0x4E9B, 0x8DB1, // + 0x4E9C, 0x889F, // + 0x4E9E, 0x98B1, // + 0x4E9F, 0x98B2, // + 0x4EA0, 0x98B3, // + 0x4EA1, 0x9653, // + 0x4EA2, 0x98B4, // + 0x4EA4, 0x8CF0, // + 0x4EA5, 0x88E5, // + 0x4EA6, 0x9692, // + 0x4EA8, 0x8B9C, // + 0x4EAB, 0x8B9D, // + 0x4EAC, 0x8B9E, // + 0x4EAD, 0x92E0, // + 0x4EAE, 0x97BA, // + 0x4EB0, 0x98B5, // + 0x4EB3, 0x98B6, // + 0x4EB6, 0x98B7, // + 0x4EBA, 0x906C, // + 0x4EC0, 0x8F59, // + 0x4EC1, 0x906D, // + 0x4EC2, 0x98BC, // + 0x4EC4, 0x98BA, // + 0x4EC6, 0x98BB, // + 0x4EC7, 0x8B77, // + 0x4ECA, 0x8DA1, // + 0x4ECB, 0x89EE, // + 0x4ECD, 0x98B9, // + 0x4ECE, 0x98B8, // + 0x4ECF, 0x95A7, // + 0x4ED4, 0x8E65, // + 0x4ED5, 0x8E64, // + 0x4ED6, 0x91BC, // + 0x4ED7, 0x98BD, // + 0x4ED8, 0x9574, // + 0x4ED9, 0x90E5, // + 0x4EDD, 0x8157, // + 0x4EDE, 0x98BE, // + 0x4EDF, 0x98C0, // + 0x4EE3, 0x91E3, // + 0x4EE4, 0x97DF, // + 0x4EE5, 0x88C8, // + 0x4EED, 0x98BF, // + 0x4EEE, 0x89BC, // + 0x4EF0, 0x8BC2, // + 0x4EF2, 0x9287, // + 0x4EF6, 0x8C8F, // + 0x4EF7, 0x98C1, // + 0x4EFB, 0x9443, // + 0x4F01, 0x8AE9, // + 0x4F09, 0x98C2, // + 0x4F0A, 0x88C9, // + 0x4F0D, 0x8CDE, // + 0x4F0E, 0x8AEA, // + 0x4F0F, 0x959A, // + 0x4F10, 0x94B0, // + 0x4F11, 0x8B78, // + 0x4F1A, 0x89EF, // + 0x4F1C, 0x98E5, // + 0x4F1D, 0x9360, // + 0x4F2F, 0x948C, // + 0x4F30, 0x98C4, // + 0x4F34, 0x94BA, // + 0x4F36, 0x97E0, // + 0x4F38, 0x904C, // + 0x4F3A, 0x8E66, // + 0x4F3C, 0x8E97, // + 0x4F3D, 0x89BE, // + 0x4F43, 0x92CF, // + 0x4F46, 0x9241, // + 0x4F47, 0x98C8, // + 0x4F4D, 0x88CA, // + 0x4F4E, 0x92E1, // + 0x4F4F, 0x8F5A, // + 0x4F50, 0x8DB2, // + 0x4F51, 0x9743, // + 0x4F53, 0x91CC, // + 0x4F55, 0x89BD, // + 0x4F57, 0x98C7, // + 0x4F59, 0x975D, // + 0x4F5A, 0x98C3, // + 0x4F5B, 0x98C5, // + 0x4F5C, 0x8DEC, // + 0x4F5D, 0x98C6, // + 0x4F5E, 0x9B43, // + 0x4F69, 0x98CE, // + 0x4F6F, 0x98D1, // + 0x4F70, 0x98CF, // + 0x4F73, 0x89C0, // + 0x4F75, 0x95B9, // + 0x4F76, 0x98C9, // + 0x4F7B, 0x98CD, // + 0x4F7C, 0x8CF1, // + 0x4F7F, 0x8E67, // + 0x4F83, 0x8AA4, // + 0x4F86, 0x98D2, // + 0x4F88, 0x98CA, // + 0x4F8B, 0x97E1, // + 0x4F8D, 0x8E98, // + 0x4F8F, 0x98CB, // + 0x4F91, 0x98D0, // + 0x4F96, 0x98D3, // + 0x4F98, 0x98CC, // + 0x4F9B, 0x8B9F, // + 0x4F9D, 0x88CB, // + 0x4FA0, 0x8BA0, // + 0x4FA1, 0x89BF, // + 0x4FAB, 0x9B44, // + 0x4FAD, 0x9699, // + 0x4FAE, 0x958E, // + 0x4FAF, 0x8CF2, // + 0x4FB5, 0x904E, // + 0x4FB6, 0x97B5, // + 0x4FBF, 0x95D6, // + 0x4FC2, 0x8C57, // + 0x4FC3, 0x91A3, // + 0x4FC4, 0x89E2, // + 0x4FCA, 0x8F72, // + 0x4FCE, 0x98D7, // + 0x4FD0, 0x98DC, // + 0x4FD1, 0x98DA, // + 0x4FD4, 0x98D5, // + 0x4FD7, 0x91AD, // + 0x4FD8, 0x98D8, // + 0x4FDA, 0x98DB, // + 0x4FDB, 0x98D9, // + 0x4FDD, 0x95DB, // + 0x4FDF, 0x98D6, // + 0x4FE1, 0x904D, // + 0x4FE3, 0x9693, // + 0x4FE4, 0x98DD, // + 0x4FE5, 0x98DE, // + 0x4FEE, 0x8F43, // + 0x4FEF, 0x98EB, // + 0x4FF3, 0x946F, // + 0x4FF5, 0x9555, // + 0x4FF6, 0x98E6, // + 0x4FF8, 0x95EE, // + 0x4FFA, 0x89B4, // + 0x4FFE, 0x98EA, // + 0x5005, 0x98E4, // + 0x5006, 0x98ED, // + 0x5009, 0x9171, // + 0x500B, 0x8CC2, // + 0x500D, 0x947B, // + 0x500F, 0xE0C5, // + 0x5011, 0x98EC, // + 0x5012, 0x937C, // + 0x5014, 0x98E1, // + 0x5016, 0x8CF4, // + 0x5019, 0x8CF3, // + 0x501A, 0x98DF, // + 0x501F, 0x8ED8, // + 0x5021, 0x98E7, // + 0x5023, 0x95ED, // + 0x5024, 0x926C, // + 0x5025, 0x98E3, // + 0x5026, 0x8C91, // + 0x5028, 0x98E0, // + 0x5029, 0x98E8, // + 0x502A, 0x98E2, // + 0x502B, 0x97CF, // + 0x502C, 0x98E9, // + 0x502D, 0x9860, // + 0x5036, 0x8BE4, // + 0x5039, 0x8C90, // + 0x5043, 0x98EE, // + 0x5047, 0x98EF, // + 0x5048, 0x98F3, // + 0x5049, 0x88CC, // + 0x504F, 0x95CE, // + 0x5050, 0x98F2, // + 0x5055, 0x98F1, // + 0x5056, 0x98F5, // + 0x505A, 0x98F4, // + 0x505C, 0x92E2, // + 0x5065, 0x8C92, // + 0x506C, 0x98F6, // + 0x5072, 0x8EC3, // + 0x5074, 0x91A4, // + 0x5075, 0x92E3, // + 0x5076, 0x8BF4, // + 0x5078, 0x98F7, // + 0x507D, 0x8B55, // + 0x5080, 0x98F8, // + 0x5085, 0x98FA, // + 0x508D, 0x9654, // + 0x5091, 0x8C86, // + 0x5098, 0x8E50, // + 0x5099, 0x94F5, // + 0x509A, 0x98F9, // + 0x50AC, 0x8DC3, // + 0x50AD, 0x9762, // + 0x50B2, 0x98FC, // + 0x50B3, 0x9942, // + 0x50B4, 0x98FB, // + 0x50B5, 0x8DC2, // + 0x50B7, 0x8F9D, // + 0x50BE, 0x8C58, // + 0x50C2, 0x9943, // + 0x50C5, 0x8BCD, // + 0x50C9, 0x9940, // + 0x50CA, 0x9941, // + 0x50CD, 0x93AD, // + 0x50CF, 0x919C, // + 0x50D1, 0x8BA1, // + 0x50D5, 0x966C, // + 0x50D6, 0x9944, // + 0x50DA, 0x97BB, // + 0x50DE, 0x9945, // + 0x50E3, 0x9948, // + 0x50E5, 0x9946, // + 0x50E7, 0x916D, // + 0x50ED, 0x9947, // + 0x50EE, 0x9949, // + 0x50F5, 0x994B, // + 0x50F9, 0x994A, // + 0x50FB, 0x95C6, // + 0x5100, 0x8B56, // + 0x5101, 0x994D, // + 0x5102, 0x994E, // + 0x5104, 0x89AD, // + 0x5109, 0x994C, // + 0x5112, 0x8EF2, // + 0x5114, 0x9951, // + 0x5115, 0x9950, // + 0x5116, 0x994F, // + 0x5118, 0x98D4, // + 0x511A, 0x9952, // + 0x511F, 0x8F9E, // + 0x5121, 0x9953, // + 0x512A, 0x9744, // + 0x5132, 0x96D7, // + 0x5137, 0x9955, // + 0x513A, 0x9954, // + 0x513B, 0x9957, // + 0x513C, 0x9956, // + 0x513F, 0x9958, // + 0x5140, 0x9959, // + 0x5141, 0x88F2, // + 0x5143, 0x8CB3, // + 0x5144, 0x8C5A, // + 0x5146, 0x929B, // + 0x5147, 0x8BA2, // + 0x5148, 0x90E6, // + 0x5149, 0x8CF5, // + 0x514B, 0x8D8E, // + 0x514D, 0x96C6, // + 0x514E, 0x9365, // + 0x5150, 0x8E99, // + 0x5152, 0x995A, // + 0x5154, 0x995C, // + 0x515A, 0x937D, // + 0x515C, 0x8A95, // + 0x5162, 0x995D, // + 0x5165, 0x93FC, // + 0x5168, 0x9153, // + 0x5169, 0x995F, // + 0x516A, 0x9960, // + 0x516B, 0x94AA, // + 0x516C, 0x8CF6, // + 0x516D, 0x985A, // + 0x516E, 0x9961, // + 0x5171, 0x8BA4, // + 0x5175, 0x95BA, // + 0x5176, 0x91B4, // + 0x5177, 0x8BEF, // + 0x5178, 0x9354, // + 0x517C, 0x8C93, // + 0x5180, 0x9962, // + 0x5182, 0x9963, // + 0x5185, 0x93E0, // + 0x5186, 0x897E, // + 0x5189, 0x9966, // + 0x518A, 0x8DFB, // + 0x518C, 0x9965, // + 0x518D, 0x8DC4, // + 0x518F, 0x9967, // + 0x5190, 0xE3EC, // + 0x5191, 0x9968, // + 0x5192, 0x9660, // + 0x5193, 0x9969, // + 0x5195, 0x996A, // + 0x5196, 0x996B, // + 0x5197, 0x8FE7, // + 0x5199, 0x8ECA, // + 0x51A0, 0x8AA5, // + 0x51A2, 0x996E, // + 0x51A4, 0x996C, // + 0x51A5, 0x96BB, // + 0x51A6, 0x996D, // + 0x51A8, 0x9579, // + 0x51A9, 0x996F, // + 0x51AA, 0x9970, // + 0x51AB, 0x9971, // + 0x51AC, 0x937E, // + 0x51B0, 0x9975, // + 0x51B1, 0x9973, // + 0x51B2, 0x9974, // + 0x51B3, 0x9972, // + 0x51B4, 0x8DE1, // + 0x51B5, 0x9976, // + 0x51B6, 0x96E8, // + 0x51B7, 0x97E2, // + 0x51BD, 0x9977, // + 0x51C4, 0x90A6, // + 0x51C5, 0x9978, // + 0x51C6, 0x8F79, // + 0x51C9, 0x9979, // + 0x51CB, 0x929C, // + 0x51CC, 0x97BD, // + 0x51CD, 0x9380, // + 0x51D6, 0x99C3, // + 0x51DB, 0x997A, // + 0x51DC, 0xEAA3, // + 0x51DD, 0x8BC3, // + 0x51E0, 0x997B, // + 0x51E1, 0x967D, // + 0x51E6, 0x8F88, // + 0x51E7, 0x91FA, // + 0x51E9, 0x997D, // + 0x51EA, 0x93E2, // + 0x51ED, 0x997E, // + 0x51F0, 0x9980, // + 0x51F1, 0x8A4D, // + 0x51F5, 0x9981, // + 0x51F6, 0x8BA5, // + 0x51F8, 0x93CA, // + 0x51F9, 0x899A, // + 0x51FA, 0x8F6F, // + 0x51FD, 0x949F, // + 0x51FE, 0x9982, // + 0x5200, 0x9381, // + 0x5203, 0x906E, // + 0x5204, 0x9983, // + 0x5206, 0x95AA, // + 0x5207, 0x90D8, // + 0x5208, 0x8AA0, // + 0x520A, 0x8AA7, // + 0x520B, 0x9984, // + 0x520E, 0x9986, // + 0x5211, 0x8C59, // + 0x5214, 0x9985, // + 0x5217, 0x97F1, // + 0x521D, 0x8F89, // + 0x5224, 0x94BB, // + 0x5225, 0x95CA, // + 0x5227, 0x9987, // + 0x5229, 0x9798, // + 0x522A, 0x9988, // + 0x522E, 0x9989, // + 0x5230, 0x939E, // + 0x5233, 0x998A, // + 0x5236, 0x90A7, // + 0x5237, 0x8DFC, // + 0x5238, 0x8C94, // + 0x5239, 0x998B, // + 0x523A, 0x8E68, // + 0x523B, 0x8D8F, // + 0x5243, 0x92E4, // + 0x5244, 0x998D, // + 0x5247, 0x91A5, // + 0x524A, 0x8DED, // + 0x524B, 0x998E, // + 0x524C, 0x998F, // + 0x524D, 0x914F, // + 0x524F, 0x998C, // + 0x5254, 0x9991, // + 0x5256, 0x9655, // + 0x525B, 0x8D84, // + 0x525E, 0x9990, // + 0x5263, 0x8C95, // + 0x5264, 0x8DDC, // + 0x5265, 0x948D, // + 0x5269, 0x9994, // + 0x526A, 0x9992, // + 0x526F, 0x959B, // + 0x5270, 0x8FE8, // + 0x5271, 0x999B, // + 0x5272, 0x8A84, // + 0x5273, 0x9995, // + 0x5274, 0x9993, // + 0x5275, 0x916E, // + 0x527D, 0x9997, // + 0x527F, 0x9996, // + 0x5283, 0x8A63, // + 0x5287, 0x8C80, // + 0x5288, 0x999C, // + 0x5289, 0x97AB, // + 0x528D, 0x9998, // + 0x5291, 0x999D, // + 0x5292, 0x999A, // + 0x5294, 0x9999, // + 0x529B, 0x97CD, // + 0x529F, 0x8CF7, // + 0x52A0, 0x89C1, // + 0x52A3, 0x97F2, // + 0x52A9, 0x8F95, // + 0x52AA, 0x9377, // + 0x52AB, 0x8D85, // + 0x52AC, 0x99A0, // + 0x52AD, 0x99A1, // + 0x52B1, 0x97E3, // + 0x52B4, 0x984A, // + 0x52B5, 0x99A3, // + 0x52B9, 0x8CF8, // + 0x52BC, 0x99A2, // + 0x52BE, 0x8A4E, // + 0x52C1, 0x99A4, // + 0x52C3, 0x9675, // + 0x52C5, 0x92BA, // + 0x52C7, 0x9745, // + 0x52C9, 0x95D7, // + 0x52CD, 0x99A5, // + 0x52D2, 0xE8D3, // + 0x52D5, 0x93AE, // + 0x52D7, 0x99A6, // + 0x52D8, 0x8AA8, // + 0x52D9, 0x96B1, // + 0x52DD, 0x8F9F, // + 0x52DE, 0x99A7, // + 0x52DF, 0x95E5, // + 0x52E0, 0x99AB, // + 0x52E2, 0x90A8, // + 0x52E3, 0x99A8, // + 0x52E4, 0x8BCE, // + 0x52E6, 0x99A9, // + 0x52E7, 0x8AA9, // + 0x52F2, 0x8C4D, // + 0x52F3, 0x99AC, // + 0x52F5, 0x99AD, // + 0x52F8, 0x99AE, // + 0x52F9, 0x99AF, // + 0x52FA, 0x8ED9, // + 0x52FE, 0x8CF9, // + 0x52FF, 0x96DC, // + 0x5301, 0x96E6, // + 0x5302, 0x93F5, // + 0x5305, 0x95EF, // + 0x5306, 0x99B0, // + 0x5308, 0x99B1, // + 0x530D, 0x99B3, // + 0x530F, 0x99B5, // + 0x5310, 0x99B4, // + 0x5315, 0x99B6, // + 0x5316, 0x89BB, // + 0x5317, 0x966B, // + 0x5319, 0x8DFA, // + 0x531A, 0x99B7, // + 0x531D, 0x9178, // + 0x5320, 0x8FA0, // + 0x5321, 0x8BA7, // + 0x5323, 0x99B8, // + 0x532A, 0x94D9, // + 0x532F, 0x99B9, // + 0x5331, 0x99BA, // + 0x5333, 0x99BB, // + 0x5338, 0x99BC, // + 0x5339, 0x9543, // + 0x533A, 0x8BE6, // + 0x533B, 0x88E3, // + 0x533F, 0x93BD, // + 0x5340, 0x99BD, // + 0x5341, 0x8F5C, // + 0x5343, 0x90E7, // + 0x5345, 0x99BF, // + 0x5346, 0x99BE, // + 0x5347, 0x8FA1, // + 0x5348, 0x8CDF, // + 0x5349, 0x99C1, // + 0x534A, 0x94BC, // + 0x534D, 0x99C2, // + 0x5351, 0x94DA, // + 0x5352, 0x91B2, // + 0x5353, 0x91EC, // + 0x5354, 0x8BA6, // + 0x5357, 0x93EC, // + 0x5358, 0x9250, // + 0x535A, 0x948E, // + 0x535C, 0x966D, // + 0x535E, 0x99C4, // + 0x5360, 0x90E8, // + 0x5366, 0x8C54, // + 0x5369, 0x99C5, // + 0x536E, 0x99C6, // + 0x536F, 0x894B, // + 0x5370, 0x88F3, // + 0x5371, 0x8AEB, // + 0x5373, 0x91A6, // + 0x5374, 0x8B70, // + 0x5375, 0x9791, // + 0x5377, 0x99C9, // + 0x5378, 0x89B5, // + 0x537B, 0x99C8, // + 0x537F, 0x8BA8, // + 0x5382, 0x99CA, // + 0x5384, 0x96EF, // + 0x5396, 0x99CB, // + 0x5398, 0x97D0, // + 0x539A, 0x8CFA, // + 0x539F, 0x8CB4, // + 0x53A0, 0x99CC, // + 0x53A5, 0x99CE, // + 0x53A6, 0x99CD, // + 0x53A8, 0x907E, // + 0x53A9, 0x8958, // + 0x53AD, 0x897D, // + 0x53AE, 0x99CF, // + 0x53B0, 0x99D0, // + 0x53B3, 0x8CB5, // + 0x53B6, 0x99D1, // + 0x53BB, 0x8B8E, // + 0x53C2, 0x8E51, // + 0x53C3, 0x99D2, // + 0x53C8, 0x9694, // + 0x53C9, 0x8DB3, // + 0x53CA, 0x8B79, // + 0x53CB, 0x9746, // + 0x53CC, 0x916F, // + 0x53CD, 0x94BD, // + 0x53CE, 0x8EFB, // + 0x53D4, 0x8F66, // + 0x53D6, 0x8EE6, // + 0x53D7, 0x8EF3, // + 0x53D9, 0x8F96, // + 0x53DB, 0x94BE, // + 0x53DF, 0x99D5, // + 0x53E1, 0x8962, // + 0x53E2, 0x9170, // + 0x53E3, 0x8CFB, // + 0x53E4, 0x8CC3, // + 0x53E5, 0x8BE5, // + 0x53E8, 0x99D9, // + 0x53E9, 0x9240, // + 0x53EA, 0x91FC, // + 0x53EB, 0x8BA9, // + 0x53EC, 0x8FA2, // + 0x53ED, 0x99DA, // + 0x53EE, 0x99D8, // + 0x53EF, 0x89C2, // + 0x53F0, 0x91E4, // + 0x53F1, 0x8EB6, // + 0x53F2, 0x8E6A, // + 0x53F3, 0x8945, // + 0x53F6, 0x8A90, // + 0x53F7, 0x8D86, // + 0x53F8, 0x8E69, // + 0x53FA, 0x99DB, // + 0x5401, 0x99DC, // + 0x5403, 0x8B68, // + 0x5404, 0x8A65, // + 0x5408, 0x8D87, // + 0x5409, 0x8B67, // + 0x540A, 0x92DD, // + 0x540B, 0x8944, // + 0x540C, 0x93AF, // + 0x540D, 0x96BC, // + 0x540E, 0x8D40, // + 0x540F, 0x9799, // + 0x5410, 0x9366, // + 0x5411, 0x8CFC, // + 0x541B, 0x8C4E, // + 0x541D, 0x99E5, // + 0x541F, 0x8BE1, // + 0x5420, 0x9669, // + 0x5426, 0x94DB, // + 0x5429, 0x99E4, // + 0x542B, 0x8ADC, // + 0x542C, 0x99DF, // + 0x542D, 0x99E0, // + 0x542E, 0x99E2, // + 0x5436, 0x99E3, // + 0x5438, 0x8B7A, // + 0x5439, 0x9081, // + 0x543B, 0x95AB, // + 0x543C, 0x99E1, // + 0x543D, 0x99DD, // + 0x543E, 0x8CE1, // + 0x5440, 0x99DE, // + 0x5442, 0x9843, // + 0x5446, 0x95F0, // + 0x5448, 0x92E6, // + 0x5449, 0x8CE0, // + 0x544A, 0x8D90, // + 0x544E, 0x99E6, // + 0x5451, 0x93DB, // + 0x545F, 0x99EA, // + 0x5468, 0x8EFC, // + 0x546A, 0x8EF4, // + 0x5470, 0x99ED, // + 0x5471, 0x99EB, // + 0x5473, 0x96A1, // + 0x5475, 0x99E8, // + 0x5476, 0x99F1, // + 0x5477, 0x99EC, // + 0x547B, 0x99EF, // + 0x547C, 0x8CC4, // + 0x547D, 0x96BD, // + 0x5480, 0x99F0, // + 0x5484, 0x99F2, // + 0x5486, 0x99F4, // + 0x548B, 0x8DEE, // + 0x548C, 0x9861, // + 0x548E, 0x99E9, // + 0x548F, 0x99E7, // + 0x5490, 0x99F3, // + 0x5492, 0x99EE, // + 0x54A2, 0x99F6, // + 0x54A4, 0x9A42, // + 0x54A5, 0x99F8, // + 0x54A8, 0x99FC, // + 0x54AB, 0x9A40, // + 0x54AC, 0x99F9, // + 0x54AF, 0x9A5D, // + 0x54B2, 0x8DE7, // + 0x54B3, 0x8A50, // + 0x54B8, 0x99F7, // + 0x54BC, 0x9A44, // + 0x54BD, 0x88F4, // + 0x54BE, 0x9A43, // + 0x54C0, 0x88A3, // + 0x54C1, 0x9569, // + 0x54C2, 0x9A41, // + 0x54C4, 0x99FA, // + 0x54C7, 0x99F5, // + 0x54C8, 0x99FB, // + 0x54C9, 0x8DC6, // + 0x54D8, 0x9A45, // + 0x54E1, 0x88F5, // + 0x54E2, 0x9A4E, // + 0x54E5, 0x9A46, // + 0x54E6, 0x9A47, // + 0x54E8, 0x8FA3, // + 0x54E9, 0x9689, // + 0x54ED, 0x9A4C, // + 0x54EE, 0x9A4B, // + 0x54F2, 0x934E, // + 0x54FA, 0x9A4D, // + 0x54FD, 0x9A4A, // + 0x5504, 0x8953, // + 0x5506, 0x8DB4, // + 0x5507, 0x904F, // + 0x550F, 0x9A48, // + 0x5510, 0x9382, // + 0x5514, 0x9A49, // + 0x5516, 0x88A0, // + 0x552E, 0x9A53, // + 0x552F, 0x9742, // + 0x5531, 0x8FA5, // + 0x5533, 0x9A59, // + 0x5538, 0x9A58, // + 0x5539, 0x9A4F, // + 0x553E, 0x91C1, // + 0x5540, 0x9A50, // + 0x5544, 0x91ED, // + 0x5545, 0x9A55, // + 0x5546, 0x8FA4, // + 0x554C, 0x9A52, // + 0x554F, 0x96E2, // + 0x5556, 0x9A56, // + 0x5557, 0x9A57, // + 0x555C, 0x9A54, // + 0x555D, 0x9A5A, // + 0x5563, 0x9A51, // + 0x557B, 0x9A60, // + 0x557C, 0x9A65, // + 0x557E, 0x9A61, // + 0x5580, 0x9A5C, // + 0x5583, 0x9A66, // + 0x5584, 0x9150, // + 0x5587, 0x9A68, // + 0x5589, 0x8D41, // + 0x558A, 0x9A5E, // + 0x558B, 0x929D, // + 0x5598, 0x9A62, // + 0x559A, 0x8AAB, // + 0x559C, 0x8AEC, // + 0x559D, 0x8A85, // + 0x559E, 0x9A63, // + 0x559F, 0x9A5F, // + 0x55A7, 0x8C96, // + 0x55A8, 0x9A69, // + 0x55A9, 0x9A67, // + 0x55AA, 0x9172, // + 0x55AB, 0x8B69, // + 0x55AC, 0x8BAA, // + 0x55AE, 0x9A64, // + 0x55B0, 0x8BF2, // + 0x55B6, 0x8963, // + 0x55C4, 0x9A6D, // + 0x55C5, 0x9A6B, // + 0x55C7, 0x9AA5, // + 0x55D4, 0x9A70, // + 0x55DA, 0x9A6A, // + 0x55DC, 0x9A6E, // + 0x55DF, 0x9A6C, // + 0x55E3, 0x8E6B, // + 0x55E4, 0x9A6F, // + 0x55F7, 0x9A72, // + 0x55F9, 0x9A77, // + 0x55FD, 0x9A75, // + 0x55FE, 0x9A74, // + 0x5606, 0x9251, // + 0x5609, 0x89C3, // + 0x5614, 0x9A71, // + 0x5616, 0x9A73, // + 0x5617, 0x8FA6, // + 0x5618, 0x8952, // + 0x561B, 0x9A76, // + 0x5629, 0x89DC, // + 0x562F, 0x9A82, // + 0x5631, 0x8FFA, // + 0x5632, 0x9A7D, // + 0x5634, 0x9A7B, // + 0x5636, 0x9A7C, // + 0x5638, 0x9A7E, // + 0x5642, 0x895C, // + 0x564C, 0x9158, // + 0x564E, 0x9A78, // + 0x5650, 0x9A79, // + 0x565B, 0x8A9A, // + 0x5664, 0x9A81, // + 0x5668, 0x8AED, // + 0x566A, 0x9A84, // + 0x566B, 0x9A80, // + 0x566C, 0x9A83, // + 0x5674, 0x95AC, // + 0x5678, 0x93D3, // + 0x567A, 0x94B6, // + 0x5680, 0x9A86, // + 0x5686, 0x9A85, // + 0x5687, 0x8A64, // + 0x568A, 0x9A87, // + 0x568F, 0x9A8A, // + 0x5694, 0x9A89, // + 0x56A0, 0x9A88, // + 0x56A2, 0x9458, // + 0x56A5, 0x9A8B, // + 0x56AE, 0x9A8C, // + 0x56B4, 0x9A8E, // + 0x56B6, 0x9A8D, // + 0x56BC, 0x9A90, // + 0x56C0, 0x9A93, // + 0x56C1, 0x9A91, // + 0x56C2, 0x9A8F, // + 0x56C3, 0x9A92, // + 0x56C8, 0x9A94, // + 0x56CE, 0x9A95, // + 0x56D1, 0x9A96, // + 0x56D3, 0x9A97, // + 0x56D7, 0x9A98, // + 0x56D8, 0x9964, // + 0x56DA, 0x8EFA, // + 0x56DB, 0x8E6C, // + 0x56DE, 0x89F1, // + 0x56E0, 0x88F6, // + 0x56E3, 0x9263, // + 0x56EE, 0x9A99, // + 0x56F0, 0x8DA2, // + 0x56F2, 0x88CD, // + 0x56F3, 0x907D, // + 0x56F9, 0x9A9A, // + 0x56FA, 0x8CC5, // + 0x56FD, 0x8D91, // + 0x56FF, 0x9A9C, // + 0x5700, 0x9A9B, // + 0x5703, 0x95DE, // + 0x5704, 0x9A9D, // + 0x5708, 0x9A9F, // + 0x5709, 0x9A9E, // + 0x570B, 0x9AA0, // + 0x570D, 0x9AA1, // + 0x570F, 0x8C97, // + 0x5712, 0x8980, // + 0x5713, 0x9AA2, // + 0x5716, 0x9AA4, // + 0x5718, 0x9AA3, // + 0x571C, 0x9AA6, // + 0x571F, 0x9379, // + 0x5726, 0x9AA7, // + 0x5727, 0x88B3, // + 0x5728, 0x8DDD, // + 0x572D, 0x8C5C, // + 0x5730, 0x926E, // + 0x5737, 0x9AA8, // + 0x5738, 0x9AA9, // + 0x573B, 0x9AAB, // + 0x5740, 0x9AAC, // + 0x5742, 0x8DE2, // + 0x5747, 0x8BCF, // + 0x574A, 0x9656, // + 0x574E, 0x9AAA, // + 0x574F, 0x9AAD, // + 0x5750, 0x8DBF, // + 0x5751, 0x8D42, // + 0x5761, 0x9AB1, // + 0x5764, 0x8DA3, // + 0x5766, 0x9252, // + 0x5769, 0x9AAE, // + 0x576A, 0x92D8, // + 0x577F, 0x9AB2, // + 0x5782, 0x9082, // + 0x5788, 0x9AB0, // + 0x5789, 0x9AB3, // + 0x578B, 0x8C5E, // + 0x5793, 0x9AB4, // + 0x57A0, 0x9AB5, // + 0x57A2, 0x8D43, // + 0x57A3, 0x8A5F, // + 0x57A4, 0x9AB7, // + 0x57AA, 0x9AB8, // + 0x57B0, 0x9AB9, // + 0x57B3, 0x9AB6, // + 0x57C0, 0x9AAF, // + 0x57C3, 0x9ABA, // + 0x57C6, 0x9ABB, // + 0x57CB, 0x9684, // + 0x57CE, 0x8FE9, // + 0x57D2, 0x9ABD, // + 0x57D3, 0x9ABE, // + 0x57D4, 0x9ABC, // + 0x57D6, 0x9AC0, // + 0x57DC, 0x9457, // + 0x57DF, 0x88E6, // + 0x57E0, 0x9575, // + 0x57E3, 0x9AC1, // + 0x57F4, 0x8FFB, // + 0x57F7, 0x8EB7, // + 0x57F9, 0x947C, // + 0x57FA, 0x8AEE, // + 0x57FC, 0x8DE9, // + 0x5800, 0x9678, // + 0x5802, 0x93B0, // + 0x5805, 0x8C98, // + 0x5806, 0x91CD, // + 0x580A, 0x9ABF, // + 0x580B, 0x9AC2, // + 0x5815, 0x91C2, // + 0x5819, 0x9AC3, // + 0x581D, 0x9AC4, // + 0x5821, 0x9AC6, // + 0x5824, 0x92E7, // + 0x582A, 0x8AAC, // + 0x582F, 0xEA9F, // + 0x5830, 0x8981, // + 0x5831, 0x95F1, // + 0x5834, 0x8FEA, // + 0x5835, 0x9367, // + 0x583A, 0x8DE4, // + 0x583D, 0x9ACC, // + 0x5840, 0x95BB, // + 0x5841, 0x97DB, // + 0x584A, 0x89F2, // + 0x584B, 0x9AC8, // + 0x5851, 0x9159, // + 0x5852, 0x9ACB, // + 0x5854, 0x9383, // + 0x5857, 0x9368, // + 0x5858, 0x9384, // + 0x5859, 0x94B7, // + 0x585A, 0x92CB, // + 0x585E, 0x8DC7, // + 0x5862, 0x9AC7, // + 0x5869, 0x8996, // + 0x586B, 0x9355, // + 0x5870, 0x9AC9, // + 0x5872, 0x9AC5, // + 0x5875, 0x906F, // + 0x5879, 0x9ACD, // + 0x587E, 0x8F6D, // + 0x5883, 0x8BAB, // + 0x5885, 0x9ACE, // + 0x5893, 0x95E6, // + 0x5897, 0x919D, // + 0x589C, 0x92C4, // + 0x589F, 0x9AD0, // + 0x58A8, 0x966E, // + 0x58AB, 0x9AD1, // + 0x58AE, 0x9AD6, // + 0x58B3, 0x95AD, // + 0x58B8, 0x9AD5, // + 0x58B9, 0x9ACF, // + 0x58BA, 0x9AD2, // + 0x58BB, 0x9AD4, // + 0x58BE, 0x8DA4, // + 0x58C1, 0x95C7, // + 0x58C5, 0x9AD7, // + 0x58C7, 0x9264, // + 0x58CA, 0x89F3, // + 0x58CC, 0x8FEB, // + 0x58D1, 0x9AD9, // + 0x58D3, 0x9AD8, // + 0x58D5, 0x8D88, // + 0x58D7, 0x9ADA, // + 0x58D8, 0x9ADC, // + 0x58D9, 0x9ADB, // + 0x58DC, 0x9ADE, // + 0x58DE, 0x9AD3, // + 0x58DF, 0x9AE0, // + 0x58E4, 0x9ADF, // + 0x58E5, 0x9ADD, // + 0x58EB, 0x8E6D, // + 0x58EC, 0x9070, // + 0x58EE, 0x9173, // + 0x58EF, 0x9AE1, // + 0x58F0, 0x90BA, // + 0x58F1, 0x88EB, // + 0x58F2, 0x9484, // + 0x58F7, 0x92D9, // + 0x58F9, 0x9AE3, // + 0x58FA, 0x9AE2, // + 0x58FB, 0x9AE4, // + 0x58FC, 0x9AE5, // + 0x58FD, 0x9AE6, // + 0x5902, 0x9AE7, // + 0x5909, 0x95CF, // + 0x590A, 0x9AE8, // + 0x590F, 0x89C4, // + 0x5910, 0x9AE9, // + 0x5916, 0x8A4F, // + 0x5918, 0x99C7, // + 0x5919, 0x8F67, // + 0x591A, 0x91BD, // + 0x591B, 0x9AEA, // + 0x591C, 0x96E9, // + 0x5922, 0x96B2, // + 0x5925, 0x9AEC, // + 0x5927, 0x91E5, // + 0x5929, 0x9356, // + 0x592A, 0x91BE, // + 0x592B, 0x9576, // + 0x592C, 0x9AED, // + 0x592D, 0x9AEE, // + 0x592E, 0x899B, // + 0x5931, 0x8EB8, // + 0x5932, 0x9AEF, // + 0x5937, 0x88CE, // + 0x5938, 0x9AF0, // + 0x593E, 0x9AF1, // + 0x5944, 0x8982, // + 0x5947, 0x8AEF, // + 0x5948, 0x93DE, // + 0x5949, 0x95F2, // + 0x594E, 0x9AF5, // + 0x594F, 0x9174, // + 0x5950, 0x9AF4, // + 0x5951, 0x8C5F, // + 0x5954, 0x967A, // + 0x5955, 0x9AF3, // + 0x5957, 0x9385, // + 0x5958, 0x9AF7, // + 0x595A, 0x9AF6, // + 0x5960, 0x9AF9, // + 0x5962, 0x9AF8, // + 0x5965, 0x899C, // + 0x5967, 0x9AFA, // + 0x5968, 0x8FA7, // + 0x5969, 0x9AFC, // + 0x596A, 0x9244, // + 0x596C, 0x9AFB, // + 0x596E, 0x95B1, // + 0x5973, 0x8F97, // + 0x5974, 0x937A, // + 0x5978, 0x9B40, // + 0x597D, 0x8D44, // + 0x5981, 0x9B41, // + 0x5982, 0x9440, // + 0x5983, 0x94DC, // + 0x5984, 0x96CF, // + 0x598A, 0x9444, // + 0x598D, 0x9B4A, // + 0x5993, 0x8B57, // + 0x5996, 0x9764, // + 0x5999, 0x96AD, // + 0x599B, 0x9BAA, // + 0x599D, 0x9B42, // + 0x59A3, 0x9B45, // + 0x59A5, 0x91C3, // + 0x59A8, 0x9657, // + 0x59AC, 0x9369, // + 0x59B2, 0x9B46, // + 0x59B9, 0x9685, // + 0x59BB, 0x8DC8, // + 0x59BE, 0x8FA8, // + 0x59C6, 0x9B47, // + 0x59C9, 0x8E6F, // + 0x59CB, 0x8E6E, // + 0x59D0, 0x88B7, // + 0x59D1, 0x8CC6, // + 0x59D3, 0x90A9, // + 0x59D4, 0x88CF, // + 0x59D9, 0x9B4B, // + 0x59DA, 0x9B4C, // + 0x59DC, 0x9B49, // + 0x59E5, 0x8957, // + 0x59E6, 0x8AAD, // + 0x59E8, 0x9B48, // + 0x59EA, 0x96C3, // + 0x59EB, 0x9550, // + 0x59F6, 0x88A6, // + 0x59FB, 0x88F7, // + 0x59FF, 0x8E70, // + 0x5A01, 0x88D0, // + 0x5A03, 0x88A1, // + 0x5A09, 0x9B51, // + 0x5A11, 0x9B4F, // + 0x5A18, 0x96BA, // + 0x5A1A, 0x9B52, // + 0x5A1C, 0x9B50, // + 0x5A1F, 0x9B4E, // + 0x5A20, 0x9050, // + 0x5A25, 0x9B4D, // + 0x5A29, 0x95D8, // + 0x5A2F, 0x8CE2, // + 0x5A35, 0x9B56, // + 0x5A36, 0x9B57, // + 0x5A3C, 0x8FA9, // + 0x5A40, 0x9B53, // + 0x5A41, 0x984B, // + 0x5A46, 0x946B, // + 0x5A49, 0x9B55, // + 0x5A5A, 0x8DA5, // + 0x5A62, 0x9B58, // + 0x5A66, 0x9577, // + 0x5A6A, 0x9B59, // + 0x5A6C, 0x9B54, // + 0x5A7F, 0x96B9, // + 0x5A92, 0x947D, // + 0x5A9A, 0x9B5A, // + 0x5A9B, 0x9551, // + 0x5ABD, 0x9B5F, // + 0x5ABE, 0x9B5C, // + 0x5AC1, 0x89C5, // + 0x5AC2, 0x9B5E, // + 0x5AC9, 0x8EB9, // + 0x5ACB, 0x9B5D, // + 0x5ACC, 0x8C99, // + 0x5AD0, 0x9B6B, // + 0x5AD6, 0x9B64, // + 0x5AD7, 0x9B61, // + 0x5AE1, 0x9284, // + 0x5AE3, 0x9B60, // + 0x5AE6, 0x9B62, // + 0x5AE9, 0x9B63, // + 0x5AFA, 0x9B65, // + 0x5AFB, 0x9B66, // + 0x5B09, 0x8AF0, // + 0x5B0B, 0x9B68, // + 0x5B0C, 0x9B67, // + 0x5B16, 0x9B69, // + 0x5B22, 0x8FEC, // + 0x5B2A, 0x9B6C, // + 0x5B2C, 0x92DA, // + 0x5B30, 0x8964, // + 0x5B32, 0x9B6A, // + 0x5B36, 0x9B6D, // + 0x5B3E, 0x9B6E, // + 0x5B40, 0x9B71, // + 0x5B43, 0x9B6F, // + 0x5B45, 0x9B70, // + 0x5B50, 0x8E71, // + 0x5B51, 0x9B72, // + 0x5B54, 0x8D45, // + 0x5B55, 0x9B73, // + 0x5B57, 0x8E9A, // + 0x5B58, 0x91B6, // + 0x5B5A, 0x9B74, // + 0x5B5B, 0x9B75, // + 0x5B5C, 0x8E79, // + 0x5B5D, 0x8D46, // + 0x5B5F, 0x96D0, // + 0x5B63, 0x8B47, // + 0x5B64, 0x8CC7, // + 0x5B65, 0x9B76, // + 0x5B66, 0x8A77, // + 0x5B69, 0x9B77, // + 0x5B6B, 0x91B7, // + 0x5B70, 0x9B78, // + 0x5B71, 0x9BA1, // + 0x5B73, 0x9B79, // + 0x5B75, 0x9B7A, // + 0x5B78, 0x9B7B, // + 0x5B7A, 0x9B7D, // + 0x5B80, 0x9B7E, // + 0x5B83, 0x9B80, // + 0x5B85, 0x91EE, // + 0x5B87, 0x8946, // + 0x5B88, 0x8EE7, // + 0x5B89, 0x88C0, // + 0x5B8B, 0x9176, // + 0x5B8C, 0x8AAE, // + 0x5B8D, 0x8EB3, // + 0x5B8F, 0x8D47, // + 0x5B95, 0x9386, // + 0x5B97, 0x8F40, // + 0x5B98, 0x8AAF, // + 0x5B99, 0x9288, // + 0x5B9A, 0x92E8, // + 0x5B9B, 0x88B6, // + 0x5B9C, 0x8B58, // + 0x5B9D, 0x95F3, // + 0x5B9F, 0x8EC0, // + 0x5BA2, 0x8B71, // + 0x5BA3, 0x90E9, // + 0x5BA4, 0x8EBA, // + 0x5BA5, 0x9747, // + 0x5BA6, 0x9B81, // + 0x5BAE, 0x8B7B, // + 0x5BB0, 0x8DC9, // + 0x5BB3, 0x8A51, // + 0x5BB4, 0x8983, // + 0x5BB5, 0x8FAA, // + 0x5BB6, 0x89C6, // + 0x5BB8, 0x9B82, // + 0x5BB9, 0x9765, // + 0x5BBF, 0x8F68, // + 0x5BC2, 0x8EE2, // + 0x5BC3, 0x9B83, // + 0x5BC4, 0x8AF1, // + 0x5BC5, 0x93D0, // + 0x5BC6, 0x96A7, // + 0x5BC7, 0x9B84, // + 0x5BC9, 0x9B85, // + 0x5BCC, 0x9578, // + 0x5BD0, 0x9B87, // + 0x5BD2, 0x8AA6, // + 0x5BD3, 0x8BF5, // + 0x5BD4, 0x9B86, // + 0x5BDB, 0x8AB0, // + 0x5BDD, 0x9051, // + 0x5BDE, 0x9B8B, // + 0x5BDF, 0x8E40, // + 0x5BE1, 0x89C7, // + 0x5BE2, 0x9B8A, // + 0x5BE4, 0x9B88, // + 0x5BE5, 0x9B8C, // + 0x5BE6, 0x9B89, // + 0x5BE7, 0x944A, // + 0x5BE8, 0x9ECB, // + 0x5BE9, 0x9052, // + 0x5BEB, 0x9B8D, // + 0x5BEE, 0x97BE, // + 0x5BF0, 0x9B8E, // + 0x5BF3, 0x9B90, // + 0x5BF5, 0x929E, // + 0x5BF6, 0x9B8F, // + 0x5BF8, 0x90A1, // + 0x5BFA, 0x8E9B, // + 0x5BFE, 0x91CE, // + 0x5BFF, 0x8EF5, // + 0x5C01, 0x9595, // + 0x5C02, 0x90EA, // + 0x5C04, 0x8ECB, // + 0x5C05, 0x9B91, // + 0x5C06, 0x8FAB, // + 0x5C07, 0x9B92, // + 0x5C08, 0x9B93, // + 0x5C09, 0x88D1, // + 0x5C0A, 0x91B8, // + 0x5C0B, 0x9071, // + 0x5C0D, 0x9B94, // + 0x5C0E, 0x93B1, // + 0x5C0F, 0x8FAC, // + 0x5C11, 0x8FAD, // + 0x5C13, 0x9B95, // + 0x5C16, 0x90EB, // + 0x5C1A, 0x8FAE, // + 0x5C20, 0x9B96, // + 0x5C22, 0x9B97, // + 0x5C24, 0x96DE, // + 0x5C28, 0x9B98, // + 0x5C2D, 0x8BC4, // + 0x5C31, 0x8F41, // + 0x5C38, 0x9B99, // + 0x5C39, 0x9B9A, // + 0x5C3A, 0x8EDA, // + 0x5C3B, 0x904B, // + 0x5C3C, 0x93F2, // + 0x5C3D, 0x9073, // + 0x5C3E, 0x94F6, // + 0x5C3F, 0x9441, // + 0x5C40, 0x8BC7, // + 0x5C41, 0x9B9B, // + 0x5C45, 0x8B8F, // + 0x5C46, 0x9B9C, // + 0x5C48, 0x8BFC, // + 0x5C4A, 0x93CD, // + 0x5C4B, 0x89AE, // + 0x5C4D, 0x8E72, // + 0x5C4E, 0x9B9D, // + 0x5C4F, 0x9BA0, // + 0x5C50, 0x9B9F, // + 0x5C51, 0x8BFB, // + 0x5C53, 0x9B9E, // + 0x5C55, 0x9357, // + 0x5C5E, 0x91AE, // + 0x5C60, 0x936A, // + 0x5C61, 0x8EC6, // + 0x5C64, 0x9177, // + 0x5C65, 0x979A, // + 0x5C6C, 0x9BA2, // + 0x5C6E, 0x9BA3, // + 0x5C6F, 0x93D4, // + 0x5C71, 0x8E52, // + 0x5C76, 0x9BA5, // + 0x5C79, 0x9BA6, // + 0x5C8C, 0x9BA7, // + 0x5C90, 0x8AF2, // + 0x5C91, 0x9BA8, // + 0x5C94, 0x9BA9, // + 0x5CA1, 0x89AA, // + 0x5CA8, 0x915A, // + 0x5CA9, 0x8AE2, // + 0x5CAB, 0x9BAB, // + 0x5CAC, 0x96A6, // + 0x5CB1, 0x91D0, // + 0x5CB3, 0x8A78, // + 0x5CB6, 0x9BAD, // + 0x5CB7, 0x9BAF, // + 0x5CB8, 0x8ADD, // + 0x5CBB, 0x9BAC, // + 0x5CBC, 0x9BAE, // + 0x5CBE, 0x9BB1, // + 0x5CC5, 0x9BB0, // + 0x5CC7, 0x9BB2, // + 0x5CD9, 0x9BB3, // + 0x5CE0, 0x93BB, // + 0x5CE1, 0x8BAC, // + 0x5CE8, 0x89E3, // + 0x5CE9, 0x9BB4, // + 0x5CEA, 0x9BB9, // + 0x5CED, 0x9BB7, // + 0x5CEF, 0x95F5, // + 0x5CF0, 0x95F4, // + 0x5CF6, 0x9387, // + 0x5CFA, 0x9BB6, // + 0x5CFB, 0x8F73, // + 0x5CFD, 0x9BB5, // + 0x5D07, 0x9092, // + 0x5D0B, 0x9BBA, // + 0x5D0E, 0x8DE8, // + 0x5D11, 0x9BC0, // + 0x5D14, 0x9BC1, // + 0x5D15, 0x9BBB, // + 0x5D16, 0x8A52, // + 0x5D17, 0x9BBC, // + 0x5D18, 0x9BC5, // + 0x5D19, 0x9BC4, // + 0x5D1A, 0x9BC3, // + 0x5D1B, 0x9BBF, // + 0x5D1F, 0x9BBE, // + 0x5D22, 0x9BC2, // + 0x5D29, 0x95F6, // + 0x5D4B, 0x9BC9, // + 0x5D4C, 0x9BC6, // + 0x5D4E, 0x9BC8, // + 0x5D50, 0x9792, // + 0x5D52, 0x9BC7, // + 0x5D5C, 0x9BBD, // + 0x5D69, 0x9093, // + 0x5D6C, 0x9BCA, // + 0x5D6F, 0x8DB5, // + 0x5D73, 0x9BCB, // + 0x5D76, 0x9BCC, // + 0x5D82, 0x9BCF, // + 0x5D84, 0x9BCE, // + 0x5D87, 0x9BCD, // + 0x5D8B, 0x9388, // + 0x5D8C, 0x9BB8, // + 0x5D90, 0x9BD5, // + 0x5D9D, 0x9BD1, // + 0x5DA2, 0x9BD0, // + 0x5DAC, 0x9BD2, // + 0x5DAE, 0x9BD3, // + 0x5DB7, 0x9BD6, // + 0x5DBA, 0x97E4, // + 0x5DBC, 0x9BD7, // + 0x5DBD, 0x9BD4, // + 0x5DC9, 0x9BD8, // + 0x5DCC, 0x8ADE, // + 0x5DCD, 0x9BD9, // + 0x5DD2, 0x9BDB, // + 0x5DD3, 0x9BDA, // + 0x5DD6, 0x9BDC, // + 0x5DDB, 0x9BDD, // + 0x5DDD, 0x90EC, // + 0x5DDE, 0x8F42, // + 0x5DE1, 0x8F84, // + 0x5DE3, 0x9183, // + 0x5DE5, 0x8D48, // + 0x5DE6, 0x8DB6, // + 0x5DE7, 0x8D49, // + 0x5DE8, 0x8B90, // + 0x5DEB, 0x9BDE, // + 0x5DEE, 0x8DB7, // + 0x5DF1, 0x8CC8, // + 0x5DF2, 0x9BDF, // + 0x5DF3, 0x96A4, // + 0x5DF4, 0x9462, // + 0x5DF5, 0x9BE0, // + 0x5DF7, 0x8D4A, // + 0x5DFB, 0x8AAA, // + 0x5DFD, 0x9246, // + 0x5DFE, 0x8BD0, // + 0x5E02, 0x8E73, // + 0x5E03, 0x957A, // + 0x5E06, 0x94BF, // + 0x5E0B, 0x9BE1, // + 0x5E0C, 0x8AF3, // + 0x5E11, 0x9BE4, // + 0x5E16, 0x929F, // + 0x5E19, 0x9BE3, // + 0x5E1A, 0x9BE2, // + 0x5E1B, 0x9BE5, // + 0x5E1D, 0x92E9, // + 0x5E25, 0x9083, // + 0x5E2B, 0x8E74, // + 0x5E2D, 0x90C8, // + 0x5E2F, 0x91D1, // + 0x5E30, 0x8B41, // + 0x5E33, 0x92A0, // + 0x5E36, 0x9BE6, // + 0x5E37, 0x9BE7, // + 0x5E38, 0x8FED, // + 0x5E3D, 0x9658, // + 0x5E40, 0x9BEA, // + 0x5E43, 0x9BE9, // + 0x5E44, 0x9BE8, // + 0x5E45, 0x959D, // + 0x5E47, 0x9BF1, // + 0x5E4C, 0x9679, // + 0x5E4E, 0x9BEB, // + 0x5E54, 0x9BED, // + 0x5E55, 0x968B, // + 0x5E57, 0x9BEC, // + 0x5E5F, 0x9BEE, // + 0x5E61, 0x94A6, // + 0x5E62, 0x9BEF, // + 0x5E63, 0x95BC, // + 0x5E64, 0x9BF0, // + 0x5E72, 0x8AB1, // + 0x5E73, 0x95BD, // + 0x5E74, 0x944E, // + 0x5E75, 0x9BF2, // + 0x5E76, 0x9BF3, // + 0x5E78, 0x8D4B, // + 0x5E79, 0x8AB2, // + 0x5E7A, 0x9BF4, // + 0x5E7B, 0x8CB6, // + 0x5E7C, 0x9763, // + 0x5E7D, 0x9748, // + 0x5E7E, 0x8AF4, // + 0x5E7F, 0x9BF6, // + 0x5E81, 0x92A1, // + 0x5E83, 0x8D4C, // + 0x5E84, 0x8FAF, // + 0x5E87, 0x94DD, // + 0x5E8A, 0x8FB0, // + 0x5E8F, 0x8F98, // + 0x5E95, 0x92EA, // + 0x5E96, 0x95F7, // + 0x5E97, 0x9358, // + 0x5E9A, 0x8D4D, // + 0x5E9C, 0x957B, // + 0x5EA0, 0x9BF7, // + 0x5EA6, 0x9378, // + 0x5EA7, 0x8DC0, // + 0x5EAB, 0x8CC9, // + 0x5EAD, 0x92EB, // + 0x5EB5, 0x88C1, // + 0x5EB6, 0x8F8E, // + 0x5EB7, 0x8D4E, // + 0x5EB8, 0x9766, // + 0x5EC1, 0x9BF8, // + 0x5EC2, 0x9BF9, // + 0x5EC3, 0x9470, // + 0x5EC8, 0x9BFA, // + 0x5EC9, 0x97F5, // + 0x5ECA, 0x984C, // + 0x5ECF, 0x9BFC, // + 0x5ED0, 0x9BFB, // + 0x5ED3, 0x8A66, // + 0x5ED6, 0x9C40, // + 0x5EDA, 0x9C43, // + 0x5EDB, 0x9C44, // + 0x5EDD, 0x9C42, // + 0x5EDF, 0x955F, // + 0x5EE0, 0x8FB1, // + 0x5EE1, 0x9C46, // + 0x5EE2, 0x9C45, // + 0x5EE3, 0x9C41, // + 0x5EE8, 0x9C47, // + 0x5EE9, 0x9C48, // + 0x5EEC, 0x9C49, // + 0x5EF0, 0x9C4C, // + 0x5EF1, 0x9C4A, // + 0x5EF3, 0x9C4B, // + 0x5EF4, 0x9C4D, // + 0x5EF6, 0x8984, // + 0x5EF7, 0x92EC, // + 0x5EF8, 0x9C4E, // + 0x5EFA, 0x8C9A, // + 0x5EFB, 0x89F4, // + 0x5EFC, 0x9455, // + 0x5EFE, 0x9C4F, // + 0x5EFF, 0x93F9, // + 0x5F01, 0x95D9, // + 0x5F03, 0x9C50, // + 0x5F04, 0x984D, // + 0x5F09, 0x9C51, // + 0x5F0A, 0x95BE, // + 0x5F0B, 0x9C54, // + 0x5F0C, 0x989F, // + 0x5F0D, 0x98AF, // + 0x5F0F, 0x8EAE, // + 0x5F10, 0x93F3, // + 0x5F11, 0x9C55, // + 0x5F13, 0x8B7C, // + 0x5F14, 0x92A2, // + 0x5F15, 0x88F8, // + 0x5F16, 0x9C56, // + 0x5F17, 0x95A4, // + 0x5F18, 0x8D4F, // + 0x5F1B, 0x926F, // + 0x5F1F, 0x92ED, // + 0x5F25, 0x96ED, // + 0x5F26, 0x8CB7, // + 0x5F27, 0x8CCA, // + 0x5F29, 0x9C57, // + 0x5F2D, 0x9C58, // + 0x5F2F, 0x9C5E, // + 0x5F31, 0x8EE3, // + 0x5F35, 0x92A3, // + 0x5F37, 0x8BAD, // + 0x5F38, 0x9C59, // + 0x5F3C, 0x954A, // + 0x5F3E, 0x9265, // + 0x5F41, 0x9C5A, // + 0x5F4A, 0x8BAE, // + 0x5F4C, 0x9C5C, // + 0x5F4E, 0x9C5D, // + 0x5F51, 0x9C5F, // + 0x5F53, 0x9396, // + 0x5F56, 0x9C60, // + 0x5F57, 0x9C61, // + 0x5F59, 0x9C62, // + 0x5F5C, 0x9C53, // + 0x5F5D, 0x9C52, // + 0x5F61, 0x9C63, // + 0x5F62, 0x8C60, // + 0x5F66, 0x9546, // + 0x5F69, 0x8DCA, // + 0x5F6A, 0x9556, // + 0x5F6B, 0x92A4, // + 0x5F6C, 0x956A, // + 0x5F6D, 0x9C64, // + 0x5F70, 0x8FB2, // + 0x5F71, 0x8965, // + 0x5F73, 0x9C65, // + 0x5F77, 0x9C66, // + 0x5F79, 0x96F0, // + 0x5F7C, 0x94DE, // + 0x5F7F, 0x9C69, // + 0x5F80, 0x899D, // + 0x5F81, 0x90AA, // + 0x5F82, 0x9C68, // + 0x5F83, 0x9C67, // + 0x5F84, 0x8C61, // + 0x5F85, 0x91D2, // + 0x5F87, 0x9C6D, // + 0x5F88, 0x9C6B, // + 0x5F8A, 0x9C6A, // + 0x5F8B, 0x97A5, // + 0x5F8C, 0x8CE3, // + 0x5F90, 0x8F99, // + 0x5F91, 0x9C6C, // + 0x5F92, 0x936B, // + 0x5F93, 0x8F5D, // + 0x5F97, 0x93BE, // + 0x5F98, 0x9C70, // + 0x5F99, 0x9C6F, // + 0x5F9E, 0x9C6E, // + 0x5FA0, 0x9C71, // + 0x5FA1, 0x8CE4, // + 0x5FA8, 0x9C72, // + 0x5FA9, 0x959C, // + 0x5FAA, 0x8F7A, // + 0x5FAD, 0x9C73, // + 0x5FAE, 0x94F7, // + 0x5FB3, 0x93BF, // + 0x5FB4, 0x92A5, // + 0x5FB9, 0x934F, // + 0x5FBC, 0x9C74, // + 0x5FBD, 0x8B4A, // + 0x5FC3, 0x9053, // + 0x5FC5, 0x954B, // + 0x5FCC, 0x8AF5, // + 0x5FCD, 0x9445, // + 0x5FD6, 0x9C75, // + 0x5FD7, 0x8E75, // + 0x5FD8, 0x9659, // + 0x5FD9, 0x965A, // + 0x5FDC, 0x899E, // + 0x5FDD, 0x9C7A, // + 0x5FE0, 0x9289, // + 0x5FE4, 0x9C77, // + 0x5FEB, 0x89F5, // + 0x5FF0, 0x9CAB, // + 0x5FF1, 0x9C79, // + 0x5FF5, 0x944F, // + 0x5FF8, 0x9C78, // + 0x5FFB, 0x9C76, // + 0x5FFD, 0x8D9A, // + 0x5FFF, 0x9C7C, // + 0x600E, 0x9C83, // + 0x600F, 0x9C89, // + 0x6010, 0x9C81, // + 0x6012, 0x937B, // + 0x6015, 0x9C86, // + 0x6016, 0x957C, // + 0x6019, 0x9C80, // + 0x601B, 0x9C85, // + 0x601C, 0x97E5, // + 0x601D, 0x8E76, // + 0x6020, 0x91D3, // + 0x6021, 0x9C7D, // + 0x6025, 0x8B7D, // + 0x6026, 0x9C88, // + 0x6027, 0x90AB, // + 0x6028, 0x8985, // + 0x6029, 0x9C82, // + 0x602A, 0x89F6, // + 0x602B, 0x9C87, // + 0x602F, 0x8BAF, // + 0x6031, 0x9C84, // + 0x603A, 0x9C8A, // + 0x6041, 0x9C8C, // + 0x6042, 0x9C96, // + 0x6043, 0x9C94, // + 0x6046, 0x9C91, // + 0x604A, 0x9C90, // + 0x604B, 0x97F6, // + 0x604D, 0x9C92, // + 0x6050, 0x8BB0, // + 0x6052, 0x8D50, // + 0x6055, 0x8F9A, // + 0x6059, 0x9C99, // + 0x605A, 0x9C8B, // + 0x605F, 0x9C8F, // + 0x6060, 0x9C7E, // + 0x6062, 0x89F8, // + 0x6063, 0x9C93, // + 0x6064, 0x9C95, // + 0x6065, 0x9270, // + 0x6068, 0x8DA6, // + 0x6069, 0x89B6, // + 0x606A, 0x9C8D, // + 0x606B, 0x9C98, // + 0x606C, 0x9C97, // + 0x606D, 0x8BB1, // + 0x606F, 0x91A7, // + 0x6070, 0x8A86, // + 0x6075, 0x8C62, // + 0x6077, 0x9C8E, // + 0x6081, 0x9C9A, // + 0x6083, 0x9C9D, // + 0x6084, 0x9C9F, // + 0x6089, 0x8EBB, // + 0x608B, 0x9CA5, // + 0x608C, 0x92EE, // + 0x608D, 0x9C9B, // + 0x6092, 0x9CA3, // + 0x6094, 0x89F7, // + 0x6096, 0x9CA1, // + 0x6097, 0x9CA2, // + 0x609A, 0x9C9E, // + 0x609B, 0x9CA0, // + 0x609F, 0x8CE5, // + 0x60A0, 0x9749, // + 0x60A3, 0x8AB3, // + 0x60A6, 0x8978, // + 0x60A7, 0x9CA4, // + 0x60A9, 0x9459, // + 0x60AA, 0x88AB, // + 0x60B2, 0x94DF, // + 0x60B3, 0x9C7B, // + 0x60B4, 0x9CAA, // + 0x60B5, 0x9CAE, // + 0x60B6, 0x96E3, // + 0x60B8, 0x9CA7, // + 0x60BC, 0x9389, // + 0x60BD, 0x9CAC, // + 0x60C5, 0x8FEE, // + 0x60C6, 0x9CAD, // + 0x60C7, 0x93D5, // + 0x60D1, 0x9866, // + 0x60D3, 0x9CA9, // + 0x60D8, 0x9CAF, // + 0x60DA, 0x8D9B, // + 0x60DC, 0x90C9, // + 0x60DF, 0x88D2, // + 0x60E0, 0x9CA8, // + 0x60E1, 0x9CA6, // + 0x60E3, 0x9179, // + 0x60E7, 0x9C9C, // + 0x60E8, 0x8E53, // + 0x60F0, 0x91C4, // + 0x60F1, 0x9CBB, // + 0x60F3, 0x917A, // + 0x60F4, 0x9CB6, // + 0x60F6, 0x9CB3, // + 0x60F7, 0x9CB4, // + 0x60F9, 0x8EE4, // + 0x60FA, 0x9CB7, // + 0x60FB, 0x9CBA, // + 0x6100, 0x9CB5, // + 0x6101, 0x8F44, // + 0x6103, 0x9CB8, // + 0x6106, 0x9CB2, // + 0x6108, 0x96FA, // + 0x6109, 0x96F9, // + 0x610D, 0x9CBC, // + 0x610E, 0x9CBD, // + 0x610F, 0x88D3, // + 0x6115, 0x9CB1, // + 0x611A, 0x8BF0, // + 0x611B, 0x88A4, // + 0x611F, 0x8AB4, // + 0x6121, 0x9CB9, // + 0x6127, 0x9CC1, // + 0x6128, 0x9CC0, // + 0x612C, 0x9CC5, // + 0x6134, 0x9CC6, // + 0x613C, 0x9CC4, // + 0x613D, 0x9CC7, // + 0x613E, 0x9CBF, // + 0x613F, 0x9CC3, // + 0x6142, 0x9CC8, // + 0x6144, 0x9CC9, // + 0x6147, 0x9CBE, // + 0x6148, 0x8E9C, // + 0x614A, 0x9CC2, // + 0x614B, 0x91D4, // + 0x614C, 0x8D51, // + 0x614D, 0x9CB0, // + 0x614E, 0x9054, // + 0x6153, 0x9CD6, // + 0x6155, 0x95E7, // + 0x6158, 0x9CCC, // + 0x6159, 0x9CCD, // + 0x615A, 0x9CCE, // + 0x615D, 0x9CD5, // + 0x615F, 0x9CD4, // + 0x6162, 0x969D, // + 0x6163, 0x8AB5, // + 0x6165, 0x9CD2, // + 0x6167, 0x8C64, // + 0x6168, 0x8A53, // + 0x616B, 0x9CCF, // + 0x616E, 0x97B6, // + 0x616F, 0x9CD1, // + 0x6170, 0x88D4, // + 0x6171, 0x9CD3, // + 0x6173, 0x9CCA, // + 0x6174, 0x9CD0, // + 0x6175, 0x9CD7, // + 0x6176, 0x8C63, // + 0x6177, 0x9CCB, // + 0x617E, 0x977C, // + 0x6182, 0x974A, // + 0x6187, 0x9CDA, // + 0x618A, 0x9CDE, // + 0x618E, 0x919E, // + 0x6190, 0x97F7, // + 0x6191, 0x9CDF, // + 0x6194, 0x9CDC, // + 0x6196, 0x9CD9, // + 0x6199, 0x9CD8, // + 0x619A, 0x9CDD, // + 0x61A4, 0x95AE, // + 0x61A7, 0x93B2, // + 0x61A9, 0x8C65, // + 0x61AB, 0x9CE0, // + 0x61AC, 0x9CDB, // + 0x61AE, 0x9CE1, // + 0x61B2, 0x8C9B, // + 0x61B6, 0x89AF, // + 0x61BA, 0x9CE9, // + 0x61BE, 0x8AB6, // + 0x61C3, 0x9CE7, // + 0x61C6, 0x9CE8, // + 0x61C7, 0x8DA7, // + 0x61C8, 0x9CE6, // + 0x61C9, 0x9CE4, // + 0x61CA, 0x9CE3, // + 0x61CB, 0x9CEA, // + 0x61CC, 0x9CE2, // + 0x61CD, 0x9CEC, // + 0x61D0, 0x89F9, // + 0x61E3, 0x9CEE, // + 0x61E6, 0x9CED, // + 0x61F2, 0x92A6, // + 0x61F4, 0x9CF1, // + 0x61F6, 0x9CEF, // + 0x61F7, 0x9CE5, // + 0x61F8, 0x8C9C, // + 0x61FA, 0x9CF0, // + 0x61FC, 0x9CF4, // + 0x61FD, 0x9CF3, // + 0x61FE, 0x9CF5, // + 0x61FF, 0x9CF2, // + 0x6200, 0x9CF6, // + 0x6208, 0x9CF7, // + 0x6209, 0x9CF8, // + 0x620A, 0x95E8, // + 0x620C, 0x9CFA, // + 0x620D, 0x9CF9, // + 0x620E, 0x8F5E, // + 0x6210, 0x90AC, // + 0x6211, 0x89E4, // + 0x6212, 0x89FA, // + 0x6214, 0x9CFB, // + 0x6216, 0x88BD, // + 0x621A, 0x90CA, // + 0x621B, 0x9CFC, // + 0x621D, 0xE6C1, // + 0x621E, 0x9D40, // + 0x621F, 0x8C81, // + 0x6221, 0x9D41, // + 0x6226, 0x90ED, // + 0x622A, 0x9D42, // + 0x622E, 0x9D43, // + 0x622F, 0x8B59, // + 0x6230, 0x9D44, // + 0x6232, 0x9D45, // + 0x6233, 0x9D46, // + 0x6234, 0x91D5, // + 0x6238, 0x8CCB, // + 0x623B, 0x96DF, // + 0x6240, 0x8F8A, // + 0x6241, 0x9D47, // + 0x6247, 0x90EE, // + 0x6248, 0xE7BB, // + 0x6249, 0x94E0, // + 0x624B, 0x8EE8, // + 0x624D, 0x8DCB, // + 0x624E, 0x9D48, // + 0x6253, 0x91C5, // + 0x6255, 0x95A5, // + 0x6258, 0x91EF, // + 0x625B, 0x9D4B, // + 0x625E, 0x9D49, // + 0x6260, 0x9D4C, // + 0x6263, 0x9D4A, // + 0x6268, 0x9D4D, // + 0x626E, 0x95AF, // + 0x6271, 0x88B5, // + 0x6276, 0x957D, // + 0x6279, 0x94E1, // + 0x627C, 0x9D4E, // + 0x627E, 0x9D51, // + 0x627F, 0x8FB3, // + 0x6280, 0x8B5A, // + 0x6282, 0x9D4F, // + 0x6283, 0x9D56, // + 0x6284, 0x8FB4, // + 0x6289, 0x9D50, // + 0x628A, 0x9463, // + 0x6291, 0x977D, // + 0x6292, 0x9D52, // + 0x6293, 0x9D53, // + 0x6294, 0x9D57, // + 0x6295, 0x938A, // + 0x6296, 0x9D54, // + 0x6297, 0x8D52, // + 0x6298, 0x90DC, // + 0x629B, 0x9D65, // + 0x629C, 0x94B2, // + 0x629E, 0x91F0, // + 0x62AB, 0x94E2, // + 0x62AC, 0x9DAB, // + 0x62B1, 0x95F8, // + 0x62B5, 0x92EF, // + 0x62B9, 0x9695, // + 0x62BB, 0x9D5A, // + 0x62BC, 0x899F, // + 0x62BD, 0x928A, // + 0x62C2, 0x9D63, // + 0x62C5, 0x9253, // + 0x62C6, 0x9D5D, // + 0x62C7, 0x9D64, // + 0x62C8, 0x9D5F, // + 0x62C9, 0x9D66, // + 0x62CA, 0x9D62, // + 0x62CC, 0x9D61, // + 0x62CD, 0x948F, // + 0x62D0, 0x89FB, // + 0x62D1, 0x9D59, // + 0x62D2, 0x8B91, // + 0x62D3, 0x91F1, // + 0x62D4, 0x9D55, // + 0x62D7, 0x9D58, // + 0x62D8, 0x8D53, // + 0x62D9, 0x90D9, // + 0x62DB, 0x8FB5, // + 0x62DC, 0x9D60, // + 0x62DD, 0x9471, // + 0x62E0, 0x8B92, // + 0x62E1, 0x8A67, // + 0x62EC, 0x8A87, // + 0x62ED, 0x9040, // + 0x62EE, 0x9D68, // + 0x62EF, 0x9D6D, // + 0x62F1, 0x9D69, // + 0x62F3, 0x8C9D, // + 0x62F5, 0x9D6E, // + 0x62F6, 0x8E41, // + 0x62F7, 0x8D89, // + 0x62FE, 0x8F45, // + 0x62FF, 0x9D5C, // + 0x6301, 0x8E9D, // + 0x6302, 0x9D6B, // + 0x6307, 0x8E77, // + 0x6308, 0x9D6C, // + 0x6309, 0x88C2, // + 0x630C, 0x9D67, // + 0x6311, 0x92A7, // + 0x6319, 0x8B93, // + 0x631F, 0x8BB2, // + 0x6327, 0x9D6A, // + 0x6328, 0x88A5, // + 0x632B, 0x8DC1, // + 0x632F, 0x9055, // + 0x633A, 0x92F0, // + 0x633D, 0x94D2, // + 0x633E, 0x9D70, // + 0x633F, 0x917D, // + 0x6349, 0x91A8, // + 0x634C, 0x8E4A, // + 0x634D, 0x9D71, // + 0x634F, 0x9D73, // + 0x6350, 0x9D6F, // + 0x6355, 0x95DF, // + 0x6357, 0x92BB, // + 0x635C, 0x917B, // + 0x6367, 0x95F9, // + 0x6368, 0x8ECC, // + 0x6369, 0x9D80, // + 0x636B, 0x9D7E, // + 0x636E, 0x9098, // + 0x6372, 0x8C9E, // + 0x6376, 0x9D78, // + 0x6377, 0x8FB7, // + 0x637A, 0x93E6, // + 0x637B, 0x9450, // + 0x6380, 0x9D76, // + 0x6383, 0x917C, // + 0x6388, 0x8EF6, // + 0x6389, 0x9D7B, // + 0x638C, 0x8FB6, // + 0x638E, 0x9D75, // + 0x638F, 0x9D7A, // + 0x6392, 0x9472, // + 0x6396, 0x9D74, // + 0x6398, 0x8C40, // + 0x639B, 0x8A7C, // + 0x639F, 0x9D7C, // + 0x63A0, 0x97A9, // + 0x63A1, 0x8DCC, // + 0x63A2, 0x9254, // + 0x63A3, 0x9D79, // + 0x63A5, 0x90DA, // + 0x63A7, 0x8D54, // + 0x63A8, 0x9084, // + 0x63A9, 0x8986, // + 0x63AB, 0x9D77, // + 0x63AC, 0x8B64, // + 0x63B2, 0x8C66, // + 0x63B4, 0x92CD, // + 0x63B5, 0x9D7D, // + 0x63BB, 0x917E, // + 0x63BE, 0x9D81, // + 0x63C0, 0x9D83, // + 0x63C3, 0x91B5, // + 0x63C4, 0x9D89, // + 0x63C6, 0x9D84, // + 0x63C9, 0x9D86, // + 0x63CF, 0x9560, // + 0x63D0, 0x92F1, // + 0x63D2, 0x9D87, // + 0x63D6, 0x974B, // + 0x63DA, 0x9767, // + 0x63DB, 0x8AB7, // + 0x63E1, 0x88AC, // + 0x63E3, 0x9D85, // + 0x63E9, 0x9D82, // + 0x63EE, 0x8AF6, // + 0x63F4, 0x8987, // + 0x63F6, 0x9D88, // + 0x63FA, 0x9768, // + 0x6406, 0x9D8C, // + 0x640D, 0x91B9, // + 0x640F, 0x9D93, // + 0x6413, 0x9D8D, // + 0x6416, 0x9D8A, // + 0x6417, 0x9D91, // + 0x641C, 0x9D72, // + 0x6426, 0x9D8E, // + 0x6428, 0x9D92, // + 0x642C, 0x94C0, // + 0x642D, 0x938B, // + 0x6434, 0x9D8B, // + 0x6436, 0x9D8F, // + 0x643A, 0x8C67, // + 0x643E, 0x8DEF, // + 0x6442, 0x90DB, // + 0x644E, 0x9D97, // + 0x6458, 0x9345, // + 0x6467, 0x9D94, // + 0x6469, 0x9680, // + 0x646F, 0x9D95, // + 0x6476, 0x9D96, // + 0x6478, 0x96CC, // + 0x647A, 0x90A0, // + 0x6483, 0x8C82, // + 0x6488, 0x9D9D, // + 0x6492, 0x8E54, // + 0x6493, 0x9D9A, // + 0x6495, 0x9D99, // + 0x649A, 0x9451, // + 0x649E, 0x93B3, // + 0x64A4, 0x9350, // + 0x64A5, 0x9D9B, // + 0x64A9, 0x9D9C, // + 0x64AB, 0x958F, // + 0x64AD, 0x9464, // + 0x64AE, 0x8E42, // + 0x64B0, 0x90EF, // + 0x64B2, 0x966F, // + 0x64B9, 0x8A68, // + 0x64BB, 0x9DA3, // + 0x64BC, 0x9D9E, // + 0x64C1, 0x9769, // + 0x64C2, 0x9DA5, // + 0x64C5, 0x9DA1, // + 0x64C7, 0x9DA2, // + 0x64CD, 0x9180, // + 0x64D2, 0x9DA0, // + 0x64D4, 0x9D5E, // + 0x64D8, 0x9DA4, // + 0x64DA, 0x9D9F, // + 0x64E0, 0x9DA9, // + 0x64E1, 0x9DAA, // + 0x64E2, 0x9346, // + 0x64E3, 0x9DAC, // + 0x64E6, 0x8E43, // + 0x64E7, 0x9DA7, // + 0x64EF, 0x9DAD, // + 0x64F1, 0x9DA6, // + 0x64F2, 0x9DB1, // + 0x64F4, 0x9DB0, // + 0x64F6, 0x9DAF, // + 0x64FA, 0x9DB2, // + 0x64FD, 0x9DB4, // + 0x64FE, 0x8FEF, // + 0x6500, 0x9DB3, // + 0x6505, 0x9DB7, // + 0x6518, 0x9DB5, // + 0x651C, 0x9DB6, // + 0x651D, 0x9D90, // + 0x6523, 0x9DB9, // + 0x6524, 0x9DB8, // + 0x652A, 0x9D98, // + 0x652B, 0x9DBA, // + 0x652C, 0x9DAE, // + 0x652F, 0x8E78, // + 0x6534, 0x9DBB, // + 0x6535, 0x9DBC, // + 0x6536, 0x9DBE, // + 0x6537, 0x9DBD, // + 0x6538, 0x9DBF, // + 0x6539, 0x89FC, // + 0x653B, 0x8D55, // + 0x653E, 0x95FA, // + 0x653F, 0x90AD, // + 0x6545, 0x8CCC, // + 0x6548, 0x9DC1, // + 0x654D, 0x9DC4, // + 0x654F, 0x9571, // + 0x6551, 0x8B7E, // + 0x6555, 0x9DC3, // + 0x6556, 0x9DC2, // + 0x6557, 0x9473, // + 0x6558, 0x9DC5, // + 0x6559, 0x8BB3, // + 0x655D, 0x9DC7, // + 0x655E, 0x9DC6, // + 0x6562, 0x8AB8, // + 0x6563, 0x8E55, // + 0x6566, 0x93D6, // + 0x656C, 0x8C68, // + 0x6570, 0x9094, // + 0x6572, 0x9DC8, // + 0x6574, 0x90AE, // + 0x6575, 0x9347, // + 0x6577, 0x957E, // + 0x6578, 0x9DC9, // + 0x6582, 0x9DCA, // + 0x6583, 0x9DCB, // + 0x6587, 0x95B6, // + 0x6588, 0x9B7C, // + 0x6589, 0x90C4, // + 0x658C, 0x956B, // + 0x658E, 0x8DD6, // + 0x6590, 0x94E3, // + 0x6591, 0x94C1, // + 0x6597, 0x936C, // + 0x6599, 0x97BF, // + 0x659B, 0x9DCD, // + 0x659C, 0x8ECE, // + 0x659F, 0x9DCE, // + 0x65A1, 0x88B4, // + 0x65A4, 0x8BD2, // + 0x65A5, 0x90CB, // + 0x65A7, 0x9580, // + 0x65AB, 0x9DCF, // + 0x65AC, 0x8E61, // + 0x65AD, 0x9266, // + 0x65AF, 0x8E7A, // + 0x65B0, 0x9056, // + 0x65B7, 0x9DD0, // + 0x65B9, 0x95FB, // + 0x65BC, 0x8997, // + 0x65BD, 0x8E7B, // + 0x65C1, 0x9DD3, // + 0x65C3, 0x9DD1, // + 0x65C4, 0x9DD4, // + 0x65C5, 0x97B7, // + 0x65C6, 0x9DD2, // + 0x65CB, 0x90F9, // + 0x65CC, 0x9DD5, // + 0x65CF, 0x91B0, // + 0x65D2, 0x9DD6, // + 0x65D7, 0x8AF8, // + 0x65D9, 0x9DD8, // + 0x65DB, 0x9DD7, // + 0x65E0, 0x9DD9, // + 0x65E1, 0x9DDA, // + 0x65E2, 0x8AF9, // + 0x65E5, 0x93FA, // + 0x65E6, 0x9255, // + 0x65E7, 0x8B8C, // + 0x65E8, 0x8E7C, // + 0x65E9, 0x9181, // + 0x65EC, 0x8F7B, // + 0x65ED, 0x88AE, // + 0x65F1, 0x9DDB, // + 0x65FA, 0x89A0, // + 0x65FB, 0x9DDF, // + 0x6602, 0x8D56, // + 0x6603, 0x9DDE, // + 0x6606, 0x8DA9, // + 0x6607, 0x8FB8, // + 0x660A, 0x9DDD, // + 0x660C, 0x8FB9, // + 0x660E, 0x96BE, // + 0x660F, 0x8DA8, // + 0x6613, 0x88D5, // + 0x6614, 0x90CC, // + 0x661C, 0x9DE4, // + 0x661F, 0x90AF, // + 0x6620, 0x8966, // + 0x6625, 0x8F74, // + 0x6627, 0x9686, // + 0x6628, 0x8DF0, // + 0x662D, 0x8FBA, // + 0x662F, 0x90A5, // + 0x6634, 0x9DE3, // + 0x6635, 0x9DE1, // + 0x6636, 0x9DE2, // + 0x663C, 0x928B, // + 0x663F, 0x9E45, // + 0x6641, 0x9DE8, // + 0x6642, 0x8E9E, // + 0x6643, 0x8D57, // + 0x6644, 0x9DE6, // + 0x6649, 0x9DE7, // + 0x664B, 0x9057, // + 0x664F, 0x9DE5, // + 0x6652, 0x8E4E, // + 0x665D, 0x9DEA, // + 0x665E, 0x9DE9, // + 0x665F, 0x9DEE, // + 0x6662, 0x9DEF, // + 0x6664, 0x9DEB, // + 0x6666, 0x8A41, // + 0x6667, 0x9DEC, // + 0x6668, 0x9DED, // + 0x6669, 0x94D3, // + 0x666E, 0x9581, // + 0x666F, 0x8C69, // + 0x6670, 0x9DF0, // + 0x6674, 0x90B0, // + 0x6676, 0x8FBB, // + 0x667A, 0x9271, // + 0x6681, 0x8BC5, // + 0x6683, 0x9DF1, // + 0x6684, 0x9DF5, // + 0x6687, 0x89C9, // + 0x6688, 0x9DF2, // + 0x6689, 0x9DF4, // + 0x668E, 0x9DF3, // + 0x6691, 0x8F8B, // + 0x6696, 0x9267, // + 0x6697, 0x88C3, // + 0x6698, 0x9DF6, // + 0x669D, 0x9DF7, // + 0x66A2, 0x92A8, // + 0x66A6, 0x97EF, // + 0x66AB, 0x8E62, // + 0x66AE, 0x95E9, // + 0x66B4, 0x965C, // + 0x66B8, 0x9E41, // + 0x66B9, 0x9DF9, // + 0x66BC, 0x9DFC, // + 0x66BE, 0x9DFB, // + 0x66C1, 0x9DF8, // + 0x66C4, 0x9E40, // + 0x66C7, 0x93DC, // + 0x66C9, 0x9DFA, // + 0x66D6, 0x9E42, // + 0x66D9, 0x8F8C, // + 0x66DA, 0x9E43, // + 0x66DC, 0x976A, // + 0x66DD, 0x9498, // + 0x66E0, 0x9E44, // + 0x66E6, 0x9E46, // + 0x66E9, 0x9E47, // + 0x66F0, 0x9E48, // + 0x66F2, 0x8BC8, // + 0x66F3, 0x8967, // + 0x66F4, 0x8D58, // + 0x66F5, 0x9E49, // + 0x66F7, 0x9E4A, // + 0x66F8, 0x8F91, // + 0x66F9, 0x9182, // + 0x66FC, 0x99D6, // + 0x66FD, 0x915D, // + 0x66FE, 0x915C, // + 0x66FF, 0x91D6, // + 0x6700, 0x8DC5, // + 0x6703, 0x98F0, // + 0x6708, 0x8C8E, // + 0x6709, 0x974C, // + 0x670B, 0x95FC, // + 0x670D, 0x959E, // + 0x670F, 0x9E4B, // + 0x6714, 0x8DF1, // + 0x6715, 0x92BD, // + 0x6716, 0x9E4C, // + 0x6717, 0x984E, // + 0x671B, 0x965D, // + 0x671D, 0x92A9, // + 0x671E, 0x9E4D, // + 0x671F, 0x8AFA, // + 0x6726, 0x9E4E, // + 0x6727, 0x9E4F, // + 0x6728, 0x96D8, // + 0x672A, 0x96A2, // + 0x672B, 0x9696, // + 0x672C, 0x967B, // + 0x672D, 0x8E44, // + 0x672E, 0x9E51, // + 0x6731, 0x8EE9, // + 0x6734, 0x9670, // + 0x6736, 0x9E53, // + 0x6737, 0x9E56, // + 0x6738, 0x9E55, // + 0x673A, 0x8AF7, // + 0x673D, 0x8B80, // + 0x673F, 0x9E52, // + 0x6741, 0x9E54, // + 0x6746, 0x9E57, // + 0x6749, 0x9099, // + 0x674E, 0x979B, // + 0x674F, 0x88C7, // + 0x6750, 0x8DDE, // + 0x6751, 0x91BA, // + 0x6753, 0x8EDB, // + 0x6756, 0x8FF1, // + 0x6759, 0x9E5A, // + 0x675C, 0x936D, // + 0x675E, 0x9E58, // + 0x675F, 0x91A9, // + 0x6760, 0x9E59, // + 0x6761, 0x8FF0, // + 0x6762, 0x96DB, // + 0x6764, 0x9E5C, // + 0x6765, 0x9788, // + 0x676A, 0x9E61, // + 0x676D, 0x8D59, // + 0x676F, 0x9474, // + 0x6770, 0x9E5E, // + 0x6771, 0x938C, // + 0x6772, 0x9DDC, // + 0x6773, 0x9DE0, // + 0x6775, 0x8B6E, // + 0x6777, 0x9466, // + 0x677C, 0x9E60, // + 0x677E, 0x8FBC, // + 0x677F, 0x94C2, // + 0x6785, 0x9E66, // + 0x6787, 0x94F8, // + 0x6789, 0x9E5D, // + 0x678B, 0x9E63, // + 0x678C, 0x9E62, // + 0x6790, 0x90CD, // + 0x6795, 0x968D, // + 0x6797, 0x97D1, // + 0x679A, 0x9687, // + 0x679C, 0x89CA, // + 0x679D, 0x8E7D, // + 0x67A0, 0x9867, // + 0x67A1, 0x9E65, // + 0x67A2, 0x9095, // + 0x67A6, 0x9E64, // + 0x67A9, 0x9E5F, // + 0x67AF, 0x8CCD, // + 0x67B3, 0x9E6B, // + 0x67B4, 0x9E69, // + 0x67B6, 0x89CB, // + 0x67B7, 0x9E67, // + 0x67B8, 0x9E6D, // + 0x67B9, 0x9E73, // + 0x67C1, 0x91C6, // + 0x67C4, 0x95BF, // + 0x67C6, 0x9E75, // + 0x67CA, 0x9541, // + 0x67CE, 0x9E74, // + 0x67CF, 0x9490, // + 0x67D0, 0x965E, // + 0x67D1, 0x8AB9, // + 0x67D3, 0x90F5, // + 0x67D4, 0x8F5F, // + 0x67D8, 0x92D1, // + 0x67DA, 0x974D, // + 0x67DD, 0x9E70, // + 0x67DE, 0x9E6F, // + 0x67E2, 0x9E71, // + 0x67E4, 0x9E6E, // + 0x67E7, 0x9E76, // + 0x67E9, 0x9E6C, // + 0x67EC, 0x9E6A, // + 0x67EE, 0x9E72, // + 0x67EF, 0x9E68, // + 0x67F1, 0x928C, // + 0x67F3, 0x96F6, // + 0x67F4, 0x8EC4, // + 0x67F5, 0x8DF2, // + 0x67FB, 0x8DB8, // + 0x67FE, 0x968F, // + 0x67FF, 0x8A60, // + 0x6802, 0x92CC, // + 0x6803, 0x93C8, // + 0x6804, 0x8968, // + 0x6813, 0x90F0, // + 0x6816, 0x90B2, // + 0x6817, 0x8C49, // + 0x681E, 0x9E78, // + 0x6821, 0x8D5A, // + 0x6822, 0x8A9C, // + 0x6829, 0x9E7A, // + 0x682A, 0x8A94, // + 0x682B, 0x9E81, // + 0x6832, 0x9E7D, // + 0x6834, 0x90F1, // + 0x6838, 0x8A6A, // + 0x6839, 0x8DAA, // + 0x683C, 0x8A69, // + 0x683D, 0x8DCD, // + 0x6840, 0x9E7B, // + 0x6841, 0x8C85, // + 0x6842, 0x8C6A, // + 0x6843, 0x938D, // + 0x6846, 0x9E79, // + 0x6848, 0x88C4, // + 0x684D, 0x9E7C, // + 0x684E, 0x9E7E, // + 0x6850, 0x8BCB, // + 0x6851, 0x8C4B, // + 0x6853, 0x8ABA, // + 0x6854, 0x8B6A, // + 0x6859, 0x9E82, // + 0x685C, 0x8DF7, // + 0x685D, 0x9691, // + 0x685F, 0x8E56, // + 0x6863, 0x9E83, // + 0x6867, 0x954F, // + 0x6874, 0x9E8F, // + 0x6876, 0x89B1, // + 0x6877, 0x9E84, // + 0x687E, 0x9E95, // + 0x687F, 0x9E85, // + 0x6881, 0x97C0, // + 0x6883, 0x9E8C, // + 0x6885, 0x947E, // + 0x688D, 0x9E94, // + 0x688F, 0x9E87, // + 0x6893, 0x88B2, // + 0x6894, 0x9E89, // + 0x689B, 0x9E8B, // + 0x689D, 0x9E8A, // + 0x689F, 0x9E86, // + 0x68A0, 0x9E91, // + 0x68A2, 0x8FBD, // + 0x68A6, 0x9AEB, // + 0x68A7, 0x8CE6, // + 0x68A8, 0x979C, // + 0x68AD, 0x9E88, // + 0x68AF, 0x92F2, // + 0x68B0, 0x8A42, // + 0x68B1, 0x8DAB, // + 0x68B3, 0x9E80, // + 0x68B5, 0x9E90, // + 0x68B6, 0x8A81, // + 0x68B9, 0x9E8E, // + 0x68BA, 0x9E92, // + 0x68BC, 0x938E, // + 0x68C4, 0x8AFC, // + 0x68C6, 0x9EB0, // + 0x68C9, 0x96C7, // + 0x68CA, 0x9E97, // + 0x68CB, 0x8AFB, // + 0x68CD, 0x9E9E, // + 0x68D2, 0x965F, // + 0x68D4, 0x9E9F, // + 0x68D5, 0x9EA1, // + 0x68D7, 0x9EA5, // + 0x68D8, 0x9E99, // + 0x68DA, 0x9249, // + 0x68DF, 0x938F, // + 0x68E0, 0x9EA9, // + 0x68E1, 0x9E9C, // + 0x68E3, 0x9EA6, // + 0x68E7, 0x9EA0, // + 0x68EE, 0x9058, // + 0x68EF, 0x9EAA, // + 0x68F2, 0x90B1, // + 0x68F9, 0x9EA8, // + 0x68FA, 0x8ABB, // + 0x6900, 0x986F, // + 0x6901, 0x9E96, // + 0x6904, 0x9EA4, // + 0x6905, 0x88D6, // + 0x6908, 0x9E98, // + 0x690B, 0x96B8, // + 0x690C, 0x9E9D, // + 0x690D, 0x9041, // + 0x690E, 0x92C5, // + 0x690F, 0x9E93, // + 0x6912, 0x9EA3, // + 0x6919, 0x909A, // + 0x691A, 0x9EAD, // + 0x691B, 0x8A91, // + 0x691C, 0x8C9F, // + 0x6921, 0x9EAF, // + 0x6922, 0x9E9A, // + 0x6923, 0x9EAE, // + 0x6925, 0x9EA7, // + 0x6926, 0x9E9B, // + 0x6928, 0x9EAB, // + 0x692A, 0x9EAC, // + 0x6930, 0x9EBD, // + 0x6934, 0x93CC, // + 0x6936, 0x9EA2, // + 0x6939, 0x9EB9, // + 0x693D, 0x9EBB, // + 0x693F, 0x92D6, // + 0x694A, 0x976B, // + 0x6953, 0x9596, // + 0x6954, 0x9EB6, // + 0x6955, 0x91C8, // + 0x6959, 0x9EBC, // + 0x695A, 0x915E, // + 0x695C, 0x9EB3, // + 0x695D, 0x9EC0, // + 0x695E, 0x9EBF, // + 0x6960, 0x93ED, // + 0x6961, 0x9EBE, // + 0x6962, 0x93E8, // + 0x696A, 0x9EC2, // + 0x696B, 0x9EB5, // + 0x696D, 0x8BC6, // + 0x696E, 0x9EB8, // + 0x696F, 0x8F7C, // + 0x6973, 0x9480, // + 0x6974, 0x9EBA, // + 0x6975, 0x8BC9, // + 0x6977, 0x9EB2, // + 0x6978, 0x9EB4, // + 0x6979, 0x9EB1, // + 0x697C, 0x984F, // + 0x697D, 0x8A79, // + 0x697E, 0x9EB7, // + 0x6981, 0x9EC1, // + 0x6982, 0x8A54, // + 0x698A, 0x8DE5, // + 0x698E, 0x897C, // + 0x6991, 0x9ED2, // + 0x6994, 0x9850, // + 0x6995, 0x9ED5, // + 0x699B, 0x9059, // + 0x699C, 0x9ED4, // + 0x69A0, 0x9ED3, // + 0x69A7, 0x9ED0, // + 0x69AE, 0x9EC4, // + 0x69B1, 0x9EE1, // + 0x69B2, 0x9EC3, // + 0x69B4, 0x9ED6, // + 0x69BB, 0x9ECE, // + 0x69BE, 0x9EC9, // + 0x69BF, 0x9EC6, // + 0x69C1, 0x9EC7, // + 0x69C3, 0x9ECF, // + 0x69C7, 0xEAA0, // + 0x69CA, 0x9ECC, // + 0x69CB, 0x8D5C, // + 0x69CC, 0x92C6, // + 0x69CD, 0x9184, // + 0x69CE, 0x9ECA, // + 0x69D0, 0x9EC5, // + 0x69D3, 0x9EC8, // + 0x69D8, 0x976C, // + 0x69D9, 0x968A, // + 0x69DD, 0x9ECD, // + 0x69DE, 0x9ED7, // + 0x69E7, 0x9EDF, // + 0x69E8, 0x9ED8, // + 0x69EB, 0x9EE5, // + 0x69ED, 0x9EE3, // + 0x69F2, 0x9EDE, // + 0x69F9, 0x9EDD, // + 0x69FB, 0x92CE, // + 0x69FD, 0x9185, // + 0x69FF, 0x9EDB, // + 0x6A02, 0x9ED9, // + 0x6A05, 0x9EE0, // + 0x6A0A, 0x9EE6, // + 0x6A0B, 0x94F3, // + 0x6A0C, 0x9EEC, // + 0x6A12, 0x9EE7, // + 0x6A13, 0x9EEA, // + 0x6A14, 0x9EE4, // + 0x6A17, 0x9294, // + 0x6A19, 0x9557, // + 0x6A1B, 0x9EDA, // + 0x6A1E, 0x9EE2, // + 0x6A1F, 0x8FBE, // + 0x6A21, 0x96CD, // + 0x6A22, 0x9EF6, // + 0x6A23, 0x9EE9, // + 0x6A29, 0x8CA0, // + 0x6A2A, 0x89A1, // + 0x6A2B, 0x8A7E, // + 0x6A2E, 0x9ED1, // + 0x6A35, 0x8FBF, // + 0x6A36, 0x9EEE, // + 0x6A38, 0x9EF5, // + 0x6A39, 0x8EF7, // + 0x6A3A, 0x8A92, // + 0x6A3D, 0x924D, // + 0x6A44, 0x9EEB, // + 0x6A47, 0x9EF0, // + 0x6A48, 0x9EF4, // + 0x6A4B, 0x8BB4, // + 0x6A58, 0x8B6B, // + 0x6A59, 0x9EF2, // + 0x6A5F, 0x8B40, // + 0x6A61, 0x93C9, // + 0x6A62, 0x9EF1, // + 0x6A66, 0x9EF3, // + 0x6A72, 0x9EED, // + 0x6A78, 0x9EEF, // + 0x6A7F, 0x8A80, // + 0x6A80, 0x9268, // + 0x6A84, 0x9EFA, // + 0x6A8D, 0x9EF8, // + 0x6A8E, 0x8CE7, // + 0x6A90, 0x9EF7, // + 0x6A97, 0x9F40, // + 0x6A9C, 0x9E77, // + 0x6AA0, 0x9EF9, // + 0x6AA2, 0x9EFB, // + 0x6AA3, 0x9EFC, // + 0x6AAA, 0x9F4B, // + 0x6AAC, 0x9F47, // + 0x6AAE, 0x9E8D, // + 0x6AB3, 0x9F46, // + 0x6AB8, 0x9F45, // + 0x6ABB, 0x9F42, // + 0x6AC1, 0x9EE8, // + 0x6AC2, 0x9F44, // + 0x6AC3, 0x9F43, // + 0x6AD1, 0x9F49, // + 0x6AD3, 0x9845, // + 0x6ADA, 0x9F4C, // + 0x6ADB, 0x8BF9, // + 0x6ADE, 0x9F48, // + 0x6ADF, 0x9F4A, // + 0x6AE8, 0x94A5, // + 0x6AEA, 0x9F4D, // + 0x6AFA, 0x9F51, // + 0x6AFB, 0x9F4E, // + 0x6B04, 0x9793, // + 0x6B05, 0x9F4F, // + 0x6B0A, 0x9EDC, // + 0x6B12, 0x9F52, // + 0x6B16, 0x9F53, // + 0x6B1D, 0x8954, // + 0x6B1F, 0x9F55, // + 0x6B20, 0x8C87, // + 0x6B21, 0x8E9F, // + 0x6B23, 0x8BD3, // + 0x6B27, 0x89A2, // + 0x6B32, 0x977E, // + 0x6B37, 0x9F57, // + 0x6B38, 0x9F56, // + 0x6B39, 0x9F59, // + 0x6B3A, 0x8B5C, // + 0x6B3D, 0x8BD4, // + 0x6B3E, 0x8ABC, // + 0x6B43, 0x9F5C, // + 0x6B49, 0x9F5D, // + 0x6B4C, 0x89CC, // + 0x6B4E, 0x9256, // + 0x6B50, 0x9F5E, // + 0x6B53, 0x8ABD, // + 0x6B54, 0x9F60, // + 0x6B59, 0x9F5F, // + 0x6B5B, 0x9F61, // + 0x6B5F, 0x9F62, // + 0x6B61, 0x9F63, // + 0x6B62, 0x8E7E, // + 0x6B63, 0x90B3, // + 0x6B64, 0x8D9F, // + 0x6B66, 0x9590, // + 0x6B69, 0x95E0, // + 0x6B6A, 0x9863, // + 0x6B6F, 0x8E95, // + 0x6B73, 0x8DCE, // + 0x6B74, 0x97F0, // + 0x6B78, 0x9F64, // + 0x6B79, 0x9F65, // + 0x6B7B, 0x8E80, // + 0x6B7F, 0x9F66, // + 0x6B80, 0x9F67, // + 0x6B83, 0x9F69, // + 0x6B84, 0x9F68, // + 0x6B86, 0x9677, // + 0x6B89, 0x8F7D, // + 0x6B8A, 0x8EEA, // + 0x6B8B, 0x8E63, // + 0x6B8D, 0x9F6A, // + 0x6B95, 0x9F6C, // + 0x6B96, 0x9042, // + 0x6B98, 0x9F6B, // + 0x6B9E, 0x9F6D, // + 0x6BA4, 0x9F6E, // + 0x6BAA, 0x9F6F, // + 0x6BAB, 0x9F70, // + 0x6BAF, 0x9F71, // + 0x6BB1, 0x9F73, // + 0x6BB2, 0x9F72, // + 0x6BB3, 0x9F74, // + 0x6BB4, 0x89A3, // + 0x6BB5, 0x9269, // + 0x6BB7, 0x9F75, // + 0x6BBA, 0x8E45, // + 0x6BBB, 0x8A6B, // + 0x6BBC, 0x9F76, // + 0x6BBF, 0x9361, // + 0x6BC0, 0x9ACA, // + 0x6BC5, 0x8B42, // + 0x6BC6, 0x9F77, // + 0x6BCB, 0x9F78, // + 0x6BCD, 0x95EA, // + 0x6BCE, 0x9688, // + 0x6BD2, 0x93C5, // + 0x6BD3, 0x9F79, // + 0x6BD4, 0x94E4, // + 0x6BD8, 0x94F9, // + 0x6BDB, 0x96D1, // + 0x6BDF, 0x9F7A, // + 0x6BEB, 0x9F7C, // + 0x6BEC, 0x9F7B, // + 0x6BEF, 0x9F7E, // + 0x6BF3, 0x9F7D, // + 0x6C08, 0x9F81, // + 0x6C0F, 0x8E81, // + 0x6C11, 0x96AF, // + 0x6C13, 0x9F82, // + 0x6C14, 0x9F83, // + 0x6C17, 0x8B43, // + 0x6C1B, 0x9F84, // + 0x6C23, 0x9F86, // + 0x6C24, 0x9F85, // + 0x6C34, 0x9085, // + 0x6C37, 0x9558, // + 0x6C38, 0x8969, // + 0x6C3E, 0x94C3, // + 0x6C40, 0x92F3, // + 0x6C41, 0x8F60, // + 0x6C42, 0x8B81, // + 0x6C4E, 0x94C4, // + 0x6C50, 0x8EAC, // + 0x6C55, 0x9F88, // + 0x6C57, 0x8ABE, // + 0x6C5A, 0x8998, // + 0x6C5D, 0x93F0, // + 0x6C5E, 0x9F87, // + 0x6C5F, 0x8D5D, // + 0x6C60, 0x9272, // + 0x6C62, 0x9F89, // + 0x6C68, 0x9F91, // + 0x6C6A, 0x9F8A, // + 0x6C70, 0x91BF, // + 0x6C72, 0x8B82, // + 0x6C73, 0x9F92, // + 0x6C7A, 0x8C88, // + 0x6C7D, 0x8B44, // + 0x6C7E, 0x9F90, // + 0x6C81, 0x9F8E, // + 0x6C82, 0x9F8B, // + 0x6C83, 0x9780, // + 0x6C88, 0x92BE, // + 0x6C8C, 0x93D7, // + 0x6C8D, 0x9F8C, // + 0x6C90, 0x9F94, // + 0x6C92, 0x9F93, // + 0x6C93, 0x8C42, // + 0x6C96, 0x89AB, // + 0x6C99, 0x8DB9, // + 0x6C9A, 0x9F8D, // + 0x6C9B, 0x9F8F, // + 0x6CA1, 0x9676, // + 0x6CA2, 0x91F2, // + 0x6CAB, 0x9697, // + 0x6CAE, 0x9F9C, // + 0x6CB1, 0x9F9D, // + 0x6CB3, 0x89CD, // + 0x6CB8, 0x95A6, // + 0x6CB9, 0x96FB, // + 0x6CBA, 0x9F9F, // + 0x6CBB, 0x8EA1, // + 0x6CBC, 0x8FC0, // + 0x6CBD, 0x9F98, // + 0x6CBE, 0x9F9E, // + 0x6CBF, 0x8988, // + 0x6CC1, 0x8BB5, // + 0x6CC4, 0x9F95, // + 0x6CC5, 0x9F9A, // + 0x6CC9, 0x90F2, // + 0x6CCA, 0x9491, // + 0x6CCC, 0x94E5, // + 0x6CD3, 0x9F97, // + 0x6CD5, 0x9640, // + 0x6CD7, 0x9F99, // + 0x6CD9, 0x9FA2, // + 0x6CDB, 0x9FA0, // + 0x6CDD, 0x9F9B, // + 0x6CE1, 0x9641, // + 0x6CE2, 0x9467, // + 0x6CE3, 0x8B83, // + 0x6CE5, 0x9344, // + 0x6CE8, 0x928D, // + 0x6CEA, 0x9FA3, // + 0x6CEF, 0x9FA1, // + 0x6CF0, 0x91D7, // + 0x6CF1, 0x9F96, // + 0x6CF3, 0x896A, // + 0x6D0B, 0x976D, // + 0x6D0C, 0x9FAE, // + 0x6D12, 0x9FAD, // + 0x6D17, 0x90F4, // + 0x6D19, 0x9FAA, // + 0x6D1B, 0x978C, // + 0x6D1E, 0x93B4, // + 0x6D1F, 0x9FA4, // + 0x6D25, 0x92C3, // + 0x6D29, 0x896B, // + 0x6D2A, 0x8D5E, // + 0x6D2B, 0x9FA7, // + 0x6D32, 0x8F46, // + 0x6D33, 0x9FAC, // + 0x6D35, 0x9FAB, // + 0x6D36, 0x9FA6, // + 0x6D38, 0x9FA9, // + 0x6D3B, 0x8A88, // + 0x6D3D, 0x9FA8, // + 0x6D3E, 0x9468, // + 0x6D41, 0x97AC, // + 0x6D44, 0x8FF2, // + 0x6D45, 0x90F3, // + 0x6D59, 0x9FB4, // + 0x6D5A, 0x9FB2, // + 0x6D5C, 0x956C, // + 0x6D63, 0x9FAF, // + 0x6D64, 0x9FB1, // + 0x6D66, 0x8959, // + 0x6D69, 0x8D5F, // + 0x6D6A, 0x9851, // + 0x6D6C, 0x8A5C, // + 0x6D6E, 0x9582, // + 0x6D74, 0x9781, // + 0x6D77, 0x8A43, // + 0x6D78, 0x905A, // + 0x6D79, 0x9FB3, // + 0x6D85, 0x9FB8, // + 0x6D88, 0x8FC1, // + 0x6D8C, 0x974F, // + 0x6D8E, 0x9FB5, // + 0x6D93, 0x9FB0, // + 0x6D95, 0x9FB6, // + 0x6D99, 0x97DC, // + 0x6D9B, 0x9393, // + 0x6D9C, 0x93C0, // + 0x6DAF, 0x8A55, // + 0x6DB2, 0x8974, // + 0x6DB5, 0x9FBC, // + 0x6DB8, 0x9FBF, // + 0x6DBC, 0x97C1, // + 0x6DC0, 0x9784, // + 0x6DC5, 0x9FC6, // + 0x6DC6, 0x9FC0, // + 0x6DC7, 0x9FBD, // + 0x6DCB, 0x97D2, // + 0x6DCC, 0x9FC3, // + 0x6DD1, 0x8F69, // + 0x6DD2, 0x9FC5, // + 0x6DD5, 0x9FCA, // + 0x6DD8, 0x9391, // + 0x6DD9, 0x9FC8, // + 0x6DDE, 0x9FC2, // + 0x6DE1, 0x9257, // + 0x6DE4, 0x9FC9, // + 0x6DE6, 0x9FBE, // + 0x6DE8, 0x9FC4, // + 0x6DEA, 0x9FCB, // + 0x6DEB, 0x88FA, // + 0x6DEC, 0x9FC1, // + 0x6DEE, 0x9FCC, // + 0x6DF3, 0x8F7E, // + 0x6DF5, 0x95A3, // + 0x6DF7, 0x8DAC, // + 0x6DF9, 0x9FB9, // + 0x6DFA, 0x9FC7, // + 0x6DFB, 0x9359, // + 0x6E05, 0x90B4, // + 0x6E07, 0x8A89, // + 0x6E08, 0x8DCF, // + 0x6E09, 0x8FC2, // + 0x6E0A, 0x9FBB, // + 0x6E0B, 0x8F61, // + 0x6E13, 0x8C6B, // + 0x6E15, 0x9FBA, // + 0x6E19, 0x9FD0, // + 0x6E1A, 0x8F8D, // + 0x6E1B, 0x8CB8, // + 0x6E1D, 0x9FDF, // + 0x6E1F, 0x9FD9, // + 0x6E20, 0x8B94, // + 0x6E21, 0x936E, // + 0x6E23, 0x9FD4, // + 0x6E24, 0x9FDD, // + 0x6E25, 0x88AD, // + 0x6E26, 0x8951, // + 0x6E29, 0x89B7, // + 0x6E2B, 0x9FD6, // + 0x6E2C, 0x91AA, // + 0x6E2D, 0x9FCD, // + 0x6E2E, 0x9FCF, // + 0x6E2F, 0x8D60, // + 0x6E38, 0x9FE0, // + 0x6E3A, 0x9FDB, // + 0x6E3E, 0x9FD3, // + 0x6E43, 0x9FDA, // + 0x6E4A, 0x96A9, // + 0x6E4D, 0x9FD8, // + 0x6E4E, 0x9FDC, // + 0x6E56, 0x8CCE, // + 0x6E58, 0x8FC3, // + 0x6E5B, 0x9258, // + 0x6E5F, 0x9FD2, // + 0x6E67, 0x974E, // + 0x6E6B, 0x9FD5, // + 0x6E6E, 0x9FCE, // + 0x6E6F, 0x9392, // + 0x6E72, 0x9FD1, // + 0x6E76, 0x9FD7, // + 0x6E7E, 0x9870, // + 0x6E7F, 0x8EBC, // + 0x6E80, 0x969E, // + 0x6E82, 0x9FE1, // + 0x6E8C, 0x94AC, // + 0x6E8F, 0x9FED, // + 0x6E90, 0x8CB9, // + 0x6E96, 0x8F80, // + 0x6E98, 0x9FE3, // + 0x6E9C, 0x97AD, // + 0x6E9D, 0x8D61, // + 0x6E9F, 0x9FF0, // + 0x6EA2, 0x88EC, // + 0x6EA5, 0x9FEE, // + 0x6EAA, 0x9FE2, // + 0x6EAF, 0x9FE8, // + 0x6EB2, 0x9FEA, // + 0x6EB6, 0x976E, // + 0x6EB7, 0x9FE5, // + 0x6EBA, 0x934D, // + 0x6EBD, 0x9FE7, // + 0x6EC2, 0x9FEF, // + 0x6EC4, 0x9FE9, // + 0x6EC5, 0x96C5, // + 0x6EC9, 0x9FE4, // + 0x6ECB, 0x8EA0, // + 0x6ECC, 0x9FFC, // + 0x6ED1, 0x8A8A, // + 0x6ED3, 0x9FE6, // + 0x6ED4, 0x9FEB, // + 0x6ED5, 0x9FEC, // + 0x6EDD, 0x91EA, // + 0x6EDE, 0x91D8, // + 0x6EEC, 0x9FF4, // + 0x6EEF, 0x9FFA, // + 0x6EF2, 0x9FF8, // + 0x6EF4, 0x9348, // + 0x6EF7, 0xE042, // + 0x6EF8, 0x9FF5, // + 0x6EFE, 0x9FF6, // + 0x6EFF, 0x9FDE, // + 0x6F01, 0x8B99, // + 0x6F02, 0x9559, // + 0x6F06, 0x8EBD, // + 0x6F09, 0x8D97, // + 0x6F0F, 0x9852, // + 0x6F11, 0x9FF2, // + 0x6F13, 0xE041, // + 0x6F14, 0x8989, // + 0x6F15, 0x9186, // + 0x6F20, 0x9499, // + 0x6F22, 0x8ABF, // + 0x6F23, 0x97F8, // + 0x6F2B, 0x969F, // + 0x6F2C, 0x92D0, // + 0x6F31, 0x9FF9, // + 0x6F32, 0x9FFB, // + 0x6F38, 0x9151, // + 0x6F3E, 0xE040, // + 0x6F3F, 0x9FF7, // + 0x6F41, 0x9FF1, // + 0x6F45, 0x8AC1, // + 0x6F54, 0x8C89, // + 0x6F58, 0xE04E, // + 0x6F5B, 0xE049, // + 0x6F5C, 0x90F6, // + 0x6F5F, 0x8A83, // + 0x6F64, 0x8F81, // + 0x6F66, 0xE052, // + 0x6F6D, 0xE04B, // + 0x6F6E, 0x92AA, // + 0x6F6F, 0xE048, // + 0x6F70, 0x92D7, // + 0x6F74, 0xE06B, // + 0x6F78, 0xE045, // + 0x6F7A, 0xE044, // + 0x6F7C, 0xE04D, // + 0x6F80, 0xE047, // + 0x6F81, 0xE046, // + 0x6F82, 0xE04C, // + 0x6F84, 0x909F, // + 0x6F86, 0xE043, // + 0x6F8E, 0xE04F, // + 0x6F91, 0xE050, // + 0x6F97, 0x8AC0, // + 0x6FA1, 0xE055, // + 0x6FA3, 0xE054, // + 0x6FA4, 0xE056, // + 0x6FAA, 0xE059, // + 0x6FB1, 0x9362, // + 0x6FB3, 0xE053, // + 0x6FB9, 0xE057, // + 0x6FC0, 0x8C83, // + 0x6FC1, 0x91F7, // + 0x6FC2, 0xE051, // + 0x6FC3, 0x945A, // + 0x6FC6, 0xE058, // + 0x6FD4, 0xE05D, // + 0x6FD8, 0xE05E, // + 0x6FDB, 0xE061, // + 0x6FDF, 0xE05A, // + 0x6FE0, 0x8D8A, // + 0x6FE1, 0x9447, // + 0x6FE4, 0x9FB7, // + 0x6FEB, 0x9794, // + 0x6FEC, 0xE05C, // + 0x6FEE, 0xE060, // + 0x6FEF, 0x91F3, // + 0x6FF1, 0xE05F, // + 0x6FF3, 0xE04A, // + 0x6FF6, 0xE889, // + 0x6FFA, 0xE064, // + 0x6FFE, 0xE068, // + 0x7001, 0xE066, // + 0x7009, 0xE062, // + 0x700B, 0xE063, // + 0x700F, 0xE067, // + 0x7011, 0xE065, // + 0x7015, 0x956D, // + 0x7018, 0xE06D, // + 0x701A, 0xE06A, // + 0x701B, 0xE069, // + 0x701D, 0xE06C, // + 0x701E, 0x93D2, // + 0x701F, 0xE06E, // + 0x7026, 0x9295, // + 0x7027, 0x91EB, // + 0x702C, 0x90A3, // + 0x7030, 0xE06F, // + 0x7032, 0xE071, // + 0x703E, 0xE070, // + 0x704C, 0x9FF3, // + 0x7051, 0xE072, // + 0x7058, 0x93E5, // + 0x7063, 0xE073, // + 0x706B, 0x89CE, // + 0x706F, 0x9394, // + 0x7070, 0x8A44, // + 0x7078, 0x8B84, // + 0x707C, 0x8EDC, // + 0x707D, 0x8DD0, // + 0x7089, 0x9846, // + 0x708A, 0x9086, // + 0x708E, 0x898A, // + 0x7092, 0xE075, // + 0x7099, 0xE074, // + 0x70AC, 0xE078, // + 0x70AD, 0x9259, // + 0x70AE, 0xE07B, // + 0x70AF, 0xE076, // + 0x70B3, 0xE07A, // + 0x70B8, 0xE079, // + 0x70B9, 0x935F, // + 0x70BA, 0x88D7, // + 0x70C8, 0x97F3, // + 0x70CB, 0xE07D, // + 0x70CF, 0x8947, // + 0x70D9, 0xE080, // + 0x70DD, 0xE07E, // + 0x70DF, 0xE07C, // + 0x70F1, 0xE077, // + 0x70F9, 0x9642, // + 0x70FD, 0xE082, // + 0x7109, 0xE081, // + 0x7114, 0x898B, // + 0x7119, 0xE084, // + 0x711A, 0x95B0, // + 0x711C, 0xE083, // + 0x7121, 0x96B3, // + 0x7126, 0x8FC5, // + 0x7136, 0x9152, // + 0x713C, 0x8FC4, // + 0x7149, 0x97F9, // + 0x714C, 0xE08A, // + 0x714E, 0x90F7, // + 0x7155, 0xE086, // + 0x7156, 0xE08B, // + 0x7159, 0x898C, // + 0x7162, 0xE089, // + 0x7164, 0x9481, // + 0x7165, 0xE085, // + 0x7166, 0xE088, // + 0x7167, 0x8FC6, // + 0x7169, 0x94CF, // + 0x716C, 0xE08C, // + 0x716E, 0x8ECF, // + 0x717D, 0x90F8, // + 0x7184, 0xE08F, // + 0x7188, 0xE087, // + 0x718A, 0x8C46, // + 0x718F, 0xE08D, // + 0x7194, 0x976F, // + 0x7195, 0xE090, // + 0x7199, 0xEAA4, // + 0x719F, 0x8F6E, // + 0x71A8, 0xE091, // + 0x71AC, 0xE092, // + 0x71B1, 0x944D, // + 0x71B9, 0xE094, // + 0x71BE, 0xE095, // + 0x71C3, 0x9452, // + 0x71C8, 0x9395, // + 0x71C9, 0xE097, // + 0x71CE, 0xE099, // + 0x71D0, 0x97D3, // + 0x71D2, 0xE096, // + 0x71D4, 0xE098, // + 0x71D5, 0x898D, // + 0x71D7, 0xE093, // + 0x71DF, 0x9A7A, // + 0x71E0, 0xE09A, // + 0x71E5, 0x9187, // + 0x71E6, 0x8E57, // + 0x71E7, 0xE09C, // + 0x71EC, 0xE09B, // + 0x71ED, 0x9043, // + 0x71EE, 0x99D7, // + 0x71F5, 0xE09D, // + 0x71F9, 0xE09F, // + 0x71FB, 0xE08E, // + 0x71FC, 0xE09E, // + 0x71FF, 0xE0A0, // + 0x7206, 0x949A, // + 0x720D, 0xE0A1, // + 0x7210, 0xE0A2, // + 0x721B, 0xE0A3, // + 0x7228, 0xE0A4, // + 0x722A, 0x92DC, // + 0x722C, 0xE0A6, // + 0x722D, 0xE0A5, // + 0x7230, 0xE0A7, // + 0x7232, 0xE0A8, // + 0x7235, 0x8EDD, // + 0x7236, 0x9583, // + 0x723A, 0x96EA, // + 0x723B, 0xE0A9, // + 0x723C, 0xE0AA, // + 0x723D, 0x9175, // + 0x723E, 0x8EA2, // + 0x723F, 0xE0AB, // + 0x7240, 0xE0AC, // + 0x7246, 0xE0AD, // + 0x7247, 0x95D0, // + 0x7248, 0x94C5, // + 0x724B, 0xE0AE, // + 0x724C, 0x9476, // + 0x7252, 0x92AB, // + 0x7258, 0xE0AF, // + 0x7259, 0x89E5, // + 0x725B, 0x8B8D, // + 0x725D, 0x96C4, // + 0x725F, 0x96B4, // + 0x7261, 0x89B2, // + 0x7262, 0x9853, // + 0x7267, 0x9671, // + 0x7269, 0x95A8, // + 0x7272, 0x90B5, // + 0x7274, 0xE0B0, // + 0x7279, 0x93C1, // + 0x727D, 0x8CA1, // + 0x727E, 0xE0B1, // + 0x7280, 0x8DD2, // + 0x7281, 0xE0B3, // + 0x7282, 0xE0B2, // + 0x7287, 0xE0B4, // + 0x7292, 0xE0B5, // + 0x7296, 0xE0B6, // + 0x72A0, 0x8B5D, // + 0x72A2, 0xE0B7, // + 0x72A7, 0xE0B8, // + 0x72AC, 0x8CA2, // + 0x72AF, 0x94C6, // + 0x72B2, 0xE0BA, // + 0x72B6, 0x8FF3, // + 0x72B9, 0xE0B9, // + 0x72C2, 0x8BB6, // + 0x72C3, 0xE0BB, // + 0x72C4, 0xE0BD, // + 0x72C6, 0xE0BC, // + 0x72CE, 0xE0BE, // + 0x72D0, 0x8CCF, // + 0x72D2, 0xE0BF, // + 0x72D7, 0x8BE7, // + 0x72D9, 0x915F, // + 0x72DB, 0x8D9D, // + 0x72E0, 0xE0C1, // + 0x72E1, 0xE0C2, // + 0x72E2, 0xE0C0, // + 0x72E9, 0x8EEB, // + 0x72EC, 0x93C6, // + 0x72ED, 0x8BB7, // + 0x72F7, 0xE0C4, // + 0x72F8, 0x924B, // + 0x72F9, 0xE0C3, // + 0x72FC, 0x9854, // + 0x72FD, 0x9482, // + 0x730A, 0xE0C7, // + 0x7316, 0xE0C9, // + 0x7317, 0xE0C6, // + 0x731B, 0x96D2, // + 0x731C, 0xE0C8, // + 0x731D, 0xE0CA, // + 0x731F, 0x97C2, // + 0x7325, 0xE0CE, // + 0x7329, 0xE0CD, // + 0x732A, 0x9296, // + 0x732B, 0x944C, // + 0x732E, 0x8CA3, // + 0x732F, 0xE0CC, // + 0x7334, 0xE0CB, // + 0x7336, 0x9750, // + 0x7337, 0x9751, // + 0x733E, 0xE0CF, // + 0x733F, 0x898E, // + 0x7344, 0x8D96, // + 0x7345, 0x8E82, // + 0x734E, 0xE0D0, // + 0x734F, 0xE0D1, // + 0x7357, 0xE0D3, // + 0x7363, 0x8F62, // + 0x7368, 0xE0D5, // + 0x736A, 0xE0D4, // + 0x7370, 0xE0D6, // + 0x7372, 0x8A6C, // + 0x7375, 0xE0D8, // + 0x7378, 0xE0D7, // + 0x737A, 0xE0DA, // + 0x737B, 0xE0D9, // + 0x7384, 0x8CBA, // + 0x7387, 0x97A6, // + 0x7389, 0x8BCA, // + 0x738B, 0x89A4, // + 0x7396, 0x8BE8, // + 0x73A9, 0x8ADF, // + 0x73B2, 0x97E6, // + 0x73B3, 0xE0DC, // + 0x73BB, 0xE0DE, // + 0x73C0, 0xE0DF, // + 0x73C2, 0x89CF, // + 0x73C8, 0xE0DB, // + 0x73CA, 0x8E58, // + 0x73CD, 0x92BF, // + 0x73CE, 0xE0DD, // + 0x73DE, 0xE0E2, // + 0x73E0, 0x8EEC, // + 0x73E5, 0xE0E0, // + 0x73EA, 0x8C5D, // + 0x73ED, 0x94C7, // + 0x73EE, 0xE0E1, // + 0x73F1, 0xE0FC, // + 0x73F8, 0xE0E7, // + 0x73FE, 0x8CBB, // + 0x7403, 0x8B85, // + 0x7405, 0xE0E4, // + 0x7406, 0x979D, // + 0x7409, 0x97AE, // + 0x7422, 0x91F4, // + 0x7425, 0xE0E6, // + 0x7432, 0xE0E8, // + 0x7433, 0x97D4, // + 0x7434, 0x8BD5, // + 0x7435, 0x94FA, // + 0x7436, 0x9469, // + 0x743A, 0xE0E9, // + 0x743F, 0xE0EB, // + 0x7441, 0xE0EE, // + 0x7455, 0xE0EA, // + 0x7459, 0xE0ED, // + 0x745A, 0x8CE8, // + 0x745B, 0x896C, // + 0x745C, 0xE0EF, // + 0x745E, 0x9090, // + 0x745F, 0xE0EC, // + 0x7460, 0x97DA, // + 0x7463, 0xE0F2, // + 0x7464, 0xEAA2, // + 0x7469, 0xE0F0, // + 0x746A, 0xE0F3, // + 0x746F, 0xE0E5, // + 0x7470, 0xE0F1, // + 0x7473, 0x8DBA, // + 0x7476, 0xE0F4, // + 0x747E, 0xE0F5, // + 0x7483, 0x979E, // + 0x748B, 0xE0F6, // + 0x749E, 0xE0F7, // + 0x74A2, 0xE0E3, // + 0x74A7, 0xE0F8, // + 0x74B0, 0x8AC2, // + 0x74BD, 0x8EA3, // + 0x74CA, 0xE0F9, // + 0x74CF, 0xE0FA, // + 0x74D4, 0xE0FB, // + 0x74DC, 0x895A, // + 0x74E0, 0xE140, // + 0x74E2, 0x955A, // + 0x74E3, 0xE141, // + 0x74E6, 0x8AA2, // + 0x74E7, 0xE142, // + 0x74E9, 0xE143, // + 0x74EE, 0xE144, // + 0x74F0, 0xE146, // + 0x74F1, 0xE147, // + 0x74F2, 0xE145, // + 0x74F6, 0x9572, // + 0x74F7, 0xE149, // + 0x74F8, 0xE148, // + 0x7503, 0xE14B, // + 0x7504, 0xE14A, // + 0x7505, 0xE14C, // + 0x750C, 0xE14D, // + 0x750D, 0xE14F, // + 0x750E, 0xE14E, // + 0x7511, 0x8D99, // + 0x7513, 0xE151, // + 0x7515, 0xE150, // + 0x7518, 0x8AC3, // + 0x751A, 0x9072, // + 0x751E, 0xE152, // + 0x751F, 0x90B6, // + 0x7523, 0x8E59, // + 0x7525, 0x8999, // + 0x7526, 0xE153, // + 0x7528, 0x9770, // + 0x752B, 0x95E1, // + 0x752C, 0xE154, // + 0x7530, 0x9363, // + 0x7531, 0x9752, // + 0x7532, 0x8D62, // + 0x7533, 0x905C, // + 0x7537, 0x926A, // + 0x7538, 0x99B2, // + 0x753A, 0x92AC, // + 0x753B, 0x89E6, // + 0x753C, 0xE155, // + 0x7544, 0xE156, // + 0x7549, 0xE159, // + 0x754A, 0xE158, // + 0x754B, 0x9DC0, // + 0x754C, 0x8A45, // + 0x754D, 0xE157, // + 0x754F, 0x88D8, // + 0x7551, 0x94A8, // + 0x7554, 0x94C8, // + 0x7559, 0x97AF, // + 0x755A, 0xE15C, // + 0x755B, 0xE15A, // + 0x755C, 0x927B, // + 0x755D, 0x90A4, // + 0x7560, 0x94A9, // + 0x7562, 0x954C, // + 0x7564, 0xE15E, // + 0x7565, 0x97AA, // + 0x7566, 0x8C6C, // + 0x7567, 0xE15F, // + 0x7569, 0xE15D, // + 0x756A, 0x94D4, // + 0x756B, 0xE160, // + 0x756D, 0xE161, // + 0x7570, 0x88D9, // + 0x7573, 0x8FF4, // + 0x7574, 0xE166, // + 0x7576, 0xE163, // + 0x7577, 0x93EB, // + 0x7578, 0xE162, // + 0x757F, 0x8B45, // + 0x7582, 0xE169, // + 0x7586, 0xE164, // + 0x7587, 0xE165, // + 0x7589, 0xE168, // + 0x758A, 0xE167, // + 0x758B, 0x9544, // + 0x758E, 0x9161, // + 0x758F, 0x9160, // + 0x7591, 0x8B5E, // + 0x7594, 0xE16A, // + 0x759A, 0xE16B, // + 0x759D, 0xE16C, // + 0x75A3, 0xE16E, // + 0x75A5, 0xE16D, // + 0x75AB, 0x8975, // + 0x75B1, 0xE176, // + 0x75B2, 0x94E6, // + 0x75B3, 0xE170, // + 0x75B5, 0xE172, // + 0x75B8, 0xE174, // + 0x75B9, 0x905D, // + 0x75BC, 0xE175, // + 0x75BD, 0xE173, // + 0x75BE, 0x8EBE, // + 0x75C2, 0xE16F, // + 0x75C3, 0xE171, // + 0x75C5, 0x9561, // + 0x75C7, 0x8FC7, // + 0x75CA, 0xE178, // + 0x75CD, 0xE177, // + 0x75D2, 0xE179, // + 0x75D4, 0x8EA4, // + 0x75D5, 0x8DAD, // + 0x75D8, 0x9397, // + 0x75D9, 0xE17A, // + 0x75DB, 0x92C9, // + 0x75DE, 0xE17C, // + 0x75E2, 0x979F, // + 0x75E3, 0xE17B, // + 0x75E9, 0x9189, // + 0x75F0, 0xE182, // + 0x75F2, 0xE184, // + 0x75F3, 0xE185, // + 0x75F4, 0x9273, // + 0x75FA, 0xE183, // + 0x75FC, 0xE180, // + 0x75FE, 0xE17D, // + 0x75FF, 0xE17E, // + 0x7601, 0xE181, // + 0x7609, 0xE188, // + 0x760B, 0xE186, // + 0x760D, 0xE187, // + 0x761F, 0xE189, // + 0x7620, 0xE18B, // + 0x7621, 0xE18C, // + 0x7622, 0xE18D, // + 0x7624, 0xE18E, // + 0x7627, 0xE18A, // + 0x7630, 0xE190, // + 0x7634, 0xE18F, // + 0x763B, 0xE191, // + 0x7642, 0x97C3, // + 0x7646, 0xE194, // + 0x7647, 0xE192, // + 0x7648, 0xE193, // + 0x764C, 0x8AE0, // + 0x7652, 0x96FC, // + 0x7656, 0x95C8, // + 0x7658, 0xE196, // + 0x765C, 0xE195, // + 0x7661, 0xE197, // + 0x7662, 0xE198, // + 0x7667, 0xE19C, // + 0x7668, 0xE199, // + 0x7669, 0xE19A, // + 0x766A, 0xE19B, // + 0x766C, 0xE19D, // + 0x7670, 0xE19E, // + 0x7672, 0xE19F, // + 0x7676, 0xE1A0, // + 0x7678, 0xE1A1, // + 0x767A, 0x94AD, // + 0x767B, 0x936F, // + 0x767C, 0xE1A2, // + 0x767D, 0x9492, // + 0x767E, 0x9553, // + 0x7680, 0xE1A3, // + 0x7683, 0xE1A4, // + 0x7684, 0x9349, // + 0x7686, 0x8A46, // + 0x7687, 0x8D63, // + 0x7688, 0xE1A5, // + 0x768B, 0xE1A6, // + 0x768E, 0xE1A7, // + 0x7690, 0x8E48, // + 0x7693, 0xE1A9, // + 0x7696, 0xE1A8, // + 0x7699, 0xE1AA, // + 0x769A, 0xE1AB, // + 0x76AE, 0x94E7, // + 0x76B0, 0xE1AC, // + 0x76B4, 0xE1AD, // + 0x76B7, 0xEA89, // + 0x76B8, 0xE1AE, // + 0x76B9, 0xE1AF, // + 0x76BA, 0xE1B0, // + 0x76BF, 0x8E4D, // + 0x76C2, 0xE1B1, // + 0x76C3, 0x9475, // + 0x76C6, 0x967E, // + 0x76C8, 0x896D, // + 0x76CA, 0x8976, // + 0x76CD, 0xE1B2, // + 0x76D2, 0xE1B4, // + 0x76D6, 0xE1B3, // + 0x76D7, 0x9390, // + 0x76DB, 0x90B7, // + 0x76DC, 0x9F58, // + 0x76DE, 0xE1B5, // + 0x76DF, 0x96BF, // + 0x76E1, 0xE1B6, // + 0x76E3, 0x8AC4, // + 0x76E4, 0x94D5, // + 0x76E5, 0xE1B7, // + 0x76E7, 0xE1B8, // + 0x76EA, 0xE1B9, // + 0x76EE, 0x96DA, // + 0x76F2, 0x96D3, // + 0x76F4, 0x92BC, // + 0x76F8, 0x918A, // + 0x76FB, 0xE1BB, // + 0x76FE, 0x8F82, // + 0x7701, 0x8FC8, // + 0x7704, 0xE1BE, // + 0x7707, 0xE1BD, // + 0x7708, 0xE1BC, // + 0x7709, 0x94FB, // + 0x770B, 0x8AC5, // + 0x770C, 0x8CA7, // + 0x771B, 0xE1C4, // + 0x771E, 0xE1C1, // + 0x771F, 0x905E, // + 0x7720, 0x96B0, // + 0x7724, 0xE1C0, // + 0x7725, 0xE1C2, // + 0x7726, 0xE1C3, // + 0x7729, 0xE1BF, // + 0x7737, 0xE1C5, // + 0x7738, 0xE1C6, // + 0x773A, 0x92AD, // + 0x773C, 0x8AE1, // + 0x7740, 0x9285, // + 0x7747, 0xE1C7, // + 0x775A, 0xE1C8, // + 0x775B, 0xE1CB, // + 0x7761, 0x9087, // + 0x7763, 0x93C2, // + 0x7765, 0xE1CC, // + 0x7766, 0x9672, // + 0x7768, 0xE1C9, // + 0x776B, 0xE1CA, // + 0x7779, 0xE1CF, // + 0x777E, 0xE1CE, // + 0x777F, 0xE1CD, // + 0x778B, 0xE1D1, // + 0x778E, 0xE1D0, // + 0x7791, 0xE1D2, // + 0x779E, 0xE1D4, // + 0x77A0, 0xE1D3, // + 0x77A5, 0x95CB, // + 0x77AC, 0x8F75, // + 0x77AD, 0x97C4, // + 0x77B0, 0xE1D5, // + 0x77B3, 0x93B5, // + 0x77B6, 0xE1D6, // + 0x77B9, 0xE1D7, // + 0x77BB, 0xE1DB, // + 0x77BC, 0xE1D9, // + 0x77BD, 0xE1DA, // + 0x77BF, 0xE1D8, // + 0x77C7, 0xE1DC, // + 0x77CD, 0xE1DD, // + 0x77D7, 0xE1DE, // + 0x77DA, 0xE1DF, // + 0x77DB, 0x96B5, // + 0x77DC, 0xE1E0, // + 0x77E2, 0x96EE, // + 0x77E3, 0xE1E1, // + 0x77E5, 0x926D, // + 0x77E7, 0x948A, // + 0x77E9, 0x8BE9, // + 0x77ED, 0x925A, // + 0x77EE, 0xE1E2, // + 0x77EF, 0x8BB8, // + 0x77F3, 0x90CE, // + 0x77FC, 0xE1E3, // + 0x7802, 0x8DBB, // + 0x780C, 0xE1E4, // + 0x7812, 0xE1E5, // + 0x7814, 0x8CA4, // + 0x7815, 0x8DD3, // + 0x7820, 0xE1E7, // + 0x7825, 0x9375, // + 0x7826, 0x8DD4, // + 0x7827, 0x8B6D, // + 0x7832, 0x9643, // + 0x7834, 0x946A, // + 0x783A, 0x9376, // + 0x783F, 0x8D7B, // + 0x7845, 0xE1E9, // + 0x785D, 0x8FC9, // + 0x786B, 0x97B0, // + 0x786C, 0x8D64, // + 0x786F, 0x8CA5, // + 0x7872, 0x94A1, // + 0x7874, 0xE1EB, // + 0x787C, 0xE1ED, // + 0x7881, 0x8CE9, // + 0x7886, 0xE1EC, // + 0x7887, 0x92F4, // + 0x788C, 0xE1EF, // + 0x788D, 0x8A56, // + 0x788E, 0xE1EA, // + 0x7891, 0x94E8, // + 0x7893, 0x894F, // + 0x7895, 0x8DEA, // + 0x7897, 0x9871, // + 0x789A, 0xE1EE, // + 0x78A3, 0xE1F0, // + 0x78A7, 0x95C9, // + 0x78A9, 0x90D7, // + 0x78AA, 0xE1F2, // + 0x78AF, 0xE1F3, // + 0x78B5, 0xE1F1, // + 0x78BA, 0x8A6D, // + 0x78BC, 0xE1F9, // + 0x78BE, 0xE1F8, // + 0x78C1, 0x8EA5, // + 0x78C5, 0xE1FA, // + 0x78C6, 0xE1F5, // + 0x78CA, 0xE1FB, // + 0x78CB, 0xE1F6, // + 0x78D0, 0x94D6, // + 0x78D1, 0xE1F4, // + 0x78D4, 0xE1F7, // + 0x78DA, 0xE241, // + 0x78E7, 0xE240, // + 0x78E8, 0x9681, // + 0x78EC, 0xE1FC, // + 0x78EF, 0x88E9, // + 0x78F4, 0xE243, // + 0x78FD, 0xE242, // + 0x7901, 0x8FCA, // + 0x7907, 0xE244, // + 0x790E, 0x9162, // + 0x7911, 0xE246, // + 0x7912, 0xE245, // + 0x7919, 0xE247, // + 0x7926, 0xE1E6, // + 0x792A, 0xE1E8, // + 0x792B, 0xE249, // + 0x792C, 0xE248, // + 0x793A, 0x8EA6, // + 0x793C, 0x97E7, // + 0x793E, 0x8ED0, // + 0x7940, 0xE24A, // + 0x7941, 0x8C56, // + 0x7947, 0x8B5F, // + 0x7948, 0x8B46, // + 0x7949, 0x8E83, // + 0x7950, 0x9753, // + 0x7953, 0xE250, // + 0x7955, 0xE24F, // + 0x7956, 0x9163, // + 0x7957, 0xE24C, // + 0x795A, 0xE24E, // + 0x795D, 0x8F6A, // + 0x795E, 0x905F, // + 0x795F, 0xE24D, // + 0x7960, 0xE24B, // + 0x7962, 0x9449, // + 0x7965, 0x8FCB, // + 0x796D, 0x8DD5, // + 0x7977, 0x9398, // + 0x797A, 0xE251, // + 0x797F, 0xE252, // + 0x7980, 0xE268, // + 0x7981, 0x8BD6, // + 0x7984, 0x985C, // + 0x7985, 0x9154, // + 0x798A, 0xE253, // + 0x798D, 0x89D0, // + 0x798E, 0x92F5, // + 0x798F, 0x959F, // + 0x799D, 0xE254, // + 0x79A6, 0x8B9A, // + 0x79A7, 0xE255, // + 0x79AA, 0xE257, // + 0x79AE, 0xE258, // + 0x79B0, 0x9448, // + 0x79B3, 0xE259, // + 0x79B9, 0xE25A, // + 0x79BD, 0x8BD7, // + 0x79BE, 0x89D1, // + 0x79BF, 0x93C3, // + 0x79C0, 0x8F47, // + 0x79C1, 0x8E84, // + 0x79C9, 0xE25C, // + 0x79CB, 0x8F48, // + 0x79D1, 0x89C8, // + 0x79D2, 0x9562, // + 0x79D5, 0xE25D, // + 0x79D8, 0x94E9, // + 0x79DF, 0x9164, // + 0x79E1, 0xE260, // + 0x79E3, 0xE261, // + 0x79E4, 0x9489, // + 0x79E6, 0x9060, // + 0x79E7, 0xE25E, // + 0x79E9, 0x9281, // + 0x79EC, 0xE25F, // + 0x79F0, 0x8FCC, // + 0x79FB, 0x88DA, // + 0x7A00, 0x8B48, // + 0x7A08, 0xE262, // + 0x7A0B, 0x92F6, // + 0x7A0D, 0xE263, // + 0x7A0E, 0x90C5, // + 0x7A14, 0x96AB, // + 0x7A17, 0x9542, // + 0x7A18, 0xE264, // + 0x7A19, 0xE265, // + 0x7A1A, 0x9274, // + 0x7A1C, 0x97C5, // + 0x7A1F, 0xE267, // + 0x7A20, 0xE266, // + 0x7A2E, 0x8EED, // + 0x7A31, 0xE269, // + 0x7A32, 0x88EE, // + 0x7A37, 0xE26C, // + 0x7A3B, 0xE26A, // + 0x7A3C, 0x89D2, // + 0x7A3D, 0x8C6D, // + 0x7A3E, 0xE26B, // + 0x7A3F, 0x8D65, // + 0x7A40, 0x8D92, // + 0x7A42, 0x95E4, // + 0x7A43, 0xE26D, // + 0x7A46, 0x9673, // + 0x7A49, 0xE26F, // + 0x7A4D, 0x90CF, // + 0x7A4E, 0x896E, // + 0x7A4F, 0x89B8, // + 0x7A50, 0x88AA, // + 0x7A57, 0xE26E, // + 0x7A61, 0xE270, // + 0x7A62, 0xE271, // + 0x7A63, 0x8FF5, // + 0x7A69, 0xE272, // + 0x7A6B, 0x8A6E, // + 0x7A70, 0xE274, // + 0x7A74, 0x8C8A, // + 0x7A76, 0x8B86, // + 0x7A79, 0xE275, // + 0x7A7A, 0x8BF3, // + 0x7A7D, 0xE276, // + 0x7A7F, 0x90FA, // + 0x7A81, 0x93CB, // + 0x7A83, 0x90DE, // + 0x7A84, 0x8DF3, // + 0x7A88, 0xE277, // + 0x7A92, 0x9282, // + 0x7A93, 0x918B, // + 0x7A95, 0xE279, // + 0x7A96, 0xE27B, // + 0x7A97, 0xE278, // + 0x7A98, 0xE27A, // + 0x7A9F, 0x8C41, // + 0x7AA9, 0xE27C, // + 0x7AAA, 0x8C45, // + 0x7AAE, 0x8B87, // + 0x7AAF, 0x9771, // + 0x7AB0, 0xE27E, // + 0x7AB6, 0xE280, // + 0x7ABA, 0x894D, // + 0x7ABF, 0xE283, // + 0x7AC3, 0x8A96, // + 0x7AC4, 0xE282, // + 0x7AC5, 0xE281, // + 0x7AC7, 0xE285, // + 0x7AC8, 0xE27D, // + 0x7ACA, 0xE286, // + 0x7ACB, 0x97A7, // + 0x7ACD, 0xE287, // + 0x7ACF, 0xE288, // + 0x7AD2, 0x9AF2, // + 0x7AD3, 0xE28A, // + 0x7AD5, 0xE289, // + 0x7AD9, 0xE28B, // + 0x7ADA, 0xE28C, // + 0x7ADC, 0x97B3, // + 0x7ADD, 0xE28D, // + 0x7ADF, 0xE8ED, // + 0x7AE0, 0x8FCD, // + 0x7AE1, 0xE28E, // + 0x7AE2, 0xE28F, // + 0x7AE3, 0x8F76, // + 0x7AE5, 0x93B6, // + 0x7AE6, 0xE290, // + 0x7AEA, 0x9247, // + 0x7AED, 0xE291, // + 0x7AF0, 0xE292, // + 0x7AF6, 0x8BA3, // + 0x7AF8, 0x995E, // + 0x7AF9, 0x927C, // + 0x7AFA, 0x8EB1, // + 0x7AFF, 0x8AC6, // + 0x7B02, 0xE293, // + 0x7B04, 0xE2A0, // + 0x7B06, 0xE296, // + 0x7B08, 0x8B88, // + 0x7B0A, 0xE295, // + 0x7B0B, 0xE2A2, // + 0x7B0F, 0xE294, // + 0x7B11, 0x8FCE, // + 0x7B18, 0xE298, // + 0x7B19, 0xE299, // + 0x7B1B, 0x934A, // + 0x7B1E, 0xE29A, // + 0x7B20, 0x8A7D, // + 0x7B25, 0x9079, // + 0x7B26, 0x9584, // + 0x7B28, 0xE29C, // + 0x7B2C, 0x91E6, // + 0x7B33, 0xE297, // + 0x7B35, 0xE29B, // + 0x7B36, 0xE29D, // + 0x7B39, 0x8DF9, // + 0x7B45, 0xE2A4, // + 0x7B46, 0x954D, // + 0x7B48, 0x94A4, // + 0x7B49, 0x9399, // + 0x7B4B, 0x8BD8, // + 0x7B4C, 0xE2A3, // + 0x7B4D, 0xE2A1, // + 0x7B4F, 0x94B3, // + 0x7B50, 0xE29E, // + 0x7B51, 0x927D, // + 0x7B52, 0x939B, // + 0x7B54, 0x939A, // + 0x7B56, 0x8DF4, // + 0x7B5D, 0xE2B6, // + 0x7B65, 0xE2A6, // + 0x7B67, 0xE2A8, // + 0x7B6C, 0xE2AB, // + 0x7B6E, 0xE2AC, // + 0x7B70, 0xE2A9, // + 0x7B71, 0xE2AA, // + 0x7B74, 0xE2A7, // + 0x7B75, 0xE2A5, // + 0x7B7A, 0xE29F, // + 0x7B86, 0x95CD, // + 0x7B87, 0x89D3, // + 0x7B8B, 0xE2B3, // + 0x7B8D, 0xE2B0, // + 0x7B8F, 0xE2B5, // + 0x7B92, 0xE2B4, // + 0x7B94, 0x9493, // + 0x7B95, 0x96A5, // + 0x7B97, 0x8E5A, // + 0x7B98, 0xE2AE, // + 0x7B99, 0xE2B7, // + 0x7B9A, 0xE2B2, // + 0x7B9C, 0xE2B1, // + 0x7B9D, 0xE2AD, // + 0x7B9F, 0xE2AF, // + 0x7BA1, 0x8AC7, // + 0x7BAA, 0x925C, // + 0x7BAD, 0x90FB, // + 0x7BB1, 0x94A0, // + 0x7BB4, 0xE2BC, // + 0x7BB8, 0x94A2, // + 0x7BC0, 0x90DF, // + 0x7BC1, 0xE2B9, // + 0x7BC4, 0x94CD, // + 0x7BC6, 0xE2BD, // + 0x7BC7, 0x95D1, // + 0x7BC9, 0x927A, // + 0x7BCB, 0xE2B8, // + 0x7BCC, 0xE2BA, // + 0x7BCF, 0xE2BB, // + 0x7BDD, 0xE2BE, // + 0x7BE0, 0x8EC2, // + 0x7BE4, 0x93C4, // + 0x7BE5, 0xE2C3, // + 0x7BE6, 0xE2C2, // + 0x7BE9, 0xE2BF, // + 0x7BED, 0x9855, // + 0x7BF3, 0xE2C8, // + 0x7BF6, 0xE2CC, // + 0x7BF7, 0xE2C9, // + 0x7C00, 0xE2C5, // + 0x7C07, 0xE2C6, // + 0x7C0D, 0xE2CB, // + 0x7C11, 0xE2C0, // + 0x7C12, 0x99D3, // + 0x7C13, 0xE2C7, // + 0x7C14, 0xE2C1, // + 0x7C17, 0xE2CA, // + 0x7C1F, 0xE2D0, // + 0x7C21, 0x8AC8, // + 0x7C23, 0xE2CD, // + 0x7C27, 0xE2CE, // + 0x7C2A, 0xE2CF, // + 0x7C2B, 0xE2D2, // + 0x7C37, 0xE2D1, // + 0x7C38, 0x94F4, // + 0x7C3D, 0xE2D3, // + 0x7C3E, 0x97FA, // + 0x7C3F, 0x95EB, // + 0x7C40, 0xE2D8, // + 0x7C43, 0xE2D5, // + 0x7C4C, 0xE2D4, // + 0x7C4D, 0x90D0, // + 0x7C4F, 0xE2D7, // + 0x7C50, 0xE2D9, // + 0x7C54, 0xE2D6, // + 0x7C56, 0xE2DD, // + 0x7C58, 0xE2DA, // + 0x7C5F, 0xE2DB, // + 0x7C60, 0xE2C4, // + 0x7C64, 0xE2DC, // + 0x7C65, 0xE2DE, // + 0x7C6C, 0xE2DF, // + 0x7C73, 0x95C4, // + 0x7C75, 0xE2E0, // + 0x7C7E, 0x96E0, // + 0x7C81, 0x8BCC, // + 0x7C82, 0x8C48, // + 0x7C83, 0xE2E1, // + 0x7C89, 0x95B2, // + 0x7C8B, 0x9088, // + 0x7C8D, 0x96AE, // + 0x7C90, 0xE2E2, // + 0x7C92, 0x97B1, // + 0x7C95, 0x9494, // + 0x7C97, 0x9165, // + 0x7C98, 0x9453, // + 0x7C9B, 0x8F6C, // + 0x7C9F, 0x88BE, // + 0x7CA1, 0xE2E7, // + 0x7CA2, 0xE2E5, // + 0x7CA4, 0xE2E3, // + 0x7CA5, 0x8A9F, // + 0x7CA7, 0x8FCF, // + 0x7CA8, 0xE2E8, // + 0x7CAB, 0xE2E6, // + 0x7CAD, 0xE2E4, // + 0x7CAE, 0xE2EC, // + 0x7CB1, 0xE2EB, // + 0x7CB2, 0xE2EA, // + 0x7CB3, 0xE2E9, // + 0x7CB9, 0xE2ED, // + 0x7CBD, 0xE2EE, // + 0x7CBE, 0x90B8, // + 0x7CC0, 0xE2EF, // + 0x7CC2, 0xE2F1, // + 0x7CC5, 0xE2F0, // + 0x7CCA, 0x8CD0, // + 0x7CCE, 0x9157, // + 0x7CD2, 0xE2F3, // + 0x7CD6, 0x939C, // + 0x7CD8, 0xE2F2, // + 0x7CDC, 0xE2F4, // + 0x7CDE, 0x95B3, // + 0x7CDF, 0x918C, // + 0x7CE0, 0x8D66, // + 0x7CE2, 0xE2F5, // + 0x7CE7, 0x97C6, // + 0x7CEF, 0xE2F7, // + 0x7CF2, 0xE2F8, // + 0x7CF4, 0xE2F9, // + 0x7CF6, 0xE2FA, // + 0x7CF8, 0x8E85, // + 0x7CFA, 0xE2FB, // + 0x7CFB, 0x8C6E, // + 0x7CFE, 0x8B8A, // + 0x7D00, 0x8B49, // + 0x7D02, 0xE340, // + 0x7D04, 0x96F1, // + 0x7D05, 0x8D67, // + 0x7D06, 0xE2FC, // + 0x7D0A, 0xE343, // + 0x7D0B, 0x96E4, // + 0x7D10, 0x9552, // + 0x7D14, 0x8F83, // + 0x7D15, 0xE342, // + 0x7D17, 0x8ED1, // + 0x7D18, 0x8D68, // + 0x7D19, 0x8E86, // + 0x7D1A, 0x8B89, // + 0x7D1B, 0x95B4, // + 0x7D1C, 0xE341, // + 0x7D20, 0x9166, // + 0x7D21, 0x9661, // + 0x7D22, 0x8DF5, // + 0x7D2B, 0x8E87, // + 0x7D2C, 0x92DB, // + 0x7D2E, 0xE346, // + 0x7D2F, 0x97DD, // + 0x7D30, 0x8DD7, // + 0x7D32, 0xE347, // + 0x7D33, 0x9061, // + 0x7D35, 0xE349, // + 0x7D39, 0x8FD0, // + 0x7D3A, 0x8DAE, // + 0x7D3F, 0xE348, // + 0x7D42, 0x8F49, // + 0x7D43, 0x8CBC, // + 0x7D44, 0x9167, // + 0x7D45, 0xE344, // + 0x7D46, 0xE34A, // + 0x7D4B, 0xE345, // + 0x7D4C, 0x8C6F, // + 0x7D4E, 0xE34D, // + 0x7D4F, 0xE351, // + 0x7D50, 0x8C8B, // + 0x7D56, 0xE34C, // + 0x7D5B, 0xE355, // + 0x7D5E, 0x8D69, // + 0x7D61, 0x978D, // + 0x7D62, 0x88BA, // + 0x7D63, 0xE352, // + 0x7D66, 0x8B8B, // + 0x7D68, 0xE34F, // + 0x7D6E, 0xE350, // + 0x7D71, 0x939D, // + 0x7D72, 0xE34E, // + 0x7D73, 0xE34B, // + 0x7D75, 0x8A47, // + 0x7D76, 0x90E2, // + 0x7D79, 0x8CA6, // + 0x7D7D, 0xE357, // + 0x7D89, 0xE354, // + 0x7D8F, 0xE356, // + 0x7D93, 0xE353, // + 0x7D99, 0x8C70, // + 0x7D9A, 0x91B1, // + 0x7D9B, 0xE358, // + 0x7D9C, 0x918E, // + 0x7D9F, 0xE365, // + 0x7DA2, 0xE361, // + 0x7DAB, 0xE35F, // + 0x7DAC, 0x8EF8, // + 0x7DAD, 0x88DB, // + 0x7DAE, 0xE35A, // + 0x7DAF, 0xE362, // + 0x7DB0, 0xE366, // + 0x7DB1, 0x8D6A, // + 0x7DB2, 0x96D4, // + 0x7DB4, 0x92D4, // + 0x7DB5, 0xE35C, // + 0x7DB8, 0xE364, // + 0x7DBA, 0xE359, // + 0x7DBB, 0x925D, // + 0x7DBD, 0xE35E, // + 0x7DBE, 0x88BB, // + 0x7DBF, 0x96C8, // + 0x7DC7, 0xE35D, // + 0x7DCA, 0x8BD9, // + 0x7DCB, 0x94EA, // + 0x7DCF, 0x918D, // + 0x7DD1, 0x97CE, // + 0x7DD2, 0x8F8F, // + 0x7DD5, 0xE38E, // + 0x7DD8, 0xE367, // + 0x7DDA, 0x90FC, // + 0x7DDC, 0xE363, // + 0x7DDD, 0xE368, // + 0x7DDE, 0xE36A, // + 0x7DE0, 0x92F7, // + 0x7DE1, 0xE36D, // + 0x7DE4, 0xE369, // + 0x7DE8, 0x95D2, // + 0x7DE9, 0x8AC9, // + 0x7DEC, 0x96C9, // + 0x7DEF, 0x88DC, // + 0x7DF2, 0xE36C, // + 0x7DF4, 0x97FB, // + 0x7DFB, 0xE36B, // + 0x7E01, 0x898F, // + 0x7E04, 0x93EA, // + 0x7E05, 0xE36E, // + 0x7E09, 0xE375, // + 0x7E0A, 0xE36F, // + 0x7E0B, 0xE376, // + 0x7E12, 0xE372, // + 0x7E1B, 0x949B, // + 0x7E1E, 0x8EC8, // + 0x7E1F, 0xE374, // + 0x7E21, 0xE371, // + 0x7E22, 0xE377, // + 0x7E23, 0xE370, // + 0x7E26, 0x8F63, // + 0x7E2B, 0x9644, // + 0x7E2E, 0x8F6B, // + 0x7E31, 0xE373, // + 0x7E32, 0xE380, // + 0x7E35, 0xE37B, // + 0x7E37, 0xE37E, // + 0x7E39, 0xE37C, // + 0x7E3A, 0xE381, // + 0x7E3B, 0xE37A, // + 0x7E3D, 0xE360, // + 0x7E3E, 0x90D1, // + 0x7E41, 0x94C9, // + 0x7E43, 0xE37D, // + 0x7E46, 0xE378, // + 0x7E4A, 0x9140, // + 0x7E4B, 0x8C71, // + 0x7E4D, 0x8F4A, // + 0x7E54, 0x9044, // + 0x7E55, 0x9155, // + 0x7E56, 0xE384, // + 0x7E59, 0xE386, // + 0x7E5A, 0xE387, // + 0x7E5D, 0xE383, // + 0x7E5E, 0xE385, // + 0x7E66, 0xE379, // + 0x7E67, 0xE382, // + 0x7E69, 0xE38A, // + 0x7E6A, 0xE389, // + 0x7E6D, 0x969A, // + 0x7E70, 0x8C4A, // + 0x7E79, 0xE388, // + 0x7E7B, 0xE38C, // + 0x7E7C, 0xE38B, // + 0x7E7D, 0xE38F, // + 0x7E7F, 0xE391, // + 0x7E83, 0xE38D, // + 0x7E88, 0xE392, // + 0x7E89, 0xE393, // + 0x7E8C, 0xE394, // + 0x7E8E, 0xE39A, // + 0x7E8F, 0x935A, // + 0x7E90, 0xE396, // + 0x7E92, 0xE395, // + 0x7E93, 0xE397, // + 0x7E94, 0xE398, // + 0x7E96, 0xE399, // + 0x7E9B, 0xE39B, // + 0x7E9C, 0xE39C, // + 0x7F36, 0x8ACA, // + 0x7F38, 0xE39D, // + 0x7F3A, 0xE39E, // + 0x7F45, 0xE39F, // + 0x7F4C, 0xE3A0, // + 0x7F4D, 0xE3A1, // + 0x7F4E, 0xE3A2, // + 0x7F50, 0xE3A3, // + 0x7F51, 0xE3A4, // + 0x7F54, 0xE3A6, // + 0x7F55, 0xE3A5, // + 0x7F58, 0xE3A7, // + 0x7F5F, 0xE3A8, // + 0x7F60, 0xE3A9, // + 0x7F67, 0xE3AC, // + 0x7F68, 0xE3AA, // + 0x7F69, 0xE3AB, // + 0x7F6A, 0x8DDF, // + 0x7F6B, 0x8C72, // + 0x7F6E, 0x9275, // + 0x7F70, 0x94B1, // + 0x7F72, 0x8F90, // + 0x7F75, 0x946C, // + 0x7F77, 0x94EB, // + 0x7F78, 0xE3AD, // + 0x7F79, 0x9CEB, // + 0x7F82, 0xE3AE, // + 0x7F83, 0xE3B0, // + 0x7F85, 0x9785, // + 0x7F86, 0xE3AF, // + 0x7F87, 0xE3B2, // + 0x7F88, 0xE3B1, // + 0x7F8A, 0x9772, // + 0x7F8C, 0xE3B3, // + 0x7F8E, 0x94FC, // + 0x7F94, 0xE3B4, // + 0x7F9A, 0xE3B7, // + 0x7F9D, 0xE3B6, // + 0x7F9E, 0xE3B5, // + 0x7FA3, 0xE3B8, // + 0x7FA4, 0x8C51, // + 0x7FA8, 0x9141, // + 0x7FA9, 0x8B60, // + 0x7FAE, 0xE3BC, // + 0x7FAF, 0xE3B9, // + 0x7FB2, 0xE3BA, // + 0x7FB6, 0xE3BD, // + 0x7FB8, 0xE3BE, // + 0x7FB9, 0xE3BB, // + 0x7FBD, 0x8948, // + 0x7FC1, 0x89A5, // + 0x7FC5, 0xE3C0, // + 0x7FC6, 0xE3C1, // + 0x7FCA, 0xE3C2, // + 0x7FCC, 0x9782, // + 0x7FD2, 0x8F4B, // + 0x7FD4, 0xE3C4, // + 0x7FD5, 0xE3C3, // + 0x7FE0, 0x9089, // + 0x7FE1, 0xE3C5, // + 0x7FE6, 0xE3C6, // + 0x7FE9, 0xE3C7, // + 0x7FEB, 0x8AE3, // + 0x7FF0, 0x8ACB, // + 0x7FF3, 0xE3C8, // + 0x7FF9, 0xE3C9, // + 0x7FFB, 0x967C, // + 0x7FFC, 0x9783, // + 0x8000, 0x9773, // + 0x8001, 0x9856, // + 0x8003, 0x8D6C, // + 0x8004, 0xE3CC, // + 0x8005, 0x8ED2, // + 0x8006, 0xE3CB, // + 0x800B, 0xE3CD, // + 0x800C, 0x8EA7, // + 0x8010, 0x91CF, // + 0x8012, 0xE3CE, // + 0x8015, 0x8D6B, // + 0x8017, 0x96D5, // + 0x8018, 0xE3CF, // + 0x8019, 0xE3D0, // + 0x801C, 0xE3D1, // + 0x8021, 0xE3D2, // + 0x8028, 0xE3D3, // + 0x8033, 0x8EA8, // + 0x8036, 0x96EB, // + 0x803B, 0xE3D5, // + 0x803D, 0x925E, // + 0x803F, 0xE3D4, // + 0x8046, 0xE3D7, // + 0x804A, 0xE3D6, // + 0x8052, 0xE3D8, // + 0x8056, 0x90B9, // + 0x8058, 0xE3D9, // + 0x805A, 0xE3DA, // + 0x805E, 0x95B7, // + 0x805F, 0xE3DB, // + 0x8061, 0x918F, // + 0x8062, 0xE3DC, // + 0x8068, 0xE3DD, // + 0x806F, 0x97FC, // + 0x8070, 0xE3E0, // + 0x8072, 0xE3DF, // + 0x8073, 0xE3DE, // + 0x8074, 0x92AE, // + 0x8076, 0xE3E1, // + 0x8077, 0x9045, // + 0x8079, 0xE3E2, // + 0x807D, 0xE3E3, // + 0x807E, 0x9857, // + 0x807F, 0xE3E4, // + 0x8084, 0xE3E5, // + 0x8085, 0xE3E7, // + 0x8086, 0xE3E6, // + 0x8087, 0x94A3, // + 0x8089, 0x93F7, // + 0x808B, 0x985D, // + 0x808C, 0x94A7, // + 0x8093, 0xE3E9, // + 0x8096, 0x8FD1, // + 0x8098, 0x9549, // + 0x809A, 0xE3EA, // + 0x809B, 0xE3E8, // + 0x809D, 0x8ACC, // + 0x80A1, 0x8CD2, // + 0x80A2, 0x8E88, // + 0x80A5, 0x94EC, // + 0x80A9, 0x8CA8, // + 0x80AA, 0x9662, // + 0x80AC, 0xE3ED, // + 0x80AD, 0xE3EB, // + 0x80AF, 0x8D6D, // + 0x80B1, 0x8D6E, // + 0x80B2, 0x88E7, // + 0x80B4, 0x8DE6, // + 0x80BA, 0x9478, // + 0x80C3, 0x88DD, // + 0x80C4, 0xE3F2, // + 0x80C6, 0x925F, // + 0x80CC, 0x9477, // + 0x80CE, 0x91D9, // + 0x80D6, 0xE3F4, // + 0x80D9, 0xE3F0, // + 0x80DA, 0xE3F3, // + 0x80DB, 0xE3EE, // + 0x80DD, 0xE3F1, // + 0x80DE, 0x9645, // + 0x80E1, 0x8CD3, // + 0x80E4, 0x88FB, // + 0x80E5, 0xE3EF, // + 0x80EF, 0xE3F6, // + 0x80F1, 0xE3F7, // + 0x80F4, 0x93B7, // + 0x80F8, 0x8BB9, // + 0x80FC, 0xE445, // + 0x80FD, 0x945C, // + 0x8102, 0x8E89, // + 0x8105, 0x8BBA, // + 0x8106, 0x90C6, // + 0x8107, 0x9865, // + 0x8108, 0x96AC, // + 0x8109, 0xE3F5, // + 0x810A, 0x90D2, // + 0x811A, 0x8B72, // + 0x811B, 0xE3F8, // + 0x8123, 0xE3FA, // + 0x8129, 0xE3F9, // + 0x812F, 0xE3FB, // + 0x8131, 0x9245, // + 0x8133, 0x945D, // + 0x8139, 0x92AF, // + 0x813E, 0xE442, // + 0x8146, 0xE441, // + 0x814B, 0xE3FC, // + 0x814E, 0x9074, // + 0x8150, 0x9585, // + 0x8151, 0xE444, // + 0x8153, 0xE443, // + 0x8154, 0x8D6F, // + 0x8155, 0x9872, // + 0x815F, 0xE454, // + 0x8165, 0xE448, // + 0x8166, 0xE449, // + 0x816B, 0x8EEE, // + 0x816E, 0xE447, // + 0x8170, 0x8D98, // + 0x8171, 0xE446, // + 0x8174, 0xE44A, // + 0x8178, 0x92B0, // + 0x8179, 0x95A0, // + 0x817A, 0x9142, // + 0x817F, 0x91DA, // + 0x8180, 0xE44E, // + 0x8182, 0xE44F, // + 0x8183, 0xE44B, // + 0x8188, 0xE44C, // + 0x818A, 0xE44D, // + 0x818F, 0x8D70, // + 0x8193, 0xE455, // + 0x8195, 0xE451, // + 0x819A, 0x9586, // + 0x819C, 0x968C, // + 0x819D, 0x9547, // + 0x81A0, 0xE450, // + 0x81A3, 0xE453, // + 0x81A4, 0xE452, // + 0x81A8, 0x9663, // + 0x81A9, 0xE456, // + 0x81B0, 0xE457, // + 0x81B3, 0x9156, // + 0x81B5, 0xE458, // + 0x81B8, 0xE45A, // + 0x81BA, 0xE45E, // + 0x81BE, 0xE459, // + 0x81BF, 0x945E, // + 0x81C0, 0xE45C, // + 0x81C2, 0xE45D, // + 0x81C6, 0x89B0, // + 0x81C8, 0xE464, // + 0x81C9, 0xE45F, // + 0x81CD, 0xE460, // + 0x81D1, 0xE461, // + 0x81D3, 0x919F, // + 0x81D8, 0xE463, // + 0x81D9, 0xE462, // + 0x81DA, 0xE465, // + 0x81DF, 0xE466, // + 0x81E0, 0xE467, // + 0x81E3, 0x9062, // + 0x81E5, 0x89E7, // + 0x81E7, 0xE468, // + 0x81E8, 0x97D5, // + 0x81EA, 0x8EA9, // + 0x81ED, 0x8F4C, // + 0x81F3, 0x8E8A, // + 0x81F4, 0x9276, // + 0x81FA, 0xE469, // + 0x81FB, 0xE46A, // + 0x81FC, 0x8950, // + 0x81FE, 0xE46B, // + 0x8201, 0xE46C, // + 0x8202, 0xE46D, // + 0x8205, 0xE46E, // + 0x8207, 0xE46F, // + 0x8208, 0x8BBB, // + 0x8209, 0x9DA8, // + 0x820A, 0xE470, // + 0x820C, 0x90E3, // + 0x820D, 0xE471, // + 0x820E, 0x8EC9, // + 0x8210, 0xE472, // + 0x8212, 0x98AE, // + 0x8216, 0xE473, // + 0x8217, 0x95DC, // + 0x8218, 0x8ADA, // + 0x821B, 0x9143, // + 0x821C, 0x8F77, // + 0x821E, 0x9591, // + 0x821F, 0x8F4D, // + 0x8229, 0xE474, // + 0x822A, 0x8D71, // + 0x822B, 0xE475, // + 0x822C, 0x94CA, // + 0x822E, 0xE484, // + 0x8233, 0xE477, // + 0x8235, 0x91C7, // + 0x8236, 0x9495, // + 0x8237, 0x8CBD, // + 0x8238, 0xE476, // + 0x8239, 0x9144, // + 0x8240, 0xE478, // + 0x8247, 0x92F8, // + 0x8258, 0xE47A, // + 0x8259, 0xE479, // + 0x825A, 0xE47C, // + 0x825D, 0xE47B, // + 0x825F, 0xE47D, // + 0x8262, 0xE480, // + 0x8264, 0xE47E, // + 0x8266, 0x8ACD, // + 0x8268, 0xE481, // + 0x826A, 0xE482, // + 0x826B, 0xE483, // + 0x826E, 0x8DAF, // + 0x826F, 0x97C7, // + 0x8271, 0xE485, // + 0x8272, 0x9046, // + 0x8276, 0x8990, // + 0x8277, 0xE486, // + 0x8278, 0xE487, // + 0x827E, 0xE488, // + 0x828B, 0x88F0, // + 0x828D, 0xE489, // + 0x8292, 0xE48A, // + 0x8299, 0x9587, // + 0x829D, 0x8EC5, // + 0x829F, 0xE48C, // + 0x82A5, 0x8A48, // + 0x82A6, 0x88B0, // + 0x82AB, 0xE48B, // + 0x82AC, 0xE48E, // + 0x82AD, 0x946D, // + 0x82AF, 0x9063, // + 0x82B1, 0x89D4, // + 0x82B3, 0x9646, // + 0x82B8, 0x8C7C, // + 0x82B9, 0x8BDA, // + 0x82BB, 0xE48D, // + 0x82BD, 0x89E8, // + 0x82C5, 0x8AA1, // + 0x82D1, 0x8991, // + 0x82D2, 0xE492, // + 0x82D3, 0x97E8, // + 0x82D4, 0x91DB, // + 0x82D7, 0x9563, // + 0x82D9, 0xE49E, // + 0x82DB, 0x89D5, // + 0x82DC, 0xE49C, // + 0x82DE, 0xE49A, // + 0x82DF, 0xE491, // + 0x82E1, 0xE48F, // + 0x82E3, 0xE490, // + 0x82E5, 0x8EE1, // + 0x82E6, 0x8BEA, // + 0x82E7, 0x9297, // + 0x82EB, 0x93CF, // + 0x82F1, 0x8970, // + 0x82F3, 0xE494, // + 0x82F4, 0xE493, // + 0x82F9, 0xE499, // + 0x82FA, 0xE495, // + 0x82FB, 0xE498, // + 0x8302, 0x96CE, // + 0x8303, 0xE497, // + 0x8304, 0x89D6, // + 0x8305, 0x8A9D, // + 0x8306, 0xE49B, // + 0x8309, 0xE49D, // + 0x830E, 0x8C73, // + 0x8316, 0xE4A1, // + 0x8317, 0xE4AA, // + 0x8318, 0xE4AB, // + 0x831C, 0x88A9, // + 0x8323, 0xE4B2, // + 0x8328, 0x88EF, // + 0x832B, 0xE4A9, // + 0x832F, 0xE4A8, // + 0x8331, 0xE4A3, // + 0x8332, 0xE4A2, // + 0x8334, 0xE4A0, // + 0x8335, 0xE49F, // + 0x8336, 0x9283, // + 0x8338, 0x91F9, // + 0x8339, 0xE4A5, // + 0x8340, 0xE4A4, // + 0x8345, 0xE4A7, // + 0x8349, 0x9190, // + 0x834A, 0x8C74, // + 0x834F, 0x8960, // + 0x8350, 0xE4A6, // + 0x8352, 0x8D72, // + 0x8358, 0x9191, // + 0x8373, 0xE4B8, // + 0x8375, 0xE4B9, // + 0x8377, 0x89D7, // + 0x837B, 0x89AC, // + 0x837C, 0xE4B6, // + 0x8385, 0xE4AC, // + 0x8387, 0xE4B4, // + 0x8389, 0xE4BB, // + 0x838A, 0xE4B5, // + 0x838E, 0xE4B3, // + 0x8393, 0xE496, // + 0x8396, 0xE4B1, // + 0x839A, 0xE4AD, // + 0x839E, 0x8ACE, // + 0x839F, 0xE4AF, // + 0x83A0, 0xE4BA, // + 0x83A2, 0xE4B0, // + 0x83A8, 0xE4BC, // + 0x83AA, 0xE4AE, // + 0x83AB, 0x949C, // + 0x83B1, 0x9789, // + 0x83B5, 0xE4B7, // + 0x83BD, 0xE4CD, // + 0x83C1, 0xE4C5, // + 0x83C5, 0x909B, // + 0x83CA, 0x8B65, // + 0x83CC, 0x8BDB, // + 0x83CE, 0xE4C0, // + 0x83D3, 0x89D9, // + 0x83D6, 0x8FD2, // + 0x83D8, 0xE4C3, // + 0x83DC, 0x8DD8, // + 0x83DF, 0x9370, // + 0x83E0, 0xE4C8, // + 0x83E9, 0x95EC, // + 0x83EB, 0xE4BF, // + 0x83EF, 0x89D8, // + 0x83F0, 0x8CD4, // + 0x83F1, 0x9548, // + 0x83F2, 0xE4C9, // + 0x83F4, 0xE4BD, // + 0x83F7, 0xE4C6, // + 0x83FB, 0xE4D0, // + 0x83FD, 0xE4C1, // + 0x8403, 0xE4C2, // + 0x8404, 0x93B8, // + 0x8407, 0xE4C7, // + 0x840B, 0xE4C4, // + 0x840C, 0x9647, // + 0x840D, 0xE4CA, // + 0x840E, 0x88DE, // + 0x8413, 0xE4BE, // + 0x8420, 0xE4CC, // + 0x8422, 0xE4CB, // + 0x8429, 0x948B, // + 0x842A, 0xE4D2, // + 0x842C, 0xE4DD, // + 0x8431, 0x8A9E, // + 0x8435, 0xE4E0, // + 0x8438, 0xE4CE, // + 0x843C, 0xE4D3, // + 0x843D, 0x978E, // + 0x8446, 0xE4DC, // + 0x8449, 0x9774, // + 0x844E, 0x97A8, // + 0x8457, 0x9298, // + 0x845B, 0x8A8B, // + 0x8461, 0x9592, // + 0x8462, 0xE4E2, // + 0x8463, 0x939F, // + 0x8466, 0x88AF, // + 0x8469, 0xE4DB, // + 0x846B, 0xE4D7, // + 0x846C, 0x9192, // + 0x846D, 0xE4D1, // + 0x846E, 0xE4D9, // + 0x846F, 0xE4DE, // + 0x8471, 0x944B, // + 0x8475, 0x88A8, // + 0x8477, 0xE4D6, // + 0x8479, 0xE4DF, // + 0x847A, 0x9598, // + 0x8482, 0xE4DA, // + 0x8484, 0xE4D5, // + 0x848B, 0x8FD3, // + 0x8490, 0x8F4E, // + 0x8494, 0x8EAA, // + 0x8499, 0x96D6, // + 0x849C, 0x9566, // + 0x849F, 0xE4E5, // + 0x84A1, 0xE4EE, // + 0x84AD, 0xE4D8, // + 0x84B2, 0x8A97, // + 0x84B8, 0x8FF6, // + 0x84B9, 0xE4E3, // + 0x84BB, 0xE4E8, // + 0x84BC, 0x9193, // + 0x84BF, 0xE4E4, // + 0x84C1, 0xE4EB, // + 0x84C4, 0x927E, // + 0x84C6, 0xE4EC, // + 0x84C9, 0x9775, // + 0x84CA, 0xE4E1, // + 0x84CB, 0x8A57, // + 0x84CD, 0xE4E7, // + 0x84D0, 0xE4EA, // + 0x84D1, 0x96AA, // + 0x84D6, 0xE4ED, // + 0x84D9, 0xE4E6, // + 0x84DA, 0xE4E9, // + 0x84EC, 0x9648, // + 0x84EE, 0x9840, // + 0x84F4, 0xE4F1, // + 0x84FC, 0xE4F8, // + 0x84FF, 0xE4F0, // + 0x8500, 0x8EC1, // + 0x8506, 0xE4CF, // + 0x8511, 0x95CC, // + 0x8513, 0x96A0, // + 0x8514, 0xE4F7, // + 0x8515, 0xE4F6, // + 0x8517, 0xE4F2, // + 0x8518, 0xE4F3, // + 0x851A, 0x8955, // + 0x851F, 0xE4F5, // + 0x8521, 0xE4EF, // + 0x8526, 0x92D3, // + 0x852C, 0xE4F4, // + 0x852D, 0x88FC, // + 0x8535, 0x91A0, // + 0x853D, 0x95C1, // + 0x8540, 0xE4F9, // + 0x8541, 0xE540, // + 0x8543, 0x94D7, // + 0x8548, 0xE4FC, // + 0x8549, 0x8FD4, // + 0x854A, 0x8EC7, // + 0x854B, 0xE542, // + 0x854E, 0x8BBC, // + 0x8555, 0xE543, // + 0x8557, 0x9599, // + 0x8558, 0xE4FB, // + 0x855A, 0xE4D4, // + 0x8563, 0xE4FA, // + 0x8568, 0x986E, // + 0x8569, 0x93A0, // + 0x856A, 0x9593, // + 0x856D, 0xE54A, // + 0x8577, 0xE550, // + 0x857E, 0xE551, // + 0x8580, 0xE544, // + 0x8584, 0x9496, // + 0x8587, 0xE54E, // + 0x8588, 0xE546, // + 0x858A, 0xE548, // + 0x8590, 0xE552, // + 0x8591, 0xE547, // + 0x8594, 0xE54B, // + 0x8597, 0x8992, // + 0x8599, 0x93E3, // + 0x859B, 0xE54C, // + 0x859C, 0xE54F, // + 0x85A4, 0xE545, // + 0x85A6, 0x9145, // + 0x85A8, 0xE549, // + 0x85A9, 0x8E46, // + 0x85AA, 0x9064, // + 0x85AB, 0x8C4F, // + 0x85AC, 0x96F2, // + 0x85AE, 0x96F7, // + 0x85AF, 0x8F92, // + 0x85B9, 0xE556, // + 0x85BA, 0xE554, // + 0x85C1, 0x986D, // + 0x85C9, 0xE553, // + 0x85CD, 0x9795, // + 0x85CF, 0xE555, // + 0x85D0, 0xE557, // + 0x85D5, 0xE558, // + 0x85DD, 0xE559, // + 0x85E4, 0x93A1, // + 0x85E5, 0xE55A, // + 0x85E9, 0x94CB, // + 0x85EA, 0xE54D, // + 0x85F7, 0x8F93, // + 0x85F9, 0xE55C, // + 0x85FA, 0xE561, // + 0x85FB, 0x9194, // + 0x85FE, 0xE560, // + 0x8602, 0xE541, // + 0x8606, 0xE562, // + 0x8607, 0x9168, // + 0x860A, 0xE55D, // + 0x860B, 0xE55F, // + 0x8613, 0xE55E, // + 0x8616, 0x9F50, // + 0x8617, 0x9F41, // + 0x861A, 0xE564, // + 0x8622, 0xE563, // + 0x862D, 0x9796, // + 0x862F, 0xE1BA, // + 0x8630, 0xE565, // + 0x863F, 0xE566, // + 0x864D, 0xE567, // + 0x864E, 0x8CD5, // + 0x8650, 0x8B73, // + 0x8654, 0xE569, // + 0x8655, 0x997C, // + 0x865A, 0x8B95, // + 0x865C, 0x97B8, // + 0x865E, 0x8BF1, // + 0x865F, 0xE56A, // + 0x8667, 0xE56B, // + 0x866B, 0x928E, // + 0x8671, 0xE56C, // + 0x8679, 0x93F8, // + 0x867B, 0x88B8, // + 0x868A, 0x89E1, // + 0x868B, 0xE571, // + 0x868C, 0xE572, // + 0x8693, 0xE56D, // + 0x8695, 0x8E5C, // + 0x86A3, 0xE56E, // + 0x86A4, 0x9461, // + 0x86A9, 0xE56F, // + 0x86AA, 0xE570, // + 0x86AB, 0xE57A, // + 0x86AF, 0xE574, // + 0x86B0, 0xE577, // + 0x86B6, 0xE573, // + 0x86C4, 0xE575, // + 0x86C6, 0xE576, // + 0x86C7, 0x8ED6, // + 0x86C9, 0xE578, // + 0x86CB, 0x9260, // + 0x86CD, 0x8C75, // + 0x86CE, 0x8A61, // + 0x86D4, 0xE57B, // + 0x86D9, 0x8A5E, // + 0x86DB, 0xE581, // + 0x86DE, 0xE57C, // + 0x86DF, 0xE580, // + 0x86E4, 0x94B8, // + 0x86E9, 0xE57D, // + 0x86EC, 0xE57E, // + 0x86ED, 0x9567, // + 0x86EE, 0x94D8, // + 0x86EF, 0xE582, // + 0x86F8, 0x91FB, // + 0x86F9, 0xE58C, // + 0x86FB, 0xE588, // + 0x86FE, 0x89E9, // + 0x8700, 0xE586, // + 0x8702, 0x9649, // + 0x8703, 0xE587, // + 0x8706, 0xE584, // + 0x8708, 0xE585, // + 0x8709, 0xE58A, // + 0x870A, 0xE58D, // + 0x870D, 0xE58B, // + 0x8711, 0xE589, // + 0x8712, 0xE583, // + 0x8718, 0x9277, // + 0x871A, 0xE594, // + 0x871C, 0x96A8, // + 0x8725, 0xE592, // + 0x8729, 0xE593, // + 0x8734, 0xE58E, // + 0x8737, 0xE590, // + 0x873B, 0xE591, // + 0x873F, 0xE58F, // + 0x8749, 0x90E4, // + 0x874B, 0x9858, // + 0x874C, 0xE598, // + 0x874E, 0xE599, // + 0x8753, 0xE59F, // + 0x8755, 0x9049, // + 0x8757, 0xE59B, // + 0x8759, 0xE59E, // + 0x875F, 0xE596, // + 0x8760, 0xE595, // + 0x8763, 0xE5A0, // + 0x8766, 0x89DA, // + 0x8768, 0xE59C, // + 0x876A, 0xE5A1, // + 0x876E, 0xE59D, // + 0x8774, 0xE59A, // + 0x8776, 0x92B1, // + 0x8778, 0xE597, // + 0x877F, 0x9488, // + 0x8782, 0xE5A5, // + 0x878D, 0x975A, // + 0x879F, 0xE5A4, // + 0x87A2, 0xE5A3, // + 0x87AB, 0xE5AC, // + 0x87AF, 0xE5A6, // + 0x87B3, 0xE5AE, // + 0x87BA, 0x9786, // + 0x87BB, 0xE5B1, // + 0x87BD, 0xE5A8, // + 0x87C0, 0xE5A9, // + 0x87C4, 0xE5AD, // + 0x87C6, 0xE5B0, // + 0x87C7, 0xE5AF, // + 0x87CB, 0xE5A7, // + 0x87D0, 0xE5AA, // + 0x87D2, 0xE5BB, // + 0x87E0, 0xE5B4, // + 0x87EF, 0xE5B2, // + 0x87F2, 0xE5B3, // + 0x87F6, 0xE5B8, // + 0x87F7, 0xE5B9, // + 0x87F9, 0x8A49, // + 0x87FB, 0x8B61, // + 0x87FE, 0xE5B7, // + 0x8805, 0xE5A2, // + 0x880D, 0xE5B6, // + 0x880E, 0xE5BA, // + 0x880F, 0xE5B5, // + 0x8811, 0xE5BC, // + 0x8815, 0xE5BE, // + 0x8816, 0xE5BD, // + 0x8821, 0xE5C0, // + 0x8822, 0xE5BF, // + 0x8823, 0xE579, // + 0x8827, 0xE5C4, // + 0x8831, 0xE5C1, // + 0x8836, 0xE5C2, // + 0x8839, 0xE5C3, // + 0x883B, 0xE5C5, // + 0x8840, 0x8C8C, // + 0x8842, 0xE5C7, // + 0x8844, 0xE5C6, // + 0x8846, 0x8F4F, // + 0x884C, 0x8D73, // + 0x884D, 0x9FA5, // + 0x8852, 0xE5C8, // + 0x8853, 0x8F70, // + 0x8857, 0x8A58, // + 0x8859, 0xE5C9, // + 0x885B, 0x8971, // + 0x885D, 0x8FD5, // + 0x885E, 0xE5CA, // + 0x8861, 0x8D74, // + 0x8862, 0xE5CB, // + 0x8863, 0x88DF, // + 0x8868, 0x955C, // + 0x886B, 0xE5CC, // + 0x8870, 0x908A, // + 0x8872, 0xE5D3, // + 0x8875, 0xE5D0, // + 0x8877, 0x928F, // + 0x887D, 0xE5D1, // + 0x887E, 0xE5CE, // + 0x887F, 0x8BDC, // + 0x8881, 0xE5CD, // + 0x8882, 0xE5D4, // + 0x8888, 0x8C55, // + 0x888B, 0x91DC, // + 0x888D, 0xE5DA, // + 0x8892, 0xE5D6, // + 0x8896, 0x91B3, // + 0x8897, 0xE5D5, // + 0x8899, 0xE5D8, // + 0x889E, 0xE5CF, // + 0x88A2, 0xE5D9, // + 0x88A4, 0xE5DB, // + 0x88AB, 0x94ED, // + 0x88AE, 0xE5D7, // + 0x88B0, 0xE5DC, // + 0x88B1, 0xE5DE, // + 0x88B4, 0x8CD1, // + 0x88B5, 0xE5D2, // + 0x88B7, 0x88BF, // + 0x88BF, 0xE5DD, // + 0x88C1, 0x8DD9, // + 0x88C2, 0x97F4, // + 0x88C3, 0xE5DF, // + 0x88C4, 0xE5E0, // + 0x88C5, 0x9195, // + 0x88CF, 0x97A0, // + 0x88D4, 0xE5E1, // + 0x88D5, 0x9754, // + 0x88D8, 0xE5E2, // + 0x88D9, 0xE5E3, // + 0x88DC, 0x95E2, // + 0x88DD, 0xE5E4, // + 0x88DF, 0x8DBE, // + 0x88E1, 0x97A1, // + 0x88E8, 0xE5E9, // + 0x88F2, 0xE5EA, // + 0x88F3, 0x8FD6, // + 0x88F4, 0xE5E8, // + 0x88F8, 0x9787, // + 0x88F9, 0xE5E5, // + 0x88FC, 0xE5E7, // + 0x88FD, 0x90BB, // + 0x88FE, 0x909E, // + 0x8902, 0xE5E6, // + 0x8904, 0xE5EB, // + 0x8907, 0x95A1, // + 0x890A, 0xE5ED, // + 0x890C, 0xE5EC, // + 0x8910, 0x8A8C, // + 0x8912, 0x964A, // + 0x8913, 0xE5EE, // + 0x891D, 0xE5FA, // + 0x891E, 0xE5F0, // + 0x8925, 0xE5F1, // + 0x892A, 0xE5F2, // + 0x892B, 0xE5F3, // + 0x8936, 0xE5F7, // + 0x8938, 0xE5F8, // + 0x893B, 0xE5F6, // + 0x8941, 0xE5F4, // + 0x8943, 0xE5EF, // + 0x8944, 0xE5F5, // + 0x894C, 0xE5F9, // + 0x894D, 0xE8B5, // + 0x8956, 0x89A6, // + 0x895E, 0xE5FC, // + 0x895F, 0x8BDD, // + 0x8960, 0xE5FB, // + 0x8964, 0xE641, // + 0x8966, 0xE640, // + 0x896A, 0xE643, // + 0x896D, 0xE642, // + 0x896F, 0xE644, // + 0x8972, 0x8F50, // + 0x8974, 0xE645, // + 0x8977, 0xE646, // + 0x897E, 0xE647, // + 0x897F, 0x90BC, // + 0x8981, 0x9776, // + 0x8983, 0xE648, // + 0x8986, 0x95A2, // + 0x8987, 0x9465, // + 0x8988, 0xE649, // + 0x898A, 0xE64A, // + 0x898B, 0x8CA9, // + 0x898F, 0x8B4B, // + 0x8993, 0xE64B, // + 0x8996, 0x8E8B, // + 0x8997, 0x9460, // + 0x8998, 0xE64C, // + 0x899A, 0x8A6F, // + 0x89A1, 0xE64D, // + 0x89A6, 0xE64F, // + 0x89A7, 0x9797, // + 0x89A9, 0xE64E, // + 0x89AA, 0x9065, // + 0x89AC, 0xE650, // + 0x89AF, 0xE651, // + 0x89B2, 0xE652, // + 0x89B3, 0x8ACF, // + 0x89BA, 0xE653, // + 0x89BD, 0xE654, // + 0x89BF, 0xE655, // + 0x89C0, 0xE656, // + 0x89D2, 0x8A70, // + 0x89DA, 0xE657, // + 0x89DC, 0xE658, // + 0x89DD, 0xE659, // + 0x89E3, 0x89F0, // + 0x89E6, 0x9047, // + 0x89E7, 0xE65A, // + 0x89F8, 0xE65C, // + 0x8A00, 0x8CBE, // + 0x8A02, 0x92F9, // + 0x8A03, 0xE65D, // + 0x8A08, 0x8C76, // + 0x8A0A, 0x9075, // + 0x8A0C, 0xE660, // + 0x8A0E, 0x93A2, // + 0x8A10, 0xE65F, // + 0x8A13, 0x8C50, // + 0x8A16, 0xE65E, // + 0x8A17, 0x91F5, // + 0x8A18, 0x8B4C, // + 0x8A1B, 0xE661, // + 0x8A1D, 0xE662, // + 0x8A1F, 0x8FD7, // + 0x8A23, 0x8C8D, // + 0x8A25, 0xE663, // + 0x8A2A, 0x964B, // + 0x8A2D, 0x90DD, // + 0x8A31, 0x8B96, // + 0x8A33, 0x96F3, // + 0x8A34, 0x9169, // + 0x8A36, 0xE664, // + 0x8A3A, 0x9066, // + 0x8A3B, 0x9290, // + 0x8A3C, 0x8FD8, // + 0x8A41, 0xE665, // + 0x8A46, 0xE668, // + 0x8A48, 0xE669, // + 0x8A50, 0x8DBC, // + 0x8A51, 0x91C0, // + 0x8A52, 0xE667, // + 0x8A54, 0x8FD9, // + 0x8A55, 0x955D, // + 0x8A5B, 0xE666, // + 0x8A5E, 0x8E8C, // + 0x8A60, 0x8972, // + 0x8A62, 0xE66D, // + 0x8A63, 0x8C77, // + 0x8A66, 0x8E8E, // + 0x8A69, 0x8E8D, // + 0x8A6B, 0x986C, // + 0x8A6C, 0xE66C, // + 0x8A6D, 0xE66B, // + 0x8A6E, 0x9146, // + 0x8A70, 0x8B6C, // + 0x8A71, 0x9862, // + 0x8A72, 0x8A59, // + 0x8A73, 0x8FDA, // + 0x8A7C, 0xE66A, // + 0x8A82, 0xE66F, // + 0x8A84, 0xE670, // + 0x8A85, 0xE66E, // + 0x8A87, 0x8CD6, // + 0x8A89, 0x975F, // + 0x8A8C, 0x8E8F, // + 0x8A8D, 0x9446, // + 0x8A91, 0xE673, // + 0x8A93, 0x90BE, // + 0x8A95, 0x9261, // + 0x8A98, 0x9755, // + 0x8A9A, 0xE676, // + 0x8A9E, 0x8CEA, // + 0x8AA0, 0x90BD, // + 0x8AA1, 0xE672, // + 0x8AA3, 0xE677, // + 0x8AA4, 0x8CEB, // + 0x8AA5, 0xE674, // + 0x8AA6, 0xE675, // + 0x8AA8, 0xE671, // + 0x8AAC, 0x90E0, // + 0x8AAD, 0x93C7, // + 0x8AB0, 0x924E, // + 0x8AB2, 0x89DB, // + 0x8AB9, 0x94EE, // + 0x8ABC, 0x8B62, // + 0x8ABF, 0x92B2, // + 0x8AC2, 0xE67A, // + 0x8AC4, 0xE678, // + 0x8AC7, 0x926B, // + 0x8ACB, 0x90BF, // + 0x8ACC, 0x8AD0, // + 0x8ACD, 0xE679, // + 0x8ACF, 0x907A, // + 0x8AD2, 0x97C8, // + 0x8AD6, 0x985F, // + 0x8ADA, 0xE67B, // + 0x8ADB, 0xE687, // + 0x8ADC, 0x92B3, // + 0x8ADE, 0xE686, // + 0x8AE0, 0xE683, // + 0x8AE1, 0xE68B, // + 0x8AE2, 0xE684, // + 0x8AE4, 0xE680, // + 0x8AE6, 0x92FA, // + 0x8AE7, 0xE67E, // + 0x8AEB, 0xE67C, // + 0x8AED, 0x9740, // + 0x8AEE, 0x8E90, // + 0x8AF1, 0xE681, // + 0x8AF3, 0xE67D, // + 0x8AF7, 0xE685, // + 0x8AF8, 0x8F94, // + 0x8AFA, 0x8CBF, // + 0x8AFE, 0x91F8, // + 0x8B00, 0x9664, // + 0x8B01, 0x8979, // + 0x8B02, 0x88E0, // + 0x8B04, 0x93A3, // + 0x8B07, 0xE689, // + 0x8B0C, 0xE688, // + 0x8B0E, 0x93E4, // + 0x8B10, 0xE68D, // + 0x8B14, 0xE682, // + 0x8B16, 0xE68C, // + 0x8B17, 0xE68E, // + 0x8B19, 0x8CAA, // + 0x8B1A, 0xE68A, // + 0x8B1B, 0x8D75, // + 0x8B1D, 0x8ED3, // + 0x8B20, 0xE68F, // + 0x8B21, 0x9777, // + 0x8B26, 0xE692, // + 0x8B28, 0xE695, // + 0x8B2B, 0xE693, // + 0x8B2C, 0x9554, // + 0x8B33, 0xE690, // + 0x8B39, 0x8BDE, // + 0x8B3E, 0xE694, // + 0x8B41, 0xE696, // + 0x8B49, 0xE69A, // + 0x8B4C, 0xE697, // + 0x8B4E, 0xE699, // + 0x8B4F, 0xE698, // + 0x8B56, 0xE69B, // + 0x8B58, 0x8EAF, // + 0x8B5A, 0xE69D, // + 0x8B5B, 0xE69C, // + 0x8B5C, 0x9588, // + 0x8B5F, 0xE69F, // + 0x8B66, 0x8C78, // + 0x8B6B, 0xE69E, // + 0x8B6C, 0xE6A0, // + 0x8B6F, 0xE6A1, // + 0x8B70, 0x8B63, // + 0x8B71, 0xE3BF, // + 0x8B72, 0x8FF7, // + 0x8B74, 0xE6A2, // + 0x8B77, 0x8CEC, // + 0x8B7D, 0xE6A3, // + 0x8B80, 0xE6A4, // + 0x8B83, 0x8E5D, // + 0x8B8A, 0x9DCC, // + 0x8B8C, 0xE6A5, // + 0x8B8E, 0xE6A6, // + 0x8B90, 0x8F51, // + 0x8B92, 0xE6A7, // + 0x8B93, 0xE6A8, // + 0x8B96, 0xE6A9, // + 0x8B99, 0xE6AA, // + 0x8B9A, 0xE6AB, // + 0x8C37, 0x924A, // + 0x8C3A, 0xE6AC, // + 0x8C3F, 0xE6AE, // + 0x8C41, 0xE6AD, // + 0x8C46, 0x93A4, // + 0x8C48, 0xE6AF, // + 0x8C4A, 0x964C, // + 0x8C4C, 0xE6B0, // + 0x8C4E, 0xE6B1, // + 0x8C50, 0xE6B2, // + 0x8C55, 0xE6B3, // + 0x8C5A, 0x93D8, // + 0x8C61, 0x8FDB, // + 0x8C62, 0xE6B4, // + 0x8C6A, 0x8D8B, // + 0x8C6B, 0x98AC, // + 0x8C6C, 0xE6B5, // + 0x8C78, 0xE6B6, // + 0x8C79, 0x955E, // + 0x8C7A, 0xE6B7, // + 0x8C7C, 0xE6BF, // + 0x8C82, 0xE6B8, // + 0x8C85, 0xE6BA, // + 0x8C89, 0xE6B9, // + 0x8C8A, 0xE6BB, // + 0x8C8C, 0x9665, // + 0x8C8D, 0xE6BC, // + 0x8C8E, 0xE6BD, // + 0x8C94, 0xE6BE, // + 0x8C98, 0xE6C0, // + 0x8C9D, 0x8A4C, // + 0x8C9E, 0x92E5, // + 0x8CA0, 0x9589, // + 0x8CA1, 0x8DE0, // + 0x8CA2, 0x8D76, // + 0x8CA7, 0x956E, // + 0x8CA8, 0x89DD, // + 0x8CA9, 0x94CC, // + 0x8CAA, 0xE6C3, // + 0x8CAB, 0x8AD1, // + 0x8CAC, 0x90D3, // + 0x8CAD, 0xE6C2, // + 0x8CAE, 0xE6C7, // + 0x8CAF, 0x9299, // + 0x8CB0, 0x96E1, // + 0x8CB2, 0xE6C5, // + 0x8CB3, 0xE6C6, // + 0x8CB4, 0x8B4D, // + 0x8CB6, 0xE6C8, // + 0x8CB7, 0x9483, // + 0x8CB8, 0x91DD, // + 0x8CBB, 0x94EF, // + 0x8CBC, 0x935C, // + 0x8CBD, 0xE6C4, // + 0x8CBF, 0x9666, // + 0x8CC0, 0x89EA, // + 0x8CC1, 0xE6CA, // + 0x8CC2, 0x9847, // + 0x8CC3, 0x92C0, // + 0x8CC4, 0x9864, // + 0x8CC7, 0x8E91, // + 0x8CC8, 0xE6C9, // + 0x8CCA, 0x91AF, // + 0x8CCD, 0xE6DA, // + 0x8CCE, 0x9147, // + 0x8CD1, 0x93F6, // + 0x8CD3, 0x956F, // + 0x8CDA, 0xE6CD, // + 0x8CDB, 0x8E5E, // + 0x8CDC, 0x8E92, // + 0x8CDE, 0x8FDC, // + 0x8CE0, 0x9485, // + 0x8CE2, 0x8CAB, // + 0x8CE3, 0xE6CC, // + 0x8CE4, 0xE6CB, // + 0x8CE6, 0x958A, // + 0x8CEA, 0x8EBF, // + 0x8CED, 0x9371, // + 0x8CFA, 0xE6CF, // + 0x8CFB, 0xE6D0, // + 0x8CFC, 0x8D77, // + 0x8CFD, 0xE6CE, // + 0x8D04, 0xE6D1, // + 0x8D05, 0xE6D2, // + 0x8D07, 0xE6D4, // + 0x8D08, 0x91A1, // + 0x8D0A, 0xE6D3, // + 0x8D0B, 0x8AE4, // + 0x8D0D, 0xE6D6, // + 0x8D0F, 0xE6D5, // + 0x8D10, 0xE6D7, // + 0x8D13, 0xE6D9, // + 0x8D14, 0xE6DB, // + 0x8D16, 0xE6DC, // + 0x8D64, 0x90D4, // + 0x8D66, 0x8ECD, // + 0x8D67, 0xE6DD, // + 0x8D6B, 0x8A71, // + 0x8D6D, 0xE6DE, // + 0x8D70, 0x9196, // + 0x8D71, 0xE6DF, // + 0x8D73, 0xE6E0, // + 0x8D74, 0x958B, // + 0x8D77, 0x8B4E, // + 0x8D81, 0xE6E1, // + 0x8D85, 0x92B4, // + 0x8D8A, 0x897A, // + 0x8D99, 0xE6E2, // + 0x8DA3, 0x8EEF, // + 0x8DA8, 0x9096, // + 0x8DB3, 0x91AB, // + 0x8DBA, 0xE6E5, // + 0x8DBE, 0xE6E4, // + 0x8DC2, 0xE6E3, // + 0x8DCB, 0xE6EB, // + 0x8DCC, 0xE6E9, // + 0x8DCF, 0xE6E6, // + 0x8DD6, 0xE6E8, // + 0x8DDA, 0xE6E7, // + 0x8DDB, 0xE6EA, // + 0x8DDD, 0x8B97, // + 0x8DDF, 0xE6EE, // + 0x8DE1, 0x90D5, // + 0x8DE3, 0xE6EF, // + 0x8DE8, 0x8CD7, // + 0x8DEA, 0xE6EC, // + 0x8DEB, 0xE6ED, // + 0x8DEF, 0x9848, // + 0x8DF3, 0x92B5, // + 0x8DF5, 0x9148, // + 0x8DFC, 0xE6F0, // + 0x8DFF, 0xE6F3, // + 0x8E08, 0xE6F1, // + 0x8E09, 0xE6F2, // + 0x8E0A, 0x9778, // + 0x8E0F, 0x93A5, // + 0x8E10, 0xE6F6, // + 0x8E1D, 0xE6F4, // + 0x8E1E, 0xE6F5, // + 0x8E1F, 0xE6F7, // + 0x8E2A, 0xE748, // + 0x8E30, 0xE6FA, // + 0x8E34, 0xE6FB, // + 0x8E35, 0xE6F9, // + 0x8E42, 0xE6F8, // + 0x8E44, 0x92FB, // + 0x8E47, 0xE740, // + 0x8E48, 0xE744, // + 0x8E49, 0xE741, // + 0x8E4A, 0xE6FC, // + 0x8E4C, 0xE742, // + 0x8E50, 0xE743, // + 0x8E55, 0xE74A, // + 0x8E59, 0xE745, // + 0x8E5F, 0x90D6, // + 0x8E60, 0xE747, // + 0x8E63, 0xE749, // + 0x8E64, 0xE746, // + 0x8E72, 0xE74C, // + 0x8E74, 0x8F52, // + 0x8E76, 0xE74B, // + 0x8E7C, 0xE74D, // + 0x8E81, 0xE74E, // + 0x8E84, 0xE751, // + 0x8E85, 0xE750, // + 0x8E87, 0xE74F, // + 0x8E8A, 0xE753, // + 0x8E8B, 0xE752, // + 0x8E8D, 0x96F4, // + 0x8E91, 0xE755, // + 0x8E93, 0xE754, // + 0x8E94, 0xE756, // + 0x8E99, 0xE757, // + 0x8EA1, 0xE759, // + 0x8EAA, 0xE758, // + 0x8EAB, 0x9067, // + 0x8EAC, 0xE75A, // + 0x8EAF, 0x8BEB, // + 0x8EB1, 0xE75D, // + 0x8EBE, 0xE75E, // + 0x8EC5, 0xE75F, // + 0x8EC6, 0xE75C, // + 0x8EC8, 0xE760, // + 0x8ECA, 0x8ED4, // + 0x8ECB, 0xE761, // + 0x8ECC, 0x8B4F, // + 0x8ECD, 0x8C52, // + 0x8ED2, 0x8CAC, // + 0x8EDB, 0xE762, // + 0x8EDF, 0x93EE, // + 0x8EE2, 0x935D, // + 0x8EE3, 0xE763, // + 0x8EEB, 0xE766, // + 0x8EF8, 0x8EB2, // + 0x8EFB, 0xE765, // + 0x8EFC, 0xE764, // + 0x8EFD, 0x8C79, // + 0x8EFE, 0xE767, // + 0x8F03, 0x8A72, // + 0x8F05, 0xE769, // + 0x8F09, 0x8DDA, // + 0x8F0A, 0xE768, // + 0x8F0C, 0xE771, // + 0x8F12, 0xE76B, // + 0x8F13, 0xE76D, // + 0x8F14, 0x95E3, // + 0x8F15, 0xE76A, // + 0x8F19, 0xE76C, // + 0x8F1B, 0xE770, // + 0x8F1C, 0xE76E, // + 0x8F1D, 0x8B50, // + 0x8F1F, 0xE76F, // + 0x8F26, 0xE772, // + 0x8F29, 0x9479, // + 0x8F2A, 0x97D6, // + 0x8F2F, 0x8F53, // + 0x8F33, 0xE773, // + 0x8F38, 0x9741, // + 0x8F39, 0xE775, // + 0x8F3B, 0xE774, // + 0x8F3E, 0xE778, // + 0x8F3F, 0x9760, // + 0x8F42, 0xE777, // + 0x8F44, 0x8A8D, // + 0x8F45, 0xE776, // + 0x8F46, 0xE77B, // + 0x8F49, 0xE77A, // + 0x8F4C, 0xE779, // + 0x8F4D, 0x9351, // + 0x8F4E, 0xE77C, // + 0x8F57, 0xE77D, // + 0x8F5C, 0xE77E, // + 0x8F5F, 0x8D8C, // + 0x8F61, 0x8C44, // + 0x8F62, 0xE780, // + 0x8F63, 0xE781, // + 0x8F64, 0xE782, // + 0x8F9B, 0x9068, // + 0x8F9C, 0xE783, // + 0x8F9E, 0x8EAB, // + 0x8F9F, 0xE784, // + 0x8FA3, 0xE785, // + 0x8FA7, 0x999F, // + 0x8FA8, 0x999E, // + 0x8FAD, 0xE786, // + 0x8FAE, 0xE390, // + 0x8FAF, 0xE787, // + 0x8FB0, 0x9243, // + 0x8FB1, 0x904A, // + 0x8FB2, 0x945F, // + 0x8FB7, 0xE788, // + 0x8FBA, 0x95D3, // + 0x8FBB, 0x92D2, // + 0x8FBC, 0x8D9E, // + 0x8FBF, 0x9248, // + 0x8FC2, 0x8949, // + 0x8FC4, 0x9698, // + 0x8FC5, 0x9076, // + 0x8FCE, 0x8C7D, // + 0x8FD1, 0x8BDF, // + 0x8FD4, 0x95D4, // + 0x8FDA, 0xE789, // + 0x8FE2, 0xE78B, // + 0x8FE5, 0xE78A, // + 0x8FE6, 0x89DE, // + 0x8FE9, 0x93F4, // + 0x8FEA, 0xE78C, // + 0x8FEB, 0x9497, // + 0x8FED, 0x9352, // + 0x8FEF, 0xE78D, // + 0x8FF0, 0x8F71, // + 0x8FF4, 0xE78F, // + 0x8FF7, 0x96C0, // + 0x8FF8, 0xE79E, // + 0x8FF9, 0xE791, // + 0x8FFA, 0xE792, // + 0x8FFD, 0x92C7, // + 0x9000, 0x91DE, // + 0x9001, 0x9197, // + 0x9003, 0x93A6, // + 0x9005, 0xE790, // + 0x9006, 0x8B74, // + 0x900B, 0xE799, // + 0x900D, 0xE796, // + 0x900E, 0xE7A3, // + 0x900F, 0x93A7, // + 0x9010, 0x9280, // + 0x9011, 0xE793, // + 0x9013, 0x92FC, // + 0x9014, 0x9372, // + 0x9015, 0xE794, // + 0x9016, 0xE798, // + 0x9017, 0x9080, // + 0x9019, 0x9487, // + 0x901A, 0x92CA, // + 0x901D, 0x90C0, // + 0x901E, 0xE797, // + 0x901F, 0x91AC, // + 0x9020, 0x91A2, // + 0x9021, 0xE795, // + 0x9022, 0x88A7, // + 0x9023, 0x9841, // + 0x9027, 0xE79A, // + 0x902E, 0x91DF, // + 0x9031, 0x8F54, // + 0x9032, 0x9069, // + 0x9035, 0xE79C, // + 0x9036, 0xE79B, // + 0x9038, 0x88ED, // + 0x9039, 0xE79D, // + 0x903C, 0x954E, // + 0x903E, 0xE7A5, // + 0x9041, 0x93D9, // + 0x9042, 0x908B, // + 0x9045, 0x9278, // + 0x9047, 0x8BF6, // + 0x9049, 0xE7A4, // + 0x904A, 0x9756, // + 0x904B, 0x895E, // + 0x904D, 0x95D5, // + 0x904E, 0x89DF, // + 0x904F, 0xE79F, // + 0x9050, 0xE7A0, // + 0x9051, 0xE7A1, // + 0x9052, 0xE7A2, // + 0x9053, 0x93B9, // + 0x9054, 0x9242, // + 0x9055, 0x88E1, // + 0x9056, 0xE7A6, // + 0x9058, 0xE7A7, // + 0x9059, 0xEAA1, // + 0x905C, 0x91BB, // + 0x905E, 0xE7A8, // + 0x9060, 0x8993, // + 0x9061, 0x916B, // + 0x9063, 0x8CAD, // + 0x9065, 0x9779, // + 0x9068, 0xE7A9, // + 0x9069, 0x934B, // + 0x906D, 0x9198, // + 0x906E, 0x8ED5, // + 0x906F, 0xE7AA, // + 0x9072, 0xE7AD, // + 0x9075, 0x8F85, // + 0x9076, 0xE7AB, // + 0x9077, 0x914A, // + 0x9078, 0x9149, // + 0x907A, 0x88E2, // + 0x907C, 0x97C9, // + 0x907D, 0xE7AF, // + 0x907F, 0x94F0, // + 0x9080, 0xE7B1, // + 0x9081, 0xE7B0, // + 0x9082, 0xE7AE, // + 0x9083, 0xE284, // + 0x9084, 0x8AD2, // + 0x9087, 0xE78E, // + 0x9089, 0xE7B3, // + 0x908A, 0xE7B2, // + 0x908F, 0xE7B4, // + 0x9091, 0x9757, // + 0x90A3, 0x93DF, // + 0x90A6, 0x964D, // + 0x90A8, 0xE7B5, // + 0x90AA, 0x8ED7, // + 0x90AF, 0xE7B6, // + 0x90B1, 0xE7B7, // + 0x90B5, 0xE7B8, // + 0x90B8, 0x9340, // + 0x90C1, 0x88E8, // + 0x90CA, 0x8D78, // + 0x90CE, 0x9859, // + 0x90DB, 0xE7BC, // + 0x90E1, 0x8C53, // + 0x90E2, 0xE7B9, // + 0x90E4, 0xE7BA, // + 0x90E8, 0x9594, // + 0x90ED, 0x8A73, // + 0x90F5, 0x9758, // + 0x90F7, 0x8BBD, // + 0x90FD, 0x9373, // + 0x9102, 0xE7BD, // + 0x9112, 0xE7BE, // + 0x9119, 0xE7BF, // + 0x912D, 0x9341, // + 0x9130, 0xE7C1, // + 0x9132, 0xE7C0, // + 0x9149, 0x93D1, // + 0x914A, 0xE7C2, // + 0x914B, 0x8F55, // + 0x914C, 0x8EDE, // + 0x914D, 0x947A, // + 0x914E, 0x9291, // + 0x9152, 0x8EF0, // + 0x9154, 0x908C, // + 0x9156, 0xE7C3, // + 0x9158, 0xE7C4, // + 0x9162, 0x907C, // + 0x9163, 0xE7C5, // + 0x9165, 0xE7C6, // + 0x9169, 0xE7C7, // + 0x916A, 0x978F, // + 0x916C, 0x8F56, // + 0x9172, 0xE7C9, // + 0x9173, 0xE7C8, // + 0x9175, 0x8D79, // + 0x9177, 0x8D93, // + 0x9178, 0x8E5F, // + 0x9182, 0xE7CC, // + 0x9187, 0x8F86, // + 0x9189, 0xE7CB, // + 0x918B, 0xE7CA, // + 0x918D, 0x91E7, // + 0x9190, 0x8CED, // + 0x9192, 0x90C1, // + 0x9197, 0x94AE, // + 0x919C, 0x8F58, // + 0x91A2, 0xE7CD, // + 0x91A4, 0x8FDD, // + 0x91AA, 0xE7D0, // + 0x91AB, 0xE7CE, // + 0x91AF, 0xE7CF, // + 0x91B4, 0xE7D2, // + 0x91B5, 0xE7D1, // + 0x91B8, 0x8FF8, // + 0x91BA, 0xE7D3, // + 0x91C0, 0xE7D4, // + 0x91C1, 0xE7D5, // + 0x91C6, 0x94CE, // + 0x91C7, 0x8DD1, // + 0x91C8, 0x8EDF, // + 0x91C9, 0xE7D6, // + 0x91CB, 0xE7D7, // + 0x91CC, 0x97A2, // + 0x91CD, 0x8F64, // + 0x91CE, 0x96EC, // + 0x91CF, 0x97CA, // + 0x91D0, 0xE7D8, // + 0x91D1, 0x8BE0, // + 0x91D6, 0xE7D9, // + 0x91D8, 0x9342, // + 0x91DB, 0xE7DC, // + 0x91DC, 0x8A98, // + 0x91DD, 0x906A, // + 0x91DF, 0xE7DA, // + 0x91E1, 0xE7DB, // + 0x91E3, 0x92DE, // + 0x91E6, 0x9674, // + 0x91E7, 0x8BFA, // + 0x91F5, 0xE7DE, // + 0x91F6, 0xE7DF, // + 0x91FC, 0xE7DD, // + 0x91FF, 0xE7E1, // + 0x920D, 0x93DD, // + 0x920E, 0x8A62, // + 0x9211, 0xE7E5, // + 0x9214, 0xE7E2, // + 0x9215, 0xE7E4, // + 0x921E, 0xE7E0, // + 0x9229, 0xE86E, // + 0x922C, 0xE7E3, // + 0x9234, 0x97E9, // + 0x9237, 0x8CD8, // + 0x923F, 0xE7ED, // + 0x9244, 0x9353, // + 0x9245, 0xE7E8, // + 0x9248, 0xE7EB, // + 0x9249, 0xE7E9, // + 0x924B, 0xE7EE, // + 0x9250, 0xE7EF, // + 0x9257, 0xE7E7, // + 0x925A, 0xE7F4, // + 0x925B, 0x8994, // + 0x925E, 0xE7E6, // + 0x9262, 0x94AB, // + 0x9264, 0xE7EA, // + 0x9266, 0x8FDE, // + 0x9271, 0x8D7A, // + 0x927E, 0x9667, // + 0x9280, 0x8BE2, // + 0x9283, 0x8F65, // + 0x9285, 0x93BA, // + 0x9291, 0x914C, // + 0x9293, 0xE7F2, // + 0x9295, 0xE7EC, // + 0x9296, 0xE7F1, // + 0x9298, 0x96C1, // + 0x929A, 0x92B6, // + 0x929B, 0xE7F3, // + 0x929C, 0xE7F0, // + 0x92AD, 0x914B, // + 0x92B7, 0xE7F7, // + 0x92B9, 0xE7F6, // + 0x92CF, 0xE7F5, // + 0x92D2, 0x964E, // + 0x92E4, 0x8F9B, // + 0x92E9, 0xE7F8, // + 0x92EA, 0x95DD, // + 0x92ED, 0x8973, // + 0x92F2, 0x9565, // + 0x92F3, 0x9292, // + 0x92F8, 0x8B98, // + 0x92FA, 0xE7FA, // + 0x92FC, 0x8D7C, // + 0x9306, 0x8E4B, // + 0x930F, 0xE7F9, // + 0x9310, 0x908D, // + 0x9318, 0x908E, // + 0x9319, 0xE840, // + 0x931A, 0xE842, // + 0x9320, 0x8FF9, // + 0x9322, 0xE841, // + 0x9323, 0xE843, // + 0x9326, 0x8BD1, // + 0x9328, 0x9564, // + 0x932B, 0x8EE0, // + 0x932C, 0x9842, // + 0x932E, 0xE7FC, // + 0x932F, 0x8DF6, // + 0x9332, 0x985E, // + 0x9335, 0xE845, // + 0x933A, 0xE844, // + 0x933B, 0xE846, // + 0x9344, 0xE7FB, // + 0x934B, 0x93E7, // + 0x934D, 0x9374, // + 0x9354, 0x92D5, // + 0x9356, 0xE84B, // + 0x935B, 0x9262, // + 0x935C, 0xE847, // + 0x9360, 0xE848, // + 0x936C, 0x8C4C, // + 0x936E, 0xE84A, // + 0x9375, 0x8CAE, // + 0x937C, 0xE849, // + 0x937E, 0x8FDF, // + 0x938C, 0x8A99, // + 0x9394, 0xE84F, // + 0x9396, 0x8DBD, // + 0x9397, 0x9199, // + 0x939A, 0x92C8, // + 0x93A7, 0x8A5A, // + 0x93AC, 0xE84D, // + 0x93AD, 0xE84E, // + 0x93AE, 0x92C1, // + 0x93B0, 0xE84C, // + 0x93B9, 0xE850, // + 0x93C3, 0xE856, // + 0x93C8, 0xE859, // + 0x93D0, 0xE858, // + 0x93D1, 0x934C, // + 0x93D6, 0xE851, // + 0x93D7, 0xE852, // + 0x93D8, 0xE855, // + 0x93DD, 0xE857, // + 0x93E1, 0x8BBE, // + 0x93E4, 0xE85A, // + 0x93E5, 0xE854, // + 0x93E8, 0xE853, // + 0x9403, 0xE85E, // + 0x9407, 0xE85F, // + 0x9410, 0xE860, // + 0x9413, 0xE85D, // + 0x9414, 0xE85C, // + 0x9418, 0x8FE0, // + 0x9419, 0x93A8, // + 0x9421, 0xE864, // + 0x942B, 0xE862, // + 0x9435, 0xE863, // + 0x9436, 0xE861, // + 0x9438, 0x91F6, // + 0x943A, 0xE865, // + 0x9441, 0xE866, // + 0x9444, 0xE868, // + 0x9451, 0x8AD3, // + 0x9452, 0xE867, // + 0x9453, 0x96F8, // + 0x945A, 0xE873, // + 0x945B, 0xE869, // + 0x945E, 0xE86C, // + 0x9460, 0xE86A, // + 0x9462, 0xE86B, // + 0x946A, 0xE86D, // + 0x9470, 0xE86F, // + 0x9475, 0xE870, // + 0x9477, 0xE871, // + 0x947C, 0xE874, // + 0x947D, 0xE872, // + 0x947E, 0xE875, // + 0x947F, 0xE877, // + 0x9481, 0xE876, // + 0x9577, 0x92B7, // + 0x9580, 0x96E5, // + 0x9582, 0xE878, // + 0x9583, 0x914D, // + 0x9587, 0xE879, // + 0x9589, 0x95C2, // + 0x958A, 0xE87A, // + 0x958B, 0x8A4A, // + 0x9591, 0x8AD5, // + 0x9593, 0x8AD4, // + 0x9594, 0xE87B, // + 0x9596, 0xE87C, // + 0x9598, 0xE87D, // + 0x9599, 0xE87E, // + 0x95A0, 0xE880, // + 0x95A2, 0x8AD6, // + 0x95A3, 0x8A74, // + 0x95A4, 0x8D7D, // + 0x95A5, 0x94B4, // + 0x95A7, 0xE882, // + 0x95A8, 0xE881, // + 0x95AD, 0xE883, // + 0x95B2, 0x897B, // + 0x95B9, 0xE886, // + 0x95BB, 0xE885, // + 0x95BC, 0xE884, // + 0x95BE, 0xE887, // + 0x95C3, 0xE88A, // + 0x95C7, 0x88C5, // + 0x95CA, 0xE888, // + 0x95CC, 0xE88C, // + 0x95CD, 0xE88B, // + 0x95D4, 0xE88E, // + 0x95D5, 0xE88D, // + 0x95D6, 0xE88F, // + 0x95D8, 0x93AC, // + 0x95DC, 0xE890, // + 0x95E1, 0xE891, // + 0x95E2, 0xE893, // + 0x95E5, 0xE892, // + 0x961C, 0x958C, // + 0x9621, 0xE894, // + 0x9628, 0xE895, // + 0x962A, 0x8DE3, // + 0x962E, 0xE896, // + 0x962F, 0xE897, // + 0x9632, 0x9668, // + 0x963B, 0x916A, // + 0x963F, 0x88A2, // + 0x9640, 0x91C9, // + 0x9642, 0xE898, // + 0x9644, 0x958D, // + 0x964B, 0xE89B, // + 0x964C, 0xE899, // + 0x964D, 0x8D7E, // + 0x964F, 0xE89A, // + 0x9650, 0x8CC0, // + 0x965B, 0x95C3, // + 0x965C, 0xE89D, // + 0x965D, 0xE89F, // + 0x965E, 0xE89E, // + 0x965F, 0xE8A0, // + 0x9662, 0x8940, // + 0x9663, 0x9077, // + 0x9664, 0x8F9C, // + 0x9665, 0x8AD7, // + 0x9666, 0xE8A1, // + 0x966A, 0x9486, // + 0x966C, 0xE8A3, // + 0x9670, 0x8941, // + 0x9672, 0xE8A2, // + 0x9673, 0x92C2, // + 0x9675, 0x97CB, // + 0x9676, 0x93A9, // + 0x9677, 0xE89C, // + 0x9678, 0x97A4, // + 0x967A, 0x8CAF, // + 0x967D, 0x977A, // + 0x9685, 0x8BF7, // + 0x9686, 0x97B2, // + 0x9688, 0x8C47, // + 0x968A, 0x91E0, // + 0x968B, 0xE440, // + 0x968D, 0xE8A4, // + 0x968E, 0x8A4B, // + 0x968F, 0x908F, // + 0x9694, 0x8A75, // + 0x9695, 0xE8A6, // + 0x9697, 0xE8A7, // + 0x9698, 0xE8A5, // + 0x9699, 0x8C84, // + 0x969B, 0x8DDB, // + 0x969C, 0x8FE1, // + 0x96A0, 0x8942, // + 0x96A3, 0x97D7, // + 0x96A7, 0xE8A9, // + 0x96A8, 0xE7AC, // + 0x96AA, 0xE8A8, // + 0x96B0, 0xE8AC, // + 0x96B1, 0xE8AA, // + 0x96B2, 0xE8AB, // + 0x96B4, 0xE8AD, // + 0x96B6, 0xE8AE, // + 0x96B7, 0x97EA, // + 0x96B8, 0xE8AF, // + 0x96B9, 0xE8B0, // + 0x96BB, 0x90C7, // + 0x96BC, 0x94B9, // + 0x96C0, 0x909D, // + 0x96C1, 0x8AE5, // + 0x96C4, 0x9759, // + 0x96C5, 0x89EB, // + 0x96C6, 0x8F57, // + 0x96C7, 0x8CD9, // + 0x96C9, 0xE8B3, // + 0x96CB, 0xE8B2, // + 0x96CC, 0x8E93, // + 0x96CD, 0xE8B4, // + 0x96CE, 0xE8B1, // + 0x96D1, 0x8E47, // + 0x96D5, 0xE8B8, // + 0x96D6, 0xE5AB, // + 0x96D9, 0x99D4, // + 0x96DB, 0x9097, // + 0x96DC, 0xE8B6, // + 0x96E2, 0x97A3, // + 0x96E3, 0x93EF, // + 0x96E8, 0x894A, // + 0x96EA, 0x90E1, // + 0x96EB, 0x8EB4, // + 0x96F0, 0x95B5, // + 0x96F2, 0x895F, // + 0x96F6, 0x97EB, // + 0x96F7, 0x978B, // + 0x96F9, 0xE8B9, // + 0x96FB, 0x9364, // + 0x9700, 0x8EF9, // + 0x9704, 0xE8BA, // + 0x9706, 0xE8BB, // + 0x9707, 0x906B, // + 0x9708, 0xE8BC, // + 0x970A, 0x97EC, // + 0x970D, 0xE8B7, // + 0x970E, 0xE8BE, // + 0x970F, 0xE8C0, // + 0x9711, 0xE8BF, // + 0x9713, 0xE8BD, // + 0x9716, 0xE8C1, // + 0x9719, 0xE8C2, // + 0x971C, 0x919A, // + 0x971E, 0x89E0, // + 0x9724, 0xE8C3, // + 0x9727, 0x96B6, // + 0x972A, 0xE8C4, // + 0x9730, 0xE8C5, // + 0x9732, 0x9849, // + 0x9738, 0x9E50, // + 0x9739, 0xE8C6, // + 0x973D, 0xE8C7, // + 0x973E, 0xE8C8, // + 0x9742, 0xE8CC, // + 0x9744, 0xE8C9, // + 0x9746, 0xE8CA, // + 0x9748, 0xE8CB, // + 0x9749, 0xE8CD, // + 0x9752, 0x90C2, // + 0x9756, 0x96F5, // + 0x9759, 0x90C3, // + 0x975C, 0xE8CE, // + 0x975E, 0x94F1, // + 0x9760, 0xE8CF, // + 0x9761, 0xEA72, // + 0x9762, 0x96CA, // + 0x9764, 0xE8D0, // + 0x9766, 0xE8D1, // + 0x9768, 0xE8D2, // + 0x9769, 0x8A76, // + 0x976B, 0xE8D4, // + 0x976D, 0x9078, // + 0x9771, 0xE8D5, // + 0x9774, 0x8C43, // + 0x9779, 0xE8D6, // + 0x977A, 0xE8DA, // + 0x977C, 0xE8D8, // + 0x9781, 0xE8D9, // + 0x9784, 0x8A93, // + 0x9785, 0xE8D7, // + 0x9786, 0xE8DB, // + 0x978B, 0xE8DC, // + 0x978D, 0x88C6, // + 0x978F, 0xE8DD, // + 0x9790, 0xE8DE, // + 0x9798, 0x8FE2, // + 0x979C, 0xE8DF, // + 0x97A0, 0x8B66, // + 0x97A3, 0xE8E2, // + 0x97A6, 0xE8E1, // + 0x97A8, 0xE8E0, // + 0x97AB, 0xE691, // + 0x97AD, 0x95DA, // + 0x97B3, 0xE8E3, // + 0x97B4, 0xE8E4, // + 0x97C3, 0xE8E5, // + 0x97C6, 0xE8E6, // + 0x97C8, 0xE8E7, // + 0x97CB, 0xE8E8, // + 0x97D3, 0x8AD8, // + 0x97DC, 0xE8E9, // + 0x97ED, 0xE8EA, // + 0x97EE, 0x9442, // + 0x97F2, 0xE8EC, // + 0x97F3, 0x89B9, // + 0x97F5, 0xE8EF, // + 0x97F6, 0xE8EE, // + 0x97FB, 0x8943, // + 0x97FF, 0x8BBF, // + 0x9801, 0x95C5, // + 0x9802, 0x92B8, // + 0x9803, 0x8DA0, // + 0x9805, 0x8D80, // + 0x9806, 0x8F87, // + 0x9808, 0x907B, // + 0x980C, 0xE8F1, // + 0x980F, 0xE8F0, // + 0x9810, 0x9761, // + 0x9811, 0x8AE6, // + 0x9812, 0x94D0, // + 0x9813, 0x93DA, // + 0x9817, 0x909C, // + 0x9818, 0x97CC, // + 0x981A, 0x8C7A, // + 0x9821, 0xE8F4, // + 0x9824, 0xE8F3, // + 0x982C, 0x966A, // + 0x982D, 0x93AA, // + 0x9834, 0x896F, // + 0x9837, 0xE8F5, // + 0x9838, 0xE8F2, // + 0x983B, 0x9570, // + 0x983C, 0x978A, // + 0x983D, 0xE8F6, // + 0x9846, 0xE8F7, // + 0x984B, 0xE8F9, // + 0x984C, 0x91E8, // + 0x984D, 0x8A7A, // + 0x984E, 0x8A7B, // + 0x984F, 0xE8F8, // + 0x9854, 0x8AE7, // + 0x9855, 0x8CB0, // + 0x9858, 0x8AE8, // + 0x985B, 0x935E, // + 0x985E, 0x97DE, // + 0x9867, 0x8CDA, // + 0x986B, 0xE8FA, // + 0x986F, 0xE8FB, // + 0x9870, 0xE8FC, // + 0x9871, 0xE940, // + 0x9873, 0xE942, // + 0x9874, 0xE941, // + 0x98A8, 0x9597, // + 0x98AA, 0xE943, // + 0x98AF, 0xE944, // + 0x98B1, 0xE945, // + 0x98B6, 0xE946, // + 0x98C3, 0xE948, // + 0x98C4, 0xE947, // + 0x98C6, 0xE949, // + 0x98DB, 0x94F2, // + 0x98DC, 0xE3CA, // + 0x98DF, 0x9048, // + 0x98E2, 0x8B51, // + 0x98E9, 0xE94A, // + 0x98EB, 0xE94B, // + 0x98ED, 0x99AA, // + 0x98EE, 0x9F5A, // + 0x98EF, 0x94D1, // + 0x98F2, 0x88F9, // + 0x98F4, 0x88B9, // + 0x98FC, 0x8E94, // + 0x98FD, 0x964F, // + 0x98FE, 0x8FFC, // + 0x9903, 0xE94C, // + 0x9905, 0x96DD, // + 0x9909, 0xE94D, // + 0x990A, 0x977B, // + 0x990C, 0x8961, // + 0x9910, 0x8E60, // + 0x9912, 0xE94E, // + 0x9913, 0x89EC, // + 0x9914, 0xE94F, // + 0x9918, 0xE950, // + 0x991D, 0xE952, // + 0x991E, 0xE953, // + 0x9920, 0xE955, // + 0x9921, 0xE951, // + 0x9924, 0xE954, // + 0x9928, 0x8AD9, // + 0x992C, 0xE956, // + 0x992E, 0xE957, // + 0x993D, 0xE958, // + 0x993E, 0xE959, // + 0x9942, 0xE95A, // + 0x9945, 0xE95C, // + 0x994B, 0xE95E, // + 0x994C, 0xE961, // + 0x9950, 0xE95D, // + 0x9951, 0xE95F, // + 0x9952, 0xE960, // + 0x9955, 0xE962, // + 0x9957, 0x8BC0, // + 0x9996, 0x8EF1, // + 0x9997, 0xE963, // + 0x9998, 0xE964, // + 0x9999, 0x8D81, // + 0x99A5, 0xE965, // + 0x99A8, 0x8A5D, // + 0x99AC, 0x946E, // + 0x99AD, 0xE966, // + 0x99AE, 0xE967, // + 0x99B3, 0x9279, // + 0x99B4, 0x93E9, // + 0x99BC, 0xE968, // + 0x99C1, 0x949D, // + 0x99C4, 0x91CA, // + 0x99C5, 0x8977, // + 0x99C6, 0x8BEC, // + 0x99C8, 0x8BED, // + 0x99D0, 0x9293, // + 0x99D1, 0xE96D, // + 0x99D2, 0x8BEE, // + 0x99D5, 0x89ED, // + 0x99D8, 0xE96C, // + 0x99DB, 0xE96A, // + 0x99DD, 0xE96B, // + 0x99DF, 0xE969, // + 0x99E2, 0xE977, // + 0x99ED, 0xE96E, // + 0x99EE, 0xE96F, // + 0x99F1, 0xE970, // + 0x99F2, 0xE971, // + 0x99F8, 0xE973, // + 0x99FB, 0xE972, // + 0x99FF, 0x8F78, // + 0x9A01, 0xE974, // + 0x9A05, 0xE976, // + 0x9A0E, 0x8B52, // + 0x9A0F, 0xE975, // + 0x9A12, 0x919B, // + 0x9A13, 0x8CB1, // + 0x9A19, 0xE978, // + 0x9A28, 0x91CB, // + 0x9A2B, 0xE979, // + 0x9A30, 0x93AB, // + 0x9A37, 0xE97A, // + 0x9A3E, 0xE980, // + 0x9A40, 0xE97D, // + 0x9A42, 0xE97C, // + 0x9A43, 0xE97E, // + 0x9A45, 0xE97B, // + 0x9A4D, 0xE982, // + 0x9A55, 0xE981, // + 0x9A57, 0xE984, // + 0x9A5A, 0x8BC1, // + 0x9A5B, 0xE983, // + 0x9A5F, 0xE985, // + 0x9A62, 0xE986, // + 0x9A64, 0xE988, // + 0x9A65, 0xE987, // + 0x9A69, 0xE989, // + 0x9A6A, 0xE98B, // + 0x9A6B, 0xE98A, // + 0x9AA8, 0x8D9C, // + 0x9AAD, 0xE98C, // + 0x9AB0, 0xE98D, // + 0x9ABC, 0xE98E, // + 0x9AC0, 0xE98F, // + 0x9AC4, 0x9091, // + 0x9ACF, 0xE990, // + 0x9AD1, 0xE991, // + 0x9AD3, 0xE992, // + 0x9AD4, 0xE993, // + 0x9AD8, 0x8D82, // + 0x9ADE, 0xE994, // + 0x9ADF, 0xE995, // + 0x9AE2, 0xE996, // + 0x9AE3, 0xE997, // + 0x9AE6, 0xE998, // + 0x9AEA, 0x94AF, // + 0x9AEB, 0xE99A, // + 0x9AED, 0x9545, // + 0x9AEE, 0xE99B, // + 0x9AEF, 0xE999, // + 0x9AF1, 0xE99D, // + 0x9AF4, 0xE99C, // + 0x9AF7, 0xE99E, // + 0x9AFB, 0xE99F, // + 0x9B06, 0xE9A0, // + 0x9B18, 0xE9A1, // + 0x9B1A, 0xE9A2, // + 0x9B1F, 0xE9A3, // + 0x9B22, 0xE9A4, // + 0x9B23, 0xE9A5, // + 0x9B25, 0xE9A6, // + 0x9B27, 0xE9A7, // + 0x9B28, 0xE9A8, // + 0x9B29, 0xE9A9, // + 0x9B2A, 0xE9AA, // + 0x9B2E, 0xE9AB, // + 0x9B2F, 0xE9AC, // + 0x9B31, 0x9F54, // + 0x9B32, 0xE9AD, // + 0x9B3B, 0xE2F6, // + 0x9B3C, 0x8B53, // + 0x9B41, 0x8A40, // + 0x9B42, 0x8DB0, // + 0x9B43, 0xE9AF, // + 0x9B44, 0xE9AE, // + 0x9B45, 0x96A3, // + 0x9B4D, 0xE9B1, // + 0x9B4E, 0xE9B2, // + 0x9B4F, 0xE9B0, // + 0x9B51, 0xE9B3, // + 0x9B54, 0x9682, // + 0x9B58, 0xE9B4, // + 0x9B5A, 0x8B9B, // + 0x9B6F, 0x9844, // + 0x9B74, 0xE9B5, // + 0x9B83, 0xE9B7, // + 0x9B8E, 0x88BC, // + 0x9B91, 0xE9B8, // + 0x9B92, 0x95A9, // + 0x9B93, 0xE9B6, // + 0x9B96, 0xE9B9, // + 0x9B97, 0xE9BA, // + 0x9B9F, 0xE9BB, // + 0x9BA0, 0xE9BC, // + 0x9BA8, 0xE9BD, // + 0x9BAA, 0x968E, // + 0x9BAB, 0x8E4C, // + 0x9BAD, 0x8DF8, // + 0x9BAE, 0x914E, // + 0x9BB4, 0xE9BE, // + 0x9BB9, 0xE9C1, // + 0x9BC0, 0xE9BF, // + 0x9BC6, 0xE9C2, // + 0x9BC9, 0x8CEF, // + 0x9BCA, 0xE9C0, // + 0x9BCF, 0xE9C3, // + 0x9BD1, 0xE9C4, // + 0x9BD2, 0xE9C5, // + 0x9BD4, 0xE9C9, // + 0x9BD6, 0x8E49, // + 0x9BDB, 0x91E2, // + 0x9BE1, 0xE9CA, // + 0x9BE2, 0xE9C7, // + 0x9BE3, 0xE9C6, // + 0x9BE4, 0xE9C8, // + 0x9BE8, 0x8C7E, // + 0x9BF0, 0xE9CE, // + 0x9BF1, 0xE9CD, // + 0x9BF2, 0xE9CC, // + 0x9BF5, 0x88B1, // + 0x9C04, 0xE9D8, // + 0x9C06, 0xE9D4, // + 0x9C08, 0xE9D5, // + 0x9C09, 0xE9D1, // + 0x9C0A, 0xE9D7, // + 0x9C0C, 0xE9D3, // + 0x9C0D, 0x8A82, // + 0x9C10, 0x986B, // + 0x9C12, 0xE9D6, // + 0x9C13, 0xE9D2, // + 0x9C14, 0xE9D0, // + 0x9C15, 0xE9CF, // + 0x9C1B, 0xE9DA, // + 0x9C21, 0xE9DD, // + 0x9C24, 0xE9DC, // + 0x9C25, 0xE9DB, // + 0x9C2D, 0x9568, // + 0x9C2E, 0xE9D9, // + 0x9C2F, 0x88F1, // + 0x9C30, 0xE9DE, // + 0x9C32, 0xE9E0, // + 0x9C39, 0x8A8F, // + 0x9C3A, 0xE9CB, // + 0x9C3B, 0x8956, // + 0x9C3E, 0xE9E2, // + 0x9C46, 0xE9E1, // + 0x9C47, 0xE9DF, // + 0x9C48, 0x924C, // + 0x9C52, 0x9690, // + 0x9C57, 0x97D8, // + 0x9C5A, 0xE9E3, // + 0x9C60, 0xE9E4, // + 0x9C67, 0xE9E5, // + 0x9C76, 0xE9E6, // + 0x9C78, 0xE9E7, // + 0x9CE5, 0x92B9, // + 0x9CE7, 0xE9E8, // + 0x9CE9, 0x94B5, // + 0x9CEB, 0xE9ED, // + 0x9CEC, 0xE9E9, // + 0x9CF0, 0xE9EA, // + 0x9CF3, 0x9650, // + 0x9CF4, 0x96C2, // + 0x9CF6, 0x93CE, // + 0x9D03, 0xE9EE, // + 0x9D06, 0xE9EF, // + 0x9D07, 0x93BC, // + 0x9D08, 0xE9EC, // + 0x9D09, 0xE9EB, // + 0x9D0E, 0x89A8, // + 0x9D12, 0xE9F7, // + 0x9D15, 0xE9F6, // + 0x9D1B, 0x8995, // + 0x9D1F, 0xE9F4, // + 0x9D23, 0xE9F3, // + 0x9D26, 0xE9F1, // + 0x9D28, 0x8A9B, // + 0x9D2A, 0xE9F0, // + 0x9D2B, 0x8EB0, // + 0x9D2C, 0x89A7, // + 0x9D3B, 0x8D83, // + 0x9D3E, 0xE9FA, // + 0x9D3F, 0xE9F9, // + 0x9D41, 0xE9F8, // + 0x9D44, 0xE9F5, // + 0x9D46, 0xE9FB, // + 0x9D48, 0xE9FC, // + 0x9D50, 0xEA44, // + 0x9D51, 0xEA43, // + 0x9D59, 0xEA45, // + 0x9D5C, 0x894C, // + 0x9D5D, 0xEA40, // + 0x9D5E, 0xEA41, // + 0x9D60, 0x8D94, // + 0x9D61, 0x96B7, // + 0x9D64, 0xEA42, // + 0x9D6C, 0x9651, // + 0x9D6F, 0xEA4A, // + 0x9D72, 0xEA46, // + 0x9D7A, 0xEA4B, // + 0x9D87, 0xEA48, // + 0x9D89, 0xEA47, // + 0x9D8F, 0x8C7B, // + 0x9D9A, 0xEA4C, // + 0x9DA4, 0xEA4D, // + 0x9DA9, 0xEA4E, // + 0x9DAB, 0xEA49, // + 0x9DAF, 0xE9F2, // + 0x9DB2, 0xEA4F, // + 0x9DB4, 0x92DF, // + 0x9DB8, 0xEA53, // + 0x9DBA, 0xEA54, // + 0x9DBB, 0xEA52, // + 0x9DC1, 0xEA51, // + 0x9DC2, 0xEA57, // + 0x9DC4, 0xEA50, // + 0x9DC6, 0xEA55, // + 0x9DCF, 0xEA56, // + 0x9DD3, 0xEA59, // + 0x9DD9, 0xEA58, // + 0x9DED, 0xEA5C, // + 0x9DEF, 0xEA5D, // + 0x9DF2, 0x9868, // + 0x9DF8, 0xEA5A, // + 0x9DF9, 0x91E9, // + 0x9DFA, 0x8DEB, // + 0x9DFD, 0xEA5E, // + 0x9E1A, 0xEA5F, // + 0x9E1B, 0xEA60, // + 0x9E1E, 0xEA61, // + 0x9E75, 0xEA62, // + 0x9E78, 0x8CB2, // + 0x9E79, 0xEA63, // + 0x9E7D, 0xEA64, // + 0x9E7F, 0x8EAD, // + 0x9E81, 0xEA65, // + 0x9E88, 0xEA66, // + 0x9E8B, 0xEA67, // + 0x9E8C, 0xEA68, // + 0x9E91, 0xEA6B, // + 0x9E92, 0xEA69, // + 0x9E95, 0xEA6A, // + 0x9E97, 0x97ED, // + 0x9E9D, 0xEA6C, // + 0x9E9F, 0x97D9, // + 0x9EA5, 0xEA6D, // + 0x9EA6, 0x949E, // + 0x9EA9, 0xEA6E, // + 0x9EAA, 0xEA70, // + 0x9EAD, 0xEA71, // + 0x9EB8, 0xEA6F, // + 0x9EB9, 0x8D8D, // + 0x9EBA, 0x96CB, // + 0x9EBB, 0x9683, // + 0x9EBC, 0x9BF5, // + 0x9EBE, 0x9F80, // + 0x9EBF, 0x969B, // + 0x9EC4, 0x89A9, // + 0x9ECC, 0xEA73, // + 0x9ECD, 0x8B6F, // + 0x9ECE, 0xEA74, // + 0x9ECF, 0xEA75, // + 0x9ED0, 0xEA76, // + 0x9ED2, 0x8D95, // + 0x9ED4, 0xEA77, // + 0x9ED8, 0xE0D2, // + 0x9ED9, 0x96D9, // + 0x9EDB, 0x91E1, // + 0x9EDC, 0xEA78, // + 0x9EDD, 0xEA7A, // + 0x9EDE, 0xEA79, // + 0x9EE0, 0xEA7B, // + 0x9EE5, 0xEA7C, // + 0x9EE8, 0xEA7D, // + 0x9EEF, 0xEA7E, // + 0x9EF4, 0xEA80, // + 0x9EF6, 0xEA81, // + 0x9EF7, 0xEA82, // + 0x9EF9, 0xEA83, // + 0x9EFB, 0xEA84, // + 0x9EFC, 0xEA85, // + 0x9EFD, 0xEA86, // + 0x9F07, 0xEA87, // + 0x9F08, 0xEA88, // + 0x9F0E, 0x9343, // + 0x9F13, 0x8CDB, // + 0x9F15, 0xEA8A, // + 0x9F20, 0x916C, // + 0x9F21, 0xEA8B, // + 0x9F2C, 0xEA8C, // + 0x9F3B, 0x9540, // + 0x9F3E, 0xEA8D, // + 0x9F4A, 0xEA8E, // + 0x9F4B, 0xE256, // + 0x9F4E, 0xE6D8, // + 0x9F4F, 0xE8EB, // + 0x9F52, 0xEA8F, // + 0x9F54, 0xEA90, // + 0x9F5F, 0xEA92, // + 0x9F60, 0xEA93, // + 0x9F61, 0xEA94, // + 0x9F62, 0x97EE, // + 0x9F63, 0xEA91, // + 0x9F66, 0xEA95, // + 0x9F67, 0xEA96, // + 0x9F6A, 0xEA98, // + 0x9F6C, 0xEA97, // + 0x9F72, 0xEA9A, // + 0x9F76, 0xEA9B, // + 0x9F77, 0xEA99, // + 0x9F8D, 0x97B4, // + 0x9F95, 0xEA9C, // + 0x9F9C, 0xEA9D, // + 0x9F9D, 0xE273, // + 0x9FA0, 0xEA9E, // + 0xFF01, 0x8149, // FULLWIDTH EXCLAMATION MARK + 0xFF03, 0x8194, // FULLWIDTH NUMBER SIGN + 0xFF04, 0x8190, // FULLWIDTH DOLLAR SIGN + 0xFF05, 0x8193, // FULLWIDTH PERCENT SIGN + 0xFF06, 0x8195, // FULLWIDTH AMPERSAND + 0xFF07, 0x81AD, // FULLWIDTH APOSTROPHE + 0xFF08, 0x8169, // FULLWIDTH LEFT PARENTHESIS + 0xFF09, 0x816A, // FULLWIDTH RIGHT PARENTHESIS + 0xFF0A, 0x8196, // FULLWIDTH ASTERISK + 0xFF0B, 0x817B, // FULLWIDTH PLUS SIGN + 0xFF0C, 0x8143, // FULLWIDTH COMMA + 0xFF0E, 0x8144, // FULLWIDTH FULL STOP + 0xFF0F, 0x815E, // FULLWIDTH SOLIDUS + 0xFF10, 0x824F, // FULLWIDTH DIGIT ZERO + 0xFF11, 0x8250, // FULLWIDTH DIGIT ONE + 0xFF12, 0x8251, // FULLWIDTH DIGIT TWO + 0xFF13, 0x8252, // FULLWIDTH DIGIT THREE + 0xFF14, 0x8253, // FULLWIDTH DIGIT FOUR + 0xFF15, 0x8254, // FULLWIDTH DIGIT FIVE + 0xFF16, 0x8255, // FULLWIDTH DIGIT SIX + 0xFF17, 0x8256, // FULLWIDTH DIGIT SEVEN + 0xFF18, 0x8257, // FULLWIDTH DIGIT EIGHT + 0xFF19, 0x8258, // FULLWIDTH DIGIT NINE + 0xFF1A, 0x8146, // FULLWIDTH COLON + 0xFF1B, 0x8147, // FULLWIDTH SEMICOLON + 0xFF1C, 0x8183, // FULLWIDTH LESS-THAN SIGN + 0xFF1D, 0x8181, // FULLWIDTH EQUALS SIGN + 0xFF1E, 0x8184, // FULLWIDTH GREATER-THAN SIGN + 0xFF1F, 0x8148, // FULLWIDTH QUESTION MARK + 0xFF20, 0x8197, // FULLWIDTH COMMERCIAL AT + 0xFF21, 0x8260, // FULLWIDTH LATIN CAPITAL LETTER A + 0xFF22, 0x8261, // FULLWIDTH LATIN CAPITAL LETTER B + 0xFF23, 0x8262, // FULLWIDTH LATIN CAPITAL LETTER C + 0xFF24, 0x8263, // FULLWIDTH LATIN CAPITAL LETTER D + 0xFF25, 0x8264, // FULLWIDTH LATIN CAPITAL LETTER E + 0xFF26, 0x8265, // FULLWIDTH LATIN CAPITAL LETTER F + 0xFF27, 0x8266, // FULLWIDTH LATIN CAPITAL LETTER G + 0xFF28, 0x8267, // FULLWIDTH LATIN CAPITAL LETTER H + 0xFF29, 0x8268, // FULLWIDTH LATIN CAPITAL LETTER I + 0xFF2A, 0x8269, // FULLWIDTH LATIN CAPITAL LETTER J + 0xFF2B, 0x826A, // FULLWIDTH LATIN CAPITAL LETTER K + 0xFF2C, 0x826B, // FULLWIDTH LATIN CAPITAL LETTER L + 0xFF2D, 0x826C, // FULLWIDTH LATIN CAPITAL LETTER M + 0xFF2E, 0x826D, // FULLWIDTH LATIN CAPITAL LETTER N + 0xFF2F, 0x826E, // FULLWIDTH LATIN CAPITAL LETTER O + 0xFF30, 0x826F, // FULLWIDTH LATIN CAPITAL LETTER P + 0xFF31, 0x8270, // FULLWIDTH LATIN CAPITAL LETTER Q + 0xFF32, 0x8271, // FULLWIDTH LATIN CAPITAL LETTER R + 0xFF33, 0x8272, // FULLWIDTH LATIN CAPITAL LETTER S + 0xFF34, 0x8273, // FULLWIDTH LATIN CAPITAL LETTER T + 0xFF35, 0x8274, // FULLWIDTH LATIN CAPITAL LETTER U + 0xFF36, 0x8275, // FULLWIDTH LATIN CAPITAL LETTER V + 0xFF37, 0x8276, // FULLWIDTH LATIN CAPITAL LETTER W + 0xFF38, 0x8277, // FULLWIDTH LATIN CAPITAL LETTER X + 0xFF39, 0x8278, // FULLWIDTH LATIN CAPITAL LETTER Y + 0xFF3A, 0x8279, // FULLWIDTH LATIN CAPITAL LETTER Z + 0xFF3B, 0x816D, // FULLWIDTH LEFT SQUARE BRACKET + 0xFF3D, 0x816E, // FULLWIDTH RIGHT SQUARE BRACKET + 0xFF3E, 0x814F, // FULLWIDTH CIRCUMFLEX ACCENT + 0xFF3F, 0x8151, // FULLWIDTH LOW LINE + 0xFF40, 0x814D, // FULLWIDTH GRAVE ACCENT + 0xFF41, 0x8281, // FULLWIDTH LATIN SMALL LETTER A + 0xFF42, 0x8282, // FULLWIDTH LATIN SMALL LETTER B + 0xFF43, 0x8283, // FULLWIDTH LATIN SMALL LETTER C + 0xFF44, 0x8284, // FULLWIDTH LATIN SMALL LETTER D + 0xFF45, 0x8285, // FULLWIDTH LATIN SMALL LETTER E + 0xFF46, 0x8286, // FULLWIDTH LATIN SMALL LETTER F + 0xFF47, 0x8287, // FULLWIDTH LATIN SMALL LETTER G + 0xFF48, 0x8288, // FULLWIDTH LATIN SMALL LETTER H + 0xFF49, 0x8289, // FULLWIDTH LATIN SMALL LETTER I + 0xFF4A, 0x828A, // FULLWIDTH LATIN SMALL LETTER J + 0xFF4B, 0x828B, // FULLWIDTH LATIN SMALL LETTER K + 0xFF4C, 0x828C, // FULLWIDTH LATIN SMALL LETTER L + 0xFF4D, 0x828D, // FULLWIDTH LATIN SMALL LETTER M + 0xFF4E, 0x828E, // FULLWIDTH LATIN SMALL LETTER N + 0xFF4F, 0x828F, // FULLWIDTH LATIN SMALL LETTER O + 0xFF50, 0x8290, // FULLWIDTH LATIN SMALL LETTER P + 0xFF51, 0x8291, // FULLWIDTH LATIN SMALL LETTER Q + 0xFF52, 0x8292, // FULLWIDTH LATIN SMALL LETTER R + 0xFF53, 0x8293, // FULLWIDTH LATIN SMALL LETTER S + 0xFF54, 0x8294, // FULLWIDTH LATIN SMALL LETTER T + 0xFF55, 0x8295, // FULLWIDTH LATIN SMALL LETTER U + 0xFF56, 0x8296, // FULLWIDTH LATIN SMALL LETTER V + 0xFF57, 0x8297, // FULLWIDTH LATIN SMALL LETTER W + 0xFF58, 0x8298, // FULLWIDTH LATIN SMALL LETTER X + 0xFF59, 0x8299, // FULLWIDTH LATIN SMALL LETTER Y + 0xFF5A, 0x829A, // FULLWIDTH LATIN SMALL LETTER Z + 0xFF5B, 0x816F, // FULLWIDTH LEFT CURLY BRACKET + 0xFF5C, 0x8162, // FULLWIDTH VERTICAL LINE + 0xFF5D, 0x8170, // FULLWIDTH RIGHT CURLY BRACKET + 0xFFE3, 0x8150, // FULLWIDTH MACRON + 0xFFE5, 0x818F // FULLWIDTH YEN SIGN +}; diff --git a/backend/svg.c b/backend/svg.c index 98cca3d..6cde463 100644 --- a/backend/svg.c +++ b/backend/svg.c @@ -2,7 +2,7 @@ /* libzint - the open source barcode library - Copyright (C) 2009 - 2020 Robin Stuart + Copyright (C) 2009-2019 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -29,10 +29,10 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ #include #include +#include #include #include #ifdef _MSC_VER @@ -41,36 +41,7 @@ #include "common.h" -void pick_colour(int colour, char colour_code[]) { - switch(colour) { - case 0: // White - strcpy(colour_code, "ffffff"); - break; - case 1: // Cyan - strcpy(colour_code, "00ffff"); - break; - case 2: // Blue - strcpy(colour_code, "0000ff"); - break; - case 3: // Magenta - strcpy(colour_code, "ff00ff"); - break; - case 4: // Red - strcpy(colour_code, "ff0000"); - break; - case 5: // Yellow - strcpy(colour_code, "ffff00"); - break; - case 6: // Green - strcpy(colour_code, "00ff00"); - break; - default: // Black - strcpy(colour_code, "000000"); - break; - } -} - -static void make_html_friendly(unsigned char * string, char * html_version) { +void make_html_friendly(unsigned char * string, char * html_version) { /* Converts text to use HTML entity codes */ int i, html_pos; @@ -78,7 +49,7 @@ static void make_html_friendly(unsigned char * string, char * html_version) { html_pos = 0; html_version[html_pos] = '\0'; - for (i = 0; i < (int) ustrlen(string); i++) { + for (i = 0; i < ustrlen(string); i++) { switch(string[i]) { case '>': strcat(html_version, ">"); @@ -114,7 +85,7 @@ static void make_html_friendly(unsigned char * string, char * html_version) { } } -INTERNAL int svg_plot(struct zint_symbol *symbol) { +int svg_plot(struct zint_symbol *symbol) { FILE *fsvg; int error_number = 0; const char *locale = NULL; @@ -127,15 +98,13 @@ INTERNAL int svg_plot(struct zint_symbol *symbol) { struct zint_vector_circle *circle; struct zint_vector_string *string; - char colour_code[7]; - #ifdef _MSC_VER char* html_string; #endif int html_len = strlen((char *)symbol->text) + 1; - for (i = 0; i < (int) strlen((char *)symbol->text); i++) { + for (0; i < strlen((char *)symbol->text); i++) { switch(symbol->text[i]) { case '>': case '<': @@ -184,12 +153,7 @@ INTERNAL int svg_plot(struct zint_symbol *symbol) { rect = symbol->vector->rectangles; while (rect) { - if (rect->colour == -1) { - fprintf(fsvg, " \n", rect->x, rect->y, rect->width, rect->height); - } else { - pick_colour(rect->colour, colour_code); - fprintf(fsvg, " \n", rect->x, rect->y, rect->width, rect->height, colour_code); - } + fprintf(fsvg, " \n", rect->x, rect->y, rect->width, rect->height); rect = rect->next; } diff --git a/backend/telepen.c b/backend/telepen.c index 9db20b9..1f4be8d 100644 --- a/backend/telepen.c +++ b/backend/telepen.c @@ -29,17 +29,16 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ -/* Telepen Barcode Symbology information and History (BSiH) https://telepen.co.uk/wp-content/uploads/2018/10/Barcode-Symbology-information-and-History.pdf */ - -#define SODIUM "0123456789X" +#define SODIUM "0123456789X" +#include #include +#include #include "common.h" static char *TeleTable[] = { - "31313131", "1131313111", "33313111", "1111313131", "3111313111", "11333131", "13133131", "111111313111", + "1111111111111111", "1131313111", "33313111", "1111313131", "3111313111", "11333131", "13133131", "111111313111", "31333111", "1131113131", "33113131", "1111333111", "3111113131", "1113133111", "1311133111", "111111113131", "3131113111", "11313331", "333331", "111131113111", "31113331", "1133113111", "1313113111", "1111113331", "31131331", "113111113111", "3311113111", "1111131331", "311111113111", "1113111331", "1311111331", "11111111113111", @@ -49,18 +48,18 @@ static char *TeleTable[] = { "3113111311", "113111111131", "3311111131", "111113111311", "311111111131", "111311111311", "131111111311", "11111111111131", "3131311111", "11313133", "333133", "111131311111", "31113133", "1133311111", "1313311111", "1111113133", "313333", "113111311111", "3311311111", "11113333", "311111311111", "11131333", "13111333", "11111111311111", - "31311133", "1131331111", "33331111", "1111311133", "3111331111", "11331133", "13131133", "111111331111", + "31311133", "1131331111", "33331111", " 1111311133", "3111331111", "11331133", "13131133", "111111331111", "3113131111", "1131111133", "33111133", "111113131111", "3111111133", "111311131111", "131111131111", "111111111133", "31311313", "113131111111", "3331111111", "1111311313", "311131111111", "11331313", "13131313", "11111131111111", "3133111111", "1131111313", "33111313", "111133111111", "3111111313", "111313111111", "131113111111", "111111111313", "313111111111", "1131131113", "33131113", "11113111111111", "3111131113", "113311111111", "131311111111", "111111131113", - "3113111113", "11311111111111", "331111111111", "111113111113", "31111111111111", "111311111113", "131111111113", "1111111111111111", + "3113111113", "11311111111111", "331111111111", "111113111113", "31111111111111", "111311111113", "131111111113" }; -INTERNAL int telepen(struct zint_symbol *symbol, unsigned char source[], const size_t src_len) { +int telepen(struct zint_symbol *symbol, unsigned char source[], const size_t src_len) { unsigned int i, count, check_digit; int error_number; - char dest[521]; /* 12 (start) + 30 * 16 (max for DELs) + 16 (check digit) + 12 (stop) + 1 = 521 */ + char dest[512]; /*14 + 30 * 14 + 14 + 14 + 1 ~ 512 */ error_number = 0; @@ -74,7 +73,7 @@ INTERNAL int telepen(struct zint_symbol *symbol, unsigned char source[], const s strcpy(dest, TeleTable['_']); for (i = 0; i < src_len; i++) { - if (source[i] > 127) { + if (source[i] > 126) { /* Cannot encode extended ASCII */ strcpy(symbol->errtxt, "391: Invalid characters in input data"); return ZINT_ERROR_INVALID_DATA; @@ -104,11 +103,11 @@ INTERNAL int telepen(struct zint_symbol *symbol, unsigned char source[], const s return error_number; } -INTERNAL int telepen_num(struct zint_symbol *symbol, unsigned char source[], const size_t src_len) { +int telepen_num(struct zint_symbol *symbol, unsigned char source[], const size_t src_len) { unsigned int count, check_digit, glyph; int error_number; - size_t i, temp_length = src_len; - char dest[521]; /* 12 (start) + 30 * 16 (max for DELs) + 16 (check digit) + 12 (stop) + 1 = 521 */ + size_t i,temp_length = src_len; + char dest[1024]; /* 14 + 60 * 14 + 14 + 14 + 1 ~ 1024 */ unsigned char temp[64]; count = 0; @@ -166,3 +165,4 @@ INTERNAL int telepen_num(struct zint_symbol *symbol, unsigned char source[], con ustrcpy(symbol->text, temp); return error_number; } + diff --git a/backend/tif.c b/backend/tif.c index 0e29691..83f86ea 100644 --- a/backend/tif.c +++ b/backend/tif.c @@ -1,9 +1,8 @@ /* tif.c - Aldus Tagged Image File Format support */ -/* TIFF Revision 6.0 https://www.adobe.io/content/dam/udp/en/open/standards/tiff/TIFF6.pdf */ /* libzint - the open source barcode library - Copyright (C) 2016 - 2020 Robin Stuart + Copyright (C) 2016-2017 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -30,11 +29,11 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ #include +#include +#include #include -#include #include "common.h" #include "tif.h" #ifdef _MSC_VER @@ -43,13 +42,20 @@ #include #endif -INTERNAL int tif_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) { +int tbump_up(int input) { + /* Strings length must be a multiple of 4 bytes */ + if ((input % 2) == 1) { + input++; + } + return input; +} + +int tif_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) { int fgred, fggrn, fgblu, bgred, bggrn, bgblu; int i; int rows_per_strip, strip_count; - unsigned int free_memory; - int row, column, strip; - unsigned int bytes_put; + int free_memory; + int row, column, strip, bytes_put; FILE *tif_file; #ifdef _MSC_VER uint32_t* strip_offset; @@ -68,30 +74,25 @@ INTERNAL int tif_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) { bggrn = (16 * ctoi(symbol->bgcolour[2])) + ctoi(symbol->bgcolour[3]); bgblu = (16 * ctoi(symbol->bgcolour[4])) + ctoi(symbol->bgcolour[5]); - /* TIFF Rev 6 Section 7 p.27 "Set RowsPerStrip such that the size of each strip is about 8K bytes... - * Note that extremely wide high resolution images may have rows larger than 8K bytes; in this case, - * RowsPerStrip should be 1, and the strip will be larger than 8K." */ rows_per_strip = 8192 / (symbol->bitmap_width * 3); if (rows_per_strip == 0) { rows_per_strip = 1; } - /* Suppresses clang-tidy clang-analyzer-core.VLASize warning */ - assert(symbol->bitmap_height > 0); - strip_count = symbol->bitmap_height / rows_per_strip; if ((symbol->bitmap_height % rows_per_strip) != 0) { strip_count++; } - + if (rows_per_strip > symbol->bitmap_height) { rows_per_strip = symbol->bitmap_height; } - - if (symbol->debug & ZINT_DEBUG_PRINT) { - printf("TIFF (%dx%d) Strip Count %d, Rows Per Strip %d\n", symbol->bitmap_width, symbol->bitmap_height, strip_count, rows_per_strip); + + if (strip_count == 1) { + rows_per_strip = (rows_per_strip / 2) + 1; + strip_count++; } - + #ifndef _MSC_VER uint32_t strip_offset[strip_count]; uint32_t strip_bytes[strip_count]; @@ -119,6 +120,10 @@ INTERNAL int tif_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) { } if (free_memory > 0xffff0000) { +#ifdef _MSC_VER + free(strip_offset); + free(strip_bytes); +#endif strcpy(symbol->errtxt, "670: Output file size too big"); return ZINT_ERROR_MEMORY; } @@ -146,68 +151,25 @@ INTERNAL int tif_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) { fwrite(&header, sizeof(tiff_header_t), 1, tif_file); free_memory += sizeof(tiff_ifd_t); - + /* Pixel data */ strip = 0; bytes_put = 0; for (row = 0; row < symbol->bitmap_height; row++) { for (column = 0; column < symbol->bitmap_width; column++) { - switch(pixelbuf[(row * symbol->bitmap_width) + column]) { - case 'W': // White - putc(255, tif_file); - putc(255, tif_file); - putc(255, tif_file); - break; - case 'C': // Cyan - putc(0, tif_file); - putc(255, tif_file); - putc(255, tif_file); - break; - case 'B': // Blue - putc(0, tif_file); - putc(0, tif_file); - putc(255, tif_file); - break; - case 'M': // Magenta - putc(255, tif_file); - putc(0, tif_file); - putc(255, tif_file); - break; - case 'R': // Red - putc(255, tif_file); - putc(0, tif_file); - putc(0, tif_file); - break; - case 'Y': // Yellow - putc(255, tif_file); - putc(255, tif_file); - putc(0, tif_file); - break; - case 'G': // Green - putc(0, tif_file); - putc(255, tif_file); - putc(0, tif_file); - break; - case 'K': // Black - putc(0, tif_file); - putc(0, tif_file); - putc(0, tif_file); - break; - case '1': - putc(fgred, tif_file); - putc(fggrn, tif_file); - putc(fgblu, tif_file); - break; - default: - putc(bgred, tif_file); - putc(bggrn, tif_file); - putc(bgblu, tif_file); - break; + if (pixelbuf[(row * symbol->bitmap_width) + column] == '1') { + putc(fgred, tif_file); + putc(fggrn, tif_file); + putc(fgblu, tif_file); + } else { + putc(bgred, tif_file); + putc(bggrn, tif_file); + putc(bgblu, tif_file); } bytes_put += 3; } - - if (strip < strip_count && (bytes_put + 3) >= strip_bytes[strip]) { + + if ((bytes_put + 3) >= strip_bytes[strip]) { // End of strip, pad if strip length is odd if (strip_bytes[strip] % 2 == 1) { putc(0, tif_file); @@ -255,12 +217,8 @@ INTERNAL int tif_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) { ifd.strip_offsets.tag = 0x0111; ifd.strip_offsets.type = 4; // LONG ifd.strip_offsets.count = strip_count; - if (strip_count == 1) { - ifd.strip_offsets.offset = strip_offset[0]; - } else { - ifd.strip_offsets.offset = free_memory; - free_memory += strip_count * 4; - } + ifd.strip_offsets.offset = free_memory; + free_memory += strip_count * 4; ifd.samples_per_pixel.tag = 0x0115; ifd.samples_per_pixel.type = 3; @@ -275,12 +233,8 @@ INTERNAL int tif_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) { ifd.strip_byte_counts.tag = 0x0117; ifd.strip_byte_counts.type = 4; ifd.strip_byte_counts.count = strip_count; - if (strip_count == 1) { - ifd.strip_byte_counts.offset = strip_bytes[0]; - } else { - ifd.strip_byte_counts.offset = free_memory; - free_memory += strip_count * 4; - } + ifd.strip_byte_counts.offset = free_memory; + free_memory += strip_count * 4; ifd.x_resolution.tag = 0x011a; ifd.x_resolution.type = 5; @@ -312,16 +266,14 @@ INTERNAL int tif_pixel_plot(struct zint_symbol *symbol, char *pixelbuf) { fwrite(&temp, 2, 1, tif_file); // Green Bytes fwrite(&temp, 2, 1, tif_file); // Blue Bytes - if (strip_count != 1) { - /* Strip offsets */ - for (i = 0; i < strip_count; i++) { - fwrite(&strip_offset[i], 4, 1, tif_file); - } + /* Strip offsets */ + for(i = 0; i < strip_count; i++) { + fwrite(&strip_offset[i], 4, 1, tif_file); + } - /* Strip byte lengths */ - for (i = 0; i < strip_count; i++) { - fwrite(&strip_bytes[i], 4, 1, tif_file); - } + /* Strip byte lengths */ + for(i = 0; i < strip_count; i++) { + fwrite(&strip_bytes[i], 4, 1, tif_file); } /* X Resolution */ diff --git a/backend/ultra.c b/backend/ultra.c index 58d0da8..da5cfb3 100644 --- a/backend/ultra.c +++ b/backend/ultra.c @@ -1,7 +1,7 @@ /* ultra.c - Ultracode libzint - the open source barcode library - Copyright (C) 2020 Robin Stuart + Copyright (C) 2019 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -28,1088 +28,14 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ - /* This version was developed using AIMD/TSC15032-43 v0.99c Edit 60, dated 4th Nov 2015 */ - -#ifdef _MSC_VER -#include -#endif #include +#include #include "common.h" -#define EIGHTBIT_MODE 10 -#define ASCII_MODE 20 -#define C43_MODE 30 - -#define PREDICT_WINDOW 12 - -#define GFMUL(i, j) ((((i) == 0)||((j) == 0)) ? 0 : gfPwr[(gfLog[i] + gfLog[j])]) - -static const char fragment[27][14] = {"http://", "https://", "http://www.", "https://www.", - "ftp://", "www.", ".com", ".edu", ".gov", ".int", ".mil", ".net", ".org", - ".mobi", ".coop", ".biz", ".info", "mailto:", "tel:", ".cgi", ".asp", - ".aspx", ".php", ".htm", ".html", ".shtml", "file:"}; - -static const char ultra_c43_set1[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 .,%"; -static const char ultra_c43_set2[] = "abcdefghijklmnopqrstuvwxyz:/?#[]@=_~!.,-"; -static const char ultra_c43_set3[] = "{}`()\"+'<>|$;&\\^*"; -static const char ultra_digit[] = "0123456789,/"; -static const char ultra_colour[] = "WCBMRYGK"; - -//static const int ultra_maxsize[] = {34, 78, 158, 282}; // According to Table 1 -static const int ultra_maxsize[] = {34, 81, 158, 282}; // Adjusted to allow 79-81 codeword range in 3-row symbols (only 1 secondary vertical clock track, not 2, so 3 extra) - -static const int ultra_mincols[] = {5, 13, 23, 30}; // # Total Tile Columns from Table 1 - -static const int kec[] = {0, 1, 2, 4, 6, 8}; // Value K(EC) from Table 12 - -static const int dccu[] = { - 051363, 051563, 051653, 053153, 053163, 053513, 053563, 053613, // 0-7 - 053653, 056153, 056163, 056313, 056353, 056363, 056513, 056563, // 8-15 - 051316, 051356, 051536, 051616, 053156, 053516, 053536, 053616, // 16-23 - 053636, 053656, 056136, 056156, 056316, 056356, 056516, 056536 // 24-31 -}; - -static const int dccl[] = { - 061351, 061361, 061531, 061561, 061631, 061651, 063131, 063151, // 0-7 - 063161, 063531, 063561, 063631, 065131, 065161, 065351, 065631, // 8-15 - 031351, 031361, 031531, 031561, 031631, 031651, 035131, 035151, // 16-23 - 035161, 035361, 035631, 035651, 036131, 036151, 036351, 036531 // 24-31 -}; - -static const int tiles[] = { - 013135, 013136, 013153, 013156, 013163, 013165, 013513, 013515, 013516, 013531, // 0-9 - 013535, 013536, 013561, 013563, 013565, 013613, 013615, 013616, 013631, 013635, // 10-19 - 013636, 013651, 013653, 013656, 015135, 015136, 015153, 015163, 015165, 015313, // 20-29 - 015315, 015316, 015351, 015353, 015356, 015361, 015363, 015365, 015613, 015615, // 30-39 - 015616, 015631, 015635, 015636, 015651, 015653, 015656, 016135, 016136, 016153, // 40-49 - 016156, 016165, 016313, 016315, 016316, 016351, 016353, 016356, 016361, 016363, // 50-59 - 016365, 016513, 016515, 016516, 016531, 016535, 016536, 016561, 016563, 016565, // 60-69 - 031315, 031316, 031351, 031356, 031361, 031365, 031513, 031515, 031516, 031531, // 70-79 - 031535, 031536, 031561, 031563, 031565, 031613, 031615, 031631, 031635, 031636, // 80-89 - 031651, 031653, 031656, 035131, 035135, 035136, 035151, 035153, 035156, 035161, // 90-99 - 035163, 035165, 035315, 035316, 035351, 035356, 035361, 035365, 035613, 035615, // 100-109 - 035616, 035631, 035635, 035636, 035651, 035653, 035656, 036131, 036135, 036136, // 110-119 - 036151, 036153, 036156, 036163, 036165, 036315, 036316, 036351, 036356, 036361, // 120-129 - 036365, 036513, 036515, 036516, 036531, 036535, 036536, 036561, 036563, 036565, // 130-139 - 051313, 051315, 051316, 051351, 051353, 051356, 051361, 051363, 051365, 051513, // 140-149 - 051516, 051531, 051536, 051561, 051563, 051613, 051615, 051616, 051631, 051635, // 150-159 - 051636, 051651, 051653, 051656, 053131, 053135, 053136, 053151, 053153, 053156, // 160-169 - 053161, 053163, 053165, 053513, 053516, 053531, 053536, 053561, 053563, 053613, // 170-179 - 053615, 053616, 053631, 053635, 053636, 053651, 053653, 053656, 056131, 056135, // 180-189 - 056136, 056151, 056153, 056156, 056161, 056163, 056165, 056313, 056315, 056316, // 190-199 - 056351, 056353, 056356, 056361, 056363, 056365, 056513, 056516, 056531, 056536, // 200-209 - 056561, 056563, 061313, 061315, 061316, 061351, 061353, 061356, 061361, 061363, // 210-219 - 061365, 061513, 061515, 061516, 061531, 061535, 061536, 061561, 061563, 061565, // 220-229 - 061615, 061631, 061635, 061651, 061653, 063131, 063135, 063136, 063151, 063153, // 230-239 - 063156, 063161, 063163, 063165, 063513, 063515, 063516, 063531, 063535, 063536, // 240-249 - 063561, 063563, 063565, 063613, 063615, 063631, 063635, 063651, 063653, 065131, // 250-259 - 065135, 065136, 065151, 065153, 065156, 065161, 065163, 065165, 065313, 065315, // 260-269 - 065316, 065351, 065353, 065356, 065361, 065363, 065365, 065613, 065615, 065631, // 270-279 - 065635, 065651, 065653, 056565, 051515 // 280-284 -}; - -/* The following adapted from ECC283.C "RSEC codeword generator" - * from Annex B of Ultracode draft - * originally written by Ted Williams of Symbol Vision Corp. - * Dated 2001-03-09 - * Corrected thanks to input from Terry Burton */ - -/* - * NOTE: Included here is an attempt to allow code compression within Ultracode. Unfortunately - * the copy of the standard this was written from was an early draft which includes self - * contradictions, so this is a "best guess" implementation. Because it is not guaranteed - * to be correct this compression is not applied by default. To enable compression set - * - * symbol->option_3 = ULTRA_COMPRESSION; - * - * Code compression should be enabled by default when it has been implemented according to - * a more reliable version of the specification. - */ - -/* Generate divisor polynomial gQ(x) for GF283() given the required ECC size, 3 to 101 */ -static void ultra_genPoly(short EccSize, unsigned short gPoly[], unsigned short gfPwr[], unsigned short gfLog[]) { - int i, j; - - gPoly[0] = 1; - for (i = 1; i < (EccSize + 1); i++) gPoly[i] = 0; - - for (i = 0; i < EccSize; i++) { - for (j = i; j >= 0; j--) - gPoly[j + 1] = (gPoly[j] + GFMUL(gPoly[j + 1], gfPwr[i + 1])) % 283; - gPoly[0] = GFMUL(gPoly[0], gfPwr[i + 1]); - } - for (i = EccSize - 1; i >= 0; i -= 2) gPoly[i] = 283 - gPoly[i]; - - /* gPoly[i] is > 0 so modulo operation not needed */ -} - -/* Generate the log and antilog tables for GF283() multiplication & division */ -static void ultra_initLogTables(unsigned short gfPwr[], unsigned short gfLog[]) { - int i, j; - - for (j = 0; j < 283; j++) gfLog[j] = 0; - i = 1; - for (j = 0; j < 282; j++) { - /* j + 282 indicies save doing the modulo operation in GFMUL */ - gfPwr[j + 282] = gfPwr[j] = (short) i; - gfLog[i] = (short) j; - i = (i * 3) % 283; - } -} - -static void ultra_gf283(short DataSize, short EccSize, int Message[]) { - /* Input is complete message codewords in array Message[282] - * DataSize is number of message codewords - * EccSize is number of Reed-Solomon GF(283) check codewords to generate - * - * Upon exit, Message[282] contains complete 282 codeword Symbol Message - * including leading zeroes corresponding to each truncated codeword */ - - unsigned short gPoly[283], gfPwr[(282 * 2)], gfLog[283]; - int i, j, n; - unsigned short t; - - /* first build the log & antilog tables used in multiplication & division */ - ultra_initLogTables(gfPwr, gfLog); - - /* then generate the division polynomial of length EccSize */ - ultra_genPoly(EccSize, gPoly, gfPwr, gfLog); - - /* zero all EccSize codeword values */ - for (j = 281; (j > (281 - EccSize)); j--) Message[j] = 0; - - /* shift message codewords to the right, leave space for ECC checkwords */ - for (i = DataSize - 1; (i >= 0); j--, i--) Message[j] = Message[i]; - - /* add zeroes to pad left end Message[] for truncated codewords */ - j++; - for (i = 0; i < j; i++) Message[i] = 0; - - /* generate (EccSize) Reed-Solomon checkwords */ - for (n = j; n < (j + DataSize); n++) { - t = (Message[j + DataSize] + Message[n]) % 283; - for (i = 0; i < (EccSize - 1); i++) { - Message[j + DataSize + i] = (Message[j + DataSize + i + 1] + 283 - - GFMUL(t, gPoly[EccSize - 1 - i])) % 283; - } - Message[j + DataSize + EccSize - 1] = (283 - GFMUL(t, gPoly[0])) % 283; - } - for (i = j + DataSize; i < (j + DataSize + EccSize); i++) - Message[i] = (283 - Message[i]) % 283; -} - -/* End of Ted Williams code */ - -static int ultra_find_fragment(const unsigned char source[], int source_length, int position) { - int retval = -1; - int j, k, latch, fraglen; - - for (j = 0; j < 27; j++) { - latch = 0; - fraglen = strlen(fragment[j]); - if ((position + fraglen) <= source_length) { - latch = 1; - for (k = 0; k < fraglen; k++) { - if (source[position + k] != fragment[j][k]) { - latch = 0; - break; - } - } - } - - if (latch) { - retval = j; - } - } - - return retval; -} - -/* Encode characters in 8-bit mode */ -static float look_ahead_eightbit(unsigned char source[], int in_length, int in_locn, char current_mode, int end_char, int cw[], int* cw_len, int gs1) -{ - int codeword_count = 0; - int i; - int letters_encoded = 0; - - if (current_mode != EIGHTBIT_MODE) { - cw[codeword_count] = 282; // Unlatch - codeword_count += 1; - } - - i = in_locn; - while ((i < in_length) && (i < end_char)) { - if ((source[i] == '[') && gs1) { - cw[codeword_count] = 268; // FNC1 - } else { - cw[codeword_count] = source[i]; - } - i++; - codeword_count++; - } - - letters_encoded = i - in_locn; - - *cw_len = codeword_count; - - if (codeword_count == 0) { - return 0.0; - } else { - return (float)letters_encoded / (float)codeword_count; - } -} - -/* Encode character in the ASCII mode/submode (including numeric compression) */ -static float look_ahead_ascii(unsigned char source[], int in_length, int in_locn, char current_mode, int symbol_mode, int end_char, int cw[], int* cw_len, int* encoded, int gs1) { - int codeword_count = 0; - int i; - int first_digit, second_digit, done; - int letters_encoded = 0; - - if (current_mode == EIGHTBIT_MODE) { - cw[codeword_count] = 267; // Latch ASCII Submode - codeword_count++; - } - - if (current_mode == C43_MODE) { - cw[codeword_count] = 282; // Unlatch - codeword_count++; - if (symbol_mode == EIGHTBIT_MODE) { - cw[codeword_count] = 267; // Latch ASCII Submode - codeword_count++; - } - } - - i = in_locn; - do { - /* Check for double digits */ - done = 0; - if (i + 1 < in_length) { - first_digit = posn(ultra_digit, source[i]); - second_digit = posn(ultra_digit, source[i + 1]); - if ((first_digit != -1) && (second_digit != -1)) { - /* Double digit can be encoded */ - if ((first_digit >= 0) && (first_digit <= 9) && (second_digit >= 0) && (second_digit <= 9)) { - /* Double digit numerics */ - cw[codeword_count] = (10 * first_digit) + second_digit + 128; - codeword_count++; - i += 2; - done = 1; - } else if ((first_digit >= 0) && (first_digit <= 9) && (second_digit == 10)) { - /* Single digit followed by selected decimal point character */ - cw[codeword_count] = first_digit + 228; - codeword_count++; - i += 2; - done = 1; - } else if ((first_digit == 10) && (second_digit >= 0) && (second_digit <= 9)) { - /* Selected decimal point character followed by single digit */ - cw[codeword_count] = second_digit + 238; - codeword_count++; - i += 2; - done = 1; - } else if ((first_digit >= 0) && (first_digit <= 9) && (second_digit == 11)) { - /* Single digit or decimal point followed by field deliminator */ - cw[codeword_count] = first_digit + 248; - codeword_count++; - i += 2; - done = 1; - } else if ((first_digit == 11) && (second_digit >= 0) && (second_digit <= 9)) { - /* Field deliminator followed by single digit or decimal point */ - cw[codeword_count] = second_digit + 259; - codeword_count++; - i += 2; - done = 1; - } - } - } - - if (!done && source[i] < 0x80) { - if ((source[i] == '[') && gs1) { - cw[codeword_count] = 272; // FNC1 - } else { - cw[codeword_count] = source[i]; - } - codeword_count++; - i++; - } - } while ((i < in_length) && (i < end_char) && (source[i] < 0x80)); - - letters_encoded = i - in_locn; - if (encoded != NULL) { - *encoded = letters_encoded; - } - - *cw_len = codeword_count; - - if (codeword_count == 0) { - return 0.0; - } else { - return (float)letters_encoded / (float)codeword_count; - } -} - -/* Returns true if should latch to subset other than given `subset` */ -static int c43_should_latch_other(const unsigned char data[], const size_t length, const unsigned int locn, int subset, int gs1) { - unsigned int i, fraglen, predict_window; - int cnt, alt_cnt, fragno; - const char* set = subset == 1 ? ultra_c43_set1 : ultra_c43_set2; - const char* alt_set = subset == 2 ? ultra_c43_set1 : ultra_c43_set2; - - if (locn + 3 > length) { - return 0; - } - predict_window = locn + 3; - - for (i = locn, cnt = 0, alt_cnt = 0; i < predict_window; i++) { - if (data[i] <= 0x1F || data[i] >= 0x7F || (gs1 && data[i] == '[')) { - break; - } - - fragno = ultra_find_fragment(data, length, i); - if (fragno != -1 && fragno != 26) { - fraglen = strlen(fragment[fragno]); - predict_window += fraglen; - if (predict_window > length) { - predict_window = length; - } - i += fraglen - 1; - } else { - if (strchr(set, data[i]) != NULL) { - cnt++; - } - if (strchr(alt_set, data[i]) != NULL) { - alt_cnt++; - } - } - } - - return alt_cnt > cnt; -} - -static int get_subset(unsigned char source[], int in_length, int in_locn, int current_subset) { - int fragno; - int subset = 0; - - fragno = ultra_find_fragment(source, in_length, in_locn); - if ((fragno != -1) && (fragno != 26)) { - subset = 3; - } else if (current_subset == 2) { - if (posn(ultra_c43_set2, source[in_locn]) != -1) { - subset = 2; - } else if (posn(ultra_c43_set1, source[in_locn]) != -1) { - subset = 1; - } - } else { - if (posn(ultra_c43_set1, source[in_locn]) != -1) { - subset = 1; - } else if (posn(ultra_c43_set2, source[in_locn]) != -1) { - subset = 2; - } - } - - if (subset == 0) { - if (posn(ultra_c43_set3, source[in_locn]) != -1) { - subset = 3; - } - } - - return subset; -} - -/* Encode characters in the C43 compaction submode */ -static float look_ahead_c43(unsigned char source[], int in_length, int in_locn, char current_mode, int end_char, int subset, int cw[], int* cw_len, int* encoded, int gs1, int debug) { - int codeword_count = 0; - int subcodeword_count = 0; - int i; - int fragno; - int sublocn = in_locn; - int new_subset; - int unshift_set; - int base43_value; - int letters_encoded = 0; - int pad; - -#ifndef _MSC_VER - int subcw[(in_length + 3) * 2]; -#else - int * subcw = (int *) _alloca((in_length + 3) * 2 * sizeof (int)); -#endif /* _MSC_VER */ - - if (current_mode == EIGHTBIT_MODE) { - /* Check for permissable URL C43 macro sequences, otherwise encode directly */ - fragno = ultra_find_fragment(source, in_length, sublocn); - - if ((fragno == 2) || (fragno == 3)) { - // http://www. > http:// - // https://www. > https:// - fragno -= 2; - } - - switch(fragno) { - case 17: // mailto: - cw[codeword_count] = 276; - sublocn += strlen(fragment[fragno]); - codeword_count++; - break; - case 18: // tel: - cw[codeword_count] = 277; - sublocn += strlen(fragment[fragno]); - codeword_count++; - break; - case 26: // file: - cw[codeword_count] = 278; - sublocn += strlen(fragment[fragno]); - codeword_count++; - break; - case 0: // http:// - cw[codeword_count] = 279; - sublocn += strlen(fragment[fragno]); - codeword_count++; - break; - case 1: // https:// - cw[codeword_count] = 280; - sublocn += strlen(fragment[fragno]); - codeword_count++; - break; - case 4: // ftp:// - cw[codeword_count] = 281; - sublocn += strlen(fragment[fragno]); - codeword_count++; - break; - default: - if (subset == 1) { - cw[codeword_count] = 260; // C43 Compaction Submode C1 - codeword_count++; - } - - if ((subset == 2) || (subset == 3)) { - cw[codeword_count] = 266; // C43 Compaction Submode C2 - codeword_count++; - } - break; - } - } - - if (current_mode == ASCII_MODE) { - if (subset == 1) { - cw[codeword_count] = 278; // C43 Compaction Submode C1 - codeword_count++; - } - - if ((subset == 2) || (subset == 3)) { - cw[codeword_count] = 280; // C43 Compaction Submode C2 - codeword_count++; - } - } - unshift_set = subset; - - while ((sublocn < in_length) && (sublocn < end_char)) { - /* Check for FNC1 */ - if (gs1 && source[sublocn] == '[') { - break; - } - - new_subset = get_subset(source, in_length, sublocn, subset); - - if (new_subset == 0) { - break; - } - - if ((new_subset != subset) && ((new_subset == 1) || (new_subset == 2))) { - if (c43_should_latch_other(source, in_length, sublocn, subset, gs1)) { - subcw[subcodeword_count] = 42; // Latch to other C43 set - subcodeword_count++; - unshift_set = new_subset; - } else { - subcw[subcodeword_count] = 40; // Shift to other C43 set for 1 char - subcodeword_count++; - subcw[subcodeword_count] = posn(new_subset == 1 ? ultra_c43_set1 : ultra_c43_set2, source[sublocn]); - subcodeword_count++; - sublocn++; - continue; - } - } - - subset = new_subset; - - if (subset == 1) { - subcw[subcodeword_count] = posn(ultra_c43_set1, source[sublocn]); - subcodeword_count++; - sublocn++; - } - - if (subset == 2) { - subcw[subcodeword_count] = posn(ultra_c43_set2, source[sublocn]); - subcodeword_count++; - sublocn++; - } - - if (subset == 3) { - subcw[subcodeword_count] = 41; // Shift to set 3 - subcodeword_count++; - - fragno = ultra_find_fragment(source, in_length, sublocn); - if (fragno == 26) { - fragno = -1; - } - if ((fragno >= 0) && (fragno <= 18)) { - subcw[subcodeword_count] = fragno; // C43 Set 3 codewords 0 to 18 - subcodeword_count++; - sublocn += strlen(fragment[fragno]); - } - if ((fragno >= 19) && (fragno <= 25)) { - subcw[subcodeword_count] = fragno + 17; // C43 Set 3 codewords 36 to 42 - subcodeword_count++; - sublocn += strlen(fragment[fragno]); - } - if (fragno == -1) { - subcw[subcodeword_count] = posn(ultra_c43_set3, source[sublocn]) + 19; // C43 Set 3 codewords 19 to 35 - subcodeword_count++; - sublocn++; - } - subset = unshift_set; - } - } - - pad = 3 - (subcodeword_count % 3); - if (pad == 3) { - pad = 0; - } - - for (i = 0; i < pad; i++) { - subcw[subcodeword_count] = 42; // Latch to other C43 set used as pad - subcodeword_count++; - } - - if (debug & ZINT_DEBUG_PRINT) { - printf("C43 codewords %.*s: (%d)", in_length, source + in_locn, subcodeword_count); - for (i = 0; i < subcodeword_count; i++) printf( " %d", subcw[i]); - printf("\n"); - } - - letters_encoded = sublocn - in_locn; - if (encoded != NULL) { - *encoded = letters_encoded; - } - - for (i = 0; i < subcodeword_count; i += 3) { - base43_value = (43 * 43 * subcw[i]) + (43 * subcw[i + 1]) + subcw[i + 2]; - cw[codeword_count] = base43_value / 282; - codeword_count++; - cw[codeword_count] = base43_value % 282; - codeword_count++; - } - - *cw_len = codeword_count; - - if (codeword_count == 0) { - return 0.0; - } else { - return (float)letters_encoded / (float)codeword_count; - } -} - -/* Produces a set of codewords which are "somewhat" optimised - this could be improved on */ -static int ultra_generate_codewords(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length, int codewords[]) { - int i; - int crop_length; - int codeword_count = 0; - int input_locn = 0; - char symbol_mode; - char current_mode; - int subset; - float eightbit_score; - float ascii_score; - float c43_score; - int end_char; - int block_length; - int fragment_length; - int fragno; - int gs1 = 0; - int ascii_encoded, c43_encoded; - -#ifndef _MSC_VER - unsigned char crop_source[in_length + 1]; - char mode[in_length + 1]; - int cw_fragment[in_length * 2 + 1]; -#else - unsigned char * crop_source = (unsigned char *) _alloca((in_length + 1) * sizeof (unsigned char)); - char * mode = (char *) _alloca((in_length + 1) * sizeof (char)); - int * cw_fragment = (int *) _alloca((in_length * 2 + 1) * sizeof (int)); -#endif /* _MSC_VER */ - - if ((symbol->input_mode & 0x07) == GS1_MODE) { - gs1 = 1; - } - - // Decide start character codeword (from Table 5) - symbol_mode = ASCII_MODE; - for (i = 0; i < (int) in_length; i++) { - if (source[i] >= 0x80) { - symbol_mode = EIGHTBIT_MODE; - break; - } - } - - if (symbol->option_3 != ULTRA_COMPRESSION && !gs1) { - // Force eight-bit mode by default as other modes are poorly documented - symbol_mode = EIGHTBIT_MODE; - } - - if (symbol->output_options & READER_INIT) { - /* Reader Initialisation mode */ - if (symbol_mode == ASCII_MODE) { - codewords[0] = 272; // 7-bit ASCII mode - codewords[1] = 271; // FNC3 - } else { - codewords[0] = 257; // 8859-1 - codewords[1] = 269; // FNC3 - } - codeword_count = 2; - } else { - /* Calculate start character codeword */ - if (symbol_mode == ASCII_MODE) { - if (gs1) { - codewords[0] = 273; - } else { - codewords[0] = 272; - } - } else { - if ((symbol->eci >= 3) && (symbol->eci <= 18) && (symbol->eci != 14)) { - // ECI indicates use of character set within ISO/IEC 8859 - codewords[0] = 257 + (symbol->eci - 3); - if (codewords[0] > 267) { - // Avoids ECI 14 for non-existant ISO/IEC 8859-12 - codewords[0]--; - } - } else if ((symbol->eci > 18) && (symbol->eci <= 898)) { - // ECI indicates use of character set outside ISO/IEC 8859 - codewords[0] = 275 + (symbol->eci / 256); - codewords[1] = symbol->eci % 256; - codeword_count++; - } else if (symbol->eci == 899) { - // Non-language byte data - codewords[0] = 280; - } else if ((symbol->eci > 899) && (symbol->eci <= 9999)) { - // ECI beyond 899 needs to use fixed length encodable ECI invocation (section 7.6.2) - // Encode as 3 codewords - codewords[0] = 257; // ISO/IEC 8859-1 used to enter 8-bit mode - codewords[1] = 274; // Encode ECI as 3 codewords - codewords[2] = (symbol->eci / 100) + 128; - codewords[3] = (symbol->eci % 100) + 128; - codeword_count += 3; - } else if (symbol->eci >= 10000) { - // Encode as 4 codewords - codewords[0] = 257; // ISO/IEC 8859-1 used to enter 8-bit mode - codewords[1] = 275; // Encode ECI as 4 codewords - codewords[2] = (symbol->eci / 10000) + 128; - codewords[3] = ((symbol->eci % 10000) / 100) + 128; - codewords[4] = (symbol->eci % 100) + 128; - codeword_count += 4; - } else { - codewords[0] = 257; // Default is assumed to be ISO/IEC 8859-1 (ECI 3) - } - } - - if ((codewords[0] == 257) || (codewords[0] == 272)) { - fragno = ultra_find_fragment((unsigned char *)source, in_length, 0); - - // Check for http:// at start of input - if ((fragno == 0) || (fragno == 2)) { - codewords[0] = 281; - input_locn = 7; - symbol_mode = EIGHTBIT_MODE; - } - - - // Check for https:// at start of input - if ((fragno == 1) || (fragno == 3)) { - codewords[0] = 282; - input_locn = 8; - symbol_mode = EIGHTBIT_MODE; - } - } - } - - codeword_count++; - - /* Check for 06 Macro Sequence and crop accordingly */ - if (in_length >= 9 - && source[0] == '[' && source[1] == ')' && source[2] == '>' && source[3] == '\x1e' - && source[4] == '0' && source[5] == '6' && source[6] == '\x1d' - && source[in_length - 2] == '\x1e' && source[in_length - 1] == '\x04') { - - if (symbol_mode == EIGHTBIT_MODE) { - codewords[codeword_count] = 271; // 06 Macro - } else { - codewords[codeword_count] = 273; // 06 Macro - } - codeword_count++; - - for (i = 7; i < ((int) in_length - 2); i++) { - crop_source[i - 7] = source[i]; - } - crop_length = in_length - 9; - crop_source[crop_length] = '\0'; - } else { - /* Make a cropped version of input data - removes http:// and https:// if needed */ - for (i = input_locn; i < (int) in_length; i++) { - crop_source[i - input_locn] = source[i]; - } - crop_length = in_length - input_locn; - crop_source[crop_length] = '\0'; - } - - /* Attempt encoding in all three modes to see which offers best compaction and store results */ - if (symbol->option_3 == ULTRA_COMPRESSION || gs1) { - current_mode = symbol_mode; - input_locn = 0; - do { - end_char = input_locn + PREDICT_WINDOW; - eightbit_score = look_ahead_eightbit(crop_source, crop_length, input_locn, current_mode, end_char, cw_fragment, &fragment_length, gs1); - ascii_score = look_ahead_ascii(crop_source, crop_length, input_locn, current_mode, symbol_mode, end_char, cw_fragment, &fragment_length, &ascii_encoded, gs1); - subset = c43_should_latch_other(crop_source, crop_length, input_locn, 1 /*subset*/, gs1) ? 2 : 1; - c43_score = look_ahead_c43(crop_source, crop_length, input_locn, current_mode, end_char, subset, cw_fragment, &fragment_length, &c43_encoded, gs1, 0 /*debug*/); - - mode[input_locn] = 'a'; - current_mode = ASCII_MODE; - - if ((c43_score > ascii_score) && (c43_score > eightbit_score)) { - mode[input_locn] = 'c'; - current_mode = C43_MODE; - } - - if ((eightbit_score > ascii_score) && (eightbit_score > c43_score)) { - mode[input_locn] = '8'; - current_mode = EIGHTBIT_MODE; - } - if (mode[input_locn] == 'a') { - for (i = 0; i < ascii_encoded; i++) { - mode[input_locn + i] = 'a'; - } - input_locn += ascii_encoded; - } else if (mode[input_locn] == 'c') { - for (i = 0; i < c43_encoded; i++) { - mode[input_locn + i] = 'c'; - } - input_locn += c43_encoded; - } else { - input_locn++; - } - } while (input_locn < crop_length); - } else { - // Force eight-bit mode - for (input_locn = 0; input_locn < crop_length; input_locn++) { - mode[input_locn] = '8'; - } - } - mode[crop_length] = '\0'; - - if (symbol->debug & ZINT_DEBUG_PRINT) { - printf("Mode: %s (%d)\n", mode, (int) strlen(mode)); - } - - /* Use results from test to perform actual mode switching */ - current_mode = symbol_mode; - input_locn = 0; - do { - fragment_length = 0; - block_length = 0; - while (input_locn + block_length < crop_length && mode[input_locn + block_length] == mode[input_locn]) { - block_length++; - } - - switch(mode[input_locn]) { - case 'a': - look_ahead_ascii(crop_source, crop_length, input_locn, current_mode, symbol_mode, input_locn + block_length, cw_fragment, &fragment_length, NULL, gs1); - current_mode = ASCII_MODE; - break; - case 'c': - subset = c43_should_latch_other(crop_source, crop_length, input_locn, 1 /*subset*/, gs1) ? 2 : 1; - look_ahead_c43(crop_source, crop_length, input_locn, current_mode, input_locn + block_length, subset, cw_fragment, &fragment_length, NULL, gs1, symbol->debug); - - /* Substitute temporary latch if possible */ - if ((current_mode == EIGHTBIT_MODE) && (cw_fragment[0] == 260) && (fragment_length >= 5) && (fragment_length <= 11)) { - /* Temporary latch to submode 1 from Table 11 */ - cw_fragment[0] = 256 + ((fragment_length - 5) / 2); - } else if ((current_mode == EIGHTBIT_MODE) && (cw_fragment[0] == 266) && (fragment_length >= 5) && (fragment_length <= 11)) { - /* Temporary latch to submode 2 from Table 11 */ - cw_fragment[0] = 262 + ((fragment_length - 5) / 2); - } else if ((current_mode == ASCII_MODE) && (cw_fragment[0] == 278) && (fragment_length >= 5) && (fragment_length <= 11)) { - /* Temporary latch to submode 1 from Table 9 */ - cw_fragment[0] = 274 + ((fragment_length - 5) / 2); - } else { - current_mode = C43_MODE; - } - break; - case '8': - look_ahead_eightbit(crop_source, crop_length, input_locn, current_mode, input_locn + block_length, cw_fragment, &fragment_length, gs1); - current_mode = EIGHTBIT_MODE; - break; - } - - for (i = 0; i < fragment_length; i++) { - codewords[codeword_count + i] = cw_fragment[i]; - } - codeword_count += fragment_length; - - input_locn += block_length; - } while (input_locn < crop_length); - - return codeword_count; -} - -INTERNAL int ultracode(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length) { - int data_cw_count = 0; - int acc, qcc; - int ecc_level; - int rows, columns; - int total_cws; - int pads; - int cw_memalloc; - int codeword[282 + 3]; // Allow for 3 pads in final 57th (60th incl. clock tracks) column of 5-row symbol (57 * 5 == 285) - int i, j, locn; - int total_height, total_width; - char tilepat[6]; - int tilex, tiley; - int dcc; -#ifdef _MSC_VER - int* data_codewords; - char* pattern; -#endif /* _MSC_VER */ - - cw_memalloc = in_length * 2; - if (cw_memalloc < 283) { - cw_memalloc = 283; - } - - if (symbol->eci > 811799) { - strcpy(symbol->errtxt, "590: ECI value not supported by Ultracode"); - return ZINT_ERROR_INVALID_OPTION; - } - -#ifndef _MSC_VER - int data_codewords[cw_memalloc]; -#else - data_codewords = (int *) _alloca(cw_memalloc * sizeof (int)); -#endif /* _MSC_VER */ - - data_cw_count = ultra_generate_codewords(symbol, source, in_length, data_codewords); - - if (symbol->debug & ZINT_DEBUG_PRINT) { - printf("Codewords returned = %d\n", data_cw_count); - } -#ifdef ZINT_TEST - if (symbol->debug & ZINT_DEBUG_TEST) { - debug_test_codeword_dump_int(symbol, data_codewords, data_cw_count); - } -#endif - - data_cw_count += 2; // 2 == MCC + ACC (data codeword count includes start char) - - /* Default ECC level is EC2 */ - if ((symbol->option_1 <= 0) || (symbol->option_1 > 6)) { - ecc_level = 2; - } else { - ecc_level = symbol->option_1 - 1; - } - - /* ECC calculation from section 7.7.2 */ - if (ecc_level == 0) { - qcc = 3; - } else { - if ((data_cw_count % 25) == 0) { - qcc = (kec[ecc_level] * (data_cw_count / 25)) + 3 + 2; - } else { - qcc = (kec[ecc_level] * ((data_cw_count / 25) + 1)) + 3 + 2; - } - - } - acc = qcc - 3; - - if (symbol->debug & ZINT_DEBUG_PRINT) { - printf("ECC codewords: %d\n", qcc); - } - - /* Maximum capacity is 282 codewords */ - total_cws = data_cw_count + qcc + 3; // 3 == TCC pattern + RSEC pattern + QCC pattern - if (total_cws > 282) { - strcpy(symbol->errtxt, "591: Data too long for selected error correction capacity"); - return ZINT_ERROR_TOO_LONG; - } - - rows = 5; - for (i = 2; i >= 0; i--) { - if (total_cws - 6 <= ultra_maxsize[i]) { // Total codewords less 6 overhead (Start + MCC + ACC + 3 TCC/RSEC/QCC patterns) - rows--; - } - } - - if ((total_cws % rows) == 0) { - pads = 0; - columns = total_cws / rows; - } else { - pads = rows - (total_cws % rows); - columns = (total_cws / rows) + 1; - } - columns += columns / 15; // Secondary vertical clock tracks - - if (symbol->debug & ZINT_DEBUG_PRINT) { - printf("Calculated size is %d rows by %d columns\n", rows, columns); - } - - /* Insert MCC and ACC into data codewords */ - for (i = 282; i > 2; i--) { - data_codewords[i] = data_codewords[i - 2]; - } - data_codewords[1] = data_cw_count; // MCC - data_codewords[2] = acc; // ACC - - locn = 0; - /* Calculate error correction codewords (RSEC) */ - ultra_gf283((short) data_cw_count, (short) qcc, data_codewords); - - /* Rearrange to make final codeword sequence */ - codeword[locn++] = data_codewords[282 - (data_cw_count + qcc)]; // Start Character - codeword[locn++] = data_cw_count; // MCC - for (i = 0; i < qcc; i++) { - codeword[locn++] = data_codewords[(282 - qcc) + i]; // RSEC Region - } - codeword[locn++] = data_cw_count + qcc; // TCC = C + Q - section 6.11.4 - codeword[locn++] = 283; // Separator - codeword[locn++] = acc; // ACC - for (i = 0; i < (data_cw_count - 3); i++) { - codeword[locn++] = data_codewords[(282 - ((data_cw_count - 3) + qcc)) + i]; // Data Region - } - for (i = 0; i < pads; i++) { - codeword[locn++] = 284; // Pad pattern - } - codeword[locn++] = qcc; // QCC - - if (symbol->debug & ZINT_DEBUG_PRINT) { - printf("Rearranged codewords with ECC:\n"); - for (i = 0; i < locn; i++) { - printf("%d ", codeword[i]); - } - printf("\n"); - } - - total_height = (rows * 6) + 1; - total_width = columns + 6; - - /* Build symbol */ -#ifndef _MSC_VER - char pattern[total_height * total_width]; -#else - pattern = (char *) _alloca(total_height * total_width * sizeof (char)); -#endif /* _MSC_VER */ - - for (i = 0; i < (total_height * total_width); i++) { - pattern[i] = 'W'; - } - - /* Border */ - for (i = 0; i < total_width; i++) { - pattern[i] = 'K'; // Top - pattern[(total_height * total_width) - i - 1] = 'K'; // Bottom - } - for (i = 0; i < total_height; i++) { - pattern[total_width * i] = 'K'; // Left - pattern[(total_width * i) + 3] = 'K'; - pattern[(total_width * i) + (total_width - 1)] = 'K'; // Right - } - - /* Clock tracks */ - for (i = 0; i < total_height; i += 2) { - pattern[(total_width * i) + 1] = 'K'; // Primary vertical clock track - if (total_width > 20) { - pattern[(total_width * i) + 19] = 'K'; // Secondary vertical clock track - } - if (total_width > 36) { - pattern[(total_width * i) + 35] = 'K'; // Secondary vertical clock track - } - if (total_width > 52) { - pattern[(total_width * i) + 51] = 'K'; // Secondary vertical clock track - } - } - for (i = 6; i < total_height; i += 6) { - for (j = 5; j < total_width; j += 2) { - pattern[(total_width * i) + j] = 'K'; // Horizontal clock track - } - } - - /* Place tiles */ - tilepat[5] = '\0'; - tilex = 0; - tiley = 0; - for (i = 0; i < locn; i++) { - for (j = 0; j < 5; j++) { - tilepat[4 - j] = ultra_colour[(tiles[codeword[i]] >> (3 * j)) & 0x07]; - } - if ((tiley + 1) >= total_height) { - tiley = 0; - tilex++; - - if (tilex == 14) { - tilex++; - } - if (tilex == 30) { - tilex++; - } - if (tilex == 46) { - tilex++; - } - } - - for (j = 0; j < 5; j++) { - pattern[((tiley + j + 1) * total_width) + (tilex + 5)] = tilepat[j]; - } - tiley += 6; - } - - /* Add data column count */ - dcc = columns - ultra_mincols[rows - 2]; - tilex = 2; - tiley = (total_height - 11) / 2; - /* DCCU */ - for (j = 0; j < 5; j++) { - tilepat[4 - j] = ultra_colour[(dccu[dcc] >> (3 * j)) & 0x07]; - } - for (j = 0; j < 5; j++) { - pattern[((tiley + j) * total_width) + tilex] = tilepat[j]; - } - /* DCCL */ - tiley += 6; - for (j = 0; j < 5; j++) { - tilepat[4 - j] = ultra_colour[(dccl[dcc] >> (3 * j)) & 0x07]; - } - for (j = 0; j < 5; j++) { - pattern[((tiley + j) * total_width) + tilex] = tilepat[j]; - } - - if (symbol->debug & ZINT_DEBUG_PRINT) { - printf("DCC: %d\n", dcc); - - for (i = 0; i < (total_height * total_width); i++) { - printf("%c", pattern[i]); - if ((i + 1) % total_width == 0) { - printf("\n"); - } - } - } - - /* Put pattern into symbol */ - symbol->rows = total_height; - symbol->width = total_width; +int ultracode(struct zint_symbol *symbol, const unsigned char source[], const size_t in_length) { - for (i = 0; i < total_height; i++) { - symbol->row_height[i] = 1; - for(j = 0; j < total_width; j++) { - set_module_colour(symbol, i, j, posn(ultra_colour, pattern[(i * total_width) + j])); - } - } - return 0; + strcpy(symbol->errtxt, "1000: Ultracode has not been implemented - yet!"); + return ZINT_ERROR_INVALID_OPTION; } diff --git a/backend/upcean.c b/backend/upcean.c index 15fac07..a7e21eb 100644 --- a/backend/upcean.c +++ b/backend/upcean.c @@ -28,7 +28,6 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ #define SODIUM "0123456789+" #define EAN2 102 @@ -81,7 +80,7 @@ static const char *EANsetB[10] = { }; /* Calculate the correct check digit for a UPC barcode */ -static char upc_check(char source[]) { +char upc_check(char source[]) { unsigned int i, count, check_digit; count = 0; @@ -102,7 +101,7 @@ static char upc_check(char source[]) { } /* UPC A is usually used for 12 digit numbers, but this function takes a source of any length */ -static void upca_draw(char source[], char dest[]) { +void upca_draw(char source[], char dest[]) { unsigned int i, half_way; half_way = strlen(source) / 2; @@ -125,7 +124,7 @@ static void upca_draw(char source[], char dest[]) { } /* Make a UPC A barcode when we haven't been given the check digit */ -static int upca(struct zint_symbol *symbol, unsigned char source[], char dest[]) { +int upca(struct zint_symbol *symbol, unsigned char source[], char dest[]) { int length; char gtin[15]; @@ -149,7 +148,7 @@ static int upca(struct zint_symbol *symbol, unsigned char source[], char dest[]) } /* UPC E is a zero-compressed version of UPC A */ -static int upce(struct zint_symbol *symbol, unsigned char source[], char dest[]) { +int upce(struct zint_symbol *symbol, unsigned char source[], char dest[]) { unsigned int i, num_system; char emode, equivalent[12], check_digit, parity[8], temp[9]; char hrt[9]; @@ -303,7 +302,7 @@ static int upce(struct zint_symbol *symbol, unsigned char source[], char dest[]) } /* EAN-2 and EAN-5 add-on codes */ -static void add_on(unsigned char source[], char dest[], int mode) { +void add_on(unsigned char source[], char dest[], int mode) { char parity[6]; unsigned int i, code_type; @@ -363,7 +362,7 @@ static void add_on(unsigned char source[], char dest[], int mode) { /* ************************ EAN-13 ****************** */ /* Calculate the correct check digit for a EAN-13 barcode */ -static char ean_check(char source[]) { +char ean_check(char source[]) { int i; unsigned int h, count, check_digit; @@ -384,7 +383,7 @@ static char ean_check(char source[]) { return itoc(check_digit); } -static int ean13(struct zint_symbol *symbol, unsigned char source[], char dest[]) { +int ean13(struct zint_symbol *symbol, unsigned char source[], char dest[]) { unsigned int length, i, half_way; char parity[6]; char gtin[15]; @@ -438,7 +437,7 @@ static int ean13(struct zint_symbol *symbol, unsigned char source[], char dest[] } /* Make an EAN-8 barcode when we haven't been given the check digit */ -static int ean8(struct zint_symbol *symbol, unsigned char source[], char dest[]) { +int ean8(struct zint_symbol *symbol, unsigned char source[], char dest[]) { /* EAN-8 is basically the same as UPC-A but with fewer digits */ int length; char gtin[10]; @@ -464,7 +463,7 @@ static int ean8(struct zint_symbol *symbol, unsigned char source[], char dest[]) } /* For ISBN(13) only */ -static char isbn13_check(unsigned char source[]) { +char isbn13_check(unsigned char source[]) { unsigned int i, weight, sum, check, h; sum = 0; @@ -484,7 +483,7 @@ static char isbn13_check(unsigned char source[]) { } /* For ISBN(10) and SBN only */ -static char isbn_check(unsigned char source[]) { +char isbn_check(unsigned char source[]) { unsigned int i, weight, sum, check, h; char check_char; @@ -565,7 +564,7 @@ static int isbn(struct zint_symbol *symbol, unsigned char source[], const size_t } /* Add leading zeroes to EAN and UPC strings */ -INTERNAL void ean_leading_zeroes(struct zint_symbol *symbol, unsigned char source[], unsigned char local_source[]) { +void ean_leading_zeroes(struct zint_symbol *symbol, unsigned char source[], unsigned char local_source[]) { unsigned char first_part[20], second_part[20], zfirst_part[20], zsecond_part[20]; int with_addon = 0; int first_len = 0, second_len = 0, zfirst_len = 0, zsecond_len = 0, i, h; @@ -594,9 +593,6 @@ INTERNAL void ean_leading_zeroes(struct zint_symbol *symbol, unsigned char sourc first_part[i + 1] = '\0'; } - if (second_len >= 6) { /* Allow 6 (actual max 5) so as to trigger too long error */ - second_len = 6; - } for (i = 0; i < second_len; i++) { second_part[i] = source[i + first_len + 1]; second_part[i + 1] = '\0'; @@ -697,11 +693,12 @@ INTERNAL void ean_leading_zeroes(struct zint_symbol *symbol, unsigned char sourc } /* splits string to parts before and after '+' parts */ -INTERNAL int eanx(struct zint_symbol *symbol, unsigned char source[], int src_len) { - unsigned char first_part[20] = {0}, second_part[7] = {0}, dest[1000] = {0}; +int eanx(struct zint_symbol *symbol, unsigned char source[], int src_len) { + unsigned char first_part[20] = {0}, second_part[20] = {0}, dest[1000] = {0}; unsigned char local_source[20] = {0}; unsigned int latch, reader, writer, with_addon; - int error_number, i, plus_count; + int error_number, i; + with_addon = FALSE; latch = FALSE; @@ -725,18 +722,6 @@ INTERNAL int eanx(struct zint_symbol *symbol, unsigned char source[], int src_le return error_number; } } - - /* Check for multiple '+' characters */ - plus_count = 0; - for (i = 0; i < src_len; i++) { - if (source[i] == '+') { - plus_count++; - } - } - if (plus_count > 1) { - strcpy(symbol->errtxt, "293: Invalid add-on data"); - return ZINT_ERROR_INVALID_DATA; - } /* Add leading zeroes */ ustrcpy(local_source, (unsigned char *) ""); @@ -927,3 +912,4 @@ INTERNAL int eanx(struct zint_symbol *symbol, unsigned char source[], int src_le return 0; } + diff --git a/backend/vector.c b/backend/vector.c index 5313b60..852e614 100644 --- a/backend/vector.c +++ b/backend/vector.c @@ -1,7 +1,7 @@ /* vector.c - Creates vector image objects libzint - the open source barcode library - Copyright (C) 2018 - 2020 Robin Stuart + Copyright (C) 2018 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -32,6 +32,7 @@ #include #include +#include #include #ifdef _MSC_VER @@ -39,13 +40,14 @@ #endif #include "common.h" -#include "output.h" -INTERNAL int ps_plot(struct zint_symbol *symbol); -INTERNAL int svg_plot(struct zint_symbol *symbol); -INTERNAL int emf_plot(struct zint_symbol *symbol); +#define SSET "0123456789ABCDEF" -static struct zint_vector_rect *vector_plot_create_rect(float x, float y, float width, float height) { +extern int ps_plot(struct zint_symbol *symbol); +extern int svg_plot(struct zint_symbol *symbol); +extern int emf_plot(struct zint_symbol *symbol); + +struct zint_vector_rect *vector_plot_create_rect(float x, float y, float width, float height) { struct zint_vector_rect *rect; rect = (struct zint_vector_rect*) malloc(sizeof (struct zint_vector_rect)); @@ -61,7 +63,7 @@ static struct zint_vector_rect *vector_plot_create_rect(float x, float y, float return rect; } -static int vector_plot_add_rect(struct zint_symbol *symbol, struct zint_vector_rect *rect, struct zint_vector_rect **last_rect) { +int vector_plot_add_rect(struct zint_symbol *symbol, struct zint_vector_rect *rect, struct zint_vector_rect **last_rect) { if (!rect) return ZINT_ERROR_MEMORY; if (*last_rect) (*last_rect)->next = rect; @@ -72,7 +74,7 @@ static int vector_plot_add_rect(struct zint_symbol *symbol, struct zint_vector_r return 1; } -static struct zint_vector_hexagon *vector_plot_create_hexagon(float x, float y, float diameter) { +struct zint_vector_hexagon *vector_plot_create_hexagon(float x, float y, float diameter) { struct zint_vector_hexagon *hexagon; hexagon = (struct zint_vector_hexagon*) malloc(sizeof (struct zint_vector_hexagon)); @@ -85,7 +87,7 @@ static struct zint_vector_hexagon *vector_plot_create_hexagon(float x, float y, return hexagon; } -static int vector_plot_add_hexagon(struct zint_symbol *symbol, struct zint_vector_hexagon *hexagon, struct zint_vector_hexagon **last_hexagon) { +int vector_plot_add_hexagon(struct zint_symbol *symbol, struct zint_vector_hexagon *hexagon, struct zint_vector_hexagon **last_hexagon) { if (!hexagon) return ZINT_ERROR_MEMORY; if (*last_hexagon) (*last_hexagon)->next = hexagon; @@ -96,7 +98,7 @@ static int vector_plot_add_hexagon(struct zint_symbol *symbol, struct zint_vecto return 1; } -static struct zint_vector_circle *vector_plot_create_circle(float x, float y, float diameter, int colour) { +struct zint_vector_circle *vector_plot_create_circle(float x, float y, float diameter, int colour) { struct zint_vector_circle *circle; circle = (struct zint_vector_circle *) malloc(sizeof (struct zint_vector_circle)); @@ -110,7 +112,7 @@ static struct zint_vector_circle *vector_plot_create_circle(float x, float y, fl return circle; } -static int vector_plot_add_circle(struct zint_symbol *symbol, struct zint_vector_circle *circle, struct zint_vector_circle **last_circle) { +int vector_plot_add_circle(struct zint_symbol *symbol, struct zint_vector_circle *circle, struct zint_vector_circle **last_circle) { if (!circle) return ZINT_ERROR_MEMORY; if (*last_circle) (*last_circle)->next = circle; @@ -121,7 +123,7 @@ static int vector_plot_add_circle(struct zint_symbol *symbol, struct zint_vector return 1; } -static int vector_plot_add_string(struct zint_symbol *symbol, +int vector_plot_add_string(struct zint_symbol *symbol, unsigned char *text, float x, float y, float fsize, float width, struct zint_vector_string **last_string) { struct zint_vector_string *string; @@ -145,7 +147,7 @@ static int vector_plot_add_string(struct zint_symbol *symbol, return 1; } -INTERNAL void vector_free(struct zint_symbol *symbol) { +void vector_free(struct zint_symbol *symbol) { if (symbol->vector != NULL) { struct zint_vector_rect *rect; struct zint_vector_hexagon *hex; @@ -191,18 +193,13 @@ INTERNAL void vector_free(struct zint_symbol *symbol) { } } -static void vector_scale(struct zint_symbol *symbol, int file_type) { +void vector_scale(struct zint_symbol *symbol) { struct zint_vector_rect *rect; struct zint_vector_hexagon *hex; struct zint_vector_circle *circle; struct zint_vector_string *string; float scale = symbol->scale * 2.0f; - if ((file_type == OUT_EMF_FILE) && (symbol->symbology == BARCODE_MAXICODE)) { - // Increase size to overcome limitations in EMF file format - scale *= 20; - } - symbol->vector->width *= scale; symbol->vector->height *= scale; @@ -242,7 +239,7 @@ static void vector_scale(struct zint_symbol *symbol, int file_type) { return; } -static void vector_reduce_rectangles(struct zint_symbol *symbol) { +void vector_reduce_rectangles(struct zint_symbol *symbol) { // Looks for vertically aligned rectangles and merges them together struct zint_vector_rect *rect, *target, *prev; @@ -250,9 +247,10 @@ static void vector_reduce_rectangles(struct zint_symbol *symbol) { while (rect) { prev = rect; target = prev->next; - + while (target) { - if ((rect->x == target->x) && (rect->width == target->width) && ((rect->y + rect->height) == target->y) && (rect->colour == target->colour)) { + + if ((rect->x == target->x) && (rect->width == target->width) && ((rect->y + rect->height) == target->y)) { rect->height += target->height; prev->next = target->next; free(target); @@ -268,7 +266,7 @@ static void vector_reduce_rectangles(struct zint_symbol *symbol) { return; } -INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_type) { +int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_type) { int error_number; struct zint_vector *vector; struct zint_vector_rect *rectangle, *rect, *last_rectangle = NULL; @@ -280,7 +278,6 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_ float textpos, large_bar_height, preset_height, row_height, row_posn = 0.0; float text_offset, text_height; int xoffset, yoffset, textdone, main_symbol_width_x; - int roffset, boffset; char addon[6]; int large_bar_count, symbol_lead_in; float addon_text_posn; @@ -291,13 +288,27 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_ int this_row; int addon_latch = 0; struct zint_vector_string *string; - - (void)rotate_angle; /* Not currently implemented */ - // Sanity check colours - error_number = check_colour_options(symbol); - if (error_number != 0) { - return error_number; + to_upper((unsigned char*) symbol->fgcolour); + to_upper((unsigned char*) symbol->bgcolour); + + if (strlen(symbol->fgcolour) != 6) { + strcpy(symbol->errtxt, "661: Malformed foreground colour target"); + return ZINT_ERROR_INVALID_OPTION; + } + if (strlen(symbol->bgcolour) != 6) { + strcpy(symbol->errtxt, "662: Malformed background colour target"); + return ZINT_ERROR_INVALID_OPTION; + } + error_number = is_sane(SSET, (unsigned char*) symbol->fgcolour, strlen(symbol->fgcolour)); + if (error_number == ZINT_ERROR_INVALID_DATA) { + strcpy(symbol->errtxt, "663: Malformed foreground colour target"); + return ZINT_ERROR_INVALID_OPTION; + } + error_number = is_sane(SSET, (unsigned char*) symbol->bgcolour, strlen(symbol->bgcolour)); + if (error_number == ZINT_ERROR_INVALID_DATA) { + strcpy(symbol->errtxt, "664: Malformed background colour target"); + return ZINT_ERROR_INVALID_OPTION; } // Free any previous rendering structures @@ -313,13 +324,14 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_ row_height = 0; textdone = 0; + textpos = 0.0; main_symbol_width_x = symbol->width; strcpy(addon, ""); symbol_lead_in = 0; addon_text_posn = 0.0; rect_count = 0; last_row_start = 0; - + /* * Determine if there will be any addon texts and text height */ @@ -403,7 +415,9 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_ if (symbol->output_options & SMALL_TEXT) text_height *= 0.8f; - set_whitespace_offsets(symbol, &xoffset, &yoffset, &roffset, &boffset); + xoffset = symbol->border_width + symbol->whitespace_width; + yoffset = symbol->border_width; + // Determine if height should be overridden large_bar_count = 0; @@ -415,15 +429,15 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_ } } - vector->width = (float)ceil(symbol->width + (xoffset + roffset)); - vector->height = (float)ceil(symbol->height + text_offset + (yoffset + boffset)); + vector->width = (float)ceil(symbol->width + (2.0f * xoffset)); + vector->height = (float)ceil(symbol->height + text_offset + (2.0f * yoffset)); large_bar_height = large_bar_count ? (symbol->height - preset_height) / large_bar_count : 0 /*Not used if large_bar_count zero*/; if ((symbol->output_options & BARCODE_BOX) || (symbol->output_options & BARCODE_BIND)) { default_text_posn = symbol->height + text_offset + symbol->border_width + symbol->border_width; } else { - default_text_posn = symbol->height + text_offset; + default_text_posn = symbol->height + text_offset + symbol->border_width; } // Plot rectangles - most symbols created here @@ -447,6 +461,11 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_ row_posn += yoffset; i = 0; + if (module_is_set(symbol, this_row, 0)) { + latch = 1; + } else { + latch = 0; + } do { int block_width = 0; @@ -457,18 +476,20 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_ addon_text_posn = row_posn + 8.0f; addon_latch = 1; } - if (module_is_set(symbol, this_row, i)) { - /* a bar or colour block */ + if (latch == 1) { + /* a bar */ if (addon_latch == 0) { rectangle = vector_plot_create_rect((float)(i + xoffset), row_posn, (float)block_width, row_height); - if (symbol->symbology == BARCODE_ULTRA) { - rectangle->colour = module_is_set(symbol, this_row, i); - } } else { rectangle = vector_plot_create_rect((float)(i + xoffset), row_posn + 10.0f, (float)block_width, row_height - 5.0f); } + latch = 0; + vector_plot_add_rect(symbol, rectangle, &last_rectangle); rect_count++; + } else { + /* a space */ + latch = 1; } i += block_width; @@ -479,8 +500,8 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_ // Plot Maxicode symbols if (symbol->symbology == BARCODE_MAXICODE) { struct zint_vector_circle *circle; - vector->width = 37.0f + (xoffset + roffset); - vector->height = 36.0f + (yoffset + boffset); + vector->width = 37.0f + (2.0f * xoffset); + vector->height = 36.0f + (2.0f * yoffset); // Bullseye circle = vector_plot_create_circle(17.88f + xoffset, 17.8f + yoffset, 10.85f, 0); @@ -501,7 +522,7 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_ for (i = 0; i < symbol->width; i++) { if (module_is_set(symbol, r, i)) { //struct zint_vector_hexagon *hexagon = vector_plot_create_hexagon(((i * 0.88) + ((r & 1) ? 1.76 : 1.32)), ((r * 0.76) + 0.76), symbol->dot_size); - struct zint_vector_hexagon *hexagon = vector_plot_create_hexagon(((i * 1.23f) + 0.615f + ((r & 1) ? 0.615f : 0.0f)) + xoffset, + struct zint_vector_hexagon *hexagon = vector_plot_create_hexagon(((i * 1.23f) + 0.615f + ((r & 1) ? 0.615f : 0.0f)) + xoffset, ((r * 1.067f) + 0.715f) + yoffset, symbol->dot_size); vector_plot_add_hexagon(symbol, hexagon, &last_hexagon); } @@ -537,7 +558,7 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_ i++; } } - + if (upceanflag == 8) { i = 0; for (rect = symbol->vector->rectangles; rect != NULL; rect = rect->next) { @@ -554,7 +575,7 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_ i++; } } - + if (upceanflag == 12) { i = 0; for (rect = symbol->vector->rectangles; rect != NULL; rect = rect->next) { @@ -575,7 +596,7 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_ i++; } } - + if (upceanflag == 13) { i = 0; for (rect = symbol->vector->rectangles; rect != NULL; rect = rect->next) { @@ -592,7 +613,7 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_ i++; } } - + /* Add the text */ if (!hide_text) { @@ -760,18 +781,13 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_ // Binding and boxes if ((symbol->output_options & BARCODE_BIND) != 0) { if ((symbol->rows > 1) && (is_stackable(symbol->symbology) == 1)) { - double sep_height = 1; - if (symbol->option_3 > 0 && symbol->option_3 <= 4) { - sep_height = symbol->option_3; - } /* row binding */ for (r = 1; r < symbol->rows; r++) { - if (symbol->symbology != BARCODE_CODABLOCKF && symbol->symbology != BARCODE_HIBC_BLOCKF) { - rectangle = vector_plot_create_rect((float)xoffset, (r * row_height) + yoffset - sep_height / 2, (float)symbol->width, sep_height); + if (symbol->symbology != BARCODE_CODABLOCKF) { + rectangle = vector_plot_create_rect((float)xoffset, (r * row_height) + yoffset - 1, (float)symbol->width, 2.0f); vector_plot_add_rect(symbol, rectangle, &last_rectangle); } else { - /* Avoid 11-module start and 13-module stop chars */ - rectangle = vector_plot_create_rect(xoffset + 11, (r * row_height) + yoffset - sep_height / 2, symbol->width - 24, sep_height); + rectangle = vector_plot_create_rect(xoffset + 11.0f, (r * row_height) + yoffset - 1, symbol->width - 25.0f, 2.0); vector_plot_add_rect(symbol, rectangle, &last_rectangle); } } @@ -780,14 +796,14 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_ if ((symbol->output_options & BARCODE_BOX) || (symbol->output_options & BARCODE_BIND)) { // Top rectangle = vector_plot_create_rect(0.0f, 0.0f, vector->width, (float)symbol->border_width); - if (!(symbol->output_options & BARCODE_BOX) && (symbol->symbology == BARCODE_CODABLOCKF || symbol->symbology == BARCODE_HIBC_BLOCKF)) { + if (symbol->symbology == BARCODE_CODABLOCKF) { rectangle->x = (float)xoffset; rectangle->width -= (2.0f * xoffset); } vector_plot_add_rect(symbol, rectangle, &last_rectangle); // Bottom rectangle = vector_plot_create_rect(0.0f, vector->height - symbol->border_width - text_offset, vector->width, (float)symbol->border_width); - if (!(symbol->output_options & BARCODE_BOX) && (symbol->symbology == BARCODE_CODABLOCKF || symbol->symbology == BARCODE_HIBC_BLOCKF)) { + if (symbol->symbology == BARCODE_CODABLOCKF) { rectangle->x = (float)xoffset; rectangle->width -= (2.0f * xoffset); } @@ -804,7 +820,7 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_ vector_reduce_rectangles(symbol); - vector_scale(symbol, file_type); + vector_scale(symbol); switch (file_type) { case OUT_EPS_FILE: @@ -820,4 +836,5 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_ } return error_number; + } diff --git a/backend/zint.h b/backend/zint.h index 4d28369..fc4e41a 100644 --- a/backend/zint.h +++ b/backend/zint.h @@ -1,7 +1,7 @@ /* zint.h - definitions for libzint libzint - the open source barcode library - Copyright (C) 2009-2020 Robin Stuart + Copyright (C) 2009-2018 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -28,7 +28,6 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* vim: set ts=4 sw=4 et : */ #ifndef ZINT_H #define ZINT_H @@ -41,7 +40,7 @@ extern "C" { float x, y, length, width; struct zint_render_line *next; /* Pointer to next line */ }; - + struct zint_vector_rect { float x, y, height, width; int colour; @@ -55,7 +54,7 @@ extern "C" { unsigned char *text; struct zint_render_string *next; /* Pointer to next character */ }; - + struct zint_vector_string { float x, y, fsize; float width; /* Suggested string width, may be 0 if none recommended */ @@ -74,7 +73,7 @@ extern "C" { int colour; struct zint_vector_circle *next; /* Pointer to next circle */ }; - + struct zint_render_hexagon { float x, y, height; struct zint_render_hexagon *next; /* Pointer to next hexagon */ @@ -84,7 +83,7 @@ extern "C" { float x, y, diameter; struct zint_vector_hexagon *next; /* Pointer to next hexagon */ }; - + struct zint_render { float width, height; struct zint_render_line *lines; /* Pointer to first line */ @@ -92,7 +91,7 @@ extern "C" { struct zint_render_ring *rings; /* Pointer to first ring */ struct zint_render_hexagon *hexagons; /* Pointer to first hexagon */ }; - + struct zint_vector { float width, height; struct zint_vector_rect *rectangles; /* Pointer to first rectangle */ @@ -125,7 +124,7 @@ extern "C" { unsigned char encoded_data[200][143]; int row_height[200]; /* Largest symbol is 189 x 189 Han Xin */ char errtxt[100]; - unsigned char *bitmap; + char *bitmap; int bitmap_width; int bitmap_height; unsigned int bitmap_byte_length; @@ -136,169 +135,158 @@ extern "C" { }; #define ZINT_VERSION_MAJOR 2 -#define ZINT_VERSION_MINOR 8 -#define ZINT_VERSION_RELEASE 0 +#define ZINT_VERSION_MINOR 6 +#define ZINT_VERSION_RELEASE 7 /* Tbarcode 7 codes */ -#define BARCODE_CODE11 1 -#define BARCODE_C25MATRIX 2 -#define BARCODE_C25INTER 3 -#define BARCODE_C25IATA 4 -#define BARCODE_C25LOGIC 6 -#define BARCODE_C25IND 7 -#define BARCODE_CODE39 8 -#define BARCODE_EXCODE39 9 -#define BARCODE_EANX 13 +#define BARCODE_CODE11 1 +#define BARCODE_C25MATRIX 2 +#define BARCODE_C25INTER 3 +#define BARCODE_C25IATA 4 +#define BARCODE_C25LOGIC 6 +#define BARCODE_C25IND 7 +#define BARCODE_CODE39 8 +#define BARCODE_EXCODE39 9 +#define BARCODE_EANX 13 #define BARCODE_EANX_CHK 14 -#define BARCODE_EAN128 16 -#define BARCODE_CODABAR 18 -#define BARCODE_CODE128 20 -#define BARCODE_DPLEIT 21 -#define BARCODE_DPIDENT 22 -#define BARCODE_CODE16K 23 -#define BARCODE_CODE49 24 -#define BARCODE_CODE93 25 -#define BARCODE_FLAT 28 -#define BARCODE_RSS14 29 -#define BARCODE_RSS_LTD 30 -#define BARCODE_RSS_EXP 31 -#define BARCODE_TELEPEN 32 -#define BARCODE_UPCA 34 +#define BARCODE_EAN128 16 +#define BARCODE_CODABAR 18 +#define BARCODE_CODE128 20 +#define BARCODE_DPLEIT 21 +#define BARCODE_DPIDENT 22 +#define BARCODE_CODE16K 23 +#define BARCODE_CODE49 24 +#define BARCODE_CODE93 25 +#define BARCODE_FLAT 28 +#define BARCODE_RSS14 29 +#define BARCODE_RSS_LTD 30 +#define BARCODE_RSS_EXP 31 +#define BARCODE_TELEPEN 32 +#define BARCODE_UPCA 34 #define BARCODE_UPCA_CHK 35 -#define BARCODE_UPCE 37 +#define BARCODE_UPCE 37 #define BARCODE_UPCE_CHK 38 -#define BARCODE_POSTNET 40 -#define BARCODE_MSI_PLESSEY 47 -#define BARCODE_FIM 49 -#define BARCODE_LOGMARS 50 -#define BARCODE_PHARMA 51 -#define BARCODE_PZN 52 -#define BARCODE_PHARMA_TWO 53 -#define BARCODE_PDF417 55 -#define BARCODE_PDF417TRUNC 56 -#define BARCODE_MAXICODE 57 -#define BARCODE_QRCODE 58 -#define BARCODE_CODE128B 60 -#define BARCODE_AUSPOST 63 -#define BARCODE_AUSREPLY 66 -#define BARCODE_AUSROUTE 67 -#define BARCODE_AUSREDIRECT 68 -#define BARCODE_ISBNX 69 -#define BARCODE_RM4SCC 70 -#define BARCODE_DATAMATRIX 71 -#define BARCODE_EAN14 72 +#define BARCODE_POSTNET 40 +#define BARCODE_MSI_PLESSEY 47 +#define BARCODE_FIM 49 +#define BARCODE_LOGMARS 50 +#define BARCODE_PHARMA 51 +#define BARCODE_PZN 52 +#define BARCODE_PHARMA_TWO 53 +#define BARCODE_PDF417 55 +#define BARCODE_PDF417TRUNC 56 +#define BARCODE_MAXICODE 57 +#define BARCODE_QRCODE 58 +#define BARCODE_CODE128B 60 +#define BARCODE_AUSPOST 63 +#define BARCODE_AUSREPLY 66 +#define BARCODE_AUSROUTE 67 +#define BARCODE_AUSREDIRECT 68 +#define BARCODE_ISBNX 69 +#define BARCODE_RM4SCC 70 +#define BARCODE_DATAMATRIX 71 +#define BARCODE_EAN14 72 #define BARCODE_VIN 73 -#define BARCODE_CODABLOCKF 74 -#define BARCODE_NVE18 75 -#define BARCODE_JAPANPOST 76 -#define BARCODE_KOREAPOST 77 -#define BARCODE_RSS14STACK 79 -#define BARCODE_RSS14STACK_OMNI 80 -#define BARCODE_RSS_EXPSTACK 81 -#define BARCODE_PLANET 82 -#define BARCODE_MICROPDF417 84 -#define BARCODE_ONECODE 85 -#define BARCODE_PLESSEY 86 +#define BARCODE_CODABLOCKF 74 +#define BARCODE_NVE18 75 +#define BARCODE_JAPANPOST 76 +#define BARCODE_KOREAPOST 77 +#define BARCODE_RSS14STACK 79 +#define BARCODE_RSS14STACK_OMNI 80 +#define BARCODE_RSS_EXPSTACK 81 +#define BARCODE_PLANET 82 +#define BARCODE_MICROPDF417 84 +#define BARCODE_ONECODE 85 +#define BARCODE_PLESSEY 86 /* Tbarcode 8 codes */ -#define BARCODE_TELEPEN_NUM 87 -#define BARCODE_ITF14 89 -#define BARCODE_KIX 90 -#define BARCODE_AZTEC 92 -#define BARCODE_DAFT 93 -#define BARCODE_MICROQR 97 +#define BARCODE_TELEPEN_NUM 87 +#define BARCODE_ITF14 89 +#define BARCODE_KIX 90 +#define BARCODE_AZTEC 92 +#define BARCODE_DAFT 93 +#define BARCODE_MICROQR 97 /* Tbarcode 9 codes */ -#define BARCODE_HIBC_128 98 -#define BARCODE_HIBC_39 99 -#define BARCODE_HIBC_DM 102 -#define BARCODE_HIBC_QR 104 -#define BARCODE_HIBC_PDF 106 -#define BARCODE_HIBC_MICPDF 108 -#define BARCODE_HIBC_BLOCKF 110 -#define BARCODE_HIBC_AZTEC 112 +#define BARCODE_HIBC_128 98 +#define BARCODE_HIBC_39 99 +#define BARCODE_HIBC_DM 102 +#define BARCODE_HIBC_QR 104 +#define BARCODE_HIBC_PDF 106 +#define BARCODE_HIBC_MICPDF 108 +#define BARCODE_HIBC_BLOCKF 110 +#define BARCODE_HIBC_AZTEC 112 /* Tbarcode 10 codes */ #define BARCODE_DOTCODE 115 #define BARCODE_HANXIN 116 - + /*Tbarcode 11 codes*/ #define BARCODE_MAILMARK 121 /* Zint specific */ -#define BARCODE_AZRUNE 128 -#define BARCODE_CODE32 129 -#define BARCODE_EANX_CC 130 -#define BARCODE_EAN128_CC 131 -#define BARCODE_RSS14_CC 132 -#define BARCODE_RSS_LTD_CC 133 -#define BARCODE_RSS_EXP_CC 134 -#define BARCODE_UPCA_CC 135 -#define BARCODE_UPCE_CC 136 -#define BARCODE_RSS14STACK_CC 137 -#define BARCODE_RSS14_OMNI_CC 138 -#define BARCODE_RSS_EXPSTACK_CC 139 -#define BARCODE_CHANNEL 140 -#define BARCODE_CODEONE 141 -#define BARCODE_GRIDMATRIX 142 +#define BARCODE_AZRUNE 128 +#define BARCODE_CODE32 129 +#define BARCODE_EANX_CC 130 +#define BARCODE_EAN128_CC 131 +#define BARCODE_RSS14_CC 132 +#define BARCODE_RSS_LTD_CC 133 +#define BARCODE_RSS_EXP_CC 134 +#define BARCODE_UPCA_CC 135 +#define BARCODE_UPCE_CC 136 +#define BARCODE_RSS14STACK_CC 137 +#define BARCODE_RSS14_OMNI_CC 138 +#define BARCODE_RSS_EXPSTACK_CC 139 +#define BARCODE_CHANNEL 140 +#define BARCODE_CODEONE 141 +#define BARCODE_GRIDMATRIX 142 #define BARCODE_UPNQR 143 -#define BARCODE_ULTRA 144 -#define BARCODE_RMQR 145 +#define BARCODE_ULTRA 144 // Output options -#define BARCODE_NO_ASCII 1 -#define BARCODE_BIND 2 -#define BARCODE_BOX 4 -#define BARCODE_STDOUT 8 -#define READER_INIT 16 -#define SMALL_TEXT 32 +#define BARCODE_NO_ASCII 1 +#define BARCODE_BIND 2 +#define BARCODE_BOX 4 +#define BARCODE_STDOUT 8 +#define READER_INIT 16 +#define SMALL_TEXT 32 #define BOLD_TEXT 64 #define CMYK_COLOUR 128 #define BARCODE_DOTTY_MODE 256 #define GS1_GS_SEPARATOR 512 // Input data types -#define DATA_MODE 0 -#define UNICODE_MODE 1 -#define GS1_MODE 2 -#define ESCAPE_MODE 8 - -// Data Matrix specific options (option_3) -#define DM_SQUARE 100 -#define DM_DMRE 101 +#define DATA_MODE 0 +#define UNICODE_MODE 1 +#define GS1_MODE 2 +#define ESCAPE_MODE 8 -// QR, Han Xin, Grid Matrix specific options (option_3) -#define ZINT_FULL_MULTIBYTE 200 - -// Ultracode specific option (option_3) -#define ULTRA_COMPRESSION 128 +// Data Matrix specific options +#define DM_SQUARE 100 +#define DM_DMRE 101 // Warning and error conditions -#define ZINT_WARN_INVALID_OPTION 2 +#define ZINT_WARN_INVALID_OPTION 2 #define ZINT_WARN_USES_ECI 3 -#define ZINT_ERROR_TOO_LONG 5 +#define ZINT_ERROR_TOO_LONG 5 #define ZINT_ERROR_INVALID_DATA 6 -#define ZINT_ERROR_INVALID_CHECK 7 -#define ZINT_ERROR_INVALID_OPTION 8 -#define ZINT_ERROR_ENCODING_PROBLEM 9 -#define ZINT_ERROR_FILE_ACCESS 10 -#define ZINT_ERROR_MEMORY 11 +#define ZINT_ERROR_INVALID_CHECK 7 +#define ZINT_ERROR_INVALID_OPTION 8 +#define ZINT_ERROR_ENCODING_PROBLEM 9 +#define ZINT_ERROR_FILE_ACCESS 10 +#define ZINT_ERROR_MEMORY 11 // Raster file types -#define OUT_BUFFER 0 -#define OUT_SVG_FILE 10 -#define OUT_EPS_FILE 20 -#define OUT_EMF_FILE 30 -#define OUT_PNG_FILE 100 -#define OUT_BMP_FILE 120 -#define OUT_GIF_FILE 140 -#define OUT_PCX_FILE 160 -#define OUT_JPG_FILE 180 -#define OUT_TIF_FILE 200 - -// Debug flags -#define ZINT_DEBUG_PRINT 1 -#define ZINT_DEBUG_TEST 2 +#define OUT_BUFFER 0 +#define OUT_SVG_FILE 10 +#define OUT_EPS_FILE 20 +#define OUT_EMF_FILE 30 +#define OUT_PNG_FILE 100 +#define OUT_BMP_FILE 120 +#define OUT_GIF_FILE 140 +#define OUT_PCX_FILE 160 +#define OUT_JPG_FILE 180 +#define OUT_TIF_FILE 200 #if defined(__WIN32__) || defined(_WIN32) || defined(WIN32) || defined(_MSC_VER) #if defined (DLL_EXPORT) || defined(PIC) || defined(_USRDLL) @@ -322,6 +310,8 @@ extern "C" { ZINT_EXTERN int ZBarcode_Encode_and_Print(struct zint_symbol *symbol, unsigned char *input, int length, int rotate_angle); ZINT_EXTERN int ZBarcode_Encode_File_and_Print(struct zint_symbol *symbol, char *filename, int rotate_angle); + ZINT_EXTERN int ZBarcode_Render(struct zint_symbol *symbol, const float width, const float height); + ZINT_EXTERN int ZBarcode_Buffer(struct zint_symbol *symbol, int rotate_angle); ZINT_EXTERN int ZBarcode_Buffer_Vector(struct zint_symbol *symbol, int rotate_angle); ZINT_EXTERN int ZBarcode_Encode_and_Buffer(struct zint_symbol *symbol, unsigned char *input, int length, int rotate_angle); diff --git a/packaging/zint.spec b/packaging/zint.spec index 73f0b58..261bf75 100644 --- a/packaging/zint.spec +++ b/packaging/zint.spec @@ -1,5 +1,5 @@ Name: zint -Version: 2.7.1 +Version: 2.6.7 Release: 1 Summary: Barcode generator library License: BSD-3-Clause -- 2.7.4