diff --git a/gguf-py/gguf/constants.py b/gguf-py/gguf/constants.py index e5b236b11..c31ab4a42 100644 --- a/gguf-py/gguf/constants.py +++ b/gguf-py/gguf/constants.py @@ -364,6 +364,7 @@ class Keys: CHAT_TEMPLATE_N = "tokenizer.chat_template.{name}" CHAT_TEMPLATES = "tokenizer.chat_templates" # Normalizer constants + NORMALIZER_NFC = "tokenizer.ggml.normalizer.nfc" NORMALIZER_LOWERCASE = "tokenizer.ggml.normalizer.lowercase" NORMALIZER_STRIP_ACCENTS = "tokenizer.ggml.normalizer.strip_accents" # FIM/Infill special tokens constants diff --git a/gguf-py/gguf/gguf_writer.py b/gguf-py/gguf/gguf_writer.py index 6b12ad23a..02ac3e823 100644 --- a/gguf-py/gguf/gguf_writer.py +++ b/gguf-py/gguf/gguf_writer.py @@ -1329,6 +1329,9 @@ class GGUFWriter: def add_suppress_tokens(self, tokens: Sequence[int]) -> None: self.add_array(Keys.Tokenizer.SUPPRESS_TOKENS, tokens) + def add_normalizer_nfc(self, value: bool) -> None: + self.add_bool(Keys.Tokenizer.NORMALIZER_NFC, value) + def add_normalizer_lowercase(self, value: bool) -> None: self.add_bool(Keys.Tokenizer.NORMALIZER_LOWERCASE, value) diff --git a/scripts/gen-unicode-data.py b/scripts/gen-unicode-data.py index 0fa78b22e..35ac06546 100644 --- a/scripts/gen-unicode-data.py +++ b/scripts/gen-unicode-data.py @@ -1,10 +1,50 @@ from __future__ import annotations import array +import sys import unicodedata + import requests +def out(line=""): + print(line, end='\n') # noqa + + +def normalization_tables(): + out(f"// Canonical normalization tables: Unicode {unicodedata.unidata_version}.") + out("const std::unordered_map unicode_combining_class = {") + for cpt in range(0x110000): + if value := unicodedata.combining(chr(cpt)): + out(f"{{0x{cpt:06X}, {value}}},") + out("};\n") + out("const std::unordered_map> unicode_decomposition = {") + compositions = [] + for cpt in range(0x110000): + if 0xAC00 <= cpt < 0xAC00 + 11172: + continue + raw = unicodedata.decomposition(chr(cpt)) + if not raw or raw.startswith("<"): + continue + parts = [int(part, 16) for part in raw.split()] + assert 1 <= len(parts) <= 2 + first, second = parts[0], parts[1] if len(parts) == 2 else 0 + out(f"{{0x{cpt:06X}, {{0x{first:06X}, 0x{second:06X}}}}},") + if second and unicodedata.normalize("NFC", chr(first) + chr(second)) == chr(cpt): + compositions.append((first, second, cpt)) + out("};\n") + out("const std::unordered_map unicode_composition = {") + for first, second, cpt in compositions: + out(f"{{0x{((first << 32) | second):016X}ULL, 0x{cpt:06X}}},") + out("};") + + +# Generate only canonical tables, without downloading the UCD data. +if sys.argv[1:] == ["--normalization-only"]: + normalization_tables() + sys.exit(0) + + MAX_CODEPOINTS = 0x110000 UNICODE_DATA_URL = "https://www.unicode.org/Public/UCD/latest/ucd/UnicodeData.txt" @@ -155,10 +195,6 @@ for codepoint, norm in table_nfd: # Generate 'unicode-data.cpp': # python ./scripts//gen-unicode-data.py > unicode-data.cpp -def out(line=""): - print(line, end='\n') # noqa - - out("""\ // generated with scripts/gen-unicode-data.py @@ -194,3 +230,5 @@ out("const std::vector unicode_ranges_nfd = { // start, last, nfd") for triple in ranges_nfd: out("{0x%06X, 0x%06X, 0x%06X}," % triple) out("};\n") + +normalization_tables() diff --git a/src/llama-arch.cpp b/src/llama-arch.cpp index 0dc4cc961..1acda79d8 100644 --- a/src/llama-arch.cpp +++ b/src/llama-arch.cpp @@ -421,6 +421,7 @@ static const std::map LLM_KV_NAMES = { { LLM_KV_TOKENIZER_HF_JSON, "tokenizer.huggingface.json" }, { LLM_KV_TOKENIZER_RWKV, "tokenizer.rwkv.world" }, { LLM_KV_TOKENIZER_CHAT_TEMPLATE, "tokenizer.chat_template" }, + { LLM_KV_TOKENIZER_NORMALIZER_NFC, "tokenizer.ggml.normalizer.nfc" }, { LLM_KV_TOKENIZER_NORMALIZER_LOWERCASE, "tokenizer.ggml.normalizer.lowercase" }, { LLM_KV_TOKENIZER_NORMALIZER_STRIP_ACCENTS, "tokenizer.ggml.normalizer.strip_accents" }, { LLM_KV_TOKENIZER_FIM_PRE_ID, "tokenizer.ggml.fim_pre_token_id" }, diff --git a/src/llama-arch.h b/src/llama-arch.h index 8f8cc27ed..e6e9bd4b9 100644 --- a/src/llama-arch.h +++ b/src/llama-arch.h @@ -394,6 +394,7 @@ enum llm_kv { LLM_KV_TOKENIZER_HF_JSON, LLM_KV_TOKENIZER_RWKV, LLM_KV_TOKENIZER_CHAT_TEMPLATE, + LLM_KV_TOKENIZER_NORMALIZER_NFC, LLM_KV_TOKENIZER_NORMALIZER_LOWERCASE, LLM_KV_TOKENIZER_NORMALIZER_STRIP_ACCENTS, LLM_KV_TOKENIZER_FIM_PRE_ID, diff --git a/src/llama-vocab.cpp b/src/llama-vocab.cpp index dbadaf100..9b5cc2e1c 100644 --- a/src/llama-vocab.cpp +++ b/src/llama-vocab.cpp @@ -1021,7 +1021,20 @@ struct llm_tokenizer_ugm_session { // normalize the input first std::string normalized; - normalize(text, &normalized); + if (vocab.get_normalizer_opts().nfc) { + try { + std::string canonical; + for (const uint32_t cpt : unicode_cpts_normalize_nfc(unicode_cpts_from_utf8(text))) { + canonical += unicode_cpt_to_utf8(cpt); + } + normalize(canonical, &normalized); + } catch (const std::invalid_argument &) { + // Use the existing UGM normalization path for malformed input. + normalize(text, &normalized); + } + } else { + normalize(text, &normalized); + } size_t input_len = normalized.size(); if (input_len == 0) { return; @@ -1950,7 +1963,7 @@ struct llama_vocab::impl { bool escape_whitespaces = true; bool treat_whitespace_as_suffix = false; - // BertNormalizer options + // Tokenizer normalizer options llama_vocab::normalizer_options normalizer_opts; std::unordered_map token_to_id; @@ -2778,7 +2791,8 @@ void llama_vocab::impl::load(llama_model_loader & ml, const LLM_KV & kv) { } } - // BertNormalizer options + // Tokenizer normalizer options + ml.get_key(LLM_KV_TOKENIZER_NORMALIZER_NFC, normalizer_opts.nfc, false); ml.get_key(LLM_KV_TOKENIZER_NORMALIZER_LOWERCASE, normalizer_opts.lowercase, false); normalizer_opts.strip_accents = normalizer_opts.lowercase; ml.get_key(LLM_KV_TOKENIZER_NORMALIZER_STRIP_ACCENTS, normalizer_opts.strip_accents, false); diff --git a/src/llama-vocab.h b/src/llama-vocab.h index 2d40c6271..898a23ae6 100644 --- a/src/llama-vocab.h +++ b/src/llama-vocab.h @@ -83,6 +83,7 @@ struct llama_vocab { }; struct normalizer_options { + bool nfc = false; bool lowercase = true; bool strip_accents = true; // TODO: clean_text, handle_chinese_chars diff --git a/src/unicode-data.cpp b/src/unicode-data.cpp index 04dcd7fcf..f65d7be27 100644 --- a/src/unicode-data.cpp +++ b/src/unicode-data.cpp @@ -7032,3 +7032,3988 @@ const std::initializer_list unicode_ranges_nfd = { // start, last, n {0x02FA1C, 0x02FA1C, 0x009F3B}, {0x02FA1D, 0x02FA1D, 0x02A600}, }; +// Canonical normalization tables: Unicode 16.0.0. +const std::unordered_map unicode_combining_class = { +{0x000300, 230}, +{0x000301, 230}, +{0x000302, 230}, +{0x000303, 230}, +{0x000304, 230}, +{0x000305, 230}, +{0x000306, 230}, +{0x000307, 230}, +{0x000308, 230}, +{0x000309, 230}, +{0x00030A, 230}, +{0x00030B, 230}, +{0x00030C, 230}, +{0x00030D, 230}, +{0x00030E, 230}, +{0x00030F, 230}, +{0x000310, 230}, +{0x000311, 230}, +{0x000312, 230}, +{0x000313, 230}, +{0x000314, 230}, +{0x000315, 232}, +{0x000316, 220}, +{0x000317, 220}, +{0x000318, 220}, +{0x000319, 220}, +{0x00031A, 232}, +{0x00031B, 216}, +{0x00031C, 220}, +{0x00031D, 220}, +{0x00031E, 220}, +{0x00031F, 220}, +{0x000320, 220}, +{0x000321, 202}, +{0x000322, 202}, +{0x000323, 220}, +{0x000324, 220}, +{0x000325, 220}, +{0x000326, 220}, +{0x000327, 202}, +{0x000328, 202}, +{0x000329, 220}, +{0x00032A, 220}, +{0x00032B, 220}, +{0x00032C, 220}, +{0x00032D, 220}, +{0x00032E, 220}, +{0x00032F, 220}, +{0x000330, 220}, +{0x000331, 220}, +{0x000332, 220}, +{0x000333, 220}, +{0x000334, 1}, +{0x000335, 1}, +{0x000336, 1}, +{0x000337, 1}, +{0x000338, 1}, +{0x000339, 220}, +{0x00033A, 220}, +{0x00033B, 220}, +{0x00033C, 220}, +{0x00033D, 230}, +{0x00033E, 230}, +{0x00033F, 230}, +{0x000340, 230}, +{0x000341, 230}, +{0x000342, 230}, +{0x000343, 230}, +{0x000344, 230}, +{0x000345, 240}, +{0x000346, 230}, +{0x000347, 220}, +{0x000348, 220}, +{0x000349, 220}, +{0x00034A, 230}, +{0x00034B, 230}, +{0x00034C, 230}, +{0x00034D, 220}, +{0x00034E, 220}, +{0x000350, 230}, +{0x000351, 230}, +{0x000352, 230}, +{0x000353, 220}, +{0x000354, 220}, +{0x000355, 220}, +{0x000356, 220}, +{0x000357, 230}, +{0x000358, 232}, +{0x000359, 220}, +{0x00035A, 220}, +{0x00035B, 230}, +{0x00035C, 233}, +{0x00035D, 234}, +{0x00035E, 234}, +{0x00035F, 233}, +{0x000360, 234}, +{0x000361, 234}, +{0x000362, 233}, +{0x000363, 230}, +{0x000364, 230}, +{0x000365, 230}, +{0x000366, 230}, +{0x000367, 230}, +{0x000368, 230}, +{0x000369, 230}, +{0x00036A, 230}, +{0x00036B, 230}, +{0x00036C, 230}, +{0x00036D, 230}, +{0x00036E, 230}, +{0x00036F, 230}, +{0x000483, 230}, +{0x000484, 230}, +{0x000485, 230}, +{0x000486, 230}, +{0x000487, 230}, +{0x000591, 220}, +{0x000592, 230}, +{0x000593, 230}, +{0x000594, 230}, +{0x000595, 230}, +{0x000596, 220}, +{0x000597, 230}, +{0x000598, 230}, +{0x000599, 230}, +{0x00059A, 222}, +{0x00059B, 220}, +{0x00059C, 230}, +{0x00059D, 230}, +{0x00059E, 230}, +{0x00059F, 230}, +{0x0005A0, 230}, +{0x0005A1, 230}, +{0x0005A2, 220}, +{0x0005A3, 220}, +{0x0005A4, 220}, +{0x0005A5, 220}, +{0x0005A6, 220}, +{0x0005A7, 220}, +{0x0005A8, 230}, +{0x0005A9, 230}, +{0x0005AA, 220}, +{0x0005AB, 230}, +{0x0005AC, 230}, +{0x0005AD, 222}, +{0x0005AE, 228}, +{0x0005AF, 230}, +{0x0005B0, 10}, +{0x0005B1, 11}, +{0x0005B2, 12}, +{0x0005B3, 13}, +{0x0005B4, 14}, +{0x0005B5, 15}, +{0x0005B6, 16}, +{0x0005B7, 17}, +{0x0005B8, 18}, +{0x0005B9, 19}, +{0x0005BA, 19}, +{0x0005BB, 20}, +{0x0005BC, 21}, +{0x0005BD, 22}, +{0x0005BF, 23}, +{0x0005C1, 24}, +{0x0005C2, 25}, +{0x0005C4, 230}, +{0x0005C5, 220}, +{0x0005C7, 18}, +{0x000610, 230}, +{0x000611, 230}, +{0x000612, 230}, +{0x000613, 230}, +{0x000614, 230}, +{0x000615, 230}, +{0x000616, 230}, +{0x000617, 230}, +{0x000618, 30}, +{0x000619, 31}, +{0x00061A, 32}, +{0x00064B, 27}, +{0x00064C, 28}, +{0x00064D, 29}, +{0x00064E, 30}, +{0x00064F, 31}, +{0x000650, 32}, +{0x000651, 33}, +{0x000652, 34}, +{0x000653, 230}, +{0x000654, 230}, +{0x000655, 220}, +{0x000656, 220}, +{0x000657, 230}, +{0x000658, 230}, +{0x000659, 230}, +{0x00065A, 230}, +{0x00065B, 230}, +{0x00065C, 220}, +{0x00065D, 230}, +{0x00065E, 230}, +{0x00065F, 220}, +{0x000670, 35}, +{0x0006D6, 230}, +{0x0006D7, 230}, +{0x0006D8, 230}, +{0x0006D9, 230}, +{0x0006DA, 230}, +{0x0006DB, 230}, +{0x0006DC, 230}, +{0x0006DF, 230}, +{0x0006E0, 230}, +{0x0006E1, 230}, +{0x0006E2, 230}, +{0x0006E3, 220}, +{0x0006E4, 230}, +{0x0006E7, 230}, +{0x0006E8, 230}, +{0x0006EA, 220}, +{0x0006EB, 230}, +{0x0006EC, 230}, +{0x0006ED, 220}, +{0x000711, 36}, +{0x000730, 230}, +{0x000731, 220}, +{0x000732, 230}, +{0x000733, 230}, +{0x000734, 220}, +{0x000735, 230}, +{0x000736, 230}, +{0x000737, 220}, +{0x000738, 220}, +{0x000739, 220}, +{0x00073A, 230}, +{0x00073B, 220}, +{0x00073C, 220}, +{0x00073D, 230}, +{0x00073E, 220}, +{0x00073F, 230}, +{0x000740, 230}, +{0x000741, 230}, +{0x000742, 220}, +{0x000743, 230}, +{0x000744, 220}, +{0x000745, 230}, +{0x000746, 220}, +{0x000747, 230}, +{0x000748, 220}, +{0x000749, 230}, +{0x00074A, 230}, +{0x0007EB, 230}, +{0x0007EC, 230}, +{0x0007ED, 230}, +{0x0007EE, 230}, +{0x0007EF, 230}, +{0x0007F0, 230}, +{0x0007F1, 230}, +{0x0007F2, 220}, +{0x0007F3, 230}, +{0x0007FD, 220}, +{0x000816, 230}, +{0x000817, 230}, +{0x000818, 230}, +{0x000819, 230}, +{0x00081B, 230}, +{0x00081C, 230}, +{0x00081D, 230}, +{0x00081E, 230}, +{0x00081F, 230}, +{0x000820, 230}, +{0x000821, 230}, +{0x000822, 230}, +{0x000823, 230}, +{0x000825, 230}, +{0x000826, 230}, +{0x000827, 230}, +{0x000829, 230}, +{0x00082A, 230}, +{0x00082B, 230}, +{0x00082C, 230}, +{0x00082D, 230}, +{0x000859, 220}, +{0x00085A, 220}, +{0x00085B, 220}, +{0x000897, 230}, +{0x000898, 230}, +{0x000899, 220}, +{0x00089A, 220}, +{0x00089B, 220}, +{0x00089C, 230}, +{0x00089D, 230}, +{0x00089E, 230}, +{0x00089F, 230}, +{0x0008CA, 230}, +{0x0008CB, 230}, +{0x0008CC, 230}, +{0x0008CD, 230}, +{0x0008CE, 230}, +{0x0008CF, 220}, +{0x0008D0, 220}, +{0x0008D1, 220}, +{0x0008D2, 220}, +{0x0008D3, 220}, +{0x0008D4, 230}, +{0x0008D5, 230}, +{0x0008D6, 230}, +{0x0008D7, 230}, +{0x0008D8, 230}, +{0x0008D9, 230}, +{0x0008DA, 230}, +{0x0008DB, 230}, +{0x0008DC, 230}, +{0x0008DD, 230}, +{0x0008DE, 230}, +{0x0008DF, 230}, +{0x0008E0, 230}, +{0x0008E1, 230}, +{0x0008E3, 220}, +{0x0008E4, 230}, +{0x0008E5, 230}, +{0x0008E6, 220}, +{0x0008E7, 230}, +{0x0008E8, 230}, +{0x0008E9, 220}, +{0x0008EA, 230}, +{0x0008EB, 230}, +{0x0008EC, 230}, +{0x0008ED, 220}, +{0x0008EE, 220}, +{0x0008EF, 220}, +{0x0008F0, 27}, +{0x0008F1, 28}, +{0x0008F2, 29}, +{0x0008F3, 230}, +{0x0008F4, 230}, +{0x0008F5, 230}, +{0x0008F6, 220}, +{0x0008F7, 230}, +{0x0008F8, 230}, +{0x0008F9, 220}, +{0x0008FA, 220}, +{0x0008FB, 230}, +{0x0008FC, 230}, +{0x0008FD, 230}, +{0x0008FE, 230}, +{0x0008FF, 230}, +{0x00093C, 7}, +{0x00094D, 9}, +{0x000951, 230}, +{0x000952, 220}, +{0x000953, 230}, +{0x000954, 230}, +{0x0009BC, 7}, +{0x0009CD, 9}, +{0x0009FE, 230}, +{0x000A3C, 7}, +{0x000A4D, 9}, +{0x000ABC, 7}, +{0x000ACD, 9}, +{0x000B3C, 7}, +{0x000B4D, 9}, +{0x000BCD, 9}, +{0x000C3C, 7}, +{0x000C4D, 9}, +{0x000C55, 84}, +{0x000C56, 91}, +{0x000CBC, 7}, +{0x000CCD, 9}, +{0x000D3B, 9}, +{0x000D3C, 9}, +{0x000D4D, 9}, +{0x000DCA, 9}, +{0x000E38, 103}, +{0x000E39, 103}, +{0x000E3A, 9}, +{0x000E48, 107}, +{0x000E49, 107}, +{0x000E4A, 107}, +{0x000E4B, 107}, +{0x000EB8, 118}, +{0x000EB9, 118}, +{0x000EBA, 9}, +{0x000EC8, 122}, +{0x000EC9, 122}, +{0x000ECA, 122}, +{0x000ECB, 122}, +{0x000F18, 220}, +{0x000F19, 220}, +{0x000F35, 220}, +{0x000F37, 220}, +{0x000F39, 216}, +{0x000F71, 129}, +{0x000F72, 130}, +{0x000F74, 132}, +{0x000F7A, 130}, +{0x000F7B, 130}, +{0x000F7C, 130}, +{0x000F7D, 130}, +{0x000F80, 130}, +{0x000F82, 230}, +{0x000F83, 230}, +{0x000F84, 9}, +{0x000F86, 230}, +{0x000F87, 230}, +{0x000FC6, 220}, +{0x001037, 7}, +{0x001039, 9}, +{0x00103A, 9}, +{0x00108D, 220}, +{0x00135D, 230}, +{0x00135E, 230}, +{0x00135F, 230}, +{0x001714, 9}, +{0x001715, 9}, +{0x001734, 9}, +{0x0017D2, 9}, +{0x0017DD, 230}, +{0x0018A9, 228}, +{0x001939, 222}, +{0x00193A, 230}, +{0x00193B, 220}, +{0x001A17, 230}, +{0x001A18, 220}, +{0x001A60, 9}, +{0x001A75, 230}, +{0x001A76, 230}, +{0x001A77, 230}, +{0x001A78, 230}, +{0x001A79, 230}, +{0x001A7A, 230}, +{0x001A7B, 230}, +{0x001A7C, 230}, +{0x001A7F, 220}, +{0x001AB0, 230}, +{0x001AB1, 230}, +{0x001AB2, 230}, +{0x001AB3, 230}, +{0x001AB4, 230}, +{0x001AB5, 220}, +{0x001AB6, 220}, +{0x001AB7, 220}, +{0x001AB8, 220}, +{0x001AB9, 220}, +{0x001ABA, 220}, +{0x001ABB, 230}, +{0x001ABC, 230}, +{0x001ABD, 220}, +{0x001ABF, 220}, +{0x001AC0, 220}, +{0x001AC1, 230}, +{0x001AC2, 230}, +{0x001AC3, 220}, +{0x001AC4, 220}, +{0x001AC5, 230}, +{0x001AC6, 230}, +{0x001AC7, 230}, +{0x001AC8, 230}, +{0x001AC9, 230}, +{0x001ACA, 220}, +{0x001ACB, 230}, +{0x001ACC, 230}, +{0x001ACD, 230}, +{0x001ACE, 230}, +{0x001B34, 7}, +{0x001B44, 9}, +{0x001B6B, 230}, +{0x001B6C, 220}, +{0x001B6D, 230}, +{0x001B6E, 230}, +{0x001B6F, 230}, +{0x001B70, 230}, +{0x001B71, 230}, +{0x001B72, 230}, +{0x001B73, 230}, +{0x001BAA, 9}, +{0x001BAB, 9}, +{0x001BE6, 7}, +{0x001BF2, 9}, +{0x001BF3, 9}, +{0x001C37, 7}, +{0x001CD0, 230}, +{0x001CD1, 230}, +{0x001CD2, 230}, +{0x001CD4, 1}, +{0x001CD5, 220}, +{0x001CD6, 220}, +{0x001CD7, 220}, +{0x001CD8, 220}, +{0x001CD9, 220}, +{0x001CDA, 230}, +{0x001CDB, 230}, +{0x001CDC, 220}, +{0x001CDD, 220}, +{0x001CDE, 220}, +{0x001CDF, 220}, +{0x001CE0, 230}, +{0x001CE2, 1}, +{0x001CE3, 1}, +{0x001CE4, 1}, +{0x001CE5, 1}, +{0x001CE6, 1}, +{0x001CE7, 1}, +{0x001CE8, 1}, +{0x001CED, 220}, +{0x001CF4, 230}, +{0x001CF8, 230}, +{0x001CF9, 230}, +{0x001DC0, 230}, +{0x001DC1, 230}, +{0x001DC2, 220}, +{0x001DC3, 230}, +{0x001DC4, 230}, +{0x001DC5, 230}, +{0x001DC6, 230}, +{0x001DC7, 230}, +{0x001DC8, 230}, +{0x001DC9, 230}, +{0x001DCA, 220}, +{0x001DCB, 230}, +{0x001DCC, 230}, +{0x001DCD, 234}, +{0x001DCE, 214}, +{0x001DCF, 220}, +{0x001DD0, 202}, +{0x001DD1, 230}, +{0x001DD2, 230}, +{0x001DD3, 230}, +{0x001DD4, 230}, +{0x001DD5, 230}, +{0x001DD6, 230}, +{0x001DD7, 230}, +{0x001DD8, 230}, +{0x001DD9, 230}, +{0x001DDA, 230}, +{0x001DDB, 230}, +{0x001DDC, 230}, +{0x001DDD, 230}, +{0x001DDE, 230}, +{0x001DDF, 230}, +{0x001DE0, 230}, +{0x001DE1, 230}, +{0x001DE2, 230}, +{0x001DE3, 230}, +{0x001DE4, 230}, +{0x001DE5, 230}, +{0x001DE6, 230}, +{0x001DE7, 230}, +{0x001DE8, 230}, +{0x001DE9, 230}, +{0x001DEA, 230}, +{0x001DEB, 230}, +{0x001DEC, 230}, +{0x001DED, 230}, +{0x001DEE, 230}, +{0x001DEF, 230}, +{0x001DF0, 230}, +{0x001DF1, 230}, +{0x001DF2, 230}, +{0x001DF3, 230}, +{0x001DF4, 230}, +{0x001DF5, 230}, +{0x001DF6, 232}, +{0x001DF7, 228}, +{0x001DF8, 228}, +{0x001DF9, 220}, +{0x001DFA, 218}, +{0x001DFB, 230}, +{0x001DFC, 233}, +{0x001DFD, 220}, +{0x001DFE, 230}, +{0x001DFF, 220}, +{0x0020D0, 230}, +{0x0020D1, 230}, +{0x0020D2, 1}, +{0x0020D3, 1}, +{0x0020D4, 230}, +{0x0020D5, 230}, +{0x0020D6, 230}, +{0x0020D7, 230}, +{0x0020D8, 1}, +{0x0020D9, 1}, +{0x0020DA, 1}, +{0x0020DB, 230}, +{0x0020DC, 230}, +{0x0020E1, 230}, +{0x0020E5, 1}, +{0x0020E6, 1}, +{0x0020E7, 230}, +{0x0020E8, 220}, +{0x0020E9, 230}, +{0x0020EA, 1}, +{0x0020EB, 1}, +{0x0020EC, 220}, +{0x0020ED, 220}, +{0x0020EE, 220}, +{0x0020EF, 220}, +{0x0020F0, 230}, +{0x002CEF, 230}, +{0x002CF0, 230}, +{0x002CF1, 230}, +{0x002D7F, 9}, +{0x002DE0, 230}, +{0x002DE1, 230}, +{0x002DE2, 230}, +{0x002DE3, 230}, +{0x002DE4, 230}, +{0x002DE5, 230}, +{0x002DE6, 230}, +{0x002DE7, 230}, +{0x002DE8, 230}, +{0x002DE9, 230}, +{0x002DEA, 230}, +{0x002DEB, 230}, +{0x002DEC, 230}, +{0x002DED, 230}, +{0x002DEE, 230}, +{0x002DEF, 230}, +{0x002DF0, 230}, +{0x002DF1, 230}, +{0x002DF2, 230}, +{0x002DF3, 230}, +{0x002DF4, 230}, +{0x002DF5, 230}, +{0x002DF6, 230}, +{0x002DF7, 230}, +{0x002DF8, 230}, +{0x002DF9, 230}, +{0x002DFA, 230}, +{0x002DFB, 230}, +{0x002DFC, 230}, +{0x002DFD, 230}, +{0x002DFE, 230}, +{0x002DFF, 230}, +{0x00302A, 218}, +{0x00302B, 228}, +{0x00302C, 232}, +{0x00302D, 222}, +{0x00302E, 224}, +{0x00302F, 224}, +{0x003099, 8}, +{0x00309A, 8}, +{0x00A66F, 230}, +{0x00A674, 230}, +{0x00A675, 230}, +{0x00A676, 230}, +{0x00A677, 230}, +{0x00A678, 230}, +{0x00A679, 230}, +{0x00A67A, 230}, +{0x00A67B, 230}, +{0x00A67C, 230}, +{0x00A67D, 230}, +{0x00A69E, 230}, +{0x00A69F, 230}, +{0x00A6F0, 230}, +{0x00A6F1, 230}, +{0x00A806, 9}, +{0x00A82C, 9}, +{0x00A8C4, 9}, +{0x00A8E0, 230}, +{0x00A8E1, 230}, +{0x00A8E2, 230}, +{0x00A8E3, 230}, +{0x00A8E4, 230}, +{0x00A8E5, 230}, +{0x00A8E6, 230}, +{0x00A8E7, 230}, +{0x00A8E8, 230}, +{0x00A8E9, 230}, +{0x00A8EA, 230}, +{0x00A8EB, 230}, +{0x00A8EC, 230}, +{0x00A8ED, 230}, +{0x00A8EE, 230}, +{0x00A8EF, 230}, +{0x00A8F0, 230}, +{0x00A8F1, 230}, +{0x00A92B, 220}, +{0x00A92C, 220}, +{0x00A92D, 220}, +{0x00A953, 9}, +{0x00A9B3, 7}, +{0x00A9C0, 9}, +{0x00AAB0, 230}, +{0x00AAB2, 230}, +{0x00AAB3, 230}, +{0x00AAB4, 220}, +{0x00AAB7, 230}, +{0x00AAB8, 230}, +{0x00AABE, 230}, +{0x00AABF, 230}, +{0x00AAC1, 230}, +{0x00AAF6, 9}, +{0x00ABED, 9}, +{0x00FB1E, 26}, +{0x00FE20, 230}, +{0x00FE21, 230}, +{0x00FE22, 230}, +{0x00FE23, 230}, +{0x00FE24, 230}, +{0x00FE25, 230}, +{0x00FE26, 230}, +{0x00FE27, 220}, +{0x00FE28, 220}, +{0x00FE29, 220}, +{0x00FE2A, 220}, +{0x00FE2B, 220}, +{0x00FE2C, 220}, +{0x00FE2D, 220}, +{0x00FE2E, 230}, +{0x00FE2F, 230}, +{0x0101FD, 220}, +{0x0102E0, 220}, +{0x010376, 230}, +{0x010377, 230}, +{0x010378, 230}, +{0x010379, 230}, +{0x01037A, 230}, +{0x010A0D, 220}, +{0x010A0F, 230}, +{0x010A38, 230}, +{0x010A39, 1}, +{0x010A3A, 220}, +{0x010A3F, 9}, +{0x010AE5, 230}, +{0x010AE6, 220}, +{0x010D24, 230}, +{0x010D25, 230}, +{0x010D26, 230}, +{0x010D27, 230}, +{0x010D69, 230}, +{0x010D6A, 230}, +{0x010D6B, 230}, +{0x010D6C, 230}, +{0x010D6D, 230}, +{0x010EAB, 230}, +{0x010EAC, 230}, +{0x010EFD, 220}, +{0x010EFE, 220}, +{0x010EFF, 220}, +{0x010F46, 220}, +{0x010F47, 220}, +{0x010F48, 230}, +{0x010F49, 230}, +{0x010F4A, 230}, +{0x010F4B, 220}, +{0x010F4C, 230}, +{0x010F4D, 220}, +{0x010F4E, 220}, +{0x010F4F, 220}, +{0x010F50, 220}, +{0x010F82, 230}, +{0x010F83, 220}, +{0x010F84, 230}, +{0x010F85, 220}, +{0x011046, 9}, +{0x011070, 9}, +{0x01107F, 9}, +{0x0110B9, 9}, +{0x0110BA, 7}, +{0x011100, 230}, +{0x011101, 230}, +{0x011102, 230}, +{0x011133, 9}, +{0x011134, 9}, +{0x011173, 7}, +{0x0111C0, 9}, +{0x0111CA, 7}, +{0x011235, 9}, +{0x011236, 7}, +{0x0112E9, 7}, +{0x0112EA, 9}, +{0x01133B, 7}, +{0x01133C, 7}, +{0x01134D, 9}, +{0x011366, 230}, +{0x011367, 230}, +{0x011368, 230}, +{0x011369, 230}, +{0x01136A, 230}, +{0x01136B, 230}, +{0x01136C, 230}, +{0x011370, 230}, +{0x011371, 230}, +{0x011372, 230}, +{0x011373, 230}, +{0x011374, 230}, +{0x0113CE, 9}, +{0x0113CF, 9}, +{0x0113D0, 9}, +{0x011442, 9}, +{0x011446, 7}, +{0x01145E, 230}, +{0x0114C2, 9}, +{0x0114C3, 7}, +{0x0115BF, 9}, +{0x0115C0, 7}, +{0x01163F, 9}, +{0x0116B6, 9}, +{0x0116B7, 7}, +{0x01172B, 9}, +{0x011839, 9}, +{0x01183A, 7}, +{0x01193D, 9}, +{0x01193E, 9}, +{0x011943, 7}, +{0x0119E0, 9}, +{0x011A34, 9}, +{0x011A47, 9}, +{0x011A99, 9}, +{0x011C3F, 9}, +{0x011D42, 7}, +{0x011D44, 9}, +{0x011D45, 9}, +{0x011D97, 9}, +{0x011F41, 9}, +{0x011F42, 9}, +{0x01612F, 9}, +{0x016AF0, 1}, +{0x016AF1, 1}, +{0x016AF2, 1}, +{0x016AF3, 1}, +{0x016AF4, 1}, +{0x016B30, 230}, +{0x016B31, 230}, +{0x016B32, 230}, +{0x016B33, 230}, +{0x016B34, 230}, +{0x016B35, 230}, +{0x016B36, 230}, +{0x016FF0, 6}, +{0x016FF1, 6}, +{0x01BC9E, 1}, +{0x01D165, 216}, +{0x01D166, 216}, +{0x01D167, 1}, +{0x01D168, 1}, +{0x01D169, 1}, +{0x01D16D, 226}, +{0x01D16E, 216}, +{0x01D16F, 216}, +{0x01D170, 216}, +{0x01D171, 216}, +{0x01D172, 216}, +{0x01D17B, 220}, +{0x01D17C, 220}, +{0x01D17D, 220}, +{0x01D17E, 220}, +{0x01D17F, 220}, +{0x01D180, 220}, +{0x01D181, 220}, +{0x01D182, 220}, +{0x01D185, 230}, +{0x01D186, 230}, +{0x01D187, 230}, +{0x01D188, 230}, +{0x01D189, 230}, +{0x01D18A, 220}, +{0x01D18B, 220}, +{0x01D1AA, 230}, +{0x01D1AB, 230}, +{0x01D1AC, 230}, +{0x01D1AD, 230}, +{0x01D242, 230}, +{0x01D243, 230}, +{0x01D244, 230}, +{0x01E000, 230}, +{0x01E001, 230}, +{0x01E002, 230}, +{0x01E003, 230}, +{0x01E004, 230}, +{0x01E005, 230}, +{0x01E006, 230}, +{0x01E008, 230}, +{0x01E009, 230}, +{0x01E00A, 230}, +{0x01E00B, 230}, +{0x01E00C, 230}, +{0x01E00D, 230}, +{0x01E00E, 230}, +{0x01E00F, 230}, +{0x01E010, 230}, +{0x01E011, 230}, +{0x01E012, 230}, +{0x01E013, 230}, +{0x01E014, 230}, +{0x01E015, 230}, +{0x01E016, 230}, +{0x01E017, 230}, +{0x01E018, 230}, +{0x01E01B, 230}, +{0x01E01C, 230}, +{0x01E01D, 230}, +{0x01E01E, 230}, +{0x01E01F, 230}, +{0x01E020, 230}, +{0x01E021, 230}, +{0x01E023, 230}, +{0x01E024, 230}, +{0x01E026, 230}, +{0x01E027, 230}, +{0x01E028, 230}, +{0x01E029, 230}, +{0x01E02A, 230}, +{0x01E08F, 230}, +{0x01E130, 230}, +{0x01E131, 230}, +{0x01E132, 230}, +{0x01E133, 230}, +{0x01E134, 230}, +{0x01E135, 230}, +{0x01E136, 230}, +{0x01E2AE, 230}, +{0x01E2EC, 230}, +{0x01E2ED, 230}, +{0x01E2EE, 230}, +{0x01E2EF, 230}, +{0x01E4EC, 232}, +{0x01E4ED, 232}, +{0x01E4EE, 220}, +{0x01E4EF, 230}, +{0x01E5EE, 230}, +{0x01E5EF, 220}, +{0x01E8D0, 220}, +{0x01E8D1, 220}, +{0x01E8D2, 220}, +{0x01E8D3, 220}, +{0x01E8D4, 220}, +{0x01E8D5, 220}, +{0x01E8D6, 220}, +{0x01E944, 230}, +{0x01E945, 230}, +{0x01E946, 230}, +{0x01E947, 230}, +{0x01E948, 230}, +{0x01E949, 230}, +{0x01E94A, 7}, +}; + +const std::unordered_map> unicode_decomposition = { +{0x0000C0, {0x000041, 0x000300}}, +{0x0000C1, {0x000041, 0x000301}}, +{0x0000C2, {0x000041, 0x000302}}, +{0x0000C3, {0x000041, 0x000303}}, +{0x0000C4, {0x000041, 0x000308}}, +{0x0000C5, {0x000041, 0x00030A}}, +{0x0000C7, {0x000043, 0x000327}}, +{0x0000C8, {0x000045, 0x000300}}, +{0x0000C9, {0x000045, 0x000301}}, +{0x0000CA, {0x000045, 0x000302}}, +{0x0000CB, {0x000045, 0x000308}}, +{0x0000CC, {0x000049, 0x000300}}, +{0x0000CD, {0x000049, 0x000301}}, +{0x0000CE, {0x000049, 0x000302}}, +{0x0000CF, {0x000049, 0x000308}}, +{0x0000D1, {0x00004E, 0x000303}}, +{0x0000D2, {0x00004F, 0x000300}}, +{0x0000D3, {0x00004F, 0x000301}}, +{0x0000D4, {0x00004F, 0x000302}}, +{0x0000D5, {0x00004F, 0x000303}}, +{0x0000D6, {0x00004F, 0x000308}}, +{0x0000D9, {0x000055, 0x000300}}, +{0x0000DA, {0x000055, 0x000301}}, +{0x0000DB, {0x000055, 0x000302}}, +{0x0000DC, {0x000055, 0x000308}}, +{0x0000DD, {0x000059, 0x000301}}, +{0x0000E0, {0x000061, 0x000300}}, +{0x0000E1, {0x000061, 0x000301}}, +{0x0000E2, {0x000061, 0x000302}}, +{0x0000E3, {0x000061, 0x000303}}, +{0x0000E4, {0x000061, 0x000308}}, +{0x0000E5, {0x000061, 0x00030A}}, +{0x0000E7, {0x000063, 0x000327}}, +{0x0000E8, {0x000065, 0x000300}}, +{0x0000E9, {0x000065, 0x000301}}, +{0x0000EA, {0x000065, 0x000302}}, +{0x0000EB, {0x000065, 0x000308}}, +{0x0000EC, {0x000069, 0x000300}}, +{0x0000ED, {0x000069, 0x000301}}, +{0x0000EE, {0x000069, 0x000302}}, +{0x0000EF, {0x000069, 0x000308}}, +{0x0000F1, {0x00006E, 0x000303}}, +{0x0000F2, {0x00006F, 0x000300}}, +{0x0000F3, {0x00006F, 0x000301}}, +{0x0000F4, {0x00006F, 0x000302}}, +{0x0000F5, {0x00006F, 0x000303}}, +{0x0000F6, {0x00006F, 0x000308}}, +{0x0000F9, {0x000075, 0x000300}}, +{0x0000FA, {0x000075, 0x000301}}, +{0x0000FB, {0x000075, 0x000302}}, +{0x0000FC, {0x000075, 0x000308}}, +{0x0000FD, {0x000079, 0x000301}}, +{0x0000FF, {0x000079, 0x000308}}, +{0x000100, {0x000041, 0x000304}}, +{0x000101, {0x000061, 0x000304}}, +{0x000102, {0x000041, 0x000306}}, +{0x000103, {0x000061, 0x000306}}, +{0x000104, {0x000041, 0x000328}}, +{0x000105, {0x000061, 0x000328}}, +{0x000106, {0x000043, 0x000301}}, +{0x000107, {0x000063, 0x000301}}, +{0x000108, {0x000043, 0x000302}}, +{0x000109, {0x000063, 0x000302}}, +{0x00010A, {0x000043, 0x000307}}, +{0x00010B, {0x000063, 0x000307}}, +{0x00010C, {0x000043, 0x00030C}}, +{0x00010D, {0x000063, 0x00030C}}, +{0x00010E, {0x000044, 0x00030C}}, +{0x00010F, {0x000064, 0x00030C}}, +{0x000112, {0x000045, 0x000304}}, +{0x000113, {0x000065, 0x000304}}, +{0x000114, {0x000045, 0x000306}}, +{0x000115, {0x000065, 0x000306}}, +{0x000116, {0x000045, 0x000307}}, +{0x000117, {0x000065, 0x000307}}, +{0x000118, {0x000045, 0x000328}}, +{0x000119, {0x000065, 0x000328}}, +{0x00011A, {0x000045, 0x00030C}}, +{0x00011B, {0x000065, 0x00030C}}, +{0x00011C, {0x000047, 0x000302}}, +{0x00011D, {0x000067, 0x000302}}, +{0x00011E, {0x000047, 0x000306}}, +{0x00011F, {0x000067, 0x000306}}, +{0x000120, {0x000047, 0x000307}}, +{0x000121, {0x000067, 0x000307}}, +{0x000122, {0x000047, 0x000327}}, +{0x000123, {0x000067, 0x000327}}, +{0x000124, {0x000048, 0x000302}}, +{0x000125, {0x000068, 0x000302}}, +{0x000128, {0x000049, 0x000303}}, +{0x000129, {0x000069, 0x000303}}, +{0x00012A, {0x000049, 0x000304}}, +{0x00012B, {0x000069, 0x000304}}, +{0x00012C, {0x000049, 0x000306}}, +{0x00012D, {0x000069, 0x000306}}, +{0x00012E, {0x000049, 0x000328}}, +{0x00012F, {0x000069, 0x000328}}, +{0x000130, {0x000049, 0x000307}}, +{0x000134, {0x00004A, 0x000302}}, +{0x000135, {0x00006A, 0x000302}}, +{0x000136, {0x00004B, 0x000327}}, +{0x000137, {0x00006B, 0x000327}}, +{0x000139, {0x00004C, 0x000301}}, +{0x00013A, {0x00006C, 0x000301}}, +{0x00013B, {0x00004C, 0x000327}}, +{0x00013C, {0x00006C, 0x000327}}, +{0x00013D, {0x00004C, 0x00030C}}, +{0x00013E, {0x00006C, 0x00030C}}, +{0x000143, {0x00004E, 0x000301}}, +{0x000144, {0x00006E, 0x000301}}, +{0x000145, {0x00004E, 0x000327}}, +{0x000146, {0x00006E, 0x000327}}, +{0x000147, {0x00004E, 0x00030C}}, +{0x000148, {0x00006E, 0x00030C}}, +{0x00014C, {0x00004F, 0x000304}}, +{0x00014D, {0x00006F, 0x000304}}, +{0x00014E, {0x00004F, 0x000306}}, +{0x00014F, {0x00006F, 0x000306}}, +{0x000150, {0x00004F, 0x00030B}}, +{0x000151, {0x00006F, 0x00030B}}, +{0x000154, {0x000052, 0x000301}}, +{0x000155, {0x000072, 0x000301}}, +{0x000156, {0x000052, 0x000327}}, +{0x000157, {0x000072, 0x000327}}, +{0x000158, {0x000052, 0x00030C}}, +{0x000159, {0x000072, 0x00030C}}, +{0x00015A, {0x000053, 0x000301}}, +{0x00015B, {0x000073, 0x000301}}, +{0x00015C, {0x000053, 0x000302}}, +{0x00015D, {0x000073, 0x000302}}, +{0x00015E, {0x000053, 0x000327}}, +{0x00015F, {0x000073, 0x000327}}, +{0x000160, {0x000053, 0x00030C}}, +{0x000161, {0x000073, 0x00030C}}, +{0x000162, {0x000054, 0x000327}}, +{0x000163, {0x000074, 0x000327}}, +{0x000164, {0x000054, 0x00030C}}, +{0x000165, {0x000074, 0x00030C}}, +{0x000168, {0x000055, 0x000303}}, +{0x000169, {0x000075, 0x000303}}, +{0x00016A, {0x000055, 0x000304}}, +{0x00016B, {0x000075, 0x000304}}, +{0x00016C, {0x000055, 0x000306}}, +{0x00016D, {0x000075, 0x000306}}, +{0x00016E, {0x000055, 0x00030A}}, +{0x00016F, {0x000075, 0x00030A}}, +{0x000170, {0x000055, 0x00030B}}, +{0x000171, {0x000075, 0x00030B}}, +{0x000172, {0x000055, 0x000328}}, +{0x000173, {0x000075, 0x000328}}, +{0x000174, {0x000057, 0x000302}}, +{0x000175, {0x000077, 0x000302}}, +{0x000176, {0x000059, 0x000302}}, +{0x000177, {0x000079, 0x000302}}, +{0x000178, {0x000059, 0x000308}}, +{0x000179, {0x00005A, 0x000301}}, +{0x00017A, {0x00007A, 0x000301}}, +{0x00017B, {0x00005A, 0x000307}}, +{0x00017C, {0x00007A, 0x000307}}, +{0x00017D, {0x00005A, 0x00030C}}, +{0x00017E, {0x00007A, 0x00030C}}, +{0x0001A0, {0x00004F, 0x00031B}}, +{0x0001A1, {0x00006F, 0x00031B}}, +{0x0001AF, {0x000055, 0x00031B}}, +{0x0001B0, {0x000075, 0x00031B}}, +{0x0001CD, {0x000041, 0x00030C}}, +{0x0001CE, {0x000061, 0x00030C}}, +{0x0001CF, {0x000049, 0x00030C}}, +{0x0001D0, {0x000069, 0x00030C}}, +{0x0001D1, {0x00004F, 0x00030C}}, +{0x0001D2, {0x00006F, 0x00030C}}, +{0x0001D3, {0x000055, 0x00030C}}, +{0x0001D4, {0x000075, 0x00030C}}, +{0x0001D5, {0x0000DC, 0x000304}}, +{0x0001D6, {0x0000FC, 0x000304}}, +{0x0001D7, {0x0000DC, 0x000301}}, +{0x0001D8, {0x0000FC, 0x000301}}, +{0x0001D9, {0x0000DC, 0x00030C}}, +{0x0001DA, {0x0000FC, 0x00030C}}, +{0x0001DB, {0x0000DC, 0x000300}}, +{0x0001DC, {0x0000FC, 0x000300}}, +{0x0001DE, {0x0000C4, 0x000304}}, +{0x0001DF, {0x0000E4, 0x000304}}, +{0x0001E0, {0x000226, 0x000304}}, +{0x0001E1, {0x000227, 0x000304}}, +{0x0001E2, {0x0000C6, 0x000304}}, +{0x0001E3, {0x0000E6, 0x000304}}, +{0x0001E6, {0x000047, 0x00030C}}, +{0x0001E7, {0x000067, 0x00030C}}, +{0x0001E8, {0x00004B, 0x00030C}}, +{0x0001E9, {0x00006B, 0x00030C}}, +{0x0001EA, {0x00004F, 0x000328}}, +{0x0001EB, {0x00006F, 0x000328}}, +{0x0001EC, {0x0001EA, 0x000304}}, +{0x0001ED, {0x0001EB, 0x000304}}, +{0x0001EE, {0x0001B7, 0x00030C}}, +{0x0001EF, {0x000292, 0x00030C}}, +{0x0001F0, {0x00006A, 0x00030C}}, +{0x0001F4, {0x000047, 0x000301}}, +{0x0001F5, {0x000067, 0x000301}}, +{0x0001F8, {0x00004E, 0x000300}}, +{0x0001F9, {0x00006E, 0x000300}}, +{0x0001FA, {0x0000C5, 0x000301}}, +{0x0001FB, {0x0000E5, 0x000301}}, +{0x0001FC, {0x0000C6, 0x000301}}, +{0x0001FD, {0x0000E6, 0x000301}}, +{0x0001FE, {0x0000D8, 0x000301}}, +{0x0001FF, {0x0000F8, 0x000301}}, +{0x000200, {0x000041, 0x00030F}}, +{0x000201, {0x000061, 0x00030F}}, +{0x000202, {0x000041, 0x000311}}, +{0x000203, {0x000061, 0x000311}}, +{0x000204, {0x000045, 0x00030F}}, +{0x000205, {0x000065, 0x00030F}}, +{0x000206, {0x000045, 0x000311}}, +{0x000207, {0x000065, 0x000311}}, +{0x000208, {0x000049, 0x00030F}}, +{0x000209, {0x000069, 0x00030F}}, +{0x00020A, {0x000049, 0x000311}}, +{0x00020B, {0x000069, 0x000311}}, +{0x00020C, {0x00004F, 0x00030F}}, +{0x00020D, {0x00006F, 0x00030F}}, +{0x00020E, {0x00004F, 0x000311}}, +{0x00020F, {0x00006F, 0x000311}}, +{0x000210, {0x000052, 0x00030F}}, +{0x000211, {0x000072, 0x00030F}}, +{0x000212, {0x000052, 0x000311}}, +{0x000213, {0x000072, 0x000311}}, +{0x000214, {0x000055, 0x00030F}}, +{0x000215, {0x000075, 0x00030F}}, +{0x000216, {0x000055, 0x000311}}, +{0x000217, {0x000075, 0x000311}}, +{0x000218, {0x000053, 0x000326}}, +{0x000219, {0x000073, 0x000326}}, +{0x00021A, {0x000054, 0x000326}}, +{0x00021B, {0x000074, 0x000326}}, +{0x00021E, {0x000048, 0x00030C}}, +{0x00021F, {0x000068, 0x00030C}}, +{0x000226, {0x000041, 0x000307}}, +{0x000227, {0x000061, 0x000307}}, +{0x000228, {0x000045, 0x000327}}, +{0x000229, {0x000065, 0x000327}}, +{0x00022A, {0x0000D6, 0x000304}}, +{0x00022B, {0x0000F6, 0x000304}}, +{0x00022C, {0x0000D5, 0x000304}}, +{0x00022D, {0x0000F5, 0x000304}}, +{0x00022E, {0x00004F, 0x000307}}, +{0x00022F, {0x00006F, 0x000307}}, +{0x000230, {0x00022E, 0x000304}}, +{0x000231, {0x00022F, 0x000304}}, +{0x000232, {0x000059, 0x000304}}, +{0x000233, {0x000079, 0x000304}}, +{0x000340, {0x000300, 0x000000}}, +{0x000341, {0x000301, 0x000000}}, +{0x000343, {0x000313, 0x000000}}, +{0x000344, {0x000308, 0x000301}}, +{0x000374, {0x0002B9, 0x000000}}, +{0x00037E, {0x00003B, 0x000000}}, +{0x000385, {0x0000A8, 0x000301}}, +{0x000386, {0x000391, 0x000301}}, +{0x000387, {0x0000B7, 0x000000}}, +{0x000388, {0x000395, 0x000301}}, +{0x000389, {0x000397, 0x000301}}, +{0x00038A, {0x000399, 0x000301}}, +{0x00038C, {0x00039F, 0x000301}}, +{0x00038E, {0x0003A5, 0x000301}}, +{0x00038F, {0x0003A9, 0x000301}}, +{0x000390, {0x0003CA, 0x000301}}, +{0x0003AA, {0x000399, 0x000308}}, +{0x0003AB, {0x0003A5, 0x000308}}, +{0x0003AC, {0x0003B1, 0x000301}}, +{0x0003AD, {0x0003B5, 0x000301}}, +{0x0003AE, {0x0003B7, 0x000301}}, +{0x0003AF, {0x0003B9, 0x000301}}, +{0x0003B0, {0x0003CB, 0x000301}}, +{0x0003CA, {0x0003B9, 0x000308}}, +{0x0003CB, {0x0003C5, 0x000308}}, +{0x0003CC, {0x0003BF, 0x000301}}, +{0x0003CD, {0x0003C5, 0x000301}}, +{0x0003CE, {0x0003C9, 0x000301}}, +{0x0003D3, {0x0003D2, 0x000301}}, +{0x0003D4, {0x0003D2, 0x000308}}, +{0x000400, {0x000415, 0x000300}}, +{0x000401, {0x000415, 0x000308}}, +{0x000403, {0x000413, 0x000301}}, +{0x000407, {0x000406, 0x000308}}, +{0x00040C, {0x00041A, 0x000301}}, +{0x00040D, {0x000418, 0x000300}}, +{0x00040E, {0x000423, 0x000306}}, +{0x000419, {0x000418, 0x000306}}, +{0x000439, {0x000438, 0x000306}}, +{0x000450, {0x000435, 0x000300}}, +{0x000451, {0x000435, 0x000308}}, +{0x000453, {0x000433, 0x000301}}, +{0x000457, {0x000456, 0x000308}}, +{0x00045C, {0x00043A, 0x000301}}, +{0x00045D, {0x000438, 0x000300}}, +{0x00045E, {0x000443, 0x000306}}, +{0x000476, {0x000474, 0x00030F}}, +{0x000477, {0x000475, 0x00030F}}, +{0x0004C1, {0x000416, 0x000306}}, +{0x0004C2, {0x000436, 0x000306}}, +{0x0004D0, {0x000410, 0x000306}}, +{0x0004D1, {0x000430, 0x000306}}, +{0x0004D2, {0x000410, 0x000308}}, +{0x0004D3, {0x000430, 0x000308}}, +{0x0004D6, {0x000415, 0x000306}}, +{0x0004D7, {0x000435, 0x000306}}, +{0x0004DA, {0x0004D8, 0x000308}}, +{0x0004DB, {0x0004D9, 0x000308}}, +{0x0004DC, {0x000416, 0x000308}}, +{0x0004DD, {0x000436, 0x000308}}, +{0x0004DE, {0x000417, 0x000308}}, +{0x0004DF, {0x000437, 0x000308}}, +{0x0004E2, {0x000418, 0x000304}}, +{0x0004E3, {0x000438, 0x000304}}, +{0x0004E4, {0x000418, 0x000308}}, +{0x0004E5, {0x000438, 0x000308}}, +{0x0004E6, {0x00041E, 0x000308}}, +{0x0004E7, {0x00043E, 0x000308}}, +{0x0004EA, {0x0004E8, 0x000308}}, +{0x0004EB, {0x0004E9, 0x000308}}, +{0x0004EC, {0x00042D, 0x000308}}, +{0x0004ED, {0x00044D, 0x000308}}, +{0x0004EE, {0x000423, 0x000304}}, +{0x0004EF, {0x000443, 0x000304}}, +{0x0004F0, {0x000423, 0x000308}}, +{0x0004F1, {0x000443, 0x000308}}, +{0x0004F2, {0x000423, 0x00030B}}, +{0x0004F3, {0x000443, 0x00030B}}, +{0x0004F4, {0x000427, 0x000308}}, +{0x0004F5, {0x000447, 0x000308}}, +{0x0004F8, {0x00042B, 0x000308}}, +{0x0004F9, {0x00044B, 0x000308}}, +{0x000622, {0x000627, 0x000653}}, +{0x000623, {0x000627, 0x000654}}, +{0x000624, {0x000648, 0x000654}}, +{0x000625, {0x000627, 0x000655}}, +{0x000626, {0x00064A, 0x000654}}, +{0x0006C0, {0x0006D5, 0x000654}}, +{0x0006C2, {0x0006C1, 0x000654}}, +{0x0006D3, {0x0006D2, 0x000654}}, +{0x000929, {0x000928, 0x00093C}}, +{0x000931, {0x000930, 0x00093C}}, +{0x000934, {0x000933, 0x00093C}}, +{0x000958, {0x000915, 0x00093C}}, +{0x000959, {0x000916, 0x00093C}}, +{0x00095A, {0x000917, 0x00093C}}, +{0x00095B, {0x00091C, 0x00093C}}, +{0x00095C, {0x000921, 0x00093C}}, +{0x00095D, {0x000922, 0x00093C}}, +{0x00095E, {0x00092B, 0x00093C}}, +{0x00095F, {0x00092F, 0x00093C}}, +{0x0009CB, {0x0009C7, 0x0009BE}}, +{0x0009CC, {0x0009C7, 0x0009D7}}, +{0x0009DC, {0x0009A1, 0x0009BC}}, +{0x0009DD, {0x0009A2, 0x0009BC}}, +{0x0009DF, {0x0009AF, 0x0009BC}}, +{0x000A33, {0x000A32, 0x000A3C}}, +{0x000A36, {0x000A38, 0x000A3C}}, +{0x000A59, {0x000A16, 0x000A3C}}, +{0x000A5A, {0x000A17, 0x000A3C}}, +{0x000A5B, {0x000A1C, 0x000A3C}}, +{0x000A5E, {0x000A2B, 0x000A3C}}, +{0x000B48, {0x000B47, 0x000B56}}, +{0x000B4B, {0x000B47, 0x000B3E}}, +{0x000B4C, {0x000B47, 0x000B57}}, +{0x000B5C, {0x000B21, 0x000B3C}}, +{0x000B5D, {0x000B22, 0x000B3C}}, +{0x000B94, {0x000B92, 0x000BD7}}, +{0x000BCA, {0x000BC6, 0x000BBE}}, +{0x000BCB, {0x000BC7, 0x000BBE}}, +{0x000BCC, {0x000BC6, 0x000BD7}}, +{0x000C48, {0x000C46, 0x000C56}}, +{0x000CC0, {0x000CBF, 0x000CD5}}, +{0x000CC7, {0x000CC6, 0x000CD5}}, +{0x000CC8, {0x000CC6, 0x000CD6}}, +{0x000CCA, {0x000CC6, 0x000CC2}}, +{0x000CCB, {0x000CCA, 0x000CD5}}, +{0x000D4A, {0x000D46, 0x000D3E}}, +{0x000D4B, {0x000D47, 0x000D3E}}, +{0x000D4C, {0x000D46, 0x000D57}}, +{0x000DDA, {0x000DD9, 0x000DCA}}, +{0x000DDC, {0x000DD9, 0x000DCF}}, +{0x000DDD, {0x000DDC, 0x000DCA}}, +{0x000DDE, {0x000DD9, 0x000DDF}}, +{0x000F43, {0x000F42, 0x000FB7}}, +{0x000F4D, {0x000F4C, 0x000FB7}}, +{0x000F52, {0x000F51, 0x000FB7}}, +{0x000F57, {0x000F56, 0x000FB7}}, +{0x000F5C, {0x000F5B, 0x000FB7}}, +{0x000F69, {0x000F40, 0x000FB5}}, +{0x000F73, {0x000F71, 0x000F72}}, +{0x000F75, {0x000F71, 0x000F74}}, +{0x000F76, {0x000FB2, 0x000F80}}, +{0x000F78, {0x000FB3, 0x000F80}}, +{0x000F81, {0x000F71, 0x000F80}}, +{0x000F93, {0x000F92, 0x000FB7}}, +{0x000F9D, {0x000F9C, 0x000FB7}}, +{0x000FA2, {0x000FA1, 0x000FB7}}, +{0x000FA7, {0x000FA6, 0x000FB7}}, +{0x000FAC, {0x000FAB, 0x000FB7}}, +{0x000FB9, {0x000F90, 0x000FB5}}, +{0x001026, {0x001025, 0x00102E}}, +{0x001B06, {0x001B05, 0x001B35}}, +{0x001B08, {0x001B07, 0x001B35}}, +{0x001B0A, {0x001B09, 0x001B35}}, +{0x001B0C, {0x001B0B, 0x001B35}}, +{0x001B0E, {0x001B0D, 0x001B35}}, +{0x001B12, {0x001B11, 0x001B35}}, +{0x001B3B, {0x001B3A, 0x001B35}}, +{0x001B3D, {0x001B3C, 0x001B35}}, +{0x001B40, {0x001B3E, 0x001B35}}, +{0x001B41, {0x001B3F, 0x001B35}}, +{0x001B43, {0x001B42, 0x001B35}}, +{0x001E00, {0x000041, 0x000325}}, +{0x001E01, {0x000061, 0x000325}}, +{0x001E02, {0x000042, 0x000307}}, +{0x001E03, {0x000062, 0x000307}}, +{0x001E04, {0x000042, 0x000323}}, +{0x001E05, {0x000062, 0x000323}}, +{0x001E06, {0x000042, 0x000331}}, +{0x001E07, {0x000062, 0x000331}}, +{0x001E08, {0x0000C7, 0x000301}}, +{0x001E09, {0x0000E7, 0x000301}}, +{0x001E0A, {0x000044, 0x000307}}, +{0x001E0B, {0x000064, 0x000307}}, +{0x001E0C, {0x000044, 0x000323}}, +{0x001E0D, {0x000064, 0x000323}}, +{0x001E0E, {0x000044, 0x000331}}, +{0x001E0F, {0x000064, 0x000331}}, +{0x001E10, {0x000044, 0x000327}}, +{0x001E11, {0x000064, 0x000327}}, +{0x001E12, {0x000044, 0x00032D}}, +{0x001E13, {0x000064, 0x00032D}}, +{0x001E14, {0x000112, 0x000300}}, +{0x001E15, {0x000113, 0x000300}}, +{0x001E16, {0x000112, 0x000301}}, +{0x001E17, {0x000113, 0x000301}}, +{0x001E18, {0x000045, 0x00032D}}, +{0x001E19, {0x000065, 0x00032D}}, +{0x001E1A, {0x000045, 0x000330}}, +{0x001E1B, {0x000065, 0x000330}}, +{0x001E1C, {0x000228, 0x000306}}, +{0x001E1D, {0x000229, 0x000306}}, +{0x001E1E, {0x000046, 0x000307}}, +{0x001E1F, {0x000066, 0x000307}}, +{0x001E20, {0x000047, 0x000304}}, +{0x001E21, {0x000067, 0x000304}}, +{0x001E22, {0x000048, 0x000307}}, +{0x001E23, {0x000068, 0x000307}}, +{0x001E24, {0x000048, 0x000323}}, +{0x001E25, {0x000068, 0x000323}}, +{0x001E26, {0x000048, 0x000308}}, +{0x001E27, {0x000068, 0x000308}}, +{0x001E28, {0x000048, 0x000327}}, +{0x001E29, {0x000068, 0x000327}}, +{0x001E2A, {0x000048, 0x00032E}}, +{0x001E2B, {0x000068, 0x00032E}}, +{0x001E2C, {0x000049, 0x000330}}, +{0x001E2D, {0x000069, 0x000330}}, +{0x001E2E, {0x0000CF, 0x000301}}, +{0x001E2F, {0x0000EF, 0x000301}}, +{0x001E30, {0x00004B, 0x000301}}, +{0x001E31, {0x00006B, 0x000301}}, +{0x001E32, {0x00004B, 0x000323}}, +{0x001E33, {0x00006B, 0x000323}}, +{0x001E34, {0x00004B, 0x000331}}, +{0x001E35, {0x00006B, 0x000331}}, +{0x001E36, {0x00004C, 0x000323}}, +{0x001E37, {0x00006C, 0x000323}}, +{0x001E38, {0x001E36, 0x000304}}, +{0x001E39, {0x001E37, 0x000304}}, +{0x001E3A, {0x00004C, 0x000331}}, +{0x001E3B, {0x00006C, 0x000331}}, +{0x001E3C, {0x00004C, 0x00032D}}, +{0x001E3D, {0x00006C, 0x00032D}}, +{0x001E3E, {0x00004D, 0x000301}}, +{0x001E3F, {0x00006D, 0x000301}}, +{0x001E40, {0x00004D, 0x000307}}, +{0x001E41, {0x00006D, 0x000307}}, +{0x001E42, {0x00004D, 0x000323}}, +{0x001E43, {0x00006D, 0x000323}}, +{0x001E44, {0x00004E, 0x000307}}, +{0x001E45, {0x00006E, 0x000307}}, +{0x001E46, {0x00004E, 0x000323}}, +{0x001E47, {0x00006E, 0x000323}}, +{0x001E48, {0x00004E, 0x000331}}, +{0x001E49, {0x00006E, 0x000331}}, +{0x001E4A, {0x00004E, 0x00032D}}, +{0x001E4B, {0x00006E, 0x00032D}}, +{0x001E4C, {0x0000D5, 0x000301}}, +{0x001E4D, {0x0000F5, 0x000301}}, +{0x001E4E, {0x0000D5, 0x000308}}, +{0x001E4F, {0x0000F5, 0x000308}}, +{0x001E50, {0x00014C, 0x000300}}, +{0x001E51, {0x00014D, 0x000300}}, +{0x001E52, {0x00014C, 0x000301}}, +{0x001E53, {0x00014D, 0x000301}}, +{0x001E54, {0x000050, 0x000301}}, +{0x001E55, {0x000070, 0x000301}}, +{0x001E56, {0x000050, 0x000307}}, +{0x001E57, {0x000070, 0x000307}}, +{0x001E58, {0x000052, 0x000307}}, +{0x001E59, {0x000072, 0x000307}}, +{0x001E5A, {0x000052, 0x000323}}, +{0x001E5B, {0x000072, 0x000323}}, +{0x001E5C, {0x001E5A, 0x000304}}, +{0x001E5D, {0x001E5B, 0x000304}}, +{0x001E5E, {0x000052, 0x000331}}, +{0x001E5F, {0x000072, 0x000331}}, +{0x001E60, {0x000053, 0x000307}}, +{0x001E61, {0x000073, 0x000307}}, +{0x001E62, {0x000053, 0x000323}}, +{0x001E63, {0x000073, 0x000323}}, +{0x001E64, {0x00015A, 0x000307}}, +{0x001E65, {0x00015B, 0x000307}}, +{0x001E66, {0x000160, 0x000307}}, +{0x001E67, {0x000161, 0x000307}}, +{0x001E68, {0x001E62, 0x000307}}, +{0x001E69, {0x001E63, 0x000307}}, +{0x001E6A, {0x000054, 0x000307}}, +{0x001E6B, {0x000074, 0x000307}}, +{0x001E6C, {0x000054, 0x000323}}, +{0x001E6D, {0x000074, 0x000323}}, +{0x001E6E, {0x000054, 0x000331}}, +{0x001E6F, {0x000074, 0x000331}}, +{0x001E70, {0x000054, 0x00032D}}, +{0x001E71, {0x000074, 0x00032D}}, +{0x001E72, {0x000055, 0x000324}}, +{0x001E73, {0x000075, 0x000324}}, +{0x001E74, {0x000055, 0x000330}}, +{0x001E75, {0x000075, 0x000330}}, +{0x001E76, {0x000055, 0x00032D}}, +{0x001E77, {0x000075, 0x00032D}}, +{0x001E78, {0x000168, 0x000301}}, +{0x001E79, {0x000169, 0x000301}}, +{0x001E7A, {0x00016A, 0x000308}}, +{0x001E7B, {0x00016B, 0x000308}}, +{0x001E7C, {0x000056, 0x000303}}, +{0x001E7D, {0x000076, 0x000303}}, +{0x001E7E, {0x000056, 0x000323}}, +{0x001E7F, {0x000076, 0x000323}}, +{0x001E80, {0x000057, 0x000300}}, +{0x001E81, {0x000077, 0x000300}}, +{0x001E82, {0x000057, 0x000301}}, +{0x001E83, {0x000077, 0x000301}}, +{0x001E84, {0x000057, 0x000308}}, +{0x001E85, {0x000077, 0x000308}}, +{0x001E86, {0x000057, 0x000307}}, +{0x001E87, {0x000077, 0x000307}}, +{0x001E88, {0x000057, 0x000323}}, +{0x001E89, {0x000077, 0x000323}}, +{0x001E8A, {0x000058, 0x000307}}, +{0x001E8B, {0x000078, 0x000307}}, +{0x001E8C, {0x000058, 0x000308}}, +{0x001E8D, {0x000078, 0x000308}}, +{0x001E8E, {0x000059, 0x000307}}, +{0x001E8F, {0x000079, 0x000307}}, +{0x001E90, {0x00005A, 0x000302}}, +{0x001E91, {0x00007A, 0x000302}}, +{0x001E92, {0x00005A, 0x000323}}, +{0x001E93, {0x00007A, 0x000323}}, +{0x001E94, {0x00005A, 0x000331}}, +{0x001E95, {0x00007A, 0x000331}}, +{0x001E96, {0x000068, 0x000331}}, +{0x001E97, {0x000074, 0x000308}}, +{0x001E98, {0x000077, 0x00030A}}, +{0x001E99, {0x000079, 0x00030A}}, +{0x001E9B, {0x00017F, 0x000307}}, +{0x001EA0, {0x000041, 0x000323}}, +{0x001EA1, {0x000061, 0x000323}}, +{0x001EA2, {0x000041, 0x000309}}, +{0x001EA3, {0x000061, 0x000309}}, +{0x001EA4, {0x0000C2, 0x000301}}, +{0x001EA5, {0x0000E2, 0x000301}}, +{0x001EA6, {0x0000C2, 0x000300}}, +{0x001EA7, {0x0000E2, 0x000300}}, +{0x001EA8, {0x0000C2, 0x000309}}, +{0x001EA9, {0x0000E2, 0x000309}}, +{0x001EAA, {0x0000C2, 0x000303}}, +{0x001EAB, {0x0000E2, 0x000303}}, +{0x001EAC, {0x001EA0, 0x000302}}, +{0x001EAD, {0x001EA1, 0x000302}}, +{0x001EAE, {0x000102, 0x000301}}, +{0x001EAF, {0x000103, 0x000301}}, +{0x001EB0, {0x000102, 0x000300}}, +{0x001EB1, {0x000103, 0x000300}}, +{0x001EB2, {0x000102, 0x000309}}, +{0x001EB3, {0x000103, 0x000309}}, +{0x001EB4, {0x000102, 0x000303}}, +{0x001EB5, {0x000103, 0x000303}}, +{0x001EB6, {0x001EA0, 0x000306}}, +{0x001EB7, {0x001EA1, 0x000306}}, +{0x001EB8, {0x000045, 0x000323}}, +{0x001EB9, {0x000065, 0x000323}}, +{0x001EBA, {0x000045, 0x000309}}, +{0x001EBB, {0x000065, 0x000309}}, +{0x001EBC, {0x000045, 0x000303}}, +{0x001EBD, {0x000065, 0x000303}}, +{0x001EBE, {0x0000CA, 0x000301}}, +{0x001EBF, {0x0000EA, 0x000301}}, +{0x001EC0, {0x0000CA, 0x000300}}, +{0x001EC1, {0x0000EA, 0x000300}}, +{0x001EC2, {0x0000CA, 0x000309}}, +{0x001EC3, {0x0000EA, 0x000309}}, +{0x001EC4, {0x0000CA, 0x000303}}, +{0x001EC5, {0x0000EA, 0x000303}}, +{0x001EC6, {0x001EB8, 0x000302}}, +{0x001EC7, {0x001EB9, 0x000302}}, +{0x001EC8, {0x000049, 0x000309}}, +{0x001EC9, {0x000069, 0x000309}}, +{0x001ECA, {0x000049, 0x000323}}, +{0x001ECB, {0x000069, 0x000323}}, +{0x001ECC, {0x00004F, 0x000323}}, +{0x001ECD, {0x00006F, 0x000323}}, +{0x001ECE, {0x00004F, 0x000309}}, +{0x001ECF, {0x00006F, 0x000309}}, +{0x001ED0, {0x0000D4, 0x000301}}, +{0x001ED1, {0x0000F4, 0x000301}}, +{0x001ED2, {0x0000D4, 0x000300}}, +{0x001ED3, {0x0000F4, 0x000300}}, +{0x001ED4, {0x0000D4, 0x000309}}, +{0x001ED5, {0x0000F4, 0x000309}}, +{0x001ED6, {0x0000D4, 0x000303}}, +{0x001ED7, {0x0000F4, 0x000303}}, +{0x001ED8, {0x001ECC, 0x000302}}, +{0x001ED9, {0x001ECD, 0x000302}}, +{0x001EDA, {0x0001A0, 0x000301}}, +{0x001EDB, {0x0001A1, 0x000301}}, +{0x001EDC, {0x0001A0, 0x000300}}, +{0x001EDD, {0x0001A1, 0x000300}}, +{0x001EDE, {0x0001A0, 0x000309}}, +{0x001EDF, {0x0001A1, 0x000309}}, +{0x001EE0, {0x0001A0, 0x000303}}, +{0x001EE1, {0x0001A1, 0x000303}}, +{0x001EE2, {0x0001A0, 0x000323}}, +{0x001EE3, {0x0001A1, 0x000323}}, +{0x001EE4, {0x000055, 0x000323}}, +{0x001EE5, {0x000075, 0x000323}}, +{0x001EE6, {0x000055, 0x000309}}, +{0x001EE7, {0x000075, 0x000309}}, +{0x001EE8, {0x0001AF, 0x000301}}, +{0x001EE9, {0x0001B0, 0x000301}}, +{0x001EEA, {0x0001AF, 0x000300}}, +{0x001EEB, {0x0001B0, 0x000300}}, +{0x001EEC, {0x0001AF, 0x000309}}, +{0x001EED, {0x0001B0, 0x000309}}, +{0x001EEE, {0x0001AF, 0x000303}}, +{0x001EEF, {0x0001B0, 0x000303}}, +{0x001EF0, {0x0001AF, 0x000323}}, +{0x001EF1, {0x0001B0, 0x000323}}, +{0x001EF2, {0x000059, 0x000300}}, +{0x001EF3, {0x000079, 0x000300}}, +{0x001EF4, {0x000059, 0x000323}}, +{0x001EF5, {0x000079, 0x000323}}, +{0x001EF6, {0x000059, 0x000309}}, +{0x001EF7, {0x000079, 0x000309}}, +{0x001EF8, {0x000059, 0x000303}}, +{0x001EF9, {0x000079, 0x000303}}, +{0x001F00, {0x0003B1, 0x000313}}, +{0x001F01, {0x0003B1, 0x000314}}, +{0x001F02, {0x001F00, 0x000300}}, +{0x001F03, {0x001F01, 0x000300}}, +{0x001F04, {0x001F00, 0x000301}}, +{0x001F05, {0x001F01, 0x000301}}, +{0x001F06, {0x001F00, 0x000342}}, +{0x001F07, {0x001F01, 0x000342}}, +{0x001F08, {0x000391, 0x000313}}, +{0x001F09, {0x000391, 0x000314}}, +{0x001F0A, {0x001F08, 0x000300}}, +{0x001F0B, {0x001F09, 0x000300}}, +{0x001F0C, {0x001F08, 0x000301}}, +{0x001F0D, {0x001F09, 0x000301}}, +{0x001F0E, {0x001F08, 0x000342}}, +{0x001F0F, {0x001F09, 0x000342}}, +{0x001F10, {0x0003B5, 0x000313}}, +{0x001F11, {0x0003B5, 0x000314}}, +{0x001F12, {0x001F10, 0x000300}}, +{0x001F13, {0x001F11, 0x000300}}, +{0x001F14, {0x001F10, 0x000301}}, +{0x001F15, {0x001F11, 0x000301}}, +{0x001F18, {0x000395, 0x000313}}, +{0x001F19, {0x000395, 0x000314}}, +{0x001F1A, {0x001F18, 0x000300}}, +{0x001F1B, {0x001F19, 0x000300}}, +{0x001F1C, {0x001F18, 0x000301}}, +{0x001F1D, {0x001F19, 0x000301}}, +{0x001F20, {0x0003B7, 0x000313}}, +{0x001F21, {0x0003B7, 0x000314}}, +{0x001F22, {0x001F20, 0x000300}}, +{0x001F23, {0x001F21, 0x000300}}, +{0x001F24, {0x001F20, 0x000301}}, +{0x001F25, {0x001F21, 0x000301}}, +{0x001F26, {0x001F20, 0x000342}}, +{0x001F27, {0x001F21, 0x000342}}, +{0x001F28, {0x000397, 0x000313}}, +{0x001F29, {0x000397, 0x000314}}, +{0x001F2A, {0x001F28, 0x000300}}, +{0x001F2B, {0x001F29, 0x000300}}, +{0x001F2C, {0x001F28, 0x000301}}, +{0x001F2D, {0x001F29, 0x000301}}, +{0x001F2E, {0x001F28, 0x000342}}, +{0x001F2F, {0x001F29, 0x000342}}, +{0x001F30, {0x0003B9, 0x000313}}, +{0x001F31, {0x0003B9, 0x000314}}, +{0x001F32, {0x001F30, 0x000300}}, +{0x001F33, {0x001F31, 0x000300}}, +{0x001F34, {0x001F30, 0x000301}}, +{0x001F35, {0x001F31, 0x000301}}, +{0x001F36, {0x001F30, 0x000342}}, +{0x001F37, {0x001F31, 0x000342}}, +{0x001F38, {0x000399, 0x000313}}, +{0x001F39, {0x000399, 0x000314}}, +{0x001F3A, {0x001F38, 0x000300}}, +{0x001F3B, {0x001F39, 0x000300}}, +{0x001F3C, {0x001F38, 0x000301}}, +{0x001F3D, {0x001F39, 0x000301}}, +{0x001F3E, {0x001F38, 0x000342}}, +{0x001F3F, {0x001F39, 0x000342}}, +{0x001F40, {0x0003BF, 0x000313}}, +{0x001F41, {0x0003BF, 0x000314}}, +{0x001F42, {0x001F40, 0x000300}}, +{0x001F43, {0x001F41, 0x000300}}, +{0x001F44, {0x001F40, 0x000301}}, +{0x001F45, {0x001F41, 0x000301}}, +{0x001F48, {0x00039F, 0x000313}}, +{0x001F49, {0x00039F, 0x000314}}, +{0x001F4A, {0x001F48, 0x000300}}, +{0x001F4B, {0x001F49, 0x000300}}, +{0x001F4C, {0x001F48, 0x000301}}, +{0x001F4D, {0x001F49, 0x000301}}, +{0x001F50, {0x0003C5, 0x000313}}, +{0x001F51, {0x0003C5, 0x000314}}, +{0x001F52, {0x001F50, 0x000300}}, +{0x001F53, {0x001F51, 0x000300}}, +{0x001F54, {0x001F50, 0x000301}}, +{0x001F55, {0x001F51, 0x000301}}, +{0x001F56, {0x001F50, 0x000342}}, +{0x001F57, {0x001F51, 0x000342}}, +{0x001F59, {0x0003A5, 0x000314}}, +{0x001F5B, {0x001F59, 0x000300}}, +{0x001F5D, {0x001F59, 0x000301}}, +{0x001F5F, {0x001F59, 0x000342}}, +{0x001F60, {0x0003C9, 0x000313}}, +{0x001F61, {0x0003C9, 0x000314}}, +{0x001F62, {0x001F60, 0x000300}}, +{0x001F63, {0x001F61, 0x000300}}, +{0x001F64, {0x001F60, 0x000301}}, +{0x001F65, {0x001F61, 0x000301}}, +{0x001F66, {0x001F60, 0x000342}}, +{0x001F67, {0x001F61, 0x000342}}, +{0x001F68, {0x0003A9, 0x000313}}, +{0x001F69, {0x0003A9, 0x000314}}, +{0x001F6A, {0x001F68, 0x000300}}, +{0x001F6B, {0x001F69, 0x000300}}, +{0x001F6C, {0x001F68, 0x000301}}, +{0x001F6D, {0x001F69, 0x000301}}, +{0x001F6E, {0x001F68, 0x000342}}, +{0x001F6F, {0x001F69, 0x000342}}, +{0x001F70, {0x0003B1, 0x000300}}, +{0x001F71, {0x0003AC, 0x000000}}, +{0x001F72, {0x0003B5, 0x000300}}, +{0x001F73, {0x0003AD, 0x000000}}, +{0x001F74, {0x0003B7, 0x000300}}, +{0x001F75, {0x0003AE, 0x000000}}, +{0x001F76, {0x0003B9, 0x000300}}, +{0x001F77, {0x0003AF, 0x000000}}, +{0x001F78, {0x0003BF, 0x000300}}, +{0x001F79, {0x0003CC, 0x000000}}, +{0x001F7A, {0x0003C5, 0x000300}}, +{0x001F7B, {0x0003CD, 0x000000}}, +{0x001F7C, {0x0003C9, 0x000300}}, +{0x001F7D, {0x0003CE, 0x000000}}, +{0x001F80, {0x001F00, 0x000345}}, +{0x001F81, {0x001F01, 0x000345}}, +{0x001F82, {0x001F02, 0x000345}}, +{0x001F83, {0x001F03, 0x000345}}, +{0x001F84, {0x001F04, 0x000345}}, +{0x001F85, {0x001F05, 0x000345}}, +{0x001F86, {0x001F06, 0x000345}}, +{0x001F87, {0x001F07, 0x000345}}, +{0x001F88, {0x001F08, 0x000345}}, +{0x001F89, {0x001F09, 0x000345}}, +{0x001F8A, {0x001F0A, 0x000345}}, +{0x001F8B, {0x001F0B, 0x000345}}, +{0x001F8C, {0x001F0C, 0x000345}}, +{0x001F8D, {0x001F0D, 0x000345}}, +{0x001F8E, {0x001F0E, 0x000345}}, +{0x001F8F, {0x001F0F, 0x000345}}, +{0x001F90, {0x001F20, 0x000345}}, +{0x001F91, {0x001F21, 0x000345}}, +{0x001F92, {0x001F22, 0x000345}}, +{0x001F93, {0x001F23, 0x000345}}, +{0x001F94, {0x001F24, 0x000345}}, +{0x001F95, {0x001F25, 0x000345}}, +{0x001F96, {0x001F26, 0x000345}}, +{0x001F97, {0x001F27, 0x000345}}, +{0x001F98, {0x001F28, 0x000345}}, +{0x001F99, {0x001F29, 0x000345}}, +{0x001F9A, {0x001F2A, 0x000345}}, +{0x001F9B, {0x001F2B, 0x000345}}, +{0x001F9C, {0x001F2C, 0x000345}}, +{0x001F9D, {0x001F2D, 0x000345}}, +{0x001F9E, {0x001F2E, 0x000345}}, +{0x001F9F, {0x001F2F, 0x000345}}, +{0x001FA0, {0x001F60, 0x000345}}, +{0x001FA1, {0x001F61, 0x000345}}, +{0x001FA2, {0x001F62, 0x000345}}, +{0x001FA3, {0x001F63, 0x000345}}, +{0x001FA4, {0x001F64, 0x000345}}, +{0x001FA5, {0x001F65, 0x000345}}, +{0x001FA6, {0x001F66, 0x000345}}, +{0x001FA7, {0x001F67, 0x000345}}, +{0x001FA8, {0x001F68, 0x000345}}, +{0x001FA9, {0x001F69, 0x000345}}, +{0x001FAA, {0x001F6A, 0x000345}}, +{0x001FAB, {0x001F6B, 0x000345}}, +{0x001FAC, {0x001F6C, 0x000345}}, +{0x001FAD, {0x001F6D, 0x000345}}, +{0x001FAE, {0x001F6E, 0x000345}}, +{0x001FAF, {0x001F6F, 0x000345}}, +{0x001FB0, {0x0003B1, 0x000306}}, +{0x001FB1, {0x0003B1, 0x000304}}, +{0x001FB2, {0x001F70, 0x000345}}, +{0x001FB3, {0x0003B1, 0x000345}}, +{0x001FB4, {0x0003AC, 0x000345}}, +{0x001FB6, {0x0003B1, 0x000342}}, +{0x001FB7, {0x001FB6, 0x000345}}, +{0x001FB8, {0x000391, 0x000306}}, +{0x001FB9, {0x000391, 0x000304}}, +{0x001FBA, {0x000391, 0x000300}}, +{0x001FBB, {0x000386, 0x000000}}, +{0x001FBC, {0x000391, 0x000345}}, +{0x001FBE, {0x0003B9, 0x000000}}, +{0x001FC1, {0x0000A8, 0x000342}}, +{0x001FC2, {0x001F74, 0x000345}}, +{0x001FC3, {0x0003B7, 0x000345}}, +{0x001FC4, {0x0003AE, 0x000345}}, +{0x001FC6, {0x0003B7, 0x000342}}, +{0x001FC7, {0x001FC6, 0x000345}}, +{0x001FC8, {0x000395, 0x000300}}, +{0x001FC9, {0x000388, 0x000000}}, +{0x001FCA, {0x000397, 0x000300}}, +{0x001FCB, {0x000389, 0x000000}}, +{0x001FCC, {0x000397, 0x000345}}, +{0x001FCD, {0x001FBF, 0x000300}}, +{0x001FCE, {0x001FBF, 0x000301}}, +{0x001FCF, {0x001FBF, 0x000342}}, +{0x001FD0, {0x0003B9, 0x000306}}, +{0x001FD1, {0x0003B9, 0x000304}}, +{0x001FD2, {0x0003CA, 0x000300}}, +{0x001FD3, {0x000390, 0x000000}}, +{0x001FD6, {0x0003B9, 0x000342}}, +{0x001FD7, {0x0003CA, 0x000342}}, +{0x001FD8, {0x000399, 0x000306}}, +{0x001FD9, {0x000399, 0x000304}}, +{0x001FDA, {0x000399, 0x000300}}, +{0x001FDB, {0x00038A, 0x000000}}, +{0x001FDD, {0x001FFE, 0x000300}}, +{0x001FDE, {0x001FFE, 0x000301}}, +{0x001FDF, {0x001FFE, 0x000342}}, +{0x001FE0, {0x0003C5, 0x000306}}, +{0x001FE1, {0x0003C5, 0x000304}}, +{0x001FE2, {0x0003CB, 0x000300}}, +{0x001FE3, {0x0003B0, 0x000000}}, +{0x001FE4, {0x0003C1, 0x000313}}, +{0x001FE5, {0x0003C1, 0x000314}}, +{0x001FE6, {0x0003C5, 0x000342}}, +{0x001FE7, {0x0003CB, 0x000342}}, +{0x001FE8, {0x0003A5, 0x000306}}, +{0x001FE9, {0x0003A5, 0x000304}}, +{0x001FEA, {0x0003A5, 0x000300}}, +{0x001FEB, {0x00038E, 0x000000}}, +{0x001FEC, {0x0003A1, 0x000314}}, +{0x001FED, {0x0000A8, 0x000300}}, +{0x001FEE, {0x000385, 0x000000}}, +{0x001FEF, {0x000060, 0x000000}}, +{0x001FF2, {0x001F7C, 0x000345}}, +{0x001FF3, {0x0003C9, 0x000345}}, +{0x001FF4, {0x0003CE, 0x000345}}, +{0x001FF6, {0x0003C9, 0x000342}}, +{0x001FF7, {0x001FF6, 0x000345}}, +{0x001FF8, {0x00039F, 0x000300}}, +{0x001FF9, {0x00038C, 0x000000}}, +{0x001FFA, {0x0003A9, 0x000300}}, +{0x001FFB, {0x00038F, 0x000000}}, +{0x001FFC, {0x0003A9, 0x000345}}, +{0x001FFD, {0x0000B4, 0x000000}}, +{0x002000, {0x002002, 0x000000}}, +{0x002001, {0x002003, 0x000000}}, +{0x002126, {0x0003A9, 0x000000}}, +{0x00212A, {0x00004B, 0x000000}}, +{0x00212B, {0x0000C5, 0x000000}}, +{0x00219A, {0x002190, 0x000338}}, +{0x00219B, {0x002192, 0x000338}}, +{0x0021AE, {0x002194, 0x000338}}, +{0x0021CD, {0x0021D0, 0x000338}}, +{0x0021CE, {0x0021D4, 0x000338}}, +{0x0021CF, {0x0021D2, 0x000338}}, +{0x002204, {0x002203, 0x000338}}, +{0x002209, {0x002208, 0x000338}}, +{0x00220C, {0x00220B, 0x000338}}, +{0x002224, {0x002223, 0x000338}}, +{0x002226, {0x002225, 0x000338}}, +{0x002241, {0x00223C, 0x000338}}, +{0x002244, {0x002243, 0x000338}}, +{0x002247, {0x002245, 0x000338}}, +{0x002249, {0x002248, 0x000338}}, +{0x002260, {0x00003D, 0x000338}}, +{0x002262, {0x002261, 0x000338}}, +{0x00226D, {0x00224D, 0x000338}}, +{0x00226E, {0x00003C, 0x000338}}, +{0x00226F, {0x00003E, 0x000338}}, +{0x002270, {0x002264, 0x000338}}, +{0x002271, {0x002265, 0x000338}}, +{0x002274, {0x002272, 0x000338}}, +{0x002275, {0x002273, 0x000338}}, +{0x002278, {0x002276, 0x000338}}, +{0x002279, {0x002277, 0x000338}}, +{0x002280, {0x00227A, 0x000338}}, +{0x002281, {0x00227B, 0x000338}}, +{0x002284, {0x002282, 0x000338}}, +{0x002285, {0x002283, 0x000338}}, +{0x002288, {0x002286, 0x000338}}, +{0x002289, {0x002287, 0x000338}}, +{0x0022AC, {0x0022A2, 0x000338}}, +{0x0022AD, {0x0022A8, 0x000338}}, +{0x0022AE, {0x0022A9, 0x000338}}, +{0x0022AF, {0x0022AB, 0x000338}}, +{0x0022E0, {0x00227C, 0x000338}}, +{0x0022E1, {0x00227D, 0x000338}}, +{0x0022E2, {0x002291, 0x000338}}, +{0x0022E3, {0x002292, 0x000338}}, +{0x0022EA, {0x0022B2, 0x000338}}, +{0x0022EB, {0x0022B3, 0x000338}}, +{0x0022EC, {0x0022B4, 0x000338}}, +{0x0022ED, {0x0022B5, 0x000338}}, +{0x002329, {0x003008, 0x000000}}, +{0x00232A, {0x003009, 0x000000}}, +{0x002ADC, {0x002ADD, 0x000338}}, +{0x00304C, {0x00304B, 0x003099}}, +{0x00304E, {0x00304D, 0x003099}}, +{0x003050, {0x00304F, 0x003099}}, +{0x003052, {0x003051, 0x003099}}, +{0x003054, {0x003053, 0x003099}}, +{0x003056, {0x003055, 0x003099}}, +{0x003058, {0x003057, 0x003099}}, +{0x00305A, {0x003059, 0x003099}}, +{0x00305C, {0x00305B, 0x003099}}, +{0x00305E, {0x00305D, 0x003099}}, +{0x003060, {0x00305F, 0x003099}}, +{0x003062, {0x003061, 0x003099}}, +{0x003065, {0x003064, 0x003099}}, +{0x003067, {0x003066, 0x003099}}, +{0x003069, {0x003068, 0x003099}}, +{0x003070, {0x00306F, 0x003099}}, +{0x003071, {0x00306F, 0x00309A}}, +{0x003073, {0x003072, 0x003099}}, +{0x003074, {0x003072, 0x00309A}}, +{0x003076, {0x003075, 0x003099}}, +{0x003077, {0x003075, 0x00309A}}, +{0x003079, {0x003078, 0x003099}}, +{0x00307A, {0x003078, 0x00309A}}, +{0x00307C, {0x00307B, 0x003099}}, +{0x00307D, {0x00307B, 0x00309A}}, +{0x003094, {0x003046, 0x003099}}, +{0x00309E, {0x00309D, 0x003099}}, +{0x0030AC, {0x0030AB, 0x003099}}, +{0x0030AE, {0x0030AD, 0x003099}}, +{0x0030B0, {0x0030AF, 0x003099}}, +{0x0030B2, {0x0030B1, 0x003099}}, +{0x0030B4, {0x0030B3, 0x003099}}, +{0x0030B6, {0x0030B5, 0x003099}}, +{0x0030B8, {0x0030B7, 0x003099}}, +{0x0030BA, {0x0030B9, 0x003099}}, +{0x0030BC, {0x0030BB, 0x003099}}, +{0x0030BE, {0x0030BD, 0x003099}}, +{0x0030C0, {0x0030BF, 0x003099}}, +{0x0030C2, {0x0030C1, 0x003099}}, +{0x0030C5, {0x0030C4, 0x003099}}, +{0x0030C7, {0x0030C6, 0x003099}}, +{0x0030C9, {0x0030C8, 0x003099}}, +{0x0030D0, {0x0030CF, 0x003099}}, +{0x0030D1, {0x0030CF, 0x00309A}}, +{0x0030D3, {0x0030D2, 0x003099}}, +{0x0030D4, {0x0030D2, 0x00309A}}, +{0x0030D6, {0x0030D5, 0x003099}}, +{0x0030D7, {0x0030D5, 0x00309A}}, +{0x0030D9, {0x0030D8, 0x003099}}, +{0x0030DA, {0x0030D8, 0x00309A}}, +{0x0030DC, {0x0030DB, 0x003099}}, +{0x0030DD, {0x0030DB, 0x00309A}}, +{0x0030F4, {0x0030A6, 0x003099}}, +{0x0030F7, {0x0030EF, 0x003099}}, +{0x0030F8, {0x0030F0, 0x003099}}, +{0x0030F9, {0x0030F1, 0x003099}}, +{0x0030FA, {0x0030F2, 0x003099}}, +{0x0030FE, {0x0030FD, 0x003099}}, +{0x00F900, {0x008C48, 0x000000}}, +{0x00F901, {0x0066F4, 0x000000}}, +{0x00F902, {0x008ECA, 0x000000}}, +{0x00F903, {0x008CC8, 0x000000}}, +{0x00F904, {0x006ED1, 0x000000}}, +{0x00F905, {0x004E32, 0x000000}}, +{0x00F906, {0x0053E5, 0x000000}}, +{0x00F907, {0x009F9C, 0x000000}}, +{0x00F908, {0x009F9C, 0x000000}}, +{0x00F909, {0x005951, 0x000000}}, +{0x00F90A, {0x0091D1, 0x000000}}, +{0x00F90B, {0x005587, 0x000000}}, +{0x00F90C, {0x005948, 0x000000}}, +{0x00F90D, {0x0061F6, 0x000000}}, +{0x00F90E, {0x007669, 0x000000}}, +{0x00F90F, {0x007F85, 0x000000}}, +{0x00F910, {0x00863F, 0x000000}}, +{0x00F911, {0x0087BA, 0x000000}}, +{0x00F912, {0x0088F8, 0x000000}}, +{0x00F913, {0x00908F, 0x000000}}, +{0x00F914, {0x006A02, 0x000000}}, +{0x00F915, {0x006D1B, 0x000000}}, +{0x00F916, {0x0070D9, 0x000000}}, +{0x00F917, {0x0073DE, 0x000000}}, +{0x00F918, {0x00843D, 0x000000}}, +{0x00F919, {0x00916A, 0x000000}}, +{0x00F91A, {0x0099F1, 0x000000}}, +{0x00F91B, {0x004E82, 0x000000}}, +{0x00F91C, {0x005375, 0x000000}}, +{0x00F91D, {0x006B04, 0x000000}}, +{0x00F91E, {0x00721B, 0x000000}}, +{0x00F91F, {0x00862D, 0x000000}}, +{0x00F920, {0x009E1E, 0x000000}}, +{0x00F921, {0x005D50, 0x000000}}, +{0x00F922, {0x006FEB, 0x000000}}, +{0x00F923, {0x0085CD, 0x000000}}, +{0x00F924, {0x008964, 0x000000}}, +{0x00F925, {0x0062C9, 0x000000}}, +{0x00F926, {0x0081D8, 0x000000}}, +{0x00F927, {0x00881F, 0x000000}}, +{0x00F928, {0x005ECA, 0x000000}}, +{0x00F929, {0x006717, 0x000000}}, +{0x00F92A, {0x006D6A, 0x000000}}, +{0x00F92B, {0x0072FC, 0x000000}}, +{0x00F92C, {0x0090CE, 0x000000}}, +{0x00F92D, {0x004F86, 0x000000}}, +{0x00F92E, {0x0051B7, 0x000000}}, +{0x00F92F, {0x0052DE, 0x000000}}, +{0x00F930, {0x0064C4, 0x000000}}, +{0x00F931, {0x006AD3, 0x000000}}, +{0x00F932, {0x007210, 0x000000}}, +{0x00F933, {0x0076E7, 0x000000}}, +{0x00F934, {0x008001, 0x000000}}, +{0x00F935, {0x008606, 0x000000}}, +{0x00F936, {0x00865C, 0x000000}}, +{0x00F937, {0x008DEF, 0x000000}}, +{0x00F938, {0x009732, 0x000000}}, +{0x00F939, {0x009B6F, 0x000000}}, +{0x00F93A, {0x009DFA, 0x000000}}, +{0x00F93B, {0x00788C, 0x000000}}, +{0x00F93C, {0x00797F, 0x000000}}, +{0x00F93D, {0x007DA0, 0x000000}}, +{0x00F93E, {0x0083C9, 0x000000}}, +{0x00F93F, {0x009304, 0x000000}}, +{0x00F940, {0x009E7F, 0x000000}}, +{0x00F941, {0x008AD6, 0x000000}}, +{0x00F942, {0x0058DF, 0x000000}}, +{0x00F943, {0x005F04, 0x000000}}, +{0x00F944, {0x007C60, 0x000000}}, +{0x00F945, {0x00807E, 0x000000}}, +{0x00F946, {0x007262, 0x000000}}, +{0x00F947, {0x0078CA, 0x000000}}, +{0x00F948, {0x008CC2, 0x000000}}, +{0x00F949, {0x0096F7, 0x000000}}, +{0x00F94A, {0x0058D8, 0x000000}}, +{0x00F94B, {0x005C62, 0x000000}}, +{0x00F94C, {0x006A13, 0x000000}}, +{0x00F94D, {0x006DDA, 0x000000}}, +{0x00F94E, {0x006F0F, 0x000000}}, +{0x00F94F, {0x007D2F, 0x000000}}, +{0x00F950, {0x007E37, 0x000000}}, +{0x00F951, {0x00964B, 0x000000}}, +{0x00F952, {0x0052D2, 0x000000}}, +{0x00F953, {0x00808B, 0x000000}}, +{0x00F954, {0x0051DC, 0x000000}}, +{0x00F955, {0x0051CC, 0x000000}}, +{0x00F956, {0x007A1C, 0x000000}}, +{0x00F957, {0x007DBE, 0x000000}}, +{0x00F958, {0x0083F1, 0x000000}}, +{0x00F959, {0x009675, 0x000000}}, +{0x00F95A, {0x008B80, 0x000000}}, +{0x00F95B, {0x0062CF, 0x000000}}, +{0x00F95C, {0x006A02, 0x000000}}, +{0x00F95D, {0x008AFE, 0x000000}}, +{0x00F95E, {0x004E39, 0x000000}}, +{0x00F95F, {0x005BE7, 0x000000}}, +{0x00F960, {0x006012, 0x000000}}, +{0x00F961, {0x007387, 0x000000}}, +{0x00F962, {0x007570, 0x000000}}, +{0x00F963, {0x005317, 0x000000}}, +{0x00F964, {0x0078FB, 0x000000}}, +{0x00F965, {0x004FBF, 0x000000}}, +{0x00F966, {0x005FA9, 0x000000}}, +{0x00F967, {0x004E0D, 0x000000}}, +{0x00F968, {0x006CCC, 0x000000}}, +{0x00F969, {0x006578, 0x000000}}, +{0x00F96A, {0x007D22, 0x000000}}, +{0x00F96B, {0x0053C3, 0x000000}}, +{0x00F96C, {0x00585E, 0x000000}}, +{0x00F96D, {0x007701, 0x000000}}, +{0x00F96E, {0x008449, 0x000000}}, +{0x00F96F, {0x008AAA, 0x000000}}, +{0x00F970, {0x006BBA, 0x000000}}, +{0x00F971, {0x008FB0, 0x000000}}, +{0x00F972, {0x006C88, 0x000000}}, +{0x00F973, {0x0062FE, 0x000000}}, +{0x00F974, {0x0082E5, 0x000000}}, +{0x00F975, {0x0063A0, 0x000000}}, +{0x00F976, {0x007565, 0x000000}}, +{0x00F977, {0x004EAE, 0x000000}}, +{0x00F978, {0x005169, 0x000000}}, +{0x00F979, {0x0051C9, 0x000000}}, +{0x00F97A, {0x006881, 0x000000}}, +{0x00F97B, {0x007CE7, 0x000000}}, +{0x00F97C, {0x00826F, 0x000000}}, +{0x00F97D, {0x008AD2, 0x000000}}, +{0x00F97E, {0x0091CF, 0x000000}}, +{0x00F97F, {0x0052F5, 0x000000}}, +{0x00F980, {0x005442, 0x000000}}, +{0x00F981, {0x005973, 0x000000}}, +{0x00F982, {0x005EEC, 0x000000}}, +{0x00F983, {0x0065C5, 0x000000}}, +{0x00F984, {0x006FFE, 0x000000}}, +{0x00F985, {0x00792A, 0x000000}}, +{0x00F986, {0x0095AD, 0x000000}}, +{0x00F987, {0x009A6A, 0x000000}}, +{0x00F988, {0x009E97, 0x000000}}, +{0x00F989, {0x009ECE, 0x000000}}, +{0x00F98A, {0x00529B, 0x000000}}, +{0x00F98B, {0x0066C6, 0x000000}}, +{0x00F98C, {0x006B77, 0x000000}}, +{0x00F98D, {0x008F62, 0x000000}}, +{0x00F98E, {0x005E74, 0x000000}}, +{0x00F98F, {0x006190, 0x000000}}, +{0x00F990, {0x006200, 0x000000}}, +{0x00F991, {0x00649A, 0x000000}}, +{0x00F992, {0x006F23, 0x000000}}, +{0x00F993, {0x007149, 0x000000}}, +{0x00F994, {0x007489, 0x000000}}, +{0x00F995, {0x0079CA, 0x000000}}, +{0x00F996, {0x007DF4, 0x000000}}, +{0x00F997, {0x00806F, 0x000000}}, +{0x00F998, {0x008F26, 0x000000}}, +{0x00F999, {0x0084EE, 0x000000}}, +{0x00F99A, {0x009023, 0x000000}}, +{0x00F99B, {0x00934A, 0x000000}}, +{0x00F99C, {0x005217, 0x000000}}, +{0x00F99D, {0x0052A3, 0x000000}}, +{0x00F99E, {0x0054BD, 0x000000}}, +{0x00F99F, {0x0070C8, 0x000000}}, +{0x00F9A0, {0x0088C2, 0x000000}}, +{0x00F9A1, {0x008AAA, 0x000000}}, +{0x00F9A2, {0x005EC9, 0x000000}}, +{0x00F9A3, {0x005FF5, 0x000000}}, +{0x00F9A4, {0x00637B, 0x000000}}, +{0x00F9A5, {0x006BAE, 0x000000}}, +{0x00F9A6, {0x007C3E, 0x000000}}, +{0x00F9A7, {0x007375, 0x000000}}, +{0x00F9A8, {0x004EE4, 0x000000}}, +{0x00F9A9, {0x0056F9, 0x000000}}, +{0x00F9AA, {0x005BE7, 0x000000}}, +{0x00F9AB, {0x005DBA, 0x000000}}, +{0x00F9AC, {0x00601C, 0x000000}}, +{0x00F9AD, {0x0073B2, 0x000000}}, +{0x00F9AE, {0x007469, 0x000000}}, +{0x00F9AF, {0x007F9A, 0x000000}}, +{0x00F9B0, {0x008046, 0x000000}}, +{0x00F9B1, {0x009234, 0x000000}}, +{0x00F9B2, {0x0096F6, 0x000000}}, +{0x00F9B3, {0x009748, 0x000000}}, +{0x00F9B4, {0x009818, 0x000000}}, +{0x00F9B5, {0x004F8B, 0x000000}}, +{0x00F9B6, {0x0079AE, 0x000000}}, +{0x00F9B7, {0x0091B4, 0x000000}}, +{0x00F9B8, {0x0096B8, 0x000000}}, +{0x00F9B9, {0x0060E1, 0x000000}}, +{0x00F9BA, {0x004E86, 0x000000}}, +{0x00F9BB, {0x0050DA, 0x000000}}, +{0x00F9BC, {0x005BEE, 0x000000}}, +{0x00F9BD, {0x005C3F, 0x000000}}, +{0x00F9BE, {0x006599, 0x000000}}, +{0x00F9BF, {0x006A02, 0x000000}}, +{0x00F9C0, {0x0071CE, 0x000000}}, +{0x00F9C1, {0x007642, 0x000000}}, +{0x00F9C2, {0x0084FC, 0x000000}}, +{0x00F9C3, {0x00907C, 0x000000}}, +{0x00F9C4, {0x009F8D, 0x000000}}, +{0x00F9C5, {0x006688, 0x000000}}, +{0x00F9C6, {0x00962E, 0x000000}}, +{0x00F9C7, {0x005289, 0x000000}}, +{0x00F9C8, {0x00677B, 0x000000}}, +{0x00F9C9, {0x0067F3, 0x000000}}, +{0x00F9CA, {0x006D41, 0x000000}}, +{0x00F9CB, {0x006E9C, 0x000000}}, +{0x00F9CC, {0x007409, 0x000000}}, +{0x00F9CD, {0x007559, 0x000000}}, +{0x00F9CE, {0x00786B, 0x000000}}, +{0x00F9CF, {0x007D10, 0x000000}}, +{0x00F9D0, {0x00985E, 0x000000}}, +{0x00F9D1, {0x00516D, 0x000000}}, +{0x00F9D2, {0x00622E, 0x000000}}, +{0x00F9D3, {0x009678, 0x000000}}, +{0x00F9D4, {0x00502B, 0x000000}}, +{0x00F9D5, {0x005D19, 0x000000}}, +{0x00F9D6, {0x006DEA, 0x000000}}, +{0x00F9D7, {0x008F2A, 0x000000}}, +{0x00F9D8, {0x005F8B, 0x000000}}, +{0x00F9D9, {0x006144, 0x000000}}, +{0x00F9DA, {0x006817, 0x000000}}, +{0x00F9DB, {0x007387, 0x000000}}, +{0x00F9DC, {0x009686, 0x000000}}, +{0x00F9DD, {0x005229, 0x000000}}, +{0x00F9DE, {0x00540F, 0x000000}}, +{0x00F9DF, {0x005C65, 0x000000}}, +{0x00F9E0, {0x006613, 0x000000}}, +{0x00F9E1, {0x00674E, 0x000000}}, +{0x00F9E2, {0x0068A8, 0x000000}}, +{0x00F9E3, {0x006CE5, 0x000000}}, +{0x00F9E4, {0x007406, 0x000000}}, +{0x00F9E5, {0x0075E2, 0x000000}}, +{0x00F9E6, {0x007F79, 0x000000}}, +{0x00F9E7, {0x0088CF, 0x000000}}, +{0x00F9E8, {0x0088E1, 0x000000}}, +{0x00F9E9, {0x0091CC, 0x000000}}, +{0x00F9EA, {0x0096E2, 0x000000}}, +{0x00F9EB, {0x00533F, 0x000000}}, +{0x00F9EC, {0x006EBA, 0x000000}}, +{0x00F9ED, {0x00541D, 0x000000}}, +{0x00F9EE, {0x0071D0, 0x000000}}, +{0x00F9EF, {0x007498, 0x000000}}, +{0x00F9F0, {0x0085FA, 0x000000}}, +{0x00F9F1, {0x0096A3, 0x000000}}, +{0x00F9F2, {0x009C57, 0x000000}}, +{0x00F9F3, {0x009E9F, 0x000000}}, +{0x00F9F4, {0x006797, 0x000000}}, +{0x00F9F5, {0x006DCB, 0x000000}}, +{0x00F9F6, {0x0081E8, 0x000000}}, +{0x00F9F7, {0x007ACB, 0x000000}}, +{0x00F9F8, {0x007B20, 0x000000}}, +{0x00F9F9, {0x007C92, 0x000000}}, +{0x00F9FA, {0x0072C0, 0x000000}}, +{0x00F9FB, {0x007099, 0x000000}}, +{0x00F9FC, {0x008B58, 0x000000}}, +{0x00F9FD, {0x004EC0, 0x000000}}, +{0x00F9FE, {0x008336, 0x000000}}, +{0x00F9FF, {0x00523A, 0x000000}}, +{0x00FA00, {0x005207, 0x000000}}, +{0x00FA01, {0x005EA6, 0x000000}}, +{0x00FA02, {0x0062D3, 0x000000}}, +{0x00FA03, {0x007CD6, 0x000000}}, +{0x00FA04, {0x005B85, 0x000000}}, +{0x00FA05, {0x006D1E, 0x000000}}, +{0x00FA06, {0x0066B4, 0x000000}}, +{0x00FA07, {0x008F3B, 0x000000}}, +{0x00FA08, {0x00884C, 0x000000}}, +{0x00FA09, {0x00964D, 0x000000}}, +{0x00FA0A, {0x00898B, 0x000000}}, +{0x00FA0B, {0x005ED3, 0x000000}}, +{0x00FA0C, {0x005140, 0x000000}}, +{0x00FA0D, {0x0055C0, 0x000000}}, +{0x00FA10, {0x00585A, 0x000000}}, +{0x00FA12, {0x006674, 0x000000}}, +{0x00FA15, {0x0051DE, 0x000000}}, +{0x00FA16, {0x00732A, 0x000000}}, +{0x00FA17, {0x0076CA, 0x000000}}, +{0x00FA18, {0x00793C, 0x000000}}, +{0x00FA19, {0x00795E, 0x000000}}, +{0x00FA1A, {0x007965, 0x000000}}, +{0x00FA1B, {0x00798F, 0x000000}}, +{0x00FA1C, {0x009756, 0x000000}}, +{0x00FA1D, {0x007CBE, 0x000000}}, +{0x00FA1E, {0x007FBD, 0x000000}}, +{0x00FA20, {0x008612, 0x000000}}, +{0x00FA22, {0x008AF8, 0x000000}}, +{0x00FA25, {0x009038, 0x000000}}, +{0x00FA26, {0x0090FD, 0x000000}}, +{0x00FA2A, {0x0098EF, 0x000000}}, +{0x00FA2B, {0x0098FC, 0x000000}}, +{0x00FA2C, {0x009928, 0x000000}}, +{0x00FA2D, {0x009DB4, 0x000000}}, +{0x00FA2E, {0x0090DE, 0x000000}}, +{0x00FA2F, {0x0096B7, 0x000000}}, +{0x00FA30, {0x004FAE, 0x000000}}, +{0x00FA31, {0x0050E7, 0x000000}}, +{0x00FA32, {0x00514D, 0x000000}}, +{0x00FA33, {0x0052C9, 0x000000}}, +{0x00FA34, {0x0052E4, 0x000000}}, +{0x00FA35, {0x005351, 0x000000}}, +{0x00FA36, {0x00559D, 0x000000}}, +{0x00FA37, {0x005606, 0x000000}}, +{0x00FA38, {0x005668, 0x000000}}, +{0x00FA39, {0x005840, 0x000000}}, +{0x00FA3A, {0x0058A8, 0x000000}}, +{0x00FA3B, {0x005C64, 0x000000}}, +{0x00FA3C, {0x005C6E, 0x000000}}, +{0x00FA3D, {0x006094, 0x000000}}, +{0x00FA3E, {0x006168, 0x000000}}, +{0x00FA3F, {0x00618E, 0x000000}}, +{0x00FA40, {0x0061F2, 0x000000}}, +{0x00FA41, {0x00654F, 0x000000}}, +{0x00FA42, {0x0065E2, 0x000000}}, +{0x00FA43, {0x006691, 0x000000}}, +{0x00FA44, {0x006885, 0x000000}}, +{0x00FA45, {0x006D77, 0x000000}}, +{0x00FA46, {0x006E1A, 0x000000}}, +{0x00FA47, {0x006F22, 0x000000}}, +{0x00FA48, {0x00716E, 0x000000}}, +{0x00FA49, {0x00722B, 0x000000}}, +{0x00FA4A, {0x007422, 0x000000}}, +{0x00FA4B, {0x007891, 0x000000}}, +{0x00FA4C, {0x00793E, 0x000000}}, +{0x00FA4D, {0x007949, 0x000000}}, +{0x00FA4E, {0x007948, 0x000000}}, +{0x00FA4F, {0x007950, 0x000000}}, +{0x00FA50, {0x007956, 0x000000}}, +{0x00FA51, {0x00795D, 0x000000}}, +{0x00FA52, {0x00798D, 0x000000}}, +{0x00FA53, {0x00798E, 0x000000}}, +{0x00FA54, {0x007A40, 0x000000}}, +{0x00FA55, {0x007A81, 0x000000}}, +{0x00FA56, {0x007BC0, 0x000000}}, +{0x00FA57, {0x007DF4, 0x000000}}, +{0x00FA58, {0x007E09, 0x000000}}, +{0x00FA59, {0x007E41, 0x000000}}, +{0x00FA5A, {0x007F72, 0x000000}}, +{0x00FA5B, {0x008005, 0x000000}}, +{0x00FA5C, {0x0081ED, 0x000000}}, +{0x00FA5D, {0x008279, 0x000000}}, +{0x00FA5E, {0x008279, 0x000000}}, +{0x00FA5F, {0x008457, 0x000000}}, +{0x00FA60, {0x008910, 0x000000}}, +{0x00FA61, {0x008996, 0x000000}}, +{0x00FA62, {0x008B01, 0x000000}}, +{0x00FA63, {0x008B39, 0x000000}}, +{0x00FA64, {0x008CD3, 0x000000}}, +{0x00FA65, {0x008D08, 0x000000}}, +{0x00FA66, {0x008FB6, 0x000000}}, +{0x00FA67, {0x009038, 0x000000}}, +{0x00FA68, {0x0096E3, 0x000000}}, +{0x00FA69, {0x0097FF, 0x000000}}, +{0x00FA6A, {0x00983B, 0x000000}}, +{0x00FA6B, {0x006075, 0x000000}}, +{0x00FA6C, {0x0242EE, 0x000000}}, +{0x00FA6D, {0x008218, 0x000000}}, +{0x00FA70, {0x004E26, 0x000000}}, +{0x00FA71, {0x0051B5, 0x000000}}, +{0x00FA72, {0x005168, 0x000000}}, +{0x00FA73, {0x004F80, 0x000000}}, +{0x00FA74, {0x005145, 0x000000}}, +{0x00FA75, {0x005180, 0x000000}}, +{0x00FA76, {0x0052C7, 0x000000}}, +{0x00FA77, {0x0052FA, 0x000000}}, +{0x00FA78, {0x00559D, 0x000000}}, +{0x00FA79, {0x005555, 0x000000}}, +{0x00FA7A, {0x005599, 0x000000}}, +{0x00FA7B, {0x0055E2, 0x000000}}, +{0x00FA7C, {0x00585A, 0x000000}}, +{0x00FA7D, {0x0058B3, 0x000000}}, +{0x00FA7E, {0x005944, 0x000000}}, +{0x00FA7F, {0x005954, 0x000000}}, +{0x00FA80, {0x005A62, 0x000000}}, +{0x00FA81, {0x005B28, 0x000000}}, +{0x00FA82, {0x005ED2, 0x000000}}, +{0x00FA83, {0x005ED9, 0x000000}}, +{0x00FA84, {0x005F69, 0x000000}}, +{0x00FA85, {0x005FAD, 0x000000}}, +{0x00FA86, {0x0060D8, 0x000000}}, +{0x00FA87, {0x00614E, 0x000000}}, +{0x00FA88, {0x006108, 0x000000}}, +{0x00FA89, {0x00618E, 0x000000}}, +{0x00FA8A, {0x006160, 0x000000}}, +{0x00FA8B, {0x0061F2, 0x000000}}, +{0x00FA8C, {0x006234, 0x000000}}, +{0x00FA8D, {0x0063C4, 0x000000}}, +{0x00FA8E, {0x00641C, 0x000000}}, +{0x00FA8F, {0x006452, 0x000000}}, +{0x00FA90, {0x006556, 0x000000}}, +{0x00FA91, {0x006674, 0x000000}}, +{0x00FA92, {0x006717, 0x000000}}, +{0x00FA93, {0x00671B, 0x000000}}, +{0x00FA94, {0x006756, 0x000000}}, +{0x00FA95, {0x006B79, 0x000000}}, +{0x00FA96, {0x006BBA, 0x000000}}, +{0x00FA97, {0x006D41, 0x000000}}, +{0x00FA98, {0x006EDB, 0x000000}}, +{0x00FA99, {0x006ECB, 0x000000}}, +{0x00FA9A, {0x006F22, 0x000000}}, +{0x00FA9B, {0x00701E, 0x000000}}, +{0x00FA9C, {0x00716E, 0x000000}}, +{0x00FA9D, {0x0077A7, 0x000000}}, +{0x00FA9E, {0x007235, 0x000000}}, +{0x00FA9F, {0x0072AF, 0x000000}}, +{0x00FAA0, {0x00732A, 0x000000}}, +{0x00FAA1, {0x007471, 0x000000}}, +{0x00FAA2, {0x007506, 0x000000}}, +{0x00FAA3, {0x00753B, 0x000000}}, +{0x00FAA4, {0x00761D, 0x000000}}, +{0x00FAA5, {0x00761F, 0x000000}}, +{0x00FAA6, {0x0076CA, 0x000000}}, +{0x00FAA7, {0x0076DB, 0x000000}}, +{0x00FAA8, {0x0076F4, 0x000000}}, +{0x00FAA9, {0x00774A, 0x000000}}, +{0x00FAAA, {0x007740, 0x000000}}, +{0x00FAAB, {0x0078CC, 0x000000}}, +{0x00FAAC, {0x007AB1, 0x000000}}, +{0x00FAAD, {0x007BC0, 0x000000}}, +{0x00FAAE, {0x007C7B, 0x000000}}, +{0x00FAAF, {0x007D5B, 0x000000}}, +{0x00FAB0, {0x007DF4, 0x000000}}, +{0x00FAB1, {0x007F3E, 0x000000}}, +{0x00FAB2, {0x008005, 0x000000}}, +{0x00FAB3, {0x008352, 0x000000}}, +{0x00FAB4, {0x0083EF, 0x000000}}, +{0x00FAB5, {0x008779, 0x000000}}, +{0x00FAB6, {0x008941, 0x000000}}, +{0x00FAB7, {0x008986, 0x000000}}, +{0x00FAB8, {0x008996, 0x000000}}, +{0x00FAB9, {0x008ABF, 0x000000}}, +{0x00FABA, {0x008AF8, 0x000000}}, +{0x00FABB, {0x008ACB, 0x000000}}, +{0x00FABC, {0x008B01, 0x000000}}, +{0x00FABD, {0x008AFE, 0x000000}}, +{0x00FABE, {0x008AED, 0x000000}}, +{0x00FABF, {0x008B39, 0x000000}}, +{0x00FAC0, {0x008B8A, 0x000000}}, +{0x00FAC1, {0x008D08, 0x000000}}, +{0x00FAC2, {0x008F38, 0x000000}}, +{0x00FAC3, {0x009072, 0x000000}}, +{0x00FAC4, {0x009199, 0x000000}}, +{0x00FAC5, {0x009276, 0x000000}}, +{0x00FAC6, {0x00967C, 0x000000}}, +{0x00FAC7, {0x0096E3, 0x000000}}, +{0x00FAC8, {0x009756, 0x000000}}, +{0x00FAC9, {0x0097DB, 0x000000}}, +{0x00FACA, {0x0097FF, 0x000000}}, +{0x00FACB, {0x00980B, 0x000000}}, +{0x00FACC, {0x00983B, 0x000000}}, +{0x00FACD, {0x009B12, 0x000000}}, +{0x00FACE, {0x009F9C, 0x000000}}, +{0x00FACF, {0x02284A, 0x000000}}, +{0x00FAD0, {0x022844, 0x000000}}, +{0x00FAD1, {0x0233D5, 0x000000}}, +{0x00FAD2, {0x003B9D, 0x000000}}, +{0x00FAD3, {0x004018, 0x000000}}, +{0x00FAD4, {0x004039, 0x000000}}, +{0x00FAD5, {0x025249, 0x000000}}, +{0x00FAD6, {0x025CD0, 0x000000}}, +{0x00FAD7, {0x027ED3, 0x000000}}, +{0x00FAD8, {0x009F43, 0x000000}}, +{0x00FAD9, {0x009F8E, 0x000000}}, +{0x00FB1D, {0x0005D9, 0x0005B4}}, +{0x00FB1F, {0x0005F2, 0x0005B7}}, +{0x00FB2A, {0x0005E9, 0x0005C1}}, +{0x00FB2B, {0x0005E9, 0x0005C2}}, +{0x00FB2C, {0x00FB49, 0x0005C1}}, +{0x00FB2D, {0x00FB49, 0x0005C2}}, +{0x00FB2E, {0x0005D0, 0x0005B7}}, +{0x00FB2F, {0x0005D0, 0x0005B8}}, +{0x00FB30, {0x0005D0, 0x0005BC}}, +{0x00FB31, {0x0005D1, 0x0005BC}}, +{0x00FB32, {0x0005D2, 0x0005BC}}, +{0x00FB33, {0x0005D3, 0x0005BC}}, +{0x00FB34, {0x0005D4, 0x0005BC}}, +{0x00FB35, {0x0005D5, 0x0005BC}}, +{0x00FB36, {0x0005D6, 0x0005BC}}, +{0x00FB38, {0x0005D8, 0x0005BC}}, +{0x00FB39, {0x0005D9, 0x0005BC}}, +{0x00FB3A, {0x0005DA, 0x0005BC}}, +{0x00FB3B, {0x0005DB, 0x0005BC}}, +{0x00FB3C, {0x0005DC, 0x0005BC}}, +{0x00FB3E, {0x0005DE, 0x0005BC}}, +{0x00FB40, {0x0005E0, 0x0005BC}}, +{0x00FB41, {0x0005E1, 0x0005BC}}, +{0x00FB43, {0x0005E3, 0x0005BC}}, +{0x00FB44, {0x0005E4, 0x0005BC}}, +{0x00FB46, {0x0005E6, 0x0005BC}}, +{0x00FB47, {0x0005E7, 0x0005BC}}, +{0x00FB48, {0x0005E8, 0x0005BC}}, +{0x00FB49, {0x0005E9, 0x0005BC}}, +{0x00FB4A, {0x0005EA, 0x0005BC}}, +{0x00FB4B, {0x0005D5, 0x0005B9}}, +{0x00FB4C, {0x0005D1, 0x0005BF}}, +{0x00FB4D, {0x0005DB, 0x0005BF}}, +{0x00FB4E, {0x0005E4, 0x0005BF}}, +{0x0105C9, {0x0105D2, 0x000307}}, +{0x0105E4, {0x0105DA, 0x000307}}, +{0x01109A, {0x011099, 0x0110BA}}, +{0x01109C, {0x01109B, 0x0110BA}}, +{0x0110AB, {0x0110A5, 0x0110BA}}, +{0x01112E, {0x011131, 0x011127}}, +{0x01112F, {0x011132, 0x011127}}, +{0x01134B, {0x011347, 0x01133E}}, +{0x01134C, {0x011347, 0x011357}}, +{0x011383, {0x011382, 0x0113C9}}, +{0x011385, {0x011384, 0x0113BB}}, +{0x01138E, {0x01138B, 0x0113C2}}, +{0x011391, {0x011390, 0x0113C9}}, +{0x0113C5, {0x0113C2, 0x0113C2}}, +{0x0113C7, {0x0113C2, 0x0113B8}}, +{0x0113C8, {0x0113C2, 0x0113C9}}, +{0x0114BB, {0x0114B9, 0x0114BA}}, +{0x0114BC, {0x0114B9, 0x0114B0}}, +{0x0114BE, {0x0114B9, 0x0114BD}}, +{0x0115BA, {0x0115B8, 0x0115AF}}, +{0x0115BB, {0x0115B9, 0x0115AF}}, +{0x011938, {0x011935, 0x011930}}, +{0x016121, {0x01611E, 0x01611E}}, +{0x016122, {0x01611E, 0x016129}}, +{0x016123, {0x01611E, 0x01611F}}, +{0x016124, {0x016129, 0x01611F}}, +{0x016125, {0x01611E, 0x016120}}, +{0x016126, {0x016121, 0x01611F}}, +{0x016127, {0x016122, 0x01611F}}, +{0x016128, {0x016121, 0x016120}}, +{0x016D68, {0x016D67, 0x016D67}}, +{0x016D69, {0x016D63, 0x016D67}}, +{0x016D6A, {0x016D69, 0x016D67}}, +{0x01D15E, {0x01D157, 0x01D165}}, +{0x01D15F, {0x01D158, 0x01D165}}, +{0x01D160, {0x01D15F, 0x01D16E}}, +{0x01D161, {0x01D15F, 0x01D16F}}, +{0x01D162, {0x01D15F, 0x01D170}}, +{0x01D163, {0x01D15F, 0x01D171}}, +{0x01D164, {0x01D15F, 0x01D172}}, +{0x01D1BB, {0x01D1B9, 0x01D165}}, +{0x01D1BC, {0x01D1BA, 0x01D165}}, +{0x01D1BD, {0x01D1BB, 0x01D16E}}, +{0x01D1BE, {0x01D1BC, 0x01D16E}}, +{0x01D1BF, {0x01D1BB, 0x01D16F}}, +{0x01D1C0, {0x01D1BC, 0x01D16F}}, +{0x02F800, {0x004E3D, 0x000000}}, +{0x02F801, {0x004E38, 0x000000}}, +{0x02F802, {0x004E41, 0x000000}}, +{0x02F803, {0x020122, 0x000000}}, +{0x02F804, {0x004F60, 0x000000}}, +{0x02F805, {0x004FAE, 0x000000}}, +{0x02F806, {0x004FBB, 0x000000}}, +{0x02F807, {0x005002, 0x000000}}, +{0x02F808, {0x00507A, 0x000000}}, +{0x02F809, {0x005099, 0x000000}}, +{0x02F80A, {0x0050E7, 0x000000}}, +{0x02F80B, {0x0050CF, 0x000000}}, +{0x02F80C, {0x00349E, 0x000000}}, +{0x02F80D, {0x02063A, 0x000000}}, +{0x02F80E, {0x00514D, 0x000000}}, +{0x02F80F, {0x005154, 0x000000}}, +{0x02F810, {0x005164, 0x000000}}, +{0x02F811, {0x005177, 0x000000}}, +{0x02F812, {0x02051C, 0x000000}}, +{0x02F813, {0x0034B9, 0x000000}}, +{0x02F814, {0x005167, 0x000000}}, +{0x02F815, {0x00518D, 0x000000}}, +{0x02F816, {0x02054B, 0x000000}}, +{0x02F817, {0x005197, 0x000000}}, +{0x02F818, {0x0051A4, 0x000000}}, +{0x02F819, {0x004ECC, 0x000000}}, +{0x02F81A, {0x0051AC, 0x000000}}, +{0x02F81B, {0x0051B5, 0x000000}}, +{0x02F81C, {0x0291DF, 0x000000}}, +{0x02F81D, {0x0051F5, 0x000000}}, +{0x02F81E, {0x005203, 0x000000}}, +{0x02F81F, {0x0034DF, 0x000000}}, +{0x02F820, {0x00523B, 0x000000}}, +{0x02F821, {0x005246, 0x000000}}, +{0x02F822, {0x005272, 0x000000}}, +{0x02F823, {0x005277, 0x000000}}, +{0x02F824, {0x003515, 0x000000}}, +{0x02F825, {0x0052C7, 0x000000}}, +{0x02F826, {0x0052C9, 0x000000}}, +{0x02F827, {0x0052E4, 0x000000}}, +{0x02F828, {0x0052FA, 0x000000}}, +{0x02F829, {0x005305, 0x000000}}, +{0x02F82A, {0x005306, 0x000000}}, +{0x02F82B, {0x005317, 0x000000}}, +{0x02F82C, {0x005349, 0x000000}}, +{0x02F82D, {0x005351, 0x000000}}, +{0x02F82E, {0x00535A, 0x000000}}, +{0x02F82F, {0x005373, 0x000000}}, +{0x02F830, {0x00537D, 0x000000}}, +{0x02F831, {0x00537F, 0x000000}}, +{0x02F832, {0x00537F, 0x000000}}, +{0x02F833, {0x00537F, 0x000000}}, +{0x02F834, {0x020A2C, 0x000000}}, +{0x02F835, {0x007070, 0x000000}}, +{0x02F836, {0x0053CA, 0x000000}}, +{0x02F837, {0x0053DF, 0x000000}}, +{0x02F838, {0x020B63, 0x000000}}, +{0x02F839, {0x0053EB, 0x000000}}, +{0x02F83A, {0x0053F1, 0x000000}}, +{0x02F83B, {0x005406, 0x000000}}, +{0x02F83C, {0x00549E, 0x000000}}, +{0x02F83D, {0x005438, 0x000000}}, +{0x02F83E, {0x005448, 0x000000}}, +{0x02F83F, {0x005468, 0x000000}}, +{0x02F840, {0x0054A2, 0x000000}}, +{0x02F841, {0x0054F6, 0x000000}}, +{0x02F842, {0x005510, 0x000000}}, +{0x02F843, {0x005553, 0x000000}}, +{0x02F844, {0x005563, 0x000000}}, +{0x02F845, {0x005584, 0x000000}}, +{0x02F846, {0x005584, 0x000000}}, +{0x02F847, {0x005599, 0x000000}}, +{0x02F848, {0x0055AB, 0x000000}}, +{0x02F849, {0x0055B3, 0x000000}}, +{0x02F84A, {0x0055C2, 0x000000}}, +{0x02F84B, {0x005716, 0x000000}}, +{0x02F84C, {0x005606, 0x000000}}, +{0x02F84D, {0x005717, 0x000000}}, +{0x02F84E, {0x005651, 0x000000}}, +{0x02F84F, {0x005674, 0x000000}}, +{0x02F850, {0x005207, 0x000000}}, +{0x02F851, {0x0058EE, 0x000000}}, +{0x02F852, {0x0057CE, 0x000000}}, +{0x02F853, {0x0057F4, 0x000000}}, +{0x02F854, {0x00580D, 0x000000}}, +{0x02F855, {0x00578B, 0x000000}}, +{0x02F856, {0x005832, 0x000000}}, +{0x02F857, {0x005831, 0x000000}}, +{0x02F858, {0x0058AC, 0x000000}}, +{0x02F859, {0x0214E4, 0x000000}}, +{0x02F85A, {0x0058F2, 0x000000}}, +{0x02F85B, {0x0058F7, 0x000000}}, +{0x02F85C, {0x005906, 0x000000}}, +{0x02F85D, {0x00591A, 0x000000}}, +{0x02F85E, {0x005922, 0x000000}}, +{0x02F85F, {0x005962, 0x000000}}, +{0x02F860, {0x0216A8, 0x000000}}, +{0x02F861, {0x0216EA, 0x000000}}, +{0x02F862, {0x0059EC, 0x000000}}, +{0x02F863, {0x005A1B, 0x000000}}, +{0x02F864, {0x005A27, 0x000000}}, +{0x02F865, {0x0059D8, 0x000000}}, +{0x02F866, {0x005A66, 0x000000}}, +{0x02F867, {0x0036EE, 0x000000}}, +{0x02F868, {0x0036FC, 0x000000}}, +{0x02F869, {0x005B08, 0x000000}}, +{0x02F86A, {0x005B3E, 0x000000}}, +{0x02F86B, {0x005B3E, 0x000000}}, +{0x02F86C, {0x0219C8, 0x000000}}, +{0x02F86D, {0x005BC3, 0x000000}}, +{0x02F86E, {0x005BD8, 0x000000}}, +{0x02F86F, {0x005BE7, 0x000000}}, +{0x02F870, {0x005BF3, 0x000000}}, +{0x02F871, {0x021B18, 0x000000}}, +{0x02F872, {0x005BFF, 0x000000}}, +{0x02F873, {0x005C06, 0x000000}}, +{0x02F874, {0x005F53, 0x000000}}, +{0x02F875, {0x005C22, 0x000000}}, +{0x02F876, {0x003781, 0x000000}}, +{0x02F877, {0x005C60, 0x000000}}, +{0x02F878, {0x005C6E, 0x000000}}, +{0x02F879, {0x005CC0, 0x000000}}, +{0x02F87A, {0x005C8D, 0x000000}}, +{0x02F87B, {0x021DE4, 0x000000}}, +{0x02F87C, {0x005D43, 0x000000}}, +{0x02F87D, {0x021DE6, 0x000000}}, +{0x02F87E, {0x005D6E, 0x000000}}, +{0x02F87F, {0x005D6B, 0x000000}}, +{0x02F880, {0x005D7C, 0x000000}}, +{0x02F881, {0x005DE1, 0x000000}}, +{0x02F882, {0x005DE2, 0x000000}}, +{0x02F883, {0x00382F, 0x000000}}, +{0x02F884, {0x005DFD, 0x000000}}, +{0x02F885, {0x005E28, 0x000000}}, +{0x02F886, {0x005E3D, 0x000000}}, +{0x02F887, {0x005E69, 0x000000}}, +{0x02F888, {0x003862, 0x000000}}, +{0x02F889, {0x022183, 0x000000}}, +{0x02F88A, {0x00387C, 0x000000}}, +{0x02F88B, {0x005EB0, 0x000000}}, +{0x02F88C, {0x005EB3, 0x000000}}, +{0x02F88D, {0x005EB6, 0x000000}}, +{0x02F88E, {0x005ECA, 0x000000}}, +{0x02F88F, {0x02A392, 0x000000}}, +{0x02F890, {0x005EFE, 0x000000}}, +{0x02F891, {0x022331, 0x000000}}, +{0x02F892, {0x022331, 0x000000}}, +{0x02F893, {0x008201, 0x000000}}, +{0x02F894, {0x005F22, 0x000000}}, +{0x02F895, {0x005F22, 0x000000}}, +{0x02F896, {0x0038C7, 0x000000}}, +{0x02F897, {0x0232B8, 0x000000}}, +{0x02F898, {0x0261DA, 0x000000}}, +{0x02F899, {0x005F62, 0x000000}}, +{0x02F89A, {0x005F6B, 0x000000}}, +{0x02F89B, {0x0038E3, 0x000000}}, +{0x02F89C, {0x005F9A, 0x000000}}, +{0x02F89D, {0x005FCD, 0x000000}}, +{0x02F89E, {0x005FD7, 0x000000}}, +{0x02F89F, {0x005FF9, 0x000000}}, +{0x02F8A0, {0x006081, 0x000000}}, +{0x02F8A1, {0x00393A, 0x000000}}, +{0x02F8A2, {0x00391C, 0x000000}}, +{0x02F8A3, {0x006094, 0x000000}}, +{0x02F8A4, {0x0226D4, 0x000000}}, +{0x02F8A5, {0x0060C7, 0x000000}}, +{0x02F8A6, {0x006148, 0x000000}}, +{0x02F8A7, {0x00614C, 0x000000}}, +{0x02F8A8, {0x00614E, 0x000000}}, +{0x02F8A9, {0x00614C, 0x000000}}, +{0x02F8AA, {0x00617A, 0x000000}}, +{0x02F8AB, {0x00618E, 0x000000}}, +{0x02F8AC, {0x0061B2, 0x000000}}, +{0x02F8AD, {0x0061A4, 0x000000}}, +{0x02F8AE, {0x0061AF, 0x000000}}, +{0x02F8AF, {0x0061DE, 0x000000}}, +{0x02F8B0, {0x0061F2, 0x000000}}, +{0x02F8B1, {0x0061F6, 0x000000}}, +{0x02F8B2, {0x006210, 0x000000}}, +{0x02F8B3, {0x00621B, 0x000000}}, +{0x02F8B4, {0x00625D, 0x000000}}, +{0x02F8B5, {0x0062B1, 0x000000}}, +{0x02F8B6, {0x0062D4, 0x000000}}, +{0x02F8B7, {0x006350, 0x000000}}, +{0x02F8B8, {0x022B0C, 0x000000}}, +{0x02F8B9, {0x00633D, 0x000000}}, +{0x02F8BA, {0x0062FC, 0x000000}}, +{0x02F8BB, {0x006368, 0x000000}}, +{0x02F8BC, {0x006383, 0x000000}}, +{0x02F8BD, {0x0063E4, 0x000000}}, +{0x02F8BE, {0x022BF1, 0x000000}}, +{0x02F8BF, {0x006422, 0x000000}}, +{0x02F8C0, {0x0063C5, 0x000000}}, +{0x02F8C1, {0x0063A9, 0x000000}}, +{0x02F8C2, {0x003A2E, 0x000000}}, +{0x02F8C3, {0x006469, 0x000000}}, +{0x02F8C4, {0x00647E, 0x000000}}, +{0x02F8C5, {0x00649D, 0x000000}}, +{0x02F8C6, {0x006477, 0x000000}}, +{0x02F8C7, {0x003A6C, 0x000000}}, +{0x02F8C8, {0x00654F, 0x000000}}, +{0x02F8C9, {0x00656C, 0x000000}}, +{0x02F8CA, {0x02300A, 0x000000}}, +{0x02F8CB, {0x0065E3, 0x000000}}, +{0x02F8CC, {0x0066F8, 0x000000}}, +{0x02F8CD, {0x006649, 0x000000}}, +{0x02F8CE, {0x003B19, 0x000000}}, +{0x02F8CF, {0x006691, 0x000000}}, +{0x02F8D0, {0x003B08, 0x000000}}, +{0x02F8D1, {0x003AE4, 0x000000}}, +{0x02F8D2, {0x005192, 0x000000}}, +{0x02F8D3, {0x005195, 0x000000}}, +{0x02F8D4, {0x006700, 0x000000}}, +{0x02F8D5, {0x00669C, 0x000000}}, +{0x02F8D6, {0x0080AD, 0x000000}}, +{0x02F8D7, {0x0043D9, 0x000000}}, +{0x02F8D8, {0x006717, 0x000000}}, +{0x02F8D9, {0x00671B, 0x000000}}, +{0x02F8DA, {0x006721, 0x000000}}, +{0x02F8DB, {0x00675E, 0x000000}}, +{0x02F8DC, {0x006753, 0x000000}}, +{0x02F8DD, {0x0233C3, 0x000000}}, +{0x02F8DE, {0x003B49, 0x000000}}, +{0x02F8DF, {0x0067FA, 0x000000}}, +{0x02F8E0, {0x006785, 0x000000}}, +{0x02F8E1, {0x006852, 0x000000}}, +{0x02F8E2, {0x006885, 0x000000}}, +{0x02F8E3, {0x02346D, 0x000000}}, +{0x02F8E4, {0x00688E, 0x000000}}, +{0x02F8E5, {0x00681F, 0x000000}}, +{0x02F8E6, {0x006914, 0x000000}}, +{0x02F8E7, {0x003B9D, 0x000000}}, +{0x02F8E8, {0x006942, 0x000000}}, +{0x02F8E9, {0x0069A3, 0x000000}}, +{0x02F8EA, {0x0069EA, 0x000000}}, +{0x02F8EB, {0x006AA8, 0x000000}}, +{0x02F8EC, {0x0236A3, 0x000000}}, +{0x02F8ED, {0x006ADB, 0x000000}}, +{0x02F8EE, {0x003C18, 0x000000}}, +{0x02F8EF, {0x006B21, 0x000000}}, +{0x02F8F0, {0x0238A7, 0x000000}}, +{0x02F8F1, {0x006B54, 0x000000}}, +{0x02F8F2, {0x003C4E, 0x000000}}, +{0x02F8F3, {0x006B72, 0x000000}}, +{0x02F8F4, {0x006B9F, 0x000000}}, +{0x02F8F5, {0x006BBA, 0x000000}}, +{0x02F8F6, {0x006BBB, 0x000000}}, +{0x02F8F7, {0x023A8D, 0x000000}}, +{0x02F8F8, {0x021D0B, 0x000000}}, +{0x02F8F9, {0x023AFA, 0x000000}}, +{0x02F8FA, {0x006C4E, 0x000000}}, +{0x02F8FB, {0x023CBC, 0x000000}}, +{0x02F8FC, {0x006CBF, 0x000000}}, +{0x02F8FD, {0x006CCD, 0x000000}}, +{0x02F8FE, {0x006C67, 0x000000}}, +{0x02F8FF, {0x006D16, 0x000000}}, +{0x02F900, {0x006D3E, 0x000000}}, +{0x02F901, {0x006D77, 0x000000}}, +{0x02F902, {0x006D41, 0x000000}}, +{0x02F903, {0x006D69, 0x000000}}, +{0x02F904, {0x006D78, 0x000000}}, +{0x02F905, {0x006D85, 0x000000}}, +{0x02F906, {0x023D1E, 0x000000}}, +{0x02F907, {0x006D34, 0x000000}}, +{0x02F908, {0x006E2F, 0x000000}}, +{0x02F909, {0x006E6E, 0x000000}}, +{0x02F90A, {0x003D33, 0x000000}}, +{0x02F90B, {0x006ECB, 0x000000}}, +{0x02F90C, {0x006EC7, 0x000000}}, +{0x02F90D, {0x023ED1, 0x000000}}, +{0x02F90E, {0x006DF9, 0x000000}}, +{0x02F90F, {0x006F6E, 0x000000}}, +{0x02F910, {0x023F5E, 0x000000}}, +{0x02F911, {0x023F8E, 0x000000}}, +{0x02F912, {0x006FC6, 0x000000}}, +{0x02F913, {0x007039, 0x000000}}, +{0x02F914, {0x00701E, 0x000000}}, +{0x02F915, {0x00701B, 0x000000}}, +{0x02F916, {0x003D96, 0x000000}}, +{0x02F917, {0x00704A, 0x000000}}, +{0x02F918, {0x00707D, 0x000000}}, +{0x02F919, {0x007077, 0x000000}}, +{0x02F91A, {0x0070AD, 0x000000}}, +{0x02F91B, {0x020525, 0x000000}}, +{0x02F91C, {0x007145, 0x000000}}, +{0x02F91D, {0x024263, 0x000000}}, +{0x02F91E, {0x00719C, 0x000000}}, +{0x02F91F, {0x0243AB, 0x000000}}, +{0x02F920, {0x007228, 0x000000}}, +{0x02F921, {0x007235, 0x000000}}, +{0x02F922, {0x007250, 0x000000}}, +{0x02F923, {0x024608, 0x000000}}, +{0x02F924, {0x007280, 0x000000}}, +{0x02F925, {0x007295, 0x000000}}, +{0x02F926, {0x024735, 0x000000}}, +{0x02F927, {0x024814, 0x000000}}, +{0x02F928, {0x00737A, 0x000000}}, +{0x02F929, {0x00738B, 0x000000}}, +{0x02F92A, {0x003EAC, 0x000000}}, +{0x02F92B, {0x0073A5, 0x000000}}, +{0x02F92C, {0x003EB8, 0x000000}}, +{0x02F92D, {0x003EB8, 0x000000}}, +{0x02F92E, {0x007447, 0x000000}}, +{0x02F92F, {0x00745C, 0x000000}}, +{0x02F930, {0x007471, 0x000000}}, +{0x02F931, {0x007485, 0x000000}}, +{0x02F932, {0x0074CA, 0x000000}}, +{0x02F933, {0x003F1B, 0x000000}}, +{0x02F934, {0x007524, 0x000000}}, +{0x02F935, {0x024C36, 0x000000}}, +{0x02F936, {0x00753E, 0x000000}}, +{0x02F937, {0x024C92, 0x000000}}, +{0x02F938, {0x007570, 0x000000}}, +{0x02F939, {0x02219F, 0x000000}}, +{0x02F93A, {0x007610, 0x000000}}, +{0x02F93B, {0x024FA1, 0x000000}}, +{0x02F93C, {0x024FB8, 0x000000}}, +{0x02F93D, {0x025044, 0x000000}}, +{0x02F93E, {0x003FFC, 0x000000}}, +{0x02F93F, {0x004008, 0x000000}}, +{0x02F940, {0x0076F4, 0x000000}}, +{0x02F941, {0x0250F3, 0x000000}}, +{0x02F942, {0x0250F2, 0x000000}}, +{0x02F943, {0x025119, 0x000000}}, +{0x02F944, {0x025133, 0x000000}}, +{0x02F945, {0x00771E, 0x000000}}, +{0x02F946, {0x00771F, 0x000000}}, +{0x02F947, {0x00771F, 0x000000}}, +{0x02F948, {0x00774A, 0x000000}}, +{0x02F949, {0x004039, 0x000000}}, +{0x02F94A, {0x00778B, 0x000000}}, +{0x02F94B, {0x004046, 0x000000}}, +{0x02F94C, {0x004096, 0x000000}}, +{0x02F94D, {0x02541D, 0x000000}}, +{0x02F94E, {0x00784E, 0x000000}}, +{0x02F94F, {0x00788C, 0x000000}}, +{0x02F950, {0x0078CC, 0x000000}}, +{0x02F951, {0x0040E3, 0x000000}}, +{0x02F952, {0x025626, 0x000000}}, +{0x02F953, {0x007956, 0x000000}}, +{0x02F954, {0x02569A, 0x000000}}, +{0x02F955, {0x0256C5, 0x000000}}, +{0x02F956, {0x00798F, 0x000000}}, +{0x02F957, {0x0079EB, 0x000000}}, +{0x02F958, {0x00412F, 0x000000}}, +{0x02F959, {0x007A40, 0x000000}}, +{0x02F95A, {0x007A4A, 0x000000}}, +{0x02F95B, {0x007A4F, 0x000000}}, +{0x02F95C, {0x02597C, 0x000000}}, +{0x02F95D, {0x025AA7, 0x000000}}, +{0x02F95E, {0x025AA7, 0x000000}}, +{0x02F95F, {0x007AEE, 0x000000}}, +{0x02F960, {0x004202, 0x000000}}, +{0x02F961, {0x025BAB, 0x000000}}, +{0x02F962, {0x007BC6, 0x000000}}, +{0x02F963, {0x007BC9, 0x000000}}, +{0x02F964, {0x004227, 0x000000}}, +{0x02F965, {0x025C80, 0x000000}}, +{0x02F966, {0x007CD2, 0x000000}}, +{0x02F967, {0x0042A0, 0x000000}}, +{0x02F968, {0x007CE8, 0x000000}}, +{0x02F969, {0x007CE3, 0x000000}}, +{0x02F96A, {0x007D00, 0x000000}}, +{0x02F96B, {0x025F86, 0x000000}}, +{0x02F96C, {0x007D63, 0x000000}}, +{0x02F96D, {0x004301, 0x000000}}, +{0x02F96E, {0x007DC7, 0x000000}}, +{0x02F96F, {0x007E02, 0x000000}}, +{0x02F970, {0x007E45, 0x000000}}, +{0x02F971, {0x004334, 0x000000}}, +{0x02F972, {0x026228, 0x000000}}, +{0x02F973, {0x026247, 0x000000}}, +{0x02F974, {0x004359, 0x000000}}, +{0x02F975, {0x0262D9, 0x000000}}, +{0x02F976, {0x007F7A, 0x000000}}, +{0x02F977, {0x02633E, 0x000000}}, +{0x02F978, {0x007F95, 0x000000}}, +{0x02F979, {0x007FFA, 0x000000}}, +{0x02F97A, {0x008005, 0x000000}}, +{0x02F97B, {0x0264DA, 0x000000}}, +{0x02F97C, {0x026523, 0x000000}}, +{0x02F97D, {0x008060, 0x000000}}, +{0x02F97E, {0x0265A8, 0x000000}}, +{0x02F97F, {0x008070, 0x000000}}, +{0x02F980, {0x02335F, 0x000000}}, +{0x02F981, {0x0043D5, 0x000000}}, +{0x02F982, {0x0080B2, 0x000000}}, +{0x02F983, {0x008103, 0x000000}}, +{0x02F984, {0x00440B, 0x000000}}, +{0x02F985, {0x00813E, 0x000000}}, +{0x02F986, {0x005AB5, 0x000000}}, +{0x02F987, {0x0267A7, 0x000000}}, +{0x02F988, {0x0267B5, 0x000000}}, +{0x02F989, {0x023393, 0x000000}}, +{0x02F98A, {0x02339C, 0x000000}}, +{0x02F98B, {0x008201, 0x000000}}, +{0x02F98C, {0x008204, 0x000000}}, +{0x02F98D, {0x008F9E, 0x000000}}, +{0x02F98E, {0x00446B, 0x000000}}, +{0x02F98F, {0x008291, 0x000000}}, +{0x02F990, {0x00828B, 0x000000}}, +{0x02F991, {0x00829D, 0x000000}}, +{0x02F992, {0x0052B3, 0x000000}}, +{0x02F993, {0x0082B1, 0x000000}}, +{0x02F994, {0x0082B3, 0x000000}}, +{0x02F995, {0x0082BD, 0x000000}}, +{0x02F996, {0x0082E6, 0x000000}}, +{0x02F997, {0x026B3C, 0x000000}}, +{0x02F998, {0x0082E5, 0x000000}}, +{0x02F999, {0x00831D, 0x000000}}, +{0x02F99A, {0x008363, 0x000000}}, +{0x02F99B, {0x0083AD, 0x000000}}, +{0x02F99C, {0x008323, 0x000000}}, +{0x02F99D, {0x0083BD, 0x000000}}, +{0x02F99E, {0x0083E7, 0x000000}}, +{0x02F99F, {0x008457, 0x000000}}, +{0x02F9A0, {0x008353, 0x000000}}, +{0x02F9A1, {0x0083CA, 0x000000}}, +{0x02F9A2, {0x0083CC, 0x000000}}, +{0x02F9A3, {0x0083DC, 0x000000}}, +{0x02F9A4, {0x026C36, 0x000000}}, +{0x02F9A5, {0x026D6B, 0x000000}}, +{0x02F9A6, {0x026CD5, 0x000000}}, +{0x02F9A7, {0x00452B, 0x000000}}, +{0x02F9A8, {0x0084F1, 0x000000}}, +{0x02F9A9, {0x0084F3, 0x000000}}, +{0x02F9AA, {0x008516, 0x000000}}, +{0x02F9AB, {0x0273CA, 0x000000}}, +{0x02F9AC, {0x008564, 0x000000}}, +{0x02F9AD, {0x026F2C, 0x000000}}, +{0x02F9AE, {0x00455D, 0x000000}}, +{0x02F9AF, {0x004561, 0x000000}}, +{0x02F9B0, {0x026FB1, 0x000000}}, +{0x02F9B1, {0x0270D2, 0x000000}}, +{0x02F9B2, {0x00456B, 0x000000}}, +{0x02F9B3, {0x008650, 0x000000}}, +{0x02F9B4, {0x00865C, 0x000000}}, +{0x02F9B5, {0x008667, 0x000000}}, +{0x02F9B6, {0x008669, 0x000000}}, +{0x02F9B7, {0x0086A9, 0x000000}}, +{0x02F9B8, {0x008688, 0x000000}}, +{0x02F9B9, {0x00870E, 0x000000}}, +{0x02F9BA, {0x0086E2, 0x000000}}, +{0x02F9BB, {0x008779, 0x000000}}, +{0x02F9BC, {0x008728, 0x000000}}, +{0x02F9BD, {0x00876B, 0x000000}}, +{0x02F9BE, {0x008786, 0x000000}}, +{0x02F9BF, {0x0045D7, 0x000000}}, +{0x02F9C0, {0x0087E1, 0x000000}}, +{0x02F9C1, {0x008801, 0x000000}}, +{0x02F9C2, {0x0045F9, 0x000000}}, +{0x02F9C3, {0x008860, 0x000000}}, +{0x02F9C4, {0x008863, 0x000000}}, +{0x02F9C5, {0x027667, 0x000000}}, +{0x02F9C6, {0x0088D7, 0x000000}}, +{0x02F9C7, {0x0088DE, 0x000000}}, +{0x02F9C8, {0x004635, 0x000000}}, +{0x02F9C9, {0x0088FA, 0x000000}}, +{0x02F9CA, {0x0034BB, 0x000000}}, +{0x02F9CB, {0x0278AE, 0x000000}}, +{0x02F9CC, {0x027966, 0x000000}}, +{0x02F9CD, {0x0046BE, 0x000000}}, +{0x02F9CE, {0x0046C7, 0x000000}}, +{0x02F9CF, {0x008AA0, 0x000000}}, +{0x02F9D0, {0x008AED, 0x000000}}, +{0x02F9D1, {0x008B8A, 0x000000}}, +{0x02F9D2, {0x008C55, 0x000000}}, +{0x02F9D3, {0x027CA8, 0x000000}}, +{0x02F9D4, {0x008CAB, 0x000000}}, +{0x02F9D5, {0x008CC1, 0x000000}}, +{0x02F9D6, {0x008D1B, 0x000000}}, +{0x02F9D7, {0x008D77, 0x000000}}, +{0x02F9D8, {0x027F2F, 0x000000}}, +{0x02F9D9, {0x020804, 0x000000}}, +{0x02F9DA, {0x008DCB, 0x000000}}, +{0x02F9DB, {0x008DBC, 0x000000}}, +{0x02F9DC, {0x008DF0, 0x000000}}, +{0x02F9DD, {0x0208DE, 0x000000}}, +{0x02F9DE, {0x008ED4, 0x000000}}, +{0x02F9DF, {0x008F38, 0x000000}}, +{0x02F9E0, {0x0285D2, 0x000000}}, +{0x02F9E1, {0x0285ED, 0x000000}}, +{0x02F9E2, {0x009094, 0x000000}}, +{0x02F9E3, {0x0090F1, 0x000000}}, +{0x02F9E4, {0x009111, 0x000000}}, +{0x02F9E5, {0x02872E, 0x000000}}, +{0x02F9E6, {0x00911B, 0x000000}}, +{0x02F9E7, {0x009238, 0x000000}}, +{0x02F9E8, {0x0092D7, 0x000000}}, +{0x02F9E9, {0x0092D8, 0x000000}}, +{0x02F9EA, {0x00927C, 0x000000}}, +{0x02F9EB, {0x0093F9, 0x000000}}, +{0x02F9EC, {0x009415, 0x000000}}, +{0x02F9ED, {0x028BFA, 0x000000}}, +{0x02F9EE, {0x00958B, 0x000000}}, +{0x02F9EF, {0x004995, 0x000000}}, +{0x02F9F0, {0x0095B7, 0x000000}}, +{0x02F9F1, {0x028D77, 0x000000}}, +{0x02F9F2, {0x0049E6, 0x000000}}, +{0x02F9F3, {0x0096C3, 0x000000}}, +{0x02F9F4, {0x005DB2, 0x000000}}, +{0x02F9F5, {0x009723, 0x000000}}, +{0x02F9F6, {0x029145, 0x000000}}, +{0x02F9F7, {0x02921A, 0x000000}}, +{0x02F9F8, {0x004A6E, 0x000000}}, +{0x02F9F9, {0x004A76, 0x000000}}, +{0x02F9FA, {0x0097E0, 0x000000}}, +{0x02F9FB, {0x02940A, 0x000000}}, +{0x02F9FC, {0x004AB2, 0x000000}}, +{0x02F9FD, {0x029496, 0x000000}}, +{0x02F9FE, {0x00980B, 0x000000}}, +{0x02F9FF, {0x00980B, 0x000000}}, +{0x02FA00, {0x009829, 0x000000}}, +{0x02FA01, {0x0295B6, 0x000000}}, +{0x02FA02, {0x0098E2, 0x000000}}, +{0x02FA03, {0x004B33, 0x000000}}, +{0x02FA04, {0x009929, 0x000000}}, +{0x02FA05, {0x0099A7, 0x000000}}, +{0x02FA06, {0x0099C2, 0x000000}}, +{0x02FA07, {0x0099FE, 0x000000}}, +{0x02FA08, {0x004BCE, 0x000000}}, +{0x02FA09, {0x029B30, 0x000000}}, +{0x02FA0A, {0x009B12, 0x000000}}, +{0x02FA0B, {0x009C40, 0x000000}}, +{0x02FA0C, {0x009CFD, 0x000000}}, +{0x02FA0D, {0x004CCE, 0x000000}}, +{0x02FA0E, {0x004CED, 0x000000}}, +{0x02FA0F, {0x009D67, 0x000000}}, +{0x02FA10, {0x02A0CE, 0x000000}}, +{0x02FA11, {0x004CF8, 0x000000}}, +{0x02FA12, {0x02A105, 0x000000}}, +{0x02FA13, {0x02A20E, 0x000000}}, +{0x02FA14, {0x02A291, 0x000000}}, +{0x02FA15, {0x009EBB, 0x000000}}, +{0x02FA16, {0x004D56, 0x000000}}, +{0x02FA17, {0x009EF9, 0x000000}}, +{0x02FA18, {0x009EFE, 0x000000}}, +{0x02FA19, {0x009F05, 0x000000}}, +{0x02FA1A, {0x009F0F, 0x000000}}, +{0x02FA1B, {0x009F16, 0x000000}}, +{0x02FA1C, {0x009F3B, 0x000000}}, +{0x02FA1D, {0x02A600, 0x000000}}, +}; + +const std::unordered_map unicode_composition = { +{0x0000004100000300ULL, 0x0000C0}, +{0x0000004100000301ULL, 0x0000C1}, +{0x0000004100000302ULL, 0x0000C2}, +{0x0000004100000303ULL, 0x0000C3}, +{0x0000004100000308ULL, 0x0000C4}, +{0x000000410000030AULL, 0x0000C5}, +{0x0000004300000327ULL, 0x0000C7}, +{0x0000004500000300ULL, 0x0000C8}, +{0x0000004500000301ULL, 0x0000C9}, +{0x0000004500000302ULL, 0x0000CA}, +{0x0000004500000308ULL, 0x0000CB}, +{0x0000004900000300ULL, 0x0000CC}, +{0x0000004900000301ULL, 0x0000CD}, +{0x0000004900000302ULL, 0x0000CE}, +{0x0000004900000308ULL, 0x0000CF}, +{0x0000004E00000303ULL, 0x0000D1}, +{0x0000004F00000300ULL, 0x0000D2}, +{0x0000004F00000301ULL, 0x0000D3}, +{0x0000004F00000302ULL, 0x0000D4}, +{0x0000004F00000303ULL, 0x0000D5}, +{0x0000004F00000308ULL, 0x0000D6}, +{0x0000005500000300ULL, 0x0000D9}, +{0x0000005500000301ULL, 0x0000DA}, +{0x0000005500000302ULL, 0x0000DB}, +{0x0000005500000308ULL, 0x0000DC}, +{0x0000005900000301ULL, 0x0000DD}, +{0x0000006100000300ULL, 0x0000E0}, +{0x0000006100000301ULL, 0x0000E1}, +{0x0000006100000302ULL, 0x0000E2}, +{0x0000006100000303ULL, 0x0000E3}, +{0x0000006100000308ULL, 0x0000E4}, +{0x000000610000030AULL, 0x0000E5}, +{0x0000006300000327ULL, 0x0000E7}, +{0x0000006500000300ULL, 0x0000E8}, +{0x0000006500000301ULL, 0x0000E9}, +{0x0000006500000302ULL, 0x0000EA}, +{0x0000006500000308ULL, 0x0000EB}, +{0x0000006900000300ULL, 0x0000EC}, +{0x0000006900000301ULL, 0x0000ED}, +{0x0000006900000302ULL, 0x0000EE}, +{0x0000006900000308ULL, 0x0000EF}, +{0x0000006E00000303ULL, 0x0000F1}, +{0x0000006F00000300ULL, 0x0000F2}, +{0x0000006F00000301ULL, 0x0000F3}, +{0x0000006F00000302ULL, 0x0000F4}, +{0x0000006F00000303ULL, 0x0000F5}, +{0x0000006F00000308ULL, 0x0000F6}, +{0x0000007500000300ULL, 0x0000F9}, +{0x0000007500000301ULL, 0x0000FA}, +{0x0000007500000302ULL, 0x0000FB}, +{0x0000007500000308ULL, 0x0000FC}, +{0x0000007900000301ULL, 0x0000FD}, +{0x0000007900000308ULL, 0x0000FF}, +{0x0000004100000304ULL, 0x000100}, +{0x0000006100000304ULL, 0x000101}, +{0x0000004100000306ULL, 0x000102}, +{0x0000006100000306ULL, 0x000103}, +{0x0000004100000328ULL, 0x000104}, +{0x0000006100000328ULL, 0x000105}, +{0x0000004300000301ULL, 0x000106}, +{0x0000006300000301ULL, 0x000107}, +{0x0000004300000302ULL, 0x000108}, +{0x0000006300000302ULL, 0x000109}, +{0x0000004300000307ULL, 0x00010A}, +{0x0000006300000307ULL, 0x00010B}, +{0x000000430000030CULL, 0x00010C}, +{0x000000630000030CULL, 0x00010D}, +{0x000000440000030CULL, 0x00010E}, +{0x000000640000030CULL, 0x00010F}, +{0x0000004500000304ULL, 0x000112}, +{0x0000006500000304ULL, 0x000113}, +{0x0000004500000306ULL, 0x000114}, +{0x0000006500000306ULL, 0x000115}, +{0x0000004500000307ULL, 0x000116}, +{0x0000006500000307ULL, 0x000117}, +{0x0000004500000328ULL, 0x000118}, +{0x0000006500000328ULL, 0x000119}, +{0x000000450000030CULL, 0x00011A}, +{0x000000650000030CULL, 0x00011B}, +{0x0000004700000302ULL, 0x00011C}, +{0x0000006700000302ULL, 0x00011D}, +{0x0000004700000306ULL, 0x00011E}, +{0x0000006700000306ULL, 0x00011F}, +{0x0000004700000307ULL, 0x000120}, +{0x0000006700000307ULL, 0x000121}, +{0x0000004700000327ULL, 0x000122}, +{0x0000006700000327ULL, 0x000123}, +{0x0000004800000302ULL, 0x000124}, +{0x0000006800000302ULL, 0x000125}, +{0x0000004900000303ULL, 0x000128}, +{0x0000006900000303ULL, 0x000129}, +{0x0000004900000304ULL, 0x00012A}, +{0x0000006900000304ULL, 0x00012B}, +{0x0000004900000306ULL, 0x00012C}, +{0x0000006900000306ULL, 0x00012D}, +{0x0000004900000328ULL, 0x00012E}, +{0x0000006900000328ULL, 0x00012F}, +{0x0000004900000307ULL, 0x000130}, +{0x0000004A00000302ULL, 0x000134}, +{0x0000006A00000302ULL, 0x000135}, +{0x0000004B00000327ULL, 0x000136}, +{0x0000006B00000327ULL, 0x000137}, +{0x0000004C00000301ULL, 0x000139}, +{0x0000006C00000301ULL, 0x00013A}, +{0x0000004C00000327ULL, 0x00013B}, +{0x0000006C00000327ULL, 0x00013C}, +{0x0000004C0000030CULL, 0x00013D}, +{0x0000006C0000030CULL, 0x00013E}, +{0x0000004E00000301ULL, 0x000143}, +{0x0000006E00000301ULL, 0x000144}, +{0x0000004E00000327ULL, 0x000145}, +{0x0000006E00000327ULL, 0x000146}, +{0x0000004E0000030CULL, 0x000147}, +{0x0000006E0000030CULL, 0x000148}, +{0x0000004F00000304ULL, 0x00014C}, +{0x0000006F00000304ULL, 0x00014D}, +{0x0000004F00000306ULL, 0x00014E}, +{0x0000006F00000306ULL, 0x00014F}, +{0x0000004F0000030BULL, 0x000150}, +{0x0000006F0000030BULL, 0x000151}, +{0x0000005200000301ULL, 0x000154}, +{0x0000007200000301ULL, 0x000155}, +{0x0000005200000327ULL, 0x000156}, +{0x0000007200000327ULL, 0x000157}, +{0x000000520000030CULL, 0x000158}, +{0x000000720000030CULL, 0x000159}, +{0x0000005300000301ULL, 0x00015A}, +{0x0000007300000301ULL, 0x00015B}, +{0x0000005300000302ULL, 0x00015C}, +{0x0000007300000302ULL, 0x00015D}, +{0x0000005300000327ULL, 0x00015E}, +{0x0000007300000327ULL, 0x00015F}, +{0x000000530000030CULL, 0x000160}, +{0x000000730000030CULL, 0x000161}, +{0x0000005400000327ULL, 0x000162}, +{0x0000007400000327ULL, 0x000163}, +{0x000000540000030CULL, 0x000164}, +{0x000000740000030CULL, 0x000165}, +{0x0000005500000303ULL, 0x000168}, +{0x0000007500000303ULL, 0x000169}, +{0x0000005500000304ULL, 0x00016A}, +{0x0000007500000304ULL, 0x00016B}, +{0x0000005500000306ULL, 0x00016C}, +{0x0000007500000306ULL, 0x00016D}, +{0x000000550000030AULL, 0x00016E}, +{0x000000750000030AULL, 0x00016F}, +{0x000000550000030BULL, 0x000170}, +{0x000000750000030BULL, 0x000171}, +{0x0000005500000328ULL, 0x000172}, +{0x0000007500000328ULL, 0x000173}, +{0x0000005700000302ULL, 0x000174}, +{0x0000007700000302ULL, 0x000175}, +{0x0000005900000302ULL, 0x000176}, +{0x0000007900000302ULL, 0x000177}, +{0x0000005900000308ULL, 0x000178}, +{0x0000005A00000301ULL, 0x000179}, +{0x0000007A00000301ULL, 0x00017A}, +{0x0000005A00000307ULL, 0x00017B}, +{0x0000007A00000307ULL, 0x00017C}, +{0x0000005A0000030CULL, 0x00017D}, +{0x0000007A0000030CULL, 0x00017E}, +{0x0000004F0000031BULL, 0x0001A0}, +{0x0000006F0000031BULL, 0x0001A1}, +{0x000000550000031BULL, 0x0001AF}, +{0x000000750000031BULL, 0x0001B0}, +{0x000000410000030CULL, 0x0001CD}, +{0x000000610000030CULL, 0x0001CE}, +{0x000000490000030CULL, 0x0001CF}, +{0x000000690000030CULL, 0x0001D0}, +{0x0000004F0000030CULL, 0x0001D1}, +{0x0000006F0000030CULL, 0x0001D2}, +{0x000000550000030CULL, 0x0001D3}, +{0x000000750000030CULL, 0x0001D4}, +{0x000000DC00000304ULL, 0x0001D5}, +{0x000000FC00000304ULL, 0x0001D6}, +{0x000000DC00000301ULL, 0x0001D7}, +{0x000000FC00000301ULL, 0x0001D8}, +{0x000000DC0000030CULL, 0x0001D9}, +{0x000000FC0000030CULL, 0x0001DA}, +{0x000000DC00000300ULL, 0x0001DB}, +{0x000000FC00000300ULL, 0x0001DC}, +{0x000000C400000304ULL, 0x0001DE}, +{0x000000E400000304ULL, 0x0001DF}, +{0x0000022600000304ULL, 0x0001E0}, +{0x0000022700000304ULL, 0x0001E1}, +{0x000000C600000304ULL, 0x0001E2}, +{0x000000E600000304ULL, 0x0001E3}, +{0x000000470000030CULL, 0x0001E6}, +{0x000000670000030CULL, 0x0001E7}, +{0x0000004B0000030CULL, 0x0001E8}, +{0x0000006B0000030CULL, 0x0001E9}, +{0x0000004F00000328ULL, 0x0001EA}, +{0x0000006F00000328ULL, 0x0001EB}, +{0x000001EA00000304ULL, 0x0001EC}, +{0x000001EB00000304ULL, 0x0001ED}, +{0x000001B70000030CULL, 0x0001EE}, +{0x000002920000030CULL, 0x0001EF}, +{0x0000006A0000030CULL, 0x0001F0}, +{0x0000004700000301ULL, 0x0001F4}, +{0x0000006700000301ULL, 0x0001F5}, +{0x0000004E00000300ULL, 0x0001F8}, +{0x0000006E00000300ULL, 0x0001F9}, +{0x000000C500000301ULL, 0x0001FA}, +{0x000000E500000301ULL, 0x0001FB}, +{0x000000C600000301ULL, 0x0001FC}, +{0x000000E600000301ULL, 0x0001FD}, +{0x000000D800000301ULL, 0x0001FE}, +{0x000000F800000301ULL, 0x0001FF}, +{0x000000410000030FULL, 0x000200}, +{0x000000610000030FULL, 0x000201}, +{0x0000004100000311ULL, 0x000202}, +{0x0000006100000311ULL, 0x000203}, +{0x000000450000030FULL, 0x000204}, +{0x000000650000030FULL, 0x000205}, +{0x0000004500000311ULL, 0x000206}, +{0x0000006500000311ULL, 0x000207}, +{0x000000490000030FULL, 0x000208}, +{0x000000690000030FULL, 0x000209}, +{0x0000004900000311ULL, 0x00020A}, +{0x0000006900000311ULL, 0x00020B}, +{0x0000004F0000030FULL, 0x00020C}, +{0x0000006F0000030FULL, 0x00020D}, +{0x0000004F00000311ULL, 0x00020E}, +{0x0000006F00000311ULL, 0x00020F}, +{0x000000520000030FULL, 0x000210}, +{0x000000720000030FULL, 0x000211}, +{0x0000005200000311ULL, 0x000212}, +{0x0000007200000311ULL, 0x000213}, +{0x000000550000030FULL, 0x000214}, +{0x000000750000030FULL, 0x000215}, +{0x0000005500000311ULL, 0x000216}, +{0x0000007500000311ULL, 0x000217}, +{0x0000005300000326ULL, 0x000218}, +{0x0000007300000326ULL, 0x000219}, +{0x0000005400000326ULL, 0x00021A}, +{0x0000007400000326ULL, 0x00021B}, +{0x000000480000030CULL, 0x00021E}, +{0x000000680000030CULL, 0x00021F}, +{0x0000004100000307ULL, 0x000226}, +{0x0000006100000307ULL, 0x000227}, +{0x0000004500000327ULL, 0x000228}, +{0x0000006500000327ULL, 0x000229}, +{0x000000D600000304ULL, 0x00022A}, +{0x000000F600000304ULL, 0x00022B}, +{0x000000D500000304ULL, 0x00022C}, +{0x000000F500000304ULL, 0x00022D}, +{0x0000004F00000307ULL, 0x00022E}, +{0x0000006F00000307ULL, 0x00022F}, +{0x0000022E00000304ULL, 0x000230}, +{0x0000022F00000304ULL, 0x000231}, +{0x0000005900000304ULL, 0x000232}, +{0x0000007900000304ULL, 0x000233}, +{0x000000A800000301ULL, 0x000385}, +{0x0000039100000301ULL, 0x000386}, +{0x0000039500000301ULL, 0x000388}, +{0x0000039700000301ULL, 0x000389}, +{0x0000039900000301ULL, 0x00038A}, +{0x0000039F00000301ULL, 0x00038C}, +{0x000003A500000301ULL, 0x00038E}, +{0x000003A900000301ULL, 0x00038F}, +{0x000003CA00000301ULL, 0x000390}, +{0x0000039900000308ULL, 0x0003AA}, +{0x000003A500000308ULL, 0x0003AB}, +{0x000003B100000301ULL, 0x0003AC}, +{0x000003B500000301ULL, 0x0003AD}, +{0x000003B700000301ULL, 0x0003AE}, +{0x000003B900000301ULL, 0x0003AF}, +{0x000003CB00000301ULL, 0x0003B0}, +{0x000003B900000308ULL, 0x0003CA}, +{0x000003C500000308ULL, 0x0003CB}, +{0x000003BF00000301ULL, 0x0003CC}, +{0x000003C500000301ULL, 0x0003CD}, +{0x000003C900000301ULL, 0x0003CE}, +{0x000003D200000301ULL, 0x0003D3}, +{0x000003D200000308ULL, 0x0003D4}, +{0x0000041500000300ULL, 0x000400}, +{0x0000041500000308ULL, 0x000401}, +{0x0000041300000301ULL, 0x000403}, +{0x0000040600000308ULL, 0x000407}, +{0x0000041A00000301ULL, 0x00040C}, +{0x0000041800000300ULL, 0x00040D}, +{0x0000042300000306ULL, 0x00040E}, +{0x0000041800000306ULL, 0x000419}, +{0x0000043800000306ULL, 0x000439}, +{0x0000043500000300ULL, 0x000450}, +{0x0000043500000308ULL, 0x000451}, +{0x0000043300000301ULL, 0x000453}, +{0x0000045600000308ULL, 0x000457}, +{0x0000043A00000301ULL, 0x00045C}, +{0x0000043800000300ULL, 0x00045D}, +{0x0000044300000306ULL, 0x00045E}, +{0x000004740000030FULL, 0x000476}, +{0x000004750000030FULL, 0x000477}, +{0x0000041600000306ULL, 0x0004C1}, +{0x0000043600000306ULL, 0x0004C2}, +{0x0000041000000306ULL, 0x0004D0}, +{0x0000043000000306ULL, 0x0004D1}, +{0x0000041000000308ULL, 0x0004D2}, +{0x0000043000000308ULL, 0x0004D3}, +{0x0000041500000306ULL, 0x0004D6}, +{0x0000043500000306ULL, 0x0004D7}, +{0x000004D800000308ULL, 0x0004DA}, +{0x000004D900000308ULL, 0x0004DB}, +{0x0000041600000308ULL, 0x0004DC}, +{0x0000043600000308ULL, 0x0004DD}, +{0x0000041700000308ULL, 0x0004DE}, +{0x0000043700000308ULL, 0x0004DF}, +{0x0000041800000304ULL, 0x0004E2}, +{0x0000043800000304ULL, 0x0004E3}, +{0x0000041800000308ULL, 0x0004E4}, +{0x0000043800000308ULL, 0x0004E5}, +{0x0000041E00000308ULL, 0x0004E6}, +{0x0000043E00000308ULL, 0x0004E7}, +{0x000004E800000308ULL, 0x0004EA}, +{0x000004E900000308ULL, 0x0004EB}, +{0x0000042D00000308ULL, 0x0004EC}, +{0x0000044D00000308ULL, 0x0004ED}, +{0x0000042300000304ULL, 0x0004EE}, +{0x0000044300000304ULL, 0x0004EF}, +{0x0000042300000308ULL, 0x0004F0}, +{0x0000044300000308ULL, 0x0004F1}, +{0x000004230000030BULL, 0x0004F2}, +{0x000004430000030BULL, 0x0004F3}, +{0x0000042700000308ULL, 0x0004F4}, +{0x0000044700000308ULL, 0x0004F5}, +{0x0000042B00000308ULL, 0x0004F8}, +{0x0000044B00000308ULL, 0x0004F9}, +{0x0000062700000653ULL, 0x000622}, +{0x0000062700000654ULL, 0x000623}, +{0x0000064800000654ULL, 0x000624}, +{0x0000062700000655ULL, 0x000625}, +{0x0000064A00000654ULL, 0x000626}, +{0x000006D500000654ULL, 0x0006C0}, +{0x000006C100000654ULL, 0x0006C2}, +{0x000006D200000654ULL, 0x0006D3}, +{0x000009280000093CULL, 0x000929}, +{0x000009300000093CULL, 0x000931}, +{0x000009330000093CULL, 0x000934}, +{0x000009C7000009BEULL, 0x0009CB}, +{0x000009C7000009D7ULL, 0x0009CC}, +{0x00000B4700000B56ULL, 0x000B48}, +{0x00000B4700000B3EULL, 0x000B4B}, +{0x00000B4700000B57ULL, 0x000B4C}, +{0x00000B9200000BD7ULL, 0x000B94}, +{0x00000BC600000BBEULL, 0x000BCA}, +{0x00000BC700000BBEULL, 0x000BCB}, +{0x00000BC600000BD7ULL, 0x000BCC}, +{0x00000C4600000C56ULL, 0x000C48}, +{0x00000CBF00000CD5ULL, 0x000CC0}, +{0x00000CC600000CD5ULL, 0x000CC7}, +{0x00000CC600000CD6ULL, 0x000CC8}, +{0x00000CC600000CC2ULL, 0x000CCA}, +{0x00000CCA00000CD5ULL, 0x000CCB}, +{0x00000D4600000D3EULL, 0x000D4A}, +{0x00000D4700000D3EULL, 0x000D4B}, +{0x00000D4600000D57ULL, 0x000D4C}, +{0x00000DD900000DCAULL, 0x000DDA}, +{0x00000DD900000DCFULL, 0x000DDC}, +{0x00000DDC00000DCAULL, 0x000DDD}, +{0x00000DD900000DDFULL, 0x000DDE}, +{0x000010250000102EULL, 0x001026}, +{0x00001B0500001B35ULL, 0x001B06}, +{0x00001B0700001B35ULL, 0x001B08}, +{0x00001B0900001B35ULL, 0x001B0A}, +{0x00001B0B00001B35ULL, 0x001B0C}, +{0x00001B0D00001B35ULL, 0x001B0E}, +{0x00001B1100001B35ULL, 0x001B12}, +{0x00001B3A00001B35ULL, 0x001B3B}, +{0x00001B3C00001B35ULL, 0x001B3D}, +{0x00001B3E00001B35ULL, 0x001B40}, +{0x00001B3F00001B35ULL, 0x001B41}, +{0x00001B4200001B35ULL, 0x001B43}, +{0x0000004100000325ULL, 0x001E00}, +{0x0000006100000325ULL, 0x001E01}, +{0x0000004200000307ULL, 0x001E02}, +{0x0000006200000307ULL, 0x001E03}, +{0x0000004200000323ULL, 0x001E04}, +{0x0000006200000323ULL, 0x001E05}, +{0x0000004200000331ULL, 0x001E06}, +{0x0000006200000331ULL, 0x001E07}, +{0x000000C700000301ULL, 0x001E08}, +{0x000000E700000301ULL, 0x001E09}, +{0x0000004400000307ULL, 0x001E0A}, +{0x0000006400000307ULL, 0x001E0B}, +{0x0000004400000323ULL, 0x001E0C}, +{0x0000006400000323ULL, 0x001E0D}, +{0x0000004400000331ULL, 0x001E0E}, +{0x0000006400000331ULL, 0x001E0F}, +{0x0000004400000327ULL, 0x001E10}, +{0x0000006400000327ULL, 0x001E11}, +{0x000000440000032DULL, 0x001E12}, +{0x000000640000032DULL, 0x001E13}, +{0x0000011200000300ULL, 0x001E14}, +{0x0000011300000300ULL, 0x001E15}, +{0x0000011200000301ULL, 0x001E16}, +{0x0000011300000301ULL, 0x001E17}, +{0x000000450000032DULL, 0x001E18}, +{0x000000650000032DULL, 0x001E19}, +{0x0000004500000330ULL, 0x001E1A}, +{0x0000006500000330ULL, 0x001E1B}, +{0x0000022800000306ULL, 0x001E1C}, +{0x0000022900000306ULL, 0x001E1D}, +{0x0000004600000307ULL, 0x001E1E}, +{0x0000006600000307ULL, 0x001E1F}, +{0x0000004700000304ULL, 0x001E20}, +{0x0000006700000304ULL, 0x001E21}, +{0x0000004800000307ULL, 0x001E22}, +{0x0000006800000307ULL, 0x001E23}, +{0x0000004800000323ULL, 0x001E24}, +{0x0000006800000323ULL, 0x001E25}, +{0x0000004800000308ULL, 0x001E26}, +{0x0000006800000308ULL, 0x001E27}, +{0x0000004800000327ULL, 0x001E28}, +{0x0000006800000327ULL, 0x001E29}, +{0x000000480000032EULL, 0x001E2A}, +{0x000000680000032EULL, 0x001E2B}, +{0x0000004900000330ULL, 0x001E2C}, +{0x0000006900000330ULL, 0x001E2D}, +{0x000000CF00000301ULL, 0x001E2E}, +{0x000000EF00000301ULL, 0x001E2F}, +{0x0000004B00000301ULL, 0x001E30}, +{0x0000006B00000301ULL, 0x001E31}, +{0x0000004B00000323ULL, 0x001E32}, +{0x0000006B00000323ULL, 0x001E33}, +{0x0000004B00000331ULL, 0x001E34}, +{0x0000006B00000331ULL, 0x001E35}, +{0x0000004C00000323ULL, 0x001E36}, +{0x0000006C00000323ULL, 0x001E37}, +{0x00001E3600000304ULL, 0x001E38}, +{0x00001E3700000304ULL, 0x001E39}, +{0x0000004C00000331ULL, 0x001E3A}, +{0x0000006C00000331ULL, 0x001E3B}, +{0x0000004C0000032DULL, 0x001E3C}, +{0x0000006C0000032DULL, 0x001E3D}, +{0x0000004D00000301ULL, 0x001E3E}, +{0x0000006D00000301ULL, 0x001E3F}, +{0x0000004D00000307ULL, 0x001E40}, +{0x0000006D00000307ULL, 0x001E41}, +{0x0000004D00000323ULL, 0x001E42}, +{0x0000006D00000323ULL, 0x001E43}, +{0x0000004E00000307ULL, 0x001E44}, +{0x0000006E00000307ULL, 0x001E45}, +{0x0000004E00000323ULL, 0x001E46}, +{0x0000006E00000323ULL, 0x001E47}, +{0x0000004E00000331ULL, 0x001E48}, +{0x0000006E00000331ULL, 0x001E49}, +{0x0000004E0000032DULL, 0x001E4A}, +{0x0000006E0000032DULL, 0x001E4B}, +{0x000000D500000301ULL, 0x001E4C}, +{0x000000F500000301ULL, 0x001E4D}, +{0x000000D500000308ULL, 0x001E4E}, +{0x000000F500000308ULL, 0x001E4F}, +{0x0000014C00000300ULL, 0x001E50}, +{0x0000014D00000300ULL, 0x001E51}, +{0x0000014C00000301ULL, 0x001E52}, +{0x0000014D00000301ULL, 0x001E53}, +{0x0000005000000301ULL, 0x001E54}, +{0x0000007000000301ULL, 0x001E55}, +{0x0000005000000307ULL, 0x001E56}, +{0x0000007000000307ULL, 0x001E57}, +{0x0000005200000307ULL, 0x001E58}, +{0x0000007200000307ULL, 0x001E59}, +{0x0000005200000323ULL, 0x001E5A}, +{0x0000007200000323ULL, 0x001E5B}, +{0x00001E5A00000304ULL, 0x001E5C}, +{0x00001E5B00000304ULL, 0x001E5D}, +{0x0000005200000331ULL, 0x001E5E}, +{0x0000007200000331ULL, 0x001E5F}, +{0x0000005300000307ULL, 0x001E60}, +{0x0000007300000307ULL, 0x001E61}, +{0x0000005300000323ULL, 0x001E62}, +{0x0000007300000323ULL, 0x001E63}, +{0x0000015A00000307ULL, 0x001E64}, +{0x0000015B00000307ULL, 0x001E65}, +{0x0000016000000307ULL, 0x001E66}, +{0x0000016100000307ULL, 0x001E67}, +{0x00001E6200000307ULL, 0x001E68}, +{0x00001E6300000307ULL, 0x001E69}, +{0x0000005400000307ULL, 0x001E6A}, +{0x0000007400000307ULL, 0x001E6B}, +{0x0000005400000323ULL, 0x001E6C}, +{0x0000007400000323ULL, 0x001E6D}, +{0x0000005400000331ULL, 0x001E6E}, +{0x0000007400000331ULL, 0x001E6F}, +{0x000000540000032DULL, 0x001E70}, +{0x000000740000032DULL, 0x001E71}, +{0x0000005500000324ULL, 0x001E72}, +{0x0000007500000324ULL, 0x001E73}, +{0x0000005500000330ULL, 0x001E74}, +{0x0000007500000330ULL, 0x001E75}, +{0x000000550000032DULL, 0x001E76}, +{0x000000750000032DULL, 0x001E77}, +{0x0000016800000301ULL, 0x001E78}, +{0x0000016900000301ULL, 0x001E79}, +{0x0000016A00000308ULL, 0x001E7A}, +{0x0000016B00000308ULL, 0x001E7B}, +{0x0000005600000303ULL, 0x001E7C}, +{0x0000007600000303ULL, 0x001E7D}, +{0x0000005600000323ULL, 0x001E7E}, +{0x0000007600000323ULL, 0x001E7F}, +{0x0000005700000300ULL, 0x001E80}, +{0x0000007700000300ULL, 0x001E81}, +{0x0000005700000301ULL, 0x001E82}, +{0x0000007700000301ULL, 0x001E83}, +{0x0000005700000308ULL, 0x001E84}, +{0x0000007700000308ULL, 0x001E85}, +{0x0000005700000307ULL, 0x001E86}, +{0x0000007700000307ULL, 0x001E87}, +{0x0000005700000323ULL, 0x001E88}, +{0x0000007700000323ULL, 0x001E89}, +{0x0000005800000307ULL, 0x001E8A}, +{0x0000007800000307ULL, 0x001E8B}, +{0x0000005800000308ULL, 0x001E8C}, +{0x0000007800000308ULL, 0x001E8D}, +{0x0000005900000307ULL, 0x001E8E}, +{0x0000007900000307ULL, 0x001E8F}, +{0x0000005A00000302ULL, 0x001E90}, +{0x0000007A00000302ULL, 0x001E91}, +{0x0000005A00000323ULL, 0x001E92}, +{0x0000007A00000323ULL, 0x001E93}, +{0x0000005A00000331ULL, 0x001E94}, +{0x0000007A00000331ULL, 0x001E95}, +{0x0000006800000331ULL, 0x001E96}, +{0x0000007400000308ULL, 0x001E97}, +{0x000000770000030AULL, 0x001E98}, +{0x000000790000030AULL, 0x001E99}, +{0x0000017F00000307ULL, 0x001E9B}, +{0x0000004100000323ULL, 0x001EA0}, +{0x0000006100000323ULL, 0x001EA1}, +{0x0000004100000309ULL, 0x001EA2}, +{0x0000006100000309ULL, 0x001EA3}, +{0x000000C200000301ULL, 0x001EA4}, +{0x000000E200000301ULL, 0x001EA5}, +{0x000000C200000300ULL, 0x001EA6}, +{0x000000E200000300ULL, 0x001EA7}, +{0x000000C200000309ULL, 0x001EA8}, +{0x000000E200000309ULL, 0x001EA9}, +{0x000000C200000303ULL, 0x001EAA}, +{0x000000E200000303ULL, 0x001EAB}, +{0x00001EA000000302ULL, 0x001EAC}, +{0x00001EA100000302ULL, 0x001EAD}, +{0x0000010200000301ULL, 0x001EAE}, +{0x0000010300000301ULL, 0x001EAF}, +{0x0000010200000300ULL, 0x001EB0}, +{0x0000010300000300ULL, 0x001EB1}, +{0x0000010200000309ULL, 0x001EB2}, +{0x0000010300000309ULL, 0x001EB3}, +{0x0000010200000303ULL, 0x001EB4}, +{0x0000010300000303ULL, 0x001EB5}, +{0x00001EA000000306ULL, 0x001EB6}, +{0x00001EA100000306ULL, 0x001EB7}, +{0x0000004500000323ULL, 0x001EB8}, +{0x0000006500000323ULL, 0x001EB9}, +{0x0000004500000309ULL, 0x001EBA}, +{0x0000006500000309ULL, 0x001EBB}, +{0x0000004500000303ULL, 0x001EBC}, +{0x0000006500000303ULL, 0x001EBD}, +{0x000000CA00000301ULL, 0x001EBE}, +{0x000000EA00000301ULL, 0x001EBF}, +{0x000000CA00000300ULL, 0x001EC0}, +{0x000000EA00000300ULL, 0x001EC1}, +{0x000000CA00000309ULL, 0x001EC2}, +{0x000000EA00000309ULL, 0x001EC3}, +{0x000000CA00000303ULL, 0x001EC4}, +{0x000000EA00000303ULL, 0x001EC5}, +{0x00001EB800000302ULL, 0x001EC6}, +{0x00001EB900000302ULL, 0x001EC7}, +{0x0000004900000309ULL, 0x001EC8}, +{0x0000006900000309ULL, 0x001EC9}, +{0x0000004900000323ULL, 0x001ECA}, +{0x0000006900000323ULL, 0x001ECB}, +{0x0000004F00000323ULL, 0x001ECC}, +{0x0000006F00000323ULL, 0x001ECD}, +{0x0000004F00000309ULL, 0x001ECE}, +{0x0000006F00000309ULL, 0x001ECF}, +{0x000000D400000301ULL, 0x001ED0}, +{0x000000F400000301ULL, 0x001ED1}, +{0x000000D400000300ULL, 0x001ED2}, +{0x000000F400000300ULL, 0x001ED3}, +{0x000000D400000309ULL, 0x001ED4}, +{0x000000F400000309ULL, 0x001ED5}, +{0x000000D400000303ULL, 0x001ED6}, +{0x000000F400000303ULL, 0x001ED7}, +{0x00001ECC00000302ULL, 0x001ED8}, +{0x00001ECD00000302ULL, 0x001ED9}, +{0x000001A000000301ULL, 0x001EDA}, +{0x000001A100000301ULL, 0x001EDB}, +{0x000001A000000300ULL, 0x001EDC}, +{0x000001A100000300ULL, 0x001EDD}, +{0x000001A000000309ULL, 0x001EDE}, +{0x000001A100000309ULL, 0x001EDF}, +{0x000001A000000303ULL, 0x001EE0}, +{0x000001A100000303ULL, 0x001EE1}, +{0x000001A000000323ULL, 0x001EE2}, +{0x000001A100000323ULL, 0x001EE3}, +{0x0000005500000323ULL, 0x001EE4}, +{0x0000007500000323ULL, 0x001EE5}, +{0x0000005500000309ULL, 0x001EE6}, +{0x0000007500000309ULL, 0x001EE7}, +{0x000001AF00000301ULL, 0x001EE8}, +{0x000001B000000301ULL, 0x001EE9}, +{0x000001AF00000300ULL, 0x001EEA}, +{0x000001B000000300ULL, 0x001EEB}, +{0x000001AF00000309ULL, 0x001EEC}, +{0x000001B000000309ULL, 0x001EED}, +{0x000001AF00000303ULL, 0x001EEE}, +{0x000001B000000303ULL, 0x001EEF}, +{0x000001AF00000323ULL, 0x001EF0}, +{0x000001B000000323ULL, 0x001EF1}, +{0x0000005900000300ULL, 0x001EF2}, +{0x0000007900000300ULL, 0x001EF3}, +{0x0000005900000323ULL, 0x001EF4}, +{0x0000007900000323ULL, 0x001EF5}, +{0x0000005900000309ULL, 0x001EF6}, +{0x0000007900000309ULL, 0x001EF7}, +{0x0000005900000303ULL, 0x001EF8}, +{0x0000007900000303ULL, 0x001EF9}, +{0x000003B100000313ULL, 0x001F00}, +{0x000003B100000314ULL, 0x001F01}, +{0x00001F0000000300ULL, 0x001F02}, +{0x00001F0100000300ULL, 0x001F03}, +{0x00001F0000000301ULL, 0x001F04}, +{0x00001F0100000301ULL, 0x001F05}, +{0x00001F0000000342ULL, 0x001F06}, +{0x00001F0100000342ULL, 0x001F07}, +{0x0000039100000313ULL, 0x001F08}, +{0x0000039100000314ULL, 0x001F09}, +{0x00001F0800000300ULL, 0x001F0A}, +{0x00001F0900000300ULL, 0x001F0B}, +{0x00001F0800000301ULL, 0x001F0C}, +{0x00001F0900000301ULL, 0x001F0D}, +{0x00001F0800000342ULL, 0x001F0E}, +{0x00001F0900000342ULL, 0x001F0F}, +{0x000003B500000313ULL, 0x001F10}, +{0x000003B500000314ULL, 0x001F11}, +{0x00001F1000000300ULL, 0x001F12}, +{0x00001F1100000300ULL, 0x001F13}, +{0x00001F1000000301ULL, 0x001F14}, +{0x00001F1100000301ULL, 0x001F15}, +{0x0000039500000313ULL, 0x001F18}, +{0x0000039500000314ULL, 0x001F19}, +{0x00001F1800000300ULL, 0x001F1A}, +{0x00001F1900000300ULL, 0x001F1B}, +{0x00001F1800000301ULL, 0x001F1C}, +{0x00001F1900000301ULL, 0x001F1D}, +{0x000003B700000313ULL, 0x001F20}, +{0x000003B700000314ULL, 0x001F21}, +{0x00001F2000000300ULL, 0x001F22}, +{0x00001F2100000300ULL, 0x001F23}, +{0x00001F2000000301ULL, 0x001F24}, +{0x00001F2100000301ULL, 0x001F25}, +{0x00001F2000000342ULL, 0x001F26}, +{0x00001F2100000342ULL, 0x001F27}, +{0x0000039700000313ULL, 0x001F28}, +{0x0000039700000314ULL, 0x001F29}, +{0x00001F2800000300ULL, 0x001F2A}, +{0x00001F2900000300ULL, 0x001F2B}, +{0x00001F2800000301ULL, 0x001F2C}, +{0x00001F2900000301ULL, 0x001F2D}, +{0x00001F2800000342ULL, 0x001F2E}, +{0x00001F2900000342ULL, 0x001F2F}, +{0x000003B900000313ULL, 0x001F30}, +{0x000003B900000314ULL, 0x001F31}, +{0x00001F3000000300ULL, 0x001F32}, +{0x00001F3100000300ULL, 0x001F33}, +{0x00001F3000000301ULL, 0x001F34}, +{0x00001F3100000301ULL, 0x001F35}, +{0x00001F3000000342ULL, 0x001F36}, +{0x00001F3100000342ULL, 0x001F37}, +{0x0000039900000313ULL, 0x001F38}, +{0x0000039900000314ULL, 0x001F39}, +{0x00001F3800000300ULL, 0x001F3A}, +{0x00001F3900000300ULL, 0x001F3B}, +{0x00001F3800000301ULL, 0x001F3C}, +{0x00001F3900000301ULL, 0x001F3D}, +{0x00001F3800000342ULL, 0x001F3E}, +{0x00001F3900000342ULL, 0x001F3F}, +{0x000003BF00000313ULL, 0x001F40}, +{0x000003BF00000314ULL, 0x001F41}, +{0x00001F4000000300ULL, 0x001F42}, +{0x00001F4100000300ULL, 0x001F43}, +{0x00001F4000000301ULL, 0x001F44}, +{0x00001F4100000301ULL, 0x001F45}, +{0x0000039F00000313ULL, 0x001F48}, +{0x0000039F00000314ULL, 0x001F49}, +{0x00001F4800000300ULL, 0x001F4A}, +{0x00001F4900000300ULL, 0x001F4B}, +{0x00001F4800000301ULL, 0x001F4C}, +{0x00001F4900000301ULL, 0x001F4D}, +{0x000003C500000313ULL, 0x001F50}, +{0x000003C500000314ULL, 0x001F51}, +{0x00001F5000000300ULL, 0x001F52}, +{0x00001F5100000300ULL, 0x001F53}, +{0x00001F5000000301ULL, 0x001F54}, +{0x00001F5100000301ULL, 0x001F55}, +{0x00001F5000000342ULL, 0x001F56}, +{0x00001F5100000342ULL, 0x001F57}, +{0x000003A500000314ULL, 0x001F59}, +{0x00001F5900000300ULL, 0x001F5B}, +{0x00001F5900000301ULL, 0x001F5D}, +{0x00001F5900000342ULL, 0x001F5F}, +{0x000003C900000313ULL, 0x001F60}, +{0x000003C900000314ULL, 0x001F61}, +{0x00001F6000000300ULL, 0x001F62}, +{0x00001F6100000300ULL, 0x001F63}, +{0x00001F6000000301ULL, 0x001F64}, +{0x00001F6100000301ULL, 0x001F65}, +{0x00001F6000000342ULL, 0x001F66}, +{0x00001F6100000342ULL, 0x001F67}, +{0x000003A900000313ULL, 0x001F68}, +{0x000003A900000314ULL, 0x001F69}, +{0x00001F6800000300ULL, 0x001F6A}, +{0x00001F6900000300ULL, 0x001F6B}, +{0x00001F6800000301ULL, 0x001F6C}, +{0x00001F6900000301ULL, 0x001F6D}, +{0x00001F6800000342ULL, 0x001F6E}, +{0x00001F6900000342ULL, 0x001F6F}, +{0x000003B100000300ULL, 0x001F70}, +{0x000003B500000300ULL, 0x001F72}, +{0x000003B700000300ULL, 0x001F74}, +{0x000003B900000300ULL, 0x001F76}, +{0x000003BF00000300ULL, 0x001F78}, +{0x000003C500000300ULL, 0x001F7A}, +{0x000003C900000300ULL, 0x001F7C}, +{0x00001F0000000345ULL, 0x001F80}, +{0x00001F0100000345ULL, 0x001F81}, +{0x00001F0200000345ULL, 0x001F82}, +{0x00001F0300000345ULL, 0x001F83}, +{0x00001F0400000345ULL, 0x001F84}, +{0x00001F0500000345ULL, 0x001F85}, +{0x00001F0600000345ULL, 0x001F86}, +{0x00001F0700000345ULL, 0x001F87}, +{0x00001F0800000345ULL, 0x001F88}, +{0x00001F0900000345ULL, 0x001F89}, +{0x00001F0A00000345ULL, 0x001F8A}, +{0x00001F0B00000345ULL, 0x001F8B}, +{0x00001F0C00000345ULL, 0x001F8C}, +{0x00001F0D00000345ULL, 0x001F8D}, +{0x00001F0E00000345ULL, 0x001F8E}, +{0x00001F0F00000345ULL, 0x001F8F}, +{0x00001F2000000345ULL, 0x001F90}, +{0x00001F2100000345ULL, 0x001F91}, +{0x00001F2200000345ULL, 0x001F92}, +{0x00001F2300000345ULL, 0x001F93}, +{0x00001F2400000345ULL, 0x001F94}, +{0x00001F2500000345ULL, 0x001F95}, +{0x00001F2600000345ULL, 0x001F96}, +{0x00001F2700000345ULL, 0x001F97}, +{0x00001F2800000345ULL, 0x001F98}, +{0x00001F2900000345ULL, 0x001F99}, +{0x00001F2A00000345ULL, 0x001F9A}, +{0x00001F2B00000345ULL, 0x001F9B}, +{0x00001F2C00000345ULL, 0x001F9C}, +{0x00001F2D00000345ULL, 0x001F9D}, +{0x00001F2E00000345ULL, 0x001F9E}, +{0x00001F2F00000345ULL, 0x001F9F}, +{0x00001F6000000345ULL, 0x001FA0}, +{0x00001F6100000345ULL, 0x001FA1}, +{0x00001F6200000345ULL, 0x001FA2}, +{0x00001F6300000345ULL, 0x001FA3}, +{0x00001F6400000345ULL, 0x001FA4}, +{0x00001F6500000345ULL, 0x001FA5}, +{0x00001F6600000345ULL, 0x001FA6}, +{0x00001F6700000345ULL, 0x001FA7}, +{0x00001F6800000345ULL, 0x001FA8}, +{0x00001F6900000345ULL, 0x001FA9}, +{0x00001F6A00000345ULL, 0x001FAA}, +{0x00001F6B00000345ULL, 0x001FAB}, +{0x00001F6C00000345ULL, 0x001FAC}, +{0x00001F6D00000345ULL, 0x001FAD}, +{0x00001F6E00000345ULL, 0x001FAE}, +{0x00001F6F00000345ULL, 0x001FAF}, +{0x000003B100000306ULL, 0x001FB0}, +{0x000003B100000304ULL, 0x001FB1}, +{0x00001F7000000345ULL, 0x001FB2}, +{0x000003B100000345ULL, 0x001FB3}, +{0x000003AC00000345ULL, 0x001FB4}, +{0x000003B100000342ULL, 0x001FB6}, +{0x00001FB600000345ULL, 0x001FB7}, +{0x0000039100000306ULL, 0x001FB8}, +{0x0000039100000304ULL, 0x001FB9}, +{0x0000039100000300ULL, 0x001FBA}, +{0x0000039100000345ULL, 0x001FBC}, +{0x000000A800000342ULL, 0x001FC1}, +{0x00001F7400000345ULL, 0x001FC2}, +{0x000003B700000345ULL, 0x001FC3}, +{0x000003AE00000345ULL, 0x001FC4}, +{0x000003B700000342ULL, 0x001FC6}, +{0x00001FC600000345ULL, 0x001FC7}, +{0x0000039500000300ULL, 0x001FC8}, +{0x0000039700000300ULL, 0x001FCA}, +{0x0000039700000345ULL, 0x001FCC}, +{0x00001FBF00000300ULL, 0x001FCD}, +{0x00001FBF00000301ULL, 0x001FCE}, +{0x00001FBF00000342ULL, 0x001FCF}, +{0x000003B900000306ULL, 0x001FD0}, +{0x000003B900000304ULL, 0x001FD1}, +{0x000003CA00000300ULL, 0x001FD2}, +{0x000003B900000342ULL, 0x001FD6}, +{0x000003CA00000342ULL, 0x001FD7}, +{0x0000039900000306ULL, 0x001FD8}, +{0x0000039900000304ULL, 0x001FD9}, +{0x0000039900000300ULL, 0x001FDA}, +{0x00001FFE00000300ULL, 0x001FDD}, +{0x00001FFE00000301ULL, 0x001FDE}, +{0x00001FFE00000342ULL, 0x001FDF}, +{0x000003C500000306ULL, 0x001FE0}, +{0x000003C500000304ULL, 0x001FE1}, +{0x000003CB00000300ULL, 0x001FE2}, +{0x000003C100000313ULL, 0x001FE4}, +{0x000003C100000314ULL, 0x001FE5}, +{0x000003C500000342ULL, 0x001FE6}, +{0x000003CB00000342ULL, 0x001FE7}, +{0x000003A500000306ULL, 0x001FE8}, +{0x000003A500000304ULL, 0x001FE9}, +{0x000003A500000300ULL, 0x001FEA}, +{0x000003A100000314ULL, 0x001FEC}, +{0x000000A800000300ULL, 0x001FED}, +{0x00001F7C00000345ULL, 0x001FF2}, +{0x000003C900000345ULL, 0x001FF3}, +{0x000003CE00000345ULL, 0x001FF4}, +{0x000003C900000342ULL, 0x001FF6}, +{0x00001FF600000345ULL, 0x001FF7}, +{0x0000039F00000300ULL, 0x001FF8}, +{0x000003A900000300ULL, 0x001FFA}, +{0x000003A900000345ULL, 0x001FFC}, +{0x0000219000000338ULL, 0x00219A}, +{0x0000219200000338ULL, 0x00219B}, +{0x0000219400000338ULL, 0x0021AE}, +{0x000021D000000338ULL, 0x0021CD}, +{0x000021D400000338ULL, 0x0021CE}, +{0x000021D200000338ULL, 0x0021CF}, +{0x0000220300000338ULL, 0x002204}, +{0x0000220800000338ULL, 0x002209}, +{0x0000220B00000338ULL, 0x00220C}, +{0x0000222300000338ULL, 0x002224}, +{0x0000222500000338ULL, 0x002226}, +{0x0000223C00000338ULL, 0x002241}, +{0x0000224300000338ULL, 0x002244}, +{0x0000224500000338ULL, 0x002247}, +{0x0000224800000338ULL, 0x002249}, +{0x0000003D00000338ULL, 0x002260}, +{0x0000226100000338ULL, 0x002262}, +{0x0000224D00000338ULL, 0x00226D}, +{0x0000003C00000338ULL, 0x00226E}, +{0x0000003E00000338ULL, 0x00226F}, +{0x0000226400000338ULL, 0x002270}, +{0x0000226500000338ULL, 0x002271}, +{0x0000227200000338ULL, 0x002274}, +{0x0000227300000338ULL, 0x002275}, +{0x0000227600000338ULL, 0x002278}, +{0x0000227700000338ULL, 0x002279}, +{0x0000227A00000338ULL, 0x002280}, +{0x0000227B00000338ULL, 0x002281}, +{0x0000228200000338ULL, 0x002284}, +{0x0000228300000338ULL, 0x002285}, +{0x0000228600000338ULL, 0x002288}, +{0x0000228700000338ULL, 0x002289}, +{0x000022A200000338ULL, 0x0022AC}, +{0x000022A800000338ULL, 0x0022AD}, +{0x000022A900000338ULL, 0x0022AE}, +{0x000022AB00000338ULL, 0x0022AF}, +{0x0000227C00000338ULL, 0x0022E0}, +{0x0000227D00000338ULL, 0x0022E1}, +{0x0000229100000338ULL, 0x0022E2}, +{0x0000229200000338ULL, 0x0022E3}, +{0x000022B200000338ULL, 0x0022EA}, +{0x000022B300000338ULL, 0x0022EB}, +{0x000022B400000338ULL, 0x0022EC}, +{0x000022B500000338ULL, 0x0022ED}, +{0x0000304B00003099ULL, 0x00304C}, +{0x0000304D00003099ULL, 0x00304E}, +{0x0000304F00003099ULL, 0x003050}, +{0x0000305100003099ULL, 0x003052}, +{0x0000305300003099ULL, 0x003054}, +{0x0000305500003099ULL, 0x003056}, +{0x0000305700003099ULL, 0x003058}, +{0x0000305900003099ULL, 0x00305A}, +{0x0000305B00003099ULL, 0x00305C}, +{0x0000305D00003099ULL, 0x00305E}, +{0x0000305F00003099ULL, 0x003060}, +{0x0000306100003099ULL, 0x003062}, +{0x0000306400003099ULL, 0x003065}, +{0x0000306600003099ULL, 0x003067}, +{0x0000306800003099ULL, 0x003069}, +{0x0000306F00003099ULL, 0x003070}, +{0x0000306F0000309AULL, 0x003071}, +{0x0000307200003099ULL, 0x003073}, +{0x000030720000309AULL, 0x003074}, +{0x0000307500003099ULL, 0x003076}, +{0x000030750000309AULL, 0x003077}, +{0x0000307800003099ULL, 0x003079}, +{0x000030780000309AULL, 0x00307A}, +{0x0000307B00003099ULL, 0x00307C}, +{0x0000307B0000309AULL, 0x00307D}, +{0x0000304600003099ULL, 0x003094}, +{0x0000309D00003099ULL, 0x00309E}, +{0x000030AB00003099ULL, 0x0030AC}, +{0x000030AD00003099ULL, 0x0030AE}, +{0x000030AF00003099ULL, 0x0030B0}, +{0x000030B100003099ULL, 0x0030B2}, +{0x000030B300003099ULL, 0x0030B4}, +{0x000030B500003099ULL, 0x0030B6}, +{0x000030B700003099ULL, 0x0030B8}, +{0x000030B900003099ULL, 0x0030BA}, +{0x000030BB00003099ULL, 0x0030BC}, +{0x000030BD00003099ULL, 0x0030BE}, +{0x000030BF00003099ULL, 0x0030C0}, +{0x000030C100003099ULL, 0x0030C2}, +{0x000030C400003099ULL, 0x0030C5}, +{0x000030C600003099ULL, 0x0030C7}, +{0x000030C800003099ULL, 0x0030C9}, +{0x000030CF00003099ULL, 0x0030D0}, +{0x000030CF0000309AULL, 0x0030D1}, +{0x000030D200003099ULL, 0x0030D3}, +{0x000030D20000309AULL, 0x0030D4}, +{0x000030D500003099ULL, 0x0030D6}, +{0x000030D50000309AULL, 0x0030D7}, +{0x000030D800003099ULL, 0x0030D9}, +{0x000030D80000309AULL, 0x0030DA}, +{0x000030DB00003099ULL, 0x0030DC}, +{0x000030DB0000309AULL, 0x0030DD}, +{0x000030A600003099ULL, 0x0030F4}, +{0x000030EF00003099ULL, 0x0030F7}, +{0x000030F000003099ULL, 0x0030F8}, +{0x000030F100003099ULL, 0x0030F9}, +{0x000030F200003099ULL, 0x0030FA}, +{0x000030FD00003099ULL, 0x0030FE}, +{0x000105D200000307ULL, 0x0105C9}, +{0x000105DA00000307ULL, 0x0105E4}, +{0x00011099000110BAULL, 0x01109A}, +{0x0001109B000110BAULL, 0x01109C}, +{0x000110A5000110BAULL, 0x0110AB}, +{0x0001113100011127ULL, 0x01112E}, +{0x0001113200011127ULL, 0x01112F}, +{0x000113470001133EULL, 0x01134B}, +{0x0001134700011357ULL, 0x01134C}, +{0x00011382000113C9ULL, 0x011383}, +{0x00011384000113BBULL, 0x011385}, +{0x0001138B000113C2ULL, 0x01138E}, +{0x00011390000113C9ULL, 0x011391}, +{0x000113C2000113C2ULL, 0x0113C5}, +{0x000113C2000113B8ULL, 0x0113C7}, +{0x000113C2000113C9ULL, 0x0113C8}, +{0x000114B9000114BAULL, 0x0114BB}, +{0x000114B9000114B0ULL, 0x0114BC}, +{0x000114B9000114BDULL, 0x0114BE}, +{0x000115B8000115AFULL, 0x0115BA}, +{0x000115B9000115AFULL, 0x0115BB}, +{0x0001193500011930ULL, 0x011938}, +{0x0001611E0001611EULL, 0x016121}, +{0x0001611E00016129ULL, 0x016122}, +{0x0001611E0001611FULL, 0x016123}, +{0x000161290001611FULL, 0x016124}, +{0x0001611E00016120ULL, 0x016125}, +{0x000161210001611FULL, 0x016126}, +{0x000161220001611FULL, 0x016127}, +{0x0001612100016120ULL, 0x016128}, +{0x00016D6700016D67ULL, 0x016D68}, +{0x00016D6300016D67ULL, 0x016D69}, +{0x00016D6900016D67ULL, 0x016D6A}, +}; diff --git a/src/unicode-data.h b/src/unicode-data.h index f6973ebd2..27220b17f 100644 --- a/src/unicode-data.h +++ b/src/unicode-data.h @@ -1,6 +1,7 @@ #pragma once #include +#include #include #include #include @@ -11,6 +12,10 @@ struct range_nfd { uint32_t nfd; }; +extern const std::unordered_map unicode_combining_class; +extern const std::unordered_map> unicode_decomposition; +extern const std::unordered_map unicode_composition; + static const uint32_t MAX_CODEPOINTS = 0x110000; extern const std::initializer_list> unicode_ranges_flags; diff --git a/src/unicode.cpp b/src/unicode.cpp index 07b425f27..8d8843e0e 100644 --- a/src/unicode.cpp +++ b/src/unicode.cpp @@ -1279,6 +1279,92 @@ std::vector unicode_cpts_normalize_nfd(const std::vector & c return result; } +static uint8_t unicode_canonical_class(uint32_t cpt) { + const auto it = unicode_combining_class.find(cpt); + return it == unicode_combining_class.end() ? 0 : it->second; +} + +static void unicode_canonical_decompose(uint32_t cpt, std::vector & result, std::vector & pending) { + pending.push_back(cpt); + while (!pending.empty()) { + cpt = pending.back(); + pending.pop_back(); + // Hangul syllables use algorithmic decomposition (UAX #15). + if (cpt >= 0xAC00 && cpt < 0xAC00 + 11172) { + const uint32_t index = cpt - 0xAC00; + result.push_back(0x1100 + index / 588); + result.push_back(0x1161 + (index % 588) / 28); + if (index % 28) { + result.push_back(0x11A7 + index % 28); + } + continue; + } + const auto it = unicode_decomposition.find(cpt); + if (it == unicode_decomposition.end()) { + result.push_back(cpt); + continue; + } + if (it->second.second) { + pending.push_back(it->second.second); + } + pending.push_back(it->second.first); + } +} + +static uint32_t unicode_canonical_compose(uint32_t first, uint32_t second) { + if (first >= 0x1100 && first < 0x1100 + 19 && second >= 0x1161 && second < 0x1161 + 21) { + return 0xAC00 + ((first - 0x1100) * 21 + second - 0x1161) * 28; + } + if (first >= 0xAC00 && first < 0xAC00 + 11172 && (first - 0xAC00) % 28 == 0 && second > 0x11A7 && second < 0x11A7 + 28) { + return first + second - 0x11A7; + } + const auto it = unicode_composition.find((uint64_t(first) << 32) | second); + return it == unicode_composition.end() ? 0 : it->second; +} + +std::vector unicode_cpts_normalize_nfc(const std::vector & cpts) { + std::vector decomposed; + decomposed.reserve(cpts.size()); + std::vector pending; + for (const uint32_t cpt : cpts) { + unicode_canonical_decompose(cpt, decomposed, pending); + } + + // Sort each run of combining marks; equal classes retain their order. + for (size_t i = 0; i < decomposed.size();) { + if (unicode_canonical_class(decomposed[i]) == 0) { + ++i; + } + const size_t begin = i; + while (i < decomposed.size() && unicode_canonical_class(decomposed[i]) != 0) { + ++i; + } + std::stable_sort(decomposed.begin() + begin, decomposed.begin() + i, [](uint32_t a, uint32_t b) { + return unicode_canonical_class(a) < unicode_canonical_class(b); + }); + } + + std::vector result; + result.reserve(decomposed.size()); + size_t starter = 0; + uint8_t previous_class = 0; + for (const uint32_t cpt : decomposed) { + const uint8_t current_class = unicode_canonical_class(cpt); + const uint32_t composite = !result.empty() && (previous_class == 0 || previous_class < current_class) + ? unicode_canonical_compose(result[starter], cpt) : 0; + if (composite) { + result[starter] = composite; + } else { + if (current_class == 0) { + starter = result.size(); + } + result.push_back(cpt); + previous_class = current_class; + } + } + return result; +} + std::vector unicode_cpts_from_utf8(const std::string & utf8) { std::vector result; result.reserve(utf8.size()); diff --git a/src/unicode.h b/src/unicode.h index 600ab9216..19bf15a0a 100644 --- a/src/unicode.h +++ b/src/unicode.h @@ -97,6 +97,7 @@ uint32_t unicode_cpt_from_utf8(const std::string & utf8, size_t & offset); std::vector unicode_cpts_from_utf8(const std::string & utf8); std::vector unicode_cpts_normalize_nfd(const std::vector & cpts); +std::vector unicode_cpts_normalize_nfc(const std::vector & cpts); unicode_cpt_flags unicode_cpt_flags_from_cpt (uint32_t cpt); unicode_cpt_flags unicode_cpt_flags_from_utf8(const std::string & utf8); diff --git a/tests/test-unicode.cpp b/tests/test-unicode.cpp index 2347d9000..561ff3e54 100644 --- a/tests/test-unicode.cpp +++ b/tests/test-unicode.cpp @@ -2,9 +2,31 @@ #include #include +#include #include int main() { + const std::vector, std::vector>> normalization = { + {{}, {}}, + {{0x65, 0x301}, {0xE9}}, + {{0xE9}, {0xE9}}, + {{0x212B}, {0xC5}}, + {{0x61, 0x315, 0x300}, {0xE0, 0x315}}, + {{0x61, 0x305, 0x301}, {0x61, 0x305, 0x301}}, + {{0x301, 0x327}, {0x327, 0x301}}, + {{0x1100, 0x1161, 0x11A8}, {0xAC01}}, + {{0xAC01}, {0xAC01}}, + {{0xFB01, 0xFF21}, {0xFB01, 0xFF21}}, + {{0x958}, {0x915, 0x93C}}, + {{0x1D15E}, {0x1D157, 0x1D165}}, + }; + for (const auto & test : normalization) { + if (unicode_cpts_normalize_nfc(test.first) != test.second || unicode_cpts_normalize_nfc(test.second) != test.second) { + fprintf(stderr, "unexpected NFC normalization\n"); + return 1; + } + } + const std::vector regex_exprs = { "[~][A-Za-z]+| ?[\\p{S}]+|\\s+", };