Line data Source code
1 : /*
2 : * SPDX-License-Identifier: MPL-2.0
3 : *
4 : * This Source Code Form is subject to the terms of the Mozilla Public
5 : * License, v. 2.0. If a copy of the MPL was not distributed with this
6 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
7 : *
8 : * Copyright 2024 MonetDB Foundation;
9 : * Copyright August 2008 - 2023 MonetDB B.V.;
10 : * Copyright 1997 - July 2008 CWI.
11 : */
12 :
13 : #include "monetdb_config.h"
14 : #include "gdk.h"
15 : #include "gdk_private.h"
16 : #include "gdk_cand.h"
17 :
18 : /* String Atom Implementation
19 : *
20 : * Strings are stored in two parts. The first part is the normal tail
21 : * heap which contains a list of offsets. The second part is the
22 : * theap which contains the actual strings. The offsets in the tail
23 : * heap (a.k.a. offset heap) point into the theap (a.k.a. string
24 : * heap). Strings are NULL-terminated and are stored without any
25 : * escape sequences. Strings are encoded using the UTF-8 encoding
26 : * of Unicode. This means that individual "characters" (really,
27 : * Unicode code points) can be between one and four bytes long.
28 : *
29 : * Because in many typical situations there are lots of duplicated
30 : * string values that are being stored in a table, but also in many
31 : * (other) typical situations there are very few duplicated string
32 : * values stored, a scheme has been introduced to cater to both
33 : * situations.
34 : *
35 : * When the string heap is "small" (defined as less than 64KiB), the
36 : * string heap is fully duplicate eliminated. When the string heap
37 : * grows beyond this size, the heap is not kept free of duplicate
38 : * strings, but there is then a heuristic that tries to limit the
39 : * number of duplicates.
40 : *
41 : * This is done by having a fixed sized hash table at the start of the
42 : * string heap, and allocating space for collision lists in the first
43 : * 64KiB of the string heap. After the first 64KiB no extra space is
44 : * allocated for lists, so hash collisions cannot be resolved.
45 : */
46 :
47 : /* some of these macros are duplicates from gdk_atoms.c */
48 : #define num08(x) ((x) >= '0' && (x) <= '7')
49 : #define base08(x) ((x) - '0')
50 : #define mult08(x) ((x) << 3)
51 :
52 : #define num16(x) isxdigit((unsigned char) (x))
53 : #define base16(x) (((x) >= 'a' && (x) <= 'f') ? ((x) - 'a' + 10) : ((x) >= 'A' && (x) <= 'F') ? ((x) - 'A' + 10) : (x) - '0')
54 : #define mult16(x) ((x) << 4)
55 :
56 : #define atommem(size) \
57 : do { \
58 : if (*dst == NULL || *len < (size)) { \
59 : GDKfree(*dst); \
60 : *len = (size); \
61 : *dst = GDKmalloc(*len); \
62 : if (*dst == NULL) { \
63 : *len = 0; \
64 : return -1; \
65 : } \
66 : } \
67 : } while (0)
68 :
69 : const char str_nil[2] = { '\200', 0 };
70 :
71 : gdk_return
72 996184 : strHeap(Heap *d, size_t cap)
73 : {
74 996184 : size_t size;
75 :
76 996184 : cap = MAX(cap, BATTINY);
77 996184 : size = GDK_STRHASHTABLE * sizeof(stridx_t) + MIN(GDK_ELIMLIMIT, cap * GDK_VARALIGN);
78 996184 : return HEAPalloc(d, size, 1);
79 : }
80 :
81 :
82 : void
83 4257 : strCleanHash(Heap *h, bool rebuild)
84 : {
85 4257 : stridx_t newhash[GDK_STRHASHTABLE];
86 4257 : size_t pad, pos;
87 4257 : BUN off, strhash;
88 4257 : const char *s;
89 :
90 4257 : (void) rebuild;
91 4257 : if (!h->cleanhash)
92 769 : return;
93 3488 : if (h->size < GDK_STRHASHTABLE * sizeof(stridx_t) &&
94 0 : HEAPextend(h, GDK_STRHASHTABLE * sizeof(stridx_t) + BATTINY * GDK_VARALIGN, true) != GDK_SUCCEED) {
95 0 : GDKclrerr();
96 0 : if (h->size > 0)
97 0 : memset(h->base, 0, h->size);
98 0 : return;
99 : }
100 :
101 : /* rebuild hash table for double elimination
102 : *
103 : * If appending strings to the BAT was aborted, if the heap
104 : * was memory mapped, the hash in the string heap may well be
105 : * incorrect. Therefore we don't trust it when we read in a
106 : * string heap and we rebuild the complete table (it is small,
107 : * so this won't take any time at all).
108 : * Note that we will only do this the first time the heap is
109 : * loaded, and only for heaps that existed when the server was
110 : * started. */
111 3488 : memset(newhash, 0, sizeof(newhash));
112 3488 : pos = GDK_STRHASHSIZE;
113 323725 : while (pos < h->free) {
114 320471 : pad = GDK_VARALIGN - (pos & (GDK_VARALIGN - 1));
115 320471 : if (pad < sizeof(stridx_t))
116 274241 : pad += GDK_VARALIGN;
117 320471 : pos += pad;
118 320471 : if (pos >= GDK_ELIMLIMIT)
119 : break;
120 320237 : s = h->base + pos;
121 320237 : strhash = strHash(s);
122 320237 : off = strhash & GDK_STRHASHMASK;
123 320237 : newhash[off] = (stridx_t) (pos - sizeof(stridx_t));
124 320237 : pos += strlen(s) + 1;
125 : }
126 : /* only set dirty flag if the hash table actually changed */
127 3488 : if (memcmp(newhash, h->base, sizeof(newhash)) != 0) {
128 178 : memcpy(h->base, newhash, sizeof(newhash));
129 178 : if (h->storage == STORE_MMAP) {
130 31 : if (!(ATOMIC_GET(&GDKdebug) & NOSYNCMASK))
131 0 : (void) MT_msync(h->base, GDK_STRHASHSIZE);
132 : } else
133 147 : h->dirty = true;
134 : }
135 : #ifndef NDEBUG
136 3488 : if (GDK_ELIMDOUBLES(h)) {
137 : pos = GDK_STRHASHSIZE;
138 221144 : while (pos < h->free) {
139 217890 : pad = GDK_VARALIGN - (pos & (GDK_VARALIGN - 1));
140 217890 : if (pad < sizeof(stridx_t))
141 181317 : pad += GDK_VARALIGN;
142 217890 : pos += pad;
143 217890 : s = h->base + pos;
144 217890 : assert(strLocate(h, s) != 0);
145 217890 : pos += strlen(s) + 1;
146 : }
147 : }
148 : #endif
149 3488 : h->cleanhash = false;
150 : }
151 :
152 : /*
153 : * The strPut routine. The routine strLocate can be used to identify
154 : * the location of a string in the heap if it exists. Otherwise it
155 : * returns (var_t) -2 (-1 is reserved for error).
156 : */
157 : var_t
158 420745 : strLocate(Heap *h, const char *v)
159 : {
160 420745 : stridx_t *ref, *next;
161 :
162 : /* search hash-table, if double-elimination is still in place */
163 420745 : BUN off;
164 420745 : if (h->free == 0) {
165 : /* empty, so there are no strings */
166 : return (var_t) -2;
167 : }
168 :
169 420745 : off = strHash(v);
170 420745 : off &= GDK_STRHASHMASK;
171 :
172 : /* should only use strLocate iff fully double eliminated */
173 420745 : assert(GDK_ELIMBASE(h->free) == 0);
174 :
175 : /* search the linked list */
176 466485 : for (ref = ((stridx_t *) h->base) + off; *ref; ref = next) {
177 465524 : next = (stridx_t *) (h->base + *ref);
178 465524 : if (strcmp(v, (str) (next + 1)) == 0)
179 419784 : return (var_t) ((sizeof(stridx_t) + *ref)); /* found */
180 : }
181 : return (var_t) -2;
182 : }
183 :
184 : var_t
185 95613445 : strPut(BAT *b, var_t *dst, const void *V)
186 : {
187 95613445 : const char *v = V;
188 95613445 : Heap *h = b->tvheap;
189 95613445 : size_t pad;
190 95613445 : size_t pos, len = strlen(v) + 1;
191 95613445 : stridx_t *bucket;
192 95613445 : BUN off;
193 :
194 95613445 : if (h->free == 0) {
195 247153 : if (h->size < GDK_STRHASHTABLE * sizeof(stridx_t) + BATTINY * GDK_VARALIGN) {
196 0 : if (HEAPgrow(&b->tvheap, GDK_STRHASHTABLE * sizeof(stridx_t) + BATTINY * GDK_VARALIGN, true) != GDK_SUCCEED) {
197 : return (var_t) -1;
198 : }
199 0 : h = b->tvheap;
200 : }
201 247153 : h->free = GDK_STRHASHTABLE * sizeof(stridx_t);
202 247153 : h->dirty = true;
203 : #ifdef NDEBUG
204 : memset(h->base, 0, h->free);
205 : #else
206 : /* fill should solve initialization problems within valgrind */
207 247153 : memset(h->base, 0, h->size);
208 : #endif
209 247153 : b->tascii = true;
210 : }
211 :
212 95613445 : off = strHash(v);
213 95613445 : off &= GDK_STRHASHMASK;
214 95613445 : bucket = ((stridx_t *) h->base) + off;
215 :
216 95613445 : if (*bucket) {
217 93030668 : assert(*bucket < h->free);
218 : /* the hash list is not empty */
219 93030668 : if (*bucket < GDK_ELIMLIMIT) {
220 : /* small string heap (<64KiB) -- fully double
221 : * eliminated: search the linked list */
222 : const stridx_t *ref = bucket;
223 :
224 48221926 : do {
225 48221926 : pos = *ref + sizeof(stridx_t);
226 48221926 : assert(pos < h->free);
227 48221926 : if (strcmp(v, h->base + pos) == 0) {
228 : /* found */
229 44552828 : return *dst = (var_t) pos;
230 : }
231 3669098 : ref = (stridx_t *) (h->base + *ref);
232 3669098 : } while (*ref);
233 : } else {
234 : /* large string heap (>=64KiB) -- there is no
235 : * linked list, so only look at single
236 : * entry */
237 47529228 : pos = *bucket;
238 47529228 : if (strcmp(v, h->base + pos) == 0) {
239 : /* already in heap: reuse */
240 839043 : return *dst = (var_t) pos;
241 : }
242 : }
243 : }
244 : /* the string was not found in the heap, we need to enter it */
245 :
246 : /* check that string is correctly encoded UTF-8; there was no
247 : * need to do this earlier: if the string was found above, it
248 : * must have gone through here in the past */
249 : #ifndef NDEBUG
250 50221574 : if (!checkUTF8(v)) {
251 0 : GDKerror("incorrectly encoded UTF-8\n");
252 0 : return (var_t) -1;
253 : }
254 : #endif
255 :
256 50775725 : pad = GDK_VARALIGN - (h->free & (GDK_VARALIGN - 1));
257 50775725 : if (GDK_ELIMBASE(h->free + pad) == 0) { /* i.e. h->free+pad < GDK_ELIMLIMIT */
258 2785014 : if (pad < sizeof(stridx_t)) {
259 : /* make room for hash link */
260 2242171 : pad += GDK_VARALIGN;
261 : }
262 47990711 : } else if (GDK_ELIMBASE(h->free) != 0) {
263 : /* no extra padding needed when no hash links needed
264 : * (but only when padding doesn't cross duplicate
265 : * elimination boundary) */
266 48030281 : pad = 0;
267 : }
268 :
269 : /* check heap for space (limited to a certain maximum after
270 : * which nils are inserted) */
271 50775725 : if (h->free + pad + len >= h->size) {
272 9654 : size_t newsize = MAX(h->size, 4096);
273 :
274 : /* double the heap size until we have enough space */
275 9698 : do {
276 9698 : if (newsize < 4 * 1024 * 1024)
277 9429 : newsize <<= 1;
278 : else
279 269 : newsize += 4 * 1024 * 1024;
280 9698 : } while (newsize <= h->free + pad + len);
281 :
282 9654 : assert(newsize);
283 :
284 9654 : if (h->free + pad + len >= (size_t) VAR_MAX) {
285 0 : GDKerror("string heap gets larger than %zuGiB.\n", (size_t) VAR_MAX >> 30);
286 0 : return (var_t) -1;
287 : }
288 9654 : TRC_DEBUG(HEAP, "HEAPextend in strPut %s %zu %zu\n", h->filename, h->size, newsize);
289 9654 : if (HEAPgrow(&b->tvheap, newsize, true) != GDK_SUCCEED) {
290 : return (var_t) -1;
291 : }
292 9656 : h = b->tvheap;
293 :
294 : /* make bucket point into the new heap */
295 9656 : bucket = ((stridx_t *) h->base) + off;
296 : }
297 :
298 : /* insert string */
299 50775727 : pos = h->free + pad;
300 50775727 : *dst = (var_t) pos;
301 50775727 : if (pad > 0)
302 2778808 : memset(h->base + h->free, 0, pad);
303 50775727 : memcpy(h->base + pos, v, len);
304 50775727 : h->free += pad + len;
305 50775727 : h->dirty = true;
306 :
307 : /* maintain hash table */
308 50775727 : if (GDK_ELIMBASE(pos) == 0) { /* small string heap: link the next pointer */
309 : /* the stridx_t next pointer directly precedes the
310 : * string */
311 2770273 : pos -= sizeof(stridx_t);
312 2770273 : *(stridx_t *) (h->base + pos) = *bucket;
313 : }
314 50775727 : *bucket = (stridx_t) pos; /* set bucket to the new string */
315 :
316 101377651 : if (b->tascii && !strNil(v)) {
317 2145182639 : for (const uint8_t *p = (const uint8_t *) v; *p; p++) {
318 2094336125 : if (*p >= 128) {
319 321 : b->tascii = false;
320 321 : break;
321 : }
322 : }
323 : }
324 :
325 50775727 : return *dst;
326 : }
327 :
328 : /*
329 : * Convert an "" separated string to a GDK string value, checking that
330 : * the input is correct UTF-8.
331 : */
332 :
333 : #ifdef __has_builtin
334 : #if __has_builtin(__builtin_expect)
335 : /* __builtin_expect returns its first argument; it is expected to be
336 : * equal to the second argument */
337 : #define unlikely(expr) __builtin_expect((expr) != 0, 0)
338 : #define likely(expr) __builtin_expect((expr) != 0, 1)
339 : #endif
340 : #endif
341 : #ifndef unlikely
342 : #ifdef _MSC_VER
343 : #define unlikely(expr) (__assume(!(expr)), (expr))
344 : #define likely(expr) (__assume((expr)), (expr))
345 : #else
346 : #define unlikely(expr) (expr)
347 : #define likely(expr) (expr)
348 : #endif
349 : #endif
350 :
351 : ssize_t
352 316822590 : GDKstrFromStr(unsigned char *restrict dst, const unsigned char *restrict src, ssize_t len, char quote)
353 : {
354 316822590 : unsigned char *p = dst;
355 316822590 : const unsigned char *cur = src, *end = src + len;
356 316822590 : bool escaped = false;
357 316822590 : int mask = 0, n, c, utf8char = 0;
358 :
359 316822590 : if (len >= 2 && strNil((const char *) src)) {
360 0 : strcpy((char *) dst, str_nil);
361 0 : return 1;
362 : }
363 :
364 : /* copy it in, while performing the correct escapes */
365 : /* n is the number of follow-on bytes left in a multi-byte
366 : * UTF-8 sequence */
367 2037203946 : for (cur = src, n = 0; cur < end || escaped; cur++) {
368 : /* first convert any \ escapes and store value in c */
369 1720381360 : if (escaped) {
370 547368 : switch (*cur) {
371 3825 : case '0':
372 : case '1':
373 : case '2':
374 : case '3':
375 : case '4':
376 : case '5':
377 : case '6':
378 : case '7':
379 : /* \ with up to three octal digits */
380 3825 : c = base08(*cur);
381 3825 : if (num08(cur[1])) {
382 3825 : cur++;
383 3825 : c = mult08(c) + base08(*cur);
384 3825 : if (num08(cur[1])) {
385 3825 : if (unlikely(c > 037)) {
386 : /* octal
387 : * escape
388 : * sequence
389 : * out or
390 : * range */
391 1 : GDKerror("not an octal number\n");
392 1 : return -1;
393 : }
394 3824 : cur++;
395 3824 : c = mult08(c) + base08(*cur);
396 3824 : assert(c >= 0 && c <= 0377);
397 : }
398 : }
399 : break;
400 57 : case 'x':
401 : /* \x with one or two hexadecimal digits */
402 57 : if (num16(cur[1])) {
403 57 : cur++;
404 57 : c = base16(*cur);
405 57 : if (num16(cur[1])) {
406 57 : cur++;
407 57 : c = mult16(c) + base16(*cur);
408 : }
409 : } else
410 : c = 'x';
411 : break;
412 1 : case 'u':
413 : case 'U':
414 : /* \u with four hexadecimal digits or
415 : * \U with eight hexadecimal digits */
416 1 : if (unlikely(n > 0)) {
417 : /* not when in the middle of a
418 : * UTF-8 sequence */
419 0 : goto notutf8;
420 : }
421 1 : c = 0;
422 2 : for (n = *cur == 'U' ? 8 : 4; n > 0; n--) {
423 1 : cur++;
424 1 : if (unlikely(!num16(*cur))) {
425 1 : GDKerror("not a Unicode code point escape\n");
426 1 : return -1;
427 : }
428 0 : c = c << 4 | base16(*cur);
429 : }
430 : /* n == 0 now */
431 0 : if (unlikely(c == 0 || c > 0x10FFFF ||
432 : (c & 0xFFF800) == 0xD800)) {
433 0 : GDKerror("illegal Unicode code point\n");
434 0 : return -1;
435 : }
436 0 : if (c < 0x80) {
437 0 : *p++ = (unsigned char) c;
438 : } else {
439 0 : if (c < 0x800) {
440 0 : *p++ = 0xC0 | (c >> 6);
441 : } else {
442 0 : if (c < 0x10000) {
443 0 : *p++ = 0xE0 | (c >> 12);
444 : } else {
445 0 : *p++ = 0xF0 | (c >> 18);
446 0 : *p++ = 0x80 | ((c >> 12) & 0x3F);
447 : }
448 0 : *p++ = 0x80 | ((c >> 6) & 0x3F);
449 : }
450 0 : *p++ = 0x80 | (c & 0x3F);
451 : }
452 0 : escaped = false;
453 0 : continue;
454 : case 'a':
455 : c = '\a';
456 : break;
457 1 : case 'b':
458 1 : c = '\b';
459 1 : break;
460 5 : case 'f':
461 5 : c = '\f';
462 5 : break;
463 10957 : case 'n':
464 10957 : c = '\n';
465 10957 : break;
466 12 : case 'r':
467 12 : c = '\r';
468 12 : break;
469 2031 : case 't':
470 2031 : c = '\t';
471 2031 : break;
472 0 : case '\0':
473 0 : c = '\\';
474 0 : break;
475 530479 : case '\'':
476 : case '\\':
477 : /* \' and \\ can be handled by the
478 : * default case */
479 : default:
480 : /* unrecognized \ escape, just copy
481 : * the backslashed character */
482 530479 : c = *cur;
483 530479 : break;
484 : }
485 : escaped = false;
486 1719833992 : } else if ((c = *cur) == '\\') {
487 547368 : escaped = true;
488 547368 : continue;
489 1719286624 : } else if (c == quote && cur[1] == quote) {
490 5399 : assert(c != 0);
491 5399 : if (unlikely(n > 0))
492 0 : goto notutf8;
493 5399 : *p++ = quote;
494 5399 : cur++;
495 5399 : continue;
496 : }
497 :
498 1719828591 : if (n > 0) {
499 : /* we're still expecting follow-up bytes in a
500 : * UTF-8 sequence */
501 0 : if (unlikely((c & 0xC0) != 0x80)) {
502 : /* incorrect UTF-8 sequence: byte is
503 : * not 10xxxxxx */
504 0 : goto notutf8;
505 : }
506 0 : utf8char = (utf8char << 6) | (c & 0x3F);
507 0 : n--;
508 0 : if (n == 0) {
509 : /* this was the last byte in the sequence */
510 26834 : if (unlikely((utf8char & mask) == 0)) {
511 : /* incorrect UTF-8 sequence:
512 : * not shortest possible */
513 0 : goto notutf8;
514 : }
515 26834 : if (unlikely(utf8char > 0x10FFFF)) {
516 : /* incorrect UTF-8 sequence:
517 : * value too large */
518 0 : goto notutf8;
519 : }
520 26834 : if (unlikely((utf8char & 0x1FFF800) == 0xD800)) {
521 : /* incorrect UTF-8 sequence:
522 : * low or high surrogate
523 : * encoded as UTF-8 */
524 0 : goto notutf8;
525 : }
526 : }
527 1726325114 : } else if ((c & 0x80) == 0) {
528 : ;
529 26836 : } else if ((c & 0xE0) == 0xC0) {
530 1892 : n = 1;
531 1892 : mask = 0x000780;
532 1892 : utf8char = c & 0x1F;
533 24944 : } else if ((c & 0xF0) == 0xE0) {
534 24930 : n = 2;
535 24930 : mask = 0x00F800;
536 24930 : utf8char = c & 0x0F;
537 14 : } else if ((c & 0xF8) == 0xF0) {
538 12 : n = 3;
539 12 : mask = 0x1F0000;
540 12 : utf8char = c & 0x07;
541 : } else {
542 : /* incorrect UTF-8 sequence */
543 2 : goto notutf8;
544 : }
545 1719828589 : *p++ = c;
546 : }
547 316822586 : if (unlikely(n > 0)) {
548 : /* incomplete UTF-8 sequence */
549 0 : goto notutf8;
550 : }
551 316822586 : *p++ = 0;
552 316822586 : return len;
553 2 : notutf8:
554 2 : GDKerror("not a proper UTF-8 sequence\n");
555 2 : return -1;
556 : }
557 :
558 : ssize_t
559 29463482 : strFromStr(const char *restrict src, size_t *restrict len, char **restrict dst, bool external)
560 : {
561 29463482 : const char *cur = src, *start = NULL;
562 29463482 : size_t l = 1;
563 29463482 : bool escaped = false;
564 :
565 29463482 : if (!external) {
566 29463315 : size_t sz = strLen(src);
567 29463315 : atommem(sz);
568 29477583 : return (ssize_t) strcpy_len(*dst, src, sz);
569 : }
570 :
571 167 : if (strNil(src)) {
572 0 : atommem(2);
573 0 : strcpy(*dst, str_nil);
574 0 : return 1;
575 : }
576 :
577 167 : while (GDKisspace(*cur))
578 0 : cur++;
579 167 : if (*cur != '"') {
580 0 : if (strncmp(cur, "nil", 3) == 0) {
581 0 : atommem(2);
582 0 : strcpy(*dst, str_nil);
583 0 : return (ssize_t) (cur - src) + 3;
584 : }
585 0 : GDKerror("not a quoted string\n");
586 0 : return -1;
587 : }
588 :
589 : /* scout the string to find out its length and whether it was
590 : * properly quoted */
591 1623 : for (start = ++cur; *cur != '"' || escaped; cur++) {
592 1456 : if (*cur == 0) {
593 0 : GDKerror("no closing quotes\n");
594 0 : return -1;
595 1456 : } else if (*cur == '\\' && !escaped) {
596 : escaped = true;
597 : } else {
598 1447 : escaped = false;
599 1447 : l++;
600 : }
601 : }
602 :
603 : /* alloc new memory */
604 167 : if (*dst == NULL || *len < l) {
605 167 : GDKfree(*dst);
606 167 : *dst = GDKmalloc(*len = l);
607 167 : if (*dst == NULL) {
608 0 : *len = 0;
609 0 : return -1;
610 : }
611 : }
612 :
613 167 : return GDKstrFromStr((unsigned char *) *dst,
614 : (const unsigned char *) start,
615 : (ssize_t) (cur - start),
616 : '\0');
617 : }
618 :
619 : /*
620 : * Convert a GDK string value to something printable.
621 : */
622 : /* all but control characters (in range 0 to 31) and DEL */
623 : #define printable_chr(ch) ((' ' <= (ch) && (ch) <= '~') || ((ch) & 0x80) != 0)
624 :
625 : size_t
626 17025124 : escapedStrlen(const char *restrict src, const char *sep1, const char *sep2, int quote)
627 : {
628 17025124 : size_t end, sz = 0;
629 17025124 : size_t sep1len, sep2len;
630 :
631 17025124 : sep1len = sep1 ? strlen(sep1) : 0;
632 17025124 : sep2len = sep2 ? strlen(sep2) : 0;
633 479593907 : for (end = 0; src[end]; end++)
634 462568783 : if (src[end] == '\\'
635 462568298 : || src[end] == quote
636 462473523 : || (sep1len && strncmp(src + end, sep1, sep1len) == 0)
637 462470938 : || (sep2len && strncmp(src + end, sep2, sep2len) == 0)) {
638 102025 : sz += 2;
639 462466758 : } else if (src[end] == (char) '\302' &&
640 8 : 0200 <= ((int) src[end + 1] & 0377) &&
641 8 : ((int) src[end + 1] & 0377) <= 0237) {
642 : /* Unicode control character (code point range
643 : * U-00000080 through U-0000009F encoded in
644 : * UTF-8 */
645 : /* for the first one of the two UTF-8 bytes we
646 : * count a width of 7 and for the second one
647 : * 1, together that's 8, i.e. the width of two
648 : * backslash-escaped octal coded characters */
649 0 : sz += 7;
650 462466758 : } else if (!printable_chr(src[end])) {
651 12781 : sz += 4;
652 : } else {
653 462453977 : sz++;
654 : }
655 17025124 : return sz;
656 : }
657 :
658 : size_t
659 8519883 : escapedStr(char *restrict dst, const char *restrict src, size_t dstlen, const char *sep1, const char *sep2, int quote)
660 : {
661 8519883 : size_t cur = 0, l = 0;
662 8519883 : size_t sep1len, sep2len;
663 :
664 8519883 : sep1len = sep1 ? strlen(sep1) : 0;
665 8519883 : sep2len = sep2 ? strlen(sep2) : 0;
666 239911394 : for (; src[cur] && l < dstlen; cur++)
667 231391511 : if (!printable_chr(src[cur])
668 231382246 : || (src[cur] == '\302'
669 4 : && 0200 <= (src[cur + 1] & 0377)
670 4 : && ((int) src[cur + 1] & 0377) <= 0237)
671 231382246 : || (cur > 0
672 222865772 : && src[cur - 1] == '\302'
673 4 : && 0200 <= (src[cur] & 0377)
674 4 : && (src[cur] & 0377) <= 0237)) {
675 9265 : dst[l++] = '\\';
676 9265 : switch (src[cur]) {
677 343 : case '\t':
678 343 : dst[l++] = 't';
679 343 : break;
680 8910 : case '\n':
681 8910 : dst[l++] = 'n';
682 8910 : break;
683 3 : case '\r':
684 3 : dst[l++] = 'r';
685 3 : break;
686 2 : case '\f':
687 2 : dst[l++] = 'f';
688 2 : break;
689 7 : default:
690 7 : snprintf(dst + l, dstlen - l, "%03o", (unsigned char) src[cur]);
691 7 : l += 3;
692 7 : break;
693 : }
694 231382246 : } else if (src[cur] == '\\'
695 231381985 : || src[cur] == quote
696 231324583 : || (sep1len && strncmp(src + cur, sep1, sep1len) == 0)
697 231324583 : || (sep2len && strncmp(src + cur, sep2, sep2len) == 0)) {
698 57663 : dst[l++] = '\\';
699 57663 : dst[l++] = src[cur];
700 : } else {
701 231324583 : dst[l++] = src[cur];
702 : }
703 8519883 : assert(l < dstlen);
704 8519883 : dst[l] = 0;
705 8519883 : return l;
706 : }
707 :
708 : ssize_t
709 25607 : strToStr(char **restrict dst, size_t *restrict len, const char *restrict src, bool external)
710 : {
711 25607 : size_t sz;
712 :
713 25607 : if (!external) {
714 11290 : sz = strLen(src);
715 11290 : atommem(sz);
716 11290 : return (ssize_t) strcpy_len(*dst, src, sz);
717 : }
718 14317 : if (strNil(src)) {
719 51 : atommem(4);
720 52 : strcpy(*dst, "nil");
721 52 : return 3;
722 : } else {
723 14266 : ssize_t l = 0;
724 14266 : size_t sz = escapedStrlen(src, NULL, NULL, '"');
725 :
726 14277 : atommem(sz + 3);
727 14280 : l = (ssize_t) escapedStr((*dst) + 1, src, *len - 1, NULL, NULL, '"');
728 14276 : l++;
729 14276 : (*dst)[0] = (*dst)[l++] = '"';
730 14276 : (*dst)[l] = 0;
731 14276 : return l;
732 : }
733 : }
734 :
735 : str
736 96 : strRead(str a, size_t *dstlen, stream *s, size_t cnt)
737 : {
738 96 : int len;
739 :
740 96 : (void) cnt;
741 96 : assert(cnt == 1);
742 96 : if (mnstr_readInt(s, &len) != 1 || len < 0)
743 : return NULL;
744 96 : if (a == NULL || *dstlen < (size_t) len + 1) {
745 0 : if ((a = GDKrealloc(a, len + 1)) == NULL)
746 : return NULL;
747 0 : *dstlen = len + 1;
748 : }
749 96 : if (len && mnstr_read(s, a, len, 1) != 1) {
750 0 : GDKfree(a);
751 0 : return NULL;
752 : }
753 96 : a[len] = 0;
754 96 : return a;
755 : }
756 :
757 : gdk_return
758 96 : strWrite(const char *a, stream *s, size_t cnt)
759 : {
760 96 : size_t len = strlen(a);
761 :
762 96 : (void) cnt;
763 96 : assert(cnt == 1);
764 96 : if (!checkUTF8(a)) {
765 0 : GDKerror("incorrectly encoded UTF-8\n");
766 0 : return GDK_FAIL;
767 : }
768 96 : if (mnstr_writeInt(s, (int) len) && mnstr_write(s, a, len, 1) == 1)
769 : return GDK_SUCCEED;
770 : else
771 0 : return GDK_FAIL;
772 : }
773 :
774 : static gdk_return
775 89 : concat_strings(BAT **bnp, ValPtr pt, BAT *b, oid seqb,
776 : BUN ngrp, struct canditer *restrict ci,
777 : const oid *restrict gids, oid min, oid max, bool skip_nils,
778 : BAT *sep, const char *restrict separator, BUN *has_nils)
779 : {
780 89 : oid gid;
781 89 : BUN i, p, nils = 0;
782 89 : size_t *restrict lengths = NULL, separator_length = 0, next_length;
783 89 : str *restrict astrings = NULL;
784 89 : BATiter bi, bis = (BATiter) {0};
785 89 : BAT *bn = NULL;
786 89 : gdk_return rres = GDK_FAIL;
787 :
788 89 : QryCtx *qry_ctx = MT_thread_get_qry_ctx();
789 :
790 : /* exactly one of bnp and pt must be NULL, the other non-NULL */
791 89 : assert((bnp == NULL) != (pt == NULL));
792 : /* if pt not NULL, only a single group allowed */
793 89 : assert(pt == NULL || ngrp == 1);
794 :
795 89 : if (bnp) {
796 34 : if ((bn = COLnew(min, TYPE_str, ngrp, TRANSIENT)) == NULL)
797 : return GDK_FAIL;
798 34 : *bnp = bn;
799 : }
800 :
801 89 : bi = bat_iterator(b);
802 89 : bis = bat_iterator(sep);
803 89 : if (separator)
804 58 : separator_length = strlen(separator);
805 :
806 89 : if (ngrp == 1) {
807 62 : size_t offset = 0, single_length = 0;
808 62 : bool empty = true;
809 :
810 62 : if (separator) {
811 43 : assert(sep == NULL);
812 18251 : TIMEOUT_LOOP_IDX(i, ci->ncand, qry_ctx) {
813 18121 : p = canditer_next(ci) - seqb;
814 18121 : const char *s = BUNtvar(bi, p);
815 18121 : if (strNil(s)) {
816 15 : if (!skip_nils) {
817 : nils = 1;
818 : break;
819 : }
820 : } else {
821 18106 : single_length += strlen(s);
822 18106 : if (!empty)
823 18065 : single_length += separator_length;
824 : empty = false;
825 : }
826 : }
827 : } else { /* sep case */
828 19 : assert(sep != NULL);
829 354 : TIMEOUT_LOOP_IDX(i, ci->ncand, qry_ctx) {
830 297 : p = canditer_next(ci) - seqb;
831 297 : const char *s = BUNtvar(bi, p);
832 297 : const char *sl = BUNtvar(bis, p);
833 297 : if (strNil(s)) {
834 4 : if (!skip_nils) {
835 : nils = 1;
836 : break;
837 : }
838 : } else {
839 293 : single_length += strlen(s);
840 293 : if (!empty) {
841 274 : if (strNil(sl)) {
842 23 : if (!skip_nils) {
843 : nils = 1;
844 : break;
845 : }
846 : } else
847 251 : single_length += strlen(sl);
848 : }
849 : empty = false;
850 : }
851 : }
852 : }
853 62 : canditer_reset(ci);
854 62 : TIMEOUT_CHECK(qry_ctx, GOTO_LABEL_TIMEOUT_HANDLER(bailout, qry_ctx));
855 :
856 62 : if (nils == 0 && !empty) {
857 60 : char *single_str = NULL;
858 :
859 60 : if ((single_str = GDKmalloc(single_length + 1)) == NULL) {
860 0 : bat_iterator_end(&bi);
861 0 : bat_iterator_end(&bis);
862 0 : BBPreclaim(bn);
863 0 : return GDK_FAIL;
864 : }
865 60 : empty = true;
866 60 : if (separator) {
867 18232 : TIMEOUT_LOOP_IDX(i, ci->ncand, qry_ctx) {
868 18108 : p = canditer_next(ci) - seqb;
869 18108 : const char *s = BUNtvar(bi, p);
870 18108 : if (strNil(s))
871 2 : continue;
872 18106 : if (!empty) {
873 18065 : memcpy(single_str + offset, separator, separator_length);
874 18065 : offset += separator_length;
875 : }
876 18106 : next_length = strlen(s);
877 18106 : memcpy(single_str + offset, s, next_length);
878 18106 : offset += next_length;
879 18106 : empty = false;
880 : }
881 : } else { /* sep case */
882 19 : assert(sep != NULL);
883 354 : TIMEOUT_LOOP_IDX(i, ci->ncand, qry_ctx) {
884 297 : p = canditer_next(ci) - seqb;
885 297 : const char *s = BUNtvar(bi, p);
886 297 : const char *sl = BUNtvar(bis, p);
887 297 : if (strNil(s))
888 4 : continue;
889 567 : if (!empty && !strNil(sl)) {
890 251 : next_length = strlen(sl);
891 251 : memcpy(single_str + offset, sl, next_length);
892 251 : offset += next_length;
893 : }
894 293 : next_length = strlen(s);
895 293 : memcpy(single_str + offset, s, next_length);
896 293 : offset += next_length;
897 293 : empty = false;
898 : }
899 : }
900 :
901 60 : single_str[offset] = '\0';
902 60 : TIMEOUT_CHECK(qry_ctx, do { GDKfree(single_str); GOTO_LABEL_TIMEOUT_HANDLER(bailout, qry_ctx); } while (0));
903 60 : if (bn) {
904 7 : if (BUNappend(bn, single_str, false) != GDK_SUCCEED) {
905 0 : GDKfree(single_str);
906 0 : bat_iterator_end(&bi);
907 0 : bat_iterator_end(&bis);
908 0 : BBPreclaim(bn);
909 0 : return GDK_FAIL;
910 : }
911 : } else {
912 53 : pt->len = offset + 1;
913 53 : pt->val.sval = single_str;
914 53 : single_str = NULL; /* don't free */
915 : }
916 67 : GDKfree(single_str);
917 2 : } else if (bn) {
918 0 : if (BUNappend(bn, str_nil, false) != GDK_SUCCEED) {
919 0 : bat_iterator_end(&bi);
920 0 : bat_iterator_end(&bis);
921 0 : BBPreclaim(bn);
922 0 : return GDK_FAIL;
923 : }
924 : } else {
925 2 : if (VALinit(pt, TYPE_str, str_nil) == NULL) {
926 0 : bat_iterator_end(&bi);
927 0 : bat_iterator_end(&bis);
928 0 : return GDK_FAIL;
929 : }
930 : }
931 62 : bat_iterator_end(&bi);
932 62 : bat_iterator_end(&bis);
933 62 : return GDK_SUCCEED;
934 : } else {
935 : /* first used to calculated the total length of
936 : * each group, then the the total offset */
937 27 : lengths = GDKzalloc(ngrp * sizeof(*lengths));
938 27 : astrings = GDKmalloc(ngrp * sizeof(str));
939 27 : if (lengths == NULL || astrings == NULL) {
940 0 : goto finish;
941 : }
942 : /* at first, set astrings[i] to str_nil, then for each
943 : * non-empty group (even if all strings in the group
944 : * are empty), set to NULL */
945 2141 : for (i = 0; i < ngrp; i++)
946 2114 : astrings[i] = (char *) str_nil;
947 :
948 27 : if (separator) {
949 208 : TIMEOUT_LOOP_IDX(p, ci->ncand, qry_ctx) {
950 163 : i = canditer_next(ci) - seqb;
951 163 : if (gids[i] >= min && gids[i] <= max) {
952 163 : gid = gids[i] - min;
953 163 : if (lengths[gid] == (size_t) -1)
954 0 : continue;
955 163 : const char *s = BUNtvar(bi, i);
956 326 : if (!strNil(s)) {
957 155 : lengths[gid] += strlen(s) + separator_length;
958 155 : astrings[gid] = NULL;
959 8 : } else if (!skip_nils) {
960 0 : nils++;
961 0 : lengths[gid] = (size_t) -1;
962 0 : astrings[gid] = (char *) str_nil;
963 : }
964 : }
965 : }
966 : } else { /* sep case */
967 12 : assert(sep != NULL);
968 999759 : TIMEOUT_LOOP_IDX(p, ci->ncand, qry_ctx) {
969 999663 : i = canditer_next(ci) - seqb;
970 999663 : if (gids[i] >= min && gids[i] <= max) {
971 999663 : gid = gids[i] - min;
972 999663 : if (lengths[gid] == (size_t) -1)
973 0 : continue;
974 999663 : const char *s = BUNtvar(bi, i);
975 999663 : const char *sl = BUNtvar(bis, i);
976 1999326 : if (!strNil(s)) {
977 999340 : lengths[gid] += strlen(s);
978 1998680 : if (!strNil(sl)) {
979 999209 : next_length = strlen(sl);
980 999209 : lengths[gid] += next_length;
981 : }
982 999340 : astrings[gid] = NULL;
983 323 : } else if (!skip_nils) {
984 0 : nils++;
985 0 : lengths[gid] = (size_t) -1;
986 0 : astrings[gid] = (char *) str_nil;
987 : }
988 : }
989 : }
990 : }
991 27 : TIMEOUT_CHECK(qry_ctx, GOTO_LABEL_TIMEOUT_HANDLER(finish, qry_ctx));
992 :
993 27 : if (separator) {
994 69 : for (i = 0; i < ngrp; i++) {
995 54 : if (astrings[i] == NULL) {
996 52 : if ((astrings[i] = GDKmalloc(lengths[i] + 1)) == NULL) {
997 0 : goto finish;
998 : }
999 52 : astrings[i][0] = 0;
1000 52 : lengths[i] = 0;
1001 : } else
1002 2 : astrings[i] = NULL;
1003 : }
1004 : } else { /* sep case */
1005 12 : assert(sep != NULL);
1006 2072 : for (i = 0; i < ngrp; i++) {
1007 2060 : if (astrings[i] == NULL) {
1008 2058 : if ((astrings[i] = GDKmalloc(lengths[i] + 1)) == NULL) {
1009 0 : goto finish;
1010 : }
1011 2058 : astrings[i][0] = 0;
1012 2058 : lengths[i] = 0;
1013 : } else
1014 2 : astrings[i] = NULL;
1015 : }
1016 : }
1017 27 : canditer_reset(ci);
1018 :
1019 27 : if (separator) {
1020 193 : TIMEOUT_LOOP_IDX(p, ci->ncand, qry_ctx) {
1021 163 : i = canditer_next(ci) - seqb;
1022 163 : if (gids[i] >= min && gids[i] <= max) {
1023 163 : gid = gids[i] - min;
1024 163 : if (astrings[gid]) {
1025 160 : const char *s = BUNtvar(bi, i);
1026 160 : if (strNil(s))
1027 5 : continue;
1028 155 : if (astrings[gid][lengths[gid]]) {
1029 103 : memcpy(astrings[gid] + lengths[gid], separator, separator_length);
1030 103 : lengths[gid] += separator_length;
1031 : }
1032 155 : next_length = strlen(s);
1033 155 : memcpy(astrings[gid] + lengths[gid], s, next_length);
1034 155 : lengths[gid] += next_length;
1035 155 : astrings[gid][lengths[gid]] = 1;
1036 : }
1037 : }
1038 : }
1039 : } else { /* sep case */
1040 12 : assert(sep != NULL);
1041 999747 : TIMEOUT_LOOP_IDX(p, ci->ncand, qry_ctx) {
1042 999663 : i = canditer_next(ci) - seqb;
1043 999663 : if (gids[i] >= min && gids[i] <= max) {
1044 999663 : gid = gids[i] - min;
1045 999663 : if (astrings[gid]) {
1046 999342 : const char *s = BUNtvar(bi, i);
1047 999342 : const char *sl = BUNtvar(bis, i);
1048 999342 : if (strNil(s))
1049 2 : continue;
1050 1996622 : if (astrings[gid][lengths[gid]] && !strNil(sl)) {
1051 997156 : next_length = strlen(sl);
1052 997156 : memcpy(astrings[gid] + lengths[gid], sl, next_length);
1053 997156 : lengths[gid] += next_length;
1054 : }
1055 999340 : next_length = strlen(s);
1056 999340 : memcpy(astrings[gid] + lengths[gid], s, next_length);
1057 999340 : lengths[gid] += next_length;
1058 999340 : astrings[gid][lengths[gid]] = 1;
1059 : }
1060 : }
1061 : }
1062 : }
1063 27 : TIMEOUT_CHECK(qry_ctx, GOTO_LABEL_TIMEOUT_HANDLER(finish, qry_ctx));
1064 :
1065 2141 : for (i = 0; i < ngrp; i++) {
1066 2114 : if (astrings[i]) {
1067 2110 : astrings[i][lengths[i]] = '\0';
1068 2110 : if (BUNappend(bn, astrings[i], false) != GDK_SUCCEED) {
1069 0 : goto finish;
1070 : }
1071 4 : } else if (BUNappend(bn, str_nil, false) != GDK_SUCCEED) {
1072 0 : goto finish;
1073 : }
1074 : }
1075 : rres = GDK_SUCCEED;
1076 : }
1077 :
1078 27 : finish:
1079 27 : bat_iterator_end(&bi);
1080 27 : bat_iterator_end(&bis);
1081 27 : if (has_nils)
1082 27 : *has_nils = nils;
1083 27 : GDKfree(lengths);
1084 27 : if (astrings) {
1085 2141 : for (i = 0; i < ngrp; i++) {
1086 2114 : if (astrings[i] != str_nil)
1087 2114 : GDKfree(astrings[i]);
1088 : }
1089 27 : GDKfree(astrings);
1090 : }
1091 27 : if (rres != GDK_SUCCEED)
1092 0 : BBPreclaim(bn);
1093 :
1094 : return rres;
1095 :
1096 0 : bailout:
1097 0 : bat_iterator_end(&bi);
1098 0 : bat_iterator_end(&bis);
1099 0 : BBPreclaim(bn);
1100 : return GDK_FAIL;
1101 : }
1102 :
1103 : gdk_return
1104 56 : BATstr_group_concat(ValPtr res, BAT *b, BAT *s, BAT *sep, bool skip_nils,
1105 : bool nil_if_empty, const char *restrict separator)
1106 : {
1107 56 : struct canditer ci;
1108 56 : gdk_return r = GDK_SUCCEED;
1109 56 : bool free_nseparator = false;
1110 56 : char *nseparator = (char *)separator;
1111 :
1112 56 : assert((nseparator && !sep) || (!nseparator && sep)); /* only one of them must be set */
1113 56 : *res = (ValRecord) {.vtype = TYPE_str};
1114 :
1115 56 : canditer_init(&ci, b, s);
1116 :
1117 56 : if (sep && BATcount(sep) == 1) { /* Only one element in sep */
1118 0 : BATiter bi = bat_iterator(sep);
1119 0 : nseparator = GDKstrdup(BUNtvar(bi, 0));
1120 0 : bat_iterator_end(&bi);
1121 0 : if (!nseparator)
1122 0 : return GDK_FAIL;
1123 0 : free_nseparator = true;
1124 0 : sep = NULL;
1125 : }
1126 :
1127 56 : if (ci.ncand == 0 || (nseparator && strNil(nseparator))) {
1128 1 : if (VALinit(res, TYPE_str, nil_if_empty ? str_nil : "") == NULL)
1129 0 : r = GDK_FAIL;
1130 1 : if (free_nseparator)
1131 0 : GDKfree(nseparator);
1132 1 : return r;
1133 : }
1134 :
1135 55 : r = concat_strings(NULL, res, b, b->hseqbase, 1, &ci, NULL, 0, 0,
1136 : skip_nils, sep, nseparator, NULL);
1137 55 : if (free_nseparator)
1138 0 : GDKfree(nseparator);
1139 : return r;
1140 : }
1141 :
1142 : BAT *
1143 54 : BATgroupstr_group_concat(BAT *b, BAT *g, BAT *e, BAT *s, BAT *sep, bool skip_nils,
1144 : const char *restrict separator)
1145 : {
1146 54 : BAT *bn = NULL;
1147 54 : oid min, max;
1148 54 : BUN ngrp, nils = 0;
1149 54 : struct canditer ci;
1150 54 : const char *err;
1151 54 : gdk_return res;
1152 54 : bool free_nseparator = false;
1153 54 : char *nseparator = (char *)separator;
1154 :
1155 54 : assert((nseparator && !sep) || (!nseparator && sep)); /* only one of them must be set */
1156 54 : (void) skip_nils;
1157 :
1158 54 : if ((err = BATgroupaggrinit(b, g, e, s, &min, &max, &ngrp,
1159 : &ci)) != NULL) {
1160 0 : GDKerror("%s\n", err);
1161 0 : return NULL;
1162 : }
1163 54 : if (g == NULL) {
1164 0 : GDKerror("b and g must be aligned\n");
1165 0 : return NULL;
1166 : }
1167 :
1168 54 : if (sep && BATcount(sep) == 1) { /* Only one element in sep */
1169 0 : BATiter bi = bat_iterator(sep);
1170 0 : nseparator = GDKstrdup(BUNtvar(bi, 0));
1171 0 : bat_iterator_end(&bi);
1172 0 : if (!nseparator)
1173 0 : return NULL;
1174 0 : free_nseparator = true;
1175 0 : sep = NULL;
1176 : }
1177 :
1178 54 : if (ci.ncand == 0 || ngrp == 0 || (nseparator && strNil(nseparator))) {
1179 : /* trivial: no strings to concat, so return bat
1180 : * aligned with g with nil in the tail */
1181 5 : bn = BATconstant(ngrp == 0 ? 0 : min, TYPE_str, str_nil, ngrp, TRANSIENT);
1182 5 : goto done;
1183 : }
1184 :
1185 49 : if (BATtdense(g) || (g->tkey && g->tnonil)) {
1186 : /* trivial: singleton groups, so all results are equal
1187 : * to the inputs (but possibly a different type) */
1188 15 : bn = BATconvert(b, s, TYPE_str, 0, 0, 0);
1189 15 : goto done;
1190 : }
1191 :
1192 68 : res = concat_strings(&bn, NULL, b, b->hseqbase, ngrp, &ci,
1193 34 : (const oid *) Tloc(g, 0), min, max, skip_nils, sep,
1194 : nseparator, &nils);
1195 34 : if (res != GDK_SUCCEED)
1196 0 : bn = NULL;
1197 :
1198 34 : done:
1199 54 : if (free_nseparator)
1200 0 : GDKfree(nseparator);
1201 54 : return bn;
1202 : }
1203 :
1204 : #define compute_next_single_str(START, END) \
1205 : do { \
1206 : for (oid m = START; m < END; m++) { \
1207 : const char *sb = BUNtvar(bi, m); \
1208 : \
1209 : if (separator) { \
1210 : if (!strNil(sb)) { \
1211 : next_group_length += strlen(sb); \
1212 : if (!empty) \
1213 : next_group_length += separator_length; \
1214 : empty = false; \
1215 : } \
1216 : } else { /* sep case */ \
1217 : assert(sep != NULL); \
1218 : const char *sl = BUNtvar(sepi, m); \
1219 : \
1220 : if (!strNil(sb)) { \
1221 : next_group_length += strlen(sb); \
1222 : if (!empty && !strNil(sl)) \
1223 : next_group_length += strlen(sl); \
1224 : empty = false; \
1225 : } \
1226 : } \
1227 : } \
1228 : if (empty) { \
1229 : if (single_str == NULL) { /* reuse the same buffer, resize it when needed */ \
1230 : max_group_length = 1; \
1231 : if ((single_str = GDKmalloc(max_group_length + 1)) == NULL) \
1232 : goto allocation_error; \
1233 : } else if (1 > max_group_length) { \
1234 : max_group_length = 1; \
1235 : if ((next_single_str = GDKrealloc(single_str, max_group_length + 1)) == NULL) \
1236 : goto allocation_error; \
1237 : single_str = next_single_str; \
1238 : } \
1239 : strcpy(single_str, str_nil); \
1240 : has_nils = true; \
1241 : } else { \
1242 : empty = true; \
1243 : if (single_str == NULL) { /* reuse the same buffer, resize it when needed */ \
1244 : max_group_length = next_group_length; \
1245 : if ((single_str = GDKmalloc(max_group_length + 1)) == NULL) \
1246 : goto allocation_error; \
1247 : } else if (next_group_length > max_group_length) { \
1248 : max_group_length = next_group_length; \
1249 : if ((next_single_str = GDKrealloc(single_str, max_group_length + 1)) == NULL) \
1250 : goto allocation_error; \
1251 : single_str = next_single_str; \
1252 : } \
1253 : \
1254 : for (oid m = START; m < END; m++) { \
1255 : const char *sb = BUNtvar(bi, m); \
1256 : \
1257 : if (separator) { \
1258 : if (strNil(sb)) \
1259 : continue; \
1260 : if (!empty) { \
1261 : memcpy(single_str + offset, separator, separator_length); \
1262 : offset += separator_length; \
1263 : } \
1264 : next_length = strlen(sb); \
1265 : memcpy(single_str + offset, sb, next_length); \
1266 : offset += next_length; \
1267 : empty = false; \
1268 : } else { /* sep case */ \
1269 : assert(sep != NULL); \
1270 : const char *sl = BUNtvar(sepi, m); \
1271 : \
1272 : if (strNil(sb)) \
1273 : continue; \
1274 : if (!empty && !strNil(sl)) { \
1275 : next_length = strlen(sl); \
1276 : memcpy(single_str + offset, sl, next_length); \
1277 : offset += next_length; \
1278 : } \
1279 : next_length = strlen(sb); \
1280 : memcpy(single_str + offset, sb, next_length); \
1281 : offset += next_length; \
1282 : empty = false; \
1283 : } \
1284 : } \
1285 : \
1286 : single_str[offset] = '\0'; \
1287 : } \
1288 : } while (0)
1289 :
1290 : #define ANALYTICAL_STR_GROUP_CONCAT_UNBOUNDED_TILL_CURRENT_ROW \
1291 : do { \
1292 : size_t slice_length = 0; \
1293 : next_group_length = next_length = offset = 0; \
1294 : empty = true; \
1295 : compute_next_single_str(k, i); /* compute the entire string then slice it starting from the beginning */ \
1296 : empty = true; \
1297 : for (; k < i;) { \
1298 : const char *nsep; \
1299 : oid m = k; \
1300 : j = k; \
1301 : do { \
1302 : k++; \
1303 : } while (k < i && !op[k]); \
1304 : for (; j < k; j++) { \
1305 : const char *nstr = BUNtvar(bi, j); \
1306 : if (!strNil(nstr)) { \
1307 : slice_length += strlen(nstr); \
1308 : if (!empty) { \
1309 : if (separator) { \
1310 : nsep = (const char *) separator; \
1311 : } else { /* sep case */ \
1312 : assert(sep != NULL); \
1313 : nsep = BUNtvar(sepi, j); \
1314 : } \
1315 : if (!strNil(nsep)) \
1316 : slice_length += strlen(nsep); \
1317 : } \
1318 : empty = false; \
1319 : } \
1320 : } \
1321 : if (empty) { \
1322 : for (j = m; j < k; j++) \
1323 : if (tfastins_nocheckVAR(r, j, str_nil) != GDK_SUCCEED) \
1324 : goto allocation_error; \
1325 : has_nils = true; \
1326 : } else { \
1327 : char save = single_str[slice_length]; \
1328 : single_str[slice_length] = '\0'; \
1329 : for (j = m; j < k; j++) \
1330 : if (tfastins_nocheckVAR(r, j, single_str) != GDK_SUCCEED) \
1331 : goto allocation_error; \
1332 : single_str[slice_length] = save; \
1333 : } \
1334 : } \
1335 : } while (0)
1336 :
1337 : #define ANALYTICAL_STR_GROUP_CONCAT_ALL_ROWS \
1338 : do { \
1339 : next_group_length = next_length = offset = 0; \
1340 : empty = true; \
1341 : compute_next_single_str(k, i); \
1342 : for (; k < i; k++) \
1343 : if (tfastins_nocheckVAR(r, k, single_str) != GDK_SUCCEED) \
1344 : goto allocation_error; \
1345 : } while (0)
1346 :
1347 : #define ANALYTICAL_STR_GROUP_CONCAT_CURRENT_ROW \
1348 : do { \
1349 : for (; k < i; k++) { \
1350 : const char *next = BUNtvar(bi, k); \
1351 : if (tfastins_nocheckVAR(r, k, next) != GDK_SUCCEED) \
1352 : goto allocation_error; \
1353 : has_nils |= strNil(next); \
1354 : } \
1355 : } while (0)
1356 :
1357 : #define ANALYTICAL_STR_GROUP_CONCAT_OTHERS \
1358 : do { \
1359 : for (; k < i; k++) { \
1360 : next_group_length = next_length = offset = 0; \
1361 : empty = true; \
1362 : compute_next_single_str(start[k], end[k]); \
1363 : if (tfastins_nocheckVAR(r, k, single_str) != GDK_SUCCEED) \
1364 : goto allocation_error; \
1365 : } \
1366 : } while (0)
1367 :
1368 : #define ANALYTICAL_STR_GROUP_CONCAT_PARTITIONS(IMP) \
1369 : do { \
1370 : if (p) { \
1371 : for (; i < cnt; i++) { \
1372 : if (np[i]) \
1373 : IMP; \
1374 : } \
1375 : } \
1376 : i = cnt; \
1377 : IMP; \
1378 : } while (0)
1379 :
1380 : gdk_return
1381 53 : GDKanalytical_str_group_concat(BAT *r, BAT *p, BAT *o, BAT *b, BAT *sep, BAT *s, BAT *e, const char *restrict separator, int frame_type)
1382 : {
1383 53 : bool has_nils = false, empty;
1384 53 : BATiter pi = bat_iterator(p);
1385 53 : BATiter oi = bat_iterator(o);
1386 53 : BATiter bi = bat_iterator(b);
1387 53 : BATiter sepi = bat_iterator(sep);
1388 53 : BATiter si = bat_iterator(s);
1389 53 : BATiter ei = bat_iterator(e);
1390 53 : oid i = 0, j = 0, k = 0, cnt = bi.count, *restrict start = si.base, *restrict end = ei.base;
1391 53 : bit *np = pi.base, *op = oi.base;
1392 53 : str single_str = NULL, next_single_str;
1393 53 : size_t separator_length = 0, next_group_length, max_group_length = 0, next_length, offset;
1394 :
1395 53 : assert((sep && !separator && bi.count == sepi.count) || (!sep && separator));
1396 53 : if (b->ttype != TYPE_str || r->ttype != TYPE_str || (sep && sep->ttype != TYPE_str)) {
1397 0 : GDKerror("only string type is supported\n");
1398 0 : bat_iterator_end(&pi);
1399 0 : bat_iterator_end(&oi);
1400 0 : bat_iterator_end(&bi);
1401 0 : bat_iterator_end(&sepi);
1402 0 : bat_iterator_end(&si);
1403 0 : bat_iterator_end(&ei);
1404 0 : return GDK_FAIL;
1405 : }
1406 30 : if (sep && sepi.count == 1) { /* Only one element in sep */
1407 0 : separator = BUNtvar(sepi, 0);
1408 0 : sep = NULL;
1409 : }
1410 :
1411 53 : if (sep == NULL)
1412 23 : separator_length = strlen(separator);
1413 :
1414 53 : if (cnt > 0) {
1415 52 : switch (frame_type) {
1416 29 : case 3: /* unbounded until current row */
1417 154775 : ANALYTICAL_STR_GROUP_CONCAT_PARTITIONS(ANALYTICAL_STR_GROUP_CONCAT_UNBOUNDED_TILL_CURRENT_ROW);
1418 : break;
1419 0 : case 4: /* current row until unbounded */
1420 0 : goto notimplemented;
1421 23 : case 5: /* all rows */
1422 847 : ANALYTICAL_STR_GROUP_CONCAT_PARTITIONS(ANALYTICAL_STR_GROUP_CONCAT_ALL_ROWS);
1423 : break;
1424 0 : case 6: /* current row */
1425 0 : ANALYTICAL_STR_GROUP_CONCAT_PARTITIONS(ANALYTICAL_STR_GROUP_CONCAT_CURRENT_ROW);
1426 : break;
1427 0 : default:
1428 0 : ANALYTICAL_STR_GROUP_CONCAT_PARTITIONS(ANALYTICAL_STR_GROUP_CONCAT_OTHERS);
1429 : break;
1430 : }
1431 : }
1432 :
1433 53 : bat_iterator_end(&pi);
1434 53 : bat_iterator_end(&oi);
1435 53 : bat_iterator_end(&bi);
1436 53 : bat_iterator_end(&sepi);
1437 53 : bat_iterator_end(&si);
1438 53 : bat_iterator_end(&ei);
1439 53 : GDKfree(single_str);
1440 53 : BATsetcount(r, cnt);
1441 53 : r->tnonil = !has_nils;
1442 53 : r->tnil = has_nils;
1443 53 : return GDK_SUCCEED;
1444 0 : allocation_error:
1445 0 : bat_iterator_end(&pi);
1446 0 : bat_iterator_end(&oi);
1447 0 : bat_iterator_end(&bi);
1448 0 : bat_iterator_end(&sepi);
1449 0 : bat_iterator_end(&si);
1450 0 : bat_iterator_end(&ei);
1451 0 : GDKfree(single_str);
1452 0 : return GDK_FAIL;
1453 0 : notimplemented:
1454 0 : bat_iterator_end(&pi);
1455 0 : bat_iterator_end(&oi);
1456 0 : bat_iterator_end(&bi);
1457 0 : bat_iterator_end(&sepi);
1458 0 : bat_iterator_end(&si);
1459 0 : bat_iterator_end(&ei);
1460 0 : GDKerror("str_group_concat not yet implemented for current row until unbounded case\n");
1461 0 : return GDK_FAIL;
1462 : }
1463 :
1464 : /* The three case conversion tables are specially crafted from the
1465 : * UnicodeData.txt file for efficient lookup.
1466 : *
1467 : * The lowercase and uppercase tables are derived from the
1468 : * UnicodeData.txt file (the respective columns from that file), the
1469 : * casefold table is derived from the CaseFold.txt file.
1470 : *
1471 : * For the first byte of a UTF-8 encoding, use the value as index into
1472 : * the table. If the value is zero, there are no conversions for any
1473 : * UTF-8 string starting with this byte (this includes both multi-byte
1474 : * sequences and single-byte sequences, though note that for single-byte
1475 : * sequences (ASCII-compatible) the table is filled in completely at no
1476 : * extra cost). For a single-byte sequence, if the value is not zero,
1477 : * it is the converted codepoint. For a multi-byte sequence, if the
1478 : * value is not zero, it is an offset into the same table. The next
1479 : * byte is added to the offset and again used as index into the table
1480 : * (including the top two bits which are always 1 and 0 respectively).
1481 : * The process then repeats: if zero, no conversions for any sequence
1482 : * starting with the bytes looked up so far, if non-zero, if this is the
1483 : * last byte of a sequence, it is the converted codepoint, and otherwise
1484 : * a (new) offset into the same table.
1485 : * Only for the casefold table, if the converted codepoint is negative,
1486 : * it is actually an escape into the specialcase table. The absolute
1487 : * value is the index. */
1488 :
1489 : /* These tables were created using the code in unicaseconvtabs.py */
1490 : static const char *const specialcase[] = {
1491 : NULL,
1492 : [1] = "ss",
1493 : [2] = "i\xCC\x87",
1494 : [3] = "\xCA\xBCn",
1495 : [4] = "j\xCC\x8C",
1496 : [5] = "\xCE\xB9\xCC\x88\xCC\x81",
1497 : [6] = "\xCF\x85\xCC\x88\xCC\x81",
1498 : [7] = "\xD5\xA5\xD6\x82",
1499 : [8] = "h\xCC\xB1",
1500 : [9] = "t\xCC\x88",
1501 : [10] = "w\xCC\x8A",
1502 : [11] = "y\xCC\x8A",
1503 : [12] = "a\xCA\xBE",
1504 : [13] = "\xCF\x85\xCC\x93",
1505 : [14] = "\xCF\x85\xCC\x93\xCC\x80",
1506 : [15] = "\xCF\x85\xCC\x93\xCC\x81",
1507 : [16] = "\xCF\x85\xCC\x93\xCD\x82",
1508 : [17] = "\xE1\xBC\x80\xCE\xB9",
1509 : [18] = "\xE1\xBC\x81\xCE\xB9",
1510 : [19] = "\xE1\xBC\x82\xCE\xB9",
1511 : [20] = "\xE1\xBC\x83\xCE\xB9",
1512 : [21] = "\xE1\xBC\x84\xCE\xB9",
1513 : [22] = "\xE1\xBC\x85\xCE\xB9",
1514 : [23] = "\xE1\xBC\x86\xCE\xB9",
1515 : [24] = "\xE1\xBC\x87\xCE\xB9",
1516 : [25] = "\xE1\xBC\xA0\xCE\xB9",
1517 : [26] = "\xE1\xBC\xA1\xCE\xB9",
1518 : [27] = "\xE1\xBC\xA2\xCE\xB9",
1519 : [28] = "\xE1\xBC\xA3\xCE\xB9",
1520 : [29] = "\xE1\xBC\xA4\xCE\xB9",
1521 : [30] = "\xE1\xBC\xA5\xCE\xB9",
1522 : [31] = "\xE1\xBC\xA6\xCE\xB9",
1523 : [32] = "\xE1\xBC\xA7\xCE\xB9",
1524 : [33] = "\xE1\xBD\xA0\xCE\xB9",
1525 : [34] = "\xE1\xBD\xA1\xCE\xB9",
1526 : [35] = "\xE1\xBD\xA2\xCE\xB9",
1527 : [36] = "\xE1\xBD\xA3\xCE\xB9",
1528 : [37] = "\xE1\xBD\xA4\xCE\xB9",
1529 : [38] = "\xE1\xBD\xA5\xCE\xB9",
1530 : [39] = "\xE1\xBD\xA6\xCE\xB9",
1531 : [40] = "\xE1\xBD\xA7\xCE\xB9",
1532 : [41] = "\xE1\xBD\xB0\xCE\xB9",
1533 : [42] = "\xCE\xB1\xCE\xB9",
1534 : [43] = "\xCE\xAC\xCE\xB9",
1535 : [44] = "\xCE\xB1\xCD\x82",
1536 : [45] = "\xCE\xB1\xCD\x82\xCE\xB9",
1537 : [46] = "\xE1\xBD\xB4\xCE\xB9",
1538 : [47] = "\xCE\xB7\xCE\xB9",
1539 : [48] = "\xCE\xAE\xCE\xB9",
1540 : [49] = "\xCE\xB7\xCD\x82",
1541 : [50] = "\xCE\xB7\xCD\x82\xCE\xB9",
1542 : [51] = "\xCE\xB9\xCC\x88\xCC\x80",
1543 : [52] = "\xCE\xB9\xCD\x82",
1544 : [53] = "\xCE\xB9\xCC\x88\xCD\x82",
1545 : [54] = "\xCF\x85\xCC\x88\xCC\x80",
1546 : [55] = "\xCF\x81\xCC\x93",
1547 : [56] = "\xCF\x85\xCD\x82",
1548 : [57] = "\xCF\x85\xCC\x88\xCD\x82",
1549 : [58] = "\xE1\xBD\xBC\xCE\xB9",
1550 : [59] = "\xCF\x89\xCE\xB9",
1551 : [60] = "\xCF\x8E\xCE\xB9",
1552 : [61] = "\xCF\x89\xCD\x82",
1553 : [62] = "\xCF\x89\xCD\x82\xCE\xB9",
1554 : [63] = "ff",
1555 : [64] = "fi",
1556 : [65] = "fl",
1557 : [66] = "ffi",
1558 : [67] = "ffl",
1559 : [68] = "st",
1560 : [69] = "\xD5\xB4\xD5\xB6",
1561 : [70] = "\xD5\xB4\xD5\xA5",
1562 : [71] = "\xD5\xB4\xD5\xAB",
1563 : [72] = "\xD5\xBE\xD5\xB6",
1564 : [73] = "\xD5\xB4\xD5\xAD",
1565 : [74] = "SS",
1566 : [75] = "FF",
1567 : [76] = "FI",
1568 : [77] = "FL",
1569 : [78] = "FFI",
1570 : [79] = "FFL",
1571 : [80] = "ST",
1572 : [81] = "\xD4\xB5\xD5\x92",
1573 : [82] = "\xD5\x84\xD5\x86",
1574 : [83] = "\xD5\x84\xD4\xB5",
1575 : [84] = "\xD5\x84\xD4\xBB",
1576 : [85] = "\xD5\x8E\xD5\x86",
1577 : [86] = "\xD5\x84\xD4\xBD",
1578 : [87] = "\xCA\xBCN",
1579 : [88] = "\xCE\x99\xCC\x88\xCC\x81",
1580 : [89] = "\xCE\xA5\xCC\x88\xCC\x81",
1581 : [90] = "J\xCC\x8C",
1582 : [91] = "H\xCC\xB1",
1583 : [92] = "T\xCC\x88",
1584 : [93] = "W\xCC\x8A",
1585 : [94] = "Y\xCC\x8A",
1586 : [95] = "A\xCA\xBE",
1587 : [96] = "\xCE\xA5\xCC\x93",
1588 : [97] = "\xCE\xA5\xCC\x93\xCC\x80",
1589 : [98] = "\xCE\xA5\xCC\x93\xCC\x81",
1590 : [99] = "\xCE\xA5\xCC\x93\xCD\x82",
1591 : [100] = "\xCE\x91\xCD\x82",
1592 : [101] = "\xCE\x97\xCD\x82",
1593 : [102] = "\xCE\x99\xCC\x88\xCC\x80",
1594 : [103] = "\xCE\x99\xCD\x82",
1595 : [104] = "\xCE\x99\xCC\x88\xCD\x82",
1596 : [105] = "\xCE\xA5\xCC\x88\xCC\x80",
1597 : [106] = "\xCE\xA1\xCC\x93",
1598 : [107] = "\xCE\xA5\xCD\x82",
1599 : [108] = "\xCE\xA5\xCC\x88\xCD\x82",
1600 : [109] = "\xCE\xA9\xCD\x82",
1601 : [110] = "\xE1\xBC\x88\xCE\x99",
1602 : [111] = "\xE1\xBC\x89\xCE\x99",
1603 : [112] = "\xE1\xBC\x8A\xCE\x99",
1604 : [113] = "\xE1\xBC\x8B\xCE\x99",
1605 : [114] = "\xE1\xBC\x8C\xCE\x99",
1606 : [115] = "\xE1\xBC\x8D\xCE\x99",
1607 : [116] = "\xE1\xBC\x8E\xCE\x99",
1608 : [117] = "\xE1\xBC\x8F\xCE\x99",
1609 : [118] = "\xE1\xBC\xA8\xCE\x99",
1610 : [119] = "\xE1\xBC\xA9\xCE\x99",
1611 : [120] = "\xE1\xBC\xAA\xCE\x99",
1612 : [121] = "\xE1\xBC\xAB\xCE\x99",
1613 : [122] = "\xE1\xBC\xAC\xCE\x99",
1614 : [123] = "\xE1\xBC\xAD\xCE\x99",
1615 : [124] = "\xE1\xBC\xAE\xCE\x99",
1616 : [125] = "\xE1\xBC\xAF\xCE\x99",
1617 : [126] = "\xE1\xBD\xA8\xCE\x99",
1618 : [127] = "\xE1\xBD\xA9\xCE\x99",
1619 : [128] = "\xE1\xBD\xAA\xCE\x99",
1620 : [129] = "\xE1\xBD\xAB\xCE\x99",
1621 : [130] = "\xE1\xBD\xAC\xCE\x99",
1622 : [131] = "\xE1\xBD\xAD\xCE\x99",
1623 : [132] = "\xE1\xBD\xAE\xCE\x99",
1624 : [133] = "\xE1\xBD\xAF\xCE\x99",
1625 : [134] = "\xCE\x91\xCE\x99",
1626 : [135] = "\xCE\x97\xCE\x99",
1627 : [136] = "\xCE\xA9\xCE\x99",
1628 : [137] = "\xE1\xBE\xBA\xCE\x99",
1629 : [138] = "\xCE\x86\xCE\x99",
1630 : [139] = "\xE1\xBF\x8A\xCE\x99",
1631 : [140] = "\xCE\x89\xCE\x99",
1632 : [141] = "\xE1\xBF\xBA\xCE\x99",
1633 : [142] = "\xCE\x8F\xCE\x99",
1634 : [143] = "\xCE\x91\xCD\x82\xCE\x99",
1635 : [144] = "\xCE\x97\xCD\x82\xCE\x99",
1636 : [145] = "\xCE\xA9\xCD\x82\xCE\x99",
1637 : };
1638 : static const int lowercase[4288] = {
1639 : [0x00] = 0x0000, /* U+0000: <control> */
1640 : [0x01] = 0x0001, /* U+0001: <control> */
1641 : [0x02] = 0x0002, /* U+0002: <control> */
1642 : [0x03] = 0x0003, /* U+0003: <control> */
1643 : [0x04] = 0x0004, /* U+0004: <control> */
1644 : [0x05] = 0x0005, /* U+0005: <control> */
1645 : [0x06] = 0x0006, /* U+0006: <control> */
1646 : [0x07] = 0x0007, /* U+0007: <control> */
1647 : [0x08] = 0x0008, /* U+0008: <control> */
1648 : [0x09] = 0x0009, /* U+0009: <control> */
1649 : [0x0A] = 0x000A, /* U+000A: <control> */
1650 : [0x0B] = 0x000B, /* U+000B: <control> */
1651 : [0x0C] = 0x000C, /* U+000C: <control> */
1652 : [0x0D] = 0x000D, /* U+000D: <control> */
1653 : [0x0E] = 0x000E, /* U+000E: <control> */
1654 : [0x0F] = 0x000F, /* U+000F: <control> */
1655 : [0x10] = 0x0010, /* U+0010: <control> */
1656 : [0x11] = 0x0011, /* U+0011: <control> */
1657 : [0x12] = 0x0012, /* U+0012: <control> */
1658 : [0x13] = 0x0013, /* U+0013: <control> */
1659 : [0x14] = 0x0014, /* U+0014: <control> */
1660 : [0x15] = 0x0015, /* U+0015: <control> */
1661 : [0x16] = 0x0016, /* U+0016: <control> */
1662 : [0x17] = 0x0017, /* U+0017: <control> */
1663 : [0x18] = 0x0018, /* U+0018: <control> */
1664 : [0x19] = 0x0019, /* U+0019: <control> */
1665 : [0x1A] = 0x001A, /* U+001A: <control> */
1666 : [0x1B] = 0x001B, /* U+001B: <control> */
1667 : [0x1C] = 0x001C, /* U+001C: <control> */
1668 : [0x1D] = 0x001D, /* U+001D: <control> */
1669 : [0x1E] = 0x001E, /* U+001E: <control> */
1670 : [0x1F] = 0x001F, /* U+001F: <control> */
1671 : [0x20] = 0x0020, /* U+0020: SPACE */
1672 : [0x21] = 0x0021, /* U+0021: EXCLAMATION MARK */
1673 : [0x22] = 0x0022, /* U+0022: QUOTATION MARK */
1674 : [0x23] = 0x0023, /* U+0023: NUMBER SIGN */
1675 : [0x24] = 0x0024, /* U+0024: DOLLAR SIGN */
1676 : [0x25] = 0x0025, /* U+0025: PERCENT SIGN */
1677 : [0x26] = 0x0026, /* U+0026: AMPERSAND */
1678 : [0x27] = 0x0027, /* U+0027: APOSTROPHE */
1679 : [0x28] = 0x0028, /* U+0028: LEFT PARENTHESIS */
1680 : [0x29] = 0x0029, /* U+0029: RIGHT PARENTHESIS */
1681 : [0x2A] = 0x002A, /* U+002A: ASTERISK */
1682 : [0x2B] = 0x002B, /* U+002B: PLUS SIGN */
1683 : [0x2C] = 0x002C, /* U+002C: COMMA */
1684 : [0x2D] = 0x002D, /* U+002D: HYPHEN-MINUS */
1685 : [0x2E] = 0x002E, /* U+002E: FULL STOP */
1686 : [0x2F] = 0x002F, /* U+002F: SOLIDUS */
1687 : [0x30] = 0x0030, /* U+0030: DIGIT ZERO */
1688 : [0x31] = 0x0031, /* U+0031: DIGIT ONE */
1689 : [0x32] = 0x0032, /* U+0032: DIGIT TWO */
1690 : [0x33] = 0x0033, /* U+0033: DIGIT THREE */
1691 : [0x34] = 0x0034, /* U+0034: DIGIT FOUR */
1692 : [0x35] = 0x0035, /* U+0035: DIGIT FIVE */
1693 : [0x36] = 0x0036, /* U+0036: DIGIT SIX */
1694 : [0x37] = 0x0037, /* U+0037: DIGIT SEVEN */
1695 : [0x38] = 0x0038, /* U+0038: DIGIT EIGHT */
1696 : [0x39] = 0x0039, /* U+0039: DIGIT NINE */
1697 : [0x3A] = 0x003A, /* U+003A: COLON */
1698 : [0x3B] = 0x003B, /* U+003B: SEMICOLON */
1699 : [0x3C] = 0x003C, /* U+003C: LESS-THAN SIGN */
1700 : [0x3D] = 0x003D, /* U+003D: EQUALS SIGN */
1701 : [0x3E] = 0x003E, /* U+003E: GREATER-THAN SIGN */
1702 : [0x3F] = 0x003F, /* U+003F: QUESTION MARK */
1703 : [0x40] = 0x0040, /* U+0040: COMMERCIAL AT */
1704 : [0x41] = 0x0061, /* U+0041: LATIN CAPITAL LETTER A */
1705 : [0x42] = 0x0062, /* U+0042: LATIN CAPITAL LETTER B */
1706 : [0x43] = 0x0063, /* U+0043: LATIN CAPITAL LETTER C */
1707 : [0x44] = 0x0064, /* U+0044: LATIN CAPITAL LETTER D */
1708 : [0x45] = 0x0065, /* U+0045: LATIN CAPITAL LETTER E */
1709 : [0x46] = 0x0066, /* U+0046: LATIN CAPITAL LETTER F */
1710 : [0x47] = 0x0067, /* U+0047: LATIN CAPITAL LETTER G */
1711 : [0x48] = 0x0068, /* U+0048: LATIN CAPITAL LETTER H */
1712 : [0x49] = 0x0069, /* U+0049: LATIN CAPITAL LETTER I */
1713 : [0x4A] = 0x006A, /* U+004A: LATIN CAPITAL LETTER J */
1714 : [0x4B] = 0x006B, /* U+004B: LATIN CAPITAL LETTER K */
1715 : [0x4C] = 0x006C, /* U+004C: LATIN CAPITAL LETTER L */
1716 : [0x4D] = 0x006D, /* U+004D: LATIN CAPITAL LETTER M */
1717 : [0x4E] = 0x006E, /* U+004E: LATIN CAPITAL LETTER N */
1718 : [0x4F] = 0x006F, /* U+004F: LATIN CAPITAL LETTER O */
1719 : [0x50] = 0x0070, /* U+0050: LATIN CAPITAL LETTER P */
1720 : [0x51] = 0x0071, /* U+0051: LATIN CAPITAL LETTER Q */
1721 : [0x52] = 0x0072, /* U+0052: LATIN CAPITAL LETTER R */
1722 : [0x53] = 0x0073, /* U+0053: LATIN CAPITAL LETTER S */
1723 : [0x54] = 0x0074, /* U+0054: LATIN CAPITAL LETTER T */
1724 : [0x55] = 0x0075, /* U+0055: LATIN CAPITAL LETTER U */
1725 : [0x56] = 0x0076, /* U+0056: LATIN CAPITAL LETTER V */
1726 : [0x57] = 0x0077, /* U+0057: LATIN CAPITAL LETTER W */
1727 : [0x58] = 0x0078, /* U+0058: LATIN CAPITAL LETTER X */
1728 : [0x59] = 0x0079, /* U+0059: LATIN CAPITAL LETTER Y */
1729 : [0x5A] = 0x007A, /* U+005A: LATIN CAPITAL LETTER Z */
1730 : [0x5B] = 0x005B, /* U+005B: LEFT SQUARE BRACKET */
1731 : [0x5C] = 0x005C, /* U+005C: REVERSE SOLIDUS */
1732 : [0x5D] = 0x005D, /* U+005D: RIGHT SQUARE BRACKET */
1733 : [0x5E] = 0x005E, /* U+005E: CIRCUMFLEX ACCENT */
1734 : [0x5F] = 0x005F, /* U+005F: LOW LINE */
1735 : [0x60] = 0x0060, /* U+0060: GRAVE ACCENT */
1736 : [0x61] = 0x0061, /* U+0061: LATIN SMALL LETTER A */
1737 : [0x62] = 0x0062, /* U+0062: LATIN SMALL LETTER B */
1738 : [0x63] = 0x0063, /* U+0063: LATIN SMALL LETTER C */
1739 : [0x64] = 0x0064, /* U+0064: LATIN SMALL LETTER D */
1740 : [0x65] = 0x0065, /* U+0065: LATIN SMALL LETTER E */
1741 : [0x66] = 0x0066, /* U+0066: LATIN SMALL LETTER F */
1742 : [0x67] = 0x0067, /* U+0067: LATIN SMALL LETTER G */
1743 : [0x68] = 0x0068, /* U+0068: LATIN SMALL LETTER H */
1744 : [0x69] = 0x0069, /* U+0069: LATIN SMALL LETTER I */
1745 : [0x6A] = 0x006A, /* U+006A: LATIN SMALL LETTER J */
1746 : [0x6B] = 0x006B, /* U+006B: LATIN SMALL LETTER K */
1747 : [0x6C] = 0x006C, /* U+006C: LATIN SMALL LETTER L */
1748 : [0x6D] = 0x006D, /* U+006D: LATIN SMALL LETTER M */
1749 : [0x6E] = 0x006E, /* U+006E: LATIN SMALL LETTER N */
1750 : [0x6F] = 0x006F, /* U+006F: LATIN SMALL LETTER O */
1751 : [0x70] = 0x0070, /* U+0070: LATIN SMALL LETTER P */
1752 : [0x71] = 0x0071, /* U+0071: LATIN SMALL LETTER Q */
1753 : [0x72] = 0x0072, /* U+0072: LATIN SMALL LETTER R */
1754 : [0x73] = 0x0073, /* U+0073: LATIN SMALL LETTER S */
1755 : [0x74] = 0x0074, /* U+0074: LATIN SMALL LETTER T */
1756 : [0x75] = 0x0075, /* U+0075: LATIN SMALL LETTER U */
1757 : [0x76] = 0x0076, /* U+0076: LATIN SMALL LETTER V */
1758 : [0x77] = 0x0077, /* U+0077: LATIN SMALL LETTER W */
1759 : [0x78] = 0x0078, /* U+0078: LATIN SMALL LETTER X */
1760 : [0x79] = 0x0079, /* U+0079: LATIN SMALL LETTER Y */
1761 : [0x7A] = 0x007A, /* U+007A: LATIN SMALL LETTER Z */
1762 : [0x7B] = 0x007B, /* U+007B: LEFT CURLY BRACKET */
1763 : [0x7C] = 0x007C, /* U+007C: VERTICAL LINE */
1764 : [0x7D] = 0x007D, /* U+007D: RIGHT CURLY BRACKET */
1765 : [0x7E] = 0x007E, /* U+007E: TILDE */
1766 : [0x7F] = 0x007F, /* U+007F: <control> */
1767 : [0xC3] = 256 - 0x80, /* 303 ... */
1768 : [256+0x00] = 0x00E0, /* U+00C0: LATIN CAPITAL LETTER A WITH GRAVE */
1769 : [256+0x01] = 0x00E1, /* U+00C1: LATIN CAPITAL LETTER A WITH ACUTE */
1770 : [256+0x02] = 0x00E2, /* U+00C2: LATIN CAPITAL LETTER A WITH CIRCUMFLEX */
1771 : [256+0x03] = 0x00E3, /* U+00C3: LATIN CAPITAL LETTER A WITH TILDE */
1772 : [256+0x04] = 0x00E4, /* U+00C4: LATIN CAPITAL LETTER A WITH DIAERESIS */
1773 : [256+0x05] = 0x00E5, /* U+00C5: LATIN CAPITAL LETTER A WITH RING ABOVE */
1774 : [256+0x06] = 0x00E6, /* U+00C6: LATIN CAPITAL LETTER AE */
1775 : [256+0x07] = 0x00E7, /* U+00C7: LATIN CAPITAL LETTER C WITH CEDILLA */
1776 : [256+0x08] = 0x00E8, /* U+00C8: LATIN CAPITAL LETTER E WITH GRAVE */
1777 : [256+0x09] = 0x00E9, /* U+00C9: LATIN CAPITAL LETTER E WITH ACUTE */
1778 : [256+0x0A] = 0x00EA, /* U+00CA: LATIN CAPITAL LETTER E WITH CIRCUMFLEX */
1779 : [256+0x0B] = 0x00EB, /* U+00CB: LATIN CAPITAL LETTER E WITH DIAERESIS */
1780 : [256+0x0C] = 0x00EC, /* U+00CC: LATIN CAPITAL LETTER I WITH GRAVE */
1781 : [256+0x0D] = 0x00ED, /* U+00CD: LATIN CAPITAL LETTER I WITH ACUTE */
1782 : [256+0x0E] = 0x00EE, /* U+00CE: LATIN CAPITAL LETTER I WITH CIRCUMFLEX */
1783 : [256+0x0F] = 0x00EF, /* U+00CF: LATIN CAPITAL LETTER I WITH DIAERESIS */
1784 : [256+0x10] = 0x00F0, /* U+00D0: LATIN CAPITAL LETTER ETH */
1785 : [256+0x11] = 0x00F1, /* U+00D1: LATIN CAPITAL LETTER N WITH TILDE */
1786 : [256+0x12] = 0x00F2, /* U+00D2: LATIN CAPITAL LETTER O WITH GRAVE */
1787 : [256+0x13] = 0x00F3, /* U+00D3: LATIN CAPITAL LETTER O WITH ACUTE */
1788 : [256+0x14] = 0x00F4, /* U+00D4: LATIN CAPITAL LETTER O WITH CIRCUMFLEX */
1789 : [256+0x15] = 0x00F5, /* U+00D5: LATIN CAPITAL LETTER O WITH TILDE */
1790 : [256+0x16] = 0x00F6, /* U+00D6: LATIN CAPITAL LETTER O WITH DIAERESIS */
1791 : [256+0x18] = 0x00F8, /* U+00D8: LATIN CAPITAL LETTER O WITH STROKE */
1792 : [256+0x19] = 0x00F9, /* U+00D9: LATIN CAPITAL LETTER U WITH GRAVE */
1793 : [256+0x1A] = 0x00FA, /* U+00DA: LATIN CAPITAL LETTER U WITH ACUTE */
1794 : [256+0x1B] = 0x00FB, /* U+00DB: LATIN CAPITAL LETTER U WITH CIRCUMFLEX */
1795 : [256+0x1C] = 0x00FC, /* U+00DC: LATIN CAPITAL LETTER U WITH DIAERESIS */
1796 : [256+0x1D] = 0x00FD, /* U+00DD: LATIN CAPITAL LETTER Y WITH ACUTE */
1797 : [256+0x1E] = 0x00FE, /* U+00DE: LATIN CAPITAL LETTER THORN */
1798 : [0xC4] = 320 - 0x80, /* 304 ... */
1799 : [320+0x00] = 0x0101, /* U+0100: LATIN CAPITAL LETTER A WITH MACRON */
1800 : [320+0x02] = 0x0103, /* U+0102: LATIN CAPITAL LETTER A WITH BREVE */
1801 : [320+0x04] = 0x0105, /* U+0104: LATIN CAPITAL LETTER A WITH OGONEK */
1802 : [320+0x06] = 0x0107, /* U+0106: LATIN CAPITAL LETTER C WITH ACUTE */
1803 : [320+0x08] = 0x0109, /* U+0108: LATIN CAPITAL LETTER C WITH CIRCUMFLEX */
1804 : [320+0x0A] = 0x010B, /* U+010A: LATIN CAPITAL LETTER C WITH DOT ABOVE */
1805 : [320+0x0C] = 0x010D, /* U+010C: LATIN CAPITAL LETTER C WITH CARON */
1806 : [320+0x0E] = 0x010F, /* U+010E: LATIN CAPITAL LETTER D WITH CARON */
1807 : [320+0x10] = 0x0111, /* U+0110: LATIN CAPITAL LETTER D WITH STROKE */
1808 : [320+0x12] = 0x0113, /* U+0112: LATIN CAPITAL LETTER E WITH MACRON */
1809 : [320+0x14] = 0x0115, /* U+0114: LATIN CAPITAL LETTER E WITH BREVE */
1810 : [320+0x16] = 0x0117, /* U+0116: LATIN CAPITAL LETTER E WITH DOT ABOVE */
1811 : [320+0x18] = 0x0119, /* U+0118: LATIN CAPITAL LETTER E WITH OGONEK */
1812 : [320+0x1A] = 0x011B, /* U+011A: LATIN CAPITAL LETTER E WITH CARON */
1813 : [320+0x1C] = 0x011D, /* U+011C: LATIN CAPITAL LETTER G WITH CIRCUMFLEX */
1814 : [320+0x1E] = 0x011F, /* U+011E: LATIN CAPITAL LETTER G WITH BREVE */
1815 : [320+0x20] = 0x0121, /* U+0120: LATIN CAPITAL LETTER G WITH DOT ABOVE */
1816 : [320+0x22] = 0x0123, /* U+0122: LATIN CAPITAL LETTER G WITH CEDILLA */
1817 : [320+0x24] = 0x0125, /* U+0124: LATIN CAPITAL LETTER H WITH CIRCUMFLEX */
1818 : [320+0x26] = 0x0127, /* U+0126: LATIN CAPITAL LETTER H WITH STROKE */
1819 : [320+0x28] = 0x0129, /* U+0128: LATIN CAPITAL LETTER I WITH TILDE */
1820 : [320+0x2A] = 0x012B, /* U+012A: LATIN CAPITAL LETTER I WITH MACRON */
1821 : [320+0x2C] = 0x012D, /* U+012C: LATIN CAPITAL LETTER I WITH BREVE */
1822 : [320+0x2E] = 0x012F, /* U+012E: LATIN CAPITAL LETTER I WITH OGONEK */
1823 : [320+0x30] = 0x0069, /* U+0130: LATIN CAPITAL LETTER I WITH DOT ABOVE */
1824 : [320+0x32] = 0x0133, /* U+0132: LATIN CAPITAL LIGATURE IJ */
1825 : [320+0x34] = 0x0135, /* U+0134: LATIN CAPITAL LETTER J WITH CIRCUMFLEX */
1826 : [320+0x36] = 0x0137, /* U+0136: LATIN CAPITAL LETTER K WITH CEDILLA */
1827 : [320+0x39] = 0x013A, /* U+0139: LATIN CAPITAL LETTER L WITH ACUTE */
1828 : [320+0x3B] = 0x013C, /* U+013B: LATIN CAPITAL LETTER L WITH CEDILLA */
1829 : [320+0x3D] = 0x013E, /* U+013D: LATIN CAPITAL LETTER L WITH CARON */
1830 : [320+0x3F] = 0x0140, /* U+013F: LATIN CAPITAL LETTER L WITH MIDDLE DOT */
1831 : [0xC5] = 384 - 0x80, /* 305 ... */
1832 : [384+0x01] = 0x0142, /* U+0141: LATIN CAPITAL LETTER L WITH STROKE */
1833 : [384+0x03] = 0x0144, /* U+0143: LATIN CAPITAL LETTER N WITH ACUTE */
1834 : [384+0x05] = 0x0146, /* U+0145: LATIN CAPITAL LETTER N WITH CEDILLA */
1835 : [384+0x07] = 0x0148, /* U+0147: LATIN CAPITAL LETTER N WITH CARON */
1836 : [384+0x0A] = 0x014B, /* U+014A: LATIN CAPITAL LETTER ENG */
1837 : [384+0x0C] = 0x014D, /* U+014C: LATIN CAPITAL LETTER O WITH MACRON */
1838 : [384+0x0E] = 0x014F, /* U+014E: LATIN CAPITAL LETTER O WITH BREVE */
1839 : [384+0x10] = 0x0151, /* U+0150: LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */
1840 : [384+0x12] = 0x0153, /* U+0152: LATIN CAPITAL LIGATURE OE */
1841 : [384+0x14] = 0x0155, /* U+0154: LATIN CAPITAL LETTER R WITH ACUTE */
1842 : [384+0x16] = 0x0157, /* U+0156: LATIN CAPITAL LETTER R WITH CEDILLA */
1843 : [384+0x18] = 0x0159, /* U+0158: LATIN CAPITAL LETTER R WITH CARON */
1844 : [384+0x1A] = 0x015B, /* U+015A: LATIN CAPITAL LETTER S WITH ACUTE */
1845 : [384+0x1C] = 0x015D, /* U+015C: LATIN CAPITAL LETTER S WITH CIRCUMFLEX */
1846 : [384+0x1E] = 0x015F, /* U+015E: LATIN CAPITAL LETTER S WITH CEDILLA */
1847 : [384+0x20] = 0x0161, /* U+0160: LATIN CAPITAL LETTER S WITH CARON */
1848 : [384+0x22] = 0x0163, /* U+0162: LATIN CAPITAL LETTER T WITH CEDILLA */
1849 : [384+0x24] = 0x0165, /* U+0164: LATIN CAPITAL LETTER T WITH CARON */
1850 : [384+0x26] = 0x0167, /* U+0166: LATIN CAPITAL LETTER T WITH STROKE */
1851 : [384+0x28] = 0x0169, /* U+0168: LATIN CAPITAL LETTER U WITH TILDE */
1852 : [384+0x2A] = 0x016B, /* U+016A: LATIN CAPITAL LETTER U WITH MACRON */
1853 : [384+0x2C] = 0x016D, /* U+016C: LATIN CAPITAL LETTER U WITH BREVE */
1854 : [384+0x2E] = 0x016F, /* U+016E: LATIN CAPITAL LETTER U WITH RING ABOVE */
1855 : [384+0x30] = 0x0171, /* U+0170: LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */
1856 : [384+0x32] = 0x0173, /* U+0172: LATIN CAPITAL LETTER U WITH OGONEK */
1857 : [384+0x34] = 0x0175, /* U+0174: LATIN CAPITAL LETTER W WITH CIRCUMFLEX */
1858 : [384+0x36] = 0x0177, /* U+0176: LATIN CAPITAL LETTER Y WITH CIRCUMFLEX */
1859 : [384+0x38] = 0x00FF, /* U+0178: LATIN CAPITAL LETTER Y WITH DIAERESIS */
1860 : [384+0x39] = 0x017A, /* U+0179: LATIN CAPITAL LETTER Z WITH ACUTE */
1861 : [384+0x3B] = 0x017C, /* U+017B: LATIN CAPITAL LETTER Z WITH DOT ABOVE */
1862 : [384+0x3D] = 0x017E, /* U+017D: LATIN CAPITAL LETTER Z WITH CARON */
1863 : [0xC6] = 448 - 0x80, /* 306 ... */
1864 : [448+0x01] = 0x0253, /* U+0181: LATIN CAPITAL LETTER B WITH HOOK */
1865 : [448+0x02] = 0x0183, /* U+0182: LATIN CAPITAL LETTER B WITH TOPBAR */
1866 : [448+0x04] = 0x0185, /* U+0184: LATIN CAPITAL LETTER TONE SIX */
1867 : [448+0x06] = 0x0254, /* U+0186: LATIN CAPITAL LETTER OPEN O */
1868 : [448+0x07] = 0x0188, /* U+0187: LATIN CAPITAL LETTER C WITH HOOK */
1869 : [448+0x09] = 0x0256, /* U+0189: LATIN CAPITAL LETTER AFRICAN D */
1870 : [448+0x0A] = 0x0257, /* U+018A: LATIN CAPITAL LETTER D WITH HOOK */
1871 : [448+0x0B] = 0x018C, /* U+018B: LATIN CAPITAL LETTER D WITH TOPBAR */
1872 : [448+0x0E] = 0x01DD, /* U+018E: LATIN CAPITAL LETTER REVERSED E */
1873 : [448+0x0F] = 0x0259, /* U+018F: LATIN CAPITAL LETTER SCHWA */
1874 : [448+0x10] = 0x025B, /* U+0190: LATIN CAPITAL LETTER OPEN E */
1875 : [448+0x11] = 0x0192, /* U+0191: LATIN CAPITAL LETTER F WITH HOOK */
1876 : [448+0x13] = 0x0260, /* U+0193: LATIN CAPITAL LETTER G WITH HOOK */
1877 : [448+0x14] = 0x0263, /* U+0194: LATIN CAPITAL LETTER GAMMA */
1878 : [448+0x16] = 0x0269, /* U+0196: LATIN CAPITAL LETTER IOTA */
1879 : [448+0x17] = 0x0268, /* U+0197: LATIN CAPITAL LETTER I WITH STROKE */
1880 : [448+0x18] = 0x0199, /* U+0198: LATIN CAPITAL LETTER K WITH HOOK */
1881 : [448+0x1C] = 0x026F, /* U+019C: LATIN CAPITAL LETTER TURNED M */
1882 : [448+0x1D] = 0x0272, /* U+019D: LATIN CAPITAL LETTER N WITH LEFT HOOK */
1883 : [448+0x1F] = 0x0275, /* U+019F: LATIN CAPITAL LETTER O WITH MIDDLE TILDE */
1884 : [448+0x20] = 0x01A1, /* U+01A0: LATIN CAPITAL LETTER O WITH HORN */
1885 : [448+0x22] = 0x01A3, /* U+01A2: LATIN CAPITAL LETTER OI */
1886 : [448+0x24] = 0x01A5, /* U+01A4: LATIN CAPITAL LETTER P WITH HOOK */
1887 : [448+0x26] = 0x0280, /* U+01A6: LATIN LETTER YR */
1888 : [448+0x27] = 0x01A8, /* U+01A7: LATIN CAPITAL LETTER TONE TWO */
1889 : [448+0x29] = 0x0283, /* U+01A9: LATIN CAPITAL LETTER ESH */
1890 : [448+0x2C] = 0x01AD, /* U+01AC: LATIN CAPITAL LETTER T WITH HOOK */
1891 : [448+0x2E] = 0x0288, /* U+01AE: LATIN CAPITAL LETTER T WITH RETROFLEX HOOK */
1892 : [448+0x2F] = 0x01B0, /* U+01AF: LATIN CAPITAL LETTER U WITH HORN */
1893 : [448+0x31] = 0x028A, /* U+01B1: LATIN CAPITAL LETTER UPSILON */
1894 : [448+0x32] = 0x028B, /* U+01B2: LATIN CAPITAL LETTER V WITH HOOK */
1895 : [448+0x33] = 0x01B4, /* U+01B3: LATIN CAPITAL LETTER Y WITH HOOK */
1896 : [448+0x35] = 0x01B6, /* U+01B5: LATIN CAPITAL LETTER Z WITH STROKE */
1897 : [448+0x37] = 0x0292, /* U+01B7: LATIN CAPITAL LETTER EZH */
1898 : [448+0x38] = 0x01B9, /* U+01B8: LATIN CAPITAL LETTER EZH REVERSED */
1899 : [448+0x3C] = 0x01BD, /* U+01BC: LATIN CAPITAL LETTER TONE FIVE */
1900 : [0xC7] = 512 - 0x80, /* 307 ... */
1901 : [512+0x04] = 0x01C6, /* U+01C4: LATIN CAPITAL LETTER DZ WITH CARON */
1902 : [512+0x05] = 0x01C6, /* U+01C5: LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON */
1903 : [512+0x07] = 0x01C9, /* U+01C7: LATIN CAPITAL LETTER LJ */
1904 : [512+0x08] = 0x01C9, /* U+01C8: LATIN CAPITAL LETTER L WITH SMALL LETTER J */
1905 : [512+0x0A] = 0x01CC, /* U+01CA: LATIN CAPITAL LETTER NJ */
1906 : [512+0x0B] = 0x01CC, /* U+01CB: LATIN CAPITAL LETTER N WITH SMALL LETTER J */
1907 : [512+0x0D] = 0x01CE, /* U+01CD: LATIN CAPITAL LETTER A WITH CARON */
1908 : [512+0x0F] = 0x01D0, /* U+01CF: LATIN CAPITAL LETTER I WITH CARON */
1909 : [512+0x11] = 0x01D2, /* U+01D1: LATIN CAPITAL LETTER O WITH CARON */
1910 : [512+0x13] = 0x01D4, /* U+01D3: LATIN CAPITAL LETTER U WITH CARON */
1911 : [512+0x15] = 0x01D6, /* U+01D5: LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON */
1912 : [512+0x17] = 0x01D8, /* U+01D7: LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE */
1913 : [512+0x19] = 0x01DA, /* U+01D9: LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON */
1914 : [512+0x1B] = 0x01DC, /* U+01DB: LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE */
1915 : [512+0x1E] = 0x01DF, /* U+01DE: LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */
1916 : [512+0x20] = 0x01E1, /* U+01E0: LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON */
1917 : [512+0x22] = 0x01E3, /* U+01E2: LATIN CAPITAL LETTER AE WITH MACRON */
1918 : [512+0x24] = 0x01E5, /* U+01E4: LATIN CAPITAL LETTER G WITH STROKE */
1919 : [512+0x26] = 0x01E7, /* U+01E6: LATIN CAPITAL LETTER G WITH CARON */
1920 : [512+0x28] = 0x01E9, /* U+01E8: LATIN CAPITAL LETTER K WITH CARON */
1921 : [512+0x2A] = 0x01EB, /* U+01EA: LATIN CAPITAL LETTER O WITH OGONEK */
1922 : [512+0x2C] = 0x01ED, /* U+01EC: LATIN CAPITAL LETTER O WITH OGONEK AND MACRON */
1923 : [512+0x2E] = 0x01EF, /* U+01EE: LATIN CAPITAL LETTER EZH WITH CARON */
1924 : [512+0x31] = 0x01F3, /* U+01F1: LATIN CAPITAL LETTER DZ */
1925 : [512+0x32] = 0x01F3, /* U+01F2: LATIN CAPITAL LETTER D WITH SMALL LETTER Z */
1926 : [512+0x34] = 0x01F5, /* U+01F4: LATIN CAPITAL LETTER G WITH ACUTE */
1927 : [512+0x36] = 0x0195, /* U+01F6: LATIN CAPITAL LETTER HWAIR */
1928 : [512+0x37] = 0x01BF, /* U+01F7: LATIN CAPITAL LETTER WYNN */
1929 : [512+0x38] = 0x01F9, /* U+01F8: LATIN CAPITAL LETTER N WITH GRAVE */
1930 : [512+0x3A] = 0x01FB, /* U+01FA: LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE */
1931 : [512+0x3C] = 0x01FD, /* U+01FC: LATIN CAPITAL LETTER AE WITH ACUTE */
1932 : [512+0x3E] = 0x01FF, /* U+01FE: LATIN CAPITAL LETTER O WITH STROKE AND ACUTE */
1933 : [0xC8] = 576 - 0x80, /* 310 ... */
1934 : [576+0x00] = 0x0201, /* U+0200: LATIN CAPITAL LETTER A WITH DOUBLE GRAVE */
1935 : [576+0x02] = 0x0203, /* U+0202: LATIN CAPITAL LETTER A WITH INVERTED BREVE */
1936 : [576+0x04] = 0x0205, /* U+0204: LATIN CAPITAL LETTER E WITH DOUBLE GRAVE */
1937 : [576+0x06] = 0x0207, /* U+0206: LATIN CAPITAL LETTER E WITH INVERTED BREVE */
1938 : [576+0x08] = 0x0209, /* U+0208: LATIN CAPITAL LETTER I WITH DOUBLE GRAVE */
1939 : [576+0x0A] = 0x020B, /* U+020A: LATIN CAPITAL LETTER I WITH INVERTED BREVE */
1940 : [576+0x0C] = 0x020D, /* U+020C: LATIN CAPITAL LETTER O WITH DOUBLE GRAVE */
1941 : [576+0x0E] = 0x020F, /* U+020E: LATIN CAPITAL LETTER O WITH INVERTED BREVE */
1942 : [576+0x10] = 0x0211, /* U+0210: LATIN CAPITAL LETTER R WITH DOUBLE GRAVE */
1943 : [576+0x12] = 0x0213, /* U+0212: LATIN CAPITAL LETTER R WITH INVERTED BREVE */
1944 : [576+0x14] = 0x0215, /* U+0214: LATIN CAPITAL LETTER U WITH DOUBLE GRAVE */
1945 : [576+0x16] = 0x0217, /* U+0216: LATIN CAPITAL LETTER U WITH INVERTED BREVE */
1946 : [576+0x18] = 0x0219, /* U+0218: LATIN CAPITAL LETTER S WITH COMMA BELOW */
1947 : [576+0x1A] = 0x021B, /* U+021A: LATIN CAPITAL LETTER T WITH COMMA BELOW */
1948 : [576+0x1C] = 0x021D, /* U+021C: LATIN CAPITAL LETTER YOGH */
1949 : [576+0x1E] = 0x021F, /* U+021E: LATIN CAPITAL LETTER H WITH CARON */
1950 : [576+0x20] = 0x019E, /* U+0220: LATIN CAPITAL LETTER N WITH LONG RIGHT LEG */
1951 : [576+0x22] = 0x0223, /* U+0222: LATIN CAPITAL LETTER OU */
1952 : [576+0x24] = 0x0225, /* U+0224: LATIN CAPITAL LETTER Z WITH HOOK */
1953 : [576+0x26] = 0x0227, /* U+0226: LATIN CAPITAL LETTER A WITH DOT ABOVE */
1954 : [576+0x28] = 0x0229, /* U+0228: LATIN CAPITAL LETTER E WITH CEDILLA */
1955 : [576+0x2A] = 0x022B, /* U+022A: LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON */
1956 : [576+0x2C] = 0x022D, /* U+022C: LATIN CAPITAL LETTER O WITH TILDE AND MACRON */
1957 : [576+0x2E] = 0x022F, /* U+022E: LATIN CAPITAL LETTER O WITH DOT ABOVE */
1958 : [576+0x30] = 0x0231, /* U+0230: LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON */
1959 : [576+0x32] = 0x0233, /* U+0232: LATIN CAPITAL LETTER Y WITH MACRON */
1960 : [576+0x3A] = 0x2C65, /* U+023A: LATIN CAPITAL LETTER A WITH STROKE */
1961 : [576+0x3B] = 0x023C, /* U+023B: LATIN CAPITAL LETTER C WITH STROKE */
1962 : [576+0x3D] = 0x019A, /* U+023D: LATIN CAPITAL LETTER L WITH BAR */
1963 : [576+0x3E] = 0x2C66, /* U+023E: LATIN CAPITAL LETTER T WITH DIAGONAL STROKE */
1964 : [0xC9] = 640 - 0x80, /* 311 ... */
1965 : [640+0x01] = 0x0242, /* U+0241: LATIN CAPITAL LETTER GLOTTAL STOP */
1966 : [640+0x03] = 0x0180, /* U+0243: LATIN CAPITAL LETTER B WITH STROKE */
1967 : [640+0x04] = 0x0289, /* U+0244: LATIN CAPITAL LETTER U BAR */
1968 : [640+0x05] = 0x028C, /* U+0245: LATIN CAPITAL LETTER TURNED V */
1969 : [640+0x06] = 0x0247, /* U+0246: LATIN CAPITAL LETTER E WITH STROKE */
1970 : [640+0x08] = 0x0249, /* U+0248: LATIN CAPITAL LETTER J WITH STROKE */
1971 : [640+0x0A] = 0x024B, /* U+024A: LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL */
1972 : [640+0x0C] = 0x024D, /* U+024C: LATIN CAPITAL LETTER R WITH STROKE */
1973 : [640+0x0E] = 0x024F, /* U+024E: LATIN CAPITAL LETTER Y WITH STROKE */
1974 : [0xCD] = 704 - 0x80, /* 315 ... */
1975 : [704+0x30] = 0x0371, /* U+0370: GREEK CAPITAL LETTER HETA */
1976 : [704+0x32] = 0x0373, /* U+0372: GREEK CAPITAL LETTER ARCHAIC SAMPI */
1977 : [704+0x36] = 0x0377, /* U+0376: GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA */
1978 : [704+0x3F] = 0x03F3, /* U+037F: GREEK CAPITAL LETTER YOT */
1979 : [0xCE] = 768 - 0x80, /* 316 ... */
1980 : [768+0x06] = 0x03AC, /* U+0386: GREEK CAPITAL LETTER ALPHA WITH TONOS */
1981 : [768+0x08] = 0x03AD, /* U+0388: GREEK CAPITAL LETTER EPSILON WITH TONOS */
1982 : [768+0x09] = 0x03AE, /* U+0389: GREEK CAPITAL LETTER ETA WITH TONOS */
1983 : [768+0x0A] = 0x03AF, /* U+038A: GREEK CAPITAL LETTER IOTA WITH TONOS */
1984 : [768+0x0C] = 0x03CC, /* U+038C: GREEK CAPITAL LETTER OMICRON WITH TONOS */
1985 : [768+0x0E] = 0x03CD, /* U+038E: GREEK CAPITAL LETTER UPSILON WITH TONOS */
1986 : [768+0x0F] = 0x03CE, /* U+038F: GREEK CAPITAL LETTER OMEGA WITH TONOS */
1987 : [768+0x11] = 0x03B1, /* U+0391: GREEK CAPITAL LETTER ALPHA */
1988 : [768+0x12] = 0x03B2, /* U+0392: GREEK CAPITAL LETTER BETA */
1989 : [768+0x13] = 0x03B3, /* U+0393: GREEK CAPITAL LETTER GAMMA */
1990 : [768+0x14] = 0x03B4, /* U+0394: GREEK CAPITAL LETTER DELTA */
1991 : [768+0x15] = 0x03B5, /* U+0395: GREEK CAPITAL LETTER EPSILON */
1992 : [768+0x16] = 0x03B6, /* U+0396: GREEK CAPITAL LETTER ZETA */
1993 : [768+0x17] = 0x03B7, /* U+0397: GREEK CAPITAL LETTER ETA */
1994 : [768+0x18] = 0x03B8, /* U+0398: GREEK CAPITAL LETTER THETA */
1995 : [768+0x19] = 0x03B9, /* U+0399: GREEK CAPITAL LETTER IOTA */
1996 : [768+0x1A] = 0x03BA, /* U+039A: GREEK CAPITAL LETTER KAPPA */
1997 : [768+0x1B] = 0x03BB, /* U+039B: GREEK CAPITAL LETTER LAMDA */
1998 : [768+0x1C] = 0x03BC, /* U+039C: GREEK CAPITAL LETTER MU */
1999 : [768+0x1D] = 0x03BD, /* U+039D: GREEK CAPITAL LETTER NU */
2000 : [768+0x1E] = 0x03BE, /* U+039E: GREEK CAPITAL LETTER XI */
2001 : [768+0x1F] = 0x03BF, /* U+039F: GREEK CAPITAL LETTER OMICRON */
2002 : [768+0x20] = 0x03C0, /* U+03A0: GREEK CAPITAL LETTER PI */
2003 : [768+0x21] = 0x03C1, /* U+03A1: GREEK CAPITAL LETTER RHO */
2004 : [768+0x23] = 0x03C3, /* U+03A3: GREEK CAPITAL LETTER SIGMA */
2005 : [768+0x24] = 0x03C4, /* U+03A4: GREEK CAPITAL LETTER TAU */
2006 : [768+0x25] = 0x03C5, /* U+03A5: GREEK CAPITAL LETTER UPSILON */
2007 : [768+0x26] = 0x03C6, /* U+03A6: GREEK CAPITAL LETTER PHI */
2008 : [768+0x27] = 0x03C7, /* U+03A7: GREEK CAPITAL LETTER CHI */
2009 : [768+0x28] = 0x03C8, /* U+03A8: GREEK CAPITAL LETTER PSI */
2010 : [768+0x29] = 0x03C9, /* U+03A9: GREEK CAPITAL LETTER OMEGA */
2011 : [768+0x2A] = 0x03CA, /* U+03AA: GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */
2012 : [768+0x2B] = 0x03CB, /* U+03AB: GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */
2013 : [0xCF] = 832 - 0x80, /* 317 ... */
2014 : [832+0x0F] = 0x03D7, /* U+03CF: GREEK CAPITAL KAI SYMBOL */
2015 : [832+0x18] = 0x03D9, /* U+03D8: GREEK LETTER ARCHAIC KOPPA */
2016 : [832+0x1A] = 0x03DB, /* U+03DA: GREEK LETTER STIGMA */
2017 : [832+0x1C] = 0x03DD, /* U+03DC: GREEK LETTER DIGAMMA */
2018 : [832+0x1E] = 0x03DF, /* U+03DE: GREEK LETTER KOPPA */
2019 : [832+0x20] = 0x03E1, /* U+03E0: GREEK LETTER SAMPI */
2020 : [832+0x22] = 0x03E3, /* U+03E2: COPTIC CAPITAL LETTER SHEI */
2021 : [832+0x24] = 0x03E5, /* U+03E4: COPTIC CAPITAL LETTER FEI */
2022 : [832+0x26] = 0x03E7, /* U+03E6: COPTIC CAPITAL LETTER KHEI */
2023 : [832+0x28] = 0x03E9, /* U+03E8: COPTIC CAPITAL LETTER HORI */
2024 : [832+0x2A] = 0x03EB, /* U+03EA: COPTIC CAPITAL LETTER GANGIA */
2025 : [832+0x2C] = 0x03ED, /* U+03EC: COPTIC CAPITAL LETTER SHIMA */
2026 : [832+0x2E] = 0x03EF, /* U+03EE: COPTIC CAPITAL LETTER DEI */
2027 : [832+0x34] = 0x03B8, /* U+03F4: GREEK CAPITAL THETA SYMBOL */
2028 : [832+0x37] = 0x03F8, /* U+03F7: GREEK CAPITAL LETTER SHO */
2029 : [832+0x39] = 0x03F2, /* U+03F9: GREEK CAPITAL LUNATE SIGMA SYMBOL */
2030 : [832+0x3A] = 0x03FB, /* U+03FA: GREEK CAPITAL LETTER SAN */
2031 : [832+0x3D] = 0x037B, /* U+03FD: GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL */
2032 : [832+0x3E] = 0x037C, /* U+03FE: GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL */
2033 : [832+0x3F] = 0x037D, /* U+03FF: GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL */
2034 : [0xD0] = 896 - 0x80, /* 320 ... */
2035 : [896+0x00] = 0x0450, /* U+0400: CYRILLIC CAPITAL LETTER IE WITH GRAVE */
2036 : [896+0x01] = 0x0451, /* U+0401: CYRILLIC CAPITAL LETTER IO */
2037 : [896+0x02] = 0x0452, /* U+0402: CYRILLIC CAPITAL LETTER DJE */
2038 : [896+0x03] = 0x0453, /* U+0403: CYRILLIC CAPITAL LETTER GJE */
2039 : [896+0x04] = 0x0454, /* U+0404: CYRILLIC CAPITAL LETTER UKRAINIAN IE */
2040 : [896+0x05] = 0x0455, /* U+0405: CYRILLIC CAPITAL LETTER DZE */
2041 : [896+0x06] = 0x0456, /* U+0406: CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */
2042 : [896+0x07] = 0x0457, /* U+0407: CYRILLIC CAPITAL LETTER YI */
2043 : [896+0x08] = 0x0458, /* U+0408: CYRILLIC CAPITAL LETTER JE */
2044 : [896+0x09] = 0x0459, /* U+0409: CYRILLIC CAPITAL LETTER LJE */
2045 : [896+0x0A] = 0x045A, /* U+040A: CYRILLIC CAPITAL LETTER NJE */
2046 : [896+0x0B] = 0x045B, /* U+040B: CYRILLIC CAPITAL LETTER TSHE */
2047 : [896+0x0C] = 0x045C, /* U+040C: CYRILLIC CAPITAL LETTER KJE */
2048 : [896+0x0D] = 0x045D, /* U+040D: CYRILLIC CAPITAL LETTER I WITH GRAVE */
2049 : [896+0x0E] = 0x045E, /* U+040E: CYRILLIC CAPITAL LETTER SHORT U */
2050 : [896+0x0F] = 0x045F, /* U+040F: CYRILLIC CAPITAL LETTER DZHE */
2051 : [896+0x10] = 0x0430, /* U+0410: CYRILLIC CAPITAL LETTER A */
2052 : [896+0x11] = 0x0431, /* U+0411: CYRILLIC CAPITAL LETTER BE */
2053 : [896+0x12] = 0x0432, /* U+0412: CYRILLIC CAPITAL LETTER VE */
2054 : [896+0x13] = 0x0433, /* U+0413: CYRILLIC CAPITAL LETTER GHE */
2055 : [896+0x14] = 0x0434, /* U+0414: CYRILLIC CAPITAL LETTER DE */
2056 : [896+0x15] = 0x0435, /* U+0415: CYRILLIC CAPITAL LETTER IE */
2057 : [896+0x16] = 0x0436, /* U+0416: CYRILLIC CAPITAL LETTER ZHE */
2058 : [896+0x17] = 0x0437, /* U+0417: CYRILLIC CAPITAL LETTER ZE */
2059 : [896+0x18] = 0x0438, /* U+0418: CYRILLIC CAPITAL LETTER I */
2060 : [896+0x19] = 0x0439, /* U+0419: CYRILLIC CAPITAL LETTER SHORT I */
2061 : [896+0x1A] = 0x043A, /* U+041A: CYRILLIC CAPITAL LETTER KA */
2062 : [896+0x1B] = 0x043B, /* U+041B: CYRILLIC CAPITAL LETTER EL */
2063 : [896+0x1C] = 0x043C, /* U+041C: CYRILLIC CAPITAL LETTER EM */
2064 : [896+0x1D] = 0x043D, /* U+041D: CYRILLIC CAPITAL LETTER EN */
2065 : [896+0x1E] = 0x043E, /* U+041E: CYRILLIC CAPITAL LETTER O */
2066 : [896+0x1F] = 0x043F, /* U+041F: CYRILLIC CAPITAL LETTER PE */
2067 : [896+0x20] = 0x0440, /* U+0420: CYRILLIC CAPITAL LETTER ER */
2068 : [896+0x21] = 0x0441, /* U+0421: CYRILLIC CAPITAL LETTER ES */
2069 : [896+0x22] = 0x0442, /* U+0422: CYRILLIC CAPITAL LETTER TE */
2070 : [896+0x23] = 0x0443, /* U+0423: CYRILLIC CAPITAL LETTER U */
2071 : [896+0x24] = 0x0444, /* U+0424: CYRILLIC CAPITAL LETTER EF */
2072 : [896+0x25] = 0x0445, /* U+0425: CYRILLIC CAPITAL LETTER HA */
2073 : [896+0x26] = 0x0446, /* U+0426: CYRILLIC CAPITAL LETTER TSE */
2074 : [896+0x27] = 0x0447, /* U+0427: CYRILLIC CAPITAL LETTER CHE */
2075 : [896+0x28] = 0x0448, /* U+0428: CYRILLIC CAPITAL LETTER SHA */
2076 : [896+0x29] = 0x0449, /* U+0429: CYRILLIC CAPITAL LETTER SHCHA */
2077 : [896+0x2A] = 0x044A, /* U+042A: CYRILLIC CAPITAL LETTER HARD SIGN */
2078 : [896+0x2B] = 0x044B, /* U+042B: CYRILLIC CAPITAL LETTER YERU */
2079 : [896+0x2C] = 0x044C, /* U+042C: CYRILLIC CAPITAL LETTER SOFT SIGN */
2080 : [896+0x2D] = 0x044D, /* U+042D: CYRILLIC CAPITAL LETTER E */
2081 : [896+0x2E] = 0x044E, /* U+042E: CYRILLIC CAPITAL LETTER YU */
2082 : [896+0x2F] = 0x044F, /* U+042F: CYRILLIC CAPITAL LETTER YA */
2083 : [0xD1] = 960 - 0x80, /* 321 ... */
2084 : [960+0x20] = 0x0461, /* U+0460: CYRILLIC CAPITAL LETTER OMEGA */
2085 : [960+0x22] = 0x0463, /* U+0462: CYRILLIC CAPITAL LETTER YAT */
2086 : [960+0x24] = 0x0465, /* U+0464: CYRILLIC CAPITAL LETTER IOTIFIED E */
2087 : [960+0x26] = 0x0467, /* U+0466: CYRILLIC CAPITAL LETTER LITTLE YUS */
2088 : [960+0x28] = 0x0469, /* U+0468: CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS */
2089 : [960+0x2A] = 0x046B, /* U+046A: CYRILLIC CAPITAL LETTER BIG YUS */
2090 : [960+0x2C] = 0x046D, /* U+046C: CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS */
2091 : [960+0x2E] = 0x046F, /* U+046E: CYRILLIC CAPITAL LETTER KSI */
2092 : [960+0x30] = 0x0471, /* U+0470: CYRILLIC CAPITAL LETTER PSI */
2093 : [960+0x32] = 0x0473, /* U+0472: CYRILLIC CAPITAL LETTER FITA */
2094 : [960+0x34] = 0x0475, /* U+0474: CYRILLIC CAPITAL LETTER IZHITSA */
2095 : [960+0x36] = 0x0477, /* U+0476: CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT */
2096 : [960+0x38] = 0x0479, /* U+0478: CYRILLIC CAPITAL LETTER UK */
2097 : [960+0x3A] = 0x047B, /* U+047A: CYRILLIC CAPITAL LETTER ROUND OMEGA */
2098 : [960+0x3C] = 0x047D, /* U+047C: CYRILLIC CAPITAL LETTER OMEGA WITH TITLO */
2099 : [960+0x3E] = 0x047F, /* U+047E: CYRILLIC CAPITAL LETTER OT */
2100 : [0xD2] = 1024 - 0x80, /* 322 ... */
2101 : [1024+0x00] = 0x0481, /* U+0480: CYRILLIC CAPITAL LETTER KOPPA */
2102 : [1024+0x0A] = 0x048B, /* U+048A: CYRILLIC CAPITAL LETTER SHORT I WITH TAIL */
2103 : [1024+0x0C] = 0x048D, /* U+048C: CYRILLIC CAPITAL LETTER SEMISOFT SIGN */
2104 : [1024+0x0E] = 0x048F, /* U+048E: CYRILLIC CAPITAL LETTER ER WITH TICK */
2105 : [1024+0x10] = 0x0491, /* U+0490: CYRILLIC CAPITAL LETTER GHE WITH UPTURN */
2106 : [1024+0x12] = 0x0493, /* U+0492: CYRILLIC CAPITAL LETTER GHE WITH STROKE */
2107 : [1024+0x14] = 0x0495, /* U+0494: CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK */
2108 : [1024+0x16] = 0x0497, /* U+0496: CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER */
2109 : [1024+0x18] = 0x0499, /* U+0498: CYRILLIC CAPITAL LETTER ZE WITH DESCENDER */
2110 : [1024+0x1A] = 0x049B, /* U+049A: CYRILLIC CAPITAL LETTER KA WITH DESCENDER */
2111 : [1024+0x1C] = 0x049D, /* U+049C: CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE */
2112 : [1024+0x1E] = 0x049F, /* U+049E: CYRILLIC CAPITAL LETTER KA WITH STROKE */
2113 : [1024+0x20] = 0x04A1, /* U+04A0: CYRILLIC CAPITAL LETTER BASHKIR KA */
2114 : [1024+0x22] = 0x04A3, /* U+04A2: CYRILLIC CAPITAL LETTER EN WITH DESCENDER */
2115 : [1024+0x24] = 0x04A5, /* U+04A4: CYRILLIC CAPITAL LIGATURE EN GHE */
2116 : [1024+0x26] = 0x04A7, /* U+04A6: CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK */
2117 : [1024+0x28] = 0x04A9, /* U+04A8: CYRILLIC CAPITAL LETTER ABKHASIAN HA */
2118 : [1024+0x2A] = 0x04AB, /* U+04AA: CYRILLIC CAPITAL LETTER ES WITH DESCENDER */
2119 : [1024+0x2C] = 0x04AD, /* U+04AC: CYRILLIC CAPITAL LETTER TE WITH DESCENDER */
2120 : [1024+0x2E] = 0x04AF, /* U+04AE: CYRILLIC CAPITAL LETTER STRAIGHT U */
2121 : [1024+0x30] = 0x04B1, /* U+04B0: CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE */
2122 : [1024+0x32] = 0x04B3, /* U+04B2: CYRILLIC CAPITAL LETTER HA WITH DESCENDER */
2123 : [1024+0x34] = 0x04B5, /* U+04B4: CYRILLIC CAPITAL LIGATURE TE TSE */
2124 : [1024+0x36] = 0x04B7, /* U+04B6: CYRILLIC CAPITAL LETTER CHE WITH DESCENDER */
2125 : [1024+0x38] = 0x04B9, /* U+04B8: CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE */
2126 : [1024+0x3A] = 0x04BB, /* U+04BA: CYRILLIC CAPITAL LETTER SHHA */
2127 : [1024+0x3C] = 0x04BD, /* U+04BC: CYRILLIC CAPITAL LETTER ABKHASIAN CHE */
2128 : [1024+0x3E] = 0x04BF, /* U+04BE: CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER */
2129 : [0xD3] = 1088 - 0x80, /* 323 ... */
2130 : [1088+0x00] = 0x04CF, /* U+04C0: CYRILLIC LETTER PALOCHKA */
2131 : [1088+0x01] = 0x04C2, /* U+04C1: CYRILLIC CAPITAL LETTER ZHE WITH BREVE */
2132 : [1088+0x03] = 0x04C4, /* U+04C3: CYRILLIC CAPITAL LETTER KA WITH HOOK */
2133 : [1088+0x05] = 0x04C6, /* U+04C5: CYRILLIC CAPITAL LETTER EL WITH TAIL */
2134 : [1088+0x07] = 0x04C8, /* U+04C7: CYRILLIC CAPITAL LETTER EN WITH HOOK */
2135 : [1088+0x09] = 0x04CA, /* U+04C9: CYRILLIC CAPITAL LETTER EN WITH TAIL */
2136 : [1088+0x0B] = 0x04CC, /* U+04CB: CYRILLIC CAPITAL LETTER KHAKASSIAN CHE */
2137 : [1088+0x0D] = 0x04CE, /* U+04CD: CYRILLIC CAPITAL LETTER EM WITH TAIL */
2138 : [1088+0x10] = 0x04D1, /* U+04D0: CYRILLIC CAPITAL LETTER A WITH BREVE */
2139 : [1088+0x12] = 0x04D3, /* U+04D2: CYRILLIC CAPITAL LETTER A WITH DIAERESIS */
2140 : [1088+0x14] = 0x04D5, /* U+04D4: CYRILLIC CAPITAL LIGATURE A IE */
2141 : [1088+0x16] = 0x04D7, /* U+04D6: CYRILLIC CAPITAL LETTER IE WITH BREVE */
2142 : [1088+0x18] = 0x04D9, /* U+04D8: CYRILLIC CAPITAL LETTER SCHWA */
2143 : [1088+0x1A] = 0x04DB, /* U+04DA: CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS */
2144 : [1088+0x1C] = 0x04DD, /* U+04DC: CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS */
2145 : [1088+0x1E] = 0x04DF, /* U+04DE: CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS */
2146 : [1088+0x20] = 0x04E1, /* U+04E0: CYRILLIC CAPITAL LETTER ABKHASIAN DZE */
2147 : [1088+0x22] = 0x04E3, /* U+04E2: CYRILLIC CAPITAL LETTER I WITH MACRON */
2148 : [1088+0x24] = 0x04E5, /* U+04E4: CYRILLIC CAPITAL LETTER I WITH DIAERESIS */
2149 : [1088+0x26] = 0x04E7, /* U+04E6: CYRILLIC CAPITAL LETTER O WITH DIAERESIS */
2150 : [1088+0x28] = 0x04E9, /* U+04E8: CYRILLIC CAPITAL LETTER BARRED O */
2151 : [1088+0x2A] = 0x04EB, /* U+04EA: CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS */
2152 : [1088+0x2C] = 0x04ED, /* U+04EC: CYRILLIC CAPITAL LETTER E WITH DIAERESIS */
2153 : [1088+0x2E] = 0x04EF, /* U+04EE: CYRILLIC CAPITAL LETTER U WITH MACRON */
2154 : [1088+0x30] = 0x04F1, /* U+04F0: CYRILLIC CAPITAL LETTER U WITH DIAERESIS */
2155 : [1088+0x32] = 0x04F3, /* U+04F2: CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE */
2156 : [1088+0x34] = 0x04F5, /* U+04F4: CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS */
2157 : [1088+0x36] = 0x04F7, /* U+04F6: CYRILLIC CAPITAL LETTER GHE WITH DESCENDER */
2158 : [1088+0x38] = 0x04F9, /* U+04F8: CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS */
2159 : [1088+0x3A] = 0x04FB, /* U+04FA: CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK */
2160 : [1088+0x3C] = 0x04FD, /* U+04FC: CYRILLIC CAPITAL LETTER HA WITH HOOK */
2161 : [1088+0x3E] = 0x04FF, /* U+04FE: CYRILLIC CAPITAL LETTER HA WITH STROKE */
2162 : [0xD4] = 1152 - 0x80, /* 324 ... */
2163 : [1152+0x00] = 0x0501, /* U+0500: CYRILLIC CAPITAL LETTER KOMI DE */
2164 : [1152+0x02] = 0x0503, /* U+0502: CYRILLIC CAPITAL LETTER KOMI DJE */
2165 : [1152+0x04] = 0x0505, /* U+0504: CYRILLIC CAPITAL LETTER KOMI ZJE */
2166 : [1152+0x06] = 0x0507, /* U+0506: CYRILLIC CAPITAL LETTER KOMI DZJE */
2167 : [1152+0x08] = 0x0509, /* U+0508: CYRILLIC CAPITAL LETTER KOMI LJE */
2168 : [1152+0x0A] = 0x050B, /* U+050A: CYRILLIC CAPITAL LETTER KOMI NJE */
2169 : [1152+0x0C] = 0x050D, /* U+050C: CYRILLIC CAPITAL LETTER KOMI SJE */
2170 : [1152+0x0E] = 0x050F, /* U+050E: CYRILLIC CAPITAL LETTER KOMI TJE */
2171 : [1152+0x10] = 0x0511, /* U+0510: CYRILLIC CAPITAL LETTER REVERSED ZE */
2172 : [1152+0x12] = 0x0513, /* U+0512: CYRILLIC CAPITAL LETTER EL WITH HOOK */
2173 : [1152+0x14] = 0x0515, /* U+0514: CYRILLIC CAPITAL LETTER LHA */
2174 : [1152+0x16] = 0x0517, /* U+0516: CYRILLIC CAPITAL LETTER RHA */
2175 : [1152+0x18] = 0x0519, /* U+0518: CYRILLIC CAPITAL LETTER YAE */
2176 : [1152+0x1A] = 0x051B, /* U+051A: CYRILLIC CAPITAL LETTER QA */
2177 : [1152+0x1C] = 0x051D, /* U+051C: CYRILLIC CAPITAL LETTER WE */
2178 : [1152+0x1E] = 0x051F, /* U+051E: CYRILLIC CAPITAL LETTER ALEUT KA */
2179 : [1152+0x20] = 0x0521, /* U+0520: CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK */
2180 : [1152+0x22] = 0x0523, /* U+0522: CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK */
2181 : [1152+0x24] = 0x0525, /* U+0524: CYRILLIC CAPITAL LETTER PE WITH DESCENDER */
2182 : [1152+0x26] = 0x0527, /* U+0526: CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER */
2183 : [1152+0x28] = 0x0529, /* U+0528: CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK */
2184 : [1152+0x2A] = 0x052B, /* U+052A: CYRILLIC CAPITAL LETTER DZZHE */
2185 : [1152+0x2C] = 0x052D, /* U+052C: CYRILLIC CAPITAL LETTER DCHE */
2186 : [1152+0x2E] = 0x052F, /* U+052E: CYRILLIC CAPITAL LETTER EL WITH DESCENDER */
2187 : [1152+0x31] = 0x0561, /* U+0531: ARMENIAN CAPITAL LETTER AYB */
2188 : [1152+0x32] = 0x0562, /* U+0532: ARMENIAN CAPITAL LETTER BEN */
2189 : [1152+0x33] = 0x0563, /* U+0533: ARMENIAN CAPITAL LETTER GIM */
2190 : [1152+0x34] = 0x0564, /* U+0534: ARMENIAN CAPITAL LETTER DA */
2191 : [1152+0x35] = 0x0565, /* U+0535: ARMENIAN CAPITAL LETTER ECH */
2192 : [1152+0x36] = 0x0566, /* U+0536: ARMENIAN CAPITAL LETTER ZA */
2193 : [1152+0x37] = 0x0567, /* U+0537: ARMENIAN CAPITAL LETTER EH */
2194 : [1152+0x38] = 0x0568, /* U+0538: ARMENIAN CAPITAL LETTER ET */
2195 : [1152+0x39] = 0x0569, /* U+0539: ARMENIAN CAPITAL LETTER TO */
2196 : [1152+0x3A] = 0x056A, /* U+053A: ARMENIAN CAPITAL LETTER ZHE */
2197 : [1152+0x3B] = 0x056B, /* U+053B: ARMENIAN CAPITAL LETTER INI */
2198 : [1152+0x3C] = 0x056C, /* U+053C: ARMENIAN CAPITAL LETTER LIWN */
2199 : [1152+0x3D] = 0x056D, /* U+053D: ARMENIAN CAPITAL LETTER XEH */
2200 : [1152+0x3E] = 0x056E, /* U+053E: ARMENIAN CAPITAL LETTER CA */
2201 : [1152+0x3F] = 0x056F, /* U+053F: ARMENIAN CAPITAL LETTER KEN */
2202 : [0xD5] = 1216 - 0x80, /* 325 ... */
2203 : [1216+0x00] = 0x0570, /* U+0540: ARMENIAN CAPITAL LETTER HO */
2204 : [1216+0x01] = 0x0571, /* U+0541: ARMENIAN CAPITAL LETTER JA */
2205 : [1216+0x02] = 0x0572, /* U+0542: ARMENIAN CAPITAL LETTER GHAD */
2206 : [1216+0x03] = 0x0573, /* U+0543: ARMENIAN CAPITAL LETTER CHEH */
2207 : [1216+0x04] = 0x0574, /* U+0544: ARMENIAN CAPITAL LETTER MEN */
2208 : [1216+0x05] = 0x0575, /* U+0545: ARMENIAN CAPITAL LETTER YI */
2209 : [1216+0x06] = 0x0576, /* U+0546: ARMENIAN CAPITAL LETTER NOW */
2210 : [1216+0x07] = 0x0577, /* U+0547: ARMENIAN CAPITAL LETTER SHA */
2211 : [1216+0x08] = 0x0578, /* U+0548: ARMENIAN CAPITAL LETTER VO */
2212 : [1216+0x09] = 0x0579, /* U+0549: ARMENIAN CAPITAL LETTER CHA */
2213 : [1216+0x0A] = 0x057A, /* U+054A: ARMENIAN CAPITAL LETTER PEH */
2214 : [1216+0x0B] = 0x057B, /* U+054B: ARMENIAN CAPITAL LETTER JHEH */
2215 : [1216+0x0C] = 0x057C, /* U+054C: ARMENIAN CAPITAL LETTER RA */
2216 : [1216+0x0D] = 0x057D, /* U+054D: ARMENIAN CAPITAL LETTER SEH */
2217 : [1216+0x0E] = 0x057E, /* U+054E: ARMENIAN CAPITAL LETTER VEW */
2218 : [1216+0x0F] = 0x057F, /* U+054F: ARMENIAN CAPITAL LETTER TIWN */
2219 : [1216+0x10] = 0x0580, /* U+0550: ARMENIAN CAPITAL LETTER REH */
2220 : [1216+0x11] = 0x0581, /* U+0551: ARMENIAN CAPITAL LETTER CO */
2221 : [1216+0x12] = 0x0582, /* U+0552: ARMENIAN CAPITAL LETTER YIWN */
2222 : [1216+0x13] = 0x0583, /* U+0553: ARMENIAN CAPITAL LETTER PIWR */
2223 : [1216+0x14] = 0x0584, /* U+0554: ARMENIAN CAPITAL LETTER KEH */
2224 : [1216+0x15] = 0x0585, /* U+0555: ARMENIAN CAPITAL LETTER OH */
2225 : [1216+0x16] = 0x0586, /* U+0556: ARMENIAN CAPITAL LETTER FEH */
2226 : [0xE1] = 1280 - 0x80, /* 341 ... */
2227 : [1280+0x02] = 1344 - 0x80, /* 341 202 ... */
2228 : [1344+0x20] = 0x2D00, /* U+10A0: GEORGIAN CAPITAL LETTER AN */
2229 : [1344+0x21] = 0x2D01, /* U+10A1: GEORGIAN CAPITAL LETTER BAN */
2230 : [1344+0x22] = 0x2D02, /* U+10A2: GEORGIAN CAPITAL LETTER GAN */
2231 : [1344+0x23] = 0x2D03, /* U+10A3: GEORGIAN CAPITAL LETTER DON */
2232 : [1344+0x24] = 0x2D04, /* U+10A4: GEORGIAN CAPITAL LETTER EN */
2233 : [1344+0x25] = 0x2D05, /* U+10A5: GEORGIAN CAPITAL LETTER VIN */
2234 : [1344+0x26] = 0x2D06, /* U+10A6: GEORGIAN CAPITAL LETTER ZEN */
2235 : [1344+0x27] = 0x2D07, /* U+10A7: GEORGIAN CAPITAL LETTER TAN */
2236 : [1344+0x28] = 0x2D08, /* U+10A8: GEORGIAN CAPITAL LETTER IN */
2237 : [1344+0x29] = 0x2D09, /* U+10A9: GEORGIAN CAPITAL LETTER KAN */
2238 : [1344+0x2A] = 0x2D0A, /* U+10AA: GEORGIAN CAPITAL LETTER LAS */
2239 : [1344+0x2B] = 0x2D0B, /* U+10AB: GEORGIAN CAPITAL LETTER MAN */
2240 : [1344+0x2C] = 0x2D0C, /* U+10AC: GEORGIAN CAPITAL LETTER NAR */
2241 : [1344+0x2D] = 0x2D0D, /* U+10AD: GEORGIAN CAPITAL LETTER ON */
2242 : [1344+0x2E] = 0x2D0E, /* U+10AE: GEORGIAN CAPITAL LETTER PAR */
2243 : [1344+0x2F] = 0x2D0F, /* U+10AF: GEORGIAN CAPITAL LETTER ZHAR */
2244 : [1344+0x30] = 0x2D10, /* U+10B0: GEORGIAN CAPITAL LETTER RAE */
2245 : [1344+0x31] = 0x2D11, /* U+10B1: GEORGIAN CAPITAL LETTER SAN */
2246 : [1344+0x32] = 0x2D12, /* U+10B2: GEORGIAN CAPITAL LETTER TAR */
2247 : [1344+0x33] = 0x2D13, /* U+10B3: GEORGIAN CAPITAL LETTER UN */
2248 : [1344+0x34] = 0x2D14, /* U+10B4: GEORGIAN CAPITAL LETTER PHAR */
2249 : [1344+0x35] = 0x2D15, /* U+10B5: GEORGIAN CAPITAL LETTER KHAR */
2250 : [1344+0x36] = 0x2D16, /* U+10B6: GEORGIAN CAPITAL LETTER GHAN */
2251 : [1344+0x37] = 0x2D17, /* U+10B7: GEORGIAN CAPITAL LETTER QAR */
2252 : [1344+0x38] = 0x2D18, /* U+10B8: GEORGIAN CAPITAL LETTER SHIN */
2253 : [1344+0x39] = 0x2D19, /* U+10B9: GEORGIAN CAPITAL LETTER CHIN */
2254 : [1344+0x3A] = 0x2D1A, /* U+10BA: GEORGIAN CAPITAL LETTER CAN */
2255 : [1344+0x3B] = 0x2D1B, /* U+10BB: GEORGIAN CAPITAL LETTER JIL */
2256 : [1344+0x3C] = 0x2D1C, /* U+10BC: GEORGIAN CAPITAL LETTER CIL */
2257 : [1344+0x3D] = 0x2D1D, /* U+10BD: GEORGIAN CAPITAL LETTER CHAR */
2258 : [1344+0x3E] = 0x2D1E, /* U+10BE: GEORGIAN CAPITAL LETTER XAN */
2259 : [1344+0x3F] = 0x2D1F, /* U+10BF: GEORGIAN CAPITAL LETTER JHAN */
2260 : [1280+0x03] = 1408 - 0x80, /* 341 203 ... */
2261 : [1408+0x00] = 0x2D20, /* U+10C0: GEORGIAN CAPITAL LETTER HAE */
2262 : [1408+0x01] = 0x2D21, /* U+10C1: GEORGIAN CAPITAL LETTER HE */
2263 : [1408+0x02] = 0x2D22, /* U+10C2: GEORGIAN CAPITAL LETTER HIE */
2264 : [1408+0x03] = 0x2D23, /* U+10C3: GEORGIAN CAPITAL LETTER WE */
2265 : [1408+0x04] = 0x2D24, /* U+10C4: GEORGIAN CAPITAL LETTER HAR */
2266 : [1408+0x05] = 0x2D25, /* U+10C5: GEORGIAN CAPITAL LETTER HOE */
2267 : [1408+0x07] = 0x2D27, /* U+10C7: GEORGIAN CAPITAL LETTER YN */
2268 : [1408+0x0D] = 0x2D2D, /* U+10CD: GEORGIAN CAPITAL LETTER AEN */
2269 : [1280+0x0E] = 1472 - 0x80, /* 341 216 ... */
2270 : [1472+0x20] = 0xAB70, /* U+13A0: CHEROKEE LETTER A */
2271 : [1472+0x21] = 0xAB71, /* U+13A1: CHEROKEE LETTER E */
2272 : [1472+0x22] = 0xAB72, /* U+13A2: CHEROKEE LETTER I */
2273 : [1472+0x23] = 0xAB73, /* U+13A3: CHEROKEE LETTER O */
2274 : [1472+0x24] = 0xAB74, /* U+13A4: CHEROKEE LETTER U */
2275 : [1472+0x25] = 0xAB75, /* U+13A5: CHEROKEE LETTER V */
2276 : [1472+0x26] = 0xAB76, /* U+13A6: CHEROKEE LETTER GA */
2277 : [1472+0x27] = 0xAB77, /* U+13A7: CHEROKEE LETTER KA */
2278 : [1472+0x28] = 0xAB78, /* U+13A8: CHEROKEE LETTER GE */
2279 : [1472+0x29] = 0xAB79, /* U+13A9: CHEROKEE LETTER GI */
2280 : [1472+0x2A] = 0xAB7A, /* U+13AA: CHEROKEE LETTER GO */
2281 : [1472+0x2B] = 0xAB7B, /* U+13AB: CHEROKEE LETTER GU */
2282 : [1472+0x2C] = 0xAB7C, /* U+13AC: CHEROKEE LETTER GV */
2283 : [1472+0x2D] = 0xAB7D, /* U+13AD: CHEROKEE LETTER HA */
2284 : [1472+0x2E] = 0xAB7E, /* U+13AE: CHEROKEE LETTER HE */
2285 : [1472+0x2F] = 0xAB7F, /* U+13AF: CHEROKEE LETTER HI */
2286 : [1472+0x30] = 0xAB80, /* U+13B0: CHEROKEE LETTER HO */
2287 : [1472+0x31] = 0xAB81, /* U+13B1: CHEROKEE LETTER HU */
2288 : [1472+0x32] = 0xAB82, /* U+13B2: CHEROKEE LETTER HV */
2289 : [1472+0x33] = 0xAB83, /* U+13B3: CHEROKEE LETTER LA */
2290 : [1472+0x34] = 0xAB84, /* U+13B4: CHEROKEE LETTER LE */
2291 : [1472+0x35] = 0xAB85, /* U+13B5: CHEROKEE LETTER LI */
2292 : [1472+0x36] = 0xAB86, /* U+13B6: CHEROKEE LETTER LO */
2293 : [1472+0x37] = 0xAB87, /* U+13B7: CHEROKEE LETTER LU */
2294 : [1472+0x38] = 0xAB88, /* U+13B8: CHEROKEE LETTER LV */
2295 : [1472+0x39] = 0xAB89, /* U+13B9: CHEROKEE LETTER MA */
2296 : [1472+0x3A] = 0xAB8A, /* U+13BA: CHEROKEE LETTER ME */
2297 : [1472+0x3B] = 0xAB8B, /* U+13BB: CHEROKEE LETTER MI */
2298 : [1472+0x3C] = 0xAB8C, /* U+13BC: CHEROKEE LETTER MO */
2299 : [1472+0x3D] = 0xAB8D, /* U+13BD: CHEROKEE LETTER MU */
2300 : [1472+0x3E] = 0xAB8E, /* U+13BE: CHEROKEE LETTER NA */
2301 : [1472+0x3F] = 0xAB8F, /* U+13BF: CHEROKEE LETTER HNA */
2302 : [1280+0x0F] = 1536 - 0x80, /* 341 217 ... */
2303 : [1536+0x00] = 0xAB90, /* U+13C0: CHEROKEE LETTER NAH */
2304 : [1536+0x01] = 0xAB91, /* U+13C1: CHEROKEE LETTER NE */
2305 : [1536+0x02] = 0xAB92, /* U+13C2: CHEROKEE LETTER NI */
2306 : [1536+0x03] = 0xAB93, /* U+13C3: CHEROKEE LETTER NO */
2307 : [1536+0x04] = 0xAB94, /* U+13C4: CHEROKEE LETTER NU */
2308 : [1536+0x05] = 0xAB95, /* U+13C5: CHEROKEE LETTER NV */
2309 : [1536+0x06] = 0xAB96, /* U+13C6: CHEROKEE LETTER QUA */
2310 : [1536+0x07] = 0xAB97, /* U+13C7: CHEROKEE LETTER QUE */
2311 : [1536+0x08] = 0xAB98, /* U+13C8: CHEROKEE LETTER QUI */
2312 : [1536+0x09] = 0xAB99, /* U+13C9: CHEROKEE LETTER QUO */
2313 : [1536+0x0A] = 0xAB9A, /* U+13CA: CHEROKEE LETTER QUU */
2314 : [1536+0x0B] = 0xAB9B, /* U+13CB: CHEROKEE LETTER QUV */
2315 : [1536+0x0C] = 0xAB9C, /* U+13CC: CHEROKEE LETTER SA */
2316 : [1536+0x0D] = 0xAB9D, /* U+13CD: CHEROKEE LETTER S */
2317 : [1536+0x0E] = 0xAB9E, /* U+13CE: CHEROKEE LETTER SE */
2318 : [1536+0x0F] = 0xAB9F, /* U+13CF: CHEROKEE LETTER SI */
2319 : [1536+0x10] = 0xABA0, /* U+13D0: CHEROKEE LETTER SO */
2320 : [1536+0x11] = 0xABA1, /* U+13D1: CHEROKEE LETTER SU */
2321 : [1536+0x12] = 0xABA2, /* U+13D2: CHEROKEE LETTER SV */
2322 : [1536+0x13] = 0xABA3, /* U+13D3: CHEROKEE LETTER DA */
2323 : [1536+0x14] = 0xABA4, /* U+13D4: CHEROKEE LETTER TA */
2324 : [1536+0x15] = 0xABA5, /* U+13D5: CHEROKEE LETTER DE */
2325 : [1536+0x16] = 0xABA6, /* U+13D6: CHEROKEE LETTER TE */
2326 : [1536+0x17] = 0xABA7, /* U+13D7: CHEROKEE LETTER DI */
2327 : [1536+0x18] = 0xABA8, /* U+13D8: CHEROKEE LETTER TI */
2328 : [1536+0x19] = 0xABA9, /* U+13D9: CHEROKEE LETTER DO */
2329 : [1536+0x1A] = 0xABAA, /* U+13DA: CHEROKEE LETTER DU */
2330 : [1536+0x1B] = 0xABAB, /* U+13DB: CHEROKEE LETTER DV */
2331 : [1536+0x1C] = 0xABAC, /* U+13DC: CHEROKEE LETTER DLA */
2332 : [1536+0x1D] = 0xABAD, /* U+13DD: CHEROKEE LETTER TLA */
2333 : [1536+0x1E] = 0xABAE, /* U+13DE: CHEROKEE LETTER TLE */
2334 : [1536+0x1F] = 0xABAF, /* U+13DF: CHEROKEE LETTER TLI */
2335 : [1536+0x20] = 0xABB0, /* U+13E0: CHEROKEE LETTER TLO */
2336 : [1536+0x21] = 0xABB1, /* U+13E1: CHEROKEE LETTER TLU */
2337 : [1536+0x22] = 0xABB2, /* U+13E2: CHEROKEE LETTER TLV */
2338 : [1536+0x23] = 0xABB3, /* U+13E3: CHEROKEE LETTER TSA */
2339 : [1536+0x24] = 0xABB4, /* U+13E4: CHEROKEE LETTER TSE */
2340 : [1536+0x25] = 0xABB5, /* U+13E5: CHEROKEE LETTER TSI */
2341 : [1536+0x26] = 0xABB6, /* U+13E6: CHEROKEE LETTER TSO */
2342 : [1536+0x27] = 0xABB7, /* U+13E7: CHEROKEE LETTER TSU */
2343 : [1536+0x28] = 0xABB8, /* U+13E8: CHEROKEE LETTER TSV */
2344 : [1536+0x29] = 0xABB9, /* U+13E9: CHEROKEE LETTER WA */
2345 : [1536+0x2A] = 0xABBA, /* U+13EA: CHEROKEE LETTER WE */
2346 : [1536+0x2B] = 0xABBB, /* U+13EB: CHEROKEE LETTER WI */
2347 : [1536+0x2C] = 0xABBC, /* U+13EC: CHEROKEE LETTER WO */
2348 : [1536+0x2D] = 0xABBD, /* U+13ED: CHEROKEE LETTER WU */
2349 : [1536+0x2E] = 0xABBE, /* U+13EE: CHEROKEE LETTER WV */
2350 : [1536+0x2F] = 0xABBF, /* U+13EF: CHEROKEE LETTER YA */
2351 : [1536+0x30] = 0x13F8, /* U+13F0: CHEROKEE LETTER YE */
2352 : [1536+0x31] = 0x13F9, /* U+13F1: CHEROKEE LETTER YI */
2353 : [1536+0x32] = 0x13FA, /* U+13F2: CHEROKEE LETTER YO */
2354 : [1536+0x33] = 0x13FB, /* U+13F3: CHEROKEE LETTER YU */
2355 : [1536+0x34] = 0x13FC, /* U+13F4: CHEROKEE LETTER YV */
2356 : [1536+0x35] = 0x13FD, /* U+13F5: CHEROKEE LETTER MV */
2357 : [1280+0x32] = 1600 - 0x80, /* 341 262 ... */
2358 : [1600+0x10] = 0x10D0, /* U+1C90: GEORGIAN MTAVRULI CAPITAL LETTER AN */
2359 : [1600+0x11] = 0x10D1, /* U+1C91: GEORGIAN MTAVRULI CAPITAL LETTER BAN */
2360 : [1600+0x12] = 0x10D2, /* U+1C92: GEORGIAN MTAVRULI CAPITAL LETTER GAN */
2361 : [1600+0x13] = 0x10D3, /* U+1C93: GEORGIAN MTAVRULI CAPITAL LETTER DON */
2362 : [1600+0x14] = 0x10D4, /* U+1C94: GEORGIAN MTAVRULI CAPITAL LETTER EN */
2363 : [1600+0x15] = 0x10D5, /* U+1C95: GEORGIAN MTAVRULI CAPITAL LETTER VIN */
2364 : [1600+0x16] = 0x10D6, /* U+1C96: GEORGIAN MTAVRULI CAPITAL LETTER ZEN */
2365 : [1600+0x17] = 0x10D7, /* U+1C97: GEORGIAN MTAVRULI CAPITAL LETTER TAN */
2366 : [1600+0x18] = 0x10D8, /* U+1C98: GEORGIAN MTAVRULI CAPITAL LETTER IN */
2367 : [1600+0x19] = 0x10D9, /* U+1C99: GEORGIAN MTAVRULI CAPITAL LETTER KAN */
2368 : [1600+0x1A] = 0x10DA, /* U+1C9A: GEORGIAN MTAVRULI CAPITAL LETTER LAS */
2369 : [1600+0x1B] = 0x10DB, /* U+1C9B: GEORGIAN MTAVRULI CAPITAL LETTER MAN */
2370 : [1600+0x1C] = 0x10DC, /* U+1C9C: GEORGIAN MTAVRULI CAPITAL LETTER NAR */
2371 : [1600+0x1D] = 0x10DD, /* U+1C9D: GEORGIAN MTAVRULI CAPITAL LETTER ON */
2372 : [1600+0x1E] = 0x10DE, /* U+1C9E: GEORGIAN MTAVRULI CAPITAL LETTER PAR */
2373 : [1600+0x1F] = 0x10DF, /* U+1C9F: GEORGIAN MTAVRULI CAPITAL LETTER ZHAR */
2374 : [1600+0x20] = 0x10E0, /* U+1CA0: GEORGIAN MTAVRULI CAPITAL LETTER RAE */
2375 : [1600+0x21] = 0x10E1, /* U+1CA1: GEORGIAN MTAVRULI CAPITAL LETTER SAN */
2376 : [1600+0x22] = 0x10E2, /* U+1CA2: GEORGIAN MTAVRULI CAPITAL LETTER TAR */
2377 : [1600+0x23] = 0x10E3, /* U+1CA3: GEORGIAN MTAVRULI CAPITAL LETTER UN */
2378 : [1600+0x24] = 0x10E4, /* U+1CA4: GEORGIAN MTAVRULI CAPITAL LETTER PHAR */
2379 : [1600+0x25] = 0x10E5, /* U+1CA5: GEORGIAN MTAVRULI CAPITAL LETTER KHAR */
2380 : [1600+0x26] = 0x10E6, /* U+1CA6: GEORGIAN MTAVRULI CAPITAL LETTER GHAN */
2381 : [1600+0x27] = 0x10E7, /* U+1CA7: GEORGIAN MTAVRULI CAPITAL LETTER QAR */
2382 : [1600+0x28] = 0x10E8, /* U+1CA8: GEORGIAN MTAVRULI CAPITAL LETTER SHIN */
2383 : [1600+0x29] = 0x10E9, /* U+1CA9: GEORGIAN MTAVRULI CAPITAL LETTER CHIN */
2384 : [1600+0x2A] = 0x10EA, /* U+1CAA: GEORGIAN MTAVRULI CAPITAL LETTER CAN */
2385 : [1600+0x2B] = 0x10EB, /* U+1CAB: GEORGIAN MTAVRULI CAPITAL LETTER JIL */
2386 : [1600+0x2C] = 0x10EC, /* U+1CAC: GEORGIAN MTAVRULI CAPITAL LETTER CIL */
2387 : [1600+0x2D] = 0x10ED, /* U+1CAD: GEORGIAN MTAVRULI CAPITAL LETTER CHAR */
2388 : [1600+0x2E] = 0x10EE, /* U+1CAE: GEORGIAN MTAVRULI CAPITAL LETTER XAN */
2389 : [1600+0x2F] = 0x10EF, /* U+1CAF: GEORGIAN MTAVRULI CAPITAL LETTER JHAN */
2390 : [1600+0x30] = 0x10F0, /* U+1CB0: GEORGIAN MTAVRULI CAPITAL LETTER HAE */
2391 : [1600+0x31] = 0x10F1, /* U+1CB1: GEORGIAN MTAVRULI CAPITAL LETTER HE */
2392 : [1600+0x32] = 0x10F2, /* U+1CB2: GEORGIAN MTAVRULI CAPITAL LETTER HIE */
2393 : [1600+0x33] = 0x10F3, /* U+1CB3: GEORGIAN MTAVRULI CAPITAL LETTER WE */
2394 : [1600+0x34] = 0x10F4, /* U+1CB4: GEORGIAN MTAVRULI CAPITAL LETTER HAR */
2395 : [1600+0x35] = 0x10F5, /* U+1CB5: GEORGIAN MTAVRULI CAPITAL LETTER HOE */
2396 : [1600+0x36] = 0x10F6, /* U+1CB6: GEORGIAN MTAVRULI CAPITAL LETTER FI */
2397 : [1600+0x37] = 0x10F7, /* U+1CB7: GEORGIAN MTAVRULI CAPITAL LETTER YN */
2398 : [1600+0x38] = 0x10F8, /* U+1CB8: GEORGIAN MTAVRULI CAPITAL LETTER ELIFI */
2399 : [1600+0x39] = 0x10F9, /* U+1CB9: GEORGIAN MTAVRULI CAPITAL LETTER TURNED GAN */
2400 : [1600+0x3A] = 0x10FA, /* U+1CBA: GEORGIAN MTAVRULI CAPITAL LETTER AIN */
2401 : [1600+0x3D] = 0x10FD, /* U+1CBD: GEORGIAN MTAVRULI CAPITAL LETTER AEN */
2402 : [1600+0x3E] = 0x10FE, /* U+1CBE: GEORGIAN MTAVRULI CAPITAL LETTER HARD SIGN */
2403 : [1600+0x3F] = 0x10FF, /* U+1CBF: GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN */
2404 : [1280+0x38] = 1664 - 0x80, /* 341 270 ... */
2405 : [1664+0x00] = 0x1E01, /* U+1E00: LATIN CAPITAL LETTER A WITH RING BELOW */
2406 : [1664+0x02] = 0x1E03, /* U+1E02: LATIN CAPITAL LETTER B WITH DOT ABOVE */
2407 : [1664+0x04] = 0x1E05, /* U+1E04: LATIN CAPITAL LETTER B WITH DOT BELOW */
2408 : [1664+0x06] = 0x1E07, /* U+1E06: LATIN CAPITAL LETTER B WITH LINE BELOW */
2409 : [1664+0x08] = 0x1E09, /* U+1E08: LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE */
2410 : [1664+0x0A] = 0x1E0B, /* U+1E0A: LATIN CAPITAL LETTER D WITH DOT ABOVE */
2411 : [1664+0x0C] = 0x1E0D, /* U+1E0C: LATIN CAPITAL LETTER D WITH DOT BELOW */
2412 : [1664+0x0E] = 0x1E0F, /* U+1E0E: LATIN CAPITAL LETTER D WITH LINE BELOW */
2413 : [1664+0x10] = 0x1E11, /* U+1E10: LATIN CAPITAL LETTER D WITH CEDILLA */
2414 : [1664+0x12] = 0x1E13, /* U+1E12: LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW */
2415 : [1664+0x14] = 0x1E15, /* U+1E14: LATIN CAPITAL LETTER E WITH MACRON AND GRAVE */
2416 : [1664+0x16] = 0x1E17, /* U+1E16: LATIN CAPITAL LETTER E WITH MACRON AND ACUTE */
2417 : [1664+0x18] = 0x1E19, /* U+1E18: LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW */
2418 : [1664+0x1A] = 0x1E1B, /* U+1E1A: LATIN CAPITAL LETTER E WITH TILDE BELOW */
2419 : [1664+0x1C] = 0x1E1D, /* U+1E1C: LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE */
2420 : [1664+0x1E] = 0x1E1F, /* U+1E1E: LATIN CAPITAL LETTER F WITH DOT ABOVE */
2421 : [1664+0x20] = 0x1E21, /* U+1E20: LATIN CAPITAL LETTER G WITH MACRON */
2422 : [1664+0x22] = 0x1E23, /* U+1E22: LATIN CAPITAL LETTER H WITH DOT ABOVE */
2423 : [1664+0x24] = 0x1E25, /* U+1E24: LATIN CAPITAL LETTER H WITH DOT BELOW */
2424 : [1664+0x26] = 0x1E27, /* U+1E26: LATIN CAPITAL LETTER H WITH DIAERESIS */
2425 : [1664+0x28] = 0x1E29, /* U+1E28: LATIN CAPITAL LETTER H WITH CEDILLA */
2426 : [1664+0x2A] = 0x1E2B, /* U+1E2A: LATIN CAPITAL LETTER H WITH BREVE BELOW */
2427 : [1664+0x2C] = 0x1E2D, /* U+1E2C: LATIN CAPITAL LETTER I WITH TILDE BELOW */
2428 : [1664+0x2E] = 0x1E2F, /* U+1E2E: LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE */
2429 : [1664+0x30] = 0x1E31, /* U+1E30: LATIN CAPITAL LETTER K WITH ACUTE */
2430 : [1664+0x32] = 0x1E33, /* U+1E32: LATIN CAPITAL LETTER K WITH DOT BELOW */
2431 : [1664+0x34] = 0x1E35, /* U+1E34: LATIN CAPITAL LETTER K WITH LINE BELOW */
2432 : [1664+0x36] = 0x1E37, /* U+1E36: LATIN CAPITAL LETTER L WITH DOT BELOW */
2433 : [1664+0x38] = 0x1E39, /* U+1E38: LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON */
2434 : [1664+0x3A] = 0x1E3B, /* U+1E3A: LATIN CAPITAL LETTER L WITH LINE BELOW */
2435 : [1664+0x3C] = 0x1E3D, /* U+1E3C: LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW */
2436 : [1664+0x3E] = 0x1E3F, /* U+1E3E: LATIN CAPITAL LETTER M WITH ACUTE */
2437 : [1280+0x39] = 1728 - 0x80, /* 341 271 ... */
2438 : [1728+0x00] = 0x1E41, /* U+1E40: LATIN CAPITAL LETTER M WITH DOT ABOVE */
2439 : [1728+0x02] = 0x1E43, /* U+1E42: LATIN CAPITAL LETTER M WITH DOT BELOW */
2440 : [1728+0x04] = 0x1E45, /* U+1E44: LATIN CAPITAL LETTER N WITH DOT ABOVE */
2441 : [1728+0x06] = 0x1E47, /* U+1E46: LATIN CAPITAL LETTER N WITH DOT BELOW */
2442 : [1728+0x08] = 0x1E49, /* U+1E48: LATIN CAPITAL LETTER N WITH LINE BELOW */
2443 : [1728+0x0A] = 0x1E4B, /* U+1E4A: LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW */
2444 : [1728+0x0C] = 0x1E4D, /* U+1E4C: LATIN CAPITAL LETTER O WITH TILDE AND ACUTE */
2445 : [1728+0x0E] = 0x1E4F, /* U+1E4E: LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS */
2446 : [1728+0x10] = 0x1E51, /* U+1E50: LATIN CAPITAL LETTER O WITH MACRON AND GRAVE */
2447 : [1728+0x12] = 0x1E53, /* U+1E52: LATIN CAPITAL LETTER O WITH MACRON AND ACUTE */
2448 : [1728+0x14] = 0x1E55, /* U+1E54: LATIN CAPITAL LETTER P WITH ACUTE */
2449 : [1728+0x16] = 0x1E57, /* U+1E56: LATIN CAPITAL LETTER P WITH DOT ABOVE */
2450 : [1728+0x18] = 0x1E59, /* U+1E58: LATIN CAPITAL LETTER R WITH DOT ABOVE */
2451 : [1728+0x1A] = 0x1E5B, /* U+1E5A: LATIN CAPITAL LETTER R WITH DOT BELOW */
2452 : [1728+0x1C] = 0x1E5D, /* U+1E5C: LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON */
2453 : [1728+0x1E] = 0x1E5F, /* U+1E5E: LATIN CAPITAL LETTER R WITH LINE BELOW */
2454 : [1728+0x20] = 0x1E61, /* U+1E60: LATIN CAPITAL LETTER S WITH DOT ABOVE */
2455 : [1728+0x22] = 0x1E63, /* U+1E62: LATIN CAPITAL LETTER S WITH DOT BELOW */
2456 : [1728+0x24] = 0x1E65, /* U+1E64: LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE */
2457 : [1728+0x26] = 0x1E67, /* U+1E66: LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE */
2458 : [1728+0x28] = 0x1E69, /* U+1E68: LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE */
2459 : [1728+0x2A] = 0x1E6B, /* U+1E6A: LATIN CAPITAL LETTER T WITH DOT ABOVE */
2460 : [1728+0x2C] = 0x1E6D, /* U+1E6C: LATIN CAPITAL LETTER T WITH DOT BELOW */
2461 : [1728+0x2E] = 0x1E6F, /* U+1E6E: LATIN CAPITAL LETTER T WITH LINE BELOW */
2462 : [1728+0x30] = 0x1E71, /* U+1E70: LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW */
2463 : [1728+0x32] = 0x1E73, /* U+1E72: LATIN CAPITAL LETTER U WITH DIAERESIS BELOW */
2464 : [1728+0x34] = 0x1E75, /* U+1E74: LATIN CAPITAL LETTER U WITH TILDE BELOW */
2465 : [1728+0x36] = 0x1E77, /* U+1E76: LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW */
2466 : [1728+0x38] = 0x1E79, /* U+1E78: LATIN CAPITAL LETTER U WITH TILDE AND ACUTE */
2467 : [1728+0x3A] = 0x1E7B, /* U+1E7A: LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS */
2468 : [1728+0x3C] = 0x1E7D, /* U+1E7C: LATIN CAPITAL LETTER V WITH TILDE */
2469 : [1728+0x3E] = 0x1E7F, /* U+1E7E: LATIN CAPITAL LETTER V WITH DOT BELOW */
2470 : [1280+0x3A] = 1792 - 0x80, /* 341 272 ... */
2471 : [1792+0x00] = 0x1E81, /* U+1E80: LATIN CAPITAL LETTER W WITH GRAVE */
2472 : [1792+0x02] = 0x1E83, /* U+1E82: LATIN CAPITAL LETTER W WITH ACUTE */
2473 : [1792+0x04] = 0x1E85, /* U+1E84: LATIN CAPITAL LETTER W WITH DIAERESIS */
2474 : [1792+0x06] = 0x1E87, /* U+1E86: LATIN CAPITAL LETTER W WITH DOT ABOVE */
2475 : [1792+0x08] = 0x1E89, /* U+1E88: LATIN CAPITAL LETTER W WITH DOT BELOW */
2476 : [1792+0x0A] = 0x1E8B, /* U+1E8A: LATIN CAPITAL LETTER X WITH DOT ABOVE */
2477 : [1792+0x0C] = 0x1E8D, /* U+1E8C: LATIN CAPITAL LETTER X WITH DIAERESIS */
2478 : [1792+0x0E] = 0x1E8F, /* U+1E8E: LATIN CAPITAL LETTER Y WITH DOT ABOVE */
2479 : [1792+0x10] = 0x1E91, /* U+1E90: LATIN CAPITAL LETTER Z WITH CIRCUMFLEX */
2480 : [1792+0x12] = 0x1E93, /* U+1E92: LATIN CAPITAL LETTER Z WITH DOT BELOW */
2481 : [1792+0x14] = 0x1E95, /* U+1E94: LATIN CAPITAL LETTER Z WITH LINE BELOW */
2482 : [1792+0x1E] = 0x00DF, /* U+1E9E: LATIN CAPITAL LETTER SHARP S */
2483 : [1792+0x20] = 0x1EA1, /* U+1EA0: LATIN CAPITAL LETTER A WITH DOT BELOW */
2484 : [1792+0x22] = 0x1EA3, /* U+1EA2: LATIN CAPITAL LETTER A WITH HOOK ABOVE */
2485 : [1792+0x24] = 0x1EA5, /* U+1EA4: LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE */
2486 : [1792+0x26] = 0x1EA7, /* U+1EA6: LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE */
2487 : [1792+0x28] = 0x1EA9, /* U+1EA8: LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE */
2488 : [1792+0x2A] = 0x1EAB, /* U+1EAA: LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE */
2489 : [1792+0x2C] = 0x1EAD, /* U+1EAC: LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW */
2490 : [1792+0x2E] = 0x1EAF, /* U+1EAE: LATIN CAPITAL LETTER A WITH BREVE AND ACUTE */
2491 : [1792+0x30] = 0x1EB1, /* U+1EB0: LATIN CAPITAL LETTER A WITH BREVE AND GRAVE */
2492 : [1792+0x32] = 0x1EB3, /* U+1EB2: LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE */
2493 : [1792+0x34] = 0x1EB5, /* U+1EB4: LATIN CAPITAL LETTER A WITH BREVE AND TILDE */
2494 : [1792+0x36] = 0x1EB7, /* U+1EB6: LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW */
2495 : [1792+0x38] = 0x1EB9, /* U+1EB8: LATIN CAPITAL LETTER E WITH DOT BELOW */
2496 : [1792+0x3A] = 0x1EBB, /* U+1EBA: LATIN CAPITAL LETTER E WITH HOOK ABOVE */
2497 : [1792+0x3C] = 0x1EBD, /* U+1EBC: LATIN CAPITAL LETTER E WITH TILDE */
2498 : [1792+0x3E] = 0x1EBF, /* U+1EBE: LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE */
2499 : [1280+0x3B] = 1856 - 0x80, /* 341 273 ... */
2500 : [1856+0x00] = 0x1EC1, /* U+1EC0: LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE */
2501 : [1856+0x02] = 0x1EC3, /* U+1EC2: LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE */
2502 : [1856+0x04] = 0x1EC5, /* U+1EC4: LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE */
2503 : [1856+0x06] = 0x1EC7, /* U+1EC6: LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW */
2504 : [1856+0x08] = 0x1EC9, /* U+1EC8: LATIN CAPITAL LETTER I WITH HOOK ABOVE */
2505 : [1856+0x0A] = 0x1ECB, /* U+1ECA: LATIN CAPITAL LETTER I WITH DOT BELOW */
2506 : [1856+0x0C] = 0x1ECD, /* U+1ECC: LATIN CAPITAL LETTER O WITH DOT BELOW */
2507 : [1856+0x0E] = 0x1ECF, /* U+1ECE: LATIN CAPITAL LETTER O WITH HOOK ABOVE */
2508 : [1856+0x10] = 0x1ED1, /* U+1ED0: LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE */
2509 : [1856+0x12] = 0x1ED3, /* U+1ED2: LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE */
2510 : [1856+0x14] = 0x1ED5, /* U+1ED4: LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE */
2511 : [1856+0x16] = 0x1ED7, /* U+1ED6: LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE */
2512 : [1856+0x18] = 0x1ED9, /* U+1ED8: LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW */
2513 : [1856+0x1A] = 0x1EDB, /* U+1EDA: LATIN CAPITAL LETTER O WITH HORN AND ACUTE */
2514 : [1856+0x1C] = 0x1EDD, /* U+1EDC: LATIN CAPITAL LETTER O WITH HORN AND GRAVE */
2515 : [1856+0x1E] = 0x1EDF, /* U+1EDE: LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE */
2516 : [1856+0x20] = 0x1EE1, /* U+1EE0: LATIN CAPITAL LETTER O WITH HORN AND TILDE */
2517 : [1856+0x22] = 0x1EE3, /* U+1EE2: LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW */
2518 : [1856+0x24] = 0x1EE5, /* U+1EE4: LATIN CAPITAL LETTER U WITH DOT BELOW */
2519 : [1856+0x26] = 0x1EE7, /* U+1EE6: LATIN CAPITAL LETTER U WITH HOOK ABOVE */
2520 : [1856+0x28] = 0x1EE9, /* U+1EE8: LATIN CAPITAL LETTER U WITH HORN AND ACUTE */
2521 : [1856+0x2A] = 0x1EEB, /* U+1EEA: LATIN CAPITAL LETTER U WITH HORN AND GRAVE */
2522 : [1856+0x2C] = 0x1EED, /* U+1EEC: LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE */
2523 : [1856+0x2E] = 0x1EEF, /* U+1EEE: LATIN CAPITAL LETTER U WITH HORN AND TILDE */
2524 : [1856+0x30] = 0x1EF1, /* U+1EF0: LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW */
2525 : [1856+0x32] = 0x1EF3, /* U+1EF2: LATIN CAPITAL LETTER Y WITH GRAVE */
2526 : [1856+0x34] = 0x1EF5, /* U+1EF4: LATIN CAPITAL LETTER Y WITH DOT BELOW */
2527 : [1856+0x36] = 0x1EF7, /* U+1EF6: LATIN CAPITAL LETTER Y WITH HOOK ABOVE */
2528 : [1856+0x38] = 0x1EF9, /* U+1EF8: LATIN CAPITAL LETTER Y WITH TILDE */
2529 : [1856+0x3A] = 0x1EFB, /* U+1EFA: LATIN CAPITAL LETTER MIDDLE-WELSH LL */
2530 : [1856+0x3C] = 0x1EFD, /* U+1EFC: LATIN CAPITAL LETTER MIDDLE-WELSH V */
2531 : [1856+0x3E] = 0x1EFF, /* U+1EFE: LATIN CAPITAL LETTER Y WITH LOOP */
2532 : [1280+0x3C] = 1920 - 0x80, /* 341 274 ... */
2533 : [1920+0x08] = 0x1F00, /* U+1F08: GREEK CAPITAL LETTER ALPHA WITH PSILI */
2534 : [1920+0x09] = 0x1F01, /* U+1F09: GREEK CAPITAL LETTER ALPHA WITH DASIA */
2535 : [1920+0x0A] = 0x1F02, /* U+1F0A: GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA */
2536 : [1920+0x0B] = 0x1F03, /* U+1F0B: GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA */
2537 : [1920+0x0C] = 0x1F04, /* U+1F0C: GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA */
2538 : [1920+0x0D] = 0x1F05, /* U+1F0D: GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA */
2539 : [1920+0x0E] = 0x1F06, /* U+1F0E: GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI */
2540 : [1920+0x0F] = 0x1F07, /* U+1F0F: GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI */
2541 : [1920+0x18] = 0x1F10, /* U+1F18: GREEK CAPITAL LETTER EPSILON WITH PSILI */
2542 : [1920+0x19] = 0x1F11, /* U+1F19: GREEK CAPITAL LETTER EPSILON WITH DASIA */
2543 : [1920+0x1A] = 0x1F12, /* U+1F1A: GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA */
2544 : [1920+0x1B] = 0x1F13, /* U+1F1B: GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA */
2545 : [1920+0x1C] = 0x1F14, /* U+1F1C: GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA */
2546 : [1920+0x1D] = 0x1F15, /* U+1F1D: GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA */
2547 : [1920+0x28] = 0x1F20, /* U+1F28: GREEK CAPITAL LETTER ETA WITH PSILI */
2548 : [1920+0x29] = 0x1F21, /* U+1F29: GREEK CAPITAL LETTER ETA WITH DASIA */
2549 : [1920+0x2A] = 0x1F22, /* U+1F2A: GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA */
2550 : [1920+0x2B] = 0x1F23, /* U+1F2B: GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA */
2551 : [1920+0x2C] = 0x1F24, /* U+1F2C: GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA */
2552 : [1920+0x2D] = 0x1F25, /* U+1F2D: GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA */
2553 : [1920+0x2E] = 0x1F26, /* U+1F2E: GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI */
2554 : [1920+0x2F] = 0x1F27, /* U+1F2F: GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI */
2555 : [1920+0x38] = 0x1F30, /* U+1F38: GREEK CAPITAL LETTER IOTA WITH PSILI */
2556 : [1920+0x39] = 0x1F31, /* U+1F39: GREEK CAPITAL LETTER IOTA WITH DASIA */
2557 : [1920+0x3A] = 0x1F32, /* U+1F3A: GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA */
2558 : [1920+0x3B] = 0x1F33, /* U+1F3B: GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA */
2559 : [1920+0x3C] = 0x1F34, /* U+1F3C: GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA */
2560 : [1920+0x3D] = 0x1F35, /* U+1F3D: GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA */
2561 : [1920+0x3E] = 0x1F36, /* U+1F3E: GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI */
2562 : [1920+0x3F] = 0x1F37, /* U+1F3F: GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI */
2563 : [1280+0x3D] = 1984 - 0x80, /* 341 275 ... */
2564 : [1984+0x08] = 0x1F40, /* U+1F48: GREEK CAPITAL LETTER OMICRON WITH PSILI */
2565 : [1984+0x09] = 0x1F41, /* U+1F49: GREEK CAPITAL LETTER OMICRON WITH DASIA */
2566 : [1984+0x0A] = 0x1F42, /* U+1F4A: GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA */
2567 : [1984+0x0B] = 0x1F43, /* U+1F4B: GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA */
2568 : [1984+0x0C] = 0x1F44, /* U+1F4C: GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA */
2569 : [1984+0x0D] = 0x1F45, /* U+1F4D: GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA */
2570 : [1984+0x19] = 0x1F51, /* U+1F59: GREEK CAPITAL LETTER UPSILON WITH DASIA */
2571 : [1984+0x1B] = 0x1F53, /* U+1F5B: GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA */
2572 : [1984+0x1D] = 0x1F55, /* U+1F5D: GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA */
2573 : [1984+0x1F] = 0x1F57, /* U+1F5F: GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI */
2574 : [1984+0x28] = 0x1F60, /* U+1F68: GREEK CAPITAL LETTER OMEGA WITH PSILI */
2575 : [1984+0x29] = 0x1F61, /* U+1F69: GREEK CAPITAL LETTER OMEGA WITH DASIA */
2576 : [1984+0x2A] = 0x1F62, /* U+1F6A: GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA */
2577 : [1984+0x2B] = 0x1F63, /* U+1F6B: GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA */
2578 : [1984+0x2C] = 0x1F64, /* U+1F6C: GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA */
2579 : [1984+0x2D] = 0x1F65, /* U+1F6D: GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA */
2580 : [1984+0x2E] = 0x1F66, /* U+1F6E: GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI */
2581 : [1984+0x2F] = 0x1F67, /* U+1F6F: GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI */
2582 : [1280+0x3E] = 2048 - 0x80, /* 341 276 ... */
2583 : [2048+0x08] = 0x1F80, /* U+1F88: GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI */
2584 : [2048+0x09] = 0x1F81, /* U+1F89: GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI */
2585 : [2048+0x0A] = 0x1F82, /* U+1F8A: GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI */
2586 : [2048+0x0B] = 0x1F83, /* U+1F8B: GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI */
2587 : [2048+0x0C] = 0x1F84, /* U+1F8C: GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI */
2588 : [2048+0x0D] = 0x1F85, /* U+1F8D: GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI */
2589 : [2048+0x0E] = 0x1F86, /* U+1F8E: GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */
2590 : [2048+0x0F] = 0x1F87, /* U+1F8F: GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */
2591 : [2048+0x18] = 0x1F90, /* U+1F98: GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI */
2592 : [2048+0x19] = 0x1F91, /* U+1F99: GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI */
2593 : [2048+0x1A] = 0x1F92, /* U+1F9A: GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI */
2594 : [2048+0x1B] = 0x1F93, /* U+1F9B: GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI */
2595 : [2048+0x1C] = 0x1F94, /* U+1F9C: GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI */
2596 : [2048+0x1D] = 0x1F95, /* U+1F9D: GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI */
2597 : [2048+0x1E] = 0x1F96, /* U+1F9E: GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */
2598 : [2048+0x1F] = 0x1F97, /* U+1F9F: GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */
2599 : [2048+0x28] = 0x1FA0, /* U+1FA8: GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI */
2600 : [2048+0x29] = 0x1FA1, /* U+1FA9: GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI */
2601 : [2048+0x2A] = 0x1FA2, /* U+1FAA: GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI */
2602 : [2048+0x2B] = 0x1FA3, /* U+1FAB: GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI */
2603 : [2048+0x2C] = 0x1FA4, /* U+1FAC: GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI */
2604 : [2048+0x2D] = 0x1FA5, /* U+1FAD: GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI */
2605 : [2048+0x2E] = 0x1FA6, /* U+1FAE: GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */
2606 : [2048+0x2F] = 0x1FA7, /* U+1FAF: GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */
2607 : [2048+0x38] = 0x1FB0, /* U+1FB8: GREEK CAPITAL LETTER ALPHA WITH VRACHY */
2608 : [2048+0x39] = 0x1FB1, /* U+1FB9: GREEK CAPITAL LETTER ALPHA WITH MACRON */
2609 : [2048+0x3A] = 0x1F70, /* U+1FBA: GREEK CAPITAL LETTER ALPHA WITH VARIA */
2610 : [2048+0x3B] = 0x1F71, /* U+1FBB: GREEK CAPITAL LETTER ALPHA WITH OXIA */
2611 : [2048+0x3C] = 0x1FB3, /* U+1FBC: GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI */
2612 : [1280+0x3F] = 2112 - 0x80, /* 341 277 ... */
2613 : [2112+0x08] = 0x1F72, /* U+1FC8: GREEK CAPITAL LETTER EPSILON WITH VARIA */
2614 : [2112+0x09] = 0x1F73, /* U+1FC9: GREEK CAPITAL LETTER EPSILON WITH OXIA */
2615 : [2112+0x0A] = 0x1F74, /* U+1FCA: GREEK CAPITAL LETTER ETA WITH VARIA */
2616 : [2112+0x0B] = 0x1F75, /* U+1FCB: GREEK CAPITAL LETTER ETA WITH OXIA */
2617 : [2112+0x0C] = 0x1FC3, /* U+1FCC: GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI */
2618 : [2112+0x18] = 0x1FD0, /* U+1FD8: GREEK CAPITAL LETTER IOTA WITH VRACHY */
2619 : [2112+0x19] = 0x1FD1, /* U+1FD9: GREEK CAPITAL LETTER IOTA WITH MACRON */
2620 : [2112+0x1A] = 0x1F76, /* U+1FDA: GREEK CAPITAL LETTER IOTA WITH VARIA */
2621 : [2112+0x1B] = 0x1F77, /* U+1FDB: GREEK CAPITAL LETTER IOTA WITH OXIA */
2622 : [2112+0x28] = 0x1FE0, /* U+1FE8: GREEK CAPITAL LETTER UPSILON WITH VRACHY */
2623 : [2112+0x29] = 0x1FE1, /* U+1FE9: GREEK CAPITAL LETTER UPSILON WITH MACRON */
2624 : [2112+0x2A] = 0x1F7A, /* U+1FEA: GREEK CAPITAL LETTER UPSILON WITH VARIA */
2625 : [2112+0x2B] = 0x1F7B, /* U+1FEB: GREEK CAPITAL LETTER UPSILON WITH OXIA */
2626 : [2112+0x2C] = 0x1FE5, /* U+1FEC: GREEK CAPITAL LETTER RHO WITH DASIA */
2627 : [2112+0x38] = 0x1F78, /* U+1FF8: GREEK CAPITAL LETTER OMICRON WITH VARIA */
2628 : [2112+0x39] = 0x1F79, /* U+1FF9: GREEK CAPITAL LETTER OMICRON WITH OXIA */
2629 : [2112+0x3A] = 0x1F7C, /* U+1FFA: GREEK CAPITAL LETTER OMEGA WITH VARIA */
2630 : [2112+0x3B] = 0x1F7D, /* U+1FFB: GREEK CAPITAL LETTER OMEGA WITH OXIA */
2631 : [2112+0x3C] = 0x1FF3, /* U+1FFC: GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI */
2632 : [0xE2] = 2176 - 0x80, /* 342 ... */
2633 : [2176+0x04] = 2240 - 0x80, /* 342 204 ... */
2634 : [2240+0x26] = 0x03C9, /* U+2126: OHM SIGN */
2635 : [2240+0x2A] = 0x006B, /* U+212A: KELVIN SIGN */
2636 : [2240+0x2B] = 0x00E5, /* U+212B: ANGSTROM SIGN */
2637 : [2240+0x32] = 0x214E, /* U+2132: TURNED CAPITAL F */
2638 : [2176+0x05] = 2304 - 0x80, /* 342 205 ... */
2639 : [2304+0x20] = 0x2170, /* U+2160: ROMAN NUMERAL ONE */
2640 : [2304+0x21] = 0x2171, /* U+2161: ROMAN NUMERAL TWO */
2641 : [2304+0x22] = 0x2172, /* U+2162: ROMAN NUMERAL THREE */
2642 : [2304+0x23] = 0x2173, /* U+2163: ROMAN NUMERAL FOUR */
2643 : [2304+0x24] = 0x2174, /* U+2164: ROMAN NUMERAL FIVE */
2644 : [2304+0x25] = 0x2175, /* U+2165: ROMAN NUMERAL SIX */
2645 : [2304+0x26] = 0x2176, /* U+2166: ROMAN NUMERAL SEVEN */
2646 : [2304+0x27] = 0x2177, /* U+2167: ROMAN NUMERAL EIGHT */
2647 : [2304+0x28] = 0x2178, /* U+2168: ROMAN NUMERAL NINE */
2648 : [2304+0x29] = 0x2179, /* U+2169: ROMAN NUMERAL TEN */
2649 : [2304+0x2A] = 0x217A, /* U+216A: ROMAN NUMERAL ELEVEN */
2650 : [2304+0x2B] = 0x217B, /* U+216B: ROMAN NUMERAL TWELVE */
2651 : [2304+0x2C] = 0x217C, /* U+216C: ROMAN NUMERAL FIFTY */
2652 : [2304+0x2D] = 0x217D, /* U+216D: ROMAN NUMERAL ONE HUNDRED */
2653 : [2304+0x2E] = 0x217E, /* U+216E: ROMAN NUMERAL FIVE HUNDRED */
2654 : [2304+0x2F] = 0x217F, /* U+216F: ROMAN NUMERAL ONE THOUSAND */
2655 : [2176+0x06] = 2368 - 0x80, /* 342 206 ... */
2656 : [2368+0x03] = 0x2184, /* U+2183: ROMAN NUMERAL REVERSED ONE HUNDRED */
2657 : [2176+0x12] = 2432 - 0x80, /* 342 222 ... */
2658 : [2432+0x36] = 0x24D0, /* U+24B6: CIRCLED LATIN CAPITAL LETTER A */
2659 : [2432+0x37] = 0x24D1, /* U+24B7: CIRCLED LATIN CAPITAL LETTER B */
2660 : [2432+0x38] = 0x24D2, /* U+24B8: CIRCLED LATIN CAPITAL LETTER C */
2661 : [2432+0x39] = 0x24D3, /* U+24B9: CIRCLED LATIN CAPITAL LETTER D */
2662 : [2432+0x3A] = 0x24D4, /* U+24BA: CIRCLED LATIN CAPITAL LETTER E */
2663 : [2432+0x3B] = 0x24D5, /* U+24BB: CIRCLED LATIN CAPITAL LETTER F */
2664 : [2432+0x3C] = 0x24D6, /* U+24BC: CIRCLED LATIN CAPITAL LETTER G */
2665 : [2432+0x3D] = 0x24D7, /* U+24BD: CIRCLED LATIN CAPITAL LETTER H */
2666 : [2432+0x3E] = 0x24D8, /* U+24BE: CIRCLED LATIN CAPITAL LETTER I */
2667 : [2432+0x3F] = 0x24D9, /* U+24BF: CIRCLED LATIN CAPITAL LETTER J */
2668 : [2176+0x13] = 2496 - 0x80, /* 342 223 ... */
2669 : [2496+0x00] = 0x24DA, /* U+24C0: CIRCLED LATIN CAPITAL LETTER K */
2670 : [2496+0x01] = 0x24DB, /* U+24C1: CIRCLED LATIN CAPITAL LETTER L */
2671 : [2496+0x02] = 0x24DC, /* U+24C2: CIRCLED LATIN CAPITAL LETTER M */
2672 : [2496+0x03] = 0x24DD, /* U+24C3: CIRCLED LATIN CAPITAL LETTER N */
2673 : [2496+0x04] = 0x24DE, /* U+24C4: CIRCLED LATIN CAPITAL LETTER O */
2674 : [2496+0x05] = 0x24DF, /* U+24C5: CIRCLED LATIN CAPITAL LETTER P */
2675 : [2496+0x06] = 0x24E0, /* U+24C6: CIRCLED LATIN CAPITAL LETTER Q */
2676 : [2496+0x07] = 0x24E1, /* U+24C7: CIRCLED LATIN CAPITAL LETTER R */
2677 : [2496+0x08] = 0x24E2, /* U+24C8: CIRCLED LATIN CAPITAL LETTER S */
2678 : [2496+0x09] = 0x24E3, /* U+24C9: CIRCLED LATIN CAPITAL LETTER T */
2679 : [2496+0x0A] = 0x24E4, /* U+24CA: CIRCLED LATIN CAPITAL LETTER U */
2680 : [2496+0x0B] = 0x24E5, /* U+24CB: CIRCLED LATIN CAPITAL LETTER V */
2681 : [2496+0x0C] = 0x24E6, /* U+24CC: CIRCLED LATIN CAPITAL LETTER W */
2682 : [2496+0x0D] = 0x24E7, /* U+24CD: CIRCLED LATIN CAPITAL LETTER X */
2683 : [2496+0x0E] = 0x24E8, /* U+24CE: CIRCLED LATIN CAPITAL LETTER Y */
2684 : [2496+0x0F] = 0x24E9, /* U+24CF: CIRCLED LATIN CAPITAL LETTER Z */
2685 : [2176+0x30] = 2560 - 0x80, /* 342 260 ... */
2686 : [2560+0x00] = 0x2C30, /* U+2C00: GLAGOLITIC CAPITAL LETTER AZU */
2687 : [2560+0x01] = 0x2C31, /* U+2C01: GLAGOLITIC CAPITAL LETTER BUKY */
2688 : [2560+0x02] = 0x2C32, /* U+2C02: GLAGOLITIC CAPITAL LETTER VEDE */
2689 : [2560+0x03] = 0x2C33, /* U+2C03: GLAGOLITIC CAPITAL LETTER GLAGOLI */
2690 : [2560+0x04] = 0x2C34, /* U+2C04: GLAGOLITIC CAPITAL LETTER DOBRO */
2691 : [2560+0x05] = 0x2C35, /* U+2C05: GLAGOLITIC CAPITAL LETTER YESTU */
2692 : [2560+0x06] = 0x2C36, /* U+2C06: GLAGOLITIC CAPITAL LETTER ZHIVETE */
2693 : [2560+0x07] = 0x2C37, /* U+2C07: GLAGOLITIC CAPITAL LETTER DZELO */
2694 : [2560+0x08] = 0x2C38, /* U+2C08: GLAGOLITIC CAPITAL LETTER ZEMLJA */
2695 : [2560+0x09] = 0x2C39, /* U+2C09: GLAGOLITIC CAPITAL LETTER IZHE */
2696 : [2560+0x0A] = 0x2C3A, /* U+2C0A: GLAGOLITIC CAPITAL LETTER INITIAL IZHE */
2697 : [2560+0x0B] = 0x2C3B, /* U+2C0B: GLAGOLITIC CAPITAL LETTER I */
2698 : [2560+0x0C] = 0x2C3C, /* U+2C0C: GLAGOLITIC CAPITAL LETTER DJERVI */
2699 : [2560+0x0D] = 0x2C3D, /* U+2C0D: GLAGOLITIC CAPITAL LETTER KAKO */
2700 : [2560+0x0E] = 0x2C3E, /* U+2C0E: GLAGOLITIC CAPITAL LETTER LJUDIJE */
2701 : [2560+0x0F] = 0x2C3F, /* U+2C0F: GLAGOLITIC CAPITAL LETTER MYSLITE */
2702 : [2560+0x10] = 0x2C40, /* U+2C10: GLAGOLITIC CAPITAL LETTER NASHI */
2703 : [2560+0x11] = 0x2C41, /* U+2C11: GLAGOLITIC CAPITAL LETTER ONU */
2704 : [2560+0x12] = 0x2C42, /* U+2C12: GLAGOLITIC CAPITAL LETTER POKOJI */
2705 : [2560+0x13] = 0x2C43, /* U+2C13: GLAGOLITIC CAPITAL LETTER RITSI */
2706 : [2560+0x14] = 0x2C44, /* U+2C14: GLAGOLITIC CAPITAL LETTER SLOVO */
2707 : [2560+0x15] = 0x2C45, /* U+2C15: GLAGOLITIC CAPITAL LETTER TVRIDO */
2708 : [2560+0x16] = 0x2C46, /* U+2C16: GLAGOLITIC CAPITAL LETTER UKU */
2709 : [2560+0x17] = 0x2C47, /* U+2C17: GLAGOLITIC CAPITAL LETTER FRITU */
2710 : [2560+0x18] = 0x2C48, /* U+2C18: GLAGOLITIC CAPITAL LETTER HERU */
2711 : [2560+0x19] = 0x2C49, /* U+2C19: GLAGOLITIC CAPITAL LETTER OTU */
2712 : [2560+0x1A] = 0x2C4A, /* U+2C1A: GLAGOLITIC CAPITAL LETTER PE */
2713 : [2560+0x1B] = 0x2C4B, /* U+2C1B: GLAGOLITIC CAPITAL LETTER SHTA */
2714 : [2560+0x1C] = 0x2C4C, /* U+2C1C: GLAGOLITIC CAPITAL LETTER TSI */
2715 : [2560+0x1D] = 0x2C4D, /* U+2C1D: GLAGOLITIC CAPITAL LETTER CHRIVI */
2716 : [2560+0x1E] = 0x2C4E, /* U+2C1E: GLAGOLITIC CAPITAL LETTER SHA */
2717 : [2560+0x1F] = 0x2C4F, /* U+2C1F: GLAGOLITIC CAPITAL LETTER YERU */
2718 : [2560+0x20] = 0x2C50, /* U+2C20: GLAGOLITIC CAPITAL LETTER YERI */
2719 : [2560+0x21] = 0x2C51, /* U+2C21: GLAGOLITIC CAPITAL LETTER YATI */
2720 : [2560+0x22] = 0x2C52, /* U+2C22: GLAGOLITIC CAPITAL LETTER SPIDERY HA */
2721 : [2560+0x23] = 0x2C53, /* U+2C23: GLAGOLITIC CAPITAL LETTER YU */
2722 : [2560+0x24] = 0x2C54, /* U+2C24: GLAGOLITIC CAPITAL LETTER SMALL YUS */
2723 : [2560+0x25] = 0x2C55, /* U+2C25: GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL */
2724 : [2560+0x26] = 0x2C56, /* U+2C26: GLAGOLITIC CAPITAL LETTER YO */
2725 : [2560+0x27] = 0x2C57, /* U+2C27: GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS */
2726 : [2560+0x28] = 0x2C58, /* U+2C28: GLAGOLITIC CAPITAL LETTER BIG YUS */
2727 : [2560+0x29] = 0x2C59, /* U+2C29: GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS */
2728 : [2560+0x2A] = 0x2C5A, /* U+2C2A: GLAGOLITIC CAPITAL LETTER FITA */
2729 : [2560+0x2B] = 0x2C5B, /* U+2C2B: GLAGOLITIC CAPITAL LETTER IZHITSA */
2730 : [2560+0x2C] = 0x2C5C, /* U+2C2C: GLAGOLITIC CAPITAL LETTER SHTAPIC */
2731 : [2560+0x2D] = 0x2C5D, /* U+2C2D: GLAGOLITIC CAPITAL LETTER TROKUTASTI A */
2732 : [2560+0x2E] = 0x2C5E, /* U+2C2E: GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE */
2733 : [2560+0x2F] = 0x2C5F, /* U+2C2F: GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI */
2734 : [2176+0x31] = 2624 - 0x80, /* 342 261 ... */
2735 : [2624+0x20] = 0x2C61, /* U+2C60: LATIN CAPITAL LETTER L WITH DOUBLE BAR */
2736 : [2624+0x22] = 0x026B, /* U+2C62: LATIN CAPITAL LETTER L WITH MIDDLE TILDE */
2737 : [2624+0x23] = 0x1D7D, /* U+2C63: LATIN CAPITAL LETTER P WITH STROKE */
2738 : [2624+0x24] = 0x027D, /* U+2C64: LATIN CAPITAL LETTER R WITH TAIL */
2739 : [2624+0x27] = 0x2C68, /* U+2C67: LATIN CAPITAL LETTER H WITH DESCENDER */
2740 : [2624+0x29] = 0x2C6A, /* U+2C69: LATIN CAPITAL LETTER K WITH DESCENDER */
2741 : [2624+0x2B] = 0x2C6C, /* U+2C6B: LATIN CAPITAL LETTER Z WITH DESCENDER */
2742 : [2624+0x2D] = 0x0251, /* U+2C6D: LATIN CAPITAL LETTER ALPHA */
2743 : [2624+0x2E] = 0x0271, /* U+2C6E: LATIN CAPITAL LETTER M WITH HOOK */
2744 : [2624+0x2F] = 0x0250, /* U+2C6F: LATIN CAPITAL LETTER TURNED A */
2745 : [2624+0x30] = 0x0252, /* U+2C70: LATIN CAPITAL LETTER TURNED ALPHA */
2746 : [2624+0x32] = 0x2C73, /* U+2C72: LATIN CAPITAL LETTER W WITH HOOK */
2747 : [2624+0x35] = 0x2C76, /* U+2C75: LATIN CAPITAL LETTER HALF H */
2748 : [2624+0x3E] = 0x023F, /* U+2C7E: LATIN CAPITAL LETTER S WITH SWASH TAIL */
2749 : [2624+0x3F] = 0x0240, /* U+2C7F: LATIN CAPITAL LETTER Z WITH SWASH TAIL */
2750 : [2176+0x32] = 2688 - 0x80, /* 342 262 ... */
2751 : [2688+0x00] = 0x2C81, /* U+2C80: COPTIC CAPITAL LETTER ALFA */
2752 : [2688+0x02] = 0x2C83, /* U+2C82: COPTIC CAPITAL LETTER VIDA */
2753 : [2688+0x04] = 0x2C85, /* U+2C84: COPTIC CAPITAL LETTER GAMMA */
2754 : [2688+0x06] = 0x2C87, /* U+2C86: COPTIC CAPITAL LETTER DALDA */
2755 : [2688+0x08] = 0x2C89, /* U+2C88: COPTIC CAPITAL LETTER EIE */
2756 : [2688+0x0A] = 0x2C8B, /* U+2C8A: COPTIC CAPITAL LETTER SOU */
2757 : [2688+0x0C] = 0x2C8D, /* U+2C8C: COPTIC CAPITAL LETTER ZATA */
2758 : [2688+0x0E] = 0x2C8F, /* U+2C8E: COPTIC CAPITAL LETTER HATE */
2759 : [2688+0x10] = 0x2C91, /* U+2C90: COPTIC CAPITAL LETTER THETHE */
2760 : [2688+0x12] = 0x2C93, /* U+2C92: COPTIC CAPITAL LETTER IAUDA */
2761 : [2688+0x14] = 0x2C95, /* U+2C94: COPTIC CAPITAL LETTER KAPA */
2762 : [2688+0x16] = 0x2C97, /* U+2C96: COPTIC CAPITAL LETTER LAULA */
2763 : [2688+0x18] = 0x2C99, /* U+2C98: COPTIC CAPITAL LETTER MI */
2764 : [2688+0x1A] = 0x2C9B, /* U+2C9A: COPTIC CAPITAL LETTER NI */
2765 : [2688+0x1C] = 0x2C9D, /* U+2C9C: COPTIC CAPITAL LETTER KSI */
2766 : [2688+0x1E] = 0x2C9F, /* U+2C9E: COPTIC CAPITAL LETTER O */
2767 : [2688+0x20] = 0x2CA1, /* U+2CA0: COPTIC CAPITAL LETTER PI */
2768 : [2688+0x22] = 0x2CA3, /* U+2CA2: COPTIC CAPITAL LETTER RO */
2769 : [2688+0x24] = 0x2CA5, /* U+2CA4: COPTIC CAPITAL LETTER SIMA */
2770 : [2688+0x26] = 0x2CA7, /* U+2CA6: COPTIC CAPITAL LETTER TAU */
2771 : [2688+0x28] = 0x2CA9, /* U+2CA8: COPTIC CAPITAL LETTER UA */
2772 : [2688+0x2A] = 0x2CAB, /* U+2CAA: COPTIC CAPITAL LETTER FI */
2773 : [2688+0x2C] = 0x2CAD, /* U+2CAC: COPTIC CAPITAL LETTER KHI */
2774 : [2688+0x2E] = 0x2CAF, /* U+2CAE: COPTIC CAPITAL LETTER PSI */
2775 : [2688+0x30] = 0x2CB1, /* U+2CB0: COPTIC CAPITAL LETTER OOU */
2776 : [2688+0x32] = 0x2CB3, /* U+2CB2: COPTIC CAPITAL LETTER DIALECT-P ALEF */
2777 : [2688+0x34] = 0x2CB5, /* U+2CB4: COPTIC CAPITAL LETTER OLD COPTIC AIN */
2778 : [2688+0x36] = 0x2CB7, /* U+2CB6: COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE */
2779 : [2688+0x38] = 0x2CB9, /* U+2CB8: COPTIC CAPITAL LETTER DIALECT-P KAPA */
2780 : [2688+0x3A] = 0x2CBB, /* U+2CBA: COPTIC CAPITAL LETTER DIALECT-P NI */
2781 : [2688+0x3C] = 0x2CBD, /* U+2CBC: COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI */
2782 : [2688+0x3E] = 0x2CBF, /* U+2CBE: COPTIC CAPITAL LETTER OLD COPTIC OOU */
2783 : [2176+0x33] = 2752 - 0x80, /* 342 263 ... */
2784 : [2752+0x00] = 0x2CC1, /* U+2CC0: COPTIC CAPITAL LETTER SAMPI */
2785 : [2752+0x02] = 0x2CC3, /* U+2CC2: COPTIC CAPITAL LETTER CROSSED SHEI */
2786 : [2752+0x04] = 0x2CC5, /* U+2CC4: COPTIC CAPITAL LETTER OLD COPTIC SHEI */
2787 : [2752+0x06] = 0x2CC7, /* U+2CC6: COPTIC CAPITAL LETTER OLD COPTIC ESH */
2788 : [2752+0x08] = 0x2CC9, /* U+2CC8: COPTIC CAPITAL LETTER AKHMIMIC KHEI */
2789 : [2752+0x0A] = 0x2CCB, /* U+2CCA: COPTIC CAPITAL LETTER DIALECT-P HORI */
2790 : [2752+0x0C] = 0x2CCD, /* U+2CCC: COPTIC CAPITAL LETTER OLD COPTIC HORI */
2791 : [2752+0x0E] = 0x2CCF, /* U+2CCE: COPTIC CAPITAL LETTER OLD COPTIC HA */
2792 : [2752+0x10] = 0x2CD1, /* U+2CD0: COPTIC CAPITAL LETTER L-SHAPED HA */
2793 : [2752+0x12] = 0x2CD3, /* U+2CD2: COPTIC CAPITAL LETTER OLD COPTIC HEI */
2794 : [2752+0x14] = 0x2CD5, /* U+2CD4: COPTIC CAPITAL LETTER OLD COPTIC HAT */
2795 : [2752+0x16] = 0x2CD7, /* U+2CD6: COPTIC CAPITAL LETTER OLD COPTIC GANGIA */
2796 : [2752+0x18] = 0x2CD9, /* U+2CD8: COPTIC CAPITAL LETTER OLD COPTIC DJA */
2797 : [2752+0x1A] = 0x2CDB, /* U+2CDA: COPTIC CAPITAL LETTER OLD COPTIC SHIMA */
2798 : [2752+0x1C] = 0x2CDD, /* U+2CDC: COPTIC CAPITAL LETTER OLD NUBIAN SHIMA */
2799 : [2752+0x1E] = 0x2CDF, /* U+2CDE: COPTIC CAPITAL LETTER OLD NUBIAN NGI */
2800 : [2752+0x20] = 0x2CE1, /* U+2CE0: COPTIC CAPITAL LETTER OLD NUBIAN NYI */
2801 : [2752+0x22] = 0x2CE3, /* U+2CE2: COPTIC CAPITAL LETTER OLD NUBIAN WAU */
2802 : [2752+0x2B] = 0x2CEC, /* U+2CEB: COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI */
2803 : [2752+0x2D] = 0x2CEE, /* U+2CED: COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA */
2804 : [2752+0x32] = 0x2CF3, /* U+2CF2: COPTIC CAPITAL LETTER BOHAIRIC KHEI */
2805 : [0xEA] = 2816 - 0x80, /* 352 ... */
2806 : [2816+0x19] = 2880 - 0x80, /* 352 231 ... */
2807 : [2880+0x00] = 0xA641, /* U+A640: CYRILLIC CAPITAL LETTER ZEMLYA */
2808 : [2880+0x02] = 0xA643, /* U+A642: CYRILLIC CAPITAL LETTER DZELO */
2809 : [2880+0x04] = 0xA645, /* U+A644: CYRILLIC CAPITAL LETTER REVERSED DZE */
2810 : [2880+0x06] = 0xA647, /* U+A646: CYRILLIC CAPITAL LETTER IOTA */
2811 : [2880+0x08] = 0xA649, /* U+A648: CYRILLIC CAPITAL LETTER DJERV */
2812 : [2880+0x0A] = 0xA64B, /* U+A64A: CYRILLIC CAPITAL LETTER MONOGRAPH UK */
2813 : [2880+0x0C] = 0xA64D, /* U+A64C: CYRILLIC CAPITAL LETTER BROAD OMEGA */
2814 : [2880+0x0E] = 0xA64F, /* U+A64E: CYRILLIC CAPITAL LETTER NEUTRAL YER */
2815 : [2880+0x10] = 0xA651, /* U+A650: CYRILLIC CAPITAL LETTER YERU WITH BACK YER */
2816 : [2880+0x12] = 0xA653, /* U+A652: CYRILLIC CAPITAL LETTER IOTIFIED YAT */
2817 : [2880+0x14] = 0xA655, /* U+A654: CYRILLIC CAPITAL LETTER REVERSED YU */
2818 : [2880+0x16] = 0xA657, /* U+A656: CYRILLIC CAPITAL LETTER IOTIFIED A */
2819 : [2880+0x18] = 0xA659, /* U+A658: CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS */
2820 : [2880+0x1A] = 0xA65B, /* U+A65A: CYRILLIC CAPITAL LETTER BLENDED YUS */
2821 : [2880+0x1C] = 0xA65D, /* U+A65C: CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS */
2822 : [2880+0x1E] = 0xA65F, /* U+A65E: CYRILLIC CAPITAL LETTER YN */
2823 : [2880+0x20] = 0xA661, /* U+A660: CYRILLIC CAPITAL LETTER REVERSED TSE */
2824 : [2880+0x22] = 0xA663, /* U+A662: CYRILLIC CAPITAL LETTER SOFT DE */
2825 : [2880+0x24] = 0xA665, /* U+A664: CYRILLIC CAPITAL LETTER SOFT EL */
2826 : [2880+0x26] = 0xA667, /* U+A666: CYRILLIC CAPITAL LETTER SOFT EM */
2827 : [2880+0x28] = 0xA669, /* U+A668: CYRILLIC CAPITAL LETTER MONOCULAR O */
2828 : [2880+0x2A] = 0xA66B, /* U+A66A: CYRILLIC CAPITAL LETTER BINOCULAR O */
2829 : [2880+0x2C] = 0xA66D, /* U+A66C: CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O */
2830 : [2816+0x1A] = 2944 - 0x80, /* 352 232 ... */
2831 : [2944+0x00] = 0xA681, /* U+A680: CYRILLIC CAPITAL LETTER DWE */
2832 : [2944+0x02] = 0xA683, /* U+A682: CYRILLIC CAPITAL LETTER DZWE */
2833 : [2944+0x04] = 0xA685, /* U+A684: CYRILLIC CAPITAL LETTER ZHWE */
2834 : [2944+0x06] = 0xA687, /* U+A686: CYRILLIC CAPITAL LETTER CCHE */
2835 : [2944+0x08] = 0xA689, /* U+A688: CYRILLIC CAPITAL LETTER DZZE */
2836 : [2944+0x0A] = 0xA68B, /* U+A68A: CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK */
2837 : [2944+0x0C] = 0xA68D, /* U+A68C: CYRILLIC CAPITAL LETTER TWE */
2838 : [2944+0x0E] = 0xA68F, /* U+A68E: CYRILLIC CAPITAL LETTER TSWE */
2839 : [2944+0x10] = 0xA691, /* U+A690: CYRILLIC CAPITAL LETTER TSSE */
2840 : [2944+0x12] = 0xA693, /* U+A692: CYRILLIC CAPITAL LETTER TCHE */
2841 : [2944+0x14] = 0xA695, /* U+A694: CYRILLIC CAPITAL LETTER HWE */
2842 : [2944+0x16] = 0xA697, /* U+A696: CYRILLIC CAPITAL LETTER SHWE */
2843 : [2944+0x18] = 0xA699, /* U+A698: CYRILLIC CAPITAL LETTER DOUBLE O */
2844 : [2944+0x1A] = 0xA69B, /* U+A69A: CYRILLIC CAPITAL LETTER CROSSED O */
2845 : [2816+0x1C] = 3008 - 0x80, /* 352 234 ... */
2846 : [3008+0x22] = 0xA723, /* U+A722: LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF */
2847 : [3008+0x24] = 0xA725, /* U+A724: LATIN CAPITAL LETTER EGYPTOLOGICAL AIN */
2848 : [3008+0x26] = 0xA727, /* U+A726: LATIN CAPITAL LETTER HENG */
2849 : [3008+0x28] = 0xA729, /* U+A728: LATIN CAPITAL LETTER TZ */
2850 : [3008+0x2A] = 0xA72B, /* U+A72A: LATIN CAPITAL LETTER TRESILLO */
2851 : [3008+0x2C] = 0xA72D, /* U+A72C: LATIN CAPITAL LETTER CUATRILLO */
2852 : [3008+0x2E] = 0xA72F, /* U+A72E: LATIN CAPITAL LETTER CUATRILLO WITH COMMA */
2853 : [3008+0x32] = 0xA733, /* U+A732: LATIN CAPITAL LETTER AA */
2854 : [3008+0x34] = 0xA735, /* U+A734: LATIN CAPITAL LETTER AO */
2855 : [3008+0x36] = 0xA737, /* U+A736: LATIN CAPITAL LETTER AU */
2856 : [3008+0x38] = 0xA739, /* U+A738: LATIN CAPITAL LETTER AV */
2857 : [3008+0x3A] = 0xA73B, /* U+A73A: LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR */
2858 : [3008+0x3C] = 0xA73D, /* U+A73C: LATIN CAPITAL LETTER AY */
2859 : [3008+0x3E] = 0xA73F, /* U+A73E: LATIN CAPITAL LETTER REVERSED C WITH DOT */
2860 : [2816+0x1D] = 3072 - 0x80, /* 352 235 ... */
2861 : [3072+0x00] = 0xA741, /* U+A740: LATIN CAPITAL LETTER K WITH STROKE */
2862 : [3072+0x02] = 0xA743, /* U+A742: LATIN CAPITAL LETTER K WITH DIAGONAL STROKE */
2863 : [3072+0x04] = 0xA745, /* U+A744: LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE */
2864 : [3072+0x06] = 0xA747, /* U+A746: LATIN CAPITAL LETTER BROKEN L */
2865 : [3072+0x08] = 0xA749, /* U+A748: LATIN CAPITAL LETTER L WITH HIGH STROKE */
2866 : [3072+0x0A] = 0xA74B, /* U+A74A: LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY */
2867 : [3072+0x0C] = 0xA74D, /* U+A74C: LATIN CAPITAL LETTER O WITH LOOP */
2868 : [3072+0x0E] = 0xA74F, /* U+A74E: LATIN CAPITAL LETTER OO */
2869 : [3072+0x10] = 0xA751, /* U+A750: LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER */
2870 : [3072+0x12] = 0xA753, /* U+A752: LATIN CAPITAL LETTER P WITH FLOURISH */
2871 : [3072+0x14] = 0xA755, /* U+A754: LATIN CAPITAL LETTER P WITH SQUIRREL TAIL */
2872 : [3072+0x16] = 0xA757, /* U+A756: LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER */
2873 : [3072+0x18] = 0xA759, /* U+A758: LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE */
2874 : [3072+0x1A] = 0xA75B, /* U+A75A: LATIN CAPITAL LETTER R ROTUNDA */
2875 : [3072+0x1C] = 0xA75D, /* U+A75C: LATIN CAPITAL LETTER RUM ROTUNDA */
2876 : [3072+0x1E] = 0xA75F, /* U+A75E: LATIN CAPITAL LETTER V WITH DIAGONAL STROKE */
2877 : [3072+0x20] = 0xA761, /* U+A760: LATIN CAPITAL LETTER VY */
2878 : [3072+0x22] = 0xA763, /* U+A762: LATIN CAPITAL LETTER VISIGOTHIC Z */
2879 : [3072+0x24] = 0xA765, /* U+A764: LATIN CAPITAL LETTER THORN WITH STROKE */
2880 : [3072+0x26] = 0xA767, /* U+A766: LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER */
2881 : [3072+0x28] = 0xA769, /* U+A768: LATIN CAPITAL LETTER VEND */
2882 : [3072+0x2A] = 0xA76B, /* U+A76A: LATIN CAPITAL LETTER ET */
2883 : [3072+0x2C] = 0xA76D, /* U+A76C: LATIN CAPITAL LETTER IS */
2884 : [3072+0x2E] = 0xA76F, /* U+A76E: LATIN CAPITAL LETTER CON */
2885 : [3072+0x39] = 0xA77A, /* U+A779: LATIN CAPITAL LETTER INSULAR D */
2886 : [3072+0x3B] = 0xA77C, /* U+A77B: LATIN CAPITAL LETTER INSULAR F */
2887 : [3072+0x3D] = 0x1D79, /* U+A77D: LATIN CAPITAL LETTER INSULAR G */
2888 : [3072+0x3E] = 0xA77F, /* U+A77E: LATIN CAPITAL LETTER TURNED INSULAR G */
2889 : [2816+0x1E] = 3136 - 0x80, /* 352 236 ... */
2890 : [3136+0x00] = 0xA781, /* U+A780: LATIN CAPITAL LETTER TURNED L */
2891 : [3136+0x02] = 0xA783, /* U+A782: LATIN CAPITAL LETTER INSULAR R */
2892 : [3136+0x04] = 0xA785, /* U+A784: LATIN CAPITAL LETTER INSULAR S */
2893 : [3136+0x06] = 0xA787, /* U+A786: LATIN CAPITAL LETTER INSULAR T */
2894 : [3136+0x0B] = 0xA78C, /* U+A78B: LATIN CAPITAL LETTER SALTILLO */
2895 : [3136+0x0D] = 0x0265, /* U+A78D: LATIN CAPITAL LETTER TURNED H */
2896 : [3136+0x10] = 0xA791, /* U+A790: LATIN CAPITAL LETTER N WITH DESCENDER */
2897 : [3136+0x12] = 0xA793, /* U+A792: LATIN CAPITAL LETTER C WITH BAR */
2898 : [3136+0x16] = 0xA797, /* U+A796: LATIN CAPITAL LETTER B WITH FLOURISH */
2899 : [3136+0x18] = 0xA799, /* U+A798: LATIN CAPITAL LETTER F WITH STROKE */
2900 : [3136+0x1A] = 0xA79B, /* U+A79A: LATIN CAPITAL LETTER VOLAPUK AE */
2901 : [3136+0x1C] = 0xA79D, /* U+A79C: LATIN CAPITAL LETTER VOLAPUK OE */
2902 : [3136+0x1E] = 0xA79F, /* U+A79E: LATIN CAPITAL LETTER VOLAPUK UE */
2903 : [3136+0x20] = 0xA7A1, /* U+A7A0: LATIN CAPITAL LETTER G WITH OBLIQUE STROKE */
2904 : [3136+0x22] = 0xA7A3, /* U+A7A2: LATIN CAPITAL LETTER K WITH OBLIQUE STROKE */
2905 : [3136+0x24] = 0xA7A5, /* U+A7A4: LATIN CAPITAL LETTER N WITH OBLIQUE STROKE */
2906 : [3136+0x26] = 0xA7A7, /* U+A7A6: LATIN CAPITAL LETTER R WITH OBLIQUE STROKE */
2907 : [3136+0x28] = 0xA7A9, /* U+A7A8: LATIN CAPITAL LETTER S WITH OBLIQUE STROKE */
2908 : [3136+0x2A] = 0x0266, /* U+A7AA: LATIN CAPITAL LETTER H WITH HOOK */
2909 : [3136+0x2B] = 0x025C, /* U+A7AB: LATIN CAPITAL LETTER REVERSED OPEN E */
2910 : [3136+0x2C] = 0x0261, /* U+A7AC: LATIN CAPITAL LETTER SCRIPT G */
2911 : [3136+0x2D] = 0x026C, /* U+A7AD: LATIN CAPITAL LETTER L WITH BELT */
2912 : [3136+0x2E] = 0x026A, /* U+A7AE: LATIN CAPITAL LETTER SMALL CAPITAL I */
2913 : [3136+0x30] = 0x029E, /* U+A7B0: LATIN CAPITAL LETTER TURNED K */
2914 : [3136+0x31] = 0x0287, /* U+A7B1: LATIN CAPITAL LETTER TURNED T */
2915 : [3136+0x32] = 0x029D, /* U+A7B2: LATIN CAPITAL LETTER J WITH CROSSED-TAIL */
2916 : [3136+0x33] = 0xAB53, /* U+A7B3: LATIN CAPITAL LETTER CHI */
2917 : [3136+0x34] = 0xA7B5, /* U+A7B4: LATIN CAPITAL LETTER BETA */
2918 : [3136+0x36] = 0xA7B7, /* U+A7B6: LATIN CAPITAL LETTER OMEGA */
2919 : [3136+0x38] = 0xA7B9, /* U+A7B8: LATIN CAPITAL LETTER U WITH STROKE */
2920 : [3136+0x3A] = 0xA7BB, /* U+A7BA: LATIN CAPITAL LETTER GLOTTAL A */
2921 : [3136+0x3C] = 0xA7BD, /* U+A7BC: LATIN CAPITAL LETTER GLOTTAL I */
2922 : [3136+0x3E] = 0xA7BF, /* U+A7BE: LATIN CAPITAL LETTER GLOTTAL U */
2923 : [2816+0x1F] = 3200 - 0x80, /* 352 237 ... */
2924 : [3200+0x00] = 0xA7C1, /* U+A7C0: LATIN CAPITAL LETTER OLD POLISH O */
2925 : [3200+0x02] = 0xA7C3, /* U+A7C2: LATIN CAPITAL LETTER ANGLICANA W */
2926 : [3200+0x04] = 0xA794, /* U+A7C4: LATIN CAPITAL LETTER C WITH PALATAL HOOK */
2927 : [3200+0x05] = 0x0282, /* U+A7C5: LATIN CAPITAL LETTER S WITH HOOK */
2928 : [3200+0x06] = 0x1D8E, /* U+A7C6: LATIN CAPITAL LETTER Z WITH PALATAL HOOK */
2929 : [3200+0x07] = 0xA7C8, /* U+A7C7: LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY */
2930 : [3200+0x09] = 0xA7CA, /* U+A7C9: LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY */
2931 : [3200+0x10] = 0xA7D1, /* U+A7D0: LATIN CAPITAL LETTER CLOSED INSULAR G */
2932 : [3200+0x16] = 0xA7D7, /* U+A7D6: LATIN CAPITAL LETTER MIDDLE SCOTS S */
2933 : [3200+0x18] = 0xA7D9, /* U+A7D8: LATIN CAPITAL LETTER SIGMOID S */
2934 : [3200+0x35] = 0xA7F6, /* U+A7F5: LATIN CAPITAL LETTER REVERSED HALF H */
2935 : [0xEF] = 3264 - 0x80, /* 357 ... */
2936 : [3264+0x3C] = 3328 - 0x80, /* 357 274 ... */
2937 : [3328+0x21] = 0xFF41, /* U+FF21: FULLWIDTH LATIN CAPITAL LETTER A */
2938 : [3328+0x22] = 0xFF42, /* U+FF22: FULLWIDTH LATIN CAPITAL LETTER B */
2939 : [3328+0x23] = 0xFF43, /* U+FF23: FULLWIDTH LATIN CAPITAL LETTER C */
2940 : [3328+0x24] = 0xFF44, /* U+FF24: FULLWIDTH LATIN CAPITAL LETTER D */
2941 : [3328+0x25] = 0xFF45, /* U+FF25: FULLWIDTH LATIN CAPITAL LETTER E */
2942 : [3328+0x26] = 0xFF46, /* U+FF26: FULLWIDTH LATIN CAPITAL LETTER F */
2943 : [3328+0x27] = 0xFF47, /* U+FF27: FULLWIDTH LATIN CAPITAL LETTER G */
2944 : [3328+0x28] = 0xFF48, /* U+FF28: FULLWIDTH LATIN CAPITAL LETTER H */
2945 : [3328+0x29] = 0xFF49, /* U+FF29: FULLWIDTH LATIN CAPITAL LETTER I */
2946 : [3328+0x2A] = 0xFF4A, /* U+FF2A: FULLWIDTH LATIN CAPITAL LETTER J */
2947 : [3328+0x2B] = 0xFF4B, /* U+FF2B: FULLWIDTH LATIN CAPITAL LETTER K */
2948 : [3328+0x2C] = 0xFF4C, /* U+FF2C: FULLWIDTH LATIN CAPITAL LETTER L */
2949 : [3328+0x2D] = 0xFF4D, /* U+FF2D: FULLWIDTH LATIN CAPITAL LETTER M */
2950 : [3328+0x2E] = 0xFF4E, /* U+FF2E: FULLWIDTH LATIN CAPITAL LETTER N */
2951 : [3328+0x2F] = 0xFF4F, /* U+FF2F: FULLWIDTH LATIN CAPITAL LETTER O */
2952 : [3328+0x30] = 0xFF50, /* U+FF30: FULLWIDTH LATIN CAPITAL LETTER P */
2953 : [3328+0x31] = 0xFF51, /* U+FF31: FULLWIDTH LATIN CAPITAL LETTER Q */
2954 : [3328+0x32] = 0xFF52, /* U+FF32: FULLWIDTH LATIN CAPITAL LETTER R */
2955 : [3328+0x33] = 0xFF53, /* U+FF33: FULLWIDTH LATIN CAPITAL LETTER S */
2956 : [3328+0x34] = 0xFF54, /* U+FF34: FULLWIDTH LATIN CAPITAL LETTER T */
2957 : [3328+0x35] = 0xFF55, /* U+FF35: FULLWIDTH LATIN CAPITAL LETTER U */
2958 : [3328+0x36] = 0xFF56, /* U+FF36: FULLWIDTH LATIN CAPITAL LETTER V */
2959 : [3328+0x37] = 0xFF57, /* U+FF37: FULLWIDTH LATIN CAPITAL LETTER W */
2960 : [3328+0x38] = 0xFF58, /* U+FF38: FULLWIDTH LATIN CAPITAL LETTER X */
2961 : [3328+0x39] = 0xFF59, /* U+FF39: FULLWIDTH LATIN CAPITAL LETTER Y */
2962 : [3328+0x3A] = 0xFF5A, /* U+FF3A: FULLWIDTH LATIN CAPITAL LETTER Z */
2963 : [0xF0] = 3392 - 0x80, /* 360 ... */
2964 : [3392+0x10] = 3456 - 0x80, /* 360 220 ... */
2965 : [3456+0x10] = 3520 - 0x80, /* 360 220 220 ... */
2966 : [3520+0x00] = 0x10428, /* U+10400: DESERET CAPITAL LETTER LONG I */
2967 : [3520+0x01] = 0x10429, /* U+10401: DESERET CAPITAL LETTER LONG E */
2968 : [3520+0x02] = 0x1042A, /* U+10402: DESERET CAPITAL LETTER LONG A */
2969 : [3520+0x03] = 0x1042B, /* U+10403: DESERET CAPITAL LETTER LONG AH */
2970 : [3520+0x04] = 0x1042C, /* U+10404: DESERET CAPITAL LETTER LONG O */
2971 : [3520+0x05] = 0x1042D, /* U+10405: DESERET CAPITAL LETTER LONG OO */
2972 : [3520+0x06] = 0x1042E, /* U+10406: DESERET CAPITAL LETTER SHORT I */
2973 : [3520+0x07] = 0x1042F, /* U+10407: DESERET CAPITAL LETTER SHORT E */
2974 : [3520+0x08] = 0x10430, /* U+10408: DESERET CAPITAL LETTER SHORT A */
2975 : [3520+0x09] = 0x10431, /* U+10409: DESERET CAPITAL LETTER SHORT AH */
2976 : [3520+0x0A] = 0x10432, /* U+1040A: DESERET CAPITAL LETTER SHORT O */
2977 : [3520+0x0B] = 0x10433, /* U+1040B: DESERET CAPITAL LETTER SHORT OO */
2978 : [3520+0x0C] = 0x10434, /* U+1040C: DESERET CAPITAL LETTER AY */
2979 : [3520+0x0D] = 0x10435, /* U+1040D: DESERET CAPITAL LETTER OW */
2980 : [3520+0x0E] = 0x10436, /* U+1040E: DESERET CAPITAL LETTER WU */
2981 : [3520+0x0F] = 0x10437, /* U+1040F: DESERET CAPITAL LETTER YEE */
2982 : [3520+0x10] = 0x10438, /* U+10410: DESERET CAPITAL LETTER H */
2983 : [3520+0x11] = 0x10439, /* U+10411: DESERET CAPITAL LETTER PEE */
2984 : [3520+0x12] = 0x1043A, /* U+10412: DESERET CAPITAL LETTER BEE */
2985 : [3520+0x13] = 0x1043B, /* U+10413: DESERET CAPITAL LETTER TEE */
2986 : [3520+0x14] = 0x1043C, /* U+10414: DESERET CAPITAL LETTER DEE */
2987 : [3520+0x15] = 0x1043D, /* U+10415: DESERET CAPITAL LETTER CHEE */
2988 : [3520+0x16] = 0x1043E, /* U+10416: DESERET CAPITAL LETTER JEE */
2989 : [3520+0x17] = 0x1043F, /* U+10417: DESERET CAPITAL LETTER KAY */
2990 : [3520+0x18] = 0x10440, /* U+10418: DESERET CAPITAL LETTER GAY */
2991 : [3520+0x19] = 0x10441, /* U+10419: DESERET CAPITAL LETTER EF */
2992 : [3520+0x1A] = 0x10442, /* U+1041A: DESERET CAPITAL LETTER VEE */
2993 : [3520+0x1B] = 0x10443, /* U+1041B: DESERET CAPITAL LETTER ETH */
2994 : [3520+0x1C] = 0x10444, /* U+1041C: DESERET CAPITAL LETTER THEE */
2995 : [3520+0x1D] = 0x10445, /* U+1041D: DESERET CAPITAL LETTER ES */
2996 : [3520+0x1E] = 0x10446, /* U+1041E: DESERET CAPITAL LETTER ZEE */
2997 : [3520+0x1F] = 0x10447, /* U+1041F: DESERET CAPITAL LETTER ESH */
2998 : [3520+0x20] = 0x10448, /* U+10420: DESERET CAPITAL LETTER ZHEE */
2999 : [3520+0x21] = 0x10449, /* U+10421: DESERET CAPITAL LETTER ER */
3000 : [3520+0x22] = 0x1044A, /* U+10422: DESERET CAPITAL LETTER EL */
3001 : [3520+0x23] = 0x1044B, /* U+10423: DESERET CAPITAL LETTER EM */
3002 : [3520+0x24] = 0x1044C, /* U+10424: DESERET CAPITAL LETTER EN */
3003 : [3520+0x25] = 0x1044D, /* U+10425: DESERET CAPITAL LETTER ENG */
3004 : [3520+0x26] = 0x1044E, /* U+10426: DESERET CAPITAL LETTER OI */
3005 : [3520+0x27] = 0x1044F, /* U+10427: DESERET CAPITAL LETTER EW */
3006 : [3456+0x12] = 3584 - 0x80, /* 360 220 222 ... */
3007 : [3584+0x30] = 0x104D8, /* U+104B0: OSAGE CAPITAL LETTER A */
3008 : [3584+0x31] = 0x104D9, /* U+104B1: OSAGE CAPITAL LETTER AI */
3009 : [3584+0x32] = 0x104DA, /* U+104B2: OSAGE CAPITAL LETTER AIN */
3010 : [3584+0x33] = 0x104DB, /* U+104B3: OSAGE CAPITAL LETTER AH */
3011 : [3584+0x34] = 0x104DC, /* U+104B4: OSAGE CAPITAL LETTER BRA */
3012 : [3584+0x35] = 0x104DD, /* U+104B5: OSAGE CAPITAL LETTER CHA */
3013 : [3584+0x36] = 0x104DE, /* U+104B6: OSAGE CAPITAL LETTER EHCHA */
3014 : [3584+0x37] = 0x104DF, /* U+104B7: OSAGE CAPITAL LETTER E */
3015 : [3584+0x38] = 0x104E0, /* U+104B8: OSAGE CAPITAL LETTER EIN */
3016 : [3584+0x39] = 0x104E1, /* U+104B9: OSAGE CAPITAL LETTER HA */
3017 : [3584+0x3A] = 0x104E2, /* U+104BA: OSAGE CAPITAL LETTER HYA */
3018 : [3584+0x3B] = 0x104E3, /* U+104BB: OSAGE CAPITAL LETTER I */
3019 : [3584+0x3C] = 0x104E4, /* U+104BC: OSAGE CAPITAL LETTER KA */
3020 : [3584+0x3D] = 0x104E5, /* U+104BD: OSAGE CAPITAL LETTER EHKA */
3021 : [3584+0x3E] = 0x104E6, /* U+104BE: OSAGE CAPITAL LETTER KYA */
3022 : [3584+0x3F] = 0x104E7, /* U+104BF: OSAGE CAPITAL LETTER LA */
3023 : [3456+0x13] = 3648 - 0x80, /* 360 220 223 ... */
3024 : [3648+0x00] = 0x104E8, /* U+104C0: OSAGE CAPITAL LETTER MA */
3025 : [3648+0x01] = 0x104E9, /* U+104C1: OSAGE CAPITAL LETTER NA */
3026 : [3648+0x02] = 0x104EA, /* U+104C2: OSAGE CAPITAL LETTER O */
3027 : [3648+0x03] = 0x104EB, /* U+104C3: OSAGE CAPITAL LETTER OIN */
3028 : [3648+0x04] = 0x104EC, /* U+104C4: OSAGE CAPITAL LETTER PA */
3029 : [3648+0x05] = 0x104ED, /* U+104C5: OSAGE CAPITAL LETTER EHPA */
3030 : [3648+0x06] = 0x104EE, /* U+104C6: OSAGE CAPITAL LETTER SA */
3031 : [3648+0x07] = 0x104EF, /* U+104C7: OSAGE CAPITAL LETTER SHA */
3032 : [3648+0x08] = 0x104F0, /* U+104C8: OSAGE CAPITAL LETTER TA */
3033 : [3648+0x09] = 0x104F1, /* U+104C9: OSAGE CAPITAL LETTER EHTA */
3034 : [3648+0x0A] = 0x104F2, /* U+104CA: OSAGE CAPITAL LETTER TSA */
3035 : [3648+0x0B] = 0x104F3, /* U+104CB: OSAGE CAPITAL LETTER EHTSA */
3036 : [3648+0x0C] = 0x104F4, /* U+104CC: OSAGE CAPITAL LETTER TSHA */
3037 : [3648+0x0D] = 0x104F5, /* U+104CD: OSAGE CAPITAL LETTER DHA */
3038 : [3648+0x0E] = 0x104F6, /* U+104CE: OSAGE CAPITAL LETTER U */
3039 : [3648+0x0F] = 0x104F7, /* U+104CF: OSAGE CAPITAL LETTER WA */
3040 : [3648+0x10] = 0x104F8, /* U+104D0: OSAGE CAPITAL LETTER KHA */
3041 : [3648+0x11] = 0x104F9, /* U+104D1: OSAGE CAPITAL LETTER GHA */
3042 : [3648+0x12] = 0x104FA, /* U+104D2: OSAGE CAPITAL LETTER ZA */
3043 : [3648+0x13] = 0x104FB, /* U+104D3: OSAGE CAPITAL LETTER ZHA */
3044 : [3456+0x15] = 3712 - 0x80, /* 360 220 225 ... */
3045 : [3712+0x30] = 0x10597, /* U+10570: VITHKUQI CAPITAL LETTER A */
3046 : [3712+0x31] = 0x10598, /* U+10571: VITHKUQI CAPITAL LETTER BBE */
3047 : [3712+0x32] = 0x10599, /* U+10572: VITHKUQI CAPITAL LETTER BE */
3048 : [3712+0x33] = 0x1059A, /* U+10573: VITHKUQI CAPITAL LETTER CE */
3049 : [3712+0x34] = 0x1059B, /* U+10574: VITHKUQI CAPITAL LETTER CHE */
3050 : [3712+0x35] = 0x1059C, /* U+10575: VITHKUQI CAPITAL LETTER DE */
3051 : [3712+0x36] = 0x1059D, /* U+10576: VITHKUQI CAPITAL LETTER DHE */
3052 : [3712+0x37] = 0x1059E, /* U+10577: VITHKUQI CAPITAL LETTER EI */
3053 : [3712+0x38] = 0x1059F, /* U+10578: VITHKUQI CAPITAL LETTER E */
3054 : [3712+0x39] = 0x105A0, /* U+10579: VITHKUQI CAPITAL LETTER FE */
3055 : [3712+0x3A] = 0x105A1, /* U+1057A: VITHKUQI CAPITAL LETTER GA */
3056 : [3712+0x3C] = 0x105A3, /* U+1057C: VITHKUQI CAPITAL LETTER HA */
3057 : [3712+0x3D] = 0x105A4, /* U+1057D: VITHKUQI CAPITAL LETTER HHA */
3058 : [3712+0x3E] = 0x105A5, /* U+1057E: VITHKUQI CAPITAL LETTER I */
3059 : [3712+0x3F] = 0x105A6, /* U+1057F: VITHKUQI CAPITAL LETTER IJE */
3060 : [3456+0x16] = 3776 - 0x80, /* 360 220 226 ... */
3061 : [3776+0x00] = 0x105A7, /* U+10580: VITHKUQI CAPITAL LETTER JE */
3062 : [3776+0x01] = 0x105A8, /* U+10581: VITHKUQI CAPITAL LETTER KA */
3063 : [3776+0x02] = 0x105A9, /* U+10582: VITHKUQI CAPITAL LETTER LA */
3064 : [3776+0x03] = 0x105AA, /* U+10583: VITHKUQI CAPITAL LETTER LLA */
3065 : [3776+0x04] = 0x105AB, /* U+10584: VITHKUQI CAPITAL LETTER ME */
3066 : [3776+0x05] = 0x105AC, /* U+10585: VITHKUQI CAPITAL LETTER NE */
3067 : [3776+0x06] = 0x105AD, /* U+10586: VITHKUQI CAPITAL LETTER NJE */
3068 : [3776+0x07] = 0x105AE, /* U+10587: VITHKUQI CAPITAL LETTER O */
3069 : [3776+0x08] = 0x105AF, /* U+10588: VITHKUQI CAPITAL LETTER PE */
3070 : [3776+0x09] = 0x105B0, /* U+10589: VITHKUQI CAPITAL LETTER QA */
3071 : [3776+0x0A] = 0x105B1, /* U+1058A: VITHKUQI CAPITAL LETTER RE */
3072 : [3776+0x0C] = 0x105B3, /* U+1058C: VITHKUQI CAPITAL LETTER SE */
3073 : [3776+0x0D] = 0x105B4, /* U+1058D: VITHKUQI CAPITAL LETTER SHE */
3074 : [3776+0x0E] = 0x105B5, /* U+1058E: VITHKUQI CAPITAL LETTER TE */
3075 : [3776+0x0F] = 0x105B6, /* U+1058F: VITHKUQI CAPITAL LETTER THE */
3076 : [3776+0x10] = 0x105B7, /* U+10590: VITHKUQI CAPITAL LETTER U */
3077 : [3776+0x11] = 0x105B8, /* U+10591: VITHKUQI CAPITAL LETTER VE */
3078 : [3776+0x12] = 0x105B9, /* U+10592: VITHKUQI CAPITAL LETTER XE */
3079 : [3776+0x14] = 0x105BB, /* U+10594: VITHKUQI CAPITAL LETTER Y */
3080 : [3776+0x15] = 0x105BC, /* U+10595: VITHKUQI CAPITAL LETTER ZE */
3081 : [3456+0x32] = 3840 - 0x80, /* 360 220 262 ... */
3082 : [3840+0x00] = 0x10CC0, /* U+10C80: OLD HUNGARIAN CAPITAL LETTER A */
3083 : [3840+0x01] = 0x10CC1, /* U+10C81: OLD HUNGARIAN CAPITAL LETTER AA */
3084 : [3840+0x02] = 0x10CC2, /* U+10C82: OLD HUNGARIAN CAPITAL LETTER EB */
3085 : [3840+0x03] = 0x10CC3, /* U+10C83: OLD HUNGARIAN CAPITAL LETTER AMB */
3086 : [3840+0x04] = 0x10CC4, /* U+10C84: OLD HUNGARIAN CAPITAL LETTER EC */
3087 : [3840+0x05] = 0x10CC5, /* U+10C85: OLD HUNGARIAN CAPITAL LETTER ENC */
3088 : [3840+0x06] = 0x10CC6, /* U+10C86: OLD HUNGARIAN CAPITAL LETTER ECS */
3089 : [3840+0x07] = 0x10CC7, /* U+10C87: OLD HUNGARIAN CAPITAL LETTER ED */
3090 : [3840+0x08] = 0x10CC8, /* U+10C88: OLD HUNGARIAN CAPITAL LETTER AND */
3091 : [3840+0x09] = 0x10CC9, /* U+10C89: OLD HUNGARIAN CAPITAL LETTER E */
3092 : [3840+0x0A] = 0x10CCA, /* U+10C8A: OLD HUNGARIAN CAPITAL LETTER CLOSE E */
3093 : [3840+0x0B] = 0x10CCB, /* U+10C8B: OLD HUNGARIAN CAPITAL LETTER EE */
3094 : [3840+0x0C] = 0x10CCC, /* U+10C8C: OLD HUNGARIAN CAPITAL LETTER EF */
3095 : [3840+0x0D] = 0x10CCD, /* U+10C8D: OLD HUNGARIAN CAPITAL LETTER EG */
3096 : [3840+0x0E] = 0x10CCE, /* U+10C8E: OLD HUNGARIAN CAPITAL LETTER EGY */
3097 : [3840+0x0F] = 0x10CCF, /* U+10C8F: OLD HUNGARIAN CAPITAL LETTER EH */
3098 : [3840+0x10] = 0x10CD0, /* U+10C90: OLD HUNGARIAN CAPITAL LETTER I */
3099 : [3840+0x11] = 0x10CD1, /* U+10C91: OLD HUNGARIAN CAPITAL LETTER II */
3100 : [3840+0x12] = 0x10CD2, /* U+10C92: OLD HUNGARIAN CAPITAL LETTER EJ */
3101 : [3840+0x13] = 0x10CD3, /* U+10C93: OLD HUNGARIAN CAPITAL LETTER EK */
3102 : [3840+0x14] = 0x10CD4, /* U+10C94: OLD HUNGARIAN CAPITAL LETTER AK */
3103 : [3840+0x15] = 0x10CD5, /* U+10C95: OLD HUNGARIAN CAPITAL LETTER UNK */
3104 : [3840+0x16] = 0x10CD6, /* U+10C96: OLD HUNGARIAN CAPITAL LETTER EL */
3105 : [3840+0x17] = 0x10CD7, /* U+10C97: OLD HUNGARIAN CAPITAL LETTER ELY */
3106 : [3840+0x18] = 0x10CD8, /* U+10C98: OLD HUNGARIAN CAPITAL LETTER EM */
3107 : [3840+0x19] = 0x10CD9, /* U+10C99: OLD HUNGARIAN CAPITAL LETTER EN */
3108 : [3840+0x1A] = 0x10CDA, /* U+10C9A: OLD HUNGARIAN CAPITAL LETTER ENY */
3109 : [3840+0x1B] = 0x10CDB, /* U+10C9B: OLD HUNGARIAN CAPITAL LETTER O */
3110 : [3840+0x1C] = 0x10CDC, /* U+10C9C: OLD HUNGARIAN CAPITAL LETTER OO */
3111 : [3840+0x1D] = 0x10CDD, /* U+10C9D: OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG OE */
3112 : [3840+0x1E] = 0x10CDE, /* U+10C9E: OLD HUNGARIAN CAPITAL LETTER RUDIMENTA OE */
3113 : [3840+0x1F] = 0x10CDF, /* U+10C9F: OLD HUNGARIAN CAPITAL LETTER OEE */
3114 : [3840+0x20] = 0x10CE0, /* U+10CA0: OLD HUNGARIAN CAPITAL LETTER EP */
3115 : [3840+0x21] = 0x10CE1, /* U+10CA1: OLD HUNGARIAN CAPITAL LETTER EMP */
3116 : [3840+0x22] = 0x10CE2, /* U+10CA2: OLD HUNGARIAN CAPITAL LETTER ER */
3117 : [3840+0x23] = 0x10CE3, /* U+10CA3: OLD HUNGARIAN CAPITAL LETTER SHORT ER */
3118 : [3840+0x24] = 0x10CE4, /* U+10CA4: OLD HUNGARIAN CAPITAL LETTER ES */
3119 : [3840+0x25] = 0x10CE5, /* U+10CA5: OLD HUNGARIAN CAPITAL LETTER ESZ */
3120 : [3840+0x26] = 0x10CE6, /* U+10CA6: OLD HUNGARIAN CAPITAL LETTER ET */
3121 : [3840+0x27] = 0x10CE7, /* U+10CA7: OLD HUNGARIAN CAPITAL LETTER ENT */
3122 : [3840+0x28] = 0x10CE8, /* U+10CA8: OLD HUNGARIAN CAPITAL LETTER ETY */
3123 : [3840+0x29] = 0x10CE9, /* U+10CA9: OLD HUNGARIAN CAPITAL LETTER ECH */
3124 : [3840+0x2A] = 0x10CEA, /* U+10CAA: OLD HUNGARIAN CAPITAL LETTER U */
3125 : [3840+0x2B] = 0x10CEB, /* U+10CAB: OLD HUNGARIAN CAPITAL LETTER UU */
3126 : [3840+0x2C] = 0x10CEC, /* U+10CAC: OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG UE */
3127 : [3840+0x2D] = 0x10CED, /* U+10CAD: OLD HUNGARIAN CAPITAL LETTER RUDIMENTA UE */
3128 : [3840+0x2E] = 0x10CEE, /* U+10CAE: OLD HUNGARIAN CAPITAL LETTER EV */
3129 : [3840+0x2F] = 0x10CEF, /* U+10CAF: OLD HUNGARIAN CAPITAL LETTER EZ */
3130 : [3840+0x30] = 0x10CF0, /* U+10CB0: OLD HUNGARIAN CAPITAL LETTER EZS */
3131 : [3840+0x31] = 0x10CF1, /* U+10CB1: OLD HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGN */
3132 : [3840+0x32] = 0x10CF2, /* U+10CB2: OLD HUNGARIAN CAPITAL LETTER US */
3133 : [3392+0x11] = 3904 - 0x80, /* 360 221 ... */
3134 : [3904+0x22] = 3968 - 0x80, /* 360 221 242 ... */
3135 : [3968+0x20] = 0x118C0, /* U+118A0: WARANG CITI CAPITAL LETTER NGAA */
3136 : [3968+0x21] = 0x118C1, /* U+118A1: WARANG CITI CAPITAL LETTER A */
3137 : [3968+0x22] = 0x118C2, /* U+118A2: WARANG CITI CAPITAL LETTER WI */
3138 : [3968+0x23] = 0x118C3, /* U+118A3: WARANG CITI CAPITAL LETTER YU */
3139 : [3968+0x24] = 0x118C4, /* U+118A4: WARANG CITI CAPITAL LETTER YA */
3140 : [3968+0x25] = 0x118C5, /* U+118A5: WARANG CITI CAPITAL LETTER YO */
3141 : [3968+0x26] = 0x118C6, /* U+118A6: WARANG CITI CAPITAL LETTER II */
3142 : [3968+0x27] = 0x118C7, /* U+118A7: WARANG CITI CAPITAL LETTER UU */
3143 : [3968+0x28] = 0x118C8, /* U+118A8: WARANG CITI CAPITAL LETTER E */
3144 : [3968+0x29] = 0x118C9, /* U+118A9: WARANG CITI CAPITAL LETTER O */
3145 : [3968+0x2A] = 0x118CA, /* U+118AA: WARANG CITI CAPITAL LETTER ANG */
3146 : [3968+0x2B] = 0x118CB, /* U+118AB: WARANG CITI CAPITAL LETTER GA */
3147 : [3968+0x2C] = 0x118CC, /* U+118AC: WARANG CITI CAPITAL LETTER KO */
3148 : [3968+0x2D] = 0x118CD, /* U+118AD: WARANG CITI CAPITAL LETTER ENY */
3149 : [3968+0x2E] = 0x118CE, /* U+118AE: WARANG CITI CAPITAL LETTER YUJ */
3150 : [3968+0x2F] = 0x118CF, /* U+118AF: WARANG CITI CAPITAL LETTER UC */
3151 : [3968+0x30] = 0x118D0, /* U+118B0: WARANG CITI CAPITAL LETTER ENN */
3152 : [3968+0x31] = 0x118D1, /* U+118B1: WARANG CITI CAPITAL LETTER ODD */
3153 : [3968+0x32] = 0x118D2, /* U+118B2: WARANG CITI CAPITAL LETTER TTE */
3154 : [3968+0x33] = 0x118D3, /* U+118B3: WARANG CITI CAPITAL LETTER NUNG */
3155 : [3968+0x34] = 0x118D4, /* U+118B4: WARANG CITI CAPITAL LETTER DA */
3156 : [3968+0x35] = 0x118D5, /* U+118B5: WARANG CITI CAPITAL LETTER AT */
3157 : [3968+0x36] = 0x118D6, /* U+118B6: WARANG CITI CAPITAL LETTER AM */
3158 : [3968+0x37] = 0x118D7, /* U+118B7: WARANG CITI CAPITAL LETTER BU */
3159 : [3968+0x38] = 0x118D8, /* U+118B8: WARANG CITI CAPITAL LETTER PU */
3160 : [3968+0x39] = 0x118D9, /* U+118B9: WARANG CITI CAPITAL LETTER HIYO */
3161 : [3968+0x3A] = 0x118DA, /* U+118BA: WARANG CITI CAPITAL LETTER HOLO */
3162 : [3968+0x3B] = 0x118DB, /* U+118BB: WARANG CITI CAPITAL LETTER HORR */
3163 : [3968+0x3C] = 0x118DC, /* U+118BC: WARANG CITI CAPITAL LETTER HAR */
3164 : [3968+0x3D] = 0x118DD, /* U+118BD: WARANG CITI CAPITAL LETTER SSUU */
3165 : [3968+0x3E] = 0x118DE, /* U+118BE: WARANG CITI CAPITAL LETTER SII */
3166 : [3968+0x3F] = 0x118DF, /* U+118BF: WARANG CITI CAPITAL LETTER VIYO */
3167 : [3392+0x16] = 4032 - 0x80, /* 360 226 ... */
3168 : [4032+0x39] = 4096 - 0x80, /* 360 226 271 ... */
3169 : [4096+0x00] = 0x16E60, /* U+16E40: MEDEFAIDRIN CAPITAL LETTER M */
3170 : [4096+0x01] = 0x16E61, /* U+16E41: MEDEFAIDRIN CAPITAL LETTER S */
3171 : [4096+0x02] = 0x16E62, /* U+16E42: MEDEFAIDRIN CAPITAL LETTER V */
3172 : [4096+0x03] = 0x16E63, /* U+16E43: MEDEFAIDRIN CAPITAL LETTER W */
3173 : [4096+0x04] = 0x16E64, /* U+16E44: MEDEFAIDRIN CAPITAL LETTER ATIU */
3174 : [4096+0x05] = 0x16E65, /* U+16E45: MEDEFAIDRIN CAPITAL LETTER Z */
3175 : [4096+0x06] = 0x16E66, /* U+16E46: MEDEFAIDRIN CAPITAL LETTER KP */
3176 : [4096+0x07] = 0x16E67, /* U+16E47: MEDEFAIDRIN CAPITAL LETTER P */
3177 : [4096+0x08] = 0x16E68, /* U+16E48: MEDEFAIDRIN CAPITAL LETTER T */
3178 : [4096+0x09] = 0x16E69, /* U+16E49: MEDEFAIDRIN CAPITAL LETTER G */
3179 : [4096+0x0A] = 0x16E6A, /* U+16E4A: MEDEFAIDRIN CAPITAL LETTER F */
3180 : [4096+0x0B] = 0x16E6B, /* U+16E4B: MEDEFAIDRIN CAPITAL LETTER I */
3181 : [4096+0x0C] = 0x16E6C, /* U+16E4C: MEDEFAIDRIN CAPITAL LETTER K */
3182 : [4096+0x0D] = 0x16E6D, /* U+16E4D: MEDEFAIDRIN CAPITAL LETTER A */
3183 : [4096+0x0E] = 0x16E6E, /* U+16E4E: MEDEFAIDRIN CAPITAL LETTER J */
3184 : [4096+0x0F] = 0x16E6F, /* U+16E4F: MEDEFAIDRIN CAPITAL LETTER E */
3185 : [4096+0x10] = 0x16E70, /* U+16E50: MEDEFAIDRIN CAPITAL LETTER B */
3186 : [4096+0x11] = 0x16E71, /* U+16E51: MEDEFAIDRIN CAPITAL LETTER C */
3187 : [4096+0x12] = 0x16E72, /* U+16E52: MEDEFAIDRIN CAPITAL LETTER U */
3188 : [4096+0x13] = 0x16E73, /* U+16E53: MEDEFAIDRIN CAPITAL LETTER YU */
3189 : [4096+0x14] = 0x16E74, /* U+16E54: MEDEFAIDRIN CAPITAL LETTER L */
3190 : [4096+0x15] = 0x16E75, /* U+16E55: MEDEFAIDRIN CAPITAL LETTER Q */
3191 : [4096+0x16] = 0x16E76, /* U+16E56: MEDEFAIDRIN CAPITAL LETTER HP */
3192 : [4096+0x17] = 0x16E77, /* U+16E57: MEDEFAIDRIN CAPITAL LETTER NY */
3193 : [4096+0x18] = 0x16E78, /* U+16E58: MEDEFAIDRIN CAPITAL LETTER X */
3194 : [4096+0x19] = 0x16E79, /* U+16E59: MEDEFAIDRIN CAPITAL LETTER D */
3195 : [4096+0x1A] = 0x16E7A, /* U+16E5A: MEDEFAIDRIN CAPITAL LETTER OE */
3196 : [4096+0x1B] = 0x16E7B, /* U+16E5B: MEDEFAIDRIN CAPITAL LETTER N */
3197 : [4096+0x1C] = 0x16E7C, /* U+16E5C: MEDEFAIDRIN CAPITAL LETTER R */
3198 : [4096+0x1D] = 0x16E7D, /* U+16E5D: MEDEFAIDRIN CAPITAL LETTER O */
3199 : [4096+0x1E] = 0x16E7E, /* U+16E5E: MEDEFAIDRIN CAPITAL LETTER AI */
3200 : [4096+0x1F] = 0x16E7F, /* U+16E5F: MEDEFAIDRIN CAPITAL LETTER Y */
3201 : [3392+0x1E] = 4160 - 0x80, /* 360 236 ... */
3202 : [4160+0x24] = 4224 - 0x80, /* 360 236 244 ... */
3203 : [4224+0x00] = 0x1E922, /* U+1E900: ADLAM CAPITAL LETTER ALIF */
3204 : [4224+0x01] = 0x1E923, /* U+1E901: ADLAM CAPITAL LETTER DAALI */
3205 : [4224+0x02] = 0x1E924, /* U+1E902: ADLAM CAPITAL LETTER LAAM */
3206 : [4224+0x03] = 0x1E925, /* U+1E903: ADLAM CAPITAL LETTER MIIM */
3207 : [4224+0x04] = 0x1E926, /* U+1E904: ADLAM CAPITAL LETTER BA */
3208 : [4224+0x05] = 0x1E927, /* U+1E905: ADLAM CAPITAL LETTER SINNYIIYHE */
3209 : [4224+0x06] = 0x1E928, /* U+1E906: ADLAM CAPITAL LETTER PE */
3210 : [4224+0x07] = 0x1E929, /* U+1E907: ADLAM CAPITAL LETTER BHE */
3211 : [4224+0x08] = 0x1E92A, /* U+1E908: ADLAM CAPITAL LETTER RA */
3212 : [4224+0x09] = 0x1E92B, /* U+1E909: ADLAM CAPITAL LETTER E */
3213 : [4224+0x0A] = 0x1E92C, /* U+1E90A: ADLAM CAPITAL LETTER FA */
3214 : [4224+0x0B] = 0x1E92D, /* U+1E90B: ADLAM CAPITAL LETTER I */
3215 : [4224+0x0C] = 0x1E92E, /* U+1E90C: ADLAM CAPITAL LETTER O */
3216 : [4224+0x0D] = 0x1E92F, /* U+1E90D: ADLAM CAPITAL LETTER DHA */
3217 : [4224+0x0E] = 0x1E930, /* U+1E90E: ADLAM CAPITAL LETTER YHE */
3218 : [4224+0x0F] = 0x1E931, /* U+1E90F: ADLAM CAPITAL LETTER WAW */
3219 : [4224+0x10] = 0x1E932, /* U+1E910: ADLAM CAPITAL LETTER NUN */
3220 : [4224+0x11] = 0x1E933, /* U+1E911: ADLAM CAPITAL LETTER KAF */
3221 : [4224+0x12] = 0x1E934, /* U+1E912: ADLAM CAPITAL LETTER YA */
3222 : [4224+0x13] = 0x1E935, /* U+1E913: ADLAM CAPITAL LETTER U */
3223 : [4224+0x14] = 0x1E936, /* U+1E914: ADLAM CAPITAL LETTER JIIM */
3224 : [4224+0x15] = 0x1E937, /* U+1E915: ADLAM CAPITAL LETTER CHI */
3225 : [4224+0x16] = 0x1E938, /* U+1E916: ADLAM CAPITAL LETTER HA */
3226 : [4224+0x17] = 0x1E939, /* U+1E917: ADLAM CAPITAL LETTER QAAF */
3227 : [4224+0x18] = 0x1E93A, /* U+1E918: ADLAM CAPITAL LETTER GA */
3228 : [4224+0x19] = 0x1E93B, /* U+1E919: ADLAM CAPITAL LETTER NYA */
3229 : [4224+0x1A] = 0x1E93C, /* U+1E91A: ADLAM CAPITAL LETTER TU */
3230 : [4224+0x1B] = 0x1E93D, /* U+1E91B: ADLAM CAPITAL LETTER NHA */
3231 : [4224+0x1C] = 0x1E93E, /* U+1E91C: ADLAM CAPITAL LETTER VA */
3232 : [4224+0x1D] = 0x1E93F, /* U+1E91D: ADLAM CAPITAL LETTER KHA */
3233 : [4224+0x1E] = 0x1E940, /* U+1E91E: ADLAM CAPITAL LETTER GBE */
3234 : [4224+0x1F] = 0x1E941, /* U+1E91F: ADLAM CAPITAL LETTER ZAL */
3235 : [4224+0x20] = 0x1E942, /* U+1E920: ADLAM CAPITAL LETTER KPO */
3236 : [4224+0x21] = 0x1E943, /* U+1E921: ADLAM CAPITAL LETTER SHA */
3237 : };
3238 : static const int uppercase[4608] = {
3239 : [0x00] = 0x0000, /* U+0000: <control> */
3240 : [0x01] = 0x0001, /* U+0001: <control> */
3241 : [0x02] = 0x0002, /* U+0002: <control> */
3242 : [0x03] = 0x0003, /* U+0003: <control> */
3243 : [0x04] = 0x0004, /* U+0004: <control> */
3244 : [0x05] = 0x0005, /* U+0005: <control> */
3245 : [0x06] = 0x0006, /* U+0006: <control> */
3246 : [0x07] = 0x0007, /* U+0007: <control> */
3247 : [0x08] = 0x0008, /* U+0008: <control> */
3248 : [0x09] = 0x0009, /* U+0009: <control> */
3249 : [0x0A] = 0x000A, /* U+000A: <control> */
3250 : [0x0B] = 0x000B, /* U+000B: <control> */
3251 : [0x0C] = 0x000C, /* U+000C: <control> */
3252 : [0x0D] = 0x000D, /* U+000D: <control> */
3253 : [0x0E] = 0x000E, /* U+000E: <control> */
3254 : [0x0F] = 0x000F, /* U+000F: <control> */
3255 : [0x10] = 0x0010, /* U+0010: <control> */
3256 : [0x11] = 0x0011, /* U+0011: <control> */
3257 : [0x12] = 0x0012, /* U+0012: <control> */
3258 : [0x13] = 0x0013, /* U+0013: <control> */
3259 : [0x14] = 0x0014, /* U+0014: <control> */
3260 : [0x15] = 0x0015, /* U+0015: <control> */
3261 : [0x16] = 0x0016, /* U+0016: <control> */
3262 : [0x17] = 0x0017, /* U+0017: <control> */
3263 : [0x18] = 0x0018, /* U+0018: <control> */
3264 : [0x19] = 0x0019, /* U+0019: <control> */
3265 : [0x1A] = 0x001A, /* U+001A: <control> */
3266 : [0x1B] = 0x001B, /* U+001B: <control> */
3267 : [0x1C] = 0x001C, /* U+001C: <control> */
3268 : [0x1D] = 0x001D, /* U+001D: <control> */
3269 : [0x1E] = 0x001E, /* U+001E: <control> */
3270 : [0x1F] = 0x001F, /* U+001F: <control> */
3271 : [0x20] = 0x0020, /* U+0020: SPACE */
3272 : [0x21] = 0x0021, /* U+0021: EXCLAMATION MARK */
3273 : [0x22] = 0x0022, /* U+0022: QUOTATION MARK */
3274 : [0x23] = 0x0023, /* U+0023: NUMBER SIGN */
3275 : [0x24] = 0x0024, /* U+0024: DOLLAR SIGN */
3276 : [0x25] = 0x0025, /* U+0025: PERCENT SIGN */
3277 : [0x26] = 0x0026, /* U+0026: AMPERSAND */
3278 : [0x27] = 0x0027, /* U+0027: APOSTROPHE */
3279 : [0x28] = 0x0028, /* U+0028: LEFT PARENTHESIS */
3280 : [0x29] = 0x0029, /* U+0029: RIGHT PARENTHESIS */
3281 : [0x2A] = 0x002A, /* U+002A: ASTERISK */
3282 : [0x2B] = 0x002B, /* U+002B: PLUS SIGN */
3283 : [0x2C] = 0x002C, /* U+002C: COMMA */
3284 : [0x2D] = 0x002D, /* U+002D: HYPHEN-MINUS */
3285 : [0x2E] = 0x002E, /* U+002E: FULL STOP */
3286 : [0x2F] = 0x002F, /* U+002F: SOLIDUS */
3287 : [0x30] = 0x0030, /* U+0030: DIGIT ZERO */
3288 : [0x31] = 0x0031, /* U+0031: DIGIT ONE */
3289 : [0x32] = 0x0032, /* U+0032: DIGIT TWO */
3290 : [0x33] = 0x0033, /* U+0033: DIGIT THREE */
3291 : [0x34] = 0x0034, /* U+0034: DIGIT FOUR */
3292 : [0x35] = 0x0035, /* U+0035: DIGIT FIVE */
3293 : [0x36] = 0x0036, /* U+0036: DIGIT SIX */
3294 : [0x37] = 0x0037, /* U+0037: DIGIT SEVEN */
3295 : [0x38] = 0x0038, /* U+0038: DIGIT EIGHT */
3296 : [0x39] = 0x0039, /* U+0039: DIGIT NINE */
3297 : [0x3A] = 0x003A, /* U+003A: COLON */
3298 : [0x3B] = 0x003B, /* U+003B: SEMICOLON */
3299 : [0x3C] = 0x003C, /* U+003C: LESS-THAN SIGN */
3300 : [0x3D] = 0x003D, /* U+003D: EQUALS SIGN */
3301 : [0x3E] = 0x003E, /* U+003E: GREATER-THAN SIGN */
3302 : [0x3F] = 0x003F, /* U+003F: QUESTION MARK */
3303 : [0x40] = 0x0040, /* U+0040: COMMERCIAL AT */
3304 : [0x41] = 0x0041, /* U+0041: LATIN CAPITAL LETTER A */
3305 : [0x42] = 0x0042, /* U+0042: LATIN CAPITAL LETTER B */
3306 : [0x43] = 0x0043, /* U+0043: LATIN CAPITAL LETTER C */
3307 : [0x44] = 0x0044, /* U+0044: LATIN CAPITAL LETTER D */
3308 : [0x45] = 0x0045, /* U+0045: LATIN CAPITAL LETTER E */
3309 : [0x46] = 0x0046, /* U+0046: LATIN CAPITAL LETTER F */
3310 : [0x47] = 0x0047, /* U+0047: LATIN CAPITAL LETTER G */
3311 : [0x48] = 0x0048, /* U+0048: LATIN CAPITAL LETTER H */
3312 : [0x49] = 0x0049, /* U+0049: LATIN CAPITAL LETTER I */
3313 : [0x4A] = 0x004A, /* U+004A: LATIN CAPITAL LETTER J */
3314 : [0x4B] = 0x004B, /* U+004B: LATIN CAPITAL LETTER K */
3315 : [0x4C] = 0x004C, /* U+004C: LATIN CAPITAL LETTER L */
3316 : [0x4D] = 0x004D, /* U+004D: LATIN CAPITAL LETTER M */
3317 : [0x4E] = 0x004E, /* U+004E: LATIN CAPITAL LETTER N */
3318 : [0x4F] = 0x004F, /* U+004F: LATIN CAPITAL LETTER O */
3319 : [0x50] = 0x0050, /* U+0050: LATIN CAPITAL LETTER P */
3320 : [0x51] = 0x0051, /* U+0051: LATIN CAPITAL LETTER Q */
3321 : [0x52] = 0x0052, /* U+0052: LATIN CAPITAL LETTER R */
3322 : [0x53] = 0x0053, /* U+0053: LATIN CAPITAL LETTER S */
3323 : [0x54] = 0x0054, /* U+0054: LATIN CAPITAL LETTER T */
3324 : [0x55] = 0x0055, /* U+0055: LATIN CAPITAL LETTER U */
3325 : [0x56] = 0x0056, /* U+0056: LATIN CAPITAL LETTER V */
3326 : [0x57] = 0x0057, /* U+0057: LATIN CAPITAL LETTER W */
3327 : [0x58] = 0x0058, /* U+0058: LATIN CAPITAL LETTER X */
3328 : [0x59] = 0x0059, /* U+0059: LATIN CAPITAL LETTER Y */
3329 : [0x5A] = 0x005A, /* U+005A: LATIN CAPITAL LETTER Z */
3330 : [0x5B] = 0x005B, /* U+005B: LEFT SQUARE BRACKET */
3331 : [0x5C] = 0x005C, /* U+005C: REVERSE SOLIDUS */
3332 : [0x5D] = 0x005D, /* U+005D: RIGHT SQUARE BRACKET */
3333 : [0x5E] = 0x005E, /* U+005E: CIRCUMFLEX ACCENT */
3334 : [0x5F] = 0x005F, /* U+005F: LOW LINE */
3335 : [0x60] = 0x0060, /* U+0060: GRAVE ACCENT */
3336 : [0x61] = 0x0041, /* U+0061: LATIN SMALL LETTER A */
3337 : [0x62] = 0x0042, /* U+0062: LATIN SMALL LETTER B */
3338 : [0x63] = 0x0043, /* U+0063: LATIN SMALL LETTER C */
3339 : [0x64] = 0x0044, /* U+0064: LATIN SMALL LETTER D */
3340 : [0x65] = 0x0045, /* U+0065: LATIN SMALL LETTER E */
3341 : [0x66] = 0x0046, /* U+0066: LATIN SMALL LETTER F */
3342 : [0x67] = 0x0047, /* U+0067: LATIN SMALL LETTER G */
3343 : [0x68] = 0x0048, /* U+0068: LATIN SMALL LETTER H */
3344 : [0x69] = 0x0049, /* U+0069: LATIN SMALL LETTER I */
3345 : [0x6A] = 0x004A, /* U+006A: LATIN SMALL LETTER J */
3346 : [0x6B] = 0x004B, /* U+006B: LATIN SMALL LETTER K */
3347 : [0x6C] = 0x004C, /* U+006C: LATIN SMALL LETTER L */
3348 : [0x6D] = 0x004D, /* U+006D: LATIN SMALL LETTER M */
3349 : [0x6E] = 0x004E, /* U+006E: LATIN SMALL LETTER N */
3350 : [0x6F] = 0x004F, /* U+006F: LATIN SMALL LETTER O */
3351 : [0x70] = 0x0050, /* U+0070: LATIN SMALL LETTER P */
3352 : [0x71] = 0x0051, /* U+0071: LATIN SMALL LETTER Q */
3353 : [0x72] = 0x0052, /* U+0072: LATIN SMALL LETTER R */
3354 : [0x73] = 0x0053, /* U+0073: LATIN SMALL LETTER S */
3355 : [0x74] = 0x0054, /* U+0074: LATIN SMALL LETTER T */
3356 : [0x75] = 0x0055, /* U+0075: LATIN SMALL LETTER U */
3357 : [0x76] = 0x0056, /* U+0076: LATIN SMALL LETTER V */
3358 : [0x77] = 0x0057, /* U+0077: LATIN SMALL LETTER W */
3359 : [0x78] = 0x0058, /* U+0078: LATIN SMALL LETTER X */
3360 : [0x79] = 0x0059, /* U+0079: LATIN SMALL LETTER Y */
3361 : [0x7A] = 0x005A, /* U+007A: LATIN SMALL LETTER Z */
3362 : [0x7B] = 0x007B, /* U+007B: LEFT CURLY BRACKET */
3363 : [0x7C] = 0x007C, /* U+007C: VERTICAL LINE */
3364 : [0x7D] = 0x007D, /* U+007D: RIGHT CURLY BRACKET */
3365 : [0x7E] = 0x007E, /* U+007E: TILDE */
3366 : [0x7F] = 0x007F, /* U+007F: <control> */
3367 : [0xC2] = 256 - 0x80, /* 302 ... */
3368 : [256+0x35] = 0x039C, /* U+00B5: MICRO SIGN */
3369 : [0xC3] = 320 - 0x80, /* 303 ... */
3370 : [320+0x1F] = -74, /* U+00DF: LATIN SMALL LETTER SHARP S */
3371 : [320+0x20] = 0x00C0, /* U+00E0: LATIN SMALL LETTER A WITH GRAVE */
3372 : [320+0x21] = 0x00C1, /* U+00E1: LATIN SMALL LETTER A WITH ACUTE */
3373 : [320+0x22] = 0x00C2, /* U+00E2: LATIN SMALL LETTER A WITH CIRCUMFLEX */
3374 : [320+0x23] = 0x00C3, /* U+00E3: LATIN SMALL LETTER A WITH TILDE */
3375 : [320+0x24] = 0x00C4, /* U+00E4: LATIN SMALL LETTER A WITH DIAERESIS */
3376 : [320+0x25] = 0x00C5, /* U+00E5: LATIN SMALL LETTER A WITH RING ABOVE */
3377 : [320+0x26] = 0x00C6, /* U+00E6: LATIN SMALL LETTER AE */
3378 : [320+0x27] = 0x00C7, /* U+00E7: LATIN SMALL LETTER C WITH CEDILLA */
3379 : [320+0x28] = 0x00C8, /* U+00E8: LATIN SMALL LETTER E WITH GRAVE */
3380 : [320+0x29] = 0x00C9, /* U+00E9: LATIN SMALL LETTER E WITH ACUTE */
3381 : [320+0x2A] = 0x00CA, /* U+00EA: LATIN SMALL LETTER E WITH CIRCUMFLEX */
3382 : [320+0x2B] = 0x00CB, /* U+00EB: LATIN SMALL LETTER E WITH DIAERESIS */
3383 : [320+0x2C] = 0x00CC, /* U+00EC: LATIN SMALL LETTER I WITH GRAVE */
3384 : [320+0x2D] = 0x00CD, /* U+00ED: LATIN SMALL LETTER I WITH ACUTE */
3385 : [320+0x2E] = 0x00CE, /* U+00EE: LATIN SMALL LETTER I WITH CIRCUMFLEX */
3386 : [320+0x2F] = 0x00CF, /* U+00EF: LATIN SMALL LETTER I WITH DIAERESIS */
3387 : [320+0x30] = 0x00D0, /* U+00F0: LATIN SMALL LETTER ETH */
3388 : [320+0x31] = 0x00D1, /* U+00F1: LATIN SMALL LETTER N WITH TILDE */
3389 : [320+0x32] = 0x00D2, /* U+00F2: LATIN SMALL LETTER O WITH GRAVE */
3390 : [320+0x33] = 0x00D3, /* U+00F3: LATIN SMALL LETTER O WITH ACUTE */
3391 : [320+0x34] = 0x00D4, /* U+00F4: LATIN SMALL LETTER O WITH CIRCUMFLEX */
3392 : [320+0x35] = 0x00D5, /* U+00F5: LATIN SMALL LETTER O WITH TILDE */
3393 : [320+0x36] = 0x00D6, /* U+00F6: LATIN SMALL LETTER O WITH DIAERESIS */
3394 : [320+0x38] = 0x00D8, /* U+00F8: LATIN SMALL LETTER O WITH STROKE */
3395 : [320+0x39] = 0x00D9, /* U+00F9: LATIN SMALL LETTER U WITH GRAVE */
3396 : [320+0x3A] = 0x00DA, /* U+00FA: LATIN SMALL LETTER U WITH ACUTE */
3397 : [320+0x3B] = 0x00DB, /* U+00FB: LATIN SMALL LETTER U WITH CIRCUMFLEX */
3398 : [320+0x3C] = 0x00DC, /* U+00FC: LATIN SMALL LETTER U WITH DIAERESIS */
3399 : [320+0x3D] = 0x00DD, /* U+00FD: LATIN SMALL LETTER Y WITH ACUTE */
3400 : [320+0x3E] = 0x00DE, /* U+00FE: LATIN SMALL LETTER THORN */
3401 : [320+0x3F] = 0x0178, /* U+00FF: LATIN SMALL LETTER Y WITH DIAERESIS */
3402 : [0xC4] = 384 - 0x80, /* 304 ... */
3403 : [384+0x01] = 0x0100, /* U+0101: LATIN SMALL LETTER A WITH MACRON */
3404 : [384+0x03] = 0x0102, /* U+0103: LATIN SMALL LETTER A WITH BREVE */
3405 : [384+0x05] = 0x0104, /* U+0105: LATIN SMALL LETTER A WITH OGONEK */
3406 : [384+0x07] = 0x0106, /* U+0107: LATIN SMALL LETTER C WITH ACUTE */
3407 : [384+0x09] = 0x0108, /* U+0109: LATIN SMALL LETTER C WITH CIRCUMFLEX */
3408 : [384+0x0B] = 0x010A, /* U+010B: LATIN SMALL LETTER C WITH DOT ABOVE */
3409 : [384+0x0D] = 0x010C, /* U+010D: LATIN SMALL LETTER C WITH CARON */
3410 : [384+0x0F] = 0x010E, /* U+010F: LATIN SMALL LETTER D WITH CARON */
3411 : [384+0x11] = 0x0110, /* U+0111: LATIN SMALL LETTER D WITH STROKE */
3412 : [384+0x13] = 0x0112, /* U+0113: LATIN SMALL LETTER E WITH MACRON */
3413 : [384+0x15] = 0x0114, /* U+0115: LATIN SMALL LETTER E WITH BREVE */
3414 : [384+0x17] = 0x0116, /* U+0117: LATIN SMALL LETTER E WITH DOT ABOVE */
3415 : [384+0x19] = 0x0118, /* U+0119: LATIN SMALL LETTER E WITH OGONEK */
3416 : [384+0x1B] = 0x011A, /* U+011B: LATIN SMALL LETTER E WITH CARON */
3417 : [384+0x1D] = 0x011C, /* U+011D: LATIN SMALL LETTER G WITH CIRCUMFLEX */
3418 : [384+0x1F] = 0x011E, /* U+011F: LATIN SMALL LETTER G WITH BREVE */
3419 : [384+0x21] = 0x0120, /* U+0121: LATIN SMALL LETTER G WITH DOT ABOVE */
3420 : [384+0x23] = 0x0122, /* U+0123: LATIN SMALL LETTER G WITH CEDILLA */
3421 : [384+0x25] = 0x0124, /* U+0125: LATIN SMALL LETTER H WITH CIRCUMFLEX */
3422 : [384+0x27] = 0x0126, /* U+0127: LATIN SMALL LETTER H WITH STROKE */
3423 : [384+0x29] = 0x0128, /* U+0129: LATIN SMALL LETTER I WITH TILDE */
3424 : [384+0x2B] = 0x012A, /* U+012B: LATIN SMALL LETTER I WITH MACRON */
3425 : [384+0x2D] = 0x012C, /* U+012D: LATIN SMALL LETTER I WITH BREVE */
3426 : [384+0x2F] = 0x012E, /* U+012F: LATIN SMALL LETTER I WITH OGONEK */
3427 : [384+0x31] = 0x0049, /* U+0131: LATIN SMALL LETTER DOTLESS I */
3428 : [384+0x33] = 0x0132, /* U+0133: LATIN SMALL LIGATURE IJ */
3429 : [384+0x35] = 0x0134, /* U+0135: LATIN SMALL LETTER J WITH CIRCUMFLEX */
3430 : [384+0x37] = 0x0136, /* U+0137: LATIN SMALL LETTER K WITH CEDILLA */
3431 : [384+0x3A] = 0x0139, /* U+013A: LATIN SMALL LETTER L WITH ACUTE */
3432 : [384+0x3C] = 0x013B, /* U+013C: LATIN SMALL LETTER L WITH CEDILLA */
3433 : [384+0x3E] = 0x013D, /* U+013E: LATIN SMALL LETTER L WITH CARON */
3434 : [0xC5] = 448 - 0x80, /* 305 ... */
3435 : [448+0x00] = 0x013F, /* U+0140: LATIN SMALL LETTER L WITH MIDDLE DOT */
3436 : [448+0x02] = 0x0141, /* U+0142: LATIN SMALL LETTER L WITH STROKE */
3437 : [448+0x04] = 0x0143, /* U+0144: LATIN SMALL LETTER N WITH ACUTE */
3438 : [448+0x06] = 0x0145, /* U+0146: LATIN SMALL LETTER N WITH CEDILLA */
3439 : [448+0x08] = 0x0147, /* U+0148: LATIN SMALL LETTER N WITH CARON */
3440 : [448+0x09] = -87, /* U+0149: LATIN SMALL LETTER N PRECEDED BY APOSTROPHE */
3441 : [448+0x0B] = 0x014A, /* U+014B: LATIN SMALL LETTER ENG */
3442 : [448+0x0D] = 0x014C, /* U+014D: LATIN SMALL LETTER O WITH MACRON */
3443 : [448+0x0F] = 0x014E, /* U+014F: LATIN SMALL LETTER O WITH BREVE */
3444 : [448+0x11] = 0x0150, /* U+0151: LATIN SMALL LETTER O WITH DOUBLE ACUTE */
3445 : [448+0x13] = 0x0152, /* U+0153: LATIN SMALL LIGATURE OE */
3446 : [448+0x15] = 0x0154, /* U+0155: LATIN SMALL LETTER R WITH ACUTE */
3447 : [448+0x17] = 0x0156, /* U+0157: LATIN SMALL LETTER R WITH CEDILLA */
3448 : [448+0x19] = 0x0158, /* U+0159: LATIN SMALL LETTER R WITH CARON */
3449 : [448+0x1B] = 0x015A, /* U+015B: LATIN SMALL LETTER S WITH ACUTE */
3450 : [448+0x1D] = 0x015C, /* U+015D: LATIN SMALL LETTER S WITH CIRCUMFLEX */
3451 : [448+0x1F] = 0x015E, /* U+015F: LATIN SMALL LETTER S WITH CEDILLA */
3452 : [448+0x21] = 0x0160, /* U+0161: LATIN SMALL LETTER S WITH CARON */
3453 : [448+0x23] = 0x0162, /* U+0163: LATIN SMALL LETTER T WITH CEDILLA */
3454 : [448+0x25] = 0x0164, /* U+0165: LATIN SMALL LETTER T WITH CARON */
3455 : [448+0x27] = 0x0166, /* U+0167: LATIN SMALL LETTER T WITH STROKE */
3456 : [448+0x29] = 0x0168, /* U+0169: LATIN SMALL LETTER U WITH TILDE */
3457 : [448+0x2B] = 0x016A, /* U+016B: LATIN SMALL LETTER U WITH MACRON */
3458 : [448+0x2D] = 0x016C, /* U+016D: LATIN SMALL LETTER U WITH BREVE */
3459 : [448+0x2F] = 0x016E, /* U+016F: LATIN SMALL LETTER U WITH RING ABOVE */
3460 : [448+0x31] = 0x0170, /* U+0171: LATIN SMALL LETTER U WITH DOUBLE ACUTE */
3461 : [448+0x33] = 0x0172, /* U+0173: LATIN SMALL LETTER U WITH OGONEK */
3462 : [448+0x35] = 0x0174, /* U+0175: LATIN SMALL LETTER W WITH CIRCUMFLEX */
3463 : [448+0x37] = 0x0176, /* U+0177: LATIN SMALL LETTER Y WITH CIRCUMFLEX */
3464 : [448+0x3A] = 0x0179, /* U+017A: LATIN SMALL LETTER Z WITH ACUTE */
3465 : [448+0x3C] = 0x017B, /* U+017C: LATIN SMALL LETTER Z WITH DOT ABOVE */
3466 : [448+0x3E] = 0x017D, /* U+017E: LATIN SMALL LETTER Z WITH CARON */
3467 : [448+0x3F] = 0x0053, /* U+017F: LATIN SMALL LETTER LONG S */
3468 : [0xC6] = 512 - 0x80, /* 306 ... */
3469 : [512+0x00] = 0x0243, /* U+0180: LATIN SMALL LETTER B WITH STROKE */
3470 : [512+0x03] = 0x0182, /* U+0183: LATIN SMALL LETTER B WITH TOPBAR */
3471 : [512+0x05] = 0x0184, /* U+0185: LATIN SMALL LETTER TONE SIX */
3472 : [512+0x08] = 0x0187, /* U+0188: LATIN SMALL LETTER C WITH HOOK */
3473 : [512+0x0C] = 0x018B, /* U+018C: LATIN SMALL LETTER D WITH TOPBAR */
3474 : [512+0x12] = 0x0191, /* U+0192: LATIN SMALL LETTER F WITH HOOK */
3475 : [512+0x15] = 0x01F6, /* U+0195: LATIN SMALL LETTER HV */
3476 : [512+0x19] = 0x0198, /* U+0199: LATIN SMALL LETTER K WITH HOOK */
3477 : [512+0x1A] = 0x023D, /* U+019A: LATIN SMALL LETTER L WITH BAR */
3478 : [512+0x1E] = 0x0220, /* U+019E: LATIN SMALL LETTER N WITH LONG RIGHT LEG */
3479 : [512+0x21] = 0x01A0, /* U+01A1: LATIN SMALL LETTER O WITH HORN */
3480 : [512+0x23] = 0x01A2, /* U+01A3: LATIN SMALL LETTER OI */
3481 : [512+0x25] = 0x01A4, /* U+01A5: LATIN SMALL LETTER P WITH HOOK */
3482 : [512+0x28] = 0x01A7, /* U+01A8: LATIN SMALL LETTER TONE TWO */
3483 : [512+0x2D] = 0x01AC, /* U+01AD: LATIN SMALL LETTER T WITH HOOK */
3484 : [512+0x30] = 0x01AF, /* U+01B0: LATIN SMALL LETTER U WITH HORN */
3485 : [512+0x34] = 0x01B3, /* U+01B4: LATIN SMALL LETTER Y WITH HOOK */
3486 : [512+0x36] = 0x01B5, /* U+01B6: LATIN SMALL LETTER Z WITH STROKE */
3487 : [512+0x39] = 0x01B8, /* U+01B9: LATIN SMALL LETTER EZH REVERSED */
3488 : [512+0x3D] = 0x01BC, /* U+01BD: LATIN SMALL LETTER TONE FIVE */
3489 : [512+0x3F] = 0x01F7, /* U+01BF: LATIN LETTER WYNN */
3490 : [0xC7] = 576 - 0x80, /* 307 ... */
3491 : [576+0x05] = 0x01C4, /* U+01C5: LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON */
3492 : [576+0x06] = 0x01C4, /* U+01C6: LATIN SMALL LETTER DZ WITH CARON */
3493 : [576+0x08] = 0x01C7, /* U+01C8: LATIN CAPITAL LETTER L WITH SMALL LETTER J */
3494 : [576+0x09] = 0x01C7, /* U+01C9: LATIN SMALL LETTER LJ */
3495 : [576+0x0B] = 0x01CA, /* U+01CB: LATIN CAPITAL LETTER N WITH SMALL LETTER J */
3496 : [576+0x0C] = 0x01CA, /* U+01CC: LATIN SMALL LETTER NJ */
3497 : [576+0x0E] = 0x01CD, /* U+01CE: LATIN SMALL LETTER A WITH CARON */
3498 : [576+0x10] = 0x01CF, /* U+01D0: LATIN SMALL LETTER I WITH CARON */
3499 : [576+0x12] = 0x01D1, /* U+01D2: LATIN SMALL LETTER O WITH CARON */
3500 : [576+0x14] = 0x01D3, /* U+01D4: LATIN SMALL LETTER U WITH CARON */
3501 : [576+0x16] = 0x01D5, /* U+01D6: LATIN SMALL LETTER U WITH DIAERESIS AND MACRON */
3502 : [576+0x18] = 0x01D7, /* U+01D8: LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE */
3503 : [576+0x1A] = 0x01D9, /* U+01DA: LATIN SMALL LETTER U WITH DIAERESIS AND CARON */
3504 : [576+0x1C] = 0x01DB, /* U+01DC: LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE */
3505 : [576+0x1D] = 0x018E, /* U+01DD: LATIN SMALL LETTER TURNED E */
3506 : [576+0x1F] = 0x01DE, /* U+01DF: LATIN SMALL LETTER A WITH DIAERESIS AND MACRON */
3507 : [576+0x21] = 0x01E0, /* U+01E1: LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON */
3508 : [576+0x23] = 0x01E2, /* U+01E3: LATIN SMALL LETTER AE WITH MACRON */
3509 : [576+0x25] = 0x01E4, /* U+01E5: LATIN SMALL LETTER G WITH STROKE */
3510 : [576+0x27] = 0x01E6, /* U+01E7: LATIN SMALL LETTER G WITH CARON */
3511 : [576+0x29] = 0x01E8, /* U+01E9: LATIN SMALL LETTER K WITH CARON */
3512 : [576+0x2B] = 0x01EA, /* U+01EB: LATIN SMALL LETTER O WITH OGONEK */
3513 : [576+0x2D] = 0x01EC, /* U+01ED: LATIN SMALL LETTER O WITH OGONEK AND MACRON */
3514 : [576+0x2F] = 0x01EE, /* U+01EF: LATIN SMALL LETTER EZH WITH CARON */
3515 : [576+0x30] = -90, /* U+01F0: LATIN SMALL LETTER J WITH CARON */
3516 : [576+0x32] = 0x01F1, /* U+01F2: LATIN CAPITAL LETTER D WITH SMALL LETTER Z */
3517 : [576+0x33] = 0x01F1, /* U+01F3: LATIN SMALL LETTER DZ */
3518 : [576+0x35] = 0x01F4, /* U+01F5: LATIN SMALL LETTER G WITH ACUTE */
3519 : [576+0x39] = 0x01F8, /* U+01F9: LATIN SMALL LETTER N WITH GRAVE */
3520 : [576+0x3B] = 0x01FA, /* U+01FB: LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE */
3521 : [576+0x3D] = 0x01FC, /* U+01FD: LATIN SMALL LETTER AE WITH ACUTE */
3522 : [576+0x3F] = 0x01FE, /* U+01FF: LATIN SMALL LETTER O WITH STROKE AND ACUTE */
3523 : [0xC8] = 640 - 0x80, /* 310 ... */
3524 : [640+0x01] = 0x0200, /* U+0201: LATIN SMALL LETTER A WITH DOUBLE GRAVE */
3525 : [640+0x03] = 0x0202, /* U+0203: LATIN SMALL LETTER A WITH INVERTED BREVE */
3526 : [640+0x05] = 0x0204, /* U+0205: LATIN SMALL LETTER E WITH DOUBLE GRAVE */
3527 : [640+0x07] = 0x0206, /* U+0207: LATIN SMALL LETTER E WITH INVERTED BREVE */
3528 : [640+0x09] = 0x0208, /* U+0209: LATIN SMALL LETTER I WITH DOUBLE GRAVE */
3529 : [640+0x0B] = 0x020A, /* U+020B: LATIN SMALL LETTER I WITH INVERTED BREVE */
3530 : [640+0x0D] = 0x020C, /* U+020D: LATIN SMALL LETTER O WITH DOUBLE GRAVE */
3531 : [640+0x0F] = 0x020E, /* U+020F: LATIN SMALL LETTER O WITH INVERTED BREVE */
3532 : [640+0x11] = 0x0210, /* U+0211: LATIN SMALL LETTER R WITH DOUBLE GRAVE */
3533 : [640+0x13] = 0x0212, /* U+0213: LATIN SMALL LETTER R WITH INVERTED BREVE */
3534 : [640+0x15] = 0x0214, /* U+0215: LATIN SMALL LETTER U WITH DOUBLE GRAVE */
3535 : [640+0x17] = 0x0216, /* U+0217: LATIN SMALL LETTER U WITH INVERTED BREVE */
3536 : [640+0x19] = 0x0218, /* U+0219: LATIN SMALL LETTER S WITH COMMA BELOW */
3537 : [640+0x1B] = 0x021A, /* U+021B: LATIN SMALL LETTER T WITH COMMA BELOW */
3538 : [640+0x1D] = 0x021C, /* U+021D: LATIN SMALL LETTER YOGH */
3539 : [640+0x1F] = 0x021E, /* U+021F: LATIN SMALL LETTER H WITH CARON */
3540 : [640+0x23] = 0x0222, /* U+0223: LATIN SMALL LETTER OU */
3541 : [640+0x25] = 0x0224, /* U+0225: LATIN SMALL LETTER Z WITH HOOK */
3542 : [640+0x27] = 0x0226, /* U+0227: LATIN SMALL LETTER A WITH DOT ABOVE */
3543 : [640+0x29] = 0x0228, /* U+0229: LATIN SMALL LETTER E WITH CEDILLA */
3544 : [640+0x2B] = 0x022A, /* U+022B: LATIN SMALL LETTER O WITH DIAERESIS AND MACRON */
3545 : [640+0x2D] = 0x022C, /* U+022D: LATIN SMALL LETTER O WITH TILDE AND MACRON */
3546 : [640+0x2F] = 0x022E, /* U+022F: LATIN SMALL LETTER O WITH DOT ABOVE */
3547 : [640+0x31] = 0x0230, /* U+0231: LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON */
3548 : [640+0x33] = 0x0232, /* U+0233: LATIN SMALL LETTER Y WITH MACRON */
3549 : [640+0x3C] = 0x023B, /* U+023C: LATIN SMALL LETTER C WITH STROKE */
3550 : [640+0x3F] = 0x2C7E, /* U+023F: LATIN SMALL LETTER S WITH SWASH TAIL */
3551 : [0xC9] = 704 - 0x80, /* 311 ... */
3552 : [704+0x00] = 0x2C7F, /* U+0240: LATIN SMALL LETTER Z WITH SWASH TAIL */
3553 : [704+0x02] = 0x0241, /* U+0242: LATIN SMALL LETTER GLOTTAL STOP */
3554 : [704+0x07] = 0x0246, /* U+0247: LATIN SMALL LETTER E WITH STROKE */
3555 : [704+0x09] = 0x0248, /* U+0249: LATIN SMALL LETTER J WITH STROKE */
3556 : [704+0x0B] = 0x024A, /* U+024B: LATIN SMALL LETTER Q WITH HOOK TAIL */
3557 : [704+0x0D] = 0x024C, /* U+024D: LATIN SMALL LETTER R WITH STROKE */
3558 : [704+0x0F] = 0x024E, /* U+024F: LATIN SMALL LETTER Y WITH STROKE */
3559 : [704+0x10] = 0x2C6F, /* U+0250: LATIN SMALL LETTER TURNED A */
3560 : [704+0x11] = 0x2C6D, /* U+0251: LATIN SMALL LETTER ALPHA */
3561 : [704+0x12] = 0x2C70, /* U+0252: LATIN SMALL LETTER TURNED ALPHA */
3562 : [704+0x13] = 0x0181, /* U+0253: LATIN SMALL LETTER B WITH HOOK */
3563 : [704+0x14] = 0x0186, /* U+0254: LATIN SMALL LETTER OPEN O */
3564 : [704+0x16] = 0x0189, /* U+0256: LATIN SMALL LETTER D WITH TAIL */
3565 : [704+0x17] = 0x018A, /* U+0257: LATIN SMALL LETTER D WITH HOOK */
3566 : [704+0x19] = 0x018F, /* U+0259: LATIN SMALL LETTER SCHWA */
3567 : [704+0x1B] = 0x0190, /* U+025B: LATIN SMALL LETTER OPEN E */
3568 : [704+0x1C] = 0xA7AB, /* U+025C: LATIN SMALL LETTER REVERSED OPEN E */
3569 : [704+0x20] = 0x0193, /* U+0260: LATIN SMALL LETTER G WITH HOOK */
3570 : [704+0x21] = 0xA7AC, /* U+0261: LATIN SMALL LETTER SCRIPT G */
3571 : [704+0x23] = 0x0194, /* U+0263: LATIN SMALL LETTER GAMMA */
3572 : [704+0x25] = 0xA78D, /* U+0265: LATIN SMALL LETTER TURNED H */
3573 : [704+0x26] = 0xA7AA, /* U+0266: LATIN SMALL LETTER H WITH HOOK */
3574 : [704+0x28] = 0x0197, /* U+0268: LATIN SMALL LETTER I WITH STROKE */
3575 : [704+0x29] = 0x0196, /* U+0269: LATIN SMALL LETTER IOTA */
3576 : [704+0x2A] = 0xA7AE, /* U+026A: LATIN LETTER SMALL CAPITAL I */
3577 : [704+0x2B] = 0x2C62, /* U+026B: LATIN SMALL LETTER L WITH MIDDLE TILDE */
3578 : [704+0x2C] = 0xA7AD, /* U+026C: LATIN SMALL LETTER L WITH BELT */
3579 : [704+0x2F] = 0x019C, /* U+026F: LATIN SMALL LETTER TURNED M */
3580 : [704+0x31] = 0x2C6E, /* U+0271: LATIN SMALL LETTER M WITH HOOK */
3581 : [704+0x32] = 0x019D, /* U+0272: LATIN SMALL LETTER N WITH LEFT HOOK */
3582 : [704+0x35] = 0x019F, /* U+0275: LATIN SMALL LETTER BARRED O */
3583 : [704+0x3D] = 0x2C64, /* U+027D: LATIN SMALL LETTER R WITH TAIL */
3584 : [0xCA] = 768 - 0x80, /* 312 ... */
3585 : [768+0x00] = 0x01A6, /* U+0280: LATIN LETTER SMALL CAPITAL R */
3586 : [768+0x02] = 0xA7C5, /* U+0282: LATIN SMALL LETTER S WITH HOOK */
3587 : [768+0x03] = 0x01A9, /* U+0283: LATIN SMALL LETTER ESH */
3588 : [768+0x07] = 0xA7B1, /* U+0287: LATIN SMALL LETTER TURNED T */
3589 : [768+0x08] = 0x01AE, /* U+0288: LATIN SMALL LETTER T WITH RETROFLEX HOOK */
3590 : [768+0x09] = 0x0244, /* U+0289: LATIN SMALL LETTER U BAR */
3591 : [768+0x0A] = 0x01B1, /* U+028A: LATIN SMALL LETTER UPSILON */
3592 : [768+0x0B] = 0x01B2, /* U+028B: LATIN SMALL LETTER V WITH HOOK */
3593 : [768+0x0C] = 0x0245, /* U+028C: LATIN SMALL LETTER TURNED V */
3594 : [768+0x12] = 0x01B7, /* U+0292: LATIN SMALL LETTER EZH */
3595 : [768+0x1D] = 0xA7B2, /* U+029D: LATIN SMALL LETTER J WITH CROSSED-TAIL */
3596 : [768+0x1E] = 0xA7B0, /* U+029E: LATIN SMALL LETTER TURNED K */
3597 : [0xCD] = 832 - 0x80, /* 315 ... */
3598 : [832+0x05] = 0x0399, /* U+0345: COMBINING GREEK YPOGEGRAMMENI */
3599 : [832+0x31] = 0x0370, /* U+0371: GREEK SMALL LETTER HETA */
3600 : [832+0x33] = 0x0372, /* U+0373: GREEK SMALL LETTER ARCHAIC SAMPI */
3601 : [832+0x37] = 0x0376, /* U+0377: GREEK SMALL LETTER PAMPHYLIAN DIGAMMA */
3602 : [832+0x3B] = 0x03FD, /* U+037B: GREEK SMALL REVERSED LUNATE SIGMA SYMBOL */
3603 : [832+0x3C] = 0x03FE, /* U+037C: GREEK SMALL DOTTED LUNATE SIGMA SYMBOL */
3604 : [832+0x3D] = 0x03FF, /* U+037D: GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL */
3605 : [0xCE] = 896 - 0x80, /* 316 ... */
3606 : [896+0x10] = -88, /* U+0390: GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */
3607 : [896+0x2C] = 0x0386, /* U+03AC: GREEK SMALL LETTER ALPHA WITH TONOS */
3608 : [896+0x2D] = 0x0388, /* U+03AD: GREEK SMALL LETTER EPSILON WITH TONOS */
3609 : [896+0x2E] = 0x0389, /* U+03AE: GREEK SMALL LETTER ETA WITH TONOS */
3610 : [896+0x2F] = 0x038A, /* U+03AF: GREEK SMALL LETTER IOTA WITH TONOS */
3611 : [896+0x30] = -89, /* U+03B0: GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */
3612 : [896+0x31] = 0x0391, /* U+03B1: GREEK SMALL LETTER ALPHA */
3613 : [896+0x32] = 0x0392, /* U+03B2: GREEK SMALL LETTER BETA */
3614 : [896+0x33] = 0x0393, /* U+03B3: GREEK SMALL LETTER GAMMA */
3615 : [896+0x34] = 0x0394, /* U+03B4: GREEK SMALL LETTER DELTA */
3616 : [896+0x35] = 0x0395, /* U+03B5: GREEK SMALL LETTER EPSILON */
3617 : [896+0x36] = 0x0396, /* U+03B6: GREEK SMALL LETTER ZETA */
3618 : [896+0x37] = 0x0397, /* U+03B7: GREEK SMALL LETTER ETA */
3619 : [896+0x38] = 0x0398, /* U+03B8: GREEK SMALL LETTER THETA */
3620 : [896+0x39] = 0x0399, /* U+03B9: GREEK SMALL LETTER IOTA */
3621 : [896+0x3A] = 0x039A, /* U+03BA: GREEK SMALL LETTER KAPPA */
3622 : [896+0x3B] = 0x039B, /* U+03BB: GREEK SMALL LETTER LAMDA */
3623 : [896+0x3C] = 0x039C, /* U+03BC: GREEK SMALL LETTER MU */
3624 : [896+0x3D] = 0x039D, /* U+03BD: GREEK SMALL LETTER NU */
3625 : [896+0x3E] = 0x039E, /* U+03BE: GREEK SMALL LETTER XI */
3626 : [896+0x3F] = 0x039F, /* U+03BF: GREEK SMALL LETTER OMICRON */
3627 : [0xCF] = 960 - 0x80, /* 317 ... */
3628 : [960+0x00] = 0x03A0, /* U+03C0: GREEK SMALL LETTER PI */
3629 : [960+0x01] = 0x03A1, /* U+03C1: GREEK SMALL LETTER RHO */
3630 : [960+0x02] = 0x03A3, /* U+03C2: GREEK SMALL LETTER FINAL SIGMA */
3631 : [960+0x03] = 0x03A3, /* U+03C3: GREEK SMALL LETTER SIGMA */
3632 : [960+0x04] = 0x03A4, /* U+03C4: GREEK SMALL LETTER TAU */
3633 : [960+0x05] = 0x03A5, /* U+03C5: GREEK SMALL LETTER UPSILON */
3634 : [960+0x06] = 0x03A6, /* U+03C6: GREEK SMALL LETTER PHI */
3635 : [960+0x07] = 0x03A7, /* U+03C7: GREEK SMALL LETTER CHI */
3636 : [960+0x08] = 0x03A8, /* U+03C8: GREEK SMALL LETTER PSI */
3637 : [960+0x09] = 0x03A9, /* U+03C9: GREEK SMALL LETTER OMEGA */
3638 : [960+0x0A] = 0x03AA, /* U+03CA: GREEK SMALL LETTER IOTA WITH DIALYTIKA */
3639 : [960+0x0B] = 0x03AB, /* U+03CB: GREEK SMALL LETTER UPSILON WITH DIALYTIKA */
3640 : [960+0x0C] = 0x038C, /* U+03CC: GREEK SMALL LETTER OMICRON WITH TONOS */
3641 : [960+0x0D] = 0x038E, /* U+03CD: GREEK SMALL LETTER UPSILON WITH TONOS */
3642 : [960+0x0E] = 0x038F, /* U+03CE: GREEK SMALL LETTER OMEGA WITH TONOS */
3643 : [960+0x10] = 0x0392, /* U+03D0: GREEK BETA SYMBOL */
3644 : [960+0x11] = 0x0398, /* U+03D1: GREEK THETA SYMBOL */
3645 : [960+0x15] = 0x03A6, /* U+03D5: GREEK PHI SYMBOL */
3646 : [960+0x16] = 0x03A0, /* U+03D6: GREEK PI SYMBOL */
3647 : [960+0x17] = 0x03CF, /* U+03D7: GREEK KAI SYMBOL */
3648 : [960+0x19] = 0x03D8, /* U+03D9: GREEK SMALL LETTER ARCHAIC KOPPA */
3649 : [960+0x1B] = 0x03DA, /* U+03DB: GREEK SMALL LETTER STIGMA */
3650 : [960+0x1D] = 0x03DC, /* U+03DD: GREEK SMALL LETTER DIGAMMA */
3651 : [960+0x1F] = 0x03DE, /* U+03DF: GREEK SMALL LETTER KOPPA */
3652 : [960+0x21] = 0x03E0, /* U+03E1: GREEK SMALL LETTER SAMPI */
3653 : [960+0x23] = 0x03E2, /* U+03E3: COPTIC SMALL LETTER SHEI */
3654 : [960+0x25] = 0x03E4, /* U+03E5: COPTIC SMALL LETTER FEI */
3655 : [960+0x27] = 0x03E6, /* U+03E7: COPTIC SMALL LETTER KHEI */
3656 : [960+0x29] = 0x03E8, /* U+03E9: COPTIC SMALL LETTER HORI */
3657 : [960+0x2B] = 0x03EA, /* U+03EB: COPTIC SMALL LETTER GANGIA */
3658 : [960+0x2D] = 0x03EC, /* U+03ED: COPTIC SMALL LETTER SHIMA */
3659 : [960+0x2F] = 0x03EE, /* U+03EF: COPTIC SMALL LETTER DEI */
3660 : [960+0x30] = 0x039A, /* U+03F0: GREEK KAPPA SYMBOL */
3661 : [960+0x31] = 0x03A1, /* U+03F1: GREEK RHO SYMBOL */
3662 : [960+0x32] = 0x03F9, /* U+03F2: GREEK LUNATE SIGMA SYMBOL */
3663 : [960+0x33] = 0x037F, /* U+03F3: GREEK LETTER YOT */
3664 : [960+0x35] = 0x0395, /* U+03F5: GREEK LUNATE EPSILON SYMBOL */
3665 : [960+0x38] = 0x03F7, /* U+03F8: GREEK SMALL LETTER SHO */
3666 : [960+0x3B] = 0x03FA, /* U+03FB: GREEK SMALL LETTER SAN */
3667 : [0xD0] = 1024 - 0x80, /* 320 ... */
3668 : [1024+0x30] = 0x0410, /* U+0430: CYRILLIC SMALL LETTER A */
3669 : [1024+0x31] = 0x0411, /* U+0431: CYRILLIC SMALL LETTER BE */
3670 : [1024+0x32] = 0x0412, /* U+0432: CYRILLIC SMALL LETTER VE */
3671 : [1024+0x33] = 0x0413, /* U+0433: CYRILLIC SMALL LETTER GHE */
3672 : [1024+0x34] = 0x0414, /* U+0434: CYRILLIC SMALL LETTER DE */
3673 : [1024+0x35] = 0x0415, /* U+0435: CYRILLIC SMALL LETTER IE */
3674 : [1024+0x36] = 0x0416, /* U+0436: CYRILLIC SMALL LETTER ZHE */
3675 : [1024+0x37] = 0x0417, /* U+0437: CYRILLIC SMALL LETTER ZE */
3676 : [1024+0x38] = 0x0418, /* U+0438: CYRILLIC SMALL LETTER I */
3677 : [1024+0x39] = 0x0419, /* U+0439: CYRILLIC SMALL LETTER SHORT I */
3678 : [1024+0x3A] = 0x041A, /* U+043A: CYRILLIC SMALL LETTER KA */
3679 : [1024+0x3B] = 0x041B, /* U+043B: CYRILLIC SMALL LETTER EL */
3680 : [1024+0x3C] = 0x041C, /* U+043C: CYRILLIC SMALL LETTER EM */
3681 : [1024+0x3D] = 0x041D, /* U+043D: CYRILLIC SMALL LETTER EN */
3682 : [1024+0x3E] = 0x041E, /* U+043E: CYRILLIC SMALL LETTER O */
3683 : [1024+0x3F] = 0x041F, /* U+043F: CYRILLIC SMALL LETTER PE */
3684 : [0xD1] = 1088 - 0x80, /* 321 ... */
3685 : [1088+0x00] = 0x0420, /* U+0440: CYRILLIC SMALL LETTER ER */
3686 : [1088+0x01] = 0x0421, /* U+0441: CYRILLIC SMALL LETTER ES */
3687 : [1088+0x02] = 0x0422, /* U+0442: CYRILLIC SMALL LETTER TE */
3688 : [1088+0x03] = 0x0423, /* U+0443: CYRILLIC SMALL LETTER U */
3689 : [1088+0x04] = 0x0424, /* U+0444: CYRILLIC SMALL LETTER EF */
3690 : [1088+0x05] = 0x0425, /* U+0445: CYRILLIC SMALL LETTER HA */
3691 : [1088+0x06] = 0x0426, /* U+0446: CYRILLIC SMALL LETTER TSE */
3692 : [1088+0x07] = 0x0427, /* U+0447: CYRILLIC SMALL LETTER CHE */
3693 : [1088+0x08] = 0x0428, /* U+0448: CYRILLIC SMALL LETTER SHA */
3694 : [1088+0x09] = 0x0429, /* U+0449: CYRILLIC SMALL LETTER SHCHA */
3695 : [1088+0x0A] = 0x042A, /* U+044A: CYRILLIC SMALL LETTER HARD SIGN */
3696 : [1088+0x0B] = 0x042B, /* U+044B: CYRILLIC SMALL LETTER YERU */
3697 : [1088+0x0C] = 0x042C, /* U+044C: CYRILLIC SMALL LETTER SOFT SIGN */
3698 : [1088+0x0D] = 0x042D, /* U+044D: CYRILLIC SMALL LETTER E */
3699 : [1088+0x0E] = 0x042E, /* U+044E: CYRILLIC SMALL LETTER YU */
3700 : [1088+0x0F] = 0x042F, /* U+044F: CYRILLIC SMALL LETTER YA */
3701 : [1088+0x10] = 0x0400, /* U+0450: CYRILLIC SMALL LETTER IE WITH GRAVE */
3702 : [1088+0x11] = 0x0401, /* U+0451: CYRILLIC SMALL LETTER IO */
3703 : [1088+0x12] = 0x0402, /* U+0452: CYRILLIC SMALL LETTER DJE */
3704 : [1088+0x13] = 0x0403, /* U+0453: CYRILLIC SMALL LETTER GJE */
3705 : [1088+0x14] = 0x0404, /* U+0454: CYRILLIC SMALL LETTER UKRAINIAN IE */
3706 : [1088+0x15] = 0x0405, /* U+0455: CYRILLIC SMALL LETTER DZE */
3707 : [1088+0x16] = 0x0406, /* U+0456: CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */
3708 : [1088+0x17] = 0x0407, /* U+0457: CYRILLIC SMALL LETTER YI */
3709 : [1088+0x18] = 0x0408, /* U+0458: CYRILLIC SMALL LETTER JE */
3710 : [1088+0x19] = 0x0409, /* U+0459: CYRILLIC SMALL LETTER LJE */
3711 : [1088+0x1A] = 0x040A, /* U+045A: CYRILLIC SMALL LETTER NJE */
3712 : [1088+0x1B] = 0x040B, /* U+045B: CYRILLIC SMALL LETTER TSHE */
3713 : [1088+0x1C] = 0x040C, /* U+045C: CYRILLIC SMALL LETTER KJE */
3714 : [1088+0x1D] = 0x040D, /* U+045D: CYRILLIC SMALL LETTER I WITH GRAVE */
3715 : [1088+0x1E] = 0x040E, /* U+045E: CYRILLIC SMALL LETTER SHORT U */
3716 : [1088+0x1F] = 0x040F, /* U+045F: CYRILLIC SMALL LETTER DZHE */
3717 : [1088+0x21] = 0x0460, /* U+0461: CYRILLIC SMALL LETTER OMEGA */
3718 : [1088+0x23] = 0x0462, /* U+0463: CYRILLIC SMALL LETTER YAT */
3719 : [1088+0x25] = 0x0464, /* U+0465: CYRILLIC SMALL LETTER IOTIFIED E */
3720 : [1088+0x27] = 0x0466, /* U+0467: CYRILLIC SMALL LETTER LITTLE YUS */
3721 : [1088+0x29] = 0x0468, /* U+0469: CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS */
3722 : [1088+0x2B] = 0x046A, /* U+046B: CYRILLIC SMALL LETTER BIG YUS */
3723 : [1088+0x2D] = 0x046C, /* U+046D: CYRILLIC SMALL LETTER IOTIFIED BIG YUS */
3724 : [1088+0x2F] = 0x046E, /* U+046F: CYRILLIC SMALL LETTER KSI */
3725 : [1088+0x31] = 0x0470, /* U+0471: CYRILLIC SMALL LETTER PSI */
3726 : [1088+0x33] = 0x0472, /* U+0473: CYRILLIC SMALL LETTER FITA */
3727 : [1088+0x35] = 0x0474, /* U+0475: CYRILLIC SMALL LETTER IZHITSA */
3728 : [1088+0x37] = 0x0476, /* U+0477: CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT */
3729 : [1088+0x39] = 0x0478, /* U+0479: CYRILLIC SMALL LETTER UK */
3730 : [1088+0x3B] = 0x047A, /* U+047B: CYRILLIC SMALL LETTER ROUND OMEGA */
3731 : [1088+0x3D] = 0x047C, /* U+047D: CYRILLIC SMALL LETTER OMEGA WITH TITLO */
3732 : [1088+0x3F] = 0x047E, /* U+047F: CYRILLIC SMALL LETTER OT */
3733 : [0xD2] = 1152 - 0x80, /* 322 ... */
3734 : [1152+0x01] = 0x0480, /* U+0481: CYRILLIC SMALL LETTER KOPPA */
3735 : [1152+0x0B] = 0x048A, /* U+048B: CYRILLIC SMALL LETTER SHORT I WITH TAIL */
3736 : [1152+0x0D] = 0x048C, /* U+048D: CYRILLIC SMALL LETTER SEMISOFT SIGN */
3737 : [1152+0x0F] = 0x048E, /* U+048F: CYRILLIC SMALL LETTER ER WITH TICK */
3738 : [1152+0x11] = 0x0490, /* U+0491: CYRILLIC SMALL LETTER GHE WITH UPTURN */
3739 : [1152+0x13] = 0x0492, /* U+0493: CYRILLIC SMALL LETTER GHE WITH STROKE */
3740 : [1152+0x15] = 0x0494, /* U+0495: CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK */
3741 : [1152+0x17] = 0x0496, /* U+0497: CYRILLIC SMALL LETTER ZHE WITH DESCENDER */
3742 : [1152+0x19] = 0x0498, /* U+0499: CYRILLIC SMALL LETTER ZE WITH DESCENDER */
3743 : [1152+0x1B] = 0x049A, /* U+049B: CYRILLIC SMALL LETTER KA WITH DESCENDER */
3744 : [1152+0x1D] = 0x049C, /* U+049D: CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE */
3745 : [1152+0x1F] = 0x049E, /* U+049F: CYRILLIC SMALL LETTER KA WITH STROKE */
3746 : [1152+0x21] = 0x04A0, /* U+04A1: CYRILLIC SMALL LETTER BASHKIR KA */
3747 : [1152+0x23] = 0x04A2, /* U+04A3: CYRILLIC SMALL LETTER EN WITH DESCENDER */
3748 : [1152+0x25] = 0x04A4, /* U+04A5: CYRILLIC SMALL LIGATURE EN GHE */
3749 : [1152+0x27] = 0x04A6, /* U+04A7: CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK */
3750 : [1152+0x29] = 0x04A8, /* U+04A9: CYRILLIC SMALL LETTER ABKHASIAN HA */
3751 : [1152+0x2B] = 0x04AA, /* U+04AB: CYRILLIC SMALL LETTER ES WITH DESCENDER */
3752 : [1152+0x2D] = 0x04AC, /* U+04AD: CYRILLIC SMALL LETTER TE WITH DESCENDER */
3753 : [1152+0x2F] = 0x04AE, /* U+04AF: CYRILLIC SMALL LETTER STRAIGHT U */
3754 : [1152+0x31] = 0x04B0, /* U+04B1: CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE */
3755 : [1152+0x33] = 0x04B2, /* U+04B3: CYRILLIC SMALL LETTER HA WITH DESCENDER */
3756 : [1152+0x35] = 0x04B4, /* U+04B5: CYRILLIC SMALL LIGATURE TE TSE */
3757 : [1152+0x37] = 0x04B6, /* U+04B7: CYRILLIC SMALL LETTER CHE WITH DESCENDER */
3758 : [1152+0x39] = 0x04B8, /* U+04B9: CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE */
3759 : [1152+0x3B] = 0x04BA, /* U+04BB: CYRILLIC SMALL LETTER SHHA */
3760 : [1152+0x3D] = 0x04BC, /* U+04BD: CYRILLIC SMALL LETTER ABKHASIAN CHE */
3761 : [1152+0x3F] = 0x04BE, /* U+04BF: CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER */
3762 : [0xD3] = 1216 - 0x80, /* 323 ... */
3763 : [1216+0x02] = 0x04C1, /* U+04C2: CYRILLIC SMALL LETTER ZHE WITH BREVE */
3764 : [1216+0x04] = 0x04C3, /* U+04C4: CYRILLIC SMALL LETTER KA WITH HOOK */
3765 : [1216+0x06] = 0x04C5, /* U+04C6: CYRILLIC SMALL LETTER EL WITH TAIL */
3766 : [1216+0x08] = 0x04C7, /* U+04C8: CYRILLIC SMALL LETTER EN WITH HOOK */
3767 : [1216+0x0A] = 0x04C9, /* U+04CA: CYRILLIC SMALL LETTER EN WITH TAIL */
3768 : [1216+0x0C] = 0x04CB, /* U+04CC: CYRILLIC SMALL LETTER KHAKASSIAN CHE */
3769 : [1216+0x0E] = 0x04CD, /* U+04CE: CYRILLIC SMALL LETTER EM WITH TAIL */
3770 : [1216+0x0F] = 0x04C0, /* U+04CF: CYRILLIC SMALL LETTER PALOCHKA */
3771 : [1216+0x11] = 0x04D0, /* U+04D1: CYRILLIC SMALL LETTER A WITH BREVE */
3772 : [1216+0x13] = 0x04D2, /* U+04D3: CYRILLIC SMALL LETTER A WITH DIAERESIS */
3773 : [1216+0x15] = 0x04D4, /* U+04D5: CYRILLIC SMALL LIGATURE A IE */
3774 : [1216+0x17] = 0x04D6, /* U+04D7: CYRILLIC SMALL LETTER IE WITH BREVE */
3775 : [1216+0x19] = 0x04D8, /* U+04D9: CYRILLIC SMALL LETTER SCHWA */
3776 : [1216+0x1B] = 0x04DA, /* U+04DB: CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS */
3777 : [1216+0x1D] = 0x04DC, /* U+04DD: CYRILLIC SMALL LETTER ZHE WITH DIAERESIS */
3778 : [1216+0x1F] = 0x04DE, /* U+04DF: CYRILLIC SMALL LETTER ZE WITH DIAERESIS */
3779 : [1216+0x21] = 0x04E0, /* U+04E1: CYRILLIC SMALL LETTER ABKHASIAN DZE */
3780 : [1216+0x23] = 0x04E2, /* U+04E3: CYRILLIC SMALL LETTER I WITH MACRON */
3781 : [1216+0x25] = 0x04E4, /* U+04E5: CYRILLIC SMALL LETTER I WITH DIAERESIS */
3782 : [1216+0x27] = 0x04E6, /* U+04E7: CYRILLIC SMALL LETTER O WITH DIAERESIS */
3783 : [1216+0x29] = 0x04E8, /* U+04E9: CYRILLIC SMALL LETTER BARRED O */
3784 : [1216+0x2B] = 0x04EA, /* U+04EB: CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS */
3785 : [1216+0x2D] = 0x04EC, /* U+04ED: CYRILLIC SMALL LETTER E WITH DIAERESIS */
3786 : [1216+0x2F] = 0x04EE, /* U+04EF: CYRILLIC SMALL LETTER U WITH MACRON */
3787 : [1216+0x31] = 0x04F0, /* U+04F1: CYRILLIC SMALL LETTER U WITH DIAERESIS */
3788 : [1216+0x33] = 0x04F2, /* U+04F3: CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE */
3789 : [1216+0x35] = 0x04F4, /* U+04F5: CYRILLIC SMALL LETTER CHE WITH DIAERESIS */
3790 : [1216+0x37] = 0x04F6, /* U+04F7: CYRILLIC SMALL LETTER GHE WITH DESCENDER */
3791 : [1216+0x39] = 0x04F8, /* U+04F9: CYRILLIC SMALL LETTER YERU WITH DIAERESIS */
3792 : [1216+0x3B] = 0x04FA, /* U+04FB: CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK */
3793 : [1216+0x3D] = 0x04FC, /* U+04FD: CYRILLIC SMALL LETTER HA WITH HOOK */
3794 : [1216+0x3F] = 0x04FE, /* U+04FF: CYRILLIC SMALL LETTER HA WITH STROKE */
3795 : [0xD4] = 1280 - 0x80, /* 324 ... */
3796 : [1280+0x01] = 0x0500, /* U+0501: CYRILLIC SMALL LETTER KOMI DE */
3797 : [1280+0x03] = 0x0502, /* U+0503: CYRILLIC SMALL LETTER KOMI DJE */
3798 : [1280+0x05] = 0x0504, /* U+0505: CYRILLIC SMALL LETTER KOMI ZJE */
3799 : [1280+0x07] = 0x0506, /* U+0507: CYRILLIC SMALL LETTER KOMI DZJE */
3800 : [1280+0x09] = 0x0508, /* U+0509: CYRILLIC SMALL LETTER KOMI LJE */
3801 : [1280+0x0B] = 0x050A, /* U+050B: CYRILLIC SMALL LETTER KOMI NJE */
3802 : [1280+0x0D] = 0x050C, /* U+050D: CYRILLIC SMALL LETTER KOMI SJE */
3803 : [1280+0x0F] = 0x050E, /* U+050F: CYRILLIC SMALL LETTER KOMI TJE */
3804 : [1280+0x11] = 0x0510, /* U+0511: CYRILLIC SMALL LETTER REVERSED ZE */
3805 : [1280+0x13] = 0x0512, /* U+0513: CYRILLIC SMALL LETTER EL WITH HOOK */
3806 : [1280+0x15] = 0x0514, /* U+0515: CYRILLIC SMALL LETTER LHA */
3807 : [1280+0x17] = 0x0516, /* U+0517: CYRILLIC SMALL LETTER RHA */
3808 : [1280+0x19] = 0x0518, /* U+0519: CYRILLIC SMALL LETTER YAE */
3809 : [1280+0x1B] = 0x051A, /* U+051B: CYRILLIC SMALL LETTER QA */
3810 : [1280+0x1D] = 0x051C, /* U+051D: CYRILLIC SMALL LETTER WE */
3811 : [1280+0x1F] = 0x051E, /* U+051F: CYRILLIC SMALL LETTER ALEUT KA */
3812 : [1280+0x21] = 0x0520, /* U+0521: CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK */
3813 : [1280+0x23] = 0x0522, /* U+0523: CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK */
3814 : [1280+0x25] = 0x0524, /* U+0525: CYRILLIC SMALL LETTER PE WITH DESCENDER */
3815 : [1280+0x27] = 0x0526, /* U+0527: CYRILLIC SMALL LETTER SHHA WITH DESCENDER */
3816 : [1280+0x29] = 0x0528, /* U+0529: CYRILLIC SMALL LETTER EN WITH LEFT HOOK */
3817 : [1280+0x2B] = 0x052A, /* U+052B: CYRILLIC SMALL LETTER DZZHE */
3818 : [1280+0x2D] = 0x052C, /* U+052D: CYRILLIC SMALL LETTER DCHE */
3819 : [1280+0x2F] = 0x052E, /* U+052F: CYRILLIC SMALL LETTER EL WITH DESCENDER */
3820 : [0xD5] = 1344 - 0x80, /* 325 ... */
3821 : [1344+0x21] = 0x0531, /* U+0561: ARMENIAN SMALL LETTER AYB */
3822 : [1344+0x22] = 0x0532, /* U+0562: ARMENIAN SMALL LETTER BEN */
3823 : [1344+0x23] = 0x0533, /* U+0563: ARMENIAN SMALL LETTER GIM */
3824 : [1344+0x24] = 0x0534, /* U+0564: ARMENIAN SMALL LETTER DA */
3825 : [1344+0x25] = 0x0535, /* U+0565: ARMENIAN SMALL LETTER ECH */
3826 : [1344+0x26] = 0x0536, /* U+0566: ARMENIAN SMALL LETTER ZA */
3827 : [1344+0x27] = 0x0537, /* U+0567: ARMENIAN SMALL LETTER EH */
3828 : [1344+0x28] = 0x0538, /* U+0568: ARMENIAN SMALL LETTER ET */
3829 : [1344+0x29] = 0x0539, /* U+0569: ARMENIAN SMALL LETTER TO */
3830 : [1344+0x2A] = 0x053A, /* U+056A: ARMENIAN SMALL LETTER ZHE */
3831 : [1344+0x2B] = 0x053B, /* U+056B: ARMENIAN SMALL LETTER INI */
3832 : [1344+0x2C] = 0x053C, /* U+056C: ARMENIAN SMALL LETTER LIWN */
3833 : [1344+0x2D] = 0x053D, /* U+056D: ARMENIAN SMALL LETTER XEH */
3834 : [1344+0x2E] = 0x053E, /* U+056E: ARMENIAN SMALL LETTER CA */
3835 : [1344+0x2F] = 0x053F, /* U+056F: ARMENIAN SMALL LETTER KEN */
3836 : [1344+0x30] = 0x0540, /* U+0570: ARMENIAN SMALL LETTER HO */
3837 : [1344+0x31] = 0x0541, /* U+0571: ARMENIAN SMALL LETTER JA */
3838 : [1344+0x32] = 0x0542, /* U+0572: ARMENIAN SMALL LETTER GHAD */
3839 : [1344+0x33] = 0x0543, /* U+0573: ARMENIAN SMALL LETTER CHEH */
3840 : [1344+0x34] = 0x0544, /* U+0574: ARMENIAN SMALL LETTER MEN */
3841 : [1344+0x35] = 0x0545, /* U+0575: ARMENIAN SMALL LETTER YI */
3842 : [1344+0x36] = 0x0546, /* U+0576: ARMENIAN SMALL LETTER NOW */
3843 : [1344+0x37] = 0x0547, /* U+0577: ARMENIAN SMALL LETTER SHA */
3844 : [1344+0x38] = 0x0548, /* U+0578: ARMENIAN SMALL LETTER VO */
3845 : [1344+0x39] = 0x0549, /* U+0579: ARMENIAN SMALL LETTER CHA */
3846 : [1344+0x3A] = 0x054A, /* U+057A: ARMENIAN SMALL LETTER PEH */
3847 : [1344+0x3B] = 0x054B, /* U+057B: ARMENIAN SMALL LETTER JHEH */
3848 : [1344+0x3C] = 0x054C, /* U+057C: ARMENIAN SMALL LETTER RA */
3849 : [1344+0x3D] = 0x054D, /* U+057D: ARMENIAN SMALL LETTER SEH */
3850 : [1344+0x3E] = 0x054E, /* U+057E: ARMENIAN SMALL LETTER VEW */
3851 : [1344+0x3F] = 0x054F, /* U+057F: ARMENIAN SMALL LETTER TIWN */
3852 : [0xD6] = 1408 - 0x80, /* 326 ... */
3853 : [1408+0x00] = 0x0550, /* U+0580: ARMENIAN SMALL LETTER REH */
3854 : [1408+0x01] = 0x0551, /* U+0581: ARMENIAN SMALL LETTER CO */
3855 : [1408+0x02] = 0x0552, /* U+0582: ARMENIAN SMALL LETTER YIWN */
3856 : [1408+0x03] = 0x0553, /* U+0583: ARMENIAN SMALL LETTER PIWR */
3857 : [1408+0x04] = 0x0554, /* U+0584: ARMENIAN SMALL LETTER KEH */
3858 : [1408+0x05] = 0x0555, /* U+0585: ARMENIAN SMALL LETTER OH */
3859 : [1408+0x06] = 0x0556, /* U+0586: ARMENIAN SMALL LETTER FEH */
3860 : [1408+0x07] = -81, /* U+0587: ARMENIAN SMALL LIGATURE ECH YIWN */
3861 : [0xE1] = 1472 - 0x80, /* 341 ... */
3862 : [1472+0x03] = 1536 - 0x80, /* 341 203 ... */
3863 : [1536+0x10] = 0x1C90, /* U+10D0: GEORGIAN LETTER AN */
3864 : [1536+0x11] = 0x1C91, /* U+10D1: GEORGIAN LETTER BAN */
3865 : [1536+0x12] = 0x1C92, /* U+10D2: GEORGIAN LETTER GAN */
3866 : [1536+0x13] = 0x1C93, /* U+10D3: GEORGIAN LETTER DON */
3867 : [1536+0x14] = 0x1C94, /* U+10D4: GEORGIAN LETTER EN */
3868 : [1536+0x15] = 0x1C95, /* U+10D5: GEORGIAN LETTER VIN */
3869 : [1536+0x16] = 0x1C96, /* U+10D6: GEORGIAN LETTER ZEN */
3870 : [1536+0x17] = 0x1C97, /* U+10D7: GEORGIAN LETTER TAN */
3871 : [1536+0x18] = 0x1C98, /* U+10D8: GEORGIAN LETTER IN */
3872 : [1536+0x19] = 0x1C99, /* U+10D9: GEORGIAN LETTER KAN */
3873 : [1536+0x1A] = 0x1C9A, /* U+10DA: GEORGIAN LETTER LAS */
3874 : [1536+0x1B] = 0x1C9B, /* U+10DB: GEORGIAN LETTER MAN */
3875 : [1536+0x1C] = 0x1C9C, /* U+10DC: GEORGIAN LETTER NAR */
3876 : [1536+0x1D] = 0x1C9D, /* U+10DD: GEORGIAN LETTER ON */
3877 : [1536+0x1E] = 0x1C9E, /* U+10DE: GEORGIAN LETTER PAR */
3878 : [1536+0x1F] = 0x1C9F, /* U+10DF: GEORGIAN LETTER ZHAR */
3879 : [1536+0x20] = 0x1CA0, /* U+10E0: GEORGIAN LETTER RAE */
3880 : [1536+0x21] = 0x1CA1, /* U+10E1: GEORGIAN LETTER SAN */
3881 : [1536+0x22] = 0x1CA2, /* U+10E2: GEORGIAN LETTER TAR */
3882 : [1536+0x23] = 0x1CA3, /* U+10E3: GEORGIAN LETTER UN */
3883 : [1536+0x24] = 0x1CA4, /* U+10E4: GEORGIAN LETTER PHAR */
3884 : [1536+0x25] = 0x1CA5, /* U+10E5: GEORGIAN LETTER KHAR */
3885 : [1536+0x26] = 0x1CA6, /* U+10E6: GEORGIAN LETTER GHAN */
3886 : [1536+0x27] = 0x1CA7, /* U+10E7: GEORGIAN LETTER QAR */
3887 : [1536+0x28] = 0x1CA8, /* U+10E8: GEORGIAN LETTER SHIN */
3888 : [1536+0x29] = 0x1CA9, /* U+10E9: GEORGIAN LETTER CHIN */
3889 : [1536+0x2A] = 0x1CAA, /* U+10EA: GEORGIAN LETTER CAN */
3890 : [1536+0x2B] = 0x1CAB, /* U+10EB: GEORGIAN LETTER JIL */
3891 : [1536+0x2C] = 0x1CAC, /* U+10EC: GEORGIAN LETTER CIL */
3892 : [1536+0x2D] = 0x1CAD, /* U+10ED: GEORGIAN LETTER CHAR */
3893 : [1536+0x2E] = 0x1CAE, /* U+10EE: GEORGIAN LETTER XAN */
3894 : [1536+0x2F] = 0x1CAF, /* U+10EF: GEORGIAN LETTER JHAN */
3895 : [1536+0x30] = 0x1CB0, /* U+10F0: GEORGIAN LETTER HAE */
3896 : [1536+0x31] = 0x1CB1, /* U+10F1: GEORGIAN LETTER HE */
3897 : [1536+0x32] = 0x1CB2, /* U+10F2: GEORGIAN LETTER HIE */
3898 : [1536+0x33] = 0x1CB3, /* U+10F3: GEORGIAN LETTER WE */
3899 : [1536+0x34] = 0x1CB4, /* U+10F4: GEORGIAN LETTER HAR */
3900 : [1536+0x35] = 0x1CB5, /* U+10F5: GEORGIAN LETTER HOE */
3901 : [1536+0x36] = 0x1CB6, /* U+10F6: GEORGIAN LETTER FI */
3902 : [1536+0x37] = 0x1CB7, /* U+10F7: GEORGIAN LETTER YN */
3903 : [1536+0x38] = 0x1CB8, /* U+10F8: GEORGIAN LETTER ELIFI */
3904 : [1536+0x39] = 0x1CB9, /* U+10F9: GEORGIAN LETTER TURNED GAN */
3905 : [1536+0x3A] = 0x1CBA, /* U+10FA: GEORGIAN LETTER AIN */
3906 : [1536+0x3D] = 0x1CBD, /* U+10FD: GEORGIAN LETTER AEN */
3907 : [1536+0x3E] = 0x1CBE, /* U+10FE: GEORGIAN LETTER HARD SIGN */
3908 : [1536+0x3F] = 0x1CBF, /* U+10FF: GEORGIAN LETTER LABIAL SIGN */
3909 : [1472+0x0F] = 1600 - 0x80, /* 341 217 ... */
3910 : [1600+0x38] = 0x13F0, /* U+13F8: CHEROKEE SMALL LETTER YE */
3911 : [1600+0x39] = 0x13F1, /* U+13F9: CHEROKEE SMALL LETTER YI */
3912 : [1600+0x3A] = 0x13F2, /* U+13FA: CHEROKEE SMALL LETTER YO */
3913 : [1600+0x3B] = 0x13F3, /* U+13FB: CHEROKEE SMALL LETTER YU */
3914 : [1600+0x3C] = 0x13F4, /* U+13FC: CHEROKEE SMALL LETTER YV */
3915 : [1600+0x3D] = 0x13F5, /* U+13FD: CHEROKEE SMALL LETTER MV */
3916 : [1472+0x32] = 1664 - 0x80, /* 341 262 ... */
3917 : [1664+0x00] = 0x0412, /* U+1C80: CYRILLIC SMALL LETTER ROUNDED VE */
3918 : [1664+0x01] = 0x0414, /* U+1C81: CYRILLIC SMALL LETTER LONG-LEGGED DE */
3919 : [1664+0x02] = 0x041E, /* U+1C82: CYRILLIC SMALL LETTER NARROW O */
3920 : [1664+0x03] = 0x0421, /* U+1C83: CYRILLIC SMALL LETTER WIDE ES */
3921 : [1664+0x04] = 0x0422, /* U+1C84: CYRILLIC SMALL LETTER TALL TE */
3922 : [1664+0x05] = 0x0422, /* U+1C85: CYRILLIC SMALL LETTER THREE-LEGGED TE */
3923 : [1664+0x06] = 0x042A, /* U+1C86: CYRILLIC SMALL LETTER TALL HARD SIGN */
3924 : [1664+0x07] = 0x0462, /* U+1C87: CYRILLIC SMALL LETTER TALL YAT */
3925 : [1664+0x08] = 0xA64A, /* U+1C88: CYRILLIC SMALL LETTER UNBLENDED UK */
3926 : [1472+0x35] = 1728 - 0x80, /* 341 265 ... */
3927 : [1728+0x39] = 0xA77D, /* U+1D79: LATIN SMALL LETTER INSULAR G */
3928 : [1728+0x3D] = 0x2C63, /* U+1D7D: LATIN SMALL LETTER P WITH STROKE */
3929 : [1472+0x36] = 1792 - 0x80, /* 341 266 ... */
3930 : [1792+0x0E] = 0xA7C6, /* U+1D8E: LATIN SMALL LETTER Z WITH PALATAL HOOK */
3931 : [1472+0x38] = 1856 - 0x80, /* 341 270 ... */
3932 : [1856+0x01] = 0x1E00, /* U+1E01: LATIN SMALL LETTER A WITH RING BELOW */
3933 : [1856+0x03] = 0x1E02, /* U+1E03: LATIN SMALL LETTER B WITH DOT ABOVE */
3934 : [1856+0x05] = 0x1E04, /* U+1E05: LATIN SMALL LETTER B WITH DOT BELOW */
3935 : [1856+0x07] = 0x1E06, /* U+1E07: LATIN SMALL LETTER B WITH LINE BELOW */
3936 : [1856+0x09] = 0x1E08, /* U+1E09: LATIN SMALL LETTER C WITH CEDILLA AND ACUTE */
3937 : [1856+0x0B] = 0x1E0A, /* U+1E0B: LATIN SMALL LETTER D WITH DOT ABOVE */
3938 : [1856+0x0D] = 0x1E0C, /* U+1E0D: LATIN SMALL LETTER D WITH DOT BELOW */
3939 : [1856+0x0F] = 0x1E0E, /* U+1E0F: LATIN SMALL LETTER D WITH LINE BELOW */
3940 : [1856+0x11] = 0x1E10, /* U+1E11: LATIN SMALL LETTER D WITH CEDILLA */
3941 : [1856+0x13] = 0x1E12, /* U+1E13: LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW */
3942 : [1856+0x15] = 0x1E14, /* U+1E15: LATIN SMALL LETTER E WITH MACRON AND GRAVE */
3943 : [1856+0x17] = 0x1E16, /* U+1E17: LATIN SMALL LETTER E WITH MACRON AND ACUTE */
3944 : [1856+0x19] = 0x1E18, /* U+1E19: LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW */
3945 : [1856+0x1B] = 0x1E1A, /* U+1E1B: LATIN SMALL LETTER E WITH TILDE BELOW */
3946 : [1856+0x1D] = 0x1E1C, /* U+1E1D: LATIN SMALL LETTER E WITH CEDILLA AND BREVE */
3947 : [1856+0x1F] = 0x1E1E, /* U+1E1F: LATIN SMALL LETTER F WITH DOT ABOVE */
3948 : [1856+0x21] = 0x1E20, /* U+1E21: LATIN SMALL LETTER G WITH MACRON */
3949 : [1856+0x23] = 0x1E22, /* U+1E23: LATIN SMALL LETTER H WITH DOT ABOVE */
3950 : [1856+0x25] = 0x1E24, /* U+1E25: LATIN SMALL LETTER H WITH DOT BELOW */
3951 : [1856+0x27] = 0x1E26, /* U+1E27: LATIN SMALL LETTER H WITH DIAERESIS */
3952 : [1856+0x29] = 0x1E28, /* U+1E29: LATIN SMALL LETTER H WITH CEDILLA */
3953 : [1856+0x2B] = 0x1E2A, /* U+1E2B: LATIN SMALL LETTER H WITH BREVE BELOW */
3954 : [1856+0x2D] = 0x1E2C, /* U+1E2D: LATIN SMALL LETTER I WITH TILDE BELOW */
3955 : [1856+0x2F] = 0x1E2E, /* U+1E2F: LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE */
3956 : [1856+0x31] = 0x1E30, /* U+1E31: LATIN SMALL LETTER K WITH ACUTE */
3957 : [1856+0x33] = 0x1E32, /* U+1E33: LATIN SMALL LETTER K WITH DOT BELOW */
3958 : [1856+0x35] = 0x1E34, /* U+1E35: LATIN SMALL LETTER K WITH LINE BELOW */
3959 : [1856+0x37] = 0x1E36, /* U+1E37: LATIN SMALL LETTER L WITH DOT BELOW */
3960 : [1856+0x39] = 0x1E38, /* U+1E39: LATIN SMALL LETTER L WITH DOT BELOW AND MACRON */
3961 : [1856+0x3B] = 0x1E3A, /* U+1E3B: LATIN SMALL LETTER L WITH LINE BELOW */
3962 : [1856+0x3D] = 0x1E3C, /* U+1E3D: LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW */
3963 : [1856+0x3F] = 0x1E3E, /* U+1E3F: LATIN SMALL LETTER M WITH ACUTE */
3964 : [1472+0x39] = 1920 - 0x80, /* 341 271 ... */
3965 : [1920+0x01] = 0x1E40, /* U+1E41: LATIN SMALL LETTER M WITH DOT ABOVE */
3966 : [1920+0x03] = 0x1E42, /* U+1E43: LATIN SMALL LETTER M WITH DOT BELOW */
3967 : [1920+0x05] = 0x1E44, /* U+1E45: LATIN SMALL LETTER N WITH DOT ABOVE */
3968 : [1920+0x07] = 0x1E46, /* U+1E47: LATIN SMALL LETTER N WITH DOT BELOW */
3969 : [1920+0x09] = 0x1E48, /* U+1E49: LATIN SMALL LETTER N WITH LINE BELOW */
3970 : [1920+0x0B] = 0x1E4A, /* U+1E4B: LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW */
3971 : [1920+0x0D] = 0x1E4C, /* U+1E4D: LATIN SMALL LETTER O WITH TILDE AND ACUTE */
3972 : [1920+0x0F] = 0x1E4E, /* U+1E4F: LATIN SMALL LETTER O WITH TILDE AND DIAERESIS */
3973 : [1920+0x11] = 0x1E50, /* U+1E51: LATIN SMALL LETTER O WITH MACRON AND GRAVE */
3974 : [1920+0x13] = 0x1E52, /* U+1E53: LATIN SMALL LETTER O WITH MACRON AND ACUTE */
3975 : [1920+0x15] = 0x1E54, /* U+1E55: LATIN SMALL LETTER P WITH ACUTE */
3976 : [1920+0x17] = 0x1E56, /* U+1E57: LATIN SMALL LETTER P WITH DOT ABOVE */
3977 : [1920+0x19] = 0x1E58, /* U+1E59: LATIN SMALL LETTER R WITH DOT ABOVE */
3978 : [1920+0x1B] = 0x1E5A, /* U+1E5B: LATIN SMALL LETTER R WITH DOT BELOW */
3979 : [1920+0x1D] = 0x1E5C, /* U+1E5D: LATIN SMALL LETTER R WITH DOT BELOW AND MACRON */
3980 : [1920+0x1F] = 0x1E5E, /* U+1E5F: LATIN SMALL LETTER R WITH LINE BELOW */
3981 : [1920+0x21] = 0x1E60, /* U+1E61: LATIN SMALL LETTER S WITH DOT ABOVE */
3982 : [1920+0x23] = 0x1E62, /* U+1E63: LATIN SMALL LETTER S WITH DOT BELOW */
3983 : [1920+0x25] = 0x1E64, /* U+1E65: LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE */
3984 : [1920+0x27] = 0x1E66, /* U+1E67: LATIN SMALL LETTER S WITH CARON AND DOT ABOVE */
3985 : [1920+0x29] = 0x1E68, /* U+1E69: LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE */
3986 : [1920+0x2B] = 0x1E6A, /* U+1E6B: LATIN SMALL LETTER T WITH DOT ABOVE */
3987 : [1920+0x2D] = 0x1E6C, /* U+1E6D: LATIN SMALL LETTER T WITH DOT BELOW */
3988 : [1920+0x2F] = 0x1E6E, /* U+1E6F: LATIN SMALL LETTER T WITH LINE BELOW */
3989 : [1920+0x31] = 0x1E70, /* U+1E71: LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW */
3990 : [1920+0x33] = 0x1E72, /* U+1E73: LATIN SMALL LETTER U WITH DIAERESIS BELOW */
3991 : [1920+0x35] = 0x1E74, /* U+1E75: LATIN SMALL LETTER U WITH TILDE BELOW */
3992 : [1920+0x37] = 0x1E76, /* U+1E77: LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW */
3993 : [1920+0x39] = 0x1E78, /* U+1E79: LATIN SMALL LETTER U WITH TILDE AND ACUTE */
3994 : [1920+0x3B] = 0x1E7A, /* U+1E7B: LATIN SMALL LETTER U WITH MACRON AND DIAERESIS */
3995 : [1920+0x3D] = 0x1E7C, /* U+1E7D: LATIN SMALL LETTER V WITH TILDE */
3996 : [1920+0x3F] = 0x1E7E, /* U+1E7F: LATIN SMALL LETTER V WITH DOT BELOW */
3997 : [1472+0x3A] = 1984 - 0x80, /* 341 272 ... */
3998 : [1984+0x01] = 0x1E80, /* U+1E81: LATIN SMALL LETTER W WITH GRAVE */
3999 : [1984+0x03] = 0x1E82, /* U+1E83: LATIN SMALL LETTER W WITH ACUTE */
4000 : [1984+0x05] = 0x1E84, /* U+1E85: LATIN SMALL LETTER W WITH DIAERESIS */
4001 : [1984+0x07] = 0x1E86, /* U+1E87: LATIN SMALL LETTER W WITH DOT ABOVE */
4002 : [1984+0x09] = 0x1E88, /* U+1E89: LATIN SMALL LETTER W WITH DOT BELOW */
4003 : [1984+0x0B] = 0x1E8A, /* U+1E8B: LATIN SMALL LETTER X WITH DOT ABOVE */
4004 : [1984+0x0D] = 0x1E8C, /* U+1E8D: LATIN SMALL LETTER X WITH DIAERESIS */
4005 : [1984+0x0F] = 0x1E8E, /* U+1E8F: LATIN SMALL LETTER Y WITH DOT ABOVE */
4006 : [1984+0x11] = 0x1E90, /* U+1E91: LATIN SMALL LETTER Z WITH CIRCUMFLEX */
4007 : [1984+0x13] = 0x1E92, /* U+1E93: LATIN SMALL LETTER Z WITH DOT BELOW */
4008 : [1984+0x15] = 0x1E94, /* U+1E95: LATIN SMALL LETTER Z WITH LINE BELOW */
4009 : [1984+0x16] = -91, /* U+1E96: LATIN SMALL LETTER H WITH LINE BELOW */
4010 : [1984+0x17] = -92, /* U+1E97: LATIN SMALL LETTER T WITH DIAERESIS */
4011 : [1984+0x18] = -93, /* U+1E98: LATIN SMALL LETTER W WITH RING ABOVE */
4012 : [1984+0x19] = -94, /* U+1E99: LATIN SMALL LETTER Y WITH RING ABOVE */
4013 : [1984+0x1A] = -95, /* U+1E9A: LATIN SMALL LETTER A WITH RIGHT HALF RING */
4014 : [1984+0x1B] = 0x1E60, /* U+1E9B: LATIN SMALL LETTER LONG S WITH DOT ABOVE */
4015 : [1984+0x21] = 0x1EA0, /* U+1EA1: LATIN SMALL LETTER A WITH DOT BELOW */
4016 : [1984+0x23] = 0x1EA2, /* U+1EA3: LATIN SMALL LETTER A WITH HOOK ABOVE */
4017 : [1984+0x25] = 0x1EA4, /* U+1EA5: LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE */
4018 : [1984+0x27] = 0x1EA6, /* U+1EA7: LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE */
4019 : [1984+0x29] = 0x1EA8, /* U+1EA9: LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE */
4020 : [1984+0x2B] = 0x1EAA, /* U+1EAB: LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE */
4021 : [1984+0x2D] = 0x1EAC, /* U+1EAD: LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW */
4022 : [1984+0x2F] = 0x1EAE, /* U+1EAF: LATIN SMALL LETTER A WITH BREVE AND ACUTE */
4023 : [1984+0x31] = 0x1EB0, /* U+1EB1: LATIN SMALL LETTER A WITH BREVE AND GRAVE */
4024 : [1984+0x33] = 0x1EB2, /* U+1EB3: LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE */
4025 : [1984+0x35] = 0x1EB4, /* U+1EB5: LATIN SMALL LETTER A WITH BREVE AND TILDE */
4026 : [1984+0x37] = 0x1EB6, /* U+1EB7: LATIN SMALL LETTER A WITH BREVE AND DOT BELOW */
4027 : [1984+0x39] = 0x1EB8, /* U+1EB9: LATIN SMALL LETTER E WITH DOT BELOW */
4028 : [1984+0x3B] = 0x1EBA, /* U+1EBB: LATIN SMALL LETTER E WITH HOOK ABOVE */
4029 : [1984+0x3D] = 0x1EBC, /* U+1EBD: LATIN SMALL LETTER E WITH TILDE */
4030 : [1984+0x3F] = 0x1EBE, /* U+1EBF: LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE */
4031 : [1472+0x3B] = 2048 - 0x80, /* 341 273 ... */
4032 : [2048+0x01] = 0x1EC0, /* U+1EC1: LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE */
4033 : [2048+0x03] = 0x1EC2, /* U+1EC3: LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE */
4034 : [2048+0x05] = 0x1EC4, /* U+1EC5: LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE */
4035 : [2048+0x07] = 0x1EC6, /* U+1EC7: LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW */
4036 : [2048+0x09] = 0x1EC8, /* U+1EC9: LATIN SMALL LETTER I WITH HOOK ABOVE */
4037 : [2048+0x0B] = 0x1ECA, /* U+1ECB: LATIN SMALL LETTER I WITH DOT BELOW */
4038 : [2048+0x0D] = 0x1ECC, /* U+1ECD: LATIN SMALL LETTER O WITH DOT BELOW */
4039 : [2048+0x0F] = 0x1ECE, /* U+1ECF: LATIN SMALL LETTER O WITH HOOK ABOVE */
4040 : [2048+0x11] = 0x1ED0, /* U+1ED1: LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE */
4041 : [2048+0x13] = 0x1ED2, /* U+1ED3: LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE */
4042 : [2048+0x15] = 0x1ED4, /* U+1ED5: LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE */
4043 : [2048+0x17] = 0x1ED6, /* U+1ED7: LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE */
4044 : [2048+0x19] = 0x1ED8, /* U+1ED9: LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW */
4045 : [2048+0x1B] = 0x1EDA, /* U+1EDB: LATIN SMALL LETTER O WITH HORN AND ACUTE */
4046 : [2048+0x1D] = 0x1EDC, /* U+1EDD: LATIN SMALL LETTER O WITH HORN AND GRAVE */
4047 : [2048+0x1F] = 0x1EDE, /* U+1EDF: LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE */
4048 : [2048+0x21] = 0x1EE0, /* U+1EE1: LATIN SMALL LETTER O WITH HORN AND TILDE */
4049 : [2048+0x23] = 0x1EE2, /* U+1EE3: LATIN SMALL LETTER O WITH HORN AND DOT BELOW */
4050 : [2048+0x25] = 0x1EE4, /* U+1EE5: LATIN SMALL LETTER U WITH DOT BELOW */
4051 : [2048+0x27] = 0x1EE6, /* U+1EE7: LATIN SMALL LETTER U WITH HOOK ABOVE */
4052 : [2048+0x29] = 0x1EE8, /* U+1EE9: LATIN SMALL LETTER U WITH HORN AND ACUTE */
4053 : [2048+0x2B] = 0x1EEA, /* U+1EEB: LATIN SMALL LETTER U WITH HORN AND GRAVE */
4054 : [2048+0x2D] = 0x1EEC, /* U+1EED: LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE */
4055 : [2048+0x2F] = 0x1EEE, /* U+1EEF: LATIN SMALL LETTER U WITH HORN AND TILDE */
4056 : [2048+0x31] = 0x1EF0, /* U+1EF1: LATIN SMALL LETTER U WITH HORN AND DOT BELOW */
4057 : [2048+0x33] = 0x1EF2, /* U+1EF3: LATIN SMALL LETTER Y WITH GRAVE */
4058 : [2048+0x35] = 0x1EF4, /* U+1EF5: LATIN SMALL LETTER Y WITH DOT BELOW */
4059 : [2048+0x37] = 0x1EF6, /* U+1EF7: LATIN SMALL LETTER Y WITH HOOK ABOVE */
4060 : [2048+0x39] = 0x1EF8, /* U+1EF9: LATIN SMALL LETTER Y WITH TILDE */
4061 : [2048+0x3B] = 0x1EFA, /* U+1EFB: LATIN SMALL LETTER MIDDLE-WELSH LL */
4062 : [2048+0x3D] = 0x1EFC, /* U+1EFD: LATIN SMALL LETTER MIDDLE-WELSH V */
4063 : [2048+0x3F] = 0x1EFE, /* U+1EFF: LATIN SMALL LETTER Y WITH LOOP */
4064 : [1472+0x3C] = 2112 - 0x80, /* 341 274 ... */
4065 : [2112+0x00] = 0x1F08, /* U+1F00: GREEK SMALL LETTER ALPHA WITH PSILI */
4066 : [2112+0x01] = 0x1F09, /* U+1F01: GREEK SMALL LETTER ALPHA WITH DASIA */
4067 : [2112+0x02] = 0x1F0A, /* U+1F02: GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA */
4068 : [2112+0x03] = 0x1F0B, /* U+1F03: GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA */
4069 : [2112+0x04] = 0x1F0C, /* U+1F04: GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA */
4070 : [2112+0x05] = 0x1F0D, /* U+1F05: GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA */
4071 : [2112+0x06] = 0x1F0E, /* U+1F06: GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI */
4072 : [2112+0x07] = 0x1F0F, /* U+1F07: GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI */
4073 : [2112+0x10] = 0x1F18, /* U+1F10: GREEK SMALL LETTER EPSILON WITH PSILI */
4074 : [2112+0x11] = 0x1F19, /* U+1F11: GREEK SMALL LETTER EPSILON WITH DASIA */
4075 : [2112+0x12] = 0x1F1A, /* U+1F12: GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA */
4076 : [2112+0x13] = 0x1F1B, /* U+1F13: GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA */
4077 : [2112+0x14] = 0x1F1C, /* U+1F14: GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA */
4078 : [2112+0x15] = 0x1F1D, /* U+1F15: GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA */
4079 : [2112+0x20] = 0x1F28, /* U+1F20: GREEK SMALL LETTER ETA WITH PSILI */
4080 : [2112+0x21] = 0x1F29, /* U+1F21: GREEK SMALL LETTER ETA WITH DASIA */
4081 : [2112+0x22] = 0x1F2A, /* U+1F22: GREEK SMALL LETTER ETA WITH PSILI AND VARIA */
4082 : [2112+0x23] = 0x1F2B, /* U+1F23: GREEK SMALL LETTER ETA WITH DASIA AND VARIA */
4083 : [2112+0x24] = 0x1F2C, /* U+1F24: GREEK SMALL LETTER ETA WITH PSILI AND OXIA */
4084 : [2112+0x25] = 0x1F2D, /* U+1F25: GREEK SMALL LETTER ETA WITH DASIA AND OXIA */
4085 : [2112+0x26] = 0x1F2E, /* U+1F26: GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI */
4086 : [2112+0x27] = 0x1F2F, /* U+1F27: GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI */
4087 : [2112+0x30] = 0x1F38, /* U+1F30: GREEK SMALL LETTER IOTA WITH PSILI */
4088 : [2112+0x31] = 0x1F39, /* U+1F31: GREEK SMALL LETTER IOTA WITH DASIA */
4089 : [2112+0x32] = 0x1F3A, /* U+1F32: GREEK SMALL LETTER IOTA WITH PSILI AND VARIA */
4090 : [2112+0x33] = 0x1F3B, /* U+1F33: GREEK SMALL LETTER IOTA WITH DASIA AND VARIA */
4091 : [2112+0x34] = 0x1F3C, /* U+1F34: GREEK SMALL LETTER IOTA WITH PSILI AND OXIA */
4092 : [2112+0x35] = 0x1F3D, /* U+1F35: GREEK SMALL LETTER IOTA WITH DASIA AND OXIA */
4093 : [2112+0x36] = 0x1F3E, /* U+1F36: GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI */
4094 : [2112+0x37] = 0x1F3F, /* U+1F37: GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI */
4095 : [1472+0x3D] = 2176 - 0x80, /* 341 275 ... */
4096 : [2176+0x00] = 0x1F48, /* U+1F40: GREEK SMALL LETTER OMICRON WITH PSILI */
4097 : [2176+0x01] = 0x1F49, /* U+1F41: GREEK SMALL LETTER OMICRON WITH DASIA */
4098 : [2176+0x02] = 0x1F4A, /* U+1F42: GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA */
4099 : [2176+0x03] = 0x1F4B, /* U+1F43: GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA */
4100 : [2176+0x04] = 0x1F4C, /* U+1F44: GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA */
4101 : [2176+0x05] = 0x1F4D, /* U+1F45: GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA */
4102 : [2176+0x10] = -96, /* U+1F50: GREEK SMALL LETTER UPSILON WITH PSILI */
4103 : [2176+0x11] = 0x1F59, /* U+1F51: GREEK SMALL LETTER UPSILON WITH DASIA */
4104 : [2176+0x12] = -97, /* U+1F52: GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA */
4105 : [2176+0x13] = 0x1F5B, /* U+1F53: GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA */
4106 : [2176+0x14] = -98, /* U+1F54: GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA */
4107 : [2176+0x15] = 0x1F5D, /* U+1F55: GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA */
4108 : [2176+0x16] = -99, /* U+1F56: GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI */
4109 : [2176+0x17] = 0x1F5F, /* U+1F57: GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI */
4110 : [2176+0x20] = 0x1F68, /* U+1F60: GREEK SMALL LETTER OMEGA WITH PSILI */
4111 : [2176+0x21] = 0x1F69, /* U+1F61: GREEK SMALL LETTER OMEGA WITH DASIA */
4112 : [2176+0x22] = 0x1F6A, /* U+1F62: GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA */
4113 : [2176+0x23] = 0x1F6B, /* U+1F63: GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA */
4114 : [2176+0x24] = 0x1F6C, /* U+1F64: GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA */
4115 : [2176+0x25] = 0x1F6D, /* U+1F65: GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA */
4116 : [2176+0x26] = 0x1F6E, /* U+1F66: GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI */
4117 : [2176+0x27] = 0x1F6F, /* U+1F67: GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI */
4118 : [2176+0x30] = 0x1FBA, /* U+1F70: GREEK SMALL LETTER ALPHA WITH VARIA */
4119 : [2176+0x31] = 0x1FBB, /* U+1F71: GREEK SMALL LETTER ALPHA WITH OXIA */
4120 : [2176+0x32] = 0x1FC8, /* U+1F72: GREEK SMALL LETTER EPSILON WITH VARIA */
4121 : [2176+0x33] = 0x1FC9, /* U+1F73: GREEK SMALL LETTER EPSILON WITH OXIA */
4122 : [2176+0x34] = 0x1FCA, /* U+1F74: GREEK SMALL LETTER ETA WITH VARIA */
4123 : [2176+0x35] = 0x1FCB, /* U+1F75: GREEK SMALL LETTER ETA WITH OXIA */
4124 : [2176+0x36] = 0x1FDA, /* U+1F76: GREEK SMALL LETTER IOTA WITH VARIA */
4125 : [2176+0x37] = 0x1FDB, /* U+1F77: GREEK SMALL LETTER IOTA WITH OXIA */
4126 : [2176+0x38] = 0x1FF8, /* U+1F78: GREEK SMALL LETTER OMICRON WITH VARIA */
4127 : [2176+0x39] = 0x1FF9, /* U+1F79: GREEK SMALL LETTER OMICRON WITH OXIA */
4128 : [2176+0x3A] = 0x1FEA, /* U+1F7A: GREEK SMALL LETTER UPSILON WITH VARIA */
4129 : [2176+0x3B] = 0x1FEB, /* U+1F7B: GREEK SMALL LETTER UPSILON WITH OXIA */
4130 : [2176+0x3C] = 0x1FFA, /* U+1F7C: GREEK SMALL LETTER OMEGA WITH VARIA */
4131 : [2176+0x3D] = 0x1FFB, /* U+1F7D: GREEK SMALL LETTER OMEGA WITH OXIA */
4132 : [1472+0x3E] = 2240 - 0x80, /* 341 276 ... */
4133 : [2240+0x00] = 0x1F88, /* U+1F80: GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI */
4134 : [2240+0x01] = 0x1F89, /* U+1F81: GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI */
4135 : [2240+0x02] = 0x1F8A, /* U+1F82: GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI */
4136 : [2240+0x03] = 0x1F8B, /* U+1F83: GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI */
4137 : [2240+0x04] = 0x1F8C, /* U+1F84: GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI */
4138 : [2240+0x05] = 0x1F8D, /* U+1F85: GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI */
4139 : [2240+0x06] = 0x1F8E, /* U+1F86: GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */
4140 : [2240+0x07] = 0x1F8F, /* U+1F87: GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */
4141 : [2240+0x08] = -110, /* U+1F88: GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI */
4142 : [2240+0x09] = -111, /* U+1F89: GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI */
4143 : [2240+0x0A] = -112, /* U+1F8A: GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI */
4144 : [2240+0x0B] = -113, /* U+1F8B: GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI */
4145 : [2240+0x0C] = -114, /* U+1F8C: GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI */
4146 : [2240+0x0D] = -115, /* U+1F8D: GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI */
4147 : [2240+0x0E] = -116, /* U+1F8E: GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */
4148 : [2240+0x0F] = -117, /* U+1F8F: GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */
4149 : [2240+0x10] = 0x1F98, /* U+1F90: GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI */
4150 : [2240+0x11] = 0x1F99, /* U+1F91: GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI */
4151 : [2240+0x12] = 0x1F9A, /* U+1F92: GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI */
4152 : [2240+0x13] = 0x1F9B, /* U+1F93: GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI */
4153 : [2240+0x14] = 0x1F9C, /* U+1F94: GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI */
4154 : [2240+0x15] = 0x1F9D, /* U+1F95: GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI */
4155 : [2240+0x16] = 0x1F9E, /* U+1F96: GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */
4156 : [2240+0x17] = 0x1F9F, /* U+1F97: GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */
4157 : [2240+0x18] = -118, /* U+1F98: GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI */
4158 : [2240+0x19] = -119, /* U+1F99: GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI */
4159 : [2240+0x1A] = -120, /* U+1F9A: GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI */
4160 : [2240+0x1B] = -121, /* U+1F9B: GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI */
4161 : [2240+0x1C] = -122, /* U+1F9C: GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI */
4162 : [2240+0x1D] = -123, /* U+1F9D: GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI */
4163 : [2240+0x1E] = -124, /* U+1F9E: GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */
4164 : [2240+0x1F] = -125, /* U+1F9F: GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */
4165 : [2240+0x20] = 0x1FA8, /* U+1FA0: GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI */
4166 : [2240+0x21] = 0x1FA9, /* U+1FA1: GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI */
4167 : [2240+0x22] = 0x1FAA, /* U+1FA2: GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI */
4168 : [2240+0x23] = 0x1FAB, /* U+1FA3: GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI */
4169 : [2240+0x24] = 0x1FAC, /* U+1FA4: GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI */
4170 : [2240+0x25] = 0x1FAD, /* U+1FA5: GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI */
4171 : [2240+0x26] = 0x1FAE, /* U+1FA6: GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */
4172 : [2240+0x27] = 0x1FAF, /* U+1FA7: GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */
4173 : [2240+0x28] = -126, /* U+1FA8: GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI */
4174 : [2240+0x29] = -127, /* U+1FA9: GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI */
4175 : [2240+0x2A] = -128, /* U+1FAA: GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI */
4176 : [2240+0x2B] = -129, /* U+1FAB: GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI */
4177 : [2240+0x2C] = -130, /* U+1FAC: GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI */
4178 : [2240+0x2D] = -131, /* U+1FAD: GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI */
4179 : [2240+0x2E] = -132, /* U+1FAE: GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */
4180 : [2240+0x2F] = -133, /* U+1FAF: GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */
4181 : [2240+0x30] = 0x1FB8, /* U+1FB0: GREEK SMALL LETTER ALPHA WITH VRACHY */
4182 : [2240+0x31] = 0x1FB9, /* U+1FB1: GREEK SMALL LETTER ALPHA WITH MACRON */
4183 : [2240+0x32] = -137, /* U+1FB2: GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI */
4184 : [2240+0x33] = 0x1FBC, /* U+1FB3: GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI */
4185 : [2240+0x34] = -138, /* U+1FB4: GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI */
4186 : [2240+0x36] = -100, /* U+1FB6: GREEK SMALL LETTER ALPHA WITH PERISPOMENI */
4187 : [2240+0x37] = -143, /* U+1FB7: GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI */
4188 : [2240+0x3C] = -134, /* U+1FBC: GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI */
4189 : [2240+0x3E] = 0x0399, /* U+1FBE: GREEK PROSGEGRAMMENI */
4190 : [1472+0x3F] = 2304 - 0x80, /* 341 277 ... */
4191 : [2304+0x02] = -139, /* U+1FC2: GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI */
4192 : [2304+0x03] = 0x1FCC, /* U+1FC3: GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI */
4193 : [2304+0x04] = -140, /* U+1FC4: GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI */
4194 : [2304+0x06] = -101, /* U+1FC6: GREEK SMALL LETTER ETA WITH PERISPOMENI */
4195 : [2304+0x07] = -144, /* U+1FC7: GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI */
4196 : [2304+0x0C] = -135, /* U+1FCC: GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI */
4197 : [2304+0x10] = 0x1FD8, /* U+1FD0: GREEK SMALL LETTER IOTA WITH VRACHY */
4198 : [2304+0x11] = 0x1FD9, /* U+1FD1: GREEK SMALL LETTER IOTA WITH MACRON */
4199 : [2304+0x12] = -102, /* U+1FD2: GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA */
4200 : [2304+0x13] = -88, /* U+1FD3: GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA */
4201 : [2304+0x16] = -103, /* U+1FD6: GREEK SMALL LETTER IOTA WITH PERISPOMENI */
4202 : [2304+0x17] = -104, /* U+1FD7: GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI */
4203 : [2304+0x20] = 0x1FE8, /* U+1FE0: GREEK SMALL LETTER UPSILON WITH VRACHY */
4204 : [2304+0x21] = 0x1FE9, /* U+1FE1: GREEK SMALL LETTER UPSILON WITH MACRON */
4205 : [2304+0x22] = -105, /* U+1FE2: GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA */
4206 : [2304+0x23] = -89, /* U+1FE3: GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA */
4207 : [2304+0x24] = -106, /* U+1FE4: GREEK SMALL LETTER RHO WITH PSILI */
4208 : [2304+0x25] = 0x1FEC, /* U+1FE5: GREEK SMALL LETTER RHO WITH DASIA */
4209 : [2304+0x26] = -107, /* U+1FE6: GREEK SMALL LETTER UPSILON WITH PERISPOMENI */
4210 : [2304+0x27] = -108, /* U+1FE7: GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI */
4211 : [2304+0x32] = -141, /* U+1FF2: GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI */
4212 : [2304+0x33] = 0x1FFC, /* U+1FF3: GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI */
4213 : [2304+0x34] = -142, /* U+1FF4: GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI */
4214 : [2304+0x36] = -109, /* U+1FF6: GREEK SMALL LETTER OMEGA WITH PERISPOMENI */
4215 : [2304+0x37] = -145, /* U+1FF7: GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI */
4216 : [2304+0x3C] = -136, /* U+1FFC: GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI */
4217 : [0xE2] = 2368 - 0x80, /* 342 ... */
4218 : [2368+0x05] = 2432 - 0x80, /* 342 205 ... */
4219 : [2432+0x0E] = 0x2132, /* U+214E: TURNED SMALL F */
4220 : [2432+0x30] = 0x2160, /* U+2170: SMALL ROMAN NUMERAL ONE */
4221 : [2432+0x31] = 0x2161, /* U+2171: SMALL ROMAN NUMERAL TWO */
4222 : [2432+0x32] = 0x2162, /* U+2172: SMALL ROMAN NUMERAL THREE */
4223 : [2432+0x33] = 0x2163, /* U+2173: SMALL ROMAN NUMERAL FOUR */
4224 : [2432+0x34] = 0x2164, /* U+2174: SMALL ROMAN NUMERAL FIVE */
4225 : [2432+0x35] = 0x2165, /* U+2175: SMALL ROMAN NUMERAL SIX */
4226 : [2432+0x36] = 0x2166, /* U+2176: SMALL ROMAN NUMERAL SEVEN */
4227 : [2432+0x37] = 0x2167, /* U+2177: SMALL ROMAN NUMERAL EIGHT */
4228 : [2432+0x38] = 0x2168, /* U+2178: SMALL ROMAN NUMERAL NINE */
4229 : [2432+0x39] = 0x2169, /* U+2179: SMALL ROMAN NUMERAL TEN */
4230 : [2432+0x3A] = 0x216A, /* U+217A: SMALL ROMAN NUMERAL ELEVEN */
4231 : [2432+0x3B] = 0x216B, /* U+217B: SMALL ROMAN NUMERAL TWELVE */
4232 : [2432+0x3C] = 0x216C, /* U+217C: SMALL ROMAN NUMERAL FIFTY */
4233 : [2432+0x3D] = 0x216D, /* U+217D: SMALL ROMAN NUMERAL ONE HUNDRED */
4234 : [2432+0x3E] = 0x216E, /* U+217E: SMALL ROMAN NUMERAL FIVE HUNDRED */
4235 : [2432+0x3F] = 0x216F, /* U+217F: SMALL ROMAN NUMERAL ONE THOUSAND */
4236 : [2368+0x06] = 2496 - 0x80, /* 342 206 ... */
4237 : [2496+0x04] = 0x2183, /* U+2184: LATIN SMALL LETTER REVERSED C */
4238 : [2368+0x13] = 2560 - 0x80, /* 342 223 ... */
4239 : [2560+0x10] = 0x24B6, /* U+24D0: CIRCLED LATIN SMALL LETTER A */
4240 : [2560+0x11] = 0x24B7, /* U+24D1: CIRCLED LATIN SMALL LETTER B */
4241 : [2560+0x12] = 0x24B8, /* U+24D2: CIRCLED LATIN SMALL LETTER C */
4242 : [2560+0x13] = 0x24B9, /* U+24D3: CIRCLED LATIN SMALL LETTER D */
4243 : [2560+0x14] = 0x24BA, /* U+24D4: CIRCLED LATIN SMALL LETTER E */
4244 : [2560+0x15] = 0x24BB, /* U+24D5: CIRCLED LATIN SMALL LETTER F */
4245 : [2560+0x16] = 0x24BC, /* U+24D6: CIRCLED LATIN SMALL LETTER G */
4246 : [2560+0x17] = 0x24BD, /* U+24D7: CIRCLED LATIN SMALL LETTER H */
4247 : [2560+0x18] = 0x24BE, /* U+24D8: CIRCLED LATIN SMALL LETTER I */
4248 : [2560+0x19] = 0x24BF, /* U+24D9: CIRCLED LATIN SMALL LETTER J */
4249 : [2560+0x1A] = 0x24C0, /* U+24DA: CIRCLED LATIN SMALL LETTER K */
4250 : [2560+0x1B] = 0x24C1, /* U+24DB: CIRCLED LATIN SMALL LETTER L */
4251 : [2560+0x1C] = 0x24C2, /* U+24DC: CIRCLED LATIN SMALL LETTER M */
4252 : [2560+0x1D] = 0x24C3, /* U+24DD: CIRCLED LATIN SMALL LETTER N */
4253 : [2560+0x1E] = 0x24C4, /* U+24DE: CIRCLED LATIN SMALL LETTER O */
4254 : [2560+0x1F] = 0x24C5, /* U+24DF: CIRCLED LATIN SMALL LETTER P */
4255 : [2560+0x20] = 0x24C6, /* U+24E0: CIRCLED LATIN SMALL LETTER Q */
4256 : [2560+0x21] = 0x24C7, /* U+24E1: CIRCLED LATIN SMALL LETTER R */
4257 : [2560+0x22] = 0x24C8, /* U+24E2: CIRCLED LATIN SMALL LETTER S */
4258 : [2560+0x23] = 0x24C9, /* U+24E3: CIRCLED LATIN SMALL LETTER T */
4259 : [2560+0x24] = 0x24CA, /* U+24E4: CIRCLED LATIN SMALL LETTER U */
4260 : [2560+0x25] = 0x24CB, /* U+24E5: CIRCLED LATIN SMALL LETTER V */
4261 : [2560+0x26] = 0x24CC, /* U+24E6: CIRCLED LATIN SMALL LETTER W */
4262 : [2560+0x27] = 0x24CD, /* U+24E7: CIRCLED LATIN SMALL LETTER X */
4263 : [2560+0x28] = 0x24CE, /* U+24E8: CIRCLED LATIN SMALL LETTER Y */
4264 : [2560+0x29] = 0x24CF, /* U+24E9: CIRCLED LATIN SMALL LETTER Z */
4265 : [2368+0x30] = 2624 - 0x80, /* 342 260 ... */
4266 : [2624+0x30] = 0x2C00, /* U+2C30: GLAGOLITIC SMALL LETTER AZU */
4267 : [2624+0x31] = 0x2C01, /* U+2C31: GLAGOLITIC SMALL LETTER BUKY */
4268 : [2624+0x32] = 0x2C02, /* U+2C32: GLAGOLITIC SMALL LETTER VEDE */
4269 : [2624+0x33] = 0x2C03, /* U+2C33: GLAGOLITIC SMALL LETTER GLAGOLI */
4270 : [2624+0x34] = 0x2C04, /* U+2C34: GLAGOLITIC SMALL LETTER DOBRO */
4271 : [2624+0x35] = 0x2C05, /* U+2C35: GLAGOLITIC SMALL LETTER YESTU */
4272 : [2624+0x36] = 0x2C06, /* U+2C36: GLAGOLITIC SMALL LETTER ZHIVETE */
4273 : [2624+0x37] = 0x2C07, /* U+2C37: GLAGOLITIC SMALL LETTER DZELO */
4274 : [2624+0x38] = 0x2C08, /* U+2C38: GLAGOLITIC SMALL LETTER ZEMLJA */
4275 : [2624+0x39] = 0x2C09, /* U+2C39: GLAGOLITIC SMALL LETTER IZHE */
4276 : [2624+0x3A] = 0x2C0A, /* U+2C3A: GLAGOLITIC SMALL LETTER INITIAL IZHE */
4277 : [2624+0x3B] = 0x2C0B, /* U+2C3B: GLAGOLITIC SMALL LETTER I */
4278 : [2624+0x3C] = 0x2C0C, /* U+2C3C: GLAGOLITIC SMALL LETTER DJERVI */
4279 : [2624+0x3D] = 0x2C0D, /* U+2C3D: GLAGOLITIC SMALL LETTER KAKO */
4280 : [2624+0x3E] = 0x2C0E, /* U+2C3E: GLAGOLITIC SMALL LETTER LJUDIJE */
4281 : [2624+0x3F] = 0x2C0F, /* U+2C3F: GLAGOLITIC SMALL LETTER MYSLITE */
4282 : [2368+0x31] = 2688 - 0x80, /* 342 261 ... */
4283 : [2688+0x00] = 0x2C10, /* U+2C40: GLAGOLITIC SMALL LETTER NASHI */
4284 : [2688+0x01] = 0x2C11, /* U+2C41: GLAGOLITIC SMALL LETTER ONU */
4285 : [2688+0x02] = 0x2C12, /* U+2C42: GLAGOLITIC SMALL LETTER POKOJI */
4286 : [2688+0x03] = 0x2C13, /* U+2C43: GLAGOLITIC SMALL LETTER RITSI */
4287 : [2688+0x04] = 0x2C14, /* U+2C44: GLAGOLITIC SMALL LETTER SLOVO */
4288 : [2688+0x05] = 0x2C15, /* U+2C45: GLAGOLITIC SMALL LETTER TVRIDO */
4289 : [2688+0x06] = 0x2C16, /* U+2C46: GLAGOLITIC SMALL LETTER UKU */
4290 : [2688+0x07] = 0x2C17, /* U+2C47: GLAGOLITIC SMALL LETTER FRITU */
4291 : [2688+0x08] = 0x2C18, /* U+2C48: GLAGOLITIC SMALL LETTER HERU */
4292 : [2688+0x09] = 0x2C19, /* U+2C49: GLAGOLITIC SMALL LETTER OTU */
4293 : [2688+0x0A] = 0x2C1A, /* U+2C4A: GLAGOLITIC SMALL LETTER PE */
4294 : [2688+0x0B] = 0x2C1B, /* U+2C4B: GLAGOLITIC SMALL LETTER SHTA */
4295 : [2688+0x0C] = 0x2C1C, /* U+2C4C: GLAGOLITIC SMALL LETTER TSI */
4296 : [2688+0x0D] = 0x2C1D, /* U+2C4D: GLAGOLITIC SMALL LETTER CHRIVI */
4297 : [2688+0x0E] = 0x2C1E, /* U+2C4E: GLAGOLITIC SMALL LETTER SHA */
4298 : [2688+0x0F] = 0x2C1F, /* U+2C4F: GLAGOLITIC SMALL LETTER YERU */
4299 : [2688+0x10] = 0x2C20, /* U+2C50: GLAGOLITIC SMALL LETTER YERI */
4300 : [2688+0x11] = 0x2C21, /* U+2C51: GLAGOLITIC SMALL LETTER YATI */
4301 : [2688+0x12] = 0x2C22, /* U+2C52: GLAGOLITIC SMALL LETTER SPIDERY HA */
4302 : [2688+0x13] = 0x2C23, /* U+2C53: GLAGOLITIC SMALL LETTER YU */
4303 : [2688+0x14] = 0x2C24, /* U+2C54: GLAGOLITIC SMALL LETTER SMALL YUS */
4304 : [2688+0x15] = 0x2C25, /* U+2C55: GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL */
4305 : [2688+0x16] = 0x2C26, /* U+2C56: GLAGOLITIC SMALL LETTER YO */
4306 : [2688+0x17] = 0x2C27, /* U+2C57: GLAGOLITIC SMALL LETTER IOTATED SMALL YUS */
4307 : [2688+0x18] = 0x2C28, /* U+2C58: GLAGOLITIC SMALL LETTER BIG YUS */
4308 : [2688+0x19] = 0x2C29, /* U+2C59: GLAGOLITIC SMALL LETTER IOTATED BIG YUS */
4309 : [2688+0x1A] = 0x2C2A, /* U+2C5A: GLAGOLITIC SMALL LETTER FITA */
4310 : [2688+0x1B] = 0x2C2B, /* U+2C5B: GLAGOLITIC SMALL LETTER IZHITSA */
4311 : [2688+0x1C] = 0x2C2C, /* U+2C5C: GLAGOLITIC SMALL LETTER SHTAPIC */
4312 : [2688+0x1D] = 0x2C2D, /* U+2C5D: GLAGOLITIC SMALL LETTER TROKUTASTI A */
4313 : [2688+0x1E] = 0x2C2E, /* U+2C5E: GLAGOLITIC SMALL LETTER LATINATE MYSLITE */
4314 : [2688+0x1F] = 0x2C2F, /* U+2C5F: GLAGOLITIC SMALL LETTER CAUDATE CHRIVI */
4315 : [2688+0x21] = 0x2C60, /* U+2C61: LATIN SMALL LETTER L WITH DOUBLE BAR */
4316 : [2688+0x25] = 0x023A, /* U+2C65: LATIN SMALL LETTER A WITH STROKE */
4317 : [2688+0x26] = 0x023E, /* U+2C66: LATIN SMALL LETTER T WITH DIAGONAL STROKE */
4318 : [2688+0x28] = 0x2C67, /* U+2C68: LATIN SMALL LETTER H WITH DESCENDER */
4319 : [2688+0x2A] = 0x2C69, /* U+2C6A: LATIN SMALL LETTER K WITH DESCENDER */
4320 : [2688+0x2C] = 0x2C6B, /* U+2C6C: LATIN SMALL LETTER Z WITH DESCENDER */
4321 : [2688+0x33] = 0x2C72, /* U+2C73: LATIN SMALL LETTER W WITH HOOK */
4322 : [2688+0x36] = 0x2C75, /* U+2C76: LATIN SMALL LETTER HALF H */
4323 : [2368+0x32] = 2752 - 0x80, /* 342 262 ... */
4324 : [2752+0x01] = 0x2C80, /* U+2C81: COPTIC SMALL LETTER ALFA */
4325 : [2752+0x03] = 0x2C82, /* U+2C83: COPTIC SMALL LETTER VIDA */
4326 : [2752+0x05] = 0x2C84, /* U+2C85: COPTIC SMALL LETTER GAMMA */
4327 : [2752+0x07] = 0x2C86, /* U+2C87: COPTIC SMALL LETTER DALDA */
4328 : [2752+0x09] = 0x2C88, /* U+2C89: COPTIC SMALL LETTER EIE */
4329 : [2752+0x0B] = 0x2C8A, /* U+2C8B: COPTIC SMALL LETTER SOU */
4330 : [2752+0x0D] = 0x2C8C, /* U+2C8D: COPTIC SMALL LETTER ZATA */
4331 : [2752+0x0F] = 0x2C8E, /* U+2C8F: COPTIC SMALL LETTER HATE */
4332 : [2752+0x11] = 0x2C90, /* U+2C91: COPTIC SMALL LETTER THETHE */
4333 : [2752+0x13] = 0x2C92, /* U+2C93: COPTIC SMALL LETTER IAUDA */
4334 : [2752+0x15] = 0x2C94, /* U+2C95: COPTIC SMALL LETTER KAPA */
4335 : [2752+0x17] = 0x2C96, /* U+2C97: COPTIC SMALL LETTER LAULA */
4336 : [2752+0x19] = 0x2C98, /* U+2C99: COPTIC SMALL LETTER MI */
4337 : [2752+0x1B] = 0x2C9A, /* U+2C9B: COPTIC SMALL LETTER NI */
4338 : [2752+0x1D] = 0x2C9C, /* U+2C9D: COPTIC SMALL LETTER KSI */
4339 : [2752+0x1F] = 0x2C9E, /* U+2C9F: COPTIC SMALL LETTER O */
4340 : [2752+0x21] = 0x2CA0, /* U+2CA1: COPTIC SMALL LETTER PI */
4341 : [2752+0x23] = 0x2CA2, /* U+2CA3: COPTIC SMALL LETTER RO */
4342 : [2752+0x25] = 0x2CA4, /* U+2CA5: COPTIC SMALL LETTER SIMA */
4343 : [2752+0x27] = 0x2CA6, /* U+2CA7: COPTIC SMALL LETTER TAU */
4344 : [2752+0x29] = 0x2CA8, /* U+2CA9: COPTIC SMALL LETTER UA */
4345 : [2752+0x2B] = 0x2CAA, /* U+2CAB: COPTIC SMALL LETTER FI */
4346 : [2752+0x2D] = 0x2CAC, /* U+2CAD: COPTIC SMALL LETTER KHI */
4347 : [2752+0x2F] = 0x2CAE, /* U+2CAF: COPTIC SMALL LETTER PSI */
4348 : [2752+0x31] = 0x2CB0, /* U+2CB1: COPTIC SMALL LETTER OOU */
4349 : [2752+0x33] = 0x2CB2, /* U+2CB3: COPTIC SMALL LETTER DIALECT-P ALEF */
4350 : [2752+0x35] = 0x2CB4, /* U+2CB5: COPTIC SMALL LETTER OLD COPTIC AIN */
4351 : [2752+0x37] = 0x2CB6, /* U+2CB7: COPTIC SMALL LETTER CRYPTOGRAMMIC EIE */
4352 : [2752+0x39] = 0x2CB8, /* U+2CB9: COPTIC SMALL LETTER DIALECT-P KAPA */
4353 : [2752+0x3B] = 0x2CBA, /* U+2CBB: COPTIC SMALL LETTER DIALECT-P NI */
4354 : [2752+0x3D] = 0x2CBC, /* U+2CBD: COPTIC SMALL LETTER CRYPTOGRAMMIC NI */
4355 : [2752+0x3F] = 0x2CBE, /* U+2CBF: COPTIC SMALL LETTER OLD COPTIC OOU */
4356 : [2368+0x33] = 2816 - 0x80, /* 342 263 ... */
4357 : [2816+0x01] = 0x2CC0, /* U+2CC1: COPTIC SMALL LETTER SAMPI */
4358 : [2816+0x03] = 0x2CC2, /* U+2CC3: COPTIC SMALL LETTER CROSSED SHEI */
4359 : [2816+0x05] = 0x2CC4, /* U+2CC5: COPTIC SMALL LETTER OLD COPTIC SHEI */
4360 : [2816+0x07] = 0x2CC6, /* U+2CC7: COPTIC SMALL LETTER OLD COPTIC ESH */
4361 : [2816+0x09] = 0x2CC8, /* U+2CC9: COPTIC SMALL LETTER AKHMIMIC KHEI */
4362 : [2816+0x0B] = 0x2CCA, /* U+2CCB: COPTIC SMALL LETTER DIALECT-P HORI */
4363 : [2816+0x0D] = 0x2CCC, /* U+2CCD: COPTIC SMALL LETTER OLD COPTIC HORI */
4364 : [2816+0x0F] = 0x2CCE, /* U+2CCF: COPTIC SMALL LETTER OLD COPTIC HA */
4365 : [2816+0x11] = 0x2CD0, /* U+2CD1: COPTIC SMALL LETTER L-SHAPED HA */
4366 : [2816+0x13] = 0x2CD2, /* U+2CD3: COPTIC SMALL LETTER OLD COPTIC HEI */
4367 : [2816+0x15] = 0x2CD4, /* U+2CD5: COPTIC SMALL LETTER OLD COPTIC HAT */
4368 : [2816+0x17] = 0x2CD6, /* U+2CD7: COPTIC SMALL LETTER OLD COPTIC GANGIA */
4369 : [2816+0x19] = 0x2CD8, /* U+2CD9: COPTIC SMALL LETTER OLD COPTIC DJA */
4370 : [2816+0x1B] = 0x2CDA, /* U+2CDB: COPTIC SMALL LETTER OLD COPTIC SHIMA */
4371 : [2816+0x1D] = 0x2CDC, /* U+2CDD: COPTIC SMALL LETTER OLD NUBIAN SHIMA */
4372 : [2816+0x1F] = 0x2CDE, /* U+2CDF: COPTIC SMALL LETTER OLD NUBIAN NGI */
4373 : [2816+0x21] = 0x2CE0, /* U+2CE1: COPTIC SMALL LETTER OLD NUBIAN NYI */
4374 : [2816+0x23] = 0x2CE2, /* U+2CE3: COPTIC SMALL LETTER OLD NUBIAN WAU */
4375 : [2816+0x2C] = 0x2CEB, /* U+2CEC: COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI */
4376 : [2816+0x2E] = 0x2CED, /* U+2CEE: COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA */
4377 : [2816+0x33] = 0x2CF2, /* U+2CF3: COPTIC SMALL LETTER BOHAIRIC KHEI */
4378 : [2368+0x34] = 2880 - 0x80, /* 342 264 ... */
4379 : [2880+0x00] = 0x10A0, /* U+2D00: GEORGIAN SMALL LETTER AN */
4380 : [2880+0x01] = 0x10A1, /* U+2D01: GEORGIAN SMALL LETTER BAN */
4381 : [2880+0x02] = 0x10A2, /* U+2D02: GEORGIAN SMALL LETTER GAN */
4382 : [2880+0x03] = 0x10A3, /* U+2D03: GEORGIAN SMALL LETTER DON */
4383 : [2880+0x04] = 0x10A4, /* U+2D04: GEORGIAN SMALL LETTER EN */
4384 : [2880+0x05] = 0x10A5, /* U+2D05: GEORGIAN SMALL LETTER VIN */
4385 : [2880+0x06] = 0x10A6, /* U+2D06: GEORGIAN SMALL LETTER ZEN */
4386 : [2880+0x07] = 0x10A7, /* U+2D07: GEORGIAN SMALL LETTER TAN */
4387 : [2880+0x08] = 0x10A8, /* U+2D08: GEORGIAN SMALL LETTER IN */
4388 : [2880+0x09] = 0x10A9, /* U+2D09: GEORGIAN SMALL LETTER KAN */
4389 : [2880+0x0A] = 0x10AA, /* U+2D0A: GEORGIAN SMALL LETTER LAS */
4390 : [2880+0x0B] = 0x10AB, /* U+2D0B: GEORGIAN SMALL LETTER MAN */
4391 : [2880+0x0C] = 0x10AC, /* U+2D0C: GEORGIAN SMALL LETTER NAR */
4392 : [2880+0x0D] = 0x10AD, /* U+2D0D: GEORGIAN SMALL LETTER ON */
4393 : [2880+0x0E] = 0x10AE, /* U+2D0E: GEORGIAN SMALL LETTER PAR */
4394 : [2880+0x0F] = 0x10AF, /* U+2D0F: GEORGIAN SMALL LETTER ZHAR */
4395 : [2880+0x10] = 0x10B0, /* U+2D10: GEORGIAN SMALL LETTER RAE */
4396 : [2880+0x11] = 0x10B1, /* U+2D11: GEORGIAN SMALL LETTER SAN */
4397 : [2880+0x12] = 0x10B2, /* U+2D12: GEORGIAN SMALL LETTER TAR */
4398 : [2880+0x13] = 0x10B3, /* U+2D13: GEORGIAN SMALL LETTER UN */
4399 : [2880+0x14] = 0x10B4, /* U+2D14: GEORGIAN SMALL LETTER PHAR */
4400 : [2880+0x15] = 0x10B5, /* U+2D15: GEORGIAN SMALL LETTER KHAR */
4401 : [2880+0x16] = 0x10B6, /* U+2D16: GEORGIAN SMALL LETTER GHAN */
4402 : [2880+0x17] = 0x10B7, /* U+2D17: GEORGIAN SMALL LETTER QAR */
4403 : [2880+0x18] = 0x10B8, /* U+2D18: GEORGIAN SMALL LETTER SHIN */
4404 : [2880+0x19] = 0x10B9, /* U+2D19: GEORGIAN SMALL LETTER CHIN */
4405 : [2880+0x1A] = 0x10BA, /* U+2D1A: GEORGIAN SMALL LETTER CAN */
4406 : [2880+0x1B] = 0x10BB, /* U+2D1B: GEORGIAN SMALL LETTER JIL */
4407 : [2880+0x1C] = 0x10BC, /* U+2D1C: GEORGIAN SMALL LETTER CIL */
4408 : [2880+0x1D] = 0x10BD, /* U+2D1D: GEORGIAN SMALL LETTER CHAR */
4409 : [2880+0x1E] = 0x10BE, /* U+2D1E: GEORGIAN SMALL LETTER XAN */
4410 : [2880+0x1F] = 0x10BF, /* U+2D1F: GEORGIAN SMALL LETTER JHAN */
4411 : [2880+0x20] = 0x10C0, /* U+2D20: GEORGIAN SMALL LETTER HAE */
4412 : [2880+0x21] = 0x10C1, /* U+2D21: GEORGIAN SMALL LETTER HE */
4413 : [2880+0x22] = 0x10C2, /* U+2D22: GEORGIAN SMALL LETTER HIE */
4414 : [2880+0x23] = 0x10C3, /* U+2D23: GEORGIAN SMALL LETTER WE */
4415 : [2880+0x24] = 0x10C4, /* U+2D24: GEORGIAN SMALL LETTER HAR */
4416 : [2880+0x25] = 0x10C5, /* U+2D25: GEORGIAN SMALL LETTER HOE */
4417 : [2880+0x27] = 0x10C7, /* U+2D27: GEORGIAN SMALL LETTER YN */
4418 : [2880+0x2D] = 0x10CD, /* U+2D2D: GEORGIAN SMALL LETTER AEN */
4419 : [0xEA] = 2944 - 0x80, /* 352 ... */
4420 : [2944+0x19] = 3008 - 0x80, /* 352 231 ... */
4421 : [3008+0x01] = 0xA640, /* U+A641: CYRILLIC SMALL LETTER ZEMLYA */
4422 : [3008+0x03] = 0xA642, /* U+A643: CYRILLIC SMALL LETTER DZELO */
4423 : [3008+0x05] = 0xA644, /* U+A645: CYRILLIC SMALL LETTER REVERSED DZE */
4424 : [3008+0x07] = 0xA646, /* U+A647: CYRILLIC SMALL LETTER IOTA */
4425 : [3008+0x09] = 0xA648, /* U+A649: CYRILLIC SMALL LETTER DJERV */
4426 : [3008+0x0B] = 0xA64A, /* U+A64B: CYRILLIC SMALL LETTER MONOGRAPH UK */
4427 : [3008+0x0D] = 0xA64C, /* U+A64D: CYRILLIC SMALL LETTER BROAD OMEGA */
4428 : [3008+0x0F] = 0xA64E, /* U+A64F: CYRILLIC SMALL LETTER NEUTRAL YER */
4429 : [3008+0x11] = 0xA650, /* U+A651: CYRILLIC SMALL LETTER YERU WITH BACK YER */
4430 : [3008+0x13] = 0xA652, /* U+A653: CYRILLIC SMALL LETTER IOTIFIED YAT */
4431 : [3008+0x15] = 0xA654, /* U+A655: CYRILLIC SMALL LETTER REVERSED YU */
4432 : [3008+0x17] = 0xA656, /* U+A657: CYRILLIC SMALL LETTER IOTIFIED A */
4433 : [3008+0x19] = 0xA658, /* U+A659: CYRILLIC SMALL LETTER CLOSED LITTLE YUS */
4434 : [3008+0x1B] = 0xA65A, /* U+A65B: CYRILLIC SMALL LETTER BLENDED YUS */
4435 : [3008+0x1D] = 0xA65C, /* U+A65D: CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS */
4436 : [3008+0x1F] = 0xA65E, /* U+A65F: CYRILLIC SMALL LETTER YN */
4437 : [3008+0x21] = 0xA660, /* U+A661: CYRILLIC SMALL LETTER REVERSED TSE */
4438 : [3008+0x23] = 0xA662, /* U+A663: CYRILLIC SMALL LETTER SOFT DE */
4439 : [3008+0x25] = 0xA664, /* U+A665: CYRILLIC SMALL LETTER SOFT EL */
4440 : [3008+0x27] = 0xA666, /* U+A667: CYRILLIC SMALL LETTER SOFT EM */
4441 : [3008+0x29] = 0xA668, /* U+A669: CYRILLIC SMALL LETTER MONOCULAR O */
4442 : [3008+0x2B] = 0xA66A, /* U+A66B: CYRILLIC SMALL LETTER BINOCULAR O */
4443 : [3008+0x2D] = 0xA66C, /* U+A66D: CYRILLIC SMALL LETTER DOUBLE MONOCULAR O */
4444 : [2944+0x1A] = 3072 - 0x80, /* 352 232 ... */
4445 : [3072+0x01] = 0xA680, /* U+A681: CYRILLIC SMALL LETTER DWE */
4446 : [3072+0x03] = 0xA682, /* U+A683: CYRILLIC SMALL LETTER DZWE */
4447 : [3072+0x05] = 0xA684, /* U+A685: CYRILLIC SMALL LETTER ZHWE */
4448 : [3072+0x07] = 0xA686, /* U+A687: CYRILLIC SMALL LETTER CCHE */
4449 : [3072+0x09] = 0xA688, /* U+A689: CYRILLIC SMALL LETTER DZZE */
4450 : [3072+0x0B] = 0xA68A, /* U+A68B: CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK */
4451 : [3072+0x0D] = 0xA68C, /* U+A68D: CYRILLIC SMALL LETTER TWE */
4452 : [3072+0x0F] = 0xA68E, /* U+A68F: CYRILLIC SMALL LETTER TSWE */
4453 : [3072+0x11] = 0xA690, /* U+A691: CYRILLIC SMALL LETTER TSSE */
4454 : [3072+0x13] = 0xA692, /* U+A693: CYRILLIC SMALL LETTER TCHE */
4455 : [3072+0x15] = 0xA694, /* U+A695: CYRILLIC SMALL LETTER HWE */
4456 : [3072+0x17] = 0xA696, /* U+A697: CYRILLIC SMALL LETTER SHWE */
4457 : [3072+0x19] = 0xA698, /* U+A699: CYRILLIC SMALL LETTER DOUBLE O */
4458 : [3072+0x1B] = 0xA69A, /* U+A69B: CYRILLIC SMALL LETTER CROSSED O */
4459 : [2944+0x1C] = 3136 - 0x80, /* 352 234 ... */
4460 : [3136+0x23] = 0xA722, /* U+A723: LATIN SMALL LETTER EGYPTOLOGICAL ALEF */
4461 : [3136+0x25] = 0xA724, /* U+A725: LATIN SMALL LETTER EGYPTOLOGICAL AIN */
4462 : [3136+0x27] = 0xA726, /* U+A727: LATIN SMALL LETTER HENG */
4463 : [3136+0x29] = 0xA728, /* U+A729: LATIN SMALL LETTER TZ */
4464 : [3136+0x2B] = 0xA72A, /* U+A72B: LATIN SMALL LETTER TRESILLO */
4465 : [3136+0x2D] = 0xA72C, /* U+A72D: LATIN SMALL LETTER CUATRILLO */
4466 : [3136+0x2F] = 0xA72E, /* U+A72F: LATIN SMALL LETTER CUATRILLO WITH COMMA */
4467 : [3136+0x33] = 0xA732, /* U+A733: LATIN SMALL LETTER AA */
4468 : [3136+0x35] = 0xA734, /* U+A735: LATIN SMALL LETTER AO */
4469 : [3136+0x37] = 0xA736, /* U+A737: LATIN SMALL LETTER AU */
4470 : [3136+0x39] = 0xA738, /* U+A739: LATIN SMALL LETTER AV */
4471 : [3136+0x3B] = 0xA73A, /* U+A73B: LATIN SMALL LETTER AV WITH HORIZONTAL BAR */
4472 : [3136+0x3D] = 0xA73C, /* U+A73D: LATIN SMALL LETTER AY */
4473 : [3136+0x3F] = 0xA73E, /* U+A73F: LATIN SMALL LETTER REVERSED C WITH DOT */
4474 : [2944+0x1D] = 3200 - 0x80, /* 352 235 ... */
4475 : [3200+0x01] = 0xA740, /* U+A741: LATIN SMALL LETTER K WITH STROKE */
4476 : [3200+0x03] = 0xA742, /* U+A743: LATIN SMALL LETTER K WITH DIAGONAL STROKE */
4477 : [3200+0x05] = 0xA744, /* U+A745: LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE */
4478 : [3200+0x07] = 0xA746, /* U+A747: LATIN SMALL LETTER BROKEN L */
4479 : [3200+0x09] = 0xA748, /* U+A749: LATIN SMALL LETTER L WITH HIGH STROKE */
4480 : [3200+0x0B] = 0xA74A, /* U+A74B: LATIN SMALL LETTER O WITH LONG STROKE OVERLAY */
4481 : [3200+0x0D] = 0xA74C, /* U+A74D: LATIN SMALL LETTER O WITH LOOP */
4482 : [3200+0x0F] = 0xA74E, /* U+A74F: LATIN SMALL LETTER OO */
4483 : [3200+0x11] = 0xA750, /* U+A751: LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER */
4484 : [3200+0x13] = 0xA752, /* U+A753: LATIN SMALL LETTER P WITH FLOURISH */
4485 : [3200+0x15] = 0xA754, /* U+A755: LATIN SMALL LETTER P WITH SQUIRREL TAIL */
4486 : [3200+0x17] = 0xA756, /* U+A757: LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER */
4487 : [3200+0x19] = 0xA758, /* U+A759: LATIN SMALL LETTER Q WITH DIAGONAL STROKE */
4488 : [3200+0x1B] = 0xA75A, /* U+A75B: LATIN SMALL LETTER R ROTUNDA */
4489 : [3200+0x1D] = 0xA75C, /* U+A75D: LATIN SMALL LETTER RUM ROTUNDA */
4490 : [3200+0x1F] = 0xA75E, /* U+A75F: LATIN SMALL LETTER V WITH DIAGONAL STROKE */
4491 : [3200+0x21] = 0xA760, /* U+A761: LATIN SMALL LETTER VY */
4492 : [3200+0x23] = 0xA762, /* U+A763: LATIN SMALL LETTER VISIGOTHIC Z */
4493 : [3200+0x25] = 0xA764, /* U+A765: LATIN SMALL LETTER THORN WITH STROKE */
4494 : [3200+0x27] = 0xA766, /* U+A767: LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER */
4495 : [3200+0x29] = 0xA768, /* U+A769: LATIN SMALL LETTER VEND */
4496 : [3200+0x2B] = 0xA76A, /* U+A76B: LATIN SMALL LETTER ET */
4497 : [3200+0x2D] = 0xA76C, /* U+A76D: LATIN SMALL LETTER IS */
4498 : [3200+0x2F] = 0xA76E, /* U+A76F: LATIN SMALL LETTER CON */
4499 : [3200+0x3A] = 0xA779, /* U+A77A: LATIN SMALL LETTER INSULAR D */
4500 : [3200+0x3C] = 0xA77B, /* U+A77C: LATIN SMALL LETTER INSULAR F */
4501 : [3200+0x3F] = 0xA77E, /* U+A77F: LATIN SMALL LETTER TURNED INSULAR G */
4502 : [2944+0x1E] = 3264 - 0x80, /* 352 236 ... */
4503 : [3264+0x01] = 0xA780, /* U+A781: LATIN SMALL LETTER TURNED L */
4504 : [3264+0x03] = 0xA782, /* U+A783: LATIN SMALL LETTER INSULAR R */
4505 : [3264+0x05] = 0xA784, /* U+A785: LATIN SMALL LETTER INSULAR S */
4506 : [3264+0x07] = 0xA786, /* U+A787: LATIN SMALL LETTER INSULAR T */
4507 : [3264+0x0C] = 0xA78B, /* U+A78C: LATIN SMALL LETTER SALTILLO */
4508 : [3264+0x11] = 0xA790, /* U+A791: LATIN SMALL LETTER N WITH DESCENDER */
4509 : [3264+0x13] = 0xA792, /* U+A793: LATIN SMALL LETTER C WITH BAR */
4510 : [3264+0x14] = 0xA7C4, /* U+A794: LATIN SMALL LETTER C WITH PALATAL HOOK */
4511 : [3264+0x17] = 0xA796, /* U+A797: LATIN SMALL LETTER B WITH FLOURISH */
4512 : [3264+0x19] = 0xA798, /* U+A799: LATIN SMALL LETTER F WITH STROKE */
4513 : [3264+0x1B] = 0xA79A, /* U+A79B: LATIN SMALL LETTER VOLAPUK AE */
4514 : [3264+0x1D] = 0xA79C, /* U+A79D: LATIN SMALL LETTER VOLAPUK OE */
4515 : [3264+0x1F] = 0xA79E, /* U+A79F: LATIN SMALL LETTER VOLAPUK UE */
4516 : [3264+0x21] = 0xA7A0, /* U+A7A1: LATIN SMALL LETTER G WITH OBLIQUE STROKE */
4517 : [3264+0x23] = 0xA7A2, /* U+A7A3: LATIN SMALL LETTER K WITH OBLIQUE STROKE */
4518 : [3264+0x25] = 0xA7A4, /* U+A7A5: LATIN SMALL LETTER N WITH OBLIQUE STROKE */
4519 : [3264+0x27] = 0xA7A6, /* U+A7A7: LATIN SMALL LETTER R WITH OBLIQUE STROKE */
4520 : [3264+0x29] = 0xA7A8, /* U+A7A9: LATIN SMALL LETTER S WITH OBLIQUE STROKE */
4521 : [3264+0x35] = 0xA7B4, /* U+A7B5: LATIN SMALL LETTER BETA */
4522 : [3264+0x37] = 0xA7B6, /* U+A7B7: LATIN SMALL LETTER OMEGA */
4523 : [3264+0x39] = 0xA7B8, /* U+A7B9: LATIN SMALL LETTER U WITH STROKE */
4524 : [3264+0x3B] = 0xA7BA, /* U+A7BB: LATIN SMALL LETTER GLOTTAL A */
4525 : [3264+0x3D] = 0xA7BC, /* U+A7BD: LATIN SMALL LETTER GLOTTAL I */
4526 : [3264+0x3F] = 0xA7BE, /* U+A7BF: LATIN SMALL LETTER GLOTTAL U */
4527 : [2944+0x1F] = 3328 - 0x80, /* 352 237 ... */
4528 : [3328+0x01] = 0xA7C0, /* U+A7C1: LATIN SMALL LETTER OLD POLISH O */
4529 : [3328+0x03] = 0xA7C2, /* U+A7C3: LATIN SMALL LETTER ANGLICANA W */
4530 : [3328+0x08] = 0xA7C7, /* U+A7C8: LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY */
4531 : [3328+0x0A] = 0xA7C9, /* U+A7CA: LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY */
4532 : [3328+0x11] = 0xA7D0, /* U+A7D1: LATIN SMALL LETTER CLOSED INSULAR G */
4533 : [3328+0x17] = 0xA7D6, /* U+A7D7: LATIN SMALL LETTER MIDDLE SCOTS S */
4534 : [3328+0x19] = 0xA7D8, /* U+A7D9: LATIN SMALL LETTER SIGMOID S */
4535 : [3328+0x36] = 0xA7F5, /* U+A7F6: LATIN SMALL LETTER REVERSED HALF H */
4536 : [2944+0x2D] = 3392 - 0x80, /* 352 255 ... */
4537 : [3392+0x13] = 0xA7B3, /* U+AB53: LATIN SMALL LETTER CHI */
4538 : [3392+0x30] = 0x13A0, /* U+AB70: CHEROKEE SMALL LETTER A */
4539 : [3392+0x31] = 0x13A1, /* U+AB71: CHEROKEE SMALL LETTER E */
4540 : [3392+0x32] = 0x13A2, /* U+AB72: CHEROKEE SMALL LETTER I */
4541 : [3392+0x33] = 0x13A3, /* U+AB73: CHEROKEE SMALL LETTER O */
4542 : [3392+0x34] = 0x13A4, /* U+AB74: CHEROKEE SMALL LETTER U */
4543 : [3392+0x35] = 0x13A5, /* U+AB75: CHEROKEE SMALL LETTER V */
4544 : [3392+0x36] = 0x13A6, /* U+AB76: CHEROKEE SMALL LETTER GA */
4545 : [3392+0x37] = 0x13A7, /* U+AB77: CHEROKEE SMALL LETTER KA */
4546 : [3392+0x38] = 0x13A8, /* U+AB78: CHEROKEE SMALL LETTER GE */
4547 : [3392+0x39] = 0x13A9, /* U+AB79: CHEROKEE SMALL LETTER GI */
4548 : [3392+0x3A] = 0x13AA, /* U+AB7A: CHEROKEE SMALL LETTER GO */
4549 : [3392+0x3B] = 0x13AB, /* U+AB7B: CHEROKEE SMALL LETTER GU */
4550 : [3392+0x3C] = 0x13AC, /* U+AB7C: CHEROKEE SMALL LETTER GV */
4551 : [3392+0x3D] = 0x13AD, /* U+AB7D: CHEROKEE SMALL LETTER HA */
4552 : [3392+0x3E] = 0x13AE, /* U+AB7E: CHEROKEE SMALL LETTER HE */
4553 : [3392+0x3F] = 0x13AF, /* U+AB7F: CHEROKEE SMALL LETTER HI */
4554 : [2944+0x2E] = 3456 - 0x80, /* 352 256 ... */
4555 : [3456+0x00] = 0x13B0, /* U+AB80: CHEROKEE SMALL LETTER HO */
4556 : [3456+0x01] = 0x13B1, /* U+AB81: CHEROKEE SMALL LETTER HU */
4557 : [3456+0x02] = 0x13B2, /* U+AB82: CHEROKEE SMALL LETTER HV */
4558 : [3456+0x03] = 0x13B3, /* U+AB83: CHEROKEE SMALL LETTER LA */
4559 : [3456+0x04] = 0x13B4, /* U+AB84: CHEROKEE SMALL LETTER LE */
4560 : [3456+0x05] = 0x13B5, /* U+AB85: CHEROKEE SMALL LETTER LI */
4561 : [3456+0x06] = 0x13B6, /* U+AB86: CHEROKEE SMALL LETTER LO */
4562 : [3456+0x07] = 0x13B7, /* U+AB87: CHEROKEE SMALL LETTER LU */
4563 : [3456+0x08] = 0x13B8, /* U+AB88: CHEROKEE SMALL LETTER LV */
4564 : [3456+0x09] = 0x13B9, /* U+AB89: CHEROKEE SMALL LETTER MA */
4565 : [3456+0x0A] = 0x13BA, /* U+AB8A: CHEROKEE SMALL LETTER ME */
4566 : [3456+0x0B] = 0x13BB, /* U+AB8B: CHEROKEE SMALL LETTER MI */
4567 : [3456+0x0C] = 0x13BC, /* U+AB8C: CHEROKEE SMALL LETTER MO */
4568 : [3456+0x0D] = 0x13BD, /* U+AB8D: CHEROKEE SMALL LETTER MU */
4569 : [3456+0x0E] = 0x13BE, /* U+AB8E: CHEROKEE SMALL LETTER NA */
4570 : [3456+0x0F] = 0x13BF, /* U+AB8F: CHEROKEE SMALL LETTER HNA */
4571 : [3456+0x10] = 0x13C0, /* U+AB90: CHEROKEE SMALL LETTER NAH */
4572 : [3456+0x11] = 0x13C1, /* U+AB91: CHEROKEE SMALL LETTER NE */
4573 : [3456+0x12] = 0x13C2, /* U+AB92: CHEROKEE SMALL LETTER NI */
4574 : [3456+0x13] = 0x13C3, /* U+AB93: CHEROKEE SMALL LETTER NO */
4575 : [3456+0x14] = 0x13C4, /* U+AB94: CHEROKEE SMALL LETTER NU */
4576 : [3456+0x15] = 0x13C5, /* U+AB95: CHEROKEE SMALL LETTER NV */
4577 : [3456+0x16] = 0x13C6, /* U+AB96: CHEROKEE SMALL LETTER QUA */
4578 : [3456+0x17] = 0x13C7, /* U+AB97: CHEROKEE SMALL LETTER QUE */
4579 : [3456+0x18] = 0x13C8, /* U+AB98: CHEROKEE SMALL LETTER QUI */
4580 : [3456+0x19] = 0x13C9, /* U+AB99: CHEROKEE SMALL LETTER QUO */
4581 : [3456+0x1A] = 0x13CA, /* U+AB9A: CHEROKEE SMALL LETTER QUU */
4582 : [3456+0x1B] = 0x13CB, /* U+AB9B: CHEROKEE SMALL LETTER QUV */
4583 : [3456+0x1C] = 0x13CC, /* U+AB9C: CHEROKEE SMALL LETTER SA */
4584 : [3456+0x1D] = 0x13CD, /* U+AB9D: CHEROKEE SMALL LETTER S */
4585 : [3456+0x1E] = 0x13CE, /* U+AB9E: CHEROKEE SMALL LETTER SE */
4586 : [3456+0x1F] = 0x13CF, /* U+AB9F: CHEROKEE SMALL LETTER SI */
4587 : [3456+0x20] = 0x13D0, /* U+ABA0: CHEROKEE SMALL LETTER SO */
4588 : [3456+0x21] = 0x13D1, /* U+ABA1: CHEROKEE SMALL LETTER SU */
4589 : [3456+0x22] = 0x13D2, /* U+ABA2: CHEROKEE SMALL LETTER SV */
4590 : [3456+0x23] = 0x13D3, /* U+ABA3: CHEROKEE SMALL LETTER DA */
4591 : [3456+0x24] = 0x13D4, /* U+ABA4: CHEROKEE SMALL LETTER TA */
4592 : [3456+0x25] = 0x13D5, /* U+ABA5: CHEROKEE SMALL LETTER DE */
4593 : [3456+0x26] = 0x13D6, /* U+ABA6: CHEROKEE SMALL LETTER TE */
4594 : [3456+0x27] = 0x13D7, /* U+ABA7: CHEROKEE SMALL LETTER DI */
4595 : [3456+0x28] = 0x13D8, /* U+ABA8: CHEROKEE SMALL LETTER TI */
4596 : [3456+0x29] = 0x13D9, /* U+ABA9: CHEROKEE SMALL LETTER DO */
4597 : [3456+0x2A] = 0x13DA, /* U+ABAA: CHEROKEE SMALL LETTER DU */
4598 : [3456+0x2B] = 0x13DB, /* U+ABAB: CHEROKEE SMALL LETTER DV */
4599 : [3456+0x2C] = 0x13DC, /* U+ABAC: CHEROKEE SMALL LETTER DLA */
4600 : [3456+0x2D] = 0x13DD, /* U+ABAD: CHEROKEE SMALL LETTER TLA */
4601 : [3456+0x2E] = 0x13DE, /* U+ABAE: CHEROKEE SMALL LETTER TLE */
4602 : [3456+0x2F] = 0x13DF, /* U+ABAF: CHEROKEE SMALL LETTER TLI */
4603 : [3456+0x30] = 0x13E0, /* U+ABB0: CHEROKEE SMALL LETTER TLO */
4604 : [3456+0x31] = 0x13E1, /* U+ABB1: CHEROKEE SMALL LETTER TLU */
4605 : [3456+0x32] = 0x13E2, /* U+ABB2: CHEROKEE SMALL LETTER TLV */
4606 : [3456+0x33] = 0x13E3, /* U+ABB3: CHEROKEE SMALL LETTER TSA */
4607 : [3456+0x34] = 0x13E4, /* U+ABB4: CHEROKEE SMALL LETTER TSE */
4608 : [3456+0x35] = 0x13E5, /* U+ABB5: CHEROKEE SMALL LETTER TSI */
4609 : [3456+0x36] = 0x13E6, /* U+ABB6: CHEROKEE SMALL LETTER TSO */
4610 : [3456+0x37] = 0x13E7, /* U+ABB7: CHEROKEE SMALL LETTER TSU */
4611 : [3456+0x38] = 0x13E8, /* U+ABB8: CHEROKEE SMALL LETTER TSV */
4612 : [3456+0x39] = 0x13E9, /* U+ABB9: CHEROKEE SMALL LETTER WA */
4613 : [3456+0x3A] = 0x13EA, /* U+ABBA: CHEROKEE SMALL LETTER WE */
4614 : [3456+0x3B] = 0x13EB, /* U+ABBB: CHEROKEE SMALL LETTER WI */
4615 : [3456+0x3C] = 0x13EC, /* U+ABBC: CHEROKEE SMALL LETTER WO */
4616 : [3456+0x3D] = 0x13ED, /* U+ABBD: CHEROKEE SMALL LETTER WU */
4617 : [3456+0x3E] = 0x13EE, /* U+ABBE: CHEROKEE SMALL LETTER WV */
4618 : [3456+0x3F] = 0x13EF, /* U+ABBF: CHEROKEE SMALL LETTER YA */
4619 : [0xEF] = 3520 - 0x80, /* 357 ... */
4620 : [3520+0x2C] = 3584 - 0x80, /* 357 254 ... */
4621 : [3584+0x00] = -75, /* U+FB00: LATIN SMALL LIGATURE FF */
4622 : [3584+0x01] = -76, /* U+FB01: LATIN SMALL LIGATURE FI */
4623 : [3584+0x02] = -77, /* U+FB02: LATIN SMALL LIGATURE FL */
4624 : [3584+0x03] = -78, /* U+FB03: LATIN SMALL LIGATURE FFI */
4625 : [3584+0x04] = -79, /* U+FB04: LATIN SMALL LIGATURE FFL */
4626 : [3584+0x05] = -80, /* U+FB05: LATIN SMALL LIGATURE LONG S T */
4627 : [3584+0x06] = -80, /* U+FB06: LATIN SMALL LIGATURE ST */
4628 : [3584+0x13] = -82, /* U+FB13: ARMENIAN SMALL LIGATURE MEN NOW */
4629 : [3584+0x14] = -83, /* U+FB14: ARMENIAN SMALL LIGATURE MEN ECH */
4630 : [3584+0x15] = -84, /* U+FB15: ARMENIAN SMALL LIGATURE MEN INI */
4631 : [3584+0x16] = -85, /* U+FB16: ARMENIAN SMALL LIGATURE VEW NOW */
4632 : [3584+0x17] = -86, /* U+FB17: ARMENIAN SMALL LIGATURE MEN XEH */
4633 : [3520+0x3D] = 3648 - 0x80, /* 357 275 ... */
4634 : [3648+0x01] = 0xFF21, /* U+FF41: FULLWIDTH LATIN SMALL LETTER A */
4635 : [3648+0x02] = 0xFF22, /* U+FF42: FULLWIDTH LATIN SMALL LETTER B */
4636 : [3648+0x03] = 0xFF23, /* U+FF43: FULLWIDTH LATIN SMALL LETTER C */
4637 : [3648+0x04] = 0xFF24, /* U+FF44: FULLWIDTH LATIN SMALL LETTER D */
4638 : [3648+0x05] = 0xFF25, /* U+FF45: FULLWIDTH LATIN SMALL LETTER E */
4639 : [3648+0x06] = 0xFF26, /* U+FF46: FULLWIDTH LATIN SMALL LETTER F */
4640 : [3648+0x07] = 0xFF27, /* U+FF47: FULLWIDTH LATIN SMALL LETTER G */
4641 : [3648+0x08] = 0xFF28, /* U+FF48: FULLWIDTH LATIN SMALL LETTER H */
4642 : [3648+0x09] = 0xFF29, /* U+FF49: FULLWIDTH LATIN SMALL LETTER I */
4643 : [3648+0x0A] = 0xFF2A, /* U+FF4A: FULLWIDTH LATIN SMALL LETTER J */
4644 : [3648+0x0B] = 0xFF2B, /* U+FF4B: FULLWIDTH LATIN SMALL LETTER K */
4645 : [3648+0x0C] = 0xFF2C, /* U+FF4C: FULLWIDTH LATIN SMALL LETTER L */
4646 : [3648+0x0D] = 0xFF2D, /* U+FF4D: FULLWIDTH LATIN SMALL LETTER M */
4647 : [3648+0x0E] = 0xFF2E, /* U+FF4E: FULLWIDTH LATIN SMALL LETTER N */
4648 : [3648+0x0F] = 0xFF2F, /* U+FF4F: FULLWIDTH LATIN SMALL LETTER O */
4649 : [3648+0x10] = 0xFF30, /* U+FF50: FULLWIDTH LATIN SMALL LETTER P */
4650 : [3648+0x11] = 0xFF31, /* U+FF51: FULLWIDTH LATIN SMALL LETTER Q */
4651 : [3648+0x12] = 0xFF32, /* U+FF52: FULLWIDTH LATIN SMALL LETTER R */
4652 : [3648+0x13] = 0xFF33, /* U+FF53: FULLWIDTH LATIN SMALL LETTER S */
4653 : [3648+0x14] = 0xFF34, /* U+FF54: FULLWIDTH LATIN SMALL LETTER T */
4654 : [3648+0x15] = 0xFF35, /* U+FF55: FULLWIDTH LATIN SMALL LETTER U */
4655 : [3648+0x16] = 0xFF36, /* U+FF56: FULLWIDTH LATIN SMALL LETTER V */
4656 : [3648+0x17] = 0xFF37, /* U+FF57: FULLWIDTH LATIN SMALL LETTER W */
4657 : [3648+0x18] = 0xFF38, /* U+FF58: FULLWIDTH LATIN SMALL LETTER X */
4658 : [3648+0x19] = 0xFF39, /* U+FF59: FULLWIDTH LATIN SMALL LETTER Y */
4659 : [3648+0x1A] = 0xFF3A, /* U+FF5A: FULLWIDTH LATIN SMALL LETTER Z */
4660 : [0xF0] = 3712 - 0x80, /* 360 ... */
4661 : [3712+0x10] = 3776 - 0x80, /* 360 220 ... */
4662 : [3776+0x10] = 3840 - 0x80, /* 360 220 220 ... */
4663 : [3840+0x28] = 0x10400, /* U+10428: DESERET SMALL LETTER LONG I */
4664 : [3840+0x29] = 0x10401, /* U+10429: DESERET SMALL LETTER LONG E */
4665 : [3840+0x2A] = 0x10402, /* U+1042A: DESERET SMALL LETTER LONG A */
4666 : [3840+0x2B] = 0x10403, /* U+1042B: DESERET SMALL LETTER LONG AH */
4667 : [3840+0x2C] = 0x10404, /* U+1042C: DESERET SMALL LETTER LONG O */
4668 : [3840+0x2D] = 0x10405, /* U+1042D: DESERET SMALL LETTER LONG OO */
4669 : [3840+0x2E] = 0x10406, /* U+1042E: DESERET SMALL LETTER SHORT I */
4670 : [3840+0x2F] = 0x10407, /* U+1042F: DESERET SMALL LETTER SHORT E */
4671 : [3840+0x30] = 0x10408, /* U+10430: DESERET SMALL LETTER SHORT A */
4672 : [3840+0x31] = 0x10409, /* U+10431: DESERET SMALL LETTER SHORT AH */
4673 : [3840+0x32] = 0x1040A, /* U+10432: DESERET SMALL LETTER SHORT O */
4674 : [3840+0x33] = 0x1040B, /* U+10433: DESERET SMALL LETTER SHORT OO */
4675 : [3840+0x34] = 0x1040C, /* U+10434: DESERET SMALL LETTER AY */
4676 : [3840+0x35] = 0x1040D, /* U+10435: DESERET SMALL LETTER OW */
4677 : [3840+0x36] = 0x1040E, /* U+10436: DESERET SMALL LETTER WU */
4678 : [3840+0x37] = 0x1040F, /* U+10437: DESERET SMALL LETTER YEE */
4679 : [3840+0x38] = 0x10410, /* U+10438: DESERET SMALL LETTER H */
4680 : [3840+0x39] = 0x10411, /* U+10439: DESERET SMALL LETTER PEE */
4681 : [3840+0x3A] = 0x10412, /* U+1043A: DESERET SMALL LETTER BEE */
4682 : [3840+0x3B] = 0x10413, /* U+1043B: DESERET SMALL LETTER TEE */
4683 : [3840+0x3C] = 0x10414, /* U+1043C: DESERET SMALL LETTER DEE */
4684 : [3840+0x3D] = 0x10415, /* U+1043D: DESERET SMALL LETTER CHEE */
4685 : [3840+0x3E] = 0x10416, /* U+1043E: DESERET SMALL LETTER JEE */
4686 : [3840+0x3F] = 0x10417, /* U+1043F: DESERET SMALL LETTER KAY */
4687 : [3776+0x11] = 3904 - 0x80, /* 360 220 221 ... */
4688 : [3904+0x00] = 0x10418, /* U+10440: DESERET SMALL LETTER GAY */
4689 : [3904+0x01] = 0x10419, /* U+10441: DESERET SMALL LETTER EF */
4690 : [3904+0x02] = 0x1041A, /* U+10442: DESERET SMALL LETTER VEE */
4691 : [3904+0x03] = 0x1041B, /* U+10443: DESERET SMALL LETTER ETH */
4692 : [3904+0x04] = 0x1041C, /* U+10444: DESERET SMALL LETTER THEE */
4693 : [3904+0x05] = 0x1041D, /* U+10445: DESERET SMALL LETTER ES */
4694 : [3904+0x06] = 0x1041E, /* U+10446: DESERET SMALL LETTER ZEE */
4695 : [3904+0x07] = 0x1041F, /* U+10447: DESERET SMALL LETTER ESH */
4696 : [3904+0x08] = 0x10420, /* U+10448: DESERET SMALL LETTER ZHEE */
4697 : [3904+0x09] = 0x10421, /* U+10449: DESERET SMALL LETTER ER */
4698 : [3904+0x0A] = 0x10422, /* U+1044A: DESERET SMALL LETTER EL */
4699 : [3904+0x0B] = 0x10423, /* U+1044B: DESERET SMALL LETTER EM */
4700 : [3904+0x0C] = 0x10424, /* U+1044C: DESERET SMALL LETTER EN */
4701 : [3904+0x0D] = 0x10425, /* U+1044D: DESERET SMALL LETTER ENG */
4702 : [3904+0x0E] = 0x10426, /* U+1044E: DESERET SMALL LETTER OI */
4703 : [3904+0x0F] = 0x10427, /* U+1044F: DESERET SMALL LETTER EW */
4704 : [3776+0x13] = 3968 - 0x80, /* 360 220 223 ... */
4705 : [3968+0x18] = 0x104B0, /* U+104D8: OSAGE SMALL LETTER A */
4706 : [3968+0x19] = 0x104B1, /* U+104D9: OSAGE SMALL LETTER AI */
4707 : [3968+0x1A] = 0x104B2, /* U+104DA: OSAGE SMALL LETTER AIN */
4708 : [3968+0x1B] = 0x104B3, /* U+104DB: OSAGE SMALL LETTER AH */
4709 : [3968+0x1C] = 0x104B4, /* U+104DC: OSAGE SMALL LETTER BRA */
4710 : [3968+0x1D] = 0x104B5, /* U+104DD: OSAGE SMALL LETTER CHA */
4711 : [3968+0x1E] = 0x104B6, /* U+104DE: OSAGE SMALL LETTER EHCHA */
4712 : [3968+0x1F] = 0x104B7, /* U+104DF: OSAGE SMALL LETTER E */
4713 : [3968+0x20] = 0x104B8, /* U+104E0: OSAGE SMALL LETTER EIN */
4714 : [3968+0x21] = 0x104B9, /* U+104E1: OSAGE SMALL LETTER HA */
4715 : [3968+0x22] = 0x104BA, /* U+104E2: OSAGE SMALL LETTER HYA */
4716 : [3968+0x23] = 0x104BB, /* U+104E3: OSAGE SMALL LETTER I */
4717 : [3968+0x24] = 0x104BC, /* U+104E4: OSAGE SMALL LETTER KA */
4718 : [3968+0x25] = 0x104BD, /* U+104E5: OSAGE SMALL LETTER EHKA */
4719 : [3968+0x26] = 0x104BE, /* U+104E6: OSAGE SMALL LETTER KYA */
4720 : [3968+0x27] = 0x104BF, /* U+104E7: OSAGE SMALL LETTER LA */
4721 : [3968+0x28] = 0x104C0, /* U+104E8: OSAGE SMALL LETTER MA */
4722 : [3968+0x29] = 0x104C1, /* U+104E9: OSAGE SMALL LETTER NA */
4723 : [3968+0x2A] = 0x104C2, /* U+104EA: OSAGE SMALL LETTER O */
4724 : [3968+0x2B] = 0x104C3, /* U+104EB: OSAGE SMALL LETTER OIN */
4725 : [3968+0x2C] = 0x104C4, /* U+104EC: OSAGE SMALL LETTER PA */
4726 : [3968+0x2D] = 0x104C5, /* U+104ED: OSAGE SMALL LETTER EHPA */
4727 : [3968+0x2E] = 0x104C6, /* U+104EE: OSAGE SMALL LETTER SA */
4728 : [3968+0x2F] = 0x104C7, /* U+104EF: OSAGE SMALL LETTER SHA */
4729 : [3968+0x30] = 0x104C8, /* U+104F0: OSAGE SMALL LETTER TA */
4730 : [3968+0x31] = 0x104C9, /* U+104F1: OSAGE SMALL LETTER EHTA */
4731 : [3968+0x32] = 0x104CA, /* U+104F2: OSAGE SMALL LETTER TSA */
4732 : [3968+0x33] = 0x104CB, /* U+104F3: OSAGE SMALL LETTER EHTSA */
4733 : [3968+0x34] = 0x104CC, /* U+104F4: OSAGE SMALL LETTER TSHA */
4734 : [3968+0x35] = 0x104CD, /* U+104F5: OSAGE SMALL LETTER DHA */
4735 : [3968+0x36] = 0x104CE, /* U+104F6: OSAGE SMALL LETTER U */
4736 : [3968+0x37] = 0x104CF, /* U+104F7: OSAGE SMALL LETTER WA */
4737 : [3968+0x38] = 0x104D0, /* U+104F8: OSAGE SMALL LETTER KHA */
4738 : [3968+0x39] = 0x104D1, /* U+104F9: OSAGE SMALL LETTER GHA */
4739 : [3968+0x3A] = 0x104D2, /* U+104FA: OSAGE SMALL LETTER ZA */
4740 : [3968+0x3B] = 0x104D3, /* U+104FB: OSAGE SMALL LETTER ZHA */
4741 : [3776+0x16] = 4032 - 0x80, /* 360 220 226 ... */
4742 : [4032+0x17] = 0x10570, /* U+10597: VITHKUQI SMALL LETTER A */
4743 : [4032+0x18] = 0x10571, /* U+10598: VITHKUQI SMALL LETTER BBE */
4744 : [4032+0x19] = 0x10572, /* U+10599: VITHKUQI SMALL LETTER BE */
4745 : [4032+0x1A] = 0x10573, /* U+1059A: VITHKUQI SMALL LETTER CE */
4746 : [4032+0x1B] = 0x10574, /* U+1059B: VITHKUQI SMALL LETTER CHE */
4747 : [4032+0x1C] = 0x10575, /* U+1059C: VITHKUQI SMALL LETTER DE */
4748 : [4032+0x1D] = 0x10576, /* U+1059D: VITHKUQI SMALL LETTER DHE */
4749 : [4032+0x1E] = 0x10577, /* U+1059E: VITHKUQI SMALL LETTER EI */
4750 : [4032+0x1F] = 0x10578, /* U+1059F: VITHKUQI SMALL LETTER E */
4751 : [4032+0x20] = 0x10579, /* U+105A0: VITHKUQI SMALL LETTER FE */
4752 : [4032+0x21] = 0x1057A, /* U+105A1: VITHKUQI SMALL LETTER GA */
4753 : [4032+0x23] = 0x1057C, /* U+105A3: VITHKUQI SMALL LETTER HA */
4754 : [4032+0x24] = 0x1057D, /* U+105A4: VITHKUQI SMALL LETTER HHA */
4755 : [4032+0x25] = 0x1057E, /* U+105A5: VITHKUQI SMALL LETTER I */
4756 : [4032+0x26] = 0x1057F, /* U+105A6: VITHKUQI SMALL LETTER IJE */
4757 : [4032+0x27] = 0x10580, /* U+105A7: VITHKUQI SMALL LETTER JE */
4758 : [4032+0x28] = 0x10581, /* U+105A8: VITHKUQI SMALL LETTER KA */
4759 : [4032+0x29] = 0x10582, /* U+105A9: VITHKUQI SMALL LETTER LA */
4760 : [4032+0x2A] = 0x10583, /* U+105AA: VITHKUQI SMALL LETTER LLA */
4761 : [4032+0x2B] = 0x10584, /* U+105AB: VITHKUQI SMALL LETTER ME */
4762 : [4032+0x2C] = 0x10585, /* U+105AC: VITHKUQI SMALL LETTER NE */
4763 : [4032+0x2D] = 0x10586, /* U+105AD: VITHKUQI SMALL LETTER NJE */
4764 : [4032+0x2E] = 0x10587, /* U+105AE: VITHKUQI SMALL LETTER O */
4765 : [4032+0x2F] = 0x10588, /* U+105AF: VITHKUQI SMALL LETTER PE */
4766 : [4032+0x30] = 0x10589, /* U+105B0: VITHKUQI SMALL LETTER QA */
4767 : [4032+0x31] = 0x1058A, /* U+105B1: VITHKUQI SMALL LETTER RE */
4768 : [4032+0x33] = 0x1058C, /* U+105B3: VITHKUQI SMALL LETTER SE */
4769 : [4032+0x34] = 0x1058D, /* U+105B4: VITHKUQI SMALL LETTER SHE */
4770 : [4032+0x35] = 0x1058E, /* U+105B5: VITHKUQI SMALL LETTER TE */
4771 : [4032+0x36] = 0x1058F, /* U+105B6: VITHKUQI SMALL LETTER THE */
4772 : [4032+0x37] = 0x10590, /* U+105B7: VITHKUQI SMALL LETTER U */
4773 : [4032+0x38] = 0x10591, /* U+105B8: VITHKUQI SMALL LETTER VE */
4774 : [4032+0x39] = 0x10592, /* U+105B9: VITHKUQI SMALL LETTER XE */
4775 : [4032+0x3B] = 0x10594, /* U+105BB: VITHKUQI SMALL LETTER Y */
4776 : [4032+0x3C] = 0x10595, /* U+105BC: VITHKUQI SMALL LETTER ZE */
4777 : [3776+0x33] = 4096 - 0x80, /* 360 220 263 ... */
4778 : [4096+0x00] = 0x10C80, /* U+10CC0: OLD HUNGARIAN SMALL LETTER A */
4779 : [4096+0x01] = 0x10C81, /* U+10CC1: OLD HUNGARIAN SMALL LETTER AA */
4780 : [4096+0x02] = 0x10C82, /* U+10CC2: OLD HUNGARIAN SMALL LETTER EB */
4781 : [4096+0x03] = 0x10C83, /* U+10CC3: OLD HUNGARIAN SMALL LETTER AMB */
4782 : [4096+0x04] = 0x10C84, /* U+10CC4: OLD HUNGARIAN SMALL LETTER EC */
4783 : [4096+0x05] = 0x10C85, /* U+10CC5: OLD HUNGARIAN SMALL LETTER ENC */
4784 : [4096+0x06] = 0x10C86, /* U+10CC6: OLD HUNGARIAN SMALL LETTER ECS */
4785 : [4096+0x07] = 0x10C87, /* U+10CC7: OLD HUNGARIAN SMALL LETTER ED */
4786 : [4096+0x08] = 0x10C88, /* U+10CC8: OLD HUNGARIAN SMALL LETTER AND */
4787 : [4096+0x09] = 0x10C89, /* U+10CC9: OLD HUNGARIAN SMALL LETTER E */
4788 : [4096+0x0A] = 0x10C8A, /* U+10CCA: OLD HUNGARIAN SMALL LETTER CLOSE E */
4789 : [4096+0x0B] = 0x10C8B, /* U+10CCB: OLD HUNGARIAN SMALL LETTER EE */
4790 : [4096+0x0C] = 0x10C8C, /* U+10CCC: OLD HUNGARIAN SMALL LETTER EF */
4791 : [4096+0x0D] = 0x10C8D, /* U+10CCD: OLD HUNGARIAN SMALL LETTER EG */
4792 : [4096+0x0E] = 0x10C8E, /* U+10CCE: OLD HUNGARIAN SMALL LETTER EGY */
4793 : [4096+0x0F] = 0x10C8F, /* U+10CCF: OLD HUNGARIAN SMALL LETTER EH */
4794 : [4096+0x10] = 0x10C90, /* U+10CD0: OLD HUNGARIAN SMALL LETTER I */
4795 : [4096+0x11] = 0x10C91, /* U+10CD1: OLD HUNGARIAN SMALL LETTER II */
4796 : [4096+0x12] = 0x10C92, /* U+10CD2: OLD HUNGARIAN SMALL LETTER EJ */
4797 : [4096+0x13] = 0x10C93, /* U+10CD3: OLD HUNGARIAN SMALL LETTER EK */
4798 : [4096+0x14] = 0x10C94, /* U+10CD4: OLD HUNGARIAN SMALL LETTER AK */
4799 : [4096+0x15] = 0x10C95, /* U+10CD5: OLD HUNGARIAN SMALL LETTER UNK */
4800 : [4096+0x16] = 0x10C96, /* U+10CD6: OLD HUNGARIAN SMALL LETTER EL */
4801 : [4096+0x17] = 0x10C97, /* U+10CD7: OLD HUNGARIAN SMALL LETTER ELY */
4802 : [4096+0x18] = 0x10C98, /* U+10CD8: OLD HUNGARIAN SMALL LETTER EM */
4803 : [4096+0x19] = 0x10C99, /* U+10CD9: OLD HUNGARIAN SMALL LETTER EN */
4804 : [4096+0x1A] = 0x10C9A, /* U+10CDA: OLD HUNGARIAN SMALL LETTER ENY */
4805 : [4096+0x1B] = 0x10C9B, /* U+10CDB: OLD HUNGARIAN SMALL LETTER O */
4806 : [4096+0x1C] = 0x10C9C, /* U+10CDC: OLD HUNGARIAN SMALL LETTER OO */
4807 : [4096+0x1D] = 0x10C9D, /* U+10CDD: OLD HUNGARIAN SMALL LETTER NIKOLSBURG OE */
4808 : [4096+0x1E] = 0x10C9E, /* U+10CDE: OLD HUNGARIAN SMALL LETTER RUDIMENTA OE */
4809 : [4096+0x1F] = 0x10C9F, /* U+10CDF: OLD HUNGARIAN SMALL LETTER OEE */
4810 : [4096+0x20] = 0x10CA0, /* U+10CE0: OLD HUNGARIAN SMALL LETTER EP */
4811 : [4096+0x21] = 0x10CA1, /* U+10CE1: OLD HUNGARIAN SMALL LETTER EMP */
4812 : [4096+0x22] = 0x10CA2, /* U+10CE2: OLD HUNGARIAN SMALL LETTER ER */
4813 : [4096+0x23] = 0x10CA3, /* U+10CE3: OLD HUNGARIAN SMALL LETTER SHORT ER */
4814 : [4096+0x24] = 0x10CA4, /* U+10CE4: OLD HUNGARIAN SMALL LETTER ES */
4815 : [4096+0x25] = 0x10CA5, /* U+10CE5: OLD HUNGARIAN SMALL LETTER ESZ */
4816 : [4096+0x26] = 0x10CA6, /* U+10CE6: OLD HUNGARIAN SMALL LETTER ET */
4817 : [4096+0x27] = 0x10CA7, /* U+10CE7: OLD HUNGARIAN SMALL LETTER ENT */
4818 : [4096+0x28] = 0x10CA8, /* U+10CE8: OLD HUNGARIAN SMALL LETTER ETY */
4819 : [4096+0x29] = 0x10CA9, /* U+10CE9: OLD HUNGARIAN SMALL LETTER ECH */
4820 : [4096+0x2A] = 0x10CAA, /* U+10CEA: OLD HUNGARIAN SMALL LETTER U */
4821 : [4096+0x2B] = 0x10CAB, /* U+10CEB: OLD HUNGARIAN SMALL LETTER UU */
4822 : [4096+0x2C] = 0x10CAC, /* U+10CEC: OLD HUNGARIAN SMALL LETTER NIKOLSBURG UE */
4823 : [4096+0x2D] = 0x10CAD, /* U+10CED: OLD HUNGARIAN SMALL LETTER RUDIMENTA UE */
4824 : [4096+0x2E] = 0x10CAE, /* U+10CEE: OLD HUNGARIAN SMALL LETTER EV */
4825 : [4096+0x2F] = 0x10CAF, /* U+10CEF: OLD HUNGARIAN SMALL LETTER EZ */
4826 : [4096+0x30] = 0x10CB0, /* U+10CF0: OLD HUNGARIAN SMALL LETTER EZS */
4827 : [4096+0x31] = 0x10CB1, /* U+10CF1: OLD HUNGARIAN SMALL LETTER ENT-SHAPED SIGN */
4828 : [4096+0x32] = 0x10CB2, /* U+10CF2: OLD HUNGARIAN SMALL LETTER US */
4829 : [3712+0x11] = 4160 - 0x80, /* 360 221 ... */
4830 : [4160+0x23] = 4224 - 0x80, /* 360 221 243 ... */
4831 : [4224+0x00] = 0x118A0, /* U+118C0: WARANG CITI SMALL LETTER NGAA */
4832 : [4224+0x01] = 0x118A1, /* U+118C1: WARANG CITI SMALL LETTER A */
4833 : [4224+0x02] = 0x118A2, /* U+118C2: WARANG CITI SMALL LETTER WI */
4834 : [4224+0x03] = 0x118A3, /* U+118C3: WARANG CITI SMALL LETTER YU */
4835 : [4224+0x04] = 0x118A4, /* U+118C4: WARANG CITI SMALL LETTER YA */
4836 : [4224+0x05] = 0x118A5, /* U+118C5: WARANG CITI SMALL LETTER YO */
4837 : [4224+0x06] = 0x118A6, /* U+118C6: WARANG CITI SMALL LETTER II */
4838 : [4224+0x07] = 0x118A7, /* U+118C7: WARANG CITI SMALL LETTER UU */
4839 : [4224+0x08] = 0x118A8, /* U+118C8: WARANG CITI SMALL LETTER E */
4840 : [4224+0x09] = 0x118A9, /* U+118C9: WARANG CITI SMALL LETTER O */
4841 : [4224+0x0A] = 0x118AA, /* U+118CA: WARANG CITI SMALL LETTER ANG */
4842 : [4224+0x0B] = 0x118AB, /* U+118CB: WARANG CITI SMALL LETTER GA */
4843 : [4224+0x0C] = 0x118AC, /* U+118CC: WARANG CITI SMALL LETTER KO */
4844 : [4224+0x0D] = 0x118AD, /* U+118CD: WARANG CITI SMALL LETTER ENY */
4845 : [4224+0x0E] = 0x118AE, /* U+118CE: WARANG CITI SMALL LETTER YUJ */
4846 : [4224+0x0F] = 0x118AF, /* U+118CF: WARANG CITI SMALL LETTER UC */
4847 : [4224+0x10] = 0x118B0, /* U+118D0: WARANG CITI SMALL LETTER ENN */
4848 : [4224+0x11] = 0x118B1, /* U+118D1: WARANG CITI SMALL LETTER ODD */
4849 : [4224+0x12] = 0x118B2, /* U+118D2: WARANG CITI SMALL LETTER TTE */
4850 : [4224+0x13] = 0x118B3, /* U+118D3: WARANG CITI SMALL LETTER NUNG */
4851 : [4224+0x14] = 0x118B4, /* U+118D4: WARANG CITI SMALL LETTER DA */
4852 : [4224+0x15] = 0x118B5, /* U+118D5: WARANG CITI SMALL LETTER AT */
4853 : [4224+0x16] = 0x118B6, /* U+118D6: WARANG CITI SMALL LETTER AM */
4854 : [4224+0x17] = 0x118B7, /* U+118D7: WARANG CITI SMALL LETTER BU */
4855 : [4224+0x18] = 0x118B8, /* U+118D8: WARANG CITI SMALL LETTER PU */
4856 : [4224+0x19] = 0x118B9, /* U+118D9: WARANG CITI SMALL LETTER HIYO */
4857 : [4224+0x1A] = 0x118BA, /* U+118DA: WARANG CITI SMALL LETTER HOLO */
4858 : [4224+0x1B] = 0x118BB, /* U+118DB: WARANG CITI SMALL LETTER HORR */
4859 : [4224+0x1C] = 0x118BC, /* U+118DC: WARANG CITI SMALL LETTER HAR */
4860 : [4224+0x1D] = 0x118BD, /* U+118DD: WARANG CITI SMALL LETTER SSUU */
4861 : [4224+0x1E] = 0x118BE, /* U+118DE: WARANG CITI SMALL LETTER SII */
4862 : [4224+0x1F] = 0x118BF, /* U+118DF: WARANG CITI SMALL LETTER VIYO */
4863 : [3712+0x16] = 4288 - 0x80, /* 360 226 ... */
4864 : [4288+0x39] = 4352 - 0x80, /* 360 226 271 ... */
4865 : [4352+0x20] = 0x16E40, /* U+16E60: MEDEFAIDRIN SMALL LETTER M */
4866 : [4352+0x21] = 0x16E41, /* U+16E61: MEDEFAIDRIN SMALL LETTER S */
4867 : [4352+0x22] = 0x16E42, /* U+16E62: MEDEFAIDRIN SMALL LETTER V */
4868 : [4352+0x23] = 0x16E43, /* U+16E63: MEDEFAIDRIN SMALL LETTER W */
4869 : [4352+0x24] = 0x16E44, /* U+16E64: MEDEFAIDRIN SMALL LETTER ATIU */
4870 : [4352+0x25] = 0x16E45, /* U+16E65: MEDEFAIDRIN SMALL LETTER Z */
4871 : [4352+0x26] = 0x16E46, /* U+16E66: MEDEFAIDRIN SMALL LETTER KP */
4872 : [4352+0x27] = 0x16E47, /* U+16E67: MEDEFAIDRIN SMALL LETTER P */
4873 : [4352+0x28] = 0x16E48, /* U+16E68: MEDEFAIDRIN SMALL LETTER T */
4874 : [4352+0x29] = 0x16E49, /* U+16E69: MEDEFAIDRIN SMALL LETTER G */
4875 : [4352+0x2A] = 0x16E4A, /* U+16E6A: MEDEFAIDRIN SMALL LETTER F */
4876 : [4352+0x2B] = 0x16E4B, /* U+16E6B: MEDEFAIDRIN SMALL LETTER I */
4877 : [4352+0x2C] = 0x16E4C, /* U+16E6C: MEDEFAIDRIN SMALL LETTER K */
4878 : [4352+0x2D] = 0x16E4D, /* U+16E6D: MEDEFAIDRIN SMALL LETTER A */
4879 : [4352+0x2E] = 0x16E4E, /* U+16E6E: MEDEFAIDRIN SMALL LETTER J */
4880 : [4352+0x2F] = 0x16E4F, /* U+16E6F: MEDEFAIDRIN SMALL LETTER E */
4881 : [4352+0x30] = 0x16E50, /* U+16E70: MEDEFAIDRIN SMALL LETTER B */
4882 : [4352+0x31] = 0x16E51, /* U+16E71: MEDEFAIDRIN SMALL LETTER C */
4883 : [4352+0x32] = 0x16E52, /* U+16E72: MEDEFAIDRIN SMALL LETTER U */
4884 : [4352+0x33] = 0x16E53, /* U+16E73: MEDEFAIDRIN SMALL LETTER YU */
4885 : [4352+0x34] = 0x16E54, /* U+16E74: MEDEFAIDRIN SMALL LETTER L */
4886 : [4352+0x35] = 0x16E55, /* U+16E75: MEDEFAIDRIN SMALL LETTER Q */
4887 : [4352+0x36] = 0x16E56, /* U+16E76: MEDEFAIDRIN SMALL LETTER HP */
4888 : [4352+0x37] = 0x16E57, /* U+16E77: MEDEFAIDRIN SMALL LETTER NY */
4889 : [4352+0x38] = 0x16E58, /* U+16E78: MEDEFAIDRIN SMALL LETTER X */
4890 : [4352+0x39] = 0x16E59, /* U+16E79: MEDEFAIDRIN SMALL LETTER D */
4891 : [4352+0x3A] = 0x16E5A, /* U+16E7A: MEDEFAIDRIN SMALL LETTER OE */
4892 : [4352+0x3B] = 0x16E5B, /* U+16E7B: MEDEFAIDRIN SMALL LETTER N */
4893 : [4352+0x3C] = 0x16E5C, /* U+16E7C: MEDEFAIDRIN SMALL LETTER R */
4894 : [4352+0x3D] = 0x16E5D, /* U+16E7D: MEDEFAIDRIN SMALL LETTER O */
4895 : [4352+0x3E] = 0x16E5E, /* U+16E7E: MEDEFAIDRIN SMALL LETTER AI */
4896 : [4352+0x3F] = 0x16E5F, /* U+16E7F: MEDEFAIDRIN SMALL LETTER Y */
4897 : [3712+0x1E] = 4416 - 0x80, /* 360 236 ... */
4898 : [4416+0x24] = 4480 - 0x80, /* 360 236 244 ... */
4899 : [4480+0x22] = 0x1E900, /* U+1E922: ADLAM SMALL LETTER ALIF */
4900 : [4480+0x23] = 0x1E901, /* U+1E923: ADLAM SMALL LETTER DAALI */
4901 : [4480+0x24] = 0x1E902, /* U+1E924: ADLAM SMALL LETTER LAAM */
4902 : [4480+0x25] = 0x1E903, /* U+1E925: ADLAM SMALL LETTER MIIM */
4903 : [4480+0x26] = 0x1E904, /* U+1E926: ADLAM SMALL LETTER BA */
4904 : [4480+0x27] = 0x1E905, /* U+1E927: ADLAM SMALL LETTER SINNYIIYHE */
4905 : [4480+0x28] = 0x1E906, /* U+1E928: ADLAM SMALL LETTER PE */
4906 : [4480+0x29] = 0x1E907, /* U+1E929: ADLAM SMALL LETTER BHE */
4907 : [4480+0x2A] = 0x1E908, /* U+1E92A: ADLAM SMALL LETTER RA */
4908 : [4480+0x2B] = 0x1E909, /* U+1E92B: ADLAM SMALL LETTER E */
4909 : [4480+0x2C] = 0x1E90A, /* U+1E92C: ADLAM SMALL LETTER FA */
4910 : [4480+0x2D] = 0x1E90B, /* U+1E92D: ADLAM SMALL LETTER I */
4911 : [4480+0x2E] = 0x1E90C, /* U+1E92E: ADLAM SMALL LETTER O */
4912 : [4480+0x2F] = 0x1E90D, /* U+1E92F: ADLAM SMALL LETTER DHA */
4913 : [4480+0x30] = 0x1E90E, /* U+1E930: ADLAM SMALL LETTER YHE */
4914 : [4480+0x31] = 0x1E90F, /* U+1E931: ADLAM SMALL LETTER WAW */
4915 : [4480+0x32] = 0x1E910, /* U+1E932: ADLAM SMALL LETTER NUN */
4916 : [4480+0x33] = 0x1E911, /* U+1E933: ADLAM SMALL LETTER KAF */
4917 : [4480+0x34] = 0x1E912, /* U+1E934: ADLAM SMALL LETTER YA */
4918 : [4480+0x35] = 0x1E913, /* U+1E935: ADLAM SMALL LETTER U */
4919 : [4480+0x36] = 0x1E914, /* U+1E936: ADLAM SMALL LETTER JIIM */
4920 : [4480+0x37] = 0x1E915, /* U+1E937: ADLAM SMALL LETTER CHI */
4921 : [4480+0x38] = 0x1E916, /* U+1E938: ADLAM SMALL LETTER HA */
4922 : [4480+0x39] = 0x1E917, /* U+1E939: ADLAM SMALL LETTER QAAF */
4923 : [4480+0x3A] = 0x1E918, /* U+1E93A: ADLAM SMALL LETTER GA */
4924 : [4480+0x3B] = 0x1E919, /* U+1E93B: ADLAM SMALL LETTER NYA */
4925 : [4480+0x3C] = 0x1E91A, /* U+1E93C: ADLAM SMALL LETTER TU */
4926 : [4480+0x3D] = 0x1E91B, /* U+1E93D: ADLAM SMALL LETTER NHA */
4927 : [4480+0x3E] = 0x1E91C, /* U+1E93E: ADLAM SMALL LETTER VA */
4928 : [4480+0x3F] = 0x1E91D, /* U+1E93F: ADLAM SMALL LETTER KHA */
4929 : [4416+0x25] = 4544 - 0x80, /* 360 236 245 ... */
4930 : [4544+0x00] = 0x1E91E, /* U+1E940: ADLAM SMALL LETTER GBE */
4931 : [4544+0x01] = 0x1E91F, /* U+1E941: ADLAM SMALL LETTER ZAL */
4932 : [4544+0x02] = 0x1E920, /* U+1E942: ADLAM SMALL LETTER KPO */
4933 : [4544+0x03] = 0x1E921, /* U+1E943: ADLAM SMALL LETTER SHA */
4934 : };
4935 : static const int casefold[4544] = {
4936 : [0x00] = 0x0000, /* U+0000: <control> */
4937 : [0x01] = 0x0001, /* U+0001: <control> */
4938 : [0x02] = 0x0002, /* U+0002: <control> */
4939 : [0x03] = 0x0003, /* U+0003: <control> */
4940 : [0x04] = 0x0004, /* U+0004: <control> */
4941 : [0x05] = 0x0005, /* U+0005: <control> */
4942 : [0x06] = 0x0006, /* U+0006: <control> */
4943 : [0x07] = 0x0007, /* U+0007: <control> */
4944 : [0x08] = 0x0008, /* U+0008: <control> */
4945 : [0x09] = 0x0009, /* U+0009: <control> */
4946 : [0x0A] = 0x000A, /* U+000A: <control> */
4947 : [0x0B] = 0x000B, /* U+000B: <control> */
4948 : [0x0C] = 0x000C, /* U+000C: <control> */
4949 : [0x0D] = 0x000D, /* U+000D: <control> */
4950 : [0x0E] = 0x000E, /* U+000E: <control> */
4951 : [0x0F] = 0x000F, /* U+000F: <control> */
4952 : [0x10] = 0x0010, /* U+0010: <control> */
4953 : [0x11] = 0x0011, /* U+0011: <control> */
4954 : [0x12] = 0x0012, /* U+0012: <control> */
4955 : [0x13] = 0x0013, /* U+0013: <control> */
4956 : [0x14] = 0x0014, /* U+0014: <control> */
4957 : [0x15] = 0x0015, /* U+0015: <control> */
4958 : [0x16] = 0x0016, /* U+0016: <control> */
4959 : [0x17] = 0x0017, /* U+0017: <control> */
4960 : [0x18] = 0x0018, /* U+0018: <control> */
4961 : [0x19] = 0x0019, /* U+0019: <control> */
4962 : [0x1A] = 0x001A, /* U+001A: <control> */
4963 : [0x1B] = 0x001B, /* U+001B: <control> */
4964 : [0x1C] = 0x001C, /* U+001C: <control> */
4965 : [0x1D] = 0x001D, /* U+001D: <control> */
4966 : [0x1E] = 0x001E, /* U+001E: <control> */
4967 : [0x1F] = 0x001F, /* U+001F: <control> */
4968 : [0x20] = 0x0020, /* U+0020: SPACE */
4969 : [0x21] = 0x0021, /* U+0021: EXCLAMATION MARK */
4970 : [0x22] = 0x0022, /* U+0022: QUOTATION MARK */
4971 : [0x23] = 0x0023, /* U+0023: NUMBER SIGN */
4972 : [0x24] = 0x0024, /* U+0024: DOLLAR SIGN */
4973 : [0x25] = 0x0025, /* U+0025: PERCENT SIGN */
4974 : [0x26] = 0x0026, /* U+0026: AMPERSAND */
4975 : [0x27] = 0x0027, /* U+0027: APOSTROPHE */
4976 : [0x28] = 0x0028, /* U+0028: LEFT PARENTHESIS */
4977 : [0x29] = 0x0029, /* U+0029: RIGHT PARENTHESIS */
4978 : [0x2A] = 0x002A, /* U+002A: ASTERISK */
4979 : [0x2B] = 0x002B, /* U+002B: PLUS SIGN */
4980 : [0x2C] = 0x002C, /* U+002C: COMMA */
4981 : [0x2D] = 0x002D, /* U+002D: HYPHEN-MINUS */
4982 : [0x2E] = 0x002E, /* U+002E: FULL STOP */
4983 : [0x2F] = 0x002F, /* U+002F: SOLIDUS */
4984 : [0x30] = 0x0030, /* U+0030: DIGIT ZERO */
4985 : [0x31] = 0x0031, /* U+0031: DIGIT ONE */
4986 : [0x32] = 0x0032, /* U+0032: DIGIT TWO */
4987 : [0x33] = 0x0033, /* U+0033: DIGIT THREE */
4988 : [0x34] = 0x0034, /* U+0034: DIGIT FOUR */
4989 : [0x35] = 0x0035, /* U+0035: DIGIT FIVE */
4990 : [0x36] = 0x0036, /* U+0036: DIGIT SIX */
4991 : [0x37] = 0x0037, /* U+0037: DIGIT SEVEN */
4992 : [0x38] = 0x0038, /* U+0038: DIGIT EIGHT */
4993 : [0x39] = 0x0039, /* U+0039: DIGIT NINE */
4994 : [0x3A] = 0x003A, /* U+003A: COLON */
4995 : [0x3B] = 0x003B, /* U+003B: SEMICOLON */
4996 : [0x3C] = 0x003C, /* U+003C: LESS-THAN SIGN */
4997 : [0x3D] = 0x003D, /* U+003D: EQUALS SIGN */
4998 : [0x3E] = 0x003E, /* U+003E: GREATER-THAN SIGN */
4999 : [0x3F] = 0x003F, /* U+003F: QUESTION MARK */
5000 : [0x40] = 0x0040, /* U+0040: COMMERCIAL AT */
5001 : [0x41] = 0x0061, /* U+0041: LATIN CAPITAL LETTER A */
5002 : [0x42] = 0x0062, /* U+0042: LATIN CAPITAL LETTER B */
5003 : [0x43] = 0x0063, /* U+0043: LATIN CAPITAL LETTER C */
5004 : [0x44] = 0x0064, /* U+0044: LATIN CAPITAL LETTER D */
5005 : [0x45] = 0x0065, /* U+0045: LATIN CAPITAL LETTER E */
5006 : [0x46] = 0x0066, /* U+0046: LATIN CAPITAL LETTER F */
5007 : [0x47] = 0x0067, /* U+0047: LATIN CAPITAL LETTER G */
5008 : [0x48] = 0x0068, /* U+0048: LATIN CAPITAL LETTER H */
5009 : [0x49] = 0x0069, /* U+0049: LATIN CAPITAL LETTER I */
5010 : [0x4A] = 0x006A, /* U+004A: LATIN CAPITAL LETTER J */
5011 : [0x4B] = 0x006B, /* U+004B: LATIN CAPITAL LETTER K */
5012 : [0x4C] = 0x006C, /* U+004C: LATIN CAPITAL LETTER L */
5013 : [0x4D] = 0x006D, /* U+004D: LATIN CAPITAL LETTER M */
5014 : [0x4E] = 0x006E, /* U+004E: LATIN CAPITAL LETTER N */
5015 : [0x4F] = 0x006F, /* U+004F: LATIN CAPITAL LETTER O */
5016 : [0x50] = 0x0070, /* U+0050: LATIN CAPITAL LETTER P */
5017 : [0x51] = 0x0071, /* U+0051: LATIN CAPITAL LETTER Q */
5018 : [0x52] = 0x0072, /* U+0052: LATIN CAPITAL LETTER R */
5019 : [0x53] = 0x0073, /* U+0053: LATIN CAPITAL LETTER S */
5020 : [0x54] = 0x0074, /* U+0054: LATIN CAPITAL LETTER T */
5021 : [0x55] = 0x0075, /* U+0055: LATIN CAPITAL LETTER U */
5022 : [0x56] = 0x0076, /* U+0056: LATIN CAPITAL LETTER V */
5023 : [0x57] = 0x0077, /* U+0057: LATIN CAPITAL LETTER W */
5024 : [0x58] = 0x0078, /* U+0058: LATIN CAPITAL LETTER X */
5025 : [0x59] = 0x0079, /* U+0059: LATIN CAPITAL LETTER Y */
5026 : [0x5A] = 0x007A, /* U+005A: LATIN CAPITAL LETTER Z */
5027 : [0x5B] = 0x005B, /* U+005B: LEFT SQUARE BRACKET */
5028 : [0x5C] = 0x005C, /* U+005C: REVERSE SOLIDUS */
5029 : [0x5D] = 0x005D, /* U+005D: RIGHT SQUARE BRACKET */
5030 : [0x5E] = 0x005E, /* U+005E: CIRCUMFLEX ACCENT */
5031 : [0x5F] = 0x005F, /* U+005F: LOW LINE */
5032 : [0x60] = 0x0060, /* U+0060: GRAVE ACCENT */
5033 : [0x61] = 0x0061, /* U+0061: LATIN SMALL LETTER A */
5034 : [0x62] = 0x0062, /* U+0062: LATIN SMALL LETTER B */
5035 : [0x63] = 0x0063, /* U+0063: LATIN SMALL LETTER C */
5036 : [0x64] = 0x0064, /* U+0064: LATIN SMALL LETTER D */
5037 : [0x65] = 0x0065, /* U+0065: LATIN SMALL LETTER E */
5038 : [0x66] = 0x0066, /* U+0066: LATIN SMALL LETTER F */
5039 : [0x67] = 0x0067, /* U+0067: LATIN SMALL LETTER G */
5040 : [0x68] = 0x0068, /* U+0068: LATIN SMALL LETTER H */
5041 : [0x69] = 0x0069, /* U+0069: LATIN SMALL LETTER I */
5042 : [0x6A] = 0x006A, /* U+006A: LATIN SMALL LETTER J */
5043 : [0x6B] = 0x006B, /* U+006B: LATIN SMALL LETTER K */
5044 : [0x6C] = 0x006C, /* U+006C: LATIN SMALL LETTER L */
5045 : [0x6D] = 0x006D, /* U+006D: LATIN SMALL LETTER M */
5046 : [0x6E] = 0x006E, /* U+006E: LATIN SMALL LETTER N */
5047 : [0x6F] = 0x006F, /* U+006F: LATIN SMALL LETTER O */
5048 : [0x70] = 0x0070, /* U+0070: LATIN SMALL LETTER P */
5049 : [0x71] = 0x0071, /* U+0071: LATIN SMALL LETTER Q */
5050 : [0x72] = 0x0072, /* U+0072: LATIN SMALL LETTER R */
5051 : [0x73] = 0x0073, /* U+0073: LATIN SMALL LETTER S */
5052 : [0x74] = 0x0074, /* U+0074: LATIN SMALL LETTER T */
5053 : [0x75] = 0x0075, /* U+0075: LATIN SMALL LETTER U */
5054 : [0x76] = 0x0076, /* U+0076: LATIN SMALL LETTER V */
5055 : [0x77] = 0x0077, /* U+0077: LATIN SMALL LETTER W */
5056 : [0x78] = 0x0078, /* U+0078: LATIN SMALL LETTER X */
5057 : [0x79] = 0x0079, /* U+0079: LATIN SMALL LETTER Y */
5058 : [0x7A] = 0x007A, /* U+007A: LATIN SMALL LETTER Z */
5059 : [0x7B] = 0x007B, /* U+007B: LEFT CURLY BRACKET */
5060 : [0x7C] = 0x007C, /* U+007C: VERTICAL LINE */
5061 : [0x7D] = 0x007D, /* U+007D: RIGHT CURLY BRACKET */
5062 : [0x7E] = 0x007E, /* U+007E: TILDE */
5063 : [0x7F] = 0x007F, /* U+007F: <control> */
5064 : [0xC2] = 256 - 0x80, /* 302 ... */
5065 : [256+0x35] = 0x03BC, /* U+00B5: MICRO SIGN */
5066 : [0xC3] = 320 - 0x80, /* 303 ... */
5067 : [320+0x00] = 0x00E0, /* U+00C0: LATIN CAPITAL LETTER A WITH GRAVE */
5068 : [320+0x01] = 0x00E1, /* U+00C1: LATIN CAPITAL LETTER A WITH ACUTE */
5069 : [320+0x02] = 0x00E2, /* U+00C2: LATIN CAPITAL LETTER A WITH CIRCUMFLEX */
5070 : [320+0x03] = 0x00E3, /* U+00C3: LATIN CAPITAL LETTER A WITH TILDE */
5071 : [320+0x04] = 0x00E4, /* U+00C4: LATIN CAPITAL LETTER A WITH DIAERESIS */
5072 : [320+0x05] = 0x00E5, /* U+00C5: LATIN CAPITAL LETTER A WITH RING ABOVE */
5073 : [320+0x06] = 0x00E6, /* U+00C6: LATIN CAPITAL LETTER AE */
5074 : [320+0x07] = 0x00E7, /* U+00C7: LATIN CAPITAL LETTER C WITH CEDILLA */
5075 : [320+0x08] = 0x00E8, /* U+00C8: LATIN CAPITAL LETTER E WITH GRAVE */
5076 : [320+0x09] = 0x00E9, /* U+00C9: LATIN CAPITAL LETTER E WITH ACUTE */
5077 : [320+0x0A] = 0x00EA, /* U+00CA: LATIN CAPITAL LETTER E WITH CIRCUMFLEX */
5078 : [320+0x0B] = 0x00EB, /* U+00CB: LATIN CAPITAL LETTER E WITH DIAERESIS */
5079 : [320+0x0C] = 0x00EC, /* U+00CC: LATIN CAPITAL LETTER I WITH GRAVE */
5080 : [320+0x0D] = 0x00ED, /* U+00CD: LATIN CAPITAL LETTER I WITH ACUTE */
5081 : [320+0x0E] = 0x00EE, /* U+00CE: LATIN CAPITAL LETTER I WITH CIRCUMFLEX */
5082 : [320+0x0F] = 0x00EF, /* U+00CF: LATIN CAPITAL LETTER I WITH DIAERESIS */
5083 : [320+0x10] = 0x00F0, /* U+00D0: LATIN CAPITAL LETTER ETH */
5084 : [320+0x11] = 0x00F1, /* U+00D1: LATIN CAPITAL LETTER N WITH TILDE */
5085 : [320+0x12] = 0x00F2, /* U+00D2: LATIN CAPITAL LETTER O WITH GRAVE */
5086 : [320+0x13] = 0x00F3, /* U+00D3: LATIN CAPITAL LETTER O WITH ACUTE */
5087 : [320+0x14] = 0x00F4, /* U+00D4: LATIN CAPITAL LETTER O WITH CIRCUMFLEX */
5088 : [320+0x15] = 0x00F5, /* U+00D5: LATIN CAPITAL LETTER O WITH TILDE */
5089 : [320+0x16] = 0x00F6, /* U+00D6: LATIN CAPITAL LETTER O WITH DIAERESIS */
5090 : [320+0x18] = 0x00F8, /* U+00D8: LATIN CAPITAL LETTER O WITH STROKE */
5091 : [320+0x19] = 0x00F9, /* U+00D9: LATIN CAPITAL LETTER U WITH GRAVE */
5092 : [320+0x1A] = 0x00FA, /* U+00DA: LATIN CAPITAL LETTER U WITH ACUTE */
5093 : [320+0x1B] = 0x00FB, /* U+00DB: LATIN CAPITAL LETTER U WITH CIRCUMFLEX */
5094 : [320+0x1C] = 0x00FC, /* U+00DC: LATIN CAPITAL LETTER U WITH DIAERESIS */
5095 : [320+0x1D] = 0x00FD, /* U+00DD: LATIN CAPITAL LETTER Y WITH ACUTE */
5096 : [320+0x1E] = 0x00FE, /* U+00DE: LATIN CAPITAL LETTER THORN */
5097 : [320+0x1F] = -1, /* U+00DF: LATIN SMALL LETTER SHARP S */
5098 : [0xC4] = 384 - 0x80, /* 304 ... */
5099 : [384+0x00] = 0x0101, /* U+0100: LATIN CAPITAL LETTER A WITH MACRON */
5100 : [384+0x02] = 0x0103, /* U+0102: LATIN CAPITAL LETTER A WITH BREVE */
5101 : [384+0x04] = 0x0105, /* U+0104: LATIN CAPITAL LETTER A WITH OGONEK */
5102 : [384+0x06] = 0x0107, /* U+0106: LATIN CAPITAL LETTER C WITH ACUTE */
5103 : [384+0x08] = 0x0109, /* U+0108: LATIN CAPITAL LETTER C WITH CIRCUMFLEX */
5104 : [384+0x0A] = 0x010B, /* U+010A: LATIN CAPITAL LETTER C WITH DOT ABOVE */
5105 : [384+0x0C] = 0x010D, /* U+010C: LATIN CAPITAL LETTER C WITH CARON */
5106 : [384+0x0E] = 0x010F, /* U+010E: LATIN CAPITAL LETTER D WITH CARON */
5107 : [384+0x10] = 0x0111, /* U+0110: LATIN CAPITAL LETTER D WITH STROKE */
5108 : [384+0x12] = 0x0113, /* U+0112: LATIN CAPITAL LETTER E WITH MACRON */
5109 : [384+0x14] = 0x0115, /* U+0114: LATIN CAPITAL LETTER E WITH BREVE */
5110 : [384+0x16] = 0x0117, /* U+0116: LATIN CAPITAL LETTER E WITH DOT ABOVE */
5111 : [384+0x18] = 0x0119, /* U+0118: LATIN CAPITAL LETTER E WITH OGONEK */
5112 : [384+0x1A] = 0x011B, /* U+011A: LATIN CAPITAL LETTER E WITH CARON */
5113 : [384+0x1C] = 0x011D, /* U+011C: LATIN CAPITAL LETTER G WITH CIRCUMFLEX */
5114 : [384+0x1E] = 0x011F, /* U+011E: LATIN CAPITAL LETTER G WITH BREVE */
5115 : [384+0x20] = 0x0121, /* U+0120: LATIN CAPITAL LETTER G WITH DOT ABOVE */
5116 : [384+0x22] = 0x0123, /* U+0122: LATIN CAPITAL LETTER G WITH CEDILLA */
5117 : [384+0x24] = 0x0125, /* U+0124: LATIN CAPITAL LETTER H WITH CIRCUMFLEX */
5118 : [384+0x26] = 0x0127, /* U+0126: LATIN CAPITAL LETTER H WITH STROKE */
5119 : [384+0x28] = 0x0129, /* U+0128: LATIN CAPITAL LETTER I WITH TILDE */
5120 : [384+0x2A] = 0x012B, /* U+012A: LATIN CAPITAL LETTER I WITH MACRON */
5121 : [384+0x2C] = 0x012D, /* U+012C: LATIN CAPITAL LETTER I WITH BREVE */
5122 : [384+0x2E] = 0x012F, /* U+012E: LATIN CAPITAL LETTER I WITH OGONEK */
5123 : [384+0x30] = -2, /* U+0130: LATIN CAPITAL LETTER I WITH DOT ABOVE */
5124 : [384+0x32] = 0x0133, /* U+0132: LATIN CAPITAL LIGATURE IJ */
5125 : [384+0x34] = 0x0135, /* U+0134: LATIN CAPITAL LETTER J WITH CIRCUMFLEX */
5126 : [384+0x36] = 0x0137, /* U+0136: LATIN CAPITAL LETTER K WITH CEDILLA */
5127 : [384+0x39] = 0x013A, /* U+0139: LATIN CAPITAL LETTER L WITH ACUTE */
5128 : [384+0x3B] = 0x013C, /* U+013B: LATIN CAPITAL LETTER L WITH CEDILLA */
5129 : [384+0x3D] = 0x013E, /* U+013D: LATIN CAPITAL LETTER L WITH CARON */
5130 : [384+0x3F] = 0x0140, /* U+013F: LATIN CAPITAL LETTER L WITH MIDDLE DOT */
5131 : [0xC5] = 448 - 0x80, /* 305 ... */
5132 : [448+0x01] = 0x0142, /* U+0141: LATIN CAPITAL LETTER L WITH STROKE */
5133 : [448+0x03] = 0x0144, /* U+0143: LATIN CAPITAL LETTER N WITH ACUTE */
5134 : [448+0x05] = 0x0146, /* U+0145: LATIN CAPITAL LETTER N WITH CEDILLA */
5135 : [448+0x07] = 0x0148, /* U+0147: LATIN CAPITAL LETTER N WITH CARON */
5136 : [448+0x09] = -3, /* U+0149: LATIN SMALL LETTER N PRECEDED BY APOSTROPHE */
5137 : [448+0x0A] = 0x014B, /* U+014A: LATIN CAPITAL LETTER ENG */
5138 : [448+0x0C] = 0x014D, /* U+014C: LATIN CAPITAL LETTER O WITH MACRON */
5139 : [448+0x0E] = 0x014F, /* U+014E: LATIN CAPITAL LETTER O WITH BREVE */
5140 : [448+0x10] = 0x0151, /* U+0150: LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */
5141 : [448+0x12] = 0x0153, /* U+0152: LATIN CAPITAL LIGATURE OE */
5142 : [448+0x14] = 0x0155, /* U+0154: LATIN CAPITAL LETTER R WITH ACUTE */
5143 : [448+0x16] = 0x0157, /* U+0156: LATIN CAPITAL LETTER R WITH CEDILLA */
5144 : [448+0x18] = 0x0159, /* U+0158: LATIN CAPITAL LETTER R WITH CARON */
5145 : [448+0x1A] = 0x015B, /* U+015A: LATIN CAPITAL LETTER S WITH ACUTE */
5146 : [448+0x1C] = 0x015D, /* U+015C: LATIN CAPITAL LETTER S WITH CIRCUMFLEX */
5147 : [448+0x1E] = 0x015F, /* U+015E: LATIN CAPITAL LETTER S WITH CEDILLA */
5148 : [448+0x20] = 0x0161, /* U+0160: LATIN CAPITAL LETTER S WITH CARON */
5149 : [448+0x22] = 0x0163, /* U+0162: LATIN CAPITAL LETTER T WITH CEDILLA */
5150 : [448+0x24] = 0x0165, /* U+0164: LATIN CAPITAL LETTER T WITH CARON */
5151 : [448+0x26] = 0x0167, /* U+0166: LATIN CAPITAL LETTER T WITH STROKE */
5152 : [448+0x28] = 0x0169, /* U+0168: LATIN CAPITAL LETTER U WITH TILDE */
5153 : [448+0x2A] = 0x016B, /* U+016A: LATIN CAPITAL LETTER U WITH MACRON */
5154 : [448+0x2C] = 0x016D, /* U+016C: LATIN CAPITAL LETTER U WITH BREVE */
5155 : [448+0x2E] = 0x016F, /* U+016E: LATIN CAPITAL LETTER U WITH RING ABOVE */
5156 : [448+0x30] = 0x0171, /* U+0170: LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */
5157 : [448+0x32] = 0x0173, /* U+0172: LATIN CAPITAL LETTER U WITH OGONEK */
5158 : [448+0x34] = 0x0175, /* U+0174: LATIN CAPITAL LETTER W WITH CIRCUMFLEX */
5159 : [448+0x36] = 0x0177, /* U+0176: LATIN CAPITAL LETTER Y WITH CIRCUMFLEX */
5160 : [448+0x38] = 0x00FF, /* U+0178: LATIN CAPITAL LETTER Y WITH DIAERESIS */
5161 : [448+0x39] = 0x017A, /* U+0179: LATIN CAPITAL LETTER Z WITH ACUTE */
5162 : [448+0x3B] = 0x017C, /* U+017B: LATIN CAPITAL LETTER Z WITH DOT ABOVE */
5163 : [448+0x3D] = 0x017E, /* U+017D: LATIN CAPITAL LETTER Z WITH CARON */
5164 : [448+0x3F] = 0x0073, /* U+017F: LATIN SMALL LETTER LONG S */
5165 : [0xC6] = 512 - 0x80, /* 306 ... */
5166 : [512+0x01] = 0x0253, /* U+0181: LATIN CAPITAL LETTER B WITH HOOK */
5167 : [512+0x02] = 0x0183, /* U+0182: LATIN CAPITAL LETTER B WITH TOPBAR */
5168 : [512+0x04] = 0x0185, /* U+0184: LATIN CAPITAL LETTER TONE SIX */
5169 : [512+0x06] = 0x0254, /* U+0186: LATIN CAPITAL LETTER OPEN O */
5170 : [512+0x07] = 0x0188, /* U+0187: LATIN CAPITAL LETTER C WITH HOOK */
5171 : [512+0x09] = 0x0256, /* U+0189: LATIN CAPITAL LETTER AFRICAN D */
5172 : [512+0x0A] = 0x0257, /* U+018A: LATIN CAPITAL LETTER D WITH HOOK */
5173 : [512+0x0B] = 0x018C, /* U+018B: LATIN CAPITAL LETTER D WITH TOPBAR */
5174 : [512+0x0E] = 0x01DD, /* U+018E: LATIN CAPITAL LETTER REVERSED E */
5175 : [512+0x0F] = 0x0259, /* U+018F: LATIN CAPITAL LETTER SCHWA */
5176 : [512+0x10] = 0x025B, /* U+0190: LATIN CAPITAL LETTER OPEN E */
5177 : [512+0x11] = 0x0192, /* U+0191: LATIN CAPITAL LETTER F WITH HOOK */
5178 : [512+0x13] = 0x0260, /* U+0193: LATIN CAPITAL LETTER G WITH HOOK */
5179 : [512+0x14] = 0x0263, /* U+0194: LATIN CAPITAL LETTER GAMMA */
5180 : [512+0x16] = 0x0269, /* U+0196: LATIN CAPITAL LETTER IOTA */
5181 : [512+0x17] = 0x0268, /* U+0197: LATIN CAPITAL LETTER I WITH STROKE */
5182 : [512+0x18] = 0x0199, /* U+0198: LATIN CAPITAL LETTER K WITH HOOK */
5183 : [512+0x1C] = 0x026F, /* U+019C: LATIN CAPITAL LETTER TURNED M */
5184 : [512+0x1D] = 0x0272, /* U+019D: LATIN CAPITAL LETTER N WITH LEFT HOOK */
5185 : [512+0x1F] = 0x0275, /* U+019F: LATIN CAPITAL LETTER O WITH MIDDLE TILDE */
5186 : [512+0x20] = 0x01A1, /* U+01A0: LATIN CAPITAL LETTER O WITH HORN */
5187 : [512+0x22] = 0x01A3, /* U+01A2: LATIN CAPITAL LETTER OI */
5188 : [512+0x24] = 0x01A5, /* U+01A4: LATIN CAPITAL LETTER P WITH HOOK */
5189 : [512+0x26] = 0x0280, /* U+01A6: LATIN LETTER YR */
5190 : [512+0x27] = 0x01A8, /* U+01A7: LATIN CAPITAL LETTER TONE TWO */
5191 : [512+0x29] = 0x0283, /* U+01A9: LATIN CAPITAL LETTER ESH */
5192 : [512+0x2C] = 0x01AD, /* U+01AC: LATIN CAPITAL LETTER T WITH HOOK */
5193 : [512+0x2E] = 0x0288, /* U+01AE: LATIN CAPITAL LETTER T WITH RETROFLEX HOOK */
5194 : [512+0x2F] = 0x01B0, /* U+01AF: LATIN CAPITAL LETTER U WITH HORN */
5195 : [512+0x31] = 0x028A, /* U+01B1: LATIN CAPITAL LETTER UPSILON */
5196 : [512+0x32] = 0x028B, /* U+01B2: LATIN CAPITAL LETTER V WITH HOOK */
5197 : [512+0x33] = 0x01B4, /* U+01B3: LATIN CAPITAL LETTER Y WITH HOOK */
5198 : [512+0x35] = 0x01B6, /* U+01B5: LATIN CAPITAL LETTER Z WITH STROKE */
5199 : [512+0x37] = 0x0292, /* U+01B7: LATIN CAPITAL LETTER EZH */
5200 : [512+0x38] = 0x01B9, /* U+01B8: LATIN CAPITAL LETTER EZH REVERSED */
5201 : [512+0x3C] = 0x01BD, /* U+01BC: LATIN CAPITAL LETTER TONE FIVE */
5202 : [0xC7] = 576 - 0x80, /* 307 ... */
5203 : [576+0x04] = 0x01C6, /* U+01C4: LATIN CAPITAL LETTER DZ WITH CARON */
5204 : [576+0x05] = 0x01C6, /* U+01C5: LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON */
5205 : [576+0x07] = 0x01C9, /* U+01C7: LATIN CAPITAL LETTER LJ */
5206 : [576+0x08] = 0x01C9, /* U+01C8: LATIN CAPITAL LETTER L WITH SMALL LETTER J */
5207 : [576+0x0A] = 0x01CC, /* U+01CA: LATIN CAPITAL LETTER NJ */
5208 : [576+0x0B] = 0x01CC, /* U+01CB: LATIN CAPITAL LETTER N WITH SMALL LETTER J */
5209 : [576+0x0D] = 0x01CE, /* U+01CD: LATIN CAPITAL LETTER A WITH CARON */
5210 : [576+0x0F] = 0x01D0, /* U+01CF: LATIN CAPITAL LETTER I WITH CARON */
5211 : [576+0x11] = 0x01D2, /* U+01D1: LATIN CAPITAL LETTER O WITH CARON */
5212 : [576+0x13] = 0x01D4, /* U+01D3: LATIN CAPITAL LETTER U WITH CARON */
5213 : [576+0x15] = 0x01D6, /* U+01D5: LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON */
5214 : [576+0x17] = 0x01D8, /* U+01D7: LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE */
5215 : [576+0x19] = 0x01DA, /* U+01D9: LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON */
5216 : [576+0x1B] = 0x01DC, /* U+01DB: LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE */
5217 : [576+0x1E] = 0x01DF, /* U+01DE: LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */
5218 : [576+0x20] = 0x01E1, /* U+01E0: LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON */
5219 : [576+0x22] = 0x01E3, /* U+01E2: LATIN CAPITAL LETTER AE WITH MACRON */
5220 : [576+0x24] = 0x01E5, /* U+01E4: LATIN CAPITAL LETTER G WITH STROKE */
5221 : [576+0x26] = 0x01E7, /* U+01E6: LATIN CAPITAL LETTER G WITH CARON */
5222 : [576+0x28] = 0x01E9, /* U+01E8: LATIN CAPITAL LETTER K WITH CARON */
5223 : [576+0x2A] = 0x01EB, /* U+01EA: LATIN CAPITAL LETTER O WITH OGONEK */
5224 : [576+0x2C] = 0x01ED, /* U+01EC: LATIN CAPITAL LETTER O WITH OGONEK AND MACRON */
5225 : [576+0x2E] = 0x01EF, /* U+01EE: LATIN CAPITAL LETTER EZH WITH CARON */
5226 : [576+0x30] = -4, /* U+01F0: LATIN SMALL LETTER J WITH CARON */
5227 : [576+0x31] = 0x01F3, /* U+01F1: LATIN CAPITAL LETTER DZ */
5228 : [576+0x32] = 0x01F3, /* U+01F2: LATIN CAPITAL LETTER D WITH SMALL LETTER Z */
5229 : [576+0x34] = 0x01F5, /* U+01F4: LATIN CAPITAL LETTER G WITH ACUTE */
5230 : [576+0x36] = 0x0195, /* U+01F6: LATIN CAPITAL LETTER HWAIR */
5231 : [576+0x37] = 0x01BF, /* U+01F7: LATIN CAPITAL LETTER WYNN */
5232 : [576+0x38] = 0x01F9, /* U+01F8: LATIN CAPITAL LETTER N WITH GRAVE */
5233 : [576+0x3A] = 0x01FB, /* U+01FA: LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE */
5234 : [576+0x3C] = 0x01FD, /* U+01FC: LATIN CAPITAL LETTER AE WITH ACUTE */
5235 : [576+0x3E] = 0x01FF, /* U+01FE: LATIN CAPITAL LETTER O WITH STROKE AND ACUTE */
5236 : [0xC8] = 640 - 0x80, /* 310 ... */
5237 : [640+0x00] = 0x0201, /* U+0200: LATIN CAPITAL LETTER A WITH DOUBLE GRAVE */
5238 : [640+0x02] = 0x0203, /* U+0202: LATIN CAPITAL LETTER A WITH INVERTED BREVE */
5239 : [640+0x04] = 0x0205, /* U+0204: LATIN CAPITAL LETTER E WITH DOUBLE GRAVE */
5240 : [640+0x06] = 0x0207, /* U+0206: LATIN CAPITAL LETTER E WITH INVERTED BREVE */
5241 : [640+0x08] = 0x0209, /* U+0208: LATIN CAPITAL LETTER I WITH DOUBLE GRAVE */
5242 : [640+0x0A] = 0x020B, /* U+020A: LATIN CAPITAL LETTER I WITH INVERTED BREVE */
5243 : [640+0x0C] = 0x020D, /* U+020C: LATIN CAPITAL LETTER O WITH DOUBLE GRAVE */
5244 : [640+0x0E] = 0x020F, /* U+020E: LATIN CAPITAL LETTER O WITH INVERTED BREVE */
5245 : [640+0x10] = 0x0211, /* U+0210: LATIN CAPITAL LETTER R WITH DOUBLE GRAVE */
5246 : [640+0x12] = 0x0213, /* U+0212: LATIN CAPITAL LETTER R WITH INVERTED BREVE */
5247 : [640+0x14] = 0x0215, /* U+0214: LATIN CAPITAL LETTER U WITH DOUBLE GRAVE */
5248 : [640+0x16] = 0x0217, /* U+0216: LATIN CAPITAL LETTER U WITH INVERTED BREVE */
5249 : [640+0x18] = 0x0219, /* U+0218: LATIN CAPITAL LETTER S WITH COMMA BELOW */
5250 : [640+0x1A] = 0x021B, /* U+021A: LATIN CAPITAL LETTER T WITH COMMA BELOW */
5251 : [640+0x1C] = 0x021D, /* U+021C: LATIN CAPITAL LETTER YOGH */
5252 : [640+0x1E] = 0x021F, /* U+021E: LATIN CAPITAL LETTER H WITH CARON */
5253 : [640+0x20] = 0x019E, /* U+0220: LATIN CAPITAL LETTER N WITH LONG RIGHT LEG */
5254 : [640+0x22] = 0x0223, /* U+0222: LATIN CAPITAL LETTER OU */
5255 : [640+0x24] = 0x0225, /* U+0224: LATIN CAPITAL LETTER Z WITH HOOK */
5256 : [640+0x26] = 0x0227, /* U+0226: LATIN CAPITAL LETTER A WITH DOT ABOVE */
5257 : [640+0x28] = 0x0229, /* U+0228: LATIN CAPITAL LETTER E WITH CEDILLA */
5258 : [640+0x2A] = 0x022B, /* U+022A: LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON */
5259 : [640+0x2C] = 0x022D, /* U+022C: LATIN CAPITAL LETTER O WITH TILDE AND MACRON */
5260 : [640+0x2E] = 0x022F, /* U+022E: LATIN CAPITAL LETTER O WITH DOT ABOVE */
5261 : [640+0x30] = 0x0231, /* U+0230: LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON */
5262 : [640+0x32] = 0x0233, /* U+0232: LATIN CAPITAL LETTER Y WITH MACRON */
5263 : [640+0x3A] = 0x2C65, /* U+023A: LATIN CAPITAL LETTER A WITH STROKE */
5264 : [640+0x3B] = 0x023C, /* U+023B: LATIN CAPITAL LETTER C WITH STROKE */
5265 : [640+0x3D] = 0x019A, /* U+023D: LATIN CAPITAL LETTER L WITH BAR */
5266 : [640+0x3E] = 0x2C66, /* U+023E: LATIN CAPITAL LETTER T WITH DIAGONAL STROKE */
5267 : [0xC9] = 704 - 0x80, /* 311 ... */
5268 : [704+0x01] = 0x0242, /* U+0241: LATIN CAPITAL LETTER GLOTTAL STOP */
5269 : [704+0x03] = 0x0180, /* U+0243: LATIN CAPITAL LETTER B WITH STROKE */
5270 : [704+0x04] = 0x0289, /* U+0244: LATIN CAPITAL LETTER U BAR */
5271 : [704+0x05] = 0x028C, /* U+0245: LATIN CAPITAL LETTER TURNED V */
5272 : [704+0x06] = 0x0247, /* U+0246: LATIN CAPITAL LETTER E WITH STROKE */
5273 : [704+0x08] = 0x0249, /* U+0248: LATIN CAPITAL LETTER J WITH STROKE */
5274 : [704+0x0A] = 0x024B, /* U+024A: LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL */
5275 : [704+0x0C] = 0x024D, /* U+024C: LATIN CAPITAL LETTER R WITH STROKE */
5276 : [704+0x0E] = 0x024F, /* U+024E: LATIN CAPITAL LETTER Y WITH STROKE */
5277 : [0xCD] = 768 - 0x80, /* 315 ... */
5278 : [768+0x05] = 0x03B9, /* U+0345: COMBINING GREEK YPOGEGRAMMENI */
5279 : [768+0x30] = 0x0371, /* U+0370: GREEK CAPITAL LETTER HETA */
5280 : [768+0x32] = 0x0373, /* U+0372: GREEK CAPITAL LETTER ARCHAIC SAMPI */
5281 : [768+0x36] = 0x0377, /* U+0376: GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA */
5282 : [768+0x3F] = 0x03F3, /* U+037F: GREEK CAPITAL LETTER YOT */
5283 : [0xCE] = 832 - 0x80, /* 316 ... */
5284 : [832+0x06] = 0x03AC, /* U+0386: GREEK CAPITAL LETTER ALPHA WITH TONOS */
5285 : [832+0x08] = 0x03AD, /* U+0388: GREEK CAPITAL LETTER EPSILON WITH TONOS */
5286 : [832+0x09] = 0x03AE, /* U+0389: GREEK CAPITAL LETTER ETA WITH TONOS */
5287 : [832+0x0A] = 0x03AF, /* U+038A: GREEK CAPITAL LETTER IOTA WITH TONOS */
5288 : [832+0x0C] = 0x03CC, /* U+038C: GREEK CAPITAL LETTER OMICRON WITH TONOS */
5289 : [832+0x0E] = 0x03CD, /* U+038E: GREEK CAPITAL LETTER UPSILON WITH TONOS */
5290 : [832+0x0F] = 0x03CE, /* U+038F: GREEK CAPITAL LETTER OMEGA WITH TONOS */
5291 : [832+0x10] = -5, /* U+0390: GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */
5292 : [832+0x11] = 0x03B1, /* U+0391: GREEK CAPITAL LETTER ALPHA */
5293 : [832+0x12] = 0x03B2, /* U+0392: GREEK CAPITAL LETTER BETA */
5294 : [832+0x13] = 0x03B3, /* U+0393: GREEK CAPITAL LETTER GAMMA */
5295 : [832+0x14] = 0x03B4, /* U+0394: GREEK CAPITAL LETTER DELTA */
5296 : [832+0x15] = 0x03B5, /* U+0395: GREEK CAPITAL LETTER EPSILON */
5297 : [832+0x16] = 0x03B6, /* U+0396: GREEK CAPITAL LETTER ZETA */
5298 : [832+0x17] = 0x03B7, /* U+0397: GREEK CAPITAL LETTER ETA */
5299 : [832+0x18] = 0x03B8, /* U+0398: GREEK CAPITAL LETTER THETA */
5300 : [832+0x19] = 0x03B9, /* U+0399: GREEK CAPITAL LETTER IOTA */
5301 : [832+0x1A] = 0x03BA, /* U+039A: GREEK CAPITAL LETTER KAPPA */
5302 : [832+0x1B] = 0x03BB, /* U+039B: GREEK CAPITAL LETTER LAMDA */
5303 : [832+0x1C] = 0x03BC, /* U+039C: GREEK CAPITAL LETTER MU */
5304 : [832+0x1D] = 0x03BD, /* U+039D: GREEK CAPITAL LETTER NU */
5305 : [832+0x1E] = 0x03BE, /* U+039E: GREEK CAPITAL LETTER XI */
5306 : [832+0x1F] = 0x03BF, /* U+039F: GREEK CAPITAL LETTER OMICRON */
5307 : [832+0x20] = 0x03C0, /* U+03A0: GREEK CAPITAL LETTER PI */
5308 : [832+0x21] = 0x03C1, /* U+03A1: GREEK CAPITAL LETTER RHO */
5309 : [832+0x23] = 0x03C3, /* U+03A3: GREEK CAPITAL LETTER SIGMA */
5310 : [832+0x24] = 0x03C4, /* U+03A4: GREEK CAPITAL LETTER TAU */
5311 : [832+0x25] = 0x03C5, /* U+03A5: GREEK CAPITAL LETTER UPSILON */
5312 : [832+0x26] = 0x03C6, /* U+03A6: GREEK CAPITAL LETTER PHI */
5313 : [832+0x27] = 0x03C7, /* U+03A7: GREEK CAPITAL LETTER CHI */
5314 : [832+0x28] = 0x03C8, /* U+03A8: GREEK CAPITAL LETTER PSI */
5315 : [832+0x29] = 0x03C9, /* U+03A9: GREEK CAPITAL LETTER OMEGA */
5316 : [832+0x2A] = 0x03CA, /* U+03AA: GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */
5317 : [832+0x2B] = 0x03CB, /* U+03AB: GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */
5318 : [832+0x30] = -6, /* U+03B0: GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */
5319 : [0xCF] = 896 - 0x80, /* 317 ... */
5320 : [896+0x02] = 0x03C3, /* U+03C2: GREEK SMALL LETTER FINAL SIGMA */
5321 : [896+0x0F] = 0x03D7, /* U+03CF: GREEK CAPITAL KAI SYMBOL */
5322 : [896+0x10] = 0x03B2, /* U+03D0: GREEK BETA SYMBOL */
5323 : [896+0x11] = 0x03B8, /* U+03D1: GREEK THETA SYMBOL */
5324 : [896+0x15] = 0x03C6, /* U+03D5: GREEK PHI SYMBOL */
5325 : [896+0x16] = 0x03C0, /* U+03D6: GREEK PI SYMBOL */
5326 : [896+0x18] = 0x03D9, /* U+03D8: GREEK LETTER ARCHAIC KOPPA */
5327 : [896+0x1A] = 0x03DB, /* U+03DA: GREEK LETTER STIGMA */
5328 : [896+0x1C] = 0x03DD, /* U+03DC: GREEK LETTER DIGAMMA */
5329 : [896+0x1E] = 0x03DF, /* U+03DE: GREEK LETTER KOPPA */
5330 : [896+0x20] = 0x03E1, /* U+03E0: GREEK LETTER SAMPI */
5331 : [896+0x22] = 0x03E3, /* U+03E2: COPTIC CAPITAL LETTER SHEI */
5332 : [896+0x24] = 0x03E5, /* U+03E4: COPTIC CAPITAL LETTER FEI */
5333 : [896+0x26] = 0x03E7, /* U+03E6: COPTIC CAPITAL LETTER KHEI */
5334 : [896+0x28] = 0x03E9, /* U+03E8: COPTIC CAPITAL LETTER HORI */
5335 : [896+0x2A] = 0x03EB, /* U+03EA: COPTIC CAPITAL LETTER GANGIA */
5336 : [896+0x2C] = 0x03ED, /* U+03EC: COPTIC CAPITAL LETTER SHIMA */
5337 : [896+0x2E] = 0x03EF, /* U+03EE: COPTIC CAPITAL LETTER DEI */
5338 : [896+0x30] = 0x03BA, /* U+03F0: GREEK KAPPA SYMBOL */
5339 : [896+0x31] = 0x03C1, /* U+03F1: GREEK RHO SYMBOL */
5340 : [896+0x34] = 0x03B8, /* U+03F4: GREEK CAPITAL THETA SYMBOL */
5341 : [896+0x35] = 0x03B5, /* U+03F5: GREEK LUNATE EPSILON SYMBOL */
5342 : [896+0x37] = 0x03F8, /* U+03F7: GREEK CAPITAL LETTER SHO */
5343 : [896+0x39] = 0x03F2, /* U+03F9: GREEK CAPITAL LUNATE SIGMA SYMBOL */
5344 : [896+0x3A] = 0x03FB, /* U+03FA: GREEK CAPITAL LETTER SAN */
5345 : [896+0x3D] = 0x037B, /* U+03FD: GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL */
5346 : [896+0x3E] = 0x037C, /* U+03FE: GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL */
5347 : [896+0x3F] = 0x037D, /* U+03FF: GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL */
5348 : [0xD0] = 960 - 0x80, /* 320 ... */
5349 : [960+0x00] = 0x0450, /* U+0400: CYRILLIC CAPITAL LETTER IE WITH GRAVE */
5350 : [960+0x01] = 0x0451, /* U+0401: CYRILLIC CAPITAL LETTER IO */
5351 : [960+0x02] = 0x0452, /* U+0402: CYRILLIC CAPITAL LETTER DJE */
5352 : [960+0x03] = 0x0453, /* U+0403: CYRILLIC CAPITAL LETTER GJE */
5353 : [960+0x04] = 0x0454, /* U+0404: CYRILLIC CAPITAL LETTER UKRAINIAN IE */
5354 : [960+0x05] = 0x0455, /* U+0405: CYRILLIC CAPITAL LETTER DZE */
5355 : [960+0x06] = 0x0456, /* U+0406: CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */
5356 : [960+0x07] = 0x0457, /* U+0407: CYRILLIC CAPITAL LETTER YI */
5357 : [960+0x08] = 0x0458, /* U+0408: CYRILLIC CAPITAL LETTER JE */
5358 : [960+0x09] = 0x0459, /* U+0409: CYRILLIC CAPITAL LETTER LJE */
5359 : [960+0x0A] = 0x045A, /* U+040A: CYRILLIC CAPITAL LETTER NJE */
5360 : [960+0x0B] = 0x045B, /* U+040B: CYRILLIC CAPITAL LETTER TSHE */
5361 : [960+0x0C] = 0x045C, /* U+040C: CYRILLIC CAPITAL LETTER KJE */
5362 : [960+0x0D] = 0x045D, /* U+040D: CYRILLIC CAPITAL LETTER I WITH GRAVE */
5363 : [960+0x0E] = 0x045E, /* U+040E: CYRILLIC CAPITAL LETTER SHORT U */
5364 : [960+0x0F] = 0x045F, /* U+040F: CYRILLIC CAPITAL LETTER DZHE */
5365 : [960+0x10] = 0x0430, /* U+0410: CYRILLIC CAPITAL LETTER A */
5366 : [960+0x11] = 0x0431, /* U+0411: CYRILLIC CAPITAL LETTER BE */
5367 : [960+0x12] = 0x0432, /* U+0412: CYRILLIC CAPITAL LETTER VE */
5368 : [960+0x13] = 0x0433, /* U+0413: CYRILLIC CAPITAL LETTER GHE */
5369 : [960+0x14] = 0x0434, /* U+0414: CYRILLIC CAPITAL LETTER DE */
5370 : [960+0x15] = 0x0435, /* U+0415: CYRILLIC CAPITAL LETTER IE */
5371 : [960+0x16] = 0x0436, /* U+0416: CYRILLIC CAPITAL LETTER ZHE */
5372 : [960+0x17] = 0x0437, /* U+0417: CYRILLIC CAPITAL LETTER ZE */
5373 : [960+0x18] = 0x0438, /* U+0418: CYRILLIC CAPITAL LETTER I */
5374 : [960+0x19] = 0x0439, /* U+0419: CYRILLIC CAPITAL LETTER SHORT I */
5375 : [960+0x1A] = 0x043A, /* U+041A: CYRILLIC CAPITAL LETTER KA */
5376 : [960+0x1B] = 0x043B, /* U+041B: CYRILLIC CAPITAL LETTER EL */
5377 : [960+0x1C] = 0x043C, /* U+041C: CYRILLIC CAPITAL LETTER EM */
5378 : [960+0x1D] = 0x043D, /* U+041D: CYRILLIC CAPITAL LETTER EN */
5379 : [960+0x1E] = 0x043E, /* U+041E: CYRILLIC CAPITAL LETTER O */
5380 : [960+0x1F] = 0x043F, /* U+041F: CYRILLIC CAPITAL LETTER PE */
5381 : [960+0x20] = 0x0440, /* U+0420: CYRILLIC CAPITAL LETTER ER */
5382 : [960+0x21] = 0x0441, /* U+0421: CYRILLIC CAPITAL LETTER ES */
5383 : [960+0x22] = 0x0442, /* U+0422: CYRILLIC CAPITAL LETTER TE */
5384 : [960+0x23] = 0x0443, /* U+0423: CYRILLIC CAPITAL LETTER U */
5385 : [960+0x24] = 0x0444, /* U+0424: CYRILLIC CAPITAL LETTER EF */
5386 : [960+0x25] = 0x0445, /* U+0425: CYRILLIC CAPITAL LETTER HA */
5387 : [960+0x26] = 0x0446, /* U+0426: CYRILLIC CAPITAL LETTER TSE */
5388 : [960+0x27] = 0x0447, /* U+0427: CYRILLIC CAPITAL LETTER CHE */
5389 : [960+0x28] = 0x0448, /* U+0428: CYRILLIC CAPITAL LETTER SHA */
5390 : [960+0x29] = 0x0449, /* U+0429: CYRILLIC CAPITAL LETTER SHCHA */
5391 : [960+0x2A] = 0x044A, /* U+042A: CYRILLIC CAPITAL LETTER HARD SIGN */
5392 : [960+0x2B] = 0x044B, /* U+042B: CYRILLIC CAPITAL LETTER YERU */
5393 : [960+0x2C] = 0x044C, /* U+042C: CYRILLIC CAPITAL LETTER SOFT SIGN */
5394 : [960+0x2D] = 0x044D, /* U+042D: CYRILLIC CAPITAL LETTER E */
5395 : [960+0x2E] = 0x044E, /* U+042E: CYRILLIC CAPITAL LETTER YU */
5396 : [960+0x2F] = 0x044F, /* U+042F: CYRILLIC CAPITAL LETTER YA */
5397 : [0xD1] = 1024 - 0x80, /* 321 ... */
5398 : [1024+0x20] = 0x0461, /* U+0460: CYRILLIC CAPITAL LETTER OMEGA */
5399 : [1024+0x22] = 0x0463, /* U+0462: CYRILLIC CAPITAL LETTER YAT */
5400 : [1024+0x24] = 0x0465, /* U+0464: CYRILLIC CAPITAL LETTER IOTIFIED E */
5401 : [1024+0x26] = 0x0467, /* U+0466: CYRILLIC CAPITAL LETTER LITTLE YUS */
5402 : [1024+0x28] = 0x0469, /* U+0468: CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS */
5403 : [1024+0x2A] = 0x046B, /* U+046A: CYRILLIC CAPITAL LETTER BIG YUS */
5404 : [1024+0x2C] = 0x046D, /* U+046C: CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS */
5405 : [1024+0x2E] = 0x046F, /* U+046E: CYRILLIC CAPITAL LETTER KSI */
5406 : [1024+0x30] = 0x0471, /* U+0470: CYRILLIC CAPITAL LETTER PSI */
5407 : [1024+0x32] = 0x0473, /* U+0472: CYRILLIC CAPITAL LETTER FITA */
5408 : [1024+0x34] = 0x0475, /* U+0474: CYRILLIC CAPITAL LETTER IZHITSA */
5409 : [1024+0x36] = 0x0477, /* U+0476: CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT */
5410 : [1024+0x38] = 0x0479, /* U+0478: CYRILLIC CAPITAL LETTER UK */
5411 : [1024+0x3A] = 0x047B, /* U+047A: CYRILLIC CAPITAL LETTER ROUND OMEGA */
5412 : [1024+0x3C] = 0x047D, /* U+047C: CYRILLIC CAPITAL LETTER OMEGA WITH TITLO */
5413 : [1024+0x3E] = 0x047F, /* U+047E: CYRILLIC CAPITAL LETTER OT */
5414 : [0xD2] = 1088 - 0x80, /* 322 ... */
5415 : [1088+0x00] = 0x0481, /* U+0480: CYRILLIC CAPITAL LETTER KOPPA */
5416 : [1088+0x0A] = 0x048B, /* U+048A: CYRILLIC CAPITAL LETTER SHORT I WITH TAIL */
5417 : [1088+0x0C] = 0x048D, /* U+048C: CYRILLIC CAPITAL LETTER SEMISOFT SIGN */
5418 : [1088+0x0E] = 0x048F, /* U+048E: CYRILLIC CAPITAL LETTER ER WITH TICK */
5419 : [1088+0x10] = 0x0491, /* U+0490: CYRILLIC CAPITAL LETTER GHE WITH UPTURN */
5420 : [1088+0x12] = 0x0493, /* U+0492: CYRILLIC CAPITAL LETTER GHE WITH STROKE */
5421 : [1088+0x14] = 0x0495, /* U+0494: CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK */
5422 : [1088+0x16] = 0x0497, /* U+0496: CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER */
5423 : [1088+0x18] = 0x0499, /* U+0498: CYRILLIC CAPITAL LETTER ZE WITH DESCENDER */
5424 : [1088+0x1A] = 0x049B, /* U+049A: CYRILLIC CAPITAL LETTER KA WITH DESCENDER */
5425 : [1088+0x1C] = 0x049D, /* U+049C: CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE */
5426 : [1088+0x1E] = 0x049F, /* U+049E: CYRILLIC CAPITAL LETTER KA WITH STROKE */
5427 : [1088+0x20] = 0x04A1, /* U+04A0: CYRILLIC CAPITAL LETTER BASHKIR KA */
5428 : [1088+0x22] = 0x04A3, /* U+04A2: CYRILLIC CAPITAL LETTER EN WITH DESCENDER */
5429 : [1088+0x24] = 0x04A5, /* U+04A4: CYRILLIC CAPITAL LIGATURE EN GHE */
5430 : [1088+0x26] = 0x04A7, /* U+04A6: CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK */
5431 : [1088+0x28] = 0x04A9, /* U+04A8: CYRILLIC CAPITAL LETTER ABKHASIAN HA */
5432 : [1088+0x2A] = 0x04AB, /* U+04AA: CYRILLIC CAPITAL LETTER ES WITH DESCENDER */
5433 : [1088+0x2C] = 0x04AD, /* U+04AC: CYRILLIC CAPITAL LETTER TE WITH DESCENDER */
5434 : [1088+0x2E] = 0x04AF, /* U+04AE: CYRILLIC CAPITAL LETTER STRAIGHT U */
5435 : [1088+0x30] = 0x04B1, /* U+04B0: CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE */
5436 : [1088+0x32] = 0x04B3, /* U+04B2: CYRILLIC CAPITAL LETTER HA WITH DESCENDER */
5437 : [1088+0x34] = 0x04B5, /* U+04B4: CYRILLIC CAPITAL LIGATURE TE TSE */
5438 : [1088+0x36] = 0x04B7, /* U+04B6: CYRILLIC CAPITAL LETTER CHE WITH DESCENDER */
5439 : [1088+0x38] = 0x04B9, /* U+04B8: CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE */
5440 : [1088+0x3A] = 0x04BB, /* U+04BA: CYRILLIC CAPITAL LETTER SHHA */
5441 : [1088+0x3C] = 0x04BD, /* U+04BC: CYRILLIC CAPITAL LETTER ABKHASIAN CHE */
5442 : [1088+0x3E] = 0x04BF, /* U+04BE: CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER */
5443 : [0xD3] = 1152 - 0x80, /* 323 ... */
5444 : [1152+0x00] = 0x04CF, /* U+04C0: CYRILLIC LETTER PALOCHKA */
5445 : [1152+0x01] = 0x04C2, /* U+04C1: CYRILLIC CAPITAL LETTER ZHE WITH BREVE */
5446 : [1152+0x03] = 0x04C4, /* U+04C3: CYRILLIC CAPITAL LETTER KA WITH HOOK */
5447 : [1152+0x05] = 0x04C6, /* U+04C5: CYRILLIC CAPITAL LETTER EL WITH TAIL */
5448 : [1152+0x07] = 0x04C8, /* U+04C7: CYRILLIC CAPITAL LETTER EN WITH HOOK */
5449 : [1152+0x09] = 0x04CA, /* U+04C9: CYRILLIC CAPITAL LETTER EN WITH TAIL */
5450 : [1152+0x0B] = 0x04CC, /* U+04CB: CYRILLIC CAPITAL LETTER KHAKASSIAN CHE */
5451 : [1152+0x0D] = 0x04CE, /* U+04CD: CYRILLIC CAPITAL LETTER EM WITH TAIL */
5452 : [1152+0x10] = 0x04D1, /* U+04D0: CYRILLIC CAPITAL LETTER A WITH BREVE */
5453 : [1152+0x12] = 0x04D3, /* U+04D2: CYRILLIC CAPITAL LETTER A WITH DIAERESIS */
5454 : [1152+0x14] = 0x04D5, /* U+04D4: CYRILLIC CAPITAL LIGATURE A IE */
5455 : [1152+0x16] = 0x04D7, /* U+04D6: CYRILLIC CAPITAL LETTER IE WITH BREVE */
5456 : [1152+0x18] = 0x04D9, /* U+04D8: CYRILLIC CAPITAL LETTER SCHWA */
5457 : [1152+0x1A] = 0x04DB, /* U+04DA: CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS */
5458 : [1152+0x1C] = 0x04DD, /* U+04DC: CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS */
5459 : [1152+0x1E] = 0x04DF, /* U+04DE: CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS */
5460 : [1152+0x20] = 0x04E1, /* U+04E0: CYRILLIC CAPITAL LETTER ABKHASIAN DZE */
5461 : [1152+0x22] = 0x04E3, /* U+04E2: CYRILLIC CAPITAL LETTER I WITH MACRON */
5462 : [1152+0x24] = 0x04E5, /* U+04E4: CYRILLIC CAPITAL LETTER I WITH DIAERESIS */
5463 : [1152+0x26] = 0x04E7, /* U+04E6: CYRILLIC CAPITAL LETTER O WITH DIAERESIS */
5464 : [1152+0x28] = 0x04E9, /* U+04E8: CYRILLIC CAPITAL LETTER BARRED O */
5465 : [1152+0x2A] = 0x04EB, /* U+04EA: CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS */
5466 : [1152+0x2C] = 0x04ED, /* U+04EC: CYRILLIC CAPITAL LETTER E WITH DIAERESIS */
5467 : [1152+0x2E] = 0x04EF, /* U+04EE: CYRILLIC CAPITAL LETTER U WITH MACRON */
5468 : [1152+0x30] = 0x04F1, /* U+04F0: CYRILLIC CAPITAL LETTER U WITH DIAERESIS */
5469 : [1152+0x32] = 0x04F3, /* U+04F2: CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE */
5470 : [1152+0x34] = 0x04F5, /* U+04F4: CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS */
5471 : [1152+0x36] = 0x04F7, /* U+04F6: CYRILLIC CAPITAL LETTER GHE WITH DESCENDER */
5472 : [1152+0x38] = 0x04F9, /* U+04F8: CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS */
5473 : [1152+0x3A] = 0x04FB, /* U+04FA: CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK */
5474 : [1152+0x3C] = 0x04FD, /* U+04FC: CYRILLIC CAPITAL LETTER HA WITH HOOK */
5475 : [1152+0x3E] = 0x04FF, /* U+04FE: CYRILLIC CAPITAL LETTER HA WITH STROKE */
5476 : [0xD4] = 1216 - 0x80, /* 324 ... */
5477 : [1216+0x00] = 0x0501, /* U+0500: CYRILLIC CAPITAL LETTER KOMI DE */
5478 : [1216+0x02] = 0x0503, /* U+0502: CYRILLIC CAPITAL LETTER KOMI DJE */
5479 : [1216+0x04] = 0x0505, /* U+0504: CYRILLIC CAPITAL LETTER KOMI ZJE */
5480 : [1216+0x06] = 0x0507, /* U+0506: CYRILLIC CAPITAL LETTER KOMI DZJE */
5481 : [1216+0x08] = 0x0509, /* U+0508: CYRILLIC CAPITAL LETTER KOMI LJE */
5482 : [1216+0x0A] = 0x050B, /* U+050A: CYRILLIC CAPITAL LETTER KOMI NJE */
5483 : [1216+0x0C] = 0x050D, /* U+050C: CYRILLIC CAPITAL LETTER KOMI SJE */
5484 : [1216+0x0E] = 0x050F, /* U+050E: CYRILLIC CAPITAL LETTER KOMI TJE */
5485 : [1216+0x10] = 0x0511, /* U+0510: CYRILLIC CAPITAL LETTER REVERSED ZE */
5486 : [1216+0x12] = 0x0513, /* U+0512: CYRILLIC CAPITAL LETTER EL WITH HOOK */
5487 : [1216+0x14] = 0x0515, /* U+0514: CYRILLIC CAPITAL LETTER LHA */
5488 : [1216+0x16] = 0x0517, /* U+0516: CYRILLIC CAPITAL LETTER RHA */
5489 : [1216+0x18] = 0x0519, /* U+0518: CYRILLIC CAPITAL LETTER YAE */
5490 : [1216+0x1A] = 0x051B, /* U+051A: CYRILLIC CAPITAL LETTER QA */
5491 : [1216+0x1C] = 0x051D, /* U+051C: CYRILLIC CAPITAL LETTER WE */
5492 : [1216+0x1E] = 0x051F, /* U+051E: CYRILLIC CAPITAL LETTER ALEUT KA */
5493 : [1216+0x20] = 0x0521, /* U+0520: CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK */
5494 : [1216+0x22] = 0x0523, /* U+0522: CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK */
5495 : [1216+0x24] = 0x0525, /* U+0524: CYRILLIC CAPITAL LETTER PE WITH DESCENDER */
5496 : [1216+0x26] = 0x0527, /* U+0526: CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER */
5497 : [1216+0x28] = 0x0529, /* U+0528: CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK */
5498 : [1216+0x2A] = 0x052B, /* U+052A: CYRILLIC CAPITAL LETTER DZZHE */
5499 : [1216+0x2C] = 0x052D, /* U+052C: CYRILLIC CAPITAL LETTER DCHE */
5500 : [1216+0x2E] = 0x052F, /* U+052E: CYRILLIC CAPITAL LETTER EL WITH DESCENDER */
5501 : [1216+0x31] = 0x0561, /* U+0531: ARMENIAN CAPITAL LETTER AYB */
5502 : [1216+0x32] = 0x0562, /* U+0532: ARMENIAN CAPITAL LETTER BEN */
5503 : [1216+0x33] = 0x0563, /* U+0533: ARMENIAN CAPITAL LETTER GIM */
5504 : [1216+0x34] = 0x0564, /* U+0534: ARMENIAN CAPITAL LETTER DA */
5505 : [1216+0x35] = 0x0565, /* U+0535: ARMENIAN CAPITAL LETTER ECH */
5506 : [1216+0x36] = 0x0566, /* U+0536: ARMENIAN CAPITAL LETTER ZA */
5507 : [1216+0x37] = 0x0567, /* U+0537: ARMENIAN CAPITAL LETTER EH */
5508 : [1216+0x38] = 0x0568, /* U+0538: ARMENIAN CAPITAL LETTER ET */
5509 : [1216+0x39] = 0x0569, /* U+0539: ARMENIAN CAPITAL LETTER TO */
5510 : [1216+0x3A] = 0x056A, /* U+053A: ARMENIAN CAPITAL LETTER ZHE */
5511 : [1216+0x3B] = 0x056B, /* U+053B: ARMENIAN CAPITAL LETTER INI */
5512 : [1216+0x3C] = 0x056C, /* U+053C: ARMENIAN CAPITAL LETTER LIWN */
5513 : [1216+0x3D] = 0x056D, /* U+053D: ARMENIAN CAPITAL LETTER XEH */
5514 : [1216+0x3E] = 0x056E, /* U+053E: ARMENIAN CAPITAL LETTER CA */
5515 : [1216+0x3F] = 0x056F, /* U+053F: ARMENIAN CAPITAL LETTER KEN */
5516 : [0xD5] = 1280 - 0x80, /* 325 ... */
5517 : [1280+0x00] = 0x0570, /* U+0540: ARMENIAN CAPITAL LETTER HO */
5518 : [1280+0x01] = 0x0571, /* U+0541: ARMENIAN CAPITAL LETTER JA */
5519 : [1280+0x02] = 0x0572, /* U+0542: ARMENIAN CAPITAL LETTER GHAD */
5520 : [1280+0x03] = 0x0573, /* U+0543: ARMENIAN CAPITAL LETTER CHEH */
5521 : [1280+0x04] = 0x0574, /* U+0544: ARMENIAN CAPITAL LETTER MEN */
5522 : [1280+0x05] = 0x0575, /* U+0545: ARMENIAN CAPITAL LETTER YI */
5523 : [1280+0x06] = 0x0576, /* U+0546: ARMENIAN CAPITAL LETTER NOW */
5524 : [1280+0x07] = 0x0577, /* U+0547: ARMENIAN CAPITAL LETTER SHA */
5525 : [1280+0x08] = 0x0578, /* U+0548: ARMENIAN CAPITAL LETTER VO */
5526 : [1280+0x09] = 0x0579, /* U+0549: ARMENIAN CAPITAL LETTER CHA */
5527 : [1280+0x0A] = 0x057A, /* U+054A: ARMENIAN CAPITAL LETTER PEH */
5528 : [1280+0x0B] = 0x057B, /* U+054B: ARMENIAN CAPITAL LETTER JHEH */
5529 : [1280+0x0C] = 0x057C, /* U+054C: ARMENIAN CAPITAL LETTER RA */
5530 : [1280+0x0D] = 0x057D, /* U+054D: ARMENIAN CAPITAL LETTER SEH */
5531 : [1280+0x0E] = 0x057E, /* U+054E: ARMENIAN CAPITAL LETTER VEW */
5532 : [1280+0x0F] = 0x057F, /* U+054F: ARMENIAN CAPITAL LETTER TIWN */
5533 : [1280+0x10] = 0x0580, /* U+0550: ARMENIAN CAPITAL LETTER REH */
5534 : [1280+0x11] = 0x0581, /* U+0551: ARMENIAN CAPITAL LETTER CO */
5535 : [1280+0x12] = 0x0582, /* U+0552: ARMENIAN CAPITAL LETTER YIWN */
5536 : [1280+0x13] = 0x0583, /* U+0553: ARMENIAN CAPITAL LETTER PIWR */
5537 : [1280+0x14] = 0x0584, /* U+0554: ARMENIAN CAPITAL LETTER KEH */
5538 : [1280+0x15] = 0x0585, /* U+0555: ARMENIAN CAPITAL LETTER OH */
5539 : [1280+0x16] = 0x0586, /* U+0556: ARMENIAN CAPITAL LETTER FEH */
5540 : [0xD6] = 1344 - 0x80, /* 326 ... */
5541 : [1344+0x07] = -7, /* U+0587: ARMENIAN SMALL LIGATURE ECH YIWN */
5542 : [0xE1] = 1408 - 0x80, /* 341 ... */
5543 : [1408+0x02] = 1472 - 0x80, /* 341 202 ... */
5544 : [1472+0x20] = 0x2D00, /* U+10A0: GEORGIAN CAPITAL LETTER AN */
5545 : [1472+0x21] = 0x2D01, /* U+10A1: GEORGIAN CAPITAL LETTER BAN */
5546 : [1472+0x22] = 0x2D02, /* U+10A2: GEORGIAN CAPITAL LETTER GAN */
5547 : [1472+0x23] = 0x2D03, /* U+10A3: GEORGIAN CAPITAL LETTER DON */
5548 : [1472+0x24] = 0x2D04, /* U+10A4: GEORGIAN CAPITAL LETTER EN */
5549 : [1472+0x25] = 0x2D05, /* U+10A5: GEORGIAN CAPITAL LETTER VIN */
5550 : [1472+0x26] = 0x2D06, /* U+10A6: GEORGIAN CAPITAL LETTER ZEN */
5551 : [1472+0x27] = 0x2D07, /* U+10A7: GEORGIAN CAPITAL LETTER TAN */
5552 : [1472+0x28] = 0x2D08, /* U+10A8: GEORGIAN CAPITAL LETTER IN */
5553 : [1472+0x29] = 0x2D09, /* U+10A9: GEORGIAN CAPITAL LETTER KAN */
5554 : [1472+0x2A] = 0x2D0A, /* U+10AA: GEORGIAN CAPITAL LETTER LAS */
5555 : [1472+0x2B] = 0x2D0B, /* U+10AB: GEORGIAN CAPITAL LETTER MAN */
5556 : [1472+0x2C] = 0x2D0C, /* U+10AC: GEORGIAN CAPITAL LETTER NAR */
5557 : [1472+0x2D] = 0x2D0D, /* U+10AD: GEORGIAN CAPITAL LETTER ON */
5558 : [1472+0x2E] = 0x2D0E, /* U+10AE: GEORGIAN CAPITAL LETTER PAR */
5559 : [1472+0x2F] = 0x2D0F, /* U+10AF: GEORGIAN CAPITAL LETTER ZHAR */
5560 : [1472+0x30] = 0x2D10, /* U+10B0: GEORGIAN CAPITAL LETTER RAE */
5561 : [1472+0x31] = 0x2D11, /* U+10B1: GEORGIAN CAPITAL LETTER SAN */
5562 : [1472+0x32] = 0x2D12, /* U+10B2: GEORGIAN CAPITAL LETTER TAR */
5563 : [1472+0x33] = 0x2D13, /* U+10B3: GEORGIAN CAPITAL LETTER UN */
5564 : [1472+0x34] = 0x2D14, /* U+10B4: GEORGIAN CAPITAL LETTER PHAR */
5565 : [1472+0x35] = 0x2D15, /* U+10B5: GEORGIAN CAPITAL LETTER KHAR */
5566 : [1472+0x36] = 0x2D16, /* U+10B6: GEORGIAN CAPITAL LETTER GHAN */
5567 : [1472+0x37] = 0x2D17, /* U+10B7: GEORGIAN CAPITAL LETTER QAR */
5568 : [1472+0x38] = 0x2D18, /* U+10B8: GEORGIAN CAPITAL LETTER SHIN */
5569 : [1472+0x39] = 0x2D19, /* U+10B9: GEORGIAN CAPITAL LETTER CHIN */
5570 : [1472+0x3A] = 0x2D1A, /* U+10BA: GEORGIAN CAPITAL LETTER CAN */
5571 : [1472+0x3B] = 0x2D1B, /* U+10BB: GEORGIAN CAPITAL LETTER JIL */
5572 : [1472+0x3C] = 0x2D1C, /* U+10BC: GEORGIAN CAPITAL LETTER CIL */
5573 : [1472+0x3D] = 0x2D1D, /* U+10BD: GEORGIAN CAPITAL LETTER CHAR */
5574 : [1472+0x3E] = 0x2D1E, /* U+10BE: GEORGIAN CAPITAL LETTER XAN */
5575 : [1472+0x3F] = 0x2D1F, /* U+10BF: GEORGIAN CAPITAL LETTER JHAN */
5576 : [1408+0x03] = 1536 - 0x80, /* 341 203 ... */
5577 : [1536+0x00] = 0x2D20, /* U+10C0: GEORGIAN CAPITAL LETTER HAE */
5578 : [1536+0x01] = 0x2D21, /* U+10C1: GEORGIAN CAPITAL LETTER HE */
5579 : [1536+0x02] = 0x2D22, /* U+10C2: GEORGIAN CAPITAL LETTER HIE */
5580 : [1536+0x03] = 0x2D23, /* U+10C3: GEORGIAN CAPITAL LETTER WE */
5581 : [1536+0x04] = 0x2D24, /* U+10C4: GEORGIAN CAPITAL LETTER HAR */
5582 : [1536+0x05] = 0x2D25, /* U+10C5: GEORGIAN CAPITAL LETTER HOE */
5583 : [1536+0x07] = 0x2D27, /* U+10C7: GEORGIAN CAPITAL LETTER YN */
5584 : [1536+0x0D] = 0x2D2D, /* U+10CD: GEORGIAN CAPITAL LETTER AEN */
5585 : [1408+0x0F] = 1600 - 0x80, /* 341 217 ... */
5586 : [1600+0x38] = 0x13F0, /* U+13F8: CHEROKEE SMALL LETTER YE */
5587 : [1600+0x39] = 0x13F1, /* U+13F9: CHEROKEE SMALL LETTER YI */
5588 : [1600+0x3A] = 0x13F2, /* U+13FA: CHEROKEE SMALL LETTER YO */
5589 : [1600+0x3B] = 0x13F3, /* U+13FB: CHEROKEE SMALL LETTER YU */
5590 : [1600+0x3C] = 0x13F4, /* U+13FC: CHEROKEE SMALL LETTER YV */
5591 : [1600+0x3D] = 0x13F5, /* U+13FD: CHEROKEE SMALL LETTER MV */
5592 : [1408+0x32] = 1664 - 0x80, /* 341 262 ... */
5593 : [1664+0x00] = 0x0432, /* U+1C80: CYRILLIC SMALL LETTER ROUNDED VE */
5594 : [1664+0x01] = 0x0434, /* U+1C81: CYRILLIC SMALL LETTER LONG-LEGGED DE */
5595 : [1664+0x02] = 0x043E, /* U+1C82: CYRILLIC SMALL LETTER NARROW O */
5596 : [1664+0x03] = 0x0441, /* U+1C83: CYRILLIC SMALL LETTER WIDE ES */
5597 : [1664+0x04] = 0x0442, /* U+1C84: CYRILLIC SMALL LETTER TALL TE */
5598 : [1664+0x05] = 0x0442, /* U+1C85: CYRILLIC SMALL LETTER THREE-LEGGED TE */
5599 : [1664+0x06] = 0x044A, /* U+1C86: CYRILLIC SMALL LETTER TALL HARD SIGN */
5600 : [1664+0x07] = 0x0463, /* U+1C87: CYRILLIC SMALL LETTER TALL YAT */
5601 : [1664+0x08] = 0xA64B, /* U+1C88: CYRILLIC SMALL LETTER UNBLENDED UK */
5602 : [1664+0x10] = 0x10D0, /* U+1C90: GEORGIAN MTAVRULI CAPITAL LETTER AN */
5603 : [1664+0x11] = 0x10D1, /* U+1C91: GEORGIAN MTAVRULI CAPITAL LETTER BAN */
5604 : [1664+0x12] = 0x10D2, /* U+1C92: GEORGIAN MTAVRULI CAPITAL LETTER GAN */
5605 : [1664+0x13] = 0x10D3, /* U+1C93: GEORGIAN MTAVRULI CAPITAL LETTER DON */
5606 : [1664+0x14] = 0x10D4, /* U+1C94: GEORGIAN MTAVRULI CAPITAL LETTER EN */
5607 : [1664+0x15] = 0x10D5, /* U+1C95: GEORGIAN MTAVRULI CAPITAL LETTER VIN */
5608 : [1664+0x16] = 0x10D6, /* U+1C96: GEORGIAN MTAVRULI CAPITAL LETTER ZEN */
5609 : [1664+0x17] = 0x10D7, /* U+1C97: GEORGIAN MTAVRULI CAPITAL LETTER TAN */
5610 : [1664+0x18] = 0x10D8, /* U+1C98: GEORGIAN MTAVRULI CAPITAL LETTER IN */
5611 : [1664+0x19] = 0x10D9, /* U+1C99: GEORGIAN MTAVRULI CAPITAL LETTER KAN */
5612 : [1664+0x1A] = 0x10DA, /* U+1C9A: GEORGIAN MTAVRULI CAPITAL LETTER LAS */
5613 : [1664+0x1B] = 0x10DB, /* U+1C9B: GEORGIAN MTAVRULI CAPITAL LETTER MAN */
5614 : [1664+0x1C] = 0x10DC, /* U+1C9C: GEORGIAN MTAVRULI CAPITAL LETTER NAR */
5615 : [1664+0x1D] = 0x10DD, /* U+1C9D: GEORGIAN MTAVRULI CAPITAL LETTER ON */
5616 : [1664+0x1E] = 0x10DE, /* U+1C9E: GEORGIAN MTAVRULI CAPITAL LETTER PAR */
5617 : [1664+0x1F] = 0x10DF, /* U+1C9F: GEORGIAN MTAVRULI CAPITAL LETTER ZHAR */
5618 : [1664+0x20] = 0x10E0, /* U+1CA0: GEORGIAN MTAVRULI CAPITAL LETTER RAE */
5619 : [1664+0x21] = 0x10E1, /* U+1CA1: GEORGIAN MTAVRULI CAPITAL LETTER SAN */
5620 : [1664+0x22] = 0x10E2, /* U+1CA2: GEORGIAN MTAVRULI CAPITAL LETTER TAR */
5621 : [1664+0x23] = 0x10E3, /* U+1CA3: GEORGIAN MTAVRULI CAPITAL LETTER UN */
5622 : [1664+0x24] = 0x10E4, /* U+1CA4: GEORGIAN MTAVRULI CAPITAL LETTER PHAR */
5623 : [1664+0x25] = 0x10E5, /* U+1CA5: GEORGIAN MTAVRULI CAPITAL LETTER KHAR */
5624 : [1664+0x26] = 0x10E6, /* U+1CA6: GEORGIAN MTAVRULI CAPITAL LETTER GHAN */
5625 : [1664+0x27] = 0x10E7, /* U+1CA7: GEORGIAN MTAVRULI CAPITAL LETTER QAR */
5626 : [1664+0x28] = 0x10E8, /* U+1CA8: GEORGIAN MTAVRULI CAPITAL LETTER SHIN */
5627 : [1664+0x29] = 0x10E9, /* U+1CA9: GEORGIAN MTAVRULI CAPITAL LETTER CHIN */
5628 : [1664+0x2A] = 0x10EA, /* U+1CAA: GEORGIAN MTAVRULI CAPITAL LETTER CAN */
5629 : [1664+0x2B] = 0x10EB, /* U+1CAB: GEORGIAN MTAVRULI CAPITAL LETTER JIL */
5630 : [1664+0x2C] = 0x10EC, /* U+1CAC: GEORGIAN MTAVRULI CAPITAL LETTER CIL */
5631 : [1664+0x2D] = 0x10ED, /* U+1CAD: GEORGIAN MTAVRULI CAPITAL LETTER CHAR */
5632 : [1664+0x2E] = 0x10EE, /* U+1CAE: GEORGIAN MTAVRULI CAPITAL LETTER XAN */
5633 : [1664+0x2F] = 0x10EF, /* U+1CAF: GEORGIAN MTAVRULI CAPITAL LETTER JHAN */
5634 : [1664+0x30] = 0x10F0, /* U+1CB0: GEORGIAN MTAVRULI CAPITAL LETTER HAE */
5635 : [1664+0x31] = 0x10F1, /* U+1CB1: GEORGIAN MTAVRULI CAPITAL LETTER HE */
5636 : [1664+0x32] = 0x10F2, /* U+1CB2: GEORGIAN MTAVRULI CAPITAL LETTER HIE */
5637 : [1664+0x33] = 0x10F3, /* U+1CB3: GEORGIAN MTAVRULI CAPITAL LETTER WE */
5638 : [1664+0x34] = 0x10F4, /* U+1CB4: GEORGIAN MTAVRULI CAPITAL LETTER HAR */
5639 : [1664+0x35] = 0x10F5, /* U+1CB5: GEORGIAN MTAVRULI CAPITAL LETTER HOE */
5640 : [1664+0x36] = 0x10F6, /* U+1CB6: GEORGIAN MTAVRULI CAPITAL LETTER FI */
5641 : [1664+0x37] = 0x10F7, /* U+1CB7: GEORGIAN MTAVRULI CAPITAL LETTER YN */
5642 : [1664+0x38] = 0x10F8, /* U+1CB8: GEORGIAN MTAVRULI CAPITAL LETTER ELIFI */
5643 : [1664+0x39] = 0x10F9, /* U+1CB9: GEORGIAN MTAVRULI CAPITAL LETTER TURNED GAN */
5644 : [1664+0x3A] = 0x10FA, /* U+1CBA: GEORGIAN MTAVRULI CAPITAL LETTER AIN */
5645 : [1664+0x3D] = 0x10FD, /* U+1CBD: GEORGIAN MTAVRULI CAPITAL LETTER AEN */
5646 : [1664+0x3E] = 0x10FE, /* U+1CBE: GEORGIAN MTAVRULI CAPITAL LETTER HARD SIGN */
5647 : [1664+0x3F] = 0x10FF, /* U+1CBF: GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN */
5648 : [1408+0x38] = 1728 - 0x80, /* 341 270 ... */
5649 : [1728+0x00] = 0x1E01, /* U+1E00: LATIN CAPITAL LETTER A WITH RING BELOW */
5650 : [1728+0x02] = 0x1E03, /* U+1E02: LATIN CAPITAL LETTER B WITH DOT ABOVE */
5651 : [1728+0x04] = 0x1E05, /* U+1E04: LATIN CAPITAL LETTER B WITH DOT BELOW */
5652 : [1728+0x06] = 0x1E07, /* U+1E06: LATIN CAPITAL LETTER B WITH LINE BELOW */
5653 : [1728+0x08] = 0x1E09, /* U+1E08: LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE */
5654 : [1728+0x0A] = 0x1E0B, /* U+1E0A: LATIN CAPITAL LETTER D WITH DOT ABOVE */
5655 : [1728+0x0C] = 0x1E0D, /* U+1E0C: LATIN CAPITAL LETTER D WITH DOT BELOW */
5656 : [1728+0x0E] = 0x1E0F, /* U+1E0E: LATIN CAPITAL LETTER D WITH LINE BELOW */
5657 : [1728+0x10] = 0x1E11, /* U+1E10: LATIN CAPITAL LETTER D WITH CEDILLA */
5658 : [1728+0x12] = 0x1E13, /* U+1E12: LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW */
5659 : [1728+0x14] = 0x1E15, /* U+1E14: LATIN CAPITAL LETTER E WITH MACRON AND GRAVE */
5660 : [1728+0x16] = 0x1E17, /* U+1E16: LATIN CAPITAL LETTER E WITH MACRON AND ACUTE */
5661 : [1728+0x18] = 0x1E19, /* U+1E18: LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW */
5662 : [1728+0x1A] = 0x1E1B, /* U+1E1A: LATIN CAPITAL LETTER E WITH TILDE BELOW */
5663 : [1728+0x1C] = 0x1E1D, /* U+1E1C: LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE */
5664 : [1728+0x1E] = 0x1E1F, /* U+1E1E: LATIN CAPITAL LETTER F WITH DOT ABOVE */
5665 : [1728+0x20] = 0x1E21, /* U+1E20: LATIN CAPITAL LETTER G WITH MACRON */
5666 : [1728+0x22] = 0x1E23, /* U+1E22: LATIN CAPITAL LETTER H WITH DOT ABOVE */
5667 : [1728+0x24] = 0x1E25, /* U+1E24: LATIN CAPITAL LETTER H WITH DOT BELOW */
5668 : [1728+0x26] = 0x1E27, /* U+1E26: LATIN CAPITAL LETTER H WITH DIAERESIS */
5669 : [1728+0x28] = 0x1E29, /* U+1E28: LATIN CAPITAL LETTER H WITH CEDILLA */
5670 : [1728+0x2A] = 0x1E2B, /* U+1E2A: LATIN CAPITAL LETTER H WITH BREVE BELOW */
5671 : [1728+0x2C] = 0x1E2D, /* U+1E2C: LATIN CAPITAL LETTER I WITH TILDE BELOW */
5672 : [1728+0x2E] = 0x1E2F, /* U+1E2E: LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE */
5673 : [1728+0x30] = 0x1E31, /* U+1E30: LATIN CAPITAL LETTER K WITH ACUTE */
5674 : [1728+0x32] = 0x1E33, /* U+1E32: LATIN CAPITAL LETTER K WITH DOT BELOW */
5675 : [1728+0x34] = 0x1E35, /* U+1E34: LATIN CAPITAL LETTER K WITH LINE BELOW */
5676 : [1728+0x36] = 0x1E37, /* U+1E36: LATIN CAPITAL LETTER L WITH DOT BELOW */
5677 : [1728+0x38] = 0x1E39, /* U+1E38: LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON */
5678 : [1728+0x3A] = 0x1E3B, /* U+1E3A: LATIN CAPITAL LETTER L WITH LINE BELOW */
5679 : [1728+0x3C] = 0x1E3D, /* U+1E3C: LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW */
5680 : [1728+0x3E] = 0x1E3F, /* U+1E3E: LATIN CAPITAL LETTER M WITH ACUTE */
5681 : [1408+0x39] = 1792 - 0x80, /* 341 271 ... */
5682 : [1792+0x00] = 0x1E41, /* U+1E40: LATIN CAPITAL LETTER M WITH DOT ABOVE */
5683 : [1792+0x02] = 0x1E43, /* U+1E42: LATIN CAPITAL LETTER M WITH DOT BELOW */
5684 : [1792+0x04] = 0x1E45, /* U+1E44: LATIN CAPITAL LETTER N WITH DOT ABOVE */
5685 : [1792+0x06] = 0x1E47, /* U+1E46: LATIN CAPITAL LETTER N WITH DOT BELOW */
5686 : [1792+0x08] = 0x1E49, /* U+1E48: LATIN CAPITAL LETTER N WITH LINE BELOW */
5687 : [1792+0x0A] = 0x1E4B, /* U+1E4A: LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW */
5688 : [1792+0x0C] = 0x1E4D, /* U+1E4C: LATIN CAPITAL LETTER O WITH TILDE AND ACUTE */
5689 : [1792+0x0E] = 0x1E4F, /* U+1E4E: LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS */
5690 : [1792+0x10] = 0x1E51, /* U+1E50: LATIN CAPITAL LETTER O WITH MACRON AND GRAVE */
5691 : [1792+0x12] = 0x1E53, /* U+1E52: LATIN CAPITAL LETTER O WITH MACRON AND ACUTE */
5692 : [1792+0x14] = 0x1E55, /* U+1E54: LATIN CAPITAL LETTER P WITH ACUTE */
5693 : [1792+0x16] = 0x1E57, /* U+1E56: LATIN CAPITAL LETTER P WITH DOT ABOVE */
5694 : [1792+0x18] = 0x1E59, /* U+1E58: LATIN CAPITAL LETTER R WITH DOT ABOVE */
5695 : [1792+0x1A] = 0x1E5B, /* U+1E5A: LATIN CAPITAL LETTER R WITH DOT BELOW */
5696 : [1792+0x1C] = 0x1E5D, /* U+1E5C: LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON */
5697 : [1792+0x1E] = 0x1E5F, /* U+1E5E: LATIN CAPITAL LETTER R WITH LINE BELOW */
5698 : [1792+0x20] = 0x1E61, /* U+1E60: LATIN CAPITAL LETTER S WITH DOT ABOVE */
5699 : [1792+0x22] = 0x1E63, /* U+1E62: LATIN CAPITAL LETTER S WITH DOT BELOW */
5700 : [1792+0x24] = 0x1E65, /* U+1E64: LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE */
5701 : [1792+0x26] = 0x1E67, /* U+1E66: LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE */
5702 : [1792+0x28] = 0x1E69, /* U+1E68: LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE */
5703 : [1792+0x2A] = 0x1E6B, /* U+1E6A: LATIN CAPITAL LETTER T WITH DOT ABOVE */
5704 : [1792+0x2C] = 0x1E6D, /* U+1E6C: LATIN CAPITAL LETTER T WITH DOT BELOW */
5705 : [1792+0x2E] = 0x1E6F, /* U+1E6E: LATIN CAPITAL LETTER T WITH LINE BELOW */
5706 : [1792+0x30] = 0x1E71, /* U+1E70: LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW */
5707 : [1792+0x32] = 0x1E73, /* U+1E72: LATIN CAPITAL LETTER U WITH DIAERESIS BELOW */
5708 : [1792+0x34] = 0x1E75, /* U+1E74: LATIN CAPITAL LETTER U WITH TILDE BELOW */
5709 : [1792+0x36] = 0x1E77, /* U+1E76: LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW */
5710 : [1792+0x38] = 0x1E79, /* U+1E78: LATIN CAPITAL LETTER U WITH TILDE AND ACUTE */
5711 : [1792+0x3A] = 0x1E7B, /* U+1E7A: LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS */
5712 : [1792+0x3C] = 0x1E7D, /* U+1E7C: LATIN CAPITAL LETTER V WITH TILDE */
5713 : [1792+0x3E] = 0x1E7F, /* U+1E7E: LATIN CAPITAL LETTER V WITH DOT BELOW */
5714 : [1408+0x3A] = 1856 - 0x80, /* 341 272 ... */
5715 : [1856+0x00] = 0x1E81, /* U+1E80: LATIN CAPITAL LETTER W WITH GRAVE */
5716 : [1856+0x02] = 0x1E83, /* U+1E82: LATIN CAPITAL LETTER W WITH ACUTE */
5717 : [1856+0x04] = 0x1E85, /* U+1E84: LATIN CAPITAL LETTER W WITH DIAERESIS */
5718 : [1856+0x06] = 0x1E87, /* U+1E86: LATIN CAPITAL LETTER W WITH DOT ABOVE */
5719 : [1856+0x08] = 0x1E89, /* U+1E88: LATIN CAPITAL LETTER W WITH DOT BELOW */
5720 : [1856+0x0A] = 0x1E8B, /* U+1E8A: LATIN CAPITAL LETTER X WITH DOT ABOVE */
5721 : [1856+0x0C] = 0x1E8D, /* U+1E8C: LATIN CAPITAL LETTER X WITH DIAERESIS */
5722 : [1856+0x0E] = 0x1E8F, /* U+1E8E: LATIN CAPITAL LETTER Y WITH DOT ABOVE */
5723 : [1856+0x10] = 0x1E91, /* U+1E90: LATIN CAPITAL LETTER Z WITH CIRCUMFLEX */
5724 : [1856+0x12] = 0x1E93, /* U+1E92: LATIN CAPITAL LETTER Z WITH DOT BELOW */
5725 : [1856+0x14] = 0x1E95, /* U+1E94: LATIN CAPITAL LETTER Z WITH LINE BELOW */
5726 : [1856+0x16] = -8, /* U+1E96: LATIN SMALL LETTER H WITH LINE BELOW */
5727 : [1856+0x17] = -9, /* U+1E97: LATIN SMALL LETTER T WITH DIAERESIS */
5728 : [1856+0x18] = -10, /* U+1E98: LATIN SMALL LETTER W WITH RING ABOVE */
5729 : [1856+0x19] = -11, /* U+1E99: LATIN SMALL LETTER Y WITH RING ABOVE */
5730 : [1856+0x1A] = -12, /* U+1E9A: LATIN SMALL LETTER A WITH RIGHT HALF RING */
5731 : [1856+0x1B] = 0x1E61, /* U+1E9B: LATIN SMALL LETTER LONG S WITH DOT ABOVE */
5732 : [1856+0x1E] = -1, /* U+1E9E: LATIN CAPITAL LETTER SHARP S */
5733 : [1856+0x20] = 0x1EA1, /* U+1EA0: LATIN CAPITAL LETTER A WITH DOT BELOW */
5734 : [1856+0x22] = 0x1EA3, /* U+1EA2: LATIN CAPITAL LETTER A WITH HOOK ABOVE */
5735 : [1856+0x24] = 0x1EA5, /* U+1EA4: LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE */
5736 : [1856+0x26] = 0x1EA7, /* U+1EA6: LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE */
5737 : [1856+0x28] = 0x1EA9, /* U+1EA8: LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE */
5738 : [1856+0x2A] = 0x1EAB, /* U+1EAA: LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE */
5739 : [1856+0x2C] = 0x1EAD, /* U+1EAC: LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW */
5740 : [1856+0x2E] = 0x1EAF, /* U+1EAE: LATIN CAPITAL LETTER A WITH BREVE AND ACUTE */
5741 : [1856+0x30] = 0x1EB1, /* U+1EB0: LATIN CAPITAL LETTER A WITH BREVE AND GRAVE */
5742 : [1856+0x32] = 0x1EB3, /* U+1EB2: LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE */
5743 : [1856+0x34] = 0x1EB5, /* U+1EB4: LATIN CAPITAL LETTER A WITH BREVE AND TILDE */
5744 : [1856+0x36] = 0x1EB7, /* U+1EB6: LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW */
5745 : [1856+0x38] = 0x1EB9, /* U+1EB8: LATIN CAPITAL LETTER E WITH DOT BELOW */
5746 : [1856+0x3A] = 0x1EBB, /* U+1EBA: LATIN CAPITAL LETTER E WITH HOOK ABOVE */
5747 : [1856+0x3C] = 0x1EBD, /* U+1EBC: LATIN CAPITAL LETTER E WITH TILDE */
5748 : [1856+0x3E] = 0x1EBF, /* U+1EBE: LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE */
5749 : [1408+0x3B] = 1920 - 0x80, /* 341 273 ... */
5750 : [1920+0x00] = 0x1EC1, /* U+1EC0: LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE */
5751 : [1920+0x02] = 0x1EC3, /* U+1EC2: LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE */
5752 : [1920+0x04] = 0x1EC5, /* U+1EC4: LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE */
5753 : [1920+0x06] = 0x1EC7, /* U+1EC6: LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW */
5754 : [1920+0x08] = 0x1EC9, /* U+1EC8: LATIN CAPITAL LETTER I WITH HOOK ABOVE */
5755 : [1920+0x0A] = 0x1ECB, /* U+1ECA: LATIN CAPITAL LETTER I WITH DOT BELOW */
5756 : [1920+0x0C] = 0x1ECD, /* U+1ECC: LATIN CAPITAL LETTER O WITH DOT BELOW */
5757 : [1920+0x0E] = 0x1ECF, /* U+1ECE: LATIN CAPITAL LETTER O WITH HOOK ABOVE */
5758 : [1920+0x10] = 0x1ED1, /* U+1ED0: LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE */
5759 : [1920+0x12] = 0x1ED3, /* U+1ED2: LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE */
5760 : [1920+0x14] = 0x1ED5, /* U+1ED4: LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE */
5761 : [1920+0x16] = 0x1ED7, /* U+1ED6: LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE */
5762 : [1920+0x18] = 0x1ED9, /* U+1ED8: LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW */
5763 : [1920+0x1A] = 0x1EDB, /* U+1EDA: LATIN CAPITAL LETTER O WITH HORN AND ACUTE */
5764 : [1920+0x1C] = 0x1EDD, /* U+1EDC: LATIN CAPITAL LETTER O WITH HORN AND GRAVE */
5765 : [1920+0x1E] = 0x1EDF, /* U+1EDE: LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE */
5766 : [1920+0x20] = 0x1EE1, /* U+1EE0: LATIN CAPITAL LETTER O WITH HORN AND TILDE */
5767 : [1920+0x22] = 0x1EE3, /* U+1EE2: LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW */
5768 : [1920+0x24] = 0x1EE5, /* U+1EE4: LATIN CAPITAL LETTER U WITH DOT BELOW */
5769 : [1920+0x26] = 0x1EE7, /* U+1EE6: LATIN CAPITAL LETTER U WITH HOOK ABOVE */
5770 : [1920+0x28] = 0x1EE9, /* U+1EE8: LATIN CAPITAL LETTER U WITH HORN AND ACUTE */
5771 : [1920+0x2A] = 0x1EEB, /* U+1EEA: LATIN CAPITAL LETTER U WITH HORN AND GRAVE */
5772 : [1920+0x2C] = 0x1EED, /* U+1EEC: LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE */
5773 : [1920+0x2E] = 0x1EEF, /* U+1EEE: LATIN CAPITAL LETTER U WITH HORN AND TILDE */
5774 : [1920+0x30] = 0x1EF1, /* U+1EF0: LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW */
5775 : [1920+0x32] = 0x1EF3, /* U+1EF2: LATIN CAPITAL LETTER Y WITH GRAVE */
5776 : [1920+0x34] = 0x1EF5, /* U+1EF4: LATIN CAPITAL LETTER Y WITH DOT BELOW */
5777 : [1920+0x36] = 0x1EF7, /* U+1EF6: LATIN CAPITAL LETTER Y WITH HOOK ABOVE */
5778 : [1920+0x38] = 0x1EF9, /* U+1EF8: LATIN CAPITAL LETTER Y WITH TILDE */
5779 : [1920+0x3A] = 0x1EFB, /* U+1EFA: LATIN CAPITAL LETTER MIDDLE-WELSH LL */
5780 : [1920+0x3C] = 0x1EFD, /* U+1EFC: LATIN CAPITAL LETTER MIDDLE-WELSH V */
5781 : [1920+0x3E] = 0x1EFF, /* U+1EFE: LATIN CAPITAL LETTER Y WITH LOOP */
5782 : [1408+0x3C] = 1984 - 0x80, /* 341 274 ... */
5783 : [1984+0x08] = 0x1F00, /* U+1F08: GREEK CAPITAL LETTER ALPHA WITH PSILI */
5784 : [1984+0x09] = 0x1F01, /* U+1F09: GREEK CAPITAL LETTER ALPHA WITH DASIA */
5785 : [1984+0x0A] = 0x1F02, /* U+1F0A: GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA */
5786 : [1984+0x0B] = 0x1F03, /* U+1F0B: GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA */
5787 : [1984+0x0C] = 0x1F04, /* U+1F0C: GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA */
5788 : [1984+0x0D] = 0x1F05, /* U+1F0D: GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA */
5789 : [1984+0x0E] = 0x1F06, /* U+1F0E: GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI */
5790 : [1984+0x0F] = 0x1F07, /* U+1F0F: GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI */
5791 : [1984+0x18] = 0x1F10, /* U+1F18: GREEK CAPITAL LETTER EPSILON WITH PSILI */
5792 : [1984+0x19] = 0x1F11, /* U+1F19: GREEK CAPITAL LETTER EPSILON WITH DASIA */
5793 : [1984+0x1A] = 0x1F12, /* U+1F1A: GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA */
5794 : [1984+0x1B] = 0x1F13, /* U+1F1B: GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA */
5795 : [1984+0x1C] = 0x1F14, /* U+1F1C: GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA */
5796 : [1984+0x1D] = 0x1F15, /* U+1F1D: GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA */
5797 : [1984+0x28] = 0x1F20, /* U+1F28: GREEK CAPITAL LETTER ETA WITH PSILI */
5798 : [1984+0x29] = 0x1F21, /* U+1F29: GREEK CAPITAL LETTER ETA WITH DASIA */
5799 : [1984+0x2A] = 0x1F22, /* U+1F2A: GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA */
5800 : [1984+0x2B] = 0x1F23, /* U+1F2B: GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA */
5801 : [1984+0x2C] = 0x1F24, /* U+1F2C: GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA */
5802 : [1984+0x2D] = 0x1F25, /* U+1F2D: GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA */
5803 : [1984+0x2E] = 0x1F26, /* U+1F2E: GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI */
5804 : [1984+0x2F] = 0x1F27, /* U+1F2F: GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI */
5805 : [1984+0x38] = 0x1F30, /* U+1F38: GREEK CAPITAL LETTER IOTA WITH PSILI */
5806 : [1984+0x39] = 0x1F31, /* U+1F39: GREEK CAPITAL LETTER IOTA WITH DASIA */
5807 : [1984+0x3A] = 0x1F32, /* U+1F3A: GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA */
5808 : [1984+0x3B] = 0x1F33, /* U+1F3B: GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA */
5809 : [1984+0x3C] = 0x1F34, /* U+1F3C: GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA */
5810 : [1984+0x3D] = 0x1F35, /* U+1F3D: GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA */
5811 : [1984+0x3E] = 0x1F36, /* U+1F3E: GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI */
5812 : [1984+0x3F] = 0x1F37, /* U+1F3F: GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI */
5813 : [1408+0x3D] = 2048 - 0x80, /* 341 275 ... */
5814 : [2048+0x08] = 0x1F40, /* U+1F48: GREEK CAPITAL LETTER OMICRON WITH PSILI */
5815 : [2048+0x09] = 0x1F41, /* U+1F49: GREEK CAPITAL LETTER OMICRON WITH DASIA */
5816 : [2048+0x0A] = 0x1F42, /* U+1F4A: GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA */
5817 : [2048+0x0B] = 0x1F43, /* U+1F4B: GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA */
5818 : [2048+0x0C] = 0x1F44, /* U+1F4C: GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA */
5819 : [2048+0x0D] = 0x1F45, /* U+1F4D: GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA */
5820 : [2048+0x10] = -13, /* U+1F50: GREEK SMALL LETTER UPSILON WITH PSILI */
5821 : [2048+0x12] = -14, /* U+1F52: GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA */
5822 : [2048+0x14] = -15, /* U+1F54: GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA */
5823 : [2048+0x16] = -16, /* U+1F56: GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI */
5824 : [2048+0x19] = 0x1F51, /* U+1F59: GREEK CAPITAL LETTER UPSILON WITH DASIA */
5825 : [2048+0x1B] = 0x1F53, /* U+1F5B: GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA */
5826 : [2048+0x1D] = 0x1F55, /* U+1F5D: GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA */
5827 : [2048+0x1F] = 0x1F57, /* U+1F5F: GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI */
5828 : [2048+0x28] = 0x1F60, /* U+1F68: GREEK CAPITAL LETTER OMEGA WITH PSILI */
5829 : [2048+0x29] = 0x1F61, /* U+1F69: GREEK CAPITAL LETTER OMEGA WITH DASIA */
5830 : [2048+0x2A] = 0x1F62, /* U+1F6A: GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA */
5831 : [2048+0x2B] = 0x1F63, /* U+1F6B: GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA */
5832 : [2048+0x2C] = 0x1F64, /* U+1F6C: GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA */
5833 : [2048+0x2D] = 0x1F65, /* U+1F6D: GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA */
5834 : [2048+0x2E] = 0x1F66, /* U+1F6E: GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI */
5835 : [2048+0x2F] = 0x1F67, /* U+1F6F: GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI */
5836 : [1408+0x3E] = 2112 - 0x80, /* 341 276 ... */
5837 : [2112+0x00] = -17, /* U+1F80: GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI */
5838 : [2112+0x01] = -18, /* U+1F81: GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI */
5839 : [2112+0x02] = -19, /* U+1F82: GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI */
5840 : [2112+0x03] = -20, /* U+1F83: GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI */
5841 : [2112+0x04] = -21, /* U+1F84: GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI */
5842 : [2112+0x05] = -22, /* U+1F85: GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI */
5843 : [2112+0x06] = -23, /* U+1F86: GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */
5844 : [2112+0x07] = -24, /* U+1F87: GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */
5845 : [2112+0x08] = -17, /* U+1F88: GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI */
5846 : [2112+0x09] = -18, /* U+1F89: GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI */
5847 : [2112+0x0A] = -19, /* U+1F8A: GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI */
5848 : [2112+0x0B] = -20, /* U+1F8B: GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI */
5849 : [2112+0x0C] = -21, /* U+1F8C: GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI */
5850 : [2112+0x0D] = -22, /* U+1F8D: GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI */
5851 : [2112+0x0E] = -23, /* U+1F8E: GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */
5852 : [2112+0x0F] = -24, /* U+1F8F: GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */
5853 : [2112+0x10] = -25, /* U+1F90: GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI */
5854 : [2112+0x11] = -26, /* U+1F91: GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI */
5855 : [2112+0x12] = -27, /* U+1F92: GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI */
5856 : [2112+0x13] = -28, /* U+1F93: GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI */
5857 : [2112+0x14] = -29, /* U+1F94: GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI */
5858 : [2112+0x15] = -30, /* U+1F95: GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI */
5859 : [2112+0x16] = -31, /* U+1F96: GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */
5860 : [2112+0x17] = -32, /* U+1F97: GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */
5861 : [2112+0x18] = -25, /* U+1F98: GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI */
5862 : [2112+0x19] = -26, /* U+1F99: GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI */
5863 : [2112+0x1A] = -27, /* U+1F9A: GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI */
5864 : [2112+0x1B] = -28, /* U+1F9B: GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI */
5865 : [2112+0x1C] = -29, /* U+1F9C: GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI */
5866 : [2112+0x1D] = -30, /* U+1F9D: GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI */
5867 : [2112+0x1E] = -31, /* U+1F9E: GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */
5868 : [2112+0x1F] = -32, /* U+1F9F: GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */
5869 : [2112+0x20] = -33, /* U+1FA0: GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI */
5870 : [2112+0x21] = -34, /* U+1FA1: GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI */
5871 : [2112+0x22] = -35, /* U+1FA2: GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI */
5872 : [2112+0x23] = -36, /* U+1FA3: GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI */
5873 : [2112+0x24] = -37, /* U+1FA4: GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI */
5874 : [2112+0x25] = -38, /* U+1FA5: GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI */
5875 : [2112+0x26] = -39, /* U+1FA6: GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */
5876 : [2112+0x27] = -40, /* U+1FA7: GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */
5877 : [2112+0x28] = -33, /* U+1FA8: GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI */
5878 : [2112+0x29] = -34, /* U+1FA9: GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI */
5879 : [2112+0x2A] = -35, /* U+1FAA: GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI */
5880 : [2112+0x2B] = -36, /* U+1FAB: GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI */
5881 : [2112+0x2C] = -37, /* U+1FAC: GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI */
5882 : [2112+0x2D] = -38, /* U+1FAD: GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI */
5883 : [2112+0x2E] = -39, /* U+1FAE: GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */
5884 : [2112+0x2F] = -40, /* U+1FAF: GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */
5885 : [2112+0x32] = -41, /* U+1FB2: GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI */
5886 : [2112+0x33] = -42, /* U+1FB3: GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI */
5887 : [2112+0x34] = -43, /* U+1FB4: GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI */
5888 : [2112+0x36] = -44, /* U+1FB6: GREEK SMALL LETTER ALPHA WITH PERISPOMENI */
5889 : [2112+0x37] = -45, /* U+1FB7: GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI */
5890 : [2112+0x38] = 0x1FB0, /* U+1FB8: GREEK CAPITAL LETTER ALPHA WITH VRACHY */
5891 : [2112+0x39] = 0x1FB1, /* U+1FB9: GREEK CAPITAL LETTER ALPHA WITH MACRON */
5892 : [2112+0x3A] = 0x1F70, /* U+1FBA: GREEK CAPITAL LETTER ALPHA WITH VARIA */
5893 : [2112+0x3B] = 0x1F71, /* U+1FBB: GREEK CAPITAL LETTER ALPHA WITH OXIA */
5894 : [2112+0x3C] = -42, /* U+1FBC: GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI */
5895 : [2112+0x3E] = 0x03B9, /* U+1FBE: GREEK PROSGEGRAMMENI */
5896 : [1408+0x3F] = 2176 - 0x80, /* 341 277 ... */
5897 : [2176+0x02] = -46, /* U+1FC2: GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI */
5898 : [2176+0x03] = -47, /* U+1FC3: GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI */
5899 : [2176+0x04] = -48, /* U+1FC4: GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI */
5900 : [2176+0x06] = -49, /* U+1FC6: GREEK SMALL LETTER ETA WITH PERISPOMENI */
5901 : [2176+0x07] = -50, /* U+1FC7: GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI */
5902 : [2176+0x08] = 0x1F72, /* U+1FC8: GREEK CAPITAL LETTER EPSILON WITH VARIA */
5903 : [2176+0x09] = 0x1F73, /* U+1FC9: GREEK CAPITAL LETTER EPSILON WITH OXIA */
5904 : [2176+0x0A] = 0x1F74, /* U+1FCA: GREEK CAPITAL LETTER ETA WITH VARIA */
5905 : [2176+0x0B] = 0x1F75, /* U+1FCB: GREEK CAPITAL LETTER ETA WITH OXIA */
5906 : [2176+0x0C] = -47, /* U+1FCC: GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI */
5907 : [2176+0x12] = -51, /* U+1FD2: GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA */
5908 : [2176+0x13] = -5, /* U+1FD3: GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA */
5909 : [2176+0x16] = -52, /* U+1FD6: GREEK SMALL LETTER IOTA WITH PERISPOMENI */
5910 : [2176+0x17] = -53, /* U+1FD7: GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI */
5911 : [2176+0x18] = 0x1FD0, /* U+1FD8: GREEK CAPITAL LETTER IOTA WITH VRACHY */
5912 : [2176+0x19] = 0x1FD1, /* U+1FD9: GREEK CAPITAL LETTER IOTA WITH MACRON */
5913 : [2176+0x1A] = 0x1F76, /* U+1FDA: GREEK CAPITAL LETTER IOTA WITH VARIA */
5914 : [2176+0x1B] = 0x1F77, /* U+1FDB: GREEK CAPITAL LETTER IOTA WITH OXIA */
5915 : [2176+0x22] = -54, /* U+1FE2: GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA */
5916 : [2176+0x23] = -6, /* U+1FE3: GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA */
5917 : [2176+0x24] = -55, /* U+1FE4: GREEK SMALL LETTER RHO WITH PSILI */
5918 : [2176+0x26] = -56, /* U+1FE6: GREEK SMALL LETTER UPSILON WITH PERISPOMENI */
5919 : [2176+0x27] = -57, /* U+1FE7: GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI */
5920 : [2176+0x28] = 0x1FE0, /* U+1FE8: GREEK CAPITAL LETTER UPSILON WITH VRACHY */
5921 : [2176+0x29] = 0x1FE1, /* U+1FE9: GREEK CAPITAL LETTER UPSILON WITH MACRON */
5922 : [2176+0x2A] = 0x1F7A, /* U+1FEA: GREEK CAPITAL LETTER UPSILON WITH VARIA */
5923 : [2176+0x2B] = 0x1F7B, /* U+1FEB: GREEK CAPITAL LETTER UPSILON WITH OXIA */
5924 : [2176+0x2C] = 0x1FE5, /* U+1FEC: GREEK CAPITAL LETTER RHO WITH DASIA */
5925 : [2176+0x32] = -58, /* U+1FF2: GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI */
5926 : [2176+0x33] = -59, /* U+1FF3: GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI */
5927 : [2176+0x34] = -60, /* U+1FF4: GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI */
5928 : [2176+0x36] = -61, /* U+1FF6: GREEK SMALL LETTER OMEGA WITH PERISPOMENI */
5929 : [2176+0x37] = -62, /* U+1FF7: GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI */
5930 : [2176+0x38] = 0x1F78, /* U+1FF8: GREEK CAPITAL LETTER OMICRON WITH VARIA */
5931 : [2176+0x39] = 0x1F79, /* U+1FF9: GREEK CAPITAL LETTER OMICRON WITH OXIA */
5932 : [2176+0x3A] = 0x1F7C, /* U+1FFA: GREEK CAPITAL LETTER OMEGA WITH VARIA */
5933 : [2176+0x3B] = 0x1F7D, /* U+1FFB: GREEK CAPITAL LETTER OMEGA WITH OXIA */
5934 : [2176+0x3C] = -59, /* U+1FFC: GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI */
5935 : [0xE2] = 2240 - 0x80, /* 342 ... */
5936 : [2240+0x04] = 2304 - 0x80, /* 342 204 ... */
5937 : [2304+0x26] = 0x03C9, /* U+2126: OHM SIGN */
5938 : [2304+0x2A] = 0x006B, /* U+212A: KELVIN SIGN */
5939 : [2304+0x2B] = 0x00E5, /* U+212B: ANGSTROM SIGN */
5940 : [2304+0x32] = 0x214E, /* U+2132: TURNED CAPITAL F */
5941 : [2240+0x05] = 2368 - 0x80, /* 342 205 ... */
5942 : [2368+0x20] = 0x2170, /* U+2160: ROMAN NUMERAL ONE */
5943 : [2368+0x21] = 0x2171, /* U+2161: ROMAN NUMERAL TWO */
5944 : [2368+0x22] = 0x2172, /* U+2162: ROMAN NUMERAL THREE */
5945 : [2368+0x23] = 0x2173, /* U+2163: ROMAN NUMERAL FOUR */
5946 : [2368+0x24] = 0x2174, /* U+2164: ROMAN NUMERAL FIVE */
5947 : [2368+0x25] = 0x2175, /* U+2165: ROMAN NUMERAL SIX */
5948 : [2368+0x26] = 0x2176, /* U+2166: ROMAN NUMERAL SEVEN */
5949 : [2368+0x27] = 0x2177, /* U+2167: ROMAN NUMERAL EIGHT */
5950 : [2368+0x28] = 0x2178, /* U+2168: ROMAN NUMERAL NINE */
5951 : [2368+0x29] = 0x2179, /* U+2169: ROMAN NUMERAL TEN */
5952 : [2368+0x2A] = 0x217A, /* U+216A: ROMAN NUMERAL ELEVEN */
5953 : [2368+0x2B] = 0x217B, /* U+216B: ROMAN NUMERAL TWELVE */
5954 : [2368+0x2C] = 0x217C, /* U+216C: ROMAN NUMERAL FIFTY */
5955 : [2368+0x2D] = 0x217D, /* U+216D: ROMAN NUMERAL ONE HUNDRED */
5956 : [2368+0x2E] = 0x217E, /* U+216E: ROMAN NUMERAL FIVE HUNDRED */
5957 : [2368+0x2F] = 0x217F, /* U+216F: ROMAN NUMERAL ONE THOUSAND */
5958 : [2240+0x06] = 2432 - 0x80, /* 342 206 ... */
5959 : [2432+0x03] = 0x2184, /* U+2183: ROMAN NUMERAL REVERSED ONE HUNDRED */
5960 : [2240+0x12] = 2496 - 0x80, /* 342 222 ... */
5961 : [2496+0x36] = 0x24D0, /* U+24B6: CIRCLED LATIN CAPITAL LETTER A */
5962 : [2496+0x37] = 0x24D1, /* U+24B7: CIRCLED LATIN CAPITAL LETTER B */
5963 : [2496+0x38] = 0x24D2, /* U+24B8: CIRCLED LATIN CAPITAL LETTER C */
5964 : [2496+0x39] = 0x24D3, /* U+24B9: CIRCLED LATIN CAPITAL LETTER D */
5965 : [2496+0x3A] = 0x24D4, /* U+24BA: CIRCLED LATIN CAPITAL LETTER E */
5966 : [2496+0x3B] = 0x24D5, /* U+24BB: CIRCLED LATIN CAPITAL LETTER F */
5967 : [2496+0x3C] = 0x24D6, /* U+24BC: CIRCLED LATIN CAPITAL LETTER G */
5968 : [2496+0x3D] = 0x24D7, /* U+24BD: CIRCLED LATIN CAPITAL LETTER H */
5969 : [2496+0x3E] = 0x24D8, /* U+24BE: CIRCLED LATIN CAPITAL LETTER I */
5970 : [2496+0x3F] = 0x24D9, /* U+24BF: CIRCLED LATIN CAPITAL LETTER J */
5971 : [2240+0x13] = 2560 - 0x80, /* 342 223 ... */
5972 : [2560+0x00] = 0x24DA, /* U+24C0: CIRCLED LATIN CAPITAL LETTER K */
5973 : [2560+0x01] = 0x24DB, /* U+24C1: CIRCLED LATIN CAPITAL LETTER L */
5974 : [2560+0x02] = 0x24DC, /* U+24C2: CIRCLED LATIN CAPITAL LETTER M */
5975 : [2560+0x03] = 0x24DD, /* U+24C3: CIRCLED LATIN CAPITAL LETTER N */
5976 : [2560+0x04] = 0x24DE, /* U+24C4: CIRCLED LATIN CAPITAL LETTER O */
5977 : [2560+0x05] = 0x24DF, /* U+24C5: CIRCLED LATIN CAPITAL LETTER P */
5978 : [2560+0x06] = 0x24E0, /* U+24C6: CIRCLED LATIN CAPITAL LETTER Q */
5979 : [2560+0x07] = 0x24E1, /* U+24C7: CIRCLED LATIN CAPITAL LETTER R */
5980 : [2560+0x08] = 0x24E2, /* U+24C8: CIRCLED LATIN CAPITAL LETTER S */
5981 : [2560+0x09] = 0x24E3, /* U+24C9: CIRCLED LATIN CAPITAL LETTER T */
5982 : [2560+0x0A] = 0x24E4, /* U+24CA: CIRCLED LATIN CAPITAL LETTER U */
5983 : [2560+0x0B] = 0x24E5, /* U+24CB: CIRCLED LATIN CAPITAL LETTER V */
5984 : [2560+0x0C] = 0x24E6, /* U+24CC: CIRCLED LATIN CAPITAL LETTER W */
5985 : [2560+0x0D] = 0x24E7, /* U+24CD: CIRCLED LATIN CAPITAL LETTER X */
5986 : [2560+0x0E] = 0x24E8, /* U+24CE: CIRCLED LATIN CAPITAL LETTER Y */
5987 : [2560+0x0F] = 0x24E9, /* U+24CF: CIRCLED LATIN CAPITAL LETTER Z */
5988 : [2240+0x30] = 2624 - 0x80, /* 342 260 ... */
5989 : [2624+0x00] = 0x2C30, /* U+2C00: GLAGOLITIC CAPITAL LETTER AZU */
5990 : [2624+0x01] = 0x2C31, /* U+2C01: GLAGOLITIC CAPITAL LETTER BUKY */
5991 : [2624+0x02] = 0x2C32, /* U+2C02: GLAGOLITIC CAPITAL LETTER VEDE */
5992 : [2624+0x03] = 0x2C33, /* U+2C03: GLAGOLITIC CAPITAL LETTER GLAGOLI */
5993 : [2624+0x04] = 0x2C34, /* U+2C04: GLAGOLITIC CAPITAL LETTER DOBRO */
5994 : [2624+0x05] = 0x2C35, /* U+2C05: GLAGOLITIC CAPITAL LETTER YESTU */
5995 : [2624+0x06] = 0x2C36, /* U+2C06: GLAGOLITIC CAPITAL LETTER ZHIVETE */
5996 : [2624+0x07] = 0x2C37, /* U+2C07: GLAGOLITIC CAPITAL LETTER DZELO */
5997 : [2624+0x08] = 0x2C38, /* U+2C08: GLAGOLITIC CAPITAL LETTER ZEMLJA */
5998 : [2624+0x09] = 0x2C39, /* U+2C09: GLAGOLITIC CAPITAL LETTER IZHE */
5999 : [2624+0x0A] = 0x2C3A, /* U+2C0A: GLAGOLITIC CAPITAL LETTER INITIAL IZHE */
6000 : [2624+0x0B] = 0x2C3B, /* U+2C0B: GLAGOLITIC CAPITAL LETTER I */
6001 : [2624+0x0C] = 0x2C3C, /* U+2C0C: GLAGOLITIC CAPITAL LETTER DJERVI */
6002 : [2624+0x0D] = 0x2C3D, /* U+2C0D: GLAGOLITIC CAPITAL LETTER KAKO */
6003 : [2624+0x0E] = 0x2C3E, /* U+2C0E: GLAGOLITIC CAPITAL LETTER LJUDIJE */
6004 : [2624+0x0F] = 0x2C3F, /* U+2C0F: GLAGOLITIC CAPITAL LETTER MYSLITE */
6005 : [2624+0x10] = 0x2C40, /* U+2C10: GLAGOLITIC CAPITAL LETTER NASHI */
6006 : [2624+0x11] = 0x2C41, /* U+2C11: GLAGOLITIC CAPITAL LETTER ONU */
6007 : [2624+0x12] = 0x2C42, /* U+2C12: GLAGOLITIC CAPITAL LETTER POKOJI */
6008 : [2624+0x13] = 0x2C43, /* U+2C13: GLAGOLITIC CAPITAL LETTER RITSI */
6009 : [2624+0x14] = 0x2C44, /* U+2C14: GLAGOLITIC CAPITAL LETTER SLOVO */
6010 : [2624+0x15] = 0x2C45, /* U+2C15: GLAGOLITIC CAPITAL LETTER TVRIDO */
6011 : [2624+0x16] = 0x2C46, /* U+2C16: GLAGOLITIC CAPITAL LETTER UKU */
6012 : [2624+0x17] = 0x2C47, /* U+2C17: GLAGOLITIC CAPITAL LETTER FRITU */
6013 : [2624+0x18] = 0x2C48, /* U+2C18: GLAGOLITIC CAPITAL LETTER HERU */
6014 : [2624+0x19] = 0x2C49, /* U+2C19: GLAGOLITIC CAPITAL LETTER OTU */
6015 : [2624+0x1A] = 0x2C4A, /* U+2C1A: GLAGOLITIC CAPITAL LETTER PE */
6016 : [2624+0x1B] = 0x2C4B, /* U+2C1B: GLAGOLITIC CAPITAL LETTER SHTA */
6017 : [2624+0x1C] = 0x2C4C, /* U+2C1C: GLAGOLITIC CAPITAL LETTER TSI */
6018 : [2624+0x1D] = 0x2C4D, /* U+2C1D: GLAGOLITIC CAPITAL LETTER CHRIVI */
6019 : [2624+0x1E] = 0x2C4E, /* U+2C1E: GLAGOLITIC CAPITAL LETTER SHA */
6020 : [2624+0x1F] = 0x2C4F, /* U+2C1F: GLAGOLITIC CAPITAL LETTER YERU */
6021 : [2624+0x20] = 0x2C50, /* U+2C20: GLAGOLITIC CAPITAL LETTER YERI */
6022 : [2624+0x21] = 0x2C51, /* U+2C21: GLAGOLITIC CAPITAL LETTER YATI */
6023 : [2624+0x22] = 0x2C52, /* U+2C22: GLAGOLITIC CAPITAL LETTER SPIDERY HA */
6024 : [2624+0x23] = 0x2C53, /* U+2C23: GLAGOLITIC CAPITAL LETTER YU */
6025 : [2624+0x24] = 0x2C54, /* U+2C24: GLAGOLITIC CAPITAL LETTER SMALL YUS */
6026 : [2624+0x25] = 0x2C55, /* U+2C25: GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL */
6027 : [2624+0x26] = 0x2C56, /* U+2C26: GLAGOLITIC CAPITAL LETTER YO */
6028 : [2624+0x27] = 0x2C57, /* U+2C27: GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS */
6029 : [2624+0x28] = 0x2C58, /* U+2C28: GLAGOLITIC CAPITAL LETTER BIG YUS */
6030 : [2624+0x29] = 0x2C59, /* U+2C29: GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS */
6031 : [2624+0x2A] = 0x2C5A, /* U+2C2A: GLAGOLITIC CAPITAL LETTER FITA */
6032 : [2624+0x2B] = 0x2C5B, /* U+2C2B: GLAGOLITIC CAPITAL LETTER IZHITSA */
6033 : [2624+0x2C] = 0x2C5C, /* U+2C2C: GLAGOLITIC CAPITAL LETTER SHTAPIC */
6034 : [2624+0x2D] = 0x2C5D, /* U+2C2D: GLAGOLITIC CAPITAL LETTER TROKUTASTI A */
6035 : [2624+0x2E] = 0x2C5E, /* U+2C2E: GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE */
6036 : [2624+0x2F] = 0x2C5F, /* U+2C2F: GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI */
6037 : [2240+0x31] = 2688 - 0x80, /* 342 261 ... */
6038 : [2688+0x20] = 0x2C61, /* U+2C60: LATIN CAPITAL LETTER L WITH DOUBLE BAR */
6039 : [2688+0x22] = 0x026B, /* U+2C62: LATIN CAPITAL LETTER L WITH MIDDLE TILDE */
6040 : [2688+0x23] = 0x1D7D, /* U+2C63: LATIN CAPITAL LETTER P WITH STROKE */
6041 : [2688+0x24] = 0x027D, /* U+2C64: LATIN CAPITAL LETTER R WITH TAIL */
6042 : [2688+0x27] = 0x2C68, /* U+2C67: LATIN CAPITAL LETTER H WITH DESCENDER */
6043 : [2688+0x29] = 0x2C6A, /* U+2C69: LATIN CAPITAL LETTER K WITH DESCENDER */
6044 : [2688+0x2B] = 0x2C6C, /* U+2C6B: LATIN CAPITAL LETTER Z WITH DESCENDER */
6045 : [2688+0x2D] = 0x0251, /* U+2C6D: LATIN CAPITAL LETTER ALPHA */
6046 : [2688+0x2E] = 0x0271, /* U+2C6E: LATIN CAPITAL LETTER M WITH HOOK */
6047 : [2688+0x2F] = 0x0250, /* U+2C6F: LATIN CAPITAL LETTER TURNED A */
6048 : [2688+0x30] = 0x0252, /* U+2C70: LATIN CAPITAL LETTER TURNED ALPHA */
6049 : [2688+0x32] = 0x2C73, /* U+2C72: LATIN CAPITAL LETTER W WITH HOOK */
6050 : [2688+0x35] = 0x2C76, /* U+2C75: LATIN CAPITAL LETTER HALF H */
6051 : [2688+0x3E] = 0x023F, /* U+2C7E: LATIN CAPITAL LETTER S WITH SWASH TAIL */
6052 : [2688+0x3F] = 0x0240, /* U+2C7F: LATIN CAPITAL LETTER Z WITH SWASH TAIL */
6053 : [2240+0x32] = 2752 - 0x80, /* 342 262 ... */
6054 : [2752+0x00] = 0x2C81, /* U+2C80: COPTIC CAPITAL LETTER ALFA */
6055 : [2752+0x02] = 0x2C83, /* U+2C82: COPTIC CAPITAL LETTER VIDA */
6056 : [2752+0x04] = 0x2C85, /* U+2C84: COPTIC CAPITAL LETTER GAMMA */
6057 : [2752+0x06] = 0x2C87, /* U+2C86: COPTIC CAPITAL LETTER DALDA */
6058 : [2752+0x08] = 0x2C89, /* U+2C88: COPTIC CAPITAL LETTER EIE */
6059 : [2752+0x0A] = 0x2C8B, /* U+2C8A: COPTIC CAPITAL LETTER SOU */
6060 : [2752+0x0C] = 0x2C8D, /* U+2C8C: COPTIC CAPITAL LETTER ZATA */
6061 : [2752+0x0E] = 0x2C8F, /* U+2C8E: COPTIC CAPITAL LETTER HATE */
6062 : [2752+0x10] = 0x2C91, /* U+2C90: COPTIC CAPITAL LETTER THETHE */
6063 : [2752+0x12] = 0x2C93, /* U+2C92: COPTIC CAPITAL LETTER IAUDA */
6064 : [2752+0x14] = 0x2C95, /* U+2C94: COPTIC CAPITAL LETTER KAPA */
6065 : [2752+0x16] = 0x2C97, /* U+2C96: COPTIC CAPITAL LETTER LAULA */
6066 : [2752+0x18] = 0x2C99, /* U+2C98: COPTIC CAPITAL LETTER MI */
6067 : [2752+0x1A] = 0x2C9B, /* U+2C9A: COPTIC CAPITAL LETTER NI */
6068 : [2752+0x1C] = 0x2C9D, /* U+2C9C: COPTIC CAPITAL LETTER KSI */
6069 : [2752+0x1E] = 0x2C9F, /* U+2C9E: COPTIC CAPITAL LETTER O */
6070 : [2752+0x20] = 0x2CA1, /* U+2CA0: COPTIC CAPITAL LETTER PI */
6071 : [2752+0x22] = 0x2CA3, /* U+2CA2: COPTIC CAPITAL LETTER RO */
6072 : [2752+0x24] = 0x2CA5, /* U+2CA4: COPTIC CAPITAL LETTER SIMA */
6073 : [2752+0x26] = 0x2CA7, /* U+2CA6: COPTIC CAPITAL LETTER TAU */
6074 : [2752+0x28] = 0x2CA9, /* U+2CA8: COPTIC CAPITAL LETTER UA */
6075 : [2752+0x2A] = 0x2CAB, /* U+2CAA: COPTIC CAPITAL LETTER FI */
6076 : [2752+0x2C] = 0x2CAD, /* U+2CAC: COPTIC CAPITAL LETTER KHI */
6077 : [2752+0x2E] = 0x2CAF, /* U+2CAE: COPTIC CAPITAL LETTER PSI */
6078 : [2752+0x30] = 0x2CB1, /* U+2CB0: COPTIC CAPITAL LETTER OOU */
6079 : [2752+0x32] = 0x2CB3, /* U+2CB2: COPTIC CAPITAL LETTER DIALECT-P ALEF */
6080 : [2752+0x34] = 0x2CB5, /* U+2CB4: COPTIC CAPITAL LETTER OLD COPTIC AIN */
6081 : [2752+0x36] = 0x2CB7, /* U+2CB6: COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE */
6082 : [2752+0x38] = 0x2CB9, /* U+2CB8: COPTIC CAPITAL LETTER DIALECT-P KAPA */
6083 : [2752+0x3A] = 0x2CBB, /* U+2CBA: COPTIC CAPITAL LETTER DIALECT-P NI */
6084 : [2752+0x3C] = 0x2CBD, /* U+2CBC: COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI */
6085 : [2752+0x3E] = 0x2CBF, /* U+2CBE: COPTIC CAPITAL LETTER OLD COPTIC OOU */
6086 : [2240+0x33] = 2816 - 0x80, /* 342 263 ... */
6087 : [2816+0x00] = 0x2CC1, /* U+2CC0: COPTIC CAPITAL LETTER SAMPI */
6088 : [2816+0x02] = 0x2CC3, /* U+2CC2: COPTIC CAPITAL LETTER CROSSED SHEI */
6089 : [2816+0x04] = 0x2CC5, /* U+2CC4: COPTIC CAPITAL LETTER OLD COPTIC SHEI */
6090 : [2816+0x06] = 0x2CC7, /* U+2CC6: COPTIC CAPITAL LETTER OLD COPTIC ESH */
6091 : [2816+0x08] = 0x2CC9, /* U+2CC8: COPTIC CAPITAL LETTER AKHMIMIC KHEI */
6092 : [2816+0x0A] = 0x2CCB, /* U+2CCA: COPTIC CAPITAL LETTER DIALECT-P HORI */
6093 : [2816+0x0C] = 0x2CCD, /* U+2CCC: COPTIC CAPITAL LETTER OLD COPTIC HORI */
6094 : [2816+0x0E] = 0x2CCF, /* U+2CCE: COPTIC CAPITAL LETTER OLD COPTIC HA */
6095 : [2816+0x10] = 0x2CD1, /* U+2CD0: COPTIC CAPITAL LETTER L-SHAPED HA */
6096 : [2816+0x12] = 0x2CD3, /* U+2CD2: COPTIC CAPITAL LETTER OLD COPTIC HEI */
6097 : [2816+0x14] = 0x2CD5, /* U+2CD4: COPTIC CAPITAL LETTER OLD COPTIC HAT */
6098 : [2816+0x16] = 0x2CD7, /* U+2CD6: COPTIC CAPITAL LETTER OLD COPTIC GANGIA */
6099 : [2816+0x18] = 0x2CD9, /* U+2CD8: COPTIC CAPITAL LETTER OLD COPTIC DJA */
6100 : [2816+0x1A] = 0x2CDB, /* U+2CDA: COPTIC CAPITAL LETTER OLD COPTIC SHIMA */
6101 : [2816+0x1C] = 0x2CDD, /* U+2CDC: COPTIC CAPITAL LETTER OLD NUBIAN SHIMA */
6102 : [2816+0x1E] = 0x2CDF, /* U+2CDE: COPTIC CAPITAL LETTER OLD NUBIAN NGI */
6103 : [2816+0x20] = 0x2CE1, /* U+2CE0: COPTIC CAPITAL LETTER OLD NUBIAN NYI */
6104 : [2816+0x22] = 0x2CE3, /* U+2CE2: COPTIC CAPITAL LETTER OLD NUBIAN WAU */
6105 : [2816+0x2B] = 0x2CEC, /* U+2CEB: COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI */
6106 : [2816+0x2D] = 0x2CEE, /* U+2CED: COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA */
6107 : [2816+0x32] = 0x2CF3, /* U+2CF2: COPTIC CAPITAL LETTER BOHAIRIC KHEI */
6108 : [0xEA] = 2880 - 0x80, /* 352 ... */
6109 : [2880+0x19] = 2944 - 0x80, /* 352 231 ... */
6110 : [2944+0x00] = 0xA641, /* U+A640: CYRILLIC CAPITAL LETTER ZEMLYA */
6111 : [2944+0x02] = 0xA643, /* U+A642: CYRILLIC CAPITAL LETTER DZELO */
6112 : [2944+0x04] = 0xA645, /* U+A644: CYRILLIC CAPITAL LETTER REVERSED DZE */
6113 : [2944+0x06] = 0xA647, /* U+A646: CYRILLIC CAPITAL LETTER IOTA */
6114 : [2944+0x08] = 0xA649, /* U+A648: CYRILLIC CAPITAL LETTER DJERV */
6115 : [2944+0x0A] = 0xA64B, /* U+A64A: CYRILLIC CAPITAL LETTER MONOGRAPH UK */
6116 : [2944+0x0C] = 0xA64D, /* U+A64C: CYRILLIC CAPITAL LETTER BROAD OMEGA */
6117 : [2944+0x0E] = 0xA64F, /* U+A64E: CYRILLIC CAPITAL LETTER NEUTRAL YER */
6118 : [2944+0x10] = 0xA651, /* U+A650: CYRILLIC CAPITAL LETTER YERU WITH BACK YER */
6119 : [2944+0x12] = 0xA653, /* U+A652: CYRILLIC CAPITAL LETTER IOTIFIED YAT */
6120 : [2944+0x14] = 0xA655, /* U+A654: CYRILLIC CAPITAL LETTER REVERSED YU */
6121 : [2944+0x16] = 0xA657, /* U+A656: CYRILLIC CAPITAL LETTER IOTIFIED A */
6122 : [2944+0x18] = 0xA659, /* U+A658: CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS */
6123 : [2944+0x1A] = 0xA65B, /* U+A65A: CYRILLIC CAPITAL LETTER BLENDED YUS */
6124 : [2944+0x1C] = 0xA65D, /* U+A65C: CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS */
6125 : [2944+0x1E] = 0xA65F, /* U+A65E: CYRILLIC CAPITAL LETTER YN */
6126 : [2944+0x20] = 0xA661, /* U+A660: CYRILLIC CAPITAL LETTER REVERSED TSE */
6127 : [2944+0x22] = 0xA663, /* U+A662: CYRILLIC CAPITAL LETTER SOFT DE */
6128 : [2944+0x24] = 0xA665, /* U+A664: CYRILLIC CAPITAL LETTER SOFT EL */
6129 : [2944+0x26] = 0xA667, /* U+A666: CYRILLIC CAPITAL LETTER SOFT EM */
6130 : [2944+0x28] = 0xA669, /* U+A668: CYRILLIC CAPITAL LETTER MONOCULAR O */
6131 : [2944+0x2A] = 0xA66B, /* U+A66A: CYRILLIC CAPITAL LETTER BINOCULAR O */
6132 : [2944+0x2C] = 0xA66D, /* U+A66C: CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O */
6133 : [2880+0x1A] = 3008 - 0x80, /* 352 232 ... */
6134 : [3008+0x00] = 0xA681, /* U+A680: CYRILLIC CAPITAL LETTER DWE */
6135 : [3008+0x02] = 0xA683, /* U+A682: CYRILLIC CAPITAL LETTER DZWE */
6136 : [3008+0x04] = 0xA685, /* U+A684: CYRILLIC CAPITAL LETTER ZHWE */
6137 : [3008+0x06] = 0xA687, /* U+A686: CYRILLIC CAPITAL LETTER CCHE */
6138 : [3008+0x08] = 0xA689, /* U+A688: CYRILLIC CAPITAL LETTER DZZE */
6139 : [3008+0x0A] = 0xA68B, /* U+A68A: CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK */
6140 : [3008+0x0C] = 0xA68D, /* U+A68C: CYRILLIC CAPITAL LETTER TWE */
6141 : [3008+0x0E] = 0xA68F, /* U+A68E: CYRILLIC CAPITAL LETTER TSWE */
6142 : [3008+0x10] = 0xA691, /* U+A690: CYRILLIC CAPITAL LETTER TSSE */
6143 : [3008+0x12] = 0xA693, /* U+A692: CYRILLIC CAPITAL LETTER TCHE */
6144 : [3008+0x14] = 0xA695, /* U+A694: CYRILLIC CAPITAL LETTER HWE */
6145 : [3008+0x16] = 0xA697, /* U+A696: CYRILLIC CAPITAL LETTER SHWE */
6146 : [3008+0x18] = 0xA699, /* U+A698: CYRILLIC CAPITAL LETTER DOUBLE O */
6147 : [3008+0x1A] = 0xA69B, /* U+A69A: CYRILLIC CAPITAL LETTER CROSSED O */
6148 : [2880+0x1C] = 3072 - 0x80, /* 352 234 ... */
6149 : [3072+0x22] = 0xA723, /* U+A722: LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF */
6150 : [3072+0x24] = 0xA725, /* U+A724: LATIN CAPITAL LETTER EGYPTOLOGICAL AIN */
6151 : [3072+0x26] = 0xA727, /* U+A726: LATIN CAPITAL LETTER HENG */
6152 : [3072+0x28] = 0xA729, /* U+A728: LATIN CAPITAL LETTER TZ */
6153 : [3072+0x2A] = 0xA72B, /* U+A72A: LATIN CAPITAL LETTER TRESILLO */
6154 : [3072+0x2C] = 0xA72D, /* U+A72C: LATIN CAPITAL LETTER CUATRILLO */
6155 : [3072+0x2E] = 0xA72F, /* U+A72E: LATIN CAPITAL LETTER CUATRILLO WITH COMMA */
6156 : [3072+0x32] = 0xA733, /* U+A732: LATIN CAPITAL LETTER AA */
6157 : [3072+0x34] = 0xA735, /* U+A734: LATIN CAPITAL LETTER AO */
6158 : [3072+0x36] = 0xA737, /* U+A736: LATIN CAPITAL LETTER AU */
6159 : [3072+0x38] = 0xA739, /* U+A738: LATIN CAPITAL LETTER AV */
6160 : [3072+0x3A] = 0xA73B, /* U+A73A: LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR */
6161 : [3072+0x3C] = 0xA73D, /* U+A73C: LATIN CAPITAL LETTER AY */
6162 : [3072+0x3E] = 0xA73F, /* U+A73E: LATIN CAPITAL LETTER REVERSED C WITH DOT */
6163 : [2880+0x1D] = 3136 - 0x80, /* 352 235 ... */
6164 : [3136+0x00] = 0xA741, /* U+A740: LATIN CAPITAL LETTER K WITH STROKE */
6165 : [3136+0x02] = 0xA743, /* U+A742: LATIN CAPITAL LETTER K WITH DIAGONAL STROKE */
6166 : [3136+0x04] = 0xA745, /* U+A744: LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE */
6167 : [3136+0x06] = 0xA747, /* U+A746: LATIN CAPITAL LETTER BROKEN L */
6168 : [3136+0x08] = 0xA749, /* U+A748: LATIN CAPITAL LETTER L WITH HIGH STROKE */
6169 : [3136+0x0A] = 0xA74B, /* U+A74A: LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY */
6170 : [3136+0x0C] = 0xA74D, /* U+A74C: LATIN CAPITAL LETTER O WITH LOOP */
6171 : [3136+0x0E] = 0xA74F, /* U+A74E: LATIN CAPITAL LETTER OO */
6172 : [3136+0x10] = 0xA751, /* U+A750: LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER */
6173 : [3136+0x12] = 0xA753, /* U+A752: LATIN CAPITAL LETTER P WITH FLOURISH */
6174 : [3136+0x14] = 0xA755, /* U+A754: LATIN CAPITAL LETTER P WITH SQUIRREL TAIL */
6175 : [3136+0x16] = 0xA757, /* U+A756: LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER */
6176 : [3136+0x18] = 0xA759, /* U+A758: LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE */
6177 : [3136+0x1A] = 0xA75B, /* U+A75A: LATIN CAPITAL LETTER R ROTUNDA */
6178 : [3136+0x1C] = 0xA75D, /* U+A75C: LATIN CAPITAL LETTER RUM ROTUNDA */
6179 : [3136+0x1E] = 0xA75F, /* U+A75E: LATIN CAPITAL LETTER V WITH DIAGONAL STROKE */
6180 : [3136+0x20] = 0xA761, /* U+A760: LATIN CAPITAL LETTER VY */
6181 : [3136+0x22] = 0xA763, /* U+A762: LATIN CAPITAL LETTER VISIGOTHIC Z */
6182 : [3136+0x24] = 0xA765, /* U+A764: LATIN CAPITAL LETTER THORN WITH STROKE */
6183 : [3136+0x26] = 0xA767, /* U+A766: LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER */
6184 : [3136+0x28] = 0xA769, /* U+A768: LATIN CAPITAL LETTER VEND */
6185 : [3136+0x2A] = 0xA76B, /* U+A76A: LATIN CAPITAL LETTER ET */
6186 : [3136+0x2C] = 0xA76D, /* U+A76C: LATIN CAPITAL LETTER IS */
6187 : [3136+0x2E] = 0xA76F, /* U+A76E: LATIN CAPITAL LETTER CON */
6188 : [3136+0x39] = 0xA77A, /* U+A779: LATIN CAPITAL LETTER INSULAR D */
6189 : [3136+0x3B] = 0xA77C, /* U+A77B: LATIN CAPITAL LETTER INSULAR F */
6190 : [3136+0x3D] = 0x1D79, /* U+A77D: LATIN CAPITAL LETTER INSULAR G */
6191 : [3136+0x3E] = 0xA77F, /* U+A77E: LATIN CAPITAL LETTER TURNED INSULAR G */
6192 : [2880+0x1E] = 3200 - 0x80, /* 352 236 ... */
6193 : [3200+0x00] = 0xA781, /* U+A780: LATIN CAPITAL LETTER TURNED L */
6194 : [3200+0x02] = 0xA783, /* U+A782: LATIN CAPITAL LETTER INSULAR R */
6195 : [3200+0x04] = 0xA785, /* U+A784: LATIN CAPITAL LETTER INSULAR S */
6196 : [3200+0x06] = 0xA787, /* U+A786: LATIN CAPITAL LETTER INSULAR T */
6197 : [3200+0x0B] = 0xA78C, /* U+A78B: LATIN CAPITAL LETTER SALTILLO */
6198 : [3200+0x0D] = 0x0265, /* U+A78D: LATIN CAPITAL LETTER TURNED H */
6199 : [3200+0x10] = 0xA791, /* U+A790: LATIN CAPITAL LETTER N WITH DESCENDER */
6200 : [3200+0x12] = 0xA793, /* U+A792: LATIN CAPITAL LETTER C WITH BAR */
6201 : [3200+0x16] = 0xA797, /* U+A796: LATIN CAPITAL LETTER B WITH FLOURISH */
6202 : [3200+0x18] = 0xA799, /* U+A798: LATIN CAPITAL LETTER F WITH STROKE */
6203 : [3200+0x1A] = 0xA79B, /* U+A79A: LATIN CAPITAL LETTER VOLAPUK AE */
6204 : [3200+0x1C] = 0xA79D, /* U+A79C: LATIN CAPITAL LETTER VOLAPUK OE */
6205 : [3200+0x1E] = 0xA79F, /* U+A79E: LATIN CAPITAL LETTER VOLAPUK UE */
6206 : [3200+0x20] = 0xA7A1, /* U+A7A0: LATIN CAPITAL LETTER G WITH OBLIQUE STROKE */
6207 : [3200+0x22] = 0xA7A3, /* U+A7A2: LATIN CAPITAL LETTER K WITH OBLIQUE STROKE */
6208 : [3200+0x24] = 0xA7A5, /* U+A7A4: LATIN CAPITAL LETTER N WITH OBLIQUE STROKE */
6209 : [3200+0x26] = 0xA7A7, /* U+A7A6: LATIN CAPITAL LETTER R WITH OBLIQUE STROKE */
6210 : [3200+0x28] = 0xA7A9, /* U+A7A8: LATIN CAPITAL LETTER S WITH OBLIQUE STROKE */
6211 : [3200+0x2A] = 0x0266, /* U+A7AA: LATIN CAPITAL LETTER H WITH HOOK */
6212 : [3200+0x2B] = 0x025C, /* U+A7AB: LATIN CAPITAL LETTER REVERSED OPEN E */
6213 : [3200+0x2C] = 0x0261, /* U+A7AC: LATIN CAPITAL LETTER SCRIPT G */
6214 : [3200+0x2D] = 0x026C, /* U+A7AD: LATIN CAPITAL LETTER L WITH BELT */
6215 : [3200+0x2E] = 0x026A, /* U+A7AE: LATIN CAPITAL LETTER SMALL CAPITAL I */
6216 : [3200+0x30] = 0x029E, /* U+A7B0: LATIN CAPITAL LETTER TURNED K */
6217 : [3200+0x31] = 0x0287, /* U+A7B1: LATIN CAPITAL LETTER TURNED T */
6218 : [3200+0x32] = 0x029D, /* U+A7B2: LATIN CAPITAL LETTER J WITH CROSSED-TAIL */
6219 : [3200+0x33] = 0xAB53, /* U+A7B3: LATIN CAPITAL LETTER CHI */
6220 : [3200+0x34] = 0xA7B5, /* U+A7B4: LATIN CAPITAL LETTER BETA */
6221 : [3200+0x36] = 0xA7B7, /* U+A7B6: LATIN CAPITAL LETTER OMEGA */
6222 : [3200+0x38] = 0xA7B9, /* U+A7B8: LATIN CAPITAL LETTER U WITH STROKE */
6223 : [3200+0x3A] = 0xA7BB, /* U+A7BA: LATIN CAPITAL LETTER GLOTTAL A */
6224 : [3200+0x3C] = 0xA7BD, /* U+A7BC: LATIN CAPITAL LETTER GLOTTAL I */
6225 : [3200+0x3E] = 0xA7BF, /* U+A7BE: LATIN CAPITAL LETTER GLOTTAL U */
6226 : [2880+0x1F] = 3264 - 0x80, /* 352 237 ... */
6227 : [3264+0x00] = 0xA7C1, /* U+A7C0: LATIN CAPITAL LETTER OLD POLISH O */
6228 : [3264+0x02] = 0xA7C3, /* U+A7C2: LATIN CAPITAL LETTER ANGLICANA W */
6229 : [3264+0x04] = 0xA794, /* U+A7C4: LATIN CAPITAL LETTER C WITH PALATAL HOOK */
6230 : [3264+0x05] = 0x0282, /* U+A7C5: LATIN CAPITAL LETTER S WITH HOOK */
6231 : [3264+0x06] = 0x1D8E, /* U+A7C6: LATIN CAPITAL LETTER Z WITH PALATAL HOOK */
6232 : [3264+0x07] = 0xA7C8, /* U+A7C7: LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY */
6233 : [3264+0x09] = 0xA7CA, /* U+A7C9: LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY */
6234 : [3264+0x10] = 0xA7D1, /* U+A7D0: LATIN CAPITAL LETTER CLOSED INSULAR G */
6235 : [3264+0x16] = 0xA7D7, /* U+A7D6: LATIN CAPITAL LETTER MIDDLE SCOTS S */
6236 : [3264+0x18] = 0xA7D9, /* U+A7D8: LATIN CAPITAL LETTER SIGMOID S */
6237 : [3264+0x35] = 0xA7F6, /* U+A7F5: LATIN CAPITAL LETTER REVERSED HALF H */
6238 : [2880+0x2D] = 3328 - 0x80, /* 352 255 ... */
6239 : [3328+0x30] = 0x13A0, /* U+AB70: CHEROKEE SMALL LETTER A */
6240 : [3328+0x31] = 0x13A1, /* U+AB71: CHEROKEE SMALL LETTER E */
6241 : [3328+0x32] = 0x13A2, /* U+AB72: CHEROKEE SMALL LETTER I */
6242 : [3328+0x33] = 0x13A3, /* U+AB73: CHEROKEE SMALL LETTER O */
6243 : [3328+0x34] = 0x13A4, /* U+AB74: CHEROKEE SMALL LETTER U */
6244 : [3328+0x35] = 0x13A5, /* U+AB75: CHEROKEE SMALL LETTER V */
6245 : [3328+0x36] = 0x13A6, /* U+AB76: CHEROKEE SMALL LETTER GA */
6246 : [3328+0x37] = 0x13A7, /* U+AB77: CHEROKEE SMALL LETTER KA */
6247 : [3328+0x38] = 0x13A8, /* U+AB78: CHEROKEE SMALL LETTER GE */
6248 : [3328+0x39] = 0x13A9, /* U+AB79: CHEROKEE SMALL LETTER GI */
6249 : [3328+0x3A] = 0x13AA, /* U+AB7A: CHEROKEE SMALL LETTER GO */
6250 : [3328+0x3B] = 0x13AB, /* U+AB7B: CHEROKEE SMALL LETTER GU */
6251 : [3328+0x3C] = 0x13AC, /* U+AB7C: CHEROKEE SMALL LETTER GV */
6252 : [3328+0x3D] = 0x13AD, /* U+AB7D: CHEROKEE SMALL LETTER HA */
6253 : [3328+0x3E] = 0x13AE, /* U+AB7E: CHEROKEE SMALL LETTER HE */
6254 : [3328+0x3F] = 0x13AF, /* U+AB7F: CHEROKEE SMALL LETTER HI */
6255 : [2880+0x2E] = 3392 - 0x80, /* 352 256 ... */
6256 : [3392+0x00] = 0x13B0, /* U+AB80: CHEROKEE SMALL LETTER HO */
6257 : [3392+0x01] = 0x13B1, /* U+AB81: CHEROKEE SMALL LETTER HU */
6258 : [3392+0x02] = 0x13B2, /* U+AB82: CHEROKEE SMALL LETTER HV */
6259 : [3392+0x03] = 0x13B3, /* U+AB83: CHEROKEE SMALL LETTER LA */
6260 : [3392+0x04] = 0x13B4, /* U+AB84: CHEROKEE SMALL LETTER LE */
6261 : [3392+0x05] = 0x13B5, /* U+AB85: CHEROKEE SMALL LETTER LI */
6262 : [3392+0x06] = 0x13B6, /* U+AB86: CHEROKEE SMALL LETTER LO */
6263 : [3392+0x07] = 0x13B7, /* U+AB87: CHEROKEE SMALL LETTER LU */
6264 : [3392+0x08] = 0x13B8, /* U+AB88: CHEROKEE SMALL LETTER LV */
6265 : [3392+0x09] = 0x13B9, /* U+AB89: CHEROKEE SMALL LETTER MA */
6266 : [3392+0x0A] = 0x13BA, /* U+AB8A: CHEROKEE SMALL LETTER ME */
6267 : [3392+0x0B] = 0x13BB, /* U+AB8B: CHEROKEE SMALL LETTER MI */
6268 : [3392+0x0C] = 0x13BC, /* U+AB8C: CHEROKEE SMALL LETTER MO */
6269 : [3392+0x0D] = 0x13BD, /* U+AB8D: CHEROKEE SMALL LETTER MU */
6270 : [3392+0x0E] = 0x13BE, /* U+AB8E: CHEROKEE SMALL LETTER NA */
6271 : [3392+0x0F] = 0x13BF, /* U+AB8F: CHEROKEE SMALL LETTER HNA */
6272 : [3392+0x10] = 0x13C0, /* U+AB90: CHEROKEE SMALL LETTER NAH */
6273 : [3392+0x11] = 0x13C1, /* U+AB91: CHEROKEE SMALL LETTER NE */
6274 : [3392+0x12] = 0x13C2, /* U+AB92: CHEROKEE SMALL LETTER NI */
6275 : [3392+0x13] = 0x13C3, /* U+AB93: CHEROKEE SMALL LETTER NO */
6276 : [3392+0x14] = 0x13C4, /* U+AB94: CHEROKEE SMALL LETTER NU */
6277 : [3392+0x15] = 0x13C5, /* U+AB95: CHEROKEE SMALL LETTER NV */
6278 : [3392+0x16] = 0x13C6, /* U+AB96: CHEROKEE SMALL LETTER QUA */
6279 : [3392+0x17] = 0x13C7, /* U+AB97: CHEROKEE SMALL LETTER QUE */
6280 : [3392+0x18] = 0x13C8, /* U+AB98: CHEROKEE SMALL LETTER QUI */
6281 : [3392+0x19] = 0x13C9, /* U+AB99: CHEROKEE SMALL LETTER QUO */
6282 : [3392+0x1A] = 0x13CA, /* U+AB9A: CHEROKEE SMALL LETTER QUU */
6283 : [3392+0x1B] = 0x13CB, /* U+AB9B: CHEROKEE SMALL LETTER QUV */
6284 : [3392+0x1C] = 0x13CC, /* U+AB9C: CHEROKEE SMALL LETTER SA */
6285 : [3392+0x1D] = 0x13CD, /* U+AB9D: CHEROKEE SMALL LETTER S */
6286 : [3392+0x1E] = 0x13CE, /* U+AB9E: CHEROKEE SMALL LETTER SE */
6287 : [3392+0x1F] = 0x13CF, /* U+AB9F: CHEROKEE SMALL LETTER SI */
6288 : [3392+0x20] = 0x13D0, /* U+ABA0: CHEROKEE SMALL LETTER SO */
6289 : [3392+0x21] = 0x13D1, /* U+ABA1: CHEROKEE SMALL LETTER SU */
6290 : [3392+0x22] = 0x13D2, /* U+ABA2: CHEROKEE SMALL LETTER SV */
6291 : [3392+0x23] = 0x13D3, /* U+ABA3: CHEROKEE SMALL LETTER DA */
6292 : [3392+0x24] = 0x13D4, /* U+ABA4: CHEROKEE SMALL LETTER TA */
6293 : [3392+0x25] = 0x13D5, /* U+ABA5: CHEROKEE SMALL LETTER DE */
6294 : [3392+0x26] = 0x13D6, /* U+ABA6: CHEROKEE SMALL LETTER TE */
6295 : [3392+0x27] = 0x13D7, /* U+ABA7: CHEROKEE SMALL LETTER DI */
6296 : [3392+0x28] = 0x13D8, /* U+ABA8: CHEROKEE SMALL LETTER TI */
6297 : [3392+0x29] = 0x13D9, /* U+ABA9: CHEROKEE SMALL LETTER DO */
6298 : [3392+0x2A] = 0x13DA, /* U+ABAA: CHEROKEE SMALL LETTER DU */
6299 : [3392+0x2B] = 0x13DB, /* U+ABAB: CHEROKEE SMALL LETTER DV */
6300 : [3392+0x2C] = 0x13DC, /* U+ABAC: CHEROKEE SMALL LETTER DLA */
6301 : [3392+0x2D] = 0x13DD, /* U+ABAD: CHEROKEE SMALL LETTER TLA */
6302 : [3392+0x2E] = 0x13DE, /* U+ABAE: CHEROKEE SMALL LETTER TLE */
6303 : [3392+0x2F] = 0x13DF, /* U+ABAF: CHEROKEE SMALL LETTER TLI */
6304 : [3392+0x30] = 0x13E0, /* U+ABB0: CHEROKEE SMALL LETTER TLO */
6305 : [3392+0x31] = 0x13E1, /* U+ABB1: CHEROKEE SMALL LETTER TLU */
6306 : [3392+0x32] = 0x13E2, /* U+ABB2: CHEROKEE SMALL LETTER TLV */
6307 : [3392+0x33] = 0x13E3, /* U+ABB3: CHEROKEE SMALL LETTER TSA */
6308 : [3392+0x34] = 0x13E4, /* U+ABB4: CHEROKEE SMALL LETTER TSE */
6309 : [3392+0x35] = 0x13E5, /* U+ABB5: CHEROKEE SMALL LETTER TSI */
6310 : [3392+0x36] = 0x13E6, /* U+ABB6: CHEROKEE SMALL LETTER TSO */
6311 : [3392+0x37] = 0x13E7, /* U+ABB7: CHEROKEE SMALL LETTER TSU */
6312 : [3392+0x38] = 0x13E8, /* U+ABB8: CHEROKEE SMALL LETTER TSV */
6313 : [3392+0x39] = 0x13E9, /* U+ABB9: CHEROKEE SMALL LETTER WA */
6314 : [3392+0x3A] = 0x13EA, /* U+ABBA: CHEROKEE SMALL LETTER WE */
6315 : [3392+0x3B] = 0x13EB, /* U+ABBB: CHEROKEE SMALL LETTER WI */
6316 : [3392+0x3C] = 0x13EC, /* U+ABBC: CHEROKEE SMALL LETTER WO */
6317 : [3392+0x3D] = 0x13ED, /* U+ABBD: CHEROKEE SMALL LETTER WU */
6318 : [3392+0x3E] = 0x13EE, /* U+ABBE: CHEROKEE SMALL LETTER WV */
6319 : [3392+0x3F] = 0x13EF, /* U+ABBF: CHEROKEE SMALL LETTER YA */
6320 : [0xEF] = 3456 - 0x80, /* 357 ... */
6321 : [3456+0x2C] = 3520 - 0x80, /* 357 254 ... */
6322 : [3520+0x00] = -63, /* U+FB00: LATIN SMALL LIGATURE FF */
6323 : [3520+0x01] = -64, /* U+FB01: LATIN SMALL LIGATURE FI */
6324 : [3520+0x02] = -65, /* U+FB02: LATIN SMALL LIGATURE FL */
6325 : [3520+0x03] = -66, /* U+FB03: LATIN SMALL LIGATURE FFI */
6326 : [3520+0x04] = -67, /* U+FB04: LATIN SMALL LIGATURE FFL */
6327 : [3520+0x05] = -68, /* U+FB05: LATIN SMALL LIGATURE LONG S T */
6328 : [3520+0x06] = -68, /* U+FB06: LATIN SMALL LIGATURE ST */
6329 : [3520+0x13] = -69, /* U+FB13: ARMENIAN SMALL LIGATURE MEN NOW */
6330 : [3520+0x14] = -70, /* U+FB14: ARMENIAN SMALL LIGATURE MEN ECH */
6331 : [3520+0x15] = -71, /* U+FB15: ARMENIAN SMALL LIGATURE MEN INI */
6332 : [3520+0x16] = -72, /* U+FB16: ARMENIAN SMALL LIGATURE VEW NOW */
6333 : [3520+0x17] = -73, /* U+FB17: ARMENIAN SMALL LIGATURE MEN XEH */
6334 : [3456+0x3C] = 3584 - 0x80, /* 357 274 ... */
6335 : [3584+0x21] = 0xFF41, /* U+FF21: FULLWIDTH LATIN CAPITAL LETTER A */
6336 : [3584+0x22] = 0xFF42, /* U+FF22: FULLWIDTH LATIN CAPITAL LETTER B */
6337 : [3584+0x23] = 0xFF43, /* U+FF23: FULLWIDTH LATIN CAPITAL LETTER C */
6338 : [3584+0x24] = 0xFF44, /* U+FF24: FULLWIDTH LATIN CAPITAL LETTER D */
6339 : [3584+0x25] = 0xFF45, /* U+FF25: FULLWIDTH LATIN CAPITAL LETTER E */
6340 : [3584+0x26] = 0xFF46, /* U+FF26: FULLWIDTH LATIN CAPITAL LETTER F */
6341 : [3584+0x27] = 0xFF47, /* U+FF27: FULLWIDTH LATIN CAPITAL LETTER G */
6342 : [3584+0x28] = 0xFF48, /* U+FF28: FULLWIDTH LATIN CAPITAL LETTER H */
6343 : [3584+0x29] = 0xFF49, /* U+FF29: FULLWIDTH LATIN CAPITAL LETTER I */
6344 : [3584+0x2A] = 0xFF4A, /* U+FF2A: FULLWIDTH LATIN CAPITAL LETTER J */
6345 : [3584+0x2B] = 0xFF4B, /* U+FF2B: FULLWIDTH LATIN CAPITAL LETTER K */
6346 : [3584+0x2C] = 0xFF4C, /* U+FF2C: FULLWIDTH LATIN CAPITAL LETTER L */
6347 : [3584+0x2D] = 0xFF4D, /* U+FF2D: FULLWIDTH LATIN CAPITAL LETTER M */
6348 : [3584+0x2E] = 0xFF4E, /* U+FF2E: FULLWIDTH LATIN CAPITAL LETTER N */
6349 : [3584+0x2F] = 0xFF4F, /* U+FF2F: FULLWIDTH LATIN CAPITAL LETTER O */
6350 : [3584+0x30] = 0xFF50, /* U+FF30: FULLWIDTH LATIN CAPITAL LETTER P */
6351 : [3584+0x31] = 0xFF51, /* U+FF31: FULLWIDTH LATIN CAPITAL LETTER Q */
6352 : [3584+0x32] = 0xFF52, /* U+FF32: FULLWIDTH LATIN CAPITAL LETTER R */
6353 : [3584+0x33] = 0xFF53, /* U+FF33: FULLWIDTH LATIN CAPITAL LETTER S */
6354 : [3584+0x34] = 0xFF54, /* U+FF34: FULLWIDTH LATIN CAPITAL LETTER T */
6355 : [3584+0x35] = 0xFF55, /* U+FF35: FULLWIDTH LATIN CAPITAL LETTER U */
6356 : [3584+0x36] = 0xFF56, /* U+FF36: FULLWIDTH LATIN CAPITAL LETTER V */
6357 : [3584+0x37] = 0xFF57, /* U+FF37: FULLWIDTH LATIN CAPITAL LETTER W */
6358 : [3584+0x38] = 0xFF58, /* U+FF38: FULLWIDTH LATIN CAPITAL LETTER X */
6359 : [3584+0x39] = 0xFF59, /* U+FF39: FULLWIDTH LATIN CAPITAL LETTER Y */
6360 : [3584+0x3A] = 0xFF5A, /* U+FF3A: FULLWIDTH LATIN CAPITAL LETTER Z */
6361 : [0xF0] = 3648 - 0x80, /* 360 ... */
6362 : [3648+0x10] = 3712 - 0x80, /* 360 220 ... */
6363 : [3712+0x10] = 3776 - 0x80, /* 360 220 220 ... */
6364 : [3776+0x00] = 0x10428, /* U+10400: DESERET CAPITAL LETTER LONG I */
6365 : [3776+0x01] = 0x10429, /* U+10401: DESERET CAPITAL LETTER LONG E */
6366 : [3776+0x02] = 0x1042A, /* U+10402: DESERET CAPITAL LETTER LONG A */
6367 : [3776+0x03] = 0x1042B, /* U+10403: DESERET CAPITAL LETTER LONG AH */
6368 : [3776+0x04] = 0x1042C, /* U+10404: DESERET CAPITAL LETTER LONG O */
6369 : [3776+0x05] = 0x1042D, /* U+10405: DESERET CAPITAL LETTER LONG OO */
6370 : [3776+0x06] = 0x1042E, /* U+10406: DESERET CAPITAL LETTER SHORT I */
6371 : [3776+0x07] = 0x1042F, /* U+10407: DESERET CAPITAL LETTER SHORT E */
6372 : [3776+0x08] = 0x10430, /* U+10408: DESERET CAPITAL LETTER SHORT A */
6373 : [3776+0x09] = 0x10431, /* U+10409: DESERET CAPITAL LETTER SHORT AH */
6374 : [3776+0x0A] = 0x10432, /* U+1040A: DESERET CAPITAL LETTER SHORT O */
6375 : [3776+0x0B] = 0x10433, /* U+1040B: DESERET CAPITAL LETTER SHORT OO */
6376 : [3776+0x0C] = 0x10434, /* U+1040C: DESERET CAPITAL LETTER AY */
6377 : [3776+0x0D] = 0x10435, /* U+1040D: DESERET CAPITAL LETTER OW */
6378 : [3776+0x0E] = 0x10436, /* U+1040E: DESERET CAPITAL LETTER WU */
6379 : [3776+0x0F] = 0x10437, /* U+1040F: DESERET CAPITAL LETTER YEE */
6380 : [3776+0x10] = 0x10438, /* U+10410: DESERET CAPITAL LETTER H */
6381 : [3776+0x11] = 0x10439, /* U+10411: DESERET CAPITAL LETTER PEE */
6382 : [3776+0x12] = 0x1043A, /* U+10412: DESERET CAPITAL LETTER BEE */
6383 : [3776+0x13] = 0x1043B, /* U+10413: DESERET CAPITAL LETTER TEE */
6384 : [3776+0x14] = 0x1043C, /* U+10414: DESERET CAPITAL LETTER DEE */
6385 : [3776+0x15] = 0x1043D, /* U+10415: DESERET CAPITAL LETTER CHEE */
6386 : [3776+0x16] = 0x1043E, /* U+10416: DESERET CAPITAL LETTER JEE */
6387 : [3776+0x17] = 0x1043F, /* U+10417: DESERET CAPITAL LETTER KAY */
6388 : [3776+0x18] = 0x10440, /* U+10418: DESERET CAPITAL LETTER GAY */
6389 : [3776+0x19] = 0x10441, /* U+10419: DESERET CAPITAL LETTER EF */
6390 : [3776+0x1A] = 0x10442, /* U+1041A: DESERET CAPITAL LETTER VEE */
6391 : [3776+0x1B] = 0x10443, /* U+1041B: DESERET CAPITAL LETTER ETH */
6392 : [3776+0x1C] = 0x10444, /* U+1041C: DESERET CAPITAL LETTER THEE */
6393 : [3776+0x1D] = 0x10445, /* U+1041D: DESERET CAPITAL LETTER ES */
6394 : [3776+0x1E] = 0x10446, /* U+1041E: DESERET CAPITAL LETTER ZEE */
6395 : [3776+0x1F] = 0x10447, /* U+1041F: DESERET CAPITAL LETTER ESH */
6396 : [3776+0x20] = 0x10448, /* U+10420: DESERET CAPITAL LETTER ZHEE */
6397 : [3776+0x21] = 0x10449, /* U+10421: DESERET CAPITAL LETTER ER */
6398 : [3776+0x22] = 0x1044A, /* U+10422: DESERET CAPITAL LETTER EL */
6399 : [3776+0x23] = 0x1044B, /* U+10423: DESERET CAPITAL LETTER EM */
6400 : [3776+0x24] = 0x1044C, /* U+10424: DESERET CAPITAL LETTER EN */
6401 : [3776+0x25] = 0x1044D, /* U+10425: DESERET CAPITAL LETTER ENG */
6402 : [3776+0x26] = 0x1044E, /* U+10426: DESERET CAPITAL LETTER OI */
6403 : [3776+0x27] = 0x1044F, /* U+10427: DESERET CAPITAL LETTER EW */
6404 : [3712+0x12] = 3840 - 0x80, /* 360 220 222 ... */
6405 : [3840+0x30] = 0x104D8, /* U+104B0: OSAGE CAPITAL LETTER A */
6406 : [3840+0x31] = 0x104D9, /* U+104B1: OSAGE CAPITAL LETTER AI */
6407 : [3840+0x32] = 0x104DA, /* U+104B2: OSAGE CAPITAL LETTER AIN */
6408 : [3840+0x33] = 0x104DB, /* U+104B3: OSAGE CAPITAL LETTER AH */
6409 : [3840+0x34] = 0x104DC, /* U+104B4: OSAGE CAPITAL LETTER BRA */
6410 : [3840+0x35] = 0x104DD, /* U+104B5: OSAGE CAPITAL LETTER CHA */
6411 : [3840+0x36] = 0x104DE, /* U+104B6: OSAGE CAPITAL LETTER EHCHA */
6412 : [3840+0x37] = 0x104DF, /* U+104B7: OSAGE CAPITAL LETTER E */
6413 : [3840+0x38] = 0x104E0, /* U+104B8: OSAGE CAPITAL LETTER EIN */
6414 : [3840+0x39] = 0x104E1, /* U+104B9: OSAGE CAPITAL LETTER HA */
6415 : [3840+0x3A] = 0x104E2, /* U+104BA: OSAGE CAPITAL LETTER HYA */
6416 : [3840+0x3B] = 0x104E3, /* U+104BB: OSAGE CAPITAL LETTER I */
6417 : [3840+0x3C] = 0x104E4, /* U+104BC: OSAGE CAPITAL LETTER KA */
6418 : [3840+0x3D] = 0x104E5, /* U+104BD: OSAGE CAPITAL LETTER EHKA */
6419 : [3840+0x3E] = 0x104E6, /* U+104BE: OSAGE CAPITAL LETTER KYA */
6420 : [3840+0x3F] = 0x104E7, /* U+104BF: OSAGE CAPITAL LETTER LA */
6421 : [3712+0x13] = 3904 - 0x80, /* 360 220 223 ... */
6422 : [3904+0x00] = 0x104E8, /* U+104C0: OSAGE CAPITAL LETTER MA */
6423 : [3904+0x01] = 0x104E9, /* U+104C1: OSAGE CAPITAL LETTER NA */
6424 : [3904+0x02] = 0x104EA, /* U+104C2: OSAGE CAPITAL LETTER O */
6425 : [3904+0x03] = 0x104EB, /* U+104C3: OSAGE CAPITAL LETTER OIN */
6426 : [3904+0x04] = 0x104EC, /* U+104C4: OSAGE CAPITAL LETTER PA */
6427 : [3904+0x05] = 0x104ED, /* U+104C5: OSAGE CAPITAL LETTER EHPA */
6428 : [3904+0x06] = 0x104EE, /* U+104C6: OSAGE CAPITAL LETTER SA */
6429 : [3904+0x07] = 0x104EF, /* U+104C7: OSAGE CAPITAL LETTER SHA */
6430 : [3904+0x08] = 0x104F0, /* U+104C8: OSAGE CAPITAL LETTER TA */
6431 : [3904+0x09] = 0x104F1, /* U+104C9: OSAGE CAPITAL LETTER EHTA */
6432 : [3904+0x0A] = 0x104F2, /* U+104CA: OSAGE CAPITAL LETTER TSA */
6433 : [3904+0x0B] = 0x104F3, /* U+104CB: OSAGE CAPITAL LETTER EHTSA */
6434 : [3904+0x0C] = 0x104F4, /* U+104CC: OSAGE CAPITAL LETTER TSHA */
6435 : [3904+0x0D] = 0x104F5, /* U+104CD: OSAGE CAPITAL LETTER DHA */
6436 : [3904+0x0E] = 0x104F6, /* U+104CE: OSAGE CAPITAL LETTER U */
6437 : [3904+0x0F] = 0x104F7, /* U+104CF: OSAGE CAPITAL LETTER WA */
6438 : [3904+0x10] = 0x104F8, /* U+104D0: OSAGE CAPITAL LETTER KHA */
6439 : [3904+0x11] = 0x104F9, /* U+104D1: OSAGE CAPITAL LETTER GHA */
6440 : [3904+0x12] = 0x104FA, /* U+104D2: OSAGE CAPITAL LETTER ZA */
6441 : [3904+0x13] = 0x104FB, /* U+104D3: OSAGE CAPITAL LETTER ZHA */
6442 : [3712+0x15] = 3968 - 0x80, /* 360 220 225 ... */
6443 : [3968+0x30] = 0x10597, /* U+10570: VITHKUQI CAPITAL LETTER A */
6444 : [3968+0x31] = 0x10598, /* U+10571: VITHKUQI CAPITAL LETTER BBE */
6445 : [3968+0x32] = 0x10599, /* U+10572: VITHKUQI CAPITAL LETTER BE */
6446 : [3968+0x33] = 0x1059A, /* U+10573: VITHKUQI CAPITAL LETTER CE */
6447 : [3968+0x34] = 0x1059B, /* U+10574: VITHKUQI CAPITAL LETTER CHE */
6448 : [3968+0x35] = 0x1059C, /* U+10575: VITHKUQI CAPITAL LETTER DE */
6449 : [3968+0x36] = 0x1059D, /* U+10576: VITHKUQI CAPITAL LETTER DHE */
6450 : [3968+0x37] = 0x1059E, /* U+10577: VITHKUQI CAPITAL LETTER EI */
6451 : [3968+0x38] = 0x1059F, /* U+10578: VITHKUQI CAPITAL LETTER E */
6452 : [3968+0x39] = 0x105A0, /* U+10579: VITHKUQI CAPITAL LETTER FE */
6453 : [3968+0x3A] = 0x105A1, /* U+1057A: VITHKUQI CAPITAL LETTER GA */
6454 : [3968+0x3C] = 0x105A3, /* U+1057C: VITHKUQI CAPITAL LETTER HA */
6455 : [3968+0x3D] = 0x105A4, /* U+1057D: VITHKUQI CAPITAL LETTER HHA */
6456 : [3968+0x3E] = 0x105A5, /* U+1057E: VITHKUQI CAPITAL LETTER I */
6457 : [3968+0x3F] = 0x105A6, /* U+1057F: VITHKUQI CAPITAL LETTER IJE */
6458 : [3712+0x16] = 4032 - 0x80, /* 360 220 226 ... */
6459 : [4032+0x00] = 0x105A7, /* U+10580: VITHKUQI CAPITAL LETTER JE */
6460 : [4032+0x01] = 0x105A8, /* U+10581: VITHKUQI CAPITAL LETTER KA */
6461 : [4032+0x02] = 0x105A9, /* U+10582: VITHKUQI CAPITAL LETTER LA */
6462 : [4032+0x03] = 0x105AA, /* U+10583: VITHKUQI CAPITAL LETTER LLA */
6463 : [4032+0x04] = 0x105AB, /* U+10584: VITHKUQI CAPITAL LETTER ME */
6464 : [4032+0x05] = 0x105AC, /* U+10585: VITHKUQI CAPITAL LETTER NE */
6465 : [4032+0x06] = 0x105AD, /* U+10586: VITHKUQI CAPITAL LETTER NJE */
6466 : [4032+0x07] = 0x105AE, /* U+10587: VITHKUQI CAPITAL LETTER O */
6467 : [4032+0x08] = 0x105AF, /* U+10588: VITHKUQI CAPITAL LETTER PE */
6468 : [4032+0x09] = 0x105B0, /* U+10589: VITHKUQI CAPITAL LETTER QA */
6469 : [4032+0x0A] = 0x105B1, /* U+1058A: VITHKUQI CAPITAL LETTER RE */
6470 : [4032+0x0C] = 0x105B3, /* U+1058C: VITHKUQI CAPITAL LETTER SE */
6471 : [4032+0x0D] = 0x105B4, /* U+1058D: VITHKUQI CAPITAL LETTER SHE */
6472 : [4032+0x0E] = 0x105B5, /* U+1058E: VITHKUQI CAPITAL LETTER TE */
6473 : [4032+0x0F] = 0x105B6, /* U+1058F: VITHKUQI CAPITAL LETTER THE */
6474 : [4032+0x10] = 0x105B7, /* U+10590: VITHKUQI CAPITAL LETTER U */
6475 : [4032+0x11] = 0x105B8, /* U+10591: VITHKUQI CAPITAL LETTER VE */
6476 : [4032+0x12] = 0x105B9, /* U+10592: VITHKUQI CAPITAL LETTER XE */
6477 : [4032+0x14] = 0x105BB, /* U+10594: VITHKUQI CAPITAL LETTER Y */
6478 : [4032+0x15] = 0x105BC, /* U+10595: VITHKUQI CAPITAL LETTER ZE */
6479 : [3712+0x32] = 4096 - 0x80, /* 360 220 262 ... */
6480 : [4096+0x00] = 0x10CC0, /* U+10C80: OLD HUNGARIAN CAPITAL LETTER A */
6481 : [4096+0x01] = 0x10CC1, /* U+10C81: OLD HUNGARIAN CAPITAL LETTER AA */
6482 : [4096+0x02] = 0x10CC2, /* U+10C82: OLD HUNGARIAN CAPITAL LETTER EB */
6483 : [4096+0x03] = 0x10CC3, /* U+10C83: OLD HUNGARIAN CAPITAL LETTER AMB */
6484 : [4096+0x04] = 0x10CC4, /* U+10C84: OLD HUNGARIAN CAPITAL LETTER EC */
6485 : [4096+0x05] = 0x10CC5, /* U+10C85: OLD HUNGARIAN CAPITAL LETTER ENC */
6486 : [4096+0x06] = 0x10CC6, /* U+10C86: OLD HUNGARIAN CAPITAL LETTER ECS */
6487 : [4096+0x07] = 0x10CC7, /* U+10C87: OLD HUNGARIAN CAPITAL LETTER ED */
6488 : [4096+0x08] = 0x10CC8, /* U+10C88: OLD HUNGARIAN CAPITAL LETTER AND */
6489 : [4096+0x09] = 0x10CC9, /* U+10C89: OLD HUNGARIAN CAPITAL LETTER E */
6490 : [4096+0x0A] = 0x10CCA, /* U+10C8A: OLD HUNGARIAN CAPITAL LETTER CLOSE E */
6491 : [4096+0x0B] = 0x10CCB, /* U+10C8B: OLD HUNGARIAN CAPITAL LETTER EE */
6492 : [4096+0x0C] = 0x10CCC, /* U+10C8C: OLD HUNGARIAN CAPITAL LETTER EF */
6493 : [4096+0x0D] = 0x10CCD, /* U+10C8D: OLD HUNGARIAN CAPITAL LETTER EG */
6494 : [4096+0x0E] = 0x10CCE, /* U+10C8E: OLD HUNGARIAN CAPITAL LETTER EGY */
6495 : [4096+0x0F] = 0x10CCF, /* U+10C8F: OLD HUNGARIAN CAPITAL LETTER EH */
6496 : [4096+0x10] = 0x10CD0, /* U+10C90: OLD HUNGARIAN CAPITAL LETTER I */
6497 : [4096+0x11] = 0x10CD1, /* U+10C91: OLD HUNGARIAN CAPITAL LETTER II */
6498 : [4096+0x12] = 0x10CD2, /* U+10C92: OLD HUNGARIAN CAPITAL LETTER EJ */
6499 : [4096+0x13] = 0x10CD3, /* U+10C93: OLD HUNGARIAN CAPITAL LETTER EK */
6500 : [4096+0x14] = 0x10CD4, /* U+10C94: OLD HUNGARIAN CAPITAL LETTER AK */
6501 : [4096+0x15] = 0x10CD5, /* U+10C95: OLD HUNGARIAN CAPITAL LETTER UNK */
6502 : [4096+0x16] = 0x10CD6, /* U+10C96: OLD HUNGARIAN CAPITAL LETTER EL */
6503 : [4096+0x17] = 0x10CD7, /* U+10C97: OLD HUNGARIAN CAPITAL LETTER ELY */
6504 : [4096+0x18] = 0x10CD8, /* U+10C98: OLD HUNGARIAN CAPITAL LETTER EM */
6505 : [4096+0x19] = 0x10CD9, /* U+10C99: OLD HUNGARIAN CAPITAL LETTER EN */
6506 : [4096+0x1A] = 0x10CDA, /* U+10C9A: OLD HUNGARIAN CAPITAL LETTER ENY */
6507 : [4096+0x1B] = 0x10CDB, /* U+10C9B: OLD HUNGARIAN CAPITAL LETTER O */
6508 : [4096+0x1C] = 0x10CDC, /* U+10C9C: OLD HUNGARIAN CAPITAL LETTER OO */
6509 : [4096+0x1D] = 0x10CDD, /* U+10C9D: OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG OE */
6510 : [4096+0x1E] = 0x10CDE, /* U+10C9E: OLD HUNGARIAN CAPITAL LETTER RUDIMENTA OE */
6511 : [4096+0x1F] = 0x10CDF, /* U+10C9F: OLD HUNGARIAN CAPITAL LETTER OEE */
6512 : [4096+0x20] = 0x10CE0, /* U+10CA0: OLD HUNGARIAN CAPITAL LETTER EP */
6513 : [4096+0x21] = 0x10CE1, /* U+10CA1: OLD HUNGARIAN CAPITAL LETTER EMP */
6514 : [4096+0x22] = 0x10CE2, /* U+10CA2: OLD HUNGARIAN CAPITAL LETTER ER */
6515 : [4096+0x23] = 0x10CE3, /* U+10CA3: OLD HUNGARIAN CAPITAL LETTER SHORT ER */
6516 : [4096+0x24] = 0x10CE4, /* U+10CA4: OLD HUNGARIAN CAPITAL LETTER ES */
6517 : [4096+0x25] = 0x10CE5, /* U+10CA5: OLD HUNGARIAN CAPITAL LETTER ESZ */
6518 : [4096+0x26] = 0x10CE6, /* U+10CA6: OLD HUNGARIAN CAPITAL LETTER ET */
6519 : [4096+0x27] = 0x10CE7, /* U+10CA7: OLD HUNGARIAN CAPITAL LETTER ENT */
6520 : [4096+0x28] = 0x10CE8, /* U+10CA8: OLD HUNGARIAN CAPITAL LETTER ETY */
6521 : [4096+0x29] = 0x10CE9, /* U+10CA9: OLD HUNGARIAN CAPITAL LETTER ECH */
6522 : [4096+0x2A] = 0x10CEA, /* U+10CAA: OLD HUNGARIAN CAPITAL LETTER U */
6523 : [4096+0x2B] = 0x10CEB, /* U+10CAB: OLD HUNGARIAN CAPITAL LETTER UU */
6524 : [4096+0x2C] = 0x10CEC, /* U+10CAC: OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG UE */
6525 : [4096+0x2D] = 0x10CED, /* U+10CAD: OLD HUNGARIAN CAPITAL LETTER RUDIMENTA UE */
6526 : [4096+0x2E] = 0x10CEE, /* U+10CAE: OLD HUNGARIAN CAPITAL LETTER EV */
6527 : [4096+0x2F] = 0x10CEF, /* U+10CAF: OLD HUNGARIAN CAPITAL LETTER EZ */
6528 : [4096+0x30] = 0x10CF0, /* U+10CB0: OLD HUNGARIAN CAPITAL LETTER EZS */
6529 : [4096+0x31] = 0x10CF1, /* U+10CB1: OLD HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGN */
6530 : [4096+0x32] = 0x10CF2, /* U+10CB2: OLD HUNGARIAN CAPITAL LETTER US */
6531 : [3648+0x11] = 4160 - 0x80, /* 360 221 ... */
6532 : [4160+0x22] = 4224 - 0x80, /* 360 221 242 ... */
6533 : [4224+0x20] = 0x118C0, /* U+118A0: WARANG CITI CAPITAL LETTER NGAA */
6534 : [4224+0x21] = 0x118C1, /* U+118A1: WARANG CITI CAPITAL LETTER A */
6535 : [4224+0x22] = 0x118C2, /* U+118A2: WARANG CITI CAPITAL LETTER WI */
6536 : [4224+0x23] = 0x118C3, /* U+118A3: WARANG CITI CAPITAL LETTER YU */
6537 : [4224+0x24] = 0x118C4, /* U+118A4: WARANG CITI CAPITAL LETTER YA */
6538 : [4224+0x25] = 0x118C5, /* U+118A5: WARANG CITI CAPITAL LETTER YO */
6539 : [4224+0x26] = 0x118C6, /* U+118A6: WARANG CITI CAPITAL LETTER II */
6540 : [4224+0x27] = 0x118C7, /* U+118A7: WARANG CITI CAPITAL LETTER UU */
6541 : [4224+0x28] = 0x118C8, /* U+118A8: WARANG CITI CAPITAL LETTER E */
6542 : [4224+0x29] = 0x118C9, /* U+118A9: WARANG CITI CAPITAL LETTER O */
6543 : [4224+0x2A] = 0x118CA, /* U+118AA: WARANG CITI CAPITAL LETTER ANG */
6544 : [4224+0x2B] = 0x118CB, /* U+118AB: WARANG CITI CAPITAL LETTER GA */
6545 : [4224+0x2C] = 0x118CC, /* U+118AC: WARANG CITI CAPITAL LETTER KO */
6546 : [4224+0x2D] = 0x118CD, /* U+118AD: WARANG CITI CAPITAL LETTER ENY */
6547 : [4224+0x2E] = 0x118CE, /* U+118AE: WARANG CITI CAPITAL LETTER YUJ */
6548 : [4224+0x2F] = 0x118CF, /* U+118AF: WARANG CITI CAPITAL LETTER UC */
6549 : [4224+0x30] = 0x118D0, /* U+118B0: WARANG CITI CAPITAL LETTER ENN */
6550 : [4224+0x31] = 0x118D1, /* U+118B1: WARANG CITI CAPITAL LETTER ODD */
6551 : [4224+0x32] = 0x118D2, /* U+118B2: WARANG CITI CAPITAL LETTER TTE */
6552 : [4224+0x33] = 0x118D3, /* U+118B3: WARANG CITI CAPITAL LETTER NUNG */
6553 : [4224+0x34] = 0x118D4, /* U+118B4: WARANG CITI CAPITAL LETTER DA */
6554 : [4224+0x35] = 0x118D5, /* U+118B5: WARANG CITI CAPITAL LETTER AT */
6555 : [4224+0x36] = 0x118D6, /* U+118B6: WARANG CITI CAPITAL LETTER AM */
6556 : [4224+0x37] = 0x118D7, /* U+118B7: WARANG CITI CAPITAL LETTER BU */
6557 : [4224+0x38] = 0x118D8, /* U+118B8: WARANG CITI CAPITAL LETTER PU */
6558 : [4224+0x39] = 0x118D9, /* U+118B9: WARANG CITI CAPITAL LETTER HIYO */
6559 : [4224+0x3A] = 0x118DA, /* U+118BA: WARANG CITI CAPITAL LETTER HOLO */
6560 : [4224+0x3B] = 0x118DB, /* U+118BB: WARANG CITI CAPITAL LETTER HORR */
6561 : [4224+0x3C] = 0x118DC, /* U+118BC: WARANG CITI CAPITAL LETTER HAR */
6562 : [4224+0x3D] = 0x118DD, /* U+118BD: WARANG CITI CAPITAL LETTER SSUU */
6563 : [4224+0x3E] = 0x118DE, /* U+118BE: WARANG CITI CAPITAL LETTER SII */
6564 : [4224+0x3F] = 0x118DF, /* U+118BF: WARANG CITI CAPITAL LETTER VIYO */
6565 : [3648+0x16] = 4288 - 0x80, /* 360 226 ... */
6566 : [4288+0x39] = 4352 - 0x80, /* 360 226 271 ... */
6567 : [4352+0x00] = 0x16E60, /* U+16E40: MEDEFAIDRIN CAPITAL LETTER M */
6568 : [4352+0x01] = 0x16E61, /* U+16E41: MEDEFAIDRIN CAPITAL LETTER S */
6569 : [4352+0x02] = 0x16E62, /* U+16E42: MEDEFAIDRIN CAPITAL LETTER V */
6570 : [4352+0x03] = 0x16E63, /* U+16E43: MEDEFAIDRIN CAPITAL LETTER W */
6571 : [4352+0x04] = 0x16E64, /* U+16E44: MEDEFAIDRIN CAPITAL LETTER ATIU */
6572 : [4352+0x05] = 0x16E65, /* U+16E45: MEDEFAIDRIN CAPITAL LETTER Z */
6573 : [4352+0x06] = 0x16E66, /* U+16E46: MEDEFAIDRIN CAPITAL LETTER KP */
6574 : [4352+0x07] = 0x16E67, /* U+16E47: MEDEFAIDRIN CAPITAL LETTER P */
6575 : [4352+0x08] = 0x16E68, /* U+16E48: MEDEFAIDRIN CAPITAL LETTER T */
6576 : [4352+0x09] = 0x16E69, /* U+16E49: MEDEFAIDRIN CAPITAL LETTER G */
6577 : [4352+0x0A] = 0x16E6A, /* U+16E4A: MEDEFAIDRIN CAPITAL LETTER F */
6578 : [4352+0x0B] = 0x16E6B, /* U+16E4B: MEDEFAIDRIN CAPITAL LETTER I */
6579 : [4352+0x0C] = 0x16E6C, /* U+16E4C: MEDEFAIDRIN CAPITAL LETTER K */
6580 : [4352+0x0D] = 0x16E6D, /* U+16E4D: MEDEFAIDRIN CAPITAL LETTER A */
6581 : [4352+0x0E] = 0x16E6E, /* U+16E4E: MEDEFAIDRIN CAPITAL LETTER J */
6582 : [4352+0x0F] = 0x16E6F, /* U+16E4F: MEDEFAIDRIN CAPITAL LETTER E */
6583 : [4352+0x10] = 0x16E70, /* U+16E50: MEDEFAIDRIN CAPITAL LETTER B */
6584 : [4352+0x11] = 0x16E71, /* U+16E51: MEDEFAIDRIN CAPITAL LETTER C */
6585 : [4352+0x12] = 0x16E72, /* U+16E52: MEDEFAIDRIN CAPITAL LETTER U */
6586 : [4352+0x13] = 0x16E73, /* U+16E53: MEDEFAIDRIN CAPITAL LETTER YU */
6587 : [4352+0x14] = 0x16E74, /* U+16E54: MEDEFAIDRIN CAPITAL LETTER L */
6588 : [4352+0x15] = 0x16E75, /* U+16E55: MEDEFAIDRIN CAPITAL LETTER Q */
6589 : [4352+0x16] = 0x16E76, /* U+16E56: MEDEFAIDRIN CAPITAL LETTER HP */
6590 : [4352+0x17] = 0x16E77, /* U+16E57: MEDEFAIDRIN CAPITAL LETTER NY */
6591 : [4352+0x18] = 0x16E78, /* U+16E58: MEDEFAIDRIN CAPITAL LETTER X */
6592 : [4352+0x19] = 0x16E79, /* U+16E59: MEDEFAIDRIN CAPITAL LETTER D */
6593 : [4352+0x1A] = 0x16E7A, /* U+16E5A: MEDEFAIDRIN CAPITAL LETTER OE */
6594 : [4352+0x1B] = 0x16E7B, /* U+16E5B: MEDEFAIDRIN CAPITAL LETTER N */
6595 : [4352+0x1C] = 0x16E7C, /* U+16E5C: MEDEFAIDRIN CAPITAL LETTER R */
6596 : [4352+0x1D] = 0x16E7D, /* U+16E5D: MEDEFAIDRIN CAPITAL LETTER O */
6597 : [4352+0x1E] = 0x16E7E, /* U+16E5E: MEDEFAIDRIN CAPITAL LETTER AI */
6598 : [4352+0x1F] = 0x16E7F, /* U+16E5F: MEDEFAIDRIN CAPITAL LETTER Y */
6599 : [3648+0x1E] = 4416 - 0x80, /* 360 236 ... */
6600 : [4416+0x24] = 4480 - 0x80, /* 360 236 244 ... */
6601 : [4480+0x00] = 0x1E922, /* U+1E900: ADLAM CAPITAL LETTER ALIF */
6602 : [4480+0x01] = 0x1E923, /* U+1E901: ADLAM CAPITAL LETTER DAALI */
6603 : [4480+0x02] = 0x1E924, /* U+1E902: ADLAM CAPITAL LETTER LAAM */
6604 : [4480+0x03] = 0x1E925, /* U+1E903: ADLAM CAPITAL LETTER MIIM */
6605 : [4480+0x04] = 0x1E926, /* U+1E904: ADLAM CAPITAL LETTER BA */
6606 : [4480+0x05] = 0x1E927, /* U+1E905: ADLAM CAPITAL LETTER SINNYIIYHE */
6607 : [4480+0x06] = 0x1E928, /* U+1E906: ADLAM CAPITAL LETTER PE */
6608 : [4480+0x07] = 0x1E929, /* U+1E907: ADLAM CAPITAL LETTER BHE */
6609 : [4480+0x08] = 0x1E92A, /* U+1E908: ADLAM CAPITAL LETTER RA */
6610 : [4480+0x09] = 0x1E92B, /* U+1E909: ADLAM CAPITAL LETTER E */
6611 : [4480+0x0A] = 0x1E92C, /* U+1E90A: ADLAM CAPITAL LETTER FA */
6612 : [4480+0x0B] = 0x1E92D, /* U+1E90B: ADLAM CAPITAL LETTER I */
6613 : [4480+0x0C] = 0x1E92E, /* U+1E90C: ADLAM CAPITAL LETTER O */
6614 : [4480+0x0D] = 0x1E92F, /* U+1E90D: ADLAM CAPITAL LETTER DHA */
6615 : [4480+0x0E] = 0x1E930, /* U+1E90E: ADLAM CAPITAL LETTER YHE */
6616 : [4480+0x0F] = 0x1E931, /* U+1E90F: ADLAM CAPITAL LETTER WAW */
6617 : [4480+0x10] = 0x1E932, /* U+1E910: ADLAM CAPITAL LETTER NUN */
6618 : [4480+0x11] = 0x1E933, /* U+1E911: ADLAM CAPITAL LETTER KAF */
6619 : [4480+0x12] = 0x1E934, /* U+1E912: ADLAM CAPITAL LETTER YA */
6620 : [4480+0x13] = 0x1E935, /* U+1E913: ADLAM CAPITAL LETTER U */
6621 : [4480+0x14] = 0x1E936, /* U+1E914: ADLAM CAPITAL LETTER JIIM */
6622 : [4480+0x15] = 0x1E937, /* U+1E915: ADLAM CAPITAL LETTER CHI */
6623 : [4480+0x16] = 0x1E938, /* U+1E916: ADLAM CAPITAL LETTER HA */
6624 : [4480+0x17] = 0x1E939, /* U+1E917: ADLAM CAPITAL LETTER QAAF */
6625 : [4480+0x18] = 0x1E93A, /* U+1E918: ADLAM CAPITAL LETTER GA */
6626 : [4480+0x19] = 0x1E93B, /* U+1E919: ADLAM CAPITAL LETTER NYA */
6627 : [4480+0x1A] = 0x1E93C, /* U+1E91A: ADLAM CAPITAL LETTER TU */
6628 : [4480+0x1B] = 0x1E93D, /* U+1E91B: ADLAM CAPITAL LETTER NHA */
6629 : [4480+0x1C] = 0x1E93E, /* U+1E91C: ADLAM CAPITAL LETTER VA */
6630 : [4480+0x1D] = 0x1E93F, /* U+1E91D: ADLAM CAPITAL LETTER KHA */
6631 : [4480+0x1E] = 0x1E940, /* U+1E91E: ADLAM CAPITAL LETTER GBE */
6632 : [4480+0x1F] = 0x1E941, /* U+1E91F: ADLAM CAPITAL LETTER ZAL */
6633 : [4480+0x20] = 0x1E942, /* U+1E920: ADLAM CAPITAL LETTER KPO */
6634 : [4480+0x21] = 0x1E943, /* U+1E921: ADLAM CAPITAL LETTER SHA */
6635 : };
6636 :
6637 : /* convert the case of a UTF-8 encoded string given in `s' into the
6638 : * buffer of length `*buflen' given in `*buf'; if the buffer is not
6639 : * large enough, it is extended using GDKrealloc; on return (with or
6640 : * without error), the current buffer is in *buf, and the current size
6641 : * in *buflen. */
6642 : static gdk_return
6643 300904 : convertcase(char **restrict buf, size_t *restrict buflen,
6644 : const uint8_t *restrict s, int direction)
6645 : {
6646 300904 : uint8_t *dst = (uint8_t *) *buf;
6647 300904 : size_t dstoff = 0;
6648 300904 : size_t bl;
6649 300904 : const int *restrict convtab;
6650 300904 : switch (direction) {
6651 : case 'U':
6652 : convtab = uppercase;
6653 : break;
6654 99172 : case 'L':
6655 99172 : convtab = lowercase;
6656 99172 : break;
6657 50 : case 'F':
6658 50 : convtab = casefold;
6659 50 : break;
6660 : default:
6661 0 : MT_UNREACHABLE();
6662 : }
6663 :
6664 300904 : bl = strlen((const char *) s);
6665 300904 : if (*buf == NULL) {
6666 144 : if (bl < 4090)
6667 : bl = 4096;
6668 : else
6669 0 : bl += 5;
6670 144 : dst = GDKmalloc(bl);
6671 145 : if (dst == NULL)
6672 : return GDK_FAIL;
6673 145 : *buf = (char *) dst;
6674 300760 : } else if (bl + 5 > *buflen) {
6675 0 : bl += 1024;
6676 0 : dst = GDKrealloc(*buf, bl);
6677 0 : if (dst == NULL)
6678 : return GDK_FAIL;
6679 0 : *buf = (char *) dst;
6680 : } else {
6681 : bl = *buflen;
6682 : }
6683 :
6684 300905 : size_t bl5 = bl - 5; /* time for buffer extension */
6685 300905 : if (*s == 0x80) {
6686 : /* nil */
6687 3091 : assert(s[1] == 0);
6688 3091 : dst[dstoff++] = 0x80;
6689 : } else {
6690 : /* special case for ASCII prefix */
6691 4266130 : while ((int8_t) *s > 0) {
6692 : /* no need to check for buffer size, we made
6693 : * sure there is enough space */
6694 3968316 : dst[dstoff++] = (uint8_t) convtab[*s++];
6695 : }
6696 298071 : while (*s) {
6697 : /* we are at the start of a Unicode codepoint
6698 : * encoded in UTF-8 */
6699 203 : if (dstoff > bl5) {
6700 : /* make sure we have enough space for the
6701 : * largest codepoint, i.e. 4 bytes plus
6702 : * terminating NUL */
6703 0 : size_t newlen = bl + 1024;
6704 0 : dst = GDKrealloc(*buf, newlen);
6705 0 : if (dst == NULL) {
6706 0 : *buflen = bl;
6707 0 : return GDK_FAIL;
6708 : }
6709 0 : *buf = (char *) dst;
6710 0 : bl = newlen;
6711 0 : bl5 = bl - 5;
6712 : }
6713 257 : const uint8_t *u = s;
6714 257 : int v = convtab[*s++];
6715 350 : while (v && (*s & 0xC0) == 0x80) {
6716 93 : v = convtab[v + *s++];
6717 : }
6718 257 : if (v == 0) {
6719 : /* no case conversion */
6720 : /* copy the first part of the current
6721 : * codepoint */
6722 163 : do {
6723 163 : dst[dstoff++] = *u++;
6724 163 : } while (u < s);
6725 : /* copy rest of current codepoint */
6726 136 : while ((*s & 0xC0) == 0x80) {
6727 44 : dst[dstoff++] = *s++;
6728 : }
6729 165 : } else if (v < 0) {
6730 3 : for (const char *u = specialcase[-v]; *u; u++) {
6731 2 : dst[dstoff++] = (uint8_t) *u;
6732 : }
6733 164 : } else if (v <= 0x7F) {
6734 143 : dst[dstoff++] = v;
6735 21 : } else if (v <= 0x7FF) {
6736 21 : dst[dstoff++] = 0xC0 | (v >> 6);
6737 21 : dst[dstoff++] = 0x80 | (v & 0x3F);
6738 0 : } else if (v <= 0xFFFF) {
6739 0 : dst[dstoff++] = 0xE0 | (v >> 12);
6740 0 : dst[dstoff++] = 0x80 | ((v >> 6) & 0x3F);
6741 0 : dst[dstoff++] = 0x80 | (v & 0x3F);
6742 : } else {
6743 0 : dst[dstoff++] = 0xF0 | (v >> 18);
6744 0 : dst[dstoff++] = 0x80 | ((v >> 12) & 0x3F);
6745 0 : dst[dstoff++] = 0x80 | ((v >> 6) & 0x3F);
6746 0 : dst[dstoff++] = 0x80 | (v & 0x3F);
6747 : }
6748 : }
6749 : }
6750 300959 : if (dstoff + 1 > bl) {
6751 0 : size_t newlen = dstoff + 1;
6752 0 : dst = GDKrealloc(*buf, newlen);
6753 0 : if (dst == NULL) {
6754 0 : *buflen = bl;
6755 0 : return GDK_FAIL;
6756 : }
6757 0 : *buf = (char *) dst;
6758 0 : bl = newlen;
6759 : }
6760 300959 : dst[dstoff] = '\0';
6761 300959 : *buflen = bl;
6762 300959 : return GDK_SUCCEED;
6763 : }
6764 :
6765 : /* convert string to uppercase; see comment above for more information */
6766 : gdk_return
6767 101623 : GDKtoupper(char **restrict buf, size_t *restrict buflen, const char *restrict s)
6768 : {
6769 101623 : return convertcase(buf, buflen, (const uint8_t *) s, 'U');
6770 : }
6771 :
6772 : /* convert string to lowercase; see comment above for more information */
6773 : gdk_return
6774 1744 : GDKtolower(char **restrict buf, size_t *restrict buflen, const char *restrict s)
6775 : {
6776 1744 : return convertcase(buf, buflen, (const uint8_t *) s, 'L');
6777 : }
6778 :
6779 : /* case fold string; see comment above for more information */
6780 : gdk_return
6781 0 : GDKcasefold(char **restrict buf, size_t *restrict buflen, const char *restrict s)
6782 : {
6783 0 : return convertcase(buf, buflen, (const uint8_t *) s, 'F');
6784 : }
6785 :
6786 : static BAT *
6787 148 : BATcaseconvert(BAT *b, BAT *s, int direction, const char *restrict func)
6788 : {
6789 148 : lng t0 = 0;
6790 148 : BAT *bn;
6791 148 : struct canditer ci;
6792 148 : BATiter bi;
6793 148 : oid bhseqbase = b->hseqbase;
6794 148 : QryCtx *qry_ctx = MT_thread_get_qry_ctx();
6795 149 : qry_ctx = qry_ctx ? qry_ctx : &(QryCtx) {.endtime = 0};
6796 :
6797 149 : TRC_DEBUG_IF(ALGO) t0 = GDKusec();
6798 149 : BATcheck(b, NULL);
6799 149 : canditer_init(&ci, b, s);
6800 149 : bn = COLnew(ci.hseq, TYPE_str, ci.ncand, TRANSIENT);
6801 149 : if (bn == NULL)
6802 : return NULL;
6803 149 : bi = bat_iterator(b);
6804 148 : char *buf = NULL;
6805 148 : size_t buflen = 0;
6806 197891 : TIMEOUT_LOOP_IDX_DECL(i, ci.ncand, qry_ctx) {
6807 197592 : BUN x = canditer_next(&ci) - bhseqbase;
6808 197585 : if (convertcase(&buf, &buflen, BUNtvar(bi, x),
6809 197593 : direction) != GDK_SUCCEED ||
6810 197571 : tfastins_nocheckVAR(bn, i, buf) != GDK_SUCCEED) {
6811 0 : goto bailout;
6812 : }
6813 : }
6814 149 : GDKfree(buf);
6815 149 : BATsetcount(bn, ci.ncand);
6816 149 : bat_iterator_end(&bi);
6817 149 : TIMEOUT_CHECK(qry_ctx,
6818 : GOTO_LABEL_TIMEOUT_HANDLER(bailout, qry_ctx));
6819 149 : bn->tnil = false;
6820 149 : bn->tnonil = false;
6821 149 : bn->tkey = BATcount(bn) <= 1;
6822 149 : bn->tsorted = BATcount(bn) <= 1;
6823 149 : bn->trevsorted = BATcount(bn) <= 1;
6824 149 : bn->theap->dirty |= BATcount(bn) > 0;
6825 149 : TRC_DEBUG(ALGO, "%s: b=" ALGOBATFMT ",s=" ALGOOPTBATFMT
6826 : " -> " ALGOOPTBATFMT " " LLFMT "usec\n",
6827 : func,
6828 : ALGOBATPAR(b), ALGOOPTBATPAR(s),
6829 : ALGOOPTBATPAR(bn), GDKusec() - t0);
6830 : return bn;
6831 :
6832 0 : bailout:
6833 0 : GDKfree(buf);
6834 0 : bat_iterator_end(&bi);
6835 0 : BBPreclaim(bn);
6836 0 : return NULL;
6837 : }
6838 :
6839 : BAT *
6840 106 : BATtolower(BAT *b, BAT *s)
6841 : {
6842 106 : return BATcaseconvert(b, s, 'L', __func__);
6843 : }
6844 :
6845 : BAT *
6846 19 : BATtoupper(BAT *b, BAT *s)
6847 : {
6848 19 : return BATcaseconvert(b, s, 'U', __func__);
6849 : }
6850 :
6851 : BAT *
6852 22 : BATcasefold(BAT *b, BAT *s)
6853 : {
6854 22 : return BATcaseconvert(b, s, 'F', __func__);
6855 : }
6856 :
6857 : /* Unicode-aware case insensitive string comparison of two UTF-8 encoded
6858 : * string; do not look beyond the lengths in bytes of the two strings;
6859 : * if either one reaches the end of the buffer (as given by the length
6860 : * parameter) before any difference was found, strings compare equal; if
6861 : * either string hits a NUL byte, that indicates the end of the string,
6862 : * so if both strings hit a NUL byte at the same time, the strings also
6863 : * compare equal (and else the shorter string is smaller than the longer
6864 : * one) */
6865 : int
6866 188928183 : GDKstrncasecmp(const char *str1, const char *str2, size_t l1, size_t l2)
6867 : {
6868 188928183 : const uint8_t *s1 = (const uint8_t *) str1;
6869 188928183 : const uint8_t *s2 = (const uint8_t *) str2;
6870 188928183 : const uint8_t *x1 = NULL, *x2 = NULL;
6871 188928183 : int n1, n2;
6872 188928183 : int v1 = 0, v2 = 0;
6873 :
6874 189519328 : for (;;) {
6875 : /* check for the end */
6876 189519328 : if ((x1 == NULL && l1 == 0) || (x2 == NULL && l2 == 0))
6877 : return 0;
6878 189515673 : if (x1 == NULL && *s1 == 0)
6879 5840700 : return -(x2 != NULL || *s2 != 0);
6880 183811273 : if (x2 == NULL && *s2 == 0)
6881 : return 1;
6882 :
6883 : /* get next character from str1 */
6884 131888562 : if (x1 == NULL) {
6885 131802410 : v1 = casefold[*s1++];
6886 131802410 : n1 = 1;
6887 131802410 : l1--;
6888 131802794 : while (v1 && l1 > 0 && (*s1 & 0xC0) == 0x80) {
6889 384 : assert(n1 < 4);
6890 384 : v1 = casefold[v1 + *s1++];
6891 384 : n1++;
6892 384 : l1--;
6893 : }
6894 131802410 : if (v1 == 0) {
6895 335 : while (l1 > 0 && (*s1 & 0xC0) == 0x80) {
6896 31 : assert(n1 < 4);
6897 31 : n1++;
6898 31 : s1++;
6899 31 : l1--;
6900 : }
6901 131802106 : } else if (v1 < 0) {
6902 0 : x1 = (const uint8_t *) specialcase[-v1];
6903 0 : v1 = 0;
6904 : }
6905 : }
6906 131888562 : if (x1 != NULL) {
6907 : n1 = 1;
6908 0 : while ((*++x1 & 0xC0) == 0x80)
6909 0 : n1++;
6910 : }
6911 :
6912 : /* get next character from str2 */
6913 131888562 : if (x2 == NULL) {
6914 131822031 : v2 = casefold[*s2++];
6915 131822031 : n2 = 1;
6916 131822031 : l2--;
6917 131822519 : while (v2 && l2 > 0 && (*s2 & 0xC0) == 0x80) {
6918 488 : assert(n2 < 4);
6919 488 : v2 = casefold[v2 + *s2++];
6920 488 : n2++;
6921 488 : l2--;
6922 : }
6923 131822031 : if (v2 == 0) {
6924 190 : while (l2 > 0 && (*s2 & 0xC0) == 0x80) {
6925 38 : assert(n2 < 4);
6926 38 : n2++;
6927 38 : s2++;
6928 38 : l2--;
6929 : }
6930 131821879 : } else if (v2 < 0) {
6931 0 : x2 = (const uint8_t *) specialcase[-v2];
6932 0 : v2 = 0;
6933 : }
6934 : }
6935 131888562 : if (x2 != NULL) {
6936 : n2 = 1;
6937 0 : while ((*++x2 & 0xC0) == 0x80)
6938 0 : n2++;
6939 : }
6940 :
6941 : /* At this point, there are three possibilities:
6942 : * x1 != NULL && v1 == 0:
6943 : * x1 points to the byte behind a UTF-8 sequence of
6944 : * length n1 that is to be compared (so x1-n1 is the
6945 : * start);
6946 : * x1 == NULL && v1 == 0:
6947 : * s1 points to the byte behind a UTF-8 sequence of
6948 : * length n1 that is to be compared (so s1-n1 is the
6949 : * start);
6950 : * x1 == NULL && v1 != 0:
6951 : * v1 is the codepoint value that is to be compared.
6952 : * Note that x1 != NULL && v1 != 0 cannot happen.
6953 : * In all cases, s1 points to the start of the next
6954 : * UTF-8 sequence, and l1 is the number of bytes left
6955 : * that are to be compared (can be zero).
6956 : *
6957 : * The same goes for s2/x2/v2/n2/l2. */
6958 :
6959 : /* compare */
6960 131888562 : if (v1 == 0) {
6961 312 : if (v2 == 0) {
6962 : /* neither converted */
6963 76 : if (n1 == n2) {
6964 : /* at least the same length, so simple strncmp */
6965 152 : n1 = strncmp((const char *) (x1?x1:s1) - n1, (const char *) (x2?x2:s2) - n2, n1);
6966 76 : if (n1 != 0)
6967 5 : return n1;
6968 : /* still equal */
6969 : } else {
6970 : /* length is leading: shorter
6971 : * sequences come before longer
6972 : * ones */
6973 0 : return n1 - n2;
6974 : }
6975 : } else {
6976 236 : switch (n1) {
6977 0 : case 1:
6978 0 : if (v2 >= 0x80)
6979 : return -1;
6980 0 : if (x1) {
6981 0 : if (x1[-1] != v2)
6982 0 : return (x1[-1] > v2) - (x1[-1] < v2);
6983 : } else {
6984 0 : if (s1[-1] != v2)
6985 0 : return (s1[-1] > v2) - (s1[-1] < v2);
6986 : }
6987 : break;
6988 234 : case 2:
6989 234 : if (v2 < 0x80)
6990 : return 1;
6991 36 : else if (v2 >= 0x800)
6992 : return -1;
6993 36 : if (x1)
6994 0 : v1 = ((x1[-2] & 0x1F) << 6) | (x1[-1] & 0x3F);
6995 : else
6996 36 : v1 = ((s1[-2] & 0x1F) << 6) | (s1[-1] & 0x3F);
6997 36 : if (v1 != v2)
6998 34 : return (v1 > v2) - (v1 < v2);
6999 : break;
7000 2 : case 3:
7001 2 : if (v2 < 0x800)
7002 : return 1;
7003 1 : else if (v2 >= 0x10000)
7004 : return -1;
7005 1 : if (x1)
7006 0 : v1 = ((x1[-3] & 0x0F) << 12) | ((x1[-2] & 0x3F) << 6) | (x1[-1] & 0x3F);
7007 : else
7008 1 : v1 = ((s1[-3] & 0x0F) << 12) | ((s1[-2] & 0x3F) << 6) | (s1[-1] & 0x3F);
7009 1 : if (v1 != v2)
7010 0 : return (v1 > v2) - (v1 < v2);
7011 : break;
7012 0 : case 4:
7013 0 : if (v2 < 0x10000)
7014 : return 1;
7015 0 : if (x1)
7016 0 : v1 = ((x1[-4] & 0x07) << 18) | ((x1[-3] & 0x3F) << 12) | ((x1[-2] & 0x3F) << 6) | (x1[-1] & 0x3F);
7017 : else
7018 0 : v1 = ((s1[-4] & 0x07) << 18) | ((s1[-3] & 0x3F) << 12) | ((s1[-2] & 0x3F) << 6) | (s1[-1] & 0x3F);
7019 0 : if (v1 != v2)
7020 0 : return (v1 > v2) - (v1 < v2);
7021 : break;
7022 : default:
7023 0 : MT_UNREACHABLE();
7024 : }
7025 : }
7026 131888250 : } else if (v2 == 0) {
7027 76 : switch (n2) {
7028 0 : case 1:
7029 0 : if (v1 >= 0x80)
7030 : return 1;
7031 0 : if (x2) {
7032 0 : if (x2[-1] != v1)
7033 0 : return (v1 > x2[-1]) - (v1 < x2[-1]);
7034 : } else {
7035 0 : if (s2[-1] != v1)
7036 0 : return (v1 > s2[-1]) - (v1 < s2[-1]);
7037 : }
7038 : break;
7039 71 : case 2:
7040 71 : if (v1 < 0x80)
7041 : return -1;
7042 20 : else if (v1 >= 0x800)
7043 : return 1;
7044 20 : if (x2)
7045 0 : v2 = ((x2[-2] & 0x1F) << 6) | (x2[-1] & 0x3F);
7046 : else
7047 20 : v2 = ((s2[-2] & 0x1F) << 6) | (s2[-1] & 0x3F);
7048 20 : if (v1 != v2)
7049 4 : return (v1 > v2) - (v1 < v2);
7050 : break;
7051 5 : case 3:
7052 5 : if (v1 < 0x800)
7053 : return -1;
7054 1 : else if (v1 >= 0x10000)
7055 : return 1;
7056 1 : if (x2)
7057 0 : v2 = ((x2[-3] & 0x0F) << 12) | ((x2[-2] & 0x3F) << 6) | (x2[-1] & 0x3F);
7058 : else
7059 1 : v2 = ((s2[-3] & 0x0F) << 12) | ((s2[-2] & 0x3F) << 6) | (s2[-1] & 0x3F);
7060 1 : if (v1 != v2)
7061 0 : return (v1 > v2) - (v1 < v2);
7062 : break;
7063 0 : case 4:
7064 0 : if (v1 < 0x10000)
7065 : return -1;
7066 0 : if (x2)
7067 0 : v2 = ((x2[-4] & 0x07) << 18) | ((x2[-3] & 0x3F) << 12) | ((x2[-2] & 0x3F) << 6) | (x2[-1] & 0x3F);
7068 : else
7069 0 : v2 = ((s2[-4] & 0x07) << 18) | ((s2[-3] & 0x3F) << 12) | ((s2[-2] & 0x3F) << 6) | (s2[-1] & 0x3F);
7070 0 : if (v1 != v2)
7071 0 : return (v1 > v2) - (v1 < v2);
7072 : break;
7073 : default:
7074 0 : MT_UNREACHABLE();
7075 : }
7076 : } else {
7077 131888174 : if (v1 != v2) {
7078 : /* both converted and they're not equal */
7079 131297120 : return (v1 > v2) - (v1 < v2);
7080 : }
7081 : }
7082 591145 : if (x1 != NULL && *x1 == 0)
7083 682481 : x1 = NULL;
7084 591145 : if (x2 != NULL && *x2 == 0)
7085 684341 : x2 = NULL;
7086 : }
7087 : }
7088 :
7089 : int
7090 182451361 : GDKstrcasecmp(const char *s1, const char *s2)
7091 : {
7092 182451361 : return GDKstrncasecmp(s1, s2, SIZE_MAX, SIZE_MAX);
7093 : }
7094 :
7095 : char *
7096 12121 : GDKstrcasestr(const char *haystack, const char *needle)
7097 : {
7098 12121 : size_t nlen = strlen(needle);
7099 12121 : if (nlen == 0)
7100 : return (char *) haystack;
7101 414939 : while (*haystack) {
7102 810994 : if ((*haystack & 0xC0) != 0x80 &&
7103 404570 : GDKstrncasecmp(haystack, needle, SIZE_MAX, nlen) == 0)
7104 3606 : return (char *) haystack;
7105 402818 : haystack++;
7106 : }
7107 : return NULL;
7108 : }
7109 :
7110 : /* The asciify table uses the same technique as the case conversion
7111 : * tables, except that the value that is calculated is not a codepoint.
7112 : * Instead it is the index into the valtab table which contains the
7113 : * string that is to be used to replace the asciified character.
7114 : * This combination of tables is derived from the command
7115 : * ``iconv -futf-8 -tASCII//TRANSLIT`` */
7116 : static const char *const valtab[] = {
7117 : NULL,
7118 : [1] = " ",
7119 : [2] = "!",
7120 : [3] = "c",
7121 : [4] = "GBP",
7122 : [5] = "JPY",
7123 : [6] = "|",
7124 : [7] = "(C)",
7125 : [8] = "a",
7126 : [9] = "<<",
7127 : [10] = "-",
7128 : [11] = "(R)",
7129 : [12] = "+-",
7130 : [13] = "2",
7131 : [14] = "3",
7132 : [15] = "'",
7133 : [16] = "u",
7134 : [17] = ".",
7135 : [18] = ",",
7136 : [19] = "1",
7137 : [20] = "o",
7138 : [21] = ">>",
7139 : [22] = " 1/4 ",
7140 : [23] = " 1/2 ",
7141 : [24] = " 3/4 ",
7142 : [25] = "A",
7143 : [26] = "AE",
7144 : [27] = "C",
7145 : [28] = "E",
7146 : [29] = "I",
7147 : [30] = "D",
7148 : [31] = "N",
7149 : [32] = "O",
7150 : [33] = "x",
7151 : [34] = "U",
7152 : [35] = "Y",
7153 : [36] = "TH",
7154 : [37] = "ss",
7155 : [38] = "ae",
7156 : [39] = "e",
7157 : [40] = "i",
7158 : [41] = "d",
7159 : [42] = "n",
7160 : [43] = "/",
7161 : [44] = "y",
7162 : [45] = "th",
7163 : [46] = "G",
7164 : [47] = "g",
7165 : [48] = "H",
7166 : [49] = "h",
7167 : [50] = "IJ",
7168 : [51] = "ij",
7169 : [52] = "J",
7170 : [53] = "j",
7171 : [54] = "K",
7172 : [55] = "k",
7173 : [56] = "q",
7174 : [57] = "L",
7175 : [58] = "l",
7176 : [59] = "'n",
7177 : [60] = "OE",
7178 : [61] = "oe",
7179 : [62] = "R",
7180 : [63] = "r",
7181 : [64] = "S",
7182 : [65] = "s",
7183 : [66] = "T",
7184 : [67] = "t",
7185 : [68] = "W",
7186 : [69] = "w",
7187 : [70] = "Z",
7188 : [71] = "z",
7189 : [72] = "b",
7190 : [73] = "B",
7191 : [74] = "F",
7192 : [75] = "f",
7193 : [76] = "hv",
7194 : [77] = "OI",
7195 : [78] = "oi",
7196 : [79] = "P",
7197 : [80] = "p",
7198 : [81] = "V",
7199 : [82] = "LJ",
7200 : [83] = "Lj",
7201 : [84] = "lj",
7202 : [85] = "NJ",
7203 : [86] = "Nj",
7204 : [87] = "nj",
7205 : [88] = "DZ",
7206 : [89] = "Dz",
7207 : [90] = "dz",
7208 : [91] = "db",
7209 : [92] = "qp",
7210 : [93] = "m",
7211 : [94] = "v",
7212 : [95] = "ts",
7213 : [96] = "ls",
7214 : [97] = "lz",
7215 : [98] = "^",
7216 : [99] = "`",
7217 : [100] = "_",
7218 : [101] = ":",
7219 : [102] = "~",
7220 : [103] = "''",
7221 : [104] = "",
7222 : [105] = "M",
7223 : [106] = "ue",
7224 : [107] = "X",
7225 : [108] = "SS",
7226 : [109] = "LL",
7227 : [110] = "ll",
7228 : [111] = "--",
7229 : [112] = "\"",
7230 : [113] = ",,",
7231 : [114] = "+",
7232 : [115] = "..",
7233 : [116] = "...",
7234 : [117] = "``",
7235 : [118] = "```",
7236 : [119] = "<",
7237 : [120] = ">",
7238 : [121] = "!!",
7239 : [122] = "??",
7240 : [123] = "?!",
7241 : [124] = "!?",
7242 : [125] = "&",
7243 : [126] = "0",
7244 : [127] = "4",
7245 : [128] = "5",
7246 : [129] = "6",
7247 : [130] = "7",
7248 : [131] = "8",
7249 : [132] = "9",
7250 : [133] = "=",
7251 : [134] = "(",
7252 : [135] = ")",
7253 : [136] = "CE",
7254 : [137] = "C=",
7255 : [138] = "Cr",
7256 : [139] = "Fr.",
7257 : [140] = "L.",
7258 : [141] = "Pts",
7259 : [142] = "Rs",
7260 : [143] = "KRW",
7261 : [144] = "ILS",
7262 : [145] = "Dong",
7263 : [146] = "EUR",
7264 : [147] = "GRD",
7265 : [148] = "PHP",
7266 : [149] = "UAH",
7267 : [150] = "KZT",
7268 : [151] = "INR",
7269 : [152] = "TL",
7270 : [153] = "RUB",
7271 : [154] = "GEL",
7272 : [155] = "a/c",
7273 : [156] = "a/s",
7274 : [157] = "c/o",
7275 : [158] = "c/u",
7276 : [159] = "No",
7277 : [160] = "Q",
7278 : [161] = "Rx",
7279 : [162] = "SM",
7280 : [163] = "TEL",
7281 : [164] = "(TM)",
7282 : [165] = "FAX",
7283 : [166] = " 1/7 ",
7284 : [167] = " 1/9 ",
7285 : [168] = " 1/10 ",
7286 : [169] = " 1/3 ",
7287 : [170] = " 2/3 ",
7288 : [171] = " 1/5 ",
7289 : [172] = " 2/5 ",
7290 : [173] = " 3/5 ",
7291 : [174] = " 4/5 ",
7292 : [175] = " 1/6 ",
7293 : [176] = " 5/6 ",
7294 : [177] = " 1/8 ",
7295 : [178] = " 3/8 ",
7296 : [179] = " 5/8 ",
7297 : [180] = " 7/8 ",
7298 : [181] = " 1/ ",
7299 : [182] = "II",
7300 : [183] = "III",
7301 : [184] = "IV",
7302 : [185] = "VI",
7303 : [186] = "VII",
7304 : [187] = "VIII",
7305 : [188] = "IX",
7306 : [189] = "XI",
7307 : [190] = "XII",
7308 : [191] = "ii",
7309 : [192] = "iii",
7310 : [193] = "iv",
7311 : [194] = "vi",
7312 : [195] = "vii",
7313 : [196] = "viii",
7314 : [197] = "ix",
7315 : [198] = "xi",
7316 : [199] = "xii",
7317 : [200] = " 0/3 ",
7318 : [201] = "<-",
7319 : [202] = "->",
7320 : [203] = "<->",
7321 : [204] = "!<->",
7322 : [205] = "!<=",
7323 : [206] = "!<=>",
7324 : [207] = "!=>",
7325 : [208] = "<=",
7326 : [209] = "=>",
7327 : [210] = "<=>",
7328 : [211] = "\\",
7329 : [212] = "*",
7330 : [213] = "||",
7331 : [214] = "!~",
7332 : [215] = "!~-",
7333 : [216] = "!~=",
7334 : [217] = "!~~",
7335 : [218] = "!=",
7336 : [219] = "!==",
7337 : [220] = ">=",
7338 : [221] = "!<",
7339 : [222] = "!>",
7340 : [223] = "!>=",
7341 : [224] = "!<~",
7342 : [225] = "!>~",
7343 : [226] = "!<>",
7344 : [227] = "!><",
7345 : [228] = "<<<",
7346 : [229] = ">>>",
7347 : [230] = "NUL",
7348 : [231] = "SOH",
7349 : [232] = "STX",
7350 : [233] = "ETX",
7351 : [234] = "EOT",
7352 : [235] = "ENQ",
7353 : [236] = "ACK",
7354 : [237] = "BEL",
7355 : [238] = "BS",
7356 : [239] = "HT",
7357 : [240] = "LF",
7358 : [241] = "VT",
7359 : [242] = "FF",
7360 : [243] = "CR",
7361 : [244] = "SO",
7362 : [245] = "SI",
7363 : [246] = "DLE",
7364 : [247] = "DC1",
7365 : [248] = "DC2",
7366 : [249] = "DC3",
7367 : [250] = "DC4",
7368 : [251] = "NAK",
7369 : [252] = "SYN",
7370 : [253] = "ETB",
7371 : [254] = "CAN",
7372 : [255] = "EM",
7373 : [256] = "SUB",
7374 : [257] = "ESC",
7375 : [258] = "FS",
7376 : [259] = "GS",
7377 : [260] = "RS",
7378 : [261] = "US",
7379 : [262] = "SP",
7380 : [263] = "DEL",
7381 : [264] = "NL",
7382 : [265] = "(1)",
7383 : [266] = "(2)",
7384 : [267] = "(3)",
7385 : [268] = "(4)",
7386 : [269] = "(5)",
7387 : [270] = "(6)",
7388 : [271] = "(7)",
7389 : [272] = "(8)",
7390 : [273] = "(9)",
7391 : [274] = "(10)",
7392 : [275] = "(11)",
7393 : [276] = "(12)",
7394 : [277] = "(13)",
7395 : [278] = "(14)",
7396 : [279] = "(15)",
7397 : [280] = "(16)",
7398 : [281] = "(17)",
7399 : [282] = "(18)",
7400 : [283] = "(19)",
7401 : [284] = "(20)",
7402 : [285] = "1.",
7403 : [286] = "2.",
7404 : [287] = "3.",
7405 : [288] = "4.",
7406 : [289] = "5.",
7407 : [290] = "6.",
7408 : [291] = "7.",
7409 : [292] = "8.",
7410 : [293] = "9.",
7411 : [294] = "10.",
7412 : [295] = "11.",
7413 : [296] = "12.",
7414 : [297] = "13.",
7415 : [298] = "14.",
7416 : [299] = "15.",
7417 : [300] = "16.",
7418 : [301] = "17.",
7419 : [302] = "18.",
7420 : [303] = "19.",
7421 : [304] = "20.",
7422 : [305] = "(a)",
7423 : [306] = "(b)",
7424 : [307] = "(c)",
7425 : [308] = "(d)",
7426 : [309] = "(e)",
7427 : [310] = "(f)",
7428 : [311] = "(g)",
7429 : [312] = "(h)",
7430 : [313] = "(i)",
7431 : [314] = "(j)",
7432 : [315] = "(k)",
7433 : [316] = "(l)",
7434 : [317] = "(m)",
7435 : [318] = "(n)",
7436 : [319] = "(o)",
7437 : [320] = "(p)",
7438 : [321] = "(q)",
7439 : [322] = "(r)",
7440 : [323] = "(s)",
7441 : [324] = "(t)",
7442 : [325] = "(u)",
7443 : [326] = "(v)",
7444 : [327] = "(w)",
7445 : [328] = "(x)",
7446 : [329] = "(y)",
7447 : [330] = "(z)",
7448 : [331] = "(A)",
7449 : [332] = "(B)",
7450 : [333] = "(D)",
7451 : [334] = "(E)",
7452 : [335] = "(F)",
7453 : [336] = "(G)",
7454 : [337] = "(H)",
7455 : [338] = "(I)",
7456 : [339] = "(J)",
7457 : [340] = "(K)",
7458 : [341] = "(L)",
7459 : [342] = "(M)",
7460 : [343] = "(N)",
7461 : [344] = "(O)",
7462 : [345] = "(P)",
7463 : [346] = "(Q)",
7464 : [347] = "(S)",
7465 : [348] = "(T)",
7466 : [349] = "(U)",
7467 : [350] = "(V)",
7468 : [351] = "(W)",
7469 : [352] = "(X)",
7470 : [353] = "(Y)",
7471 : [354] = "(Z)",
7472 : [355] = "(0)",
7473 : [356] = ":)",
7474 : [357] = "<3",
7475 : [358] = "[|",
7476 : [359] = "|]",
7477 : [360] = "((",
7478 : [361] = "))",
7479 : [362] = "|||",
7480 : [363] = "{|",
7481 : [364] = "|}",
7482 : [365] = "(|",
7483 : [366] = "|)",
7484 : [367] = "<|",
7485 : [368] = "|>",
7486 : [369] = "#",
7487 : [370] = "::=",
7488 : [371] = "==",
7489 : [372] = "===",
7490 : [373] = "PTE",
7491 : [374] = "(21)",
7492 : [375] = "(22)",
7493 : [376] = "(23)",
7494 : [377] = "(24)",
7495 : [378] = "(25)",
7496 : [379] = "(26)",
7497 : [380] = "(27)",
7498 : [381] = "(28)",
7499 : [382] = "(29)",
7500 : [383] = "(30)",
7501 : [384] = "(31)",
7502 : [385] = "(32)",
7503 : [386] = "(33)",
7504 : [387] = "(34)",
7505 : [388] = "(35)",
7506 : [389] = "(36)",
7507 : [390] = "(37)",
7508 : [391] = "(38)",
7509 : [392] = "(39)",
7510 : [393] = "(40)",
7511 : [394] = "(41)",
7512 : [395] = "(42)",
7513 : [396] = "(43)",
7514 : [397] = "(44)",
7515 : [398] = "(45)",
7516 : [399] = "(46)",
7517 : [400] = "(47)",
7518 : [401] = "(48)",
7519 : [402] = "(49)",
7520 : [403] = "(50)",
7521 : [404] = "Hg",
7522 : [405] = "erg",
7523 : [406] = "eV",
7524 : [407] = "LTD",
7525 : [408] = "hPa",
7526 : [409] = "da",
7527 : [410] = "AU",
7528 : [411] = "bar",
7529 : [412] = "oV",
7530 : [413] = "pc",
7531 : [414] = "dm",
7532 : [415] = "dm^2",
7533 : [416] = "dm^3",
7534 : [417] = "IU",
7535 : [418] = "pA",
7536 : [419] = "nA",
7537 : [420] = "uA",
7538 : [421] = "mA",
7539 : [422] = "kA",
7540 : [423] = "KB",
7541 : [424] = "MB",
7542 : [425] = "GB",
7543 : [426] = "cal",
7544 : [427] = "kcal",
7545 : [428] = "pF",
7546 : [429] = "nF",
7547 : [430] = "uF",
7548 : [431] = "ug",
7549 : [432] = "mg",
7550 : [433] = "kg",
7551 : [434] = "Hz",
7552 : [435] = "kHz",
7553 : [436] = "MHz",
7554 : [437] = "GHz",
7555 : [438] = "THz",
7556 : [439] = "ul",
7557 : [440] = "ml",
7558 : [441] = "dl",
7559 : [442] = "kl",
7560 : [443] = "fm",
7561 : [444] = "nm",
7562 : [445] = "um",
7563 : [446] = "mm",
7564 : [447] = "cm",
7565 : [448] = "km",
7566 : [449] = "mm^2",
7567 : [450] = "cm^2",
7568 : [451] = "m^2",
7569 : [452] = "km^2",
7570 : [453] = "mm^3",
7571 : [454] = "cm^3",
7572 : [455] = "m^3",
7573 : [456] = "km^3",
7574 : [457] = "m/s",
7575 : [458] = "m/s^2",
7576 : [459] = "Pa",
7577 : [460] = "kPa",
7578 : [461] = "MPa",
7579 : [462] = "GPa",
7580 : [463] = "rad",
7581 : [464] = "rad/s",
7582 : [465] = "rad/s^2",
7583 : [466] = "ps",
7584 : [467] = "ns",
7585 : [468] = "us",
7586 : [469] = "ms",
7587 : [470] = "pV",
7588 : [471] = "nV",
7589 : [472] = "uV",
7590 : [473] = "mV",
7591 : [474] = "kV",
7592 : [475] = "MV",
7593 : [476] = "pW",
7594 : [477] = "nW",
7595 : [478] = "uW",
7596 : [479] = "mW",
7597 : [480] = "kW",
7598 : [481] = "MW",
7599 : [482] = "a.m.",
7600 : [483] = "Bq",
7601 : [484] = "cc",
7602 : [485] = "cd",
7603 : [486] = "C/kg",
7604 : [487] = "Co.",
7605 : [488] = "dB",
7606 : [489] = "Gy",
7607 : [490] = "ha",
7608 : [491] = "HP",
7609 : [492] = "in",
7610 : [493] = "KK",
7611 : [494] = "KM",
7612 : [495] = "kt",
7613 : [496] = "lm",
7614 : [497] = "ln",
7615 : [498] = "log",
7616 : [499] = "lx",
7617 : [500] = "mb",
7618 : [501] = "mil",
7619 : [502] = "mol",
7620 : [503] = "PH",
7621 : [504] = "p.m.",
7622 : [505] = "PPM",
7623 : [506] = "PR",
7624 : [507] = "sr",
7625 : [508] = "Sv",
7626 : [509] = "Wb",
7627 : [510] = "V/m",
7628 : [511] = "A/m",
7629 : [512] = "gal",
7630 : [513] = "ff",
7631 : [514] = "fi",
7632 : [515] = "fl",
7633 : [516] = "ffi",
7634 : [517] = "ffl",
7635 : [518] = "st",
7636 : [519] = ";",
7637 : [520] = "{",
7638 : [521] = "}",
7639 : [522] = "[",
7640 : [523] = "]",
7641 : [524] = "$",
7642 : [525] = "%",
7643 : [526] = "@",
7644 : };
7645 : static const int16_t asciify[4544] = {
7646 : [0xC2] = 256 - 0x80, /* 302 ... */
7647 : [256+0x20] = 1, /* U+00A0: NO-BREAK SPACE */
7648 : [256+0x21] = 2, /* U+00A1: INVERTED EXCLAMATION MARK */
7649 : [256+0x22] = 3, /* U+00A2: CENT SIGN */
7650 : [256+0x23] = 4, /* U+00A3: POUND SIGN */
7651 : [256+0x25] = 5, /* U+00A5: YEN SIGN */
7652 : [256+0x26] = 6, /* U+00A6: BROKEN BAR */
7653 : [256+0x29] = 7, /* U+00A9: COPYRIGHT SIGN */
7654 : [256+0x2A] = 8, /* U+00AA: FEMININE ORDINAL INDICATOR */
7655 : [256+0x2B] = 9, /* U+00AB: LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */
7656 : [256+0x2C] = 2, /* U+00AC: NOT SIGN */
7657 : [256+0x2D] = 10, /* U+00AD: SOFT HYPHEN */
7658 : [256+0x2E] = 11, /* U+00AE: REGISTERED SIGN */
7659 : [256+0x31] = 12, /* U+00B1: PLUS-MINUS SIGN */
7660 : [256+0x32] = 13, /* U+00B2: SUPERSCRIPT TWO */
7661 : [256+0x33] = 14, /* U+00B3: SUPERSCRIPT THREE */
7662 : [256+0x34] = 15, /* U+00B4: ACUTE ACCENT */
7663 : [256+0x35] = 16, /* U+00B5: MICRO SIGN */
7664 : [256+0x37] = 17, /* U+00B7: MIDDLE DOT */
7665 : [256+0x38] = 18, /* U+00B8: CEDILLA */
7666 : [256+0x39] = 19, /* U+00B9: SUPERSCRIPT ONE */
7667 : [256+0x3A] = 20, /* U+00BA: MASCULINE ORDINAL INDICATOR */
7668 : [256+0x3B] = 21, /* U+00BB: RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */
7669 : [256+0x3C] = 22, /* U+00BC: VULGAR FRACTION ONE QUARTER */
7670 : [256+0x3D] = 23, /* U+00BD: VULGAR FRACTION ONE HALF */
7671 : [256+0x3E] = 24, /* U+00BE: VULGAR FRACTION THREE QUARTERS */
7672 : [0xC3] = 320 - 0x80, /* 303 ... */
7673 : [320+0x00] = 25, /* U+00C0: LATIN CAPITAL LETTER A WITH GRAVE */
7674 : [320+0x01] = 25, /* U+00C1: LATIN CAPITAL LETTER A WITH ACUTE */
7675 : [320+0x02] = 25, /* U+00C2: LATIN CAPITAL LETTER A WITH CIRCUMFLEX */
7676 : [320+0x03] = 25, /* U+00C3: LATIN CAPITAL LETTER A WITH TILDE */
7677 : [320+0x04] = 25, /* U+00C4: LATIN CAPITAL LETTER A WITH DIAERESIS */
7678 : [320+0x05] = 25, /* U+00C5: LATIN CAPITAL LETTER A WITH RING ABOVE */
7679 : [320+0x06] = 26, /* U+00C6: LATIN CAPITAL LETTER AE */
7680 : [320+0x07] = 27, /* U+00C7: LATIN CAPITAL LETTER C WITH CEDILLA */
7681 : [320+0x08] = 28, /* U+00C8: LATIN CAPITAL LETTER E WITH GRAVE */
7682 : [320+0x09] = 28, /* U+00C9: LATIN CAPITAL LETTER E WITH ACUTE */
7683 : [320+0x0A] = 28, /* U+00CA: LATIN CAPITAL LETTER E WITH CIRCUMFLEX */
7684 : [320+0x0B] = 28, /* U+00CB: LATIN CAPITAL LETTER E WITH DIAERESIS */
7685 : [320+0x0C] = 29, /* U+00CC: LATIN CAPITAL LETTER I WITH GRAVE */
7686 : [320+0x0D] = 29, /* U+00CD: LATIN CAPITAL LETTER I WITH ACUTE */
7687 : [320+0x0E] = 29, /* U+00CE: LATIN CAPITAL LETTER I WITH CIRCUMFLEX */
7688 : [320+0x0F] = 29, /* U+00CF: LATIN CAPITAL LETTER I WITH DIAERESIS */
7689 : [320+0x10] = 30, /* U+00D0: LATIN CAPITAL LETTER ETH */
7690 : [320+0x11] = 31, /* U+00D1: LATIN CAPITAL LETTER N WITH TILDE */
7691 : [320+0x12] = 32, /* U+00D2: LATIN CAPITAL LETTER O WITH GRAVE */
7692 : [320+0x13] = 32, /* U+00D3: LATIN CAPITAL LETTER O WITH ACUTE */
7693 : [320+0x14] = 32, /* U+00D4: LATIN CAPITAL LETTER O WITH CIRCUMFLEX */
7694 : [320+0x15] = 32, /* U+00D5: LATIN CAPITAL LETTER O WITH TILDE */
7695 : [320+0x16] = 32, /* U+00D6: LATIN CAPITAL LETTER O WITH DIAERESIS */
7696 : [320+0x17] = 33, /* U+00D7: MULTIPLICATION SIGN */
7697 : [320+0x18] = 32, /* U+00D8: LATIN CAPITAL LETTER O WITH STROKE */
7698 : [320+0x19] = 34, /* U+00D9: LATIN CAPITAL LETTER U WITH GRAVE */
7699 : [320+0x1A] = 34, /* U+00DA: LATIN CAPITAL LETTER U WITH ACUTE */
7700 : [320+0x1B] = 34, /* U+00DB: LATIN CAPITAL LETTER U WITH CIRCUMFLEX */
7701 : [320+0x1C] = 34, /* U+00DC: LATIN CAPITAL LETTER U WITH DIAERESIS */
7702 : [320+0x1D] = 35, /* U+00DD: LATIN CAPITAL LETTER Y WITH ACUTE */
7703 : [320+0x1E] = 36, /* U+00DE: LATIN CAPITAL LETTER THORN */
7704 : [320+0x1F] = 37, /* U+00DF: LATIN SMALL LETTER SHARP S */
7705 : [320+0x20] = 8, /* U+00E0: LATIN SMALL LETTER A WITH GRAVE */
7706 : [320+0x21] = 8, /* U+00E1: LATIN SMALL LETTER A WITH ACUTE */
7707 : [320+0x22] = 8, /* U+00E2: LATIN SMALL LETTER A WITH CIRCUMFLEX */
7708 : [320+0x23] = 8, /* U+00E3: LATIN SMALL LETTER A WITH TILDE */
7709 : [320+0x24] = 8, /* U+00E4: LATIN SMALL LETTER A WITH DIAERESIS */
7710 : [320+0x25] = 8, /* U+00E5: LATIN SMALL LETTER A WITH RING ABOVE */
7711 : [320+0x26] = 38, /* U+00E6: LATIN SMALL LETTER AE */
7712 : [320+0x27] = 3, /* U+00E7: LATIN SMALL LETTER C WITH CEDILLA */
7713 : [320+0x28] = 39, /* U+00E8: LATIN SMALL LETTER E WITH GRAVE */
7714 : [320+0x29] = 39, /* U+00E9: LATIN SMALL LETTER E WITH ACUTE */
7715 : [320+0x2A] = 39, /* U+00EA: LATIN SMALL LETTER E WITH CIRCUMFLEX */
7716 : [320+0x2B] = 39, /* U+00EB: LATIN SMALL LETTER E WITH DIAERESIS */
7717 : [320+0x2C] = 40, /* U+00EC: LATIN SMALL LETTER I WITH GRAVE */
7718 : [320+0x2D] = 40, /* U+00ED: LATIN SMALL LETTER I WITH ACUTE */
7719 : [320+0x2E] = 40, /* U+00EE: LATIN SMALL LETTER I WITH CIRCUMFLEX */
7720 : [320+0x2F] = 40, /* U+00EF: LATIN SMALL LETTER I WITH DIAERESIS */
7721 : [320+0x30] = 41, /* U+00F0: LATIN SMALL LETTER ETH */
7722 : [320+0x31] = 42, /* U+00F1: LATIN SMALL LETTER N WITH TILDE */
7723 : [320+0x32] = 20, /* U+00F2: LATIN SMALL LETTER O WITH GRAVE */
7724 : [320+0x33] = 20, /* U+00F3: LATIN SMALL LETTER O WITH ACUTE */
7725 : [320+0x34] = 20, /* U+00F4: LATIN SMALL LETTER O WITH CIRCUMFLEX */
7726 : [320+0x35] = 20, /* U+00F5: LATIN SMALL LETTER O WITH TILDE */
7727 : [320+0x36] = 20, /* U+00F6: LATIN SMALL LETTER O WITH DIAERESIS */
7728 : [320+0x37] = 43, /* U+00F7: DIVISION SIGN */
7729 : [320+0x38] = 20, /* U+00F8: LATIN SMALL LETTER O WITH STROKE */
7730 : [320+0x39] = 16, /* U+00F9: LATIN SMALL LETTER U WITH GRAVE */
7731 : [320+0x3A] = 16, /* U+00FA: LATIN SMALL LETTER U WITH ACUTE */
7732 : [320+0x3B] = 16, /* U+00FB: LATIN SMALL LETTER U WITH CIRCUMFLEX */
7733 : [320+0x3C] = 16, /* U+00FC: LATIN SMALL LETTER U WITH DIAERESIS */
7734 : [320+0x3D] = 44, /* U+00FD: LATIN SMALL LETTER Y WITH ACUTE */
7735 : [320+0x3E] = 45, /* U+00FE: LATIN SMALL LETTER THORN */
7736 : [320+0x3F] = 44, /* U+00FF: LATIN SMALL LETTER Y WITH DIAERESIS */
7737 : [0xC4] = 384 - 0x80, /* 304 ... */
7738 : [384+0x00] = 25, /* U+0100: LATIN CAPITAL LETTER A WITH MACRON */
7739 : [384+0x01] = 8, /* U+0101: LATIN SMALL LETTER A WITH MACRON */
7740 : [384+0x02] = 25, /* U+0102: LATIN CAPITAL LETTER A WITH BREVE */
7741 : [384+0x03] = 8, /* U+0103: LATIN SMALL LETTER A WITH BREVE */
7742 : [384+0x04] = 25, /* U+0104: LATIN CAPITAL LETTER A WITH OGONEK */
7743 : [384+0x05] = 8, /* U+0105: LATIN SMALL LETTER A WITH OGONEK */
7744 : [384+0x06] = 27, /* U+0106: LATIN CAPITAL LETTER C WITH ACUTE */
7745 : [384+0x07] = 3, /* U+0107: LATIN SMALL LETTER C WITH ACUTE */
7746 : [384+0x08] = 27, /* U+0108: LATIN CAPITAL LETTER C WITH CIRCUMFLEX */
7747 : [384+0x09] = 3, /* U+0109: LATIN SMALL LETTER C WITH CIRCUMFLEX */
7748 : [384+0x0A] = 27, /* U+010A: LATIN CAPITAL LETTER C WITH DOT ABOVE */
7749 : [384+0x0B] = 3, /* U+010B: LATIN SMALL LETTER C WITH DOT ABOVE */
7750 : [384+0x0C] = 27, /* U+010C: LATIN CAPITAL LETTER C WITH CARON */
7751 : [384+0x0D] = 3, /* U+010D: LATIN SMALL LETTER C WITH CARON */
7752 : [384+0x0E] = 30, /* U+010E: LATIN CAPITAL LETTER D WITH CARON */
7753 : [384+0x0F] = 41, /* U+010F: LATIN SMALL LETTER D WITH CARON */
7754 : [384+0x10] = 30, /* U+0110: LATIN CAPITAL LETTER D WITH STROKE */
7755 : [384+0x11] = 41, /* U+0111: LATIN SMALL LETTER D WITH STROKE */
7756 : [384+0x12] = 28, /* U+0112: LATIN CAPITAL LETTER E WITH MACRON */
7757 : [384+0x13] = 39, /* U+0113: LATIN SMALL LETTER E WITH MACRON */
7758 : [384+0x14] = 28, /* U+0114: LATIN CAPITAL LETTER E WITH BREVE */
7759 : [384+0x15] = 39, /* U+0115: LATIN SMALL LETTER E WITH BREVE */
7760 : [384+0x16] = 28, /* U+0116: LATIN CAPITAL LETTER E WITH DOT ABOVE */
7761 : [384+0x17] = 39, /* U+0117: LATIN SMALL LETTER E WITH DOT ABOVE */
7762 : [384+0x18] = 28, /* U+0118: LATIN CAPITAL LETTER E WITH OGONEK */
7763 : [384+0x19] = 39, /* U+0119: LATIN SMALL LETTER E WITH OGONEK */
7764 : [384+0x1A] = 28, /* U+011A: LATIN CAPITAL LETTER E WITH CARON */
7765 : [384+0x1B] = 39, /* U+011B: LATIN SMALL LETTER E WITH CARON */
7766 : [384+0x1C] = 46, /* U+011C: LATIN CAPITAL LETTER G WITH CIRCUMFLEX */
7767 : [384+0x1D] = 47, /* U+011D: LATIN SMALL LETTER G WITH CIRCUMFLEX */
7768 : [384+0x1E] = 46, /* U+011E: LATIN CAPITAL LETTER G WITH BREVE */
7769 : [384+0x1F] = 47, /* U+011F: LATIN SMALL LETTER G WITH BREVE */
7770 : [384+0x20] = 46, /* U+0120: LATIN CAPITAL LETTER G WITH DOT ABOVE */
7771 : [384+0x21] = 47, /* U+0121: LATIN SMALL LETTER G WITH DOT ABOVE */
7772 : [384+0x22] = 46, /* U+0122: LATIN CAPITAL LETTER G WITH CEDILLA */
7773 : [384+0x23] = 47, /* U+0123: LATIN SMALL LETTER G WITH CEDILLA */
7774 : [384+0x24] = 48, /* U+0124: LATIN CAPITAL LETTER H WITH CIRCUMFLEX */
7775 : [384+0x25] = 49, /* U+0125: LATIN SMALL LETTER H WITH CIRCUMFLEX */
7776 : [384+0x26] = 48, /* U+0126: LATIN CAPITAL LETTER H WITH STROKE */
7777 : [384+0x27] = 49, /* U+0127: LATIN SMALL LETTER H WITH STROKE */
7778 : [384+0x28] = 29, /* U+0128: LATIN CAPITAL LETTER I WITH TILDE */
7779 : [384+0x29] = 40, /* U+0129: LATIN SMALL LETTER I WITH TILDE */
7780 : [384+0x2A] = 29, /* U+012A: LATIN CAPITAL LETTER I WITH MACRON */
7781 : [384+0x2B] = 40, /* U+012B: LATIN SMALL LETTER I WITH MACRON */
7782 : [384+0x2C] = 29, /* U+012C: LATIN CAPITAL LETTER I WITH BREVE */
7783 : [384+0x2D] = 40, /* U+012D: LATIN SMALL LETTER I WITH BREVE */
7784 : [384+0x2E] = 29, /* U+012E: LATIN CAPITAL LETTER I WITH OGONEK */
7785 : [384+0x2F] = 40, /* U+012F: LATIN SMALL LETTER I WITH OGONEK */
7786 : [384+0x30] = 29, /* U+0130: LATIN CAPITAL LETTER I WITH DOT ABOVE */
7787 : [384+0x31] = 40, /* U+0131: LATIN SMALL LETTER DOTLESS I */
7788 : [384+0x32] = 50, /* U+0132: LATIN CAPITAL LIGATURE IJ */
7789 : [384+0x33] = 51, /* U+0133: LATIN SMALL LIGATURE IJ */
7790 : [384+0x34] = 52, /* U+0134: LATIN CAPITAL LETTER J WITH CIRCUMFLEX */
7791 : [384+0x35] = 53, /* U+0135: LATIN SMALL LETTER J WITH CIRCUMFLEX */
7792 : [384+0x36] = 54, /* U+0136: LATIN CAPITAL LETTER K WITH CEDILLA */
7793 : [384+0x37] = 55, /* U+0137: LATIN SMALL LETTER K WITH CEDILLA */
7794 : [384+0x38] = 56, /* U+0138: LATIN SMALL LETTER KRA */
7795 : [384+0x39] = 57, /* U+0139: LATIN CAPITAL LETTER L WITH ACUTE */
7796 : [384+0x3A] = 58, /* U+013A: LATIN SMALL LETTER L WITH ACUTE */
7797 : [384+0x3B] = 57, /* U+013B: LATIN CAPITAL LETTER L WITH CEDILLA */
7798 : [384+0x3C] = 58, /* U+013C: LATIN SMALL LETTER L WITH CEDILLA */
7799 : [384+0x3D] = 57, /* U+013D: LATIN CAPITAL LETTER L WITH CARON */
7800 : [384+0x3E] = 58, /* U+013E: LATIN SMALL LETTER L WITH CARON */
7801 : [384+0x3F] = 57, /* U+013F: LATIN CAPITAL LETTER L WITH MIDDLE DOT */
7802 : [0xC5] = 448 - 0x80, /* 305 ... */
7803 : [448+0x00] = 58, /* U+0140: LATIN SMALL LETTER L WITH MIDDLE DOT */
7804 : [448+0x01] = 57, /* U+0141: LATIN CAPITAL LETTER L WITH STROKE */
7805 : [448+0x02] = 58, /* U+0142: LATIN SMALL LETTER L WITH STROKE */
7806 : [448+0x03] = 31, /* U+0143: LATIN CAPITAL LETTER N WITH ACUTE */
7807 : [448+0x04] = 42, /* U+0144: LATIN SMALL LETTER N WITH ACUTE */
7808 : [448+0x05] = 31, /* U+0145: LATIN CAPITAL LETTER N WITH CEDILLA */
7809 : [448+0x06] = 42, /* U+0146: LATIN SMALL LETTER N WITH CEDILLA */
7810 : [448+0x07] = 31, /* U+0147: LATIN CAPITAL LETTER N WITH CARON */
7811 : [448+0x08] = 42, /* U+0148: LATIN SMALL LETTER N WITH CARON */
7812 : [448+0x09] = 59, /* U+0149: LATIN SMALL LETTER N PRECEDED BY APOSTROPHE */
7813 : [448+0x0A] = 31, /* U+014A: LATIN CAPITAL LETTER ENG */
7814 : [448+0x0B] = 42, /* U+014B: LATIN SMALL LETTER ENG */
7815 : [448+0x0C] = 32, /* U+014C: LATIN CAPITAL LETTER O WITH MACRON */
7816 : [448+0x0D] = 20, /* U+014D: LATIN SMALL LETTER O WITH MACRON */
7817 : [448+0x0E] = 32, /* U+014E: LATIN CAPITAL LETTER O WITH BREVE */
7818 : [448+0x0F] = 20, /* U+014F: LATIN SMALL LETTER O WITH BREVE */
7819 : [448+0x10] = 32, /* U+0150: LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */
7820 : [448+0x11] = 20, /* U+0151: LATIN SMALL LETTER O WITH DOUBLE ACUTE */
7821 : [448+0x12] = 60, /* U+0152: LATIN CAPITAL LIGATURE OE */
7822 : [448+0x13] = 61, /* U+0153: LATIN SMALL LIGATURE OE */
7823 : [448+0x14] = 62, /* U+0154: LATIN CAPITAL LETTER R WITH ACUTE */
7824 : [448+0x15] = 63, /* U+0155: LATIN SMALL LETTER R WITH ACUTE */
7825 : [448+0x16] = 62, /* U+0156: LATIN CAPITAL LETTER R WITH CEDILLA */
7826 : [448+0x17] = 63, /* U+0157: LATIN SMALL LETTER R WITH CEDILLA */
7827 : [448+0x18] = 62, /* U+0158: LATIN CAPITAL LETTER R WITH CARON */
7828 : [448+0x19] = 63, /* U+0159: LATIN SMALL LETTER R WITH CARON */
7829 : [448+0x1A] = 64, /* U+015A: LATIN CAPITAL LETTER S WITH ACUTE */
7830 : [448+0x1B] = 65, /* U+015B: LATIN SMALL LETTER S WITH ACUTE */
7831 : [448+0x1C] = 64, /* U+015C: LATIN CAPITAL LETTER S WITH CIRCUMFLEX */
7832 : [448+0x1D] = 65, /* U+015D: LATIN SMALL LETTER S WITH CIRCUMFLEX */
7833 : [448+0x1E] = 64, /* U+015E: LATIN CAPITAL LETTER S WITH CEDILLA */
7834 : [448+0x1F] = 65, /* U+015F: LATIN SMALL LETTER S WITH CEDILLA */
7835 : [448+0x20] = 64, /* U+0160: LATIN CAPITAL LETTER S WITH CARON */
7836 : [448+0x21] = 65, /* U+0161: LATIN SMALL LETTER S WITH CARON */
7837 : [448+0x22] = 66, /* U+0162: LATIN CAPITAL LETTER T WITH CEDILLA */
7838 : [448+0x23] = 67, /* U+0163: LATIN SMALL LETTER T WITH CEDILLA */
7839 : [448+0x24] = 66, /* U+0164: LATIN CAPITAL LETTER T WITH CARON */
7840 : [448+0x25] = 67, /* U+0165: LATIN SMALL LETTER T WITH CARON */
7841 : [448+0x26] = 66, /* U+0166: LATIN CAPITAL LETTER T WITH STROKE */
7842 : [448+0x27] = 67, /* U+0167: LATIN SMALL LETTER T WITH STROKE */
7843 : [448+0x28] = 34, /* U+0168: LATIN CAPITAL LETTER U WITH TILDE */
7844 : [448+0x29] = 16, /* U+0169: LATIN SMALL LETTER U WITH TILDE */
7845 : [448+0x2A] = 34, /* U+016A: LATIN CAPITAL LETTER U WITH MACRON */
7846 : [448+0x2B] = 16, /* U+016B: LATIN SMALL LETTER U WITH MACRON */
7847 : [448+0x2C] = 34, /* U+016C: LATIN CAPITAL LETTER U WITH BREVE */
7848 : [448+0x2D] = 16, /* U+016D: LATIN SMALL LETTER U WITH BREVE */
7849 : [448+0x2E] = 34, /* U+016E: LATIN CAPITAL LETTER U WITH RING ABOVE */
7850 : [448+0x2F] = 16, /* U+016F: LATIN SMALL LETTER U WITH RING ABOVE */
7851 : [448+0x30] = 34, /* U+0170: LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */
7852 : [448+0x31] = 16, /* U+0171: LATIN SMALL LETTER U WITH DOUBLE ACUTE */
7853 : [448+0x32] = 34, /* U+0172: LATIN CAPITAL LETTER U WITH OGONEK */
7854 : [448+0x33] = 16, /* U+0173: LATIN SMALL LETTER U WITH OGONEK */
7855 : [448+0x34] = 68, /* U+0174: LATIN CAPITAL LETTER W WITH CIRCUMFLEX */
7856 : [448+0x35] = 69, /* U+0175: LATIN SMALL LETTER W WITH CIRCUMFLEX */
7857 : [448+0x36] = 35, /* U+0176: LATIN CAPITAL LETTER Y WITH CIRCUMFLEX */
7858 : [448+0x37] = 44, /* U+0177: LATIN SMALL LETTER Y WITH CIRCUMFLEX */
7859 : [448+0x38] = 35, /* U+0178: LATIN CAPITAL LETTER Y WITH DIAERESIS */
7860 : [448+0x39] = 70, /* U+0179: LATIN CAPITAL LETTER Z WITH ACUTE */
7861 : [448+0x3A] = 71, /* U+017A: LATIN SMALL LETTER Z WITH ACUTE */
7862 : [448+0x3B] = 70, /* U+017B: LATIN CAPITAL LETTER Z WITH DOT ABOVE */
7863 : [448+0x3C] = 71, /* U+017C: LATIN SMALL LETTER Z WITH DOT ABOVE */
7864 : [448+0x3D] = 70, /* U+017D: LATIN CAPITAL LETTER Z WITH CARON */
7865 : [448+0x3E] = 71, /* U+017E: LATIN SMALL LETTER Z WITH CARON */
7866 : [448+0x3F] = 65, /* U+017F: LATIN SMALL LETTER LONG S */
7867 : [0xC6] = 512 - 0x80, /* 306 ... */
7868 : [512+0x00] = 72, /* U+0180: LATIN SMALL LETTER B WITH STROKE */
7869 : [512+0x01] = 73, /* U+0181: LATIN CAPITAL LETTER B WITH HOOK */
7870 : [512+0x02] = 73, /* U+0182: LATIN CAPITAL LETTER B WITH TOPBAR */
7871 : [512+0x03] = 72, /* U+0183: LATIN SMALL LETTER B WITH TOPBAR */
7872 : [512+0x07] = 27, /* U+0187: LATIN CAPITAL LETTER C WITH HOOK */
7873 : [512+0x08] = 3, /* U+0188: LATIN SMALL LETTER C WITH HOOK */
7874 : [512+0x09] = 30, /* U+0189: LATIN CAPITAL LETTER AFRICAN D */
7875 : [512+0x0A] = 30, /* U+018A: LATIN CAPITAL LETTER D WITH HOOK */
7876 : [512+0x0B] = 30, /* U+018B: LATIN CAPITAL LETTER D WITH TOPBAR */
7877 : [512+0x0C] = 41, /* U+018C: LATIN SMALL LETTER D WITH TOPBAR */
7878 : [512+0x10] = 28, /* U+0190: LATIN CAPITAL LETTER OPEN E */
7879 : [512+0x11] = 74, /* U+0191: LATIN CAPITAL LETTER F WITH HOOK */
7880 : [512+0x12] = 75, /* U+0192: LATIN SMALL LETTER F WITH HOOK */
7881 : [512+0x13] = 46, /* U+0193: LATIN CAPITAL LETTER G WITH HOOK */
7882 : [512+0x15] = 76, /* U+0195: LATIN SMALL LETTER HV */
7883 : [512+0x16] = 29, /* U+0196: LATIN CAPITAL LETTER IOTA */
7884 : [512+0x17] = 29, /* U+0197: LATIN CAPITAL LETTER I WITH STROKE */
7885 : [512+0x18] = 54, /* U+0198: LATIN CAPITAL LETTER K WITH HOOK */
7886 : [512+0x19] = 55, /* U+0199: LATIN SMALL LETTER K WITH HOOK */
7887 : [512+0x1A] = 58, /* U+019A: LATIN SMALL LETTER L WITH BAR */
7888 : [512+0x1D] = 31, /* U+019D: LATIN CAPITAL LETTER N WITH LEFT HOOK */
7889 : [512+0x1E] = 42, /* U+019E: LATIN SMALL LETTER N WITH LONG RIGHT LEG */
7890 : [512+0x20] = 32, /* U+01A0: LATIN CAPITAL LETTER O WITH HORN */
7891 : [512+0x21] = 20, /* U+01A1: LATIN SMALL LETTER O WITH HORN */
7892 : [512+0x22] = 77, /* U+01A2: LATIN CAPITAL LETTER OI */
7893 : [512+0x23] = 78, /* U+01A3: LATIN SMALL LETTER OI */
7894 : [512+0x24] = 79, /* U+01A4: LATIN CAPITAL LETTER P WITH HOOK */
7895 : [512+0x25] = 80, /* U+01A5: LATIN SMALL LETTER P WITH HOOK */
7896 : [512+0x2B] = 67, /* U+01AB: LATIN SMALL LETTER T WITH PALATAL HOOK */
7897 : [512+0x2C] = 66, /* U+01AC: LATIN CAPITAL LETTER T WITH HOOK */
7898 : [512+0x2D] = 67, /* U+01AD: LATIN SMALL LETTER T WITH HOOK */
7899 : [512+0x2E] = 66, /* U+01AE: LATIN CAPITAL LETTER T WITH RETROFLEX HOOK */
7900 : [512+0x2F] = 34, /* U+01AF: LATIN CAPITAL LETTER U WITH HORN */
7901 : [512+0x30] = 16, /* U+01B0: LATIN SMALL LETTER U WITH HORN */
7902 : [512+0x32] = 81, /* U+01B2: LATIN CAPITAL LETTER V WITH HOOK */
7903 : [512+0x33] = 35, /* U+01B3: LATIN CAPITAL LETTER Y WITH HOOK */
7904 : [512+0x34] = 44, /* U+01B4: LATIN SMALL LETTER Y WITH HOOK */
7905 : [512+0x35] = 70, /* U+01B5: LATIN CAPITAL LETTER Z WITH STROKE */
7906 : [512+0x36] = 71, /* U+01B6: LATIN SMALL LETTER Z WITH STROKE */
7907 : [0xC7] = 576 - 0x80, /* 307 ... */
7908 : [576+0x07] = 82, /* U+01C7: LATIN CAPITAL LETTER LJ */
7909 : [576+0x08] = 83, /* U+01C8: LATIN CAPITAL LETTER L WITH SMALL LETTER J */
7910 : [576+0x09] = 84, /* U+01C9: LATIN SMALL LETTER LJ */
7911 : [576+0x0A] = 85, /* U+01CA: LATIN CAPITAL LETTER NJ */
7912 : [576+0x0B] = 86, /* U+01CB: LATIN CAPITAL LETTER N WITH SMALL LETTER J */
7913 : [576+0x0C] = 87, /* U+01CC: LATIN SMALL LETTER NJ */
7914 : [576+0x0D] = 25, /* U+01CD: LATIN CAPITAL LETTER A WITH CARON */
7915 : [576+0x0E] = 8, /* U+01CE: LATIN SMALL LETTER A WITH CARON */
7916 : [576+0x0F] = 29, /* U+01CF: LATIN CAPITAL LETTER I WITH CARON */
7917 : [576+0x10] = 40, /* U+01D0: LATIN SMALL LETTER I WITH CARON */
7918 : [576+0x11] = 32, /* U+01D1: LATIN CAPITAL LETTER O WITH CARON */
7919 : [576+0x12] = 20, /* U+01D2: LATIN SMALL LETTER O WITH CARON */
7920 : [576+0x13] = 34, /* U+01D3: LATIN CAPITAL LETTER U WITH CARON */
7921 : [576+0x14] = 16, /* U+01D4: LATIN SMALL LETTER U WITH CARON */
7922 : [576+0x15] = 34, /* U+01D5: LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON */
7923 : [576+0x16] = 16, /* U+01D6: LATIN SMALL LETTER U WITH DIAERESIS AND MACRON */
7924 : [576+0x17] = 34, /* U+01D7: LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE */
7925 : [576+0x18] = 16, /* U+01D8: LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE */
7926 : [576+0x19] = 34, /* U+01D9: LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON */
7927 : [576+0x1A] = 16, /* U+01DA: LATIN SMALL LETTER U WITH DIAERESIS AND CARON */
7928 : [576+0x1B] = 34, /* U+01DB: LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE */
7929 : [576+0x1C] = 16, /* U+01DC: LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE */
7930 : [576+0x1E] = 25, /* U+01DE: LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */
7931 : [576+0x1F] = 8, /* U+01DF: LATIN SMALL LETTER A WITH DIAERESIS AND MACRON */
7932 : [576+0x20] = 25, /* U+01E0: LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON */
7933 : [576+0x21] = 8, /* U+01E1: LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON */
7934 : [576+0x22] = 26, /* U+01E2: LATIN CAPITAL LETTER AE WITH MACRON */
7935 : [576+0x23] = 38, /* U+01E3: LATIN SMALL LETTER AE WITH MACRON */
7936 : [576+0x24] = 46, /* U+01E4: LATIN CAPITAL LETTER G WITH STROKE */
7937 : [576+0x25] = 47, /* U+01E5: LATIN SMALL LETTER G WITH STROKE */
7938 : [576+0x26] = 46, /* U+01E6: LATIN CAPITAL LETTER G WITH CARON */
7939 : [576+0x27] = 47, /* U+01E7: LATIN SMALL LETTER G WITH CARON */
7940 : [576+0x28] = 54, /* U+01E8: LATIN CAPITAL LETTER K WITH CARON */
7941 : [576+0x29] = 55, /* U+01E9: LATIN SMALL LETTER K WITH CARON */
7942 : [576+0x2A] = 32, /* U+01EA: LATIN CAPITAL LETTER O WITH OGONEK */
7943 : [576+0x2B] = 20, /* U+01EB: LATIN SMALL LETTER O WITH OGONEK */
7944 : [576+0x2C] = 32, /* U+01EC: LATIN CAPITAL LETTER O WITH OGONEK AND MACRON */
7945 : [576+0x2D] = 20, /* U+01ED: LATIN SMALL LETTER O WITH OGONEK AND MACRON */
7946 : [576+0x30] = 53, /* U+01F0: LATIN SMALL LETTER J WITH CARON */
7947 : [576+0x31] = 88, /* U+01F1: LATIN CAPITAL LETTER DZ */
7948 : [576+0x32] = 89, /* U+01F2: LATIN CAPITAL LETTER D WITH SMALL LETTER Z */
7949 : [576+0x33] = 90, /* U+01F3: LATIN SMALL LETTER DZ */
7950 : [576+0x34] = 46, /* U+01F4: LATIN CAPITAL LETTER G WITH ACUTE */
7951 : [576+0x35] = 47, /* U+01F5: LATIN SMALL LETTER G WITH ACUTE */
7952 : [576+0x38] = 31, /* U+01F8: LATIN CAPITAL LETTER N WITH GRAVE */
7953 : [576+0x39] = 42, /* U+01F9: LATIN SMALL LETTER N WITH GRAVE */
7954 : [576+0x3A] = 25, /* U+01FA: LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE */
7955 : [576+0x3B] = 8, /* U+01FB: LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE */
7956 : [576+0x3C] = 26, /* U+01FC: LATIN CAPITAL LETTER AE WITH ACUTE */
7957 : [576+0x3D] = 38, /* U+01FD: LATIN SMALL LETTER AE WITH ACUTE */
7958 : [576+0x3E] = 32, /* U+01FE: LATIN CAPITAL LETTER O WITH STROKE AND ACUTE */
7959 : [576+0x3F] = 20, /* U+01FF: LATIN SMALL LETTER O WITH STROKE AND ACUTE */
7960 : [0xC8] = 640 - 0x80, /* 310 ... */
7961 : [640+0x00] = 25, /* U+0200: LATIN CAPITAL LETTER A WITH DOUBLE GRAVE */
7962 : [640+0x01] = 8, /* U+0201: LATIN SMALL LETTER A WITH DOUBLE GRAVE */
7963 : [640+0x02] = 25, /* U+0202: LATIN CAPITAL LETTER A WITH INVERTED BREVE */
7964 : [640+0x03] = 8, /* U+0203: LATIN SMALL LETTER A WITH INVERTED BREVE */
7965 : [640+0x04] = 28, /* U+0204: LATIN CAPITAL LETTER E WITH DOUBLE GRAVE */
7966 : [640+0x05] = 39, /* U+0205: LATIN SMALL LETTER E WITH DOUBLE GRAVE */
7967 : [640+0x06] = 28, /* U+0206: LATIN CAPITAL LETTER E WITH INVERTED BREVE */
7968 : [640+0x07] = 39, /* U+0207: LATIN SMALL LETTER E WITH INVERTED BREVE */
7969 : [640+0x08] = 29, /* U+0208: LATIN CAPITAL LETTER I WITH DOUBLE GRAVE */
7970 : [640+0x09] = 40, /* U+0209: LATIN SMALL LETTER I WITH DOUBLE GRAVE */
7971 : [640+0x0A] = 29, /* U+020A: LATIN CAPITAL LETTER I WITH INVERTED BREVE */
7972 : [640+0x0B] = 40, /* U+020B: LATIN SMALL LETTER I WITH INVERTED BREVE */
7973 : [640+0x0C] = 32, /* U+020C: LATIN CAPITAL LETTER O WITH DOUBLE GRAVE */
7974 : [640+0x0D] = 20, /* U+020D: LATIN SMALL LETTER O WITH DOUBLE GRAVE */
7975 : [640+0x0E] = 32, /* U+020E: LATIN CAPITAL LETTER O WITH INVERTED BREVE */
7976 : [640+0x0F] = 20, /* U+020F: LATIN SMALL LETTER O WITH INVERTED BREVE */
7977 : [640+0x10] = 62, /* U+0210: LATIN CAPITAL LETTER R WITH DOUBLE GRAVE */
7978 : [640+0x11] = 63, /* U+0211: LATIN SMALL LETTER R WITH DOUBLE GRAVE */
7979 : [640+0x12] = 62, /* U+0212: LATIN CAPITAL LETTER R WITH INVERTED BREVE */
7980 : [640+0x13] = 63, /* U+0213: LATIN SMALL LETTER R WITH INVERTED BREVE */
7981 : [640+0x14] = 34, /* U+0214: LATIN CAPITAL LETTER U WITH DOUBLE GRAVE */
7982 : [640+0x15] = 16, /* U+0215: LATIN SMALL LETTER U WITH DOUBLE GRAVE */
7983 : [640+0x16] = 34, /* U+0216: LATIN CAPITAL LETTER U WITH INVERTED BREVE */
7984 : [640+0x17] = 16, /* U+0217: LATIN SMALL LETTER U WITH INVERTED BREVE */
7985 : [640+0x18] = 64, /* U+0218: LATIN CAPITAL LETTER S WITH COMMA BELOW */
7986 : [640+0x19] = 65, /* U+0219: LATIN SMALL LETTER S WITH COMMA BELOW */
7987 : [640+0x1A] = 66, /* U+021A: LATIN CAPITAL LETTER T WITH COMMA BELOW */
7988 : [640+0x1B] = 67, /* U+021B: LATIN SMALL LETTER T WITH COMMA BELOW */
7989 : [640+0x1E] = 48, /* U+021E: LATIN CAPITAL LETTER H WITH CARON */
7990 : [640+0x1F] = 49, /* U+021F: LATIN SMALL LETTER H WITH CARON */
7991 : [640+0x21] = 41, /* U+0221: LATIN SMALL LETTER D WITH CURL */
7992 : [640+0x24] = 70, /* U+0224: LATIN CAPITAL LETTER Z WITH HOOK */
7993 : [640+0x25] = 71, /* U+0225: LATIN SMALL LETTER Z WITH HOOK */
7994 : [640+0x26] = 25, /* U+0226: LATIN CAPITAL LETTER A WITH DOT ABOVE */
7995 : [640+0x27] = 8, /* U+0227: LATIN SMALL LETTER A WITH DOT ABOVE */
7996 : [640+0x28] = 28, /* U+0228: LATIN CAPITAL LETTER E WITH CEDILLA */
7997 : [640+0x29] = 39, /* U+0229: LATIN SMALL LETTER E WITH CEDILLA */
7998 : [640+0x2A] = 32, /* U+022A: LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON */
7999 : [640+0x2B] = 20, /* U+022B: LATIN SMALL LETTER O WITH DIAERESIS AND MACRON */
8000 : [640+0x2C] = 32, /* U+022C: LATIN CAPITAL LETTER O WITH TILDE AND MACRON */
8001 : [640+0x2D] = 20, /* U+022D: LATIN SMALL LETTER O WITH TILDE AND MACRON */
8002 : [640+0x2E] = 32, /* U+022E: LATIN CAPITAL LETTER O WITH DOT ABOVE */
8003 : [640+0x2F] = 20, /* U+022F: LATIN SMALL LETTER O WITH DOT ABOVE */
8004 : [640+0x30] = 32, /* U+0230: LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON */
8005 : [640+0x31] = 20, /* U+0231: LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON */
8006 : [640+0x32] = 35, /* U+0232: LATIN CAPITAL LETTER Y WITH MACRON */
8007 : [640+0x33] = 44, /* U+0233: LATIN SMALL LETTER Y WITH MACRON */
8008 : [640+0x34] = 58, /* U+0234: LATIN SMALL LETTER L WITH CURL */
8009 : [640+0x35] = 42, /* U+0235: LATIN SMALL LETTER N WITH CURL */
8010 : [640+0x36] = 67, /* U+0236: LATIN SMALL LETTER T WITH CURL */
8011 : [640+0x37] = 53, /* U+0237: LATIN SMALL LETTER DOTLESS J */
8012 : [640+0x38] = 91, /* U+0238: LATIN SMALL LETTER DB DIGRAPH */
8013 : [640+0x39] = 92, /* U+0239: LATIN SMALL LETTER QP DIGRAPH */
8014 : [640+0x3A] = 25, /* U+023A: LATIN CAPITAL LETTER A WITH STROKE */
8015 : [640+0x3B] = 27, /* U+023B: LATIN CAPITAL LETTER C WITH STROKE */
8016 : [640+0x3C] = 3, /* U+023C: LATIN SMALL LETTER C WITH STROKE */
8017 : [640+0x3D] = 57, /* U+023D: LATIN CAPITAL LETTER L WITH BAR */
8018 : [640+0x3E] = 66, /* U+023E: LATIN CAPITAL LETTER T WITH DIAGONAL STROKE */
8019 : [640+0x3F] = 65, /* U+023F: LATIN SMALL LETTER S WITH SWASH TAIL */
8020 : [0xC9] = 704 - 0x80, /* 311 ... */
8021 : [704+0x00] = 71, /* U+0240: LATIN SMALL LETTER Z WITH SWASH TAIL */
8022 : [704+0x03] = 73, /* U+0243: LATIN CAPITAL LETTER B WITH STROKE */
8023 : [704+0x04] = 34, /* U+0244: LATIN CAPITAL LETTER U BAR */
8024 : [704+0x06] = 28, /* U+0246: LATIN CAPITAL LETTER E WITH STROKE */
8025 : [704+0x07] = 39, /* U+0247: LATIN SMALL LETTER E WITH STROKE */
8026 : [704+0x08] = 52, /* U+0248: LATIN CAPITAL LETTER J WITH STROKE */
8027 : [704+0x09] = 53, /* U+0249: LATIN SMALL LETTER J WITH STROKE */
8028 : [704+0x0C] = 62, /* U+024C: LATIN CAPITAL LETTER R WITH STROKE */
8029 : [704+0x0D] = 63, /* U+024D: LATIN SMALL LETTER R WITH STROKE */
8030 : [704+0x0E] = 35, /* U+024E: LATIN CAPITAL LETTER Y WITH STROKE */
8031 : [704+0x0F] = 44, /* U+024F: LATIN SMALL LETTER Y WITH STROKE */
8032 : [704+0x13] = 72, /* U+0253: LATIN SMALL LETTER B WITH HOOK */
8033 : [704+0x15] = 3, /* U+0255: LATIN SMALL LETTER C WITH CURL */
8034 : [704+0x16] = 41, /* U+0256: LATIN SMALL LETTER D WITH TAIL */
8035 : [704+0x17] = 41, /* U+0257: LATIN SMALL LETTER D WITH HOOK */
8036 : [704+0x1B] = 39, /* U+025B: LATIN SMALL LETTER OPEN E */
8037 : [704+0x1F] = 53, /* U+025F: LATIN SMALL LETTER DOTLESS J WITH STROKE */
8038 : [704+0x20] = 47, /* U+0260: LATIN SMALL LETTER G WITH HOOK */
8039 : [704+0x21] = 47, /* U+0261: LATIN SMALL LETTER SCRIPT G */
8040 : [704+0x22] = 46, /* U+0262: LATIN LETTER SMALL CAPITAL G */
8041 : [704+0x26] = 49, /* U+0266: LATIN SMALL LETTER H WITH HOOK */
8042 : [704+0x27] = 49, /* U+0267: LATIN SMALL LETTER HENG WITH HOOK */
8043 : [704+0x28] = 40, /* U+0268: LATIN SMALL LETTER I WITH STROKE */
8044 : [704+0x2A] = 29, /* U+026A: LATIN LETTER SMALL CAPITAL I */
8045 : [704+0x2B] = 58, /* U+026B: LATIN SMALL LETTER L WITH MIDDLE TILDE */
8046 : [704+0x2C] = 58, /* U+026C: LATIN SMALL LETTER L WITH BELT */
8047 : [704+0x2D] = 58, /* U+026D: LATIN SMALL LETTER L WITH RETROFLEX HOOK */
8048 : [704+0x31] = 93, /* U+0271: LATIN SMALL LETTER M WITH HOOK */
8049 : [704+0x32] = 42, /* U+0272: LATIN SMALL LETTER N WITH LEFT HOOK */
8050 : [704+0x33] = 42, /* U+0273: LATIN SMALL LETTER N WITH RETROFLEX HOOK */
8051 : [704+0x34] = 31, /* U+0274: LATIN LETTER SMALL CAPITAL N */
8052 : [704+0x36] = 60, /* U+0276: LATIN LETTER SMALL CAPITAL OE */
8053 : [704+0x3C] = 63, /* U+027C: LATIN SMALL LETTER R WITH LONG LEG */
8054 : [704+0x3D] = 63, /* U+027D: LATIN SMALL LETTER R WITH TAIL */
8055 : [704+0x3E] = 63, /* U+027E: LATIN SMALL LETTER R WITH FISHHOOK */
8056 : [0xCA] = 768 - 0x80, /* 312 ... */
8057 : [768+0x00] = 62, /* U+0280: LATIN LETTER SMALL CAPITAL R */
8058 : [768+0x02] = 65, /* U+0282: LATIN SMALL LETTER S WITH HOOK */
8059 : [768+0x08] = 67, /* U+0288: LATIN SMALL LETTER T WITH RETROFLEX HOOK */
8060 : [768+0x09] = 16, /* U+0289: LATIN SMALL LETTER U BAR */
8061 : [768+0x0B] = 94, /* U+028B: LATIN SMALL LETTER V WITH HOOK */
8062 : [768+0x0F] = 35, /* U+028F: LATIN LETTER SMALL CAPITAL Y */
8063 : [768+0x10] = 71, /* U+0290: LATIN SMALL LETTER Z WITH RETROFLEX HOOK */
8064 : [768+0x11] = 71, /* U+0291: LATIN SMALL LETTER Z WITH CURL */
8065 : [768+0x19] = 73, /* U+0299: LATIN LETTER SMALL CAPITAL B */
8066 : [768+0x1B] = 46, /* U+029B: LATIN LETTER SMALL CAPITAL G WITH HOOK */
8067 : [768+0x1C] = 48, /* U+029C: LATIN LETTER SMALL CAPITAL H */
8068 : [768+0x1D] = 53, /* U+029D: LATIN SMALL LETTER J WITH CROSSED-TAIL */
8069 : [768+0x1F] = 57, /* U+029F: LATIN LETTER SMALL CAPITAL L */
8070 : [768+0x20] = 56, /* U+02A0: LATIN SMALL LETTER Q WITH HOOK */
8071 : [768+0x23] = 90, /* U+02A3: LATIN SMALL LETTER DZ DIGRAPH */
8072 : [768+0x25] = 90, /* U+02A5: LATIN SMALL LETTER DZ DIGRAPH WITH CURL */
8073 : [768+0x26] = 95, /* U+02A6: LATIN SMALL LETTER TS DIGRAPH */
8074 : [768+0x2A] = 96, /* U+02AA: LATIN SMALL LETTER LS DIGRAPH */
8075 : [768+0x2B] = 97, /* U+02AB: LATIN SMALL LETTER LZ DIGRAPH */
8076 : [768+0x30] = 49, /* U+02B0: MODIFIER LETTER SMALL H */
8077 : [768+0x32] = 53, /* U+02B2: MODIFIER LETTER SMALL J */
8078 : [768+0x33] = 63, /* U+02B3: MODIFIER LETTER SMALL R */
8079 : [768+0x37] = 69, /* U+02B7: MODIFIER LETTER SMALL W */
8080 : [768+0x38] = 44, /* U+02B8: MODIFIER LETTER SMALL Y */
8081 : [768+0x3C] = 15, /* U+02BC: MODIFIER LETTER APOSTROPHE */
8082 : [0xCB] = 832 - 0x80, /* 313 ... */
8083 : [832+0x06] = 98, /* U+02C6: MODIFIER LETTER CIRCUMFLEX ACCENT */
8084 : [832+0x08] = 15, /* U+02C8: MODIFIER LETTER VERTICAL LINE */
8085 : [832+0x0B] = 99, /* U+02CB: MODIFIER LETTER GRAVE ACCENT */
8086 : [832+0x0D] = 100, /* U+02CD: MODIFIER LETTER LOW MACRON */
8087 : [832+0x10] = 101, /* U+02D0: MODIFIER LETTER TRIANGULAR COLON */
8088 : [832+0x1C] = 102, /* U+02DC: SMALL TILDE */
8089 : [832+0x1D] = 103, /* U+02DD: DOUBLE ACUTE ACCENT */
8090 : [832+0x21] = 58, /* U+02E1: MODIFIER LETTER SMALL L */
8091 : [832+0x22] = 65, /* U+02E2: MODIFIER LETTER SMALL S */
8092 : [832+0x23] = 33, /* U+02E3: MODIFIER LETTER SMALL X */
8093 : [0xCC] = 896 - 0x80, /* 314 ... */
8094 : [896+0x00] = 104, /* U+0300: COMBINING GRAVE ACCENT */
8095 : [896+0x01] = 104, /* U+0301: COMBINING ACUTE ACCENT */
8096 : [896+0x02] = 104, /* U+0302: COMBINING CIRCUMFLEX ACCENT */
8097 : [896+0x03] = 104, /* U+0303: COMBINING TILDE */
8098 : [896+0x04] = 104, /* U+0304: COMBINING MACRON */
8099 : [896+0x05] = 104, /* U+0305: COMBINING OVERLINE */
8100 : [896+0x06] = 104, /* U+0306: COMBINING BREVE */
8101 : [896+0x07] = 104, /* U+0307: COMBINING DOT ABOVE */
8102 : [896+0x08] = 104, /* U+0308: COMBINING DIAERESIS */
8103 : [896+0x09] = 104, /* U+0309: COMBINING HOOK ABOVE */
8104 : [896+0x0A] = 104, /* U+030A: COMBINING RING ABOVE */
8105 : [896+0x0B] = 104, /* U+030B: COMBINING DOUBLE ACUTE ACCENT */
8106 : [896+0x0C] = 104, /* U+030C: COMBINING CARON */
8107 : [896+0x0D] = 104, /* U+030D: COMBINING VERTICAL LINE ABOVE */
8108 : [896+0x0E] = 104, /* U+030E: COMBINING DOUBLE VERTICAL LINE ABOVE */
8109 : [896+0x0F] = 104, /* U+030F: COMBINING DOUBLE GRAVE ACCENT */
8110 : [896+0x10] = 104, /* U+0310: COMBINING CANDRABINDU */
8111 : [896+0x11] = 104, /* U+0311: COMBINING INVERTED BREVE */
8112 : [896+0x12] = 104, /* U+0312: COMBINING TURNED COMMA ABOVE */
8113 : [896+0x13] = 104, /* U+0313: COMBINING COMMA ABOVE */
8114 : [896+0x14] = 104, /* U+0314: COMBINING REVERSED COMMA ABOVE */
8115 : [896+0x15] = 104, /* U+0315: COMBINING COMMA ABOVE RIGHT */
8116 : [896+0x16] = 104, /* U+0316: COMBINING GRAVE ACCENT BELOW */
8117 : [896+0x17] = 104, /* U+0317: COMBINING ACUTE ACCENT BELOW */
8118 : [896+0x18] = 104, /* U+0318: COMBINING LEFT TACK BELOW */
8119 : [896+0x19] = 104, /* U+0319: COMBINING RIGHT TACK BELOW */
8120 : [896+0x1A] = 104, /* U+031A: COMBINING LEFT ANGLE ABOVE */
8121 : [896+0x1B] = 104, /* U+031B: COMBINING HORN */
8122 : [896+0x1C] = 104, /* U+031C: COMBINING LEFT HALF RING BELOW */
8123 : [896+0x1D] = 104, /* U+031D: COMBINING UP TACK BELOW */
8124 : [896+0x1E] = 104, /* U+031E: COMBINING DOWN TACK BELOW */
8125 : [896+0x1F] = 104, /* U+031F: COMBINING PLUS SIGN BELOW */
8126 : [896+0x20] = 104, /* U+0320: COMBINING MINUS SIGN BELOW */
8127 : [896+0x21] = 104, /* U+0321: COMBINING PALATALIZED HOOK BELOW */
8128 : [896+0x22] = 104, /* U+0322: COMBINING RETROFLEX HOOK BELOW */
8129 : [896+0x23] = 104, /* U+0323: COMBINING DOT BELOW */
8130 : [896+0x24] = 104, /* U+0324: COMBINING DIAERESIS BELOW */
8131 : [896+0x25] = 104, /* U+0325: COMBINING RING BELOW */
8132 : [896+0x26] = 104, /* U+0326: COMBINING COMMA BELOW */
8133 : [896+0x27] = 104, /* U+0327: COMBINING CEDILLA */
8134 : [896+0x28] = 104, /* U+0328: COMBINING OGONEK */
8135 : [896+0x29] = 104, /* U+0329: COMBINING VERTICAL LINE BELOW */
8136 : [896+0x2A] = 104, /* U+032A: COMBINING BRIDGE BELOW */
8137 : [896+0x2B] = 104, /* U+032B: COMBINING INVERTED DOUBLE ARCH BELOW */
8138 : [896+0x2C] = 104, /* U+032C: COMBINING CARON BELOW */
8139 : [896+0x2D] = 104, /* U+032D: COMBINING CIRCUMFLEX ACCENT BELOW */
8140 : [896+0x2E] = 104, /* U+032E: COMBINING BREVE BELOW */
8141 : [896+0x2F] = 104, /* U+032F: COMBINING INVERTED BREVE BELOW */
8142 : [896+0x30] = 104, /* U+0330: COMBINING TILDE BELOW */
8143 : [896+0x31] = 104, /* U+0331: COMBINING MACRON BELOW */
8144 : [896+0x32] = 104, /* U+0332: COMBINING LOW LINE */
8145 : [896+0x33] = 104, /* U+0333: COMBINING DOUBLE LOW LINE */
8146 : [896+0x34] = 104, /* U+0334: COMBINING TILDE OVERLAY */
8147 : [896+0x35] = 104, /* U+0335: COMBINING SHORT STROKE OVERLAY */
8148 : [896+0x36] = 104, /* U+0336: COMBINING LONG STROKE OVERLAY */
8149 : [896+0x37] = 104, /* U+0337: COMBINING SHORT SOLIDUS OVERLAY */
8150 : [896+0x38] = 104, /* U+0338: COMBINING LONG SOLIDUS OVERLAY */
8151 : [896+0x39] = 104, /* U+0339: COMBINING RIGHT HALF RING BELOW */
8152 : [896+0x3A] = 104, /* U+033A: COMBINING INVERTED BRIDGE BELOW */
8153 : [896+0x3B] = 104, /* U+033B: COMBINING SQUARE BELOW */
8154 : [896+0x3C] = 104, /* U+033C: COMBINING SEAGULL BELOW */
8155 : [896+0x3D] = 104, /* U+033D: COMBINING X ABOVE */
8156 : [896+0x3E] = 104, /* U+033E: COMBINING VERTICAL TILDE */
8157 : [896+0x3F] = 104, /* U+033F: COMBINING DOUBLE OVERLINE */
8158 : [0xCD] = 960 - 0x80, /* 315 ... */
8159 : [960+0x00] = 104, /* U+0340: COMBINING GRAVE TONE MARK */
8160 : [960+0x01] = 104, /* U+0341: COMBINING ACUTE TONE MARK */
8161 : [960+0x02] = 104, /* U+0342: COMBINING GREEK PERISPOMENI */
8162 : [960+0x03] = 104, /* U+0343: COMBINING GREEK KORONIS */
8163 : [960+0x04] = 104, /* U+0344: COMBINING GREEK DIALYTIKA TONOS */
8164 : [960+0x05] = 104, /* U+0345: COMBINING GREEK YPOGEGRAMMENI */
8165 : [960+0x06] = 104, /* U+0346: COMBINING BRIDGE ABOVE */
8166 : [960+0x07] = 104, /* U+0347: COMBINING EQUALS SIGN BELOW */
8167 : [960+0x08] = 104, /* U+0348: COMBINING DOUBLE VERTICAL LINE BELOW */
8168 : [960+0x09] = 104, /* U+0349: COMBINING LEFT ANGLE BELOW */
8169 : [960+0x0A] = 104, /* U+034A: COMBINING NOT TILDE ABOVE */
8170 : [960+0x0B] = 104, /* U+034B: COMBINING HOMOTHETIC ABOVE */
8171 : [960+0x0C] = 104, /* U+034C: COMBINING ALMOST EQUAL TO ABOVE */
8172 : [960+0x0D] = 104, /* U+034D: COMBINING LEFT RIGHT ARROW BELOW */
8173 : [960+0x0E] = 104, /* U+034E: COMBINING UPWARDS ARROW BELOW */
8174 : [960+0x0F] = 104, /* U+034F: COMBINING GRAPHEME JOINER */
8175 : [960+0x10] = 104, /* U+0350: COMBINING RIGHT ARROWHEAD ABOVE */
8176 : [960+0x11] = 104, /* U+0351: COMBINING LEFT HALF RING ABOVE */
8177 : [960+0x12] = 104, /* U+0352: COMBINING FERMATA */
8178 : [960+0x13] = 104, /* U+0353: COMBINING X BELOW */
8179 : [960+0x14] = 104, /* U+0354: COMBINING LEFT ARROWHEAD BELOW */
8180 : [960+0x15] = 104, /* U+0355: COMBINING RIGHT ARROWHEAD BELOW */
8181 : [960+0x16] = 104, /* U+0356: COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW */
8182 : [960+0x17] = 104, /* U+0357: COMBINING RIGHT HALF RING ABOVE */
8183 : [960+0x18] = 104, /* U+0358: COMBINING DOT ABOVE RIGHT */
8184 : [960+0x19] = 104, /* U+0359: COMBINING ASTERISK BELOW */
8185 : [960+0x1A] = 104, /* U+035A: COMBINING DOUBLE RING BELOW */
8186 : [960+0x1B] = 104, /* U+035B: COMBINING ZIGZAG ABOVE */
8187 : [960+0x1C] = 104, /* U+035C: COMBINING DOUBLE BREVE BELOW */
8188 : [960+0x1D] = 104, /* U+035D: COMBINING DOUBLE BREVE */
8189 : [960+0x1E] = 104, /* U+035E: COMBINING DOUBLE MACRON */
8190 : [960+0x1F] = 104, /* U+035F: COMBINING DOUBLE MACRON BELOW */
8191 : [960+0x20] = 104, /* U+0360: COMBINING DOUBLE TILDE */
8192 : [960+0x21] = 104, /* U+0361: COMBINING DOUBLE INVERTED BREVE */
8193 : [960+0x22] = 104, /* U+0362: COMBINING DOUBLE RIGHTWARDS ARROW BELOW */
8194 : [960+0x23] = 104, /* U+0363: COMBINING LATIN SMALL LETTER A */
8195 : [960+0x24] = 104, /* U+0364: COMBINING LATIN SMALL LETTER E */
8196 : [960+0x25] = 104, /* U+0365: COMBINING LATIN SMALL LETTER I */
8197 : [960+0x26] = 104, /* U+0366: COMBINING LATIN SMALL LETTER O */
8198 : [960+0x27] = 104, /* U+0367: COMBINING LATIN SMALL LETTER U */
8199 : [960+0x28] = 104, /* U+0368: COMBINING LATIN SMALL LETTER C */
8200 : [960+0x29] = 104, /* U+0369: COMBINING LATIN SMALL LETTER D */
8201 : [960+0x2A] = 104, /* U+036A: COMBINING LATIN SMALL LETTER H */
8202 : [960+0x2B] = 104, /* U+036B: COMBINING LATIN SMALL LETTER M */
8203 : [960+0x2C] = 104, /* U+036C: COMBINING LATIN SMALL LETTER R */
8204 : [960+0x2D] = 104, /* U+036D: COMBINING LATIN SMALL LETTER T */
8205 : [960+0x2E] = 104, /* U+036E: COMBINING LATIN SMALL LETTER V */
8206 : [960+0x2F] = 104, /* U+036F: COMBINING LATIN SMALL LETTER X */
8207 : [0xE1] = 1024 - 0x80, /* 341 ... */
8208 : [1024+0x34] = 1088 - 0x80, /* 341 264 ... */
8209 : [1088+0x00] = 25, /* U+1D00: LATIN LETTER SMALL CAPITAL A */
8210 : [1088+0x01] = 26, /* U+1D01: LATIN LETTER SMALL CAPITAL AE */
8211 : [1088+0x03] = 73, /* U+1D03: LATIN LETTER SMALL CAPITAL BARRED B */
8212 : [1088+0x04] = 27, /* U+1D04: LATIN LETTER SMALL CAPITAL C */
8213 : [1088+0x05] = 30, /* U+1D05: LATIN LETTER SMALL CAPITAL D */
8214 : [1088+0x06] = 30, /* U+1D06: LATIN LETTER SMALL CAPITAL ETH */
8215 : [1088+0x07] = 28, /* U+1D07: LATIN LETTER SMALL CAPITAL E */
8216 : [1088+0x0A] = 52, /* U+1D0A: LATIN LETTER SMALL CAPITAL J */
8217 : [1088+0x0B] = 54, /* U+1D0B: LATIN LETTER SMALL CAPITAL K */
8218 : [1088+0x0C] = 57, /* U+1D0C: LATIN LETTER SMALL CAPITAL L WITH STROKE */
8219 : [1088+0x0D] = 105, /* U+1D0D: LATIN LETTER SMALL CAPITAL M */
8220 : [1088+0x0F] = 32, /* U+1D0F: LATIN LETTER SMALL CAPITAL O */
8221 : [1088+0x18] = 79, /* U+1D18: LATIN LETTER SMALL CAPITAL P */
8222 : [1088+0x1B] = 66, /* U+1D1B: LATIN LETTER SMALL CAPITAL T */
8223 : [1088+0x1C] = 34, /* U+1D1C: LATIN LETTER SMALL CAPITAL U */
8224 : [1088+0x20] = 81, /* U+1D20: LATIN LETTER SMALL CAPITAL V */
8225 : [1088+0x21] = 68, /* U+1D21: LATIN LETTER SMALL CAPITAL W */
8226 : [1088+0x22] = 70, /* U+1D22: LATIN LETTER SMALL CAPITAL Z */
8227 : [1088+0x2C] = 25, /* U+1D2C: MODIFIER LETTER CAPITAL A */
8228 : [1088+0x2E] = 73, /* U+1D2E: MODIFIER LETTER CAPITAL B */
8229 : [1088+0x30] = 30, /* U+1D30: MODIFIER LETTER CAPITAL D */
8230 : [1088+0x31] = 28, /* U+1D31: MODIFIER LETTER CAPITAL E */
8231 : [1088+0x33] = 46, /* U+1D33: MODIFIER LETTER CAPITAL G */
8232 : [1088+0x34] = 48, /* U+1D34: MODIFIER LETTER CAPITAL H */
8233 : [1088+0x35] = 29, /* U+1D35: MODIFIER LETTER CAPITAL I */
8234 : [1088+0x36] = 52, /* U+1D36: MODIFIER LETTER CAPITAL J */
8235 : [1088+0x37] = 54, /* U+1D37: MODIFIER LETTER CAPITAL K */
8236 : [1088+0x38] = 57, /* U+1D38: MODIFIER LETTER CAPITAL L */
8237 : [1088+0x39] = 105, /* U+1D39: MODIFIER LETTER CAPITAL M */
8238 : [1088+0x3A] = 31, /* U+1D3A: MODIFIER LETTER CAPITAL N */
8239 : [1088+0x3C] = 32, /* U+1D3C: MODIFIER LETTER CAPITAL O */
8240 : [1088+0x3E] = 79, /* U+1D3E: MODIFIER LETTER CAPITAL P */
8241 : [1088+0x3F] = 62, /* U+1D3F: MODIFIER LETTER CAPITAL R */
8242 : [1024+0x35] = 1152 - 0x80, /* 341 265 ... */
8243 : [1152+0x00] = 66, /* U+1D40: MODIFIER LETTER CAPITAL T */
8244 : [1152+0x01] = 34, /* U+1D41: MODIFIER LETTER CAPITAL U */
8245 : [1152+0x02] = 68, /* U+1D42: MODIFIER LETTER CAPITAL W */
8246 : [1152+0x03] = 8, /* U+1D43: MODIFIER LETTER SMALL A */
8247 : [1152+0x07] = 72, /* U+1D47: MODIFIER LETTER SMALL B */
8248 : [1152+0x08] = 41, /* U+1D48: MODIFIER LETTER SMALL D */
8249 : [1152+0x09] = 39, /* U+1D49: MODIFIER LETTER SMALL E */
8250 : [1152+0x0D] = 47, /* U+1D4D: MODIFIER LETTER SMALL G */
8251 : [1152+0x0F] = 55, /* U+1D4F: MODIFIER LETTER SMALL K */
8252 : [1152+0x10] = 93, /* U+1D50: MODIFIER LETTER SMALL M */
8253 : [1152+0x12] = 20, /* U+1D52: MODIFIER LETTER SMALL O */
8254 : [1152+0x16] = 80, /* U+1D56: MODIFIER LETTER SMALL P */
8255 : [1152+0x17] = 67, /* U+1D57: MODIFIER LETTER SMALL T */
8256 : [1152+0x18] = 16, /* U+1D58: MODIFIER LETTER SMALL U */
8257 : [1152+0x1B] = 94, /* U+1D5B: MODIFIER LETTER SMALL V */
8258 : [1152+0x22] = 40, /* U+1D62: LATIN SUBSCRIPT SMALL LETTER I */
8259 : [1152+0x23] = 63, /* U+1D63: LATIN SUBSCRIPT SMALL LETTER R */
8260 : [1152+0x24] = 16, /* U+1D64: LATIN SUBSCRIPT SMALL LETTER U */
8261 : [1152+0x25] = 94, /* U+1D65: LATIN SUBSCRIPT SMALL LETTER V */
8262 : [1152+0x2B] = 106, /* U+1D6B: LATIN SMALL LETTER UE */
8263 : [1152+0x2C] = 72, /* U+1D6C: LATIN SMALL LETTER B WITH MIDDLE TILDE */
8264 : [1152+0x2D] = 41, /* U+1D6D: LATIN SMALL LETTER D WITH MIDDLE TILDE */
8265 : [1152+0x2E] = 75, /* U+1D6E: LATIN SMALL LETTER F WITH MIDDLE TILDE */
8266 : [1152+0x2F] = 93, /* U+1D6F: LATIN SMALL LETTER M WITH MIDDLE TILDE */
8267 : [1152+0x30] = 42, /* U+1D70: LATIN SMALL LETTER N WITH MIDDLE TILDE */
8268 : [1152+0x31] = 80, /* U+1D71: LATIN SMALL LETTER P WITH MIDDLE TILDE */
8269 : [1152+0x32] = 63, /* U+1D72: LATIN SMALL LETTER R WITH MIDDLE TILDE */
8270 : [1152+0x33] = 63, /* U+1D73: LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE */
8271 : [1152+0x34] = 65, /* U+1D74: LATIN SMALL LETTER S WITH MIDDLE TILDE */
8272 : [1152+0x35] = 67, /* U+1D75: LATIN SMALL LETTER T WITH MIDDLE TILDE */
8273 : [1152+0x36] = 71, /* U+1D76: LATIN SMALL LETTER Z WITH MIDDLE TILDE */
8274 : [1152+0x3A] = 45, /* U+1D7A: LATIN SMALL LETTER TH WITH STRIKETHROUGH */
8275 : [1152+0x3B] = 29, /* U+1D7B: LATIN SMALL CAPITAL LETTER I WITH STROKE */
8276 : [1152+0x3D] = 80, /* U+1D7D: LATIN SMALL LETTER P WITH STROKE */
8277 : [1152+0x3E] = 34, /* U+1D7E: LATIN SMALL CAPITAL LETTER U WITH STROKE */
8278 : [1024+0x36] = 1216 - 0x80, /* 341 266 ... */
8279 : [1216+0x00] = 72, /* U+1D80: LATIN SMALL LETTER B WITH PALATAL HOOK */
8280 : [1216+0x01] = 41, /* U+1D81: LATIN SMALL LETTER D WITH PALATAL HOOK */
8281 : [1216+0x02] = 75, /* U+1D82: LATIN SMALL LETTER F WITH PALATAL HOOK */
8282 : [1216+0x03] = 47, /* U+1D83: LATIN SMALL LETTER G WITH PALATAL HOOK */
8283 : [1216+0x04] = 55, /* U+1D84: LATIN SMALL LETTER K WITH PALATAL HOOK */
8284 : [1216+0x05] = 58, /* U+1D85: LATIN SMALL LETTER L WITH PALATAL HOOK */
8285 : [1216+0x06] = 93, /* U+1D86: LATIN SMALL LETTER M WITH PALATAL HOOK */
8286 : [1216+0x07] = 42, /* U+1D87: LATIN SMALL LETTER N WITH PALATAL HOOK */
8287 : [1216+0x08] = 80, /* U+1D88: LATIN SMALL LETTER P WITH PALATAL HOOK */
8288 : [1216+0x09] = 63, /* U+1D89: LATIN SMALL LETTER R WITH PALATAL HOOK */
8289 : [1216+0x0A] = 65, /* U+1D8A: LATIN SMALL LETTER S WITH PALATAL HOOK */
8290 : [1216+0x0C] = 94, /* U+1D8C: LATIN SMALL LETTER V WITH PALATAL HOOK */
8291 : [1216+0x0D] = 33, /* U+1D8D: LATIN SMALL LETTER X WITH PALATAL HOOK */
8292 : [1216+0x0E] = 71, /* U+1D8E: LATIN SMALL LETTER Z WITH PALATAL HOOK */
8293 : [1216+0x0F] = 8, /* U+1D8F: LATIN SMALL LETTER A WITH RETROFLEX HOOK */
8294 : [1216+0x11] = 41, /* U+1D91: LATIN SMALL LETTER D WITH HOOK AND TAIL */
8295 : [1216+0x12] = 39, /* U+1D92: LATIN SMALL LETTER E WITH RETROFLEX HOOK */
8296 : [1216+0x13] = 39, /* U+1D93: LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK */
8297 : [1216+0x16] = 40, /* U+1D96: LATIN SMALL LETTER I WITH RETROFLEX HOOK */
8298 : [1216+0x19] = 16, /* U+1D99: LATIN SMALL LETTER U WITH RETROFLEX HOOK */
8299 : [1216+0x1C] = 3, /* U+1D9C: MODIFIER LETTER SMALL C */
8300 : [1216+0x20] = 75, /* U+1DA0: MODIFIER LETTER SMALL F */
8301 : [1216+0x3B] = 71, /* U+1DBB: MODIFIER LETTER SMALL Z */
8302 : [1024+0x37] = 1280 - 0x80, /* 341 267 ... */
8303 : [1280+0x00] = 104, /* U+1DC0: COMBINING DOTTED GRAVE ACCENT */
8304 : [1280+0x01] = 104, /* U+1DC1: COMBINING DOTTED ACUTE ACCENT */
8305 : [1280+0x02] = 104, /* U+1DC2: COMBINING SNAKE BELOW */
8306 : [1280+0x03] = 104, /* U+1DC3: COMBINING SUSPENSION MARK */
8307 : [1280+0x04] = 104, /* U+1DC4: COMBINING MACRON-ACUTE */
8308 : [1280+0x05] = 104, /* U+1DC5: COMBINING GRAVE-MACRON */
8309 : [1280+0x06] = 104, /* U+1DC6: COMBINING MACRON-GRAVE */
8310 : [1280+0x07] = 104, /* U+1DC7: COMBINING ACUTE-MACRON */
8311 : [1280+0x08] = 104, /* U+1DC8: COMBINING GRAVE-ACUTE-GRAVE */
8312 : [1280+0x09] = 104, /* U+1DC9: COMBINING ACUTE-GRAVE-ACUTE */
8313 : [1280+0x0A] = 104, /* U+1DCA: COMBINING LATIN SMALL LETTER R BELOW */
8314 : [1280+0x0B] = 104, /* U+1DCB: COMBINING BREVE-MACRON */
8315 : [1280+0x0C] = 104, /* U+1DCC: COMBINING MACRON-BREVE */
8316 : [1280+0x0D] = 104, /* U+1DCD: COMBINING DOUBLE CIRCUMFLEX ABOVE */
8317 : [1280+0x0E] = 104, /* U+1DCE: COMBINING OGONEK ABOVE */
8318 : [1280+0x0F] = 104, /* U+1DCF: COMBINING ZIGZAG BELOW */
8319 : [1280+0x10] = 104, /* U+1DD0: COMBINING IS BELOW */
8320 : [1280+0x11] = 104, /* U+1DD1: COMBINING UR ABOVE */
8321 : [1280+0x12] = 104, /* U+1DD2: COMBINING US ABOVE */
8322 : [1280+0x13] = 104, /* U+1DD3: COMBINING LATIN SMALL LETTER FLATTENED OPEN A ABOVE */
8323 : [1280+0x14] = 104, /* U+1DD4: COMBINING LATIN SMALL LETTER AE */
8324 : [1280+0x15] = 104, /* U+1DD5: COMBINING LATIN SMALL LETTER AO */
8325 : [1280+0x16] = 104, /* U+1DD6: COMBINING LATIN SMALL LETTER AV */
8326 : [1280+0x17] = 104, /* U+1DD7: COMBINING LATIN SMALL LETTER C CEDILLA */
8327 : [1280+0x18] = 104, /* U+1DD8: COMBINING LATIN SMALL LETTER INSULAR D */
8328 : [1280+0x19] = 104, /* U+1DD9: COMBINING LATIN SMALL LETTER ETH */
8329 : [1280+0x1A] = 104, /* U+1DDA: COMBINING LATIN SMALL LETTER G */
8330 : [1280+0x1B] = 104, /* U+1DDB: COMBINING LATIN LETTER SMALL CAPITAL G */
8331 : [1280+0x1C] = 104, /* U+1DDC: COMBINING LATIN SMALL LETTER K */
8332 : [1280+0x1D] = 104, /* U+1DDD: COMBINING LATIN SMALL LETTER L */
8333 : [1280+0x1E] = 104, /* U+1DDE: COMBINING LATIN LETTER SMALL CAPITAL L */
8334 : [1280+0x1F] = 104, /* U+1DDF: COMBINING LATIN LETTER SMALL CAPITAL M */
8335 : [1280+0x20] = 104, /* U+1DE0: COMBINING LATIN SMALL LETTER N */
8336 : [1280+0x21] = 104, /* U+1DE1: COMBINING LATIN LETTER SMALL CAPITAL N */
8337 : [1280+0x22] = 104, /* U+1DE2: COMBINING LATIN LETTER SMALL CAPITAL R */
8338 : [1280+0x23] = 104, /* U+1DE3: COMBINING LATIN SMALL LETTER R ROTUNDA */
8339 : [1280+0x24] = 104, /* U+1DE4: COMBINING LATIN SMALL LETTER S */
8340 : [1280+0x25] = 104, /* U+1DE5: COMBINING LATIN SMALL LETTER LONG S */
8341 : [1280+0x26] = 104, /* U+1DE6: COMBINING LATIN SMALL LETTER Z */
8342 : [1280+0x27] = 104, /* U+1DE7: COMBINING LATIN SMALL LETTER ALPHA */
8343 : [1280+0x28] = 104, /* U+1DE8: COMBINING LATIN SMALL LETTER B */
8344 : [1280+0x29] = 104, /* U+1DE9: COMBINING LATIN SMALL LETTER BETA */
8345 : [1280+0x2A] = 104, /* U+1DEA: COMBINING LATIN SMALL LETTER SCHWA */
8346 : [1280+0x2B] = 104, /* U+1DEB: COMBINING LATIN SMALL LETTER F */
8347 : [1280+0x2C] = 104, /* U+1DEC: COMBINING LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE */
8348 : [1280+0x2D] = 104, /* U+1DED: COMBINING LATIN SMALL LETTER O WITH LIGHT CENTRALIZATION STROKE */
8349 : [1280+0x2E] = 104, /* U+1DEE: COMBINING LATIN SMALL LETTER P */
8350 : [1280+0x2F] = 104, /* U+1DEF: COMBINING LATIN SMALL LETTER ESH */
8351 : [1280+0x30] = 104, /* U+1DF0: COMBINING LATIN SMALL LETTER U WITH LIGHT CENTRALIZATION STROKE */
8352 : [1280+0x31] = 104, /* U+1DF1: COMBINING LATIN SMALL LETTER W */
8353 : [1280+0x32] = 104, /* U+1DF2: COMBINING LATIN SMALL LETTER A WITH DIAERESIS */
8354 : [1280+0x33] = 104, /* U+1DF3: COMBINING LATIN SMALL LETTER O WITH DIAERESIS */
8355 : [1280+0x34] = 104, /* U+1DF4: COMBINING LATIN SMALL LETTER U WITH DIAERESIS */
8356 : [1280+0x35] = 104, /* U+1DF5: COMBINING UP TACK ABOVE */
8357 : [1280+0x36] = 104, /* U+1DF6: COMBINING KAVYKA ABOVE RIGHT */
8358 : [1280+0x37] = 104, /* U+1DF7: COMBINING KAVYKA ABOVE LEFT */
8359 : [1280+0x38] = 104, /* U+1DF8: COMBINING DOT ABOVE LEFT */
8360 : [1280+0x39] = 104, /* U+1DF9: COMBINING WIDE INVERTED BRIDGE BELOW */
8361 : [1280+0x3A] = 104, /* U+1DFA: COMBINING DOT BELOW LEFT */
8362 : [1280+0x3B] = 104, /* U+1DFB: COMBINING DELETION MARK */
8363 : [1280+0x3C] = 104, /* U+1DFC: COMBINING DOUBLE INVERTED BREVE BELOW */
8364 : [1280+0x3D] = 104, /* U+1DFD: COMBINING ALMOST EQUAL TO BELOW */
8365 : [1280+0x3E] = 104, /* U+1DFE: COMBINING LEFT ARROWHEAD ABOVE */
8366 : [1280+0x3F] = 104, /* U+1DFF: COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW */
8367 : [1024+0x38] = 1344 - 0x80, /* 341 270 ... */
8368 : [1344+0x00] = 25, /* U+1E00: LATIN CAPITAL LETTER A WITH RING BELOW */
8369 : [1344+0x01] = 8, /* U+1E01: LATIN SMALL LETTER A WITH RING BELOW */
8370 : [1344+0x02] = 73, /* U+1E02: LATIN CAPITAL LETTER B WITH DOT ABOVE */
8371 : [1344+0x03] = 72, /* U+1E03: LATIN SMALL LETTER B WITH DOT ABOVE */
8372 : [1344+0x04] = 73, /* U+1E04: LATIN CAPITAL LETTER B WITH DOT BELOW */
8373 : [1344+0x05] = 72, /* U+1E05: LATIN SMALL LETTER B WITH DOT BELOW */
8374 : [1344+0x06] = 73, /* U+1E06: LATIN CAPITAL LETTER B WITH LINE BELOW */
8375 : [1344+0x07] = 72, /* U+1E07: LATIN SMALL LETTER B WITH LINE BELOW */
8376 : [1344+0x08] = 27, /* U+1E08: LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE */
8377 : [1344+0x09] = 3, /* U+1E09: LATIN SMALL LETTER C WITH CEDILLA AND ACUTE */
8378 : [1344+0x0A] = 30, /* U+1E0A: LATIN CAPITAL LETTER D WITH DOT ABOVE */
8379 : [1344+0x0B] = 41, /* U+1E0B: LATIN SMALL LETTER D WITH DOT ABOVE */
8380 : [1344+0x0C] = 30, /* U+1E0C: LATIN CAPITAL LETTER D WITH DOT BELOW */
8381 : [1344+0x0D] = 41, /* U+1E0D: LATIN SMALL LETTER D WITH DOT BELOW */
8382 : [1344+0x0E] = 30, /* U+1E0E: LATIN CAPITAL LETTER D WITH LINE BELOW */
8383 : [1344+0x0F] = 41, /* U+1E0F: LATIN SMALL LETTER D WITH LINE BELOW */
8384 : [1344+0x10] = 30, /* U+1E10: LATIN CAPITAL LETTER D WITH CEDILLA */
8385 : [1344+0x11] = 41, /* U+1E11: LATIN SMALL LETTER D WITH CEDILLA */
8386 : [1344+0x12] = 30, /* U+1E12: LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW */
8387 : [1344+0x13] = 41, /* U+1E13: LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW */
8388 : [1344+0x14] = 28, /* U+1E14: LATIN CAPITAL LETTER E WITH MACRON AND GRAVE */
8389 : [1344+0x15] = 39, /* U+1E15: LATIN SMALL LETTER E WITH MACRON AND GRAVE */
8390 : [1344+0x16] = 28, /* U+1E16: LATIN CAPITAL LETTER E WITH MACRON AND ACUTE */
8391 : [1344+0x17] = 39, /* U+1E17: LATIN SMALL LETTER E WITH MACRON AND ACUTE */
8392 : [1344+0x18] = 28, /* U+1E18: LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW */
8393 : [1344+0x19] = 39, /* U+1E19: LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW */
8394 : [1344+0x1A] = 28, /* U+1E1A: LATIN CAPITAL LETTER E WITH TILDE BELOW */
8395 : [1344+0x1B] = 39, /* U+1E1B: LATIN SMALL LETTER E WITH TILDE BELOW */
8396 : [1344+0x1C] = 28, /* U+1E1C: LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE */
8397 : [1344+0x1D] = 39, /* U+1E1D: LATIN SMALL LETTER E WITH CEDILLA AND BREVE */
8398 : [1344+0x1E] = 74, /* U+1E1E: LATIN CAPITAL LETTER F WITH DOT ABOVE */
8399 : [1344+0x1F] = 75, /* U+1E1F: LATIN SMALL LETTER F WITH DOT ABOVE */
8400 : [1344+0x20] = 46, /* U+1E20: LATIN CAPITAL LETTER G WITH MACRON */
8401 : [1344+0x21] = 47, /* U+1E21: LATIN SMALL LETTER G WITH MACRON */
8402 : [1344+0x22] = 48, /* U+1E22: LATIN CAPITAL LETTER H WITH DOT ABOVE */
8403 : [1344+0x23] = 49, /* U+1E23: LATIN SMALL LETTER H WITH DOT ABOVE */
8404 : [1344+0x24] = 48, /* U+1E24: LATIN CAPITAL LETTER H WITH DOT BELOW */
8405 : [1344+0x25] = 49, /* U+1E25: LATIN SMALL LETTER H WITH DOT BELOW */
8406 : [1344+0x26] = 48, /* U+1E26: LATIN CAPITAL LETTER H WITH DIAERESIS */
8407 : [1344+0x27] = 49, /* U+1E27: LATIN SMALL LETTER H WITH DIAERESIS */
8408 : [1344+0x28] = 48, /* U+1E28: LATIN CAPITAL LETTER H WITH CEDILLA */
8409 : [1344+0x29] = 49, /* U+1E29: LATIN SMALL LETTER H WITH CEDILLA */
8410 : [1344+0x2A] = 48, /* U+1E2A: LATIN CAPITAL LETTER H WITH BREVE BELOW */
8411 : [1344+0x2B] = 49, /* U+1E2B: LATIN SMALL LETTER H WITH BREVE BELOW */
8412 : [1344+0x2C] = 29, /* U+1E2C: LATIN CAPITAL LETTER I WITH TILDE BELOW */
8413 : [1344+0x2D] = 40, /* U+1E2D: LATIN SMALL LETTER I WITH TILDE BELOW */
8414 : [1344+0x2E] = 29, /* U+1E2E: LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE */
8415 : [1344+0x2F] = 40, /* U+1E2F: LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE */
8416 : [1344+0x30] = 54, /* U+1E30: LATIN CAPITAL LETTER K WITH ACUTE */
8417 : [1344+0x31] = 55, /* U+1E31: LATIN SMALL LETTER K WITH ACUTE */
8418 : [1344+0x32] = 54, /* U+1E32: LATIN CAPITAL LETTER K WITH DOT BELOW */
8419 : [1344+0x33] = 55, /* U+1E33: LATIN SMALL LETTER K WITH DOT BELOW */
8420 : [1344+0x34] = 54, /* U+1E34: LATIN CAPITAL LETTER K WITH LINE BELOW */
8421 : [1344+0x35] = 55, /* U+1E35: LATIN SMALL LETTER K WITH LINE BELOW */
8422 : [1344+0x36] = 57, /* U+1E36: LATIN CAPITAL LETTER L WITH DOT BELOW */
8423 : [1344+0x37] = 58, /* U+1E37: LATIN SMALL LETTER L WITH DOT BELOW */
8424 : [1344+0x38] = 57, /* U+1E38: LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON */
8425 : [1344+0x39] = 58, /* U+1E39: LATIN SMALL LETTER L WITH DOT BELOW AND MACRON */
8426 : [1344+0x3A] = 57, /* U+1E3A: LATIN CAPITAL LETTER L WITH LINE BELOW */
8427 : [1344+0x3B] = 58, /* U+1E3B: LATIN SMALL LETTER L WITH LINE BELOW */
8428 : [1344+0x3C] = 57, /* U+1E3C: LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW */
8429 : [1344+0x3D] = 58, /* U+1E3D: LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW */
8430 : [1344+0x3E] = 105, /* U+1E3E: LATIN CAPITAL LETTER M WITH ACUTE */
8431 : [1344+0x3F] = 93, /* U+1E3F: LATIN SMALL LETTER M WITH ACUTE */
8432 : [1024+0x39] = 1408 - 0x80, /* 341 271 ... */
8433 : [1408+0x00] = 105, /* U+1E40: LATIN CAPITAL LETTER M WITH DOT ABOVE */
8434 : [1408+0x01] = 93, /* U+1E41: LATIN SMALL LETTER M WITH DOT ABOVE */
8435 : [1408+0x02] = 105, /* U+1E42: LATIN CAPITAL LETTER M WITH DOT BELOW */
8436 : [1408+0x03] = 93, /* U+1E43: LATIN SMALL LETTER M WITH DOT BELOW */
8437 : [1408+0x04] = 31, /* U+1E44: LATIN CAPITAL LETTER N WITH DOT ABOVE */
8438 : [1408+0x05] = 42, /* U+1E45: LATIN SMALL LETTER N WITH DOT ABOVE */
8439 : [1408+0x06] = 31, /* U+1E46: LATIN CAPITAL LETTER N WITH DOT BELOW */
8440 : [1408+0x07] = 42, /* U+1E47: LATIN SMALL LETTER N WITH DOT BELOW */
8441 : [1408+0x08] = 31, /* U+1E48: LATIN CAPITAL LETTER N WITH LINE BELOW */
8442 : [1408+0x09] = 42, /* U+1E49: LATIN SMALL LETTER N WITH LINE BELOW */
8443 : [1408+0x0A] = 31, /* U+1E4A: LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW */
8444 : [1408+0x0B] = 42, /* U+1E4B: LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW */
8445 : [1408+0x0C] = 32, /* U+1E4C: LATIN CAPITAL LETTER O WITH TILDE AND ACUTE */
8446 : [1408+0x0D] = 20, /* U+1E4D: LATIN SMALL LETTER O WITH TILDE AND ACUTE */
8447 : [1408+0x0E] = 32, /* U+1E4E: LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS */
8448 : [1408+0x0F] = 20, /* U+1E4F: LATIN SMALL LETTER O WITH TILDE AND DIAERESIS */
8449 : [1408+0x10] = 32, /* U+1E50: LATIN CAPITAL LETTER O WITH MACRON AND GRAVE */
8450 : [1408+0x11] = 20, /* U+1E51: LATIN SMALL LETTER O WITH MACRON AND GRAVE */
8451 : [1408+0x12] = 32, /* U+1E52: LATIN CAPITAL LETTER O WITH MACRON AND ACUTE */
8452 : [1408+0x13] = 20, /* U+1E53: LATIN SMALL LETTER O WITH MACRON AND ACUTE */
8453 : [1408+0x14] = 79, /* U+1E54: LATIN CAPITAL LETTER P WITH ACUTE */
8454 : [1408+0x15] = 80, /* U+1E55: LATIN SMALL LETTER P WITH ACUTE */
8455 : [1408+0x16] = 79, /* U+1E56: LATIN CAPITAL LETTER P WITH DOT ABOVE */
8456 : [1408+0x17] = 80, /* U+1E57: LATIN SMALL LETTER P WITH DOT ABOVE */
8457 : [1408+0x18] = 62, /* U+1E58: LATIN CAPITAL LETTER R WITH DOT ABOVE */
8458 : [1408+0x19] = 63, /* U+1E59: LATIN SMALL LETTER R WITH DOT ABOVE */
8459 : [1408+0x1A] = 62, /* U+1E5A: LATIN CAPITAL LETTER R WITH DOT BELOW */
8460 : [1408+0x1B] = 63, /* U+1E5B: LATIN SMALL LETTER R WITH DOT BELOW */
8461 : [1408+0x1C] = 62, /* U+1E5C: LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON */
8462 : [1408+0x1D] = 63, /* U+1E5D: LATIN SMALL LETTER R WITH DOT BELOW AND MACRON */
8463 : [1408+0x1E] = 62, /* U+1E5E: LATIN CAPITAL LETTER R WITH LINE BELOW */
8464 : [1408+0x1F] = 63, /* U+1E5F: LATIN SMALL LETTER R WITH LINE BELOW */
8465 : [1408+0x20] = 64, /* U+1E60: LATIN CAPITAL LETTER S WITH DOT ABOVE */
8466 : [1408+0x21] = 65, /* U+1E61: LATIN SMALL LETTER S WITH DOT ABOVE */
8467 : [1408+0x22] = 64, /* U+1E62: LATIN CAPITAL LETTER S WITH DOT BELOW */
8468 : [1408+0x23] = 65, /* U+1E63: LATIN SMALL LETTER S WITH DOT BELOW */
8469 : [1408+0x24] = 64, /* U+1E64: LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE */
8470 : [1408+0x25] = 65, /* U+1E65: LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE */
8471 : [1408+0x26] = 64, /* U+1E66: LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE */
8472 : [1408+0x27] = 65, /* U+1E67: LATIN SMALL LETTER S WITH CARON AND DOT ABOVE */
8473 : [1408+0x28] = 64, /* U+1E68: LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE */
8474 : [1408+0x29] = 65, /* U+1E69: LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE */
8475 : [1408+0x2A] = 66, /* U+1E6A: LATIN CAPITAL LETTER T WITH DOT ABOVE */
8476 : [1408+0x2B] = 67, /* U+1E6B: LATIN SMALL LETTER T WITH DOT ABOVE */
8477 : [1408+0x2C] = 66, /* U+1E6C: LATIN CAPITAL LETTER T WITH DOT BELOW */
8478 : [1408+0x2D] = 67, /* U+1E6D: LATIN SMALL LETTER T WITH DOT BELOW */
8479 : [1408+0x2E] = 66, /* U+1E6E: LATIN CAPITAL LETTER T WITH LINE BELOW */
8480 : [1408+0x2F] = 67, /* U+1E6F: LATIN SMALL LETTER T WITH LINE BELOW */
8481 : [1408+0x30] = 66, /* U+1E70: LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW */
8482 : [1408+0x31] = 67, /* U+1E71: LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW */
8483 : [1408+0x32] = 34, /* U+1E72: LATIN CAPITAL LETTER U WITH DIAERESIS BELOW */
8484 : [1408+0x33] = 16, /* U+1E73: LATIN SMALL LETTER U WITH DIAERESIS BELOW */
8485 : [1408+0x34] = 34, /* U+1E74: LATIN CAPITAL LETTER U WITH TILDE BELOW */
8486 : [1408+0x35] = 16, /* U+1E75: LATIN SMALL LETTER U WITH TILDE BELOW */
8487 : [1408+0x36] = 34, /* U+1E76: LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW */
8488 : [1408+0x37] = 16, /* U+1E77: LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW */
8489 : [1408+0x38] = 34, /* U+1E78: LATIN CAPITAL LETTER U WITH TILDE AND ACUTE */
8490 : [1408+0x39] = 16, /* U+1E79: LATIN SMALL LETTER U WITH TILDE AND ACUTE */
8491 : [1408+0x3A] = 34, /* U+1E7A: LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS */
8492 : [1408+0x3B] = 16, /* U+1E7B: LATIN SMALL LETTER U WITH MACRON AND DIAERESIS */
8493 : [1408+0x3C] = 81, /* U+1E7C: LATIN CAPITAL LETTER V WITH TILDE */
8494 : [1408+0x3D] = 94, /* U+1E7D: LATIN SMALL LETTER V WITH TILDE */
8495 : [1408+0x3E] = 81, /* U+1E7E: LATIN CAPITAL LETTER V WITH DOT BELOW */
8496 : [1408+0x3F] = 94, /* U+1E7F: LATIN SMALL LETTER V WITH DOT BELOW */
8497 : [1024+0x3A] = 1472 - 0x80, /* 341 272 ... */
8498 : [1472+0x00] = 68, /* U+1E80: LATIN CAPITAL LETTER W WITH GRAVE */
8499 : [1472+0x01] = 69, /* U+1E81: LATIN SMALL LETTER W WITH GRAVE */
8500 : [1472+0x02] = 68, /* U+1E82: LATIN CAPITAL LETTER W WITH ACUTE */
8501 : [1472+0x03] = 69, /* U+1E83: LATIN SMALL LETTER W WITH ACUTE */
8502 : [1472+0x04] = 68, /* U+1E84: LATIN CAPITAL LETTER W WITH DIAERESIS */
8503 : [1472+0x05] = 69, /* U+1E85: LATIN SMALL LETTER W WITH DIAERESIS */
8504 : [1472+0x06] = 68, /* U+1E86: LATIN CAPITAL LETTER W WITH DOT ABOVE */
8505 : [1472+0x07] = 69, /* U+1E87: LATIN SMALL LETTER W WITH DOT ABOVE */
8506 : [1472+0x08] = 68, /* U+1E88: LATIN CAPITAL LETTER W WITH DOT BELOW */
8507 : [1472+0x09] = 69, /* U+1E89: LATIN SMALL LETTER W WITH DOT BELOW */
8508 : [1472+0x0A] = 107, /* U+1E8A: LATIN CAPITAL LETTER X WITH DOT ABOVE */
8509 : [1472+0x0B] = 33, /* U+1E8B: LATIN SMALL LETTER X WITH DOT ABOVE */
8510 : [1472+0x0C] = 107, /* U+1E8C: LATIN CAPITAL LETTER X WITH DIAERESIS */
8511 : [1472+0x0D] = 33, /* U+1E8D: LATIN SMALL LETTER X WITH DIAERESIS */
8512 : [1472+0x0E] = 35, /* U+1E8E: LATIN CAPITAL LETTER Y WITH DOT ABOVE */
8513 : [1472+0x0F] = 44, /* U+1E8F: LATIN SMALL LETTER Y WITH DOT ABOVE */
8514 : [1472+0x10] = 70, /* U+1E90: LATIN CAPITAL LETTER Z WITH CIRCUMFLEX */
8515 : [1472+0x11] = 71, /* U+1E91: LATIN SMALL LETTER Z WITH CIRCUMFLEX */
8516 : [1472+0x12] = 70, /* U+1E92: LATIN CAPITAL LETTER Z WITH DOT BELOW */
8517 : [1472+0x13] = 71, /* U+1E93: LATIN SMALL LETTER Z WITH DOT BELOW */
8518 : [1472+0x14] = 70, /* U+1E94: LATIN CAPITAL LETTER Z WITH LINE BELOW */
8519 : [1472+0x15] = 71, /* U+1E95: LATIN SMALL LETTER Z WITH LINE BELOW */
8520 : [1472+0x16] = 49, /* U+1E96: LATIN SMALL LETTER H WITH LINE BELOW */
8521 : [1472+0x17] = 67, /* U+1E97: LATIN SMALL LETTER T WITH DIAERESIS */
8522 : [1472+0x18] = 69, /* U+1E98: LATIN SMALL LETTER W WITH RING ABOVE */
8523 : [1472+0x19] = 44, /* U+1E99: LATIN SMALL LETTER Y WITH RING ABOVE */
8524 : [1472+0x1A] = 8, /* U+1E9A: LATIN SMALL LETTER A WITH RIGHT HALF RING */
8525 : [1472+0x1C] = 65, /* U+1E9C: LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE */
8526 : [1472+0x1D] = 65, /* U+1E9D: LATIN SMALL LETTER LONG S WITH HIGH STROKE */
8527 : [1472+0x1E] = 108, /* U+1E9E: LATIN CAPITAL LETTER SHARP S */
8528 : [1472+0x20] = 25, /* U+1EA0: LATIN CAPITAL LETTER A WITH DOT BELOW */
8529 : [1472+0x21] = 8, /* U+1EA1: LATIN SMALL LETTER A WITH DOT BELOW */
8530 : [1472+0x22] = 25, /* U+1EA2: LATIN CAPITAL LETTER A WITH HOOK ABOVE */
8531 : [1472+0x23] = 8, /* U+1EA3: LATIN SMALL LETTER A WITH HOOK ABOVE */
8532 : [1472+0x24] = 25, /* U+1EA4: LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE */
8533 : [1472+0x25] = 8, /* U+1EA5: LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE */
8534 : [1472+0x26] = 25, /* U+1EA6: LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE */
8535 : [1472+0x27] = 8, /* U+1EA7: LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE */
8536 : [1472+0x28] = 25, /* U+1EA8: LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE */
8537 : [1472+0x29] = 8, /* U+1EA9: LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE */
8538 : [1472+0x2A] = 25, /* U+1EAA: LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE */
8539 : [1472+0x2B] = 8, /* U+1EAB: LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE */
8540 : [1472+0x2C] = 25, /* U+1EAC: LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW */
8541 : [1472+0x2D] = 8, /* U+1EAD: LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW */
8542 : [1472+0x2E] = 25, /* U+1EAE: LATIN CAPITAL LETTER A WITH BREVE AND ACUTE */
8543 : [1472+0x2F] = 8, /* U+1EAF: LATIN SMALL LETTER A WITH BREVE AND ACUTE */
8544 : [1472+0x30] = 25, /* U+1EB0: LATIN CAPITAL LETTER A WITH BREVE AND GRAVE */
8545 : [1472+0x31] = 8, /* U+1EB1: LATIN SMALL LETTER A WITH BREVE AND GRAVE */
8546 : [1472+0x32] = 25, /* U+1EB2: LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE */
8547 : [1472+0x33] = 8, /* U+1EB3: LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE */
8548 : [1472+0x34] = 25, /* U+1EB4: LATIN CAPITAL LETTER A WITH BREVE AND TILDE */
8549 : [1472+0x35] = 8, /* U+1EB5: LATIN SMALL LETTER A WITH BREVE AND TILDE */
8550 : [1472+0x36] = 25, /* U+1EB6: LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW */
8551 : [1472+0x37] = 8, /* U+1EB7: LATIN SMALL LETTER A WITH BREVE AND DOT BELOW */
8552 : [1472+0x38] = 28, /* U+1EB8: LATIN CAPITAL LETTER E WITH DOT BELOW */
8553 : [1472+0x39] = 39, /* U+1EB9: LATIN SMALL LETTER E WITH DOT BELOW */
8554 : [1472+0x3A] = 28, /* U+1EBA: LATIN CAPITAL LETTER E WITH HOOK ABOVE */
8555 : [1472+0x3B] = 39, /* U+1EBB: LATIN SMALL LETTER E WITH HOOK ABOVE */
8556 : [1472+0x3C] = 28, /* U+1EBC: LATIN CAPITAL LETTER E WITH TILDE */
8557 : [1472+0x3D] = 39, /* U+1EBD: LATIN SMALL LETTER E WITH TILDE */
8558 : [1472+0x3E] = 28, /* U+1EBE: LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE */
8559 : [1472+0x3F] = 39, /* U+1EBF: LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE */
8560 : [1024+0x3B] = 1536 - 0x80, /* 341 273 ... */
8561 : [1536+0x00] = 28, /* U+1EC0: LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE */
8562 : [1536+0x01] = 39, /* U+1EC1: LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE */
8563 : [1536+0x02] = 28, /* U+1EC2: LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE */
8564 : [1536+0x03] = 39, /* U+1EC3: LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE */
8565 : [1536+0x04] = 28, /* U+1EC4: LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE */
8566 : [1536+0x05] = 39, /* U+1EC5: LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE */
8567 : [1536+0x06] = 28, /* U+1EC6: LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW */
8568 : [1536+0x07] = 39, /* U+1EC7: LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW */
8569 : [1536+0x08] = 29, /* U+1EC8: LATIN CAPITAL LETTER I WITH HOOK ABOVE */
8570 : [1536+0x09] = 40, /* U+1EC9: LATIN SMALL LETTER I WITH HOOK ABOVE */
8571 : [1536+0x0A] = 29, /* U+1ECA: LATIN CAPITAL LETTER I WITH DOT BELOW */
8572 : [1536+0x0B] = 40, /* U+1ECB: LATIN SMALL LETTER I WITH DOT BELOW */
8573 : [1536+0x0C] = 32, /* U+1ECC: LATIN CAPITAL LETTER O WITH DOT BELOW */
8574 : [1536+0x0D] = 20, /* U+1ECD: LATIN SMALL LETTER O WITH DOT BELOW */
8575 : [1536+0x0E] = 32, /* U+1ECE: LATIN CAPITAL LETTER O WITH HOOK ABOVE */
8576 : [1536+0x0F] = 20, /* U+1ECF: LATIN SMALL LETTER O WITH HOOK ABOVE */
8577 : [1536+0x10] = 32, /* U+1ED0: LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE */
8578 : [1536+0x11] = 20, /* U+1ED1: LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE */
8579 : [1536+0x12] = 32, /* U+1ED2: LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE */
8580 : [1536+0x13] = 20, /* U+1ED3: LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE */
8581 : [1536+0x14] = 32, /* U+1ED4: LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE */
8582 : [1536+0x15] = 20, /* U+1ED5: LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE */
8583 : [1536+0x16] = 32, /* U+1ED6: LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE */
8584 : [1536+0x17] = 20, /* U+1ED7: LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE */
8585 : [1536+0x18] = 32, /* U+1ED8: LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW */
8586 : [1536+0x19] = 20, /* U+1ED9: LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW */
8587 : [1536+0x1A] = 32, /* U+1EDA: LATIN CAPITAL LETTER O WITH HORN AND ACUTE */
8588 : [1536+0x1B] = 20, /* U+1EDB: LATIN SMALL LETTER O WITH HORN AND ACUTE */
8589 : [1536+0x1C] = 32, /* U+1EDC: LATIN CAPITAL LETTER O WITH HORN AND GRAVE */
8590 : [1536+0x1D] = 20, /* U+1EDD: LATIN SMALL LETTER O WITH HORN AND GRAVE */
8591 : [1536+0x1E] = 32, /* U+1EDE: LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE */
8592 : [1536+0x1F] = 20, /* U+1EDF: LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE */
8593 : [1536+0x20] = 32, /* U+1EE0: LATIN CAPITAL LETTER O WITH HORN AND TILDE */
8594 : [1536+0x21] = 20, /* U+1EE1: LATIN SMALL LETTER O WITH HORN AND TILDE */
8595 : [1536+0x22] = 32, /* U+1EE2: LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW */
8596 : [1536+0x23] = 20, /* U+1EE3: LATIN SMALL LETTER O WITH HORN AND DOT BELOW */
8597 : [1536+0x24] = 34, /* U+1EE4: LATIN CAPITAL LETTER U WITH DOT BELOW */
8598 : [1536+0x25] = 16, /* U+1EE5: LATIN SMALL LETTER U WITH DOT BELOW */
8599 : [1536+0x26] = 34, /* U+1EE6: LATIN CAPITAL LETTER U WITH HOOK ABOVE */
8600 : [1536+0x27] = 16, /* U+1EE7: LATIN SMALL LETTER U WITH HOOK ABOVE */
8601 : [1536+0x28] = 34, /* U+1EE8: LATIN CAPITAL LETTER U WITH HORN AND ACUTE */
8602 : [1536+0x29] = 16, /* U+1EE9: LATIN SMALL LETTER U WITH HORN AND ACUTE */
8603 : [1536+0x2A] = 34, /* U+1EEA: LATIN CAPITAL LETTER U WITH HORN AND GRAVE */
8604 : [1536+0x2B] = 16, /* U+1EEB: LATIN SMALL LETTER U WITH HORN AND GRAVE */
8605 : [1536+0x2C] = 34, /* U+1EEC: LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE */
8606 : [1536+0x2D] = 16, /* U+1EED: LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE */
8607 : [1536+0x2E] = 34, /* U+1EEE: LATIN CAPITAL LETTER U WITH HORN AND TILDE */
8608 : [1536+0x2F] = 16, /* U+1EEF: LATIN SMALL LETTER U WITH HORN AND TILDE */
8609 : [1536+0x30] = 34, /* U+1EF0: LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW */
8610 : [1536+0x31] = 16, /* U+1EF1: LATIN SMALL LETTER U WITH HORN AND DOT BELOW */
8611 : [1536+0x32] = 35, /* U+1EF2: LATIN CAPITAL LETTER Y WITH GRAVE */
8612 : [1536+0x33] = 44, /* U+1EF3: LATIN SMALL LETTER Y WITH GRAVE */
8613 : [1536+0x34] = 35, /* U+1EF4: LATIN CAPITAL LETTER Y WITH DOT BELOW */
8614 : [1536+0x35] = 44, /* U+1EF5: LATIN SMALL LETTER Y WITH DOT BELOW */
8615 : [1536+0x36] = 35, /* U+1EF6: LATIN CAPITAL LETTER Y WITH HOOK ABOVE */
8616 : [1536+0x37] = 44, /* U+1EF7: LATIN SMALL LETTER Y WITH HOOK ABOVE */
8617 : [1536+0x38] = 35, /* U+1EF8: LATIN CAPITAL LETTER Y WITH TILDE */
8618 : [1536+0x39] = 44, /* U+1EF9: LATIN SMALL LETTER Y WITH TILDE */
8619 : [1536+0x3A] = 109, /* U+1EFA: LATIN CAPITAL LETTER MIDDLE-WELSH LL */
8620 : [1536+0x3B] = 110, /* U+1EFB: LATIN SMALL LETTER MIDDLE-WELSH LL */
8621 : [1536+0x3C] = 81, /* U+1EFC: LATIN CAPITAL LETTER MIDDLE-WELSH V */
8622 : [1536+0x3D] = 94, /* U+1EFD: LATIN SMALL LETTER MIDDLE-WELSH V */
8623 : [1536+0x3E] = 35, /* U+1EFE: LATIN CAPITAL LETTER Y WITH LOOP */
8624 : [1536+0x3F] = 44, /* U+1EFF: LATIN SMALL LETTER Y WITH LOOP */
8625 : [0xE2] = 1600 - 0x80, /* 342 ... */
8626 : [1600+0x00] = 1664 - 0x80, /* 342 200 ... */
8627 : [1664+0x00] = 1, /* U+2000: EN QUAD */
8628 : [1664+0x01] = 1, /* U+2001: EM QUAD */
8629 : [1664+0x02] = 1, /* U+2002: EN SPACE */
8630 : [1664+0x03] = 1, /* U+2003: EM SPACE */
8631 : [1664+0x04] = 1, /* U+2004: THREE-PER-EM SPACE */
8632 : [1664+0x05] = 1, /* U+2005: FOUR-PER-EM SPACE */
8633 : [1664+0x06] = 1, /* U+2006: SIX-PER-EM SPACE */
8634 : [1664+0x08] = 1, /* U+2008: PUNCTUATION SPACE */
8635 : [1664+0x09] = 1, /* U+2009: THIN SPACE */
8636 : [1664+0x0A] = 1, /* U+200A: HAIR SPACE */
8637 : [1664+0x0B] = 104, /* U+200B: ZERO WIDTH SPACE */
8638 : [1664+0x10] = 10, /* U+2010: HYPHEN */
8639 : [1664+0x11] = 10, /* U+2011: NON-BREAKING HYPHEN */
8640 : [1664+0x12] = 10, /* U+2012: FIGURE DASH */
8641 : [1664+0x13] = 10, /* U+2013: EN DASH */
8642 : [1664+0x14] = 111, /* U+2014: EM DASH */
8643 : [1664+0x15] = 10, /* U+2015: HORIZONTAL BAR */
8644 : [1664+0x18] = 15, /* U+2018: LEFT SINGLE QUOTATION MARK */
8645 : [1664+0x19] = 15, /* U+2019: RIGHT SINGLE QUOTATION MARK */
8646 : [1664+0x1A] = 18, /* U+201A: SINGLE LOW-9 QUOTATION MARK */
8647 : [1664+0x1B] = 15, /* U+201B: SINGLE HIGH-REVERSED-9 QUOTATION MARK */
8648 : [1664+0x1C] = 112, /* U+201C: LEFT DOUBLE QUOTATION MARK */
8649 : [1664+0x1D] = 112, /* U+201D: RIGHT DOUBLE QUOTATION MARK */
8650 : [1664+0x1E] = 113, /* U+201E: DOUBLE LOW-9 QUOTATION MARK */
8651 : [1664+0x1F] = 112, /* U+201F: DOUBLE HIGH-REVERSED-9 QUOTATION MARK */
8652 : [1664+0x20] = 114, /* U+2020: DAGGER */
8653 : [1664+0x22] = 20, /* U+2022: BULLET */
8654 : [1664+0x24] = 17, /* U+2024: ONE DOT LEADER */
8655 : [1664+0x25] = 115, /* U+2025: TWO DOT LEADER */
8656 : [1664+0x26] = 116, /* U+2026: HORIZONTAL ELLIPSIS */
8657 : [1664+0x2F] = 1, /* U+202F: NARROW NO-BREAK SPACE */
8658 : [1664+0x35] = 99, /* U+2035: REVERSED PRIME */
8659 : [1664+0x36] = 117, /* U+2036: REVERSED DOUBLE PRIME */
8660 : [1664+0x37] = 118, /* U+2037: REVERSED TRIPLE PRIME */
8661 : [1664+0x39] = 119, /* U+2039: SINGLE LEFT-POINTING ANGLE QUOTATION MARK */
8662 : [1664+0x3A] = 120, /* U+203A: SINGLE RIGHT-POINTING ANGLE QUOTATION MARK */
8663 : [1664+0x3C] = 121, /* U+203C: DOUBLE EXCLAMATION MARK */
8664 : [1600+0x01] = 1728 - 0x80, /* 342 201 ... */
8665 : [1728+0x04] = 43, /* U+2044: FRACTION SLASH */
8666 : [1728+0x07] = 122, /* U+2047: DOUBLE QUESTION MARK */
8667 : [1728+0x08] = 123, /* U+2048: QUESTION EXCLAMATION MARK */
8668 : [1728+0x09] = 124, /* U+2049: EXCLAMATION QUESTION MARK */
8669 : [1728+0x0A] = 125, /* U+204A: TIRONIAN SIGN ET */
8670 : [1728+0x1F] = 1, /* U+205F: MEDIUM MATHEMATICAL SPACE */
8671 : [1728+0x20] = 104, /* U+2060: WORD JOINER */
8672 : [1728+0x21] = 104, /* U+2061: FUNCTION APPLICATION */
8673 : [1728+0x22] = 104, /* U+2062: INVISIBLE TIMES */
8674 : [1728+0x23] = 104, /* U+2063: INVISIBLE SEPARATOR */
8675 : [1728+0x30] = 126, /* U+2070: SUPERSCRIPT ZERO */
8676 : [1728+0x31] = 40, /* U+2071: SUPERSCRIPT LATIN SMALL LETTER I */
8677 : [1728+0x34] = 127, /* U+2074: SUPERSCRIPT FOUR */
8678 : [1728+0x35] = 128, /* U+2075: SUPERSCRIPT FIVE */
8679 : [1728+0x36] = 129, /* U+2076: SUPERSCRIPT SIX */
8680 : [1728+0x37] = 130, /* U+2077: SUPERSCRIPT SEVEN */
8681 : [1728+0x38] = 131, /* U+2078: SUPERSCRIPT EIGHT */
8682 : [1728+0x39] = 132, /* U+2079: SUPERSCRIPT NINE */
8683 : [1728+0x3A] = 114, /* U+207A: SUPERSCRIPT PLUS SIGN */
8684 : [1728+0x3C] = 133, /* U+207C: SUPERSCRIPT EQUALS SIGN */
8685 : [1728+0x3D] = 134, /* U+207D: SUPERSCRIPT LEFT PARENTHESIS */
8686 : [1728+0x3E] = 135, /* U+207E: SUPERSCRIPT RIGHT PARENTHESIS */
8687 : [1728+0x3F] = 42, /* U+207F: SUPERSCRIPT LATIN SMALL LETTER N */
8688 : [1600+0x02] = 1792 - 0x80, /* 342 202 ... */
8689 : [1792+0x00] = 126, /* U+2080: SUBSCRIPT ZERO */
8690 : [1792+0x01] = 19, /* U+2081: SUBSCRIPT ONE */
8691 : [1792+0x02] = 13, /* U+2082: SUBSCRIPT TWO */
8692 : [1792+0x03] = 14, /* U+2083: SUBSCRIPT THREE */
8693 : [1792+0x04] = 127, /* U+2084: SUBSCRIPT FOUR */
8694 : [1792+0x05] = 128, /* U+2085: SUBSCRIPT FIVE */
8695 : [1792+0x06] = 129, /* U+2086: SUBSCRIPT SIX */
8696 : [1792+0x07] = 130, /* U+2087: SUBSCRIPT SEVEN */
8697 : [1792+0x08] = 131, /* U+2088: SUBSCRIPT EIGHT */
8698 : [1792+0x09] = 132, /* U+2089: SUBSCRIPT NINE */
8699 : [1792+0x0A] = 114, /* U+208A: SUBSCRIPT PLUS SIGN */
8700 : [1792+0x0C] = 133, /* U+208C: SUBSCRIPT EQUALS SIGN */
8701 : [1792+0x0D] = 134, /* U+208D: SUBSCRIPT LEFT PARENTHESIS */
8702 : [1792+0x0E] = 135, /* U+208E: SUBSCRIPT RIGHT PARENTHESIS */
8703 : [1792+0x10] = 8, /* U+2090: LATIN SUBSCRIPT SMALL LETTER A */
8704 : [1792+0x11] = 39, /* U+2091: LATIN SUBSCRIPT SMALL LETTER E */
8705 : [1792+0x12] = 20, /* U+2092: LATIN SUBSCRIPT SMALL LETTER O */
8706 : [1792+0x13] = 33, /* U+2093: LATIN SUBSCRIPT SMALL LETTER X */
8707 : [1792+0x15] = 49, /* U+2095: LATIN SUBSCRIPT SMALL LETTER H */
8708 : [1792+0x16] = 55, /* U+2096: LATIN SUBSCRIPT SMALL LETTER K */
8709 : [1792+0x17] = 58, /* U+2097: LATIN SUBSCRIPT SMALL LETTER L */
8710 : [1792+0x18] = 93, /* U+2098: LATIN SUBSCRIPT SMALL LETTER M */
8711 : [1792+0x19] = 42, /* U+2099: LATIN SUBSCRIPT SMALL LETTER N */
8712 : [1792+0x1A] = 80, /* U+209A: LATIN SUBSCRIPT SMALL LETTER P */
8713 : [1792+0x1B] = 65, /* U+209B: LATIN SUBSCRIPT SMALL LETTER S */
8714 : [1792+0x1C] = 67, /* U+209C: LATIN SUBSCRIPT SMALL LETTER T */
8715 : [1792+0x20] = 136, /* U+20A0: EURO-CURRENCY SIGN */
8716 : [1792+0x21] = 137, /* U+20A1: COLON SIGN */
8717 : [1792+0x22] = 138, /* U+20A2: CRUZEIRO SIGN */
8718 : [1792+0x23] = 139, /* U+20A3: FRENCH FRANC SIGN */
8719 : [1792+0x24] = 140, /* U+20A4: LIRA SIGN */
8720 : [1792+0x27] = 141, /* U+20A7: PESETA SIGN */
8721 : [1792+0x28] = 142, /* U+20A8: RUPEE SIGN */
8722 : [1792+0x29] = 143, /* U+20A9: WON SIGN */
8723 : [1792+0x2A] = 144, /* U+20AA: NEW SHEQEL SIGN */
8724 : [1792+0x2B] = 145, /* U+20AB: DONG SIGN */
8725 : [1792+0x2C] = 146, /* U+20AC: EURO SIGN */
8726 : [1792+0x2F] = 147, /* U+20AF: DRACHMA SIGN */
8727 : [1792+0x31] = 148, /* U+20B1: PESO SIGN */
8728 : [1792+0x34] = 149, /* U+20B4: HRYVNIA SIGN */
8729 : [1792+0x38] = 150, /* U+20B8: TENGE SIGN */
8730 : [1792+0x39] = 151, /* U+20B9: INDIAN RUPEE SIGN */
8731 : [1792+0x3A] = 152, /* U+20BA: TURKISH LIRA SIGN */
8732 : [1792+0x3D] = 153, /* U+20BD: RUBLE SIGN */
8733 : [1792+0x3E] = 154, /* U+20BE: LARI SIGN */
8734 : [1600+0x03] = 1856 - 0x80, /* 342 203 ... */
8735 : [1856+0x10] = 104, /* U+20D0: COMBINING LEFT HARPOON ABOVE */
8736 : [1856+0x11] = 104, /* U+20D1: COMBINING RIGHT HARPOON ABOVE */
8737 : [1856+0x12] = 104, /* U+20D2: COMBINING LONG VERTICAL LINE OVERLAY */
8738 : [1856+0x13] = 104, /* U+20D3: COMBINING SHORT VERTICAL LINE OVERLAY */
8739 : [1856+0x14] = 104, /* U+20D4: COMBINING ANTICLOCKWISE ARROW ABOVE */
8740 : [1856+0x15] = 104, /* U+20D5: COMBINING CLOCKWISE ARROW ABOVE */
8741 : [1856+0x16] = 104, /* U+20D6: COMBINING LEFT ARROW ABOVE */
8742 : [1856+0x17] = 104, /* U+20D7: COMBINING RIGHT ARROW ABOVE */
8743 : [1856+0x18] = 104, /* U+20D8: COMBINING RING OVERLAY */
8744 : [1856+0x19] = 104, /* U+20D9: COMBINING CLOCKWISE RING OVERLAY */
8745 : [1856+0x1A] = 104, /* U+20DA: COMBINING ANTICLOCKWISE RING OVERLAY */
8746 : [1856+0x1B] = 104, /* U+20DB: COMBINING THREE DOTS ABOVE */
8747 : [1856+0x1C] = 104, /* U+20DC: COMBINING FOUR DOTS ABOVE */
8748 : [1856+0x1D] = 104, /* U+20DD: COMBINING ENCLOSING CIRCLE */
8749 : [1856+0x1E] = 104, /* U+20DE: COMBINING ENCLOSING SQUARE */
8750 : [1856+0x1F] = 104, /* U+20DF: COMBINING ENCLOSING DIAMOND */
8751 : [1856+0x20] = 104, /* U+20E0: COMBINING ENCLOSING CIRCLE BACKSLASH */
8752 : [1856+0x21] = 104, /* U+20E1: COMBINING LEFT RIGHT ARROW ABOVE */
8753 : [1856+0x22] = 104, /* U+20E2: COMBINING ENCLOSING SCREEN */
8754 : [1856+0x23] = 104, /* U+20E3: COMBINING ENCLOSING KEYCAP */
8755 : [1856+0x24] = 104, /* U+20E4: COMBINING ENCLOSING UPWARD POINTING TRIANGLE */
8756 : [1856+0x25] = 104, /* U+20E5: COMBINING REVERSE SOLIDUS OVERLAY */
8757 : [1856+0x26] = 104, /* U+20E6: COMBINING DOUBLE VERTICAL STROKE OVERLAY */
8758 : [1856+0x27] = 104, /* U+20E7: COMBINING ANNUITY SYMBOL */
8759 : [1856+0x28] = 104, /* U+20E8: COMBINING TRIPLE UNDERDOT */
8760 : [1856+0x29] = 104, /* U+20E9: COMBINING WIDE BRIDGE ABOVE */
8761 : [1856+0x2A] = 104, /* U+20EA: COMBINING LEFTWARDS ARROW OVERLAY */
8762 : [1856+0x2B] = 104, /* U+20EB: COMBINING LONG DOUBLE SOLIDUS OVERLAY */
8763 : [1856+0x2C] = 104, /* U+20EC: COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS */
8764 : [1856+0x2D] = 104, /* U+20ED: COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS */
8765 : [1856+0x2E] = 104, /* U+20EE: COMBINING LEFT ARROW BELOW */
8766 : [1856+0x2F] = 104, /* U+20EF: COMBINING RIGHT ARROW BELOW */
8767 : [1856+0x30] = 104, /* U+20F0: COMBINING ASTERISK ABOVE */
8768 : [1600+0x04] = 1920 - 0x80, /* 342 204 ... */
8769 : [1920+0x00] = 155, /* U+2100: ACCOUNT OF */
8770 : [1920+0x01] = 156, /* U+2101: ADDRESSED TO THE SUBJECT */
8771 : [1920+0x02] = 27, /* U+2102: DOUBLE-STRUCK CAPITAL C */
8772 : [1920+0x05] = 157, /* U+2105: CARE OF */
8773 : [1920+0x06] = 158, /* U+2106: CADA UNA */
8774 : [1920+0x0A] = 47, /* U+210A: SCRIPT SMALL G */
8775 : [1920+0x0B] = 48, /* U+210B: SCRIPT CAPITAL H */
8776 : [1920+0x0C] = 48, /* U+210C: BLACK-LETTER CAPITAL H */
8777 : [1920+0x0D] = 48, /* U+210D: DOUBLE-STRUCK CAPITAL H */
8778 : [1920+0x0E] = 49, /* U+210E: PLANCK CONSTANT */
8779 : [1920+0x10] = 29, /* U+2110: SCRIPT CAPITAL I */
8780 : [1920+0x11] = 29, /* U+2111: BLACK-LETTER CAPITAL I */
8781 : [1920+0x12] = 57, /* U+2112: SCRIPT CAPITAL L */
8782 : [1920+0x13] = 58, /* U+2113: SCRIPT SMALL L */
8783 : [1920+0x15] = 31, /* U+2115: DOUBLE-STRUCK CAPITAL N */
8784 : [1920+0x16] = 159, /* U+2116: NUMERO SIGN */
8785 : [1920+0x19] = 79, /* U+2119: DOUBLE-STRUCK CAPITAL P */
8786 : [1920+0x1A] = 160, /* U+211A: DOUBLE-STRUCK CAPITAL Q */
8787 : [1920+0x1B] = 62, /* U+211B: SCRIPT CAPITAL R */
8788 : [1920+0x1C] = 62, /* U+211C: BLACK-LETTER CAPITAL R */
8789 : [1920+0x1D] = 62, /* U+211D: DOUBLE-STRUCK CAPITAL R */
8790 : [1920+0x1E] = 161, /* U+211E: PRESCRIPTION TAKE */
8791 : [1920+0x20] = 162, /* U+2120: SERVICE MARK */
8792 : [1920+0x21] = 163, /* U+2121: TELEPHONE SIGN */
8793 : [1920+0x22] = 164, /* U+2122: TRADE MARK SIGN */
8794 : [1920+0x24] = 70, /* U+2124: DOUBLE-STRUCK CAPITAL Z */
8795 : [1920+0x28] = 70, /* U+2128: BLACK-LETTER CAPITAL Z */
8796 : [1920+0x2A] = 54, /* U+212A: KELVIN SIGN */
8797 : [1920+0x2B] = 25, /* U+212B: ANGSTROM SIGN */
8798 : [1920+0x2C] = 73, /* U+212C: SCRIPT CAPITAL B */
8799 : [1920+0x2D] = 27, /* U+212D: BLACK-LETTER CAPITAL C */
8800 : [1920+0x2E] = 39, /* U+212E: ESTIMATED SYMBOL */
8801 : [1920+0x2F] = 39, /* U+212F: SCRIPT SMALL E */
8802 : [1920+0x30] = 28, /* U+2130: SCRIPT CAPITAL E */
8803 : [1920+0x31] = 74, /* U+2131: SCRIPT CAPITAL F */
8804 : [1920+0x33] = 105, /* U+2133: SCRIPT CAPITAL M */
8805 : [1920+0x34] = 20, /* U+2134: SCRIPT SMALL O */
8806 : [1920+0x39] = 40, /* U+2139: INFORMATION SOURCE */
8807 : [1920+0x3B] = 165, /* U+213B: FACSIMILE SIGN */
8808 : [1600+0x05] = 1984 - 0x80, /* 342 205 ... */
8809 : [1984+0x05] = 30, /* U+2145: DOUBLE-STRUCK ITALIC CAPITAL D */
8810 : [1984+0x06] = 41, /* U+2146: DOUBLE-STRUCK ITALIC SMALL D */
8811 : [1984+0x07] = 39, /* U+2147: DOUBLE-STRUCK ITALIC SMALL E */
8812 : [1984+0x08] = 40, /* U+2148: DOUBLE-STRUCK ITALIC SMALL I */
8813 : [1984+0x09] = 53, /* U+2149: DOUBLE-STRUCK ITALIC SMALL J */
8814 : [1984+0x10] = 166, /* U+2150: VULGAR FRACTION ONE SEVENTH */
8815 : [1984+0x11] = 167, /* U+2151: VULGAR FRACTION ONE NINTH */
8816 : [1984+0x12] = 168, /* U+2152: VULGAR FRACTION ONE TENTH */
8817 : [1984+0x13] = 169, /* U+2153: VULGAR FRACTION ONE THIRD */
8818 : [1984+0x14] = 170, /* U+2154: VULGAR FRACTION TWO THIRDS */
8819 : [1984+0x15] = 171, /* U+2155: VULGAR FRACTION ONE FIFTH */
8820 : [1984+0x16] = 172, /* U+2156: VULGAR FRACTION TWO FIFTHS */
8821 : [1984+0x17] = 173, /* U+2157: VULGAR FRACTION THREE FIFTHS */
8822 : [1984+0x18] = 174, /* U+2158: VULGAR FRACTION FOUR FIFTHS */
8823 : [1984+0x19] = 175, /* U+2159: VULGAR FRACTION ONE SIXTH */
8824 : [1984+0x1A] = 176, /* U+215A: VULGAR FRACTION FIVE SIXTHS */
8825 : [1984+0x1B] = 177, /* U+215B: VULGAR FRACTION ONE EIGHTH */
8826 : [1984+0x1C] = 178, /* U+215C: VULGAR FRACTION THREE EIGHTHS */
8827 : [1984+0x1D] = 179, /* U+215D: VULGAR FRACTION FIVE EIGHTHS */
8828 : [1984+0x1E] = 180, /* U+215E: VULGAR FRACTION SEVEN EIGHTHS */
8829 : [1984+0x1F] = 181, /* U+215F: FRACTION NUMERATOR ONE */
8830 : [1984+0x20] = 29, /* U+2160: ROMAN NUMERAL ONE */
8831 : [1984+0x21] = 182, /* U+2161: ROMAN NUMERAL TWO */
8832 : [1984+0x22] = 183, /* U+2162: ROMAN NUMERAL THREE */
8833 : [1984+0x23] = 184, /* U+2163: ROMAN NUMERAL FOUR */
8834 : [1984+0x24] = 81, /* U+2164: ROMAN NUMERAL FIVE */
8835 : [1984+0x25] = 185, /* U+2165: ROMAN NUMERAL SIX */
8836 : [1984+0x26] = 186, /* U+2166: ROMAN NUMERAL SEVEN */
8837 : [1984+0x27] = 187, /* U+2167: ROMAN NUMERAL EIGHT */
8838 : [1984+0x28] = 188, /* U+2168: ROMAN NUMERAL NINE */
8839 : [1984+0x29] = 107, /* U+2169: ROMAN NUMERAL TEN */
8840 : [1984+0x2A] = 189, /* U+216A: ROMAN NUMERAL ELEVEN */
8841 : [1984+0x2B] = 190, /* U+216B: ROMAN NUMERAL TWELVE */
8842 : [1984+0x2C] = 57, /* U+216C: ROMAN NUMERAL FIFTY */
8843 : [1984+0x2D] = 27, /* U+216D: ROMAN NUMERAL ONE HUNDRED */
8844 : [1984+0x2E] = 30, /* U+216E: ROMAN NUMERAL FIVE HUNDRED */
8845 : [1984+0x2F] = 105, /* U+216F: ROMAN NUMERAL ONE THOUSAND */
8846 : [1984+0x30] = 40, /* U+2170: SMALL ROMAN NUMERAL ONE */
8847 : [1984+0x31] = 191, /* U+2171: SMALL ROMAN NUMERAL TWO */
8848 : [1984+0x32] = 192, /* U+2172: SMALL ROMAN NUMERAL THREE */
8849 : [1984+0x33] = 193, /* U+2173: SMALL ROMAN NUMERAL FOUR */
8850 : [1984+0x34] = 94, /* U+2174: SMALL ROMAN NUMERAL FIVE */
8851 : [1984+0x35] = 194, /* U+2175: SMALL ROMAN NUMERAL SIX */
8852 : [1984+0x36] = 195, /* U+2176: SMALL ROMAN NUMERAL SEVEN */
8853 : [1984+0x37] = 196, /* U+2177: SMALL ROMAN NUMERAL EIGHT */
8854 : [1984+0x38] = 197, /* U+2178: SMALL ROMAN NUMERAL NINE */
8855 : [1984+0x39] = 33, /* U+2179: SMALL ROMAN NUMERAL TEN */
8856 : [1984+0x3A] = 198, /* U+217A: SMALL ROMAN NUMERAL ELEVEN */
8857 : [1984+0x3B] = 199, /* U+217B: SMALL ROMAN NUMERAL TWELVE */
8858 : [1984+0x3C] = 58, /* U+217C: SMALL ROMAN NUMERAL FIFTY */
8859 : [1984+0x3D] = 3, /* U+217D: SMALL ROMAN NUMERAL ONE HUNDRED */
8860 : [1984+0x3E] = 41, /* U+217E: SMALL ROMAN NUMERAL FIVE HUNDRED */
8861 : [1984+0x3F] = 93, /* U+217F: SMALL ROMAN NUMERAL ONE THOUSAND */
8862 : [1600+0x06] = 2048 - 0x80, /* 342 206 ... */
8863 : [2048+0x09] = 200, /* U+2189: VULGAR FRACTION ZERO THIRDS */
8864 : [2048+0x10] = 201, /* U+2190: LEFTWARDS ARROW */
8865 : [2048+0x12] = 202, /* U+2192: RIGHTWARDS ARROW */
8866 : [2048+0x14] = 203, /* U+2194: LEFT RIGHT ARROW */
8867 : [2048+0x2E] = 204, /* U+21AE: LEFT RIGHT ARROW WITH STROKE */
8868 : [1600+0x07] = 2112 - 0x80, /* 342 207 ... */
8869 : [2112+0x0D] = 205, /* U+21CD: LEFTWARDS DOUBLE ARROW WITH STROKE */
8870 : [2112+0x0E] = 206, /* U+21CE: LEFT RIGHT DOUBLE ARROW WITH STROKE */
8871 : [2112+0x0F] = 207, /* U+21CF: RIGHTWARDS DOUBLE ARROW WITH STROKE */
8872 : [2112+0x10] = 208, /* U+21D0: LEFTWARDS DOUBLE ARROW */
8873 : [2112+0x12] = 209, /* U+21D2: RIGHTWARDS DOUBLE ARROW */
8874 : [2112+0x14] = 210, /* U+21D4: LEFT RIGHT DOUBLE ARROW */
8875 : [1600+0x08] = 2176 - 0x80, /* 342 210 ... */
8876 : [2176+0x12] = 10, /* U+2212: MINUS SIGN */
8877 : [2176+0x15] = 43, /* U+2215: DIVISION SLASH */
8878 : [2176+0x16] = 211, /* U+2216: SET MINUS */
8879 : [2176+0x17] = 212, /* U+2217: ASTERISK OPERATOR */
8880 : [2176+0x23] = 6, /* U+2223: DIVIDES */
8881 : [2176+0x25] = 213, /* U+2225: PARALLEL TO */
8882 : [2176+0x36] = 101, /* U+2236: RATIO */
8883 : [2176+0x3C] = 102, /* U+223C: TILDE OPERATOR */
8884 : [1600+0x09] = 2240 - 0x80, /* 342 211 ... */
8885 : [2240+0x01] = 214, /* U+2241: NOT TILDE */
8886 : [2240+0x04] = 215, /* U+2244: NOT ASYMPTOTICALLY EQUAL TO */
8887 : [2240+0x07] = 216, /* U+2247: NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO */
8888 : [2240+0x09] = 217, /* U+2249: NOT ALMOST EQUAL TO */
8889 : [2240+0x20] = 218, /* U+2260: NOT EQUAL TO */
8890 : [2240+0x22] = 219, /* U+2262: NOT IDENTICAL TO */
8891 : [2240+0x24] = 208, /* U+2264: LESS-THAN OR EQUAL TO */
8892 : [2240+0x25] = 220, /* U+2265: GREATER-THAN OR EQUAL TO */
8893 : [2240+0x2A] = 9, /* U+226A: MUCH LESS-THAN */
8894 : [2240+0x2B] = 21, /* U+226B: MUCH GREATER-THAN */
8895 : [2240+0x2E] = 221, /* U+226E: NOT LESS-THAN */
8896 : [2240+0x2F] = 222, /* U+226F: NOT GREATER-THAN */
8897 : [2240+0x30] = 205, /* U+2270: NEITHER LESS-THAN NOR EQUAL TO */
8898 : [2240+0x31] = 223, /* U+2271: NEITHER GREATER-THAN NOR EQUAL TO */
8899 : [2240+0x34] = 224, /* U+2274: NEITHER LESS-THAN NOR EQUIVALENT TO */
8900 : [2240+0x35] = 225, /* U+2275: NEITHER GREATER-THAN NOR EQUIVALENT TO */
8901 : [2240+0x38] = 226, /* U+2278: NEITHER LESS-THAN NOR GREATER-THAN */
8902 : [2240+0x39] = 227, /* U+2279: NEITHER GREATER-THAN NOR LESS-THAN */
8903 : [1600+0x0B] = 2304 - 0x80, /* 342 213 ... */
8904 : [2304+0x18] = 228, /* U+22D8: VERY MUCH LESS-THAN */
8905 : [2304+0x19] = 229, /* U+22D9: VERY MUCH GREATER-THAN */
8906 : [1600+0x0C] = 2368 - 0x80, /* 342 214 ... */
8907 : [2368+0x29] = 119, /* U+2329: LEFT-POINTING ANGLE BRACKET */
8908 : [2368+0x2A] = 120, /* U+232A: RIGHT-POINTING ANGLE BRACKET */
8909 : [1600+0x10] = 2432 - 0x80, /* 342 220 ... */
8910 : [2432+0x00] = 230, /* U+2400: SYMBOL FOR NULL */
8911 : [2432+0x01] = 231, /* U+2401: SYMBOL FOR START OF HEADING */
8912 : [2432+0x02] = 232, /* U+2402: SYMBOL FOR START OF TEXT */
8913 : [2432+0x03] = 233, /* U+2403: SYMBOL FOR END OF TEXT */
8914 : [2432+0x04] = 234, /* U+2404: SYMBOL FOR END OF TRANSMISSION */
8915 : [2432+0x05] = 235, /* U+2405: SYMBOL FOR ENQUIRY */
8916 : [2432+0x06] = 236, /* U+2406: SYMBOL FOR ACKNOWLEDGE */
8917 : [2432+0x07] = 237, /* U+2407: SYMBOL FOR BELL */
8918 : [2432+0x08] = 238, /* U+2408: SYMBOL FOR BACKSPACE */
8919 : [2432+0x09] = 239, /* U+2409: SYMBOL FOR HORIZONTAL TABULATION */
8920 : [2432+0x0A] = 240, /* U+240A: SYMBOL FOR LINE FEED */
8921 : [2432+0x0B] = 241, /* U+240B: SYMBOL FOR VERTICAL TABULATION */
8922 : [2432+0x0C] = 242, /* U+240C: SYMBOL FOR FORM FEED */
8923 : [2432+0x0D] = 243, /* U+240D: SYMBOL FOR CARRIAGE RETURN */
8924 : [2432+0x0E] = 244, /* U+240E: SYMBOL FOR SHIFT OUT */
8925 : [2432+0x0F] = 245, /* U+240F: SYMBOL FOR SHIFT IN */
8926 : [2432+0x10] = 246, /* U+2410: SYMBOL FOR DATA LINK ESCAPE */
8927 : [2432+0x11] = 247, /* U+2411: SYMBOL FOR DEVICE CONTROL ONE */
8928 : [2432+0x12] = 248, /* U+2412: SYMBOL FOR DEVICE CONTROL TWO */
8929 : [2432+0x13] = 249, /* U+2413: SYMBOL FOR DEVICE CONTROL THREE */
8930 : [2432+0x14] = 250, /* U+2414: SYMBOL FOR DEVICE CONTROL FOUR */
8931 : [2432+0x15] = 251, /* U+2415: SYMBOL FOR NEGATIVE ACKNOWLEDGE */
8932 : [2432+0x16] = 252, /* U+2416: SYMBOL FOR SYNCHRONOUS IDLE */
8933 : [2432+0x17] = 253, /* U+2417: SYMBOL FOR END OF TRANSMISSION BLOCK */
8934 : [2432+0x18] = 254, /* U+2418: SYMBOL FOR CANCEL */
8935 : [2432+0x19] = 255, /* U+2419: SYMBOL FOR END OF MEDIUM */
8936 : [2432+0x1A] = 256, /* U+241A: SYMBOL FOR SUBSTITUTE */
8937 : [2432+0x1B] = 257, /* U+241B: SYMBOL FOR ESCAPE */
8938 : [2432+0x1C] = 258, /* U+241C: SYMBOL FOR FILE SEPARATOR */
8939 : [2432+0x1D] = 259, /* U+241D: SYMBOL FOR GROUP SEPARATOR */
8940 : [2432+0x1E] = 260, /* U+241E: SYMBOL FOR RECORD SEPARATOR */
8941 : [2432+0x1F] = 261, /* U+241F: SYMBOL FOR UNIT SEPARATOR */
8942 : [2432+0x20] = 262, /* U+2420: SYMBOL FOR SPACE */
8943 : [2432+0x21] = 263, /* U+2421: SYMBOL FOR DELETE */
8944 : [2432+0x23] = 100, /* U+2423: OPEN BOX */
8945 : [2432+0x24] = 264, /* U+2424: SYMBOL FOR NEWLINE */
8946 : [1600+0x11] = 2496 - 0x80, /* 342 221 ... */
8947 : [2496+0x20] = 265, /* U+2460: CIRCLED DIGIT ONE */
8948 : [2496+0x21] = 266, /* U+2461: CIRCLED DIGIT TWO */
8949 : [2496+0x22] = 267, /* U+2462: CIRCLED DIGIT THREE */
8950 : [2496+0x23] = 268, /* U+2463: CIRCLED DIGIT FOUR */
8951 : [2496+0x24] = 269, /* U+2464: CIRCLED DIGIT FIVE */
8952 : [2496+0x25] = 270, /* U+2465: CIRCLED DIGIT SIX */
8953 : [2496+0x26] = 271, /* U+2466: CIRCLED DIGIT SEVEN */
8954 : [2496+0x27] = 272, /* U+2467: CIRCLED DIGIT EIGHT */
8955 : [2496+0x28] = 273, /* U+2468: CIRCLED DIGIT NINE */
8956 : [2496+0x29] = 274, /* U+2469: CIRCLED NUMBER TEN */
8957 : [2496+0x2A] = 275, /* U+246A: CIRCLED NUMBER ELEVEN */
8958 : [2496+0x2B] = 276, /* U+246B: CIRCLED NUMBER TWELVE */
8959 : [2496+0x2C] = 277, /* U+246C: CIRCLED NUMBER THIRTEEN */
8960 : [2496+0x2D] = 278, /* U+246D: CIRCLED NUMBER FOURTEEN */
8961 : [2496+0x2E] = 279, /* U+246E: CIRCLED NUMBER FIFTEEN */
8962 : [2496+0x2F] = 280, /* U+246F: CIRCLED NUMBER SIXTEEN */
8963 : [2496+0x30] = 281, /* U+2470: CIRCLED NUMBER SEVENTEEN */
8964 : [2496+0x31] = 282, /* U+2471: CIRCLED NUMBER EIGHTEEN */
8965 : [2496+0x32] = 283, /* U+2472: CIRCLED NUMBER NINETEEN */
8966 : [2496+0x33] = 284, /* U+2473: CIRCLED NUMBER TWENTY */
8967 : [2496+0x34] = 265, /* U+2474: PARENTHESIZED DIGIT ONE */
8968 : [2496+0x35] = 266, /* U+2475: PARENTHESIZED DIGIT TWO */
8969 : [2496+0x36] = 267, /* U+2476: PARENTHESIZED DIGIT THREE */
8970 : [2496+0x37] = 268, /* U+2477: PARENTHESIZED DIGIT FOUR */
8971 : [2496+0x38] = 269, /* U+2478: PARENTHESIZED DIGIT FIVE */
8972 : [2496+0x39] = 270, /* U+2479: PARENTHESIZED DIGIT SIX */
8973 : [2496+0x3A] = 271, /* U+247A: PARENTHESIZED DIGIT SEVEN */
8974 : [2496+0x3B] = 272, /* U+247B: PARENTHESIZED DIGIT EIGHT */
8975 : [2496+0x3C] = 273, /* U+247C: PARENTHESIZED DIGIT NINE */
8976 : [2496+0x3D] = 274, /* U+247D: PARENTHESIZED NUMBER TEN */
8977 : [2496+0x3E] = 275, /* U+247E: PARENTHESIZED NUMBER ELEVEN */
8978 : [2496+0x3F] = 276, /* U+247F: PARENTHESIZED NUMBER TWELVE */
8979 : [1600+0x12] = 2560 - 0x80, /* 342 222 ... */
8980 : [2560+0x00] = 277, /* U+2480: PARENTHESIZED NUMBER THIRTEEN */
8981 : [2560+0x01] = 278, /* U+2481: PARENTHESIZED NUMBER FOURTEEN */
8982 : [2560+0x02] = 279, /* U+2482: PARENTHESIZED NUMBER FIFTEEN */
8983 : [2560+0x03] = 280, /* U+2483: PARENTHESIZED NUMBER SIXTEEN */
8984 : [2560+0x04] = 281, /* U+2484: PARENTHESIZED NUMBER SEVENTEEN */
8985 : [2560+0x05] = 282, /* U+2485: PARENTHESIZED NUMBER EIGHTEEN */
8986 : [2560+0x06] = 283, /* U+2486: PARENTHESIZED NUMBER NINETEEN */
8987 : [2560+0x07] = 284, /* U+2487: PARENTHESIZED NUMBER TWENTY */
8988 : [2560+0x08] = 285, /* U+2488: DIGIT ONE FULL STOP */
8989 : [2560+0x09] = 286, /* U+2489: DIGIT TWO FULL STOP */
8990 : [2560+0x0A] = 287, /* U+248A: DIGIT THREE FULL STOP */
8991 : [2560+0x0B] = 288, /* U+248B: DIGIT FOUR FULL STOP */
8992 : [2560+0x0C] = 289, /* U+248C: DIGIT FIVE FULL STOP */
8993 : [2560+0x0D] = 290, /* U+248D: DIGIT SIX FULL STOP */
8994 : [2560+0x0E] = 291, /* U+248E: DIGIT SEVEN FULL STOP */
8995 : [2560+0x0F] = 292, /* U+248F: DIGIT EIGHT FULL STOP */
8996 : [2560+0x10] = 293, /* U+2490: DIGIT NINE FULL STOP */
8997 : [2560+0x11] = 294, /* U+2491: NUMBER TEN FULL STOP */
8998 : [2560+0x12] = 295, /* U+2492: NUMBER ELEVEN FULL STOP */
8999 : [2560+0x13] = 296, /* U+2493: NUMBER TWELVE FULL STOP */
9000 : [2560+0x14] = 297, /* U+2494: NUMBER THIRTEEN FULL STOP */
9001 : [2560+0x15] = 298, /* U+2495: NUMBER FOURTEEN FULL STOP */
9002 : [2560+0x16] = 299, /* U+2496: NUMBER FIFTEEN FULL STOP */
9003 : [2560+0x17] = 300, /* U+2497: NUMBER SIXTEEN FULL STOP */
9004 : [2560+0x18] = 301, /* U+2498: NUMBER SEVENTEEN FULL STOP */
9005 : [2560+0x19] = 302, /* U+2499: NUMBER EIGHTEEN FULL STOP */
9006 : [2560+0x1A] = 303, /* U+249A: NUMBER NINETEEN FULL STOP */
9007 : [2560+0x1B] = 304, /* U+249B: NUMBER TWENTY FULL STOP */
9008 : [2560+0x1C] = 305, /* U+249C: PARENTHESIZED LATIN SMALL LETTER A */
9009 : [2560+0x1D] = 306, /* U+249D: PARENTHESIZED LATIN SMALL LETTER B */
9010 : [2560+0x1E] = 307, /* U+249E: PARENTHESIZED LATIN SMALL LETTER C */
9011 : [2560+0x1F] = 308, /* U+249F: PARENTHESIZED LATIN SMALL LETTER D */
9012 : [2560+0x20] = 309, /* U+24A0: PARENTHESIZED LATIN SMALL LETTER E */
9013 : [2560+0x21] = 310, /* U+24A1: PARENTHESIZED LATIN SMALL LETTER F */
9014 : [2560+0x22] = 311, /* U+24A2: PARENTHESIZED LATIN SMALL LETTER G */
9015 : [2560+0x23] = 312, /* U+24A3: PARENTHESIZED LATIN SMALL LETTER H */
9016 : [2560+0x24] = 313, /* U+24A4: PARENTHESIZED LATIN SMALL LETTER I */
9017 : [2560+0x25] = 314, /* U+24A5: PARENTHESIZED LATIN SMALL LETTER J */
9018 : [2560+0x26] = 315, /* U+24A6: PARENTHESIZED LATIN SMALL LETTER K */
9019 : [2560+0x27] = 316, /* U+24A7: PARENTHESIZED LATIN SMALL LETTER L */
9020 : [2560+0x28] = 317, /* U+24A8: PARENTHESIZED LATIN SMALL LETTER M */
9021 : [2560+0x29] = 318, /* U+24A9: PARENTHESIZED LATIN SMALL LETTER N */
9022 : [2560+0x2A] = 319, /* U+24AA: PARENTHESIZED LATIN SMALL LETTER O */
9023 : [2560+0x2B] = 320, /* U+24AB: PARENTHESIZED LATIN SMALL LETTER P */
9024 : [2560+0x2C] = 321, /* U+24AC: PARENTHESIZED LATIN SMALL LETTER Q */
9025 : [2560+0x2D] = 322, /* U+24AD: PARENTHESIZED LATIN SMALL LETTER R */
9026 : [2560+0x2E] = 323, /* U+24AE: PARENTHESIZED LATIN SMALL LETTER S */
9027 : [2560+0x2F] = 324, /* U+24AF: PARENTHESIZED LATIN SMALL LETTER T */
9028 : [2560+0x30] = 325, /* U+24B0: PARENTHESIZED LATIN SMALL LETTER U */
9029 : [2560+0x31] = 326, /* U+24B1: PARENTHESIZED LATIN SMALL LETTER V */
9030 : [2560+0x32] = 327, /* U+24B2: PARENTHESIZED LATIN SMALL LETTER W */
9031 : [2560+0x33] = 328, /* U+24B3: PARENTHESIZED LATIN SMALL LETTER X */
9032 : [2560+0x34] = 329, /* U+24B4: PARENTHESIZED LATIN SMALL LETTER Y */
9033 : [2560+0x35] = 330, /* U+24B5: PARENTHESIZED LATIN SMALL LETTER Z */
9034 : [2560+0x36] = 331, /* U+24B6: CIRCLED LATIN CAPITAL LETTER A */
9035 : [2560+0x37] = 332, /* U+24B7: CIRCLED LATIN CAPITAL LETTER B */
9036 : [2560+0x38] = 7, /* U+24B8: CIRCLED LATIN CAPITAL LETTER C */
9037 : [2560+0x39] = 333, /* U+24B9: CIRCLED LATIN CAPITAL LETTER D */
9038 : [2560+0x3A] = 334, /* U+24BA: CIRCLED LATIN CAPITAL LETTER E */
9039 : [2560+0x3B] = 335, /* U+24BB: CIRCLED LATIN CAPITAL LETTER F */
9040 : [2560+0x3C] = 336, /* U+24BC: CIRCLED LATIN CAPITAL LETTER G */
9041 : [2560+0x3D] = 337, /* U+24BD: CIRCLED LATIN CAPITAL LETTER H */
9042 : [2560+0x3E] = 338, /* U+24BE: CIRCLED LATIN CAPITAL LETTER I */
9043 : [2560+0x3F] = 339, /* U+24BF: CIRCLED LATIN CAPITAL LETTER J */
9044 : [1600+0x13] = 2624 - 0x80, /* 342 223 ... */
9045 : [2624+0x00] = 340, /* U+24C0: CIRCLED LATIN CAPITAL LETTER K */
9046 : [2624+0x01] = 341, /* U+24C1: CIRCLED LATIN CAPITAL LETTER L */
9047 : [2624+0x02] = 342, /* U+24C2: CIRCLED LATIN CAPITAL LETTER M */
9048 : [2624+0x03] = 343, /* U+24C3: CIRCLED LATIN CAPITAL LETTER N */
9049 : [2624+0x04] = 344, /* U+24C4: CIRCLED LATIN CAPITAL LETTER O */
9050 : [2624+0x05] = 345, /* U+24C5: CIRCLED LATIN CAPITAL LETTER P */
9051 : [2624+0x06] = 346, /* U+24C6: CIRCLED LATIN CAPITAL LETTER Q */
9052 : [2624+0x07] = 11, /* U+24C7: CIRCLED LATIN CAPITAL LETTER R */
9053 : [2624+0x08] = 347, /* U+24C8: CIRCLED LATIN CAPITAL LETTER S */
9054 : [2624+0x09] = 348, /* U+24C9: CIRCLED LATIN CAPITAL LETTER T */
9055 : [2624+0x0A] = 349, /* U+24CA: CIRCLED LATIN CAPITAL LETTER U */
9056 : [2624+0x0B] = 350, /* U+24CB: CIRCLED LATIN CAPITAL LETTER V */
9057 : [2624+0x0C] = 351, /* U+24CC: CIRCLED LATIN CAPITAL LETTER W */
9058 : [2624+0x0D] = 352, /* U+24CD: CIRCLED LATIN CAPITAL LETTER X */
9059 : [2624+0x0E] = 353, /* U+24CE: CIRCLED LATIN CAPITAL LETTER Y */
9060 : [2624+0x0F] = 354, /* U+24CF: CIRCLED LATIN CAPITAL LETTER Z */
9061 : [2624+0x10] = 305, /* U+24D0: CIRCLED LATIN SMALL LETTER A */
9062 : [2624+0x11] = 306, /* U+24D1: CIRCLED LATIN SMALL LETTER B */
9063 : [2624+0x12] = 307, /* U+24D2: CIRCLED LATIN SMALL LETTER C */
9064 : [2624+0x13] = 308, /* U+24D3: CIRCLED LATIN SMALL LETTER D */
9065 : [2624+0x14] = 309, /* U+24D4: CIRCLED LATIN SMALL LETTER E */
9066 : [2624+0x15] = 310, /* U+24D5: CIRCLED LATIN SMALL LETTER F */
9067 : [2624+0x16] = 311, /* U+24D6: CIRCLED LATIN SMALL LETTER G */
9068 : [2624+0x17] = 312, /* U+24D7: CIRCLED LATIN SMALL LETTER H */
9069 : [2624+0x18] = 313, /* U+24D8: CIRCLED LATIN SMALL LETTER I */
9070 : [2624+0x19] = 314, /* U+24D9: CIRCLED LATIN SMALL LETTER J */
9071 : [2624+0x1A] = 315, /* U+24DA: CIRCLED LATIN SMALL LETTER K */
9072 : [2624+0x1B] = 316, /* U+24DB: CIRCLED LATIN SMALL LETTER L */
9073 : [2624+0x1C] = 317, /* U+24DC: CIRCLED LATIN SMALL LETTER M */
9074 : [2624+0x1D] = 318, /* U+24DD: CIRCLED LATIN SMALL LETTER N */
9075 : [2624+0x1E] = 319, /* U+24DE: CIRCLED LATIN SMALL LETTER O */
9076 : [2624+0x1F] = 320, /* U+24DF: CIRCLED LATIN SMALL LETTER P */
9077 : [2624+0x20] = 321, /* U+24E0: CIRCLED LATIN SMALL LETTER Q */
9078 : [2624+0x21] = 322, /* U+24E1: CIRCLED LATIN SMALL LETTER R */
9079 : [2624+0x22] = 323, /* U+24E2: CIRCLED LATIN SMALL LETTER S */
9080 : [2624+0x23] = 324, /* U+24E3: CIRCLED LATIN SMALL LETTER T */
9081 : [2624+0x24] = 325, /* U+24E4: CIRCLED LATIN SMALL LETTER U */
9082 : [2624+0x25] = 326, /* U+24E5: CIRCLED LATIN SMALL LETTER V */
9083 : [2624+0x26] = 327, /* U+24E6: CIRCLED LATIN SMALL LETTER W */
9084 : [2624+0x27] = 328, /* U+24E7: CIRCLED LATIN SMALL LETTER X */
9085 : [2624+0x28] = 329, /* U+24E8: CIRCLED LATIN SMALL LETTER Y */
9086 : [2624+0x29] = 330, /* U+24E9: CIRCLED LATIN SMALL LETTER Z */
9087 : [2624+0x2A] = 355, /* U+24EA: CIRCLED DIGIT ZERO */
9088 : [1600+0x14] = 2688 - 0x80, /* 342 224 ... */
9089 : [2688+0x00] = 10, /* U+2500: BOX DRAWINGS LIGHT HORIZONTAL */
9090 : [2688+0x02] = 6, /* U+2502: BOX DRAWINGS LIGHT VERTICAL */
9091 : [2688+0x0C] = 114, /* U+250C: BOX DRAWINGS LIGHT DOWN AND RIGHT */
9092 : [2688+0x10] = 114, /* U+2510: BOX DRAWINGS LIGHT DOWN AND LEFT */
9093 : [2688+0x14] = 114, /* U+2514: BOX DRAWINGS LIGHT UP AND RIGHT */
9094 : [2688+0x18] = 114, /* U+2518: BOX DRAWINGS LIGHT UP AND LEFT */
9095 : [2688+0x1C] = 114, /* U+251C: BOX DRAWINGS LIGHT VERTICAL AND RIGHT */
9096 : [2688+0x24] = 114, /* U+2524: BOX DRAWINGS LIGHT VERTICAL AND LEFT */
9097 : [2688+0x2C] = 114, /* U+252C: BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */
9098 : [2688+0x34] = 114, /* U+2534: BOX DRAWINGS LIGHT UP AND HORIZONTAL */
9099 : [2688+0x3C] = 114, /* U+253C: BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */
9100 : [1600+0x15] = 2752 - 0x80, /* 342 225 ... */
9101 : [2752+0x31] = 43, /* U+2571: BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT */
9102 : [2752+0x32] = 211, /* U+2572: BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT */
9103 : [1600+0x17] = 2816 - 0x80, /* 342 227 ... */
9104 : [2816+0x26] = 20, /* U+25E6: WHITE BULLET */
9105 : [1600+0x18] = 2880 - 0x80, /* 342 230 ... */
9106 : [2880+0x3A] = 356, /* U+263A: WHITE SMILING FACE */
9107 : [2880+0x3B] = 356, /* U+263B: BLACK SMILING FACE */
9108 : [1600+0x19] = 2944 - 0x80, /* 342 231 ... */
9109 : [2944+0x21] = 357, /* U+2661: WHITE HEART SUIT */
9110 : [2944+0x25] = 357, /* U+2665: BLACK HEART SUIT */
9111 : [1600+0x1D] = 3008 - 0x80, /* 342 235 ... */
9112 : [3008+0x24] = 357, /* U+2764: HEAVY BLACK HEART */
9113 : [1600+0x1F] = 3072 - 0x80, /* 342 237 ... */
9114 : [3072+0x0B] = 43, /* U+27CB: MATHEMATICAL RISING DIAGONAL */
9115 : [3072+0x0D] = 211, /* U+27CD: MATHEMATICAL FALLING DIAGONAL */
9116 : [3072+0x26] = 358, /* U+27E6: MATHEMATICAL LEFT WHITE SQUARE BRACKET */
9117 : [3072+0x27] = 359, /* U+27E7: MATHEMATICAL RIGHT WHITE SQUARE BRACKET */
9118 : [3072+0x28] = 119, /* U+27E8: MATHEMATICAL LEFT ANGLE BRACKET */
9119 : [3072+0x29] = 120, /* U+27E9: MATHEMATICAL RIGHT ANGLE BRACKET */
9120 : [3072+0x2A] = 9, /* U+27EA: MATHEMATICAL LEFT DOUBLE ANGLE BRACKET */
9121 : [3072+0x2B] = 21, /* U+27EB: MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET */
9122 : [3072+0x2C] = 360, /* U+27EC: MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET */
9123 : [3072+0x2D] = 361, /* U+27ED: MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET */
9124 : [3072+0x2E] = 134, /* U+27EE: MATHEMATICAL LEFT FLATTENED PARENTHESIS */
9125 : [3072+0x2F] = 135, /* U+27EF: MATHEMATICAL RIGHT FLATTENED PARENTHESIS */
9126 : [1600+0x26] = 3136 - 0x80, /* 342 246 ... */
9127 : [3136+0x00] = 362, /* U+2980: TRIPLE VERTICAL BAR DELIMITER */
9128 : [3136+0x03] = 363, /* U+2983: LEFT WHITE CURLY BRACKET */
9129 : [3136+0x04] = 364, /* U+2984: RIGHT WHITE CURLY BRACKET */
9130 : [3136+0x05] = 360, /* U+2985: LEFT WHITE PARENTHESIS */
9131 : [3136+0x06] = 361, /* U+2986: RIGHT WHITE PARENTHESIS */
9132 : [3136+0x07] = 365, /* U+2987: Z NOTATION LEFT IMAGE BRACKET */
9133 : [3136+0x08] = 366, /* U+2988: Z NOTATION RIGHT IMAGE BRACKET */
9134 : [3136+0x09] = 367, /* U+2989: Z NOTATION LEFT BINDING BRACKET */
9135 : [3136+0x0A] = 368, /* U+298A: Z NOTATION RIGHT BINDING BRACKET */
9136 : [1600+0x27] = 3200 - 0x80, /* 342 247 ... */
9137 : [3200+0x23] = 369, /* U+29E3: EQUALS SIGN AND SLANTED PARALLEL */
9138 : [3200+0x25] = 369, /* U+29E5: IDENTICAL TO AND SLANTED PARALLEL */
9139 : [3200+0x35] = 211, /* U+29F5: REVERSE SOLIDUS OPERATOR */
9140 : [3200+0x38] = 43, /* U+29F8: BIG SOLIDUS */
9141 : [3200+0x39] = 211, /* U+29F9: BIG REVERSE SOLIDUS */
9142 : [3200+0x3C] = 119, /* U+29FC: LEFT-POINTING CURVED ANGLE BRACKET */
9143 : [3200+0x3D] = 120, /* U+29FD: RIGHT-POINTING CURVED ANGLE BRACKET */
9144 : [3200+0x3E] = 114, /* U+29FE: TINY */
9145 : [3200+0x3F] = 10, /* U+29FF: MINY */
9146 : [1600+0x29] = 3264 - 0x80, /* 342 251 ... */
9147 : [3264+0x34] = 370, /* U+2A74: DOUBLE COLON EQUAL */
9148 : [3264+0x35] = 371, /* U+2A75: TWO CONSECUTIVE EQUALS SIGNS */
9149 : [3264+0x36] = 372, /* U+2A76: THREE CONSECUTIVE EQUALS SIGNS */
9150 : [1600+0x31] = 3328 - 0x80, /* 342 261 ... */
9151 : [3328+0x3C] = 53, /* U+2C7C: LATIN SUBSCRIPT SMALL LETTER J */
9152 : [3328+0x3D] = 81, /* U+2C7D: MODIFIER LETTER CAPITAL V */
9153 : [0xE3] = 3392 - 0x80, /* 343 ... */
9154 : [3392+0x00] = 3456 - 0x80, /* 343 200 ... */
9155 : [3456+0x00] = 1, /* U+3000: IDEOGRAPHIC SPACE */
9156 : [3456+0x08] = 119, /* U+3008: LEFT ANGLE BRACKET */
9157 : [3456+0x09] = 120, /* U+3009: RIGHT ANGLE BRACKET */
9158 : [3392+0x02] = 3520 - 0x80, /* 343 202 ... */
9159 : [3520+0x19] = 104, /* U+3099: COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK */
9160 : [3520+0x1A] = 104, /* U+309A: COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */
9161 : [3520+0x20] = 133, /* U+30A0: KATAKANA-HIRAGANA DOUBLE HYPHEN */
9162 : [3392+0x09] = 3584 - 0x80, /* 343 211 ... */
9163 : [3584+0x10] = 373, /* U+3250: PARTNERSHIP SIGN */
9164 : [3584+0x11] = 374, /* U+3251: CIRCLED NUMBER TWENTY ONE */
9165 : [3584+0x12] = 375, /* U+3252: CIRCLED NUMBER TWENTY TWO */
9166 : [3584+0x13] = 376, /* U+3253: CIRCLED NUMBER TWENTY THREE */
9167 : [3584+0x14] = 377, /* U+3254: CIRCLED NUMBER TWENTY FOUR */
9168 : [3584+0x15] = 378, /* U+3255: CIRCLED NUMBER TWENTY FIVE */
9169 : [3584+0x16] = 379, /* U+3256: CIRCLED NUMBER TWENTY SIX */
9170 : [3584+0x17] = 380, /* U+3257: CIRCLED NUMBER TWENTY SEVEN */
9171 : [3584+0x18] = 381, /* U+3258: CIRCLED NUMBER TWENTY EIGHT */
9172 : [3584+0x19] = 382, /* U+3259: CIRCLED NUMBER TWENTY NINE */
9173 : [3584+0x1A] = 383, /* U+325A: CIRCLED NUMBER THIRTY */
9174 : [3584+0x1B] = 384, /* U+325B: CIRCLED NUMBER THIRTY ONE */
9175 : [3584+0x1C] = 385, /* U+325C: CIRCLED NUMBER THIRTY TWO */
9176 : [3584+0x1D] = 386, /* U+325D: CIRCLED NUMBER THIRTY THREE */
9177 : [3584+0x1E] = 387, /* U+325E: CIRCLED NUMBER THIRTY FOUR */
9178 : [3584+0x1F] = 388, /* U+325F: CIRCLED NUMBER THIRTY FIVE */
9179 : [3392+0x0A] = 3648 - 0x80, /* 343 212 ... */
9180 : [3648+0x31] = 389, /* U+32B1: CIRCLED NUMBER THIRTY SIX */
9181 : [3648+0x32] = 390, /* U+32B2: CIRCLED NUMBER THIRTY SEVEN */
9182 : [3648+0x33] = 391, /* U+32B3: CIRCLED NUMBER THIRTY EIGHT */
9183 : [3648+0x34] = 392, /* U+32B4: CIRCLED NUMBER THIRTY NINE */
9184 : [3648+0x35] = 393, /* U+32B5: CIRCLED NUMBER FORTY */
9185 : [3648+0x36] = 394, /* U+32B6: CIRCLED NUMBER FORTY ONE */
9186 : [3648+0x37] = 395, /* U+32B7: CIRCLED NUMBER FORTY TWO */
9187 : [3648+0x38] = 396, /* U+32B8: CIRCLED NUMBER FORTY THREE */
9188 : [3648+0x39] = 397, /* U+32B9: CIRCLED NUMBER FORTY FOUR */
9189 : [3648+0x3A] = 398, /* U+32BA: CIRCLED NUMBER FORTY FIVE */
9190 : [3648+0x3B] = 399, /* U+32BB: CIRCLED NUMBER FORTY SIX */
9191 : [3648+0x3C] = 400, /* U+32BC: CIRCLED NUMBER FORTY SEVEN */
9192 : [3648+0x3D] = 401, /* U+32BD: CIRCLED NUMBER FORTY EIGHT */
9193 : [3648+0x3E] = 402, /* U+32BE: CIRCLED NUMBER FORTY NINE */
9194 : [3648+0x3F] = 403, /* U+32BF: CIRCLED NUMBER FIFTY */
9195 : [3392+0x0B] = 3712 - 0x80, /* 343 213 ... */
9196 : [3712+0x0C] = 404, /* U+32CC: SQUARE HG */
9197 : [3712+0x0D] = 405, /* U+32CD: SQUARE ERG */
9198 : [3712+0x0E] = 406, /* U+32CE: SQUARE EV */
9199 : [3712+0x0F] = 407, /* U+32CF: LIMITED LIABILITY SIGN */
9200 : [3392+0x0D] = 3776 - 0x80, /* 343 215 ... */
9201 : [3776+0x31] = 408, /* U+3371: SQUARE HPA */
9202 : [3776+0x32] = 409, /* U+3372: SQUARE DA */
9203 : [3776+0x33] = 410, /* U+3373: SQUARE AU */
9204 : [3776+0x34] = 411, /* U+3374: SQUARE BAR */
9205 : [3776+0x35] = 412, /* U+3375: SQUARE OV */
9206 : [3776+0x36] = 413, /* U+3376: SQUARE PC */
9207 : [3776+0x37] = 414, /* U+3377: SQUARE DM */
9208 : [3776+0x38] = 415, /* U+3378: SQUARE DM SQUARED */
9209 : [3776+0x39] = 416, /* U+3379: SQUARE DM CUBED */
9210 : [3776+0x3A] = 417, /* U+337A: SQUARE IU */
9211 : [3392+0x0E] = 3840 - 0x80, /* 343 216 ... */
9212 : [3840+0x00] = 418, /* U+3380: SQUARE PA AMPS */
9213 : [3840+0x01] = 419, /* U+3381: SQUARE NA */
9214 : [3840+0x02] = 420, /* U+3382: SQUARE MU A */
9215 : [3840+0x03] = 421, /* U+3383: SQUARE MA */
9216 : [3840+0x04] = 422, /* U+3384: SQUARE KA */
9217 : [3840+0x05] = 423, /* U+3385: SQUARE KB */
9218 : [3840+0x06] = 424, /* U+3386: SQUARE MB */
9219 : [3840+0x07] = 425, /* U+3387: SQUARE GB */
9220 : [3840+0x08] = 426, /* U+3388: SQUARE CAL */
9221 : [3840+0x09] = 427, /* U+3389: SQUARE KCAL */
9222 : [3840+0x0A] = 428, /* U+338A: SQUARE PF */
9223 : [3840+0x0B] = 429, /* U+338B: SQUARE NF */
9224 : [3840+0x0C] = 430, /* U+338C: SQUARE MU F */
9225 : [3840+0x0D] = 431, /* U+338D: SQUARE MU G */
9226 : [3840+0x0E] = 432, /* U+338E: SQUARE MG */
9227 : [3840+0x0F] = 433, /* U+338F: SQUARE KG */
9228 : [3840+0x10] = 434, /* U+3390: SQUARE HZ */
9229 : [3840+0x11] = 435, /* U+3391: SQUARE KHZ */
9230 : [3840+0x12] = 436, /* U+3392: SQUARE MHZ */
9231 : [3840+0x13] = 437, /* U+3393: SQUARE GHZ */
9232 : [3840+0x14] = 438, /* U+3394: SQUARE THZ */
9233 : [3840+0x15] = 439, /* U+3395: SQUARE MU L */
9234 : [3840+0x16] = 440, /* U+3396: SQUARE ML */
9235 : [3840+0x17] = 441, /* U+3397: SQUARE DL */
9236 : [3840+0x18] = 442, /* U+3398: SQUARE KL */
9237 : [3840+0x19] = 443, /* U+3399: SQUARE FM */
9238 : [3840+0x1A] = 444, /* U+339A: SQUARE NM */
9239 : [3840+0x1B] = 445, /* U+339B: SQUARE MU M */
9240 : [3840+0x1C] = 446, /* U+339C: SQUARE MM */
9241 : [3840+0x1D] = 447, /* U+339D: SQUARE CM */
9242 : [3840+0x1E] = 448, /* U+339E: SQUARE KM */
9243 : [3840+0x1F] = 449, /* U+339F: SQUARE MM SQUARED */
9244 : [3840+0x20] = 450, /* U+33A0: SQUARE CM SQUARED */
9245 : [3840+0x21] = 451, /* U+33A1: SQUARE M SQUARED */
9246 : [3840+0x22] = 452, /* U+33A2: SQUARE KM SQUARED */
9247 : [3840+0x23] = 453, /* U+33A3: SQUARE MM CUBED */
9248 : [3840+0x24] = 454, /* U+33A4: SQUARE CM CUBED */
9249 : [3840+0x25] = 455, /* U+33A5: SQUARE M CUBED */
9250 : [3840+0x26] = 456, /* U+33A6: SQUARE KM CUBED */
9251 : [3840+0x27] = 457, /* U+33A7: SQUARE M OVER S */
9252 : [3840+0x28] = 458, /* U+33A8: SQUARE M OVER S SQUARED */
9253 : [3840+0x29] = 459, /* U+33A9: SQUARE PA */
9254 : [3840+0x2A] = 460, /* U+33AA: SQUARE KPA */
9255 : [3840+0x2B] = 461, /* U+33AB: SQUARE MPA */
9256 : [3840+0x2C] = 462, /* U+33AC: SQUARE GPA */
9257 : [3840+0x2D] = 463, /* U+33AD: SQUARE RAD */
9258 : [3840+0x2E] = 464, /* U+33AE: SQUARE RAD OVER S */
9259 : [3840+0x2F] = 465, /* U+33AF: SQUARE RAD OVER S SQUARED */
9260 : [3840+0x30] = 466, /* U+33B0: SQUARE PS */
9261 : [3840+0x31] = 467, /* U+33B1: SQUARE NS */
9262 : [3840+0x32] = 468, /* U+33B2: SQUARE MU S */
9263 : [3840+0x33] = 469, /* U+33B3: SQUARE MS */
9264 : [3840+0x34] = 470, /* U+33B4: SQUARE PV */
9265 : [3840+0x35] = 471, /* U+33B5: SQUARE NV */
9266 : [3840+0x36] = 472, /* U+33B6: SQUARE MU V */
9267 : [3840+0x37] = 473, /* U+33B7: SQUARE MV */
9268 : [3840+0x38] = 474, /* U+33B8: SQUARE KV */
9269 : [3840+0x39] = 475, /* U+33B9: SQUARE MV MEGA */
9270 : [3840+0x3A] = 476, /* U+33BA: SQUARE PW */
9271 : [3840+0x3B] = 477, /* U+33BB: SQUARE NW */
9272 : [3840+0x3C] = 478, /* U+33BC: SQUARE MU W */
9273 : [3840+0x3D] = 479, /* U+33BD: SQUARE MW */
9274 : [3840+0x3E] = 480, /* U+33BE: SQUARE KW */
9275 : [3840+0x3F] = 481, /* U+33BF: SQUARE MW MEGA */
9276 : [3392+0x0F] = 3904 - 0x80, /* 343 217 ... */
9277 : [3904+0x02] = 482, /* U+33C2: SQUARE AM */
9278 : [3904+0x03] = 483, /* U+33C3: SQUARE BQ */
9279 : [3904+0x04] = 484, /* U+33C4: SQUARE CC */
9280 : [3904+0x05] = 485, /* U+33C5: SQUARE CD */
9281 : [3904+0x06] = 486, /* U+33C6: SQUARE C OVER KG */
9282 : [3904+0x07] = 487, /* U+33C7: SQUARE CO */
9283 : [3904+0x08] = 488, /* U+33C8: SQUARE DB */
9284 : [3904+0x09] = 489, /* U+33C9: SQUARE GY */
9285 : [3904+0x0A] = 490, /* U+33CA: SQUARE HA */
9286 : [3904+0x0B] = 491, /* U+33CB: SQUARE HP */
9287 : [3904+0x0C] = 492, /* U+33CC: SQUARE IN */
9288 : [3904+0x0D] = 493, /* U+33CD: SQUARE KK */
9289 : [3904+0x0E] = 494, /* U+33CE: SQUARE KM CAPITAL */
9290 : [3904+0x0F] = 495, /* U+33CF: SQUARE KT */
9291 : [3904+0x10] = 496, /* U+33D0: SQUARE LM */
9292 : [3904+0x11] = 497, /* U+33D1: SQUARE LN */
9293 : [3904+0x12] = 498, /* U+33D2: SQUARE LOG */
9294 : [3904+0x13] = 499, /* U+33D3: SQUARE LX */
9295 : [3904+0x14] = 500, /* U+33D4: SQUARE MB SMALL */
9296 : [3904+0x15] = 501, /* U+33D5: SQUARE MIL */
9297 : [3904+0x16] = 502, /* U+33D6: SQUARE MOL */
9298 : [3904+0x17] = 503, /* U+33D7: SQUARE PH */
9299 : [3904+0x18] = 504, /* U+33D8: SQUARE PM */
9300 : [3904+0x19] = 505, /* U+33D9: SQUARE PPM */
9301 : [3904+0x1A] = 506, /* U+33DA: SQUARE PR */
9302 : [3904+0x1B] = 507, /* U+33DB: SQUARE SR */
9303 : [3904+0x1C] = 508, /* U+33DC: SQUARE SV */
9304 : [3904+0x1D] = 509, /* U+33DD: SQUARE WB */
9305 : [3904+0x1E] = 510, /* U+33DE: SQUARE V OVER M */
9306 : [3904+0x1F] = 511, /* U+33DF: SQUARE A OVER M */
9307 : [3904+0x3F] = 512, /* U+33FF: SQUARE GAL */
9308 : [0xEA] = 3968 - 0x80, /* 352 ... */
9309 : [3968+0x1F] = 4032 - 0x80, /* 352 237 ... */
9310 : [4032+0x32] = 27, /* U+A7F2: MODIFIER LETTER CAPITAL C */
9311 : [4032+0x33] = 74, /* U+A7F3: MODIFIER LETTER CAPITAL F */
9312 : [4032+0x34] = 160, /* U+A7F4: MODIFIER LETTER CAPITAL Q */
9313 : [0xEF] = 4096 - 0x80, /* 357 ... */
9314 : [4096+0x2C] = 4160 - 0x80, /* 357 254 ... */
9315 : [4160+0x00] = 513, /* U+FB00: LATIN SMALL LIGATURE FF */
9316 : [4160+0x01] = 514, /* U+FB01: LATIN SMALL LIGATURE FI */
9317 : [4160+0x02] = 515, /* U+FB02: LATIN SMALL LIGATURE FL */
9318 : [4160+0x03] = 516, /* U+FB03: LATIN SMALL LIGATURE FFI */
9319 : [4160+0x04] = 517, /* U+FB04: LATIN SMALL LIGATURE FFL */
9320 : [4160+0x05] = 518, /* U+FB05: LATIN SMALL LIGATURE LONG S T */
9321 : [4160+0x06] = 518, /* U+FB06: LATIN SMALL LIGATURE ST */
9322 : [4160+0x1E] = 104, /* U+FB1E: HEBREW POINT JUDEO-SPANISH VARIKA */
9323 : [4160+0x29] = 114, /* U+FB29: HEBREW LETTER ALTERNATIVE PLUS SIGN */
9324 : [4096+0x38] = 4224 - 0x80, /* 357 270 ... */
9325 : [4224+0x00] = 104, /* U+FE00: VARIATION SELECTOR-1 */
9326 : [4224+0x01] = 104, /* U+FE01: VARIATION SELECTOR-2 */
9327 : [4224+0x02] = 104, /* U+FE02: VARIATION SELECTOR-3 */
9328 : [4224+0x03] = 104, /* U+FE03: VARIATION SELECTOR-4 */
9329 : [4224+0x04] = 104, /* U+FE04: VARIATION SELECTOR-5 */
9330 : [4224+0x05] = 104, /* U+FE05: VARIATION SELECTOR-6 */
9331 : [4224+0x06] = 104, /* U+FE06: VARIATION SELECTOR-7 */
9332 : [4224+0x07] = 104, /* U+FE07: VARIATION SELECTOR-8 */
9333 : [4224+0x08] = 104, /* U+FE08: VARIATION SELECTOR-9 */
9334 : [4224+0x09] = 104, /* U+FE09: VARIATION SELECTOR-10 */
9335 : [4224+0x0A] = 104, /* U+FE0A: VARIATION SELECTOR-11 */
9336 : [4224+0x0B] = 104, /* U+FE0B: VARIATION SELECTOR-12 */
9337 : [4224+0x0C] = 104, /* U+FE0C: VARIATION SELECTOR-13 */
9338 : [4224+0x0D] = 104, /* U+FE0D: VARIATION SELECTOR-14 */
9339 : [4224+0x0E] = 104, /* U+FE0E: VARIATION SELECTOR-15 */
9340 : [4224+0x0F] = 104, /* U+FE0F: VARIATION SELECTOR-16 */
9341 : [4224+0x10] = 18, /* U+FE10: PRESENTATION FORM FOR VERTICAL COMMA */
9342 : [4224+0x13] = 101, /* U+FE13: PRESENTATION FORM FOR VERTICAL COLON */
9343 : [4224+0x14] = 519, /* U+FE14: PRESENTATION FORM FOR VERTICAL SEMICOLON */
9344 : [4224+0x15] = 2, /* U+FE15: PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK */
9345 : [4224+0x19] = 116, /* U+FE19: PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS */
9346 : [4224+0x20] = 104, /* U+FE20: COMBINING LIGATURE LEFT HALF */
9347 : [4224+0x21] = 104, /* U+FE21: COMBINING LIGATURE RIGHT HALF */
9348 : [4224+0x22] = 104, /* U+FE22: COMBINING DOUBLE TILDE LEFT HALF */
9349 : [4224+0x23] = 104, /* U+FE23: COMBINING DOUBLE TILDE RIGHT HALF */
9350 : [4224+0x24] = 104, /* U+FE24: COMBINING MACRON LEFT HALF */
9351 : [4224+0x25] = 104, /* U+FE25: COMBINING MACRON RIGHT HALF */
9352 : [4224+0x26] = 104, /* U+FE26: COMBINING CONJOINING MACRON */
9353 : [4224+0x27] = 104, /* U+FE27: COMBINING LIGATURE LEFT HALF BELOW */
9354 : [4224+0x28] = 104, /* U+FE28: COMBINING LIGATURE RIGHT HALF BELOW */
9355 : [4224+0x29] = 104, /* U+FE29: COMBINING TILDE LEFT HALF BELOW */
9356 : [4224+0x2A] = 104, /* U+FE2A: COMBINING TILDE RIGHT HALF BELOW */
9357 : [4224+0x2B] = 104, /* U+FE2B: COMBINING MACRON LEFT HALF BELOW */
9358 : [4224+0x2C] = 104, /* U+FE2C: COMBINING MACRON RIGHT HALF BELOW */
9359 : [4224+0x2D] = 104, /* U+FE2D: COMBINING CONJOINING MACRON BELOW */
9360 : [4224+0x30] = 115, /* U+FE30: PRESENTATION FORM FOR VERTICAL TWO DOT LEADER */
9361 : [4224+0x33] = 100, /* U+FE33: PRESENTATION FORM FOR VERTICAL LOW LINE */
9362 : [4224+0x34] = 100, /* U+FE34: PRESENTATION FORM FOR VERTICAL WAVY LOW LINE */
9363 : [4224+0x35] = 134, /* U+FE35: PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS */
9364 : [4224+0x36] = 135, /* U+FE36: PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS */
9365 : [4224+0x37] = 520, /* U+FE37: PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET */
9366 : [4224+0x38] = 521, /* U+FE38: PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET */
9367 : [4096+0x39] = 4288 - 0x80, /* 357 271 ... */
9368 : [4288+0x07] = 522, /* U+FE47: PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET */
9369 : [4288+0x08] = 523, /* U+FE48: PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET */
9370 : [4288+0x0D] = 100, /* U+FE4D: DASHED LOW LINE */
9371 : [4288+0x0E] = 100, /* U+FE4E: CENTRELINE LOW LINE */
9372 : [4288+0x0F] = 100, /* U+FE4F: WAVY LOW LINE */
9373 : [4288+0x10] = 18, /* U+FE50: SMALL COMMA */
9374 : [4288+0x12] = 17, /* U+FE52: SMALL FULL STOP */
9375 : [4288+0x14] = 519, /* U+FE54: SMALL SEMICOLON */
9376 : [4288+0x15] = 101, /* U+FE55: SMALL COLON */
9377 : [4288+0x17] = 2, /* U+FE57: SMALL EXCLAMATION MARK */
9378 : [4288+0x19] = 134, /* U+FE59: SMALL LEFT PARENTHESIS */
9379 : [4288+0x1A] = 135, /* U+FE5A: SMALL RIGHT PARENTHESIS */
9380 : [4288+0x1B] = 520, /* U+FE5B: SMALL LEFT CURLY BRACKET */
9381 : [4288+0x1C] = 521, /* U+FE5C: SMALL RIGHT CURLY BRACKET */
9382 : [4288+0x1F] = 369, /* U+FE5F: SMALL NUMBER SIGN */
9383 : [4288+0x20] = 125, /* U+FE60: SMALL AMPERSAND */
9384 : [4288+0x21] = 212, /* U+FE61: SMALL ASTERISK */
9385 : [4288+0x22] = 114, /* U+FE62: SMALL PLUS SIGN */
9386 : [4288+0x23] = 10, /* U+FE63: SMALL HYPHEN-MINUS */
9387 : [4288+0x24] = 119, /* U+FE64: SMALL LESS-THAN SIGN */
9388 : [4288+0x25] = 120, /* U+FE65: SMALL GREATER-THAN SIGN */
9389 : [4288+0x26] = 133, /* U+FE66: SMALL EQUALS SIGN */
9390 : [4288+0x28] = 211, /* U+FE68: SMALL REVERSE SOLIDUS */
9391 : [4288+0x29] = 524, /* U+FE69: SMALL DOLLAR SIGN */
9392 : [4288+0x2A] = 525, /* U+FE6A: SMALL PERCENT SIGN */
9393 : [4288+0x2B] = 526, /* U+FE6B: SMALL COMMERCIAL AT */
9394 : [4096+0x3B] = 4352 - 0x80, /* 357 273 ... */
9395 : [4352+0x3F] = 104, /* U+FEFF: ZERO WIDTH NO-BREAK SPACE */
9396 : [4096+0x3C] = 4416 - 0x80, /* 357 274 ... */
9397 : [4416+0x01] = 2, /* U+FF01: FULLWIDTH EXCLAMATION MARK */
9398 : [4416+0x02] = 112, /* U+FF02: FULLWIDTH QUOTATION MARK */
9399 : [4416+0x03] = 369, /* U+FF03: FULLWIDTH NUMBER SIGN */
9400 : [4416+0x04] = 524, /* U+FF04: FULLWIDTH DOLLAR SIGN */
9401 : [4416+0x05] = 525, /* U+FF05: FULLWIDTH PERCENT SIGN */
9402 : [4416+0x06] = 125, /* U+FF06: FULLWIDTH AMPERSAND */
9403 : [4416+0x07] = 15, /* U+FF07: FULLWIDTH APOSTROPHE */
9404 : [4416+0x08] = 134, /* U+FF08: FULLWIDTH LEFT PARENTHESIS */
9405 : [4416+0x09] = 135, /* U+FF09: FULLWIDTH RIGHT PARENTHESIS */
9406 : [4416+0x0A] = 212, /* U+FF0A: FULLWIDTH ASTERISK */
9407 : [4416+0x0B] = 114, /* U+FF0B: FULLWIDTH PLUS SIGN */
9408 : [4416+0x0C] = 18, /* U+FF0C: FULLWIDTH COMMA */
9409 : [4416+0x0D] = 10, /* U+FF0D: FULLWIDTH HYPHEN-MINUS */
9410 : [4416+0x0E] = 17, /* U+FF0E: FULLWIDTH FULL STOP */
9411 : [4416+0x0F] = 43, /* U+FF0F: FULLWIDTH SOLIDUS */
9412 : [4416+0x10] = 126, /* U+FF10: FULLWIDTH DIGIT ZERO */
9413 : [4416+0x11] = 19, /* U+FF11: FULLWIDTH DIGIT ONE */
9414 : [4416+0x12] = 13, /* U+FF12: FULLWIDTH DIGIT TWO */
9415 : [4416+0x13] = 14, /* U+FF13: FULLWIDTH DIGIT THREE */
9416 : [4416+0x14] = 127, /* U+FF14: FULLWIDTH DIGIT FOUR */
9417 : [4416+0x15] = 128, /* U+FF15: FULLWIDTH DIGIT FIVE */
9418 : [4416+0x16] = 129, /* U+FF16: FULLWIDTH DIGIT SIX */
9419 : [4416+0x17] = 130, /* U+FF17: FULLWIDTH DIGIT SEVEN */
9420 : [4416+0x18] = 131, /* U+FF18: FULLWIDTH DIGIT EIGHT */
9421 : [4416+0x19] = 132, /* U+FF19: FULLWIDTH DIGIT NINE */
9422 : [4416+0x1A] = 101, /* U+FF1A: FULLWIDTH COLON */
9423 : [4416+0x1B] = 519, /* U+FF1B: FULLWIDTH SEMICOLON */
9424 : [4416+0x1C] = 119, /* U+FF1C: FULLWIDTH LESS-THAN SIGN */
9425 : [4416+0x1D] = 133, /* U+FF1D: FULLWIDTH EQUALS SIGN */
9426 : [4416+0x1E] = 120, /* U+FF1E: FULLWIDTH GREATER-THAN SIGN */
9427 : [4416+0x20] = 526, /* U+FF20: FULLWIDTH COMMERCIAL AT */
9428 : [4416+0x21] = 25, /* U+FF21: FULLWIDTH LATIN CAPITAL LETTER A */
9429 : [4416+0x22] = 73, /* U+FF22: FULLWIDTH LATIN CAPITAL LETTER B */
9430 : [4416+0x23] = 27, /* U+FF23: FULLWIDTH LATIN CAPITAL LETTER C */
9431 : [4416+0x24] = 30, /* U+FF24: FULLWIDTH LATIN CAPITAL LETTER D */
9432 : [4416+0x25] = 28, /* U+FF25: FULLWIDTH LATIN CAPITAL LETTER E */
9433 : [4416+0x26] = 74, /* U+FF26: FULLWIDTH LATIN CAPITAL LETTER F */
9434 : [4416+0x27] = 46, /* U+FF27: FULLWIDTH LATIN CAPITAL LETTER G */
9435 : [4416+0x28] = 48, /* U+FF28: FULLWIDTH LATIN CAPITAL LETTER H */
9436 : [4416+0x29] = 29, /* U+FF29: FULLWIDTH LATIN CAPITAL LETTER I */
9437 : [4416+0x2A] = 52, /* U+FF2A: FULLWIDTH LATIN CAPITAL LETTER J */
9438 : [4416+0x2B] = 54, /* U+FF2B: FULLWIDTH LATIN CAPITAL LETTER K */
9439 : [4416+0x2C] = 57, /* U+FF2C: FULLWIDTH LATIN CAPITAL LETTER L */
9440 : [4416+0x2D] = 105, /* U+FF2D: FULLWIDTH LATIN CAPITAL LETTER M */
9441 : [4416+0x2E] = 31, /* U+FF2E: FULLWIDTH LATIN CAPITAL LETTER N */
9442 : [4416+0x2F] = 32, /* U+FF2F: FULLWIDTH LATIN CAPITAL LETTER O */
9443 : [4416+0x30] = 79, /* U+FF30: FULLWIDTH LATIN CAPITAL LETTER P */
9444 : [4416+0x31] = 160, /* U+FF31: FULLWIDTH LATIN CAPITAL LETTER Q */
9445 : [4416+0x32] = 62, /* U+FF32: FULLWIDTH LATIN CAPITAL LETTER R */
9446 : [4416+0x33] = 64, /* U+FF33: FULLWIDTH LATIN CAPITAL LETTER S */
9447 : [4416+0x34] = 66, /* U+FF34: FULLWIDTH LATIN CAPITAL LETTER T */
9448 : [4416+0x35] = 34, /* U+FF35: FULLWIDTH LATIN CAPITAL LETTER U */
9449 : [4416+0x36] = 81, /* U+FF36: FULLWIDTH LATIN CAPITAL LETTER V */
9450 : [4416+0x37] = 68, /* U+FF37: FULLWIDTH LATIN CAPITAL LETTER W */
9451 : [4416+0x38] = 107, /* U+FF38: FULLWIDTH LATIN CAPITAL LETTER X */
9452 : [4416+0x39] = 35, /* U+FF39: FULLWIDTH LATIN CAPITAL LETTER Y */
9453 : [4416+0x3A] = 70, /* U+FF3A: FULLWIDTH LATIN CAPITAL LETTER Z */
9454 : [4416+0x3B] = 522, /* U+FF3B: FULLWIDTH LEFT SQUARE BRACKET */
9455 : [4416+0x3C] = 211, /* U+FF3C: FULLWIDTH REVERSE SOLIDUS */
9456 : [4416+0x3D] = 523, /* U+FF3D: FULLWIDTH RIGHT SQUARE BRACKET */
9457 : [4416+0x3E] = 98, /* U+FF3E: FULLWIDTH CIRCUMFLEX ACCENT */
9458 : [4416+0x3F] = 100, /* U+FF3F: FULLWIDTH LOW LINE */
9459 : [4096+0x3D] = 4480 - 0x80, /* 357 275 ... */
9460 : [4480+0x00] = 99, /* U+FF40: FULLWIDTH GRAVE ACCENT */
9461 : [4480+0x01] = 8, /* U+FF41: FULLWIDTH LATIN SMALL LETTER A */
9462 : [4480+0x02] = 72, /* U+FF42: FULLWIDTH LATIN SMALL LETTER B */
9463 : [4480+0x03] = 3, /* U+FF43: FULLWIDTH LATIN SMALL LETTER C */
9464 : [4480+0x04] = 41, /* U+FF44: FULLWIDTH LATIN SMALL LETTER D */
9465 : [4480+0x05] = 39, /* U+FF45: FULLWIDTH LATIN SMALL LETTER E */
9466 : [4480+0x06] = 75, /* U+FF46: FULLWIDTH LATIN SMALL LETTER F */
9467 : [4480+0x07] = 47, /* U+FF47: FULLWIDTH LATIN SMALL LETTER G */
9468 : [4480+0x08] = 49, /* U+FF48: FULLWIDTH LATIN SMALL LETTER H */
9469 : [4480+0x09] = 40, /* U+FF49: FULLWIDTH LATIN SMALL LETTER I */
9470 : [4480+0x0A] = 53, /* U+FF4A: FULLWIDTH LATIN SMALL LETTER J */
9471 : [4480+0x0B] = 55, /* U+FF4B: FULLWIDTH LATIN SMALL LETTER K */
9472 : [4480+0x0C] = 58, /* U+FF4C: FULLWIDTH LATIN SMALL LETTER L */
9473 : [4480+0x0D] = 93, /* U+FF4D: FULLWIDTH LATIN SMALL LETTER M */
9474 : [4480+0x0E] = 42, /* U+FF4E: FULLWIDTH LATIN SMALL LETTER N */
9475 : [4480+0x0F] = 20, /* U+FF4F: FULLWIDTH LATIN SMALL LETTER O */
9476 : [4480+0x10] = 80, /* U+FF50: FULLWIDTH LATIN SMALL LETTER P */
9477 : [4480+0x11] = 56, /* U+FF51: FULLWIDTH LATIN SMALL LETTER Q */
9478 : [4480+0x12] = 63, /* U+FF52: FULLWIDTH LATIN SMALL LETTER R */
9479 : [4480+0x13] = 65, /* U+FF53: FULLWIDTH LATIN SMALL LETTER S */
9480 : [4480+0x14] = 67, /* U+FF54: FULLWIDTH LATIN SMALL LETTER T */
9481 : [4480+0x15] = 16, /* U+FF55: FULLWIDTH LATIN SMALL LETTER U */
9482 : [4480+0x16] = 94, /* U+FF56: FULLWIDTH LATIN SMALL LETTER V */
9483 : [4480+0x17] = 69, /* U+FF57: FULLWIDTH LATIN SMALL LETTER W */
9484 : [4480+0x18] = 33, /* U+FF58: FULLWIDTH LATIN SMALL LETTER X */
9485 : [4480+0x19] = 44, /* U+FF59: FULLWIDTH LATIN SMALL LETTER Y */
9486 : [4480+0x1A] = 71, /* U+FF5A: FULLWIDTH LATIN SMALL LETTER Z */
9487 : [4480+0x1B] = 520, /* U+FF5B: FULLWIDTH LEFT CURLY BRACKET */
9488 : [4480+0x1C] = 6, /* U+FF5C: FULLWIDTH VERTICAL LINE */
9489 : [4480+0x1D] = 521, /* U+FF5D: FULLWIDTH RIGHT CURLY BRACKET */
9490 : [4480+0x1E] = 102, /* U+FF5E: FULLWIDTH TILDE */
9491 : };
9492 :
9493 : gdk_return
9494 8 : GDKasciify(char **restrict buf, size_t *restrict buflen,
9495 : const char *restrict s)
9496 : {
9497 8 : uint8_t *dst = (uint8_t *) *buf;
9498 8 : size_t dstoff = 0;
9499 8 : size_t bl;
9500 :
9501 8 : bl = strlen(s);
9502 8 : if (*buf == NULL) {
9503 5 : if (bl < 4090)
9504 : bl = 4096;
9505 : else
9506 0 : bl += 8;
9507 5 : dst = GDKmalloc(bl);
9508 5 : if (dst == NULL)
9509 : return GDK_FAIL;
9510 5 : *buf = (char *) dst;
9511 3 : } else if (bl + 8 > *buflen) {
9512 0 : bl += 1024;
9513 0 : dst = GDKrealloc(*buf, bl);
9514 0 : if (dst == NULL)
9515 : return GDK_FAIL;
9516 0 : *buf = (char *) dst;
9517 : } else {
9518 : bl = *buflen;
9519 : }
9520 :
9521 8 : size_t bl8 = bl - 8; /* time for buffer extension */
9522 8 : if ((uint8_t) *s == 0x80) {
9523 : /* nil */
9524 0 : assert(s[1] == 0);
9525 0 : dst[dstoff++] = 0x80;
9526 : } else {
9527 : /* special case for ASCII prefix */
9528 28 : while ((int8_t) *s > 0) {
9529 : /* no need to check for buffer size, we made
9530 : * sure there is enough space */
9531 20 : dst[dstoff++] = (uint8_t) *s++;
9532 : }
9533 52 : while (*s) {
9534 : /* we are at the start of a Unicode codepoint
9535 : * encoded in UTF-8 */
9536 44 : if (dstoff > bl8) {
9537 : /* make sure we have enough space for
9538 : * the largest asciification, i.e. 7
9539 : * bytes plus terminating NUL */
9540 0 : size_t newlen = bl + 1024;
9541 0 : dst = GDKrealloc(*buf, newlen);
9542 0 : if (dst == NULL) {
9543 0 : *buflen = bl;
9544 0 : return GDK_FAIL;
9545 : }
9546 0 : *buf = (char *) dst;
9547 0 : bl = newlen;
9548 0 : bl8 = bl - 8;
9549 : }
9550 44 : const uint8_t *u = (const uint8_t *) s;
9551 44 : int v = asciify[(uint8_t) *s++];
9552 52 : while (v && ((uint8_t) *s & 0xC0) == 0x80) {
9553 8 : v = asciify[v + (uint8_t) *s++];
9554 : }
9555 44 : if (v == 0) {
9556 36 : if ((int8_t) *u > 0)
9557 36 : dst[dstoff++] = *u;
9558 : else
9559 0 : dst[dstoff++] = '?';
9560 : /* skip rest of current codepoint */
9561 36 : while (((uint8_t) *s & 0xC0) == 0x80)
9562 0 : s++;
9563 : } else {
9564 16 : for (u = (const uint8_t *) valtab[v]; *u; u++)
9565 8 : dst[dstoff++] = *u;
9566 : }
9567 : }
9568 : }
9569 8 : if (dstoff + 1 > bl) {
9570 0 : size_t newlen = dstoff + 1;
9571 0 : dst = GDKrealloc(*buf, newlen);
9572 0 : if (dst == NULL) {
9573 0 : *buflen = bl;
9574 0 : return GDK_FAIL;
9575 : }
9576 0 : *buf = (char *) dst;
9577 0 : bl = newlen;
9578 : }
9579 8 : dst[dstoff] = '\0';
9580 8 : *buflen = bl;
9581 8 : return GDK_SUCCEED;
9582 : }
9583 :
9584 : BAT *
9585 34 : BATasciify(BAT *b, BAT *s)
9586 : {
9587 34 : if (b->tascii) {
9588 33 : if (s)
9589 16 : return BATproject(s, b);
9590 17 : return COLcopy(b, TYPE_str, false, TRANSIENT);
9591 : }
9592 :
9593 1 : lng t0 = 0;
9594 1 : BAT *bn;
9595 1 : struct canditer ci;
9596 1 : BATiter bi;
9597 1 : oid bhseqbase = b->hseqbase;
9598 1 : QryCtx *qry_ctx = MT_thread_get_qry_ctx();
9599 1 : qry_ctx = qry_ctx ? qry_ctx : &(QryCtx) {.endtime = 0};
9600 :
9601 1 : TRC_DEBUG_IF(ALGO) t0 = GDKusec();
9602 1 : BATcheck(b, NULL);
9603 1 : canditer_init(&ci, b, s);
9604 1 : bn = COLnew(ci.hseq, TYPE_str, ci.ncand, TRANSIENT);
9605 1 : if (bn == NULL)
9606 : return NULL;
9607 1 : bi = bat_iterator(b);
9608 1 : char *buf = NULL;
9609 1 : size_t buflen = 0;
9610 6 : TIMEOUT_LOOP_IDX_DECL(i, ci.ncand, qry_ctx) {
9611 4 : BUN x = canditer_next(&ci) - bhseqbase;
9612 8 : if (GDKasciify(&buf, &buflen, BUNtvar(bi, x)) != GDK_SUCCEED ||
9613 4 : tfastins_nocheckVAR(bn, i, buf) != GDK_SUCCEED) {
9614 0 : goto bailout;
9615 : }
9616 : }
9617 1 : GDKfree(buf);
9618 1 : BATsetcount(bn, ci.ncand);
9619 1 : bat_iterator_end(&bi);
9620 1 : TIMEOUT_CHECK(qry_ctx,
9621 : GOTO_LABEL_TIMEOUT_HANDLER(bailout, qry_ctx));
9622 1 : bn->tnil = false;
9623 1 : bn->tnonil = false;
9624 1 : bn->tkey = BATcount(bn) <= 1;
9625 1 : bn->tsorted = BATcount(bn) <= 1;
9626 1 : bn->trevsorted = BATcount(bn) <= 1;
9627 1 : bn->theap->dirty |= BATcount(bn) > 0;
9628 1 : TRC_DEBUG(ALGO, "b=" ALGOBATFMT ",s=" ALGOOPTBATFMT
9629 : " -> " ALGOBATFMT " " LLFMT "usec\n",
9630 : ALGOBATPAR(b), ALGOOPTBATPAR(s),
9631 : ALGOBATPAR(bn), GDKusec() - t0);
9632 : return bn;
9633 :
9634 0 : bailout:
9635 0 : GDKfree(buf);
9636 0 : bat_iterator_end(&bi);
9637 0 : BBPreclaim(bn);
9638 0 : return NULL;
9639 : }
|