Commit 10da8c463 for llama.cpp
commit 10da8c463f735c7eaff904c6474e6cf38dccbe83
Author: Sandro Hanea <40202887+sandrohanea@users.noreply.github.com>
Date: Wed Oct 14 07:33:24 2026 +0200
unicode : add opt-in NFC normalization for Unigram tokenizers (#30390)
* unicode : add opt-in NFC normalization for Unigram tokenizers
Note: used help from Codex, Sol 6.1 Medium
* Fixing initial bot comments + linter error (using existing out instead of print)
* removed test_nfc_tokenizer
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<uint32_t, uint8_t> 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<uint32_t, std::pair<uint32_t, uint32_t>> 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<uint64_t, uint32_t> 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<range_nfd> 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, const char *> 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<std::string, llama_token> 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<range_nfd> unicode_ranges_nfd = { // start, last, n
{0x02FA1C, 0x02FA1C, 0x009F3B},
{0x02FA1D, 0x02FA1D, 0x02A600},
};
+// Canonical normalization tables: Unicode 16.0.0.
+const std::unordered_map<uint32_t, uint8_t> 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<uint32_t, std::pair<uint32_t, uint32_t>> 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<uint64_t, uint32_t> 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 <cstdint>
+#include <utility>
#include <vector>
#include <unordered_map>
#include <unordered_set>
@@ -11,6 +12,10 @@ struct range_nfd {
uint32_t nfd;
};
+extern const std::unordered_map<uint32_t, uint8_t> unicode_combining_class;
+extern const std::unordered_map<uint32_t, std::pair<uint32_t, uint32_t>> unicode_decomposition;
+extern const std::unordered_map<uint64_t, uint32_t> unicode_composition;
+
static const uint32_t MAX_CODEPOINTS = 0x110000;
extern const std::initializer_list<std::pair<uint32_t, uint16_t>> 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<uint32_t> unicode_cpts_normalize_nfd(const std::vector<uint32_t> & 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<uint32_t> & result, std::vector<uint32_t> & 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<uint32_t> unicode_cpts_normalize_nfc(const std::vector<uint32_t> & cpts) {
+ std::vector<uint32_t> decomposed;
+ decomposed.reserve(cpts.size());
+ std::vector<uint32_t> 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<uint32_t> 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<uint32_t> unicode_cpts_from_utf8(const std::string & utf8) {
std::vector<uint32_t> 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<uint32_t> unicode_cpts_from_utf8(const std::string & utf8);
std::vector<uint32_t> unicode_cpts_normalize_nfd(const std::vector<uint32_t> & cpts);
+std::vector<uint32_t> unicode_cpts_normalize_nfc(const std::vector<uint32_t> & 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 <cstdio>
#include <string>
+#include <utility>
#include <vector>
int main() {
+ const std::vector<std::pair<std::vector<uint32_t>, std::vector<uint32_t>>> 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<std::string> regex_exprs = {
"[~][A-Za-z]+| ?[\\p{S}]+|\\s+",
};