libsheepy

C lib for handling text files, strings and json like data structure with an object oriented system
git clone https://spartatek.se/git/libsheepy.git
Log | Files | Refs | README | LICENSE

libsheepy.c (2180405B)


      1 // libsheepy
      2 //
      3 // MIT License
      4 //
      5 // Copyright (c) 2026 Remy Noulin
      6 //
      7 // Permission is hereby granted, free of charge, to any person obtaining a copy
      8 // of this software and associated documentation files (the "Software"), to deal
      9 // in the Software without restriction, including without limitation the rights
     10 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
     11 // copies of the Software, and to permit persons to whom the Software is
     12 // furnished to do so, subject to the following conditions:
     13 //
     14 // The above copyright notice and this permission notice shall be included in all
     15 // copies or substantial portions of the Software.
     16 //
     17 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     18 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     19 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
     20 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     21 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
     22 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
     23 // SOFTWARE.
     24 
     25 
     26 // libsheepyExportCscript is not set by default
     27 // libsheepyExportCscript is set in demoScript.pp for use in the C script
     28 //   the header is included in the C script to avoid problems with tcc and be able to run
     29 //   the script from anywhere
     30  #ifndef libsheepyExportCscript
     31 #include "libsheepy.h"
     32  #endif
     33 // __USE_GNU is needed to get the definition of REG_RIP
     34 //NOT NEEDED because _GNU_SOURCE is in libsheepy.h - #define __USE_GNU
     35 #if (__APPLE__)
     36 #define _XOPEN_SOURCE   1
     37 #endif
     38 #if (!(__APPLE__ || __FreeBSD__ || __TERMUX__ || __OpenBSD__ || __DragonFly__ || MUSL_LIBC || __sun__))
     39 //register_printf_specifier
     40 #include "printf.h"
     41 #endif
     42 typedef enum { LOCALE_NORMAL, LOCALE_TURKIC, LOCALE_LITHUANIAN } localeType;
     43 
     44 #define internal static
     45 
     46 #include <sys/stat.h>
     47 #include <ctype.h>
     48 #include <sys/time.h>
     49 #include <stdio.h>
     50 #if (!(__OpenBSD__ || __HAIKU__))
     51 #include <ucontext.h>
     52 #endif
     53 #include <libgen.h>
     54 #include <dirent.h>
     55 #include <stdarg.h>
     56 #include <errno.h>
     57 #if (!(__OpenBSD__ || __HAIKU__))
     58 #include <wordexp.h>
     59 #endif
     60 #include <stdbool.h>
     61 #include <string.h>
     62 #include <stdlib.h>
     63 #include <unistd.h>
     64 #include <stdint.h>
     65 #include <signal.h>
     66 
     67 #if (__APPLE__)
     68 #endif
     69 #if (!(__APPLE__ || __FreeBSD__ || __TERMUX__ || __OpenBSD__ || __DragonFly__ || MUSL_LIBC || __sun__))
     70 #endif
     71 #if (!(__FreeBSD__ || __OpenBSD__ || __DragonFly__))
     72 #else
     73 #endif
     74 #if (!(__TERMUX__ || __OpenBSD__ || MUSL_LIBC || __HAIKU__))
     75 #endif
     76 #if ((__FreeBSD__))
     77 #endif
     78 #if (!(__arm__ || __aarch64__ || __riscv || __APPLE__ || __i386__ || __FreeBSD__ || __OpenBSD__ || __DragonFly__ || MUSL_LIBC || __HAIKU__))
     79 internal void segfault_sigaction(int signal, siginfo_t *si, void *arg);
     80 internal void segfault_sigaction(int signal UNUSED, siginfo_t *si UNUSED, void *arg UNUSED);
     81 #endif
     82 void cleanUpCharFree(char **val);
     83 void cleanUpListFree(char* **val);
     84 void cleanUpVoidFree(void **val);
     85 void cleanUpFileFree(FILE **val);
     86 void cleanUpFd(int *val);
     87 uint64_t shStopwatch(uint8_t op);
     88 int getLogSymbols(void);
     89 void setLogSymbols(int mode);
     90 int getMaxLogLevel(void);
     91 void setMaxLogLevel(int logLevel);
     92 FILE *setLogFile(char *filename);
     93 void closeLogFiles(void);
     94 int getLogMode(void);
     95 void setLogMode(int mode);
     96 bool getLogShortPath(void);
     97 void setLogShortPath(bool shortPath);
     98 bool getLogStdout(void);
     99 void setLogStdout(bool state);
    100 bool openProgLogFile(void);
    101 void keepAnsiColorsInLog(bool state);
    102 void _pLog(int loglevel, const char *file, const char *func, int line, const char *msg, ...);
    103 #if (!(__APPLE__ || __FreeBSD__ || __TERMUX__ || __OpenBSD__ || __DragonFly__ || MUSL_LIBC || __sun__ || __HAIKU__))
    104 int print_k(FILE *stream, const struct printf_info *info, const void *const *args);
    105 int print_K(FILE *stream, const struct printf_info *info, const void *const *args);
    106 int print_k_arginfo(const struct printf_info *info UNUSED, size_t n, int *argtypes, int* size);
    107 int print_b(FILE *stream, const struct printf_info *info, const void *const *args);
    108 int print_b_arginfo(const struct printf_info *info UNUSED, size_t n, int *argtypes, int* size);
    109 #endif
    110 #if ((__APPLE__ || __FreeBSD__ || __TERMUX__ || __OpenBSD__ || __DragonFly__ || MUSL_LIBC || __sun__ || __HAIKU__))
    111 void initLibsheepyF(const char *progPath, initLibsheepyObjectP initF);
    112 void initLibsheepyF(const char *progPath, initLibsheepyObjectP initF);
    113 #endif
    114 void finalizeLibsheepyCharAtExit(void);
    115 int64_t getStackLimit(void);
    116 int setStackLimit(int64_t stackSize);
    117 int enableCoreDump(void);
    118 const char *getProgName(void);
    119 bool setProgName(const char *name);
    120 void setDefaultProgName(void);
    121 void freeProgName(void);
    122 const char *getProgPath(void);
    123 const char *getRealProgPath(void);
    124 void freeRealProgPath(void);
    125 int systemNFreeF(char *command, int line, const char *thisFunc, const char *thisFileName);
    126 time_t getModificationTime(const char *path);
    127 int setModificationTime(const char *path, time_t mtime);
    128 bool isReadable(const char *path);
    129 bool isWritable(const char *path);
    130 bool isExecutable(const char *path);
    131 bool equalModificationTimes(const char *path1, const char *path2);
    132 time_t getCurrentUnixTime(void);
    133 time_t strToUnixTime(const char *date, const char *format);
    134 char *timeToS(const time_t t);
    135 char *bTimeToS(char *dst, const time_t t);
    136 char *bLTimeToS(char *dst, size_t dstSize, const time_t t);
    137 char *timeToYMDS(const time_t t);
    138 char *bTimeToYMDS(char *dst, const time_t t);
    139 char *bLTimeToYMDS(char *dst, size_t dstSize, const time_t t);
    140 char *getCurrentDate(void);
    141 char *bGetCurrentDate(char *dst);
    142 char *bLGetCurrentDate(char *dst, size_t dstSize);
    143 char *getCurrentDateYMD(void);
    144 char *bGetCurrentDateYMD(char *dst);
    145 char *bLGetCurrentDateYMD(char *dst, size_t dstSize);
    146 char *shDirname(const char *path);
    147 char *bDirname(char *path);
    148 char *bLDirname(char *path, size_t pathSize);
    149 #if (__OpenBSD__ || __HAIKU__)
    150 char *expandHome(const char* path);
    151 #else
    152 char *expandHome(const char* path);
    153 #endif
    154 #if (__OpenBSD__ || __HAIKU__)
    155 char *iExpandHome(char **path);
    156 #else
    157 char *iExpandHome(char **path);
    158 #endif
    159 #if (__OpenBSD__ || __HAIKU__)
    160 char *bExpandHome(char *path);
    161 #else
    162 char *bExpandHome(char *path);
    163 #endif
    164 #if (__OpenBSD__ || __HAIKU__)
    165 char *bLExpandHome(char *path, size_t pathSize);
    166 #else
    167 char *bLExpandHome(char *path, size_t pathSize);
    168 #endif
    169 char *normalizePath(const char *path);
    170 char *iNormalizePath(char **path);
    171 char *bNormalizePath(char *path);
    172 char *bLNormalizePath(char *path, size_t pathSize);
    173 char *relPath(const char *path, const char *start);
    174 char *iRelPath(char **path, const char *start);
    175 char *bRelPath(char *dest, const char *path, const char *start);
    176 char *bLRelPath(char *dest, size_t destSize, char *path, const char *start);
    177 char *getHomePath(void);
    178 char *bGetHomePath(char *path);
    179 char *bLGetHomePath(char *path, size_t pathSize);
    180 const char *getCHomePath(void);
    181 char *getCwd(void);
    182 char *bLGetCwd(char *path, size_t pathSize);
    183 int chDir(const char *path);
    184 bool isDir(const char *path);
    185 char *shReadlink(const char *path);
    186 char *endlink(const char *path);
    187 bool isLink(const char *path);
    188 bool fileExists(const char *filePath);
    189 bool fileChmod(const char *filePath, mode_t mode);
    190 ssize_t fileSize(const char *filePath);
    191 ssize_t fileSizeFP(FILE *fp);
    192 void *readFileToS(const char *filePath);
    193 void *readStreamToS(FILE *fp);
    194 void *bReadFileToS(const char *filePath, void *dst);
    195 void *bReadStreamToS(FILE *fp, void *dst);
    196 void *bLReadFileToS(const char *filePath, void *dst, size_t dstSize);
    197 void *bLReadStreamToS(FILE *fp, void *dst, size_t dstSize);
    198 ssize_t readFile(const char *filePath, void **buffer);
    199 ssize_t bReadFile(const char *filePath, void *buffer);
    200 ssize_t bLReadFile(const char *filePath, void *buffer, size_t dstSize);
    201 int writeFileS(const char *filePath, const char *string);
    202 int writeFile(const char *filePath, void *buffer, size_t len);
    203 int writeStreamS(FILE *fp, const char *string);
    204 int writeLStream(FILE *fp, void *buffer, size_t len);
    205 bool appendFileS(const char *filePath, const char *string);
    206 bool appendFile(const char *filePath, void *buffer, size_t len);
    207 char **walkDir(const char* dirPath);
    208 internal void walkADir(const char *dirPath, char ***list);
    209 char **walkDirDir(const char* dirPath);
    210 internal void walkADirDir(const char *dirPath, char ***list);
    211 char **readDir(const char *dirPath);
    212 char **readDirDir(const char *dirPath);
    213 char **walkDirAll(const char* dirPath);
    214 internal void walkADirAll(const char *dirPath, char ***list);
    215 char **readDirAll(const char *dirPath);
    216 mode_t getUmask(void);
    217 mode_t getCurrentPermissions(void);
    218 int mkdirParents(const char* path);
    219 int rmAll(const char* path);
    220 int rmADir(const char *dirPath);
    221 int copy(const char* src, const char* dst);
    222 int copyFile(const char* src, const char* dst);
    223 int copyADir(const char *src, const char *dst, const char *path);
    224 int shRename(const char* src, const char* dst);
    225 int shMove(const char* src, const char* dst);
    226 void setSoftwareRandom(void);
    227 void setHardwareRandom(void);
    228 int randomUrandomOpen(void);
    229 void randomUrandomClose(void);
    230 uint64_t randomWord(void);
    231 uint64_t randomWordFromHW(void);
    232 uint64_t randomChoice(uint64_t range);
    233 char *randomS(uint64_t length);
    234 char *bRandomS(char *dst, size_t dstSize);
    235 char *randomAlphaNumS(uint64_t length);
    236 char *bRandomAlphaNumS(char *dst, size_t dstSize);
    237 char *readS(void);
    238 char *bLReadS(char *dst, size_t dstSize);
    239 UNUSED local char *shGetpass(void);
    240 char *readPasswordS(void);
    241 bool zeroS(char *string);
    242 bool zeroBuf(void *buf, size_t len);
    243 void *memdup(const void *buf, size_t size);
    244 void readEnter(void);
    245 char *readLine(FILE *fp);
    246 void freeManySF(char *paramType, ...);
    247 char *dupS(const char *string);
    248 void shPrintfS(const char *fmt, ...);
    249 void shEPrintfS(const char *fmt, ...);
    250 void logNFree(char *s);
    251 void loghex(const void *buf, size_t len);
    252 char *toHexS(const void *buf, size_t len);
    253 char *toHexSepS(const void *buf, size_t len, const char *separator);
    254 char *toHexHeadSepS(const void *buf, size_t len, const char *head, const char *separator);
    255 char *strCpy(char *restrict dst, const char *restrict src);
    256 char *strNCpy(char *restrict dst, const char *restrict src, size_t srcSize);
    257 char *strLCpy(char *restrict dst, size_t dstSize, const char *restrict src);
    258 char *strCat(char *restrict dst, const char *restrict src);
    259 char *strNCat(char *restrict dst, const char *restrict src, size_t srcLen);
    260 char *strLCat(char *restrict dst, size_t dstSize, const char *restrict src);
    261 char *strLNCat(char *restrict dst, size_t dstSize, const char *restrict src, size_t srcLen);
    262 char *catSF(const char *paramType, ...);
    263 char *iCatSF(char *dst, const char *paramType, ...);
    264 char *bLCatSF(char *dst, size_t dstSize, const char *paramType, ...);
    265 char *formatS(const char *fmt, ...);
    266 char *bFormatS(char *string, const char *fmt, ...);
    267 char *bLFormatS(char *string, size_t stringSize, const char *fmt, ...);
    268 char *appendS(const char *string1, const char *string2);
    269 char *appendCharS(const char *string1, char c);
    270 char *appendSChar(char c, const char *string2);
    271 char *iAppendS(char **string1, const char *string2);
    272 char *iAppendCharS(char **string1, char c);
    273 char *iAppendNFreeS(char **string1, char *string2);
    274 char *iAppendManySF(char **string, const char *paramType, ...);
    275 char *bAppendManySF(char *string, const char *paramType, ...);
    276 char *bLAppendManySF(char *string, size_t stringSize, const char *paramType, ...);
    277 char *prependS(const char *string1, const char *string2);
    278 char *prependCharS(const char *string1, char c);
    279 char *prependSChar(char c, const char *string2);
    280 char *iPrependS(char **string1, const char *string2);
    281 char *iPrependCharS(char **string1, char c);
    282 char *iPrependNFreeS(char **string1, char *string2);
    283 char *bPrependS(char *string1, const char *string2);
    284 char *bLPrependS(char *string1, size_t string1Size, const char *string2);
    285 char* replaceS(const char *s, const char *olds, const char *news, size_t max );
    286 #define replaceS_max(s,olds,news) replaceS(s,olds,news, 0)
    287 char *replaceCharSS(const char *s, char olds, const char *news, size_t max);
    288 char *replaceSCharS(const char *s, const char *olds, char news, size_t max);
    289 char *replaceCharCharS(const char *s, char olds, char news, size_t max);
    290 size_t replaceSLen(const char *s, const char *olds, const char *news, size_t max);
    291 char* iReplaceS(char **s, const char *olds, const char *news, size_t max );
    292 #define iReplaceS_max(s,olds,news) iReplaceS(s,olds,news, 0)
    293 char *iReplaceCharSS(char **s, char olds, const char *news, size_t max);
    294 char *iReplaceSCharS(char **s, const char *olds, char news, size_t max);
    295 char *iReplaceCharCharS(char **s, char olds, char news, size_t max);
    296 char* bReplaceS(char *s, const char *olds, const char *news, size_t max );
    297 #define bReplaceS_max(s,olds,news) bReplaceS(s,olds,news, 0)
    298 char* bLReplaceS(char *s, size_t sSize, const char *olds, const char *news, size_t max);
    299 char *replaceManySF(const char *paramType, ...);
    300 char *iReplaceManySF(char **s, char *paramType, ...);
    301 char *bReplaceManySF(char *s, char *paramType, ...);
    302 char *bLReplaceManySF(char *s, size_t sSize, char *paramType, ...);
    303 char* icReplaceS(const char *s, const char *olds, const char *news, size_t max );
    304 #define icReplaceS_max(s,olds,news) icReplaceS(s,olds,news, 0)
    305 char *icReplaceCharSS(const char *s, char olds, const char *news, size_t max);
    306 char *icReplaceSCharS(const char *s, const char *olds, char news, size_t max);
    307 char *icReplaceCharCharS(const char *s, char olds, char news, size_t max);
    308 char* iicReplaceS(char **s, const char *olds, const char *news, size_t max );
    309 #define iicReplaceS_max(s,olds,news) iicReplaceS(s,olds,news, 0)
    310 char *iicReplaceCharSS(char **s, char olds, const char *news, size_t max);
    311 char *iicReplaceSCharS(char **s, const char *olds, char news, size_t max);
    312 char *iicReplaceCharCharS(char **s, char olds, char news, size_t max);
    313 char* bicReplaceS(char *s, const char *olds, const char *news, size_t max );
    314 #define bicReplaceS_max(s,olds,news) bicReplaceS(s,olds,news, 0)
    315 char* bLicReplaceS(char *s, size_t sSize, const char *olds, const char *news, size_t max);
    316 char *icReplaceManySF(const char *paramType, ...);
    317 char *iicReplaceManySF(char **s, char *paramType, ...);
    318 char *bicReplaceManySF(char *s, char *paramType, ...);
    319 char *bLicReplaceManySF(char *s, size_t sSize, char *paramType, ...);
    320 bool eqS(const char *string1, const char *string2);
    321 bool eqCharS(char c, const char *string2);
    322 bool eqSChar(const char *string1, char c);
    323 bool eqIS(const char *string1, const char *string2, int64_t index);
    324 bool eqICharS(const char *string1, char c, int64_t index);
    325 bool startsWithS(const char *string1, const char *string2);
    326 bool startsWithCharS(const char *string1, char c);
    327 bool endsWithS(const char *string1, const char *string2);
    328 bool endsWithCharS(const char *string1, char c);
    329 ssize_t countS(const char *s, const char *needle);
    330 ssize_t countCharS(const char *s, char c);
    331 bool icEqS(const char *string1, const char *string2);
    332 bool icEqCharS(char c, const char *string2);
    333 bool icEqSChar(const char *string1, char c);
    334 bool icEqIS(const char *string1, const char *string2, int64_t index);
    335 bool icEqICharS(const char *string1, char c, int64_t index);
    336 bool icStartsWithS(const char *string1, const char *string2);
    337 bool icStartsWithCharS(const char *string1, char c);
    338 bool icEndsWithS(const char *string1, const char *string2);
    339 bool icEndsWithCharS(const char *string1, char c);
    340 ssize_t icCountS(const char *s, const char *needle);
    341 ssize_t icCountCharS(const char *s, char c);
    342 bool hasCtrlChar(const char *string);
    343 char *stripCtrlS(const char *string);
    344 char *iStripCtrlS(char **string);
    345 char *bStripCtrlS(char *string);
    346 char *stripColorsS(const char *string);
    347 char *iStripColorsS(char **string);
    348 char *bStripColorsS(char *string);
    349 char* quoteS(const char *s, char delim);
    350 char* bQuoteS(char *dest, const char *s, char delim);
    351 char* bLQuoteS(char *dest, size_t destSize, const char *s, char delim);
    352 size_t quoteLenS(const char *s, char delim);
    353 char* escapeS(const char *s, char delim);
    354 char* bEscapeS(char *dest, const char *s, char delim);
    355 char* bLEscapeS(char *dest, size_t destSize, const char *s, char delim);
    356 size_t escapeLenS(const char *s, char delim);
    357 char nibbleToHex(u8 n);
    358 char* cEscapeS(const char *S);
    359 char* bCEscapeS(char *dest, const char *S);
    360 char* bLCEscapeS(char *dest, size_t destSize, const char *S);
    361 size_t cEscapeLenS(const char *s);
    362 bool isNumber(const char *string);
    363 bool isInt(const char *string);
    364 int64_t parseInt(const char *string);
    365 int64_t parseIntChar(char c);
    366 int64_t parseI64(const char *string);
    367 int64_t parseI64Char(char c);
    368 double parseDouble(const char *string);
    369 double parseDoubleChar(char c);
    370 uint64_t parseHex(const char *string);
    371 char *intToS(int64_t n);
    372 char *bIntToS(char *s, int64_t n);
    373 char *doubleToS(double n);
    374 char *bDoubleToS(char *s, double n);
    375 size_t lenS(const char *string);
    376 size_t sizeS(const char *string);
    377 char *upperS(const char *string);
    378 char *iUpperS(char **string);
    379 char *bUpperS(char *string);
    380 char *lowerS(const char *string);
    381 char *iLowerS(char **string);
    382 char *bLowerS(char *string);
    383 char *trimS(const char *string);
    384 char *iTrimS(char **string);
    385 char *bTrimS(char *string);
    386 char *lTrimS(const char *string);
    387 char *iLTrimS(char **string);
    388 char *bLTrimS(char *string);
    389 char *rTrimS(const char *string);
    390 char *iRTrimS(char **string);
    391 char *bRTrimS(char *string);
    392 char *uniqS(const char *string, char c);
    393 char *iUniqS(char **string, char c);
    394 char *bUniqS(char *string, char c);
    395 char *icUniqS(const char *string, char c);
    396 char *iicUniqS(char **string, char c);
    397 char *bicUniqS(char *string, char c);
    398 char *repeatS(const char *string, size_t count);
    399 char *iRepeatS(char **string, size_t count);
    400 char *bRepeatS(char *dest, const char *string, size_t count);
    401 char *bLRepeatS(char *dest, size_t destSize, const char *string, size_t count);
    402 char *repeatCharS(char c, size_t count);
    403 char *bRepeatCharS(char *dest, char c, size_t count);
    404 char *bLRepeatCharS(char *dest, size_t destSize, char c, size_t count);
    405 ssize_t repeatLenS(const char *string, size_t count);
    406 char *ellipsisStartS(const char *string, size_t targetLength, const char *ellipsisString);
    407 char *iEllipsisStartS(char **string, size_t targetLength, const char *ellipsisString);
    408 char *bEllipsisStartS(char *dest, const char *string, size_t targetLength, const char *ellipsisString);
    409 char *bLEllipsisStartS(char *dest, size_t destSize, const char *string, size_t targetLength, const char *ellipsisString);
    410 char *ellipsisStartCharS(const char *string, size_t targetLength, char ellipsisChar);
    411 char *iEllipsisStartCharS(char **string, size_t targetLength, char ellipsisChar);
    412 char *bEllipsisStartCharS(char *dest, const char *string, size_t targetLength, char ellipsisChar);
    413 char *bLEllipsisStartCharS(char *dest, size_t destSize, const char *string, size_t targetLength, char ellipsisChar);
    414 ssize_t ellipsisLenS(const char *string, size_t targetLength, const char *ellipsisString);
    415 char *ellipsisEndS(const char *string, size_t targetLength, const char *ellipsisString);
    416 char *iEllipsisEndS(char **string, size_t targetLength, const char *ellipsisString);
    417 char *bEllipsisEndS(char *dest, const char *string, size_t targetLength, const char *ellipsisString);
    418 char *bLEllipsisEndS(char *dest, size_t destSize, const char *string, size_t targetLength, const char *ellipsisString);
    419 char *ellipsisEndCharS(const char *string, size_t targetLength, char ellipsisChar);
    420 char *iEllipsisEndCharS(char **string, size_t targetLength, char ellipsisChar);
    421 char *bEllipsisEndCharS(char *dest, const char *string, size_t targetLength, char ellipsisChar);
    422 char *bLEllipsisEndCharS(char *dest, size_t destSize, const char *string, size_t targetLength, char ellipsisChar);
    423 char *padStartS(const char *string, size_t targetLength, const char *padString);
    424 char *iPadStartS(char **string, size_t targetLength, const char *padString);
    425 char *bPadStartS(char *dest, const char *string, size_t targetLength, const char *padString);
    426 char *bLPadStartS(char *dest, size_t destSize, const char *string, size_t targetLength, const char *padString);
    427 char *padStartCharS(const char *string, size_t targetLength, char padChar);
    428 char *iPadStartCharS(char **string, size_t targetLength, char padChar);
    429 char *bPadStartCharS(char *dest, const char *string, size_t targetLength, char padChar);
    430 char *bLPadStartCharS(char *dest, size_t destSize, const char *string, size_t targetLength, char padChar);
    431 ssize_t padStartLenS(const char *string, size_t targetLength, const char *padString);
    432 char *padEndS(const char *string, size_t targetLength, const char *padString);
    433 char *iPadEndS(char **string, size_t targetLength, const char *padString);
    434 char *bPadEndS(char *dest, const char *string, size_t targetLength, const char *padString);
    435 char *bLPadEndS(char *dest, size_t destSize, const char *string, size_t targetLength, const char *padString);
    436 char *padEndCharS(const char *string, size_t targetLength, char padChar);
    437 char *iPadEndCharS(char **string, size_t targetLength, char padChar);
    438 char *bPadEndCharS(char *dest, const char *string, size_t targetLength, char padChar);
    439 char *bLPadEndCharS(char *dest, size_t destSize, const char *string, size_t targetLength, char padChar);
    440 ssize_t padEndLenS(const char *string, size_t targetLength, const char *padString);
    441 char getS(const char *string, int64_t index);
    442 char *setS(char *string, int64_t index, char c);
    443 char *swapS(char *string, int64_t index1, int64_t index2);
    444 char *iSwapS(char **string, int64_t index1, int64_t index2);
    445 char *bSwapS(char *string, int64_t index1, int64_t index2);
    446 char *bLSwapS(char *string, size_t size, int64_t index1, int64_t index2);
    447 char *sliceS(const char *string, int64_t start, int64_t end);
    448 char *iSliceS(char **string, int64_t start, int64_t end);
    449 char *bSliceS(char *string, int64_t start, int64_t end);
    450 char *bLSliceS(char *string, size_t stringSize, int64_t start, int64_t end);
    451 char *cropS(char *string, int64_t start, int64_t end);
    452 char *iCropS(char **string, int64_t start, int64_t end);
    453 char cropElemS(char *string, int64_t index);
    454 char iCropElemS(char **string, int64_t index);
    455 char *insertS(const char *string, int64_t index, const char *toInsert);
    456 char *insertNFreeS(const char *string, int64_t index, char *toInsert);
    457 char *iInsertS(char **string, int64_t index, const char *toInsert);
    458 char *iInsertNFreeS(char **string, int64_t index, char *toInsert);
    459 char *bInsertS(char *string, int64_t index, const char *toInsert);
    460 char *bLInsertS(char *string, size_t stringSize, int64_t index, const char *toInsert);
    461 char *injectS(const char *string, int64_t index, char toInject);
    462 char *iInjectS(char **string, int64_t index, char toInject);
    463 char *bInjectS(char *string, int64_t index, char toInject);
    464 char *bLInjectS(char *string, size_t stringSize, int64_t index, char toInject);
    465 char *delS(const char *string, int64_t start, int64_t end);
    466 char *iDelS(char **string, int64_t start, int64_t end);
    467 char *bDelS(char *string, int64_t start, int64_t end);
    468 char *bLDelS(char *string, size_t stringSize, int64_t start, int64_t end);
    469 char *delElemS(const char *string, int64_t index);
    470 char *iDelElemS(char **string, int64_t index);
    471 char *bDelElemS(char *string, int64_t index);
    472 char *bLDelElemS(char *string, size_t stringSize, int64_t index);
    473 char *findS(const char *string, const char *needle);
    474 char *findCharS(const char *string, char c);
    475 ssize_t indexOfS(const char *string, const char *needle);
    476 ssize_t indexOfCharS(const char *string, char c);
    477 bool hasS(const char *string, const char *needle);
    478 bool hasCharS(const char *string, char c);
    479 char *icFindS(const char *string, const char *needle);
    480 char *icFindCharS(const char *string, char c);
    481 ssize_t icIndexOfS(const char *string, const char *needle);
    482 ssize_t icIndexOfCharS(const char *string, char c);
    483 bool icHasS(const char *string, const char *needle);
    484 bool icHasCharS(const char *string, char c);
    485 char *tokS(char *s, const char *delim, char **saveptr);
    486 char *icTokS(char *s, const char *delim, char **saveptr);
    487 size_t lenUTF8(const char *s);
    488 size_t bLLenUTF8(const char *s, size_t maxSize);
    489 bool isUTF8(const char * string);
    490 bool bLIsUTF8(const char * string, size_t stringSize);
    491 bool isCodeUTF8(const char *code);
    492 const char *nextUTF8(const char *utf8);
    493 const char *bLNextUTF8(const char *string, size_t utf8Size, const char *utf8);
    494 const char *findNextUTF8(const char *string, size_t utf8Size, const char *utf8);
    495 const char *prevUTF8(const char *utf8);
    496 const char *bPrevUTF8(const char *string, const char *utf8);
    497 local const char *bPrevUTF8Tiny(const char *string, const char *utf8);
    498 local char *bPrevRWUTF8Tiny(const char *string, char *utf8);
    499 const char *idx2PtrUTF8(const char *utf8, int64_t index);
    500 local char *idx2PtrRWUTF8(char *utf8, int64_t index);
    501 const char *bLIdx2PtrUTF8(const char *utf8, size_t utf8Size, int64_t index);
    502 int64_t ptr2IdxUTF8(const char *utf8, const char *pos);
    503 int64_t bPtr2IdxUTF8(const char *start, const char *utf8, const char *pos);
    504 int64_t bLPtr2IdxUTF8(const char *utf8, size_t utf8Size, const char *pos);
    505 int64_t bLPtr2NegIdxUTF8(const char *utf8, size_t utf8Size, const char *pos);
    506 char *makeValidUTF8(const char *utf8);
    507 char *bMakeValidUTF8(char *utf8);
    508 char *nMakeValidUTF8(const char *utf8, size_t utf8Len);
    509 char *bNMakeValidUTF8(char *dst, const char *utf8, size_t utf8Len);
    510 char *bLMakeValidUTF8(char *dst, size_t dstSize, const char *utf8);
    511 char *bLNMakeValidUTF8(char *dst, size_t dstSize, const char *utf8, size_t utf8Len);
    512 char *strNCpyUTF8(char *dst, const char *src, size_t srcLen);
    513 char *strLCpyUTF8(char *dst, size_t dstSize, const char *src);
    514 char *strNCatUTF8(char *dst, const char *src, size_t srcLen);
    515 char *strLCatUTF8(char *dst, size_t dstSize, const char *src);
    516 char *strLNCatUTF8(char *dst, size_t dstSize, const char *src, size_t srcLen);
    517 char* icReplaceUTF8(const char UNUSED *s, const char UNUSED *olds, const char UNUSED *news, size_t UNUSED max );
    518 #define icReplaceUTF8_max(s,olds,news) icReplaceUTF8(s,olds,news, 0)
    519 char *icReplaceCharSUTF8(const char *s UNUSED, char olds UNUSED, const char *news UNUSED, size_t max UNUSED);
    520 char *icReplaceSCharUTF8(const char *s UNUSED, const char *olds UNUSED, char news UNUSED, size_t max UNUSED);
    521 char* iicReplaceUTF8(char UNUSED **s, const char UNUSED *olds, const char UNUSED *news, size_t UNUSED max );
    522 #define iicReplaceUTF8_max(s,olds,news) iicReplaceUTF8(s,olds,news, 0)
    523 char *iicReplaceCharSUTF8(char **s UNUSED, char olds UNUSED, const char *news UNUSED, size_t max UNUSED);
    524 char *iicReplaceSCharUTF8(char **s UNUSED, const char *olds UNUSED, char news UNUSED, size_t max UNUSED);
    525 char* bicReplaceUTF8(char UNUSED *s, const char UNUSED *olds, const char UNUSED *news, size_t UNUSED max );
    526 #define bicReplaceUTF8_max(s,olds,news) bicReplaceUTF8(s,olds,news, 0)
    527 char* bLicReplaceUTF8(char UNUSED *s, size_t UNUSED sSize, const char UNUSED *olds, const char UNUSED *news, size_t max UNUSED);
    528 char *icReplaceManyUTF8F(const char *paramType UNUSED, ...);
    529 char *iicReplaceManyUTF8F(char **s UNUSED, char *paramType UNUSED, ...);
    530 char *bicReplaceManyUTF8F(char *s UNUSED, char *paramType UNUSED, ...);
    531 char *bLicReplaceManyUTF8F(char *s UNUSED, size_t sSize UNUSED, char *paramType UNUSED, ...);
    532 bool eqIUTF8(const char *string1, const char *string2, int64_t index);
    533 bool eqICharUTF8(const char *string1, char c, int64_t index);
    534 bool icEqUTF8(const char *string1, const char *string2);
    535 bool icEqCharUTF8(char c, const char *string2);
    536 bool icEqUTF8Char(const char *string1, char c);
    537 bool icEqIUTF8(const char *string1 UNUSED, const char *string2 UNUSED, int64_t index UNUSED);
    538 bool icEqICharUTF8(const char *string1 UNUSED, char c UNUSED, int64_t index UNUSED);
    539 bool icStartsWithUTF8(const char *string1, const char *string2);
    540 bool icEndsWithUTF8(const char *string1, const char *string2);
    541 ssize_t icCountUTF8(const char *s, const char *needle);
    542 internal localeType getLocaleType(void);
    543 rune code2RuneUTF8(const char *code);
    544 rune code2RuneLUTF8(const char *code, uint8_t *n);
    545 size_t bRune2CodeUTF8(char *dst, rune c);
    546 uint8_t runeLenUTF8(rune r);
    547 internal size_t decompose_hangul(rune s, rune *r);
    548 internal const char *find_decomposition (rune ch);
    549 internal size_t runeFullyDecompose(rune  ch, rune *result, size_t resultLen);
    550 internal size_t output_marks(const char **p_inout, char *dst, bool remove_dot);
    551 internal size_t output_special_case(char *dst, int offset, int type, int which);
    552 rune toupperUTF8(rune c);
    553 internal size_t _upperUTF8(char *dst, const char *utf8, localeType lcl);
    554 char *upperUTF8(const char *utf8);
    555 char *iUpperUTF8(char **utf8);
    556 char *bUpperUTF8(char *utf8 UNUSED);
    557 local int runeCombiningClass (rune uc);
    558 internal bool has_more_above (const char *str);
    559 rune tolowerUTF8(rune c);
    560 internal size_t _lowerUTF8(char *dst, const char *utf8, localeType lcl);
    561 char *lowerUTF8(const char *utf8);
    562 char *iLowerUTF8(char **utf8);
    563 char *bLowerUTF8(char *string UNUSED);
    564 char *casefoldUTF8(const char *utf8);
    565 char *uniqUTF8(const char *string, const char *code);
    566 char *iUniqUTF8(char **string, const char *code);
    567 char *bUniqUTF8(char *string, const char *code);
    568 char *icUniqUTF8(const char *string UNUSED, const char *code UNUSED);
    569 char *iicUniqUTF8(char **string UNUSED, const char *code UNUSED);
    570 char *bicUniqUTF8(char *string UNUSED, char c UNUSED);
    571 rune getUTF8(const char *string, int64_t index);
    572 char *setUTF8(char *string, int64_t index, rune c);
    573 char *sliceUTF8(const char *string, int64_t start, int64_t end);
    574 char *iSliceUTF8(char **string, int64_t start, int64_t end);
    575 char *bSliceUTF8(char *string, int64_t start, int64_t end);
    576 char *bLSliceUTF8(char *string, size_t stringSize, int64_t start, int64_t end);
    577 char *insertUTF8(const char *string, int64_t index, const char *toInsert);
    578 char *insertNFreeUTF8(const char *string, int64_t index, char *toInsert);
    579 char *iInsertUTF8(char **string, int64_t index, const char *toInsert);
    580 char *iInsertNFreeUTF8(char **string, int64_t index, char *toInsert);
    581 char *bInsertUTF8(char *string, int64_t index, const char *toInsert);
    582 char *bLInsertUTF8(char *string, size_t stringSize, int64_t index, const char *toInsert);
    583 char *delUTF8(const char *string, int64_t start, int64_t end);
    584 char *iDelUTF8(char **string, int64_t start, int64_t end);
    585 char *bDelUTF8(char *string, int64_t start, int64_t end);
    586 char *bLDelUTF8(char *string, size_t stringSize, int64_t start, int64_t end);
    587 ssize_t indexOfUTF8(const char *string, const char *needle);
    588 ssize_t icIndexOfUTF8(const char *string UNUSED, const char *needle UNUSED);
    589 bool icHasUTF8(const char *string, const char *needle);
    590 char *icTokUTF8(const char *s UNUSED, const char *delim UNUSED, char **saveptr UNUSED);
    591 char **icSplitUTF8(const char *string UNUSED, const char* delim UNUSED);
    592 char **icExtractUTF8(const char *string UNUSED, const char* delim1 UNUSED, const char* delim2 UNUSED);
    593 char **icExtractCharSUTF8(const char *string UNUSED, char delim1 UNUSED, const char* delim2 UNUSED);
    594 char **icExtractSCharUTF8(const char *string UNUSED, const char* delim1 UNUSED, char delim2 UNUSED);
    595 internal int icListSortUTF8Cmp(const void * a, const void * b);
    596 char **icListSortUTF8(char **list);
    597 char **iicListSortUTF8(char ***list);
    598 bool icListEqUTF8(char **list1, char **list2);
    599 bool icListHasUTF8(char **list, const char *string);
    600 ssize_t icListIndexOfUTF8(char **list, const char *string);
    601 ssize_t icListBinarySearchUTF8(char **list, const char *string);
    602 char **icListUniqUTF8(char **list);
    603 char **iicListUniqUTF8(char ***list);
    604 char *emptySF(void);
    605 char *iEmptySF(char **string);
    606 bool isEmptyS(const char *string);
    607 bool isBlankS(const char *string);
    608 ssize_t intIndex(int64_t index, int64_t length);
    609 char **listEmptySF(void);
    610 char **iListEmptySF(char ***list);
    611 bool listIsEmptyS(char **list);
    612 bool listIsBlankS(char **list);
    613 char **listCreateSF(const char *paramType, ...);
    614 char **listFromArrayS(char **array, size_t size);
    615 char **listFromCArrayS(const char **array, size_t size);
    616 char **listPushS(char ***list, const char *s);
    617 char **listPushCharS(char ***list, char c);
    618 char **iListPushS(char ***list, char *s);
    619 char *listPopS(char ***list);
    620 char **listPrependS(char ***list, const char *s);
    621 char **listPrependCharS(char ***list, char c);
    622 char **iListPrependS(char ***list, char *s);
    623 char *listDequeueS(char ***list);
    624 void listFreeS(char **list);
    625 void listFreeManySF(char **paramType, ...);
    626 size_t listLengthS(char **list);
    627 size_t listLengthCS(const char **list);
    628 ssize_t listStrLengthS(char **list);
    629 ssize_t listIntIndexS(char **list, int64_t index);
    630 char **listAddrS(char **list, int64_t index);
    631 char *listGetS(char **list, int64_t index);
    632 char *iListGetS(char **list, int64_t index);
    633 char *listGetCS(const char **list, int64_t index);
    634 const char *iListGetCS(const char **list, int64_t index);
    635 char **listSetS(char **list, int64_t index, const char *s);
    636 char **listSetCharS(char **list, int64_t index, char c);
    637 char **iListSetS(char **list, int64_t index, char *s);
    638 char **listSwapS(char **list, int64_t index1, int64_t index2);
    639 char **iListSwapS(char **list, int64_t index1, int64_t index2);
    640 char **split(const char *string, const char* delim);
    641 char **splitS(const char *string, const char* delim);
    642 char **splitChar(const char *string, char delim);
    643 char **icSplit(const char *string, const char* delim);
    644 char **icSplitS(const char *string, const char* delim);
    645 char **icSplitChar(const char *string, char delim);
    646 ssize_t joinLength(char **list, const char* delim);
    647 char *join(char **list, const char* delim);
    648 char *joinS(char **list, const char* delim);
    649 char *joinCS(const char **list, const char* delim);
    650 char *joinChar(char **list, char delim);
    651 char *bJoin(char *string, char **list, const char* delim);
    652 char *bJoinChar(char *string, char **list, char delim);
    653 char *bLJoin(char *string, size_t stringSize, char **list, const char* delim);
    654 char *bLJoinChar(char *string, size_t stringSize, char **list, char delim);
    655 char **extractS(const char *string, const char* delim1, const char* delim2);
    656 char **extractCharSS(const char *string, char delim1, const char* delim2);
    657 char **extractSCharS(const char *string, const char* delim1, char delim2);
    658 char **extractCharCharS(const char *string, char delim1, char delim2);
    659 char **icExtractS(const char *string, const char* delim1, const char* delim2);
    660 char **icExtractCharSS(const char *string, char delim1, const char* delim2);
    661 char **icExtractSCharS(const char *string, const char* delim1, char delim2);
    662 char **icExtractCharCharS(const char *string, char delim1, char delim2);
    663 char **listDupS(char **list);
    664 char **listDupCS(const char **list);
    665 char **iListDupS(char **list);
    666 char **listReverseS(char **list);
    667 char **iListReverseS(char ***list);
    668 char **listCatSF(char **paramType, ...);
    669 char **listAppendS(char ***list1, char **list2);
    670 char **iListAppendS(char ***list1, char **list2);
    671 char **iListAppendNSmashS(char ***list1, char **list2);
    672 char **listShiftS(char ***list1, char **list2);
    673 char **iListShiftS(char ***list1, char **list2);
    674 char **iListShiftNSmashS(char ***list1, char **list2);
    675 char **listAddS(char **list1, char **list2);
    676 char **listAddCS(char **list1, const char **list2);
    677 char **listSliceS(char **list, int64_t start, int64_t end);
    678 char **iListCopyS(char **list, int64_t start, int64_t end);
    679 char **iListSliceS(char ***list, int64_t start, int64_t end);
    680 char **listCropS(char **list, int64_t start, int64_t end);
    681 char **iListCropS(char ***list, int64_t start, int64_t end);
    682 char *listCropElemS(char **list, int64_t index);
    683 char *iListCropElemS(char ***list, int64_t index);
    684 char **listInsertS(char **list, int64_t index, char **toInsert);
    685 char **iListInsertS(char ***list, int64_t index, char **toInsert);
    686 char **iListInsertNFreeS(char ***list, int64_t index, char **toInsert);
    687 char **listInjectS(char **list, int64_t index, char *toInject);
    688 char **listInjectCharS(char **list, int64_t index, char toInject);
    689 char **iListInjectS(char ***list, int64_t index, char *toInject);
    690 char **iListInjectCharS(char ***list, int64_t index, char toInject);
    691 char **listDelS(char **list, int64_t start, int64_t end);
    692 char **iListDelS(char ***list, int64_t start, int64_t end);
    693 char **iListRemoveS(char ***list, int64_t start, int64_t end);
    694 char **listDelElemS(char **list, int64_t index);
    695 char **iListDelElemS(char ***list, int64_t index);
    696 char **iListRemoveElemS(char ***list, int64_t index);
    697 int listPrintS(char **list);
    698 int listPrintCS(const char **list);
    699 internal int listSortSCmp(const void * a, const void * b);
    700 char **listSortS(char **list);
    701 char **iListSortS(char ***list);
    702 char **listSortFS(char **list, shCmpt compareFunction);
    703 char **iListSortFS(char ***list, shCmpt compareFunction);
    704 internal int icListSortSCmp(const void * a, const void * b);
    705 char **icListSortS(char **list);
    706 char **iicListSortS(char ***list);
    707 char **readText(const char *filePath);
    708 char **readStream(FILE *fp);
    709 bool writeText(const char *filePath, char **list);
    710 bool writeCText(const char *filePath, const char **list);
    711 bool writeStream(FILE *fp, char **list);
    712 bool writeCStream(FILE *fp, const char **list);
    713 bool appendText(const char *filePath, char **list);
    714 bool appendCText(const char *filePath, const char **list);
    715 char **execOut(const char *cmd);
    716 char **systemOutf(const char *fmt, ...);
    717 int systemf(const char *fmt, ...);
    718 int commandF(const char *cmd, int line, const char *thisFunc, const char *thisFileName);
    719 int commandfF(int line, const char *thisFunc, const char *thisFileName, const char *fmt, ...);
    720 int commandNFreeF(char *cmd, int line, const char *thisFunc, const char *thisFileName);
    721 bool listEqS(char **list1, char **list2);
    722 bool listEqCS(char **list1, const char **list2);
    723 bool listEqC1S(const char **list1, char **list2);
    724 bool listEqCCS(const char **list1, const char **list2);
    725 bool listHasS(char **list, const char *string);
    726 bool listHasCS(const char **list, const char *string);
    727 bool listHasCharS(char **list, char c);
    728 bool listHasCharCS(const char **list, char c);
    729 ssize_t listIndexOfS(char **list, const char *string);
    730 ssize_t listIndexOfCS(const char **list, const char *string);
    731 ssize_t listIndexOfCharS(char **list, char c);
    732 ssize_t listIndexOfCharCS(const char **list, char c);
    733 ssize_t listBinarySearchS(char **list, const char *string);
    734 ssize_t listBinarySearchCharS(char **list, char c);
    735 char **listUniqS(char **list);
    736 char **iListUniqS(char ***list);
    737 bool icListEqS(char **list1, char **list2);
    738 bool icListEqCS(char **list1, const char **list2);
    739 bool icListEqC1S(const char **list1, char **list2);
    740 bool icListEqCCS(const char **list1, const char **list2);
    741 bool icListHasS(char **list, const char *string);
    742 bool icListHasCharS(char **list, char c);
    743 bool icListHasCS(const char **list, const char *string);
    744 bool icListHasCharCS(const char **list, char c);
    745 ssize_t icListIndexOfS(char **list, const char *string);
    746 ssize_t icListIndexOfCS(const char **list, const char *string);
    747 ssize_t icListIndexOfCharS(char **list, char c);
    748 ssize_t icListIndexOfCharCS(const char **list, char c);
    749 ssize_t icListBinarySearchS(char **list, const char *string);
    750 ssize_t icListBinarySearchCharS(char **list, char c);
    751 char **icListUniqS(char **list);
    752 char **iicListUniqS(char ***list);
    753 char **listCompactS(char **list);
    754 char **iListCompactS(char ***list);
    755 void btraceEnable(void);
    756 void btraceDisable(void);
    757 bool btraceConfig(void);
    758 #if (__FreeBSD__ || __TERMUX__ || __OpenBSD__ || __DragonFly__ || MUSL_LIBC || __sun__ || __HAIKU__)
    759 char **btrace(void);
    760 char **btrace(void);
    761 #endif
    762 void **listEmptyF(void);
    763 void **iListEmptyF(void ***list);
    764 bool listIsEmpty(void **list);
    765 void **listCreateF(void *paramType, ...);
    766 void **listFromArray(void **array, size_t size);
    767 void **listPush(void ***list, void *s);
    768 void *listPop(void ***list);
    769 void **listPrepend(void ***list, void *s);
    770 void *listDequeue(void ***list);
    771 void listFree(void **list);
    772 void listFreeManyF(void **paramType, ...);
    773 size_t listLength(void **list);
    774 void *listGet(void **list, int64_t index);
    775 void **listSet(void **list, int64_t index, void *s);
    776 void **listDup(void **list);
    777 void **listReverse(void **list);
    778 void **iListReverse(void ***list);
    779 void **listCatF(void **paramType, ...);
    780 void **listAppend(void ***list1, void **list2);
    781 void **listAdd(void **list1, void **list2);
    782 void **listSlice(void **list, int64_t start, int64_t end);
    783 void **iListSlice(void ***list, int64_t start, int64_t end);
    784 void **listInsert(void **list, int64_t index, void **toInsert);
    785 void **iListInsert(void ***list, int64_t index, void **toInsert);
    786 void **listDel(void **list, int64_t start, int64_t end);
    787 void **iListDel(void ***list, int64_t start, int64_t end);
    788 int ringInit(void *ring, int maxCount);
    789 int ringEmpty(void *ring);
    790 int ringIsEmpty(void *ring);
    791 int ringIsFull(void *ring);
    792 ssize_t ringCount(void *ring);
    793 i64 ringPush(void *ring);
    794 int ringPop(void *ring);
    795 i64 ringPrepend(void *ring);
    796 int ringDequeue(void *ring);
    797 bool fiberAdd(void *ctx, int thisSlot, fiberFT func);
    798 bool fiberPrepend(void *ctx, int thisSlot, fiberFT func);
    799 void scheduler(void);
    800 #if ((__GNUC__ > 4))
    801 uint64_t getMonotonicTime(void);
    802 #else
    803 uint64_t getMonotonicTime(void);
    804 #endif
    805 int nanoSleepF(uint64_t time);
    806 
    807 //TODO compare speed - include sys/sendfile.h
    808 
    809 #include "sys/resource.h"
    810 #if (!(__FreeBSD__ || __OpenBSD__ || __DragonFly__))
    811 #include "alloca.h"
    812 #else
    813 #include <stdlib.h>
    814 #endif
    815 #include "pwd.h"
    816 // ULONG_MAX
    817 #include "limits.h"
    818 #if (!(__TERMUX__ || __OpenBSD__ || MUSL_LIBC || __HAIKU__))
    819 // backtrace
    820 #include "execinfo.h"
    821 #endif
    822 // get home path
    823 #include "pwd.h"
    824 // terminal settings for shGetpass
    825 #include "termios.h"
    826 // setlocale
    827 #include "locale.h"
    828 
    829 #if ((__FreeBSD__))
    830 // WIFEXITED WEXITSTATUS
    831 #include <sys/wait.h>
    832 #endif
    833 
    834 
    835 
    836 /** \file
    837  * This file has basic file, random, string, list functions
    838  *
    839  * There are 2 types of lists: char** and void**
    840  *
    841  * The *S (not i*S) functions duplicate the parameters and results.
    842  * You must free the result if result is non-NULL and free the parameters
    843  *
    844  * The functions starting with i*S are in place functions.
    845  *
    846  * In Place functions: iList*S and i*S
    847  * The iList*S and i*S functions modify the input buffers
    848  * The input buffers must be allocated with malloc/calloc
    849  * Returns are pointers to original buffers
    850  *
    851  * For more information, the documentation is located at http://spartatek.se/libsheepy/
    852  */
    853 
    854 #define MALLOC   malloc
    855 #define REALLOC   realloc
    856 
    857 
    858 // Function section
    859 // define not used for now
    860 #define __libsheepy   1
    861 
    862 /** type bool true (glibc true is not bool), for use in generics */
    863 const bool TRUE  = true;
    864 /** type bool false (glibc true is not bool), for use in generics */
    865 const bool FALSE = false;
    866 
    867 /** backtrace in error messages is enabled by default */
    868 bool btraceCfg = true;
    869 
    870 /**
    871  * setjmp buffers for try/throw,throwV macros
    872  */
    873 jmp_buf tryJumpBuffers[maxTryThrowCount];
    874 
    875 /**
    876  * program/library path to find the debug symbols for the program using libsheepy
    877  */
    878 static const char *libSheepyArg0     = NULL;
    879 static const char *libSheepyProgPath = NULL;
    880 static char *progName                = NULL;
    881 static const char *defaultProgName   = NULL;
    882 static char *libSheepyRealProgPath   = NULL;
    883 
    884 static struct sigaction default_sa   = init0Var;
    885 
    886 /**
    887  * segmentation fault handler
    888  *
    889  * prints line and file where the segfault crash occured
    890  */
    891 #if (!(__arm__ || __aarch64__ || __riscv || __APPLE__ || __i386__ || __FreeBSD__ || __OpenBSD__ || __DragonFly__ || MUSL_LIBC || __HAIKU__))
    892 internal void segfault_sigaction(int signal, siginfo_t *si, void *arg) {
    893 
    894   /* char addr[20] */
    895   /* char *s */
    896   /* char realProgPath[8192] */
    897   ucontext_t *context = (ucontext_t *)arg;;
    898   logE("Segmentation fault (%d) at address %p RIP: %" PRIx64 " in program %s\n", signal, si->si_addr, (uint64_t)context->uc_mcontext.gregs[REG_RIP], libSheepyArg0);
    899 
    900   logBtrace;
    901 
    902   // incorrect code, doesn't work because of ASLR
    903   /* sprintf(addr, "0x%" PRIx64, (uint64_t)context->uc_mcontext.gregs[REG_RIP]); */
    904   /* realpath("/proc/self/exe", realProgPath); */
    905   /* s = 'addr2line -e %s %s', realProgPath, addr */
    906   /* systemNFree(s); */
    907   // call default signal handler
    908   default_sa.sa_sigaction(signal, si, arg);
    909 }
    910 
    911 #else // __arm__ || __aarch64__ || __riscv || __APPLE__ || __i386__ || __FreeBSD__ || __OpenBSD__ || __DragonFly__ || MUSL_LIBC || __HAIKU__
    912 internal void segfault_sigaction(int signal UNUSED, siginfo_t *si UNUSED, void *arg UNUSED) {
    913 
    914   // call default signal handler
    915   default_sa.sa_sigaction(signal, si, arg);
    916 }
    917 
    918 #endif
    919 
    920 void cleanUpCharFree(char **val) {
    921 
    922   free(*val);
    923 }
    924 
    925 
    926 void cleanUpListFree(char* **val) {
    927 
    928   listFreeS(*val);
    929 }
    930 
    931 
    932 void cleanUpVoidFree(void **val) {
    933 
    934   free(*val);
    935 }
    936 
    937 
    938 void cleanUpFileFree(FILE **val) {
    939 
    940   if ((*val)) {
    941     fclose(*val);
    942 }
    943   }
    944 
    945 
    946 void cleanUpFd(int *val) {
    947 
    948   if ((*val != -1)) {
    949     close(*val);
    950 }
    951   }
    952 
    953 /**
    954  * nanosecond stopwatch
    955  *
    956  * \param
    957  *   op operation: 0 start, 1 get stopwatch value
    958  * \return
    959  *   0 when op is 0
    960  *   time since last start in ns when op is 1
    961  */
    962 uint64_t shStopwatch(uint8_t op) {
    963 
    964   static uint64_t startTime;
    965 
    966   if (!op) {
    967     startTime = getMonotonicTime();
    968     return(0);
    969   }
    970   else {
    971     return(getMonotonicTime()-startTime);
    972 }
    973   }
    974 
    975 /** log symbols to use, LOG_INVALID_MODE is log mode default symbols */
    976 static int logSymbols = LOG_INVALID_MODE;
    977 
    978 /** set log level, logs above logMaxLevel are skipped */
    979 static int logMaxLevel = LOG_INVALID;
    980 
    981 uint64_t logMask = 0xFFFFFFFFFFFFFFFF;
    982 
    983 static FILE *_logging_files[16] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL };
    984 static int _log_current_mode = LOG_DATE;
    985 
    986 static bool _log_verbose_short_path = true;
    987 
    988 static bool _logToStdout = true;
    989 
    990 static bool keepAnsiColors = true;
    991 
    992 // logging file 0 is stdout
    993 static uint16_t _current_log_file = 1;
    994 
    995 static const char *log_tags[LOG_INVALID_MODE][LOG_INVALID+1] = {{"[EMERGENCY] ","[ALERT]     ","[CRITICAL]  ","[ERROR]     ","[WARNING]   ","[NOTICE]    ","[PASS]      ","[INFO]      ","[DEBUG]     ","[INVALID LOG LEVEL] "},{"[_] ", "[_] ", "[!] ", "[*] ", "[-] ", "[#] ", "[>] ", "[+] ", "[$] ", "[~] " },{"[_] ", "[_] ", "[!] ", "[*] ", "[-] ", "[#] ", "[>] ", "[+] ", "[$] ", "[~] " },{"[_] ", "[_] ", "[!] ", "[*] ", "[-] ", "[#] ", "[>] ", "[+] ", "[$] ", "[~] " },{"[_] ", "[_] ", "[!] ", "[*] ", "[-] ", "[#] ", "[>] ", "[+] ", "[$] ", "[~] " },{"[_] ", "[_] ", "[!] ", "[*] ", "[-] ", "[#] ", "[>] ", "[+] ", "[$] ", "[~] " },{ "", "", "", "", "", "", "", "", "", "" },{ "[⛔]","[⛔]","[⛔]", "[✖ ]", "[⚠ ]", "[ℹ ]", "[✔ ]", "[ℹ ]", "[☁ ]", "[~~]"  }};
    996 
    997 //
    998 static const char *LOG_DATE_FORMAT[LOG_INVALID_MODE] = { "%c\n", "CONCISE HAS NO DATE", "%y-%m-%d %H:%M:%S", "FUNC", "PROG", "%y-%m-%d %H:%M:%S", "VOID"};
    999 
   1000 /**
   1001  * get current log symbols
   1002  */
   1003 int getLogSymbols(void) {
   1004 
   1005   return(logSymbols);
   1006 }
   1007 
   1008 /**
   1009  * set log symbols
   1010  *
   1011  * LOG_VERBOSE for words
   1012  * LOG_UTF8 for emojis
   1013  * LOG_VOID for no symbols
   1014  * LOG_INVALID_MODE (reset log symbols) for default log mode symbols
   1015  * anything else (LOG_CONCISE,...) for symbols (!*+->~)
   1016  *
   1017  * default is default log mode symbols
   1018  */
   1019 void setLogSymbols(int mode) {
   1020 
   1021   if (mode <= LOG_INVALID_MODE) {
   1022     logSymbols = mode;
   1023   }
   1024   else {
   1025     logSymbols = LOG_INVALID_MODE;
   1026 }
   1027   }
   1028 
   1029 /**
   1030  * get current max log level
   1031  *
   1032  * default is LOG_INVALID, to show all log levels
   1033  * -1 hides all logs
   1034  */
   1035 int getMaxLogLevel(void) {
   1036 
   1037   return(logMaxLevel);
   1038 }
   1039 
   1040 /**
   1041  * set max log level
   1042  * logs above logMaxLevel are skipped
   1043  *
   1044  * default is LOG_INVALID, to show all log levels
   1045  * LOG_DISABLE hides all logs
   1046  *
   1047  * \param
   1048  *   logLevel from LOG_DISABLE to LOG_INVALID
   1049  */
   1050 void setMaxLogLevel(int logLevel) {
   1051 
   1052   logMaxLevel = logLevel;
   1053 }
   1054 
   1055 /**
   1056  * set log file
   1057  * the logs are appended to all log files set with this function
   1058  *
   1059  * there is a maximum of 15 log files
   1060  *
   1061  * \return
   1062  *    log file handle
   1063  *    NULL when filename is NULL or more than 15 log files are set
   1064  */
   1065 FILE *setLogFile(char *filename) {
   1066 
   1067   if (!filename) {
   1068     return(NULL);
   1069   }
   1070 
   1071   if (_current_log_file >= 16) {
   1072     // we only support 16 different files
   1073     return(NULL);
   1074   }
   1075 
   1076   _logging_files[_current_log_file] = fopen(filename, "a+");
   1077   if (!_logging_files[_current_log_file]) {
   1078     pFuncError
   1079     shEPrintfS("The path was: \"%s\"\n", filename);
   1080     return(NULL);
   1081   }
   1082   return(_logging_files[_current_log_file++]);
   1083 }
   1084 
   1085 /**
   1086  * close logfiles opened with setLogFile
   1087  */
   1088 void closeLogFiles(void) {
   1089 
   1090   rangeFrom(i, 1, _current_log_file) {
   1091     fclose(_logging_files[i]);
   1092     _logging_files[i] = NULL;
   1093   }
   1094 
   1095   _current_log_file = 1;;
   1096 }
   1097 
   1098 /**
   1099  * get current log mode (verbose, concise)
   1100  *
   1101  * \return
   1102  *   current mode LOG_VERBOSE, LOG_CONCISE, ...
   1103  */
   1104 int getLogMode(void) {
   1105 
   1106   return(_log_current_mode);
   1107 }
   1108 
   1109 /**
   1110  * set log mode LOG_VERBOSE, LOG_CONCISE, ..
   1111  *
   1112  * the default log mode is LOG_DATE
   1113  */
   1114 void setLogMode(int mode) {
   1115 
   1116   if (mode < 0 || mode >= LOG_INVALID_MODE) {
   1117     shPrintError
   1118     shEPrintfS("The available log modes are: LOG_VERBOSE, LOG_CONCISE, LOG_DATE, LOG_FUNC, LOG_PROG, LOG_PROGNDATE, LOG_PROGNFUNC, LOG_VOID and LOG_UTF8\n");
   1119   }
   1120   else {
   1121     _log_current_mode = mode;
   1122 }
   1123   }
   1124 
   1125 /**
   1126  * get current log long/short path value
   1127  *
   1128  * The default value is TRUE (short paths)
   1129  * TRUE shows short file paths in logs
   1130  * FALSE shows long file paths in logs
   1131  *
   1132  * \return
   1133  *   current long/short file path configuration value for VERBOSE mode
   1134  */
   1135 bool getLogShortPath(void) {
   1136 
   1137   return(_log_verbose_short_path);
   1138 }
   1139 
   1140 /**
   1141  * set log long/short file path value for VERBOSE mode
   1142  *
   1143  * TRUE shows short file paths in logs
   1144  * FALSE shows long file paths in logs
   1145  *
   1146  * the default long/short path value is TRUE
   1147  */
   1148 void setLogShortPath(bool shortPath) {
   1149 
   1150   _log_verbose_short_path = shortPath;
   1151 }
   1152 
   1153 /**
   1154  * get stdout state, when TRUE (default) all logs are printed to stdout
   1155  */
   1156 bool getLogStdout(void) {
   1157 
   1158   return(_logToStdout);
   1159 }
   1160 
   1161 /**
   1162  * enable/disable printing logs to stdout
   1163  *
   1164  * TRUE: print logs to stdout
   1165  * FALSE: print logs to files only
   1166  */
   1167 void setLogStdout(bool state) {
   1168 
   1169   _logToStdout = state;
   1170 }
   1171 
   1172 /**
   1173  * log to a file named progName.log
   1174  * Use closeLogFiles when finished logging
   1175  */
   1176 bool openProgLogFile(void) {
   1177 
   1178   if (!progName && !defaultProgName) {
   1179     logME(libsheepyErrorMask, "Program name is not set, call initLibsheepy or set prog name with setProgName");
   1180     return(false);
   1181   }
   1182 
   1183   char *s = formatS("%s.log", progName ? progName : defaultProgName);;
   1184 
   1185   if (!setLogFile(s)) {
   1186     logME(libsheepyErrorMask, "Couldn't open log file: %s", s);
   1187     free(s);
   1188     return(false);
   1189   }
   1190 
   1191   free(s);
   1192   return(true);
   1193 }
   1194 
   1195 /**
   1196  * enable/disable ansi color codes in logs
   1197  *
   1198  * TRUE: print colors
   1199  * FALSE: strip colors
   1200  */
   1201 void keepAnsiColorsInLog(bool state) {
   1202 
   1203   keepAnsiColors = state;
   1204 }
   1205 
   1206 /**
   1207  * print logging levels
   1208  * logs messages to all log file
   1209  *
   1210  * in LOG_VERBOSE mode, logs loglevel, filename, function name, time, line number and msg
   1211  * in LOG_CONCISE mode, logs loglevel and msg
   1212  *
   1213  * the maximum message length is 10240
   1214  *
   1215  */
   1216 #define MAX_MSG_LEN   10240
   1217 void _pLog(int loglevel, const char *file, const char *func, int line, const char *msg, ...) {
   1218   _logging_files[0] = stdout;;
   1219   va_list args;
   1220   char buffer[lenS(msg) + MAX_MSG_LEN];
   1221 
   1222   if (_current_log_file == 1 && !_logToStdout) {
   1223     // log to stdout is disabled and there are no log files
   1224     return;
   1225   }
   1226 
   1227   if (loglevel > logMaxLevel) {
   1228     // skip log above logMaxLevel
   1229     return;
   1230   }
   1231 
   1232   va_start(args, msg);
   1233 
   1234   // append the varargs to the buffer we want to print.
   1235   // this is so that our pipe chars don't get lost later.
   1236   // also, make sure we don't get an invalid loglevel.
   1237   if (!msg) {
   1238     buffer[0] = 0;
   1239   }
   1240   else {
   1241     vsnprintf(buffer, strlen(msg)+MAX_MSG_LEN, msg, args);
   1242   }
   1243   va_end(args);
   1244 
   1245   if (loglevel < 0 || loglevel >= LOG_INVALID) {
   1246     loglevel = LOG_INVALID;
   1247   }
   1248   if (_log_current_mode < 0 || _log_current_mode >= LOG_INVALID_MODE) {
   1249     _log_current_mode = LOG_VERBOSE;
   1250   }
   1251 
   1252   char clock[100];
   1253 
   1254   if (_log_current_mode == LOG_VERBOSE || _log_current_mode == LOG_DATE || _log_current_mode == LOG_PROGNDATE) {
   1255     time_t _clk = time(NULL);;
   1256     struct tm *_pClk = localtime(&_clk);;
   1257     strftime(clock, 100, LOG_DATE_FORMAT[_log_current_mode], _pClk);
   1258   }
   1259 
   1260   // set console color for printing the tag
   1261   if (_logToStdout && keepAnsiColors && _log_current_mode != LOG_VOID) {
   1262     switch (loglevel) {
   1263       case LOG_EMERGENCY:
   1264         printf(BLD RED);
   1265         break;
   1266       case LOG_ALERT:
   1267         printf(BLD RED);
   1268         break;
   1269       case LOG_CRITICAL:
   1270         printf(BLD RED);
   1271         break;
   1272       case LOG_ERROR:
   1273         printf(RED);
   1274         break;
   1275       case LOG_WARNING:
   1276         printf(YLW);
   1277         break;
   1278       case LOG_NOTICE:
   1279         printf(BLU);
   1280         break;
   1281       case LOG_PASS:
   1282         printf(BLD GRN);
   1283         break;
   1284       case LOG_INFO:
   1285         printf(BLU);
   1286         break;
   1287       case LOG_DEBUG:
   1288         printf(BLD CYN);
   1289         break;
   1290       case LOG_INVALID:
   1291       default:
   1292         printf(MGT);
   1293         break;
   1294     }
   1295   }
   1296 
   1297   if (!keepAnsiColors) {
   1298     if (!bStripColorsS(buffer)) {
   1299       return;
   1300   }
   1301     }
   1302 
   1303   // long or short file path in VERBOSE mode
   1304   if ((_log_current_mode == LOG_VERBOSE) && _log_verbose_short_path) {
   1305     const char *slashP[3]   = {NULL, NULL, NULL};
   1306     indexer idx;
   1307     indexerInit(idx, 3);
   1308     u16 count         = 0;
   1309     const char *slash = file;
   1310 
   1311     while (slash) {
   1312       slash = strchr(slash, '/');
   1313       if (!slash) {
   1314         break;
   1315       }
   1316       else {
   1317         slash++;
   1318       }
   1319       if (indexerIsFull(idx)) {
   1320         indexerDequeue(idx);
   1321       }
   1322       indexerPush(idx);
   1323       slashP[indexerLast(idx)] = slash;
   1324       count++;
   1325     }
   1326 
   1327     if (count > 2) {
   1328       // path has more than 2 slashes a/b/c.c
   1329       file = slashP[indexerFirst(idx)];
   1330       //puts(nS(slashP[indexerFirst(idx)]));
   1331       //puts(nS(slashP[indexerRef(idx,1)]));
   1332       //puts(nS(slashP[indexerLast(idx)]));
   1333   }
   1334     }
   1335 
   1336   int firstLogFile = _logToStdout ? 0 : 1;
   1337   int i;
   1338   if (_log_current_mode != LOG_VOID) {
   1339     int tagSymbols = logSymbols != LOG_INVALID_MODE ? logSymbols : _log_current_mode;
   1340 
   1341     // print the log tag
   1342     for (i=firstLogFile; i < _current_log_file; i++) {
   1343       fprintf(_logging_files[i], "%s", log_tags[tagSymbols][loglevel]);
   1344     }
   1345 
   1346     if (_logToStdout) {
   1347       printf(RST);
   1348   }
   1349     }
   1350 
   1351   /* logVar(_log_current_mode, "d"); */
   1352   /* puts(log_tags[_log_current_mode][loglevel]); */
   1353 
   1354   char *linePrefix = "";
   1355   switch(_log_current_mode) {
   1356     case LOG_VERBOSE:
   1357       for (i=firstLogFile; i < _current_log_file; i++) {
   1358         fprintf(_logging_files[i], "%s %s() (%s:%d) at %s |\t", progName ? progName : defaultProgName, func, file, line, clock);
   1359         linePrefix = " |\t";;
   1360       }
   1361       break;
   1362     case LOG_FUNC:
   1363       for (i=firstLogFile; i < _current_log_file; i++) {
   1364         fprintf(_logging_files[i], "%s %d: ", func, line);
   1365       }
   1366       break;
   1367     case LOG_PROG:
   1368       for (i=firstLogFile; i < _current_log_file; i++) {
   1369         fprintf(_logging_files[i], "%s: ", progName ? progName : defaultProgName);
   1370       }
   1371       break;
   1372     case LOG_PROGNDATE:
   1373       for (i=firstLogFile; i < _current_log_file; i++) {
   1374         fprintf(_logging_files[i], "%s %s: ", progName ? progName : defaultProgName, clock);
   1375       }
   1376       break;
   1377     case LOG_DATE:
   1378       for (i=firstLogFile; i < _current_log_file; i++) {
   1379         fprintf(_logging_files[i], "%s ", clock);
   1380       }
   1381       break;
   1382     case LOG_PROGNFUNC:
   1383       for (i=firstLogFile; i < _current_log_file; i++) {
   1384         fprintf(_logging_files[i], "%s %s %d: ", progName ? progName : defaultProgName, func, line);
   1385       }
   1386       break;
   1387     default:;
   1388       // don't print anything
   1389   }
   1390 
   1391 
   1392   // print the first line
   1393   if (buffer[0] == 0) {
   1394     // empty or NULL msg, print empty line
   1395     for (i=firstLogFile; i < _current_log_file; i++) {
   1396      fprintf(_logging_files[i], "\n");
   1397   }
   1398     }
   1399   else {
   1400     char *toLog = strtok(buffer, "\n");
   1401     for (i=firstLogFile; i < _current_log_file; i++) {
   1402      fprintf(_logging_files[i], "%s\n", toLog);
   1403     }
   1404 
   1405     // for these next lines, add a pipe and tab once.
   1406     toLog = strtok(NULL, "\n");
   1407     while (toLog) {
   1408       for (i=firstLogFile; i < _current_log_file; i++) {
   1409         fprintf(_logging_files[i], "%s%s\n", linePrefix, toLog);
   1410       }
   1411       toLog = strtok(NULL, "\n");
   1412   }
   1413     }
   1414 
   1415   for(i = 1; i <_current_log_file; i++) {;
   1416     // write log files immediately
   1417     fflush(_logging_files[i]);
   1418   }
   1419 }
   1420 
   1421 #if (!(__APPLE__ || __FreeBSD__ || __TERMUX__ || __OpenBSD__ || __DragonFly__ || MUSL_LIBC || __sun__ || __HAIKU__))
   1422 /**
   1423  * printf RGB Colors
   1424  *
   1425  * %k and %K type specifier to GNU printf for RBG colors
   1426  *
   1427  * - %k foreground hex color
   1428  * - %K background hex color
   1429  *
   1430  * Example:
   1431  * printf("%k%KRGB color" RST, 0x99EEFF, 0x666666);
   1432  */
   1433 
   1434 
   1435 #define TERMRGB   "\x1b[38;2;"
   1436 #define BGTERMRGB   "\x1b[48;2;"
   1437 
   1438 /**
   1439  * %k printf type specifier, RGB foreground, uint32_t
   1440  * 0x00RRGGBB
   1441  */
   1442 int print_k(FILE *stream, const struct printf_info *info, const void *const *args) {
   1443   u32 rgbColor;
   1444   char b[20];
   1445   int len;
   1446 
   1447   rgbColor = *((const u32*) args[0]);
   1448   snprintf(b, sizeof(b), TERMRGB "%u;%u;%um", rgbColor>>16, (rgbColor&0xFF00)>>8, rgbColor&0xFF);
   1449 
   1450   /* Pad to the minimum field width and print to the stream. */
   1451   //len = fprintf(stream, "%*s", (info->left ? -info->width : info->width), b)
   1452   sheepyRGBFP;
   1453   return(len);
   1454 }
   1455 
   1456 /**
   1457  * %K printf type specifier, RGB background, uint32_t
   1458  * 0x00RRGGBB
   1459  */
   1460 int print_K(FILE *stream, const struct printf_info *info, const void *const *args) {
   1461   u32 rgbColor;
   1462   char b[20];
   1463   int len;
   1464 
   1465   rgbColor = *((const u32*) args[0]);
   1466   snprintf(b, sizeof(b), BGTERMRGB "%u;%u;%um", rgbColor>>16, (rgbColor&0xFF00)>>8, rgbColor&0xFF);
   1467 
   1468   /* Pad to the minimum field width and print to the stream. */
   1469   //len = fprintf(stream, "%*s", (info->left ? -info->width : info->width), b)
   1470   sheepyRGBFP;
   1471   return(len);
   1472 }
   1473 
   1474 /**
   1475  * procress printf argument
   1476  */
   1477 int print_k_arginfo(const struct printf_info *info UNUSED, size_t n, int *argtypes, int* size) {
   1478 
   1479   if (n > 0) {
   1480     argtypes[0] = PA_POINTER;
   1481     size[0]     = sizeof(u32);
   1482   }
   1483   return(1);
   1484 }
   1485 
   1486 /**
   1487  * %b printf type specifier, print bool as FALSE/TRUE
   1488  */
   1489 int print_b(FILE *stream, const struct printf_info *info, const void *const *args) {
   1490   bool value;
   1491   int len;
   1492 
   1493   value = *((const bool*) args[0]);
   1494 
   1495   /* Pad to the minimum field width and print to the stream. */
   1496   //len = fprintf(stream, "%*s", (info->left ? -info->width : info->width), boolS(value))
   1497   sheepyBOOLFP;
   1498   return(len);
   1499 }
   1500 
   1501 /**
   1502  * procress printf argument
   1503  */
   1504 int print_b_arginfo(const struct printf_info *info UNUSED, size_t n, int *argtypes, int* size) {
   1505 
   1506   if (n > 0) {
   1507     argtypes[0] = PA_CHAR;
   1508     size[0]     = sizeof(bool);
   1509   }
   1510   return(1);
   1511 }
   1512 
   1513 #endif
   1514 // #if __APPLE__ || __FreeBSD__ || __TERMUX___ || __OpenBSD__ || __DragonFly__ || MUSL_LIBC || __sun__ || __HAIKU__
   1515 
   1516 
   1517 static const char sheepyBuild[] = "/.sheepy/build";
   1518 
   1519 /**
   1520  * initialize libsheepy (optional, for debug)
   1521  *
   1522  * initialize segfault handler for crash debug
   1523  * the segfault handler prints the line and file where the segfault occured
   1524  *
   1525  * initialize the fibers
   1526  * initialize libsheepyObject
   1527  */
   1528 #if ((__APPLE__ || __FreeBSD__ || __TERMUX__ || __OpenBSD__ || __DragonFly__ || MUSL_LIBC || __sun__ || __HAIKU__))
   1529 void initLibsheepyF(const char *progPath, initLibsheepyObjectP initF) {
   1530 
   1531   // no buffering if output is sent to file, this makes everything
   1532   // a bit slower, but it is possible to see where the code fails
   1533   if (!isatty(1)) {
   1534     setbuf(stdout, NULL);
   1535   }
   1536 
   1537   libSheepyArg0     = progPath;
   1538   libSheepyProgPath = findS(progPath, sheepyBuild);;
   1539   if (!libSheepyProgPath) {
   1540     libSheepyProgPath = progPath;
   1541   }
   1542   else {
   1543     // when progPath had sheepyBuild: progPath = /home/USER/.sheepy/build/home/USER/git/sw/PRG/PRG
   1544     // keep only the end of the path which is the source path
   1545     // libSheepyProgPath = /home/USER/git/sw/PRG/PRG
   1546     libSheepyProgPath += sizeof(sheepyBuild)-1;
   1547   }
   1548 
   1549   // set defaultProgName as basename progPath
   1550   // defaultProgName is the string after the last /
   1551   rangeDown(i, (ssize_t)strlen(libSheepyProgPath)) {
   1552     if (libSheepyProgPath[i] == '/') {
   1553       defaultProgName = libSheepyProgPath + i + 1;
   1554       break;
   1555     }
   1556   }
   1557   if (!defaultProgName) {
   1558     defaultProgName = libSheepyProgPath;
   1559   }
   1560 
   1561   // segfault signal
   1562   struct sigaction sa = init0Var;
   1563   sigemptyset(&sa.sa_mask);
   1564   sa.sa_sigaction = segfault_sigaction;;
   1565   sa.sa_flags   = SA_SIGINFO;;
   1566   sigaction(SIGSEGV, &sa, &default_sa);
   1567 
   1568   // fibers
   1569   staticArrayInit(fibers.L);
   1570   staticArrayInit(fibers.startL);
   1571 
   1572   // free internal buffers
   1573   atexit(finalizeLibsheepyCharAtExit);
   1574 
   1575 
   1576   // register %k %K type specifiers in printf for RGB colors
   1577   // not available in macos - register_printf_specifier('k', print_k, print_k_arginfo);
   1578   // not available in macos - register_printf_specifier('K', print_K, print_k_arginfo);
   1579   // register %b type specifiers in printf for bool as TRUE/FALSE
   1580   // not available in macos - register_printf_specifier('b', print_b, print_b_arginfo);
   1581 
   1582   if (initF) {
   1583     initF();
   1584 }
   1585   }
   1586 
   1587 #else // #if ((__APPLE__ || __FreeBSD__ || __TERMUX__ || __OpenBSD__ || __DragonFly__ || MUSL_LIBC || __sun__ || __HAIKU__))
   1588 void initLibsheepyF(const char *progPath, initLibsheepyObjectP initF) {
   1589 
   1590   // no buffering if output is sent to file, this makes everything
   1591   // a bit slower, but it is possible to see where the code fails
   1592   if (!isatty(STDOUT_FILENO)) {
   1593     setbuf(stdout, NULL);
   1594   }
   1595 
   1596   libSheepyArg0     = progPath;
   1597   libSheepyProgPath = findS(progPath, sheepyBuild);;
   1598   if (!libSheepyProgPath) {
   1599     libSheepyProgPath = progPath;
   1600   }
   1601   else {
   1602     // when progPath had sheepyBuild: progPath = /home/USER/.sheepy/build/home/USER/git/sw/PRG/PRG
   1603     // keep only the end of the path which is the source path
   1604     // libSheepyProgPath = /home/USER/git/sw/PRG/PRG
   1605     libSheepyProgPath += sizeof(sheepyBuild)-1;
   1606   }
   1607 
   1608   // set defaultProgName as basename progPath
   1609   // defaultProgName is the string after the last /
   1610   rangeDown(i, (ssize_t)strlen(libSheepyProgPath)) {
   1611     if (libSheepyProgPath[i] == '/') {
   1612       defaultProgName = (libSheepyProgPath + i + 1);
   1613       break;
   1614     }
   1615   }
   1616   if (!defaultProgName) {
   1617     defaultProgName = libSheepyProgPath;
   1618   }
   1619 
   1620   // segfault signal
   1621   struct sigaction sa = init0Var;
   1622   sigemptyset(&sa.sa_mask);
   1623   sa.sa_sigaction = segfault_sigaction;;
   1624   sa.sa_flags   = SA_SIGINFO;;
   1625   sigaction(SIGSEGV, &sa, &default_sa);
   1626 
   1627   // fibers
   1628   staticArrayInit(fibers.L);
   1629   staticArrayInit(fibers.startL);
   1630 
   1631   // free insternal buffers
   1632   atexit(finalizeLibsheepyCharAtExit);
   1633 
   1634 
   1635   // register %k %K type specifiers in printf for RGB colors
   1636   register_printf_specifier('k', print_k, print_k_arginfo); {
   1637   register_printf_specifier('K', print_K, print_k_arginfo); {
   1638   // register %b type specifiers in printf for bool as TRUE/FALSE
   1639   register_printf_specifier('b', print_b, print_b_arginfo); {
   1640 
   1641   if (initF) {
   1642     initF();
   1643 }
   1644   }
   1645   }
   1646   }
   1647   }
   1648 
   1649 #endif
   1650 // #if (__APPLE__ || __FreeBSD__ || __TERMUX__ || __OpenBSD__ || __DragonFly__ || MUSL_LIBC || __sun__ || __HAIKU__)
   1651 
   1652 /**
   1653  * finalize libsheepy char at exit
   1654  *
   1655  * free internal buffers in this file:
   1656  *
   1657  * realprogpath
   1658  * urandomFp software random file
   1659  *
   1660  */
   1661 void finalizeLibsheepyCharAtExit(void) {
   1662 
   1663   free(progName);
   1664   freeRealProgPath();
   1665   randomUrandomClose();
   1666 }
   1667 
   1668 /**
   1669  * get current stack limit
   1670  *
   1671  * \return
   1672  *   current stack limit
   1673  *   -1 unlimited
   1674  *   0 when error
   1675  */
   1676 int64_t getStackLimit(void) {
   1677   struct rlimit limit;
   1678 
   1679   if (getrlimit(RLIMIT_STACK, &limit) == -1) {
   1680     pFuncError
   1681     return(0);
   1682   }
   1683   return(limit.rlim_cur != RLIM_INFINITY ? (i64) limit.rlim_cur : -1);;
   1684 }
   1685 
   1686 /**
   1687  * set stack limit
   1688  *
   1689  * \param
   1690  *   stackSize stack size in bytes, set -1 for unlimited size
   1691  * \return
   1692  *   !0 when ok
   1693  *   0 when it failed
   1694  */
   1695 int setStackLimit(int64_t stackSize) {
   1696   struct rlimit limit;
   1697 
   1698   if (getrlimit(RLIMIT_STACK, &limit) == -1) {
   1699     pFuncError
   1700     return(0);
   1701   }
   1702 
   1703   if (stackSize == -1) {
   1704     limit.rlim_cur = RLIM_INFINITY;
   1705   }
   1706   else {
   1707     limit.rlim_cur = (u64)stackSize;
   1708   }
   1709 
   1710   if (setrlimit(RLIMIT_STACK, &limit) == -1) {
   1711     pFuncError
   1712     return(0);
   1713   }
   1714 
   1715   return(1);
   1716 }
   1717 
   1718 /**
   1719  * enable core dump
   1720  *
   1721  * change core dump size to infinity to enable core dump.
   1722  * After the program receives a signal generating core dump,
   1723  * a core file is written to disk and can be open with gdb
   1724  *
   1725  * \return
   1726  *   !0 when ok
   1727  *   0 when it failed
   1728  */
   1729 int enableCoreDump(void) {
   1730 
   1731   // enable core dump
   1732   struct rlimit limit;
   1733   if (getrlimit(RLIMIT_CORE, &limit) == -1) {
   1734     pFuncError
   1735     return(0);
   1736   }
   1737 
   1738   // dump the complete process memory
   1739   limit.rlim_cur = RLIM_INFINITY;
   1740   if (setrlimit(RLIMIT_CORE, &limit) == -1) {
   1741     pFuncError
   1742     return(0);
   1743   }
   1744 
   1745   return(1);
   1746 }
   1747 
   1748 
   1749 /**
   1750  * get program name
   1751  *
   1752  * this program name showing in the logs
   1753  */
   1754 const char *getProgName(void) {
   1755 
   1756   return(progName ? progName : defaultProgName);
   1757 }
   1758 
   1759 /**
   1760  * set program name
   1761  *
   1762  * this program name showing in the logs
   1763  */
   1764 bool setProgName(const char *name) {
   1765 
   1766   // sanity
   1767   if (!name) {
   1768     return(false);
   1769   }
   1770 
   1771   free(progName);
   1772   progName = strdup(name);
   1773 
   1774   return(true);
   1775 }
   1776 
   1777 /**
   1778  * set default program name
   1779  *
   1780  * this program name showing in the logs
   1781  */
   1782 void setDefaultProgName(void) {
   1783 
   1784   freen(progName);
   1785 }
   1786 
   1787 /**
   1788  * free ProgName
   1789  * if set with setProgName
   1790  */
   1791 void freeProgName(void) {
   1792 
   1793   freen(progName);
   1794 }
   1795 
   1796 /**
   1797  * get program path
   1798  * When initLibsheepy is called before this function, it returns the given program path.
   1799  * When initLibsheepy has not been called before this function, it returns the real program path.
   1800  *
   1801  * \return
   1802  *    program path or real program path (do not free this pointer)
   1803  */
   1804 const char *getProgPath(void) {
   1805 
   1806   if (libSheepyProgPath) {
   1807     return(libSheepyProgPath);
   1808   }
   1809   else {
   1810     return(getRealProgPath());
   1811 }
   1812   }
   1813 
   1814 /**
   1815  * get real program path
   1816  * The first call allocates libSheepyRealProgPath, it is freed with freeRealProgPath
   1817  *
   1818  * \return
   1819  *   real program path (do not free this pointer)
   1820  */
   1821 const char *getRealProgPath(void) {
   1822 
   1823   if (!libSheepyRealProgPath) {
   1824     char realProgPath[8192];
   1825     realpath("/proc/self/exe", realProgPath);
   1826     libSheepyRealProgPath = strdup(realProgPath);
   1827   }
   1828   return(libSheepyRealProgPath);
   1829 }
   1830 
   1831 /**
   1832  * free real program path
   1833  * finalizeLibsheepy calls this function
   1834  */
   1835 void freeRealProgPath(void) {
   1836 
   1837   free(libSheepyRealProgPath);
   1838   libSheepyRealProgPath = NULL;
   1839 }
   1840 
   1841 /**
   1842  * run system command and free command buffer
   1843  * a message is printed when an error occurs
   1844  *
   1845  * this function is called from the systemNFree macro
   1846  *
   1847  * \param
   1848  *   command command to run in the shell
   1849  * \return
   1850  *   0 success
   1851  *   command error code
   1852  */
   1853 int systemNFreeF(char *command, int line, const char *thisFunc, const char *thisFileName) {
   1854   int r;
   1855 
   1856   r = system(command);
   1857   if (r) {
   1858     logME(libsheepyErrorMask, "\nSystem Error at %d, %s, %s. The command was: \"%s\"\n", line, thisFunc, thisFileName, command);
   1859   }
   1860   free(command);
   1861   return(r);
   1862 }
   1863 
   1864 /**
   1865  * get modification time for path
   1866  *
   1867  * \param
   1868  *   path
   1869  * \return
   1870  *   modification time
   1871  *   0 when an error occured
   1872  */
   1873 time_t getModificationTime(const char *path) {
   1874 
   1875   if (!path) {
   1876     return(0);
   1877   }
   1878 
   1879   struct stat fst;
   1880   if (stat(path, &fst) == -1) {
   1881     pFuncError
   1882     shEPrintfS("The path was: \"%s\"\n", path);
   1883     return(0);
   1884   }
   1885   return(fst.st_mtime);
   1886 }
   1887 
   1888 /**
   1889  * set modification time for path
   1890  *
   1891  * \param
   1892  *   path
   1893  * \param
   1894  *   mtime (for example, from the getModificationTime function)
   1895  * \return
   1896  *   1 ok
   1897  *   0 when an error occured
   1898  */
   1899 int setModificationTime(const char *path, time_t mtime) {
   1900 
   1901   if (!path) {
   1902     return(0);
   1903   }
   1904 
   1905   struct timeval times[2];
   1906   times[0].tv_usec = 0;
   1907   times[0].tv_sec  = mtime;
   1908   times[1]         = times[0];
   1909   if (utimes(path, times) == -1) {
   1910     pFuncError
   1911     shEPrintfS("The path was: \"%s\"\n", path);
   1912     return(0);
   1913   }
   1914   return(1);
   1915 }
   1916 
   1917 /**
   1918  * is path readable
   1919  *
   1920  * \return
   1921  * true when path is readable
   1922  */
   1923 bool isReadable(const char *path) {
   1924 
   1925   if (!path) {
   1926     return(false);
   1927   }
   1928 
   1929   if (access(path, R_OK) == -1) {
   1930     return(false);
   1931   }
   1932 
   1933   return(true);
   1934 }
   1935 
   1936 
   1937 /**
   1938  * is path writable
   1939  *
   1940  * \return
   1941  * true when path is writable
   1942  */
   1943 bool isWritable(const char *path) {
   1944 
   1945   if (!path) {
   1946     return(false);
   1947   }
   1948 
   1949   if (access(path, W_OK) == -1) {
   1950     return(false);
   1951   }
   1952 
   1953   return(true);
   1954 }
   1955 
   1956 
   1957 /**
   1958  * is path executable
   1959  *
   1960  * \return
   1961  * true when path is executable
   1962  */
   1963 bool isExecutable(const char *path) {
   1964 
   1965   if (!path) {
   1966     return(false);
   1967   }
   1968 
   1969   if (access(path, X_OK) == -1) {
   1970     return(false);
   1971   }
   1972 
   1973   return(true);
   1974 }
   1975 
   1976 
   1977 /**
   1978  * compare modification times for path1 and path2
   1979  *
   1980  * \param
   1981  *   path1
   1982  * \param
   1983  *   path2
   1984  * \return
   1985  *   true when mtime is equal for path1 and path2
   1986  *   false when mtime is different for path1 and path2 or when there is an error
   1987  */
   1988 bool equalModificationTimes(const char *path1, const char *path2) {
   1989 
   1990   if (!path1 || !path2) {
   1991     return(false);
   1992   }
   1993 
   1994   time_t t1 = getModificationTime(path1); {
   1995   time_t t2 = getModificationTime(path2); {
   1996 
   1997   if (!t1 || !t2) {
   1998     return(false);
   1999   }
   2000   return(t1 == t2);;
   2001 }
   2002   }
   2003   }
   2004 
   2005 /**
   2006  * get current unix time in seconds
   2007  *
   2008  * time_t is either int32_t or int64_t
   2009  */
   2010 time_t getCurrentUnixTime(void) {
   2011 
   2012   return(time(NULL));
   2013 }
   2014 
   2015 /**
   2016  * convert date string to unix time
   2017  *
   2018  * \param
   2019  *   date string
   2020  * \param
   2021  *   format for strptime
   2022  * \return
   2023  *   time
   2024  *   -1 error
   2025  *
   2026  */
   2027 time_t strToUnixTime(const char *date, const char *format) {
   2028   struct tm tm = init0Var;;
   2029   time_t r;
   2030 
   2031   // sanity checks
   2032   if (!date || !format) {
   2033     return(-1);
   2034   }
   2035 
   2036   if ((strptime(date, format, &tm))) {
   2037     r = mktime(&tm);
   2038   }
   2039   else {
   2040     shPrintError;
   2041     shEPrintfS("strptime failed.\nThe date string is: \"%s\"\nThe format string is: \"%s\"\n", date, format);
   2042     return(-1);
   2043   }
   2044   return(r);
   2045 }
   2046 
   2047 /**
   2048  * time To String
   2049  * convert unix time to string
   2050  * (ctime is not used here because it adds \n at the end of the string)
   2051  *
   2052  * \param
   2053  *   unix time to convert
   2054  * \return
   2055  *   string representing the unix time in ctime format (Wed Dec 12 11:44:08 2018), you must free the pointer
   2056  */
   2057 char *timeToS(const time_t t) {
   2058   struct tm lt;
   2059   char timeBuf[80];
   2060 
   2061   localtime_r(&t, &lt);
   2062   strftime(timeBuf, sizeof(timeBuf), "%c", &lt);
   2063   return(strdup(timeBuf));
   2064 }
   2065 
   2066 char *bTimeToS(char *dst, const time_t t) {
   2067   struct tm lt;
   2068 
   2069   localtime_r(&t, &lt);
   2070   strftime(dst, 80, "%c", &lt);
   2071   return(dst);
   2072 }
   2073 
   2074 char *bLTimeToS(char *dst, size_t dstSize, const time_t t) {
   2075   struct tm lt;
   2076 
   2077   localtime_r(&t, &lt);
   2078   strftime(dst, dstSize, "%c", &lt);
   2079   return(dst);
   2080 }
   2081 
   2082 /**
   2083  * time To Year-Month-Day Hour:Minute:Second String
   2084  * convert unix time to string
   2085  *
   2086  * \param
   2087  *   unix time to convert
   2088  * \return
   2089  *   string representing the unix time, you must free the pointer
   2090  */
   2091 char *timeToYMDS(const time_t t) {
   2092   struct tm lt;
   2093   char timeBuf[80];
   2094 
   2095   localtime_r(&t, &lt);
   2096   strftime(timeBuf, sizeof(timeBuf), "%Y-%m-%d %H:%M:%S", &lt);
   2097   return(strdup(timeBuf));
   2098 }
   2099 
   2100 char *bTimeToYMDS(char *dst, const time_t t) {
   2101   struct tm lt;
   2102 
   2103   localtime_r(&t, &lt);
   2104   strftime(dst, 80, "%Y-%m-%d %H:%M:%S", &lt);
   2105   return(dst);
   2106 }
   2107 
   2108 char *bLTimeToYMDS(char *dst, size_t dstSize, const time_t t) {
   2109   struct tm lt;
   2110 
   2111   localtime_r(&t, &lt);
   2112   strftime(dst, dstSize, "%Y-%m-%d %H:%M:%S", &lt);
   2113   return(dst);
   2114 }
   2115 
   2116 /**
   2117  * get current date in ctime format (Wed Dec 12 11:44:08 2018)
   2118  *
   2119  * you must free the pointer
   2120  */
   2121 char *getCurrentDate(void) {
   2122   char clock[80];
   2123 
   2124   time_t _clk = time(NULL);;
   2125   struct tm *_pClk = localtime(&_clk);;
   2126   strftime(clock, sizeof clock, "%c", _pClk);
   2127   return(strdup(clock));
   2128 }
   2129 
   2130 char *bGetCurrentDate(char *dst) {
   2131 
   2132   if (!dst) {
   2133     return(NULL);
   2134   }
   2135   time_t _clk = time(NULL);;
   2136   struct tm *_pClk = localtime(&_clk);;
   2137   strftime(dst, 80, "%c", _pClk);
   2138   return(dst);
   2139 }
   2140 
   2141 char *bLGetCurrentDate(char *dst, size_t dstSize) {
   2142 
   2143   if (!dst) {
   2144     return(NULL);
   2145   }
   2146   time_t _clk = time(NULL);;
   2147   struct tm *_pClk = localtime(&_clk);;
   2148   strftime(dst, dstSize, "%c", _pClk);
   2149   return(dst);
   2150 }
   2151 
   2152 /**
   2153  * get current date in Y-m-d H:M:S format
   2154  *
   2155  * you must free the pointer
   2156  */
   2157 char *getCurrentDateYMD(void) {
   2158   char clock[80];
   2159 
   2160   time_t _clk = time(NULL);;
   2161   struct tm *_pClk = localtime(&_clk);;
   2162   strftime(clock, sizeof clock, "%Y-%m-%d %H:%M:%S", _pClk);
   2163   return(strdup(clock));
   2164 }
   2165 
   2166 char *bGetCurrentDateYMD(char *dst) {
   2167 
   2168   if (!dst) {
   2169     return(NULL);
   2170   }
   2171   time_t _clk = time(NULL);;
   2172   struct tm *_pClk = localtime(&_clk);;
   2173   strftime(dst, 80, "%Y-%m-%d %H:%M:%S", _pClk);
   2174   return(dst);
   2175 }
   2176 
   2177 char *bLGetCurrentDateYMD(char *dst, size_t dstSize) {
   2178 
   2179   if (!dst) {
   2180     return(NULL);
   2181   }
   2182   time_t _clk = time(NULL);;
   2183   struct tm *_pClk = localtime(&_clk);;
   2184   strftime(dst, dstSize, "%Y-%m-%d %H:%M:%S", _pClk);
   2185   return(dst);
   2186 }
   2187 
   2188 /**
   2189  * sheepy dirname
   2190  *
   2191  * the returned string has to be freed
   2192  *
   2193  * \param
   2194  *   path
   2195  * \return
   2196  *   path without basename (last item in the path, you must free the pointer)
   2197  *   "./" when path is blank or when there is only one item in the path
   2198  *   NULL when path is NULL
   2199  */
   2200 char *shDirname(const char *path) {
   2201   char *dir = NULL;
   2202 
   2203   if (!path) {
   2204     return(NULL);
   2205   }
   2206 
   2207   if (isBlankS(path)) {
   2208     return(strdup("./"));
   2209   }
   2210 
   2211   #if (__APPLE__ || __OpenBSD__ || __DragonFly__)
   2212   // pointer to internal buffer in dirname
   2213   char *tmp = dirname((char*)path);
   2214   dir       = strdup(tmp);
   2215   #elif (__TERMUX__)
   2216   // dirname is not implemented
   2217   dir        = strdup(path);
   2218   size_t len = strlen(path);
   2219   rangeDown(i, len) {
   2220     if (dir[i] == '/') {
   2221       dir[i] = 0;
   2222       break;
   2223     }
   2224   }
   2225   #else
   2226   dir = strdup(path);
   2227   dirname(dir);
   2228   #endif
   2229 
   2230   if (!dir) {
   2231     return(NULL);
   2232   }
   2233 
   2234   // is dirname empty?
   2235   #if (__OpenBSD__)
   2236   if ((dir[0]) and (dir[0] == '.' and dir[1] == 0)) {
   2237     iAppendS(&dir, "/");
   2238   }
   2239   #else
   2240   if (strEq(dir, path)) {
   2241     // set dir to pwd when dirname is empty
   2242     free(dir);
   2243     dir = strdup("./");
   2244   }
   2245   #endif
   2246   return(dir);
   2247 }
   2248 
   2249 /**
   2250  * buffer dirname
   2251  *
   2252  * the buffer size (path) must be at least 3 chars
   2253  *
   2254  * \param
   2255  *   path
   2256  * \return
   2257  *   path without basename (last item in the path)
   2258  *   "./" when path is blank or when there is only one item in the path
   2259  *   NULL when path is NULL
   2260  */
   2261 char *bDirname(char *path) {
   2262 
   2263   if (!path) {
   2264     return(NULL);
   2265   }
   2266 
   2267   if (isBlankS(path) || !strchr(path, '/')) {
   2268     // the path is blank or a filename
   2269     // set dir to pwd when dirname is empty
   2270     strcpy(path, "./");
   2271     return(path);
   2272   }
   2273 
   2274   #if (__OpenBSD__)
   2275   // when there is a trailing / return path unchanged
   2276   if (path[strlen(path)-1] == '/') {
   2277     return(path);
   2278   }
   2279   // pointer to internal buffer in dirname
   2280   char *tmp         = dirname((char*)path);
   2281   path[strlen(tmp)] = 0;
   2282   #elif (__APPLE__ || __FreeBSD__ || __DragonFly__)
   2283   // pointer to internal buffer in dirname
   2284   char *tmp         = dirname((char*)path);
   2285   path[strlen(tmp)] = 0;
   2286   #elif (__TERMUX__)
   2287   // dirname is not implemented
   2288   size_t len = strlen(path);
   2289   rangeDown(i, len) {
   2290     if (path[i] == '/') {
   2291       path[i] = 0;
   2292       break;
   2293     }
   2294   }
   2295   #else
   2296   dirname(path);
   2297   #endif
   2298   return(path);
   2299 }
   2300 
   2301 /**
   2302  * buffer size dirname
   2303  *
   2304  * the buffer size (path) must be at least 3 chars
   2305  *
   2306  * \param
   2307  *   path
   2308  * \param
   2309  *   pathSize path buffer size, the path strlen will be at most pathSize-1
   2310  * \return
   2311  *   path without basename (last item in the path)
   2312  *   "./" when path is blank or when there is only one item in the path
   2313  *   NULL when path is NULL
   2314  */
   2315 char *bLDirname(char *path, size_t pathSize) {
   2316 
   2317   if (!path || !pathSize) {
   2318     return(NULL);
   2319   }
   2320 
   2321   path[pathSize-1] = 0;
   2322   return(bDirname(path));
   2323 }
   2324 
   2325 #if (__OpenBSD__ || __HAIKU__)
   2326 /**
   2327  * expands ~/ ($HOME) or ~USER\n
   2328  * duplicate and expand path. The original remains unchanged.
   2329  *
   2330  * \param
   2331  *   path string
   2332  * \return
   2333  *   new string path or NULL (you must free the pointer)
   2334  */
   2335 char *expandHome(const char* path) {
   2336 
   2337   // sanity checks
   2338   if (!path) {
   2339     return(NULL);
   2340   }
   2341 
   2342   if (path[0] == 0) {
   2343     // path is empty
   2344     return(strdup(path));
   2345   }
   2346 
   2347   // steps
   2348   // determine path format
   2349   // set user name, either current user or user name in path
   2350   // add : at the end of username to match line in the /etc/passwd file
   2351   // find home path in the passwd file
   2352 
   2353   enum {noExpand, currentUser, otherUser};
   2354 
   2355   // determine path format
   2356   int status = noExpand;
   2357   if (path[0] == '~' and (path[1] == '/' or path[1] == 0)) {
   2358     // path="~/..."
   2359     status = currentUser;
   2360   }
   2361   elif (path[0] == '~' and path[1] != '/') {
   2362     // path="~USER..."
   2363     status = otherUser;
   2364   }
   2365 
   2366   // there is no tilde to expand, return path unchanged
   2367   if (status == noExpand) {
   2368     return(strdup(path));
   2369   }
   2370 
   2371   // set user name, either current user or user name in path
   2372   char   user[33]  = {0};
   2373   size_t pathStart = 0;
   2374 
   2375   if (status == currentUser) {
   2376     // use getlogin to find current username
   2377     // sizeof(user)-1 to keep a char tp append final ':'
   2378     if (getlogin_r(user, sizeof(user)-1)) {
   2379       // error
   2380       logME(libsheepyErrorMask, "getlogin for current user");
   2381     } {
   2382     pathStart = 1;
   2383   }
   2384       }
   2385   else {
   2386     // username is in path
   2387     // from index 1 (skip ~) to the first /
   2388     char *slash = findS(path, "/");
   2389     if (!slash) {
   2390       // no slash found, path is in the form: ~USER
   2391       // copy string after ~ to the end of the string
   2392       pErrorNULL(strLCpy(user,  sizeof(user)-1, path+1));
   2393       pathStart = strlen(path);
   2394     }
   2395     else {
   2396       // copy string after ~ to first slash
   2397       pathStart = slash - path;
   2398       pErrorNULL(strLNCat(user,  sizeof(user)-1, path+1, pathStart-1));
   2399   }
   2400     }
   2401 
   2402   // add : at the end of username to match line in passwd
   2403   size_t len  = strlen(user);
   2404   user[len]   = ':';
   2405   user[len+1] = 0;
   2406 
   2407 
   2408   // find home path in the passwd file
   2409   char **pwd = readText("/etc/passwd");
   2410 
   2411   if (!pwd) {
   2412     return(NULL);
   2413   }
   2414 
   2415   // result
   2416   char *r = NULL;
   2417 
   2418   forEachS(pwd, l) {
   2419     if (startsWithS(l, user)) {
   2420       // found the user
   2421       char **l_l = split(l, ":");
   2422       // copy home path to result
   2423       r = strdup(l_l[5]);
   2424       listFreeS(l_l);
   2425       break;
   2426   }
   2427     }
   2428 
   2429   listFreeS(pwd);
   2430 
   2431   if (!r) {
   2432     // user not found in this system
   2433     return(NULL);
   2434   }
   2435 
   2436   // append rest of the path to the result
   2437   iAppendS(&r, path + pathStart);
   2438 
   2439   return(r);
   2440 }
   2441 
   2442 #else
   2443 /**
   2444  * expands ~/ ($HOME) or ~USER\n
   2445  * duplicate and expand path. The original remains unchanged.
   2446  *
   2447  * \param
   2448  *   path string
   2449  * \return
   2450  *   new string path or NULL (you must free the pointer)
   2451  */
   2452 char *expandHome(const char* path) {
   2453   wordexp_t exp_result;
   2454   char *p = NULL;
   2455   char *r = NULL;
   2456 
   2457   // sanity checks
   2458   // duplicate path to be able to realloc (impossible when path is static)
   2459   // expand ~/ or ~USER
   2460 
   2461   // sanity checks
   2462   if (!path) {
   2463     return(NULL);
   2464   }
   2465   // duplicate path to be able to realloc (impossible when path is static)
   2466   p = strdup(path);
   2467 
   2468   if (path[0] == 0) {
   2469     // path is empty
   2470     // when path is empty, exp_result.we_wordv[0] is null and strlen segfaults
   2471     return(p);
   2472   }
   2473 
   2474   #if (!__TERMUX__)
   2475   // expand ~/
   2476   int status = wordexp(p, &exp_result, 0);;
   2477   switch (status) {
   2478     case WRDE_BADCHAR:
   2479       free(p);
   2480       shEPrintfS("expandHome error: unquoted invalid character\n");
   2481       shEPrintfS("The path was: \"%s\"\n", path);
   2482       return(NULL);
   2483     case WRDE_BADVAL:
   2484       free(p);
   2485       shEPrintfS("expandHome error: undefined shell variable\n");
   2486       shEPrintfS("The path was: \"%s\"\n", path);
   2487       return(NULL);
   2488     case WRDE_NOSPACE:
   2489       free(p);
   2490       shEPrintfS("expandHome error: out of memory\n");
   2491       shEPrintfS("The path was: \"%s\"\n", path);
   2492       return(NULL);
   2493     case WRDE_SYNTAX:
   2494       free(p);
   2495       shEPrintfS("expandHome error: syntax error\n");
   2496       shEPrintfS("The path was: \"%s\"\n", path);
   2497       return(NULL);
   2498     default:
   2499       break;
   2500   }
   2501   r = REALLOC(p, strlen(exp_result.we_wordv[0])+1);
   2502   if (!r) {
   2503     // free p when realloc fails
   2504     free(p);
   2505     return(NULL);
   2506   }
   2507   strcpy(r, exp_result.we_wordv[0]);
   2508   wordfree(&exp_result);
   2509   #else
   2510   iReplaceS(&p, "~", "/data/data/com.termux/files/home", 1);
   2511   r = p;
   2512   #endif
   2513   return(r);
   2514 }
   2515 
   2516 #endif
   2517 
   2518 #if (__OpenBSD__ || __HAIKU__)
   2519 /**
   2520  * expands ~/ ($HOME) or ~USER\n
   2521  *
   2522  * expand path.
   2523  *
   2524  * \param
   2525  *   path: string (this parameter is reallocated)
   2526  * \return
   2527  *   path modified path\n
   2528  *   NULL error
   2529  */
   2530 char *iExpandHome(char **path) {
   2531 
   2532   // sanity checks
   2533   if (!path || !*path) {
   2534     return(NULL);
   2535   }
   2536 
   2537 
   2538   if ((*path)[0] == 0) {
   2539     // path is empty
   2540     return(*path);
   2541   }
   2542 
   2543   // steps
   2544   // determine path format
   2545   // set user name, either current user or user name in path
   2546   // add : at the end of username to match line in the /etc/passwd file
   2547   // find home path in the passwd file
   2548 
   2549   enum {noExpand, currentUser, otherUser};
   2550 
   2551   // determine path format
   2552   int status = noExpand;
   2553   if ((*path)[0] == '~' and ((*path)[1] == '/' or (*path)[1] == 0)) {
   2554     // path="~/..."
   2555     status = currentUser;
   2556   }
   2557   elif ((*path)[0] == '~' and (*path)[1] != '/') {
   2558     // path="~USER..."
   2559     status = otherUser;
   2560   }
   2561 
   2562   // there is no tilde to expand, return path unchanged
   2563   if (status == noExpand) {
   2564     return(*path);
   2565   }
   2566 
   2567   // set user name, either current user or user name in path
   2568   char   user[33]  = {0};
   2569   size_t pathStart = 0;
   2570 
   2571   if (status == currentUser) {
   2572     // use getlogin to find current username
   2573     // sizeof(user)-1 to keep a char tp append final ':'
   2574     if (getlogin_r(user, sizeof(user)-1)) {
   2575       // error
   2576       logME(libsheepyErrorMask, "getlogin for current user");
   2577     } {
   2578     pathStart = 1;
   2579   }
   2580       }
   2581   else {
   2582     // username is in path
   2583     // from index 1 (skip ~) to the first /
   2584     char *slash = findS((*path), "/");
   2585     if (!slash) {
   2586       // no slash found, path is in the form: ~USER
   2587       // copy string after ~ to the end of the string
   2588       pErrorNULL(strLCpy(user,  sizeof(user)-1, (*path)+1));
   2589       pathStart = strlen(*path);
   2590     }
   2591     else {
   2592       // copy string after ~ to first slash
   2593       pathStart = slash - (*path);
   2594       pErrorNULL(strLNCat(user,  sizeof(user)-1, (*path)+1, pathStart-1));
   2595   }
   2596     }
   2597 
   2598   // add : at the end of username to match line in passwd
   2599   size_t len  = strlen(user);
   2600   user[len]   = ':';
   2601   user[len+1] = 0;
   2602 
   2603 
   2604   // find home path in the passwd file
   2605   char **pwd = readText("/etc/passwd");
   2606 
   2607   if (!pwd) {
   2608     return(NULL);
   2609   }
   2610 
   2611   // result
   2612   char *r = NULL;
   2613 
   2614   forEachS(pwd, l) {
   2615     if (startsWithS(l, user)) {
   2616       // found the user
   2617       char **l_l = split(l, ":");
   2618       // copy home path to result
   2619       r = strdup(l_l[5]);
   2620       listFreeS(l_l);
   2621       break;
   2622   }
   2623     }
   2624 
   2625   listFreeS(pwd);
   2626 
   2627   if (!r) {
   2628     // user not found in this system
   2629     return(NULL);
   2630   }
   2631 
   2632   // append rest of the path to the result
   2633   iAppendS(&r, (*path) + pathStart);
   2634 
   2635   free(*path);
   2636   *path = r;
   2637 
   2638   return(r);
   2639 }
   2640 
   2641 #else
   2642 /**
   2643  * expands ~/ ($HOME) or ~USER\n
   2644  *
   2645  * duplicate and expand path.
   2646  *
   2647  * \param
   2648  *   path: string (this parameter is reallocated)
   2649  * \return
   2650  *   path modified path\n
   2651  *   NULL error
   2652  */
   2653 char *iExpandHome(char **path) {
   2654   wordexp_t exp_result;
   2655 
   2656   // sanity checks
   2657   // duplicate path to be able to realloc (impossible when path is static)
   2658   // expand ~/ or ~USER
   2659 
   2660   // sanity checks
   2661   if (!path || !*path) {
   2662     return(NULL);
   2663   }
   2664 
   2665   if ((*path)[0] == 0) {
   2666     // path is empty
   2667     // when path is empty, exp_result.we_wordv[0] is null and strlen segfaults
   2668     return(*path);
   2669   }
   2670 
   2671   #if (!__TERMUX__)
   2672   // expand ~/
   2673   int status = wordexp(*path, &exp_result, 0);;
   2674   switch (status) {
   2675     case WRDE_BADCHAR:
   2676       shEPrintfS("iExpandHome error: unquoted invalid character\n");
   2677       shEPrintfS("The path was: \"%s\"\n", *path);
   2678       return(NULL);
   2679     case WRDE_BADVAL:
   2680       shEPrintfS("iExpandHome error: undefined shell variable\n");
   2681       shEPrintfS("The path was: \"%s\"\n", *path);
   2682       return(NULL);
   2683     case WRDE_NOSPACE:
   2684       shEPrintfS("iExpandHome error: out of memory\n");
   2685       shEPrintfS("The path was: \"%s\"\n", *path);
   2686       return(NULL);
   2687     case WRDE_SYNTAX:
   2688       shEPrintfS("iExpandHome error: syntax error\n");
   2689       shEPrintfS("The path was: \"%s\"\n", *path);
   2690       return(NULL);
   2691     default:
   2692       break;
   2693   }
   2694   char *tmp = REALLOC(*path, strlen(exp_result.we_wordv[0])+1);
   2695   if (!tmp) {
   2696     // realloc failed
   2697     return(NULL);
   2698   }
   2699   *path = tmp;
   2700   strcpy(*path, exp_result.we_wordv[0]);
   2701   wordfree(&exp_result);
   2702   #else
   2703   iReplaceS(path, "~", "/data/data/com.termux/files/home", 1);
   2704   #endif
   2705   return(*path);
   2706 }
   2707 #endif
   2708 
   2709 #if (__OpenBSD__ || __HAIKU__)
   2710 /**
   2711  * buffer expands ~/ ($HOME) or ~USER\n
   2712  *
   2713  * expand path
   2714  *
   2715  * \param
   2716  *   path: string
   2717  * \return
   2718  *   path modified path\n
   2719  *   NULL error
   2720  */
   2721 char *bExpandHome(char *path) {
   2722 
   2723   // sanity checks
   2724   if (!path) {
   2725     return(NULL);
   2726   }
   2727 
   2728   if (path[0] == 0) {
   2729     // path is empty
   2730     return(path);
   2731   }
   2732 
   2733   // steps
   2734   // determine path format
   2735   // set user name, either current user or user name in path
   2736   // add : at the end of username to match line in the /etc/passwd file
   2737   // find home path in the passwd file
   2738 
   2739   enum {noExpand, currentUser, otherUser};
   2740 
   2741   // determine path format
   2742   int status = noExpand;
   2743   if (path[0] == '~' and (path[1] == '/' or path[1] == 0)) {
   2744     // path="~/..."
   2745     status = currentUser;
   2746   }
   2747   elif (path[0] == '~' and path[1] != '/') {
   2748     // path="~USER..."
   2749     status = otherUser;
   2750   }
   2751 
   2752   // there is no tilde to expand, return path unchanged
   2753   if (status == noExpand) {
   2754     return(path);
   2755   }
   2756 
   2757   // set user name, either current user or user name in path
   2758   char   user[33]  = {0};
   2759   size_t pathStart = 0;
   2760 
   2761   if (status == currentUser) {
   2762     // use getlogin to find current username
   2763     // sizeof(user)-1 to keep a char tp append final ':'
   2764     if (getlogin_r(user, sizeof(user)-1)) {
   2765       // error
   2766       logME(libsheepyErrorMask, "getlogin for current user");
   2767     } {
   2768     pathStart = 1;
   2769   }
   2770       }
   2771   else {
   2772     // username is in path
   2773     // from index 1 (skip ~) to the first /
   2774     char *slash = findS(path, "/");
   2775     if (!slash) {
   2776       // no slash found, path is in the form: ~USER
   2777       // copy string after ~ to the end of the string
   2778       pErrorNULL(strLCpy(user,  sizeof(user)-1, path+1));
   2779       pathStart = strlen(path);
   2780     }
   2781     else {
   2782       // copy string after ~ to first slash
   2783       pathStart = slash - path;
   2784       pErrorNULL(strLNCat(user,  sizeof(user)-1, path+1, pathStart-1));
   2785   }
   2786     }
   2787 
   2788   // add : at the end of username to match line in passwd
   2789   size_t len  = strlen(user);
   2790   user[len]   = ':';
   2791   user[len+1] = 0;
   2792 
   2793 
   2794   // find home path in the passwd file
   2795   char **pwd = readText("/etc/passwd");
   2796 
   2797   if (!pwd) {
   2798     return(NULL);
   2799   }
   2800 
   2801   // result
   2802   char *r = NULL;
   2803 
   2804   forEachS(pwd, l) {
   2805     if (startsWithS(l, user)) {
   2806       // found the user
   2807       char **l_l = split(l, ":");
   2808       // copy home path to result
   2809       r = strdup(l_l[5]);
   2810       listFreeS(l_l);
   2811       break;
   2812   }
   2813     }
   2814 
   2815   listFreeS(pwd);
   2816 
   2817   if (!r) {
   2818     // user not found in this system
   2819     return(NULL);
   2820   }
   2821 
   2822   // append rest of the path to the result
   2823   iAppendS(&r, path + pathStart);
   2824 
   2825   strcpy(path, r);
   2826   free(r);
   2827   return(path);
   2828 }
   2829 
   2830 #else
   2831 /**
   2832  * buffer expands ~/ ($HOME) or ~USER\n
   2833  *
   2834  * expand path
   2835  *
   2836  * \param
   2837  *   path: string
   2838  * \return
   2839  *   path modified path\n
   2840  *   NULL error
   2841  */
   2842 char *bExpandHome(char *path) {
   2843   wordexp_t exp_result;
   2844 
   2845   // sanity checks
   2846   if (!path) {
   2847     return(NULL);
   2848   }
   2849 
   2850   if (path[0] == 0) {
   2851     // path is empty
   2852     // when path is empty, exp_result.we_wordv[0] is null and strlen segfaults
   2853     return(path);
   2854   }
   2855 
   2856   #if (!__TERMUX__)
   2857   // expand ~/
   2858   int status = wordexp(path, &exp_result, 0);;
   2859   switch (status) {
   2860     case WRDE_BADCHAR:
   2861       shEPrintfS("bExpandHome error: unquoted invalid character\n");
   2862       shEPrintfS("The path was: \"%s\"\n", path);
   2863       return(NULL);
   2864     case WRDE_BADVAL:
   2865       shEPrintfS("bExpandHome error: undefined shell variable\n");
   2866       shEPrintfS("The path was: \"%s\"\n", path);
   2867       return(NULL);
   2868     case WRDE_NOSPACE:
   2869       shEPrintfS("bExpandHome error: out of memory\n");
   2870       shEPrintfS("The path was: \"%s\"\n", path);
   2871       return(NULL);
   2872     case WRDE_SYNTAX:
   2873       shEPrintfS("bExpandHome error: syntax error\n");
   2874       shEPrintfS("The path was: \"%s\"\n", path);
   2875       return(NULL);
   2876     default:
   2877       break;
   2878   }
   2879   strcpy(path, exp_result.we_wordv[0]);
   2880   wordfree(&exp_result);
   2881   #else
   2882   bReplaceS(path, "~", "/data/data/com.termux/files/home", 1);
   2883   #endif
   2884   return(path);
   2885 }
   2886 #endif
   2887 
   2888 #if (__OpenBSD__ || __HAIKU__)
   2889 /**
   2890  * buffer size expands ~/ ($HOME) or ~USER\n
   2891  *
   2892  * expand path
   2893  *
   2894  * \param
   2895  *   path: string
   2896  * \param
   2897  *   pathSize path buffer size, the path strlen will be at most pathSize-1
   2898  * \return
   2899  *   path modified path\n
   2900  *   NULL error
   2901  */
   2902 char *bLExpandHome(char *path, size_t pathSize) {
   2903 
   2904   // sanity checks
   2905   if (!path) {
   2906     return(NULL);
   2907   }
   2908 
   2909   if (path[0] == 0) {
   2910     // path is empty
   2911     return(path);
   2912   }
   2913 
   2914   // steps
   2915   // determine path format
   2916   // set user name, either current user or user name in path
   2917   // add : at the end of username to match line in the /etc/passwd file
   2918   // find home path in the passwd file
   2919 
   2920   enum {noExpand, currentUser, otherUser};
   2921 
   2922   // determine path format
   2923   int status = noExpand;
   2924   if (path[0] == '~' and (path[1] == '/' or path[1] == 0)) {
   2925     // path="~/..."
   2926     status = currentUser;
   2927   }
   2928   elif (path[0] == '~' and path[1] != '/') {
   2929     // path="~USER..."
   2930     status = otherUser;
   2931   }
   2932 
   2933   // there is no tilde to expand, return path unchanged
   2934   if (status == noExpand) {
   2935     // make sure path is no longer than pathSize
   2936     path[pathSize-1] = 0;
   2937     return(path);
   2938   }
   2939 
   2940   // set user name, either current user or user name in path
   2941   char   user[33]  = {0};
   2942   size_t pathStart = 0;
   2943 
   2944   if (status == currentUser) {
   2945     // use getlogin to find current username
   2946     // sizeof(user)-1 to keep a char tp append final ':'
   2947     if (getlogin_r(user, sizeof(user)-1)) {
   2948       // error
   2949       logME(libsheepyErrorMask, "getlogin for current user");
   2950     } {
   2951     pathStart = 1;
   2952   }
   2953       }
   2954   else {
   2955     // username is in path
   2956     // from index 1 (skip ~) to the first /
   2957     char *slash = findS(path, "/");
   2958     if (!slash) {
   2959       // no slash found, path is in the form: ~USER
   2960       // copy string after ~ to the end of the string
   2961       pErrorNULL(strLCpy(user,  sizeof(user)-1, path+1));
   2962       pathStart = strlen(path);
   2963     }
   2964     else {
   2965       // copy string after ~ to first slash
   2966       pathStart = slash - path;
   2967       strLNCat(user,  sizeof(user)-1, path+1, pathStart-1);
   2968   }
   2969     }
   2970 
   2971   // add : at the end of username to match line in passwd
   2972   size_t len  = strlen(user);
   2973   user[len]   = ':';
   2974   user[len+1] = 0;
   2975 
   2976 
   2977   // find home path in the passwd file
   2978   char **pwd = readText("/etc/passwd");
   2979 
   2980   if (!pwd) {
   2981     return(NULL);
   2982   }
   2983 
   2984   // result
   2985   char *r = NULL;
   2986 
   2987   forEachS(pwd, l) {
   2988     if (startsWithS(l, user)) {
   2989       // found the user
   2990       char **l_l = split(l, ":");
   2991       // copy home path to result
   2992       r = strdup(l_l[5]);
   2993       listFreeS(l_l);
   2994       break;
   2995   }
   2996     }
   2997 
   2998   listFreeS(pwd);
   2999 
   3000   if (!r) {
   3001     // user not found in this system
   3002     return(NULL);
   3003   }
   3004 
   3005   // append rest of the path to the result
   3006   iAppendS(&r, path + pathStart);
   3007 
   3008   pErrorNULL(strLCpy(path, pathSize, r));
   3009   free(r);
   3010   return(path);
   3011 }
   3012 
   3013 #else
   3014 
   3015 /**
   3016  * buffer size expands ~/ ($HOME) or ~USER\n
   3017  *
   3018  * expand path
   3019  *
   3020  * \param
   3021  *   path: string
   3022  * \param
   3023  *   pathSize path buffer size, the path strlen will be at most pathSize-1
   3024  * \return
   3025  *   path modified path\n
   3026  *   NULL error
   3027  */
   3028 char *bLExpandHome(char *path, size_t pathSize) {
   3029   wordexp_t exp_result;
   3030 
   3031   // sanity checks
   3032   if (!path) {
   3033     return(NULL);
   3034   }
   3035 
   3036   if (path[0] == 0) {
   3037     // path is empty
   3038     // when path is empty, exp_result.we_wordv[0] is null and strlen segfaults
   3039     return(path);
   3040   }
   3041 
   3042   #if (!__TERMUX__)
   3043   // expand ~/
   3044   int status = wordexp(path, &exp_result, 0);;
   3045   switch (status) {
   3046     case WRDE_BADCHAR:
   3047       shEPrintfS("bExpandHome error: unquoted invalid character\n");
   3048       shEPrintfS("The path was: \"%s\"\n", path);
   3049       return(NULL);
   3050     case WRDE_BADVAL:
   3051       shEPrintfS("bExpandHome error: undefined shell variable\n");
   3052       shEPrintfS("The path was: \"%s\"\n", path);
   3053       return(NULL);
   3054     case WRDE_NOSPACE:
   3055       shEPrintfS("bExpandHome error: out of memory\n");
   3056       shEPrintfS("The path was: \"%s\"\n", path);
   3057       return(NULL);
   3058     case WRDE_SYNTAX:
   3059       shEPrintfS("bExpandHome error: syntax error\n");
   3060       shEPrintfS("The path was: \"%s\"\n", path);
   3061       return(NULL);
   3062     default:
   3063       break;
   3064   }
   3065   pErrorNULL(strLCpy(path, pathSize, exp_result.we_wordv[0]));
   3066   wordfree(&exp_result);
   3067   #else
   3068   bLReplaceS(path, pathSize, "~", "/data/data/com.termux/files/home", 1);
   3069   #endif
   3070   return(path);
   3071 }
   3072 #endif
   3073 
   3074 /**
   3075  * normalize path
   3076  *
   3077  * remove unecessary /, .. and .
   3078  * leading / is kept
   3079  * leading .. is kept
   3080  * leading . is removed
   3081  *
   3082  * '/../' becomes '/'
   3083  *
   3084  * \param
   3085  *   path
   3086  * \return
   3087  *   new normalized path (you must free the pointer)
   3088  *   NULL when path is NULL
   3089  */
   3090 char *normalizePath(const char *path) {
   3091 
   3092   // sanity checks
   3093   if (!path) {
   3094     return(NULL);
   3095   }
   3096 
   3097   if (isEmptyS(path)) {
   3098     return(strdup(""));
   3099   }
   3100 
   3101   // list path elements
   3102   char **pathL = split(path, "/");
   3103 
   3104   // remove empty elements
   3105   pErrorNULL(iListCompactS(&pathL));
   3106 
   3107   if (listIsEmptyS(pathL)) {
   3108     listFreeS(pathL);
   3109     // keep leading /
   3110     return(strdup("/"));
   3111   }
   3112 
   3113   // new path elements
   3114   char **list = NULL;
   3115 
   3116   // detect leading double dots
   3117   bool onlyLeadingDoubleDots = true;
   3118 
   3119   // add elements to list
   3120   forEachCharP(pathL, level) {
   3121     if (strEq(*level, "..")) {
   3122       if (onlyLeadingDoubleDots) {
   3123         // keep leading ..
   3124         pErrorNULL(listPushS(&list, ".."));
   3125       }
   3126       else {
   3127         // remove .. in path
   3128         char *s = listPopS(&list);
   3129         free(s);
   3130     }
   3131       }
   3132     else if (!strEq(*level, ".")) {
   3133       // remove . and add elements
   3134       pErrorNULL(listPushS(&list, *level));
   3135       // an element is pushed, so this is the end of leading double dots
   3136       onlyLeadingDoubleDots = false;
   3137   }
   3138     }
   3139 
   3140   if (listLengthS(list) == 1 && strEq(list[0], "..") && getS(path, 0) == '/') {
   3141     // handle ../ .. /.. /../
   3142     list[0][0] = 0;
   3143   }
   3144 
   3145   // handle /.: add empty string
   3146   if (strEq(path, "/.")) {
   3147     pErrorNULL(listPushS(&list, ""));
   3148   }
   3149 
   3150   // keep leading /
   3151   if (getS(path, 0) == '/') {
   3152     if (listIsEmptyS(list)) {
   3153       // .. cancelled path: /a/b/../..
   3154       listFreeManyS(pathL, list);
   3155       return(strdup("/"));
   3156     }
   3157     pErrorNULL(listPrependS(&list, ""));
   3158   }
   3159 
   3160   // create new path
   3161   char *r = join(list, "/");;
   3162   // keep order pathL, list because list can be NULL
   3163   // if it is first listFreeManyS stops early
   3164   listFreeManyS(pathL, list);
   3165   if (!r) {
   3166     return(strdup(""));
   3167   }
   3168   return(r);
   3169 }
   3170 
   3171 
   3172 /**
   3173  * normalize path
   3174  *
   3175  * remove unecessary /, .. and .
   3176  * leading / is kept
   3177  * leading .. is kept
   3178  * leading . is removed
   3179  *
   3180  * '/../' becomes '/'
   3181  *
   3182  * \param
   3183  *   path (this parameter is reallocated)
   3184  * \return
   3185  *   path modified path
   3186  *   NULL when path is NULL
   3187  */
   3188 char *iNormalizePath(char **path) {
   3189 
   3190   // sanity checks
   3191   if (!path || !*path) {
   3192     return(NULL);
   3193   }
   3194 
   3195   if (isEmptyS(*path)) {
   3196     pErrorNULL(iEmptySF(path));
   3197     return(*path);
   3198   }
   3199 
   3200   // list path elements
   3201   char **pathL = split(*path, "/");
   3202 
   3203   // remove empty elements
   3204   pErrorNULL(iListCompactS(&pathL));
   3205 
   3206   if (listIsEmptyS(pathL)) {
   3207     listFreeS(pathL);
   3208     // keep leading /
   3209     free(*path);
   3210     *path = strdup("/");
   3211     return(*path);
   3212   }
   3213 
   3214   // new path elements
   3215   char **list = NULL;
   3216 
   3217   // detect leading double dots
   3218   bool onlyLeadingDoubleDots = true;
   3219 
   3220   // add elements to list
   3221   forEachCharP(pathL, level) {
   3222     if (strEq(*level, "..")) {
   3223       if (onlyLeadingDoubleDots) {
   3224         // keep leading ..
   3225         pErrorNULL(listPushS(&list, ".."));
   3226       }
   3227       else {
   3228         // remove .. in path
   3229         char *s = listPopS(&list);
   3230         free(s);
   3231     }
   3232       }
   3233     else if (!strEq(*level, ".")) {
   3234       // remove . and add elements
   3235       pErrorNULL(listPushS(&list, *level));
   3236       // an element is pushed, so this is the end of leading double dots
   3237       onlyLeadingDoubleDots = false;
   3238   }
   3239     }
   3240 
   3241   if (listLengthS(list) == 1 && strEq(list[0], "..") && getS(*path, 0) == '/') {
   3242     // handle ../ .. /.. /../
   3243     list[0][0] = 0;
   3244   }
   3245 
   3246   // handle /.: add empty string
   3247   if (strEq(*path, "/.")) {
   3248     pErrorNULL(listPushS(&list, ""));
   3249   }
   3250 
   3251   // keep leading /
   3252   if (getS(*path, 0) == '/') {
   3253     if (listIsEmptyS(list)) {
   3254       // .. cancelled path: /a/b/../..
   3255       listFreeManyS(pathL, list);
   3256       free(*path);
   3257       *path = strdup("/");
   3258       return(*path);
   3259     }
   3260     pErrorNULL(listPrependS(&list, ""));
   3261   }
   3262 
   3263   // create new path
   3264   char *r = join(list, "/");;
   3265   // keep order pathL, list because list can be NULL
   3266   // if it is first listFreeManyS stops early
   3267   listFreeManyS(pathL, list);
   3268   free(*path);
   3269   if (!r) {
   3270     *path = strdup("");
   3271     return(*path);
   3272   }
   3273   *path = r;
   3274   return(*path);
   3275 }
   3276 
   3277 /**
   3278  * buffer normalize path
   3279  *
   3280  * remove unecessary /, .. and .
   3281  * leading / is kept
   3282  * leading .. is kept
   3283  * leading . is removed
   3284  *
   3285  * '/../' becomes '/'
   3286  *
   3287  * \param
   3288  *   path
   3289  * \return
   3290  *   path modified path
   3291  *   NULL when path is NULL
   3292  */
   3293 char *bNormalizePath(char *path) {
   3294 
   3295   // sanity checks
   3296   if (!path) {
   3297     return(NULL);
   3298   }
   3299 
   3300   if (isEmptyS(path)) {
   3301     bEmptyS(path);
   3302     return(path);
   3303   }
   3304 
   3305   // list path elements
   3306   char **pathL = split(path, "/");
   3307 
   3308   // remove empty elements
   3309   pErrorNULL(iListCompactS(&pathL));
   3310 
   3311   if (listIsEmptyS(pathL)) {
   3312     listFreeS(pathL);
   3313     // keep leading /
   3314     strcpy(path, "/");
   3315     return(path);
   3316   }
   3317 
   3318   // new path elements
   3319   char **list = NULL;
   3320 
   3321   // detect leading double dots
   3322   bool onlyLeadingDoubleDots = true;
   3323 
   3324   // add elements to list
   3325   forEachCharP(pathL, level) {
   3326     if (strEq(*level, "..")) {
   3327       if (onlyLeadingDoubleDots) {
   3328         // keep leading ..
   3329         pErrorNULL(listPushS(&list, ".."));
   3330       }
   3331       else {
   3332         // remove .. in path
   3333         char *s = listPopS(&list);
   3334         free(s);
   3335     }
   3336       }
   3337     else if (!strEq(*level, ".")) {
   3338       // remove . and add elements
   3339       pErrorNULL(listPushS(&list, *level));
   3340       // an element is pushed, so this is the end of leading double dots
   3341       onlyLeadingDoubleDots = false;
   3342   }
   3343     }
   3344 
   3345   if (listLengthS(list) == 1 && strEq(list[0], "..") && getS(path, 0) == '/') {
   3346     // handle ../ .. /.. /../
   3347     list[0][0] = 0;
   3348   }
   3349 
   3350   // handle /.: add empty string
   3351   if (strEq(path, "/.")) {
   3352     pErrorNULL(listPushS(&list, ""));
   3353   }
   3354 
   3355   // keep leading /
   3356   if (getS(path, 0) == '/') {
   3357     if (listIsEmptyS(list)) {
   3358       // .. cancelled path: /a/b/../..
   3359       listFreeManyS(pathL, list);
   3360       strcpy(path, "/");
   3361       return(path);
   3362     }
   3363     pErrorNULL(listPrependS(&list, ""));
   3364   }
   3365 
   3366   // create new path
   3367   char *r = join(list, "/");;
   3368   // keep order pathL, list because list can be NULL
   3369   // if it is first listFreeManyS stops early
   3370   listFreeManyS(pathL, list);
   3371   if (!r) {
   3372     bEmptyS(path);
   3373     return(path);
   3374   }
   3375   strcpy(path, r);
   3376   free(r);
   3377   return(path);
   3378 }
   3379 
   3380 /**
   3381  * buffer size normalize path
   3382  *
   3383  * path must be at least 2 chars
   3384  *
   3385  * remove unecessary /, .. and .
   3386  * leading / is kept
   3387  * leading .. is kept
   3388  * leading . is removed
   3389  *
   3390  * '/../' becomes '/'
   3391  *
   3392  * \param
   3393  *   path
   3394  * \param
   3395  *   pathSize path buffer size, the path strlen will be at most pathSize-1
   3396  * \return
   3397  *   path modified path
   3398  *   NULL when path is NULL
   3399  */
   3400 char *bLNormalizePath(char *path, size_t pathSize) {
   3401 
   3402   // sanity checks
   3403   if (!path) {
   3404     return(NULL);
   3405   }
   3406 
   3407   if (!pathSize) {
   3408     return(path);
   3409   }
   3410 
   3411   if (isEmptyS(path)) {
   3412     bEmptyS(path);
   3413     return(path);
   3414   }
   3415 
   3416   // list path elements
   3417   char **pathL = split(path, "/");
   3418 
   3419   // remove empty elements
   3420   pErrorNULL(iListCompactS(&pathL));
   3421 
   3422   if (listIsEmptyS(pathL)) {
   3423     listFreeS(pathL);
   3424     // keep leading /
   3425     strcpy(path, "/");
   3426     return(path);
   3427   }
   3428 
   3429   // new path elements
   3430   char **list = NULL;
   3431 
   3432   // detect leading double dots
   3433   bool onlyLeadingDoubleDots = true;
   3434 
   3435   // add elements to list
   3436   forEachCharP(pathL, level) {
   3437     if (strEq(*level, "..")) {
   3438       if (onlyLeadingDoubleDots) {
   3439         // keep leading ..
   3440         pErrorNULL(listPushS(&list, ".."));
   3441       }
   3442       else {
   3443         // remove .. in path
   3444         char *s = listPopS(&list);
   3445         free(s);
   3446     }
   3447       }
   3448     else if (!strEq(*level, ".")) {
   3449       // remove . and add elements
   3450       pErrorNULL(listPushS(&list, *level));
   3451       // an element is pushed, so this is the end of leading double dots
   3452       onlyLeadingDoubleDots = false;
   3453   }
   3454     }
   3455 
   3456   if (listLengthS(list) == 1 && strEq(list[0], "..") && getS(path, 0) == '/') {
   3457     // handle ../ .. /.. /../
   3458     list[0][0] = 0;
   3459   }
   3460 
   3461   // handle /.: add empty string
   3462   if (strEq(path, "/.")) {
   3463     pErrorNULL(listPushS(&list, ""));
   3464   }
   3465 
   3466   // keep leading /
   3467   if (getS(path, 0) == '/') {
   3468     if (listIsEmptyS(list)) {
   3469       // .. cancelled path: /a/b/../..
   3470       listFreeManyS(pathL, list);
   3471       strcpy(path, "/");
   3472       return(path);
   3473     }
   3474     pErrorNULL(listPrependS(&list, ""));
   3475   }
   3476 
   3477   // create new path
   3478   char *r = join(list, "/");;
   3479   // keep order pathL, list because list can be NULL
   3480   // if it is first listFreeManyS stops early
   3481   listFreeManyS(pathL, list);
   3482   if (!r) {
   3483     bEmptyS(path);
   3484     return(path);
   3485   }
   3486   pErrorNULL(strLCpy(path, pathSize, r));
   3487   free(r);
   3488   return(path);
   3489 }
   3490 
   3491 /**
   3492  * relative path
   3493  *
   3494  * Return a relative filepath to path either from the current directory or from an optional
   3495  * start directory
   3496  *
   3497  * \param
   3498  * path path to convert
   3499  * \param
   3500  * start reference path, cwd when NULL
   3501  * \return
   3502  * new relative path (you must free the pointer)
   3503  * NULL when path is NULL
   3504  */
   3505 char *relPath(const char *path, const char *start) {
   3506 
   3507   // sanity checks
   3508   if (!path) {
   3509     return(NULL);
   3510   }
   3511 
   3512   char *r = NULL;
   3513 
   3514   // steps
   3515   // normalize path and start
   3516   // if start is not set, start is cwd
   3517   // when path and start are equal, return "."
   3518   // if path is relative path and start is absolute path
   3519   // then path is relative to nstart
   3520   // if path is absolute path and start is relative path
   3521   // then start is relative to cwd
   3522   // when path starts with nstart, slice path to only keep the string
   3523   // after the end of nstart
   3524   // find first uncommon directory between npath and nstart
   3525   // count slashes in nstart after first uncommon directory
   3526   // go up directories to last common directory between npath and nstart
   3527 
   3528   // normalize path and start
   3529   char *npath = expandHome(path);
   3530   pErrorNULL(iNormalizePath(&npath));
   3531   char *nstart;
   3532   char *cwd = getCwd();
   3533 
   3534   // if start is not set, start is cwd
   3535   if (!start) {
   3536     // relative path to cwd
   3537     nstart = getCwd();
   3538   }
   3539   else {
   3540     // use start in argument
   3541     nstart = expandHome(start);;
   3542     pErrorNULL(iNormalizePath(&nstart));
   3543   }
   3544 
   3545   // when path and start are equal, return "."
   3546   if (eqS(npath, nstart)) {
   3547     r = strdup(".");
   3548     goto end;
   3549   }
   3550 
   3551   // if path is relative path and start is absolute path
   3552   // then path is relative to nstart
   3553   if (npath[0] != '/' and nstart[0] == '/') {
   3554     pErrorNULL(iPrependS(&npath, "/"));
   3555     pErrorNULL(iPrependS(&npath, nstart));
   3556     pErrorNULL(iNormalizePath(&npath));
   3557   }
   3558 
   3559   // if path is absolute path and start is relative path
   3560   // then start is relative to cwd
   3561   if (npath[0] == '/' and nstart[0] != '/') {
   3562     pErrorNULL(iPrependS(&nstart, "/"));
   3563     pErrorNULL(iPrependS(&nstart, cwd));
   3564     pErrorNULL(iNormalizePath(&nstart));
   3565   }
   3566 
   3567   // when path starts with nstart, slice path to only keep the string
   3568   // after the end of nstart
   3569   if (startsWithS(npath, nstart)) {
   3570     if (npath[strlen(nstart)] == '/') {
   3571       r = sliceS(npath, (i64)strlen(nstart)+1, 0);
   3572       goto end;
   3573     }
   3574     // handle case when nstart is "/" after normalize
   3575     if (npath[strlen(nstart)-1] == '/') {
   3576       r = sliceS(npath, (i64)strlen(nstart), 0);
   3577       goto end;
   3578     }
   3579     // fallthrough: npath starts with nstart but is a different path
   3580     // Example: npath = "/usr/bin" nstart = "/us"
   3581   }
   3582 
   3583   // find first uncommon directory between npath and nstart
   3584   // lib/t
   3585   // lib/a/b
   3586   size_t i    = 0;
   3587   size_t from = 0;
   3588   while (npath[i] and nstart[i]) {
   3589     if (npath[i] == '/') {
   3590       // i+1 to skip the slash
   3591       from = i+1;;
   3592     }
   3593     if (npath[i] != nstart[i]) {
   3594       break;
   3595     }
   3596     i++;
   3597   }
   3598 
   3599 
   3600   // count slashes in nstart after first uncommon directory
   3601   size_t slash = 1;
   3602   rangeFrom(j, i, strlen(nstart))
   3603     if (nstart[j] == '/') {
   3604       slash++;
   3605     }
   3606 
   3607   // go up directories to last common directory between npath and nstart
   3608   r = repeatS("../", slash);;
   3609   pErrorNULL(iAppendS(&r, npath+from));
   3610 
   3611   end:
   3612   free(npath);
   3613   free(nstart);
   3614   free(cwd);
   3615   return(r);
   3616 }
   3617 
   3618 /**
   3619  * relative path
   3620  *
   3621  * Return a relative filepath to path either from the current directory or from an optional
   3622  * start directory
   3623  *
   3624  * \param
   3625  * path path to convert (this parameter is reallocated)
   3626  * \param
   3627  * start reference path, cwd when NULL
   3628  * \return
   3629  * updated relative path (you must free the pointer)
   3630  * NULL when path is NULL
   3631  */
   3632 char *iRelPath(char **path, const char *start) {
   3633 
   3634   // sanity checks
   3635   if (!path or !*path) {
   3636     return(NULL);
   3637   }
   3638 
   3639   char *r = NULL;
   3640 
   3641   // steps
   3642   // normalize path and start
   3643   // if start is not set, start is cwd
   3644   // when path and start are equal, return "."
   3645   // if path is relative path and start is absolute path
   3646   // then path is relative to nstart
   3647   // if path is absolute path and start is relative path
   3648   // then start is relative to cwd
   3649   // when path starts with nstart, slice path to only keep the string
   3650   // after the end of nstart
   3651   // find first uncommon directory between npath and nstart
   3652   // count slashes in nstart after first uncommon directory
   3653   // go up directories to last common directory between npath and nstart
   3654 
   3655   // normalize path and start
   3656   char *npath = expandHome(*path);
   3657   pErrorNULL(iNormalizePath(&npath));
   3658   char *nstart;
   3659   char *cwd = getCwd();
   3660 
   3661   // if start is not set, start is cwd
   3662   if (!start) {
   3663     // relative path to cwd
   3664     nstart = getCwd();
   3665   }
   3666   else {
   3667     // use start in argument
   3668     nstart = expandHome(start);;
   3669     pErrorNULL(iNormalizePath(&nstart));
   3670   }
   3671 
   3672   // when path and start are equal, return "."
   3673   if (eqS(npath, nstart)) {
   3674     r = strdup(".");
   3675     goto end;
   3676   }
   3677 
   3678   // if path is relative path and start is absolute path
   3679   // then path is relative to nstart
   3680   if (npath[0] != '/' and nstart[0] == '/') {
   3681     pErrorNULL(iPrependS(&npath, "/"));
   3682     pErrorNULL(iPrependS(&npath, nstart));
   3683     pErrorNULL(iNormalizePath(&npath));
   3684   }
   3685 
   3686   // if path is absolute path and start is relative path
   3687   // then start is relative to cwd
   3688   if (npath[0] == '/' and nstart[0] != '/') {
   3689     pErrorNULL(iPrependS(&nstart, "/"));
   3690     pErrorNULL(iPrependS(&nstart, cwd));
   3691     pErrorNULL(iNormalizePath(&nstart));
   3692   }
   3693 
   3694   // when path starts with nstart, slice path to only keep the string
   3695   // after the end of nstart
   3696   if (startsWithS(npath, nstart)) {
   3697     if (npath[strlen(nstart)] == '/') {
   3698       r = sliceS(npath, (i64)strlen(nstart)+1, 0);
   3699       goto end;
   3700     }
   3701     // handle case when nstart is "/" after normalize
   3702     if (npath[strlen(nstart)-1] == '/') {
   3703       r = sliceS(npath, (i64)strlen(nstart), 0);
   3704       goto end;
   3705     }
   3706     // fallthrough: npath starts with nstart but is a different path
   3707     // Example: npath = "/usr/bin" nstart = "/us"
   3708   }
   3709 
   3710 
   3711   // find first uncommon directory between npath and nstart
   3712   // lib/t
   3713   // lib/a/b
   3714   size_t i    = 0;
   3715   size_t from = 0;
   3716   while (npath[i] and nstart[i]) {
   3717     if (npath[i] == '/') {
   3718       // i+1 to skip the slash
   3719       from = i+1;
   3720     }
   3721     if (npath[i] != nstart[i]) {
   3722       break;
   3723     }
   3724     i++;
   3725   }
   3726 
   3727 
   3728   // count slashes in nstart after first uncommon directory
   3729   size_t slash = 1;
   3730   rangeFrom(j, i, strlen(nstart))
   3731     if (nstart[j] == '/') {
   3732       slash++;
   3733     }
   3734 
   3735   // go up directories to last common directory between npath and nstart
   3736   r = repeatS("../", slash);;
   3737   pErrorNULL(iAppendS(&r, npath+from));
   3738 
   3739   end:
   3740   free(npath);
   3741   free(nstart);
   3742   free(cwd);
   3743 
   3744   free(*path);
   3745   *path = r;
   3746   return(*path);
   3747 }
   3748 
   3749 /**
   3750  * relative path
   3751  *
   3752  * Return a relative filepath to path either from the current directory or from an optional
   3753  * start directory
   3754  *
   3755  * \param
   3756  * path path to convert
   3757  * \param
   3758  * start reference path, cwd when NULL
   3759  * \return
   3760  * relative path in dest
   3761  * NULL when path or dest are NULL
   3762  */
   3763 char *bRelPath(char *dest, const char *path, const char *start) {
   3764 
   3765   // sanity checks
   3766   if (!path or !dest) {
   3767     return(NULL);
   3768   }
   3769 
   3770   char *r = NULL;
   3771 
   3772   // steps
   3773   // normalize path and start
   3774   // if start is not set, start is cwd
   3775   // when path and start are equal, return "."
   3776   // if path is relative path and start is absolute path
   3777   // then path is relative to nstart
   3778   // if path is absolute path and start is relative path
   3779   // then start is relative to cwd
   3780   // when path starts with nstart, slice path to only keep the string
   3781   // after the end of nstart
   3782   // find first uncommon directory between npath and nstart
   3783   // count slashes in nstart after first uncommon directory
   3784   // go up directories to last common directory between npath and nstart
   3785 
   3786   // normalize path and start
   3787   char *npath = expandHome(path);
   3788   pErrorNULL(iNormalizePath(&npath));
   3789   char *nstart;
   3790   char *cwd = getCwd();
   3791 
   3792   // if start is not set, start is cwd
   3793   if (!start) {
   3794     // relative path to cwd
   3795     nstart = getCwd();
   3796   }
   3797   else {
   3798     // use start in argument
   3799     nstart = expandHome(start);;
   3800     pErrorNULL(iNormalizePath(&nstart));
   3801   }
   3802 
   3803   // when path and start are equal, return "."
   3804   if (eqS(npath, nstart)) {
   3805     r = strdup(".");
   3806     goto end;
   3807   }
   3808 
   3809   // if path is relative path and start is absolute path
   3810   // then path is relative to nstart
   3811   if (npath[0] != '/' and nstart[0] == '/') {
   3812     pErrorNULL(iPrependS(&npath, "/"));
   3813     pErrorNULL(iPrependS(&npath, nstart));
   3814     pErrorNULL(iNormalizePath(&npath));
   3815   }
   3816 
   3817   // if path is absolute path and start is relative path
   3818   // then start is relative to cwd
   3819   if (npath[0] == '/' and nstart[0] != '/') {
   3820     pErrorNULL(iPrependS(&nstart, "/"));
   3821     pErrorNULL(iPrependS(&nstart, cwd));
   3822     pErrorNULL(iNormalizePath(&nstart));
   3823   }
   3824 
   3825   // when path starts with nstart, slice path to only keep the string
   3826   // after the end of nstart
   3827   if (startsWithS(npath, nstart)) {
   3828     if (npath[strlen(nstart)] == '/') {
   3829       r = sliceS(npath, (i64)strlen(nstart)+1, 0);
   3830       goto end;
   3831     }
   3832     // handle case when nstart is "/" after normalize
   3833     if (npath[strlen(nstart)-1] == '/') {
   3834       r = sliceS(npath, (i64)strlen(nstart), 0);
   3835       goto end;
   3836     }
   3837     // fallthrough: npath starts with nstart but is a different path
   3838     // Example: npath = "/usr/bin" nstart = "/us"
   3839   }
   3840 
   3841   // find first uncommon directory between npath and nstart
   3842   // lib/t
   3843   // lib/a/b
   3844   size_t i    = 0;
   3845   size_t from = 0;
   3846   while (npath[i] and nstart[i]) {
   3847     if (npath[i] == '/') {
   3848       // i+1 to skip the slash
   3849       from = i+1;
   3850     }
   3851     if (npath[i] != nstart[i]) {
   3852       break;
   3853     }
   3854     i++;
   3855   }
   3856 
   3857 
   3858   // count slashes in nstart after first uncommon directory
   3859   size_t slash = 1;
   3860   rangeFrom(j, i, strlen(nstart))
   3861     if (nstart[j] == '/') {
   3862       slash++;
   3863     }
   3864 
   3865   // go up directories to last common directory between npath and nstart
   3866   r = repeatS("../", slash);;
   3867   pErrorNULL(iAppendS(&r, npath+from));
   3868 
   3869   end:
   3870   free(npath);
   3871   free(nstart);
   3872   free(cwd);
   3873 
   3874   strcpy(dest, r);
   3875   free(r);
   3876   return(dest);
   3877 }
   3878 
   3879 /**
   3880  * relative path
   3881  *
   3882  * Return a relative filepath to path either from the current directory or from an optional
   3883  * start directory
   3884  *
   3885  * \param
   3886  * path path to convert
   3887  * \param
   3888  * start reference path, cwd when NULL
   3889  * \return
   3890  * relative path in dest
   3891  * NULL when path or dest are NULL
   3892  */
   3893 char *bLRelPath(char *dest, size_t destSize, char *path, const char *start) {
   3894 
   3895   // sanity checks
   3896   if (!path or !dest) {
   3897     return(NULL);
   3898   }
   3899 
   3900   char *r = NULL;
   3901 
   3902   // steps
   3903   // normalize path and start
   3904   // if start is not set, start is cwd
   3905   // when path and start are equal, return "."
   3906   // if path is relative path and start is absolute path
   3907   // then path is relative to nstart
   3908   // if path is absolute path and start is relative path
   3909   // then start is relative to cwd
   3910   // when path starts with nstart, slice path to only keep the string
   3911   // after the end of nstart
   3912   // find first uncommon directory between npath and nstart
   3913   // count slashes in nstart after first uncommon directory
   3914   // go up directories to last common directory between npath and nstart
   3915 
   3916   // normalize path and start
   3917   char *npath = expandHome(path);
   3918   pErrorNULL(iNormalizePath(&npath));
   3919   char *nstart;
   3920   char *cwd = getCwd();
   3921 
   3922   // if start is not set, start is cwd
   3923   if (!start) {
   3924     // relative path to cwd
   3925     nstart = getCwd();
   3926   }
   3927   else {
   3928     // use start in argument
   3929     nstart = expandHome(start);;
   3930     pErrorNULL(iNormalizePath(&nstart));
   3931   }
   3932 
   3933   // when path and start are equal, return "."
   3934   if (eqS(npath, nstart)) {
   3935     r = strdup(".");
   3936     goto end;
   3937   }
   3938 
   3939   // if path is relative path and start is absolute path
   3940   // then path is relative to nstart
   3941   if (npath[0] != '/' and nstart[0] == '/') {
   3942     pErrorNULL(iPrependS(&npath, "/"));
   3943     pErrorNULL(iPrependS(&npath, nstart));
   3944     pErrorNULL(iNormalizePath(&npath));
   3945   }
   3946 
   3947   // if path is absolute path and start is relative path
   3948   // then start is relative to cwd
   3949   if (npath[0] == '/' and nstart[0] != '/') {
   3950     pErrorNULL(iPrependS(&nstart, "/"));
   3951     pErrorNULL(iPrependS(&nstart, cwd));
   3952     pErrorNULL(iNormalizePath(&nstart));
   3953   }
   3954 
   3955   // when path starts with nstart, slice path to only keep the string
   3956   // after the end of nstart
   3957   if (startsWithS(npath, nstart)) {
   3958     if (npath[strlen(nstart)] == '/') {
   3959       r = sliceS(npath, (i64)strlen(nstart)+1, 0);
   3960       goto end;
   3961     }
   3962     // handle case when nstart is "/" after normalize
   3963     if (npath[strlen(nstart)-1] == '/') {
   3964       r = sliceS(npath, (i64)strlen(nstart), 0);
   3965       goto end;
   3966     }
   3967     // fallthrough: npath starts with nstart but is a different path
   3968     // Example: npath = "/usr/bin" nstart = "/us"
   3969   }
   3970 
   3971   // find first uncommon directory between npath and nstart
   3972   // lib/t
   3973   // lib/a/b
   3974   size_t i    = 0;
   3975   size_t from = 0;
   3976   while (npath[i] and nstart[i]) {
   3977     if (npath[i] == '/') {
   3978       from = i+1;
   3979     }
   3980     if (npath[i] != nstart[i]) {
   3981       break;
   3982     }
   3983     i++;
   3984   }
   3985 
   3986 
   3987   // count slashes in nstart after first uncommon directory
   3988   size_t slash = 1;
   3989   rangeFrom(j, i, strlen(nstart))
   3990     if (nstart[j] == '/') {
   3991       slash++;
   3992     }
   3993 
   3994   // go up directories to last common directory between npath and nstart
   3995   r = repeatS("../", slash);;
   3996   pErrorNULL(iAppendS(&r, npath+from));
   3997 
   3998   end:
   3999   free(npath);
   4000   free(nstart);
   4001   free(cwd);
   4002 
   4003   pErrorNULL(strLCpy(dest, destSize, r));
   4004   free(r);
   4005   return(dest);
   4006 }
   4007 
   4008 
   4009 
   4010 /**
   4011  * get home path
   4012  *
   4013  * \return
   4014  *   home path (you must free the pointer)
   4015  */
   4016 char *getHomePath(void) {
   4017 
   4018   struct passwd *pw = getpwuid(getuid());;
   4019   if (!pw) {
   4020     return(NULL);
   4021   }
   4022   return(strdup(pw->pw_dir));
   4023 }
   4024 
   4025 /**
   4026  * copy home path to path
   4027  *
   4028  * \param
   4029  *   path buffer large enough for home path
   4030  * \return
   4031  *   path pointer
   4032  */
   4033 char *bGetHomePath(char *path) {
   4034 
   4035   struct passwd *pw = getpwuid(getuid());;
   4036   if (!pw) {
   4037     return(NULL);
   4038   }
   4039   strcpy(path, pw->pw_dir);
   4040   return(path);
   4041 }
   4042 
   4043 /**
   4044  * copy home path to path maximum pathSize
   4045  *
   4046  * \param
   4047  *   path buffer large enough for home path
   4048  * \param
   4049  *   pathSize size of path
   4050  * \return
   4051  *   path pointer
   4052  */
   4053 char *bLGetHomePath(char *path, size_t pathSize) {
   4054 
   4055   struct passwd *pw = getpwuid(getuid());;
   4056   if (!pw) {
   4057     return(NULL);
   4058   }
   4059   if (strlen(pw->pw_dir)+1 > pathSize) {
   4060     return(NULL);
   4061   }
   4062   pErrorNULL(strLCpy(path, pathSize, pw->pw_dir));
   4063   return(path);
   4064 }
   4065 
   4066 /**
   4067  * get home path as a const char*
   4068  *
   4069  * \return
   4070  *   home path
   4071  */
   4072 const char *getCHomePath(void) {
   4073 
   4074   struct passwd *pw = getpwuid(getuid());;
   4075   if (!pw) {
   4076     return(NULL);
   4077   }
   4078   return(pw->pw_dir);
   4079 }
   4080 
   4081 /**
   4082  * get current working directory
   4083  *
   4084  * \return
   4085  *   current path (you must free the pointer)
   4086  */
   4087 char *getCwd(void) {
   4088   char *r = NULL;
   4089 
   4090   #if (__sun__)
   4091   // in openIndiana, the size argument cant be 0
   4092   r = getcwd(NULL, 8192);
   4093   #else
   4094   r = getcwd(NULL, 0);
   4095   #endif
   4096   if (!r) {
   4097     pFuncError
   4098     return(NULL);
   4099   }
   4100   return(r);
   4101 }
   4102 
   4103 char *bLGetCwd(char *path, size_t pathSize) {
   4104   char *r = NULL;
   4105 
   4106   r = getcwd(path, pathSize);
   4107   if (!r) {
   4108     pFuncError
   4109     return(NULL);
   4110   }
   4111   return(path);
   4112 }
   4113 
   4114 
   4115 
   4116 /**
   4117  * change directory
   4118  *
   4119  * \param
   4120  *   path
   4121  * \return
   4122  *    1 success
   4123  *    0 error
   4124  */
   4125 int chDir(const char *path) {
   4126 
   4127   if (!path) {
   4128     return(0);
   4129   }
   4130 
   4131   int r = chdir(path);
   4132   if (r) {
   4133     pFuncError
   4134     shEPrintfS("The path was: \"%s\"\n", path);
   4135     r = 0;
   4136   }
   4137   else {
   4138     r = 1;
   4139   }
   4140   return(r);
   4141 }
   4142 
   4143 /**
   4144  * is directory
   4145  *
   4146  * \param
   4147  *  path
   4148  * \return
   4149  *  true when path is a directory
   4150  *  false path is not a directory, filePath is NULL or empty string
   4151  */
   4152 bool isDir(const char *path) {
   4153   struct stat st;
   4154 
   4155   // sanity checks
   4156   if (!path || isBlankS(path)) {
   4157     return(false);
   4158   }
   4159 
   4160   if (stat(path, &st) == -1) {
   4161     return(false);
   4162   }
   4163 
   4164   if (!S_ISDIR(st.st_mode)) {
   4165     return(false);
   4166   }
   4167   return(true);
   4168 }
   4169 
   4170 /**
   4171  * sheepy read link
   4172  *
   4173  * read the first target in the link chain
   4174  *
   4175  * the returned string has to be freed
   4176  *
   4177  * \param
   4178  *   path symbolic link path
   4179  * \return
   4180  *   path to linked file or directory (you must free the pointer)
   4181  *   NULL failed: path is blank or NULL
   4182  *     path is not a symlink
   4183  *     malloc failed to allocate the result buffer
   4184  *     readlink failed
   4185  */
   4186 char *shReadlink(const char *path) {
   4187   char *linked = NULL;
   4188   struct stat st;
   4189   size_t bufSize;
   4190   ssize_t r;
   4191 
   4192   if (!path || isBlankS(path)) {
   4193     return(NULL);
   4194   }
   4195 
   4196   if (lstat(path, &st) == -1) {
   4197     pFuncError
   4198     return(NULL);
   4199   }
   4200 
   4201   if (!S_ISLNK(st.st_mode)) {
   4202     // path is a symbolic link
   4203     return(NULL);
   4204   }
   4205 
   4206   if (st.st_size == 0) {
   4207     bufSize = PATH_MAX;
   4208   }
   4209   else {
   4210     bufSize = (size_t)st.st_size + 1;
   4211   }
   4212 
   4213   linked = MALLOC(bufSize);
   4214   if (!linked) {
   4215     pFuncError
   4216     return(NULL);
   4217   }
   4218 
   4219   r = readlink(path, linked, bufSize);
   4220 
   4221   if (r == -1) {
   4222     pFuncError
   4223     free(linked);
   4224     return(NULL);
   4225   }
   4226 
   4227   // append null byte
   4228   *(linked + r) = 0;
   4229 
   4230   return(linked);
   4231 }
   4232 
   4233 /**
   4234  * end link
   4235  *
   4236  * read the link chain of a symbolic link to the end
   4237  * the returned string has to be freed
   4238  *
   4239  * \param
   4240  *   path symbolic link path
   4241  * \return
   4242  *   path to linked file or directory (you must free the pointer)
   4243  *   NULL failed: path is blank or NULL
   4244  *     path is not a symlink
   4245  *     malloc failed to allocate the result buffer
   4246  *     readlink failed
   4247  */
   4248 char *endlink(const char *path) {
   4249   char *linked = NULL;
   4250   char from[PATH_MAX];
   4251   char to[PATH_MAX];
   4252   struct stat st;
   4253   size_t bufSize;
   4254   ssize_t r;
   4255 
   4256   if (!path || isBlankS(path)) {
   4257     return(NULL);
   4258   }
   4259 
   4260   if (lstat(path, &st) == -1) {
   4261     pFuncError
   4262     return(NULL);
   4263   }
   4264 
   4265   if (!S_ISLNK(st.st_mode)) {
   4266     // path is a symbolic link
   4267     return(NULL);
   4268   }
   4269 
   4270   if (st.st_size == 0) {
   4271     bufSize = PATH_MAX;
   4272   }
   4273   else {
   4274     bufSize = (size_t)st.st_size + 1;
   4275   }
   4276 
   4277   pErrorNULL(strLCpy(from, sizeof from, path));
   4278 
   4279   while (S_ISLNK(st.st_mode)) {
   4280     r = readlink(from, to, bufSize);
   4281 
   4282     if (r == -1) {
   4283       pFuncError
   4284       return(NULL);
   4285     }
   4286 
   4287     // append null byte
   4288     to[r] =  0;
   4289 
   4290     if (to[0] != '/') {
   4291       pErrorNULL(bDirname(from));
   4292       pErrorNULL(bLAppendManyS(from, PATH_MAX, "/", to));
   4293       pErrorNULL(bNormalizePath(from));
   4294     }
   4295     else {
   4296       // copy absolute path
   4297       strcpy(from, to);
   4298     }
   4299 
   4300     if (lstat(from, &st) == -1) {
   4301       pFuncError
   4302       return(NULL);
   4303     }
   4304 
   4305     if (st.st_size == 0) {
   4306       bufSize = PATH_MAX;
   4307     }
   4308     else {
   4309       bufSize = (size_t)st.st_size + 1;
   4310   }
   4311     }
   4312 
   4313   linked = strdup(from);;
   4314   return(linked);
   4315 }
   4316 
   4317 /**
   4318  * is symbolic link
   4319  *
   4320  * \param
   4321  *  path
   4322  * \return
   4323  *  true when path is a symbolic link
   4324  *  false path is not a symbolic link, filePath is NULL or empty string
   4325  */
   4326 bool isLink(const char *path) {
   4327   struct stat st;
   4328 
   4329   // sanity checks
   4330   if (!path || isBlankS(path)) {
   4331     return(false);
   4332   }
   4333 
   4334   if (lstat(path, &st) == -1) {
   4335     return(false);
   4336   }
   4337 
   4338   if (!S_ISLNK(st.st_mode)) {
   4339     return(false);
   4340   }
   4341   return(true);
   4342 }
   4343 
   4344 /**
   4345  * detect files and directories
   4346  *
   4347  * \param
   4348  *   filePath: path to file or directory
   4349  * \return
   4350  *   true exists
   4351  *   false non existant
   4352  *   false filePath is NULL or empty string
   4353  */
   4354 bool fileExists(const char *filePath) {
   4355 
   4356   // sanity checks
   4357   if (!filePath || isBlankS(filePath)) {
   4358     return(false);
   4359   }
   4360 
   4361   int r = access(filePath, F_OK);
   4362   //if r
   4363   //  pStrError("fileExists error");
   4364   // dont print error because this is a test
   4365   return(r != -1);;
   4366 }
   4367 
   4368 /**
   4369  * like chmod in stdlibc but return true/false
   4370  * \param
   4371  *   filePath: path to file or directory
   4372  *   mode: permissions
   4373  * \return
   4374  *   true success
   4375  *   false filePath doesnt exist, not enough permissions...
   4376  *   false filePath is NULL or empty string
   4377  */
   4378 bool fileChmod(const char *filePath, mode_t mode) {
   4379 
   4380   // sanity checks
   4381   if (!filePath || isBlankS(filePath)) {
   4382     return(false);
   4383   }
   4384 
   4385   int r = chmod(filePath, mode);
   4386   if (r) {
   4387     pFuncError
   4388     shEPrintfS("The path was: \"%s\"\n", filePath);
   4389   }
   4390   return(r == 0);;
   4391 }
   4392 
   4393 /**
   4394  * get file size
   4395  *
   4396  * \param
   4397  *   filePath: path to file
   4398  * \return
   4399  *   ssize_t >= 0 size
   4400  *   -1 an error occured or filePath is NULL or empty string
   4401  */
   4402 ssize_t fileSize(const char *filePath) {
   4403   struct stat st;
   4404 
   4405   // sanity checks
   4406   if (!filePath || isBlankS(filePath)) {
   4407     return(-1);
   4408   }
   4409 
   4410   int r = stat(filePath, &st);;
   4411   if (r) {
   4412     pFuncError
   4413     shEPrintfS("The path was: \"%s\"\n", filePath);
   4414     return(-1);
   4415   }
   4416 
   4417   // macOS returns a varying number a number above the constant below
   4418   // when the file doesnt exists
   4419   if ((uint64_t)(st.st_size) > 140734000000000) {
   4420     return(-1);//LCOV_EXCL_LINE
   4421   }
   4422   return(st.st_size);
   4423 }
   4424 
   4425 /**
   4426  * get file size from file pointer
   4427  *
   4428  * \param
   4429  *   fp file pointer
   4430  * \return
   4431  *   ssize_t >= 0 size
   4432  *   -1 an error occured or file pointer is NULL
   4433  */
   4434 ssize_t fileSizeFP(FILE *fp) {
   4435 
   4436   if (!fp) {
   4437     return(-1);
   4438   }
   4439 
   4440   if (fseek(fp, 0L, SEEK_END) == -1) {
   4441     pFuncError
   4442     return(-1);
   4443   }
   4444   ssize_t r = ftell(fp);
   4445   rewind(fp);
   4446   return(r);
   4447 }
   4448 
   4449 /**
   4450  * read file to string
   4451  *
   4452  * 0 is added at the end to terminate the string
   4453  *
   4454  * \param
   4455  *   filePath: path to file
   4456  * \return
   4457  *   data in file (you must free the pointer)
   4458  *   NULL an error occured
   4459  */
   4460 void *readFileToS(const char *filePath) {
   4461   FILE *f = NULL;
   4462   void *r = NULL;
   4463   ssize_t len;
   4464   size_t readStatus;
   4465 
   4466   // sanity checks
   4467   if (!filePath || isBlankS(filePath)) {
   4468     return(NULL);
   4469   }
   4470 
   4471   len = fileSize(filePath);;
   4472   if (len == -1) {
   4473     return(NULL);
   4474   }
   4475 
   4476   // +1 to add \0 at the end
   4477   r = MALLOC((size_t)len+1);
   4478   if (!r) {
   4479     return(NULL);
   4480   }
   4481 
   4482   f = fopen(filePath, "r");
   4483   if (!f) {
   4484     free(r);
   4485     pFuncError
   4486     shEPrintfS("The path was: \"%s\"\n", filePath);
   4487     return(NULL);
   4488   }
   4489   readStatus = fread(r, 1, (size_t)len , f);
   4490   fclose(f);
   4491 
   4492   if (readStatus != (size_t)len) {
   4493     free(r);
   4494     pFuncError
   4495     shEPrintfS("The path was: \"%s\"\n", filePath);
   4496     return(NULL);
   4497   }
   4498 
   4499   *((char*)r+len) = 0;
   4500 
   4501   return(r);
   4502 }
   4503 
   4504 /**
   4505  * read file to string
   4506  *
   4507  * 0 is added at the end to terminate the string
   4508  *
   4509  * \param
   4510  *   fp file pointer
   4511  * \return
   4512  *   data in file (you must free the pointer)
   4513  *   NULL an error occured
   4514  */
   4515 void *readStreamToS(FILE *fp) {
   4516   void *r = NULL;
   4517   ssize_t len;
   4518   size_t readStatus;
   4519 
   4520   // sanity checks
   4521   if (!fp) {
   4522     return(NULL);
   4523   }
   4524 
   4525   len = fileSizeFP(fp);;
   4526   if (len == -1) {
   4527     return(NULL);
   4528   }
   4529 
   4530   // +1 to add \0 at the end
   4531   r = MALLOC((size_t)len+1);
   4532   if (!r) {
   4533     return(NULL);
   4534   }
   4535 
   4536   readStatus = fread(r, 1, (size_t)len , fp);
   4537 
   4538   if (readStatus != (size_t)len) {
   4539     free(r);
   4540     pFuncError
   4541     return(NULL);
   4542   }
   4543 
   4544   *((char*)r+len) = 0;
   4545 
   4546   return(r);
   4547 }
   4548 
   4549 
   4550 /**
   4551  * buffer read file to string
   4552  *
   4553  * 0 is added at the end to terminate the string
   4554  *
   4555  * \param
   4556  *   dst: destination buffer
   4557  * \param
   4558  *   filePath: path to file
   4559  * \return
   4560  *   data in file
   4561  *   NULL an error occured
   4562  */
   4563 void *bReadFileToS(const char *filePath, void *dst) {
   4564   FILE *f = NULL;
   4565   ssize_t len;
   4566   size_t readStatus;
   4567 
   4568   // sanity checks
   4569   if (!filePath || isBlankS(filePath) || !dst) {
   4570     return(NULL);
   4571   }
   4572 
   4573   len = fileSize(filePath);;
   4574   if (len == -1) {
   4575     return(NULL);
   4576   }
   4577 
   4578   f = fopen(filePath, "r");
   4579   if (!f) {
   4580     pFuncError
   4581     shEPrintfS("The path was: \"%s\"\n", filePath);
   4582     return(NULL);
   4583   }
   4584 
   4585   readStatus = fread(dst, 1, (size_t)len , f);
   4586   fclose(f);
   4587 
   4588   if (readStatus != (size_t)len) {
   4589     pFuncError
   4590     shEPrintfS("The path was: \"%s\"\n", filePath);
   4591     return(NULL);
   4592   }
   4593 
   4594   *((char*)dst+len) = 0;
   4595 
   4596   return(dst);
   4597 }
   4598 
   4599 /**
   4600  * buffer read file to string
   4601  *
   4602  * 0 is added at the end to terminate the string
   4603  *
   4604  * \param
   4605  *   dst: destination buffer
   4606  * \param
   4607  *   fp file pointer
   4608  * \return
   4609  *   data in file
   4610  *   NULL an error occured
   4611  */
   4612 void *bReadStreamToS(FILE *fp, void *dst) {
   4613   ssize_t len;
   4614   size_t readStatus;
   4615 
   4616   // sanity checks
   4617   if (!fp || !dst) {
   4618     return(NULL);
   4619   }
   4620 
   4621   len = fileSizeFP(fp);;
   4622   if (len == -1) {
   4623     return(NULL);
   4624   }
   4625 
   4626   readStatus = fread(dst, 1, (size_t)len , fp);
   4627 
   4628   if (readStatus != (size_t)len) {
   4629     pFuncError
   4630     return(NULL);
   4631   }
   4632 
   4633   *((char*)dst+len) = 0;
   4634 
   4635   return(dst);
   4636 }
   4637 
   4638 
   4639 /**
   4640  * buffer size read file to string
   4641  *
   4642  * 0 is added at the end to terminate the string
   4643  *
   4644  * \param
   4645  *   filePath: path to file
   4646  * \param
   4647  *   dst: destination buffer
   4648  * \param
   4649  *   dstSize path buffer size, the path strlen will be at most dstSize-1
   4650  * \return
   4651  *   data in file
   4652  *   NULL an error occured
   4653  */
   4654 void *bLReadFileToS(const char *filePath, void *dst, size_t dstSize) {
   4655   FILE *f = NULL;
   4656   ssize_t len;
   4657   size_t readStatus;
   4658 
   4659   // sanity checks
   4660   if (!filePath || isBlankS(filePath) || !dst) {
   4661     return(NULL);
   4662   }
   4663 
   4664   if (!dstSize) {
   4665     // size 0, no change in dst
   4666     return(dst);
   4667   }
   4668 
   4669   len = fileSize(filePath);;
   4670   if (len == -1) {
   4671     return(NULL);
   4672   }
   4673 
   4674   // truncate if necessary
   4675   len = ((size_t)len < dstSize) ? len : (ssize_t)dstSize-1;
   4676 
   4677   f = fopen(filePath, "r");
   4678   if (!f) {
   4679     pFuncError
   4680     shEPrintfS("The path was: \"%s\"\n", filePath);
   4681     return(NULL);
   4682   }
   4683 
   4684   readStatus = fread(dst, 1, (size_t)len , f);
   4685   fclose(f);
   4686 
   4687   if (readStatus != (size_t)len) {
   4688     pFuncError
   4689     shEPrintfS("The path was: \"%s\"\n", filePath);
   4690     return(NULL);
   4691   }
   4692 
   4693   *((char*)dst+len) = 0;
   4694 
   4695   return(dst);
   4696 }
   4697 
   4698 /**
   4699  * buffer size read file to string
   4700  *
   4701  * 0 is added at the end to terminate the string
   4702  *
   4703  * \param
   4704  *   dst: destination buffer
   4705  * \param
   4706  *   fp file pointer
   4707  * \return
   4708  *   data in file
   4709  *   NULL an error occured
   4710  */
   4711 void *bLReadStreamToS(FILE *fp, void *dst, size_t dstSize) {
   4712   ssize_t len;
   4713   size_t readStatus;
   4714 
   4715   // sanity checks
   4716   if (!fp || !dst) {
   4717     return(NULL);
   4718   }
   4719 
   4720   if (!dstSize) {
   4721     // size 0, no change in dst
   4722     return(dst);
   4723   }
   4724 
   4725   len = fileSizeFP(fp);;
   4726   if (len == -1) {
   4727     return(NULL);
   4728   }
   4729 
   4730   // truncate if necessary
   4731   len = ((size_t)len < dstSize) ? len : (ssize_t)dstSize-1;
   4732 
   4733   readStatus = fread(dst, 1, (size_t)len , fp);
   4734 
   4735   if (readStatus != (size_t)len) {
   4736     pFuncError
   4737     return(NULL);
   4738   }
   4739 
   4740   *((char*)dst+len) = 0;
   4741 
   4742   return(dst);
   4743 }
   4744 
   4745 /**
   4746  * read file to buffer
   4747  *
   4748  * The function allocates the buffer
   4749  *
   4750  * \param
   4751  *   filePath path to file
   4752  * \param
   4753  *   buffer   unallocated buffer
   4754  * \return
   4755  *   data from file in buffer (you must free the pointer)
   4756  *   buffer size
   4757  *   -1 error
   4758  */
   4759 ssize_t readFile(const char *filePath, void **buffer) {
   4760   FILE *f = NULL;
   4761   ssize_t len;
   4762   size_t readStatus;
   4763 
   4764   // sanity checks
   4765   if (!filePath || isBlankS(filePath) || !buffer) {
   4766     return(-1);
   4767   }
   4768 
   4769   len = fileSize(filePath);;
   4770   if (len == -1) {
   4771     return(-1);
   4772   }
   4773 
   4774   // +1 to add \0 at the end
   4775   *buffer = MALLOC((size_t)len);
   4776   if (!*buffer) {
   4777     return(-1);
   4778   }
   4779 
   4780   f = fopen(filePath, "r");
   4781   if (!f) {
   4782     free(*buffer);
   4783     pFuncError
   4784     shEPrintfS("The path was: \"%s\"\n", filePath);
   4785     return(-1);
   4786   }
   4787   readStatus = fread(*buffer, 1, (size_t)len , f);
   4788   fclose(f);
   4789 
   4790   if (readStatus != (size_t)len) {
   4791     free(*buffer);
   4792     pFuncError
   4793     shEPrintfS("The path was: \"%s\"\n", filePath);
   4794     return(-1);
   4795   }
   4796 
   4797   return(len);
   4798 }
   4799 
   4800 
   4801 /**
   4802  * buffer read file to buffer
   4803  *
   4804  * The function allocates the buffer
   4805  *
   4806  * \param
   4807  *   filePath path to file
   4808  * \param
   4809  *   buffer   already allocated buffer
   4810  * \return
   4811  *   data from file in buffer
   4812  *   buffer size
   4813  *   -1 error
   4814  */
   4815 ssize_t bReadFile(const char *filePath, void *buffer) {
   4816   FILE *f = NULL;
   4817   ssize_t len;
   4818   size_t readStatus;
   4819 
   4820   // sanity checks
   4821   if (!filePath || isBlankS(filePath) || !buffer) {
   4822     return(-1);
   4823   }
   4824 
   4825   len = fileSize(filePath);;
   4826   if (len == -1) {
   4827     return(-1);
   4828   }
   4829 
   4830   f = fopen(filePath, "r");
   4831   if (!f) {
   4832     pFuncError
   4833     shEPrintfS("The path was: \"%s\"\n", filePath);
   4834     return(-1);
   4835   }
   4836   readStatus = fread(buffer, 1, (size_t)len , f);
   4837   fclose(f);
   4838 
   4839   if (readStatus != (size_t)len) {
   4840     pFuncError
   4841     shEPrintfS("The path was: \"%s\"\n", filePath);
   4842     return(-1);
   4843   }
   4844 
   4845   return(len);
   4846 }
   4847 
   4848 
   4849 /**
   4850  * buffer size read file to buffer
   4851  *
   4852  * The function allocates the buffer
   4853  *
   4854  * \param
   4855  *   filePath path to file
   4856  * \param
   4857  *   buffer   already allocated buffer
   4858  * \param
   4859  *   dstSize path buffer size
   4860  * \return
   4861  *   data from file in buffer
   4862  *   buffer size
   4863  *   -1 error
   4864  */
   4865 ssize_t bLReadFile(const char *filePath, void *buffer, size_t dstSize) {
   4866   FILE *f = NULL;
   4867   ssize_t len;
   4868   size_t readStatus;
   4869 
   4870   // sanity checks
   4871   if (!filePath || isBlankS(filePath) || !buffer) {
   4872     return(-1);
   4873   }
   4874 
   4875   if (!dstSize) {
   4876     return(0);
   4877   }
   4878 
   4879   len = fileSize(filePath);;
   4880   if (len == -1) {
   4881     return(-1);
   4882   }
   4883 
   4884   // truncate if necessary
   4885   len = ((size_t)len < dstSize) ? len : (ssize_t)dstSize;
   4886 
   4887   f = fopen(filePath, "r");
   4888   if (!f) {
   4889     pFuncError
   4890     shEPrintfS("The path was: \"%s\"\n", filePath);
   4891     return(-1);
   4892   }
   4893   readStatus = fread(buffer, 1, (size_t)len , f);
   4894   fclose(f);
   4895 
   4896   if (readStatus != (size_t)len) {
   4897     pFuncError
   4898     shEPrintfS("The path was: \"%s\"\n", filePath);
   4899     return(-1);
   4900   }
   4901 
   4902   return(len);
   4903 }
   4904 
   4905 
   4906 /**
   4907  * write string to file
   4908  *
   4909  * \param
   4910  *   filePath path to file
   4911  *   string
   4912  * \return
   4913  *   1 success
   4914  *   0 error
   4915  */
   4916 int writeFileS(const char *filePath, const char *string) {
   4917   FILE *f = NULL;
   4918   size_t len;
   4919   size_t writeStatus;
   4920 
   4921   // sanity checks
   4922   if (!filePath || isBlankS(filePath) || !string) {
   4923     return(0);
   4924   }
   4925 
   4926   len = strlen(string);
   4927 
   4928   f = fopen(filePath, "w");
   4929   if (!f) {
   4930     pFuncError
   4931     shEPrintfS("The path was: \"%s\"\n", filePath);
   4932     return(0);
   4933   }
   4934   writeStatus = fwrite(string, 1, len , f);
   4935   fclose(f);
   4936 
   4937   if (writeStatus != len) {
   4938     pFuncError
   4939     shEPrintfS("The path was: \"%s\"\n", filePath);
   4940     return(0);
   4941   }
   4942 
   4943   return(1);
   4944 }
   4945 
   4946 
   4947 /**
   4948  * write buffer to file
   4949  *
   4950  * \param
   4951  *   filePath path to file
   4952  *   buffer
   4953  *   len      buffer size in bytes
   4954  * \return
   4955  *   1 success
   4956  *   0 error
   4957  */
   4958 int writeFile(const char *filePath, void *buffer, size_t len) {
   4959   FILE *f = NULL;
   4960   size_t writeStatus;
   4961 
   4962   // sanity checks
   4963   if (!filePath || isBlankS(filePath) || !buffer) {
   4964     return(0);
   4965   }
   4966 
   4967   f = fopen(filePath, "w");
   4968   if (!f) {
   4969     pFuncError
   4970     shEPrintfS("The path was: \"%s\"\n", filePath);
   4971     return(0);
   4972   }
   4973   writeStatus = fwrite(buffer, 1, len , f);
   4974   fclose(f);
   4975 
   4976   if (writeStatus != len) {
   4977     pFuncError
   4978     shEPrintfS("The path was: \"%s\"\n", filePath);
   4979     return(0);
   4980   }
   4981 
   4982   return(1);
   4983 }
   4984 
   4985 
   4986 /**
   4987  * write string to file
   4988  *
   4989  * \param
   4990  *   fp file pointer
   4991  *   string
   4992  * \return
   4993  *   1 success
   4994  *   0 error
   4995  */
   4996 int writeStreamS(FILE *fp, const char *string) {
   4997   size_t len;
   4998   size_t writeStatus;
   4999 
   5000   // sanity checks
   5001   if (!fp || !string) {
   5002     return(0);
   5003   }
   5004 
   5005   len = strlen(string);
   5006 
   5007   writeStatus = fwrite(string, 1, len , fp);
   5008 
   5009   if (writeStatus != len) {
   5010     pFuncError
   5011     return(0);
   5012   }
   5013 
   5014   return(1);
   5015 }
   5016 
   5017 /**
   5018  * write buffer to file
   5019  *
   5020  * \param
   5021  *   fp file pointer
   5022  *   buffer
   5023  *   len      buffer size in bytes
   5024  * \return
   5025  *   1 success
   5026  *   0 error
   5027  */
   5028 int writeLStream(FILE *fp, void *buffer, size_t len) {
   5029   size_t writeStatus;
   5030 
   5031   // sanity checks
   5032   if (!fp || !buffer) {
   5033     return(0);
   5034   }
   5035 
   5036   writeStatus = fwrite(buffer, 1, len , fp);
   5037 
   5038   if (writeStatus != len) {
   5039     pFuncError
   5040     return(0);
   5041   }
   5042 
   5043   return(1);
   5044 }
   5045 
   5046 /**
   5047  * append string to filePath
   5048  *
   5049  * \param
   5050  *   filePath path to file
   5051  *   string
   5052  * \return
   5053  *   true success
   5054  *   false failed, filePath or list are NULL
   5055  */
   5056 bool appendFileS(const char *filePath, const char *string) {
   5057   FILE *fp = NULL;
   5058   size_t len;
   5059   size_t writeStatus;
   5060 
   5061   // sanity checks
   5062   if (!filePath || isBlankS(filePath) || !string) {
   5063     return(false);
   5064   }
   5065 
   5066   len = strlen(string);
   5067 
   5068   fp = fopen(filePath, "a");
   5069   if (!fp) {
   5070     pFuncError
   5071     shEPrintfS("The path was: \"%s\"\n", filePath);
   5072     return(false);
   5073   }
   5074   writeStatus = fwrite(string, 1, len , fp);
   5075   fclose(fp);
   5076 
   5077   if (writeStatus != len) {
   5078     pFuncError
   5079     shEPrintfS("The path was: \"%s\"\n", filePath);
   5080     return(false);
   5081   }
   5082 
   5083   return(true);
   5084 }
   5085 
   5086 /**
   5087  * append buffer to file
   5088  *
   5089  * \param
   5090  *   filePath path to file
   5091  *   buffer
   5092  *   len      buffer size in bytes
   5093  * \return
   5094  *   true success
   5095  *   false error
   5096  */
   5097 bool appendFile(const char *filePath, void *buffer, size_t len) {
   5098   FILE *f = NULL;
   5099   size_t writeStatus;
   5100 
   5101   // sanity checks
   5102   if (!filePath || isBlankS(filePath) || !buffer) {
   5103     return(0);
   5104   }
   5105 
   5106   f = fopen(filePath, "a");
   5107   if (!f) {
   5108     pFuncError
   5109     shEPrintfS("The path was: \"%s\"\n", filePath);
   5110     return(0);
   5111   }
   5112   writeStatus = fwrite(buffer, 1, len , f);
   5113   fclose(f);
   5114 
   5115   if (writeStatus != len) {
   5116     pFuncError
   5117     shEPrintfS("The path was: \"%s\"\n", filePath);
   5118     return(0);
   5119   }
   5120 
   5121   return(1);
   5122 }
   5123 
   5124 /**
   5125  * list all files in a directory recursively
   5126  * and sort the list
   5127  *
   5128  * directories are not listed
   5129  *
   5130  * \param
   5131  *   dirPath: path to directory
   5132  * \return
   5133  *   list of files (you must free the pointer with listFreeS)
   5134  *   empty list when the directory is not found
   5135  */
   5136 char **walkDir(const char* dirPath) {
   5137   char **list = NULL;
   5138 
   5139   // sanity checks
   5140   if (!dirPath || isBlankS(dirPath)) {
   5141     return(NULL);
   5142   }
   5143 
   5144   walkADir(dirPath, &list);
   5145 
   5146   pErrorNULL(iListSortS(&list));
   5147 
   5148   return(list);
   5149 }
   5150 
   5151 internal void walkADir(const char *dirPath, char ***list) {
   5152   DIR *d = NULL;
   5153   struct dirent *dp = NULL;
   5154   char *sPath = NULL;
   5155 
   5156   d = opendir(dirPath);
   5157   if (!d) {
   5158     pFuncError
   5159     shEPrintfS("The path was: \"%s\"\n", dirPath);
   5160     return;
   5161   }
   5162 
   5163   dp = readdir(d);
   5164   while (dp) {
   5165     if (eqS(dp->d_name, ".") || eqS(dp->d_name, "..")) {
   5166       dp = readdir(d);
   5167       continue;
   5168     }
   5169 
   5170     sPath = catS(dirPath, "/", dp->d_name);
   5171 
   5172     if (isDir(sPath)) {
   5173       if (!isLink(sPath)) {
   5174         walkADir(sPath, list);
   5175     }
   5176       }
   5177     else {
   5178       pErrorNULL(listPushS(list, sPath));
   5179     }
   5180     free(sPath);
   5181     dp = readdir(d);
   5182   }
   5183 
   5184   closedir(d);
   5185 }
   5186 
   5187 /**
   5188  * list all directories in a directory recursively
   5189  * and sort the list
   5190  *
   5191  * files are not listed
   5192  *
   5193  * \param
   5194  *   dirPath: path to directory
   5195  * \return
   5196  *   list of directories (you must free the pointer with listFreeS)
   5197  *   empty list when the directory is not found
   5198  */
   5199 char **walkDirDir(const char* dirPath) {
   5200   char **list = NULL;
   5201 
   5202   // sanity checks
   5203   if (!dirPath || isBlankS(dirPath)) {
   5204     return(NULL);
   5205   }
   5206 
   5207   walkADirDir(dirPath, &list);
   5208 
   5209   pErrorNULL(iListSortS(&list));
   5210 
   5211   return(list);
   5212 }
   5213 
   5214 internal void walkADirDir(const char *dirPath, char ***list) {
   5215   DIR *d = NULL;
   5216   struct dirent *dp = NULL;
   5217   char *sPath = NULL;
   5218 
   5219   d = opendir(dirPath);
   5220   if (!d) {
   5221     pFuncError
   5222     shEPrintfS("The path was: \"%s\"\n", dirPath);
   5223     return;
   5224   }
   5225 
   5226   dp = readdir(d);
   5227   while (dp) {
   5228     if (eqS(dp->d_name, ".") || eqS(dp->d_name, "..")) {
   5229       dp = readdir(d);
   5230       continue;
   5231     }
   5232 
   5233     sPath = catS(dirPath, "/", dp->d_name);
   5234 
   5235     if (isDir(sPath)) {
   5236       pErrorNULL(listPushS(list, sPath));
   5237       if (!isLink(sPath)) {
   5238         walkADirDir(sPath, list);
   5239     }
   5240       }
   5241     free(sPath);
   5242     dp = readdir(d);
   5243   }
   5244 
   5245   closedir(d);
   5246 }
   5247 
   5248 /**
   5249  * list files in a directory
   5250  * and sort the list
   5251  *
   5252  * directories are not listed
   5253  *
   5254  * \param
   5255  *   dirPath: path to directory
   5256  * \return
   5257  *   list of files, dirPath is not prepended to the file names (you must free the pointer with listFreeS)
   5258  *   empty list when the directory is not found
   5259  */
   5260 char **readDir(const char *dirPath) {
   5261   char **list = NULL;
   5262   DIR *d = NULL;
   5263   struct dirent *dp = NULL;
   5264 
   5265   // sanity checks
   5266   if (!dirPath || isBlankS(dirPath)) {
   5267     return(NULL);
   5268   }
   5269 
   5270   d = opendir(dirPath);
   5271   if (!d) {
   5272     pFuncError
   5273     shEPrintfS("The path was: \"%s\"\n", dirPath);
   5274     return(NULL);
   5275   }
   5276 
   5277   dp = readdir(d);
   5278   while (dp) {
   5279     if (eqS(dp->d_name, ".") || eqS(dp->d_name, "..")) {
   5280       dp = readdir(d);
   5281       continue;
   5282     }
   5283 
   5284     char *sPath = catS(dirPath, "/", dp->d_name);
   5285 
   5286     if (!isDir(sPath)) {
   5287       pErrorNULL(listPushS(&list, dp->d_name));
   5288     }
   5289     free(sPath);
   5290     dp = readdir(d);
   5291   }
   5292 
   5293   closedir(d);
   5294 
   5295   pErrorNULL(iListSortS(&list));
   5296 
   5297   return(list);
   5298 }
   5299 
   5300 /**
   5301  * list directories in a directory
   5302  * and sort the list
   5303  *
   5304  * files are not listed
   5305  *
   5306  * \param
   5307  *   dirPath: path to directory
   5308  * \return
   5309  *   list of directories, dirPath is not prepended to the names (you must free the pointer with listFreeS)
   5310  *   empty list when the directory is not found
   5311  */
   5312 char **readDirDir(const char *dirPath) {
   5313   char **list = NULL;
   5314   DIR *d = NULL;
   5315   struct dirent *dp = NULL;
   5316 
   5317   // sanity checks
   5318   if (!dirPath || isBlankS(dirPath)) {
   5319     return(NULL);
   5320   }
   5321 
   5322   d = opendir(dirPath);
   5323   if (!d) {
   5324     pFuncError
   5325     shEPrintfS("The path was: \"%s\"\n", dirPath);
   5326     return(NULL);
   5327   }
   5328 
   5329   dp = readdir(d);
   5330   while (dp) {
   5331     if (eqS(dp->d_name, ".") || eqS(dp->d_name, "..")) {
   5332       dp = readdir(d);
   5333       continue;
   5334     }
   5335 
   5336     char *sPath = catS(dirPath, "/", dp->d_name);
   5337 
   5338     if (isDir(sPath)) {
   5339       pErrorNULL(listPushS(&list, dp->d_name));
   5340     }
   5341     free(sPath);
   5342     dp = readdir(d);
   5343   }
   5344 
   5345   closedir(d);
   5346 
   5347   pErrorNULL(iListSortS(&list));
   5348 
   5349   return(list);
   5350 }
   5351 
   5352 /**
   5353  * list all files and directories in a directory recursively
   5354  * and sort the list
   5355  *
   5356  * directories are listed
   5357  *
   5358  * \param
   5359  *   dirPath: path to directory
   5360  * \return
   5361  *   list of files (you must free the pointer with listFreeS)
   5362  *   empty list when the directory is not found
   5363  */
   5364 char **walkDirAll(const char* dirPath) {
   5365   char **list = NULL;
   5366 
   5367   // sanity checks
   5368   if (!dirPath || isBlankS(dirPath)) {
   5369     return(NULL);
   5370   }
   5371 
   5372   walkADirAll(dirPath, &list);
   5373 
   5374   pErrorNULL(iListSortS(&list));
   5375 
   5376   return(list);
   5377 }
   5378 
   5379 internal void walkADirAll(const char *dirPath, char ***list) {
   5380   DIR *d = NULL;
   5381   struct dirent *dp = NULL;
   5382   char *sPath = NULL;
   5383 
   5384   d = opendir(dirPath);
   5385   if (!d) {
   5386     pFuncError
   5387     shEPrintfS("The path was: \"%s\"\n", dirPath);
   5388     return;
   5389   }
   5390 
   5391   dp = readdir(d);
   5392   while (dp) {
   5393     if (eqS(dp->d_name, ".") || eqS(dp->d_name, "..")) {
   5394       dp = readdir(d);
   5395       continue;
   5396     }
   5397 
   5398     sPath = catS(dirPath, "/", dp->d_name);
   5399 
   5400     pErrorNULL(iListPushS(list, sPath));
   5401 
   5402     if (isDir(sPath)) {
   5403       if (!isLink(sPath)) {
   5404         walkADirAll(sPath, list);
   5405     }
   5406       }
   5407     dp = readdir(d);
   5408   }
   5409 
   5410   closedir(d);
   5411 }
   5412 
   5413 /**
   5414  * list files in a directory
   5415  * and sort the list
   5416  *
   5417  * directories are listed
   5418  *
   5419  * \param
   5420  *   dirPath: path to directory
   5421  * \return
   5422  *   list of files, dirPath is not prepended to the file names (you must free the pointer with listFreeS)
   5423  *   empty list when the directory is not found
   5424  */
   5425 char **readDirAll(const char *dirPath) {
   5426   char **list = NULL;
   5427   DIR *d = NULL;
   5428   struct dirent *dp = NULL;
   5429 
   5430   // sanity checks
   5431   if (!dirPath || isBlankS(dirPath)) {
   5432     return(NULL);
   5433   }
   5434 
   5435   d = opendir(dirPath);
   5436   if (!d) {
   5437     pFuncError
   5438     shEPrintfS("The path was: \"%s\"\n", dirPath);
   5439     return(NULL);
   5440   }
   5441 
   5442   dp = readdir(d);
   5443   while (dp) {
   5444     if (eqS(dp->d_name, ".") || eqS(dp->d_name, "..")) {
   5445       dp = readdir(d);
   5446       continue;
   5447     }
   5448 
   5449     char *sPath = catS(dirPath, "/", dp->d_name);
   5450 
   5451     pErrorNULL(listPushS(&list, dp->d_name));
   5452     free(sPath);
   5453     dp = readdir(d);
   5454   }
   5455 
   5456   closedir(d);
   5457 
   5458   pErrorNULL(iListSortS(&list));
   5459 
   5460   return(list);
   5461 }
   5462 
   5463 /**
   5464  * get umask
   5465  */
   5466 mode_t getUmask(void) {
   5467 
   5468   mode_t mask = umask(0);
   5469   umask(mask);
   5470   return(mask);
   5471 }
   5472 
   5473 /**
   5474  * get current permissions for creating directories
   5475  */
   5476 mode_t getCurrentPermissions(void) {
   5477 
   5478   return(0777 & ~getUmask());
   5479 }
   5480 
   5481 /**
   5482  * recursive mkdir
   5483  *
   5484  * \param
   5485  *   path
   5486  * \return
   5487  *   1 success
   5488  *   0 when path is NULL or empty
   5489  */
   5490 int mkdirParents(const char* path) {
   5491   char tmp[8192];
   5492   char *p = NULL;
   5493   size_t len;
   5494 
   5495   // sanity checks
   5496   if (!path || isBlankS(path)) {
   5497     return(0);
   5498   }
   5499 
   5500   snprintf(tmp, sizeof(tmp),"%s", path);
   5501 
   5502   len = strlen(tmp);;
   5503 
   5504   mode_t mode = getCurrentPermissions();
   5505 
   5506   if (tmp[len - 1] == '/') {
   5507           tmp[len - 1] = 0;
   5508   }
   5509   for (p = tmp + 1; *p; p++) {
   5510     if (*p == '/') {
   5511       *p = 0;
   5512       if (mkdir(tmp, mode) == -1) {
   5513         if (errno != EEXIST) {
   5514           pFuncError
   5515           shEPrintfS("The path was: \"%s\"\n", tmp);
   5516           return(0);
   5517       }
   5518         }
   5519       *p = '/';
   5520   }
   5521     }
   5522 
   5523   if (mkdir(tmp, mode) == -1) {
   5524     if (errno != EEXIST) {
   5525       pFuncError
   5526       shEPrintfS("The path was: \"%s\"\n", tmp);
   5527       return(0);
   5528   }
   5529     }
   5530   return(1);
   5531 }
   5532 
   5533 /**
   5534  * remove all
   5535  * delete recursively files and directories
   5536  *
   5537  * \param
   5538  *   path
   5539  * \return
   5540  *   1 success
   5541  *   0 when path is NULL or empty
   5542  */
   5543 int rmAll(const char* path) {
   5544 
   5545   // sanity checks
   5546   if (!path || isBlankS(path)) {
   5547     return(0);
   5548   }
   5549 
   5550   if (!isDir(path)) {
   5551     int r;
   5552     pErrorResultCmd(r, remove(path), == -1, pFuncError; shEPrintfS("The path was: \"%s\"\n", path));
   5553     return(r+1);
   5554   }
   5555   else {
   5556     return(rmADir(path));
   5557 }
   5558   }
   5559 
   5560 int rmADir(const char *dirPath) {
   5561   DIR *d = NULL;
   5562   struct dirent *dp = NULL;
   5563   char *sPath = NULL;
   5564   int r = 1;;
   5565 
   5566   d = opendir(dirPath);
   5567   if (!d) {
   5568     pFuncError
   5569     shEPrintfS("The path was: \"%s\"\n", dirPath);
   5570     return(0);
   5571   }
   5572 
   5573   dp = readdir(d);
   5574   while (dp) {
   5575     if (eqS(dp->d_name, ".") || eqS(dp->d_name, "..")) {
   5576       dp = readdir(d);
   5577       continue;
   5578     }
   5579 
   5580     int e = asprintf(&sPath, "%s/%s", dirPath, dp->d_name);
   5581     if (e == -1) {
   5582       pFuncError;
   5583       shEPrintfS("The path was: \"%s\"\n", dirPath);
   5584       closedir(d);
   5585       return(0);
   5586     }
   5587 
   5588 
   5589     if (isDir(sPath)) {
   5590       r = rmADir(sPath);;
   5591     }
   5592     else {
   5593       pErrorResultCmd(r, remove(sPath), == -1, pFuncError; shEPrintfS("The path was: \"%s\"\n", sPath); r=0; free(sPath); break);
   5594       r = 1;
   5595     }
   5596     dp = readdir(d);
   5597     free(sPath);
   5598   }
   5599 
   5600   closedir(d);
   5601 
   5602   int rd;
   5603   pErrorResultCmd(rd, rmdir(dirPath), == -1, pFuncError; shEPrintfS("The path was: \"%s\"\n", dirPath); return(0));;
   5604   return(r);
   5605 }
   5606 
   5607 
   5608 /**
   5609  * copy files recursively
   5610  * This function is equivalent to 'cp -Ra' without wildcards and circular link detection
   5611  *
   5612  * when src ends with /, the files in src are copied to dst
   5613  * when src does't end with /, the last directory name in src is copied to dst
   5614  * The permissions are copied to the destination
   5615  *
   5616  * \param
   5617  *   src source path
   5618  *   dst destination path
   5619  * \return
   5620  *   1 success
   5621  *   0 when src or dst are NULL or empty
   5622  */
   5623 int copy(const char* src, const char* dst) {
   5624 
   5625   // sanity checks
   5626   if (!src || !dst || isBlankS(src) || isBlankS(dst)) {
   5627     return(0);
   5628   }
   5629 
   5630   if (!fileExists(src)) {
   5631     return(0);
   5632   }
   5633 
   5634   if (!isDir(src)) {
   5635     // copy file
   5636     if (getS(dst, -1) == '/') {
   5637       // dst name is a directory, add src basename to dst
   5638       char *csrc  = strdup(src);
   5639       char *path  = basename(csrc);
   5640       char *dPath = alloca(strlen(dst) + 1 + strlen(path) + 1);
   5641       sprintf(dPath, "%s/%s", dst, path);
   5642       free(csrc);
   5643       return(copyFile(src, dPath));
   5644     }
   5645     else {
   5646       return(copyFile(src, dst));
   5647   }
   5648     }
   5649   else {
   5650     if (getS(src, -1) == '/') {
   5651       if (!isDir(dst)) {
   5652         // create dst dir when it doesn't exists
   5653         if (!mkdirParents(dst)) {
   5654           if (errno != EEXIST) {
   5655             shEPrintfS("copy: mkdir destination error, path: %s\n", dst);
   5656             return(0);
   5657       }
   5658         }
   5659           }
   5660       return(copyADir(src, dst, ""));
   5661     }
   5662     else {
   5663       char *csrc  = strdup(src);
   5664       char *path  = basename(csrc);
   5665       char *dPath = alloca(strlen(dst) + 1 + strlen(path) + 1);
   5666       sprintf(dPath, "%s/%s", dst, path);
   5667       free(csrc);
   5668 
   5669       if (!mkdirParents(dPath)) {
   5670         if (errno != EEXIST) {
   5671           shEPrintfS("copy: mkdir destination error, path: %s\n", dPath);
   5672           return(0);
   5673       }
   5674         }
   5675 
   5676       int r = copyADir(src, dPath, "");
   5677 
   5678       // copy permissions
   5679       struct stat st;
   5680       if (stat(src, &st)) {
   5681         pFuncError
   5682         shEPrintfS("The path was: \"%s\"\n", src);
   5683         return(0);
   5684       }
   5685       if (chmod(dPath, st.st_mode & 07777)) {
   5686         pFuncError
   5687         shEPrintfS("The path was: \"%s\"\n", dPath);
   5688         return(0);
   5689       }
   5690       return(r);
   5691 }
   5692   }
   5693     }
   5694 
   5695 int copyFile(const char* src, const char* dst) {
   5696   FILE *fsrc = NULL;
   5697   FILE *fdst = NULL;
   5698   char buf[8192];
   5699 
   5700   fsrc = fopen(src, "r");
   5701   pTestErrorCmd(fsrc == NULL, shEPrintfS("The source file was: %s\n", src); return(0));;
   5702 
   5703   fdst = fopen(dst, "w");
   5704   pTestErrorCmd(fdst == NULL, shEPrintfS("The destination file was: %s\n", dst); fclose(fsrc); return(0));;
   5705 
   5706   while (1) {
   5707       size_t readStatus = fread(buf, 1, sizeof(buf), fsrc);
   5708 
   5709       if (!readStatus) {
   5710          break;
   5711       }
   5712 
   5713       size_t writeStatus = fwrite(buf, 1, readStatus, fdst);
   5714       if (writeStatus != readStatus) {
   5715         shPrintError
   5716         shEPrintfS("The path was: \"%s\"\n", dst);
   5717         fclose(fsrc);
   5718         fclose(fdst);
   5719         return(0);
   5720   }
   5721       }
   5722 
   5723   // copy permissions
   5724   struct stat st;
   5725   if (stat(src, &st)) {
   5726     pFuncError
   5727     shEPrintfS("The path was: \"%s\"\n", src);
   5728     fclose(fsrc);
   5729     fclose(fdst);
   5730     return(0);
   5731   }
   5732   if (chmod(dst, st.st_mode & 07777)) {
   5733     pFuncError
   5734     shEPrintfS("The path was: \"%s\"\n", dst);
   5735     fclose(fsrc);
   5736     fclose(fdst);
   5737     return(0);
   5738   }
   5739 
   5740   fclose(fsrc);
   5741   fclose(fdst);
   5742   return(1);
   5743 }
   5744 
   5745 int copyADir(const char *src, const char *dst, const char *path) {
   5746   DIR *d = NULL;
   5747   struct dirent *dp = NULL;
   5748   char *sPath = NULL;
   5749   char *dPath = NULL;
   5750   char *currentPath = NULL;
   5751   int r = 1;;
   5752   char *currentSrc = NULL;
   5753   char *currentDst = NULL;
   5754 
   5755   asprintf(&currentSrc, "%s/%s", src, path);
   5756   asprintf(&currentDst, "%s/%s", dst, path);
   5757 
   5758   d = opendir(currentSrc);
   5759   if (!d) {
   5760     pFuncError
   5761     shEPrintfS("The path was: \"%s\"\n", currentSrc);
   5762     free(currentSrc);
   5763     free(currentDst);
   5764     return(0);
   5765   }
   5766 
   5767   dp = readdir(d);
   5768   while (dp) {
   5769     if (eqS(dp->d_name, ".") || eqS(dp->d_name, "..")) {
   5770       dp = readdir(d);
   5771       continue;
   5772     }
   5773 
   5774     asprintf(&sPath, "%s/%s", currentSrc, dp->d_name);
   5775     asprintf(&dPath, "%s/%s", currentDst, dp->d_name);
   5776 
   5777     if (isDir(sPath)) {
   5778       if (isLink(sPath)) {
   5779         dp = readdir(d);
   5780         free(sPath);
   5781         free(dPath);
   5782         continue;
   5783       }
   5784       mode_t mode = getCurrentPermissions();
   5785       if (mkdir(dPath, mode) == -1) {
   5786         if (errno != EEXIST) {
   5787           pFuncError
   5788           shEPrintfS("The path was: \"%s\"\n", dPath);
   5789           r = 0;
   5790           free(sPath);
   5791         }
   5792          free(dPath);
   5793           break;
   5794       }
   5795       asprintf(&currentPath, "%s/%s", path, dp->d_name);
   5796       r = copyADir(src, dst, currentPath);;
   5797       free(currentPath);
   5798       // copy permissions
   5799       struct stat st;
   5800       if (stat(sPath, &st)) {
   5801         pFuncError
   5802         shEPrintfS("The path was: \"%s\"\n", sPath);
   5803         r = 0;
   5804         free(sPath);
   5805         free(dPath);
   5806         break;
   5807       }
   5808       if (chmod(dPath, st.st_mode & 07777)) {
   5809         pFuncError
   5810         shEPrintfS("The path was: \"%s\"\n", dPath);
   5811         r = 0;
   5812         free(sPath);
   5813         free(dPath);
   5814         break;
   5815     }
   5816       }
   5817     else {
   5818       pErrorResultCmd(r, copyFile(sPath, dPath), == 0, pFuncError; shEPrintfS("The path was: \"%s\"\n", sPath); free(sPath); free(dPath); break);
   5819     }
   5820     dp = readdir(d);
   5821     free(sPath);
   5822     free(dPath);
   5823   }
   5824 
   5825   closedir(d);
   5826   free(currentSrc);
   5827   free(currentDst);
   5828   return(r);
   5829 }
   5830 
   5831 /**
   5832  * rename file
   5833  *
   5834  * \param
   5835  *   src source path
   5836  *   dst destination path
   5837  * \return
   5838  *   1 success
   5839  *   0 when src or dst are NULL or empty
   5840  */
   5841 int shRename(const char* src, const char* dst) {
   5842 
   5843   // sanity checks
   5844   if (!src || !dst || isBlankS(src) || isBlankS(dst)) {
   5845     return(0);
   5846   }
   5847 
   5848   if (!fileExists(src)) {
   5849     return(0);
   5850   }
   5851 
   5852   int r = rename(src, dst);;
   5853   if (r) {
   5854     pFuncError
   5855     shEPrintfS("The source path was: \"%s\"\n", src);
   5856     shEPrintfS("The destination path was: \"%s\"\n", src);
   5857     return(0);
   5858   }
   5859   return(1);
   5860 }
   5861 
   5862 
   5863 /**
   5864  * move files recursively
   5865  *
   5866  * copy and then delete source
   5867  *
   5868  * called shMove because it conflicts with move in ncurses
   5869  *
   5870  * \param
   5871  *   src source path
   5872  * \param
   5873  *   dst destination path
   5874  * \return
   5875  *   1 success
   5876  *   0 when src or dst are NULL or empty
   5877  */
   5878 int shMove(const char* src, const char* dst) {
   5879 
   5880   int r = copy(src, dst);;
   5881   if (!r) {
   5882     return(r);
   5883   }
   5884 
   5885   r = rmAll(src);;
   5886   return(r);
   5887 }
   5888 
   5889 // internal file pointer to /dev/urandom
   5890 // used in the random functions
   5891 static FILE *urandomFp = NULL;
   5892 
   5893 // selected random function
   5894 typedef uint64_t (*randomWordFt)(void);
   5895 static randomWordFt randomWordF = randomWord;
   5896 
   5897 /**
   5898  * use software random numbers
   5899  * works on all cpu architectures
   5900  * the default random function is software
   5901  */
   5902 void setSoftwareRandom(void) {
   5903 
   5904   randomWordF = randomWord;
   5905   pError0(randomUrandomOpen());
   5906 }
   5907 
   5908 /**
   5909  * use cpu hardware random number generator
   5910  */
   5911 void setHardwareRandom(void) {
   5912 
   5913   #ifdef __GNUC__
   5914   randomWordF = randomWordFromHW;
   5915   #endif
   5916 }
   5917 
   5918 /**
   5919  * open /dev/urandom in libsheepy
   5920  *
   5921  * call this function before calling randomWord and randomChoice
   5922  * when random are not needed anymore call randomUrandomClose
   5923  *
   5924  * \return
   5925  *   1 success
   5926  *   0 error
   5927 */
   5928 int randomUrandomOpen(void) {
   5929 
   5930   // TODO close random file at exit, dont close in random functions
   5931   // to be able to open several times, like hashtableInit
   5932   if (urandomFp) {
   5933     return(1);
   5934   }
   5935   urandomFp = fopen("/dev/urandom", "r");
   5936   if (!urandomFp) {
   5937     return(0);
   5938   }
   5939   else {
   5940     return(1);
   5941 }
   5942   }
   5943 
   5944 
   5945 /**
   5946  * close /dev/urandom in libsheepy
   5947  * call this function when random are not needed anymore
   5948  */
   5949 void randomUrandomClose(void) {
   5950 
   5951   if (urandomFp) {
   5952     fclose(urandomFp);
   5953     urandomFp = NULL;
   5954 }
   5955   }
   5956 
   5957 
   5958 /**
   5959  * return random 64 bit unsigned integer
   5960  * call randomUrandomOpen before this calling function
   5961  *
   5962  * \return
   5963  *   random uint64 integer
   5964  *   0 error urandomFp file is NULL or fread failed
   5965  */
   5966 uint64_t randomWord(void) {
   5967   uint64_t r;
   5968   size_t readStatus;
   5969 
   5970   if (!urandomFp) {
   5971     return(0);
   5972   }
   5973 
   5974   readStatus = fread(&r, sizeof(r), 1 , urandomFp);
   5975 
   5976   if (readStatus != 1) {
   5977     pFuncError
   5978     return(0);
   5979   }
   5980   if (r == 0) {
   5981     // -1 is not a valid return value, it signals errors
   5982     r++;
   5983   }
   5984   return(r);
   5985 }
   5986 
   5987 /**
   5988  * return random 64 bit unsigned integer from the cpu
   5989  * when the cpu doesn't have the random generator instruction, the program
   5990  * stops with 'Illegal instruction'
   5991  */
   5992 uint64_t randomWordFromHW(void) {
   5993   unsigned long long r;
   5994 
   5995   #ifdef __GNUC__
   5996   #if (!defined(__arm__) && !defined(__aarch64__) && !defined(__riscv) && !defined(__i386__))
   5997   // TODO valgrind doesn't support the rdrand instruction 171117
   5998   #ifndef unitTest
   5999   _rdrand64_step(&r);
   6000   #else
   6001   r = 'a';;
   6002   // unitTest
   6003   #endif
   6004   #else
   6005   logE("HW Random generator not available on the ARM platform");
   6006   return(0);
   6007   // __arm__ || __aarch64__ || __riscv || __i386__
   6008   #endif
   6009   // __GNUC__
   6010   #endif
   6011   return((uint64_t)r);
   6012 }
   6013 
   6014 /**
   6015  * return a random value between 0 and range 0<=value<range
   6016  * call randomUrandomOpen before this calling function
   6017  *
   6018  * \param
   6019  *   range - must be > 0
   6020  * \return
   6021  *   random uint64 0<=value<range
   6022  *   range error
   6023  */
   6024 uint64_t randomChoice(uint64_t range) {
   6025   uint64_t r;
   6026 
   6027   if (range == 0) {
   6028     // range 0 is invalid
   6029     return(range);
   6030   }
   6031   r = randomWordF();
   6032   if (r == 0) {
   6033     return(range);
   6034   }
   6035   else {
   6036     return(randomWordF() % range);
   6037 }
   6038   }
   6039 
   6040 // TODO create random string function that takes charset as parameter
   6041 /**
   6042  * random string
   6043  *
   6044  * allocate and generate a random string in charset "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-,"
   6045  *
   6046  *
   6047  * \param
   6048  *   string length
   6049  * \return
   6050  *   random string (you must free the pointer)
   6051  *   NULL error opening /dev/urandom, malloc failed, fread /dev/urandom failed, length is 0
   6052  */
   6053 char *randomS(uint64_t length) {
   6054   char charset[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-,";;
   6055   char *r = NULL;
   6056   char *workingP = NULL;
   6057   int rOpen;
   6058 
   6059   // sanity checks
   6060   if (length == 0) {
   6061     return(NULL);
   6062   }
   6063 
   6064   // open /dev/urandom
   6065   if (randomWordF == randomWord) {
   6066     rOpen = randomUrandomOpen();;
   6067     if (!rOpen) {
   6068       return(NULL);
   6069   }
   6070     }
   6071 
   6072   // allocate result
   6073   // dont use MALLOC here, the test fails
   6074   r        = malloc(length+1);;
   6075   if (!r) {
   6076     return(NULL);
   6077   }
   6078 
   6079   workingP = r;
   6080 
   6081   // generate random values
   6082   while (length-- > 0) {
   6083     uint64_t rChoice;
   6084     size_t len = strlen(charset);
   6085 
   6086     rChoice = randomChoice(len);
   6087     if (rChoice == len) {
   6088       free(r);
   6089       return(NULL);
   6090     }
   6091 
   6092     *workingP++ = charset[rChoice];
   6093   }
   6094 
   6095   *workingP = '\0';
   6096 
   6097   return(r);
   6098 }
   6099 
   6100 /**
   6101  * buffer random string
   6102  *
   6103  * allocate and generate a random string in charset "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-,"
   6104  *
   6105  * \param
   6106  *   dst destination buffer
   6107  * \param
   6108  *   dstSize destination buffer size, must be at least 2, to have at least 1 random char in the string
   6109  * \return
   6110  *   random string
   6111  *   NULL error opening /dev/urandom, malloc failed, fread /dev/urandom failed, length is 0
   6112  */
   6113 char *bRandomS(char *dst, size_t dstSize) {
   6114   char charset[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-,";;
   6115   char *workingP = NULL;
   6116   int rOpen;
   6117 
   6118   // sanity checks
   6119   if (!dst || dstSize < 2) {
   6120     return(NULL);
   6121   }
   6122 
   6123   // open /dev/urandom
   6124   if (randomWordF == randomWord) {
   6125     rOpen = randomUrandomOpen();;
   6126     if (!rOpen) {
   6127       return(NULL);
   6128   }
   6129     }
   6130 
   6131   workingP = dst;
   6132   // keep space for NUL char at the end if the string
   6133   dstSize--;
   6134 
   6135   // generate random values
   6136   while (dstSize-- > 0) {
   6137     uint64_t rChoice;
   6138     size_t len = strlen(charset);
   6139 
   6140     rChoice = randomChoice(len);
   6141     if (rChoice == len) {
   6142       return(NULL);
   6143     }
   6144 
   6145     *workingP++ = charset[rChoice];
   6146   }
   6147 
   6148   *workingP = '\0';
   6149 
   6150   return(dst);
   6151 }
   6152 
   6153 /**
   6154  * random alpha numerical string
   6155  *
   6156  * allocate and generate a random string in charset "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
   6157  *
   6158  *
   6159  * \param
   6160  *   string length
   6161  * \return
   6162  *   random string (you must free the pointer)
   6163  *   NULL error opening /dev/urandom, malloc failed, fread /dev/urandom failed, length is 0
   6164  */
   6165 char *randomAlphaNumS(uint64_t length) {
   6166   char charset[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";;
   6167   char *r = NULL;
   6168   char *workingP = NULL;
   6169   int rOpen;
   6170 
   6171   // sanity checks
   6172   if (length == 0) {
   6173     return(NULL);
   6174   }
   6175 
   6176   // open /dev/urandom
   6177   if (randomWordF == randomWord) {
   6178     rOpen = randomUrandomOpen();;
   6179     if (!rOpen) {
   6180       return(NULL);
   6181   }
   6182     }
   6183 
   6184   // allocate result
   6185   // dont use MALLOC here, the test fails
   6186   r        = malloc(length+1);;
   6187   if (!r) {
   6188     return(NULL);
   6189   }
   6190 
   6191   workingP = r;
   6192 
   6193   // generate random values
   6194   while (length-- > 0) {
   6195     uint64_t rChoice;
   6196     size_t len = strlen(charset);
   6197 
   6198     rChoice = randomChoice(len);
   6199     if (rChoice == len) {
   6200       free(r);
   6201       return(NULL);
   6202     }
   6203 
   6204     *workingP++ = charset[rChoice];
   6205   }
   6206 
   6207   *workingP = '\0';
   6208 
   6209   return(r);
   6210 }
   6211 
   6212 /**
   6213  * buffer random alpha numerical string
   6214  *
   6215  * allocate and generate a random string in charset "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
   6216  *
   6217  * \param
   6218  *   dst destination buffer
   6219  * \param
   6220  *   dstSize destination buffer size, must be at least 2, to have at least 1 random char in the string
   6221  * \return
   6222  *   random string
   6223  *   NULL error opening /dev/urandom, malloc failed, fread /dev/urandom failed, length is 0
   6224  */
   6225 char *bRandomAlphaNumS(char *dst, size_t dstSize) {
   6226   char charset[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";;
   6227   char *workingP = NULL;
   6228   int rOpen;
   6229 
   6230   // sanity checks
   6231   if (!dst || dstSize < 2) {
   6232     return(NULL);
   6233   }
   6234 
   6235   // open /dev/urandom
   6236   if (randomWordF == randomWord) {
   6237     rOpen = randomUrandomOpen();;
   6238     if (!rOpen) {
   6239       return(NULL);
   6240   }
   6241     }
   6242 
   6243   workingP = dst;
   6244   // keep space for NUL char at the end if the string
   6245   dstSize--;
   6246 
   6247   // generate random values
   6248   while (dstSize-- > 0) {
   6249     uint64_t rChoice;
   6250     size_t len = strlen(charset);
   6251 
   6252     rChoice = randomChoice(len);
   6253     if (rChoice == len) {
   6254       return(NULL);
   6255     }
   6256 
   6257     *workingP++ = charset[rChoice];
   6258   }
   6259 
   6260   *workingP = '\0';
   6261 
   6262   return(dst);
   6263 }
   6264 
   6265 #define startMax   20
   6266 
   6267 /**
   6268  * read String
   6269  * read user input (one line) as a string
   6270  *
   6271  * there is no size limit and the buffer expands as needed
   6272  *
   6273  * \return
   6274  *   line from the user (you must free the pointer)
   6275  *   NULL when buffer allocation failed
   6276  */
   6277 char *readS(void) {
   6278   int max = startMax;;
   6279 
   6280   char *s = MALLOC((size_t)max);
   6281   if (!s) {
   6282     return(NULL);
   6283   }
   6284 
   6285   int i = 0;
   6286   while (1) {
   6287     #ifndef unitTest
   6288     int c = getchar();
   6289     #else
   6290     int c;
   6291     if (i < startMax) {
   6292       c = 'a';
   6293     }
   6294     else {
   6295       c = '\n';
   6296     }
   6297     #endif
   6298     if (c == '\n') {
   6299       s[i] = 0;
   6300       break;
   6301     }
   6302     s[i] = (char)c;
   6303     if (i == max-1) {
   6304       // buffer full
   6305       max += max;
   6306       char *tmp = REALLOC(s, (size_t)max);
   6307       if (!tmp) {
   6308         free(s);
   6309         return(NULL);
   6310       }
   6311       s = tmp;
   6312     }
   6313     i++;
   6314   }
   6315   return(s);
   6316 }
   6317 
   6318 /**
   6319  * buffer read String
   6320  * read user input (one line) as a string
   6321  *
   6322  * \param
   6323  *   dst destination buffer
   6324  * \param
   6325  *   dstSize destination buffer size, must be at least 2, to have at least 1 char from the user in the string
   6326  * \return
   6327  *   line from the user
   6328  *   NULL when buffer allocation failed
   6329  */
   6330 char *bLReadS(char *dst, size_t dstSize) {
   6331   size_t i = 0;;
   6332 
   6333   if (!dst || dstSize < 2) {
   6334     return(NULL);
   6335   }
   6336 
   6337   while (1) {
   6338     #ifndef unitTest
   6339     int c = getchar();
   6340     #else
   6341     int c;
   6342     if (i < dstSize-1) {
   6343       c = 'a';
   6344     }
   6345     else {
   6346       c = '\n';
   6347     }
   6348     #endif
   6349     if (c == '\n' || i == dstSize-1) {
   6350       dst[i] = 0;
   6351       break;
   6352     }
   6353     dst[i] = (char)c;
   6354     i++;
   6355   }
   6356   return(dst);
   6357 }
   6358 
   6359 /**
   6360  * sheepy get pass
   6361  *
   6362  * like getpass, read password from tty
   6363  *
   6364  * currently used in Termux because getpass is missging
   6365  */
   6366 UNUSED local char *shGetpass(void) {
   6367   char *r = NULL;
   6368 
   6369   #ifndef unitTest
   6370   struct termios old;
   6371   struct termios new;
   6372 
   6373   // inspired by https://www.gnu.org/software/libc/manual/html_node/getpass.html
   6374   FILE *stream = fopen("/dev/tty", "w+ce");
   6375   if (!stream) {
   6376     return(NULL);
   6377   }
   6378 
   6379   /* Turn echoing off and fail if we can’t. */
   6380   if (tcgetattr (fileno (stream), &old) != 0) {
   6381     fclose(stream);
   6382     return(NULL);
   6383   }
   6384   new = old;
   6385   new.c_lflag &= ~(tcflag_t)ECHO;
   6386   if (tcsetattr (fileno (stream), TCSAFLUSH, &new) != 0) {
   6387     fclose(stream);
   6388     return(NULL);
   6389   }
   6390 
   6391   /* Read the password. */
   6392   r = readS();;
   6393 
   6394   /* Restore terminal. */
   6395   (void) tcsetattr (fileno (stream), TCSAFLUSH, &old);
   6396   fclose(stream);
   6397   #else
   6398   r = strdup("*****");;
   6399   #endif
   6400 
   6401   return(r);
   6402 }
   6403 
   6404 /**
   6405  * read hidden password string
   6406  *
   6407  * \return
   6408  *   newly allocated password string (you must free the pointer)
   6409  */
   6410 char *readPasswordS(void) {
   6411 
   6412   #if (__TERMUX__ || __HAIKU__ || unitTest)
   6413   char *r = shGetpass();
   6414   #else
   6415   // TODO getpass is obsolete, see man for getpass
   6416   char *p = getpass("");
   6417   if (!p) {
   6418     return(NULL);
   6419   }
   6420   char *r = strdup(p);
   6421   memset(p, 0, strlen(p));
   6422   #endif
   6423   return(r);
   6424 }
   6425 
   6426 /**
   6427  * write zero to all bytes in string with memset, for clearing password buffers
   6428  *
   6429  * \param
   6430  *   string
   6431  * \return
   6432  *   true  0s are written
   6433  *   false error string is NULL
   6434  *
   6435  */
   6436 bool zeroS(char *string) {
   6437 
   6438   if (!string) {
   6439     return(false);
   6440   }
   6441 
   6442   memset(string, 0, strlen(string));
   6443   return(true);
   6444 }
   6445 
   6446 /**
   6447  * write zero to all bytes in buffer with memset
   6448  *
   6449  * \param
   6450  *   buf buffer
   6451  * \param
   6452  *   len length
   6453  * \return
   6454  *   true  0s are written
   6455  *   false error string is NULL
   6456  *
   6457  */
   6458 bool zeroBuf(void *buf, size_t len) {
   6459 
   6460   if (!buf || !len) {
   6461     return(false);
   6462   }
   6463 
   6464   memset(buf, 0, len);
   6465   return(true);
   6466 }
   6467 
   6468 /**
   6469  * memory duplicate
   6470  * allocate and copy buffer
   6471  *
   6472  * \param
   6473  * buf buffer to duplicate
   6474  * \param
   6475  * size buffer size
   6476  * \return
   6477  * duplicated buffer (you must free the pointer)
   6478  * NULL when there is an error
   6479  *
   6480  */
   6481 void *memdup(const void *buf, size_t size) {
   6482 
   6483   // sanity checks
   6484   if (!buf || !size) {
   6485     return(NULL);
   6486   }
   6487 
   6488   void* out = MALLOC(size);
   6489   if (out != NULL) {
   6490     memcpy(out, buf, size);
   6491   }
   6492 
   6493   return(out);
   6494 }
   6495 
   6496 
   6497 /**
   6498  * read Enter key
   6499  * wait until press the enter key
   6500  */
   6501 void readEnter(void) {
   6502 
   6503   while (1) {
   6504     #ifndef unitTest
   6505     int c = getchar();
   6506     #else
   6507     int c = '\n';
   6508     #endif
   6509     if (c == '\n') {
   6510       break;
   6511 }
   6512   }
   6513     }
   6514 
   6515 /**
   6516  * readLine from file stream
   6517  * the fist new line is converted to 0
   6518  *
   6519  * \param
   6520  *   fp: file stream
   6521  * \return
   6522  *   one line in a string (you must free the pointer)
   6523  *   empty string when stream is empty or when there is an error reading the stream
   6524  *   NULL when the stream is NULL
   6525  */
   6526 char *readLine(FILE *fp) {
   6527   size_t len;
   6528   char* line = NULL;
   6529   ssize_t read;
   6530 
   6531   // sanity checks
   6532   if (!fp) {
   6533     return(NULL);
   6534   }
   6535 
   6536   // read line
   6537   read = getline(&line, &len, (FILE *)fp);
   6538   if (read == -1) {
   6539     // there is whatever data in the line buffer, free
   6540     free(line);
   6541     return(strdup(""));
   6542   }
   6543   // convert new line char to 0
   6544   {
   6545     char* pos = NULL;
   6546     pos = strchr(line, '\n');
   6547     if (pos != NULL)
   6548       *pos = '\0';
   6549   }
   6550   return(line);
   6551 }
   6552 
   6553 /**
   6554  * free Many String
   6555  *
   6556  * free variable list of pointers
   6557  * freeManyS(s1, s2, ...);
   6558  */
   6559 void freeManySF(char *paramType, ...) {
   6560   va_list pl;
   6561 
   6562   // add arguments to a list
   6563   va_start(pl, paramType);
   6564   paramType = va_arg(pl, char *);
   6565   while (paramType) {
   6566     free(paramType);
   6567     paramType = va_arg(pl, char *);
   6568   }
   6569   va_end(pl);
   6570 }
   6571 
   6572 /**
   6573  * duplicate string
   6574  *
   6575  * \param
   6576  *   string
   6577  * \return
   6578  *   new identical string (you must free the pointer)
   6579  *   NULL when string is NULL
   6580  */
   6581 char *dupS(const char *string) {
   6582 
   6583   if (!string) {
   6584     return(NULL);
   6585   }
   6586   return(strdup(string));
   6587 }
   6588 
   6589 /**
   6590  * sheepy Print String
   6591  *
   6592  * same as printf
   6593  * when the formating string is NULL, "(null)" is printed
   6594  *
   6595  * \param
   6596  *   format string - can be NULL
   6597  *   data
   6598  */
   6599 void shPrintfS(const char *fmt, ...) {
   6600   va_list pl;
   6601 
   6602   if (!fmt) {
   6603     puts("(null)");
   6604     return;
   6605   }
   6606   va_start(pl, fmt);
   6607   vfprintf(stdout, fmt, pl);
   6608   va_end(pl);
   6609 }
   6610 
   6611 /**
   6612  * sheepy Error printf String
   6613  * print with logE
   6614  *
   6615  * when the formating string is NULL, "(null)" is printed
   6616  *
   6617  * \param
   6618  *   format string like printf
   6619  * \return
   6620  *   print with logE
   6621  */
   6622 void shEPrintfS(const char *fmt, ...) {
   6623   va_list pl;
   6624 
   6625   if (((libsheepyErrorMask) & logMask)) {
   6626     if (!fmt) {
   6627       logE("(null)\n");
   6628       return;
   6629     }
   6630     // print with logE
   6631     char *s = NULL;
   6632     va_start(pl, fmt);
   6633     vasprintf(&s, fmt, pl);
   6634     va_end(pl);
   6635     logE(s);
   6636     free(s);
   6637 }
   6638   }
   6639 
   6640 /**
   6641  * log and free
   6642  *
   6643  * \param
   6644  *   string to print, can be NULL
   6645  */
   6646 void logNFree(char *s) {
   6647 
   6648   if (s) {
   6649     puts(s);
   6650     free(s);
   6651 }
   6652   }
   6653 
   6654 /**
   6655  * print buffer as hexadecimal string
   6656  */
   6657 void loghex(const void *buf, size_t len) {
   6658   const uint8_t *b = NULL;
   6659 
   6660   if (!buf || !len) {
   6661     return;
   6662   }
   6663 
   6664   b = buf;
   6665   for (size_t i = 0; i < len-1; i++) {
   6666     printf("0x%02x ", b[i]);
   6667   }
   6668   printf("0x%02x", b[len-1]);
   6669 }
   6670 
   6671 /**
   6672  * create a string with bytes in buf converted to hex strings
   6673  *
   6674  * \param
   6675  *   buf buffer to convert to hexstring
   6676  * \param
   6677  *   len buffer size in bytes
   6678  * \return
   6679  *   string representing the buffer in hexadecimal "0x01, 0x02,..." (you must free the pointer)
   6680  */
   6681 char *toHexS(const void *buf, size_t len) {
   6682   const uint8_t *b = NULL;
   6683   char *r = NULL;
   6684 
   6685   if (!buf || !len) {
   6686     return(NULL);
   6687   }
   6688 
   6689   r = MALLOC(sizeof(char) * (6*len-2+1));;
   6690   if (!r) {
   6691     return(NULL);
   6692   }
   6693 
   6694   *r      = 0;
   6695   char *c = r;
   6696 
   6697   b = buf;
   6698   for (size_t i = 0; i < len-1; i++) {
   6699     sprintf(c, "0x%02x, ", b[i]);
   6700     c += 6;;
   6701   }
   6702   sprintf(c, "0x%02x", b[len-1]);
   6703 
   6704   return(r);
   6705 }
   6706 
   6707 /**
   6708  * create a string with bytes in buf converted to hex strings separated by separator
   6709  *
   6710  * \param
   6711  *   buf buffer to convert to hexstring
   6712  * \param
   6713  *   len buffer size in bytes
   6714  * \param
   6715  *   separator separator between the hexadecimal numbers
   6716  * \return
   6717  *   string representing the buffer in hexadecimal "0x01SEP0x02SEP..." (you must free the pointer)
   6718  */
   6719 char *toHexSepS(const void *buf, size_t len, const char *separator) {
   6720   const uint8_t *b = NULL;
   6721   char *r = NULL;
   6722 
   6723   if (!buf || !len || !separator) {
   6724     return(NULL);
   6725   }
   6726 
   6727   size_t sepLen = strlen(separator);;
   6728 
   6729   r = MALLOC(sizeof(char) * ((4+sepLen)*len-sepLen+1));;
   6730   if (!r) {
   6731     return(NULL);
   6732   }
   6733 
   6734   *r      = 0;
   6735   char *c = r;
   6736 
   6737   b = buf;
   6738   for (size_t i = 0; i < len-1; i++) {
   6739     sprintf(c, "0x%02x%s", b[i], separator);
   6740     c += 4+sepLen;;
   6741   }
   6742   sprintf(c, "0x%02x", b[len-1]);
   6743 
   6744   return(r);
   6745 }
   6746 
   6747 /**
   6748  * create a string with bytes in buf converted to hex strings separated by separator and with head string in front of earch byte: HEADffSEP
   6749  *
   6750  * \param
   6751  *   buf buffer to convert to hexstring
   6752  * \param
   6753  *   len buffer size in bytes
   6754  * \param
   6755  *   head separator before each hexadecimal numbers
   6756  * \param
   6757  *   separator separator after each hexadecimal numbers
   6758  * \return
   6759  *   string representing the buffer in hexadecimal "HEAD0x01SEPHEAD0x02SEP..." (you must free the pointer)
   6760  */
   6761 char *toHexHeadSepS(const void *buf, size_t len, const char *head, const char *separator) {
   6762   const uint8_t *b = NULL;
   6763   char *r = NULL;
   6764 
   6765   if (!buf || !len || !separator || !head) {
   6766     return(NULL);
   6767   }
   6768 
   6769   size_t headLen = strlen(head);;
   6770   size_t sepLen  = strlen(separator);;
   6771 
   6772   r = MALLOC(sizeof(char) * ((2+headLen+sepLen)*len-sepLen+1));;
   6773   if (!r) {
   6774     return(NULL);
   6775   }
   6776 
   6777   *r      = 0;
   6778   char *c = r;
   6779 
   6780   b = buf;
   6781   for (size_t i = 0; i < len-1; i++) {
   6782     sprintf(c, "%s%02x%s", head, b[i], separator);
   6783     c += 2+headLen+sepLen;;
   6784   }
   6785   sprintf(c, "%s%02x", head, b[len-1]);
   6786 
   6787   return(r);
   6788 }
   6789 
   6790 
   6791 /**
   6792  * strCpy - copy src to dst
   6793  *
   6794  * like strcpy with sanity checks
   6795  *
   6796  * \param
   6797  *   dst destination buffer
   6798  * \param
   6799  *   src source string
   6800  * \return
   6801  *   dst string
   6802  *   NULL error
   6803  */
   6804 char *strCpy(char *restrict dst, const char *restrict src) {
   6805 
   6806   if (!dst || !src) {
   6807     return(NULL);
   6808   }
   6809 
   6810   return(strcpy(dst, src));
   6811 }
   6812 
   6813 
   6814 /**
   6815  * strNCpy - copy src to dst
   6816  *
   6817  * null safe version of strncpy
   6818  *
   6819  * \param
   6820  *   dst destination buffer
   6821  * \param
   6822  *   src source string
   6823  * \param
   6824  *   srcSize source buffer size
   6825  * \return
   6826  *   dst string
   6827  *   NULL error
   6828  */
   6829 char *strNCpy(char *restrict dst, const char *restrict src, size_t srcSize) {
   6830 
   6831   if (!dst || !src) {
   6832     return(NULL);
   6833   }
   6834 
   6835   char *r = strncpy(dst, src, srcSize);;
   6836   return(r);
   6837 }
   6838 
   6839 
   6840 /**
   6841  * strLCpy - copy src to dst
   6842  *
   6843  * like strncpy and the NUL char is always added at the end of the string
   6844  *
   6845  * \param
   6846  *   dst destination buffer
   6847  * \param
   6848  *   dstSize destination buffer size, result string will be no longer than dstSize-1
   6849  * \param
   6850  *   src source string
   6851  * \return
   6852  *   dst string
   6853  *   NULL error
   6854  */
   6855 char *strLCpy(char *restrict dst, size_t dstSize, const char *restrict src) {
   6856 
   6857   if (!dst || !src) {
   6858     return(NULL);
   6859   }
   6860 
   6861   char *r = strncpy(dst, src, dstSize);;
   6862   if (dstSize) {
   6863     r[dstSize-1] = 0;
   6864   }
   6865   return(r);
   6866 }
   6867 
   6868 /**
   6869  * strCat - concatenate two strings
   6870  *
   6871  * like strcat with sanity checks
   6872  *
   6873  * \param
   6874  *   dst destination buffer
   6875  * \param
   6876  *   src source string
   6877  * \return
   6878  *   string with input strings concatenated
   6879  *   NULL error
   6880  */
   6881 char *strCat(char *restrict dst, const char *restrict src) {
   6882 
   6883   if (!dst || !src) {
   6884     return(NULL);
   6885   }
   6886 
   6887   return(strcat(dst, src));
   6888 }
   6889 
   6890 /**
   6891  * strNCat - concatenate two strings
   6892  *
   6893  * like strncat with sanity checks
   6894  *
   6895  * \param
   6896  *   dst destination buffer
   6897  * \param
   6898  *   src source string
   6899  * \param
   6900  *   srcLen max source len
   6901  * \return
   6902  *   string with input strings concatenated
   6903  *   NULL error
   6904  */
   6905 char *strNCat(char *restrict dst, const char *restrict src, size_t srcLen) {
   6906 
   6907   if (!dst || !src) {
   6908     return(NULL);
   6909   }
   6910 
   6911   return(strncat(dst, src, srcLen));
   6912 }
   6913 
   6914 /**
   6915  * strLCat - concatenate two strings
   6916  *
   6917  * like strlcat with sanity checks
   6918  *
   6919  * \param
   6920  *   dst destination buffer
   6921  * \param
   6922  *   src source string
   6923  * \param
   6924  *   dstSize destination buffer size, result string will be no longer than dstSize-1
   6925  * \return
   6926  *   string with input strings concatenated
   6927  *   NULL error
   6928  */
   6929 /* same/slower than the other implementation with -O2 and kaby lake */
   6930 char *strLCat(char *restrict dst, size_t dstSize, const char *restrict src) {
   6931 
   6932   if (!dst || !src) {
   6933     return(NULL);
   6934   }
   6935 
   6936   size_t dL     = strnlen(dst, dstSize);
   6937   size_t dstLen = dstSize-1;
   6938 
   6939   if (dL >= dstLen) {
   6940     // buffer is full
   6941     return(dst);
   6942   }
   6943 
   6944   size_t sL     = strlen(src);
   6945 
   6946   if (dL+sL > dstLen) {
   6947     // truncate
   6948     return(strncat(dst, src, dstLen - dL));
   6949   }
   6950   else {
   6951     return(strcat(dst, src));
   6952 }
   6953   }
   6954 
   6955 /* char *strLCat(char *dst, size_t dstSize, const char *src) */
   6956 /*  */
   6957 /*   if !dst || !src */
   6958 /*     return 0 */
   6959 /*  */
   6960 /*   const char *odst = dst */
   6961 /*   size_t n = dstSize */
   6962 /*   size_t dlen; */
   6963 /*  */
   6964 /*   #<{(| Find the end of dst and adjust bytes left but don't go past end. |)}># */
   6965 /*   while n-- != 0 && *dst != '\0' */
   6966 /*     dst++; */
   6967 /*   dlen = dst - odst */
   6968 /*   n    = dstSize - dlen */
   6969 /*  */
   6970 /*   if n-- = 0 */
   6971 /*     return dst */
   6972 /*   while *src != '\0' */
   6973 /*     if n != 0 */
   6974 /*       *dst++ = *src */
   6975 /*       n--; */
   6976 /*     src++; */
   6977 /*  */
   6978 /*   *dst = '\0'; */
   6979 /*  */
   6980 /*   return dst */
   6981 
   6982 /**
   6983  * strLNCat - concatenate two strings
   6984  *
   6985  * like strlcat with sanity checks
   6986  *
   6987  * \param
   6988  *   dst destination buffer
   6989  * \param
   6990  *   src source string
   6991  * \param
   6992  *   dstSize destination buffer size, result string will be no longer than dstSize-1
   6993  * \param
   6994  *   srcLen max source len
   6995  * \return
   6996  *   string with input strings concatenated
   6997  *   NULL error
   6998  */
   6999 char *strLNCat(char *restrict dst, size_t dstSize, const char *restrict src, size_t srcLen) {
   7000 
   7001   if (!dst || !src) {
   7002     return(NULL);
   7003   }
   7004 
   7005   size_t dL     = strnlen(dst, dstSize);
   7006   size_t dstLen = dstSize-1;
   7007 
   7008   if (dL >= dstLen) {
   7009     // buffer is full
   7010     return(dst);
   7011   }
   7012 
   7013   size_t sL     = strnlen(src, srcLen);
   7014 
   7015   if (dL+sL > dstLen) {
   7016     // truncate
   7017     return(strncat(dst, src, dstLen - dL));
   7018   }
   7019   else {
   7020     return(strncat(dst, src, srcLen));
   7021 }
   7022   }
   7023 
   7024 /**
   7025  * cat String Function
   7026  * \param
   7027  *   arbitrary list of strings seperated by commas
   7028  * \return
   7029  *   string with input strings concatenated (you must free the pointer)
   7030  */
   7031 char *catSF(const char *paramType, ...) {
   7032   va_list pl;
   7033   char **l = NULL;
   7034   char *r = NULL;
   7035 
   7036   // add arguments to a list
   7037   va_start(pl, paramType);
   7038   paramType = va_arg(pl, char *);
   7039   while (paramType) {
   7040     pErrorNULL(listPushS(&l, paramType));
   7041     paramType = va_arg(pl, char *);
   7042   }
   7043   va_end(pl);
   7044   // join list with empty delimiter
   7045   r = join(l, "");
   7046   listFreeS(l);
   7047   return(r);
   7048 }
   7049 
   7050 /**
   7051  * cat and copy String Function
   7052  * dst has to be big enough to hold the result
   7053  *
   7054  * \param
   7055  *   dst result destination buffer
   7056  *   arbitrary list of strings seperated by commas
   7057  * \return
   7058  *   dst string with input strings concatenated
   7059  */
   7060 char *iCatSF(char *dst, const char *paramType, ...) {
   7061   va_list pl;
   7062 
   7063   if (!dst) {
   7064     return(NULL);
   7065   }
   7066 
   7067   // empty dst string
   7068   dst[0] = 0;
   7069 
   7070   // add arguments to a list
   7071   va_start(pl, paramType);
   7072   paramType = va_arg(pl, char *);
   7073   while (paramType) {
   7074     strcat(dst, paramType);
   7075     paramType = va_arg(pl, char *);
   7076   }
   7077   va_end(pl);
   7078   return(dst);
   7079 }
   7080 
   7081 
   7082 /**
   7083  * cat and copy String Function
   7084  * \param
   7085  *   dst result destination buffer
   7086  *   arbitrary list of strings seperated by commas
   7087  * \return
   7088  *   dst string with input strings concatenated
   7089  */
   7090 char *bLCatSF(char *dst, size_t dstSize, const char *paramType, ...) {
   7091   va_list pl;
   7092 
   7093   if (!dst) {
   7094     return(NULL);
   7095   }
   7096 
   7097   if (!dstSize) {
   7098     return(dst);
   7099   }
   7100 
   7101   // empty dst string
   7102   dst[0] = 0;
   7103 
   7104   // add arguments to a list
   7105   va_start(pl, paramType);
   7106   paramType = va_arg(pl, char *);
   7107   while (paramType) {
   7108     pErrorNULL(strLCat(dst, dstSize, paramType));
   7109     paramType = va_arg(pl, char *);
   7110   }
   7111   va_end(pl);
   7112   return(dst);
   7113 }
   7114 
   7115 
   7116 /**
   7117  * format string
   7118  * allocate and format string using asprintf
   7119  * \param
   7120  *   format string and other parameters
   7121  * \return
   7122  *   allocated and formated string (you must free the pointer)
   7123  *   NULL when fmt is NULL or asprintf fails
   7124  */
   7125 char *formatS(const char *fmt, ...) {
   7126   char *r = NULL;
   7127   va_list pl;
   7128 
   7129   if (!fmt) {
   7130     return(NULL);
   7131   }
   7132   va_start(pl, fmt);
   7133   if (vasprintf(&r, fmt, pl) == -1) {
   7134     va_end(pl);
   7135     return(NULL);
   7136   }
   7137   va_end(pl);
   7138 
   7139   return(r);
   7140 }
   7141 
   7142 /**
   7143  * format string
   7144  * \param
   7145  *   format string and other parameters
   7146  * \return
   7147  *   formated string
   7148  *   NULL when string, fmt are NULL or sprintf fails
   7149  */
   7150 char *bFormatS(char *string, const char *fmt, ...) {
   7151   va_list pl;
   7152 
   7153   if (!string || !fmt) {
   7154     return(NULL);
   7155   }
   7156   va_start(pl, fmt);
   7157   if (vsprintf(string, fmt, pl) == -1) {
   7158     return(NULL);
   7159   }
   7160   va_end(pl);
   7161 
   7162   return(string);
   7163 }
   7164 
   7165 /**
   7166  * format string
   7167  * \param
   7168  *   format string and other parameters
   7169  * \return
   7170  *   formated string
   7171  *   NULL when string, fmt is NULL or snprintf fails
   7172  */
   7173 char *bLFormatS(char *string, size_t stringSize, const char *fmt, ...) {
   7174   va_list pl;
   7175 
   7176   if (!string || !fmt) {
   7177     return(NULL);
   7178   }
   7179   va_start(pl, fmt);
   7180   if (vsnprintf(string, stringSize, fmt, pl) == -1) {
   7181     return(NULL);
   7182   }
   7183   va_end(pl);
   7184 
   7185   return(string);
   7186 }
   7187 
   7188 /**
   7189  * append strings
   7190  *
   7191  * \param
   7192  *   string1 string
   7193  *   string2 string to append at the end of string1
   7194  * \return
   7195  *   new string string1+string2 (you must free the pointer)
   7196  *   dup string1 when string2 is NULL (you must free the pointer)
   7197  *   NULL when string1 is NULL
   7198  */
   7199 char *appendS(const char *string1, const char *string2) {
   7200   char *r = NULL;
   7201   size_t l1;
   7202   size_t l2;
   7203 
   7204   if (!string1) {
   7205     return(NULL);
   7206   }
   7207   if (!string2) {
   7208     r = strdup(string1);
   7209     return(r);
   7210   }
   7211 
   7212   l1 = strlen(string1);
   7213   l2 = strlen(string2);
   7214 
   7215   if (!l2) {
   7216     // empty string
   7217     r = strdup(string1);
   7218     return(r);
   7219   }
   7220 
   7221   r = MALLOC(l1 + l2 + 1);
   7222   if (!r) {
   7223     return(NULL);
   7224   }
   7225 
   7226   strcpy(r,string1);
   7227   strcat(r, string2);
   7228   return(r);
   7229 }
   7230 
   7231 /**
   7232  * append char to string
   7233  * when c is 0 the result is string1
   7234  *
   7235  * \param
   7236  *   string1 string
   7237  *   c       char to append
   7238  * \return
   7239  *   new string string1+c (you must free the pointer)
   7240  *   NULL when string1 is NULL
   7241  */
   7242 char *appendCharS(const char *string1, char c) {
   7243   char *r = NULL;
   7244   size_t l1;
   7245 
   7246   if (!string1) {
   7247     return(NULL);
   7248   }
   7249   if (!c) {
   7250     r = strdup(string1);
   7251     return(r);
   7252   }
   7253 
   7254   charToS(string2, c);
   7255 
   7256   l1 = strlen(string1);
   7257 
   7258   r = MALLOC(l1 + 1 + 1);
   7259   if (!r) {
   7260     return(NULL);
   7261   }
   7262 
   7263   strcpy(r,string1);
   7264   strcat(r, string2);
   7265   return(r);
   7266 }
   7267 
   7268 /**
   7269  * append string to char
   7270  *
   7271  * \param
   7272  *   string1 string
   7273  *   c       char to append
   7274  * \return
   7275  *   new string string1+c (you must free the pointer)
   7276  *   NULL when string1 is NULL
   7277  */
   7278 char *appendSChar(char c, const char *string2) {
   7279   char *r = NULL;
   7280   size_t l2;
   7281 
   7282   charToS(string1, c);
   7283 
   7284   if (!string2) {
   7285     r = strdup(string1);
   7286     return(r);
   7287   }
   7288 
   7289   l2 = strlen(string2);
   7290 
   7291   if (!l2) {
   7292     // empty string
   7293     r = strdup(string1);
   7294     return(r);
   7295   }
   7296 
   7297   r = MALLOC(1 + l2 + 1);
   7298   if (!r) {
   7299     return(NULL);
   7300   }
   7301 
   7302   strcpy(r,string1);
   7303   strcat(r, string2);
   7304   return(r);
   7305 }
   7306 
   7307 /**
   7308  * append strings
   7309  *
   7310  * \param
   7311  *   string1 string, which is reallocated.
   7312  *   string2 string to append at the end of string1
   7313  * \return
   7314  *   string1 modified string1 (realloc), string1+string2 (you must free the pointer)
   7315  *   string1 no change when string2 is NULL (you must free the pointer)
   7316  *   NULL no change when string1 is NULL
   7317  */
   7318 char *iAppendS(char **string1, const char *string2) {
   7319   char *tmp = NULL;
   7320   size_t l1;
   7321   size_t l2;
   7322 
   7323   if (!string1) {
   7324     return(NULL);
   7325   }
   7326   if (!string2) {
   7327     return(*string1);
   7328   }
   7329   if (!*string1) {
   7330     *string1 = strdup(string2);
   7331     return(*string1);
   7332   }
   7333 
   7334   l1 = strlen(*string1);
   7335   l2 = strlen(string2);
   7336 
   7337   if (!l2) {
   7338     // empty string
   7339     return(*string1);
   7340   }
   7341 
   7342   tmp = REALLOC(*string1, l1 + l2 + 1);
   7343   if (!tmp) {
   7344     return(NULL);
   7345   }
   7346 
   7347   *string1 = tmp;
   7348   strcat(*string1, string2);
   7349   return(*string1);
   7350 }
   7351 
   7352 /**
   7353  * append char to string
   7354  *
   7355  * \param
   7356  *   string1 string, which is reallocated.
   7357  *   c       char to append at the end of string1
   7358  * \return
   7359  *   string1 modified string1 (realloc), string1+c (you must free the pointer)
   7360  *   NULL no change when string1 is NULL
   7361  */
   7362 char *iAppendCharS(char **string1, char c) {
   7363   char *tmp = NULL;
   7364   size_t l1;
   7365 
   7366   if (!string1) {
   7367     return(NULL);
   7368   }
   7369 
   7370   charToS(string2, c);
   7371 
   7372   if (!*string1) {
   7373     *string1 = strdup(string2);
   7374     return(*string1);
   7375   }
   7376 
   7377   l1 = strlen(*string1);
   7378 
   7379   tmp = REALLOC(*string1, l1 + 1 + 1);
   7380   if (!tmp) {
   7381     return(NULL);
   7382   }
   7383 
   7384   *string1 = tmp;
   7385   strcat(*string1, string2);
   7386   return(*string1);
   7387 }
   7388 
   7389 /**
   7390  * append and free strings
   7391  *
   7392  * string2 is freed (except when there is an error)
   7393  *
   7394  * \param
   7395  *   string1 string, which is reallocated.
   7396  *   string2 string to append at the end of string1
   7397  * \return
   7398  *   string1 modified string1 (realloc), string1+string2 (you must free the pointer)
   7399  *   NULL no change when string1 or string2 are NULL
   7400  */
   7401 char *iAppendNFreeS(char **string1, char *string2) {
   7402   char *r = NULL;
   7403 
   7404   r = iAppendS(string1, string2);
   7405   if (r) {
   7406     free(string2);
   7407   }
   7408   return(r);
   7409 }
   7410 
   7411 /**
   7412  * append many strings
   7413  *
   7414  * \param
   7415  *   string1 string, which is reallocated.
   7416  *   string2 string to append at the end of string1
   7417  * \return
   7418  *   string1 modified string1, string1+string2 (you must free the pointer)
   7419  *   NULL no change when string1 or string2 are NULL
   7420  */
   7421 char *iAppendManySF(char **string, const char *paramType, ...) {
   7422   va_list pl;
   7423   char *r = NULL;
   7424   char **l = NULL;
   7425 
   7426   if (!string) {
   7427     return(NULL);
   7428   }
   7429 
   7430   pErrorNULL(iListPushS(&l, *string));
   7431   pErrorNULL(listPushS(&l, paramType));
   7432 
   7433   // add arguments to a list
   7434   va_start(pl, paramType);
   7435   paramType = va_arg(pl, char *);
   7436   while (paramType) {
   7437     pErrorNULL(listPushS(&l, paramType));
   7438     paramType = va_arg(pl, char *);
   7439   }
   7440   va_end(pl);
   7441   // join list with empty delimiter
   7442   r = join(l, "");
   7443   listFreeS(l);
   7444 
   7445   // Already freed in listFreeS - free *string
   7446   *string = r;
   7447   return(r);
   7448 }
   7449 
   7450 /**
   7451  * buffer append many strings
   7452  *
   7453  * \param
   7454  *   string1 string
   7455  *   string2 string to append at the end of string1
   7456  * \return
   7457  *   string1 modified string1, string1+string2
   7458  *   NULL no change when string1 or string2 are NULL
   7459  */
   7460 char *bAppendManySF(char *string, const char *paramType, ...) {
   7461   va_list pl;
   7462   char *r = NULL;
   7463   char **l = NULL;
   7464 
   7465   if (!string) {
   7466     return(NULL);
   7467   }
   7468 
   7469   pErrorNULL(listPushS(&l, string));
   7470   pErrorNULL(listPushS(&l, paramType));
   7471 
   7472   // add arguments to a list
   7473   va_start(pl, paramType);
   7474   paramType = va_arg(pl, char *);
   7475   while (paramType) {
   7476     pErrorNULL(listPushS(&l, paramType));
   7477     paramType = va_arg(pl, char *);
   7478   }
   7479   va_end(pl);
   7480   // join list with empty delimiter
   7481   r = join(l, "");
   7482   listFreeS(l);
   7483 
   7484   strcpy(string, r);
   7485   free(r);
   7486   return(string);
   7487 }
   7488 
   7489 /**
   7490  * buffer size append many strings
   7491  *
   7492  * \param
   7493  *   string1 string
   7494  *   string2 string to append at the end of string1
   7495  * \return
   7496  *   string1 modified string1, string1+string2
   7497  *   NULL no change when string1 or string2 are NULL
   7498  */
   7499 char *bLAppendManySF(char *string, size_t stringSize, const char *paramType, ...) {
   7500   va_list pl;
   7501   char *r = NULL;
   7502   char **l = NULL;
   7503 
   7504   if (!string) {
   7505     return(NULL);
   7506   }
   7507 
   7508   if (!stringSize) {
   7509     // size 0 - no change
   7510     return(string);
   7511   }
   7512 
   7513   pErrorNULL(listPushS(&l, string));
   7514   pErrorNULL(listPushS(&l, paramType));
   7515 
   7516   // add arguments to a list
   7517   va_start(pl, paramType);
   7518   paramType = va_arg(pl, char *);
   7519   while (paramType) {
   7520     pErrorNULL(listPushS(&l, paramType));
   7521     paramType = va_arg(pl, char *);
   7522   }
   7523   va_end(pl);
   7524   // join list with empty delimiter
   7525   r = join(l, "");
   7526   listFreeS(l);
   7527 
   7528   pErrorNULL(strLCpy(string, stringSize, r));
   7529   free(r);
   7530   return(string);
   7531 }
   7532 
   7533 /**
   7534  * prepend strings
   7535  *
   7536  * \param
   7537  *   string1 string
   7538  *   string2 string to prepend at the beginning of string1
   7539  * \return
   7540  *   new string string2+string1 (you must free the pointer)
   7541  *   dup string2 when string1 is NULL (you must free the pointer)
   7542  *   NULL when string2 is NULL
   7543  */
   7544 char *prependS(const char *string1, const char *string2) {
   7545 
   7546   return(appendS(string2, string1));
   7547 }
   7548 
   7549 /**
   7550  * prepend char to string
   7551  *
   7552  * \param
   7553  *   string1 string
   7554  *   c       char to prepend at the beginning of string1
   7555  * \return
   7556  *   new string c+string1 (you must free the pointer)
   7557  *   NULL when string1 is NULL
   7558  */
   7559 char *prependCharS(const char *string1, char c) {
   7560 
   7561   return(appendSChar(c, string1));
   7562 }
   7563 
   7564 /**
   7565  * prepend string to char
   7566  *
   7567  * \param
   7568  *   c       char
   7569  *   string2 string to prepend at the beginning of c
   7570  * \return
   7571  *   new string string2+c (you must free the pointer)
   7572  *   NULL when string2 is NULL
   7573  */
   7574 char *prependSChar(char c, const char *string2) {
   7575 
   7576   return(appendCharS(string2, c));
   7577 }
   7578 
   7579 /**
   7580  * prepend strings
   7581  *
   7582  * \param
   7583  *   string1 string, which is reallocated.
   7584  *   string2 string to prepend at the beginning of string1
   7585  * \return
   7586  *   string1 modified string1, string2+string1 (you must free the pointer)
   7587  *   string1 when string2 is NULL (you must free the pointer)
   7588  *   NULL no change when string1 is NULL
   7589  */
   7590 char *iPrependS(char **string1, const char *string2) {
   7591   size_t l2;
   7592 
   7593   if (!string1) {
   7594     return(NULL);
   7595   }
   7596   if (!string2) {
   7597     return(*string1);
   7598   }
   7599   if (!*string1) {
   7600     *string1 = strdup(string2);
   7601     return(*string1);
   7602   }
   7603 
   7604   l2 = strlen(string2);
   7605 
   7606   if (!l2) {
   7607     // empty string
   7608     return(*string1);
   7609   }
   7610 
   7611   return(iInsertS(string1, 0, string2));
   7612 }
   7613 
   7614 /**
   7615  * prepend char to string
   7616  *
   7617  * \param
   7618  *   string1 string, which is reallocated.
   7619  *   c       char to prepend at the beginning of string1
   7620  * \return
   7621  *   string1  modified string1, c+string1 (you must free the pointer)
   7622  *   NULL no change when string1 is NULL
   7623  */
   7624 char *iPrependCharS(char **string1, char c) {
   7625   size_t l1;
   7626 
   7627   if (!string1) {
   7628     return(NULL);
   7629   }
   7630 
   7631   if (!c) {
   7632     return(*string1);
   7633   }
   7634 
   7635   charToS(string2, c);
   7636 
   7637   if (!*string1) {
   7638     *string1 = strdup(string2);
   7639     return(*string1);
   7640   }
   7641 
   7642   l1 = strlen(*string1);
   7643 
   7644   char *tmp = REALLOC(*string1, l1 + 1 + 1);
   7645   if (!tmp) {
   7646     return(NULL);
   7647   }
   7648 
   7649   *string1 = tmp;
   7650   memmove(*string1+1, *string1, l1+1);
   7651   **string1 = c;
   7652   return(*string1);
   7653 }
   7654 
   7655 /**
   7656  * prepend and free strings
   7657  *
   7658  * string2 is freed
   7659  *
   7660  * \param
   7661  *   string1 string, which is reallocated.
   7662  *   string2 string to prepend at the beginning of string1
   7663  * \return
   7664  *   string1  modified string1, string2+string1 (you must free the pointer)
   7665  *   NULL no change when string1 or string2 are NULL
   7666  */
   7667 char *iPrependNFreeS(char **string1, char *string2) {
   7668   char *r = NULL;
   7669 
   7670   r = iPrependS(string1, string2);
   7671   if (r) {
   7672     free(string2);
   7673   }
   7674   return(r);
   7675 }
   7676 
   7677 
   7678 /**
   7679  * buffer prepend strings
   7680  *
   7681  * \param
   7682  *   string1 string
   7683  *   string2 string to prepend at the beginning of string1
   7684  * \return
   7685  *   string1  modified string1, string2+string1
   7686  *   NULL no change when string1 or string2 are NULL
   7687  */
   7688 char *bPrependS(char *string1, const char *string2) {
   7689   size_t l2;
   7690 
   7691   if (!string1 || !string2) {
   7692     return(NULL);
   7693   }
   7694 
   7695   if (!*string1) {
   7696     strcpy(string1, string2);
   7697     return(string1);
   7698   }
   7699 
   7700   l2 = strlen(string2);
   7701 
   7702   if (!l2) {
   7703     // empty string
   7704     return(string1);
   7705   }
   7706 
   7707   return(bInsertS(string1, 0, string2));
   7708 }
   7709 
   7710 /**
   7711  * buffer prepend strings
   7712  *
   7713  * \param
   7714  *   string1 string
   7715  *   string2 string to prepend at the beginning of string1
   7716  * \return
   7717  *   string1  modified string1, string2+string1
   7718  *   NULL no change when string1 or string2 are NULL
   7719  */
   7720 char *bLPrependS(char *string1, size_t string1Size, const char *string2) {
   7721   size_t l2;
   7722 
   7723   if (!string1 || !string2) {
   7724     return(NULL);
   7725   }
   7726 
   7727   if (!string1Size) {
   7728     return(string1);
   7729   }
   7730 
   7731   if (!*string1) {
   7732     pErrorNULL(strLCpy(string1, string1Size, string2));
   7733     return(string1);
   7734   }
   7735 
   7736   l2 = strlen(string2);
   7737 
   7738   if (!l2) {
   7739     // empty string
   7740     return(string1);
   7741   }
   7742 
   7743   return(bLInsertS(string1, string1Size, 0, string2));
   7744 }
   7745 
   7746 /**
   7747  * replace String
   7748  * the original remains unchanged
   7749  * duplicate s
   7750  * the olds string is replaced with the news string max times in the result
   7751  * 0 for max means replace all olds strings
   7752  *
   7753  * \param
   7754  *   s: string
   7755  *   olds: old string to be replaced in s
   7756  *   news: new string replacing olds in s
   7757  *   max: number of times to replace olds, 0 to replace all found olds
   7758  * \return
   7759  *   new string (you must free the pointer)
   7760  *   "" when s is empty
   7761  *   NULL when s is NULL
   7762  *   NULL when olds is empty
   7763  */
   7764 char* replaceS(const char *s, const char *olds, const char *news, size_t max ) {
   7765   char *r = NULL;
   7766   char *tmp = NULL;
   7767   // ins is next insert point
   7768   const char *ins = NULL;
   7769   size_t count;
   7770   size_t lfront;
   7771 
   7772   // sanity checks and initialization
   7773   // count the number of replacements needed
   7774   // allocate result
   7775   // replace olds with news
   7776   // copy end of string
   7777 
   7778   // sanity checks and initialization
   7779   if (!s) {
   7780     return(NULL);
   7781   }
   7782   if (isEmptyS(s)) {
   7783     // return "" when s is empty
   7784     return(emptySF());
   7785   }
   7786   if (!olds) {
   7787     return(NULL);
   7788   }
   7789   size_t lolds;
   7790   lolds = strlen(olds);
   7791   if (!lolds) {
   7792     // empty olds causes infinite loop
   7793     return(NULL);
   7794   }
   7795   if (!news) {
   7796     // empty string for NULL
   7797     news = "";
   7798   }
   7799 
   7800   // count the number of replacements needed
   7801   ins = s;
   7802   for (count = 0 ; (tmp = strstr(ins, olds)) ; ++count) {
   7803      ins = tmp + lolds;
   7804      if (max && (count == max)) {
   7805        // the maximum number is replacements is reached, stop
   7806        break;
   7807   }
   7808      }
   7809 
   7810 
   7811   size_t lnews;
   7812   lnews = strlen(news);
   7813 
   7814   // allocate result
   7815   tmp = r = MALLOC(strlen(s) + (lnews - lolds) * count + 1);
   7816   if (!r) {
   7817     return(NULL);//LCOV_EXCL_LINE
   7818   }
   7819 
   7820   // replace olds with news
   7821   // ins points to the start of olds in s
   7822   // tmp is the front of s, tmp points the end of s front in r
   7823   // copy news to tmp, tmp points the end of news in r
   7824   // s is the remainder of s after end of olds
   7825   while (count--) {
   7826     ins    = strstr(s, olds);
   7827     lfront = (size_t)(ins - s);
   7828     tmp    = strncpy(tmp, s, lfront) + lfront;
   7829     tmp    = strcpy(tmp, news) + lnews;
   7830     s     += lfront + lolds;
   7831   }
   7832 
   7833   // copy end of string
   7834   strcpy(tmp, s);
   7835   return(r);
   7836 }
   7837 
   7838 char *replaceCharSS(const char *s, char olds, const char *news, size_t max) {
   7839 
   7840   charToS(p, olds);
   7841   return(replaceS(s, p, news, max));
   7842 }
   7843 
   7844 char *replaceSCharS(const char *s, const char *olds, char news, size_t max) {
   7845 
   7846   charToS(p, news);
   7847   return(replaceS(s, olds, p, max));
   7848 }
   7849 
   7850 char *replaceCharCharS(const char *s, char olds, char news, size_t max) {
   7851 
   7852   charToS(p, olds);
   7853   charToS(n, news);
   7854   return(replaceS(s, p, n, max));
   7855 }
   7856 
   7857 /**
   7858  * replaceSLen returns the length of the resulting string
   7859  */
   7860 size_t replaceSLen(const char *s, const char *olds, const char *news, size_t max) {
   7861   char *tmp = NULL;
   7862   // ins is next insert point
   7863   const char *ins = NULL;
   7864   size_t count;
   7865 
   7866   // sanity checks and initialization
   7867   // count the number of replacements needed
   7868   // allocate result
   7869   // replace olds with news
   7870   // copy end of string
   7871 
   7872   // sanity checks and initialization
   7873   if (!s) {
   7874     return(0);
   7875   }
   7876   if (isEmptyS(s)) {
   7877     // return "" when s is empty
   7878     return(0);
   7879   }
   7880   if (!olds) {
   7881     return(0);
   7882   }
   7883   size_t lolds;
   7884   lolds = strlen(olds);
   7885   if (!lolds) {
   7886     // empty olds causes infinite loop
   7887     return(0);
   7888   }
   7889   if (!news) {
   7890     // empty string for NULL
   7891     news = "";
   7892   }
   7893 
   7894   // count the number of replacements needed
   7895   ins = s;
   7896   for (count = 0 ; (tmp = strstr(ins, olds)) ; ++count) {
   7897      ins = tmp + lolds;
   7898      if (max && (count == max)) {
   7899        // the maximum number is replacements is reached, stop
   7900        break;
   7901   }
   7902      }
   7903 
   7904 
   7905   size_t lnews;
   7906   lnews = strlen(news);
   7907 
   7908   return(strlen(s) + (lnews - lolds) * count);
   7909 }
   7910 
   7911 /**
   7912  * replace String
   7913  * the olds string is replaced with the news string max times in the result
   7914  * 0 for max means replace all olds strings
   7915  *
   7916  * \param
   7917  *   s: string (that is allocated with malloc)
   7918  *   olds: old string to be replaced in s
   7919  *   news: new string replacing olds in s
   7920  *   max: number of times to replace olds, 0 to replace all found olds
   7921  * \return
   7922  *   modified s string (you must free the pointer)
   7923  *   NULL s not modified when s is NULL or empty and when olds is empty
   7924  */
   7925 char* iReplaceS(char **s, const char *olds, const char *news, size_t max ) {
   7926   char *r = NULL;
   7927   char *tmp = NULL;
   7928   char *workingS = NULL;
   7929   // ins is next insert point
   7930   char *ins = NULL;
   7931   size_t count;
   7932   size_t lfront;
   7933 
   7934   // sanity checks and initialization
   7935   // count the number of replacements needed
   7936   // allocate result
   7937   // replace olds with news
   7938   // copy end of string
   7939 
   7940   // sanity checks and initialization
   7941   if (!s || !*s) {
   7942     return(NULL);
   7943   }
   7944   if (isEmptyS(*s)) {
   7945     // s is empty, do nothing
   7946     return(NULL);
   7947   }
   7948   if (!olds) {
   7949     return(NULL);
   7950   }
   7951   size_t lolds;
   7952   lolds = strlen(olds);
   7953   if (!lolds) {
   7954     // empty olds causes infinite loop
   7955     return(NULL);
   7956   }
   7957   if (!news) {
   7958     // empty string for NULL
   7959     news = "";
   7960   }
   7961 
   7962   // count the number of replacements needed
   7963   ins = workingS = *s;
   7964   for (count = 0 ; (tmp = strstr(ins, olds)) ; ++count) {
   7965      ins = tmp + lolds;
   7966      if (max && (count == max)) {
   7967        // the maximum number is replacements is reached, stop
   7968        break;
   7969   }
   7970      }
   7971 
   7972 
   7973   size_t lnews;
   7974   lnews       = strlen(news);
   7975 
   7976   // allocate result
   7977   size_t rLen = strlen(*s) + (lnews - lolds) * count + 1;;
   7978   tmp = r     = MALLOC(rLen);
   7979   if (!r) {
   7980     return(NULL);
   7981   }
   7982 
   7983   // replace olds with news
   7984   // ins points to the start of olds in s
   7985   // tmp is the front of s, tmp points the end of s front in r
   7986   // copy news to tmp, tmp points the end of news in r
   7987   // s is the remainder of s after end of olds
   7988   while (count--) {
   7989     ins       = strstr(workingS, olds);
   7990     lfront    = (size_t)(ins - workingS);
   7991     tmp       = strncpy(tmp, workingS, lfront) + lfront;
   7992     tmp       = strcpy(tmp, news) + lnews;
   7993     workingS += lfront + lolds;
   7994   }
   7995 
   7996   // copy end of string
   7997   strcpy(tmp, workingS);
   7998 
   7999   free(*s);
   8000   *s = r;
   8001   return(r);
   8002 }
   8003 
   8004 char *iReplaceCharSS(char **s, char olds, const char *news, size_t max) {
   8005 
   8006   charToS(p, olds);
   8007   return(iReplaceS(s, p, news, max));
   8008 }
   8009 
   8010 char *iReplaceSCharS(char **s, const char *olds, char news, size_t max) {
   8011 
   8012   charToS(p, news);
   8013   return(iReplaceS(s, olds, p, max));
   8014 }
   8015 
   8016 char *iReplaceCharCharS(char **s, char olds, char news, size_t max) {
   8017 
   8018   charToS(p, olds);
   8019   charToS(n, news);
   8020   return(iReplaceS(s, p, n, max));
   8021 }
   8022 
   8023 /**
   8024  * buffer replace String
   8025  * the olds string is replaced with the news string max times in the result
   8026  * 0 for max means replace all olds strings
   8027  *
   8028  * \param
   8029  *   s: string
   8030  *   olds: old string to be replaced in s
   8031  *   news: new string replacing olds in s
   8032  *   max: number of times to replace olds, 0 to replace all found olds
   8033  * \return
   8034  *   modified s string
   8035  *   NULL s not modified when s is NULL or empty and when olds is empty
   8036  */
   8037 char* bReplaceS(char *s, const char *olds, const char *news, size_t max ) {
   8038   char *r = NULL;
   8039   char *tmp = NULL;
   8040   char *workingS = NULL;
   8041   // ins is next insert point
   8042   char *ins = NULL;
   8043   size_t count;
   8044   size_t lfront;
   8045 
   8046   // sanity checks and initialization
   8047   // count the number of replacements needed
   8048   // allocate result
   8049   // replace olds with news
   8050   // copy end of string
   8051 
   8052   // sanity checks and initialization
   8053   if (!s) {
   8054     return(NULL);
   8055   }
   8056   if (isEmptyS(s)) {
   8057     // s is empty, do nothing
   8058     return(NULL);
   8059   }
   8060   if (!olds) {
   8061     return(NULL);
   8062   }
   8063   size_t lolds;
   8064   lolds = strlen(olds);
   8065   if (!lolds) {
   8066     // empty olds causes infinite loop
   8067     return(NULL);
   8068   }
   8069   if (!news) {
   8070     // empty string for NULL
   8071     news = "";
   8072   }
   8073 
   8074   // count the number of replacements needed
   8075   ins = workingS = s;
   8076   for (count = 0 ; (tmp = strstr(ins, olds)) ; ++count) {
   8077      ins = tmp + lolds;
   8078      if (max && (count == max)) {
   8079        // the maximum number is replacements is reached, stop
   8080        break;
   8081   }
   8082      }
   8083 
   8084 
   8085   size_t lnews;
   8086   lnews       = strlen(news);
   8087 
   8088   // allocate result
   8089   size_t rLen = strlen(s) + (lnews - lolds) * count + 1;;
   8090   tmp = r     = MALLOC(rLen);
   8091   if (!r) {
   8092     return(NULL);
   8093   }
   8094 
   8095   // replace olds with news
   8096   // ins points to the start of olds in s
   8097   // tmp is the front of s, tmp points the end of s front in r
   8098   // copy news to tmp, tmp points the end of news in r
   8099   // s is the remainder of s after end of olds
   8100   while (count--) {
   8101     ins       = strstr(workingS, olds);
   8102     lfront    = (size_t)(ins - workingS);
   8103     tmp       = strncpy(tmp, workingS, lfront) + lfront;
   8104     tmp       = strcpy(tmp, news) + lnews;
   8105     workingS += lfront + lolds;
   8106   }
   8107 
   8108   // copy end of string
   8109   strcpy(tmp, workingS);
   8110 
   8111   strcpy(s, r);
   8112   free(r);
   8113   return(s);
   8114 }
   8115 
   8116 /**
   8117  * buffer size replace String
   8118  * the olds string is replaced with the news string max times in the result
   8119  * 0 for max means replace all olds strings
   8120  *
   8121  * \param
   8122  *   s: string
   8123  *   olds: old string to be replaced in s
   8124  *   news: new string replacing olds in s
   8125  *   max: number of times to replace olds, 0 to replace all found olds
   8126  * \return
   8127  *   modified s string
   8128  *   NULL s not modified when s is NULL or empty and when olds is empty
   8129  */
   8130 char* bLReplaceS(char *s, size_t sSize, const char *olds, const char *news, size_t max) {
   8131   char *r = NULL;
   8132   char *tmp = NULL;
   8133   char *workingS = NULL;
   8134   // ins is next insert point
   8135   char *ins = NULL;
   8136   size_t count;
   8137   size_t lfront;
   8138 
   8139   // sanity checks and initialization
   8140   // count the number of replacements needed
   8141   // allocate result
   8142   // replace olds with news
   8143   // copy end of string
   8144 
   8145   // sanity checks and initialization
   8146   if (!s) {
   8147     return(NULL);
   8148   }
   8149   if (!sSize) {
   8150     // size 0 - no change
   8151     return(s);
   8152   }
   8153   if (isEmptyS(s)) {
   8154     // s is empty, do nothing
   8155     return(NULL);
   8156   }
   8157   if (!olds) {
   8158     return(NULL);
   8159   }
   8160   size_t lolds;
   8161   lolds = strlen(olds);
   8162   if (!lolds) {
   8163     // empty olds causes infinite loop
   8164     return(NULL);
   8165   }
   8166   if (!news) {
   8167     // empty string for NULL
   8168     news = "";
   8169   }
   8170 
   8171   // count the number of replacements needed
   8172   ins = workingS = s;
   8173   for (count = 0 ; (tmp = strstr(ins, olds)) ; ++count) {
   8174      ins = tmp + lolds;
   8175      if (max && (count == max)) {
   8176        // the maximum number is replacements is reached, stop
   8177        break;
   8178   }
   8179      }
   8180 
   8181 
   8182   size_t lnews;
   8183   lnews       = strlen(news);
   8184 
   8185   // allocate result
   8186   size_t rLen = strlen(s) + (lnews - lolds) * count + 1;;
   8187   tmp = r     = MALLOC(rLen);
   8188   if (!r) {
   8189     return(NULL);
   8190   }
   8191 
   8192   // replace olds with news
   8193   // ins points to the start of olds in s
   8194   // tmp is the front of s, tmp points the end of s front in r
   8195   // copy news to tmp, tmp points the end of news in r
   8196   // s is the remainder of s after end of olds
   8197   while (count--) {
   8198     ins       = strstr(workingS, olds);
   8199     lfront    = (size_t)(ins - workingS);
   8200     tmp       = strncpy(tmp, workingS, lfront) + lfront;
   8201     tmp       = strcpy(tmp, news) + lnews;
   8202     workingS += lfront + lolds;
   8203   }
   8204 
   8205   // copy end of string
   8206   strcpy(tmp, workingS);
   8207 
   8208   pErrorNULL(strLCpy(s, sSize, r));
   8209   free(r);
   8210   return(s);
   8211 }
   8212 
   8213 /**
   8214  * replace Many Strings
   8215  * the original remains unchanged
   8216  * duplicate s
   8217  * the olds string is replaced with the news string max times in the result
   8218  *
   8219  * Example:
   8220  * r = replaceManyS("asd", "s",  "BNM", "a",  "AAA")
   8221  *                          ^olds ^news  ^olds ^news
   8222  *
   8223  * \param
   8224  *   s: string
   8225  *   olds: old string to be replaced in s
   8226  *   news: new string replacing olds in s
   8227  *   ...
   8228  * \return
   8229  *   new string (you must free the pointer)
   8230  *   "" when s is empty
   8231  *   NULL when s is NULL
   8232  *   NULL when only 2 parameters are given
   8233  *   NULL when any olds is empty
   8234  */
   8235 char *replaceManySF(const char *paramType, ...) {
   8236   va_list pl;
   8237   char *param = NULL;
   8238   char *r = NULL;
   8239   char *workingS = NULL;
   8240   char *olds = NULL;
   8241   char *news = NULL;
   8242 
   8243   // sanity checks
   8244   if (!paramType) {
   8245     return(NULL);
   8246   }
   8247 
   8248   if (isEmptyS(paramType)) {
   8249     return(emptySF());
   8250   }
   8251 
   8252   workingS  = strdup(paramType);
   8253 
   8254   // add arguments to a list
   8255   va_start(pl, paramType);
   8256   param = va_arg(pl, char *);
   8257   while (param) {
   8258     if (!olds) {
   8259       olds = param;
   8260     }
   8261     else if (!news) {
   8262       news = param;
   8263       r = replaceS(workingS, olds, news, 0);
   8264       free(workingS);
   8265       olds = NULL;
   8266       news = NULL;
   8267       workingS = r;
   8268     }
   8269     param = va_arg(pl, char *);
   8270   }
   8271   va_end(pl);
   8272   if (!r) {
   8273     free(workingS);
   8274   }
   8275   return(r);
   8276 }
   8277 
   8278 /**
   8279  * replace Many Strings
   8280  * the olds string is replaced with the news string max times in the result
   8281  *
   8282  * Example:
   8283  * iReplaceManyS(s, "s",  "BNM", "a",  "AAA")
   8284  *                   ^olds ^news  ^olds ^news
   8285  *
   8286  * \param
   8287  *   string (this parameter is reallocated)
   8288  *   olds: old string to be replaced in s
   8289  *   news: new string replacing olds in s
   8290  *   ...
   8291  * \return
   8292  *   modified string (you must free the pointer)
   8293  *   NULL not modified when s is empty, when s is NULL, when only 2 parameters are given,
   8294  *     when any olds is empty
   8295  */
   8296 char *iReplaceManySF(char **s, char *paramType, ...) {
   8297   va_list pl;
   8298   char *olds = NULL;
   8299   char *news = NULL;
   8300 
   8301   // sanity checks
   8302   if (!s || !*s) {
   8303     return(NULL);
   8304   }
   8305 
   8306   if (isEmptyS(*s)) {
   8307     return(NULL);
   8308   }
   8309 
   8310   olds = (char *) paramType;;
   8311 
   8312   // add arguments to a list
   8313   va_start(pl, paramType);
   8314   paramType = va_arg(pl, char *);
   8315   while (paramType) {
   8316     if (!olds) {
   8317       olds = (char *) paramType;
   8318     }
   8319     else if (!news) {
   8320       news = (char *) paramType;
   8321       pErrorNULL(iReplaceS(s, olds, news, 0));
   8322       olds = NULL;
   8323       news = NULL;
   8324     }
   8325 
   8326     paramType = va_arg(pl, char *);
   8327   }
   8328   va_end(pl);
   8329   return(*s);
   8330 }
   8331 
   8332 /**
   8333  * buffer replace Many Strings
   8334  * the olds string is replaced with the news string max times in the result
   8335  *
   8336  * Example:
   8337  * bReplaceManyS(s, "s",  "BNM", "a",  "AAA")
   8338  *                   ^olds ^news  ^olds ^news
   8339  *
   8340  * \param
   8341  *   string
   8342  *   olds: old string to be replaced in s
   8343  *   news: new string replacing olds in s
   8344  *   ...
   8345  * \return
   8346  *   modified string
   8347  *   NULL not modified when s is empty, when s is NULL, when only 2 parameters are given,
   8348  *     when any olds is empty
   8349  */
   8350 char *bReplaceManySF(char *s, char *paramType, ...) {
   8351   va_list pl;
   8352   char *olds = NULL;
   8353   char *news = NULL;
   8354 
   8355   // sanity checks
   8356   if (!s) {
   8357     return(NULL);
   8358   }
   8359 
   8360   if (isEmptyS(s)) {
   8361     return(NULL);
   8362   }
   8363 
   8364   olds = paramType;;
   8365 
   8366   // add arguments to a list
   8367   va_start(pl, paramType);
   8368   paramType = va_arg(pl, char *);
   8369   while (paramType) {
   8370     if (!olds) {
   8371       olds = paramType;
   8372     }
   8373     else if (!news) {
   8374       news = paramType;
   8375       pErrorNULL(bReplaceS(s, olds, news, 0));
   8376       olds = NULL;
   8377       news = NULL;
   8378     }
   8379 
   8380     paramType = va_arg(pl, char *);
   8381   }
   8382   va_end(pl);
   8383   return(s);
   8384 }
   8385 
   8386 /**
   8387  * buffer size replace Many Strings
   8388  * the olds string is replaced with the news string max times in the result
   8389  *
   8390  * Example:
   8391  * bReplaceManyS(s, "s",  "BNM", "a",  "AAA")
   8392  *                   ^olds ^news  ^olds ^news
   8393  *
   8394  * \param
   8395  *   string
   8396  *   olds: old string to be replaced in s
   8397  *   news: new string replacing olds in s
   8398  *   ...
   8399  * \return
   8400  *   modified string
   8401  *   NULL not modified when s is empty, when s is NULL, when only 2 parameters are given,
   8402  *     when any olds is empty
   8403  */
   8404 char *bLReplaceManySF(char *s, size_t sSize, char *paramType, ...) {
   8405   va_list pl;
   8406   char *olds = NULL;
   8407   char *news = NULL;
   8408 
   8409   // sanity checks
   8410   if (!s) {
   8411     return(NULL);
   8412   }
   8413 
   8414   if (!sSize) {
   8415     return(s);
   8416   }
   8417 
   8418   if (isEmptyS(s)) {
   8419     return(NULL);
   8420   }
   8421 
   8422   olds = paramType;;
   8423 
   8424   // add arguments to a list
   8425   va_start(pl, paramType);
   8426   paramType = va_arg(pl, char *);
   8427   while (paramType) {
   8428     if (!olds) {
   8429       olds = paramType;
   8430     }
   8431     else if (!news) {
   8432       news = paramType;
   8433       pErrorNULL(bLReplaceS(s, sSize, olds, news, 0));
   8434       olds = NULL;
   8435       news = NULL;
   8436     }
   8437 
   8438     paramType = va_arg(pl, char *);
   8439   }
   8440   va_end(pl);
   8441   return(s);
   8442 }
   8443 
   8444 /**
   8445  * ignore case Replace String
   8446  * the original remains unchanged
   8447  * duplicate s
   8448  * the olds string is replaced with the news string max times in the result
   8449  * 0 for max means replace all olds strings
   8450  *
   8451  * \param
   8452  *   s: string
   8453  *   olds: old string to be replaced in s
   8454  *   news: new string replacing olds in s
   8455  *   max: number of times to replace olds, 0 to replace all found olds
   8456  * \return
   8457  *   new string (you must free the pointer)
   8458  *   "" when s is empty
   8459  *   NULL when s is NULL
   8460  *   NULL when olds is empty
   8461  */
   8462 char* icReplaceS(const char *s, const char *olds, const char *news, size_t max ) {
   8463   char *r = NULL;
   8464   char *tmp = NULL;
   8465   // ins is next insert point
   8466   const char *ins = NULL;
   8467   size_t count;
   8468   size_t lfront;
   8469 
   8470   // sanity checks and initialization
   8471   // count the number of replacements needed
   8472   // allocate result
   8473   // replace olds with news
   8474   // copy end of string
   8475 
   8476   // sanity checks and initialization
   8477   if (!s) {
   8478     return(NULL);
   8479   }
   8480   if (isEmptyS(s)) {
   8481     // return "" when s is empty
   8482     return(emptySF());
   8483   }
   8484   if (!olds) {
   8485     return(NULL);
   8486   }
   8487   size_t lolds;
   8488   lolds = strlen(olds);
   8489   if (!lolds) {
   8490     // empty olds causes infinite loop
   8491     return(NULL);
   8492   }
   8493   if (!news) {
   8494     // empty string for NULL
   8495     news = "";
   8496   }
   8497 
   8498   // count the number of replacements needed
   8499   ins = s;
   8500   for (count = 0 ; (tmp = strcasestr(ins, olds)) ; ++count) {
   8501      ins = tmp + lolds;
   8502      if (max && (count == max)) {
   8503        // the maximum number is replacements is reached, stop
   8504        break;
   8505   }
   8506      }
   8507 
   8508 
   8509   size_t lnews;
   8510   lnews = strlen(news);
   8511 
   8512   // allocate result
   8513   tmp = r = MALLOC(strlen(s) + (lnews - lolds) * count + 1);
   8514   if (!r) {
   8515     return(NULL);//LCOV_EXCL_LINE
   8516   }
   8517 
   8518   // replace olds with news
   8519   // ins points to the start of olds in s
   8520   // tmp is the front of s, tmp points the end of s front in r
   8521   // copy news to tmp, tmp points the end of news in r
   8522   // s is the remainder of s after end of olds
   8523   while (count--) {
   8524     ins    = strcasestr(s, olds);
   8525     lfront = (size_t)(ins - s);
   8526     tmp    = strncpy(tmp, s, lfront) + lfront;
   8527     tmp    = strcpy(tmp, news) + lnews;
   8528     s     += lfront + lolds;
   8529   }
   8530 
   8531   // copy end of string
   8532   strcpy(tmp, s);
   8533   return(r);
   8534 }
   8535 
   8536 char *icReplaceCharSS(const char *s, char olds, const char *news, size_t max) {
   8537 
   8538   charToS(p, olds);
   8539   return(icReplaceS(s, p, news, max));
   8540 }
   8541 
   8542 char *icReplaceSCharS(const char *s, const char *olds, char news, size_t max) {
   8543 
   8544   charToS(p, news);
   8545   return(icReplaceS(s, olds, p, max));
   8546 }
   8547 
   8548 char *icReplaceCharCharS(const char *s, char olds, char news, size_t max) {
   8549 
   8550   charToS(p, olds);
   8551   charToS(n, news);
   8552   return(icReplaceS(s, p, n, max));
   8553 }
   8554 
   8555 
   8556 /**
   8557  * in place ignore case replace String
   8558  * the olds string is replaced with the news string max times in the result
   8559  * 0 for max means replace all olds strings
   8560  *
   8561  * \param
   8562  *   s: string (this parameter is reallocated)
   8563  *   olds: old string to be replaced in s
   8564  *   news: new string replacing olds in s
   8565  *   max: number of times to replace olds, 0 to replace all found olds
   8566  * \return
   8567  *   modified s string (you must free the pointer)
   8568  *   NULL s not modified when s is NULL or empty and when olds is empty
   8569  */
   8570 char* iicReplaceS(char **s, const char *olds, const char *news, size_t max ) {
   8571   char *r = NULL;
   8572   char *tmp = NULL;
   8573   char *workingS = NULL;
   8574   // ins is next insert point
   8575   char *ins = NULL;
   8576   size_t count;
   8577   size_t lfront;
   8578 
   8579   // sanity checks and initialization
   8580   // count the number of replacements needed
   8581   // allocate result
   8582   // replace olds with news
   8583   // copy end of string
   8584 
   8585   // sanity checks and initialization
   8586   if (!s || !*s) {
   8587     return(NULL);
   8588   }
   8589   if (isEmptyS(*s)) {
   8590     // s is empty, do nothing
   8591     return(NULL);
   8592   }
   8593   if (!olds) {
   8594     return(NULL);
   8595   }
   8596   size_t lolds;
   8597   lolds = strlen(olds);
   8598   if (!lolds) {
   8599     // empty olds causes infinite loop
   8600     return(NULL);
   8601   }
   8602   if (!news) {
   8603     // empty string for NULL
   8604     news = "";
   8605   }
   8606 
   8607   // count the number of replacements needed
   8608   ins = workingS = *s;
   8609   for (count = 0 ; (tmp = strcasestr(ins, olds)) ; ++count) {
   8610      ins = tmp + lolds;
   8611      if (max && (count == max)) {
   8612        // the maximum number is replacements is reached, stop
   8613        break;
   8614   }
   8615      }
   8616 
   8617 
   8618   size_t lnews;
   8619   lnews       = strlen(news);
   8620 
   8621   // allocate result
   8622   size_t rLen = strlen(*s) + (lnews - lolds) * count + 1;;
   8623   tmp = r     = MALLOC(rLen);
   8624   if (!r) {
   8625     return(NULL);
   8626   }
   8627 
   8628   // replace olds with news
   8629   // ins points to the start of olds in s
   8630   // tmp is the front of s, tmp points the end of s front in r
   8631   // copy news to tmp, tmp points the end of news in r
   8632   // s is the remainder of s after end of olds
   8633   while (count--) {
   8634     ins       = strcasestr(workingS, olds);
   8635     lfront    = (size_t)(ins - workingS);
   8636     tmp       = strncpy(tmp, workingS, lfront) + lfront;
   8637     tmp       = strcpy(tmp, news) + lnews;
   8638     workingS += lfront + lolds;
   8639   }
   8640 
   8641   // copy end of string
   8642   strcpy(tmp, workingS);
   8643 
   8644   free(*s);
   8645   *s = r;
   8646   return(r);
   8647 }
   8648 
   8649 char *iicReplaceCharSS(char **s, char olds, const char *news, size_t max) {
   8650 
   8651   charToS(p, olds);
   8652   return(iicReplaceS(s, p, news, max));
   8653 }
   8654 
   8655 char *iicReplaceSCharS(char **s, const char *olds, char news, size_t max) {
   8656 
   8657   charToS(p, news);
   8658   return(iicReplaceS(s, olds, p, max));
   8659 }
   8660 
   8661 char *iicReplaceCharCharS(char **s, char olds, char news, size_t max) {
   8662 
   8663   charToS(p, olds);
   8664   charToS(n, news);
   8665   return(iicReplaceS(s, p, n, max));
   8666 }
   8667 
   8668 /**
   8669  * buffer ignore case replace String
   8670  * the olds string is replaced with the news string max times in the result
   8671  * 0 for max means replace all olds strings
   8672  *
   8673  * \param
   8674  *   s: string
   8675  *   olds: old string to be replaced in s
   8676  *   news: new string replacing olds in s
   8677  *   max: number of times to replace olds, 0 to replace all found olds
   8678  * \return
   8679  *   modified s string
   8680  *   NULL s not modified when s is NULL or empty and when olds is empty
   8681  */
   8682 char* bicReplaceS(char *s, const char *olds, const char *news, size_t max ) {
   8683   char *r = NULL;
   8684   char *tmp = NULL;
   8685   char *workingS = NULL;
   8686   // ins is next insert point
   8687   char *ins = NULL;
   8688   size_t count;
   8689   size_t lfront;
   8690 
   8691   // sanity checks and initialization
   8692   // count the number of replacements needed
   8693   // allocate result
   8694   // replace olds with news
   8695   // copy end of string
   8696 
   8697   // sanity checks and initialization
   8698   if (!s) {
   8699     return(NULL);
   8700   }
   8701   if (isEmptyS(s)) {
   8702     // s is empty, do nothing
   8703     return(NULL);
   8704   }
   8705   if (!olds) {
   8706     return(NULL);
   8707   }
   8708   size_t lolds;
   8709   lolds = strlen(olds);
   8710   if (!lolds) {
   8711     // empty olds causes infinite loop
   8712     return(NULL);
   8713   }
   8714   if (!news) {
   8715     // empty string for NULL
   8716     news = "";
   8717   }
   8718 
   8719   // count the number of replacements needed
   8720   ins = workingS = s;
   8721   for (count = 0 ; (tmp = strcasestr(ins, olds)) ; ++count) {
   8722      ins = tmp + lolds;
   8723      if (max && (count == max)) {
   8724        // the maximum number is replacements is reached, stop
   8725        break;
   8726   }
   8727      }
   8728 
   8729 
   8730   size_t lnews;
   8731   lnews       = strlen(news);
   8732 
   8733   // allocate result
   8734   size_t rLen = strlen(s) + (lnews - lolds) * count + 1;;
   8735   tmp = r     = MALLOC(rLen);
   8736   if (!r) {
   8737     return(NULL);
   8738   }
   8739 
   8740   // replace olds with news
   8741   // ins points to the start of olds in s
   8742   // tmp is the front of s, tmp points the end of s front in r
   8743   // copy news to tmp, tmp points the end of news in r
   8744   // s is the remainder of s after end of olds
   8745   while (count--) {
   8746     ins       = strcasestr(workingS, olds);
   8747     lfront    = (size_t)(ins - workingS);
   8748     tmp       = strncpy(tmp, workingS, lfront) + lfront;
   8749     tmp       = strcpy(tmp, news) + lnews;
   8750     workingS += lfront + lolds;
   8751   }
   8752 
   8753   // copy end of string
   8754   strcpy(tmp, workingS);
   8755 
   8756   strcpy(s, r);
   8757   free(r);
   8758   return(s);
   8759 }
   8760 
   8761 /**
   8762  * buffer size ignore case replace String
   8763  * the olds string is replaced with the news string max times in the result
   8764  * 0 for max means replace all olds strings
   8765  *
   8766  * \param
   8767  *   s: string
   8768  *   olds: old string to be replaced in s
   8769  *   news: new string replacing olds in s
   8770  *   max: number of times to replace olds, 0 to replace all found olds
   8771  * \return
   8772  *   modified s string
   8773  *   NULL s not modified when s is NULL or empty and when olds is empty
   8774  */
   8775 char* bLicReplaceS(char *s, size_t sSize, const char *olds, const char *news, size_t max) {
   8776   char *r = NULL;
   8777   char *tmp = NULL;
   8778   char *workingS = NULL;
   8779   // ins is next insert point
   8780   char *ins = NULL;
   8781   size_t count;
   8782   size_t lfront;
   8783 
   8784   // sanity checks and initialization
   8785   // count the number of replacements needed
   8786   // allocate result
   8787   // replace olds with news
   8788   // copy end of string
   8789 
   8790   // sanity checks and initialization
   8791   if (!s) {
   8792     return(NULL);
   8793   }
   8794   if (!sSize) {
   8795     // size 0 - no change
   8796     return(s);
   8797   }
   8798   if (isEmptyS(s)) {
   8799     // s is empty, do nothing
   8800     return(NULL);
   8801   }
   8802   if (!olds) {
   8803     return(NULL);
   8804   }
   8805   size_t lolds;
   8806   lolds = strlen(olds);
   8807   if (!lolds) {
   8808     // empty olds causes infinite loop
   8809     return(NULL);
   8810   }
   8811   if (!news) {
   8812     // empty string for NULL
   8813     news = "";
   8814   }
   8815 
   8816   // count the number of replacements needed
   8817   ins = workingS = s;
   8818   for (count = 0 ; (tmp = strcasestr(ins, olds)) ; ++count) {
   8819      ins = tmp + lolds;
   8820      if (max && (count == max)) {
   8821        // the maximum number is replacements is reached, stop
   8822        break;
   8823   }
   8824      }
   8825 
   8826 
   8827   size_t lnews;
   8828   lnews       = strlen(news);
   8829 
   8830   // allocate result
   8831   size_t rLen = strlen(s) + (lnews - lolds) * count + 1;;
   8832   tmp = r     = MALLOC(rLen);
   8833   if (!r) {
   8834     return(NULL);
   8835   }
   8836 
   8837   // replace olds with news
   8838   // ins points to the start of olds in s
   8839   // tmp is the front of s, tmp points the end of s front in r
   8840   // copy news to tmp, tmp points the end of news in r
   8841   // s is the remainder of s after end of olds
   8842   while (count--) {
   8843     ins       = strcasestr(workingS, olds);
   8844     lfront    = (size_t)(ins - workingS);
   8845     tmp       = strncpy(tmp, workingS, lfront) + lfront;
   8846     tmp       = strcpy(tmp, news) + lnews;
   8847     workingS += lfront + lolds;
   8848   }
   8849 
   8850   // copy end of string
   8851   strcpy(tmp, workingS);
   8852 
   8853   pErrorNULL(strLCpy(s, sSize, r));
   8854   free(r);
   8855   return(s);
   8856 }
   8857 
   8858 /**
   8859  * ignore case replace Many Strings
   8860  * the original remains unchanged
   8861  * duplicate s
   8862  * the olds string is replaced with the news string max times in the result
   8863  *
   8864  * Example:
   8865  * r = icReplaceManyS("asd", "s",  "BNM", "a",  "AAA")
   8866  *                           ^olds ^news  ^olds ^news
   8867  *
   8868  * \param
   8869  *   s: string
   8870  *   olds: old string to be replaced in s
   8871  *   news: new string replacing olds in s
   8872  *   ...
   8873  * \return
   8874  *   new string (you must free the pointer)
   8875  *   "" when s is empty
   8876  *   NULL when s is NULL
   8877  *   NULL when only 2 parameters are given
   8878  *   NULL when any olds is empty
   8879  */
   8880 char *icReplaceManySF(const char *paramType, ...) {
   8881   va_list pl;
   8882   char *r = NULL;
   8883   char *param = NULL;
   8884   char *workingS = NULL;
   8885   char *olds = NULL;
   8886   char *news = NULL;
   8887 
   8888   // sanity checks
   8889   if (!paramType) {
   8890     return(NULL);
   8891   }
   8892 
   8893   if (isEmptyS(paramType)) {
   8894     return(emptySF());
   8895   }
   8896 
   8897   workingS = strdup(paramType);
   8898 
   8899   // add arguments to a list
   8900   va_start(pl, paramType);
   8901   param = va_arg(pl, char *);
   8902   while (param) {
   8903     if (!olds) {
   8904       olds = param;
   8905     }
   8906     else if (!news) {
   8907       news = param;
   8908       r = icReplaceS(workingS, olds, news, 0);
   8909       free(workingS);
   8910       olds = NULL;
   8911       news = NULL;
   8912       workingS = r;
   8913     }
   8914     param = va_arg(pl, char *);
   8915   }
   8916   va_end(pl);
   8917   if (!r) {
   8918     free(workingS);
   8919   }
   8920   return(r);
   8921 }
   8922 
   8923 /**
   8924  * in place ignore case replace Many Strings
   8925  * the olds string is replaced with the news string max times in the result
   8926  *
   8927  * Example:
   8928  * iicReplaceManyS(s, "s",  "BNM", "a",  "AAA")
   8929  *                     ^olds ^news  ^olds ^news
   8930  *
   8931  * \param
   8932  *   string (this parameter is reallocated)
   8933  *   olds: old string to be replaced in s
   8934  *   news: new string replacing olds in s
   8935  *   ...
   8936  * \return
   8937  *   modified string (you must free the pointer)
   8938  *   NULL not modified when s is empty, when s is NULL, when only 2 parameters are given,
   8939  *     when any olds is empty
   8940  */
   8941 char *iicReplaceManySF(char **s, char *paramType, ...) {
   8942   va_list pl;
   8943   char *olds = NULL;
   8944   char *news = NULL;
   8945 
   8946   // sanity checks
   8947   if (!s || !*s) {
   8948     return(NULL);
   8949   }
   8950 
   8951   if (isEmptyS(*s)) {
   8952     return(NULL);
   8953   }
   8954 
   8955   olds = paramType;;
   8956 
   8957   // add arguments to a list
   8958   va_start(pl, paramType);
   8959   paramType = va_arg(pl, char *);
   8960   while (paramType) {
   8961     if (!olds) {
   8962       olds = paramType;
   8963     }
   8964     else if (!news) {
   8965       news = paramType;
   8966       pErrorNULL(iicReplaceS(s, olds, news, 0));
   8967       olds = NULL;
   8968       news = NULL;
   8969     }
   8970 
   8971     paramType = va_arg(pl, char *);
   8972   }
   8973   va_end(pl);
   8974   return(*s);
   8975 }
   8976 
   8977 /**
   8978  * buffer ignore case replace Many Strings
   8979  * the olds string is replaced with the news string max times in the result
   8980  *
   8981  * Example:
   8982  * bReplaceManyS(s, "s",  "BNM", "a",  "AAA")
   8983  *                  ^olds ^news  ^olds ^news
   8984  *
   8985  * \param
   8986  *   string
   8987  *   olds: old string to be replaced in s
   8988  *   news: new string replacing olds in s
   8989  *   ...
   8990  * \return
   8991  *   modified string
   8992  *   NULL not modified when s is empty, when s is NULL, when only 2 parameters are given,
   8993  *     when any olds is empty
   8994  */
   8995 char *bicReplaceManySF(char *s, char *paramType, ...) {
   8996   va_list pl;
   8997   char *olds = NULL;
   8998   char *news = NULL;
   8999 
   9000   // sanity checks
   9001   if (!s) {
   9002     return(NULL);
   9003   }
   9004 
   9005   if (isEmptyS(s)) {
   9006     return(NULL);
   9007   }
   9008 
   9009   olds = paramType;;
   9010 
   9011   // add arguments to a list
   9012   va_start(pl, paramType);
   9013   paramType = va_arg(pl, char *);
   9014   while (paramType) {
   9015     if (!olds) {
   9016       olds = paramType;
   9017     }
   9018     else if (!news) {
   9019       news = paramType;
   9020       pErrorNULL(bicReplaceS(s, olds, news, 0));
   9021       olds = NULL;
   9022       news = NULL;
   9023     }
   9024 
   9025     paramType = va_arg(pl, char *);
   9026   }
   9027   va_end(pl);
   9028   return(s);
   9029 }
   9030 
   9031 /**
   9032  * buffer size ignore case replace Many Strings
   9033  * the olds string is replaced with the news string max times in the result
   9034  *
   9035  * Example:
   9036  * bReplaceManyS(s, "s",  "BNM", "a",  "AAA")
   9037  *                   ^olds ^news  ^olds ^news
   9038  *
   9039  * \param
   9040  *   string
   9041  *   olds: old string to be replaced in s
   9042  *   news: new string replacing olds in s
   9043  *   ...
   9044  * \return
   9045  *   modified string
   9046  *   NULL not modified when s is empty, when s is NULL, when only 2 parameters are given,
   9047  *     when any olds is empty
   9048  */
   9049 char *bLicReplaceManySF(char *s, size_t sSize, char *paramType, ...) {
   9050   va_list pl;
   9051   char *olds = NULL;
   9052   char *news = NULL;
   9053 
   9054   // sanity checks
   9055   if (!s) {
   9056     return(NULL);
   9057   }
   9058 
   9059   if (!sSize) {
   9060     return(s);
   9061   }
   9062 
   9063   if (isEmptyS(s)) {
   9064     return(NULL);
   9065   }
   9066 
   9067   olds = paramType;;
   9068 
   9069   // add arguments to a list
   9070   va_start(pl, paramType);
   9071   paramType = va_arg(pl, char *);
   9072   while (paramType) {
   9073     if (!olds) {
   9074       olds = paramType;
   9075     }
   9076     else if (!news) {
   9077       news = paramType;
   9078       pErrorNULL(bLicReplaceS(s, sSize, olds, news, 0));
   9079       olds = NULL;
   9080       news = NULL;
   9081     }
   9082 
   9083     paramType = va_arg(pl, char *);
   9084   }
   9085   va_end(pl);
   9086   return(s);
   9087 }
   9088 
   9089 
   9090 /**
   9091  * string Equal
   9092  * compare string1 to string2
   9093  *
   9094  * \param
   9095  *   2 strings
   9096  * \return
   9097  *   true the strings have identical content
   9098  *   false they differ
   9099  */
   9100 bool eqS(const char *string1, const char *string2) {
   9101 
   9102   // sanity checks
   9103   if (!string1 || !string2) {
   9104     return(false);
   9105   }
   9106   return(strcmp(string1,string2) == 0);;
   9107 }
   9108 
   9109 bool eqCharS(char c, const char *string2) {
   9110 
   9111   // sanity checks
   9112   if (!string2) {
   9113     return(false);
   9114   }
   9115   charToS(s, c);
   9116   return(strcmp(s,string2) == 0);;
   9117 }
   9118 
   9119 bool eqSChar(const char *string1, char c) {
   9120 
   9121   // sanity checks
   9122   if (!string1) {
   9123     return(false);
   9124   }
   9125   charToS(s, c);
   9126   return(strcmp(string1,s) == 0);;
   9127 }
   9128 
   9129 /**
   9130  * string Index Equal
   9131  * compare string1 at index to string2
   9132  * when string2 is empty, the result is false
   9133  *
   9134  * \param
   9135  *   2 strings
   9136  * \return
   9137  *   true string1 at index is equal to string2
   9138  *   false they differ
   9139  */
   9140 bool eqIS(const char *string1, const char *string2, int64_t index) {
   9141 
   9142   // sanity checks
   9143   if (!string1 || !string2) {
   9144     return(false);
   9145   }
   9146 
   9147   int64_t len = (int64_t)strlen(string1);
   9148   if (index >= len && len) {
   9149     // && len: string1 is empty, check below if string2 is also empty
   9150     // when string1 and string2 are empty and index is 0, the result is true
   9151     return(false);
   9152   }
   9153   if (index < -len) {
   9154     return(false);
   9155   }
   9156   if (index < 0) {
   9157     index = len + index;
   9158   }
   9159 
   9160   int64_t len2 = (int64_t)strlen(string2);
   9161   if (!len2 && !len && !index) {
   9162     // string1 and string2 are empty and index is 0
   9163     return(true);
   9164   }
   9165   if (!len2) {
   9166     return(false);
   9167   }
   9168   if (index > (len - len2)) {
   9169     return(false);
   9170   }
   9171 
   9172   return(strncmp(string1 + index, string2, (size_t)len2) == 0);;
   9173 }
   9174 
   9175 bool eqICharS(const char *string1, char c, int64_t index) {
   9176 
   9177   charToS(s,c);
   9178   return(eqIS(string1, s, index));
   9179 }
   9180 
   9181 /**
   9182  * starts With String
   9183  * compare start of string1 with string2
   9184  *
   9185  * \param
   9186  *   2 strings
   9187  * \return
   9188  *   true when string1 starts with string2
   9189  *   false for other cases
   9190  */
   9191 bool startsWithS(const char *string1, const char *string2) {
   9192 
   9193   // sanity checks
   9194   if (!string1 || !string2) {
   9195     return(false);
   9196   }
   9197   return(strncmp(string1, string2, strlen(string2)) == 0);;
   9198 }
   9199 
   9200 bool startsWithCharS(const char *string1, char c) {
   9201 
   9202   if (!string1) {
   9203     return(false);
   9204   }
   9205   return(*string1 == c);;
   9206 }
   9207 
   9208 /**
   9209  * ends With String
   9210  * compare end of string1 with string2
   9211  *
   9212  * \param
   9213  *   2 strings
   9214  * \return
   9215  *   true when string1 ends with string2
   9216  *   false for other cases
   9217  */
   9218 bool endsWithS(const char *string1, const char *string2) {
   9219 
   9220   // sanity checks
   9221   if (!string1 || !string2) {
   9222     return(false);
   9223   }
   9224 
   9225   if (strlen(string1) < strlen(string2)) {
   9226     return(false);
   9227   }
   9228   return(strcmp(string1 + strlen(string1) - strlen(string2), string2) == 0);;
   9229 }
   9230 
   9231 bool endsWithCharS(const char *string1, char c) {
   9232 
   9233   // sanity checks
   9234   if (!string1) {
   9235     return(false);
   9236   }
   9237 
   9238   if (!strlen(string1) && !c) {
   9239     // string1 is empty and c is 0
   9240     return(true);
   9241   }
   9242   if (!strlen(string1)) {
   9243     return(false);
   9244   }
   9245   return(*(string1+strlen(string1)-1) == c);;
   9246 }
   9247 
   9248 /**
   9249  * count String
   9250  * count number of (non-overlapping) occurrences of a substring
   9251  *
   9252  * Example:
   9253  *   assert(countS("aaa aaa", "a") == 6);
   9254  *   assert(countS("aaa aaa", "ab") == 0);
   9255  *   assert(countS("aaa aaa", "aa") == 2);
   9256  *
   9257  * \param
   9258  *   2 strings
   9259  * \return
   9260  *   string count
   9261  *   -1 when there is an error
   9262  */
   9263 ssize_t countS(const char *s, const char *needle) {
   9264 
   9265   // sanity checks
   9266   if (!s || !needle || !needle[0]) {
   9267     return(-1);
   9268   }
   9269 
   9270   ssize_t r  = 0;
   9271   size_t len = strlen(needle);
   9272 
   9273   while (s != NULL) {
   9274     s = strstr(s, needle);
   9275     if (s != NULL) {
   9276       r++;
   9277       s += len;
   9278     }
   9279     else {
   9280       break;
   9281   }
   9282     }
   9283 
   9284   return(r);
   9285 }
   9286 
   9287 ssize_t countCharS(const char *s, char c) {
   9288 
   9289   // sanity checks
   9290   if (!s || !c) {
   9291     return(-1);
   9292   }
   9293 
   9294   ssize_t r  = 0;
   9295 
   9296   while (*s != 0) {
   9297     if (*s == c) {
   9298       r++;
   9299     }
   9300     s++;
   9301   }
   9302 
   9303   return(r);
   9304 }
   9305 
   9306 /**
   9307  * ignore case string Equal
   9308  * compare string1 to string2
   9309  *
   9310  * \param
   9311  *   2 strings
   9312  * \return
   9313  *   true the strings have identical content
   9314  *   false they differ
   9315  */
   9316 bool icEqS(const char *string1, const char *string2) {
   9317 
   9318   // sanity checks
   9319   if (!string1 || !string2) {
   9320     return(false);
   9321   }
   9322   return(strcasecmp(string1,string2) == 0);;
   9323 }
   9324 
   9325 bool icEqCharS(char c, const char *string2) {
   9326 
   9327   // sanity checks
   9328   if (!string2) {
   9329     return(false);
   9330   }
   9331   charToS(s, c);
   9332   return(strcasecmp(s,string2) == 0);;
   9333 }
   9334 
   9335 bool icEqSChar(const char *string1, char c) {
   9336 
   9337   // sanity checks
   9338   if (!string1) {
   9339     return(false);
   9340   }
   9341   charToS(s, c);
   9342   return(strcasecmp(string1,s) == 0);;
   9343 }
   9344 
   9345 /**
   9346  * ignore case string Index Equal
   9347  * compare string1 at index to string2
   9348  * when string2 is empty, the result is false
   9349  *
   9350  * \param
   9351  *   2 strings
   9352  * \return
   9353  *   true string1 at index is equal to string2
   9354  *   false they differ
   9355  */
   9356 bool icEqIS(const char *string1, const char *string2, int64_t index) {
   9357 
   9358   // sanity checks
   9359   if (!string1 || !string2) {
   9360     return(false);
   9361   }
   9362 
   9363   int64_t len = (int64_t)strlen(string1);
   9364   if (index >= len && len) {
   9365     // && len: string1 is empty, check below if string2 is also empty
   9366     // when string1 and string2 are empty and index is 0, the result is true
   9367     return(false);
   9368   }
   9369   if (index < -len) {
   9370     return(false);
   9371   }
   9372   if (index < 0) {
   9373     index = len + index;
   9374   }
   9375 
   9376   int64_t len2 = (int64_t)strlen(string2);
   9377   if (!len2 && !len && !index) {
   9378     // string1 and string2 are empty and index is 0
   9379     return(true);
   9380   }
   9381   if (!len2) {
   9382     return(false);
   9383   }
   9384   if (index > (len - len2)) {
   9385     return(false);
   9386   }
   9387 
   9388   return(strncasecmp(string1 + index, string2, (size_t)len2) == 0);;
   9389 }
   9390 
   9391 bool icEqICharS(const char *string1, char c, int64_t index) {
   9392 
   9393   charToS(s,c);
   9394   return(icEqIS(string1, s, index));
   9395 }
   9396 
   9397 /**
   9398  * ignore case starts With String
   9399  * compare start of string1 with string2
   9400  *
   9401  * \param
   9402  *   2 strings
   9403  * \return
   9404  *   true when string1 starts with string2
   9405  *   false for other cases
   9406  */
   9407 bool icStartsWithS(const char *string1, const char *string2) {
   9408 
   9409   // sanity checks
   9410   if (!string1 || !string2) {
   9411     return(false);
   9412   }
   9413   return(strncasecmp(string1, string2, strlen(string2)) == 0);;
   9414 }
   9415 
   9416 bool icStartsWithCharS(const char *string1, char c) {
   9417 
   9418   if (!string1) {
   9419     return(false);
   9420   }
   9421   return(toupper(*string1) == toupper(c));;
   9422 }
   9423 
   9424 /**
   9425  * ignore case ends With String
   9426  * compare end of string1 with string2
   9427  *
   9428  * \param
   9429  *   2 strings
   9430  * \return
   9431  *   true when string1 ends with string2
   9432  *   false for other cases
   9433  */
   9434 bool icEndsWithS(const char *string1, const char *string2) {
   9435 
   9436   // sanity checks
   9437   if (!string1 || !string2) {
   9438     return(false);
   9439   }
   9440 
   9441   if (strlen(string1) < strlen(string2)) {
   9442     return(false);
   9443   }
   9444   return(strcasecmp(string1 + strlen(string1) - strlen(string2), string2) == 0);;
   9445 }
   9446 
   9447 bool icEndsWithCharS(const char *string1, char c) {
   9448 
   9449   // sanity checks
   9450   if (!string1) {
   9451     return(false);
   9452   }
   9453 
   9454   if (!strlen(string1) && !c) {
   9455     // string1 is empty and c is 0
   9456     return(true);
   9457   }
   9458   if (!strlen(string1)) {
   9459     return(false);
   9460   }
   9461   return(toupper(*(string1+strlen(string1)-1)) == toupper(c));;
   9462 }
   9463 
   9464 /**
   9465  * ignore case count String
   9466  * count number of (non-overlapping) occurrences of a substring
   9467  *
   9468  * Example:
   9469  *   assert(countS("aaa aaa", "a") == 6);
   9470  *   assert(countS("aaa aaa", "ab") == 0);
   9471  *   assert(countS("aaa aaa", "aa") == 2);
   9472  *
   9473  * \param
   9474  *   2 strings
   9475  * \return
   9476  *   string count
   9477  *   -1 when there is an error
   9478  */
   9479 ssize_t icCountS(const char *s, const char *needle) {
   9480 
   9481   // sanity checks
   9482   if (!s || !needle || !needle[0]) {
   9483     return(-1);
   9484   }
   9485 
   9486   ssize_t r  = 0;
   9487   size_t len = strlen(needle);
   9488 
   9489   while (s != NULL) {
   9490     s = strcasestr(s, needle);
   9491     if (s != NULL) {
   9492       r++;
   9493       s += len;
   9494     }
   9495     else {
   9496       break;
   9497   }
   9498     }
   9499 
   9500   return(r);
   9501 }
   9502 
   9503 ssize_t icCountCharS(const char *s, char c) {
   9504 
   9505   // sanity checks
   9506   if (!s || !c) {
   9507     return(-1);
   9508   }
   9509 
   9510   ssize_t r  = 0;
   9511 
   9512   c = (char)tolower(c);
   9513 
   9514   while (*s != 0) {
   9515     if (tolower(*s) == c) {
   9516       r++;
   9517     }
   9518     s++;
   9519   }
   9520 
   9521   return(r);
   9522 }
   9523 
   9524 /**
   9525  * has control char
   9526  *
   9527  * \return
   9528  *   true when there is a terminal control in string
   9529  */
   9530 bool hasCtrlChar(const char *string) {
   9531 
   9532   if (!string) {
   9533     return(false);
   9534   }
   9535 
   9536   range(i, strlen(string)) {
   9537     if (iscntrl(string[i])) {
   9538       return(true);
   9539     }
   9540   }
   9541 
   9542   return(false);
   9543 }
   9544 
   9545 /**
   9546  * remove terminal control char from string
   9547  *
   9548  * \param
   9549  * string
   9550  * \return
   9551  * new string without the control chars
   9552  * NULL when string is NULL
   9553  */
   9554 char *stripCtrlS(const char *string) {
   9555   char *r = NULL;
   9556 
   9557   if (!string) {
   9558     return(NULL);
   9559   }
   9560 
   9561   size_t len = strlen(string)+1;
   9562   r          = MALLOC(len);
   9563   if (!r) {
   9564     return(NULL);
   9565   }
   9566 
   9567   size_t j   = 0;
   9568   range(i, len) {
   9569     if (!iscntrl(string[i])) {
   9570       r[j++] = string[i];
   9571     }
   9572   }
   9573   r[j] = 0;
   9574   return(r);
   9575 }
   9576 
   9577 /**
   9578  * remove terminal control char from string
   9579  *
   9580  * \param
   9581  * string pointer to a string
   9582  * \return
   9583  * string without the control chars
   9584  * NULL when string is NULL
   9585  */
   9586 char *iStripCtrlS(char **string) {
   9587 
   9588   if (!string || !*string) {
   9589     return(NULL);
   9590   }
   9591 
   9592   size_t i = 0, j = 0;
   9593 
   9594   while ((*string)[i]) {
   9595     if (!iscntrl((*string)[i])) {
   9596       (*string)[j++] = (*string)[i];
   9597     }
   9598     i++;
   9599   }
   9600 
   9601   (*string)[j] = 0;;
   9602   return(*string);
   9603 }
   9604 
   9605 /**
   9606  * remove terminal control char from string
   9607  *
   9608  * \param
   9609  * string
   9610  * \return
   9611  * string without the control chars
   9612  * NULL when string is NULL
   9613  */
   9614 char *bStripCtrlS(char *string) {
   9615 
   9616   if (!string) {
   9617     return(NULL);
   9618   }
   9619 
   9620   size_t i = 0, j = 0;
   9621 
   9622   while (string[i]) {
   9623     if (!iscntrl(string[i])) {
   9624       string[j++] = string[i];
   9625     }
   9626     i++;
   9627   }
   9628 
   9629   string[j] = 0;;
   9630   return(string);
   9631 }
   9632 
   9633 /**
   9634  * remove ansi colors from string
   9635  *
   9636  * \param
   9637  * string
   9638  * \return
   9639  * new string without colors
   9640  * NULL when string is NULL
   9641  */
   9642 char *stripColorsS(const char *string) {
   9643   char *r = NULL;
   9644 
   9645   if (!string) {
   9646     return(NULL);
   9647   }
   9648 
   9649   size_t len = strlen(string);
   9650   r          = MALLOC(len+1);
   9651   if (!r) {
   9652     return(NULL);
   9653   }
   9654 
   9655   size_t j       = 0;
   9656   uint16_t state = 0;
   9657   range(i, len) {
   9658     char ch = string[i];
   9659     // suppress \r only when followed by \n
   9660     if (state == 1) {
   9661       if (ch != 0x0d) {
   9662         state = 0;
   9663       }
   9664       if (ch != 0x0a) {
   9665         r[j++] = 0x0d;
   9666     }
   9667       }
   9668     if (state == 0 && ch == 0x0d) {
   9669       state = 1;
   9670     }
   9671     // strip colors
   9672     if (state == 5) {
   9673       state = 0;
   9674       continue;
   9675     }
   9676     if (state == 4) {
   9677       if (ch == 7) {
   9678         state = 0;
   9679         continue;
   9680       }
   9681       elif (ch == 0x1b) {
   9682         state = 5;
   9683     }
   9684       }
   9685     if (state == 3) {
   9686       if (ch != ';' && (ch < '0' || ch > '9') && ch != '?') {
   9687         state = 0;
   9688         continue;
   9689     }
   9690       }
   9691     if (state == 2) {
   9692       if (ch == '[') {
   9693         state = 3;
   9694       }
   9695       elif (ch == ']' && string[i+1] <= '9') {
   9696         state = 4;
   9697       }
   9698       elif (ch == '%') {
   9699         state = 0;
   9700         continue;
   9701     }
   9702       }
   9703     if (state == 0 && ch == 0x1b) {
   9704       state = 2;
   9705     }
   9706     if (state == 0) {
   9707       r[j++] = ch;
   9708     }
   9709   }
   9710   r[j] = 0;
   9711   return(r);
   9712 }
   9713 
   9714 /**
   9715  * remove ansi colors from string
   9716  *
   9717  * \param
   9718  * string pointer to a string
   9719  * \return
   9720  * string without the control chars
   9721  * NULL when string is NULL
   9722  */
   9723 char *iStripColorsS(char **string) {
   9724 
   9725   if (!string || !*string) {
   9726     return(NULL);
   9727   }
   9728 
   9729   size_t i = 0, j = 0;
   9730   uint16_t state = 0;
   9731 
   9732   while ((*string)[i]) {
   9733     char ch = (*string)[i];
   9734     // suppress \r only when followed by \n
   9735     if (state == 1) {
   9736       if (ch != 0x0d) {
   9737         state = 0;
   9738       }
   9739       if (ch != 0x0a) {
   9740         (*string)[j++] = 0x0d;
   9741     }
   9742       }
   9743     if (state == 0 && ch == 0x0d) {
   9744       state = 1;
   9745     }
   9746     // strip colors
   9747     if (state == 5) {
   9748       state = 0;
   9749       goto cont;
   9750     }
   9751     if (state == 4) {
   9752       if (ch == 7) {
   9753         state = 0;
   9754         goto cont;
   9755       }
   9756       elif (ch == 0x1b) {
   9757         state = 5;
   9758     }
   9759       }
   9760     if (state == 3) {
   9761       if (ch != ';' && (ch < '0' || ch > '9') && ch != '?') {
   9762         state = 0;
   9763         goto cont;
   9764     }
   9765       }
   9766     if (state == 2) {
   9767       if (ch == '[') {
   9768         state = 3;
   9769       }
   9770       elif (ch == ']' && (*string)[i+1] <= '9') {
   9771         state = 4;
   9772       }
   9773       elif (ch == '%') {
   9774         state = 0;
   9775         goto cont;
   9776     }
   9777       }
   9778     if (state == 0 && ch == 0x1b) {
   9779       state = 2;
   9780     }
   9781     if (state == 0) {
   9782       (*string)[j++] = ch;
   9783     }
   9784     cont:
   9785     i++;
   9786   }
   9787 
   9788   (*string)[j] = 0;
   9789   return(*string);
   9790 }
   9791 
   9792 /**
   9793  * remove terminal control char from string
   9794  *
   9795  * \param
   9796  * string
   9797  * \return
   9798  * string without the control chars
   9799  * NULL when string is NULL
   9800  */
   9801 char *bStripColorsS(char *string) {
   9802 
   9803   if (!string) {
   9804     return(NULL);
   9805   }
   9806 
   9807   size_t i = 0, j = 0;
   9808   uint16_t state = 0;
   9809 
   9810   while (string[i]) {
   9811     char ch = string[i];
   9812     // suppress \r only when followed by \n
   9813     if (state == 1) {
   9814       if (ch != 0x0d) {
   9815         state = 0;
   9816       }
   9817       if (ch != 0x0a) {
   9818         string[j++] = 0x0d;
   9819     }
   9820       }
   9821     if (state == 0 && ch == 0x0d) {
   9822       state = 1;
   9823     }
   9824     // strip colors
   9825     if (state == 5) {
   9826       state = 0;
   9827       goto cont;
   9828     }
   9829     if (state == 4) {
   9830       if (ch == 7) {
   9831         state = 0;
   9832         goto cont;
   9833       }
   9834       elif (ch == 0x1b) {
   9835         state = 5;
   9836     }
   9837       }
   9838     if (state == 3) {
   9839       if (ch != ';' && (ch < '0' || ch > '9') && ch != '?') {
   9840         state = 0;
   9841         goto cont;
   9842     }
   9843       }
   9844     if (state == 2) {
   9845       if (ch == '[') {
   9846         state = 3;
   9847       }
   9848       elif (ch == ']' && string[i+1] <= '9') {
   9849         state = 4;
   9850       }
   9851       elif (ch == '%') {
   9852         state = 0;
   9853         goto cont;
   9854     }
   9855       }
   9856     if (state == 0 && ch == 0x1b) {
   9857       state = 2;
   9858     }
   9859     if (state == 0) {
   9860       string[j++] = ch;
   9861     }
   9862     cont:
   9863     i++;
   9864   }
   9865 
   9866   string[j] = 0;
   9867   return(string);
   9868 }
   9869 
   9870 
   9871 /**
   9872  * add backslash '\' before delim('\'' or '"') and backslash
   9873  * the backslashes in the result avoid splitting the string
   9874  * when it is in a source file or a json string
   9875  * \param
   9876  *   s string to escape
   9877  * \param
   9878  *   delim string delimiter ' or "
   9879  * \return
   9880  *   new string with escape backslash (free this buffer)
   9881  *   null when s is null
   9882  */
   9883 char* quoteS(const char *s, char delim) {
   9884   char *r = NULL;
   9885 
   9886   // steps
   9887   // sanity check
   9888   // compute result string length to allocate the buffer once
   9889   // copy s and add the bashslashes
   9890   // terminate the result string
   9891 
   9892   // sanity check
   9893   if (!s) {
   9894     return(null);
   9895   }
   9896   char delims[3]  = {delim, '\\', 0/*terminate accept string for strpbrk*/};
   9897 
   9898   // compute result string length to allocate the buffer once
   9899   size_t count    = 0;
   9900   const char *tmp = s;
   9901   tmp             = strpbrk(tmp, delims);
   9902   while (tmp) {
   9903     inc count;
   9904     inc tmp;
   9905     tmp = strpbrk(tmp, delims);
   9906   }
   9907 
   9908   if (!count) {
   9909     return(strdup(s));
   9910   }
   9911 
   9912   r = malloc(strlen(s) + 1 + count);
   9913   if (not r) {
   9914     return(null);
   9915   }
   9916 
   9917   // copy s and add the bashslashes
   9918   size_t i = 0;
   9919   while (*s) {
   9920     if (*s == delims[0] or *s == delims[1]) {
   9921       r[i++] = '\\';
   9922     }
   9923     r[i++] = *s;
   9924     inc s;
   9925   }
   9926 
   9927   // terminate the result string
   9928   r[i] = 0;
   9929   return(r);
   9930 }
   9931 
   9932 
   9933 /**
   9934  * add backslash '\' before delim('\'' or '"') and backslash
   9935  * the backslashes in the result avoid splitting the string
   9936  * when it is in a source file or a json string
   9937  * \param
   9938  *   dest destination buffer, it should be big enough
   9939  * \param
   9940  *   s string to escape
   9941  * \param
   9942  *   delim string delimiter ' or "
   9943  * \return
   9944  *   new string with escape backslash (free this buffer)
   9945  *   null when s is null
   9946  */
   9947 char* bQuoteS(char *dest, const char *s, char delim) {
   9948 
   9949   // steps
   9950   // sanity check
   9951   // copy s and add the bashslashes
   9952   // terminate the result string
   9953 
   9954   // sanity check
   9955   if (!s or !dest) {
   9956     return(null);
   9957   }
   9958   char delims[3]  = {delim, '\\', 0/*terminate accept string for strpbrk*/};
   9959 
   9960   // copy s and add the bashslashes
   9961   size_t i = 0;
   9962   while (*s) {
   9963     if (*s == delims[0] or *s == delims[1]) {
   9964       dest[i++] = '\\';
   9965     }
   9966     dest[i++] = *s;
   9967     inc s;
   9968   }
   9969 
   9970   // terminate the result string
   9971   dest[i] = 0;
   9972   return(dest);
   9973 }
   9974 
   9975 
   9976 /**
   9977  * add backslash '\' before delim('\'' or '"') and backslash
   9978  * the backslashes in the result avoid splitting the string
   9979  * when it is in a source file or a json string
   9980  * \param
   9981  *   dest destination buffer
   9982  * \param
   9983  *   destSize destination buffer size
   9984  * \param
   9985  *   s string to escape
   9986  * \param
   9987  *   delim string delimiter ' or "
   9988  * \return
   9989  *   new string with escape backslash (free this buffer)
   9990  *   null when s is null
   9991  */
   9992 char* bLQuoteS(char *dest, size_t destSize, const char *s, char delim) {
   9993 
   9994   // steps
   9995   // sanity check
   9996   // copy s and add the bashslashes
   9997   // terminate the result string
   9998 
   9999   // sanity check
  10000   if (!s or !dest or !destSize) {
  10001     return(null);
  10002   }
  10003   char delims[3]  = {delim, '\\', 0/*terminate accept string for strpbrk*/};
  10004 
  10005   // copy s and add the bashslashes
  10006   size_t i = 0;
  10007   while (*s) {
  10008     bool isBackslash = no;
  10009     if (*s == delims[0] or *s == delims[1]) {
  10010       dest[i++] = '\\';
  10011       if (i >= destSize) {
  10012         // end of dest buffer is reached
  10013         dec i;
  10014         break;
  10015       }
  10016       isBackslash = yes;
  10017     }
  10018     dest[i++] = *s;
  10019     if (i >= destSize) {
  10020       // end of dest buffer is reached
  10021       dec i;
  10022       // remove backslash
  10023       if (isBackslash) {
  10024         dec i;
  10025       }
  10026       break;
  10027     }
  10028     inc s;
  10029   }
  10030 
  10031   // terminate the result string
  10032   dest[i] = 0;
  10033   return(dest);
  10034 }
  10035 
  10036 
  10037 /**
  10038  * return the length of the escaped string (without the terminating \0)
  10039  */
  10040 size_t quoteLenS(const char *s, char delim) {
  10041   size_t r = 0;;
  10042 
  10043   if (!s) {
  10044     return(0);
  10045   }
  10046   char delims[3]  = {delim, '\\', 0/*terminate accept string for strpbrk*/};
  10047 
  10048   // compute result string length to allocate the buffer once
  10049   const char *tmp = s;
  10050   tmp             = strpbrk(tmp, delims);
  10051   while (tmp) {
  10052     inc r;
  10053     inc tmp;
  10054     tmp = strpbrk(tmp, delims);
  10055   }
  10056 
  10057   r += strlen(s);
  10058   return(r);
  10059 }
  10060 
  10061 
  10062 /**
  10063  * escape string according the json specification (RFC 8259)
  10064  * if there is \uNNNN in the string, the backslash is escaped and it will
  10065  * be parsed as the string '\uNNNN' be the json parsers
  10066  * the unicode characters should be converted to UTF8 codepoints instead of
  10067  * using \uNNNN
  10068  * the result can be included in a json string and the parsing
  10069  * will be correct
  10070  * \param
  10071  *   s string to escape
  10072  * \param
  10073  *   delim string delimiter ' or "
  10074  * \return
  10075  *   new string with escape backslash (free this buffer)
  10076  *   null when s is null
  10077  */
  10078 char* escapeS(const char *s, char delim) {
  10079   char *r = NULL;
  10080 
  10081   // steps
  10082   // sanity check
  10083   // compute result string length to allocate the buffer once
  10084   // copy s and add the bashslashes
  10085   // terminate the result string
  10086 
  10087   // sanity check
  10088   if (!s) {
  10089     return(null);
  10090   }
  10091   char delims[]   = {delim, '\\', '\b', '\f', '\n', '\r', '\t', 0/*terminate accept string for strpbrk*/};
  10092 
  10093   // compute result string length to allocate the buffer once
  10094   size_t count    = 0;
  10095   const char *tmp = s;
  10096   tmp             = strpbrk(tmp, delims);
  10097   while (tmp) {
  10098     inc count;
  10099     inc tmp;
  10100     tmp = strpbrk(tmp, delims);
  10101   }
  10102 
  10103   if (!count) {
  10104     return(strdup(s));
  10105   }
  10106   r = malloc(strlen(s) + 1 + count);
  10107   if (not r) {
  10108     return(null);
  10109   }
  10110 
  10111   // copy s and add the bashslashes
  10112   size_t i = 0;
  10113   while (*s) {
  10114     arange(j, delims) {
  10115       if (*s  == delims[j]) {
  10116         r[i++] = '\\';
  10117         break;
  10118       }
  10119     }
  10120     switch (*s) {
  10121       case '\b':
  10122         r[i++] = 'b';
  10123         break;
  10124       case '\f':
  10125         r[i++] = 'f';
  10126         break;
  10127       case '\n':
  10128         r[i++] = 'n';
  10129         break;
  10130       case '\r':
  10131         r[i++] = 'r';
  10132         break;
  10133       case '\t':
  10134         r[i++] = 't';
  10135         break;
  10136       default:
  10137         r[i++] = *s;
  10138         break;
  10139     }
  10140     inc s;
  10141   }
  10142 
  10143   // terminate the result string
  10144   r[i] = 0;
  10145   return(r);
  10146 }
  10147 
  10148 
  10149 /**
  10150  * escape string according the json specification (RFC 8259)
  10151  * if there is \uNNNN in the string, the backslash is escaped and it will
  10152  * be parsed as the string '\uNNNN' be the json parsers
  10153  * the unicode characters should be converted to UTF8 codepoints instead of
  10154  * using \uNNNN
  10155  * the result can be included in a json string and the parsing
  10156  * will be correct
  10157  * \param
  10158  *   dest destination buffer
  10159  * \param
  10160  *   s string to escape
  10161  * \param
  10162  *   delim string delimiter ' or "
  10163  * \return
  10164  *   new string with escape backslash (free this buffer)
  10165  *   null when s is null
  10166  */
  10167 char* bEscapeS(char *dest, const char *s, char delim) {
  10168 
  10169   // steps
  10170   // sanity check
  10171   // copy s and add the bashslashes
  10172   // terminate the result string
  10173 
  10174   // sanity check
  10175   if (!s or !dest) {
  10176     return(null);
  10177   }
  10178   char delims[]   = {delim, '\\', '\b', '\f', '\n', '\r', '\t', 0/*terminate accept string for strpbrk*/};
  10179 
  10180   // copy s and add the bashslashes
  10181   size_t i = 0;
  10182   while (*s) {
  10183     arange(j, delims) {
  10184       if (*s == delims[j]) {
  10185         dest[i++] = '\\';
  10186         break;
  10187       }
  10188     }
  10189     switch(*s) {
  10190       case '\b':
  10191         dest[i++] = 'b';
  10192         break;
  10193       case '\f':
  10194         dest[i++] = 'f';
  10195         break;
  10196       case '\n':
  10197         dest[i++] = 'n';
  10198         break;
  10199       case '\r':
  10200         dest[i++] = 'r';
  10201         break;
  10202       case '\t':
  10203         dest[i++] = 't';
  10204         break;
  10205       default:
  10206         dest[i++] = *s;
  10207         break;
  10208     }
  10209     inc s;
  10210   }
  10211 
  10212   // terminate the result string
  10213   dest[i] = 0;
  10214   return(dest);
  10215 }
  10216 
  10217 
  10218 /**
  10219  * escape string according the json specification (RFC 8259)
  10220  * if there is \uNNNN in the string, the backslash is escaped and it will
  10221  * be parsed as the string '\uNNNN' be the json parsers
  10222  * the unicode characters should be converted to UTF8 codepoints instead of
  10223  * using \uNNNN
  10224  * the result can be included in a json string and the parsing
  10225  * will be correct
  10226  * \param
  10227  *   dest destination buffer
  10228  * \param
  10229  *   destSize destination buffer size
  10230  * \param
  10231  *   s string to escape
  10232  * \param
  10233  *   delim string delimiter ' or "
  10234  * \return
  10235  *   new string with escape backslash (free this buffer)
  10236  *   null when s is null
  10237  */
  10238 char* bLEscapeS(char *dest, size_t destSize, const char *s, char delim) {
  10239 
  10240   // steps
  10241   // sanity check
  10242   // copy s and add the bashslashes
  10243   // terminate the result string
  10244 
  10245   // sanity check
  10246   if (!s or !dest or !destSize) {
  10247     return(null);
  10248   }
  10249   char delims[]   = {delim, '\\', '\b', '\f', '\n', '\r', '\t', 0/*terminate accept string for strpbrk*/};
  10250 
  10251   // copy s and add the bashslashes
  10252   size_t i = 0;
  10253   while (*s) {
  10254     bool isBackslash = no;
  10255     arange(j, delims) {
  10256       if (*s == delims[j]) {
  10257         dest[i++] = '\\';
  10258         if (i >= destSize) {
  10259           // end of dest buffer is reached
  10260           dec i;
  10261           goto end;
  10262         }
  10263         isBackslash = yes;
  10264         break;
  10265       }
  10266     }
  10267     switch(*s) {
  10268       case '\b':
  10269         dest[i++] = 'b';
  10270         break;
  10271       case '\f':
  10272         dest[i++] = 'f';
  10273         break;
  10274       case '\n':
  10275         dest[i++] = 'n';
  10276         break;
  10277       case '\r':
  10278         dest[i++] = 'r';
  10279         break;
  10280       case '\t':
  10281         dest[i++] = 't';
  10282         break;
  10283       default:
  10284         dest[i++] = *s;
  10285         break;
  10286     }
  10287     if (i >= destSize) {
  10288       // end of dest buffer is reached
  10289       dec i;
  10290       // remove backslash
  10291       if (isBackslash) {
  10292         dec i;
  10293       }
  10294       break;
  10295     }
  10296     inc s;
  10297   }
  10298 
  10299   // terminate the result string
  10300   end:
  10301   dest[i] = 0;
  10302   return(dest);
  10303 }
  10304 
  10305 
  10306 /**
  10307  * return the length of the escaped string (without the terminating \0)
  10308  */
  10309 size_t escapeLenS(const char *s, char delim) {
  10310   size_t r = 0;;
  10311 
  10312   if (!s) {
  10313     return(0);
  10314   }
  10315   char delims[]   = {delim, '\\', '\b', '\f', '\n', '\r', '\t', 0/*terminate accept string for strpbrk*/};
  10316 
  10317   // compute result string length to allocate the buffer once
  10318   const char *tmp = s;
  10319   tmp             = strpbrk(tmp, delims);
  10320   while (tmp) {
  10321     inc r;
  10322     inc tmp;
  10323     tmp = strpbrk(tmp, delims);
  10324   }
  10325 
  10326   r += strlen(s);
  10327   return(r);
  10328 }
  10329 
  10330 
  10331 /**
  10332  * convert number between 0 and 15 to hexadecimal character '0' to 'F'
  10333  */
  10334 char nibbleToHex(u8 n) {
  10335 
  10336   if (n > 15) {
  10337     return 'X';
  10338   }
  10339   elif (n < 10) {
  10340     return((char)(n + '0'));
  10341   }
  10342   else {
  10343     return((char)((n-10) + 'A'));
  10344 }
  10345   }
  10346 
  10347 
  10348 /**
  10349  * escape string to become a valid C source string
  10350  * control characters, backslash and double quotes are escaped.
  10351  * control characters without an escaped representation (\a) are represented as
  10352  * hexidecimal literal '\xNN'
  10353  * the result can be included in C source code and the parsing will be
  10354  * correct
  10355  * \param
  10356  *   S string to escape
  10357  * \return
  10358  *   new escaped string (free this buffer)
  10359  *   null when S is null
  10360  */
  10361 char* cEscapeS(const char *S) {
  10362   char *r = NULL;
  10363 
  10364   // u8 because nibbles are needed for control characters without an escaped representation
  10365   const u8 *s     = (const u8*)S;
  10366 
  10367   // steps
  10368   // sanity check
  10369   // compute result string length to allocate the buffer once
  10370   // search control characters without an escaped representation
  10371   // copy s and add the bashslashes
  10372   // terminate the result string
  10373 
  10374   // sanity check
  10375   if (!s) {
  10376     return(null);
  10377   }
  10378   char delims[]   = {'"', '\\', '\a', '\b', '\t', '\n', '\v', '\f', '\r', 0/*terminate accept string for strpbrk*/};
  10379 
  10380   // compute result string length to allocate the buffer once
  10381   size_t count    = 0;
  10382   const char *tmp = S;
  10383   tmp             = strpbrk(tmp, delims);
  10384   while (tmp) {
  10385     inc count;
  10386     inc tmp;
  10387     tmp = strpbrk(tmp, delims);
  10388   }
  10389 
  10390   // search control characters without an escaped representation
  10391   tmp = S;
  10392   while (*tmp) {
  10393     if (*tmp > 0x1F) {
  10394       goto cont;
  10395     }
  10396     bool found = no;
  10397     arange(j, delims) {
  10398       if (*tmp == delims[j]) {
  10399         found = yes;
  10400         break;
  10401       }
  10402     }
  10403     if (not found) {
  10404       // allocate space for ""\xNN""
  10405       // it is 8 bytes but one byte is counted with strlen(s)
  10406       count += 7;
  10407     }
  10408     cont:
  10409     inc tmp;
  10410   }
  10411 
  10412   if (!count) {
  10413     return(strdup(S));
  10414   }
  10415   r = malloc(strlen(S) + 1 + count);
  10416   if (not r) {
  10417     return(null);
  10418   }
  10419 
  10420   // copy s and add the bashslashes
  10421   size_t i = 0;
  10422   while (*s) {
  10423     arange(j, delims) {
  10424       if (*s == delims[j]) {
  10425         r[i++] = '\\';
  10426         break;
  10427       }
  10428     }
  10429     switch(*s) {
  10430       case '\a':
  10431         r[i++] = 'a';
  10432         break;
  10433       case '\b':
  10434         r[i++] = 'b';
  10435         break;
  10436       case '\t':
  10437         r[i++] = 't';
  10438         break;
  10439       case '\n':
  10440         r[i++] = 'n';
  10441         break;
  10442       case '\v':
  10443         r[i++] = 'v';
  10444         break;
  10445       case '\f':
  10446         r[i++] = 'f';
  10447         break;
  10448       case '\r':
  10449         r[i++] = 'r';
  10450         break;
  10451       default:
  10452         if (*s > 0x1F) {
  10453           r[i++] = (char)*s;
  10454         }
  10455         else {
  10456           // byte 0x3 becomes ""\x03""
  10457           r[i++] = '"';
  10458           r[i++] = '"';
  10459           r[i++] = '\\';
  10460           r[i++] = 'x';
  10461           r[i++] = nibbleToHex(*s >> 4);
  10462           r[i++] = nibbleToHex(*s & 0xF);
  10463           r[i++] = '"';
  10464           r[i++] = '"';
  10465         }
  10466         break;
  10467     }
  10468     inc s;
  10469   }
  10470 
  10471   // terminate the result string
  10472   r[i] = 0;
  10473   return(r);
  10474 }
  10475 
  10476 
  10477 /**
  10478  * escape string to become a valid C source string
  10479  * control characters, backslash and double quotes are escaped.
  10480  * control characters without an escaped representation (\a) are represented as
  10481  * hexidecimal literal '\xNN'
  10482  * the result can be included in C source code and the parsing will be
  10483  * correct
  10484  * \param
  10485  *   dest destination buffer
  10486  * \param
  10487  *   S string to escape
  10488  * \return
  10489  *   new escaped string (free this buffer)
  10490  *   null when S is null
  10491  */
  10492 char* bCEscapeS(char *dest, const char *S) {
  10493 
  10494   // u8 because nibbles are needed for control characters without an escaped representation
  10495   const u8 *s     = (const u8*)S;
  10496 
  10497   // steps
  10498   // sanity check
  10499   // copy s and add the bashslashes
  10500   // terminate the result string
  10501 
  10502   // sanity check
  10503   if (!s or !dest) {
  10504     return(null);
  10505   }
  10506   char delims[]   = {'"', '\\', '\a', '\b', '\t', '\n', '\v', '\f', '\r', 0/*terminate accept string for strpbrk*/};
  10507 
  10508   // copy s and add the bashslashes
  10509   size_t i = 0;
  10510   while (*s) {
  10511     arange(j, delims) {
  10512       if (*s == delims[j]) {
  10513         dest[i++] = '\\';
  10514         break;
  10515       }
  10516     }
  10517     switch(*s) {
  10518       case '\a':
  10519         dest[i++] = 'a';
  10520         break;
  10521       case '\b':
  10522         dest[i++] = 'b';
  10523         break;
  10524       case '\t':
  10525         dest[i++] = 't';
  10526         break;
  10527       case '\n':
  10528         dest[i++] = 'n';
  10529         break;
  10530       case '\v':
  10531         dest[i++] = 'v';
  10532         break;
  10533       case '\f':
  10534         dest[i++] = 'f';
  10535         break;
  10536       case '\r':
  10537         dest[i++] = 'r';
  10538         break;
  10539       default:
  10540         if (*s > 0x1F) {
  10541           dest[i++] = (char)*s;
  10542         }
  10543         else {
  10544           // byte 0x3 becomes ""\x03""
  10545           dest[i++] = '"';
  10546           dest[i++] = '"';
  10547           dest[i++] = '\\';
  10548           dest[i++] = 'x';
  10549           dest[i++] = nibbleToHex(*s >> 4);
  10550           dest[i++] = nibbleToHex(*s & 0xF);
  10551           dest[i++] = '"';
  10552           dest[i++] = '"';
  10553         }
  10554         break;
  10555     }
  10556     inc s;
  10557   }
  10558 
  10559   // terminate the result string
  10560   dest[i] = 0;
  10561   return(dest);
  10562 }
  10563 
  10564 
  10565 /**
  10566  * escape string to become a valid C source string
  10567  * control characters, backslash and double quotes are escaped.
  10568  * control characters without an escaped representation (\a) are represented as
  10569  * hexidecimal literal '\xNN'
  10570  * the result can be included in C source code and the parsing will be
  10571  * correct
  10572  * \param
  10573  *   dest destination buffer
  10574  * \param
  10575  *   destSize destination buffer size
  10576  * \param
  10577  *   S string to escape
  10578  * \return
  10579  *   new escaped string (free this buffer)
  10580  *   null when S is null
  10581  */
  10582 char* bLCEscapeS(char *dest, size_t destSize, const char *S) {
  10583 
  10584   // u8 because nibbles are needed for control characters without an escaped representation
  10585   const u8 *s     = (const u8*)S;
  10586 
  10587   // steps
  10588   // sanity check
  10589   // copy s and add the bashslashes
  10590   // terminate the result string
  10591 
  10592   // sanity check
  10593   if (!s or !dest or !destSize) {
  10594     return(null);
  10595   }
  10596   char delims[]   = {'"', '\\', '\a', '\b', '\t', '\n', '\v', '\f', '\r', 0/*terminate accept string for strpbrk*/};
  10597 
  10598   // copy s and add the bashslashes
  10599   size_t i = 0;
  10600   while (*s) {
  10601     arange(j, delims) {
  10602       if (*s == delims[j]) {
  10603         dest[i++] = '\\';
  10604         if (i >= destSize) {
  10605           // end of dest buffer is reached
  10606           dec i;
  10607           goto end;
  10608         }
  10609         break;
  10610       }
  10611     }
  10612     switch(*s) {
  10613       case '\a':
  10614         dest[i++] = 'a';
  10615         if (i >= destSize) {
  10616           // end of dest buffer is reached
  10617           dec i;
  10618           // remove backslash
  10619           dest[i-1] = 0;
  10620           goto end;
  10621         }
  10622         break;
  10623       case '\b':
  10624         dest[i++] = 'b';
  10625         if (i >= destSize) {
  10626           // end of dest buffer is reached
  10627           dec i;
  10628           // remove backslash
  10629           dest[i-1] = 0;
  10630           goto end;
  10631         }
  10632         break;
  10633       case '\t':
  10634         dest[i++] = 't';
  10635         if (i >= destSize) {
  10636           // end of dest buffer is reached
  10637           dec i;
  10638           // remove backslash
  10639           dest[i-1] = 0;
  10640           goto end;
  10641         }
  10642         break;
  10643       case '\n':
  10644         dest[i++] = 'n';
  10645         if (i >= destSize) {
  10646           // end of dest buffer is reached
  10647           dec i;
  10648           // remove backslash
  10649           dest[i-1] = 0;
  10650           goto end;
  10651         }
  10652         break;
  10653       case '\v':
  10654         dest[i++] = 'v';
  10655         if (i >= destSize) {
  10656           // end of dest buffer is reached
  10657           dec i;
  10658           // remove backslash
  10659           dest[i-1] = 0;
  10660           goto end;
  10661         }
  10662         break;
  10663       case '\f':
  10664         dest[i++] = 'f';
  10665         if (i >= destSize) {
  10666           // end of dest buffer is reached
  10667           dec i;
  10668           // remove backslash
  10669           dest[i-1] = 0;
  10670           goto end;
  10671         }
  10672         break;
  10673       case '\r':
  10674         dest[i++] = 'r';
  10675         if (i >= destSize) {
  10676           // end of dest buffer is reached
  10677           dec i;
  10678           // remove backslash
  10679           dest[i-1] = 0;
  10680           goto end;
  10681         }
  10682         break;
  10683       default:
  10684         if (*s > 0x1F) {
  10685           dest[i++] = (char)*s;
  10686           if (i >= destSize) {
  10687             // end of dest buffer is reached
  10688             dec i;
  10689             if (*s == '"' || *s == '\\') {
  10690               // remove backslash
  10691               dest[i-1] = 0;
  10692             }
  10693             goto end;
  10694         }
  10695           }
  10696         else {
  10697           // check if there is enough space
  10698           if (i+8 >= destSize) {
  10699             goto end;
  10700           }
  10701           // byte 0x3 becomes ""\x03""
  10702           dest[i++] = '"';
  10703           dest[i++] = '"';
  10704           dest[i++] = '\\';
  10705           dest[i++] = 'x';
  10706           dest[i++] = nibbleToHex(*s >> 4);
  10707           dest[i++] = nibbleToHex(*s & 0xF);
  10708           dest[i++] = '"';
  10709           dest[i++] = '"';
  10710         }
  10711         break;
  10712     }
  10713     inc s;
  10714   }
  10715 
  10716   // terminate the result string
  10717   end:
  10718   dest[i] = 0;
  10719   return(dest);
  10720 }
  10721 
  10722 
  10723 /**
  10724  * return the length of the escaped string (without the terminating \0)
  10725  */
  10726 size_t cEscapeLenS(const char *s) {
  10727   size_t r = 0;;
  10728 
  10729   if (!s) {
  10730     return(0);
  10731   }
  10732   char delims[]   = {'"', '\\', '\a', '\b', '\t', '\n', '\v', '\f', '\r', 0/*terminate accept string for strpbrk*/};
  10733 
  10734   // compute result string length to allocate the buffer once
  10735   const char *tmp = s;
  10736   tmp             = strpbrk(tmp, delims);
  10737   while (tmp) {
  10738     inc r;
  10739     inc tmp;
  10740     tmp = strpbrk(tmp, delims);
  10741   }
  10742 
  10743   // search control characters without an escaped representation
  10744   tmp = s;
  10745   while (*tmp) {
  10746     if (*tmp > 0x1F) {
  10747       goto cont;
  10748     }
  10749     bool found = no;
  10750     arange(j, delims) {
  10751       if (*tmp == delims[j]) {
  10752         found = yes;
  10753         break;
  10754       }
  10755     }
  10756     if (not found) {
  10757       // allocate space for ""\xNN""
  10758       // it is 8 bytes but one byte is counted with strlen(s)
  10759       r += 7;
  10760     }
  10761     cont:
  10762     inc tmp;
  10763   }
  10764 
  10765   r += strlen(s);
  10766   return(r);
  10767 }
  10768 
  10769 
  10770 /**
  10771  * is Number (integer or float) String
  10772  *
  10773  * 1, -12
  10774  * 1e+4, -1.44E-1
  10775  *
  10776  * \param
  10777  *   string
  10778  * \return
  10779  *   true when string is a number
  10780  *   false when string is not a number or string is empty or NULL
  10781  */
  10782 bool isNumber(const char *string) {
  10783 
  10784   // sanity checks
  10785   if (!string || *string == 0) {
  10786     return(false);
  10787   }
  10788 
  10789   // . not allowed in first position
  10790   // first position can be digit, '.' or '-' but not "-" and not "."
  10791   if (!isdigit(*string) && (*string != '-') && (*string != '.')) {
  10792     return(false);
  10793   }
  10794 
  10795   // save pointer to first char to verify if there is a leader . and an exponent
  10796   const char *firstChar = string;
  10797   string++;
  10798 
  10799   bool r        = false;
  10800   int dots      = 0;
  10801   int exponents = 0;
  10802   if (*(string-1) == '.') {
  10803     // count first '.'
  10804     dots++;
  10805   }
  10806   while ((isdigit(*string) || (*string == '.') || (*string == 'e') || (*string == 'E') || (((*string == '-') || (*string == '+')) && ((*(string-1) == 'E') || (*(string-1) == 'e')))) && *string != 0) {
  10807     if (*string == '.') {
  10808       dots++;
  10809       if (*firstChar == '-') {
  10810         // -.234 allowed
  10811         firstChar = string;
  10812       }
  10813       if ((dots > 1) || (exponents > 0)) {
  10814         // only one '.' allowed but not after exponent
  10815         break;
  10816     }
  10817       }
  10818     if ((*string == 'e') || (*string == 'E')) {
  10819       exponents++;
  10820       if ((exponents > 1) || (*firstChar == '.')) {
  10821         // only one 'e' or 'E' allowed
  10822         break;
  10823     }
  10824       }
  10825     string++;
  10826   }
  10827 
  10828   // strings ending with '.', '-', 'e' and 'E' are not numbers
  10829   if ((*string == 0) && (*(string-1) != '.') && (*(string-1) != '-') && (*(string-1) != 'e') && (*(string-1) != 'E')) {
  10830     r = true;
  10831   }
  10832   return(r);
  10833 }
  10834 
  10835 /**
  10836  * is Integer String
  10837  *
  10838  * \param
  10839  *   string
  10840  * \return
  10841  *   true when string is an integer
  10842  *   false when string is not an integer or string is empty or NULL
  10843  */
  10844 bool isInt(const char *string) {
  10845 
  10846   // sanity checks
  10847   if (!string || *string == 0) {
  10848     return(false);
  10849   }
  10850 
  10851   // . not allowed in first position
  10852   // first position can be digit or - but not "-"
  10853   if (!isdigit(*string) && (*string != '-')) {
  10854     return(false);
  10855   }
  10856   string++;
  10857 
  10858   bool r        = false;
  10859   while (isdigit(*string) && *string != 0) {
  10860     string++;
  10861   }
  10862 
  10863   // strings ending with '-' are not integers
  10864   if ((*string == 0) && (*(string-1) != '-')) {
  10865     r = true;
  10866   }
  10867   return(r);
  10868 }
  10869 
  10870 /**
  10871  * convert string to decimal integer
  10872  *
  10873  * \param
  10874  *   string
  10875  * \return
  10876  *   int64_t
  10877  *   0 when string represents 0 or doesnt represent a number or the input is NULL
  10878  */
  10879 int64_t parseInt(const char *string) {
  10880 
  10881   // sanity checks
  10882   if (!string) {
  10883     return(0);
  10884   }
  10885   while (!isdigit(*string) && *string != '-' && *string != 0) {
  10886     string++;
  10887   }
  10888   int64_t r = strtoll(string, NULL, 10);
  10889   if (r == INT64_MAX || r == INT64_MIN) {
  10890     pFuncError
  10891     shEPrintfS("The string was: \"%s\"\n", string);
  10892   }
  10893   return(r);
  10894 }
  10895 
  10896 int64_t parseIntChar(char c) {
  10897 
  10898   if (!isdigit(c)) {
  10899     return(-1);
  10900   }
  10901   return(c - '0');
  10902 }
  10903 
  10904 /**
  10905  * convert string to decimal integer
  10906  *
  10907  * \param
  10908  *   string
  10909  * \return
  10910  *   int64_t
  10911  *   0 when string represents 0 or doesnt represent a number or the input is NULL
  10912  */
  10913 int64_t parseI64(const char *string) {
  10914 
  10915   // sanity checks
  10916   if (!string) {
  10917     return(0);
  10918   }
  10919   while (!isdigit(*string) && *string != '-' && *string != 0) {
  10920     string++;
  10921   }
  10922   int64_t r = strtoll(string, NULL, 10);
  10923   if (r == INT64_MAX || r == INT64_MIN) {
  10924     pFuncError
  10925     shEPrintfS("The string was: \"%s\"\n", string);
  10926   }
  10927   return(r);
  10928 }
  10929 
  10930 int64_t parseI64Char(char c) {
  10931 
  10932   if (!isdigit(c)) {
  10933     return(-1);
  10934   }
  10935   return(c - '0');
  10936 }
  10937 
  10938 /**
  10939  * convert string to double
  10940  *
  10941  * \param
  10942  *   string
  10943  * \return
  10944  *   double
  10945  *   0 when string represents 0 or doesnt represent a number or the input is NULL
  10946  */
  10947 double parseDouble(const char *string) {
  10948 
  10949   // sanity checks
  10950   if (!string) {
  10951     return(0);
  10952   }
  10953   while (!isdigit(*string) && *string != '-' && *string != 0) {
  10954     string++;
  10955   }
  10956   double r = strtod(string, NULL);
  10957   return(r);
  10958 }
  10959 
  10960 double parseDoubleChar(char c) {
  10961 
  10962   if (!isdigit(c)) {
  10963     return(-1);
  10964   }
  10965   return((double)(c - '0'));
  10966 }
  10967 
  10968 /**
  10969  * parse hexadecimal number in a string
  10970  *
  10971  * \param
  10972  *   string hexadecimal string starting with 0x
  10973  * \return
  10974  *   integer value
  10975  *   0 failed or the value is 0
  10976  */
  10977 uint64_t parseHex(const char *string) {
  10978 
  10979   if (!string) {
  10980     return(0);
  10981   }
  10982   while (!isdigit(*string) && *string != '-' && *string != 0) {
  10983     string++;
  10984   }
  10985   uint64_t r = strtoul(string, NULL, 16);;
  10986   if (r == ULONG_MAX) {
  10987     pFuncError
  10988     shEPrintfS("The string was: \"%s\"\n", string);
  10989   }
  10990   return(r);
  10991 }
  10992 
  10993 /**
  10994  * int To String
  10995  *
  10996  * convert int to string
  10997  *
  10998  * \param
  10999  *   int64 number
  11000  * \return
  11001  *   string representing the number (you must free the pointer)
  11002  */
  11003 char *intToS(int64_t n) {
  11004   char s[50];
  11005   char *r = NULL;
  11006 
  11007   sprintf(s, "%" PRIi64, n);
  11008   r = strdup(s);
  11009   return(r);
  11010 }
  11011 
  11012 /**
  11013  * buffer int To String
  11014  *
  11015  * convert int to string
  11016  *
  11017  * \param
  11018  *   int64 number
  11019  * \return
  11020  *   string representing the number
  11021  */
  11022 char *bIntToS(char *s, int64_t n) {
  11023 
  11024   if (!s) {
  11025     return(NULL);
  11026   }
  11027   sprintf(s, "%" PRIi64, n);
  11028   return(s);
  11029 }
  11030 
  11031 /**
  11032  * double To String
  11033  *
  11034  * convert int to string
  11035  *
  11036  * \param
  11037  *   double number
  11038  * \return
  11039  *   string representing the number (you must free the pointer)
  11040  */
  11041 char *doubleToS(double n) {
  11042   char s[256];
  11043   char *r = NULL;
  11044 
  11045   sprintf(s, "%e", n);
  11046   r = strdup(s);
  11047   return(r);
  11048 }
  11049 
  11050 /**
  11051  * buffer double To String
  11052  *
  11053  * convert int to string
  11054  *
  11055  * \param
  11056  *   double number
  11057  * \return
  11058  *   string representing the number
  11059  */
  11060 char *bDoubleToS(char *s, double n) {
  11061 
  11062   if (!s) {
  11063     return(NULL);
  11064   }
  11065   sprintf(s, "%e", n);
  11066   return(s);
  11067 }
  11068 
  11069 /**
  11070  * length string
  11071  *
  11072  * return strlen when possible
  11073  *
  11074  * \param
  11075  *   string
  11076  * \return
  11077  *   strlen value
  11078  *   0 when string is NULL
  11079  */
  11080 size_t lenS(const char *string) {
  11081 
  11082   if (!string) {
  11083     return(0);
  11084   }
  11085   return(strlen(string));
  11086 }
  11087 
  11088 /**
  11089  * string buffer size
  11090  *
  11091  * return strlen+1 when possible
  11092  *
  11093  * \param
  11094  *   string
  11095  * \return
  11096  *   strlen+1 value
  11097  *   0 when string is NULL
  11098  */
  11099 size_t sizeS(const char *string) {
  11100 
  11101   if (!string) {
  11102     return(0);
  11103   }
  11104   return(strlen(string)+1);
  11105 }
  11106 
  11107 /**
  11108  * upper case String
  11109  * duplicate string
  11110  *
  11111  * \param
  11112  *   string
  11113  * \return
  11114  *   new upper case string (you must free the pointer)
  11115  */
  11116 char *upperS(const char *string) {
  11117   char *r = NULL;
  11118 
  11119   // sanity checks
  11120   if (!string) {
  11121     return(NULL);
  11122   }
  11123 
  11124   r = strdup(string);
  11125   if (!r) {
  11126     return(NULL);
  11127   }
  11128 
  11129   // upper case
  11130   size_t i = 0;
  11131   while (r[i] != 0) {
  11132     r[i] = (char)toupper(r[i]);
  11133     i++;
  11134   }
  11135   return(r);
  11136 }
  11137 
  11138 /**
  11139  * upper case String
  11140  *
  11141  * \param
  11142  *   string
  11143  * \return
  11144  *   upper case string
  11145  *   NULL error
  11146  */
  11147 char *iUpperS(char **string) {
  11148 
  11149   // sanity checks
  11150   if (!string || !*string) {
  11151     return(NULL);
  11152   }
  11153 
  11154   // upper case
  11155   size_t i = 0;
  11156   while ((*string)[i] != 0) {
  11157     (*string)[i] = (char)toupper((*string)[i]);
  11158     i++;
  11159   }
  11160   return(*string);
  11161 }
  11162 
  11163 /**
  11164  * buffer upper case String
  11165  *
  11166  * \param
  11167  *   string
  11168  * \return
  11169  *   upper case string
  11170  *   NULL error
  11171  */
  11172 char *bUpperS(char *string) {
  11173 
  11174   // sanity checks
  11175   if (!string) {
  11176     return(NULL);
  11177   }
  11178 
  11179   // upper case
  11180   size_t i = 0;
  11181   while (string[i] != 0) {
  11182     string[i] = (char)toupper(string[i]);
  11183     i++;
  11184   }
  11185   return(string);
  11186 }
  11187 
  11188 /**
  11189  * lower case String
  11190  * duplicate string
  11191  *
  11192  * \param
  11193  *   string
  11194  * \return
  11195  *   new lower case string (you must free the pointer)
  11196  */
  11197 char *lowerS(const char *string) {
  11198   char *r = NULL;
  11199 
  11200   // sanity checks
  11201   if (!string) {
  11202     return(NULL);
  11203   }
  11204 
  11205   r = strdup(string);
  11206   if (!r) {
  11207     return(NULL);
  11208   }
  11209 
  11210   // lower case
  11211   size_t i = 0;
  11212   while (r[i] != 0) {
  11213     r[i] = (char)tolower(r[i]);
  11214     i++;
  11215   }
  11216   return(r);
  11217 }
  11218 
  11219 /**
  11220  * lower case String
  11221  *
  11222  * \param
  11223  *   string
  11224  * \return
  11225  *   lower case string
  11226  *   NULL error
  11227  */
  11228 char *iLowerS(char **string) {
  11229 
  11230   // sanity checks
  11231   if (!string || !*string) {
  11232     return(NULL);
  11233   }
  11234 
  11235   // lower case
  11236   size_t i = 0;
  11237   while ((*string)[i] != 0) {
  11238     (*string)[i] = (char)tolower((*string)[i]);
  11239     i++;
  11240   }
  11241   return(*string);
  11242 }
  11243 
  11244 /**
  11245  * buffer lower case String
  11246  *
  11247  * \param
  11248  *   string
  11249  * \return
  11250  *   lower case string
  11251  *   NULL error
  11252  */
  11253 char *bLowerS(char *string) {
  11254 
  11255   // sanity checks
  11256   if (!string) {
  11257     return(NULL);
  11258   }
  11259 
  11260   // lower case
  11261   size_t i = 0;
  11262   while (string[i] != 0) {
  11263     string[i] = (char)tolower(string[i]);
  11264     i++;
  11265   }
  11266   return(string);
  11267 }
  11268 
  11269 /**
  11270  * trim String
  11271  * duplicate string
  11272  *
  11273  * \param
  11274  *   string
  11275  * \return
  11276  *   new string without leading or trailing spaces (you must free the pointer)
  11277  */
  11278 char *trimS(const char *string) {
  11279   char *r = NULL;
  11280   const char *end = NULL;
  11281   size_t len;
  11282 
  11283   // sanity checks
  11284   if (!string) {
  11285     return(NULL);
  11286   }
  11287 
  11288   // remove heading spaces
  11289   while (isspace(*string)) {
  11290     string++;
  11291   }
  11292 
  11293   if (!*string) {
  11294     // all spaces
  11295     emptyS(r)
  11296     return(r);
  11297   }
  11298 
  11299   // remove trailing spaces
  11300   end = string + strlen(string) - 1;
  11301   while (isspace(*end)) {
  11302     end--;
  11303   }
  11304 
  11305   // copy range to new string
  11306   len        = (size_t)(end - string + 2);
  11307   r          = MALLOC(len);
  11308   if (!r) {
  11309     return(NULL);
  11310   }
  11311   r          = strncpy(r, string, len - 1);
  11312   r[len - 1] = 0;
  11313   return(r);
  11314 }
  11315 
  11316 /**
  11317  * trim String
  11318  *
  11319  * \param
  11320  *   string (this parameter is reallocated)
  11321  * \return
  11322  *   string without leading or trailing spaces
  11323  *   NULL error
  11324  */
  11325 char *iTrimS(char **string) {
  11326   char *workingS = NULL;
  11327   char *r = NULL;
  11328   char *end = NULL;
  11329   size_t len;
  11330 
  11331   // sanity checks
  11332   if (!string || !*string) {
  11333     return(NULL);
  11334   }
  11335 
  11336   workingS = *string;
  11337 
  11338   // remove heading spaces
  11339   while (isspace(*workingS)) {
  11340     workingS++;
  11341   }
  11342 
  11343   if (!*workingS) {
  11344     // all spaces
  11345     free(*string);
  11346     emptyS(*string)
  11347     return(*string);
  11348   }
  11349 
  11350   // remove trailing spaces
  11351   end = workingS + strlen(workingS) - 1;
  11352   while (isspace(*end)) {
  11353     end--;
  11354   }
  11355 
  11356   // copy range to new string
  11357   len             = (size_t)(end - workingS + 2);
  11358   r               = MALLOC(len);
  11359   if (!r) {
  11360     return(NULL);
  11361   }
  11362   r               = strncpy(r, workingS, len - 1);
  11363   r[len - 1]      = 0;
  11364   free(*string);
  11365   *string = r;;
  11366   return(r);
  11367 }
  11368 
  11369 /**
  11370  * buffer trim String
  11371  *
  11372  * \param
  11373  *   string
  11374  * \return
  11375  *   string without leading or trailing spaces
  11376  *   NULL error
  11377  */
  11378 char *bTrimS(char *string) {
  11379   char *workingS = NULL;
  11380   char *r = NULL;
  11381   char *end = NULL;
  11382   size_t len;
  11383 
  11384   // sanity checks
  11385   if (!string) {
  11386     return(NULL);
  11387   }
  11388 
  11389   workingS = string;
  11390 
  11391   // remove heading spaces
  11392   while (isspace(*workingS)) {
  11393     workingS++;
  11394   }
  11395 
  11396   if (!*workingS) {
  11397     // all spaces
  11398     bEmptyS(string);
  11399     return(string);
  11400   }
  11401 
  11402   // remove trailing spaces
  11403   end = workingS + strlen(workingS) - 1;
  11404   while (isspace(*end)) {
  11405     end--;
  11406   }
  11407 
  11408   // copy range to new string
  11409   len             = (size_t)(end - workingS + 2);
  11410   r               = MALLOC(len);
  11411   if (!r) {
  11412     return(NULL);
  11413   }
  11414   r               = strncpy(r, workingS, len - 1);
  11415   r[len - 1]      = 0;
  11416   strcpy(string, r);
  11417   free(r);
  11418   return(string);
  11419 }
  11420 
  11421 /**
  11422  * left trim String
  11423  * duplicate string
  11424  *
  11425  * \param
  11426  *   string
  11427  * \return
  11428  *   new string without leading spaces (you must free the pointer)
  11429  */
  11430 char *lTrimS(const char *string) {
  11431   char *r = NULL;
  11432 
  11433   // sanity checks
  11434   if (!string) {
  11435     return(NULL);
  11436   }
  11437 
  11438   // remove heading spaces
  11439   while (isspace(*string)) {
  11440     string++;
  11441   }
  11442 
  11443   if (!*string) {
  11444     // all spaces
  11445     emptyS(r)
  11446     return(r);
  11447   }
  11448 
  11449   r = strdup(string);
  11450   return(r);
  11451 }
  11452 
  11453 
  11454 /**
  11455  * left trim String
  11456  *
  11457  * \param
  11458  *   string (this parameter is reallocated)
  11459  * \return
  11460  *   string without leading spaces (you must free the pointer)
  11461  *   NULL error
  11462  */
  11463 char *iLTrimS(char **string) {
  11464   char *workingS = NULL;
  11465   char *r = NULL;
  11466 
  11467   // sanity checks
  11468   if (!string || !*string) {
  11469     return(NULL);
  11470   }
  11471 
  11472   workingS = *string;
  11473 
  11474   // remove heading spaces
  11475   while (isspace(*workingS)) {
  11476     workingS++;
  11477   }
  11478 
  11479   r = strdup(workingS);
  11480   if (!r) {
  11481     return(NULL);
  11482   }
  11483   free(*string);
  11484   *string = r;;
  11485   return(r);
  11486 }
  11487 
  11488 /**
  11489  * buffer left trim String
  11490  *
  11491  * \param
  11492  *   string
  11493  * \return
  11494  *   string without leading spaces
  11495  *   NULL error
  11496  */
  11497 char *bLTrimS(char *string) {
  11498   char *workingS = NULL;
  11499 
  11500   // sanity checks
  11501   if (!string) {
  11502     return(NULL);
  11503   }
  11504 
  11505   workingS = string;
  11506 
  11507   // remove heading spaces
  11508   while (isspace(*workingS)) {
  11509     workingS++;
  11510   }
  11511 
  11512   memmove(string, workingS, strlen(workingS)+1);
  11513   return(string);
  11514 }
  11515 
  11516 /**
  11517  * right trim String
  11518  * duplicate string
  11519  *
  11520  * \param
  11521  *   string
  11522  * \return
  11523  *   new string without trailing spaces (you must free the pointer)
  11524  */
  11525 char *rTrimS(const char *string) {
  11526   char *r = NULL;
  11527   const char *end = NULL;
  11528   size_t len;
  11529 
  11530   // sanity checks
  11531   if (!string) {
  11532     return(NULL);
  11533   }
  11534 
  11535   // remove trailing spaces
  11536   end = string + strlen(string) - 1;
  11537   while (((end >= string) && isspace(*end))) {
  11538     end--;
  11539   }
  11540 
  11541   // copy range to new string
  11542   len        = (size_t)(end - string + 2);
  11543   r          = MALLOC(len);
  11544   if (!r) {
  11545     return(NULL);
  11546   }
  11547   r          = strncpy(r, string, len - 1);
  11548   r[len - 1] = 0;
  11549   return(r);
  11550 }
  11551 
  11552 
  11553 /**
  11554  * right trim String
  11555  *
  11556  * \param
  11557  *   string
  11558  * \return
  11559  *   string without trailing spaces
  11560  *   NULL error
  11561  */
  11562 char *iRTrimS(char **string) {
  11563   char *workingS = NULL;
  11564   char *end = NULL;
  11565 
  11566   // sanity checks
  11567   if (!string || !*string) {
  11568     return(NULL);
  11569   }
  11570 
  11571   workingS = *string;
  11572 
  11573   // remove trailing spaces
  11574   end = workingS + strlen(workingS) - 1;
  11575   while (((end >= workingS) && isspace(*end))) {
  11576     end--;
  11577   }
  11578 
  11579   *(end+1) = 0;;
  11580   return(*string);
  11581 }
  11582 
  11583 /**
  11584  * buffer right trim String
  11585  *
  11586  * \param
  11587  *   string
  11588  * \return
  11589  *   string without trailing spaces
  11590  *   NULL error
  11591  */
  11592 char *bRTrimS(char *string) {
  11593   char *workingS = NULL;
  11594   char *end = NULL;
  11595 
  11596   // sanity checks
  11597   if (!string) {
  11598     return(NULL);
  11599   }
  11600 
  11601   workingS = string;
  11602 
  11603   // remove trailing spaces
  11604   end = workingS + strlen(workingS) - 1;
  11605   while (((end >= workingS) && isspace(*end))) {
  11606     end--;
  11607   }
  11608 
  11609   *(end+1) = 0;;
  11610   return(string);
  11611 }
  11612 
  11613 /**
  11614  * uniq String
  11615  * duplicate string
  11616  *
  11617  * remove successive repetitions of char c
  11618  *
  11619  * \param
  11620  *   string
  11621  *   c character to remove
  11622  * \return
  11623  *   new string without successive repetitions of char c (you must free the pointer)
  11624  */
  11625 char *uniqS(const char *string, char c) {
  11626   char *r = NULL;
  11627   size_t len;
  11628 
  11629   // sanity checks
  11630   if (!string) {
  11631     return(NULL);
  11632   }
  11633 
  11634   r   = strdup(string);
  11635   len = strlen(string);
  11636 
  11637   if (len < 2) {
  11638     // string is too short to have repetitions
  11639     return(r);
  11640   }
  11641 
  11642   // index in r
  11643   size_t j = 1;;
  11644   rangeFrom(i, 1, len)
  11645     if (r[i-1] == c && r[i] == c) {
  11646       // skip
  11647       continue;
  11648     }
  11649     else {
  11650       r[j] = r[i];
  11651       j++;
  11652     }
  11653 
  11654   r[j] = 0;
  11655 
  11656   return(r);
  11657 }
  11658 
  11659 /**
  11660  * uniq String
  11661  *
  11662  * remove successive repetitions of char c
  11663  *
  11664  * \param
  11665  *   string
  11666  *   c character to remove
  11667  * \return
  11668  *   string without successive repetitions of char c
  11669  *   NULL error
  11670  */
  11671 char *iUniqS(char **string, char c) {
  11672   size_t len;
  11673 
  11674   // sanity checks
  11675   if (!string || !*string) {
  11676     return(NULL);
  11677   }
  11678 
  11679   len = strlen(*string);
  11680 
  11681   if (len < 2) {
  11682     // string is too short to have repetitions
  11683     return(*string);
  11684   }
  11685 
  11686   // index in r
  11687   size_t j = 1;;
  11688   rangeFrom(i, 1, len)
  11689     if ((*string)[i-1] == c && (*string)[i] == c) {
  11690       // skip
  11691       continue;
  11692     }
  11693     else {
  11694       (*string)[j] = (*string)[i];
  11695       j++;
  11696     }
  11697 
  11698   (*string)[j] = 0;
  11699 
  11700   return(*string);
  11701 }
  11702 
  11703 /**
  11704  * buffer uniq String
  11705  *
  11706  * remove successive repetitions of char c
  11707  *
  11708  * \param
  11709  *   string
  11710  *   c character to remove
  11711  * \return
  11712  *   string without successive repetitions of char c
  11713  *   NULL error
  11714  */
  11715 char *bUniqS(char *string, char c) {
  11716   size_t len;
  11717 
  11718   // sanity checks
  11719   if (!string) {
  11720     return(NULL);
  11721   }
  11722 
  11723   len = strlen(string);
  11724 
  11725   if (len < 2) {
  11726     // string is too short to have repetitions
  11727     return(string);
  11728   }
  11729 
  11730   // index in r
  11731   size_t j = 1;;
  11732   rangeFrom(i, 1, len)
  11733     if (string[i-1] == c && string[i] == c) {
  11734       // skip
  11735       continue;
  11736     }
  11737     else {
  11738       string[j] = string[i];
  11739       j++;
  11740     }
  11741 
  11742   string[j] = 0;
  11743 
  11744   return(string);
  11745 }
  11746 
  11747 /**
  11748  * ignore case uniq String
  11749  * duplicate string
  11750  *
  11751  * remove successive repetitions of char c
  11752  *
  11753  * \param
  11754  *   string
  11755  *   c character to remove
  11756  * \return
  11757  *   new string without successive repetitions of char c (you must free the pointer)
  11758  */
  11759 char *icUniqS(const char *string, char c) {
  11760   char *r = NULL;
  11761   size_t len;
  11762 
  11763   // sanity checks
  11764   if (!string) {
  11765     return(NULL);
  11766   }
  11767 
  11768   r   = strdup(string);
  11769   len = strlen(string);
  11770 
  11771   if (len < 2) {
  11772     // string is too short to have repetitions
  11773     return(r);
  11774   }
  11775 
  11776   c = (char)tolower(c);
  11777 
  11778   // index in r
  11779   size_t j = 1;;
  11780   rangeFrom(i, 1, len)
  11781     if (tolower(r[i-1]) == c && tolower(r[i]) == c) {
  11782       // skip
  11783       continue;
  11784     }
  11785     else {
  11786       r[j] = r[i];
  11787       j++;
  11788     }
  11789 
  11790   r[j] = 0;
  11791 
  11792   return(r);
  11793 }
  11794 
  11795 /**
  11796  * in place ignore case uniq String
  11797  *
  11798  * remove successive repetitions of char c
  11799  *
  11800  * \param
  11801  *   string
  11802  *   c character to remove
  11803  * \return
  11804  *   string without successive repetitions of char c
  11805  *   NULL error
  11806  */
  11807 char *iicUniqS(char **string, char c) {
  11808   size_t len;
  11809 
  11810   // sanity checks
  11811   if (!string || !*string) {
  11812     return(NULL);
  11813   }
  11814 
  11815   len = strlen(*string);
  11816 
  11817   if (len < 2) {
  11818     // string is too short to have repetitions
  11819     return(*string);
  11820   }
  11821 
  11822   c = (char)tolower(c);
  11823 
  11824   // index in r
  11825   size_t j = 1;;
  11826   rangeFrom(i, 1, len)
  11827     if (tolower((*string)[i-1]) == c && tolower((*string)[i]) == c) {
  11828       // skip
  11829       continue;
  11830     }
  11831     else {
  11832       (*string)[j] = (*string)[i];
  11833       j++;
  11834     }
  11835 
  11836   (*string)[j] = 0;
  11837 
  11838   return(*string);
  11839 }
  11840 
  11841 /**
  11842  * ignore case buffer uniq String
  11843  *
  11844  * remove successive repetitions of char c
  11845  *
  11846  * \param
  11847  *   string
  11848  *   c character to remove
  11849  * \return
  11850  *   string without successive repetitions of char c
  11851  *   NULL error
  11852  */
  11853 char *bicUniqS(char *string, char c) {
  11854   size_t len;
  11855 
  11856   // sanity checks
  11857   if (!string) {
  11858     return(NULL);
  11859   }
  11860 
  11861   len = strlen(string);
  11862 
  11863   if (len < 2) {
  11864     // string is too short to have repetitions
  11865     return(string);
  11866   }
  11867 
  11868   c = (char)tolower(c);
  11869 
  11870   // index in r
  11871   size_t j = 1;;
  11872   rangeFrom(i, 1, len)
  11873     if (tolower(string[i-1]) == c && tolower(string[i]) == c) {
  11874       // skip
  11875       continue;
  11876     }
  11877     else {
  11878       string[j] = string[i];
  11879       j++;
  11880     }
  11881 
  11882   string[j] = 0;
  11883 
  11884   return(string);
  11885 }
  11886 
  11887 /**
  11888  * repeat string count times
  11889  *
  11890  * \param
  11891  * string
  11892  * \param
  11893  * count number of times string is repeated
  11894  * \return
  11895  * new string with string repeated count times (you must free the pointer)
  11896  * NULL when string is NULL
  11897  */
  11898 char *repeatS(const char *string, size_t count) {
  11899   char *r = NULL;
  11900 
  11901   // sanity
  11902   if (!string) {
  11903     return(NULL);
  11904   }
  11905   if (!count || !string[0]) {
  11906     emptyS(r);
  11907     return(r);
  11908   }
  11909 
  11910   size_t slen = strlen(string);
  11911   size_t len  = slen * count;
  11912 
  11913   r = MALLOC(len+1);;
  11914   if (!r) {
  11915     return(NULL);
  11916   }
  11917 
  11918   strcpy(r, string);
  11919   count--;
  11920 
  11921   if (count) {
  11922     range(i, count) {
  11923       strcpy(r + slen * (1 + i), string);
  11924     }
  11925   }
  11926 
  11927   return(r);
  11928 }
  11929 
  11930 /**
  11931  * repeat string count times
  11932  *
  11933  * \param
  11934  * string (this parameter is reallocated)
  11935  * \param
  11936  * count number of times string is repeated
  11937  * \return
  11938  * string with string repeated count times
  11939  * NULL when string is NULL
  11940  */
  11941 char *iRepeatS(char **string, size_t count) {
  11942   char *r = NULL;
  11943 
  11944   // sanity
  11945   if (!string || !*string) {
  11946     return(NULL);
  11947   }
  11948   if (!count || !(*string)[0]) {
  11949     emptyS(r);
  11950     goto end;
  11951   }
  11952 
  11953   size_t slen = strlen(*string);
  11954   size_t len  = slen * count;
  11955 
  11956   r = MALLOC(len+1);;
  11957   if (!r) {
  11958     return(NULL);
  11959   }
  11960 
  11961   strcpy(r, *string);
  11962   count--;
  11963 
  11964   if (count) {
  11965     range(i, count) {
  11966       strcpy(r + slen * (1 + i), *string);
  11967     }
  11968   }
  11969 
  11970   end:
  11971   free(*string);
  11972   *string = r;
  11973   return(*string);
  11974 }
  11975 
  11976 /**
  11977  * repeat string count times
  11978  *
  11979  * \param
  11980  * dest buffer big enough to hold count times string
  11981  * \param
  11982  * string
  11983  * \param
  11984  * count number of times string is repeated
  11985  * \return
  11986  * dest with string repeated count times
  11987  * NULL when dest or string are NULL
  11988  */
  11989 char *bRepeatS(char *dest, const char *string, size_t count) {
  11990 
  11991   // sanity
  11992   if (!dest || !string) {
  11993     return(NULL);
  11994   }
  11995   if (!count || !string[0]) {
  11996     bEmptyS(dest);
  11997     return(dest);
  11998   }
  11999 
  12000   size_t slen = strlen(string);
  12001 
  12002   strcpy(dest, string);
  12003   count--;
  12004 
  12005   if (count) {
  12006     range(i, count) {
  12007       strcpy(dest + slen * (1 + i), string);
  12008     }
  12009   }
  12010 
  12011   return(dest);
  12012 }
  12013 
  12014 /**
  12015  * repeat string count times
  12016  *
  12017  * \param
  12018  * dest buffer big enough to hold count times string
  12019  * \param
  12020  * destSize dest buffer size (sizeof(dest))
  12021  * \param
  12022  * string
  12023  * \param
  12024  * count number of times string is repeated
  12025  * \return
  12026  * dest with string repeated count times
  12027  * NULL when dest or string are NULL
  12028  */
  12029 char *bLRepeatS(char *dest, size_t destSize, const char *string, size_t count) {
  12030 
  12031   // sanity
  12032   if (!dest || !string) {
  12033     return(NULL);
  12034   }
  12035   if (!count || !string[0]) {
  12036     bEmptyS(dest);
  12037     return(dest);
  12038   }
  12039 
  12040   size_t slen = strlen(string);
  12041   size_t len  = slen * count;
  12042 
  12043   if (len >= destSize) {
  12044     return(NULL);
  12045   }
  12046 
  12047   strcpy(dest, string);
  12048   count--;
  12049 
  12050   if (count) {
  12051     range(i, count) {
  12052       strcpy(dest + slen * (1 + i), string);
  12053     }
  12054   }
  12055 
  12056   return(dest);
  12057 }
  12058 
  12059 /**
  12060  * repeat char count times
  12061  *
  12062  * \param
  12063  * c char to repeat
  12064  * \param
  12065  * count number of times c is repeated
  12066  * \return
  12067  * new string with c repeated count times (you must free the pointer)
  12068  */
  12069 char *repeatCharS(char c, size_t count) {
  12070 
  12071   charToS(s,c);
  12072   return(repeatS(s, count));
  12073 }
  12074 
  12075 /**
  12076  * repeat char count times
  12077  *
  12078  * \param
  12079  * dest buffer big enough to hold count times c
  12080  * \param
  12081  * c char to repeat
  12082  * \param
  12083  * count number of times c is repeated
  12084  * \return
  12085  * dest with c repeated count times
  12086  * NULL when dest is NULL
  12087  */
  12088 char *bRepeatCharS(char *dest, char c, size_t count) {
  12089 
  12090   charToS(s,c);
  12091   return(bRepeatS(dest, s, count));
  12092 }
  12093 
  12094 /**
  12095  * repeat char count times
  12096  *
  12097  * \param
  12098  * dest buffer big enough to hold count times c
  12099  * \param
  12100  * destSize dest buffer size (sizeof(dest))
  12101  * \param
  12102  * c char to repeat
  12103  * \param
  12104  * count number of times c is repeated
  12105  * \return
  12106  * dest with c repeated count times
  12107  * NULL when dest is NULL
  12108  */
  12109 char *bLRepeatCharS(char *dest, size_t destSize, char c, size_t count) {
  12110 
  12111   charToS(s,c);
  12112   return(bLRepeatS(dest, destSize, s, count));
  12113 }
  12114 
  12115 /**
  12116  * length of string repeated count times
  12117  *
  12118  * \param
  12119  * string
  12120  * \param
  12121  * count number of times string is repeated
  12122  * \return
  12123  * length of string repeated count times
  12124  * -1 when string is NULL
  12125  */
  12126 ssize_t repeatLenS(const char *string, size_t count) {
  12127 
  12128   // sanity
  12129   if (!string) {
  12130     return(-1);
  12131   }
  12132   if (!count || !string[0]) {
  12133     return(0);
  12134   }
  12135 
  12136   ssize_t r = (ssize_t)(strlen(string) * count);
  12137 
  12138   return(r);
  12139 }
  12140 
  12141 /**
  12142  * ellipsis start string
  12143  *
  12144  * This function pads the current string with a given string if current string is longer than target length
  12145  * If target length is more than current string's length, the current string is returned as is
  12146  *
  12147  * \param
  12148  * string
  12149  * \param
  12150  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  12151  *              than the current string's length, the current string is truncated from the right and the pad is
  12152  *              applied once
  12153  * \param
  12154  * ellipsisString The string to pad the current string with.
  12155  * \return
  12156  * new string of the specified length with the pad string applied from the start (you must free the pointer)
  12157  * NULL when string or ellipsisString are NULL
  12158  */
  12159 char *ellipsisStartS(const char *string, size_t targetLength, const char *ellipsisString) {
  12160 
  12161   // sanity
  12162   if (!string or !ellipsisString) {
  12163     return(NULL);
  12164   }
  12165 
  12166   if (!targetLength) {
  12167     return(strdup(""));
  12168   }
  12169 
  12170   size_t len = strlen(string);
  12171 
  12172   if (len <= targetLength) {
  12173     return(strdup(string));
  12174   }
  12175   else {
  12176     // truncate string
  12177     char *ellip = strdup(ellipsisString);
  12178     string += ((len - targetLength) + strlen(ellipsisString)) <= len ? (len - targetLength) + strlen(ellipsisString) : len;
  12179     pErrorNULL(iAppendS(&ellip, string));
  12180     // make sure the result is target length
  12181     pErrorNULL(iSliceS(&ellip, 0, (int64_t)targetLength));
  12182     return(ellip);
  12183 }
  12184   }
  12185 
  12186 
  12187 /**
  12188  * ellipsis start string
  12189  *
  12190  * This function pads the current string with a given string if current string is longer than target length
  12191  * If target length is more than current string's length, the current string is returned as is
  12192  *
  12193  * \param
  12194  * string (this parameter is reallocated)
  12195  * \param
  12196  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  12197  *              than the current string's length, the current string is truncated from the right and the pad is
  12198  *              applied once
  12199  * \param
  12200  * ellipsisString The string to pad the current string with.
  12201  * \return
  12202  * updated string of the specified length with the pad string applied from the start
  12203  * NULL when string or ellipsisString are NULL
  12204  */
  12205 char *iEllipsisStartS(char **string, size_t targetLength, const char *ellipsisString) {
  12206 
  12207   // sanity
  12208   if (!string or !*string or !ellipsisString) {
  12209     return(NULL);
  12210   }
  12211 
  12212   if (!targetLength) {
  12213     (*string)[0] = 0;
  12214     return(*string);
  12215   }
  12216 
  12217   size_t len = strlen(*string);
  12218 
  12219   if (len > targetLength) {
  12220     // truncate string
  12221     char *ellip = strdup(ellipsisString);
  12222     char *str   = *string + (((len - targetLength) + strlen(ellipsisString)) <= len ? (len - targetLength) + strlen(ellipsisString) : len);
  12223     pErrorNULL(iAppendS(&ellip, str));
  12224     // make sure the result is target length
  12225     pErrorNULL(iSliceS(&ellip, 0, (int64_t)targetLength));
  12226     free(*string);
  12227     *string = ellip;
  12228   }
  12229   return(*string);
  12230 }
  12231 
  12232 /**
  12233  * ellipsis start string
  12234  *
  12235  * This function pads the current string with a given string if current string is longer than target length
  12236  * If target length is more than current string's length, the current string is returned as is
  12237  *
  12238  * \param
  12239  * string
  12240  * \param
  12241  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  12242  *              than the current string's length, the current string is truncated from the right and the pad is
  12243  *              applied once
  12244  * \param
  12245  * ellipsisString The string to pad the current string with.
  12246  * \return
  12247  * string in dest of the specified length with the pad string applied from the start
  12248  * NULL when dest, string or ellipsisString are NULL
  12249  */
  12250 char *bEllipsisStartS(char *dest, const char *string, size_t targetLength, const char *ellipsisString) {
  12251 
  12252   // sanity
  12253   if (!string or !ellipsisString or !dest) {
  12254     return(NULL);
  12255   }
  12256 
  12257   if (!targetLength) {
  12258     dest[0] = 0;
  12259     return(dest);
  12260   }
  12261 
  12262   size_t len = strlen(string);
  12263 
  12264   if (len <= targetLength) {
  12265     strcpy(dest, string);
  12266   }
  12267   else {
  12268     // truncate string
  12269     char *ellip = strdup(ellipsisString);
  12270     string += ((len - targetLength) + strlen(ellipsisString)) <= len ? (len - targetLength) + strlen(ellipsisString) : len;
  12271     pErrorNULL(iAppendS(&ellip, string));
  12272     // make sure the result is target length
  12273     pErrorNULL(iSliceS(&ellip, 0, (int64_t)targetLength));
  12274     strncpy(dest, ellip, targetLength+1);
  12275     free(ellip);
  12276   }
  12277   return(dest);
  12278 }
  12279 
  12280 /**
  12281  * ellipsis start string
  12282  *
  12283  * This function pads the current string with a given string if current string is longer than target length
  12284  * If target length is more than current string's length, the current string is returned as is
  12285  *
  12286  * \param
  12287  * string
  12288  * \param
  12289  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  12290  *              than the current string's length, the current string is truncated from the right and the pad is
  12291  *              applied once
  12292  * \param
  12293  * ellipsisString The string to pad the current string with.
  12294  * \return
  12295  * string in dest of the specified length with the pad string applied from the start
  12296  * NULL when dest, string or ellipsisString are NULL
  12297  */
  12298 char *bLEllipsisStartS(char *dest, size_t destSize, const char *string, size_t targetLength, const char *ellipsisString) {
  12299 
  12300   // sanity
  12301   if (!string or !ellipsisString or !dest) {
  12302     return(NULL);
  12303   }
  12304 
  12305   if (!destSize) {
  12306     return(dest);
  12307   }
  12308 
  12309   if (!targetLength) {
  12310     dest[0] = 0;;
  12311     return(dest);
  12312   }
  12313 
  12314   targetLength = destSize > targetLength ? targetLength : destSize;;
  12315 
  12316   size_t len = strlen(string);
  12317 
  12318   if (len <= targetLength) {
  12319     pErrorNULL(strLCpy(dest, destSize, string));
  12320   }
  12321   else {
  12322     // truncate string
  12323     char *ellip = strdup(ellipsisString);
  12324     string += ((len - targetLength) + strlen(ellipsisString)) <= len ? (len - targetLength) + strlen(ellipsisString) : len;
  12325     pErrorNULL(iAppendS(&ellip, string));
  12326     // make sure the result is target length
  12327     pErrorNULL(iSliceS(&ellip, 0, (int64_t)targetLength));
  12328     pErrorNULL(strLCpy(dest, destSize, ellip));
  12329     free(ellip);
  12330   }
  12331   return(dest);
  12332 }
  12333 
  12334 /**
  12335  * ellipsis start string
  12336  *
  12337  * This function pads the current string with a given string if current string is longer than target length
  12338  * If target length is more than current string's length, the current string is returned as is
  12339  *
  12340  * \param
  12341  * string
  12342  * \param
  12343  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  12344  *              than the current string's length, the current string is truncated from the right and the pad is
  12345  *              applied once
  12346  * \param
  12347  * ellipsisChar The char to pad the current string with.
  12348  * \return
  12349  * new string of the specified length with the pad string applied from the start (you must free the pointer)
  12350  * NULL when string or ellipsisString are NULL
  12351  */
  12352 char *ellipsisStartCharS(const char *string, size_t targetLength, char ellipsisChar) {
  12353 
  12354   // sanity
  12355   if (!string) {
  12356     return(NULL);
  12357   }
  12358 
  12359   if (!targetLength) {
  12360     return(strdup(""));
  12361   }
  12362 
  12363   charToS(ellipsisString, ellipsisChar);
  12364 
  12365   size_t len = strlen(string);
  12366 
  12367   if (len <= targetLength) {
  12368     return(strdup(string));
  12369   }
  12370   else {
  12371     // truncate string
  12372     char *ellip = strdup(ellipsisString);
  12373     string += ((len - targetLength) + strlen(ellipsisString)) <= len ? (len - targetLength) + strlen(ellipsisString) : len;
  12374     pErrorNULL(iAppendS(&ellip, string));
  12375     // make sure the result is target length
  12376     pErrorNULL(iSliceS(&ellip, 0, (int64_t)targetLength));
  12377     return(ellip);
  12378 }
  12379   }
  12380 
  12381 /**
  12382  * ellipsis start string
  12383  *
  12384  * This function pads the current string with a given string if current string is longer than target length
  12385  * If target length is more than current string's length, the current string is returned as is
  12386  *
  12387  * \param
  12388  * string (this parameter is reallocated)
  12389  * \param
  12390  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  12391  *              than the current string's length, the current string is truncated from the right and the pad is
  12392  *              applied once
  12393  * \param
  12394  * ellipsisChar The char to pad the current string with.
  12395  * \return
  12396  * updated string of the specified length with the pad string applied from the start
  12397  * NULL when string or ellipsisString are NULL
  12398  */
  12399 char *iEllipsisStartCharS(char **string, size_t targetLength, char ellipsisChar) {
  12400 
  12401   // sanity
  12402   if (!string or !*string) {
  12403     return(NULL);
  12404   }
  12405 
  12406   if (!targetLength) {
  12407     (*string)[0] = 0;
  12408     return(*string);
  12409   }
  12410 
  12411   charToS(ellipsisString, ellipsisChar);
  12412 
  12413   size_t len = strlen(*string);
  12414 
  12415   if (len > targetLength) {
  12416     // truncate string
  12417     char *ellip = strdup(ellipsisString);
  12418     char *str   = *string + (((len - targetLength) + strlen(ellipsisString)) <= len ? (len - targetLength) + strlen(ellipsisString) : len);
  12419     pErrorNULL(iAppendS(&ellip, str));
  12420     // make sure the result is target length
  12421     pErrorNULL(iSliceS(&ellip, 0, (int64_t)targetLength));
  12422     free(*string);
  12423     *string = ellip;
  12424   }
  12425   return(*string);
  12426 }
  12427 
  12428 /**
  12429  * ellipsis start string
  12430  *
  12431  * This function pads the current string with a given string if current string is longer than target length
  12432  * If target length is more than current string's length, the current string is returned as is
  12433  *
  12434  * \param
  12435  * string
  12436  * \param
  12437  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  12438  *              than the current string's length, the current string is truncated from the right and the pad is
  12439  *              applied once
  12440  * \param
  12441  * ellipsisChar The char to pad the current string with.
  12442  * \return
  12443  * string in dest of the specified length with the pad string applied from the start
  12444  * NULL when dest, string or ellipsisString are NULL
  12445  */
  12446 char *bEllipsisStartCharS(char *dest, const char *string, size_t targetLength, char ellipsisChar) {
  12447 
  12448   // sanity
  12449   if (!string  or !dest) {
  12450     return(NULL);
  12451   }
  12452 
  12453   if (!targetLength) {
  12454     dest[0] = 0;
  12455     return(dest);
  12456   }
  12457 
  12458   charToS(ellipsisString, ellipsisChar);
  12459 
  12460   size_t len = strlen(string);
  12461 
  12462   if (len <= targetLength) {
  12463     strcpy(dest, string);
  12464   }
  12465   else {
  12466     // truncate string
  12467     char *ellip = strdup(ellipsisString);
  12468     string += ((len - targetLength) + strlen(ellipsisString)) <= len ? (len - targetLength) + strlen(ellipsisString) : len;
  12469     pErrorNULL(iAppendS(&ellip, string));
  12470     // make sure the result is target length
  12471     pErrorNULL(iSliceS(&ellip, 0, (int64_t)targetLength));
  12472     strncpy(dest, ellip, targetLength+1);
  12473     free(ellip);
  12474   }
  12475   return(dest);
  12476 }
  12477 
  12478 /**
  12479  * ellipsis start string
  12480  *
  12481  * This function pads the current string with a given string if current string is longer than target length
  12482  * If target length is more than current string's length, the current string is returned as is
  12483  *
  12484  * \param
  12485  * string
  12486  * \param
  12487  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  12488  *              than the current string's length, the current string is truncated from the right and the pad is
  12489  *              applied once
  12490  * \param
  12491  * ellipsisChar The char to pad the current string with.
  12492  * \return
  12493  * string in dest of the specified length with the pad string applied from the start
  12494  * NULL when dest, string or ellipsisString are NULL
  12495  */
  12496 char *bLEllipsisStartCharS(char *dest, size_t destSize, const char *string, size_t targetLength, char ellipsisChar) {
  12497 
  12498   // sanity
  12499   if (!string or !dest) {
  12500     return(NULL);
  12501   }
  12502 
  12503   if (!destSize) {
  12504     return(dest);
  12505   }
  12506 
  12507   if (!targetLength) {
  12508     dest[0] = 0;
  12509     return(dest);
  12510   }
  12511 
  12512   charToS(ellipsisString, ellipsisChar);
  12513 
  12514   targetLength = destSize > targetLength ? targetLength : destSize;;
  12515 
  12516   size_t len = strlen(string);
  12517 
  12518   if (len <= targetLength) {
  12519     pErrorNULL(strLCpy(dest, destSize, string));
  12520   }
  12521   else {
  12522     // truncate string
  12523     char *ellip = strdup(ellipsisString);
  12524     string += ((len - targetLength) + strlen(ellipsisString)) <= len ? (len - targetLength) + strlen(ellipsisString) : len;
  12525     pErrorNULL(iAppendS(&ellip, string));
  12526     // make sure the result is target length
  12527     pErrorNULL(iSliceS(&ellip, 0, (int64_t)targetLength));
  12528     pErrorNULL(strLCpy(dest, destSize, ellip));
  12529     free(ellip);
  12530   }
  12531   return(dest);
  12532 }
  12533 
  12534 
  12535 /**
  12536  * length of string after ellipsis
  12537  *
  12538  * \param
  12539  * string
  12540  * \return
  12541  * length of string after ellipsis
  12542  * -1 when string is NULL
  12543  */
  12544 ssize_t ellipsisLenS(const char *string, size_t targetLength, const char *ellipsisString) {
  12545 
  12546   // sanity
  12547   if (!string or !ellipsisString) {
  12548     return(-1);
  12549   }
  12550 
  12551   size_t len = strlen(string);
  12552 
  12553   if (len <= targetLength) {
  12554     return((ssize_t)len);
  12555   }
  12556   else {
  12557     return((ssize_t)targetLength);
  12558 }
  12559   }
  12560 
  12561 /**
  12562  * ellipsis end string
  12563  *
  12564  * This function pads the current string with a given string if current string is longer than target length
  12565  * If target length is more than current string's length, the current string is returned as is
  12566  *
  12567  * \param
  12568  * string
  12569  * \param
  12570  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  12571  *              than the current string's length, the current string is truncated from the left and the pad is
  12572  *              applied once
  12573  * \param
  12574  * ellipsisString The string to pad the current string with.
  12575  * \return
  12576  * new string of the specified length with the pad string applied from the end (you must free the pointer)
  12577  * NULL when string or ellipsisString are NULL
  12578  */
  12579 char *ellipsisEndS(const char *string, size_t targetLength, const char *ellipsisString) {
  12580 
  12581   // sanity
  12582   if (!string or !ellipsisString) {
  12583     return(NULL);
  12584   }
  12585 
  12586   if (!targetLength) {
  12587     return(strdup(""));
  12588   }
  12589 
  12590   size_t len = strlen(string);
  12591 
  12592   if (len <= targetLength) {
  12593     return(strdup(string));
  12594   }
  12595   else {
  12596     // truncate string
  12597     char *ellip;
  12598     if ( strlen(ellipsisString) < targetLength) {
  12599       ellip = sliceS(string, 0, (int64_t)(targetLength - strlen(ellipsisString)));
  12600       pErrorNULL(iAppendS(&ellip, ellipsisString));
  12601     }
  12602     else {
  12603       // ellipsisString is longer than targetLength
  12604       ellip = sliceS(ellipsisString, 0, (int64_t)targetLength);
  12605     }
  12606     return(ellip);
  12607 }
  12608   }
  12609 
  12610 /**
  12611  * ellipsis end string
  12612  *
  12613  * This function pads the current string with a given string if current string is longer than target length
  12614  * If target length is more than current string's length, the current string is returned as is
  12615  *
  12616  * \param
  12617  * string (this parameter is reallocated)
  12618  * \param
  12619  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  12620  *              than the current string's length, the current string is truncated from the left and the pad is
  12621  *              applied once
  12622  * \param
  12623  * ellipsisString The string to pad the current string with.
  12624  * \return
  12625  * updated string of the specified length with the pad string applied from the end
  12626  * NULL when string or ellipsisString are NULL
  12627  */
  12628 char *iEllipsisEndS(char **string, size_t targetLength, const char *ellipsisString) {
  12629 
  12630   // sanity
  12631   if (!string or !*string or !ellipsisString) {
  12632     return(NULL);
  12633   }
  12634 
  12635   if (!targetLength) {
  12636     (*string)[0] = 0;
  12637     return(*string);
  12638   }
  12639 
  12640   size_t len = strlen(*string);
  12641 
  12642   if (len > targetLength) {
  12643     // truncate string
  12644     char *ellip;
  12645     if ( strlen(ellipsisString) < targetLength) {
  12646       ellip = sliceS(*string, 0, (int64_t)(targetLength - strlen(ellipsisString)));
  12647       pErrorNULL(iAppendS(&ellip, ellipsisString));
  12648     }
  12649     else {
  12650       // ellipsisString is longer than targetLength
  12651       ellip = sliceS(ellipsisString, 0, (int64_t)targetLength);
  12652     }
  12653     free(*string);
  12654     *string = ellip;
  12655   }
  12656   return(*string);
  12657 }
  12658 
  12659 /**
  12660  * ellipsis end string
  12661  *
  12662  * This function pads the current string with a given string if current string is longer than target length
  12663  * If target length is more than current string's length, the current string is returned as is
  12664  *
  12665  * \param
  12666  * string
  12667  * \param
  12668  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  12669  *              than the current string's length, the current string is truncated from the left and the pad is
  12670  *              applied once
  12671  * \param
  12672  * ellipsisString The string to pad the current string with.
  12673  * \return
  12674  * string in dest of the specified length with the pad string applied from the end
  12675  * NULL when dest, string or ellipsisString are NULL
  12676  */
  12677 char *bEllipsisEndS(char *dest, const char *string, size_t targetLength, const char *ellipsisString) {
  12678 
  12679   // sanity
  12680   if (!string or !ellipsisString or !dest) {
  12681     return(NULL);
  12682   }
  12683 
  12684   if (!targetLength) {
  12685     dest[0] = 0;
  12686     return(dest);
  12687   }
  12688 
  12689   size_t len = strlen(string);
  12690 
  12691   if (len <= targetLength) {
  12692     strcpy(dest, string);
  12693   }
  12694   else {
  12695     // truncate string
  12696     char *ellip;
  12697     if ( strlen(ellipsisString) < targetLength) {
  12698       ellip = sliceS(string, 0, (int64_t)(targetLength - strlen(ellipsisString)));
  12699       pErrorNULL(iAppendS(&ellip, ellipsisString));
  12700     }
  12701     else {
  12702       // ellipsisString is longer than targetLength
  12703       ellip = sliceS(ellipsisString, 0, (int64_t)targetLength);
  12704     }
  12705     if (!ellip) {
  12706       return(NULL);
  12707     }
  12708     strncpy(dest, ellip, targetLength+1);
  12709     free(ellip);
  12710   }
  12711   return(dest);
  12712 }
  12713 
  12714 /**
  12715  * ellipsis end string
  12716  *
  12717  * This function pads the current string with a given string if current string is longer than target length
  12718  * If target length is more than current string's length, the current string is returned as is
  12719  *
  12720  * \param
  12721  * string
  12722  * \param
  12723  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  12724  *              than the current string's length, the current string is truncated from the left and the pad is
  12725  *              applied once
  12726  * \param
  12727  * ellipsisString The string to pad the current string with.
  12728  * \return
  12729  * string in dest of the specified length with the pad string applied from the end
  12730  * NULL when dest, string or ellipsisString are NULL
  12731  */
  12732 char *bLEllipsisEndS(char *dest, size_t destSize, const char *string, size_t targetLength, const char *ellipsisString) {
  12733 
  12734   // sanity
  12735   if (!string or !ellipsisString or !dest) {
  12736     return(NULL);
  12737   }
  12738 
  12739   if (!destSize) {
  12740     return(dest);
  12741   }
  12742 
  12743   if (!targetLength) {
  12744     dest[0] = 0;
  12745     return(dest);
  12746   }
  12747 
  12748   targetLength = destSize > targetLength ? targetLength : destSize;;
  12749 
  12750   size_t len = strlen(string);
  12751 
  12752   if (len <= targetLength) {
  12753     pErrorNULL(strLCpy(dest, destSize, string));
  12754   }
  12755   else {
  12756     // truncate string
  12757     char *ellip;
  12758     if ( strlen(ellipsisString) < targetLength) {
  12759       ellip = sliceS(string, 0, (int64_t)(targetLength - strlen(ellipsisString)));
  12760       pErrorNULL(iAppendS(&ellip, ellipsisString));
  12761     }
  12762     else {
  12763       // ellipsisString is longer than targetLength
  12764       ellip = sliceS(ellipsisString, 0, (int64_t)targetLength);
  12765     }
  12766     pErrorNULL(strLCpy(dest, destSize, ellip));
  12767     free(ellip);
  12768   }
  12769   return(dest);
  12770 }
  12771 
  12772 /**
  12773  * ellipsis end string
  12774  *
  12775  * This function pads the current string with a given string if current string is longer than target length
  12776  * If target length is more than current string's length, the current string is returned as is
  12777  *
  12778  * \param
  12779  * string
  12780  * \param
  12781  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  12782  *              than the current string's length, the current string is truncated from the left and the pad is
  12783  *              applied once
  12784  * \param
  12785  * ellipsisChar The char to pad the current string with.
  12786  * \return
  12787  * new string of the specified length with the pad string applied from the end (you must free the pointer)
  12788  * NULL when string or ellipsisString are NULL
  12789  */
  12790 char *ellipsisEndCharS(const char *string, size_t targetLength, char ellipsisChar) {
  12791 
  12792   // sanity
  12793   if (!string) {
  12794     return(NULL);
  12795   }
  12796 
  12797   if (!targetLength) {
  12798     return(strdup(""));
  12799   }
  12800 
  12801   charToS(ellipsisString, ellipsisChar);
  12802 
  12803   size_t len = strlen(string);
  12804 
  12805   if (len <= targetLength) {
  12806     return(strdup(string));
  12807   }
  12808   else {
  12809     // truncate string
  12810     char *ellip;
  12811     ellip = sliceS(string, 0, (int64_t)(targetLength - strlen(ellipsisString)));
  12812     pErrorNULL(iAppendS(&ellip, ellipsisString));
  12813     return(ellip);
  12814 }
  12815   }
  12816 
  12817 /**
  12818  * ellipsis end string
  12819  *
  12820  * This function pads the current string with a given string if current string is longer than target length
  12821  * If target length is more than current string's length, the current string is returned as is
  12822  *
  12823  * \param
  12824  * string (this parameter is reallocated)
  12825  * \param
  12826  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  12827  *              than the current string's length, the current string is truncated from the left and the pad is
  12828  *              applied once
  12829  * \param
  12830  * ellipsisChar The char to pad the current string with.
  12831  * \return
  12832  * updated string of the specified length with the pad string applied from the end
  12833  * NULL when string or ellipsisString are NULL
  12834  */
  12835 char *iEllipsisEndCharS(char **string, size_t targetLength, char ellipsisChar) {
  12836 
  12837   // sanity
  12838   if (!string or !*string) {
  12839     return(NULL);
  12840   }
  12841 
  12842   if (!targetLength) {
  12843     (*string)[0] = 0;
  12844     return(*string);
  12845   }
  12846 
  12847   charToS(ellipsisString, ellipsisChar);
  12848 
  12849   size_t len = strlen(*string);
  12850 
  12851   if (len > targetLength) {
  12852     // truncate string
  12853     char *ellip;
  12854     ellip = sliceS(*string, 0, (int64_t)(targetLength - strlen(ellipsisString)));
  12855     pErrorNULL(iAppendS(&ellip, ellipsisString));
  12856     free(*string);
  12857     *string = ellip;
  12858   }
  12859   return(*string);
  12860 }
  12861 
  12862 /**
  12863  * ellipsis end string
  12864  *
  12865  * This function pads the current string with a given string if current string is longer than target length
  12866  * If target length is more than current string's length, the current string is returned as is
  12867  *
  12868  * \param
  12869  * string
  12870  * \param
  12871  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  12872  *              than the current string's length, the current string is truncated from the left and the pad is
  12873  *              applied once
  12874  * \param
  12875  * ellipsisChar The char to pad the current string with.
  12876  * \return
  12877  * string in dest of the specified length with the pad string applied from the end
  12878  * NULL when dest, string or ellipsisString are NULL
  12879  */
  12880 char *bEllipsisEndCharS(char *dest, const char *string, size_t targetLength, char ellipsisChar) {
  12881 
  12882   // sanity
  12883   if (!string or !dest) {
  12884     return(NULL);
  12885   }
  12886 
  12887   if (!targetLength) {
  12888     dest[0] = 0;
  12889     return(dest);
  12890   }
  12891 
  12892   charToS(ellipsisString, ellipsisChar);
  12893 
  12894   size_t len = strlen(string);
  12895 
  12896   if (len <= targetLength) {
  12897     strcpy(dest, string);
  12898   }
  12899   else {
  12900     // truncate string
  12901     char *ellip;
  12902     ellip = sliceS(string, 0, (int64_t)(targetLength - strlen(ellipsisString)));
  12903     if (!ellip) {
  12904       return(NULL);
  12905     }
  12906     pErrorNULL(iAppendS(&ellip, ellipsisString));
  12907     strncpy(dest, ellip, targetLength+1);
  12908     free(ellip);
  12909   }
  12910   return(dest);
  12911 }
  12912 
  12913 /**
  12914  * ellipsis end string
  12915  *
  12916  * This function pads the current string with a given string if current string is longer than target length
  12917  * If target length is more than current string's length, the current string is returned as is
  12918  *
  12919  * \param
  12920  * string
  12921  * \param
  12922  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  12923  *              than the current string's length, the current string is truncated from the left and the pad is
  12924  *              applied once
  12925  * \param
  12926  * ellipsisString The string to pad the current string with.
  12927  * \return
  12928  * string in dest of the specified length with the pad string applied from the end
  12929  * NULL when dest, string or ellipsisString are NULL
  12930  */
  12931 char *bLEllipsisEndCharS(char *dest, size_t destSize, const char *string, size_t targetLength, char ellipsisChar) {
  12932 
  12933   // sanity
  12934   if (!string or !dest) {
  12935     return(NULL);
  12936   }
  12937 
  12938   if (!destSize) {
  12939     return(dest);
  12940   }
  12941 
  12942   if (!targetLength) {
  12943     dest[0] = 0;
  12944     return(dest);
  12945   }
  12946 
  12947   charToS(ellipsisString, ellipsisChar);
  12948 
  12949   targetLength = destSize > targetLength ? targetLength : destSize;;
  12950 
  12951   size_t len = strlen(string);
  12952 
  12953   if (len <= targetLength) {
  12954     pErrorNULL(strLCpy(dest, destSize, string));
  12955   }
  12956   else {
  12957     // truncate string
  12958     char *ellip;
  12959     ellip = sliceS(string, 0, (int64_t)(targetLength - strlen(ellipsisString)));
  12960     pErrorNULL(iAppendS(&ellip, ellipsisString));
  12961     pErrorNULL(strLCpy(dest, destSize, ellip));
  12962     free(ellip);
  12963   }
  12964   return(dest);
  12965 }
  12966 
  12967 
  12968 /**
  12969  * pad start string
  12970  *
  12971  * This function pads the current string with a given string (repeated, if needed) until the
  12972  * resulting string reaches a given length. The padding is applied from the start (left) of the current
  12973  * string
  12974  *
  12975  * \param
  12976  * string
  12977  * \param
  12978  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  12979  *              than the current string's length, the current string is returned as is
  12980  * \param
  12981  * padString The string to pad the current string with. If this string is too long to stay within the target
  12982  *           length, it will be truncated from the right. The current string is returned as is
  12983  *           when an empty string is supplied
  12984  * \return
  12985  * new string of the specified length with the pad string applied from the start (you must free the pointer)
  12986  * NULL when string or padString are NULL
  12987  */
  12988 char *padStartS(const char *string, size_t targetLength, const char *padString) {
  12989 
  12990   // sanity
  12991   if (!string) {
  12992     return(NULL);
  12993   }
  12994   if (strlen(string) >= targetLength) {
  12995     return(strdup(string));
  12996   }
  12997   if (!padString) {
  12998     return(NULL);
  12999   }
  13000   if (!strlen(padString)) {
  13001     return(strdup(string));
  13002   }
  13003 
  13004   targetLength -= strlen(string);
  13005 
  13006   char *pads = strdup(padString);;
  13007   if (!pads) {
  13008     return(NULL);
  13009   }
  13010   if (targetLength > strlen(padString)) {
  13011     pErrorNULL(iRepeatS(&pads, targetLength/strlen(padString)+1));
  13012   }
  13013 
  13014   pErrorNULL(iSliceS(&pads, 0, (int64_t)targetLength));
  13015 
  13016   char *r = appendS(pads, string);
  13017   free(pads);
  13018 
  13019   return(r);
  13020 }
  13021 
  13022 /**
  13023  * pad start string
  13024  *
  13025  * This function pads the current string with a given string (repeated, if needed) until the
  13026  * resulting string reaches a given length. The padding is applied from the start (left) of the current
  13027  * string
  13028  *
  13029  * \param
  13030  * string (this parameter is reallocated)
  13031  * \param
  13032  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  13033  *              than the current string's length, the current string is returned as is
  13034  * \param
  13035  * padString The string to pad the current string with. If this string is too long to stay within the target
  13036  *           length, it will be truncated from the right. The current string is returned as is
  13037  *           when an empty string is supplied
  13038  * \return
  13039  * updated string of the specified length with the pad string applied from the start
  13040  * NULL when string or padString are NULL
  13041  */
  13042 char *iPadStartS(char **string, size_t targetLength, const char *padString) {
  13043 
  13044   // sanity
  13045   if (!string or !*string) {
  13046     return(NULL);
  13047   }
  13048   if (strlen(*string) >= targetLength) {
  13049     return(*string);
  13050   }
  13051   if (!padString) {
  13052     return(NULL);
  13053   }
  13054   if (!strlen(padString)) {
  13055     return(*string);
  13056   }
  13057 
  13058   targetLength -= strlen(*string);
  13059 
  13060   char *pads = strdup(padString);;
  13061   if (targetLength > strlen(padString)) {
  13062     pErrorNULL(iRepeatS(&pads, targetLength/strlen(padString)+1));
  13063   }
  13064 
  13065   pErrorNULL(iSliceS(&pads, 0, (int64_t)targetLength));
  13066 
  13067   pErrorNULL(iAppendS(&pads, *string));
  13068   free(*string);
  13069   *string = pads;
  13070 
  13071   return(*string);
  13072 }
  13073 
  13074 /**
  13075  * pad start string
  13076  *
  13077  * This function pads the current string with a given string (repeated, if needed) until the
  13078  * resulting string reaches a given length. The padding is applied from the start (left) of the current
  13079  * string
  13080  *
  13081  * \param
  13082  * string
  13083  * \param
  13084  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  13085  *              than the current string's length, the current string is returned as is
  13086  * \param
  13087  * padString The string to pad the current string with. If this string is too long to stay within the target
  13088  *           length, it will be truncated from the right. The current string is returned as is
  13089  *           when an empty string is supplied
  13090  * \return
  13091  * new string of the specified length with the pad string applied from the start
  13092  * NULL when dest, string or padString are NULL
  13093  */
  13094 char *bPadStartS(char *dest, const char *string, size_t targetLength, const char *padString) {
  13095 
  13096   // sanity
  13097   if (!dest or !string) {
  13098     return(NULL);
  13099   }
  13100   if (strlen(string) >= targetLength) {
  13101     strcpy(dest, string);
  13102     return(dest);
  13103   }
  13104   if (!padString) {
  13105     return(NULL);
  13106   }
  13107   if (!strlen(padString)) {
  13108     strcpy(dest, string);
  13109     return(dest);
  13110   }
  13111 
  13112   targetLength -= strlen(string);
  13113 
  13114   char *pads = strdup(padString);;
  13115   if (!pads) {
  13116     return(NULL);
  13117   }
  13118   if (targetLength > strlen(padString)) {
  13119     pErrorNULL(iRepeatS(&pads, targetLength/strlen(padString)+1));
  13120   }
  13121 
  13122   pErrorNULL(iSliceS(&pads, 0, (int64_t)targetLength));
  13123 
  13124   char *r = appendS(pads, string);
  13125   free(pads);
  13126   if (!r) {
  13127     return(NULL);
  13128   }
  13129 
  13130   strcpy(dest, r);
  13131   free(r);
  13132 
  13133   return(dest);
  13134 }
  13135 
  13136 /**
  13137  * pad start string
  13138  *
  13139  * This function pads the current string with a given string (repeated, if needed) until the
  13140  * resulting string reaches a given length. The padding is applied from the start (left) of the current
  13141  * string
  13142  *
  13143  * \param
  13144  * string
  13145  * \param
  13146  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  13147  *              than the current string's length, the current string is returned as is
  13148  * \param
  13149  * padString The string to pad the current string with. If this string is too long to stay within the target
  13150  *           length, it will be truncated from the right. The current string is returned as is
  13151  *           when an empty string is supplied
  13152  * \return
  13153  * new string of the specified length with the pad string applied from the start
  13154  * NULL when dest, string or padString are NULL
  13155  */
  13156 char *bLPadStartS(char *dest, size_t destSize, const char *string, size_t targetLength, const char *padString) {
  13157 
  13158   // sanity
  13159   if (!dest or !string) {
  13160     return(NULL);
  13161   }
  13162   if (strlen(string) >= targetLength) {
  13163     pErrorNULL(strLCpy(dest, destSize, string));
  13164     return(dest);
  13165   }
  13166   if (!padString) {
  13167     return(NULL);
  13168   }
  13169   if (!strlen(padString)) {
  13170     pErrorNULL(strLCpy(dest, destSize, string));
  13171     return(dest);
  13172   }
  13173 
  13174   targetLength -= strlen(string);
  13175 
  13176   char *pads = strdup(padString);;
  13177   if (!pads) {
  13178     return(NULL);
  13179   }
  13180   if (targetLength > strlen(padString)) {
  13181     pErrorNULL(iRepeatS(&pads, targetLength/strlen(padString)+1));
  13182   }
  13183 
  13184   pErrorNULL(iSliceS(&pads, 0, (int64_t)targetLength));
  13185 
  13186   char *r = appendS(pads, string);
  13187   free(pads);
  13188   if (!r) {
  13189     return(NULL);
  13190   }
  13191 
  13192   pErrorNULL(strLCpy(dest, destSize, r));
  13193   free(r);
  13194 
  13195   return(dest);
  13196 }
  13197 
  13198 /**
  13199  * pad start string
  13200  *
  13201  * This function pads the current string with a given character (repeated, if needed) until the
  13202  * resulting string reaches a given length. The padding is applied from the start (left) of the current
  13203  * string
  13204  *
  13205  * \param
  13206  * string
  13207  * \param
  13208  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  13209  *              than the current string's length, the current string is returned as is
  13210  * \param
  13211  * padChar The character to pad the current string with
  13212  * \return
  13213  * new string of the specified length with the pad character applied from the start (you must free the pointer)
  13214  * NULL when string is NULL
  13215  */
  13216 char *padStartCharS(const char *string, size_t targetLength, char padChar) {
  13217 
  13218   // sanity
  13219   if (!string) {
  13220     return(NULL);
  13221   }
  13222   if (strlen(string) >= targetLength) {
  13223     return(strdup(string));
  13224   }
  13225 
  13226   targetLength -= strlen(string);
  13227 
  13228   charToS(padString, padChar);
  13229 
  13230   char *pads = strdup(padString);;
  13231   if (!pads) {
  13232     return(NULL);
  13233   }
  13234   if (targetLength > strlen(padString)) {
  13235     pErrorNULL(iRepeatS(&pads, targetLength/strlen(padString)+1));
  13236   }
  13237 
  13238   pErrorNULL(iSliceS(&pads, 0, (int64_t)targetLength));
  13239 
  13240   char *r = appendS(pads, string);
  13241   free(pads);
  13242 
  13243   return(r);
  13244 }
  13245 
  13246 /**
  13247  * pad start string
  13248  *
  13249  * This function pads the current string with a given character (repeated, if needed) until the
  13250  * resulting string reaches a given length. The padding is applied from the start (left) of the current
  13251  * string
  13252  *
  13253  * \param
  13254  * string (this parameter is reallocated)
  13255  * \param
  13256  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  13257  *              than the current string's length, the current string is returned as is
  13258  * \param
  13259  * padChar The character to pad the current string with
  13260  * \return
  13261  * new string of the specified length with the pad character applied from the start
  13262  * NULL when string is NULL
  13263  */
  13264 char *iPadStartCharS(char **string, size_t targetLength, char padChar) {
  13265 
  13266   // sanity
  13267   if (!string or !*string) {
  13268     return(NULL);
  13269   }
  13270   if (strlen(*string) >= targetLength) {
  13271     return(*string);
  13272   }
  13273 
  13274   targetLength -= strlen(*string);
  13275 
  13276   charToS(padString, padChar);
  13277 
  13278   char *pads = strdup(padString);;
  13279   if (targetLength > strlen(padString)) {
  13280     pErrorNULL(iRepeatS(&pads, targetLength/strlen(padString)+1));
  13281   }
  13282 
  13283   pErrorNULL(iSliceS(&pads, 0, (int64_t)targetLength));
  13284 
  13285   pErrorNULL(iAppendS(&pads, *string));
  13286   free(*string);
  13287   *string = pads;
  13288 
  13289   return(*string);
  13290 }
  13291 
  13292 /**
  13293  * pad start string
  13294  *
  13295  * This function pads the current string with a given character (repeated, if needed) until the
  13296  * resulting string reaches a given length. The padding is applied from the start (left) of the current
  13297  * string
  13298  *
  13299  * \param
  13300  * string
  13301  * \param
  13302  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  13303  *              than the current string's length, the current string is returned as is
  13304  * \param
  13305  * padChar The character to pad the current string with
  13306  * \return
  13307  * new string of the specified length with the pad character applied from the start
  13308  * NULL when dest or string are NULL
  13309  */
  13310 char *bPadStartCharS(char *dest, const char *string, size_t targetLength, char padChar) {
  13311 
  13312   // sanity
  13313   if (!dest or !string) {
  13314     return(NULL);
  13315   }
  13316   if (strlen(string) >= targetLength) {
  13317     strcpy(dest, string);
  13318     return(dest);
  13319   }
  13320 
  13321   targetLength -= strlen(string);
  13322 
  13323   charToS(padString, padChar);
  13324 
  13325   char *pads = strdup(padString);;
  13326   if (!pads) {
  13327     return(NULL);
  13328   }
  13329   if (targetLength > strlen(padString)) {
  13330     pErrorNULL(iRepeatS(&pads, targetLength/strlen(padString)+1));
  13331   }
  13332 
  13333   pErrorNULL(iSliceS(&pads, 0, (int64_t)targetLength));
  13334 
  13335   char *r = appendS(pads, string);
  13336   free(pads);
  13337   if (!r) {
  13338     return(NULL);
  13339   }
  13340 
  13341   strcpy(dest, r);
  13342   free(r);
  13343 
  13344   return(dest);
  13345 }
  13346 
  13347 /**
  13348  * pad start string
  13349  *
  13350  * This function pads the current string with a given character (repeated, if needed) until the
  13351  * resulting string reaches a given length. The padding is applied from the start (left) of the current
  13352  * string
  13353  *
  13354  * \param
  13355  * string
  13356  * \param
  13357  * targetLength The length of the resulting string once the current string has been padded. If the value is less
  13358  *              than the current string's length, the current string is returned as is
  13359  * \param
  13360  * padChar The character to pad the current string with
  13361  * \return
  13362  * new string of the specified length with the pad character applied from the start
  13363  * NULL when dest or string are NULL
  13364  */
  13365 char *bLPadStartCharS(char *dest, size_t destSize, const char *string, size_t targetLength, char padChar) {
  13366 
  13367   // sanity
  13368   if (!dest or !string) {
  13369     return(NULL);
  13370   }
  13371   if (strlen(string) >= targetLength) {
  13372     pErrorNULL(strLCpy(dest, destSize, string));
  13373     return(dest);
  13374   }
  13375 
  13376   targetLength -= strlen(string);
  13377 
  13378   charToS(padString, padChar);
  13379 
  13380   char *pads = strdup(padString);;
  13381   if (!pads) {
  13382     return(NULL);
  13383   }
  13384   if (targetLength > strlen(padString)) {
  13385     pErrorNULL(iRepeatS(&pads, targetLength/strlen(padString)+1));
  13386   }
  13387 
  13388   pErrorNULL(iSliceS(&pads, 0, (int64_t)targetLength));
  13389 
  13390   char *r = appendS(pads, string);
  13391   free(pads);
  13392   if (!r) {
  13393     return(NULL);
  13394   }
  13395 
  13396   pErrorNULL(strLCpy(dest, destSize, r));
  13397   free(r);
  13398 
  13399   return(dest);
  13400 }
  13401 
  13402 /**
  13403  * length of string after padStart
  13404  *
  13405  * \param
  13406  * string
  13407  * \return
  13408  * length of string after padStart
  13409  * -1 when string is NULL
  13410  */
  13411 ssize_t padStartLenS(const char *string, size_t targetLength, const char *padString) {
  13412 
  13413   // sanity
  13414   if (!string) {
  13415     return(-1);
  13416   }
  13417   if (strlen(string) >= targetLength) {
  13418     return((ssize_t)strlen(string));
  13419   }
  13420   if (!padString) {
  13421     return(-1);
  13422   }
  13423   if (!strlen(padString)) {
  13424     return((ssize_t)strlen(string));
  13425   }
  13426 
  13427   return((ssize_t)targetLength);
  13428 }
  13429 
  13430 /**
  13431  * pad end string
  13432  *
  13433  * This function pads the current string with a given string (repeated, if needed) until the
  13434  * resulting string reaches a given length. The padding is applied from the end (right) of the current
  13435  * string
  13436  *
  13437  * \param
  13438  * string
  13439  * \param
  13440  * targetLength The length of the resulting string once the current string has been padded. If the value is lower
  13441  *              than the current string's length, the current string is returned as is
  13442  * \param
  13443  * padString The string to pad the current string with. If this string is too long to stay within the target
  13444  *           length, it will be truncated and the left-most part will be applied. The current string is returned as is
  13445  *           when an empty string is supplied
  13446  * \return
  13447  * new string of the specified length with the pad string applied at the end of the current string (you must free the pointer)
  13448  * NULL when string or padString are NULL
  13449  */
  13450 char *padEndS(const char *string, size_t targetLength, const char *padString) {
  13451 
  13452   // sanity
  13453   if (!string) {
  13454     return(NULL);
  13455   }
  13456   if (strlen(string) > targetLength) {
  13457     return(strdup(string));
  13458   }
  13459   if (!padString) {
  13460     return(NULL);
  13461   }
  13462   if (!strlen(padString)) {
  13463     return(strdup(string));
  13464   }
  13465 
  13466   targetLength -= strlen(string);
  13467 
  13468   char *pads = strdup(padString);;
  13469   if (!pads) {
  13470     return(NULL);
  13471   }
  13472   if (targetLength > strlen(padString)) {
  13473     pErrorNULL(iRepeatS(&pads, targetLength/strlen(padString)+1));
  13474   }
  13475 
  13476   pErrorNULL(iSliceS(&pads, 0, (int64_t)targetLength));
  13477 
  13478   char *r = appendS(string, pads);
  13479   free(pads);
  13480 
  13481   return(r);
  13482 }
  13483 
  13484 
  13485 
  13486 /**
  13487  * pad end string
  13488  *
  13489  * This function pads the current string with a given string (repeated, if needed) so that the
  13490  * resulting string reaches a given length. The padding is applied from the end (right) of the current
  13491  * string
  13492  *
  13493  * \param
  13494  * string (this parameter is reallocated)
  13495  * \param
  13496  * targetLength The length of the resulting string once the current string has been padded. If the value is lower
  13497  *              than the current string's length, the current string will be returned as is
  13498  * \param
  13499  * padString The string to pad the current string with. If this string is too long to stay within the target
  13500  *           length, it will be truncated and the left-most part will be applied. The current string is returned as is
  13501  *           when an empty string is supplied
  13502  * \return
  13503  * updated string of the specified length with the pad string applied at the end of the current string
  13504  * NULL when string or padString are NULL
  13505  */
  13506 char *iPadEndS(char **string, size_t targetLength, const char *padString) {
  13507 
  13508   // sanity
  13509   if (!string or !*string) {
  13510     return(NULL);
  13511   }
  13512   if (strlen(*string) > targetLength) {
  13513     return(*string);
  13514   }
  13515   if (!padString) {
  13516     return(NULL);
  13517   }
  13518   if (!strlen(padString)) {
  13519     return(*string);
  13520   }
  13521 
  13522   targetLength -= strlen(*string);
  13523 
  13524   char *pads = strdup(padString);;
  13525   if (!pads) {
  13526     return(NULL);
  13527   }
  13528   if (targetLength > strlen(padString)) {
  13529     pErrorNULL(iRepeatS(&pads, targetLength/strlen(padString)+1));
  13530   }
  13531 
  13532   pErrorNULL(iSliceS(&pads, 0, (int64_t)targetLength));
  13533 
  13534   pErrorNULL(iAppendS(string, pads));
  13535   free(pads);
  13536 
  13537   return(*string);
  13538 }
  13539 
  13540 /**
  13541  * pad end string
  13542  *
  13543  * This function pads the current string with a given string (repeated, if needed) so that the
  13544  * resulting string reaches a given length. The padding is applied from the end (right) of the current
  13545  * string
  13546  *
  13547  * \param
  13548  * string
  13549  * \param
  13550  * targetLength The length of the resulting string once the current string has been padded. If the value is lower
  13551  *              than the current string's length, the current string will be returned as is
  13552  * \param
  13553  * padString The string to pad the current string with. If this string is too long to stay within the target
  13554  *           length, it will be truncated and the left-most part will be applied. The current string is returned as is
  13555  *           when an empty string is supplied
  13556  * \return
  13557  * new string of the specified length with the pad string applied at the end of the current string
  13558  * NULL when dest, string or padString are NULL
  13559  */
  13560 char *bPadEndS(char *dest, const char *string, size_t targetLength, const char *padString) {
  13561 
  13562   // sanity
  13563   if (!dest or !string) {
  13564     return(NULL);
  13565   }
  13566   if (strlen(string) > targetLength) {
  13567     strcpy(dest, string);
  13568     return(dest);
  13569   }
  13570   if (!padString) {
  13571     return(NULL);
  13572   }
  13573   if (!strlen(padString)) {
  13574     strcpy(dest, string);
  13575     return(dest);
  13576   }
  13577 
  13578   targetLength -= strlen(string);
  13579 
  13580   char *pads = strdup(padString);;
  13581   if (!pads) {
  13582     return(NULL);
  13583   }
  13584   if (targetLength > strlen(padString)) {
  13585     pErrorNULL(iRepeatS(&pads, targetLength/strlen(padString)+1));
  13586   }
  13587 
  13588   pErrorNULL(iSliceS(&pads, 0, (int64_t)targetLength));
  13589 
  13590   char *r = appendS(string, pads);
  13591   free(pads);
  13592   if (!r) {
  13593     return(NULL);
  13594   }
  13595 
  13596   strcpy(dest, r);
  13597   free(r);
  13598 
  13599   return(dest);
  13600 }
  13601 
  13602 /**
  13603  * pad end string
  13604  *
  13605  * This function pads the current string with a given string (repeated, if needed) so that the
  13606  * resulting string reaches a given length. The padding is applied from the end (right) of the current
  13607  * string
  13608  *
  13609  * \param
  13610  * string
  13611  * \param
  13612  * targetLength The length of the resulting string once the current string has been padded. If the value is lower
  13613  *              than the current string's length, the current string will be returned as is
  13614  * \param
  13615  * padString The string to pad the current string with. If this string is too long to stay within the target
  13616  *           length, it will be truncated and the left-most part will be applied. The current string is returned as is
  13617  *           when an empty string is supplied
  13618  * \return
  13619  * new string of the specified length with the pad string applied at the end of the current string
  13620  * NULL when dest, string or padString are NULL
  13621  */
  13622 char *bLPadEndS(char *dest, size_t destSize, const char *string, size_t targetLength, const char *padString) {
  13623 
  13624   // sanity
  13625   if (!dest or !string) {
  13626     return(NULL);
  13627   }
  13628   if (strlen(string) > targetLength) {
  13629     pErrorNULL(strLCpy(dest, destSize, string));
  13630     return(dest);
  13631   }
  13632   if (!padString) {
  13633     return(NULL);
  13634   }
  13635   if (!strlen(padString)) {
  13636     pErrorNULL(strLCpy(dest, destSize, string));
  13637     return(dest);
  13638   }
  13639 
  13640   targetLength -= strlen(string);
  13641 
  13642   char *pads = strdup(padString);;
  13643   if (!pads) {
  13644     return(NULL);
  13645   }
  13646   if (targetLength > strlen(padString)) {
  13647     pErrorNULL(iRepeatS(&pads, targetLength/strlen(padString)+1));
  13648   }
  13649 
  13650   pErrorNULL(iSliceS(&pads, 0, (int64_t)targetLength));
  13651 
  13652   char *r = appendS(string, pads);
  13653   free(pads);
  13654   if (!r) {
  13655     return(NULL);
  13656   }
  13657 
  13658   pErrorNULL(strLCpy(dest, destSize, r));
  13659   free(r);
  13660 
  13661   return(dest);
  13662 }
  13663 
  13664 /**
  13665  * pad end string
  13666  *
  13667  * This function pads the current string with a given character (repeated, if needed) so that the
  13668  * resulting string reaches a given length. The padding is applied from the end (right) of the current
  13669  * string
  13670  *
  13671  * \param
  13672  * string
  13673  * \param
  13674  * targetLength The length of the resulting string once the current string has been padded. If the value is lower
  13675  *              than the current string's length, the current string will be returned as is
  13676  * \param
  13677  * padChar The character to pad the current string with
  13678  * \return
  13679  * new string of the specified length with the pad character applied at the end of the current string (you must free the pointer)
  13680  * NULL when string is NULL
  13681  */
  13682 char *padEndCharS(const char *string, size_t targetLength, char padChar) {
  13683 
  13684   // sanity
  13685   if (!string) {
  13686     return(NULL);
  13687   }
  13688   if (strlen(string) > targetLength) {
  13689     return(strdup(string));
  13690   }
  13691 
  13692   targetLength -= strlen(string);
  13693 
  13694   charToS(padString, padChar);
  13695 
  13696   char *pads = strdup(padString);;
  13697   if (!pads) {
  13698     return(NULL);
  13699   }
  13700   if (targetLength > strlen(padString)) {
  13701     pErrorNULL(iRepeatS(&pads, targetLength/strlen(padString)+1));
  13702   }
  13703 
  13704   pErrorNULL(iSliceS(&pads, 0, (int64_t)targetLength));
  13705 
  13706   char *r = appendS(string, pads);
  13707   free(pads);
  13708 
  13709   return(r);
  13710 }
  13711 
  13712 /**
  13713  * pad end string
  13714  *
  13715  * This function pads the current string with a given character (repeated, if needed) so that the
  13716  * resulting string reaches a given length. The padding is applied from the end (right) of the current
  13717  * string
  13718  *
  13719  * \param
  13720  * string (this parameter is reallocated)
  13721  * \param
  13722  * targetLength The length of the resulting string once the current string has been padded. If the value is lower
  13723  *              than the current string's length, the current string will be returned as is
  13724  * \param
  13725  * padChar The character to pad the current string with
  13726  * \return
  13727  * updated string of the specified length with the pad character applied at the end of the current string
  13728  * NULL when string is NULL
  13729  */
  13730 char *iPadEndCharS(char **string, size_t targetLength, char padChar) {
  13731 
  13732   // sanity
  13733   if (!string or !*string) {
  13734     return(NULL);
  13735   }
  13736   if (strlen(*string) > targetLength) {
  13737     return(*string);
  13738   }
  13739 
  13740   targetLength -= strlen(*string);
  13741 
  13742   charToS(padString, padChar);
  13743 
  13744   char *pads = strdup(padString);;
  13745   if (!pads) {
  13746     return(NULL);
  13747   }
  13748   if (targetLength > strlen(padString)) {
  13749     pErrorNULL(iRepeatS(&pads, targetLength/strlen(padString)+1));
  13750   }
  13751 
  13752   pErrorNULL(iSliceS(&pads, 0, (int64_t)targetLength));
  13753 
  13754   pErrorNULL(iAppendS(string, pads));
  13755   free(pads);
  13756 
  13757   return(*string);
  13758 }
  13759 
  13760 /**
  13761  * pad end string
  13762  *
  13763  * This function pads the current string with a given character (repeated, if needed) so that the
  13764  * resulting string reaches a given length. The padding is applied from the end (right) of the current
  13765  * string
  13766  *
  13767  * \param
  13768  * string
  13769  * \param
  13770  * targetLength The length of the resulting string once the current string has been padded. If the value is lower
  13771  *              than the current string's length, the current string will be returned as is
  13772  * \param
  13773  * padChar The character to pad the current string with
  13774  * \return
  13775  * new string of the specified length with the pad character applied at the end of the current string
  13776  * NULL when dest or string are NULL
  13777  */
  13778 char *bPadEndCharS(char *dest, const char *string, size_t targetLength, char padChar) {
  13779 
  13780   // sanity
  13781   if (!dest or !string) {
  13782     return(NULL);
  13783   }
  13784   if (strlen(string) > targetLength) {
  13785     strcpy(dest, string);
  13786     return(dest);
  13787   }
  13788 
  13789   targetLength -= strlen(string);
  13790 
  13791   charToS(padString, padChar);
  13792 
  13793   char *pads = strdup(padString);;
  13794   if (!pads) {
  13795     return(NULL);
  13796   }
  13797   if (targetLength > strlen(padString)) {
  13798     pErrorNULL(iRepeatS(&pads, targetLength/strlen(padString)+1));
  13799   }
  13800 
  13801   pErrorNULL(iSliceS(&pads, 0, (int64_t)targetLength));
  13802 
  13803   char *r = appendS(string, pads);
  13804   free(pads);
  13805   if (!r) {
  13806     return(NULL);
  13807   }
  13808 
  13809   strcpy(dest, r);
  13810   free(r);
  13811 
  13812   return(dest);
  13813 }
  13814 
  13815 /**
  13816  * pad end string
  13817  *
  13818  * This function pads the current string with a given character (repeated, if needed) so that the
  13819  * resulting string reaches a given length. The padding is applied from the end (right) of the current
  13820  * string
  13821  *
  13822  * \param
  13823  * string
  13824  * \param
  13825  * targetLength The length of the resulting string once the current string has been padded. If the value is lower
  13826  *              than the current string's length, the current string will be returned as is
  13827  * \param
  13828  * padChar The string to pad the current string with
  13829  * \return
  13830  * new string of the specified length with the pad character applied at the end of the current string
  13831  * NULL when dest, string or padString are NULL
  13832  */
  13833 char *bLPadEndCharS(char *dest, size_t destSize, const char *string, size_t targetLength, char padChar) {
  13834 
  13835   // sanity
  13836   if (!dest or !string) {
  13837     return(NULL);
  13838   }
  13839   if (strlen(string) > targetLength) {
  13840     pErrorNULL(strLCpy(dest, destSize, string));
  13841     return(dest);
  13842   }
  13843 
  13844   targetLength -= strlen(string);
  13845 
  13846   charToS(padString, padChar);
  13847 
  13848   char *pads = strdup(padString);;
  13849   if (!pads) {
  13850     return(NULL);
  13851   }
  13852   if (targetLength > strlen(padString)) {
  13853     pErrorNULL(iRepeatS(&pads, targetLength/strlen(padString)+1));
  13854   }
  13855 
  13856   pErrorNULL(iSliceS(&pads, 0, (int64_t)targetLength));
  13857 
  13858   char *r = appendS(string, pads);
  13859   free(pads);
  13860   if (!r) {
  13861     return(NULL);
  13862   }
  13863 
  13864   pErrorNULL(strLCpy(dest, destSize, r));
  13865   free(r);
  13866 
  13867   return(dest);
  13868 }
  13869 
  13870 
  13871 /**
  13872  * length of string after padEnd
  13873  *
  13874  * \param
  13875  * string
  13876  * \return
  13877  * length of string after padEnd
  13878  * -1 when string is NULL
  13879  */
  13880 ssize_t padEndLenS(const char *string, size_t targetLength, const char *padString) {
  13881 
  13882   // sanity
  13883   if (!string) {
  13884     return(-1);
  13885   }
  13886   if (strlen(string) > targetLength) {
  13887     return((ssize_t)strlen(string));
  13888   }
  13889   if (!padString) {
  13890     return(-1);
  13891   }
  13892   if (!strlen(padString)) {
  13893     return((ssize_t)strlen(string));
  13894   }
  13895 
  13896   return((ssize_t)targetLength);
  13897 }
  13898 
  13899 /**
  13900  * get string
  13901  *
  13902  * get char at python index
  13903  *
  13904  */
  13905 char getS(const char *string, int64_t index) {
  13906   int64_t len;
  13907 
  13908   if (!string) {
  13909     return(0);
  13910   }
  13911 
  13912   len = (int64_t)strlen(string);
  13913   if (index >= len) {
  13914     return(0);
  13915   }
  13916   if (index < -len) {
  13917     return(0);
  13918   }
  13919   if (index < 0) {
  13920     index = len + index;
  13921   }
  13922 
  13923   return(*(string+index));
  13924 }
  13925 
  13926 /**
  13927  * set string
  13928  *
  13929  * set char at python index
  13930  */
  13931 char *setS(char *string, int64_t index, char c) {
  13932   int64_t len;
  13933 
  13934   if (!string) {
  13935     return(NULL);
  13936   }
  13937 
  13938   len = (int64_t)strlen(string);
  13939   if (index >= len) {
  13940     return(NULL);
  13941   }
  13942   if (index < -len) {
  13943     return(NULL);
  13944   }
  13945   if (index < 0) {
  13946     index = len + index;
  13947   }
  13948 
  13949   *(string+index) = c;
  13950   return(string);
  13951 }
  13952 
  13953 /**
  13954  * swap characters in string
  13955  *
  13956  * \param
  13957  * string
  13958  * \param
  13959  * index1 index of character to swap
  13960  * \param
  13961  * index2 index of second character to swap
  13962  * \return
  13963  * new string with characters swapped at index1 and index2 (you must free this pointer)
  13964  * NULL when string is NULL or when index1 or index2 are outside the string
  13965  */
  13966 char *swapS(char *string, int64_t index1, int64_t index2) {
  13967   int64_t len;
  13968 
  13969   if (!string) {
  13970     return(NULL);
  13971   }
  13972 
  13973   len = (int64_t)strlen(string);
  13974   if (index1 >= len) {
  13975     return(NULL);
  13976   }
  13977   if (index1 < -len) {
  13978     return(NULL);
  13979   }
  13980   if (index1 < 0) {
  13981     index1 = len + index1;
  13982   }
  13983 
  13984   if (index2 >= len) {
  13985     return(NULL);
  13986   }
  13987   if (index2 < -len) {
  13988     return(NULL);
  13989   }
  13990   if (index2 < 0) {
  13991     index2 = len + index2;
  13992   }
  13993 
  13994   char *r = strdup(string);
  13995   if (!r) {
  13996     return(NULL);
  13997   }
  13998 
  13999   char tmp  = r[index1];
  14000   r[index1] = r[index2];
  14001   r[index2] = tmp;;
  14002 
  14003   return(r);
  14004 }
  14005 
  14006 /**
  14007  * swap characters in string
  14008  *
  14009  * \param
  14010  * string
  14011  * \param
  14012  * index1 index of character to swap
  14013  * \param
  14014  * index2 index of second character to swap
  14015  * \return
  14016  * updated string with characters swapped at index1 and index2 (you must free this pointer)
  14017  * NULL when string is NULL or when index1 or index2 are outside the string
  14018  */
  14019 char *iSwapS(char **string, int64_t index1, int64_t index2) {
  14020   int64_t len;
  14021 
  14022   if (!string or !*string) {
  14023     return(NULL);
  14024   }
  14025 
  14026   len = (int64_t)strlen(*string);
  14027   if (index1 >= len) {
  14028     return(NULL);
  14029   }
  14030   if (index1 < -len) {
  14031     return(NULL);
  14032   }
  14033   if (index1 < 0) {
  14034     index1 = len + index1;
  14035   }
  14036 
  14037   if (index2 >= len) {
  14038     return(NULL);
  14039   }
  14040   if (index2 < -len) {
  14041     return(NULL);
  14042   }
  14043   if (index2 < 0) {
  14044     index2 = len + index2;
  14045   }
  14046 
  14047   char tmp          = (*string)[index1];
  14048   (*string)[index1] = (*string)[index2];
  14049   (*string)[index2] = tmp;;
  14050 
  14051   return(*string);
  14052 }
  14053 
  14054 /**
  14055  * swap characters in string
  14056  *
  14057  * \param
  14058  * string
  14059  * \param
  14060  * index1 index of character to swap
  14061  * \param
  14062  * index2 index of second character to swap
  14063  * \return
  14064  * string with characters swapped at index1 and index2
  14065  * NULL when string is NULL or when index1 or index2 are outside the string
  14066  */
  14067 char *bSwapS(char *string, int64_t index1, int64_t index2) {
  14068   int64_t len;
  14069 
  14070   if (!string) {
  14071     return(NULL);
  14072   }
  14073 
  14074   len = (int64_t)strlen(string);
  14075   if (index1 >= len) {
  14076     return(NULL);
  14077   }
  14078   if (index1 < -len) {
  14079     return(NULL);
  14080   }
  14081   if (index1 < 0) {
  14082     index1 = len + index1;
  14083   }
  14084 
  14085   if (index2 >= len) {
  14086     return(NULL);
  14087   }
  14088   if (index2 < -len) {
  14089     return(NULL);
  14090   }
  14091   if (index2 < 0) {
  14092     index2 = len + index2;
  14093   }
  14094 
  14095   char tmp  = string[index1];
  14096   string[index1] = string[index2];
  14097   string[index2] = tmp;;
  14098 
  14099   return(string);
  14100 }
  14101 
  14102 /**
  14103  * swap characters in string
  14104  *
  14105  * if string's length is more than size then size is the end of string
  14106  * and the indexes are computed relative to size
  14107  *
  14108  * \param
  14109  * string
  14110  * \param
  14111  * size string buffer size
  14112  * \param
  14113  * index1 index of character to swap
  14114  * \param
  14115  * index2 index of second character to swap
  14116  * \return
  14117  * string with characters swapped at index1 and index2
  14118  * NULL when string is NULL or when index1 or index2 are outside the string
  14119   */
  14120 char *bLSwapS(char *string, size_t size, int64_t index1, int64_t index2) {
  14121   int64_t len;
  14122 
  14123   if (!string) {
  14124     return(NULL);
  14125   }
  14126 
  14127   if (!size) {
  14128     return(string);
  14129   }
  14130 
  14131   len = (int64_t)strlen(string);
  14132 
  14133   if ((size_t)len+1 > size) {
  14134     len = (int64_t)(size-1);
  14135   }
  14136 
  14137   if (index1 >= len) {
  14138     return(NULL);
  14139   }
  14140   if (index1 < -len) {
  14141     return(NULL);
  14142   }
  14143   if (index1 < 0) {
  14144     index1 = len + index1;
  14145   }
  14146 
  14147   if (index2 >= len) {
  14148     return(NULL);
  14149   }
  14150   if (index2 < -len) {
  14151     return(NULL);
  14152   }
  14153   if (index2 < 0) {
  14154     index2 = len + index2;
  14155   }
  14156 
  14157   char tmp  = string[index1];
  14158   string[index1] = string[index2];
  14159   string[index2] = tmp;;
  14160 
  14161   return(string);
  14162 }
  14163 
  14164 
  14165 /**
  14166  * slice String
  14167  * return new string which is the string between start and end
  14168  * negative indexes are allowed
  14169  *
  14170  * (copy substring from start to end)
  14171  *
  14172  * \param
  14173  *   string to slice
  14174  *   start: start index, must be in the string
  14175  *   end: end index, must be in the string after start
  14176  * \return
  14177  *   new sliced string (you must free the pointer)
  14178  *   "" when start=end
  14179  *   NULL when start and end are not set correctly
  14180  */
  14181 char *sliceS(const char *string, int64_t start, int64_t end) {
  14182   char *s = NULL;
  14183   int64_t len;
  14184 
  14185   // sanity checks
  14186   if (!string) {
  14187     return(NULL);
  14188   }
  14189 
  14190   len = (int64_t)strlen(string);
  14191   if (start > len) {
  14192     return(NULL);
  14193   }
  14194   if (end > len) {
  14195     end = len;
  14196   }
  14197   if (start <= -len) {
  14198     start = -len;
  14199   }
  14200   if (end <= -len) {
  14201     return(NULL);
  14202   }
  14203   if (start < 0) {
  14204     start = len + start;
  14205   }
  14206   if (end <= 0) {
  14207     end = len + end;
  14208   }
  14209   if (end < start) {
  14210     return(NULL);
  14211   }
  14212 
  14213   if (start == end) {
  14214     emptyS(s)
  14215   }
  14216   else {
  14217     // start < end < len
  14218     // copy range to a new string
  14219     int64_t n;
  14220     n = end - start;
  14221     s = MALLOC((size_t)(n+1));
  14222     if (!s) {
  14223       return(NULL);//LCOV_EXCL_LINE
  14224     }
  14225     s = strncpy(s, string+start, (size_t)n);
  14226     s[n] = 0;
  14227   }
  14228 
  14229   return(s);
  14230 }
  14231 
  14232 /**
  14233  * slice String
  14234  * return string which is the string between start and end
  14235  * negative indexes are allowed
  14236  *
  14237  * \param
  14238  *   string to slice (this parameter is reallocated)
  14239  *   start: start index, must be in the string
  14240  *   end: end index, must be in the string after start
  14241  * \return
  14242  *   sliced string (you must free the pointer)
  14243  *   "" when start=end
  14244  *   NULL unchanged string when start and end are not set correctly
  14245  */
  14246 char *iSliceS(char **string, int64_t start, int64_t end) {
  14247   char *s = NULL;
  14248   int64_t len;
  14249 
  14250   // sanity checks
  14251   if (!string || !*string) {
  14252     return(NULL);
  14253   }
  14254 
  14255   len = (int64_t)strlen(*string);
  14256   if (start > len) {
  14257     free(*string);
  14258     emptyS(*string);
  14259     return(NULL);
  14260   }
  14261   if (end > len) {
  14262     end = len;
  14263   }
  14264   if (start <= -len) {
  14265     start = -len;
  14266   }
  14267   if (end <= -len) {
  14268     free(*string);
  14269     emptyS(*string);
  14270     return(NULL);
  14271   }
  14272   if (start < 0) {
  14273     start = len + start;
  14274   }
  14275   if (end <= 0) {
  14276     end = len + end;
  14277   }
  14278   if (end < start) {
  14279     free(*string);
  14280     emptyS(*string);
  14281     return(NULL);
  14282   }
  14283 
  14284   if (start == end) {
  14285     emptyS(s);
  14286   }
  14287   else {
  14288     // start < end < len
  14289     // copy range to a new string
  14290     int64_t n;
  14291     n = end - start;
  14292     s = MALLOC((size_t)(n+1));
  14293     if (!s) {
  14294       return(NULL);
  14295     }
  14296     s = strncpy(s, (*string)+start, (size_t)n);
  14297     s[n] = 0;
  14298   }
  14299 
  14300   free(*string);
  14301   *string = s;
  14302   return(s);
  14303 }
  14304 
  14305 /**
  14306  * buffer slice String
  14307  * return string which is the string between start and end
  14308  * negative indexes are allowed
  14309  *
  14310  * \param
  14311  *   string to slice
  14312  *   start: start index, must be in the string
  14313  *   end: end index, must be in the string after start
  14314  * \return
  14315  *   sliced string
  14316  *   "" when start=end
  14317  *   NULL unchanged string when start and end are not set correctly
  14318  */
  14319 char *bSliceS(char *string, int64_t start, int64_t end) {
  14320   int64_t len;
  14321 
  14322   // sanity checks
  14323   if (!string) {
  14324     return(NULL);
  14325   }
  14326 
  14327   len = (int64_t)strlen(string);
  14328   if (start > len) {
  14329     bEmptyS(string);
  14330     return(NULL);
  14331   }
  14332   if (end > len) {
  14333     end = len;
  14334   }
  14335   if (start <= -len) {
  14336     start = -len;
  14337   }
  14338   if (end <= -len) {
  14339     bEmptyS(string);
  14340     return(NULL);
  14341   }
  14342   if (start < 0) {
  14343     start = len + start;
  14344   }
  14345   if (end <= 0) {
  14346     end = len + end;
  14347   }
  14348   if (end < start) {
  14349     bEmptyS(string);
  14350     return(NULL);
  14351   }
  14352 
  14353   if (start == end) {
  14354     bEmptyS(string);
  14355   }
  14356   else {
  14357     // start < end < len
  14358     // copy range to a new string
  14359     int64_t n;
  14360     n = end - start;
  14361     if (start) {
  14362       memmove(string, string+start, (size_t)n);
  14363     }
  14364     string[n] = 0;
  14365   }
  14366 
  14367   return(string);
  14368 }
  14369 
  14370 /**
  14371  * buffer size slice String
  14372  * return string which is the string between start and end
  14373  * negative indexes are allowed
  14374  *
  14375  * \param
  14376  *   string to slice
  14377  * \param
  14378  *   stringSize string buffer size
  14379  * \param
  14380  *   start: start index, must be in the string
  14381  * \param
  14382  *   end: end index, must be in the string after start
  14383  * \return
  14384  *   sliced string
  14385  *   "" when start=end
  14386  *   NULL unchanged string when start and end are not set correctly
  14387  */
  14388 char *bLSliceS(char *string, size_t stringSize, int64_t start, int64_t end) {
  14389   int64_t len;
  14390 
  14391   // sanity checks
  14392   if (!string || !stringSize) {
  14393     return(NULL);
  14394   }
  14395 
  14396   len = (int64_t)strlen(string);
  14397   if ((size_t)len+1 > stringSize) {
  14398     len = (int64_t)(stringSize - 1);
  14399   }
  14400 
  14401   // compute string length without NUL
  14402   if (start > len) {
  14403     bEmptyS(string);
  14404     return(NULL);
  14405   }
  14406   if (end > len) {
  14407     end = len;
  14408   }
  14409   if (start <= -len) {
  14410     start = -len;
  14411   }
  14412   if (end <= -len) {
  14413     bEmptyS(string);
  14414     return(NULL);
  14415   }
  14416   if (start < 0) {
  14417     start = len + start;
  14418   }
  14419   if (end <= 0) {
  14420     end = len + end;
  14421   }
  14422   if (end < start) {
  14423     bEmptyS(string);
  14424     return(NULL);
  14425   }
  14426 
  14427   if (start == end) {
  14428     bEmptyS(string);
  14429   }
  14430   else {
  14431     // start < end < len
  14432     // copy range to a new string
  14433     int64_t n;
  14434     n = end - start;
  14435     if (start) {
  14436       memmove(string, string+start, (size_t)n);
  14437     }
  14438     string[n] = 0;
  14439   }
  14440 
  14441   return(string);
  14442 }
  14443 
  14444 /**
  14445  * Crop String
  14446  * return a new string with characters from start and end in string
  14447  * and delete characters from start to end in the original string
  14448  * negative indexes are allowed
  14449  *
  14450  * \param
  14451  *   string
  14452  * \param
  14453  *   start index, must be in the list
  14454  * \param
  14455  *   end index, must be in the list
  14456  * \return
  14457  *   new sliced string (you must free the pointer with free)
  14458  *   empty list when start=end
  14459  *   unchanged when list is empty
  14460  *   unchanged when list is NULL or when start and end are not set correctly
  14461  *   NULL error
  14462  */
  14463 char *cropS(char *string, int64_t start, int64_t end) {
  14464   char *l = NULL;
  14465   int64_t len;
  14466 
  14467   // sanity checks
  14468   if (!string) {
  14469     return(NULL);
  14470   }
  14471 
  14472   len = (int64_t)strlen(string);
  14473 
  14474   if (start > len) {
  14475     return(NULL);
  14476   }
  14477   if (end > len) {
  14478     end = len;
  14479   }
  14480   if (start <= -len) {
  14481     start = -len;
  14482   }
  14483   if (end <= -len) {
  14484     return(NULL);
  14485   }
  14486   if (start < 0) {
  14487     start = len + start;
  14488   }
  14489   if (end <= 0) {
  14490     end = len + end;
  14491   }
  14492   if (end < start) {
  14493     return(NULL);
  14494   }
  14495 
  14496   if (start < end) {
  14497     // start < end < len
  14498     int64_t n;
  14499     n = end - start;
  14500     l = MALLOC((size_t)(n+1) * sizeof(char));
  14501     if (!l) {
  14502       return(NULL);
  14503     }
  14504     pErrorNULL(strLCpy(l, (size_t)(n+1) * sizeof(char), string+start));
  14505     memmove(string+start, string+end, (size_t)(len-end+1));
  14506   }
  14507   else {
  14508     // start = end, return empty string
  14509     l = strdup("");
  14510   }
  14511 
  14512   return(l);
  14513 }
  14514 
  14515 /**
  14516  * Crop String
  14517  * return a new string with characters from start and end in string
  14518  * and delete characters from start to end in the original string
  14519  * negative indexes are allowed
  14520  *
  14521  * \param
  14522  *   string
  14523  * \param
  14524  *   start index, must be in the list
  14525  * \param
  14526  *   end index, must be in the list
  14527  * \return
  14528  *   new sliced string (you must free the pointer with free)
  14529  *   empty list when start=end
  14530  *   unchanged when list is empty
  14531  *   unchanged when list is NULL or when start and end are not set correctly
  14532  *   NULL error
  14533  */
  14534 char *iCropS(char **string, int64_t start, int64_t end) {
  14535   char *l = NULL;
  14536   int64_t len;
  14537 
  14538   // sanity checks
  14539   if (!string || !*string) {
  14540     return(NULL);
  14541   }
  14542 
  14543   len = (int64_t)strlen(*string);
  14544 
  14545   if (start > len) {
  14546     return(NULL);
  14547   }
  14548   if (end > len) {
  14549     end = len;
  14550   }
  14551   if (start <= -len) {
  14552     start = -len;
  14553   }
  14554   if (end <= -len) {
  14555     return(NULL);
  14556   }
  14557   if (start < 0) {
  14558     start = len + start;
  14559   }
  14560   if (end <= 0) {
  14561     end = len + end;
  14562   }
  14563   if (end < start) {
  14564     return(NULL);
  14565   }
  14566 
  14567   if (start < end) {
  14568     // start < end < len
  14569     int64_t n;
  14570     n = end - start;
  14571     l = MALLOC((size_t)(n+1) * sizeof(char));
  14572     if (!l) {
  14573       return(NULL);
  14574     }
  14575     pErrorNULL(strLCpy(l, (size_t)(n+1) * sizeof(char), *string+start));
  14576     memmove(*string+start, *string+end, (size_t)(len-end+1));
  14577   }
  14578   else {
  14579     // start = end, return empty string
  14580     l = strdup("");
  14581   }
  14582 
  14583   return(l);
  14584 }
  14585 
  14586 char cropElemS(char *string, int64_t index) {
  14587   int64_t len;
  14588 
  14589   if (!string) {
  14590     return(0);
  14591   }
  14592 
  14593   len = (int64_t)strlen(string);
  14594   if (index >= len) {
  14595     return(0);
  14596   }
  14597   if (index < -len) {
  14598     return(0);
  14599   }
  14600   if (index < 0) {
  14601     index = len + index;
  14602   }
  14603 
  14604   char r = *(string+index);
  14605 
  14606   if (index == len-1) {
  14607     string[len-1] = 0;
  14608   }
  14609   else {
  14610     memmove(string+index, string+index+1, (size_t)(len - index));
  14611   }
  14612 
  14613   return(r);
  14614 }
  14615 
  14616 char iCropElemS(char **string, int64_t index) {
  14617 
  14618   if (!string) {
  14619     return(0);
  14620   }
  14621 
  14622   return(cropElemS(*string, index));
  14623 }
  14624 
  14625 /**
  14626  * insert string in string at index
  14627  *
  14628  * return new string with toInsert at index
  14629  * negative indexes are allowed
  14630  * index -1 is the end of the array and is equivalent to index len
  14631  *
  14632  * \param
  14633  *   string
  14634  * \param
  14635  *   index in string
  14636  * \param
  14637  *   toInsert string
  14638  * \return
  14639  *   new string (you must free the pointer)
  14640  *   NULL when string is NULL or invalid index
  14641  */
  14642 char *insertS(const char *string, int64_t index, const char *toInsert) {
  14643   char *r = NULL;
  14644   int64_t len;
  14645 
  14646   // sanity checks
  14647   if (!string) {
  14648     if (index || !toInsert) {
  14649       return(NULL);
  14650     }
  14651     return(strdup(toInsert));
  14652   }
  14653   if (!toInsert || isEmptyS(toInsert)) {
  14654     return(strdup(string));
  14655   }
  14656 
  14657   len = (int64_t)strlen(string);
  14658   if (!len && index == -1) {
  14659     // empty string, index -1 is equal to 0
  14660     index = 0;
  14661   }
  14662   bool neg = false;
  14663   if (index < 0) {
  14664     neg = true;
  14665   }
  14666 
  14667   if (index > len) {
  14668     return(NULL);
  14669   }
  14670   if (neg) {
  14671     index++;
  14672   }
  14673   if (index < -len) {
  14674     return(NULL);
  14675   }
  14676   if (neg) {
  14677     index = len + index;
  14678   }
  14679 
  14680 
  14681   if (index == 0) {
  14682     // insert at beginning
  14683     return(catS(toInsert, string));
  14684   }
  14685 
  14686   char *s1 = sliceS(string, 0, index);
  14687   char *s2 = sliceS(string, index, 0);
  14688   r        = catS(s1, toInsert, s2);
  14689   freeManyS(s1,s2);
  14690 
  14691   return(r);
  14692 }
  14693 
  14694 /**
  14695  * insert string in string at index and free toInsert when successful
  14696  *
  14697  * return new string with toInsert at index
  14698  * negative indexes are allowed
  14699  * index -1 is the end of the array and is equivalent to index len
  14700  *
  14701  * \param
  14702  *   string
  14703  * \param
  14704  *   index in string
  14705  * \param
  14706  *   toInsert string
  14707  * \return
  14708  *   new string (you must free the pointer)
  14709  *   NULL when string is NULL or invalid index
  14710  */
  14711 char *insertNFreeS(const char *string, int64_t index, char *toInsert) {
  14712   char *r = NULL;
  14713   int64_t len;
  14714 
  14715   // sanity checks
  14716   if (!string) {
  14717     if (index) {
  14718       return(NULL);
  14719     }
  14720     if (!toInsert) {
  14721       return(NULL);
  14722     }
  14723     r = strdup(toInsert);
  14724     free(toInsert);
  14725     return(r);
  14726   }
  14727 
  14728   len = (int64_t)strlen(string);
  14729   if (!len && index == -1) {
  14730     // empty string, index -1 is equal to 0
  14731     index = 0;
  14732   }
  14733   bool neg = false;
  14734   if (index < 0) {
  14735     neg = true;
  14736   }
  14737 
  14738   if (index > len) {
  14739     return(NULL);
  14740   }
  14741   if (neg) {
  14742     index++;
  14743   }
  14744   if (index < -len) {
  14745     return(NULL);
  14746   }
  14747   if (neg) {
  14748     index = len + index;
  14749   }
  14750 
  14751 
  14752   if (!toInsert || isEmptyS(toInsert)) {
  14753     free(toInsert);
  14754     return(strdup(string));
  14755   }
  14756 
  14757   if (index == 0) {
  14758     // insert at beginning
  14759     r = catS(toInsert, string);
  14760     free(toInsert);
  14761     return(r);
  14762   }
  14763 
  14764   char *s1 = sliceS(string, 0, index);
  14765   char *s2 = sliceS(string, index, 0);
  14766   r        = catS(s1, toInsert, s2);
  14767   freeManyS(s1,s2, toInsert);
  14768 
  14769   return(r);
  14770 }
  14771 
  14772 /**
  14773  * insert string in string at index
  14774  *
  14775  * return string with toInsert at index
  14776  * negative indexes are allowed
  14777  * index -1 is the end of the array and is equivalent to index len
  14778  *
  14779  * \param
  14780  *   string (this parameter is reallocated)
  14781  * \param
  14782  *   index in string
  14783  * \param
  14784  *   toInsert string
  14785  * \return
  14786  *   modified string (you must free the pointer)
  14787  *   NULL unchanged string when string is NULL or invalid index
  14788  */
  14789 char *iInsertS(char **string, int64_t index, const char *toInsert) {
  14790   char *r = NULL;
  14791   int64_t len;
  14792 
  14793   // sanity checks
  14794   if (!string) {
  14795     return(NULL);
  14796   }
  14797   if (!*string) {
  14798     if (index) {
  14799       return(NULL);
  14800     }
  14801     r       = strdup(toInsert);
  14802     *string = r;
  14803     return(r);
  14804   }
  14805 
  14806   len = (int64_t)strlen(*string);
  14807 
  14808   if (!len && index == -1) {
  14809     // empty string, index -1 is equal to 0
  14810     index = 0;
  14811   }
  14812   bool neg = false;
  14813   if (index < 0) {
  14814     neg = true;
  14815   }
  14816 
  14817   if (index > len) {
  14818     return(NULL);
  14819   }
  14820   if (neg) {
  14821     index++;
  14822   }
  14823   if (index < -len) {
  14824     return(NULL);
  14825   }
  14826   if (neg) {
  14827     index = len + index;
  14828   }
  14829 
  14830 
  14831   if (!toInsert || isEmptyS(toInsert)) {
  14832     return(*string);
  14833   }
  14834 
  14835   if (index == 0) {
  14836     // insert at beginning
  14837     r = catS(toInsert, *string);
  14838   }
  14839   else {
  14840     char *s1 = sliceS(*string, 0, index);
  14841     char *s2 = sliceS(*string, index, 0);
  14842     r        = catS(s1, toInsert, s2);
  14843     freeManyS(s1,s2);
  14844   }
  14845 
  14846   free(*string);
  14847   *string = r;
  14848   return(r);
  14849 }
  14850 
  14851 /**
  14852  * insert string in string at index and free toInsert
  14853  *
  14854  * return string with toInsert at index
  14855  * negative indexes are allowed
  14856  * index -1 is the end of the array and is equivalent to index len
  14857  *
  14858  * \param
  14859  *   string (this parameter is reallocated)
  14860  * \param
  14861  *   index in string
  14862  * \param
  14863  *   toInsert string
  14864  * \return
  14865  *   modified string (you must free the pointer)
  14866  *   NULL unchanged string when string is NULL or invalid index
  14867  */
  14868 char *iInsertNFreeS(char **string, int64_t index, char *toInsert) {
  14869   char *r = NULL;
  14870   int64_t len;
  14871 
  14872   // sanity checks
  14873   if (!string) {
  14874     return(NULL);
  14875   }
  14876   if (!*string) {
  14877     if (index) {
  14878       return(NULL);
  14879     }
  14880     r       = strdup(toInsert);
  14881     free(toInsert);
  14882     *string = r;
  14883     return(r);
  14884   }
  14885 
  14886   len = (int64_t)strlen(*string);
  14887 
  14888   if (!len && index == -1) {
  14889     // empty string, index -1 is equal to 0
  14890     index = 0;
  14891   }
  14892   bool neg = false;
  14893   if (index < 0) {
  14894     neg = true;
  14895   }
  14896 
  14897   if (index > len) {
  14898     return(NULL);
  14899   }
  14900   if (neg) {
  14901     index++;
  14902   }
  14903   if (index < -len) {
  14904     return(NULL);
  14905   }
  14906   if (neg) {
  14907     index = len + index;
  14908   }
  14909 
  14910 
  14911   if (!toInsert || isEmptyS(toInsert)) {
  14912     free(toInsert);
  14913     return(*string);
  14914   }
  14915 
  14916   if (index == 0) {
  14917     // insert at beginning
  14918     r = catS(toInsert, *string);
  14919   }
  14920   else {
  14921     char *s1 = sliceS(*string, 0, index);
  14922     char *s2 = sliceS(*string, index, 0);
  14923     r        = catS(s1, toInsert, s2);
  14924     freeManyS(s1,s2);
  14925   }
  14926   free(toInsert);
  14927 
  14928   free(*string);
  14929   *string = r;
  14930   return(r);
  14931 }
  14932 
  14933 /**
  14934  * buffer insert string in string at index
  14935  *
  14936  * return string with toInsert at index
  14937  * negative indexes are allowed
  14938  * index -1 is the end of the array and is equivalent to index len
  14939  *
  14940  * \param
  14941  *   string
  14942  * \param
  14943  *   index in string
  14944  * \param
  14945  *   toInsert string
  14946  * \return
  14947  *   modified string
  14948  *   NULL unchanged string when string is NULL or invalid index
  14949  */
  14950 char *bInsertS(char *string, int64_t index, const char *toInsert) {
  14951   int64_t len;
  14952 
  14953   // sanity checks
  14954   if (!string) {
  14955     return(NULL);
  14956   }
  14957   len = (int64_t)strlen(string);
  14958 
  14959   if (!len && index == -1) {
  14960     // empty string, index -1 is equal to 0
  14961     index = 0;
  14962   }
  14963   bool neg = false;
  14964   if (index < 0) {
  14965     neg = true;
  14966   }
  14967 
  14968   if (index > len) {
  14969     return(NULL);
  14970   }
  14971   if (neg) {
  14972     index++;
  14973   }
  14974   if (index < -len) {
  14975     return(NULL);
  14976   }
  14977   if (neg) {
  14978     index = len + index;
  14979   }
  14980 
  14981 
  14982   if (!toInsert || isEmptyS(toInsert)) {
  14983     return(string);
  14984   }
  14985 
  14986   if (index == 0) {
  14987     // insert at beginning
  14988     char *s = alloca((size_t)(len+1));;
  14989     strcpy(s, string);
  14990     pErrorNULL(bCatS(string, toInsert, s));
  14991   }
  14992   else {
  14993     char *s1 = alloca((size_t)(index+1));;
  14994     pErrorNULL(strLCpy(s1, (size_t)(index+1), string));
  14995     char *s2 = alloca((size_t)(len-index+1));;
  14996     strcpy(s2, string+index);
  14997     pErrorNULL(bCatS(string, s1, toInsert, s2));
  14998   }
  14999   return(string);
  15000 }
  15001 
  15002 /**
  15003  * buffer size insert string in string at index
  15004  *
  15005  * return string with toInsert at index
  15006  * negative indexes are allowed
  15007  * index -1 is the end of the array and is equivalent to index len
  15008  *
  15009  * \param
  15010  *   string
  15011  * \param
  15012  *   index in string
  15013  * \param
  15014  *   toInsert string
  15015  * \return
  15016  *   modified string
  15017  *   NULL unchanged string when string is NULL or invalid index
  15018  */
  15019 char *bLInsertS(char *string, size_t stringSize, int64_t index, const char *toInsert) {
  15020   int64_t len;
  15021 
  15022   // sanity checks
  15023   if (!string) {
  15024     return(NULL);
  15025   }
  15026 
  15027   if (!stringSize) {
  15028     // string size is 0 - no change
  15029     return(string);
  15030   }
  15031 
  15032   len = (int64_t)strlen(string);
  15033 
  15034   if (!len && index == -1) {
  15035     // empty string, index -1 is equal to 0
  15036     index = 0;
  15037   }
  15038   bool neg = false;
  15039   if (index < 0) {
  15040     neg = true;
  15041   }
  15042 
  15043   if (index > len) {
  15044     return(NULL);
  15045   }
  15046   if (neg) {
  15047     index++;
  15048   }
  15049   if (index < -len) {
  15050     return(NULL);
  15051   }
  15052   if (neg) {
  15053     index = len + index;
  15054   }
  15055 
  15056 
  15057   if (!toInsert || isEmptyS(toInsert)) {
  15058     return(string);
  15059   }
  15060 
  15061   if (index == 0) {
  15062     // insert at beginning
  15063     char *s = alloca((size_t)(len+1));;
  15064     strcpy(s, string);
  15065     pErrorNULL(bLCatS(string, stringSize, toInsert, s));
  15066   }
  15067   else {
  15068     char *s1 = alloca((size_t)(index+1));;
  15069     pErrorNULL(strLCpy(s1, (size_t)(index+1), string));
  15070     char *s2 = alloca((size_t)(len-index+1));;
  15071     strcpy(s2, string+index);
  15072     pErrorNULL(bLCatS(string, stringSize, s1, toInsert, s2));
  15073   }
  15074   return(string);
  15075 }
  15076 
  15077 /**
  15078  * inject a char in string at index
  15079  *
  15080  * return new string with toInject at index
  15081  * negative indexes are allowed
  15082  * index -1 is the end of the array and is equivalent to index len
  15083  *
  15084  * \param
  15085  *   string
  15086  * \param
  15087  *   index in string
  15088  * \param
  15089  *   toInject char
  15090  * \return
  15091  *   new string (you must free the pointer)
  15092  *   NULL when string is NULL or invalid index
  15093  */
  15094 char *injectS(const char *string, int64_t index, char toInject) {
  15095   char *r = NULL;
  15096   int64_t len;
  15097 
  15098   // sanity checks
  15099   if (!string) {
  15100     if (index) {
  15101       return(NULL);
  15102     }
  15103     charToS(inject, toInject);
  15104     return(strdup(inject));
  15105   }
  15106 
  15107   len = (int64_t)strlen(string);
  15108 
  15109   if (!len && index == -1) {
  15110     // empty string, index -1 is equal to 0
  15111     index = 0;
  15112   }
  15113   bool neg = false;
  15114   if (index < 0) {
  15115     neg = true;
  15116   }
  15117 
  15118   if (index > len) {
  15119     return(NULL);
  15120   }
  15121   if (neg) {
  15122     index++;
  15123   }
  15124   if (index < -len) {
  15125     return(NULL);
  15126   }
  15127   if (neg) {
  15128     index = len + index;
  15129   }
  15130 
  15131 
  15132   charToS(inject, toInject);
  15133 
  15134   if (index == 0) {
  15135     // inject at beginning
  15136     return(catS(inject, string));
  15137   }
  15138 
  15139   char *s1 = sliceS(string, 0, index);
  15140   char *s2 = sliceS(string, index, 0);
  15141   r        = catS(s1, inject, s2);
  15142   freeManyS(s1,s2);
  15143 
  15144   return(r);
  15145 }
  15146 
  15147 /**
  15148  * inject a char in string at index
  15149  *
  15150  * return string with toInject at index
  15151  * negative indexes are allowed
  15152  * index -1 is the end of the array and is equivalent to index len
  15153  *
  15154  * \param
  15155  *   string (this parameter is reallocated)
  15156  * \param
  15157  *   index in string
  15158  * \param
  15159  *   toInject char
  15160  * \return
  15161  *   modified string (you must free the pointer)
  15162  *   NULL unchanged string when string is NULL or invalid index
  15163  */
  15164 char *iInjectS(char **string, int64_t index, char toInject) {
  15165   char *r = NULL;
  15166   int64_t len;
  15167 
  15168   // sanity checks
  15169   if (!string) {
  15170     return(NULL);
  15171   }
  15172   if (!*string) {
  15173     if (index) {
  15174       return(NULL);
  15175     }
  15176     charToS(inject, toInject);
  15177     *string = strdup(inject);
  15178     return(*string);
  15179   }
  15180 
  15181   len = (int64_t)strlen(*string);
  15182 
  15183   if (!len && index == -1) {
  15184     // empty string, index -1 is equal to 0
  15185     index = 0;
  15186   }
  15187   bool neg = false;
  15188   if (index < 0) {
  15189     neg = true;
  15190   }
  15191 
  15192   if (index > len) {
  15193     return(NULL);
  15194   }
  15195   if (neg) {
  15196     index++;
  15197   }
  15198   if (index < -len) {
  15199     return(NULL);
  15200   }
  15201   if (neg) {
  15202     index = len + index;
  15203   }
  15204 
  15205 
  15206   charToS(inject, toInject);
  15207 
  15208   if (index == 0) {
  15209     // inject at beginning
  15210     r = catS(inject, *string);
  15211   }
  15212   else {
  15213     char *s1 = sliceS(*string, 0, index);
  15214     char *s2 = sliceS(*string, index, 0);
  15215     r        = catS(s1, inject, s2);
  15216     freeManyS(s1,s2);
  15217   }
  15218 
  15219   free(*string);
  15220   *string = r;
  15221   return(r);
  15222 }
  15223 
  15224 /**
  15225  * buffer inject a char in string at index
  15226  *
  15227  * return string with toInject at index
  15228  * negative indexes are allowed
  15229  * index -1 is the end of the array and is equivalent to index len
  15230  *
  15231  * \param
  15232  *   string
  15233  * \param
  15234  *   index in string
  15235  * \param
  15236  *   toInject char
  15237  * \return
  15238  *   modified string
  15239  *   NULL unchanged string when string is NULL or invalid index
  15240  */
  15241 char *bInjectS(char *string, int64_t index, char toInject) {
  15242   int64_t len;
  15243 
  15244   // sanity checks
  15245   if (!string) {
  15246     return(NULL);
  15247   }
  15248 
  15249   len = (int64_t)strlen(string);
  15250 
  15251   if (!len && index == -1) {
  15252     // empty string, index -1 is equal to 0
  15253     index = 0;
  15254   }
  15255   bool neg = false;
  15256   if (index < 0) {
  15257     neg = true;
  15258   }
  15259 
  15260   if (index > len) {
  15261     return(NULL);
  15262   }
  15263   if (neg) {
  15264     index++;
  15265   }
  15266   if (index < -len) {
  15267     return(NULL);
  15268   }
  15269   if (neg) {
  15270     index = len + index;
  15271   }
  15272 
  15273 
  15274   charToS(inject, toInject);
  15275 
  15276   if (index == 0) {
  15277     // inject at beginning
  15278     pErrorNULL(bPrependS(string, inject));
  15279   }
  15280   else {
  15281     char *s1 = alloca((size_t)(index+1));;
  15282     pErrorNULL(strLCpy(s1, (size_t)(index+1), string));
  15283     char *s2 = alloca((size_t)(len-index+1));;
  15284     strcpy(s2, string+index);
  15285     pErrorNULL(bCatS(string, s1, inject, s2));
  15286   }
  15287   return(string);
  15288 }
  15289 
  15290 /**
  15291  * buffer size inject a char in string at index
  15292  *
  15293  * return string with toInject at index
  15294  * negative indexes are allowed
  15295  * index -1 is the end of the array and is equivalent to index len
  15296  *
  15297  * \param
  15298  *   string
  15299  * \param
  15300  *   index in string
  15301  * \param
  15302  *   toInject char
  15303  * \return
  15304  *   modified string
  15305  *   NULL unchanged string when string is NULL or invalid index
  15306  */
  15307 char *bLInjectS(char *string, size_t stringSize, int64_t index, char toInject) {
  15308   int64_t len;
  15309 
  15310   // sanity checks
  15311   if (!string) {
  15312     return(NULL);
  15313   }
  15314 
  15315   if (!stringSize) {
  15316     // size 0 - no change
  15317     return(string);
  15318   }
  15319 
  15320   len = (int64_t)strlen(string);
  15321 
  15322   if (!len && index == -1) {
  15323     // empty string, index -1 is equal to 0
  15324     index = 0;
  15325   }
  15326   bool neg = false;
  15327   if (index < 0) {
  15328     neg = true;
  15329   }
  15330 
  15331   if (index > len) {
  15332     return(NULL);
  15333   }
  15334   if (neg) {
  15335     index++;
  15336   }
  15337   if (index < -len) {
  15338     return(NULL);
  15339   }
  15340   if (neg) {
  15341     index = len + index;
  15342   }
  15343 
  15344 
  15345   charToS(inject, toInject);
  15346 
  15347   if (index == 0) {
  15348     // inject at beginning
  15349     pErrorNULL(bLPrependS(string, stringSize, inject));
  15350   }
  15351   else {
  15352     char *s1 = alloca((size_t)(index+1));;
  15353     pErrorNULL(strLCpy(s1, (size_t)(index+1), string));
  15354     char *s2 = alloca((size_t)(len-index+1));;
  15355     strcpy(s2, string+index);
  15356     pErrorNULL(bLCatS(string, stringSize, s1, inject, s2));
  15357   }
  15358   return(string);
  15359 }
  15360 
  15361 /**
  15362  * delete string
  15363  *
  15364  * return new string without the string between start and end
  15365  * negative indexes are allowed
  15366  *
  15367  * \param
  15368  *   string to delete
  15369  * \param
  15370  *   start: start index, must be in the string
  15371  * \param
  15372  *   end: end index, must be in the string after start
  15373  * \return
  15374  *   new sliced string (you must free the pointer)
  15375  *   new identical string when start=end or when start and end are not set correctly
  15376  *   NULL when input string is NULL or when malloc failed or when end is under start
  15377  */
  15378 char *delS(const char *string, int64_t start, int64_t end) {
  15379   char *s = NULL;
  15380   int64_t len;
  15381 
  15382   // sanity checks
  15383   if (!string) {
  15384     return(NULL);
  15385   }
  15386 
  15387   len = (int64_t)strlen(string);
  15388 
  15389   if (start >= len) {
  15390     start = len;
  15391   }
  15392   if (end > len) {
  15393     end = len;
  15394   }
  15395   if (start <= -len) {
  15396     start = -len;
  15397   }
  15398   if (end <= -len) {
  15399     end = -len;
  15400   }
  15401   if (start < 0) {
  15402     start = len + start;
  15403   }
  15404   if (end <= 0) {
  15405     end = len + end;
  15406   }
  15407   if (end < start) {
  15408     return(NULL);
  15409   }
  15410 
  15411   if (start == end) {
  15412     return(strdup(string));
  15413   }
  15414 
  15415   // start < end < len
  15416   // copy range to a new string
  15417   int64_t n;
  15418   n = end - start;
  15419   s = MALLOC((size_t)(len-n+1));
  15420   if (!s) {
  15421     return(NULL);//LCOV_EXCL_LINE
  15422   }
  15423   strncpy(s, string, (size_t)start);
  15424   strncpy(s+start, string+start+n, (size_t)(len-n-start));
  15425   s[len-n] = 0;
  15426 
  15427   return(s);
  15428 }
  15429 
  15430 /**
  15431  * delete string
  15432  *
  15433  * return string without the string between start and end
  15434  * negative indexes are allowed
  15435  *
  15436  * \param
  15437  *   string to delete (this parameter is reallocated)
  15438  * \param
  15439  *   start: start index, must be in the string
  15440  * \param
  15441  *   end: end index, must be in the string after start
  15442  * \return
  15443  *   sliced string (you must free the pointer)
  15444  *   unchanged string when start=end
  15445  *   NULL when start and end are not set correctly
  15446  *        or when input string is NULL or when malloc failed or when end is under start
  15447  */
  15448 char *iDelS(char **string, int64_t start, int64_t end) {
  15449   char *s = NULL;
  15450   int64_t len;
  15451 
  15452   // sanity checks
  15453   if (!string || !*string) {
  15454     return(NULL);
  15455   }
  15456 
  15457   len = (int64_t)strlen(*string);
  15458 
  15459   if (start >= len) {
  15460     start = len;
  15461   }
  15462   if (end > len) {
  15463     end = len;
  15464   }
  15465   if (start <= -len) {
  15466     start = -len;
  15467   }
  15468   if (end <= -len) {
  15469     end = -len;
  15470   }
  15471   if (start < 0) {
  15472     start = len + start;
  15473   }
  15474   if (end <= 0) {
  15475     end = len + end;
  15476   }
  15477   if (end < start) {
  15478     return(NULL);
  15479   }
  15480 
  15481   if (start == end) {
  15482     return(*string);
  15483   }
  15484 
  15485   // start < end < len
  15486   // copy range to a new string
  15487   int64_t n;
  15488   n = end - start;
  15489   s = MALLOC((size_t)(len-n+1));
  15490   if (!s) {
  15491     return(NULL);
  15492   }
  15493   strncpy(s, *string, (size_t)start);
  15494   strncpy(s+start, (*string)+start+n, (size_t)(len-n-start));
  15495   s[len-n] = 0;
  15496 
  15497   free(*string);
  15498   *string = s;
  15499   return(s);
  15500 }
  15501 
  15502 /**
  15503  * buffer delete string
  15504  *
  15505  * return string without the string between start and end
  15506  * negative indexes are allowed
  15507  *
  15508  * \param
  15509  *   string to delete
  15510  * \param
  15511  *   start: start index, must be in the string
  15512  * \param
  15513  *   end: end index, must be in the string after start
  15514  * \return
  15515  *   sliced string
  15516  *   unchanged string when start=end
  15517  *   NULL when start and end are not set correctly
  15518  *        or when input string is NULL or when malloc failed or when end is under start
  15519  */
  15520 char *bDelS(char *string, int64_t start, int64_t end) {
  15521   int64_t len;
  15522 
  15523   // sanity checks
  15524   if (!string) {
  15525     return(NULL);
  15526   }
  15527 
  15528   len = (int64_t)strlen(string);
  15529 
  15530   if (start >= len) {
  15531     start = len;
  15532   }
  15533   if (end > len) {
  15534     end = len;
  15535   }
  15536   if (start <= -len) {
  15537     start = -len;
  15538   }
  15539   if (end <= -len) {
  15540     end = -len;
  15541   }
  15542   if (start < 0) {
  15543     start = len + start;
  15544   }
  15545   if (end <= 0) {
  15546     end = len + end;
  15547   }
  15548   if (end < start) {
  15549     return(NULL);
  15550   }
  15551 
  15552   if (start == end) {
  15553     return(string);
  15554   }
  15555 
  15556   // start < end < len
  15557   // copy range to a new string
  15558   int64_t n;
  15559   n = end - start;
  15560   memmove(string+start, string+start+n, (size_t)(len-n-start));
  15561   string[len-n] = 0;
  15562 
  15563   return(string);
  15564 }
  15565 
  15566 /**
  15567  * buffer size delete string
  15568  *
  15569  * return string without the string between start and end
  15570  * negative indexes are allowed
  15571  *
  15572  * \param
  15573  *   string to delete
  15574  * \param
  15575  *   stringSize string buffer size
  15576  * \param
  15577  *   start: start index, must be in the string
  15578  * \param
  15579  *   end: end index, must be in the string after start
  15580  * \return
  15581  *   sliced string
  15582  *   unchanged string when start=end
  15583  *   NULL when start and end are not set correctly
  15584  *        or when input string is NULL or when malloc failed or when end is under start
  15585  */
  15586 char *bLDelS(char *string, size_t stringSize, int64_t start, int64_t end) {
  15587   int64_t len;
  15588 
  15589   // sanity checks
  15590   if (!string || !stringSize) {
  15591     return(NULL);
  15592   }
  15593 
  15594   len = (int64_t)strlen(string);
  15595   if ((size_t)len+1 > stringSize) {
  15596     len = (int64_t)(stringSize - 1);
  15597   }
  15598 
  15599   // compute string length without NUL
  15600   if (start >= (int64_t)len) {
  15601     start = len;
  15602   }
  15603   if (end > (int64_t)len) {
  15604     end = len;
  15605   }
  15606   if (start <= -(int64_t)len) {
  15607     start = -len;
  15608   }
  15609   if (end <= -(int64_t)len) {
  15610     end = -len;
  15611   }
  15612   if (start < 0) {
  15613     start = len + start;
  15614   }
  15615   if (end <= 0) {
  15616     end = len + end;
  15617   }
  15618   if (end < start) {
  15619     return(NULL);
  15620   }
  15621 
  15622   if (start == end) {
  15623     return(string);
  15624   }
  15625 
  15626   // start < end < len
  15627   // copy range to a new string
  15628   int64_t n;
  15629   n = end - start;
  15630   memmove(string+start, string+start+n, (size_t)(len-n-start));
  15631   string[len-n] = 0;
  15632 
  15633   return(string);
  15634 }
  15635 
  15636 /**
  15637  * delete element/character string
  15638  *
  15639  * return new string without the character at given index
  15640  * negative indexes are allowed
  15641  *
  15642  * \param
  15643  *   string to delete
  15644  * \param
  15645  *   index: must be in the string, -1 is the last character in the string
  15646  * \return
  15647  *   new string (you must free the pointer)
  15648  *   NULL when input string is NULL or when malloc failed
  15649  */
  15650 char *delElemS(const char *string, int64_t index) {
  15651   char *s = NULL;
  15652   int64_t len;
  15653 
  15654   if (!string) {
  15655     return(NULL);
  15656   }
  15657 
  15658   len = (int64_t)strlen(string);
  15659   if (index >= len) {
  15660     return(NULL);
  15661   }
  15662   if (index < -len) {
  15663     return(NULL);
  15664   }
  15665   if (index < 0) {
  15666     index = len + index;
  15667   }
  15668 
  15669   s = MALLOC((size_t)(len-1+1));
  15670   if (!s) {
  15671     return(NULL);//LCOV_EXCL_LINE
  15672   }
  15673   strncpy(s, string, (size_t)index);
  15674   strncpy(s+index, string+index+1, (size_t)(len-1-index));
  15675   s[len-1] = 0;
  15676   return(s);
  15677 }
  15678 
  15679 /**
  15680  * delete element/character string
  15681  *
  15682  * return string without the character at given index
  15683  * negative indexes are allowed
  15684  *
  15685  * \param
  15686  *   string to delete (this parameter is reallocated)
  15687  * \param
  15688  *   index: must be in the string, -1 is the last character in the string
  15689  * \return
  15690  *   new string (you must free the pointer)
  15691  *   NULL when input string is NULL or when malloc failed
  15692  */
  15693 char *iDelElemS(char **string, int64_t index) {
  15694   char *s = NULL;
  15695   int64_t len;
  15696 
  15697   // sanity checks
  15698   if (!string || !*string) {
  15699     return(NULL);
  15700   }
  15701 
  15702   len = (int64_t)strlen(*string);
  15703   if (index >= len) {
  15704     return(NULL);
  15705   }
  15706   if (index < -len) {
  15707     return(NULL);
  15708   }
  15709   if (index < 0) {
  15710     index = len + index;
  15711   }
  15712 
  15713   s = MALLOC((size_t)(len-1+1));
  15714   if (!s) {
  15715     return(NULL);//LCOV_EXCL_LINE
  15716   }
  15717   strncpy(s, *string, (size_t)index);
  15718   strncpy(s+index, *string+index+1, (size_t)(len-1-index));
  15719   s[len-1] = 0;
  15720 
  15721   free(*string);
  15722   *string = s;
  15723   return(s);
  15724 }
  15725 
  15726 /**
  15727  * buffer delete element/character string
  15728  *
  15729  * return string without the character at given index
  15730  * negative indexes are allowed
  15731  *
  15732  * \param
  15733  *   string to delete
  15734  * \param
  15735  *   index: must be in the string, -1 is the last character in the string
  15736  * \return
  15737  *   string with one less character
  15738  *   NULL when input string is NULL or when malloc failed
  15739  */
  15740 char *bDelElemS(char *string, int64_t index) {
  15741   int64_t len;
  15742 
  15743   // sanity checks
  15744   if (!string) {
  15745     return(NULL);
  15746   }
  15747 
  15748   len = (int64_t)strlen(string);
  15749   if (index >= len) {
  15750     return(NULL);
  15751   }
  15752   if (index < -len) {
  15753     return(NULL);
  15754   }
  15755   if (index < 0) {
  15756     index = len + index;
  15757   }
  15758 
  15759   memmove(string+index, string+index+1, (size_t)(len-1-index));
  15760   string[len-1] = 0;
  15761 
  15762   return(string);
  15763 }
  15764 
  15765 /**
  15766  * buffer size delete element/character string
  15767  *
  15768  * return string without the character at given index
  15769  * negative indexes are allowed
  15770  *
  15771  * \param
  15772  *   string to delete
  15773  * \param
  15774  *   stringSize string buffer size
  15775  * \param
  15776  *   index: must be in the string, -1 is the last character in the string
  15777  * \return
  15778  *   string with one less character
  15779  *   NULL when input string is NULL or when malloc failed
  15780  */
  15781 char *bLDelElemS(char *string, size_t stringSize, int64_t index) {
  15782   int64_t len;
  15783 
  15784   // sanity checks
  15785   if (!string || !stringSize) {
  15786     return(NULL);
  15787   }
  15788 
  15789   len = (int64_t)strlen(string);
  15790   if ((size_t)len+1 > stringSize) {
  15791     len = (int64_t)(stringSize - 1);
  15792   }
  15793 
  15794   // compute string length without NUL
  15795   if (index >= (int64_t)len) {
  15796     return(NULL);
  15797   }
  15798   if (index < -(int64_t)len) {
  15799     return(NULL);
  15800   }
  15801   if (index < 0) {
  15802     index = (int64_t)len + index;
  15803   }
  15804 
  15805   memmove(string+index, string+index+1, (size_t)(len-1-index));
  15806   string[len-1] = 0;
  15807 
  15808   return(string);
  15809 }
  15810 
  15811 /**
  15812  * find String
  15813  *
  15814  * \param
  15815  *   string
  15816  * \param
  15817  *   needle: string to find
  15818  * \return
  15819  *   pointer to first occurence of needle in string
  15820  *   NULL when needle is not found
  15821  *   NULL when string or needle are NULL
  15822  */
  15823 char *findS(const char *string, const char *needle) {
  15824 
  15825   // sanity checks
  15826   if (!string || !needle) {
  15827     return(NULL);
  15828   }
  15829   return(strstr(string, needle));
  15830 }
  15831 
  15832 char *findCharS(const char *string, char c) {
  15833 
  15834   // sanity checks
  15835   if (!string) {
  15836     return(NULL);
  15837   }
  15838   return(strchr(string, c));
  15839 }
  15840 
  15841 /**
  15842  * indexOf String
  15843  * relative to start
  15844  *
  15845  * \param
  15846  *   string
  15847  * \param
  15848  *   needle: string to find
  15849  * \return
  15850  *   index of first occurence of needle in string
  15851  *   -1 when needle is not found
  15852  *   -1 when string or needle are NULL
  15853  */
  15854 ssize_t indexOfS(const char *string, const char *needle) {
  15855 
  15856   char *r = findS(string, needle);
  15857   if (!r) {
  15858     return(-1);
  15859   }
  15860   return((ssize_t)(r - string));
  15861 }
  15862 
  15863 ssize_t indexOfCharS(const char *string, char c) {
  15864 
  15865   char *r = findCharS(string, c);
  15866   if (!r) {
  15867     return(-1);
  15868   }
  15869   return((ssize_t)(r - string));
  15870 }
  15871 
  15872 /**
  15873  * has String
  15874  *
  15875  * \param
  15876  *   string
  15877  * \param
  15878  *   needle: string to find
  15879  * \return
  15880  *   true when needle is in string
  15881  *   false when needle is not found
  15882  *   false when string or needle are NULL
  15883  */
  15884 bool hasS(const char *string, const char *needle) {
  15885 
  15886   // sanity checks
  15887   if (!string || !needle) {
  15888     return(false);
  15889   }
  15890 
  15891   if (!strstr(string, needle)) {
  15892     return(false);
  15893   }
  15894   return(true);
  15895 }
  15896 
  15897 bool hasCharS(const char *string, char c) {
  15898 
  15899   // sanity checks
  15900   if (!string) {
  15901     return(false);
  15902   }
  15903   if (!strchr(string, c)) {
  15904     return(false);
  15905   }
  15906   return(true);
  15907 }
  15908 
  15909 /**
  15910  * ignore case Find String
  15911  *
  15912  * \param
  15913  *   string
  15914  * \param
  15915  *   needle: string to find
  15916  * \return
  15917  *   pointer to first occurence of needle in string
  15918  *   NULL when needle is not found
  15919  *   NULL when string or needle are NULL
  15920  */
  15921 char *icFindS(const char *string, const char *needle) {
  15922 
  15923   // sanity checks
  15924   if (!string || !needle) {
  15925     return(NULL);
  15926   }
  15927   return(strcasestr(string, needle));
  15928 }
  15929 
  15930 char *icFindCharS(const char *string, char c) {
  15931 
  15932   // sanity checks
  15933   if (!string) {
  15934     return(NULL);
  15935   }
  15936   if (c == 0) {
  15937     // include terminating '\0' in comparison
  15938     // like findCharS
  15939     return(strchr(string, c));
  15940   }
  15941   charToS(s, c);
  15942   return(icFindS(string, s));
  15943 }
  15944 
  15945 /**
  15946  * ignore case indexOf String
  15947  * relative to start
  15948  *
  15949  * \param
  15950  *   string
  15951  * \param
  15952  *   needle: string to find
  15953  * \return
  15954  *   index of first occurence of needle in string
  15955  *   -1 when needle is not found
  15956  *   -1 when string or needle are NULL
  15957  */
  15958 ssize_t icIndexOfS(const char *string, const char *needle) {
  15959 
  15960   char *r = icFindS(string, needle);
  15961   if (!r) {
  15962     return(-1);
  15963   }
  15964   return((ssize_t)(r - string));
  15965 }
  15966 
  15967 ssize_t icIndexOfCharS(const char *string, char c) {
  15968 
  15969   char *r = icFindCharS(string, c);
  15970   if (!r) {
  15971     return(-1);
  15972   }
  15973   return((ssize_t)(r - string));
  15974 }
  15975 
  15976 /**
  15977  * ignore case has String
  15978  *
  15979  * \param
  15980  *   string
  15981  * \param
  15982  *   needle: string to find
  15983  * \return
  15984  *   true when needle is in string
  15985  *   false when needle is not found
  15986  *   false when string or needle are NULL
  15987  */
  15988 bool icHasS(const char *string, const char *needle) {
  15989 
  15990   // sanity checks
  15991   if (!string || !needle) {
  15992     return(false);
  15993   }
  15994 
  15995   if (!strcasestr(string, needle)) {
  15996     return(false);
  15997   }
  15998   return(true);
  15999 }
  16000 
  16001 bool icHasCharS(const char *string, char c) {
  16002 
  16003   // sanity checks
  16004   if (!string) {
  16005     return(false);
  16006   }
  16007   charToS(s,c);
  16008   return(icHasS(string, s));
  16009 }
  16010 
  16011 /**
  16012  * token in String
  16013  *
  16014  * parse string into a sequence of tokens delimited by the ENTIRE DELIM string
  16015  * work like strtok_r from c stdlib
  16016  * (for strtok_r, when delim has multiple characters, each character is a delimiter)
  16017  *
  16018  * on first call s is the string to parse, optionally initialize *saveptr to NULL
  16019  * on next calls, s should be NULL
  16020  *
  16021  * \param
  16022  *   s string to parse, the s string is modified
  16023  * \param
  16024  *   delim string
  16025  * \return
  16026  *   token
  16027  *   *saveptr is set to NULL when the last token is found
  16028  */
  16029 char *tokS(char *s, const char *delim, char **saveptr) {
  16030   char *r = NULL;
  16031 
  16032   // sanity checks
  16033   if (!delim) {
  16034     return(NULL);
  16035   }
  16036   if (s) {
  16037     *saveptr = s;
  16038   }
  16039   else if (!*saveptr) {
  16040     return(NULL);
  16041   }
  16042   r = *saveptr;
  16043   *saveptr = findS(*saveptr, delim);
  16044   if (*saveptr) {
  16045     // delimiter is found
  16046     **saveptr = 0;
  16047     // shift start of working string after the delimiter
  16048     *saveptr += strlen(delim);
  16049   }
  16050   return(r);
  16051 }
  16052 
  16053 /**
  16054  * ignore case token in String
  16055  *
  16056  * parse string into a sequence of tokens delimited by the ENTIRE DELIM string
  16057  * work like strtok_r from c stdlib
  16058  * (for strtok_r, when delim has multiple characters, each character is a delimiter)
  16059  *
  16060  * on first call s is the string to parse, optionally initialize *saveptr to NULL
  16061  * on next calls, s should be NULL
  16062  *
  16063  * \param
  16064  *   s string to parse, the s string is modified
  16065  * \param
  16066  *   delim string
  16067  * \return
  16068  *   token
  16069  *   *saveptr is set to NULL when the last token is found
  16070  */
  16071 char *icTokS(char *s, const char *delim, char **saveptr) {
  16072   char *r = NULL;
  16073 
  16074   // sanity checks
  16075   if (!delim) {
  16076     return(NULL);
  16077   }
  16078   if (s) {
  16079     *saveptr = s;
  16080   }
  16081   else if (!*saveptr) {
  16082     return(NULL);
  16083   }
  16084   r = *saveptr;
  16085   *saveptr = icFindS(*saveptr, delim);
  16086   if (*saveptr) {
  16087     // delimiter is found
  16088     **saveptr = 0;
  16089     // shift start of working string after the delimiter
  16090     *saveptr += strlen(delim);
  16091   }
  16092   return(r);
  16093 }
  16094 
  16095 
  16096 
  16097 
  16098 //
  16099 // UTF-8 string functions
  16100 //
  16101 // UNICODE v10.0
  16102 //
  16103 
  16104 /**
  16105  * character length of UTF-8 string
  16106  *
  16107  * string is not checked for validity
  16108  */
  16109 size_t lenUTF8(const char *s) {
  16110   size_t r = 0;;
  16111 
  16112   if (!s) {
  16113     return(0);
  16114   }
  16115   while (*s) {
  16116     r += (*s++ & 0xC0) != 0x80;
  16117   }
  16118   return(r);
  16119 }
  16120 
  16121 /**
  16122  * buffer character length of UTF-8 string
  16123  *
  16124  * string is not checked for validity
  16125  *
  16126  * bLLenUTF8 checks at most maxSize bytes
  16127  */
  16128 size_t bLLenUTF8(const char *s, size_t maxSize) {
  16129   size_t r = 0;;
  16130 
  16131   if (!s) {
  16132     return(0);
  16133   }
  16134 
  16135   const char *t = s;
  16136   while (*s && ((size_t)(s-t)+1 < maxSize)) {
  16137     r += (*s++ & 0xC0) != 0x80;
  16138   }
  16139   return(r);
  16140 }
  16141 
  16142 
  16143 // https://stackoverflow.com/questions/1031645/how-to-detect-utf-8-in-plain-c/43338168#43338168
  16144 // christoph's answer
  16145 
  16146 /**
  16147  * is UTF-8 string
  16148  *
  16149  * check if string is a valid UTF-8 string
  16150  *
  16151  * \param
  16152  *   string UTF-8 encoded string
  16153  * \return
  16154  *   true string is valid UTF-8
  16155  *   false string is invalid UTF-8
  16156  */
  16157 bool isUTF8(const char * string) {
  16158 
  16159   if (!string) {
  16160     return(false);
  16161   }
  16162 
  16163   const unsigned char * bytes = (const unsigned char *)string;
  16164   while (*bytes) {
  16165     // ASCII
  16166     // use bytes[0] <= 0x7F to allow ASCII control characters
  16167     if (bytes[0] == 0x09 || bytes[0] == 0x0A || bytes[0] == 0x0D || (0x20 <= bytes[0] && bytes[0] <= 0x7E)) {
  16168       bytes += 1;
  16169       continue;
  16170     }
  16171 
  16172     // non-overlong 2-byte
  16173     if ((0xC2 <= bytes[0] && bytes[0] <= 0xDF) && (0x80 <= bytes[1] && bytes[1] <= 0xBF)) {
  16174       bytes += 2;
  16175       continue;
  16176     }
  16177 
  16178     // excluding overlongs
  16179     // straight 3-byte
  16180     // excluding surrogates
  16181     if ((bytes[0] == 0xE0 && (0xA0 <= bytes[1] && bytes[1] <= 0xBF) && (0x80 <= bytes[2] && bytes[2] <= 0xBF)) || (((0xE1 <= bytes[0] && bytes[0] <= 0xEC) || bytes[0] == 0xEE || bytes[0] == 0xEF) && (0x80 <= bytes[1] && bytes[1] <= 0xBF) && (0x80 <= bytes[2] && bytes[2] <= 0xBF)) || (bytes[0] == 0xED && (0x80 <= bytes[1] && bytes[1] <= 0x9F) && (0x80 <= bytes[2] && bytes[2] <= 0xBF))) {
  16182       bytes += 3;
  16183       continue;
  16184     }
  16185 
  16186     // planes 1-3
  16187     // planes 4-15
  16188     // plane 16
  16189     if ((bytes[0] == 0xF0 && (0x90 <= bytes[1] && bytes[1] <= 0xBF) && (0x80 <= bytes[2] && bytes[2] <= 0xBF) && (0x80 <= bytes[3] && bytes[3] <= 0xBF)) || ((0xF1 <= bytes[0] && bytes[0] <= 0xF3) && (0x80 <= bytes[1] && bytes[1] <= 0xBF) && (0x80 <= bytes[2] && bytes[2] <= 0xBF) && (0x80 <= bytes[3] && bytes[3] <= 0xBF)) || (bytes[0] == 0xF4 && (0x80 <= bytes[1] && bytes[1] <= 0x8F) && (0x80 <= bytes[2] && bytes[2] <= 0xBF) && (0x80 <= bytes[3] && bytes[3] <= 0xBF))) {
  16190       bytes += 4;
  16191       continue;
  16192     }
  16193 
  16194     return(false);
  16195   }
  16196 
  16197   return(true);
  16198 }
  16199 
  16200 /**
  16201  * buffer length is UTF-8 string
  16202  *
  16203  * check if string is a valid UTF-8 string
  16204  *
  16205  * \param
  16206  *   string UTF-8 encoded string
  16207  * \return
  16208  *   true string is valid UTF-8
  16209  *   false string is invalid UTF-8
  16210  */
  16211 bool bLIsUTF8(const char * string, size_t stringSize) {
  16212 
  16213   if (!string || !stringSize) {
  16214     return(false);
  16215   }
  16216 
  16217   const unsigned char * bytes = (const unsigned char *)string;
  16218   while (*bytes) {
  16219 
  16220     // ASCII
  16221     // use bytes[0] <= 0x7F to allow ASCII control characters
  16222     if (bytes[0] == 0x09 || bytes[0] == 0x0A || bytes[0] == 0x0D || (0x20 <= bytes[0] && bytes[0] <= 0x7E)) {
  16223       bytes += 1;
  16224       if ((size_t)(bytes - (const unsigned char *)string)+1 > stringSize) {
  16225         return(false);
  16226       }
  16227       continue;
  16228     }
  16229 
  16230     // non-overlong 2-byte
  16231     if ((0xC2 <= bytes[0] && bytes[0] <= 0xDF) && (0x80 <= bytes[1] && bytes[1] <= 0xBF)) {
  16232       bytes += 2;
  16233       if ((size_t)(bytes - (const unsigned char *)string)+1 > stringSize) {
  16234         return(false);
  16235       }
  16236       continue;
  16237     }
  16238 
  16239     // excluding overlongs
  16240     // straight 3-byte
  16241     // excluding surrogates
  16242     if ((bytes[0] == 0xE0 && (0xA0 <= bytes[1] && bytes[1] <= 0xBF) && (0x80 <= bytes[2] && bytes[2] <= 0xBF)) || (((0xE1 <= bytes[0] && bytes[0] <= 0xEC) || bytes[0] == 0xEE || bytes[0] == 0xEF) && (0x80 <= bytes[1] && bytes[1] <= 0xBF) && (0x80 <= bytes[2] && bytes[2] <= 0xBF)) || (bytes[0] == 0xED && (0x80 <= bytes[1] && bytes[1] <= 0x9F) && (0x80 <= bytes[2] && bytes[2] <= 0xBF))) {
  16243       bytes += 3;
  16244       if ((size_t)(bytes - (const unsigned char *)string)+1 > stringSize) {
  16245         return(false);
  16246       }
  16247       continue;
  16248     }
  16249 
  16250     // planes 1-3
  16251     // planes 4-15
  16252     // plane 16
  16253     if ((bytes[0] == 0xF0 && (0x90 <= bytes[1] && bytes[1] <= 0xBF) && (0x80 <= bytes[2] && bytes[2] <= 0xBF) && (0x80 <= bytes[3] && bytes[3] <= 0xBF)) || ((0xF1 <= bytes[0] && bytes[0] <= 0xF3) && (0x80 <= bytes[1] && bytes[1] <= 0xBF) && (0x80 <= bytes[2] && bytes[2] <= 0xBF) && (0x80 <= bytes[3] && bytes[3] <= 0xBF)) || (bytes[0] == 0xF4 && (0x80 <= bytes[1] && bytes[1] <= 0x8F) && (0x80 <= bytes[2] && bytes[2] <= 0xBF) && (0x80 <= bytes[3] && bytes[3] <= 0xBF))) {
  16254       bytes += 4;
  16255       if ((size_t)(bytes - (const unsigned char *)string)+1 > stringSize) {
  16256         return(false);
  16257       }
  16258       continue;
  16259     }
  16260 
  16261     return(false);
  16262   }
  16263 
  16264   return(true);
  16265 }
  16266 
  16267 /**
  16268  * is code point UTF8 encoded string
  16269  *
  16270  * Check if a UTF8 code point is valid
  16271  *
  16272  * This function checks only the first code point
  16273  *
  16274  * \param
  16275  *   bytes string, NUL-terminated or not, bytes can be a pointer inside a UTF8 encoded string
  16276  * \return
  16277  *   true bytes is a valid UTF-8 code point
  16278  *   false bytes is invalid code point
  16279  */
  16280 bool isCodeUTF8(const char *code) {
  16281 
  16282   if (!code) {
  16283     return(false);
  16284   }
  16285   const unsigned char * bytes = (const unsigned char *)code;
  16286   // ASCII
  16287   // use bytes[0] <= 0x7F to allow ASCII control characters
  16288   if (bytes[0] == 0x09 || bytes[0] == 0x0A || bytes[0] == 0x0D || (0x20 <= bytes[0] && bytes[0] <= 0x7E)) {
  16289     return(true);
  16290   }
  16291 
  16292   // non-overlong 2-byte
  16293   if ((0xC2 <= bytes[0] && bytes[0] <= 0xDF) && (0x80 <= bytes[1] && bytes[1] <= 0xBF)) {
  16294     return(true);
  16295   }
  16296 
  16297   // excluding overlongs
  16298   // straight 3-byte
  16299   // excluding surrogates
  16300   if ((bytes[0] == 0xE0 && (0xA0 <= bytes[1] && bytes[1] <= 0xBF) && (0x80 <= bytes[2] && bytes[2] <= 0xBF)) || (((0xE1 <= bytes[0] && bytes[0] <= 0xEC) || bytes[0] == 0xEE || bytes[0] == 0xEF) && (0x80 <= bytes[1] && bytes[1] <= 0xBF) && (0x80 <= bytes[2] && bytes[2] <= 0xBF)) || (bytes[0] == 0xED && (0x80 <= bytes[1] && bytes[1] <= 0x9F) && (0x80 <= bytes[2] && bytes[2] <= 0xBF))) {
  16301     return(true);
  16302   }
  16303 
  16304   // planes 1-3
  16305   // planes 4-15
  16306   // plane 16
  16307   if ((bytes[0] == 0xF0 && (0x90 <= bytes[1] && bytes[1] <= 0xBF) && (0x80 <= bytes[2] && bytes[2] <= 0xBF) && (0x80 <= bytes[3] && bytes[3] <= 0xBF)) || ((0xF1 <= bytes[0] && bytes[0] <= 0xF3) && (0x80 <= bytes[1] && bytes[1] <= 0xBF) && (0x80 <= bytes[2] && bytes[2] <= 0xBF) && (0x80 <= bytes[3] && bytes[3] <= 0xBF)) || (bytes[0] == 0xF4 && (0x80 <= bytes[1] && bytes[1] <= 0x8F) && (0x80 <= bytes[2] && bytes[2] <= 0xBF) && (0x80 <= bytes[3] && bytes[3] <= 0xBF))) {
  16308     return(true);
  16309   }
  16310 
  16311   return(false);
  16312 }
  16313 
  16314 // INCLUDE libsheepyC.c
  16315 /** maximum rune value */
  16316 #define runeMax 0x10FFFF
  16317 
  16318 /** code point length, 0 when invalid code point, x is first byte in code point */
  16319 #define UTFSEQ(x) ((((x) & 0x80) == 0x00) ? 1 /* 0xxxxxxx */ \
  16320                  : (((x) & 0xC0) == 0x80) ? 0 /* 10xxxxxx */ \
  16321                  : (((x) & 0xE0) == 0xC0) ? 2 /* 110xxxxx */ \
  16322                  : (((x) & 0xF0) == 0xE0) ? 3 /* 1110xxxx */ \
  16323                  : (((x) & 0xF8) == 0xF0) ? 4 /* 11110xxx */ \
  16324                  : (((x) & 0xFC) == 0xF8) ? 5 /* 111110xx */ \
  16325                  : (((x) & 0xFE) == 0xFC) ? 6 /* 1111110x */ \
  16326                                           : 0 )
  16327 
  16328 #define BADRUNE(x) ((x) < 0 || (x) > runeMax \
  16329                 || ((x) & 0xFFFE) == 0xFFFE \
  16330                 || ((x) >= 0xD800 && (x) <= 0xDFFF) \
  16331                 || ((x) >= 0xFDD0 && (x) <= 0xFDEF))
  16332 
  16333 #define UNICODE_LAST_CHAR_PART1 0x2FAFF
  16334 #define UNICODE_LAST_PAGE_PART1 762
  16335 #define UNICODE_MAX_TABLE_INDEX 10000
  16336 #define UNICODE_NOT_PRESENT_OFFSET 65535
  16337 
  16338 /**
  16339  * Unicode types:
  16340  * UNICODE_CONTROL: General category "Other, Control" (Cc)
  16341  * UNICODE_FORMAT: General category "Other, Format" (Cf)
  16342  * UNICODE_UNASSIGNED: General category "Other, Not Assigned" (Cn)
  16343  * UNICODE_PRIVATE_USE: General category "Other, Private Use" (Co)
  16344  * UNICODE_SURROGATE: General category "Other, Surrogate" (Cs)
  16345  * UNICODE_LOWERCASE_LETTER: General category "Letter, Lowercase" (Ll)
  16346  * UNICODE_MODIFIER_LETTER: General category "Letter, Modifier" (Lm)
  16347  * UNICODE_OTHER_LETTER: General category "Letter, Other" (Lo)
  16348  * UNICODE_TITLECASE_LETTER: General category "Letter, Titlecase" (Lt)
  16349  * UNICODE_UPPERCASE_LETTER: General category "Letter, Uppercase" (Lu)
  16350  * UNICODE_SPACING_MARK: General category "Mark, Spacing" (Mc)
  16351  * UNICODE_ENCLOSING_MARK: General category "Mark, Enclosing" (Me)
  16352  * UNICODE_NON_SPACING_MARK: General category "Mark, Nonspacing" (Mn)
  16353  * UNICODE_DECIMAL_NUMBER: General category "Number, Decimal Digit" (Nd)
  16354  * UNICODE_LETTER_NUMBER: General category "Number, Letter" (Nl)
  16355  * UNICODE_OTHER_NUMBER: General category "Number, Other" (No)
  16356  * UNICODE_CONNECT_PUNCTUATION: General category "Punctuation, Connector" (Pc)
  16357  * UNICODE_DASH_PUNCTUATION: General category "Punctuation, Dash" (Pd)
  16358  * UNICODE_CLOSE_PUNCTUATION: General category "Punctuation, Close" (Pe)
  16359  * UNICODE_FINAL_PUNCTUATION: General category "Punctuation, Final quote" (Pf)
  16360  * UNICODE_INITIAL_PUNCTUATION: General category "Punctuation, Initial quote" (Pi)
  16361  * UNICODE_OTHER_PUNCTUATION: General category "Punctuation, Other" (Po)
  16362  * UNICODE_OPEN_PUNCTUATION: General category "Punctuation, Open" (Ps)
  16363  * UNICODE_CURRENCY_SYMBOL: General category "Symbol, Currency" (Sc)
  16364  * UNICODE_MODIFIER_SYMBOL: General category "Symbol, Modifier" (Sk)
  16365  * UNICODE_MATH_SYMBOL: General category "Symbol, Math" (Sm)
  16366  * UNICODE_OTHER_SYMBOL: General category "Symbol, Other" (So)
  16367  * UNICODE_LINE_SEPARATOR: General category "Separator, Line" (Zl)
  16368  * UNICODE_PARAGRAPH_SEPARATOR: General category "Separator, Paragraph" (Zp)
  16369  * UNICODE_SPACE_SEPARATOR: General category "Separator, Space" (Zs)
  16370  *
  16371  * These are the possible character classifications from the
  16372  * Unicode specification.
  16373  * See [Unicode Character Database](http://www.unicode.org/reports/tr44/#General_Category_Values).
  16374  */
  16375 typedef enum
  16376 {
  16377   UNICODE_CONTROL,
  16378   UNICODE_FORMAT,
  16379   UNICODE_UNASSIGNED,
  16380   UNICODE_PRIVATE_USE,
  16381   UNICODE_SURROGATE,
  16382   UNICODE_LOWERCASE_LETTER,
  16383   UNICODE_MODIFIER_LETTER,
  16384   UNICODE_OTHER_LETTER,
  16385   UNICODE_TITLECASE_LETTER,
  16386   UNICODE_UPPERCASE_LETTER,
  16387   UNICODE_SPACING_MARK,
  16388   UNICODE_ENCLOSING_MARK,
  16389   UNICODE_NON_SPACING_MARK,
  16390   UNICODE_DECIMAL_NUMBER,
  16391   UNICODE_LETTER_NUMBER,
  16392   UNICODE_OTHER_NUMBER,
  16393   UNICODE_CONNECT_PUNCTUATION,
  16394   UNICODE_DASH_PUNCTUATION,
  16395   UNICODE_CLOSE_PUNCTUATION,
  16396   UNICODE_FINAL_PUNCTUATION,
  16397   UNICODE_INITIAL_PUNCTUATION,
  16398   UNICODE_OTHER_PUNCTUATION,
  16399   UNICODE_OPEN_PUNCTUATION,
  16400   UNICODE_CURRENCY_SYMBOL,
  16401   UNICODE_MODIFIER_SYMBOL,
  16402   UNICODE_MATH_SYMBOL,
  16403   UNICODE_OTHER_SYMBOL,
  16404   UNICODE_LINE_SEPARATOR,
  16405   UNICODE_PARAGRAPH_SEPARATOR,
  16406   UNICODE_SPACE_SEPARATOR
  16407 } unicodeType;
  16408 
  16409 static const rune attr_data[][256] = {
  16410   { /* page 0, index 0 */
  16411     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16412     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16413     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16414     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16415     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16416     0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005,
  16417     0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16418     0x0000, 0x0000, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
  16419     0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
  16420     0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079,
  16421     0x007a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0041, 0x0042,
  16422     0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b,
  16423     0x004c, 0x004d, 0x004e, 0x004f, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054,
  16424     0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x0000, 0x0000, 0x0000,
  16425     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16426     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16427     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16428     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16429     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16430     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16431     0x0000, 0x039c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16432     0x0000, 0x0000, 0x0000, 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5,
  16433     0x00e6, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee,
  16434     0x00ef, 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x0000,
  16435     0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x1000000,
  16436     0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, 0x00c8,
  16437     0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, 0x00d0, 0x00d1,
  16438     0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x0000, 0x00d8, 0x00d9, 0x00da,
  16439     0x00db, 0x00dc, 0x00dd, 0x00de, 0x0178
  16440   },
  16441   { /* page 1, index 1 */
  16442     0x0101, 0x0100, 0x0103, 0x0102, 0x0105, 0x0104, 0x0107, 0x0106, 0x0109,
  16443     0x0108, 0x010b, 0x010a, 0x010d, 0x010c, 0x010f, 0x010e, 0x0111, 0x0110,
  16444     0x0113, 0x0112, 0x0115, 0x0114, 0x0117, 0x0116, 0x0119, 0x0118, 0x011b,
  16445     0x011a, 0x011d, 0x011c, 0x011f, 0x011e, 0x0121, 0x0120, 0x0123, 0x0122,
  16446     0x0125, 0x0124, 0x0127, 0x0126, 0x0129, 0x0128, 0x012b, 0x012a, 0x012d,
  16447     0x012c, 0x012f, 0x012e, 0x1000007, 0x0049, 0x0133, 0x0132, 0x0135,
  16448     0x0134, 0x0137, 0x0136, 0x0000, 0x013a, 0x0139, 0x013c, 0x013b, 0x013e,
  16449     0x013d, 0x0140, 0x013f, 0x0142, 0x0141, 0x0144, 0x0143, 0x0146, 0x0145,
  16450     0x0148, 0x0147, 0x1000086, 0x014b, 0x014a, 0x014d, 0x014c, 0x014f,
  16451     0x014e, 0x0151, 0x0150, 0x0153, 0x0152, 0x0155, 0x0154, 0x0157, 0x0156,
  16452     0x0159, 0x0158, 0x015b, 0x015a, 0x015d, 0x015c, 0x015f, 0x015e, 0x0161,
  16453     0x0160, 0x0163, 0x0162, 0x0165, 0x0164, 0x0167, 0x0166, 0x0169, 0x0168,
  16454     0x016b, 0x016a, 0x016d, 0x016c, 0x016f, 0x016e, 0x0171, 0x0170, 0x0173,
  16455     0x0172, 0x0175, 0x0174, 0x0177, 0x0176, 0x00ff, 0x017a, 0x0179, 0x017c,
  16456     0x017b, 0x017e, 0x017d, 0x0053, 0x0243, 0x0253, 0x0183, 0x0182, 0x0185,
  16457     0x0184, 0x0254, 0x0188, 0x0187, 0x0256, 0x0257, 0x018c, 0x018b, 0x0000,
  16458     0x01dd, 0x0259, 0x025b, 0x0192, 0x0191, 0x0260, 0x0263, 0x01f6, 0x0269,
  16459     0x0268, 0x0199, 0x0198, 0x023d, 0x0000, 0x026f, 0x0272, 0x0220, 0x0275,
  16460     0x01a1, 0x01a0, 0x01a3, 0x01a2, 0x01a5, 0x01a4, 0x0280, 0x01a8, 0x01a7,
  16461     0x0283, 0x0000, 0x0000, 0x01ad, 0x01ac, 0x0288, 0x01b0, 0x01af, 0x028a,
  16462     0x028b, 0x01b4, 0x01b3, 0x01b6, 0x01b5, 0x0292, 0x01b9, 0x01b8, 0x0000,
  16463     0x0000, 0x01bd, 0x01bc, 0x0000, 0x01f7, 0x0000, 0x0000, 0x0000, 0x0000,
  16464     0x01c6, 0x0000, 0x01c4, 0x01c9, 0x0000, 0x01c7, 0x01cc, 0x0000, 0x01ca,
  16465     0x01ce, 0x01cd, 0x01d0, 0x01cf, 0x01d2, 0x01d1, 0x01d4, 0x01d3, 0x01d6,
  16466     0x01d5, 0x01d8, 0x01d7, 0x01da, 0x01d9, 0x01dc, 0x01db, 0x018e, 0x01df,
  16467     0x01de, 0x01e1, 0x01e0, 0x01e3, 0x01e2, 0x01e5, 0x01e4, 0x01e7, 0x01e6,
  16468     0x01e9, 0x01e8, 0x01eb, 0x01ea, 0x01ed, 0x01ec, 0x01ef, 0x01ee,
  16469     0x10000ad, 0x01f3, 0x0000, 0x01f1, 0x01f5, 0x01f4, 0x0195, 0x01bf,
  16470     0x01f9, 0x01f8, 0x01fb, 0x01fa, 0x01fd, 0x01fc, 0x01ff, 0x01fe
  16471   },
  16472   { /* page 2, index 2 */
  16473     0x0201, 0x0200, 0x0203, 0x0202, 0x0205, 0x0204, 0x0207, 0x0206, 0x0209,
  16474     0x0208, 0x020b, 0x020a, 0x020d, 0x020c, 0x020f, 0x020e, 0x0211, 0x0210,
  16475     0x0213, 0x0212, 0x0215, 0x0214, 0x0217, 0x0216, 0x0219, 0x0218, 0x021b,
  16476     0x021a, 0x021d, 0x021c, 0x021f, 0x021e, 0x019e, 0x0000, 0x0223, 0x0222,
  16477     0x0225, 0x0224, 0x0227, 0x0226, 0x0229, 0x0228, 0x022b, 0x022a, 0x022d,
  16478     0x022c, 0x022f, 0x022e, 0x0231, 0x0230, 0x0233, 0x0232, 0x0000, 0x0000,
  16479     0x0000, 0x0000, 0x0000, 0x0000, 0x2c65, 0x023c, 0x023b, 0x019a, 0x2c66,
  16480     0x2c7e, 0x2c7f, 0x0242, 0x0241, 0x0180, 0x0289, 0x028c, 0x0247, 0x0246,
  16481     0x0249, 0x0248, 0x024b, 0x024a, 0x024d, 0x024c, 0x024f, 0x024e, 0x2c6f,
  16482     0x2c6d, 0x2c70, 0x0181, 0x0186, 0x0000, 0x0189, 0x018a, 0x0000, 0x018f,
  16483     0x0000, 0x0190, 0xa7ab, 0x0000, 0x0000, 0x0000, 0x0193, 0xa7ac, 0x0000,
  16484     0x0194, 0x0000, 0xa78d, 0xa7aa, 0x0000, 0x0197, 0x0196, 0xa7ae, 0x2c62,
  16485     0xa7ad, 0x0000, 0x0000, 0x019c, 0x0000, 0x2c6e, 0x019d, 0x0000, 0x0000,
  16486     0x019f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2c64,
  16487     0x0000, 0x0000, 0x01a6, 0x0000, 0x0000, 0x01a9, 0x0000, 0x0000, 0x0000,
  16488     0xa7b1, 0x01ae, 0x0244, 0x01b1, 0x01b2, 0x0245, 0x0000, 0x0000, 0x0000,
  16489     0x0000, 0x0000, 0x01b7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16490     0x0000, 0x0000, 0x0000, 0x0000, 0xa7b2, 0xa7b0, 0x0000, 0x0000, 0x0000,
  16491     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16492     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16493     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16494     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16495     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16496     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16497     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16498     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16499     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16500     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16501     0x0000, 0x0000, 0x0000, 0x0000
  16502   },
  16503   { /* page 3, index 3 */
  16504     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16505     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16506     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16507     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16508     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16509     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16510     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16511     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16512     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16513     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16514     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16515     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16516     0x0000, 0x0000, 0x0000, 0x0000, 0x0371, 0x0370, 0x0373, 0x0372, 0x0000,
  16517     0x0000, 0x0377, 0x0376, 0x0000, 0x0000, 0x0000, 0x03fd, 0x03fe, 0x03ff,
  16518     0x0000, 0x03f3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03ac,
  16519     0x0000, 0x03ad, 0x03ae, 0x03af, 0x0000, 0x03cc, 0x0000, 0x03cd, 0x03ce,
  16520     0x100008f, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7,
  16521     0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0,
  16522     0x03c1, 0x0000, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9,
  16523     0x03ca, 0x03cb, 0x0386, 0x0388, 0x0389, 0x038a, 0x100009e, 0x0391,
  16524     0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039a,
  16525     0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, 0x03a1, 0x03a3, 0x03a3,
  16526     0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, 0x03aa, 0x03ab, 0x038c,
  16527     0x038e, 0x038f, 0x03d7, 0x0392, 0x0398, 0x0000, 0x0000, 0x0000, 0x03a6,
  16528     0x03a0, 0x03cf, 0x03d9, 0x03d8, 0x03db, 0x03da, 0x03dd, 0x03dc, 0x03df,
  16529     0x03de, 0x03e1, 0x03e0, 0x03e3, 0x03e2, 0x03e5, 0x03e4, 0x03e7, 0x03e6,
  16530     0x03e9, 0x03e8, 0x03eb, 0x03ea, 0x03ed, 0x03ec, 0x03ef, 0x03ee, 0x039a,
  16531     0x03a1, 0x03f9, 0x037f, 0x03b8, 0x0395, 0x0000, 0x03f8, 0x03f7, 0x03f2,
  16532     0x03fb, 0x03fa, 0x0000, 0x037b, 0x037c, 0x037d
  16533   },
  16534   { /* page 4, index 4 */
  16535     0x0450, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, 0x0458,
  16536     0x0459, 0x045a, 0x045b, 0x045c, 0x045d, 0x045e, 0x045f, 0x0430, 0x0431,
  16537     0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043a,
  16538     0x043b, 0x043c, 0x043d, 0x043e, 0x043f, 0x0440, 0x0441, 0x0442, 0x0443,
  16539     0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c,
  16540     0x044d, 0x044e, 0x044f, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415,
  16541     0x0416, 0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e,
  16542     0x041f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
  16543     0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, 0x0400,
  16544     0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, 0x0408, 0x0409,
  16545     0x040a, 0x040b, 0x040c, 0x040d, 0x040e, 0x040f, 0x0461, 0x0460, 0x0463,
  16546     0x0462, 0x0465, 0x0464, 0x0467, 0x0466, 0x0469, 0x0468, 0x046b, 0x046a,
  16547     0x046d, 0x046c, 0x046f, 0x046e, 0x0471, 0x0470, 0x0473, 0x0472, 0x0475,
  16548     0x0474, 0x0477, 0x0476, 0x0479, 0x0478, 0x047b, 0x047a, 0x047d, 0x047c,
  16549     0x047f, 0x047e, 0x0481, 0x0480, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16550     0x0000, 0x0000, 0x0000, 0x048b, 0x048a, 0x048d, 0x048c, 0x048f, 0x048e,
  16551     0x0491, 0x0490, 0x0493, 0x0492, 0x0495, 0x0494, 0x0497, 0x0496, 0x0499,
  16552     0x0498, 0x049b, 0x049a, 0x049d, 0x049c, 0x049f, 0x049e, 0x04a1, 0x04a0,
  16553     0x04a3, 0x04a2, 0x04a5, 0x04a4, 0x04a7, 0x04a6, 0x04a9, 0x04a8, 0x04ab,
  16554     0x04aa, 0x04ad, 0x04ac, 0x04af, 0x04ae, 0x04b1, 0x04b0, 0x04b3, 0x04b2,
  16555     0x04b5, 0x04b4, 0x04b7, 0x04b6, 0x04b9, 0x04b8, 0x04bb, 0x04ba, 0x04bd,
  16556     0x04bc, 0x04bf, 0x04be, 0x04cf, 0x04c2, 0x04c1, 0x04c4, 0x04c3, 0x04c6,
  16557     0x04c5, 0x04c8, 0x04c7, 0x04ca, 0x04c9, 0x04cc, 0x04cb, 0x04ce, 0x04cd,
  16558     0x04c0, 0x04d1, 0x04d0, 0x04d3, 0x04d2, 0x04d5, 0x04d4, 0x04d7, 0x04d6,
  16559     0x04d9, 0x04d8, 0x04db, 0x04da, 0x04dd, 0x04dc, 0x04df, 0x04de, 0x04e1,
  16560     0x04e0, 0x04e3, 0x04e2, 0x04e5, 0x04e4, 0x04e7, 0x04e6, 0x04e9, 0x04e8,
  16561     0x04eb, 0x04ea, 0x04ed, 0x04ec, 0x04ef, 0x04ee, 0x04f1, 0x04f0, 0x04f3,
  16562     0x04f2, 0x04f5, 0x04f4, 0x04f7, 0x04f6, 0x04f9, 0x04f8, 0x04fb, 0x04fa,
  16563     0x04fd, 0x04fc, 0x04ff, 0x04fe
  16564   },
  16565   { /* page 5, index 5 */
  16566     0x0501, 0x0500, 0x0503, 0x0502, 0x0505, 0x0504, 0x0507, 0x0506, 0x0509,
  16567     0x0508, 0x050b, 0x050a, 0x050d, 0x050c, 0x050f, 0x050e, 0x0511, 0x0510,
  16568     0x0513, 0x0512, 0x0515, 0x0514, 0x0517, 0x0516, 0x0519, 0x0518, 0x051b,
  16569     0x051a, 0x051d, 0x051c, 0x051f, 0x051e, 0x0521, 0x0520, 0x0523, 0x0522,
  16570     0x0525, 0x0524, 0x0527, 0x0526, 0x0529, 0x0528, 0x052b, 0x052a, 0x052d,
  16571     0x052c, 0x052f, 0x052e, 0x0000, 0x0561, 0x0562, 0x0563, 0x0564, 0x0565,
  16572     0x0566, 0x0567, 0x0568, 0x0569, 0x056a, 0x056b, 0x056c, 0x056d, 0x056e,
  16573     0x056f, 0x0570, 0x0571, 0x0572, 0x0573, 0x0574, 0x0575, 0x0576, 0x0577,
  16574     0x0578, 0x0579, 0x057a, 0x057b, 0x057c, 0x057d, 0x057e, 0x057f, 0x0580,
  16575     0x0581, 0x0582, 0x0583, 0x0584, 0x0585, 0x0586, 0x0000, 0x0000, 0x0000,
  16576     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0531, 0x0532,
  16577     0x0533, 0x0534, 0x0535, 0x0536, 0x0537, 0x0538, 0x0539, 0x053a, 0x053b,
  16578     0x053c, 0x053d, 0x053e, 0x053f, 0x0540, 0x0541, 0x0542, 0x0543, 0x0544,
  16579     0x0545, 0x0546, 0x0547, 0x0548, 0x0549, 0x054a, 0x054b, 0x054c, 0x054d,
  16580     0x054e, 0x054f, 0x0550, 0x0551, 0x0552, 0x0553, 0x0554, 0x0555, 0x0556,
  16581     0x1000044, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16582     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16583     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16584     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16585     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16586     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16587     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16588     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16589     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16590     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16591     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16592     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16593     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16594     0x0000, 0x0000, 0x0000, 0x0000, 0x0000
  16595   },
  16596   { /* page 6, index 6 */
  16597     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16598     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16599     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16600     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16601     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16602     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16603     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16604     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16605     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16606     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16607     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002,
  16608     0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000,
  16609     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16610     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16611     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16612     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16613     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16614     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16615     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16616     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16617     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16618     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16619     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16620     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16621     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16622     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16623     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002,
  16624     0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000,
  16625     0x0000, 0x0000, 0x0000, 0x0000
  16626   },
  16627   { /* page 7, index 7 */
  16628     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16629     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16630     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16631     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16632     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16633     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16634     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16635     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16636     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16637     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16638     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16639     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16640     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16641     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16642     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16643     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16644     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16645     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16646     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16647     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16648     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16649     0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005,
  16650     0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16651     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16652     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16653     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16654     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16655     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16656     0x0000, 0x0000, 0x0000, 0x0000
  16657   },
  16658   { /* page 9, index 8 */
  16659     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16660     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16661     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16662     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16663     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16664     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16665     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16666     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16667     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16668     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16669     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16670     0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005,
  16671     0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16672     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16673     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16674     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16675     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16676     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16677     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16678     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16679     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16680     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16681     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16682     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16683     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16684     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003,
  16685     0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000,
  16686     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16687     0x0000, 0x0000, 0x0000, 0x0000
  16688   },
  16689   { /* page 10, index 9 */
  16690     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16691     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16692     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16693     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16694     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16695     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16696     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16697     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16698     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16699     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16700     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16701     0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005,
  16702     0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16703     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16704     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16705     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16706     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16707     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16708     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16709     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16710     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16711     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16712     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16713     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16714     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16715     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003,
  16716     0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000,
  16717     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16718     0x0000, 0x0000, 0x0000, 0x0000
  16719   },
  16720   { /* page 11, index 10 */
  16721     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16722     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16723     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16724     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16725     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16726     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16727     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16728     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16729     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16730     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16731     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16732     0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005,
  16733     0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16734     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16735     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16736     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16737     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16738     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16739     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16740     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16741     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16742     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16743     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16744     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16745     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16746     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003,
  16747     0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000,
  16748     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16749     0x0000, 0x0000, 0x0000, 0x0000
  16750   },
  16751   { /* page 12, index 11 */
  16752     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16753     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16754     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16755     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16756     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16757     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16758     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16759     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16760     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16761     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16762     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16763     0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005,
  16764     0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16765     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16766     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16767     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16768     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16769     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16770     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16771     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16772     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16773     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16774     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16775     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16776     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16777     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003,
  16778     0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000,
  16779     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16780     0x0000, 0x0000, 0x0000, 0x0000
  16781   },
  16782   { /* page 13, index 12 */
  16783     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16784     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16785     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16786     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16787     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16788     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16789     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16790     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16791     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16792     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16793     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16794     0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005,
  16795     0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16796     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16797     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16798     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16799     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16800     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16801     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16802     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16803     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16804     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16805     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16806     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16807     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16808     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003,
  16809     0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000,
  16810     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16811     0x0000, 0x0000, 0x0000, 0x0000
  16812   },
  16813   { /* page 14, index 13 */
  16814     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16815     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16816     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16817     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16818     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16819     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16820     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16821     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16822     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16823     0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009,
  16824     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16825     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16826     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16827     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16828     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16829     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16830     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16831     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16832     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16833     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16834     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16835     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16836     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16837     0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
  16838     0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16839     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16840     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16841     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16842     0x0000, 0x0000, 0x0000, 0x0000
  16843   },
  16844   { /* page 15, index 14 */
  16845     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16846     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16847     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16848     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003,
  16849     0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000,
  16850     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16851     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16852     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16853     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16854     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16855     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16856     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16857     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16858     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16859     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16860     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16861     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16862     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16863     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16864     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16865     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16866     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16867     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16868     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16869     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16870     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16871     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16872     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16873     0x0000, 0x0000, 0x0000, 0x0000
  16874   },
  16875   { /* page 16, index 15 */
  16876     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16877     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16878     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16879     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16880     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16881     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16882     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16883     0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
  16884     0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16885     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16886     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16887     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16888     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16889     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16890     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16891     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16892     0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008,
  16893     0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2d00, 0x2d01,
  16894     0x2d02, 0x2d03, 0x2d04, 0x2d05, 0x2d06, 0x2d07, 0x2d08, 0x2d09, 0x2d0a,
  16895     0x2d0b, 0x2d0c, 0x2d0d, 0x2d0e, 0x2d0f, 0x2d10, 0x2d11, 0x2d12, 0x2d13,
  16896     0x2d14, 0x2d15, 0x2d16, 0x2d17, 0x2d18, 0x2d19, 0x2d1a, 0x2d1b, 0x2d1c,
  16897     0x2d1d, 0x2d1e, 0x2d1f, 0x2d20, 0x2d21, 0x2d22, 0x2d23, 0x2d24, 0x2d25,
  16898     0x0000, 0x2d27, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2d2d, 0x0000,
  16899     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16900     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16901     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16902     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16903     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16904     0x0000, 0x0000, 0x0000, 0x0000
  16905   },
  16906   { /* page 19, index 16 */
  16907     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16908     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16909     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16910     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16911     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16912     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16913     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16914     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16915     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16916     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16917     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16918     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16919     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16920     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16921     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16922     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16923     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16924     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xab70, 0xab71,
  16925     0xab72, 0xab73, 0xab74, 0xab75, 0xab76, 0xab77, 0xab78, 0xab79, 0xab7a,
  16926     0xab7b, 0xab7c, 0xab7d, 0xab7e, 0xab7f, 0xab80, 0xab81, 0xab82, 0xab83,
  16927     0xab84, 0xab85, 0xab86, 0xab87, 0xab88, 0xab89, 0xab8a, 0xab8b, 0xab8c,
  16928     0xab8d, 0xab8e, 0xab8f, 0xab90, 0xab91, 0xab92, 0xab93, 0xab94, 0xab95,
  16929     0xab96, 0xab97, 0xab98, 0xab99, 0xab9a, 0xab9b, 0xab9c, 0xab9d, 0xab9e,
  16930     0xab9f, 0xaba0, 0xaba1, 0xaba2, 0xaba3, 0xaba4, 0xaba5, 0xaba6, 0xaba7,
  16931     0xaba8, 0xaba9, 0xabaa, 0xabab, 0xabac, 0xabad, 0xabae, 0xabaf, 0xabb0,
  16932     0xabb1, 0xabb2, 0xabb3, 0xabb4, 0xabb5, 0xabb6, 0xabb7, 0xabb8, 0xabb9,
  16933     0xabba, 0xabbb, 0xabbc, 0xabbd, 0xabbe, 0xabbf, 0x13f8, 0x13f9, 0x13fa,
  16934     0x13fb, 0x13fc, 0x13fd, 0x0000, 0x0000, 0x13f0, 0x13f1, 0x13f2, 0x13f3,
  16935     0x13f4, 0x13f5, 0x0000, 0x0000
  16936   },
  16937   { /* page 23, index 17 */
  16938     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16939     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16940     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16941     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16942     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16943     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16944     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16945     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16946     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16947     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16948     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16949     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16950     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16951     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16952     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16953     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16954     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16955     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16956     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16957     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16958     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16959     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16960     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16961     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16962     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16963     0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009,
  16964     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16965     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16966     0x0000, 0x0000, 0x0000, 0x0000
  16967   },
  16968   { /* page 24, index 18 */
  16969     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16970     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001,
  16971     0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000,
  16972     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16973     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16974     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16975     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16976     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16977     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16978     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16979     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16980     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16981     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16982     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16983     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16984     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16985     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16986     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16987     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16988     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16989     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16990     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16991     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16992     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16993     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16994     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16995     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16996     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  16997     0x0000, 0x0000, 0x0000, 0x0000
  16998   },
  16999   { /* page 25, index 19 */
  17000     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17001     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17002     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17003     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17004     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17005     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17006     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17007     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001,
  17008     0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000,
  17009     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17010     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17011     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17012     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17013     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17014     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17015     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17016     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17017     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17018     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17019     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17020     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17021     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17022     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17023     0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
  17024     0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17025     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17026     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17027     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17028     0x0000, 0x0000, 0x0000, 0x0000
  17029   },
  17030   { /* page 26, index 20 */
  17031     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17032     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17033     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17034     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17035     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17036     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17037     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17038     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17039     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17040     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17041     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17042     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17043     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17044     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17045     0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006,
  17046     0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17047     0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008,
  17048     0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17049     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17050     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17051     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17052     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17053     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17054     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17055     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17056     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17057     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17058     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17059     0x0000, 0x0000, 0x0000, 0x0000
  17060   },
  17061   { /* page 27, index 21 */
  17062     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17063     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17064     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17065     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17066     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17067     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17068     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17069     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17070     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17071     0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009,
  17072     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17073     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17074     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17075     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17076     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17077     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17078     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17079     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17080     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17081     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003,
  17082     0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000,
  17083     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17084     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17085     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17086     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17087     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17088     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17089     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17090     0x0000, 0x0000, 0x0000, 0x0000
  17091   },
  17092   { /* page 28, index 22 */
  17093     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17094     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17095     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17096     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17097     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17098     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17099     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17100     0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
  17101     0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17102     0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009,
  17103     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17104     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17105     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17106     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17107     0x0000, 0x0000, 0x0412, 0x0414, 0x041e, 0x0421, 0x0422, 0x0422, 0x042a,
  17108     0x0462, 0xa64a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17109     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17110     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17111     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17112     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17113     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17114     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17115     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17116     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17117     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17118     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17119     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17120     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17121     0x0000, 0x0000, 0x0000, 0x0000
  17122   },
  17123   { /* page 29, index 23 */
  17124     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17125     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17126     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17127     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17128     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17129     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17130     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17131     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17132     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17133     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17134     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17135     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17136     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17137     0x0000, 0x0000, 0x0000, 0x0000, 0xa77d, 0x0000, 0x0000, 0x0000, 0x2c63,
  17138     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17139     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17140     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17141     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17142     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17143     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17144     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17145     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17146     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17147     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17148     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17149     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17150     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17151     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17152     0x0000, 0x0000, 0x0000, 0x0000
  17153   },
  17154   { /* page 30, index 24 */
  17155     0x1e01, 0x1e00, 0x1e03, 0x1e02, 0x1e05, 0x1e04, 0x1e07, 0x1e06, 0x1e09,
  17156     0x1e08, 0x1e0b, 0x1e0a, 0x1e0d, 0x1e0c, 0x1e0f, 0x1e0e, 0x1e11, 0x1e10,
  17157     0x1e13, 0x1e12, 0x1e15, 0x1e14, 0x1e17, 0x1e16, 0x1e19, 0x1e18, 0x1e1b,
  17158     0x1e1a, 0x1e1d, 0x1e1c, 0x1e1f, 0x1e1e, 0x1e21, 0x1e20, 0x1e23, 0x1e22,
  17159     0x1e25, 0x1e24, 0x1e27, 0x1e26, 0x1e29, 0x1e28, 0x1e2b, 0x1e2a, 0x1e2d,
  17160     0x1e2c, 0x1e2f, 0x1e2e, 0x1e31, 0x1e30, 0x1e33, 0x1e32, 0x1e35, 0x1e34,
  17161     0x1e37, 0x1e36, 0x1e39, 0x1e38, 0x1e3b, 0x1e3a, 0x1e3d, 0x1e3c, 0x1e3f,
  17162     0x1e3e, 0x1e41, 0x1e40, 0x1e43, 0x1e42, 0x1e45, 0x1e44, 0x1e47, 0x1e46,
  17163     0x1e49, 0x1e48, 0x1e4b, 0x1e4a, 0x1e4d, 0x1e4c, 0x1e4f, 0x1e4e, 0x1e51,
  17164     0x1e50, 0x1e53, 0x1e52, 0x1e55, 0x1e54, 0x1e57, 0x1e56, 0x1e59, 0x1e58,
  17165     0x1e5b, 0x1e5a, 0x1e5d, 0x1e5c, 0x1e5f, 0x1e5e, 0x1e61, 0x1e60, 0x1e63,
  17166     0x1e62, 0x1e65, 0x1e64, 0x1e67, 0x1e66, 0x1e69, 0x1e68, 0x1e6b, 0x1e6a,
  17167     0x1e6d, 0x1e6c, 0x1e6f, 0x1e6e, 0x1e71, 0x1e70, 0x1e73, 0x1e72, 0x1e75,
  17168     0x1e74, 0x1e77, 0x1e76, 0x1e79, 0x1e78, 0x1e7b, 0x1e7a, 0x1e7d, 0x1e7c,
  17169     0x1e7f, 0x1e7e, 0x1e81, 0x1e80, 0x1e83, 0x1e82, 0x1e85, 0x1e84, 0x1e87,
  17170     0x1e86, 0x1e89, 0x1e88, 0x1e8b, 0x1e8a, 0x1e8d, 0x1e8c, 0x1e8f, 0x1e8e,
  17171     0x1e91, 0x1e90, 0x1e93, 0x1e92, 0x1e95, 0x1e94, 0x10000b6, 0x10000bf,
  17172     0x10000c8, 0x10000d1, 0x10000da, 0x1e60, 0x0000, 0x0000, 0x00df, 0x0000,
  17173     0x1ea1, 0x1ea0, 0x1ea3, 0x1ea2, 0x1ea5, 0x1ea4, 0x1ea7, 0x1ea6, 0x1ea9,
  17174     0x1ea8, 0x1eab, 0x1eaa, 0x1ead, 0x1eac, 0x1eaf, 0x1eae, 0x1eb1, 0x1eb0,
  17175     0x1eb3, 0x1eb2, 0x1eb5, 0x1eb4, 0x1eb7, 0x1eb6, 0x1eb9, 0x1eb8, 0x1ebb,
  17176     0x1eba, 0x1ebd, 0x1ebc, 0x1ebf, 0x1ebe, 0x1ec1, 0x1ec0, 0x1ec3, 0x1ec2,
  17177     0x1ec5, 0x1ec4, 0x1ec7, 0x1ec6, 0x1ec9, 0x1ec8, 0x1ecb, 0x1eca, 0x1ecd,
  17178     0x1ecc, 0x1ecf, 0x1ece, 0x1ed1, 0x1ed0, 0x1ed3, 0x1ed2, 0x1ed5, 0x1ed4,
  17179     0x1ed7, 0x1ed6, 0x1ed9, 0x1ed8, 0x1edb, 0x1eda, 0x1edd, 0x1edc, 0x1edf,
  17180     0x1ede, 0x1ee1, 0x1ee0, 0x1ee3, 0x1ee2, 0x1ee5, 0x1ee4, 0x1ee7, 0x1ee6,
  17181     0x1ee9, 0x1ee8, 0x1eeb, 0x1eea, 0x1eed, 0x1eec, 0x1eef, 0x1eee, 0x1ef1,
  17182     0x1ef0, 0x1ef3, 0x1ef2, 0x1ef5, 0x1ef4, 0x1ef7, 0x1ef6, 0x1ef9, 0x1ef8,
  17183     0x1efb, 0x1efa, 0x1efd, 0x1efc, 0x1eff, 0x1efe
  17184   },
  17185   { /* page 31, index 25 */
  17186     0x1f08, 0x1f09, 0x1f0a, 0x1f0b, 0x1f0c, 0x1f0d, 0x1f0e, 0x1f0f, 0x1f00,
  17187     0x1f01, 0x1f02, 0x1f03, 0x1f04, 0x1f05, 0x1f06, 0x1f07, 0x1f18, 0x1f19,
  17188     0x1f1a, 0x1f1b, 0x1f1c, 0x1f1d, 0x0000, 0x0000, 0x1f10, 0x1f11, 0x1f12,
  17189     0x1f13, 0x1f14, 0x1f15, 0x0000, 0x0000, 0x1f28, 0x1f29, 0x1f2a, 0x1f2b,
  17190     0x1f2c, 0x1f2d, 0x1f2e, 0x1f2f, 0x1f20, 0x1f21, 0x1f22, 0x1f23, 0x1f24,
  17191     0x1f25, 0x1f26, 0x1f27, 0x1f38, 0x1f39, 0x1f3a, 0x1f3b, 0x1f3c, 0x1f3d,
  17192     0x1f3e, 0x1f3f, 0x1f30, 0x1f31, 0x1f32, 0x1f33, 0x1f34, 0x1f35, 0x1f36,
  17193     0x1f37, 0x1f48, 0x1f49, 0x1f4a, 0x1f4b, 0x1f4c, 0x1f4d, 0x0000, 0x0000,
  17194     0x1f40, 0x1f41, 0x1f42, 0x1f43, 0x1f44, 0x1f45, 0x0000, 0x0000,
  17195     0x10000e3, 0x1f59, 0x10000ee, 0x1f5b, 0x10000fd, 0x1f5d, 0x100010c,
  17196     0x1f5f, 0x0000, 0x1f51, 0x0000, 0x1f53, 0x0000, 0x1f55, 0x0000, 0x1f57,
  17197     0x1f68, 0x1f69, 0x1f6a, 0x1f6b, 0x1f6c, 0x1f6d, 0x1f6e, 0x1f6f, 0x1f60,
  17198     0x1f61, 0x1f62, 0x1f63, 0x1f64, 0x1f65, 0x1f66, 0x1f67, 0x1fba, 0x1fbb,
  17199     0x1fc8, 0x1fc9, 0x1fca, 0x1fcb, 0x1fda, 0x1fdb, 0x1ff8, 0x1ff9, 0x1fea,
  17200     0x1feb, 0x1ffa, 0x1ffb, 0x0000, 0x0000, 0x10001b7, 0x10001c4, 0x10001d1,
  17201     0x10001de, 0x10001eb, 0x10001f8, 0x1000205, 0x1000212, 0x100021f,
  17202     0x1000229, 0x1000233, 0x100023d, 0x1000247, 0x1000251, 0x100025b,
  17203     0x1000265, 0x100026f, 0x100027c, 0x1000289, 0x1000296, 0x10002a3,
  17204     0x10002b0, 0x10002bd, 0x10002ca, 0x10002d7, 0x10002e1, 0x10002eb,
  17205     0x10002f5, 0x10002ff, 0x1000309, 0x1000313, 0x100031d, 0x1000327,
  17206     0x1000334, 0x1000341, 0x100034e, 0x100035b, 0x1000368, 0x1000375,
  17207     0x1000382, 0x100038f, 0x1000399, 0x10003a3, 0x10003ad, 0x10003b7,
  17208     0x10003c1, 0x10003cb, 0x10003d5, 0x1fb8, 0x1fb9, 0x100041e, 0x10003df,
  17209     0x100042b, 0x0000, 0x100011b, 0x1000466, 0x1fb0, 0x1fb1, 0x1f70, 0x1f71,
  17210     0x10003eb, 0x0000, 0x0399, 0x0000, 0x0000, 0x0000, 0x1000436, 0x10003f4,
  17211     0x1000443, 0x0000, 0x1000126, 0x1000475, 0x1f72, 0x1f73, 0x1f74, 0x1f75,
  17212     0x1000400, 0x0000, 0x0000, 0x0000, 0x1fd8, 0x1fd9, 0x1000131, 0x1000140,
  17213     0x0000, 0x0000, 0x100014f, 0x100015a, 0x1fd0, 0x1fd1, 0x1f76, 0x1f77,
  17214     0x0000, 0x0000, 0x0000, 0x0000, 0x1fe8, 0x1fe9, 0x1000169, 0x1000178,
  17215     0x1000187, 0x1fec, 0x1000192, 0x100019d, 0x1fe0, 0x1fe1, 0x1f7a, 0x1f7b,
  17216     0x1fe5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x100044e, 0x1000409,
  17217     0x100045b, 0x0000, 0x10001ac, 0x1000484, 0x1f78, 0x1f79, 0x1f7c, 0x1f7d,
  17218     0x1000415, 0x0000, 0x0000, 0x0000
  17219   },
  17220   { /* page 33, index 26 */
  17221     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17222     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17223     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17224     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17225     0x0000, 0x0000, 0x03c9, 0x0000, 0x0000, 0x0000, 0x006b, 0x00e5, 0x0000,
  17226     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x214e, 0x0000, 0x0000, 0x0000,
  17227     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17228     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17229     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2132, 0x0000, 0x0000,
  17230     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17231     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17232     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17233     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17234     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17235     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2184, 0x2183, 0x0000, 0x0000,
  17236     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17237     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17238     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17239     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17240     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17241     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17242     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17243     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17244     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17245     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17246     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17247     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17248     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17249     0x0000, 0x0000, 0x0000, 0x0000
  17250   },
  17251   { /* page 44, index 27 */
  17252     0x2c30, 0x2c31, 0x2c32, 0x2c33, 0x2c34, 0x2c35, 0x2c36, 0x2c37, 0x2c38,
  17253     0x2c39, 0x2c3a, 0x2c3b, 0x2c3c, 0x2c3d, 0x2c3e, 0x2c3f, 0x2c40, 0x2c41,
  17254     0x2c42, 0x2c43, 0x2c44, 0x2c45, 0x2c46, 0x2c47, 0x2c48, 0x2c49, 0x2c4a,
  17255     0x2c4b, 0x2c4c, 0x2c4d, 0x2c4e, 0x2c4f, 0x2c50, 0x2c51, 0x2c52, 0x2c53,
  17256     0x2c54, 0x2c55, 0x2c56, 0x2c57, 0x2c58, 0x2c59, 0x2c5a, 0x2c5b, 0x2c5c,
  17257     0x2c5d, 0x2c5e, 0x0000, 0x2c00, 0x2c01, 0x2c02, 0x2c03, 0x2c04, 0x2c05,
  17258     0x2c06, 0x2c07, 0x2c08, 0x2c09, 0x2c0a, 0x2c0b, 0x2c0c, 0x2c0d, 0x2c0e,
  17259     0x2c0f, 0x2c10, 0x2c11, 0x2c12, 0x2c13, 0x2c14, 0x2c15, 0x2c16, 0x2c17,
  17260     0x2c18, 0x2c19, 0x2c1a, 0x2c1b, 0x2c1c, 0x2c1d, 0x2c1e, 0x2c1f, 0x2c20,
  17261     0x2c21, 0x2c22, 0x2c23, 0x2c24, 0x2c25, 0x2c26, 0x2c27, 0x2c28, 0x2c29,
  17262     0x2c2a, 0x2c2b, 0x2c2c, 0x2c2d, 0x2c2e, 0x0000, 0x2c61, 0x2c60, 0x026b,
  17263     0x1d7d, 0x027d, 0x023a, 0x023e, 0x2c68, 0x2c67, 0x2c6a, 0x2c69, 0x2c6c,
  17264     0x2c6b, 0x0251, 0x0271, 0x0250, 0x0252, 0x0000, 0x2c73, 0x2c72, 0x0000,
  17265     0x2c76, 0x2c75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17266     0x023f, 0x0240, 0x2c81, 0x2c80, 0x2c83, 0x2c82, 0x2c85, 0x2c84, 0x2c87,
  17267     0x2c86, 0x2c89, 0x2c88, 0x2c8b, 0x2c8a, 0x2c8d, 0x2c8c, 0x2c8f, 0x2c8e,
  17268     0x2c91, 0x2c90, 0x2c93, 0x2c92, 0x2c95, 0x2c94, 0x2c97, 0x2c96, 0x2c99,
  17269     0x2c98, 0x2c9b, 0x2c9a, 0x2c9d, 0x2c9c, 0x2c9f, 0x2c9e, 0x2ca1, 0x2ca0,
  17270     0x2ca3, 0x2ca2, 0x2ca5, 0x2ca4, 0x2ca7, 0x2ca6, 0x2ca9, 0x2ca8, 0x2cab,
  17271     0x2caa, 0x2cad, 0x2cac, 0x2caf, 0x2cae, 0x2cb1, 0x2cb0, 0x2cb3, 0x2cb2,
  17272     0x2cb5, 0x2cb4, 0x2cb7, 0x2cb6, 0x2cb9, 0x2cb8, 0x2cbb, 0x2cba, 0x2cbd,
  17273     0x2cbc, 0x2cbf, 0x2cbe, 0x2cc1, 0x2cc0, 0x2cc3, 0x2cc2, 0x2cc5, 0x2cc4,
  17274     0x2cc7, 0x2cc6, 0x2cc9, 0x2cc8, 0x2ccb, 0x2cca, 0x2ccd, 0x2ccc, 0x2ccf,
  17275     0x2cce, 0x2cd1, 0x2cd0, 0x2cd3, 0x2cd2, 0x2cd5, 0x2cd4, 0x2cd7, 0x2cd6,
  17276     0x2cd9, 0x2cd8, 0x2cdb, 0x2cda, 0x2cdd, 0x2cdc, 0x2cdf, 0x2cde, 0x2ce1,
  17277     0x2ce0, 0x2ce3, 0x2ce2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17278     0x0000, 0x2cec, 0x2ceb, 0x2cee, 0x2ced, 0x0000, 0x0000, 0x0000, 0x2cf3,
  17279     0x2cf2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17280     0x0000, 0x0000, 0x0000, 0x0000
  17281   },
  17282   { /* page 45, index 28 */
  17283     0x10a0, 0x10a1, 0x10a2, 0x10a3, 0x10a4, 0x10a5, 0x10a6, 0x10a7, 0x10a8,
  17284     0x10a9, 0x10aa, 0x10ab, 0x10ac, 0x10ad, 0x10ae, 0x10af, 0x10b0, 0x10b1,
  17285     0x10b2, 0x10b3, 0x10b4, 0x10b5, 0x10b6, 0x10b7, 0x10b8, 0x10b9, 0x10ba,
  17286     0x10bb, 0x10bc, 0x10bd, 0x10be, 0x10bf, 0x10c0, 0x10c1, 0x10c2, 0x10c3,
  17287     0x10c4, 0x10c5, 0x0000, 0x10c7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17288     0x10cd, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17289     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17290     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17291     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17292     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17293     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17294     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17295     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17296     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17297     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17298     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17299     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17300     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17301     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17302     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17303     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17304     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17305     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17306     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17307     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17308     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17309     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17310     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17311     0x0000, 0x0000, 0x0000, 0x0000
  17312   },
  17313   { /* page 166, index 29 */
  17314     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17315     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17316     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17317     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003,
  17318     0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000,
  17319     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17320     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17321     0x0000, 0xa641, 0xa640, 0xa643, 0xa642, 0xa645, 0xa644, 0xa647, 0xa646,
  17322     0xa649, 0xa648, 0xa64b, 0xa64a, 0xa64d, 0xa64c, 0xa64f, 0xa64e, 0xa651,
  17323     0xa650, 0xa653, 0xa652, 0xa655, 0xa654, 0xa657, 0xa656, 0xa659, 0xa658,
  17324     0xa65b, 0xa65a, 0xa65d, 0xa65c, 0xa65f, 0xa65e, 0xa661, 0xa660, 0xa663,
  17325     0xa662, 0xa665, 0xa664, 0xa667, 0xa666, 0xa669, 0xa668, 0xa66b, 0xa66a,
  17326     0xa66d, 0xa66c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17327     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17328     0x0000, 0x0000, 0xa681, 0xa680, 0xa683, 0xa682, 0xa685, 0xa684, 0xa687,
  17329     0xa686, 0xa689, 0xa688, 0xa68b, 0xa68a, 0xa68d, 0xa68c, 0xa68f, 0xa68e,
  17330     0xa691, 0xa690, 0xa693, 0xa692, 0xa695, 0xa694, 0xa697, 0xa696, 0xa699,
  17331     0xa698, 0xa69b, 0xa69a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17332     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17333     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17334     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17335     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17336     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17337     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17338     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17339     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17340     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17341     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17342     0x0000, 0x0000, 0x0000, 0x0000
  17343   },
  17344   { /* page 167, index 30 */
  17345     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17346     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17347     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17348     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa723, 0xa722,
  17349     0xa725, 0xa724, 0xa727, 0xa726, 0xa729, 0xa728, 0xa72b, 0xa72a, 0xa72d,
  17350     0xa72c, 0xa72f, 0xa72e, 0x0000, 0x0000, 0xa733, 0xa732, 0xa735, 0xa734,
  17351     0xa737, 0xa736, 0xa739, 0xa738, 0xa73b, 0xa73a, 0xa73d, 0xa73c, 0xa73f,
  17352     0xa73e, 0xa741, 0xa740, 0xa743, 0xa742, 0xa745, 0xa744, 0xa747, 0xa746,
  17353     0xa749, 0xa748, 0xa74b, 0xa74a, 0xa74d, 0xa74c, 0xa74f, 0xa74e, 0xa751,
  17354     0xa750, 0xa753, 0xa752, 0xa755, 0xa754, 0xa757, 0xa756, 0xa759, 0xa758,
  17355     0xa75b, 0xa75a, 0xa75d, 0xa75c, 0xa75f, 0xa75e, 0xa761, 0xa760, 0xa763,
  17356     0xa762, 0xa765, 0xa764, 0xa767, 0xa766, 0xa769, 0xa768, 0xa76b, 0xa76a,
  17357     0xa76d, 0xa76c, 0xa76f, 0xa76e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17358     0x0000, 0x0000, 0x0000, 0x0000, 0xa77a, 0xa779, 0xa77c, 0xa77b, 0x1d79,
  17359     0xa77f, 0xa77e, 0xa781, 0xa780, 0xa783, 0xa782, 0xa785, 0xa784, 0xa787,
  17360     0xa786, 0x0000, 0x0000, 0x0000, 0xa78c, 0xa78b, 0x0265, 0x0000, 0x0000,
  17361     0xa791, 0xa790, 0xa793, 0xa792, 0x0000, 0x0000, 0xa797, 0xa796, 0xa799,
  17362     0xa798, 0xa79b, 0xa79a, 0xa79d, 0xa79c, 0xa79f, 0xa79e, 0xa7a1, 0xa7a0,
  17363     0xa7a3, 0xa7a2, 0xa7a5, 0xa7a4, 0xa7a7, 0xa7a6, 0xa7a9, 0xa7a8, 0x0266,
  17364     0x025c, 0x0261, 0x026c, 0x026a, 0x0000, 0x029e, 0x0287, 0x029d, 0xab53,
  17365     0xa7b5, 0xa7b4, 0xa7b7, 0xa7b6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17366     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17367     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17368     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17369     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17370     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17371     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17372     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17373     0x0000, 0x0000, 0x0000, 0x0000
  17374   },
  17375   { /* page 168, index 31 */
  17376     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17377     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17378     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17379     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17380     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17381     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17382     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17383     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17384     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17385     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17386     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17387     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17388     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17389     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17390     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17391     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17392     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17393     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17394     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17395     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17396     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17397     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17398     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17399     0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
  17400     0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17401     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17402     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17403     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17404     0x0000, 0x0000, 0x0000, 0x0000
  17405   },
  17406   { /* page 169, index 32 */
  17407     0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008,
  17408     0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17409     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17410     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17411     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17412     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17413     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17414     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17415     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17416     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17417     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17418     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17419     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17420     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17421     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17422     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17423     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17424     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17425     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17426     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17427     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17428     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17429     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17430     0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
  17431     0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17432     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17433     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002,
  17434     0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000,
  17435     0x0000, 0x0000, 0x0000, 0x0000
  17436   },
  17437   { /* page 170, index 33 */
  17438     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17439     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17440     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17441     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17442     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17443     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17444     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17445     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17446     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17447     0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009,
  17448     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17449     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17450     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17451     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17452     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17453     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17454     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17455     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17456     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17457     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17458     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17459     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17460     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17461     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17462     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17463     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17464     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17465     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17466     0x0000, 0x0000, 0x0000, 0x0000
  17467   },
  17468   { /* page 171, index 34 */
  17469     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17470     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17471     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17472     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17473     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17474     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17475     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17476     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17477     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17478     0x0000, 0x0000, 0xa7b3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17479     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17480     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17481     0x0000, 0x0000, 0x0000, 0x0000, 0x13a0, 0x13a1, 0x13a2, 0x13a3, 0x13a4,
  17482     0x13a5, 0x13a6, 0x13a7, 0x13a8, 0x13a9, 0x13aa, 0x13ab, 0x13ac, 0x13ad,
  17483     0x13ae, 0x13af, 0x13b0, 0x13b1, 0x13b2, 0x13b3, 0x13b4, 0x13b5, 0x13b6,
  17484     0x13b7, 0x13b8, 0x13b9, 0x13ba, 0x13bb, 0x13bc, 0x13bd, 0x13be, 0x13bf,
  17485     0x13c0, 0x13c1, 0x13c2, 0x13c3, 0x13c4, 0x13c5, 0x13c6, 0x13c7, 0x13c8,
  17486     0x13c9, 0x13ca, 0x13cb, 0x13cc, 0x13cd, 0x13ce, 0x13cf, 0x13d0, 0x13d1,
  17487     0x13d2, 0x13d3, 0x13d4, 0x13d5, 0x13d6, 0x13d7, 0x13d8, 0x13d9, 0x13da,
  17488     0x13db, 0x13dc, 0x13dd, 0x13de, 0x13df, 0x13e0, 0x13e1, 0x13e2, 0x13e3,
  17489     0x13e4, 0x13e5, 0x13e6, 0x13e7, 0x13e8, 0x13e9, 0x13ea, 0x13eb, 0x13ec,
  17490     0x13ed, 0x13ee, 0x13ef, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17491     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17492     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17493     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17494     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17495     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002,
  17496     0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000,
  17497     0x0000, 0x0000, 0x0000, 0x0000
  17498   },
  17499   { /* page 251, index 35 */
  17500     0x100000f, 0x1000016, 0x100001d, 0x1000024, 0x100002d, 0x1000036,
  17501     0x100003d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17502     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x100004f, 0x100005a, 0x1000065,
  17503     0x1000070, 0x100007b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17504     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17505     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17506     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17507     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17508     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17509     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17510     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17511     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17512     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17513     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17514     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17515     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17516     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17517     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17518     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17519     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17520     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17521     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17522     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17523     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17524     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17525     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17526     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17527     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17528     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17529     0x0000
  17530   },
  17531   { /* page 255, index 36 */
  17532     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17533     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001,
  17534     0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000,
  17535     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xff41, 0xff42, 0xff43,
  17536     0xff44, 0xff45, 0xff46, 0xff47, 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c,
  17537     0xff4d, 0xff4e, 0xff4f, 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55,
  17538     0xff56, 0xff57, 0xff58, 0xff59, 0xff5a, 0x0000, 0x0000, 0x0000, 0x0000,
  17539     0x0000, 0x0000, 0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27,
  17540     0xff28, 0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30,
  17541     0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38, 0xff39,
  17542     0xff3a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17543     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17544     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17545     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17546     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17547     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17548     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17549     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17550     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17551     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17552     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17553     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17554     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17555     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17556     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17557     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17558     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17559     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17560     0x0000, 0x0000, 0x0000, 0x0000
  17561   },
  17562   { /* page 260, index 37 */
  17563     0x10428, 0x10429, 0x1042a, 0x1042b, 0x1042c, 0x1042d, 0x1042e, 0x1042f,
  17564     0x10430, 0x10431, 0x10432, 0x10433, 0x10434, 0x10435, 0x10436, 0x10437,
  17565     0x10438, 0x10439, 0x1043a, 0x1043b, 0x1043c, 0x1043d, 0x1043e, 0x1043f,
  17566     0x10440, 0x10441, 0x10442, 0x10443, 0x10444, 0x10445, 0x10446, 0x10447,
  17567     0x10448, 0x10449, 0x1044a, 0x1044b, 0x1044c, 0x1044d, 0x1044e, 0x1044f,
  17568     0x10400, 0x10401, 0x10402, 0x10403, 0x10404, 0x10405, 0x10406, 0x10407,
  17569     0x10408, 0x10409, 0x1040a, 0x1040b, 0x1040c, 0x1040d, 0x1040e, 0x1040f,
  17570     0x10410, 0x10411, 0x10412, 0x10413, 0x10414, 0x10415, 0x10416, 0x10417,
  17571     0x10418, 0x10419, 0x1041a, 0x1041b, 0x1041c, 0x1041d, 0x1041e, 0x1041f,
  17572     0x10420, 0x10421, 0x10422, 0x10423, 0x10424, 0x10425, 0x10426, 0x10427,
  17573     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17574     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17575     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17576     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17577     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17578     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17579     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17580     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17581     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17582     0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009,
  17583     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x104d8, 0x104d9,
  17584     0x104da, 0x104db, 0x104dc, 0x104dd, 0x104de, 0x104df, 0x104e0, 0x104e1,
  17585     0x104e2, 0x104e3, 0x104e4, 0x104e5, 0x104e6, 0x104e7, 0x104e8, 0x104e9,
  17586     0x104ea, 0x104eb, 0x104ec, 0x104ed, 0x104ee, 0x104ef, 0x104f0, 0x104f1,
  17587     0x104f2, 0x104f3, 0x104f4, 0x104f5, 0x104f6, 0x104f7, 0x104f8, 0x104f9,
  17588     0x104fa, 0x104fb, 0x0000, 0x0000, 0x0000, 0x0000, 0x104b0, 0x104b1,
  17589     0x104b2, 0x104b3, 0x104b4, 0x104b5, 0x104b6, 0x104b7, 0x104b8, 0x104b9,
  17590     0x104ba, 0x104bb, 0x104bc, 0x104bd, 0x104be, 0x104bf, 0x104c0, 0x104c1,
  17591     0x104c2, 0x104c3, 0x104c4, 0x104c5, 0x104c6, 0x104c7, 0x104c8, 0x104c9,
  17592     0x104ca, 0x104cb, 0x104cc, 0x104cd, 0x104ce, 0x104cf, 0x104d0, 0x104d1,
  17593     0x104d2, 0x104d3, 0x0000, 0x0000, 0x0000, 0x0000
  17594   },
  17595   { /* page 268, index 38 */
  17596     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17597     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17598     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17599     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17600     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17601     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17602     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17603     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17604     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17605     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17606     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17607     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17608     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17609     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17610     0x0000, 0x0000, 0x10cc0, 0x10cc1, 0x10cc2, 0x10cc3, 0x10cc4, 0x10cc5,
  17611     0x10cc6, 0x10cc7, 0x10cc8, 0x10cc9, 0x10cca, 0x10ccb, 0x10ccc, 0x10ccd,
  17612     0x10cce, 0x10ccf, 0x10cd0, 0x10cd1, 0x10cd2, 0x10cd3, 0x10cd4, 0x10cd5,
  17613     0x10cd6, 0x10cd7, 0x10cd8, 0x10cd9, 0x10cda, 0x10cdb, 0x10cdc, 0x10cdd,
  17614     0x10cde, 0x10cdf, 0x10ce0, 0x10ce1, 0x10ce2, 0x10ce3, 0x10ce4, 0x10ce5,
  17615     0x10ce6, 0x10ce7, 0x10ce8, 0x10ce9, 0x10cea, 0x10ceb, 0x10cec, 0x10ced,
  17616     0x10cee, 0x10cef, 0x10cf0, 0x10cf1, 0x10cf2, 0x0000, 0x0000, 0x0000,
  17617     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17618     0x0000, 0x10c80, 0x10c81, 0x10c82, 0x10c83, 0x10c84, 0x10c85, 0x10c86,
  17619     0x10c87, 0x10c88, 0x10c89, 0x10c8a, 0x10c8b, 0x10c8c, 0x10c8d, 0x10c8e,
  17620     0x10c8f, 0x10c90, 0x10c91, 0x10c92, 0x10c93, 0x10c94, 0x10c95, 0x10c96,
  17621     0x10c97, 0x10c98, 0x10c99, 0x10c9a, 0x10c9b, 0x10c9c, 0x10c9d, 0x10c9e,
  17622     0x10c9f, 0x10ca0, 0x10ca1, 0x10ca2, 0x10ca3, 0x10ca4, 0x10ca5, 0x10ca6,
  17623     0x10ca7, 0x10ca8, 0x10ca9, 0x10caa, 0x10cab, 0x10cac, 0x10cad, 0x10cae,
  17624     0x10caf, 0x10cb0, 0x10cb1, 0x10cb2, 0x0000, 0x0000, 0x0000, 0x0000,
  17625     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
  17626   },
  17627   { /* page 272, index 39 */
  17628     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17629     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17630     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17631     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17632     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17633     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17634     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17635     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17636     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17637     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17638     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17639     0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005,
  17640     0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17641     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17642     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17643     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17644     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17645     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17646     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17647     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17648     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17649     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17650     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17651     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17652     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17653     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17654     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002,
  17655     0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000,
  17656     0x0000, 0x0000, 0x0000, 0x0000
  17657   },
  17658   { /* page 273, index 40 */
  17659     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17660     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17661     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17662     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17663     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17664     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17665     0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008,
  17666     0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17667     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17668     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17669     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17670     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17671     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17672     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17673     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17674     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17675     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17676     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17677     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17678     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17679     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17680     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17681     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17682     0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
  17683     0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17684     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17685     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17686     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17687     0x0000, 0x0000, 0x0000, 0x0000
  17688   },
  17689   { /* page 274, index 41 */
  17690     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17691     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17692     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17693     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17694     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17695     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17696     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17697     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17698     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17699     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17700     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17701     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17702     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17703     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17704     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17705     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17706     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17707     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17708     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17709     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17710     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17711     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17712     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17713     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17714     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17715     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17716     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002,
  17717     0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000,
  17718     0x0000, 0x0000, 0x0000, 0x0000
  17719   },
  17720   { /* page 276, index 42 */
  17721     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17722     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17723     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17724     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17725     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17726     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17727     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17728     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17729     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17730     0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009,
  17731     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17732     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17733     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17734     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17735     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17736     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17737     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17738     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17739     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17740     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17741     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17742     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17743     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17744     0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
  17745     0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17746     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17747     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17748     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17749     0x0000, 0x0000, 0x0000, 0x0000
  17750   },
  17751   { /* page 278, index 43 */
  17752     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17753     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17754     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17755     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17756     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17757     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17758     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17759     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17760     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17761     0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009,
  17762     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17763     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17764     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17765     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17766     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17767     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17768     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17769     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17770     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17771     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17772     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17773     0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005,
  17774     0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17775     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17776     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17777     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17778     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17779     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17780     0x0000, 0x0000, 0x0000, 0x0000
  17781   },
  17782   { /* page 279, index 44 */
  17783     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17784     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17785     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17786     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17787     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17788     0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005,
  17789     0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17790     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17791     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17792     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17793     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17794     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17795     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17796     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17797     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17798     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17799     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17800     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17801     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17802     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17803     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17804     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17805     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17806     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17807     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17808     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17809     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17810     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17811     0x0000, 0x0000, 0x0000, 0x0000
  17812   },
  17813   { /* page 280, index 45 */
  17814     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17815     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17816     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17817     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17818     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17819     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17820     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17821     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17822     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17823     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17824     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17825     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17826     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17827     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17828     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17829     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17830     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17831     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x118c0, 0x118c1,
  17832     0x118c2, 0x118c3, 0x118c4, 0x118c5, 0x118c6, 0x118c7, 0x118c8, 0x118c9,
  17833     0x118ca, 0x118cb, 0x118cc, 0x118cd, 0x118ce, 0x118cf, 0x118d0, 0x118d1,
  17834     0x118d2, 0x118d3, 0x118d4, 0x118d5, 0x118d6, 0x118d7, 0x118d8, 0x118d9,
  17835     0x118da, 0x118db, 0x118dc, 0x118dd, 0x118de, 0x118df, 0x118a0, 0x118a1,
  17836     0x118a2, 0x118a3, 0x118a4, 0x118a5, 0x118a6, 0x118a7, 0x118a8, 0x118a9,
  17837     0x118aa, 0x118ab, 0x118ac, 0x118ad, 0x118ae, 0x118af, 0x118b0, 0x118b1,
  17838     0x118b2, 0x118b3, 0x118b4, 0x118b5, 0x118b6, 0x118b7, 0x118b8, 0x118b9,
  17839     0x118ba, 0x118bb, 0x118bc, 0x118bd, 0x118be, 0x118bf, 0x0000, 0x0001,
  17840     0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000,
  17841     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17842     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17843     0x0000, 0x0000, 0x0000
  17844   },
  17845   { /* page 284, index 46 */
  17846     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17847     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17848     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17849     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17850     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17851     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17852     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17853     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17854     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17855     0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009,
  17856     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17857     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17858     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17859     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17860     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17861     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17862     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17863     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17864     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17865     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17866     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17867     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17868     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17869     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17870     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17871     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17872     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17873     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17874     0x0000, 0x0000, 0x0000, 0x0000
  17875   },
  17876   { /* page 285, index 47 */
  17877     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17878     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17879     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17880     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17881     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17882     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17883     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17884     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17885     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17886     0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009,
  17887     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17888     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17889     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17890     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17891     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17892     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17893     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17894     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17895     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17896     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17897     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17898     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17899     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17900     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17901     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17902     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17903     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17904     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17905     0x0000, 0x0000, 0x0000, 0x0000
  17906   },
  17907   { /* page 362, index 48 */
  17908     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17909     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17910     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17911     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17912     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17913     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17914     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17915     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17916     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17917     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17918     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002,
  17919     0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000,
  17920     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17921     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17922     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17923     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17924     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17925     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17926     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17927     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17928     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17929     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17930     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17931     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17932     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17933     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17934     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17935     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17936     0x0000, 0x0000, 0x0000, 0x0000
  17937   },
  17938   { /* page 363, index 49 */
  17939     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17940     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17941     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17942     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17943     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17944     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17945     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17946     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17947     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17948     0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009,
  17949     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17950     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17951     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17952     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17953     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17954     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17955     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17956     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17957     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17958     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17959     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17960     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17961     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17962     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17963     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17964     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17965     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17966     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17967     0x0000, 0x0000, 0x0000, 0x0000
  17968   },
  17969   { /* page 471, index 50 */
  17970     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17971     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17972     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17973     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17974     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17975     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17976     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17977     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17978     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17979     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17980     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17981     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17982     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17983     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17984     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17985     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17986     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17987     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17988     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17989     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17990     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17991     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17992     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  17993     0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009,
  17994     0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008,
  17995     0x0009, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
  17996     0x0008, 0x0009, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006,
  17997     0x0007, 0x0008, 0x0009, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005,
  17998     0x0006, 0x0007, 0x0008, 0x0009
  17999   },
  18000   { /* page 489, index 51 */
  18001     0x1e922, 0x1e923, 0x1e924, 0x1e925, 0x1e926, 0x1e927, 0x1e928, 0x1e929,
  18002     0x1e92a, 0x1e92b, 0x1e92c, 0x1e92d, 0x1e92e, 0x1e92f, 0x1e930, 0x1e931,
  18003     0x1e932, 0x1e933, 0x1e934, 0x1e935, 0x1e936, 0x1e937, 0x1e938, 0x1e939,
  18004     0x1e93a, 0x1e93b, 0x1e93c, 0x1e93d, 0x1e93e, 0x1e93f, 0x1e940, 0x1e941,
  18005     0x1e942, 0x1e943, 0x1e900, 0x1e901, 0x1e902, 0x1e903, 0x1e904, 0x1e905,
  18006     0x1e906, 0x1e907, 0x1e908, 0x1e909, 0x1e90a, 0x1e90b, 0x1e90c, 0x1e90d,
  18007     0x1e90e, 0x1e90f, 0x1e910, 0x1e911, 0x1e912, 0x1e913, 0x1e914, 0x1e915,
  18008     0x1e916, 0x1e917, 0x1e918, 0x1e919, 0x1e91a, 0x1e91b, 0x1e91c, 0x1e91d,
  18009     0x1e91e, 0x1e91f, 0x1e920, 0x1e921, 0x0000, 0x0000, 0x0000, 0x0000,
  18010     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18011     0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009,
  18012     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18013     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18014     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18015     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18016     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18017     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18018     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18019     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18020     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18021     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18022     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18023     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18024     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18025     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18026     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18027     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18028     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18029     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  18030     0x0000, 0x0000, 0x0000, 0x0000
  18031   }
  18032 };
  18033 
  18034 /* U+0000 through U+2FAFF */
  18035 static const int16_t attr_table_part1[763] = {
  18036   0 /* page 0 */,
  18037   1 /* page 1 */,
  18038   2 /* page 2 */,
  18039   3 /* page 3 */,
  18040   4 /* page 4 */,
  18041   5 /* page 5 */,
  18042   6 /* page 6 */,
  18043   7 /* page 7 */,
  18044   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18045   8 /* page 9 */,
  18046   9 /* page 10 */,
  18047   10 /* page 11 */,
  18048   11 /* page 12 */,
  18049   12 /* page 13 */,
  18050   13 /* page 14 */,
  18051   14 /* page 15 */,
  18052   15 /* page 16 */,
  18053   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18054   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18055   16 /* page 19 */,
  18056   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18057   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18058   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18059   17 /* page 23 */,
  18060   18 /* page 24 */,
  18061   19 /* page 25 */,
  18062   20 /* page 26 */,
  18063   21 /* page 27 */,
  18064   22 /* page 28 */,
  18065   23 /* page 29 */,
  18066   24 /* page 30 */,
  18067   25 /* page 31 */,
  18068   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18069   26 /* page 33 */,
  18070   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18071   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18072   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18073   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18074   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18075   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18076   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18077   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18078   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18079   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18080   27 /* page 44 */,
  18081   28 /* page 45 */,
  18082   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18083   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18084   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18085   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18086   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18087   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18088   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18089   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18090   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18091   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18092   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18093   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18094   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18095   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18096   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18097   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18098   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18099   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18100   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18101   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18102   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18103   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18104   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18105   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18106   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18107   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18108   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18109   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18110   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18111   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18112   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18113   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18114   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18115   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18116   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18117   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18118   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18119   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18120   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18121   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18122   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18123   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18124   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18125   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18126   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18127   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18128   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18129   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18130   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18131   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18132   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18133   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18134   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18135   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18136   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18137   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18138   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18139   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18140   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18141   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18142   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18143   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18144   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18145   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18146   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18147   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18148   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18149   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18150   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18151   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18152   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18153   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18154   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18155   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18156   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18157   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18158   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18159   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18160   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18161   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18162   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18163   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18164   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18165   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18166   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18167   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18168   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18169   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18170   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18171   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18172   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18173   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18174   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18175   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18176   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18177   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18178   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18179   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18180   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18181   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18182   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18183   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18184   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18185   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18186   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18187   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18188   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18189   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18190   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18191   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18192   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18193   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18194   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18195   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18196   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18197   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18198   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18199   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18200   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18201   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18202   29 /* page 166 */,
  18203   30 /* page 167 */,
  18204   31 /* page 168 */,
  18205   32 /* page 169 */,
  18206   33 /* page 170 */,
  18207   34 /* page 171 */,
  18208   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18209   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18210   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18211   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18212   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18213   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18214   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18215   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18216   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18217   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18218   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18219   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18220   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18221   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18222   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18223   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18224   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18225   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18226   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18227   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18228   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18229   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18230   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18231   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18232   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18233   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18234   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18235   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18236   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18237   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18238   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18239   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18240   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18241   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18242   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18243   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18244   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18245   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18246   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18247   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18248   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18249   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18250   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18251   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18252   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18253   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18254   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18255   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18256   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18257   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18258   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18259   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18260   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18261   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18262   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18263   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18264   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18265   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18266   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18267   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18268   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18269   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18270   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18271   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18272   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18273   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18274   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18275   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18276   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18277   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18278   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18279   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18280   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18281   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18282   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18283   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18284   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18285   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18286   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18287   35 /* page 251 */,
  18288   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18289   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18290   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18291   36 /* page 255 */,
  18292   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18293   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18294   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18295   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18296   37 /* page 260 */,
  18297   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18298   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18299   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18300   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18301   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18302   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18303   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18304   38 /* page 268 */,
  18305   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18306   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18307   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18308   39 /* page 272 */,
  18309   40 /* page 273 */,
  18310   41 /* page 274 */,
  18311   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18312   42 /* page 276 */,
  18313   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18314   43 /* page 278 */,
  18315   44 /* page 279 */,
  18316   45 /* page 280 */,
  18317   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18318   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18319   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18320   46 /* page 284 */,
  18321   47 /* page 285 */,
  18322   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18323   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18324   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18325   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18326   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18327   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18328   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18329   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18330   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18331   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18332   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18333   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18334   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18335   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18336   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18337   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18338   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18339   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18340   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18341   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18342   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18343   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18344   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18345   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18346   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18347   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18348   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18349   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18350   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18351   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18352   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18353   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18354   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18355   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18356   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18357   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18358   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18359   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18360   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18361   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18362   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18363   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18364   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18365   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18366   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18367   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18368   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18369   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18370   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18371   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18372   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18373   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18374   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18375   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18376   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18377   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18378   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18379   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18380   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18381   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18382   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18383   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18384   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18385   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18386   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18387   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18388   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18389   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18390   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18391   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18392   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18393   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18394   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18395   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18396   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18397   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18398   48 /* page 362 */,
  18399   49 /* page 363 */,
  18400   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18401   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18402   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18403   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18404   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18405   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18406   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18407   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18408   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18409   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18410   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18411   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18412   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18413   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18414   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18415   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18416   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18417   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18418   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18419   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18420   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18421   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18422   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18423   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18424   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18425   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18426   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18427   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18428   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18429   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18430   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18431   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18432   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18433   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18434   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18435   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18436   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18437   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18438   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18439   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18440   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18441   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18442   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18443   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18444   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18445   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18446   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18447   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18448   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18449   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18450   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18451   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18452   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18453   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18454   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18455   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18456   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18457   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18458   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18459   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18460   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18461   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18462   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18463   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18464   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18465   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18466   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18467   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18468   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18469   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18470   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18471   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18472   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18473   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18474   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18475   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18476   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18477   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18478   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18479   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18480   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18481   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18482   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18483   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18484   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18485   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18486   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18487   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18488   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18489   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18490   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18491   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18492   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18493   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18494   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18495   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18496   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18497   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18498   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18499   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18500   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18501   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18502   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18503   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18504   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18505   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18506   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18507   50 /* page 471 */,
  18508   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18509   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18510   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18511   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18512   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18513   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18514   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18515   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18516   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18517   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18518   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18519   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18520   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18521   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18522   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18523   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18524   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18525   51 /* page 489 */,
  18526   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18527   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18528   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18529   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18530   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18531   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18532   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18533   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18534   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18535   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18536   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18537   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18538   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18539   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18540   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18541   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18542   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18543   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18544   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18545   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18546   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18547   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18548   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18549   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18550   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18551   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18552   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18553   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18554   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18555   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18556   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18557   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18558   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18559   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18560   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18561   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18562   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18563   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18564   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18565   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18566   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18567   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18568   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18569   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18570   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18571   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18572   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18573   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18574   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18575   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18576   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18577   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18578   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18579   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18580   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18581   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18582   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18583   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18584   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18585   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18586   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18587   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18588   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18589   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18590   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18591   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18592   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18593   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18594   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18595   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18596   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18597   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18598   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18599   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18600   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18601   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18602   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18603   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18604   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18605   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18606   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18607   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18608   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18609   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18610   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18611   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18612   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18613   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18614   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18615   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18616   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18617   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18618   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18619   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18620   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18621   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18622   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18623   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18624   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18625   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18626   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18627   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18628   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18629   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18630   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18631   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18632   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18633   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18634   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18635   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18636   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18637   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18638   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18639   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18640   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18641   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18642   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18643   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18644   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18645   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18646   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18647   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18648   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18649   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18650   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18651   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18652   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18653   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18654   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18655   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18656   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18657   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18658   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18659   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18660   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18661   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18662   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18663   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18664   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18665   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18666   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18667   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18668   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18669   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18670   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18671   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18672   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18673   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18674   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18675   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18676   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18677   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18678   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18679   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18680   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18681   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18682   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18683   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18684   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18685   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18686   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18687   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18688   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18689   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18690   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18691   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18692   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18693   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18694   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18695   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18696   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18697   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18698   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18699   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18700   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18701   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18702   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18703   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18704   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18705   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18706   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18707   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18708   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18709   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18710   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18711   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18712   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18713   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18714   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18715   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18716   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18717   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18718   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18719   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18720   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18721   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18722   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18723   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18724   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18725   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18726   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18727   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18728   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18729   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18730   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18731   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18732   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18733   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18734   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18735   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18736   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18737   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18738   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18739   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18740   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18741   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18742   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18743   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18744   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18745   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18746   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18747   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18748   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18749   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18750   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18751   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18752   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18753   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18754   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18755   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18756   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18757   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18758   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18759   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18760   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18761   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18762   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18763   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18764   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18765   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18766   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18767   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18768   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18769   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18770   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18771   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18772   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18773   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18774   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18775   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18776   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18777   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18778   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18779   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18780   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18781   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18782   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18783   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18784   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18785   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18786   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18787   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18788   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18789   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18790   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18791   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18792   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18793   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18794   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18795   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18796   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18797   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18798   0x0000 + UNICODE_MAX_TABLE_INDEX
  18799 };
  18800 
  18801 /* U+E0000 through U+10FFFF */
  18802 static const int16_t attr_table_part2[768] = {
  18803   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18804   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18805   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18806   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18807   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18808   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18809   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18810   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18811   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18812   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18813   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18814   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18815   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18816   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18817   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18818   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18819   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18820   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18821   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18822   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18823   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18824   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18825   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18826   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18827   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18828   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18829   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18830   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18831   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18832   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18833   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18834   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18835   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18836   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18837   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18838   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18839   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18840   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18841   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18842   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18843   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18844   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18845   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18846   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18847   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18848   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18849   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18850   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18851   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18852   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18853   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18854   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18855   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18856   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18857   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18858   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18859   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18860   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18861   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18862   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18863   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18864   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18865   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18866   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18867   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18868   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18869   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18870   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18871   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18872   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18873   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18874   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18875   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18876   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18877   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18878   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18879   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18880   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18881   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18882   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18883   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18884   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18885   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18886   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18887   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18888   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18889   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18890   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18891   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18892   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18893   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18894   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18895   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18896   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18897   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18898   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18899   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18900   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18901   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18902   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18903   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18904   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18905   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18906   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18907   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18908   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18909   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18910   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18911   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18912   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18913   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18914   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18915   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18916   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18917   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18918   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18919   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18920   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18921   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18922   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18923   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18924   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18925   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18926   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18927   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18928   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18929   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18930   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18931   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18932   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18933   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18934   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18935   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18936   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18937   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18938   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18939   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18940   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18941   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18942   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18943   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18944   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18945   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18946   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18947   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18948   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18949   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18950   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18951   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18952   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18953   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18954   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18955   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18956   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18957   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18958   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18959   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18960   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18961   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18962   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18963   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18964   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18965   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18966   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18967   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18968   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18969   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18970   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18971   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18972   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18973   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18974   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18975   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18976   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18977   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18978   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18979   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18980   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18981   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18982   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18983   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18984   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18985   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18986   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18987   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18988   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18989   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18990   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18991   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18992   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18993   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18994   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18995   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18996   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18997   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18998   0x0000 + UNICODE_MAX_TABLE_INDEX,
  18999   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19000   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19001   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19002   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19003   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19004   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19005   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19006   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19007   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19008   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19009   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19010   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19011   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19012   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19013   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19014   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19015   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19016   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19017   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19018   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19019   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19020   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19021   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19022   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19023   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19024   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19025   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19026   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19027   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19028   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19029   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19030   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19031   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19032   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19033   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19034   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19035   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19036   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19037   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19038   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19039   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19040   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19041   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19042   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19043   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19044   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19045   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19046   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19047   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19048   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19049   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19050   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19051   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19052   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19053   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19054   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19055   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19056   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19057   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19058   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19059   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19060   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19061   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19062   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19063   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19064   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19065   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19066   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19067   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19068   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19069   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19070   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19071   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19072   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19073   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19074   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19075   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19076   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19077   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19078   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19079   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19080   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19081   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19082   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19083   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19084   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19085   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19086   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19087   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19088   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19089   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19090   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19091   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19092   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19093   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19094   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19095   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19096   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19097   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19098   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19099   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19100   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19101   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19102   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19103   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19104   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19105   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19106   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19107   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19108   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19109   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19110   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19111   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19112   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19113   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19114   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19115   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19116   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19117   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19118   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19119   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19120   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19121   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19122   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19123   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19124   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19125   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19126   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19127   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19128   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19129   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19130   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19131   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19132   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19133   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19134   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19135   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19136   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19137   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19138   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19139   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19140   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19141   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19142   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19143   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19144   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19145   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19146   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19147   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19148   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19149   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19150   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19151   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19152   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19153   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19154   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19155   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19156   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19157   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19158   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19159   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19160   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19161   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19162   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19163   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19164   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19165   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19166   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19167   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19168   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19169   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19170   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19171   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19172   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19173   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19174   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19175   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19176   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19177   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19178   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19179   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19180   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19181   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19182   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19183   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19184   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19185   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19186   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19187   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19188   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19189   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19190   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19191   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19192   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19193   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19194   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19195   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19196   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19197   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19198   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19199   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19200   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19201   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19202   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19203   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19204   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19205   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19206   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19207   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19208   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19209   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19210   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19211   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19212   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19213   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19214   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19215   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19216   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19217   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19218   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19219   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19220   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19221   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19222   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19223   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19224   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19225   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19226   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19227   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19228   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19229   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19230   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19231   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19232   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19233   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19234   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19235   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19236   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19237   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19238   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19239   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19240   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19241   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19242   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19243   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19244   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19245   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19246   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19247   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19248   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19249   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19250   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19251   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19252   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19253   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19254   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19255   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19256   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19257   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19258   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19259   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19260   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19261   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19262   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19263   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19264   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19265   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19266   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19267   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19268   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19269   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19270   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19271   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19272   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19273   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19274   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19275   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19276   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19277   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19278   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19279   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19280   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19281   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19282   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19283   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19284   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19285   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19286   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19287   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19288   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19289   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19290   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19291   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19292   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19293   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19294   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19295   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19296   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19297   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19298   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19299   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19300   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19301   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19302   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19303   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19304   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19305   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19306   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19307   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19308   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19309   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19310   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19311   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19312   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19313   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19314   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19315   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19316   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19317   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19318   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19319   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19320   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19321   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19322   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19323   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19324   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19325   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19326   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19327   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19328   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19329   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19330   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19331   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19332   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19333   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19334   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19335   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19336   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19337   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19338   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19339   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19340   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19341   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19342   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19343   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19344   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19345   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19346   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19347   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19348   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19349   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19350   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19351   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19352   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19353   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19354   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19355   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19356   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19357   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19358   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19359   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19360   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19361   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19362   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19363   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19364   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19365   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19366   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19367   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19368   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19369   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19370   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19371   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19372   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19373   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19374   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19375   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19376   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19377   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19378   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19379   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19380   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19381   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19382   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19383   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19384   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19385   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19386   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19387   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19388   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19389   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19390   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19391   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19392   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19393   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19394   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19395   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19396   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19397   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19398   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19399   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19400   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19401   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19402   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19403   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19404   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19405   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19406   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19407   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19408   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19409   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19410   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19411   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19412   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19413   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19414   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19415   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19416   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19417   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19418   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19419   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19420   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19421   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19422   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19423   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19424   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19425   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19426   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19427   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19428   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19429   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19430   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19431   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19432   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19433   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19434   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19435   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19436   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19437   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19438   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19439   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19440   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19441   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19442   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19443   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19444   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19445   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19446   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19447   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19448   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19449   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19450   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19451   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19452   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19453   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19454   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19455   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19456   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19457   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19458   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19459   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19460   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19461   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19462   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19463   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19464   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19465   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19466   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19467   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19468   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19469   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19470   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19471   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19472   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19473   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19474   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19475   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19476   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19477   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19478   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19479   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19480   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19481   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19482   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19483   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19484   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19485   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19486   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19487   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19488   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19489   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19490   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19491   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19492   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19493   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19494   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19495   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19496   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19497   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19498   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19499   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19500   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19501   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19502   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19503   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19504   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19505   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19506   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19507   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19508   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19509   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19510   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19511   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19512   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19513   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19514   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19515   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19516   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19517   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19518   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19519   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19520   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19521   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19522   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19523   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19524   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19525   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19526   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19527   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19528   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19529   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19530   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19531   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19532   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19533   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19534   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19535   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19536   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19537   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19538   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19539   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19540   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19541   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19542   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19543   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19544   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19545   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19546   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19547   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19548   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19549   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19550   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19551   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19552   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19553   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19554   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19555   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19556   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19557   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19558   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19559   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19560   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19561   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19562   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19563   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19564   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19565   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19566   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19567   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19568   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19569   0x0000 + UNICODE_MAX_TABLE_INDEX,
  19570   0x0000 + UNICODE_MAX_TABLE_INDEX
  19571 };
  19572 
  19573 static const rune title_table[][3] = {
  19574   { 0x01c5, 0x01c4, 0x01c6 },
  19575   { 0x01c8, 0x01c7, 0x01c9 },
  19576   { 0x01cb, 0x01ca, 0x01cc },
  19577   { 0x01f2, 0x01f1, 0x01f3 },
  19578   { 0x1f88, 0x0000, 0x1f80 },
  19579   { 0x1f89, 0x0000, 0x1f81 },
  19580   { 0x1f8a, 0x0000, 0x1f82 },
  19581   { 0x1f8b, 0x0000, 0x1f83 },
  19582   { 0x1f8c, 0x0000, 0x1f84 },
  19583   { 0x1f8d, 0x0000, 0x1f85 },
  19584   { 0x1f8e, 0x0000, 0x1f86 },
  19585   { 0x1f8f, 0x0000, 0x1f87 },
  19586   { 0x1f98, 0x0000, 0x1f90 },
  19587   { 0x1f99, 0x0000, 0x1f91 },
  19588   { 0x1f9a, 0x0000, 0x1f92 },
  19589   { 0x1f9b, 0x0000, 0x1f93 },
  19590   { 0x1f9c, 0x0000, 0x1f94 },
  19591   { 0x1f9d, 0x0000, 0x1f95 },
  19592   { 0x1f9e, 0x0000, 0x1f96 },
  19593   { 0x1f9f, 0x0000, 0x1f97 },
  19594   { 0x1fa8, 0x0000, 0x1fa0 },
  19595   { 0x1fa9, 0x0000, 0x1fa1 },
  19596   { 0x1faa, 0x0000, 0x1fa2 },
  19597   { 0x1fab, 0x0000, 0x1fa3 },
  19598   { 0x1fac, 0x0000, 0x1fa4 },
  19599   { 0x1fad, 0x0000, 0x1fa5 },
  19600   { 0x1fae, 0x0000, 0x1fa6 },
  19601   { 0x1faf, 0x0000, 0x1fa7 },
  19602   { 0x1fbc, 0x0000, 0x1fb3 },
  19603   { 0x1fcc, 0x0000, 0x1fc3 },
  19604   { 0x1ffc, 0x0000, 0x1ff3 }
  19605 };
  19606 
  19607 /* Table of special cases for case conversion; each record contains
  19608  * First, the best single character mapping to lowercase if Lu,
  19609  * and to uppercase if Ll, followed by the output mapping for the two cases
  19610  * other than the case of the codepoint, in the order [Ll],[Lu],[Lt],
  19611  * encoded in UTF-8, separated and terminated by a null character.
  19612  */
  19613 static const char special_case_table[] = {
  19614  "\x00\x53\x53\x00\x53\x73\0" /* offset 0 */
  19615  "\x69\x69\xcc\x87\x00\xc4\xb0\0" /* offset 7 */
  19616  "\x00\x46\x46\x00\x46\x66\0" /* offset 15 */
  19617  "\x00\x46\x49\x00\x46\x69\0" /* offset 22 */
  19618  "\x00\x46\x4c\x00\x46\x6c\0" /* offset 29 */
  19619  "\x00\x46\x46\x49\x00\x46\x66\x69\0" /* offset 36 */
  19620  "\x00\x46\x46\x4c\x00\x46\x66\x6c\0" /* offset 45 */
  19621  "\x00\x53\x54\x00\x53\x74\0" /* offset 54 */
  19622  "\x00\x53\x54\x00\x53\x74\0" /* offset 61 */
  19623  "\x00\xd4\xb5\xd5\x92\x00\xd4\xb5\xd6\x82\0" /* offset 68 */
  19624  "\x00\xd5\x84\xd5\x86\x00\xd5\x84\xd5\xb6\0" /* offset 79 */
  19625  "\x00\xd5\x84\xd4\xb5\x00\xd5\x84\xd5\xa5\0" /* offset 90 */
  19626  "\x00\xd5\x84\xd4\xbb\x00\xd5\x84\xd5\xab\0" /* offset 101 */
  19627  "\x00\xd5\x8e\xd5\x86\x00\xd5\x8e\xd5\xb6\0" /* offset 112 */
  19628  "\x00\xd5\x84\xd4\xbd\x00\xd5\x84\xd5\xad\0" /* offset 123 */
  19629  "\x00\xca\xbc\x4e\x00\xca\xbc\x4e\0" /* offset 134 */
  19630  "\x00\xce\x99\xcc\x88\xcc\x81\x00\xce\x99\xcc\x88\xcc\x81\0" /* offset 143 */
  19631  "\x00\xce\xa5\xcc\x88\xcc\x81\x00\xce\xa5\xcc\x88\xcc\x81\0" /* offset 158 */
  19632  "\x00\x4a\xcc\x8c\x00\x4a\xcc\x8c\0" /* offset 173 */
  19633  "\x00\x48\xcc\xb1\x00\x48\xcc\xb1\0" /* offset 182 */
  19634  "\x00\x54\xcc\x88\x00\x54\xcc\x88\0" /* offset 191 */
  19635  "\x00\x57\xcc\x8a\x00\x57\xcc\x8a\0" /* offset 200 */
  19636  "\x00\x59\xcc\x8a\x00\x59\xcc\x8a\0" /* offset 209 */
  19637  "\x00\x41\xca\xbe\x00\x41\xca\xbe\0" /* offset 218 */
  19638  "\x00\xce\xa5\xcc\x93\x00\xce\xa5\xcc\x93\0" /* offset 227 */
  19639  "\x00\xce\xa5\xcc\x93\xcc\x80\x00\xce\xa5\xcc\x93\xcc\x80\0" /* offset 238 */
  19640  "\x00\xce\xa5\xcc\x93\xcc\x81\x00\xce\xa5\xcc\x93\xcc\x81\0" /* offset 253 */
  19641  "\x00\xce\xa5\xcc\x93\xcd\x82\x00\xce\xa5\xcc\x93\xcd\x82\0" /* offset 268 */
  19642  "\x00\xce\x91\xcd\x82\x00\xce\x91\xcd\x82\0" /* offset 283 */
  19643  "\x00\xce\x97\xcd\x82\x00\xce\x97\xcd\x82\0" /* offset 294 */
  19644  "\x00\xce\x99\xcc\x88\xcc\x80\x00\xce\x99\xcc\x88\xcc\x80\0" /* offset 305 */
  19645  "\x00\xce\x99\xcc\x88\xcc\x81\x00\xce\x99\xcc\x88\xcc\x81\0" /* offset 320 */
  19646  "\x00\xce\x99\xcd\x82\x00\xce\x99\xcd\x82\0" /* offset 335 */
  19647  "\x00\xce\x99\xcc\x88\xcd\x82\x00\xce\x99\xcc\x88\xcd\x82\0" /* offset 346 */
  19648  "\x00\xce\xa5\xcc\x88\xcc\x80\x00\xce\xa5\xcc\x88\xcc\x80\0" /* offset 361 */
  19649  "\x00\xce\xa5\xcc\x88\xcc\x81\x00\xce\xa5\xcc\x88\xcc\x81\0" /* offset 376 */
  19650  "\x00\xce\xa1\xcc\x93\x00\xce\xa1\xcc\x93\0" /* offset 391 */
  19651  "\x00\xce\xa5\xcd\x82\x00\xce\xa5\xcd\x82\0" /* offset 402 */
  19652  "\x00\xce\xa5\xcc\x88\xcd\x82\x00\xce\xa5\xcc\x88\xcd\x82\0" /* offset 413 */
  19653  "\x00\xce\xa9\xcd\x82\x00\xce\xa9\xcd\x82\0" /* offset 428 */
  19654  "\xe1\xbe\x88\xe1\xbc\x88\xce\x99\x00\xe1\xbe\x88\0" /* offset 439 */
  19655  "\xe1\xbe\x89\xe1\xbc\x89\xce\x99\x00\xe1\xbe\x89\0" /* offset 452 */
  19656  "\xe1\xbe\x8a\xe1\xbc\x8a\xce\x99\x00\xe1\xbe\x8a\0" /* offset 465 */
  19657  "\xe1\xbe\x8b\xe1\xbc\x8b\xce\x99\x00\xe1\xbe\x8b\0" /* offset 478 */
  19658  "\xe1\xbe\x8c\xe1\xbc\x8c\xce\x99\x00\xe1\xbe\x8c\0" /* offset 491 */
  19659  "\xe1\xbe\x8d\xe1\xbc\x8d\xce\x99\x00\xe1\xbe\x8d\0" /* offset 504 */
  19660  "\xe1\xbe\x8e\xe1\xbc\x8e\xce\x99\x00\xe1\xbe\x8e\0" /* offset 517 */
  19661  "\xe1\xbe\x8f\xe1\xbc\x8f\xce\x99\x00\xe1\xbe\x8f\0" /* offset 530 */
  19662  "\xe1\xbe\x80\x00\xe1\xbc\x88\xce\x99\0" /* offset 543 */
  19663  "\xe1\xbe\x81\x00\xe1\xbc\x89\xce\x99\0" /* offset 553 */
  19664  "\xe1\xbe\x82\x00\xe1\xbc\x8a\xce\x99\0" /* offset 563 */
  19665  "\xe1\xbe\x83\x00\xe1\xbc\x8b\xce\x99\0" /* offset 573 */
  19666  "\xe1\xbe\x84\x00\xe1\xbc\x8c\xce\x99\0" /* offset 583 */
  19667  "\xe1\xbe\x85\x00\xe1\xbc\x8d\xce\x99\0" /* offset 593 */
  19668  "\xe1\xbe\x86\x00\xe1\xbc\x8e\xce\x99\0" /* offset 603 */
  19669  "\xe1\xbe\x87\x00\xe1\xbc\x8f\xce\x99\0" /* offset 613 */
  19670  "\xe1\xbe\x98\xe1\xbc\xa8\xce\x99\x00\xe1\xbe\x98\0" /* offset 623 */
  19671  "\xe1\xbe\x99\xe1\xbc\xa9\xce\x99\x00\xe1\xbe\x99\0" /* offset 636 */
  19672  "\xe1\xbe\x9a\xe1\xbc\xaa\xce\x99\x00\xe1\xbe\x9a\0" /* offset 649 */
  19673  "\xe1\xbe\x9b\xe1\xbc\xab\xce\x99\x00\xe1\xbe\x9b\0" /* offset 662 */
  19674  "\xe1\xbe\x9c\xe1\xbc\xac\xce\x99\x00\xe1\xbe\x9c\0" /* offset 675 */
  19675  "\xe1\xbe\x9d\xe1\xbc\xad\xce\x99\x00\xe1\xbe\x9d\0" /* offset 688 */
  19676  "\xe1\xbe\x9e\xe1\xbc\xae\xce\x99\x00\xe1\xbe\x9e\0" /* offset 701 */
  19677  "\xe1\xbe\x9f\xe1\xbc\xaf\xce\x99\x00\xe1\xbe\x9f\0" /* offset 714 */
  19678  "\xe1\xbe\x90\x00\xe1\xbc\xa8\xce\x99\0" /* offset 727 */
  19679  "\xe1\xbe\x91\x00\xe1\xbc\xa9\xce\x99\0" /* offset 737 */
  19680  "\xe1\xbe\x92\x00\xe1\xbc\xaa\xce\x99\0" /* offset 747 */
  19681  "\xe1\xbe\x93\x00\xe1\xbc\xab\xce\x99\0" /* offset 757 */
  19682  "\xe1\xbe\x94\x00\xe1\xbc\xac\xce\x99\0" /* offset 767 */
  19683  "\xe1\xbe\x95\x00\xe1\xbc\xad\xce\x99\0" /* offset 777 */
  19684  "\xe1\xbe\x96\x00\xe1\xbc\xae\xce\x99\0" /* offset 787 */
  19685  "\xe1\xbe\x97\x00\xe1\xbc\xaf\xce\x99\0" /* offset 797 */
  19686  "\xe1\xbe\xa8\xe1\xbd\xa8\xce\x99\x00\xe1\xbe\xa8\0" /* offset 807 */
  19687  "\xe1\xbe\xa9\xe1\xbd\xa9\xce\x99\x00\xe1\xbe\xa9\0" /* offset 820 */
  19688  "\xe1\xbe\xaa\xe1\xbd\xaa\xce\x99\x00\xe1\xbe\xaa\0" /* offset 833 */
  19689  "\xe1\xbe\xab\xe1\xbd\xab\xce\x99\x00\xe1\xbe\xab\0" /* offset 846 */
  19690  "\xe1\xbe\xac\xe1\xbd\xac\xce\x99\x00\xe1\xbe\xac\0" /* offset 859 */
  19691  "\xe1\xbe\xad\xe1\xbd\xad\xce\x99\x00\xe1\xbe\xad\0" /* offset 872 */
  19692  "\xe1\xbe\xae\xe1\xbd\xae\xce\x99\x00\xe1\xbe\xae\0" /* offset 885 */
  19693  "\xe1\xbe\xaf\xe1\xbd\xaf\xce\x99\x00\xe1\xbe\xaf\0" /* offset 898 */
  19694  "\xe1\xbe\xa0\x00\xe1\xbd\xa8\xce\x99\0" /* offset 911 */
  19695  "\xe1\xbe\xa1\x00\xe1\xbd\xa9\xce\x99\0" /* offset 921 */
  19696  "\xe1\xbe\xa2\x00\xe1\xbd\xaa\xce\x99\0" /* offset 931 */
  19697  "\xe1\xbe\xa3\x00\xe1\xbd\xab\xce\x99\0" /* offset 941 */
  19698  "\xe1\xbe\xa4\x00\xe1\xbd\xac\xce\x99\0" /* offset 951 */
  19699  "\xe1\xbe\xa5\x00\xe1\xbd\xad\xce\x99\0" /* offset 961 */
  19700  "\xe1\xbe\xa6\x00\xe1\xbd\xae\xce\x99\0" /* offset 971 */
  19701  "\xe1\xbe\xa7\x00\xe1\xbd\xaf\xce\x99\0" /* offset 981 */
  19702  "\xe1\xbe\xbc\xce\x91\xce\x99\x00\xe1\xbe\xbc\0" /* offset 991 */
  19703  "\xe1\xbe\xb3\x00\xce\x91\xce\x99\0" /* offset 1003 */
  19704  "\xe1\xbf\x8c\xce\x97\xce\x99\x00\xe1\xbf\x8c\0" /* offset 1012 */
  19705  "\xe1\xbf\x83\x00\xce\x97\xce\x99\0" /* offset 1024 */
  19706  "\xe1\xbf\xbc\xce\xa9\xce\x99\x00\xe1\xbf\xbc\0" /* offset 1033 */
  19707  "\xe1\xbf\xb3\x00\xce\xa9\xce\x99\0" /* offset 1045 */
  19708  "\x00\xe1\xbe\xba\xce\x99\x00\xe1\xbe\xba\xcd\x85\0" /* offset 1054 */
  19709  "\x00\xce\x86\xce\x99\x00\xce\x86\xcd\x85\0" /* offset 1067 */
  19710  "\x00\xe1\xbf\x8a\xce\x99\x00\xe1\xbf\x8a\xcd\x85\0" /* offset 1078 */
  19711  "\x00\xce\x89\xce\x99\x00\xce\x89\xcd\x85\0" /* offset 1091 */
  19712  "\x00\xe1\xbf\xba\xce\x99\x00\xe1\xbf\xba\xcd\x85\0" /* offset 1102 */
  19713  "\x00\xce\x8f\xce\x99\x00\xce\x8f\xcd\x85\0" /* offset 1115 */
  19714  "\x00\xce\x91\xcd\x82\xce\x99\x00\xce\x91\xcd\x82\xcd\x85\0" /* offset 1126 */
  19715  "\x00\xce\x97\xcd\x82\xce\x99\x00\xce\x97\xcd\x82\xcd\x85\0" /* offset 1141 */
  19716  "\x00\xce\xa9\xcd\x82\xce\x99\x00\xce\xa9\xcd\x82\xcd\x85\0" /* offset 1156 */
  19717 };
  19718 
  19719 /* Table of casefolding cases that can't be derived by lowercasing
  19720  */
  19721 static const struct {
  19722   uint16_t ch;
  19723   char data[7];
  19724 } casefold_table[] = {
  19725   { 0x00b5, "\xce\xbc" },
  19726   { 0x00df, "\x73\x73" },
  19727   { 0x0130, "\x69\xcc\x87" },
  19728   { 0x0149, "\xca\xbc\x6e" },
  19729   { 0x017f, "\x73" },
  19730   { 0x01f0, "\x6a\xcc\x8c" },
  19731   { 0x0345, "\xce\xb9" },
  19732   { 0x0390, "\xce\xb9\xcc\x88\xcc\x81" },
  19733   { 0x03b0, "\xcf\x85\xcc\x88\xcc\x81" },
  19734   { 0x03c2, "\xcf\x83" },
  19735   { 0x03d0, "\xce\xb2" },
  19736   { 0x03d1, "\xce\xb8" },
  19737   { 0x03d5, "\xcf\x86" },
  19738   { 0x03d6, "\xcf\x80" },
  19739   { 0x03f0, "\xce\xba" },
  19740   { 0x03f1, "\xcf\x81" },
  19741   { 0x03f5, "\xce\xb5" },
  19742   { 0x0587, "\xd5\xa5\xd6\x82" },
  19743   { 0x13f8, "\xe1\x8f\xb0" },
  19744   { 0x13f9, "\xe1\x8f\xb1" },
  19745   { 0x13fa, "\xe1\x8f\xb2" },
  19746   { 0x13fb, "\xe1\x8f\xb3" },
  19747   { 0x13fc, "\xe1\x8f\xb4" },
  19748   { 0x13fd, "\xe1\x8f\xb5" },
  19749   { 0x1c80, "\xd0\xb2" },
  19750   { 0x1c81, "\xd0\xb4" },
  19751   { 0x1c82, "\xd0\xbe" },
  19752   { 0x1c83, "\xd1\x81" },
  19753   { 0x1c84, "\xd1\x82" },
  19754   { 0x1c85, "\xd1\x82" },
  19755   { 0x1c86, "\xd1\x8a" },
  19756   { 0x1c87, "\xd1\xa3" },
  19757   { 0x1c88, "\xea\x99\x8b" },
  19758   { 0x1e96, "\x68\xcc\xb1" },
  19759   { 0x1e97, "\x74\xcc\x88" },
  19760   { 0x1e98, "\x77\xcc\x8a" },
  19761   { 0x1e99, "\x79\xcc\x8a" },
  19762   { 0x1e9a, "\x61\xca\xbe" },
  19763   { 0x1e9b, "\xe1\xb9\xa1" },
  19764   { 0x1e9e, "\x73\x73" },
  19765   { 0x1f50, "\xcf\x85\xcc\x93" },
  19766   { 0x1f52, "\xcf\x85\xcc\x93\xcc\x80" },
  19767   { 0x1f54, "\xcf\x85\xcc\x93\xcc\x81" },
  19768   { 0x1f56, "\xcf\x85\xcc\x93\xcd\x82" },
  19769   { 0x1f80, "\xe1\xbc\x80\xce\xb9" },
  19770   { 0x1f81, "\xe1\xbc\x81\xce\xb9" },
  19771   { 0x1f82, "\xe1\xbc\x82\xce\xb9" },
  19772   { 0x1f83, "\xe1\xbc\x83\xce\xb9" },
  19773   { 0x1f84, "\xe1\xbc\x84\xce\xb9" },
  19774   { 0x1f85, "\xe1\xbc\x85\xce\xb9" },
  19775   { 0x1f86, "\xe1\xbc\x86\xce\xb9" },
  19776   { 0x1f87, "\xe1\xbc\x87\xce\xb9" },
  19777   { 0x1f88, "\xe1\xbc\x80\xce\xb9" },
  19778   { 0x1f89, "\xe1\xbc\x81\xce\xb9" },
  19779   { 0x1f8a, "\xe1\xbc\x82\xce\xb9" },
  19780   { 0x1f8b, "\xe1\xbc\x83\xce\xb9" },
  19781   { 0x1f8c, "\xe1\xbc\x84\xce\xb9" },
  19782   { 0x1f8d, "\xe1\xbc\x85\xce\xb9" },
  19783   { 0x1f8e, "\xe1\xbc\x86\xce\xb9" },
  19784   { 0x1f8f, "\xe1\xbc\x87\xce\xb9" },
  19785   { 0x1f90, "\xe1\xbc\xa0\xce\xb9" },
  19786   { 0x1f91, "\xe1\xbc\xa1\xce\xb9" },
  19787   { 0x1f92, "\xe1\xbc\xa2\xce\xb9" },
  19788   { 0x1f93, "\xe1\xbc\xa3\xce\xb9" },
  19789   { 0x1f94, "\xe1\xbc\xa4\xce\xb9" },
  19790   { 0x1f95, "\xe1\xbc\xa5\xce\xb9" },
  19791   { 0x1f96, "\xe1\xbc\xa6\xce\xb9" },
  19792   { 0x1f97, "\xe1\xbc\xa7\xce\xb9" },
  19793   { 0x1f98, "\xe1\xbc\xa0\xce\xb9" },
  19794   { 0x1f99, "\xe1\xbc\xa1\xce\xb9" },
  19795   { 0x1f9a, "\xe1\xbc\xa2\xce\xb9" },
  19796   { 0x1f9b, "\xe1\xbc\xa3\xce\xb9" },
  19797   { 0x1f9c, "\xe1\xbc\xa4\xce\xb9" },
  19798   { 0x1f9d, "\xe1\xbc\xa5\xce\xb9" },
  19799   { 0x1f9e, "\xe1\xbc\xa6\xce\xb9" },
  19800   { 0x1f9f, "\xe1\xbc\xa7\xce\xb9" },
  19801   { 0x1fa0, "\xe1\xbd\xa0\xce\xb9" },
  19802   { 0x1fa1, "\xe1\xbd\xa1\xce\xb9" },
  19803   { 0x1fa2, "\xe1\xbd\xa2\xce\xb9" },
  19804   { 0x1fa3, "\xe1\xbd\xa3\xce\xb9" },
  19805   { 0x1fa4, "\xe1\xbd\xa4\xce\xb9" },
  19806   { 0x1fa5, "\xe1\xbd\xa5\xce\xb9" },
  19807   { 0x1fa6, "\xe1\xbd\xa6\xce\xb9" },
  19808   { 0x1fa7, "\xe1\xbd\xa7\xce\xb9" },
  19809   { 0x1fa8, "\xe1\xbd\xa0\xce\xb9" },
  19810   { 0x1fa9, "\xe1\xbd\xa1\xce\xb9" },
  19811   { 0x1faa, "\xe1\xbd\xa2\xce\xb9" },
  19812   { 0x1fab, "\xe1\xbd\xa3\xce\xb9" },
  19813   { 0x1fac, "\xe1\xbd\xa4\xce\xb9" },
  19814   { 0x1fad, "\xe1\xbd\xa5\xce\xb9" },
  19815   { 0x1fae, "\xe1\xbd\xa6\xce\xb9" },
  19816   { 0x1faf, "\xe1\xbd\xa7\xce\xb9" },
  19817   { 0x1fb2, "\xe1\xbd\xb0\xce\xb9" },
  19818   { 0x1fb3, "\xce\xb1\xce\xb9" },
  19819   { 0x1fb4, "\xce\xac\xce\xb9" },
  19820   { 0x1fb6, "\xce\xb1\xcd\x82" },
  19821   { 0x1fb7, "\xce\xb1\xcd\x82\xce\xb9" },
  19822   { 0x1fbc, "\xce\xb1\xce\xb9" },
  19823   { 0x1fbe, "\xce\xb9" },
  19824   { 0x1fc2, "\xe1\xbd\xb4\xce\xb9" },
  19825   { 0x1fc3, "\xce\xb7\xce\xb9" },
  19826   { 0x1fc4, "\xce\xae\xce\xb9" },
  19827   { 0x1fc6, "\xce\xb7\xcd\x82" },
  19828   { 0x1fc7, "\xce\xb7\xcd\x82\xce\xb9" },
  19829   { 0x1fcc, "\xce\xb7\xce\xb9" },
  19830   { 0x1fd2, "\xce\xb9\xcc\x88\xcc\x80" },
  19831   { 0x1fd3, "\xce\xb9\xcc\x88\xcc\x81" },
  19832   { 0x1fd6, "\xce\xb9\xcd\x82" },
  19833   { 0x1fd7, "\xce\xb9\xcc\x88\xcd\x82" },
  19834   { 0x1fe2, "\xcf\x85\xcc\x88\xcc\x80" },
  19835   { 0x1fe3, "\xcf\x85\xcc\x88\xcc\x81" },
  19836   { 0x1fe4, "\xcf\x81\xcc\x93" },
  19837   { 0x1fe6, "\xcf\x85\xcd\x82" },
  19838   { 0x1fe7, "\xcf\x85\xcc\x88\xcd\x82" },
  19839   { 0x1ff2, "\xe1\xbd\xbc\xce\xb9" },
  19840   { 0x1ff3, "\xcf\x89\xce\xb9" },
  19841   { 0x1ff4, "\xcf\x8e\xce\xb9" },
  19842   { 0x1ff6, "\xcf\x89\xcd\x82" },
  19843   { 0x1ff7, "\xcf\x89\xcd\x82\xce\xb9" },
  19844   { 0x1ffc, "\xcf\x89\xce\xb9" },
  19845   { 0x2160, "\xe2\x85\xb0" },
  19846   { 0x2161, "\xe2\x85\xb1" },
  19847   { 0x2162, "\xe2\x85\xb2" },
  19848   { 0x2163, "\xe2\x85\xb3" },
  19849   { 0x2164, "\xe2\x85\xb4" },
  19850   { 0x2165, "\xe2\x85\xb5" },
  19851   { 0x2166, "\xe2\x85\xb6" },
  19852   { 0x2167, "\xe2\x85\xb7" },
  19853   { 0x2168, "\xe2\x85\xb8" },
  19854   { 0x2169, "\xe2\x85\xb9" },
  19855   { 0x216a, "\xe2\x85\xba" },
  19856   { 0x216b, "\xe2\x85\xbb" },
  19857   { 0x216c, "\xe2\x85\xbc" },
  19858   { 0x216d, "\xe2\x85\xbd" },
  19859   { 0x216e, "\xe2\x85\xbe" },
  19860   { 0x216f, "\xe2\x85\xbf" },
  19861   { 0x24b6, "\xe2\x93\x90" },
  19862   { 0x24b7, "\xe2\x93\x91" },
  19863   { 0x24b8, "\xe2\x93\x92" },
  19864   { 0x24b9, "\xe2\x93\x93" },
  19865   { 0x24ba, "\xe2\x93\x94" },
  19866   { 0x24bb, "\xe2\x93\x95" },
  19867   { 0x24bc, "\xe2\x93\x96" },
  19868   { 0x24bd, "\xe2\x93\x97" },
  19869   { 0x24be, "\xe2\x93\x98" },
  19870   { 0x24bf, "\xe2\x93\x99" },
  19871   { 0x24c0, "\xe2\x93\x9a" },
  19872   { 0x24c1, "\xe2\x93\x9b" },
  19873   { 0x24c2, "\xe2\x93\x9c" },
  19874   { 0x24c3, "\xe2\x93\x9d" },
  19875   { 0x24c4, "\xe2\x93\x9e" },
  19876   { 0x24c5, "\xe2\x93\x9f" },
  19877   { 0x24c6, "\xe2\x93\xa0" },
  19878   { 0x24c7, "\xe2\x93\xa1" },
  19879   { 0x24c8, "\xe2\x93\xa2" },
  19880   { 0x24c9, "\xe2\x93\xa3" },
  19881   { 0x24ca, "\xe2\x93\xa4" },
  19882   { 0x24cb, "\xe2\x93\xa5" },
  19883   { 0x24cc, "\xe2\x93\xa6" },
  19884   { 0x24cd, "\xe2\x93\xa7" },
  19885   { 0x24ce, "\xe2\x93\xa8" },
  19886   { 0x24cf, "\xe2\x93\xa9" },
  19887   { 0xab70, "\xe1\x8e\xa0" },
  19888   { 0xab71, "\xe1\x8e\xa1" },
  19889   { 0xab72, "\xe1\x8e\xa2" },
  19890   { 0xab73, "\xe1\x8e\xa3" },
  19891   { 0xab74, "\xe1\x8e\xa4" },
  19892   { 0xab75, "\xe1\x8e\xa5" },
  19893   { 0xab76, "\xe1\x8e\xa6" },
  19894   { 0xab77, "\xe1\x8e\xa7" },
  19895   { 0xab78, "\xe1\x8e\xa8" },
  19896   { 0xab79, "\xe1\x8e\xa9" },
  19897   { 0xab7a, "\xe1\x8e\xaa" },
  19898   { 0xab7b, "\xe1\x8e\xab" },
  19899   { 0xab7c, "\xe1\x8e\xac" },
  19900   { 0xab7d, "\xe1\x8e\xad" },
  19901   { 0xab7e, "\xe1\x8e\xae" },
  19902   { 0xab7f, "\xe1\x8e\xaf" },
  19903   { 0xab80, "\xe1\x8e\xb0" },
  19904   { 0xab81, "\xe1\x8e\xb1" },
  19905   { 0xab82, "\xe1\x8e\xb2" },
  19906   { 0xab83, "\xe1\x8e\xb3" },
  19907   { 0xab84, "\xe1\x8e\xb4" },
  19908   { 0xab85, "\xe1\x8e\xb5" },
  19909   { 0xab86, "\xe1\x8e\xb6" },
  19910   { 0xab87, "\xe1\x8e\xb7" },
  19911   { 0xab88, "\xe1\x8e\xb8" },
  19912   { 0xab89, "\xe1\x8e\xb9" },
  19913   { 0xab8a, "\xe1\x8e\xba" },
  19914   { 0xab8b, "\xe1\x8e\xbb" },
  19915   { 0xab8c, "\xe1\x8e\xbc" },
  19916   { 0xab8d, "\xe1\x8e\xbd" },
  19917   { 0xab8e, "\xe1\x8e\xbe" },
  19918   { 0xab8f, "\xe1\x8e\xbf" },
  19919   { 0xab90, "\xe1\x8f\x80" },
  19920   { 0xab91, "\xe1\x8f\x81" },
  19921   { 0xab92, "\xe1\x8f\x82" },
  19922   { 0xab93, "\xe1\x8f\x83" },
  19923   { 0xab94, "\xe1\x8f\x84" },
  19924   { 0xab95, "\xe1\x8f\x85" },
  19925   { 0xab96, "\xe1\x8f\x86" },
  19926   { 0xab97, "\xe1\x8f\x87" },
  19927   { 0xab98, "\xe1\x8f\x88" },
  19928   { 0xab99, "\xe1\x8f\x89" },
  19929   { 0xab9a, "\xe1\x8f\x8a" },
  19930   { 0xab9b, "\xe1\x8f\x8b" },
  19931   { 0xab9c, "\xe1\x8f\x8c" },
  19932   { 0xab9d, "\xe1\x8f\x8d" },
  19933   { 0xab9e, "\xe1\x8f\x8e" },
  19934   { 0xab9f, "\xe1\x8f\x8f" },
  19935   { 0xaba0, "\xe1\x8f\x90" },
  19936   { 0xaba1, "\xe1\x8f\x91" },
  19937   { 0xaba2, "\xe1\x8f\x92" },
  19938   { 0xaba3, "\xe1\x8f\x93" },
  19939   { 0xaba4, "\xe1\x8f\x94" },
  19940   { 0xaba5, "\xe1\x8f\x95" },
  19941   { 0xaba6, "\xe1\x8f\x96" },
  19942   { 0xaba7, "\xe1\x8f\x97" },
  19943   { 0xaba8, "\xe1\x8f\x98" },
  19944   { 0xaba9, "\xe1\x8f\x99" },
  19945   { 0xabaa, "\xe1\x8f\x9a" },
  19946   { 0xabab, "\xe1\x8f\x9b" },
  19947   { 0xabac, "\xe1\x8f\x9c" },
  19948   { 0xabad, "\xe1\x8f\x9d" },
  19949   { 0xabae, "\xe1\x8f\x9e" },
  19950   { 0xabaf, "\xe1\x8f\x9f" },
  19951   { 0xabb0, "\xe1\x8f\xa0" },
  19952   { 0xabb1, "\xe1\x8f\xa1" },
  19953   { 0xabb2, "\xe1\x8f\xa2" },
  19954   { 0xabb3, "\xe1\x8f\xa3" },
  19955   { 0xabb4, "\xe1\x8f\xa4" },
  19956   { 0xabb5, "\xe1\x8f\xa5" },
  19957   { 0xabb6, "\xe1\x8f\xa6" },
  19958   { 0xabb7, "\xe1\x8f\xa7" },
  19959   { 0xabb8, "\xe1\x8f\xa8" },
  19960   { 0xabb9, "\xe1\x8f\xa9" },
  19961   { 0xabba, "\xe1\x8f\xaa" },
  19962   { 0xabbb, "\xe1\x8f\xab" },
  19963   { 0xabbc, "\xe1\x8f\xac" },
  19964   { 0xabbd, "\xe1\x8f\xad" },
  19965   { 0xabbe, "\xe1\x8f\xae" },
  19966   { 0xabbf, "\xe1\x8f\xaf" },
  19967   { 0xfb00, "\x66\x66" },
  19968   { 0xfb01, "\x66\x69" },
  19969   { 0xfb02, "\x66\x6c" },
  19970   { 0xfb03, "\x66\x66\x69" },
  19971   { 0xfb04, "\x66\x66\x6c" },
  19972   { 0xfb05, "\x73\x74" },
  19973   { 0xfb06, "\x73\x74" },
  19974   { 0xfb13, "\xd5\xb4\xd5\xb6" },
  19975   { 0xfb14, "\xd5\xb4\xd5\xa5" },
  19976   { 0xfb15, "\xd5\xb4\xd5\xab" },
  19977   { 0xfb16, "\xd5\xbe\xd5\xb6" },
  19978   { 0xfb17, "\xd5\xb4\xd5\xad" },
  19979 };
  19980 
  19981 static const uint8_t cclass_data[][256] = {
  19982   { /* page 3, index 0 */
  19983     230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
  19984     230, 230, 230, 230, 230, 230, 230, 232, 220, 220, 220, 220, 232, 216,
  19985     220, 220, 220, 220, 220, 202, 202, 220, 220, 220, 220, 202, 202, 220,
  19986     220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 1, 1, 1, 1, 1, 220,
  19987     220, 220, 220, 230, 230, 230, 230, 230, 230, 230, 230, 240, 230, 220,
  19988     220, 220, 230, 230, 230, 220, 220, 0, 230, 230, 230, 220, 220, 220, 220,
  19989     230, 232, 220, 220, 230, 233, 234, 234, 233, 234, 234, 233, 230, 230,
  19990     230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0,
  19991     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  19992     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  19993     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  19994     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  19995     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  19996     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  19997   },
  19998   { /* page 4, index 1 */
  19999     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20000     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20001     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20002     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20003     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20004     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 0, 0, 0, 0, 0,
  20005     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20006     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20007     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20008     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20009     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20010   },
  20011   { /* page 5, index 2 */
  20012     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20013     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20014     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20015     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20016     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20017     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20018     0, 220, 230, 230, 230, 230, 220, 230, 230, 230, 222, 220, 230, 230, 230,
  20019     230, 230, 230, 220, 220, 220, 220, 220, 220, 230, 230, 220, 230, 230,
  20020     222, 228, 230, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 0,
  20021     23, 0, 24, 25, 0, 230, 220, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20022     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20023     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20024   },
  20025   { /* page 6, index 3 */
  20026     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230,
  20027     230, 230, 230, 30, 31, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20028     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20029     0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 28, 29, 30, 31, 32, 33, 34, 230, 230, 220,
  20030     220, 230, 230, 230, 230, 230, 220, 230, 230, 220, 0, 0, 0, 0, 0, 0, 0, 0,
  20031     0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20032     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20033     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20034     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20035     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 230,
  20036     230, 0, 0, 230, 230, 230, 230, 220, 230, 0, 0, 230, 230, 0, 220, 230,
  20037     230, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20038   },
  20039   { /* page 7, index 4 */
  20040     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0,
  20041     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20042     230, 220, 230, 230, 220, 230, 230, 220, 220, 220, 230, 220, 220, 230,
  20043     220, 230, 230, 230, 220, 230, 220, 230, 220, 230, 220, 230, 230, 0, 0, 0,
  20044     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20045     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20046     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20047     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20048     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20049     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20050     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 230, 230,
  20051     220, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20052   },
  20053   { /* page 8, index 5 */
  20054     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230,
  20055     230, 230, 230, 0, 230, 230, 230, 230, 230, 230, 230, 230, 230, 0, 230,
  20056     230, 230, 0, 230, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20057     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20058     0, 0, 0, 0, 0, 0, 0, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20059     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20060     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20061     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20062     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20063     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 230, 230,
  20064     230, 230, 230, 230, 230, 230, 230, 0, 220, 230, 230, 220, 230, 230, 220,
  20065     230, 230, 230, 220, 220, 220, 27, 28, 29, 230, 230, 230, 220, 230, 230,
  20066     220, 220, 230, 230, 230, 230, 230
  20067   },
  20068   { /* page 9, index 6 */
  20069     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20070     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20071     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20072     0, 0, 0, 0, 0, 9, 0, 0, 0, 230, 220, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20073     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20074     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20075     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20076     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0,
  20077     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0,
  20078     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20079     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20080   },
  20081   { /* page 10, index 7 */
  20082     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20083     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20084     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20085     0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20086     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20087     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20088     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20089     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0,
  20090     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20091     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20092     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20093   },
  20094   { /* page 11, index 8 */
  20095     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20096     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20097     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20098     0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20099     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20100     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20101     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20102     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20103     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20104     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20105     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20106   },
  20107   { /* page 12, index 9 */
  20108     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20109     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20110     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20111     0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 84, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20112     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20113     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20114     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20115     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0,
  20116     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20117     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20118     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20119   },
  20120   { /* page 13, index 10 */
  20121     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20122     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20123     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20124     0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20125     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20126     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20127     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20128     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20129     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20130     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20131     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20132   },
  20133   { /* page 14, index 11 */
  20134     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20135     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20136     0, 0, 0, 0, 0, 0, 0, 0, 103, 103, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20137     0, 107, 107, 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20138     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20139     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20140     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20141     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 118, 0, 0,
  20142     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 122, 122, 122, 0, 0, 0, 0, 0, 0,
  20143     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20144     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20145   },
  20146   { /* page 15, index 12 */
  20147     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20148     220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20149     0, 0, 0, 0, 0, 0, 220, 0, 220, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20150     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20151     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 130, 0,
  20152     132, 0, 0, 0, 0, 0, 130, 130, 130, 130, 0, 0, 130, 0, 230, 230, 9, 0,
  20153     230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20154     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20155     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0,
  20156     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20157     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20158     0, 0, 0
  20159   },
  20160   { /* page 16, index 13 */
  20161     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20162     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20163     0, 0, 0, 0, 0, 0, 0, 7, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20164     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20165     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20166     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0,
  20167     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20168     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20169     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20170     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20171     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20172   },
  20173   { /* page 19, index 14 */
  20174     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20175     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20176     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20177     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230,
  20178     230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20179     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20180     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20181     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20182     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20183     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20184     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20185   },
  20186   { /* page 23, index 15 */
  20187     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0,
  20188     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20189     0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20190     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20191     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20192     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20193     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20194     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20195     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0,
  20196     0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20197     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20198   },
  20199   { /* page 24, index 16 */
  20200     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20201     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20202     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20203     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20204     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20205     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20206     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20207     0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20208     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20209     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20210     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20211   },
  20212   { /* page 25, index 17 */
  20213     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20214     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20215     0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 230, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20216     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20217     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20218     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20219     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20220     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20221     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20222     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20223     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20224   },
  20225   { /* page 26, index 18 */
  20226     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230,
  20227     220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20228     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20229     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20230     9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230,
  20231     230, 230, 230, 230, 230, 230, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20232     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20233     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 220, 220,
  20234     220, 220, 220, 220, 230, 230, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20235     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20236     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20237     0, 0, 0, 0, 0
  20238   },
  20239   { /* page 27, index 19 */
  20240     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20241     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20242     0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0,
  20243     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20244     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 220, 230, 230, 230, 230, 230, 230,
  20245     230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20246     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20247     0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20248     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20249     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0,
  20250     0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20251   },
  20252   { /* page 28, index 20 */
  20253     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20254     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20255     0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20256     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20257     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20258     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20259     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20260     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20261     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 0, 1, 220,
  20262     220, 220, 220, 220, 230, 230, 220, 220, 220, 220, 230, 0, 1, 1, 1, 1, 1,
  20263     1, 1, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 230, 230, 0, 0, 0,
  20264     0, 0, 0
  20265   },
  20266   { /* page 29, index 21 */
  20267     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20268     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20269     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20270     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20271     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20272     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20273     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20274     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20275     230, 230, 220, 230, 230, 230, 230, 230, 230, 230, 220, 230, 230, 234,
  20276     214, 220, 202, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
  20277     230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
  20278     230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 232, 228,
  20279     228, 220, 0, 230, 233, 220, 230, 220
  20280   },
  20281   { /* page 32, index 22 */
  20282     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20283     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20284     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20285     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20286     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20287     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20288     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20289     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20290     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 1, 1, 230, 230,
  20291     230, 230, 1, 1, 1, 230, 230, 0, 0, 0, 0, 230, 0, 0, 0, 1, 1, 230, 220,
  20292     230, 1, 1, 220, 220, 220, 220, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20293     0, 0, 0
  20294   },
  20295   { /* page 44, index 23 */
  20296     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20297     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20298     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20299     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20300     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20301     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20302     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20303     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20304     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20305     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230,
  20306     230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20307   },
  20308   { /* page 45, index 24 */
  20309     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20310     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20311     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20312     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20313     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20314     0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20315     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20316     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20317     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20318     0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
  20319     230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
  20320     230, 230, 230, 230, 230, 230, 230, 230
  20321   },
  20322   { /* page 48, index 25 */
  20323     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20324     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 228, 232, 222,
  20325     224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20326     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20327     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20328     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20329     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20330     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20331     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20332     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20333     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20334   },
  20335   { /* page 166, index 26 */
  20336     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20337     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20338     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20339     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20340     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 230, 230,
  20341     230, 230, 230, 230, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20342     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230,
  20343     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20344     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20345     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20346     0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20347     0
  20348   },
  20349   { /* page 168, index 27 */
  20350     0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20351     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20352     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20353     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20354     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20355     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20356     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20357     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20358     0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20359     0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
  20360     230, 230, 230, 230, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20361     0, 0, 0
  20362   },
  20363   { /* page 169, index 28 */
  20364     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20365     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 220, 220,
  20366     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20367     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20368     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20369     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20370     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20371     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20372     0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20373     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20374     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20375   },
  20376   { /* page 170, index 29 */
  20377     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20378     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20379     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20380     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20381     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20382     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20383     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20384     0, 0, 0, 0, 0, 0, 0, 0, 230, 0, 230, 230, 220, 0, 0, 230, 230, 0, 0, 0,
  20385     0, 0, 230, 230, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20386     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20387     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20388   },
  20389   { /* page 171, index 30 */
  20390     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20391     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20392     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20393     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20394     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20395     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20396     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20397     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20398     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20399     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0,
  20400     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20401   },
  20402   { /* page 251, index 31 */
  20403     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20404     0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20405     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20406     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20407     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20408     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20409     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20410     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20411     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20412     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20413     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20414   },
  20415   { /* page 254, index 32 */
  20416     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20417     0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 230, 230, 220, 220, 220,
  20418     220, 220, 220, 220, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20419     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20420     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20421     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20422     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20423     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20424     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20425     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20426     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20427     0, 0
  20428   },
  20429   { /* page 257, index 33 */
  20430     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20431     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20432     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20433     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20434     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20435     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20436     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20437     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20438     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20439     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20440     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0
  20441   },
  20442   { /* page 258, index 34 */
  20443     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20444     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20445     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20446     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20447     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20448     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20449     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20450     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20451     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20452     0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20453     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20454   },
  20455   { /* page 259, index 35 */
  20456     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20457     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20458     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20459     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20460     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230,
  20461     230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20462     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20463     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20464     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20465     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20466     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20467   },
  20468   { /* page 266, index 36 */
  20469     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 230, 0, 0, 0, 0, 0, 0, 0,
  20470     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20471     0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 1, 220, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0,
  20472     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20473     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20474     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20475     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20476     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20477     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20478     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 220, 0, 0, 0, 0, 0, 0,
  20479     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20480   },
  20481   { /* page 272, index 37 */
  20482     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20483     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20484     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0,
  20485     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20486     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20487     0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20488     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20489     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7, 0, 0, 0, 0, 0,
  20490     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20491     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20492     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20493   },
  20494   { /* page 273, index 38 */
  20495     230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20496     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20497     0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20498     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20499     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0,
  20500     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20501     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20502     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20503     0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20504     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20505     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20506   },
  20507   { /* page 274, index 39 */
  20508     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20509     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20510     0, 0, 0, 0, 0, 9, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20511     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20512     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20513     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20514     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20515     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20516     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20517     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 0, 0, 0, 0, 0,
  20518     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20519   },
  20520   { /* page 275, index 40 */
  20521     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20522     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20523     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20524     0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20525     0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 230, 230, 0, 0, 0, 230, 230,
  20526     230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20527     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20528     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20529     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20530     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20531     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20532   },
  20533   { /* page 276, index 41 */
  20534     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20535     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20536     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 7, 0,
  20537     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20538     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20539     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20540     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20541     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20542     0, 0, 9, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20543     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20544     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20545   },
  20546   { /* page 277, index 42 */
  20547     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20548     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20549     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20550     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20551     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20552     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20553     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20554     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
  20555     7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20556     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20557     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20558   },
  20559   { /* page 278, index 43 */
  20560     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20561     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20562     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0,
  20563     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20564     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20565     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20566     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20567     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7, 0, 0, 0, 0, 0, 0, 0, 0,
  20568     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20569     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20570     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20571   },
  20572   { /* page 279, index 44 */
  20573     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20574     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0,
  20575     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20576     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20577     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20578     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20579     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20580     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20581     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20582     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20583     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20584   },
  20585   { /* page 282, index 45 */
  20586     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20587     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20588     0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
  20589     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20590     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20591     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20592     0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20593     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20594     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20595     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20596     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20597   },
  20598   { /* page 284, index 46 */
  20599     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20600     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20601     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0,
  20602     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20603     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20604     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20605     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20606     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20607     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20608     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20609     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20610   },
  20611   { /* page 285, index 47 */
  20612     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20613     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20614     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 9, 9, 0, 0,
  20615     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20616     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20617     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20618     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20619     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20620     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20621     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20622     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20623   },
  20624   { /* page 362, index 48 */
  20625     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20626     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20627     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20628     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20629     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20630     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20631     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20632     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20633     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20634     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20635     1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20636   },
  20637   { /* page 363, index 49 */
  20638     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20639     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20640     230, 230, 230, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20641     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20642     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20643     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20644     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20645     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20646     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20647     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20648     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20649   },
  20650   { /* page 444, index 50 */
  20651     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20652     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20653     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20654     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20655     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20656     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20657     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20658     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20659     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20660     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20661     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20662   },
  20663   { /* page 465, index 51 */
  20664     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20665     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20666     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20667     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20668     0, 0, 0, 0, 0, 216, 216, 1, 1, 1, 0, 0, 0, 226, 216, 216, 216, 216, 216,
  20669     0, 0, 0, 0, 0, 0, 0, 0, 220, 220, 220, 220, 220, 220, 220, 220, 0, 0,
  20670     230, 230, 230, 230, 230, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20671     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 0,
  20672     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20673     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20674     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20675     0, 0, 0, 0, 0, 0, 0, 0, 0
  20676   },
  20677   { /* page 466, index 52 */
  20678     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20679     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20680     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 0,
  20681     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20682     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20683     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20684     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20685     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20686     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20687     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20688     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20689   },
  20690   { /* page 480, index 53 */
  20691     230, 230, 230, 230, 230, 230, 230, 0, 230, 230, 230, 230, 230, 230, 230,
  20692     230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 0, 0, 230, 230, 230,
  20693     230, 230, 230, 230, 0, 230, 230, 0, 230, 230, 230, 230, 230, 0, 0, 0, 0,
  20694     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20695     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20696     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20697     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20698     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20699     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20700     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20701     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20702     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20703   },
  20704   { /* page 488, index 54 */
  20705     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20706     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20707     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20708     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20709     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20710     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20711     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20712     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20713     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 220, 220, 220, 220,
  20714     220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20715     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20716   },
  20717   { /* page 489, index 55 */
  20718     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20719     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20720     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230,
  20721     230, 230, 230, 230, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20722     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20723     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20724     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20725     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20726     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20727     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  20728     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  20729   }
  20730 };
  20731 
  20732 static const int16_t combining_class_table_part1[763] = {
  20733   0 + UNICODE_MAX_TABLE_INDEX,
  20734   0 + UNICODE_MAX_TABLE_INDEX,
  20735   0 + UNICODE_MAX_TABLE_INDEX,
  20736   0 /* page 3 */,
  20737   1 /* page 4 */,
  20738   2 /* page 5 */,
  20739   3 /* page 6 */,
  20740   4 /* page 7 */,
  20741   5 /* page 8 */,
  20742   6 /* page 9 */,
  20743   7 /* page 10 */,
  20744   8 /* page 11 */,
  20745   9 /* page 12 */,
  20746   10 /* page 13 */,
  20747   11 /* page 14 */,
  20748   12 /* page 15 */,
  20749   13 /* page 16 */,
  20750   0 + UNICODE_MAX_TABLE_INDEX,
  20751   0 + UNICODE_MAX_TABLE_INDEX,
  20752   14 /* page 19 */,
  20753   0 + UNICODE_MAX_TABLE_INDEX,
  20754   0 + UNICODE_MAX_TABLE_INDEX,
  20755   0 + UNICODE_MAX_TABLE_INDEX,
  20756   15 /* page 23 */,
  20757   16 /* page 24 */,
  20758   17 /* page 25 */,
  20759   18 /* page 26 */,
  20760   19 /* page 27 */,
  20761   20 /* page 28 */,
  20762   21 /* page 29 */,
  20763   0 + UNICODE_MAX_TABLE_INDEX,
  20764   0 + UNICODE_MAX_TABLE_INDEX,
  20765   22 /* page 32 */,
  20766   0 + UNICODE_MAX_TABLE_INDEX,
  20767   0 + UNICODE_MAX_TABLE_INDEX,
  20768   0 + UNICODE_MAX_TABLE_INDEX,
  20769   0 + UNICODE_MAX_TABLE_INDEX,
  20770   0 + UNICODE_MAX_TABLE_INDEX,
  20771   0 + UNICODE_MAX_TABLE_INDEX,
  20772   0 + UNICODE_MAX_TABLE_INDEX,
  20773   0 + UNICODE_MAX_TABLE_INDEX,
  20774   0 + UNICODE_MAX_TABLE_INDEX,
  20775   0 + UNICODE_MAX_TABLE_INDEX,
  20776   0 + UNICODE_MAX_TABLE_INDEX,
  20777   23 /* page 44 */,
  20778   24 /* page 45 */,
  20779   0 + UNICODE_MAX_TABLE_INDEX,
  20780   0 + UNICODE_MAX_TABLE_INDEX,
  20781   25 /* page 48 */,
  20782   0 + UNICODE_MAX_TABLE_INDEX,
  20783   0 + UNICODE_MAX_TABLE_INDEX,
  20784   0 + UNICODE_MAX_TABLE_INDEX,
  20785   0 + UNICODE_MAX_TABLE_INDEX,
  20786   0 + UNICODE_MAX_TABLE_INDEX,
  20787   0 + UNICODE_MAX_TABLE_INDEX,
  20788   0 + UNICODE_MAX_TABLE_INDEX,
  20789   0 + UNICODE_MAX_TABLE_INDEX,
  20790   0 + UNICODE_MAX_TABLE_INDEX,
  20791   0 + UNICODE_MAX_TABLE_INDEX,
  20792   0 + UNICODE_MAX_TABLE_INDEX,
  20793   0 + UNICODE_MAX_TABLE_INDEX,
  20794   0 + UNICODE_MAX_TABLE_INDEX,
  20795   0 + UNICODE_MAX_TABLE_INDEX,
  20796   0 + UNICODE_MAX_TABLE_INDEX,
  20797   0 + UNICODE_MAX_TABLE_INDEX,
  20798   0 + UNICODE_MAX_TABLE_INDEX,
  20799   0 + UNICODE_MAX_TABLE_INDEX,
  20800   0 + UNICODE_MAX_TABLE_INDEX,
  20801   0 + UNICODE_MAX_TABLE_INDEX,
  20802   0 + UNICODE_MAX_TABLE_INDEX,
  20803   0 + UNICODE_MAX_TABLE_INDEX,
  20804   0 + UNICODE_MAX_TABLE_INDEX,
  20805   0 + UNICODE_MAX_TABLE_INDEX,
  20806   0 + UNICODE_MAX_TABLE_INDEX,
  20807   0 + UNICODE_MAX_TABLE_INDEX,
  20808   0 + UNICODE_MAX_TABLE_INDEX,
  20809   0 + UNICODE_MAX_TABLE_INDEX,
  20810   0 + UNICODE_MAX_TABLE_INDEX,
  20811   0 + UNICODE_MAX_TABLE_INDEX,
  20812   0 + UNICODE_MAX_TABLE_INDEX,
  20813   0 + UNICODE_MAX_TABLE_INDEX,
  20814   0 + UNICODE_MAX_TABLE_INDEX,
  20815   0 + UNICODE_MAX_TABLE_INDEX,
  20816   0 + UNICODE_MAX_TABLE_INDEX,
  20817   0 + UNICODE_MAX_TABLE_INDEX,
  20818   0 + UNICODE_MAX_TABLE_INDEX,
  20819   0 + UNICODE_MAX_TABLE_INDEX,
  20820   0 + UNICODE_MAX_TABLE_INDEX,
  20821   0 + UNICODE_MAX_TABLE_INDEX,
  20822   0 + UNICODE_MAX_TABLE_INDEX,
  20823   0 + UNICODE_MAX_TABLE_INDEX,
  20824   0 + UNICODE_MAX_TABLE_INDEX,
  20825   0 + UNICODE_MAX_TABLE_INDEX,
  20826   0 + UNICODE_MAX_TABLE_INDEX,
  20827   0 + UNICODE_MAX_TABLE_INDEX,
  20828   0 + UNICODE_MAX_TABLE_INDEX,
  20829   0 + UNICODE_MAX_TABLE_INDEX,
  20830   0 + UNICODE_MAX_TABLE_INDEX,
  20831   0 + UNICODE_MAX_TABLE_INDEX,
  20832   0 + UNICODE_MAX_TABLE_INDEX,
  20833   0 + UNICODE_MAX_TABLE_INDEX,
  20834   0 + UNICODE_MAX_TABLE_INDEX,
  20835   0 + UNICODE_MAX_TABLE_INDEX,
  20836   0 + UNICODE_MAX_TABLE_INDEX,
  20837   0 + UNICODE_MAX_TABLE_INDEX,
  20838   0 + UNICODE_MAX_TABLE_INDEX,
  20839   0 + UNICODE_MAX_TABLE_INDEX,
  20840   0 + UNICODE_MAX_TABLE_INDEX,
  20841   0 + UNICODE_MAX_TABLE_INDEX,
  20842   0 + UNICODE_MAX_TABLE_INDEX,
  20843   0 + UNICODE_MAX_TABLE_INDEX,
  20844   0 + UNICODE_MAX_TABLE_INDEX,
  20845   0 + UNICODE_MAX_TABLE_INDEX,
  20846   0 + UNICODE_MAX_TABLE_INDEX,
  20847   0 + UNICODE_MAX_TABLE_INDEX,
  20848   0 + UNICODE_MAX_TABLE_INDEX,
  20849   0 + UNICODE_MAX_TABLE_INDEX,
  20850   0 + UNICODE_MAX_TABLE_INDEX,
  20851   0 + UNICODE_MAX_TABLE_INDEX,
  20852   0 + UNICODE_MAX_TABLE_INDEX,
  20853   0 + UNICODE_MAX_TABLE_INDEX,
  20854   0 + UNICODE_MAX_TABLE_INDEX,
  20855   0 + UNICODE_MAX_TABLE_INDEX,
  20856   0 + UNICODE_MAX_TABLE_INDEX,
  20857   0 + UNICODE_MAX_TABLE_INDEX,
  20858   0 + UNICODE_MAX_TABLE_INDEX,
  20859   0 + UNICODE_MAX_TABLE_INDEX,
  20860   0 + UNICODE_MAX_TABLE_INDEX,
  20861   0 + UNICODE_MAX_TABLE_INDEX,
  20862   0 + UNICODE_MAX_TABLE_INDEX,
  20863   0 + UNICODE_MAX_TABLE_INDEX,
  20864   0 + UNICODE_MAX_TABLE_INDEX,
  20865   0 + UNICODE_MAX_TABLE_INDEX,
  20866   0 + UNICODE_MAX_TABLE_INDEX,
  20867   0 + UNICODE_MAX_TABLE_INDEX,
  20868   0 + UNICODE_MAX_TABLE_INDEX,
  20869   0 + UNICODE_MAX_TABLE_INDEX,
  20870   0 + UNICODE_MAX_TABLE_INDEX,
  20871   0 + UNICODE_MAX_TABLE_INDEX,
  20872   0 + UNICODE_MAX_TABLE_INDEX,
  20873   0 + UNICODE_MAX_TABLE_INDEX,
  20874   0 + UNICODE_MAX_TABLE_INDEX,
  20875   0 + UNICODE_MAX_TABLE_INDEX,
  20876   0 + UNICODE_MAX_TABLE_INDEX,
  20877   0 + UNICODE_MAX_TABLE_INDEX,
  20878   0 + UNICODE_MAX_TABLE_INDEX,
  20879   0 + UNICODE_MAX_TABLE_INDEX,
  20880   0 + UNICODE_MAX_TABLE_INDEX,
  20881   0 + UNICODE_MAX_TABLE_INDEX,
  20882   0 + UNICODE_MAX_TABLE_INDEX,
  20883   0 + UNICODE_MAX_TABLE_INDEX,
  20884   0 + UNICODE_MAX_TABLE_INDEX,
  20885   0 + UNICODE_MAX_TABLE_INDEX,
  20886   0 + UNICODE_MAX_TABLE_INDEX,
  20887   0 + UNICODE_MAX_TABLE_INDEX,
  20888   0 + UNICODE_MAX_TABLE_INDEX,
  20889   0 + UNICODE_MAX_TABLE_INDEX,
  20890   0 + UNICODE_MAX_TABLE_INDEX,
  20891   0 + UNICODE_MAX_TABLE_INDEX,
  20892   0 + UNICODE_MAX_TABLE_INDEX,
  20893   0 + UNICODE_MAX_TABLE_INDEX,
  20894   0 + UNICODE_MAX_TABLE_INDEX,
  20895   0 + UNICODE_MAX_TABLE_INDEX,
  20896   0 + UNICODE_MAX_TABLE_INDEX,
  20897   0 + UNICODE_MAX_TABLE_INDEX,
  20898   0 + UNICODE_MAX_TABLE_INDEX,
  20899   26 /* page 166 */,
  20900   0 + UNICODE_MAX_TABLE_INDEX,
  20901   27 /* page 168 */,
  20902   28 /* page 169 */,
  20903   29 /* page 170 */,
  20904   30 /* page 171 */,
  20905   0 + UNICODE_MAX_TABLE_INDEX,
  20906   0 + UNICODE_MAX_TABLE_INDEX,
  20907   0 + UNICODE_MAX_TABLE_INDEX,
  20908   0 + UNICODE_MAX_TABLE_INDEX,
  20909   0 + UNICODE_MAX_TABLE_INDEX,
  20910   0 + UNICODE_MAX_TABLE_INDEX,
  20911   0 + UNICODE_MAX_TABLE_INDEX,
  20912   0 + UNICODE_MAX_TABLE_INDEX,
  20913   0 + UNICODE_MAX_TABLE_INDEX,
  20914   0 + UNICODE_MAX_TABLE_INDEX,
  20915   0 + UNICODE_MAX_TABLE_INDEX,
  20916   0 + UNICODE_MAX_TABLE_INDEX,
  20917   0 + UNICODE_MAX_TABLE_INDEX,
  20918   0 + UNICODE_MAX_TABLE_INDEX,
  20919   0 + UNICODE_MAX_TABLE_INDEX,
  20920   0 + UNICODE_MAX_TABLE_INDEX,
  20921   0 + UNICODE_MAX_TABLE_INDEX,
  20922   0 + UNICODE_MAX_TABLE_INDEX,
  20923   0 + UNICODE_MAX_TABLE_INDEX,
  20924   0 + UNICODE_MAX_TABLE_INDEX,
  20925   0 + UNICODE_MAX_TABLE_INDEX,
  20926   0 + UNICODE_MAX_TABLE_INDEX,
  20927   0 + UNICODE_MAX_TABLE_INDEX,
  20928   0 + UNICODE_MAX_TABLE_INDEX,
  20929   0 + UNICODE_MAX_TABLE_INDEX,
  20930   0 + UNICODE_MAX_TABLE_INDEX,
  20931   0 + UNICODE_MAX_TABLE_INDEX,
  20932   0 + UNICODE_MAX_TABLE_INDEX,
  20933   0 + UNICODE_MAX_TABLE_INDEX,
  20934   0 + UNICODE_MAX_TABLE_INDEX,
  20935   0 + UNICODE_MAX_TABLE_INDEX,
  20936   0 + UNICODE_MAX_TABLE_INDEX,
  20937   0 + UNICODE_MAX_TABLE_INDEX,
  20938   0 + UNICODE_MAX_TABLE_INDEX,
  20939   0 + UNICODE_MAX_TABLE_INDEX,
  20940   0 + UNICODE_MAX_TABLE_INDEX,
  20941   0 + UNICODE_MAX_TABLE_INDEX,
  20942   0 + UNICODE_MAX_TABLE_INDEX,
  20943   0 + UNICODE_MAX_TABLE_INDEX,
  20944   0 + UNICODE_MAX_TABLE_INDEX,
  20945   0 + UNICODE_MAX_TABLE_INDEX,
  20946   0 + UNICODE_MAX_TABLE_INDEX,
  20947   0 + UNICODE_MAX_TABLE_INDEX,
  20948   0 + UNICODE_MAX_TABLE_INDEX,
  20949   0 + UNICODE_MAX_TABLE_INDEX,
  20950   0 + UNICODE_MAX_TABLE_INDEX,
  20951   0 + UNICODE_MAX_TABLE_INDEX,
  20952   0 + UNICODE_MAX_TABLE_INDEX,
  20953   0 + UNICODE_MAX_TABLE_INDEX,
  20954   0 + UNICODE_MAX_TABLE_INDEX,
  20955   0 + UNICODE_MAX_TABLE_INDEX,
  20956   0 + UNICODE_MAX_TABLE_INDEX,
  20957   0 + UNICODE_MAX_TABLE_INDEX,
  20958   0 + UNICODE_MAX_TABLE_INDEX,
  20959   0 + UNICODE_MAX_TABLE_INDEX,
  20960   0 + UNICODE_MAX_TABLE_INDEX,
  20961   0 + UNICODE_MAX_TABLE_INDEX,
  20962   0 + UNICODE_MAX_TABLE_INDEX,
  20963   0 + UNICODE_MAX_TABLE_INDEX,
  20964   0 + UNICODE_MAX_TABLE_INDEX,
  20965   0 + UNICODE_MAX_TABLE_INDEX,
  20966   0 + UNICODE_MAX_TABLE_INDEX,
  20967   0 + UNICODE_MAX_TABLE_INDEX,
  20968   0 + UNICODE_MAX_TABLE_INDEX,
  20969   0 + UNICODE_MAX_TABLE_INDEX,
  20970   0 + UNICODE_MAX_TABLE_INDEX,
  20971   0 + UNICODE_MAX_TABLE_INDEX,
  20972   0 + UNICODE_MAX_TABLE_INDEX,
  20973   0 + UNICODE_MAX_TABLE_INDEX,
  20974   0 + UNICODE_MAX_TABLE_INDEX,
  20975   0 + UNICODE_MAX_TABLE_INDEX,
  20976   0 + UNICODE_MAX_TABLE_INDEX,
  20977   0 + UNICODE_MAX_TABLE_INDEX,
  20978   0 + UNICODE_MAX_TABLE_INDEX,
  20979   0 + UNICODE_MAX_TABLE_INDEX,
  20980   0 + UNICODE_MAX_TABLE_INDEX,
  20981   0 + UNICODE_MAX_TABLE_INDEX,
  20982   0 + UNICODE_MAX_TABLE_INDEX,
  20983   0 + UNICODE_MAX_TABLE_INDEX,
  20984   31 /* page 251 */,
  20985   0 + UNICODE_MAX_TABLE_INDEX,
  20986   0 + UNICODE_MAX_TABLE_INDEX,
  20987   32 /* page 254 */,
  20988   0 + UNICODE_MAX_TABLE_INDEX,
  20989   0 + UNICODE_MAX_TABLE_INDEX,
  20990   33 /* page 257 */,
  20991   34 /* page 258 */,
  20992   35 /* page 259 */,
  20993   0 + UNICODE_MAX_TABLE_INDEX,
  20994   0 + UNICODE_MAX_TABLE_INDEX,
  20995   0 + UNICODE_MAX_TABLE_INDEX,
  20996   0 + UNICODE_MAX_TABLE_INDEX,
  20997   0 + UNICODE_MAX_TABLE_INDEX,
  20998   0 + UNICODE_MAX_TABLE_INDEX,
  20999   36 /* page 266 */,
  21000   0 + UNICODE_MAX_TABLE_INDEX,
  21001   0 + UNICODE_MAX_TABLE_INDEX,
  21002   0 + UNICODE_MAX_TABLE_INDEX,
  21003   0 + UNICODE_MAX_TABLE_INDEX,
  21004   0 + UNICODE_MAX_TABLE_INDEX,
  21005   37 /* page 272 */,
  21006   38 /* page 273 */,
  21007   39 /* page 274 */,
  21008   40 /* page 275 */,
  21009   41 /* page 276 */,
  21010   42 /* page 277 */,
  21011   43 /* page 278 */,
  21012   44 /* page 279 */,
  21013   0 + UNICODE_MAX_TABLE_INDEX,
  21014   0 + UNICODE_MAX_TABLE_INDEX,
  21015   45 /* page 282 */,
  21016   0 + UNICODE_MAX_TABLE_INDEX,
  21017   46 /* page 284 */,
  21018   47 /* page 285 */,
  21019   0 + UNICODE_MAX_TABLE_INDEX,
  21020   0 + UNICODE_MAX_TABLE_INDEX,
  21021   0 + UNICODE_MAX_TABLE_INDEX,
  21022   0 + UNICODE_MAX_TABLE_INDEX,
  21023   0 + UNICODE_MAX_TABLE_INDEX,
  21024   0 + UNICODE_MAX_TABLE_INDEX,
  21025   0 + UNICODE_MAX_TABLE_INDEX,
  21026   0 + UNICODE_MAX_TABLE_INDEX,
  21027   0 + UNICODE_MAX_TABLE_INDEX,
  21028   0 + UNICODE_MAX_TABLE_INDEX,
  21029   0 + UNICODE_MAX_TABLE_INDEX,
  21030   0 + UNICODE_MAX_TABLE_INDEX,
  21031   0 + UNICODE_MAX_TABLE_INDEX,
  21032   0 + UNICODE_MAX_TABLE_INDEX,
  21033   0 + UNICODE_MAX_TABLE_INDEX,
  21034   0 + UNICODE_MAX_TABLE_INDEX,
  21035   0 + UNICODE_MAX_TABLE_INDEX,
  21036   0 + UNICODE_MAX_TABLE_INDEX,
  21037   0 + UNICODE_MAX_TABLE_INDEX,
  21038   0 + UNICODE_MAX_TABLE_INDEX,
  21039   0 + UNICODE_MAX_TABLE_INDEX,
  21040   0 + UNICODE_MAX_TABLE_INDEX,
  21041   0 + UNICODE_MAX_TABLE_INDEX,
  21042   0 + UNICODE_MAX_TABLE_INDEX,
  21043   0 + UNICODE_MAX_TABLE_INDEX,
  21044   0 + UNICODE_MAX_TABLE_INDEX,
  21045   0 + UNICODE_MAX_TABLE_INDEX,
  21046   0 + UNICODE_MAX_TABLE_INDEX,
  21047   0 + UNICODE_MAX_TABLE_INDEX,
  21048   0 + UNICODE_MAX_TABLE_INDEX,
  21049   0 + UNICODE_MAX_TABLE_INDEX,
  21050   0 + UNICODE_MAX_TABLE_INDEX,
  21051   0 + UNICODE_MAX_TABLE_INDEX,
  21052   0 + UNICODE_MAX_TABLE_INDEX,
  21053   0 + UNICODE_MAX_TABLE_INDEX,
  21054   0 + UNICODE_MAX_TABLE_INDEX,
  21055   0 + UNICODE_MAX_TABLE_INDEX,
  21056   0 + UNICODE_MAX_TABLE_INDEX,
  21057   0 + UNICODE_MAX_TABLE_INDEX,
  21058   0 + UNICODE_MAX_TABLE_INDEX,
  21059   0 + UNICODE_MAX_TABLE_INDEX,
  21060   0 + UNICODE_MAX_TABLE_INDEX,
  21061   0 + UNICODE_MAX_TABLE_INDEX,
  21062   0 + UNICODE_MAX_TABLE_INDEX,
  21063   0 + UNICODE_MAX_TABLE_INDEX,
  21064   0 + UNICODE_MAX_TABLE_INDEX,
  21065   0 + UNICODE_MAX_TABLE_INDEX,
  21066   0 + UNICODE_MAX_TABLE_INDEX,
  21067   0 + UNICODE_MAX_TABLE_INDEX,
  21068   0 + UNICODE_MAX_TABLE_INDEX,
  21069   0 + UNICODE_MAX_TABLE_INDEX,
  21070   0 + UNICODE_MAX_TABLE_INDEX,
  21071   0 + UNICODE_MAX_TABLE_INDEX,
  21072   0 + UNICODE_MAX_TABLE_INDEX,
  21073   0 + UNICODE_MAX_TABLE_INDEX,
  21074   0 + UNICODE_MAX_TABLE_INDEX,
  21075   0 + UNICODE_MAX_TABLE_INDEX,
  21076   0 + UNICODE_MAX_TABLE_INDEX,
  21077   0 + UNICODE_MAX_TABLE_INDEX,
  21078   0 + UNICODE_MAX_TABLE_INDEX,
  21079   0 + UNICODE_MAX_TABLE_INDEX,
  21080   0 + UNICODE_MAX_TABLE_INDEX,
  21081   0 + UNICODE_MAX_TABLE_INDEX,
  21082   0 + UNICODE_MAX_TABLE_INDEX,
  21083   0 + UNICODE_MAX_TABLE_INDEX,
  21084   0 + UNICODE_MAX_TABLE_INDEX,
  21085   0 + UNICODE_MAX_TABLE_INDEX,
  21086   0 + UNICODE_MAX_TABLE_INDEX,
  21087   0 + UNICODE_MAX_TABLE_INDEX,
  21088   0 + UNICODE_MAX_TABLE_INDEX,
  21089   0 + UNICODE_MAX_TABLE_INDEX,
  21090   0 + UNICODE_MAX_TABLE_INDEX,
  21091   0 + UNICODE_MAX_TABLE_INDEX,
  21092   0 + UNICODE_MAX_TABLE_INDEX,
  21093   0 + UNICODE_MAX_TABLE_INDEX,
  21094   0 + UNICODE_MAX_TABLE_INDEX,
  21095   48 /* page 362 */,
  21096   49 /* page 363 */,
  21097   0 + UNICODE_MAX_TABLE_INDEX,
  21098   0 + UNICODE_MAX_TABLE_INDEX,
  21099   0 + UNICODE_MAX_TABLE_INDEX,
  21100   0 + UNICODE_MAX_TABLE_INDEX,
  21101   0 + UNICODE_MAX_TABLE_INDEX,
  21102   0 + UNICODE_MAX_TABLE_INDEX,
  21103   0 + UNICODE_MAX_TABLE_INDEX,
  21104   0 + UNICODE_MAX_TABLE_INDEX,
  21105   0 + UNICODE_MAX_TABLE_INDEX,
  21106   0 + UNICODE_MAX_TABLE_INDEX,
  21107   0 + UNICODE_MAX_TABLE_INDEX,
  21108   0 + UNICODE_MAX_TABLE_INDEX,
  21109   0 + UNICODE_MAX_TABLE_INDEX,
  21110   0 + UNICODE_MAX_TABLE_INDEX,
  21111   0 + UNICODE_MAX_TABLE_INDEX,
  21112   0 + UNICODE_MAX_TABLE_INDEX,
  21113   0 + UNICODE_MAX_TABLE_INDEX,
  21114   0 + UNICODE_MAX_TABLE_INDEX,
  21115   0 + UNICODE_MAX_TABLE_INDEX,
  21116   0 + UNICODE_MAX_TABLE_INDEX,
  21117   0 + UNICODE_MAX_TABLE_INDEX,
  21118   0 + UNICODE_MAX_TABLE_INDEX,
  21119   0 + UNICODE_MAX_TABLE_INDEX,
  21120   0 + UNICODE_MAX_TABLE_INDEX,
  21121   0 + UNICODE_MAX_TABLE_INDEX,
  21122   0 + UNICODE_MAX_TABLE_INDEX,
  21123   0 + UNICODE_MAX_TABLE_INDEX,
  21124   0 + UNICODE_MAX_TABLE_INDEX,
  21125   0 + UNICODE_MAX_TABLE_INDEX,
  21126   0 + UNICODE_MAX_TABLE_INDEX,
  21127   0 + UNICODE_MAX_TABLE_INDEX,
  21128   0 + UNICODE_MAX_TABLE_INDEX,
  21129   0 + UNICODE_MAX_TABLE_INDEX,
  21130   0 + UNICODE_MAX_TABLE_INDEX,
  21131   0 + UNICODE_MAX_TABLE_INDEX,
  21132   0 + UNICODE_MAX_TABLE_INDEX,
  21133   0 + UNICODE_MAX_TABLE_INDEX,
  21134   0 + UNICODE_MAX_TABLE_INDEX,
  21135   0 + UNICODE_MAX_TABLE_INDEX,
  21136   0 + UNICODE_MAX_TABLE_INDEX,
  21137   0 + UNICODE_MAX_TABLE_INDEX,
  21138   0 + UNICODE_MAX_TABLE_INDEX,
  21139   0 + UNICODE_MAX_TABLE_INDEX,
  21140   0 + UNICODE_MAX_TABLE_INDEX,
  21141   0 + UNICODE_MAX_TABLE_INDEX,
  21142   0 + UNICODE_MAX_TABLE_INDEX,
  21143   0 + UNICODE_MAX_TABLE_INDEX,
  21144   0 + UNICODE_MAX_TABLE_INDEX,
  21145   0 + UNICODE_MAX_TABLE_INDEX,
  21146   0 + UNICODE_MAX_TABLE_INDEX,
  21147   0 + UNICODE_MAX_TABLE_INDEX,
  21148   0 + UNICODE_MAX_TABLE_INDEX,
  21149   0 + UNICODE_MAX_TABLE_INDEX,
  21150   0 + UNICODE_MAX_TABLE_INDEX,
  21151   0 + UNICODE_MAX_TABLE_INDEX,
  21152   0 + UNICODE_MAX_TABLE_INDEX,
  21153   0 + UNICODE_MAX_TABLE_INDEX,
  21154   0 + UNICODE_MAX_TABLE_INDEX,
  21155   0 + UNICODE_MAX_TABLE_INDEX,
  21156   0 + UNICODE_MAX_TABLE_INDEX,
  21157   0 + UNICODE_MAX_TABLE_INDEX,
  21158   0 + UNICODE_MAX_TABLE_INDEX,
  21159   0 + UNICODE_MAX_TABLE_INDEX,
  21160   0 + UNICODE_MAX_TABLE_INDEX,
  21161   0 + UNICODE_MAX_TABLE_INDEX,
  21162   0 + UNICODE_MAX_TABLE_INDEX,
  21163   0 + UNICODE_MAX_TABLE_INDEX,
  21164   0 + UNICODE_MAX_TABLE_INDEX,
  21165   0 + UNICODE_MAX_TABLE_INDEX,
  21166   0 + UNICODE_MAX_TABLE_INDEX,
  21167   0 + UNICODE_MAX_TABLE_INDEX,
  21168   0 + UNICODE_MAX_TABLE_INDEX,
  21169   0 + UNICODE_MAX_TABLE_INDEX,
  21170   0 + UNICODE_MAX_TABLE_INDEX,
  21171   0 + UNICODE_MAX_TABLE_INDEX,
  21172   0 + UNICODE_MAX_TABLE_INDEX,
  21173   0 + UNICODE_MAX_TABLE_INDEX,
  21174   0 + UNICODE_MAX_TABLE_INDEX,
  21175   0 + UNICODE_MAX_TABLE_INDEX,
  21176   0 + UNICODE_MAX_TABLE_INDEX,
  21177   50 /* page 444 */,
  21178   0 + UNICODE_MAX_TABLE_INDEX,
  21179   0 + UNICODE_MAX_TABLE_INDEX,
  21180   0 + UNICODE_MAX_TABLE_INDEX,
  21181   0 + UNICODE_MAX_TABLE_INDEX,
  21182   0 + UNICODE_MAX_TABLE_INDEX,
  21183   0 + UNICODE_MAX_TABLE_INDEX,
  21184   0 + UNICODE_MAX_TABLE_INDEX,
  21185   0 + UNICODE_MAX_TABLE_INDEX,
  21186   0 + UNICODE_MAX_TABLE_INDEX,
  21187   0 + UNICODE_MAX_TABLE_INDEX,
  21188   0 + UNICODE_MAX_TABLE_INDEX,
  21189   0 + UNICODE_MAX_TABLE_INDEX,
  21190   0 + UNICODE_MAX_TABLE_INDEX,
  21191   0 + UNICODE_MAX_TABLE_INDEX,
  21192   0 + UNICODE_MAX_TABLE_INDEX,
  21193   0 + UNICODE_MAX_TABLE_INDEX,
  21194   0 + UNICODE_MAX_TABLE_INDEX,
  21195   0 + UNICODE_MAX_TABLE_INDEX,
  21196   0 + UNICODE_MAX_TABLE_INDEX,
  21197   0 + UNICODE_MAX_TABLE_INDEX,
  21198   51 /* page 465 */,
  21199   52 /* page 466 */,
  21200   0 + UNICODE_MAX_TABLE_INDEX,
  21201   0 + UNICODE_MAX_TABLE_INDEX,
  21202   0 + UNICODE_MAX_TABLE_INDEX,
  21203   0 + UNICODE_MAX_TABLE_INDEX,
  21204   0 + UNICODE_MAX_TABLE_INDEX,
  21205   0 + UNICODE_MAX_TABLE_INDEX,
  21206   0 + UNICODE_MAX_TABLE_INDEX,
  21207   0 + UNICODE_MAX_TABLE_INDEX,
  21208   0 + UNICODE_MAX_TABLE_INDEX,
  21209   0 + UNICODE_MAX_TABLE_INDEX,
  21210   0 + UNICODE_MAX_TABLE_INDEX,
  21211   0 + UNICODE_MAX_TABLE_INDEX,
  21212   0 + UNICODE_MAX_TABLE_INDEX,
  21213   53 /* page 480 */,
  21214   0 + UNICODE_MAX_TABLE_INDEX,
  21215   0 + UNICODE_MAX_TABLE_INDEX,
  21216   0 + UNICODE_MAX_TABLE_INDEX,
  21217   0 + UNICODE_MAX_TABLE_INDEX,
  21218   0 + UNICODE_MAX_TABLE_INDEX,
  21219   0 + UNICODE_MAX_TABLE_INDEX,
  21220   0 + UNICODE_MAX_TABLE_INDEX,
  21221   54 /* page 488 */,
  21222   55 /* page 489 */,
  21223   0 + UNICODE_MAX_TABLE_INDEX,
  21224   0 + UNICODE_MAX_TABLE_INDEX,
  21225   0 + UNICODE_MAX_TABLE_INDEX,
  21226   0 + UNICODE_MAX_TABLE_INDEX,
  21227   0 + UNICODE_MAX_TABLE_INDEX,
  21228   0 + UNICODE_MAX_TABLE_INDEX,
  21229   0 + UNICODE_MAX_TABLE_INDEX,
  21230   0 + UNICODE_MAX_TABLE_INDEX,
  21231   0 + UNICODE_MAX_TABLE_INDEX,
  21232   0 + UNICODE_MAX_TABLE_INDEX,
  21233   0 + UNICODE_MAX_TABLE_INDEX,
  21234   0 + UNICODE_MAX_TABLE_INDEX,
  21235   0 + UNICODE_MAX_TABLE_INDEX,
  21236   0 + UNICODE_MAX_TABLE_INDEX,
  21237   0 + UNICODE_MAX_TABLE_INDEX,
  21238   0 + UNICODE_MAX_TABLE_INDEX,
  21239   0 + UNICODE_MAX_TABLE_INDEX,
  21240   0 + UNICODE_MAX_TABLE_INDEX,
  21241   0 + UNICODE_MAX_TABLE_INDEX,
  21242   0 + UNICODE_MAX_TABLE_INDEX,
  21243   0 + UNICODE_MAX_TABLE_INDEX,
  21244   0 + UNICODE_MAX_TABLE_INDEX,
  21245   0 + UNICODE_MAX_TABLE_INDEX,
  21246   0 + UNICODE_MAX_TABLE_INDEX,
  21247   0 + UNICODE_MAX_TABLE_INDEX,
  21248   0 + UNICODE_MAX_TABLE_INDEX,
  21249   0 + UNICODE_MAX_TABLE_INDEX,
  21250   0 + UNICODE_MAX_TABLE_INDEX,
  21251   0 + UNICODE_MAX_TABLE_INDEX,
  21252   0 + UNICODE_MAX_TABLE_INDEX,
  21253   0 + UNICODE_MAX_TABLE_INDEX,
  21254   0 + UNICODE_MAX_TABLE_INDEX,
  21255   0 + UNICODE_MAX_TABLE_INDEX,
  21256   0 + UNICODE_MAX_TABLE_INDEX,
  21257   0 + UNICODE_MAX_TABLE_INDEX,
  21258   0 + UNICODE_MAX_TABLE_INDEX,
  21259   0 + UNICODE_MAX_TABLE_INDEX,
  21260   0 + UNICODE_MAX_TABLE_INDEX,
  21261   0 + UNICODE_MAX_TABLE_INDEX,
  21262   0 + UNICODE_MAX_TABLE_INDEX,
  21263   0 + UNICODE_MAX_TABLE_INDEX,
  21264   0 + UNICODE_MAX_TABLE_INDEX,
  21265   0 + UNICODE_MAX_TABLE_INDEX,
  21266   0 + UNICODE_MAX_TABLE_INDEX,
  21267   0 + UNICODE_MAX_TABLE_INDEX,
  21268   0 + UNICODE_MAX_TABLE_INDEX,
  21269   0 + UNICODE_MAX_TABLE_INDEX,
  21270   0 + UNICODE_MAX_TABLE_INDEX,
  21271   0 + UNICODE_MAX_TABLE_INDEX,
  21272   0 + UNICODE_MAX_TABLE_INDEX,
  21273   0 + UNICODE_MAX_TABLE_INDEX,
  21274   0 + UNICODE_MAX_TABLE_INDEX,
  21275   0 + UNICODE_MAX_TABLE_INDEX,
  21276   0 + UNICODE_MAX_TABLE_INDEX,
  21277   0 + UNICODE_MAX_TABLE_INDEX,
  21278   0 + UNICODE_MAX_TABLE_INDEX,
  21279   0 + UNICODE_MAX_TABLE_INDEX,
  21280   0 + UNICODE_MAX_TABLE_INDEX,
  21281   0 + UNICODE_MAX_TABLE_INDEX,
  21282   0 + UNICODE_MAX_TABLE_INDEX,
  21283   0 + UNICODE_MAX_TABLE_INDEX,
  21284   0 + UNICODE_MAX_TABLE_INDEX,
  21285   0 + UNICODE_MAX_TABLE_INDEX,
  21286   0 + UNICODE_MAX_TABLE_INDEX,
  21287   0 + UNICODE_MAX_TABLE_INDEX,
  21288   0 + UNICODE_MAX_TABLE_INDEX,
  21289   0 + UNICODE_MAX_TABLE_INDEX,
  21290   0 + UNICODE_MAX_TABLE_INDEX,
  21291   0 + UNICODE_MAX_TABLE_INDEX,
  21292   0 + UNICODE_MAX_TABLE_INDEX,
  21293   0 + UNICODE_MAX_TABLE_INDEX,
  21294   0 + UNICODE_MAX_TABLE_INDEX,
  21295   0 + UNICODE_MAX_TABLE_INDEX,
  21296   0 + UNICODE_MAX_TABLE_INDEX,
  21297   0 + UNICODE_MAX_TABLE_INDEX,
  21298   0 + UNICODE_MAX_TABLE_INDEX,
  21299   0 + UNICODE_MAX_TABLE_INDEX,
  21300   0 + UNICODE_MAX_TABLE_INDEX,
  21301   0 + UNICODE_MAX_TABLE_INDEX,
  21302   0 + UNICODE_MAX_TABLE_INDEX,
  21303   0 + UNICODE_MAX_TABLE_INDEX,
  21304   0 + UNICODE_MAX_TABLE_INDEX,
  21305   0 + UNICODE_MAX_TABLE_INDEX,
  21306   0 + UNICODE_MAX_TABLE_INDEX,
  21307   0 + UNICODE_MAX_TABLE_INDEX,
  21308   0 + UNICODE_MAX_TABLE_INDEX,
  21309   0 + UNICODE_MAX_TABLE_INDEX,
  21310   0 + UNICODE_MAX_TABLE_INDEX,
  21311   0 + UNICODE_MAX_TABLE_INDEX,
  21312   0 + UNICODE_MAX_TABLE_INDEX,
  21313   0 + UNICODE_MAX_TABLE_INDEX,
  21314   0 + UNICODE_MAX_TABLE_INDEX,
  21315   0 + UNICODE_MAX_TABLE_INDEX,
  21316   0 + UNICODE_MAX_TABLE_INDEX,
  21317   0 + UNICODE_MAX_TABLE_INDEX,
  21318   0 + UNICODE_MAX_TABLE_INDEX,
  21319   0 + UNICODE_MAX_TABLE_INDEX,
  21320   0 + UNICODE_MAX_TABLE_INDEX,
  21321   0 + UNICODE_MAX_TABLE_INDEX,
  21322   0 + UNICODE_MAX_TABLE_INDEX,
  21323   0 + UNICODE_MAX_TABLE_INDEX,
  21324   0 + UNICODE_MAX_TABLE_INDEX,
  21325   0 + UNICODE_MAX_TABLE_INDEX,
  21326   0 + UNICODE_MAX_TABLE_INDEX,
  21327   0 + UNICODE_MAX_TABLE_INDEX,
  21328   0 + UNICODE_MAX_TABLE_INDEX,
  21329   0 + UNICODE_MAX_TABLE_INDEX,
  21330   0 + UNICODE_MAX_TABLE_INDEX,
  21331   0 + UNICODE_MAX_TABLE_INDEX,
  21332   0 + UNICODE_MAX_TABLE_INDEX,
  21333   0 + UNICODE_MAX_TABLE_INDEX,
  21334   0 + UNICODE_MAX_TABLE_INDEX,
  21335   0 + UNICODE_MAX_TABLE_INDEX,
  21336   0 + UNICODE_MAX_TABLE_INDEX,
  21337   0 + UNICODE_MAX_TABLE_INDEX,
  21338   0 + UNICODE_MAX_TABLE_INDEX,
  21339   0 + UNICODE_MAX_TABLE_INDEX,
  21340   0 + UNICODE_MAX_TABLE_INDEX,
  21341   0 + UNICODE_MAX_TABLE_INDEX,
  21342   0 + UNICODE_MAX_TABLE_INDEX,
  21343   0 + UNICODE_MAX_TABLE_INDEX,
  21344   0 + UNICODE_MAX_TABLE_INDEX,
  21345   0 + UNICODE_MAX_TABLE_INDEX,
  21346   0 + UNICODE_MAX_TABLE_INDEX,
  21347   0 + UNICODE_MAX_TABLE_INDEX,
  21348   0 + UNICODE_MAX_TABLE_INDEX,
  21349   0 + UNICODE_MAX_TABLE_INDEX,
  21350   0 + UNICODE_MAX_TABLE_INDEX,
  21351   0 + UNICODE_MAX_TABLE_INDEX,
  21352   0 + UNICODE_MAX_TABLE_INDEX,
  21353   0 + UNICODE_MAX_TABLE_INDEX,
  21354   0 + UNICODE_MAX_TABLE_INDEX,
  21355   0 + UNICODE_MAX_TABLE_INDEX,
  21356   0 + UNICODE_MAX_TABLE_INDEX,
  21357   0 + UNICODE_MAX_TABLE_INDEX,
  21358   0 + UNICODE_MAX_TABLE_INDEX,
  21359   0 + UNICODE_MAX_TABLE_INDEX,
  21360   0 + UNICODE_MAX_TABLE_INDEX,
  21361   0 + UNICODE_MAX_TABLE_INDEX,
  21362   0 + UNICODE_MAX_TABLE_INDEX,
  21363   0 + UNICODE_MAX_TABLE_INDEX,
  21364   0 + UNICODE_MAX_TABLE_INDEX,
  21365   0 + UNICODE_MAX_TABLE_INDEX,
  21366   0 + UNICODE_MAX_TABLE_INDEX,
  21367   0 + UNICODE_MAX_TABLE_INDEX,
  21368   0 + UNICODE_MAX_TABLE_INDEX,
  21369   0 + UNICODE_MAX_TABLE_INDEX,
  21370   0 + UNICODE_MAX_TABLE_INDEX,
  21371   0 + UNICODE_MAX_TABLE_INDEX,
  21372   0 + UNICODE_MAX_TABLE_INDEX,
  21373   0 + UNICODE_MAX_TABLE_INDEX,
  21374   0 + UNICODE_MAX_TABLE_INDEX,
  21375   0 + UNICODE_MAX_TABLE_INDEX,
  21376   0 + UNICODE_MAX_TABLE_INDEX,
  21377   0 + UNICODE_MAX_TABLE_INDEX,
  21378   0 + UNICODE_MAX_TABLE_INDEX,
  21379   0 + UNICODE_MAX_TABLE_INDEX,
  21380   0 + UNICODE_MAX_TABLE_INDEX,
  21381   0 + UNICODE_MAX_TABLE_INDEX,
  21382   0 + UNICODE_MAX_TABLE_INDEX,
  21383   0 + UNICODE_MAX_TABLE_INDEX,
  21384   0 + UNICODE_MAX_TABLE_INDEX,
  21385   0 + UNICODE_MAX_TABLE_INDEX,
  21386   0 + UNICODE_MAX_TABLE_INDEX,
  21387   0 + UNICODE_MAX_TABLE_INDEX,
  21388   0 + UNICODE_MAX_TABLE_INDEX,
  21389   0 + UNICODE_MAX_TABLE_INDEX,
  21390   0 + UNICODE_MAX_TABLE_INDEX,
  21391   0 + UNICODE_MAX_TABLE_INDEX,
  21392   0 + UNICODE_MAX_TABLE_INDEX,
  21393   0 + UNICODE_MAX_TABLE_INDEX,
  21394   0 + UNICODE_MAX_TABLE_INDEX,
  21395   0 + UNICODE_MAX_TABLE_INDEX,
  21396   0 + UNICODE_MAX_TABLE_INDEX,
  21397   0 + UNICODE_MAX_TABLE_INDEX,
  21398   0 + UNICODE_MAX_TABLE_INDEX,
  21399   0 + UNICODE_MAX_TABLE_INDEX,
  21400   0 + UNICODE_MAX_TABLE_INDEX,
  21401   0 + UNICODE_MAX_TABLE_INDEX,
  21402   0 + UNICODE_MAX_TABLE_INDEX,
  21403   0 + UNICODE_MAX_TABLE_INDEX,
  21404   0 + UNICODE_MAX_TABLE_INDEX,
  21405   0 + UNICODE_MAX_TABLE_INDEX,
  21406   0 + UNICODE_MAX_TABLE_INDEX,
  21407   0 + UNICODE_MAX_TABLE_INDEX,
  21408   0 + UNICODE_MAX_TABLE_INDEX,
  21409   0 + UNICODE_MAX_TABLE_INDEX,
  21410   0 + UNICODE_MAX_TABLE_INDEX,
  21411   0 + UNICODE_MAX_TABLE_INDEX,
  21412   0 + UNICODE_MAX_TABLE_INDEX,
  21413   0 + UNICODE_MAX_TABLE_INDEX,
  21414   0 + UNICODE_MAX_TABLE_INDEX,
  21415   0 + UNICODE_MAX_TABLE_INDEX,
  21416   0 + UNICODE_MAX_TABLE_INDEX,
  21417   0 + UNICODE_MAX_TABLE_INDEX,
  21418   0 + UNICODE_MAX_TABLE_INDEX,
  21419   0 + UNICODE_MAX_TABLE_INDEX,
  21420   0 + UNICODE_MAX_TABLE_INDEX,
  21421   0 + UNICODE_MAX_TABLE_INDEX,
  21422   0 + UNICODE_MAX_TABLE_INDEX,
  21423   0 + UNICODE_MAX_TABLE_INDEX,
  21424   0 + UNICODE_MAX_TABLE_INDEX,
  21425   0 + UNICODE_MAX_TABLE_INDEX,
  21426   0 + UNICODE_MAX_TABLE_INDEX,
  21427   0 + UNICODE_MAX_TABLE_INDEX,
  21428   0 + UNICODE_MAX_TABLE_INDEX,
  21429   0 + UNICODE_MAX_TABLE_INDEX,
  21430   0 + UNICODE_MAX_TABLE_INDEX,
  21431   0 + UNICODE_MAX_TABLE_INDEX,
  21432   0 + UNICODE_MAX_TABLE_INDEX,
  21433   0 + UNICODE_MAX_TABLE_INDEX,
  21434   0 + UNICODE_MAX_TABLE_INDEX,
  21435   0 + UNICODE_MAX_TABLE_INDEX,
  21436   0 + UNICODE_MAX_TABLE_INDEX,
  21437   0 + UNICODE_MAX_TABLE_INDEX,
  21438   0 + UNICODE_MAX_TABLE_INDEX,
  21439   0 + UNICODE_MAX_TABLE_INDEX,
  21440   0 + UNICODE_MAX_TABLE_INDEX,
  21441   0 + UNICODE_MAX_TABLE_INDEX,
  21442   0 + UNICODE_MAX_TABLE_INDEX,
  21443   0 + UNICODE_MAX_TABLE_INDEX,
  21444   0 + UNICODE_MAX_TABLE_INDEX,
  21445   0 + UNICODE_MAX_TABLE_INDEX,
  21446   0 + UNICODE_MAX_TABLE_INDEX,
  21447   0 + UNICODE_MAX_TABLE_INDEX,
  21448   0 + UNICODE_MAX_TABLE_INDEX,
  21449   0 + UNICODE_MAX_TABLE_INDEX,
  21450   0 + UNICODE_MAX_TABLE_INDEX,
  21451   0 + UNICODE_MAX_TABLE_INDEX,
  21452   0 + UNICODE_MAX_TABLE_INDEX,
  21453   0 + UNICODE_MAX_TABLE_INDEX,
  21454   0 + UNICODE_MAX_TABLE_INDEX,
  21455   0 + UNICODE_MAX_TABLE_INDEX,
  21456   0 + UNICODE_MAX_TABLE_INDEX,
  21457   0 + UNICODE_MAX_TABLE_INDEX,
  21458   0 + UNICODE_MAX_TABLE_INDEX,
  21459   0 + UNICODE_MAX_TABLE_INDEX,
  21460   0 + UNICODE_MAX_TABLE_INDEX,
  21461   0 + UNICODE_MAX_TABLE_INDEX,
  21462   0 + UNICODE_MAX_TABLE_INDEX,
  21463   0 + UNICODE_MAX_TABLE_INDEX,
  21464   0 + UNICODE_MAX_TABLE_INDEX,
  21465   0 + UNICODE_MAX_TABLE_INDEX,
  21466   0 + UNICODE_MAX_TABLE_INDEX,
  21467   0 + UNICODE_MAX_TABLE_INDEX,
  21468   0 + UNICODE_MAX_TABLE_INDEX,
  21469   0 + UNICODE_MAX_TABLE_INDEX,
  21470   0 + UNICODE_MAX_TABLE_INDEX,
  21471   0 + UNICODE_MAX_TABLE_INDEX,
  21472   0 + UNICODE_MAX_TABLE_INDEX,
  21473   0 + UNICODE_MAX_TABLE_INDEX,
  21474   0 + UNICODE_MAX_TABLE_INDEX,
  21475   0 + UNICODE_MAX_TABLE_INDEX,
  21476   0 + UNICODE_MAX_TABLE_INDEX,
  21477   0 + UNICODE_MAX_TABLE_INDEX,
  21478   0 + UNICODE_MAX_TABLE_INDEX,
  21479   0 + UNICODE_MAX_TABLE_INDEX,
  21480   0 + UNICODE_MAX_TABLE_INDEX,
  21481   0 + UNICODE_MAX_TABLE_INDEX,
  21482   0 + UNICODE_MAX_TABLE_INDEX,
  21483   0 + UNICODE_MAX_TABLE_INDEX,
  21484   0 + UNICODE_MAX_TABLE_INDEX,
  21485   0 + UNICODE_MAX_TABLE_INDEX,
  21486   0 + UNICODE_MAX_TABLE_INDEX,
  21487   0 + UNICODE_MAX_TABLE_INDEX,
  21488   0 + UNICODE_MAX_TABLE_INDEX,
  21489   0 + UNICODE_MAX_TABLE_INDEX,
  21490   0 + UNICODE_MAX_TABLE_INDEX,
  21491   0 + UNICODE_MAX_TABLE_INDEX,
  21492   0 + UNICODE_MAX_TABLE_INDEX,
  21493   0 + UNICODE_MAX_TABLE_INDEX,
  21494   0 + UNICODE_MAX_TABLE_INDEX,
  21495   0 + UNICODE_MAX_TABLE_INDEX
  21496 };
  21497 
  21498 static const int16_t combining_class_table_part2[768] = {
  21499   0 + UNICODE_MAX_TABLE_INDEX,
  21500   0 + UNICODE_MAX_TABLE_INDEX,
  21501   0 + UNICODE_MAX_TABLE_INDEX,
  21502   0 + UNICODE_MAX_TABLE_INDEX,
  21503   0 + UNICODE_MAX_TABLE_INDEX,
  21504   0 + UNICODE_MAX_TABLE_INDEX,
  21505   0 + UNICODE_MAX_TABLE_INDEX,
  21506   0 + UNICODE_MAX_TABLE_INDEX,
  21507   0 + UNICODE_MAX_TABLE_INDEX,
  21508   0 + UNICODE_MAX_TABLE_INDEX,
  21509   0 + UNICODE_MAX_TABLE_INDEX,
  21510   0 + UNICODE_MAX_TABLE_INDEX,
  21511   0 + UNICODE_MAX_TABLE_INDEX,
  21512   0 + UNICODE_MAX_TABLE_INDEX,
  21513   0 + UNICODE_MAX_TABLE_INDEX,
  21514   0 + UNICODE_MAX_TABLE_INDEX,
  21515   0 + UNICODE_MAX_TABLE_INDEX,
  21516   0 + UNICODE_MAX_TABLE_INDEX,
  21517   0 + UNICODE_MAX_TABLE_INDEX,
  21518   0 + UNICODE_MAX_TABLE_INDEX,
  21519   0 + UNICODE_MAX_TABLE_INDEX,
  21520   0 + UNICODE_MAX_TABLE_INDEX,
  21521   0 + UNICODE_MAX_TABLE_INDEX,
  21522   0 + UNICODE_MAX_TABLE_INDEX,
  21523   0 + UNICODE_MAX_TABLE_INDEX,
  21524   0 + UNICODE_MAX_TABLE_INDEX,
  21525   0 + UNICODE_MAX_TABLE_INDEX,
  21526   0 + UNICODE_MAX_TABLE_INDEX,
  21527   0 + UNICODE_MAX_TABLE_INDEX,
  21528   0 + UNICODE_MAX_TABLE_INDEX,
  21529   0 + UNICODE_MAX_TABLE_INDEX,
  21530   0 + UNICODE_MAX_TABLE_INDEX,
  21531   0 + UNICODE_MAX_TABLE_INDEX,
  21532   0 + UNICODE_MAX_TABLE_INDEX,
  21533   0 + UNICODE_MAX_TABLE_INDEX,
  21534   0 + UNICODE_MAX_TABLE_INDEX,
  21535   0 + UNICODE_MAX_TABLE_INDEX,
  21536   0 + UNICODE_MAX_TABLE_INDEX,
  21537   0 + UNICODE_MAX_TABLE_INDEX,
  21538   0 + UNICODE_MAX_TABLE_INDEX,
  21539   0 + UNICODE_MAX_TABLE_INDEX,
  21540   0 + UNICODE_MAX_TABLE_INDEX,
  21541   0 + UNICODE_MAX_TABLE_INDEX,
  21542   0 + UNICODE_MAX_TABLE_INDEX,
  21543   0 + UNICODE_MAX_TABLE_INDEX,
  21544   0 + UNICODE_MAX_TABLE_INDEX,
  21545   0 + UNICODE_MAX_TABLE_INDEX,
  21546   0 + UNICODE_MAX_TABLE_INDEX,
  21547   0 + UNICODE_MAX_TABLE_INDEX,
  21548   0 + UNICODE_MAX_TABLE_INDEX,
  21549   0 + UNICODE_MAX_TABLE_INDEX,
  21550   0 + UNICODE_MAX_TABLE_INDEX,
  21551   0 + UNICODE_MAX_TABLE_INDEX,
  21552   0 + UNICODE_MAX_TABLE_INDEX,
  21553   0 + UNICODE_MAX_TABLE_INDEX,
  21554   0 + UNICODE_MAX_TABLE_INDEX,
  21555   0 + UNICODE_MAX_TABLE_INDEX,
  21556   0 + UNICODE_MAX_TABLE_INDEX,
  21557   0 + UNICODE_MAX_TABLE_INDEX,
  21558   0 + UNICODE_MAX_TABLE_INDEX,
  21559   0 + UNICODE_MAX_TABLE_INDEX,
  21560   0 + UNICODE_MAX_TABLE_INDEX,
  21561   0 + UNICODE_MAX_TABLE_INDEX,
  21562   0 + UNICODE_MAX_TABLE_INDEX,
  21563   0 + UNICODE_MAX_TABLE_INDEX,
  21564   0 + UNICODE_MAX_TABLE_INDEX,
  21565   0 + UNICODE_MAX_TABLE_INDEX,
  21566   0 + UNICODE_MAX_TABLE_INDEX,
  21567   0 + UNICODE_MAX_TABLE_INDEX,
  21568   0 + UNICODE_MAX_TABLE_INDEX,
  21569   0 + UNICODE_MAX_TABLE_INDEX,
  21570   0 + UNICODE_MAX_TABLE_INDEX,
  21571   0 + UNICODE_MAX_TABLE_INDEX,
  21572   0 + UNICODE_MAX_TABLE_INDEX,
  21573   0 + UNICODE_MAX_TABLE_INDEX,
  21574   0 + UNICODE_MAX_TABLE_INDEX,
  21575   0 + UNICODE_MAX_TABLE_INDEX,
  21576   0 + UNICODE_MAX_TABLE_INDEX,
  21577   0 + UNICODE_MAX_TABLE_INDEX,
  21578   0 + UNICODE_MAX_TABLE_INDEX,
  21579   0 + UNICODE_MAX_TABLE_INDEX,
  21580   0 + UNICODE_MAX_TABLE_INDEX,
  21581   0 + UNICODE_MAX_TABLE_INDEX,
  21582   0 + UNICODE_MAX_TABLE_INDEX,
  21583   0 + UNICODE_MAX_TABLE_INDEX,
  21584   0 + UNICODE_MAX_TABLE_INDEX,
  21585   0 + UNICODE_MAX_TABLE_INDEX,
  21586   0 + UNICODE_MAX_TABLE_INDEX,
  21587   0 + UNICODE_MAX_TABLE_INDEX,
  21588   0 + UNICODE_MAX_TABLE_INDEX,
  21589   0 + UNICODE_MAX_TABLE_INDEX,
  21590   0 + UNICODE_MAX_TABLE_INDEX,
  21591   0 + UNICODE_MAX_TABLE_INDEX,
  21592   0 + UNICODE_MAX_TABLE_INDEX,
  21593   0 + UNICODE_MAX_TABLE_INDEX,
  21594   0 + UNICODE_MAX_TABLE_INDEX,
  21595   0 + UNICODE_MAX_TABLE_INDEX,
  21596   0 + UNICODE_MAX_TABLE_INDEX,
  21597   0 + UNICODE_MAX_TABLE_INDEX,
  21598   0 + UNICODE_MAX_TABLE_INDEX,
  21599   0 + UNICODE_MAX_TABLE_INDEX,
  21600   0 + UNICODE_MAX_TABLE_INDEX,
  21601   0 + UNICODE_MAX_TABLE_INDEX,
  21602   0 + UNICODE_MAX_TABLE_INDEX,
  21603   0 + UNICODE_MAX_TABLE_INDEX,
  21604   0 + UNICODE_MAX_TABLE_INDEX,
  21605   0 + UNICODE_MAX_TABLE_INDEX,
  21606   0 + UNICODE_MAX_TABLE_INDEX,
  21607   0 + UNICODE_MAX_TABLE_INDEX,
  21608   0 + UNICODE_MAX_TABLE_INDEX,
  21609   0 + UNICODE_MAX_TABLE_INDEX,
  21610   0 + UNICODE_MAX_TABLE_INDEX,
  21611   0 + UNICODE_MAX_TABLE_INDEX,
  21612   0 + UNICODE_MAX_TABLE_INDEX,
  21613   0 + UNICODE_MAX_TABLE_INDEX,
  21614   0 + UNICODE_MAX_TABLE_INDEX,
  21615   0 + UNICODE_MAX_TABLE_INDEX,
  21616   0 + UNICODE_MAX_TABLE_INDEX,
  21617   0 + UNICODE_MAX_TABLE_INDEX,
  21618   0 + UNICODE_MAX_TABLE_INDEX,
  21619   0 + UNICODE_MAX_TABLE_INDEX,
  21620   0 + UNICODE_MAX_TABLE_INDEX,
  21621   0 + UNICODE_MAX_TABLE_INDEX,
  21622   0 + UNICODE_MAX_TABLE_INDEX,
  21623   0 + UNICODE_MAX_TABLE_INDEX,
  21624   0 + UNICODE_MAX_TABLE_INDEX,
  21625   0 + UNICODE_MAX_TABLE_INDEX,
  21626   0 + UNICODE_MAX_TABLE_INDEX,
  21627   0 + UNICODE_MAX_TABLE_INDEX,
  21628   0 + UNICODE_MAX_TABLE_INDEX,
  21629   0 + UNICODE_MAX_TABLE_INDEX,
  21630   0 + UNICODE_MAX_TABLE_INDEX,
  21631   0 + UNICODE_MAX_TABLE_INDEX,
  21632   0 + UNICODE_MAX_TABLE_INDEX,
  21633   0 + UNICODE_MAX_TABLE_INDEX,
  21634   0 + UNICODE_MAX_TABLE_INDEX,
  21635   0 + UNICODE_MAX_TABLE_INDEX,
  21636   0 + UNICODE_MAX_TABLE_INDEX,
  21637   0 + UNICODE_MAX_TABLE_INDEX,
  21638   0 + UNICODE_MAX_TABLE_INDEX,
  21639   0 + UNICODE_MAX_TABLE_INDEX,
  21640   0 + UNICODE_MAX_TABLE_INDEX,
  21641   0 + UNICODE_MAX_TABLE_INDEX,
  21642   0 + UNICODE_MAX_TABLE_INDEX,
  21643   0 + UNICODE_MAX_TABLE_INDEX,
  21644   0 + UNICODE_MAX_TABLE_INDEX,
  21645   0 + UNICODE_MAX_TABLE_INDEX,
  21646   0 + UNICODE_MAX_TABLE_INDEX,
  21647   0 + UNICODE_MAX_TABLE_INDEX,
  21648   0 + UNICODE_MAX_TABLE_INDEX,
  21649   0 + UNICODE_MAX_TABLE_INDEX,
  21650   0 + UNICODE_MAX_TABLE_INDEX,
  21651   0 + UNICODE_MAX_TABLE_INDEX,
  21652   0 + UNICODE_MAX_TABLE_INDEX,
  21653   0 + UNICODE_MAX_TABLE_INDEX,
  21654   0 + UNICODE_MAX_TABLE_INDEX,
  21655   0 + UNICODE_MAX_TABLE_INDEX,
  21656   0 + UNICODE_MAX_TABLE_INDEX,
  21657   0 + UNICODE_MAX_TABLE_INDEX,
  21658   0 + UNICODE_MAX_TABLE_INDEX,
  21659   0 + UNICODE_MAX_TABLE_INDEX,
  21660   0 + UNICODE_MAX_TABLE_INDEX,
  21661   0 + UNICODE_MAX_TABLE_INDEX,
  21662   0 + UNICODE_MAX_TABLE_INDEX,
  21663   0 + UNICODE_MAX_TABLE_INDEX,
  21664   0 + UNICODE_MAX_TABLE_INDEX,
  21665   0 + UNICODE_MAX_TABLE_INDEX,
  21666   0 + UNICODE_MAX_TABLE_INDEX,
  21667   0 + UNICODE_MAX_TABLE_INDEX,
  21668   0 + UNICODE_MAX_TABLE_INDEX,
  21669   0 + UNICODE_MAX_TABLE_INDEX,
  21670   0 + UNICODE_MAX_TABLE_INDEX,
  21671   0 + UNICODE_MAX_TABLE_INDEX,
  21672   0 + UNICODE_MAX_TABLE_INDEX,
  21673   0 + UNICODE_MAX_TABLE_INDEX,
  21674   0 + UNICODE_MAX_TABLE_INDEX,
  21675   0 + UNICODE_MAX_TABLE_INDEX,
  21676   0 + UNICODE_MAX_TABLE_INDEX,
  21677   0 + UNICODE_MAX_TABLE_INDEX,
  21678   0 + UNICODE_MAX_TABLE_INDEX,
  21679   0 + UNICODE_MAX_TABLE_INDEX,
  21680   0 + UNICODE_MAX_TABLE_INDEX,
  21681   0 + UNICODE_MAX_TABLE_INDEX,
  21682   0 + UNICODE_MAX_TABLE_INDEX,
  21683   0 + UNICODE_MAX_TABLE_INDEX,
  21684   0 + UNICODE_MAX_TABLE_INDEX,
  21685   0 + UNICODE_MAX_TABLE_INDEX,
  21686   0 + UNICODE_MAX_TABLE_INDEX,
  21687   0 + UNICODE_MAX_TABLE_INDEX,
  21688   0 + UNICODE_MAX_TABLE_INDEX,
  21689   0 + UNICODE_MAX_TABLE_INDEX,
  21690   0 + UNICODE_MAX_TABLE_INDEX,
  21691   0 + UNICODE_MAX_TABLE_INDEX,
  21692   0 + UNICODE_MAX_TABLE_INDEX,
  21693   0 + UNICODE_MAX_TABLE_INDEX,
  21694   0 + UNICODE_MAX_TABLE_INDEX,
  21695   0 + UNICODE_MAX_TABLE_INDEX,
  21696   0 + UNICODE_MAX_TABLE_INDEX,
  21697   0 + UNICODE_MAX_TABLE_INDEX,
  21698   0 + UNICODE_MAX_TABLE_INDEX,
  21699   0 + UNICODE_MAX_TABLE_INDEX,
  21700   0 + UNICODE_MAX_TABLE_INDEX,
  21701   0 + UNICODE_MAX_TABLE_INDEX,
  21702   0 + UNICODE_MAX_TABLE_INDEX,
  21703   0 + UNICODE_MAX_TABLE_INDEX,
  21704   0 + UNICODE_MAX_TABLE_INDEX,
  21705   0 + UNICODE_MAX_TABLE_INDEX,
  21706   0 + UNICODE_MAX_TABLE_INDEX,
  21707   0 + UNICODE_MAX_TABLE_INDEX,
  21708   0 + UNICODE_MAX_TABLE_INDEX,
  21709   0 + UNICODE_MAX_TABLE_INDEX,
  21710   0 + UNICODE_MAX_TABLE_INDEX,
  21711   0 + UNICODE_MAX_TABLE_INDEX,
  21712   0 + UNICODE_MAX_TABLE_INDEX,
  21713   0 + UNICODE_MAX_TABLE_INDEX,
  21714   0 + UNICODE_MAX_TABLE_INDEX,
  21715   0 + UNICODE_MAX_TABLE_INDEX,
  21716   0 + UNICODE_MAX_TABLE_INDEX,
  21717   0 + UNICODE_MAX_TABLE_INDEX,
  21718   0 + UNICODE_MAX_TABLE_INDEX,
  21719   0 + UNICODE_MAX_TABLE_INDEX,
  21720   0 + UNICODE_MAX_TABLE_INDEX,
  21721   0 + UNICODE_MAX_TABLE_INDEX,
  21722   0 + UNICODE_MAX_TABLE_INDEX,
  21723   0 + UNICODE_MAX_TABLE_INDEX,
  21724   0 + UNICODE_MAX_TABLE_INDEX,
  21725   0 + UNICODE_MAX_TABLE_INDEX,
  21726   0 + UNICODE_MAX_TABLE_INDEX,
  21727   0 + UNICODE_MAX_TABLE_INDEX,
  21728   0 + UNICODE_MAX_TABLE_INDEX,
  21729   0 + UNICODE_MAX_TABLE_INDEX,
  21730   0 + UNICODE_MAX_TABLE_INDEX,
  21731   0 + UNICODE_MAX_TABLE_INDEX,
  21732   0 + UNICODE_MAX_TABLE_INDEX,
  21733   0 + UNICODE_MAX_TABLE_INDEX,
  21734   0 + UNICODE_MAX_TABLE_INDEX,
  21735   0 + UNICODE_MAX_TABLE_INDEX,
  21736   0 + UNICODE_MAX_TABLE_INDEX,
  21737   0 + UNICODE_MAX_TABLE_INDEX,
  21738   0 + UNICODE_MAX_TABLE_INDEX,
  21739   0 + UNICODE_MAX_TABLE_INDEX,
  21740   0 + UNICODE_MAX_TABLE_INDEX,
  21741   0 + UNICODE_MAX_TABLE_INDEX,
  21742   0 + UNICODE_MAX_TABLE_INDEX,
  21743   0 + UNICODE_MAX_TABLE_INDEX,
  21744   0 + UNICODE_MAX_TABLE_INDEX,
  21745   0 + UNICODE_MAX_TABLE_INDEX,
  21746   0 + UNICODE_MAX_TABLE_INDEX,
  21747   0 + UNICODE_MAX_TABLE_INDEX,
  21748   0 + UNICODE_MAX_TABLE_INDEX,
  21749   0 + UNICODE_MAX_TABLE_INDEX,
  21750   0 + UNICODE_MAX_TABLE_INDEX,
  21751   0 + UNICODE_MAX_TABLE_INDEX,
  21752   0 + UNICODE_MAX_TABLE_INDEX,
  21753   0 + UNICODE_MAX_TABLE_INDEX,
  21754   0 + UNICODE_MAX_TABLE_INDEX,
  21755   0 + UNICODE_MAX_TABLE_INDEX,
  21756   0 + UNICODE_MAX_TABLE_INDEX,
  21757   0 + UNICODE_MAX_TABLE_INDEX,
  21758   0 + UNICODE_MAX_TABLE_INDEX,
  21759   0 + UNICODE_MAX_TABLE_INDEX,
  21760   0 + UNICODE_MAX_TABLE_INDEX,
  21761   0 + UNICODE_MAX_TABLE_INDEX,
  21762   0 + UNICODE_MAX_TABLE_INDEX,
  21763   0 + UNICODE_MAX_TABLE_INDEX,
  21764   0 + UNICODE_MAX_TABLE_INDEX,
  21765   0 + UNICODE_MAX_TABLE_INDEX,
  21766   0 + UNICODE_MAX_TABLE_INDEX,
  21767   0 + UNICODE_MAX_TABLE_INDEX,
  21768   0 + UNICODE_MAX_TABLE_INDEX,
  21769   0 + UNICODE_MAX_TABLE_INDEX,
  21770   0 + UNICODE_MAX_TABLE_INDEX,
  21771   0 + UNICODE_MAX_TABLE_INDEX,
  21772   0 + UNICODE_MAX_TABLE_INDEX,
  21773   0 + UNICODE_MAX_TABLE_INDEX,
  21774   0 + UNICODE_MAX_TABLE_INDEX,
  21775   0 + UNICODE_MAX_TABLE_INDEX,
  21776   0 + UNICODE_MAX_TABLE_INDEX,
  21777   0 + UNICODE_MAX_TABLE_INDEX,
  21778   0 + UNICODE_MAX_TABLE_INDEX,
  21779   0 + UNICODE_MAX_TABLE_INDEX,
  21780   0 + UNICODE_MAX_TABLE_INDEX,
  21781   0 + UNICODE_MAX_TABLE_INDEX,
  21782   0 + UNICODE_MAX_TABLE_INDEX,
  21783   0 + UNICODE_MAX_TABLE_INDEX,
  21784   0 + UNICODE_MAX_TABLE_INDEX,
  21785   0 + UNICODE_MAX_TABLE_INDEX,
  21786   0 + UNICODE_MAX_TABLE_INDEX,
  21787   0 + UNICODE_MAX_TABLE_INDEX,
  21788   0 + UNICODE_MAX_TABLE_INDEX,
  21789   0 + UNICODE_MAX_TABLE_INDEX,
  21790   0 + UNICODE_MAX_TABLE_INDEX,
  21791   0 + UNICODE_MAX_TABLE_INDEX,
  21792   0 + UNICODE_MAX_TABLE_INDEX,
  21793   0 + UNICODE_MAX_TABLE_INDEX,
  21794   0 + UNICODE_MAX_TABLE_INDEX,
  21795   0 + UNICODE_MAX_TABLE_INDEX,
  21796   0 + UNICODE_MAX_TABLE_INDEX,
  21797   0 + UNICODE_MAX_TABLE_INDEX,
  21798   0 + UNICODE_MAX_TABLE_INDEX,
  21799   0 + UNICODE_MAX_TABLE_INDEX,
  21800   0 + UNICODE_MAX_TABLE_INDEX,
  21801   0 + UNICODE_MAX_TABLE_INDEX,
  21802   0 + UNICODE_MAX_TABLE_INDEX,
  21803   0 + UNICODE_MAX_TABLE_INDEX,
  21804   0 + UNICODE_MAX_TABLE_INDEX,
  21805   0 + UNICODE_MAX_TABLE_INDEX,
  21806   0 + UNICODE_MAX_TABLE_INDEX,
  21807   0 + UNICODE_MAX_TABLE_INDEX,
  21808   0 + UNICODE_MAX_TABLE_INDEX,
  21809   0 + UNICODE_MAX_TABLE_INDEX,
  21810   0 + UNICODE_MAX_TABLE_INDEX,
  21811   0 + UNICODE_MAX_TABLE_INDEX,
  21812   0 + UNICODE_MAX_TABLE_INDEX,
  21813   0 + UNICODE_MAX_TABLE_INDEX,
  21814   0 + UNICODE_MAX_TABLE_INDEX,
  21815   0 + UNICODE_MAX_TABLE_INDEX,
  21816   0 + UNICODE_MAX_TABLE_INDEX,
  21817   0 + UNICODE_MAX_TABLE_INDEX,
  21818   0 + UNICODE_MAX_TABLE_INDEX,
  21819   0 + UNICODE_MAX_TABLE_INDEX,
  21820   0 + UNICODE_MAX_TABLE_INDEX,
  21821   0 + UNICODE_MAX_TABLE_INDEX,
  21822   0 + UNICODE_MAX_TABLE_INDEX,
  21823   0 + UNICODE_MAX_TABLE_INDEX,
  21824   0 + UNICODE_MAX_TABLE_INDEX,
  21825   0 + UNICODE_MAX_TABLE_INDEX,
  21826   0 + UNICODE_MAX_TABLE_INDEX,
  21827   0 + UNICODE_MAX_TABLE_INDEX,
  21828   0 + UNICODE_MAX_TABLE_INDEX,
  21829   0 + UNICODE_MAX_TABLE_INDEX,
  21830   0 + UNICODE_MAX_TABLE_INDEX,
  21831   0 + UNICODE_MAX_TABLE_INDEX,
  21832   0 + UNICODE_MAX_TABLE_INDEX,
  21833   0 + UNICODE_MAX_TABLE_INDEX,
  21834   0 + UNICODE_MAX_TABLE_INDEX,
  21835   0 + UNICODE_MAX_TABLE_INDEX,
  21836   0 + UNICODE_MAX_TABLE_INDEX,
  21837   0 + UNICODE_MAX_TABLE_INDEX,
  21838   0 + UNICODE_MAX_TABLE_INDEX,
  21839   0 + UNICODE_MAX_TABLE_INDEX,
  21840   0 + UNICODE_MAX_TABLE_INDEX,
  21841   0 + UNICODE_MAX_TABLE_INDEX,
  21842   0 + UNICODE_MAX_TABLE_INDEX,
  21843   0 + UNICODE_MAX_TABLE_INDEX,
  21844   0 + UNICODE_MAX_TABLE_INDEX,
  21845   0 + UNICODE_MAX_TABLE_INDEX,
  21846   0 + UNICODE_MAX_TABLE_INDEX,
  21847   0 + UNICODE_MAX_TABLE_INDEX,
  21848   0 + UNICODE_MAX_TABLE_INDEX,
  21849   0 + UNICODE_MAX_TABLE_INDEX,
  21850   0 + UNICODE_MAX_TABLE_INDEX,
  21851   0 + UNICODE_MAX_TABLE_INDEX,
  21852   0 + UNICODE_MAX_TABLE_INDEX,
  21853   0 + UNICODE_MAX_TABLE_INDEX,
  21854   0 + UNICODE_MAX_TABLE_INDEX,
  21855   0 + UNICODE_MAX_TABLE_INDEX,
  21856   0 + UNICODE_MAX_TABLE_INDEX,
  21857   0 + UNICODE_MAX_TABLE_INDEX,
  21858   0 + UNICODE_MAX_TABLE_INDEX,
  21859   0 + UNICODE_MAX_TABLE_INDEX,
  21860   0 + UNICODE_MAX_TABLE_INDEX,
  21861   0 + UNICODE_MAX_TABLE_INDEX,
  21862   0 + UNICODE_MAX_TABLE_INDEX,
  21863   0 + UNICODE_MAX_TABLE_INDEX,
  21864   0 + UNICODE_MAX_TABLE_INDEX,
  21865   0 + UNICODE_MAX_TABLE_INDEX,
  21866   0 + UNICODE_MAX_TABLE_INDEX,
  21867   0 + UNICODE_MAX_TABLE_INDEX,
  21868   0 + UNICODE_MAX_TABLE_INDEX,
  21869   0 + UNICODE_MAX_TABLE_INDEX,
  21870   0 + UNICODE_MAX_TABLE_INDEX,
  21871   0 + UNICODE_MAX_TABLE_INDEX,
  21872   0 + UNICODE_MAX_TABLE_INDEX,
  21873   0 + UNICODE_MAX_TABLE_INDEX,
  21874   0 + UNICODE_MAX_TABLE_INDEX,
  21875   0 + UNICODE_MAX_TABLE_INDEX,
  21876   0 + UNICODE_MAX_TABLE_INDEX,
  21877   0 + UNICODE_MAX_TABLE_INDEX,
  21878   0 + UNICODE_MAX_TABLE_INDEX,
  21879   0 + UNICODE_MAX_TABLE_INDEX,
  21880   0 + UNICODE_MAX_TABLE_INDEX,
  21881   0 + UNICODE_MAX_TABLE_INDEX,
  21882   0 + UNICODE_MAX_TABLE_INDEX,
  21883   0 + UNICODE_MAX_TABLE_INDEX,
  21884   0 + UNICODE_MAX_TABLE_INDEX,
  21885   0 + UNICODE_MAX_TABLE_INDEX,
  21886   0 + UNICODE_MAX_TABLE_INDEX,
  21887   0 + UNICODE_MAX_TABLE_INDEX,
  21888   0 + UNICODE_MAX_TABLE_INDEX,
  21889   0 + UNICODE_MAX_TABLE_INDEX,
  21890   0 + UNICODE_MAX_TABLE_INDEX,
  21891   0 + UNICODE_MAX_TABLE_INDEX,
  21892   0 + UNICODE_MAX_TABLE_INDEX,
  21893   0 + UNICODE_MAX_TABLE_INDEX,
  21894   0 + UNICODE_MAX_TABLE_INDEX,
  21895   0 + UNICODE_MAX_TABLE_INDEX,
  21896   0 + UNICODE_MAX_TABLE_INDEX,
  21897   0 + UNICODE_MAX_TABLE_INDEX,
  21898   0 + UNICODE_MAX_TABLE_INDEX,
  21899   0 + UNICODE_MAX_TABLE_INDEX,
  21900   0 + UNICODE_MAX_TABLE_INDEX,
  21901   0 + UNICODE_MAX_TABLE_INDEX,
  21902   0 + UNICODE_MAX_TABLE_INDEX,
  21903   0 + UNICODE_MAX_TABLE_INDEX,
  21904   0 + UNICODE_MAX_TABLE_INDEX,
  21905   0 + UNICODE_MAX_TABLE_INDEX,
  21906   0 + UNICODE_MAX_TABLE_INDEX,
  21907   0 + UNICODE_MAX_TABLE_INDEX,
  21908   0 + UNICODE_MAX_TABLE_INDEX,
  21909   0 + UNICODE_MAX_TABLE_INDEX,
  21910   0 + UNICODE_MAX_TABLE_INDEX,
  21911   0 + UNICODE_MAX_TABLE_INDEX,
  21912   0 + UNICODE_MAX_TABLE_INDEX,
  21913   0 + UNICODE_MAX_TABLE_INDEX,
  21914   0 + UNICODE_MAX_TABLE_INDEX,
  21915   0 + UNICODE_MAX_TABLE_INDEX,
  21916   0 + UNICODE_MAX_TABLE_INDEX,
  21917   0 + UNICODE_MAX_TABLE_INDEX,
  21918   0 + UNICODE_MAX_TABLE_INDEX,
  21919   0 + UNICODE_MAX_TABLE_INDEX,
  21920   0 + UNICODE_MAX_TABLE_INDEX,
  21921   0 + UNICODE_MAX_TABLE_INDEX,
  21922   0 + UNICODE_MAX_TABLE_INDEX,
  21923   0 + UNICODE_MAX_TABLE_INDEX,
  21924   0 + UNICODE_MAX_TABLE_INDEX,
  21925   0 + UNICODE_MAX_TABLE_INDEX,
  21926   0 + UNICODE_MAX_TABLE_INDEX,
  21927   0 + UNICODE_MAX_TABLE_INDEX,
  21928   0 + UNICODE_MAX_TABLE_INDEX,
  21929   0 + UNICODE_MAX_TABLE_INDEX,
  21930   0 + UNICODE_MAX_TABLE_INDEX,
  21931   0 + UNICODE_MAX_TABLE_INDEX,
  21932   0 + UNICODE_MAX_TABLE_INDEX,
  21933   0 + UNICODE_MAX_TABLE_INDEX,
  21934   0 + UNICODE_MAX_TABLE_INDEX,
  21935   0 + UNICODE_MAX_TABLE_INDEX,
  21936   0 + UNICODE_MAX_TABLE_INDEX,
  21937   0 + UNICODE_MAX_TABLE_INDEX,
  21938   0 + UNICODE_MAX_TABLE_INDEX,
  21939   0 + UNICODE_MAX_TABLE_INDEX,
  21940   0 + UNICODE_MAX_TABLE_INDEX,
  21941   0 + UNICODE_MAX_TABLE_INDEX,
  21942   0 + UNICODE_MAX_TABLE_INDEX,
  21943   0 + UNICODE_MAX_TABLE_INDEX,
  21944   0 + UNICODE_MAX_TABLE_INDEX,
  21945   0 + UNICODE_MAX_TABLE_INDEX,
  21946   0 + UNICODE_MAX_TABLE_INDEX,
  21947   0 + UNICODE_MAX_TABLE_INDEX,
  21948   0 + UNICODE_MAX_TABLE_INDEX,
  21949   0 + UNICODE_MAX_TABLE_INDEX,
  21950   0 + UNICODE_MAX_TABLE_INDEX,
  21951   0 + UNICODE_MAX_TABLE_INDEX,
  21952   0 + UNICODE_MAX_TABLE_INDEX,
  21953   0 + UNICODE_MAX_TABLE_INDEX,
  21954   0 + UNICODE_MAX_TABLE_INDEX,
  21955   0 + UNICODE_MAX_TABLE_INDEX,
  21956   0 + UNICODE_MAX_TABLE_INDEX,
  21957   0 + UNICODE_MAX_TABLE_INDEX,
  21958   0 + UNICODE_MAX_TABLE_INDEX,
  21959   0 + UNICODE_MAX_TABLE_INDEX,
  21960   0 + UNICODE_MAX_TABLE_INDEX,
  21961   0 + UNICODE_MAX_TABLE_INDEX,
  21962   0 + UNICODE_MAX_TABLE_INDEX,
  21963   0 + UNICODE_MAX_TABLE_INDEX,
  21964   0 + UNICODE_MAX_TABLE_INDEX,
  21965   0 + UNICODE_MAX_TABLE_INDEX,
  21966   0 + UNICODE_MAX_TABLE_INDEX,
  21967   0 + UNICODE_MAX_TABLE_INDEX,
  21968   0 + UNICODE_MAX_TABLE_INDEX,
  21969   0 + UNICODE_MAX_TABLE_INDEX,
  21970   0 + UNICODE_MAX_TABLE_INDEX,
  21971   0 + UNICODE_MAX_TABLE_INDEX,
  21972   0 + UNICODE_MAX_TABLE_INDEX,
  21973   0 + UNICODE_MAX_TABLE_INDEX,
  21974   0 + UNICODE_MAX_TABLE_INDEX,
  21975   0 + UNICODE_MAX_TABLE_INDEX,
  21976   0 + UNICODE_MAX_TABLE_INDEX,
  21977   0 + UNICODE_MAX_TABLE_INDEX,
  21978   0 + UNICODE_MAX_TABLE_INDEX,
  21979   0 + UNICODE_MAX_TABLE_INDEX,
  21980   0 + UNICODE_MAX_TABLE_INDEX,
  21981   0 + UNICODE_MAX_TABLE_INDEX,
  21982   0 + UNICODE_MAX_TABLE_INDEX,
  21983   0 + UNICODE_MAX_TABLE_INDEX,
  21984   0 + UNICODE_MAX_TABLE_INDEX,
  21985   0 + UNICODE_MAX_TABLE_INDEX,
  21986   0 + UNICODE_MAX_TABLE_INDEX,
  21987   0 + UNICODE_MAX_TABLE_INDEX,
  21988   0 + UNICODE_MAX_TABLE_INDEX,
  21989   0 + UNICODE_MAX_TABLE_INDEX,
  21990   0 + UNICODE_MAX_TABLE_INDEX,
  21991   0 + UNICODE_MAX_TABLE_INDEX,
  21992   0 + UNICODE_MAX_TABLE_INDEX,
  21993   0 + UNICODE_MAX_TABLE_INDEX,
  21994   0 + UNICODE_MAX_TABLE_INDEX,
  21995   0 + UNICODE_MAX_TABLE_INDEX,
  21996   0 + UNICODE_MAX_TABLE_INDEX,
  21997   0 + UNICODE_MAX_TABLE_INDEX,
  21998   0 + UNICODE_MAX_TABLE_INDEX,
  21999   0 + UNICODE_MAX_TABLE_INDEX,
  22000   0 + UNICODE_MAX_TABLE_INDEX,
  22001   0 + UNICODE_MAX_TABLE_INDEX,
  22002   0 + UNICODE_MAX_TABLE_INDEX,
  22003   0 + UNICODE_MAX_TABLE_INDEX,
  22004   0 + UNICODE_MAX_TABLE_INDEX,
  22005   0 + UNICODE_MAX_TABLE_INDEX,
  22006   0 + UNICODE_MAX_TABLE_INDEX,
  22007   0 + UNICODE_MAX_TABLE_INDEX,
  22008   0 + UNICODE_MAX_TABLE_INDEX,
  22009   0 + UNICODE_MAX_TABLE_INDEX,
  22010   0 + UNICODE_MAX_TABLE_INDEX,
  22011   0 + UNICODE_MAX_TABLE_INDEX,
  22012   0 + UNICODE_MAX_TABLE_INDEX,
  22013   0 + UNICODE_MAX_TABLE_INDEX,
  22014   0 + UNICODE_MAX_TABLE_INDEX,
  22015   0 + UNICODE_MAX_TABLE_INDEX,
  22016   0 + UNICODE_MAX_TABLE_INDEX,
  22017   0 + UNICODE_MAX_TABLE_INDEX,
  22018   0 + UNICODE_MAX_TABLE_INDEX,
  22019   0 + UNICODE_MAX_TABLE_INDEX,
  22020   0 + UNICODE_MAX_TABLE_INDEX,
  22021   0 + UNICODE_MAX_TABLE_INDEX,
  22022   0 + UNICODE_MAX_TABLE_INDEX,
  22023   0 + UNICODE_MAX_TABLE_INDEX,
  22024   0 + UNICODE_MAX_TABLE_INDEX,
  22025   0 + UNICODE_MAX_TABLE_INDEX,
  22026   0 + UNICODE_MAX_TABLE_INDEX,
  22027   0 + UNICODE_MAX_TABLE_INDEX,
  22028   0 + UNICODE_MAX_TABLE_INDEX,
  22029   0 + UNICODE_MAX_TABLE_INDEX,
  22030   0 + UNICODE_MAX_TABLE_INDEX,
  22031   0 + UNICODE_MAX_TABLE_INDEX,
  22032   0 + UNICODE_MAX_TABLE_INDEX,
  22033   0 + UNICODE_MAX_TABLE_INDEX,
  22034   0 + UNICODE_MAX_TABLE_INDEX,
  22035   0 + UNICODE_MAX_TABLE_INDEX,
  22036   0 + UNICODE_MAX_TABLE_INDEX,
  22037   0 + UNICODE_MAX_TABLE_INDEX,
  22038   0 + UNICODE_MAX_TABLE_INDEX,
  22039   0 + UNICODE_MAX_TABLE_INDEX,
  22040   0 + UNICODE_MAX_TABLE_INDEX,
  22041   0 + UNICODE_MAX_TABLE_INDEX,
  22042   0 + UNICODE_MAX_TABLE_INDEX,
  22043   0 + UNICODE_MAX_TABLE_INDEX,
  22044   0 + UNICODE_MAX_TABLE_INDEX,
  22045   0 + UNICODE_MAX_TABLE_INDEX,
  22046   0 + UNICODE_MAX_TABLE_INDEX,
  22047   0 + UNICODE_MAX_TABLE_INDEX,
  22048   0 + UNICODE_MAX_TABLE_INDEX,
  22049   0 + UNICODE_MAX_TABLE_INDEX,
  22050   0 + UNICODE_MAX_TABLE_INDEX,
  22051   0 + UNICODE_MAX_TABLE_INDEX,
  22052   0 + UNICODE_MAX_TABLE_INDEX,
  22053   0 + UNICODE_MAX_TABLE_INDEX,
  22054   0 + UNICODE_MAX_TABLE_INDEX,
  22055   0 + UNICODE_MAX_TABLE_INDEX,
  22056   0 + UNICODE_MAX_TABLE_INDEX,
  22057   0 + UNICODE_MAX_TABLE_INDEX,
  22058   0 + UNICODE_MAX_TABLE_INDEX,
  22059   0 + UNICODE_MAX_TABLE_INDEX,
  22060   0 + UNICODE_MAX_TABLE_INDEX,
  22061   0 + UNICODE_MAX_TABLE_INDEX,
  22062   0 + UNICODE_MAX_TABLE_INDEX,
  22063   0 + UNICODE_MAX_TABLE_INDEX,
  22064   0 + UNICODE_MAX_TABLE_INDEX,
  22065   0 + UNICODE_MAX_TABLE_INDEX,
  22066   0 + UNICODE_MAX_TABLE_INDEX,
  22067   0 + UNICODE_MAX_TABLE_INDEX,
  22068   0 + UNICODE_MAX_TABLE_INDEX,
  22069   0 + UNICODE_MAX_TABLE_INDEX,
  22070   0 + UNICODE_MAX_TABLE_INDEX,
  22071   0 + UNICODE_MAX_TABLE_INDEX,
  22072   0 + UNICODE_MAX_TABLE_INDEX,
  22073   0 + UNICODE_MAX_TABLE_INDEX,
  22074   0 + UNICODE_MAX_TABLE_INDEX,
  22075   0 + UNICODE_MAX_TABLE_INDEX,
  22076   0 + UNICODE_MAX_TABLE_INDEX,
  22077   0 + UNICODE_MAX_TABLE_INDEX,
  22078   0 + UNICODE_MAX_TABLE_INDEX,
  22079   0 + UNICODE_MAX_TABLE_INDEX,
  22080   0 + UNICODE_MAX_TABLE_INDEX,
  22081   0 + UNICODE_MAX_TABLE_INDEX,
  22082   0 + UNICODE_MAX_TABLE_INDEX,
  22083   0 + UNICODE_MAX_TABLE_INDEX,
  22084   0 + UNICODE_MAX_TABLE_INDEX,
  22085   0 + UNICODE_MAX_TABLE_INDEX,
  22086   0 + UNICODE_MAX_TABLE_INDEX,
  22087   0 + UNICODE_MAX_TABLE_INDEX,
  22088   0 + UNICODE_MAX_TABLE_INDEX,
  22089   0 + UNICODE_MAX_TABLE_INDEX,
  22090   0 + UNICODE_MAX_TABLE_INDEX,
  22091   0 + UNICODE_MAX_TABLE_INDEX,
  22092   0 + UNICODE_MAX_TABLE_INDEX,
  22093   0 + UNICODE_MAX_TABLE_INDEX,
  22094   0 + UNICODE_MAX_TABLE_INDEX,
  22095   0 + UNICODE_MAX_TABLE_INDEX,
  22096   0 + UNICODE_MAX_TABLE_INDEX,
  22097   0 + UNICODE_MAX_TABLE_INDEX,
  22098   0 + UNICODE_MAX_TABLE_INDEX,
  22099   0 + UNICODE_MAX_TABLE_INDEX,
  22100   0 + UNICODE_MAX_TABLE_INDEX,
  22101   0 + UNICODE_MAX_TABLE_INDEX,
  22102   0 + UNICODE_MAX_TABLE_INDEX,
  22103   0 + UNICODE_MAX_TABLE_INDEX,
  22104   0 + UNICODE_MAX_TABLE_INDEX,
  22105   0 + UNICODE_MAX_TABLE_INDEX,
  22106   0 + UNICODE_MAX_TABLE_INDEX,
  22107   0 + UNICODE_MAX_TABLE_INDEX,
  22108   0 + UNICODE_MAX_TABLE_INDEX,
  22109   0 + UNICODE_MAX_TABLE_INDEX,
  22110   0 + UNICODE_MAX_TABLE_INDEX,
  22111   0 + UNICODE_MAX_TABLE_INDEX,
  22112   0 + UNICODE_MAX_TABLE_INDEX,
  22113   0 + UNICODE_MAX_TABLE_INDEX,
  22114   0 + UNICODE_MAX_TABLE_INDEX,
  22115   0 + UNICODE_MAX_TABLE_INDEX,
  22116   0 + UNICODE_MAX_TABLE_INDEX,
  22117   0 + UNICODE_MAX_TABLE_INDEX,
  22118   0 + UNICODE_MAX_TABLE_INDEX,
  22119   0 + UNICODE_MAX_TABLE_INDEX,
  22120   0 + UNICODE_MAX_TABLE_INDEX,
  22121   0 + UNICODE_MAX_TABLE_INDEX,
  22122   0 + UNICODE_MAX_TABLE_INDEX,
  22123   0 + UNICODE_MAX_TABLE_INDEX,
  22124   0 + UNICODE_MAX_TABLE_INDEX,
  22125   0 + UNICODE_MAX_TABLE_INDEX,
  22126   0 + UNICODE_MAX_TABLE_INDEX,
  22127   0 + UNICODE_MAX_TABLE_INDEX,
  22128   0 + UNICODE_MAX_TABLE_INDEX,
  22129   0 + UNICODE_MAX_TABLE_INDEX,
  22130   0 + UNICODE_MAX_TABLE_INDEX,
  22131   0 + UNICODE_MAX_TABLE_INDEX,
  22132   0 + UNICODE_MAX_TABLE_INDEX,
  22133   0 + UNICODE_MAX_TABLE_INDEX,
  22134   0 + UNICODE_MAX_TABLE_INDEX,
  22135   0 + UNICODE_MAX_TABLE_INDEX,
  22136   0 + UNICODE_MAX_TABLE_INDEX,
  22137   0 + UNICODE_MAX_TABLE_INDEX,
  22138   0 + UNICODE_MAX_TABLE_INDEX,
  22139   0 + UNICODE_MAX_TABLE_INDEX,
  22140   0 + UNICODE_MAX_TABLE_INDEX,
  22141   0 + UNICODE_MAX_TABLE_INDEX,
  22142   0 + UNICODE_MAX_TABLE_INDEX,
  22143   0 + UNICODE_MAX_TABLE_INDEX,
  22144   0 + UNICODE_MAX_TABLE_INDEX,
  22145   0 + UNICODE_MAX_TABLE_INDEX,
  22146   0 + UNICODE_MAX_TABLE_INDEX,
  22147   0 + UNICODE_MAX_TABLE_INDEX,
  22148   0 + UNICODE_MAX_TABLE_INDEX,
  22149   0 + UNICODE_MAX_TABLE_INDEX,
  22150   0 + UNICODE_MAX_TABLE_INDEX,
  22151   0 + UNICODE_MAX_TABLE_INDEX,
  22152   0 + UNICODE_MAX_TABLE_INDEX,
  22153   0 + UNICODE_MAX_TABLE_INDEX,
  22154   0 + UNICODE_MAX_TABLE_INDEX,
  22155   0 + UNICODE_MAX_TABLE_INDEX,
  22156   0 + UNICODE_MAX_TABLE_INDEX,
  22157   0 + UNICODE_MAX_TABLE_INDEX,
  22158   0 + UNICODE_MAX_TABLE_INDEX,
  22159   0 + UNICODE_MAX_TABLE_INDEX,
  22160   0 + UNICODE_MAX_TABLE_INDEX,
  22161   0 + UNICODE_MAX_TABLE_INDEX,
  22162   0 + UNICODE_MAX_TABLE_INDEX,
  22163   0 + UNICODE_MAX_TABLE_INDEX,
  22164   0 + UNICODE_MAX_TABLE_INDEX,
  22165   0 + UNICODE_MAX_TABLE_INDEX,
  22166   0 + UNICODE_MAX_TABLE_INDEX,
  22167   0 + UNICODE_MAX_TABLE_INDEX,
  22168   0 + UNICODE_MAX_TABLE_INDEX,
  22169   0 + UNICODE_MAX_TABLE_INDEX,
  22170   0 + UNICODE_MAX_TABLE_INDEX,
  22171   0 + UNICODE_MAX_TABLE_INDEX,
  22172   0 + UNICODE_MAX_TABLE_INDEX,
  22173   0 + UNICODE_MAX_TABLE_INDEX,
  22174   0 + UNICODE_MAX_TABLE_INDEX,
  22175   0 + UNICODE_MAX_TABLE_INDEX,
  22176   0 + UNICODE_MAX_TABLE_INDEX,
  22177   0 + UNICODE_MAX_TABLE_INDEX,
  22178   0 + UNICODE_MAX_TABLE_INDEX,
  22179   0 + UNICODE_MAX_TABLE_INDEX,
  22180   0 + UNICODE_MAX_TABLE_INDEX,
  22181   0 + UNICODE_MAX_TABLE_INDEX,
  22182   0 + UNICODE_MAX_TABLE_INDEX,
  22183   0 + UNICODE_MAX_TABLE_INDEX,
  22184   0 + UNICODE_MAX_TABLE_INDEX,
  22185   0 + UNICODE_MAX_TABLE_INDEX,
  22186   0 + UNICODE_MAX_TABLE_INDEX,
  22187   0 + UNICODE_MAX_TABLE_INDEX,
  22188   0 + UNICODE_MAX_TABLE_INDEX,
  22189   0 + UNICODE_MAX_TABLE_INDEX,
  22190   0 + UNICODE_MAX_TABLE_INDEX,
  22191   0 + UNICODE_MAX_TABLE_INDEX,
  22192   0 + UNICODE_MAX_TABLE_INDEX,
  22193   0 + UNICODE_MAX_TABLE_INDEX,
  22194   0 + UNICODE_MAX_TABLE_INDEX,
  22195   0 + UNICODE_MAX_TABLE_INDEX,
  22196   0 + UNICODE_MAX_TABLE_INDEX,
  22197   0 + UNICODE_MAX_TABLE_INDEX,
  22198   0 + UNICODE_MAX_TABLE_INDEX,
  22199   0 + UNICODE_MAX_TABLE_INDEX,
  22200   0 + UNICODE_MAX_TABLE_INDEX,
  22201   0 + UNICODE_MAX_TABLE_INDEX,
  22202   0 + UNICODE_MAX_TABLE_INDEX,
  22203   0 + UNICODE_MAX_TABLE_INDEX,
  22204   0 + UNICODE_MAX_TABLE_INDEX,
  22205   0 + UNICODE_MAX_TABLE_INDEX,
  22206   0 + UNICODE_MAX_TABLE_INDEX,
  22207   0 + UNICODE_MAX_TABLE_INDEX,
  22208   0 + UNICODE_MAX_TABLE_INDEX,
  22209   0 + UNICODE_MAX_TABLE_INDEX,
  22210   0 + UNICODE_MAX_TABLE_INDEX,
  22211   0 + UNICODE_MAX_TABLE_INDEX,
  22212   0 + UNICODE_MAX_TABLE_INDEX,
  22213   0 + UNICODE_MAX_TABLE_INDEX,
  22214   0 + UNICODE_MAX_TABLE_INDEX,
  22215   0 + UNICODE_MAX_TABLE_INDEX,
  22216   0 + UNICODE_MAX_TABLE_INDEX,
  22217   0 + UNICODE_MAX_TABLE_INDEX,
  22218   0 + UNICODE_MAX_TABLE_INDEX,
  22219   0 + UNICODE_MAX_TABLE_INDEX,
  22220   0 + UNICODE_MAX_TABLE_INDEX,
  22221   0 + UNICODE_MAX_TABLE_INDEX,
  22222   0 + UNICODE_MAX_TABLE_INDEX,
  22223   0 + UNICODE_MAX_TABLE_INDEX,
  22224   0 + UNICODE_MAX_TABLE_INDEX,
  22225   0 + UNICODE_MAX_TABLE_INDEX,
  22226   0 + UNICODE_MAX_TABLE_INDEX,
  22227   0 + UNICODE_MAX_TABLE_INDEX,
  22228   0 + UNICODE_MAX_TABLE_INDEX,
  22229   0 + UNICODE_MAX_TABLE_INDEX,
  22230   0 + UNICODE_MAX_TABLE_INDEX,
  22231   0 + UNICODE_MAX_TABLE_INDEX,
  22232   0 + UNICODE_MAX_TABLE_INDEX,
  22233   0 + UNICODE_MAX_TABLE_INDEX,
  22234   0 + UNICODE_MAX_TABLE_INDEX,
  22235   0 + UNICODE_MAX_TABLE_INDEX,
  22236   0 + UNICODE_MAX_TABLE_INDEX,
  22237   0 + UNICODE_MAX_TABLE_INDEX,
  22238   0 + UNICODE_MAX_TABLE_INDEX,
  22239   0 + UNICODE_MAX_TABLE_INDEX,
  22240   0 + UNICODE_MAX_TABLE_INDEX,
  22241   0 + UNICODE_MAX_TABLE_INDEX,
  22242   0 + UNICODE_MAX_TABLE_INDEX,
  22243   0 + UNICODE_MAX_TABLE_INDEX,
  22244   0 + UNICODE_MAX_TABLE_INDEX,
  22245   0 + UNICODE_MAX_TABLE_INDEX,
  22246   0 + UNICODE_MAX_TABLE_INDEX,
  22247   0 + UNICODE_MAX_TABLE_INDEX,
  22248   0 + UNICODE_MAX_TABLE_INDEX,
  22249   0 + UNICODE_MAX_TABLE_INDEX,
  22250   0 + UNICODE_MAX_TABLE_INDEX,
  22251   0 + UNICODE_MAX_TABLE_INDEX,
  22252   0 + UNICODE_MAX_TABLE_INDEX,
  22253   0 + UNICODE_MAX_TABLE_INDEX,
  22254   0 + UNICODE_MAX_TABLE_INDEX,
  22255   0 + UNICODE_MAX_TABLE_INDEX,
  22256   0 + UNICODE_MAX_TABLE_INDEX,
  22257   0 + UNICODE_MAX_TABLE_INDEX,
  22258   0 + UNICODE_MAX_TABLE_INDEX,
  22259   0 + UNICODE_MAX_TABLE_INDEX,
  22260   0 + UNICODE_MAX_TABLE_INDEX,
  22261   0 + UNICODE_MAX_TABLE_INDEX,
  22262   0 + UNICODE_MAX_TABLE_INDEX,
  22263   0 + UNICODE_MAX_TABLE_INDEX,
  22264   0 + UNICODE_MAX_TABLE_INDEX,
  22265   0 + UNICODE_MAX_TABLE_INDEX,
  22266   0 + UNICODE_MAX_TABLE_INDEX
  22267 };
  22268 
  22269 #define ATTR_TABLE(Page) (((Page) <= UNICODE_LAST_PAGE_PART1) \
  22270                           ? attr_table_part1[Page] \
  22271                           : attr_table_part2[(Page) - 0xe00])
  22272 
  22273 #define ATTTABLE(Page, Char) \
  22274   ((ATTR_TABLE(Page) == UNICODE_MAX_TABLE_INDEX) ? 0 : (attr_data[ATTR_TABLE(Page)][Char]))
  22275 
  22276 #define TTYPE_PART1(Page, Char) \
  22277   ((type_table_part1[Page] >= UNICODE_MAX_TABLE_INDEX) \
  22278    ? (type_table_part1[Page] - UNICODE_MAX_TABLE_INDEX) \
  22279    : (type_data[type_table_part1[Page]][Char]))
  22280 
  22281 #define TTYPE_PART2(Page, Char) \
  22282   ((type_table_part2[Page] >= UNICODE_MAX_TABLE_INDEX) \
  22283    ? (type_table_part2[Page] - UNICODE_MAX_TABLE_INDEX) \
  22284    : (type_data[type_table_part2[Page]][Char]))
  22285 
  22286 #define RUNETYPE(rn) \
  22287   (((rn) <= UNICODE_LAST_CHAR_PART1) \
  22288    ? TTYPE_PART1 ((rn) >> 8, (rn) & 0xff) \
  22289    : (((rn) >= 0xe0000 && (rn) <= runeMax) \
  22290      ? TTYPE_PART2 (((rn) - 0xe0000) >> 8, (rn) & 0xff) \
  22291      : UNICODE_UNASSIGNED))
  22292 
  22293 #define IS(Type, Class) (((uint32_t)1 << (Type)) & (Class))
  22294 #define OR(Type, Rest) (((uint32_t)1 << (Type)) | (Rest))
  22295 
  22296 #define ISMARK(Type) IS((Type),\
  22297     OR(UNICODE_NON_SPACING_MARK,\
  22298     OR(UNICODE_SPACING_MARK,\
  22299     OR(UNICODE_ENCLOSING_MARK,	0))))
  22300 
  22301 #define ISALPHA(Type) IS((Type),\
  22302     OR(UNICODE_LOWERCASE_LETTER,\
  22303     OR(UNICODE_UPPERCASE_LETTER,\
  22304     OR(UNICODE_TITLECASE_LETTER,\
  22305     OR(UNICODE_MODIFIER_LETTER,\
  22306     OR(UNICODE_OTHER_LETTER,		0))))))
  22307 
  22308 #define RUNE_MAX_DECOMPOSITION_LENGTH 18 /* codepoints */
  22309 
  22310 #define CC_PART1(Page, Char) \
  22311   ((combining_class_table_part1[Page] >= UNICODE_MAX_TABLE_INDEX) \
  22312    ? (combining_class_table_part1[Page] - UNICODE_MAX_TABLE_INDEX) \
  22313    : (cclass_data[combining_class_table_part1[Page]][Char]))
  22314 
  22315 #define CC_PART2(Page, Char) \
  22316   ((combining_class_table_part2[Page] >= UNICODE_MAX_TABLE_INDEX) \
  22317    ? (combining_class_table_part2[Page] - UNICODE_MAX_TABLE_INDEX) \
  22318    : (cclass_data[combining_class_table_part2[Page]][Char]))
  22319 
  22320 #define COMBINING_CLASS(Char) \
  22321   (((Char) <= UNICODE_LAST_CHAR_PART1) \
  22322    ? CC_PART1 ((Char) >> 8, (Char) & 0xff) \
  22323    : (((Char) >= 0xe0000 && (Char) <= runeMax) \
  22324       ? CC_PART2 (((Char) - 0xe0000) >> 8, (Char) & 0xff) \
  22325       : 0))
  22326 
  22327 typedef struct { rune ch; uint16_t canon_offset; uint16_t compat_offset;} decomposition;
  22328 
  22329 static const decomposition decomp_table[] =
  22330 {
  22331   { 0x00a0, UNICODE_NOT_PRESENT_OFFSET, 0 },
  22332   { 0x00a8, UNICODE_NOT_PRESENT_OFFSET, 2 },
  22333   { 0x00aa, UNICODE_NOT_PRESENT_OFFSET, 6 },
  22334   { 0x00af, UNICODE_NOT_PRESENT_OFFSET, 8 },
  22335   { 0x00b2, UNICODE_NOT_PRESENT_OFFSET, 12 },
  22336   { 0x00b3, UNICODE_NOT_PRESENT_OFFSET, 14 },
  22337   { 0x00b4, UNICODE_NOT_PRESENT_OFFSET, 16 },
  22338   { 0x00b5, UNICODE_NOT_PRESENT_OFFSET, 20 },
  22339   { 0x00b8, UNICODE_NOT_PRESENT_OFFSET, 23 },
  22340   { 0x00b9, UNICODE_NOT_PRESENT_OFFSET, 27 },
  22341   { 0x00ba, UNICODE_NOT_PRESENT_OFFSET, 29 },
  22342   { 0x00bc, UNICODE_NOT_PRESENT_OFFSET, 31 },
  22343   { 0x00bd, UNICODE_NOT_PRESENT_OFFSET, 37 },
  22344   { 0x00be, UNICODE_NOT_PRESENT_OFFSET, 43 },
  22345   { 0x00c0, 49, UNICODE_NOT_PRESENT_OFFSET },
  22346   { 0x00c1, 53, UNICODE_NOT_PRESENT_OFFSET },
  22347   { 0x00c2, 57, UNICODE_NOT_PRESENT_OFFSET },
  22348   { 0x00c3, 61, UNICODE_NOT_PRESENT_OFFSET },
  22349   { 0x00c4, 65, UNICODE_NOT_PRESENT_OFFSET },
  22350   { 0x00c5, 69, UNICODE_NOT_PRESENT_OFFSET },
  22351   { 0x00c7, 73, UNICODE_NOT_PRESENT_OFFSET },
  22352   { 0x00c8, 77, UNICODE_NOT_PRESENT_OFFSET },
  22353   { 0x00c9, 81, UNICODE_NOT_PRESENT_OFFSET },
  22354   { 0x00ca, 85, UNICODE_NOT_PRESENT_OFFSET },
  22355   { 0x00cb, 89, UNICODE_NOT_PRESENT_OFFSET },
  22356   { 0x00cc, 93, UNICODE_NOT_PRESENT_OFFSET },
  22357   { 0x00cd, 97, UNICODE_NOT_PRESENT_OFFSET },
  22358   { 0x00ce, 101, UNICODE_NOT_PRESENT_OFFSET },
  22359   { 0x00cf, 105, UNICODE_NOT_PRESENT_OFFSET },
  22360   { 0x00d1, 109, UNICODE_NOT_PRESENT_OFFSET },
  22361   { 0x00d2, 113, UNICODE_NOT_PRESENT_OFFSET },
  22362   { 0x00d3, 117, UNICODE_NOT_PRESENT_OFFSET },
  22363   { 0x00d4, 121, UNICODE_NOT_PRESENT_OFFSET },
  22364   { 0x00d5, 125, UNICODE_NOT_PRESENT_OFFSET },
  22365   { 0x00d6, 129, UNICODE_NOT_PRESENT_OFFSET },
  22366   { 0x00d9, 133, UNICODE_NOT_PRESENT_OFFSET },
  22367   { 0x00da, 137, UNICODE_NOT_PRESENT_OFFSET },
  22368   { 0x00db, 141, UNICODE_NOT_PRESENT_OFFSET },
  22369   { 0x00dc, 145, UNICODE_NOT_PRESENT_OFFSET },
  22370   { 0x00dd, 149, UNICODE_NOT_PRESENT_OFFSET },
  22371   { 0x00e0, 153, UNICODE_NOT_PRESENT_OFFSET },
  22372   { 0x00e1, 157, UNICODE_NOT_PRESENT_OFFSET },
  22373   { 0x00e2, 161, UNICODE_NOT_PRESENT_OFFSET },
  22374   { 0x00e3, 165, UNICODE_NOT_PRESENT_OFFSET },
  22375   { 0x00e4, 169, UNICODE_NOT_PRESENT_OFFSET },
  22376   { 0x00e5, 173, UNICODE_NOT_PRESENT_OFFSET },
  22377   { 0x00e7, 177, UNICODE_NOT_PRESENT_OFFSET },
  22378   { 0x00e8, 181, UNICODE_NOT_PRESENT_OFFSET },
  22379   { 0x00e9, 185, UNICODE_NOT_PRESENT_OFFSET },
  22380   { 0x00ea, 189, UNICODE_NOT_PRESENT_OFFSET },
  22381   { 0x00eb, 193, UNICODE_NOT_PRESENT_OFFSET },
  22382   { 0x00ec, 197, UNICODE_NOT_PRESENT_OFFSET },
  22383   { 0x00ed, 201, UNICODE_NOT_PRESENT_OFFSET },
  22384   { 0x00ee, 205, UNICODE_NOT_PRESENT_OFFSET },
  22385   { 0x00ef, 209, UNICODE_NOT_PRESENT_OFFSET },
  22386   { 0x00f1, 213, UNICODE_NOT_PRESENT_OFFSET },
  22387   { 0x00f2, 217, UNICODE_NOT_PRESENT_OFFSET },
  22388   { 0x00f3, 221, UNICODE_NOT_PRESENT_OFFSET },
  22389   { 0x00f4, 225, UNICODE_NOT_PRESENT_OFFSET },
  22390   { 0x00f5, 229, UNICODE_NOT_PRESENT_OFFSET },
  22391   { 0x00f6, 233, UNICODE_NOT_PRESENT_OFFSET },
  22392   { 0x00f9, 237, UNICODE_NOT_PRESENT_OFFSET },
  22393   { 0x00fa, 241, UNICODE_NOT_PRESENT_OFFSET },
  22394   { 0x00fb, 245, UNICODE_NOT_PRESENT_OFFSET },
  22395   { 0x00fc, 249, UNICODE_NOT_PRESENT_OFFSET },
  22396   { 0x00fd, 253, UNICODE_NOT_PRESENT_OFFSET },
  22397   { 0x00ff, 257, UNICODE_NOT_PRESENT_OFFSET },
  22398   { 0x0100, 261, UNICODE_NOT_PRESENT_OFFSET },
  22399   { 0x0101, 265, UNICODE_NOT_PRESENT_OFFSET },
  22400   { 0x0102, 269, UNICODE_NOT_PRESENT_OFFSET },
  22401   { 0x0103, 273, UNICODE_NOT_PRESENT_OFFSET },
  22402   { 0x0104, 277, UNICODE_NOT_PRESENT_OFFSET },
  22403   { 0x0105, 281, UNICODE_NOT_PRESENT_OFFSET },
  22404   { 0x0106, 285, UNICODE_NOT_PRESENT_OFFSET },
  22405   { 0x0107, 289, UNICODE_NOT_PRESENT_OFFSET },
  22406   { 0x0108, 293, UNICODE_NOT_PRESENT_OFFSET },
  22407   { 0x0109, 297, UNICODE_NOT_PRESENT_OFFSET },
  22408   { 0x010a, 301, UNICODE_NOT_PRESENT_OFFSET },
  22409   { 0x010b, 305, UNICODE_NOT_PRESENT_OFFSET },
  22410   { 0x010c, 309, UNICODE_NOT_PRESENT_OFFSET },
  22411   { 0x010d, 313, UNICODE_NOT_PRESENT_OFFSET },
  22412   { 0x010e, 317, UNICODE_NOT_PRESENT_OFFSET },
  22413   { 0x010f, 321, UNICODE_NOT_PRESENT_OFFSET },
  22414   { 0x0112, 325, UNICODE_NOT_PRESENT_OFFSET },
  22415   { 0x0113, 329, UNICODE_NOT_PRESENT_OFFSET },
  22416   { 0x0114, 333, UNICODE_NOT_PRESENT_OFFSET },
  22417   { 0x0115, 337, UNICODE_NOT_PRESENT_OFFSET },
  22418   { 0x0116, 341, UNICODE_NOT_PRESENT_OFFSET },
  22419   { 0x0117, 345, UNICODE_NOT_PRESENT_OFFSET },
  22420   { 0x0118, 349, UNICODE_NOT_PRESENT_OFFSET },
  22421   { 0x0119, 353, UNICODE_NOT_PRESENT_OFFSET },
  22422   { 0x011a, 357, UNICODE_NOT_PRESENT_OFFSET },
  22423   { 0x011b, 361, UNICODE_NOT_PRESENT_OFFSET },
  22424   { 0x011c, 365, UNICODE_NOT_PRESENT_OFFSET },
  22425   { 0x011d, 369, UNICODE_NOT_PRESENT_OFFSET },
  22426   { 0x011e, 373, UNICODE_NOT_PRESENT_OFFSET },
  22427   { 0x011f, 377, UNICODE_NOT_PRESENT_OFFSET },
  22428   { 0x0120, 381, UNICODE_NOT_PRESENT_OFFSET },
  22429   { 0x0121, 385, UNICODE_NOT_PRESENT_OFFSET },
  22430   { 0x0122, 389, UNICODE_NOT_PRESENT_OFFSET },
  22431   { 0x0123, 393, UNICODE_NOT_PRESENT_OFFSET },
  22432   { 0x0124, 397, UNICODE_NOT_PRESENT_OFFSET },
  22433   { 0x0125, 401, UNICODE_NOT_PRESENT_OFFSET },
  22434   { 0x0128, 405, UNICODE_NOT_PRESENT_OFFSET },
  22435   { 0x0129, 409, UNICODE_NOT_PRESENT_OFFSET },
  22436   { 0x012a, 413, UNICODE_NOT_PRESENT_OFFSET },
  22437   { 0x012b, 417, UNICODE_NOT_PRESENT_OFFSET },
  22438   { 0x012c, 421, UNICODE_NOT_PRESENT_OFFSET },
  22439   { 0x012d, 425, UNICODE_NOT_PRESENT_OFFSET },
  22440   { 0x012e, 429, UNICODE_NOT_PRESENT_OFFSET },
  22441   { 0x012f, 433, UNICODE_NOT_PRESENT_OFFSET },
  22442   { 0x0130, 437, UNICODE_NOT_PRESENT_OFFSET },
  22443   { 0x0132, UNICODE_NOT_PRESENT_OFFSET, 441 },
  22444   { 0x0133, UNICODE_NOT_PRESENT_OFFSET, 444 },
  22445   { 0x0134, 447, UNICODE_NOT_PRESENT_OFFSET },
  22446   { 0x0135, 451, UNICODE_NOT_PRESENT_OFFSET },
  22447   { 0x0136, 455, UNICODE_NOT_PRESENT_OFFSET },
  22448   { 0x0137, 459, UNICODE_NOT_PRESENT_OFFSET },
  22449   { 0x0139, 463, UNICODE_NOT_PRESENT_OFFSET },
  22450   { 0x013a, 467, UNICODE_NOT_PRESENT_OFFSET },
  22451   { 0x013b, 471, UNICODE_NOT_PRESENT_OFFSET },
  22452   { 0x013c, 475, UNICODE_NOT_PRESENT_OFFSET },
  22453   { 0x013d, 479, UNICODE_NOT_PRESENT_OFFSET },
  22454   { 0x013e, 483, UNICODE_NOT_PRESENT_OFFSET },
  22455   { 0x013f, UNICODE_NOT_PRESENT_OFFSET, 487 },
  22456   { 0x0140, UNICODE_NOT_PRESENT_OFFSET, 491 },
  22457   { 0x0143, 495, UNICODE_NOT_PRESENT_OFFSET },
  22458   { 0x0144, 499, UNICODE_NOT_PRESENT_OFFSET },
  22459   { 0x0145, 503, UNICODE_NOT_PRESENT_OFFSET },
  22460   { 0x0146, 507, UNICODE_NOT_PRESENT_OFFSET },
  22461   { 0x0147, 511, UNICODE_NOT_PRESENT_OFFSET },
  22462   { 0x0148, 515, UNICODE_NOT_PRESENT_OFFSET },
  22463   { 0x0149, UNICODE_NOT_PRESENT_OFFSET, 519 },
  22464   { 0x014c, 523, UNICODE_NOT_PRESENT_OFFSET },
  22465   { 0x014d, 527, UNICODE_NOT_PRESENT_OFFSET },
  22466   { 0x014e, 531, UNICODE_NOT_PRESENT_OFFSET },
  22467   { 0x014f, 535, UNICODE_NOT_PRESENT_OFFSET },
  22468   { 0x0150, 539, UNICODE_NOT_PRESENT_OFFSET },
  22469   { 0x0151, 543, UNICODE_NOT_PRESENT_OFFSET },
  22470   { 0x0154, 547, UNICODE_NOT_PRESENT_OFFSET },
  22471   { 0x0155, 551, UNICODE_NOT_PRESENT_OFFSET },
  22472   { 0x0156, 555, UNICODE_NOT_PRESENT_OFFSET },
  22473   { 0x0157, 559, UNICODE_NOT_PRESENT_OFFSET },
  22474   { 0x0158, 563, UNICODE_NOT_PRESENT_OFFSET },
  22475   { 0x0159, 567, UNICODE_NOT_PRESENT_OFFSET },
  22476   { 0x015a, 571, UNICODE_NOT_PRESENT_OFFSET },
  22477   { 0x015b, 575, UNICODE_NOT_PRESENT_OFFSET },
  22478   { 0x015c, 579, UNICODE_NOT_PRESENT_OFFSET },
  22479   { 0x015d, 583, UNICODE_NOT_PRESENT_OFFSET },
  22480   { 0x015e, 587, UNICODE_NOT_PRESENT_OFFSET },
  22481   { 0x015f, 591, UNICODE_NOT_PRESENT_OFFSET },
  22482   { 0x0160, 595, UNICODE_NOT_PRESENT_OFFSET },
  22483   { 0x0161, 599, UNICODE_NOT_PRESENT_OFFSET },
  22484   { 0x0162, 603, UNICODE_NOT_PRESENT_OFFSET },
  22485   { 0x0163, 607, UNICODE_NOT_PRESENT_OFFSET },
  22486   { 0x0164, 611, UNICODE_NOT_PRESENT_OFFSET },
  22487   { 0x0165, 615, UNICODE_NOT_PRESENT_OFFSET },
  22488   { 0x0168, 619, UNICODE_NOT_PRESENT_OFFSET },
  22489   { 0x0169, 623, UNICODE_NOT_PRESENT_OFFSET },
  22490   { 0x016a, 627, UNICODE_NOT_PRESENT_OFFSET },
  22491   { 0x016b, 631, UNICODE_NOT_PRESENT_OFFSET },
  22492   { 0x016c, 635, UNICODE_NOT_PRESENT_OFFSET },
  22493   { 0x016d, 639, UNICODE_NOT_PRESENT_OFFSET },
  22494   { 0x016e, 643, UNICODE_NOT_PRESENT_OFFSET },
  22495   { 0x016f, 647, UNICODE_NOT_PRESENT_OFFSET },
  22496   { 0x0170, 651, UNICODE_NOT_PRESENT_OFFSET },
  22497   { 0x0171, 655, UNICODE_NOT_PRESENT_OFFSET },
  22498   { 0x0172, 659, UNICODE_NOT_PRESENT_OFFSET },
  22499   { 0x0173, 663, UNICODE_NOT_PRESENT_OFFSET },
  22500   { 0x0174, 667, UNICODE_NOT_PRESENT_OFFSET },
  22501   { 0x0175, 671, UNICODE_NOT_PRESENT_OFFSET },
  22502   { 0x0176, 675, UNICODE_NOT_PRESENT_OFFSET },
  22503   { 0x0177, 679, UNICODE_NOT_PRESENT_OFFSET },
  22504   { 0x0178, 683, UNICODE_NOT_PRESENT_OFFSET },
  22505   { 0x0179, 687, UNICODE_NOT_PRESENT_OFFSET },
  22506   { 0x017a, 691, UNICODE_NOT_PRESENT_OFFSET },
  22507   { 0x017b, 695, UNICODE_NOT_PRESENT_OFFSET },
  22508   { 0x017c, 699, UNICODE_NOT_PRESENT_OFFSET },
  22509   { 0x017d, 703, UNICODE_NOT_PRESENT_OFFSET },
  22510   { 0x017e, 707, UNICODE_NOT_PRESENT_OFFSET },
  22511   { 0x017f, UNICODE_NOT_PRESENT_OFFSET, 711 },
  22512   { 0x01a0, 713, UNICODE_NOT_PRESENT_OFFSET },
  22513   { 0x01a1, 717, UNICODE_NOT_PRESENT_OFFSET },
  22514   { 0x01af, 721, UNICODE_NOT_PRESENT_OFFSET },
  22515   { 0x01b0, 725, UNICODE_NOT_PRESENT_OFFSET },
  22516   { 0x01c4, UNICODE_NOT_PRESENT_OFFSET, 729 },
  22517   { 0x01c5, UNICODE_NOT_PRESENT_OFFSET, 734 },
  22518   { 0x01c6, UNICODE_NOT_PRESENT_OFFSET, 739 },
  22519   { 0x01c7, UNICODE_NOT_PRESENT_OFFSET, 744 },
  22520   { 0x01c8, UNICODE_NOT_PRESENT_OFFSET, 747 },
  22521   { 0x01c9, UNICODE_NOT_PRESENT_OFFSET, 750 },
  22522   { 0x01ca, UNICODE_NOT_PRESENT_OFFSET, 753 },
  22523   { 0x01cb, UNICODE_NOT_PRESENT_OFFSET, 756 },
  22524   { 0x01cc, UNICODE_NOT_PRESENT_OFFSET, 759 },
  22525   { 0x01cd, 762, UNICODE_NOT_PRESENT_OFFSET },
  22526   { 0x01ce, 766, UNICODE_NOT_PRESENT_OFFSET },
  22527   { 0x01cf, 770, UNICODE_NOT_PRESENT_OFFSET },
  22528   { 0x01d0, 774, UNICODE_NOT_PRESENT_OFFSET },
  22529   { 0x01d1, 778, UNICODE_NOT_PRESENT_OFFSET },
  22530   { 0x01d2, 782, UNICODE_NOT_PRESENT_OFFSET },
  22531   { 0x01d3, 786, UNICODE_NOT_PRESENT_OFFSET },
  22532   { 0x01d4, 790, UNICODE_NOT_PRESENT_OFFSET },
  22533   { 0x01d5, 794, UNICODE_NOT_PRESENT_OFFSET },
  22534   { 0x01d6, 800, UNICODE_NOT_PRESENT_OFFSET },
  22535   { 0x01d7, 806, UNICODE_NOT_PRESENT_OFFSET },
  22536   { 0x01d8, 812, UNICODE_NOT_PRESENT_OFFSET },
  22537   { 0x01d9, 818, UNICODE_NOT_PRESENT_OFFSET },
  22538   { 0x01da, 824, UNICODE_NOT_PRESENT_OFFSET },
  22539   { 0x01db, 830, UNICODE_NOT_PRESENT_OFFSET },
  22540   { 0x01dc, 836, UNICODE_NOT_PRESENT_OFFSET },
  22541   { 0x01de, 842, UNICODE_NOT_PRESENT_OFFSET },
  22542   { 0x01df, 848, UNICODE_NOT_PRESENT_OFFSET },
  22543   { 0x01e0, 854, UNICODE_NOT_PRESENT_OFFSET },
  22544   { 0x01e1, 860, UNICODE_NOT_PRESENT_OFFSET },
  22545   { 0x01e2, 866, UNICODE_NOT_PRESENT_OFFSET },
  22546   { 0x01e3, 871, UNICODE_NOT_PRESENT_OFFSET },
  22547   { 0x01e6, 876, UNICODE_NOT_PRESENT_OFFSET },
  22548   { 0x01e7, 880, UNICODE_NOT_PRESENT_OFFSET },
  22549   { 0x01e8, 884, UNICODE_NOT_PRESENT_OFFSET },
  22550   { 0x01e9, 888, UNICODE_NOT_PRESENT_OFFSET },
  22551   { 0x01ea, 892, UNICODE_NOT_PRESENT_OFFSET },
  22552   { 0x01eb, 896, UNICODE_NOT_PRESENT_OFFSET },
  22553   { 0x01ec, 900, UNICODE_NOT_PRESENT_OFFSET },
  22554   { 0x01ed, 906, UNICODE_NOT_PRESENT_OFFSET },
  22555   { 0x01ee, 912, UNICODE_NOT_PRESENT_OFFSET },
  22556   { 0x01ef, 917, UNICODE_NOT_PRESENT_OFFSET },
  22557   { 0x01f0, 922, UNICODE_NOT_PRESENT_OFFSET },
  22558   { 0x01f1, UNICODE_NOT_PRESENT_OFFSET, 926 },
  22559   { 0x01f2, UNICODE_NOT_PRESENT_OFFSET, 929 },
  22560   { 0x01f3, UNICODE_NOT_PRESENT_OFFSET, 932 },
  22561   { 0x01f4, 935, UNICODE_NOT_PRESENT_OFFSET },
  22562   { 0x01f5, 939, UNICODE_NOT_PRESENT_OFFSET },
  22563   { 0x01f8, 943, UNICODE_NOT_PRESENT_OFFSET },
  22564   { 0x01f9, 947, UNICODE_NOT_PRESENT_OFFSET },
  22565   { 0x01fa, 951, UNICODE_NOT_PRESENT_OFFSET },
  22566   { 0x01fb, 957, UNICODE_NOT_PRESENT_OFFSET },
  22567   { 0x01fc, 963, UNICODE_NOT_PRESENT_OFFSET },
  22568   { 0x01fd, 968, UNICODE_NOT_PRESENT_OFFSET },
  22569   { 0x01fe, 973, UNICODE_NOT_PRESENT_OFFSET },
  22570   { 0x01ff, 978, UNICODE_NOT_PRESENT_OFFSET },
  22571   { 0x0200, 983, UNICODE_NOT_PRESENT_OFFSET },
  22572   { 0x0201, 987, UNICODE_NOT_PRESENT_OFFSET },
  22573   { 0x0202, 991, UNICODE_NOT_PRESENT_OFFSET },
  22574   { 0x0203, 995, UNICODE_NOT_PRESENT_OFFSET },
  22575   { 0x0204, 999, UNICODE_NOT_PRESENT_OFFSET },
  22576   { 0x0205, 1003, UNICODE_NOT_PRESENT_OFFSET },
  22577   { 0x0206, 1007, UNICODE_NOT_PRESENT_OFFSET },
  22578   { 0x0207, 1011, UNICODE_NOT_PRESENT_OFFSET },
  22579   { 0x0208, 1015, UNICODE_NOT_PRESENT_OFFSET },
  22580   { 0x0209, 1019, UNICODE_NOT_PRESENT_OFFSET },
  22581   { 0x020a, 1023, UNICODE_NOT_PRESENT_OFFSET },
  22582   { 0x020b, 1027, UNICODE_NOT_PRESENT_OFFSET },
  22583   { 0x020c, 1031, UNICODE_NOT_PRESENT_OFFSET },
  22584   { 0x020d, 1035, UNICODE_NOT_PRESENT_OFFSET },
  22585   { 0x020e, 1039, UNICODE_NOT_PRESENT_OFFSET },
  22586   { 0x020f, 1043, UNICODE_NOT_PRESENT_OFFSET },
  22587   { 0x0210, 1047, UNICODE_NOT_PRESENT_OFFSET },
  22588   { 0x0211, 1051, UNICODE_NOT_PRESENT_OFFSET },
  22589   { 0x0212, 1055, UNICODE_NOT_PRESENT_OFFSET },
  22590   { 0x0213, 1059, UNICODE_NOT_PRESENT_OFFSET },
  22591   { 0x0214, 1063, UNICODE_NOT_PRESENT_OFFSET },
  22592   { 0x0215, 1067, UNICODE_NOT_PRESENT_OFFSET },
  22593   { 0x0216, 1071, UNICODE_NOT_PRESENT_OFFSET },
  22594   { 0x0217, 1075, UNICODE_NOT_PRESENT_OFFSET },
  22595   { 0x0218, 1079, UNICODE_NOT_PRESENT_OFFSET },
  22596   { 0x0219, 1083, UNICODE_NOT_PRESENT_OFFSET },
  22597   { 0x021a, 1087, UNICODE_NOT_PRESENT_OFFSET },
  22598   { 0x021b, 1091, UNICODE_NOT_PRESENT_OFFSET },
  22599   { 0x021e, 1095, UNICODE_NOT_PRESENT_OFFSET },
  22600   { 0x021f, 1099, UNICODE_NOT_PRESENT_OFFSET },
  22601   { 0x0226, 1103, UNICODE_NOT_PRESENT_OFFSET },
  22602   { 0x0227, 1107, UNICODE_NOT_PRESENT_OFFSET },
  22603   { 0x0228, 1111, UNICODE_NOT_PRESENT_OFFSET },
  22604   { 0x0229, 1115, UNICODE_NOT_PRESENT_OFFSET },
  22605   { 0x022a, 1119, UNICODE_NOT_PRESENT_OFFSET },
  22606   { 0x022b, 1125, UNICODE_NOT_PRESENT_OFFSET },
  22607   { 0x022c, 1131, UNICODE_NOT_PRESENT_OFFSET },
  22608   { 0x022d, 1137, UNICODE_NOT_PRESENT_OFFSET },
  22609   { 0x022e, 1143, UNICODE_NOT_PRESENT_OFFSET },
  22610   { 0x022f, 1147, UNICODE_NOT_PRESENT_OFFSET },
  22611   { 0x0230, 1151, UNICODE_NOT_PRESENT_OFFSET },
  22612   { 0x0231, 1157, UNICODE_NOT_PRESENT_OFFSET },
  22613   { 0x0232, 1163, UNICODE_NOT_PRESENT_OFFSET },
  22614   { 0x0233, 1167, UNICODE_NOT_PRESENT_OFFSET },
  22615   { 0x02b0, UNICODE_NOT_PRESENT_OFFSET, 1171 },
  22616   { 0x02b1, UNICODE_NOT_PRESENT_OFFSET, 1173 },
  22617   { 0x02b2, UNICODE_NOT_PRESENT_OFFSET, 1176 },
  22618   { 0x02b3, UNICODE_NOT_PRESENT_OFFSET, 1178 },
  22619   { 0x02b4, UNICODE_NOT_PRESENT_OFFSET, 1180 },
  22620   { 0x02b5, UNICODE_NOT_PRESENT_OFFSET, 1183 },
  22621   { 0x02b6, UNICODE_NOT_PRESENT_OFFSET, 1186 },
  22622   { 0x02b7, UNICODE_NOT_PRESENT_OFFSET, 1189 },
  22623   { 0x02b8, UNICODE_NOT_PRESENT_OFFSET, 1191 },
  22624   { 0x02d8, UNICODE_NOT_PRESENT_OFFSET, 1193 },
  22625   { 0x02d9, UNICODE_NOT_PRESENT_OFFSET, 1197 },
  22626   { 0x02da, UNICODE_NOT_PRESENT_OFFSET, 1201 },
  22627   { 0x02db, UNICODE_NOT_PRESENT_OFFSET, 1205 },
  22628   { 0x02dc, UNICODE_NOT_PRESENT_OFFSET, 1209 },
  22629   { 0x02dd, UNICODE_NOT_PRESENT_OFFSET, 1213 },
  22630   { 0x02e0, UNICODE_NOT_PRESENT_OFFSET, 1217 },
  22631   { 0x02e1, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  22632   { 0x02e2, UNICODE_NOT_PRESENT_OFFSET, 711 },
  22633   { 0x02e3, UNICODE_NOT_PRESENT_OFFSET, 1222 },
  22634   { 0x02e4, UNICODE_NOT_PRESENT_OFFSET, 1224 },
  22635   { 0x0340, 1227, UNICODE_NOT_PRESENT_OFFSET },
  22636   { 0x0341, 1230, UNICODE_NOT_PRESENT_OFFSET },
  22637   { 0x0343, 1233, UNICODE_NOT_PRESENT_OFFSET },
  22638   { 0x0344, 1236, UNICODE_NOT_PRESENT_OFFSET },
  22639   { 0x0374, 1241, UNICODE_NOT_PRESENT_OFFSET },
  22640   { 0x037a, UNICODE_NOT_PRESENT_OFFSET, 1244 },
  22641   { 0x037e, 1248, UNICODE_NOT_PRESENT_OFFSET },
  22642   { 0x0384, UNICODE_NOT_PRESENT_OFFSET, 16 },
  22643   { 0x0385, 1250, 1255 },
  22644   { 0x0386, 1261, UNICODE_NOT_PRESENT_OFFSET },
  22645   { 0x0387, 1266, UNICODE_NOT_PRESENT_OFFSET },
  22646   { 0x0388, 1269, UNICODE_NOT_PRESENT_OFFSET },
  22647   { 0x0389, 1274, UNICODE_NOT_PRESENT_OFFSET },
  22648   { 0x038a, 1279, UNICODE_NOT_PRESENT_OFFSET },
  22649   { 0x038c, 1284, UNICODE_NOT_PRESENT_OFFSET },
  22650   { 0x038e, 1289, UNICODE_NOT_PRESENT_OFFSET },
  22651   { 0x038f, 1294, UNICODE_NOT_PRESENT_OFFSET },
  22652   { 0x0390, 1299, UNICODE_NOT_PRESENT_OFFSET },
  22653   { 0x03aa, 1306, UNICODE_NOT_PRESENT_OFFSET },
  22654   { 0x03ab, 1311, UNICODE_NOT_PRESENT_OFFSET },
  22655   { 0x03ac, 1316, UNICODE_NOT_PRESENT_OFFSET },
  22656   { 0x03ad, 1321, UNICODE_NOT_PRESENT_OFFSET },
  22657   { 0x03ae, 1326, UNICODE_NOT_PRESENT_OFFSET },
  22658   { 0x03af, 1331, UNICODE_NOT_PRESENT_OFFSET },
  22659   { 0x03b0, 1336, UNICODE_NOT_PRESENT_OFFSET },
  22660   { 0x03ca, 1343, UNICODE_NOT_PRESENT_OFFSET },
  22661   { 0x03cb, 1348, UNICODE_NOT_PRESENT_OFFSET },
  22662   { 0x03cc, 1353, UNICODE_NOT_PRESENT_OFFSET },
  22663   { 0x03cd, 1358, UNICODE_NOT_PRESENT_OFFSET },
  22664   { 0x03ce, 1363, UNICODE_NOT_PRESENT_OFFSET },
  22665   { 0x03d0, UNICODE_NOT_PRESENT_OFFSET, 1368 },
  22666   { 0x03d1, UNICODE_NOT_PRESENT_OFFSET, 1371 },
  22667   { 0x03d2, UNICODE_NOT_PRESENT_OFFSET, 1374 },
  22668   { 0x03d3, 1377, 1289 },
  22669   { 0x03d4, 1382, 1311 },
  22670   { 0x03d5, UNICODE_NOT_PRESENT_OFFSET, 1387 },
  22671   { 0x03d6, UNICODE_NOT_PRESENT_OFFSET, 1390 },
  22672   { 0x03f0, UNICODE_NOT_PRESENT_OFFSET, 1393 },
  22673   { 0x03f1, UNICODE_NOT_PRESENT_OFFSET, 1396 },
  22674   { 0x03f2, UNICODE_NOT_PRESENT_OFFSET, 1399 },
  22675   { 0x03f4, UNICODE_NOT_PRESENT_OFFSET, 1402 },
  22676   { 0x03f5, UNICODE_NOT_PRESENT_OFFSET, 1405 },
  22677   { 0x03f9, UNICODE_NOT_PRESENT_OFFSET, 1408 },
  22678   { 0x0400, 1411, UNICODE_NOT_PRESENT_OFFSET },
  22679   { 0x0401, 1416, UNICODE_NOT_PRESENT_OFFSET },
  22680   { 0x0403, 1421, UNICODE_NOT_PRESENT_OFFSET },
  22681   { 0x0407, 1426, UNICODE_NOT_PRESENT_OFFSET },
  22682   { 0x040c, 1431, UNICODE_NOT_PRESENT_OFFSET },
  22683   { 0x040d, 1436, UNICODE_NOT_PRESENT_OFFSET },
  22684   { 0x040e, 1441, UNICODE_NOT_PRESENT_OFFSET },
  22685   { 0x0419, 1446, UNICODE_NOT_PRESENT_OFFSET },
  22686   { 0x0439, 1451, UNICODE_NOT_PRESENT_OFFSET },
  22687   { 0x0450, 1456, UNICODE_NOT_PRESENT_OFFSET },
  22688   { 0x0451, 1461, UNICODE_NOT_PRESENT_OFFSET },
  22689   { 0x0453, 1466, UNICODE_NOT_PRESENT_OFFSET },
  22690   { 0x0457, 1471, UNICODE_NOT_PRESENT_OFFSET },
  22691   { 0x045c, 1476, UNICODE_NOT_PRESENT_OFFSET },
  22692   { 0x045d, 1481, UNICODE_NOT_PRESENT_OFFSET },
  22693   { 0x045e, 1486, UNICODE_NOT_PRESENT_OFFSET },
  22694   { 0x0476, 1491, UNICODE_NOT_PRESENT_OFFSET },
  22695   { 0x0477, 1496, UNICODE_NOT_PRESENT_OFFSET },
  22696   { 0x04c1, 1501, UNICODE_NOT_PRESENT_OFFSET },
  22697   { 0x04c2, 1506, UNICODE_NOT_PRESENT_OFFSET },
  22698   { 0x04d0, 1511, UNICODE_NOT_PRESENT_OFFSET },
  22699   { 0x04d1, 1516, UNICODE_NOT_PRESENT_OFFSET },
  22700   { 0x04d2, 1521, UNICODE_NOT_PRESENT_OFFSET },
  22701   { 0x04d3, 1526, UNICODE_NOT_PRESENT_OFFSET },
  22702   { 0x04d6, 1531, UNICODE_NOT_PRESENT_OFFSET },
  22703   { 0x04d7, 1536, UNICODE_NOT_PRESENT_OFFSET },
  22704   { 0x04da, 1541, UNICODE_NOT_PRESENT_OFFSET },
  22705   { 0x04db, 1546, UNICODE_NOT_PRESENT_OFFSET },
  22706   { 0x04dc, 1551, UNICODE_NOT_PRESENT_OFFSET },
  22707   { 0x04dd, 1556, UNICODE_NOT_PRESENT_OFFSET },
  22708   { 0x04de, 1561, UNICODE_NOT_PRESENT_OFFSET },
  22709   { 0x04df, 1566, UNICODE_NOT_PRESENT_OFFSET },
  22710   { 0x04e2, 1571, UNICODE_NOT_PRESENT_OFFSET },
  22711   { 0x04e3, 1576, UNICODE_NOT_PRESENT_OFFSET },
  22712   { 0x04e4, 1581, UNICODE_NOT_PRESENT_OFFSET },
  22713   { 0x04e5, 1586, UNICODE_NOT_PRESENT_OFFSET },
  22714   { 0x04e6, 1591, UNICODE_NOT_PRESENT_OFFSET },
  22715   { 0x04e7, 1596, UNICODE_NOT_PRESENT_OFFSET },
  22716   { 0x04ea, 1601, UNICODE_NOT_PRESENT_OFFSET },
  22717   { 0x04eb, 1606, UNICODE_NOT_PRESENT_OFFSET },
  22718   { 0x04ec, 1611, UNICODE_NOT_PRESENT_OFFSET },
  22719   { 0x04ed, 1616, UNICODE_NOT_PRESENT_OFFSET },
  22720   { 0x04ee, 1621, UNICODE_NOT_PRESENT_OFFSET },
  22721   { 0x04ef, 1626, UNICODE_NOT_PRESENT_OFFSET },
  22722   { 0x04f0, 1631, UNICODE_NOT_PRESENT_OFFSET },
  22723   { 0x04f1, 1636, UNICODE_NOT_PRESENT_OFFSET },
  22724   { 0x04f2, 1641, UNICODE_NOT_PRESENT_OFFSET },
  22725   { 0x04f3, 1646, UNICODE_NOT_PRESENT_OFFSET },
  22726   { 0x04f4, 1651, UNICODE_NOT_PRESENT_OFFSET },
  22727   { 0x04f5, 1656, UNICODE_NOT_PRESENT_OFFSET },
  22728   { 0x04f8, 1661, UNICODE_NOT_PRESENT_OFFSET },
  22729   { 0x04f9, 1666, UNICODE_NOT_PRESENT_OFFSET },
  22730   { 0x0587, UNICODE_NOT_PRESENT_OFFSET, 1671 },
  22731   { 0x0622, 1676, UNICODE_NOT_PRESENT_OFFSET },
  22732   { 0x0623, 1681, UNICODE_NOT_PRESENT_OFFSET },
  22733   { 0x0624, 1686, UNICODE_NOT_PRESENT_OFFSET },
  22734   { 0x0625, 1691, UNICODE_NOT_PRESENT_OFFSET },
  22735   { 0x0626, 1696, UNICODE_NOT_PRESENT_OFFSET },
  22736   { 0x0675, UNICODE_NOT_PRESENT_OFFSET, 1701 },
  22737   { 0x0676, UNICODE_NOT_PRESENT_OFFSET, 1706 },
  22738   { 0x0677, UNICODE_NOT_PRESENT_OFFSET, 1711 },
  22739   { 0x0678, UNICODE_NOT_PRESENT_OFFSET, 1716 },
  22740   { 0x06c0, 1721, UNICODE_NOT_PRESENT_OFFSET },
  22741   { 0x06c2, 1726, UNICODE_NOT_PRESENT_OFFSET },
  22742   { 0x06d3, 1731, UNICODE_NOT_PRESENT_OFFSET },
  22743   { 0x0929, 1736, UNICODE_NOT_PRESENT_OFFSET },
  22744   { 0x0931, 1743, UNICODE_NOT_PRESENT_OFFSET },
  22745   { 0x0934, 1750, UNICODE_NOT_PRESENT_OFFSET },
  22746   { 0x0958, 1757, UNICODE_NOT_PRESENT_OFFSET },
  22747   { 0x0959, 1764, UNICODE_NOT_PRESENT_OFFSET },
  22748   { 0x095a, 1771, UNICODE_NOT_PRESENT_OFFSET },
  22749   { 0x095b, 1778, UNICODE_NOT_PRESENT_OFFSET },
  22750   { 0x095c, 1785, UNICODE_NOT_PRESENT_OFFSET },
  22751   { 0x095d, 1792, UNICODE_NOT_PRESENT_OFFSET },
  22752   { 0x095e, 1799, UNICODE_NOT_PRESENT_OFFSET },
  22753   { 0x095f, 1806, UNICODE_NOT_PRESENT_OFFSET },
  22754   { 0x09cb, 1813, UNICODE_NOT_PRESENT_OFFSET },
  22755   { 0x09cc, 1820, UNICODE_NOT_PRESENT_OFFSET },
  22756   { 0x09dc, 1827, UNICODE_NOT_PRESENT_OFFSET },
  22757   { 0x09dd, 1834, UNICODE_NOT_PRESENT_OFFSET },
  22758   { 0x09df, 1841, UNICODE_NOT_PRESENT_OFFSET },
  22759   { 0x0a33, 1848, UNICODE_NOT_PRESENT_OFFSET },
  22760   { 0x0a36, 1855, UNICODE_NOT_PRESENT_OFFSET },
  22761   { 0x0a59, 1862, UNICODE_NOT_PRESENT_OFFSET },
  22762   { 0x0a5a, 1869, UNICODE_NOT_PRESENT_OFFSET },
  22763   { 0x0a5b, 1876, UNICODE_NOT_PRESENT_OFFSET },
  22764   { 0x0a5e, 1883, UNICODE_NOT_PRESENT_OFFSET },
  22765   { 0x0b48, 1890, UNICODE_NOT_PRESENT_OFFSET },
  22766   { 0x0b4b, 1897, UNICODE_NOT_PRESENT_OFFSET },
  22767   { 0x0b4c, 1904, UNICODE_NOT_PRESENT_OFFSET },
  22768   { 0x0b5c, 1911, UNICODE_NOT_PRESENT_OFFSET },
  22769   { 0x0b5d, 1918, UNICODE_NOT_PRESENT_OFFSET },
  22770   { 0x0b94, 1925, UNICODE_NOT_PRESENT_OFFSET },
  22771   { 0x0bca, 1932, UNICODE_NOT_PRESENT_OFFSET },
  22772   { 0x0bcb, 1939, UNICODE_NOT_PRESENT_OFFSET },
  22773   { 0x0bcc, 1946, UNICODE_NOT_PRESENT_OFFSET },
  22774   { 0x0c48, 1953, UNICODE_NOT_PRESENT_OFFSET },
  22775   { 0x0cc0, 1960, UNICODE_NOT_PRESENT_OFFSET },
  22776   { 0x0cc7, 1967, UNICODE_NOT_PRESENT_OFFSET },
  22777   { 0x0cc8, 1974, UNICODE_NOT_PRESENT_OFFSET },
  22778   { 0x0cca, 1981, UNICODE_NOT_PRESENT_OFFSET },
  22779   { 0x0ccb, 1988, UNICODE_NOT_PRESENT_OFFSET },
  22780   { 0x0d4a, 1998, UNICODE_NOT_PRESENT_OFFSET },
  22781   { 0x0d4b, 2005, UNICODE_NOT_PRESENT_OFFSET },
  22782   { 0x0d4c, 2012, UNICODE_NOT_PRESENT_OFFSET },
  22783   { 0x0dda, 2019, UNICODE_NOT_PRESENT_OFFSET },
  22784   { 0x0ddc, 2026, UNICODE_NOT_PRESENT_OFFSET },
  22785   { 0x0ddd, 2033, UNICODE_NOT_PRESENT_OFFSET },
  22786   { 0x0dde, 2043, UNICODE_NOT_PRESENT_OFFSET },
  22787   { 0x0e33, UNICODE_NOT_PRESENT_OFFSET, 2050 },
  22788   { 0x0eb3, UNICODE_NOT_PRESENT_OFFSET, 2057 },
  22789   { 0x0edc, UNICODE_NOT_PRESENT_OFFSET, 2064 },
  22790   { 0x0edd, UNICODE_NOT_PRESENT_OFFSET, 2071 },
  22791   { 0x0f0c, UNICODE_NOT_PRESENT_OFFSET, 2078 },
  22792   { 0x0f43, 2082, UNICODE_NOT_PRESENT_OFFSET },
  22793   { 0x0f4d, 2089, UNICODE_NOT_PRESENT_OFFSET },
  22794   { 0x0f52, 2096, UNICODE_NOT_PRESENT_OFFSET },
  22795   { 0x0f57, 2103, UNICODE_NOT_PRESENT_OFFSET },
  22796   { 0x0f5c, 2110, UNICODE_NOT_PRESENT_OFFSET },
  22797   { 0x0f69, 2117, UNICODE_NOT_PRESENT_OFFSET },
  22798   { 0x0f73, 2124, UNICODE_NOT_PRESENT_OFFSET },
  22799   { 0x0f75, 2131, UNICODE_NOT_PRESENT_OFFSET },
  22800   { 0x0f76, 2138, UNICODE_NOT_PRESENT_OFFSET },
  22801   { 0x0f77, UNICODE_NOT_PRESENT_OFFSET, 2145 },
  22802   { 0x0f78, 2155, UNICODE_NOT_PRESENT_OFFSET },
  22803   { 0x0f79, UNICODE_NOT_PRESENT_OFFSET, 2162 },
  22804   { 0x0f81, 2172, UNICODE_NOT_PRESENT_OFFSET },
  22805   { 0x0f93, 2179, UNICODE_NOT_PRESENT_OFFSET },
  22806   { 0x0f9d, 2186, UNICODE_NOT_PRESENT_OFFSET },
  22807   { 0x0fa2, 2193, UNICODE_NOT_PRESENT_OFFSET },
  22808   { 0x0fa7, 2200, UNICODE_NOT_PRESENT_OFFSET },
  22809   { 0x0fac, 2207, UNICODE_NOT_PRESENT_OFFSET },
  22810   { 0x0fb9, 2214, UNICODE_NOT_PRESENT_OFFSET },
  22811   { 0x1026, 2221, UNICODE_NOT_PRESENT_OFFSET },
  22812   { 0x10fc, UNICODE_NOT_PRESENT_OFFSET, 2228 },
  22813   { 0x1b06, 2232, UNICODE_NOT_PRESENT_OFFSET },
  22814   { 0x1b08, 2239, UNICODE_NOT_PRESENT_OFFSET },
  22815   { 0x1b0a, 2246, UNICODE_NOT_PRESENT_OFFSET },
  22816   { 0x1b0c, 2253, UNICODE_NOT_PRESENT_OFFSET },
  22817   { 0x1b0e, 2260, UNICODE_NOT_PRESENT_OFFSET },
  22818   { 0x1b12, 2267, UNICODE_NOT_PRESENT_OFFSET },
  22819   { 0x1b3b, 2274, UNICODE_NOT_PRESENT_OFFSET },
  22820   { 0x1b3d, 2281, UNICODE_NOT_PRESENT_OFFSET },
  22821   { 0x1b40, 2288, UNICODE_NOT_PRESENT_OFFSET },
  22822   { 0x1b41, 2295, UNICODE_NOT_PRESENT_OFFSET },
  22823   { 0x1b43, 2302, UNICODE_NOT_PRESENT_OFFSET },
  22824   { 0x1d2c, UNICODE_NOT_PRESENT_OFFSET, 2309 },
  22825   { 0x1d2d, UNICODE_NOT_PRESENT_OFFSET, 2311 },
  22826   { 0x1d2e, UNICODE_NOT_PRESENT_OFFSET, 2314 },
  22827   { 0x1d30, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  22828   { 0x1d31, UNICODE_NOT_PRESENT_OFFSET, 2318 },
  22829   { 0x1d32, UNICODE_NOT_PRESENT_OFFSET, 2320 },
  22830   { 0x1d33, UNICODE_NOT_PRESENT_OFFSET, 2323 },
  22831   { 0x1d34, UNICODE_NOT_PRESENT_OFFSET, 2325 },
  22832   { 0x1d35, UNICODE_NOT_PRESENT_OFFSET, 2327 },
  22833   { 0x1d36, UNICODE_NOT_PRESENT_OFFSET, 2329 },
  22834   { 0x1d37, UNICODE_NOT_PRESENT_OFFSET, 2331 },
  22835   { 0x1d38, UNICODE_NOT_PRESENT_OFFSET, 2333 },
  22836   { 0x1d39, UNICODE_NOT_PRESENT_OFFSET, 2335 },
  22837   { 0x1d3a, UNICODE_NOT_PRESENT_OFFSET, 2337 },
  22838   { 0x1d3c, UNICODE_NOT_PRESENT_OFFSET, 2339 },
  22839   { 0x1d3d, UNICODE_NOT_PRESENT_OFFSET, 2341 },
  22840   { 0x1d3e, UNICODE_NOT_PRESENT_OFFSET, 2344 },
  22841   { 0x1d3f, UNICODE_NOT_PRESENT_OFFSET, 2346 },
  22842   { 0x1d40, UNICODE_NOT_PRESENT_OFFSET, 2348 },
  22843   { 0x1d41, UNICODE_NOT_PRESENT_OFFSET, 2350 },
  22844   { 0x1d42, UNICODE_NOT_PRESENT_OFFSET, 2352 },
  22845   { 0x1d43, UNICODE_NOT_PRESENT_OFFSET, 6 },
  22846   { 0x1d44, UNICODE_NOT_PRESENT_OFFSET, 2354 },
  22847   { 0x1d45, UNICODE_NOT_PRESENT_OFFSET, 2357 },
  22848   { 0x1d46, UNICODE_NOT_PRESENT_OFFSET, 2360 },
  22849   { 0x1d47, UNICODE_NOT_PRESENT_OFFSET, 2364 },
  22850   { 0x1d48, UNICODE_NOT_PRESENT_OFFSET, 2366 },
  22851   { 0x1d49, UNICODE_NOT_PRESENT_OFFSET, 2368 },
  22852   { 0x1d4a, UNICODE_NOT_PRESENT_OFFSET, 2370 },
  22853   { 0x1d4b, UNICODE_NOT_PRESENT_OFFSET, 2373 },
  22854   { 0x1d4c, UNICODE_NOT_PRESENT_OFFSET, 2376 },
  22855   { 0x1d4d, UNICODE_NOT_PRESENT_OFFSET, 2379 },
  22856   { 0x1d4f, UNICODE_NOT_PRESENT_OFFSET, 2381 },
  22857   { 0x1d50, UNICODE_NOT_PRESENT_OFFSET, 2383 },
  22858   { 0x1d51, UNICODE_NOT_PRESENT_OFFSET, 2385 },
  22859   { 0x1d52, UNICODE_NOT_PRESENT_OFFSET, 29 },
  22860   { 0x1d53, UNICODE_NOT_PRESENT_OFFSET, 2388 },
  22861   { 0x1d54, UNICODE_NOT_PRESENT_OFFSET, 2391 },
  22862   { 0x1d55, UNICODE_NOT_PRESENT_OFFSET, 2395 },
  22863   { 0x1d56, UNICODE_NOT_PRESENT_OFFSET, 2399 },
  22864   { 0x1d57, UNICODE_NOT_PRESENT_OFFSET, 2401 },
  22865   { 0x1d58, UNICODE_NOT_PRESENT_OFFSET, 2403 },
  22866   { 0x1d59, UNICODE_NOT_PRESENT_OFFSET, 2405 },
  22867   { 0x1d5a, UNICODE_NOT_PRESENT_OFFSET, 2409 },
  22868   { 0x1d5b, UNICODE_NOT_PRESENT_OFFSET, 2412 },
  22869   { 0x1d5c, UNICODE_NOT_PRESENT_OFFSET, 2414 },
  22870   { 0x1d5d, UNICODE_NOT_PRESENT_OFFSET, 1368 },
  22871   { 0x1d5e, UNICODE_NOT_PRESENT_OFFSET, 2418 },
  22872   { 0x1d5f, UNICODE_NOT_PRESENT_OFFSET, 2421 },
  22873   { 0x1d60, UNICODE_NOT_PRESENT_OFFSET, 1387 },
  22874   { 0x1d61, UNICODE_NOT_PRESENT_OFFSET, 2424 },
  22875   { 0x1d62, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  22876   { 0x1d63, UNICODE_NOT_PRESENT_OFFSET, 1178 },
  22877   { 0x1d64, UNICODE_NOT_PRESENT_OFFSET, 2403 },
  22878   { 0x1d65, UNICODE_NOT_PRESENT_OFFSET, 2412 },
  22879   { 0x1d66, UNICODE_NOT_PRESENT_OFFSET, 1368 },
  22880   { 0x1d67, UNICODE_NOT_PRESENT_OFFSET, 2418 },
  22881   { 0x1d68, UNICODE_NOT_PRESENT_OFFSET, 1396 },
  22882   { 0x1d69, UNICODE_NOT_PRESENT_OFFSET, 1387 },
  22883   { 0x1d6a, UNICODE_NOT_PRESENT_OFFSET, 2424 },
  22884   { 0x1d78, UNICODE_NOT_PRESENT_OFFSET, 2429 },
  22885   { 0x1d9b, UNICODE_NOT_PRESENT_OFFSET, 2432 },
  22886   { 0x1d9c, UNICODE_NOT_PRESENT_OFFSET, 2435 },
  22887   { 0x1d9d, UNICODE_NOT_PRESENT_OFFSET, 2437 },
  22888   { 0x1d9e, UNICODE_NOT_PRESENT_OFFSET, 2440 },
  22889   { 0x1d9f, UNICODE_NOT_PRESENT_OFFSET, 2376 },
  22890   { 0x1da0, UNICODE_NOT_PRESENT_OFFSET, 2443 },
  22891   { 0x1da1, UNICODE_NOT_PRESENT_OFFSET, 2445 },
  22892   { 0x1da2, UNICODE_NOT_PRESENT_OFFSET, 2448 },
  22893   { 0x1da3, UNICODE_NOT_PRESENT_OFFSET, 2451 },
  22894   { 0x1da4, UNICODE_NOT_PRESENT_OFFSET, 2454 },
  22895   { 0x1da5, UNICODE_NOT_PRESENT_OFFSET, 2457 },
  22896   { 0x1da6, UNICODE_NOT_PRESENT_OFFSET, 2460 },
  22897   { 0x1da7, UNICODE_NOT_PRESENT_OFFSET, 2463 },
  22898   { 0x1da8, UNICODE_NOT_PRESENT_OFFSET, 2467 },
  22899   { 0x1da9, UNICODE_NOT_PRESENT_OFFSET, 2470 },
  22900   { 0x1daa, UNICODE_NOT_PRESENT_OFFSET, 2473 },
  22901   { 0x1dab, UNICODE_NOT_PRESENT_OFFSET, 2477 },
  22902   { 0x1dac, UNICODE_NOT_PRESENT_OFFSET, 2480 },
  22903   { 0x1dad, UNICODE_NOT_PRESENT_OFFSET, 2483 },
  22904   { 0x1dae, UNICODE_NOT_PRESENT_OFFSET, 2486 },
  22905   { 0x1daf, UNICODE_NOT_PRESENT_OFFSET, 2489 },
  22906   { 0x1db0, UNICODE_NOT_PRESENT_OFFSET, 2492 },
  22907   { 0x1db1, UNICODE_NOT_PRESENT_OFFSET, 2495 },
  22908   { 0x1db2, UNICODE_NOT_PRESENT_OFFSET, 2498 },
  22909   { 0x1db3, UNICODE_NOT_PRESENT_OFFSET, 2501 },
  22910   { 0x1db4, UNICODE_NOT_PRESENT_OFFSET, 2504 },
  22911   { 0x1db5, UNICODE_NOT_PRESENT_OFFSET, 2507 },
  22912   { 0x1db6, UNICODE_NOT_PRESENT_OFFSET, 2510 },
  22913   { 0x1db7, UNICODE_NOT_PRESENT_OFFSET, 2513 },
  22914   { 0x1db8, UNICODE_NOT_PRESENT_OFFSET, 2516 },
  22915   { 0x1db9, UNICODE_NOT_PRESENT_OFFSET, 2520 },
  22916   { 0x1dba, UNICODE_NOT_PRESENT_OFFSET, 2523 },
  22917   { 0x1dbb, UNICODE_NOT_PRESENT_OFFSET, 2526 },
  22918   { 0x1dbc, UNICODE_NOT_PRESENT_OFFSET, 2528 },
  22919   { 0x1dbd, UNICODE_NOT_PRESENT_OFFSET, 2531 },
  22920   { 0x1dbe, UNICODE_NOT_PRESENT_OFFSET, 2534 },
  22921   { 0x1dbf, UNICODE_NOT_PRESENT_OFFSET, 1371 },
  22922   { 0x1e00, 2537, UNICODE_NOT_PRESENT_OFFSET },
  22923   { 0x1e01, 2541, UNICODE_NOT_PRESENT_OFFSET },
  22924   { 0x1e02, 2545, UNICODE_NOT_PRESENT_OFFSET },
  22925   { 0x1e03, 2549, UNICODE_NOT_PRESENT_OFFSET },
  22926   { 0x1e04, 2553, UNICODE_NOT_PRESENT_OFFSET },
  22927   { 0x1e05, 2557, UNICODE_NOT_PRESENT_OFFSET },
  22928   { 0x1e06, 2561, UNICODE_NOT_PRESENT_OFFSET },
  22929   { 0x1e07, 2565, UNICODE_NOT_PRESENT_OFFSET },
  22930   { 0x1e08, 2569, UNICODE_NOT_PRESENT_OFFSET },
  22931   { 0x1e09, 2575, UNICODE_NOT_PRESENT_OFFSET },
  22932   { 0x1e0a, 2581, UNICODE_NOT_PRESENT_OFFSET },
  22933   { 0x1e0b, 2585, UNICODE_NOT_PRESENT_OFFSET },
  22934   { 0x1e0c, 2589, UNICODE_NOT_PRESENT_OFFSET },
  22935   { 0x1e0d, 2593, UNICODE_NOT_PRESENT_OFFSET },
  22936   { 0x1e0e, 2597, UNICODE_NOT_PRESENT_OFFSET },
  22937   { 0x1e0f, 2601, UNICODE_NOT_PRESENT_OFFSET },
  22938   { 0x1e10, 2605, UNICODE_NOT_PRESENT_OFFSET },
  22939   { 0x1e11, 2609, UNICODE_NOT_PRESENT_OFFSET },
  22940   { 0x1e12, 2613, UNICODE_NOT_PRESENT_OFFSET },
  22941   { 0x1e13, 2617, UNICODE_NOT_PRESENT_OFFSET },
  22942   { 0x1e14, 2621, UNICODE_NOT_PRESENT_OFFSET },
  22943   { 0x1e15, 2627, UNICODE_NOT_PRESENT_OFFSET },
  22944   { 0x1e16, 2633, UNICODE_NOT_PRESENT_OFFSET },
  22945   { 0x1e17, 2639, UNICODE_NOT_PRESENT_OFFSET },
  22946   { 0x1e18, 2645, UNICODE_NOT_PRESENT_OFFSET },
  22947   { 0x1e19, 2649, UNICODE_NOT_PRESENT_OFFSET },
  22948   { 0x1e1a, 2653, UNICODE_NOT_PRESENT_OFFSET },
  22949   { 0x1e1b, 2657, UNICODE_NOT_PRESENT_OFFSET },
  22950   { 0x1e1c, 2661, UNICODE_NOT_PRESENT_OFFSET },
  22951   { 0x1e1d, 2667, UNICODE_NOT_PRESENT_OFFSET },
  22952   { 0x1e1e, 2673, UNICODE_NOT_PRESENT_OFFSET },
  22953   { 0x1e1f, 2677, UNICODE_NOT_PRESENT_OFFSET },
  22954   { 0x1e20, 2681, UNICODE_NOT_PRESENT_OFFSET },
  22955   { 0x1e21, 2685, UNICODE_NOT_PRESENT_OFFSET },
  22956   { 0x1e22, 2689, UNICODE_NOT_PRESENT_OFFSET },
  22957   { 0x1e23, 2693, UNICODE_NOT_PRESENT_OFFSET },
  22958   { 0x1e24, 2697, UNICODE_NOT_PRESENT_OFFSET },
  22959   { 0x1e25, 2701, UNICODE_NOT_PRESENT_OFFSET },
  22960   { 0x1e26, 2705, UNICODE_NOT_PRESENT_OFFSET },
  22961   { 0x1e27, 2709, UNICODE_NOT_PRESENT_OFFSET },
  22962   { 0x1e28, 2713, UNICODE_NOT_PRESENT_OFFSET },
  22963   { 0x1e29, 2717, UNICODE_NOT_PRESENT_OFFSET },
  22964   { 0x1e2a, 2721, UNICODE_NOT_PRESENT_OFFSET },
  22965   { 0x1e2b, 2725, UNICODE_NOT_PRESENT_OFFSET },
  22966   { 0x1e2c, 2729, UNICODE_NOT_PRESENT_OFFSET },
  22967   { 0x1e2d, 2733, UNICODE_NOT_PRESENT_OFFSET },
  22968   { 0x1e2e, 2737, UNICODE_NOT_PRESENT_OFFSET },
  22969   { 0x1e2f, 2743, UNICODE_NOT_PRESENT_OFFSET },
  22970   { 0x1e30, 2749, UNICODE_NOT_PRESENT_OFFSET },
  22971   { 0x1e31, 2753, UNICODE_NOT_PRESENT_OFFSET },
  22972   { 0x1e32, 2757, UNICODE_NOT_PRESENT_OFFSET },
  22973   { 0x1e33, 2761, UNICODE_NOT_PRESENT_OFFSET },
  22974   { 0x1e34, 2765, UNICODE_NOT_PRESENT_OFFSET },
  22975   { 0x1e35, 2769, UNICODE_NOT_PRESENT_OFFSET },
  22976   { 0x1e36, 2773, UNICODE_NOT_PRESENT_OFFSET },
  22977   { 0x1e37, 2777, UNICODE_NOT_PRESENT_OFFSET },
  22978   { 0x1e38, 2781, UNICODE_NOT_PRESENT_OFFSET },
  22979   { 0x1e39, 2787, UNICODE_NOT_PRESENT_OFFSET },
  22980   { 0x1e3a, 2793, UNICODE_NOT_PRESENT_OFFSET },
  22981   { 0x1e3b, 2797, UNICODE_NOT_PRESENT_OFFSET },
  22982   { 0x1e3c, 2801, UNICODE_NOT_PRESENT_OFFSET },
  22983   { 0x1e3d, 2805, UNICODE_NOT_PRESENT_OFFSET },
  22984   { 0x1e3e, 2809, UNICODE_NOT_PRESENT_OFFSET },
  22985   { 0x1e3f, 2813, UNICODE_NOT_PRESENT_OFFSET },
  22986   { 0x1e40, 2817, UNICODE_NOT_PRESENT_OFFSET },
  22987   { 0x1e41, 2821, UNICODE_NOT_PRESENT_OFFSET },
  22988   { 0x1e42, 2825, UNICODE_NOT_PRESENT_OFFSET },
  22989   { 0x1e43, 2829, UNICODE_NOT_PRESENT_OFFSET },
  22990   { 0x1e44, 2833, UNICODE_NOT_PRESENT_OFFSET },
  22991   { 0x1e45, 2837, UNICODE_NOT_PRESENT_OFFSET },
  22992   { 0x1e46, 2841, UNICODE_NOT_PRESENT_OFFSET },
  22993   { 0x1e47, 2845, UNICODE_NOT_PRESENT_OFFSET },
  22994   { 0x1e48, 2849, UNICODE_NOT_PRESENT_OFFSET },
  22995   { 0x1e49, 2853, UNICODE_NOT_PRESENT_OFFSET },
  22996   { 0x1e4a, 2857, UNICODE_NOT_PRESENT_OFFSET },
  22997   { 0x1e4b, 2861, UNICODE_NOT_PRESENT_OFFSET },
  22998   { 0x1e4c, 2865, UNICODE_NOT_PRESENT_OFFSET },
  22999   { 0x1e4d, 2871, UNICODE_NOT_PRESENT_OFFSET },
  23000   { 0x1e4e, 2877, UNICODE_NOT_PRESENT_OFFSET },
  23001   { 0x1e4f, 2883, UNICODE_NOT_PRESENT_OFFSET },
  23002   { 0x1e50, 2889, UNICODE_NOT_PRESENT_OFFSET },
  23003   { 0x1e51, 2895, UNICODE_NOT_PRESENT_OFFSET },
  23004   { 0x1e52, 2901, UNICODE_NOT_PRESENT_OFFSET },
  23005   { 0x1e53, 2907, UNICODE_NOT_PRESENT_OFFSET },
  23006   { 0x1e54, 2913, UNICODE_NOT_PRESENT_OFFSET },
  23007   { 0x1e55, 2917, UNICODE_NOT_PRESENT_OFFSET },
  23008   { 0x1e56, 2921, UNICODE_NOT_PRESENT_OFFSET },
  23009   { 0x1e57, 2925, UNICODE_NOT_PRESENT_OFFSET },
  23010   { 0x1e58, 2929, UNICODE_NOT_PRESENT_OFFSET },
  23011   { 0x1e59, 2933, UNICODE_NOT_PRESENT_OFFSET },
  23012   { 0x1e5a, 2937, UNICODE_NOT_PRESENT_OFFSET },
  23013   { 0x1e5b, 2941, UNICODE_NOT_PRESENT_OFFSET },
  23014   { 0x1e5c, 2945, UNICODE_NOT_PRESENT_OFFSET },
  23015   { 0x1e5d, 2951, UNICODE_NOT_PRESENT_OFFSET },
  23016   { 0x1e5e, 2957, UNICODE_NOT_PRESENT_OFFSET },
  23017   { 0x1e5f, 2961, UNICODE_NOT_PRESENT_OFFSET },
  23018   { 0x1e60, 2965, UNICODE_NOT_PRESENT_OFFSET },
  23019   { 0x1e61, 2969, UNICODE_NOT_PRESENT_OFFSET },
  23020   { 0x1e62, 2973, UNICODE_NOT_PRESENT_OFFSET },
  23021   { 0x1e63, 2977, UNICODE_NOT_PRESENT_OFFSET },
  23022   { 0x1e64, 2981, UNICODE_NOT_PRESENT_OFFSET },
  23023   { 0x1e65, 2987, UNICODE_NOT_PRESENT_OFFSET },
  23024   { 0x1e66, 2993, UNICODE_NOT_PRESENT_OFFSET },
  23025   { 0x1e67, 2999, UNICODE_NOT_PRESENT_OFFSET },
  23026   { 0x1e68, 3005, UNICODE_NOT_PRESENT_OFFSET },
  23027   { 0x1e69, 3011, UNICODE_NOT_PRESENT_OFFSET },
  23028   { 0x1e6a, 3017, UNICODE_NOT_PRESENT_OFFSET },
  23029   { 0x1e6b, 3021, UNICODE_NOT_PRESENT_OFFSET },
  23030   { 0x1e6c, 3025, UNICODE_NOT_PRESENT_OFFSET },
  23031   { 0x1e6d, 3029, UNICODE_NOT_PRESENT_OFFSET },
  23032   { 0x1e6e, 3033, UNICODE_NOT_PRESENT_OFFSET },
  23033   { 0x1e6f, 3037, UNICODE_NOT_PRESENT_OFFSET },
  23034   { 0x1e70, 3041, UNICODE_NOT_PRESENT_OFFSET },
  23035   { 0x1e71, 3045, UNICODE_NOT_PRESENT_OFFSET },
  23036   { 0x1e72, 3049, UNICODE_NOT_PRESENT_OFFSET },
  23037   { 0x1e73, 3053, UNICODE_NOT_PRESENT_OFFSET },
  23038   { 0x1e74, 3057, UNICODE_NOT_PRESENT_OFFSET },
  23039   { 0x1e75, 3061, UNICODE_NOT_PRESENT_OFFSET },
  23040   { 0x1e76, 3065, UNICODE_NOT_PRESENT_OFFSET },
  23041   { 0x1e77, 3069, UNICODE_NOT_PRESENT_OFFSET },
  23042   { 0x1e78, 3073, UNICODE_NOT_PRESENT_OFFSET },
  23043   { 0x1e79, 3079, UNICODE_NOT_PRESENT_OFFSET },
  23044   { 0x1e7a, 3085, UNICODE_NOT_PRESENT_OFFSET },
  23045   { 0x1e7b, 3091, UNICODE_NOT_PRESENT_OFFSET },
  23046   { 0x1e7c, 3097, UNICODE_NOT_PRESENT_OFFSET },
  23047   { 0x1e7d, 3101, UNICODE_NOT_PRESENT_OFFSET },
  23048   { 0x1e7e, 3105, UNICODE_NOT_PRESENT_OFFSET },
  23049   { 0x1e7f, 3109, UNICODE_NOT_PRESENT_OFFSET },
  23050   { 0x1e80, 3113, UNICODE_NOT_PRESENT_OFFSET },
  23051   { 0x1e81, 3117, UNICODE_NOT_PRESENT_OFFSET },
  23052   { 0x1e82, 3121, UNICODE_NOT_PRESENT_OFFSET },
  23053   { 0x1e83, 3125, UNICODE_NOT_PRESENT_OFFSET },
  23054   { 0x1e84, 3129, UNICODE_NOT_PRESENT_OFFSET },
  23055   { 0x1e85, 3133, UNICODE_NOT_PRESENT_OFFSET },
  23056   { 0x1e86, 3137, UNICODE_NOT_PRESENT_OFFSET },
  23057   { 0x1e87, 3141, UNICODE_NOT_PRESENT_OFFSET },
  23058   { 0x1e88, 3145, UNICODE_NOT_PRESENT_OFFSET },
  23059   { 0x1e89, 3149, UNICODE_NOT_PRESENT_OFFSET },
  23060   { 0x1e8a, 3153, UNICODE_NOT_PRESENT_OFFSET },
  23061   { 0x1e8b, 3157, UNICODE_NOT_PRESENT_OFFSET },
  23062   { 0x1e8c, 3161, UNICODE_NOT_PRESENT_OFFSET },
  23063   { 0x1e8d, 3165, UNICODE_NOT_PRESENT_OFFSET },
  23064   { 0x1e8e, 3169, UNICODE_NOT_PRESENT_OFFSET },
  23065   { 0x1e8f, 3173, UNICODE_NOT_PRESENT_OFFSET },
  23066   { 0x1e90, 3177, UNICODE_NOT_PRESENT_OFFSET },
  23067   { 0x1e91, 3181, UNICODE_NOT_PRESENT_OFFSET },
  23068   { 0x1e92, 3185, UNICODE_NOT_PRESENT_OFFSET },
  23069   { 0x1e93, 3189, UNICODE_NOT_PRESENT_OFFSET },
  23070   { 0x1e94, 3193, UNICODE_NOT_PRESENT_OFFSET },
  23071   { 0x1e95, 3197, UNICODE_NOT_PRESENT_OFFSET },
  23072   { 0x1e96, 3201, UNICODE_NOT_PRESENT_OFFSET },
  23073   { 0x1e97, 3205, UNICODE_NOT_PRESENT_OFFSET },
  23074   { 0x1e98, 3209, UNICODE_NOT_PRESENT_OFFSET },
  23075   { 0x1e99, 3213, UNICODE_NOT_PRESENT_OFFSET },
  23076   { 0x1e9a, UNICODE_NOT_PRESENT_OFFSET, 3217 },
  23077   { 0x1e9b, 3221, 2969 },
  23078   { 0x1ea0, 3226, UNICODE_NOT_PRESENT_OFFSET },
  23079   { 0x1ea1, 3230, UNICODE_NOT_PRESENT_OFFSET },
  23080   { 0x1ea2, 3234, UNICODE_NOT_PRESENT_OFFSET },
  23081   { 0x1ea3, 3238, UNICODE_NOT_PRESENT_OFFSET },
  23082   { 0x1ea4, 3242, UNICODE_NOT_PRESENT_OFFSET },
  23083   { 0x1ea5, 3248, UNICODE_NOT_PRESENT_OFFSET },
  23084   { 0x1ea6, 3254, UNICODE_NOT_PRESENT_OFFSET },
  23085   { 0x1ea7, 3260, UNICODE_NOT_PRESENT_OFFSET },
  23086   { 0x1ea8, 3266, UNICODE_NOT_PRESENT_OFFSET },
  23087   { 0x1ea9, 3272, UNICODE_NOT_PRESENT_OFFSET },
  23088   { 0x1eaa, 3278, UNICODE_NOT_PRESENT_OFFSET },
  23089   { 0x1eab, 3284, UNICODE_NOT_PRESENT_OFFSET },
  23090   { 0x1eac, 3290, UNICODE_NOT_PRESENT_OFFSET },
  23091   { 0x1ead, 3296, UNICODE_NOT_PRESENT_OFFSET },
  23092   { 0x1eae, 3302, UNICODE_NOT_PRESENT_OFFSET },
  23093   { 0x1eaf, 3308, UNICODE_NOT_PRESENT_OFFSET },
  23094   { 0x1eb0, 3314, UNICODE_NOT_PRESENT_OFFSET },
  23095   { 0x1eb1, 3320, UNICODE_NOT_PRESENT_OFFSET },
  23096   { 0x1eb2, 3326, UNICODE_NOT_PRESENT_OFFSET },
  23097   { 0x1eb3, 3332, UNICODE_NOT_PRESENT_OFFSET },
  23098   { 0x1eb4, 3338, UNICODE_NOT_PRESENT_OFFSET },
  23099   { 0x1eb5, 3344, UNICODE_NOT_PRESENT_OFFSET },
  23100   { 0x1eb6, 3350, UNICODE_NOT_PRESENT_OFFSET },
  23101   { 0x1eb7, 3356, UNICODE_NOT_PRESENT_OFFSET },
  23102   { 0x1eb8, 3362, UNICODE_NOT_PRESENT_OFFSET },
  23103   { 0x1eb9, 3366, UNICODE_NOT_PRESENT_OFFSET },
  23104   { 0x1eba, 3370, UNICODE_NOT_PRESENT_OFFSET },
  23105   { 0x1ebb, 3374, UNICODE_NOT_PRESENT_OFFSET },
  23106   { 0x1ebc, 3378, UNICODE_NOT_PRESENT_OFFSET },
  23107   { 0x1ebd, 3382, UNICODE_NOT_PRESENT_OFFSET },
  23108   { 0x1ebe, 3386, UNICODE_NOT_PRESENT_OFFSET },
  23109   { 0x1ebf, 3392, UNICODE_NOT_PRESENT_OFFSET },
  23110   { 0x1ec0, 3398, UNICODE_NOT_PRESENT_OFFSET },
  23111   { 0x1ec1, 3404, UNICODE_NOT_PRESENT_OFFSET },
  23112   { 0x1ec2, 3410, UNICODE_NOT_PRESENT_OFFSET },
  23113   { 0x1ec3, 3416, UNICODE_NOT_PRESENT_OFFSET },
  23114   { 0x1ec4, 3422, UNICODE_NOT_PRESENT_OFFSET },
  23115   { 0x1ec5, 3428, UNICODE_NOT_PRESENT_OFFSET },
  23116   { 0x1ec6, 3434, UNICODE_NOT_PRESENT_OFFSET },
  23117   { 0x1ec7, 3440, UNICODE_NOT_PRESENT_OFFSET },
  23118   { 0x1ec8, 3446, UNICODE_NOT_PRESENT_OFFSET },
  23119   { 0x1ec9, 3450, UNICODE_NOT_PRESENT_OFFSET },
  23120   { 0x1eca, 3454, UNICODE_NOT_PRESENT_OFFSET },
  23121   { 0x1ecb, 3458, UNICODE_NOT_PRESENT_OFFSET },
  23122   { 0x1ecc, 3462, UNICODE_NOT_PRESENT_OFFSET },
  23123   { 0x1ecd, 3466, UNICODE_NOT_PRESENT_OFFSET },
  23124   { 0x1ece, 3470, UNICODE_NOT_PRESENT_OFFSET },
  23125   { 0x1ecf, 3474, UNICODE_NOT_PRESENT_OFFSET },
  23126   { 0x1ed0, 3478, UNICODE_NOT_PRESENT_OFFSET },
  23127   { 0x1ed1, 3484, UNICODE_NOT_PRESENT_OFFSET },
  23128   { 0x1ed2, 3490, UNICODE_NOT_PRESENT_OFFSET },
  23129   { 0x1ed3, 3496, UNICODE_NOT_PRESENT_OFFSET },
  23130   { 0x1ed4, 3502, UNICODE_NOT_PRESENT_OFFSET },
  23131   { 0x1ed5, 3508, UNICODE_NOT_PRESENT_OFFSET },
  23132   { 0x1ed6, 3514, UNICODE_NOT_PRESENT_OFFSET },
  23133   { 0x1ed7, 3520, UNICODE_NOT_PRESENT_OFFSET },
  23134   { 0x1ed8, 3526, UNICODE_NOT_PRESENT_OFFSET },
  23135   { 0x1ed9, 3532, UNICODE_NOT_PRESENT_OFFSET },
  23136   { 0x1eda, 3538, UNICODE_NOT_PRESENT_OFFSET },
  23137   { 0x1edb, 3544, UNICODE_NOT_PRESENT_OFFSET },
  23138   { 0x1edc, 3550, UNICODE_NOT_PRESENT_OFFSET },
  23139   { 0x1edd, 3556, UNICODE_NOT_PRESENT_OFFSET },
  23140   { 0x1ede, 3562, UNICODE_NOT_PRESENT_OFFSET },
  23141   { 0x1edf, 3568, UNICODE_NOT_PRESENT_OFFSET },
  23142   { 0x1ee0, 3574, UNICODE_NOT_PRESENT_OFFSET },
  23143   { 0x1ee1, 3580, UNICODE_NOT_PRESENT_OFFSET },
  23144   { 0x1ee2, 3586, UNICODE_NOT_PRESENT_OFFSET },
  23145   { 0x1ee3, 3592, UNICODE_NOT_PRESENT_OFFSET },
  23146   { 0x1ee4, 3598, UNICODE_NOT_PRESENT_OFFSET },
  23147   { 0x1ee5, 3602, UNICODE_NOT_PRESENT_OFFSET },
  23148   { 0x1ee6, 3606, UNICODE_NOT_PRESENT_OFFSET },
  23149   { 0x1ee7, 3610, UNICODE_NOT_PRESENT_OFFSET },
  23150   { 0x1ee8, 3614, UNICODE_NOT_PRESENT_OFFSET },
  23151   { 0x1ee9, 3620, UNICODE_NOT_PRESENT_OFFSET },
  23152   { 0x1eea, 3626, UNICODE_NOT_PRESENT_OFFSET },
  23153   { 0x1eeb, 3632, UNICODE_NOT_PRESENT_OFFSET },
  23154   { 0x1eec, 3638, UNICODE_NOT_PRESENT_OFFSET },
  23155   { 0x1eed, 3644, UNICODE_NOT_PRESENT_OFFSET },
  23156   { 0x1eee, 3650, UNICODE_NOT_PRESENT_OFFSET },
  23157   { 0x1eef, 3656, UNICODE_NOT_PRESENT_OFFSET },
  23158   { 0x1ef0, 3662, UNICODE_NOT_PRESENT_OFFSET },
  23159   { 0x1ef1, 3668, UNICODE_NOT_PRESENT_OFFSET },
  23160   { 0x1ef2, 3674, UNICODE_NOT_PRESENT_OFFSET },
  23161   { 0x1ef3, 3678, UNICODE_NOT_PRESENT_OFFSET },
  23162   { 0x1ef4, 3682, UNICODE_NOT_PRESENT_OFFSET },
  23163   { 0x1ef5, 3686, UNICODE_NOT_PRESENT_OFFSET },
  23164   { 0x1ef6, 3690, UNICODE_NOT_PRESENT_OFFSET },
  23165   { 0x1ef7, 3694, UNICODE_NOT_PRESENT_OFFSET },
  23166   { 0x1ef8, 3698, UNICODE_NOT_PRESENT_OFFSET },
  23167   { 0x1ef9, 3702, UNICODE_NOT_PRESENT_OFFSET },
  23168   { 0x1f00, 3706, UNICODE_NOT_PRESENT_OFFSET },
  23169   { 0x1f01, 3711, UNICODE_NOT_PRESENT_OFFSET },
  23170   { 0x1f02, 3716, UNICODE_NOT_PRESENT_OFFSET },
  23171   { 0x1f03, 3723, UNICODE_NOT_PRESENT_OFFSET },
  23172   { 0x1f04, 3730, UNICODE_NOT_PRESENT_OFFSET },
  23173   { 0x1f05, 3737, UNICODE_NOT_PRESENT_OFFSET },
  23174   { 0x1f06, 3744, UNICODE_NOT_PRESENT_OFFSET },
  23175   { 0x1f07, 3751, UNICODE_NOT_PRESENT_OFFSET },
  23176   { 0x1f08, 3758, UNICODE_NOT_PRESENT_OFFSET },
  23177   { 0x1f09, 3763, UNICODE_NOT_PRESENT_OFFSET },
  23178   { 0x1f0a, 3768, UNICODE_NOT_PRESENT_OFFSET },
  23179   { 0x1f0b, 3775, UNICODE_NOT_PRESENT_OFFSET },
  23180   { 0x1f0c, 3782, UNICODE_NOT_PRESENT_OFFSET },
  23181   { 0x1f0d, 3789, UNICODE_NOT_PRESENT_OFFSET },
  23182   { 0x1f0e, 3796, UNICODE_NOT_PRESENT_OFFSET },
  23183   { 0x1f0f, 3803, UNICODE_NOT_PRESENT_OFFSET },
  23184   { 0x1f10, 3810, UNICODE_NOT_PRESENT_OFFSET },
  23185   { 0x1f11, 3815, UNICODE_NOT_PRESENT_OFFSET },
  23186   { 0x1f12, 3820, UNICODE_NOT_PRESENT_OFFSET },
  23187   { 0x1f13, 3827, UNICODE_NOT_PRESENT_OFFSET },
  23188   { 0x1f14, 3834, UNICODE_NOT_PRESENT_OFFSET },
  23189   { 0x1f15, 3841, UNICODE_NOT_PRESENT_OFFSET },
  23190   { 0x1f18, 3848, UNICODE_NOT_PRESENT_OFFSET },
  23191   { 0x1f19, 3853, UNICODE_NOT_PRESENT_OFFSET },
  23192   { 0x1f1a, 3858, UNICODE_NOT_PRESENT_OFFSET },
  23193   { 0x1f1b, 3865, UNICODE_NOT_PRESENT_OFFSET },
  23194   { 0x1f1c, 3872, UNICODE_NOT_PRESENT_OFFSET },
  23195   { 0x1f1d, 3879, UNICODE_NOT_PRESENT_OFFSET },
  23196   { 0x1f20, 3886, UNICODE_NOT_PRESENT_OFFSET },
  23197   { 0x1f21, 3891, UNICODE_NOT_PRESENT_OFFSET },
  23198   { 0x1f22, 3896, UNICODE_NOT_PRESENT_OFFSET },
  23199   { 0x1f23, 3903, UNICODE_NOT_PRESENT_OFFSET },
  23200   { 0x1f24, 3910, UNICODE_NOT_PRESENT_OFFSET },
  23201   { 0x1f25, 3917, UNICODE_NOT_PRESENT_OFFSET },
  23202   { 0x1f26, 3924, UNICODE_NOT_PRESENT_OFFSET },
  23203   { 0x1f27, 3931, UNICODE_NOT_PRESENT_OFFSET },
  23204   { 0x1f28, 3938, UNICODE_NOT_PRESENT_OFFSET },
  23205   { 0x1f29, 3943, UNICODE_NOT_PRESENT_OFFSET },
  23206   { 0x1f2a, 3948, UNICODE_NOT_PRESENT_OFFSET },
  23207   { 0x1f2b, 3955, UNICODE_NOT_PRESENT_OFFSET },
  23208   { 0x1f2c, 3962, UNICODE_NOT_PRESENT_OFFSET },
  23209   { 0x1f2d, 3969, UNICODE_NOT_PRESENT_OFFSET },
  23210   { 0x1f2e, 3976, UNICODE_NOT_PRESENT_OFFSET },
  23211   { 0x1f2f, 3983, UNICODE_NOT_PRESENT_OFFSET },
  23212   { 0x1f30, 3990, UNICODE_NOT_PRESENT_OFFSET },
  23213   { 0x1f31, 3995, UNICODE_NOT_PRESENT_OFFSET },
  23214   { 0x1f32, 4000, UNICODE_NOT_PRESENT_OFFSET },
  23215   { 0x1f33, 4007, UNICODE_NOT_PRESENT_OFFSET },
  23216   { 0x1f34, 4014, UNICODE_NOT_PRESENT_OFFSET },
  23217   { 0x1f35, 4021, UNICODE_NOT_PRESENT_OFFSET },
  23218   { 0x1f36, 4028, UNICODE_NOT_PRESENT_OFFSET },
  23219   { 0x1f37, 4035, UNICODE_NOT_PRESENT_OFFSET },
  23220   { 0x1f38, 4042, UNICODE_NOT_PRESENT_OFFSET },
  23221   { 0x1f39, 4047, UNICODE_NOT_PRESENT_OFFSET },
  23222   { 0x1f3a, 4052, UNICODE_NOT_PRESENT_OFFSET },
  23223   { 0x1f3b, 4059, UNICODE_NOT_PRESENT_OFFSET },
  23224   { 0x1f3c, 4066, UNICODE_NOT_PRESENT_OFFSET },
  23225   { 0x1f3d, 4073, UNICODE_NOT_PRESENT_OFFSET },
  23226   { 0x1f3e, 4080, UNICODE_NOT_PRESENT_OFFSET },
  23227   { 0x1f3f, 4087, UNICODE_NOT_PRESENT_OFFSET },
  23228   { 0x1f40, 4094, UNICODE_NOT_PRESENT_OFFSET },
  23229   { 0x1f41, 4099, UNICODE_NOT_PRESENT_OFFSET },
  23230   { 0x1f42, 4104, UNICODE_NOT_PRESENT_OFFSET },
  23231   { 0x1f43, 4111, UNICODE_NOT_PRESENT_OFFSET },
  23232   { 0x1f44, 4118, UNICODE_NOT_PRESENT_OFFSET },
  23233   { 0x1f45, 4125, UNICODE_NOT_PRESENT_OFFSET },
  23234   { 0x1f48, 4132, UNICODE_NOT_PRESENT_OFFSET },
  23235   { 0x1f49, 4137, UNICODE_NOT_PRESENT_OFFSET },
  23236   { 0x1f4a, 4142, UNICODE_NOT_PRESENT_OFFSET },
  23237   { 0x1f4b, 4149, UNICODE_NOT_PRESENT_OFFSET },
  23238   { 0x1f4c, 4156, UNICODE_NOT_PRESENT_OFFSET },
  23239   { 0x1f4d, 4163, UNICODE_NOT_PRESENT_OFFSET },
  23240   { 0x1f50, 4170, UNICODE_NOT_PRESENT_OFFSET },
  23241   { 0x1f51, 4175, UNICODE_NOT_PRESENT_OFFSET },
  23242   { 0x1f52, 4180, UNICODE_NOT_PRESENT_OFFSET },
  23243   { 0x1f53, 4187, UNICODE_NOT_PRESENT_OFFSET },
  23244   { 0x1f54, 4194, UNICODE_NOT_PRESENT_OFFSET },
  23245   { 0x1f55, 4201, UNICODE_NOT_PRESENT_OFFSET },
  23246   { 0x1f56, 4208, UNICODE_NOT_PRESENT_OFFSET },
  23247   { 0x1f57, 4215, UNICODE_NOT_PRESENT_OFFSET },
  23248   { 0x1f59, 4222, UNICODE_NOT_PRESENT_OFFSET },
  23249   { 0x1f5b, 4227, UNICODE_NOT_PRESENT_OFFSET },
  23250   { 0x1f5d, 4234, UNICODE_NOT_PRESENT_OFFSET },
  23251   { 0x1f5f, 4241, UNICODE_NOT_PRESENT_OFFSET },
  23252   { 0x1f60, 4248, UNICODE_NOT_PRESENT_OFFSET },
  23253   { 0x1f61, 4253, UNICODE_NOT_PRESENT_OFFSET },
  23254   { 0x1f62, 4258, UNICODE_NOT_PRESENT_OFFSET },
  23255   { 0x1f63, 4265, UNICODE_NOT_PRESENT_OFFSET },
  23256   { 0x1f64, 4272, UNICODE_NOT_PRESENT_OFFSET },
  23257   { 0x1f65, 4279, UNICODE_NOT_PRESENT_OFFSET },
  23258   { 0x1f66, 4286, UNICODE_NOT_PRESENT_OFFSET },
  23259   { 0x1f67, 4293, UNICODE_NOT_PRESENT_OFFSET },
  23260   { 0x1f68, 4300, UNICODE_NOT_PRESENT_OFFSET },
  23261   { 0x1f69, 4305, UNICODE_NOT_PRESENT_OFFSET },
  23262   { 0x1f6a, 4310, UNICODE_NOT_PRESENT_OFFSET },
  23263   { 0x1f6b, 4317, UNICODE_NOT_PRESENT_OFFSET },
  23264   { 0x1f6c, 4324, UNICODE_NOT_PRESENT_OFFSET },
  23265   { 0x1f6d, 4331, UNICODE_NOT_PRESENT_OFFSET },
  23266   { 0x1f6e, 4338, UNICODE_NOT_PRESENT_OFFSET },
  23267   { 0x1f6f, 4345, UNICODE_NOT_PRESENT_OFFSET },
  23268   { 0x1f70, 4352, UNICODE_NOT_PRESENT_OFFSET },
  23269   { 0x1f71, 1316, UNICODE_NOT_PRESENT_OFFSET },
  23270   { 0x1f72, 4357, UNICODE_NOT_PRESENT_OFFSET },
  23271   { 0x1f73, 1321, UNICODE_NOT_PRESENT_OFFSET },
  23272   { 0x1f74, 4362, UNICODE_NOT_PRESENT_OFFSET },
  23273   { 0x1f75, 1326, UNICODE_NOT_PRESENT_OFFSET },
  23274   { 0x1f76, 4367, UNICODE_NOT_PRESENT_OFFSET },
  23275   { 0x1f77, 1331, UNICODE_NOT_PRESENT_OFFSET },
  23276   { 0x1f78, 4372, UNICODE_NOT_PRESENT_OFFSET },
  23277   { 0x1f79, 1353, UNICODE_NOT_PRESENT_OFFSET },
  23278   { 0x1f7a, 4377, UNICODE_NOT_PRESENT_OFFSET },
  23279   { 0x1f7b, 1358, UNICODE_NOT_PRESENT_OFFSET },
  23280   { 0x1f7c, 4382, UNICODE_NOT_PRESENT_OFFSET },
  23281   { 0x1f7d, 1363, UNICODE_NOT_PRESENT_OFFSET },
  23282   { 0x1f80, 4387, UNICODE_NOT_PRESENT_OFFSET },
  23283   { 0x1f81, 4394, UNICODE_NOT_PRESENT_OFFSET },
  23284   { 0x1f82, 4401, UNICODE_NOT_PRESENT_OFFSET },
  23285   { 0x1f83, 4410, UNICODE_NOT_PRESENT_OFFSET },
  23286   { 0x1f84, 4419, UNICODE_NOT_PRESENT_OFFSET },
  23287   { 0x1f85, 4428, UNICODE_NOT_PRESENT_OFFSET },
  23288   { 0x1f86, 4437, UNICODE_NOT_PRESENT_OFFSET },
  23289   { 0x1f87, 4446, UNICODE_NOT_PRESENT_OFFSET },
  23290   { 0x1f88, 4455, UNICODE_NOT_PRESENT_OFFSET },
  23291   { 0x1f89, 4462, UNICODE_NOT_PRESENT_OFFSET },
  23292   { 0x1f8a, 4469, UNICODE_NOT_PRESENT_OFFSET },
  23293   { 0x1f8b, 4478, UNICODE_NOT_PRESENT_OFFSET },
  23294   { 0x1f8c, 4487, UNICODE_NOT_PRESENT_OFFSET },
  23295   { 0x1f8d, 4496, UNICODE_NOT_PRESENT_OFFSET },
  23296   { 0x1f8e, 4505, UNICODE_NOT_PRESENT_OFFSET },
  23297   { 0x1f8f, 4514, UNICODE_NOT_PRESENT_OFFSET },
  23298   { 0x1f90, 4523, UNICODE_NOT_PRESENT_OFFSET },
  23299   { 0x1f91, 4530, UNICODE_NOT_PRESENT_OFFSET },
  23300   { 0x1f92, 4537, UNICODE_NOT_PRESENT_OFFSET },
  23301   { 0x1f93, 4546, UNICODE_NOT_PRESENT_OFFSET },
  23302   { 0x1f94, 4555, UNICODE_NOT_PRESENT_OFFSET },
  23303   { 0x1f95, 4564, UNICODE_NOT_PRESENT_OFFSET },
  23304   { 0x1f96, 4573, UNICODE_NOT_PRESENT_OFFSET },
  23305   { 0x1f97, 4582, UNICODE_NOT_PRESENT_OFFSET },
  23306   { 0x1f98, 4591, UNICODE_NOT_PRESENT_OFFSET },
  23307   { 0x1f99, 4598, UNICODE_NOT_PRESENT_OFFSET },
  23308   { 0x1f9a, 4605, UNICODE_NOT_PRESENT_OFFSET },
  23309   { 0x1f9b, 4614, UNICODE_NOT_PRESENT_OFFSET },
  23310   { 0x1f9c, 4623, UNICODE_NOT_PRESENT_OFFSET },
  23311   { 0x1f9d, 4632, UNICODE_NOT_PRESENT_OFFSET },
  23312   { 0x1f9e, 4641, UNICODE_NOT_PRESENT_OFFSET },
  23313   { 0x1f9f, 4650, UNICODE_NOT_PRESENT_OFFSET },
  23314   { 0x1fa0, 4659, UNICODE_NOT_PRESENT_OFFSET },
  23315   { 0x1fa1, 4666, UNICODE_NOT_PRESENT_OFFSET },
  23316   { 0x1fa2, 4673, UNICODE_NOT_PRESENT_OFFSET },
  23317   { 0x1fa3, 4682, UNICODE_NOT_PRESENT_OFFSET },
  23318   { 0x1fa4, 4691, UNICODE_NOT_PRESENT_OFFSET },
  23319   { 0x1fa5, 4700, UNICODE_NOT_PRESENT_OFFSET },
  23320   { 0x1fa6, 4709, UNICODE_NOT_PRESENT_OFFSET },
  23321   { 0x1fa7, 4718, UNICODE_NOT_PRESENT_OFFSET },
  23322   { 0x1fa8, 4727, UNICODE_NOT_PRESENT_OFFSET },
  23323   { 0x1fa9, 4734, UNICODE_NOT_PRESENT_OFFSET },
  23324   { 0x1faa, 4741, UNICODE_NOT_PRESENT_OFFSET },
  23325   { 0x1fab, 4750, UNICODE_NOT_PRESENT_OFFSET },
  23326   { 0x1fac, 4759, UNICODE_NOT_PRESENT_OFFSET },
  23327   { 0x1fad, 4768, UNICODE_NOT_PRESENT_OFFSET },
  23328   { 0x1fae, 4777, UNICODE_NOT_PRESENT_OFFSET },
  23329   { 0x1faf, 4786, UNICODE_NOT_PRESENT_OFFSET },
  23330   { 0x1fb0, 4795, UNICODE_NOT_PRESENT_OFFSET },
  23331   { 0x1fb1, 4800, UNICODE_NOT_PRESENT_OFFSET },
  23332   { 0x1fb2, 4805, UNICODE_NOT_PRESENT_OFFSET },
  23333   { 0x1fb3, 4812, UNICODE_NOT_PRESENT_OFFSET },
  23334   { 0x1fb4, 4817, UNICODE_NOT_PRESENT_OFFSET },
  23335   { 0x1fb6, 4824, UNICODE_NOT_PRESENT_OFFSET },
  23336   { 0x1fb7, 4829, UNICODE_NOT_PRESENT_OFFSET },
  23337   { 0x1fb8, 4836, UNICODE_NOT_PRESENT_OFFSET },
  23338   { 0x1fb9, 4841, UNICODE_NOT_PRESENT_OFFSET },
  23339   { 0x1fba, 4846, UNICODE_NOT_PRESENT_OFFSET },
  23340   { 0x1fbb, 1261, UNICODE_NOT_PRESENT_OFFSET },
  23341   { 0x1fbc, 4851, UNICODE_NOT_PRESENT_OFFSET },
  23342   { 0x1fbd, UNICODE_NOT_PRESENT_OFFSET, 4856 },
  23343   { 0x1fbe, 4860, UNICODE_NOT_PRESENT_OFFSET },
  23344   { 0x1fbf, UNICODE_NOT_PRESENT_OFFSET, 4856 },
  23345   { 0x1fc0, UNICODE_NOT_PRESENT_OFFSET, 4863 },
  23346   { 0x1fc1, 4867, 4872 },
  23347   { 0x1fc2, 4878, UNICODE_NOT_PRESENT_OFFSET },
  23348   { 0x1fc3, 4885, UNICODE_NOT_PRESENT_OFFSET },
  23349   { 0x1fc4, 4890, UNICODE_NOT_PRESENT_OFFSET },
  23350   { 0x1fc6, 4897, UNICODE_NOT_PRESENT_OFFSET },
  23351   { 0x1fc7, 4902, UNICODE_NOT_PRESENT_OFFSET },
  23352   { 0x1fc8, 4909, UNICODE_NOT_PRESENT_OFFSET },
  23353   { 0x1fc9, 1269, UNICODE_NOT_PRESENT_OFFSET },
  23354   { 0x1fca, 4914, UNICODE_NOT_PRESENT_OFFSET },
  23355   { 0x1fcb, 1274, UNICODE_NOT_PRESENT_OFFSET },
  23356   { 0x1fcc, 4919, UNICODE_NOT_PRESENT_OFFSET },
  23357   { 0x1fcd, 4924, 4930 },
  23358   { 0x1fce, 4936, 4942 },
  23359   { 0x1fcf, 4948, 4954 },
  23360   { 0x1fd0, 4960, UNICODE_NOT_PRESENT_OFFSET },
  23361   { 0x1fd1, 4965, UNICODE_NOT_PRESENT_OFFSET },
  23362   { 0x1fd2, 4970, UNICODE_NOT_PRESENT_OFFSET },
  23363   { 0x1fd3, 1299, UNICODE_NOT_PRESENT_OFFSET },
  23364   { 0x1fd6, 4977, UNICODE_NOT_PRESENT_OFFSET },
  23365   { 0x1fd7, 4982, UNICODE_NOT_PRESENT_OFFSET },
  23366   { 0x1fd8, 4989, UNICODE_NOT_PRESENT_OFFSET },
  23367   { 0x1fd9, 4994, UNICODE_NOT_PRESENT_OFFSET },
  23368   { 0x1fda, 4999, UNICODE_NOT_PRESENT_OFFSET },
  23369   { 0x1fdb, 1279, UNICODE_NOT_PRESENT_OFFSET },
  23370   { 0x1fdd, 5004, 5010 },
  23371   { 0x1fde, 5016, 5022 },
  23372   { 0x1fdf, 5028, 5034 },
  23373   { 0x1fe0, 5040, UNICODE_NOT_PRESENT_OFFSET },
  23374   { 0x1fe1, 5045, UNICODE_NOT_PRESENT_OFFSET },
  23375   { 0x1fe2, 5050, UNICODE_NOT_PRESENT_OFFSET },
  23376   { 0x1fe3, 1336, UNICODE_NOT_PRESENT_OFFSET },
  23377   { 0x1fe4, 5057, UNICODE_NOT_PRESENT_OFFSET },
  23378   { 0x1fe5, 5062, UNICODE_NOT_PRESENT_OFFSET },
  23379   { 0x1fe6, 5067, UNICODE_NOT_PRESENT_OFFSET },
  23380   { 0x1fe7, 5072, UNICODE_NOT_PRESENT_OFFSET },
  23381   { 0x1fe8, 5079, UNICODE_NOT_PRESENT_OFFSET },
  23382   { 0x1fe9, 5084, UNICODE_NOT_PRESENT_OFFSET },
  23383   { 0x1fea, 5089, UNICODE_NOT_PRESENT_OFFSET },
  23384   { 0x1feb, 1289, UNICODE_NOT_PRESENT_OFFSET },
  23385   { 0x1fec, 5094, UNICODE_NOT_PRESENT_OFFSET },
  23386   { 0x1fed, 5099, 5104 },
  23387   { 0x1fee, 1250, 1255 },
  23388   { 0x1fef, 5110, UNICODE_NOT_PRESENT_OFFSET },
  23389   { 0x1ff2, 5112, UNICODE_NOT_PRESENT_OFFSET },
  23390   { 0x1ff3, 5119, UNICODE_NOT_PRESENT_OFFSET },
  23391   { 0x1ff4, 5124, UNICODE_NOT_PRESENT_OFFSET },
  23392   { 0x1ff6, 5131, UNICODE_NOT_PRESENT_OFFSET },
  23393   { 0x1ff7, 5136, UNICODE_NOT_PRESENT_OFFSET },
  23394   { 0x1ff8, 5143, UNICODE_NOT_PRESENT_OFFSET },
  23395   { 0x1ff9, 1284, UNICODE_NOT_PRESENT_OFFSET },
  23396   { 0x1ffa, 5148, UNICODE_NOT_PRESENT_OFFSET },
  23397   { 0x1ffb, 1294, UNICODE_NOT_PRESENT_OFFSET },
  23398   { 0x1ffc, 5153, UNICODE_NOT_PRESENT_OFFSET },
  23399   { 0x1ffd, 5158, 16 },
  23400   { 0x1ffe, UNICODE_NOT_PRESENT_OFFSET, 5161 },
  23401   { 0x2000, 5165, 0 },
  23402   { 0x2001, 5169, 0 },
  23403   { 0x2002, UNICODE_NOT_PRESENT_OFFSET, 0 },
  23404   { 0x2003, UNICODE_NOT_PRESENT_OFFSET, 0 },
  23405   { 0x2004, UNICODE_NOT_PRESENT_OFFSET, 0 },
  23406   { 0x2005, UNICODE_NOT_PRESENT_OFFSET, 0 },
  23407   { 0x2006, UNICODE_NOT_PRESENT_OFFSET, 0 },
  23408   { 0x2007, UNICODE_NOT_PRESENT_OFFSET, 0 },
  23409   { 0x2008, UNICODE_NOT_PRESENT_OFFSET, 0 },
  23410   { 0x2009, UNICODE_NOT_PRESENT_OFFSET, 0 },
  23411   { 0x200a, UNICODE_NOT_PRESENT_OFFSET, 0 },
  23412   { 0x2011, UNICODE_NOT_PRESENT_OFFSET, 5173 },
  23413   { 0x2017, UNICODE_NOT_PRESENT_OFFSET, 5177 },
  23414   { 0x2024, UNICODE_NOT_PRESENT_OFFSET, 5181 },
  23415   { 0x2025, UNICODE_NOT_PRESENT_OFFSET, 5183 },
  23416   { 0x2026, UNICODE_NOT_PRESENT_OFFSET, 5186 },
  23417   { 0x202f, UNICODE_NOT_PRESENT_OFFSET, 0 },
  23418   { 0x2033, UNICODE_NOT_PRESENT_OFFSET, 5190 },
  23419   { 0x2034, UNICODE_NOT_PRESENT_OFFSET, 5197 },
  23420   { 0x2036, UNICODE_NOT_PRESENT_OFFSET, 5207 },
  23421   { 0x2037, UNICODE_NOT_PRESENT_OFFSET, 5214 },
  23422   { 0x203c, UNICODE_NOT_PRESENT_OFFSET, 5224 },
  23423   { 0x203e, UNICODE_NOT_PRESENT_OFFSET, 5227 },
  23424   { 0x2047, UNICODE_NOT_PRESENT_OFFSET, 5231 },
  23425   { 0x2048, UNICODE_NOT_PRESENT_OFFSET, 5234 },
  23426   { 0x2049, UNICODE_NOT_PRESENT_OFFSET, 5237 },
  23427   { 0x2057, UNICODE_NOT_PRESENT_OFFSET, 5240 },
  23428   { 0x205f, UNICODE_NOT_PRESENT_OFFSET, 0 },
  23429   { 0x2070, UNICODE_NOT_PRESENT_OFFSET, 5253 },
  23430   { 0x2071, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  23431   { 0x2074, UNICODE_NOT_PRESENT_OFFSET, 5255 },
  23432   { 0x2075, UNICODE_NOT_PRESENT_OFFSET, 5257 },
  23433   { 0x2076, UNICODE_NOT_PRESENT_OFFSET, 5259 },
  23434   { 0x2077, UNICODE_NOT_PRESENT_OFFSET, 5261 },
  23435   { 0x2078, UNICODE_NOT_PRESENT_OFFSET, 5263 },
  23436   { 0x2079, UNICODE_NOT_PRESENT_OFFSET, 5265 },
  23437   { 0x207a, UNICODE_NOT_PRESENT_OFFSET, 5267 },
  23438   { 0x207b, UNICODE_NOT_PRESENT_OFFSET, 5269 },
  23439   { 0x207c, UNICODE_NOT_PRESENT_OFFSET, 5273 },
  23440   { 0x207d, UNICODE_NOT_PRESENT_OFFSET, 5275 },
  23441   { 0x207e, UNICODE_NOT_PRESENT_OFFSET, 5277 },
  23442   { 0x207f, UNICODE_NOT_PRESENT_OFFSET, 5279 },
  23443   { 0x2080, UNICODE_NOT_PRESENT_OFFSET, 5253 },
  23444   { 0x2081, UNICODE_NOT_PRESENT_OFFSET, 27 },
  23445   { 0x2082, UNICODE_NOT_PRESENT_OFFSET, 12 },
  23446   { 0x2083, UNICODE_NOT_PRESENT_OFFSET, 14 },
  23447   { 0x2084, UNICODE_NOT_PRESENT_OFFSET, 5255 },
  23448   { 0x2085, UNICODE_NOT_PRESENT_OFFSET, 5257 },
  23449   { 0x2086, UNICODE_NOT_PRESENT_OFFSET, 5259 },
  23450   { 0x2087, UNICODE_NOT_PRESENT_OFFSET, 5261 },
  23451   { 0x2088, UNICODE_NOT_PRESENT_OFFSET, 5263 },
  23452   { 0x2089, UNICODE_NOT_PRESENT_OFFSET, 5265 },
  23453   { 0x208a, UNICODE_NOT_PRESENT_OFFSET, 5267 },
  23454   { 0x208b, UNICODE_NOT_PRESENT_OFFSET, 5269 },
  23455   { 0x208c, UNICODE_NOT_PRESENT_OFFSET, 5273 },
  23456   { 0x208d, UNICODE_NOT_PRESENT_OFFSET, 5275 },
  23457   { 0x208e, UNICODE_NOT_PRESENT_OFFSET, 5277 },
  23458   { 0x2090, UNICODE_NOT_PRESENT_OFFSET, 6 },
  23459   { 0x2091, UNICODE_NOT_PRESENT_OFFSET, 2368 },
  23460   { 0x2092, UNICODE_NOT_PRESENT_OFFSET, 29 },
  23461   { 0x2093, UNICODE_NOT_PRESENT_OFFSET, 1222 },
  23462   { 0x2094, UNICODE_NOT_PRESENT_OFFSET, 2370 },
  23463   { 0x2095, UNICODE_NOT_PRESENT_OFFSET, 1171 },
  23464   { 0x2096, UNICODE_NOT_PRESENT_OFFSET, 2381 },
  23465   { 0x2097, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  23466   { 0x2098, UNICODE_NOT_PRESENT_OFFSET, 2383 },
  23467   { 0x2099, UNICODE_NOT_PRESENT_OFFSET, 5279 },
  23468   { 0x209a, UNICODE_NOT_PRESENT_OFFSET, 2399 },
  23469   { 0x209b, UNICODE_NOT_PRESENT_OFFSET, 711 },
  23470   { 0x209c, UNICODE_NOT_PRESENT_OFFSET, 2401 },
  23471   { 0x20a8, UNICODE_NOT_PRESENT_OFFSET, 5281 },
  23472   { 0x2100, UNICODE_NOT_PRESENT_OFFSET, 5284 },
  23473   { 0x2101, UNICODE_NOT_PRESENT_OFFSET, 5288 },
  23474   { 0x2102, UNICODE_NOT_PRESENT_OFFSET, 5292 },
  23475   { 0x2103, UNICODE_NOT_PRESENT_OFFSET, 5294 },
  23476   { 0x2105, UNICODE_NOT_PRESENT_OFFSET, 5298 },
  23477   { 0x2106, UNICODE_NOT_PRESENT_OFFSET, 5302 },
  23478   { 0x2107, UNICODE_NOT_PRESENT_OFFSET, 5306 },
  23479   { 0x2109, UNICODE_NOT_PRESENT_OFFSET, 5309 },
  23480   { 0x210a, UNICODE_NOT_PRESENT_OFFSET, 2379 },
  23481   { 0x210b, UNICODE_NOT_PRESENT_OFFSET, 2325 },
  23482   { 0x210c, UNICODE_NOT_PRESENT_OFFSET, 2325 },
  23483   { 0x210d, UNICODE_NOT_PRESENT_OFFSET, 2325 },
  23484   { 0x210e, UNICODE_NOT_PRESENT_OFFSET, 1171 },
  23485   { 0x210f, UNICODE_NOT_PRESENT_OFFSET, 5313 },
  23486   { 0x2110, UNICODE_NOT_PRESENT_OFFSET, 2327 },
  23487   { 0x2111, UNICODE_NOT_PRESENT_OFFSET, 2327 },
  23488   { 0x2112, UNICODE_NOT_PRESENT_OFFSET, 2333 },
  23489   { 0x2113, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  23490   { 0x2115, UNICODE_NOT_PRESENT_OFFSET, 2337 },
  23491   { 0x2116, UNICODE_NOT_PRESENT_OFFSET, 5316 },
  23492   { 0x2119, UNICODE_NOT_PRESENT_OFFSET, 2344 },
  23493   { 0x211a, UNICODE_NOT_PRESENT_OFFSET, 5319 },
  23494   { 0x211b, UNICODE_NOT_PRESENT_OFFSET, 2346 },
  23495   { 0x211c, UNICODE_NOT_PRESENT_OFFSET, 2346 },
  23496   { 0x211d, UNICODE_NOT_PRESENT_OFFSET, 2346 },
  23497   { 0x2120, UNICODE_NOT_PRESENT_OFFSET, 5321 },
  23498   { 0x2121, UNICODE_NOT_PRESENT_OFFSET, 5324 },
  23499   { 0x2122, UNICODE_NOT_PRESENT_OFFSET, 5328 },
  23500   { 0x2124, UNICODE_NOT_PRESENT_OFFSET, 5331 },
  23501   { 0x2126, 5333, UNICODE_NOT_PRESENT_OFFSET },
  23502   { 0x2128, UNICODE_NOT_PRESENT_OFFSET, 5331 },
  23503   { 0x212a, 2331, UNICODE_NOT_PRESENT_OFFSET },
  23504   { 0x212b, 69, UNICODE_NOT_PRESENT_OFFSET },
  23505   { 0x212c, UNICODE_NOT_PRESENT_OFFSET, 2314 },
  23506   { 0x212d, UNICODE_NOT_PRESENT_OFFSET, 5292 },
  23507   { 0x212f, UNICODE_NOT_PRESENT_OFFSET, 2368 },
  23508   { 0x2130, UNICODE_NOT_PRESENT_OFFSET, 2318 },
  23509   { 0x2131, UNICODE_NOT_PRESENT_OFFSET, 5336 },
  23510   { 0x2133, UNICODE_NOT_PRESENT_OFFSET, 2335 },
  23511   { 0x2134, UNICODE_NOT_PRESENT_OFFSET, 29 },
  23512   { 0x2135, UNICODE_NOT_PRESENT_OFFSET, 5338 },
  23513   { 0x2136, UNICODE_NOT_PRESENT_OFFSET, 5341 },
  23514   { 0x2137, UNICODE_NOT_PRESENT_OFFSET, 5344 },
  23515   { 0x2138, UNICODE_NOT_PRESENT_OFFSET, 5347 },
  23516   { 0x2139, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  23517   { 0x213b, UNICODE_NOT_PRESENT_OFFSET, 5350 },
  23518   { 0x213c, UNICODE_NOT_PRESENT_OFFSET, 1390 },
  23519   { 0x213d, UNICODE_NOT_PRESENT_OFFSET, 2418 },
  23520   { 0x213e, UNICODE_NOT_PRESENT_OFFSET, 5354 },
  23521   { 0x213f, UNICODE_NOT_PRESENT_OFFSET, 5357 },
  23522   { 0x2140, UNICODE_NOT_PRESENT_OFFSET, 5360 },
  23523   { 0x2145, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  23524   { 0x2146, UNICODE_NOT_PRESENT_OFFSET, 2366 },
  23525   { 0x2147, UNICODE_NOT_PRESENT_OFFSET, 2368 },
  23526   { 0x2148, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  23527   { 0x2149, UNICODE_NOT_PRESENT_OFFSET, 1176 },
  23528   { 0x2150, UNICODE_NOT_PRESENT_OFFSET, 5364 },
  23529   { 0x2151, UNICODE_NOT_PRESENT_OFFSET, 5370 },
  23530   { 0x2152, UNICODE_NOT_PRESENT_OFFSET, 5376 },
  23531   { 0x2153, UNICODE_NOT_PRESENT_OFFSET, 5383 },
  23532   { 0x2154, UNICODE_NOT_PRESENT_OFFSET, 5389 },
  23533   { 0x2155, UNICODE_NOT_PRESENT_OFFSET, 5395 },
  23534   { 0x2156, UNICODE_NOT_PRESENT_OFFSET, 5401 },
  23535   { 0x2157, UNICODE_NOT_PRESENT_OFFSET, 5407 },
  23536   { 0x2158, UNICODE_NOT_PRESENT_OFFSET, 5413 },
  23537   { 0x2159, UNICODE_NOT_PRESENT_OFFSET, 5419 },
  23538   { 0x215a, UNICODE_NOT_PRESENT_OFFSET, 5425 },
  23539   { 0x215b, UNICODE_NOT_PRESENT_OFFSET, 5431 },
  23540   { 0x215c, UNICODE_NOT_PRESENT_OFFSET, 5437 },
  23541   { 0x215d, UNICODE_NOT_PRESENT_OFFSET, 5443 },
  23542   { 0x215e, UNICODE_NOT_PRESENT_OFFSET, 5449 },
  23543   { 0x215f, UNICODE_NOT_PRESENT_OFFSET, 5455 },
  23544   { 0x2160, UNICODE_NOT_PRESENT_OFFSET, 2327 },
  23545   { 0x2161, UNICODE_NOT_PRESENT_OFFSET, 5460 },
  23546   { 0x2162, UNICODE_NOT_PRESENT_OFFSET, 5463 },
  23547   { 0x2163, UNICODE_NOT_PRESENT_OFFSET, 5467 },
  23548   { 0x2164, UNICODE_NOT_PRESENT_OFFSET, 5470 },
  23549   { 0x2165, UNICODE_NOT_PRESENT_OFFSET, 5472 },
  23550   { 0x2166, UNICODE_NOT_PRESENT_OFFSET, 5475 },
  23551   { 0x2167, UNICODE_NOT_PRESENT_OFFSET, 5479 },
  23552   { 0x2168, UNICODE_NOT_PRESENT_OFFSET, 5484 },
  23553   { 0x2169, UNICODE_NOT_PRESENT_OFFSET, 5487 },
  23554   { 0x216a, UNICODE_NOT_PRESENT_OFFSET, 5489 },
  23555   { 0x216b, UNICODE_NOT_PRESENT_OFFSET, 5492 },
  23556   { 0x216c, UNICODE_NOT_PRESENT_OFFSET, 2333 },
  23557   { 0x216d, UNICODE_NOT_PRESENT_OFFSET, 5292 },
  23558   { 0x216e, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  23559   { 0x216f, UNICODE_NOT_PRESENT_OFFSET, 2335 },
  23560   { 0x2170, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  23561   { 0x2171, UNICODE_NOT_PRESENT_OFFSET, 5496 },
  23562   { 0x2172, UNICODE_NOT_PRESENT_OFFSET, 5499 },
  23563   { 0x2173, UNICODE_NOT_PRESENT_OFFSET, 5503 },
  23564   { 0x2174, UNICODE_NOT_PRESENT_OFFSET, 2412 },
  23565   { 0x2175, UNICODE_NOT_PRESENT_OFFSET, 5506 },
  23566   { 0x2176, UNICODE_NOT_PRESENT_OFFSET, 5509 },
  23567   { 0x2177, UNICODE_NOT_PRESENT_OFFSET, 5513 },
  23568   { 0x2178, UNICODE_NOT_PRESENT_OFFSET, 5518 },
  23569   { 0x2179, UNICODE_NOT_PRESENT_OFFSET, 1222 },
  23570   { 0x217a, UNICODE_NOT_PRESENT_OFFSET, 5521 },
  23571   { 0x217b, UNICODE_NOT_PRESENT_OFFSET, 5524 },
  23572   { 0x217c, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  23573   { 0x217d, UNICODE_NOT_PRESENT_OFFSET, 2435 },
  23574   { 0x217e, UNICODE_NOT_PRESENT_OFFSET, 2366 },
  23575   { 0x217f, UNICODE_NOT_PRESENT_OFFSET, 2383 },
  23576   { 0x2189, UNICODE_NOT_PRESENT_OFFSET, 5528 },
  23577   { 0x219a, 5534, UNICODE_NOT_PRESENT_OFFSET },
  23578   { 0x219b, 5540, UNICODE_NOT_PRESENT_OFFSET },
  23579   { 0x21ae, 5546, UNICODE_NOT_PRESENT_OFFSET },
  23580   { 0x21cd, 5552, UNICODE_NOT_PRESENT_OFFSET },
  23581   { 0x21ce, 5558, UNICODE_NOT_PRESENT_OFFSET },
  23582   { 0x21cf, 5564, UNICODE_NOT_PRESENT_OFFSET },
  23583   { 0x2204, 5570, UNICODE_NOT_PRESENT_OFFSET },
  23584   { 0x2209, 5576, UNICODE_NOT_PRESENT_OFFSET },
  23585   { 0x220c, 5582, UNICODE_NOT_PRESENT_OFFSET },
  23586   { 0x2224, 5588, UNICODE_NOT_PRESENT_OFFSET },
  23587   { 0x2226, 5594, UNICODE_NOT_PRESENT_OFFSET },
  23588   { 0x222c, UNICODE_NOT_PRESENT_OFFSET, 5600 },
  23589   { 0x222d, UNICODE_NOT_PRESENT_OFFSET, 5607 },
  23590   { 0x222f, UNICODE_NOT_PRESENT_OFFSET, 5617 },
  23591   { 0x2230, UNICODE_NOT_PRESENT_OFFSET, 5624 },
  23592   { 0x2241, 5634, UNICODE_NOT_PRESENT_OFFSET },
  23593   { 0x2244, 5640, UNICODE_NOT_PRESENT_OFFSET },
  23594   { 0x2247, 5646, UNICODE_NOT_PRESENT_OFFSET },
  23595   { 0x2249, 5652, UNICODE_NOT_PRESENT_OFFSET },
  23596   { 0x2260, 5658, UNICODE_NOT_PRESENT_OFFSET },
  23597   { 0x2262, 5662, UNICODE_NOT_PRESENT_OFFSET },
  23598   { 0x226d, 5668, UNICODE_NOT_PRESENT_OFFSET },
  23599   { 0x226e, 5674, UNICODE_NOT_PRESENT_OFFSET },
  23600   { 0x226f, 5678, UNICODE_NOT_PRESENT_OFFSET },
  23601   { 0x2270, 5682, UNICODE_NOT_PRESENT_OFFSET },
  23602   { 0x2271, 5688, UNICODE_NOT_PRESENT_OFFSET },
  23603   { 0x2274, 5694, UNICODE_NOT_PRESENT_OFFSET },
  23604   { 0x2275, 5700, UNICODE_NOT_PRESENT_OFFSET },
  23605   { 0x2278, 5706, UNICODE_NOT_PRESENT_OFFSET },
  23606   { 0x2279, 5712, UNICODE_NOT_PRESENT_OFFSET },
  23607   { 0x2280, 5718, UNICODE_NOT_PRESENT_OFFSET },
  23608   { 0x2281, 5724, UNICODE_NOT_PRESENT_OFFSET },
  23609   { 0x2284, 5730, UNICODE_NOT_PRESENT_OFFSET },
  23610   { 0x2285, 5736, UNICODE_NOT_PRESENT_OFFSET },
  23611   { 0x2288, 5742, UNICODE_NOT_PRESENT_OFFSET },
  23612   { 0x2289, 5748, UNICODE_NOT_PRESENT_OFFSET },
  23613   { 0x22ac, 5754, UNICODE_NOT_PRESENT_OFFSET },
  23614   { 0x22ad, 5760, UNICODE_NOT_PRESENT_OFFSET },
  23615   { 0x22ae, 5766, UNICODE_NOT_PRESENT_OFFSET },
  23616   { 0x22af, 5772, UNICODE_NOT_PRESENT_OFFSET },
  23617   { 0x22e0, 5778, UNICODE_NOT_PRESENT_OFFSET },
  23618   { 0x22e1, 5784, UNICODE_NOT_PRESENT_OFFSET },
  23619   { 0x22e2, 5790, UNICODE_NOT_PRESENT_OFFSET },
  23620   { 0x22e3, 5796, UNICODE_NOT_PRESENT_OFFSET },
  23621   { 0x22ea, 5802, UNICODE_NOT_PRESENT_OFFSET },
  23622   { 0x22eb, 5808, UNICODE_NOT_PRESENT_OFFSET },
  23623   { 0x22ec, 5814, UNICODE_NOT_PRESENT_OFFSET },
  23624   { 0x22ed, 5820, UNICODE_NOT_PRESENT_OFFSET },
  23625   { 0x2329, 5826, UNICODE_NOT_PRESENT_OFFSET },
  23626   { 0x232a, 5830, UNICODE_NOT_PRESENT_OFFSET },
  23627   { 0x2460, UNICODE_NOT_PRESENT_OFFSET, 27 },
  23628   { 0x2461, UNICODE_NOT_PRESENT_OFFSET, 12 },
  23629   { 0x2462, UNICODE_NOT_PRESENT_OFFSET, 14 },
  23630   { 0x2463, UNICODE_NOT_PRESENT_OFFSET, 5255 },
  23631   { 0x2464, UNICODE_NOT_PRESENT_OFFSET, 5257 },
  23632   { 0x2465, UNICODE_NOT_PRESENT_OFFSET, 5259 },
  23633   { 0x2466, UNICODE_NOT_PRESENT_OFFSET, 5261 },
  23634   { 0x2467, UNICODE_NOT_PRESENT_OFFSET, 5263 },
  23635   { 0x2468, UNICODE_NOT_PRESENT_OFFSET, 5265 },
  23636   { 0x2469, UNICODE_NOT_PRESENT_OFFSET, 5834 },
  23637   { 0x246a, UNICODE_NOT_PRESENT_OFFSET, 5837 },
  23638   { 0x246b, UNICODE_NOT_PRESENT_OFFSET, 5840 },
  23639   { 0x246c, UNICODE_NOT_PRESENT_OFFSET, 5843 },
  23640   { 0x246d, UNICODE_NOT_PRESENT_OFFSET, 5846 },
  23641   { 0x246e, UNICODE_NOT_PRESENT_OFFSET, 5849 },
  23642   { 0x246f, UNICODE_NOT_PRESENT_OFFSET, 5852 },
  23643   { 0x2470, UNICODE_NOT_PRESENT_OFFSET, 5855 },
  23644   { 0x2471, UNICODE_NOT_PRESENT_OFFSET, 5858 },
  23645   { 0x2472, UNICODE_NOT_PRESENT_OFFSET, 5861 },
  23646   { 0x2473, UNICODE_NOT_PRESENT_OFFSET, 5864 },
  23647   { 0x2474, UNICODE_NOT_PRESENT_OFFSET, 5867 },
  23648   { 0x2475, UNICODE_NOT_PRESENT_OFFSET, 5871 },
  23649   { 0x2476, UNICODE_NOT_PRESENT_OFFSET, 5875 },
  23650   { 0x2477, UNICODE_NOT_PRESENT_OFFSET, 5879 },
  23651   { 0x2478, UNICODE_NOT_PRESENT_OFFSET, 5883 },
  23652   { 0x2479, UNICODE_NOT_PRESENT_OFFSET, 5887 },
  23653   { 0x247a, UNICODE_NOT_PRESENT_OFFSET, 5891 },
  23654   { 0x247b, UNICODE_NOT_PRESENT_OFFSET, 5895 },
  23655   { 0x247c, UNICODE_NOT_PRESENT_OFFSET, 5899 },
  23656   { 0x247d, UNICODE_NOT_PRESENT_OFFSET, 5903 },
  23657   { 0x247e, UNICODE_NOT_PRESENT_OFFSET, 5908 },
  23658   { 0x247f, UNICODE_NOT_PRESENT_OFFSET, 5913 },
  23659   { 0x2480, UNICODE_NOT_PRESENT_OFFSET, 5918 },
  23660   { 0x2481, UNICODE_NOT_PRESENT_OFFSET, 5923 },
  23661   { 0x2482, UNICODE_NOT_PRESENT_OFFSET, 5928 },
  23662   { 0x2483, UNICODE_NOT_PRESENT_OFFSET, 5933 },
  23663   { 0x2484, UNICODE_NOT_PRESENT_OFFSET, 5938 },
  23664   { 0x2485, UNICODE_NOT_PRESENT_OFFSET, 5943 },
  23665   { 0x2486, UNICODE_NOT_PRESENT_OFFSET, 5948 },
  23666   { 0x2487, UNICODE_NOT_PRESENT_OFFSET, 5953 },
  23667   { 0x2488, UNICODE_NOT_PRESENT_OFFSET, 5958 },
  23668   { 0x2489, UNICODE_NOT_PRESENT_OFFSET, 5961 },
  23669   { 0x248a, UNICODE_NOT_PRESENT_OFFSET, 5964 },
  23670   { 0x248b, UNICODE_NOT_PRESENT_OFFSET, 5967 },
  23671   { 0x248c, UNICODE_NOT_PRESENT_OFFSET, 5970 },
  23672   { 0x248d, UNICODE_NOT_PRESENT_OFFSET, 5973 },
  23673   { 0x248e, UNICODE_NOT_PRESENT_OFFSET, 5976 },
  23674   { 0x248f, UNICODE_NOT_PRESENT_OFFSET, 5979 },
  23675   { 0x2490, UNICODE_NOT_PRESENT_OFFSET, 5982 },
  23676   { 0x2491, UNICODE_NOT_PRESENT_OFFSET, 5985 },
  23677   { 0x2492, UNICODE_NOT_PRESENT_OFFSET, 5989 },
  23678   { 0x2493, UNICODE_NOT_PRESENT_OFFSET, 5993 },
  23679   { 0x2494, UNICODE_NOT_PRESENT_OFFSET, 5997 },
  23680   { 0x2495, UNICODE_NOT_PRESENT_OFFSET, 6001 },
  23681   { 0x2496, UNICODE_NOT_PRESENT_OFFSET, 6005 },
  23682   { 0x2497, UNICODE_NOT_PRESENT_OFFSET, 6009 },
  23683   { 0x2498, UNICODE_NOT_PRESENT_OFFSET, 6013 },
  23684   { 0x2499, UNICODE_NOT_PRESENT_OFFSET, 6017 },
  23685   { 0x249a, UNICODE_NOT_PRESENT_OFFSET, 6021 },
  23686   { 0x249b, UNICODE_NOT_PRESENT_OFFSET, 6025 },
  23687   { 0x249c, UNICODE_NOT_PRESENT_OFFSET, 6029 },
  23688   { 0x249d, UNICODE_NOT_PRESENT_OFFSET, 6033 },
  23689   { 0x249e, UNICODE_NOT_PRESENT_OFFSET, 6037 },
  23690   { 0x249f, UNICODE_NOT_PRESENT_OFFSET, 6041 },
  23691   { 0x24a0, UNICODE_NOT_PRESENT_OFFSET, 6045 },
  23692   { 0x24a1, UNICODE_NOT_PRESENT_OFFSET, 6049 },
  23693   { 0x24a2, UNICODE_NOT_PRESENT_OFFSET, 6053 },
  23694   { 0x24a3, UNICODE_NOT_PRESENT_OFFSET, 6057 },
  23695   { 0x24a4, UNICODE_NOT_PRESENT_OFFSET, 6061 },
  23696   { 0x24a5, UNICODE_NOT_PRESENT_OFFSET, 6065 },
  23697   { 0x24a6, UNICODE_NOT_PRESENT_OFFSET, 6069 },
  23698   { 0x24a7, UNICODE_NOT_PRESENT_OFFSET, 6073 },
  23699   { 0x24a8, UNICODE_NOT_PRESENT_OFFSET, 6077 },
  23700   { 0x24a9, UNICODE_NOT_PRESENT_OFFSET, 6081 },
  23701   { 0x24aa, UNICODE_NOT_PRESENT_OFFSET, 6085 },
  23702   { 0x24ab, UNICODE_NOT_PRESENT_OFFSET, 6089 },
  23703   { 0x24ac, UNICODE_NOT_PRESENT_OFFSET, 6093 },
  23704   { 0x24ad, UNICODE_NOT_PRESENT_OFFSET, 6097 },
  23705   { 0x24ae, UNICODE_NOT_PRESENT_OFFSET, 6101 },
  23706   { 0x24af, UNICODE_NOT_PRESENT_OFFSET, 6105 },
  23707   { 0x24b0, UNICODE_NOT_PRESENT_OFFSET, 6109 },
  23708   { 0x24b1, UNICODE_NOT_PRESENT_OFFSET, 6113 },
  23709   { 0x24b2, UNICODE_NOT_PRESENT_OFFSET, 6117 },
  23710   { 0x24b3, UNICODE_NOT_PRESENT_OFFSET, 6121 },
  23711   { 0x24b4, UNICODE_NOT_PRESENT_OFFSET, 6125 },
  23712   { 0x24b5, UNICODE_NOT_PRESENT_OFFSET, 6129 },
  23713   { 0x24b6, UNICODE_NOT_PRESENT_OFFSET, 2309 },
  23714   { 0x24b7, UNICODE_NOT_PRESENT_OFFSET, 2314 },
  23715   { 0x24b8, UNICODE_NOT_PRESENT_OFFSET, 5292 },
  23716   { 0x24b9, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  23717   { 0x24ba, UNICODE_NOT_PRESENT_OFFSET, 2318 },
  23718   { 0x24bb, UNICODE_NOT_PRESENT_OFFSET, 5336 },
  23719   { 0x24bc, UNICODE_NOT_PRESENT_OFFSET, 2323 },
  23720   { 0x24bd, UNICODE_NOT_PRESENT_OFFSET, 2325 },
  23721   { 0x24be, UNICODE_NOT_PRESENT_OFFSET, 2327 },
  23722   { 0x24bf, UNICODE_NOT_PRESENT_OFFSET, 2329 },
  23723   { 0x24c0, UNICODE_NOT_PRESENT_OFFSET, 2331 },
  23724   { 0x24c1, UNICODE_NOT_PRESENT_OFFSET, 2333 },
  23725   { 0x24c2, UNICODE_NOT_PRESENT_OFFSET, 2335 },
  23726   { 0x24c3, UNICODE_NOT_PRESENT_OFFSET, 2337 },
  23727   { 0x24c4, UNICODE_NOT_PRESENT_OFFSET, 2339 },
  23728   { 0x24c5, UNICODE_NOT_PRESENT_OFFSET, 2344 },
  23729   { 0x24c6, UNICODE_NOT_PRESENT_OFFSET, 5319 },
  23730   { 0x24c7, UNICODE_NOT_PRESENT_OFFSET, 2346 },
  23731   { 0x24c8, UNICODE_NOT_PRESENT_OFFSET, 6133 },
  23732   { 0x24c9, UNICODE_NOT_PRESENT_OFFSET, 2348 },
  23733   { 0x24ca, UNICODE_NOT_PRESENT_OFFSET, 2350 },
  23734   { 0x24cb, UNICODE_NOT_PRESENT_OFFSET, 5470 },
  23735   { 0x24cc, UNICODE_NOT_PRESENT_OFFSET, 2352 },
  23736   { 0x24cd, UNICODE_NOT_PRESENT_OFFSET, 5487 },
  23737   { 0x24ce, UNICODE_NOT_PRESENT_OFFSET, 6135 },
  23738   { 0x24cf, UNICODE_NOT_PRESENT_OFFSET, 5331 },
  23739   { 0x24d0, UNICODE_NOT_PRESENT_OFFSET, 6 },
  23740   { 0x24d1, UNICODE_NOT_PRESENT_OFFSET, 2364 },
  23741   { 0x24d2, UNICODE_NOT_PRESENT_OFFSET, 2435 },
  23742   { 0x24d3, UNICODE_NOT_PRESENT_OFFSET, 2366 },
  23743   { 0x24d4, UNICODE_NOT_PRESENT_OFFSET, 2368 },
  23744   { 0x24d5, UNICODE_NOT_PRESENT_OFFSET, 2443 },
  23745   { 0x24d6, UNICODE_NOT_PRESENT_OFFSET, 2379 },
  23746   { 0x24d7, UNICODE_NOT_PRESENT_OFFSET, 1171 },
  23747   { 0x24d8, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  23748   { 0x24d9, UNICODE_NOT_PRESENT_OFFSET, 1176 },
  23749   { 0x24da, UNICODE_NOT_PRESENT_OFFSET, 2381 },
  23750   { 0x24db, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  23751   { 0x24dc, UNICODE_NOT_PRESENT_OFFSET, 2383 },
  23752   { 0x24dd, UNICODE_NOT_PRESENT_OFFSET, 5279 },
  23753   { 0x24de, UNICODE_NOT_PRESENT_OFFSET, 29 },
  23754   { 0x24df, UNICODE_NOT_PRESENT_OFFSET, 2399 },
  23755   { 0x24e0, UNICODE_NOT_PRESENT_OFFSET, 6137 },
  23756   { 0x24e1, UNICODE_NOT_PRESENT_OFFSET, 1178 },
  23757   { 0x24e2, UNICODE_NOT_PRESENT_OFFSET, 711 },
  23758   { 0x24e3, UNICODE_NOT_PRESENT_OFFSET, 2401 },
  23759   { 0x24e4, UNICODE_NOT_PRESENT_OFFSET, 2403 },
  23760   { 0x24e5, UNICODE_NOT_PRESENT_OFFSET, 2412 },
  23761   { 0x24e6, UNICODE_NOT_PRESENT_OFFSET, 1189 },
  23762   { 0x24e7, UNICODE_NOT_PRESENT_OFFSET, 1222 },
  23763   { 0x24e8, UNICODE_NOT_PRESENT_OFFSET, 1191 },
  23764   { 0x24e9, UNICODE_NOT_PRESENT_OFFSET, 2526 },
  23765   { 0x24ea, UNICODE_NOT_PRESENT_OFFSET, 5253 },
  23766   { 0x2a0c, UNICODE_NOT_PRESENT_OFFSET, 6139 },
  23767   { 0x2a74, UNICODE_NOT_PRESENT_OFFSET, 6152 },
  23768   { 0x2a75, UNICODE_NOT_PRESENT_OFFSET, 6156 },
  23769   { 0x2a76, UNICODE_NOT_PRESENT_OFFSET, 6159 },
  23770   { 0x2adc, 6163, UNICODE_NOT_PRESENT_OFFSET },
  23771   { 0x2c7c, UNICODE_NOT_PRESENT_OFFSET, 1176 },
  23772   { 0x2c7d, UNICODE_NOT_PRESENT_OFFSET, 5470 },
  23773   { 0x2d6f, UNICODE_NOT_PRESENT_OFFSET, 6169 },
  23774   { 0x2e9f, UNICODE_NOT_PRESENT_OFFSET, 6173 },
  23775   { 0x2ef3, UNICODE_NOT_PRESENT_OFFSET, 6177 },
  23776   { 0x2f00, UNICODE_NOT_PRESENT_OFFSET, 6181 },
  23777   { 0x2f01, UNICODE_NOT_PRESENT_OFFSET, 6185 },
  23778   { 0x2f02, UNICODE_NOT_PRESENT_OFFSET, 6189 },
  23779   { 0x2f03, UNICODE_NOT_PRESENT_OFFSET, 6193 },
  23780   { 0x2f04, UNICODE_NOT_PRESENT_OFFSET, 6197 },
  23781   { 0x2f05, UNICODE_NOT_PRESENT_OFFSET, 6201 },
  23782   { 0x2f06, UNICODE_NOT_PRESENT_OFFSET, 6205 },
  23783   { 0x2f07, UNICODE_NOT_PRESENT_OFFSET, 6209 },
  23784   { 0x2f08, UNICODE_NOT_PRESENT_OFFSET, 6213 },
  23785   { 0x2f09, UNICODE_NOT_PRESENT_OFFSET, 6217 },
  23786   { 0x2f0a, UNICODE_NOT_PRESENT_OFFSET, 6221 },
  23787   { 0x2f0b, UNICODE_NOT_PRESENT_OFFSET, 6225 },
  23788   { 0x2f0c, UNICODE_NOT_PRESENT_OFFSET, 6229 },
  23789   { 0x2f0d, UNICODE_NOT_PRESENT_OFFSET, 6233 },
  23790   { 0x2f0e, UNICODE_NOT_PRESENT_OFFSET, 6237 },
  23791   { 0x2f0f, UNICODE_NOT_PRESENT_OFFSET, 6241 },
  23792   { 0x2f10, UNICODE_NOT_PRESENT_OFFSET, 6245 },
  23793   { 0x2f11, UNICODE_NOT_PRESENT_OFFSET, 6249 },
  23794   { 0x2f12, UNICODE_NOT_PRESENT_OFFSET, 6253 },
  23795   { 0x2f13, UNICODE_NOT_PRESENT_OFFSET, 6257 },
  23796   { 0x2f14, UNICODE_NOT_PRESENT_OFFSET, 6261 },
  23797   { 0x2f15, UNICODE_NOT_PRESENT_OFFSET, 6265 },
  23798   { 0x2f16, UNICODE_NOT_PRESENT_OFFSET, 6269 },
  23799   { 0x2f17, UNICODE_NOT_PRESENT_OFFSET, 6273 },
  23800   { 0x2f18, UNICODE_NOT_PRESENT_OFFSET, 6277 },
  23801   { 0x2f19, UNICODE_NOT_PRESENT_OFFSET, 6281 },
  23802   { 0x2f1a, UNICODE_NOT_PRESENT_OFFSET, 6285 },
  23803   { 0x2f1b, UNICODE_NOT_PRESENT_OFFSET, 6289 },
  23804   { 0x2f1c, UNICODE_NOT_PRESENT_OFFSET, 6293 },
  23805   { 0x2f1d, UNICODE_NOT_PRESENT_OFFSET, 6297 },
  23806   { 0x2f1e, UNICODE_NOT_PRESENT_OFFSET, 6301 },
  23807   { 0x2f1f, UNICODE_NOT_PRESENT_OFFSET, 6305 },
  23808   { 0x2f20, UNICODE_NOT_PRESENT_OFFSET, 6309 },
  23809   { 0x2f21, UNICODE_NOT_PRESENT_OFFSET, 6313 },
  23810   { 0x2f22, UNICODE_NOT_PRESENT_OFFSET, 6317 },
  23811   { 0x2f23, UNICODE_NOT_PRESENT_OFFSET, 6321 },
  23812   { 0x2f24, UNICODE_NOT_PRESENT_OFFSET, 6325 },
  23813   { 0x2f25, UNICODE_NOT_PRESENT_OFFSET, 6329 },
  23814   { 0x2f26, UNICODE_NOT_PRESENT_OFFSET, 6333 },
  23815   { 0x2f27, UNICODE_NOT_PRESENT_OFFSET, 6337 },
  23816   { 0x2f28, UNICODE_NOT_PRESENT_OFFSET, 6341 },
  23817   { 0x2f29, UNICODE_NOT_PRESENT_OFFSET, 6345 },
  23818   { 0x2f2a, UNICODE_NOT_PRESENT_OFFSET, 6349 },
  23819   { 0x2f2b, UNICODE_NOT_PRESENT_OFFSET, 6353 },
  23820   { 0x2f2c, UNICODE_NOT_PRESENT_OFFSET, 6357 },
  23821   { 0x2f2d, UNICODE_NOT_PRESENT_OFFSET, 6361 },
  23822   { 0x2f2e, UNICODE_NOT_PRESENT_OFFSET, 6365 },
  23823   { 0x2f2f, UNICODE_NOT_PRESENT_OFFSET, 6369 },
  23824   { 0x2f30, UNICODE_NOT_PRESENT_OFFSET, 6373 },
  23825   { 0x2f31, UNICODE_NOT_PRESENT_OFFSET, 6377 },
  23826   { 0x2f32, UNICODE_NOT_PRESENT_OFFSET, 6381 },
  23827   { 0x2f33, UNICODE_NOT_PRESENT_OFFSET, 6385 },
  23828   { 0x2f34, UNICODE_NOT_PRESENT_OFFSET, 6389 },
  23829   { 0x2f35, UNICODE_NOT_PRESENT_OFFSET, 6393 },
  23830   { 0x2f36, UNICODE_NOT_PRESENT_OFFSET, 6397 },
  23831   { 0x2f37, UNICODE_NOT_PRESENT_OFFSET, 6401 },
  23832   { 0x2f38, UNICODE_NOT_PRESENT_OFFSET, 6405 },
  23833   { 0x2f39, UNICODE_NOT_PRESENT_OFFSET, 6409 },
  23834   { 0x2f3a, UNICODE_NOT_PRESENT_OFFSET, 6413 },
  23835   { 0x2f3b, UNICODE_NOT_PRESENT_OFFSET, 6417 },
  23836   { 0x2f3c, UNICODE_NOT_PRESENT_OFFSET, 6421 },
  23837   { 0x2f3d, UNICODE_NOT_PRESENT_OFFSET, 6425 },
  23838   { 0x2f3e, UNICODE_NOT_PRESENT_OFFSET, 6429 },
  23839   { 0x2f3f, UNICODE_NOT_PRESENT_OFFSET, 6433 },
  23840   { 0x2f40, UNICODE_NOT_PRESENT_OFFSET, 6437 },
  23841   { 0x2f41, UNICODE_NOT_PRESENT_OFFSET, 6441 },
  23842   { 0x2f42, UNICODE_NOT_PRESENT_OFFSET, 6445 },
  23843   { 0x2f43, UNICODE_NOT_PRESENT_OFFSET, 6449 },
  23844   { 0x2f44, UNICODE_NOT_PRESENT_OFFSET, 6453 },
  23845   { 0x2f45, UNICODE_NOT_PRESENT_OFFSET, 6457 },
  23846   { 0x2f46, UNICODE_NOT_PRESENT_OFFSET, 6461 },
  23847   { 0x2f47, UNICODE_NOT_PRESENT_OFFSET, 6465 },
  23848   { 0x2f48, UNICODE_NOT_PRESENT_OFFSET, 6469 },
  23849   { 0x2f49, UNICODE_NOT_PRESENT_OFFSET, 6473 },
  23850   { 0x2f4a, UNICODE_NOT_PRESENT_OFFSET, 6477 },
  23851   { 0x2f4b, UNICODE_NOT_PRESENT_OFFSET, 6481 },
  23852   { 0x2f4c, UNICODE_NOT_PRESENT_OFFSET, 6485 },
  23853   { 0x2f4d, UNICODE_NOT_PRESENT_OFFSET, 6489 },
  23854   { 0x2f4e, UNICODE_NOT_PRESENT_OFFSET, 6493 },
  23855   { 0x2f4f, UNICODE_NOT_PRESENT_OFFSET, 6497 },
  23856   { 0x2f50, UNICODE_NOT_PRESENT_OFFSET, 6501 },
  23857   { 0x2f51, UNICODE_NOT_PRESENT_OFFSET, 6505 },
  23858   { 0x2f52, UNICODE_NOT_PRESENT_OFFSET, 6509 },
  23859   { 0x2f53, UNICODE_NOT_PRESENT_OFFSET, 6513 },
  23860   { 0x2f54, UNICODE_NOT_PRESENT_OFFSET, 6517 },
  23861   { 0x2f55, UNICODE_NOT_PRESENT_OFFSET, 6521 },
  23862   { 0x2f56, UNICODE_NOT_PRESENT_OFFSET, 6525 },
  23863   { 0x2f57, UNICODE_NOT_PRESENT_OFFSET, 6529 },
  23864   { 0x2f58, UNICODE_NOT_PRESENT_OFFSET, 6533 },
  23865   { 0x2f59, UNICODE_NOT_PRESENT_OFFSET, 6537 },
  23866   { 0x2f5a, UNICODE_NOT_PRESENT_OFFSET, 6541 },
  23867   { 0x2f5b, UNICODE_NOT_PRESENT_OFFSET, 6545 },
  23868   { 0x2f5c, UNICODE_NOT_PRESENT_OFFSET, 6549 },
  23869   { 0x2f5d, UNICODE_NOT_PRESENT_OFFSET, 6553 },
  23870   { 0x2f5e, UNICODE_NOT_PRESENT_OFFSET, 6557 },
  23871   { 0x2f5f, UNICODE_NOT_PRESENT_OFFSET, 6561 },
  23872   { 0x2f60, UNICODE_NOT_PRESENT_OFFSET, 6565 },
  23873   { 0x2f61, UNICODE_NOT_PRESENT_OFFSET, 6569 },
  23874   { 0x2f62, UNICODE_NOT_PRESENT_OFFSET, 6573 },
  23875   { 0x2f63, UNICODE_NOT_PRESENT_OFFSET, 6577 },
  23876   { 0x2f64, UNICODE_NOT_PRESENT_OFFSET, 6581 },
  23877   { 0x2f65, UNICODE_NOT_PRESENT_OFFSET, 6585 },
  23878   { 0x2f66, UNICODE_NOT_PRESENT_OFFSET, 6589 },
  23879   { 0x2f67, UNICODE_NOT_PRESENT_OFFSET, 6593 },
  23880   { 0x2f68, UNICODE_NOT_PRESENT_OFFSET, 6597 },
  23881   { 0x2f69, UNICODE_NOT_PRESENT_OFFSET, 6601 },
  23882   { 0x2f6a, UNICODE_NOT_PRESENT_OFFSET, 6605 },
  23883   { 0x2f6b, UNICODE_NOT_PRESENT_OFFSET, 6609 },
  23884   { 0x2f6c, UNICODE_NOT_PRESENT_OFFSET, 6613 },
  23885   { 0x2f6d, UNICODE_NOT_PRESENT_OFFSET, 6617 },
  23886   { 0x2f6e, UNICODE_NOT_PRESENT_OFFSET, 6621 },
  23887   { 0x2f6f, UNICODE_NOT_PRESENT_OFFSET, 6625 },
  23888   { 0x2f70, UNICODE_NOT_PRESENT_OFFSET, 6629 },
  23889   { 0x2f71, UNICODE_NOT_PRESENT_OFFSET, 6633 },
  23890   { 0x2f72, UNICODE_NOT_PRESENT_OFFSET, 6637 },
  23891   { 0x2f73, UNICODE_NOT_PRESENT_OFFSET, 6641 },
  23892   { 0x2f74, UNICODE_NOT_PRESENT_OFFSET, 6645 },
  23893   { 0x2f75, UNICODE_NOT_PRESENT_OFFSET, 6649 },
  23894   { 0x2f76, UNICODE_NOT_PRESENT_OFFSET, 6653 },
  23895   { 0x2f77, UNICODE_NOT_PRESENT_OFFSET, 6657 },
  23896   { 0x2f78, UNICODE_NOT_PRESENT_OFFSET, 6661 },
  23897   { 0x2f79, UNICODE_NOT_PRESENT_OFFSET, 6665 },
  23898   { 0x2f7a, UNICODE_NOT_PRESENT_OFFSET, 6669 },
  23899   { 0x2f7b, UNICODE_NOT_PRESENT_OFFSET, 6673 },
  23900   { 0x2f7c, UNICODE_NOT_PRESENT_OFFSET, 6677 },
  23901   { 0x2f7d, UNICODE_NOT_PRESENT_OFFSET, 6681 },
  23902   { 0x2f7e, UNICODE_NOT_PRESENT_OFFSET, 6685 },
  23903   { 0x2f7f, UNICODE_NOT_PRESENT_OFFSET, 6689 },
  23904   { 0x2f80, UNICODE_NOT_PRESENT_OFFSET, 6693 },
  23905   { 0x2f81, UNICODE_NOT_PRESENT_OFFSET, 6697 },
  23906   { 0x2f82, UNICODE_NOT_PRESENT_OFFSET, 6701 },
  23907   { 0x2f83, UNICODE_NOT_PRESENT_OFFSET, 6705 },
  23908   { 0x2f84, UNICODE_NOT_PRESENT_OFFSET, 6709 },
  23909   { 0x2f85, UNICODE_NOT_PRESENT_OFFSET, 6713 },
  23910   { 0x2f86, UNICODE_NOT_PRESENT_OFFSET, 6717 },
  23911   { 0x2f87, UNICODE_NOT_PRESENT_OFFSET, 6721 },
  23912   { 0x2f88, UNICODE_NOT_PRESENT_OFFSET, 6725 },
  23913   { 0x2f89, UNICODE_NOT_PRESENT_OFFSET, 6729 },
  23914   { 0x2f8a, UNICODE_NOT_PRESENT_OFFSET, 6733 },
  23915   { 0x2f8b, UNICODE_NOT_PRESENT_OFFSET, 6737 },
  23916   { 0x2f8c, UNICODE_NOT_PRESENT_OFFSET, 6741 },
  23917   { 0x2f8d, UNICODE_NOT_PRESENT_OFFSET, 6745 },
  23918   { 0x2f8e, UNICODE_NOT_PRESENT_OFFSET, 6749 },
  23919   { 0x2f8f, UNICODE_NOT_PRESENT_OFFSET, 6753 },
  23920   { 0x2f90, UNICODE_NOT_PRESENT_OFFSET, 6757 },
  23921   { 0x2f91, UNICODE_NOT_PRESENT_OFFSET, 6761 },
  23922   { 0x2f92, UNICODE_NOT_PRESENT_OFFSET, 6765 },
  23923   { 0x2f93, UNICODE_NOT_PRESENT_OFFSET, 6769 },
  23924   { 0x2f94, UNICODE_NOT_PRESENT_OFFSET, 6773 },
  23925   { 0x2f95, UNICODE_NOT_PRESENT_OFFSET, 6777 },
  23926   { 0x2f96, UNICODE_NOT_PRESENT_OFFSET, 6781 },
  23927   { 0x2f97, UNICODE_NOT_PRESENT_OFFSET, 6785 },
  23928   { 0x2f98, UNICODE_NOT_PRESENT_OFFSET, 6789 },
  23929   { 0x2f99, UNICODE_NOT_PRESENT_OFFSET, 6793 },
  23930   { 0x2f9a, UNICODE_NOT_PRESENT_OFFSET, 6797 },
  23931   { 0x2f9b, UNICODE_NOT_PRESENT_OFFSET, 6801 },
  23932   { 0x2f9c, UNICODE_NOT_PRESENT_OFFSET, 6805 },
  23933   { 0x2f9d, UNICODE_NOT_PRESENT_OFFSET, 6809 },
  23934   { 0x2f9e, UNICODE_NOT_PRESENT_OFFSET, 6813 },
  23935   { 0x2f9f, UNICODE_NOT_PRESENT_OFFSET, 6817 },
  23936   { 0x2fa0, UNICODE_NOT_PRESENT_OFFSET, 6821 },
  23937   { 0x2fa1, UNICODE_NOT_PRESENT_OFFSET, 6825 },
  23938   { 0x2fa2, UNICODE_NOT_PRESENT_OFFSET, 6829 },
  23939   { 0x2fa3, UNICODE_NOT_PRESENT_OFFSET, 6833 },
  23940   { 0x2fa4, UNICODE_NOT_PRESENT_OFFSET, 6837 },
  23941   { 0x2fa5, UNICODE_NOT_PRESENT_OFFSET, 6841 },
  23942   { 0x2fa6, UNICODE_NOT_PRESENT_OFFSET, 6845 },
  23943   { 0x2fa7, UNICODE_NOT_PRESENT_OFFSET, 6849 },
  23944   { 0x2fa8, UNICODE_NOT_PRESENT_OFFSET, 6853 },
  23945   { 0x2fa9, UNICODE_NOT_PRESENT_OFFSET, 6857 },
  23946   { 0x2faa, UNICODE_NOT_PRESENT_OFFSET, 6861 },
  23947   { 0x2fab, UNICODE_NOT_PRESENT_OFFSET, 6865 },
  23948   { 0x2fac, UNICODE_NOT_PRESENT_OFFSET, 6869 },
  23949   { 0x2fad, UNICODE_NOT_PRESENT_OFFSET, 6873 },
  23950   { 0x2fae, UNICODE_NOT_PRESENT_OFFSET, 6877 },
  23951   { 0x2faf, UNICODE_NOT_PRESENT_OFFSET, 6881 },
  23952   { 0x2fb0, UNICODE_NOT_PRESENT_OFFSET, 6885 },
  23953   { 0x2fb1, UNICODE_NOT_PRESENT_OFFSET, 6889 },
  23954   { 0x2fb2, UNICODE_NOT_PRESENT_OFFSET, 6893 },
  23955   { 0x2fb3, UNICODE_NOT_PRESENT_OFFSET, 6897 },
  23956   { 0x2fb4, UNICODE_NOT_PRESENT_OFFSET, 6901 },
  23957   { 0x2fb5, UNICODE_NOT_PRESENT_OFFSET, 6905 },
  23958   { 0x2fb6, UNICODE_NOT_PRESENT_OFFSET, 6909 },
  23959   { 0x2fb7, UNICODE_NOT_PRESENT_OFFSET, 6913 },
  23960   { 0x2fb8, UNICODE_NOT_PRESENT_OFFSET, 6917 },
  23961   { 0x2fb9, UNICODE_NOT_PRESENT_OFFSET, 6921 },
  23962   { 0x2fba, UNICODE_NOT_PRESENT_OFFSET, 6925 },
  23963   { 0x2fbb, UNICODE_NOT_PRESENT_OFFSET, 6929 },
  23964   { 0x2fbc, UNICODE_NOT_PRESENT_OFFSET, 6933 },
  23965   { 0x2fbd, UNICODE_NOT_PRESENT_OFFSET, 6937 },
  23966   { 0x2fbe, UNICODE_NOT_PRESENT_OFFSET, 6941 },
  23967   { 0x2fbf, UNICODE_NOT_PRESENT_OFFSET, 6945 },
  23968   { 0x2fc0, UNICODE_NOT_PRESENT_OFFSET, 6949 },
  23969   { 0x2fc1, UNICODE_NOT_PRESENT_OFFSET, 6953 },
  23970   { 0x2fc2, UNICODE_NOT_PRESENT_OFFSET, 6957 },
  23971   { 0x2fc3, UNICODE_NOT_PRESENT_OFFSET, 6961 },
  23972   { 0x2fc4, UNICODE_NOT_PRESENT_OFFSET, 6965 },
  23973   { 0x2fc5, UNICODE_NOT_PRESENT_OFFSET, 6969 },
  23974   { 0x2fc6, UNICODE_NOT_PRESENT_OFFSET, 6973 },
  23975   { 0x2fc7, UNICODE_NOT_PRESENT_OFFSET, 6977 },
  23976   { 0x2fc8, UNICODE_NOT_PRESENT_OFFSET, 6981 },
  23977   { 0x2fc9, UNICODE_NOT_PRESENT_OFFSET, 6985 },
  23978   { 0x2fca, UNICODE_NOT_PRESENT_OFFSET, 6989 },
  23979   { 0x2fcb, UNICODE_NOT_PRESENT_OFFSET, 6993 },
  23980   { 0x2fcc, UNICODE_NOT_PRESENT_OFFSET, 6997 },
  23981   { 0x2fcd, UNICODE_NOT_PRESENT_OFFSET, 7001 },
  23982   { 0x2fce, UNICODE_NOT_PRESENT_OFFSET, 7005 },
  23983   { 0x2fcf, UNICODE_NOT_PRESENT_OFFSET, 7009 },
  23984   { 0x2fd0, UNICODE_NOT_PRESENT_OFFSET, 7013 },
  23985   { 0x2fd1, UNICODE_NOT_PRESENT_OFFSET, 7017 },
  23986   { 0x2fd2, UNICODE_NOT_PRESENT_OFFSET, 7021 },
  23987   { 0x2fd3, UNICODE_NOT_PRESENT_OFFSET, 7025 },
  23988   { 0x2fd4, UNICODE_NOT_PRESENT_OFFSET, 7029 },
  23989   { 0x2fd5, UNICODE_NOT_PRESENT_OFFSET, 7033 },
  23990   { 0x3000, UNICODE_NOT_PRESENT_OFFSET, 0 },
  23991   { 0x3036, UNICODE_NOT_PRESENT_OFFSET, 7037 },
  23992   { 0x3038, UNICODE_NOT_PRESENT_OFFSET, 6273 },
  23993   { 0x3039, UNICODE_NOT_PRESENT_OFFSET, 7041 },
  23994   { 0x303a, UNICODE_NOT_PRESENT_OFFSET, 7045 },
  23995   { 0x304c, 7049, UNICODE_NOT_PRESENT_OFFSET },
  23996   { 0x304e, 7056, UNICODE_NOT_PRESENT_OFFSET },
  23997   { 0x3050, 7063, UNICODE_NOT_PRESENT_OFFSET },
  23998   { 0x3052, 7070, UNICODE_NOT_PRESENT_OFFSET },
  23999   { 0x3054, 7077, UNICODE_NOT_PRESENT_OFFSET },
  24000   { 0x3056, 7084, UNICODE_NOT_PRESENT_OFFSET },
  24001   { 0x3058, 7091, UNICODE_NOT_PRESENT_OFFSET },
  24002   { 0x305a, 7098, UNICODE_NOT_PRESENT_OFFSET },
  24003   { 0x305c, 7105, UNICODE_NOT_PRESENT_OFFSET },
  24004   { 0x305e, 7112, UNICODE_NOT_PRESENT_OFFSET },
  24005   { 0x3060, 7119, UNICODE_NOT_PRESENT_OFFSET },
  24006   { 0x3062, 7126, UNICODE_NOT_PRESENT_OFFSET },
  24007   { 0x3065, 7133, UNICODE_NOT_PRESENT_OFFSET },
  24008   { 0x3067, 7140, UNICODE_NOT_PRESENT_OFFSET },
  24009   { 0x3069, 7147, UNICODE_NOT_PRESENT_OFFSET },
  24010   { 0x3070, 7154, UNICODE_NOT_PRESENT_OFFSET },
  24011   { 0x3071, 7161, UNICODE_NOT_PRESENT_OFFSET },
  24012   { 0x3073, 7168, UNICODE_NOT_PRESENT_OFFSET },
  24013   { 0x3074, 7175, UNICODE_NOT_PRESENT_OFFSET },
  24014   { 0x3076, 7182, UNICODE_NOT_PRESENT_OFFSET },
  24015   { 0x3077, 7189, UNICODE_NOT_PRESENT_OFFSET },
  24016   { 0x3079, 7196, UNICODE_NOT_PRESENT_OFFSET },
  24017   { 0x307a, 7203, UNICODE_NOT_PRESENT_OFFSET },
  24018   { 0x307c, 7210, UNICODE_NOT_PRESENT_OFFSET },
  24019   { 0x307d, 7217, UNICODE_NOT_PRESENT_OFFSET },
  24020   { 0x3094, 7224, UNICODE_NOT_PRESENT_OFFSET },
  24021   { 0x309b, UNICODE_NOT_PRESENT_OFFSET, 7231 },
  24022   { 0x309c, UNICODE_NOT_PRESENT_OFFSET, 7236 },
  24023   { 0x309e, 7241, UNICODE_NOT_PRESENT_OFFSET },
  24024   { 0x309f, UNICODE_NOT_PRESENT_OFFSET, 7248 },
  24025   { 0x30ac, 7255, UNICODE_NOT_PRESENT_OFFSET },
  24026   { 0x30ae, 7262, UNICODE_NOT_PRESENT_OFFSET },
  24027   { 0x30b0, 7269, UNICODE_NOT_PRESENT_OFFSET },
  24028   { 0x30b2, 7276, UNICODE_NOT_PRESENT_OFFSET },
  24029   { 0x30b4, 7283, UNICODE_NOT_PRESENT_OFFSET },
  24030   { 0x30b6, 7290, UNICODE_NOT_PRESENT_OFFSET },
  24031   { 0x30b8, 7297, UNICODE_NOT_PRESENT_OFFSET },
  24032   { 0x30ba, 7304, UNICODE_NOT_PRESENT_OFFSET },
  24033   { 0x30bc, 7311, UNICODE_NOT_PRESENT_OFFSET },
  24034   { 0x30be, 7318, UNICODE_NOT_PRESENT_OFFSET },
  24035   { 0x30c0, 7325, UNICODE_NOT_PRESENT_OFFSET },
  24036   { 0x30c2, 7332, UNICODE_NOT_PRESENT_OFFSET },
  24037   { 0x30c5, 7339, UNICODE_NOT_PRESENT_OFFSET },
  24038   { 0x30c7, 7346, UNICODE_NOT_PRESENT_OFFSET },
  24039   { 0x30c9, 7353, UNICODE_NOT_PRESENT_OFFSET },
  24040   { 0x30d0, 7360, UNICODE_NOT_PRESENT_OFFSET },
  24041   { 0x30d1, 7367, UNICODE_NOT_PRESENT_OFFSET },
  24042   { 0x30d3, 7374, UNICODE_NOT_PRESENT_OFFSET },
  24043   { 0x30d4, 7381, UNICODE_NOT_PRESENT_OFFSET },
  24044   { 0x30d6, 7388, UNICODE_NOT_PRESENT_OFFSET },
  24045   { 0x30d7, 7395, UNICODE_NOT_PRESENT_OFFSET },
  24046   { 0x30d9, 7402, UNICODE_NOT_PRESENT_OFFSET },
  24047   { 0x30da, 7409, UNICODE_NOT_PRESENT_OFFSET },
  24048   { 0x30dc, 7416, UNICODE_NOT_PRESENT_OFFSET },
  24049   { 0x30dd, 7423, UNICODE_NOT_PRESENT_OFFSET },
  24050   { 0x30f4, 7430, UNICODE_NOT_PRESENT_OFFSET },
  24051   { 0x30f7, 7437, UNICODE_NOT_PRESENT_OFFSET },
  24052   { 0x30f8, 7444, UNICODE_NOT_PRESENT_OFFSET },
  24053   { 0x30f9, 7451, UNICODE_NOT_PRESENT_OFFSET },
  24054   { 0x30fa, 7458, UNICODE_NOT_PRESENT_OFFSET },
  24055   { 0x30fe, 7465, UNICODE_NOT_PRESENT_OFFSET },
  24056   { 0x30ff, UNICODE_NOT_PRESENT_OFFSET, 7472 },
  24057   { 0x3131, UNICODE_NOT_PRESENT_OFFSET, 7479 },
  24058   { 0x3132, UNICODE_NOT_PRESENT_OFFSET, 7483 },
  24059   { 0x3133, UNICODE_NOT_PRESENT_OFFSET, 7487 },
  24060   { 0x3134, UNICODE_NOT_PRESENT_OFFSET, 7491 },
  24061   { 0x3135, UNICODE_NOT_PRESENT_OFFSET, 7495 },
  24062   { 0x3136, UNICODE_NOT_PRESENT_OFFSET, 7499 },
  24063   { 0x3137, UNICODE_NOT_PRESENT_OFFSET, 7503 },
  24064   { 0x3138, UNICODE_NOT_PRESENT_OFFSET, 7507 },
  24065   { 0x3139, UNICODE_NOT_PRESENT_OFFSET, 7511 },
  24066   { 0x313a, UNICODE_NOT_PRESENT_OFFSET, 7515 },
  24067   { 0x313b, UNICODE_NOT_PRESENT_OFFSET, 7519 },
  24068   { 0x313c, UNICODE_NOT_PRESENT_OFFSET, 7523 },
  24069   { 0x313d, UNICODE_NOT_PRESENT_OFFSET, 7527 },
  24070   { 0x313e, UNICODE_NOT_PRESENT_OFFSET, 7531 },
  24071   { 0x313f, UNICODE_NOT_PRESENT_OFFSET, 7535 },
  24072   { 0x3140, UNICODE_NOT_PRESENT_OFFSET, 7539 },
  24073   { 0x3141, UNICODE_NOT_PRESENT_OFFSET, 7543 },
  24074   { 0x3142, UNICODE_NOT_PRESENT_OFFSET, 7547 },
  24075   { 0x3143, UNICODE_NOT_PRESENT_OFFSET, 7551 },
  24076   { 0x3144, UNICODE_NOT_PRESENT_OFFSET, 7555 },
  24077   { 0x3145, UNICODE_NOT_PRESENT_OFFSET, 7559 },
  24078   { 0x3146, UNICODE_NOT_PRESENT_OFFSET, 7563 },
  24079   { 0x3147, UNICODE_NOT_PRESENT_OFFSET, 7567 },
  24080   { 0x3148, UNICODE_NOT_PRESENT_OFFSET, 7571 },
  24081   { 0x3149, UNICODE_NOT_PRESENT_OFFSET, 7575 },
  24082   { 0x314a, UNICODE_NOT_PRESENT_OFFSET, 7579 },
  24083   { 0x314b, UNICODE_NOT_PRESENT_OFFSET, 7583 },
  24084   { 0x314c, UNICODE_NOT_PRESENT_OFFSET, 7587 },
  24085   { 0x314d, UNICODE_NOT_PRESENT_OFFSET, 7591 },
  24086   { 0x314e, UNICODE_NOT_PRESENT_OFFSET, 7595 },
  24087   { 0x314f, UNICODE_NOT_PRESENT_OFFSET, 7599 },
  24088   { 0x3150, UNICODE_NOT_PRESENT_OFFSET, 7603 },
  24089   { 0x3151, UNICODE_NOT_PRESENT_OFFSET, 7607 },
  24090   { 0x3152, UNICODE_NOT_PRESENT_OFFSET, 7611 },
  24091   { 0x3153, UNICODE_NOT_PRESENT_OFFSET, 7615 },
  24092   { 0x3154, UNICODE_NOT_PRESENT_OFFSET, 7619 },
  24093   { 0x3155, UNICODE_NOT_PRESENT_OFFSET, 7623 },
  24094   { 0x3156, UNICODE_NOT_PRESENT_OFFSET, 7627 },
  24095   { 0x3157, UNICODE_NOT_PRESENT_OFFSET, 7631 },
  24096   { 0x3158, UNICODE_NOT_PRESENT_OFFSET, 7635 },
  24097   { 0x3159, UNICODE_NOT_PRESENT_OFFSET, 7639 },
  24098   { 0x315a, UNICODE_NOT_PRESENT_OFFSET, 7643 },
  24099   { 0x315b, UNICODE_NOT_PRESENT_OFFSET, 7647 },
  24100   { 0x315c, UNICODE_NOT_PRESENT_OFFSET, 7651 },
  24101   { 0x315d, UNICODE_NOT_PRESENT_OFFSET, 7655 },
  24102   { 0x315e, UNICODE_NOT_PRESENT_OFFSET, 7659 },
  24103   { 0x315f, UNICODE_NOT_PRESENT_OFFSET, 7663 },
  24104   { 0x3160, UNICODE_NOT_PRESENT_OFFSET, 7667 },
  24105   { 0x3161, UNICODE_NOT_PRESENT_OFFSET, 7671 },
  24106   { 0x3162, UNICODE_NOT_PRESENT_OFFSET, 7675 },
  24107   { 0x3163, UNICODE_NOT_PRESENT_OFFSET, 7679 },
  24108   { 0x3164, UNICODE_NOT_PRESENT_OFFSET, 7683 },
  24109   { 0x3165, UNICODE_NOT_PRESENT_OFFSET, 7687 },
  24110   { 0x3166, UNICODE_NOT_PRESENT_OFFSET, 7691 },
  24111   { 0x3167, UNICODE_NOT_PRESENT_OFFSET, 7695 },
  24112   { 0x3168, UNICODE_NOT_PRESENT_OFFSET, 7699 },
  24113   { 0x3169, UNICODE_NOT_PRESENT_OFFSET, 7703 },
  24114   { 0x316a, UNICODE_NOT_PRESENT_OFFSET, 7707 },
  24115   { 0x316b, UNICODE_NOT_PRESENT_OFFSET, 7711 },
  24116   { 0x316c, UNICODE_NOT_PRESENT_OFFSET, 7715 },
  24117   { 0x316d, UNICODE_NOT_PRESENT_OFFSET, 7719 },
  24118   { 0x316e, UNICODE_NOT_PRESENT_OFFSET, 7723 },
  24119   { 0x316f, UNICODE_NOT_PRESENT_OFFSET, 7727 },
  24120   { 0x3170, UNICODE_NOT_PRESENT_OFFSET, 7731 },
  24121   { 0x3171, UNICODE_NOT_PRESENT_OFFSET, 7735 },
  24122   { 0x3172, UNICODE_NOT_PRESENT_OFFSET, 7739 },
  24123   { 0x3173, UNICODE_NOT_PRESENT_OFFSET, 7743 },
  24124   { 0x3174, UNICODE_NOT_PRESENT_OFFSET, 7747 },
  24125   { 0x3175, UNICODE_NOT_PRESENT_OFFSET, 7751 },
  24126   { 0x3176, UNICODE_NOT_PRESENT_OFFSET, 7755 },
  24127   { 0x3177, UNICODE_NOT_PRESENT_OFFSET, 7759 },
  24128   { 0x3178, UNICODE_NOT_PRESENT_OFFSET, 7763 },
  24129   { 0x3179, UNICODE_NOT_PRESENT_OFFSET, 7767 },
  24130   { 0x317a, UNICODE_NOT_PRESENT_OFFSET, 7771 },
  24131   { 0x317b, UNICODE_NOT_PRESENT_OFFSET, 7775 },
  24132   { 0x317c, UNICODE_NOT_PRESENT_OFFSET, 7779 },
  24133   { 0x317d, UNICODE_NOT_PRESENT_OFFSET, 7783 },
  24134   { 0x317e, UNICODE_NOT_PRESENT_OFFSET, 7787 },
  24135   { 0x317f, UNICODE_NOT_PRESENT_OFFSET, 7791 },
  24136   { 0x3180, UNICODE_NOT_PRESENT_OFFSET, 7795 },
  24137   { 0x3181, UNICODE_NOT_PRESENT_OFFSET, 7799 },
  24138   { 0x3182, UNICODE_NOT_PRESENT_OFFSET, 7803 },
  24139   { 0x3183, UNICODE_NOT_PRESENT_OFFSET, 7807 },
  24140   { 0x3184, UNICODE_NOT_PRESENT_OFFSET, 7811 },
  24141   { 0x3185, UNICODE_NOT_PRESENT_OFFSET, 7815 },
  24142   { 0x3186, UNICODE_NOT_PRESENT_OFFSET, 7819 },
  24143   { 0x3187, UNICODE_NOT_PRESENT_OFFSET, 7823 },
  24144   { 0x3188, UNICODE_NOT_PRESENT_OFFSET, 7827 },
  24145   { 0x3189, UNICODE_NOT_PRESENT_OFFSET, 7831 },
  24146   { 0x318a, UNICODE_NOT_PRESENT_OFFSET, 7835 },
  24147   { 0x318b, UNICODE_NOT_PRESENT_OFFSET, 7839 },
  24148   { 0x318c, UNICODE_NOT_PRESENT_OFFSET, 7843 },
  24149   { 0x318d, UNICODE_NOT_PRESENT_OFFSET, 7847 },
  24150   { 0x318e, UNICODE_NOT_PRESENT_OFFSET, 7851 },
  24151   { 0x3192, UNICODE_NOT_PRESENT_OFFSET, 6181 },
  24152   { 0x3193, UNICODE_NOT_PRESENT_OFFSET, 6205 },
  24153   { 0x3194, UNICODE_NOT_PRESENT_OFFSET, 7855 },
  24154   { 0x3195, UNICODE_NOT_PRESENT_OFFSET, 7859 },
  24155   { 0x3196, UNICODE_NOT_PRESENT_OFFSET, 7863 },
  24156   { 0x3197, UNICODE_NOT_PRESENT_OFFSET, 7867 },
  24157   { 0x3198, UNICODE_NOT_PRESENT_OFFSET, 7871 },
  24158   { 0x3199, UNICODE_NOT_PRESENT_OFFSET, 7875 },
  24159   { 0x319a, UNICODE_NOT_PRESENT_OFFSET, 6197 },
  24160   { 0x319b, UNICODE_NOT_PRESENT_OFFSET, 7879 },
  24161   { 0x319c, UNICODE_NOT_PRESENT_OFFSET, 7883 },
  24162   { 0x319d, UNICODE_NOT_PRESENT_OFFSET, 7887 },
  24163   { 0x319e, UNICODE_NOT_PRESENT_OFFSET, 7891 },
  24164   { 0x319f, UNICODE_NOT_PRESENT_OFFSET, 6213 },
  24165   { 0x3200, UNICODE_NOT_PRESENT_OFFSET, 7895 },
  24166   { 0x3201, UNICODE_NOT_PRESENT_OFFSET, 7901 },
  24167   { 0x3202, UNICODE_NOT_PRESENT_OFFSET, 7907 },
  24168   { 0x3203, UNICODE_NOT_PRESENT_OFFSET, 7913 },
  24169   { 0x3204, UNICODE_NOT_PRESENT_OFFSET, 7919 },
  24170   { 0x3205, UNICODE_NOT_PRESENT_OFFSET, 7925 },
  24171   { 0x3206, UNICODE_NOT_PRESENT_OFFSET, 7931 },
  24172   { 0x3207, UNICODE_NOT_PRESENT_OFFSET, 7937 },
  24173   { 0x3208, UNICODE_NOT_PRESENT_OFFSET, 7943 },
  24174   { 0x3209, UNICODE_NOT_PRESENT_OFFSET, 7949 },
  24175   { 0x320a, UNICODE_NOT_PRESENT_OFFSET, 7955 },
  24176   { 0x320b, UNICODE_NOT_PRESENT_OFFSET, 7961 },
  24177   { 0x320c, UNICODE_NOT_PRESENT_OFFSET, 7967 },
  24178   { 0x320d, UNICODE_NOT_PRESENT_OFFSET, 7973 },
  24179   { 0x320e, UNICODE_NOT_PRESENT_OFFSET, 7979 },
  24180   { 0x320f, UNICODE_NOT_PRESENT_OFFSET, 7988 },
  24181   { 0x3210, UNICODE_NOT_PRESENT_OFFSET, 7997 },
  24182   { 0x3211, UNICODE_NOT_PRESENT_OFFSET, 8006 },
  24183   { 0x3212, UNICODE_NOT_PRESENT_OFFSET, 8015 },
  24184   { 0x3213, UNICODE_NOT_PRESENT_OFFSET, 8024 },
  24185   { 0x3214, UNICODE_NOT_PRESENT_OFFSET, 8033 },
  24186   { 0x3215, UNICODE_NOT_PRESENT_OFFSET, 8042 },
  24187   { 0x3216, UNICODE_NOT_PRESENT_OFFSET, 8051 },
  24188   { 0x3217, UNICODE_NOT_PRESENT_OFFSET, 8060 },
  24189   { 0x3218, UNICODE_NOT_PRESENT_OFFSET, 8069 },
  24190   { 0x3219, UNICODE_NOT_PRESENT_OFFSET, 8078 },
  24191   { 0x321a, UNICODE_NOT_PRESENT_OFFSET, 8087 },
  24192   { 0x321b, UNICODE_NOT_PRESENT_OFFSET, 8096 },
  24193   { 0x321c, UNICODE_NOT_PRESENT_OFFSET, 8105 },
  24194   { 0x321d, UNICODE_NOT_PRESENT_OFFSET, 8114 },
  24195   { 0x321e, UNICODE_NOT_PRESENT_OFFSET, 8132 },
  24196   { 0x3220, UNICODE_NOT_PRESENT_OFFSET, 8147 },
  24197   { 0x3221, UNICODE_NOT_PRESENT_OFFSET, 8153 },
  24198   { 0x3222, UNICODE_NOT_PRESENT_OFFSET, 8159 },
  24199   { 0x3223, UNICODE_NOT_PRESENT_OFFSET, 8165 },
  24200   { 0x3224, UNICODE_NOT_PRESENT_OFFSET, 8171 },
  24201   { 0x3225, UNICODE_NOT_PRESENT_OFFSET, 8177 },
  24202   { 0x3226, UNICODE_NOT_PRESENT_OFFSET, 8183 },
  24203   { 0x3227, UNICODE_NOT_PRESENT_OFFSET, 8189 },
  24204   { 0x3228, UNICODE_NOT_PRESENT_OFFSET, 8195 },
  24205   { 0x3229, UNICODE_NOT_PRESENT_OFFSET, 8201 },
  24206   { 0x322a, UNICODE_NOT_PRESENT_OFFSET, 8207 },
  24207   { 0x322b, UNICODE_NOT_PRESENT_OFFSET, 8213 },
  24208   { 0x322c, UNICODE_NOT_PRESENT_OFFSET, 8219 },
  24209   { 0x322d, UNICODE_NOT_PRESENT_OFFSET, 8225 },
  24210   { 0x322e, UNICODE_NOT_PRESENT_OFFSET, 8231 },
  24211   { 0x322f, UNICODE_NOT_PRESENT_OFFSET, 8237 },
  24212   { 0x3230, UNICODE_NOT_PRESENT_OFFSET, 8243 },
  24213   { 0x3231, UNICODE_NOT_PRESENT_OFFSET, 8249 },
  24214   { 0x3232, UNICODE_NOT_PRESENT_OFFSET, 8255 },
  24215   { 0x3233, UNICODE_NOT_PRESENT_OFFSET, 8261 },
  24216   { 0x3234, UNICODE_NOT_PRESENT_OFFSET, 8267 },
  24217   { 0x3235, UNICODE_NOT_PRESENT_OFFSET, 8273 },
  24218   { 0x3236, UNICODE_NOT_PRESENT_OFFSET, 8279 },
  24219   { 0x3237, UNICODE_NOT_PRESENT_OFFSET, 8285 },
  24220   { 0x3238, UNICODE_NOT_PRESENT_OFFSET, 8291 },
  24221   { 0x3239, UNICODE_NOT_PRESENT_OFFSET, 8297 },
  24222   { 0x323a, UNICODE_NOT_PRESENT_OFFSET, 8303 },
  24223   { 0x323b, UNICODE_NOT_PRESENT_OFFSET, 8309 },
  24224   { 0x323c, UNICODE_NOT_PRESENT_OFFSET, 8315 },
  24225   { 0x323d, UNICODE_NOT_PRESENT_OFFSET, 8321 },
  24226   { 0x323e, UNICODE_NOT_PRESENT_OFFSET, 8327 },
  24227   { 0x323f, UNICODE_NOT_PRESENT_OFFSET, 8333 },
  24228   { 0x3240, UNICODE_NOT_PRESENT_OFFSET, 8339 },
  24229   { 0x3241, UNICODE_NOT_PRESENT_OFFSET, 8345 },
  24230   { 0x3242, UNICODE_NOT_PRESENT_OFFSET, 8351 },
  24231   { 0x3243, UNICODE_NOT_PRESENT_OFFSET, 8357 },
  24232   { 0x3244, UNICODE_NOT_PRESENT_OFFSET, 8363 },
  24233   { 0x3245, UNICODE_NOT_PRESENT_OFFSET, 8367 },
  24234   { 0x3246, UNICODE_NOT_PRESENT_OFFSET, 6445 },
  24235   { 0x3247, UNICODE_NOT_PRESENT_OFFSET, 8371 },
  24236   { 0x3250, UNICODE_NOT_PRESENT_OFFSET, 8375 },
  24237   { 0x3251, UNICODE_NOT_PRESENT_OFFSET, 8379 },
  24238   { 0x3252, UNICODE_NOT_PRESENT_OFFSET, 8382 },
  24239   { 0x3253, UNICODE_NOT_PRESENT_OFFSET, 8385 },
  24240   { 0x3254, UNICODE_NOT_PRESENT_OFFSET, 8388 },
  24241   { 0x3255, UNICODE_NOT_PRESENT_OFFSET, 8391 },
  24242   { 0x3256, UNICODE_NOT_PRESENT_OFFSET, 8394 },
  24243   { 0x3257, UNICODE_NOT_PRESENT_OFFSET, 8397 },
  24244   { 0x3258, UNICODE_NOT_PRESENT_OFFSET, 8400 },
  24245   { 0x3259, UNICODE_NOT_PRESENT_OFFSET, 8403 },
  24246   { 0x325a, UNICODE_NOT_PRESENT_OFFSET, 8406 },
  24247   { 0x325b, UNICODE_NOT_PRESENT_OFFSET, 8409 },
  24248   { 0x325c, UNICODE_NOT_PRESENT_OFFSET, 8412 },
  24249   { 0x325d, UNICODE_NOT_PRESENT_OFFSET, 8415 },
  24250   { 0x325e, UNICODE_NOT_PRESENT_OFFSET, 8418 },
  24251   { 0x325f, UNICODE_NOT_PRESENT_OFFSET, 8421 },
  24252   { 0x3260, UNICODE_NOT_PRESENT_OFFSET, 7479 },
  24253   { 0x3261, UNICODE_NOT_PRESENT_OFFSET, 7491 },
  24254   { 0x3262, UNICODE_NOT_PRESENT_OFFSET, 7503 },
  24255   { 0x3263, UNICODE_NOT_PRESENT_OFFSET, 7511 },
  24256   { 0x3264, UNICODE_NOT_PRESENT_OFFSET, 7543 },
  24257   { 0x3265, UNICODE_NOT_PRESENT_OFFSET, 7547 },
  24258   { 0x3266, UNICODE_NOT_PRESENT_OFFSET, 7559 },
  24259   { 0x3267, UNICODE_NOT_PRESENT_OFFSET, 7567 },
  24260   { 0x3268, UNICODE_NOT_PRESENT_OFFSET, 7571 },
  24261   { 0x3269, UNICODE_NOT_PRESENT_OFFSET, 7579 },
  24262   { 0x326a, UNICODE_NOT_PRESENT_OFFSET, 7583 },
  24263   { 0x326b, UNICODE_NOT_PRESENT_OFFSET, 7587 },
  24264   { 0x326c, UNICODE_NOT_PRESENT_OFFSET, 7591 },
  24265   { 0x326d, UNICODE_NOT_PRESENT_OFFSET, 7595 },
  24266   { 0x326e, UNICODE_NOT_PRESENT_OFFSET, 8424 },
  24267   { 0x326f, UNICODE_NOT_PRESENT_OFFSET, 8431 },
  24268   { 0x3270, UNICODE_NOT_PRESENT_OFFSET, 8438 },
  24269   { 0x3271, UNICODE_NOT_PRESENT_OFFSET, 8445 },
  24270   { 0x3272, UNICODE_NOT_PRESENT_OFFSET, 8452 },
  24271   { 0x3273, UNICODE_NOT_PRESENT_OFFSET, 8459 },
  24272   { 0x3274, UNICODE_NOT_PRESENT_OFFSET, 8466 },
  24273   { 0x3275, UNICODE_NOT_PRESENT_OFFSET, 8473 },
  24274   { 0x3276, UNICODE_NOT_PRESENT_OFFSET, 8480 },
  24275   { 0x3277, UNICODE_NOT_PRESENT_OFFSET, 8487 },
  24276   { 0x3278, UNICODE_NOT_PRESENT_OFFSET, 8494 },
  24277   { 0x3279, UNICODE_NOT_PRESENT_OFFSET, 8501 },
  24278   { 0x327a, UNICODE_NOT_PRESENT_OFFSET, 8508 },
  24279   { 0x327b, UNICODE_NOT_PRESENT_OFFSET, 8515 },
  24280   { 0x327c, UNICODE_NOT_PRESENT_OFFSET, 8522 },
  24281   { 0x327d, UNICODE_NOT_PRESENT_OFFSET, 8538 },
  24282   { 0x327e, UNICODE_NOT_PRESENT_OFFSET, 8551 },
  24283   { 0x3280, UNICODE_NOT_PRESENT_OFFSET, 6181 },
  24284   { 0x3281, UNICODE_NOT_PRESENT_OFFSET, 6205 },
  24285   { 0x3282, UNICODE_NOT_PRESENT_OFFSET, 7855 },
  24286   { 0x3283, UNICODE_NOT_PRESENT_OFFSET, 7859 },
  24287   { 0x3284, UNICODE_NOT_PRESENT_OFFSET, 8558 },
  24288   { 0x3285, UNICODE_NOT_PRESENT_OFFSET, 8562 },
  24289   { 0x3286, UNICODE_NOT_PRESENT_OFFSET, 8566 },
  24290   { 0x3287, UNICODE_NOT_PRESENT_OFFSET, 6225 },
  24291   { 0x3288, UNICODE_NOT_PRESENT_OFFSET, 8570 },
  24292   { 0x3289, UNICODE_NOT_PRESENT_OFFSET, 6273 },
  24293   { 0x328a, UNICODE_NOT_PRESENT_OFFSET, 6473 },
  24294   { 0x328b, UNICODE_NOT_PRESENT_OFFSET, 6521 },
  24295   { 0x328c, UNICODE_NOT_PRESENT_OFFSET, 6517 },
  24296   { 0x328d, UNICODE_NOT_PRESENT_OFFSET, 6477 },
  24297   { 0x328e, UNICODE_NOT_PRESENT_OFFSET, 6845 },
  24298   { 0x328f, UNICODE_NOT_PRESENT_OFFSET, 6305 },
  24299   { 0x3290, UNICODE_NOT_PRESENT_OFFSET, 6465 },
  24300   { 0x3291, UNICODE_NOT_PRESENT_OFFSET, 8574 },
  24301   { 0x3292, UNICODE_NOT_PRESENT_OFFSET, 8578 },
  24302   { 0x3293, UNICODE_NOT_PRESENT_OFFSET, 8582 },
  24303   { 0x3294, UNICODE_NOT_PRESENT_OFFSET, 8586 },
  24304   { 0x3295, UNICODE_NOT_PRESENT_OFFSET, 8590 },
  24305   { 0x3296, UNICODE_NOT_PRESENT_OFFSET, 8594 },
  24306   { 0x3297, UNICODE_NOT_PRESENT_OFFSET, 8598 },
  24307   { 0x3298, UNICODE_NOT_PRESENT_OFFSET, 8602 },
  24308   { 0x3299, UNICODE_NOT_PRESENT_OFFSET, 8606 },
  24309   { 0x329a, UNICODE_NOT_PRESENT_OFFSET, 8610 },
  24310   { 0x329b, UNICODE_NOT_PRESENT_OFFSET, 6329 },
  24311   { 0x329c, UNICODE_NOT_PRESENT_OFFSET, 8614 },
  24312   { 0x329d, UNICODE_NOT_PRESENT_OFFSET, 8618 },
  24313   { 0x329e, UNICODE_NOT_PRESENT_OFFSET, 8622 },
  24314   { 0x329f, UNICODE_NOT_PRESENT_OFFSET, 8626 },
  24315   { 0x32a0, UNICODE_NOT_PRESENT_OFFSET, 8630 },
  24316   { 0x32a1, UNICODE_NOT_PRESENT_OFFSET, 8634 },
  24317   { 0x32a2, UNICODE_NOT_PRESENT_OFFSET, 8638 },
  24318   { 0x32a3, UNICODE_NOT_PRESENT_OFFSET, 8642 },
  24319   { 0x32a4, UNICODE_NOT_PRESENT_OFFSET, 7863 },
  24320   { 0x32a5, UNICODE_NOT_PRESENT_OFFSET, 7867 },
  24321   { 0x32a6, UNICODE_NOT_PRESENT_OFFSET, 7871 },
  24322   { 0x32a7, UNICODE_NOT_PRESENT_OFFSET, 8646 },
  24323   { 0x32a8, UNICODE_NOT_PRESENT_OFFSET, 8650 },
  24324   { 0x32a9, UNICODE_NOT_PRESENT_OFFSET, 8654 },
  24325   { 0x32aa, UNICODE_NOT_PRESENT_OFFSET, 8658 },
  24326   { 0x32ab, UNICODE_NOT_PRESENT_OFFSET, 8662 },
  24327   { 0x32ac, UNICODE_NOT_PRESENT_OFFSET, 8666 },
  24328   { 0x32ad, UNICODE_NOT_PRESENT_OFFSET, 8670 },
  24329   { 0x32ae, UNICODE_NOT_PRESENT_OFFSET, 8674 },
  24330   { 0x32af, UNICODE_NOT_PRESENT_OFFSET, 8678 },
  24331   { 0x32b0, UNICODE_NOT_PRESENT_OFFSET, 8682 },
  24332   { 0x32b1, UNICODE_NOT_PRESENT_OFFSET, 8686 },
  24333   { 0x32b2, UNICODE_NOT_PRESENT_OFFSET, 8689 },
  24334   { 0x32b3, UNICODE_NOT_PRESENT_OFFSET, 8692 },
  24335   { 0x32b4, UNICODE_NOT_PRESENT_OFFSET, 8695 },
  24336   { 0x32b5, UNICODE_NOT_PRESENT_OFFSET, 8698 },
  24337   { 0x32b6, UNICODE_NOT_PRESENT_OFFSET, 8701 },
  24338   { 0x32b7, UNICODE_NOT_PRESENT_OFFSET, 8704 },
  24339   { 0x32b8, UNICODE_NOT_PRESENT_OFFSET, 8707 },
  24340   { 0x32b9, UNICODE_NOT_PRESENT_OFFSET, 8710 },
  24341   { 0x32ba, UNICODE_NOT_PRESENT_OFFSET, 8713 },
  24342   { 0x32bb, UNICODE_NOT_PRESENT_OFFSET, 8716 },
  24343   { 0x32bc, UNICODE_NOT_PRESENT_OFFSET, 8719 },
  24344   { 0x32bd, UNICODE_NOT_PRESENT_OFFSET, 8722 },
  24345   { 0x32be, UNICODE_NOT_PRESENT_OFFSET, 8725 },
  24346   { 0x32bf, UNICODE_NOT_PRESENT_OFFSET, 8728 },
  24347   { 0x32c0, UNICODE_NOT_PRESENT_OFFSET, 8731 },
  24348   { 0x32c1, UNICODE_NOT_PRESENT_OFFSET, 8736 },
  24349   { 0x32c2, UNICODE_NOT_PRESENT_OFFSET, 8741 },
  24350   { 0x32c3, UNICODE_NOT_PRESENT_OFFSET, 8746 },
  24351   { 0x32c4, UNICODE_NOT_PRESENT_OFFSET, 8751 },
  24352   { 0x32c5, UNICODE_NOT_PRESENT_OFFSET, 8756 },
  24353   { 0x32c6, UNICODE_NOT_PRESENT_OFFSET, 8761 },
  24354   { 0x32c7, UNICODE_NOT_PRESENT_OFFSET, 8766 },
  24355   { 0x32c8, UNICODE_NOT_PRESENT_OFFSET, 8771 },
  24356   { 0x32c9, UNICODE_NOT_PRESENT_OFFSET, 8776 },
  24357   { 0x32ca, UNICODE_NOT_PRESENT_OFFSET, 8782 },
  24358   { 0x32cb, UNICODE_NOT_PRESENT_OFFSET, 8788 },
  24359   { 0x32cc, UNICODE_NOT_PRESENT_OFFSET, 8794 },
  24360   { 0x32cd, UNICODE_NOT_PRESENT_OFFSET, 8797 },
  24361   { 0x32ce, UNICODE_NOT_PRESENT_OFFSET, 8801 },
  24362   { 0x32cf, UNICODE_NOT_PRESENT_OFFSET, 8804 },
  24363   { 0x32d0, UNICODE_NOT_PRESENT_OFFSET, 8808 },
  24364   { 0x32d1, UNICODE_NOT_PRESENT_OFFSET, 8812 },
  24365   { 0x32d2, UNICODE_NOT_PRESENT_OFFSET, 8816 },
  24366   { 0x32d3, UNICODE_NOT_PRESENT_OFFSET, 8820 },
  24367   { 0x32d4, UNICODE_NOT_PRESENT_OFFSET, 8824 },
  24368   { 0x32d5, UNICODE_NOT_PRESENT_OFFSET, 8828 },
  24369   { 0x32d6, UNICODE_NOT_PRESENT_OFFSET, 8832 },
  24370   { 0x32d7, UNICODE_NOT_PRESENT_OFFSET, 8836 },
  24371   { 0x32d8, UNICODE_NOT_PRESENT_OFFSET, 8840 },
  24372   { 0x32d9, UNICODE_NOT_PRESENT_OFFSET, 8844 },
  24373   { 0x32da, UNICODE_NOT_PRESENT_OFFSET, 8848 },
  24374   { 0x32db, UNICODE_NOT_PRESENT_OFFSET, 8852 },
  24375   { 0x32dc, UNICODE_NOT_PRESENT_OFFSET, 8856 },
  24376   { 0x32dd, UNICODE_NOT_PRESENT_OFFSET, 8860 },
  24377   { 0x32de, UNICODE_NOT_PRESENT_OFFSET, 8864 },
  24378   { 0x32df, UNICODE_NOT_PRESENT_OFFSET, 8868 },
  24379   { 0x32e0, UNICODE_NOT_PRESENT_OFFSET, 8872 },
  24380   { 0x32e1, UNICODE_NOT_PRESENT_OFFSET, 8876 },
  24381   { 0x32e2, UNICODE_NOT_PRESENT_OFFSET, 8880 },
  24382   { 0x32e3, UNICODE_NOT_PRESENT_OFFSET, 8884 },
  24383   { 0x32e4, UNICODE_NOT_PRESENT_OFFSET, 8888 },
  24384   { 0x32e5, UNICODE_NOT_PRESENT_OFFSET, 8892 },
  24385   { 0x32e6, UNICODE_NOT_PRESENT_OFFSET, 8896 },
  24386   { 0x32e7, UNICODE_NOT_PRESENT_OFFSET, 8900 },
  24387   { 0x32e8, UNICODE_NOT_PRESENT_OFFSET, 8904 },
  24388   { 0x32e9, UNICODE_NOT_PRESENT_OFFSET, 8908 },
  24389   { 0x32ea, UNICODE_NOT_PRESENT_OFFSET, 8912 },
  24390   { 0x32eb, UNICODE_NOT_PRESENT_OFFSET, 8916 },
  24391   { 0x32ec, UNICODE_NOT_PRESENT_OFFSET, 8920 },
  24392   { 0x32ed, UNICODE_NOT_PRESENT_OFFSET, 8924 },
  24393   { 0x32ee, UNICODE_NOT_PRESENT_OFFSET, 8928 },
  24394   { 0x32ef, UNICODE_NOT_PRESENT_OFFSET, 8932 },
  24395   { 0x32f0, UNICODE_NOT_PRESENT_OFFSET, 8936 },
  24396   { 0x32f1, UNICODE_NOT_PRESENT_OFFSET, 8940 },
  24397   { 0x32f2, UNICODE_NOT_PRESENT_OFFSET, 8944 },
  24398   { 0x32f3, UNICODE_NOT_PRESENT_OFFSET, 8948 },
  24399   { 0x32f4, UNICODE_NOT_PRESENT_OFFSET, 8952 },
  24400   { 0x32f5, UNICODE_NOT_PRESENT_OFFSET, 8956 },
  24401   { 0x32f6, UNICODE_NOT_PRESENT_OFFSET, 8960 },
  24402   { 0x32f7, UNICODE_NOT_PRESENT_OFFSET, 8964 },
  24403   { 0x32f8, UNICODE_NOT_PRESENT_OFFSET, 8968 },
  24404   { 0x32f9, UNICODE_NOT_PRESENT_OFFSET, 8972 },
  24405   { 0x32fa, UNICODE_NOT_PRESENT_OFFSET, 8976 },
  24406   { 0x32fb, UNICODE_NOT_PRESENT_OFFSET, 8980 },
  24407   { 0x32fc, UNICODE_NOT_PRESENT_OFFSET, 8984 },
  24408   { 0x32fd, UNICODE_NOT_PRESENT_OFFSET, 8988 },
  24409   { 0x32fe, UNICODE_NOT_PRESENT_OFFSET, 8992 },
  24410   { 0x3300, UNICODE_NOT_PRESENT_OFFSET, 8996 },
  24411   { 0x3301, UNICODE_NOT_PRESENT_OFFSET, 9012 },
  24412   { 0x3302, UNICODE_NOT_PRESENT_OFFSET, 9025 },
  24413   { 0x3303, UNICODE_NOT_PRESENT_OFFSET, 9041 },
  24414   { 0x3304, UNICODE_NOT_PRESENT_OFFSET, 9051 },
  24415   { 0x3305, UNICODE_NOT_PRESENT_OFFSET, 9067 },
  24416   { 0x3306, UNICODE_NOT_PRESENT_OFFSET, 9077 },
  24417   { 0x3307, UNICODE_NOT_PRESENT_OFFSET, 9087 },
  24418   { 0x3308, UNICODE_NOT_PRESENT_OFFSET, 9106 },
  24419   { 0x3309, UNICODE_NOT_PRESENT_OFFSET, 9119 },
  24420   { 0x330a, UNICODE_NOT_PRESENT_OFFSET, 9129 },
  24421   { 0x330b, UNICODE_NOT_PRESENT_OFFSET, 9139 },
  24422   { 0x330c, UNICODE_NOT_PRESENT_OFFSET, 9149 },
  24423   { 0x330d, UNICODE_NOT_PRESENT_OFFSET, 9162 },
  24424   { 0x330e, UNICODE_NOT_PRESENT_OFFSET, 9175 },
  24425   { 0x330f, UNICODE_NOT_PRESENT_OFFSET, 9188 },
  24426   { 0x3310, UNICODE_NOT_PRESENT_OFFSET, 9201 },
  24427   { 0x3311, UNICODE_NOT_PRESENT_OFFSET, 9214 },
  24428   { 0x3312, UNICODE_NOT_PRESENT_OFFSET, 9227 },
  24429   { 0x3313, UNICODE_NOT_PRESENT_OFFSET, 9240 },
  24430   { 0x3314, UNICODE_NOT_PRESENT_OFFSET, 9259 },
  24431   { 0x3315, UNICODE_NOT_PRESENT_OFFSET, 9266 },
  24432   { 0x3316, UNICODE_NOT_PRESENT_OFFSET, 9285 },
  24433   { 0x3317, UNICODE_NOT_PRESENT_OFFSET, 9304 },
  24434   { 0x3318, UNICODE_NOT_PRESENT_OFFSET, 9320 },
  24435   { 0x3319, UNICODE_NOT_PRESENT_OFFSET, 9333 },
  24436   { 0x331a, UNICODE_NOT_PRESENT_OFFSET, 9352 },
  24437   { 0x331b, UNICODE_NOT_PRESENT_OFFSET, 9371 },
  24438   { 0x331c, UNICODE_NOT_PRESENT_OFFSET, 9384 },
  24439   { 0x331d, UNICODE_NOT_PRESENT_OFFSET, 9394 },
  24440   { 0x331e, UNICODE_NOT_PRESENT_OFFSET, 9404 },
  24441   { 0x331f, UNICODE_NOT_PRESENT_OFFSET, 9417 },
  24442   { 0x3320, UNICODE_NOT_PRESENT_OFFSET, 9430 },
  24443   { 0x3321, UNICODE_NOT_PRESENT_OFFSET, 9446 },
  24444   { 0x3322, UNICODE_NOT_PRESENT_OFFSET, 9462 },
  24445   { 0x3323, UNICODE_NOT_PRESENT_OFFSET, 9472 },
  24446   { 0x3324, UNICODE_NOT_PRESENT_OFFSET, 9482 },
  24447   { 0x3325, UNICODE_NOT_PRESENT_OFFSET, 9495 },
  24448   { 0x3326, UNICODE_NOT_PRESENT_OFFSET, 9505 },
  24449   { 0x3327, UNICODE_NOT_PRESENT_OFFSET, 9515 },
  24450   { 0x3328, UNICODE_NOT_PRESENT_OFFSET, 9522 },
  24451   { 0x3329, UNICODE_NOT_PRESENT_OFFSET, 9529 },
  24452   { 0x332a, UNICODE_NOT_PRESENT_OFFSET, 9539 },
  24453   { 0x332b, UNICODE_NOT_PRESENT_OFFSET, 9549 },
  24454   { 0x332c, UNICODE_NOT_PRESENT_OFFSET, 9568 },
  24455   { 0x332d, UNICODE_NOT_PRESENT_OFFSET, 9581 },
  24456   { 0x332e, UNICODE_NOT_PRESENT_OFFSET, 9597 },
  24457   { 0x332f, UNICODE_NOT_PRESENT_OFFSET, 9616 },
  24458   { 0x3330, UNICODE_NOT_PRESENT_OFFSET, 9629 },
  24459   { 0x3331, UNICODE_NOT_PRESENT_OFFSET, 9639 },
  24460   { 0x3332, UNICODE_NOT_PRESENT_OFFSET, 9649 },
  24461   { 0x3333, UNICODE_NOT_PRESENT_OFFSET, 9668 },
  24462   { 0x3334, UNICODE_NOT_PRESENT_OFFSET, 9681 },
  24463   { 0x3335, UNICODE_NOT_PRESENT_OFFSET, 9700 },
  24464   { 0x3336, UNICODE_NOT_PRESENT_OFFSET, 9710 },
  24465   { 0x3337, UNICODE_NOT_PRESENT_OFFSET, 9726 },
  24466   { 0x3338, UNICODE_NOT_PRESENT_OFFSET, 9736 },
  24467   { 0x3339, UNICODE_NOT_PRESENT_OFFSET, 9749 },
  24468   { 0x333a, UNICODE_NOT_PRESENT_OFFSET, 9759 },
  24469   { 0x333b, UNICODE_NOT_PRESENT_OFFSET, 9772 },
  24470   { 0x333c, UNICODE_NOT_PRESENT_OFFSET, 9788 },
  24471   { 0x333d, UNICODE_NOT_PRESENT_OFFSET, 9801 },
  24472   { 0x333e, UNICODE_NOT_PRESENT_OFFSET, 9817 },
  24473   { 0x333f, UNICODE_NOT_PRESENT_OFFSET, 9830 },
  24474   { 0x3340, UNICODE_NOT_PRESENT_OFFSET, 9837 },
  24475   { 0x3341, UNICODE_NOT_PRESENT_OFFSET, 9853 },
  24476   { 0x3342, UNICODE_NOT_PRESENT_OFFSET, 9863 },
  24477   { 0x3343, UNICODE_NOT_PRESENT_OFFSET, 9873 },
  24478   { 0x3344, UNICODE_NOT_PRESENT_OFFSET, 9886 },
  24479   { 0x3345, UNICODE_NOT_PRESENT_OFFSET, 9896 },
  24480   { 0x3346, UNICODE_NOT_PRESENT_OFFSET, 9906 },
  24481   { 0x3347, UNICODE_NOT_PRESENT_OFFSET, 9916 },
  24482   { 0x3348, UNICODE_NOT_PRESENT_OFFSET, 9932 },
  24483   { 0x3349, UNICODE_NOT_PRESENT_OFFSET, 9945 },
  24484   { 0x334a, UNICODE_NOT_PRESENT_OFFSET, 9952 },
  24485   { 0x334b, UNICODE_NOT_PRESENT_OFFSET, 9971 },
  24486   { 0x334c, UNICODE_NOT_PRESENT_OFFSET, 9981 },
  24487   { 0x334d, UNICODE_NOT_PRESENT_OFFSET, 9997 },
  24488   { 0x334e, UNICODE_NOT_PRESENT_OFFSET, 10010 },
  24489   { 0x334f, UNICODE_NOT_PRESENT_OFFSET, 10023 },
  24490   { 0x3350, UNICODE_NOT_PRESENT_OFFSET, 10033 },
  24491   { 0x3351, UNICODE_NOT_PRESENT_OFFSET, 10043 },
  24492   { 0x3352, UNICODE_NOT_PRESENT_OFFSET, 10056 },
  24493   { 0x3353, UNICODE_NOT_PRESENT_OFFSET, 10063 },
  24494   { 0x3354, UNICODE_NOT_PRESENT_OFFSET, 10076 },
  24495   { 0x3355, UNICODE_NOT_PRESENT_OFFSET, 10092 },
  24496   { 0x3356, UNICODE_NOT_PRESENT_OFFSET, 10099 },
  24497   { 0x3357, UNICODE_NOT_PRESENT_OFFSET, 10118 },
  24498   { 0x3358, UNICODE_NOT_PRESENT_OFFSET, 10128 },
  24499   { 0x3359, UNICODE_NOT_PRESENT_OFFSET, 10133 },
  24500   { 0x335a, UNICODE_NOT_PRESENT_OFFSET, 10138 },
  24501   { 0x335b, UNICODE_NOT_PRESENT_OFFSET, 10143 },
  24502   { 0x335c, UNICODE_NOT_PRESENT_OFFSET, 10148 },
  24503   { 0x335d, UNICODE_NOT_PRESENT_OFFSET, 10153 },
  24504   { 0x335e, UNICODE_NOT_PRESENT_OFFSET, 10158 },
  24505   { 0x335f, UNICODE_NOT_PRESENT_OFFSET, 10163 },
  24506   { 0x3360, UNICODE_NOT_PRESENT_OFFSET, 10168 },
  24507   { 0x3361, UNICODE_NOT_PRESENT_OFFSET, 10173 },
  24508   { 0x3362, UNICODE_NOT_PRESENT_OFFSET, 10178 },
  24509   { 0x3363, UNICODE_NOT_PRESENT_OFFSET, 10184 },
  24510   { 0x3364, UNICODE_NOT_PRESENT_OFFSET, 10190 },
  24511   { 0x3365, UNICODE_NOT_PRESENT_OFFSET, 10196 },
  24512   { 0x3366, UNICODE_NOT_PRESENT_OFFSET, 10202 },
  24513   { 0x3367, UNICODE_NOT_PRESENT_OFFSET, 10208 },
  24514   { 0x3368, UNICODE_NOT_PRESENT_OFFSET, 10214 },
  24515   { 0x3369, UNICODE_NOT_PRESENT_OFFSET, 10220 },
  24516   { 0x336a, UNICODE_NOT_PRESENT_OFFSET, 10226 },
  24517   { 0x336b, UNICODE_NOT_PRESENT_OFFSET, 10232 },
  24518   { 0x336c, UNICODE_NOT_PRESENT_OFFSET, 10238 },
  24519   { 0x336d, UNICODE_NOT_PRESENT_OFFSET, 10244 },
  24520   { 0x336e, UNICODE_NOT_PRESENT_OFFSET, 10250 },
  24521   { 0x336f, UNICODE_NOT_PRESENT_OFFSET, 10256 },
  24522   { 0x3370, UNICODE_NOT_PRESENT_OFFSET, 10262 },
  24523   { 0x3371, UNICODE_NOT_PRESENT_OFFSET, 10268 },
  24524   { 0x3372, UNICODE_NOT_PRESENT_OFFSET, 10272 },
  24525   { 0x3373, UNICODE_NOT_PRESENT_OFFSET, 10275 },
  24526   { 0x3374, UNICODE_NOT_PRESENT_OFFSET, 10278 },
  24527   { 0x3375, UNICODE_NOT_PRESENT_OFFSET, 10282 },
  24528   { 0x3376, UNICODE_NOT_PRESENT_OFFSET, 10285 },
  24529   { 0x3377, UNICODE_NOT_PRESENT_OFFSET, 10288 },
  24530   { 0x3378, UNICODE_NOT_PRESENT_OFFSET, 10291 },
  24531   { 0x3379, UNICODE_NOT_PRESENT_OFFSET, 10295 },
  24532   { 0x337a, UNICODE_NOT_PRESENT_OFFSET, 10299 },
  24533   { 0x337b, UNICODE_NOT_PRESENT_OFFSET, 10302 },
  24534   { 0x337c, UNICODE_NOT_PRESENT_OFFSET, 10309 },
  24535   { 0x337d, UNICODE_NOT_PRESENT_OFFSET, 10316 },
  24536   { 0x337e, UNICODE_NOT_PRESENT_OFFSET, 10323 },
  24537   { 0x337f, UNICODE_NOT_PRESENT_OFFSET, 10330 },
  24538   { 0x3380, UNICODE_NOT_PRESENT_OFFSET, 10343 },
  24539   { 0x3381, UNICODE_NOT_PRESENT_OFFSET, 10346 },
  24540   { 0x3382, UNICODE_NOT_PRESENT_OFFSET, 10349 },
  24541   { 0x3383, UNICODE_NOT_PRESENT_OFFSET, 10353 },
  24542   { 0x3384, UNICODE_NOT_PRESENT_OFFSET, 10356 },
  24543   { 0x3385, UNICODE_NOT_PRESENT_OFFSET, 10359 },
  24544   { 0x3386, UNICODE_NOT_PRESENT_OFFSET, 10362 },
  24545   { 0x3387, UNICODE_NOT_PRESENT_OFFSET, 10365 },
  24546   { 0x3388, UNICODE_NOT_PRESENT_OFFSET, 10368 },
  24547   { 0x3389, UNICODE_NOT_PRESENT_OFFSET, 10372 },
  24548   { 0x338a, UNICODE_NOT_PRESENT_OFFSET, 10377 },
  24549   { 0x338b, UNICODE_NOT_PRESENT_OFFSET, 10380 },
  24550   { 0x338c, UNICODE_NOT_PRESENT_OFFSET, 10383 },
  24551   { 0x338d, UNICODE_NOT_PRESENT_OFFSET, 10387 },
  24552   { 0x338e, UNICODE_NOT_PRESENT_OFFSET, 10391 },
  24553   { 0x338f, UNICODE_NOT_PRESENT_OFFSET, 10394 },
  24554   { 0x3390, UNICODE_NOT_PRESENT_OFFSET, 10397 },
  24555   { 0x3391, UNICODE_NOT_PRESENT_OFFSET, 10400 },
  24556   { 0x3392, UNICODE_NOT_PRESENT_OFFSET, 10404 },
  24557   { 0x3393, UNICODE_NOT_PRESENT_OFFSET, 10408 },
  24558   { 0x3394, UNICODE_NOT_PRESENT_OFFSET, 10412 },
  24559   { 0x3395, UNICODE_NOT_PRESENT_OFFSET, 10416 },
  24560   { 0x3396, UNICODE_NOT_PRESENT_OFFSET, 10420 },
  24561   { 0x3397, UNICODE_NOT_PRESENT_OFFSET, 10423 },
  24562   { 0x3398, UNICODE_NOT_PRESENT_OFFSET, 10426 },
  24563   { 0x3399, UNICODE_NOT_PRESENT_OFFSET, 10429 },
  24564   { 0x339a, UNICODE_NOT_PRESENT_OFFSET, 10432 },
  24565   { 0x339b, UNICODE_NOT_PRESENT_OFFSET, 10435 },
  24566   { 0x339c, UNICODE_NOT_PRESENT_OFFSET, 10439 },
  24567   { 0x339d, UNICODE_NOT_PRESENT_OFFSET, 10442 },
  24568   { 0x339e, UNICODE_NOT_PRESENT_OFFSET, 10445 },
  24569   { 0x339f, UNICODE_NOT_PRESENT_OFFSET, 10448 },
  24570   { 0x33a0, UNICODE_NOT_PRESENT_OFFSET, 10452 },
  24571   { 0x33a1, UNICODE_NOT_PRESENT_OFFSET, 10456 },
  24572   { 0x33a2, UNICODE_NOT_PRESENT_OFFSET, 10459 },
  24573   { 0x33a3, UNICODE_NOT_PRESENT_OFFSET, 10463 },
  24574   { 0x33a4, UNICODE_NOT_PRESENT_OFFSET, 10467 },
  24575   { 0x33a5, UNICODE_NOT_PRESENT_OFFSET, 10471 },
  24576   { 0x33a6, UNICODE_NOT_PRESENT_OFFSET, 10474 },
  24577   { 0x33a7, UNICODE_NOT_PRESENT_OFFSET, 10478 },
  24578   { 0x33a8, UNICODE_NOT_PRESENT_OFFSET, 10484 },
  24579   { 0x33a9, UNICODE_NOT_PRESENT_OFFSET, 10491 },
  24580   { 0x33aa, UNICODE_NOT_PRESENT_OFFSET, 10494 },
  24581   { 0x33ab, UNICODE_NOT_PRESENT_OFFSET, 10498 },
  24582   { 0x33ac, UNICODE_NOT_PRESENT_OFFSET, 10502 },
  24583   { 0x33ad, UNICODE_NOT_PRESENT_OFFSET, 10506 },
  24584   { 0x33ae, UNICODE_NOT_PRESENT_OFFSET, 10510 },
  24585   { 0x33af, UNICODE_NOT_PRESENT_OFFSET, 10518 },
  24586   { 0x33b0, UNICODE_NOT_PRESENT_OFFSET, 10527 },
  24587   { 0x33b1, UNICODE_NOT_PRESENT_OFFSET, 10530 },
  24588   { 0x33b2, UNICODE_NOT_PRESENT_OFFSET, 10533 },
  24589   { 0x33b3, UNICODE_NOT_PRESENT_OFFSET, 10537 },
  24590   { 0x33b4, UNICODE_NOT_PRESENT_OFFSET, 10540 },
  24591   { 0x33b5, UNICODE_NOT_PRESENT_OFFSET, 10543 },
  24592   { 0x33b6, UNICODE_NOT_PRESENT_OFFSET, 10546 },
  24593   { 0x33b7, UNICODE_NOT_PRESENT_OFFSET, 10550 },
  24594   { 0x33b8, UNICODE_NOT_PRESENT_OFFSET, 10553 },
  24595   { 0x33b9, UNICODE_NOT_PRESENT_OFFSET, 10556 },
  24596   { 0x33ba, UNICODE_NOT_PRESENT_OFFSET, 10559 },
  24597   { 0x33bb, UNICODE_NOT_PRESENT_OFFSET, 10562 },
  24598   { 0x33bc, UNICODE_NOT_PRESENT_OFFSET, 10565 },
  24599   { 0x33bd, UNICODE_NOT_PRESENT_OFFSET, 10569 },
  24600   { 0x33be, UNICODE_NOT_PRESENT_OFFSET, 10572 },
  24601   { 0x33bf, UNICODE_NOT_PRESENT_OFFSET, 10575 },
  24602   { 0x33c0, UNICODE_NOT_PRESENT_OFFSET, 10578 },
  24603   { 0x33c1, UNICODE_NOT_PRESENT_OFFSET, 10582 },
  24604   { 0x33c2, UNICODE_NOT_PRESENT_OFFSET, 10586 },
  24605   { 0x33c3, UNICODE_NOT_PRESENT_OFFSET, 10591 },
  24606   { 0x33c4, UNICODE_NOT_PRESENT_OFFSET, 10594 },
  24607   { 0x33c5, UNICODE_NOT_PRESENT_OFFSET, 10597 },
  24608   { 0x33c6, UNICODE_NOT_PRESENT_OFFSET, 10600 },
  24609   { 0x33c7, UNICODE_NOT_PRESENT_OFFSET, 10607 },
  24610   { 0x33c8, UNICODE_NOT_PRESENT_OFFSET, 10611 },
  24611   { 0x33c9, UNICODE_NOT_PRESENT_OFFSET, 10614 },
  24612   { 0x33ca, UNICODE_NOT_PRESENT_OFFSET, 10617 },
  24613   { 0x33cb, UNICODE_NOT_PRESENT_OFFSET, 10620 },
  24614   { 0x33cc, UNICODE_NOT_PRESENT_OFFSET, 10623 },
  24615   { 0x33cd, UNICODE_NOT_PRESENT_OFFSET, 10626 },
  24616   { 0x33ce, UNICODE_NOT_PRESENT_OFFSET, 10629 },
  24617   { 0x33cf, UNICODE_NOT_PRESENT_OFFSET, 10632 },
  24618   { 0x33d0, UNICODE_NOT_PRESENT_OFFSET, 10635 },
  24619   { 0x33d1, UNICODE_NOT_PRESENT_OFFSET, 10638 },
  24620   { 0x33d2, UNICODE_NOT_PRESENT_OFFSET, 10641 },
  24621   { 0x33d3, UNICODE_NOT_PRESENT_OFFSET, 10645 },
  24622   { 0x33d4, UNICODE_NOT_PRESENT_OFFSET, 10648 },
  24623   { 0x33d5, UNICODE_NOT_PRESENT_OFFSET, 10651 },
  24624   { 0x33d6, UNICODE_NOT_PRESENT_OFFSET, 10655 },
  24625   { 0x33d7, UNICODE_NOT_PRESENT_OFFSET, 10659 },
  24626   { 0x33d8, UNICODE_NOT_PRESENT_OFFSET, 10662 },
  24627   { 0x33d9, UNICODE_NOT_PRESENT_OFFSET, 10667 },
  24628   { 0x33da, UNICODE_NOT_PRESENT_OFFSET, 10671 },
  24629   { 0x33db, UNICODE_NOT_PRESENT_OFFSET, 10674 },
  24630   { 0x33dc, UNICODE_NOT_PRESENT_OFFSET, 10677 },
  24631   { 0x33dd, UNICODE_NOT_PRESENT_OFFSET, 10680 },
  24632   { 0x33de, UNICODE_NOT_PRESENT_OFFSET, 10683 },
  24633   { 0x33df, UNICODE_NOT_PRESENT_OFFSET, 10689 },
  24634   { 0x33e0, UNICODE_NOT_PRESENT_OFFSET, 10695 },
  24635   { 0x33e1, UNICODE_NOT_PRESENT_OFFSET, 10700 },
  24636   { 0x33e2, UNICODE_NOT_PRESENT_OFFSET, 10705 },
  24637   { 0x33e3, UNICODE_NOT_PRESENT_OFFSET, 10710 },
  24638   { 0x33e4, UNICODE_NOT_PRESENT_OFFSET, 10715 },
  24639   { 0x33e5, UNICODE_NOT_PRESENT_OFFSET, 10720 },
  24640   { 0x33e6, UNICODE_NOT_PRESENT_OFFSET, 10725 },
  24641   { 0x33e7, UNICODE_NOT_PRESENT_OFFSET, 10730 },
  24642   { 0x33e8, UNICODE_NOT_PRESENT_OFFSET, 10735 },
  24643   { 0x33e9, UNICODE_NOT_PRESENT_OFFSET, 10740 },
  24644   { 0x33ea, UNICODE_NOT_PRESENT_OFFSET, 10746 },
  24645   { 0x33eb, UNICODE_NOT_PRESENT_OFFSET, 10752 },
  24646   { 0x33ec, UNICODE_NOT_PRESENT_OFFSET, 10758 },
  24647   { 0x33ed, UNICODE_NOT_PRESENT_OFFSET, 10764 },
  24648   { 0x33ee, UNICODE_NOT_PRESENT_OFFSET, 10770 },
  24649   { 0x33ef, UNICODE_NOT_PRESENT_OFFSET, 10776 },
  24650   { 0x33f0, UNICODE_NOT_PRESENT_OFFSET, 10782 },
  24651   { 0x33f1, UNICODE_NOT_PRESENT_OFFSET, 10788 },
  24652   { 0x33f2, UNICODE_NOT_PRESENT_OFFSET, 10794 },
  24653   { 0x33f3, UNICODE_NOT_PRESENT_OFFSET, 10800 },
  24654   { 0x33f4, UNICODE_NOT_PRESENT_OFFSET, 10806 },
  24655   { 0x33f5, UNICODE_NOT_PRESENT_OFFSET, 10812 },
  24656   { 0x33f6, UNICODE_NOT_PRESENT_OFFSET, 10818 },
  24657   { 0x33f7, UNICODE_NOT_PRESENT_OFFSET, 10824 },
  24658   { 0x33f8, UNICODE_NOT_PRESENT_OFFSET, 10830 },
  24659   { 0x33f9, UNICODE_NOT_PRESENT_OFFSET, 10836 },
  24660   { 0x33fa, UNICODE_NOT_PRESENT_OFFSET, 10842 },
  24661   { 0x33fb, UNICODE_NOT_PRESENT_OFFSET, 10848 },
  24662   { 0x33fc, UNICODE_NOT_PRESENT_OFFSET, 10854 },
  24663   { 0x33fd, UNICODE_NOT_PRESENT_OFFSET, 10860 },
  24664   { 0x33fe, UNICODE_NOT_PRESENT_OFFSET, 10866 },
  24665   { 0x33ff, UNICODE_NOT_PRESENT_OFFSET, 10872 },
  24666   { 0xa69c, UNICODE_NOT_PRESENT_OFFSET, 10876 },
  24667   { 0xa69d, UNICODE_NOT_PRESENT_OFFSET, 10879 },
  24668   { 0xa770, UNICODE_NOT_PRESENT_OFFSET, 10882 },
  24669   { 0xa7f8, UNICODE_NOT_PRESENT_OFFSET, 10886 },
  24670   { 0xa7f9, UNICODE_NOT_PRESENT_OFFSET, 10889 },
  24671   { 0xab5c, UNICODE_NOT_PRESENT_OFFSET, 10892 },
  24672   { 0xab5d, UNICODE_NOT_PRESENT_OFFSET, 10896 },
  24673   { 0xab5e, UNICODE_NOT_PRESENT_OFFSET, 10900 },
  24674   { 0xab5f, UNICODE_NOT_PRESENT_OFFSET, 10903 },
  24675   { 0xf900, 10907, UNICODE_NOT_PRESENT_OFFSET },
  24676   { 0xf901, 10911, UNICODE_NOT_PRESENT_OFFSET },
  24677   { 0xf902, 6813, UNICODE_NOT_PRESENT_OFFSET },
  24678   { 0xf903, 10915, UNICODE_NOT_PRESENT_OFFSET },
  24679   { 0xf904, 10919, UNICODE_NOT_PRESENT_OFFSET },
  24680   { 0xf905, 10923, UNICODE_NOT_PRESENT_OFFSET },
  24681   { 0xf906, 10927, UNICODE_NOT_PRESENT_OFFSET },
  24682   { 0xf907, 7029, UNICODE_NOT_PRESENT_OFFSET },
  24683   { 0xf908, 7029, UNICODE_NOT_PRESENT_OFFSET },
  24684   { 0xf909, 10931, UNICODE_NOT_PRESENT_OFFSET },
  24685   { 0xf90a, 6845, UNICODE_NOT_PRESENT_OFFSET },
  24686   { 0xf90b, 10935, UNICODE_NOT_PRESENT_OFFSET },
  24687   { 0xf90c, 10939, UNICODE_NOT_PRESENT_OFFSET },
  24688   { 0xf90d, 10943, UNICODE_NOT_PRESENT_OFFSET },
  24689   { 0xf90e, 10947, UNICODE_NOT_PRESENT_OFFSET },
  24690   { 0xf90f, 10951, UNICODE_NOT_PRESENT_OFFSET },
  24691   { 0xf910, 10955, UNICODE_NOT_PRESENT_OFFSET },
  24692   { 0xf911, 10959, UNICODE_NOT_PRESENT_OFFSET },
  24693   { 0xf912, 10963, UNICODE_NOT_PRESENT_OFFSET },
  24694   { 0xf913, 10967, UNICODE_NOT_PRESENT_OFFSET },
  24695   { 0xf914, 10971, UNICODE_NOT_PRESENT_OFFSET },
  24696   { 0xf915, 10975, UNICODE_NOT_PRESENT_OFFSET },
  24697   { 0xf916, 10979, UNICODE_NOT_PRESENT_OFFSET },
  24698   { 0xf917, 10983, UNICODE_NOT_PRESENT_OFFSET },
  24699   { 0xf918, 10987, UNICODE_NOT_PRESENT_OFFSET },
  24700   { 0xf919, 10991, UNICODE_NOT_PRESENT_OFFSET },
  24701   { 0xf91a, 10995, UNICODE_NOT_PRESENT_OFFSET },
  24702   { 0xf91b, 10999, UNICODE_NOT_PRESENT_OFFSET },
  24703   { 0xf91c, 11003, UNICODE_NOT_PRESENT_OFFSET },
  24704   { 0xf91d, 11007, UNICODE_NOT_PRESENT_OFFSET },
  24705   { 0xf91e, 11011, UNICODE_NOT_PRESENT_OFFSET },
  24706   { 0xf91f, 11015, UNICODE_NOT_PRESENT_OFFSET },
  24707   { 0xf920, 11019, UNICODE_NOT_PRESENT_OFFSET },
  24708   { 0xf921, 11023, UNICODE_NOT_PRESENT_OFFSET },
  24709   { 0xf922, 11027, UNICODE_NOT_PRESENT_OFFSET },
  24710   { 0xf923, 11031, UNICODE_NOT_PRESENT_OFFSET },
  24711   { 0xf924, 11035, UNICODE_NOT_PRESENT_OFFSET },
  24712   { 0xf925, 11039, UNICODE_NOT_PRESENT_OFFSET },
  24713   { 0xf926, 11043, UNICODE_NOT_PRESENT_OFFSET },
  24714   { 0xf927, 11047, UNICODE_NOT_PRESENT_OFFSET },
  24715   { 0xf928, 11051, UNICODE_NOT_PRESENT_OFFSET },
  24716   { 0xf929, 11055, UNICODE_NOT_PRESENT_OFFSET },
  24717   { 0xf92a, 11059, UNICODE_NOT_PRESENT_OFFSET },
  24718   { 0xf92b, 11063, UNICODE_NOT_PRESENT_OFFSET },
  24719   { 0xf92c, 11067, UNICODE_NOT_PRESENT_OFFSET },
  24720   { 0xf92d, 11071, UNICODE_NOT_PRESENT_OFFSET },
  24721   { 0xf92e, 11075, UNICODE_NOT_PRESENT_OFFSET },
  24722   { 0xf92f, 11079, UNICODE_NOT_PRESENT_OFFSET },
  24723   { 0xf930, 11083, UNICODE_NOT_PRESENT_OFFSET },
  24724   { 0xf931, 11087, UNICODE_NOT_PRESENT_OFFSET },
  24725   { 0xf932, 11091, UNICODE_NOT_PRESENT_OFFSET },
  24726   { 0xf933, 11095, UNICODE_NOT_PRESENT_OFFSET },
  24727   { 0xf934, 6677, UNICODE_NOT_PRESENT_OFFSET },
  24728   { 0xf935, 11099, UNICODE_NOT_PRESENT_OFFSET },
  24729   { 0xf936, 11103, UNICODE_NOT_PRESENT_OFFSET },
  24730   { 0xf937, 11107, UNICODE_NOT_PRESENT_OFFSET },
  24731   { 0xf938, 11111, UNICODE_NOT_PRESENT_OFFSET },
  24732   { 0xf939, 11115, UNICODE_NOT_PRESENT_OFFSET },
  24733   { 0xf93a, 11119, UNICODE_NOT_PRESENT_OFFSET },
  24734   { 0xf93b, 11123, UNICODE_NOT_PRESENT_OFFSET },
  24735   { 0xf93c, 11127, UNICODE_NOT_PRESENT_OFFSET },
  24736   { 0xf93d, 11131, UNICODE_NOT_PRESENT_OFFSET },
  24737   { 0xf93e, 11135, UNICODE_NOT_PRESENT_OFFSET },
  24738   { 0xf93f, 11139, UNICODE_NOT_PRESENT_OFFSET },
  24739   { 0xf940, 6969, UNICODE_NOT_PRESENT_OFFSET },
  24740   { 0xf941, 11143, UNICODE_NOT_PRESENT_OFFSET },
  24741   { 0xf942, 11147, UNICODE_NOT_PRESENT_OFFSET },
  24742   { 0xf943, 11151, UNICODE_NOT_PRESENT_OFFSET },
  24743   { 0xf944, 11155, UNICODE_NOT_PRESENT_OFFSET },
  24744   { 0xf945, 11159, UNICODE_NOT_PRESENT_OFFSET },
  24745   { 0xf946, 11163, UNICODE_NOT_PRESENT_OFFSET },
  24746   { 0xf947, 11167, UNICODE_NOT_PRESENT_OFFSET },
  24747   { 0xf948, 11171, UNICODE_NOT_PRESENT_OFFSET },
  24748   { 0xf949, 11175, UNICODE_NOT_PRESENT_OFFSET },
  24749   { 0xf94a, 11179, UNICODE_NOT_PRESENT_OFFSET },
  24750   { 0xf94b, 11183, UNICODE_NOT_PRESENT_OFFSET },
  24751   { 0xf94c, 11187, UNICODE_NOT_PRESENT_OFFSET },
  24752   { 0xf94d, 11191, UNICODE_NOT_PRESENT_OFFSET },
  24753   { 0xf94e, 11195, UNICODE_NOT_PRESENT_OFFSET },
  24754   { 0xf94f, 11199, UNICODE_NOT_PRESENT_OFFSET },
  24755   { 0xf950, 11203, UNICODE_NOT_PRESENT_OFFSET },
  24756   { 0xf951, 11207, UNICODE_NOT_PRESENT_OFFSET },
  24757   { 0xf952, 11211, UNICODE_NOT_PRESENT_OFFSET },
  24758   { 0xf953, 11215, UNICODE_NOT_PRESENT_OFFSET },
  24759   { 0xf954, 11219, UNICODE_NOT_PRESENT_OFFSET },
  24760   { 0xf955, 11223, UNICODE_NOT_PRESENT_OFFSET },
  24761   { 0xf956, 11227, UNICODE_NOT_PRESENT_OFFSET },
  24762   { 0xf957, 11231, UNICODE_NOT_PRESENT_OFFSET },
  24763   { 0xf958, 11235, UNICODE_NOT_PRESENT_OFFSET },
  24764   { 0xf959, 11239, UNICODE_NOT_PRESENT_OFFSET },
  24765   { 0xf95a, 11243, UNICODE_NOT_PRESENT_OFFSET },
  24766   { 0xf95b, 11247, UNICODE_NOT_PRESENT_OFFSET },
  24767   { 0xf95c, 10971, UNICODE_NOT_PRESENT_OFFSET },
  24768   { 0xf95d, 11251, UNICODE_NOT_PRESENT_OFFSET },
  24769   { 0xf95e, 11255, UNICODE_NOT_PRESENT_OFFSET },
  24770   { 0xf95f, 11259, UNICODE_NOT_PRESENT_OFFSET },
  24771   { 0xf960, 11263, UNICODE_NOT_PRESENT_OFFSET },
  24772   { 0xf961, 11267, UNICODE_NOT_PRESENT_OFFSET },
  24773   { 0xf962, 11271, UNICODE_NOT_PRESENT_OFFSET },
  24774   { 0xf963, 11275, UNICODE_NOT_PRESENT_OFFSET },
  24775   { 0xf964, 11279, UNICODE_NOT_PRESENT_OFFSET },
  24776   { 0xf965, 11283, UNICODE_NOT_PRESENT_OFFSET },
  24777   { 0xf966, 11287, UNICODE_NOT_PRESENT_OFFSET },
  24778   { 0xf967, 11291, UNICODE_NOT_PRESENT_OFFSET },
  24779   { 0xf968, 11295, UNICODE_NOT_PRESENT_OFFSET },
  24780   { 0xf969, 11299, UNICODE_NOT_PRESENT_OFFSET },
  24781   { 0xf96a, 11303, UNICODE_NOT_PRESENT_OFFSET },
  24782   { 0xf96b, 11307, UNICODE_NOT_PRESENT_OFFSET },
  24783   { 0xf96c, 11311, UNICODE_NOT_PRESENT_OFFSET },
  24784   { 0xf96d, 11315, UNICODE_NOT_PRESENT_OFFSET },
  24785   { 0xf96e, 11319, UNICODE_NOT_PRESENT_OFFSET },
  24786   { 0xf96f, 11323, UNICODE_NOT_PRESENT_OFFSET },
  24787   { 0xf970, 11327, UNICODE_NOT_PRESENT_OFFSET },
  24788   { 0xf971, 6821, UNICODE_NOT_PRESENT_OFFSET },
  24789   { 0xf972, 11331, UNICODE_NOT_PRESENT_OFFSET },
  24790   { 0xf973, 11335, UNICODE_NOT_PRESENT_OFFSET },
  24791   { 0xf974, 11339, UNICODE_NOT_PRESENT_OFFSET },
  24792   { 0xf975, 11343, UNICODE_NOT_PRESENT_OFFSET },
  24793   { 0xf976, 11347, UNICODE_NOT_PRESENT_OFFSET },
  24794   { 0xf977, 11351, UNICODE_NOT_PRESENT_OFFSET },
  24795   { 0xf978, 11355, UNICODE_NOT_PRESENT_OFFSET },
  24796   { 0xf979, 11359, UNICODE_NOT_PRESENT_OFFSET },
  24797   { 0xf97a, 11363, UNICODE_NOT_PRESENT_OFFSET },
  24798   { 0xf97b, 11367, UNICODE_NOT_PRESENT_OFFSET },
  24799   { 0xf97c, 11371, UNICODE_NOT_PRESENT_OFFSET },
  24800   { 0xf97d, 11375, UNICODE_NOT_PRESENT_OFFSET },
  24801   { 0xf97e, 11379, UNICODE_NOT_PRESENT_OFFSET },
  24802   { 0xf97f, 11383, UNICODE_NOT_PRESENT_OFFSET },
  24803   { 0xf980, 11387, UNICODE_NOT_PRESENT_OFFSET },
  24804   { 0xf981, 6329, UNICODE_NOT_PRESENT_OFFSET },
  24805   { 0xf982, 11391, UNICODE_NOT_PRESENT_OFFSET },
  24806   { 0xf983, 11395, UNICODE_NOT_PRESENT_OFFSET },
  24807   { 0xf984, 11399, UNICODE_NOT_PRESENT_OFFSET },
  24808   { 0xf985, 11403, UNICODE_NOT_PRESENT_OFFSET },
  24809   { 0xf986, 11407, UNICODE_NOT_PRESENT_OFFSET },
  24810   { 0xf987, 11411, UNICODE_NOT_PRESENT_OFFSET },
  24811   { 0xf988, 11415, UNICODE_NOT_PRESENT_OFFSET },
  24812   { 0xf989, 11419, UNICODE_NOT_PRESENT_OFFSET },
  24813   { 0xf98a, 6253, UNICODE_NOT_PRESENT_OFFSET },
  24814   { 0xf98b, 11423, UNICODE_NOT_PRESENT_OFFSET },
  24815   { 0xf98c, 11427, UNICODE_NOT_PRESENT_OFFSET },
  24816   { 0xf98d, 11431, UNICODE_NOT_PRESENT_OFFSET },
  24817   { 0xf98e, 11435, UNICODE_NOT_PRESENT_OFFSET },
  24818   { 0xf98f, 11439, UNICODE_NOT_PRESENT_OFFSET },
  24819   { 0xf990, 11443, UNICODE_NOT_PRESENT_OFFSET },
  24820   { 0xf991, 11447, UNICODE_NOT_PRESENT_OFFSET },
  24821   { 0xf992, 11451, UNICODE_NOT_PRESENT_OFFSET },
  24822   { 0xf993, 11455, UNICODE_NOT_PRESENT_OFFSET },
  24823   { 0xf994, 11459, UNICODE_NOT_PRESENT_OFFSET },
  24824   { 0xf995, 11463, UNICODE_NOT_PRESENT_OFFSET },
  24825   { 0xf996, 11467, UNICODE_NOT_PRESENT_OFFSET },
  24826   { 0xf997, 11471, UNICODE_NOT_PRESENT_OFFSET },
  24827   { 0xf998, 11475, UNICODE_NOT_PRESENT_OFFSET },
  24828   { 0xf999, 11479, UNICODE_NOT_PRESENT_OFFSET },
  24829   { 0xf99a, 11483, UNICODE_NOT_PRESENT_OFFSET },
  24830   { 0xf99b, 11487, UNICODE_NOT_PRESENT_OFFSET },
  24831   { 0xf99c, 11491, UNICODE_NOT_PRESENT_OFFSET },
  24832   { 0xf99d, 11495, UNICODE_NOT_PRESENT_OFFSET },
  24833   { 0xf99e, 11499, UNICODE_NOT_PRESENT_OFFSET },
  24834   { 0xf99f, 11503, UNICODE_NOT_PRESENT_OFFSET },
  24835   { 0xf9a0, 11507, UNICODE_NOT_PRESENT_OFFSET },
  24836   { 0xf9a1, 11323, UNICODE_NOT_PRESENT_OFFSET },
  24837   { 0xf9a2, 11511, UNICODE_NOT_PRESENT_OFFSET },
  24838   { 0xf9a3, 11515, UNICODE_NOT_PRESENT_OFFSET },
  24839   { 0xf9a4, 11519, UNICODE_NOT_PRESENT_OFFSET },
  24840   { 0xf9a5, 11523, UNICODE_NOT_PRESENT_OFFSET },
  24841   { 0xf9a6, 11527, UNICODE_NOT_PRESENT_OFFSET },
  24842   { 0xf9a7, 11531, UNICODE_NOT_PRESENT_OFFSET },
  24843   { 0xf9a8, 11535, UNICODE_NOT_PRESENT_OFFSET },
  24844   { 0xf9a9, 11539, UNICODE_NOT_PRESENT_OFFSET },
  24845   { 0xf9aa, 11259, UNICODE_NOT_PRESENT_OFFSET },
  24846   { 0xf9ab, 11543, UNICODE_NOT_PRESENT_OFFSET },
  24847   { 0xf9ac, 11547, UNICODE_NOT_PRESENT_OFFSET },
  24848   { 0xf9ad, 11551, UNICODE_NOT_PRESENT_OFFSET },
  24849   { 0xf9ae, 11555, UNICODE_NOT_PRESENT_OFFSET },
  24850   { 0xf9af, 11559, UNICODE_NOT_PRESENT_OFFSET },
  24851   { 0xf9b0, 11563, UNICODE_NOT_PRESENT_OFFSET },
  24852   { 0xf9b1, 11567, UNICODE_NOT_PRESENT_OFFSET },
  24853   { 0xf9b2, 11571, UNICODE_NOT_PRESENT_OFFSET },
  24854   { 0xf9b3, 11575, UNICODE_NOT_PRESENT_OFFSET },
  24855   { 0xf9b4, 11579, UNICODE_NOT_PRESENT_OFFSET },
  24856   { 0xf9b5, 11583, UNICODE_NOT_PRESENT_OFFSET },
  24857   { 0xf9b6, 11587, UNICODE_NOT_PRESENT_OFFSET },
  24858   { 0xf9b7, 11591, UNICODE_NOT_PRESENT_OFFSET },
  24859   { 0xf9b8, 11595, UNICODE_NOT_PRESENT_OFFSET },
  24860   { 0xf9b9, 11599, UNICODE_NOT_PRESENT_OFFSET },
  24861   { 0xf9ba, 11603, UNICODE_NOT_PRESENT_OFFSET },
  24862   { 0xf9bb, 11607, UNICODE_NOT_PRESENT_OFFSET },
  24863   { 0xf9bc, 11611, UNICODE_NOT_PRESENT_OFFSET },
  24864   { 0xf9bd, 11615, UNICODE_NOT_PRESENT_OFFSET },
  24865   { 0xf9be, 11619, UNICODE_NOT_PRESENT_OFFSET },
  24866   { 0xf9bf, 10971, UNICODE_NOT_PRESENT_OFFSET },
  24867   { 0xf9c0, 11623, UNICODE_NOT_PRESENT_OFFSET },
  24868   { 0xf9c1, 11627, UNICODE_NOT_PRESENT_OFFSET },
  24869   { 0xf9c2, 11631, UNICODE_NOT_PRESENT_OFFSET },
  24870   { 0xf9c3, 11635, UNICODE_NOT_PRESENT_OFFSET },
  24871   { 0xf9c4, 7025, UNICODE_NOT_PRESENT_OFFSET },
  24872   { 0xf9c5, 11639, UNICODE_NOT_PRESENT_OFFSET },
  24873   { 0xf9c6, 11643, UNICODE_NOT_PRESENT_OFFSET },
  24874   { 0xf9c7, 11647, UNICODE_NOT_PRESENT_OFFSET },
  24875   { 0xf9c8, 11651, UNICODE_NOT_PRESENT_OFFSET },
  24876   { 0xf9c9, 11655, UNICODE_NOT_PRESENT_OFFSET },
  24877   { 0xf9ca, 11659, UNICODE_NOT_PRESENT_OFFSET },
  24878   { 0xf9cb, 11663, UNICODE_NOT_PRESENT_OFFSET },
  24879   { 0xf9cc, 11667, UNICODE_NOT_PRESENT_OFFSET },
  24880   { 0xf9cd, 11671, UNICODE_NOT_PRESENT_OFFSET },
  24881   { 0xf9ce, 11675, UNICODE_NOT_PRESENT_OFFSET },
  24882   { 0xf9cf, 11679, UNICODE_NOT_PRESENT_OFFSET },
  24883   { 0xf9d0, 11683, UNICODE_NOT_PRESENT_OFFSET },
  24884   { 0xf9d1, 8562, UNICODE_NOT_PRESENT_OFFSET },
  24885   { 0xf9d2, 11687, UNICODE_NOT_PRESENT_OFFSET },
  24886   { 0xf9d3, 11691, UNICODE_NOT_PRESENT_OFFSET },
  24887   { 0xf9d4, 11695, UNICODE_NOT_PRESENT_OFFSET },
  24888   { 0xf9d5, 11699, UNICODE_NOT_PRESENT_OFFSET },
  24889   { 0xf9d6, 11703, UNICODE_NOT_PRESENT_OFFSET },
  24890   { 0xf9d7, 11707, UNICODE_NOT_PRESENT_OFFSET },
  24891   { 0xf9d8, 11711, UNICODE_NOT_PRESENT_OFFSET },
  24892   { 0xf9d9, 11715, UNICODE_NOT_PRESENT_OFFSET },
  24893   { 0xf9da, 11719, UNICODE_NOT_PRESENT_OFFSET },
  24894   { 0xf9db, 11267, UNICODE_NOT_PRESENT_OFFSET },
  24895   { 0xf9dc, 11723, UNICODE_NOT_PRESENT_OFFSET },
  24896   { 0xf9dd, 11727, UNICODE_NOT_PRESENT_OFFSET },
  24897   { 0xf9de, 11731, UNICODE_NOT_PRESENT_OFFSET },
  24898   { 0xf9df, 11735, UNICODE_NOT_PRESENT_OFFSET },
  24899   { 0xf9e0, 11739, UNICODE_NOT_PRESENT_OFFSET },
  24900   { 0xf9e1, 11743, UNICODE_NOT_PRESENT_OFFSET },
  24901   { 0xf9e2, 11747, UNICODE_NOT_PRESENT_OFFSET },
  24902   { 0xf9e3, 11751, UNICODE_NOT_PRESENT_OFFSET },
  24903   { 0xf9e4, 11755, UNICODE_NOT_PRESENT_OFFSET },
  24904   { 0xf9e5, 11759, UNICODE_NOT_PRESENT_OFFSET },
  24905   { 0xf9e6, 11763, UNICODE_NOT_PRESENT_OFFSET },
  24906   { 0xf9e7, 11767, UNICODE_NOT_PRESENT_OFFSET },
  24907   { 0xf9e8, 11771, UNICODE_NOT_PRESENT_OFFSET },
  24908   { 0xf9e9, 6841, UNICODE_NOT_PRESENT_OFFSET },
  24909   { 0xf9ea, 11775, UNICODE_NOT_PRESENT_OFFSET },
  24910   { 0xf9eb, 11779, UNICODE_NOT_PRESENT_OFFSET },
  24911   { 0xf9ec, 11783, UNICODE_NOT_PRESENT_OFFSET },
  24912   { 0xf9ed, 11787, UNICODE_NOT_PRESENT_OFFSET },
  24913   { 0xf9ee, 11791, UNICODE_NOT_PRESENT_OFFSET },
  24914   { 0xf9ef, 11795, UNICODE_NOT_PRESENT_OFFSET },
  24915   { 0xf9f0, 11799, UNICODE_NOT_PRESENT_OFFSET },
  24916   { 0xf9f1, 11803, UNICODE_NOT_PRESENT_OFFSET },
  24917   { 0xf9f2, 11807, UNICODE_NOT_PRESENT_OFFSET },
  24918   { 0xf9f3, 11811, UNICODE_NOT_PRESENT_OFFSET },
  24919   { 0xf9f4, 11815, UNICODE_NOT_PRESENT_OFFSET },
  24920   { 0xf9f5, 11819, UNICODE_NOT_PRESENT_OFFSET },
  24921   { 0xf9f6, 11823, UNICODE_NOT_PRESENT_OFFSET },
  24922   { 0xf9f7, 6645, UNICODE_NOT_PRESENT_OFFSET },
  24923   { 0xf9f8, 11827, UNICODE_NOT_PRESENT_OFFSET },
  24924   { 0xf9f9, 11831, UNICODE_NOT_PRESENT_OFFSET },
  24925   { 0xf9fa, 11835, UNICODE_NOT_PRESENT_OFFSET },
  24926   { 0xf9fb, 11839, UNICODE_NOT_PRESENT_OFFSET },
  24927   { 0xf9fc, 11843, UNICODE_NOT_PRESENT_OFFSET },
  24928   { 0xf9fd, 11847, UNICODE_NOT_PRESENT_OFFSET },
  24929   { 0xf9fe, 11851, UNICODE_NOT_PRESENT_OFFSET },
  24930   { 0xf9ff, 11855, UNICODE_NOT_PRESENT_OFFSET },
  24931   { 0xfa00, 11859, UNICODE_NOT_PRESENT_OFFSET },
  24932   { 0xfa01, 11863, UNICODE_NOT_PRESENT_OFFSET },
  24933   { 0xfa02, 11867, UNICODE_NOT_PRESENT_OFFSET },
  24934   { 0xfa03, 11871, UNICODE_NOT_PRESENT_OFFSET },
  24935   { 0xfa04, 11875, UNICODE_NOT_PRESENT_OFFSET },
  24936   { 0xfa05, 11879, UNICODE_NOT_PRESENT_OFFSET },
  24937   { 0xfa06, 11883, UNICODE_NOT_PRESENT_OFFSET },
  24938   { 0xfa07, 11887, UNICODE_NOT_PRESENT_OFFSET },
  24939   { 0xfa08, 6753, UNICODE_NOT_PRESENT_OFFSET },
  24940   { 0xfa09, 11891, UNICODE_NOT_PRESENT_OFFSET },
  24941   { 0xfa0a, 6765, UNICODE_NOT_PRESENT_OFFSET },
  24942   { 0xfa0b, 11895, UNICODE_NOT_PRESENT_OFFSET },
  24943   { 0xfa0c, 11899, UNICODE_NOT_PRESENT_OFFSET },
  24944   { 0xfa0d, 11903, UNICODE_NOT_PRESENT_OFFSET },
  24945   { 0xfa10, 11907, UNICODE_NOT_PRESENT_OFFSET },
  24946   { 0xfa12, 11911, UNICODE_NOT_PRESENT_OFFSET },
  24947   { 0xfa15, 11915, UNICODE_NOT_PRESENT_OFFSET },
  24948   { 0xfa16, 11919, UNICODE_NOT_PRESENT_OFFSET },
  24949   { 0xfa17, 11923, UNICODE_NOT_PRESENT_OFFSET },
  24950   { 0xfa18, 11927, UNICODE_NOT_PRESENT_OFFSET },
  24951   { 0xfa19, 11931, UNICODE_NOT_PRESENT_OFFSET },
  24952   { 0xfa1a, 11935, UNICODE_NOT_PRESENT_OFFSET },
  24953   { 0xfa1b, 11939, UNICODE_NOT_PRESENT_OFFSET },
  24954   { 0xfa1c, 11943, UNICODE_NOT_PRESENT_OFFSET },
  24955   { 0xfa1d, 11947, UNICODE_NOT_PRESENT_OFFSET },
  24956   { 0xfa1e, 6673, UNICODE_NOT_PRESENT_OFFSET },
  24957   { 0xfa20, 11951, UNICODE_NOT_PRESENT_OFFSET },
  24958   { 0xfa22, 11955, UNICODE_NOT_PRESENT_OFFSET },
  24959   { 0xfa25, 11959, UNICODE_NOT_PRESENT_OFFSET },
  24960   { 0xfa26, 11963, UNICODE_NOT_PRESENT_OFFSET },
  24961   { 0xfa2a, 11967, UNICODE_NOT_PRESENT_OFFSET },
  24962   { 0xfa2b, 11971, UNICODE_NOT_PRESENT_OFFSET },
  24963   { 0xfa2c, 11975, UNICODE_NOT_PRESENT_OFFSET },
  24964   { 0xfa2d, 11979, UNICODE_NOT_PRESENT_OFFSET },
  24965   { 0xfa2e, 11983, UNICODE_NOT_PRESENT_OFFSET },
  24966   { 0xfa2f, 11987, UNICODE_NOT_PRESENT_OFFSET },
  24967   { 0xfa30, 11991, UNICODE_NOT_PRESENT_OFFSET },
  24968   { 0xfa31, 11995, UNICODE_NOT_PRESENT_OFFSET },
  24969   { 0xfa32, 11999, UNICODE_NOT_PRESENT_OFFSET },
  24970   { 0xfa33, 12003, UNICODE_NOT_PRESENT_OFFSET },
  24971   { 0xfa34, 12007, UNICODE_NOT_PRESENT_OFFSET },
  24972   { 0xfa35, 12011, UNICODE_NOT_PRESENT_OFFSET },
  24973   { 0xfa36, 12015, UNICODE_NOT_PRESENT_OFFSET },
  24974   { 0xfa37, 12019, UNICODE_NOT_PRESENT_OFFSET },
  24975   { 0xfa38, 12023, UNICODE_NOT_PRESENT_OFFSET },
  24976   { 0xfa39, 12027, UNICODE_NOT_PRESENT_OFFSET },
  24977   { 0xfa3a, 12031, UNICODE_NOT_PRESENT_OFFSET },
  24978   { 0xfa3b, 12035, UNICODE_NOT_PRESENT_OFFSET },
  24979   { 0xfa3c, 6357, UNICODE_NOT_PRESENT_OFFSET },
  24980   { 0xfa3d, 12039, UNICODE_NOT_PRESENT_OFFSET },
  24981   { 0xfa3e, 12043, UNICODE_NOT_PRESENT_OFFSET },
  24982   { 0xfa3f, 12047, UNICODE_NOT_PRESENT_OFFSET },
  24983   { 0xfa40, 12051, UNICODE_NOT_PRESENT_OFFSET },
  24984   { 0xfa41, 12055, UNICODE_NOT_PRESENT_OFFSET },
  24985   { 0xfa42, 12059, UNICODE_NOT_PRESENT_OFFSET },
  24986   { 0xfa43, 12063, UNICODE_NOT_PRESENT_OFFSET },
  24987   { 0xfa44, 12067, UNICODE_NOT_PRESENT_OFFSET },
  24988   { 0xfa45, 12071, UNICODE_NOT_PRESENT_OFFSET },
  24989   { 0xfa46, 12075, UNICODE_NOT_PRESENT_OFFSET },
  24990   { 0xfa47, 12079, UNICODE_NOT_PRESENT_OFFSET },
  24991   { 0xfa48, 12083, UNICODE_NOT_PRESENT_OFFSET },
  24992   { 0xfa49, 12087, UNICODE_NOT_PRESENT_OFFSET },
  24993   { 0xfa4a, 12091, UNICODE_NOT_PRESENT_OFFSET },
  24994   { 0xfa4b, 12095, UNICODE_NOT_PRESENT_OFFSET },
  24995   { 0xfa4c, 8582, UNICODE_NOT_PRESENT_OFFSET },
  24996   { 0xfa4d, 12099, UNICODE_NOT_PRESENT_OFFSET },
  24997   { 0xfa4e, 12103, UNICODE_NOT_PRESENT_OFFSET },
  24998   { 0xfa4f, 12107, UNICODE_NOT_PRESENT_OFFSET },
  24999   { 0xfa50, 12111, UNICODE_NOT_PRESENT_OFFSET },
  25000   { 0xfa51, 8598, UNICODE_NOT_PRESENT_OFFSET },
  25001   { 0xfa52, 12115, UNICODE_NOT_PRESENT_OFFSET },
  25002   { 0xfa53, 12119, UNICODE_NOT_PRESENT_OFFSET },
  25003   { 0xfa54, 12123, UNICODE_NOT_PRESENT_OFFSET },
  25004   { 0xfa55, 12127, UNICODE_NOT_PRESENT_OFFSET },
  25005   { 0xfa56, 12131, UNICODE_NOT_PRESENT_OFFSET },
  25006   { 0xfa57, 11467, UNICODE_NOT_PRESENT_OFFSET },
  25007   { 0xfa58, 12135, UNICODE_NOT_PRESENT_OFFSET },
  25008   { 0xfa59, 12139, UNICODE_NOT_PRESENT_OFFSET },
  25009   { 0xfa5a, 12143, UNICODE_NOT_PRESENT_OFFSET },
  25010   { 0xfa5b, 12147, UNICODE_NOT_PRESENT_OFFSET },
  25011   { 0xfa5c, 12151, UNICODE_NOT_PRESENT_OFFSET },
  25012   { 0xfa5d, 12155, UNICODE_NOT_PRESENT_OFFSET },
  25013   { 0xfa5e, 12155, UNICODE_NOT_PRESENT_OFFSET },
  25014   { 0xfa5f, 12159, UNICODE_NOT_PRESENT_OFFSET },
  25015   { 0xfa60, 12163, UNICODE_NOT_PRESENT_OFFSET },
  25016   { 0xfa61, 12167, UNICODE_NOT_PRESENT_OFFSET },
  25017   { 0xfa62, 12171, UNICODE_NOT_PRESENT_OFFSET },
  25018   { 0xfa63, 12175, UNICODE_NOT_PRESENT_OFFSET },
  25019   { 0xfa64, 12179, UNICODE_NOT_PRESENT_OFFSET },
  25020   { 0xfa65, 12183, UNICODE_NOT_PRESENT_OFFSET },
  25021   { 0xfa66, 12187, UNICODE_NOT_PRESENT_OFFSET },
  25022   { 0xfa67, 11959, UNICODE_NOT_PRESENT_OFFSET },
  25023   { 0xfa68, 12191, UNICODE_NOT_PRESENT_OFFSET },
  25024   { 0xfa69, 12195, UNICODE_NOT_PRESENT_OFFSET },
  25025   { 0xfa6a, 12199, UNICODE_NOT_PRESENT_OFFSET },
  25026   { 0xfa6b, 12203, UNICODE_NOT_PRESENT_OFFSET },
  25027   { 0xfa6c, 12207, UNICODE_NOT_PRESENT_OFFSET },
  25028   { 0xfa6d, 12212, UNICODE_NOT_PRESENT_OFFSET },
  25029   { 0xfa70, 12216, UNICODE_NOT_PRESENT_OFFSET },
  25030   { 0xfa71, 12220, UNICODE_NOT_PRESENT_OFFSET },
  25031   { 0xfa72, 12224, UNICODE_NOT_PRESENT_OFFSET },
  25032   { 0xfa73, 12228, UNICODE_NOT_PRESENT_OFFSET },
  25033   { 0xfa74, 12232, UNICODE_NOT_PRESENT_OFFSET },
  25034   { 0xfa75, 12236, UNICODE_NOT_PRESENT_OFFSET },
  25035   { 0xfa76, 12240, UNICODE_NOT_PRESENT_OFFSET },
  25036   { 0xfa77, 12244, UNICODE_NOT_PRESENT_OFFSET },
  25037   { 0xfa78, 12015, UNICODE_NOT_PRESENT_OFFSET },
  25038   { 0xfa79, 12248, UNICODE_NOT_PRESENT_OFFSET },
  25039   { 0xfa7a, 12252, UNICODE_NOT_PRESENT_OFFSET },
  25040   { 0xfa7b, 12256, UNICODE_NOT_PRESENT_OFFSET },
  25041   { 0xfa7c, 11907, UNICODE_NOT_PRESENT_OFFSET },
  25042   { 0xfa7d, 12260, UNICODE_NOT_PRESENT_OFFSET },
  25043   { 0xfa7e, 12264, UNICODE_NOT_PRESENT_OFFSET },
  25044   { 0xfa7f, 12268, UNICODE_NOT_PRESENT_OFFSET },
  25045   { 0xfa80, 12272, UNICODE_NOT_PRESENT_OFFSET },
  25046   { 0xfa81, 12276, UNICODE_NOT_PRESENT_OFFSET },
  25047   { 0xfa82, 12280, UNICODE_NOT_PRESENT_OFFSET },
  25048   { 0xfa83, 12284, UNICODE_NOT_PRESENT_OFFSET },
  25049   { 0xfa84, 12288, UNICODE_NOT_PRESENT_OFFSET },
  25050   { 0xfa85, 12292, UNICODE_NOT_PRESENT_OFFSET },
  25051   { 0xfa86, 12296, UNICODE_NOT_PRESENT_OFFSET },
  25052   { 0xfa87, 12300, UNICODE_NOT_PRESENT_OFFSET },
  25053   { 0xfa88, 12304, UNICODE_NOT_PRESENT_OFFSET },
  25054   { 0xfa89, 12047, UNICODE_NOT_PRESENT_OFFSET },
  25055   { 0xfa8a, 12308, UNICODE_NOT_PRESENT_OFFSET },
  25056   { 0xfa8b, 12051, UNICODE_NOT_PRESENT_OFFSET },
  25057   { 0xfa8c, 12312, UNICODE_NOT_PRESENT_OFFSET },
  25058   { 0xfa8d, 12316, UNICODE_NOT_PRESENT_OFFSET },
  25059   { 0xfa8e, 12320, UNICODE_NOT_PRESENT_OFFSET },
  25060   { 0xfa8f, 12324, UNICODE_NOT_PRESENT_OFFSET },
  25061   { 0xfa90, 12328, UNICODE_NOT_PRESENT_OFFSET },
  25062   { 0xfa91, 11911, UNICODE_NOT_PRESENT_OFFSET },
  25063   { 0xfa92, 11055, UNICODE_NOT_PRESENT_OFFSET },
  25064   { 0xfa93, 12332, UNICODE_NOT_PRESENT_OFFSET },
  25065   { 0xfa94, 12336, UNICODE_NOT_PRESENT_OFFSET },
  25066   { 0xfa95, 6489, UNICODE_NOT_PRESENT_OFFSET },
  25067   { 0xfa96, 11327, UNICODE_NOT_PRESENT_OFFSET },
  25068   { 0xfa97, 11659, UNICODE_NOT_PRESENT_OFFSET },
  25069   { 0xfa98, 12340, UNICODE_NOT_PRESENT_OFFSET },
  25070   { 0xfa99, 12344, UNICODE_NOT_PRESENT_OFFSET },
  25071   { 0xfa9a, 12079, UNICODE_NOT_PRESENT_OFFSET },
  25072   { 0xfa9b, 12348, UNICODE_NOT_PRESENT_OFFSET },
  25073   { 0xfa9c, 12083, UNICODE_NOT_PRESENT_OFFSET },
  25074   { 0xfa9d, 12352, UNICODE_NOT_PRESENT_OFFSET },
  25075   { 0xfa9e, 12356, UNICODE_NOT_PRESENT_OFFSET },
  25076   { 0xfa9f, 12360, UNICODE_NOT_PRESENT_OFFSET },
  25077   { 0xfaa0, 11919, UNICODE_NOT_PRESENT_OFFSET },
  25078   { 0xfaa1, 12364, UNICODE_NOT_PRESENT_OFFSET },
  25079   { 0xfaa2, 12368, UNICODE_NOT_PRESENT_OFFSET },
  25080   { 0xfaa3, 12372, UNICODE_NOT_PRESENT_OFFSET },
  25081   { 0xfaa4, 12376, UNICODE_NOT_PRESENT_OFFSET },
  25082   { 0xfaa5, 12380, UNICODE_NOT_PRESENT_OFFSET },
  25083   { 0xfaa6, 11923, UNICODE_NOT_PRESENT_OFFSET },
  25084   { 0xfaa7, 12384, UNICODE_NOT_PRESENT_OFFSET },
  25085   { 0xfaa8, 12388, UNICODE_NOT_PRESENT_OFFSET },
  25086   { 0xfaa9, 12392, UNICODE_NOT_PRESENT_OFFSET },
  25087   { 0xfaaa, 12396, UNICODE_NOT_PRESENT_OFFSET },
  25088   { 0xfaab, 12400, UNICODE_NOT_PRESENT_OFFSET },
  25089   { 0xfaac, 12404, UNICODE_NOT_PRESENT_OFFSET },
  25090   { 0xfaad, 12131, UNICODE_NOT_PRESENT_OFFSET },
  25091   { 0xfaae, 12408, UNICODE_NOT_PRESENT_OFFSET },
  25092   { 0xfaaf, 12412, UNICODE_NOT_PRESENT_OFFSET },
  25093   { 0xfab0, 11467, UNICODE_NOT_PRESENT_OFFSET },
  25094   { 0xfab1, 12416, UNICODE_NOT_PRESENT_OFFSET },
  25095   { 0xfab2, 12147, UNICODE_NOT_PRESENT_OFFSET },
  25096   { 0xfab3, 12420, UNICODE_NOT_PRESENT_OFFSET },
  25097   { 0xfab4, 12424, UNICODE_NOT_PRESENT_OFFSET },
  25098   { 0xfab5, 12428, UNICODE_NOT_PRESENT_OFFSET },
  25099   { 0xfab6, 12432, UNICODE_NOT_PRESENT_OFFSET },
  25100   { 0xfab7, 12436, UNICODE_NOT_PRESENT_OFFSET },
  25101   { 0xfab8, 12167, UNICODE_NOT_PRESENT_OFFSET },
  25102   { 0xfab9, 12440, UNICODE_NOT_PRESENT_OFFSET },
  25103   { 0xfaba, 11955, UNICODE_NOT_PRESENT_OFFSET },
  25104   { 0xfabb, 12444, UNICODE_NOT_PRESENT_OFFSET },
  25105   { 0xfabc, 12171, UNICODE_NOT_PRESENT_OFFSET },
  25106   { 0xfabd, 11251, UNICODE_NOT_PRESENT_OFFSET },
  25107   { 0xfabe, 12448, UNICODE_NOT_PRESENT_OFFSET },
  25108   { 0xfabf, 12175, UNICODE_NOT_PRESENT_OFFSET },
  25109   { 0xfac0, 12452, UNICODE_NOT_PRESENT_OFFSET },
  25110   { 0xfac1, 12183, UNICODE_NOT_PRESENT_OFFSET },
  25111   { 0xfac2, 12456, UNICODE_NOT_PRESENT_OFFSET },
  25112   { 0xfac3, 12460, UNICODE_NOT_PRESENT_OFFSET },
  25113   { 0xfac4, 12464, UNICODE_NOT_PRESENT_OFFSET },
  25114   { 0xfac5, 12468, UNICODE_NOT_PRESENT_OFFSET },
  25115   { 0xfac6, 12472, UNICODE_NOT_PRESENT_OFFSET },
  25116   { 0xfac7, 12191, UNICODE_NOT_PRESENT_OFFSET },
  25117   { 0xfac8, 11943, UNICODE_NOT_PRESENT_OFFSET },
  25118   { 0xfac9, 12476, UNICODE_NOT_PRESENT_OFFSET },
  25119   { 0xfaca, 12195, UNICODE_NOT_PRESENT_OFFSET },
  25120   { 0xfacb, 12480, UNICODE_NOT_PRESENT_OFFSET },
  25121   { 0xfacc, 12199, UNICODE_NOT_PRESENT_OFFSET },
  25122   { 0xfacd, 12484, UNICODE_NOT_PRESENT_OFFSET },
  25123   { 0xface, 7029, UNICODE_NOT_PRESENT_OFFSET },
  25124   { 0xfacf, 12488, UNICODE_NOT_PRESENT_OFFSET },
  25125   { 0xfad0, 12493, UNICODE_NOT_PRESENT_OFFSET },
  25126   { 0xfad1, 12498, UNICODE_NOT_PRESENT_OFFSET },
  25127   { 0xfad2, 12503, UNICODE_NOT_PRESENT_OFFSET },
  25128   { 0xfad3, 12507, UNICODE_NOT_PRESENT_OFFSET },
  25129   { 0xfad4, 12511, UNICODE_NOT_PRESENT_OFFSET },
  25130   { 0xfad5, 12515, UNICODE_NOT_PRESENT_OFFSET },
  25131   { 0xfad6, 12520, UNICODE_NOT_PRESENT_OFFSET },
  25132   { 0xfad7, 12525, UNICODE_NOT_PRESENT_OFFSET },
  25133   { 0xfad8, 12530, UNICODE_NOT_PRESENT_OFFSET },
  25134   { 0xfad9, 12534, UNICODE_NOT_PRESENT_OFFSET },
  25135   { 0xfb00, UNICODE_NOT_PRESENT_OFFSET, 12538 },
  25136   { 0xfb01, UNICODE_NOT_PRESENT_OFFSET, 12541 },
  25137   { 0xfb02, UNICODE_NOT_PRESENT_OFFSET, 12544 },
  25138   { 0xfb03, UNICODE_NOT_PRESENT_OFFSET, 12547 },
  25139   { 0xfb04, UNICODE_NOT_PRESENT_OFFSET, 12551 },
  25140   { 0xfb05, UNICODE_NOT_PRESENT_OFFSET, 12555 },
  25141   { 0xfb06, UNICODE_NOT_PRESENT_OFFSET, 12555 },
  25142   { 0xfb13, UNICODE_NOT_PRESENT_OFFSET, 12558 },
  25143   { 0xfb14, UNICODE_NOT_PRESENT_OFFSET, 12563 },
  25144   { 0xfb15, UNICODE_NOT_PRESENT_OFFSET, 12568 },
  25145   { 0xfb16, UNICODE_NOT_PRESENT_OFFSET, 12573 },
  25146   { 0xfb17, UNICODE_NOT_PRESENT_OFFSET, 12578 },
  25147   { 0xfb1d, 12583, UNICODE_NOT_PRESENT_OFFSET },
  25148   { 0xfb1f, 12588, UNICODE_NOT_PRESENT_OFFSET },
  25149   { 0xfb20, UNICODE_NOT_PRESENT_OFFSET, 12593 },
  25150   { 0xfb21, UNICODE_NOT_PRESENT_OFFSET, 5338 },
  25151   { 0xfb22, UNICODE_NOT_PRESENT_OFFSET, 5347 },
  25152   { 0xfb23, UNICODE_NOT_PRESENT_OFFSET, 12596 },
  25153   { 0xfb24, UNICODE_NOT_PRESENT_OFFSET, 12599 },
  25154   { 0xfb25, UNICODE_NOT_PRESENT_OFFSET, 12602 },
  25155   { 0xfb26, UNICODE_NOT_PRESENT_OFFSET, 12605 },
  25156   { 0xfb27, UNICODE_NOT_PRESENT_OFFSET, 12608 },
  25157   { 0xfb28, UNICODE_NOT_PRESENT_OFFSET, 12611 },
  25158   { 0xfb29, UNICODE_NOT_PRESENT_OFFSET, 5267 },
  25159   { 0xfb2a, 12614, UNICODE_NOT_PRESENT_OFFSET },
  25160   { 0xfb2b, 12619, UNICODE_NOT_PRESENT_OFFSET },
  25161   { 0xfb2c, 12624, UNICODE_NOT_PRESENT_OFFSET },
  25162   { 0xfb2d, 12631, UNICODE_NOT_PRESENT_OFFSET },
  25163   { 0xfb2e, 12638, UNICODE_NOT_PRESENT_OFFSET },
  25164   { 0xfb2f, 12643, UNICODE_NOT_PRESENT_OFFSET },
  25165   { 0xfb30, 12648, UNICODE_NOT_PRESENT_OFFSET },
  25166   { 0xfb31, 12653, UNICODE_NOT_PRESENT_OFFSET },
  25167   { 0xfb32, 12658, UNICODE_NOT_PRESENT_OFFSET },
  25168   { 0xfb33, 12663, UNICODE_NOT_PRESENT_OFFSET },
  25169   { 0xfb34, 12668, UNICODE_NOT_PRESENT_OFFSET },
  25170   { 0xfb35, 12673, UNICODE_NOT_PRESENT_OFFSET },
  25171   { 0xfb36, 12678, UNICODE_NOT_PRESENT_OFFSET },
  25172   { 0xfb38, 12683, UNICODE_NOT_PRESENT_OFFSET },
  25173   { 0xfb39, 12688, UNICODE_NOT_PRESENT_OFFSET },
  25174   { 0xfb3a, 12693, UNICODE_NOT_PRESENT_OFFSET },
  25175   { 0xfb3b, 12698, UNICODE_NOT_PRESENT_OFFSET },
  25176   { 0xfb3c, 12703, UNICODE_NOT_PRESENT_OFFSET },
  25177   { 0xfb3e, 12708, UNICODE_NOT_PRESENT_OFFSET },
  25178   { 0xfb40, 12713, UNICODE_NOT_PRESENT_OFFSET },
  25179   { 0xfb41, 12718, UNICODE_NOT_PRESENT_OFFSET },
  25180   { 0xfb43, 12723, UNICODE_NOT_PRESENT_OFFSET },
  25181   { 0xfb44, 12728, UNICODE_NOT_PRESENT_OFFSET },
  25182   { 0xfb46, 12733, UNICODE_NOT_PRESENT_OFFSET },
  25183   { 0xfb47, 12738, UNICODE_NOT_PRESENT_OFFSET },
  25184   { 0xfb48, 12743, UNICODE_NOT_PRESENT_OFFSET },
  25185   { 0xfb49, 12748, UNICODE_NOT_PRESENT_OFFSET },
  25186   { 0xfb4a, 12753, UNICODE_NOT_PRESENT_OFFSET },
  25187   { 0xfb4b, 12758, UNICODE_NOT_PRESENT_OFFSET },
  25188   { 0xfb4c, 12763, UNICODE_NOT_PRESENT_OFFSET },
  25189   { 0xfb4d, 12768, UNICODE_NOT_PRESENT_OFFSET },
  25190   { 0xfb4e, 12773, UNICODE_NOT_PRESENT_OFFSET },
  25191   { 0xfb4f, UNICODE_NOT_PRESENT_OFFSET, 12778 },
  25192   { 0xfb50, UNICODE_NOT_PRESENT_OFFSET, 12783 },
  25193   { 0xfb51, UNICODE_NOT_PRESENT_OFFSET, 12783 },
  25194   { 0xfb52, UNICODE_NOT_PRESENT_OFFSET, 12786 },
  25195   { 0xfb53, UNICODE_NOT_PRESENT_OFFSET, 12786 },
  25196   { 0xfb54, UNICODE_NOT_PRESENT_OFFSET, 12786 },
  25197   { 0xfb55, UNICODE_NOT_PRESENT_OFFSET, 12786 },
  25198   { 0xfb56, UNICODE_NOT_PRESENT_OFFSET, 12789 },
  25199   { 0xfb57, UNICODE_NOT_PRESENT_OFFSET, 12789 },
  25200   { 0xfb58, UNICODE_NOT_PRESENT_OFFSET, 12789 },
  25201   { 0xfb59, UNICODE_NOT_PRESENT_OFFSET, 12789 },
  25202   { 0xfb5a, UNICODE_NOT_PRESENT_OFFSET, 12792 },
  25203   { 0xfb5b, UNICODE_NOT_PRESENT_OFFSET, 12792 },
  25204   { 0xfb5c, UNICODE_NOT_PRESENT_OFFSET, 12792 },
  25205   { 0xfb5d, UNICODE_NOT_PRESENT_OFFSET, 12792 },
  25206   { 0xfb5e, UNICODE_NOT_PRESENT_OFFSET, 12795 },
  25207   { 0xfb5f, UNICODE_NOT_PRESENT_OFFSET, 12795 },
  25208   { 0xfb60, UNICODE_NOT_PRESENT_OFFSET, 12795 },
  25209   { 0xfb61, UNICODE_NOT_PRESENT_OFFSET, 12795 },
  25210   { 0xfb62, UNICODE_NOT_PRESENT_OFFSET, 12798 },
  25211   { 0xfb63, UNICODE_NOT_PRESENT_OFFSET, 12798 },
  25212   { 0xfb64, UNICODE_NOT_PRESENT_OFFSET, 12798 },
  25213   { 0xfb65, UNICODE_NOT_PRESENT_OFFSET, 12798 },
  25214   { 0xfb66, UNICODE_NOT_PRESENT_OFFSET, 12801 },
  25215   { 0xfb67, UNICODE_NOT_PRESENT_OFFSET, 12801 },
  25216   { 0xfb68, UNICODE_NOT_PRESENT_OFFSET, 12801 },
  25217   { 0xfb69, UNICODE_NOT_PRESENT_OFFSET, 12801 },
  25218   { 0xfb6a, UNICODE_NOT_PRESENT_OFFSET, 12804 },
  25219   { 0xfb6b, UNICODE_NOT_PRESENT_OFFSET, 12804 },
  25220   { 0xfb6c, UNICODE_NOT_PRESENT_OFFSET, 12804 },
  25221   { 0xfb6d, UNICODE_NOT_PRESENT_OFFSET, 12804 },
  25222   { 0xfb6e, UNICODE_NOT_PRESENT_OFFSET, 12807 },
  25223   { 0xfb6f, UNICODE_NOT_PRESENT_OFFSET, 12807 },
  25224   { 0xfb70, UNICODE_NOT_PRESENT_OFFSET, 12807 },
  25225   { 0xfb71, UNICODE_NOT_PRESENT_OFFSET, 12807 },
  25226   { 0xfb72, UNICODE_NOT_PRESENT_OFFSET, 12810 },
  25227   { 0xfb73, UNICODE_NOT_PRESENT_OFFSET, 12810 },
  25228   { 0xfb74, UNICODE_NOT_PRESENT_OFFSET, 12810 },
  25229   { 0xfb75, UNICODE_NOT_PRESENT_OFFSET, 12810 },
  25230   { 0xfb76, UNICODE_NOT_PRESENT_OFFSET, 12813 },
  25231   { 0xfb77, UNICODE_NOT_PRESENT_OFFSET, 12813 },
  25232   { 0xfb78, UNICODE_NOT_PRESENT_OFFSET, 12813 },
  25233   { 0xfb79, UNICODE_NOT_PRESENT_OFFSET, 12813 },
  25234   { 0xfb7a, UNICODE_NOT_PRESENT_OFFSET, 12816 },
  25235   { 0xfb7b, UNICODE_NOT_PRESENT_OFFSET, 12816 },
  25236   { 0xfb7c, UNICODE_NOT_PRESENT_OFFSET, 12816 },
  25237   { 0xfb7d, UNICODE_NOT_PRESENT_OFFSET, 12816 },
  25238   { 0xfb7e, UNICODE_NOT_PRESENT_OFFSET, 12819 },
  25239   { 0xfb7f, UNICODE_NOT_PRESENT_OFFSET, 12819 },
  25240   { 0xfb80, UNICODE_NOT_PRESENT_OFFSET, 12819 },
  25241   { 0xfb81, UNICODE_NOT_PRESENT_OFFSET, 12819 },
  25242   { 0xfb82, UNICODE_NOT_PRESENT_OFFSET, 12822 },
  25243   { 0xfb83, UNICODE_NOT_PRESENT_OFFSET, 12822 },
  25244   { 0xfb84, UNICODE_NOT_PRESENT_OFFSET, 12825 },
  25245   { 0xfb85, UNICODE_NOT_PRESENT_OFFSET, 12825 },
  25246   { 0xfb86, UNICODE_NOT_PRESENT_OFFSET, 12828 },
  25247   { 0xfb87, UNICODE_NOT_PRESENT_OFFSET, 12828 },
  25248   { 0xfb88, UNICODE_NOT_PRESENT_OFFSET, 12831 },
  25249   { 0xfb89, UNICODE_NOT_PRESENT_OFFSET, 12831 },
  25250   { 0xfb8a, UNICODE_NOT_PRESENT_OFFSET, 12834 },
  25251   { 0xfb8b, UNICODE_NOT_PRESENT_OFFSET, 12834 },
  25252   { 0xfb8c, UNICODE_NOT_PRESENT_OFFSET, 12837 },
  25253   { 0xfb8d, UNICODE_NOT_PRESENT_OFFSET, 12837 },
  25254   { 0xfb8e, UNICODE_NOT_PRESENT_OFFSET, 12840 },
  25255   { 0xfb8f, UNICODE_NOT_PRESENT_OFFSET, 12840 },
  25256   { 0xfb90, UNICODE_NOT_PRESENT_OFFSET, 12840 },
  25257   { 0xfb91, UNICODE_NOT_PRESENT_OFFSET, 12840 },
  25258   { 0xfb92, UNICODE_NOT_PRESENT_OFFSET, 12843 },
  25259   { 0xfb93, UNICODE_NOT_PRESENT_OFFSET, 12843 },
  25260   { 0xfb94, UNICODE_NOT_PRESENT_OFFSET, 12843 },
  25261   { 0xfb95, UNICODE_NOT_PRESENT_OFFSET, 12843 },
  25262   { 0xfb96, UNICODE_NOT_PRESENT_OFFSET, 12846 },
  25263   { 0xfb97, UNICODE_NOT_PRESENT_OFFSET, 12846 },
  25264   { 0xfb98, UNICODE_NOT_PRESENT_OFFSET, 12846 },
  25265   { 0xfb99, UNICODE_NOT_PRESENT_OFFSET, 12846 },
  25266   { 0xfb9a, UNICODE_NOT_PRESENT_OFFSET, 12849 },
  25267   { 0xfb9b, UNICODE_NOT_PRESENT_OFFSET, 12849 },
  25268   { 0xfb9c, UNICODE_NOT_PRESENT_OFFSET, 12849 },
  25269   { 0xfb9d, UNICODE_NOT_PRESENT_OFFSET, 12849 },
  25270   { 0xfb9e, UNICODE_NOT_PRESENT_OFFSET, 12852 },
  25271   { 0xfb9f, UNICODE_NOT_PRESENT_OFFSET, 12852 },
  25272   { 0xfba0, UNICODE_NOT_PRESENT_OFFSET, 12855 },
  25273   { 0xfba1, UNICODE_NOT_PRESENT_OFFSET, 12855 },
  25274   { 0xfba2, UNICODE_NOT_PRESENT_OFFSET, 12855 },
  25275   { 0xfba3, UNICODE_NOT_PRESENT_OFFSET, 12855 },
  25276   { 0xfba4, UNICODE_NOT_PRESENT_OFFSET, 1721 },
  25277   { 0xfba5, UNICODE_NOT_PRESENT_OFFSET, 1721 },
  25278   { 0xfba6, UNICODE_NOT_PRESENT_OFFSET, 12858 },
  25279   { 0xfba7, UNICODE_NOT_PRESENT_OFFSET, 12858 },
  25280   { 0xfba8, UNICODE_NOT_PRESENT_OFFSET, 12858 },
  25281   { 0xfba9, UNICODE_NOT_PRESENT_OFFSET, 12858 },
  25282   { 0xfbaa, UNICODE_NOT_PRESENT_OFFSET, 12861 },
  25283   { 0xfbab, UNICODE_NOT_PRESENT_OFFSET, 12861 },
  25284   { 0xfbac, UNICODE_NOT_PRESENT_OFFSET, 12861 },
  25285   { 0xfbad, UNICODE_NOT_PRESENT_OFFSET, 12861 },
  25286   { 0xfbae, UNICODE_NOT_PRESENT_OFFSET, 12864 },
  25287   { 0xfbaf, UNICODE_NOT_PRESENT_OFFSET, 12864 },
  25288   { 0xfbb0, UNICODE_NOT_PRESENT_OFFSET, 1731 },
  25289   { 0xfbb1, UNICODE_NOT_PRESENT_OFFSET, 1731 },
  25290   { 0xfbd3, UNICODE_NOT_PRESENT_OFFSET, 12867 },
  25291   { 0xfbd4, UNICODE_NOT_PRESENT_OFFSET, 12867 },
  25292   { 0xfbd5, UNICODE_NOT_PRESENT_OFFSET, 12867 },
  25293   { 0xfbd6, UNICODE_NOT_PRESENT_OFFSET, 12867 },
  25294   { 0xfbd7, UNICODE_NOT_PRESENT_OFFSET, 12870 },
  25295   { 0xfbd8, UNICODE_NOT_PRESENT_OFFSET, 12870 },
  25296   { 0xfbd9, UNICODE_NOT_PRESENT_OFFSET, 12873 },
  25297   { 0xfbda, UNICODE_NOT_PRESENT_OFFSET, 12873 },
  25298   { 0xfbdb, UNICODE_NOT_PRESENT_OFFSET, 12876 },
  25299   { 0xfbdc, UNICODE_NOT_PRESENT_OFFSET, 12876 },
  25300   { 0xfbdd, UNICODE_NOT_PRESENT_OFFSET, 1711 },
  25301   { 0xfbde, UNICODE_NOT_PRESENT_OFFSET, 12879 },
  25302   { 0xfbdf, UNICODE_NOT_PRESENT_OFFSET, 12879 },
  25303   { 0xfbe0, UNICODE_NOT_PRESENT_OFFSET, 12882 },
  25304   { 0xfbe1, UNICODE_NOT_PRESENT_OFFSET, 12882 },
  25305   { 0xfbe2, UNICODE_NOT_PRESENT_OFFSET, 12885 },
  25306   { 0xfbe3, UNICODE_NOT_PRESENT_OFFSET, 12885 },
  25307   { 0xfbe4, UNICODE_NOT_PRESENT_OFFSET, 12888 },
  25308   { 0xfbe5, UNICODE_NOT_PRESENT_OFFSET, 12888 },
  25309   { 0xfbe6, UNICODE_NOT_PRESENT_OFFSET, 12888 },
  25310   { 0xfbe7, UNICODE_NOT_PRESENT_OFFSET, 12888 },
  25311   { 0xfbe8, UNICODE_NOT_PRESENT_OFFSET, 12891 },
  25312   { 0xfbe9, UNICODE_NOT_PRESENT_OFFSET, 12891 },
  25313   { 0xfbea, UNICODE_NOT_PRESENT_OFFSET, 12894 },
  25314   { 0xfbeb, UNICODE_NOT_PRESENT_OFFSET, 12894 },
  25315   { 0xfbec, UNICODE_NOT_PRESENT_OFFSET, 12901 },
  25316   { 0xfbed, UNICODE_NOT_PRESENT_OFFSET, 12901 },
  25317   { 0xfbee, UNICODE_NOT_PRESENT_OFFSET, 12908 },
  25318   { 0xfbef, UNICODE_NOT_PRESENT_OFFSET, 12908 },
  25319   { 0xfbf0, UNICODE_NOT_PRESENT_OFFSET, 12915 },
  25320   { 0xfbf1, UNICODE_NOT_PRESENT_OFFSET, 12915 },
  25321   { 0xfbf2, UNICODE_NOT_PRESENT_OFFSET, 12922 },
  25322   { 0xfbf3, UNICODE_NOT_PRESENT_OFFSET, 12922 },
  25323   { 0xfbf4, UNICODE_NOT_PRESENT_OFFSET, 12929 },
  25324   { 0xfbf5, UNICODE_NOT_PRESENT_OFFSET, 12929 },
  25325   { 0xfbf6, UNICODE_NOT_PRESENT_OFFSET, 12936 },
  25326   { 0xfbf7, UNICODE_NOT_PRESENT_OFFSET, 12936 },
  25327   { 0xfbf8, UNICODE_NOT_PRESENT_OFFSET, 12936 },
  25328   { 0xfbf9, UNICODE_NOT_PRESENT_OFFSET, 12943 },
  25329   { 0xfbfa, UNICODE_NOT_PRESENT_OFFSET, 12943 },
  25330   { 0xfbfb, UNICODE_NOT_PRESENT_OFFSET, 12943 },
  25331   { 0xfbfc, UNICODE_NOT_PRESENT_OFFSET, 12950 },
  25332   { 0xfbfd, UNICODE_NOT_PRESENT_OFFSET, 12950 },
  25333   { 0xfbfe, UNICODE_NOT_PRESENT_OFFSET, 12950 },
  25334   { 0xfbff, UNICODE_NOT_PRESENT_OFFSET, 12950 },
  25335   { 0xfc00, UNICODE_NOT_PRESENT_OFFSET, 12953 },
  25336   { 0xfc01, UNICODE_NOT_PRESENT_OFFSET, 12960 },
  25337   { 0xfc02, UNICODE_NOT_PRESENT_OFFSET, 12967 },
  25338   { 0xfc03, UNICODE_NOT_PRESENT_OFFSET, 12943 },
  25339   { 0xfc04, UNICODE_NOT_PRESENT_OFFSET, 12974 },
  25340   { 0xfc05, UNICODE_NOT_PRESENT_OFFSET, 12981 },
  25341   { 0xfc06, UNICODE_NOT_PRESENT_OFFSET, 12986 },
  25342   { 0xfc07, UNICODE_NOT_PRESENT_OFFSET, 12991 },
  25343   { 0xfc08, UNICODE_NOT_PRESENT_OFFSET, 12996 },
  25344   { 0xfc09, UNICODE_NOT_PRESENT_OFFSET, 13001 },
  25345   { 0xfc0a, UNICODE_NOT_PRESENT_OFFSET, 13006 },
  25346   { 0xfc0b, UNICODE_NOT_PRESENT_OFFSET, 13011 },
  25347   { 0xfc0c, UNICODE_NOT_PRESENT_OFFSET, 13016 },
  25348   { 0xfc0d, UNICODE_NOT_PRESENT_OFFSET, 13021 },
  25349   { 0xfc0e, UNICODE_NOT_PRESENT_OFFSET, 13026 },
  25350   { 0xfc0f, UNICODE_NOT_PRESENT_OFFSET, 13031 },
  25351   { 0xfc10, UNICODE_NOT_PRESENT_OFFSET, 13036 },
  25352   { 0xfc11, UNICODE_NOT_PRESENT_OFFSET, 13041 },
  25353   { 0xfc12, UNICODE_NOT_PRESENT_OFFSET, 13046 },
  25354   { 0xfc13, UNICODE_NOT_PRESENT_OFFSET, 13051 },
  25355   { 0xfc14, UNICODE_NOT_PRESENT_OFFSET, 13056 },
  25356   { 0xfc15, UNICODE_NOT_PRESENT_OFFSET, 13061 },
  25357   { 0xfc16, UNICODE_NOT_PRESENT_OFFSET, 13066 },
  25358   { 0xfc17, UNICODE_NOT_PRESENT_OFFSET, 13071 },
  25359   { 0xfc18, UNICODE_NOT_PRESENT_OFFSET, 13076 },
  25360   { 0xfc19, UNICODE_NOT_PRESENT_OFFSET, 13081 },
  25361   { 0xfc1a, UNICODE_NOT_PRESENT_OFFSET, 13086 },
  25362   { 0xfc1b, UNICODE_NOT_PRESENT_OFFSET, 13091 },
  25363   { 0xfc1c, UNICODE_NOT_PRESENT_OFFSET, 13096 },
  25364   { 0xfc1d, UNICODE_NOT_PRESENT_OFFSET, 13101 },
  25365   { 0xfc1e, UNICODE_NOT_PRESENT_OFFSET, 13106 },
  25366   { 0xfc1f, UNICODE_NOT_PRESENT_OFFSET, 13111 },
  25367   { 0xfc20, UNICODE_NOT_PRESENT_OFFSET, 13116 },
  25368   { 0xfc21, UNICODE_NOT_PRESENT_OFFSET, 13121 },
  25369   { 0xfc22, UNICODE_NOT_PRESENT_OFFSET, 13126 },
  25370   { 0xfc23, UNICODE_NOT_PRESENT_OFFSET, 13131 },
  25371   { 0xfc24, UNICODE_NOT_PRESENT_OFFSET, 13136 },
  25372   { 0xfc25, UNICODE_NOT_PRESENT_OFFSET, 13141 },
  25373   { 0xfc26, UNICODE_NOT_PRESENT_OFFSET, 13146 },
  25374   { 0xfc27, UNICODE_NOT_PRESENT_OFFSET, 13151 },
  25375   { 0xfc28, UNICODE_NOT_PRESENT_OFFSET, 13156 },
  25376   { 0xfc29, UNICODE_NOT_PRESENT_OFFSET, 13161 },
  25377   { 0xfc2a, UNICODE_NOT_PRESENT_OFFSET, 13166 },
  25378   { 0xfc2b, UNICODE_NOT_PRESENT_OFFSET, 13171 },
  25379   { 0xfc2c, UNICODE_NOT_PRESENT_OFFSET, 13176 },
  25380   { 0xfc2d, UNICODE_NOT_PRESENT_OFFSET, 13181 },
  25381   { 0xfc2e, UNICODE_NOT_PRESENT_OFFSET, 13186 },
  25382   { 0xfc2f, UNICODE_NOT_PRESENT_OFFSET, 13191 },
  25383   { 0xfc30, UNICODE_NOT_PRESENT_OFFSET, 13196 },
  25384   { 0xfc31, UNICODE_NOT_PRESENT_OFFSET, 13201 },
  25385   { 0xfc32, UNICODE_NOT_PRESENT_OFFSET, 13206 },
  25386   { 0xfc33, UNICODE_NOT_PRESENT_OFFSET, 13211 },
  25387   { 0xfc34, UNICODE_NOT_PRESENT_OFFSET, 13216 },
  25388   { 0xfc35, UNICODE_NOT_PRESENT_OFFSET, 13221 },
  25389   { 0xfc36, UNICODE_NOT_PRESENT_OFFSET, 13226 },
  25390   { 0xfc37, UNICODE_NOT_PRESENT_OFFSET, 13231 },
  25391   { 0xfc38, UNICODE_NOT_PRESENT_OFFSET, 13236 },
  25392   { 0xfc39, UNICODE_NOT_PRESENT_OFFSET, 13241 },
  25393   { 0xfc3a, UNICODE_NOT_PRESENT_OFFSET, 13246 },
  25394   { 0xfc3b, UNICODE_NOT_PRESENT_OFFSET, 13251 },
  25395   { 0xfc3c, UNICODE_NOT_PRESENT_OFFSET, 13256 },
  25396   { 0xfc3d, UNICODE_NOT_PRESENT_OFFSET, 13261 },
  25397   { 0xfc3e, UNICODE_NOT_PRESENT_OFFSET, 13266 },
  25398   { 0xfc3f, UNICODE_NOT_PRESENT_OFFSET, 13271 },
  25399   { 0xfc40, UNICODE_NOT_PRESENT_OFFSET, 13276 },
  25400   { 0xfc41, UNICODE_NOT_PRESENT_OFFSET, 13281 },
  25401   { 0xfc42, UNICODE_NOT_PRESENT_OFFSET, 13286 },
  25402   { 0xfc43, UNICODE_NOT_PRESENT_OFFSET, 13291 },
  25403   { 0xfc44, UNICODE_NOT_PRESENT_OFFSET, 13296 },
  25404   { 0xfc45, UNICODE_NOT_PRESENT_OFFSET, 13301 },
  25405   { 0xfc46, UNICODE_NOT_PRESENT_OFFSET, 13306 },
  25406   { 0xfc47, UNICODE_NOT_PRESENT_OFFSET, 13311 },
  25407   { 0xfc48, UNICODE_NOT_PRESENT_OFFSET, 13316 },
  25408   { 0xfc49, UNICODE_NOT_PRESENT_OFFSET, 13321 },
  25409   { 0xfc4a, UNICODE_NOT_PRESENT_OFFSET, 13326 },
  25410   { 0xfc4b, UNICODE_NOT_PRESENT_OFFSET, 13331 },
  25411   { 0xfc4c, UNICODE_NOT_PRESENT_OFFSET, 13336 },
  25412   { 0xfc4d, UNICODE_NOT_PRESENT_OFFSET, 13341 },
  25413   { 0xfc4e, UNICODE_NOT_PRESENT_OFFSET, 13346 },
  25414   { 0xfc4f, UNICODE_NOT_PRESENT_OFFSET, 13351 },
  25415   { 0xfc50, UNICODE_NOT_PRESENT_OFFSET, 13356 },
  25416   { 0xfc51, UNICODE_NOT_PRESENT_OFFSET, 13361 },
  25417   { 0xfc52, UNICODE_NOT_PRESENT_OFFSET, 13366 },
  25418   { 0xfc53, UNICODE_NOT_PRESENT_OFFSET, 13371 },
  25419   { 0xfc54, UNICODE_NOT_PRESENT_OFFSET, 13376 },
  25420   { 0xfc55, UNICODE_NOT_PRESENT_OFFSET, 13381 },
  25421   { 0xfc56, UNICODE_NOT_PRESENT_OFFSET, 13386 },
  25422   { 0xfc57, UNICODE_NOT_PRESENT_OFFSET, 13391 },
  25423   { 0xfc58, UNICODE_NOT_PRESENT_OFFSET, 13396 },
  25424   { 0xfc59, UNICODE_NOT_PRESENT_OFFSET, 13401 },
  25425   { 0xfc5a, UNICODE_NOT_PRESENT_OFFSET, 13406 },
  25426   { 0xfc5b, UNICODE_NOT_PRESENT_OFFSET, 13411 },
  25427   { 0xfc5c, UNICODE_NOT_PRESENT_OFFSET, 13416 },
  25428   { 0xfc5d, UNICODE_NOT_PRESENT_OFFSET, 13421 },
  25429   { 0xfc5e, UNICODE_NOT_PRESENT_OFFSET, 13426 },
  25430   { 0xfc5f, UNICODE_NOT_PRESENT_OFFSET, 13432 },
  25431   { 0xfc60, UNICODE_NOT_PRESENT_OFFSET, 13438 },
  25432   { 0xfc61, UNICODE_NOT_PRESENT_OFFSET, 13444 },
  25433   { 0xfc62, UNICODE_NOT_PRESENT_OFFSET, 13450 },
  25434   { 0xfc63, UNICODE_NOT_PRESENT_OFFSET, 13456 },
  25435   { 0xfc64, UNICODE_NOT_PRESENT_OFFSET, 13462 },
  25436   { 0xfc65, UNICODE_NOT_PRESENT_OFFSET, 13469 },
  25437   { 0xfc66, UNICODE_NOT_PRESENT_OFFSET, 12967 },
  25438   { 0xfc67, UNICODE_NOT_PRESENT_OFFSET, 13476 },
  25439   { 0xfc68, UNICODE_NOT_PRESENT_OFFSET, 12943 },
  25440   { 0xfc69, UNICODE_NOT_PRESENT_OFFSET, 12974 },
  25441   { 0xfc6a, UNICODE_NOT_PRESENT_OFFSET, 13483 },
  25442   { 0xfc6b, UNICODE_NOT_PRESENT_OFFSET, 13488 },
  25443   { 0xfc6c, UNICODE_NOT_PRESENT_OFFSET, 12996 },
  25444   { 0xfc6d, UNICODE_NOT_PRESENT_OFFSET, 13493 },
  25445   { 0xfc6e, UNICODE_NOT_PRESENT_OFFSET, 13001 },
  25446   { 0xfc6f, UNICODE_NOT_PRESENT_OFFSET, 13006 },
  25447   { 0xfc70, UNICODE_NOT_PRESENT_OFFSET, 13498 },
  25448   { 0xfc71, UNICODE_NOT_PRESENT_OFFSET, 13503 },
  25449   { 0xfc72, UNICODE_NOT_PRESENT_OFFSET, 13026 },
  25450   { 0xfc73, UNICODE_NOT_PRESENT_OFFSET, 13508 },
  25451   { 0xfc74, UNICODE_NOT_PRESENT_OFFSET, 13031 },
  25452   { 0xfc75, UNICODE_NOT_PRESENT_OFFSET, 13036 },
  25453   { 0xfc76, UNICODE_NOT_PRESENT_OFFSET, 13513 },
  25454   { 0xfc77, UNICODE_NOT_PRESENT_OFFSET, 13518 },
  25455   { 0xfc78, UNICODE_NOT_PRESENT_OFFSET, 13046 },
  25456   { 0xfc79, UNICODE_NOT_PRESENT_OFFSET, 13523 },
  25457   { 0xfc7a, UNICODE_NOT_PRESENT_OFFSET, 13051 },
  25458   { 0xfc7b, UNICODE_NOT_PRESENT_OFFSET, 13056 },
  25459   { 0xfc7c, UNICODE_NOT_PRESENT_OFFSET, 13201 },
  25460   { 0xfc7d, UNICODE_NOT_PRESENT_OFFSET, 13206 },
  25461   { 0xfc7e, UNICODE_NOT_PRESENT_OFFSET, 13221 },
  25462   { 0xfc7f, UNICODE_NOT_PRESENT_OFFSET, 13226 },
  25463   { 0xfc80, UNICODE_NOT_PRESENT_OFFSET, 13231 },
  25464   { 0xfc81, UNICODE_NOT_PRESENT_OFFSET, 13251 },
  25465   { 0xfc82, UNICODE_NOT_PRESENT_OFFSET, 13256 },
  25466   { 0xfc83, UNICODE_NOT_PRESENT_OFFSET, 13261 },
  25467   { 0xfc84, UNICODE_NOT_PRESENT_OFFSET, 13266 },
  25468   { 0xfc85, UNICODE_NOT_PRESENT_OFFSET, 13286 },
  25469   { 0xfc86, UNICODE_NOT_PRESENT_OFFSET, 13291 },
  25470   { 0xfc87, UNICODE_NOT_PRESENT_OFFSET, 13296 },
  25471   { 0xfc88, UNICODE_NOT_PRESENT_OFFSET, 13528 },
  25472   { 0xfc89, UNICODE_NOT_PRESENT_OFFSET, 13316 },
  25473   { 0xfc8a, UNICODE_NOT_PRESENT_OFFSET, 13533 },
  25474   { 0xfc8b, UNICODE_NOT_PRESENT_OFFSET, 13538 },
  25475   { 0xfc8c, UNICODE_NOT_PRESENT_OFFSET, 13346 },
  25476   { 0xfc8d, UNICODE_NOT_PRESENT_OFFSET, 13543 },
  25477   { 0xfc8e, UNICODE_NOT_PRESENT_OFFSET, 13351 },
  25478   { 0xfc8f, UNICODE_NOT_PRESENT_OFFSET, 13356 },
  25479   { 0xfc90, UNICODE_NOT_PRESENT_OFFSET, 13421 },
  25480   { 0xfc91, UNICODE_NOT_PRESENT_OFFSET, 13548 },
  25481   { 0xfc92, UNICODE_NOT_PRESENT_OFFSET, 13553 },
  25482   { 0xfc93, UNICODE_NOT_PRESENT_OFFSET, 13396 },
  25483   { 0xfc94, UNICODE_NOT_PRESENT_OFFSET, 13558 },
  25484   { 0xfc95, UNICODE_NOT_PRESENT_OFFSET, 13401 },
  25485   { 0xfc96, UNICODE_NOT_PRESENT_OFFSET, 13406 },
  25486   { 0xfc97, UNICODE_NOT_PRESENT_OFFSET, 12953 },
  25487   { 0xfc98, UNICODE_NOT_PRESENT_OFFSET, 12960 },
  25488   { 0xfc99, UNICODE_NOT_PRESENT_OFFSET, 13563 },
  25489   { 0xfc9a, UNICODE_NOT_PRESENT_OFFSET, 12967 },
  25490   { 0xfc9b, UNICODE_NOT_PRESENT_OFFSET, 13570 },
  25491   { 0xfc9c, UNICODE_NOT_PRESENT_OFFSET, 12981 },
  25492   { 0xfc9d, UNICODE_NOT_PRESENT_OFFSET, 12986 },
  25493   { 0xfc9e, UNICODE_NOT_PRESENT_OFFSET, 12991 },
  25494   { 0xfc9f, UNICODE_NOT_PRESENT_OFFSET, 12996 },
  25495   { 0xfca0, UNICODE_NOT_PRESENT_OFFSET, 13577 },
  25496   { 0xfca1, UNICODE_NOT_PRESENT_OFFSET, 13011 },
  25497   { 0xfca2, UNICODE_NOT_PRESENT_OFFSET, 13016 },
  25498   { 0xfca3, UNICODE_NOT_PRESENT_OFFSET, 13021 },
  25499   { 0xfca4, UNICODE_NOT_PRESENT_OFFSET, 13026 },
  25500   { 0xfca5, UNICODE_NOT_PRESENT_OFFSET, 13582 },
  25501   { 0xfca6, UNICODE_NOT_PRESENT_OFFSET, 13046 },
  25502   { 0xfca7, UNICODE_NOT_PRESENT_OFFSET, 13061 },
  25503   { 0xfca8, UNICODE_NOT_PRESENT_OFFSET, 13066 },
  25504   { 0xfca9, UNICODE_NOT_PRESENT_OFFSET, 13071 },
  25505   { 0xfcaa, UNICODE_NOT_PRESENT_OFFSET, 13076 },
  25506   { 0xfcab, UNICODE_NOT_PRESENT_OFFSET, 13081 },
  25507   { 0xfcac, UNICODE_NOT_PRESENT_OFFSET, 13091 },
  25508   { 0xfcad, UNICODE_NOT_PRESENT_OFFSET, 13096 },
  25509   { 0xfcae, UNICODE_NOT_PRESENT_OFFSET, 13101 },
  25510   { 0xfcaf, UNICODE_NOT_PRESENT_OFFSET, 13106 },
  25511   { 0xfcb0, UNICODE_NOT_PRESENT_OFFSET, 13111 },
  25512   { 0xfcb1, UNICODE_NOT_PRESENT_OFFSET, 13116 },
  25513   { 0xfcb2, UNICODE_NOT_PRESENT_OFFSET, 13587 },
  25514   { 0xfcb3, UNICODE_NOT_PRESENT_OFFSET, 13121 },
  25515   { 0xfcb4, UNICODE_NOT_PRESENT_OFFSET, 13126 },
  25516   { 0xfcb5, UNICODE_NOT_PRESENT_OFFSET, 13131 },
  25517   { 0xfcb6, UNICODE_NOT_PRESENT_OFFSET, 13136 },
  25518   { 0xfcb7, UNICODE_NOT_PRESENT_OFFSET, 13141 },
  25519   { 0xfcb8, UNICODE_NOT_PRESENT_OFFSET, 13146 },
  25520   { 0xfcb9, UNICODE_NOT_PRESENT_OFFSET, 13156 },
  25521   { 0xfcba, UNICODE_NOT_PRESENT_OFFSET, 13161 },
  25522   { 0xfcbb, UNICODE_NOT_PRESENT_OFFSET, 13166 },
  25523   { 0xfcbc, UNICODE_NOT_PRESENT_OFFSET, 13171 },
  25524   { 0xfcbd, UNICODE_NOT_PRESENT_OFFSET, 13176 },
  25525   { 0xfcbe, UNICODE_NOT_PRESENT_OFFSET, 13181 },
  25526   { 0xfcbf, UNICODE_NOT_PRESENT_OFFSET, 13186 },
  25527   { 0xfcc0, UNICODE_NOT_PRESENT_OFFSET, 13191 },
  25528   { 0xfcc1, UNICODE_NOT_PRESENT_OFFSET, 13196 },
  25529   { 0xfcc2, UNICODE_NOT_PRESENT_OFFSET, 13211 },
  25530   { 0xfcc3, UNICODE_NOT_PRESENT_OFFSET, 13216 },
  25531   { 0xfcc4, UNICODE_NOT_PRESENT_OFFSET, 13236 },
  25532   { 0xfcc5, UNICODE_NOT_PRESENT_OFFSET, 13241 },
  25533   { 0xfcc6, UNICODE_NOT_PRESENT_OFFSET, 13246 },
  25534   { 0xfcc7, UNICODE_NOT_PRESENT_OFFSET, 13251 },
  25535   { 0xfcc8, UNICODE_NOT_PRESENT_OFFSET, 13256 },
  25536   { 0xfcc9, UNICODE_NOT_PRESENT_OFFSET, 13271 },
  25537   { 0xfcca, UNICODE_NOT_PRESENT_OFFSET, 13276 },
  25538   { 0xfccb, UNICODE_NOT_PRESENT_OFFSET, 13281 },
  25539   { 0xfccc, UNICODE_NOT_PRESENT_OFFSET, 13286 },
  25540   { 0xfccd, UNICODE_NOT_PRESENT_OFFSET, 13592 },
  25541   { 0xfcce, UNICODE_NOT_PRESENT_OFFSET, 13301 },
  25542   { 0xfccf, UNICODE_NOT_PRESENT_OFFSET, 13306 },
  25543   { 0xfcd0, UNICODE_NOT_PRESENT_OFFSET, 13311 },
  25544   { 0xfcd1, UNICODE_NOT_PRESENT_OFFSET, 13316 },
  25545   { 0xfcd2, UNICODE_NOT_PRESENT_OFFSET, 13331 },
  25546   { 0xfcd3, UNICODE_NOT_PRESENT_OFFSET, 13336 },
  25547   { 0xfcd4, UNICODE_NOT_PRESENT_OFFSET, 13341 },
  25548   { 0xfcd5, UNICODE_NOT_PRESENT_OFFSET, 13346 },
  25549   { 0xfcd6, UNICODE_NOT_PRESENT_OFFSET, 13597 },
  25550   { 0xfcd7, UNICODE_NOT_PRESENT_OFFSET, 13361 },
  25551   { 0xfcd8, UNICODE_NOT_PRESENT_OFFSET, 13366 },
  25552   { 0xfcd9, UNICODE_NOT_PRESENT_OFFSET, 13602 },
  25553   { 0xfcda, UNICODE_NOT_PRESENT_OFFSET, 13381 },
  25554   { 0xfcdb, UNICODE_NOT_PRESENT_OFFSET, 13386 },
  25555   { 0xfcdc, UNICODE_NOT_PRESENT_OFFSET, 13391 },
  25556   { 0xfcdd, UNICODE_NOT_PRESENT_OFFSET, 13396 },
  25557   { 0xfcde, UNICODE_NOT_PRESENT_OFFSET, 13607 },
  25558   { 0xfcdf, UNICODE_NOT_PRESENT_OFFSET, 12967 },
  25559   { 0xfce0, UNICODE_NOT_PRESENT_OFFSET, 13570 },
  25560   { 0xfce1, UNICODE_NOT_PRESENT_OFFSET, 12996 },
  25561   { 0xfce2, UNICODE_NOT_PRESENT_OFFSET, 13577 },
  25562   { 0xfce3, UNICODE_NOT_PRESENT_OFFSET, 13026 },
  25563   { 0xfce4, UNICODE_NOT_PRESENT_OFFSET, 13582 },
  25564   { 0xfce5, UNICODE_NOT_PRESENT_OFFSET, 13046 },
  25565   { 0xfce6, UNICODE_NOT_PRESENT_OFFSET, 13612 },
  25566   { 0xfce7, UNICODE_NOT_PRESENT_OFFSET, 13111 },
  25567   { 0xfce8, UNICODE_NOT_PRESENT_OFFSET, 13617 },
  25568   { 0xfce9, UNICODE_NOT_PRESENT_OFFSET, 13622 },
  25569   { 0xfcea, UNICODE_NOT_PRESENT_OFFSET, 13627 },
  25570   { 0xfceb, UNICODE_NOT_PRESENT_OFFSET, 13251 },
  25571   { 0xfcec, UNICODE_NOT_PRESENT_OFFSET, 13256 },
  25572   { 0xfced, UNICODE_NOT_PRESENT_OFFSET, 13286 },
  25573   { 0xfcee, UNICODE_NOT_PRESENT_OFFSET, 13346 },
  25574   { 0xfcef, UNICODE_NOT_PRESENT_OFFSET, 13597 },
  25575   { 0xfcf0, UNICODE_NOT_PRESENT_OFFSET, 13396 },
  25576   { 0xfcf1, UNICODE_NOT_PRESENT_OFFSET, 13607 },
  25577   { 0xfcf2, UNICODE_NOT_PRESENT_OFFSET, 13632 },
  25578   { 0xfcf3, UNICODE_NOT_PRESENT_OFFSET, 13639 },
  25579   { 0xfcf4, UNICODE_NOT_PRESENT_OFFSET, 13646 },
  25580   { 0xfcf5, UNICODE_NOT_PRESENT_OFFSET, 13653 },
  25581   { 0xfcf6, UNICODE_NOT_PRESENT_OFFSET, 13658 },
  25582   { 0xfcf7, UNICODE_NOT_PRESENT_OFFSET, 13663 },
  25583   { 0xfcf8, UNICODE_NOT_PRESENT_OFFSET, 13668 },
  25584   { 0xfcf9, UNICODE_NOT_PRESENT_OFFSET, 13673 },
  25585   { 0xfcfa, UNICODE_NOT_PRESENT_OFFSET, 13678 },
  25586   { 0xfcfb, UNICODE_NOT_PRESENT_OFFSET, 13683 },
  25587   { 0xfcfc, UNICODE_NOT_PRESENT_OFFSET, 13688 },
  25588   { 0xfcfd, UNICODE_NOT_PRESENT_OFFSET, 13693 },
  25589   { 0xfcfe, UNICODE_NOT_PRESENT_OFFSET, 13698 },
  25590   { 0xfcff, UNICODE_NOT_PRESENT_OFFSET, 13703 },
  25591   { 0xfd00, UNICODE_NOT_PRESENT_OFFSET, 13708 },
  25592   { 0xfd01, UNICODE_NOT_PRESENT_OFFSET, 13713 },
  25593   { 0xfd02, UNICODE_NOT_PRESENT_OFFSET, 13718 },
  25594   { 0xfd03, UNICODE_NOT_PRESENT_OFFSET, 13723 },
  25595   { 0xfd04, UNICODE_NOT_PRESENT_OFFSET, 13728 },
  25596   { 0xfd05, UNICODE_NOT_PRESENT_OFFSET, 13733 },
  25597   { 0xfd06, UNICODE_NOT_PRESENT_OFFSET, 13738 },
  25598   { 0xfd07, UNICODE_NOT_PRESENT_OFFSET, 13743 },
  25599   { 0xfd08, UNICODE_NOT_PRESENT_OFFSET, 13748 },
  25600   { 0xfd09, UNICODE_NOT_PRESENT_OFFSET, 13753 },
  25601   { 0xfd0a, UNICODE_NOT_PRESENT_OFFSET, 13758 },
  25602   { 0xfd0b, UNICODE_NOT_PRESENT_OFFSET, 13763 },
  25603   { 0xfd0c, UNICODE_NOT_PRESENT_OFFSET, 13622 },
  25604   { 0xfd0d, UNICODE_NOT_PRESENT_OFFSET, 13768 },
  25605   { 0xfd0e, UNICODE_NOT_PRESENT_OFFSET, 13773 },
  25606   { 0xfd0f, UNICODE_NOT_PRESENT_OFFSET, 13778 },
  25607   { 0xfd10, UNICODE_NOT_PRESENT_OFFSET, 13783 },
  25608   { 0xfd11, UNICODE_NOT_PRESENT_OFFSET, 13653 },
  25609   { 0xfd12, UNICODE_NOT_PRESENT_OFFSET, 13658 },
  25610   { 0xfd13, UNICODE_NOT_PRESENT_OFFSET, 13663 },
  25611   { 0xfd14, UNICODE_NOT_PRESENT_OFFSET, 13668 },
  25612   { 0xfd15, UNICODE_NOT_PRESENT_OFFSET, 13673 },
  25613   { 0xfd16, UNICODE_NOT_PRESENT_OFFSET, 13678 },
  25614   { 0xfd17, UNICODE_NOT_PRESENT_OFFSET, 13683 },
  25615   { 0xfd18, UNICODE_NOT_PRESENT_OFFSET, 13688 },
  25616   { 0xfd19, UNICODE_NOT_PRESENT_OFFSET, 13693 },
  25617   { 0xfd1a, UNICODE_NOT_PRESENT_OFFSET, 13698 },
  25618   { 0xfd1b, UNICODE_NOT_PRESENT_OFFSET, 13703 },
  25619   { 0xfd1c, UNICODE_NOT_PRESENT_OFFSET, 13708 },
  25620   { 0xfd1d, UNICODE_NOT_PRESENT_OFFSET, 13713 },
  25621   { 0xfd1e, UNICODE_NOT_PRESENT_OFFSET, 13718 },
  25622   { 0xfd1f, UNICODE_NOT_PRESENT_OFFSET, 13723 },
  25623   { 0xfd20, UNICODE_NOT_PRESENT_OFFSET, 13728 },
  25624   { 0xfd21, UNICODE_NOT_PRESENT_OFFSET, 13733 },
  25625   { 0xfd22, UNICODE_NOT_PRESENT_OFFSET, 13738 },
  25626   { 0xfd23, UNICODE_NOT_PRESENT_OFFSET, 13743 },
  25627   { 0xfd24, UNICODE_NOT_PRESENT_OFFSET, 13748 },
  25628   { 0xfd25, UNICODE_NOT_PRESENT_OFFSET, 13753 },
  25629   { 0xfd26, UNICODE_NOT_PRESENT_OFFSET, 13758 },
  25630   { 0xfd27, UNICODE_NOT_PRESENT_OFFSET, 13763 },
  25631   { 0xfd28, UNICODE_NOT_PRESENT_OFFSET, 13622 },
  25632   { 0xfd29, UNICODE_NOT_PRESENT_OFFSET, 13768 },
  25633   { 0xfd2a, UNICODE_NOT_PRESENT_OFFSET, 13773 },
  25634   { 0xfd2b, UNICODE_NOT_PRESENT_OFFSET, 13778 },
  25635   { 0xfd2c, UNICODE_NOT_PRESENT_OFFSET, 13783 },
  25636   { 0xfd2d, UNICODE_NOT_PRESENT_OFFSET, 13753 },
  25637   { 0xfd2e, UNICODE_NOT_PRESENT_OFFSET, 13758 },
  25638   { 0xfd2f, UNICODE_NOT_PRESENT_OFFSET, 13763 },
  25639   { 0xfd30, UNICODE_NOT_PRESENT_OFFSET, 13622 },
  25640   { 0xfd31, UNICODE_NOT_PRESENT_OFFSET, 13617 },
  25641   { 0xfd32, UNICODE_NOT_PRESENT_OFFSET, 13627 },
  25642   { 0xfd33, UNICODE_NOT_PRESENT_OFFSET, 13151 },
  25643   { 0xfd34, UNICODE_NOT_PRESENT_OFFSET, 13096 },
  25644   { 0xfd35, UNICODE_NOT_PRESENT_OFFSET, 13101 },
  25645   { 0xfd36, UNICODE_NOT_PRESENT_OFFSET, 13106 },
  25646   { 0xfd37, UNICODE_NOT_PRESENT_OFFSET, 13753 },
  25647   { 0xfd38, UNICODE_NOT_PRESENT_OFFSET, 13758 },
  25648   { 0xfd39, UNICODE_NOT_PRESENT_OFFSET, 13763 },
  25649   { 0xfd3a, UNICODE_NOT_PRESENT_OFFSET, 13151 },
  25650   { 0xfd3b, UNICODE_NOT_PRESENT_OFFSET, 13156 },
  25651   { 0xfd3c, UNICODE_NOT_PRESENT_OFFSET, 13788 },
  25652   { 0xfd3d, UNICODE_NOT_PRESENT_OFFSET, 13788 },
  25653   { 0xfd50, UNICODE_NOT_PRESENT_OFFSET, 13793 },
  25654   { 0xfd51, UNICODE_NOT_PRESENT_OFFSET, 13800 },
  25655   { 0xfd52, UNICODE_NOT_PRESENT_OFFSET, 13800 },
  25656   { 0xfd53, UNICODE_NOT_PRESENT_OFFSET, 13807 },
  25657   { 0xfd54, UNICODE_NOT_PRESENT_OFFSET, 13814 },
  25658   { 0xfd55, UNICODE_NOT_PRESENT_OFFSET, 13821 },
  25659   { 0xfd56, UNICODE_NOT_PRESENT_OFFSET, 13828 },
  25660   { 0xfd57, UNICODE_NOT_PRESENT_OFFSET, 13835 },
  25661   { 0xfd58, UNICODE_NOT_PRESENT_OFFSET, 13842 },
  25662   { 0xfd59, UNICODE_NOT_PRESENT_OFFSET, 13842 },
  25663   { 0xfd5a, UNICODE_NOT_PRESENT_OFFSET, 13849 },
  25664   { 0xfd5b, UNICODE_NOT_PRESENT_OFFSET, 13856 },
  25665   { 0xfd5c, UNICODE_NOT_PRESENT_OFFSET, 13863 },
  25666   { 0xfd5d, UNICODE_NOT_PRESENT_OFFSET, 13870 },
  25667   { 0xfd5e, UNICODE_NOT_PRESENT_OFFSET, 13877 },
  25668   { 0xfd5f, UNICODE_NOT_PRESENT_OFFSET, 13884 },
  25669   { 0xfd60, UNICODE_NOT_PRESENT_OFFSET, 13884 },
  25670   { 0xfd61, UNICODE_NOT_PRESENT_OFFSET, 13891 },
  25671   { 0xfd62, UNICODE_NOT_PRESENT_OFFSET, 13898 },
  25672   { 0xfd63, UNICODE_NOT_PRESENT_OFFSET, 13898 },
  25673   { 0xfd64, UNICODE_NOT_PRESENT_OFFSET, 13905 },
  25674   { 0xfd65, UNICODE_NOT_PRESENT_OFFSET, 13905 },
  25675   { 0xfd66, UNICODE_NOT_PRESENT_OFFSET, 13912 },
  25676   { 0xfd67, UNICODE_NOT_PRESENT_OFFSET, 13919 },
  25677   { 0xfd68, UNICODE_NOT_PRESENT_OFFSET, 13919 },
  25678   { 0xfd69, UNICODE_NOT_PRESENT_OFFSET, 13926 },
  25679   { 0xfd6a, UNICODE_NOT_PRESENT_OFFSET, 13933 },
  25680   { 0xfd6b, UNICODE_NOT_PRESENT_OFFSET, 13933 },
  25681   { 0xfd6c, UNICODE_NOT_PRESENT_OFFSET, 13940 },
  25682   { 0xfd6d, UNICODE_NOT_PRESENT_OFFSET, 13940 },
  25683   { 0xfd6e, UNICODE_NOT_PRESENT_OFFSET, 13947 },
  25684   { 0xfd6f, UNICODE_NOT_PRESENT_OFFSET, 13954 },
  25685   { 0xfd70, UNICODE_NOT_PRESENT_OFFSET, 13954 },
  25686   { 0xfd71, UNICODE_NOT_PRESENT_OFFSET, 13961 },
  25687   { 0xfd72, UNICODE_NOT_PRESENT_OFFSET, 13961 },
  25688   { 0xfd73, UNICODE_NOT_PRESENT_OFFSET, 13968 },
  25689   { 0xfd74, UNICODE_NOT_PRESENT_OFFSET, 13975 },
  25690   { 0xfd75, UNICODE_NOT_PRESENT_OFFSET, 13982 },
  25691   { 0xfd76, UNICODE_NOT_PRESENT_OFFSET, 13989 },
  25692   { 0xfd77, UNICODE_NOT_PRESENT_OFFSET, 13989 },
  25693   { 0xfd78, UNICODE_NOT_PRESENT_OFFSET, 13996 },
  25694   { 0xfd79, UNICODE_NOT_PRESENT_OFFSET, 14003 },
  25695   { 0xfd7a, UNICODE_NOT_PRESENT_OFFSET, 14010 },
  25696   { 0xfd7b, UNICODE_NOT_PRESENT_OFFSET, 14017 },
  25697   { 0xfd7c, UNICODE_NOT_PRESENT_OFFSET, 14024 },
  25698   { 0xfd7d, UNICODE_NOT_PRESENT_OFFSET, 14024 },
  25699   { 0xfd7e, UNICODE_NOT_PRESENT_OFFSET, 14031 },
  25700   { 0xfd7f, UNICODE_NOT_PRESENT_OFFSET, 14038 },
  25701   { 0xfd80, UNICODE_NOT_PRESENT_OFFSET, 14045 },
  25702   { 0xfd81, UNICODE_NOT_PRESENT_OFFSET, 14052 },
  25703   { 0xfd82, UNICODE_NOT_PRESENT_OFFSET, 14059 },
  25704   { 0xfd83, UNICODE_NOT_PRESENT_OFFSET, 14066 },
  25705   { 0xfd84, UNICODE_NOT_PRESENT_OFFSET, 14066 },
  25706   { 0xfd85, UNICODE_NOT_PRESENT_OFFSET, 14073 },
  25707   { 0xfd86, UNICODE_NOT_PRESENT_OFFSET, 14073 },
  25708   { 0xfd87, UNICODE_NOT_PRESENT_OFFSET, 14080 },
  25709   { 0xfd88, UNICODE_NOT_PRESENT_OFFSET, 14080 },
  25710   { 0xfd89, UNICODE_NOT_PRESENT_OFFSET, 14087 },
  25711   { 0xfd8a, UNICODE_NOT_PRESENT_OFFSET, 14094 },
  25712   { 0xfd8b, UNICODE_NOT_PRESENT_OFFSET, 14101 },
  25713   { 0xfd8c, UNICODE_NOT_PRESENT_OFFSET, 14108 },
  25714   { 0xfd8d, UNICODE_NOT_PRESENT_OFFSET, 14115 },
  25715   { 0xfd8e, UNICODE_NOT_PRESENT_OFFSET, 14122 },
  25716   { 0xfd8f, UNICODE_NOT_PRESENT_OFFSET, 14129 },
  25717   { 0xfd92, UNICODE_NOT_PRESENT_OFFSET, 14136 },
  25718   { 0xfd93, UNICODE_NOT_PRESENT_OFFSET, 14143 },
  25719   { 0xfd94, UNICODE_NOT_PRESENT_OFFSET, 14150 },
  25720   { 0xfd95, UNICODE_NOT_PRESENT_OFFSET, 14157 },
  25721   { 0xfd96, UNICODE_NOT_PRESENT_OFFSET, 14164 },
  25722   { 0xfd97, UNICODE_NOT_PRESENT_OFFSET, 14171 },
  25723   { 0xfd98, UNICODE_NOT_PRESENT_OFFSET, 14171 },
  25724   { 0xfd99, UNICODE_NOT_PRESENT_OFFSET, 14178 },
  25725   { 0xfd9a, UNICODE_NOT_PRESENT_OFFSET, 14185 },
  25726   { 0xfd9b, UNICODE_NOT_PRESENT_OFFSET, 14192 },
  25727   { 0xfd9c, UNICODE_NOT_PRESENT_OFFSET, 14199 },
  25728   { 0xfd9d, UNICODE_NOT_PRESENT_OFFSET, 14199 },
  25729   { 0xfd9e, UNICODE_NOT_PRESENT_OFFSET, 14206 },
  25730   { 0xfd9f, UNICODE_NOT_PRESENT_OFFSET, 14213 },
  25731   { 0xfda0, UNICODE_NOT_PRESENT_OFFSET, 14220 },
  25732   { 0xfda1, UNICODE_NOT_PRESENT_OFFSET, 14227 },
  25733   { 0xfda2, UNICODE_NOT_PRESENT_OFFSET, 14234 },
  25734   { 0xfda3, UNICODE_NOT_PRESENT_OFFSET, 14241 },
  25735   { 0xfda4, UNICODE_NOT_PRESENT_OFFSET, 14248 },
  25736   { 0xfda5, UNICODE_NOT_PRESENT_OFFSET, 14255 },
  25737   { 0xfda6, UNICODE_NOT_PRESENT_OFFSET, 14262 },
  25738   { 0xfda7, UNICODE_NOT_PRESENT_OFFSET, 14269 },
  25739   { 0xfda8, UNICODE_NOT_PRESENT_OFFSET, 14276 },
  25740   { 0xfda9, UNICODE_NOT_PRESENT_OFFSET, 14283 },
  25741   { 0xfdaa, UNICODE_NOT_PRESENT_OFFSET, 14290 },
  25742   { 0xfdab, UNICODE_NOT_PRESENT_OFFSET, 14297 },
  25743   { 0xfdac, UNICODE_NOT_PRESENT_OFFSET, 14304 },
  25744   { 0xfdad, UNICODE_NOT_PRESENT_OFFSET, 14311 },
  25745   { 0xfdae, UNICODE_NOT_PRESENT_OFFSET, 14318 },
  25746   { 0xfdaf, UNICODE_NOT_PRESENT_OFFSET, 14325 },
  25747   { 0xfdb0, UNICODE_NOT_PRESENT_OFFSET, 14332 },
  25748   { 0xfdb1, UNICODE_NOT_PRESENT_OFFSET, 14339 },
  25749   { 0xfdb2, UNICODE_NOT_PRESENT_OFFSET, 14346 },
  25750   { 0xfdb3, UNICODE_NOT_PRESENT_OFFSET, 14353 },
  25751   { 0xfdb4, UNICODE_NOT_PRESENT_OFFSET, 14031 },
  25752   { 0xfdb5, UNICODE_NOT_PRESENT_OFFSET, 14045 },
  25753   { 0xfdb6, UNICODE_NOT_PRESENT_OFFSET, 14360 },
  25754   { 0xfdb7, UNICODE_NOT_PRESENT_OFFSET, 14367 },
  25755   { 0xfdb8, UNICODE_NOT_PRESENT_OFFSET, 14374 },
  25756   { 0xfdb9, UNICODE_NOT_PRESENT_OFFSET, 14381 },
  25757   { 0xfdba, UNICODE_NOT_PRESENT_OFFSET, 14388 },
  25758   { 0xfdbb, UNICODE_NOT_PRESENT_OFFSET, 14395 },
  25759   { 0xfdbc, UNICODE_NOT_PRESENT_OFFSET, 14388 },
  25760   { 0xfdbd, UNICODE_NOT_PRESENT_OFFSET, 14374 },
  25761   { 0xfdbe, UNICODE_NOT_PRESENT_OFFSET, 14402 },
  25762   { 0xfdbf, UNICODE_NOT_PRESENT_OFFSET, 14409 },
  25763   { 0xfdc0, UNICODE_NOT_PRESENT_OFFSET, 14416 },
  25764   { 0xfdc1, UNICODE_NOT_PRESENT_OFFSET, 14423 },
  25765   { 0xfdc2, UNICODE_NOT_PRESENT_OFFSET, 14430 },
  25766   { 0xfdc3, UNICODE_NOT_PRESENT_OFFSET, 14395 },
  25767   { 0xfdc4, UNICODE_NOT_PRESENT_OFFSET, 13982 },
  25768   { 0xfdc5, UNICODE_NOT_PRESENT_OFFSET, 13912 },
  25769   { 0xfdc6, UNICODE_NOT_PRESENT_OFFSET, 14437 },
  25770   { 0xfdc7, UNICODE_NOT_PRESENT_OFFSET, 14444 },
  25771   { 0xfdf0, UNICODE_NOT_PRESENT_OFFSET, 14451 },
  25772   { 0xfdf1, UNICODE_NOT_PRESENT_OFFSET, 14458 },
  25773   { 0xfdf2, UNICODE_NOT_PRESENT_OFFSET, 14465 },
  25774   { 0xfdf3, UNICODE_NOT_PRESENT_OFFSET, 14474 },
  25775   { 0xfdf4, UNICODE_NOT_PRESENT_OFFSET, 14483 },
  25776   { 0xfdf5, UNICODE_NOT_PRESENT_OFFSET, 14492 },
  25777   { 0xfdf6, UNICODE_NOT_PRESENT_OFFSET, 14501 },
  25778   { 0xfdf7, UNICODE_NOT_PRESENT_OFFSET, 14510 },
  25779   { 0xfdf8, UNICODE_NOT_PRESENT_OFFSET, 14519 },
  25780   { 0xfdf9, UNICODE_NOT_PRESENT_OFFSET, 14528 },
  25781   { 0xfdfa, UNICODE_NOT_PRESENT_OFFSET, 14535 },
  25782   { 0xfdfb, UNICODE_NOT_PRESENT_OFFSET, 14569 },
  25783   { 0xfdfc, UNICODE_NOT_PRESENT_OFFSET, 14585 },
  25784   { 0xfe10, UNICODE_NOT_PRESENT_OFFSET, 14594 },
  25785   { 0xfe11, UNICODE_NOT_PRESENT_OFFSET, 14596 },
  25786   { 0xfe12, UNICODE_NOT_PRESENT_OFFSET, 14600 },
  25787   { 0xfe13, UNICODE_NOT_PRESENT_OFFSET, 14604 },
  25788   { 0xfe14, UNICODE_NOT_PRESENT_OFFSET, 1248 },
  25789   { 0xfe15, UNICODE_NOT_PRESENT_OFFSET, 14606 },
  25790   { 0xfe16, UNICODE_NOT_PRESENT_OFFSET, 14608 },
  25791   { 0xfe17, UNICODE_NOT_PRESENT_OFFSET, 14610 },
  25792   { 0xfe18, UNICODE_NOT_PRESENT_OFFSET, 14614 },
  25793   { 0xfe19, UNICODE_NOT_PRESENT_OFFSET, 5186 },
  25794   { 0xfe30, UNICODE_NOT_PRESENT_OFFSET, 5183 },
  25795   { 0xfe31, UNICODE_NOT_PRESENT_OFFSET, 14618 },
  25796   { 0xfe32, UNICODE_NOT_PRESENT_OFFSET, 14622 },
  25797   { 0xfe33, UNICODE_NOT_PRESENT_OFFSET, 14626 },
  25798   { 0xfe34, UNICODE_NOT_PRESENT_OFFSET, 14626 },
  25799   { 0xfe35, UNICODE_NOT_PRESENT_OFFSET, 5275 },
  25800   { 0xfe36, UNICODE_NOT_PRESENT_OFFSET, 5277 },
  25801   { 0xfe37, UNICODE_NOT_PRESENT_OFFSET, 14628 },
  25802   { 0xfe38, UNICODE_NOT_PRESENT_OFFSET, 14630 },
  25803   { 0xfe39, UNICODE_NOT_PRESENT_OFFSET, 14632 },
  25804   { 0xfe3a, UNICODE_NOT_PRESENT_OFFSET, 14636 },
  25805   { 0xfe3b, UNICODE_NOT_PRESENT_OFFSET, 14640 },
  25806   { 0xfe3c, UNICODE_NOT_PRESENT_OFFSET, 14644 },
  25807   { 0xfe3d, UNICODE_NOT_PRESENT_OFFSET, 14648 },
  25808   { 0xfe3e, UNICODE_NOT_PRESENT_OFFSET, 14652 },
  25809   { 0xfe3f, UNICODE_NOT_PRESENT_OFFSET, 5826 },
  25810   { 0xfe40, UNICODE_NOT_PRESENT_OFFSET, 5830 },
  25811   { 0xfe41, UNICODE_NOT_PRESENT_OFFSET, 14656 },
  25812   { 0xfe42, UNICODE_NOT_PRESENT_OFFSET, 14660 },
  25813   { 0xfe43, UNICODE_NOT_PRESENT_OFFSET, 14664 },
  25814   { 0xfe44, UNICODE_NOT_PRESENT_OFFSET, 14668 },
  25815   { 0xfe47, UNICODE_NOT_PRESENT_OFFSET, 14672 },
  25816   { 0xfe48, UNICODE_NOT_PRESENT_OFFSET, 14674 },
  25817   { 0xfe49, UNICODE_NOT_PRESENT_OFFSET, 5227 },
  25818   { 0xfe4a, UNICODE_NOT_PRESENT_OFFSET, 5227 },
  25819   { 0xfe4b, UNICODE_NOT_PRESENT_OFFSET, 5227 },
  25820   { 0xfe4c, UNICODE_NOT_PRESENT_OFFSET, 5227 },
  25821   { 0xfe4d, UNICODE_NOT_PRESENT_OFFSET, 14626 },
  25822   { 0xfe4e, UNICODE_NOT_PRESENT_OFFSET, 14626 },
  25823   { 0xfe4f, UNICODE_NOT_PRESENT_OFFSET, 14626 },
  25824   { 0xfe50, UNICODE_NOT_PRESENT_OFFSET, 14594 },
  25825   { 0xfe51, UNICODE_NOT_PRESENT_OFFSET, 14596 },
  25826   { 0xfe52, UNICODE_NOT_PRESENT_OFFSET, 5181 },
  25827   { 0xfe54, UNICODE_NOT_PRESENT_OFFSET, 1248 },
  25828   { 0xfe55, UNICODE_NOT_PRESENT_OFFSET, 14604 },
  25829   { 0xfe56, UNICODE_NOT_PRESENT_OFFSET, 14608 },
  25830   { 0xfe57, UNICODE_NOT_PRESENT_OFFSET, 14606 },
  25831   { 0xfe58, UNICODE_NOT_PRESENT_OFFSET, 14618 },
  25832   { 0xfe59, UNICODE_NOT_PRESENT_OFFSET, 5275 },
  25833   { 0xfe5a, UNICODE_NOT_PRESENT_OFFSET, 5277 },
  25834   { 0xfe5b, UNICODE_NOT_PRESENT_OFFSET, 14628 },
  25835   { 0xfe5c, UNICODE_NOT_PRESENT_OFFSET, 14630 },
  25836   { 0xfe5d, UNICODE_NOT_PRESENT_OFFSET, 14632 },
  25837   { 0xfe5e, UNICODE_NOT_PRESENT_OFFSET, 14636 },
  25838   { 0xfe5f, UNICODE_NOT_PRESENT_OFFSET, 14676 },
  25839   { 0xfe60, UNICODE_NOT_PRESENT_OFFSET, 14678 },
  25840   { 0xfe61, UNICODE_NOT_PRESENT_OFFSET, 14680 },
  25841   { 0xfe62, UNICODE_NOT_PRESENT_OFFSET, 5267 },
  25842   { 0xfe63, UNICODE_NOT_PRESENT_OFFSET, 14682 },
  25843   { 0xfe64, UNICODE_NOT_PRESENT_OFFSET, 14684 },
  25844   { 0xfe65, UNICODE_NOT_PRESENT_OFFSET, 14686 },
  25845   { 0xfe66, UNICODE_NOT_PRESENT_OFFSET, 5273 },
  25846   { 0xfe68, UNICODE_NOT_PRESENT_OFFSET, 14688 },
  25847   { 0xfe69, UNICODE_NOT_PRESENT_OFFSET, 14690 },
  25848   { 0xfe6a, UNICODE_NOT_PRESENT_OFFSET, 14692 },
  25849   { 0xfe6b, UNICODE_NOT_PRESENT_OFFSET, 14694 },
  25850   { 0xfe70, UNICODE_NOT_PRESENT_OFFSET, 14696 },
  25851   { 0xfe71, UNICODE_NOT_PRESENT_OFFSET, 14700 },
  25852   { 0xfe72, UNICODE_NOT_PRESENT_OFFSET, 14705 },
  25853   { 0xfe74, UNICODE_NOT_PRESENT_OFFSET, 14709 },
  25854   { 0xfe76, UNICODE_NOT_PRESENT_OFFSET, 14713 },
  25855   { 0xfe77, UNICODE_NOT_PRESENT_OFFSET, 14717 },
  25856   { 0xfe78, UNICODE_NOT_PRESENT_OFFSET, 14722 },
  25857   { 0xfe79, UNICODE_NOT_PRESENT_OFFSET, 14726 },
  25858   { 0xfe7a, UNICODE_NOT_PRESENT_OFFSET, 14731 },
  25859   { 0xfe7b, UNICODE_NOT_PRESENT_OFFSET, 14735 },
  25860   { 0xfe7c, UNICODE_NOT_PRESENT_OFFSET, 14740 },
  25861   { 0xfe7d, UNICODE_NOT_PRESENT_OFFSET, 14744 },
  25862   { 0xfe7e, UNICODE_NOT_PRESENT_OFFSET, 14749 },
  25863   { 0xfe7f, UNICODE_NOT_PRESENT_OFFSET, 14753 },
  25864   { 0xfe80, UNICODE_NOT_PRESENT_OFFSET, 14758 },
  25865   { 0xfe81, UNICODE_NOT_PRESENT_OFFSET, 1676 },
  25866   { 0xfe82, UNICODE_NOT_PRESENT_OFFSET, 1676 },
  25867   { 0xfe83, UNICODE_NOT_PRESENT_OFFSET, 1681 },
  25868   { 0xfe84, UNICODE_NOT_PRESENT_OFFSET, 1681 },
  25869   { 0xfe85, UNICODE_NOT_PRESENT_OFFSET, 1686 },
  25870   { 0xfe86, UNICODE_NOT_PRESENT_OFFSET, 1686 },
  25871   { 0xfe87, UNICODE_NOT_PRESENT_OFFSET, 1691 },
  25872   { 0xfe88, UNICODE_NOT_PRESENT_OFFSET, 1691 },
  25873   { 0xfe89, UNICODE_NOT_PRESENT_OFFSET, 1696 },
  25874   { 0xfe8a, UNICODE_NOT_PRESENT_OFFSET, 1696 },
  25875   { 0xfe8b, UNICODE_NOT_PRESENT_OFFSET, 1696 },
  25876   { 0xfe8c, UNICODE_NOT_PRESENT_OFFSET, 1696 },
  25877   { 0xfe8d, UNICODE_NOT_PRESENT_OFFSET, 14761 },
  25878   { 0xfe8e, UNICODE_NOT_PRESENT_OFFSET, 14761 },
  25879   { 0xfe8f, UNICODE_NOT_PRESENT_OFFSET, 14764 },
  25880   { 0xfe90, UNICODE_NOT_PRESENT_OFFSET, 14764 },
  25881   { 0xfe91, UNICODE_NOT_PRESENT_OFFSET, 14764 },
  25882   { 0xfe92, UNICODE_NOT_PRESENT_OFFSET, 14764 },
  25883   { 0xfe93, UNICODE_NOT_PRESENT_OFFSET, 14767 },
  25884   { 0xfe94, UNICODE_NOT_PRESENT_OFFSET, 14767 },
  25885   { 0xfe95, UNICODE_NOT_PRESENT_OFFSET, 14770 },
  25886   { 0xfe96, UNICODE_NOT_PRESENT_OFFSET, 14770 },
  25887   { 0xfe97, UNICODE_NOT_PRESENT_OFFSET, 14770 },
  25888   { 0xfe98, UNICODE_NOT_PRESENT_OFFSET, 14770 },
  25889   { 0xfe99, UNICODE_NOT_PRESENT_OFFSET, 14773 },
  25890   { 0xfe9a, UNICODE_NOT_PRESENT_OFFSET, 14773 },
  25891   { 0xfe9b, UNICODE_NOT_PRESENT_OFFSET, 14773 },
  25892   { 0xfe9c, UNICODE_NOT_PRESENT_OFFSET, 14773 },
  25893   { 0xfe9d, UNICODE_NOT_PRESENT_OFFSET, 14776 },
  25894   { 0xfe9e, UNICODE_NOT_PRESENT_OFFSET, 14776 },
  25895   { 0xfe9f, UNICODE_NOT_PRESENT_OFFSET, 14776 },
  25896   { 0xfea0, UNICODE_NOT_PRESENT_OFFSET, 14776 },
  25897   { 0xfea1, UNICODE_NOT_PRESENT_OFFSET, 14779 },
  25898   { 0xfea2, UNICODE_NOT_PRESENT_OFFSET, 14779 },
  25899   { 0xfea3, UNICODE_NOT_PRESENT_OFFSET, 14779 },
  25900   { 0xfea4, UNICODE_NOT_PRESENT_OFFSET, 14779 },
  25901   { 0xfea5, UNICODE_NOT_PRESENT_OFFSET, 14782 },
  25902   { 0xfea6, UNICODE_NOT_PRESENT_OFFSET, 14782 },
  25903   { 0xfea7, UNICODE_NOT_PRESENT_OFFSET, 14782 },
  25904   { 0xfea8, UNICODE_NOT_PRESENT_OFFSET, 14782 },
  25905   { 0xfea9, UNICODE_NOT_PRESENT_OFFSET, 14785 },
  25906   { 0xfeaa, UNICODE_NOT_PRESENT_OFFSET, 14785 },
  25907   { 0xfeab, UNICODE_NOT_PRESENT_OFFSET, 14788 },
  25908   { 0xfeac, UNICODE_NOT_PRESENT_OFFSET, 14788 },
  25909   { 0xfead, UNICODE_NOT_PRESENT_OFFSET, 14791 },
  25910   { 0xfeae, UNICODE_NOT_PRESENT_OFFSET, 14791 },
  25911   { 0xfeaf, UNICODE_NOT_PRESENT_OFFSET, 14794 },
  25912   { 0xfeb0, UNICODE_NOT_PRESENT_OFFSET, 14794 },
  25913   { 0xfeb1, UNICODE_NOT_PRESENT_OFFSET, 14797 },
  25914   { 0xfeb2, UNICODE_NOT_PRESENT_OFFSET, 14797 },
  25915   { 0xfeb3, UNICODE_NOT_PRESENT_OFFSET, 14797 },
  25916   { 0xfeb4, UNICODE_NOT_PRESENT_OFFSET, 14797 },
  25917   { 0xfeb5, UNICODE_NOT_PRESENT_OFFSET, 14800 },
  25918   { 0xfeb6, UNICODE_NOT_PRESENT_OFFSET, 14800 },
  25919   { 0xfeb7, UNICODE_NOT_PRESENT_OFFSET, 14800 },
  25920   { 0xfeb8, UNICODE_NOT_PRESENT_OFFSET, 14800 },
  25921   { 0xfeb9, UNICODE_NOT_PRESENT_OFFSET, 14803 },
  25922   { 0xfeba, UNICODE_NOT_PRESENT_OFFSET, 14803 },
  25923   { 0xfebb, UNICODE_NOT_PRESENT_OFFSET, 14803 },
  25924   { 0xfebc, UNICODE_NOT_PRESENT_OFFSET, 14803 },
  25925   { 0xfebd, UNICODE_NOT_PRESENT_OFFSET, 14806 },
  25926   { 0xfebe, UNICODE_NOT_PRESENT_OFFSET, 14806 },
  25927   { 0xfebf, UNICODE_NOT_PRESENT_OFFSET, 14806 },
  25928   { 0xfec0, UNICODE_NOT_PRESENT_OFFSET, 14806 },
  25929   { 0xfec1, UNICODE_NOT_PRESENT_OFFSET, 14809 },
  25930   { 0xfec2, UNICODE_NOT_PRESENT_OFFSET, 14809 },
  25931   { 0xfec3, UNICODE_NOT_PRESENT_OFFSET, 14809 },
  25932   { 0xfec4, UNICODE_NOT_PRESENT_OFFSET, 14809 },
  25933   { 0xfec5, UNICODE_NOT_PRESENT_OFFSET, 14812 },
  25934   { 0xfec6, UNICODE_NOT_PRESENT_OFFSET, 14812 },
  25935   { 0xfec7, UNICODE_NOT_PRESENT_OFFSET, 14812 },
  25936   { 0xfec8, UNICODE_NOT_PRESENT_OFFSET, 14812 },
  25937   { 0xfec9, UNICODE_NOT_PRESENT_OFFSET, 14815 },
  25938   { 0xfeca, UNICODE_NOT_PRESENT_OFFSET, 14815 },
  25939   { 0xfecb, UNICODE_NOT_PRESENT_OFFSET, 14815 },
  25940   { 0xfecc, UNICODE_NOT_PRESENT_OFFSET, 14815 },
  25941   { 0xfecd, UNICODE_NOT_PRESENT_OFFSET, 14818 },
  25942   { 0xfece, UNICODE_NOT_PRESENT_OFFSET, 14818 },
  25943   { 0xfecf, UNICODE_NOT_PRESENT_OFFSET, 14818 },
  25944   { 0xfed0, UNICODE_NOT_PRESENT_OFFSET, 14818 },
  25945   { 0xfed1, UNICODE_NOT_PRESENT_OFFSET, 14821 },
  25946   { 0xfed2, UNICODE_NOT_PRESENT_OFFSET, 14821 },
  25947   { 0xfed3, UNICODE_NOT_PRESENT_OFFSET, 14821 },
  25948   { 0xfed4, UNICODE_NOT_PRESENT_OFFSET, 14821 },
  25949   { 0xfed5, UNICODE_NOT_PRESENT_OFFSET, 14824 },
  25950   { 0xfed6, UNICODE_NOT_PRESENT_OFFSET, 14824 },
  25951   { 0xfed7, UNICODE_NOT_PRESENT_OFFSET, 14824 },
  25952   { 0xfed8, UNICODE_NOT_PRESENT_OFFSET, 14824 },
  25953   { 0xfed9, UNICODE_NOT_PRESENT_OFFSET, 14827 },
  25954   { 0xfeda, UNICODE_NOT_PRESENT_OFFSET, 14827 },
  25955   { 0xfedb, UNICODE_NOT_PRESENT_OFFSET, 14827 },
  25956   { 0xfedc, UNICODE_NOT_PRESENT_OFFSET, 14827 },
  25957   { 0xfedd, UNICODE_NOT_PRESENT_OFFSET, 14830 },
  25958   { 0xfede, UNICODE_NOT_PRESENT_OFFSET, 14830 },
  25959   { 0xfedf, UNICODE_NOT_PRESENT_OFFSET, 14830 },
  25960   { 0xfee0, UNICODE_NOT_PRESENT_OFFSET, 14830 },
  25961   { 0xfee1, UNICODE_NOT_PRESENT_OFFSET, 14833 },
  25962   { 0xfee2, UNICODE_NOT_PRESENT_OFFSET, 14833 },
  25963   { 0xfee3, UNICODE_NOT_PRESENT_OFFSET, 14833 },
  25964   { 0xfee4, UNICODE_NOT_PRESENT_OFFSET, 14833 },
  25965   { 0xfee5, UNICODE_NOT_PRESENT_OFFSET, 14836 },
  25966   { 0xfee6, UNICODE_NOT_PRESENT_OFFSET, 14836 },
  25967   { 0xfee7, UNICODE_NOT_PRESENT_OFFSET, 14836 },
  25968   { 0xfee8, UNICODE_NOT_PRESENT_OFFSET, 14836 },
  25969   { 0xfee9, UNICODE_NOT_PRESENT_OFFSET, 14839 },
  25970   { 0xfeea, UNICODE_NOT_PRESENT_OFFSET, 14839 },
  25971   { 0xfeeb, UNICODE_NOT_PRESENT_OFFSET, 14839 },
  25972   { 0xfeec, UNICODE_NOT_PRESENT_OFFSET, 14839 },
  25973   { 0xfeed, UNICODE_NOT_PRESENT_OFFSET, 14842 },
  25974   { 0xfeee, UNICODE_NOT_PRESENT_OFFSET, 14842 },
  25975   { 0xfeef, UNICODE_NOT_PRESENT_OFFSET, 12891 },
  25976   { 0xfef0, UNICODE_NOT_PRESENT_OFFSET, 12891 },
  25977   { 0xfef1, UNICODE_NOT_PRESENT_OFFSET, 14845 },
  25978   { 0xfef2, UNICODE_NOT_PRESENT_OFFSET, 14845 },
  25979   { 0xfef3, UNICODE_NOT_PRESENT_OFFSET, 14845 },
  25980   { 0xfef4, UNICODE_NOT_PRESENT_OFFSET, 14845 },
  25981   { 0xfef5, UNICODE_NOT_PRESENT_OFFSET, 14848 },
  25982   { 0xfef6, UNICODE_NOT_PRESENT_OFFSET, 14848 },
  25983   { 0xfef7, UNICODE_NOT_PRESENT_OFFSET, 14855 },
  25984   { 0xfef8, UNICODE_NOT_PRESENT_OFFSET, 14855 },
  25985   { 0xfef9, UNICODE_NOT_PRESENT_OFFSET, 14862 },
  25986   { 0xfefa, UNICODE_NOT_PRESENT_OFFSET, 14862 },
  25987   { 0xfefb, UNICODE_NOT_PRESENT_OFFSET, 14869 },
  25988   { 0xfefc, UNICODE_NOT_PRESENT_OFFSET, 14869 },
  25989   { 0xff01, UNICODE_NOT_PRESENT_OFFSET, 14606 },
  25990   { 0xff02, UNICODE_NOT_PRESENT_OFFSET, 14874 },
  25991   { 0xff03, UNICODE_NOT_PRESENT_OFFSET, 14676 },
  25992   { 0xff04, UNICODE_NOT_PRESENT_OFFSET, 14690 },
  25993   { 0xff05, UNICODE_NOT_PRESENT_OFFSET, 14692 },
  25994   { 0xff06, UNICODE_NOT_PRESENT_OFFSET, 14678 },
  25995   { 0xff07, UNICODE_NOT_PRESENT_OFFSET, 14876 },
  25996   { 0xff08, UNICODE_NOT_PRESENT_OFFSET, 5275 },
  25997   { 0xff09, UNICODE_NOT_PRESENT_OFFSET, 5277 },
  25998   { 0xff0a, UNICODE_NOT_PRESENT_OFFSET, 14680 },
  25999   { 0xff0b, UNICODE_NOT_PRESENT_OFFSET, 5267 },
  26000   { 0xff0c, UNICODE_NOT_PRESENT_OFFSET, 14594 },
  26001   { 0xff0d, UNICODE_NOT_PRESENT_OFFSET, 14682 },
  26002   { 0xff0e, UNICODE_NOT_PRESENT_OFFSET, 5181 },
  26003   { 0xff0f, UNICODE_NOT_PRESENT_OFFSET, 14878 },
  26004   { 0xff10, UNICODE_NOT_PRESENT_OFFSET, 5253 },
  26005   { 0xff11, UNICODE_NOT_PRESENT_OFFSET, 27 },
  26006   { 0xff12, UNICODE_NOT_PRESENT_OFFSET, 12 },
  26007   { 0xff13, UNICODE_NOT_PRESENT_OFFSET, 14 },
  26008   { 0xff14, UNICODE_NOT_PRESENT_OFFSET, 5255 },
  26009   { 0xff15, UNICODE_NOT_PRESENT_OFFSET, 5257 },
  26010   { 0xff16, UNICODE_NOT_PRESENT_OFFSET, 5259 },
  26011   { 0xff17, UNICODE_NOT_PRESENT_OFFSET, 5261 },
  26012   { 0xff18, UNICODE_NOT_PRESENT_OFFSET, 5263 },
  26013   { 0xff19, UNICODE_NOT_PRESENT_OFFSET, 5265 },
  26014   { 0xff1a, UNICODE_NOT_PRESENT_OFFSET, 14604 },
  26015   { 0xff1b, UNICODE_NOT_PRESENT_OFFSET, 1248 },
  26016   { 0xff1c, UNICODE_NOT_PRESENT_OFFSET, 14684 },
  26017   { 0xff1d, UNICODE_NOT_PRESENT_OFFSET, 5273 },
  26018   { 0xff1e, UNICODE_NOT_PRESENT_OFFSET, 14686 },
  26019   { 0xff1f, UNICODE_NOT_PRESENT_OFFSET, 14608 },
  26020   { 0xff20, UNICODE_NOT_PRESENT_OFFSET, 14694 },
  26021   { 0xff21, UNICODE_NOT_PRESENT_OFFSET, 2309 },
  26022   { 0xff22, UNICODE_NOT_PRESENT_OFFSET, 2314 },
  26023   { 0xff23, UNICODE_NOT_PRESENT_OFFSET, 5292 },
  26024   { 0xff24, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  26025   { 0xff25, UNICODE_NOT_PRESENT_OFFSET, 2318 },
  26026   { 0xff26, UNICODE_NOT_PRESENT_OFFSET, 5336 },
  26027   { 0xff27, UNICODE_NOT_PRESENT_OFFSET, 2323 },
  26028   { 0xff28, UNICODE_NOT_PRESENT_OFFSET, 2325 },
  26029   { 0xff29, UNICODE_NOT_PRESENT_OFFSET, 2327 },
  26030   { 0xff2a, UNICODE_NOT_PRESENT_OFFSET, 2329 },
  26031   { 0xff2b, UNICODE_NOT_PRESENT_OFFSET, 2331 },
  26032   { 0xff2c, UNICODE_NOT_PRESENT_OFFSET, 2333 },
  26033   { 0xff2d, UNICODE_NOT_PRESENT_OFFSET, 2335 },
  26034   { 0xff2e, UNICODE_NOT_PRESENT_OFFSET, 2337 },
  26035   { 0xff2f, UNICODE_NOT_PRESENT_OFFSET, 2339 },
  26036   { 0xff30, UNICODE_NOT_PRESENT_OFFSET, 2344 },
  26037   { 0xff31, UNICODE_NOT_PRESENT_OFFSET, 5319 },
  26038   { 0xff32, UNICODE_NOT_PRESENT_OFFSET, 2346 },
  26039   { 0xff33, UNICODE_NOT_PRESENT_OFFSET, 6133 },
  26040   { 0xff34, UNICODE_NOT_PRESENT_OFFSET, 2348 },
  26041   { 0xff35, UNICODE_NOT_PRESENT_OFFSET, 2350 },
  26042   { 0xff36, UNICODE_NOT_PRESENT_OFFSET, 5470 },
  26043   { 0xff37, UNICODE_NOT_PRESENT_OFFSET, 2352 },
  26044   { 0xff38, UNICODE_NOT_PRESENT_OFFSET, 5487 },
  26045   { 0xff39, UNICODE_NOT_PRESENT_OFFSET, 6135 },
  26046   { 0xff3a, UNICODE_NOT_PRESENT_OFFSET, 5331 },
  26047   { 0xff3b, UNICODE_NOT_PRESENT_OFFSET, 14672 },
  26048   { 0xff3c, UNICODE_NOT_PRESENT_OFFSET, 14688 },
  26049   { 0xff3d, UNICODE_NOT_PRESENT_OFFSET, 14674 },
  26050   { 0xff3e, UNICODE_NOT_PRESENT_OFFSET, 14880 },
  26051   { 0xff3f, UNICODE_NOT_PRESENT_OFFSET, 14626 },
  26052   { 0xff40, UNICODE_NOT_PRESENT_OFFSET, 5110 },
  26053   { 0xff41, UNICODE_NOT_PRESENT_OFFSET, 6 },
  26054   { 0xff42, UNICODE_NOT_PRESENT_OFFSET, 2364 },
  26055   { 0xff43, UNICODE_NOT_PRESENT_OFFSET, 2435 },
  26056   { 0xff44, UNICODE_NOT_PRESENT_OFFSET, 2366 },
  26057   { 0xff45, UNICODE_NOT_PRESENT_OFFSET, 2368 },
  26058   { 0xff46, UNICODE_NOT_PRESENT_OFFSET, 2443 },
  26059   { 0xff47, UNICODE_NOT_PRESENT_OFFSET, 2379 },
  26060   { 0xff48, UNICODE_NOT_PRESENT_OFFSET, 1171 },
  26061   { 0xff49, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  26062   { 0xff4a, UNICODE_NOT_PRESENT_OFFSET, 1176 },
  26063   { 0xff4b, UNICODE_NOT_PRESENT_OFFSET, 2381 },
  26064   { 0xff4c, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  26065   { 0xff4d, UNICODE_NOT_PRESENT_OFFSET, 2383 },
  26066   { 0xff4e, UNICODE_NOT_PRESENT_OFFSET, 5279 },
  26067   { 0xff4f, UNICODE_NOT_PRESENT_OFFSET, 29 },
  26068   { 0xff50, UNICODE_NOT_PRESENT_OFFSET, 2399 },
  26069   { 0xff51, UNICODE_NOT_PRESENT_OFFSET, 6137 },
  26070   { 0xff52, UNICODE_NOT_PRESENT_OFFSET, 1178 },
  26071   { 0xff53, UNICODE_NOT_PRESENT_OFFSET, 711 },
  26072   { 0xff54, UNICODE_NOT_PRESENT_OFFSET, 2401 },
  26073   { 0xff55, UNICODE_NOT_PRESENT_OFFSET, 2403 },
  26074   { 0xff56, UNICODE_NOT_PRESENT_OFFSET, 2412 },
  26075   { 0xff57, UNICODE_NOT_PRESENT_OFFSET, 1189 },
  26076   { 0xff58, UNICODE_NOT_PRESENT_OFFSET, 1222 },
  26077   { 0xff59, UNICODE_NOT_PRESENT_OFFSET, 1191 },
  26078   { 0xff5a, UNICODE_NOT_PRESENT_OFFSET, 2526 },
  26079   { 0xff5b, UNICODE_NOT_PRESENT_OFFSET, 14628 },
  26080   { 0xff5c, UNICODE_NOT_PRESENT_OFFSET, 14882 },
  26081   { 0xff5d, UNICODE_NOT_PRESENT_OFFSET, 14630 },
  26082   { 0xff5e, UNICODE_NOT_PRESENT_OFFSET, 14884 },
  26083   { 0xff5f, UNICODE_NOT_PRESENT_OFFSET, 14886 },
  26084   { 0xff60, UNICODE_NOT_PRESENT_OFFSET, 14890 },
  26085   { 0xff61, UNICODE_NOT_PRESENT_OFFSET, 14600 },
  26086   { 0xff62, UNICODE_NOT_PRESENT_OFFSET, 14656 },
  26087   { 0xff63, UNICODE_NOT_PRESENT_OFFSET, 14660 },
  26088   { 0xff64, UNICODE_NOT_PRESENT_OFFSET, 14596 },
  26089   { 0xff65, UNICODE_NOT_PRESENT_OFFSET, 14894 },
  26090   { 0xff66, UNICODE_NOT_PRESENT_OFFSET, 8992 },
  26091   { 0xff67, UNICODE_NOT_PRESENT_OFFSET, 14898 },
  26092   { 0xff68, UNICODE_NOT_PRESENT_OFFSET, 14902 },
  26093   { 0xff69, UNICODE_NOT_PRESENT_OFFSET, 14906 },
  26094   { 0xff6a, UNICODE_NOT_PRESENT_OFFSET, 14910 },
  26095   { 0xff6b, UNICODE_NOT_PRESENT_OFFSET, 14914 },
  26096   { 0xff6c, UNICODE_NOT_PRESENT_OFFSET, 14918 },
  26097   { 0xff6d, UNICODE_NOT_PRESENT_OFFSET, 14922 },
  26098   { 0xff6e, UNICODE_NOT_PRESENT_OFFSET, 14926 },
  26099   { 0xff6f, UNICODE_NOT_PRESENT_OFFSET, 14930 },
  26100   { 0xff70, UNICODE_NOT_PRESENT_OFFSET, 14934 },
  26101   { 0xff71, UNICODE_NOT_PRESENT_OFFSET, 8808 },
  26102   { 0xff72, UNICODE_NOT_PRESENT_OFFSET, 8812 },
  26103   { 0xff73, UNICODE_NOT_PRESENT_OFFSET, 8816 },
  26104   { 0xff74, UNICODE_NOT_PRESENT_OFFSET, 8820 },
  26105   { 0xff75, UNICODE_NOT_PRESENT_OFFSET, 8824 },
  26106   { 0xff76, UNICODE_NOT_PRESENT_OFFSET, 8828 },
  26107   { 0xff77, UNICODE_NOT_PRESENT_OFFSET, 8832 },
  26108   { 0xff78, UNICODE_NOT_PRESENT_OFFSET, 8836 },
  26109   { 0xff79, UNICODE_NOT_PRESENT_OFFSET, 8840 },
  26110   { 0xff7a, UNICODE_NOT_PRESENT_OFFSET, 8844 },
  26111   { 0xff7b, UNICODE_NOT_PRESENT_OFFSET, 8848 },
  26112   { 0xff7c, UNICODE_NOT_PRESENT_OFFSET, 8852 },
  26113   { 0xff7d, UNICODE_NOT_PRESENT_OFFSET, 8856 },
  26114   { 0xff7e, UNICODE_NOT_PRESENT_OFFSET, 8860 },
  26115   { 0xff7f, UNICODE_NOT_PRESENT_OFFSET, 8864 },
  26116   { 0xff80, UNICODE_NOT_PRESENT_OFFSET, 8868 },
  26117   { 0xff81, UNICODE_NOT_PRESENT_OFFSET, 8872 },
  26118   { 0xff82, UNICODE_NOT_PRESENT_OFFSET, 8876 },
  26119   { 0xff83, UNICODE_NOT_PRESENT_OFFSET, 8880 },
  26120   { 0xff84, UNICODE_NOT_PRESENT_OFFSET, 8884 },
  26121   { 0xff85, UNICODE_NOT_PRESENT_OFFSET, 8888 },
  26122   { 0xff86, UNICODE_NOT_PRESENT_OFFSET, 8892 },
  26123   { 0xff87, UNICODE_NOT_PRESENT_OFFSET, 8896 },
  26124   { 0xff88, UNICODE_NOT_PRESENT_OFFSET, 8900 },
  26125   { 0xff89, UNICODE_NOT_PRESENT_OFFSET, 8904 },
  26126   { 0xff8a, UNICODE_NOT_PRESENT_OFFSET, 8908 },
  26127   { 0xff8b, UNICODE_NOT_PRESENT_OFFSET, 8912 },
  26128   { 0xff8c, UNICODE_NOT_PRESENT_OFFSET, 8916 },
  26129   { 0xff8d, UNICODE_NOT_PRESENT_OFFSET, 8920 },
  26130   { 0xff8e, UNICODE_NOT_PRESENT_OFFSET, 8924 },
  26131   { 0xff8f, UNICODE_NOT_PRESENT_OFFSET, 8928 },
  26132   { 0xff90, UNICODE_NOT_PRESENT_OFFSET, 8932 },
  26133   { 0xff91, UNICODE_NOT_PRESENT_OFFSET, 8936 },
  26134   { 0xff92, UNICODE_NOT_PRESENT_OFFSET, 8940 },
  26135   { 0xff93, UNICODE_NOT_PRESENT_OFFSET, 8944 },
  26136   { 0xff94, UNICODE_NOT_PRESENT_OFFSET, 8948 },
  26137   { 0xff95, UNICODE_NOT_PRESENT_OFFSET, 8952 },
  26138   { 0xff96, UNICODE_NOT_PRESENT_OFFSET, 8956 },
  26139   { 0xff97, UNICODE_NOT_PRESENT_OFFSET, 8960 },
  26140   { 0xff98, UNICODE_NOT_PRESENT_OFFSET, 8964 },
  26141   { 0xff99, UNICODE_NOT_PRESENT_OFFSET, 8968 },
  26142   { 0xff9a, UNICODE_NOT_PRESENT_OFFSET, 8972 },
  26143   { 0xff9b, UNICODE_NOT_PRESENT_OFFSET, 8976 },
  26144   { 0xff9c, UNICODE_NOT_PRESENT_OFFSET, 8980 },
  26145   { 0xff9d, UNICODE_NOT_PRESENT_OFFSET, 14938 },
  26146   { 0xff9e, UNICODE_NOT_PRESENT_OFFSET, 14942 },
  26147   { 0xff9f, UNICODE_NOT_PRESENT_OFFSET, 14946 },
  26148   { 0xffa0, UNICODE_NOT_PRESENT_OFFSET, 7683 },
  26149   { 0xffa1, UNICODE_NOT_PRESENT_OFFSET, 7479 },
  26150   { 0xffa2, UNICODE_NOT_PRESENT_OFFSET, 7483 },
  26151   { 0xffa3, UNICODE_NOT_PRESENT_OFFSET, 7487 },
  26152   { 0xffa4, UNICODE_NOT_PRESENT_OFFSET, 7491 },
  26153   { 0xffa5, UNICODE_NOT_PRESENT_OFFSET, 7495 },
  26154   { 0xffa6, UNICODE_NOT_PRESENT_OFFSET, 7499 },
  26155   { 0xffa7, UNICODE_NOT_PRESENT_OFFSET, 7503 },
  26156   { 0xffa8, UNICODE_NOT_PRESENT_OFFSET, 7507 },
  26157   { 0xffa9, UNICODE_NOT_PRESENT_OFFSET, 7511 },
  26158   { 0xffaa, UNICODE_NOT_PRESENT_OFFSET, 7515 },
  26159   { 0xffab, UNICODE_NOT_PRESENT_OFFSET, 7519 },
  26160   { 0xffac, UNICODE_NOT_PRESENT_OFFSET, 7523 },
  26161   { 0xffad, UNICODE_NOT_PRESENT_OFFSET, 7527 },
  26162   { 0xffae, UNICODE_NOT_PRESENT_OFFSET, 7531 },
  26163   { 0xffaf, UNICODE_NOT_PRESENT_OFFSET, 7535 },
  26164   { 0xffb0, UNICODE_NOT_PRESENT_OFFSET, 7539 },
  26165   { 0xffb1, UNICODE_NOT_PRESENT_OFFSET, 7543 },
  26166   { 0xffb2, UNICODE_NOT_PRESENT_OFFSET, 7547 },
  26167   { 0xffb3, UNICODE_NOT_PRESENT_OFFSET, 7551 },
  26168   { 0xffb4, UNICODE_NOT_PRESENT_OFFSET, 7555 },
  26169   { 0xffb5, UNICODE_NOT_PRESENT_OFFSET, 7559 },
  26170   { 0xffb6, UNICODE_NOT_PRESENT_OFFSET, 7563 },
  26171   { 0xffb7, UNICODE_NOT_PRESENT_OFFSET, 7567 },
  26172   { 0xffb8, UNICODE_NOT_PRESENT_OFFSET, 7571 },
  26173   { 0xffb9, UNICODE_NOT_PRESENT_OFFSET, 7575 },
  26174   { 0xffba, UNICODE_NOT_PRESENT_OFFSET, 7579 },
  26175   { 0xffbb, UNICODE_NOT_PRESENT_OFFSET, 7583 },
  26176   { 0xffbc, UNICODE_NOT_PRESENT_OFFSET, 7587 },
  26177   { 0xffbd, UNICODE_NOT_PRESENT_OFFSET, 7591 },
  26178   { 0xffbe, UNICODE_NOT_PRESENT_OFFSET, 7595 },
  26179   { 0xffc2, UNICODE_NOT_PRESENT_OFFSET, 7599 },
  26180   { 0xffc3, UNICODE_NOT_PRESENT_OFFSET, 7603 },
  26181   { 0xffc4, UNICODE_NOT_PRESENT_OFFSET, 7607 },
  26182   { 0xffc5, UNICODE_NOT_PRESENT_OFFSET, 7611 },
  26183   { 0xffc6, UNICODE_NOT_PRESENT_OFFSET, 7615 },
  26184   { 0xffc7, UNICODE_NOT_PRESENT_OFFSET, 7619 },
  26185   { 0xffca, UNICODE_NOT_PRESENT_OFFSET, 7623 },
  26186   { 0xffcb, UNICODE_NOT_PRESENT_OFFSET, 7627 },
  26187   { 0xffcc, UNICODE_NOT_PRESENT_OFFSET, 7631 },
  26188   { 0xffcd, UNICODE_NOT_PRESENT_OFFSET, 7635 },
  26189   { 0xffce, UNICODE_NOT_PRESENT_OFFSET, 7639 },
  26190   { 0xffcf, UNICODE_NOT_PRESENT_OFFSET, 7643 },
  26191   { 0xffd2, UNICODE_NOT_PRESENT_OFFSET, 7647 },
  26192   { 0xffd3, UNICODE_NOT_PRESENT_OFFSET, 7651 },
  26193   { 0xffd4, UNICODE_NOT_PRESENT_OFFSET, 7655 },
  26194   { 0xffd5, UNICODE_NOT_PRESENT_OFFSET, 7659 },
  26195   { 0xffd6, UNICODE_NOT_PRESENT_OFFSET, 7663 },
  26196   { 0xffd7, UNICODE_NOT_PRESENT_OFFSET, 7667 },
  26197   { 0xffda, UNICODE_NOT_PRESENT_OFFSET, 7671 },
  26198   { 0xffdb, UNICODE_NOT_PRESENT_OFFSET, 7675 },
  26199   { 0xffdc, UNICODE_NOT_PRESENT_OFFSET, 7679 },
  26200   { 0xffe0, UNICODE_NOT_PRESENT_OFFSET, 14950 },
  26201   { 0xffe1, UNICODE_NOT_PRESENT_OFFSET, 14953 },
  26202   { 0xffe2, UNICODE_NOT_PRESENT_OFFSET, 14956 },
  26203   { 0xffe3, UNICODE_NOT_PRESENT_OFFSET, 8 },
  26204   { 0xffe4, UNICODE_NOT_PRESENT_OFFSET, 14959 },
  26205   { 0xffe5, UNICODE_NOT_PRESENT_OFFSET, 14962 },
  26206   { 0xffe6, UNICODE_NOT_PRESENT_OFFSET, 14965 },
  26207   { 0xffe8, UNICODE_NOT_PRESENT_OFFSET, 14969 },
  26208   { 0xffe9, UNICODE_NOT_PRESENT_OFFSET, 14973 },
  26209   { 0xffea, UNICODE_NOT_PRESENT_OFFSET, 14977 },
  26210   { 0xffeb, UNICODE_NOT_PRESENT_OFFSET, 14981 },
  26211   { 0xffec, UNICODE_NOT_PRESENT_OFFSET, 14985 },
  26212   { 0xffed, UNICODE_NOT_PRESENT_OFFSET, 14989 },
  26213   { 0xffee, UNICODE_NOT_PRESENT_OFFSET, 14993 },
  26214   { 0x1109a, 14997, UNICODE_NOT_PRESENT_OFFSET },
  26215   { 0x1109c, 15006, UNICODE_NOT_PRESENT_OFFSET },
  26216   { 0x110ab, 15015, UNICODE_NOT_PRESENT_OFFSET },
  26217   { 0x1112e, 15024, UNICODE_NOT_PRESENT_OFFSET },
  26218   { 0x1112f, 15033, UNICODE_NOT_PRESENT_OFFSET },
  26219   { 0x1134b, 15042, UNICODE_NOT_PRESENT_OFFSET },
  26220   { 0x1134c, 15051, UNICODE_NOT_PRESENT_OFFSET },
  26221   { 0x114bb, 15060, UNICODE_NOT_PRESENT_OFFSET },
  26222   { 0x114bc, 15069, UNICODE_NOT_PRESENT_OFFSET },
  26223   { 0x114be, 15078, UNICODE_NOT_PRESENT_OFFSET },
  26224   { 0x115ba, 15087, UNICODE_NOT_PRESENT_OFFSET },
  26225   { 0x115bb, 15096, UNICODE_NOT_PRESENT_OFFSET },
  26226   { 0x1d15e, 15105, UNICODE_NOT_PRESENT_OFFSET },
  26227   { 0x1d15f, 15114, UNICODE_NOT_PRESENT_OFFSET },
  26228   { 0x1d160, 15123, UNICODE_NOT_PRESENT_OFFSET },
  26229   { 0x1d161, 15136, UNICODE_NOT_PRESENT_OFFSET },
  26230   { 0x1d162, 15149, UNICODE_NOT_PRESENT_OFFSET },
  26231   { 0x1d163, 15162, UNICODE_NOT_PRESENT_OFFSET },
  26232   { 0x1d164, 15175, UNICODE_NOT_PRESENT_OFFSET },
  26233   { 0x1d1bb, 15188, UNICODE_NOT_PRESENT_OFFSET },
  26234   { 0x1d1bc, 15197, UNICODE_NOT_PRESENT_OFFSET },
  26235   { 0x1d1bd, 15206, UNICODE_NOT_PRESENT_OFFSET },
  26236   { 0x1d1be, 15219, UNICODE_NOT_PRESENT_OFFSET },
  26237   { 0x1d1bf, 15232, UNICODE_NOT_PRESENT_OFFSET },
  26238   { 0x1d1c0, 15245, UNICODE_NOT_PRESENT_OFFSET },
  26239   { 0x1d400, UNICODE_NOT_PRESENT_OFFSET, 2309 },
  26240   { 0x1d401, UNICODE_NOT_PRESENT_OFFSET, 2314 },
  26241   { 0x1d402, UNICODE_NOT_PRESENT_OFFSET, 5292 },
  26242   { 0x1d403, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  26243   { 0x1d404, UNICODE_NOT_PRESENT_OFFSET, 2318 },
  26244   { 0x1d405, UNICODE_NOT_PRESENT_OFFSET, 5336 },
  26245   { 0x1d406, UNICODE_NOT_PRESENT_OFFSET, 2323 },
  26246   { 0x1d407, UNICODE_NOT_PRESENT_OFFSET, 2325 },
  26247   { 0x1d408, UNICODE_NOT_PRESENT_OFFSET, 2327 },
  26248   { 0x1d409, UNICODE_NOT_PRESENT_OFFSET, 2329 },
  26249   { 0x1d40a, UNICODE_NOT_PRESENT_OFFSET, 2331 },
  26250   { 0x1d40b, UNICODE_NOT_PRESENT_OFFSET, 2333 },
  26251   { 0x1d40c, UNICODE_NOT_PRESENT_OFFSET, 2335 },
  26252   { 0x1d40d, UNICODE_NOT_PRESENT_OFFSET, 2337 },
  26253   { 0x1d40e, UNICODE_NOT_PRESENT_OFFSET, 2339 },
  26254   { 0x1d40f, UNICODE_NOT_PRESENT_OFFSET, 2344 },
  26255   { 0x1d410, UNICODE_NOT_PRESENT_OFFSET, 5319 },
  26256   { 0x1d411, UNICODE_NOT_PRESENT_OFFSET, 2346 },
  26257   { 0x1d412, UNICODE_NOT_PRESENT_OFFSET, 6133 },
  26258   { 0x1d413, UNICODE_NOT_PRESENT_OFFSET, 2348 },
  26259   { 0x1d414, UNICODE_NOT_PRESENT_OFFSET, 2350 },
  26260   { 0x1d415, UNICODE_NOT_PRESENT_OFFSET, 5470 },
  26261   { 0x1d416, UNICODE_NOT_PRESENT_OFFSET, 2352 },
  26262   { 0x1d417, UNICODE_NOT_PRESENT_OFFSET, 5487 },
  26263   { 0x1d418, UNICODE_NOT_PRESENT_OFFSET, 6135 },
  26264   { 0x1d419, UNICODE_NOT_PRESENT_OFFSET, 5331 },
  26265   { 0x1d41a, UNICODE_NOT_PRESENT_OFFSET, 6 },
  26266   { 0x1d41b, UNICODE_NOT_PRESENT_OFFSET, 2364 },
  26267   { 0x1d41c, UNICODE_NOT_PRESENT_OFFSET, 2435 },
  26268   { 0x1d41d, UNICODE_NOT_PRESENT_OFFSET, 2366 },
  26269   { 0x1d41e, UNICODE_NOT_PRESENT_OFFSET, 2368 },
  26270   { 0x1d41f, UNICODE_NOT_PRESENT_OFFSET, 2443 },
  26271   { 0x1d420, UNICODE_NOT_PRESENT_OFFSET, 2379 },
  26272   { 0x1d421, UNICODE_NOT_PRESENT_OFFSET, 1171 },
  26273   { 0x1d422, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  26274   { 0x1d423, UNICODE_NOT_PRESENT_OFFSET, 1176 },
  26275   { 0x1d424, UNICODE_NOT_PRESENT_OFFSET, 2381 },
  26276   { 0x1d425, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  26277   { 0x1d426, UNICODE_NOT_PRESENT_OFFSET, 2383 },
  26278   { 0x1d427, UNICODE_NOT_PRESENT_OFFSET, 5279 },
  26279   { 0x1d428, UNICODE_NOT_PRESENT_OFFSET, 29 },
  26280   { 0x1d429, UNICODE_NOT_PRESENT_OFFSET, 2399 },
  26281   { 0x1d42a, UNICODE_NOT_PRESENT_OFFSET, 6137 },
  26282   { 0x1d42b, UNICODE_NOT_PRESENT_OFFSET, 1178 },
  26283   { 0x1d42c, UNICODE_NOT_PRESENT_OFFSET, 711 },
  26284   { 0x1d42d, UNICODE_NOT_PRESENT_OFFSET, 2401 },
  26285   { 0x1d42e, UNICODE_NOT_PRESENT_OFFSET, 2403 },
  26286   { 0x1d42f, UNICODE_NOT_PRESENT_OFFSET, 2412 },
  26287   { 0x1d430, UNICODE_NOT_PRESENT_OFFSET, 1189 },
  26288   { 0x1d431, UNICODE_NOT_PRESENT_OFFSET, 1222 },
  26289   { 0x1d432, UNICODE_NOT_PRESENT_OFFSET, 1191 },
  26290   { 0x1d433, UNICODE_NOT_PRESENT_OFFSET, 2526 },
  26291   { 0x1d434, UNICODE_NOT_PRESENT_OFFSET, 2309 },
  26292   { 0x1d435, UNICODE_NOT_PRESENT_OFFSET, 2314 },
  26293   { 0x1d436, UNICODE_NOT_PRESENT_OFFSET, 5292 },
  26294   { 0x1d437, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  26295   { 0x1d438, UNICODE_NOT_PRESENT_OFFSET, 2318 },
  26296   { 0x1d439, UNICODE_NOT_PRESENT_OFFSET, 5336 },
  26297   { 0x1d43a, UNICODE_NOT_PRESENT_OFFSET, 2323 },
  26298   { 0x1d43b, UNICODE_NOT_PRESENT_OFFSET, 2325 },
  26299   { 0x1d43c, UNICODE_NOT_PRESENT_OFFSET, 2327 },
  26300   { 0x1d43d, UNICODE_NOT_PRESENT_OFFSET, 2329 },
  26301   { 0x1d43e, UNICODE_NOT_PRESENT_OFFSET, 2331 },
  26302   { 0x1d43f, UNICODE_NOT_PRESENT_OFFSET, 2333 },
  26303   { 0x1d440, UNICODE_NOT_PRESENT_OFFSET, 2335 },
  26304   { 0x1d441, UNICODE_NOT_PRESENT_OFFSET, 2337 },
  26305   { 0x1d442, UNICODE_NOT_PRESENT_OFFSET, 2339 },
  26306   { 0x1d443, UNICODE_NOT_PRESENT_OFFSET, 2344 },
  26307   { 0x1d444, UNICODE_NOT_PRESENT_OFFSET, 5319 },
  26308   { 0x1d445, UNICODE_NOT_PRESENT_OFFSET, 2346 },
  26309   { 0x1d446, UNICODE_NOT_PRESENT_OFFSET, 6133 },
  26310   { 0x1d447, UNICODE_NOT_PRESENT_OFFSET, 2348 },
  26311   { 0x1d448, UNICODE_NOT_PRESENT_OFFSET, 2350 },
  26312   { 0x1d449, UNICODE_NOT_PRESENT_OFFSET, 5470 },
  26313   { 0x1d44a, UNICODE_NOT_PRESENT_OFFSET, 2352 },
  26314   { 0x1d44b, UNICODE_NOT_PRESENT_OFFSET, 5487 },
  26315   { 0x1d44c, UNICODE_NOT_PRESENT_OFFSET, 6135 },
  26316   { 0x1d44d, UNICODE_NOT_PRESENT_OFFSET, 5331 },
  26317   { 0x1d44e, UNICODE_NOT_PRESENT_OFFSET, 6 },
  26318   { 0x1d44f, UNICODE_NOT_PRESENT_OFFSET, 2364 },
  26319   { 0x1d450, UNICODE_NOT_PRESENT_OFFSET, 2435 },
  26320   { 0x1d451, UNICODE_NOT_PRESENT_OFFSET, 2366 },
  26321   { 0x1d452, UNICODE_NOT_PRESENT_OFFSET, 2368 },
  26322   { 0x1d453, UNICODE_NOT_PRESENT_OFFSET, 2443 },
  26323   { 0x1d454, UNICODE_NOT_PRESENT_OFFSET, 2379 },
  26324   { 0x1d456, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  26325   { 0x1d457, UNICODE_NOT_PRESENT_OFFSET, 1176 },
  26326   { 0x1d458, UNICODE_NOT_PRESENT_OFFSET, 2381 },
  26327   { 0x1d459, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  26328   { 0x1d45a, UNICODE_NOT_PRESENT_OFFSET, 2383 },
  26329   { 0x1d45b, UNICODE_NOT_PRESENT_OFFSET, 5279 },
  26330   { 0x1d45c, UNICODE_NOT_PRESENT_OFFSET, 29 },
  26331   { 0x1d45d, UNICODE_NOT_PRESENT_OFFSET, 2399 },
  26332   { 0x1d45e, UNICODE_NOT_PRESENT_OFFSET, 6137 },
  26333   { 0x1d45f, UNICODE_NOT_PRESENT_OFFSET, 1178 },
  26334   { 0x1d460, UNICODE_NOT_PRESENT_OFFSET, 711 },
  26335   { 0x1d461, UNICODE_NOT_PRESENT_OFFSET, 2401 },
  26336   { 0x1d462, UNICODE_NOT_PRESENT_OFFSET, 2403 },
  26337   { 0x1d463, UNICODE_NOT_PRESENT_OFFSET, 2412 },
  26338   { 0x1d464, UNICODE_NOT_PRESENT_OFFSET, 1189 },
  26339   { 0x1d465, UNICODE_NOT_PRESENT_OFFSET, 1222 },
  26340   { 0x1d466, UNICODE_NOT_PRESENT_OFFSET, 1191 },
  26341   { 0x1d467, UNICODE_NOT_PRESENT_OFFSET, 2526 },
  26342   { 0x1d468, UNICODE_NOT_PRESENT_OFFSET, 2309 },
  26343   { 0x1d469, UNICODE_NOT_PRESENT_OFFSET, 2314 },
  26344   { 0x1d46a, UNICODE_NOT_PRESENT_OFFSET, 5292 },
  26345   { 0x1d46b, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  26346   { 0x1d46c, UNICODE_NOT_PRESENT_OFFSET, 2318 },
  26347   { 0x1d46d, UNICODE_NOT_PRESENT_OFFSET, 5336 },
  26348   { 0x1d46e, UNICODE_NOT_PRESENT_OFFSET, 2323 },
  26349   { 0x1d46f, UNICODE_NOT_PRESENT_OFFSET, 2325 },
  26350   { 0x1d470, UNICODE_NOT_PRESENT_OFFSET, 2327 },
  26351   { 0x1d471, UNICODE_NOT_PRESENT_OFFSET, 2329 },
  26352   { 0x1d472, UNICODE_NOT_PRESENT_OFFSET, 2331 },
  26353   { 0x1d473, UNICODE_NOT_PRESENT_OFFSET, 2333 },
  26354   { 0x1d474, UNICODE_NOT_PRESENT_OFFSET, 2335 },
  26355   { 0x1d475, UNICODE_NOT_PRESENT_OFFSET, 2337 },
  26356   { 0x1d476, UNICODE_NOT_PRESENT_OFFSET, 2339 },
  26357   { 0x1d477, UNICODE_NOT_PRESENT_OFFSET, 2344 },
  26358   { 0x1d478, UNICODE_NOT_PRESENT_OFFSET, 5319 },
  26359   { 0x1d479, UNICODE_NOT_PRESENT_OFFSET, 2346 },
  26360   { 0x1d47a, UNICODE_NOT_PRESENT_OFFSET, 6133 },
  26361   { 0x1d47b, UNICODE_NOT_PRESENT_OFFSET, 2348 },
  26362   { 0x1d47c, UNICODE_NOT_PRESENT_OFFSET, 2350 },
  26363   { 0x1d47d, UNICODE_NOT_PRESENT_OFFSET, 5470 },
  26364   { 0x1d47e, UNICODE_NOT_PRESENT_OFFSET, 2352 },
  26365   { 0x1d47f, UNICODE_NOT_PRESENT_OFFSET, 5487 },
  26366   { 0x1d480, UNICODE_NOT_PRESENT_OFFSET, 6135 },
  26367   { 0x1d481, UNICODE_NOT_PRESENT_OFFSET, 5331 },
  26368   { 0x1d482, UNICODE_NOT_PRESENT_OFFSET, 6 },
  26369   { 0x1d483, UNICODE_NOT_PRESENT_OFFSET, 2364 },
  26370   { 0x1d484, UNICODE_NOT_PRESENT_OFFSET, 2435 },
  26371   { 0x1d485, UNICODE_NOT_PRESENT_OFFSET, 2366 },
  26372   { 0x1d486, UNICODE_NOT_PRESENT_OFFSET, 2368 },
  26373   { 0x1d487, UNICODE_NOT_PRESENT_OFFSET, 2443 },
  26374   { 0x1d488, UNICODE_NOT_PRESENT_OFFSET, 2379 },
  26375   { 0x1d489, UNICODE_NOT_PRESENT_OFFSET, 1171 },
  26376   { 0x1d48a, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  26377   { 0x1d48b, UNICODE_NOT_PRESENT_OFFSET, 1176 },
  26378   { 0x1d48c, UNICODE_NOT_PRESENT_OFFSET, 2381 },
  26379   { 0x1d48d, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  26380   { 0x1d48e, UNICODE_NOT_PRESENT_OFFSET, 2383 },
  26381   { 0x1d48f, UNICODE_NOT_PRESENT_OFFSET, 5279 },
  26382   { 0x1d490, UNICODE_NOT_PRESENT_OFFSET, 29 },
  26383   { 0x1d491, UNICODE_NOT_PRESENT_OFFSET, 2399 },
  26384   { 0x1d492, UNICODE_NOT_PRESENT_OFFSET, 6137 },
  26385   { 0x1d493, UNICODE_NOT_PRESENT_OFFSET, 1178 },
  26386   { 0x1d494, UNICODE_NOT_PRESENT_OFFSET, 711 },
  26387   { 0x1d495, UNICODE_NOT_PRESENT_OFFSET, 2401 },
  26388   { 0x1d496, UNICODE_NOT_PRESENT_OFFSET, 2403 },
  26389   { 0x1d497, UNICODE_NOT_PRESENT_OFFSET, 2412 },
  26390   { 0x1d498, UNICODE_NOT_PRESENT_OFFSET, 1189 },
  26391   { 0x1d499, UNICODE_NOT_PRESENT_OFFSET, 1222 },
  26392   { 0x1d49a, UNICODE_NOT_PRESENT_OFFSET, 1191 },
  26393   { 0x1d49b, UNICODE_NOT_PRESENT_OFFSET, 2526 },
  26394   { 0x1d49c, UNICODE_NOT_PRESENT_OFFSET, 2309 },
  26395   { 0x1d49e, UNICODE_NOT_PRESENT_OFFSET, 5292 },
  26396   { 0x1d49f, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  26397   { 0x1d4a2, UNICODE_NOT_PRESENT_OFFSET, 2323 },
  26398   { 0x1d4a5, UNICODE_NOT_PRESENT_OFFSET, 2329 },
  26399   { 0x1d4a6, UNICODE_NOT_PRESENT_OFFSET, 2331 },
  26400   { 0x1d4a9, UNICODE_NOT_PRESENT_OFFSET, 2337 },
  26401   { 0x1d4aa, UNICODE_NOT_PRESENT_OFFSET, 2339 },
  26402   { 0x1d4ab, UNICODE_NOT_PRESENT_OFFSET, 2344 },
  26403   { 0x1d4ac, UNICODE_NOT_PRESENT_OFFSET, 5319 },
  26404   { 0x1d4ae, UNICODE_NOT_PRESENT_OFFSET, 6133 },
  26405   { 0x1d4af, UNICODE_NOT_PRESENT_OFFSET, 2348 },
  26406   { 0x1d4b0, UNICODE_NOT_PRESENT_OFFSET, 2350 },
  26407   { 0x1d4b1, UNICODE_NOT_PRESENT_OFFSET, 5470 },
  26408   { 0x1d4b2, UNICODE_NOT_PRESENT_OFFSET, 2352 },
  26409   { 0x1d4b3, UNICODE_NOT_PRESENT_OFFSET, 5487 },
  26410   { 0x1d4b4, UNICODE_NOT_PRESENT_OFFSET, 6135 },
  26411   { 0x1d4b5, UNICODE_NOT_PRESENT_OFFSET, 5331 },
  26412   { 0x1d4b6, UNICODE_NOT_PRESENT_OFFSET, 6 },
  26413   { 0x1d4b7, UNICODE_NOT_PRESENT_OFFSET, 2364 },
  26414   { 0x1d4b8, UNICODE_NOT_PRESENT_OFFSET, 2435 },
  26415   { 0x1d4b9, UNICODE_NOT_PRESENT_OFFSET, 2366 },
  26416   { 0x1d4bb, UNICODE_NOT_PRESENT_OFFSET, 2443 },
  26417   { 0x1d4bd, UNICODE_NOT_PRESENT_OFFSET, 1171 },
  26418   { 0x1d4be, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  26419   { 0x1d4bf, UNICODE_NOT_PRESENT_OFFSET, 1176 },
  26420   { 0x1d4c0, UNICODE_NOT_PRESENT_OFFSET, 2381 },
  26421   { 0x1d4c1, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  26422   { 0x1d4c2, UNICODE_NOT_PRESENT_OFFSET, 2383 },
  26423   { 0x1d4c3, UNICODE_NOT_PRESENT_OFFSET, 5279 },
  26424   { 0x1d4c5, UNICODE_NOT_PRESENT_OFFSET, 2399 },
  26425   { 0x1d4c6, UNICODE_NOT_PRESENT_OFFSET, 6137 },
  26426   { 0x1d4c7, UNICODE_NOT_PRESENT_OFFSET, 1178 },
  26427   { 0x1d4c8, UNICODE_NOT_PRESENT_OFFSET, 711 },
  26428   { 0x1d4c9, UNICODE_NOT_PRESENT_OFFSET, 2401 },
  26429   { 0x1d4ca, UNICODE_NOT_PRESENT_OFFSET, 2403 },
  26430   { 0x1d4cb, UNICODE_NOT_PRESENT_OFFSET, 2412 },
  26431   { 0x1d4cc, UNICODE_NOT_PRESENT_OFFSET, 1189 },
  26432   { 0x1d4cd, UNICODE_NOT_PRESENT_OFFSET, 1222 },
  26433   { 0x1d4ce, UNICODE_NOT_PRESENT_OFFSET, 1191 },
  26434   { 0x1d4cf, UNICODE_NOT_PRESENT_OFFSET, 2526 },
  26435   { 0x1d4d0, UNICODE_NOT_PRESENT_OFFSET, 2309 },
  26436   { 0x1d4d1, UNICODE_NOT_PRESENT_OFFSET, 2314 },
  26437   { 0x1d4d2, UNICODE_NOT_PRESENT_OFFSET, 5292 },
  26438   { 0x1d4d3, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  26439   { 0x1d4d4, UNICODE_NOT_PRESENT_OFFSET, 2318 },
  26440   { 0x1d4d5, UNICODE_NOT_PRESENT_OFFSET, 5336 },
  26441   { 0x1d4d6, UNICODE_NOT_PRESENT_OFFSET, 2323 },
  26442   { 0x1d4d7, UNICODE_NOT_PRESENT_OFFSET, 2325 },
  26443   { 0x1d4d8, UNICODE_NOT_PRESENT_OFFSET, 2327 },
  26444   { 0x1d4d9, UNICODE_NOT_PRESENT_OFFSET, 2329 },
  26445   { 0x1d4da, UNICODE_NOT_PRESENT_OFFSET, 2331 },
  26446   { 0x1d4db, UNICODE_NOT_PRESENT_OFFSET, 2333 },
  26447   { 0x1d4dc, UNICODE_NOT_PRESENT_OFFSET, 2335 },
  26448   { 0x1d4dd, UNICODE_NOT_PRESENT_OFFSET, 2337 },
  26449   { 0x1d4de, UNICODE_NOT_PRESENT_OFFSET, 2339 },
  26450   { 0x1d4df, UNICODE_NOT_PRESENT_OFFSET, 2344 },
  26451   { 0x1d4e0, UNICODE_NOT_PRESENT_OFFSET, 5319 },
  26452   { 0x1d4e1, UNICODE_NOT_PRESENT_OFFSET, 2346 },
  26453   { 0x1d4e2, UNICODE_NOT_PRESENT_OFFSET, 6133 },
  26454   { 0x1d4e3, UNICODE_NOT_PRESENT_OFFSET, 2348 },
  26455   { 0x1d4e4, UNICODE_NOT_PRESENT_OFFSET, 2350 },
  26456   { 0x1d4e5, UNICODE_NOT_PRESENT_OFFSET, 5470 },
  26457   { 0x1d4e6, UNICODE_NOT_PRESENT_OFFSET, 2352 },
  26458   { 0x1d4e7, UNICODE_NOT_PRESENT_OFFSET, 5487 },
  26459   { 0x1d4e8, UNICODE_NOT_PRESENT_OFFSET, 6135 },
  26460   { 0x1d4e9, UNICODE_NOT_PRESENT_OFFSET, 5331 },
  26461   { 0x1d4ea, UNICODE_NOT_PRESENT_OFFSET, 6 },
  26462   { 0x1d4eb, UNICODE_NOT_PRESENT_OFFSET, 2364 },
  26463   { 0x1d4ec, UNICODE_NOT_PRESENT_OFFSET, 2435 },
  26464   { 0x1d4ed, UNICODE_NOT_PRESENT_OFFSET, 2366 },
  26465   { 0x1d4ee, UNICODE_NOT_PRESENT_OFFSET, 2368 },
  26466   { 0x1d4ef, UNICODE_NOT_PRESENT_OFFSET, 2443 },
  26467   { 0x1d4f0, UNICODE_NOT_PRESENT_OFFSET, 2379 },
  26468   { 0x1d4f1, UNICODE_NOT_PRESENT_OFFSET, 1171 },
  26469   { 0x1d4f2, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  26470   { 0x1d4f3, UNICODE_NOT_PRESENT_OFFSET, 1176 },
  26471   { 0x1d4f4, UNICODE_NOT_PRESENT_OFFSET, 2381 },
  26472   { 0x1d4f5, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  26473   { 0x1d4f6, UNICODE_NOT_PRESENT_OFFSET, 2383 },
  26474   { 0x1d4f7, UNICODE_NOT_PRESENT_OFFSET, 5279 },
  26475   { 0x1d4f8, UNICODE_NOT_PRESENT_OFFSET, 29 },
  26476   { 0x1d4f9, UNICODE_NOT_PRESENT_OFFSET, 2399 },
  26477   { 0x1d4fa, UNICODE_NOT_PRESENT_OFFSET, 6137 },
  26478   { 0x1d4fb, UNICODE_NOT_PRESENT_OFFSET, 1178 },
  26479   { 0x1d4fc, UNICODE_NOT_PRESENT_OFFSET, 711 },
  26480   { 0x1d4fd, UNICODE_NOT_PRESENT_OFFSET, 2401 },
  26481   { 0x1d4fe, UNICODE_NOT_PRESENT_OFFSET, 2403 },
  26482   { 0x1d4ff, UNICODE_NOT_PRESENT_OFFSET, 2412 },
  26483   { 0x1d500, UNICODE_NOT_PRESENT_OFFSET, 1189 },
  26484   { 0x1d501, UNICODE_NOT_PRESENT_OFFSET, 1222 },
  26485   { 0x1d502, UNICODE_NOT_PRESENT_OFFSET, 1191 },
  26486   { 0x1d503, UNICODE_NOT_PRESENT_OFFSET, 2526 },
  26487   { 0x1d504, UNICODE_NOT_PRESENT_OFFSET, 2309 },
  26488   { 0x1d505, UNICODE_NOT_PRESENT_OFFSET, 2314 },
  26489   { 0x1d507, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  26490   { 0x1d508, UNICODE_NOT_PRESENT_OFFSET, 2318 },
  26491   { 0x1d509, UNICODE_NOT_PRESENT_OFFSET, 5336 },
  26492   { 0x1d50a, UNICODE_NOT_PRESENT_OFFSET, 2323 },
  26493   { 0x1d50d, UNICODE_NOT_PRESENT_OFFSET, 2329 },
  26494   { 0x1d50e, UNICODE_NOT_PRESENT_OFFSET, 2331 },
  26495   { 0x1d50f, UNICODE_NOT_PRESENT_OFFSET, 2333 },
  26496   { 0x1d510, UNICODE_NOT_PRESENT_OFFSET, 2335 },
  26497   { 0x1d511, UNICODE_NOT_PRESENT_OFFSET, 2337 },
  26498   { 0x1d512, UNICODE_NOT_PRESENT_OFFSET, 2339 },
  26499   { 0x1d513, UNICODE_NOT_PRESENT_OFFSET, 2344 },
  26500   { 0x1d514, UNICODE_NOT_PRESENT_OFFSET, 5319 },
  26501   { 0x1d516, UNICODE_NOT_PRESENT_OFFSET, 6133 },
  26502   { 0x1d517, UNICODE_NOT_PRESENT_OFFSET, 2348 },
  26503   { 0x1d518, UNICODE_NOT_PRESENT_OFFSET, 2350 },
  26504   { 0x1d519, UNICODE_NOT_PRESENT_OFFSET, 5470 },
  26505   { 0x1d51a, UNICODE_NOT_PRESENT_OFFSET, 2352 },
  26506   { 0x1d51b, UNICODE_NOT_PRESENT_OFFSET, 5487 },
  26507   { 0x1d51c, UNICODE_NOT_PRESENT_OFFSET, 6135 },
  26508   { 0x1d51e, UNICODE_NOT_PRESENT_OFFSET, 6 },
  26509   { 0x1d51f, UNICODE_NOT_PRESENT_OFFSET, 2364 },
  26510   { 0x1d520, UNICODE_NOT_PRESENT_OFFSET, 2435 },
  26511   { 0x1d521, UNICODE_NOT_PRESENT_OFFSET, 2366 },
  26512   { 0x1d522, UNICODE_NOT_PRESENT_OFFSET, 2368 },
  26513   { 0x1d523, UNICODE_NOT_PRESENT_OFFSET, 2443 },
  26514   { 0x1d524, UNICODE_NOT_PRESENT_OFFSET, 2379 },
  26515   { 0x1d525, UNICODE_NOT_PRESENT_OFFSET, 1171 },
  26516   { 0x1d526, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  26517   { 0x1d527, UNICODE_NOT_PRESENT_OFFSET, 1176 },
  26518   { 0x1d528, UNICODE_NOT_PRESENT_OFFSET, 2381 },
  26519   { 0x1d529, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  26520   { 0x1d52a, UNICODE_NOT_PRESENT_OFFSET, 2383 },
  26521   { 0x1d52b, UNICODE_NOT_PRESENT_OFFSET, 5279 },
  26522   { 0x1d52c, UNICODE_NOT_PRESENT_OFFSET, 29 },
  26523   { 0x1d52d, UNICODE_NOT_PRESENT_OFFSET, 2399 },
  26524   { 0x1d52e, UNICODE_NOT_PRESENT_OFFSET, 6137 },
  26525   { 0x1d52f, UNICODE_NOT_PRESENT_OFFSET, 1178 },
  26526   { 0x1d530, UNICODE_NOT_PRESENT_OFFSET, 711 },
  26527   { 0x1d531, UNICODE_NOT_PRESENT_OFFSET, 2401 },
  26528   { 0x1d532, UNICODE_NOT_PRESENT_OFFSET, 2403 },
  26529   { 0x1d533, UNICODE_NOT_PRESENT_OFFSET, 2412 },
  26530   { 0x1d534, UNICODE_NOT_PRESENT_OFFSET, 1189 },
  26531   { 0x1d535, UNICODE_NOT_PRESENT_OFFSET, 1222 },
  26532   { 0x1d536, UNICODE_NOT_PRESENT_OFFSET, 1191 },
  26533   { 0x1d537, UNICODE_NOT_PRESENT_OFFSET, 2526 },
  26534   { 0x1d538, UNICODE_NOT_PRESENT_OFFSET, 2309 },
  26535   { 0x1d539, UNICODE_NOT_PRESENT_OFFSET, 2314 },
  26536   { 0x1d53b, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  26537   { 0x1d53c, UNICODE_NOT_PRESENT_OFFSET, 2318 },
  26538   { 0x1d53d, UNICODE_NOT_PRESENT_OFFSET, 5336 },
  26539   { 0x1d53e, UNICODE_NOT_PRESENT_OFFSET, 2323 },
  26540   { 0x1d540, UNICODE_NOT_PRESENT_OFFSET, 2327 },
  26541   { 0x1d541, UNICODE_NOT_PRESENT_OFFSET, 2329 },
  26542   { 0x1d542, UNICODE_NOT_PRESENT_OFFSET, 2331 },
  26543   { 0x1d543, UNICODE_NOT_PRESENT_OFFSET, 2333 },
  26544   { 0x1d544, UNICODE_NOT_PRESENT_OFFSET, 2335 },
  26545   { 0x1d546, UNICODE_NOT_PRESENT_OFFSET, 2339 },
  26546   { 0x1d54a, UNICODE_NOT_PRESENT_OFFSET, 6133 },
  26547   { 0x1d54b, UNICODE_NOT_PRESENT_OFFSET, 2348 },
  26548   { 0x1d54c, UNICODE_NOT_PRESENT_OFFSET, 2350 },
  26549   { 0x1d54d, UNICODE_NOT_PRESENT_OFFSET, 5470 },
  26550   { 0x1d54e, UNICODE_NOT_PRESENT_OFFSET, 2352 },
  26551   { 0x1d54f, UNICODE_NOT_PRESENT_OFFSET, 5487 },
  26552   { 0x1d550, UNICODE_NOT_PRESENT_OFFSET, 6135 },
  26553   { 0x1d552, UNICODE_NOT_PRESENT_OFFSET, 6 },
  26554   { 0x1d553, UNICODE_NOT_PRESENT_OFFSET, 2364 },
  26555   { 0x1d554, UNICODE_NOT_PRESENT_OFFSET, 2435 },
  26556   { 0x1d555, UNICODE_NOT_PRESENT_OFFSET, 2366 },
  26557   { 0x1d556, UNICODE_NOT_PRESENT_OFFSET, 2368 },
  26558   { 0x1d557, UNICODE_NOT_PRESENT_OFFSET, 2443 },
  26559   { 0x1d558, UNICODE_NOT_PRESENT_OFFSET, 2379 },
  26560   { 0x1d559, UNICODE_NOT_PRESENT_OFFSET, 1171 },
  26561   { 0x1d55a, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  26562   { 0x1d55b, UNICODE_NOT_PRESENT_OFFSET, 1176 },
  26563   { 0x1d55c, UNICODE_NOT_PRESENT_OFFSET, 2381 },
  26564   { 0x1d55d, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  26565   { 0x1d55e, UNICODE_NOT_PRESENT_OFFSET, 2383 },
  26566   { 0x1d55f, UNICODE_NOT_PRESENT_OFFSET, 5279 },
  26567   { 0x1d560, UNICODE_NOT_PRESENT_OFFSET, 29 },
  26568   { 0x1d561, UNICODE_NOT_PRESENT_OFFSET, 2399 },
  26569   { 0x1d562, UNICODE_NOT_PRESENT_OFFSET, 6137 },
  26570   { 0x1d563, UNICODE_NOT_PRESENT_OFFSET, 1178 },
  26571   { 0x1d564, UNICODE_NOT_PRESENT_OFFSET, 711 },
  26572   { 0x1d565, UNICODE_NOT_PRESENT_OFFSET, 2401 },
  26573   { 0x1d566, UNICODE_NOT_PRESENT_OFFSET, 2403 },
  26574   { 0x1d567, UNICODE_NOT_PRESENT_OFFSET, 2412 },
  26575   { 0x1d568, UNICODE_NOT_PRESENT_OFFSET, 1189 },
  26576   { 0x1d569, UNICODE_NOT_PRESENT_OFFSET, 1222 },
  26577   { 0x1d56a, UNICODE_NOT_PRESENT_OFFSET, 1191 },
  26578   { 0x1d56b, UNICODE_NOT_PRESENT_OFFSET, 2526 },
  26579   { 0x1d56c, UNICODE_NOT_PRESENT_OFFSET, 2309 },
  26580   { 0x1d56d, UNICODE_NOT_PRESENT_OFFSET, 2314 },
  26581   { 0x1d56e, UNICODE_NOT_PRESENT_OFFSET, 5292 },
  26582   { 0x1d56f, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  26583   { 0x1d570, UNICODE_NOT_PRESENT_OFFSET, 2318 },
  26584   { 0x1d571, UNICODE_NOT_PRESENT_OFFSET, 5336 },
  26585   { 0x1d572, UNICODE_NOT_PRESENT_OFFSET, 2323 },
  26586   { 0x1d573, UNICODE_NOT_PRESENT_OFFSET, 2325 },
  26587   { 0x1d574, UNICODE_NOT_PRESENT_OFFSET, 2327 },
  26588   { 0x1d575, UNICODE_NOT_PRESENT_OFFSET, 2329 },
  26589   { 0x1d576, UNICODE_NOT_PRESENT_OFFSET, 2331 },
  26590   { 0x1d577, UNICODE_NOT_PRESENT_OFFSET, 2333 },
  26591   { 0x1d578, UNICODE_NOT_PRESENT_OFFSET, 2335 },
  26592   { 0x1d579, UNICODE_NOT_PRESENT_OFFSET, 2337 },
  26593   { 0x1d57a, UNICODE_NOT_PRESENT_OFFSET, 2339 },
  26594   { 0x1d57b, UNICODE_NOT_PRESENT_OFFSET, 2344 },
  26595   { 0x1d57c, UNICODE_NOT_PRESENT_OFFSET, 5319 },
  26596   { 0x1d57d, UNICODE_NOT_PRESENT_OFFSET, 2346 },
  26597   { 0x1d57e, UNICODE_NOT_PRESENT_OFFSET, 6133 },
  26598   { 0x1d57f, UNICODE_NOT_PRESENT_OFFSET, 2348 },
  26599   { 0x1d580, UNICODE_NOT_PRESENT_OFFSET, 2350 },
  26600   { 0x1d581, UNICODE_NOT_PRESENT_OFFSET, 5470 },
  26601   { 0x1d582, UNICODE_NOT_PRESENT_OFFSET, 2352 },
  26602   { 0x1d583, UNICODE_NOT_PRESENT_OFFSET, 5487 },
  26603   { 0x1d584, UNICODE_NOT_PRESENT_OFFSET, 6135 },
  26604   { 0x1d585, UNICODE_NOT_PRESENT_OFFSET, 5331 },
  26605   { 0x1d586, UNICODE_NOT_PRESENT_OFFSET, 6 },
  26606   { 0x1d587, UNICODE_NOT_PRESENT_OFFSET, 2364 },
  26607   { 0x1d588, UNICODE_NOT_PRESENT_OFFSET, 2435 },
  26608   { 0x1d589, UNICODE_NOT_PRESENT_OFFSET, 2366 },
  26609   { 0x1d58a, UNICODE_NOT_PRESENT_OFFSET, 2368 },
  26610   { 0x1d58b, UNICODE_NOT_PRESENT_OFFSET, 2443 },
  26611   { 0x1d58c, UNICODE_NOT_PRESENT_OFFSET, 2379 },
  26612   { 0x1d58d, UNICODE_NOT_PRESENT_OFFSET, 1171 },
  26613   { 0x1d58e, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  26614   { 0x1d58f, UNICODE_NOT_PRESENT_OFFSET, 1176 },
  26615   { 0x1d590, UNICODE_NOT_PRESENT_OFFSET, 2381 },
  26616   { 0x1d591, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  26617   { 0x1d592, UNICODE_NOT_PRESENT_OFFSET, 2383 },
  26618   { 0x1d593, UNICODE_NOT_PRESENT_OFFSET, 5279 },
  26619   { 0x1d594, UNICODE_NOT_PRESENT_OFFSET, 29 },
  26620   { 0x1d595, UNICODE_NOT_PRESENT_OFFSET, 2399 },
  26621   { 0x1d596, UNICODE_NOT_PRESENT_OFFSET, 6137 },
  26622   { 0x1d597, UNICODE_NOT_PRESENT_OFFSET, 1178 },
  26623   { 0x1d598, UNICODE_NOT_PRESENT_OFFSET, 711 },
  26624   { 0x1d599, UNICODE_NOT_PRESENT_OFFSET, 2401 },
  26625   { 0x1d59a, UNICODE_NOT_PRESENT_OFFSET, 2403 },
  26626   { 0x1d59b, UNICODE_NOT_PRESENT_OFFSET, 2412 },
  26627   { 0x1d59c, UNICODE_NOT_PRESENT_OFFSET, 1189 },
  26628   { 0x1d59d, UNICODE_NOT_PRESENT_OFFSET, 1222 },
  26629   { 0x1d59e, UNICODE_NOT_PRESENT_OFFSET, 1191 },
  26630   { 0x1d59f, UNICODE_NOT_PRESENT_OFFSET, 2526 },
  26631   { 0x1d5a0, UNICODE_NOT_PRESENT_OFFSET, 2309 },
  26632   { 0x1d5a1, UNICODE_NOT_PRESENT_OFFSET, 2314 },
  26633   { 0x1d5a2, UNICODE_NOT_PRESENT_OFFSET, 5292 },
  26634   { 0x1d5a3, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  26635   { 0x1d5a4, UNICODE_NOT_PRESENT_OFFSET, 2318 },
  26636   { 0x1d5a5, UNICODE_NOT_PRESENT_OFFSET, 5336 },
  26637   { 0x1d5a6, UNICODE_NOT_PRESENT_OFFSET, 2323 },
  26638   { 0x1d5a7, UNICODE_NOT_PRESENT_OFFSET, 2325 },
  26639   { 0x1d5a8, UNICODE_NOT_PRESENT_OFFSET, 2327 },
  26640   { 0x1d5a9, UNICODE_NOT_PRESENT_OFFSET, 2329 },
  26641   { 0x1d5aa, UNICODE_NOT_PRESENT_OFFSET, 2331 },
  26642   { 0x1d5ab, UNICODE_NOT_PRESENT_OFFSET, 2333 },
  26643   { 0x1d5ac, UNICODE_NOT_PRESENT_OFFSET, 2335 },
  26644   { 0x1d5ad, UNICODE_NOT_PRESENT_OFFSET, 2337 },
  26645   { 0x1d5ae, UNICODE_NOT_PRESENT_OFFSET, 2339 },
  26646   { 0x1d5af, UNICODE_NOT_PRESENT_OFFSET, 2344 },
  26647   { 0x1d5b0, UNICODE_NOT_PRESENT_OFFSET, 5319 },
  26648   { 0x1d5b1, UNICODE_NOT_PRESENT_OFFSET, 2346 },
  26649   { 0x1d5b2, UNICODE_NOT_PRESENT_OFFSET, 6133 },
  26650   { 0x1d5b3, UNICODE_NOT_PRESENT_OFFSET, 2348 },
  26651   { 0x1d5b4, UNICODE_NOT_PRESENT_OFFSET, 2350 },
  26652   { 0x1d5b5, UNICODE_NOT_PRESENT_OFFSET, 5470 },
  26653   { 0x1d5b6, UNICODE_NOT_PRESENT_OFFSET, 2352 },
  26654   { 0x1d5b7, UNICODE_NOT_PRESENT_OFFSET, 5487 },
  26655   { 0x1d5b8, UNICODE_NOT_PRESENT_OFFSET, 6135 },
  26656   { 0x1d5b9, UNICODE_NOT_PRESENT_OFFSET, 5331 },
  26657   { 0x1d5ba, UNICODE_NOT_PRESENT_OFFSET, 6 },
  26658   { 0x1d5bb, UNICODE_NOT_PRESENT_OFFSET, 2364 },
  26659   { 0x1d5bc, UNICODE_NOT_PRESENT_OFFSET, 2435 },
  26660   { 0x1d5bd, UNICODE_NOT_PRESENT_OFFSET, 2366 },
  26661   { 0x1d5be, UNICODE_NOT_PRESENT_OFFSET, 2368 },
  26662   { 0x1d5bf, UNICODE_NOT_PRESENT_OFFSET, 2443 },
  26663   { 0x1d5c0, UNICODE_NOT_PRESENT_OFFSET, 2379 },
  26664   { 0x1d5c1, UNICODE_NOT_PRESENT_OFFSET, 1171 },
  26665   { 0x1d5c2, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  26666   { 0x1d5c3, UNICODE_NOT_PRESENT_OFFSET, 1176 },
  26667   { 0x1d5c4, UNICODE_NOT_PRESENT_OFFSET, 2381 },
  26668   { 0x1d5c5, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  26669   { 0x1d5c6, UNICODE_NOT_PRESENT_OFFSET, 2383 },
  26670   { 0x1d5c7, UNICODE_NOT_PRESENT_OFFSET, 5279 },
  26671   { 0x1d5c8, UNICODE_NOT_PRESENT_OFFSET, 29 },
  26672   { 0x1d5c9, UNICODE_NOT_PRESENT_OFFSET, 2399 },
  26673   { 0x1d5ca, UNICODE_NOT_PRESENT_OFFSET, 6137 },
  26674   { 0x1d5cb, UNICODE_NOT_PRESENT_OFFSET, 1178 },
  26675   { 0x1d5cc, UNICODE_NOT_PRESENT_OFFSET, 711 },
  26676   { 0x1d5cd, UNICODE_NOT_PRESENT_OFFSET, 2401 },
  26677   { 0x1d5ce, UNICODE_NOT_PRESENT_OFFSET, 2403 },
  26678   { 0x1d5cf, UNICODE_NOT_PRESENT_OFFSET, 2412 },
  26679   { 0x1d5d0, UNICODE_NOT_PRESENT_OFFSET, 1189 },
  26680   { 0x1d5d1, UNICODE_NOT_PRESENT_OFFSET, 1222 },
  26681   { 0x1d5d2, UNICODE_NOT_PRESENT_OFFSET, 1191 },
  26682   { 0x1d5d3, UNICODE_NOT_PRESENT_OFFSET, 2526 },
  26683   { 0x1d5d4, UNICODE_NOT_PRESENT_OFFSET, 2309 },
  26684   { 0x1d5d5, UNICODE_NOT_PRESENT_OFFSET, 2314 },
  26685   { 0x1d5d6, UNICODE_NOT_PRESENT_OFFSET, 5292 },
  26686   { 0x1d5d7, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  26687   { 0x1d5d8, UNICODE_NOT_PRESENT_OFFSET, 2318 },
  26688   { 0x1d5d9, UNICODE_NOT_PRESENT_OFFSET, 5336 },
  26689   { 0x1d5da, UNICODE_NOT_PRESENT_OFFSET, 2323 },
  26690   { 0x1d5db, UNICODE_NOT_PRESENT_OFFSET, 2325 },
  26691   { 0x1d5dc, UNICODE_NOT_PRESENT_OFFSET, 2327 },
  26692   { 0x1d5dd, UNICODE_NOT_PRESENT_OFFSET, 2329 },
  26693   { 0x1d5de, UNICODE_NOT_PRESENT_OFFSET, 2331 },
  26694   { 0x1d5df, UNICODE_NOT_PRESENT_OFFSET, 2333 },
  26695   { 0x1d5e0, UNICODE_NOT_PRESENT_OFFSET, 2335 },
  26696   { 0x1d5e1, UNICODE_NOT_PRESENT_OFFSET, 2337 },
  26697   { 0x1d5e2, UNICODE_NOT_PRESENT_OFFSET, 2339 },
  26698   { 0x1d5e3, UNICODE_NOT_PRESENT_OFFSET, 2344 },
  26699   { 0x1d5e4, UNICODE_NOT_PRESENT_OFFSET, 5319 },
  26700   { 0x1d5e5, UNICODE_NOT_PRESENT_OFFSET, 2346 },
  26701   { 0x1d5e6, UNICODE_NOT_PRESENT_OFFSET, 6133 },
  26702   { 0x1d5e7, UNICODE_NOT_PRESENT_OFFSET, 2348 },
  26703   { 0x1d5e8, UNICODE_NOT_PRESENT_OFFSET, 2350 },
  26704   { 0x1d5e9, UNICODE_NOT_PRESENT_OFFSET, 5470 },
  26705   { 0x1d5ea, UNICODE_NOT_PRESENT_OFFSET, 2352 },
  26706   { 0x1d5eb, UNICODE_NOT_PRESENT_OFFSET, 5487 },
  26707   { 0x1d5ec, UNICODE_NOT_PRESENT_OFFSET, 6135 },
  26708   { 0x1d5ed, UNICODE_NOT_PRESENT_OFFSET, 5331 },
  26709   { 0x1d5ee, UNICODE_NOT_PRESENT_OFFSET, 6 },
  26710   { 0x1d5ef, UNICODE_NOT_PRESENT_OFFSET, 2364 },
  26711   { 0x1d5f0, UNICODE_NOT_PRESENT_OFFSET, 2435 },
  26712   { 0x1d5f1, UNICODE_NOT_PRESENT_OFFSET, 2366 },
  26713   { 0x1d5f2, UNICODE_NOT_PRESENT_OFFSET, 2368 },
  26714   { 0x1d5f3, UNICODE_NOT_PRESENT_OFFSET, 2443 },
  26715   { 0x1d5f4, UNICODE_NOT_PRESENT_OFFSET, 2379 },
  26716   { 0x1d5f5, UNICODE_NOT_PRESENT_OFFSET, 1171 },
  26717   { 0x1d5f6, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  26718   { 0x1d5f7, UNICODE_NOT_PRESENT_OFFSET, 1176 },
  26719   { 0x1d5f8, UNICODE_NOT_PRESENT_OFFSET, 2381 },
  26720   { 0x1d5f9, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  26721   { 0x1d5fa, UNICODE_NOT_PRESENT_OFFSET, 2383 },
  26722   { 0x1d5fb, UNICODE_NOT_PRESENT_OFFSET, 5279 },
  26723   { 0x1d5fc, UNICODE_NOT_PRESENT_OFFSET, 29 },
  26724   { 0x1d5fd, UNICODE_NOT_PRESENT_OFFSET, 2399 },
  26725   { 0x1d5fe, UNICODE_NOT_PRESENT_OFFSET, 6137 },
  26726   { 0x1d5ff, UNICODE_NOT_PRESENT_OFFSET, 1178 },
  26727   { 0x1d600, UNICODE_NOT_PRESENT_OFFSET, 711 },
  26728   { 0x1d601, UNICODE_NOT_PRESENT_OFFSET, 2401 },
  26729   { 0x1d602, UNICODE_NOT_PRESENT_OFFSET, 2403 },
  26730   { 0x1d603, UNICODE_NOT_PRESENT_OFFSET, 2412 },
  26731   { 0x1d604, UNICODE_NOT_PRESENT_OFFSET, 1189 },
  26732   { 0x1d605, UNICODE_NOT_PRESENT_OFFSET, 1222 },
  26733   { 0x1d606, UNICODE_NOT_PRESENT_OFFSET, 1191 },
  26734   { 0x1d607, UNICODE_NOT_PRESENT_OFFSET, 2526 },
  26735   { 0x1d608, UNICODE_NOT_PRESENT_OFFSET, 2309 },
  26736   { 0x1d609, UNICODE_NOT_PRESENT_OFFSET, 2314 },
  26737   { 0x1d60a, UNICODE_NOT_PRESENT_OFFSET, 5292 },
  26738   { 0x1d60b, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  26739   { 0x1d60c, UNICODE_NOT_PRESENT_OFFSET, 2318 },
  26740   { 0x1d60d, UNICODE_NOT_PRESENT_OFFSET, 5336 },
  26741   { 0x1d60e, UNICODE_NOT_PRESENT_OFFSET, 2323 },
  26742   { 0x1d60f, UNICODE_NOT_PRESENT_OFFSET, 2325 },
  26743   { 0x1d610, UNICODE_NOT_PRESENT_OFFSET, 2327 },
  26744   { 0x1d611, UNICODE_NOT_PRESENT_OFFSET, 2329 },
  26745   { 0x1d612, UNICODE_NOT_PRESENT_OFFSET, 2331 },
  26746   { 0x1d613, UNICODE_NOT_PRESENT_OFFSET, 2333 },
  26747   { 0x1d614, UNICODE_NOT_PRESENT_OFFSET, 2335 },
  26748   { 0x1d615, UNICODE_NOT_PRESENT_OFFSET, 2337 },
  26749   { 0x1d616, UNICODE_NOT_PRESENT_OFFSET, 2339 },
  26750   { 0x1d617, UNICODE_NOT_PRESENT_OFFSET, 2344 },
  26751   { 0x1d618, UNICODE_NOT_PRESENT_OFFSET, 5319 },
  26752   { 0x1d619, UNICODE_NOT_PRESENT_OFFSET, 2346 },
  26753   { 0x1d61a, UNICODE_NOT_PRESENT_OFFSET, 6133 },
  26754   { 0x1d61b, UNICODE_NOT_PRESENT_OFFSET, 2348 },
  26755   { 0x1d61c, UNICODE_NOT_PRESENT_OFFSET, 2350 },
  26756   { 0x1d61d, UNICODE_NOT_PRESENT_OFFSET, 5470 },
  26757   { 0x1d61e, UNICODE_NOT_PRESENT_OFFSET, 2352 },
  26758   { 0x1d61f, UNICODE_NOT_PRESENT_OFFSET, 5487 },
  26759   { 0x1d620, UNICODE_NOT_PRESENT_OFFSET, 6135 },
  26760   { 0x1d621, UNICODE_NOT_PRESENT_OFFSET, 5331 },
  26761   { 0x1d622, UNICODE_NOT_PRESENT_OFFSET, 6 },
  26762   { 0x1d623, UNICODE_NOT_PRESENT_OFFSET, 2364 },
  26763   { 0x1d624, UNICODE_NOT_PRESENT_OFFSET, 2435 },
  26764   { 0x1d625, UNICODE_NOT_PRESENT_OFFSET, 2366 },
  26765   { 0x1d626, UNICODE_NOT_PRESENT_OFFSET, 2368 },
  26766   { 0x1d627, UNICODE_NOT_PRESENT_OFFSET, 2443 },
  26767   { 0x1d628, UNICODE_NOT_PRESENT_OFFSET, 2379 },
  26768   { 0x1d629, UNICODE_NOT_PRESENT_OFFSET, 1171 },
  26769   { 0x1d62a, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  26770   { 0x1d62b, UNICODE_NOT_PRESENT_OFFSET, 1176 },
  26771   { 0x1d62c, UNICODE_NOT_PRESENT_OFFSET, 2381 },
  26772   { 0x1d62d, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  26773   { 0x1d62e, UNICODE_NOT_PRESENT_OFFSET, 2383 },
  26774   { 0x1d62f, UNICODE_NOT_PRESENT_OFFSET, 5279 },
  26775   { 0x1d630, UNICODE_NOT_PRESENT_OFFSET, 29 },
  26776   { 0x1d631, UNICODE_NOT_PRESENT_OFFSET, 2399 },
  26777   { 0x1d632, UNICODE_NOT_PRESENT_OFFSET, 6137 },
  26778   { 0x1d633, UNICODE_NOT_PRESENT_OFFSET, 1178 },
  26779   { 0x1d634, UNICODE_NOT_PRESENT_OFFSET, 711 },
  26780   { 0x1d635, UNICODE_NOT_PRESENT_OFFSET, 2401 },
  26781   { 0x1d636, UNICODE_NOT_PRESENT_OFFSET, 2403 },
  26782   { 0x1d637, UNICODE_NOT_PRESENT_OFFSET, 2412 },
  26783   { 0x1d638, UNICODE_NOT_PRESENT_OFFSET, 1189 },
  26784   { 0x1d639, UNICODE_NOT_PRESENT_OFFSET, 1222 },
  26785   { 0x1d63a, UNICODE_NOT_PRESENT_OFFSET, 1191 },
  26786   { 0x1d63b, UNICODE_NOT_PRESENT_OFFSET, 2526 },
  26787   { 0x1d63c, UNICODE_NOT_PRESENT_OFFSET, 2309 },
  26788   { 0x1d63d, UNICODE_NOT_PRESENT_OFFSET, 2314 },
  26789   { 0x1d63e, UNICODE_NOT_PRESENT_OFFSET, 5292 },
  26790   { 0x1d63f, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  26791   { 0x1d640, UNICODE_NOT_PRESENT_OFFSET, 2318 },
  26792   { 0x1d641, UNICODE_NOT_PRESENT_OFFSET, 5336 },
  26793   { 0x1d642, UNICODE_NOT_PRESENT_OFFSET, 2323 },
  26794   { 0x1d643, UNICODE_NOT_PRESENT_OFFSET, 2325 },
  26795   { 0x1d644, UNICODE_NOT_PRESENT_OFFSET, 2327 },
  26796   { 0x1d645, UNICODE_NOT_PRESENT_OFFSET, 2329 },
  26797   { 0x1d646, UNICODE_NOT_PRESENT_OFFSET, 2331 },
  26798   { 0x1d647, UNICODE_NOT_PRESENT_OFFSET, 2333 },
  26799   { 0x1d648, UNICODE_NOT_PRESENT_OFFSET, 2335 },
  26800   { 0x1d649, UNICODE_NOT_PRESENT_OFFSET, 2337 },
  26801   { 0x1d64a, UNICODE_NOT_PRESENT_OFFSET, 2339 },
  26802   { 0x1d64b, UNICODE_NOT_PRESENT_OFFSET, 2344 },
  26803   { 0x1d64c, UNICODE_NOT_PRESENT_OFFSET, 5319 },
  26804   { 0x1d64d, UNICODE_NOT_PRESENT_OFFSET, 2346 },
  26805   { 0x1d64e, UNICODE_NOT_PRESENT_OFFSET, 6133 },
  26806   { 0x1d64f, UNICODE_NOT_PRESENT_OFFSET, 2348 },
  26807   { 0x1d650, UNICODE_NOT_PRESENT_OFFSET, 2350 },
  26808   { 0x1d651, UNICODE_NOT_PRESENT_OFFSET, 5470 },
  26809   { 0x1d652, UNICODE_NOT_PRESENT_OFFSET, 2352 },
  26810   { 0x1d653, UNICODE_NOT_PRESENT_OFFSET, 5487 },
  26811   { 0x1d654, UNICODE_NOT_PRESENT_OFFSET, 6135 },
  26812   { 0x1d655, UNICODE_NOT_PRESENT_OFFSET, 5331 },
  26813   { 0x1d656, UNICODE_NOT_PRESENT_OFFSET, 6 },
  26814   { 0x1d657, UNICODE_NOT_PRESENT_OFFSET, 2364 },
  26815   { 0x1d658, UNICODE_NOT_PRESENT_OFFSET, 2435 },
  26816   { 0x1d659, UNICODE_NOT_PRESENT_OFFSET, 2366 },
  26817   { 0x1d65a, UNICODE_NOT_PRESENT_OFFSET, 2368 },
  26818   { 0x1d65b, UNICODE_NOT_PRESENT_OFFSET, 2443 },
  26819   { 0x1d65c, UNICODE_NOT_PRESENT_OFFSET, 2379 },
  26820   { 0x1d65d, UNICODE_NOT_PRESENT_OFFSET, 1171 },
  26821   { 0x1d65e, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  26822   { 0x1d65f, UNICODE_NOT_PRESENT_OFFSET, 1176 },
  26823   { 0x1d660, UNICODE_NOT_PRESENT_OFFSET, 2381 },
  26824   { 0x1d661, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  26825   { 0x1d662, UNICODE_NOT_PRESENT_OFFSET, 2383 },
  26826   { 0x1d663, UNICODE_NOT_PRESENT_OFFSET, 5279 },
  26827   { 0x1d664, UNICODE_NOT_PRESENT_OFFSET, 29 },
  26828   { 0x1d665, UNICODE_NOT_PRESENT_OFFSET, 2399 },
  26829   { 0x1d666, UNICODE_NOT_PRESENT_OFFSET, 6137 },
  26830   { 0x1d667, UNICODE_NOT_PRESENT_OFFSET, 1178 },
  26831   { 0x1d668, UNICODE_NOT_PRESENT_OFFSET, 711 },
  26832   { 0x1d669, UNICODE_NOT_PRESENT_OFFSET, 2401 },
  26833   { 0x1d66a, UNICODE_NOT_PRESENT_OFFSET, 2403 },
  26834   { 0x1d66b, UNICODE_NOT_PRESENT_OFFSET, 2412 },
  26835   { 0x1d66c, UNICODE_NOT_PRESENT_OFFSET, 1189 },
  26836   { 0x1d66d, UNICODE_NOT_PRESENT_OFFSET, 1222 },
  26837   { 0x1d66e, UNICODE_NOT_PRESENT_OFFSET, 1191 },
  26838   { 0x1d66f, UNICODE_NOT_PRESENT_OFFSET, 2526 },
  26839   { 0x1d670, UNICODE_NOT_PRESENT_OFFSET, 2309 },
  26840   { 0x1d671, UNICODE_NOT_PRESENT_OFFSET, 2314 },
  26841   { 0x1d672, UNICODE_NOT_PRESENT_OFFSET, 5292 },
  26842   { 0x1d673, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  26843   { 0x1d674, UNICODE_NOT_PRESENT_OFFSET, 2318 },
  26844   { 0x1d675, UNICODE_NOT_PRESENT_OFFSET, 5336 },
  26845   { 0x1d676, UNICODE_NOT_PRESENT_OFFSET, 2323 },
  26846   { 0x1d677, UNICODE_NOT_PRESENT_OFFSET, 2325 },
  26847   { 0x1d678, UNICODE_NOT_PRESENT_OFFSET, 2327 },
  26848   { 0x1d679, UNICODE_NOT_PRESENT_OFFSET, 2329 },
  26849   { 0x1d67a, UNICODE_NOT_PRESENT_OFFSET, 2331 },
  26850   { 0x1d67b, UNICODE_NOT_PRESENT_OFFSET, 2333 },
  26851   { 0x1d67c, UNICODE_NOT_PRESENT_OFFSET, 2335 },
  26852   { 0x1d67d, UNICODE_NOT_PRESENT_OFFSET, 2337 },
  26853   { 0x1d67e, UNICODE_NOT_PRESENT_OFFSET, 2339 },
  26854   { 0x1d67f, UNICODE_NOT_PRESENT_OFFSET, 2344 },
  26855   { 0x1d680, UNICODE_NOT_PRESENT_OFFSET, 5319 },
  26856   { 0x1d681, UNICODE_NOT_PRESENT_OFFSET, 2346 },
  26857   { 0x1d682, UNICODE_NOT_PRESENT_OFFSET, 6133 },
  26858   { 0x1d683, UNICODE_NOT_PRESENT_OFFSET, 2348 },
  26859   { 0x1d684, UNICODE_NOT_PRESENT_OFFSET, 2350 },
  26860   { 0x1d685, UNICODE_NOT_PRESENT_OFFSET, 5470 },
  26861   { 0x1d686, UNICODE_NOT_PRESENT_OFFSET, 2352 },
  26862   { 0x1d687, UNICODE_NOT_PRESENT_OFFSET, 5487 },
  26863   { 0x1d688, UNICODE_NOT_PRESENT_OFFSET, 6135 },
  26864   { 0x1d689, UNICODE_NOT_PRESENT_OFFSET, 5331 },
  26865   { 0x1d68a, UNICODE_NOT_PRESENT_OFFSET, 6 },
  26866   { 0x1d68b, UNICODE_NOT_PRESENT_OFFSET, 2364 },
  26867   { 0x1d68c, UNICODE_NOT_PRESENT_OFFSET, 2435 },
  26868   { 0x1d68d, UNICODE_NOT_PRESENT_OFFSET, 2366 },
  26869   { 0x1d68e, UNICODE_NOT_PRESENT_OFFSET, 2368 },
  26870   { 0x1d68f, UNICODE_NOT_PRESENT_OFFSET, 2443 },
  26871   { 0x1d690, UNICODE_NOT_PRESENT_OFFSET, 2379 },
  26872   { 0x1d691, UNICODE_NOT_PRESENT_OFFSET, 1171 },
  26873   { 0x1d692, UNICODE_NOT_PRESENT_OFFSET, 2427 },
  26874   { 0x1d693, UNICODE_NOT_PRESENT_OFFSET, 1176 },
  26875   { 0x1d694, UNICODE_NOT_PRESENT_OFFSET, 2381 },
  26876   { 0x1d695, UNICODE_NOT_PRESENT_OFFSET, 1220 },
  26877   { 0x1d696, UNICODE_NOT_PRESENT_OFFSET, 2383 },
  26878   { 0x1d697, UNICODE_NOT_PRESENT_OFFSET, 5279 },
  26879   { 0x1d698, UNICODE_NOT_PRESENT_OFFSET, 29 },
  26880   { 0x1d699, UNICODE_NOT_PRESENT_OFFSET, 2399 },
  26881   { 0x1d69a, UNICODE_NOT_PRESENT_OFFSET, 6137 },
  26882   { 0x1d69b, UNICODE_NOT_PRESENT_OFFSET, 1178 },
  26883   { 0x1d69c, UNICODE_NOT_PRESENT_OFFSET, 711 },
  26884   { 0x1d69d, UNICODE_NOT_PRESENT_OFFSET, 2401 },
  26885   { 0x1d69e, UNICODE_NOT_PRESENT_OFFSET, 2403 },
  26886   { 0x1d69f, UNICODE_NOT_PRESENT_OFFSET, 2412 },
  26887   { 0x1d6a0, UNICODE_NOT_PRESENT_OFFSET, 1189 },
  26888   { 0x1d6a1, UNICODE_NOT_PRESENT_OFFSET, 1222 },
  26889   { 0x1d6a2, UNICODE_NOT_PRESENT_OFFSET, 1191 },
  26890   { 0x1d6a3, UNICODE_NOT_PRESENT_OFFSET, 2526 },
  26891   { 0x1d6a4, UNICODE_NOT_PRESENT_OFFSET, 15258 },
  26892   { 0x1d6a5, UNICODE_NOT_PRESENT_OFFSET, 15261 },
  26893   { 0x1d6a8, UNICODE_NOT_PRESENT_OFFSET, 15264 },
  26894   { 0x1d6a9, UNICODE_NOT_PRESENT_OFFSET, 15267 },
  26895   { 0x1d6aa, UNICODE_NOT_PRESENT_OFFSET, 5354 },
  26896   { 0x1d6ab, UNICODE_NOT_PRESENT_OFFSET, 15270 },
  26897   { 0x1d6ac, UNICODE_NOT_PRESENT_OFFSET, 15273 },
  26898   { 0x1d6ad, UNICODE_NOT_PRESENT_OFFSET, 15276 },
  26899   { 0x1d6ae, UNICODE_NOT_PRESENT_OFFSET, 15279 },
  26900   { 0x1d6af, UNICODE_NOT_PRESENT_OFFSET, 1402 },
  26901   { 0x1d6b0, UNICODE_NOT_PRESENT_OFFSET, 15282 },
  26902   { 0x1d6b1, UNICODE_NOT_PRESENT_OFFSET, 15285 },
  26903   { 0x1d6b2, UNICODE_NOT_PRESENT_OFFSET, 15288 },
  26904   { 0x1d6b3, UNICODE_NOT_PRESENT_OFFSET, 15291 },
  26905   { 0x1d6b4, UNICODE_NOT_PRESENT_OFFSET, 15294 },
  26906   { 0x1d6b5, UNICODE_NOT_PRESENT_OFFSET, 15297 },
  26907   { 0x1d6b6, UNICODE_NOT_PRESENT_OFFSET, 15300 },
  26908   { 0x1d6b7, UNICODE_NOT_PRESENT_OFFSET, 5357 },
  26909   { 0x1d6b8, UNICODE_NOT_PRESENT_OFFSET, 15303 },
  26910   { 0x1d6b9, UNICODE_NOT_PRESENT_OFFSET, 1402 },
  26911   { 0x1d6ba, UNICODE_NOT_PRESENT_OFFSET, 1408 },
  26912   { 0x1d6bb, UNICODE_NOT_PRESENT_OFFSET, 15306 },
  26913   { 0x1d6bc, UNICODE_NOT_PRESENT_OFFSET, 1374 },
  26914   { 0x1d6bd, UNICODE_NOT_PRESENT_OFFSET, 15309 },
  26915   { 0x1d6be, UNICODE_NOT_PRESENT_OFFSET, 15312 },
  26916   { 0x1d6bf, UNICODE_NOT_PRESENT_OFFSET, 15315 },
  26917   { 0x1d6c0, UNICODE_NOT_PRESENT_OFFSET, 5333 },
  26918   { 0x1d6c1, UNICODE_NOT_PRESENT_OFFSET, 15318 },
  26919   { 0x1d6c2, UNICODE_NOT_PRESENT_OFFSET, 15322 },
  26920   { 0x1d6c3, UNICODE_NOT_PRESENT_OFFSET, 1368 },
  26921   { 0x1d6c4, UNICODE_NOT_PRESENT_OFFSET, 2418 },
  26922   { 0x1d6c5, UNICODE_NOT_PRESENT_OFFSET, 2421 },
  26923   { 0x1d6c6, UNICODE_NOT_PRESENT_OFFSET, 1405 },
  26924   { 0x1d6c7, UNICODE_NOT_PRESENT_OFFSET, 15325 },
  26925   { 0x1d6c8, UNICODE_NOT_PRESENT_OFFSET, 15328 },
  26926   { 0x1d6c9, UNICODE_NOT_PRESENT_OFFSET, 1371 },
  26927   { 0x1d6ca, UNICODE_NOT_PRESENT_OFFSET, 4860 },
  26928   { 0x1d6cb, UNICODE_NOT_PRESENT_OFFSET, 1393 },
  26929   { 0x1d6cc, UNICODE_NOT_PRESENT_OFFSET, 15331 },
  26930   { 0x1d6cd, UNICODE_NOT_PRESENT_OFFSET, 20 },
  26931   { 0x1d6ce, UNICODE_NOT_PRESENT_OFFSET, 15334 },
  26932   { 0x1d6cf, UNICODE_NOT_PRESENT_OFFSET, 15337 },
  26933   { 0x1d6d0, UNICODE_NOT_PRESENT_OFFSET, 15340 },
  26934   { 0x1d6d1, UNICODE_NOT_PRESENT_OFFSET, 1390 },
  26935   { 0x1d6d2, UNICODE_NOT_PRESENT_OFFSET, 1396 },
  26936   { 0x1d6d3, UNICODE_NOT_PRESENT_OFFSET, 1399 },
  26937   { 0x1d6d4, UNICODE_NOT_PRESENT_OFFSET, 15343 },
  26938   { 0x1d6d5, UNICODE_NOT_PRESENT_OFFSET, 15346 },
  26939   { 0x1d6d6, UNICODE_NOT_PRESENT_OFFSET, 15349 },
  26940   { 0x1d6d7, UNICODE_NOT_PRESENT_OFFSET, 1387 },
  26941   { 0x1d6d8, UNICODE_NOT_PRESENT_OFFSET, 2424 },
  26942   { 0x1d6d9, UNICODE_NOT_PRESENT_OFFSET, 15352 },
  26943   { 0x1d6da, UNICODE_NOT_PRESENT_OFFSET, 15355 },
  26944   { 0x1d6db, UNICODE_NOT_PRESENT_OFFSET, 15358 },
  26945   { 0x1d6dc, UNICODE_NOT_PRESENT_OFFSET, 1405 },
  26946   { 0x1d6dd, UNICODE_NOT_PRESENT_OFFSET, 1371 },
  26947   { 0x1d6de, UNICODE_NOT_PRESENT_OFFSET, 1393 },
  26948   { 0x1d6df, UNICODE_NOT_PRESENT_OFFSET, 1387 },
  26949   { 0x1d6e0, UNICODE_NOT_PRESENT_OFFSET, 1396 },
  26950   { 0x1d6e1, UNICODE_NOT_PRESENT_OFFSET, 1390 },
  26951   { 0x1d6e2, UNICODE_NOT_PRESENT_OFFSET, 15264 },
  26952   { 0x1d6e3, UNICODE_NOT_PRESENT_OFFSET, 15267 },
  26953   { 0x1d6e4, UNICODE_NOT_PRESENT_OFFSET, 5354 },
  26954   { 0x1d6e5, UNICODE_NOT_PRESENT_OFFSET, 15270 },
  26955   { 0x1d6e6, UNICODE_NOT_PRESENT_OFFSET, 15273 },
  26956   { 0x1d6e7, UNICODE_NOT_PRESENT_OFFSET, 15276 },
  26957   { 0x1d6e8, UNICODE_NOT_PRESENT_OFFSET, 15279 },
  26958   { 0x1d6e9, UNICODE_NOT_PRESENT_OFFSET, 1402 },
  26959   { 0x1d6ea, UNICODE_NOT_PRESENT_OFFSET, 15282 },
  26960   { 0x1d6eb, UNICODE_NOT_PRESENT_OFFSET, 15285 },
  26961   { 0x1d6ec, UNICODE_NOT_PRESENT_OFFSET, 15288 },
  26962   { 0x1d6ed, UNICODE_NOT_PRESENT_OFFSET, 15291 },
  26963   { 0x1d6ee, UNICODE_NOT_PRESENT_OFFSET, 15294 },
  26964   { 0x1d6ef, UNICODE_NOT_PRESENT_OFFSET, 15297 },
  26965   { 0x1d6f0, UNICODE_NOT_PRESENT_OFFSET, 15300 },
  26966   { 0x1d6f1, UNICODE_NOT_PRESENT_OFFSET, 5357 },
  26967   { 0x1d6f2, UNICODE_NOT_PRESENT_OFFSET, 15303 },
  26968   { 0x1d6f3, UNICODE_NOT_PRESENT_OFFSET, 1402 },
  26969   { 0x1d6f4, UNICODE_NOT_PRESENT_OFFSET, 1408 },
  26970   { 0x1d6f5, UNICODE_NOT_PRESENT_OFFSET, 15306 },
  26971   { 0x1d6f6, UNICODE_NOT_PRESENT_OFFSET, 1374 },
  26972   { 0x1d6f7, UNICODE_NOT_PRESENT_OFFSET, 15309 },
  26973   { 0x1d6f8, UNICODE_NOT_PRESENT_OFFSET, 15312 },
  26974   { 0x1d6f9, UNICODE_NOT_PRESENT_OFFSET, 15315 },
  26975   { 0x1d6fa, UNICODE_NOT_PRESENT_OFFSET, 5333 },
  26976   { 0x1d6fb, UNICODE_NOT_PRESENT_OFFSET, 15318 },
  26977   { 0x1d6fc, UNICODE_NOT_PRESENT_OFFSET, 15322 },
  26978   { 0x1d6fd, UNICODE_NOT_PRESENT_OFFSET, 1368 },
  26979   { 0x1d6fe, UNICODE_NOT_PRESENT_OFFSET, 2418 },
  26980   { 0x1d6ff, UNICODE_NOT_PRESENT_OFFSET, 2421 },
  26981   { 0x1d700, UNICODE_NOT_PRESENT_OFFSET, 1405 },
  26982   { 0x1d701, UNICODE_NOT_PRESENT_OFFSET, 15325 },
  26983   { 0x1d702, UNICODE_NOT_PRESENT_OFFSET, 15328 },
  26984   { 0x1d703, UNICODE_NOT_PRESENT_OFFSET, 1371 },
  26985   { 0x1d704, UNICODE_NOT_PRESENT_OFFSET, 4860 },
  26986   { 0x1d705, UNICODE_NOT_PRESENT_OFFSET, 1393 },
  26987   { 0x1d706, UNICODE_NOT_PRESENT_OFFSET, 15331 },
  26988   { 0x1d707, UNICODE_NOT_PRESENT_OFFSET, 20 },
  26989   { 0x1d708, UNICODE_NOT_PRESENT_OFFSET, 15334 },
  26990   { 0x1d709, UNICODE_NOT_PRESENT_OFFSET, 15337 },
  26991   { 0x1d70a, UNICODE_NOT_PRESENT_OFFSET, 15340 },
  26992   { 0x1d70b, UNICODE_NOT_PRESENT_OFFSET, 1390 },
  26993   { 0x1d70c, UNICODE_NOT_PRESENT_OFFSET, 1396 },
  26994   { 0x1d70d, UNICODE_NOT_PRESENT_OFFSET, 1399 },
  26995   { 0x1d70e, UNICODE_NOT_PRESENT_OFFSET, 15343 },
  26996   { 0x1d70f, UNICODE_NOT_PRESENT_OFFSET, 15346 },
  26997   { 0x1d710, UNICODE_NOT_PRESENT_OFFSET, 15349 },
  26998   { 0x1d711, UNICODE_NOT_PRESENT_OFFSET, 1387 },
  26999   { 0x1d712, UNICODE_NOT_PRESENT_OFFSET, 2424 },
  27000   { 0x1d713, UNICODE_NOT_PRESENT_OFFSET, 15352 },
  27001   { 0x1d714, UNICODE_NOT_PRESENT_OFFSET, 15355 },
  27002   { 0x1d715, UNICODE_NOT_PRESENT_OFFSET, 15358 },
  27003   { 0x1d716, UNICODE_NOT_PRESENT_OFFSET, 1405 },
  27004   { 0x1d717, UNICODE_NOT_PRESENT_OFFSET, 1371 },
  27005   { 0x1d718, UNICODE_NOT_PRESENT_OFFSET, 1393 },
  27006   { 0x1d719, UNICODE_NOT_PRESENT_OFFSET, 1387 },
  27007   { 0x1d71a, UNICODE_NOT_PRESENT_OFFSET, 1396 },
  27008   { 0x1d71b, UNICODE_NOT_PRESENT_OFFSET, 1390 },
  27009   { 0x1d71c, UNICODE_NOT_PRESENT_OFFSET, 15264 },
  27010   { 0x1d71d, UNICODE_NOT_PRESENT_OFFSET, 15267 },
  27011   { 0x1d71e, UNICODE_NOT_PRESENT_OFFSET, 5354 },
  27012   { 0x1d71f, UNICODE_NOT_PRESENT_OFFSET, 15270 },
  27013   { 0x1d720, UNICODE_NOT_PRESENT_OFFSET, 15273 },
  27014   { 0x1d721, UNICODE_NOT_PRESENT_OFFSET, 15276 },
  27015   { 0x1d722, UNICODE_NOT_PRESENT_OFFSET, 15279 },
  27016   { 0x1d723, UNICODE_NOT_PRESENT_OFFSET, 1402 },
  27017   { 0x1d724, UNICODE_NOT_PRESENT_OFFSET, 15282 },
  27018   { 0x1d725, UNICODE_NOT_PRESENT_OFFSET, 15285 },
  27019   { 0x1d726, UNICODE_NOT_PRESENT_OFFSET, 15288 },
  27020   { 0x1d727, UNICODE_NOT_PRESENT_OFFSET, 15291 },
  27021   { 0x1d728, UNICODE_NOT_PRESENT_OFFSET, 15294 },
  27022   { 0x1d729, UNICODE_NOT_PRESENT_OFFSET, 15297 },
  27023   { 0x1d72a, UNICODE_NOT_PRESENT_OFFSET, 15300 },
  27024   { 0x1d72b, UNICODE_NOT_PRESENT_OFFSET, 5357 },
  27025   { 0x1d72c, UNICODE_NOT_PRESENT_OFFSET, 15303 },
  27026   { 0x1d72d, UNICODE_NOT_PRESENT_OFFSET, 1402 },
  27027   { 0x1d72e, UNICODE_NOT_PRESENT_OFFSET, 1408 },
  27028   { 0x1d72f, UNICODE_NOT_PRESENT_OFFSET, 15306 },
  27029   { 0x1d730, UNICODE_NOT_PRESENT_OFFSET, 1374 },
  27030   { 0x1d731, UNICODE_NOT_PRESENT_OFFSET, 15309 },
  27031   { 0x1d732, UNICODE_NOT_PRESENT_OFFSET, 15312 },
  27032   { 0x1d733, UNICODE_NOT_PRESENT_OFFSET, 15315 },
  27033   { 0x1d734, UNICODE_NOT_PRESENT_OFFSET, 5333 },
  27034   { 0x1d735, UNICODE_NOT_PRESENT_OFFSET, 15318 },
  27035   { 0x1d736, UNICODE_NOT_PRESENT_OFFSET, 15322 },
  27036   { 0x1d737, UNICODE_NOT_PRESENT_OFFSET, 1368 },
  27037   { 0x1d738, UNICODE_NOT_PRESENT_OFFSET, 2418 },
  27038   { 0x1d739, UNICODE_NOT_PRESENT_OFFSET, 2421 },
  27039   { 0x1d73a, UNICODE_NOT_PRESENT_OFFSET, 1405 },
  27040   { 0x1d73b, UNICODE_NOT_PRESENT_OFFSET, 15325 },
  27041   { 0x1d73c, UNICODE_NOT_PRESENT_OFFSET, 15328 },
  27042   { 0x1d73d, UNICODE_NOT_PRESENT_OFFSET, 1371 },
  27043   { 0x1d73e, UNICODE_NOT_PRESENT_OFFSET, 4860 },
  27044   { 0x1d73f, UNICODE_NOT_PRESENT_OFFSET, 1393 },
  27045   { 0x1d740, UNICODE_NOT_PRESENT_OFFSET, 15331 },
  27046   { 0x1d741, UNICODE_NOT_PRESENT_OFFSET, 20 },
  27047   { 0x1d742, UNICODE_NOT_PRESENT_OFFSET, 15334 },
  27048   { 0x1d743, UNICODE_NOT_PRESENT_OFFSET, 15337 },
  27049   { 0x1d744, UNICODE_NOT_PRESENT_OFFSET, 15340 },
  27050   { 0x1d745, UNICODE_NOT_PRESENT_OFFSET, 1390 },
  27051   { 0x1d746, UNICODE_NOT_PRESENT_OFFSET, 1396 },
  27052   { 0x1d747, UNICODE_NOT_PRESENT_OFFSET, 1399 },
  27053   { 0x1d748, UNICODE_NOT_PRESENT_OFFSET, 15343 },
  27054   { 0x1d749, UNICODE_NOT_PRESENT_OFFSET, 15346 },
  27055   { 0x1d74a, UNICODE_NOT_PRESENT_OFFSET, 15349 },
  27056   { 0x1d74b, UNICODE_NOT_PRESENT_OFFSET, 1387 },
  27057   { 0x1d74c, UNICODE_NOT_PRESENT_OFFSET, 2424 },
  27058   { 0x1d74d, UNICODE_NOT_PRESENT_OFFSET, 15352 },
  27059   { 0x1d74e, UNICODE_NOT_PRESENT_OFFSET, 15355 },
  27060   { 0x1d74f, UNICODE_NOT_PRESENT_OFFSET, 15358 },
  27061   { 0x1d750, UNICODE_NOT_PRESENT_OFFSET, 1405 },
  27062   { 0x1d751, UNICODE_NOT_PRESENT_OFFSET, 1371 },
  27063   { 0x1d752, UNICODE_NOT_PRESENT_OFFSET, 1393 },
  27064   { 0x1d753, UNICODE_NOT_PRESENT_OFFSET, 1387 },
  27065   { 0x1d754, UNICODE_NOT_PRESENT_OFFSET, 1396 },
  27066   { 0x1d755, UNICODE_NOT_PRESENT_OFFSET, 1390 },
  27067   { 0x1d756, UNICODE_NOT_PRESENT_OFFSET, 15264 },
  27068   { 0x1d757, UNICODE_NOT_PRESENT_OFFSET, 15267 },
  27069   { 0x1d758, UNICODE_NOT_PRESENT_OFFSET, 5354 },
  27070   { 0x1d759, UNICODE_NOT_PRESENT_OFFSET, 15270 },
  27071   { 0x1d75a, UNICODE_NOT_PRESENT_OFFSET, 15273 },
  27072   { 0x1d75b, UNICODE_NOT_PRESENT_OFFSET, 15276 },
  27073   { 0x1d75c, UNICODE_NOT_PRESENT_OFFSET, 15279 },
  27074   { 0x1d75d, UNICODE_NOT_PRESENT_OFFSET, 1402 },
  27075   { 0x1d75e, UNICODE_NOT_PRESENT_OFFSET, 15282 },
  27076   { 0x1d75f, UNICODE_NOT_PRESENT_OFFSET, 15285 },
  27077   { 0x1d760, UNICODE_NOT_PRESENT_OFFSET, 15288 },
  27078   { 0x1d761, UNICODE_NOT_PRESENT_OFFSET, 15291 },
  27079   { 0x1d762, UNICODE_NOT_PRESENT_OFFSET, 15294 },
  27080   { 0x1d763, UNICODE_NOT_PRESENT_OFFSET, 15297 },
  27081   { 0x1d764, UNICODE_NOT_PRESENT_OFFSET, 15300 },
  27082   { 0x1d765, UNICODE_NOT_PRESENT_OFFSET, 5357 },
  27083   { 0x1d766, UNICODE_NOT_PRESENT_OFFSET, 15303 },
  27084   { 0x1d767, UNICODE_NOT_PRESENT_OFFSET, 1402 },
  27085   { 0x1d768, UNICODE_NOT_PRESENT_OFFSET, 1408 },
  27086   { 0x1d769, UNICODE_NOT_PRESENT_OFFSET, 15306 },
  27087   { 0x1d76a, UNICODE_NOT_PRESENT_OFFSET, 1374 },
  27088   { 0x1d76b, UNICODE_NOT_PRESENT_OFFSET, 15309 },
  27089   { 0x1d76c, UNICODE_NOT_PRESENT_OFFSET, 15312 },
  27090   { 0x1d76d, UNICODE_NOT_PRESENT_OFFSET, 15315 },
  27091   { 0x1d76e, UNICODE_NOT_PRESENT_OFFSET, 5333 },
  27092   { 0x1d76f, UNICODE_NOT_PRESENT_OFFSET, 15318 },
  27093   { 0x1d770, UNICODE_NOT_PRESENT_OFFSET, 15322 },
  27094   { 0x1d771, UNICODE_NOT_PRESENT_OFFSET, 1368 },
  27095   { 0x1d772, UNICODE_NOT_PRESENT_OFFSET, 2418 },
  27096   { 0x1d773, UNICODE_NOT_PRESENT_OFFSET, 2421 },
  27097   { 0x1d774, UNICODE_NOT_PRESENT_OFFSET, 1405 },
  27098   { 0x1d775, UNICODE_NOT_PRESENT_OFFSET, 15325 },
  27099   { 0x1d776, UNICODE_NOT_PRESENT_OFFSET, 15328 },
  27100   { 0x1d777, UNICODE_NOT_PRESENT_OFFSET, 1371 },
  27101   { 0x1d778, UNICODE_NOT_PRESENT_OFFSET, 4860 },
  27102   { 0x1d779, UNICODE_NOT_PRESENT_OFFSET, 1393 },
  27103   { 0x1d77a, UNICODE_NOT_PRESENT_OFFSET, 15331 },
  27104   { 0x1d77b, UNICODE_NOT_PRESENT_OFFSET, 20 },
  27105   { 0x1d77c, UNICODE_NOT_PRESENT_OFFSET, 15334 },
  27106   { 0x1d77d, UNICODE_NOT_PRESENT_OFFSET, 15337 },
  27107   { 0x1d77e, UNICODE_NOT_PRESENT_OFFSET, 15340 },
  27108   { 0x1d77f, UNICODE_NOT_PRESENT_OFFSET, 1390 },
  27109   { 0x1d780, UNICODE_NOT_PRESENT_OFFSET, 1396 },
  27110   { 0x1d781, UNICODE_NOT_PRESENT_OFFSET, 1399 },
  27111   { 0x1d782, UNICODE_NOT_PRESENT_OFFSET, 15343 },
  27112   { 0x1d783, UNICODE_NOT_PRESENT_OFFSET, 15346 },
  27113   { 0x1d784, UNICODE_NOT_PRESENT_OFFSET, 15349 },
  27114   { 0x1d785, UNICODE_NOT_PRESENT_OFFSET, 1387 },
  27115   { 0x1d786, UNICODE_NOT_PRESENT_OFFSET, 2424 },
  27116   { 0x1d787, UNICODE_NOT_PRESENT_OFFSET, 15352 },
  27117   { 0x1d788, UNICODE_NOT_PRESENT_OFFSET, 15355 },
  27118   { 0x1d789, UNICODE_NOT_PRESENT_OFFSET, 15358 },
  27119   { 0x1d78a, UNICODE_NOT_PRESENT_OFFSET, 1405 },
  27120   { 0x1d78b, UNICODE_NOT_PRESENT_OFFSET, 1371 },
  27121   { 0x1d78c, UNICODE_NOT_PRESENT_OFFSET, 1393 },
  27122   { 0x1d78d, UNICODE_NOT_PRESENT_OFFSET, 1387 },
  27123   { 0x1d78e, UNICODE_NOT_PRESENT_OFFSET, 1396 },
  27124   { 0x1d78f, UNICODE_NOT_PRESENT_OFFSET, 1390 },
  27125   { 0x1d790, UNICODE_NOT_PRESENT_OFFSET, 15264 },
  27126   { 0x1d791, UNICODE_NOT_PRESENT_OFFSET, 15267 },
  27127   { 0x1d792, UNICODE_NOT_PRESENT_OFFSET, 5354 },
  27128   { 0x1d793, UNICODE_NOT_PRESENT_OFFSET, 15270 },
  27129   { 0x1d794, UNICODE_NOT_PRESENT_OFFSET, 15273 },
  27130   { 0x1d795, UNICODE_NOT_PRESENT_OFFSET, 15276 },
  27131   { 0x1d796, UNICODE_NOT_PRESENT_OFFSET, 15279 },
  27132   { 0x1d797, UNICODE_NOT_PRESENT_OFFSET, 1402 },
  27133   { 0x1d798, UNICODE_NOT_PRESENT_OFFSET, 15282 },
  27134   { 0x1d799, UNICODE_NOT_PRESENT_OFFSET, 15285 },
  27135   { 0x1d79a, UNICODE_NOT_PRESENT_OFFSET, 15288 },
  27136   { 0x1d79b, UNICODE_NOT_PRESENT_OFFSET, 15291 },
  27137   { 0x1d79c, UNICODE_NOT_PRESENT_OFFSET, 15294 },
  27138   { 0x1d79d, UNICODE_NOT_PRESENT_OFFSET, 15297 },
  27139   { 0x1d79e, UNICODE_NOT_PRESENT_OFFSET, 15300 },
  27140   { 0x1d79f, UNICODE_NOT_PRESENT_OFFSET, 5357 },
  27141   { 0x1d7a0, UNICODE_NOT_PRESENT_OFFSET, 15303 },
  27142   { 0x1d7a1, UNICODE_NOT_PRESENT_OFFSET, 1402 },
  27143   { 0x1d7a2, UNICODE_NOT_PRESENT_OFFSET, 1408 },
  27144   { 0x1d7a3, UNICODE_NOT_PRESENT_OFFSET, 15306 },
  27145   { 0x1d7a4, UNICODE_NOT_PRESENT_OFFSET, 1374 },
  27146   { 0x1d7a5, UNICODE_NOT_PRESENT_OFFSET, 15309 },
  27147   { 0x1d7a6, UNICODE_NOT_PRESENT_OFFSET, 15312 },
  27148   { 0x1d7a7, UNICODE_NOT_PRESENT_OFFSET, 15315 },
  27149   { 0x1d7a8, UNICODE_NOT_PRESENT_OFFSET, 5333 },
  27150   { 0x1d7a9, UNICODE_NOT_PRESENT_OFFSET, 15318 },
  27151   { 0x1d7aa, UNICODE_NOT_PRESENT_OFFSET, 15322 },
  27152   { 0x1d7ab, UNICODE_NOT_PRESENT_OFFSET, 1368 },
  27153   { 0x1d7ac, UNICODE_NOT_PRESENT_OFFSET, 2418 },
  27154   { 0x1d7ad, UNICODE_NOT_PRESENT_OFFSET, 2421 },
  27155   { 0x1d7ae, UNICODE_NOT_PRESENT_OFFSET, 1405 },
  27156   { 0x1d7af, UNICODE_NOT_PRESENT_OFFSET, 15325 },
  27157   { 0x1d7b0, UNICODE_NOT_PRESENT_OFFSET, 15328 },
  27158   { 0x1d7b1, UNICODE_NOT_PRESENT_OFFSET, 1371 },
  27159   { 0x1d7b2, UNICODE_NOT_PRESENT_OFFSET, 4860 },
  27160   { 0x1d7b3, UNICODE_NOT_PRESENT_OFFSET, 1393 },
  27161   { 0x1d7b4, UNICODE_NOT_PRESENT_OFFSET, 15331 },
  27162   { 0x1d7b5, UNICODE_NOT_PRESENT_OFFSET, 20 },
  27163   { 0x1d7b6, UNICODE_NOT_PRESENT_OFFSET, 15334 },
  27164   { 0x1d7b7, UNICODE_NOT_PRESENT_OFFSET, 15337 },
  27165   { 0x1d7b8, UNICODE_NOT_PRESENT_OFFSET, 15340 },
  27166   { 0x1d7b9, UNICODE_NOT_PRESENT_OFFSET, 1390 },
  27167   { 0x1d7ba, UNICODE_NOT_PRESENT_OFFSET, 1396 },
  27168   { 0x1d7bb, UNICODE_NOT_PRESENT_OFFSET, 1399 },
  27169   { 0x1d7bc, UNICODE_NOT_PRESENT_OFFSET, 15343 },
  27170   { 0x1d7bd, UNICODE_NOT_PRESENT_OFFSET, 15346 },
  27171   { 0x1d7be, UNICODE_NOT_PRESENT_OFFSET, 15349 },
  27172   { 0x1d7bf, UNICODE_NOT_PRESENT_OFFSET, 1387 },
  27173   { 0x1d7c0, UNICODE_NOT_PRESENT_OFFSET, 2424 },
  27174   { 0x1d7c1, UNICODE_NOT_PRESENT_OFFSET, 15352 },
  27175   { 0x1d7c2, UNICODE_NOT_PRESENT_OFFSET, 15355 },
  27176   { 0x1d7c3, UNICODE_NOT_PRESENT_OFFSET, 15358 },
  27177   { 0x1d7c4, UNICODE_NOT_PRESENT_OFFSET, 1405 },
  27178   { 0x1d7c5, UNICODE_NOT_PRESENT_OFFSET, 1371 },
  27179   { 0x1d7c6, UNICODE_NOT_PRESENT_OFFSET, 1393 },
  27180   { 0x1d7c7, UNICODE_NOT_PRESENT_OFFSET, 1387 },
  27181   { 0x1d7c8, UNICODE_NOT_PRESENT_OFFSET, 1396 },
  27182   { 0x1d7c9, UNICODE_NOT_PRESENT_OFFSET, 1390 },
  27183   { 0x1d7ca, UNICODE_NOT_PRESENT_OFFSET, 15362 },
  27184   { 0x1d7cb, UNICODE_NOT_PRESENT_OFFSET, 15365 },
  27185   { 0x1d7ce, UNICODE_NOT_PRESENT_OFFSET, 5253 },
  27186   { 0x1d7cf, UNICODE_NOT_PRESENT_OFFSET, 27 },
  27187   { 0x1d7d0, UNICODE_NOT_PRESENT_OFFSET, 12 },
  27188   { 0x1d7d1, UNICODE_NOT_PRESENT_OFFSET, 14 },
  27189   { 0x1d7d2, UNICODE_NOT_PRESENT_OFFSET, 5255 },
  27190   { 0x1d7d3, UNICODE_NOT_PRESENT_OFFSET, 5257 },
  27191   { 0x1d7d4, UNICODE_NOT_PRESENT_OFFSET, 5259 },
  27192   { 0x1d7d5, UNICODE_NOT_PRESENT_OFFSET, 5261 },
  27193   { 0x1d7d6, UNICODE_NOT_PRESENT_OFFSET, 5263 },
  27194   { 0x1d7d7, UNICODE_NOT_PRESENT_OFFSET, 5265 },
  27195   { 0x1d7d8, UNICODE_NOT_PRESENT_OFFSET, 5253 },
  27196   { 0x1d7d9, UNICODE_NOT_PRESENT_OFFSET, 27 },
  27197   { 0x1d7da, UNICODE_NOT_PRESENT_OFFSET, 12 },
  27198   { 0x1d7db, UNICODE_NOT_PRESENT_OFFSET, 14 },
  27199   { 0x1d7dc, UNICODE_NOT_PRESENT_OFFSET, 5255 },
  27200   { 0x1d7dd, UNICODE_NOT_PRESENT_OFFSET, 5257 },
  27201   { 0x1d7de, UNICODE_NOT_PRESENT_OFFSET, 5259 },
  27202   { 0x1d7df, UNICODE_NOT_PRESENT_OFFSET, 5261 },
  27203   { 0x1d7e0, UNICODE_NOT_PRESENT_OFFSET, 5263 },
  27204   { 0x1d7e1, UNICODE_NOT_PRESENT_OFFSET, 5265 },
  27205   { 0x1d7e2, UNICODE_NOT_PRESENT_OFFSET, 5253 },
  27206   { 0x1d7e3, UNICODE_NOT_PRESENT_OFFSET, 27 },
  27207   { 0x1d7e4, UNICODE_NOT_PRESENT_OFFSET, 12 },
  27208   { 0x1d7e5, UNICODE_NOT_PRESENT_OFFSET, 14 },
  27209   { 0x1d7e6, UNICODE_NOT_PRESENT_OFFSET, 5255 },
  27210   { 0x1d7e7, UNICODE_NOT_PRESENT_OFFSET, 5257 },
  27211   { 0x1d7e8, UNICODE_NOT_PRESENT_OFFSET, 5259 },
  27212   { 0x1d7e9, UNICODE_NOT_PRESENT_OFFSET, 5261 },
  27213   { 0x1d7ea, UNICODE_NOT_PRESENT_OFFSET, 5263 },
  27214   { 0x1d7eb, UNICODE_NOT_PRESENT_OFFSET, 5265 },
  27215   { 0x1d7ec, UNICODE_NOT_PRESENT_OFFSET, 5253 },
  27216   { 0x1d7ed, UNICODE_NOT_PRESENT_OFFSET, 27 },
  27217   { 0x1d7ee, UNICODE_NOT_PRESENT_OFFSET, 12 },
  27218   { 0x1d7ef, UNICODE_NOT_PRESENT_OFFSET, 14 },
  27219   { 0x1d7f0, UNICODE_NOT_PRESENT_OFFSET, 5255 },
  27220   { 0x1d7f1, UNICODE_NOT_PRESENT_OFFSET, 5257 },
  27221   { 0x1d7f2, UNICODE_NOT_PRESENT_OFFSET, 5259 },
  27222   { 0x1d7f3, UNICODE_NOT_PRESENT_OFFSET, 5261 },
  27223   { 0x1d7f4, UNICODE_NOT_PRESENT_OFFSET, 5263 },
  27224   { 0x1d7f5, UNICODE_NOT_PRESENT_OFFSET, 5265 },
  27225   { 0x1d7f6, UNICODE_NOT_PRESENT_OFFSET, 5253 },
  27226   { 0x1d7f7, UNICODE_NOT_PRESENT_OFFSET, 27 },
  27227   { 0x1d7f8, UNICODE_NOT_PRESENT_OFFSET, 12 },
  27228   { 0x1d7f9, UNICODE_NOT_PRESENT_OFFSET, 14 },
  27229   { 0x1d7fa, UNICODE_NOT_PRESENT_OFFSET, 5255 },
  27230   { 0x1d7fb, UNICODE_NOT_PRESENT_OFFSET, 5257 },
  27231   { 0x1d7fc, UNICODE_NOT_PRESENT_OFFSET, 5259 },
  27232   { 0x1d7fd, UNICODE_NOT_PRESENT_OFFSET, 5261 },
  27233   { 0x1d7fe, UNICODE_NOT_PRESENT_OFFSET, 5263 },
  27234   { 0x1d7ff, UNICODE_NOT_PRESENT_OFFSET, 5265 },
  27235   { 0x1ee00, UNICODE_NOT_PRESENT_OFFSET, 14761 },
  27236   { 0x1ee01, UNICODE_NOT_PRESENT_OFFSET, 14764 },
  27237   { 0x1ee02, UNICODE_NOT_PRESENT_OFFSET, 14776 },
  27238   { 0x1ee03, UNICODE_NOT_PRESENT_OFFSET, 14785 },
  27239   { 0x1ee05, UNICODE_NOT_PRESENT_OFFSET, 14842 },
  27240   { 0x1ee06, UNICODE_NOT_PRESENT_OFFSET, 14794 },
  27241   { 0x1ee07, UNICODE_NOT_PRESENT_OFFSET, 14779 },
  27242   { 0x1ee08, UNICODE_NOT_PRESENT_OFFSET, 14809 },
  27243   { 0x1ee09, UNICODE_NOT_PRESENT_OFFSET, 14845 },
  27244   { 0x1ee0a, UNICODE_NOT_PRESENT_OFFSET, 14827 },
  27245   { 0x1ee0b, UNICODE_NOT_PRESENT_OFFSET, 14830 },
  27246   { 0x1ee0c, UNICODE_NOT_PRESENT_OFFSET, 14833 },
  27247   { 0x1ee0d, UNICODE_NOT_PRESENT_OFFSET, 14836 },
  27248   { 0x1ee0e, UNICODE_NOT_PRESENT_OFFSET, 14797 },
  27249   { 0x1ee0f, UNICODE_NOT_PRESENT_OFFSET, 14815 },
  27250   { 0x1ee10, UNICODE_NOT_PRESENT_OFFSET, 14821 },
  27251   { 0x1ee11, UNICODE_NOT_PRESENT_OFFSET, 14803 },
  27252   { 0x1ee12, UNICODE_NOT_PRESENT_OFFSET, 14824 },
  27253   { 0x1ee13, UNICODE_NOT_PRESENT_OFFSET, 14791 },
  27254   { 0x1ee14, UNICODE_NOT_PRESENT_OFFSET, 14800 },
  27255   { 0x1ee15, UNICODE_NOT_PRESENT_OFFSET, 14770 },
  27256   { 0x1ee16, UNICODE_NOT_PRESENT_OFFSET, 14773 },
  27257   { 0x1ee17, UNICODE_NOT_PRESENT_OFFSET, 14782 },
  27258   { 0x1ee18, UNICODE_NOT_PRESENT_OFFSET, 14788 },
  27259   { 0x1ee19, UNICODE_NOT_PRESENT_OFFSET, 14806 },
  27260   { 0x1ee1a, UNICODE_NOT_PRESENT_OFFSET, 14812 },
  27261   { 0x1ee1b, UNICODE_NOT_PRESENT_OFFSET, 14818 },
  27262   { 0x1ee1c, UNICODE_NOT_PRESENT_OFFSET, 15368 },
  27263   { 0x1ee1d, UNICODE_NOT_PRESENT_OFFSET, 12852 },
  27264   { 0x1ee1e, UNICODE_NOT_PRESENT_OFFSET, 15371 },
  27265   { 0x1ee1f, UNICODE_NOT_PRESENT_OFFSET, 15374 },
  27266   { 0x1ee21, UNICODE_NOT_PRESENT_OFFSET, 14764 },
  27267   { 0x1ee22, UNICODE_NOT_PRESENT_OFFSET, 14776 },
  27268   { 0x1ee24, UNICODE_NOT_PRESENT_OFFSET, 14839 },
  27269   { 0x1ee27, UNICODE_NOT_PRESENT_OFFSET, 14779 },
  27270   { 0x1ee29, UNICODE_NOT_PRESENT_OFFSET, 14845 },
  27271   { 0x1ee2a, UNICODE_NOT_PRESENT_OFFSET, 14827 },
  27272   { 0x1ee2b, UNICODE_NOT_PRESENT_OFFSET, 14830 },
  27273   { 0x1ee2c, UNICODE_NOT_PRESENT_OFFSET, 14833 },
  27274   { 0x1ee2d, UNICODE_NOT_PRESENT_OFFSET, 14836 },
  27275   { 0x1ee2e, UNICODE_NOT_PRESENT_OFFSET, 14797 },
  27276   { 0x1ee2f, UNICODE_NOT_PRESENT_OFFSET, 14815 },
  27277   { 0x1ee30, UNICODE_NOT_PRESENT_OFFSET, 14821 },
  27278   { 0x1ee31, UNICODE_NOT_PRESENT_OFFSET, 14803 },
  27279   { 0x1ee32, UNICODE_NOT_PRESENT_OFFSET, 14824 },
  27280   { 0x1ee34, UNICODE_NOT_PRESENT_OFFSET, 14800 },
  27281   { 0x1ee35, UNICODE_NOT_PRESENT_OFFSET, 14770 },
  27282   { 0x1ee36, UNICODE_NOT_PRESENT_OFFSET, 14773 },
  27283   { 0x1ee37, UNICODE_NOT_PRESENT_OFFSET, 14782 },
  27284   { 0x1ee39, UNICODE_NOT_PRESENT_OFFSET, 14806 },
  27285   { 0x1ee3b, UNICODE_NOT_PRESENT_OFFSET, 14818 },
  27286   { 0x1ee42, UNICODE_NOT_PRESENT_OFFSET, 14776 },
  27287   { 0x1ee47, UNICODE_NOT_PRESENT_OFFSET, 14779 },
  27288   { 0x1ee49, UNICODE_NOT_PRESENT_OFFSET, 14845 },
  27289   { 0x1ee4b, UNICODE_NOT_PRESENT_OFFSET, 14830 },
  27290   { 0x1ee4d, UNICODE_NOT_PRESENT_OFFSET, 14836 },
  27291   { 0x1ee4e, UNICODE_NOT_PRESENT_OFFSET, 14797 },
  27292   { 0x1ee4f, UNICODE_NOT_PRESENT_OFFSET, 14815 },
  27293   { 0x1ee51, UNICODE_NOT_PRESENT_OFFSET, 14803 },
  27294   { 0x1ee52, UNICODE_NOT_PRESENT_OFFSET, 14824 },
  27295   { 0x1ee54, UNICODE_NOT_PRESENT_OFFSET, 14800 },
  27296   { 0x1ee57, UNICODE_NOT_PRESENT_OFFSET, 14782 },
  27297   { 0x1ee59, UNICODE_NOT_PRESENT_OFFSET, 14806 },
  27298   { 0x1ee5b, UNICODE_NOT_PRESENT_OFFSET, 14818 },
  27299   { 0x1ee5d, UNICODE_NOT_PRESENT_OFFSET, 12852 },
  27300   { 0x1ee5f, UNICODE_NOT_PRESENT_OFFSET, 15374 },
  27301   { 0x1ee61, UNICODE_NOT_PRESENT_OFFSET, 14764 },
  27302   { 0x1ee62, UNICODE_NOT_PRESENT_OFFSET, 14776 },
  27303   { 0x1ee64, UNICODE_NOT_PRESENT_OFFSET, 14839 },
  27304   { 0x1ee67, UNICODE_NOT_PRESENT_OFFSET, 14779 },
  27305   { 0x1ee68, UNICODE_NOT_PRESENT_OFFSET, 14809 },
  27306   { 0x1ee69, UNICODE_NOT_PRESENT_OFFSET, 14845 },
  27307   { 0x1ee6a, UNICODE_NOT_PRESENT_OFFSET, 14827 },
  27308   { 0x1ee6c, UNICODE_NOT_PRESENT_OFFSET, 14833 },
  27309   { 0x1ee6d, UNICODE_NOT_PRESENT_OFFSET, 14836 },
  27310   { 0x1ee6e, UNICODE_NOT_PRESENT_OFFSET, 14797 },
  27311   { 0x1ee6f, UNICODE_NOT_PRESENT_OFFSET, 14815 },
  27312   { 0x1ee70, UNICODE_NOT_PRESENT_OFFSET, 14821 },
  27313   { 0x1ee71, UNICODE_NOT_PRESENT_OFFSET, 14803 },
  27314   { 0x1ee72, UNICODE_NOT_PRESENT_OFFSET, 14824 },
  27315   { 0x1ee74, UNICODE_NOT_PRESENT_OFFSET, 14800 },
  27316   { 0x1ee75, UNICODE_NOT_PRESENT_OFFSET, 14770 },
  27317   { 0x1ee76, UNICODE_NOT_PRESENT_OFFSET, 14773 },
  27318   { 0x1ee77, UNICODE_NOT_PRESENT_OFFSET, 14782 },
  27319   { 0x1ee79, UNICODE_NOT_PRESENT_OFFSET, 14806 },
  27320   { 0x1ee7a, UNICODE_NOT_PRESENT_OFFSET, 14812 },
  27321   { 0x1ee7b, UNICODE_NOT_PRESENT_OFFSET, 14818 },
  27322   { 0x1ee7c, UNICODE_NOT_PRESENT_OFFSET, 15368 },
  27323   { 0x1ee7e, UNICODE_NOT_PRESENT_OFFSET, 15371 },
  27324   { 0x1ee80, UNICODE_NOT_PRESENT_OFFSET, 14761 },
  27325   { 0x1ee81, UNICODE_NOT_PRESENT_OFFSET, 14764 },
  27326   { 0x1ee82, UNICODE_NOT_PRESENT_OFFSET, 14776 },
  27327   { 0x1ee83, UNICODE_NOT_PRESENT_OFFSET, 14785 },
  27328   { 0x1ee84, UNICODE_NOT_PRESENT_OFFSET, 14839 },
  27329   { 0x1ee85, UNICODE_NOT_PRESENT_OFFSET, 14842 },
  27330   { 0x1ee86, UNICODE_NOT_PRESENT_OFFSET, 14794 },
  27331   { 0x1ee87, UNICODE_NOT_PRESENT_OFFSET, 14779 },
  27332   { 0x1ee88, UNICODE_NOT_PRESENT_OFFSET, 14809 },
  27333   { 0x1ee89, UNICODE_NOT_PRESENT_OFFSET, 14845 },
  27334   { 0x1ee8b, UNICODE_NOT_PRESENT_OFFSET, 14830 },
  27335   { 0x1ee8c, UNICODE_NOT_PRESENT_OFFSET, 14833 },
  27336   { 0x1ee8d, UNICODE_NOT_PRESENT_OFFSET, 14836 },
  27337   { 0x1ee8e, UNICODE_NOT_PRESENT_OFFSET, 14797 },
  27338   { 0x1ee8f, UNICODE_NOT_PRESENT_OFFSET, 14815 },
  27339   { 0x1ee90, UNICODE_NOT_PRESENT_OFFSET, 14821 },
  27340   { 0x1ee91, UNICODE_NOT_PRESENT_OFFSET, 14803 },
  27341   { 0x1ee92, UNICODE_NOT_PRESENT_OFFSET, 14824 },
  27342   { 0x1ee93, UNICODE_NOT_PRESENT_OFFSET, 14791 },
  27343   { 0x1ee94, UNICODE_NOT_PRESENT_OFFSET, 14800 },
  27344   { 0x1ee95, UNICODE_NOT_PRESENT_OFFSET, 14770 },
  27345   { 0x1ee96, UNICODE_NOT_PRESENT_OFFSET, 14773 },
  27346   { 0x1ee97, UNICODE_NOT_PRESENT_OFFSET, 14782 },
  27347   { 0x1ee98, UNICODE_NOT_PRESENT_OFFSET, 14788 },
  27348   { 0x1ee99, UNICODE_NOT_PRESENT_OFFSET, 14806 },
  27349   { 0x1ee9a, UNICODE_NOT_PRESENT_OFFSET, 14812 },
  27350   { 0x1ee9b, UNICODE_NOT_PRESENT_OFFSET, 14818 },
  27351   { 0x1eea1, UNICODE_NOT_PRESENT_OFFSET, 14764 },
  27352   { 0x1eea2, UNICODE_NOT_PRESENT_OFFSET, 14776 },
  27353   { 0x1eea3, UNICODE_NOT_PRESENT_OFFSET, 14785 },
  27354   { 0x1eea5, UNICODE_NOT_PRESENT_OFFSET, 14842 },
  27355   { 0x1eea6, UNICODE_NOT_PRESENT_OFFSET, 14794 },
  27356   { 0x1eea7, UNICODE_NOT_PRESENT_OFFSET, 14779 },
  27357   { 0x1eea8, UNICODE_NOT_PRESENT_OFFSET, 14809 },
  27358   { 0x1eea9, UNICODE_NOT_PRESENT_OFFSET, 14845 },
  27359   { 0x1eeab, UNICODE_NOT_PRESENT_OFFSET, 14830 },
  27360   { 0x1eeac, UNICODE_NOT_PRESENT_OFFSET, 14833 },
  27361   { 0x1eead, UNICODE_NOT_PRESENT_OFFSET, 14836 },
  27362   { 0x1eeae, UNICODE_NOT_PRESENT_OFFSET, 14797 },
  27363   { 0x1eeaf, UNICODE_NOT_PRESENT_OFFSET, 14815 },
  27364   { 0x1eeb0, UNICODE_NOT_PRESENT_OFFSET, 14821 },
  27365   { 0x1eeb1, UNICODE_NOT_PRESENT_OFFSET, 14803 },
  27366   { 0x1eeb2, UNICODE_NOT_PRESENT_OFFSET, 14824 },
  27367   { 0x1eeb3, UNICODE_NOT_PRESENT_OFFSET, 14791 },
  27368   { 0x1eeb4, UNICODE_NOT_PRESENT_OFFSET, 14800 },
  27369   { 0x1eeb5, UNICODE_NOT_PRESENT_OFFSET, 14770 },
  27370   { 0x1eeb6, UNICODE_NOT_PRESENT_OFFSET, 14773 },
  27371   { 0x1eeb7, UNICODE_NOT_PRESENT_OFFSET, 14782 },
  27372   { 0x1eeb8, UNICODE_NOT_PRESENT_OFFSET, 14788 },
  27373   { 0x1eeb9, UNICODE_NOT_PRESENT_OFFSET, 14806 },
  27374   { 0x1eeba, UNICODE_NOT_PRESENT_OFFSET, 14812 },
  27375   { 0x1eebb, UNICODE_NOT_PRESENT_OFFSET, 14818 },
  27376   { 0x1f100, UNICODE_NOT_PRESENT_OFFSET, 15377 },
  27377   { 0x1f101, UNICODE_NOT_PRESENT_OFFSET, 15380 },
  27378   { 0x1f102, UNICODE_NOT_PRESENT_OFFSET, 15383 },
  27379   { 0x1f103, UNICODE_NOT_PRESENT_OFFSET, 15386 },
  27380   { 0x1f104, UNICODE_NOT_PRESENT_OFFSET, 15389 },
  27381   { 0x1f105, UNICODE_NOT_PRESENT_OFFSET, 15392 },
  27382   { 0x1f106, UNICODE_NOT_PRESENT_OFFSET, 15395 },
  27383   { 0x1f107, UNICODE_NOT_PRESENT_OFFSET, 15398 },
  27384   { 0x1f108, UNICODE_NOT_PRESENT_OFFSET, 15401 },
  27385   { 0x1f109, UNICODE_NOT_PRESENT_OFFSET, 15404 },
  27386   { 0x1f10a, UNICODE_NOT_PRESENT_OFFSET, 15407 },
  27387   { 0x1f110, UNICODE_NOT_PRESENT_OFFSET, 15410 },
  27388   { 0x1f111, UNICODE_NOT_PRESENT_OFFSET, 15414 },
  27389   { 0x1f112, UNICODE_NOT_PRESENT_OFFSET, 15418 },
  27390   { 0x1f113, UNICODE_NOT_PRESENT_OFFSET, 15422 },
  27391   { 0x1f114, UNICODE_NOT_PRESENT_OFFSET, 15426 },
  27392   { 0x1f115, UNICODE_NOT_PRESENT_OFFSET, 15430 },
  27393   { 0x1f116, UNICODE_NOT_PRESENT_OFFSET, 15434 },
  27394   { 0x1f117, UNICODE_NOT_PRESENT_OFFSET, 15438 },
  27395   { 0x1f118, UNICODE_NOT_PRESENT_OFFSET, 15442 },
  27396   { 0x1f119, UNICODE_NOT_PRESENT_OFFSET, 15446 },
  27397   { 0x1f11a, UNICODE_NOT_PRESENT_OFFSET, 15450 },
  27398   { 0x1f11b, UNICODE_NOT_PRESENT_OFFSET, 15454 },
  27399   { 0x1f11c, UNICODE_NOT_PRESENT_OFFSET, 15458 },
  27400   { 0x1f11d, UNICODE_NOT_PRESENT_OFFSET, 15462 },
  27401   { 0x1f11e, UNICODE_NOT_PRESENT_OFFSET, 15466 },
  27402   { 0x1f11f, UNICODE_NOT_PRESENT_OFFSET, 15470 },
  27403   { 0x1f120, UNICODE_NOT_PRESENT_OFFSET, 15474 },
  27404   { 0x1f121, UNICODE_NOT_PRESENT_OFFSET, 15478 },
  27405   { 0x1f122, UNICODE_NOT_PRESENT_OFFSET, 15482 },
  27406   { 0x1f123, UNICODE_NOT_PRESENT_OFFSET, 15486 },
  27407   { 0x1f124, UNICODE_NOT_PRESENT_OFFSET, 15490 },
  27408   { 0x1f125, UNICODE_NOT_PRESENT_OFFSET, 15494 },
  27409   { 0x1f126, UNICODE_NOT_PRESENT_OFFSET, 15498 },
  27410   { 0x1f127, UNICODE_NOT_PRESENT_OFFSET, 15502 },
  27411   { 0x1f128, UNICODE_NOT_PRESENT_OFFSET, 15506 },
  27412   { 0x1f129, UNICODE_NOT_PRESENT_OFFSET, 15510 },
  27413   { 0x1f12a, UNICODE_NOT_PRESENT_OFFSET, 15514 },
  27414   { 0x1f12b, UNICODE_NOT_PRESENT_OFFSET, 5292 },
  27415   { 0x1f12c, UNICODE_NOT_PRESENT_OFFSET, 2346 },
  27416   { 0x1f12d, UNICODE_NOT_PRESENT_OFFSET, 15522 },
  27417   { 0x1f12e, UNICODE_NOT_PRESENT_OFFSET, 15525 },
  27418   { 0x1f130, UNICODE_NOT_PRESENT_OFFSET, 2309 },
  27419   { 0x1f131, UNICODE_NOT_PRESENT_OFFSET, 2314 },
  27420   { 0x1f132, UNICODE_NOT_PRESENT_OFFSET, 5292 },
  27421   { 0x1f133, UNICODE_NOT_PRESENT_OFFSET, 2316 },
  27422   { 0x1f134, UNICODE_NOT_PRESENT_OFFSET, 2318 },
  27423   { 0x1f135, UNICODE_NOT_PRESENT_OFFSET, 5336 },
  27424   { 0x1f136, UNICODE_NOT_PRESENT_OFFSET, 2323 },
  27425   { 0x1f137, UNICODE_NOT_PRESENT_OFFSET, 2325 },
  27426   { 0x1f138, UNICODE_NOT_PRESENT_OFFSET, 2327 },
  27427   { 0x1f139, UNICODE_NOT_PRESENT_OFFSET, 2329 },
  27428   { 0x1f13a, UNICODE_NOT_PRESENT_OFFSET, 2331 },
  27429   { 0x1f13b, UNICODE_NOT_PRESENT_OFFSET, 2333 },
  27430   { 0x1f13c, UNICODE_NOT_PRESENT_OFFSET, 2335 },
  27431   { 0x1f13d, UNICODE_NOT_PRESENT_OFFSET, 2337 },
  27432   { 0x1f13e, UNICODE_NOT_PRESENT_OFFSET, 2339 },
  27433   { 0x1f13f, UNICODE_NOT_PRESENT_OFFSET, 2344 },
  27434   { 0x1f140, UNICODE_NOT_PRESENT_OFFSET, 5319 },
  27435   { 0x1f141, UNICODE_NOT_PRESENT_OFFSET, 2346 },
  27436   { 0x1f142, UNICODE_NOT_PRESENT_OFFSET, 6133 },
  27437   { 0x1f143, UNICODE_NOT_PRESENT_OFFSET, 2348 },
  27438   { 0x1f144, UNICODE_NOT_PRESENT_OFFSET, 2350 },
  27439   { 0x1f145, UNICODE_NOT_PRESENT_OFFSET, 5470 },
  27440   { 0x1f146, UNICODE_NOT_PRESENT_OFFSET, 2352 },
  27441   { 0x1f147, UNICODE_NOT_PRESENT_OFFSET, 5487 },
  27442   { 0x1f148, UNICODE_NOT_PRESENT_OFFSET, 6135 },
  27443   { 0x1f149, UNICODE_NOT_PRESENT_OFFSET, 5331 },
  27444   { 0x1f14a, UNICODE_NOT_PRESENT_OFFSET, 15528 },
  27445   { 0x1f14b, UNICODE_NOT_PRESENT_OFFSET, 10556 },
  27446   { 0x1f14c, UNICODE_NOT_PRESENT_OFFSET, 15531 },
  27447   { 0x1f14d, UNICODE_NOT_PRESENT_OFFSET, 15534 },
  27448   { 0x1f14e, UNICODE_NOT_PRESENT_OFFSET, 15537 },
  27449   { 0x1f14f, UNICODE_NOT_PRESENT_OFFSET, 15541 },
  27450   { 0x1f16a, UNICODE_NOT_PRESENT_OFFSET, 15544 },
  27451   { 0x1f16b, UNICODE_NOT_PRESENT_OFFSET, 15547 },
  27452   { 0x1f190, UNICODE_NOT_PRESENT_OFFSET, 15550 },
  27453   { 0x1f200, UNICODE_NOT_PRESENT_OFFSET, 15553 },
  27454   { 0x1f201, UNICODE_NOT_PRESENT_OFFSET, 15560 },
  27455   { 0x1f202, UNICODE_NOT_PRESENT_OFFSET, 8848 },
  27456   { 0x1f210, UNICODE_NOT_PRESENT_OFFSET, 6433 },
  27457   { 0x1f211, UNICODE_NOT_PRESENT_OFFSET, 15567 },
  27458   { 0x1f212, UNICODE_NOT_PRESENT_OFFSET, 15571 },
  27459   { 0x1f213, UNICODE_NOT_PRESENT_OFFSET, 7346 },
  27460   { 0x1f214, UNICODE_NOT_PRESENT_OFFSET, 6205 },
  27461   { 0x1f215, UNICODE_NOT_PRESENT_OFFSET, 15575 },
  27462   { 0x1f216, UNICODE_NOT_PRESENT_OFFSET, 15579 },
  27463   { 0x1f217, UNICODE_NOT_PRESENT_OFFSET, 7887 },
  27464   { 0x1f218, UNICODE_NOT_PRESENT_OFFSET, 15583 },
  27465   { 0x1f219, UNICODE_NOT_PRESENT_OFFSET, 15587 },
  27466   { 0x1f21a, UNICODE_NOT_PRESENT_OFFSET, 15591 },
  27467   { 0x1f21b, UNICODE_NOT_PRESENT_OFFSET, 11619 },
  27468   { 0x1f21c, UNICODE_NOT_PRESENT_OFFSET, 15595 },
  27469   { 0x1f21d, UNICODE_NOT_PRESENT_OFFSET, 15599 },
  27470   { 0x1f21e, UNICODE_NOT_PRESENT_OFFSET, 15603 },
  27471   { 0x1f21f, UNICODE_NOT_PRESENT_OFFSET, 15607 },
  27472   { 0x1f220, UNICODE_NOT_PRESENT_OFFSET, 15611 },
  27473   { 0x1f221, UNICODE_NOT_PRESENT_OFFSET, 15615 },
  27474   { 0x1f222, UNICODE_NOT_PRESENT_OFFSET, 6577 },
  27475   { 0x1f223, UNICODE_NOT_PRESENT_OFFSET, 15619 },
  27476   { 0x1f224, UNICODE_NOT_PRESENT_OFFSET, 15623 },
  27477   { 0x1f225, UNICODE_NOT_PRESENT_OFFSET, 15627 },
  27478   { 0x1f226, UNICODE_NOT_PRESENT_OFFSET, 15631 },
  27479   { 0x1f227, UNICODE_NOT_PRESENT_OFFSET, 15635 },
  27480   { 0x1f228, UNICODE_NOT_PRESENT_OFFSET, 15639 },
  27481   { 0x1f229, UNICODE_NOT_PRESENT_OFFSET, 6181 },
  27482   { 0x1f22a, UNICODE_NOT_PRESENT_OFFSET, 7855 },
  27483   { 0x1f22b, UNICODE_NOT_PRESENT_OFFSET, 15643 },
  27484   { 0x1f22c, UNICODE_NOT_PRESENT_OFFSET, 8646 },
  27485   { 0x1f22d, UNICODE_NOT_PRESENT_OFFSET, 7867 },
  27486   { 0x1f22e, UNICODE_NOT_PRESENT_OFFSET, 8650 },
  27487   { 0x1f22f, UNICODE_NOT_PRESENT_OFFSET, 15647 },
  27488   { 0x1f230, UNICODE_NOT_PRESENT_OFFSET, 6801 },
  27489   { 0x1f231, UNICODE_NOT_PRESENT_OFFSET, 15651 },
  27490   { 0x1f232, UNICODE_NOT_PRESENT_OFFSET, 15655 },
  27491   { 0x1f233, UNICODE_NOT_PRESENT_OFFSET, 15659 },
  27492   { 0x1f234, UNICODE_NOT_PRESENT_OFFSET, 15663 },
  27493   { 0x1f235, UNICODE_NOT_PRESENT_OFFSET, 15667 },
  27494   { 0x1f236, UNICODE_NOT_PRESENT_OFFSET, 8578 },
  27495   { 0x1f237, UNICODE_NOT_PRESENT_OFFSET, 6473 },
  27496   { 0x1f238, UNICODE_NOT_PRESENT_OFFSET, 15671 },
  27497   { 0x1f239, UNICODE_NOT_PRESENT_OFFSET, 15675 },
  27498   { 0x1f23a, UNICODE_NOT_PRESENT_OFFSET, 15679 },
  27499   { 0x1f23b, UNICODE_NOT_PRESENT_OFFSET, 15683 },
  27500   { 0x1f240, UNICODE_NOT_PRESENT_OFFSET, 15687 },
  27501   { 0x1f241, UNICODE_NOT_PRESENT_OFFSET, 15697 },
  27502   { 0x1f242, UNICODE_NOT_PRESENT_OFFSET, 15707 },
  27503   { 0x1f243, UNICODE_NOT_PRESENT_OFFSET, 15717 },
  27504   { 0x1f244, UNICODE_NOT_PRESENT_OFFSET, 15727 },
  27505   { 0x1f245, UNICODE_NOT_PRESENT_OFFSET, 15737 },
  27506   { 0x1f246, UNICODE_NOT_PRESENT_OFFSET, 15747 },
  27507   { 0x1f247, UNICODE_NOT_PRESENT_OFFSET, 15757 },
  27508   { 0x1f248, UNICODE_NOT_PRESENT_OFFSET, 15767 },
  27509   { 0x1f250, UNICODE_NOT_PRESENT_OFFSET, 15777 },
  27510   { 0x1f251, UNICODE_NOT_PRESENT_OFFSET, 15781 },
  27511   { 0x2f800, 15785, UNICODE_NOT_PRESENT_OFFSET },
  27512   { 0x2f801, 15789, UNICODE_NOT_PRESENT_OFFSET },
  27513   { 0x2f802, 15793, UNICODE_NOT_PRESENT_OFFSET },
  27514   { 0x2f803, 15797, UNICODE_NOT_PRESENT_OFFSET },
  27515   { 0x2f804, 15802, UNICODE_NOT_PRESENT_OFFSET },
  27516   { 0x2f805, 11991, UNICODE_NOT_PRESENT_OFFSET },
  27517   { 0x2f806, 15806, UNICODE_NOT_PRESENT_OFFSET },
  27518   { 0x2f807, 15810, UNICODE_NOT_PRESENT_OFFSET },
  27519   { 0x2f808, 15814, UNICODE_NOT_PRESENT_OFFSET },
  27520   { 0x2f809, 15818, UNICODE_NOT_PRESENT_OFFSET },
  27521   { 0x2f80a, 11995, UNICODE_NOT_PRESENT_OFFSET },
  27522   { 0x2f80b, 15822, UNICODE_NOT_PRESENT_OFFSET },
  27523   { 0x2f80c, 15826, UNICODE_NOT_PRESENT_OFFSET },
  27524   { 0x2f80d, 15830, UNICODE_NOT_PRESENT_OFFSET },
  27525   { 0x2f80e, 11999, UNICODE_NOT_PRESENT_OFFSET },
  27526   { 0x2f80f, 15835, UNICODE_NOT_PRESENT_OFFSET },
  27527   { 0x2f810, 15839, UNICODE_NOT_PRESENT_OFFSET },
  27528   { 0x2f811, 15843, UNICODE_NOT_PRESENT_OFFSET },
  27529   { 0x2f812, 15847, UNICODE_NOT_PRESENT_OFFSET },
  27530   { 0x2f813, 15852, UNICODE_NOT_PRESENT_OFFSET },
  27531   { 0x2f814, 15856, UNICODE_NOT_PRESENT_OFFSET },
  27532   { 0x2f815, 15603, UNICODE_NOT_PRESENT_OFFSET },
  27533   { 0x2f816, 15860, UNICODE_NOT_PRESENT_OFFSET },
  27534   { 0x2f817, 15865, UNICODE_NOT_PRESENT_OFFSET },
  27535   { 0x2f818, 15869, UNICODE_NOT_PRESENT_OFFSET },
  27536   { 0x2f819, 15873, UNICODE_NOT_PRESENT_OFFSET },
  27537   { 0x2f81a, 15877, UNICODE_NOT_PRESENT_OFFSET },
  27538   { 0x2f81b, 12220, UNICODE_NOT_PRESENT_OFFSET },
  27539   { 0x2f81c, 15881, UNICODE_NOT_PRESENT_OFFSET },
  27540   { 0x2f81d, 6245, UNICODE_NOT_PRESENT_OFFSET },
  27541   { 0x2f81e, 15886, UNICODE_NOT_PRESENT_OFFSET },
  27542   { 0x2f81f, 15890, UNICODE_NOT_PRESENT_OFFSET },
  27543   { 0x2f820, 15894, UNICODE_NOT_PRESENT_OFFSET },
  27544   { 0x2f821, 15898, UNICODE_NOT_PRESENT_OFFSET },
  27545   { 0x2f822, 15675, UNICODE_NOT_PRESENT_OFFSET },
  27546   { 0x2f823, 15902, UNICODE_NOT_PRESENT_OFFSET },
  27547   { 0x2f824, 15906, UNICODE_NOT_PRESENT_OFFSET },
  27548   { 0x2f825, 12240, UNICODE_NOT_PRESENT_OFFSET },
  27549   { 0x2f826, 12003, UNICODE_NOT_PRESENT_OFFSET },
  27550   { 0x2f827, 12007, UNICODE_NOT_PRESENT_OFFSET },
  27551   { 0x2f828, 12244, UNICODE_NOT_PRESENT_OFFSET },
  27552   { 0x2f829, 15910, UNICODE_NOT_PRESENT_OFFSET },
  27553   { 0x2f82a, 15914, UNICODE_NOT_PRESENT_OFFSET },
  27554   { 0x2f82b, 11275, UNICODE_NOT_PRESENT_OFFSET },
  27555   { 0x2f82c, 15918, UNICODE_NOT_PRESENT_OFFSET },
  27556   { 0x2f82d, 12011, UNICODE_NOT_PRESENT_OFFSET },
  27557   { 0x2f82e, 15922, UNICODE_NOT_PRESENT_OFFSET },
  27558   { 0x2f82f, 15926, UNICODE_NOT_PRESENT_OFFSET },
  27559   { 0x2f830, 15930, UNICODE_NOT_PRESENT_OFFSET },
  27560   { 0x2f831, 15934, UNICODE_NOT_PRESENT_OFFSET },
  27561   { 0x2f832, 15934, UNICODE_NOT_PRESENT_OFFSET },
  27562   { 0x2f833, 15934, UNICODE_NOT_PRESENT_OFFSET },
  27563   { 0x2f834, 15938, UNICODE_NOT_PRESENT_OFFSET },
  27564   { 0x2f835, 15943, UNICODE_NOT_PRESENT_OFFSET },
  27565   { 0x2f836, 15947, UNICODE_NOT_PRESENT_OFFSET },
  27566   { 0x2f837, 15951, UNICODE_NOT_PRESENT_OFFSET },
  27567   { 0x2f838, 15955, UNICODE_NOT_PRESENT_OFFSET },
  27568   { 0x2f839, 15960, UNICODE_NOT_PRESENT_OFFSET },
  27569   { 0x2f83a, 15964, UNICODE_NOT_PRESENT_OFFSET },
  27570   { 0x2f83b, 15968, UNICODE_NOT_PRESENT_OFFSET },
  27571   { 0x2f83c, 15972, UNICODE_NOT_PRESENT_OFFSET },
  27572   { 0x2f83d, 15976, UNICODE_NOT_PRESENT_OFFSET },
  27573   { 0x2f83e, 15980, UNICODE_NOT_PRESENT_OFFSET },
  27574   { 0x2f83f, 15984, UNICODE_NOT_PRESENT_OFFSET },
  27575   { 0x2f840, 15988, UNICODE_NOT_PRESENT_OFFSET },
  27576   { 0x2f841, 15992, UNICODE_NOT_PRESENT_OFFSET },
  27577   { 0x2f842, 15996, UNICODE_NOT_PRESENT_OFFSET },
  27578   { 0x2f843, 16000, UNICODE_NOT_PRESENT_OFFSET },
  27579   { 0x2f844, 16004, UNICODE_NOT_PRESENT_OFFSET },
  27580   { 0x2f845, 16008, UNICODE_NOT_PRESENT_OFFSET },
  27581   { 0x2f846, 16008, UNICODE_NOT_PRESENT_OFFSET },
  27582   { 0x2f847, 12252, UNICODE_NOT_PRESENT_OFFSET },
  27583   { 0x2f848, 16012, UNICODE_NOT_PRESENT_OFFSET },
  27584   { 0x2f849, 16016, UNICODE_NOT_PRESENT_OFFSET },
  27585   { 0x2f84a, 16020, UNICODE_NOT_PRESENT_OFFSET },
  27586   { 0x2f84b, 16024, UNICODE_NOT_PRESENT_OFFSET },
  27587   { 0x2f84c, 12019, UNICODE_NOT_PRESENT_OFFSET },
  27588   { 0x2f84d, 16028, UNICODE_NOT_PRESENT_OFFSET },
  27589   { 0x2f84e, 16032, UNICODE_NOT_PRESENT_OFFSET },
  27590   { 0x2f84f, 16036, UNICODE_NOT_PRESENT_OFFSET },
  27591   { 0x2f850, 11859, UNICODE_NOT_PRESENT_OFFSET },
  27592   { 0x2f851, 16040, UNICODE_NOT_PRESENT_OFFSET },
  27593   { 0x2f852, 16044, UNICODE_NOT_PRESENT_OFFSET },
  27594   { 0x2f853, 16048, UNICODE_NOT_PRESENT_OFFSET },
  27595   { 0x2f854, 16052, UNICODE_NOT_PRESENT_OFFSET },
  27596   { 0x2f855, 16056, UNICODE_NOT_PRESENT_OFFSET },
  27597   { 0x2f856, 16060, UNICODE_NOT_PRESENT_OFFSET },
  27598   { 0x2f857, 16064, UNICODE_NOT_PRESENT_OFFSET },
  27599   { 0x2f858, 16068, UNICODE_NOT_PRESENT_OFFSET },
  27600   { 0x2f859, 16072, UNICODE_NOT_PRESENT_OFFSET },
  27601   { 0x2f85a, 16077, UNICODE_NOT_PRESENT_OFFSET },
  27602   { 0x2f85b, 16081, UNICODE_NOT_PRESENT_OFFSET },
  27603   { 0x2f85c, 16085, UNICODE_NOT_PRESENT_OFFSET },
  27604   { 0x2f85d, 15575, UNICODE_NOT_PRESENT_OFFSET },
  27605   { 0x2f85e, 16089, UNICODE_NOT_PRESENT_OFFSET },
  27606   { 0x2f85f, 16093, UNICODE_NOT_PRESENT_OFFSET },
  27607   { 0x2f860, 16097, UNICODE_NOT_PRESENT_OFFSET },
  27608   { 0x2f861, 16102, UNICODE_NOT_PRESENT_OFFSET },
  27609   { 0x2f862, 16107, UNICODE_NOT_PRESENT_OFFSET },
  27610   { 0x2f863, 16111, UNICODE_NOT_PRESENT_OFFSET },
  27611   { 0x2f864, 16115, UNICODE_NOT_PRESENT_OFFSET },
  27612   { 0x2f865, 16119, UNICODE_NOT_PRESENT_OFFSET },
  27613   { 0x2f866, 16123, UNICODE_NOT_PRESENT_OFFSET },
  27614   { 0x2f867, 16127, UNICODE_NOT_PRESENT_OFFSET },
  27615   { 0x2f868, 16131, UNICODE_NOT_PRESENT_OFFSET },
  27616   { 0x2f869, 16135, UNICODE_NOT_PRESENT_OFFSET },
  27617   { 0x2f86a, 16139, UNICODE_NOT_PRESENT_OFFSET },
  27618   { 0x2f86b, 16139, UNICODE_NOT_PRESENT_OFFSET },
  27619   { 0x2f86c, 16143, UNICODE_NOT_PRESENT_OFFSET },
  27620   { 0x2f86d, 16148, UNICODE_NOT_PRESENT_OFFSET },
  27621   { 0x2f86e, 16152, UNICODE_NOT_PRESENT_OFFSET },
  27622   { 0x2f86f, 11259, UNICODE_NOT_PRESENT_OFFSET },
  27623   { 0x2f870, 16156, UNICODE_NOT_PRESENT_OFFSET },
  27624   { 0x2f871, 16160, UNICODE_NOT_PRESENT_OFFSET },
  27625   { 0x2f872, 16165, UNICODE_NOT_PRESENT_OFFSET },
  27626   { 0x2f873, 16169, UNICODE_NOT_PRESENT_OFFSET },
  27627   { 0x2f874, 16173, UNICODE_NOT_PRESENT_OFFSET },
  27628   { 0x2f875, 6349, UNICODE_NOT_PRESENT_OFFSET },
  27629   { 0x2f876, 16177, UNICODE_NOT_PRESENT_OFFSET },
  27630   { 0x2f877, 16181, UNICODE_NOT_PRESENT_OFFSET },
  27631   { 0x2f878, 6357, UNICODE_NOT_PRESENT_OFFSET },
  27632   { 0x2f879, 16185, UNICODE_NOT_PRESENT_OFFSET },
  27633   { 0x2f87a, 16189, UNICODE_NOT_PRESENT_OFFSET },
  27634   { 0x2f87b, 16193, UNICODE_NOT_PRESENT_OFFSET },
  27635   { 0x2f87c, 16198, UNICODE_NOT_PRESENT_OFFSET },
  27636   { 0x2f87d, 16202, UNICODE_NOT_PRESENT_OFFSET },
  27637   { 0x2f87e, 16207, UNICODE_NOT_PRESENT_OFFSET },
  27638   { 0x2f87f, 16211, UNICODE_NOT_PRESENT_OFFSET },
  27639   { 0x2f880, 16215, UNICODE_NOT_PRESENT_OFFSET },
  27640   { 0x2f881, 16219, UNICODE_NOT_PRESENT_OFFSET },
  27641   { 0x2f882, 16223, UNICODE_NOT_PRESENT_OFFSET },
  27642   { 0x2f883, 16227, UNICODE_NOT_PRESENT_OFFSET },
  27643   { 0x2f884, 16231, UNICODE_NOT_PRESENT_OFFSET },
  27644   { 0x2f885, 16235, UNICODE_NOT_PRESENT_OFFSET },
  27645   { 0x2f886, 16239, UNICODE_NOT_PRESENT_OFFSET },
  27646   { 0x2f887, 16243, UNICODE_NOT_PRESENT_OFFSET },
  27647   { 0x2f888, 16247, UNICODE_NOT_PRESENT_OFFSET },
  27648   { 0x2f889, 16251, UNICODE_NOT_PRESENT_OFFSET },
  27649   { 0x2f88a, 16256, UNICODE_NOT_PRESENT_OFFSET },
  27650   { 0x2f88b, 16260, UNICODE_NOT_PRESENT_OFFSET },
  27651   { 0x2f88c, 16264, UNICODE_NOT_PRESENT_OFFSET },
  27652   { 0x2f88d, 16268, UNICODE_NOT_PRESENT_OFFSET },
  27653   { 0x2f88e, 11051, UNICODE_NOT_PRESENT_OFFSET },
  27654   { 0x2f88f, 16272, UNICODE_NOT_PRESENT_OFFSET },
  27655   { 0x2f890, 6397, UNICODE_NOT_PRESENT_OFFSET },
  27656   { 0x2f891, 16277, UNICODE_NOT_PRESENT_OFFSET },
  27657   { 0x2f892, 16277, UNICODE_NOT_PRESENT_OFFSET },
  27658   { 0x2f893, 16282, UNICODE_NOT_PRESENT_OFFSET },
  27659   { 0x2f894, 16286, UNICODE_NOT_PRESENT_OFFSET },
  27660   { 0x2f895, 16286, UNICODE_NOT_PRESENT_OFFSET },
  27661   { 0x2f896, 16290, UNICODE_NOT_PRESENT_OFFSET },
  27662   { 0x2f897, 16294, UNICODE_NOT_PRESENT_OFFSET },
  27663   { 0x2f898, 16299, UNICODE_NOT_PRESENT_OFFSET },
  27664   { 0x2f899, 16304, UNICODE_NOT_PRESENT_OFFSET },
  27665   { 0x2f89a, 16308, UNICODE_NOT_PRESENT_OFFSET },
  27666   { 0x2f89b, 16312, UNICODE_NOT_PRESENT_OFFSET },
  27667   { 0x2f89c, 16316, UNICODE_NOT_PRESENT_OFFSET },
  27668   { 0x2f89d, 16320, UNICODE_NOT_PRESENT_OFFSET },
  27669   { 0x2f89e, 16324, UNICODE_NOT_PRESENT_OFFSET },
  27670   { 0x2f89f, 16328, UNICODE_NOT_PRESENT_OFFSET },
  27671   { 0x2f8a0, 16332, UNICODE_NOT_PRESENT_OFFSET },
  27672   { 0x2f8a1, 16336, UNICODE_NOT_PRESENT_OFFSET },
  27673   { 0x2f8a2, 16340, UNICODE_NOT_PRESENT_OFFSET },
  27674   { 0x2f8a3, 12039, UNICODE_NOT_PRESENT_OFFSET },
  27675   { 0x2f8a4, 16344, UNICODE_NOT_PRESENT_OFFSET },
  27676   { 0x2f8a5, 16349, UNICODE_NOT_PRESENT_OFFSET },
  27677   { 0x2f8a6, 16353, UNICODE_NOT_PRESENT_OFFSET },
  27678   { 0x2f8a7, 16357, UNICODE_NOT_PRESENT_OFFSET },
  27679   { 0x2f8a8, 12300, UNICODE_NOT_PRESENT_OFFSET },
  27680   { 0x2f8a9, 16357, UNICODE_NOT_PRESENT_OFFSET },
  27681   { 0x2f8aa, 16361, UNICODE_NOT_PRESENT_OFFSET },
  27682   { 0x2f8ab, 12047, UNICODE_NOT_PRESENT_OFFSET },
  27683   { 0x2f8ac, 16365, UNICODE_NOT_PRESENT_OFFSET },
  27684   { 0x2f8ad, 16369, UNICODE_NOT_PRESENT_OFFSET },
  27685   { 0x2f8ae, 16373, UNICODE_NOT_PRESENT_OFFSET },
  27686   { 0x2f8af, 16377, UNICODE_NOT_PRESENT_OFFSET },
  27687   { 0x2f8b0, 12051, UNICODE_NOT_PRESENT_OFFSET },
  27688   { 0x2f8b1, 10943, UNICODE_NOT_PRESENT_OFFSET },
  27689   { 0x2f8b2, 16381, UNICODE_NOT_PRESENT_OFFSET },
  27690   { 0x2f8b3, 16385, UNICODE_NOT_PRESENT_OFFSET },
  27691   { 0x2f8b4, 16389, UNICODE_NOT_PRESENT_OFFSET },
  27692   { 0x2f8b5, 16393, UNICODE_NOT_PRESENT_OFFSET },
  27693   { 0x2f8b6, 16397, UNICODE_NOT_PRESENT_OFFSET },
  27694   { 0x2f8b7, 16401, UNICODE_NOT_PRESENT_OFFSET },
  27695   { 0x2f8b8, 16405, UNICODE_NOT_PRESENT_OFFSET },
  27696   { 0x2f8b9, 16410, UNICODE_NOT_PRESENT_OFFSET },
  27697   { 0x2f8ba, 16414, UNICODE_NOT_PRESENT_OFFSET },
  27698   { 0x2f8bb, 16418, UNICODE_NOT_PRESENT_OFFSET },
  27699   { 0x2f8bc, 16422, UNICODE_NOT_PRESENT_OFFSET },
  27700   { 0x2f8bd, 16426, UNICODE_NOT_PRESENT_OFFSET },
  27701   { 0x2f8be, 16430, UNICODE_NOT_PRESENT_OFFSET },
  27702   { 0x2f8bf, 16435, UNICODE_NOT_PRESENT_OFFSET },
  27703   { 0x2f8c0, 16439, UNICODE_NOT_PRESENT_OFFSET },
  27704   { 0x2f8c1, 16443, UNICODE_NOT_PRESENT_OFFSET },
  27705   { 0x2f8c2, 16447, UNICODE_NOT_PRESENT_OFFSET },
  27706   { 0x2f8c3, 16451, UNICODE_NOT_PRESENT_OFFSET },
  27707   { 0x2f8c4, 16455, UNICODE_NOT_PRESENT_OFFSET },
  27708   { 0x2f8c5, 16459, UNICODE_NOT_PRESENT_OFFSET },
  27709   { 0x2f8c6, 16463, UNICODE_NOT_PRESENT_OFFSET },
  27710   { 0x2f8c7, 16467, UNICODE_NOT_PRESENT_OFFSET },
  27711   { 0x2f8c8, 12055, UNICODE_NOT_PRESENT_OFFSET },
  27712   { 0x2f8c9, 16471, UNICODE_NOT_PRESENT_OFFSET },
  27713   { 0x2f8ca, 16475, UNICODE_NOT_PRESENT_OFFSET },
  27714   { 0x2f8cb, 16480, UNICODE_NOT_PRESENT_OFFSET },
  27715   { 0x2f8cc, 16484, UNICODE_NOT_PRESENT_OFFSET },
  27716   { 0x2f8cd, 16488, UNICODE_NOT_PRESENT_OFFSET },
  27717   { 0x2f8ce, 16492, UNICODE_NOT_PRESENT_OFFSET },
  27718   { 0x2f8cf, 12063, UNICODE_NOT_PRESENT_OFFSET },
  27719   { 0x2f8d0, 16496, UNICODE_NOT_PRESENT_OFFSET },
  27720   { 0x2f8d1, 16500, UNICODE_NOT_PRESENT_OFFSET },
  27721   { 0x2f8d2, 16504, UNICODE_NOT_PRESENT_OFFSET },
  27722   { 0x2f8d3, 16508, UNICODE_NOT_PRESENT_OFFSET },
  27723   { 0x2f8d4, 16512, UNICODE_NOT_PRESENT_OFFSET },
  27724   { 0x2f8d5, 16516, UNICODE_NOT_PRESENT_OFFSET },
  27725   { 0x2f8d6, 16520, UNICODE_NOT_PRESENT_OFFSET },
  27726   { 0x2f8d7, 16524, UNICODE_NOT_PRESENT_OFFSET },
  27727   { 0x2f8d8, 11055, UNICODE_NOT_PRESENT_OFFSET },
  27728   { 0x2f8d9, 12332, UNICODE_NOT_PRESENT_OFFSET },
  27729   { 0x2f8da, 16528, UNICODE_NOT_PRESENT_OFFSET },
  27730   { 0x2f8db, 16532, UNICODE_NOT_PRESENT_OFFSET },
  27731   { 0x2f8dc, 16536, UNICODE_NOT_PRESENT_OFFSET },
  27732   { 0x2f8dd, 16540, UNICODE_NOT_PRESENT_OFFSET },
  27733   { 0x2f8de, 16545, UNICODE_NOT_PRESENT_OFFSET },
  27734   { 0x2f8df, 16549, UNICODE_NOT_PRESENT_OFFSET },
  27735   { 0x2f8e0, 16553, UNICODE_NOT_PRESENT_OFFSET },
  27736   { 0x2f8e1, 16557, UNICODE_NOT_PRESENT_OFFSET },
  27737   { 0x2f8e2, 12067, UNICODE_NOT_PRESENT_OFFSET },
  27738   { 0x2f8e3, 16561, UNICODE_NOT_PRESENT_OFFSET },
  27739   { 0x2f8e4, 16566, UNICODE_NOT_PRESENT_OFFSET },
  27740   { 0x2f8e5, 16570, UNICODE_NOT_PRESENT_OFFSET },
  27741   { 0x2f8e6, 16574, UNICODE_NOT_PRESENT_OFFSET },
  27742   { 0x2f8e7, 12503, UNICODE_NOT_PRESENT_OFFSET },
  27743   { 0x2f8e8, 16578, UNICODE_NOT_PRESENT_OFFSET },
  27744   { 0x2f8e9, 16582, UNICODE_NOT_PRESENT_OFFSET },
  27745   { 0x2f8ea, 16586, UNICODE_NOT_PRESENT_OFFSET },
  27746   { 0x2f8eb, 16590, UNICODE_NOT_PRESENT_OFFSET },
  27747   { 0x2f8ec, 16594, UNICODE_NOT_PRESENT_OFFSET },
  27748   { 0x2f8ed, 16599, UNICODE_NOT_PRESENT_OFFSET },
  27749   { 0x2f8ee, 16603, UNICODE_NOT_PRESENT_OFFSET },
  27750   { 0x2f8ef, 16607, UNICODE_NOT_PRESENT_OFFSET },
  27751   { 0x2f8f0, 16611, UNICODE_NOT_PRESENT_OFFSET },
  27752   { 0x2f8f1, 16616, UNICODE_NOT_PRESENT_OFFSET },
  27753   { 0x2f8f2, 16620, UNICODE_NOT_PRESENT_OFFSET },
  27754   { 0x2f8f3, 16624, UNICODE_NOT_PRESENT_OFFSET },
  27755   { 0x2f8f4, 16628, UNICODE_NOT_PRESENT_OFFSET },
  27756   { 0x2f8f5, 11327, UNICODE_NOT_PRESENT_OFFSET },
  27757   { 0x2f8f6, 16632, UNICODE_NOT_PRESENT_OFFSET },
  27758   { 0x2f8f7, 16636, UNICODE_NOT_PRESENT_OFFSET },
  27759   { 0x2f8f8, 16641, UNICODE_NOT_PRESENT_OFFSET },
  27760   { 0x2f8f9, 16646, UNICODE_NOT_PRESENT_OFFSET },
  27761   { 0x2f8fa, 16651, UNICODE_NOT_PRESENT_OFFSET },
  27762   { 0x2f8fb, 16655, UNICODE_NOT_PRESENT_OFFSET },
  27763   { 0x2f8fc, 16660, UNICODE_NOT_PRESENT_OFFSET },
  27764   { 0x2f8fd, 16664, UNICODE_NOT_PRESENT_OFFSET },
  27765   { 0x2f8fe, 16668, UNICODE_NOT_PRESENT_OFFSET },
  27766   { 0x2f8ff, 16672, UNICODE_NOT_PRESENT_OFFSET },
  27767   { 0x2f900, 16676, UNICODE_NOT_PRESENT_OFFSET },
  27768   { 0x2f901, 12071, UNICODE_NOT_PRESENT_OFFSET },
  27769   { 0x2f902, 11659, UNICODE_NOT_PRESENT_OFFSET },
  27770   { 0x2f903, 16680, UNICODE_NOT_PRESENT_OFFSET },
  27771   { 0x2f904, 16684, UNICODE_NOT_PRESENT_OFFSET },
  27772   { 0x2f905, 16688, UNICODE_NOT_PRESENT_OFFSET },
  27773   { 0x2f906, 16692, UNICODE_NOT_PRESENT_OFFSET },
  27774   { 0x2f907, 16697, UNICODE_NOT_PRESENT_OFFSET },
  27775   { 0x2f908, 16701, UNICODE_NOT_PRESENT_OFFSET },
  27776   { 0x2f909, 16705, UNICODE_NOT_PRESENT_OFFSET },
  27777   { 0x2f90a, 16709, UNICODE_NOT_PRESENT_OFFSET },
  27778   { 0x2f90b, 12344, UNICODE_NOT_PRESENT_OFFSET },
  27779   { 0x2f90c, 16713, UNICODE_NOT_PRESENT_OFFSET },
  27780   { 0x2f90d, 16717, UNICODE_NOT_PRESENT_OFFSET },
  27781   { 0x2f90e, 16722, UNICODE_NOT_PRESENT_OFFSET },
  27782   { 0x2f90f, 16726, UNICODE_NOT_PRESENT_OFFSET },
  27783   { 0x2f910, 16730, UNICODE_NOT_PRESENT_OFFSET },
  27784   { 0x2f911, 16735, UNICODE_NOT_PRESENT_OFFSET },
  27785   { 0x2f912, 16740, UNICODE_NOT_PRESENT_OFFSET },
  27786   { 0x2f913, 16744, UNICODE_NOT_PRESENT_OFFSET },
  27787   { 0x2f914, 12348, UNICODE_NOT_PRESENT_OFFSET },
  27788   { 0x2f915, 16748, UNICODE_NOT_PRESENT_OFFSET },
  27789   { 0x2f916, 16752, UNICODE_NOT_PRESENT_OFFSET },
  27790   { 0x2f917, 16756, UNICODE_NOT_PRESENT_OFFSET },
  27791   { 0x2f918, 16760, UNICODE_NOT_PRESENT_OFFSET },
  27792   { 0x2f919, 16764, UNICODE_NOT_PRESENT_OFFSET },
  27793   { 0x2f91a, 16768, UNICODE_NOT_PRESENT_OFFSET },
  27794   { 0x2f91b, 16772, UNICODE_NOT_PRESENT_OFFSET },
  27795   { 0x2f91c, 16777, UNICODE_NOT_PRESENT_OFFSET },
  27796   { 0x2f91d, 16781, UNICODE_NOT_PRESENT_OFFSET },
  27797   { 0x2f91e, 16786, UNICODE_NOT_PRESENT_OFFSET },
  27798   { 0x2f91f, 16790, UNICODE_NOT_PRESENT_OFFSET },
  27799   { 0x2f920, 16795, UNICODE_NOT_PRESENT_OFFSET },
  27800   { 0x2f921, 12356, UNICODE_NOT_PRESENT_OFFSET },
  27801   { 0x2f922, 16799, UNICODE_NOT_PRESENT_OFFSET },
  27802   { 0x2f923, 16803, UNICODE_NOT_PRESENT_OFFSET },
  27803   { 0x2f924, 16808, UNICODE_NOT_PRESENT_OFFSET },
  27804   { 0x2f925, 16812, UNICODE_NOT_PRESENT_OFFSET },
  27805   { 0x2f926, 16816, UNICODE_NOT_PRESENT_OFFSET },
  27806   { 0x2f927, 16821, UNICODE_NOT_PRESENT_OFFSET },
  27807   { 0x2f928, 16826, UNICODE_NOT_PRESENT_OFFSET },
  27808   { 0x2f929, 16830, UNICODE_NOT_PRESENT_OFFSET },
  27809   { 0x2f92a, 16834, UNICODE_NOT_PRESENT_OFFSET },
  27810   { 0x2f92b, 16838, UNICODE_NOT_PRESENT_OFFSET },
  27811   { 0x2f92c, 16842, UNICODE_NOT_PRESENT_OFFSET },
  27812   { 0x2f92d, 16842, UNICODE_NOT_PRESENT_OFFSET },
  27813   { 0x2f92e, 16846, UNICODE_NOT_PRESENT_OFFSET },
  27814   { 0x2f92f, 16850, UNICODE_NOT_PRESENT_OFFSET },
  27815   { 0x2f930, 12364, UNICODE_NOT_PRESENT_OFFSET },
  27816   { 0x2f931, 16854, UNICODE_NOT_PRESENT_OFFSET },
  27817   { 0x2f932, 16858, UNICODE_NOT_PRESENT_OFFSET },
  27818   { 0x2f933, 16862, UNICODE_NOT_PRESENT_OFFSET },
  27819   { 0x2f934, 16866, UNICODE_NOT_PRESENT_OFFSET },
  27820   { 0x2f935, 16870, UNICODE_NOT_PRESENT_OFFSET },
  27821   { 0x2f936, 16875, UNICODE_NOT_PRESENT_OFFSET },
  27822   { 0x2f937, 16879, UNICODE_NOT_PRESENT_OFFSET },
  27823   { 0x2f938, 11271, UNICODE_NOT_PRESENT_OFFSET },
  27824   { 0x2f939, 16884, UNICODE_NOT_PRESENT_OFFSET },
  27825   { 0x2f93a, 16889, UNICODE_NOT_PRESENT_OFFSET },
  27826   { 0x2f93b, 16893, UNICODE_NOT_PRESENT_OFFSET },
  27827   { 0x2f93c, 16898, UNICODE_NOT_PRESENT_OFFSET },
  27828   { 0x2f93d, 16903, UNICODE_NOT_PRESENT_OFFSET },
  27829   { 0x2f93e, 16908, UNICODE_NOT_PRESENT_OFFSET },
  27830   { 0x2f93f, 16912, UNICODE_NOT_PRESENT_OFFSET },
  27831   { 0x2f940, 12388, UNICODE_NOT_PRESENT_OFFSET },
  27832   { 0x2f941, 16916, UNICODE_NOT_PRESENT_OFFSET },
  27833   { 0x2f942, 16921, UNICODE_NOT_PRESENT_OFFSET },
  27834   { 0x2f943, 16926, UNICODE_NOT_PRESENT_OFFSET },
  27835   { 0x2f944, 16931, UNICODE_NOT_PRESENT_OFFSET },
  27836   { 0x2f945, 16936, UNICODE_NOT_PRESENT_OFFSET },
  27837   { 0x2f946, 16940, UNICODE_NOT_PRESENT_OFFSET },
  27838   { 0x2f947, 16940, UNICODE_NOT_PRESENT_OFFSET },
  27839   { 0x2f948, 12392, UNICODE_NOT_PRESENT_OFFSET },
  27840   { 0x2f949, 12511, UNICODE_NOT_PRESENT_OFFSET },
  27841   { 0x2f94a, 16944, UNICODE_NOT_PRESENT_OFFSET },
  27842   { 0x2f94b, 16948, UNICODE_NOT_PRESENT_OFFSET },
  27843   { 0x2f94c, 16952, UNICODE_NOT_PRESENT_OFFSET },
  27844   { 0x2f94d, 16956, UNICODE_NOT_PRESENT_OFFSET },
  27845   { 0x2f94e, 16961, UNICODE_NOT_PRESENT_OFFSET },
  27846   { 0x2f94f, 11123, UNICODE_NOT_PRESENT_OFFSET },
  27847   { 0x2f950, 12400, UNICODE_NOT_PRESENT_OFFSET },
  27848   { 0x2f951, 16965, UNICODE_NOT_PRESENT_OFFSET },
  27849   { 0x2f952, 16969, UNICODE_NOT_PRESENT_OFFSET },
  27850   { 0x2f953, 12111, UNICODE_NOT_PRESENT_OFFSET },
  27851   { 0x2f954, 16974, UNICODE_NOT_PRESENT_OFFSET },
  27852   { 0x2f955, 16979, UNICODE_NOT_PRESENT_OFFSET },
  27853   { 0x2f956, 11939, UNICODE_NOT_PRESENT_OFFSET },
  27854   { 0x2f957, 16984, UNICODE_NOT_PRESENT_OFFSET },
  27855   { 0x2f958, 16988, UNICODE_NOT_PRESENT_OFFSET },
  27856   { 0x2f959, 12123, UNICODE_NOT_PRESENT_OFFSET },
  27857   { 0x2f95a, 16992, UNICODE_NOT_PRESENT_OFFSET },
  27858   { 0x2f95b, 16996, UNICODE_NOT_PRESENT_OFFSET },
  27859   { 0x2f95c, 17000, UNICODE_NOT_PRESENT_OFFSET },
  27860   { 0x2f95d, 17005, UNICODE_NOT_PRESENT_OFFSET },
  27861   { 0x2f95e, 17005, UNICODE_NOT_PRESENT_OFFSET },
  27862   { 0x2f95f, 17010, UNICODE_NOT_PRESENT_OFFSET },
  27863   { 0x2f960, 17014, UNICODE_NOT_PRESENT_OFFSET },
  27864   { 0x2f961, 17018, UNICODE_NOT_PRESENT_OFFSET },
  27865   { 0x2f962, 17023, UNICODE_NOT_PRESENT_OFFSET },
  27866   { 0x2f963, 17027, UNICODE_NOT_PRESENT_OFFSET },
  27867   { 0x2f964, 17031, UNICODE_NOT_PRESENT_OFFSET },
  27868   { 0x2f965, 17035, UNICODE_NOT_PRESENT_OFFSET },
  27869   { 0x2f966, 17040, UNICODE_NOT_PRESENT_OFFSET },
  27870   { 0x2f967, 17044, UNICODE_NOT_PRESENT_OFFSET },
  27871   { 0x2f968, 17048, UNICODE_NOT_PRESENT_OFFSET },
  27872   { 0x2f969, 17052, UNICODE_NOT_PRESENT_OFFSET },
  27873   { 0x2f96a, 17056, UNICODE_NOT_PRESENT_OFFSET },
  27874   { 0x2f96b, 17060, UNICODE_NOT_PRESENT_OFFSET },
  27875   { 0x2f96c, 17065, UNICODE_NOT_PRESENT_OFFSET },
  27876   { 0x2f96d, 17069, UNICODE_NOT_PRESENT_OFFSET },
  27877   { 0x2f96e, 17073, UNICODE_NOT_PRESENT_OFFSET },
  27878   { 0x2f96f, 17077, UNICODE_NOT_PRESENT_OFFSET },
  27879   { 0x2f970, 17081, UNICODE_NOT_PRESENT_OFFSET },
  27880   { 0x2f971, 17085, UNICODE_NOT_PRESENT_OFFSET },
  27881   { 0x2f972, 17089, UNICODE_NOT_PRESENT_OFFSET },
  27882   { 0x2f973, 17094, UNICODE_NOT_PRESENT_OFFSET },
  27883   { 0x2f974, 17099, UNICODE_NOT_PRESENT_OFFSET },
  27884   { 0x2f975, 17103, UNICODE_NOT_PRESENT_OFFSET },
  27885   { 0x2f976, 17108, UNICODE_NOT_PRESENT_OFFSET },
  27886   { 0x2f977, 17112, UNICODE_NOT_PRESENT_OFFSET },
  27887   { 0x2f978, 17117, UNICODE_NOT_PRESENT_OFFSET },
  27888   { 0x2f979, 17121, UNICODE_NOT_PRESENT_OFFSET },
  27889   { 0x2f97a, 12147, UNICODE_NOT_PRESENT_OFFSET },
  27890   { 0x2f97b, 17125, UNICODE_NOT_PRESENT_OFFSET },
  27891   { 0x2f97c, 17130, UNICODE_NOT_PRESENT_OFFSET },
  27892   { 0x2f97d, 17135, UNICODE_NOT_PRESENT_OFFSET },
  27893   { 0x2f97e, 17139, UNICODE_NOT_PRESENT_OFFSET },
  27894   { 0x2f97f, 17144, UNICODE_NOT_PRESENT_OFFSET },
  27895   { 0x2f980, 17148, UNICODE_NOT_PRESENT_OFFSET },
  27896   { 0x2f981, 17153, UNICODE_NOT_PRESENT_OFFSET },
  27897   { 0x2f982, 17157, UNICODE_NOT_PRESENT_OFFSET },
  27898   { 0x2f983, 17161, UNICODE_NOT_PRESENT_OFFSET },
  27899   { 0x2f984, 17165, UNICODE_NOT_PRESENT_OFFSET },
  27900   { 0x2f985, 17169, UNICODE_NOT_PRESENT_OFFSET },
  27901   { 0x2f986, 17173, UNICODE_NOT_PRESENT_OFFSET },
  27902   { 0x2f987, 17177, UNICODE_NOT_PRESENT_OFFSET },
  27903   { 0x2f988, 17182, UNICODE_NOT_PRESENT_OFFSET },
  27904   { 0x2f989, 17187, UNICODE_NOT_PRESENT_OFFSET },
  27905   { 0x2f98a, 17192, UNICODE_NOT_PRESENT_OFFSET },
  27906   { 0x2f98b, 16282, UNICODE_NOT_PRESENT_OFFSET },
  27907   { 0x2f98c, 17197, UNICODE_NOT_PRESENT_OFFSET },
  27908   { 0x2f98d, 17201, UNICODE_NOT_PRESENT_OFFSET },
  27909   { 0x2f98e, 17205, UNICODE_NOT_PRESENT_OFFSET },
  27910   { 0x2f98f, 17209, UNICODE_NOT_PRESENT_OFFSET },
  27911   { 0x2f990, 17213, UNICODE_NOT_PRESENT_OFFSET },
  27912   { 0x2f991, 17217, UNICODE_NOT_PRESENT_OFFSET },
  27913   { 0x2f992, 17221, UNICODE_NOT_PRESENT_OFFSET },
  27914   { 0x2f993, 17225, UNICODE_NOT_PRESENT_OFFSET },
  27915   { 0x2f994, 17229, UNICODE_NOT_PRESENT_OFFSET },
  27916   { 0x2f995, 17233, UNICODE_NOT_PRESENT_OFFSET },
  27917   { 0x2f996, 17237, UNICODE_NOT_PRESENT_OFFSET },
  27918   { 0x2f997, 17241, UNICODE_NOT_PRESENT_OFFSET },
  27919   { 0x2f998, 11339, UNICODE_NOT_PRESENT_OFFSET },
  27920   { 0x2f999, 17246, UNICODE_NOT_PRESENT_OFFSET },
  27921   { 0x2f99a, 17250, UNICODE_NOT_PRESENT_OFFSET },
  27922   { 0x2f99b, 17254, UNICODE_NOT_PRESENT_OFFSET },
  27923   { 0x2f99c, 17258, UNICODE_NOT_PRESENT_OFFSET },
  27924   { 0x2f99d, 17262, UNICODE_NOT_PRESENT_OFFSET },
  27925   { 0x2f99e, 17266, UNICODE_NOT_PRESENT_OFFSET },
  27926   { 0x2f99f, 12159, UNICODE_NOT_PRESENT_OFFSET },
  27927   { 0x2f9a0, 17270, UNICODE_NOT_PRESENT_OFFSET },
  27928   { 0x2f9a1, 17274, UNICODE_NOT_PRESENT_OFFSET },
  27929   { 0x2f9a2, 17278, UNICODE_NOT_PRESENT_OFFSET },
  27930   { 0x2f9a3, 17282, UNICODE_NOT_PRESENT_OFFSET },
  27931   { 0x2f9a4, 17286, UNICODE_NOT_PRESENT_OFFSET },
  27932   { 0x2f9a5, 17291, UNICODE_NOT_PRESENT_OFFSET },
  27933   { 0x2f9a6, 17296, UNICODE_NOT_PRESENT_OFFSET },
  27934   { 0x2f9a7, 17301, UNICODE_NOT_PRESENT_OFFSET },
  27935   { 0x2f9a8, 17305, UNICODE_NOT_PRESENT_OFFSET },
  27936   { 0x2f9a9, 17309, UNICODE_NOT_PRESENT_OFFSET },
  27937   { 0x2f9aa, 17313, UNICODE_NOT_PRESENT_OFFSET },
  27938   { 0x2f9ab, 17317, UNICODE_NOT_PRESENT_OFFSET },
  27939   { 0x2f9ac, 17322, UNICODE_NOT_PRESENT_OFFSET },
  27940   { 0x2f9ad, 17326, UNICODE_NOT_PRESENT_OFFSET },
  27941   { 0x2f9ae, 17331, UNICODE_NOT_PRESENT_OFFSET },
  27942   { 0x2f9af, 17335, UNICODE_NOT_PRESENT_OFFSET },
  27943   { 0x2f9b0, 17339, UNICODE_NOT_PRESENT_OFFSET },
  27944   { 0x2f9b1, 17344, UNICODE_NOT_PRESENT_OFFSET },
  27945   { 0x2f9b2, 17349, UNICODE_NOT_PRESENT_OFFSET },
  27946   { 0x2f9b3, 17353, UNICODE_NOT_PRESENT_OFFSET },
  27947   { 0x2f9b4, 11103, UNICODE_NOT_PRESENT_OFFSET },
  27948   { 0x2f9b5, 17357, UNICODE_NOT_PRESENT_OFFSET },
  27949   { 0x2f9b6, 17361, UNICODE_NOT_PRESENT_OFFSET },
  27950   { 0x2f9b7, 17365, UNICODE_NOT_PRESENT_OFFSET },
  27951   { 0x2f9b8, 17369, UNICODE_NOT_PRESENT_OFFSET },
  27952   { 0x2f9b9, 17373, UNICODE_NOT_PRESENT_OFFSET },
  27953   { 0x2f9ba, 17377, UNICODE_NOT_PRESENT_OFFSET },
  27954   { 0x2f9bb, 12428, UNICODE_NOT_PRESENT_OFFSET },
  27955   { 0x2f9bc, 17381, UNICODE_NOT_PRESENT_OFFSET },
  27956   { 0x2f9bd, 17385, UNICODE_NOT_PRESENT_OFFSET },
  27957   { 0x2f9be, 17389, UNICODE_NOT_PRESENT_OFFSET },
  27958   { 0x2f9bf, 17393, UNICODE_NOT_PRESENT_OFFSET },
  27959   { 0x2f9c0, 17397, UNICODE_NOT_PRESENT_OFFSET },
  27960   { 0x2f9c1, 17401, UNICODE_NOT_PRESENT_OFFSET },
  27961   { 0x2f9c2, 17405, UNICODE_NOT_PRESENT_OFFSET },
  27962   { 0x2f9c3, 17409, UNICODE_NOT_PRESENT_OFFSET },
  27963   { 0x2f9c4, 6757, UNICODE_NOT_PRESENT_OFFSET },
  27964   { 0x2f9c5, 17413, UNICODE_NOT_PRESENT_OFFSET },
  27965   { 0x2f9c6, 17418, UNICODE_NOT_PRESENT_OFFSET },
  27966   { 0x2f9c7, 17422, UNICODE_NOT_PRESENT_OFFSET },
  27967   { 0x2f9c8, 17426, UNICODE_NOT_PRESENT_OFFSET },
  27968   { 0x2f9c9, 17430, UNICODE_NOT_PRESENT_OFFSET },
  27969   { 0x2f9ca, 17434, UNICODE_NOT_PRESENT_OFFSET },
  27970   { 0x2f9cb, 17438, UNICODE_NOT_PRESENT_OFFSET },
  27971   { 0x2f9cc, 17443, UNICODE_NOT_PRESENT_OFFSET },
  27972   { 0x2f9cd, 17448, UNICODE_NOT_PRESENT_OFFSET },
  27973   { 0x2f9ce, 17452, UNICODE_NOT_PRESENT_OFFSET },
  27974   { 0x2f9cf, 17456, UNICODE_NOT_PRESENT_OFFSET },
  27975   { 0x2f9d0, 12448, UNICODE_NOT_PRESENT_OFFSET },
  27976   { 0x2f9d1, 12452, UNICODE_NOT_PRESENT_OFFSET },
  27977   { 0x2f9d2, 6785, UNICODE_NOT_PRESENT_OFFSET },
  27978   { 0x2f9d3, 17460, UNICODE_NOT_PRESENT_OFFSET },
  27979   { 0x2f9d4, 17465, UNICODE_NOT_PRESENT_OFFSET },
  27980   { 0x2f9d5, 17469, UNICODE_NOT_PRESENT_OFFSET },
  27981   { 0x2f9d6, 17473, UNICODE_NOT_PRESENT_OFFSET },
  27982   { 0x2f9d7, 17477, UNICODE_NOT_PRESENT_OFFSET },
  27983   { 0x2f9d8, 17481, UNICODE_NOT_PRESENT_OFFSET },
  27984   { 0x2f9d9, 17486, UNICODE_NOT_PRESENT_OFFSET },
  27985   { 0x2f9da, 17491, UNICODE_NOT_PRESENT_OFFSET },
  27986   { 0x2f9db, 17495, UNICODE_NOT_PRESENT_OFFSET },
  27987   { 0x2f9dc, 17499, UNICODE_NOT_PRESENT_OFFSET },
  27988   { 0x2f9dd, 17503, UNICODE_NOT_PRESENT_OFFSET },
  27989   { 0x2f9de, 17508, UNICODE_NOT_PRESENT_OFFSET },
  27990   { 0x2f9df, 12456, UNICODE_NOT_PRESENT_OFFSET },
  27991   { 0x2f9e0, 17512, UNICODE_NOT_PRESENT_OFFSET },
  27992   { 0x2f9e1, 17517, UNICODE_NOT_PRESENT_OFFSET },
  27993   { 0x2f9e2, 17522, UNICODE_NOT_PRESENT_OFFSET },
  27994   { 0x2f9e3, 17526, UNICODE_NOT_PRESENT_OFFSET },
  27995   { 0x2f9e4, 17530, UNICODE_NOT_PRESENT_OFFSET },
  27996   { 0x2f9e5, 17534, UNICODE_NOT_PRESENT_OFFSET },
  27997   { 0x2f9e6, 17539, UNICODE_NOT_PRESENT_OFFSET },
  27998   { 0x2f9e7, 17543, UNICODE_NOT_PRESENT_OFFSET },
  27999   { 0x2f9e8, 17547, UNICODE_NOT_PRESENT_OFFSET },
  28000   { 0x2f9e9, 17551, UNICODE_NOT_PRESENT_OFFSET },
  28001   { 0x2f9ea, 17555, UNICODE_NOT_PRESENT_OFFSET },
  28002   { 0x2f9eb, 17559, UNICODE_NOT_PRESENT_OFFSET },
  28003   { 0x2f9ec, 17563, UNICODE_NOT_PRESENT_OFFSET },
  28004   { 0x2f9ed, 17567, UNICODE_NOT_PRESENT_OFFSET },
  28005   { 0x2f9ee, 17572, UNICODE_NOT_PRESENT_OFFSET },
  28006   { 0x2f9ef, 17576, UNICODE_NOT_PRESENT_OFFSET },
  28007   { 0x2f9f0, 17580, UNICODE_NOT_PRESENT_OFFSET },
  28008   { 0x2f9f1, 17584, UNICODE_NOT_PRESENT_OFFSET },
  28009   { 0x2f9f2, 17589, UNICODE_NOT_PRESENT_OFFSET },
  28010   { 0x2f9f3, 17593, UNICODE_NOT_PRESENT_OFFSET },
  28011   { 0x2f9f4, 17597, UNICODE_NOT_PRESENT_OFFSET },
  28012   { 0x2f9f5, 17601, UNICODE_NOT_PRESENT_OFFSET },
  28013   { 0x2f9f6, 17605, UNICODE_NOT_PRESENT_OFFSET },
  28014   { 0x2f9f7, 17610, UNICODE_NOT_PRESENT_OFFSET },
  28015   { 0x2f9f8, 17615, UNICODE_NOT_PRESENT_OFFSET },
  28016   { 0x2f9f9, 17619, UNICODE_NOT_PRESENT_OFFSET },
  28017   { 0x2f9fa, 17623, UNICODE_NOT_PRESENT_OFFSET },
  28018   { 0x2f9fb, 17627, UNICODE_NOT_PRESENT_OFFSET },
  28019   { 0x2f9fc, 17632, UNICODE_NOT_PRESENT_OFFSET },
  28020   { 0x2f9fd, 17636, UNICODE_NOT_PRESENT_OFFSET },
  28021   { 0x2f9fe, 12480, UNICODE_NOT_PRESENT_OFFSET },
  28022   { 0x2f9ff, 12480, UNICODE_NOT_PRESENT_OFFSET },
  28023   { 0x2fa00, 17641, UNICODE_NOT_PRESENT_OFFSET },
  28024   { 0x2fa01, 17645, UNICODE_NOT_PRESENT_OFFSET },
  28025   { 0x2fa02, 17650, UNICODE_NOT_PRESENT_OFFSET },
  28026   { 0x2fa03, 17654, UNICODE_NOT_PRESENT_OFFSET },
  28027   { 0x2fa04, 17658, UNICODE_NOT_PRESENT_OFFSET },
  28028   { 0x2fa05, 17662, UNICODE_NOT_PRESENT_OFFSET },
  28029   { 0x2fa06, 17666, UNICODE_NOT_PRESENT_OFFSET },
  28030   { 0x2fa07, 17670, UNICODE_NOT_PRESENT_OFFSET },
  28031   { 0x2fa08, 17674, UNICODE_NOT_PRESENT_OFFSET },
  28032   { 0x2fa09, 17678, UNICODE_NOT_PRESENT_OFFSET },
  28033   { 0x2fa0a, 12484, UNICODE_NOT_PRESENT_OFFSET },
  28034   { 0x2fa0b, 17683, UNICODE_NOT_PRESENT_OFFSET },
  28035   { 0x2fa0c, 17687, UNICODE_NOT_PRESENT_OFFSET },
  28036   { 0x2fa0d, 17691, UNICODE_NOT_PRESENT_OFFSET },
  28037   { 0x2fa0e, 17695, UNICODE_NOT_PRESENT_OFFSET },
  28038   { 0x2fa0f, 17699, UNICODE_NOT_PRESENT_OFFSET },
  28039   { 0x2fa10, 17703, UNICODE_NOT_PRESENT_OFFSET },
  28040   { 0x2fa11, 17708, UNICODE_NOT_PRESENT_OFFSET },
  28041   { 0x2fa12, 17712, UNICODE_NOT_PRESENT_OFFSET },
  28042   { 0x2fa13, 17717, UNICODE_NOT_PRESENT_OFFSET },
  28043   { 0x2fa14, 17722, UNICODE_NOT_PRESENT_OFFSET },
  28044   { 0x2fa15, 6977, UNICODE_NOT_PRESENT_OFFSET },
  28045   { 0x2fa16, 17727, UNICODE_NOT_PRESENT_OFFSET },
  28046   { 0x2fa17, 6993, UNICODE_NOT_PRESENT_OFFSET },
  28047   { 0x2fa18, 17731, UNICODE_NOT_PRESENT_OFFSET },
  28048   { 0x2fa19, 17735, UNICODE_NOT_PRESENT_OFFSET },
  28049   { 0x2fa1a, 17739, UNICODE_NOT_PRESENT_OFFSET },
  28050   { 0x2fa1b, 17743, UNICODE_NOT_PRESENT_OFFSET },
  28051   { 0x2fa1c, 7013, UNICODE_NOT_PRESENT_OFFSET },
  28052   { 0x2fa1d, 17747, UNICODE_NOT_PRESENT_OFFSET }
  28053 };
  28054 
  28055 static const char decomp_expansion_string[] =
  28056   "\x20\0" /* offset 0 */
  28057   "\x20\xcc\x88\0" /* offset 2 */
  28058   "\x61\0" /* offset 6 */
  28059   "\x20\xcc\x84\0" /* offset 8 */
  28060   "\x32\0" /* offset 12 */
  28061   "\x33\0" /* offset 14 */
  28062   "\x20\xcc\x81\0" /* offset 16 */
  28063   "\xce\xbc\0" /* offset 20 */
  28064   "\x20\xcc\xa7\0" /* offset 23 */
  28065   "\x31\0" /* offset 27 */
  28066   "\x6f\0" /* offset 29 */
  28067   "\x31\xe2\x81\x84\x34\0" /* offset 31 */
  28068   "\x31\xe2\x81\x84\x32\0" /* offset 37 */
  28069   "\x33\xe2\x81\x84\x34\0" /* offset 43 */
  28070   "\x41\xcc\x80\0" /* offset 49 */
  28071   "\x41\xcc\x81\0" /* offset 53 */
  28072   "\x41\xcc\x82\0" /* offset 57 */
  28073   "\x41\xcc\x83\0" /* offset 61 */
  28074   "\x41\xcc\x88\0" /* offset 65 */
  28075   "\x41\xcc\x8a\0" /* offset 69 */
  28076   "\x43\xcc\xa7\0" /* offset 73 */
  28077   "\x45\xcc\x80\0" /* offset 77 */
  28078   "\x45\xcc\x81\0" /* offset 81 */
  28079   "\x45\xcc\x82\0" /* offset 85 */
  28080   "\x45\xcc\x88\0" /* offset 89 */
  28081   "\x49\xcc\x80\0" /* offset 93 */
  28082   "\x49\xcc\x81\0" /* offset 97 */
  28083   "\x49\xcc\x82\0" /* offset 101 */
  28084   "\x49\xcc\x88\0" /* offset 105 */
  28085   "\x4e\xcc\x83\0" /* offset 109 */
  28086   "\x4f\xcc\x80\0" /* offset 113 */
  28087   "\x4f\xcc\x81\0" /* offset 117 */
  28088   "\x4f\xcc\x82\0" /* offset 121 */
  28089   "\x4f\xcc\x83\0" /* offset 125 */
  28090   "\x4f\xcc\x88\0" /* offset 129 */
  28091   "\x55\xcc\x80\0" /* offset 133 */
  28092   "\x55\xcc\x81\0" /* offset 137 */
  28093   "\x55\xcc\x82\0" /* offset 141 */
  28094   "\x55\xcc\x88\0" /* offset 145 */
  28095   "\x59\xcc\x81\0" /* offset 149 */
  28096   "\x61\xcc\x80\0" /* offset 153 */
  28097   "\x61\xcc\x81\0" /* offset 157 */
  28098   "\x61\xcc\x82\0" /* offset 161 */
  28099   "\x61\xcc\x83\0" /* offset 165 */
  28100   "\x61\xcc\x88\0" /* offset 169 */
  28101   "\x61\xcc\x8a\0" /* offset 173 */
  28102   "\x63\xcc\xa7\0" /* offset 177 */
  28103   "\x65\xcc\x80\0" /* offset 181 */
  28104   "\x65\xcc\x81\0" /* offset 185 */
  28105   "\x65\xcc\x82\0" /* offset 189 */
  28106   "\x65\xcc\x88\0" /* offset 193 */
  28107   "\x69\xcc\x80\0" /* offset 197 */
  28108   "\x69\xcc\x81\0" /* offset 201 */
  28109   "\x69\xcc\x82\0" /* offset 205 */
  28110   "\x69\xcc\x88\0" /* offset 209 */
  28111   "\x6e\xcc\x83\0" /* offset 213 */
  28112   "\x6f\xcc\x80\0" /* offset 217 */
  28113   "\x6f\xcc\x81\0" /* offset 221 */
  28114   "\x6f\xcc\x82\0" /* offset 225 */
  28115   "\x6f\xcc\x83\0" /* offset 229 */
  28116   "\x6f\xcc\x88\0" /* offset 233 */
  28117   "\x75\xcc\x80\0" /* offset 237 */
  28118   "\x75\xcc\x81\0" /* offset 241 */
  28119   "\x75\xcc\x82\0" /* offset 245 */
  28120   "\x75\xcc\x88\0" /* offset 249 */
  28121   "\x79\xcc\x81\0" /* offset 253 */
  28122   "\x79\xcc\x88\0" /* offset 257 */
  28123   "\x41\xcc\x84\0" /* offset 261 */
  28124   "\x61\xcc\x84\0" /* offset 265 */
  28125   "\x41\xcc\x86\0" /* offset 269 */
  28126   "\x61\xcc\x86\0" /* offset 273 */
  28127   "\x41\xcc\xa8\0" /* offset 277 */
  28128   "\x61\xcc\xa8\0" /* offset 281 */
  28129   "\x43\xcc\x81\0" /* offset 285 */
  28130   "\x63\xcc\x81\0" /* offset 289 */
  28131   "\x43\xcc\x82\0" /* offset 293 */
  28132   "\x63\xcc\x82\0" /* offset 297 */
  28133   "\x43\xcc\x87\0" /* offset 301 */
  28134   "\x63\xcc\x87\0" /* offset 305 */
  28135   "\x43\xcc\x8c\0" /* offset 309 */
  28136   "\x63\xcc\x8c\0" /* offset 313 */
  28137   "\x44\xcc\x8c\0" /* offset 317 */
  28138   "\x64\xcc\x8c\0" /* offset 321 */
  28139   "\x45\xcc\x84\0" /* offset 325 */
  28140   "\x65\xcc\x84\0" /* offset 329 */
  28141   "\x45\xcc\x86\0" /* offset 333 */
  28142   "\x65\xcc\x86\0" /* offset 337 */
  28143   "\x45\xcc\x87\0" /* offset 341 */
  28144   "\x65\xcc\x87\0" /* offset 345 */
  28145   "\x45\xcc\xa8\0" /* offset 349 */
  28146   "\x65\xcc\xa8\0" /* offset 353 */
  28147   "\x45\xcc\x8c\0" /* offset 357 */
  28148   "\x65\xcc\x8c\0" /* offset 361 */
  28149   "\x47\xcc\x82\0" /* offset 365 */
  28150   "\x67\xcc\x82\0" /* offset 369 */
  28151   "\x47\xcc\x86\0" /* offset 373 */
  28152   "\x67\xcc\x86\0" /* offset 377 */
  28153   "\x47\xcc\x87\0" /* offset 381 */
  28154   "\x67\xcc\x87\0" /* offset 385 */
  28155   "\x47\xcc\xa7\0" /* offset 389 */
  28156   "\x67\xcc\xa7\0" /* offset 393 */
  28157   "\x48\xcc\x82\0" /* offset 397 */
  28158   "\x68\xcc\x82\0" /* offset 401 */
  28159   "\x49\xcc\x83\0" /* offset 405 */
  28160   "\x69\xcc\x83\0" /* offset 409 */
  28161   "\x49\xcc\x84\0" /* offset 413 */
  28162   "\x69\xcc\x84\0" /* offset 417 */
  28163   "\x49\xcc\x86\0" /* offset 421 */
  28164   "\x69\xcc\x86\0" /* offset 425 */
  28165   "\x49\xcc\xa8\0" /* offset 429 */
  28166   "\x69\xcc\xa8\0" /* offset 433 */
  28167   "\x49\xcc\x87\0" /* offset 437 */
  28168   "\x49\x4a\0" /* offset 441 */
  28169   "\x69\x6a\0" /* offset 444 */
  28170   "\x4a\xcc\x82\0" /* offset 447 */
  28171   "\x6a\xcc\x82\0" /* offset 451 */
  28172   "\x4b\xcc\xa7\0" /* offset 455 */
  28173   "\x6b\xcc\xa7\0" /* offset 459 */
  28174   "\x4c\xcc\x81\0" /* offset 463 */
  28175   "\x6c\xcc\x81\0" /* offset 467 */
  28176   "\x4c\xcc\xa7\0" /* offset 471 */
  28177   "\x6c\xcc\xa7\0" /* offset 475 */
  28178   "\x4c\xcc\x8c\0" /* offset 479 */
  28179   "\x6c\xcc\x8c\0" /* offset 483 */
  28180   "\x4c\xc2\xb7\0" /* offset 487 */
  28181   "\x6c\xc2\xb7\0" /* offset 491 */
  28182   "\x4e\xcc\x81\0" /* offset 495 */
  28183   "\x6e\xcc\x81\0" /* offset 499 */
  28184   "\x4e\xcc\xa7\0" /* offset 503 */
  28185   "\x6e\xcc\xa7\0" /* offset 507 */
  28186   "\x4e\xcc\x8c\0" /* offset 511 */
  28187   "\x6e\xcc\x8c\0" /* offset 515 */
  28188   "\xca\xbc\x6e\0" /* offset 519 */
  28189   "\x4f\xcc\x84\0" /* offset 523 */
  28190   "\x6f\xcc\x84\0" /* offset 527 */
  28191   "\x4f\xcc\x86\0" /* offset 531 */
  28192   "\x6f\xcc\x86\0" /* offset 535 */
  28193   "\x4f\xcc\x8b\0" /* offset 539 */
  28194   "\x6f\xcc\x8b\0" /* offset 543 */
  28195   "\x52\xcc\x81\0" /* offset 547 */
  28196   "\x72\xcc\x81\0" /* offset 551 */
  28197   "\x52\xcc\xa7\0" /* offset 555 */
  28198   "\x72\xcc\xa7\0" /* offset 559 */
  28199   "\x52\xcc\x8c\0" /* offset 563 */
  28200   "\x72\xcc\x8c\0" /* offset 567 */
  28201   "\x53\xcc\x81\0" /* offset 571 */
  28202   "\x73\xcc\x81\0" /* offset 575 */
  28203   "\x53\xcc\x82\0" /* offset 579 */
  28204   "\x73\xcc\x82\0" /* offset 583 */
  28205   "\x53\xcc\xa7\0" /* offset 587 */
  28206   "\x73\xcc\xa7\0" /* offset 591 */
  28207   "\x53\xcc\x8c\0" /* offset 595 */
  28208   "\x73\xcc\x8c\0" /* offset 599 */
  28209   "\x54\xcc\xa7\0" /* offset 603 */
  28210   "\x74\xcc\xa7\0" /* offset 607 */
  28211   "\x54\xcc\x8c\0" /* offset 611 */
  28212   "\x74\xcc\x8c\0" /* offset 615 */
  28213   "\x55\xcc\x83\0" /* offset 619 */
  28214   "\x75\xcc\x83\0" /* offset 623 */
  28215   "\x55\xcc\x84\0" /* offset 627 */
  28216   "\x75\xcc\x84\0" /* offset 631 */
  28217   "\x55\xcc\x86\0" /* offset 635 */
  28218   "\x75\xcc\x86\0" /* offset 639 */
  28219   "\x55\xcc\x8a\0" /* offset 643 */
  28220   "\x75\xcc\x8a\0" /* offset 647 */
  28221   "\x55\xcc\x8b\0" /* offset 651 */
  28222   "\x75\xcc\x8b\0" /* offset 655 */
  28223   "\x55\xcc\xa8\0" /* offset 659 */
  28224   "\x75\xcc\xa8\0" /* offset 663 */
  28225   "\x57\xcc\x82\0" /* offset 667 */
  28226   "\x77\xcc\x82\0" /* offset 671 */
  28227   "\x59\xcc\x82\0" /* offset 675 */
  28228   "\x79\xcc\x82\0" /* offset 679 */
  28229   "\x59\xcc\x88\0" /* offset 683 */
  28230   "\x5a\xcc\x81\0" /* offset 687 */
  28231   "\x7a\xcc\x81\0" /* offset 691 */
  28232   "\x5a\xcc\x87\0" /* offset 695 */
  28233   "\x7a\xcc\x87\0" /* offset 699 */
  28234   "\x5a\xcc\x8c\0" /* offset 703 */
  28235   "\x7a\xcc\x8c\0" /* offset 707 */
  28236   "\x73\0" /* offset 711 */
  28237   "\x4f\xcc\x9b\0" /* offset 713 */
  28238   "\x6f\xcc\x9b\0" /* offset 717 */
  28239   "\x55\xcc\x9b\0" /* offset 721 */
  28240   "\x75\xcc\x9b\0" /* offset 725 */
  28241   "\x44\x5a\xcc\x8c\0" /* offset 729 */
  28242   "\x44\x7a\xcc\x8c\0" /* offset 734 */
  28243   "\x64\x7a\xcc\x8c\0" /* offset 739 */
  28244   "\x4c\x4a\0" /* offset 744 */
  28245   "\x4c\x6a\0" /* offset 747 */
  28246   "\x6c\x6a\0" /* offset 750 */
  28247   "\x4e\x4a\0" /* offset 753 */
  28248   "\x4e\x6a\0" /* offset 756 */
  28249   "\x6e\x6a\0" /* offset 759 */
  28250   "\x41\xcc\x8c\0" /* offset 762 */
  28251   "\x61\xcc\x8c\0" /* offset 766 */
  28252   "\x49\xcc\x8c\0" /* offset 770 */
  28253   "\x69\xcc\x8c\0" /* offset 774 */
  28254   "\x4f\xcc\x8c\0" /* offset 778 */
  28255   "\x6f\xcc\x8c\0" /* offset 782 */
  28256   "\x55\xcc\x8c\0" /* offset 786 */
  28257   "\x75\xcc\x8c\0" /* offset 790 */
  28258   "\x55\xcc\x88\xcc\x84\0" /* offset 794 */
  28259   "\x75\xcc\x88\xcc\x84\0" /* offset 800 */
  28260   "\x55\xcc\x88\xcc\x81\0" /* offset 806 */
  28261   "\x75\xcc\x88\xcc\x81\0" /* offset 812 */
  28262   "\x55\xcc\x88\xcc\x8c\0" /* offset 818 */
  28263   "\x75\xcc\x88\xcc\x8c\0" /* offset 824 */
  28264   "\x55\xcc\x88\xcc\x80\0" /* offset 830 */
  28265   "\x75\xcc\x88\xcc\x80\0" /* offset 836 */
  28266   "\x41\xcc\x88\xcc\x84\0" /* offset 842 */
  28267   "\x61\xcc\x88\xcc\x84\0" /* offset 848 */
  28268   "\x41\xcc\x87\xcc\x84\0" /* offset 854 */
  28269   "\x61\xcc\x87\xcc\x84\0" /* offset 860 */
  28270   "\xc3\x86\xcc\x84\0" /* offset 866 */
  28271   "\xc3\xa6\xcc\x84\0" /* offset 871 */
  28272   "\x47\xcc\x8c\0" /* offset 876 */
  28273   "\x67\xcc\x8c\0" /* offset 880 */
  28274   "\x4b\xcc\x8c\0" /* offset 884 */
  28275   "\x6b\xcc\x8c\0" /* offset 888 */
  28276   "\x4f\xcc\xa8\0" /* offset 892 */
  28277   "\x6f\xcc\xa8\0" /* offset 896 */
  28278   "\x4f\xcc\xa8\xcc\x84\0" /* offset 900 */
  28279   "\x6f\xcc\xa8\xcc\x84\0" /* offset 906 */
  28280   "\xc6\xb7\xcc\x8c\0" /* offset 912 */
  28281   "\xca\x92\xcc\x8c\0" /* offset 917 */
  28282   "\x6a\xcc\x8c\0" /* offset 922 */
  28283   "\x44\x5a\0" /* offset 926 */
  28284   "\x44\x7a\0" /* offset 929 */
  28285   "\x64\x7a\0" /* offset 932 */
  28286   "\x47\xcc\x81\0" /* offset 935 */
  28287   "\x67\xcc\x81\0" /* offset 939 */
  28288   "\x4e\xcc\x80\0" /* offset 943 */
  28289   "\x6e\xcc\x80\0" /* offset 947 */
  28290   "\x41\xcc\x8a\xcc\x81\0" /* offset 951 */
  28291   "\x61\xcc\x8a\xcc\x81\0" /* offset 957 */
  28292   "\xc3\x86\xcc\x81\0" /* offset 963 */
  28293   "\xc3\xa6\xcc\x81\0" /* offset 968 */
  28294   "\xc3\x98\xcc\x81\0" /* offset 973 */
  28295   "\xc3\xb8\xcc\x81\0" /* offset 978 */
  28296   "\x41\xcc\x8f\0" /* offset 983 */
  28297   "\x61\xcc\x8f\0" /* offset 987 */
  28298   "\x41\xcc\x91\0" /* offset 991 */
  28299   "\x61\xcc\x91\0" /* offset 995 */
  28300   "\x45\xcc\x8f\0" /* offset 999 */
  28301   "\x65\xcc\x8f\0" /* offset 1003 */
  28302   "\x45\xcc\x91\0" /* offset 1007 */
  28303   "\x65\xcc\x91\0" /* offset 1011 */
  28304   "\x49\xcc\x8f\0" /* offset 1015 */
  28305   "\x69\xcc\x8f\0" /* offset 1019 */
  28306   "\x49\xcc\x91\0" /* offset 1023 */
  28307   "\x69\xcc\x91\0" /* offset 1027 */
  28308   "\x4f\xcc\x8f\0" /* offset 1031 */
  28309   "\x6f\xcc\x8f\0" /* offset 1035 */
  28310   "\x4f\xcc\x91\0" /* offset 1039 */
  28311   "\x6f\xcc\x91\0" /* offset 1043 */
  28312   "\x52\xcc\x8f\0" /* offset 1047 */
  28313   "\x72\xcc\x8f\0" /* offset 1051 */
  28314   "\x52\xcc\x91\0" /* offset 1055 */
  28315   "\x72\xcc\x91\0" /* offset 1059 */
  28316   "\x55\xcc\x8f\0" /* offset 1063 */
  28317   "\x75\xcc\x8f\0" /* offset 1067 */
  28318   "\x55\xcc\x91\0" /* offset 1071 */
  28319   "\x75\xcc\x91\0" /* offset 1075 */
  28320   "\x53\xcc\xa6\0" /* offset 1079 */
  28321   "\x73\xcc\xa6\0" /* offset 1083 */
  28322   "\x54\xcc\xa6\0" /* offset 1087 */
  28323   "\x74\xcc\xa6\0" /* offset 1091 */
  28324   "\x48\xcc\x8c\0" /* offset 1095 */
  28325   "\x68\xcc\x8c\0" /* offset 1099 */
  28326   "\x41\xcc\x87\0" /* offset 1103 */
  28327   "\x61\xcc\x87\0" /* offset 1107 */
  28328   "\x45\xcc\xa7\0" /* offset 1111 */
  28329   "\x65\xcc\xa7\0" /* offset 1115 */
  28330   "\x4f\xcc\x88\xcc\x84\0" /* offset 1119 */
  28331   "\x6f\xcc\x88\xcc\x84\0" /* offset 1125 */
  28332   "\x4f\xcc\x83\xcc\x84\0" /* offset 1131 */
  28333   "\x6f\xcc\x83\xcc\x84\0" /* offset 1137 */
  28334   "\x4f\xcc\x87\0" /* offset 1143 */
  28335   "\x6f\xcc\x87\0" /* offset 1147 */
  28336   "\x4f\xcc\x87\xcc\x84\0" /* offset 1151 */
  28337   "\x6f\xcc\x87\xcc\x84\0" /* offset 1157 */
  28338   "\x59\xcc\x84\0" /* offset 1163 */
  28339   "\x79\xcc\x84\0" /* offset 1167 */
  28340   "\x68\0" /* offset 1171 */
  28341   "\xc9\xa6\0" /* offset 1173 */
  28342   "\x6a\0" /* offset 1176 */
  28343   "\x72\0" /* offset 1178 */
  28344   "\xc9\xb9\0" /* offset 1180 */
  28345   "\xc9\xbb\0" /* offset 1183 */
  28346   "\xca\x81\0" /* offset 1186 */
  28347   "\x77\0" /* offset 1189 */
  28348   "\x79\0" /* offset 1191 */
  28349   "\x20\xcc\x86\0" /* offset 1193 */
  28350   "\x20\xcc\x87\0" /* offset 1197 */
  28351   "\x20\xcc\x8a\0" /* offset 1201 */
  28352   "\x20\xcc\xa8\0" /* offset 1205 */
  28353   "\x20\xcc\x83\0" /* offset 1209 */
  28354   "\x20\xcc\x8b\0" /* offset 1213 */
  28355   "\xc9\xa3\0" /* offset 1217 */
  28356   "\x6c\0" /* offset 1220 */
  28357   "\x78\0" /* offset 1222 */
  28358   "\xca\x95\0" /* offset 1224 */
  28359   "\xcc\x80\0" /* offset 1227 */
  28360   "\xcc\x81\0" /* offset 1230 */
  28361   "\xcc\x93\0" /* offset 1233 */
  28362   "\xcc\x88\xcc\x81\0" /* offset 1236 */
  28363   "\xca\xb9\0" /* offset 1241 */
  28364   "\x20\xcd\x85\0" /* offset 1244 */
  28365   "\x3b\0" /* offset 1248 */
  28366   "\xc2\xa8\xcc\x81\0" /* offset 1250 */
  28367   "\x20\xcc\x88\xcc\x81\0" /* offset 1255 */
  28368   "\xce\x91\xcc\x81\0" /* offset 1261 */
  28369   "\xc2\xb7\0" /* offset 1266 */
  28370   "\xce\x95\xcc\x81\0" /* offset 1269 */
  28371   "\xce\x97\xcc\x81\0" /* offset 1274 */
  28372   "\xce\x99\xcc\x81\0" /* offset 1279 */
  28373   "\xce\x9f\xcc\x81\0" /* offset 1284 */
  28374   "\xce\xa5\xcc\x81\0" /* offset 1289 */
  28375   "\xce\xa9\xcc\x81\0" /* offset 1294 */
  28376   "\xce\xb9\xcc\x88\xcc\x81\0" /* offset 1299 */
  28377   "\xce\x99\xcc\x88\0" /* offset 1306 */
  28378   "\xce\xa5\xcc\x88\0" /* offset 1311 */
  28379   "\xce\xb1\xcc\x81\0" /* offset 1316 */
  28380   "\xce\xb5\xcc\x81\0" /* offset 1321 */
  28381   "\xce\xb7\xcc\x81\0" /* offset 1326 */
  28382   "\xce\xb9\xcc\x81\0" /* offset 1331 */
  28383   "\xcf\x85\xcc\x88\xcc\x81\0" /* offset 1336 */
  28384   "\xce\xb9\xcc\x88\0" /* offset 1343 */
  28385   "\xcf\x85\xcc\x88\0" /* offset 1348 */
  28386   "\xce\xbf\xcc\x81\0" /* offset 1353 */
  28387   "\xcf\x85\xcc\x81\0" /* offset 1358 */
  28388   "\xcf\x89\xcc\x81\0" /* offset 1363 */
  28389   "\xce\xb2\0" /* offset 1368 */
  28390   "\xce\xb8\0" /* offset 1371 */
  28391   "\xce\xa5\0" /* offset 1374 */
  28392   "\xcf\x92\xcc\x81\0" /* offset 1377 */
  28393   "\xcf\x92\xcc\x88\0" /* offset 1382 */
  28394   "\xcf\x86\0" /* offset 1387 */
  28395   "\xcf\x80\0" /* offset 1390 */
  28396   "\xce\xba\0" /* offset 1393 */
  28397   "\xcf\x81\0" /* offset 1396 */
  28398   "\xcf\x82\0" /* offset 1399 */
  28399   "\xce\x98\0" /* offset 1402 */
  28400   "\xce\xb5\0" /* offset 1405 */
  28401   "\xce\xa3\0" /* offset 1408 */
  28402   "\xd0\x95\xcc\x80\0" /* offset 1411 */
  28403   "\xd0\x95\xcc\x88\0" /* offset 1416 */
  28404   "\xd0\x93\xcc\x81\0" /* offset 1421 */
  28405   "\xd0\x86\xcc\x88\0" /* offset 1426 */
  28406   "\xd0\x9a\xcc\x81\0" /* offset 1431 */
  28407   "\xd0\x98\xcc\x80\0" /* offset 1436 */
  28408   "\xd0\xa3\xcc\x86\0" /* offset 1441 */
  28409   "\xd0\x98\xcc\x86\0" /* offset 1446 */
  28410   "\xd0\xb8\xcc\x86\0" /* offset 1451 */
  28411   "\xd0\xb5\xcc\x80\0" /* offset 1456 */
  28412   "\xd0\xb5\xcc\x88\0" /* offset 1461 */
  28413   "\xd0\xb3\xcc\x81\0" /* offset 1466 */
  28414   "\xd1\x96\xcc\x88\0" /* offset 1471 */
  28415   "\xd0\xba\xcc\x81\0" /* offset 1476 */
  28416   "\xd0\xb8\xcc\x80\0" /* offset 1481 */
  28417   "\xd1\x83\xcc\x86\0" /* offset 1486 */
  28418   "\xd1\xb4\xcc\x8f\0" /* offset 1491 */
  28419   "\xd1\xb5\xcc\x8f\0" /* offset 1496 */
  28420   "\xd0\x96\xcc\x86\0" /* offset 1501 */
  28421   "\xd0\xb6\xcc\x86\0" /* offset 1506 */
  28422   "\xd0\x90\xcc\x86\0" /* offset 1511 */
  28423   "\xd0\xb0\xcc\x86\0" /* offset 1516 */
  28424   "\xd0\x90\xcc\x88\0" /* offset 1521 */
  28425   "\xd0\xb0\xcc\x88\0" /* offset 1526 */
  28426   "\xd0\x95\xcc\x86\0" /* offset 1531 */
  28427   "\xd0\xb5\xcc\x86\0" /* offset 1536 */
  28428   "\xd3\x98\xcc\x88\0" /* offset 1541 */
  28429   "\xd3\x99\xcc\x88\0" /* offset 1546 */
  28430   "\xd0\x96\xcc\x88\0" /* offset 1551 */
  28431   "\xd0\xb6\xcc\x88\0" /* offset 1556 */
  28432   "\xd0\x97\xcc\x88\0" /* offset 1561 */
  28433   "\xd0\xb7\xcc\x88\0" /* offset 1566 */
  28434   "\xd0\x98\xcc\x84\0" /* offset 1571 */
  28435   "\xd0\xb8\xcc\x84\0" /* offset 1576 */
  28436   "\xd0\x98\xcc\x88\0" /* offset 1581 */
  28437   "\xd0\xb8\xcc\x88\0" /* offset 1586 */
  28438   "\xd0\x9e\xcc\x88\0" /* offset 1591 */
  28439   "\xd0\xbe\xcc\x88\0" /* offset 1596 */
  28440   "\xd3\xa8\xcc\x88\0" /* offset 1601 */
  28441   "\xd3\xa9\xcc\x88\0" /* offset 1606 */
  28442   "\xd0\xad\xcc\x88\0" /* offset 1611 */
  28443   "\xd1\x8d\xcc\x88\0" /* offset 1616 */
  28444   "\xd0\xa3\xcc\x84\0" /* offset 1621 */
  28445   "\xd1\x83\xcc\x84\0" /* offset 1626 */
  28446   "\xd0\xa3\xcc\x88\0" /* offset 1631 */
  28447   "\xd1\x83\xcc\x88\0" /* offset 1636 */
  28448   "\xd0\xa3\xcc\x8b\0" /* offset 1641 */
  28449   "\xd1\x83\xcc\x8b\0" /* offset 1646 */
  28450   "\xd0\xa7\xcc\x88\0" /* offset 1651 */
  28451   "\xd1\x87\xcc\x88\0" /* offset 1656 */
  28452   "\xd0\xab\xcc\x88\0" /* offset 1661 */
  28453   "\xd1\x8b\xcc\x88\0" /* offset 1666 */
  28454   "\xd5\xa5\xd6\x82\0" /* offset 1671 */
  28455   "\xd8\xa7\xd9\x93\0" /* offset 1676 */
  28456   "\xd8\xa7\xd9\x94\0" /* offset 1681 */
  28457   "\xd9\x88\xd9\x94\0" /* offset 1686 */
  28458   "\xd8\xa7\xd9\x95\0" /* offset 1691 */
  28459   "\xd9\x8a\xd9\x94\0" /* offset 1696 */
  28460   "\xd8\xa7\xd9\xb4\0" /* offset 1701 */
  28461   "\xd9\x88\xd9\xb4\0" /* offset 1706 */
  28462   "\xdb\x87\xd9\xb4\0" /* offset 1711 */
  28463   "\xd9\x8a\xd9\xb4\0" /* offset 1716 */
  28464   "\xdb\x95\xd9\x94\0" /* offset 1721 */
  28465   "\xdb\x81\xd9\x94\0" /* offset 1726 */
  28466   "\xdb\x92\xd9\x94\0" /* offset 1731 */
  28467   "\xe0\xa4\xa8\xe0\xa4\xbc\0" /* offset 1736 */
  28468   "\xe0\xa4\xb0\xe0\xa4\xbc\0" /* offset 1743 */
  28469   "\xe0\xa4\xb3\xe0\xa4\xbc\0" /* offset 1750 */
  28470   "\xe0\xa4\x95\xe0\xa4\xbc\0" /* offset 1757 */
  28471   "\xe0\xa4\x96\xe0\xa4\xbc\0" /* offset 1764 */
  28472   "\xe0\xa4\x97\xe0\xa4\xbc\0" /* offset 1771 */
  28473   "\xe0\xa4\x9c\xe0\xa4\xbc\0" /* offset 1778 */
  28474   "\xe0\xa4\xa1\xe0\xa4\xbc\0" /* offset 1785 */
  28475   "\xe0\xa4\xa2\xe0\xa4\xbc\0" /* offset 1792 */
  28476   "\xe0\xa4\xab\xe0\xa4\xbc\0" /* offset 1799 */
  28477   "\xe0\xa4\xaf\xe0\xa4\xbc\0" /* offset 1806 */
  28478   "\xe0\xa7\x87\xe0\xa6\xbe\0" /* offset 1813 */
  28479   "\xe0\xa7\x87\xe0\xa7\x97\0" /* offset 1820 */
  28480   "\xe0\xa6\xa1\xe0\xa6\xbc\0" /* offset 1827 */
  28481   "\xe0\xa6\xa2\xe0\xa6\xbc\0" /* offset 1834 */
  28482   "\xe0\xa6\xaf\xe0\xa6\xbc\0" /* offset 1841 */
  28483   "\xe0\xa8\xb2\xe0\xa8\xbc\0" /* offset 1848 */
  28484   "\xe0\xa8\xb8\xe0\xa8\xbc\0" /* offset 1855 */
  28485   "\xe0\xa8\x96\xe0\xa8\xbc\0" /* offset 1862 */
  28486   "\xe0\xa8\x97\xe0\xa8\xbc\0" /* offset 1869 */
  28487   "\xe0\xa8\x9c\xe0\xa8\xbc\0" /* offset 1876 */
  28488   "\xe0\xa8\xab\xe0\xa8\xbc\0" /* offset 1883 */
  28489   "\xe0\xad\x87\xe0\xad\x96\0" /* offset 1890 */
  28490   "\xe0\xad\x87\xe0\xac\xbe\0" /* offset 1897 */
  28491   "\xe0\xad\x87\xe0\xad\x97\0" /* offset 1904 */
  28492   "\xe0\xac\xa1\xe0\xac\xbc\0" /* offset 1911 */
  28493   "\xe0\xac\xa2\xe0\xac\xbc\0" /* offset 1918 */
  28494   "\xe0\xae\x92\xe0\xaf\x97\0" /* offset 1925 */
  28495   "\xe0\xaf\x86\xe0\xae\xbe\0" /* offset 1932 */
  28496   "\xe0\xaf\x87\xe0\xae\xbe\0" /* offset 1939 */
  28497   "\xe0\xaf\x86\xe0\xaf\x97\0" /* offset 1946 */
  28498   "\xe0\xb1\x86\xe0\xb1\x96\0" /* offset 1953 */
  28499   "\xe0\xb2\xbf\xe0\xb3\x95\0" /* offset 1960 */
  28500   "\xe0\xb3\x86\xe0\xb3\x95\0" /* offset 1967 */
  28501   "\xe0\xb3\x86\xe0\xb3\x96\0" /* offset 1974 */
  28502   "\xe0\xb3\x86\xe0\xb3\x82\0" /* offset 1981 */
  28503   "\xe0\xb3\x86\xe0\xb3\x82\xe0\xb3\x95\0" /* offset 1988 */
  28504   "\xe0\xb5\x86\xe0\xb4\xbe\0" /* offset 1998 */
  28505   "\xe0\xb5\x87\xe0\xb4\xbe\0" /* offset 2005 */
  28506   "\xe0\xb5\x86\xe0\xb5\x97\0" /* offset 2012 */
  28507   "\xe0\xb7\x99\xe0\xb7\x8a\0" /* offset 2019 */
  28508   "\xe0\xb7\x99\xe0\xb7\x8f\0" /* offset 2026 */
  28509   "\xe0\xb7\x99\xe0\xb7\x8f\xe0\xb7\x8a\0" /* offset 2033 */
  28510   "\xe0\xb7\x99\xe0\xb7\x9f\0" /* offset 2043 */
  28511   "\xe0\xb9\x8d\xe0\xb8\xb2\0" /* offset 2050 */
  28512   "\xe0\xbb\x8d\xe0\xba\xb2\0" /* offset 2057 */
  28513   "\xe0\xba\xab\xe0\xba\x99\0" /* offset 2064 */
  28514   "\xe0\xba\xab\xe0\xba\xa1\0" /* offset 2071 */
  28515   "\xe0\xbc\x8b\0" /* offset 2078 */
  28516   "\xe0\xbd\x82\xe0\xbe\xb7\0" /* offset 2082 */
  28517   "\xe0\xbd\x8c\xe0\xbe\xb7\0" /* offset 2089 */
  28518   "\xe0\xbd\x91\xe0\xbe\xb7\0" /* offset 2096 */
  28519   "\xe0\xbd\x96\xe0\xbe\xb7\0" /* offset 2103 */
  28520   "\xe0\xbd\x9b\xe0\xbe\xb7\0" /* offset 2110 */
  28521   "\xe0\xbd\x80\xe0\xbe\xb5\0" /* offset 2117 */
  28522   "\xe0\xbd\xb1\xe0\xbd\xb2\0" /* offset 2124 */
  28523   "\xe0\xbd\xb1\xe0\xbd\xb4\0" /* offset 2131 */
  28524   "\xe0\xbe\xb2\xe0\xbe\x80\0" /* offset 2138 */
  28525   "\xe0\xbe\xb2\xe0\xbd\xb1\xe0\xbe\x80\0" /* offset 2145 */
  28526   "\xe0\xbe\xb3\xe0\xbe\x80\0" /* offset 2155 */
  28527   "\xe0\xbe\xb3\xe0\xbd\xb1\xe0\xbe\x80\0" /* offset 2162 */
  28528   "\xe0\xbd\xb1\xe0\xbe\x80\0" /* offset 2172 */
  28529   "\xe0\xbe\x92\xe0\xbe\xb7\0" /* offset 2179 */
  28530   "\xe0\xbe\x9c\xe0\xbe\xb7\0" /* offset 2186 */
  28531   "\xe0\xbe\xa1\xe0\xbe\xb7\0" /* offset 2193 */
  28532   "\xe0\xbe\xa6\xe0\xbe\xb7\0" /* offset 2200 */
  28533   "\xe0\xbe\xab\xe0\xbe\xb7\0" /* offset 2207 */
  28534   "\xe0\xbe\x90\xe0\xbe\xb5\0" /* offset 2214 */
  28535   "\xe1\x80\xa5\xe1\x80\xae\0" /* offset 2221 */
  28536   "\xe1\x83\x9c\0" /* offset 2228 */
  28537   "\xe1\xac\x85\xe1\xac\xb5\0" /* offset 2232 */
  28538   "\xe1\xac\x87\xe1\xac\xb5\0" /* offset 2239 */
  28539   "\xe1\xac\x89\xe1\xac\xb5\0" /* offset 2246 */
  28540   "\xe1\xac\x8b\xe1\xac\xb5\0" /* offset 2253 */
  28541   "\xe1\xac\x8d\xe1\xac\xb5\0" /* offset 2260 */
  28542   "\xe1\xac\x91\xe1\xac\xb5\0" /* offset 2267 */
  28543   "\xe1\xac\xba\xe1\xac\xb5\0" /* offset 2274 */
  28544   "\xe1\xac\xbc\xe1\xac\xb5\0" /* offset 2281 */
  28545   "\xe1\xac\xbe\xe1\xac\xb5\0" /* offset 2288 */
  28546   "\xe1\xac\xbf\xe1\xac\xb5\0" /* offset 2295 */
  28547   "\xe1\xad\x82\xe1\xac\xb5\0" /* offset 2302 */
  28548   "\x41\0" /* offset 2309 */
  28549   "\xc3\x86\0" /* offset 2311 */
  28550   "\x42\0" /* offset 2314 */
  28551   "\x44\0" /* offset 2316 */
  28552   "\x45\0" /* offset 2318 */
  28553   "\xc6\x8e\0" /* offset 2320 */
  28554   "\x47\0" /* offset 2323 */
  28555   "\x48\0" /* offset 2325 */
  28556   "\x49\0" /* offset 2327 */
  28557   "\x4a\0" /* offset 2329 */
  28558   "\x4b\0" /* offset 2331 */
  28559   "\x4c\0" /* offset 2333 */
  28560   "\x4d\0" /* offset 2335 */
  28561   "\x4e\0" /* offset 2337 */
  28562   "\x4f\0" /* offset 2339 */
  28563   "\xc8\xa2\0" /* offset 2341 */
  28564   "\x50\0" /* offset 2344 */
  28565   "\x52\0" /* offset 2346 */
  28566   "\x54\0" /* offset 2348 */
  28567   "\x55\0" /* offset 2350 */
  28568   "\x57\0" /* offset 2352 */
  28569   "\xc9\x90\0" /* offset 2354 */
  28570   "\xc9\x91\0" /* offset 2357 */
  28571   "\xe1\xb4\x82\0" /* offset 2360 */
  28572   "\x62\0" /* offset 2364 */
  28573   "\x64\0" /* offset 2366 */
  28574   "\x65\0" /* offset 2368 */
  28575   "\xc9\x99\0" /* offset 2370 */
  28576   "\xc9\x9b\0" /* offset 2373 */
  28577   "\xc9\x9c\0" /* offset 2376 */
  28578   "\x67\0" /* offset 2379 */
  28579   "\x6b\0" /* offset 2381 */
  28580   "\x6d\0" /* offset 2383 */
  28581   "\xc5\x8b\0" /* offset 2385 */
  28582   "\xc9\x94\0" /* offset 2388 */
  28583   "\xe1\xb4\x96\0" /* offset 2391 */
  28584   "\xe1\xb4\x97\0" /* offset 2395 */
  28585   "\x70\0" /* offset 2399 */
  28586   "\x74\0" /* offset 2401 */
  28587   "\x75\0" /* offset 2403 */
  28588   "\xe1\xb4\x9d\0" /* offset 2405 */
  28589   "\xc9\xaf\0" /* offset 2409 */
  28590   "\x76\0" /* offset 2412 */
  28591   "\xe1\xb4\xa5\0" /* offset 2414 */
  28592   "\xce\xb3\0" /* offset 2418 */
  28593   "\xce\xb4\0" /* offset 2421 */
  28594   "\xcf\x87\0" /* offset 2424 */
  28595   "\x69\0" /* offset 2427 */
  28596   "\xd0\xbd\0" /* offset 2429 */
  28597   "\xc9\x92\0" /* offset 2432 */
  28598   "\x63\0" /* offset 2435 */
  28599   "\xc9\x95\0" /* offset 2437 */
  28600   "\xc3\xb0\0" /* offset 2440 */
  28601   "\x66\0" /* offset 2443 */
  28602   "\xc9\x9f\0" /* offset 2445 */
  28603   "\xc9\xa1\0" /* offset 2448 */
  28604   "\xc9\xa5\0" /* offset 2451 */
  28605   "\xc9\xa8\0" /* offset 2454 */
  28606   "\xc9\xa9\0" /* offset 2457 */
  28607   "\xc9\xaa\0" /* offset 2460 */
  28608   "\xe1\xb5\xbb\0" /* offset 2463 */
  28609   "\xca\x9d\0" /* offset 2467 */
  28610   "\xc9\xad\0" /* offset 2470 */
  28611   "\xe1\xb6\x85\0" /* offset 2473 */
  28612   "\xca\x9f\0" /* offset 2477 */
  28613   "\xc9\xb1\0" /* offset 2480 */
  28614   "\xc9\xb0\0" /* offset 2483 */
  28615   "\xc9\xb2\0" /* offset 2486 */
  28616   "\xc9\xb3\0" /* offset 2489 */
  28617   "\xc9\xb4\0" /* offset 2492 */
  28618   "\xc9\xb5\0" /* offset 2495 */
  28619   "\xc9\xb8\0" /* offset 2498 */
  28620   "\xca\x82\0" /* offset 2501 */
  28621   "\xca\x83\0" /* offset 2504 */
  28622   "\xc6\xab\0" /* offset 2507 */
  28623   "\xca\x89\0" /* offset 2510 */
  28624   "\xca\x8a\0" /* offset 2513 */
  28625   "\xe1\xb4\x9c\0" /* offset 2516 */
  28626   "\xca\x8b\0" /* offset 2520 */
  28627   "\xca\x8c\0" /* offset 2523 */
  28628   "\x7a\0" /* offset 2526 */
  28629   "\xca\x90\0" /* offset 2528 */
  28630   "\xca\x91\0" /* offset 2531 */
  28631   "\xca\x92\0" /* offset 2534 */
  28632   "\x41\xcc\xa5\0" /* offset 2537 */
  28633   "\x61\xcc\xa5\0" /* offset 2541 */
  28634   "\x42\xcc\x87\0" /* offset 2545 */
  28635   "\x62\xcc\x87\0" /* offset 2549 */
  28636   "\x42\xcc\xa3\0" /* offset 2553 */
  28637   "\x62\xcc\xa3\0" /* offset 2557 */
  28638   "\x42\xcc\xb1\0" /* offset 2561 */
  28639   "\x62\xcc\xb1\0" /* offset 2565 */
  28640   "\x43\xcc\xa7\xcc\x81\0" /* offset 2569 */
  28641   "\x63\xcc\xa7\xcc\x81\0" /* offset 2575 */
  28642   "\x44\xcc\x87\0" /* offset 2581 */
  28643   "\x64\xcc\x87\0" /* offset 2585 */
  28644   "\x44\xcc\xa3\0" /* offset 2589 */
  28645   "\x64\xcc\xa3\0" /* offset 2593 */
  28646   "\x44\xcc\xb1\0" /* offset 2597 */
  28647   "\x64\xcc\xb1\0" /* offset 2601 */
  28648   "\x44\xcc\xa7\0" /* offset 2605 */
  28649   "\x64\xcc\xa7\0" /* offset 2609 */
  28650   "\x44\xcc\xad\0" /* offset 2613 */
  28651   "\x64\xcc\xad\0" /* offset 2617 */
  28652   "\x45\xcc\x84\xcc\x80\0" /* offset 2621 */
  28653   "\x65\xcc\x84\xcc\x80\0" /* offset 2627 */
  28654   "\x45\xcc\x84\xcc\x81\0" /* offset 2633 */
  28655   "\x65\xcc\x84\xcc\x81\0" /* offset 2639 */
  28656   "\x45\xcc\xad\0" /* offset 2645 */
  28657   "\x65\xcc\xad\0" /* offset 2649 */
  28658   "\x45\xcc\xb0\0" /* offset 2653 */
  28659   "\x65\xcc\xb0\0" /* offset 2657 */
  28660   "\x45\xcc\xa7\xcc\x86\0" /* offset 2661 */
  28661   "\x65\xcc\xa7\xcc\x86\0" /* offset 2667 */
  28662   "\x46\xcc\x87\0" /* offset 2673 */
  28663   "\x66\xcc\x87\0" /* offset 2677 */
  28664   "\x47\xcc\x84\0" /* offset 2681 */
  28665   "\x67\xcc\x84\0" /* offset 2685 */
  28666   "\x48\xcc\x87\0" /* offset 2689 */
  28667   "\x68\xcc\x87\0" /* offset 2693 */
  28668   "\x48\xcc\xa3\0" /* offset 2697 */
  28669   "\x68\xcc\xa3\0" /* offset 2701 */
  28670   "\x48\xcc\x88\0" /* offset 2705 */
  28671   "\x68\xcc\x88\0" /* offset 2709 */
  28672   "\x48\xcc\xa7\0" /* offset 2713 */
  28673   "\x68\xcc\xa7\0" /* offset 2717 */
  28674   "\x48\xcc\xae\0" /* offset 2721 */
  28675   "\x68\xcc\xae\0" /* offset 2725 */
  28676   "\x49\xcc\xb0\0" /* offset 2729 */
  28677   "\x69\xcc\xb0\0" /* offset 2733 */
  28678   "\x49\xcc\x88\xcc\x81\0" /* offset 2737 */
  28679   "\x69\xcc\x88\xcc\x81\0" /* offset 2743 */
  28680   "\x4b\xcc\x81\0" /* offset 2749 */
  28681   "\x6b\xcc\x81\0" /* offset 2753 */
  28682   "\x4b\xcc\xa3\0" /* offset 2757 */
  28683   "\x6b\xcc\xa3\0" /* offset 2761 */
  28684   "\x4b\xcc\xb1\0" /* offset 2765 */
  28685   "\x6b\xcc\xb1\0" /* offset 2769 */
  28686   "\x4c\xcc\xa3\0" /* offset 2773 */
  28687   "\x6c\xcc\xa3\0" /* offset 2777 */
  28688   "\x4c\xcc\xa3\xcc\x84\0" /* offset 2781 */
  28689   "\x6c\xcc\xa3\xcc\x84\0" /* offset 2787 */
  28690   "\x4c\xcc\xb1\0" /* offset 2793 */
  28691   "\x6c\xcc\xb1\0" /* offset 2797 */
  28692   "\x4c\xcc\xad\0" /* offset 2801 */
  28693   "\x6c\xcc\xad\0" /* offset 2805 */
  28694   "\x4d\xcc\x81\0" /* offset 2809 */
  28695   "\x6d\xcc\x81\0" /* offset 2813 */
  28696   "\x4d\xcc\x87\0" /* offset 2817 */
  28697   "\x6d\xcc\x87\0" /* offset 2821 */
  28698   "\x4d\xcc\xa3\0" /* offset 2825 */
  28699   "\x6d\xcc\xa3\0" /* offset 2829 */
  28700   "\x4e\xcc\x87\0" /* offset 2833 */
  28701   "\x6e\xcc\x87\0" /* offset 2837 */
  28702   "\x4e\xcc\xa3\0" /* offset 2841 */
  28703   "\x6e\xcc\xa3\0" /* offset 2845 */
  28704   "\x4e\xcc\xb1\0" /* offset 2849 */
  28705   "\x6e\xcc\xb1\0" /* offset 2853 */
  28706   "\x4e\xcc\xad\0" /* offset 2857 */
  28707   "\x6e\xcc\xad\0" /* offset 2861 */
  28708   "\x4f\xcc\x83\xcc\x81\0" /* offset 2865 */
  28709   "\x6f\xcc\x83\xcc\x81\0" /* offset 2871 */
  28710   "\x4f\xcc\x83\xcc\x88\0" /* offset 2877 */
  28711   "\x6f\xcc\x83\xcc\x88\0" /* offset 2883 */
  28712   "\x4f\xcc\x84\xcc\x80\0" /* offset 2889 */
  28713   "\x6f\xcc\x84\xcc\x80\0" /* offset 2895 */
  28714   "\x4f\xcc\x84\xcc\x81\0" /* offset 2901 */
  28715   "\x6f\xcc\x84\xcc\x81\0" /* offset 2907 */
  28716   "\x50\xcc\x81\0" /* offset 2913 */
  28717   "\x70\xcc\x81\0" /* offset 2917 */
  28718   "\x50\xcc\x87\0" /* offset 2921 */
  28719   "\x70\xcc\x87\0" /* offset 2925 */
  28720   "\x52\xcc\x87\0" /* offset 2929 */
  28721   "\x72\xcc\x87\0" /* offset 2933 */
  28722   "\x52\xcc\xa3\0" /* offset 2937 */
  28723   "\x72\xcc\xa3\0" /* offset 2941 */
  28724   "\x52\xcc\xa3\xcc\x84\0" /* offset 2945 */
  28725   "\x72\xcc\xa3\xcc\x84\0" /* offset 2951 */
  28726   "\x52\xcc\xb1\0" /* offset 2957 */
  28727   "\x72\xcc\xb1\0" /* offset 2961 */
  28728   "\x53\xcc\x87\0" /* offset 2965 */
  28729   "\x73\xcc\x87\0" /* offset 2969 */
  28730   "\x53\xcc\xa3\0" /* offset 2973 */
  28731   "\x73\xcc\xa3\0" /* offset 2977 */
  28732   "\x53\xcc\x81\xcc\x87\0" /* offset 2981 */
  28733   "\x73\xcc\x81\xcc\x87\0" /* offset 2987 */
  28734   "\x53\xcc\x8c\xcc\x87\0" /* offset 2993 */
  28735   "\x73\xcc\x8c\xcc\x87\0" /* offset 2999 */
  28736   "\x53\xcc\xa3\xcc\x87\0" /* offset 3005 */
  28737   "\x73\xcc\xa3\xcc\x87\0" /* offset 3011 */
  28738   "\x54\xcc\x87\0" /* offset 3017 */
  28739   "\x74\xcc\x87\0" /* offset 3021 */
  28740   "\x54\xcc\xa3\0" /* offset 3025 */
  28741   "\x74\xcc\xa3\0" /* offset 3029 */
  28742   "\x54\xcc\xb1\0" /* offset 3033 */
  28743   "\x74\xcc\xb1\0" /* offset 3037 */
  28744   "\x54\xcc\xad\0" /* offset 3041 */
  28745   "\x74\xcc\xad\0" /* offset 3045 */
  28746   "\x55\xcc\xa4\0" /* offset 3049 */
  28747   "\x75\xcc\xa4\0" /* offset 3053 */
  28748   "\x55\xcc\xb0\0" /* offset 3057 */
  28749   "\x75\xcc\xb0\0" /* offset 3061 */
  28750   "\x55\xcc\xad\0" /* offset 3065 */
  28751   "\x75\xcc\xad\0" /* offset 3069 */
  28752   "\x55\xcc\x83\xcc\x81\0" /* offset 3073 */
  28753   "\x75\xcc\x83\xcc\x81\0" /* offset 3079 */
  28754   "\x55\xcc\x84\xcc\x88\0" /* offset 3085 */
  28755   "\x75\xcc\x84\xcc\x88\0" /* offset 3091 */
  28756   "\x56\xcc\x83\0" /* offset 3097 */
  28757   "\x76\xcc\x83\0" /* offset 3101 */
  28758   "\x56\xcc\xa3\0" /* offset 3105 */
  28759   "\x76\xcc\xa3\0" /* offset 3109 */
  28760   "\x57\xcc\x80\0" /* offset 3113 */
  28761   "\x77\xcc\x80\0" /* offset 3117 */
  28762   "\x57\xcc\x81\0" /* offset 3121 */
  28763   "\x77\xcc\x81\0" /* offset 3125 */
  28764   "\x57\xcc\x88\0" /* offset 3129 */
  28765   "\x77\xcc\x88\0" /* offset 3133 */
  28766   "\x57\xcc\x87\0" /* offset 3137 */
  28767   "\x77\xcc\x87\0" /* offset 3141 */
  28768   "\x57\xcc\xa3\0" /* offset 3145 */
  28769   "\x77\xcc\xa3\0" /* offset 3149 */
  28770   "\x58\xcc\x87\0" /* offset 3153 */
  28771   "\x78\xcc\x87\0" /* offset 3157 */
  28772   "\x58\xcc\x88\0" /* offset 3161 */
  28773   "\x78\xcc\x88\0" /* offset 3165 */
  28774   "\x59\xcc\x87\0" /* offset 3169 */
  28775   "\x79\xcc\x87\0" /* offset 3173 */
  28776   "\x5a\xcc\x82\0" /* offset 3177 */
  28777   "\x7a\xcc\x82\0" /* offset 3181 */
  28778   "\x5a\xcc\xa3\0" /* offset 3185 */
  28779   "\x7a\xcc\xa3\0" /* offset 3189 */
  28780   "\x5a\xcc\xb1\0" /* offset 3193 */
  28781   "\x7a\xcc\xb1\0" /* offset 3197 */
  28782   "\x68\xcc\xb1\0" /* offset 3201 */
  28783   "\x74\xcc\x88\0" /* offset 3205 */
  28784   "\x77\xcc\x8a\0" /* offset 3209 */
  28785   "\x79\xcc\x8a\0" /* offset 3213 */
  28786   "\x61\xca\xbe\0" /* offset 3217 */
  28787   "\xc5\xbf\xcc\x87\0" /* offset 3221 */
  28788   "\x41\xcc\xa3\0" /* offset 3226 */
  28789   "\x61\xcc\xa3\0" /* offset 3230 */
  28790   "\x41\xcc\x89\0" /* offset 3234 */
  28791   "\x61\xcc\x89\0" /* offset 3238 */
  28792   "\x41\xcc\x82\xcc\x81\0" /* offset 3242 */
  28793   "\x61\xcc\x82\xcc\x81\0" /* offset 3248 */
  28794   "\x41\xcc\x82\xcc\x80\0" /* offset 3254 */
  28795   "\x61\xcc\x82\xcc\x80\0" /* offset 3260 */
  28796   "\x41\xcc\x82\xcc\x89\0" /* offset 3266 */
  28797   "\x61\xcc\x82\xcc\x89\0" /* offset 3272 */
  28798   "\x41\xcc\x82\xcc\x83\0" /* offset 3278 */
  28799   "\x61\xcc\x82\xcc\x83\0" /* offset 3284 */
  28800   "\x41\xcc\xa3\xcc\x82\0" /* offset 3290 */
  28801   "\x61\xcc\xa3\xcc\x82\0" /* offset 3296 */
  28802   "\x41\xcc\x86\xcc\x81\0" /* offset 3302 */
  28803   "\x61\xcc\x86\xcc\x81\0" /* offset 3308 */
  28804   "\x41\xcc\x86\xcc\x80\0" /* offset 3314 */
  28805   "\x61\xcc\x86\xcc\x80\0" /* offset 3320 */
  28806   "\x41\xcc\x86\xcc\x89\0" /* offset 3326 */
  28807   "\x61\xcc\x86\xcc\x89\0" /* offset 3332 */
  28808   "\x41\xcc\x86\xcc\x83\0" /* offset 3338 */
  28809   "\x61\xcc\x86\xcc\x83\0" /* offset 3344 */
  28810   "\x41\xcc\xa3\xcc\x86\0" /* offset 3350 */
  28811   "\x61\xcc\xa3\xcc\x86\0" /* offset 3356 */
  28812   "\x45\xcc\xa3\0" /* offset 3362 */
  28813   "\x65\xcc\xa3\0" /* offset 3366 */
  28814   "\x45\xcc\x89\0" /* offset 3370 */
  28815   "\x65\xcc\x89\0" /* offset 3374 */
  28816   "\x45\xcc\x83\0" /* offset 3378 */
  28817   "\x65\xcc\x83\0" /* offset 3382 */
  28818   "\x45\xcc\x82\xcc\x81\0" /* offset 3386 */
  28819   "\x65\xcc\x82\xcc\x81\0" /* offset 3392 */
  28820   "\x45\xcc\x82\xcc\x80\0" /* offset 3398 */
  28821   "\x65\xcc\x82\xcc\x80\0" /* offset 3404 */
  28822   "\x45\xcc\x82\xcc\x89\0" /* offset 3410 */
  28823   "\x65\xcc\x82\xcc\x89\0" /* offset 3416 */
  28824   "\x45\xcc\x82\xcc\x83\0" /* offset 3422 */
  28825   "\x65\xcc\x82\xcc\x83\0" /* offset 3428 */
  28826   "\x45\xcc\xa3\xcc\x82\0" /* offset 3434 */
  28827   "\x65\xcc\xa3\xcc\x82\0" /* offset 3440 */
  28828   "\x49\xcc\x89\0" /* offset 3446 */
  28829   "\x69\xcc\x89\0" /* offset 3450 */
  28830   "\x49\xcc\xa3\0" /* offset 3454 */
  28831   "\x69\xcc\xa3\0" /* offset 3458 */
  28832   "\x4f\xcc\xa3\0" /* offset 3462 */
  28833   "\x6f\xcc\xa3\0" /* offset 3466 */
  28834   "\x4f\xcc\x89\0" /* offset 3470 */
  28835   "\x6f\xcc\x89\0" /* offset 3474 */
  28836   "\x4f\xcc\x82\xcc\x81\0" /* offset 3478 */
  28837   "\x6f\xcc\x82\xcc\x81\0" /* offset 3484 */
  28838   "\x4f\xcc\x82\xcc\x80\0" /* offset 3490 */
  28839   "\x6f\xcc\x82\xcc\x80\0" /* offset 3496 */
  28840   "\x4f\xcc\x82\xcc\x89\0" /* offset 3502 */
  28841   "\x6f\xcc\x82\xcc\x89\0" /* offset 3508 */
  28842   "\x4f\xcc\x82\xcc\x83\0" /* offset 3514 */
  28843   "\x6f\xcc\x82\xcc\x83\0" /* offset 3520 */
  28844   "\x4f\xcc\xa3\xcc\x82\0" /* offset 3526 */
  28845   "\x6f\xcc\xa3\xcc\x82\0" /* offset 3532 */
  28846   "\x4f\xcc\x9b\xcc\x81\0" /* offset 3538 */
  28847   "\x6f\xcc\x9b\xcc\x81\0" /* offset 3544 */
  28848   "\x4f\xcc\x9b\xcc\x80\0" /* offset 3550 */
  28849   "\x6f\xcc\x9b\xcc\x80\0" /* offset 3556 */
  28850   "\x4f\xcc\x9b\xcc\x89\0" /* offset 3562 */
  28851   "\x6f\xcc\x9b\xcc\x89\0" /* offset 3568 */
  28852   "\x4f\xcc\x9b\xcc\x83\0" /* offset 3574 */
  28853   "\x6f\xcc\x9b\xcc\x83\0" /* offset 3580 */
  28854   "\x4f\xcc\x9b\xcc\xa3\0" /* offset 3586 */
  28855   "\x6f\xcc\x9b\xcc\xa3\0" /* offset 3592 */
  28856   "\x55\xcc\xa3\0" /* offset 3598 */
  28857   "\x75\xcc\xa3\0" /* offset 3602 */
  28858   "\x55\xcc\x89\0" /* offset 3606 */
  28859   "\x75\xcc\x89\0" /* offset 3610 */
  28860   "\x55\xcc\x9b\xcc\x81\0" /* offset 3614 */
  28861   "\x75\xcc\x9b\xcc\x81\0" /* offset 3620 */
  28862   "\x55\xcc\x9b\xcc\x80\0" /* offset 3626 */
  28863   "\x75\xcc\x9b\xcc\x80\0" /* offset 3632 */
  28864   "\x55\xcc\x9b\xcc\x89\0" /* offset 3638 */
  28865   "\x75\xcc\x9b\xcc\x89\0" /* offset 3644 */
  28866   "\x55\xcc\x9b\xcc\x83\0" /* offset 3650 */
  28867   "\x75\xcc\x9b\xcc\x83\0" /* offset 3656 */
  28868   "\x55\xcc\x9b\xcc\xa3\0" /* offset 3662 */
  28869   "\x75\xcc\x9b\xcc\xa3\0" /* offset 3668 */
  28870   "\x59\xcc\x80\0" /* offset 3674 */
  28871   "\x79\xcc\x80\0" /* offset 3678 */
  28872   "\x59\xcc\xa3\0" /* offset 3682 */
  28873   "\x79\xcc\xa3\0" /* offset 3686 */
  28874   "\x59\xcc\x89\0" /* offset 3690 */
  28875   "\x79\xcc\x89\0" /* offset 3694 */
  28876   "\x59\xcc\x83\0" /* offset 3698 */
  28877   "\x79\xcc\x83\0" /* offset 3702 */
  28878   "\xce\xb1\xcc\x93\0" /* offset 3706 */
  28879   "\xce\xb1\xcc\x94\0" /* offset 3711 */
  28880   "\xce\xb1\xcc\x93\xcc\x80\0" /* offset 3716 */
  28881   "\xce\xb1\xcc\x94\xcc\x80\0" /* offset 3723 */
  28882   "\xce\xb1\xcc\x93\xcc\x81\0" /* offset 3730 */
  28883   "\xce\xb1\xcc\x94\xcc\x81\0" /* offset 3737 */
  28884   "\xce\xb1\xcc\x93\xcd\x82\0" /* offset 3744 */
  28885   "\xce\xb1\xcc\x94\xcd\x82\0" /* offset 3751 */
  28886   "\xce\x91\xcc\x93\0" /* offset 3758 */
  28887   "\xce\x91\xcc\x94\0" /* offset 3763 */
  28888   "\xce\x91\xcc\x93\xcc\x80\0" /* offset 3768 */
  28889   "\xce\x91\xcc\x94\xcc\x80\0" /* offset 3775 */
  28890   "\xce\x91\xcc\x93\xcc\x81\0" /* offset 3782 */
  28891   "\xce\x91\xcc\x94\xcc\x81\0" /* offset 3789 */
  28892   "\xce\x91\xcc\x93\xcd\x82\0" /* offset 3796 */
  28893   "\xce\x91\xcc\x94\xcd\x82\0" /* offset 3803 */
  28894   "\xce\xb5\xcc\x93\0" /* offset 3810 */
  28895   "\xce\xb5\xcc\x94\0" /* offset 3815 */
  28896   "\xce\xb5\xcc\x93\xcc\x80\0" /* offset 3820 */
  28897   "\xce\xb5\xcc\x94\xcc\x80\0" /* offset 3827 */
  28898   "\xce\xb5\xcc\x93\xcc\x81\0" /* offset 3834 */
  28899   "\xce\xb5\xcc\x94\xcc\x81\0" /* offset 3841 */
  28900   "\xce\x95\xcc\x93\0" /* offset 3848 */
  28901   "\xce\x95\xcc\x94\0" /* offset 3853 */
  28902   "\xce\x95\xcc\x93\xcc\x80\0" /* offset 3858 */
  28903   "\xce\x95\xcc\x94\xcc\x80\0" /* offset 3865 */
  28904   "\xce\x95\xcc\x93\xcc\x81\0" /* offset 3872 */
  28905   "\xce\x95\xcc\x94\xcc\x81\0" /* offset 3879 */
  28906   "\xce\xb7\xcc\x93\0" /* offset 3886 */
  28907   "\xce\xb7\xcc\x94\0" /* offset 3891 */
  28908   "\xce\xb7\xcc\x93\xcc\x80\0" /* offset 3896 */
  28909   "\xce\xb7\xcc\x94\xcc\x80\0" /* offset 3903 */
  28910   "\xce\xb7\xcc\x93\xcc\x81\0" /* offset 3910 */
  28911   "\xce\xb7\xcc\x94\xcc\x81\0" /* offset 3917 */
  28912   "\xce\xb7\xcc\x93\xcd\x82\0" /* offset 3924 */
  28913   "\xce\xb7\xcc\x94\xcd\x82\0" /* offset 3931 */
  28914   "\xce\x97\xcc\x93\0" /* offset 3938 */
  28915   "\xce\x97\xcc\x94\0" /* offset 3943 */
  28916   "\xce\x97\xcc\x93\xcc\x80\0" /* offset 3948 */
  28917   "\xce\x97\xcc\x94\xcc\x80\0" /* offset 3955 */
  28918   "\xce\x97\xcc\x93\xcc\x81\0" /* offset 3962 */
  28919   "\xce\x97\xcc\x94\xcc\x81\0" /* offset 3969 */
  28920   "\xce\x97\xcc\x93\xcd\x82\0" /* offset 3976 */
  28921   "\xce\x97\xcc\x94\xcd\x82\0" /* offset 3983 */
  28922   "\xce\xb9\xcc\x93\0" /* offset 3990 */
  28923   "\xce\xb9\xcc\x94\0" /* offset 3995 */
  28924   "\xce\xb9\xcc\x93\xcc\x80\0" /* offset 4000 */
  28925   "\xce\xb9\xcc\x94\xcc\x80\0" /* offset 4007 */
  28926   "\xce\xb9\xcc\x93\xcc\x81\0" /* offset 4014 */
  28927   "\xce\xb9\xcc\x94\xcc\x81\0" /* offset 4021 */
  28928   "\xce\xb9\xcc\x93\xcd\x82\0" /* offset 4028 */
  28929   "\xce\xb9\xcc\x94\xcd\x82\0" /* offset 4035 */
  28930   "\xce\x99\xcc\x93\0" /* offset 4042 */
  28931   "\xce\x99\xcc\x94\0" /* offset 4047 */
  28932   "\xce\x99\xcc\x93\xcc\x80\0" /* offset 4052 */
  28933   "\xce\x99\xcc\x94\xcc\x80\0" /* offset 4059 */
  28934   "\xce\x99\xcc\x93\xcc\x81\0" /* offset 4066 */
  28935   "\xce\x99\xcc\x94\xcc\x81\0" /* offset 4073 */
  28936   "\xce\x99\xcc\x93\xcd\x82\0" /* offset 4080 */
  28937   "\xce\x99\xcc\x94\xcd\x82\0" /* offset 4087 */
  28938   "\xce\xbf\xcc\x93\0" /* offset 4094 */
  28939   "\xce\xbf\xcc\x94\0" /* offset 4099 */
  28940   "\xce\xbf\xcc\x93\xcc\x80\0" /* offset 4104 */
  28941   "\xce\xbf\xcc\x94\xcc\x80\0" /* offset 4111 */
  28942   "\xce\xbf\xcc\x93\xcc\x81\0" /* offset 4118 */
  28943   "\xce\xbf\xcc\x94\xcc\x81\0" /* offset 4125 */
  28944   "\xce\x9f\xcc\x93\0" /* offset 4132 */
  28945   "\xce\x9f\xcc\x94\0" /* offset 4137 */
  28946   "\xce\x9f\xcc\x93\xcc\x80\0" /* offset 4142 */
  28947   "\xce\x9f\xcc\x94\xcc\x80\0" /* offset 4149 */
  28948   "\xce\x9f\xcc\x93\xcc\x81\0" /* offset 4156 */
  28949   "\xce\x9f\xcc\x94\xcc\x81\0" /* offset 4163 */
  28950   "\xcf\x85\xcc\x93\0" /* offset 4170 */
  28951   "\xcf\x85\xcc\x94\0" /* offset 4175 */
  28952   "\xcf\x85\xcc\x93\xcc\x80\0" /* offset 4180 */
  28953   "\xcf\x85\xcc\x94\xcc\x80\0" /* offset 4187 */
  28954   "\xcf\x85\xcc\x93\xcc\x81\0" /* offset 4194 */
  28955   "\xcf\x85\xcc\x94\xcc\x81\0" /* offset 4201 */
  28956   "\xcf\x85\xcc\x93\xcd\x82\0" /* offset 4208 */
  28957   "\xcf\x85\xcc\x94\xcd\x82\0" /* offset 4215 */
  28958   "\xce\xa5\xcc\x94\0" /* offset 4222 */
  28959   "\xce\xa5\xcc\x94\xcc\x80\0" /* offset 4227 */
  28960   "\xce\xa5\xcc\x94\xcc\x81\0" /* offset 4234 */
  28961   "\xce\xa5\xcc\x94\xcd\x82\0" /* offset 4241 */
  28962   "\xcf\x89\xcc\x93\0" /* offset 4248 */
  28963   "\xcf\x89\xcc\x94\0" /* offset 4253 */
  28964   "\xcf\x89\xcc\x93\xcc\x80\0" /* offset 4258 */
  28965   "\xcf\x89\xcc\x94\xcc\x80\0" /* offset 4265 */
  28966   "\xcf\x89\xcc\x93\xcc\x81\0" /* offset 4272 */
  28967   "\xcf\x89\xcc\x94\xcc\x81\0" /* offset 4279 */
  28968   "\xcf\x89\xcc\x93\xcd\x82\0" /* offset 4286 */
  28969   "\xcf\x89\xcc\x94\xcd\x82\0" /* offset 4293 */
  28970   "\xce\xa9\xcc\x93\0" /* offset 4300 */
  28971   "\xce\xa9\xcc\x94\0" /* offset 4305 */
  28972   "\xce\xa9\xcc\x93\xcc\x80\0" /* offset 4310 */
  28973   "\xce\xa9\xcc\x94\xcc\x80\0" /* offset 4317 */
  28974   "\xce\xa9\xcc\x93\xcc\x81\0" /* offset 4324 */
  28975   "\xce\xa9\xcc\x94\xcc\x81\0" /* offset 4331 */
  28976   "\xce\xa9\xcc\x93\xcd\x82\0" /* offset 4338 */
  28977   "\xce\xa9\xcc\x94\xcd\x82\0" /* offset 4345 */
  28978   "\xce\xb1\xcc\x80\0" /* offset 4352 */
  28979   "\xce\xb5\xcc\x80\0" /* offset 4357 */
  28980   "\xce\xb7\xcc\x80\0" /* offset 4362 */
  28981   "\xce\xb9\xcc\x80\0" /* offset 4367 */
  28982   "\xce\xbf\xcc\x80\0" /* offset 4372 */
  28983   "\xcf\x85\xcc\x80\0" /* offset 4377 */
  28984   "\xcf\x89\xcc\x80\0" /* offset 4382 */
  28985   "\xce\xb1\xcc\x93\xcd\x85\0" /* offset 4387 */
  28986   "\xce\xb1\xcc\x94\xcd\x85\0" /* offset 4394 */
  28987   "\xce\xb1\xcc\x93\xcc\x80\xcd\x85\0" /* offset 4401 */
  28988   "\xce\xb1\xcc\x94\xcc\x80\xcd\x85\0" /* offset 4410 */
  28989   "\xce\xb1\xcc\x93\xcc\x81\xcd\x85\0" /* offset 4419 */
  28990   "\xce\xb1\xcc\x94\xcc\x81\xcd\x85\0" /* offset 4428 */
  28991   "\xce\xb1\xcc\x93\xcd\x82\xcd\x85\0" /* offset 4437 */
  28992   "\xce\xb1\xcc\x94\xcd\x82\xcd\x85\0" /* offset 4446 */
  28993   "\xce\x91\xcc\x93\xcd\x85\0" /* offset 4455 */
  28994   "\xce\x91\xcc\x94\xcd\x85\0" /* offset 4462 */
  28995   "\xce\x91\xcc\x93\xcc\x80\xcd\x85\0" /* offset 4469 */
  28996   "\xce\x91\xcc\x94\xcc\x80\xcd\x85\0" /* offset 4478 */
  28997   "\xce\x91\xcc\x93\xcc\x81\xcd\x85\0" /* offset 4487 */
  28998   "\xce\x91\xcc\x94\xcc\x81\xcd\x85\0" /* offset 4496 */
  28999   "\xce\x91\xcc\x93\xcd\x82\xcd\x85\0" /* offset 4505 */
  29000   "\xce\x91\xcc\x94\xcd\x82\xcd\x85\0" /* offset 4514 */
  29001   "\xce\xb7\xcc\x93\xcd\x85\0" /* offset 4523 */
  29002   "\xce\xb7\xcc\x94\xcd\x85\0" /* offset 4530 */
  29003   "\xce\xb7\xcc\x93\xcc\x80\xcd\x85\0" /* offset 4537 */
  29004   "\xce\xb7\xcc\x94\xcc\x80\xcd\x85\0" /* offset 4546 */
  29005   "\xce\xb7\xcc\x93\xcc\x81\xcd\x85\0" /* offset 4555 */
  29006   "\xce\xb7\xcc\x94\xcc\x81\xcd\x85\0" /* offset 4564 */
  29007   "\xce\xb7\xcc\x93\xcd\x82\xcd\x85\0" /* offset 4573 */
  29008   "\xce\xb7\xcc\x94\xcd\x82\xcd\x85\0" /* offset 4582 */
  29009   "\xce\x97\xcc\x93\xcd\x85\0" /* offset 4591 */
  29010   "\xce\x97\xcc\x94\xcd\x85\0" /* offset 4598 */
  29011   "\xce\x97\xcc\x93\xcc\x80\xcd\x85\0" /* offset 4605 */
  29012   "\xce\x97\xcc\x94\xcc\x80\xcd\x85\0" /* offset 4614 */
  29013   "\xce\x97\xcc\x93\xcc\x81\xcd\x85\0" /* offset 4623 */
  29014   "\xce\x97\xcc\x94\xcc\x81\xcd\x85\0" /* offset 4632 */
  29015   "\xce\x97\xcc\x93\xcd\x82\xcd\x85\0" /* offset 4641 */
  29016   "\xce\x97\xcc\x94\xcd\x82\xcd\x85\0" /* offset 4650 */
  29017   "\xcf\x89\xcc\x93\xcd\x85\0" /* offset 4659 */
  29018   "\xcf\x89\xcc\x94\xcd\x85\0" /* offset 4666 */
  29019   "\xcf\x89\xcc\x93\xcc\x80\xcd\x85\0" /* offset 4673 */
  29020   "\xcf\x89\xcc\x94\xcc\x80\xcd\x85\0" /* offset 4682 */
  29021   "\xcf\x89\xcc\x93\xcc\x81\xcd\x85\0" /* offset 4691 */
  29022   "\xcf\x89\xcc\x94\xcc\x81\xcd\x85\0" /* offset 4700 */
  29023   "\xcf\x89\xcc\x93\xcd\x82\xcd\x85\0" /* offset 4709 */
  29024   "\xcf\x89\xcc\x94\xcd\x82\xcd\x85\0" /* offset 4718 */
  29025   "\xce\xa9\xcc\x93\xcd\x85\0" /* offset 4727 */
  29026   "\xce\xa9\xcc\x94\xcd\x85\0" /* offset 4734 */
  29027   "\xce\xa9\xcc\x93\xcc\x80\xcd\x85\0" /* offset 4741 */
  29028   "\xce\xa9\xcc\x94\xcc\x80\xcd\x85\0" /* offset 4750 */
  29029   "\xce\xa9\xcc\x93\xcc\x81\xcd\x85\0" /* offset 4759 */
  29030   "\xce\xa9\xcc\x94\xcc\x81\xcd\x85\0" /* offset 4768 */
  29031   "\xce\xa9\xcc\x93\xcd\x82\xcd\x85\0" /* offset 4777 */
  29032   "\xce\xa9\xcc\x94\xcd\x82\xcd\x85\0" /* offset 4786 */
  29033   "\xce\xb1\xcc\x86\0" /* offset 4795 */
  29034   "\xce\xb1\xcc\x84\0" /* offset 4800 */
  29035   "\xce\xb1\xcc\x80\xcd\x85\0" /* offset 4805 */
  29036   "\xce\xb1\xcd\x85\0" /* offset 4812 */
  29037   "\xce\xb1\xcc\x81\xcd\x85\0" /* offset 4817 */
  29038   "\xce\xb1\xcd\x82\0" /* offset 4824 */
  29039   "\xce\xb1\xcd\x82\xcd\x85\0" /* offset 4829 */
  29040   "\xce\x91\xcc\x86\0" /* offset 4836 */
  29041   "\xce\x91\xcc\x84\0" /* offset 4841 */
  29042   "\xce\x91\xcc\x80\0" /* offset 4846 */
  29043   "\xce\x91\xcd\x85\0" /* offset 4851 */
  29044   "\x20\xcc\x93\0" /* offset 4856 */
  29045   "\xce\xb9\0" /* offset 4860 */
  29046   "\x20\xcd\x82\0" /* offset 4863 */
  29047   "\xc2\xa8\xcd\x82\0" /* offset 4867 */
  29048   "\x20\xcc\x88\xcd\x82\0" /* offset 4872 */
  29049   "\xce\xb7\xcc\x80\xcd\x85\0" /* offset 4878 */
  29050   "\xce\xb7\xcd\x85\0" /* offset 4885 */
  29051   "\xce\xb7\xcc\x81\xcd\x85\0" /* offset 4890 */
  29052   "\xce\xb7\xcd\x82\0" /* offset 4897 */
  29053   "\xce\xb7\xcd\x82\xcd\x85\0" /* offset 4902 */
  29054   "\xce\x95\xcc\x80\0" /* offset 4909 */
  29055   "\xce\x97\xcc\x80\0" /* offset 4914 */
  29056   "\xce\x97\xcd\x85\0" /* offset 4919 */
  29057   "\xe1\xbe\xbf\xcc\x80\0" /* offset 4924 */
  29058   "\x20\xcc\x93\xcc\x80\0" /* offset 4930 */
  29059   "\xe1\xbe\xbf\xcc\x81\0" /* offset 4936 */
  29060   "\x20\xcc\x93\xcc\x81\0" /* offset 4942 */
  29061   "\xe1\xbe\xbf\xcd\x82\0" /* offset 4948 */
  29062   "\x20\xcc\x93\xcd\x82\0" /* offset 4954 */
  29063   "\xce\xb9\xcc\x86\0" /* offset 4960 */
  29064   "\xce\xb9\xcc\x84\0" /* offset 4965 */
  29065   "\xce\xb9\xcc\x88\xcc\x80\0" /* offset 4970 */
  29066   "\xce\xb9\xcd\x82\0" /* offset 4977 */
  29067   "\xce\xb9\xcc\x88\xcd\x82\0" /* offset 4982 */
  29068   "\xce\x99\xcc\x86\0" /* offset 4989 */
  29069   "\xce\x99\xcc\x84\0" /* offset 4994 */
  29070   "\xce\x99\xcc\x80\0" /* offset 4999 */
  29071   "\xe1\xbf\xbe\xcc\x80\0" /* offset 5004 */
  29072   "\x20\xcc\x94\xcc\x80\0" /* offset 5010 */
  29073   "\xe1\xbf\xbe\xcc\x81\0" /* offset 5016 */
  29074   "\x20\xcc\x94\xcc\x81\0" /* offset 5022 */
  29075   "\xe1\xbf\xbe\xcd\x82\0" /* offset 5028 */
  29076   "\x20\xcc\x94\xcd\x82\0" /* offset 5034 */
  29077   "\xcf\x85\xcc\x86\0" /* offset 5040 */
  29078   "\xcf\x85\xcc\x84\0" /* offset 5045 */
  29079   "\xcf\x85\xcc\x88\xcc\x80\0" /* offset 5050 */
  29080   "\xcf\x81\xcc\x93\0" /* offset 5057 */
  29081   "\xcf\x81\xcc\x94\0" /* offset 5062 */
  29082   "\xcf\x85\xcd\x82\0" /* offset 5067 */
  29083   "\xcf\x85\xcc\x88\xcd\x82\0" /* offset 5072 */
  29084   "\xce\xa5\xcc\x86\0" /* offset 5079 */
  29085   "\xce\xa5\xcc\x84\0" /* offset 5084 */
  29086   "\xce\xa5\xcc\x80\0" /* offset 5089 */
  29087   "\xce\xa1\xcc\x94\0" /* offset 5094 */
  29088   "\xc2\xa8\xcc\x80\0" /* offset 5099 */
  29089   "\x20\xcc\x88\xcc\x80\0" /* offset 5104 */
  29090   "\x60\0" /* offset 5110 */
  29091   "\xcf\x89\xcc\x80\xcd\x85\0" /* offset 5112 */
  29092   "\xcf\x89\xcd\x85\0" /* offset 5119 */
  29093   "\xcf\x89\xcc\x81\xcd\x85\0" /* offset 5124 */
  29094   "\xcf\x89\xcd\x82\0" /* offset 5131 */
  29095   "\xcf\x89\xcd\x82\xcd\x85\0" /* offset 5136 */
  29096   "\xce\x9f\xcc\x80\0" /* offset 5143 */
  29097   "\xce\xa9\xcc\x80\0" /* offset 5148 */
  29098   "\xce\xa9\xcd\x85\0" /* offset 5153 */
  29099   "\xc2\xb4\0" /* offset 5158 */
  29100   "\x20\xcc\x94\0" /* offset 5161 */
  29101   "\xe2\x80\x82\0" /* offset 5165 */
  29102   "\xe2\x80\x83\0" /* offset 5169 */
  29103   "\xe2\x80\x90\0" /* offset 5173 */
  29104   "\x20\xcc\xb3\0" /* offset 5177 */
  29105   "\x2e\0" /* offset 5181 */
  29106   "\x2e\x2e\0" /* offset 5183 */
  29107   "\x2e\x2e\x2e\0" /* offset 5186 */
  29108   "\xe2\x80\xb2\xe2\x80\xb2\0" /* offset 5190 */
  29109   "\xe2\x80\xb2\xe2\x80\xb2\xe2\x80\xb2\0" /* offset 5197 */
  29110   "\xe2\x80\xb5\xe2\x80\xb5\0" /* offset 5207 */
  29111   "\xe2\x80\xb5\xe2\x80\xb5\xe2\x80\xb5\0" /* offset 5214 */
  29112   "\x21\x21\0" /* offset 5224 */
  29113   "\x20\xcc\x85\0" /* offset 5227 */
  29114   "\x3f\x3f\0" /* offset 5231 */
  29115   "\x3f\x21\0" /* offset 5234 */
  29116   "\x21\x3f\0" /* offset 5237 */
  29117   "\xe2\x80\xb2\xe2\x80\xb2\xe2\x80\xb2\xe2\x80\xb2\0" /* offset 5240 */
  29118   "\x30\0" /* offset 5253 */
  29119   "\x34\0" /* offset 5255 */
  29120   "\x35\0" /* offset 5257 */
  29121   "\x36\0" /* offset 5259 */
  29122   "\x37\0" /* offset 5261 */
  29123   "\x38\0" /* offset 5263 */
  29124   "\x39\0" /* offset 5265 */
  29125   "\x2b\0" /* offset 5267 */
  29126   "\xe2\x88\x92\0" /* offset 5269 */
  29127   "\x3d\0" /* offset 5273 */
  29128   "\x28\0" /* offset 5275 */
  29129   "\x29\0" /* offset 5277 */
  29130   "\x6e\0" /* offset 5279 */
  29131   "\x52\x73\0" /* offset 5281 */
  29132   "\x61\x2f\x63\0" /* offset 5284 */
  29133   "\x61\x2f\x73\0" /* offset 5288 */
  29134   "\x43\0" /* offset 5292 */
  29135   "\xc2\xb0\x43\0" /* offset 5294 */
  29136   "\x63\x2f\x6f\0" /* offset 5298 */
  29137   "\x63\x2f\x75\0" /* offset 5302 */
  29138   "\xc6\x90\0" /* offset 5306 */
  29139   "\xc2\xb0\x46\0" /* offset 5309 */
  29140   "\xc4\xa7\0" /* offset 5313 */
  29141   "\x4e\x6f\0" /* offset 5316 */
  29142   "\x51\0" /* offset 5319 */
  29143   "\x53\x4d\0" /* offset 5321 */
  29144   "\x54\x45\x4c\0" /* offset 5324 */
  29145   "\x54\x4d\0" /* offset 5328 */
  29146   "\x5a\0" /* offset 5331 */
  29147   "\xce\xa9\0" /* offset 5333 */
  29148   "\x46\0" /* offset 5336 */
  29149   "\xd7\x90\0" /* offset 5338 */
  29150   "\xd7\x91\0" /* offset 5341 */
  29151   "\xd7\x92\0" /* offset 5344 */
  29152   "\xd7\x93\0" /* offset 5347 */
  29153   "\x46\x41\x58\0" /* offset 5350 */
  29154   "\xce\x93\0" /* offset 5354 */
  29155   "\xce\xa0\0" /* offset 5357 */
  29156   "\xe2\x88\x91\0" /* offset 5360 */
  29157   "\x31\xe2\x81\x84\x37\0" /* offset 5364 */
  29158   "\x31\xe2\x81\x84\x39\0" /* offset 5370 */
  29159   "\x31\xe2\x81\x84\x31\x30\0" /* offset 5376 */
  29160   "\x31\xe2\x81\x84\x33\0" /* offset 5383 */
  29161   "\x32\xe2\x81\x84\x33\0" /* offset 5389 */
  29162   "\x31\xe2\x81\x84\x35\0" /* offset 5395 */
  29163   "\x32\xe2\x81\x84\x35\0" /* offset 5401 */
  29164   "\x33\xe2\x81\x84\x35\0" /* offset 5407 */
  29165   "\x34\xe2\x81\x84\x35\0" /* offset 5413 */
  29166   "\x31\xe2\x81\x84\x36\0" /* offset 5419 */
  29167   "\x35\xe2\x81\x84\x36\0" /* offset 5425 */
  29168   "\x31\xe2\x81\x84\x38\0" /* offset 5431 */
  29169   "\x33\xe2\x81\x84\x38\0" /* offset 5437 */
  29170   "\x35\xe2\x81\x84\x38\0" /* offset 5443 */
  29171   "\x37\xe2\x81\x84\x38\0" /* offset 5449 */
  29172   "\x31\xe2\x81\x84\0" /* offset 5455 */
  29173   "\x49\x49\0" /* offset 5460 */
  29174   "\x49\x49\x49\0" /* offset 5463 */
  29175   "\x49\x56\0" /* offset 5467 */
  29176   "\x56\0" /* offset 5470 */
  29177   "\x56\x49\0" /* offset 5472 */
  29178   "\x56\x49\x49\0" /* offset 5475 */
  29179   "\x56\x49\x49\x49\0" /* offset 5479 */
  29180   "\x49\x58\0" /* offset 5484 */
  29181   "\x58\0" /* offset 5487 */
  29182   "\x58\x49\0" /* offset 5489 */
  29183   "\x58\x49\x49\0" /* offset 5492 */
  29184   "\x69\x69\0" /* offset 5496 */
  29185   "\x69\x69\x69\0" /* offset 5499 */
  29186   "\x69\x76\0" /* offset 5503 */
  29187   "\x76\x69\0" /* offset 5506 */
  29188   "\x76\x69\x69\0" /* offset 5509 */
  29189   "\x76\x69\x69\x69\0" /* offset 5513 */
  29190   "\x69\x78\0" /* offset 5518 */
  29191   "\x78\x69\0" /* offset 5521 */
  29192   "\x78\x69\x69\0" /* offset 5524 */
  29193   "\x30\xe2\x81\x84\x33\0" /* offset 5528 */
  29194   "\xe2\x86\x90\xcc\xb8\0" /* offset 5534 */
  29195   "\xe2\x86\x92\xcc\xb8\0" /* offset 5540 */
  29196   "\xe2\x86\x94\xcc\xb8\0" /* offset 5546 */
  29197   "\xe2\x87\x90\xcc\xb8\0" /* offset 5552 */
  29198   "\xe2\x87\x94\xcc\xb8\0" /* offset 5558 */
  29199   "\xe2\x87\x92\xcc\xb8\0" /* offset 5564 */
  29200   "\xe2\x88\x83\xcc\xb8\0" /* offset 5570 */
  29201   "\xe2\x88\x88\xcc\xb8\0" /* offset 5576 */
  29202   "\xe2\x88\x8b\xcc\xb8\0" /* offset 5582 */
  29203   "\xe2\x88\xa3\xcc\xb8\0" /* offset 5588 */
  29204   "\xe2\x88\xa5\xcc\xb8\0" /* offset 5594 */
  29205   "\xe2\x88\xab\xe2\x88\xab\0" /* offset 5600 */
  29206   "\xe2\x88\xab\xe2\x88\xab\xe2\x88\xab\0" /* offset 5607 */
  29207   "\xe2\x88\xae\xe2\x88\xae\0" /* offset 5617 */
  29208   "\xe2\x88\xae\xe2\x88\xae\xe2\x88\xae\0" /* offset 5624 */
  29209   "\xe2\x88\xbc\xcc\xb8\0" /* offset 5634 */
  29210   "\xe2\x89\x83\xcc\xb8\0" /* offset 5640 */
  29211   "\xe2\x89\x85\xcc\xb8\0" /* offset 5646 */
  29212   "\xe2\x89\x88\xcc\xb8\0" /* offset 5652 */
  29213   "\x3d\xcc\xb8\0" /* offset 5658 */
  29214   "\xe2\x89\xa1\xcc\xb8\0" /* offset 5662 */
  29215   "\xe2\x89\x8d\xcc\xb8\0" /* offset 5668 */
  29216   "\x3c\xcc\xb8\0" /* offset 5674 */
  29217   "\x3e\xcc\xb8\0" /* offset 5678 */
  29218   "\xe2\x89\xa4\xcc\xb8\0" /* offset 5682 */
  29219   "\xe2\x89\xa5\xcc\xb8\0" /* offset 5688 */
  29220   "\xe2\x89\xb2\xcc\xb8\0" /* offset 5694 */
  29221   "\xe2\x89\xb3\xcc\xb8\0" /* offset 5700 */
  29222   "\xe2\x89\xb6\xcc\xb8\0" /* offset 5706 */
  29223   "\xe2\x89\xb7\xcc\xb8\0" /* offset 5712 */
  29224   "\xe2\x89\xba\xcc\xb8\0" /* offset 5718 */
  29225   "\xe2\x89\xbb\xcc\xb8\0" /* offset 5724 */
  29226   "\xe2\x8a\x82\xcc\xb8\0" /* offset 5730 */
  29227   "\xe2\x8a\x83\xcc\xb8\0" /* offset 5736 */
  29228   "\xe2\x8a\x86\xcc\xb8\0" /* offset 5742 */
  29229   "\xe2\x8a\x87\xcc\xb8\0" /* offset 5748 */
  29230   "\xe2\x8a\xa2\xcc\xb8\0" /* offset 5754 */
  29231   "\xe2\x8a\xa8\xcc\xb8\0" /* offset 5760 */
  29232   "\xe2\x8a\xa9\xcc\xb8\0" /* offset 5766 */
  29233   "\xe2\x8a\xab\xcc\xb8\0" /* offset 5772 */
  29234   "\xe2\x89\xbc\xcc\xb8\0" /* offset 5778 */
  29235   "\xe2\x89\xbd\xcc\xb8\0" /* offset 5784 */
  29236   "\xe2\x8a\x91\xcc\xb8\0" /* offset 5790 */
  29237   "\xe2\x8a\x92\xcc\xb8\0" /* offset 5796 */
  29238   "\xe2\x8a\xb2\xcc\xb8\0" /* offset 5802 */
  29239   "\xe2\x8a\xb3\xcc\xb8\0" /* offset 5808 */
  29240   "\xe2\x8a\xb4\xcc\xb8\0" /* offset 5814 */
  29241   "\xe2\x8a\xb5\xcc\xb8\0" /* offset 5820 */
  29242   "\xe3\x80\x88\0" /* offset 5826 */
  29243   "\xe3\x80\x89\0" /* offset 5830 */
  29244   "\x31\x30\0" /* offset 5834 */
  29245   "\x31\x31\0" /* offset 5837 */
  29246   "\x31\x32\0" /* offset 5840 */
  29247   "\x31\x33\0" /* offset 5843 */
  29248   "\x31\x34\0" /* offset 5846 */
  29249   "\x31\x35\0" /* offset 5849 */
  29250   "\x31\x36\0" /* offset 5852 */
  29251   "\x31\x37\0" /* offset 5855 */
  29252   "\x31\x38\0" /* offset 5858 */
  29253   "\x31\x39\0" /* offset 5861 */
  29254   "\x32\x30\0" /* offset 5864 */
  29255   "\x28\x31\x29\0" /* offset 5867 */
  29256   "\x28\x32\x29\0" /* offset 5871 */
  29257   "\x28\x33\x29\0" /* offset 5875 */
  29258   "\x28\x34\x29\0" /* offset 5879 */
  29259   "\x28\x35\x29\0" /* offset 5883 */
  29260   "\x28\x36\x29\0" /* offset 5887 */
  29261   "\x28\x37\x29\0" /* offset 5891 */
  29262   "\x28\x38\x29\0" /* offset 5895 */
  29263   "\x28\x39\x29\0" /* offset 5899 */
  29264   "\x28\x31\x30\x29\0" /* offset 5903 */
  29265   "\x28\x31\x31\x29\0" /* offset 5908 */
  29266   "\x28\x31\x32\x29\0" /* offset 5913 */
  29267   "\x28\x31\x33\x29\0" /* offset 5918 */
  29268   "\x28\x31\x34\x29\0" /* offset 5923 */
  29269   "\x28\x31\x35\x29\0" /* offset 5928 */
  29270   "\x28\x31\x36\x29\0" /* offset 5933 */
  29271   "\x28\x31\x37\x29\0" /* offset 5938 */
  29272   "\x28\x31\x38\x29\0" /* offset 5943 */
  29273   "\x28\x31\x39\x29\0" /* offset 5948 */
  29274   "\x28\x32\x30\x29\0" /* offset 5953 */
  29275   "\x31\x2e\0" /* offset 5958 */
  29276   "\x32\x2e\0" /* offset 5961 */
  29277   "\x33\x2e\0" /* offset 5964 */
  29278   "\x34\x2e\0" /* offset 5967 */
  29279   "\x35\x2e\0" /* offset 5970 */
  29280   "\x36\x2e\0" /* offset 5973 */
  29281   "\x37\x2e\0" /* offset 5976 */
  29282   "\x38\x2e\0" /* offset 5979 */
  29283   "\x39\x2e\0" /* offset 5982 */
  29284   "\x31\x30\x2e\0" /* offset 5985 */
  29285   "\x31\x31\x2e\0" /* offset 5989 */
  29286   "\x31\x32\x2e\0" /* offset 5993 */
  29287   "\x31\x33\x2e\0" /* offset 5997 */
  29288   "\x31\x34\x2e\0" /* offset 6001 */
  29289   "\x31\x35\x2e\0" /* offset 6005 */
  29290   "\x31\x36\x2e\0" /* offset 6009 */
  29291   "\x31\x37\x2e\0" /* offset 6013 */
  29292   "\x31\x38\x2e\0" /* offset 6017 */
  29293   "\x31\x39\x2e\0" /* offset 6021 */
  29294   "\x32\x30\x2e\0" /* offset 6025 */
  29295   "\x28\x61\x29\0" /* offset 6029 */
  29296   "\x28\x62\x29\0" /* offset 6033 */
  29297   "\x28\x63\x29\0" /* offset 6037 */
  29298   "\x28\x64\x29\0" /* offset 6041 */
  29299   "\x28\x65\x29\0" /* offset 6045 */
  29300   "\x28\x66\x29\0" /* offset 6049 */
  29301   "\x28\x67\x29\0" /* offset 6053 */
  29302   "\x28\x68\x29\0" /* offset 6057 */
  29303   "\x28\x69\x29\0" /* offset 6061 */
  29304   "\x28\x6a\x29\0" /* offset 6065 */
  29305   "\x28\x6b\x29\0" /* offset 6069 */
  29306   "\x28\x6c\x29\0" /* offset 6073 */
  29307   "\x28\x6d\x29\0" /* offset 6077 */
  29308   "\x28\x6e\x29\0" /* offset 6081 */
  29309   "\x28\x6f\x29\0" /* offset 6085 */
  29310   "\x28\x70\x29\0" /* offset 6089 */
  29311   "\x28\x71\x29\0" /* offset 6093 */
  29312   "\x28\x72\x29\0" /* offset 6097 */
  29313   "\x28\x73\x29\0" /* offset 6101 */
  29314   "\x28\x74\x29\0" /* offset 6105 */
  29315   "\x28\x75\x29\0" /* offset 6109 */
  29316   "\x28\x76\x29\0" /* offset 6113 */
  29317   "\x28\x77\x29\0" /* offset 6117 */
  29318   "\x28\x78\x29\0" /* offset 6121 */
  29319   "\x28\x79\x29\0" /* offset 6125 */
  29320   "\x28\x7a\x29\0" /* offset 6129 */
  29321   "\x53\0" /* offset 6133 */
  29322   "\x59\0" /* offset 6135 */
  29323   "\x71\0" /* offset 6137 */
  29324   "\xe2\x88\xab\xe2\x88\xab\xe2\x88\xab\xe2\x88\xab\0" /* offset 6139 */
  29325   "\x3a\x3a\x3d\0" /* offset 6152 */
  29326   "\x3d\x3d\0" /* offset 6156 */
  29327   "\x3d\x3d\x3d\0" /* offset 6159 */
  29328   "\xe2\xab\x9d\xcc\xb8\0" /* offset 6163 */
  29329   "\xe2\xb5\xa1\0" /* offset 6169 */
  29330   "\xe6\xaf\x8d\0" /* offset 6173 */
  29331   "\xe9\xbe\x9f\0" /* offset 6177 */
  29332   "\xe4\xb8\x80\0" /* offset 6181 */
  29333   "\xe4\xb8\xa8\0" /* offset 6185 */
  29334   "\xe4\xb8\xb6\0" /* offset 6189 */
  29335   "\xe4\xb8\xbf\0" /* offset 6193 */
  29336   "\xe4\xb9\x99\0" /* offset 6197 */
  29337   "\xe4\xba\x85\0" /* offset 6201 */
  29338   "\xe4\xba\x8c\0" /* offset 6205 */
  29339   "\xe4\xba\xa0\0" /* offset 6209 */
  29340   "\xe4\xba\xba\0" /* offset 6213 */
  29341   "\xe5\x84\xbf\0" /* offset 6217 */
  29342   "\xe5\x85\xa5\0" /* offset 6221 */
  29343   "\xe5\x85\xab\0" /* offset 6225 */
  29344   "\xe5\x86\x82\0" /* offset 6229 */
  29345   "\xe5\x86\x96\0" /* offset 6233 */
  29346   "\xe5\x86\xab\0" /* offset 6237 */
  29347   "\xe5\x87\xa0\0" /* offset 6241 */
  29348   "\xe5\x87\xb5\0" /* offset 6245 */
  29349   "\xe5\x88\x80\0" /* offset 6249 */
  29350   "\xe5\x8a\x9b\0" /* offset 6253 */
  29351   "\xe5\x8b\xb9\0" /* offset 6257 */
  29352   "\xe5\x8c\x95\0" /* offset 6261 */
  29353   "\xe5\x8c\x9a\0" /* offset 6265 */
  29354   "\xe5\x8c\xb8\0" /* offset 6269 */
  29355   "\xe5\x8d\x81\0" /* offset 6273 */
  29356   "\xe5\x8d\x9c\0" /* offset 6277 */
  29357   "\xe5\x8d\xa9\0" /* offset 6281 */
  29358   "\xe5\x8e\x82\0" /* offset 6285 */
  29359   "\xe5\x8e\xb6\0" /* offset 6289 */
  29360   "\xe5\x8f\x88\0" /* offset 6293 */
  29361   "\xe5\x8f\xa3\0" /* offset 6297 */
  29362   "\xe5\x9b\x97\0" /* offset 6301 */
  29363   "\xe5\x9c\x9f\0" /* offset 6305 */
  29364   "\xe5\xa3\xab\0" /* offset 6309 */
  29365   "\xe5\xa4\x82\0" /* offset 6313 */
  29366   "\xe5\xa4\x8a\0" /* offset 6317 */
  29367   "\xe5\xa4\x95\0" /* offset 6321 */
  29368   "\xe5\xa4\xa7\0" /* offset 6325 */
  29369   "\xe5\xa5\xb3\0" /* offset 6329 */
  29370   "\xe5\xad\x90\0" /* offset 6333 */
  29371   "\xe5\xae\x80\0" /* offset 6337 */
  29372   "\xe5\xaf\xb8\0" /* offset 6341 */
  29373   "\xe5\xb0\x8f\0" /* offset 6345 */
  29374   "\xe5\xb0\xa2\0" /* offset 6349 */
  29375   "\xe5\xb0\xb8\0" /* offset 6353 */
  29376   "\xe5\xb1\xae\0" /* offset 6357 */
  29377   "\xe5\xb1\xb1\0" /* offset 6361 */
  29378   "\xe5\xb7\x9b\0" /* offset 6365 */
  29379   "\xe5\xb7\xa5\0" /* offset 6369 */
  29380   "\xe5\xb7\xb1\0" /* offset 6373 */
  29381   "\xe5\xb7\xbe\0" /* offset 6377 */
  29382   "\xe5\xb9\xb2\0" /* offset 6381 */
  29383   "\xe5\xb9\xba\0" /* offset 6385 */
  29384   "\xe5\xb9\xbf\0" /* offset 6389 */
  29385   "\xe5\xbb\xb4\0" /* offset 6393 */
  29386   "\xe5\xbb\xbe\0" /* offset 6397 */
  29387   "\xe5\xbc\x8b\0" /* offset 6401 */
  29388   "\xe5\xbc\x93\0" /* offset 6405 */
  29389   "\xe5\xbd\x90\0" /* offset 6409 */
  29390   "\xe5\xbd\xa1\0" /* offset 6413 */
  29391   "\xe5\xbd\xb3\0" /* offset 6417 */
  29392   "\xe5\xbf\x83\0" /* offset 6421 */
  29393   "\xe6\x88\x88\0" /* offset 6425 */
  29394   "\xe6\x88\xb6\0" /* offset 6429 */
  29395   "\xe6\x89\x8b\0" /* offset 6433 */
  29396   "\xe6\x94\xaf\0" /* offset 6437 */
  29397   "\xe6\x94\xb4\0" /* offset 6441 */
  29398   "\xe6\x96\x87\0" /* offset 6445 */
  29399   "\xe6\x96\x97\0" /* offset 6449 */
  29400   "\xe6\x96\xa4\0" /* offset 6453 */
  29401   "\xe6\x96\xb9\0" /* offset 6457 */
  29402   "\xe6\x97\xa0\0" /* offset 6461 */
  29403   "\xe6\x97\xa5\0" /* offset 6465 */
  29404   "\xe6\x9b\xb0\0" /* offset 6469 */
  29405   "\xe6\x9c\x88\0" /* offset 6473 */
  29406   "\xe6\x9c\xa8\0" /* offset 6477 */
  29407   "\xe6\xac\xa0\0" /* offset 6481 */
  29408   "\xe6\xad\xa2\0" /* offset 6485 */
  29409   "\xe6\xad\xb9\0" /* offset 6489 */
  29410   "\xe6\xae\xb3\0" /* offset 6493 */
  29411   "\xe6\xaf\x8b\0" /* offset 6497 */
  29412   "\xe6\xaf\x94\0" /* offset 6501 */
  29413   "\xe6\xaf\x9b\0" /* offset 6505 */
  29414   "\xe6\xb0\x8f\0" /* offset 6509 */
  29415   "\xe6\xb0\x94\0" /* offset 6513 */
  29416   "\xe6\xb0\xb4\0" /* offset 6517 */
  29417   "\xe7\x81\xab\0" /* offset 6521 */
  29418   "\xe7\x88\xaa\0" /* offset 6525 */
  29419   "\xe7\x88\xb6\0" /* offset 6529 */
  29420   "\xe7\x88\xbb\0" /* offset 6533 */
  29421   "\xe7\x88\xbf\0" /* offset 6537 */
  29422   "\xe7\x89\x87\0" /* offset 6541 */
  29423   "\xe7\x89\x99\0" /* offset 6545 */
  29424   "\xe7\x89\x9b\0" /* offset 6549 */
  29425   "\xe7\x8a\xac\0" /* offset 6553 */
  29426   "\xe7\x8e\x84\0" /* offset 6557 */
  29427   "\xe7\x8e\x89\0" /* offset 6561 */
  29428   "\xe7\x93\x9c\0" /* offset 6565 */
  29429   "\xe7\x93\xa6\0" /* offset 6569 */
  29430   "\xe7\x94\x98\0" /* offset 6573 */
  29431   "\xe7\x94\x9f\0" /* offset 6577 */
  29432   "\xe7\x94\xa8\0" /* offset 6581 */
  29433   "\xe7\x94\xb0\0" /* offset 6585 */
  29434   "\xe7\x96\x8b\0" /* offset 6589 */
  29435   "\xe7\x96\x92\0" /* offset 6593 */
  29436   "\xe7\x99\xb6\0" /* offset 6597 */
  29437   "\xe7\x99\xbd\0" /* offset 6601 */
  29438   "\xe7\x9a\xae\0" /* offset 6605 */
  29439   "\xe7\x9a\xbf\0" /* offset 6609 */
  29440   "\xe7\x9b\xae\0" /* offset 6613 */
  29441   "\xe7\x9f\x9b\0" /* offset 6617 */
  29442   "\xe7\x9f\xa2\0" /* offset 6621 */
  29443   "\xe7\x9f\xb3\0" /* offset 6625 */
  29444   "\xe7\xa4\xba\0" /* offset 6629 */
  29445   "\xe7\xa6\xb8\0" /* offset 6633 */
  29446   "\xe7\xa6\xbe\0" /* offset 6637 */
  29447   "\xe7\xa9\xb4\0" /* offset 6641 */
  29448   "\xe7\xab\x8b\0" /* offset 6645 */
  29449   "\xe7\xab\xb9\0" /* offset 6649 */
  29450   "\xe7\xb1\xb3\0" /* offset 6653 */
  29451   "\xe7\xb3\xb8\0" /* offset 6657 */
  29452   "\xe7\xbc\xb6\0" /* offset 6661 */
  29453   "\xe7\xbd\x91\0" /* offset 6665 */
  29454   "\xe7\xbe\x8a\0" /* offset 6669 */
  29455   "\xe7\xbe\xbd\0" /* offset 6673 */
  29456   "\xe8\x80\x81\0" /* offset 6677 */
  29457   "\xe8\x80\x8c\0" /* offset 6681 */
  29458   "\xe8\x80\x92\0" /* offset 6685 */
  29459   "\xe8\x80\xb3\0" /* offset 6689 */
  29460   "\xe8\x81\xbf\0" /* offset 6693 */
  29461   "\xe8\x82\x89\0" /* offset 6697 */
  29462   "\xe8\x87\xa3\0" /* offset 6701 */
  29463   "\xe8\x87\xaa\0" /* offset 6705 */
  29464   "\xe8\x87\xb3\0" /* offset 6709 */
  29465   "\xe8\x87\xbc\0" /* offset 6713 */
  29466   "\xe8\x88\x8c\0" /* offset 6717 */
  29467   "\xe8\x88\x9b\0" /* offset 6721 */
  29468   "\xe8\x88\x9f\0" /* offset 6725 */
  29469   "\xe8\x89\xae\0" /* offset 6729 */
  29470   "\xe8\x89\xb2\0" /* offset 6733 */
  29471   "\xe8\x89\xb8\0" /* offset 6737 */
  29472   "\xe8\x99\x8d\0" /* offset 6741 */
  29473   "\xe8\x99\xab\0" /* offset 6745 */
  29474   "\xe8\xa1\x80\0" /* offset 6749 */
  29475   "\xe8\xa1\x8c\0" /* offset 6753 */
  29476   "\xe8\xa1\xa3\0" /* offset 6757 */
  29477   "\xe8\xa5\xbe\0" /* offset 6761 */
  29478   "\xe8\xa6\x8b\0" /* offset 6765 */
  29479   "\xe8\xa7\x92\0" /* offset 6769 */
  29480   "\xe8\xa8\x80\0" /* offset 6773 */
  29481   "\xe8\xb0\xb7\0" /* offset 6777 */
  29482   "\xe8\xb1\x86\0" /* offset 6781 */
  29483   "\xe8\xb1\x95\0" /* offset 6785 */
  29484   "\xe8\xb1\xb8\0" /* offset 6789 */
  29485   "\xe8\xb2\x9d\0" /* offset 6793 */
  29486   "\xe8\xb5\xa4\0" /* offset 6797 */
  29487   "\xe8\xb5\xb0\0" /* offset 6801 */
  29488   "\xe8\xb6\xb3\0" /* offset 6805 */
  29489   "\xe8\xba\xab\0" /* offset 6809 */
  29490   "\xe8\xbb\x8a\0" /* offset 6813 */
  29491   "\xe8\xbe\x9b\0" /* offset 6817 */
  29492   "\xe8\xbe\xb0\0" /* offset 6821 */
  29493   "\xe8\xbe\xb5\0" /* offset 6825 */
  29494   "\xe9\x82\x91\0" /* offset 6829 */
  29495   "\xe9\x85\x89\0" /* offset 6833 */
  29496   "\xe9\x87\x86\0" /* offset 6837 */
  29497   "\xe9\x87\x8c\0" /* offset 6841 */
  29498   "\xe9\x87\x91\0" /* offset 6845 */
  29499   "\xe9\x95\xb7\0" /* offset 6849 */
  29500   "\xe9\x96\x80\0" /* offset 6853 */
  29501   "\xe9\x98\x9c\0" /* offset 6857 */
  29502   "\xe9\x9a\xb6\0" /* offset 6861 */
  29503   "\xe9\x9a\xb9\0" /* offset 6865 */
  29504   "\xe9\x9b\xa8\0" /* offset 6869 */
  29505   "\xe9\x9d\x91\0" /* offset 6873 */
  29506   "\xe9\x9d\x9e\0" /* offset 6877 */
  29507   "\xe9\x9d\xa2\0" /* offset 6881 */
  29508   "\xe9\x9d\xa9\0" /* offset 6885 */
  29509   "\xe9\x9f\x8b\0" /* offset 6889 */
  29510   "\xe9\x9f\xad\0" /* offset 6893 */
  29511   "\xe9\x9f\xb3\0" /* offset 6897 */
  29512   "\xe9\xa0\x81\0" /* offset 6901 */
  29513   "\xe9\xa2\xa8\0" /* offset 6905 */
  29514   "\xe9\xa3\x9b\0" /* offset 6909 */
  29515   "\xe9\xa3\x9f\0" /* offset 6913 */
  29516   "\xe9\xa6\x96\0" /* offset 6917 */
  29517   "\xe9\xa6\x99\0" /* offset 6921 */
  29518   "\xe9\xa6\xac\0" /* offset 6925 */
  29519   "\xe9\xaa\xa8\0" /* offset 6929 */
  29520   "\xe9\xab\x98\0" /* offset 6933 */
  29521   "\xe9\xab\x9f\0" /* offset 6937 */
  29522   "\xe9\xac\xa5\0" /* offset 6941 */
  29523   "\xe9\xac\xaf\0" /* offset 6945 */
  29524   "\xe9\xac\xb2\0" /* offset 6949 */
  29525   "\xe9\xac\xbc\0" /* offset 6953 */
  29526   "\xe9\xad\x9a\0" /* offset 6957 */
  29527   "\xe9\xb3\xa5\0" /* offset 6961 */
  29528   "\xe9\xb9\xb5\0" /* offset 6965 */
  29529   "\xe9\xb9\xbf\0" /* offset 6969 */
  29530   "\xe9\xba\xa5\0" /* offset 6973 */
  29531   "\xe9\xba\xbb\0" /* offset 6977 */
  29532   "\xe9\xbb\x83\0" /* offset 6981 */
  29533   "\xe9\xbb\x8d\0" /* offset 6985 */
  29534   "\xe9\xbb\x91\0" /* offset 6989 */
  29535   "\xe9\xbb\xb9\0" /* offset 6993 */
  29536   "\xe9\xbb\xbd\0" /* offset 6997 */
  29537   "\xe9\xbc\x8e\0" /* offset 7001 */
  29538   "\xe9\xbc\x93\0" /* offset 7005 */
  29539   "\xe9\xbc\xa0\0" /* offset 7009 */
  29540   "\xe9\xbc\xbb\0" /* offset 7013 */
  29541   "\xe9\xbd\x8a\0" /* offset 7017 */
  29542   "\xe9\xbd\x92\0" /* offset 7021 */
  29543   "\xe9\xbe\x8d\0" /* offset 7025 */
  29544   "\xe9\xbe\x9c\0" /* offset 7029 */
  29545   "\xe9\xbe\xa0\0" /* offset 7033 */
  29546   "\xe3\x80\x92\0" /* offset 7037 */
  29547   "\xe5\x8d\x84\0" /* offset 7041 */
  29548   "\xe5\x8d\x85\0" /* offset 7045 */
  29549   "\xe3\x81\x8b\xe3\x82\x99\0" /* offset 7049 */
  29550   "\xe3\x81\x8d\xe3\x82\x99\0" /* offset 7056 */
  29551   "\xe3\x81\x8f\xe3\x82\x99\0" /* offset 7063 */
  29552   "\xe3\x81\x91\xe3\x82\x99\0" /* offset 7070 */
  29553   "\xe3\x81\x93\xe3\x82\x99\0" /* offset 7077 */
  29554   "\xe3\x81\x95\xe3\x82\x99\0" /* offset 7084 */
  29555   "\xe3\x81\x97\xe3\x82\x99\0" /* offset 7091 */
  29556   "\xe3\x81\x99\xe3\x82\x99\0" /* offset 7098 */
  29557   "\xe3\x81\x9b\xe3\x82\x99\0" /* offset 7105 */
  29558   "\xe3\x81\x9d\xe3\x82\x99\0" /* offset 7112 */
  29559   "\xe3\x81\x9f\xe3\x82\x99\0" /* offset 7119 */
  29560   "\xe3\x81\xa1\xe3\x82\x99\0" /* offset 7126 */
  29561   "\xe3\x81\xa4\xe3\x82\x99\0" /* offset 7133 */
  29562   "\xe3\x81\xa6\xe3\x82\x99\0" /* offset 7140 */
  29563   "\xe3\x81\xa8\xe3\x82\x99\0" /* offset 7147 */
  29564   "\xe3\x81\xaf\xe3\x82\x99\0" /* offset 7154 */
  29565   "\xe3\x81\xaf\xe3\x82\x9a\0" /* offset 7161 */
  29566   "\xe3\x81\xb2\xe3\x82\x99\0" /* offset 7168 */
  29567   "\xe3\x81\xb2\xe3\x82\x9a\0" /* offset 7175 */
  29568   "\xe3\x81\xb5\xe3\x82\x99\0" /* offset 7182 */
  29569   "\xe3\x81\xb5\xe3\x82\x9a\0" /* offset 7189 */
  29570   "\xe3\x81\xb8\xe3\x82\x99\0" /* offset 7196 */
  29571   "\xe3\x81\xb8\xe3\x82\x9a\0" /* offset 7203 */
  29572   "\xe3\x81\xbb\xe3\x82\x99\0" /* offset 7210 */
  29573   "\xe3\x81\xbb\xe3\x82\x9a\0" /* offset 7217 */
  29574   "\xe3\x81\x86\xe3\x82\x99\0" /* offset 7224 */
  29575   "\x20\xe3\x82\x99\0" /* offset 7231 */
  29576   "\x20\xe3\x82\x9a\0" /* offset 7236 */
  29577   "\xe3\x82\x9d\xe3\x82\x99\0" /* offset 7241 */
  29578   "\xe3\x82\x88\xe3\x82\x8a\0" /* offset 7248 */
  29579   "\xe3\x82\xab\xe3\x82\x99\0" /* offset 7255 */
  29580   "\xe3\x82\xad\xe3\x82\x99\0" /* offset 7262 */
  29581   "\xe3\x82\xaf\xe3\x82\x99\0" /* offset 7269 */
  29582   "\xe3\x82\xb1\xe3\x82\x99\0" /* offset 7276 */
  29583   "\xe3\x82\xb3\xe3\x82\x99\0" /* offset 7283 */
  29584   "\xe3\x82\xb5\xe3\x82\x99\0" /* offset 7290 */
  29585   "\xe3\x82\xb7\xe3\x82\x99\0" /* offset 7297 */
  29586   "\xe3\x82\xb9\xe3\x82\x99\0" /* offset 7304 */
  29587   "\xe3\x82\xbb\xe3\x82\x99\0" /* offset 7311 */
  29588   "\xe3\x82\xbd\xe3\x82\x99\0" /* offset 7318 */
  29589   "\xe3\x82\xbf\xe3\x82\x99\0" /* offset 7325 */
  29590   "\xe3\x83\x81\xe3\x82\x99\0" /* offset 7332 */
  29591   "\xe3\x83\x84\xe3\x82\x99\0" /* offset 7339 */
  29592   "\xe3\x83\x86\xe3\x82\x99\0" /* offset 7346 */
  29593   "\xe3\x83\x88\xe3\x82\x99\0" /* offset 7353 */
  29594   "\xe3\x83\x8f\xe3\x82\x99\0" /* offset 7360 */
  29595   "\xe3\x83\x8f\xe3\x82\x9a\0" /* offset 7367 */
  29596   "\xe3\x83\x92\xe3\x82\x99\0" /* offset 7374 */
  29597   "\xe3\x83\x92\xe3\x82\x9a\0" /* offset 7381 */
  29598   "\xe3\x83\x95\xe3\x82\x99\0" /* offset 7388 */
  29599   "\xe3\x83\x95\xe3\x82\x9a\0" /* offset 7395 */
  29600   "\xe3\x83\x98\xe3\x82\x99\0" /* offset 7402 */
  29601   "\xe3\x83\x98\xe3\x82\x9a\0" /* offset 7409 */
  29602   "\xe3\x83\x9b\xe3\x82\x99\0" /* offset 7416 */
  29603   "\xe3\x83\x9b\xe3\x82\x9a\0" /* offset 7423 */
  29604   "\xe3\x82\xa6\xe3\x82\x99\0" /* offset 7430 */
  29605   "\xe3\x83\xaf\xe3\x82\x99\0" /* offset 7437 */
  29606   "\xe3\x83\xb0\xe3\x82\x99\0" /* offset 7444 */
  29607   "\xe3\x83\xb1\xe3\x82\x99\0" /* offset 7451 */
  29608   "\xe3\x83\xb2\xe3\x82\x99\0" /* offset 7458 */
  29609   "\xe3\x83\xbd\xe3\x82\x99\0" /* offset 7465 */
  29610   "\xe3\x82\xb3\xe3\x83\x88\0" /* offset 7472 */
  29611   "\xe1\x84\x80\0" /* offset 7479 */
  29612   "\xe1\x84\x81\0" /* offset 7483 */
  29613   "\xe1\x86\xaa\0" /* offset 7487 */
  29614   "\xe1\x84\x82\0" /* offset 7491 */
  29615   "\xe1\x86\xac\0" /* offset 7495 */
  29616   "\xe1\x86\xad\0" /* offset 7499 */
  29617   "\xe1\x84\x83\0" /* offset 7503 */
  29618   "\xe1\x84\x84\0" /* offset 7507 */
  29619   "\xe1\x84\x85\0" /* offset 7511 */
  29620   "\xe1\x86\xb0\0" /* offset 7515 */
  29621   "\xe1\x86\xb1\0" /* offset 7519 */
  29622   "\xe1\x86\xb2\0" /* offset 7523 */
  29623   "\xe1\x86\xb3\0" /* offset 7527 */
  29624   "\xe1\x86\xb4\0" /* offset 7531 */
  29625   "\xe1\x86\xb5\0" /* offset 7535 */
  29626   "\xe1\x84\x9a\0" /* offset 7539 */
  29627   "\xe1\x84\x86\0" /* offset 7543 */
  29628   "\xe1\x84\x87\0" /* offset 7547 */
  29629   "\xe1\x84\x88\0" /* offset 7551 */
  29630   "\xe1\x84\xa1\0" /* offset 7555 */
  29631   "\xe1\x84\x89\0" /* offset 7559 */
  29632   "\xe1\x84\x8a\0" /* offset 7563 */
  29633   "\xe1\x84\x8b\0" /* offset 7567 */
  29634   "\xe1\x84\x8c\0" /* offset 7571 */
  29635   "\xe1\x84\x8d\0" /* offset 7575 */
  29636   "\xe1\x84\x8e\0" /* offset 7579 */
  29637   "\xe1\x84\x8f\0" /* offset 7583 */
  29638   "\xe1\x84\x90\0" /* offset 7587 */
  29639   "\xe1\x84\x91\0" /* offset 7591 */
  29640   "\xe1\x84\x92\0" /* offset 7595 */
  29641   "\xe1\x85\xa1\0" /* offset 7599 */
  29642   "\xe1\x85\xa2\0" /* offset 7603 */
  29643   "\xe1\x85\xa3\0" /* offset 7607 */
  29644   "\xe1\x85\xa4\0" /* offset 7611 */
  29645   "\xe1\x85\xa5\0" /* offset 7615 */
  29646   "\xe1\x85\xa6\0" /* offset 7619 */
  29647   "\xe1\x85\xa7\0" /* offset 7623 */
  29648   "\xe1\x85\xa8\0" /* offset 7627 */
  29649   "\xe1\x85\xa9\0" /* offset 7631 */
  29650   "\xe1\x85\xaa\0" /* offset 7635 */
  29651   "\xe1\x85\xab\0" /* offset 7639 */
  29652   "\xe1\x85\xac\0" /* offset 7643 */
  29653   "\xe1\x85\xad\0" /* offset 7647 */
  29654   "\xe1\x85\xae\0" /* offset 7651 */
  29655   "\xe1\x85\xaf\0" /* offset 7655 */
  29656   "\xe1\x85\xb0\0" /* offset 7659 */
  29657   "\xe1\x85\xb1\0" /* offset 7663 */
  29658   "\xe1\x85\xb2\0" /* offset 7667 */
  29659   "\xe1\x85\xb3\0" /* offset 7671 */
  29660   "\xe1\x85\xb4\0" /* offset 7675 */
  29661   "\xe1\x85\xb5\0" /* offset 7679 */
  29662   "\xe1\x85\xa0\0" /* offset 7683 */
  29663   "\xe1\x84\x94\0" /* offset 7687 */
  29664   "\xe1\x84\x95\0" /* offset 7691 */
  29665   "\xe1\x87\x87\0" /* offset 7695 */
  29666   "\xe1\x87\x88\0" /* offset 7699 */
  29667   "\xe1\x87\x8c\0" /* offset 7703 */
  29668   "\xe1\x87\x8e\0" /* offset 7707 */
  29669   "\xe1\x87\x93\0" /* offset 7711 */
  29670   "\xe1\x87\x97\0" /* offset 7715 */
  29671   "\xe1\x87\x99\0" /* offset 7719 */
  29672   "\xe1\x84\x9c\0" /* offset 7723 */
  29673   "\xe1\x87\x9d\0" /* offset 7727 */
  29674   "\xe1\x87\x9f\0" /* offset 7731 */
  29675   "\xe1\x84\x9d\0" /* offset 7735 */
  29676   "\xe1\x84\x9e\0" /* offset 7739 */
  29677   "\xe1\x84\xa0\0" /* offset 7743 */
  29678   "\xe1\x84\xa2\0" /* offset 7747 */
  29679   "\xe1\x84\xa3\0" /* offset 7751 */
  29680   "\xe1\x84\xa7\0" /* offset 7755 */
  29681   "\xe1\x84\xa9\0" /* offset 7759 */
  29682   "\xe1\x84\xab\0" /* offset 7763 */
  29683   "\xe1\x84\xac\0" /* offset 7767 */
  29684   "\xe1\x84\xad\0" /* offset 7771 */
  29685   "\xe1\x84\xae\0" /* offset 7775 */
  29686   "\xe1\x84\xaf\0" /* offset 7779 */
  29687   "\xe1\x84\xb2\0" /* offset 7783 */
  29688   "\xe1\x84\xb6\0" /* offset 7787 */
  29689   "\xe1\x85\x80\0" /* offset 7791 */
  29690   "\xe1\x85\x87\0" /* offset 7795 */
  29691   "\xe1\x85\x8c\0" /* offset 7799 */
  29692   "\xe1\x87\xb1\0" /* offset 7803 */
  29693   "\xe1\x87\xb2\0" /* offset 7807 */
  29694   "\xe1\x85\x97\0" /* offset 7811 */
  29695   "\xe1\x85\x98\0" /* offset 7815 */
  29696   "\xe1\x85\x99\0" /* offset 7819 */
  29697   "\xe1\x86\x84\0" /* offset 7823 */
  29698   "\xe1\x86\x85\0" /* offset 7827 */
  29699   "\xe1\x86\x88\0" /* offset 7831 */
  29700   "\xe1\x86\x91\0" /* offset 7835 */
  29701   "\xe1\x86\x92\0" /* offset 7839 */
  29702   "\xe1\x86\x94\0" /* offset 7843 */
  29703   "\xe1\x86\x9e\0" /* offset 7847 */
  29704   "\xe1\x86\xa1\0" /* offset 7851 */
  29705   "\xe4\xb8\x89\0" /* offset 7855 */
  29706   "\xe5\x9b\x9b\0" /* offset 7859 */
  29707   "\xe4\xb8\x8a\0" /* offset 7863 */
  29708   "\xe4\xb8\xad\0" /* offset 7867 */
  29709   "\xe4\xb8\x8b\0" /* offset 7871 */
  29710   "\xe7\x94\xb2\0" /* offset 7875 */
  29711   "\xe4\xb8\x99\0" /* offset 7879 */
  29712   "\xe4\xb8\x81\0" /* offset 7883 */
  29713   "\xe5\xa4\xa9\0" /* offset 7887 */
  29714   "\xe5\x9c\xb0\0" /* offset 7891 */
  29715   "\x28\xe1\x84\x80\x29\0" /* offset 7895 */
  29716   "\x28\xe1\x84\x82\x29\0" /* offset 7901 */
  29717   "\x28\xe1\x84\x83\x29\0" /* offset 7907 */
  29718   "\x28\xe1\x84\x85\x29\0" /* offset 7913 */
  29719   "\x28\xe1\x84\x86\x29\0" /* offset 7919 */
  29720   "\x28\xe1\x84\x87\x29\0" /* offset 7925 */
  29721   "\x28\xe1\x84\x89\x29\0" /* offset 7931 */
  29722   "\x28\xe1\x84\x8b\x29\0" /* offset 7937 */
  29723   "\x28\xe1\x84\x8c\x29\0" /* offset 7943 */
  29724   "\x28\xe1\x84\x8e\x29\0" /* offset 7949 */
  29725   "\x28\xe1\x84\x8f\x29\0" /* offset 7955 */
  29726   "\x28\xe1\x84\x90\x29\0" /* offset 7961 */
  29727   "\x28\xe1\x84\x91\x29\0" /* offset 7967 */
  29728   "\x28\xe1\x84\x92\x29\0" /* offset 7973 */
  29729   "\x28\xe1\x84\x80\xe1\x85\xa1\x29\0" /* offset 7979 */
  29730   "\x28\xe1\x84\x82\xe1\x85\xa1\x29\0" /* offset 7988 */
  29731   "\x28\xe1\x84\x83\xe1\x85\xa1\x29\0" /* offset 7997 */
  29732   "\x28\xe1\x84\x85\xe1\x85\xa1\x29\0" /* offset 8006 */
  29733   "\x28\xe1\x84\x86\xe1\x85\xa1\x29\0" /* offset 8015 */
  29734   "\x28\xe1\x84\x87\xe1\x85\xa1\x29\0" /* offset 8024 */
  29735   "\x28\xe1\x84\x89\xe1\x85\xa1\x29\0" /* offset 8033 */
  29736   "\x28\xe1\x84\x8b\xe1\x85\xa1\x29\0" /* offset 8042 */
  29737   "\x28\xe1\x84\x8c\xe1\x85\xa1\x29\0" /* offset 8051 */
  29738   "\x28\xe1\x84\x8e\xe1\x85\xa1\x29\0" /* offset 8060 */
  29739   "\x28\xe1\x84\x8f\xe1\x85\xa1\x29\0" /* offset 8069 */
  29740   "\x28\xe1\x84\x90\xe1\x85\xa1\x29\0" /* offset 8078 */
  29741   "\x28\xe1\x84\x91\xe1\x85\xa1\x29\0" /* offset 8087 */
  29742   "\x28\xe1\x84\x92\xe1\x85\xa1\x29\0" /* offset 8096 */
  29743   "\x28\xe1\x84\x8c\xe1\x85\xae\x29\0" /* offset 8105 */
  29744   "\x28\xe1\x84\x8b\xe1\x85\xa9\xe1\x84\x8c\xe1\x85\xa5\xe1\x86\xab\x29\0" /* offset 8114 */
  29745   "\x28\xe1\x84\x8b\xe1\x85\xa9\xe1\x84\x92\xe1\x85\xae\x29\0" /* offset 8132 */
  29746   "\x28\xe4\xb8\x80\x29\0" /* offset 8147 */
  29747   "\x28\xe4\xba\x8c\x29\0" /* offset 8153 */
  29748   "\x28\xe4\xb8\x89\x29\0" /* offset 8159 */
  29749   "\x28\xe5\x9b\x9b\x29\0" /* offset 8165 */
  29750   "\x28\xe4\xba\x94\x29\0" /* offset 8171 */
  29751   "\x28\xe5\x85\xad\x29\0" /* offset 8177 */
  29752   "\x28\xe4\xb8\x83\x29\0" /* offset 8183 */
  29753   "\x28\xe5\x85\xab\x29\0" /* offset 8189 */
  29754   "\x28\xe4\xb9\x9d\x29\0" /* offset 8195 */
  29755   "\x28\xe5\x8d\x81\x29\0" /* offset 8201 */
  29756   "\x28\xe6\x9c\x88\x29\0" /* offset 8207 */
  29757   "\x28\xe7\x81\xab\x29\0" /* offset 8213 */
  29758   "\x28\xe6\xb0\xb4\x29\0" /* offset 8219 */
  29759   "\x28\xe6\x9c\xa8\x29\0" /* offset 8225 */
  29760   "\x28\xe9\x87\x91\x29\0" /* offset 8231 */
  29761   "\x28\xe5\x9c\x9f\x29\0" /* offset 8237 */
  29762   "\x28\xe6\x97\xa5\x29\0" /* offset 8243 */
  29763   "\x28\xe6\xa0\xaa\x29\0" /* offset 8249 */
  29764   "\x28\xe6\x9c\x89\x29\0" /* offset 8255 */
  29765   "\x28\xe7\xa4\xbe\x29\0" /* offset 8261 */
  29766   "\x28\xe5\x90\x8d\x29\0" /* offset 8267 */
  29767   "\x28\xe7\x89\xb9\x29\0" /* offset 8273 */
  29768   "\x28\xe8\xb2\xa1\x29\0" /* offset 8279 */
  29769   "\x28\xe7\xa5\x9d\x29\0" /* offset 8285 */
  29770   "\x28\xe5\x8a\xb4\x29\0" /* offset 8291 */
  29771   "\x28\xe4\xbb\xa3\x29\0" /* offset 8297 */
  29772   "\x28\xe5\x91\xbc\x29\0" /* offset 8303 */
  29773   "\x28\xe5\xad\xa6\x29\0" /* offset 8309 */
  29774   "\x28\xe7\x9b\xa3\x29\0" /* offset 8315 */
  29775   "\x28\xe4\xbc\x81\x29\0" /* offset 8321 */
  29776   "\x28\xe8\xb3\x87\x29\0" /* offset 8327 */
  29777   "\x28\xe5\x8d\x94\x29\0" /* offset 8333 */
  29778   "\x28\xe7\xa5\xad\x29\0" /* offset 8339 */
  29779   "\x28\xe4\xbc\x91\x29\0" /* offset 8345 */
  29780   "\x28\xe8\x87\xaa\x29\0" /* offset 8351 */
  29781   "\x28\xe8\x87\xb3\x29\0" /* offset 8357 */
  29782   "\xe5\x95\x8f\0" /* offset 8363 */
  29783   "\xe5\xb9\xbc\0" /* offset 8367 */
  29784   "\xe7\xae\x8f\0" /* offset 8371 */
  29785   "\x50\x54\x45\0" /* offset 8375 */
  29786   "\x32\x31\0" /* offset 8379 */
  29787   "\x32\x32\0" /* offset 8382 */
  29788   "\x32\x33\0" /* offset 8385 */
  29789   "\x32\x34\0" /* offset 8388 */
  29790   "\x32\x35\0" /* offset 8391 */
  29791   "\x32\x36\0" /* offset 8394 */
  29792   "\x32\x37\0" /* offset 8397 */
  29793   "\x32\x38\0" /* offset 8400 */
  29794   "\x32\x39\0" /* offset 8403 */
  29795   "\x33\x30\0" /* offset 8406 */
  29796   "\x33\x31\0" /* offset 8409 */
  29797   "\x33\x32\0" /* offset 8412 */
  29798   "\x33\x33\0" /* offset 8415 */
  29799   "\x33\x34\0" /* offset 8418 */
  29800   "\x33\x35\0" /* offset 8421 */
  29801   "\xe1\x84\x80\xe1\x85\xa1\0" /* offset 8424 */
  29802   "\xe1\x84\x82\xe1\x85\xa1\0" /* offset 8431 */
  29803   "\xe1\x84\x83\xe1\x85\xa1\0" /* offset 8438 */
  29804   "\xe1\x84\x85\xe1\x85\xa1\0" /* offset 8445 */
  29805   "\xe1\x84\x86\xe1\x85\xa1\0" /* offset 8452 */
  29806   "\xe1\x84\x87\xe1\x85\xa1\0" /* offset 8459 */
  29807   "\xe1\x84\x89\xe1\x85\xa1\0" /* offset 8466 */
  29808   "\xe1\x84\x8b\xe1\x85\xa1\0" /* offset 8473 */
  29809   "\xe1\x84\x8c\xe1\x85\xa1\0" /* offset 8480 */
  29810   "\xe1\x84\x8e\xe1\x85\xa1\0" /* offset 8487 */
  29811   "\xe1\x84\x8f\xe1\x85\xa1\0" /* offset 8494 */
  29812   "\xe1\x84\x90\xe1\x85\xa1\0" /* offset 8501 */
  29813   "\xe1\x84\x91\xe1\x85\xa1\0" /* offset 8508 */
  29814   "\xe1\x84\x92\xe1\x85\xa1\0" /* offset 8515 */
  29815   "\xe1\x84\x8e\xe1\x85\xa1\xe1\x86\xb7\xe1\x84\x80\xe1\x85\xa9\0" /* offset 8522 */
  29816   "\xe1\x84\x8c\xe1\x85\xae\xe1\x84\x8b\xe1\x85\xb4\0" /* offset 8538 */
  29817   "\xe1\x84\x8b\xe1\x85\xae\0" /* offset 8551 */
  29818   "\xe4\xba\x94\0" /* offset 8558 */
  29819   "\xe5\x85\xad\0" /* offset 8562 */
  29820   "\xe4\xb8\x83\0" /* offset 8566 */
  29821   "\xe4\xb9\x9d\0" /* offset 8570 */
  29822   "\xe6\xa0\xaa\0" /* offset 8574 */
  29823   "\xe6\x9c\x89\0" /* offset 8578 */
  29824   "\xe7\xa4\xbe\0" /* offset 8582 */
  29825   "\xe5\x90\x8d\0" /* offset 8586 */
  29826   "\xe7\x89\xb9\0" /* offset 8590 */
  29827   "\xe8\xb2\xa1\0" /* offset 8594 */
  29828   "\xe7\xa5\x9d\0" /* offset 8598 */
  29829   "\xe5\x8a\xb4\0" /* offset 8602 */
  29830   "\xe7\xa7\x98\0" /* offset 8606 */
  29831   "\xe7\x94\xb7\0" /* offset 8610 */
  29832   "\xe9\x81\xa9\0" /* offset 8614 */
  29833   "\xe5\x84\xaa\0" /* offset 8618 */
  29834   "\xe5\x8d\xb0\0" /* offset 8622 */
  29835   "\xe6\xb3\xa8\0" /* offset 8626 */
  29836   "\xe9\xa0\x85\0" /* offset 8630 */
  29837   "\xe4\xbc\x91\0" /* offset 8634 */
  29838   "\xe5\x86\x99\0" /* offset 8638 */
  29839   "\xe6\xad\xa3\0" /* offset 8642 */
  29840   "\xe5\xb7\xa6\0" /* offset 8646 */
  29841   "\xe5\x8f\xb3\0" /* offset 8650 */
  29842   "\xe5\x8c\xbb\0" /* offset 8654 */
  29843   "\xe5\xae\x97\0" /* offset 8658 */
  29844   "\xe5\xad\xa6\0" /* offset 8662 */
  29845   "\xe7\x9b\xa3\0" /* offset 8666 */
  29846   "\xe4\xbc\x81\0" /* offset 8670 */
  29847   "\xe8\xb3\x87\0" /* offset 8674 */
  29848   "\xe5\x8d\x94\0" /* offset 8678 */
  29849   "\xe5\xa4\x9c\0" /* offset 8682 */
  29850   "\x33\x36\0" /* offset 8686 */
  29851   "\x33\x37\0" /* offset 8689 */
  29852   "\x33\x38\0" /* offset 8692 */
  29853   "\x33\x39\0" /* offset 8695 */
  29854   "\x34\x30\0" /* offset 8698 */
  29855   "\x34\x31\0" /* offset 8701 */
  29856   "\x34\x32\0" /* offset 8704 */
  29857   "\x34\x33\0" /* offset 8707 */
  29858   "\x34\x34\0" /* offset 8710 */
  29859   "\x34\x35\0" /* offset 8713 */
  29860   "\x34\x36\0" /* offset 8716 */
  29861   "\x34\x37\0" /* offset 8719 */
  29862   "\x34\x38\0" /* offset 8722 */
  29863   "\x34\x39\0" /* offset 8725 */
  29864   "\x35\x30\0" /* offset 8728 */
  29865   "\x31\xe6\x9c\x88\0" /* offset 8731 */
  29866   "\x32\xe6\x9c\x88\0" /* offset 8736 */
  29867   "\x33\xe6\x9c\x88\0" /* offset 8741 */
  29868   "\x34\xe6\x9c\x88\0" /* offset 8746 */
  29869   "\x35\xe6\x9c\x88\0" /* offset 8751 */
  29870   "\x36\xe6\x9c\x88\0" /* offset 8756 */
  29871   "\x37\xe6\x9c\x88\0" /* offset 8761 */
  29872   "\x38\xe6\x9c\x88\0" /* offset 8766 */
  29873   "\x39\xe6\x9c\x88\0" /* offset 8771 */
  29874   "\x31\x30\xe6\x9c\x88\0" /* offset 8776 */
  29875   "\x31\x31\xe6\x9c\x88\0" /* offset 8782 */
  29876   "\x31\x32\xe6\x9c\x88\0" /* offset 8788 */
  29877   "\x48\x67\0" /* offset 8794 */
  29878   "\x65\x72\x67\0" /* offset 8797 */
  29879   "\x65\x56\0" /* offset 8801 */
  29880   "\x4c\x54\x44\0" /* offset 8804 */
  29881   "\xe3\x82\xa2\0" /* offset 8808 */
  29882   "\xe3\x82\xa4\0" /* offset 8812 */
  29883   "\xe3\x82\xa6\0" /* offset 8816 */
  29884   "\xe3\x82\xa8\0" /* offset 8820 */
  29885   "\xe3\x82\xaa\0" /* offset 8824 */
  29886   "\xe3\x82\xab\0" /* offset 8828 */
  29887   "\xe3\x82\xad\0" /* offset 8832 */
  29888   "\xe3\x82\xaf\0" /* offset 8836 */
  29889   "\xe3\x82\xb1\0" /* offset 8840 */
  29890   "\xe3\x82\xb3\0" /* offset 8844 */
  29891   "\xe3\x82\xb5\0" /* offset 8848 */
  29892   "\xe3\x82\xb7\0" /* offset 8852 */
  29893   "\xe3\x82\xb9\0" /* offset 8856 */
  29894   "\xe3\x82\xbb\0" /* offset 8860 */
  29895   "\xe3\x82\xbd\0" /* offset 8864 */
  29896   "\xe3\x82\xbf\0" /* offset 8868 */
  29897   "\xe3\x83\x81\0" /* offset 8872 */
  29898   "\xe3\x83\x84\0" /* offset 8876 */
  29899   "\xe3\x83\x86\0" /* offset 8880 */
  29900   "\xe3\x83\x88\0" /* offset 8884 */
  29901   "\xe3\x83\x8a\0" /* offset 8888 */
  29902   "\xe3\x83\x8b\0" /* offset 8892 */
  29903   "\xe3\x83\x8c\0" /* offset 8896 */
  29904   "\xe3\x83\x8d\0" /* offset 8900 */
  29905   "\xe3\x83\x8e\0" /* offset 8904 */
  29906   "\xe3\x83\x8f\0" /* offset 8908 */
  29907   "\xe3\x83\x92\0" /* offset 8912 */
  29908   "\xe3\x83\x95\0" /* offset 8916 */
  29909   "\xe3\x83\x98\0" /* offset 8920 */
  29910   "\xe3\x83\x9b\0" /* offset 8924 */
  29911   "\xe3\x83\x9e\0" /* offset 8928 */
  29912   "\xe3\x83\x9f\0" /* offset 8932 */
  29913   "\xe3\x83\xa0\0" /* offset 8936 */
  29914   "\xe3\x83\xa1\0" /* offset 8940 */
  29915   "\xe3\x83\xa2\0" /* offset 8944 */
  29916   "\xe3\x83\xa4\0" /* offset 8948 */
  29917   "\xe3\x83\xa6\0" /* offset 8952 */
  29918   "\xe3\x83\xa8\0" /* offset 8956 */
  29919   "\xe3\x83\xa9\0" /* offset 8960 */
  29920   "\xe3\x83\xaa\0" /* offset 8964 */
  29921   "\xe3\x83\xab\0" /* offset 8968 */
  29922   "\xe3\x83\xac\0" /* offset 8972 */
  29923   "\xe3\x83\xad\0" /* offset 8976 */
  29924   "\xe3\x83\xaf\0" /* offset 8980 */
  29925   "\xe3\x83\xb0\0" /* offset 8984 */
  29926   "\xe3\x83\xb1\0" /* offset 8988 */
  29927   "\xe3\x83\xb2\0" /* offset 8992 */
  29928   "\xe3\x82\xa2\xe3\x83\x8f\xe3\x82\x9a\xe3\x83\xbc\xe3\x83\x88\0" /* offset 8996 */
  29929   "\xe3\x82\xa2\xe3\x83\xab\xe3\x83\x95\xe3\x82\xa1\0" /* offset 9012 */
  29930   "\xe3\x82\xa2\xe3\x83\xb3\xe3\x83\x98\xe3\x82\x9a\xe3\x82\xa2\0" /* offset 9025 */
  29931   "\xe3\x82\xa2\xe3\x83\xbc\xe3\x83\xab\0" /* offset 9041 */
  29932   "\xe3\x82\xa4\xe3\x83\x8b\xe3\x83\xb3\xe3\x82\xaf\xe3\x82\x99\0" /* offset 9051 */
  29933   "\xe3\x82\xa4\xe3\x83\xb3\xe3\x83\x81\0" /* offset 9067 */
  29934   "\xe3\x82\xa6\xe3\x82\xa9\xe3\x83\xb3\0" /* offset 9077 */
  29935   "\xe3\x82\xa8\xe3\x82\xb9\xe3\x82\xaf\xe3\x83\xbc\xe3\x83\x88\xe3\x82\x99\0" /* offset 9087 */
  29936   "\xe3\x82\xa8\xe3\x83\xbc\xe3\x82\xab\xe3\x83\xbc\0" /* offset 9106 */
  29937   "\xe3\x82\xaa\xe3\x83\xb3\xe3\x82\xb9\0" /* offset 9119 */
  29938   "\xe3\x82\xaa\xe3\x83\xbc\xe3\x83\xa0\0" /* offset 9129 */
  29939   "\xe3\x82\xab\xe3\x82\xa4\xe3\x83\xaa\0" /* offset 9139 */
  29940   "\xe3\x82\xab\xe3\x83\xa9\xe3\x83\x83\xe3\x83\x88\0" /* offset 9149 */
  29941   "\xe3\x82\xab\xe3\x83\xad\xe3\x83\xaa\xe3\x83\xbc\0" /* offset 9162 */
  29942   "\xe3\x82\xab\xe3\x82\x99\xe3\x83\xad\xe3\x83\xb3\0" /* offset 9175 */
  29943   "\xe3\x82\xab\xe3\x82\x99\xe3\x83\xb3\xe3\x83\x9e\0" /* offset 9188 */
  29944   "\xe3\x82\xad\xe3\x82\x99\xe3\x82\xab\xe3\x82\x99\0" /* offset 9201 */
  29945   "\xe3\x82\xad\xe3\x82\x99\xe3\x83\x8b\xe3\x83\xbc\0" /* offset 9214 */
  29946   "\xe3\x82\xad\xe3\x83\xa5\xe3\x83\xaa\xe3\x83\xbc\0" /* offset 9227 */
  29947   "\xe3\x82\xad\xe3\x82\x99\xe3\x83\xab\xe3\x82\xbf\xe3\x82\x99\xe3\x83\xbc\0" /* offset 9240 */
  29948   "\xe3\x82\xad\xe3\x83\xad\0" /* offset 9259 */
  29949   "\xe3\x82\xad\xe3\x83\xad\xe3\x82\xaf\xe3\x82\x99\xe3\x83\xa9\xe3\x83\xa0\0" /* offset 9266 */
  29950   "\xe3\x82\xad\xe3\x83\xad\xe3\x83\xa1\xe3\x83\xbc\xe3\x83\x88\xe3\x83\xab\0" /* offset 9285 */
  29951   "\xe3\x82\xad\xe3\x83\xad\xe3\x83\xaf\xe3\x83\x83\xe3\x83\x88\0" /* offset 9304 */
  29952   "\xe3\x82\xaf\xe3\x82\x99\xe3\x83\xa9\xe3\x83\xa0\0" /* offset 9320 */
  29953   "\xe3\x82\xaf\xe3\x82\x99\xe3\x83\xa9\xe3\x83\xa0\xe3\x83\x88\xe3\x83\xb3\0" /* offset 9333 */
  29954   "\xe3\x82\xaf\xe3\x83\xab\xe3\x82\xbb\xe3\x82\x99\xe3\x82\xa4\xe3\x83\xad\0" /* offset 9352 */
  29955   "\xe3\x82\xaf\xe3\x83\xad\xe3\x83\xbc\xe3\x83\x8d\0" /* offset 9371 */
  29956   "\xe3\x82\xb1\xe3\x83\xbc\xe3\x82\xb9\0" /* offset 9384 */
  29957   "\xe3\x82\xb3\xe3\x83\xab\xe3\x83\x8a\0" /* offset 9394 */
  29958   "\xe3\x82\xb3\xe3\x83\xbc\xe3\x83\x9b\xe3\x82\x9a\0" /* offset 9404 */
  29959   "\xe3\x82\xb5\xe3\x82\xa4\xe3\x82\xaf\xe3\x83\xab\0" /* offset 9417 */
  29960   "\xe3\x82\xb5\xe3\x83\xb3\xe3\x83\x81\xe3\x83\xbc\xe3\x83\xa0\0" /* offset 9430 */
  29961   "\xe3\x82\xb7\xe3\x83\xaa\xe3\x83\xb3\xe3\x82\xaf\xe3\x82\x99\0" /* offset 9446 */
  29962   "\xe3\x82\xbb\xe3\x83\xb3\xe3\x83\x81\0" /* offset 9462 */
  29963   "\xe3\x82\xbb\xe3\x83\xb3\xe3\x83\x88\0" /* offset 9472 */
  29964   "\xe3\x82\xbf\xe3\x82\x99\xe3\x83\xbc\xe3\x82\xb9\0" /* offset 9482 */
  29965   "\xe3\x83\x86\xe3\x82\x99\xe3\x82\xb7\0" /* offset 9495 */
  29966   "\xe3\x83\x88\xe3\x82\x99\xe3\x83\xab\0" /* offset 9505 */
  29967   "\xe3\x83\x88\xe3\x83\xb3\0" /* offset 9515 */
  29968   "\xe3\x83\x8a\xe3\x83\x8e\0" /* offset 9522 */
  29969   "\xe3\x83\x8e\xe3\x83\x83\xe3\x83\x88\0" /* offset 9529 */
  29970   "\xe3\x83\x8f\xe3\x82\xa4\xe3\x83\x84\0" /* offset 9539 */
  29971   "\xe3\x83\x8f\xe3\x82\x9a\xe3\x83\xbc\xe3\x82\xbb\xe3\x83\xb3\xe3\x83\x88\0" /* offset 9549 */
  29972   "\xe3\x83\x8f\xe3\x82\x9a\xe3\x83\xbc\xe3\x83\x84\0" /* offset 9568 */
  29973   "\xe3\x83\x8f\xe3\x82\x99\xe3\x83\xbc\xe3\x83\xac\xe3\x83\xab\0" /* offset 9581 */
  29974   "\xe3\x83\x92\xe3\x82\x9a\xe3\x82\xa2\xe3\x82\xb9\xe3\x83\x88\xe3\x83\xab\0" /* offset 9597 */
  29975   "\xe3\x83\x92\xe3\x82\x9a\xe3\x82\xaf\xe3\x83\xab\0" /* offset 9616 */
  29976   "\xe3\x83\x92\xe3\x82\x9a\xe3\x82\xb3\0" /* offset 9629 */
  29977   "\xe3\x83\x92\xe3\x82\x99\xe3\x83\xab\0" /* offset 9639 */
  29978   "\xe3\x83\x95\xe3\x82\xa1\xe3\x83\xa9\xe3\x83\x83\xe3\x83\x88\xe3\x82\x99\0" /* offset 9649 */
  29979   "\xe3\x83\x95\xe3\x82\xa3\xe3\x83\xbc\xe3\x83\x88\0" /* offset 9668 */
  29980   "\xe3\x83\x95\xe3\x82\x99\xe3\x83\x83\xe3\x82\xb7\xe3\x82\xa7\xe3\x83\xab\0" /* offset 9681 */
  29981   "\xe3\x83\x95\xe3\x83\xa9\xe3\x83\xb3\0" /* offset 9700 */
  29982   "\xe3\x83\x98\xe3\x82\xaf\xe3\x82\xbf\xe3\x83\xbc\xe3\x83\xab\0" /* offset 9710 */
  29983   "\xe3\x83\x98\xe3\x82\x9a\xe3\x82\xbd\0" /* offset 9726 */
  29984   "\xe3\x83\x98\xe3\x82\x9a\xe3\x83\x8b\xe3\x83\x92\0" /* offset 9736 */
  29985   "\xe3\x83\x98\xe3\x83\xab\xe3\x83\x84\0" /* offset 9749 */
  29986   "\xe3\x83\x98\xe3\x82\x9a\xe3\x83\xb3\xe3\x82\xb9\0" /* offset 9759 */
  29987   "\xe3\x83\x98\xe3\x82\x9a\xe3\x83\xbc\xe3\x82\xb7\xe3\x82\x99\0" /* offset 9772 */
  29988   "\xe3\x83\x98\xe3\x82\x99\xe3\x83\xbc\xe3\x82\xbf\0" /* offset 9788 */
  29989   "\xe3\x83\x9b\xe3\x82\x9a\xe3\x82\xa4\xe3\x83\xb3\xe3\x83\x88\0" /* offset 9801 */
  29990   "\xe3\x83\x9b\xe3\x82\x99\xe3\x83\xab\xe3\x83\x88\0" /* offset 9817 */
  29991   "\xe3\x83\x9b\xe3\x83\xb3\0" /* offset 9830 */
  29992   "\xe3\x83\x9b\xe3\x82\x9a\xe3\x83\xb3\xe3\x83\x88\xe3\x82\x99\0" /* offset 9837 */
  29993   "\xe3\x83\x9b\xe3\x83\xbc\xe3\x83\xab\0" /* offset 9853 */
  29994   "\xe3\x83\x9b\xe3\x83\xbc\xe3\x83\xb3\0" /* offset 9863 */
  29995   "\xe3\x83\x9e\xe3\x82\xa4\xe3\x82\xaf\xe3\x83\xad\0" /* offset 9873 */
  29996   "\xe3\x83\x9e\xe3\x82\xa4\xe3\x83\xab\0" /* offset 9886 */
  29997   "\xe3\x83\x9e\xe3\x83\x83\xe3\x83\x8f\0" /* offset 9896 */
  29998   "\xe3\x83\x9e\xe3\x83\xab\xe3\x82\xaf\0" /* offset 9906 */
  29999   "\xe3\x83\x9e\xe3\x83\xb3\xe3\x82\xb7\xe3\x83\xa7\xe3\x83\xb3\0" /* offset 9916 */
  30000   "\xe3\x83\x9f\xe3\x82\xaf\xe3\x83\xad\xe3\x83\xb3\0" /* offset 9932 */
  30001   "\xe3\x83\x9f\xe3\x83\xaa\0" /* offset 9945 */
  30002   "\xe3\x83\x9f\xe3\x83\xaa\xe3\x83\x8f\xe3\x82\x99\xe3\x83\xbc\xe3\x83\xab\0" /* offset 9952 */
  30003   "\xe3\x83\xa1\xe3\x82\xab\xe3\x82\x99\0" /* offset 9971 */
  30004   "\xe3\x83\xa1\xe3\x82\xab\xe3\x82\x99\xe3\x83\x88\xe3\x83\xb3\0" /* offset 9981 */
  30005   "\xe3\x83\xa1\xe3\x83\xbc\xe3\x83\x88\xe3\x83\xab\0" /* offset 9997 */
  30006   "\xe3\x83\xa4\xe3\x83\xbc\xe3\x83\x88\xe3\x82\x99\0" /* offset 10010 */
  30007   "\xe3\x83\xa4\xe3\x83\xbc\xe3\x83\xab\0" /* offset 10023 */
  30008   "\xe3\x83\xa6\xe3\x82\xa2\xe3\x83\xb3\0" /* offset 10033 */
  30009   "\xe3\x83\xaa\xe3\x83\x83\xe3\x83\x88\xe3\x83\xab\0" /* offset 10043 */
  30010   "\xe3\x83\xaa\xe3\x83\xa9\0" /* offset 10056 */
  30011   "\xe3\x83\xab\xe3\x83\x92\xe3\x82\x9a\xe3\x83\xbc\0" /* offset 10063 */
  30012   "\xe3\x83\xab\xe3\x83\xbc\xe3\x83\x95\xe3\x82\x99\xe3\x83\xab\0" /* offset 10076 */
  30013   "\xe3\x83\xac\xe3\x83\xa0\0" /* offset 10092 */
  30014   "\xe3\x83\xac\xe3\x83\xb3\xe3\x83\x88\xe3\x82\xb1\xe3\x82\x99\xe3\x83\xb3\0" /* offset 10099 */
  30015   "\xe3\x83\xaf\xe3\x83\x83\xe3\x83\x88\0" /* offset 10118 */
  30016   "\x30\xe7\x82\xb9\0" /* offset 10128 */
  30017   "\x31\xe7\x82\xb9\0" /* offset 10133 */
  30018   "\x32\xe7\x82\xb9\0" /* offset 10138 */
  30019   "\x33\xe7\x82\xb9\0" /* offset 10143 */
  30020   "\x34\xe7\x82\xb9\0" /* offset 10148 */
  30021   "\x35\xe7\x82\xb9\0" /* offset 10153 */
  30022   "\x36\xe7\x82\xb9\0" /* offset 10158 */
  30023   "\x37\xe7\x82\xb9\0" /* offset 10163 */
  30024   "\x38\xe7\x82\xb9\0" /* offset 10168 */
  30025   "\x39\xe7\x82\xb9\0" /* offset 10173 */
  30026   "\x31\x30\xe7\x82\xb9\0" /* offset 10178 */
  30027   "\x31\x31\xe7\x82\xb9\0" /* offset 10184 */
  30028   "\x31\x32\xe7\x82\xb9\0" /* offset 10190 */
  30029   "\x31\x33\xe7\x82\xb9\0" /* offset 10196 */
  30030   "\x31\x34\xe7\x82\xb9\0" /* offset 10202 */
  30031   "\x31\x35\xe7\x82\xb9\0" /* offset 10208 */
  30032   "\x31\x36\xe7\x82\xb9\0" /* offset 10214 */
  30033   "\x31\x37\xe7\x82\xb9\0" /* offset 10220 */
  30034   "\x31\x38\xe7\x82\xb9\0" /* offset 10226 */
  30035   "\x31\x39\xe7\x82\xb9\0" /* offset 10232 */
  30036   "\x32\x30\xe7\x82\xb9\0" /* offset 10238 */
  30037   "\x32\x31\xe7\x82\xb9\0" /* offset 10244 */
  30038   "\x32\x32\xe7\x82\xb9\0" /* offset 10250 */
  30039   "\x32\x33\xe7\x82\xb9\0" /* offset 10256 */
  30040   "\x32\x34\xe7\x82\xb9\0" /* offset 10262 */
  30041   "\x68\x50\x61\0" /* offset 10268 */
  30042   "\x64\x61\0" /* offset 10272 */
  30043   "\x41\x55\0" /* offset 10275 */
  30044   "\x62\x61\x72\0" /* offset 10278 */
  30045   "\x6f\x56\0" /* offset 10282 */
  30046   "\x70\x63\0" /* offset 10285 */
  30047   "\x64\x6d\0" /* offset 10288 */
  30048   "\x64\x6d\x32\0" /* offset 10291 */
  30049   "\x64\x6d\x33\0" /* offset 10295 */
  30050   "\x49\x55\0" /* offset 10299 */
  30051   "\xe5\xb9\xb3\xe6\x88\x90\0" /* offset 10302 */
  30052   "\xe6\x98\xad\xe5\x92\x8c\0" /* offset 10309 */
  30053   "\xe5\xa4\xa7\xe6\xad\xa3\0" /* offset 10316 */
  30054   "\xe6\x98\x8e\xe6\xb2\xbb\0" /* offset 10323 */
  30055   "\xe6\xa0\xaa\xe5\xbc\x8f\xe4\xbc\x9a\xe7\xa4\xbe\0" /* offset 10330 */
  30056   "\x70\x41\0" /* offset 10343 */
  30057   "\x6e\x41\0" /* offset 10346 */
  30058   "\xce\xbc\x41\0" /* offset 10349 */
  30059   "\x6d\x41\0" /* offset 10353 */
  30060   "\x6b\x41\0" /* offset 10356 */
  30061   "\x4b\x42\0" /* offset 10359 */
  30062   "\x4d\x42\0" /* offset 10362 */
  30063   "\x47\x42\0" /* offset 10365 */
  30064   "\x63\x61\x6c\0" /* offset 10368 */
  30065   "\x6b\x63\x61\x6c\0" /* offset 10372 */
  30066   "\x70\x46\0" /* offset 10377 */
  30067   "\x6e\x46\0" /* offset 10380 */
  30068   "\xce\xbc\x46\0" /* offset 10383 */
  30069   "\xce\xbc\x67\0" /* offset 10387 */
  30070   "\x6d\x67\0" /* offset 10391 */
  30071   "\x6b\x67\0" /* offset 10394 */
  30072   "\x48\x7a\0" /* offset 10397 */
  30073   "\x6b\x48\x7a\0" /* offset 10400 */
  30074   "\x4d\x48\x7a\0" /* offset 10404 */
  30075   "\x47\x48\x7a\0" /* offset 10408 */
  30076   "\x54\x48\x7a\0" /* offset 10412 */
  30077   "\xce\xbc\x6c\0" /* offset 10416 */
  30078   "\x6d\x6c\0" /* offset 10420 */
  30079   "\x64\x6c\0" /* offset 10423 */
  30080   "\x6b\x6c\0" /* offset 10426 */
  30081   "\x66\x6d\0" /* offset 10429 */
  30082   "\x6e\x6d\0" /* offset 10432 */
  30083   "\xce\xbc\x6d\0" /* offset 10435 */
  30084   "\x6d\x6d\0" /* offset 10439 */
  30085   "\x63\x6d\0" /* offset 10442 */
  30086   "\x6b\x6d\0" /* offset 10445 */
  30087   "\x6d\x6d\x32\0" /* offset 10448 */
  30088   "\x63\x6d\x32\0" /* offset 10452 */
  30089   "\x6d\x32\0" /* offset 10456 */
  30090   "\x6b\x6d\x32\0" /* offset 10459 */
  30091   "\x6d\x6d\x33\0" /* offset 10463 */
  30092   "\x63\x6d\x33\0" /* offset 10467 */
  30093   "\x6d\x33\0" /* offset 10471 */
  30094   "\x6b\x6d\x33\0" /* offset 10474 */
  30095   "\x6d\xe2\x88\x95\x73\0" /* offset 10478 */
  30096   "\x6d\xe2\x88\x95\x73\x32\0" /* offset 10484 */
  30097   "\x50\x61\0" /* offset 10491 */
  30098   "\x6b\x50\x61\0" /* offset 10494 */
  30099   "\x4d\x50\x61\0" /* offset 10498 */
  30100   "\x47\x50\x61\0" /* offset 10502 */
  30101   "\x72\x61\x64\0" /* offset 10506 */
  30102   "\x72\x61\x64\xe2\x88\x95\x73\0" /* offset 10510 */
  30103   "\x72\x61\x64\xe2\x88\x95\x73\x32\0" /* offset 10518 */
  30104   "\x70\x73\0" /* offset 10527 */
  30105   "\x6e\x73\0" /* offset 10530 */
  30106   "\xce\xbc\x73\0" /* offset 10533 */
  30107   "\x6d\x73\0" /* offset 10537 */
  30108   "\x70\x56\0" /* offset 10540 */
  30109   "\x6e\x56\0" /* offset 10543 */
  30110   "\xce\xbc\x56\0" /* offset 10546 */
  30111   "\x6d\x56\0" /* offset 10550 */
  30112   "\x6b\x56\0" /* offset 10553 */
  30113   "\x4d\x56\0" /* offset 10556 */
  30114   "\x70\x57\0" /* offset 10559 */
  30115   "\x6e\x57\0" /* offset 10562 */
  30116   "\xce\xbc\x57\0" /* offset 10565 */
  30117   "\x6d\x57\0" /* offset 10569 */
  30118   "\x6b\x57\0" /* offset 10572 */
  30119   "\x4d\x57\0" /* offset 10575 */
  30120   "\x6b\xce\xa9\0" /* offset 10578 */
  30121   "\x4d\xce\xa9\0" /* offset 10582 */
  30122   "\x61\x2e\x6d\x2e\0" /* offset 10586 */
  30123   "\x42\x71\0" /* offset 10591 */
  30124   "\x63\x63\0" /* offset 10594 */
  30125   "\x63\x64\0" /* offset 10597 */
  30126   "\x43\xe2\x88\x95\x6b\x67\0" /* offset 10600 */
  30127   "\x43\x6f\x2e\0" /* offset 10607 */
  30128   "\x64\x42\0" /* offset 10611 */
  30129   "\x47\x79\0" /* offset 10614 */
  30130   "\x68\x61\0" /* offset 10617 */
  30131   "\x48\x50\0" /* offset 10620 */
  30132   "\x69\x6e\0" /* offset 10623 */
  30133   "\x4b\x4b\0" /* offset 10626 */
  30134   "\x4b\x4d\0" /* offset 10629 */
  30135   "\x6b\x74\0" /* offset 10632 */
  30136   "\x6c\x6d\0" /* offset 10635 */
  30137   "\x6c\x6e\0" /* offset 10638 */
  30138   "\x6c\x6f\x67\0" /* offset 10641 */
  30139   "\x6c\x78\0" /* offset 10645 */
  30140   "\x6d\x62\0" /* offset 10648 */
  30141   "\x6d\x69\x6c\0" /* offset 10651 */
  30142   "\x6d\x6f\x6c\0" /* offset 10655 */
  30143   "\x50\x48\0" /* offset 10659 */
  30144   "\x70\x2e\x6d\x2e\0" /* offset 10662 */
  30145   "\x50\x50\x4d\0" /* offset 10667 */
  30146   "\x50\x52\0" /* offset 10671 */
  30147   "\x73\x72\0" /* offset 10674 */
  30148   "\x53\x76\0" /* offset 10677 */
  30149   "\x57\x62\0" /* offset 10680 */
  30150   "\x56\xe2\x88\x95\x6d\0" /* offset 10683 */
  30151   "\x41\xe2\x88\x95\x6d\0" /* offset 10689 */
  30152   "\x31\xe6\x97\xa5\0" /* offset 10695 */
  30153   "\x32\xe6\x97\xa5\0" /* offset 10700 */
  30154   "\x33\xe6\x97\xa5\0" /* offset 10705 */
  30155   "\x34\xe6\x97\xa5\0" /* offset 10710 */
  30156   "\x35\xe6\x97\xa5\0" /* offset 10715 */
  30157   "\x36\xe6\x97\xa5\0" /* offset 10720 */
  30158   "\x37\xe6\x97\xa5\0" /* offset 10725 */
  30159   "\x38\xe6\x97\xa5\0" /* offset 10730 */
  30160   "\x39\xe6\x97\xa5\0" /* offset 10735 */
  30161   "\x31\x30\xe6\x97\xa5\0" /* offset 10740 */
  30162   "\x31\x31\xe6\x97\xa5\0" /* offset 10746 */
  30163   "\x31\x32\xe6\x97\xa5\0" /* offset 10752 */
  30164   "\x31\x33\xe6\x97\xa5\0" /* offset 10758 */
  30165   "\x31\x34\xe6\x97\xa5\0" /* offset 10764 */
  30166   "\x31\x35\xe6\x97\xa5\0" /* offset 10770 */
  30167   "\x31\x36\xe6\x97\xa5\0" /* offset 10776 */
  30168   "\x31\x37\xe6\x97\xa5\0" /* offset 10782 */
  30169   "\x31\x38\xe6\x97\xa5\0" /* offset 10788 */
  30170   "\x31\x39\xe6\x97\xa5\0" /* offset 10794 */
  30171   "\x32\x30\xe6\x97\xa5\0" /* offset 10800 */
  30172   "\x32\x31\xe6\x97\xa5\0" /* offset 10806 */
  30173   "\x32\x32\xe6\x97\xa5\0" /* offset 10812 */
  30174   "\x32\x33\xe6\x97\xa5\0" /* offset 10818 */
  30175   "\x32\x34\xe6\x97\xa5\0" /* offset 10824 */
  30176   "\x32\x35\xe6\x97\xa5\0" /* offset 10830 */
  30177   "\x32\x36\xe6\x97\xa5\0" /* offset 10836 */
  30178   "\x32\x37\xe6\x97\xa5\0" /* offset 10842 */
  30179   "\x32\x38\xe6\x97\xa5\0" /* offset 10848 */
  30180   "\x32\x39\xe6\x97\xa5\0" /* offset 10854 */
  30181   "\x33\x30\xe6\x97\xa5\0" /* offset 10860 */
  30182   "\x33\x31\xe6\x97\xa5\0" /* offset 10866 */
  30183   "\x67\x61\x6c\0" /* offset 10872 */
  30184   "\xd1\x8a\0" /* offset 10876 */
  30185   "\xd1\x8c\0" /* offset 10879 */
  30186   "\xea\x9d\xaf\0" /* offset 10882 */
  30187   "\xc4\xa6\0" /* offset 10886 */
  30188   "\xc5\x93\0" /* offset 10889 */
  30189   "\xea\x9c\xa7\0" /* offset 10892 */
  30190   "\xea\xac\xb7\0" /* offset 10896 */
  30191   "\xc9\xab\0" /* offset 10900 */
  30192   "\xea\xad\x92\0" /* offset 10903 */
  30193   "\xe8\xb1\x88\0" /* offset 10907 */
  30194   "\xe6\x9b\xb4\0" /* offset 10911 */
  30195   "\xe8\xb3\x88\0" /* offset 10915 */
  30196   "\xe6\xbb\x91\0" /* offset 10919 */
  30197   "\xe4\xb8\xb2\0" /* offset 10923 */
  30198   "\xe5\x8f\xa5\0" /* offset 10927 */
  30199   "\xe5\xa5\x91\0" /* offset 10931 */
  30200   "\xe5\x96\x87\0" /* offset 10935 */
  30201   "\xe5\xa5\x88\0" /* offset 10939 */
  30202   "\xe6\x87\xb6\0" /* offset 10943 */
  30203   "\xe7\x99\xa9\0" /* offset 10947 */
  30204   "\xe7\xbe\x85\0" /* offset 10951 */
  30205   "\xe8\x98\xbf\0" /* offset 10955 */
  30206   "\xe8\x9e\xba\0" /* offset 10959 */
  30207   "\xe8\xa3\xb8\0" /* offset 10963 */
  30208   "\xe9\x82\x8f\0" /* offset 10967 */
  30209   "\xe6\xa8\x82\0" /* offset 10971 */
  30210   "\xe6\xb4\x9b\0" /* offset 10975 */
  30211   "\xe7\x83\x99\0" /* offset 10979 */
  30212   "\xe7\x8f\x9e\0" /* offset 10983 */
  30213   "\xe8\x90\xbd\0" /* offset 10987 */
  30214   "\xe9\x85\xaa\0" /* offset 10991 */
  30215   "\xe9\xa7\xb1\0" /* offset 10995 */
  30216   "\xe4\xba\x82\0" /* offset 10999 */
  30217   "\xe5\x8d\xb5\0" /* offset 11003 */
  30218   "\xe6\xac\x84\0" /* offset 11007 */
  30219   "\xe7\x88\x9b\0" /* offset 11011 */
  30220   "\xe8\x98\xad\0" /* offset 11015 */
  30221   "\xe9\xb8\x9e\0" /* offset 11019 */
  30222   "\xe5\xb5\x90\0" /* offset 11023 */
  30223   "\xe6\xbf\xab\0" /* offset 11027 */
  30224   "\xe8\x97\x8d\0" /* offset 11031 */
  30225   "\xe8\xa5\xa4\0" /* offset 11035 */
  30226   "\xe6\x8b\x89\0" /* offset 11039 */
  30227   "\xe8\x87\x98\0" /* offset 11043 */
  30228   "\xe8\xa0\x9f\0" /* offset 11047 */
  30229   "\xe5\xbb\x8a\0" /* offset 11051 */
  30230   "\xe6\x9c\x97\0" /* offset 11055 */
  30231   "\xe6\xb5\xaa\0" /* offset 11059 */
  30232   "\xe7\x8b\xbc\0" /* offset 11063 */
  30233   "\xe9\x83\x8e\0" /* offset 11067 */
  30234   "\xe4\xbe\x86\0" /* offset 11071 */
  30235   "\xe5\x86\xb7\0" /* offset 11075 */
  30236   "\xe5\x8b\x9e\0" /* offset 11079 */
  30237   "\xe6\x93\x84\0" /* offset 11083 */
  30238   "\xe6\xab\x93\0" /* offset 11087 */
  30239   "\xe7\x88\x90\0" /* offset 11091 */
  30240   "\xe7\x9b\xa7\0" /* offset 11095 */
  30241   "\xe8\x98\x86\0" /* offset 11099 */
  30242   "\xe8\x99\x9c\0" /* offset 11103 */
  30243   "\xe8\xb7\xaf\0" /* offset 11107 */
  30244   "\xe9\x9c\xb2\0" /* offset 11111 */
  30245   "\xe9\xad\xaf\0" /* offset 11115 */
  30246   "\xe9\xb7\xba\0" /* offset 11119 */
  30247   "\xe7\xa2\x8c\0" /* offset 11123 */
  30248   "\xe7\xa5\xbf\0" /* offset 11127 */
  30249   "\xe7\xb6\xa0\0" /* offset 11131 */
  30250   "\xe8\x8f\x89\0" /* offset 11135 */
  30251   "\xe9\x8c\x84\0" /* offset 11139 */
  30252   "\xe8\xab\x96\0" /* offset 11143 */
  30253   "\xe5\xa3\x9f\0" /* offset 11147 */
  30254   "\xe5\xbc\x84\0" /* offset 11151 */
  30255   "\xe7\xb1\xa0\0" /* offset 11155 */
  30256   "\xe8\x81\xbe\0" /* offset 11159 */
  30257   "\xe7\x89\xa2\0" /* offset 11163 */
  30258   "\xe7\xa3\x8a\0" /* offset 11167 */
  30259   "\xe8\xb3\x82\0" /* offset 11171 */
  30260   "\xe9\x9b\xb7\0" /* offset 11175 */
  30261   "\xe5\xa3\x98\0" /* offset 11179 */
  30262   "\xe5\xb1\xa2\0" /* offset 11183 */
  30263   "\xe6\xa8\x93\0" /* offset 11187 */
  30264   "\xe6\xb7\x9a\0" /* offset 11191 */
  30265   "\xe6\xbc\x8f\0" /* offset 11195 */
  30266   "\xe7\xb4\xaf\0" /* offset 11199 */
  30267   "\xe7\xb8\xb7\0" /* offset 11203 */
  30268   "\xe9\x99\x8b\0" /* offset 11207 */
  30269   "\xe5\x8b\x92\0" /* offset 11211 */
  30270   "\xe8\x82\x8b\0" /* offset 11215 */
  30271   "\xe5\x87\x9c\0" /* offset 11219 */
  30272   "\xe5\x87\x8c\0" /* offset 11223 */
  30273   "\xe7\xa8\x9c\0" /* offset 11227 */
  30274   "\xe7\xb6\xbe\0" /* offset 11231 */
  30275   "\xe8\x8f\xb1\0" /* offset 11235 */
  30276   "\xe9\x99\xb5\0" /* offset 11239 */
  30277   "\xe8\xae\x80\0" /* offset 11243 */
  30278   "\xe6\x8b\x8f\0" /* offset 11247 */
  30279   "\xe8\xab\xbe\0" /* offset 11251 */
  30280   "\xe4\xb8\xb9\0" /* offset 11255 */
  30281   "\xe5\xaf\xa7\0" /* offset 11259 */
  30282   "\xe6\x80\x92\0" /* offset 11263 */
  30283   "\xe7\x8e\x87\0" /* offset 11267 */
  30284   "\xe7\x95\xb0\0" /* offset 11271 */
  30285   "\xe5\x8c\x97\0" /* offset 11275 */
  30286   "\xe7\xa3\xbb\0" /* offset 11279 */
  30287   "\xe4\xbe\xbf\0" /* offset 11283 */
  30288   "\xe5\xbe\xa9\0" /* offset 11287 */
  30289   "\xe4\xb8\x8d\0" /* offset 11291 */
  30290   "\xe6\xb3\x8c\0" /* offset 11295 */
  30291   "\xe6\x95\xb8\0" /* offset 11299 */
  30292   "\xe7\xb4\xa2\0" /* offset 11303 */
  30293   "\xe5\x8f\x83\0" /* offset 11307 */
  30294   "\xe5\xa1\x9e\0" /* offset 11311 */
  30295   "\xe7\x9c\x81\0" /* offset 11315 */
  30296   "\xe8\x91\x89\0" /* offset 11319 */
  30297   "\xe8\xaa\xaa\0" /* offset 11323 */
  30298   "\xe6\xae\xba\0" /* offset 11327 */
  30299   "\xe6\xb2\x88\0" /* offset 11331 */
  30300   "\xe6\x8b\xbe\0" /* offset 11335 */
  30301   "\xe8\x8b\xa5\0" /* offset 11339 */
  30302   "\xe6\x8e\xa0\0" /* offset 11343 */
  30303   "\xe7\x95\xa5\0" /* offset 11347 */
  30304   "\xe4\xba\xae\0" /* offset 11351 */
  30305   "\xe5\x85\xa9\0" /* offset 11355 */
  30306   "\xe5\x87\x89\0" /* offset 11359 */
  30307   "\xe6\xa2\x81\0" /* offset 11363 */
  30308   "\xe7\xb3\xa7\0" /* offset 11367 */
  30309   "\xe8\x89\xaf\0" /* offset 11371 */
  30310   "\xe8\xab\x92\0" /* offset 11375 */
  30311   "\xe9\x87\x8f\0" /* offset 11379 */
  30312   "\xe5\x8b\xb5\0" /* offset 11383 */
  30313   "\xe5\x91\x82\0" /* offset 11387 */
  30314   "\xe5\xbb\xac\0" /* offset 11391 */
  30315   "\xe6\x97\x85\0" /* offset 11395 */
  30316   "\xe6\xbf\xbe\0" /* offset 11399 */
  30317   "\xe7\xa4\xaa\0" /* offset 11403 */
  30318   "\xe9\x96\xad\0" /* offset 11407 */
  30319   "\xe9\xa9\xaa\0" /* offset 11411 */
  30320   "\xe9\xba\x97\0" /* offset 11415 */
  30321   "\xe9\xbb\x8e\0" /* offset 11419 */
  30322   "\xe6\x9b\x86\0" /* offset 11423 */
  30323   "\xe6\xad\xb7\0" /* offset 11427 */
  30324   "\xe8\xbd\xa2\0" /* offset 11431 */
  30325   "\xe5\xb9\xb4\0" /* offset 11435 */
  30326   "\xe6\x86\x90\0" /* offset 11439 */
  30327   "\xe6\x88\x80\0" /* offset 11443 */
  30328   "\xe6\x92\x9a\0" /* offset 11447 */
  30329   "\xe6\xbc\xa3\0" /* offset 11451 */
  30330   "\xe7\x85\x89\0" /* offset 11455 */
  30331   "\xe7\x92\x89\0" /* offset 11459 */
  30332   "\xe7\xa7\x8a\0" /* offset 11463 */
  30333   "\xe7\xb7\xb4\0" /* offset 11467 */
  30334   "\xe8\x81\xaf\0" /* offset 11471 */
  30335   "\xe8\xbc\xa6\0" /* offset 11475 */
  30336   "\xe8\x93\xae\0" /* offset 11479 */
  30337   "\xe9\x80\xa3\0" /* offset 11483 */
  30338   "\xe9\x8d\x8a\0" /* offset 11487 */
  30339   "\xe5\x88\x97\0" /* offset 11491 */
  30340   "\xe5\x8a\xa3\0" /* offset 11495 */
  30341   "\xe5\x92\xbd\0" /* offset 11499 */
  30342   "\xe7\x83\x88\0" /* offset 11503 */
  30343   "\xe8\xa3\x82\0" /* offset 11507 */
  30344   "\xe5\xbb\x89\0" /* offset 11511 */
  30345   "\xe5\xbf\xb5\0" /* offset 11515 */
  30346   "\xe6\x8d\xbb\0" /* offset 11519 */
  30347   "\xe6\xae\xae\0" /* offset 11523 */
  30348   "\xe7\xb0\xbe\0" /* offset 11527 */
  30349   "\xe7\x8d\xb5\0" /* offset 11531 */
  30350   "\xe4\xbb\xa4\0" /* offset 11535 */
  30351   "\xe5\x9b\xb9\0" /* offset 11539 */
  30352   "\xe5\xb6\xba\0" /* offset 11543 */
  30353   "\xe6\x80\x9c\0" /* offset 11547 */
  30354   "\xe7\x8e\xb2\0" /* offset 11551 */
  30355   "\xe7\x91\xa9\0" /* offset 11555 */
  30356   "\xe7\xbe\x9a\0" /* offset 11559 */
  30357   "\xe8\x81\x86\0" /* offset 11563 */
  30358   "\xe9\x88\xb4\0" /* offset 11567 */
  30359   "\xe9\x9b\xb6\0" /* offset 11571 */
  30360   "\xe9\x9d\x88\0" /* offset 11575 */
  30361   "\xe9\xa0\x98\0" /* offset 11579 */
  30362   "\xe4\xbe\x8b\0" /* offset 11583 */
  30363   "\xe7\xa6\xae\0" /* offset 11587 */
  30364   "\xe9\x86\xb4\0" /* offset 11591 */
  30365   "\xe9\x9a\xb8\0" /* offset 11595 */
  30366   "\xe6\x83\xa1\0" /* offset 11599 */
  30367   "\xe4\xba\x86\0" /* offset 11603 */
  30368   "\xe5\x83\x9a\0" /* offset 11607 */
  30369   "\xe5\xaf\xae\0" /* offset 11611 */
  30370   "\xe5\xb0\xbf\0" /* offset 11615 */
  30371   "\xe6\x96\x99\0" /* offset 11619 */
  30372   "\xe7\x87\x8e\0" /* offset 11623 */
  30373   "\xe7\x99\x82\0" /* offset 11627 */
  30374   "\xe8\x93\xbc\0" /* offset 11631 */
  30375   "\xe9\x81\xbc\0" /* offset 11635 */
  30376   "\xe6\x9a\x88\0" /* offset 11639 */
  30377   "\xe9\x98\xae\0" /* offset 11643 */
  30378   "\xe5\x8a\x89\0" /* offset 11647 */
  30379   "\xe6\x9d\xbb\0" /* offset 11651 */
  30380   "\xe6\x9f\xb3\0" /* offset 11655 */
  30381   "\xe6\xb5\x81\0" /* offset 11659 */
  30382   "\xe6\xba\x9c\0" /* offset 11663 */
  30383   "\xe7\x90\x89\0" /* offset 11667 */
  30384   "\xe7\x95\x99\0" /* offset 11671 */
  30385   "\xe7\xa1\xab\0" /* offset 11675 */
  30386   "\xe7\xb4\x90\0" /* offset 11679 */
  30387   "\xe9\xa1\x9e\0" /* offset 11683 */
  30388   "\xe6\x88\xae\0" /* offset 11687 */
  30389   "\xe9\x99\xb8\0" /* offset 11691 */
  30390   "\xe5\x80\xab\0" /* offset 11695 */
  30391   "\xe5\xb4\x99\0" /* offset 11699 */
  30392   "\xe6\xb7\xaa\0" /* offset 11703 */
  30393   "\xe8\xbc\xaa\0" /* offset 11707 */
  30394   "\xe5\xbe\x8b\0" /* offset 11711 */
  30395   "\xe6\x85\x84\0" /* offset 11715 */
  30396   "\xe6\xa0\x97\0" /* offset 11719 */
  30397   "\xe9\x9a\x86\0" /* offset 11723 */
  30398   "\xe5\x88\xa9\0" /* offset 11727 */
  30399   "\xe5\x90\x8f\0" /* offset 11731 */
  30400   "\xe5\xb1\xa5\0" /* offset 11735 */
  30401   "\xe6\x98\x93\0" /* offset 11739 */
  30402   "\xe6\x9d\x8e\0" /* offset 11743 */
  30403   "\xe6\xa2\xa8\0" /* offset 11747 */
  30404   "\xe6\xb3\xa5\0" /* offset 11751 */
  30405   "\xe7\x90\x86\0" /* offset 11755 */
  30406   "\xe7\x97\xa2\0" /* offset 11759 */
  30407   "\xe7\xbd\xb9\0" /* offset 11763 */
  30408   "\xe8\xa3\x8f\0" /* offset 11767 */
  30409   "\xe8\xa3\xa1\0" /* offset 11771 */
  30410   "\xe9\x9b\xa2\0" /* offset 11775 */
  30411   "\xe5\x8c\xbf\0" /* offset 11779 */
  30412   "\xe6\xba\xba\0" /* offset 11783 */
  30413   "\xe5\x90\x9d\0" /* offset 11787 */
  30414   "\xe7\x87\x90\0" /* offset 11791 */
  30415   "\xe7\x92\x98\0" /* offset 11795 */
  30416   "\xe8\x97\xba\0" /* offset 11799 */
  30417   "\xe9\x9a\xa3\0" /* offset 11803 */
  30418   "\xe9\xb1\x97\0" /* offset 11807 */
  30419   "\xe9\xba\x9f\0" /* offset 11811 */
  30420   "\xe6\x9e\x97\0" /* offset 11815 */
  30421   "\xe6\xb7\x8b\0" /* offset 11819 */
  30422   "\xe8\x87\xa8\0" /* offset 11823 */
  30423   "\xe7\xac\xa0\0" /* offset 11827 */
  30424   "\xe7\xb2\x92\0" /* offset 11831 */
  30425   "\xe7\x8b\x80\0" /* offset 11835 */
  30426   "\xe7\x82\x99\0" /* offset 11839 */
  30427   "\xe8\xad\x98\0" /* offset 11843 */
  30428   "\xe4\xbb\x80\0" /* offset 11847 */
  30429   "\xe8\x8c\xb6\0" /* offset 11851 */
  30430   "\xe5\x88\xba\0" /* offset 11855 */
  30431   "\xe5\x88\x87\0" /* offset 11859 */
  30432   "\xe5\xba\xa6\0" /* offset 11863 */
  30433   "\xe6\x8b\x93\0" /* offset 11867 */
  30434   "\xe7\xb3\x96\0" /* offset 11871 */
  30435   "\xe5\xae\x85\0" /* offset 11875 */
  30436   "\xe6\xb4\x9e\0" /* offset 11879 */
  30437   "\xe6\x9a\xb4\0" /* offset 11883 */
  30438   "\xe8\xbc\xbb\0" /* offset 11887 */
  30439   "\xe9\x99\x8d\0" /* offset 11891 */
  30440   "\xe5\xbb\x93\0" /* offset 11895 */
  30441   "\xe5\x85\x80\0" /* offset 11899 */
  30442   "\xe5\x97\x80\0" /* offset 11903 */
  30443   "\xe5\xa1\x9a\0" /* offset 11907 */
  30444   "\xe6\x99\xb4\0" /* offset 11911 */
  30445   "\xe5\x87\x9e\0" /* offset 11915 */
  30446   "\xe7\x8c\xaa\0" /* offset 11919 */
  30447   "\xe7\x9b\x8a\0" /* offset 11923 */
  30448   "\xe7\xa4\xbc\0" /* offset 11927 */
  30449   "\xe7\xa5\x9e\0" /* offset 11931 */
  30450   "\xe7\xa5\xa5\0" /* offset 11935 */
  30451   "\xe7\xa6\x8f\0" /* offset 11939 */
  30452   "\xe9\x9d\x96\0" /* offset 11943 */
  30453   "\xe7\xb2\xbe\0" /* offset 11947 */
  30454   "\xe8\x98\x92\0" /* offset 11951 */
  30455   "\xe8\xab\xb8\0" /* offset 11955 */
  30456   "\xe9\x80\xb8\0" /* offset 11959 */
  30457   "\xe9\x83\xbd\0" /* offset 11963 */
  30458   "\xe9\xa3\xaf\0" /* offset 11967 */
  30459   "\xe9\xa3\xbc\0" /* offset 11971 */
  30460   "\xe9\xa4\xa8\0" /* offset 11975 */
  30461   "\xe9\xb6\xb4\0" /* offset 11979 */
  30462   "\xe9\x83\x9e\0" /* offset 11983 */
  30463   "\xe9\x9a\xb7\0" /* offset 11987 */
  30464   "\xe4\xbe\xae\0" /* offset 11991 */
  30465   "\xe5\x83\xa7\0" /* offset 11995 */
  30466   "\xe5\x85\x8d\0" /* offset 11999 */
  30467   "\xe5\x8b\x89\0" /* offset 12003 */
  30468   "\xe5\x8b\xa4\0" /* offset 12007 */
  30469   "\xe5\x8d\x91\0" /* offset 12011 */
  30470   "\xe5\x96\x9d\0" /* offset 12015 */
  30471   "\xe5\x98\x86\0" /* offset 12019 */
  30472   "\xe5\x99\xa8\0" /* offset 12023 */
  30473   "\xe5\xa1\x80\0" /* offset 12027 */
  30474   "\xe5\xa2\xa8\0" /* offset 12031 */
  30475   "\xe5\xb1\xa4\0" /* offset 12035 */
  30476   "\xe6\x82\x94\0" /* offset 12039 */
  30477   "\xe6\x85\xa8\0" /* offset 12043 */
  30478   "\xe6\x86\x8e\0" /* offset 12047 */
  30479   "\xe6\x87\xb2\0" /* offset 12051 */
  30480   "\xe6\x95\x8f\0" /* offset 12055 */
  30481   "\xe6\x97\xa2\0" /* offset 12059 */
  30482   "\xe6\x9a\x91\0" /* offset 12063 */
  30483   "\xe6\xa2\x85\0" /* offset 12067 */
  30484   "\xe6\xb5\xb7\0" /* offset 12071 */
  30485   "\xe6\xb8\x9a\0" /* offset 12075 */
  30486   "\xe6\xbc\xa2\0" /* offset 12079 */
  30487   "\xe7\x85\xae\0" /* offset 12083 */
  30488   "\xe7\x88\xab\0" /* offset 12087 */
  30489   "\xe7\x90\xa2\0" /* offset 12091 */
  30490   "\xe7\xa2\x91\0" /* offset 12095 */
  30491   "\xe7\xa5\x89\0" /* offset 12099 */
  30492   "\xe7\xa5\x88\0" /* offset 12103 */
  30493   "\xe7\xa5\x90\0" /* offset 12107 */
  30494   "\xe7\xa5\x96\0" /* offset 12111 */
  30495   "\xe7\xa6\x8d\0" /* offset 12115 */
  30496   "\xe7\xa6\x8e\0" /* offset 12119 */
  30497   "\xe7\xa9\x80\0" /* offset 12123 */
  30498   "\xe7\xaa\x81\0" /* offset 12127 */
  30499   "\xe7\xaf\x80\0" /* offset 12131 */
  30500   "\xe7\xb8\x89\0" /* offset 12135 */
  30501   "\xe7\xb9\x81\0" /* offset 12139 */
  30502   "\xe7\xbd\xb2\0" /* offset 12143 */
  30503   "\xe8\x80\x85\0" /* offset 12147 */
  30504   "\xe8\x87\xad\0" /* offset 12151 */
  30505   "\xe8\x89\xb9\0" /* offset 12155 */
  30506   "\xe8\x91\x97\0" /* offset 12159 */
  30507   "\xe8\xa4\x90\0" /* offset 12163 */
  30508   "\xe8\xa6\x96\0" /* offset 12167 */
  30509   "\xe8\xac\x81\0" /* offset 12171 */
  30510   "\xe8\xac\xb9\0" /* offset 12175 */
  30511   "\xe8\xb3\x93\0" /* offset 12179 */
  30512   "\xe8\xb4\x88\0" /* offset 12183 */
  30513   "\xe8\xbe\xb6\0" /* offset 12187 */
  30514   "\xe9\x9b\xa3\0" /* offset 12191 */
  30515   "\xe9\x9f\xbf\0" /* offset 12195 */
  30516   "\xe9\xa0\xbb\0" /* offset 12199 */
  30517   "\xe6\x81\xb5\0" /* offset 12203 */
  30518   "\xf0\xa4\x8b\xae\0" /* offset 12207 */
  30519   "\xe8\x88\x98\0" /* offset 12212 */
  30520   "\xe4\xb8\xa6\0" /* offset 12216 */
  30521   "\xe5\x86\xb5\0" /* offset 12220 */
  30522   "\xe5\x85\xa8\0" /* offset 12224 */
  30523   "\xe4\xbe\x80\0" /* offset 12228 */
  30524   "\xe5\x85\x85\0" /* offset 12232 */
  30525   "\xe5\x86\x80\0" /* offset 12236 */
  30526   "\xe5\x8b\x87\0" /* offset 12240 */
  30527   "\xe5\x8b\xba\0" /* offset 12244 */
  30528   "\xe5\x95\x95\0" /* offset 12248 */
  30529   "\xe5\x96\x99\0" /* offset 12252 */
  30530   "\xe5\x97\xa2\0" /* offset 12256 */
  30531   "\xe5\xa2\xb3\0" /* offset 12260 */
  30532   "\xe5\xa5\x84\0" /* offset 12264 */
  30533   "\xe5\xa5\x94\0" /* offset 12268 */
  30534   "\xe5\xa9\xa2\0" /* offset 12272 */
  30535   "\xe5\xac\xa8\0" /* offset 12276 */
  30536   "\xe5\xbb\x92\0" /* offset 12280 */
  30537   "\xe5\xbb\x99\0" /* offset 12284 */
  30538   "\xe5\xbd\xa9\0" /* offset 12288 */
  30539   "\xe5\xbe\xad\0" /* offset 12292 */
  30540   "\xe6\x83\x98\0" /* offset 12296 */
  30541   "\xe6\x85\x8e\0" /* offset 12300 */
  30542   "\xe6\x84\x88\0" /* offset 12304 */
  30543   "\xe6\x85\xa0\0" /* offset 12308 */
  30544   "\xe6\x88\xb4\0" /* offset 12312 */
  30545   "\xe6\x8f\x84\0" /* offset 12316 */
  30546   "\xe6\x90\x9c\0" /* offset 12320 */
  30547   "\xe6\x91\x92\0" /* offset 12324 */
  30548   "\xe6\x95\x96\0" /* offset 12328 */
  30549   "\xe6\x9c\x9b\0" /* offset 12332 */
  30550   "\xe6\x9d\x96\0" /* offset 12336 */
  30551   "\xe6\xbb\x9b\0" /* offset 12340 */
  30552   "\xe6\xbb\x8b\0" /* offset 12344 */
  30553   "\xe7\x80\x9e\0" /* offset 12348 */
  30554   "\xe7\x9e\xa7\0" /* offset 12352 */
  30555   "\xe7\x88\xb5\0" /* offset 12356 */
  30556   "\xe7\x8a\xaf\0" /* offset 12360 */
  30557   "\xe7\x91\xb1\0" /* offset 12364 */
  30558   "\xe7\x94\x86\0" /* offset 12368 */
  30559   "\xe7\x94\xbb\0" /* offset 12372 */
  30560   "\xe7\x98\x9d\0" /* offset 12376 */
  30561   "\xe7\x98\x9f\0" /* offset 12380 */
  30562   "\xe7\x9b\x9b\0" /* offset 12384 */
  30563   "\xe7\x9b\xb4\0" /* offset 12388 */
  30564   "\xe7\x9d\x8a\0" /* offset 12392 */
  30565   "\xe7\x9d\x80\0" /* offset 12396 */
  30566   "\xe7\xa3\x8c\0" /* offset 12400 */
  30567   "\xe7\xaa\xb1\0" /* offset 12404 */
  30568   "\xe7\xb1\xbb\0" /* offset 12408 */
  30569   "\xe7\xb5\x9b\0" /* offset 12412 */
  30570   "\xe7\xbc\xbe\0" /* offset 12416 */
  30571   "\xe8\x8d\x92\0" /* offset 12420 */
  30572   "\xe8\x8f\xaf\0" /* offset 12424 */
  30573   "\xe8\x9d\xb9\0" /* offset 12428 */
  30574   "\xe8\xa5\x81\0" /* offset 12432 */
  30575   "\xe8\xa6\x86\0" /* offset 12436 */
  30576   "\xe8\xaa\xbf\0" /* offset 12440 */
  30577   "\xe8\xab\x8b\0" /* offset 12444 */
  30578   "\xe8\xab\xad\0" /* offset 12448 */
  30579   "\xe8\xae\x8a\0" /* offset 12452 */
  30580   "\xe8\xbc\xb8\0" /* offset 12456 */
  30581   "\xe9\x81\xb2\0" /* offset 12460 */
  30582   "\xe9\x86\x99\0" /* offset 12464 */
  30583   "\xe9\x89\xb6\0" /* offset 12468 */
  30584   "\xe9\x99\xbc\0" /* offset 12472 */
  30585   "\xe9\x9f\x9b\0" /* offset 12476 */
  30586   "\xe9\xa0\x8b\0" /* offset 12480 */
  30587   "\xe9\xac\x92\0" /* offset 12484 */
  30588   "\xf0\xa2\xa1\x8a\0" /* offset 12488 */
  30589   "\xf0\xa2\xa1\x84\0" /* offset 12493 */
  30590   "\xf0\xa3\x8f\x95\0" /* offset 12498 */
  30591   "\xe3\xae\x9d\0" /* offset 12503 */
  30592   "\xe4\x80\x98\0" /* offset 12507 */
  30593   "\xe4\x80\xb9\0" /* offset 12511 */
  30594   "\xf0\xa5\x89\x89\0" /* offset 12515 */
  30595   "\xf0\xa5\xb3\x90\0" /* offset 12520 */
  30596   "\xf0\xa7\xbb\x93\0" /* offset 12525 */
  30597   "\xe9\xbd\x83\0" /* offset 12530 */
  30598   "\xe9\xbe\x8e\0" /* offset 12534 */
  30599   "\x66\x66\0" /* offset 12538 */
  30600   "\x66\x69\0" /* offset 12541 */
  30601   "\x66\x6c\0" /* offset 12544 */
  30602   "\x66\x66\x69\0" /* offset 12547 */
  30603   "\x66\x66\x6c\0" /* offset 12551 */
  30604   "\x73\x74\0" /* offset 12555 */
  30605   "\xd5\xb4\xd5\xb6\0" /* offset 12558 */
  30606   "\xd5\xb4\xd5\xa5\0" /* offset 12563 */
  30607   "\xd5\xb4\xd5\xab\0" /* offset 12568 */
  30608   "\xd5\xbe\xd5\xb6\0" /* offset 12573 */
  30609   "\xd5\xb4\xd5\xad\0" /* offset 12578 */
  30610   "\xd7\x99\xd6\xb4\0" /* offset 12583 */
  30611   "\xd7\xb2\xd6\xb7\0" /* offset 12588 */
  30612   "\xd7\xa2\0" /* offset 12593 */
  30613   "\xd7\x94\0" /* offset 12596 */
  30614   "\xd7\x9b\0" /* offset 12599 */
  30615   "\xd7\x9c\0" /* offset 12602 */
  30616   "\xd7\x9d\0" /* offset 12605 */
  30617   "\xd7\xa8\0" /* offset 12608 */
  30618   "\xd7\xaa\0" /* offset 12611 */
  30619   "\xd7\xa9\xd7\x81\0" /* offset 12614 */
  30620   "\xd7\xa9\xd7\x82\0" /* offset 12619 */
  30621   "\xd7\xa9\xd6\xbc\xd7\x81\0" /* offset 12624 */
  30622   "\xd7\xa9\xd6\xbc\xd7\x82\0" /* offset 12631 */
  30623   "\xd7\x90\xd6\xb7\0" /* offset 12638 */
  30624   "\xd7\x90\xd6\xb8\0" /* offset 12643 */
  30625   "\xd7\x90\xd6\xbc\0" /* offset 12648 */
  30626   "\xd7\x91\xd6\xbc\0" /* offset 12653 */
  30627   "\xd7\x92\xd6\xbc\0" /* offset 12658 */
  30628   "\xd7\x93\xd6\xbc\0" /* offset 12663 */
  30629   "\xd7\x94\xd6\xbc\0" /* offset 12668 */
  30630   "\xd7\x95\xd6\xbc\0" /* offset 12673 */
  30631   "\xd7\x96\xd6\xbc\0" /* offset 12678 */
  30632   "\xd7\x98\xd6\xbc\0" /* offset 12683 */
  30633   "\xd7\x99\xd6\xbc\0" /* offset 12688 */
  30634   "\xd7\x9a\xd6\xbc\0" /* offset 12693 */
  30635   "\xd7\x9b\xd6\xbc\0" /* offset 12698 */
  30636   "\xd7\x9c\xd6\xbc\0" /* offset 12703 */
  30637   "\xd7\x9e\xd6\xbc\0" /* offset 12708 */
  30638   "\xd7\xa0\xd6\xbc\0" /* offset 12713 */
  30639   "\xd7\xa1\xd6\xbc\0" /* offset 12718 */
  30640   "\xd7\xa3\xd6\xbc\0" /* offset 12723 */
  30641   "\xd7\xa4\xd6\xbc\0" /* offset 12728 */
  30642   "\xd7\xa6\xd6\xbc\0" /* offset 12733 */
  30643   "\xd7\xa7\xd6\xbc\0" /* offset 12738 */
  30644   "\xd7\xa8\xd6\xbc\0" /* offset 12743 */
  30645   "\xd7\xa9\xd6\xbc\0" /* offset 12748 */
  30646   "\xd7\xaa\xd6\xbc\0" /* offset 12753 */
  30647   "\xd7\x95\xd6\xb9\0" /* offset 12758 */
  30648   "\xd7\x91\xd6\xbf\0" /* offset 12763 */
  30649   "\xd7\x9b\xd6\xbf\0" /* offset 12768 */
  30650   "\xd7\xa4\xd6\xbf\0" /* offset 12773 */
  30651   "\xd7\x90\xd7\x9c\0" /* offset 12778 */
  30652   "\xd9\xb1\0" /* offset 12783 */
  30653   "\xd9\xbb\0" /* offset 12786 */
  30654   "\xd9\xbe\0" /* offset 12789 */
  30655   "\xda\x80\0" /* offset 12792 */
  30656   "\xd9\xba\0" /* offset 12795 */
  30657   "\xd9\xbf\0" /* offset 12798 */
  30658   "\xd9\xb9\0" /* offset 12801 */
  30659   "\xda\xa4\0" /* offset 12804 */
  30660   "\xda\xa6\0" /* offset 12807 */
  30661   "\xda\x84\0" /* offset 12810 */
  30662   "\xda\x83\0" /* offset 12813 */
  30663   "\xda\x86\0" /* offset 12816 */
  30664   "\xda\x87\0" /* offset 12819 */
  30665   "\xda\x8d\0" /* offset 12822 */
  30666   "\xda\x8c\0" /* offset 12825 */
  30667   "\xda\x8e\0" /* offset 12828 */
  30668   "\xda\x88\0" /* offset 12831 */
  30669   "\xda\x98\0" /* offset 12834 */
  30670   "\xda\x91\0" /* offset 12837 */
  30671   "\xda\xa9\0" /* offset 12840 */
  30672   "\xda\xaf\0" /* offset 12843 */
  30673   "\xda\xb3\0" /* offset 12846 */
  30674   "\xda\xb1\0" /* offset 12849 */
  30675   "\xda\xba\0" /* offset 12852 */
  30676   "\xda\xbb\0" /* offset 12855 */
  30677   "\xdb\x81\0" /* offset 12858 */
  30678   "\xda\xbe\0" /* offset 12861 */
  30679   "\xdb\x92\0" /* offset 12864 */
  30680   "\xda\xad\0" /* offset 12867 */
  30681   "\xdb\x87\0" /* offset 12870 */
  30682   "\xdb\x86\0" /* offset 12873 */
  30683   "\xdb\x88\0" /* offset 12876 */
  30684   "\xdb\x8b\0" /* offset 12879 */
  30685   "\xdb\x85\0" /* offset 12882 */
  30686   "\xdb\x89\0" /* offset 12885 */
  30687   "\xdb\x90\0" /* offset 12888 */
  30688   "\xd9\x89\0" /* offset 12891 */
  30689   "\xd9\x8a\xd9\x94\xd8\xa7\0" /* offset 12894 */
  30690   "\xd9\x8a\xd9\x94\xdb\x95\0" /* offset 12901 */
  30691   "\xd9\x8a\xd9\x94\xd9\x88\0" /* offset 12908 */
  30692   "\xd9\x8a\xd9\x94\xdb\x87\0" /* offset 12915 */
  30693   "\xd9\x8a\xd9\x94\xdb\x86\0" /* offset 12922 */
  30694   "\xd9\x8a\xd9\x94\xdb\x88\0" /* offset 12929 */
  30695   "\xd9\x8a\xd9\x94\xdb\x90\0" /* offset 12936 */
  30696   "\xd9\x8a\xd9\x94\xd9\x89\0" /* offset 12943 */
  30697   "\xdb\x8c\0" /* offset 12950 */
  30698   "\xd9\x8a\xd9\x94\xd8\xac\0" /* offset 12953 */
  30699   "\xd9\x8a\xd9\x94\xd8\xad\0" /* offset 12960 */
  30700   "\xd9\x8a\xd9\x94\xd9\x85\0" /* offset 12967 */
  30701   "\xd9\x8a\xd9\x94\xd9\x8a\0" /* offset 12974 */
  30702   "\xd8\xa8\xd8\xac\0" /* offset 12981 */
  30703   "\xd8\xa8\xd8\xad\0" /* offset 12986 */
  30704   "\xd8\xa8\xd8\xae\0" /* offset 12991 */
  30705   "\xd8\xa8\xd9\x85\0" /* offset 12996 */
  30706   "\xd8\xa8\xd9\x89\0" /* offset 13001 */
  30707   "\xd8\xa8\xd9\x8a\0" /* offset 13006 */
  30708   "\xd8\xaa\xd8\xac\0" /* offset 13011 */
  30709   "\xd8\xaa\xd8\xad\0" /* offset 13016 */
  30710   "\xd8\xaa\xd8\xae\0" /* offset 13021 */
  30711   "\xd8\xaa\xd9\x85\0" /* offset 13026 */
  30712   "\xd8\xaa\xd9\x89\0" /* offset 13031 */
  30713   "\xd8\xaa\xd9\x8a\0" /* offset 13036 */
  30714   "\xd8\xab\xd8\xac\0" /* offset 13041 */
  30715   "\xd8\xab\xd9\x85\0" /* offset 13046 */
  30716   "\xd8\xab\xd9\x89\0" /* offset 13051 */
  30717   "\xd8\xab\xd9\x8a\0" /* offset 13056 */
  30718   "\xd8\xac\xd8\xad\0" /* offset 13061 */
  30719   "\xd8\xac\xd9\x85\0" /* offset 13066 */
  30720   "\xd8\xad\xd8\xac\0" /* offset 13071 */
  30721   "\xd8\xad\xd9\x85\0" /* offset 13076 */
  30722   "\xd8\xae\xd8\xac\0" /* offset 13081 */
  30723   "\xd8\xae\xd8\xad\0" /* offset 13086 */
  30724   "\xd8\xae\xd9\x85\0" /* offset 13091 */
  30725   "\xd8\xb3\xd8\xac\0" /* offset 13096 */
  30726   "\xd8\xb3\xd8\xad\0" /* offset 13101 */
  30727   "\xd8\xb3\xd8\xae\0" /* offset 13106 */
  30728   "\xd8\xb3\xd9\x85\0" /* offset 13111 */
  30729   "\xd8\xb5\xd8\xad\0" /* offset 13116 */
  30730   "\xd8\xb5\xd9\x85\0" /* offset 13121 */
  30731   "\xd8\xb6\xd8\xac\0" /* offset 13126 */
  30732   "\xd8\xb6\xd8\xad\0" /* offset 13131 */
  30733   "\xd8\xb6\xd8\xae\0" /* offset 13136 */
  30734   "\xd8\xb6\xd9\x85\0" /* offset 13141 */
  30735   "\xd8\xb7\xd8\xad\0" /* offset 13146 */
  30736   "\xd8\xb7\xd9\x85\0" /* offset 13151 */
  30737   "\xd8\xb8\xd9\x85\0" /* offset 13156 */
  30738   "\xd8\xb9\xd8\xac\0" /* offset 13161 */
  30739   "\xd8\xb9\xd9\x85\0" /* offset 13166 */
  30740   "\xd8\xba\xd8\xac\0" /* offset 13171 */
  30741   "\xd8\xba\xd9\x85\0" /* offset 13176 */
  30742   "\xd9\x81\xd8\xac\0" /* offset 13181 */
  30743   "\xd9\x81\xd8\xad\0" /* offset 13186 */
  30744   "\xd9\x81\xd8\xae\0" /* offset 13191 */
  30745   "\xd9\x81\xd9\x85\0" /* offset 13196 */
  30746   "\xd9\x81\xd9\x89\0" /* offset 13201 */
  30747   "\xd9\x81\xd9\x8a\0" /* offset 13206 */
  30748   "\xd9\x82\xd8\xad\0" /* offset 13211 */
  30749   "\xd9\x82\xd9\x85\0" /* offset 13216 */
  30750   "\xd9\x82\xd9\x89\0" /* offset 13221 */
  30751   "\xd9\x82\xd9\x8a\0" /* offset 13226 */
  30752   "\xd9\x83\xd8\xa7\0" /* offset 13231 */
  30753   "\xd9\x83\xd8\xac\0" /* offset 13236 */
  30754   "\xd9\x83\xd8\xad\0" /* offset 13241 */
  30755   "\xd9\x83\xd8\xae\0" /* offset 13246 */
  30756   "\xd9\x83\xd9\x84\0" /* offset 13251 */
  30757   "\xd9\x83\xd9\x85\0" /* offset 13256 */
  30758   "\xd9\x83\xd9\x89\0" /* offset 13261 */
  30759   "\xd9\x83\xd9\x8a\0" /* offset 13266 */
  30760   "\xd9\x84\xd8\xac\0" /* offset 13271 */
  30761   "\xd9\x84\xd8\xad\0" /* offset 13276 */
  30762   "\xd9\x84\xd8\xae\0" /* offset 13281 */
  30763   "\xd9\x84\xd9\x85\0" /* offset 13286 */
  30764   "\xd9\x84\xd9\x89\0" /* offset 13291 */
  30765   "\xd9\x84\xd9\x8a\0" /* offset 13296 */
  30766   "\xd9\x85\xd8\xac\0" /* offset 13301 */
  30767   "\xd9\x85\xd8\xad\0" /* offset 13306 */
  30768   "\xd9\x85\xd8\xae\0" /* offset 13311 */
  30769   "\xd9\x85\xd9\x85\0" /* offset 13316 */
  30770   "\xd9\x85\xd9\x89\0" /* offset 13321 */
  30771   "\xd9\x85\xd9\x8a\0" /* offset 13326 */
  30772   "\xd9\x86\xd8\xac\0" /* offset 13331 */
  30773   "\xd9\x86\xd8\xad\0" /* offset 13336 */
  30774   "\xd9\x86\xd8\xae\0" /* offset 13341 */
  30775   "\xd9\x86\xd9\x85\0" /* offset 13346 */
  30776   "\xd9\x86\xd9\x89\0" /* offset 13351 */
  30777   "\xd9\x86\xd9\x8a\0" /* offset 13356 */
  30778   "\xd9\x87\xd8\xac\0" /* offset 13361 */
  30779   "\xd9\x87\xd9\x85\0" /* offset 13366 */
  30780   "\xd9\x87\xd9\x89\0" /* offset 13371 */
  30781   "\xd9\x87\xd9\x8a\0" /* offset 13376 */
  30782   "\xd9\x8a\xd8\xac\0" /* offset 13381 */
  30783   "\xd9\x8a\xd8\xad\0" /* offset 13386 */
  30784   "\xd9\x8a\xd8\xae\0" /* offset 13391 */
  30785   "\xd9\x8a\xd9\x85\0" /* offset 13396 */
  30786   "\xd9\x8a\xd9\x89\0" /* offset 13401 */
  30787   "\xd9\x8a\xd9\x8a\0" /* offset 13406 */
  30788   "\xd8\xb0\xd9\xb0\0" /* offset 13411 */
  30789   "\xd8\xb1\xd9\xb0\0" /* offset 13416 */
  30790   "\xd9\x89\xd9\xb0\0" /* offset 13421 */
  30791   "\x20\xd9\x8c\xd9\x91\0" /* offset 13426 */
  30792   "\x20\xd9\x8d\xd9\x91\0" /* offset 13432 */
  30793   "\x20\xd9\x8e\xd9\x91\0" /* offset 13438 */
  30794   "\x20\xd9\x8f\xd9\x91\0" /* offset 13444 */
  30795   "\x20\xd9\x90\xd9\x91\0" /* offset 13450 */
  30796   "\x20\xd9\x91\xd9\xb0\0" /* offset 13456 */
  30797   "\xd9\x8a\xd9\x94\xd8\xb1\0" /* offset 13462 */
  30798   "\xd9\x8a\xd9\x94\xd8\xb2\0" /* offset 13469 */
  30799   "\xd9\x8a\xd9\x94\xd9\x86\0" /* offset 13476 */
  30800   "\xd8\xa8\xd8\xb1\0" /* offset 13483 */
  30801   "\xd8\xa8\xd8\xb2\0" /* offset 13488 */
  30802   "\xd8\xa8\xd9\x86\0" /* offset 13493 */
  30803   "\xd8\xaa\xd8\xb1\0" /* offset 13498 */
  30804   "\xd8\xaa\xd8\xb2\0" /* offset 13503 */
  30805   "\xd8\xaa\xd9\x86\0" /* offset 13508 */
  30806   "\xd8\xab\xd8\xb1\0" /* offset 13513 */
  30807   "\xd8\xab\xd8\xb2\0" /* offset 13518 */
  30808   "\xd8\xab\xd9\x86\0" /* offset 13523 */
  30809   "\xd9\x85\xd8\xa7\0" /* offset 13528 */
  30810   "\xd9\x86\xd8\xb1\0" /* offset 13533 */
  30811   "\xd9\x86\xd8\xb2\0" /* offset 13538 */
  30812   "\xd9\x86\xd9\x86\0" /* offset 13543 */
  30813   "\xd9\x8a\xd8\xb1\0" /* offset 13548 */
  30814   "\xd9\x8a\xd8\xb2\0" /* offset 13553 */
  30815   "\xd9\x8a\xd9\x86\0" /* offset 13558 */
  30816   "\xd9\x8a\xd9\x94\xd8\xae\0" /* offset 13563 */
  30817   "\xd9\x8a\xd9\x94\xd9\x87\0" /* offset 13570 */
  30818   "\xd8\xa8\xd9\x87\0" /* offset 13577 */
  30819   "\xd8\xaa\xd9\x87\0" /* offset 13582 */
  30820   "\xd8\xb5\xd8\xae\0" /* offset 13587 */
  30821   "\xd9\x84\xd9\x87\0" /* offset 13592 */
  30822   "\xd9\x86\xd9\x87\0" /* offset 13597 */
  30823   "\xd9\x87\xd9\xb0\0" /* offset 13602 */
  30824   "\xd9\x8a\xd9\x87\0" /* offset 13607 */
  30825   "\xd8\xab\xd9\x87\0" /* offset 13612 */
  30826   "\xd8\xb3\xd9\x87\0" /* offset 13617 */
  30827   "\xd8\xb4\xd9\x85\0" /* offset 13622 */
  30828   "\xd8\xb4\xd9\x87\0" /* offset 13627 */
  30829   "\xd9\x80\xd9\x8e\xd9\x91\0" /* offset 13632 */
  30830   "\xd9\x80\xd9\x8f\xd9\x91\0" /* offset 13639 */
  30831   "\xd9\x80\xd9\x90\xd9\x91\0" /* offset 13646 */
  30832   "\xd8\xb7\xd9\x89\0" /* offset 13653 */
  30833   "\xd8\xb7\xd9\x8a\0" /* offset 13658 */
  30834   "\xd8\xb9\xd9\x89\0" /* offset 13663 */
  30835   "\xd8\xb9\xd9\x8a\0" /* offset 13668 */
  30836   "\xd8\xba\xd9\x89\0" /* offset 13673 */
  30837   "\xd8\xba\xd9\x8a\0" /* offset 13678 */
  30838   "\xd8\xb3\xd9\x89\0" /* offset 13683 */
  30839   "\xd8\xb3\xd9\x8a\0" /* offset 13688 */
  30840   "\xd8\xb4\xd9\x89\0" /* offset 13693 */
  30841   "\xd8\xb4\xd9\x8a\0" /* offset 13698 */
  30842   "\xd8\xad\xd9\x89\0" /* offset 13703 */
  30843   "\xd8\xad\xd9\x8a\0" /* offset 13708 */
  30844   "\xd8\xac\xd9\x89\0" /* offset 13713 */
  30845   "\xd8\xac\xd9\x8a\0" /* offset 13718 */
  30846   "\xd8\xae\xd9\x89\0" /* offset 13723 */
  30847   "\xd8\xae\xd9\x8a\0" /* offset 13728 */
  30848   "\xd8\xb5\xd9\x89\0" /* offset 13733 */
  30849   "\xd8\xb5\xd9\x8a\0" /* offset 13738 */
  30850   "\xd8\xb6\xd9\x89\0" /* offset 13743 */
  30851   "\xd8\xb6\xd9\x8a\0" /* offset 13748 */
  30852   "\xd8\xb4\xd8\xac\0" /* offset 13753 */
  30853   "\xd8\xb4\xd8\xad\0" /* offset 13758 */
  30854   "\xd8\xb4\xd8\xae\0" /* offset 13763 */
  30855   "\xd8\xb4\xd8\xb1\0" /* offset 13768 */
  30856   "\xd8\xb3\xd8\xb1\0" /* offset 13773 */
  30857   "\xd8\xb5\xd8\xb1\0" /* offset 13778 */
  30858   "\xd8\xb6\xd8\xb1\0" /* offset 13783 */
  30859   "\xd8\xa7\xd9\x8b\0" /* offset 13788 */
  30860   "\xd8\xaa\xd8\xac\xd9\x85\0" /* offset 13793 */
  30861   "\xd8\xaa\xd8\xad\xd8\xac\0" /* offset 13800 */
  30862   "\xd8\xaa\xd8\xad\xd9\x85\0" /* offset 13807 */
  30863   "\xd8\xaa\xd8\xae\xd9\x85\0" /* offset 13814 */
  30864   "\xd8\xaa\xd9\x85\xd8\xac\0" /* offset 13821 */
  30865   "\xd8\xaa\xd9\x85\xd8\xad\0" /* offset 13828 */
  30866   "\xd8\xaa\xd9\x85\xd8\xae\0" /* offset 13835 */
  30867   "\xd8\xac\xd9\x85\xd8\xad\0" /* offset 13842 */
  30868   "\xd8\xad\xd9\x85\xd9\x8a\0" /* offset 13849 */
  30869   "\xd8\xad\xd9\x85\xd9\x89\0" /* offset 13856 */
  30870   "\xd8\xb3\xd8\xad\xd8\xac\0" /* offset 13863 */
  30871   "\xd8\xb3\xd8\xac\xd8\xad\0" /* offset 13870 */
  30872   "\xd8\xb3\xd8\xac\xd9\x89\0" /* offset 13877 */
  30873   "\xd8\xb3\xd9\x85\xd8\xad\0" /* offset 13884 */
  30874   "\xd8\xb3\xd9\x85\xd8\xac\0" /* offset 13891 */
  30875   "\xd8\xb3\xd9\x85\xd9\x85\0" /* offset 13898 */
  30876   "\xd8\xb5\xd8\xad\xd8\xad\0" /* offset 13905 */
  30877   "\xd8\xb5\xd9\x85\xd9\x85\0" /* offset 13912 */
  30878   "\xd8\xb4\xd8\xad\xd9\x85\0" /* offset 13919 */
  30879   "\xd8\xb4\xd8\xac\xd9\x8a\0" /* offset 13926 */
  30880   "\xd8\xb4\xd9\x85\xd8\xae\0" /* offset 13933 */
  30881   "\xd8\xb4\xd9\x85\xd9\x85\0" /* offset 13940 */
  30882   "\xd8\xb6\xd8\xad\xd9\x89\0" /* offset 13947 */
  30883   "\xd8\xb6\xd8\xae\xd9\x85\0" /* offset 13954 */
  30884   "\xd8\xb7\xd9\x85\xd8\xad\0" /* offset 13961 */
  30885   "\xd8\xb7\xd9\x85\xd9\x85\0" /* offset 13968 */
  30886   "\xd8\xb7\xd9\x85\xd9\x8a\0" /* offset 13975 */
  30887   "\xd8\xb9\xd8\xac\xd9\x85\0" /* offset 13982 */
  30888   "\xd8\xb9\xd9\x85\xd9\x85\0" /* offset 13989 */
  30889   "\xd8\xb9\xd9\x85\xd9\x89\0" /* offset 13996 */
  30890   "\xd8\xba\xd9\x85\xd9\x85\0" /* offset 14003 */
  30891   "\xd8\xba\xd9\x85\xd9\x8a\0" /* offset 14010 */
  30892   "\xd8\xba\xd9\x85\xd9\x89\0" /* offset 14017 */
  30893   "\xd9\x81\xd8\xae\xd9\x85\0" /* offset 14024 */
  30894   "\xd9\x82\xd9\x85\xd8\xad\0" /* offset 14031 */
  30895   "\xd9\x82\xd9\x85\xd9\x85\0" /* offset 14038 */
  30896   "\xd9\x84\xd8\xad\xd9\x85\0" /* offset 14045 */
  30897   "\xd9\x84\xd8\xad\xd9\x8a\0" /* offset 14052 */
  30898   "\xd9\x84\xd8\xad\xd9\x89\0" /* offset 14059 */
  30899   "\xd9\x84\xd8\xac\xd8\xac\0" /* offset 14066 */
  30900   "\xd9\x84\xd8\xae\xd9\x85\0" /* offset 14073 */
  30901   "\xd9\x84\xd9\x85\xd8\xad\0" /* offset 14080 */
  30902   "\xd9\x85\xd8\xad\xd8\xac\0" /* offset 14087 */
  30903   "\xd9\x85\xd8\xad\xd9\x85\0" /* offset 14094 */
  30904   "\xd9\x85\xd8\xad\xd9\x8a\0" /* offset 14101 */
  30905   "\xd9\x85\xd8\xac\xd8\xad\0" /* offset 14108 */
  30906   "\xd9\x85\xd8\xac\xd9\x85\0" /* offset 14115 */
  30907   "\xd9\x85\xd8\xae\xd8\xac\0" /* offset 14122 */
  30908   "\xd9\x85\xd8\xae\xd9\x85\0" /* offset 14129 */
  30909   "\xd9\x85\xd8\xac\xd8\xae\0" /* offset 14136 */
  30910   "\xd9\x87\xd9\x85\xd8\xac\0" /* offset 14143 */
  30911   "\xd9\x87\xd9\x85\xd9\x85\0" /* offset 14150 */
  30912   "\xd9\x86\xd8\xad\xd9\x85\0" /* offset 14157 */
  30913   "\xd9\x86\xd8\xad\xd9\x89\0" /* offset 14164 */
  30914   "\xd9\x86\xd8\xac\xd9\x85\0" /* offset 14171 */
  30915   "\xd9\x86\xd8\xac\xd9\x89\0" /* offset 14178 */
  30916   "\xd9\x86\xd9\x85\xd9\x8a\0" /* offset 14185 */
  30917   "\xd9\x86\xd9\x85\xd9\x89\0" /* offset 14192 */
  30918   "\xd9\x8a\xd9\x85\xd9\x85\0" /* offset 14199 */
  30919   "\xd8\xa8\xd8\xae\xd9\x8a\0" /* offset 14206 */
  30920   "\xd8\xaa\xd8\xac\xd9\x8a\0" /* offset 14213 */
  30921   "\xd8\xaa\xd8\xac\xd9\x89\0" /* offset 14220 */
  30922   "\xd8\xaa\xd8\xae\xd9\x8a\0" /* offset 14227 */
  30923   "\xd8\xaa\xd8\xae\xd9\x89\0" /* offset 14234 */
  30924   "\xd8\xaa\xd9\x85\xd9\x8a\0" /* offset 14241 */
  30925   "\xd8\xaa\xd9\x85\xd9\x89\0" /* offset 14248 */
  30926   "\xd8\xac\xd9\x85\xd9\x8a\0" /* offset 14255 */
  30927   "\xd8\xac\xd8\xad\xd9\x89\0" /* offset 14262 */
  30928   "\xd8\xac\xd9\x85\xd9\x89\0" /* offset 14269 */
  30929   "\xd8\xb3\xd8\xae\xd9\x89\0" /* offset 14276 */
  30930   "\xd8\xb5\xd8\xad\xd9\x8a\0" /* offset 14283 */
  30931   "\xd8\xb4\xd8\xad\xd9\x8a\0" /* offset 14290 */
  30932   "\xd8\xb6\xd8\xad\xd9\x8a\0" /* offset 14297 */
  30933   "\xd9\x84\xd8\xac\xd9\x8a\0" /* offset 14304 */
  30934   "\xd9\x84\xd9\x85\xd9\x8a\0" /* offset 14311 */
  30935   "\xd9\x8a\xd8\xad\xd9\x8a\0" /* offset 14318 */
  30936   "\xd9\x8a\xd8\xac\xd9\x8a\0" /* offset 14325 */
  30937   "\xd9\x8a\xd9\x85\xd9\x8a\0" /* offset 14332 */
  30938   "\xd9\x85\xd9\x85\xd9\x8a\0" /* offset 14339 */
  30939   "\xd9\x82\xd9\x85\xd9\x8a\0" /* offset 14346 */
  30940   "\xd9\x86\xd8\xad\xd9\x8a\0" /* offset 14353 */
  30941   "\xd8\xb9\xd9\x85\xd9\x8a\0" /* offset 14360 */
  30942   "\xd9\x83\xd9\x85\xd9\x8a\0" /* offset 14367 */
  30943   "\xd9\x86\xd8\xac\xd8\xad\0" /* offset 14374 */
  30944   "\xd9\x85\xd8\xae\xd9\x8a\0" /* offset 14381 */
  30945   "\xd9\x84\xd8\xac\xd9\x85\0" /* offset 14388 */
  30946   "\xd9\x83\xd9\x85\xd9\x85\0" /* offset 14395 */
  30947   "\xd8\xac\xd8\xad\xd9\x8a\0" /* offset 14402 */
  30948   "\xd8\xad\xd8\xac\xd9\x8a\0" /* offset 14409 */
  30949   "\xd9\x85\xd8\xac\xd9\x8a\0" /* offset 14416 */
  30950   "\xd9\x81\xd9\x85\xd9\x8a\0" /* offset 14423 */
  30951   "\xd8\xa8\xd8\xad\xd9\x8a\0" /* offset 14430 */
  30952   "\xd8\xb3\xd8\xae\xd9\x8a\0" /* offset 14437 */
  30953   "\xd9\x86\xd8\xac\xd9\x8a\0" /* offset 14444 */
  30954   "\xd8\xb5\xd9\x84\xdb\x92\0" /* offset 14451 */
  30955   "\xd9\x82\xd9\x84\xdb\x92\0" /* offset 14458 */
  30956   "\xd8\xa7\xd9\x84\xd9\x84\xd9\x87\0" /* offset 14465 */
  30957   "\xd8\xa7\xd9\x83\xd8\xa8\xd8\xb1\0" /* offset 14474 */
  30958   "\xd9\x85\xd8\xad\xd9\x85\xd8\xaf\0" /* offset 14483 */
  30959   "\xd8\xb5\xd9\x84\xd8\xb9\xd9\x85\0" /* offset 14492 */
  30960   "\xd8\xb1\xd8\xb3\xd9\x88\xd9\x84\0" /* offset 14501 */
  30961   "\xd8\xb9\xd9\x84\xd9\x8a\xd9\x87\0" /* offset 14510 */
  30962   "\xd9\x88\xd8\xb3\xd9\x84\xd9\x85\0" /* offset 14519 */
  30963   "\xd8\xb5\xd9\x84\xd9\x89\0" /* offset 14528 */
  30964   "\xd8\xb5\xd9\x84\xd9\x89\x20\xd8\xa7\xd9\x84\xd9\x84\xd9\x87\x20\xd8\xb9\xd9\x84\xd9\x8a\xd9\x87\x20\xd9\x88\xd8\xb3\xd9\x84\xd9\x85\0" /* offset 14535 */
  30965   "\xd8\xac\xd9\x84\x20\xd8\xac\xd9\x84\xd8\xa7\xd9\x84\xd9\x87\0" /* offset 14569 */
  30966   "\xd8\xb1\xdb\x8c\xd8\xa7\xd9\x84\0" /* offset 14585 */
  30967   "\x2c\0" /* offset 14594 */
  30968   "\xe3\x80\x81\0" /* offset 14596 */
  30969   "\xe3\x80\x82\0" /* offset 14600 */
  30970   "\x3a\0" /* offset 14604 */
  30971   "\x21\0" /* offset 14606 */
  30972   "\x3f\0" /* offset 14608 */
  30973   "\xe3\x80\x96\0" /* offset 14610 */
  30974   "\xe3\x80\x97\0" /* offset 14614 */
  30975   "\xe2\x80\x94\0" /* offset 14618 */
  30976   "\xe2\x80\x93\0" /* offset 14622 */
  30977   "\x5f\0" /* offset 14626 */
  30978   "\x7b\0" /* offset 14628 */
  30979   "\x7d\0" /* offset 14630 */
  30980   "\xe3\x80\x94\0" /* offset 14632 */
  30981   "\xe3\x80\x95\0" /* offset 14636 */
  30982   "\xe3\x80\x90\0" /* offset 14640 */
  30983   "\xe3\x80\x91\0" /* offset 14644 */
  30984   "\xe3\x80\x8a\0" /* offset 14648 */
  30985   "\xe3\x80\x8b\0" /* offset 14652 */
  30986   "\xe3\x80\x8c\0" /* offset 14656 */
  30987   "\xe3\x80\x8d\0" /* offset 14660 */
  30988   "\xe3\x80\x8e\0" /* offset 14664 */
  30989   "\xe3\x80\x8f\0" /* offset 14668 */
  30990   "\x5b\0" /* offset 14672 */
  30991   "\x5d\0" /* offset 14674 */
  30992   "\x23\0" /* offset 14676 */
  30993   "\x26\0" /* offset 14678 */
  30994   "\x2a\0" /* offset 14680 */
  30995   "\x2d\0" /* offset 14682 */
  30996   "\x3c\0" /* offset 14684 */
  30997   "\x3e\0" /* offset 14686 */
  30998   "\x5c\0" /* offset 14688 */
  30999   "\x24\0" /* offset 14690 */
  31000   "\x25\0" /* offset 14692 */
  31001   "\x40\0" /* offset 14694 */
  31002   "\x20\xd9\x8b\0" /* offset 14696 */
  31003   "\xd9\x80\xd9\x8b\0" /* offset 14700 */
  31004   "\x20\xd9\x8c\0" /* offset 14705 */
  31005   "\x20\xd9\x8d\0" /* offset 14709 */
  31006   "\x20\xd9\x8e\0" /* offset 14713 */
  31007   "\xd9\x80\xd9\x8e\0" /* offset 14717 */
  31008   "\x20\xd9\x8f\0" /* offset 14722 */
  31009   "\xd9\x80\xd9\x8f\0" /* offset 14726 */
  31010   "\x20\xd9\x90\0" /* offset 14731 */
  31011   "\xd9\x80\xd9\x90\0" /* offset 14735 */
  31012   "\x20\xd9\x91\0" /* offset 14740 */
  31013   "\xd9\x80\xd9\x91\0" /* offset 14744 */
  31014   "\x20\xd9\x92\0" /* offset 14749 */
  31015   "\xd9\x80\xd9\x92\0" /* offset 14753 */
  31016   "\xd8\xa1\0" /* offset 14758 */
  31017   "\xd8\xa7\0" /* offset 14761 */
  31018   "\xd8\xa8\0" /* offset 14764 */
  31019   "\xd8\xa9\0" /* offset 14767 */
  31020   "\xd8\xaa\0" /* offset 14770 */
  31021   "\xd8\xab\0" /* offset 14773 */
  31022   "\xd8\xac\0" /* offset 14776 */
  31023   "\xd8\xad\0" /* offset 14779 */
  31024   "\xd8\xae\0" /* offset 14782 */
  31025   "\xd8\xaf\0" /* offset 14785 */
  31026   "\xd8\xb0\0" /* offset 14788 */
  31027   "\xd8\xb1\0" /* offset 14791 */
  31028   "\xd8\xb2\0" /* offset 14794 */
  31029   "\xd8\xb3\0" /* offset 14797 */
  31030   "\xd8\xb4\0" /* offset 14800 */
  31031   "\xd8\xb5\0" /* offset 14803 */
  31032   "\xd8\xb6\0" /* offset 14806 */
  31033   "\xd8\xb7\0" /* offset 14809 */
  31034   "\xd8\xb8\0" /* offset 14812 */
  31035   "\xd8\xb9\0" /* offset 14815 */
  31036   "\xd8\xba\0" /* offset 14818 */
  31037   "\xd9\x81\0" /* offset 14821 */
  31038   "\xd9\x82\0" /* offset 14824 */
  31039   "\xd9\x83\0" /* offset 14827 */
  31040   "\xd9\x84\0" /* offset 14830 */
  31041   "\xd9\x85\0" /* offset 14833 */
  31042   "\xd9\x86\0" /* offset 14836 */
  31043   "\xd9\x87\0" /* offset 14839 */
  31044   "\xd9\x88\0" /* offset 14842 */
  31045   "\xd9\x8a\0" /* offset 14845 */
  31046   "\xd9\x84\xd8\xa7\xd9\x93\0" /* offset 14848 */
  31047   "\xd9\x84\xd8\xa7\xd9\x94\0" /* offset 14855 */
  31048   "\xd9\x84\xd8\xa7\xd9\x95\0" /* offset 14862 */
  31049   "\xd9\x84\xd8\xa7\0" /* offset 14869 */
  31050   "\x22\0" /* offset 14874 */
  31051   "\x27\0" /* offset 14876 */
  31052   "\x2f\0" /* offset 14878 */
  31053   "\x5e\0" /* offset 14880 */
  31054   "\x7c\0" /* offset 14882 */
  31055   "\x7e\0" /* offset 14884 */
  31056   "\xe2\xa6\x85\0" /* offset 14886 */
  31057   "\xe2\xa6\x86\0" /* offset 14890 */
  31058   "\xe3\x83\xbb\0" /* offset 14894 */
  31059   "\xe3\x82\xa1\0" /* offset 14898 */
  31060   "\xe3\x82\xa3\0" /* offset 14902 */
  31061   "\xe3\x82\xa5\0" /* offset 14906 */
  31062   "\xe3\x82\xa7\0" /* offset 14910 */
  31063   "\xe3\x82\xa9\0" /* offset 14914 */
  31064   "\xe3\x83\xa3\0" /* offset 14918 */
  31065   "\xe3\x83\xa5\0" /* offset 14922 */
  31066   "\xe3\x83\xa7\0" /* offset 14926 */
  31067   "\xe3\x83\x83\0" /* offset 14930 */
  31068   "\xe3\x83\xbc\0" /* offset 14934 */
  31069   "\xe3\x83\xb3\0" /* offset 14938 */
  31070   "\xe3\x82\x99\0" /* offset 14942 */
  31071   "\xe3\x82\x9a\0" /* offset 14946 */
  31072   "\xc2\xa2\0" /* offset 14950 */
  31073   "\xc2\xa3\0" /* offset 14953 */
  31074   "\xc2\xac\0" /* offset 14956 */
  31075   "\xc2\xa6\0" /* offset 14959 */
  31076   "\xc2\xa5\0" /* offset 14962 */
  31077   "\xe2\x82\xa9\0" /* offset 14965 */
  31078   "\xe2\x94\x82\0" /* offset 14969 */
  31079   "\xe2\x86\x90\0" /* offset 14973 */
  31080   "\xe2\x86\x91\0" /* offset 14977 */
  31081   "\xe2\x86\x92\0" /* offset 14981 */
  31082   "\xe2\x86\x93\0" /* offset 14985 */
  31083   "\xe2\x96\xa0\0" /* offset 14989 */
  31084   "\xe2\x97\x8b\0" /* offset 14993 */
  31085   "\xf0\x91\x82\x99\xf0\x91\x82\xba\0" /* offset 14997 */
  31086   "\xf0\x91\x82\x9b\xf0\x91\x82\xba\0" /* offset 15006 */
  31087   "\xf0\x91\x82\xa5\xf0\x91\x82\xba\0" /* offset 15015 */
  31088   "\xf0\x91\x84\xb1\xf0\x91\x84\xa7\0" /* offset 15024 */
  31089   "\xf0\x91\x84\xb2\xf0\x91\x84\xa7\0" /* offset 15033 */
  31090   "\xf0\x91\x8d\x87\xf0\x91\x8c\xbe\0" /* offset 15042 */
  31091   "\xf0\x91\x8d\x87\xf0\x91\x8d\x97\0" /* offset 15051 */
  31092   "\xf0\x91\x92\xb9\xf0\x91\x92\xba\0" /* offset 15060 */
  31093   "\xf0\x91\x92\xb9\xf0\x91\x92\xb0\0" /* offset 15069 */
  31094   "\xf0\x91\x92\xb9\xf0\x91\x92\xbd\0" /* offset 15078 */
  31095   "\xf0\x91\x96\xb8\xf0\x91\x96\xaf\0" /* offset 15087 */
  31096   "\xf0\x91\x96\xb9\xf0\x91\x96\xaf\0" /* offset 15096 */
  31097   "\xf0\x9d\x85\x97\xf0\x9d\x85\xa5\0" /* offset 15105 */
  31098   "\xf0\x9d\x85\x98\xf0\x9d\x85\xa5\0" /* offset 15114 */
  31099   "\xf0\x9d\x85\x98\xf0\x9d\x85\xa5\xf0\x9d\x85\xae\0" /* offset 15123 */
  31100   "\xf0\x9d\x85\x98\xf0\x9d\x85\xa5\xf0\x9d\x85\xaf\0" /* offset 15136 */
  31101   "\xf0\x9d\x85\x98\xf0\x9d\x85\xa5\xf0\x9d\x85\xb0\0" /* offset 15149 */
  31102   "\xf0\x9d\x85\x98\xf0\x9d\x85\xa5\xf0\x9d\x85\xb1\0" /* offset 15162 */
  31103   "\xf0\x9d\x85\x98\xf0\x9d\x85\xa5\xf0\x9d\x85\xb2\0" /* offset 15175 */
  31104   "\xf0\x9d\x86\xb9\xf0\x9d\x85\xa5\0" /* offset 15188 */
  31105   "\xf0\x9d\x86\xba\xf0\x9d\x85\xa5\0" /* offset 15197 */
  31106   "\xf0\x9d\x86\xb9\xf0\x9d\x85\xa5\xf0\x9d\x85\xae\0" /* offset 15206 */
  31107   "\xf0\x9d\x86\xba\xf0\x9d\x85\xa5\xf0\x9d\x85\xae\0" /* offset 15219 */
  31108   "\xf0\x9d\x86\xb9\xf0\x9d\x85\xa5\xf0\x9d\x85\xaf\0" /* offset 15232 */
  31109   "\xf0\x9d\x86\xba\xf0\x9d\x85\xa5\xf0\x9d\x85\xaf\0" /* offset 15245 */
  31110   "\xc4\xb1\0" /* offset 15258 */
  31111   "\xc8\xb7\0" /* offset 15261 */
  31112   "\xce\x91\0" /* offset 15264 */
  31113   "\xce\x92\0" /* offset 15267 */
  31114   "\xce\x94\0" /* offset 15270 */
  31115   "\xce\x95\0" /* offset 15273 */
  31116   "\xce\x96\0" /* offset 15276 */
  31117   "\xce\x97\0" /* offset 15279 */
  31118   "\xce\x99\0" /* offset 15282 */
  31119   "\xce\x9a\0" /* offset 15285 */
  31120   "\xce\x9b\0" /* offset 15288 */
  31121   "\xce\x9c\0" /* offset 15291 */
  31122   "\xce\x9d\0" /* offset 15294 */
  31123   "\xce\x9e\0" /* offset 15297 */
  31124   "\xce\x9f\0" /* offset 15300 */
  31125   "\xce\xa1\0" /* offset 15303 */
  31126   "\xce\xa4\0" /* offset 15306 */
  31127   "\xce\xa6\0" /* offset 15309 */
  31128   "\xce\xa7\0" /* offset 15312 */
  31129   "\xce\xa8\0" /* offset 15315 */
  31130   "\xe2\x88\x87\0" /* offset 15318 */
  31131   "\xce\xb1\0" /* offset 15322 */
  31132   "\xce\xb6\0" /* offset 15325 */
  31133   "\xce\xb7\0" /* offset 15328 */
  31134   "\xce\xbb\0" /* offset 15331 */
  31135   "\xce\xbd\0" /* offset 15334 */
  31136   "\xce\xbe\0" /* offset 15337 */
  31137   "\xce\xbf\0" /* offset 15340 */
  31138   "\xcf\x83\0" /* offset 15343 */
  31139   "\xcf\x84\0" /* offset 15346 */
  31140   "\xcf\x85\0" /* offset 15349 */
  31141   "\xcf\x88\0" /* offset 15352 */
  31142   "\xcf\x89\0" /* offset 15355 */
  31143   "\xe2\x88\x82\0" /* offset 15358 */
  31144   "\xcf\x9c\0" /* offset 15362 */
  31145   "\xcf\x9d\0" /* offset 15365 */
  31146   "\xd9\xae\0" /* offset 15368 */
  31147   "\xda\xa1\0" /* offset 15371 */
  31148   "\xd9\xaf\0" /* offset 15374 */
  31149   "\x30\x2e\0" /* offset 15377 */
  31150   "\x30\x2c\0" /* offset 15380 */
  31151   "\x31\x2c\0" /* offset 15383 */
  31152   "\x32\x2c\0" /* offset 15386 */
  31153   "\x33\x2c\0" /* offset 15389 */
  31154   "\x34\x2c\0" /* offset 15392 */
  31155   "\x35\x2c\0" /* offset 15395 */
  31156   "\x36\x2c\0" /* offset 15398 */
  31157   "\x37\x2c\0" /* offset 15401 */
  31158   "\x38\x2c\0" /* offset 15404 */
  31159   "\x39\x2c\0" /* offset 15407 */
  31160   "\x28\x41\x29\0" /* offset 15410 */
  31161   "\x28\x42\x29\0" /* offset 15414 */
  31162   "\x28\x43\x29\0" /* offset 15418 */
  31163   "\x28\x44\x29\0" /* offset 15422 */
  31164   "\x28\x45\x29\0" /* offset 15426 */
  31165   "\x28\x46\x29\0" /* offset 15430 */
  31166   "\x28\x47\x29\0" /* offset 15434 */
  31167   "\x28\x48\x29\0" /* offset 15438 */
  31168   "\x28\x49\x29\0" /* offset 15442 */
  31169   "\x28\x4a\x29\0" /* offset 15446 */
  31170   "\x28\x4b\x29\0" /* offset 15450 */
  31171   "\x28\x4c\x29\0" /* offset 15454 */
  31172   "\x28\x4d\x29\0" /* offset 15458 */
  31173   "\x28\x4e\x29\0" /* offset 15462 */
  31174   "\x28\x4f\x29\0" /* offset 15466 */
  31175   "\x28\x50\x29\0" /* offset 15470 */
  31176   "\x28\x51\x29\0" /* offset 15474 */
  31177   "\x28\x52\x29\0" /* offset 15478 */
  31178   "\x28\x53\x29\0" /* offset 15482 */
  31179   "\x28\x54\x29\0" /* offset 15486 */
  31180   "\x28\x55\x29\0" /* offset 15490 */
  31181   "\x28\x56\x29\0" /* offset 15494 */
  31182   "\x28\x57\x29\0" /* offset 15498 */
  31183   "\x28\x58\x29\0" /* offset 15502 */
  31184   "\x28\x59\x29\0" /* offset 15506 */
  31185   "\x28\x5a\x29\0" /* offset 15510 */
  31186   "\xe3\x80\x94\x53\xe3\x80\x95\0" /* offset 15514 */
  31187   "\x43\x44\0" /* offset 15522 */
  31188   "\x57\x5a\0" /* offset 15525 */
  31189   "\x48\x56\0" /* offset 15528 */
  31190   "\x53\x44\0" /* offset 15531 */
  31191   "\x53\x53\0" /* offset 15534 */
  31192   "\x50\x50\x56\0" /* offset 15537 */
  31193   "\x57\x43\0" /* offset 15541 */
  31194   "\x4d\x43\0" /* offset 15544 */
  31195   "\x4d\x44\0" /* offset 15547 */
  31196   "\x44\x4a\0" /* offset 15550 */
  31197   "\xe3\x81\xbb\xe3\x81\x8b\0" /* offset 15553 */
  31198   "\xe3\x82\xb3\xe3\x82\xb3\0" /* offset 15560 */
  31199   "\xe5\xad\x97\0" /* offset 15567 */
  31200   "\xe5\x8f\x8c\0" /* offset 15571 */
  31201   "\xe5\xa4\x9a\0" /* offset 15575 */
  31202   "\xe8\xa7\xa3\0" /* offset 15579 */
  31203   "\xe4\xba\xa4\0" /* offset 15583 */
  31204   "\xe6\x98\xa0\0" /* offset 15587 */
  31205   "\xe7\x84\xa1\0" /* offset 15591 */
  31206   "\xe5\x89\x8d\0" /* offset 15595 */
  31207   "\xe5\xbe\x8c\0" /* offset 15599 */
  31208   "\xe5\x86\x8d\0" /* offset 15603 */
  31209   "\xe6\x96\xb0\0" /* offset 15607 */
  31210   "\xe5\x88\x9d\0" /* offset 15611 */
  31211   "\xe7\xb5\x82\0" /* offset 15615 */
  31212   "\xe8\xb2\xa9\0" /* offset 15619 */
  31213   "\xe5\xa3\xb0\0" /* offset 15623 */
  31214   "\xe5\x90\xb9\0" /* offset 15627 */
  31215   "\xe6\xbc\x94\0" /* offset 15631 */
  31216   "\xe6\x8a\x95\0" /* offset 15635 */
  31217   "\xe6\x8d\x95\0" /* offset 15639 */
  31218   "\xe9\x81\x8a\0" /* offset 15643 */
  31219   "\xe6\x8c\x87\0" /* offset 15647 */
  31220   "\xe6\x89\x93\0" /* offset 15651 */
  31221   "\xe7\xa6\x81\0" /* offset 15655 */
  31222   "\xe7\xa9\xba\0" /* offset 15659 */
  31223   "\xe5\x90\x88\0" /* offset 15663 */
  31224   "\xe6\xba\x80\0" /* offset 15667 */
  31225   "\xe7\x94\xb3\0" /* offset 15671 */
  31226   "\xe5\x89\xb2\0" /* offset 15675 */
  31227   "\xe5\x96\xb6\0" /* offset 15679 */
  31228   "\xe9\x85\x8d\0" /* offset 15683 */
  31229   "\xe3\x80\x94\xe6\x9c\xac\xe3\x80\x95\0" /* offset 15687 */
  31230   "\xe3\x80\x94\xe4\xb8\x89\xe3\x80\x95\0" /* offset 15697 */
  31231   "\xe3\x80\x94\xe4\xba\x8c\xe3\x80\x95\0" /* offset 15707 */
  31232   "\xe3\x80\x94\xe5\xae\x89\xe3\x80\x95\0" /* offset 15717 */
  31233   "\xe3\x80\x94\xe7\x82\xb9\xe3\x80\x95\0" /* offset 15727 */
  31234   "\xe3\x80\x94\xe6\x89\x93\xe3\x80\x95\0" /* offset 15737 */
  31235   "\xe3\x80\x94\xe7\x9b\x97\xe3\x80\x95\0" /* offset 15747 */
  31236   "\xe3\x80\x94\xe5\x8b\x9d\xe3\x80\x95\0" /* offset 15757 */
  31237   "\xe3\x80\x94\xe6\x95\x97\xe3\x80\x95\0" /* offset 15767 */
  31238   "\xe5\xbe\x97\0" /* offset 15777 */
  31239   "\xe5\x8f\xaf\0" /* offset 15781 */
  31240   "\xe4\xb8\xbd\0" /* offset 15785 */
  31241   "\xe4\xb8\xb8\0" /* offset 15789 */
  31242   "\xe4\xb9\x81\0" /* offset 15793 */
  31243   "\xf0\xa0\x84\xa2\0" /* offset 15797 */
  31244   "\xe4\xbd\xa0\0" /* offset 15802 */
  31245   "\xe4\xbe\xbb\0" /* offset 15806 */
  31246   "\xe5\x80\x82\0" /* offset 15810 */
  31247   "\xe5\x81\xba\0" /* offset 15814 */
  31248   "\xe5\x82\x99\0" /* offset 15818 */
  31249   "\xe5\x83\x8f\0" /* offset 15822 */
  31250   "\xe3\x92\x9e\0" /* offset 15826 */
  31251   "\xf0\xa0\x98\xba\0" /* offset 15830 */
  31252   "\xe5\x85\x94\0" /* offset 15835 */
  31253   "\xe5\x85\xa4\0" /* offset 15839 */
  31254   "\xe5\x85\xb7\0" /* offset 15843 */
  31255   "\xf0\xa0\x94\x9c\0" /* offset 15847 */
  31256   "\xe3\x92\xb9\0" /* offset 15852 */
  31257   "\xe5\x85\xa7\0" /* offset 15856 */
  31258   "\xf0\xa0\x95\x8b\0" /* offset 15860 */
  31259   "\xe5\x86\x97\0" /* offset 15865 */
  31260   "\xe5\x86\xa4\0" /* offset 15869 */
  31261   "\xe4\xbb\x8c\0" /* offset 15873 */
  31262   "\xe5\x86\xac\0" /* offset 15877 */
  31263   "\xf0\xa9\x87\x9f\0" /* offset 15881 */
  31264   "\xe5\x88\x83\0" /* offset 15886 */
  31265   "\xe3\x93\x9f\0" /* offset 15890 */
  31266   "\xe5\x88\xbb\0" /* offset 15894 */
  31267   "\xe5\x89\x86\0" /* offset 15898 */
  31268   "\xe5\x89\xb7\0" /* offset 15902 */
  31269   "\xe3\x94\x95\0" /* offset 15906 */
  31270   "\xe5\x8c\x85\0" /* offset 15910 */
  31271   "\xe5\x8c\x86\0" /* offset 15914 */
  31272   "\xe5\x8d\x89\0" /* offset 15918 */
  31273   "\xe5\x8d\x9a\0" /* offset 15922 */
  31274   "\xe5\x8d\xb3\0" /* offset 15926 */
  31275   "\xe5\x8d\xbd\0" /* offset 15930 */
  31276   "\xe5\x8d\xbf\0" /* offset 15934 */
  31277   "\xf0\xa0\xa8\xac\0" /* offset 15938 */
  31278   "\xe7\x81\xb0\0" /* offset 15943 */
  31279   "\xe5\x8f\x8a\0" /* offset 15947 */
  31280   "\xe5\x8f\x9f\0" /* offset 15951 */
  31281   "\xf0\xa0\xad\xa3\0" /* offset 15955 */
  31282   "\xe5\x8f\xab\0" /* offset 15960 */
  31283   "\xe5\x8f\xb1\0" /* offset 15964 */
  31284   "\xe5\x90\x86\0" /* offset 15968 */
  31285   "\xe5\x92\x9e\0" /* offset 15972 */
  31286   "\xe5\x90\xb8\0" /* offset 15976 */
  31287   "\xe5\x91\x88\0" /* offset 15980 */
  31288   "\xe5\x91\xa8\0" /* offset 15984 */
  31289   "\xe5\x92\xa2\0" /* offset 15988 */
  31290   "\xe5\x93\xb6\0" /* offset 15992 */
  31291   "\xe5\x94\x90\0" /* offset 15996 */
  31292   "\xe5\x95\x93\0" /* offset 16000 */
  31293   "\xe5\x95\xa3\0" /* offset 16004 */
  31294   "\xe5\x96\x84\0" /* offset 16008 */
  31295   "\xe5\x96\xab\0" /* offset 16012 */
  31296   "\xe5\x96\xb3\0" /* offset 16016 */
  31297   "\xe5\x97\x82\0" /* offset 16020 */
  31298   "\xe5\x9c\x96\0" /* offset 16024 */
  31299   "\xe5\x9c\x97\0" /* offset 16028 */
  31300   "\xe5\x99\x91\0" /* offset 16032 */
  31301   "\xe5\x99\xb4\0" /* offset 16036 */
  31302   "\xe5\xa3\xae\0" /* offset 16040 */
  31303   "\xe5\x9f\x8e\0" /* offset 16044 */
  31304   "\xe5\x9f\xb4\0" /* offset 16048 */
  31305   "\xe5\xa0\x8d\0" /* offset 16052 */
  31306   "\xe5\x9e\x8b\0" /* offset 16056 */
  31307   "\xe5\xa0\xb2\0" /* offset 16060 */
  31308   "\xe5\xa0\xb1\0" /* offset 16064 */
  31309   "\xe5\xa2\xac\0" /* offset 16068 */
  31310   "\xf0\xa1\x93\xa4\0" /* offset 16072 */
  31311   "\xe5\xa3\xb2\0" /* offset 16077 */
  31312   "\xe5\xa3\xb7\0" /* offset 16081 */
  31313   "\xe5\xa4\x86\0" /* offset 16085 */
  31314   "\xe5\xa4\xa2\0" /* offset 16089 */
  31315   "\xe5\xa5\xa2\0" /* offset 16093 */
  31316   "\xf0\xa1\x9a\xa8\0" /* offset 16097 */
  31317   "\xf0\xa1\x9b\xaa\0" /* offset 16102 */
  31318   "\xe5\xa7\xac\0" /* offset 16107 */
  31319   "\xe5\xa8\x9b\0" /* offset 16111 */
  31320   "\xe5\xa8\xa7\0" /* offset 16115 */
  31321   "\xe5\xa7\x98\0" /* offset 16119 */
  31322   "\xe5\xa9\xa6\0" /* offset 16123 */
  31323   "\xe3\x9b\xae\0" /* offset 16127 */
  31324   "\xe3\x9b\xbc\0" /* offset 16131 */
  31325   "\xe5\xac\x88\0" /* offset 16135 */
  31326   "\xe5\xac\xbe\0" /* offset 16139 */
  31327   "\xf0\xa1\xa7\x88\0" /* offset 16143 */
  31328   "\xe5\xaf\x83\0" /* offset 16148 */
  31329   "\xe5\xaf\x98\0" /* offset 16152 */
  31330   "\xe5\xaf\xb3\0" /* offset 16156 */
  31331   "\xf0\xa1\xac\x98\0" /* offset 16160 */
  31332   "\xe5\xaf\xbf\0" /* offset 16165 */
  31333   "\xe5\xb0\x86\0" /* offset 16169 */
  31334   "\xe5\xbd\x93\0" /* offset 16173 */
  31335   "\xe3\x9e\x81\0" /* offset 16177 */
  31336   "\xe5\xb1\xa0\0" /* offset 16181 */
  31337   "\xe5\xb3\x80\0" /* offset 16185 */
  31338   "\xe5\xb2\x8d\0" /* offset 16189 */
  31339   "\xf0\xa1\xb7\xa4\0" /* offset 16193 */
  31340   "\xe5\xb5\x83\0" /* offset 16198 */
  31341   "\xf0\xa1\xb7\xa6\0" /* offset 16202 */
  31342   "\xe5\xb5\xae\0" /* offset 16207 */
  31343   "\xe5\xb5\xab\0" /* offset 16211 */
  31344   "\xe5\xb5\xbc\0" /* offset 16215 */
  31345   "\xe5\xb7\xa1\0" /* offset 16219 */
  31346   "\xe5\xb7\xa2\0" /* offset 16223 */
  31347   "\xe3\xa0\xaf\0" /* offset 16227 */
  31348   "\xe5\xb7\xbd\0" /* offset 16231 */
  31349   "\xe5\xb8\xa8\0" /* offset 16235 */
  31350   "\xe5\xb8\xbd\0" /* offset 16239 */
  31351   "\xe5\xb9\xa9\0" /* offset 16243 */
  31352   "\xe3\xa1\xa2\0" /* offset 16247 */
  31353   "\xf0\xa2\x86\x83\0" /* offset 16251 */
  31354   "\xe3\xa1\xbc\0" /* offset 16256 */
  31355   "\xe5\xba\xb0\0" /* offset 16260 */
  31356   "\xe5\xba\xb3\0" /* offset 16264 */
  31357   "\xe5\xba\xb6\0" /* offset 16268 */
  31358   "\xf0\xaa\x8e\x92\0" /* offset 16272 */
  31359   "\xf0\xa2\x8c\xb1\0" /* offset 16277 */
  31360   "\xe8\x88\x81\0" /* offset 16282 */
  31361   "\xe5\xbc\xa2\0" /* offset 16286 */
  31362   "\xe3\xa3\x87\0" /* offset 16290 */
  31363   "\xf0\xa3\x8a\xb8\0" /* offset 16294 */
  31364   "\xf0\xa6\x87\x9a\0" /* offset 16299 */
  31365   "\xe5\xbd\xa2\0" /* offset 16304 */
  31366   "\xe5\xbd\xab\0" /* offset 16308 */
  31367   "\xe3\xa3\xa3\0" /* offset 16312 */
  31368   "\xe5\xbe\x9a\0" /* offset 16316 */
  31369   "\xe5\xbf\x8d\0" /* offset 16320 */
  31370   "\xe5\xbf\x97\0" /* offset 16324 */
  31371   "\xe5\xbf\xb9\0" /* offset 16328 */
  31372   "\xe6\x82\x81\0" /* offset 16332 */
  31373   "\xe3\xa4\xba\0" /* offset 16336 */
  31374   "\xe3\xa4\x9c\0" /* offset 16340 */
  31375   "\xf0\xa2\x9b\x94\0" /* offset 16344 */
  31376   "\xe6\x83\x87\0" /* offset 16349 */
  31377   "\xe6\x85\x88\0" /* offset 16353 */
  31378   "\xe6\x85\x8c\0" /* offset 16357 */
  31379   "\xe6\x85\xba\0" /* offset 16361 */
  31380   "\xe6\x86\xb2\0" /* offset 16365 */
  31381   "\xe6\x86\xa4\0" /* offset 16369 */
  31382   "\xe6\x86\xaf\0" /* offset 16373 */
  31383   "\xe6\x87\x9e\0" /* offset 16377 */
  31384   "\xe6\x88\x90\0" /* offset 16381 */
  31385   "\xe6\x88\x9b\0" /* offset 16385 */
  31386   "\xe6\x89\x9d\0" /* offset 16389 */
  31387   "\xe6\x8a\xb1\0" /* offset 16393 */
  31388   "\xe6\x8b\x94\0" /* offset 16397 */
  31389   "\xe6\x8d\x90\0" /* offset 16401 */
  31390   "\xf0\xa2\xac\x8c\0" /* offset 16405 */
  31391   "\xe6\x8c\xbd\0" /* offset 16410 */
  31392   "\xe6\x8b\xbc\0" /* offset 16414 */
  31393   "\xe6\x8d\xa8\0" /* offset 16418 */
  31394   "\xe6\x8e\x83\0" /* offset 16422 */
  31395   "\xe6\x8f\xa4\0" /* offset 16426 */
  31396   "\xf0\xa2\xaf\xb1\0" /* offset 16430 */
  31397   "\xe6\x90\xa2\0" /* offset 16435 */
  31398   "\xe6\x8f\x85\0" /* offset 16439 */
  31399   "\xe6\x8e\xa9\0" /* offset 16443 */
  31400   "\xe3\xa8\xae\0" /* offset 16447 */
  31401   "\xe6\x91\xa9\0" /* offset 16451 */
  31402   "\xe6\x91\xbe\0" /* offset 16455 */
  31403   "\xe6\x92\x9d\0" /* offset 16459 */
  31404   "\xe6\x91\xb7\0" /* offset 16463 */
  31405   "\xe3\xa9\xac\0" /* offset 16467 */
  31406   "\xe6\x95\xac\0" /* offset 16471 */
  31407   "\xf0\xa3\x80\x8a\0" /* offset 16475 */
  31408   "\xe6\x97\xa3\0" /* offset 16480 */
  31409   "\xe6\x9b\xb8\0" /* offset 16484 */
  31410   "\xe6\x99\x89\0" /* offset 16488 */
  31411   "\xe3\xac\x99\0" /* offset 16492 */
  31412   "\xe3\xac\x88\0" /* offset 16496 */
  31413   "\xe3\xab\xa4\0" /* offset 16500 */
  31414   "\xe5\x86\x92\0" /* offset 16504 */
  31415   "\xe5\x86\x95\0" /* offset 16508 */
  31416   "\xe6\x9c\x80\0" /* offset 16512 */
  31417   "\xe6\x9a\x9c\0" /* offset 16516 */
  31418   "\xe8\x82\xad\0" /* offset 16520 */
  31419   "\xe4\x8f\x99\0" /* offset 16524 */
  31420   "\xe6\x9c\xa1\0" /* offset 16528 */
  31421   "\xe6\x9d\x9e\0" /* offset 16532 */
  31422   "\xe6\x9d\x93\0" /* offset 16536 */
  31423   "\xf0\xa3\x8f\x83\0" /* offset 16540 */
  31424   "\xe3\xad\x89\0" /* offset 16545 */
  31425   "\xe6\x9f\xba\0" /* offset 16549 */
  31426   "\xe6\x9e\x85\0" /* offset 16553 */
  31427   "\xe6\xa1\x92\0" /* offset 16557 */
  31428   "\xf0\xa3\x91\xad\0" /* offset 16561 */
  31429   "\xe6\xa2\x8e\0" /* offset 16566 */
  31430   "\xe6\xa0\x9f\0" /* offset 16570 */
  31431   "\xe6\xa4\x94\0" /* offset 16574 */
  31432   "\xe6\xa5\x82\0" /* offset 16578 */
  31433   "\xe6\xa6\xa3\0" /* offset 16582 */
  31434   "\xe6\xa7\xaa\0" /* offset 16586 */
  31435   "\xe6\xaa\xa8\0" /* offset 16590 */
  31436   "\xf0\xa3\x9a\xa3\0" /* offset 16594 */
  31437   "\xe6\xab\x9b\0" /* offset 16599 */
  31438   "\xe3\xb0\x98\0" /* offset 16603 */
  31439   "\xe6\xac\xa1\0" /* offset 16607 */
  31440   "\xf0\xa3\xa2\xa7\0" /* offset 16611 */
  31441   "\xe6\xad\x94\0" /* offset 16616 */
  31442   "\xe3\xb1\x8e\0" /* offset 16620 */
  31443   "\xe6\xad\xb2\0" /* offset 16624 */
  31444   "\xe6\xae\x9f\0" /* offset 16628 */
  31445   "\xe6\xae\xbb\0" /* offset 16632 */
  31446   "\xf0\xa3\xaa\x8d\0" /* offset 16636 */
  31447   "\xf0\xa1\xb4\x8b\0" /* offset 16641 */
  31448   "\xf0\xa3\xab\xba\0" /* offset 16646 */
  31449   "\xe6\xb1\x8e\0" /* offset 16651 */
  31450   "\xf0\xa3\xb2\xbc\0" /* offset 16655 */
  31451   "\xe6\xb2\xbf\0" /* offset 16660 */
  31452   "\xe6\xb3\x8d\0" /* offset 16664 */
  31453   "\xe6\xb1\xa7\0" /* offset 16668 */
  31454   "\xe6\xb4\x96\0" /* offset 16672 */
  31455   "\xe6\xb4\xbe\0" /* offset 16676 */
  31456   "\xe6\xb5\xa9\0" /* offset 16680 */
  31457   "\xe6\xb5\xb8\0" /* offset 16684 */
  31458   "\xe6\xb6\x85\0" /* offset 16688 */
  31459   "\xf0\xa3\xb4\x9e\0" /* offset 16692 */
  31460   "\xe6\xb4\xb4\0" /* offset 16697 */
  31461   "\xe6\xb8\xaf\0" /* offset 16701 */
  31462   "\xe6\xb9\xae\0" /* offset 16705 */
  31463   "\xe3\xb4\xb3\0" /* offset 16709 */
  31464   "\xe6\xbb\x87\0" /* offset 16713 */
  31465   "\xf0\xa3\xbb\x91\0" /* offset 16717 */
  31466   "\xe6\xb7\xb9\0" /* offset 16722 */
  31467   "\xe6\xbd\xae\0" /* offset 16726 */
  31468   "\xf0\xa3\xbd\x9e\0" /* offset 16730 */
  31469   "\xf0\xa3\xbe\x8e\0" /* offset 16735 */
  31470   "\xe6\xbf\x86\0" /* offset 16740 */
  31471   "\xe7\x80\xb9\0" /* offset 16744 */
  31472   "\xe7\x80\x9b\0" /* offset 16748 */
  31473   "\xe3\xb6\x96\0" /* offset 16752 */
  31474   "\xe7\x81\x8a\0" /* offset 16756 */
  31475   "\xe7\x81\xbd\0" /* offset 16760 */
  31476   "\xe7\x81\xb7\0" /* offset 16764 */
  31477   "\xe7\x82\xad\0" /* offset 16768 */
  31478   "\xf0\xa0\x94\xa5\0" /* offset 16772 */
  31479   "\xe7\x85\x85\0" /* offset 16777 */
  31480   "\xf0\xa4\x89\xa3\0" /* offset 16781 */
  31481   "\xe7\x86\x9c\0" /* offset 16786 */
  31482   "\xf0\xa4\x8e\xab\0" /* offset 16790 */
  31483   "\xe7\x88\xa8\0" /* offset 16795 */
  31484   "\xe7\x89\x90\0" /* offset 16799 */
  31485   "\xf0\xa4\x98\x88\0" /* offset 16803 */
  31486   "\xe7\x8a\x80\0" /* offset 16808 */
  31487   "\xe7\x8a\x95\0" /* offset 16812 */
  31488   "\xf0\xa4\x9c\xb5\0" /* offset 16816 */
  31489   "\xf0\xa4\xa0\x94\0" /* offset 16821 */
  31490   "\xe7\x8d\xba\0" /* offset 16826 */
  31491   "\xe7\x8e\x8b\0" /* offset 16830 */
  31492   "\xe3\xba\xac\0" /* offset 16834 */
  31493   "\xe7\x8e\xa5\0" /* offset 16838 */
  31494   "\xe3\xba\xb8\0" /* offset 16842 */
  31495   "\xe7\x91\x87\0" /* offset 16846 */
  31496   "\xe7\x91\x9c\0" /* offset 16850 */
  31497   "\xe7\x92\x85\0" /* offset 16854 */
  31498   "\xe7\x93\x8a\0" /* offset 16858 */
  31499   "\xe3\xbc\x9b\0" /* offset 16862 */
  31500   "\xe7\x94\xa4\0" /* offset 16866 */
  31501   "\xf0\xa4\xb0\xb6\0" /* offset 16870 */
  31502   "\xe7\x94\xbe\0" /* offset 16875 */
  31503   "\xf0\xa4\xb2\x92\0" /* offset 16879 */
  31504   "\xf0\xa2\x86\x9f\0" /* offset 16884 */
  31505   "\xe7\x98\x90\0" /* offset 16889 */
  31506   "\xf0\xa4\xbe\xa1\0" /* offset 16893 */
  31507   "\xf0\xa4\xbe\xb8\0" /* offset 16898 */
  31508   "\xf0\xa5\x81\x84\0" /* offset 16903 */
  31509   "\xe3\xbf\xbc\0" /* offset 16908 */
  31510   "\xe4\x80\x88\0" /* offset 16912 */
  31511   "\xf0\xa5\x83\xb3\0" /* offset 16916 */
  31512   "\xf0\xa5\x83\xb2\0" /* offset 16921 */
  31513   "\xf0\xa5\x84\x99\0" /* offset 16926 */
  31514   "\xf0\xa5\x84\xb3\0" /* offset 16931 */
  31515   "\xe7\x9c\x9e\0" /* offset 16936 */
  31516   "\xe7\x9c\x9f\0" /* offset 16940 */
  31517   "\xe7\x9e\x8b\0" /* offset 16944 */
  31518   "\xe4\x81\x86\0" /* offset 16948 */
  31519   "\xe4\x82\x96\0" /* offset 16952 */
  31520   "\xf0\xa5\x90\x9d\0" /* offset 16956 */
  31521   "\xe7\xa1\x8e\0" /* offset 16961 */
  31522   "\xe4\x83\xa3\0" /* offset 16965 */
  31523   "\xf0\xa5\x98\xa6\0" /* offset 16969 */
  31524   "\xf0\xa5\x9a\x9a\0" /* offset 16974 */
  31525   "\xf0\xa5\x9b\x85\0" /* offset 16979 */
  31526   "\xe7\xa7\xab\0" /* offset 16984 */
  31527   "\xe4\x84\xaf\0" /* offset 16988 */
  31528   "\xe7\xa9\x8a\0" /* offset 16992 */
  31529   "\xe7\xa9\x8f\0" /* offset 16996 */
  31530   "\xf0\xa5\xa5\xbc\0" /* offset 17000 */
  31531   "\xf0\xa5\xaa\xa7\0" /* offset 17005 */
  31532   "\xe7\xab\xae\0" /* offset 17010 */
  31533   "\xe4\x88\x82\0" /* offset 17014 */
  31534   "\xf0\xa5\xae\xab\0" /* offset 17018 */
  31535   "\xe7\xaf\x86\0" /* offset 17023 */
  31536   "\xe7\xaf\x89\0" /* offset 17027 */
  31537   "\xe4\x88\xa7\0" /* offset 17031 */
  31538   "\xf0\xa5\xb2\x80\0" /* offset 17035 */
  31539   "\xe7\xb3\x92\0" /* offset 17040 */
  31540   "\xe4\x8a\xa0\0" /* offset 17044 */
  31541   "\xe7\xb3\xa8\0" /* offset 17048 */
  31542   "\xe7\xb3\xa3\0" /* offset 17052 */
  31543   "\xe7\xb4\x80\0" /* offset 17056 */
  31544   "\xf0\xa5\xbe\x86\0" /* offset 17060 */
  31545   "\xe7\xb5\xa3\0" /* offset 17065 */
  31546   "\xe4\x8c\x81\0" /* offset 17069 */
  31547   "\xe7\xb7\x87\0" /* offset 17073 */
  31548   "\xe7\xb8\x82\0" /* offset 17077 */
  31549   "\xe7\xb9\x85\0" /* offset 17081 */
  31550   "\xe4\x8c\xb4\0" /* offset 17085 */
  31551   "\xf0\xa6\x88\xa8\0" /* offset 17089 */
  31552   "\xf0\xa6\x89\x87\0" /* offset 17094 */
  31553   "\xe4\x8d\x99\0" /* offset 17099 */
  31554   "\xf0\xa6\x8b\x99\0" /* offset 17103 */
  31555   "\xe7\xbd\xba\0" /* offset 17108 */
  31556   "\xf0\xa6\x8c\xbe\0" /* offset 17112 */
  31557   "\xe7\xbe\x95\0" /* offset 17117 */
  31558   "\xe7\xbf\xba\0" /* offset 17121 */
  31559   "\xf0\xa6\x93\x9a\0" /* offset 17125 */
  31560   "\xf0\xa6\x94\xa3\0" /* offset 17130 */
  31561   "\xe8\x81\xa0\0" /* offset 17135 */
  31562   "\xf0\xa6\x96\xa8\0" /* offset 17139 */
  31563   "\xe8\x81\xb0\0" /* offset 17144 */
  31564   "\xf0\xa3\x8d\x9f\0" /* offset 17148 */
  31565   "\xe4\x8f\x95\0" /* offset 17153 */
  31566   "\xe8\x82\xb2\0" /* offset 17157 */
  31567   "\xe8\x84\x83\0" /* offset 17161 */
  31568   "\xe4\x90\x8b\0" /* offset 17165 */
  31569   "\xe8\x84\xbe\0" /* offset 17169 */
  31570   "\xe5\xaa\xb5\0" /* offset 17173 */
  31571   "\xf0\xa6\x9e\xa7\0" /* offset 17177 */
  31572   "\xf0\xa6\x9e\xb5\0" /* offset 17182 */
  31573   "\xf0\xa3\x8e\x93\0" /* offset 17187 */
  31574   "\xf0\xa3\x8e\x9c\0" /* offset 17192 */
  31575   "\xe8\x88\x84\0" /* offset 17197 */
  31576   "\xe8\xbe\x9e\0" /* offset 17201 */
  31577   "\xe4\x91\xab\0" /* offset 17205 */
  31578   "\xe8\x8a\x91\0" /* offset 17209 */
  31579   "\xe8\x8a\x8b\0" /* offset 17213 */
  31580   "\xe8\x8a\x9d\0" /* offset 17217 */
  31581   "\xe5\x8a\xb3\0" /* offset 17221 */
  31582   "\xe8\x8a\xb1\0" /* offset 17225 */
  31583   "\xe8\x8a\xb3\0" /* offset 17229 */
  31584   "\xe8\x8a\xbd\0" /* offset 17233 */
  31585   "\xe8\x8b\xa6\0" /* offset 17237 */
  31586   "\xf0\xa6\xac\xbc\0" /* offset 17241 */
  31587   "\xe8\x8c\x9d\0" /* offset 17246 */
  31588   "\xe8\x8d\xa3\0" /* offset 17250 */
  31589   "\xe8\x8e\xad\0" /* offset 17254 */
  31590   "\xe8\x8c\xa3\0" /* offset 17258 */
  31591   "\xe8\x8e\xbd\0" /* offset 17262 */
  31592   "\xe8\x8f\xa7\0" /* offset 17266 */
  31593   "\xe8\x8d\x93\0" /* offset 17270 */
  31594   "\xe8\x8f\x8a\0" /* offset 17274 */
  31595   "\xe8\x8f\x8c\0" /* offset 17278 */
  31596   "\xe8\x8f\x9c\0" /* offset 17282 */
  31597   "\xf0\xa6\xb0\xb6\0" /* offset 17286 */
  31598   "\xf0\xa6\xb5\xab\0" /* offset 17291 */
  31599   "\xf0\xa6\xb3\x95\0" /* offset 17296 */
  31600   "\xe4\x94\xab\0" /* offset 17301 */
  31601   "\xe8\x93\xb1\0" /* offset 17305 */
  31602   "\xe8\x93\xb3\0" /* offset 17309 */
  31603   "\xe8\x94\x96\0" /* offset 17313 */
  31604   "\xf0\xa7\x8f\x8a\0" /* offset 17317 */
  31605   "\xe8\x95\xa4\0" /* offset 17322 */
  31606   "\xf0\xa6\xbc\xac\0" /* offset 17326 */
  31607   "\xe4\x95\x9d\0" /* offset 17331 */
  31608   "\xe4\x95\xa1\0" /* offset 17335 */
  31609   "\xf0\xa6\xbe\xb1\0" /* offset 17339 */
  31610   "\xf0\xa7\x83\x92\0" /* offset 17344 */
  31611   "\xe4\x95\xab\0" /* offset 17349 */
  31612   "\xe8\x99\x90\0" /* offset 17353 */
  31613   "\xe8\x99\xa7\0" /* offset 17357 */
  31614   "\xe8\x99\xa9\0" /* offset 17361 */
  31615   "\xe8\x9a\xa9\0" /* offset 17365 */
  31616   "\xe8\x9a\x88\0" /* offset 17369 */
  31617   "\xe8\x9c\x8e\0" /* offset 17373 */
  31618   "\xe8\x9b\xa2\0" /* offset 17377 */
  31619   "\xe8\x9c\xa8\0" /* offset 17381 */
  31620   "\xe8\x9d\xab\0" /* offset 17385 */
  31621   "\xe8\x9e\x86\0" /* offset 17389 */
  31622   "\xe4\x97\x97\0" /* offset 17393 */
  31623   "\xe8\x9f\xa1\0" /* offset 17397 */
  31624   "\xe8\xa0\x81\0" /* offset 17401 */
  31625   "\xe4\x97\xb9\0" /* offset 17405 */
  31626   "\xe8\xa1\xa0\0" /* offset 17409 */
  31627   "\xf0\xa7\x99\xa7\0" /* offset 17413 */
  31628   "\xe8\xa3\x97\0" /* offset 17418 */
  31629   "\xe8\xa3\x9e\0" /* offset 17422 */
  31630   "\xe4\x98\xb5\0" /* offset 17426 */
  31631   "\xe8\xa3\xba\0" /* offset 17430 */
  31632   "\xe3\x92\xbb\0" /* offset 17434 */
  31633   "\xf0\xa7\xa2\xae\0" /* offset 17438 */
  31634   "\xf0\xa7\xa5\xa6\0" /* offset 17443 */
  31635   "\xe4\x9a\xbe\0" /* offset 17448 */
  31636   "\xe4\x9b\x87\0" /* offset 17452 */
  31637   "\xe8\xaa\xa0\0" /* offset 17456 */
  31638   "\xf0\xa7\xb2\xa8\0" /* offset 17460 */
  31639   "\xe8\xb2\xab\0" /* offset 17465 */
  31640   "\xe8\xb3\x81\0" /* offset 17469 */
  31641   "\xe8\xb4\x9b\0" /* offset 17473 */
  31642   "\xe8\xb5\xb7\0" /* offset 17477 */
  31643   "\xf0\xa7\xbc\xaf\0" /* offset 17481 */
  31644   "\xf0\xa0\xa0\x84\0" /* offset 17486 */
  31645   "\xe8\xb7\x8b\0" /* offset 17491 */
  31646   "\xe8\xb6\xbc\0" /* offset 17495 */
  31647   "\xe8\xb7\xb0\0" /* offset 17499 */
  31648   "\xf0\xa0\xa3\x9e\0" /* offset 17503 */
  31649   "\xe8\xbb\x94\0" /* offset 17508 */
  31650   "\xf0\xa8\x97\x92\0" /* offset 17512 */
  31651   "\xf0\xa8\x97\xad\0" /* offset 17517 */
  31652   "\xe9\x82\x94\0" /* offset 17522 */
  31653   "\xe9\x83\xb1\0" /* offset 17526 */
  31654   "\xe9\x84\x91\0" /* offset 17530 */
  31655   "\xf0\xa8\x9c\xae\0" /* offset 17534 */
  31656   "\xe9\x84\x9b\0" /* offset 17539 */
  31657   "\xe9\x88\xb8\0" /* offset 17543 */
  31658   "\xe9\x8b\x97\0" /* offset 17547 */
  31659   "\xe9\x8b\x98\0" /* offset 17551 */
  31660   "\xe9\x89\xbc\0" /* offset 17555 */
  31661   "\xe9\x8f\xb9\0" /* offset 17559 */
  31662   "\xe9\x90\x95\0" /* offset 17563 */
  31663   "\xf0\xa8\xaf\xba\0" /* offset 17567 */
  31664   "\xe9\x96\x8b\0" /* offset 17572 */
  31665   "\xe4\xa6\x95\0" /* offset 17576 */
  31666   "\xe9\x96\xb7\0" /* offset 17580 */
  31667   "\xf0\xa8\xb5\xb7\0" /* offset 17584 */
  31668   "\xe4\xa7\xa6\0" /* offset 17589 */
  31669   "\xe9\x9b\x83\0" /* offset 17593 */
  31670   "\xe5\xb6\xb2\0" /* offset 17597 */
  31671   "\xe9\x9c\xa3\0" /* offset 17601 */
  31672   "\xf0\xa9\x85\x85\0" /* offset 17605 */
  31673   "\xf0\xa9\x88\x9a\0" /* offset 17610 */
  31674   "\xe4\xa9\xae\0" /* offset 17615 */
  31675   "\xe4\xa9\xb6\0" /* offset 17619 */
  31676   "\xe9\x9f\xa0\0" /* offset 17623 */
  31677   "\xf0\xa9\x90\x8a\0" /* offset 17627 */
  31678   "\xe4\xaa\xb2\0" /* offset 17632 */
  31679   "\xf0\xa9\x92\x96\0" /* offset 17636 */
  31680   "\xe9\xa0\xa9\0" /* offset 17641 */
  31681   "\xf0\xa9\x96\xb6\0" /* offset 17645 */
  31682   "\xe9\xa3\xa2\0" /* offset 17650 */
  31683   "\xe4\xac\xb3\0" /* offset 17654 */
  31684   "\xe9\xa4\xa9\0" /* offset 17658 */
  31685   "\xe9\xa6\xa7\0" /* offset 17662 */
  31686   "\xe9\xa7\x82\0" /* offset 17666 */
  31687   "\xe9\xa7\xbe\0" /* offset 17670 */
  31688   "\xe4\xaf\x8e\0" /* offset 17674 */
  31689   "\xf0\xa9\xac\xb0\0" /* offset 17678 */
  31690   "\xe9\xb1\x80\0" /* offset 17683 */
  31691   "\xe9\xb3\xbd\0" /* offset 17687 */
  31692   "\xe4\xb3\x8e\0" /* offset 17691 */
  31693   "\xe4\xb3\xad\0" /* offset 17695 */
  31694   "\xe9\xb5\xa7\0" /* offset 17699 */
  31695   "\xf0\xaa\x83\x8e\0" /* offset 17703 */
  31696   "\xe4\xb3\xb8\0" /* offset 17708 */
  31697   "\xf0\xaa\x84\x85\0" /* offset 17712 */
  31698   "\xf0\xaa\x88\x8e\0" /* offset 17717 */
  31699   "\xf0\xaa\x8a\x91\0" /* offset 17722 */
  31700   "\xe4\xb5\x96\0" /* offset 17727 */
  31701   "\xe9\xbb\xbe\0" /* offset 17731 */
  31702   "\xe9\xbc\x85\0" /* offset 17735 */
  31703   "\xe9\xbc\x8f\0" /* offset 17739 */
  31704   "\xe9\xbc\x96\0" /* offset 17743 */
  31705   "\xf0\xaa\x98\x80\0" /* offset 17747 */;
  31706 
  31707 
  31708 const uint8_t codeSzUTF8[256] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,6,6,1,1};
  31709 
  31710 static const char type_data[][256] = {
  31711   { /* page 0, index 0 */
  31712     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31713     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31714     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31715     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31716     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31717     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31718     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31719     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31720     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31721     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31722     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_SPACE_SEPARATOR,
  31723     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  31724     UNICODE_OTHER_PUNCTUATION, UNICODE_CURRENCY_SYMBOL,
  31725     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  31726     UNICODE_OTHER_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  31727     UNICODE_CLOSE_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  31728     UNICODE_MATH_SYMBOL, UNICODE_OTHER_PUNCTUATION,
  31729     UNICODE_DASH_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  31730     UNICODE_OTHER_PUNCTUATION, UNICODE_DECIMAL_NUMBER,
  31731     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  31732     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  31733     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  31734     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  31735     UNICODE_DECIMAL_NUMBER, UNICODE_OTHER_PUNCTUATION,
  31736     UNICODE_OTHER_PUNCTUATION, UNICODE_MATH_SYMBOL,
  31737     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  31738     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  31739     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31740     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31741     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31742     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31743     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31744     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31745     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31746     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31747     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31748     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31749     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31750     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31751     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31752     UNICODE_OPEN_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  31753     UNICODE_CLOSE_PUNCTUATION, UNICODE_MODIFIER_SYMBOL,
  31754     UNICODE_CONNECT_PUNCTUATION, UNICODE_MODIFIER_SYMBOL,
  31755     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31756     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31757     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31758     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31759     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31760     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31761     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31762     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31763     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31764     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31765     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31766     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31767     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31768     UNICODE_OPEN_PUNCTUATION, UNICODE_MATH_SYMBOL,
  31769     UNICODE_CLOSE_PUNCTUATION, UNICODE_MATH_SYMBOL, UNICODE_CONTROL,
  31770     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31771     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31772     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31773     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31774     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31775     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31776     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31777     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31778     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31779     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_CONTROL,
  31780     UNICODE_CONTROL, UNICODE_CONTROL, UNICODE_SPACE_SEPARATOR,
  31781     UNICODE_OTHER_PUNCTUATION, UNICODE_CURRENCY_SYMBOL,
  31782     UNICODE_CURRENCY_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  31783     UNICODE_CURRENCY_SYMBOL, UNICODE_OTHER_SYMBOL,
  31784     UNICODE_OTHER_PUNCTUATION, UNICODE_MODIFIER_SYMBOL,
  31785     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_LETTER,
  31786     UNICODE_INITIAL_PUNCTUATION, UNICODE_MATH_SYMBOL, UNICODE_FORMAT,
  31787     UNICODE_OTHER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  31788     UNICODE_OTHER_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_OTHER_NUMBER,
  31789     UNICODE_OTHER_NUMBER, UNICODE_MODIFIER_SYMBOL,
  31790     UNICODE_LOWERCASE_LETTER, UNICODE_OTHER_PUNCTUATION,
  31791     UNICODE_OTHER_PUNCTUATION, UNICODE_MODIFIER_SYMBOL,
  31792     UNICODE_OTHER_NUMBER, UNICODE_OTHER_LETTER,
  31793     UNICODE_FINAL_PUNCTUATION, UNICODE_OTHER_NUMBER,
  31794     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  31795     UNICODE_OTHER_PUNCTUATION, UNICODE_UPPERCASE_LETTER,
  31796     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31797     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31798     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31799     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31800     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31801     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31802     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31803     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31804     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31805     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31806     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31807     UNICODE_MATH_SYMBOL, UNICODE_UPPERCASE_LETTER,
  31808     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31809     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31810     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31811     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31812     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31813     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31814     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31815     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31816     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31817     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31818     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31819     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31820     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31821     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31822     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31823     UNICODE_MATH_SYMBOL, UNICODE_LOWERCASE_LETTER,
  31824     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31825     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31826     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31827     UNICODE_LOWERCASE_LETTER
  31828   },
  31829   { /* page 1, index 1 */
  31830     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31831     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31832     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31833     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31834     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31835     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31836     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31837     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31838     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31839     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31840     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31841     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31842     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31843     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31844     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31845     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31846     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31847     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31848     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31849     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31850     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31851     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31852     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31853     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31854     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31855     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31856     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31857     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31858     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31859     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31860     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31861     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31862     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31863     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31864     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31865     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31866     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31867     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31868     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31869     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31870     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31871     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31872     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31873     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31874     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31875     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31876     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31877     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31878     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31879     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31880     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31881     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31882     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31883     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31884     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31885     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31886     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31887     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31888     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31889     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31890     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31891     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31892     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31893     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31894     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31895     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31896     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31897     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31898     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31899     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31900     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31901     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31902     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31903     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31904     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31905     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31906     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31907     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31908     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31909     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31910     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31911     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31912     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31913     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31914     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31915     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31916     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31917     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31918     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31919     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31920     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31921     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31922     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31923     UNICODE_LOWERCASE_LETTER, UNICODE_OTHER_LETTER,
  31924     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31925     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31926     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  31927     UNICODE_OTHER_LETTER, UNICODE_UPPERCASE_LETTER,
  31928     UNICODE_TITLECASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31929     UNICODE_UPPERCASE_LETTER, UNICODE_TITLECASE_LETTER,
  31930     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31931     UNICODE_TITLECASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31932     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31933     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31934     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31935     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31936     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31937     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31938     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31939     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31940     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31941     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31942     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31943     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31944     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31945     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31946     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31947     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31948     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31949     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31950     UNICODE_UPPERCASE_LETTER, UNICODE_TITLECASE_LETTER,
  31951     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31952     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31953     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31954     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31955     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31956     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31957     UNICODE_LOWERCASE_LETTER
  31958   },
  31959   { /* page 2, index 2 */
  31960     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31961     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31962     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31963     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31964     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31965     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31966     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31967     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31968     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31969     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31970     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31971     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31972     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31973     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31974     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31975     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31976     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31977     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31978     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31979     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31980     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31981     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31982     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31983     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31984     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31985     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31986     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31987     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31988     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31989     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31990     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31991     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31992     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31993     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31994     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  31995     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31996     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31997     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31998     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  31999     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32000     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32001     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32002     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32003     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32004     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32005     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32006     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32007     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32008     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32009     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32010     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32011     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32012     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32013     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32014     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32015     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32016     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32017     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32018     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32019     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32020     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32021     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32022     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32023     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32024     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32025     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32026     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32027     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32028     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32029     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32030     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32031     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32032     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32033     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32034     UNICODE_OTHER_LETTER, UNICODE_LOWERCASE_LETTER,
  32035     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32036     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32037     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32038     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32039     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32040     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32041     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32042     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32043     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32044     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32045     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32046     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32047     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32048     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  32049     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  32050     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  32051     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  32052     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  32053     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  32054     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  32055     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  32056     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  32057     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32058     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32059     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  32060     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  32061     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  32062     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  32063     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  32064     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  32065     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32066     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32067     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32068     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32069     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32070     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32071     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32072     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  32073     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  32074     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_SYMBOL,
  32075     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32076     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32077     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32078     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_SYMBOL,
  32079     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_SYMBOL,
  32080     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32081     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32082     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32083     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32084     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32085     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32086     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  32087     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL
  32088   },
  32089   { /* page 3, index 3 */
  32090     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32091     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32092     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32093     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32094     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32095     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32096     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32097     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32098     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32099     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32100     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32101     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32102     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32103     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32104     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32105     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32106     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32107     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32108     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32109     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32110     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32111     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32112     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32113     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32114     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32115     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32116     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32117     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32118     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32119     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32120     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32121     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32122     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32123     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32124     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32125     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32126     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32127     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32128     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32129     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32130     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32131     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32132     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32133     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32134     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32135     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32136     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32137     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32138     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32139     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32140     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32141     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32142     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32143     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32144     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32145     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32146     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32147     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32148     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_SYMBOL,
  32149     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32150     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_MODIFIER_LETTER,
  32151     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32152     UNICODE_LOWERCASE_LETTER, UNICODE_OTHER_PUNCTUATION,
  32153     UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32154     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_MODIFIER_SYMBOL,
  32155     UNICODE_MODIFIER_SYMBOL, UNICODE_UPPERCASE_LETTER,
  32156     UNICODE_OTHER_PUNCTUATION, UNICODE_UPPERCASE_LETTER,
  32157     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32158     UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED,
  32159     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32160     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32161     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32162     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32163     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32164     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32165     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32166     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32167     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32168     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32169     UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER,
  32170     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32171     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32172     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32173     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32174     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32175     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32176     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32177     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32178     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32179     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32180     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32181     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32182     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32183     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32184     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32185     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32186     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32187     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32188     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32189     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32190     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32191     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32192     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32193     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32194     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32195     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32196     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32197     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32198     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32199     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32200     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32201     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32202     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32203     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32204     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32205     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32206     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32207     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32208     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32209     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32210     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32211     UNICODE_MATH_SYMBOL, UNICODE_UPPERCASE_LETTER,
  32212     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32213     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32214     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32215     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER
  32216   },
  32217   { /* page 4, index 4 */
  32218     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32219     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32220     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32221     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32222     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32223     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32224     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32225     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32226     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32227     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32228     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32229     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32230     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32231     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32232     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32233     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32234     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32235     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32236     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32237     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32238     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32239     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32240     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32241     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32242     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32243     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32244     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32245     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32246     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32247     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32248     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32249     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32250     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32251     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32252     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32253     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32254     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32255     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32256     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32257     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32258     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32259     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32260     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32261     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32262     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32263     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32264     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32265     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32266     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32267     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32268     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32269     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32270     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32271     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32272     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32273     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32274     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32275     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32276     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32277     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32278     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32279     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32280     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32281     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32282     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32283     UNICODE_OTHER_SYMBOL, UNICODE_NON_SPACING_MARK,
  32284     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32285     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32286     UNICODE_ENCLOSING_MARK, UNICODE_ENCLOSING_MARK,
  32287     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32288     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32289     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32290     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32291     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32292     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32293     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32294     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32295     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32296     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32297     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32298     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32299     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32300     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32301     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32302     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32303     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32304     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32305     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32306     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32307     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32308     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32309     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32310     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32311     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32312     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32313     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32314     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32315     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32316     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32317     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32318     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32319     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32320     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32321     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32322     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32323     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32324     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32325     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32326     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32327     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32328     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32329     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32330     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32331     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32332     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32333     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32334     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32335     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32336     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32337     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32338     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32339     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32340     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32341     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32342     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32343     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32344     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32345     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER
  32346   },
  32347   { /* page 5, index 5 */
  32348     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32349     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32350     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32351     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32352     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32353     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32354     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32355     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32356     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32357     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32358     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32359     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32360     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32361     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32362     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32363     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32364     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32365     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32366     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32367     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32368     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32369     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32370     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32371     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32372     UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER,
  32373     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32374     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32375     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32376     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32377     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32378     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32379     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32380     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32381     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32382     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32383     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32384     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32385     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32386     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32387     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32388     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32389     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32390     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  32391     UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32392     UNICODE_MODIFIER_LETTER, UNICODE_OTHER_PUNCTUATION,
  32393     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32394     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32395     UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED,
  32396     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32397     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32398     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32399     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32400     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32401     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32402     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32403     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32404     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32405     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32406     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32407     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32408     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32409     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32410     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32411     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32412     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32413     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32414     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  32415     UNICODE_LOWERCASE_LETTER, UNICODE_UNASSIGNED,
  32416     UNICODE_OTHER_PUNCTUATION, UNICODE_DASH_PUNCTUATION,
  32417     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL,
  32418     UNICODE_OTHER_SYMBOL, UNICODE_CURRENCY_SYMBOL, UNICODE_UNASSIGNED,
  32419     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32420     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32421     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32422     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32423     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32424     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32425     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32426     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32427     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32428     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32429     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32430     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32431     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32432     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32433     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32434     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32435     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32436     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32437     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32438     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32439     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32440     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32441     UNICODE_NON_SPACING_MARK, UNICODE_DASH_PUNCTUATION,
  32442     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_PUNCTUATION,
  32443     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32444     UNICODE_OTHER_PUNCTUATION, UNICODE_NON_SPACING_MARK,
  32445     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_PUNCTUATION,
  32446     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32447     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32448     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32449     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32450     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32451     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32452     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32453     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32454     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32455     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32456     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32457     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32458     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32459     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  32460     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32461     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32462     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32463     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32464     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32465     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  32466   },
  32467   { /* page 6, index 6 */
  32468     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  32469     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_MATH_SYMBOL,
  32470     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  32471     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32472     UNICODE_CURRENCY_SYMBOL, UNICODE_OTHER_PUNCTUATION,
  32473     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_SYMBOL,
  32474     UNICODE_OTHER_SYMBOL, UNICODE_NON_SPACING_MARK,
  32475     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32476     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32477     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32478     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32479     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32480     UNICODE_OTHER_PUNCTUATION, UNICODE_FORMAT, UNICODE_UNASSIGNED,
  32481     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32482     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32483     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32484     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32485     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32486     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32487     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32488     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32489     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32490     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32491     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32492     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32493     UNICODE_MODIFIER_LETTER, UNICODE_OTHER_LETTER,
  32494     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32495     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32496     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32497     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32498     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32499     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32500     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32501     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32502     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32503     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32504     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32505     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32506     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32507     UNICODE_NON_SPACING_MARK, UNICODE_DECIMAL_NUMBER,
  32508     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32509     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32510     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32511     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32512     UNICODE_DECIMAL_NUMBER, UNICODE_OTHER_PUNCTUATION,
  32513     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32514     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_LETTER,
  32515     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  32516     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32517     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32518     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32519     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32520     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32521     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32522     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32523     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32524     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32525     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32526     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32527     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32528     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32529     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32530     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32531     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32532     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32533     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32534     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32535     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32536     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32537     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32538     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32539     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32540     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32541     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32542     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32543     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32544     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32545     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32546     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32547     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32548     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32549     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_LETTER,
  32550     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32551     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32552     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32553     UNICODE_NON_SPACING_MARK, UNICODE_FORMAT, UNICODE_OTHER_SYMBOL,
  32554     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32555     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32556     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32557     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  32558     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32559     UNICODE_OTHER_SYMBOL, UNICODE_NON_SPACING_MARK,
  32560     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32561     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  32562     UNICODE_OTHER_LETTER, UNICODE_DECIMAL_NUMBER,
  32563     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32564     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32565     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32566     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32567     UNICODE_DECIMAL_NUMBER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32568     UNICODE_OTHER_LETTER, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  32569     UNICODE_OTHER_LETTER
  32570   },
  32571   { /* page 7, index 7 */
  32572     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32573     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32574     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32575     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32576     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32577     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32578     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32579     UNICODE_UNASSIGNED, UNICODE_FORMAT, UNICODE_OTHER_LETTER,
  32580     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  32581     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32582     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32583     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32584     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32585     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32586     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32587     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32588     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32589     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32590     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32591     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32592     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32593     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32594     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32595     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32596     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32597     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32598     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32599     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32600     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32601     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32602     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32603     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32604     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32605     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32606     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32607     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32608     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32609     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32610     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32611     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32612     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32613     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32614     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32615     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32616     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32617     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32618     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32619     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32620     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32621     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32622     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32623     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32624     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32625     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32626     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32627     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32628     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32629     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32630     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32631     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32632     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32633     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32634     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32635     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32636     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32637     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32638     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32639     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32640     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  32641     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32642     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32643     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32644     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32645     UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32646     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32647     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32648     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32649     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32650     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32651     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32652     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32653     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32654     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32655     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32656     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32657     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32658     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32659     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32660     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32661     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32662     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32663     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32664     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32665     UNICODE_NON_SPACING_MARK, UNICODE_MODIFIER_LETTER,
  32666     UNICODE_MODIFIER_LETTER, UNICODE_OTHER_SYMBOL,
  32667     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32668     UNICODE_OTHER_PUNCTUATION, UNICODE_MODIFIER_LETTER,
  32669     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32670     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  32671   },
  32672   { /* page 8, index 8 */
  32673     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32674     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32675     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32676     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32677     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32678     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32679     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32680     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  32681     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32682     UNICODE_NON_SPACING_MARK, UNICODE_MODIFIER_LETTER,
  32683     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32684     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32685     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32686     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32687     UNICODE_NON_SPACING_MARK, UNICODE_MODIFIER_LETTER,
  32688     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32689     UNICODE_NON_SPACING_MARK, UNICODE_MODIFIER_LETTER,
  32690     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32691     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32692     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32693     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32694     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32695     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32696     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32697     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32698     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32699     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32700     UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED,
  32701     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32702     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32703     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32704     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32705     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32706     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32707     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32708     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32709     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  32710     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32711     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_PUNCTUATION,
  32712     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32713     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32714     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32715     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32716     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32717     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32718     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32719     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32720     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32721     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32722     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32723     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32724     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32725     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32726     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32727     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32728     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32729     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32730     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32731     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32732     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32733     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  32734     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32735     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32736     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32737     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32738     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32739     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32740     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  32741     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32742     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32743     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  32744     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32745     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32746     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32747     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32748     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32749     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32750     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32751     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32752     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32753     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32754     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32755     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32756     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32757     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK, UNICODE_FORMAT,
  32758     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32759     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32760     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32761     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32762     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32763     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32764     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32765     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32766     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32767     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32768     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32769     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32770     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32771     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32772     UNICODE_NON_SPACING_MARK
  32773   },
  32774   { /* page 9, index 9 */
  32775     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32776     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  32777     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32778     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32779     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32780     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32781     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32782     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32783     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32784     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32785     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32786     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32787     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32788     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32789     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32790     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32791     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32792     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32793     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32794     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32795     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  32796     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  32797     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  32798     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32799     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32800     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32801     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32802     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  32803     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32804     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_OTHER_LETTER,
  32805     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32806     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32807     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32808     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  32809     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32810     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32811     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32812     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32813     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  32814     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32815     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32816     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32817     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32818     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32819     UNICODE_OTHER_PUNCTUATION, UNICODE_MODIFIER_LETTER,
  32820     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32821     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32822     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32823     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32824     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32825     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  32826     UNICODE_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  32827     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32828     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32829     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32830     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  32831     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32832     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32833     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32834     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32835     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32836     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32837     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32838     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  32839     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32840     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32841     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  32842     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32843     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32844     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32845     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  32846     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  32847     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32848     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32849     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_SPACING_MARK,
  32850     UNICODE_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32851     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  32852     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  32853     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32854     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32855     UNICODE_UNASSIGNED, UNICODE_SPACING_MARK, UNICODE_UNASSIGNED,
  32856     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32857     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  32858     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32859     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32860     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER,
  32861     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32862     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32863     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32864     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32865     UNICODE_DECIMAL_NUMBER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32866     UNICODE_CURRENCY_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  32867     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  32868     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  32869     UNICODE_OTHER_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  32870     UNICODE_OTHER_LETTER, UNICODE_OTHER_PUNCTUATION,
  32871     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  32872   },
  32873   { /* page 10, index 10 */
  32874     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  32875     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_UNASSIGNED,
  32876     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32877     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32878     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32879     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32880     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  32881     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32882     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32883     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32884     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32885     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32886     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32887     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32888     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32889     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32890     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  32891     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  32892     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  32893     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  32894     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED,
  32895     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  32896     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32897     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32898     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  32899     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32900     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32901     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32902     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED,
  32903     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32904     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32905     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32906     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  32907     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32908     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32909     UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32910     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32911     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32912     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32913     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32914     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32915     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32916     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32917     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32918     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32919     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32920     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32921     UNICODE_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  32922     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32923     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32924     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  32925     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32926     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32927     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32928     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32929     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32930     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32931     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32932     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32933     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  32934     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32935     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32936     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  32937     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  32938     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32939     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32940     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  32941     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  32942     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32943     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32944     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED,
  32945     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32946     UNICODE_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_SPACING_MARK,
  32947     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED,
  32948     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  32949     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32950     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32951     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32952     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32953     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  32954     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  32955     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32956     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32957     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32958     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32959     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32960     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  32961     UNICODE_OTHER_PUNCTUATION, UNICODE_CURRENCY_SYMBOL,
  32962     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32963     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32964     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  32965     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32966     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32967     UNICODE_NON_SPACING_MARK
  32968   },
  32969   { /* page 11, index 11 */
  32970     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  32971     UNICODE_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  32972     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32973     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32974     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32975     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  32976     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32977     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32978     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32979     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32980     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32981     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32982     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32983     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  32984     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32985     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32986     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  32987     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  32988     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  32989     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32990     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  32991     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32992     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32993     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  32994     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32995     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_UNASSIGNED,
  32996     UNICODE_UNASSIGNED, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  32997     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32998     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  32999     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33000     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_UNASSIGNED,
  33001     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33002     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33003     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33004     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33005     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER,
  33006     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33007     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33008     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33009     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33010     UNICODE_DECIMAL_NUMBER, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_LETTER,
  33011     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33012     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33013     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33014     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33015     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33016     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  33017     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33018     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33019     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33020     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33021     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33022     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33023     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33024     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33025     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33026     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33027     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33028     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33029     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33030     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33031     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33032     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33033     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33034     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33035     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33036     UNICODE_UNASSIGNED, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33037     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  33038     UNICODE_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33039     UNICODE_UNASSIGNED, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33040     UNICODE_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_SPACING_MARK,
  33041     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33042     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33043     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33044     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33045     UNICODE_UNASSIGNED, UNICODE_SPACING_MARK, UNICODE_UNASSIGNED,
  33046     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33047     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33048     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33049     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33050     UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33051     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33052     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33053     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33054     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33055     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33056     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  33057     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  33058     UNICODE_CURRENCY_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  33059     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33060     UNICODE_UNASSIGNED
  33061   },
  33062   { /* page 12, index 12 */
  33063     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  33064     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_UNASSIGNED,
  33065     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33066     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33067     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33068     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33069     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33070     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33071     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33072     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33073     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33074     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33075     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33076     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33077     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33078     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33079     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33080     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33081     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33082     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33083     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33084     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33085     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  33086     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33087     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  33088     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33089     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  33090     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33091     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33092     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33093     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  33094     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33095     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33096     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33097     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33098     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33099     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER,
  33100     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33101     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33102     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33103     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33104     UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33105     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33106     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33107     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33108     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33109     UNICODE_OTHER_NUMBER, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_LETTER,
  33110     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  33111     UNICODE_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33112     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33113     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33114     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33115     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33116     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33117     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33118     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33119     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33120     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33121     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33122     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33123     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33124     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33125     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33126     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33127     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33128     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33129     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33130     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  33131     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33132     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33133     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_UNASSIGNED,
  33134     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  33135     UNICODE_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_SPACING_MARK,
  33136     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33137     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33138     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33139     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_SPACING_MARK,
  33140     UNICODE_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33141     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33142     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33143     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33144     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33145     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER,
  33146     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33147     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33148     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33149     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33150     UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33151     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33152     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33153     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33154     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33155     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  33156   },
  33157   { /* page 13, index 13 */
  33158     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33159     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_UNASSIGNED,
  33160     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33161     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33162     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33163     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33164     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33165     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33166     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33167     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33168     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33169     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33170     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33171     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33172     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33173     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33174     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33175     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33176     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33177     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33178     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33179     UNICODE_OTHER_LETTER, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33180     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33181     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33182     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_SPACING_MARK,
  33183     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_UNASSIGNED,
  33184     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33185     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  33186     UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33187     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33188     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_SPACING_MARK,
  33189     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33190     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33191     UNICODE_OTHER_NUMBER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33192     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  33193     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33194     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33195     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33196     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33197     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33198     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33199     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33200     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33201     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33202     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33203     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33204     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33205     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_UNASSIGNED,
  33206     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33207     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33208     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33209     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33210     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33211     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33212     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33213     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33214     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33215     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33216     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33217     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33218     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33219     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33220     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33221     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33222     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33223     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33224     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33225     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33226     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33227     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33228     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33229     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33230     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_SPACING_MARK,
  33231     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33232     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33233     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED,
  33234     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_SPACING_MARK,
  33235     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33236     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33237     UNICODE_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33238     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33239     UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33240     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33241     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33242     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33243     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED,
  33244     UNICODE_UNASSIGNED, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33245     UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33246     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33247     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33248     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  33249   },
  33250   { /* page 14, index 14 */
  33251     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33252     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33253     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33254     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33255     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33256     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33257     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33258     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33259     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33260     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33261     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33262     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33263     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33264     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33265     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33266     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33267     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  33268     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33269     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33270     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33271     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33272     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33273     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_CURRENCY_SYMBOL,
  33274     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33275     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33276     UNICODE_MODIFIER_LETTER, UNICODE_NON_SPACING_MARK,
  33277     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33278     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33279     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33280     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_PUNCTUATION,
  33281     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33282     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33283     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33284     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33285     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33286     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  33287     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33288     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33289     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33290     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33291     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33292     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33293     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33294     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33295     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33296     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33297     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33298     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33299     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33300     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33301     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33302     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33303     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33304     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33305     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33306     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33307     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33308     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33309     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33310     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33311     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33312     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33313     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33314     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33315     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  33316     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33317     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33318     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33319     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33320     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  33321     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33322     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33323     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33324     UNICODE_UNASSIGNED, UNICODE_MODIFIER_LETTER, UNICODE_UNASSIGNED,
  33325     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33326     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33327     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33328     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER,
  33329     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33330     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33331     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33332     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33333     UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33334     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33335     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33336     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33337     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33338     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33339     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33340     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33341     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33342     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33343     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33344     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33345     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  33346   },
  33347   { /* page 15, index 15 */
  33348     UNICODE_OTHER_LETTER, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  33349     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_PUNCTUATION,
  33350     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  33351     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  33352     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  33353     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  33354     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  33355     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  33356     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  33357     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_PUNCTUATION,
  33358     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  33359     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33360     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  33361     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  33362     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33363     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33364     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33365     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33366     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33367     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33368     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33369     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33370     UNICODE_OTHER_NUMBER, UNICODE_OTHER_SYMBOL,
  33371     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_SYMBOL,
  33372     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_SYMBOL,
  33373     UNICODE_NON_SPACING_MARK, UNICODE_OPEN_PUNCTUATION,
  33374     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  33375     UNICODE_CLOSE_PUNCTUATION, UNICODE_SPACING_MARK,
  33376     UNICODE_SPACING_MARK, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33377     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33378     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33379     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33380     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33381     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33382     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33383     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33384     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33385     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33386     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33387     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33388     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33389     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33390     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33391     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33392     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  33393     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33394     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33395     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33396     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33397     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33398     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33399     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  33400     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33401     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33402     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_PUNCTUATION,
  33403     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33404     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33405     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33406     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33407     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33408     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33409     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33410     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33411     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED,
  33412     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33413     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33414     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33415     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33416     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33417     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33418     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33419     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33420     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33421     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33422     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33423     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33424     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33425     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33426     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33427     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33428     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33429     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33430     UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  33431     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  33432     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  33433     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_SYMBOL,
  33434     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  33435     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  33436     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  33437     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  33438     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  33439     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_SYMBOL,
  33440     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  33441     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  33442     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33443     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33444     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33445     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33446     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33447     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33448     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33449     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33450     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33451     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33452     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33453     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33454     UNICODE_UNASSIGNED
  33455   },
  33456   { /* page 16, index 16 */
  33457     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33458     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33459     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33460     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33461     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33462     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33463     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33464     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33465     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33466     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33467     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33468     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33469     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33470     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33471     UNICODE_OTHER_LETTER, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33472     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33473     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33474     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33475     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33476     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33477     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  33478     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33479     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33480     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33481     UNICODE_OTHER_LETTER, UNICODE_DECIMAL_NUMBER,
  33482     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33483     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33484     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33485     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33486     UNICODE_DECIMAL_NUMBER, UNICODE_OTHER_PUNCTUATION,
  33487     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  33488     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  33489     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_LETTER,
  33490     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33491     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_SPACING_MARK,
  33492     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33493     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  33494     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33495     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33496     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  33497     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33498     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_SPACING_MARK,
  33499     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33500     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33501     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33502     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33503     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33504     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33505     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33506     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33507     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33508     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  33509     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33510     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33511     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33512     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33513     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  33514     UNICODE_SPACING_MARK, UNICODE_DECIMAL_NUMBER,
  33515     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33516     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33517     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33518     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  33519     UNICODE_DECIMAL_NUMBER, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  33520     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33521     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  33522     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33523     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33524     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33525     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33526     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33527     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33528     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33529     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33530     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33531     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33532     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33533     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33534     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33535     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33536     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33537     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33538     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33539     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33540     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33541     UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED,
  33542     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33543     UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED,
  33544     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33545     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33546     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33547     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33548     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33549     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33550     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33551     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33552     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33553     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33554     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33555     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33556     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33557     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33558     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33559     UNICODE_OTHER_PUNCTUATION, UNICODE_MODIFIER_LETTER,
  33560     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER
  33561   },
  33562   { /* page 18, index 17 */
  33563     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33564     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33565     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33566     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33567     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33568     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33569     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33570     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33571     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33572     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33573     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33574     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33575     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33576     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33577     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33578     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33579     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33580     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33581     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33582     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33583     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33584     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33585     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33586     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33587     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33588     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33589     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33590     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33591     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33592     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33593     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33594     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33595     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33596     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33597     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33598     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33599     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33600     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33601     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33602     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33603     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33604     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33605     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33606     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33607     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33608     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33609     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33610     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33611     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33612     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33613     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33614     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33615     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33616     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33617     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33618     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33619     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33620     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33621     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33622     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33623     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33624     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33625     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33626     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33627     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33628     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33629     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33630     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33631     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33632     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33633     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33634     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33635     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33636     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33637     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33638     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33639     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33640     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33641     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33642     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33643     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33644     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33645     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33646     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33647     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33648     UNICODE_OTHER_LETTER
  33649   },
  33650   { /* page 19, index 18 */
  33651     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33652     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33653     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33654     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33655     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33656     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33657     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33658     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33659     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33660     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33661     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33662     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33663     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33664     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33665     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33666     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33667     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33668     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33669     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33670     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33671     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33672     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33673     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33674     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33675     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33676     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33677     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33678     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33679     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33680     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33681     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33682     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33683     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_PUNCTUATION,
  33684     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  33685     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  33686     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  33687     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  33688     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33689     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33690     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33691     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33692     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33693     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  33694     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_UNASSIGNED,
  33695     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33696     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33697     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33698     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33699     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33700     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33701     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  33702     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  33703     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  33704     UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33705     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33706     UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER,
  33707     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33708     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33709     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33710     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33711     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33712     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33713     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33714     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33715     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33716     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33717     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33718     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33719     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33720     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33721     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33722     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33723     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33724     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33725     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33726     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33727     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33728     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33729     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33730     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33731     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33732     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33733     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33734     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33735     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33736     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33737     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33738     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33739     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33740     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33741     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33742     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33743     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33744     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33745     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33746     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33747     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33748     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  33749     UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33750     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  33751     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  33752     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  33753     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  33754   },
  33755   { /* page 20, index 19 */
  33756     UNICODE_DASH_PUNCTUATION, UNICODE_OTHER_LETTER,
  33757     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33758     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33759     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33760     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33761     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33762     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33763     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33764     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33765     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33766     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33767     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33768     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33769     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33770     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33771     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33772     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33773     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33774     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33775     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33776     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33777     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33778     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33779     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33780     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33781     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33782     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33783     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33784     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33785     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33786     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33787     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33788     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33789     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33790     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33791     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33792     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33793     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33794     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33795     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33796     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33797     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33798     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33799     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33800     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33801     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33802     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33803     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33804     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33805     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33806     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33807     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33808     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33809     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33810     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33811     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33812     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33813     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33814     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33815     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33816     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33817     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33818     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33819     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33820     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33821     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33822     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33823     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33824     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33825     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33826     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33827     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33828     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33829     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33830     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33831     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33832     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33833     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33834     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33835     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33836     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33837     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33838     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33839     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33840     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33841     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER
  33842   },
  33843   { /* page 22, index 20 */
  33844     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33845     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33846     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33847     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33848     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33849     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33850     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33851     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33852     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33853     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33854     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33855     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33856     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33857     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33858     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33859     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33860     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33861     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33862     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33863     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33864     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33865     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33866     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33867     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33868     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33869     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33870     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33871     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33872     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33873     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33874     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33875     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33876     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33877     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33878     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33879     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33880     UNICODE_OTHER_LETTER, UNICODE_OTHER_PUNCTUATION,
  33881     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_LETTER,
  33882     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33883     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33884     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33885     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33886     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33887     UNICODE_OTHER_LETTER, UNICODE_SPACE_SEPARATOR,
  33888     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33889     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33890     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33891     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33892     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33893     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33894     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33895     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33896     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33897     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  33898     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33899     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33900     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33901     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33902     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33903     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33904     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33905     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33906     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33907     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33908     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33909     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33910     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33911     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33912     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33913     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33914     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33915     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33916     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33917     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33918     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33919     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33920     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33921     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33922     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33923     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33924     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  33925     UNICODE_OTHER_PUNCTUATION, UNICODE_LETTER_NUMBER,
  33926     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER, UNICODE_OTHER_LETTER,
  33927     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33928     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33929     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33930     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33931     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  33932   },
  33933   { /* page 23, index 21 */
  33934     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33935     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33936     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33937     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33938     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  33939     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33940     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33941     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33942     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33943     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33944     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33945     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33946     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33947     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33948     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33949     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33950     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33951     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33952     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_PUNCTUATION,
  33953     UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33954     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33955     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33956     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33957     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33958     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33959     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33960     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33961     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33962     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  33963     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33964     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33965     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33966     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33967     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33968     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33969     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33970     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33971     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  33972     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33973     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  33974     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33975     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33976     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33977     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  33978     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33979     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33980     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33981     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33982     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33983     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33984     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33985     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33986     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33987     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33988     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33989     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33990     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33991     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33992     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33993     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33994     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33995     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  33996     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33997     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33998     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  33999     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34000     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34001     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  34002     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  34003     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  34004     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  34005     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34006     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34007     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34008     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34009     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34010     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34011     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34012     UNICODE_OTHER_PUNCTUATION, UNICODE_MODIFIER_LETTER,
  34013     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34014     UNICODE_OTHER_PUNCTUATION, UNICODE_CURRENCY_SYMBOL,
  34015     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED,
  34016     UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34017     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34018     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34019     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34020     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED,
  34021     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34022     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_NUMBER,
  34023     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  34024     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  34025     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  34026     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34027     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  34028   },
  34029   { /* page 24, index 22 */
  34030     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34031     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34032     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34033     UNICODE_DASH_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34034     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34035     UNICODE_OTHER_PUNCTUATION, UNICODE_NON_SPACING_MARK,
  34036     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK, UNICODE_FORMAT,
  34037     UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34038     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34039     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34040     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34041     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED,
  34042     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34043     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  34044     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34045     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34046     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34047     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34048     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34049     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34050     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34051     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34052     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34053     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34054     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34055     UNICODE_OTHER_LETTER, UNICODE_MODIFIER_LETTER,
  34056     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34057     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34058     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34059     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34060     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34061     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34062     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34063     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34064     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34065     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34066     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34067     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34068     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34069     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34070     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34071     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34072     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34073     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34074     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34075     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34076     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34077     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34078     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34079     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34080     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34081     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34082     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34083     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34084     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34085     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34086     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34087     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34088     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34089     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34090     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  34091     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34092     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34093     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34094     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34095     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34096     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34097     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34098     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34099     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34100     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34101     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34102     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34103     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34104     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34105     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34106     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34107     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34108     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34109     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34110     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34111     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34112     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34113     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34114     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34115     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34116     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34117     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34118     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34119     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  34120   },
  34121   { /* page 25, index 23 */
  34122     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34123     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34124     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34125     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34126     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34127     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34128     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34129     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34130     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34131     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34132     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  34133     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34134     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  34135     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34136     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  34137     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_UNASSIGNED,
  34138     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34139     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  34140     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  34141     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  34142     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  34143     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34144     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34145     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL,
  34146     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34147     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34148     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34149     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34150     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34151     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34152     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34153     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34154     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34155     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34156     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34157     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34158     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34159     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34160     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34161     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34162     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34163     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  34164     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34165     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34166     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34167     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34168     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34169     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34170     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34171     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34172     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34173     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34174     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34175     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34176     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34177     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34178     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34179     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34180     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34181     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34182     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34183     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  34184     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34185     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34186     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34187     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34188     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34189     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34190     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34191     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34192     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34193     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  34194     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34195     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER,
  34196     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34197     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34198     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34199     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34200     UNICODE_DECIMAL_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_UNASSIGNED,
  34201     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL,
  34202     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  34203     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  34204     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  34205     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  34206     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  34207     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  34208     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  34209     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  34210     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  34211     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  34212     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL
  34213   },
  34214   { /* page 26, index 24 */
  34215     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34216     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34217     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34218     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34219     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34220     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34221     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34222     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34223     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34224     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  34225     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34226     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34227     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34228     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34229     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34230     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34231     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34232     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34233     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34234     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34235     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34236     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34237     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34238     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34239     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34240     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34241     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34242     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34243     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34244     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_SPACING_MARK,
  34245     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  34246     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34247     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34248     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34249     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED,
  34250     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  34251     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  34252     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34253     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34254     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34255     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34256     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  34257     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  34258     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  34259     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34260     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34261     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34262     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34263     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34264     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  34265     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34266     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34267     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34268     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34269     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED,
  34270     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34271     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER,
  34272     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34273     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34274     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34275     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34276     UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34277     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34278     UNICODE_UNASSIGNED, UNICODE_OTHER_PUNCTUATION,
  34279     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34280     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34281     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34282     UNICODE_MODIFIER_LETTER, UNICODE_OTHER_PUNCTUATION,
  34283     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34284     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34285     UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34286     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34287     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34288     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34289     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34290     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34291     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34292     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34293     UNICODE_ENCLOSING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34294     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34295     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34296     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34297     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34298     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34299     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34300     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34301     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34302     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34303     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34304     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34305     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34306     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34307     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34308     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34309     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34310     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34311     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34312     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34313     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34314     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  34315   },
  34316   { /* page 27, index 25 */
  34317     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34318     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34319     UNICODE_SPACING_MARK, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34320     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34321     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34322     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34323     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34324     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34325     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34326     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34327     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34328     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34329     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34330     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34331     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34332     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34333     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34334     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34335     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  34336     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34337     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34338     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  34339     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  34340     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  34341     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34342     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_OTHER_LETTER,
  34343     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34344     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34345     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34346     UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34347     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34348     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34349     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34350     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34351     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34352     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34353     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34354     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_SYMBOL,
  34355     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  34356     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  34357     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  34358     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34359     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34360     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34361     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34362     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_SYMBOL,
  34363     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  34364     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  34365     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  34366     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  34367     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  34368     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34369     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34370     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34371     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34372     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34373     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34374     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34375     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34376     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34377     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34378     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34379     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34380     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  34381     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34382     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  34383     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34384     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  34385     UNICODE_OTHER_LETTER, UNICODE_DECIMAL_NUMBER,
  34386     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34387     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34388     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34389     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34390     UNICODE_DECIMAL_NUMBER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34391     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34392     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34393     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34394     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34395     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34396     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34397     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34398     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34399     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34400     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34401     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34402     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34403     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34404     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34405     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  34406     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34407     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  34408     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  34409     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34410     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  34411     UNICODE_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34412     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34413     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34414     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34415     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION
  34416   },
  34417   { /* page 28, index 26 */
  34418     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34419     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34420     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34421     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34422     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34423     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34424     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34425     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34426     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34427     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34428     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34429     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34430     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  34431     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  34432     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  34433     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34434     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34435     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34436     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34437     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  34438     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34439     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34440     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34441     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34442     UNICODE_OTHER_PUNCTUATION, UNICODE_DECIMAL_NUMBER,
  34443     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34444     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34445     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34446     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34447     UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34448     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34449     UNICODE_OTHER_LETTER, UNICODE_DECIMAL_NUMBER,
  34450     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34451     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34452     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34453     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  34454     UNICODE_DECIMAL_NUMBER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34455     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34456     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34457     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34458     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34459     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34460     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34461     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34462     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34463     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34464     UNICODE_OTHER_LETTER, UNICODE_MODIFIER_LETTER,
  34465     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34466     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34467     UNICODE_MODIFIER_LETTER, UNICODE_OTHER_PUNCTUATION,
  34468     UNICODE_OTHER_PUNCTUATION, UNICODE_LOWERCASE_LETTER,
  34469     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34470     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34471     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34472     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34473     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34474     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34475     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34476     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34477     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34478     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34479     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34480     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34481     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34482     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34483     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34484     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34485     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34486     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34487     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34488     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34489     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34490     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34491     UNICODE_UNASSIGNED, UNICODE_OTHER_PUNCTUATION,
  34492     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34493     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34494     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34495     UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34496     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34497     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34498     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34499     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_PUNCTUATION,
  34500     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34501     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34502     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34503     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34504     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34505     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34506     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  34507     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34508     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34509     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34510     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  34511     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34512     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  34513     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  34514     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  34515     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  34516     UNICODE_OTHER_LETTER, UNICODE_SPACING_MARK,
  34517     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34518     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34519     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  34520   },
  34521   { /* page 29, index 27 */
  34522     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34523     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34524     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34525     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34526     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34527     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34528     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34529     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34530     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34531     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34532     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34533     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34534     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34535     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34536     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34537     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34538     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34539     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34540     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34541     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34542     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34543     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34544     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34545     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34546     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34547     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34548     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34549     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34550     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34551     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34552     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34553     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34554     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34555     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34556     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34557     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34558     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34559     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34560     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34561     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34562     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34563     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34564     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34565     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34566     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34567     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34568     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34569     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34570     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34571     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34572     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34573     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34574     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34575     UNICODE_MODIFIER_LETTER, UNICODE_LOWERCASE_LETTER,
  34576     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34577     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34578     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34579     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34580     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34581     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34582     UNICODE_MODIFIER_LETTER, UNICODE_LOWERCASE_LETTER,
  34583     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34584     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34585     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34586     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34587     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34588     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34589     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34590     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34591     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34592     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34593     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34594     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34595     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34596     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34597     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34598     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34599     UNICODE_LOWERCASE_LETTER, UNICODE_MODIFIER_LETTER,
  34600     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34601     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34602     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34603     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34604     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34605     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34606     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34607     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34608     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34609     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34610     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34611     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34612     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34613     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34614     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34615     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34616     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34617     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34618     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34619     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34620     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34621     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34622     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34623     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34624     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34625     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34626     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34627     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34628     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34629     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34630     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34631     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34632     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34633     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34634     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34635     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34636     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34637     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34638     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34639     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34640     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34641     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34642     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34643     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34644     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34645     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34646     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34647     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  34648     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  34649     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK
  34650   },
  34651   { /* page 30, index 28 */
  34652     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34653     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34654     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34655     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34656     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34657     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34658     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34659     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34660     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34661     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34662     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34663     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34664     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34665     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34666     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34667     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34668     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34669     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34670     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34671     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34672     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34673     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34674     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34675     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34676     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34677     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34678     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34679     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34680     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34681     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34682     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34683     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34684     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34685     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34686     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34687     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34688     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34689     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34690     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34691     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34692     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34693     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34694     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34695     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34696     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34697     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34698     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34699     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34700     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34701     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34702     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34703     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34704     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34705     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34706     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34707     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34708     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34709     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34710     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34711     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34712     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34713     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34714     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34715     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34716     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34717     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34718     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34719     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34720     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34721     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34722     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34723     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34724     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34725     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34726     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34727     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34728     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34729     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34730     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34731     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34732     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34733     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34734     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34735     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34736     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34737     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34738     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34739     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34740     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34741     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34742     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34743     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34744     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34745     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34746     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34747     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34748     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34749     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34750     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34751     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34752     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34753     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34754     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34755     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34756     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34757     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34758     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34759     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34760     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34761     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34762     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34763     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34764     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34765     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34766     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34767     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34768     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34769     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34770     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34771     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34772     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34773     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34774     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34775     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34776     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34777     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34778     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34779     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER
  34780   },
  34781   { /* page 31, index 29 */
  34782     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34783     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34784     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34785     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34786     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34787     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34788     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34789     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34790     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34791     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34792     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34793     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER,
  34794     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34795     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34796     UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34797     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34798     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34799     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34800     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34801     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34802     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34803     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34804     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34805     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34806     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34807     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34808     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34809     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34810     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34811     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34812     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34813     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34814     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34815     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34816     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER,
  34817     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34818     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34819     UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34820     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34821     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34822     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34823     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34824     UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED,
  34825     UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED,
  34826     UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED,
  34827     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34828     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34829     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34830     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34831     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34832     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34833     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34834     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34835     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34836     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34837     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34838     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34839     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34840     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34841     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34842     UNICODE_LOWERCASE_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34843     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34844     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34845     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34846     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34847     UNICODE_TITLECASE_LETTER, UNICODE_TITLECASE_LETTER,
  34848     UNICODE_TITLECASE_LETTER, UNICODE_TITLECASE_LETTER,
  34849     UNICODE_TITLECASE_LETTER, UNICODE_TITLECASE_LETTER,
  34850     UNICODE_TITLECASE_LETTER, UNICODE_TITLECASE_LETTER,
  34851     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34852     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34853     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34854     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34855     UNICODE_TITLECASE_LETTER, UNICODE_TITLECASE_LETTER,
  34856     UNICODE_TITLECASE_LETTER, UNICODE_TITLECASE_LETTER,
  34857     UNICODE_TITLECASE_LETTER, UNICODE_TITLECASE_LETTER,
  34858     UNICODE_TITLECASE_LETTER, UNICODE_TITLECASE_LETTER,
  34859     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34860     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34861     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34862     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34863     UNICODE_TITLECASE_LETTER, UNICODE_TITLECASE_LETTER,
  34864     UNICODE_TITLECASE_LETTER, UNICODE_TITLECASE_LETTER,
  34865     UNICODE_TITLECASE_LETTER, UNICODE_TITLECASE_LETTER,
  34866     UNICODE_TITLECASE_LETTER, UNICODE_TITLECASE_LETTER,
  34867     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34868     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34869     UNICODE_LOWERCASE_LETTER, UNICODE_UNASSIGNED,
  34870     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34871     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34872     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34873     UNICODE_TITLECASE_LETTER, UNICODE_MODIFIER_SYMBOL,
  34874     UNICODE_LOWERCASE_LETTER, UNICODE_MODIFIER_SYMBOL,
  34875     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  34876     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34877     UNICODE_LOWERCASE_LETTER, UNICODE_UNASSIGNED,
  34878     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34879     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34880     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34881     UNICODE_TITLECASE_LETTER, UNICODE_MODIFIER_SYMBOL,
  34882     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  34883     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34884     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34885     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_LOWERCASE_LETTER,
  34886     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34887     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34888     UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED,
  34889     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  34890     UNICODE_MODIFIER_SYMBOL, UNICODE_LOWERCASE_LETTER,
  34891     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34892     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34893     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34894     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34895     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34896     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34897     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  34898     UNICODE_MODIFIER_SYMBOL, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34899     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34900     UNICODE_LOWERCASE_LETTER, UNICODE_UNASSIGNED,
  34901     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  34902     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34903     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  34904     UNICODE_TITLECASE_LETTER, UNICODE_MODIFIER_SYMBOL,
  34905     UNICODE_MODIFIER_SYMBOL, UNICODE_UNASSIGNED
  34906   },
  34907   { /* page 32, index 30 */
  34908     UNICODE_SPACE_SEPARATOR, UNICODE_SPACE_SEPARATOR,
  34909     UNICODE_SPACE_SEPARATOR, UNICODE_SPACE_SEPARATOR,
  34910     UNICODE_SPACE_SEPARATOR, UNICODE_SPACE_SEPARATOR,
  34911     UNICODE_SPACE_SEPARATOR, UNICODE_SPACE_SEPARATOR,
  34912     UNICODE_SPACE_SEPARATOR, UNICODE_SPACE_SEPARATOR,
  34913     UNICODE_SPACE_SEPARATOR, UNICODE_FORMAT, UNICODE_FORMAT,
  34914     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  34915     UNICODE_DASH_PUNCTUATION, UNICODE_DASH_PUNCTUATION,
  34916     UNICODE_DASH_PUNCTUATION, UNICODE_DASH_PUNCTUATION,
  34917     UNICODE_DASH_PUNCTUATION, UNICODE_DASH_PUNCTUATION,
  34918     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34919     UNICODE_INITIAL_PUNCTUATION, UNICODE_FINAL_PUNCTUATION,
  34920     UNICODE_OPEN_PUNCTUATION, UNICODE_INITIAL_PUNCTUATION,
  34921     UNICODE_INITIAL_PUNCTUATION, UNICODE_FINAL_PUNCTUATION,
  34922     UNICODE_OPEN_PUNCTUATION, UNICODE_INITIAL_PUNCTUATION,
  34923     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34924     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34925     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34926     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34927     UNICODE_LINE_SEPARATOR, UNICODE_PARAGRAPH_SEPARATOR,
  34928     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  34929     UNICODE_FORMAT, UNICODE_SPACE_SEPARATOR, UNICODE_OTHER_PUNCTUATION,
  34930     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34931     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34932     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34933     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34934     UNICODE_INITIAL_PUNCTUATION, UNICODE_FINAL_PUNCTUATION,
  34935     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34936     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34937     UNICODE_CONNECT_PUNCTUATION, UNICODE_CONNECT_PUNCTUATION,
  34938     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34939     UNICODE_OTHER_PUNCTUATION, UNICODE_MATH_SYMBOL,
  34940     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  34941     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34942     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34943     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34944     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34945     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34946     UNICODE_OTHER_PUNCTUATION, UNICODE_MATH_SYMBOL,
  34947     UNICODE_OTHER_PUNCTUATION, UNICODE_CONNECT_PUNCTUATION,
  34948     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34949     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34950     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34951     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34952     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  34953     UNICODE_SPACE_SEPARATOR, UNICODE_FORMAT, UNICODE_FORMAT,
  34954     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  34955     UNICODE_UNASSIGNED, UNICODE_FORMAT, UNICODE_FORMAT,
  34956     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  34957     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  34958     UNICODE_OTHER_NUMBER, UNICODE_MODIFIER_LETTER, UNICODE_UNASSIGNED,
  34959     UNICODE_UNASSIGNED, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  34960     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  34961     UNICODE_OTHER_NUMBER, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  34962     UNICODE_MATH_SYMBOL, UNICODE_OPEN_PUNCTUATION,
  34963     UNICODE_CLOSE_PUNCTUATION, UNICODE_MODIFIER_LETTER,
  34964     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  34965     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  34966     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  34967     UNICODE_OTHER_NUMBER, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  34968     UNICODE_MATH_SYMBOL, UNICODE_OPEN_PUNCTUATION,
  34969     UNICODE_CLOSE_PUNCTUATION, UNICODE_UNASSIGNED,
  34970     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34971     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34972     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34973     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34974     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34975     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  34976     UNICODE_MODIFIER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34977     UNICODE_UNASSIGNED, UNICODE_CURRENCY_SYMBOL,
  34978     UNICODE_CURRENCY_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  34979     UNICODE_CURRENCY_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  34980     UNICODE_CURRENCY_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  34981     UNICODE_CURRENCY_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  34982     UNICODE_CURRENCY_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  34983     UNICODE_CURRENCY_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  34984     UNICODE_CURRENCY_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  34985     UNICODE_CURRENCY_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  34986     UNICODE_CURRENCY_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  34987     UNICODE_CURRENCY_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  34988     UNICODE_CURRENCY_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  34989     UNICODE_CURRENCY_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  34990     UNICODE_CURRENCY_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  34991     UNICODE_CURRENCY_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  34992     UNICODE_CURRENCY_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  34993     UNICODE_CURRENCY_SYMBOL, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34994     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34995     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34996     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34997     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  34998     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  34999     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35000     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35001     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35002     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35003     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35004     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35005     UNICODE_ENCLOSING_MARK, UNICODE_ENCLOSING_MARK,
  35006     UNICODE_ENCLOSING_MARK, UNICODE_ENCLOSING_MARK,
  35007     UNICODE_NON_SPACING_MARK, UNICODE_ENCLOSING_MARK,
  35008     UNICODE_ENCLOSING_MARK, UNICODE_ENCLOSING_MARK,
  35009     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35010     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35011     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35012     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35013     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35014     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35015     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35016     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35017     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35018     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35019     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  35020   },
  35021   { /* page 33, index 31 */
  35022     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35023     UNICODE_UPPERCASE_LETTER, UNICODE_OTHER_SYMBOL,
  35024     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35025     UNICODE_UPPERCASE_LETTER, UNICODE_OTHER_SYMBOL,
  35026     UNICODE_OTHER_SYMBOL, UNICODE_LOWERCASE_LETTER,
  35027     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35028     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35029     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35030     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35031     UNICODE_LOWERCASE_LETTER, UNICODE_OTHER_SYMBOL,
  35032     UNICODE_UPPERCASE_LETTER, UNICODE_OTHER_SYMBOL,
  35033     UNICODE_OTHER_SYMBOL, UNICODE_MATH_SYMBOL,
  35034     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35035     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35036     UNICODE_UPPERCASE_LETTER, UNICODE_OTHER_SYMBOL,
  35037     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35038     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35039     UNICODE_UPPERCASE_LETTER, UNICODE_OTHER_SYMBOL,
  35040     UNICODE_UPPERCASE_LETTER, UNICODE_OTHER_SYMBOL,
  35041     UNICODE_UPPERCASE_LETTER, UNICODE_OTHER_SYMBOL,
  35042     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35043     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35044     UNICODE_OTHER_SYMBOL, UNICODE_LOWERCASE_LETTER,
  35045     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35046     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35047     UNICODE_LOWERCASE_LETTER, UNICODE_OTHER_LETTER,
  35048     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35049     UNICODE_LOWERCASE_LETTER, UNICODE_OTHER_SYMBOL,
  35050     UNICODE_OTHER_SYMBOL, UNICODE_LOWERCASE_LETTER,
  35051     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35052     UNICODE_UPPERCASE_LETTER, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35053     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35054     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35055     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35056     UNICODE_LOWERCASE_LETTER, UNICODE_OTHER_SYMBOL,
  35057     UNICODE_MATH_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35058     UNICODE_LOWERCASE_LETTER, UNICODE_OTHER_SYMBOL,
  35059     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35060     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35061     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35062     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35063     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35064     UNICODE_OTHER_NUMBER, UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  35065     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  35066     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  35067     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  35068     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  35069     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  35070     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  35071     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  35072     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  35073     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  35074     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  35075     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  35076     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  35077     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  35078     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  35079     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  35080     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  35081     UNICODE_LETTER_NUMBER, UNICODE_UPPERCASE_LETTER,
  35082     UNICODE_LOWERCASE_LETTER, UNICODE_LETTER_NUMBER,
  35083     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  35084     UNICODE_LETTER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_SYMBOL,
  35085     UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35086     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_MATH_SYMBOL,
  35087     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35088     UNICODE_MATH_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35089     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35090     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_OTHER_SYMBOL,
  35091     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35092     UNICODE_MATH_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35093     UNICODE_MATH_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35094     UNICODE_MATH_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35095     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35096     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_MATH_SYMBOL,
  35097     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35098     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35099     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35100     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35101     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35102     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35103     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35104     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35105     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35106     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35107     UNICODE_OTHER_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35108     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_MATH_SYMBOL,
  35109     UNICODE_OTHER_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_OTHER_SYMBOL,
  35110     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35111     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35112     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35113     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35114     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35115     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35116     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35117     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35118     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35119     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35120     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35121     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35122     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35123     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL
  35124   },
  35125   { /* page 35, index 32 */
  35126     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35127     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35128     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35129     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  35130     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  35131     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35132     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35133     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35134     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35135     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35136     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35137     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_MATH_SYMBOL,
  35138     UNICODE_MATH_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35139     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35140     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35141     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  35142     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35143     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35144     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35145     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35146     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35147     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35148     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35149     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35150     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35151     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35152     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35153     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35154     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35155     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35156     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35157     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35158     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35159     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35160     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35161     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35162     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35163     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35164     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35165     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35166     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35167     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35168     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35169     UNICODE_MATH_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35170     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35171     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35172     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35173     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35174     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35175     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35176     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35177     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35178     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35179     UNICODE_OTHER_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35180     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35181     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35182     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35183     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35184     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35185     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35186     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35187     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_OTHER_SYMBOL,
  35188     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35189     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35190     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35191     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35192     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35193     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35194     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35195     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35196     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35197     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35198     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35199     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35200     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35201     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35202     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35203     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35204     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35205     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35206     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35207     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35208     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35209     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35210     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35211     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35212     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL
  35213   },
  35214   { /* page 36, index 33 */
  35215     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35216     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35217     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35218     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35219     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35220     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35221     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35222     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35223     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35224     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35225     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35226     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35227     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35228     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35229     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35230     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35231     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35232     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35233     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35234     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35235     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35236     UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35237     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35238     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35239     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35240     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35241     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35242     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35243     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35244     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35245     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35246     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35247     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35248     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35249     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35250     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35251     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35252     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35253     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35254     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35255     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35256     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35257     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35258     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35259     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35260     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35261     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35262     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35263     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35264     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35265     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35266     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35267     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35268     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35269     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35270     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35271     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35272     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35273     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35274     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35275     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35276     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35277     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35278     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35279     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35280     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35281     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35282     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35283     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35284     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35285     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35286     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35287     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35288     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35289     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35290     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35291     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35292     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35293     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35294     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35295     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35296     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35297     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35298     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35299     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35300     UNICODE_OTHER_NUMBER
  35301   },
  35302   { /* page 37, index 34 */
  35303     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35304     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35305     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35306     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35307     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35308     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35309     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35310     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35311     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35312     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35313     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35314     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35315     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35316     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35317     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35318     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35319     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35320     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35321     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35322     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35323     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35324     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35325     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35326     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35327     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35328     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35329     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35330     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35331     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35332     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35333     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35334     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35335     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35336     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35337     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35338     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35339     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35340     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35341     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35342     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35343     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35344     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35345     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35346     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35347     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35348     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35349     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35350     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35351     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35352     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35353     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35354     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35355     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35356     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35357     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35358     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35359     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35360     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35361     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35362     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35363     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35364     UNICODE_MATH_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35365     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35366     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35367     UNICODE_OTHER_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_OTHER_SYMBOL,
  35368     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35369     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35370     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35371     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35372     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35373     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35374     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35375     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35376     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35377     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35378     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35379     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35380     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35381     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35382     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35383     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35384     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35385     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_MATH_SYMBOL,
  35386     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35387     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35388     UNICODE_MATH_SYMBOL
  35389   },
  35390   { /* page 38, index 35 */
  35391     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35392     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35393     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35394     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35395     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35396     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35397     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35398     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35399     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35400     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35401     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35402     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35403     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35404     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35405     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35406     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35407     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35408     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35409     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35410     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35411     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35412     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35413     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35414     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35415     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35416     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35417     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35418     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35419     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35420     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35421     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35422     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35423     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35424     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35425     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35426     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35427     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35428     UNICODE_MATH_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35429     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35430     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35431     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35432     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35433     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35434     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35435     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35436     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35437     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35438     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35439     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35440     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35441     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35442     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35443     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35444     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35445     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35446     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35447     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35448     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35449     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35450     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35451     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35452     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35453     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35454     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35455     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35456     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35457     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35458     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35459     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35460     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35461     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35462     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35463     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35464     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35465     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35466     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35467     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35468     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35469     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35470     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35471     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35472     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35473     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35474     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35475     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35476     UNICODE_OTHER_SYMBOL
  35477   },
  35478   { /* page 39, index 36 */
  35479     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35480     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35481     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35482     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35483     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35484     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35485     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35486     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35487     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35488     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35489     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35490     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35491     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35492     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35493     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35494     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35495     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35496     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35497     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35498     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35499     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35500     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35501     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35502     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35503     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35504     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35505     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35506     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35507     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35508     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35509     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35510     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35511     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35512     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35513     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35514     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  35515     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  35516     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  35517     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  35518     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  35519     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  35520     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  35521     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35522     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35523     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35524     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35525     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35526     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35527     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35528     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35529     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35530     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  35531     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35532     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35533     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35534     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35535     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35536     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35537     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35538     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35539     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35540     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35541     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35542     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35543     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35544     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35545     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_MATH_SYMBOL,
  35546     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35547     UNICODE_MATH_SYMBOL, UNICODE_OPEN_PUNCTUATION,
  35548     UNICODE_CLOSE_PUNCTUATION, UNICODE_MATH_SYMBOL,
  35549     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35550     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35551     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35552     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35553     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35554     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35555     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35556     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35557     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35558     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35559     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  35560     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  35561     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  35562     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  35563     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  35564     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35565     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35566     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35567     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35568     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35569     UNICODE_MATH_SYMBOL
  35570   },
  35571   { /* page 41, index 37 */
  35572     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35573     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35574     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35575     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35576     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35577     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35578     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35579     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35580     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35581     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35582     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35583     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35584     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35585     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35586     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35587     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35588     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35589     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35590     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35591     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35592     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35593     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35594     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35595     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35596     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35597     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35598     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35599     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35600     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35601     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35602     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35603     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35604     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35605     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35606     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35607     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35608     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35609     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35610     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35611     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35612     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35613     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35614     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35615     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_OPEN_PUNCTUATION,
  35616     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  35617     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  35618     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  35619     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  35620     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  35621     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  35622     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  35623     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  35624     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  35625     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  35626     UNICODE_CLOSE_PUNCTUATION, UNICODE_MATH_SYMBOL,
  35627     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35628     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35629     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35630     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35631     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35632     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35633     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35634     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35635     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35636     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35637     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35638     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35639     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35640     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35641     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35642     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35643     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35644     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35645     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35646     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35647     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_OPEN_PUNCTUATION,
  35648     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  35649     UNICODE_CLOSE_PUNCTUATION, UNICODE_MATH_SYMBOL,
  35650     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35651     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35652     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35653     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35654     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35655     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35656     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35657     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35658     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35659     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35660     UNICODE_MATH_SYMBOL, UNICODE_OPEN_PUNCTUATION,
  35661     UNICODE_CLOSE_PUNCTUATION, UNICODE_MATH_SYMBOL,
  35662     UNICODE_MATH_SYMBOL
  35663   },
  35664   { /* page 43, index 38 */
  35665     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35666     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35667     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35668     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35669     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35670     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35671     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35672     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35673     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35674     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35675     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35676     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35677     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35678     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35679     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35680     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35681     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35682     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35683     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35684     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35685     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35686     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35687     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35688     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_MATH_SYMBOL,
  35689     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  35690     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_OTHER_SYMBOL,
  35691     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35692     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35693     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35694     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35695     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35696     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35697     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35698     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35699     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35700     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35701     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35702     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35703     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  35704     UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35705     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35706     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35707     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35708     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35709     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35710     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35711     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35712     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35713     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35714     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35715     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL,
  35716     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35717     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35718     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35719     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35720     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35721     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35722     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35723     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35724     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35725     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35726     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35727     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35728     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35729     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35730     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35731     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35732     UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35733     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35734     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35735     UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35736     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35737     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35738     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35739     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35740     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35741     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35742     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35743     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL,
  35744     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35745     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35746     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35747     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35748     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35749     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35750     UNICODE_UNASSIGNED
  35751   },
  35752   { /* page 44, index 39 */
  35753     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35754     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35755     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35756     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35757     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35758     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35759     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35760     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35761     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35762     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35763     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35764     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35765     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35766     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35767     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35768     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35769     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35770     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35771     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35772     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35773     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35774     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35775     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35776     UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED,
  35777     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35778     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35779     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35780     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35781     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35782     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35783     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35784     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35785     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35786     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35787     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35788     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35789     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35790     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35791     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35792     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35793     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35794     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35795     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35796     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35797     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35798     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35799     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35800     UNICODE_LOWERCASE_LETTER, UNICODE_UNASSIGNED,
  35801     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35802     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35803     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35804     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35805     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35806     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35807     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35808     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35809     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35810     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35811     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35812     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35813     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35814     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35815     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  35816     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  35817     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35818     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35819     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35820     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35821     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35822     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35823     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35824     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35825     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35826     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35827     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35828     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35829     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35830     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35831     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35832     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35833     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35834     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35835     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35836     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35837     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35838     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35839     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35840     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35841     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35842     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35843     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35844     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35845     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35846     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35847     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35848     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35849     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35850     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35851     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35852     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35853     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35854     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35855     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35856     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35857     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35858     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35859     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35860     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35861     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35862     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35863     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35864     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35865     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35866     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35867     UNICODE_LOWERCASE_LETTER, UNICODE_OTHER_SYMBOL,
  35868     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35869     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  35870     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35871     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35872     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35873     UNICODE_NON_SPACING_MARK, UNICODE_UPPERCASE_LETTER,
  35874     UNICODE_LOWERCASE_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35875     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35876     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  35877     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  35878     UNICODE_OTHER_NUMBER, UNICODE_OTHER_PUNCTUATION,
  35879     UNICODE_OTHER_PUNCTUATION
  35880   },
  35881   { /* page 45, index 40 */
  35882     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35883     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35884     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35885     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35886     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35887     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35888     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35889     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35890     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35891     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35892     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35893     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35894     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35895     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35896     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35897     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35898     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35899     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35900     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  35901     UNICODE_UNASSIGNED, UNICODE_LOWERCASE_LETTER, UNICODE_UNASSIGNED,
  35902     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35903     UNICODE_UNASSIGNED, UNICODE_LOWERCASE_LETTER, UNICODE_UNASSIGNED,
  35904     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35905     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35906     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35907     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35908     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35909     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35910     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35911     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35912     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35913     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35914     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35915     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35916     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35917     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35918     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35919     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35920     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35921     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35922     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35923     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35924     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35925     UNICODE_UNASSIGNED, UNICODE_MODIFIER_LETTER,
  35926     UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35927     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35928     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35929     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35930     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35931     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  35932     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35933     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35934     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35935     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35936     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35937     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35938     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35939     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35940     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35941     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  35942     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35943     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35944     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  35945     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35946     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35947     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  35948     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35949     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35950     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35951     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35952     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  35953     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35954     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35955     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  35956     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35957     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35958     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35959     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35960     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  35961     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35962     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  35963     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  35964     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35965     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35966     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35967     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35968     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35969     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35970     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35971     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35972     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35973     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35974     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35975     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35976     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35977     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35978     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  35979     UNICODE_NON_SPACING_MARK
  35980   },
  35981   { /* page 46, index 41 */
  35982     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  35983     UNICODE_INITIAL_PUNCTUATION, UNICODE_FINAL_PUNCTUATION,
  35984     UNICODE_INITIAL_PUNCTUATION, UNICODE_FINAL_PUNCTUATION,
  35985     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  35986     UNICODE_OTHER_PUNCTUATION, UNICODE_INITIAL_PUNCTUATION,
  35987     UNICODE_FINAL_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  35988     UNICODE_INITIAL_PUNCTUATION, UNICODE_FINAL_PUNCTUATION,
  35989     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  35990     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  35991     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  35992     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  35993     UNICODE_OTHER_PUNCTUATION, UNICODE_DASH_PUNCTUATION,
  35994     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  35995     UNICODE_DASH_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  35996     UNICODE_INITIAL_PUNCTUATION, UNICODE_FINAL_PUNCTUATION,
  35997     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  35998     UNICODE_INITIAL_PUNCTUATION, UNICODE_FINAL_PUNCTUATION,
  35999     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  36000     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  36001     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  36002     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  36003     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36004     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36005     UNICODE_OTHER_PUNCTUATION, UNICODE_MODIFIER_LETTER,
  36006     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36007     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36008     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36009     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36010     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36011     UNICODE_DASH_PUNCTUATION, UNICODE_DASH_PUNCTUATION,
  36012     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36013     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36014     UNICODE_DASH_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36015     UNICODE_OPEN_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36016     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36017     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36018     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36019     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36020     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36021     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36022     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36023     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36024     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36025     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36026     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36027     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36028     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36029     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36030     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36031     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36032     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36033     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36034     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36035     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36036     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36037     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36038     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36039     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36040     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36041     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36042     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36043     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36044     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36045     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  36046     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36047     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36048     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36049     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36050     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36051     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36052     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36053     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36054     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36055     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36056     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36057     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36058     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36059     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36060     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36061     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36062     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36063     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36064     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36065     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36066     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36067     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36068     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36069     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36070     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36071     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36072     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36073     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36074     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36075     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  36076     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36077     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36078     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36079     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  36080   },
  36081   { /* page 47, index 42 */
  36082     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36083     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36084     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36085     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36086     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36087     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36088     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36089     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36090     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36091     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36092     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36093     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36094     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36095     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36096     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36097     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36098     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36099     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36100     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36101     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36102     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36103     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36104     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36105     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36106     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36107     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36108     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36109     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36110     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36111     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36112     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36113     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36114     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36115     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36116     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36117     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36118     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36119     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36120     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36121     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36122     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36123     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36124     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36125     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36126     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36127     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36128     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36129     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36130     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36131     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36132     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36133     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36134     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36135     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36136     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36137     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36138     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36139     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36140     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36141     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36142     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36143     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36144     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36145     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36146     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36147     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36148     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36149     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36150     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36151     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36152     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36153     UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36154     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36155     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36156     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36157     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36158     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36159     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36160     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36161     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36162     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36163     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36164     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36165     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36166     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36167     UNICODE_UNASSIGNED
  36168   },
  36169   { /* page 48, index 43 */
  36170     UNICODE_SPACE_SEPARATOR, UNICODE_OTHER_PUNCTUATION,
  36171     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36172     UNICODE_OTHER_SYMBOL, UNICODE_MODIFIER_LETTER,
  36173     UNICODE_OTHER_LETTER, UNICODE_LETTER_NUMBER,
  36174     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  36175     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  36176     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  36177     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  36178     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  36179     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36180     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  36181     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  36182     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  36183     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  36184     UNICODE_DASH_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  36185     UNICODE_CLOSE_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  36186     UNICODE_OTHER_SYMBOL, UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  36187     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  36188     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  36189     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  36190     UNICODE_LETTER_NUMBER, UNICODE_NON_SPACING_MARK,
  36191     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  36192     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  36193     UNICODE_SPACING_MARK, UNICODE_DASH_PUNCTUATION,
  36194     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  36195     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  36196     UNICODE_MODIFIER_LETTER, UNICODE_OTHER_SYMBOL,
  36197     UNICODE_OTHER_SYMBOL, UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  36198     UNICODE_LETTER_NUMBER, UNICODE_MODIFIER_LETTER,
  36199     UNICODE_OTHER_LETTER, UNICODE_OTHER_PUNCTUATION,
  36200     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  36201     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36202     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36203     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36204     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36205     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36206     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36207     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36208     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36209     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36210     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36211     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36212     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36213     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36214     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36215     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36216     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36217     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36218     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36219     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36220     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36221     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36222     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36223     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36224     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36225     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36226     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36227     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36228     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36229     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  36230     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  36231     UNICODE_NON_SPACING_MARK, UNICODE_MODIFIER_SYMBOL,
  36232     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_LETTER,
  36233     UNICODE_MODIFIER_LETTER, UNICODE_OTHER_LETTER,
  36234     UNICODE_DASH_PUNCTUATION, UNICODE_OTHER_LETTER,
  36235     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36236     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36237     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36238     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36239     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36240     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36241     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36242     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36243     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36244     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36245     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36246     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36247     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36248     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36249     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36250     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36251     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36252     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36253     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36254     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36255     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36256     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36257     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36258     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36259     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36260     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36261     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36262     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36263     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36264     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36265     UNICODE_OTHER_PUNCTUATION, UNICODE_MODIFIER_LETTER,
  36266     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  36267     UNICODE_OTHER_LETTER
  36268   },
  36269   { /* page 49, index 44 */
  36270     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36271     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  36272     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36273     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36274     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36275     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36276     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36277     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36278     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36279     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36280     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36281     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36282     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36283     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36284     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36285     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  36286     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36287     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36288     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36289     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36290     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36291     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36292     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36293     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36294     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36295     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36296     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36297     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36298     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36299     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36300     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36301     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36302     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36303     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36304     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36305     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36306     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36307     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36308     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36309     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36310     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36311     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36312     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36313     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36314     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36315     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36316     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36317     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  36318     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_NUMBER,
  36319     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36320     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36321     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36322     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36323     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36324     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36325     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36326     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36327     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36328     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36329     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36330     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36331     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36332     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36333     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36334     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36335     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36336     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36337     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36338     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36339     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36340     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36341     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36342     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36343     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36344     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36345     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36346     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36347     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36348     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36349     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36350     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36351     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36352     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36353     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36354     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36355     UNICODE_OTHER_LETTER
  36356   },
  36357   { /* page 50, index 45 */
  36358     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36359     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36360     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36361     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36362     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36363     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36364     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36365     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36366     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36367     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36368     UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED, UNICODE_OTHER_NUMBER,
  36369     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36370     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36371     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36372     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36373     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36374     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36375     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36376     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36377     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36378     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36379     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36380     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36381     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36382     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36383     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36384     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_SYMBOL,
  36385     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36386     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36387     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36388     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36389     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36390     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36391     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36392     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36393     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36394     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36395     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36396     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36397     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36398     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36399     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36400     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_NUMBER,
  36401     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36402     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36403     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36404     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36405     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36406     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36407     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36408     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36409     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36410     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36411     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36412     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36413     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36414     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36415     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36416     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36417     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36418     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36419     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36420     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36421     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  36422     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36423     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36424     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36425     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36426     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36427     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36428     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36429     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36430     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36431     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36432     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36433     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36434     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36435     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36436     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36437     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36438     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36439     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36440     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36441     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36442     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36443     UNICODE_UNASSIGNED
  36444   },
  36445   { /* page 77, index 46 */
  36446     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36447     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36448     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36449     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36450     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36451     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36452     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36453     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36454     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36455     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36456     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36457     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36458     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36459     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36460     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36461     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36462     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36463     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36464     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36465     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36466     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36467     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36468     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36469     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36470     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36471     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36472     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36473     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36474     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36475     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36476     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36477     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36478     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36479     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36480     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36481     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36482     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36483     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36484     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36485     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36486     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36487     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36488     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36489     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36490     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36491     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36492     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36493     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36494     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36495     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36496     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36497     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36498     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36499     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36500     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36501     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36502     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36503     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36504     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36505     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36506     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  36507     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36508     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36509     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36510     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36511     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36512     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36513     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36514     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36515     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36516     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36517     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36518     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36519     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36520     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36521     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36522     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36523     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36524     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36525     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36526     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36527     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36528     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36529     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36530     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36531     UNICODE_OTHER_SYMBOL
  36532   },
  36533   { /* page 159, index 47 */
  36534     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36535     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36536     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36537     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36538     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36539     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36540     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36541     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36542     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36543     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36544     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36545     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36546     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36547     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36548     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36549     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36550     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36551     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36552     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36553     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36554     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36555     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36556     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36557     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36558     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36559     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36560     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36561     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36562     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36563     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36564     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36565     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36566     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36567     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36568     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36569     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36570     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36571     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36572     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36573     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36574     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36575     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36576     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36577     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36578     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36579     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36580     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36581     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36582     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36583     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36584     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36585     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36586     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36587     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36588     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36589     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36590     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36591     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36592     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36593     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36594     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36595     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36596     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36597     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36598     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36599     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36600     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36601     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36602     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36603     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36604     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36605     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36606     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36607     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36608     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36609     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36610     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36611     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36612     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36613     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36614     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36615     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36616     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36617     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36618     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36619     UNICODE_UNASSIGNED
  36620   },
  36621   { /* page 160, index 48 */
  36622     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36623     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36624     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36625     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36626     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36627     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36628     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36629     UNICODE_MODIFIER_LETTER, UNICODE_OTHER_LETTER,
  36630     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36631     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36632     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36633     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36634     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36635     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36636     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36637     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36638     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36639     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36640     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36641     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36642     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36643     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36644     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36645     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36646     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36647     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36648     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36649     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36650     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36651     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36652     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36653     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36654     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36655     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36656     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36657     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36658     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36659     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36660     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36661     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36662     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36663     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36664     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36665     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36666     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36667     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36668     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36669     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36670     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36671     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36672     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36673     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36674     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36675     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36676     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36677     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36678     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36679     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36680     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36681     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36682     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36683     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36684     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36685     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36686     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36687     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36688     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36689     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36690     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36691     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36692     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36693     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36694     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36695     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36696     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36697     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36698     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36699     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36700     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36701     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36702     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36703     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36704     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36705     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36706     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36707     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER
  36708   },
  36709   { /* page 164, index 49 */
  36710     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36711     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36712     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36713     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36714     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36715     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36716     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36717     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36718     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36719     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36720     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36721     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36722     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36723     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36724     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36725     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36726     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36727     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36728     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36729     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36730     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36731     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36732     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36733     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36734     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36735     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36736     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36737     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36738     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36739     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36740     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36741     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36742     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36743     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36744     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36745     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36746     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36747     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36748     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36749     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36750     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36751     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36752     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36753     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36754     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36755     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36756     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36757     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36758     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36759     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36760     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36761     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36762     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36763     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36764     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36765     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36766     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36767     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36768     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36769     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36770     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36771     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36772     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36773     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36774     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36775     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  36776     UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36777     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36778     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36779     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36780     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36781     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36782     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36783     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36784     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36785     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36786     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36787     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36788     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36789     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36790     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36791     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36792     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36793     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  36794     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  36795     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  36796     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION
  36797   },
  36798   { /* page 166, index 50 */
  36799     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36800     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36801     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36802     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36803     UNICODE_MODIFIER_LETTER, UNICODE_OTHER_PUNCTUATION,
  36804     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36805     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36806     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36807     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36808     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36809     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36810     UNICODE_OTHER_LETTER, UNICODE_DECIMAL_NUMBER,
  36811     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  36812     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  36813     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  36814     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  36815     UNICODE_DECIMAL_NUMBER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36816     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36817     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36818     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36819     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36820     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36821     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36822     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER,
  36823     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36824     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36825     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36826     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36827     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36828     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36829     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36830     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36831     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36832     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36833     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36834     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36835     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36836     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36837     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36838     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36839     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36840     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36841     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36842     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36843     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36844     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36845     UNICODE_LOWERCASE_LETTER, UNICODE_OTHER_LETTER,
  36846     UNICODE_NON_SPACING_MARK, UNICODE_ENCLOSING_MARK,
  36847     UNICODE_ENCLOSING_MARK, UNICODE_ENCLOSING_MARK,
  36848     UNICODE_OTHER_PUNCTUATION, UNICODE_NON_SPACING_MARK,
  36849     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  36850     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  36851     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  36852     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  36853     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_PUNCTUATION,
  36854     UNICODE_MODIFIER_LETTER, UNICODE_UPPERCASE_LETTER,
  36855     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36856     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36857     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36858     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36859     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36860     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36861     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36862     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36863     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36864     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36865     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36866     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36867     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36868     UNICODE_LOWERCASE_LETTER, UNICODE_MODIFIER_LETTER,
  36869     UNICODE_MODIFIER_LETTER, UNICODE_NON_SPACING_MARK,
  36870     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  36871     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36872     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36873     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36874     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36875     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36876     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36877     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36878     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36879     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36880     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36881     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36882     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36883     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36884     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36885     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36886     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36887     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36888     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36889     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36890     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36891     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36892     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36893     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  36894     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  36895     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  36896     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  36897     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  36898     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  36899     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  36900     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36901     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36902     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  36903     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36904     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  36905     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  36906   },
  36907   { /* page 167, index 51 */
  36908     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  36909     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  36910     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  36911     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  36912     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  36913     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  36914     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  36915     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  36916     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  36917     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  36918     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  36919     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_LETTER,
  36920     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  36921     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  36922     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  36923     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  36924     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  36925     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36926     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36927     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36928     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36929     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36930     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36931     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36932     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36933     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36934     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36935     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36936     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36937     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36938     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36939     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36940     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36941     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36942     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36943     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36944     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36945     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36946     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36947     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36948     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36949     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36950     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36951     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36952     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36953     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36954     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36955     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36956     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36957     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36958     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36959     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36960     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36961     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36962     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36963     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36964     UNICODE_MODIFIER_LETTER, UNICODE_LOWERCASE_LETTER,
  36965     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36966     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36967     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36968     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36969     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36970     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36971     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36972     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36973     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36974     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36975     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36976     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_SYMBOL,
  36977     UNICODE_MODIFIER_SYMBOL, UNICODE_UPPERCASE_LETTER,
  36978     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36979     UNICODE_LOWERCASE_LETTER, UNICODE_OTHER_LETTER,
  36980     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36981     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36982     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36983     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36984     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36985     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36986     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36987     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36988     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36989     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36990     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36991     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36992     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36993     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36994     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36995     UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED,
  36996     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36997     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  36998     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  36999     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37000     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37001     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37002     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37003     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37004     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37005     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37006     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37007     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37008     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37009     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37010     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37011     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37012     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37013     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37014     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37015     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37016     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37017     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37018     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37019     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37020     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37021     UNICODE_OTHER_LETTER, UNICODE_MODIFIER_LETTER,
  37022     UNICODE_MODIFIER_LETTER, UNICODE_LOWERCASE_LETTER,
  37023     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37024     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER
  37025   },
  37026   { /* page 168, index 52 */
  37027     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37028     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  37029     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37030     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  37031     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37032     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  37033     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37034     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37035     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37036     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37037     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37038     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37039     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37040     UNICODE_OTHER_LETTER, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  37041     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37042     UNICODE_SPACING_MARK, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  37043     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  37044     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37045     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  37046     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  37047     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  37048     UNICODE_CURRENCY_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  37049     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37050     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  37051     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37052     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37053     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37054     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37055     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37056     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37057     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37058     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37059     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37060     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37061     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37062     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37063     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37064     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37065     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37066     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37067     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37068     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37069     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37070     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37071     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37072     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_SPACING_MARK,
  37073     UNICODE_SPACING_MARK, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37074     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37075     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37076     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37077     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37078     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37079     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37080     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37081     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37082     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37083     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37084     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37085     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37086     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37087     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37088     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37089     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37090     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  37091     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  37092     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  37093     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  37094     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  37095     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37096     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37097     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37098     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37099     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37100     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37101     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37102     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37103     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37104     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED,
  37105     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37106     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  37107     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37108     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37109     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37110     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37111     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37112     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37113     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37114     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37115     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  37116     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37117     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37118     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37119     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_LETTER,
  37120     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_LETTER,
  37121     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  37122   },
  37123   { /* page 169, index 53 */
  37124     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37125     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37126     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37127     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37128     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37129     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37130     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37131     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37132     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37133     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37134     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37135     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37136     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37137     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37138     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  37139     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37140     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37141     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37142     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_PUNCTUATION,
  37143     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_LETTER,
  37144     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37145     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37146     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37147     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37148     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37149     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37150     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37151     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  37152     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37153     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37154     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37155     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37156     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37157     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_UNASSIGNED,
  37158     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37159     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37160     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37161     UNICODE_UNASSIGNED, UNICODE_OTHER_PUNCTUATION,
  37162     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37163     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37164     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37165     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37166     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37167     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37168     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37169     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37170     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37171     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  37172     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  37173     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37174     UNICODE_SPACING_MARK, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37175     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37176     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37177     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37178     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37179     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37180     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37181     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37182     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37183     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37184     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37185     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37186     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37187     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37188     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37189     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37190     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  37191     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37192     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37193     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  37194     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37195     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  37196     UNICODE_SPACING_MARK, UNICODE_OTHER_PUNCTUATION,
  37197     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37198     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37199     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37200     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37201     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37202     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37203     UNICODE_UNASSIGNED, UNICODE_MODIFIER_LETTER,
  37204     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37205     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37206     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37207     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37208     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED,
  37209     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37210     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37211     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37212     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37213     UNICODE_NON_SPACING_MARK, UNICODE_MODIFIER_LETTER,
  37214     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37215     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37216     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37217     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37218     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37219     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37220     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37221     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37222     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37223     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED
  37224   },
  37225   { /* page 170, index 54 */
  37226     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37227     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37228     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37229     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37230     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37231     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37232     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37233     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37234     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37235     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37236     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37237     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37238     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37239     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37240     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37241     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37242     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37243     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  37244     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37245     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  37246     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37247     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37248     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37249     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37250     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37251     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  37252     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37253     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37254     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  37255     UNICODE_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37256     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37257     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37258     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37259     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37260     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED,
  37261     UNICODE_UNASSIGNED, UNICODE_OTHER_PUNCTUATION,
  37262     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37263     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_LETTER,
  37264     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37265     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37266     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37267     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37268     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37269     UNICODE_MODIFIER_LETTER, UNICODE_OTHER_LETTER,
  37270     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37271     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_SYMBOL,
  37272     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_LETTER,
  37273     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37274     UNICODE_SPACING_MARK, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37275     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37276     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37277     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37278     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37279     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37280     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37281     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37282     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37283     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37284     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37285     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37286     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37287     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37288     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37289     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37290     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37291     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  37292     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37293     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  37294     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  37295     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  37296     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37297     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  37298     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  37299     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  37300     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37301     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37302     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37303     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37304     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37305     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37306     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37307     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  37308     UNICODE_OTHER_LETTER, UNICODE_MODIFIER_LETTER,
  37309     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37310     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37311     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37312     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37313     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_SPACING_MARK,
  37314     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37315     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  37316     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37317     UNICODE_OTHER_LETTER, UNICODE_MODIFIER_LETTER,
  37318     UNICODE_MODIFIER_LETTER, UNICODE_SPACING_MARK,
  37319     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37320     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37321     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37322     UNICODE_UNASSIGNED
  37323   },
  37324   { /* page 171, index 55 */
  37325     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37326     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37327     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37328     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37329     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37330     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  37331     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37332     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  37333     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37334     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37335     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  37336     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37337     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37338     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37339     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37340     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  37341     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37342     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37343     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37344     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37345     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37346     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37347     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37348     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37349     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37350     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37351     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37352     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37353     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37354     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37355     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37356     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37357     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37358     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37359     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37360     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37361     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37362     UNICODE_LOWERCASE_LETTER, UNICODE_MODIFIER_SYMBOL,
  37363     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  37364     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  37365     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37366     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37367     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37368     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37369     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37370     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37371     UNICODE_UNASSIGNED, UNICODE_LOWERCASE_LETTER,
  37372     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37373     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37374     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37375     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37376     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37377     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37378     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37379     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37380     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37381     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37382     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37383     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37384     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37385     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37386     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37387     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37388     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37389     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37390     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37391     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37392     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37393     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37394     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37395     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37396     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37397     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37398     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37399     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37400     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37401     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37402     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37403     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37404     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37405     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37406     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37407     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37408     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37409     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37410     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37411     UNICODE_LOWERCASE_LETTER, UNICODE_OTHER_LETTER,
  37412     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37413     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37414     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37415     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37416     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37417     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37418     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37419     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37420     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37421     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37422     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37423     UNICODE_OTHER_LETTER, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  37424     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  37425     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37426     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  37427     UNICODE_OTHER_PUNCTUATION, UNICODE_SPACING_MARK,
  37428     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37429     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37430     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37431     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37432     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37433     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED,
  37434     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37435     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  37436   },
  37437   { /* page 215, index 56 */
  37438     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37439     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37440     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37441     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37442     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37443     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37444     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37445     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37446     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37447     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37448     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37449     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37450     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37451     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37452     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37453     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37454     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37455     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37456     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37457     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37458     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37459     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37460     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37461     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37462     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37463     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37464     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37465     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37466     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37467     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37468     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37469     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37470     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37471     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37472     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37473     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37474     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37475     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37476     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37477     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37478     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37479     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37480     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37481     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37482     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37483     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37484     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37485     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37486     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37487     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37488     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37489     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37490     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37491     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37492     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  37493     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37494     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37495     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37496     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  37497     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37498     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37499     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37500     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37501     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37502     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37503     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37504     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37505     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  37506     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37507     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37508     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37509     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37510     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37511     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37512     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37513     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37514     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37515     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37516     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37517     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37518     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37519     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37520     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37521     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37522     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37523     UNICODE_UNASSIGNED
  37524   },
  37525   { /* page 250, index 57 */
  37526     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37527     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37528     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37529     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37530     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37531     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37532     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37533     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37534     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37535     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37536     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37537     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37538     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37539     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37540     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37541     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37542     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37543     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37544     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37545     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37546     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37547     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37548     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37549     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37550     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37551     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37552     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37553     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37554     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37555     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37556     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37557     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37558     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37559     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37560     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37561     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37562     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  37563     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37564     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37565     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37566     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37567     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37568     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37569     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37570     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37571     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37572     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37573     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37574     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37575     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37576     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37577     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37578     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37579     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37580     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37581     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37582     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37583     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37584     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37585     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37586     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37587     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37588     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37589     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37590     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37591     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37592     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37593     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37594     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37595     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37596     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37597     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37598     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  37599     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37600     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37601     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37602     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37603     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37604     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37605     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37606     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37607     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37608     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37609     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37610     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37611     UNICODE_UNASSIGNED
  37612   },
  37613   { /* page 251, index 58 */
  37614     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37615     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37616     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37617     UNICODE_LOWERCASE_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37618     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37619     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37620     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37621     UNICODE_UNASSIGNED, UNICODE_LOWERCASE_LETTER,
  37622     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37623     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37624     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37625     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  37626     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  37627     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37628     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37629     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37630     UNICODE_MATH_SYMBOL, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37631     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37632     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37633     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37634     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  37635     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37636     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  37637     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  37638     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  37639     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  37640     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37641     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37642     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37643     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37644     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37645     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37646     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37647     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37648     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37649     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37650     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37651     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37652     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37653     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37654     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37655     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37656     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37657     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37658     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37659     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37660     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37661     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37662     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37663     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37664     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37665     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37666     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37667     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37668     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37669     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37670     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37671     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37672     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37673     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37674     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37675     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37676     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  37677     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  37678     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  37679     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  37680     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  37681     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  37682     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  37683     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  37684     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37685     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37686     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37687     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37688     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37689     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  37690     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37691     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37692     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37693     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37694     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37695     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37696     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37697     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37698     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37699     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37700     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37701     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37702     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37703     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37704     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER
  37705   },
  37706   { /* page 253, index 59 */
  37707     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37708     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37709     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37710     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37711     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37712     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37713     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37714     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37715     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37716     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37717     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37718     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37719     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37720     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37721     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37722     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37723     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37724     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37725     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37726     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37727     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37728     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  37729     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37730     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37731     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37732     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37733     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37734     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37735     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37736     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37737     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37738     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37739     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37740     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37741     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37742     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37743     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37744     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37745     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37746     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37747     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37748     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37749     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37750     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37751     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37752     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37753     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37754     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37755     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  37756     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37757     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37758     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37759     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37760     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37761     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37762     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37763     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37764     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37765     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37766     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37767     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37768     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37769     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37770     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37771     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37772     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37773     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37774     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37775     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37776     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37777     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37778     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37779     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37780     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37781     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37782     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37783     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37784     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37785     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37786     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37787     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  37788     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37789     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37790     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37791     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37792     UNICODE_CURRENCY_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  37793     UNICODE_UNASSIGNED
  37794   },
  37795   { /* page 254, index 60 */
  37796     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37797     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37798     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37799     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37800     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37801     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37802     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37803     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37804     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37805     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37806     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37807     UNICODE_OTHER_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  37808     UNICODE_CLOSE_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37809     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37810     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37811     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37812     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37813     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37814     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37815     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37816     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37817     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37818     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  37819     UNICODE_OTHER_PUNCTUATION, UNICODE_DASH_PUNCTUATION,
  37820     UNICODE_DASH_PUNCTUATION, UNICODE_CONNECT_PUNCTUATION,
  37821     UNICODE_CONNECT_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  37822     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  37823     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  37824     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  37825     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  37826     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  37827     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  37828     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  37829     UNICODE_CLOSE_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37830     UNICODE_OTHER_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  37831     UNICODE_CLOSE_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37832     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37833     UNICODE_OTHER_PUNCTUATION, UNICODE_CONNECT_PUNCTUATION,
  37834     UNICODE_CONNECT_PUNCTUATION, UNICODE_CONNECT_PUNCTUATION,
  37835     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37836     UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED,
  37837     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37838     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37839     UNICODE_DASH_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  37840     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  37841     UNICODE_CLOSE_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  37842     UNICODE_CLOSE_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37843     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37844     UNICODE_MATH_SYMBOL, UNICODE_DASH_PUNCTUATION, UNICODE_MATH_SYMBOL,
  37845     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_UNASSIGNED,
  37846     UNICODE_OTHER_PUNCTUATION, UNICODE_CURRENCY_SYMBOL,
  37847     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37848     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37849     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37850     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37851     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37852     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37853     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37854     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37855     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37856     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37857     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37858     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37859     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37860     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37861     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37862     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37863     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37864     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37865     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37866     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37867     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37868     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37869     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37870     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37871     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37872     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37873     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37874     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37875     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37876     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37877     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37878     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37879     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37880     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37881     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37882     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37883     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37884     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37885     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37886     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37887     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37888     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37889     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37890     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37891     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37892     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37893     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37894     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37895     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37896     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37897     UNICODE_FORMAT
  37898   },
  37899   { /* page 255, index 61 */
  37900     UNICODE_UNASSIGNED, UNICODE_OTHER_PUNCTUATION,
  37901     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37902     UNICODE_CURRENCY_SYMBOL, UNICODE_OTHER_PUNCTUATION,
  37903     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37904     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  37905     UNICODE_OTHER_PUNCTUATION, UNICODE_MATH_SYMBOL,
  37906     UNICODE_OTHER_PUNCTUATION, UNICODE_DASH_PUNCTUATION,
  37907     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37908     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37909     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37910     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37911     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37912     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  37913     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37914     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  37915     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37916     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  37917     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  37918     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  37919     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  37920     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  37921     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  37922     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  37923     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  37924     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  37925     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  37926     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  37927     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  37928     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  37929     UNICODE_OPEN_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37930     UNICODE_CLOSE_PUNCTUATION, UNICODE_MODIFIER_SYMBOL,
  37931     UNICODE_CONNECT_PUNCTUATION, UNICODE_MODIFIER_SYMBOL,
  37932     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37933     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37934     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37935     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37936     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37937     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37938     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37939     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37940     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37941     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37942     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37943     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37944     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  37945     UNICODE_OPEN_PUNCTUATION, UNICODE_MATH_SYMBOL,
  37946     UNICODE_CLOSE_PUNCTUATION, UNICODE_MATH_SYMBOL,
  37947     UNICODE_OPEN_PUNCTUATION, UNICODE_CLOSE_PUNCTUATION,
  37948     UNICODE_OTHER_PUNCTUATION, UNICODE_OPEN_PUNCTUATION,
  37949     UNICODE_CLOSE_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  37950     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_LETTER,
  37951     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37952     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37953     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37954     UNICODE_MODIFIER_LETTER, UNICODE_OTHER_LETTER,
  37955     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37956     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37957     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37958     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37959     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37960     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37961     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37962     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37963     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37964     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37965     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37966     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37967     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37968     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37969     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37970     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  37971     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37972     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37973     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37974     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37975     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37976     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37977     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37978     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37979     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37980     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37981     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37982     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37983     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37984     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37985     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37986     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37987     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  37988     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37989     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  37990     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  37991     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  37992     UNICODE_UNASSIGNED, UNICODE_CURRENCY_SYMBOL,
  37993     UNICODE_CURRENCY_SYMBOL, UNICODE_MATH_SYMBOL,
  37994     UNICODE_MODIFIER_SYMBOL, UNICODE_OTHER_SYMBOL,
  37995     UNICODE_CURRENCY_SYMBOL, UNICODE_CURRENCY_SYMBOL,
  37996     UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL, UNICODE_MATH_SYMBOL,
  37997     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL,
  37998     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  37999     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38000     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38001     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38002     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  38003     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  38004     UNICODE_UNASSIGNED
  38005   },
  38006   { /* page 256, index 62 */
  38007     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38008     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38009     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38010     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38011     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38012     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38013     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38014     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38015     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38016     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38017     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38018     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38019     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38020     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38021     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38022     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38023     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38024     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38025     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38026     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  38027     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  38028     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38029     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38030     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38031     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38032     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38033     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  38034     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38035     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38036     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38037     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38038     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38039     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38040     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38041     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38042     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38043     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38044     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38045     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38046     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38047     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38048     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38049     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  38050     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38051     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38052     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38053     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38054     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38055     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38056     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38057     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38058     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38059     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38060     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38061     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38062     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38063     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38064     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38065     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38066     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38067     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38068     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38069     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38070     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38071     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38072     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38073     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38074     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38075     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38076     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38077     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38078     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38079     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38080     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38081     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38082     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38083     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38084     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38085     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38086     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38087     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38088     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38089     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38090     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  38091     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38092     UNICODE_UNASSIGNED
  38093   },
  38094   { /* page 257, index 63 */
  38095     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  38096     UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38097     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_NUMBER,
  38098     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38099     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38100     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38101     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38102     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38103     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38104     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38105     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38106     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38107     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38108     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38109     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38110     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38111     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38112     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_UNASSIGNED,
  38113     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL,
  38114     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38115     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38116     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_LETTER_NUMBER,
  38117     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38118     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38119     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38120     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38121     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38122     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38123     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38124     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38125     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38126     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38127     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38128     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38129     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38130     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38131     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38132     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38133     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38134     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38135     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38136     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38137     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38138     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38139     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38140     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38141     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38142     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER, UNICODE_OTHER_NUMBER,
  38143     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38144     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38145     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38146     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38147     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38148     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38149     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_NUMBER,
  38150     UNICODE_OTHER_NUMBER, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38151     UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL,
  38152     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38153     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38154     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38155     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  38156     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38157     UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38158     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38159     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38160     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38161     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38162     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38163     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38164     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38165     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38166     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38167     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38168     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38169     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38170     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38171     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38172     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38173     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38174     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38175     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38176     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38177     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38178     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38179     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38180     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38181     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38182     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38183     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38184     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38185     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38186     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38187     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  38188     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  38189   },
  38190   { /* page 258, index 64 */
  38191     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38192     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38193     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38194     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38195     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38196     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38197     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38198     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38199     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38200     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38201     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38202     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38203     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38204     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38205     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38206     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38207     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38208     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38209     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38210     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38211     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38212     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38213     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38214     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38215     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38216     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38217     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38218     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38219     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38220     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38221     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38222     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38223     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38224     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38225     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38226     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38227     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38228     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38229     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38230     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38231     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38232     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38233     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  38234     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38235     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38236     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38237     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38238     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38239     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38240     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38241     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38242     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38243     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38244     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38245     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38246     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38247     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38248     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38249     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38250     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38251     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38252     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38253     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38254     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38255     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38256     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38257     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38258     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38259     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38260     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  38261     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38262     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38263     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38264     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38265     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  38266     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38267     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38268     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38269     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38270     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38271     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38272     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38273     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38274     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38275     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38276     UNICODE_UNASSIGNED
  38277   },
  38278   { /* page 259, index 65 */
  38279     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38280     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38281     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38282     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38283     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38284     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38285     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38286     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38287     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38288     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38289     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_NUMBER,
  38290     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38291     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38292     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38293     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38294     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38295     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38296     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38297     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38298     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38299     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38300     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_LETTER_NUMBER,
  38301     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38302     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38303     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_LETTER_NUMBER,
  38304     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38305     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  38306     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38307     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38308     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38309     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38310     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38311     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38312     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38313     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38314     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38315     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38316     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38317     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38318     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  38319     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  38320     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  38321     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38322     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  38323     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38324     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38325     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38326     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38327     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38328     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38329     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38330     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38331     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38332     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  38333     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_LETTER,
  38334     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38335     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38336     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38337     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38338     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38339     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38340     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38341     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38342     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38343     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38344     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38345     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  38346     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38347     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38348     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38349     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38350     UNICODE_OTHER_PUNCTUATION, UNICODE_LETTER_NUMBER,
  38351     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  38352     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER, UNICODE_UNASSIGNED,
  38353     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38354     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38355     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38356     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38357     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38358     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38359     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38360     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38361     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38362     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38363     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38364     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38365     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38366     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  38367   },
  38368   { /* page 260, index 66 */
  38369     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38370     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38371     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38372     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38373     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38374     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38375     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38376     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38377     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38378     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38379     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38380     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38381     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38382     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38383     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38384     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38385     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38386     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38387     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38388     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38389     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38390     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38391     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38392     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38393     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38394     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38395     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38396     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38397     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38398     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38399     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38400     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38401     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38402     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38403     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38404     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38405     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38406     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38407     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38408     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38409     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38410     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38411     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38412     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38413     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38414     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38415     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38416     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38417     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38418     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38419     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38420     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38421     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38422     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38423     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38424     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38425     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38426     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38427     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38428     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38429     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38430     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38431     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38432     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38433     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38434     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38435     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER,
  38436     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  38437     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  38438     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  38439     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  38440     UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38441     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38442     UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER,
  38443     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38444     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38445     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38446     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38447     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38448     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38449     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38450     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38451     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38452     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38453     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38454     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38455     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38456     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38457     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38458     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38459     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  38460     UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38461     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_LOWERCASE_LETTER,
  38462     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38463     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38464     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38465     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38466     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38467     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38468     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38469     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38470     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38471     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38472     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38473     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38474     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38475     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38476     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38477     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38478     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  38479     UNICODE_LOWERCASE_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38480     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  38481   },
  38482   { /* page 261, index 67 */
  38483     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38484     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38485     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38486     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38487     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38488     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38489     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38490     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38491     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38492     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38493     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38494     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38495     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38496     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38497     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38498     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38499     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38500     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38501     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38502     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38503     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38504     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38505     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38506     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38507     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38508     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38509     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38510     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38511     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38512     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38513     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38514     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38515     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38516     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38517     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38518     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38519     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38520     UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38521     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38522     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38523     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38524     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38525     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38526     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38527     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38528     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38529     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38530     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38531     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38532     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38533     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38534     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38535     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38536     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38537     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38538     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38539     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38540     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38541     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38542     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38543     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38544     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38545     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38546     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38547     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38548     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38549     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38550     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38551     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38552     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38553     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38554     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38555     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38556     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38557     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38558     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38559     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38560     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38561     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38562     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38563     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38564     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38565     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38566     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38567     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38568     UNICODE_UNASSIGNED
  38569   },
  38570   { /* page 263, index 68 */
  38571     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38572     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38573     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38574     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38575     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38576     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38577     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38578     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38579     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38580     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38581     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38582     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38583     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38584     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38585     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38586     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38587     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38588     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38589     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38590     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38591     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38592     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38593     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38594     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38595     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38596     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38597     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38598     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38599     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  38600     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38601     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38602     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38603     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38604     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38605     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  38606     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38607     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38608     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38609     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38610     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38611     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38612     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38613     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38614     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38615     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38616     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38617     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38618     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38619     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38620     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38621     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38622     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38623     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38624     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38625     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38626     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38627     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38628     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38629     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38630     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38631     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38632     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38633     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38634     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38635     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38636     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38637     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38638     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38639     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38640     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38641     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38642     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38643     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38644     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38645     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38646     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38647     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38648     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38649     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38650     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38651     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38652     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38653     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38654     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38655     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38656     UNICODE_UNASSIGNED
  38657   },
  38658   { /* page 264, index 69 */
  38659     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38660     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38661     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  38662     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38663     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38664     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38665     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38666     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38667     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38668     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38669     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38670     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38671     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38672     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38673     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38674     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38675     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38676     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38677     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38678     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38679     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38680     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38681     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38682     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38683     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38684     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38685     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38686     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38687     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  38688     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_NUMBER,
  38689     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38690     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38691     UNICODE_OTHER_NUMBER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38692     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38693     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38694     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38695     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38696     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38697     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38698     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38699     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_NUMBER,
  38700     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38701     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38702     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38703     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38704     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38705     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38706     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38707     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38708     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38709     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38710     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38711     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38712     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38713     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38714     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38715     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38716     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38717     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38718     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38719     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38720     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38721     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38722     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38723     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38724     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38725     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38726     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38727     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38728     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38729     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38730     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38731     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38732     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38733     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38734     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38735     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38736     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38737     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38738     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38739     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38740     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  38741     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38742     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38743     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38744     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER
  38745   },
  38746   { /* page 265, index 70 */
  38747     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38748     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38749     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38750     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38751     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38752     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38753     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38754     UNICODE_OTHER_LETTER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38755     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38756     UNICODE_OTHER_NUMBER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38757     UNICODE_UNASSIGNED, UNICODE_OTHER_PUNCTUATION,
  38758     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38759     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38760     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38761     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38762     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38763     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38764     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38765     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38766     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  38767     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38768     UNICODE_UNASSIGNED, UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED,
  38769     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38770     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38771     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38772     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38773     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38774     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38775     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38776     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38777     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38778     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38779     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38780     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38781     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38782     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38783     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38784     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38785     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38786     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38787     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38788     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38789     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38790     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38791     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38792     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38793     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38794     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38795     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38796     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38797     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38798     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38799     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38800     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38801     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38802     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38803     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38804     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38805     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38806     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38807     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38808     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  38809     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38810     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_LETTER,
  38811     UNICODE_OTHER_LETTER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38812     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38813     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38814     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38815     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38816     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_UNASSIGNED,
  38817     UNICODE_UNASSIGNED, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38818     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38819     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38820     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38821     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38822     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38823     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38824     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38825     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38826     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38827     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38828     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38829     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38830     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38831     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38832     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER
  38833   },
  38834   { /* page 266, index 71 */
  38835     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  38836     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  38837     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  38838     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38839     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38840     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  38841     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  38842     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38843     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  38844     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  38845     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38846     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38847     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38848     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38849     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38850     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38851     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38852     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38853     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38854     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38855     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  38856     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  38857     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38858     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK, UNICODE_OTHER_NUMBER,
  38859     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38860     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38861     UNICODE_OTHER_NUMBER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38862     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38863     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38864     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  38865     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  38866     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  38867     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  38868     UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38869     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38870     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  38871     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38872     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38873     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38874     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38875     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38876     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38877     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38878     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38879     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38880     UNICODE_OTHER_LETTER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38881     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_LETTER,
  38882     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38883     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38884     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38885     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38886     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38887     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38888     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38889     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38890     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38891     UNICODE_OTHER_LETTER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38892     UNICODE_OTHER_NUMBER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38893     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38894     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38895     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38896     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38897     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38898     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38899     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38900     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38901     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38902     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38903     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38904     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38905     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_SYMBOL,
  38906     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38907     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38908     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38909     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38910     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38911     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38912     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38913     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38914     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38915     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  38916     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38917     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_NUMBER,
  38918     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38919     UNICODE_OTHER_NUMBER, UNICODE_OTHER_PUNCTUATION,
  38920     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  38921     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  38922     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  38923     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38924     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38925     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  38926   },
  38927   { /* page 267, index 72 */
  38928     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38929     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38930     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38931     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38932     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38933     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38934     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38935     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38936     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38937     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38938     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38939     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38940     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38941     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38942     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38943     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38944     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38945     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38946     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38947     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  38948     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  38949     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  38950     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_LETTER,
  38951     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38952     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38953     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38954     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38955     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38956     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38957     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38958     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_NUMBER,
  38959     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38960     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38961     UNICODE_OTHER_NUMBER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38962     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38963     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38964     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38965     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38966     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38967     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  38968     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38969     UNICODE_UNASSIGNED, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38970     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38971     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38972     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38973     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38974     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38975     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38976     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38977     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  38978     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38979     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38980     UNICODE_UNASSIGNED, UNICODE_OTHER_PUNCTUATION,
  38981     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  38982     UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38983     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38984     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38985     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38986     UNICODE_UNASSIGNED, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38987     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  38988     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_UNASSIGNED,
  38989     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38990     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38991     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38992     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38993     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38994     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38995     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38996     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38997     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38998     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  38999     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39000     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39001     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39002     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39003     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39004     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39005     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39006     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39007     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39008     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39009     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39010     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39011     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39012     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39013     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39014     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39015     UNICODE_UNASSIGNED
  39016   },
  39017   { /* page 268, index 73 */
  39018     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39019     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39020     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39021     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39022     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39023     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39024     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39025     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39026     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39027     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39028     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39029     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39030     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39031     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39032     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39033     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39034     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39035     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39036     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39037     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39038     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39039     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39040     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39041     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39042     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39043     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39044     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39045     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39046     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39047     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39048     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39049     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39050     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39051     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39052     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39053     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39054     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39055     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39056     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39057     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39058     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39059     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39060     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER,
  39061     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39062     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39063     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39064     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39065     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39066     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39067     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39068     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39069     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39070     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39071     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39072     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39073     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39074     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39075     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39076     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39077     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39078     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39079     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39080     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39081     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39082     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39083     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39084     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39085     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  39086     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39087     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39088     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39089     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39090     UNICODE_UNASSIGNED, UNICODE_LOWERCASE_LETTER,
  39091     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39092     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39093     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39094     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39095     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39096     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39097     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39098     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39099     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39100     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39101     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39102     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39103     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39104     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39105     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39106     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39107     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39108     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39109     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39110     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39111     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39112     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39113     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39114     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39115     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  39116     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39117     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39118     UNICODE_UNASSIGNED, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39119     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39120     UNICODE_OTHER_NUMBER
  39121   },
  39122   { /* page 270, index 74 */
  39123     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39124     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39125     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39126     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39127     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39128     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39129     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39130     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39131     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39132     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39133     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39134     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39135     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39136     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39137     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39138     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39139     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39140     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39141     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39142     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39143     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39144     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39145     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39146     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39147     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39148     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39149     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39150     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39151     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39152     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39153     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39154     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39155     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39156     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39157     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39158     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39159     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39160     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39161     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39162     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39163     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39164     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39165     UNICODE_OTHER_NUMBER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39166     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39167     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39168     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39169     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39170     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39171     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39172     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39173     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39174     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39175     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39176     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39177     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39178     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39179     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39180     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39181     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39182     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39183     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39184     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39185     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39186     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39187     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39188     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39189     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39190     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39191     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39192     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39193     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39194     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39195     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39196     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39197     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39198     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39199     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39200     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39201     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39202     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39203     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39204     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39205     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39206     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39207     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39208     UNICODE_UNASSIGNED
  39209   },
  39210   { /* page 272, index 75 */
  39211     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39212     UNICODE_SPACING_MARK, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39213     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39214     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39215     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39216     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39217     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39218     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39219     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39220     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39221     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39222     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39223     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39224     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39225     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39226     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39227     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39228     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39229     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39230     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39231     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39232     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39233     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39234     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39235     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39236     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39237     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_PUNCTUATION,
  39238     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39239     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39240     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39241     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39242     UNICODE_UNASSIGNED, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39243     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39244     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39245     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39246     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39247     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39248     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39249     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39250     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39251     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39252     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39253     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED,
  39254     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39255     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39256     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39257     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39258     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  39259     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39260     UNICODE_SPACING_MARK, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39261     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39262     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39263     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39264     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39265     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39266     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39267     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39268     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39269     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39270     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39271     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39272     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39273     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39274     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39275     UNICODE_OTHER_LETTER, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  39276     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39277     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39278     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  39279     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39280     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_PUNCTUATION,
  39281     UNICODE_OTHER_PUNCTUATION, UNICODE_FORMAT,
  39282     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39283     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39284     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39285     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39286     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39287     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39288     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  39289     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39290     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39291     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39292     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39293     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39294     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39295     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39296     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39297     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39298     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39299     UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39300     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39301     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39302     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39303     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED,
  39304     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39305     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  39306   },
  39307   { /* page 273, index 76 */
  39308     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39309     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  39310     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39311     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39312     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39313     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39314     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39315     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39316     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39317     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39318     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39319     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39320     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39321     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39322     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39323     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39324     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  39325     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39326     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39327     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39328     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39329     UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39330     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39331     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39332     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39333     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39334     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39335     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39336     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39337     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39338     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39339     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39340     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39341     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39342     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39343     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39344     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39345     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39346     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39347     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39348     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39349     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39350     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39351     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39352     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_PUNCTUATION,
  39353     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_LETTER,
  39354     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39355     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39356     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39357     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39358     UNICODE_SPACING_MARK, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39359     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39360     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39361     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39362     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39363     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39364     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39365     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39366     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39367     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39368     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39369     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39370     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39371     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39372     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39373     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39374     UNICODE_OTHER_LETTER, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  39375     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39376     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39377     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39378     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39379     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39380     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_OTHER_LETTER,
  39381     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39382     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39383     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39384     UNICODE_OTHER_PUNCTUATION, UNICODE_NON_SPACING_MARK,
  39385     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39386     UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39387     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39388     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39389     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39390     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39391     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39392     UNICODE_OTHER_LETTER, UNICODE_OTHER_PUNCTUATION,
  39393     UNICODE_OTHER_LETTER, UNICODE_OTHER_PUNCTUATION,
  39394     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39395     UNICODE_UNASSIGNED, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39396     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39397     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39398     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39399     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39400     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39401     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39402     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39403     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39404     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39405     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  39406   },
  39407   { /* page 274, index 77 */
  39408     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39409     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39410     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39411     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39412     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39413     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39414     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39415     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39416     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39417     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39418     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39419     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39420     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39421     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39422     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_SPACING_MARK,
  39423     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  39424     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39425     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  39426     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39427     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39428     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_PUNCTUATION,
  39429     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39430     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39431     UNICODE_OTHER_PUNCTUATION, UNICODE_NON_SPACING_MARK,
  39432     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39433     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39434     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39435     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39436     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39437     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39438     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39439     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39440     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39441     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39442     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39443     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39444     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39445     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39446     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39447     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39448     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39449     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39450     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39451     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39452     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39453     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  39454     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39455     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39456     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  39457     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39458     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  39459     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39460     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39461     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39462     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39463     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  39464     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39465     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39466     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39467     UNICODE_OTHER_LETTER, UNICODE_OTHER_PUNCTUATION,
  39468     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39469     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39470     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39471     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39472     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39473     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39474     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39475     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39476     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39477     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39478     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39479     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39480     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39481     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39482     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39483     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39484     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39485     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39486     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  39487     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  39488     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39489     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39490     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39491     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39492     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39493     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER,
  39494     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39495     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39496     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39497     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39498     UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39499     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39500     UNICODE_UNASSIGNED
  39501   },
  39502   { /* page 275, index 78 */
  39503     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39504     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_UNASSIGNED,
  39505     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39506     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39507     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  39508     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39509     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  39510     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39511     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39512     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39513     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39514     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39515     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39516     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39517     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39518     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39519     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  39520     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  39521     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39522     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  39523     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  39524     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  39525     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  39526     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  39527     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_SPACING_MARK,
  39528     UNICODE_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39529     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  39530     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  39531     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39532     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39533     UNICODE_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39534     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39535     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39536     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_SPACING_MARK,
  39537     UNICODE_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39538     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39539     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39540     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39541     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39542     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  39543     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39544     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39545     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39546     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39547     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39548     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39549     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39550     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39551     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39552     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39553     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39554     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39555     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39556     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39557     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39558     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39559     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39560     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39561     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39562     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39563     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39564     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39565     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39566     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39567     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39568     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39569     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39570     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39571     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39572     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39573     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39574     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39575     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39576     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39577     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39578     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39579     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39580     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39581     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39582     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39583     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39584     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39585     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39586     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39587     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39588     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39589     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39590     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39591     UNICODE_UNASSIGNED
  39592   },
  39593   { /* page 276, index 79 */
  39594     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39595     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39596     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39597     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39598     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39599     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39600     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39601     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39602     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39603     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39604     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39605     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39606     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39607     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39608     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39609     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39610     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39611     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_SPACING_MARK,
  39612     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  39613     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39614     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39615     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39616     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39617     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  39618     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39619     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  39620     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  39621     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39622     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39623     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39624     UNICODE_OTHER_PUNCTUATION, UNICODE_DECIMAL_NUMBER,
  39625     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39626     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39627     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39628     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39629     UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED,
  39630     UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED,
  39631     UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39632     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39633     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39634     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39635     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39636     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39637     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39638     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39639     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39640     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39641     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39642     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  39643     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39644     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39645     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39646     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39647     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39648     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39649     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39650     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39651     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39652     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39653     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39654     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39655     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39656     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39657     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39658     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_SPACING_MARK,
  39659     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  39660     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39661     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39662     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39663     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39664     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  39665     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39666     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  39667     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39668     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39669     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_LETTER,
  39670     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39671     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39672     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER,
  39673     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39674     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39675     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39676     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39677     UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39678     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39679     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39680     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39681     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39682     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39683     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39684     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39685     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39686     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39687     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39688     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39689     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  39690   },
  39691   { /* page 277, index 80 */
  39692     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39693     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39694     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39695     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39696     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39697     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39698     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39699     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39700     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39701     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39702     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39703     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39704     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39705     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39706     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39707     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39708     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39709     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39710     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39711     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39712     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39713     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39714     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39715     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39716     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39717     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39718     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39719     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39720     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39721     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39722     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39723     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39724     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39725     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39726     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39727     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39728     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39729     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39730     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39731     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39732     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39733     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39734     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  39735     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39736     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39737     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39738     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39739     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39740     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39741     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39742     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39743     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39744     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39745     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39746     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39747     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39748     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39749     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39750     UNICODE_OTHER_LETTER, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  39751     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39752     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39753     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39754     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  39755     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39756     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  39757     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39758     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39759     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39760     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39761     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39762     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39763     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39764     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39765     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39766     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39767     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39768     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39769     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_LETTER,
  39770     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39771     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39772     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39773     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39774     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39775     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39776     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39777     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39778     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39779     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39780     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39781     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39782     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39783     UNICODE_UNASSIGNED
  39784   },
  39785   { /* page 278, index 81 */
  39786     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39787     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39788     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39789     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39790     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39791     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39792     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39793     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39794     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39795     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39796     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39797     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39798     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39799     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39800     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39801     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39802     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  39803     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39804     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39805     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39806     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39807     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  39808     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  39809     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39810     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39811     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_LETTER,
  39812     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39813     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39814     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39815     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER,
  39816     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39817     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39818     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39819     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39820     UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39821     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39822     UNICODE_UNASSIGNED, UNICODE_OTHER_PUNCTUATION,
  39823     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39824     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39825     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39826     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39827     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39828     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39829     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39830     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39831     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39832     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39833     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39834     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39835     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39836     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39837     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39838     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39839     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39840     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39841     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39842     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39843     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39844     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39845     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39846     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39847     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39848     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39849     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39850     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  39851     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  39852     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39853     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39854     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39855     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  39856     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39857     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39858     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39859     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39860     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39861     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39862     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39863     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED,
  39864     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39865     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39866     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39867     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39868     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39869     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39870     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39871     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39872     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39873     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39874     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39875     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39876     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39877     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39878     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39879     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39880     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39881     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  39882   },
  39883   { /* page 279, index 82 */
  39884     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39885     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39886     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39887     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39888     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39889     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39890     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39891     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  39892     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  39893     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  39894     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39895     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  39896     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39897     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39898     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39899     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39900     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  39901     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39902     UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39903     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39904     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39905     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39906     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  39907     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  39908     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  39909     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_SYMBOL,
  39910     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39911     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39912     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39913     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39914     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39915     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39916     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39917     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39918     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39919     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39920     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39921     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39922     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39923     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39924     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39925     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39926     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39927     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39928     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39929     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39930     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39931     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39932     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39933     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39934     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39935     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39936     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39937     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39938     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39939     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39940     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39941     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39942     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39943     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39944     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39945     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39946     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39947     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39948     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39949     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39950     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39951     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39952     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39953     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39954     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39955     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39956     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39957     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39958     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39959     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39960     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39961     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39962     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39963     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39964     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39965     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39966     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39967     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39968     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39969     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39970     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39971     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39972     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39973     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  39974   },
  39975   { /* page 280, index 83 */
  39976     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39977     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39978     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39979     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39980     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39981     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39982     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39983     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39984     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39985     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39986     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39987     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39988     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39989     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39990     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39991     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39992     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39993     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39994     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39995     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39996     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39997     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39998     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  39999     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40000     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40001     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40002     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40003     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40004     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40005     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40006     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40007     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40008     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40009     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40010     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40011     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40012     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40013     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40014     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40015     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40016     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40017     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40018     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40019     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40020     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40021     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40022     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40023     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40024     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40025     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40026     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40027     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40028     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40029     UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER,
  40030     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  40031     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  40032     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  40033     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  40034     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  40035     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  40036     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  40037     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  40038     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  40039     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  40040     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  40041     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  40042     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  40043     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  40044     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  40045     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  40046     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  40047     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  40048     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  40049     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  40050     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  40051     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  40052     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  40053     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  40054     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  40055     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  40056     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  40057     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  40058     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  40059     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  40060     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  40061     UNICODE_LOWERCASE_LETTER, UNICODE_DECIMAL_NUMBER,
  40062     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40063     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40064     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40065     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40066     UNICODE_DECIMAL_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  40067     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  40068     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  40069     UNICODE_OTHER_NUMBER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40070     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40071     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40072     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40073     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER
  40074   },
  40075   { /* page 282, index 84 */
  40076     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  40077     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40078     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40079     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  40080     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40081     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_LETTER,
  40082     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40083     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40084     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40085     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40086     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40087     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40088     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40089     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40090     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40091     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40092     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40093     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40094     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40095     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40096     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40097     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40098     UNICODE_SPACING_MARK, UNICODE_OTHER_LETTER,
  40099     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40100     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40101     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  40102     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  40103     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  40104     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  40105     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40106     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40107     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40108     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  40109     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40110     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40111     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  40112     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40113     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40114     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40115     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40116     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40117     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40118     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40119     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40120     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40121     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40122     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40123     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40124     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40125     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40126     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40127     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40128     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40129     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  40130     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40131     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40132     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40133     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40134     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40135     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40136     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40137     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_PUNCTUATION,
  40138     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  40139     UNICODE_UNASSIGNED, UNICODE_OTHER_PUNCTUATION,
  40140     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  40141     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  40142     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40143     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40144     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40145     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40146     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40147     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40148     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40149     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40150     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40151     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  40152     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40153     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40154     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40155     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40156     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40157     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40158     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40159     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40160     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40161     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40162     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40163     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40164     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40165     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40166     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40167     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40168     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40169     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40170     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  40171     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40172     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  40173   },
  40174   { /* page 284, index 85 */
  40175     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40176     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40177     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40178     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40179     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40180     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40181     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40182     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40183     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40184     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40185     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40186     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40187     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40188     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40189     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40190     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_SPACING_MARK,
  40191     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40192     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40193     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40194     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED,
  40195     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40196     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40197     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40198     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40199     UNICODE_OTHER_LETTER, UNICODE_OTHER_PUNCTUATION,
  40200     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  40201     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  40202     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40203     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40204     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40205     UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40206     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40207     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40208     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40209     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40210     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  40211     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  40212     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  40213     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  40214     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  40215     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  40216     UNICODE_OTHER_NUMBER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40217     UNICODE_UNASSIGNED, UNICODE_OTHER_PUNCTUATION,
  40218     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_LETTER,
  40219     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40220     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40221     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40222     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40223     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40224     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40225     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40226     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40227     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40228     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  40229     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  40230     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40231     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40232     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40233     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40234     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40235     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40236     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40237     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40238     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40239     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40240     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_SPACING_MARK,
  40241     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40242     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40243     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40244     UNICODE_NON_SPACING_MARK, UNICODE_SPACING_MARK,
  40245     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40246     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40247     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40248     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40249     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40250     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40251     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40252     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40253     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40254     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40255     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40256     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40257     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40258     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40259     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40260     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40261     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40262     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40263     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40264     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40265     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40266     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40267     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40268     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40269     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40270     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40271     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  40272   },
  40273   { /* page 285, index 86 */
  40274     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40275     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40276     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  40277     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  40278     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40279     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40280     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40281     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40282     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40283     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40284     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40285     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40286     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40287     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40288     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40289     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40290     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK,
  40291     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40292     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40293     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40294     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED,
  40295     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40296     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  40297     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40298     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40299     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40300     UNICODE_OTHER_LETTER, UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED,
  40301     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40302     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40303     UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40304     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40305     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40306     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40307     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED,
  40308     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40309     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40310     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40311     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40312     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40313     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40314     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40315     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40316     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40317     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40318     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40319     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40320     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40321     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40322     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40323     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40324     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40325     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40326     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40327     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40328     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40329     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40330     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40331     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40332     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40333     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40334     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40335     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40336     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40337     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40338     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40339     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40340     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40341     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40342     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40343     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40344     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40345     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40346     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40347     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40348     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40349     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40350     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40351     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40352     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40353     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40354     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40355     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40356     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40357     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40358     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40359     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40360     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40361     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40362     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  40363   },
  40364   { /* page 291, index 87 */
  40365     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40366     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40367     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40368     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40369     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40370     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40371     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40372     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40373     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40374     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40375     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40376     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40377     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40378     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40379     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40380     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40381     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40382     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40383     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40384     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40385     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40386     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40387     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40388     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40389     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40390     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40391     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40392     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40393     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40394     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40395     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40396     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40397     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40398     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40399     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40400     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40401     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40402     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40403     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40404     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40405     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40406     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40407     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40408     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40409     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40410     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40411     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40412     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40413     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40414     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40415     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40416     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40417     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40418     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40419     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40420     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40421     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40422     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40423     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40424     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40425     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40426     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40427     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40428     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40429     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40430     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40431     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40432     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40433     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40434     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40435     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40436     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40437     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40438     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40439     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40440     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40441     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40442     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40443     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40444     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40445     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40446     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40447     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40448     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40449     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40450     UNICODE_UNASSIGNED
  40451   },
  40452   { /* page 292, index 88 */
  40453     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40454     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40455     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40456     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40457     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40458     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40459     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40460     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40461     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40462     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40463     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40464     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40465     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40466     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40467     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40468     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40469     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40470     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40471     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40472     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40473     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40474     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40475     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40476     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40477     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40478     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40479     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40480     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40481     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40482     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40483     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40484     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40485     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40486     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40487     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40488     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40489     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40490     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40491     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40492     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40493     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40494     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40495     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40496     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40497     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40498     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40499     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40500     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40501     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40502     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40503     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40504     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40505     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40506     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40507     UNICODE_LETTER_NUMBER, UNICODE_LETTER_NUMBER,
  40508     UNICODE_LETTER_NUMBER, UNICODE_UNASSIGNED,
  40509     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  40510     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  40511     UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40512     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40513     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40514     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40515     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40516     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40517     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40518     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40519     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40520     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40521     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40522     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40523     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40524     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40525     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40526     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40527     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40528     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40529     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40530     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40531     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40532     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40533     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40534     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40535     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40536     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40537     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40538     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40539     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40540     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40541     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40542     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40543     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40544     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40545     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40546     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40547     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40548     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40549     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40550     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40551     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40552     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40553     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40554     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40555     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40556     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40557     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER
  40558   },
  40559   { /* page 293, index 89 */
  40560     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40561     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40562     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40563     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40564     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40565     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40566     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40567     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40568     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40569     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40570     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40571     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40572     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40573     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40574     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40575     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40576     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40577     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40578     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40579     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40580     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40581     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40582     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  40583     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40584     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40585     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40586     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40587     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40588     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40589     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40590     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40591     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40592     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40593     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40594     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40595     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40596     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40597     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40598     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40599     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40600     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40601     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40602     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40603     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40604     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40605     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40606     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40607     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40608     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40609     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40610     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40611     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40612     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40613     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40614     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40615     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40616     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40617     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40618     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40619     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40620     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40621     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40622     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40623     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40624     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40625     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40626     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40627     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40628     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40629     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40630     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40631     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40632     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40633     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40634     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40635     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40636     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40637     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40638     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40639     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40640     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40641     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40642     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40643     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40644     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40645     UNICODE_UNASSIGNED
  40646   },
  40647   { /* page 308, index 90 */
  40648     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40649     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40650     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40651     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40652     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40653     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40654     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40655     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40656     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40657     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40658     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40659     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40660     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40661     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40662     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40663     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  40664     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40665     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40666     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40667     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40668     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40669     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40670     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40671     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40672     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40673     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40674     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40675     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40676     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40677     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40678     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40679     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40680     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40681     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40682     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40683     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40684     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40685     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40686     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40687     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40688     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40689     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40690     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40691     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40692     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40693     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40694     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40695     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40696     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40697     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40698     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40699     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40700     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40701     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40702     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40703     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40704     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40705     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40706     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40707     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40708     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40709     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40710     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40711     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40712     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40713     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40714     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40715     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40716     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40717     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40718     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40719     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40720     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40721     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40722     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40723     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40724     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40725     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40726     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40727     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40728     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40729     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40730     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40731     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40732     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40733     UNICODE_UNASSIGNED
  40734   },
  40735   { /* page 326, index 91 */
  40736     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40737     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40738     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40739     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40740     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40741     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40742     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40743     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40744     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40745     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40746     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40747     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40748     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40749     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40750     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40751     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40752     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40753     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40754     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40755     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40756     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40757     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40758     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40759     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  40760     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40761     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40762     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40763     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40764     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40765     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40766     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40767     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40768     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40769     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40770     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40771     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40772     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40773     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40774     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40775     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40776     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40777     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40778     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40779     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40780     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40781     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40782     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40783     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40784     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40785     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40786     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40787     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40788     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40789     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40790     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40791     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40792     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40793     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40794     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40795     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40796     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40797     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40798     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40799     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40800     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40801     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40802     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40803     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40804     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40805     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40806     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40807     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40808     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40809     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40810     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40811     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40812     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40813     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40814     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40815     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40816     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40817     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40818     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40819     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40820     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40821     UNICODE_UNASSIGNED
  40822   },
  40823   { /* page 362, index 92 */
  40824     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40825     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40826     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40827     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40828     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40829     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40830     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40831     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40832     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40833     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40834     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40835     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40836     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40837     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40838     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40839     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40840     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40841     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40842     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40843     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40844     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40845     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40846     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40847     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40848     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40849     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40850     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40851     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40852     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40853     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40854     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40855     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  40856     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40857     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40858     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40859     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40860     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED,
  40861     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40862     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  40863     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40864     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40865     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40866     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40867     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40868     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40869     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40870     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40871     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40872     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40873     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40874     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40875     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40876     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40877     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40878     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40879     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40880     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40881     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40882     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40883     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40884     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40885     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40886     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40887     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40888     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40889     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40890     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40891     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40892     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40893     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40894     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40895     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40896     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40897     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40898     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40899     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40900     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40901     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40902     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40903     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40904     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40905     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  40906     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40907     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40908     UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40909     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40910     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40911     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  40912   },
  40913   { /* page 363, index 93 */
  40914     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40915     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40916     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40917     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40918     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40919     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40920     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40921     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40922     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40923     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40924     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40925     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40926     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40927     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40928     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40929     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40930     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40931     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40932     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  40933     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_PUNCTUATION,
  40934     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  40935     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  40936     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  40937     UNICODE_OTHER_SYMBOL, UNICODE_MODIFIER_LETTER,
  40938     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  40939     UNICODE_MODIFIER_LETTER, UNICODE_OTHER_PUNCTUATION,
  40940     UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40941     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40942     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40943     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER,
  40944     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40945     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40946     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40947     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  40948     UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED, UNICODE_OTHER_NUMBER,
  40949     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  40950     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  40951     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40952     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40953     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40954     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40955     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40956     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40957     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40958     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40959     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40960     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40961     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40962     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40963     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40964     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40965     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  40966     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40967     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40968     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40969     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40970     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40971     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40972     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40973     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40974     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40975     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40976     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40977     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40978     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40979     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40980     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40981     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40982     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40983     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40984     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40985     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40986     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40987     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40988     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40989     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40990     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40991     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40992     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40993     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40994     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40995     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40996     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40997     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40998     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  40999     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41000     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41001     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41002     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41003     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  41004   },
  41005   { /* page 367, index 94 */
  41006     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41007     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41008     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41009     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41010     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41011     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41012     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41013     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41014     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41015     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41016     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41017     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41018     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41019     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41020     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41021     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41022     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41023     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41024     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41025     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41026     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41027     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41028     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41029     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41030     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41031     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41032     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  41033     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  41034     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  41035     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  41036     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  41037     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  41038     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  41039     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  41040     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  41041     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  41042     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  41043     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  41044     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  41045     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  41046     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  41047     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  41048     UNICODE_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41049     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41050     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41051     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41052     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41053     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  41054     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  41055     UNICODE_NON_SPACING_MARK, UNICODE_MODIFIER_LETTER,
  41056     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  41057     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  41058     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  41059     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  41060     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  41061     UNICODE_MODIFIER_LETTER, UNICODE_MODIFIER_LETTER,
  41062     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41063     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41064     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41065     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41066     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41067     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41068     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41069     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41070     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41071     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41072     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41073     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41074     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41075     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41076     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41077     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41078     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41079     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41080     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41081     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41082     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41083     UNICODE_UNASSIGNED, UNICODE_MODIFIER_LETTER,
  41084     UNICODE_MODIFIER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41085     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41086     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41087     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41088     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41089     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41090     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41091     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41092     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41093     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41094     UNICODE_UNASSIGNED
  41095   },
  41096   { /* page 391, index 95 */
  41097     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41098     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41099     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41100     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41101     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41102     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41103     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41104     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41105     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41106     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41107     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41108     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41109     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41110     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41111     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41112     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41113     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41114     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41115     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41116     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41117     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41118     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41119     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41120     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41121     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41122     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41123     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41124     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41125     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41126     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41127     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41128     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41129     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41130     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41131     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41132     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41133     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41134     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41135     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41136     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41137     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41138     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41139     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41140     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41141     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41142     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41143     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41144     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41145     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41146     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41147     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41148     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41149     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41150     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41151     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41152     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41153     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41154     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41155     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41156     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41157     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41158     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41159     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41160     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41161     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41162     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41163     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41164     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41165     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41166     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41167     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41168     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41169     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41170     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41171     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41172     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41173     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41174     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41175     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41176     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41177     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41178     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41179     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41180     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41181     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41182     UNICODE_UNASSIGNED
  41183   },
  41184   { /* page 394, index 96 */
  41185     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41186     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41187     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41188     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41189     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41190     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41191     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41192     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41193     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41194     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41195     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41196     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41197     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41198     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41199     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41200     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41201     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41202     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41203     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41204     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41205     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41206     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41207     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41208     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41209     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41210     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41211     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41212     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41213     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41214     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41215     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41216     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41217     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41218     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41219     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41220     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41221     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41222     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41223     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41224     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41225     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41226     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41227     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41228     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41229     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41230     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41231     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41232     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41233     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41234     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41235     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41236     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41237     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41238     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41239     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41240     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41241     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41242     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41243     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41244     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41245     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41246     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41247     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41248     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41249     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41250     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41251     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41252     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41253     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41254     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41255     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41256     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41257     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41258     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41259     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41260     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41261     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41262     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41263     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41264     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41265     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41266     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41267     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41268     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41269     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41270     UNICODE_UNASSIGNED
  41271   },
  41272   { /* page 433, index 97 */
  41273     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41274     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41275     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41276     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41277     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41278     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41279     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41280     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41281     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41282     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41283     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41284     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41285     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41286     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41287     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41288     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41289     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41290     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41291     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41292     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41293     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41294     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41295     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41296     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41297     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41298     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41299     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41300     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41301     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41302     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41303     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41304     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41305     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41306     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41307     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41308     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41309     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41310     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41311     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41312     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41313     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41314     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41315     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41316     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41317     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41318     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41319     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41320     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41321     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41322     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41323     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41324     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41325     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41326     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41327     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41328     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41329     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41330     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41331     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41332     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41333     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41334     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41335     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41336     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41337     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41338     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41339     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41340     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41341     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41342     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41343     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41344     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41345     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41346     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41347     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41348     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41349     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41350     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41351     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41352     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41353     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41354     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41355     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41356     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41357     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41358     UNICODE_OTHER_LETTER
  41359   },
  41360   { /* page 434, index 98 */
  41361     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41362     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41363     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41364     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41365     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41366     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41367     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41368     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41369     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41370     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41371     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41372     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41373     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41374     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41375     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41376     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41377     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41378     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41379     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41380     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41381     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41382     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41383     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41384     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41385     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41386     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41387     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41388     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41389     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41390     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41391     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41392     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41393     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41394     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41395     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41396     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41397     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41398     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41399     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41400     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41401     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41402     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41403     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41404     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41405     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41406     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41407     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41408     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41409     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41410     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41411     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41412     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41413     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41414     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41415     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41416     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41417     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41418     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41419     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41420     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41421     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41422     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41423     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41424     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41425     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41426     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41427     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41428     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41429     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41430     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41431     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41432     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41433     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41434     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41435     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41436     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41437     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41438     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41439     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41440     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41441     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41442     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41443     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41444     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41445     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41446     UNICODE_UNASSIGNED
  41447   },
  41448   { /* page 444, index 99 */
  41449     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41450     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41451     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41452     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41453     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41454     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41455     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41456     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41457     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41458     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41459     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41460     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41461     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41462     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41463     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41464     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41465     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41466     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41467     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41468     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41469     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41470     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41471     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41472     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41473     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41474     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41475     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41476     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41477     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41478     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41479     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41480     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41481     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41482     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41483     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41484     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  41485     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41486     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41487     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41488     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41489     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41490     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  41491     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  41492     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41493     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41494     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  41495     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41496     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41497     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41498     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41499     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  41500     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41501     UNICODE_OTHER_SYMBOL, UNICODE_NON_SPACING_MARK,
  41502     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_PUNCTUATION,
  41503     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  41504     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41505     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41506     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41507     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41508     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41509     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41510     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41511     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41512     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41513     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41514     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41515     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41516     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41517     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41518     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41519     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41520     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41521     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41522     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41523     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41524     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41525     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41526     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41527     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41528     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41529     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41530     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41531     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41532     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41533     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41534     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  41535   },
  41536   { /* page 464, index 100 */
  41537     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41538     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41539     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41540     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41541     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41542     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41543     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41544     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41545     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41546     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41547     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41548     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41549     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41550     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41551     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41552     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41553     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41554     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41555     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41556     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41557     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41558     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41559     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41560     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41561     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41562     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41563     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41564     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41565     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41566     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41567     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41568     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41569     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41570     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41571     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41572     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41573     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41574     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41575     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41576     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41577     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41578     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41579     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41580     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41581     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41582     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41583     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41584     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41585     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41586     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41587     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41588     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41589     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41590     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41591     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41592     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41593     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41594     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41595     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41596     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41597     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41598     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41599     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41600     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41601     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41602     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41603     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41604     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41605     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41606     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41607     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41608     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41609     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41610     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41611     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41612     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41613     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41614     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41615     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41616     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41617     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41618     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41619     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41620     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41621     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41622     UNICODE_UNASSIGNED
  41623   },
  41624   { /* page 465, index 101 */
  41625     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41626     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41627     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41628     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41629     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41630     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41631     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41632     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41633     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41634     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41635     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41636     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41637     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41638     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL,
  41639     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41640     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41641     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41642     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41643     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41644     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41645     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41646     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41647     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41648     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41649     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41650     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41651     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41652     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41653     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41654     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41655     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41656     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41657     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41658     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_SPACING_MARK,
  41659     UNICODE_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  41660     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  41661     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41662     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  41663     UNICODE_SPACING_MARK, UNICODE_SPACING_MARK, UNICODE_SPACING_MARK,
  41664     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  41665     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  41666     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  41667     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  41668     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  41669     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  41670     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41671     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  41672     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  41673     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  41674     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_SYMBOL,
  41675     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41676     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41677     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41678     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41679     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41680     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41681     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41682     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41683     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41684     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41685     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  41686     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  41687     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41688     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41689     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41690     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41691     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41692     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41693     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41694     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41695     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41696     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41697     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41698     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41699     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41700     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41701     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41702     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41703     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41704     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41705     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41706     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  41707     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41708     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41709     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41710     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41711     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41712     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41713     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41714     UNICODE_UNASSIGNED
  41715   },
  41716   { /* page 466, index 102 */
  41717     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41718     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41719     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41720     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41721     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41722     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41723     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41724     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41725     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41726     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41727     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41728     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41729     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41730     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41731     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41732     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41733     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41734     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41735     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41736     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41737     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41738     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41739     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  41740     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  41741     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41742     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41743     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41744     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41745     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41746     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41747     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41748     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41749     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41750     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41751     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41752     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41753     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41754     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41755     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41756     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41757     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41758     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41759     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41760     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41761     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41762     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41763     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41764     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41765     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41766     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41767     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41768     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41769     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41770     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41771     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41772     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41773     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41774     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41775     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41776     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41777     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41778     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41779     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41780     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41781     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41782     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41783     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41784     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41785     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41786     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41787     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41788     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41789     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41790     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41791     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41792     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41793     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41794     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41795     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41796     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41797     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41798     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41799     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41800     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41801     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41802     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  41803   },
  41804   { /* page 467, index 103 */
  41805     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41806     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41807     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41808     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41809     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41810     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41811     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41812     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41813     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41814     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41815     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41816     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41817     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41818     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41819     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41820     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41821     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41822     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41823     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41824     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41825     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41826     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41827     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41828     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41829     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41830     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41831     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41832     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41833     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  41834     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41835     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41836     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41837     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  41838     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  41839     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  41840     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  41841     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  41842     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  41843     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41844     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41845     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41846     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41847     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41848     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41849     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41850     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41851     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41852     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41853     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41854     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41855     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41856     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41857     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41858     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41859     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41860     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41861     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41862     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41863     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41864     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41865     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41866     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41867     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41868     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41869     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41870     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41871     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41872     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41873     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41874     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41875     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41876     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41877     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41878     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41879     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41880     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41881     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41882     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41883     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41884     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41885     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41886     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41887     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41888     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41889     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41890     UNICODE_UNASSIGNED
  41891   },
  41892   { /* page 468, index 104 */
  41893     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41894     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41895     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41896     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41897     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41898     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41899     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41900     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41901     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41902     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41903     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41904     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41905     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41906     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41907     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41908     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41909     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41910     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41911     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41912     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41913     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41914     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41915     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41916     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41917     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41918     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41919     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41920     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41921     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41922     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41923     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41924     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41925     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41926     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41927     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41928     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41929     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41930     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41931     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41932     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41933     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41934     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41935     UNICODE_LOWERCASE_LETTER, UNICODE_UNASSIGNED,
  41936     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41937     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41938     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41939     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41940     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41941     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41942     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41943     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41944     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41945     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41946     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41947     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41948     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41949     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41950     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41951     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41952     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41953     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41954     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41955     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41956     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41957     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41958     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41959     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41960     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41961     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41962     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41963     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41964     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41965     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41966     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41967     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41968     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41969     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41970     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41971     UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED,
  41972     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41973     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER,
  41974     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER,
  41975     UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  41976     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41977     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41978     UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER,
  41979     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41980     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41981     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41982     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41983     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41984     UNICODE_LOWERCASE_LETTER, UNICODE_UNASSIGNED,
  41985     UNICODE_LOWERCASE_LETTER, UNICODE_UNASSIGNED,
  41986     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41987     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41988     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41989     UNICODE_LOWERCASE_LETTER, UNICODE_UNASSIGNED,
  41990     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41991     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41992     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41993     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41994     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  41995     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41996     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41997     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41998     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  41999     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42000     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42001     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42002     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42003     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42004     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42005     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42006     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42007     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42008     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42009     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42010     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42011     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42012     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42013     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42014     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42015     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42016     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42017     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42018     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42019     UNICODE_LOWERCASE_LETTER
  42020   },
  42021   { /* page 469, index 105 */
  42022     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42023     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42024     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42025     UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER,
  42026     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42027     UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42028     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42029     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42030     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42031     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42032     UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER,
  42033     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42034     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42035     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42036     UNICODE_UNASSIGNED, UNICODE_LOWERCASE_LETTER,
  42037     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42038     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42039     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42040     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42041     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42042     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42043     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42044     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42045     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42046     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42047     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42048     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42049     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42050     UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED,
  42051     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42052     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42053     UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER,
  42054     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42055     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42056     UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER, UNICODE_UNASSIGNED,
  42057     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER,
  42058     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42059     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42060     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42061     UNICODE_UNASSIGNED, UNICODE_LOWERCASE_LETTER,
  42062     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42063     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42064     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42065     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42066     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42067     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42068     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42069     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42070     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42071     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42072     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42073     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42074     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42075     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42076     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42077     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42078     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42079     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42080     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42081     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42082     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42083     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42084     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42085     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42086     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42087     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42088     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42089     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42090     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42091     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42092     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42093     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42094     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42095     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42096     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42097     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42098     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42099     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42100     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42101     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42102     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42103     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42104     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42105     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42106     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42107     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42108     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42109     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42110     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42111     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42112     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42113     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42114     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42115     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42116     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42117     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42118     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42119     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42120     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42121     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42122     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42123     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42124     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42125     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42126     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42127     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42128     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42129     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42130     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42131     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42132     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42133     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42134     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42135     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42136     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42137     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42138     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42139     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42140     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42141     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42142     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42143     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42144     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42145     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42146     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42147     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42148     UNICODE_LOWERCASE_LETTER
  42149   },
  42150   { /* page 470, index 106 */
  42151     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42152     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42153     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42154     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42155     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42156     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42157     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42158     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42159     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42160     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42161     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42162     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42163     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42164     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42165     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42166     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42167     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42168     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42169     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42170     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42171     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42172     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42173     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42174     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42175     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42176     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42177     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42178     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42179     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42180     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42181     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42182     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42183     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42184     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42185     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42186     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42187     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42188     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42189     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42190     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42191     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42192     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42193     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42194     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42195     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42196     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42197     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42198     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42199     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42200     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42201     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42202     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42203     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42204     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42205     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42206     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42207     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42208     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42209     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42210     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42211     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42212     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42213     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42214     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42215     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42216     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42217     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42218     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42219     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42220     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42221     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42222     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42223     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42224     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42225     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42226     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42227     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42228     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42229     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42230     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42231     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42232     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42233     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42234     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UPPERCASE_LETTER,
  42235     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42236     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42237     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42238     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42239     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42240     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42241     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42242     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42243     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42244     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42245     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42246     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42247     UNICODE_MATH_SYMBOL, UNICODE_LOWERCASE_LETTER,
  42248     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42249     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42250     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42251     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42252     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42253     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42254     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42255     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42256     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42257     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42258     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42259     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42260     UNICODE_MATH_SYMBOL, UNICODE_LOWERCASE_LETTER,
  42261     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42262     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42263     UNICODE_LOWERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42264     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42265     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42266     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42267     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42268     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42269     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42270     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42271     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42272     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42273     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42274     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42275     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42276     UNICODE_MATH_SYMBOL, UNICODE_LOWERCASE_LETTER,
  42277     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42278     UNICODE_LOWERCASE_LETTER
  42279   },
  42280   { /* page 471, index 107 */
  42281     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42282     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42283     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42284     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42285     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42286     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42287     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42288     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42289     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42290     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42291     UNICODE_LOWERCASE_LETTER, UNICODE_MATH_SYMBOL,
  42292     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42293     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42294     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42295     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42296     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42297     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42298     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42299     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42300     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42301     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42302     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42303     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42304     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42305     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42306     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42307     UNICODE_UPPERCASE_LETTER, UNICODE_MATH_SYMBOL,
  42308     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42309     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42310     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42311     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42312     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42313     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42314     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42315     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42316     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42317     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42318     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42319     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42320     UNICODE_LOWERCASE_LETTER, UNICODE_MATH_SYMBOL,
  42321     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42322     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42323     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42324     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42325     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42326     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42327     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42328     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42329     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42330     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42331     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42332     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42333     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42334     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42335     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42336     UNICODE_UPPERCASE_LETTER, UNICODE_MATH_SYMBOL,
  42337     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42338     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42339     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42340     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42341     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42342     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42343     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42344     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42345     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42346     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42347     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42348     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42349     UNICODE_LOWERCASE_LETTER, UNICODE_MATH_SYMBOL,
  42350     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42351     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42352     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42353     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42354     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42355     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42356     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42357     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42358     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42359     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42360     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42361     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42362     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42363     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42364     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42365     UNICODE_UPPERCASE_LETTER, UNICODE_MATH_SYMBOL,
  42366     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42367     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42368     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42369     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42370     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42371     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42372     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42373     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42374     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42375     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42376     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42377     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42378     UNICODE_LOWERCASE_LETTER, UNICODE_MATH_SYMBOL,
  42379     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42380     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42381     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42382     UNICODE_UPPERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42383     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_DECIMAL_NUMBER,
  42384     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42385     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42386     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42387     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42388     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42389     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42390     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42391     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42392     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42393     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42394     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42395     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42396     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42397     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42398     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42399     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42400     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42401     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42402     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42403     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42404     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42405     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42406     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42407     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42408     UNICODE_DECIMAL_NUMBER
  42409   },
  42410   { /* page 474, index 108 */
  42411     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42412     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42413     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42414     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42415     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42416     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42417     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42418     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42419     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42420     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42421     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42422     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42423     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42424     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42425     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42426     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42427     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42428     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42429     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42430     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42431     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42432     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42433     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42434     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42435     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42436     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42437     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42438     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_SYMBOL,
  42439     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42440     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42441     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42442     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42443     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42444     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42445     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42446     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42447     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42448     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42449     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42450     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42451     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42452     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42453     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42454     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42455     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42456     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42457     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42458     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42459     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42460     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42461     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42462     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42463     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42464     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42465     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42466     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42467     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42468     UNICODE_NON_SPACING_MARK, UNICODE_OTHER_SYMBOL,
  42469     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42470     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42471     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42472     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42473     UNICODE_OTHER_SYMBOL, UNICODE_NON_SPACING_MARK,
  42474     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42475     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  42476     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  42477     UNICODE_OTHER_PUNCTUATION, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42478     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42479     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42480     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42481     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42482     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  42483     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42484     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42485     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  42486     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42487     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42488     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42489     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42490     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42491     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42492     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42493     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42494     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42495     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42496     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42497     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42498     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42499     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42500     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42501     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42502     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42503     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42504     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42505     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42506     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42507     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42508     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42509     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42510     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42511     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42512     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42513     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42514     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42515     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42516     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42517     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42518     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42519     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  42520   },
  42521   { /* page 480, index 109 */
  42522     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42523     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42524     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42525     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED,
  42526     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42527     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42528     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42529     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42530     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42531     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42532     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42533     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42534     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42535     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42536     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42537     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42538     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED,
  42539     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42540     UNICODE_UNASSIGNED, UNICODE_NON_SPACING_MARK,
  42541     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42542     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42543     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42544     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42545     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42546     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42547     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42548     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42549     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42550     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42551     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42552     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42553     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42554     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42555     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42556     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42557     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42558     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42559     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42560     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42561     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42562     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42563     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42564     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42565     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42566     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42567     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42568     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42569     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42570     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42571     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42572     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42573     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42574     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42575     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42576     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42577     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42578     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42579     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42580     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42581     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42582     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42583     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42584     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42585     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42586     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42587     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42588     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42589     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42590     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42591     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42592     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42593     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42594     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42595     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42596     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42597     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42598     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42599     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42600     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42601     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42602     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42603     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42604     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42605     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42606     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42607     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42608     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42609     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42610     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42611     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42612     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42613     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  42614   },
  42615   { /* page 488, index 110 */
  42616     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42617     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42618     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42619     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42620     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42621     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42622     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42623     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42624     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42625     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42626     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42627     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42628     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42629     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42630     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42631     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42632     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42633     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42634     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42635     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42636     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42637     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42638     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42639     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42640     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42641     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42642     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42643     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42644     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42645     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42646     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42647     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42648     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42649     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42650     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42651     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42652     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42653     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42654     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42655     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42656     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42657     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42658     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42659     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42660     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42661     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42662     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42663     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42664     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42665     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42666     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42667     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42668     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42669     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42670     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42671     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42672     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42673     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42674     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42675     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42676     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42677     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42678     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42679     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42680     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42681     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  42682     UNICODE_UNASSIGNED, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  42683     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  42684     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  42685     UNICODE_OTHER_NUMBER, UNICODE_NON_SPACING_MARK,
  42686     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42687     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42688     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42689     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42690     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42691     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42692     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42693     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42694     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42695     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42696     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42697     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42698     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42699     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42700     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42701     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42702     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  42703   },
  42704   { /* page 489, index 111 */
  42705     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42706     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42707     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42708     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42709     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42710     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42711     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42712     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42713     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42714     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42715     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42716     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42717     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42718     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42719     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42720     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42721     UNICODE_UPPERCASE_LETTER, UNICODE_UPPERCASE_LETTER,
  42722     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42723     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42724     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42725     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42726     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42727     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42728     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42729     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42730     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42731     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42732     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42733     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42734     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42735     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42736     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42737     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42738     UNICODE_LOWERCASE_LETTER, UNICODE_LOWERCASE_LETTER,
  42739     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42740     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42741     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  42742     UNICODE_NON_SPACING_MARK, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42743     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42744     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42745     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42746     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42747     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER,
  42748     UNICODE_DECIMAL_NUMBER, UNICODE_DECIMAL_NUMBER, UNICODE_UNASSIGNED,
  42749     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42750     UNICODE_OTHER_PUNCTUATION, UNICODE_OTHER_PUNCTUATION,
  42751     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42752     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42753     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42754     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42755     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42756     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42757     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42758     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42759     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42760     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42761     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42762     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42763     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42764     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42765     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42766     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42767     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42768     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42769     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42770     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42771     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42772     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42773     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42774     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42775     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42776     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42777     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42778     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42779     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42780     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42781     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42782     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42783     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42784     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42785     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42786     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42787     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42788     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42789     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42790     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42791     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42792     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42793     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42794     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42795     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42796     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42797     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42798     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42799     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42800     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42801     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42802     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42803     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42804     UNICODE_UNASSIGNED
  42805   },
  42806   { /* page 494, index 112 */
  42807     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42808     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  42809     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42810     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42811     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42812     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42813     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42814     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42815     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42816     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42817     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  42818     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  42819     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42820     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  42821     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42822     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42823     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42824     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42825     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  42826     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  42827     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42828     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42829     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42830     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  42831     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  42832     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  42833     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  42834     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  42835     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42836     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  42837     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  42838     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  42839     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42840     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  42841     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42842     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  42843     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42844     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42845     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  42846     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42847     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42848     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  42849     UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  42850     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42851     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42852     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42853     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42854     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42855     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42856     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42857     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42858     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42859     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42860     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  42861     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  42862     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42863     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  42864     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42865     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42866     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42867     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42868     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  42869     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  42870     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42871     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42872     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42873     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42874     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42875     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42876     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42877     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42878     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42879     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42880     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42881     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42882     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42883     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42884     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42885     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42886     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42887     UNICODE_MATH_SYMBOL, UNICODE_MATH_SYMBOL, UNICODE_UNASSIGNED,
  42888     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42889     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42890     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42891     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42892     UNICODE_UNASSIGNED
  42893   },
  42894   { /* page 496, index 113 */
  42895     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42896     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42897     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42898     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42899     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42900     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42901     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42902     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42903     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42904     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42905     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42906     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42907     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42908     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42909     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  42910     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42911     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42912     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42913     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42914     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42915     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42916     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42917     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42918     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42919     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42920     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42921     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42922     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42923     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42924     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42925     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42926     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42927     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42928     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42929     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42930     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42931     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42932     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42933     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42934     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42935     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42936     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42937     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42938     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42939     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42940     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42941     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42942     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42943     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42944     UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42945     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42946     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42947     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42948     UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42949     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42950     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42951     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42952     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42953     UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42954     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42955     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42956     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42957     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42958     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42959     UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42960     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42961     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42962     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42963     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42964     UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL,
  42965     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42966     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42967     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42968     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42969     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42970     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42971     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42972     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42973     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42974     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42975     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42976     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42977     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42978     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42979     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42980     UNICODE_UNASSIGNED
  42981   },
  42982   { /* page 497, index 114 */
  42983     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  42984     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  42985     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  42986     UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER, UNICODE_OTHER_NUMBER,
  42987     UNICODE_OTHER_NUMBER, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  42988     UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42989     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42990     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42991     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42992     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42993     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42994     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42995     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42996     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42997     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  42998     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  42999     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43000     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43001     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43002     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43003     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43004     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43005     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43006     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43007     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43008     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43009     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43010     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43011     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43012     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43013     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43014     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43015     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43016     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43017     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43018     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43019     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43020     UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43021     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43022     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43023     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43024     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43025     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43026     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43027     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43028     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43029     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43030     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43031     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43032     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43033     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43034     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43035     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43036     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43037     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43038     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43039     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43040     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  43041     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43042     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43043     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43044     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43045     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43046     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43047     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43048     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43049     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43050     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43051     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43052     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43053     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43054     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43055     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43056     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43057     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43058     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43059     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL,
  43060     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43061     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43062     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43063     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43064     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43065     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43066     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43067     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43068     UNICODE_OTHER_SYMBOL
  43069   },
  43070   { /* page 498, index 115 */
  43071     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43072     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43073     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43074     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43075     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43076     UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43077     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43078     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43079     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43080     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43081     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43082     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43083     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43084     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43085     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43086     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43087     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43088     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43089     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43090     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43091     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43092     UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43093     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43094     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43095     UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43096     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43097     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL,
  43098     UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43099     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43100     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43101     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43102     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43103     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43104     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43105     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43106     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43107     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43108     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43109     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43110     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43111     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43112     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43113     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43114     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43115     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43116     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43117     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43118     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43119     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43120     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43121     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43122     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43123     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43124     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43125     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43126     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43127     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43128     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43129     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43130     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43131     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43132     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43133     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43134     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43135     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43136     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43137     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43138     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43139     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43140     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43141     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43142     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43143     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43144     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43145     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43146     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43147     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43148     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43149     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43150     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43151     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43152     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43153     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43154     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43155     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43156     UNICODE_UNASSIGNED
  43157   },
  43158   { /* page 499, index 116 */
  43159     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43160     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43161     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43162     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43163     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43164     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43165     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43166     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43167     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43168     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43169     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43170     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43171     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43172     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43173     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43174     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43175     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43176     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43177     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43178     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43179     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43180     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43181     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43182     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43183     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43184     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43185     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43186     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43187     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43188     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43189     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43190     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43191     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43192     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43193     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43194     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43195     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43196     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43197     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43198     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43199     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43200     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43201     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43202     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43203     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43204     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43205     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43206     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43207     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43208     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43209     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43210     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43211     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43212     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43213     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43214     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43215     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43216     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43217     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43218     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43219     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43220     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43221     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43222     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43223     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43224     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43225     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43226     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43227     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43228     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43229     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43230     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43231     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43232     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43233     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43234     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43235     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43236     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43237     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43238     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43239     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43240     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43241     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43242     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43243     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  43244     UNICODE_MODIFIER_SYMBOL, UNICODE_MODIFIER_SYMBOL,
  43245     UNICODE_MODIFIER_SYMBOL
  43246   },
  43247   { /* page 502, index 117 */
  43248     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43249     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43250     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43251     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43252     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43253     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43254     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43255     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43256     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43257     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43258     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43259     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43260     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43261     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43262     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43263     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43264     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43265     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43266     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43267     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43268     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43269     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43270     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43271     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43272     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43273     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43274     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43275     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43276     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43277     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43278     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43279     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43280     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43281     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43282     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43283     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43284     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43285     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43286     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43287     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43288     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43289     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43290     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43291     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43292     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43293     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43294     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43295     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43296     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43297     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43298     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43299     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43300     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43301     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43302     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43303     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43304     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43305     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43306     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43307     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43308     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43309     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43310     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43311     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43312     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43313     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43314     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43315     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43316     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43317     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43318     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43319     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43320     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43321     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43322     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL,
  43323     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43324     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43325     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43326     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43327     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43328     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43329     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43330     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43331     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43332     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43333     UNICODE_UNASSIGNED
  43334   },
  43335   { /* page 503, index 118 */
  43336     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43337     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43338     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43339     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43340     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43341     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43342     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43343     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43344     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43345     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43346     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43347     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43348     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43349     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43350     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43351     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43352     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43353     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43354     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43355     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43356     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43357     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43358     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43359     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43360     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43361     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43362     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43363     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43364     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43365     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43366     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43367     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43368     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43369     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43370     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43371     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43372     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43373     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43374     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  43375     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43376     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43377     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43378     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL,
  43379     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43380     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43381     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43382     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43383     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43384     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43385     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43386     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43387     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43388     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43389     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43390     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43391     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43392     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43393     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43394     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43395     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43396     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43397     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43398     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43399     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43400     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43401     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43402     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43403     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43404     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43405     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43406     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43407     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43408     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43409     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43410     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43411     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43412     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43413     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43414     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43415     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43416     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43417     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43418     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43419     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43420     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43421     UNICODE_UNASSIGNED
  43422   },
  43423   { /* page 504, index 119 */
  43424     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43425     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43426     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43427     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43428     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43429     UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43430     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43431     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43432     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43433     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43434     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43435     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43436     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43437     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43438     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43439     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43440     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43441     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43442     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43443     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43444     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43445     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43446     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43447     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43448     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43449     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43450     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL,
  43451     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43452     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43453     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43454     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43455     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43456     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43457     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43458     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43459     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43460     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43461     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43462     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43463     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43464     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43465     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43466     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43467     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43468     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43469     UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43470     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43471     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43472     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43473     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43474     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43475     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43476     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43477     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43478     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43479     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43480     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43481     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43482     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43483     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43484     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43485     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43486     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43487     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43488     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43489     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43490     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43491     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43492     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43493     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43494     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43495     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43496     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43497     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43498     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43499     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43500     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43501     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43502     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43503     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43504     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43505     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43506     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43507     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43508     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43509     UNICODE_UNASSIGNED
  43510   },
  43511   { /* page 505, index 120 */
  43512     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43513     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43514     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43515     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43516     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43517     UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43518     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43519     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43520     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43521     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43522     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43523     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43524     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43525     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43526     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43527     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43528     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43529     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43530     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43531     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43532     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43533     UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43534     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43535     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43536     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43537     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  43538     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL,
  43539     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43540     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43541     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43542     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43543     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43544     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43545     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43546     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43547     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43548     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43549     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43550     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43551     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43552     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43553     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43554     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL,
  43555     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43556     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43557     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43558     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43559     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43560     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43561     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43562     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED,
  43563     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43564     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43565     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43566     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43567     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43568     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43569     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43570     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43571     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43572     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43573     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43574     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43575     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43576     UNICODE_OTHER_SYMBOL, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43577     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43578     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43579     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43580     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43581     UNICODE_UNASSIGNED, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43582     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43583     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43584     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43585     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43586     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43587     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43588     UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL, UNICODE_OTHER_SYMBOL,
  43589     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43590     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43591     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43592     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43593     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43594     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43595     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43596     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43597     UNICODE_UNASSIGNED
  43598   },
  43599   { /* page 678, index 121 */
  43600     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43601     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43602     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43603     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43604     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43605     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43606     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43607     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43608     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43609     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43610     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43611     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43612     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43613     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43614     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43615     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43616     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43617     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43618     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43619     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43620     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43621     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43622     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43623     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43624     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43625     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43626     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43627     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43628     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43629     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43630     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43631     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43632     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43633     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43634     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43635     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43636     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43637     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43638     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43639     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43640     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43641     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43642     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43643     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43644     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43645     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43646     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43647     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43648     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43649     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43650     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43651     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43652     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43653     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43654     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43655     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43656     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43657     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43658     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43659     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43660     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43661     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43662     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43663     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43664     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43665     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43666     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43667     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43668     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43669     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43670     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43671     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  43672     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43673     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43674     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43675     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43676     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43677     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43678     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43679     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43680     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43681     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43682     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43683     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43684     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43685     UNICODE_UNASSIGNED
  43686   },
  43687   { /* page 695, index 122 */
  43688     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43689     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43690     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43691     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43692     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43693     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43694     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43695     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43696     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43697     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43698     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43699     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43700     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43701     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43702     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43703     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43704     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43705     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_UNASSIGNED,
  43706     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43707     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43708     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43709     UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43710     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43711     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43712     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43713     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43714     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43715     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43716     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43717     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43718     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43719     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43720     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43721     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43722     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43723     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43724     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43725     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43726     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43727     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43728     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43729     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43730     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43731     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43732     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43733     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43734     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43735     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43736     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43737     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43738     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43739     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43740     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43741     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43742     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43743     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43744     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43745     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43746     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43747     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43748     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43749     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43750     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43751     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43752     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43753     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43754     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43755     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43756     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43757     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43758     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43759     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43760     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43761     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43762     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43763     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43764     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43765     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43766     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43767     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43768     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43769     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43770     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43771     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43772     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43773     UNICODE_OTHER_LETTER
  43774   },
  43775   { /* page 696, index 123 */
  43776     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43777     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43778     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43779     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43780     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43781     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43782     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43783     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43784     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43785     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43786     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  43787     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43788     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43789     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43790     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43791     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43792     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43793     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43794     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43795     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43796     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43797     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43798     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43799     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43800     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43801     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43802     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43803     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43804     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43805     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43806     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43807     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43808     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43809     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43810     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43811     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43812     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43813     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43814     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43815     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43816     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43817     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43818     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43819     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43820     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43821     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43822     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43823     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43824     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43825     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43826     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43827     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43828     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43829     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43830     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43831     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43832     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43833     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43834     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43835     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43836     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43837     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43838     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43839     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43840     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43841     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43842     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43843     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43844     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43845     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43846     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43847     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43848     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43849     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43850     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43851     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43852     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43853     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43854     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43855     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43856     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43857     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43858     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43859     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43860     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43861     UNICODE_OTHER_LETTER
  43862   },
  43863   { /* page 718, index 124 */
  43864     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43865     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43866     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43867     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43868     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43869     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43870     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43871     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43872     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43873     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43874     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43875     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43876     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43877     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43878     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43879     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43880     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43881     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43882     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43883     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43884     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43885     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43886     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43887     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43888     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43889     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43890     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43891     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43892     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43893     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43894     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43895     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43896     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43897     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43898     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43899     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43900     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43901     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43902     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43903     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43904     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43905     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43906     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43907     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43908     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43909     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43910     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43911     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43912     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43913     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43914     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43915     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43916     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43917     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43918     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43919     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43920     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43921     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  43922     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_OTHER_LETTER,
  43923     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43924     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43925     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43926     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43927     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43928     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43929     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43930     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43931     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43932     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43933     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43934     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43935     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43936     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43937     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43938     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43939     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43940     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43941     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43942     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43943     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43944     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43945     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43946     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43947     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43948     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43949     UNICODE_OTHER_LETTER
  43950   },
  43951   { /* page 747, index 125 */
  43952     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43953     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43954     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43955     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43956     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43957     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43958     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43959     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43960     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43961     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43962     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43963     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43964     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43965     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43966     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43967     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43968     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43969     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43970     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43971     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43972     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43973     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43974     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43975     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43976     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43977     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43978     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43979     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43980     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43981     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43982     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43983     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43984     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43985     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43986     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43987     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43988     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43989     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43990     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43991     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43992     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43993     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43994     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43995     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43996     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43997     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43998     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  43999     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44000     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44001     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44002     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44003     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44004     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44005     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44006     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44007     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44008     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44009     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44010     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44011     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44012     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44013     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44014     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44015     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44016     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44017     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44018     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44019     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44020     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44021     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44022     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44023     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44024     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44025     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44026     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44027     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44028     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44029     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44030     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44031     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44032     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44033     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44034     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44035     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44036     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44037     UNICODE_UNASSIGNED
  44038   },
  44039   { /* page 762, index 126 */
  44040     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44041     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44042     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44043     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44044     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44045     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44046     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44047     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44048     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44049     UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER, UNICODE_OTHER_LETTER,
  44050     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44051     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44052     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44053     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44054     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44055     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44056     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44057     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44058     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44059     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44060     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44061     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44062     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44063     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44064     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44065     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44066     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44067     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44068     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44069     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44070     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44071     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44072     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44073     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44074     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44075     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44076     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44077     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44078     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44079     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44080     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44081     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44082     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44083     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44084     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44085     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44086     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44087     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44088     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44089     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44090     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44091     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44092     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44093     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44094     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44095     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44096     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44097     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44098     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44099     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44100     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44101     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44102     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44103     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44104     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44105     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44106     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44107     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44108     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44109     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44110     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44111     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44112     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44113     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44114     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44115     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44116     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44117     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44118     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44119     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44120     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44121     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44122     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44123     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44124     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44125     UNICODE_UNASSIGNED
  44126   },
  44127   { /* page 3584, index 127 */
  44128     UNICODE_UNASSIGNED, UNICODE_FORMAT, UNICODE_UNASSIGNED,
  44129     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44130     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44131     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44132     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44133     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44134     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44135     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44136     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44137     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44138     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_FORMAT,
  44139     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44140     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44141     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44142     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44143     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44144     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44145     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44146     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44147     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44148     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44149     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44150     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44151     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44152     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44153     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44154     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44155     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44156     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44157     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44158     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44159     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44160     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44161     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44162     UNICODE_FORMAT, UNICODE_FORMAT, UNICODE_FORMAT,
  44163     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44164     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44165     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44166     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44167     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44168     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44169     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44170     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44171     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44172     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44173     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44174     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44175     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44176     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44177     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44178     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44179     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44180     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44181     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44182     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44183     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44184     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44185     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44186     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44187     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44188     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44189     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44190     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44191     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44192     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44193     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44194     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44195     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44196     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44197     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44198     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44199     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44200     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44201     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44202     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44203     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44204     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44205     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED
  44206   },
  44207   { /* page 3585, index 128 */
  44208     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44209     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44210     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44211     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44212     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44213     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44214     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44215     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44216     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44217     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44218     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44219     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44220     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44221     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44222     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44223     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44224     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44225     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44226     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44227     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44228     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44229     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44230     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44231     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44232     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44233     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44234     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44235     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44236     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44237     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44238     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44239     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44240     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44241     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44242     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44243     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44244     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44245     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44246     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44247     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44248     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44249     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44250     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44251     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44252     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44253     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44254     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44255     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44256     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44257     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44258     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44259     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44260     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44261     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44262     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44263     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44264     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44265     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44266     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44267     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44268     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44269     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44270     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44271     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44272     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44273     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44274     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44275     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44276     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44277     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44278     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44279     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44280     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44281     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44282     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44283     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44284     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44285     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44286     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44287     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44288     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44289     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44290     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44291     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44292     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44293     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44294     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44295     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44296     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44297     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44298     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44299     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44300     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44301     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44302     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44303     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44304     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44305     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44306     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44307     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44308     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44309     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44310     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44311     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44312     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44313     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44314     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44315     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44316     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44317     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44318     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44319     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44320     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44321     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44322     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44323     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44324     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44325     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44326     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44327     UNICODE_NON_SPACING_MARK, UNICODE_NON_SPACING_MARK,
  44328     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44329     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44330     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44331     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44332     UNICODE_UNASSIGNED, UNICODE_UNASSIGNED, UNICODE_UNASSIGNED,
  44333     UNICODE_UNASSIGNED
  44334   },
  44335   { /* page 4095, index 129 */
  44336     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44337     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44338     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44339     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44340     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44341     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44342     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44343     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44344     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44345     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44346     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44347     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44348     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44349     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44350     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44351     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44352     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44353     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44354     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44355     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44356     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44357     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44358     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44359     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44360     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44361     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44362     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44363     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44364     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44365     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44366     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44367     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44368     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44369     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44370     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44371     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44372     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44373     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44374     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44375     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44376     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44377     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44378     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44379     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44380     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44381     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44382     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44383     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44384     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44385     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44386     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44387     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44388     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44389     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44390     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44391     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44392     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44393     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44394     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44395     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44396     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44397     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44398     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44399     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44400     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44401     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44402     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44403     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44404     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44405     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44406     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44407     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44408     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44409     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44410     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44411     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44412     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44413     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44414     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44415     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44416     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44417     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44418     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44419     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44420     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_UNASSIGNED,
  44421     UNICODE_UNASSIGNED
  44422   },
  44423   { /* page 4351, index 130 */
  44424     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44425     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44426     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44427     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44428     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44429     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44430     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44431     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44432     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44433     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44434     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44435     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44436     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44437     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44438     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44439     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44440     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44441     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44442     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44443     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44444     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44445     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44446     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44447     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44448     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44449     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44450     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44451     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44452     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44453     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44454     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44455     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44456     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44457     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44458     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44459     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44460     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44461     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44462     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44463     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44464     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44465     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44466     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44467     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44468     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44469     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44470     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44471     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44472     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44473     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44474     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44475     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44476     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44477     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44478     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44479     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44480     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44481     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44482     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44483     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44484     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44485     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44486     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44487     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44488     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44489     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44490     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44491     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44492     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44493     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44494     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44495     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44496     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44497     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44498     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44499     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44500     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44501     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44502     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44503     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44504     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44505     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44506     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44507     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE,
  44508     UNICODE_PRIVATE_USE, UNICODE_PRIVATE_USE, UNICODE_UNASSIGNED,
  44509     UNICODE_UNASSIGNED
  44510   }
  44511 };
  44512 
  44513 /* U+0000 through U+2FAFF */
  44514 static const int16_t type_table_part1[763] = {
  44515   0 /* page 0 */,
  44516   1 /* page 1 */,
  44517   2 /* page 2 */,
  44518   3 /* page 3 */,
  44519   4 /* page 4 */,
  44520   5 /* page 5 */,
  44521   6 /* page 6 */,
  44522   7 /* page 7 */,
  44523   8 /* page 8 */,
  44524   9 /* page 9 */,
  44525   10 /* page 10 */,
  44526   11 /* page 11 */,
  44527   12 /* page 12 */,
  44528   13 /* page 13 */,
  44529   14 /* page 14 */,
  44530   15 /* page 15 */,
  44531   16 /* page 16 */,
  44532   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44533   17 /* page 18 */,
  44534   18 /* page 19 */,
  44535   19 /* page 20 */,
  44536   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44537   20 /* page 22 */,
  44538   21 /* page 23 */,
  44539   22 /* page 24 */,
  44540   23 /* page 25 */,
  44541   24 /* page 26 */,
  44542   25 /* page 27 */,
  44543   26 /* page 28 */,
  44544   27 /* page 29 */,
  44545   28 /* page 30 */,
  44546   29 /* page 31 */,
  44547   30 /* page 32 */,
  44548   31 /* page 33 */,
  44549   UNICODE_MATH_SYMBOL + UNICODE_MAX_TABLE_INDEX,
  44550   32 /* page 35 */,
  44551   33 /* page 36 */,
  44552   34 /* page 37 */,
  44553   35 /* page 38 */,
  44554   36 /* page 39 */,
  44555   UNICODE_OTHER_SYMBOL + UNICODE_MAX_TABLE_INDEX,
  44556   37 /* page 41 */,
  44557   UNICODE_MATH_SYMBOL + UNICODE_MAX_TABLE_INDEX,
  44558   38 /* page 43 */,
  44559   39 /* page 44 */,
  44560   40 /* page 45 */,
  44561   41 /* page 46 */,
  44562   42 /* page 47 */,
  44563   43 /* page 48 */,
  44564   44 /* page 49 */,
  44565   45 /* page 50 */,
  44566   UNICODE_OTHER_SYMBOL + UNICODE_MAX_TABLE_INDEX,
  44567   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44568   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44569   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44570   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44571   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44572   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44573   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44574   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44575   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44576   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44577   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44578   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44579   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44580   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44581   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44582   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44583   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44584   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44585   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44586   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44587   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44588   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44589   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44590   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44591   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44592   46 /* page 77 */,
  44593   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44594   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44595   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44596   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44597   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44598   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44599   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44600   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44601   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44602   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44603   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44604   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44605   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44606   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44607   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44608   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44609   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44610   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44611   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44612   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44613   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44614   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44615   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44616   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44617   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44618   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44619   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44620   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44621   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44622   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44623   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44624   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44625   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44626   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44627   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44628   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44629   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44630   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44631   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44632   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44633   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44634   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44635   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44636   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44637   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44638   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44639   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44640   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44641   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44642   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44643   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44644   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44645   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44646   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44647   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44648   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44649   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44650   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44651   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44652   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44653   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44654   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44655   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44656   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44657   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44658   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44659   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44660   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44661   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44662   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44663   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44664   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44665   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44666   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44667   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44668   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44669   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44670   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44671   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44672   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44673   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44674   47 /* page 159 */,
  44675   48 /* page 160 */,
  44676   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44677   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44678   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44679   49 /* page 164 */,
  44680   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44681   50 /* page 166 */,
  44682   51 /* page 167 */,
  44683   52 /* page 168 */,
  44684   53 /* page 169 */,
  44685   54 /* page 170 */,
  44686   55 /* page 171 */,
  44687   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44688   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44689   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44690   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44691   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44692   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44693   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44694   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44695   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44696   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44697   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44698   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44699   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44700   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44701   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44702   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44703   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44704   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44705   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44706   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44707   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44708   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44709   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44710   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44711   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44712   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44713   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44714   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44715   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44716   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44717   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44718   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44719   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44720   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44721   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44722   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44723   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44724   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44725   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44726   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44727   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44728   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44729   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44730   56 /* page 215 */,
  44731   UNICODE_SURROGATE + UNICODE_MAX_TABLE_INDEX,
  44732   UNICODE_SURROGATE + UNICODE_MAX_TABLE_INDEX,
  44733   UNICODE_SURROGATE + UNICODE_MAX_TABLE_INDEX,
  44734   UNICODE_SURROGATE + UNICODE_MAX_TABLE_INDEX,
  44735   UNICODE_SURROGATE + UNICODE_MAX_TABLE_INDEX,
  44736   UNICODE_SURROGATE + UNICODE_MAX_TABLE_INDEX,
  44737   UNICODE_SURROGATE + UNICODE_MAX_TABLE_INDEX,
  44738   UNICODE_SURROGATE + UNICODE_MAX_TABLE_INDEX,
  44739   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44740   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44741   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44742   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44743   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44744   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44745   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44746   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44747   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44748   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44749   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44750   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44751   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44752   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44753   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44754   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44755   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44756   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44757   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44758   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44759   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44760   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44761   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44762   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44763   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  44764   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44765   57 /* page 250 */,
  44766   58 /* page 251 */,
  44767   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44768   59 /* page 253 */,
  44769   60 /* page 254 */,
  44770   61 /* page 255 */,
  44771   62 /* page 256 */,
  44772   63 /* page 257 */,
  44773   64 /* page 258 */,
  44774   65 /* page 259 */,
  44775   66 /* page 260 */,
  44776   67 /* page 261 */,
  44777   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44778   68 /* page 263 */,
  44779   69 /* page 264 */,
  44780   70 /* page 265 */,
  44781   71 /* page 266 */,
  44782   72 /* page 267 */,
  44783   73 /* page 268 */,
  44784   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44785   74 /* page 270 */,
  44786   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44787   75 /* page 272 */,
  44788   76 /* page 273 */,
  44789   77 /* page 274 */,
  44790   78 /* page 275 */,
  44791   79 /* page 276 */,
  44792   80 /* page 277 */,
  44793   81 /* page 278 */,
  44794   82 /* page 279 */,
  44795   83 /* page 280 */,
  44796   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44797   84 /* page 282 */,
  44798   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44799   85 /* page 284 */,
  44800   86 /* page 285 */,
  44801   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44802   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44803   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44804   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44805   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44806   87 /* page 291 */,
  44807   88 /* page 292 */,
  44808   89 /* page 293 */,
  44809   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44810   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44811   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44812   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44813   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44814   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44815   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44816   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44817   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44818   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44819   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44820   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44821   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44822   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44823   90 /* page 308 */,
  44824   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44825   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44826   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44827   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44828   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44829   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44830   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44831   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44832   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44833   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44834   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44835   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44836   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44837   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44838   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44839   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44840   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44841   91 /* page 326 */,
  44842   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44843   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44844   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44845   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44846   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44847   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44848   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44849   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44850   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44851   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44852   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44853   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44854   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44855   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44856   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44857   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44858   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44859   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44860   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44861   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44862   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44863   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44864   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44865   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44866   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44867   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44868   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44869   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44870   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44871   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44872   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44873   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44874   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44875   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44876   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44877   92 /* page 362 */,
  44878   93 /* page 363 */,
  44879   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44880   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44881   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44882   94 /* page 367 */,
  44883   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44884   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44885   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44886   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44887   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44888   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44889   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44890   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44891   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44892   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44893   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44894   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44895   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44896   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44897   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44898   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44899   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44900   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44901   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44902   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44903   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44904   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44905   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44906   95 /* page 391 */,
  44907   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44908   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44909   96 /* page 394 */,
  44910   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44911   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44912   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44913   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44914   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44915   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44916   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44917   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44918   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44919   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44920   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44921   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44922   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44923   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44924   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44925   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44926   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44927   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44928   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44929   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44930   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44931   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44932   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44933   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44934   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44935   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44936   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44937   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44938   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44939   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44940   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44941   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44942   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44943   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44944   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44945   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44946   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44947   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  44948   97 /* page 433 */,
  44949   98 /* page 434 */,
  44950   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44951   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44952   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44953   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44954   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44955   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44956   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44957   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44958   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44959   99 /* page 444 */,
  44960   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44961   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44962   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44963   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44964   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44965   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44966   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44967   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44968   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44969   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44970   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44971   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44972   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44973   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44974   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44975   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44976   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44977   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44978   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44979   100 /* page 464 */,
  44980   101 /* page 465 */,
  44981   102 /* page 466 */,
  44982   103 /* page 467 */,
  44983   104 /* page 468 */,
  44984   105 /* page 469 */,
  44985   106 /* page 470 */,
  44986   107 /* page 471 */,
  44987   UNICODE_OTHER_SYMBOL + UNICODE_MAX_TABLE_INDEX,
  44988   UNICODE_OTHER_SYMBOL + UNICODE_MAX_TABLE_INDEX,
  44989   108 /* page 474 */,
  44990   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44991   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44992   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44993   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44994   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44995   109 /* page 480 */,
  44996   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44997   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44998   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  44999   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45000   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45001   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45002   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45003   110 /* page 488 */,
  45004   111 /* page 489 */,
  45005   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45006   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45007   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45008   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45009   112 /* page 494 */,
  45010   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45011   113 /* page 496 */,
  45012   114 /* page 497 */,
  45013   115 /* page 498 */,
  45014   116 /* page 499 */,
  45015   UNICODE_OTHER_SYMBOL + UNICODE_MAX_TABLE_INDEX,
  45016   UNICODE_OTHER_SYMBOL + UNICODE_MAX_TABLE_INDEX,
  45017   117 /* page 502 */,
  45018   118 /* page 503 */,
  45019   119 /* page 504 */,
  45020   120 /* page 505 */,
  45021   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45022   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45023   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45024   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45025   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45026   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45027   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45028   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45029   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45030   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45031   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45032   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45033   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45034   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45035   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45036   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45037   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45038   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45039   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45040   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45041   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45042   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45043   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45044   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45045   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45046   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45047   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45048   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45049   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45050   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45051   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45052   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45053   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45054   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45055   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45056   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45057   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45058   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45059   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45060   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45061   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45062   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45063   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45064   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45065   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45066   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45067   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45068   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45069   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45070   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45071   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45072   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45073   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45074   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45075   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45076   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45077   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45078   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45079   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45080   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45081   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45082   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45083   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45084   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45085   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45086   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45087   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45088   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45089   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45090   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45091   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45092   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45093   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45094   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45095   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45096   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45097   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45098   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45099   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45100   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45101   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45102   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45103   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45104   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45105   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45106   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45107   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45108   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45109   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45110   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45111   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45112   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45113   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45114   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45115   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45116   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45117   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45118   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45119   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45120   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45121   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45122   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45123   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45124   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45125   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45126   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45127   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45128   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45129   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45130   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45131   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45132   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45133   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45134   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45135   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45136   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45137   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45138   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45139   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45140   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45141   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45142   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45143   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45144   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45145   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45146   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45147   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45148   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45149   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45150   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45151   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45152   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45153   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45154   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45155   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45156   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45157   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45158   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45159   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45160   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45161   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45162   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45163   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45164   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45165   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45166   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45167   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45168   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45169   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45170   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45171   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45172   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45173   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45174   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45175   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45176   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45177   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45178   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45179   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45180   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45181   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45182   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45183   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45184   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45185   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45186   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45187   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45188   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45189   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45190   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45191   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45192   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45193   121 /* page 678 */,
  45194   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45195   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45196   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45197   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45198   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45199   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45200   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45201   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45202   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45203   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45204   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45205   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45206   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45207   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45208   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45209   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45210   122 /* page 695 */,
  45211   123 /* page 696 */,
  45212   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45213   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45214   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45215   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45216   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45217   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45218   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45219   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45220   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45221   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45222   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45223   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45224   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45225   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45226   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45227   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45228   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45229   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45230   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45231   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45232   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45233   124 /* page 718 */,
  45234   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45235   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45236   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45237   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45238   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45239   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45240   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45241   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45242   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45243   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45244   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45245   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45246   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45247   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45248   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45249   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45250   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45251   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45252   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45253   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45254   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45255   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45256   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45257   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45258   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45259   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45260   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45261   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45262   125 /* page 747 */,
  45263   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45264   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45265   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45266   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45267   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45268   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45269   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45270   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45271   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45272   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45273   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45274   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45275   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45276   UNICODE_OTHER_LETTER + UNICODE_MAX_TABLE_INDEX,
  45277   126 /* page 762 */
  45278 };
  45279 
  45280 /* U+E0000 through U+10FFFF */
  45281 static const int16_t type_table_part2[768] = {
  45282   127 /* page 3584 */,
  45283   128 /* page 3585 */,
  45284   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45285   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45286   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45287   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45288   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45289   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45290   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45291   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45292   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45293   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45294   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45295   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45296   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45297   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45298   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45299   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45300   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45301   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45302   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45303   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45304   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45305   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45306   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45307   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45308   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45309   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45310   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45311   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45312   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45313   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45314   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45315   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45316   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45317   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45318   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45319   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45320   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45321   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45322   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45323   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45324   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45325   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45326   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45327   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45328   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45329   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45330   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45331   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45332   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45333   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45334   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45335   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45336   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45337   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45338   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45339   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45340   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45341   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45342   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45343   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45344   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45345   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45346   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45347   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45348   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45349   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45350   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45351   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45352   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45353   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45354   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45355   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45356   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45357   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45358   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45359   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45360   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45361   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45362   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45363   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45364   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45365   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45366   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45367   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45368   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45369   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45370   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45371   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45372   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45373   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45374   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45375   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45376   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45377   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45378   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45379   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45380   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45381   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45382   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45383   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45384   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45385   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45386   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45387   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45388   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45389   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45390   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45391   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45392   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45393   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45394   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45395   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45396   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45397   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45398   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45399   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45400   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45401   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45402   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45403   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45404   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45405   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45406   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45407   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45408   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45409   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45410   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45411   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45412   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45413   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45414   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45415   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45416   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45417   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45418   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45419   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45420   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45421   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45422   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45423   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45424   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45425   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45426   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45427   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45428   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45429   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45430   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45431   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45432   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45433   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45434   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45435   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45436   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45437   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45438   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45439   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45440   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45441   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45442   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45443   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45444   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45445   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45446   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45447   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45448   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45449   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45450   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45451   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45452   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45453   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45454   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45455   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45456   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45457   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45458   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45459   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45460   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45461   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45462   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45463   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45464   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45465   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45466   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45467   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45468   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45469   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45470   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45471   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45472   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45473   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45474   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45475   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45476   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45477   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45478   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45479   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45480   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45481   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45482   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45483   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45484   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45485   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45486   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45487   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45488   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45489   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45490   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45491   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45492   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45493   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45494   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45495   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45496   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45497   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45498   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45499   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45500   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45501   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45502   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45503   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45504   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45505   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45506   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45507   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45508   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45509   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45510   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45511   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45512   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45513   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45514   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45515   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45516   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45517   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45518   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45519   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45520   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45521   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45522   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45523   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45524   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45525   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45526   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45527   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45528   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45529   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45530   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45531   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45532   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45533   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45534   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45535   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45536   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45537   UNICODE_UNASSIGNED + UNICODE_MAX_TABLE_INDEX,
  45538   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45539   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45540   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45541   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45542   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45543   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45544   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45545   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45546   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45547   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45548   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45549   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45550   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45551   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45552   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45553   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45554   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45555   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45556   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45557   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45558   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45559   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45560   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45561   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45562   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45563   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45564   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45565   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45566   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45567   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45568   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45569   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45570   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45571   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45572   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45573   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45574   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45575   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45576   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45577   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45578   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45579   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45580   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45581   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45582   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45583   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45584   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45585   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45586   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45587   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45588   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45589   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45590   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45591   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45592   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45593   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45594   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45595   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45596   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45597   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45598   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45599   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45600   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45601   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45602   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45603   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45604   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45605   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45606   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45607   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45608   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45609   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45610   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45611   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45612   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45613   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45614   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45615   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45616   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45617   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45618   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45619   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45620   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45621   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45622   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45623   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45624   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45625   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45626   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45627   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45628   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45629   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45630   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45631   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45632   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45633   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45634   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45635   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45636   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45637   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45638   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45639   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45640   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45641   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45642   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45643   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45644   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45645   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45646   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45647   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45648   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45649   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45650   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45651   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45652   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45653   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45654   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45655   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45656   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45657   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45658   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45659   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45660   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45661   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45662   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45663   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45664   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45665   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45666   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45667   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45668   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45669   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45670   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45671   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45672   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45673   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45674   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45675   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45676   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45677   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45678   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45679   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45680   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45681   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45682   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45683   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45684   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45685   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45686   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45687   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45688   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45689   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45690   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45691   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45692   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45693   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45694   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45695   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45696   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45697   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45698   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45699   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45700   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45701   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45702   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45703   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45704   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45705   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45706   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45707   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45708   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45709   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45710   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45711   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45712   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45713   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45714   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45715   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45716   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45717   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45718   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45719   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45720   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45721   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45722   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45723   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45724   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45725   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45726   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45727   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45728   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45729   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45730   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45731   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45732   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45733   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45734   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45735   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45736   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45737   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45738   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45739   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45740   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45741   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45742   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45743   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45744   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45745   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45746   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45747   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45748   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45749   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45750   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45751   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45752   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45753   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45754   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45755   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45756   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45757   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45758   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45759   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45760   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45761   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45762   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45763   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45764   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45765   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45766   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45767   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45768   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45769   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45770   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45771   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45772   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45773   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45774   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45775   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45776   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45777   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45778   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45779   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45780   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45781   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45782   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45783   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45784   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45785   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45786   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45787   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45788   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45789   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45790   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45791   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45792   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45793   129 /* page 4095 */,
  45794   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45795   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45796   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45797   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45798   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45799   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45800   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45801   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45802   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45803   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45804   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45805   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45806   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45807   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45808   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45809   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45810   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45811   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45812   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45813   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45814   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45815   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45816   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45817   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45818   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45819   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45820   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45821   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45822   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45823   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45824   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45825   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45826   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45827   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45828   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45829   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45830   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45831   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45832   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45833   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45834   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45835   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45836   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45837   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45838   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45839   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45840   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45841   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45842   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45843   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45844   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45845   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45846   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45847   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45848   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45849   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45850   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45851   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45852   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45853   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45854   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45855   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45856   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45857   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45858   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45859   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45860   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45861   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45862   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45863   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45864   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45865   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45866   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45867   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45868   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45869   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45870   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45871   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45872   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45873   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45874   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45875   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45876   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45877   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45878   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45879   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45880   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45881   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45882   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45883   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45884   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45885   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45886   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45887   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45888   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45889   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45890   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45891   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45892   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45893   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45894   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45895   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45896   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45897   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45898   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45899   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45900   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45901   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45902   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45903   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45904   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45905   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45906   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45907   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45908   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45909   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45910   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45911   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45912   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45913   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45914   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45915   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45916   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45917   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45918   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45919   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45920   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45921   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45922   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45923   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45924   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45925   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45926   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45927   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45928   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45929   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45930   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45931   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45932   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45933   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45934   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45935   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45936   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45937   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45938   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45939   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45940   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45941   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45942   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45943   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45944   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45945   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45946   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45947   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45948   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45949   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45950   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45951   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45952   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45953   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45954   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45955   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45956   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45957   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45958   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45959   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45960   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45961   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45962   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45963   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45964   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45965   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45966   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45967   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45968   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45969   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45970   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45971   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45972   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45973   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45974   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45975   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45976   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45977   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45978   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45979   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45980   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45981   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45982   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45983   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45984   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45985   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45986   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45987   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45988   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45989   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45990   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45991   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45992   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45993   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45994   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45995   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45996   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45997   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45998   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  45999   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46000   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46001   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46002   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46003   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46004   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46005   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46006   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46007   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46008   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46009   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46010   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46011   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46012   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46013   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46014   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46015   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46016   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46017   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46018   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46019   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46020   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46021   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46022   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46023   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46024   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46025   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46026   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46027   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46028   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46029   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46030   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46031   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46032   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46033   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46034   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46035   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46036   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46037   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46038   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46039   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46040   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46041   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46042   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46043   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46044   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46045   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46046   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46047   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46048   UNICODE_PRIVATE_USE + UNICODE_MAX_TABLE_INDEX,
  46049   130 /* page 4351 */
  46050 };
  46051 
  46052 
  46053 
  46054 /**
  46055  * next UTF-8 code point
  46056  *
  46057  * find the next UTF-8 code point in the string
  46058  *
  46059  * the validity of the found UTF-8 code point is not checked
  46060  *
  46061  * nextUTF8 gives wrong result when utf8 is not on the first byte of a code point
  46062  * use findNextUTF8 to find next code point when utf8 is not at the start of a code point
  46063  *
  46064  * \param
  46065  *   utf8 UTF-8 encoded string
  46066  * \return
  46067  *   pointer to next UTF-8 code point
  46068  *   NULL when the end string is reached or utf8 is NULL
  46069  */
  46070 const char *nextUTF8(const char *utf8) {
  46071 
  46072   if (!utf8 || !*utf8) {
  46073     return(NULL);
  46074   }
  46075 
  46076   nxCodeUTF8(utf8);
  46077   return(utf8);
  46078 }
  46079 
  46080 /**
  46081  * buffer length next UTF-8 code point
  46082  *
  46083  * find the next UTF-8 code point in the string
  46084  *
  46085  * the validity of the found UTF-8 code point is not checked
  46086  *
  46087  * bLNextUTF8 gives wrong result when utf8 is not on the first byte of a code point
  46088  * use findNextUTF8 to find next code point when utf8 is not at the start of a code point
  46089  *
  46090  * \param
  46091  *   string start of the UTF-8 encoded string
  46092  * \param
  46093  *   utf8 pointer to a code point in string
  46094  * \param
  46095  *   utf8Size string buffer size (including NUL, strlen(string) +1 when the buffer is full)
  46096  * \return
  46097  *   pointer to next UTF-8 code point
  46098  *   NULL when the end string is reached or utf8 is NULL or the start of the next code point is outside the string
  46099  */
  46100 const char *bLNextUTF8(const char *string, size_t utf8Size, const char *utf8) {
  46101 
  46102   if (!string || !utf8 || !utf8Size || !*utf8 || (size_t)(utf8 - string) >= utf8Size) {
  46103     return(NULL);
  46104   }
  46105 
  46106   nxCodeUTF8(utf8);
  46107   if (((size_t)(utf8-string) >= utf8Size) || !*utf8) {
  46108     return(NULL);
  46109   }
  46110 
  46111   return(utf8);
  46112 }
  46113 
  46114 /**
  46115  * find next UTF-8 code point
  46116  * even not at the start of a code point
  46117  *
  46118  * find the next UTF-8 code point in the string
  46119  *
  46120  * the validity of the found UTF-8 code point is not checked
  46121  *
  46122  * \param
  46123  *   string start of the UTF-8 encoded string
  46124  * \param
  46125  *   utf8 pointer in string
  46126  * \param
  46127  *   ut8Size string buffer size (including NUL, strlen(string) +1 when the buffer is full)
  46128  * \return
  46129  *   pointer to next UTF-8 code point
  46130  *   NULL when the end string is reached or utf8 is NULL or the start of the next code point is outside the string
  46131  */
  46132 const char *findNextUTF8(const char *string, size_t utf8Size, const char *utf8) {
  46133 
  46134   if (!string || !utf8 || !utf8Size || !*utf8 || (size_t)(utf8 - string) >= utf8Size) {
  46135     return(NULL);
  46136   }
  46137 
  46138   while (*utf8 && ((size_t)(utf8-string) < utf8Size)) {
  46139     if ((*utf8++ & 0xC0) != 0x80) {
  46140       break;
  46141   }
  46142     }
  46143   if (((size_t)(utf8-string) >= utf8Size) || !*utf8) {
  46144     return(NULL);
  46145   }
  46146 
  46147   return(utf8);
  46148 }
  46149 
  46150 /**
  46151  * previous UTF-8 code point
  46152  *
  46153  * find the previous UTF-8 code point in the string
  46154  *
  46155  * the validity of the found UTF-8 code point is not checked
  46156  *
  46157  * the behavior is undefined when utf8 is the start of the string, use instead findPrevUTF8 for safe handling
  46158  *
  46159  * \param
  46160  *   utf8 UTF-8 encoded string
  46161  * \return
  46162  *   pointer to previous UTF-8 code point
  46163  *   NULL when utf8 is NULL
  46164  */
  46165 const char *prevUTF8(const char *utf8) {
  46166 
  46167   if (!utf8) {
  46168     return(NULL);
  46169   }
  46170 
  46171   forever {
  46172     utf8--;
  46173     if ((*utf8 & 0xC0) != 0x80) {
  46174       return(utf8);
  46175     }
  46176   }
  46177 }
  46178 
  46179 /**
  46180  * buffer previous UTF-8 code point
  46181  *
  46182  * find the previous UTF-8 code point in the string
  46183  *
  46184  * the validity of the found UTF-8 code point is not checked
  46185  *
  46186  * \param
  46187  *   string UTF-8 encoded string
  46188  * \param
  46189  *   utf8 pointer in UTF-8 encoded string
  46190  * \return
  46191  *   pointer to previous UTF-8 code point
  46192  *   NULL when utf8 is NULL
  46193  */
  46194 const char *bPrevUTF8(const char *string, const char *utf8) {
  46195 
  46196   if (!string || !utf8) {
  46197     return(NULL);
  46198   }
  46199 
  46200   return(bPrevUTF8Tiny(string, utf8));
  46201 }
  46202 
  46203 local const char *bPrevUTF8Tiny(const char *string, const char *utf8) {
  46204 
  46205   while (utf8 > string) {
  46206     utf8--;
  46207     if ((*utf8 & 0xC0) != 0x80) {
  46208       return(utf8);
  46209   }
  46210     }
  46211 
  46212   return(NULL);
  46213 }
  46214 
  46215 local char *bPrevRWUTF8Tiny(const char *string, char *utf8) {
  46216 
  46217   while (utf8 > string) {
  46218     utf8--;
  46219     if ((*utf8 & 0xC0) != 0x80) {
  46220       return(utf8);
  46221   }
  46222     }
  46223 
  46224   return(NULL);
  46225 }
  46226 
  46227 /**
  46228  * index to pointer UTF8 encoded string
  46229  *
  46230  * Converts character index to pointer in utf8
  46231  *
  46232  * \param
  46233  *   utf8 UTF8 encoded string
  46234  * \param
  46235  *   index character index in utf8, positive or negative. -1 is the last character in the string
  46236  * \return
  46237  *   pointer to character at index
  46238  *   NULL when index is outside the string
  46239  */
  46240 const char *idx2PtrUTF8(const char *utf8, int64_t index) {
  46241 
  46242   if (!utf8 || !*utf8 || !index) {
  46243     return(utf8);
  46244   }
  46245 
  46246   int64_t len = (int64_t)strlen(utf8);
  46247 
  46248   if (index > 0) {
  46249     if (index > len) {
  46250       // index is outside the string
  46251       return(NULL);
  46252     }
  46253 
  46254     // go forward
  46255     const char *end = utf8 + len;;
  46256     int64_t i = 0;;
  46257     while (i != index) {
  46258       nxCodeUTF8(utf8);
  46259       if (utf8 > end) {
  46260         return(NULL);
  46261       }
  46262       i++;
  46263   }
  46264     }
  46265   else {
  46266     if (index < -len) {
  46267       // index is outside the string
  46268       return(NULL);
  46269     }
  46270 
  46271     // go from the end
  46272     const char *start = utf8;;
  46273     utf8 += len;;
  46274     int64_t i = 0;;
  46275     while (i != index) {
  46276       utf8 = bPrevUTF8Tiny(start, utf8);;
  46277       i--;
  46278   }
  46279     }
  46280   return(utf8);
  46281 }
  46282 
  46283 /**
  46284  * index to pointer UTF8 encoded string - read write utf8 string (char*)
  46285  *
  46286  * Converts character index to pointer in utf8
  46287  *
  46288  * \param
  46289  *   utf8 UTF8 encoded string
  46290  * \param
  46291  *   index character index in utf8, positive or negative. -1 is the last character in the string
  46292  * \return
  46293  *   pointer to character at index
  46294  *   NULL when index is outside the string
  46295  */
  46296 local char *idx2PtrRWUTF8(char *utf8, int64_t index) {
  46297 
  46298   if (!utf8 || !*utf8 || !index) {
  46299     return(utf8);
  46300   }
  46301 
  46302   int64_t len = (int64_t)strlen(utf8);
  46303 
  46304   if (index > 0) {
  46305     if (index > len) {
  46306       // index is outside the string
  46307       return(NULL);
  46308     }
  46309 
  46310     // go forward
  46311     char *end = utf8 + len;;
  46312     int64_t i = 0;;
  46313     while (i != index) {
  46314       nxCodeUTF8(utf8);
  46315       if (utf8 > end) {
  46316         return(NULL);
  46317       }
  46318       i++;
  46319   }
  46320     }
  46321   else {
  46322     if (index < -len) {
  46323       // index is outside the string
  46324       return(NULL);
  46325     }
  46326 
  46327     // go from the end
  46328     char *start = utf8;;
  46329     utf8 += len;;
  46330     int64_t i = 0;;
  46331     while (i != index) {
  46332       utf8 = bPrevRWUTF8Tiny(start, utf8);;
  46333       i--;
  46334   }
  46335     }
  46336   return(utf8);
  46337 }
  46338 
  46339 const char *bLIdx2PtrUTF8(const char *utf8, size_t utf8Size, int64_t index) {
  46340 
  46341   if (!utf8 || !*utf8 || !utf8Size || !index) {
  46342     return(utf8);
  46343   }
  46344 
  46345   if (index > 0) {
  46346     if ((size_t)index > utf8Size) {
  46347       // index is outside the string
  46348       return(NULL);
  46349     }
  46350 
  46351     // go forward
  46352     const char *end = utf8 + utf8Size;;
  46353     int64_t i = 0;;
  46354     while (i != index) {
  46355       nxCodeUTF8(utf8);
  46356       if (utf8 >= end) {
  46357         return(NULL);
  46358       }
  46359       i++;
  46360   }
  46361     }
  46362   else {
  46363     if (index < -(int64_t)utf8Size) {
  46364       // index is outside the string
  46365       return(NULL);
  46366     }
  46367 
  46368     // find string end
  46369     size_t len;
  46370     len = strlen(utf8);
  46371     if (len+1 > utf8Size) {
  46372       len = utf8Size - 1;
  46373     }
  46374 
  46375     // go from the end
  46376     const char *start = utf8;;
  46377     utf8 += len;;
  46378     int64_t i = 0;;
  46379     while (i != index) {
  46380       utf8 = bPrevUTF8Tiny(start, utf8);;
  46381       i--;
  46382   }
  46383     }
  46384   return(utf8);
  46385 }
  46386 
  46387 /**
  46388  * pointer to code point index UTF8 encoded string
  46389  *
  46390  * Converts pointer to character index
  46391  *
  46392  * This function works when utf8 and pos point inside code points
  46393  *
  46394  * \param
  46395  *   utf8 pointer to a code point in a UTF8 encoded string
  46396  * \param
  46397  *   pos pointer to a code point in a UTF8 encoded string
  46398  * \return
  46399  *   Number of code points from utf8 to pos, positive or negative
  46400  *   When utf8 < pos, the result is positive
  46401  *   When pos < utf8, the result is negative
  46402  *   0 failed or index 0
  46403  */
  46404 int64_t ptr2IdxUTF8(const char *utf8, const char *pos) {
  46405 
  46406   if (!utf8 || !pos || utf8 == pos) {
  46407     return(0);
  46408   }
  46409 
  46410   int64_t r = 0;
  46411 
  46412   if (pos > utf8) {
  46413     // there is at least one code point
  46414     // find next code point, works even when utf8 points inside a code point
  46415     while (*utf8) {
  46416       if ((*utf8 & 0xC0) != 0x80) {
  46417         // check utf8 is in a multibyte code point
  46418         // if it is, find the end of the code point
  46419         if ((*utf8 & 0xC0) == 0xC0) {
  46420           nxCodeUTF8(utf8);
  46421         }
  46422         else {
  46423           utf8++;
  46424         }
  46425         break;
  46426       }
  46427       utf8++;
  46428     }
  46429     r++;
  46430     while (*utf8 && (utf8 < pos)) {
  46431       nxCodeUTF8(utf8);
  46432       r++;
  46433     }
  46434     if (utf8 > pos || !*utf8) {
  46435       // pos points inside a code point, return index to pos code point
  46436       // instead of next one
  46437       // or reached the end of the string
  46438       r--;
  46439   }
  46440     }
  46441   else {
  46442     while (utf8 > pos) {
  46443       // find previous code point
  46444       forever {
  46445         utf8--;
  46446         if ((*utf8 & 0xC0) != 0x80) {
  46447           break;
  46448         }
  46449       }
  46450       r--;
  46451   }
  46452     }
  46453   return(r);
  46454 }
  46455 
  46456 /**
  46457  * buffer pointer to code point index UTF8 encoded string
  46458  *
  46459  * Converts pointer to character index
  46460  *
  46461  * Safe function for negative index
  46462  *
  46463  * This function works when utf8 and pos point inside code points
  46464  *
  46465  * \param
  46466  *   start start of the UTF8 encoded string
  46467  * \param
  46468  *   utf8 pointer to a code point in a UTF8 encoded string
  46469  * \param
  46470  *   pos pointer to a code point in a UTF8 encoded string
  46471  * \return
  46472  *   Number of code points from utf8 to pos, positive or negative
  46473  *   When utf8 < pos, the result is positive
  46474  *   When pos < utf8, the result is negative
  46475  *   0 failed or index 0
  46476  */
  46477 int64_t bPtr2IdxUTF8(const char *start, const char *utf8, const char *pos) {
  46478 
  46479   if (!utf8 || !pos || utf8 == pos || !start || pos < start) {
  46480     return(0);
  46481   }
  46482 
  46483   int64_t r = 0;
  46484 
  46485   if (pos > utf8) {
  46486     // there is at least one code point
  46487     // find next code point, works even when utf8 points inside a code point
  46488     while (*utf8) {
  46489       if ((*utf8++ & 0xC0) != 0x80) {
  46490         break;
  46491     }
  46492       }
  46493     nxCodeUTF8(utf8);
  46494     r++;
  46495     while (*utf8 && (utf8 < pos)) {
  46496       nxCodeUTF8(utf8);
  46497       r++;
  46498     }
  46499     if (utf8 > pos || !*utf8) {
  46500       // pos points inside a code point, return index to pos code point
  46501       // instead of next one
  46502       // or reached the end of the string
  46503       r--;
  46504   }
  46505     }
  46506   else {
  46507     while ((utf8 > pos) && (utf8 > start)) {
  46508       // find previous code point
  46509       while (utf8 > start) {
  46510         utf8--;
  46511         if ((*utf8 & 0xC0) != 0x80) {
  46512           break;
  46513       }
  46514         }
  46515       r--;
  46516   }
  46517     }
  46518   return(r);
  46519 }
  46520 
  46521 /**
  46522  * buffer size pointer to code point index UTF8 encoded string
  46523  *
  46524  * Converts pointer to character index
  46525  *
  46526  * This function works when utf8 and pos point inside code points
  46527  *
  46528  * \param
  46529  *   utf8 pointer to a code point in a UTF8 encoded string
  46530  * \param
  46531  *   utf8Size utf8 buffer size including NUL
  46532  * \param
  46533  *   pos pointer to a code point in a UTF8 encoded string
  46534  * \return
  46535  *   Number of code points from utf8 to pos, positive
  46536  *   -1 failed
  46537  */
  46538 int64_t bLPtr2IdxUTF8(const char *utf8, size_t utf8Size, const char *pos) {
  46539 
  46540   if (!utf8 || !utf8Size || !pos || (pos < utf8) || (pos >= (utf8+utf8Size))) {
  46541     return(-1);
  46542   }
  46543 
  46544   int64_t r = 0;
  46545 
  46546   // return 0 if utf8 = pos
  46547   if (pos > utf8) {
  46548     // there is at least one code point
  46549     // find next code point, works even when utf8 points inside a code point
  46550     const char *end = utf8+utf8Size-1;;
  46551     while ((utf8 < end) && *utf8) {
  46552       if ((*utf8++ & 0xC0) != 0x80) {
  46553         break;
  46554     }
  46555       }
  46556     nxCodeUTF8(utf8);
  46557     r++;
  46558     while ((utf8 < end) && *utf8 && (utf8 < pos)) {
  46559       nxCodeUTF8(utf8);
  46560       r++;
  46561     }
  46562     if (utf8 >= end || utf8 > pos || !*utf8) {
  46563       // pos points inside a code point, return index to pos code point
  46564       // instead of next one
  46565       // or reached the end of the string
  46566       r--;
  46567   }
  46568     }
  46569   return(r);
  46570 }
  46571 
  46572 /**
  46573  * buffer size pointer to negative code point index UTF8 encoded string
  46574  *
  46575  * Converts pointer to negative character index (from the end of the string)
  46576  *
  46577  * This function works when utf8 and pos point inside code points
  46578  *
  46579  * \param
  46580  *   utf8 pointer to a code point in a UTF8 encoded string
  46581  * \param
  46582  *   utf8Size utf8 buffer size including NUL
  46583  * \param
  46584  *   pos pointer to a code point in a UTF8 encoded string
  46585  * \return
  46586  *   Number of code points from utf8 end to pos, negative
  46587  *   0 failed
  46588  */
  46589 int64_t bLPtr2NegIdxUTF8(const char *utf8, size_t utf8Size, const char *pos) {
  46590 
  46591   if (!utf8 || !utf8Size || !pos || (pos < utf8) || (pos >= (utf8+utf8Size))) {
  46592     return(0);
  46593   }
  46594 
  46595   int64_t r = 0;
  46596 
  46597   const char *end = utf8+utf8Size-1;
  46598 
  46599   while ((end > pos) && (end > utf8)) {
  46600     // find previous code point
  46601     while (end > utf8) {
  46602       end--;
  46603       if ((*end & 0xC0) != 0x80) {
  46604         break;
  46605     }
  46606       }
  46607     r--;
  46608   }
  46609   return(r);
  46610 }
  46611 
  46612 /**
  46613  * make valid UTF-8 encoded string
  46614  *
  46615  * copy utf8 to newly allocated buffer, the invalid code points are
  46616  * replaced with '?'
  46617  *
  46618  * The result buffer size is the same as utf8 size
  46619  *
  46620  * \param
  46621  *   utf8 valid or invalid UTF-8 encoded string
  46622  * \result
  46623  *   new valid UTF-8 encoded string (you must free the pointer)
  46624  *   NULL failed
  46625  */
  46626 char *makeValidUTF8(const char *utf8) {
  46627 
  46628   if (!utf8) {
  46629     return(NULL);
  46630   }
  46631 
  46632   char *r = malloc(strlen(utf8)+1);
  46633   if (!r) {
  46634     return(NULL);
  46635   }
  46636 
  46637   char *c = r;
  46638 
  46639   while (*utf8) {
  46640     if (isCodeUTF8(utf8)) {
  46641       range(i, codeSizeUTF8(utf8)) {
  46642         *c++ = *utf8++;
  46643       }
  46644     }
  46645     else {
  46646       *c = '?';
  46647       c++;
  46648       utf8++;
  46649   }
  46650     }
  46651 
  46652   *c = 0;
  46653 
  46654   return(r);
  46655 }
  46656 
  46657 /**
  46658  * buffer make valid UTF-8 encoded string
  46659  *
  46660  * replace the invalid code points with '?' in utf8
  46661  *
  46662  * \param
  46663  *   utf8 valid or invalid UTF-8 encoded string
  46664  * \result
  46665  *   valid UTF-8 encoded string in utf8 buffer
  46666  *   NULL failed
  46667  */
  46668 char *bMakeValidUTF8(char *utf8) {
  46669 
  46670   if (!utf8) {
  46671     return(NULL);
  46672   }
  46673 
  46674   char *r = utf8;
  46675 
  46676   while (*utf8) {
  46677     if (isCodeUTF8(utf8)) {
  46678       nxCodeUTF8(utf8);
  46679     }
  46680     else {
  46681       *utf8 = '?';
  46682       utf8++;
  46683   }
  46684     }
  46685 
  46686   return(r);
  46687 }
  46688 
  46689 /**
  46690  * length make valid UTF-8 encoded string
  46691  *
  46692  * copy utf8 to newly allocated buffer, the invalid code points are
  46693  * replaced with '?'
  46694  *
  46695  * The result buffer size is utf8Len+1
  46696  *
  46697  * \param
  46698  *   utf8 valid or invalid UTF-8 encoded string
  46699  * \param
  46700  *   utf8Len utf8 length
  46701  * \result
  46702  *   new valid UTF-8 encoded string (you must free the pointer)
  46703  *   NULL failed
  46704  */
  46705 char *nMakeValidUTF8(const char *utf8, size_t utf8Len) {
  46706 
  46707   if (!utf8 || !utf8Len) {
  46708     return(NULL);
  46709   }
  46710 
  46711   char *r = malloc(utf8Len+1);
  46712   if (!r) {
  46713     return(NULL);
  46714   }
  46715 
  46716   const char *end = utf8+utf8Len;
  46717   char *c         = r;
  46718 
  46719   while (*utf8 && utf8 < end) {
  46720     if (isCodeUTF8(utf8)) {
  46721       range(i, codeSizeUTF8(utf8)) {
  46722         *c++ = *utf8++;
  46723         if (utf8 == end) {
  46724           goto finish;
  46725         }
  46726       }
  46727     }
  46728     else {
  46729       *c = '?';
  46730       c++;
  46731       utf8++;
  46732   }
  46733     }
  46734 
  46735   finish:
  46736   *c = 0;
  46737 
  46738   return(r);
  46739 }
  46740 
  46741 /**
  46742  * buffer length make valid UTF-8 encoded string
  46743  *
  46744  * copy utf8 to the dst buffer, the invalid code points are
  46745  * replaced with '?'
  46746  *
  46747  * The result buffer size is utf8Len+1
  46748  *
  46749  * \param
  46750  *   utf8 valid or invalid UTF-8 encoded string
  46751  * \param
  46752  *   utf8Len utf8 length
  46753  * \result
  46754  *   new valid UTF-8 encoded string
  46755  *   NULL failed
  46756  */
  46757 char *bNMakeValidUTF8(char *dst, const char *utf8, size_t utf8Len) {
  46758 
  46759   if (!dst || !utf8 || !utf8Len) {
  46760     return(NULL);
  46761   }
  46762 
  46763   const char *end = utf8+utf8Len;
  46764   char *c         = dst;
  46765 
  46766   while (*utf8 && utf8 < end) {
  46767     if (isCodeUTF8(utf8)) {
  46768       range(i, codeSizeUTF8(utf8)) {
  46769         *c++ = *utf8++;
  46770         if (utf8 == end) {
  46771           goto finish;
  46772         }
  46773       }
  46774     }
  46775     else {
  46776       *c = '?';
  46777       c++;
  46778       utf8++;
  46779   }
  46780     }
  46781 
  46782   finish:
  46783   *c = 0;
  46784 
  46785   return(dst);
  46786 }
  46787 
  46788 /**
  46789  * buffer destination size make valid UTF-8 encoded string
  46790  *
  46791  * copy utf8 to the dst buffer, the invalid code points are
  46792  * replaced with '?'
  46793  *
  46794  * The result buffer size is dstSize
  46795  *
  46796  * \param
  46797  *   dst destination buffer
  46798  * \param
  46799  *   dstSize size of dst
  46800  * \param
  46801  *   utf8 valid or invalid UTF-8 encoded string
  46802  * \result
  46803  *   new valid UTF-8 encoded string
  46804  *   NULL failed
  46805  */
  46806 char *bLMakeValidUTF8(char *dst, size_t dstSize, const char *utf8) {
  46807 
  46808   if (!dst || !utf8 || !dstSize) {
  46809     return(NULL);
  46810   }
  46811 
  46812   char *end = dst+dstSize-1;
  46813   char *c   = dst;
  46814 
  46815   while (*utf8 && c < end) {
  46816     if (isCodeUTF8(utf8)) {
  46817       range(i, codeSizeUTF8(utf8)) {
  46818         *c++ = *utf8++;
  46819         if (c == end) {
  46820           goto finish;
  46821         }
  46822       }
  46823     }
  46824     else {
  46825       *c = '?';
  46826       c++;
  46827       utf8++;
  46828   }
  46829     }
  46830 
  46831   finish:
  46832   *c = 0;
  46833 
  46834   return(dst);
  46835 }
  46836 
  46837 /**
  46838  * buffer destination size source length make valid UTF-8 encoded string
  46839  *
  46840  * copy utf8 to the dst buffer, the invalid code points are
  46841  * replaced with '?'
  46842  *
  46843  * This function always reads less than utf8Len+1 bytes in utf8 buffer
  46844  * The result buffer size is dstSize
  46845  *
  46846  * \param
  46847  *   dst destination buffer
  46848  * \param
  46849  *   dstSize size of dst
  46850  * \param
  46851  *   utf8 valid or invalid UTF-8 encoded string
  46852  * \param
  46853  *   utf8Len utf8 length
  46854  * \result
  46855  *   new valid UTF-8 encoded string
  46856  *   NULL failed
  46857  */
  46858 char *bLNMakeValidUTF8(char *dst, size_t dstSize, const char *utf8, size_t utf8Len) {
  46859 
  46860   if (!dst || !dstSize || !utf8 || !utf8Len) {
  46861     return(NULL);
  46862   }
  46863 
  46864   const char *end = utf8+utf8Len;
  46865   char *dstEnd    = dst+dstSize-1;
  46866   char *c         = dst;
  46867 
  46868   while (*utf8 && utf8 < end && c < dstEnd) {
  46869     if (isCodeUTF8(utf8)) {
  46870       range(i, codeSizeUTF8(utf8)) {
  46871         *c++ = *utf8++;
  46872         if (utf8 == end || c == dstEnd) {
  46873           goto finish;
  46874         }
  46875       }
  46876     }
  46877     else {
  46878       *c = '?';
  46879       c++;
  46880       utf8++;
  46881   }
  46882     }
  46883 
  46884   finish:
  46885   *c = 0;
  46886 
  46887   return(dst);
  46888 }
  46889 
  46890 // No need for randomUTF8
  46891 
  46892 /**
  46893  * strNCpyUTF8 - copy src to dst with srcLen in code points
  46894  *
  46895  * copy srcLen code points from src (UTF-8 encoded string) to dst and add one NUL character when src
  46896  * end is not reached (unlike strncpy).
  46897  *
  46898  * \param
  46899  *   dst destination buffer
  46900  * \param
  46901  *   src source string
  46902  * \param
  46903  *   srcLen source buffer size in code points
  46904  * \return
  46905  *   dst string
  46906  *   NULL error
  46907  */
  46908 char *strNCpyUTF8(char *dst, const char *src, size_t srcLen) {
  46909 
  46910   if (!dst || !src) {
  46911     return(NULL);
  46912   }
  46913 
  46914   if (!srcLen) {
  46915     return(dst);
  46916   }
  46917 
  46918   const char *c = src;
  46919   size_t count  = 0;
  46920 
  46921   while (*c && count < srcLen) {
  46922     nxCodeUTF8(c);
  46923     count++;
  46924   }
  46925 
  46926   return(strncpy(dst, src, (size_t)(c-src)));
  46927 }
  46928 
  46929 /**
  46930  * strLCpyUTF8 - copy src to dst
  46931  *
  46932  * like strncpy and the NUL char is always added at the end of the string
  46933  * and the result string is always a valid UTF-8 encoded string
  46934  *
  46935  * \param
  46936  *   dst destination buffer
  46937  * \param
  46938  *   dstSize destination buffer size, result string will be no longer than dstSize-1
  46939  * \param
  46940  *   src source string
  46941  * \return
  46942  *   dst string
  46943  *   NULL error
  46944  */
  46945 char *strLCpyUTF8(char *dst, size_t dstSize, const char *src) {
  46946 
  46947   if (!dst || !src) {
  46948     return(NULL);
  46949   }
  46950 
  46951   char *r = strncpy(dst, src, dstSize);;
  46952   if (dstSize) {
  46953     r[dstSize-1] = 0;
  46954   }
  46955   pErrorNULL(bMakeValidUTF8(r));
  46956   return(r);
  46957 }
  46958 
  46959 /**
  46960  * strNCatUTF8 - concatenate two UTF-8 encoded strings
  46961  *
  46962  * like strncat with sanity checks and srcLen is the number of code points
  46963  *
  46964  * \param
  46965  *   dst destination buffer
  46966  * \param
  46967  *   src source string
  46968  * \param
  46969  *   srcLen max source len in code points
  46970  * \return
  46971  *   string with input strings concatenated
  46972  *   NULL error
  46973  */
  46974 char *strNCatUTF8(char *dst, const char *src, size_t srcLen) {
  46975 
  46976   if (!dst || !src) {
  46977     return(NULL);
  46978   }
  46979 
  46980   if (!srcLen) {
  46981     return(dst);
  46982   }
  46983 
  46984   const char *c = src;
  46985   size_t count  = 0;
  46986 
  46987   while (*c && count < srcLen) {
  46988     nxCodeUTF8(c);
  46989     count++;
  46990   }
  46991 
  46992   return(strncat(dst, src, (size_t)(c-src)));
  46993 }
  46994 
  46995 /**
  46996  * strLCatUTF8 - concatenate two UTF-8 encoded strings
  46997  *
  46998  * like strlcat with sanity checks
  46999  * the result string is always a valid UTF-8 encoded string
  47000  *
  47001  * \param
  47002  *   dst destination buffer
  47003  * \param
  47004  *   src source string
  47005  * \param
  47006  *   dstSize destination buffer size, result string will be no longer than dstSize-1
  47007  * \return
  47008  *   string with input strings concatenated
  47009  *   NULL error
  47010  */
  47011 char *strLCatUTF8(char *dst, size_t dstSize, const char *src) {
  47012 
  47013   if (!dst || !src) {
  47014     return(NULL);
  47015   }
  47016 
  47017   size_t dL     = strnlen(dst, dstSize);
  47018   size_t dstLen = dstSize-1;
  47019 
  47020   if (dL >= dstLen) {
  47021     // buffer is full
  47022     return(dst);
  47023   }
  47024 
  47025   size_t sL     = strlen(src);
  47026 
  47027   if (dL+sL > dstLen) {
  47028     // truncate
  47029     char *r = strncat(dst, src, dstLen - dL);
  47030     pErrorNULL(bMakeValidUTF8(r));
  47031     return(r);
  47032   }
  47033   else {
  47034     return(strcat(dst, src));
  47035 }
  47036   }
  47037 
  47038 /**
  47039  * strLNCatUTF8 - concatenate two UTF-8 encoded strings
  47040  *
  47041  * like strlcat with sanity checks and srcLen is the number of code points
  47042  * the result string is always a valid UTF-8 encoded string
  47043  *
  47044  * \param
  47045  *   dst destination buffer
  47046  * \param
  47047  *   src source string
  47048  * \param
  47049  *   dstSize destination buffer size, result string will be no longer than dstSize-1
  47050  * \param
  47051  *   srcLen max source len in code points
  47052  * \return
  47053  *   string with input strings concatenated
  47054  *   NULL error
  47055  */
  47056 char *strLNCatUTF8(char *dst, size_t dstSize, const char *src, size_t srcLen) {
  47057 
  47058   if (!dst || !src) {
  47059     return(NULL);
  47060   }
  47061 
  47062   if (!srcLen) {
  47063     return(dst);
  47064   }
  47065 
  47066   size_t dL     = strnlen(dst, dstSize);
  47067   size_t dstLen = dstSize-1;
  47068 
  47069   if (dL >= dstLen) {
  47070     // buffer is full
  47071     return(dst);
  47072   }
  47073 
  47074   const char *c = src;
  47075   size_t count  = 0;
  47076 
  47077   while (*c && count < srcLen) {
  47078     nxCodeUTF8(c);
  47079     count++;
  47080   }
  47081 
  47082   size_t sL     = (size_t)(c-src);
  47083 
  47084   if (dL+sL > dstLen) {
  47085     // truncate
  47086     char *r = strncat(dst, src, dstLen - dL);
  47087     pErrorNULL(bMakeValidUTF8(r));
  47088     return(r);
  47089   }
  47090   else {
  47091     return(strncat(dst, src, sL));
  47092 }
  47093   }
  47094 
  47095 /**
  47096  * ignore case Replace UTF8 encoded String
  47097  * the original remains unchanged
  47098  * duplicate s
  47099  * the olds string is replaced with the news string max times in the result
  47100  * 0 for max means replace all olds strings
  47101  *
  47102  * \param
  47103  *   s: UTF8 encoded string
  47104  *   olds: old UTF8 encoded string to be replaced in s
  47105  *   news: new UTF8 encoded string replacing olds in s
  47106  *   max: number of times to replace olds, 0 to replace all found olds
  47107  * \return
  47108  *   new string (you must free the pointer)
  47109  *   "" when s is empty
  47110  *   NULL when s is NULL
  47111  *   NULL when olds is empty
  47112  */
  47113 char* icReplaceUTF8(const char UNUSED *s, const char UNUSED *olds, const char UNUSED *news, size_t UNUSED max ) {
  47114 
  47115   // TODO changing UTF8 to lower case with casefold can change the
  47116   // number of bytes in the string
  47117   return(NULL);
  47118 }
  47119 
  47120 char *icReplaceCharSUTF8(const char *s UNUSED, char olds UNUSED, const char *news UNUSED, size_t max UNUSED) {
  47121 
  47122   // TODO changing UTF8 to lower case with casefold can change the
  47123   // number of bytes in the string
  47124   return(NULL);
  47125 }
  47126 
  47127 char *icReplaceSCharUTF8(const char *s UNUSED, const char *olds UNUSED, char news UNUSED, size_t max UNUSED) {
  47128 
  47129   // TODO changing UTF8 to lower case with casefold can change the
  47130   // number of bytes in the string
  47131   return(NULL);
  47132 }
  47133 
  47134 
  47135 /**
  47136  * in place ignore case replace UTF8 encoded String
  47137  * the olds UTF8 encoded string is replaced with the news UTF8 encoded string max times in the result
  47138  * 0 for max means replace all olds strings
  47139  *
  47140  * \param
  47141  *   s: UTF8 encoded string
  47142  *   olds: old UTF8 encoded string to be replaced in s
  47143  *   news: new UTF8 encoded string replacing olds in s
  47144  *   max: number of times to replace olds, 0 to replace all found olds
  47145  * \return
  47146  *   modified s string
  47147  *   NULL s not modified when s is NULL or empty and when olds is empty
  47148  */
  47149 char* iicReplaceUTF8(char UNUSED **s, const char UNUSED *olds, const char UNUSED *news, size_t UNUSED max ) {
  47150 
  47151   // TODO changing UTF8 to lower case with casefold can change the
  47152   // number of bytes in the string
  47153   return(NULL);
  47154 }
  47155 
  47156 char *iicReplaceCharSUTF8(char **s UNUSED, char olds UNUSED, const char *news UNUSED, size_t max UNUSED) {
  47157 
  47158   // TODO changing UTF8 to lower case with casefold can change the
  47159   // number of bytes in the string
  47160   return(NULL);
  47161 }
  47162 
  47163 char *iicReplaceSCharUTF8(char **s UNUSED, const char *olds UNUSED, char news UNUSED, size_t max UNUSED) {
  47164 
  47165   // TODO changing UTF8 to lower case with casefold can change the
  47166   // number of bytes in the string
  47167   return(NULL);
  47168 }
  47169 
  47170 
  47171 /**
  47172  * buffer ignore case replace UTF8 encoded String
  47173  * the olds string is replaced with the news string max times in the result
  47174  * 0 for max means replace all olds strings
  47175  *
  47176  * \param
  47177  *   s: string
  47178  * \param
  47179  *   olds: old string to be replaced in s
  47180  * \param
  47181  *   news: new string replacing olds in s
  47182  * \param
  47183  *   max: number of times to replace olds, 0 to replace all found olds
  47184  * \return
  47185  *   modified s string
  47186  *   NULL s not modified when s is NULL or empty and when olds is empty
  47187  */
  47188 char* bicReplaceUTF8(char UNUSED *s, const char UNUSED *olds, const char UNUSED *news, size_t UNUSED max ) {
  47189 
  47190   // TODO changing UTF8 to lower case with casefold can change the
  47191   // number of bytes in the string
  47192   return(NULL);
  47193 }
  47194 
  47195 
  47196 /**
  47197  * buffer size ignore case replace UTF8 encoded String
  47198  * the olds string is replaced with the news string max times in the result
  47199  * 0 for max means replace all olds strings
  47200  *
  47201  * \param
  47202  *   s: string
  47203  * \param
  47204  *   olds: old string to be replaced in s
  47205  * \param
  47206  *   news: new string replacing olds in s
  47207  * \param
  47208  *   max: number of times to replace olds, 0 to replace all found olds
  47209  * \return
  47210  *   modified s string
  47211  *   NULL s not modified when s is NULL or empty and when olds is empty
  47212  */
  47213 char* bLicReplaceUTF8(char UNUSED *s, size_t UNUSED sSize, const char UNUSED *olds, const char UNUSED *news, size_t max UNUSED) {
  47214 
  47215   // TODO changing UTF8 to lower case with casefold can change the
  47216   // number of bytes in the string
  47217   return(NULL);
  47218 }
  47219 
  47220 
  47221 /**
  47222  * ignore case replace Many UTF8 encoded Strings
  47223  * the original remains unchanged
  47224  * duplicate s
  47225  * the olds string is replaced with the news string max times in the result
  47226  *
  47227  * Example:
  47228  * r = replaceManyUTF8("asd", "s",  "BNM", "a",  "AAA")
  47229  *                         ^olds ^news  ^olds ^news
  47230  *
  47231  * \param
  47232  *   s: string
  47233  * \param
  47234  *   olds: old string to be replaced in s
  47235  * \param
  47236  *   news: new string replacing olds in s
  47237  *   ...
  47238  * \return
  47239  *   new string
  47240  *   "" when s is empty
  47241  *   NULL when s is NULL
  47242  *   NULL when only 2 parameters are given
  47243  *   NULL when any olds is empty
  47244  */
  47245 char *icReplaceManyUTF8F(const char *paramType UNUSED, ...) {
  47246 
  47247   // TODO changing UTF8 to lower case with casefold can change the
  47248   // number of bytes in the string
  47249   return(NULL);
  47250 }
  47251 
  47252 /**
  47253  * in place ignore case replace Many UTF8 encoded Strings
  47254  * the olds string is replaced with the news string max times in the result
  47255  *
  47256  * Example:
  47257  * iicReplaceManyUTF8(s, "s",  "BNM", "a",  "AAA")
  47258  *                        ^olds ^news  ^olds ^news
  47259  *
  47260  * \param
  47261  *   string
  47262  * \param
  47263  *   olds: old string to be replaced in s
  47264  * \param
  47265  *   news: new string replacing olds in s
  47266  *   ...
  47267  * \return
  47268  *   modified string
  47269  *   NULL not modified when s is empty, when s is NULL, when only 2 parameters are given,
  47270  *     when any olds is empty
  47271  */
  47272 char *iicReplaceManyUTF8F(char **s UNUSED, char *paramType UNUSED, ...) {
  47273 
  47274   // TODO changing UTF8 to lower case with casefold can change the
  47275   // number of bytes in the string
  47276   return(NULL);
  47277 }
  47278 
  47279 /**
  47280  * buffer ignore case replace Many UTF8 encoded Strings
  47281  * the olds string is replaced with the news string max times in the result
  47282  *
  47283  * Example:
  47284  * bReplaceManyUTF8(s, "s",  "BNM", "a",  "AAA")
  47285  *                      ^olds ^news  ^olds ^news
  47286  *
  47287  * \param
  47288  *   string
  47289  * \param
  47290  *   olds: old string to be replaced in s
  47291  * \param
  47292  *   news: new string replacing olds in s
  47293  *   ...
  47294  * \return
  47295  *   modified string
  47296  *   NULL not modified when s is empty, when s is NULL, when only 2 parameters are given,
  47297  *     when any olds is empty
  47298  */
  47299 char *bicReplaceManyUTF8F(char *s UNUSED, char *paramType UNUSED, ...) {
  47300 
  47301   // TODO changing UTF8 to lower case with casefold can change the
  47302   // number of bytes in the string
  47303   return(NULL);
  47304 }
  47305 
  47306 /**
  47307  * buffer size ignore case replace Many UTF8 encoded Strings
  47308  * the olds string is replaced with the news string max times in the result
  47309  *
  47310  * Example:
  47311  * bReplaceManyUTF8(s, "s",  "BNM", "a",  "AAA")
  47312  *                      ^olds ^news  ^olds ^news
  47313  *
  47314  * \param
  47315  *   string
  47316  * \param
  47317  *   olds: old string to be replaced in s
  47318  * \param
  47319  *   news: new string replacing olds in s
  47320  *   ...
  47321  * \return
  47322  *   modified string
  47323  *   NULL not modified when s is empty, when s is NULL, when only 2 parameters are given,
  47324  *     when any olds is empty
  47325  */
  47326 char *bLicReplaceManyUTF8F(char *s UNUSED, size_t sSize UNUSED, char *paramType UNUSED, ...) {
  47327 
  47328   // TODO changing UTF8 to lower case with casefold can change the
  47329   // number of bytes in the string
  47330   return(NULL);
  47331 }
  47332 
  47333 
  47334 /**
  47335  * UTF8 encoded string Index Equal
  47336  * compare string1 at character index to string2
  47337  * when string2 is empty, the result is false
  47338  *
  47339  * \param
  47340  *   2 strings
  47341  * \return
  47342  *   true string1 at index is equal to string2
  47343  *   false they differ
  47344  */
  47345 bool eqIUTF8(const char *string1, const char *string2, int64_t index) {
  47346 
  47347   if (!string1) {
  47348     return(false);
  47349   }
  47350 
  47351   const char *i = idx2PtrUTF8(string1, index);
  47352   return(eqIS(string1, string2, (int64_t)(i-string1)));
  47353 }
  47354 
  47355 bool eqICharUTF8(const char *string1, char c, int64_t index) {
  47356 
  47357   if (!string1) {
  47358     return(false);
  47359   }
  47360 
  47361   const char *i = idx2PtrUTF8(string1, index);
  47362   return(eqICharS(string1, c, (int64_t)(i-string1)));
  47363 }
  47364 
  47365 
  47366 /**
  47367  * ignore case UTF8 encoded string Equal
  47368  * compare string1 to string2
  47369  *
  47370  * \param
  47371  *   2 strings
  47372  * \return
  47373  *   true the strings have identical content
  47374  *   false they differ
  47375  */
  47376 bool icEqUTF8(const char *string1, const char *string2) {
  47377 
  47378   // sanity checks
  47379   if (!string1 || !string2) {
  47380     return(false);
  47381   }
  47382 
  47383   char *s1 = casefoldUTF8(string1);
  47384   char *s2 = casefoldUTF8(string2);
  47385   bool r = (strcmp(s1,s2) == 0);
  47386   freeManyS(s1, s2);
  47387   return(r);
  47388 }
  47389 
  47390 bool icEqCharUTF8(char c, const char *string2) {
  47391 
  47392   // sanity checks
  47393   if (!string2) {
  47394     return(false);
  47395   }
  47396 
  47397   charToS(s, (char)tolower(c));
  47398   char *s2 = casefoldUTF8(string2);
  47399   bool r = (strcmp(s,s2) == 0);
  47400   free(s2);
  47401   return(r);
  47402 }
  47403 
  47404 bool icEqUTF8Char(const char *string1, char c) {
  47405 
  47406   // sanity checks
  47407   if (!string1) {
  47408     return(false);
  47409   }
  47410 
  47411   charToS(s, (char)tolower(c));
  47412   char *s1 = casefoldUTF8(string1);
  47413   bool r = (strcmp(s1,s) == 0);
  47414   free(s1);
  47415   return(r);
  47416 }
  47417 
  47418 /**
  47419  * ignore case UTF8 encoded string Index Equal
  47420  * compare string1 at character index to string2
  47421  * when string2 is empty, the result is false
  47422  *
  47423  * \param
  47424  *   2 strings
  47425  * \return
  47426  *   true string1 at index is equal to string2
  47427  *   false they differ
  47428  */
  47429 bool icEqIUTF8(const char *string1 UNUSED, const char *string2 UNUSED, int64_t index UNUSED) {
  47430 
  47431   // TODO casefold changes the number of character, index might change
  47432   return(false);
  47433 }
  47434 
  47435 bool icEqICharUTF8(const char *string1 UNUSED, char c UNUSED, int64_t index UNUSED) {
  47436 
  47437   // TODO casefold changes the number of character, index might change
  47438   return(false);
  47439 }
  47440 
  47441 
  47442 /**
  47443  * ignore case starts With UTF8 encoded String
  47444  * compare start of string1 with string2
  47445  *
  47446  * \param
  47447  *   2 strings
  47448  * \return
  47449  *   true when string1 starts with string2
  47450  *   false for other cases
  47451  */
  47452 bool icStartsWithUTF8(const char *string1, const char *string2) {
  47453 
  47454   // sanity checks
  47455   if (!string1 || !string2) {
  47456     return(false);
  47457   }
  47458 
  47459   char *s1 = casefoldUTF8(string1);
  47460   char *s2 = casefoldUTF8(string2);
  47461   bool r = (strncmp(s1, s2, strlen(s2)) == 0);
  47462   freeManyS(s1, s2);
  47463   return(r);
  47464 }
  47465 
  47466 
  47467 /**
  47468  * ignore case ends With UTF8 encoded String
  47469  * compare end of string1 with string2
  47470  *
  47471  * \param
  47472  *   2 strings
  47473  * \return
  47474  *   true when string1 ends with string2
  47475  *   false for other cases
  47476  */
  47477 bool icEndsWithUTF8(const char *string1, const char *string2) {
  47478   bool r;
  47479 
  47480   // sanity checks
  47481   if (!string1 || !string2) {
  47482     return(false);
  47483   }
  47484 
  47485   char *s1 = casefoldUTF8(string1);
  47486   char *s2 = casefoldUTF8(string2);
  47487   if (strlen(s1) < strlen(s2)) {
  47488     r = false;
  47489     goto end;
  47490   }
  47491   r = (strcmp(s1 + strlen(s1) - strlen(s2), s2) == 0);
  47492   end:
  47493   freeManyS(s1, s2);
  47494   return(r);
  47495 }
  47496 
  47497 
  47498 /**
  47499  * ignore case count UTF8 encoded String
  47500  * count number of (non-overlapping) occurrences of a substring
  47501  *
  47502  * Example:
  47503  *   assert(countUTF8("aaa aaa", "a") == 6);
  47504  *   assert(countUTF8("aaa aaa", "ab") == 0);
  47505  *   assert(countUTF8("aaa aaa", "aa") == 2);
  47506  *
  47507  * \param
  47508  *   2 strings
  47509  * \return
  47510  *   string count
  47511  *   -1 when there is an error
  47512  */
  47513 ssize_t icCountUTF8(const char *s, const char *needle) {
  47514   char *lower = NULL;
  47515 
  47516   // sanity checks
  47517   if (!s || !needle) {
  47518     return(-1);
  47519   }
  47520 
  47521   lower      = casefoldUTF8(s);
  47522   needle     = casefoldUTF8(needle);
  47523   ssize_t r  = 0;
  47524   size_t len = strlen(needle);
  47525 
  47526   s = lower;
  47527   while (s != NULL) {
  47528     s = strstr(s, needle);
  47529     if (s != NULL) {
  47530       r++;
  47531       s += len;
  47532     }
  47533     else {
  47534       break;
  47535   }
  47536     }
  47537 
  47538   freeManyS(lower, needle);
  47539   return(r);
  47540 }
  47541 
  47542 /** some case convertions depend on the current LOCALE */
  47543 internal localeType getLocaleType(void) {
  47544 
  47545   const char *locale = setlocale (LC_CTYPE, NULL);;
  47546 
  47547   if (!locale) {
  47548     return(LOCALE_NORMAL);
  47549   }
  47550 
  47551   switch (locale[0]) {
  47552     case 'a':
  47553       if (locale[1] == 'z') {
  47554         return(LOCALE_TURKIC);
  47555       }
  47556       break;
  47557     case 'l':
  47558       if (locale[1] == 't') {
  47559         return(LOCALE_LITHUANIAN);
  47560       }
  47561       break;
  47562     case 't':
  47563       if (locale[1] == 'r') {
  47564         return(LOCALE_TURKIC);
  47565       }
  47566       break;
  47567     default:;
  47568       // return default value
  47569   }
  47570 
  47571   return(LOCALE_NORMAL);
  47572 }
  47573 
  47574 /**
  47575  * UTF-8 code point to rune
  47576  *
  47577  * \param
  47578  *   code UTF-8 code point
  47579  * \return
  47580  *   Rune
  47581  *   0 failed
  47582  */
  47583 rune code2RuneUTF8(const char *code) {
  47584   uint8_t ln;
  47585 
  47586   return(code2RuneLUTF8(code, &ln));
  47587 }
  47588 
  47589 /**
  47590  * UTF-8 code point to rune and length
  47591  *
  47592  * the code point length is returned in *n
  47593  *
  47594  * \param
  47595  *   code UTF-8 code point
  47596  * \param
  47597  *   n pointer to returned code point length
  47598  * \return
  47599  *   Rune
  47600  *   0 failed
  47601  */
  47602 rune code2RuneLUTF8(const char *code, uint8_t *n) {
  47603 
  47604   if (!code || !*code || !n) {
  47605     return(0);
  47606   }
  47607 
  47608   rune r;
  47609 
  47610   *n = UTFSEQ(code[0]);;
  47611   switch (*n) {
  47612     case 1:
  47613       r = code[0];
  47614       break; /* 0xxxxxxx */
  47615     case 2:
  47616       r = code[0] & 0x1F;
  47617       break; /* 110xxxxx */
  47618     case 3:
  47619       r = code[0] & 0x0F;
  47620       break; /* 1110xxxx */
  47621     case 4:
  47622       r = code[0] & 0x07;
  47623       break; /* 11110xxx */
  47624     case 5:
  47625       r = code[0] & 0x03;
  47626       break; /* 111110xx */
  47627     case 6:
  47628       r = code[0] & 0x01;
  47629       break; /* 1111110x */
  47630     default: /* invalid sequence */
  47631       return(0);
  47632   }
  47633 
  47634   // add values from continuation bytes
  47635   rangeFrom(i, 1, *n) {
  47636     if ((code[i] & 0xC0) == 0x80) {
  47637       // add bits from continuation byte to rune value
  47638       // cannot overflow: 6 byte sequences contain 31 bits
  47639       // 10xxxxxx
  47640       r = (r << 6) | (code[i] & 0x3F);
  47641     }
  47642     else {
  47643       // expected continuation
  47644       return(0);
  47645     }
  47646   }
  47647 
  47648   if (runeLenUTF8(r) < *n) {
  47649     return(0);
  47650   }
  47651   return(r);
  47652 }
  47653 
  47654 static int firstBytesUTF8[6] = {0, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC};
  47655 
  47656 /**
  47657  * rune to UTF-8 code point
  47658  *
  47659  * \param
  47660  *   dst destination buffer at least 6 bytes or if NULL, the code point length is computed
  47661  * \param
  47662  *   c UNICODE rune
  47663  * \return
  47664  *   code point length and code point in dst
  47665  *   when dst is NULL, return code point length only
  47666  *   0 bad rune, dst becomes an empty string
  47667  */
  47668 size_t bRune2CodeUTF8(char *dst, rune c) {
  47669   size_t len = 0;;
  47670   int first;
  47671 
  47672   len = runeLenUTF8(c);
  47673   if (!len) {
  47674     // bad rune
  47675     if (dst) {
  47676       *dst = 0;
  47677     }
  47678     return(0);
  47679   }
  47680 
  47681   first = firstBytesUTF8[len-1];
  47682 
  47683   if (dst) {
  47684     rangeDownTo(i, (ssize_t)len, 1) {
  47685       dst[i] = (char)((c & 0x3f) | 0x80);
  47686       c >>= 6;
  47687     }
  47688     dst[0] = (char)(c | first);
  47689   }
  47690 
  47691   return(len);
  47692 }
  47693 
  47694 /**
  47695  * rune length as UTF-8 code point
  47696  *
  47697  * \param
  47698  *   r UNICODE rune
  47699  * \return
  47700  *   code point length
  47701  *   0 bad rune
  47702  */
  47703 uint8_t runeLenUTF8(rune r) {
  47704 
  47705   if (BADRUNE(r)) {
  47706     // error
  47707     return(0);
  47708   }
  47709   else if (r < 0x80) {
  47710     return(1);
  47711   }
  47712   else if (r < 0x800) {
  47713     return(2);
  47714   }
  47715   else if (r < 0x10000) {
  47716     return(3);
  47717   }
  47718   else if (r < 0x200000) {
  47719     return(4);
  47720   }
  47721   else if (r < 0x4000000) {
  47722     return(5);
  47723   }
  47724   else {
  47725     return(6);
  47726 }
  47727   }
  47728 
  47729 // constants for hangul syllable [de]composition
  47730 #define SBase   0xAC00
  47731 #define LBase   0x1100
  47732 #define VBase   0x1161
  47733 #define TBase   0x11A7
  47734 #define LCount   19
  47735 #define VCount   21
  47736 #define TCount   28
  47737 #define NCount   (VCount * TCount)
  47738 #define SCount   (LCount * NCount)
  47739 
  47740 /* http://www.unicode.org/unicode/reports/tr15/#Hangul
  47741  * r should be null or have sufficient space. Calling with r == NULL will
  47742  * only calculate the result len; however, a buffer with space for three
  47743  * characters will always be big enough. */
  47744 internal size_t decompose_hangul(rune s, rune *r) {
  47745   int32_t SIndex = s - SBase;;
  47746   int32_t TIndex = SIndex % TCount;;
  47747 
  47748   if (r) {
  47749     r[0] = LBase + SIndex / NCount;
  47750     r[1] = VBase + (SIndex % NCount) / TCount;
  47751   }
  47752 
  47753   if (TIndex) {
  47754     if (r) {
  47755       r[2] = TBase + TIndex;
  47756     }
  47757     return(3);
  47758   }
  47759   else {
  47760     return(2);
  47761 }
  47762   }
  47763 
  47764 /* returns a pointer to a null-terminated UTF-8 string */
  47765 internal const char *find_decomposition (rune ch) {
  47766   int start = 0;;
  47767   int end = ARRAY_SIZE(decomp_table);;
  47768 
  47769   if (ch >= decomp_table[start].ch && ch <= decomp_table[end - 1].ch) {
  47770     forever {
  47771       int half = (start + end) / 2;
  47772       if (ch == decomp_table[half].ch) {
  47773         int offset = decomp_table[half].canon_offset;;
  47774         if (offset == UNICODE_NOT_PRESENT_OFFSET) {
  47775           return(NULL);
  47776         }
  47777 
  47778         return(&(decomp_expansion_string[offset]));
  47779       }
  47780       else if (half == start) {
  47781         break;
  47782       }
  47783       else if (ch > decomp_table[half].ch) {
  47784         start = half;
  47785       }
  47786       else {
  47787         end = half;
  47788       }
  47789     }
  47790   }
  47791 
  47792   return(NULL);
  47793 }
  47794 
  47795 
  47796 internal size_t runeFullyDecompose(rune  ch, rune *result, size_t resultLen) {
  47797   const char *decomp = NULL;
  47798   const char *p = NULL;
  47799 
  47800   // Hangul syllable
  47801   if (ch >= SBase && ch < SBase + SCount) {
  47802     rune buffer[3];
  47803     size_t len = decompose_hangul(ch, result ? buffer : NULL);
  47804     if (result) {
  47805       for (size_t i = 0; i < len && i < resultLen; i++) {
  47806         result[i] = buffer[i];
  47807     }
  47808       }
  47809     return(len);
  47810   }
  47811   else if (EVA(decomp, find_decomposition (ch)) != NULL) {
  47812     // Found it.
  47813     size_t len = lenUTF8(decomp);
  47814     size_t i;
  47815     for (p = decomp, i = 0; i < len && i < resultLen; nxCodeUTF8(p), i++) {
  47816       result[i] = code2RuneUTF8(p);
  47817     }
  47818 
  47819     return(len);
  47820   }
  47821 
  47822   // Does not decompose
  47823   if (result && resultLen >= 1) {
  47824     *result = ch;
  47825   }
  47826   return(1);
  47827 }
  47828 
  47829 internal size_t output_marks(const char **p_inout, char *dst, bool remove_dot) {
  47830   const char *p = NULL;
  47831   size_t len = 0;;
  47832 
  47833   p = *p_inout;
  47834 
  47835   while (*p) {
  47836     rune c = code2RuneUTF8(p);;
  47837 
  47838     if (ISMARK(RUNETYPE(c))) {
  47839       if (!remove_dot || c != 0x307) {
  47840         // COMBINING DOT ABOVE
  47841         len += bRune2CodeUTF8(dst ? dst + len : NULL, c);
  47842       }
  47843       nxCodeUTF8(p);
  47844     }
  47845     else {
  47846       break;
  47847   }
  47848     }
  47849 
  47850   *p_inout = p;
  47851   return(len);
  47852 }
  47853 
  47854 internal size_t output_special_case(char *dst, int offset, int type, int which) {
  47855   const char *p = NULL;
  47856   size_t len;
  47857 
  47858   p = special_case_table + offset;
  47859 
  47860   if (type != UNICODE_TITLECASE_LETTER) {
  47861     nxCodeUTF8(p);
  47862   }
  47863 
  47864   if (which == 1) {
  47865     p += strlen(p) + 1;
  47866   }
  47867 
  47868   len = strlen(p);
  47869   if (dst) {
  47870     memcpy(dst, p, len);
  47871   }
  47872 
  47873   return(len);
  47874 }
  47875 
  47876 /**
  47877  * rune toupper UTF8
  47878  *
  47879  * Converts a character to uppercase.
  47880  *
  47881  * \param
  47882  *   c rune
  47883  * \return
  47884  *   c converted to uppercase
  47885  *   c unchanged if c has no upper case or is not lowercase or titlecase
  47886  */
  47887 rune toupperUTF8(rune c) {
  47888   int t = RUNETYPE(c);;
  47889 
  47890   if (t == UNICODE_LOWERCASE_LETTER) {
  47891     rune val = ATTTABLE (c >> 8, c & 0xff);
  47892     if (val >= 0x1000000) {
  47893       const char *p = special_case_table + val - 0x1000000;;
  47894       val           = code2RuneUTF8(p);
  47895     }
  47896     // Some lowercase letters, e.g., U+000AA, FEMININE ORDINAL INDICATOR,
  47897     // do not have an uppercase equivalent, in which case val will be
  47898     // zero.
  47899     return(val ? val : c);
  47900   }
  47901   else if (t == UNICODE_TITLECASE_LETTER) {
  47902     range(i, ARRAY_SIZE(title_table)) {
  47903       if (title_table[i][0] == c) {
  47904         return(title_table[i][1] ? title_table[i][1] : c);
  47905       }
  47906     }
  47907   }
  47908   return(c);
  47909 }
  47910 
  47911 internal size_t _upperUTF8(char *dst, const char *utf8, localeType lcl) {
  47912   size_t len = 0;;
  47913   const char *last = NULL;
  47914   bool last_was_i = FALSE;;
  47915 
  47916   while (*utf8) {
  47917     rune c = code2RuneUTF8(utf8);
  47918     int t  = RUNETYPE(c);
  47919 
  47920     last = utf8;
  47921 
  47922     nxCodeUTF8(utf8);
  47923 
  47924     if (lcl == LOCALE_LITHUANIAN) {
  47925       if (c == 'i') {
  47926         last_was_i = TRUE;
  47927       }
  47928       else {
  47929         if (last_was_i) {
  47930           rune decomp[RUNE_MAX_DECOMPOSITION_LENGTH];
  47931           size_t decompLen = runeFullyDecompose(c, decomp, ARRAY_SIZE(decomp));
  47932           range(i, decompLen) {
  47933             if (decomp[i] != 0x307) {
  47934               // COMBINING DOT ABOVE
  47935               len += bRune2CodeUTF8(dst ? dst + len : NULL, toupperUTF8(decomp[i]));;
  47936             }
  47937           }
  47938 
  47939           len += output_marks(&utf8, dst ? dst + len : NULL, TRUE);;
  47940           continue;
  47941         }
  47942 
  47943         if (!ISMARK(t)) {
  47944           last_was_i = FALSE;
  47945     }
  47946       }
  47947         }
  47948 
  47949     if (lcl == LOCALE_TURKIC && c == 'i') {
  47950       // i => LATIN CAPITAL LETTER I WITH DOT ABOVE
  47951       len += bRune2CodeUTF8(dst ? dst + len : NULL, 0x130);
  47952     }
  47953     else if (c == 0x0345) {
  47954       // COMBINING GREEK YPOGEGRAMMENI
  47955       len += output_marks(&utf8, dst ? dst + len : NULL, FALSE);
  47956 
  47957       // And output as GREEK CAPITAL LETTER IOTA
  47958       len += bRune2CodeUTF8(dst ? dst + len : NULL, 0x399);
  47959     }
  47960     else if (IS(t, OR(UNICODE_LOWERCASE_LETTER, OR(UNICODE_TITLECASE_LETTER, 0)))) {
  47961       rune val = ATTTABLE (c >> 8, c & 0xff);
  47962 
  47963       if (val >= 0x1000000) {
  47964         len += output_special_case (dst ? dst + len : NULL, val - 0x1000000, t, t == UNICODE_LOWERCASE_LETTER ? 0 : 1);
  47965       }
  47966       else {
  47967         if (t == UNICODE_TITLECASE_LETTER) {
  47968           range(i, ARRAY_SIZE(title_table)) {
  47969             if (title_table[i][0] == c) {
  47970               val = title_table[i][1];
  47971               break;
  47972             }
  47973           }
  47974         }
  47975 
  47976         // Some lowercase letters, e.g., U+000AA, FEMININE ORDINAL INDICATOR,
  47977         // do not have an uppercase equivalent, in which case val will be
  47978         // zero.
  47979         len += bRune2CodeUTF8(dst ? dst + len : NULL, val ? val : c);
  47980     }
  47981       }
  47982     else {
  47983       uint8_t codeLen = codeSizeUTF8(last);
  47984 
  47985       if ((dst)) {
  47986         memcpy(dst + len, last, codeLen);
  47987       }
  47988 
  47989       len += codeLen;;
  47990   }
  47991     }
  47992   if (dst) {
  47993     *(dst+len) = 0;
  47994   }
  47995   return(len);
  47996 }
  47997 
  47998 
  47999 /**
  48000  * upper case UTF-8 encoded string
  48001  * duplicate string
  48002  *
  48003  * \param
  48004  *   string UTF-8 encoded string
  48005  * \return
  48006  *   new upper case string (you must free the pointer)
  48007  */
  48008 char *upperUTF8(const char *utf8) {
  48009   char *r = NULL;
  48010 
  48011   // sanity checks
  48012   if (!utf8) {
  48013     return(NULL);
  48014   }
  48015 
  48016   localeType lcl = getLocaleType();
  48017 
  48018   size_t len     = _upperUTF8(NULL, utf8, lcl);
  48019   r              = malloc(len+1);
  48020   if (!r) {
  48021     return(NULL);
  48022   }
  48023   _upperUTF8(r, utf8, lcl);
  48024   return(r);
  48025 }
  48026 
  48027 /**
  48028  * upper case UTF-8 encoded string
  48029  *
  48030  * \param
  48031  *   string (this parameter is reallocated)
  48032  * \return
  48033  *   upper case string (you must free the pointer)
  48034  *   NULL error
  48035  */
  48036 char *iUpperUTF8(char **utf8) {
  48037 
  48038   if (!utf8 || !*utf8) {
  48039     return(NULL);
  48040   }
  48041 
  48042   char *s = upperUTF8(*utf8);
  48043 
  48044   free(*utf8);
  48045   *utf8 = s;
  48046 
  48047   return(*utf8);
  48048 }
  48049 
  48050 /**
  48051  * buffer upper case String
  48052  *
  48053  * \param
  48054  *   string
  48055  * \return
  48056  *   upper case string
  48057  *   NULL error
  48058  */
  48059 char *bUpperUTF8(char *utf8 UNUSED) {
  48060 
  48061   // TODO
  48062   return(NULL);
  48063 }
  48064 
  48065 /**
  48066  * runeCombiningClass:
  48067  * @uc: a Unicode character
  48068  *
  48069  * Determines the canonical combining class of a Unicode character.
  48070  *
  48071  * Returns: the combining class of the character
  48072  **/
  48073 local int runeCombiningClass (rune uc) {
  48074 
  48075   return(COMBINING_CLASS(uc));
  48076 }
  48077 
  48078 /* traverses the string checking for characters with combining class == 230
  48079  * until a base character is found */
  48080 internal bool has_more_above (const char *str) {
  48081   const char *p = NULL;
  48082   int combining_class;
  48083 
  48084   p = str;
  48085   while (*p) {
  48086     combining_class = runeCombiningClass(code2RuneUTF8(p));
  48087     if (combining_class == 230) {
  48088       return(TRUE);
  48089     }
  48090     else if (combining_class == 0) {
  48091       break;
  48092     }
  48093 
  48094     nxCodeUTF8(p);
  48095   }
  48096 
  48097   return(FALSE);
  48098 }
  48099 
  48100 /**
  48101  * rune tolower UTF8
  48102  *
  48103  * Converts a character to lower case.
  48104  *
  48105  * \param
  48106  *   c UNICODE rune
  48107  * \return
  48108  *   lowercase c
  48109  *   c unchanged if c has lowercase or is not an uppercase or titlecase character
  48110  **/
  48111 rune tolowerUTF8(rune c) {
  48112 
  48113   int t = RUNETYPE(c);
  48114   if (t == UNICODE_UPPERCASE_LETTER) {
  48115     rune val = ATTTABLE (c >> 8, c & 0xff);
  48116     if (val >= 0x1000000) {
  48117       const char *p = special_case_table + val - 0x1000000;
  48118       return(code2RuneUTF8(p));
  48119     }
  48120     else {
  48121       // Not all uppercase letters are guaranteed to have a lowercase
  48122       // equivalent.  If this is the case, val will be zero.
  48123       return(val ? val : c);
  48124   }
  48125     }
  48126   else if (t == UNICODE_TITLECASE_LETTER) {
  48127     range(i, ARRAY_SIZE(title_table)) {
  48128       if (title_table[i][0] == c) {
  48129         return(title_table[i][2]);
  48130       }
  48131     }
  48132   }
  48133   return(c);
  48134 }
  48135 
  48136 internal size_t _lowerUTF8(char *dst, const char *utf8, localeType lcl) {
  48137   size_t len = 0;;
  48138   const char *last = NULL;
  48139 
  48140   while (*utf8) {
  48141     rune c = code2RuneUTF8(utf8);
  48142     int t  = RUNETYPE(c);
  48143 
  48144     last = utf8;
  48145 
  48146     nxCodeUTF8(utf8);
  48147 
  48148     rune val;
  48149 
  48150     if ((lcl == LOCALE_TURKIC && c == 'I')) {
  48151       if (code2RuneUTF8(utf8) == 0x0307) {
  48152         // I + COMBINING DOT ABOVE => i (U+0069)
  48153         len += bRune2CodeUTF8(dst ? dst + len : NULL, 0x0069);
  48154         nxCodeUTF8(utf8);
  48155       }
  48156       else {
  48157         // I => LATIN SMALL LETTER DOTLESS I
  48158         len += bRune2CodeUTF8(dst ? dst + len : NULL, 0x131);
  48159     }
  48160       }
  48161     // Introduce an explicit dot above when lowercasing capital I's and J's
  48162     // whenever there are more accents above. [SpecialCasing.txt]
  48163     else if (lcl == LOCALE_LITHUANIAN && (c == 0x00cc || c == 0x00cd || c == 0x0128)) {
  48164       len += bRune2CodeUTF8(dst ? dst + len : NULL, 0x0069);
  48165       len += bRune2CodeUTF8(dst ? dst + len : NULL, 0x0307);
  48166 
  48167       switch (c) {
  48168         case 0x00cc:
  48169           len += bRune2CodeUTF8(dst ? dst + len : NULL, 0x0300);
  48170           break;
  48171         case 0x00cd:
  48172           len += bRune2CodeUTF8(dst ? dst + len : NULL, 0x0301);
  48173           break;
  48174         case 0x0128:
  48175           len += bRune2CodeUTF8(dst ? dst + len : NULL, 0x0303);
  48176           break;
  48177         default:;
  48178           // do nothing
  48179       }
  48180     }
  48181     else if (lcl == LOCALE_LITHUANIAN && (c == 'I' || c == 'J' || c == 0x012e) && has_more_above (utf8)) {
  48182       len += bRune2CodeUTF8(dst ? dst+len : NULL, tolowerUTF8(c));
  48183       len += bRune2CodeUTF8(dst ? dst+len : NULL, 0x0307);
  48184     }
  48185     else if (c == 0x03A3) {
  48186       // GREEK CAPITAL LETTER SIGMA
  48187       if (*utf8) {
  48188         rune next_c   = code2RuneUTF8(utf8);;
  48189         int next_type = RUNETYPE(next_c);;
  48190 
  48191         // SIGMA maps differently depending on whether it is
  48192         // final or not. The following simplified test would
  48193         // fail in the case of combining marks following the
  48194         // sigma, but I don't think that occurs in real text.
  48195         // The test here matches that in ICU.
  48196         // Lu,Ll,Lt,Lm,Lo
  48197         if (ISALPHA(next_type)) {
  48198           // GREEK SMALL SIGMA
  48199           val = 0x3c3;
  48200         }
  48201         else {
  48202           // GREEK SMALL FINAL SIGMA
  48203           val = 0x3c2;
  48204       }
  48205         }
  48206       else {
  48207         // GREEK SMALL FINAL SIGMA
  48208         val = 0x3c2;
  48209       }
  48210 
  48211       len += bRune2CodeUTF8(dst ? dst + len : NULL, val);
  48212     }
  48213     else if (IS (t, OR (UNICODE_UPPERCASE_LETTER, OR (UNICODE_TITLECASE_LETTER, 0)))) {
  48214       val = ATTTABLE(c >> 8, c & 0xff);
  48215 
  48216       if (val >= 0x1000000) {
  48217         len += output_special_case(dst ? dst + len : NULL, val - 0x1000000, t, 0);
  48218       }
  48219       else {
  48220         if (t == UNICODE_TITLECASE_LETTER) {
  48221           range(i, ARRAY_SIZE(title_table)) {
  48222             if (title_table[i][0] == c) {
  48223               val = title_table[i][2];
  48224               break;
  48225             }
  48226           }
  48227         }
  48228 
  48229         // Not all uppercase letters are guaranteed to have a lowercase
  48230         // equivalent.  If this is the case, val will be zero.
  48231         len += bRune2CodeUTF8(dst ? dst+len : NULL, val ? val : c);;
  48232     }
  48233       }
  48234 
  48235     else {
  48236       uint8_t codeLen = codeSizeUTF8(last);
  48237 
  48238       if ((dst)) {
  48239         memcpy(dst+len, last, codeLen);
  48240       }
  48241 
  48242       len += codeLen;;
  48243   }
  48244     }
  48245 
  48246   if (dst) {
  48247     *(dst+len) = 0;
  48248   }
  48249   return(len);
  48250 }
  48251 
  48252 /**
  48253  * lower case UTF-8 String
  48254  * duplicate string
  48255  *
  48256  * \param
  48257  *   string
  48258  * \return
  48259  *   new lower case string (you must free the pointer)
  48260  */
  48261 char *lowerUTF8(const char *utf8) {
  48262   char *r = NULL;
  48263 
  48264   // sanity checks
  48265   if (!utf8) {
  48266     return(NULL);
  48267   }
  48268 
  48269   localeType lcl = getLocaleType();
  48270 
  48271   size_t len     = _lowerUTF8(NULL, utf8, lcl);
  48272   r              = malloc(len+1);
  48273   if (!r) {
  48274     return(NULL);
  48275   }
  48276   _lowerUTF8(r, utf8, lcl);
  48277   return(r);
  48278 }
  48279 
  48280 /**
  48281  * lower case String
  48282  *
  48283  * \param
  48284  *   string (this parameter is reallocated)
  48285  * \return
  48286  *   lower case string (you must free the pointer)
  48287  *   NULL error
  48288  */
  48289 char *iLowerUTF8(char **utf8) {
  48290 
  48291   if (!utf8 || !*utf8) {
  48292     return(NULL);
  48293   }
  48294 
  48295   char *s = lowerUTF8(*utf8);
  48296 
  48297   free(*utf8);
  48298   *utf8 = s;
  48299 
  48300   return(*utf8);
  48301 }
  48302 
  48303 /**
  48304  * buffer lower case String
  48305  *
  48306  * \param
  48307  *   string
  48308  * \return
  48309  *   lower case string
  48310  *   NULL error
  48311  */
  48312 char *bLowerUTF8(char *string UNUSED) {
  48313 
  48314   // TODO
  48315   return(NULL);
  48316 }
  48317 
  48318 /**
  48319  * casefold UTF-8 encoded string
  48320  *
  48321  * \param
  48322  *   utf8 UTF-8 encoded string
  48323  * \return
  48324  *   new string (you must free the pointer)
  48325  *   NULL when utf8 is NULL
  48326  */
  48327 char *casefoldUTF8(const char *utf8) {
  48328   char *r = NULL;
  48329 
  48330   if (!utf8) {
  48331     return(NULL);
  48332   }
  48333 
  48334   emptyS(r);
  48335 
  48336   while (*utf8) {
  48337     rune ch   = code2RuneUTF8(utf8);
  48338 
  48339     int start = 0;
  48340     int end   = ARRAY_SIZE(casefold_table);
  48341 
  48342     if (ch >= casefold_table[start].ch && ch <= casefold_table[end - 1].ch) {
  48343       forever {
  48344         int half = (start + end) / 2;
  48345         if (ch == casefold_table[half].ch) {
  48346           pErrorNULL(iAppendS(&r, casefold_table[half].data));
  48347           goto next;
  48348         }
  48349         else if (half == start) {
  48350           break;
  48351         }
  48352         else if (ch > casefold_table[half].ch) {
  48353           start = half;
  48354         }
  48355         else {
  48356           end = half;
  48357         }
  48358       }
  48359     }
  48360 
  48361     char code[8] = {0, 0, 0, 0, 0, 0, 0, 0};
  48362     pError0(bRune2CodeUTF8(code, tolowerUTF8(ch)));
  48363     pErrorNULL(iAppendS(&r, code));
  48364 
  48365     next:
  48366       nxCodeUTF8(utf8);
  48367   }
  48368 
  48369   return(r);
  48370 }
  48371 
  48372 /**
  48373  * uniq UTF-8 String
  48374  * duplicate string
  48375  *
  48376  * remove successive repetitions of UTF-8 code point code
  48377  *
  48378  * \param
  48379  *   string
  48380  * \param
  48381  *   c character to remove
  48382  * \return
  48383  *   new string without successive repetitions of char c (you must free the pointer)
  48384  */
  48385 char *uniqUTF8(const char *string, const char *code) {
  48386   char *r = NULL;
  48387   size_t len;
  48388 
  48389   // sanity checks
  48390   if (!string || !code) {
  48391     return(NULL);
  48392   }
  48393 
  48394   r   = strdup(string);
  48395   if (!r) {
  48396     return(NULL);
  48397   }
  48398   len = lenUTF8(string);
  48399 
  48400   if (len < 2) {
  48401     // string is too short to have repetitions
  48402     return(r);
  48403   }
  48404 
  48405   char *p        = r;
  48406   char *c        = nextCodeUTF8(r);
  48407   nxCodeUTF8(string);
  48408 
  48409   while (*string) {
  48410     if (startsWithS(p, code) && startsWithS(string, code)) {
  48411       // skip
  48412       goto next;
  48413     }
  48414     else {
  48415       memcpy(c, string, codeSizeUTF8(string));
  48416       nxCodeUTF8(c);
  48417     }
  48418 
  48419     next:
  48420     nxCodeUTF8(string);
  48421     nxCodeUTF8(p);
  48422   }
  48423 
  48424   *c = 0;
  48425 
  48426   return(r);
  48427 }
  48428 
  48429 /**
  48430  * uniq UTF-8 String
  48431  *
  48432  * remove successive repetitions of char c
  48433  *
  48434  * \param
  48435  *   string
  48436  * \param
  48437  *   c character to remove
  48438  * \return
  48439  *   string without successive repetitions of char c
  48440  *   NULL error
  48441  */
  48442 char *iUniqUTF8(char **string, const char *code) {
  48443   size_t len;
  48444 
  48445   // sanity checks
  48446   if (!string || !*string || !code) {
  48447     return(NULL);
  48448   }
  48449 
  48450   len = lenUTF8(*string);
  48451 
  48452   if (len < 2) {
  48453     // string is too short to have repetitions
  48454     return(*string);
  48455   }
  48456 
  48457   char *p        = *string;
  48458   char *s        = *string;
  48459   char *c        = nextCodeUTF8(*string);
  48460   nxCodeUTF8(s);
  48461 
  48462   while (*s) {
  48463     if (startsWithS(p, code) && startsWithS(s, code)) {
  48464       // skip
  48465       goto next;
  48466     }
  48467     else {
  48468       memcpy(c, s, codeSizeUTF8(s));
  48469       nxCodeUTF8(c);
  48470     }
  48471 
  48472     next:
  48473     nxCodeUTF8(s);
  48474     nxCodeUTF8(p);
  48475   }
  48476 
  48477   *c = 0;
  48478 
  48479   return(*string);
  48480 }
  48481 
  48482 
  48483 /**
  48484  * buffer uniq String
  48485  *
  48486  * remove successive repetitions of char c
  48487  *
  48488  * \param
  48489  *   string
  48490  * \param
  48491  *   c character to remove
  48492  * \return
  48493  *   string without successive repetitions of char c
  48494  *   NULL error
  48495  */
  48496 char *bUniqUTF8(char *string, const char *code) {
  48497   size_t len;
  48498 
  48499   // sanity checks
  48500   if (!string || !code) {
  48501     return(NULL);
  48502   }
  48503 
  48504   len = lenUTF8(string);
  48505 
  48506   if (len < 2) {
  48507     // string is too short to have repetitions
  48508     return(string);
  48509   }
  48510 
  48511   char *p        = string;
  48512   char *s        = string;
  48513   char *c        = nextCodeUTF8(string);
  48514   nxCodeUTF8(s);
  48515 
  48516   while (*s) {
  48517     if (startsWithS(p, code) && startsWithS(s, code)) {
  48518       // skip
  48519       goto next;
  48520     }
  48521     else {
  48522       memcpy(c, s, codeSizeUTF8(s));
  48523       nxCodeUTF8(c);
  48524     }
  48525 
  48526     next:
  48527     nxCodeUTF8(s);
  48528     nxCodeUTF8(p);
  48529   }
  48530 
  48531   *c = 0;
  48532 
  48533   return(string);
  48534 }
  48535 
  48536 /**
  48537  * ignore case uniq String
  48538  * duplicate string
  48539  *
  48540  * remove successive repetitions of char c
  48541  *
  48542  * \param
  48543  *   string
  48544  * \param
  48545  *   c character to remove
  48546  * \return
  48547  *   new string without successive repetitions of char c (you must free the pointer)
  48548  */
  48549 char *icUniqUTF8(const char *string UNUSED, const char *code UNUSED) {
  48550 
  48551   // TODO casefoldUTF8 changes the string length in bytes and characters
  48552   return(NULL);
  48553 }
  48554 
  48555 /**
  48556  * in place ignore case uniq String
  48557  *
  48558  * remove successive repetitions of char c
  48559  *
  48560  * \param
  48561  *   string
  48562  * \param
  48563  *   c character to remove
  48564  * \return
  48565  *   string without successive repetitions of char c
  48566  *   NULL error
  48567  */
  48568 char *iicUniqUTF8(char **string UNUSED, const char *code UNUSED) {
  48569 
  48570   // TODO casefoldUTF8 changes the string length in bytes and characters
  48571   return(NULL);
  48572 }
  48573 
  48574 /**
  48575  * ignore case buffer uniq String
  48576  *
  48577  * remove successive repetitions of char c
  48578  *
  48579  * \param
  48580  *   string
  48581  * \param
  48582  *   c character to remove
  48583  * \return
  48584  *   string without successive repetitions of char c
  48585  *   NULL error
  48586  */
  48587 char *bicUniqUTF8(char *string UNUSED, char c UNUSED) {
  48588 
  48589   // TODO casefoldUTF8 changes the string length in bytes and characters
  48590   return(NULL);
  48591 }
  48592 
  48593 
  48594 /**
  48595  * get UTF8 encoded string
  48596  *
  48597  * get char at python index
  48598  *
  48599  */
  48600 rune getUTF8(const char *string, int64_t index) {
  48601   int64_t len;
  48602 
  48603   if (!string) {
  48604     return(0);
  48605   }
  48606 
  48607   len = (int64_t)lenUTF8(string);
  48608   if (index >= len) {
  48609     return(0);
  48610   }
  48611   if (index < -len) {
  48612     return(0);
  48613   }
  48614   if (index < 0) {
  48615     index = len + index;
  48616   }
  48617 
  48618   const char *c = idx2PtrUTF8(string, index);
  48619   return(code2RuneUTF8(c));
  48620 }
  48621 
  48622 
  48623 /**
  48624  * set UTF8 encoded string
  48625  *
  48626  * set char at python index
  48627  *
  48628  * TODO this function might make the string invalid UTF8
  48629  *      check codeSizeUTF8 and adjust the buffer
  48630  */
  48631 char *setUTF8(char *string, int64_t index, rune c) {
  48632   int64_t len;
  48633 
  48634   if (!string) {
  48635     return(NULL);
  48636   }
  48637 
  48638   len = (int64_t)lenUTF8(string);
  48639   if (index >= len) {
  48640     return(NULL);
  48641   }
  48642   if (index < -len) {
  48643     return(NULL);
  48644   }
  48645   if (index < 0) {
  48646     index = len + index;
  48647   }
  48648 
  48649   char *p = idx2PtrRWUTF8(string, index);
  48650   pError0(bRune2CodeUTF8(p, c));
  48651   // TODO check code point length and shift string end when necessary
  48652   return(string);
  48653 }
  48654 
  48655 
  48656 /**
  48657  * slice UTF8 encoded String
  48658  * return new string which is the string between start and end
  48659  * negative indexes are allowed
  48660  *
  48661  * (copy substring from start to end)
  48662  *
  48663  * \param
  48664  *   string to slice
  48665  * \param
  48666  *   start: start character index, must be in the string
  48667  * \param
  48668  *   end: end character index, must be in the string after start
  48669  * \return
  48670  *   new sliced string (you must free the pointer)
  48671  *   "" when start=end
  48672  *   NULL when start and end are not set correctly
  48673  */
  48674 char *sliceUTF8(const char *string, int64_t start, int64_t end) {
  48675   char *s = NULL;
  48676   int64_t len;
  48677 
  48678   // sanity checks
  48679   if (!string) {
  48680     return(NULL);
  48681   }
  48682 
  48683   len = (int64_t)lenUTF8(string);
  48684 
  48685   if (start > len) {
  48686     return(NULL);
  48687   }
  48688   if (end > len) {
  48689     end = len;
  48690   }
  48691   if (start <= -len) {
  48692     start = -len;
  48693   }
  48694   if (end <= -len) {
  48695     return(NULL);
  48696   }
  48697   if (start < 0) {
  48698     start = len + start;
  48699   }
  48700   if (end <= 0) {
  48701     end = len + end;
  48702   }
  48703   if (end < start) {
  48704     return(NULL);
  48705   }
  48706 
  48707   if (start == end) {
  48708     emptyS(s)
  48709   }
  48710   else {
  48711     // start < end < len
  48712     // copy range to a new string
  48713     const char *startp = idx2PtrUTF8(string, start);
  48714     const char *endp   = idx2PtrUTF8(string, end);
  48715     size_t n;
  48716     n = (size_t)(endp - startp);
  48717     s = MALLOC((n+1));
  48718     if (!s) {
  48719       return(NULL);//LCOV_EXCL_LINE
  48720     }
  48721     s = strncpy(s, string+(size_t)(startp-string), n);
  48722     s[n] = 0;
  48723   }
  48724 
  48725   return(s);
  48726 }
  48727 
  48728 
  48729 /**
  48730  * slice UTF8 encoded String
  48731  * return string which is the string between start and end
  48732  * negative indexes are allowed
  48733  *
  48734  * \param
  48735  *   string to slice (this parameter is reallocated)
  48736  * \param
  48737  *   start: start character index, must be in the string
  48738  * \param
  48739  *   end: end character index, must be in the string after start
  48740  * \return
  48741  *   sliced string (you must free the pointer)
  48742  *   "" when start=end
  48743  *   NULL unchanged string when start and end are not set correctly
  48744  */
  48745 char *iSliceUTF8(char **string, int64_t start, int64_t end) {
  48746   char *s = NULL;
  48747   int64_t len;
  48748 
  48749   // sanity checks
  48750   if (!string || !*string) {
  48751     return(NULL);
  48752   }
  48753 
  48754   len = (int64_t)lenUTF8(*string);
  48755 
  48756   if (start > len) {
  48757     free(*string);
  48758     emptyS(*string);
  48759     return(NULL);
  48760   }
  48761   if (end > len) {
  48762     end = len;
  48763   }
  48764   if (start <= -len) {
  48765     start = -len;
  48766   }
  48767   if (end <= -len) {
  48768     free(*string);
  48769     emptyS(*string);
  48770     return(NULL);
  48771   }
  48772   if (start < 0) {
  48773     start = len + start;
  48774   }
  48775   if (end <= 0) {
  48776     end = len + end;
  48777   }
  48778   if (end < start) {
  48779     free(*string);
  48780     emptyS(*string);
  48781     return(NULL);
  48782   }
  48783 
  48784   if (start == end) {
  48785     emptyS(s);
  48786   }
  48787   else {
  48788     // start < end < len
  48789     // copy range to a new string
  48790     const char *startp = idx2PtrUTF8(*string, start);
  48791     const char *endp   = idx2PtrUTF8(*string, end);
  48792     size_t n;
  48793     n = (size_t)(endp - startp);
  48794     s = MALLOC(n+1);
  48795     if (!s) {
  48796       return(NULL);
  48797     }
  48798     s = strncpy(s, (*string)+(size_t)(startp-*string), n);
  48799     s[n] = 0;
  48800   }
  48801 
  48802   free(*string);
  48803   *string = s;
  48804   return(s);
  48805 }
  48806 
  48807 
  48808 /**
  48809  * buffer slice UTF8 encoded String
  48810  * return string which is the string between start and end
  48811  * negative indexes are allowed
  48812  *
  48813  * \param
  48814  *   string to slice
  48815  * \param
  48816  *   start: start index, must be in the string
  48817  * \param
  48818  *   end: end index, must be in the string after start
  48819  * \return
  48820  *   sliced string
  48821  *   "" when start=end
  48822  *   NULL unchanged string when start and end are not set correctly
  48823  */
  48824 char *bSliceUTF8(char *string, int64_t start, int64_t end) {
  48825   int64_t len;
  48826 
  48827   // sanity checks
  48828   if (!string) {
  48829     return(NULL);
  48830   }
  48831 
  48832   len = (int64_t)lenUTF8(string);
  48833 
  48834   if (start > len) {
  48835     bEmptyS(string);
  48836     return(NULL);
  48837   }
  48838   if (end > len) {
  48839     end = len;
  48840   }
  48841   if (start <= -len) {
  48842     start = -len;
  48843   }
  48844   if (end <= -len) {
  48845     bEmptyS(string);
  48846     return(NULL);
  48847   }
  48848   if (start < 0) {
  48849     start = len + start;
  48850   }
  48851   if (end <= 0) {
  48852     end = len + end;
  48853   }
  48854   if (end < start) {
  48855     bEmptyS(string);
  48856     return(NULL);
  48857   }
  48858 
  48859   if (start == end) {
  48860     bEmptyS(string);
  48861   }
  48862   else {
  48863     // start < end < len
  48864     // copy range to a new string
  48865     const char *startp = idx2PtrUTF8(string, start);
  48866     const char *endp   = idx2PtrUTF8(string, end);
  48867     size_t n;
  48868     n = (size_t)(endp - startp);
  48869     memmove(string, string+(size_t)(startp-string), n);
  48870     string[n] = 0;
  48871   }
  48872 
  48873   return(string);
  48874 }
  48875 
  48876 
  48877 /**
  48878  * buffer size slice UTF8 encoded String
  48879  * return string which is the string between start and end
  48880  * negative indexes are allowed
  48881  *
  48882  * \param
  48883  *   string to slice
  48884  * \param
  48885  *   stringSize string buffer size
  48886  * \param
  48887  *   start: start character index, must be in the string
  48888  * \param
  48889  *   end: end character index, must be in the string after start
  48890  * \return
  48891  *   sliced string
  48892  *   "" when start=end
  48893  *   NULL unchanged string when start and end are not set correctly
  48894  */
  48895 char *bLSliceUTF8(char *string, size_t stringSize, int64_t start, int64_t end) {
  48896   int64_t len;
  48897 
  48898   // sanity checks
  48899   if (!string || !stringSize) {
  48900     return(NULL);
  48901   }
  48902 
  48903   len = (int64_t)strlen(string);
  48904   if ((size_t)len+1 > stringSize) {
  48905     len = (int64_t)(stringSize - 1);
  48906   }
  48907 
  48908   if (start > len) {
  48909     bEmptyS(string);
  48910     return(NULL);
  48911   }
  48912   if (end > len) {
  48913     end = len;
  48914   }
  48915   if (start <= -len) {
  48916     start = -len;
  48917   }
  48918   if (end <= -len) {
  48919     bEmptyS(string);
  48920     return(NULL);
  48921   }
  48922   if (start < 0) {
  48923     start = len + start;
  48924   }
  48925   if (end <= 0) {
  48926     end = len + end;
  48927   }
  48928   if (end < start) {
  48929     bEmptyS(string);
  48930     return(NULL);
  48931   }
  48932 
  48933   const char *startp  = bLIdx2PtrUTF8(string, stringSize, start);
  48934   const char *endp    = bLIdx2PtrUTF8(string, stringSize, end);
  48935 
  48936   size_t starto = (size_t)(startp-string);
  48937   size_t endo   = (size_t)(endp-string);
  48938 
  48939   // compute string length without NUL
  48940   stringSize--;
  48941   if (starto > stringSize) {
  48942     bEmptyS(string);
  48943     return(NULL);
  48944   }
  48945   if (endo > stringSize) {
  48946     end = (int64_t)stringSize;
  48947   }
  48948   if (start == 0) {
  48949     starto = 0;
  48950   }
  48951   if (end < start) {
  48952     bEmptyS(string);
  48953     return(NULL);
  48954   }
  48955 
  48956   if (start == end) {
  48957     bEmptyS(string);
  48958   }
  48959   else {
  48960     // start < end < stringSize
  48961     // copy range to a new string
  48962     size_t n;
  48963     n = (size_t)(endp - startp);
  48964     memmove(string, string+starto, n);
  48965     string[n] = 0;
  48966   }
  48967 
  48968   return(string);
  48969 }
  48970 
  48971 
  48972 /**
  48973  * insert string in UTF8 encoded string at index
  48974  *
  48975  * return new string with toInsert at index
  48976  * negative indexes are allowed
  48977  * index -1 is the end of the array and is equivalent to index len
  48978  *
  48979  * \param
  48980  *   string UTF8 encoded string
  48981  * \param
  48982  *   index character index in string
  48983  * \param
  48984  *   toInsert UTF8 encoded string
  48985  * \return
  48986  *   new string (you must free the pointer)
  48987  *   NULL when string is NULL or invalid index
  48988  */
  48989 char *insertUTF8(const char *string, int64_t index, const char *toInsert) {
  48990   char *r = NULL;
  48991   int64_t len;
  48992 
  48993   // sanity checks
  48994   if (!string) {
  48995     if (index || !toInsert) {
  48996       return(NULL);
  48997     }
  48998     return(strdup(toInsert));
  48999   }
  49000 
  49001   len = (int64_t)lenUTF8(string);
  49002 
  49003   if (!len && index == -1) {
  49004     // empty string, index -1 is equal to 0
  49005     index = 0;
  49006   }
  49007   bool neg = false;
  49008   if (index < 0) {
  49009     neg = true;
  49010   }
  49011 
  49012   if (index > len) {
  49013     return(NULL);
  49014   }
  49015   if (neg) {
  49016     index++;
  49017   }
  49018   if (index < -len) {
  49019     return(NULL);
  49020   }
  49021   if (neg) {
  49022     index = len + index;
  49023   }
  49024 
  49025 
  49026   if (!toInsert || isEmptyS(toInsert)) {
  49027     return(strdup(string));
  49028   }
  49029 
  49030   if (index == 0) {
  49031     // insert at beginning
  49032     return(catS(toInsert, string));
  49033   }
  49034 
  49035   int64_t offset = idx2PtrUTF8(string, index) - string;
  49036   char *s1       = sliceS(string, 0, offset);
  49037   char *s2       = sliceS(string, offset, 0);
  49038   r              = catS(s1, toInsert, s2);
  49039   freeManyS(s1,s2);
  49040 
  49041   return(r);
  49042 }
  49043 
  49044 
  49045 /**
  49046  * insert string in UTF8 encoded string at index and free toInsert
  49047  *
  49048  * return new string with toInsert at index
  49049  * negative indexes are allowed
  49050  * index -1 is the end of the array and is equivalent to index len
  49051  *
  49052  * \param
  49053  *   string UTF8 encoded string
  49054  * \param
  49055  *   index character index in string
  49056  * \param
  49057  *   toInsert UTF8 encoded string
  49058  * \return
  49059  *   new string (you must free the pointer)
  49060  *   NULL when string is NULL or invalid index
  49061  */
  49062 char *insertNFreeUTF8(const char *string, int64_t index, char *toInsert) {
  49063   char *r = NULL;
  49064   int64_t len;
  49065 
  49066   // sanity checks
  49067   if (!string) {
  49068     if (index) {
  49069       return(NULL);
  49070     }
  49071     if (!toInsert) {
  49072       return(NULL);
  49073     }
  49074     r = strdup(toInsert);
  49075     free(toInsert);
  49076     return(r);
  49077   }
  49078 
  49079   len = (int64_t)lenUTF8(string);
  49080 
  49081   if (!len && index == -1) {
  49082     // empty string, index -1 is equal to 0
  49083     index = 0;
  49084   }
  49085   bool neg = false;
  49086   if (index < 0) {
  49087     neg = true;
  49088   }
  49089 
  49090   if (index > len) {
  49091     return(NULL);
  49092   }
  49093   if (neg) {
  49094     index++;
  49095   }
  49096   if (index < -len) {
  49097     return(NULL);
  49098   }
  49099   if (neg) {
  49100     index = len + index;
  49101   }
  49102 
  49103 
  49104   if (!toInsert || isEmptyS(toInsert)) {
  49105     free(toInsert);
  49106     return(strdup(string));
  49107   }
  49108 
  49109   if (index == 0) {
  49110     // insert at beginning
  49111     r = catS(toInsert, string);
  49112     free(toInsert);
  49113     return(r);
  49114   }
  49115 
  49116   int64_t offset = idx2PtrUTF8(string, index) - string;
  49117   char *s1       = sliceS(string, 0, offset);
  49118   char *s2       = sliceS(string, offset, 0);
  49119   r              = catS(s1, toInsert, s2);
  49120   freeManyS(s1,s2, toInsert);
  49121 
  49122   return(r);
  49123 }
  49124 
  49125 
  49126 /**
  49127  * insert string in UTF8 encoded string at index
  49128  *
  49129  * return string with toInsert at index
  49130  * negative indexes are allowed
  49131  * index -1 is the end of the array and is equivalent to index len
  49132  *
  49133  * \param
  49134  *   string UTF8 encoded string (this parameter is reallocated)
  49135  * \param
  49136  *   index character index in string
  49137  * \param
  49138  *   toInsert UTF8 encoded string
  49139  * \return
  49140  *   modified string (you must free the pointer)
  49141  *   NULL unchanged string when string is NULL or invalid index
  49142  */
  49143 char *iInsertUTF8(char **string, int64_t index, const char *toInsert) {
  49144   char *r = NULL;
  49145   int64_t len;
  49146 
  49147   // sanity checks
  49148   if (!string) {
  49149     return(NULL);
  49150   }
  49151   if (!*string) {
  49152     if (index) {
  49153       return(NULL);
  49154     }
  49155     r       = strdup(toInsert);
  49156     *string = r;
  49157     return(r);
  49158   }
  49159 
  49160   len = (int64_t)lenUTF8(*string);
  49161 
  49162   if (!len && index == -1) {
  49163     // empty string, index -1 is equal to 0
  49164     index = 0;
  49165   }
  49166   bool neg = false;
  49167   if (index < 0) {
  49168     neg = true;
  49169   }
  49170 
  49171   if (index > len) {
  49172     return(NULL);
  49173   }
  49174   if (neg) {
  49175     index++;
  49176   }
  49177   if (index < -len) {
  49178     return(NULL);
  49179   }
  49180   if (neg) {
  49181     index = len + index;
  49182   }
  49183 
  49184 
  49185   if (!toInsert || isEmptyS(toInsert)) {
  49186     return(*string);
  49187   }
  49188 
  49189   if (index == 0) {
  49190     // insert at beginning
  49191     r = catS(toInsert, *string);
  49192   }
  49193   else {
  49194     int64_t offset = idx2PtrUTF8(*string, index) - *string;
  49195     char *s1       = sliceS(*string, 0, offset);
  49196     char *s2       = sliceS(*string, offset, 0);
  49197     r              = catS(s1, toInsert, s2);
  49198     freeManyS(s1,s2);
  49199   }
  49200 
  49201   free(*string);
  49202   *string = r;
  49203   return(r);
  49204 }
  49205 
  49206 
  49207 /**
  49208  * insert string in UTF8 encoded string at index and free toInsert
  49209  *
  49210  * return string with toInsert at index
  49211  * negative indexes are allowed
  49212  * index -1 is the end of the array and is equivalent to index len
  49213  *
  49214  * \param
  49215  *   string UTF8 encoded string (this parameter is reallocated)
  49216  * \param
  49217  *   index character index in string
  49218  * \param
  49219  *   toInsert UTF8 encoded string
  49220  * \return
  49221  *   modified string (you must free the pointer)
  49222  *   NULL unchanged string when string is NULL or invalid index
  49223  */
  49224 char *iInsertNFreeUTF8(char **string, int64_t index, char *toInsert) {
  49225   char *r = NULL;
  49226   int64_t len;
  49227 
  49228   // sanity checks
  49229   if (!string) {
  49230     return(NULL);
  49231   }
  49232   if (!*string) {
  49233     if (index) {
  49234       return(NULL);
  49235     }
  49236     r       = strdup(toInsert);
  49237     free(toInsert);
  49238     *string = r;
  49239     return(r);
  49240   }
  49241 
  49242   len = (int64_t)lenUTF8(*string);
  49243 
  49244   if (!len && index == -1) {
  49245     // empty string, index -1 is equal to 0
  49246     index = 0;
  49247   }
  49248   bool neg = false;
  49249   if (index < 0) {
  49250     neg = true;
  49251   }
  49252 
  49253   if (index > len) {
  49254     return(NULL);
  49255   }
  49256   if (neg) {
  49257     index++;
  49258   }
  49259   if (index < -len) {
  49260     return(NULL);
  49261   }
  49262   if (neg) {
  49263     index = len + index;
  49264   }
  49265 
  49266 
  49267   if (!toInsert || isEmptyS(toInsert)) {
  49268     free(toInsert);
  49269     return(*string);
  49270   }
  49271 
  49272   if (index == 0) {
  49273     // insert at beginning
  49274     r = catS(toInsert, *string);
  49275   }
  49276   else {
  49277     int64_t offset = idx2PtrUTF8(*string, index) - *string;
  49278     char *s1       = sliceS(*string, 0, offset);
  49279     char *s2       = sliceS(*string, offset, 0);
  49280     r              = catS(s1, toInsert, s2);
  49281     freeManyS(s1,s2);
  49282   }
  49283   free(toInsert);
  49284 
  49285   free(*string);
  49286   *string = r;
  49287   return(r);
  49288 }
  49289 
  49290 
  49291 /**
  49292  * buffer insert string in UTF8 encoded string at index
  49293  *
  49294  * return string with toInsert at index
  49295  * negative indexes are allowed
  49296  * index -1 is the end of the array and is equivalent to index len
  49297  *
  49298  * \param
  49299  *   string UTF8 encoded string
  49300  * \param
  49301  *   index character index in string
  49302  * \param
  49303  *   toInsert UTF8 encoded string
  49304  * \return
  49305  *   modified string
  49306  *   NULL unchanged string when string is NULL or invalid index
  49307  */
  49308 char *bInsertUTF8(char *string, int64_t index, const char *toInsert) {
  49309   int64_t len;
  49310 
  49311   // sanity checks
  49312   if (!string) {
  49313     return(NULL);
  49314   }
  49315 
  49316   len = (int64_t)lenUTF8(string);
  49317 
  49318   if (!len && index == -1) {
  49319     // empty string, index -1 is equal to 0
  49320     index = 0;
  49321   }
  49322   bool neg = false;
  49323   if (index < 0) {
  49324     neg = true;
  49325   }
  49326 
  49327   if (index > len) {
  49328     return(NULL);
  49329   }
  49330   if (neg) {
  49331     index++;
  49332   }
  49333   if (index < -len) {
  49334     return(NULL);
  49335   }
  49336   if (neg) {
  49337     index = len + index;
  49338   }
  49339 
  49340 
  49341   if (!toInsert || isEmptyS(toInsert)) {
  49342     return(string);
  49343   }
  49344 
  49345   if (index == 0) {
  49346     // insert at beginning
  49347     char *s = alloca((size_t)(len+1));
  49348     strcpy(s, string);
  49349     pErrorNULL(bCatS(string, toInsert, s));
  49350   }
  49351   else {
  49352     int64_t offset = idx2PtrUTF8(string, index) - string;
  49353     char *s1       = alloca((size_t)(offset+1));
  49354     pErrorNULL(strLCpy(s1, (size_t)(offset+1), string));
  49355     char *s2       = alloca((size_t)(len-offset+1));
  49356     strcpy(s2, string+offset);
  49357     pErrorNULL(bCatS(string, s1, toInsert, s2));
  49358   }
  49359   return(string);
  49360 }
  49361 
  49362 
  49363 /**
  49364  * buffer size insert string in UTF8 encoded string at index
  49365  *
  49366  * return string with toInsert at index
  49367  * negative indexes are allowed
  49368  * index -1 is the end of the array and is equivalent to index len
  49369  *
  49370  * \param
  49371  *   string UTF8 encoded string
  49372  * \param
  49373  *   index character index in string
  49374  * \param
  49375  *   toInsert UTF8 encoded string
  49376  * \return
  49377  *   modified string
  49378  *   NULL unchanged string when string is NULL or invalid index
  49379  */
  49380 char *bLInsertUTF8(char *string, size_t stringSize, int64_t index, const char *toInsert) {
  49381   int64_t len;
  49382 
  49383   // sanity checks
  49384   if (!string) {
  49385     return(NULL);
  49386   }
  49387 
  49388   if (!stringSize) {
  49389     // string size is 0 - no change
  49390     return(string);
  49391   }
  49392 
  49393   len = (int64_t)bLLenUTF8(string, stringSize);
  49394 
  49395   if (!len && index == -1) {
  49396     // empty string, index -1 is equal to 0
  49397     index = 0;
  49398   }
  49399   bool neg = false;
  49400   if (index < 0) {
  49401     neg = true;
  49402   }
  49403 
  49404   if (index > len) {
  49405     return(NULL);
  49406   }
  49407   if (neg) {
  49408     index++;
  49409   }
  49410   if (index < -len) {
  49411     return(NULL);
  49412   }
  49413   if (neg) {
  49414     index = len + index;
  49415   }
  49416 
  49417 
  49418   if (!toInsert || isEmptyS(toInsert)) {
  49419     return(string);
  49420   }
  49421 
  49422   if (index == 0) {
  49423     // insert at beginning
  49424     char *s = alloca((size_t)(len+1));;
  49425     strcpy(s, string);
  49426     pErrorNULL(bLCatS(string, stringSize, toInsert, s));
  49427   }
  49428   else {
  49429     int64_t offset = bLIdx2PtrUTF8(string, stringSize, index) - string;
  49430     char *s1       = alloca((size_t)(offset+1));
  49431     pErrorNULL(strLCpy(s1, (size_t)(offset+1), string));
  49432     char *s2       = alloca((size_t)(len-offset+1));
  49433     strcpy(s2, string+offset);
  49434     pErrorNULL(bLCatS(string, stringSize, s1, toInsert, s2));
  49435   }
  49436   return(string);
  49437 }
  49438 
  49439 
  49440 /**
  49441  * delete UTF8 encoded string
  49442  *
  49443  * return new string without the string between start and end
  49444  * negative indexes are allowed
  49445  *
  49446  * \param
  49447  *   string to delete
  49448  * \param
  49449  *   start: start character index, must be in the string
  49450  * \param
  49451  *   end: end character index, must be in the string after start
  49452  * \return
  49453  *   new sliced string (you must free the pointer)
  49454  *   new identical string when start=end or when start and end are not set correctly
  49455  *   NULL when input string is NULL or when malloc failed or when end is under start
  49456  */
  49457 char *delUTF8(const char *string, int64_t start, int64_t end) {
  49458   char *s = NULL;
  49459   int64_t len;
  49460 
  49461   // sanity checks
  49462   if (!string) {
  49463     return(NULL);
  49464   }
  49465 
  49466   len = (int64_t)lenUTF8(string);
  49467 
  49468   if (start >= len) {
  49469     start = len;
  49470   }
  49471   if (end > len) {
  49472     end = len;
  49473   }
  49474   if (start <= -len) {
  49475     start = -len;
  49476   }
  49477   if (end <= -len) {
  49478     end = -len;
  49479   }
  49480   if (start < 0) {
  49481     start = len + start;
  49482   }
  49483   if (end <= 0) {
  49484     end = len + end;
  49485   }
  49486   if (end < start) {
  49487     return(NULL);
  49488   }
  49489 
  49490   if (start == end) {
  49491     return(strdup(string));
  49492   }
  49493 
  49494   // start < end < len
  49495   // copy range to a new string
  49496   len                = (int64_t)strlen(string);
  49497   const char *startp = idx2PtrUTF8(string, start);
  49498   const char *endp   = idx2PtrUTF8(string, end);
  49499   size_t starto      = (size_t)(startp-string);
  49500   int64_t n;
  49501   n = endp - startp;
  49502   s = MALLOC((size_t)(len-n+1));
  49503   if (!s) {
  49504     return(NULL);//LCOV_EXCL_LINE
  49505   }
  49506   strncpy(s, string, starto);
  49507   strncpy(s+starto, string+starto+n, (size_t)(len-n)-starto);
  49508   s[len-n] = 0;
  49509 
  49510   return(s);
  49511 }
  49512 
  49513 
  49514 /**
  49515  * delete UTF8 encoded string
  49516  *
  49517  * return string without the string between start and end
  49518  * negative indexes are allowed
  49519  *
  49520  * \param
  49521  *   string to delete (this parameter is reallocated)
  49522  * \param
  49523  *   start: start character index, must be in the string
  49524  * \param
  49525  *   end: end character index, must be in the string after start
  49526  * \return
  49527  *   sliced string (you must free the pointer)
  49528  *   unchanged string when start=end
  49529  *   NULL when start and end are not set correctly
  49530  *        or when input string is NULL or when malloc failed or when end is under start
  49531  */
  49532 char *iDelUTF8(char **string, int64_t start, int64_t end) {
  49533   char *s = NULL;
  49534   int64_t len;
  49535 
  49536   // sanity checks
  49537   if (!string || !*string) {
  49538     return(NULL);
  49539   }
  49540 
  49541   len = (int64_t)lenUTF8(*string);
  49542 
  49543   if (start >= len) {
  49544     start = len;
  49545   }
  49546   if (end > len) {
  49547     end = len;
  49548   }
  49549   if (start <= -len) {
  49550     start = -len;
  49551   }
  49552   if (end <= -len) {
  49553     end = -len;
  49554   }
  49555   if (start < 0) {
  49556     start = len + start;
  49557   }
  49558   if (end <= 0) {
  49559     end = len + end;
  49560   }
  49561   if (end < start) {
  49562     return(NULL);
  49563   }
  49564 
  49565   if (start == end) {
  49566     return(*string);
  49567   }
  49568 
  49569   // start < end < len
  49570   // copy range to a new string
  49571   len                = (int64_t)strlen(*string);
  49572   const char *startp = idx2PtrUTF8(*string, start);
  49573   const char *endp   = idx2PtrUTF8(*string, end);
  49574   size_t starto      = (size_t)(startp-*string);
  49575   int64_t n;
  49576   n = endp - startp;
  49577   s = MALLOC((size_t)(len-n+1));
  49578   if (!s) {
  49579     return(NULL);
  49580   }
  49581   strncpy(s, *string, starto);
  49582   strncpy(s+starto, (*string)+starto+n, (size_t)(len-n)-starto);
  49583   s[len-n] = 0;
  49584 
  49585   free(*string);
  49586   *string = s;
  49587   return(s);
  49588 }
  49589 
  49590 
  49591 /**
  49592  * buffer delete UTF8 encoded string
  49593  *
  49594  * return string without the string between start and end
  49595  * negative indexes are allowed
  49596  *
  49597  * \param
  49598  *   string to delete
  49599  * \param
  49600  *   start: start character index, must be in the string
  49601  * \param
  49602  *   end: end character index, must be in the string after start
  49603  * \return
  49604  *   sliced string
  49605  *   unchanged string when start=end
  49606  *   NULL when start and end are not set correctly
  49607  *        or when input string is NULL or when malloc failed or when end is under start
  49608  */
  49609 char *bDelUTF8(char *string, int64_t start, int64_t end) {
  49610   int64_t len;
  49611 
  49612   // sanity checks
  49613   if (!string) {
  49614     return(NULL);
  49615   }
  49616 
  49617   len = (int64_t)lenUTF8(string);
  49618 
  49619   if (start >= len) {
  49620     start = len;
  49621   }
  49622   if (end > len) {
  49623     end = len;
  49624   }
  49625   if (start <= -len) {
  49626     start = -len;
  49627   }
  49628   if (end <= -len) {
  49629     end = -len;
  49630   }
  49631   if (start < 0) {
  49632     start = len + start;
  49633   }
  49634   if (end <= 0) {
  49635     end = len + end;
  49636   }
  49637   if (end < start) {
  49638     return(NULL);
  49639   }
  49640 
  49641   if (start == end) {
  49642     return(string);
  49643   }
  49644 
  49645   // start < end < len
  49646   // copy range to a new string
  49647   len                = (int64_t)strlen(string);
  49648   const char *startp = idx2PtrUTF8(string, start);
  49649   const char *endp   = idx2PtrUTF8(string, end);
  49650   size_t starto      = (size_t)(startp-string);
  49651   int64_t n;
  49652   n = endp - startp;
  49653   memmove(string+starto, string+starto+n, (size_t)(len-n)-starto);
  49654   string[len-n] = 0;
  49655 
  49656   return(string);
  49657 }
  49658 
  49659 
  49660 /**
  49661  * buffer size delete UTF8 encoded string
  49662  *
  49663  * return string without the string between start and end
  49664  * negative indexes are allowed
  49665  *
  49666  * \param
  49667  *   string to delete
  49668  * \param
  49669  *   stringSize string buffer size
  49670  * \param
  49671  *   start: start character index, must be in the string
  49672  * \param
  49673  *   end: end character index, must be in the string after start
  49674  * \return
  49675  *   sliced string
  49676  *   unchanged string when start=end
  49677  *   NULL when start and end are not set correctly
  49678  *        or when input string is NULL or when malloc failed or when end is under start
  49679  */
  49680 char *bLDelUTF8(char *string, size_t stringSize, int64_t start, int64_t end) {
  49681   int64_t len;
  49682 
  49683   // sanity checks
  49684   if (!string || !stringSize) {
  49685     return(NULL);
  49686   }
  49687 
  49688   len = (int64_t)strlen(string);
  49689   if ((size_t)len+1 > stringSize) {
  49690     len = (int64_t)(stringSize - 1);
  49691   }
  49692 
  49693   // compute string length without NUL
  49694   if (start >= len) {
  49695     start = len;
  49696   }
  49697   if (end > len) {
  49698     end = len;
  49699   }
  49700   if (start <= -len) {
  49701     start = -len;
  49702   }
  49703   if (end <= -len) {
  49704     end = -len;
  49705   }
  49706   if (start < 0) {
  49707     start = len + start;
  49708   }
  49709   if (end <= 0) {
  49710     end = len + end;
  49711   }
  49712   if (end < start) {
  49713     return(NULL);
  49714   }
  49715 
  49716   const char *startp  = bLIdx2PtrUTF8(string, stringSize, start);
  49717   const char *endp    = bLIdx2PtrUTF8(string, stringSize, end);
  49718 
  49719   size_t starto = (size_t)(startp-string);
  49720 
  49721   if (starto >= stringSize) {
  49722     starto = stringSize;
  49723   }
  49724   if (start == 0) {
  49725     starto = 0;
  49726   }
  49727   if (end < start) {
  49728     return(NULL);
  49729   }
  49730 
  49731   if (start == end) {
  49732     return(string);
  49733   }
  49734 
  49735   // start < end < len
  49736   // copy range to a new string
  49737   int64_t n;
  49738   n = endp - startp;
  49739   memmove(string+starto, string+starto+n, (size_t)(len-n)-starto);
  49740   string[len-n] = 0;
  49741 
  49742   return(string);
  49743 }
  49744 
  49745 
  49746 /**
  49747  * indexOf UTF8 encoded String
  49748  * relative to start
  49749  *
  49750  * \param
  49751  *   string
  49752  * \param
  49753  *   needle: string to find
  49754  * \return
  49755  *   character index of first occurence of needle in string
  49756  *   -1 when needle is not found
  49757  *   -1 when string or needle are NULL
  49758  */
  49759 ssize_t indexOfUTF8(const char *string, const char *needle) {
  49760 
  49761   char *r = findS(string, needle);
  49762   if (!r) {
  49763     return(-1);
  49764   }
  49765   return(ptr2IdxUTF8(string, r));
  49766 }
  49767 
  49768 
  49769 /**
  49770  * ignore case indexOf UTF8 encoded String
  49771  * relative to start
  49772  *
  49773  * \param
  49774  *   string
  49775  * \param
  49776  *   needle: string to find
  49777  * \return
  49778  *   character index of first occurence of needle in string
  49779  *   -1 when needle is not found
  49780  *   -1 when string or needle are NULL
  49781  */
  49782 ssize_t icIndexOfUTF8(const char *string UNUSED, const char *needle UNUSED) {
  49783 
  49784   //TODO casefoldUTF8 can change the number of characters
  49785   return(-1);
  49786 }
  49787 
  49788 
  49789 /**
  49790  * ignore case has UTF8 encoded String
  49791  *
  49792  * \param
  49793  *   string
  49794  * \param
  49795  *   needle: string to find
  49796  * \return
  49797  *   true when needle is in string
  49798  *   false when needle is not found
  49799  *   false when string or needle are NULL
  49800  */
  49801 bool icHasUTF8(const char *string, const char *needle) {
  49802 
  49803   // sanity checks
  49804   if (!string || !needle) {
  49805     return(false);
  49806   }
  49807 
  49808   char *s = casefoldUTF8(string);
  49809   char *n = casefoldUTF8(needle);
  49810 
  49811   bool r  = hasS(s, n);
  49812 
  49813   free(s);
  49814   free(n);
  49815   return(r);
  49816 }
  49817 
  49818 
  49819 /**
  49820  * ignore case token in UTF8 encoded String
  49821  *
  49822  * parse string into a sequence of tokens delimited by the ENTIRE DELIM string
  49823  * work like strtok_r from c stdlib
  49824  * (for strtok_r, when delim has multiple characters, each character is a delimiter)
  49825  *
  49826  * on first call s is the string to parse, optionally initialize *saveptr to NULL
  49827  * on next calls, s should be NULL
  49828  *
  49829  * \param
  49830  *   s string to parse, the s string is modified
  49831  * \param
  49832  *   delim string
  49833  * \return
  49834  *   token
  49835  *   *saveptr is set to NULL when the last token is found
  49836  */
  49837 char *icTokUTF8(const char *s UNUSED, const char *delim UNUSED, char **saveptr UNUSED) {
  49838 
  49839   //TODO casefoldUTF8 changes the string
  49840   return(NULL);
  49841 }
  49842 
  49843 
  49844 /**
  49845  * ignore case split UTF8 encoded string with delim string
  49846  * return list
  49847  *
  49848  * \param
  49849  *   string to split
  49850  * \param
  49851  *   delim delimiter
  49852  * \return
  49853  *   list of tokens
  49854  *   NULL when list or delim are NULL
  49855  */
  49856 char **icSplitUTF8(const char *string UNUSED, const char* delim UNUSED) {
  49857 
  49858   //TODO casefoldUTF8 changes the string
  49859   return(NULL);
  49860 }
  49861 
  49862 /**
  49863  * ignore case extract UTF8 encoded string between delim1 and delim2 strings
  49864  * return list
  49865  *
  49866  * \param
  49867  *   string to split
  49868  * \param
  49869  *   delim1 first delimiter
  49870  * \param
  49871  *   delim2 second delimiter, has to different from delim1
  49872  * \return
  49873  *   list of tokens
  49874  *   NULL when list or delim are NULL
  49875  */
  49876 char **icExtractUTF8(const char *string UNUSED, const char* delim1 UNUSED, const char* delim2 UNUSED) {
  49877 
  49878   //TODO casefoldUTF8 changes the string
  49879   return(NULL);
  49880 }
  49881 
  49882 char **icExtractCharSUTF8(const char *string UNUSED, char delim1 UNUSED, const char* delim2 UNUSED) {
  49883 
  49884   //TODO casefoldUTF8 changes the string
  49885   return(NULL);
  49886 }
  49887 
  49888 char **icExtractSCharUTF8(const char *string UNUSED, const char* delim1 UNUSED, char delim2 UNUSED) {
  49889 
  49890   //TODO casefoldUTF8 changes the string
  49891   return(NULL);
  49892 }
  49893 
  49894 
  49895 /**
  49896  * ignore case list Sort UTF-8 encoded String Compare function
  49897  *
  49898  * in:
  49899  *   a
  49900  *   b
  49901  * out:
  49902  *   test result
  49903  */
  49904 internal int icListSortUTF8Cmp(const void * a, const void * b) {
  49905 
  49906   // sanity checks
  49907   if (!a && !b) {
  49908     return(0);
  49909   }
  49910   if (!a && b) {
  49911     return(-1);
  49912   }
  49913   if (a && !b) {
  49914     return(1);
  49915   }
  49916   char *A = casefoldUTF8(*(char *const*)a);
  49917   char *B = casefoldUTF8(*(char *const*)b);
  49918   int r   = strcmp(A,B);
  49919   free(A);
  49920   free(B);
  49921   return(r);
  49922 }
  49923 
  49924 
  49925 /**
  49926  * ignore case list Sort UTF8 encoded String
  49927  * duplicate list and sort
  49928  *
  49929  * \param
  49930  *   list
  49931  * \return
  49932  *   new sorted list (you must free the pointer with listFreeS)
  49933  *   empty list when list is empty
  49934  *   NULL when list is NULL
  49935  */
  49936 char **icListSortUTF8(char **list) {
  49937   size_t len;
  49938   char **l = NULL;
  49939 
  49940   // sanity checks
  49941   if (!list) {
  49942     return(NULL);
  49943   }
  49944   len = listLengthS(list);
  49945   // duplicate
  49946   l = listDupS(list);
  49947   if (!len) {
  49948     return(l);
  49949   }
  49950   // sort
  49951   qsort(l, len, sizeof(char *), icListSortUTF8Cmp);
  49952   return(l);
  49953 }
  49954 
  49955 
  49956 /**
  49957  * ignore case list Sort UTF8 encoded String
  49958  *
  49959  * \param
  49960  *   list
  49961  * \return
  49962  *   sorted list
  49963  *   empty list when list is empty
  49964  *   unchanged list when list is NULL
  49965  *   NULL error
  49966  */
  49967 char **iicListSortUTF8(char ***list) {
  49968   size_t len;
  49969 
  49970   // sanity checks
  49971   if (!list || !*list) {
  49972     return(NULL);
  49973   }
  49974   len = listLengthS(*list);
  49975   if (!len) {
  49976     return(NULL);
  49977   }
  49978   // sort
  49979   qsort(*list, len, sizeof(char *), icListSortUTF8Cmp);
  49980   return(*list);
  49981 }
  49982 
  49983 
  49984 /**
  49985  * ignore case list Equal UTF8 encoded String
  49986  * compare each element of list1 and list2
  49987  *
  49988  * \param
  49989  *   2 lists
  49990  * \return
  49991  *   true the lists have identical elements
  49992  *   false they differ
  49993  */
  49994 bool icListEqUTF8(char **list1, char **list2) {
  49995 
  49996   // sanity checks
  49997   if (!list1 || !list2) {
  49998     return(false);
  49999   }
  50000   if (listLengthS(list1) != listLengthS(list2)) {
  50001     return(false);
  50002   }
  50003 
  50004   // compare elements
  50005   enumerateCharP(list1, e, i) {
  50006     if (!icEqUTF8(*e, list2[i])) {
  50007       return(false);
  50008   }
  50009     }
  50010 
  50011   return(true);
  50012 }
  50013 
  50014 
  50015 /**
  50016  * ignore case and return true when list has UTF8 encoded string
  50017  *
  50018  * \param
  50019  *   list
  50020  * \param
  50021  *   string
  50022  * \return
  50023  *   true when list has string
  50024  *   false when the string is not found
  50025  *   false when list or string are NULL
  50026  */
  50027 bool icListHasUTF8(char **list, const char *string) {
  50028 
  50029   if (!list || !string) {
  50030     return(false);
  50031   }
  50032   if (icListIndexOfUTF8(list, string) == -1) {
  50033     return(false);
  50034   }
  50035   return(true);
  50036 }
  50037 
  50038 
  50039 /**
  50040  * ignore case and return index of UTF8 encoded string in list
  50041  *
  50042  * \param
  50043  *   list
  50044  * \param
  50045  *   string
  50046  * \return
  50047  *   index
  50048  *   -1 when the string is not found
  50049  *   -1 when list or string are NULL
  50050  */
  50051 ssize_t icListIndexOfUTF8(char **list, const char *string) {
  50052   bool found = false;;
  50053 
  50054   // sanity checks
  50055   if (!list || !string) {
  50056     return(-1);
  50057   }
  50058   // search string in elements
  50059   enumerateCharP(list, e, i) {
  50060     if (icEqUTF8(*e, string)) {
  50061       found = true;
  50062       break;
  50063   }
  50064     }
  50065   if (found) {
  50066      return((ssize_t)i);
  50067   }
  50068   else {
  50069      return(-1);
  50070 }
  50071   }
  50072 
  50073 
  50074 /**
  50075  * ignore case list binary search UTF8 encoded string
  50076  *
  50077  * efficiently finds the index of string in list
  50078  * the list has be sorted with for example listSortS
  50079  *
  50080  * \param
  50081  *   list
  50082  * \param
  50083  *   string to search
  50084  * \return
  50085  *   index of string
  50086  *   -1 string not found or NULL input pointers
  50087     */
  50088 ssize_t icListBinarySearchUTF8(char **list, const char *string) {
  50089   ssize_t first = 0, middle, last;;
  50090 
  50091   if (!list || !string) {
  50092     return(-1);
  50093   }
  50094 
  50095   char *s = casefoldUTF8(string);
  50096 
  50097   last    = (ssize_t)(listLengthS(list) - 1);
  50098   while (first <= last) {
  50099     middle  = (first+last)/2;
  50100     char *m = casefoldUTF8(list[middle]);
  50101     if (strcmp(m, s) < 0) {
  50102       first = middle + 1;
  50103     }
  50104     else if (strcmp(m, s) == 0) {
  50105       free(m);
  50106       free(s);
  50107       return(middle);
  50108     }
  50109     else {
  50110       last = middle -1;
  50111     }
  50112     free(m);
  50113   }
  50114   free(s);
  50115   return(-1);
  50116 }
  50117 
  50118 
  50119 /**
  50120  * ignore case and uniquify UTF8 encoded elements of list
  50121  * duplicate list
  50122  * each elements are unique in the new list
  50123  *
  50124  * \param
  50125  *   list
  50126  * \return
  50127  *   new list with unique elements (you must free the pointer with listFreeS)
  50128  *   empty list when list is empty
  50129  *   NULL when list is NULL
  50130  */
  50131 char **icListUniqUTF8(char **list) {
  50132   char **r = NULL;
  50133 
  50134   // sanity checks
  50135   if (!list) {
  50136     return(NULL);
  50137   }
  50138 
  50139   size_t len = listLengthS(list);
  50140 
  50141   if (!len) {
  50142     listEmptyS(r);
  50143     return(r);
  50144   }
  50145   pErrorNULL(listPushS(&r, list[0]));
  50146   // one element list
  50147   if (len == 1) {
  50148     return(r);
  50149   }
  50150   // push element to new list if it is not already in new list
  50151   forEachCharP(list, e) {
  50152     if (icListIndexOfUTF8(r, *e) == -1) {
  50153       pErrorNULL(listPushS(&r, *e));
  50154   }
  50155     }
  50156   return(r);
  50157 }
  50158 
  50159 
  50160 /**
  50161  * ignore case and uniquify UTF8 encoded elements of list
  50162  * each elements are unique in the list
  50163  *
  50164  * \param
  50165  *   list
  50166  * \return
  50167  *   list with unique elements
  50168  *   empty list when list is empty
  50169  *   unchanged list when list is NULL
  50170  *   NULL error
  50171  */
  50172 char **iicListUniqUTF8(char ***list) {
  50173   char **r = NULL;
  50174 
  50175   // sanity checks
  50176   if (!list || !*list) {
  50177     return(NULL);
  50178   }
  50179 
  50180   size_t len = listLengthS(*list);
  50181 
  50182   if (len < 1) {
  50183     return(*list);
  50184   }
  50185   else if (len < 2) {
  50186     // one element list
  50187     pErrorNULL(iListPushS(&r, (*list)[0]));
  50188   }
  50189   else {
  50190     // push element to new list if it is not already in new list
  50191     forEachCharP(*list, e) {
  50192       if (icListIndexOfUTF8(r, *e) == -1) {
  50193         pErrorNULL(iListPushS(&r, *e));
  50194       }
  50195       else {
  50196         free(*e);
  50197   }
  50198     }
  50199       }
  50200 
  50201   free(*list);
  50202   *list = r;
  50203   return(r);
  50204 }
  50205 
  50206 
  50207 // TODO reverseUTF8
  50208 
  50209 //
  50210 // End UTF-8 string functions
  50211 //
  50212 
  50213 
  50214 
  50215 /**
  50216  * empty String Function
  50217  *
  50218  * \return
  50219  *   new empty string (you must free the pointer)
  50220  */
  50221 char *emptySF(void) {
  50222 
  50223   return(strdup(""));
  50224 }
  50225 
  50226 /**
  50227  * empty String Function
  50228  *
  50229  * when *string is NULL, it is freed
  50230  *
  50231  * \return
  50232  *   empty string (you must free the pointer)
  50233  *   NULL nothing when string is NULL
  50234  */
  50235 char *iEmptySF(char **string) {
  50236 
  50237   // sanity checks
  50238   if (!string) {
  50239     return(NULL);
  50240   }
  50241 
  50242   if (*string) {
  50243     free(*string);
  50244   }
  50245   *string = strdup("");
  50246   return(*string);
  50247 }
  50248 
  50249 /**
  50250  * is Empty String
  50251  *
  50252  * \param
  50253  *   string
  50254  * \return
  50255  *   false when there are characters in the string
  50256  *   true when string is empty
  50257  *   true when string is NULL
  50258  */
  50259 bool isEmptyS(const char *string) {
  50260 
  50261   // sanity checks
  50262   if (!string || !*string) {
  50263     return(true);
  50264   }
  50265   return(false);
  50266 }
  50267 
  50268 /**
  50269  * is Blank String
  50270  *
  50271  * \param
  50272  *   string
  50273  * \return
  50274  *   false when there are non white space characters in the string
  50275  *   true when there are only white spaces in the string
  50276  *   true when string is empty
  50277  *   true when string is NULL
  50278  */
  50279 bool isBlankS(const char *string) {
  50280 
  50281   // sanity checks
  50282   if (!string || !*string) {
  50283     return(true);
  50284   }
  50285 
  50286   char *s = trimS(string);
  50287   if (!s || !*s) {
  50288     free(s);
  50289     return(true);
  50290   }
  50291   free(s);
  50292   return(false);
  50293 }
  50294 
  50295 
  50296 /**
  50297  * int to positive index
  50298  * index can be negative
  50299  *
  50300  * \param
  50301  *   index: index in list, must be inside the list
  50302  * \param
  50303  *   length: list length
  50304  * \return
  50305  *   positive index
  50306  *   -1 when length is 0 or index is not set correctly
  50307  */
  50308 ssize_t intIndex(int64_t index, int64_t length) {
  50309   ssize_t  r;
  50310 
  50311   // sanity checks
  50312   if (length < 1) {
  50313     return(-1);
  50314   }
  50315 
  50316   if (index >= length) {
  50317     return(-1);
  50318   }
  50319   if (index < -length) {
  50320     return(-1);
  50321   }
  50322   if (index < 0) {
  50323     r = length + index;
  50324   }
  50325   else {
  50326     r = index;
  50327   }
  50328   return(r);
  50329 }
  50330 
  50331 
  50332 /**
  50333  * list Empty String Function
  50334  *
  50335  * \return
  50336  *   new empty list (you must free the pointer with listFreeS)
  50337  */
  50338 char **listEmptySF(void) {
  50339   char **list = NULL;
  50340 
  50341   list = MALLOC(1 * sizeof(char *));
  50342   if (list) {
  50343     list[0] = NULL;
  50344   }
  50345   return(list);
  50346 }
  50347 
  50348 /**
  50349  * list Empty String Function
  50350  *
  50351  * \return
  50352  *   empty list (you must free the pointer with listFreeS)
  50353  *   NULL error
  50354  */
  50355 char **iListEmptySF(char ***list) {
  50356 
  50357   // sanity checks
  50358   if (!list) {
  50359     return(NULL);
  50360   }
  50361 
  50362   if (*list) {
  50363     listFreeS(*list);
  50364   }
  50365 
  50366   *list = MALLOC(1 * sizeof(char *));
  50367   if (*list) {
  50368     (*list)[0] = NULL;
  50369   }
  50370 
  50371   return(*list);
  50372 }
  50373 
  50374 /**
  50375  * list Is Empty String
  50376  *
  50377  * \param
  50378  *   list
  50379  * \return
  50380  *   false when there are elements in the list
  50381  *   true when list is empty
  50382  *   true when list is NULL
  50383  */
  50384 bool listIsEmptyS(char **list) {
  50385 
  50386   // sanity checks
  50387   if (!list || !*list) {
  50388     return(true);
  50389   }
  50390   return(false);
  50391 }
  50392 
  50393 /**
  50394  * list Is Empty String
  50395  *
  50396  * \param
  50397  *   list
  50398  * \return
  50399  *   false when there are non blank elements in the list
  50400  *   true when all elements are blank
  50401  *   true when list is NULL
  50402  */
  50403 bool listIsBlankS(char **list) {
  50404 
  50405   // sanity checks
  50406   if (!list || !*list) {
  50407     return(true);
  50408   }
  50409   forEachCharP(list, e) {
  50410     if (!isBlankS(*e)) {
  50411       return(false);
  50412   }
  50413     }
  50414   return(true);
  50415 }
  50416 
  50417 /**
  50418  * list Create String Function
  50419  * create a list from the list of parameters
  50420  * used from the listCreateS(...) macro
  50421  *
  50422  * \param
  50423  *   list of strings seperated with commas
  50424  * \return
  50425  *   list
  50426  *   NULL when first element if NULL
  50427  */
  50428 char **listCreateSF(const char *paramType, ...) {
  50429   va_list pl;
  50430   char **l = NULL;
  50431 
  50432   //Not needed if !paramType return NULL
  50433 
  50434   // push arguments to a list
  50435   va_start(pl, paramType);
  50436   paramType = va_arg(pl, char *);
  50437   while (paramType) {
  50438     pErrorNULL(listPushS(&l, paramType));
  50439     paramType = va_arg(pl, char *);
  50440   }
  50441   va_end(pl);
  50442   return(l);
  50443 }
  50444 
  50445 /**
  50446  * list From Array String
  50447  *
  50448  * copy array of 'size' strings to a new list
  50449  * NULL strings are not copied to the list
  50450  *
  50451  * \param
  50452  *   array of strings
  50453  * \param
  50454  *   size - number of strings in the array
  50455  * \return
  50456  *   list
  50457  *   empty list when size is 0
  50458  *   NULL when array is NULL
  50459  */
  50460 char **listFromArrayS(char **array, size_t size) {
  50461   char **r = NULL;
  50462 
  50463   // sanity checks
  50464   if (!array) {
  50465     return(NULL);
  50466   }
  50467   if (!size) {
  50468     listEmptyS(r);
  50469     return(r);
  50470   }
  50471 
  50472   // TODO allocate array size r for z to avoid reallocs and remove listPushS
  50473   // copy array content
  50474   for (size_t i = 0 ; i < size ; i++) {
  50475     if (array[i]) {
  50476       // remove NULL strings
  50477       pErrorNULL(listPushS(&r, array[i]));
  50478   }
  50479     }
  50480   return(r);
  50481 }
  50482 
  50483 /**
  50484  * list From Const Array String
  50485  *
  50486  * copy array of 'size' strings to a new list
  50487  * NULL strings are not copied to the list
  50488  *
  50489  * \param
  50490  *   array of strings
  50491  * \param
  50492  *   size - number of strings in the array
  50493  * \return
  50494  *   list
  50495  *   empty list when size is 0
  50496  *   NULL when array is NULL
  50497  */
  50498 char **listFromCArrayS(const char **array, size_t size) {
  50499   char **r = NULL;
  50500 
  50501   // sanity checks
  50502   if (!array) {
  50503     return(NULL);
  50504   }
  50505   if (!size) {
  50506     listEmptyS(r);
  50507     return(r);
  50508   }
  50509 
  50510   // copy array content
  50511   for (size_t i = 0 ; i < size ; i++) {
  50512     if (array[i]) {
  50513       // remove NULL strings
  50514       pErrorNULL(listPushS(&r, array[i]));
  50515   }
  50516     }
  50517   return(r);
  50518 }
  50519 
  50520 /**
  50521  * list Push String
  50522  * append s at the end of the list
  50523  * when list is NULL, a new list with one element is returned
  50524  * when list and s are NULL return list with 2 NULL elements
  50525  * when s is NULL, NULL is pushed at the end of the list
  50526  *
  50527  * the list is reallocated to add extra space
  50528  *
  50529  * \param
  50530  *   pointer to list - becomes NULL when realloc fails (this parameter is reallocated)
  50531  * \param
  50532  *   s: string to push
  50533  * \return
  50534  *   list success (you must free the pointer with listFreeS)
  50535  *   NULL error
  50536  */
  50537 char **listPushS(char ***list, const char *s) {
  50538 
  50539   // sanity checks
  50540   if (!list || !s) {
  50541     return(NULL);
  50542   }
  50543 
  50544   if (!*list) {
  50545     *list      = MALLOC(2 * sizeof(char *));
  50546     if (!*list) {
  50547       return(NULL);
  50548     }
  50549     (*list)[0] = strdup(s);
  50550     (*list)[1] = NULL;
  50551   }
  50552   else {
  50553     // realloc list and copy s to last element
  50554     size_t len;
  50555     len  = listLengthS(*list);
  50556     char **tmp = REALLOC(*list, (len+2) * sizeof(char *));
  50557     if (!tmp) {
  50558       return(NULL);
  50559     }
  50560     else {
  50561       *list = tmp;
  50562       (*list)[len+1] = NULL;
  50563       (*list)[len]   = strdup(s);
  50564   }
  50565     }
  50566   return(*list);
  50567 }
  50568 
  50569 char **listPushCharS(char ***list, char c) {
  50570 
  50571   charToS(s, c);
  50572   return(listPushS(list, s));
  50573 }
  50574 
  50575 /**
  50576  * list Push String
  50577  * append s pointer at the end of the list
  50578  * when list is NULL, a new list with one element is returned
  50579  * when list and s are NULL return list with 2 NULL elements
  50580  * when s is NULL, NULL is pushed at the end of the list
  50581  *
  50582  * the list is reallocated to add extra space
  50583  *
  50584  * \param
  50585  *   pointer to list - becomes NULL when realloc fails (this parameter is reallocated)
  50586  * \param
  50587  *   s: string to push
  50588  * \return
  50589  *   list success
  50590  *   NULL error
  50591  */
  50592 char **iListPushS(char ***list, char *s) {
  50593 
  50594   // sanity checks
  50595   if (!list || !s) {
  50596     return(NULL);
  50597   }
  50598 
  50599   if (!*list) {
  50600     *list      = MALLOC(2 * sizeof(char *));
  50601     if (!*list) {
  50602       return(NULL);
  50603     }
  50604     (*list)[0] = s;
  50605     (*list)[1] = NULL;
  50606   }
  50607   else {
  50608     // realloc list and copy s to last element
  50609     size_t len;
  50610     len  = listLengthS(*list);
  50611     char **tmp = REALLOC(*list, (len+2) * sizeof(char *));
  50612     if (!tmp) {
  50613       return(NULL);
  50614     }
  50615     else {
  50616       *list = tmp;
  50617       (*list)[len+1] = NULL;
  50618       (*list)[len]   = s;
  50619   }
  50620     }
  50621   return(*list);
  50622 }
  50623 
  50624 
  50625 /**
  50626  * list Pop String
  50627  * return last string from list and remove last element from the list
  50628  *
  50629  * \param
  50630  *   pointer to list
  50631  * \return
  50632  *   duplicated last string (you must free the pointer)
  50633  *   NULL when the list is NULL or empty (first element is NULL)
  50634  */
  50635 char *listPopS(char ***list) {
  50636   char *s = NULL;
  50637   size_t len;
  50638 
  50639   // sanity checks
  50640   if (!list) {
  50641     return(NULL);
  50642   }
  50643 
  50644   if (!*list || !**list) {
  50645     // empty list
  50646     // no element in the list
  50647     return(NULL);
  50648   }
  50649   // copy and free last non NULL element
  50650   // the number of elements including NULL element remains the same
  50651   len = listLengthS(*list);
  50652   s   = (*list)[len-1];
  50653   (*list)[len-1] = NULL;
  50654   return(s);
  50655 }
  50656 
  50657 /**
  50658  * list Prepend String
  50659  * append s at the beginning of the list
  50660  * when list is NULL, a new list with one element is returned
  50661  * when list and s are NULL return list with 2 NULL elements
  50662  * when s is NULL, the operation is canceled
  50663  *
  50664  * the list is reallocated to add extra space
  50665  *
  50666  * \param
  50667  *   pointer to list - becomes NULL when realloc fails (this parameter is reallocated)
  50668  * \param
  50669  *   s: string to prepend
  50670  * \return
  50671  *   list success (you must free the pointer with listFreeS)
  50672  *   NULL error
  50673  */
  50674 char **listPrependS(char ***list, const char *s) {
  50675 
  50676   // sanity checks
  50677   if (!list || !s) {
  50678     return(NULL);
  50679   }
  50680 
  50681   if (!*list) {
  50682     *list      = MALLOC(2 * sizeof(char *));
  50683     if (!*list) {
  50684       return(NULL);
  50685     }
  50686     (*list)[0] = strdup(s);
  50687     (*list)[1] = NULL;
  50688   }
  50689   else {
  50690     // realloc list and copy s to first element
  50691     size_t len;
  50692     len  = listLengthS(*list);
  50693     char **tmp = REALLOC(*list, (len+2) * sizeof(char *));
  50694     if (!tmp) {
  50695       return(NULL);
  50696     }
  50697     else {
  50698       *list = tmp;
  50699       (*list)[len+1] = NULL;
  50700       // shift list
  50701       for (size_t i = len; i > 0; i--) {
  50702         (*list)[i] = (*list)[i-1];
  50703       }
  50704       (*list)[0] = strdup(s);
  50705   }
  50706     }
  50707   return(*list);
  50708 }
  50709 
  50710 char **listPrependCharS(char ***list, char c) {
  50711 
  50712   charToS(s, c);
  50713   return(listPrependS(list, s));
  50714 }
  50715 
  50716 /**
  50717  * list Prepend String
  50718  * append s pointer at the beginning of the list
  50719  * when list is NULL, a new list with one element is returned
  50720  * when list and s are NULL return list with 2 NULL elements
  50721  * when s is NULL, the operation is canceled
  50722  *
  50723  * the list is reallocated to add extra space
  50724  *
  50725  * \param
  50726  *   pointer to list - becomes NULL when realloc fails (this parameter is reallocated)
  50727  * \param
  50728  *   s: string to prepend
  50729  * \return
  50730  *   list success
  50731  *   NULL error
  50732  */
  50733 char **iListPrependS(char ***list, char *s) {
  50734 
  50735   // sanity checks
  50736   if (!list || !s) {
  50737     return(NULL);
  50738   }
  50739 
  50740   if (!*list) {
  50741     *list      = MALLOC(2 * sizeof(char *));
  50742     if (!*list) {
  50743       return(NULL);
  50744     }
  50745     (*list)[0] = s;
  50746     (*list)[1] = NULL;
  50747   }
  50748   else {
  50749     // realloc list and copy s to first element
  50750     size_t len;
  50751     len  = listLengthS(*list);
  50752     char **tmp = REALLOC(*list, (len+2) * sizeof(char *));
  50753     if (!tmp) {
  50754       return(NULL);
  50755     }
  50756     else {
  50757       *list = tmp;
  50758       (*list)[len+1] = NULL;
  50759       // shift list
  50760       for (size_t i = len; i > 0; i--) {
  50761         (*list)[i] = (*list)[i-1];
  50762       }
  50763       (*list)[0] = s;
  50764   }
  50765     }
  50766   return(*list);
  50767 }
  50768 
  50769 /**
  50770  * list Dequeue String
  50771  * return first string from list and remove it from the list
  50772  *
  50773  * \param
  50774  *   pointer to list
  50775  * \return
  50776  *   first string (you must free the pointer)
  50777  *   NULL when the list is NULL or empty (first element is NULL)
  50778  */
  50779 char *listDequeueS(char ***list) {
  50780   char *s = NULL;
  50781   size_t len;
  50782 
  50783   // sanity checks
  50784   if (!list) {
  50785     return(NULL);
  50786   }
  50787 
  50788   if (!*list || !**list) {
  50789     // empty list
  50790     // no element in the list
  50791     return(NULL);
  50792   }
  50793   // copy and free last non NULL element
  50794   // the number of elements including NULL element remains the same
  50795   len = listLengthS(*list);
  50796   s   = (*list)[0];
  50797   // shift list
  50798   for (size_t i = 1; i < len; i++) {
  50799     (*list)[i-1] = (*list)[i];
  50800   }
  50801   (*list)[len-1] = NULL;
  50802   return(s);
  50803 }
  50804 
  50805 /**
  50806  * list Free String
  50807  *
  50808  * \param
  50809  *   list
  50810  * \return
  50811  *   nothing
  50812  */
  50813 void listFreeS(char **list) {
  50814 
  50815   // sanity checks
  50816   if (list) {
  50817     forEachCharP(list, e) {
  50818       free(*e);
  50819     }
  50820     free(list);
  50821 }
  50822   }
  50823 
  50824 /**
  50825  * list free many String
  50826  *
  50827  * free variable list of pointers
  50828  * listFreeManyS(l1, l2, ...);
  50829  */
  50830 void listFreeManySF(char **paramType, ...) {
  50831   va_list pl;
  50832 
  50833   // add arguments to a list
  50834   va_start(pl, paramType);
  50835   paramType = va_arg(pl, char **);
  50836   while (paramType) {
  50837     listFreeS(paramType);
  50838     paramType = va_arg(pl, char **);
  50839   }
  50840   va_end(pl);
  50841 }
  50842 
  50843 /**
  50844  * list Length String
  50845  * return number of elements until the first NULL element
  50846  *
  50847  * \param
  50848  *   list
  50849  * \return
  50850  *   number of element until first NULL element
  50851  *   0 when list is NULL
  50852  */
  50853 size_t listLengthS(char **list) {
  50854   size_t r = 0;;
  50855 
  50856   // sanity checks
  50857   if (!list) {
  50858     return(0);
  50859   }
  50860   forEachCharP(list, i) {
  50861     r++;
  50862   }
  50863   return(r);
  50864 }
  50865 
  50866 /**
  50867  * const list Length String
  50868  * return number of elements until the first NULL element
  50869  *
  50870  * \param
  50871  *   list
  50872  * \return
  50873  *   number of element until first NULL element
  50874  *   0 when list is NULL
  50875  */
  50876 size_t listLengthCS(const char **list) {
  50877   size_t r = 0;;
  50878 
  50879   // sanity checks
  50880   if (!list) {
  50881     return(0);
  50882   }
  50883   forEachCCharP(list, i) {
  50884     r++;
  50885   }
  50886   return(r);
  50887 }
  50888 
  50889 /**
  50890  * list String Length String
  50891  *
  50892  * \param
  50893  *   list
  50894  * \return
  50895  *   list length as a single string
  50896  *   -1 when list is NULL
  50897  */
  50898 ssize_t listStrLengthS(char **list) {
  50899   ssize_t r = 0;;
  50900 
  50901   // sanity checks
  50902   if (!list) {
  50903     return(-1);
  50904   }
  50905 
  50906   forEachS(list, i) {
  50907     r += (ssize_t)strlen(i);
  50908   }
  50909 
  50910   return(r);
  50911 }
  50912 
  50913 /**
  50914  * list int to index String
  50915  * index can be negative
  50916  *
  50917  * \param
  50918  *   list
  50919  * \param
  50920  *   index: index in list, must be inside the list
  50921  * \return
  50922  *   positive index
  50923  *   -1 when list is NULL or index is not set correctly
  50924  */
  50925 ssize_t listIntIndexS(char **list, int64_t index) {
  50926   ssize_t  r;
  50927   int64_t len;
  50928 
  50929   // sanity checks
  50930   if (!list) {
  50931     return(-1);
  50932   }
  50933 
  50934   len = (int64_t)listLengthS(list);
  50935   if (index >= len) {
  50936     return(-1);
  50937   }
  50938   if (index < -len) {
  50939     return(-1);
  50940   }
  50941   if (index < 0) {
  50942     r = len + index;
  50943   }
  50944   else {
  50945     r = index;
  50946   }
  50947   return(r);
  50948 }
  50949 
  50950 /**
  50951  * list address String
  50952  * index can be negative
  50953  *
  50954  * \param
  50955  *   list
  50956  * \param
  50957  *   index: index in list, must be inside the list
  50958  * \return
  50959  *   pointer to char* at index
  50960  *   NULL when list is NULL or index is not set correctly
  50961  */
  50962 char **listAddrS(char **list, int64_t index) {
  50963   size_t  r;
  50964   int64_t len;
  50965 
  50966   // sanity checks
  50967   if (!list) {
  50968     return(NULL);
  50969   }
  50970 
  50971   len = (int64_t)listLengthS(list);
  50972   if (index >= len) {
  50973     return(NULL);
  50974   }
  50975   if (index < -len) {
  50976     return(NULL);
  50977   }
  50978   if (index < 0) {
  50979     r = (size_t)(len + index);
  50980   }
  50981   else {
  50982     r = (size_t)(index);
  50983   }
  50984   return((list+r));
  50985 }
  50986 
  50987 /**
  50988  * list Get String
  50989  * duplicate string at given index
  50990  * index can be negative
  50991  *
  50992  * \param
  50993  *   list
  50994  * \param
  50995  *   index: index in list, must be inside the list
  50996  * \return
  50997  *   duplicated string (you must free the pointer)
  50998  *   NULL when list is NULL or index is not set correctly
  50999  */
  51000 char *listGetS(char **list, int64_t index) {
  51001   int64_t len;
  51002 
  51003   // sanity checks
  51004   if (!list) {
  51005     return(NULL);
  51006   }
  51007 
  51008   len = (int64_t)listLengthS(list);
  51009   if (index >= len) {
  51010     return(NULL);
  51011   }
  51012   if (index < -len) {
  51013     return(NULL);
  51014   }
  51015   if (index < 0) {
  51016     index = len + index;
  51017   }
  51018 
  51019   return(strdup(list[index]));
  51020 }
  51021 
  51022 /**
  51023  * list Get String
  51024  * index can be negative
  51025  *
  51026  * \param
  51027  *   list
  51028  * \param
  51029  *   index: index in list, must be inside the list
  51030  * \return
  51031  *   string
  51032  *   NULL when list is NULL or index is not set correctly
  51033  */
  51034 char *iListGetS(char **list, int64_t index) {
  51035   int64_t len;
  51036 
  51037   // sanity checks
  51038   if (!list) {
  51039     return(NULL);
  51040   }
  51041 
  51042   len = (int64_t)listLengthS(list);
  51043   if (index >= len) {
  51044     return(NULL);
  51045   }
  51046   if (index < -len) {
  51047     return(NULL);
  51048   }
  51049   if (index < 0) {
  51050     index = len + index;
  51051   }
  51052 
  51053   return(list[index]);
  51054 }
  51055 
  51056 /**
  51057  * const list Get String
  51058  * duplicate string at given index
  51059  * index can be negative
  51060  *
  51061  * \param
  51062  *   list
  51063  * \param
  51064  *   index: index in list, must be inside the list
  51065  * \return
  51066  *   duplicated string (you must free the pointer)
  51067  *   NULL when list is NULL or index is not set correctly
  51068  */
  51069 char *listGetCS(const char **list, int64_t index) {
  51070   int64_t len;
  51071 
  51072   // sanity checks
  51073   if (!list) {
  51074     return(NULL);
  51075   }
  51076 
  51077   len = (int64_t)listLengthCS(list);
  51078   if (index >= len) {
  51079     return(NULL);
  51080   }
  51081   if (index < -len) {
  51082     return(NULL);
  51083   }
  51084   if (index < 0) {
  51085     index = len + index;
  51086   }
  51087 
  51088   return(strdup(list[index]));
  51089 }
  51090 
  51091 /**
  51092  * const list Get String
  51093  * index can be negative
  51094  *
  51095  * \param
  51096  *   list
  51097  * \param
  51098  *   index: index in list, must be inside the list
  51099  * \return
  51100  *   string
  51101  *   NULL when list is NULL or index is not set correctly
  51102  */
  51103 const char *iListGetCS(const char **list, int64_t index) {
  51104   int64_t len;
  51105 
  51106   // sanity checks
  51107   if (!list) {
  51108     return(NULL);
  51109   }
  51110 
  51111   len = (int64_t)listLengthCS(list);
  51112   if (index >= len) {
  51113     return(NULL);
  51114   }
  51115   if (index < -len) {
  51116     return(NULL);
  51117   }
  51118   if (index < 0) {
  51119     index = len + index;
  51120   }
  51121 
  51122   return(list[index]);
  51123 }
  51124 
  51125 /**
  51126  * list Set String
  51127  * duplicate string and store at given index, the existing element is freed
  51128  * index can be negative
  51129  *
  51130  * \param
  51131  *   list
  51132  * \param
  51133  *   index: index in list, must be inside the list
  51134  * \param
  51135  *   string
  51136  * \return
  51137  *   list success (you must free the pointer with listFreeS)
  51138  *   NULL error
  51139  *
  51140  * Does nothing when:
  51141  * when list is NULL, index is not set correctly or s is NULL
  51142  */
  51143 char **listSetS(char **list, int64_t index, const char *s) {
  51144   int64_t len;
  51145 
  51146   // sanity checks
  51147   if (!list || !s) {
  51148     return(NULL);
  51149   }
  51150 
  51151   len = (int64_t)listLengthS(list);
  51152   if (index >= len) {
  51153     return(NULL);
  51154   }
  51155   if (index < -len) {
  51156     return(NULL);
  51157   }
  51158   if (index < 0) {
  51159     index = len + index;
  51160   }
  51161 
  51162   free(list[index]);
  51163   list[index] = strdup(s);
  51164   return(list);
  51165 }
  51166 
  51167 char **listSetCharS(char **list, int64_t index, char c) {
  51168 
  51169   charToS(s, c);
  51170   return(listSetS(list, index, s));
  51171 }
  51172 
  51173 /**
  51174  * list Set String
  51175  * store string at given index
  51176  * index can be negative
  51177  *
  51178  * \param
  51179  *   list
  51180  * \param
  51181  *   index: index in list, must be inside the list
  51182  * \param
  51183  *   string
  51184  * \return
  51185  *   list success
  51186  *   NULL error
  51187  *
  51188  * Does nothing when:
  51189  * when list is NULL, index is not set correctly or s is NULL
  51190  */
  51191 char **iListSetS(char **list, int64_t index, char *s) {
  51192   int64_t len;
  51193 
  51194   // sanity checks
  51195   if (!list || !s) {
  51196     return(NULL);
  51197   }
  51198 
  51199   len = (int64_t)listLengthS(list);
  51200   if (index >= len) {
  51201     return(NULL);
  51202   }
  51203   if (index < -len) {
  51204     return(NULL);
  51205   }
  51206   if (index < 0) {
  51207     index = len + index;
  51208   }
  51209 
  51210   free(list[index]);
  51211   list[index] = s;
  51212   return(list);
  51213 }
  51214 
  51215 /**
  51216  * swap elements in list
  51217  *
  51218  * \param
  51219  * list
  51220  * \param
  51221  * index1 index of character to swap
  51222  * \param
  51223  * index2 index of second character to swap
  51224  * \return
  51225  * new list with elements swapped at index1 and index2 (you must free this pointer)
  51226  * NULL when list is NULL or when index1 or index2 are outside the list
  51227  */
  51228 char **listSwapS(char **list, int64_t index1, int64_t index2) {
  51229   int64_t len;
  51230 
  51231   if (!list) {
  51232     return(NULL);
  51233   }
  51234 
  51235   len = (int64_t)listLengthS(list);
  51236   if (index1 >= len) {
  51237     return(NULL);
  51238   }
  51239   if (index1 < -len) {
  51240     return(NULL);
  51241   }
  51242   if (index1 < 0) {
  51243     index1 = len + index1;
  51244   }
  51245 
  51246   if (index2 >= len) {
  51247     return(NULL);
  51248   }
  51249   if (index2 < -len) {
  51250     return(NULL);
  51251   }
  51252   if (index2 < 0) {
  51253     index2 = len + index2;
  51254   }
  51255 
  51256   char **r = listDupS(list);
  51257 
  51258   char *tmp  = r[index1];
  51259   r[index1]  = r[index2];
  51260   r[index2]  = tmp;;
  51261 
  51262   return(r);
  51263 }
  51264 
  51265 /**
  51266  * swap elements in list
  51267  *
  51268  * \param
  51269  * list
  51270  * \param
  51271  * index1 index of character to swap
  51272  * \param
  51273  * index2 index of second character to swap
  51274  * \return
  51275  * updated list with characters swapped at index1 and index2 (you must free this pointer)
  51276  * NULL when list is NULL or when index1 or index2 are outside the list
  51277  */
  51278 char **iListSwapS(char **list, int64_t index1, int64_t index2) {
  51279   int64_t len;
  51280 
  51281   if (!list) {
  51282     return(NULL);
  51283   }
  51284 
  51285   len = (int64_t)listLengthS(list);
  51286   if (index1 >= len) {
  51287     return(NULL);
  51288   }
  51289   if (index1 < -len) {
  51290     return(NULL);
  51291   }
  51292   if (index1 < 0) {
  51293     index1 = len + index1;
  51294   }
  51295 
  51296   if (index2 >= len) {
  51297     return(NULL);
  51298   }
  51299   if (index2 < -len) {
  51300     return(NULL);
  51301   }
  51302   if (index2 < 0) {
  51303     index2 = len + index2;
  51304   }
  51305 
  51306   char *tmp    = list[index1];
  51307   list[index1] = list[index2];
  51308   list[index2] = tmp;;
  51309 
  51310   return(list);
  51311 }
  51312 
  51313 
  51314 /**
  51315  * split string with delim string
  51316  * when updating this function, also update splitS (identical to split)
  51317  * return list
  51318  *
  51319  * \param
  51320  *   string to split
  51321  * \param
  51322  *   delim delimiter
  51323  * \return
  51324  *   list of tokens (you must free the pointer with listFreeS)
  51325  *   NULL when list or delim are NULL
  51326  */
  51327 char **split(const char *string, const char* delim) {
  51328   char *startString = NULL;
  51329   char *workingString = NULL;
  51330   char *line = NULL;
  51331   char *token = NULL;
  51332   char **r = NULL;
  51333 
  51334   // sanity checks
  51335   if (!string || !delim) {
  51336     return(NULL);
  51337   }
  51338 
  51339   if (!*delim || !*string) {
  51340     // empty delimiter empty string, return string in a list
  51341     pErrorNULL(listPushS(&r, string));
  51342     return(r);
  51343   }
  51344 
  51345   // split using strtok_r
  51346   startString   = strdup(string);
  51347   workingString = startString;
  51348   line  = workingString;
  51349   while (strlen(workingString) != 0) {
  51350     token = tokS(line, delim, &workingString);
  51351     pErrorNULL(listPushS(&r, token));
  51352     // mac os sets workingString to NULL at the end
  51353     if (!workingString) {
  51354       break; //LCOV_EXCL_LINE
  51355     }
  51356     // first parameter should be NULL in next strtok_r calls
  51357     line  = NULL;
  51358   }
  51359   free(startString);
  51360 
  51361   // check if delim is at the end of string
  51362   // if yes, add an empty string in the result
  51363   // ["one",""] = split "one/" "/"
  51364   size_t len  = strlen(string);
  51365   size_t lenD = strlen(delim);
  51366   if (strEq(string+(len-lenD), delim)) {
  51367     pErrorNULL(listPushS(&r, ""));
  51368   }
  51369 
  51370   return(r);
  51371 }
  51372 
  51373 // splitS is identical to split
  51374 // to make the interface uniform
  51375 char **splitS(const char *string, const char* delim) {
  51376   char *startString = NULL;
  51377   char *workingString = NULL;
  51378   char *line = NULL;
  51379   char *token = NULL;
  51380   char **r = NULL;
  51381 
  51382   // sanity checks
  51383   if (!string || !delim) {
  51384     return(NULL);
  51385   }
  51386 
  51387   if (!*delim || !*string) {
  51388     // empty delimiter empty string, return string in a list
  51389     pErrorNULL(listPushS(&r, string));
  51390     return(r);
  51391   }
  51392 
  51393   // split using strtok_r
  51394   startString   = strdup(string);
  51395   workingString = startString;
  51396   line  = workingString;
  51397   while (strlen(workingString) != 0) {
  51398     token = tokS(line, delim, &workingString);
  51399     pErrorNULL(listPushS(&r, token));
  51400     // mac os sets workingString to NULL at the end
  51401     if (!workingString) {
  51402       break; //LCOV_EXCL_LINE
  51403     }
  51404     // first parameter should be NULL in next strtok_r calls
  51405     line  = NULL;
  51406   }
  51407   free(startString);
  51408 
  51409   // check if delim is at the end of string
  51410   // if yes, add an empty string in the result
  51411   // ["one",""] = split "one/" "/"
  51412   size_t len  = strlen(string);
  51413   size_t lenD = strlen(delim);
  51414   if (strEq(string+(len-lenD), delim)) {
  51415     pErrorNULL(listPushS(&r, ""));
  51416   }
  51417 
  51418   return(r);
  51419 }
  51420 
  51421 char **splitChar(const char *string, char delim) {
  51422 
  51423   charToS(s, delim);
  51424   return(split(string, s));
  51425 }
  51426 
  51427 /**
  51428  * ignore case split string with delim string
  51429  * when updating this function, also update icSplitS (identical to icSplit)
  51430  * return list
  51431  *
  51432  * \param
  51433  *   string to split
  51434  * \param
  51435  *   delim delimiter
  51436  * \return
  51437  *   list of tokens (you must free the pointer with listFreeS)
  51438  *   NULL when list or delim are NULL
  51439  */
  51440 char **icSplit(const char *string, const char* delim) {
  51441   char *startString = NULL;
  51442   char *workingString = NULL;
  51443   char *line = NULL;
  51444   char *token = NULL;
  51445   char **r = NULL;
  51446 
  51447   // sanity checks
  51448   if (!string || !delim) {
  51449     return(NULL);
  51450   }
  51451 
  51452   if (!*delim || !*string) {
  51453     // empty delimiter empty string, return string in a list
  51454     pErrorNULL(listPushS(&r, string));
  51455     return(r);
  51456   }
  51457 
  51458   // split using strtok_r
  51459   startString   = strdup(string);
  51460   workingString = startString;
  51461   line  = workingString;
  51462   while (strlen(workingString) != 0) {
  51463     token = icTokS(line, delim, &workingString);
  51464     pErrorNULL(listPushS(&r, token));
  51465     // mac os sets workingString to NULL at the end
  51466     if (!workingString) {
  51467       break; //LCOV_EXCL_LINE
  51468     }
  51469     // first parameter should be NULL in next strtok_r calls
  51470     line  = NULL;
  51471   }
  51472   free(startString);
  51473 
  51474   // check if delim is at the end of string
  51475   // if yes, add an empty string in the result
  51476   // ["one",""] = split "one/" "/"
  51477   size_t len  = strlen(string);
  51478   size_t lenD = strlen(delim);
  51479   if (icEqS(string+(len-lenD), delim)) {
  51480     pErrorNULL(listPushS(&r, ""));
  51481   }
  51482 
  51483   return(r);
  51484 }
  51485 
  51486 // icSplitS is identical to icSplit
  51487 // to make the interface uniform
  51488 char **icSplitS(const char *string, const char* delim) {
  51489   char *startString = NULL;
  51490   char *workingString = NULL;
  51491   char *line = NULL;
  51492   char *token = NULL;
  51493   char **r = NULL;
  51494 
  51495   // sanity checks
  51496   if (!string || !delim) {
  51497     return(NULL);
  51498   }
  51499 
  51500   if (!*delim || !*string) {
  51501     // empty delimiter empty string, return string in a list
  51502     pErrorNULL(listPushS(&r, string));
  51503     return(r);
  51504   }
  51505 
  51506   // split using strtok_r
  51507   startString   = strdup(string);
  51508   workingString = startString;
  51509   line  = workingString;
  51510   while (strlen(workingString) != 0) {
  51511     token = icTokS(line, delim, &workingString);
  51512     pErrorNULL(listPushS(&r, token));
  51513     // mac os sets workingString to NULL at the end
  51514     if (!workingString) {
  51515       break; //LCOV_EXCL_LINE
  51516     }
  51517     // first parameter should be NULL in next strtok_r calls
  51518     line  = NULL;
  51519   }
  51520   free(startString);
  51521 
  51522   // check if delim is at the end of string
  51523   // if yes, add an empty string in the result
  51524   // ["one",""] = split "one/" "/"
  51525   size_t len  = strlen(string);
  51526   size_t lenD = strlen(delim);
  51527   if (icEqS(string+(len-lenD), delim)) {
  51528     pErrorNULL(listPushS(&r, ""));
  51529   }
  51530 
  51531   return(r);
  51532 }
  51533 
  51534 char **icSplitChar(const char *string, char delim) {
  51535 
  51536   charToS(s, delim);
  51537   return(icSplit(string, s));
  51538 }
  51539 
  51540 /**
  51541  * join Length
  51542  * list length after joined with delimiter
  51543  *
  51544  * \param
  51545  *   list
  51546  * \param
  51547  *   delim: string seperator
  51548  * \return
  51549  *   list length as a single string
  51550  *   -1 when list is NULL
  51551  */
  51552 ssize_t joinLength(char **list, const char* delim) {
  51553   ssize_t r = 0;;
  51554 
  51555   // sanity checks
  51556   if (!list || !delim) {
  51557     return(-1);
  51558   }
  51559 
  51560   size_t delimLen  = strlen(delim);
  51561   bool isFirstElem = true;
  51562   forEachS(list, i) {
  51563     if (isFirstElem) {
  51564       r           += (ssize_t)strlen(i);
  51565       isFirstElem  = no;
  51566     }
  51567     else {
  51568       r           += (ssize_t)(strlen(i) + delimLen);
  51569   }
  51570     }
  51571 
  51572   return(r);
  51573 }
  51574 
  51575 /**
  51576  * join list, the elements are seperated with delim in the resulting string
  51577  * when updating this function, also update joinS (identical to join)
  51578  *
  51579  * \param
  51580  *   list
  51581  * \param
  51582  *   delim: string seperator
  51583  * \return
  51584  *   joined string (you must free the pointer)
  51585  *   NULL when list or delim are NULL
  51586  */
  51587 char *join(char **list, const char* delim) {
  51588   char *r = NULL;
  51589 
  51590   // sanity checks
  51591   if (!list || !delim) {
  51592     return(NULL);
  51593   }
  51594 
  51595   forEachCharP(list, e) {
  51596     if (!r) {
  51597       r = strdup(*e);
  51598     }
  51599     else {
  51600       char *tmp;
  51601       tmp = REALLOC(r, strlen(r) + strlen(delim) + 1);
  51602       if (!tmp) {
  51603         free(r);
  51604         return(NULL);//LCOV_EXCL_LINE
  51605       }
  51606       r = tmp;
  51607       strcat(r, delim);
  51608       tmp = REALLOC(r, strlen(r) + strlen(*e) + 1);
  51609       if (!tmp) {
  51610         free(r);
  51611         return(NULL);//LCOV_EXCL_LINE
  51612       }
  51613       r = tmp;
  51614       strcat(r, *e);
  51615   }
  51616     }
  51617   return(r);
  51618 }
  51619 
  51620 // joinS is identical to join
  51621 // to make the interface uniform
  51622 char *joinS(char **list, const char* delim) {
  51623   char *r = NULL;
  51624 
  51625   // sanity checks
  51626   if (!list || !delim) {
  51627     return(NULL);
  51628   }
  51629 
  51630   forEachCharP(list, e) {
  51631     if (!r) {
  51632       r = strdup(*e);
  51633     }
  51634     else {
  51635       char *tmp;
  51636       tmp = REALLOC(r, strlen(r) + strlen(delim) + 1);
  51637       if (!tmp) {
  51638         free(r);
  51639         return(NULL);//LCOV_EXCL_LINE
  51640       }
  51641       r = tmp;
  51642       strcat(r, delim);
  51643       tmp = REALLOC(r, strlen(r) + strlen(*e) + 1);
  51644       if (!tmp) {
  51645         free(r);
  51646         return(NULL);//LCOV_EXCL_LINE
  51647       }
  51648       r = tmp;
  51649       strcat(r, *e);
  51650   }
  51651     }
  51652   return(r);
  51653 }
  51654 
  51655 /**
  51656  * join list, the elements are seperated with delim in the resulting string
  51657  *
  51658  * \param
  51659  *   list
  51660  * \param
  51661  *   delim: string seperator
  51662  * \return
  51663  *   joined string (you must free the pointer)
  51664  *   NULL when list or delim are NULL
  51665  */
  51666 char *joinCS(const char **list, const char* delim) {
  51667   char *r = NULL;
  51668 
  51669   // sanity checks
  51670   if (!list || !delim) {
  51671     return(NULL);
  51672   }
  51673 
  51674   forEachCCharP(list, e) {
  51675     if (!r) {
  51676       r = strdup(*e);
  51677     }
  51678     else {
  51679       char *tmp;
  51680       tmp = REALLOC(r, strlen(r) + strlen(delim) + 1);
  51681       if (!tmp) {
  51682         free(r);
  51683         return(NULL);//LCOV_EXCL_LINE
  51684       }
  51685       r = tmp;
  51686       strcat(r, delim);
  51687       tmp = REALLOC(r, strlen(r) + strlen(*e) + 1);
  51688       if (!tmp) {
  51689         free(r);
  51690         return(NULL);//LCOV_EXCL_LINE
  51691       }
  51692       r = tmp;
  51693       strcat(r, *e);
  51694   }
  51695     }
  51696   return(r);
  51697 }
  51698 
  51699 char *joinChar(char **list, char delim) {
  51700 
  51701   charToS(s, delim);
  51702   return(join(list, s));
  51703 }
  51704 
  51705 /**
  51706  * buffer join list, the elements are seperated with delim in the resulting string
  51707  *
  51708  * \param
  51709  *   list
  51710  * \param
  51711  *   delim: string seperator
  51712  * \return
  51713  *   joined string
  51714  *   NULL when list or delim are NULL
  51715  */
  51716 char *bJoin(char *string, char **list, const char* delim) {
  51717 
  51718   // sanity checks
  51719   if (!list || !delim || !string || !*list) {
  51720     return(NULL);
  51721   }
  51722 
  51723   bEmptyS(string);
  51724 
  51725   enumerateCharP(list, e, i) {
  51726     if (!i) {
  51727       strcpy(string, *e);
  51728     }
  51729     else {
  51730       pErrorNULL(bAppendManyS(string, delim, *e));
  51731   }
  51732     }
  51733   return(string);
  51734 }
  51735 
  51736 char *bJoinChar(char *string, char **list, char delim) {
  51737 
  51738   charToS(s, delim);
  51739   return(bJoin(string, list, s));
  51740 }
  51741 
  51742 /**
  51743  * buffer size join list, the elements are seperated with delim in the resulting string
  51744  *
  51745  * \param
  51746  *   list
  51747  * \param
  51748  *   delim: string seperator
  51749  * \return
  51750  *   joined string
  51751  *   NULL when list or delim are NULL
  51752  */
  51753 char *bLJoin(char *string, size_t stringSize, char **list, const char* delim) {
  51754 
  51755   // sanity checks
  51756   if (!list || !delim || !string || !*list) {
  51757     return(NULL);
  51758   }
  51759 
  51760   if (!stringSize) {
  51761     // size 0 - no change
  51762     return(string);
  51763   }
  51764 
  51765   bEmptyS(string);
  51766 
  51767   enumerateCharP(list, e, i) {
  51768     if (!i) {
  51769       pErrorNULL(strLCpy(string, stringSize, *e));
  51770     }
  51771     else {
  51772       pErrorNULL(bLAppendManyS(string, stringSize, delim, *e));
  51773   }
  51774     }
  51775   return(string);
  51776 }
  51777 
  51778 char *bLJoinChar(char *string, size_t stringSize, char **list, char delim) {
  51779 
  51780   charToS(s, delim);
  51781   return(bLJoin(string, stringSize, list, s));
  51782 }
  51783 
  51784 /**
  51785  * extract string between delim1 and delim2 strings
  51786  * return list
  51787  *
  51788  * \param
  51789  *   string to split
  51790  * \param
  51791  *   delim1 first delimiter
  51792  * \param
  51793  *   delim2 second delimiter, has to be different from delim1
  51794  * \return
  51795  *   list of tokens (you must free the pointer with listFreeS)
  51796  *   NULL when list or delim are NULL
  51797  */
  51798 char **extractS(const char *string, const char* delim1, const char* delim2) {
  51799   char **tmp = NULL;
  51800   char **r = NULL;
  51801 
  51802   // sanity checks
  51803   if (!string || !delim1 || !delim2) {
  51804     return(NULL);
  51805   }
  51806 
  51807   if (strEq(delim1, delim2)) {
  51808     return(NULL);
  51809   }
  51810 
  51811   tmp = split(string, delim1);;
  51812 
  51813   if (!tmp) {
  51814     return(NULL);
  51815   }
  51816 
  51817   if (listLengthS(tmp) < 2) {
  51818     // delim1 not found
  51819     listFreeS(tmp);
  51820     return(NULL);
  51821   }
  51822 
  51823   // remove first element
  51824   pErrorNULL(iListSliceS(&tmp, 1, 0));
  51825 
  51826   forEachCharP(tmp, e) {
  51827     char **tmp2 = split(*e, delim2);
  51828     if (listLengthS(tmp2) > 1) {
  51829       pErrorNULL(listPushS(&r, tmp2[0]));
  51830     }
  51831     listFreeS(tmp2);
  51832   }
  51833 
  51834   listFreeS(tmp);
  51835   return(r);
  51836 }
  51837 
  51838 char **extractCharSS(const char *string, char delim1, const char* delim2) {
  51839 
  51840   charToS(d1, delim1);
  51841   return(extractS(string, d1, delim2));
  51842 }
  51843 
  51844 char **extractSCharS(const char *string, const char* delim1, char delim2) {
  51845 
  51846   charToS(d2, delim2);
  51847   return(extractS(string, delim1, d2));
  51848 }
  51849 
  51850 char **extractCharCharS(const char *string, char delim1, char delim2) {
  51851 
  51852   charToS(d1, delim1);
  51853   charToS(d2, delim2);
  51854   return(extractS(string, d1, d2));
  51855 }
  51856 
  51857 /**
  51858  * ignore case extract string between delim1 and delim2 strings
  51859  * return list
  51860  *
  51861  * \param
  51862  *   string to split
  51863  * \param
  51864  *   delim1 first delimiter
  51865  * \param
  51866  *   delim2 second delimiter, has to different from delim1
  51867  * \return
  51868  *   list of tokens (you must free the pointer with listFreeS)
  51869  *   NULL when list or delim are NULL
  51870  */
  51871 char **icExtractS(const char *string, const char* delim1, const char* delim2) {
  51872   char **tmp = NULL;
  51873   char **r = NULL;
  51874 
  51875   // sanity checks
  51876   if (!string || !delim1 || !delim2) {
  51877     return(NULL);
  51878   }
  51879 
  51880   if (strEq(delim1, delim2)) {
  51881     return(NULL);
  51882   }
  51883 
  51884   tmp = icSplit(string, delim1);;
  51885 
  51886   if (!tmp) {
  51887     return(NULL);
  51888   }
  51889 
  51890   if (listLengthS(tmp) < 2) {
  51891     // delim1 not found
  51892     listFreeS(tmp);
  51893     return(NULL);
  51894   }
  51895 
  51896   // remove first element
  51897   pErrorNULL(iListSliceS(&tmp, 1, 0));
  51898 
  51899   forEachCharP(tmp, e) {
  51900     char **tmp2 = icSplit(*e, delim2);
  51901     if (listLengthS(tmp2) > 1) {
  51902       pErrorNULL(listPushS(&r, tmp2[0]));
  51903     }
  51904     listFreeS(tmp2);
  51905   }
  51906 
  51907   listFreeS(tmp);
  51908   return(r);
  51909 }
  51910 
  51911 char **icExtractCharSS(const char *string, char delim1, const char* delim2) {
  51912 
  51913   charToS(d1, delim1);
  51914   return(icExtractS(string, d1, delim2));
  51915 }
  51916 
  51917 char **icExtractSCharS(const char *string, const char* delim1, char delim2) {
  51918 
  51919   charToS(d2, delim2);
  51920   return(icExtractS(string, delim1, d2));
  51921 }
  51922 
  51923 char **icExtractCharCharS(const char *string, char delim1, char delim2) {
  51924 
  51925   charToS(d1, delim1);
  51926   charToS(d2, delim2);
  51927   return(icExtractS(string, d1, d2));
  51928 }
  51929 
  51930 /**
  51931  * list Duplicate String
  51932  *
  51933  * \param
  51934  *   list
  51935  * \return
  51936  *   duplicated list (you must free the pointer with listFreeS)
  51937  *   NULL when list is NULL
  51938  */
  51939 char **listDupS(char **list) {
  51940   char **l = NULL;
  51941   size_t len;
  51942 
  51943   // sanity checks
  51944   if (!list) {
  51945     return(NULL);
  51946   }
  51947 
  51948   len    = listLengthS(list);
  51949   l      = MALLOC((len+1) * sizeof(char *));
  51950   if (!l) {
  51951     return(NULL);//LCOV_EXCL_LINE
  51952   }
  51953 
  51954   // last element is NULL
  51955   l[len] = NULL;
  51956 
  51957   // copy each element
  51958   enumerateCharP(list, e, i) {
  51959     l[i] = strdup(*e);
  51960   }
  51961   return(l);
  51962 }
  51963 
  51964 /**
  51965  * const list Duplicate String
  51966  *
  51967  * \param
  51968  *   list
  51969  * \return
  51970  *   duplicated list (you must free the pointer with listFreeS)
  51971  *   NULL when list is NULL
  51972  */
  51973 char **listDupCS(const char **list) {
  51974   char **l = NULL;
  51975   size_t len;
  51976 
  51977   // sanity checks
  51978   if (!list) {
  51979     return(NULL);
  51980   }
  51981 
  51982   len    = listLengthCS(list);
  51983   l      = MALLOC((len+1) * sizeof(char *));
  51984   if (!l) {
  51985     return(NULL);//LCOV_EXCL_LINE
  51986   }
  51987 
  51988   // last element is NULL
  51989   l[len] = NULL;
  51990 
  51991   // copy each element
  51992   enumerateCCharP(list, e, i) {
  51993     l[i] = strdup(*e);
  51994   }
  51995   return(l);
  51996 }
  51997 
  51998 /**
  51999  * list Duplicate String
  52000  *
  52001  * copy pointers to new list
  52002  * After this function, free list with free instead of listFreeS
  52003  *
  52004  * Note: this function creates a new list, so char *** is not needed.
  52005  *   Unlike iList functions.
  52006  *
  52007  * \param
  52008  *   list
  52009  * \return
  52010  *   new list pointing to the same string as list (you should free the pointer with free)
  52011  *   NULL when list is NULL
  52012  */
  52013 char **iListDupS(char **list) {
  52014   char **l = NULL;
  52015   size_t len;
  52016 
  52017   // sanity checks
  52018   if (!list) {
  52019     return(NULL);
  52020   }
  52021 
  52022   len    = listLengthS(list);
  52023   l      = MALLOC((len+1) * sizeof(char *));
  52024   if (!l) {
  52025     return(NULL);//LCOV_EXCL_LINE
  52026   }
  52027 
  52028   // last element is NULL
  52029   l[len] = NULL;
  52030 
  52031   // copy each element
  52032   enumerateCharP(list, e, i) {
  52033     l[i] = *e;
  52034   }
  52035   return(l);
  52036 }
  52037 
  52038 /**
  52039  * list Reverse String
  52040  * duplicate and reverse list, the last element is the first element of the new list
  52041  *
  52042  * \param
  52043  *   list
  52044  * \return
  52045  *   reversed list (you must free the pointer with listFreeS)
  52046  *   NULL when list is NULL
  52047  */
  52048 char **listReverseS(char **list) {
  52049   char **l = NULL;
  52050   size_t len;
  52051 
  52052   // sanity checks
  52053   if (!list) {
  52054     return(NULL);
  52055   }
  52056 
  52057   len    = listLengthS(list);
  52058   l      = MALLOC((len+1) * sizeof(char *));
  52059   if (!l) {
  52060     return(NULL);//LCOV_EXCL_LINE
  52061   }
  52062 
  52063   // last element is NULL
  52064   l[len] = NULL;
  52065 
  52066   // copy each element in reverse order
  52067   enumerateCharP(list, e, i) {
  52068     l[len-1-i] = strdup(*e);
  52069   }
  52070   return(l);
  52071 }
  52072 
  52073 /**
  52074  * list Reverse String
  52075  * reverse list, the last element is the first element of the list
  52076  *
  52077  * \param
  52078  *   list (this parameter is reallocated)
  52079  * \return
  52080  *   reversed list (you must free the pointer with listFreeS or free)
  52081  *   nothing when list is NULL
  52082  *   NULL error
  52083  */
  52084 char **iListReverseS(char ***list) {
  52085   char **l = NULL;
  52086   size_t len;
  52087 
  52088   // sanity checks
  52089   if (!list || !*list) {
  52090     return(NULL);
  52091   }
  52092 
  52093   len    = listLengthS(*list);
  52094   l      = MALLOC((len+1) * sizeof(char *));
  52095   if (!l) {
  52096     return(NULL);
  52097   }
  52098 
  52099   // last element is NULL
  52100   l[len] = NULL;
  52101 
  52102   // copy each element in reverse order
  52103   enumerateCharP(*list, e, i) {
  52104     l[len-1-i] = *e;
  52105   }
  52106 
  52107   free(*list);
  52108   *list = l;
  52109   return(l);
  52110 }
  52111 
  52112 /**
  52113  * list Cat String
  52114  * \param
  52115  *   arbitrary list of lists seperated by commas
  52116  * \return
  52117  *   new list with input lists concatenated (you must free the pointer with listFreeS)
  52118  */
  52119 char **listCatSF(char **paramType, ...) {
  52120   va_list pl;
  52121   char **r = NULL;
  52122 
  52123   // add arguments to a list
  52124   va_start(pl, paramType);
  52125   paramType = va_arg(pl, char **);
  52126   while (paramType) {
  52127     pErrorNULL(listAppendS(&r, paramType));
  52128     paramType = va_arg(pl, char **);
  52129   }
  52130   va_end(pl);
  52131   return(r);
  52132 }
  52133 
  52134 /**
  52135  * list Append String
  52136  * Append list2 at the end of list1
  52137  *
  52138  * list1 is reallocated to add extra space
  52139  *
  52140  * \param
  52141  *   list1 (this parameter is reallocated)
  52142  * \param
  52143  *   list2
  52144  * \return
  52145  *   list1 and list2 (you must free the pointer with listFreeS)
  52146  *   list1 not modified when list1 and list2 are NULL
  52147  *   NULL error
  52148  */
  52149 char **listAppendS(char ***list1, char **list2) {
  52150   char **r = NULL;
  52151   char **l2 = NULL;
  52152   size_t len1;
  52153   size_t len2;
  52154   bool freeL2Status = false;;
  52155 
  52156   // sanity checks
  52157   if (!list1) {
  52158     // need a list to store results, abort
  52159     return(NULL);
  52160   }
  52161   if (!(*list1)) {
  52162     // copy list2
  52163     (*list1) = listDupS(list2);
  52164     return(*list1);
  52165   }
  52166   if (!list2) {
  52167     // list1 not modified
  52168     return(*list1);
  52169   }
  52170 
  52171   len1 = listLengthS(*list1);
  52172 
  52173   if ((*list1) == list2) {
  52174     // list1 and list2 identical, duplicate list before realloc
  52175     // copy only the string pointers
  52176     l2           = MALLOC((len1+1) * sizeof(char *));
  52177     if (!l2) {
  52178       return(NULL);
  52179     }
  52180     int j = 0;
  52181     while (list2[j]) {
  52182       l2[j] = list2[j];
  52183       j++;
  52184     }
  52185     l2[j] = NULL;
  52186     freeL2Status = true;
  52187   }
  52188   else {
  52189     l2 = list2;
  52190   }
  52191   len2 = listLengthS(l2);
  52192   r    = REALLOC((*list1), (len1+len2+1) * sizeof(char *));
  52193   if (!r) {
  52194     // realloc fails list1 not modified
  52195     if (freeL2Status) {
  52196       free(l2);
  52197     }
  52198     return(NULL);
  52199   }
  52200   (*list1) = r;
  52201   // push list2 to new list
  52202   enumerateCharP(l2, e, i) {
  52203     r[len1+i] = strdup(*e);
  52204   }
  52205 
  52206   r[len1+len2] = NULL;
  52207 
  52208   if (freeL2Status) {
  52209     free(l2);
  52210   }
  52211   return(r);
  52212 }
  52213 
  52214 /**
  52215  * in place list Append String
  52216  * Append list2 at the end of list1 by copying the pointers
  52217  * from list2 to list1.
  52218  * After this function, free list2 with free instead of listFreeS
  52219  *
  52220  * list1 is reallocated to add extra space
  52221  *
  52222  * \param
  52223  *   list1 (this parameter is reallocated)
  52224  * \param
  52225  *   list2
  52226  * \return
  52227  *   list1 and list2 (you must free the pointer with listFreeS or free)
  52228  *   list1 not modified when list1 and list2 are NULL
  52229  *     or when list1 is identical to list2 (same pointers)
  52230  *   NULL error
  52231  */
  52232 char **iListAppendS(char ***list1, char **list2) {
  52233   char **r = NULL;
  52234   size_t len1;
  52235   size_t len2;
  52236 
  52237   // sanity checks
  52238   if (!list1) {
  52239     // need a list to store results, abort
  52240     return(NULL);
  52241   }
  52242   if (!list2 || !*list2) {
  52243     // list1 not modified
  52244     return(*list1);
  52245   }
  52246   if (!(*list1)) {
  52247     // copy list2
  52248     len2     = listLengthS(list2);
  52249     *list1   = MALLOC((len2+1) * sizeof(char *));
  52250     if (!*list1) {
  52251       return(NULL);
  52252     }
  52253     int j    = 0;
  52254     while (list2[j]) {
  52255       (*list1)[j] = list2[j];
  52256       j++;
  52257     }
  52258     (*list1)[j] = NULL;
  52259     return(*list1);
  52260   }
  52261 
  52262   len1 = listLengthS(*list1);
  52263 
  52264   if ((*list1) == list2) {
  52265     // list1 and list2 identical, cancel this operations
  52266     // to avoid double free undefined behavior in listFreeS
  52267     return(NULL);
  52268   }
  52269 
  52270   len2 = listLengthS(list2);
  52271   r    = REALLOC((*list1), (len1+len2+1) * sizeof(char *));
  52272   if (!r) {
  52273     // realloc fails list1 not modified
  52274     return(NULL);
  52275   }
  52276   (*list1) = r;
  52277   // push list2 to new list
  52278   enumerateCharP(list2, e, i) {
  52279     r[len1+i] = *e;
  52280   }
  52281 
  52282   r[len1+len2] = NULL;
  52283 
  52284   return(r);
  52285 }
  52286 
  52287 /**
  52288  * list Append and smash list2
  52289  * Append list2 at the end of list1 by copying the pointers
  52290  * from list2 to list1.
  52291  *
  52292  * list2 is freed (except when there is an error)
  52293  *
  52294  * list1 is reallocated to add extra space
  52295  *
  52296  * \param
  52297  *   list1 (this parameter is reallocated)
  52298  * \param
  52299  *   list2
  52300  * \return
  52301  *   list1 and list2 (you must free the pointer with listFreeS or free)
  52302  *   list1 not modified when list1 and list2 are NULL
  52303  *     or when list1 is identical to list2 (same pointers)
  52304  *   NULL error
  52305  */
  52306 char **iListAppendNSmashS(char ***list1, char **list2) {
  52307   char **r = NULL;
  52308 
  52309   r = iListAppendS(list1, list2);
  52310   if (r) {
  52311     free(list2);
  52312   }
  52313   return(r);
  52314 }
  52315 
  52316 /**
  52317  * list Shift String
  52318  * Append list2 at the start of list1
  52319  *
  52320  * list1 is reallocated to add extra space
  52321  *
  52322  * \param
  52323  *   list1 (this parameter is reallocated)
  52324  * \param
  52325  *   list2
  52326  * \return
  52327  *   list1 and list2 (you must free the pointer with listFreeS)
  52328  *   list1 not modified when list1 and list2 are NULL
  52329  *   NULL error
  52330  */
  52331 char **listShiftS(char ***list1, char **list2) {
  52332 
  52333   if (!list1) {
  52334     return(NULL);
  52335   }
  52336 
  52337   char **r = listInsertS(*list1, 0, list2);
  52338   if (r) {
  52339     listFreeS(*list1);
  52340     *list1 = r;
  52341   }
  52342   return(r);
  52343 }
  52344 
  52345 /**
  52346  * in place list Shift String
  52347  * Append list2 at the start of list1 by copying the pointers
  52348  * from list2 to list1.
  52349  * After this function, free list2 with free instead of listFreeS
  52350  *
  52351  * list1 is reallocated to add extra space
  52352  *
  52353  * \param
  52354  *   list1 (this parameter is reallocated)
  52355  * \param
  52356  *   list2
  52357  * \return
  52358  *   list1 and list2 (you must free the pointer with listFreeS or free)
  52359  *   list1 not modified when list1 and list2 are NULL
  52360  *     or when list1 is identical to list2 (same pointers)
  52361  *   NULL error
  52362  */
  52363 char **iListShiftS(char ***list1, char **list2) {
  52364 
  52365   return(iListInsertS(list1, 0, list2));
  52366 }
  52367 
  52368 /**
  52369  * list Append and smash list2
  52370  * Append list2 at the start of list1 by copying the pointers
  52371  * from list2 to list1.
  52372  *
  52373  * list2 is freed (except when there is an error)
  52374  *
  52375  * list1 is reallocated to add extra space
  52376  *
  52377  * \param
  52378  *   list1 (this parameter is reallocated)
  52379  * \param
  52380  *   list2
  52381  * \return
  52382  *   list1 and list2 (you must free the pointer with listFreeS or free)
  52383  *   list1 not modified when list1 and list2 are NULL
  52384  *     or when list1 is identical to list2 (same pointers)
  52385  *   NULL error
  52386  */
  52387 char **iListShiftNSmashS(char ***list1, char **list2) {
  52388 
  52389   return(iListInsertNFreeS(list1, 0, list2));
  52390 }
  52391 
  52392 
  52393 /**
  52394  * list Add String
  52395  * add list1 and list2 in a new list
  52396  *
  52397  * \param
  52398  *   list1
  52399  * \param
  52400  *   list2
  52401  * \return
  52402  *   new list with list1 and list2 (you must free the pointer with listFreeS)
  52403  *   NULL when list1 and list2 are NULL
  52404  */
  52405 char **listAddS(char **list1, char **list2) {
  52406   char **l = NULL;
  52407   char **r = NULL;
  52408   size_t len1;
  52409   size_t len2;
  52410 
  52411   // sanity checks
  52412   if (!list1 && !list2) {
  52413     return(NULL);
  52414   }
  52415   if (!list1) {
  52416     // copy list2
  52417     return(listDupS(list2));
  52418   }
  52419   if (!list2) {
  52420     // copy list1
  52421     return(listDupS(list1));
  52422   }
  52423   // duplicate list1
  52424   l    = listDupS(list1);
  52425   len1 = listLengthS(list1);
  52426   len2 = listLengthS(list2);
  52427   r    = REALLOC(l, (len1+len2+1) * sizeof(char *));
  52428   if (!r) {
  52429     // free l when realloc fails
  52430     listFreeS(l);
  52431     return(NULL);//LCOV_EXCL_LINE
  52432   }
  52433   // push list2 to new list
  52434   enumerateCharP(list2, e, i) {
  52435     r[len1+i] = strdup(*e);
  52436   }
  52437 
  52438   r[len1+len2] = NULL;
  52439 
  52440   return(r);
  52441 }
  52442 
  52443 
  52444 /**
  52445  * const list Add String
  52446  * add list1 and list2 in a new list
  52447  *
  52448  * \param
  52449  *   list1
  52450  * \param
  52451  *   list2
  52452  * \return
  52453  *   new list with list1 and list2 (you must free the pointer with listFreeS)
  52454  *   NULL when list1 and list2 are NULL
  52455  */
  52456 char **listAddCS(char **list1, const char **list2) {
  52457   char **l = NULL;
  52458   char **r = NULL;
  52459   size_t len1;
  52460   size_t len2;
  52461 
  52462   // sanity checks
  52463   if (!list1 && !list2) {
  52464     return(NULL);
  52465   }
  52466   if (!list1) {
  52467     // copy list2
  52468     return(listDupCS(list2));
  52469   }
  52470   if (!list2) {
  52471     // copy list1
  52472     return(listDupS(list1));
  52473   }
  52474   // duplicate list1
  52475   l    = listDupS(list1);
  52476   len1 = listLengthS(list1);
  52477   len2 = listLengthCS(list2);
  52478   r    = REALLOC(l, (len1+len2+1) * sizeof(char *));
  52479   if (!r) {
  52480     // free l when realloc fails
  52481     listFreeS(l);
  52482     return(NULL);//LCOV_EXCL_LINE
  52483   }
  52484   // push list2 to new list
  52485   enumerateCCharP(list2, e, i) {
  52486     r[len1+i] = strdup(*e);
  52487   }
  52488 
  52489   r[len1+len2] = NULL;
  52490 
  52491   return(r);
  52492 }
  52493 
  52494 
  52495 /**
  52496  * list Slice String
  52497  * return new list with elements from start and end in list
  52498  * negative indexes are allowed
  52499  *
  52500  * \param
  52501  *   list
  52502  * \param
  52503  *   start index, must be in the list
  52504  * \param
  52505  *   end index, must be in the list
  52506  * \return
  52507  *   sliced list (you must free the pointer with listFreeS)
  52508  *   empty list when start=end
  52509  *   NULL when list is empty
  52510  *   NULL when list is NULL or when start and end are not set correctly
  52511  */
  52512 char **listSliceS(char **list, int64_t start, int64_t end) {
  52513   char **l = NULL;
  52514   int64_t len;
  52515 
  52516   // sanity checks
  52517   if (!list) {
  52518     return(NULL);
  52519   }
  52520 
  52521   len = (int64_t)listLengthS(list);
  52522 
  52523   if (start > len) {
  52524     return(NULL);
  52525   }
  52526   if (end > len) {
  52527     end = len;
  52528   }
  52529   if (start <= -len) {
  52530     start = -len;
  52531   }
  52532   if (end <= -len) {
  52533     return(NULL);
  52534   }
  52535   if (start < 0) {
  52536     start = len + start;
  52537   }
  52538   if (end <= 0) {
  52539     end = len + end;
  52540   }
  52541   if (end < start) {
  52542     return(NULL);
  52543   }
  52544 
  52545   if (start == end) {
  52546     // empty list
  52547     listEmptyS(l);
  52548     return(l);
  52549   }
  52550 
  52551   // start < end < len
  52552   int64_t n;
  52553   n = end - start;
  52554   l = MALLOC((size_t)(n+1) * sizeof(char *));
  52555   if (!l) {
  52556     return(NULL);//LCOV_EXCL_LINE
  52557   }
  52558   for (int64_t i=0;i < n;i++) {
  52559     l[i] = strdup(*(list+start+i));
  52560   }
  52561   l[n] = NULL;
  52562   return(l);
  52563 }
  52564 
  52565 /**
  52566  * list Copy String
  52567  * return new list with element pointers from start and end in list
  52568  * negative indexes are allowed
  52569  *
  52570  * Note: this function creates a new list, so char *** is not needed.
  52571  *   Unlike iList functions.
  52572  *
  52573  * \param
  52574  *   list
  52575  * \param
  52576  *   start index, must be in the list
  52577  * \param
  52578  *   end index, must be in the list
  52579  * \return
  52580  *   new list pointing to the same string as list (you must free the pointer with free)
  52581  *   empty list when start=end
  52582  *   NULL when list is empty
  52583  *   NULL when list is NULL or when start and end are not set correctly
  52584  */
  52585 char **iListCopyS(char **list, int64_t start, int64_t end) {
  52586   char **l = NULL;
  52587   int64_t len;
  52588 
  52589   // sanity checks
  52590   if (!list) {
  52591     return(NULL);
  52592   }
  52593 
  52594   len = (int64_t)listLengthS(list);
  52595 
  52596   if (start > len) {
  52597     return(NULL);
  52598   }
  52599   if (end > len) {
  52600     end = len;
  52601   }
  52602   if (start <= -len) {
  52603     start = -len;
  52604   }
  52605   if (end <= -len) {
  52606     return(NULL);
  52607   }
  52608   if (start < 0) {
  52609     start = len + start;
  52610   }
  52611   if (end <= 0) {
  52612     end = len + end;
  52613   }
  52614   if (end < start) {
  52615     return(NULL);
  52616   }
  52617 
  52618   if (start == end) {
  52619     // empty list
  52620     listEmptyS(l);
  52621     return(l);
  52622   }
  52623 
  52624   // start < end < len
  52625   int64_t n;
  52626   n = end - start;
  52627   l = MALLOC((size_t)(n+1) * sizeof(char *));
  52628   if (!l) {
  52629     return(NULL);//LCOV_EXCL_LINE
  52630   }
  52631   for (int64_t i=0;i < n;i++) {
  52632     l[i] = *(list+start+i);
  52633   }
  52634   l[n] = NULL;
  52635   return(l);
  52636 }
  52637 
  52638 /**
  52639  * list Slice String
  52640  * return list with elements from start and end in list
  52641  * negative indexes are allowed
  52642  *
  52643  * \param
  52644  *   list (this parameter is reallocated)
  52645  * \param
  52646  *   start index, must be in the list
  52647  * \param
  52648  *   end index, must be in the list
  52649  * \return
  52650  *   sliced list (you must free the pointer with listFreeS or free)
  52651  *   empty list when start=end
  52652  *   unchanged when list is empty
  52653  *   unchanged when list is NULL or when start and end are not set correctly
  52654  *   NULL error
  52655  */
  52656 char **iListSliceS(char ***list, int64_t start, int64_t end) {
  52657   char **l = NULL;
  52658   int64_t len;
  52659 
  52660   // sanity checks
  52661   if (!list || !*list) {
  52662     return(NULL);
  52663   }
  52664 
  52665   len = (int64_t)listLengthS(*list);
  52666 
  52667   if (start > len) {
  52668     listFreeS(*list);
  52669     listEmptyS(*list);
  52670     return(NULL);
  52671   }
  52672   if (end > len) {
  52673     end = len;
  52674   }
  52675   if (start <= -len) {
  52676     start = -len;
  52677   }
  52678   if (end <= -len) {
  52679     listFreeS(*list);
  52680     listEmptyS(*list);
  52681     return(NULL);
  52682   }
  52683   if (start < 0) {
  52684     start = len + start;
  52685   }
  52686   if (end <= 0) {
  52687     end = len + end;
  52688   }
  52689   if (end < start) {
  52690     listFreeS(*list);
  52691     listEmptyS(*list);
  52692     return(NULL);
  52693   }
  52694 
  52695   if (start == end) {
  52696     // empty list
  52697     listEmptyS(l);
  52698     // free elements
  52699     listFreeS(*list);
  52700   }
  52701   else {
  52702     // start < end < len
  52703     int64_t n;
  52704     n = end - start;
  52705     l = MALLOC((size_t)(n+1) * sizeof(char *));
  52706     if (!l) {
  52707       return(NULL);
  52708     }
  52709     for (int64_t i=0;i < n;i++) {
  52710       l[i] = *((*list)+start+i);
  52711     }
  52712     l[n] = NULL;
  52713     // free 0 < start
  52714     for (int64_t i=0;i < start;i++) {
  52715       free((*list)[i]);
  52716     }
  52717     // free end < len
  52718     for (int64_t i=end;i < len;i++) {
  52719       free((*list)[i]);
  52720     }
  52721     free(*list);
  52722   }
  52723 
  52724   *list = l;
  52725   return(l);
  52726 }
  52727 
  52728 /**
  52729  * list Crop String
  52730  * return a new list with elements from start and end in list
  52731  * and delete elements from start to end in the original list
  52732  * negative indexes are allowed
  52733  *
  52734  * iListCropS is faster than listSliceS+iListDelS because only the
  52735  * string pointers are copied to the sliced list
  52736  *
  52737  * \param
  52738  *   list
  52739  * \param
  52740  *   start index, must be in the list
  52741  * \param
  52742  *   end index, must be in the list
  52743  * \return
  52744  *   new sliced list (you must free the pointer with listFreeS or free)
  52745  *   empty list when start=end
  52746  *   unchanged when list is empty
  52747  *   unchanged when list is NULL or when start and end are not set correctly
  52748  *   NULL error
  52749  */
  52750 char **listCropS(char **list, int64_t start, int64_t end) {
  52751   char **l = NULL;
  52752   int64_t len;
  52753 
  52754   // sanity checks
  52755   if (!list) {
  52756     return(NULL);
  52757   }
  52758 
  52759   len = (int64_t)listLengthS(list);
  52760 
  52761   if (start > len) {
  52762     return(NULL);
  52763   }
  52764   if (end > len) {
  52765     end = len;
  52766   }
  52767   if (start <= -len) {
  52768     start = -len;
  52769   }
  52770   if (end <= -len) {
  52771     return(NULL);
  52772   }
  52773   if (start < 0) {
  52774     start = len + start;
  52775   }
  52776   if (end <= 0) {
  52777     end = len + end;
  52778   }
  52779   if (end < start) {
  52780     return(NULL);
  52781   }
  52782 
  52783   if (start == end) {
  52784     // empty list
  52785     listEmptyS(l);
  52786     return(l);
  52787   }
  52788   else {
  52789     // start < end < len
  52790     int64_t n;
  52791     n = end - start;
  52792     l = MALLOC((size_t)(n+1) * sizeof(char *));
  52793     if (!l) {
  52794       return(NULL);
  52795     }
  52796     for (int64_t i=0;i < n;i++) {
  52797       l[i] = *(list+start+i);
  52798     }
  52799     l[n] = NULL;
  52800     // free end < len
  52801     for (int64_t i=0;i < (len - end);i++) {
  52802       list[i+start] = *(list+i+end);
  52803     }
  52804     list[len-n] = NULL;
  52805   }
  52806 
  52807   return(l);
  52808 }
  52809 
  52810 /**
  52811  * list Crop String
  52812  * return a new list with elements from start and end in list
  52813  * and delete elements from start to end in the original list
  52814  * negative indexes are allowed
  52815  *
  52816  * iListCropS is faster than listSliceS+iListDelS because only the
  52817  * string pointers are copied to the sliced list
  52818  *
  52819  * \param
  52820  *   list
  52821  * \param
  52822  *   start index, must be in the list
  52823  * \param
  52824  *   end index, must be in the list
  52825  * \return
  52826  *   new sliced list (you must free the pointer with listFreeS or free)
  52827  *   empty list when start=end
  52828  *   unchanged when list is empty
  52829  *   unchanged when list is NULL or when start and end are not set correctly
  52830  *   NULL error
  52831  */
  52832 char **iListCropS(char ***list, int64_t start, int64_t end) {
  52833   char **l = NULL;
  52834   int64_t len;
  52835 
  52836   // sanity checks
  52837   if (!list || !*list) {
  52838     return(NULL);
  52839   }
  52840 
  52841   len = (int64_t)listLengthS(*list);
  52842 
  52843   if (start > len) {
  52844     return(NULL);
  52845   }
  52846   if (end > len) {
  52847     end = len;
  52848   }
  52849   if (start <= -len) {
  52850     start = -len;
  52851   }
  52852   if (end <= -len) {
  52853     return(NULL);
  52854   }
  52855   if (start < 0) {
  52856     start = len + start;
  52857   }
  52858   if (end <= 0) {
  52859     end = len + end;
  52860   }
  52861   if (end < start) {
  52862     return(NULL);
  52863   }
  52864 
  52865   if (start == end) {
  52866     // empty list
  52867     listEmptyS(l);
  52868     return(l);
  52869   }
  52870   else {
  52871     // start < end < len
  52872     int64_t n;
  52873     n = end - start;
  52874     l = MALLOC((size_t)(n+1) * sizeof(char *));
  52875     if (!l) {
  52876       return(NULL);
  52877     }
  52878     for (int64_t i=0;i < n;i++) {
  52879       l[i] = *((*list)+start+i);
  52880     }
  52881     l[n] = NULL;
  52882     // free end < len
  52883     for (int64_t i=0;i < (len - end);i++) {
  52884       (*list)[i+start] = *((*list)+i+end);
  52885     }
  52886     (*list)[len-n] = NULL;
  52887   }
  52888 
  52889   return(l);
  52890 }
  52891 
  52892 /**
  52893  * list Crop Element String
  52894  * return element at index
  52895  * and delete element at index in the original list
  52896  * negative indexes are allowed
  52897  *
  52898  * iListCropS is faster than listSliceS+iListDelElemS because only the
  52899  * string pointer is returned directly
  52900  *
  52901  * \param
  52902  *   list
  52903  * \param
  52904  *   index must be in the list
  52905  * \return
  52906  *   element at index (you must free the pointer with free)
  52907  *   empty list when start=end
  52908  *   unchanged when list is empty
  52909  *   unchanged when list is NULL or when start and end are not set correctly
  52910  *   NULL error
  52911  */
  52912 char *listCropElemS(char **list, int64_t index) {
  52913   char *r = NULL;
  52914   int64_t len;
  52915 
  52916   // sanity checks
  52917   if (!list) {
  52918     return(NULL);
  52919   }
  52920 
  52921   len = (int64_t)listLengthS(list);
  52922 
  52923   if (len == 0) {
  52924     return(NULL);
  52925   }
  52926 
  52927   if (index >= len) {
  52928     return(NULL);
  52929   }
  52930   if (index < -len) {
  52931     return(NULL);
  52932   }
  52933   if (index < 0) {
  52934     index = len + index;
  52935   }
  52936 
  52937   r = *(list+index);
  52938   for (int64_t i=index ; i < len-1 ; i++) {
  52939     list[i] = *(list+1+i);
  52940   }
  52941   list[len-1] = NULL;
  52942 
  52943   return(r);
  52944 }
  52945 
  52946 /**
  52947  * list Crop Element String
  52948  * return element at index
  52949  * and delete element at index in the original list
  52950  * negative indexes are allowed
  52951  *
  52952  * iListCropS is faster than listSliceS+iListDelElemS because only the
  52953  * string pointer is returned directly
  52954  *
  52955  * \param
  52956  *   list
  52957  * \param
  52958  *   index must be in the list
  52959  * \return
  52960  *   element at index (you must free the pointer with free)
  52961  *   empty list when start=end
  52962  *   unchanged when list is empty
  52963  *   unchanged when list is NULL or when start and end are not set correctly
  52964  *   NULL error
  52965  */
  52966 char *iListCropElemS(char ***list, int64_t index) {
  52967   char *r = NULL;
  52968   int64_t len;
  52969 
  52970   // sanity checks
  52971   if (!list || !*list) {
  52972     return(NULL);
  52973   }
  52974 
  52975   len = (int64_t)listLengthS(*list);
  52976 
  52977   if (len == 0) {
  52978     return(NULL);
  52979   }
  52980 
  52981   if (index >= len) {
  52982     return(NULL);
  52983   }
  52984   if (index < -len) {
  52985     return(NULL);
  52986   }
  52987   if (index < 0) {
  52988     index = len + index;
  52989   }
  52990 
  52991   r = *((*list)+index);
  52992   for (int64_t i=index ; i < len-1 ; i++) {
  52993     (*list)[i] = *((*list)+1+i);
  52994   }
  52995   (*list)[len-1] = NULL;
  52996 
  52997   return(r);
  52998 }
  52999 
  53000 /**
  53001  * list Insert string
  53002  *
  53003  * insert list in list at index
  53004  *
  53005  * return new list with toInsert at index
  53006  * negative indexes are allowed
  53007  * index -1 is the end of the array and is equivalent to index len
  53008  *
  53009  * \param
  53010  *   list
  53011  * \param
  53012  *   index in list
  53013  * \param
  53014  *   toInsert list
  53015  * \return
  53016  *   new list (you must free the pointer with listFreeS)
  53017  *   NULL when list is NULL or invalid index
  53018  */
  53019 char **listInsertS(char **list, int64_t index, char **toInsert) {
  53020   char **r = NULL;
  53021   int64_t len;
  53022 
  53023   //sanity checks
  53024   if (!list) {
  53025     if (index || !toInsert) {
  53026       return(NULL);
  53027     }
  53028     return(listDupS(toInsert));
  53029   }
  53030   len = (int64_t)listLengthS(list);
  53031 
  53032   if (!len && index == -1) {
  53033     // empty string, index -1 is equal to 0
  53034     index = 0;
  53035   }
  53036   bool neg = false;
  53037   if (index < 0) {
  53038     neg = true;
  53039   }
  53040 
  53041   if (index > len) {
  53042     return(NULL);
  53043   }
  53044   if (neg) {
  53045     index++;
  53046   }
  53047   if (index < -len) {
  53048     return(NULL);
  53049   }
  53050   if (neg) {
  53051     index = len + index;
  53052   }
  53053 
  53054 
  53055   if (!toInsert || listIsEmptyS(toInsert)) {
  53056     return(listDupS(list));
  53057   }
  53058 
  53059   if (index == 0) {
  53060     // insert at beginning
  53061     return(listAddS(toInsert, list));
  53062   }
  53063 
  53064   char **l1 = listSliceS(list, 0, index);
  53065   char **l2 = listSliceS(list, index, 0);
  53066   r         = listCatS(l1, toInsert, l2);
  53067   listFreeManyS(l1,l2);
  53068 
  53069   return(r);
  53070 }
  53071 
  53072 /**
  53073  * list Insert string
  53074  *
  53075  * insert list in list at index
  53076  * After this function, free toInsert with free instead of listFreeS
  53077  *
  53078  * return list with toInsert at index
  53079  * negative indexes are allowed
  53080  * index -1 is the end of the array and is equivalent to index len
  53081  *
  53082  * \param
  53083  *   list (this parameter is reallocated)
  53084  * \param
  53085  *   index in list
  53086  * \param
  53087  *   toInsert list
  53088  * \return
  53089  *   list (you must free the pointer with listFreeS or free)
  53090  *   unchanged list when list is NULL or invalid index
  53091  *   NULL error
  53092  */
  53093 char **iListInsertS(char ***list, int64_t index, char **toInsert) {
  53094   char **r = NULL;
  53095   int64_t len;
  53096 
  53097   //sanity checks
  53098   if (!list || !toInsert) {
  53099     return(NULL);
  53100   }
  53101   if (!*list) {
  53102     if (index) {
  53103       return(NULL);
  53104     }
  53105     len   = (int64_t)listLengthS(toInsert);
  53106     r      = MALLOC((size_t)(len+1) * sizeof(char *));
  53107     if (!r) {
  53108       return(NULL);//LCOV_EXCL_LINE
  53109     }
  53110     // last element is NULL
  53111     r[len] = NULL;
  53112     // copy each element
  53113     enumerateCharP(toInsert, e, i) {
  53114       r[i] = *e;
  53115     }
  53116     *list = r;
  53117     return(r);
  53118   }
  53119 
  53120   len = (int64_t)listLengthS(*list);
  53121 
  53122   if (!len && index == -1) {
  53123     // empty string, index -1 is equal to 0
  53124     index = 0;
  53125   }
  53126   bool neg = false;
  53127   if (index < 0) {
  53128     neg = true;
  53129   }
  53130 
  53131   if (index > len) {
  53132     return(NULL);
  53133   }
  53134   if (neg) {
  53135     index++;
  53136   }
  53137   if (index < -len) {
  53138     return(NULL);
  53139   }
  53140   if (neg) {
  53141     index = len + index;
  53142   }
  53143 
  53144 
  53145   if (listIsEmptyS(toInsert)) {
  53146     return(*list);
  53147   }
  53148 
  53149   if ((*list) == toInsert) {
  53150     // list1 and list2 identical, cancel this operations
  53151     // to avoid double free undefined behavior in listFreeS
  53152     return(NULL);
  53153   }
  53154 
  53155   if (index == 0) {
  53156     // insert at beginning
  53157     pErrorNULL(iListAppendS(&r, toInsert));
  53158     pErrorNULL(iListAppendS(&r, *list));
  53159   }
  53160   else {
  53161 
  53162     r         = iListCopyS(*list, 0, index);;
  53163     char **l2 = iListCopyS(*list, index, 0);
  53164     pErrorNULL(iListAppendS(&r, toInsert));
  53165     pErrorNULL(iListAppendS(&r, l2));
  53166     free(l2);
  53167   }
  53168 
  53169   free(*list);
  53170   *list = r;
  53171   return(r);
  53172 }
  53173 
  53174 /**
  53175  * list Insert string and free toInsert
  53176  *
  53177  * insert list in list at index
  53178  *
  53179  * return list with toInsert at index
  53180  * negative indexes are allowed
  53181  * index -1 is the end of the array and is equivalent to index len
  53182  *
  53183  * \param
  53184  *   list (this parameter is reallocated)
  53185  * \param
  53186  *   index in list
  53187  * \param
  53188  *   toInsert list
  53189  * \return
  53190  *   list (you must free the pointer with listFreeS or free)
  53191  *   unchanged list when list is NULL or invalid index
  53192  *   NULL error
  53193  */
  53194 char **iListInsertNFreeS(char ***list, int64_t index, char **toInsert) {
  53195   char **r = NULL;
  53196   int64_t len;
  53197 
  53198   //sanity checks
  53199   if (!list || !toInsert) {
  53200     return(NULL);
  53201   }
  53202   if (!*list) {
  53203     if (index) {
  53204       return(NULL);
  53205     }
  53206     r     = listDupS(toInsert);
  53207     listFreeS(toInsert);
  53208     *list = r;
  53209     return(r);
  53210   }
  53211 
  53212   len = (int64_t)listLengthS(*list);
  53213 
  53214   if (!len && index == -1) {
  53215     // empty string, index -1 is equal to 0
  53216     index = 0;
  53217   }
  53218   bool neg = false;
  53219   if (index < 0) {
  53220     neg = true;
  53221   }
  53222 
  53223   if (index > len) {
  53224     return(NULL);
  53225   }
  53226   if (neg) {
  53227     index++;
  53228   }
  53229   if (index < -len) {
  53230     return(NULL);
  53231   }
  53232   if (neg) {
  53233     index = len + index;
  53234   }
  53235 
  53236 
  53237   if (listIsEmptyS(toInsert)) {
  53238     listFreeS(toInsert);
  53239     return(*list);
  53240   }
  53241 
  53242   if ((*list) == toInsert) {
  53243     // list1 and list2 identical, cancel this operations
  53244     // to avoid double free undefined behavior in listFreeS
  53245     return(NULL);
  53246   }
  53247 
  53248   if (index == 0) {
  53249     // insert at beginning
  53250     pErrorNULL(iListAppendS(&r, toInsert));
  53251     pErrorNULL(iListAppendS(&r, *list));
  53252   }
  53253   else {
  53254 
  53255     r         = iListCopyS(*list, 0, index);;
  53256     char **l2 = iListCopyS(*list, index, 0);
  53257     pErrorNULL(iListAppendS(&r, toInsert));
  53258     pErrorNULL(iListAppendS(&r, l2));
  53259     free(l2);
  53260   }
  53261   free(toInsert);
  53262 
  53263   free(*list);
  53264   *list = r;
  53265   return(r);
  53266 }
  53267 
  53268 /**
  53269  * list Inject string
  53270  *
  53271  * Inject string in list at index
  53272  *
  53273  * return new list with toInject at index
  53274  * negative indexes are allowed
  53275  * index -1 is the end of the array and is equivalent to index len
  53276  *
  53277  * \param
  53278  *   list
  53279  * \param
  53280  *   index in list
  53281  * \param
  53282  *   toInject string
  53283  * \return
  53284  *   new list (you must free the pointer with listFreeS)
  53285  *   NULL when list is NULL or invalid index
  53286  */
  53287 char **listInjectS(char **list, int64_t index, char *toInject) {
  53288   char **r = NULL;
  53289   int64_t len;
  53290 
  53291   //sanity checks
  53292   if (!list) {
  53293     if (index || !toInject) {
  53294       return(NULL);
  53295     }
  53296     pErrorNULL(listPushS(&r, toInject));
  53297     return(r);
  53298   }
  53299 
  53300   if (!toInject) {
  53301     return(NULL);
  53302   }
  53303 
  53304   len = (int64_t)listLengthS(list);
  53305 
  53306   if (!len && index == -1) {
  53307     // empty string, index -1 is equal to 0
  53308     index = 0;
  53309   }
  53310   bool neg = false;
  53311   if (index < 0) {
  53312     neg = true;
  53313   }
  53314 
  53315   if (index > len) {
  53316     return(NULL);
  53317   }
  53318   if (neg) {
  53319     index++;
  53320   }
  53321   if (index < -len) {
  53322     return(NULL);
  53323   }
  53324   if (neg) {
  53325     index = len + index;
  53326   }
  53327 
  53328 
  53329   char *inject[2];
  53330   inject[0] = toInject;
  53331   inject[1] = NULL;
  53332 
  53333   if (index == 0) {
  53334     // Inject at beginning
  53335     return(listAddS(inject, list));
  53336   }
  53337 
  53338   char **l1 = listSliceS(list, 0, index);
  53339   char **l2 = listSliceS(list, index, 0);
  53340   r         = listCatS(l1, inject, l2);
  53341   listFreeManyS(l1,l2);
  53342 
  53343   return(r);
  53344 }
  53345 
  53346 char **listInjectCharS(char **list, int64_t index, char toInject) {
  53347 
  53348   charToS(s, toInject);
  53349   return(listInjectS(list, index, s));
  53350 }
  53351 
  53352 /**
  53353  * list Inject string
  53354  *
  53355  * Inject string pointer in list at index
  53356  *
  53357  * return list with toInject at index
  53358  * negative indexes are allowed
  53359  * index -1 is the end of the array and is equivalent to index len
  53360  *
  53361  * \param
  53362  *   list (this parameter is reallocated)
  53363  * \param
  53364  *   index in list
  53365  * \param
  53366  *   toInject string
  53367  * \return
  53368  *   list (you must free the pointer with listFreeS or free)
  53369  *   unchanged list when list is NULL or invalid index
  53370  *   NULL error
  53371  */
  53372 char **iListInjectS(char ***list, int64_t index, char *toInject) {
  53373   char **r = NULL;
  53374   int64_t len;
  53375 
  53376   //sanity checks
  53377   if (!list || !toInject) {
  53378     return(NULL);
  53379   }
  53380   if (!*list) {
  53381     if (index) {
  53382       return(NULL);
  53383     }
  53384     pErrorNULL(iListPushS(list, toInject));
  53385     return(*list);
  53386   }
  53387 
  53388   len = (int64_t)listLengthS(*list);
  53389 
  53390   if (!len && index == -1) {
  53391     // empty string, index -1 is equal to 0
  53392     index = 0;
  53393   }
  53394   bool neg = false;
  53395   if (index < 0) {
  53396     neg = true;
  53397   }
  53398 
  53399   if (index > len) {
  53400     return(NULL);
  53401   }
  53402   if (neg) {
  53403     index++;
  53404   }
  53405   if (index < -len) {
  53406     return(NULL);
  53407   }
  53408   if (neg) {
  53409     index = len + index;
  53410   }
  53411 
  53412 
  53413   char *inject[2];
  53414   inject[0] = toInject;
  53415   inject[1] = NULL;
  53416 
  53417   if (index == 0) {
  53418     // Inject at beginning
  53419     pErrorNULL(iListAppendS(&r, inject));
  53420     pErrorNULL(iListAppendS(&r, *list));
  53421   }
  53422   else {
  53423 
  53424     r         = iListCopyS(*list, 0, index);;
  53425     char **l2 = iListCopyS(*list, index, 0);
  53426     pErrorNULL(iListAppendS(&r, inject));
  53427     pErrorNULL(iListAppendS(&r, l2));
  53428     free(l2);
  53429   }
  53430 
  53431   free(*list);
  53432   *list = r;
  53433   return(r);
  53434 }
  53435 
  53436 char **iListInjectCharS(char ***list, int64_t index, char toInject) {
  53437 
  53438   if (!list) {
  53439     return(NULL);
  53440   }
  53441 
  53442   if (!*list && index) {
  53443       return(NULL);
  53444   }
  53445 
  53446   charToS(s, toInject);
  53447   *list = iListInjectS(list, index, strdup(s));
  53448   return(*list);
  53449 }
  53450 
  53451 /**
  53452  * list Delete String
  53453  * return new list without elements from start and end in list
  53454  * negative indexes are allowed
  53455  *
  53456  * \param
  53457  *   list
  53458  * \param
  53459  *   start index, must be in the list
  53460  * \param
  53461  *   end index, must be in the list
  53462  * \return
  53463  *   sliced list (you must free the pointer with listFreeS)
  53464  *   list copy when start=end or when start and end are not set correctly
  53465  *   NULL when list is empty
  53466  *   NULL when list is NULL or when end is under start
  53467  */
  53468 char **listDelS(char **list, int64_t start, int64_t end) {
  53469   char **l = NULL;
  53470   int64_t len;
  53471 
  53472   // sanity checks
  53473   if (!list) {
  53474     return(NULL);
  53475   }
  53476 
  53477   len = (int64_t)listLengthS(list);
  53478 
  53479   if (len == 0) {
  53480     return(NULL);
  53481   }
  53482 
  53483   if (start >= len) {
  53484     start = len;
  53485   }
  53486   if (end > len) {
  53487     end = len;
  53488   }
  53489   if (start <= -len) {
  53490     start = -len;
  53491   }
  53492   if (end <= -len) {
  53493     end = -len;
  53494   }
  53495   if (start < 0) {
  53496     start = len + start;
  53497   }
  53498   if (end <= 0) {
  53499     end = len + end;
  53500   }
  53501   if (end < start) {
  53502     return(NULL);
  53503   }
  53504 
  53505   if (start == end) {
  53506     return(listDupS(list));
  53507   }
  53508 
  53509   // start < end < len
  53510   int64_t n;
  53511   n = end - start;
  53512   l = MALLOC((size_t)(len-n+1) * sizeof(char *));
  53513   if (!l) {
  53514     return(NULL);//LCOV_EXCL_LINE
  53515   }
  53516   for (int64_t i=0;i < start;i++) {
  53517     l[i] = strdup(*(list+i));
  53518   }
  53519   for (int64_t i=start ; i < len-n ; i++) {
  53520     l[i] = strdup(*(list+n+i));
  53521   }
  53522   l[len-n] = NULL;
  53523   return(l);
  53524 }
  53525 
  53526 
  53527 /**
  53528  * list Delete String
  53529  * return list without elements from start and end in list
  53530  * negative indexes are allowed
  53531  *
  53532  * \param
  53533  *   list (this parameter is reallocated)
  53534  * \param
  53535  *   start index, must be in the list
  53536  * \param
  53537  *   end index, must be in the list
  53538  * \return
  53539  *   sliced list (you must free the pointer with listFreeS or free)
  53540  *   list copy when start=end or when start and end are not set correctly
  53541  *   NULL when list is empty
  53542  *   NULL when list is NULL or when end is under start
  53543  *   NULL error
  53544  */
  53545 char **iListDelS(char ***list, int64_t start, int64_t end) {
  53546   char **l = NULL;
  53547   int64_t len;
  53548 
  53549   // sanity checks
  53550   if (!list || !*list) {
  53551     return(NULL);
  53552   }
  53553 
  53554   len = (int64_t)listLengthS(*list);
  53555 
  53556   if (len == 0) {
  53557     return(NULL);
  53558   }
  53559 
  53560   if (start >= len) {
  53561     start = len;
  53562   }
  53563   if (end > len) {
  53564     end = len;
  53565   }
  53566   if (start <= -len) {
  53567     start = -len;
  53568   }
  53569   if (end <= -len) {
  53570     end = -len;
  53571   }
  53572   if (start < 0) {
  53573     start = len + start;
  53574   }
  53575   if (end <= 0) {
  53576     end = len + end;
  53577   }
  53578   if (end < start) {
  53579     return(NULL);
  53580   }
  53581 
  53582   if (start == end) {
  53583     return(*list);
  53584   }
  53585 
  53586   // start < end < len
  53587   int64_t n;
  53588   n = end - start;
  53589   l = MALLOC((size_t)(len-n+1) * sizeof(char *));
  53590   if (!l) {
  53591     return(NULL);
  53592   }
  53593   for (int64_t i=0;i < start;i++) {
  53594     l[i] = *((*list)+i);
  53595   }
  53596   for (int64_t i=0;i < n;i++) {
  53597     free(*((*list)+start+i));
  53598   }
  53599   for (int64_t i=start ; i < len-n ; i++) {
  53600     l[i] = *((*list)+n+i);
  53601   }
  53602   l[len-n] = NULL;
  53603 
  53604   free(*list);
  53605   *list = l;
  53606   return(l);
  53607 }
  53608 
  53609 /**
  53610  * list Remove String
  53611  * return list without elements from start and end in list
  53612  * the elements are removed without being freed
  53613  * negative indexes are allowed
  53614  *
  53615  * \param
  53616  *   list (this parameter is reallocated)
  53617  * \param
  53618  *   start index, must be in the list
  53619  * \param
  53620  *   end index, must be in the list
  53621  * \return
  53622  *   sliced list (you must free the pointer with listFreeS or free)
  53623  *   list copy when start=end or when start and end are not set correctly
  53624  *   NULL when list is empty
  53625  *   NULL when list is NULL or when end is under start
  53626  *   NULL error
  53627  */
  53628 char **iListRemoveS(char ***list, int64_t start, int64_t end) {
  53629   char **l = NULL;
  53630   int64_t len;
  53631 
  53632   // sanity checks
  53633   if (!list || !*list) {
  53634     return(NULL);
  53635   }
  53636 
  53637   len = (int64_t)listLengthS(*list);
  53638 
  53639   if (len == 0) {
  53640     return(NULL);
  53641   }
  53642 
  53643   if (start >= len) {
  53644     start = len;
  53645   }
  53646   if (end > len) {
  53647     end = len;
  53648   }
  53649   if (start <= -len) {
  53650     start = -len;
  53651   }
  53652   if (end <= -len) {
  53653     end = -len;
  53654   }
  53655   if (start < 0) {
  53656     start = len + start;
  53657   }
  53658   if (end <= 0) {
  53659     end = len + end;
  53660   }
  53661   if (end < start) {
  53662     return(NULL);
  53663   }
  53664 
  53665   if (start == end) {
  53666     return(*list);
  53667   }
  53668 
  53669   // start < end < len
  53670   int64_t n;
  53671   n = end - start;
  53672   l = MALLOC((size_t)(len-n+1) * sizeof(char *));
  53673   if (!l) {
  53674     return(NULL);
  53675   }
  53676   for (int64_t i=0;i < start;i++) {
  53677     l[i] = *((*list)+i);
  53678   }
  53679   for (int64_t i=start ; i < len-n ; i++) {
  53680     l[i] = *((*list)+n+i);
  53681   }
  53682   l[len-n] = NULL;
  53683 
  53684   free(*list);
  53685   *list = l;
  53686   return(l);
  53687 }
  53688 
  53689 /**
  53690  * list Delete Element String
  53691  * return new list without the element at index
  53692  * negative indexes are allowed
  53693  *
  53694  * \param
  53695  *   list
  53696  * \param
  53697  *   index must be in the list
  53698  * \return
  53699  *   new list without the element at index (you must free the pointer with listFreeS)
  53700  *   NULL when list is empty
  53701  *   NULL when list is NULL
  53702  */
  53703 char **listDelElemS(char **list, int64_t index) {
  53704   char **l = NULL;
  53705   int64_t len;
  53706 
  53707   // sanity checks
  53708   if (!list) {
  53709     return(NULL);
  53710   }
  53711 
  53712   len = (int64_t)listLengthS(list);
  53713 
  53714   if (len == 0) {
  53715     return(NULL);
  53716   }
  53717 
  53718   if (index >= len) {
  53719     return(NULL);
  53720   }
  53721   if (index < -len) {
  53722     return(NULL);
  53723   }
  53724   if (index < 0) {
  53725     index = len + index;
  53726   }
  53727 
  53728   l = MALLOC((size_t)(len-1+1) * sizeof(char *));
  53729   if (!l) {
  53730     return(NULL);//LCOV_EXCL_LINE
  53731   }
  53732   for (int64_t i=0;i < index;i++) {
  53733     l[i] = strdup(*(list+i));
  53734   }
  53735   for (int64_t i=index ; i < len-1 ; i++) {
  53736     l[i] = strdup(*(list+1+i));
  53737   }
  53738   l[len-1] = NULL;
  53739   return(l);
  53740 }
  53741 
  53742 
  53743 /**
  53744  * list Delete Element String
  53745  * return list without the element at index
  53746  * negative indexes are allowed
  53747  *
  53748  * \param
  53749  *   list (this parameter is reallocated)
  53750  * \param
  53751  *   index must be in the list
  53752  * \return
  53753  *   new list without the element at index (you must free the pointer with listFreeS)
  53754  *   NULL when list is empty
  53755  *   NULL when list is NULL
  53756  *   NULL error
  53757  */
  53758 char **iListDelElemS(char ***list, int64_t index) {
  53759   char **l = NULL;
  53760   int64_t len;
  53761 
  53762   // sanity checks
  53763   if (!list || !*list) {
  53764     return(NULL);
  53765   }
  53766 
  53767   len = (int64_t)listLengthS(*list);
  53768 
  53769   if (len == 0) {
  53770     return(NULL);
  53771   }
  53772 
  53773   if (index >= len) {
  53774     return(NULL);
  53775   }
  53776   if (index < -len) {
  53777     return(NULL);
  53778   }
  53779   if (index < 0) {
  53780     index = len + index;
  53781   }
  53782 
  53783   l = MALLOC((size_t)(len-1+1) * sizeof(char *));
  53784   if (!l) {
  53785     return(NULL);
  53786   }
  53787   for (int64_t i=0;i < index;i++) {
  53788     l[i] = *((*list)+i);
  53789   }
  53790   free(*((*list)+index));
  53791   for (int64_t i=index ; i < len-1 ; i++) {
  53792     l[i] = *((*list)+1+i);
  53793   }
  53794   l[len-1] = NULL;
  53795 
  53796   free(*list);
  53797   *list = l;
  53798   return(l);
  53799 }
  53800 
  53801 
  53802 /**
  53803  * list Remove Element String
  53804  * return list without the element at index
  53805  * the element is removed without being freed
  53806  * negative indexes are allowed
  53807  *
  53808  * \param
  53809  *   list (this parameter is reallocated)
  53810  * \param
  53811  *   index must be in the list
  53812  * \return
  53813  *   new list without the element at index (you must free the pointer with listFreeS)
  53814  *   NULL when list is empty
  53815  *   NULL when list is NULL
  53816  *   NULL error
  53817  */
  53818 char **iListRemoveElemS(char ***list, int64_t index) {
  53819   char **l = NULL;
  53820   int64_t len;
  53821 
  53822   // sanity checks
  53823   if (!list || !*list) {
  53824     return(NULL);
  53825   }
  53826 
  53827   len = (int64_t)listLengthS(*list);
  53828 
  53829   if (len == 0) {
  53830     return(NULL);
  53831   }
  53832 
  53833   if (index >= len) {
  53834     return(NULL);
  53835   }
  53836   if (index < -len) {
  53837     return(NULL);
  53838   }
  53839   if (index < 0) {
  53840     index = len + index;
  53841   }
  53842 
  53843   l = MALLOC((size_t)(len-1+1) * sizeof(char *));
  53844   if (!l) {
  53845     return(NULL);
  53846   }
  53847   for (int64_t i=0;i < index;i++) {
  53848     l[i] = *((*list)+i);
  53849   }
  53850   for (int64_t i=index ; i < len-1 ; i++) {
  53851     l[i] = *((*list)+1+i);
  53852   }
  53853   l[len-1] = NULL;
  53854 
  53855   free(*list);
  53856   *list = l;
  53857   return(l);
  53858 }
  53859 
  53860 
  53861 /**
  53862  * print list elements
  53863  * to stdout
  53864  *
  53865  * when list is NULL, returns directly without doing anything
  53866  *
  53867  * \param
  53868  *   list
  53869  * \return
  53870  *   nothing
  53871  *   1  success
  53872  *   0 error
  53873  */
  53874 int listPrintS(char **list) {
  53875 
  53876   if (!list) {
  53877     return(0);
  53878   }
  53879   forEachCharP(list, e) {
  53880     printf("%s\n", *e);
  53881   }
  53882   return(1);
  53883 }
  53884 
  53885 int listPrintCS(const char **list) {
  53886 
  53887   if (!list) {
  53888     return(0);
  53889   }
  53890   forEachCCharP(list, e) {
  53891     printf("%s\n", *e);
  53892   }
  53893   return(1);
  53894 }
  53895 
  53896 /**
  53897  * list Sort String Compare function
  53898  *
  53899  * in:
  53900  *   a
  53901  *   b
  53902  * out:
  53903  *   test result
  53904  */
  53905 internal int listSortSCmp(const void * a, const void * b) {
  53906 
  53907   // sanity checks
  53908   if (!a && !b) {
  53909     return(0);
  53910   }
  53911   if (!a && b) {
  53912     return(-1);
  53913   }
  53914   if (a && !b) {
  53915     return(1);
  53916   }
  53917   return(strcmp(*(char *const*)a,*(char *const*)b));
  53918 }
  53919 
  53920 /**
  53921  * list Sort String
  53922  * duplicate list and sort
  53923  *
  53924  * \param
  53925  *   list
  53926  * \return
  53927  *   new sorted list (you must free the pointer with listFreeS)
  53928  *   empty list when list is empty
  53929  *   NULL when list is NULL
  53930  */
  53931 char **listSortS(char **list) {
  53932   size_t len;
  53933   char **l = NULL;
  53934 
  53935   // sanity checks
  53936   if (!list) {
  53937     return(NULL);
  53938   }
  53939   len = listLengthS(list);
  53940   // duplicate
  53941   l = listDupS(list);
  53942   if (!len) {
  53943     return(l);
  53944   }
  53945   // sort
  53946   qsort(l, len, sizeof(char *), listSortSCmp);
  53947   return(l);
  53948 }
  53949 
  53950 /**
  53951  * list Sort String
  53952  *
  53953  * \param
  53954  *   list
  53955  * \return
  53956  *   sorted list
  53957  *   empty list when list is empty
  53958  *   unchanged list when list is NULL
  53959  *   NULL error
  53960  */
  53961 char **iListSortS(char ***list) {
  53962   size_t len;
  53963 
  53964   // sanity checks
  53965   if (!list || !*list) {
  53966     return(NULL);
  53967   }
  53968   len = listLengthS(*list);
  53969   if (!len) {
  53970     return(NULL);
  53971   }
  53972   // sort
  53973   qsort(*list, len, sizeof(char *), listSortSCmp);
  53974   return(*list);
  53975 }
  53976 
  53977 /**
  53978  * list Sort String
  53979  * duplicate list and sort
  53980  *
  53981  * \param
  53982  *   list
  53983  *   compareFunction
  53984  * \return
  53985  *   new sorted list (you must free the pointer with listFreeS)
  53986  *   empty list when list is empty
  53987  *   NULL when list is NULL
  53988  */
  53989 char **listSortFS(char **list, shCmpt compareFunction) {
  53990   size_t len;
  53991   char **l = NULL;
  53992 
  53993   // sanity checks
  53994   if (!list || !compareFunction) {
  53995     return(NULL);
  53996   }
  53997   len = listLengthS(list);
  53998   // duplicate
  53999   l = listDupS(list);
  54000   if (!len) {
  54001     return(l);
  54002   }
  54003   // sort
  54004   qsort(l, len, sizeof(char *), compareFunction);
  54005   return(l);
  54006 }
  54007 
  54008 /**
  54009  * list Sort String
  54010  *
  54011  * \param
  54012  *   list
  54013  *   compareFunction
  54014  * \return
  54015  *   sorted list
  54016  *   empty list when list is empty
  54017  *   unchanged list when list is NULL
  54018  *   NULL error
  54019  */
  54020 char **iListSortFS(char ***list, shCmpt compareFunction) {
  54021   size_t len;
  54022 
  54023   // sanity checks
  54024   if (!list || !*list) {
  54025     return(NULL);
  54026   }
  54027   len = listLengthS(*list);
  54028   if (!len) {
  54029     return(NULL);
  54030   }
  54031   // sort
  54032   qsort(*list, len, sizeof(char *), compareFunction);
  54033   return(*list);
  54034 }
  54035 
  54036 
  54037 /**
  54038  * ignore case list Sort String Compare function
  54039  *
  54040  * in:
  54041  *   a
  54042  *   b
  54043  * out:
  54044  *   test result
  54045  */
  54046 internal int icListSortSCmp(const void * a, const void * b) {
  54047 
  54048   // sanity checks
  54049   if (!a && !b) {
  54050     return(0);
  54051   }
  54052   if (!a && b) {
  54053     return(-1);
  54054   }
  54055   if (a && !b) {
  54056     return(1);
  54057   }
  54058   return(strcasecmp(*(char *const*)a,*(char *const*)b));
  54059 }
  54060 
  54061 /**
  54062  * ignore case list Sort String
  54063  * duplicate list and sort
  54064  *
  54065  * \param
  54066  *   list
  54067  * \return
  54068  *   new sorted list (you must free the pointer with listFreeS)
  54069  *   empty list when list is empty
  54070  *   NULL when list is NULL
  54071  */
  54072 char **icListSortS(char **list) {
  54073   size_t len;
  54074   char **l = NULL;
  54075 
  54076   // sanity checks
  54077   if (!list) {
  54078     return(NULL);
  54079   }
  54080   len = listLengthS(list);
  54081   // duplicate
  54082   l = listDupS(list);
  54083   if (!len) {
  54084     return(l);
  54085   }
  54086   // sort
  54087   qsort(l, len, sizeof(char *), icListSortSCmp);
  54088   return(l);
  54089 }
  54090 
  54091 /**
  54092  * ignore case list Sort String
  54093  *
  54094  * \param
  54095  *   list
  54096  * \return
  54097  *   sorted list
  54098  *   empty list when list is empty
  54099  *   unchanged list when list is NULL
  54100  *   NULL error
  54101  */
  54102 char **iicListSortS(char ***list) {
  54103   size_t len;
  54104 
  54105   // sanity checks
  54106   if (!list || !*list) {
  54107     return(NULL);
  54108   }
  54109   len = listLengthS(*list);
  54110   if (!len) {
  54111     return(NULL);
  54112   }
  54113   // sort
  54114   qsort(*list, len, sizeof(char *), icListSortSCmp);
  54115   return(*list);
  54116 }
  54117 
  54118 
  54119 /**
  54120  * return text from filePath in a list
  54121  * new line characters are removed
  54122  *
  54123  * \param
  54124  *   filePath: file path
  54125  * \return
  54126  *   lines in list (you must free the pointer with listFreeS)
  54127  *   empty list when the file is empty
  54128  *   NULL on failure
  54129  */
  54130 /* this readText has the same performance as the original and takes twice the amount of RAM */
  54131 /* most of the cycles are spent in listLengthS */
  54132 /* char **readText(const char *filePath) */
  54133 /*   size_t len */
  54134 /*   char *buf */
  54135 /*   char **list */
  54136 /*  */
  54137 /*   // sanity checks */
  54138 /*   if !filePath */
  54139 /*     return NULL */
  54140 /*  */
  54141 /*   buf = readFileToS(filePath) */
  54142 /*   if !buf */
  54143 /*     return NULL */
  54144 /*   len = fileSize(filePath) */
  54145 /*   if len = 0 */
  54146 /*     free buf */
  54147 /*     return listEmptySF() */
  54148 /*   if buf[len-1] = '\n' */
  54149 /*     // remove last return char to avoid empty line in split */
  54150 /*     buf[len-1] = 0 */
  54151 /*   list = split(buf, "\n") */
  54152 /*   free buf */
  54153 /*   return list */
  54154 
  54155 char **readText(const char *filePath) {
  54156   FILE *fp = NULL;
  54157   size_t len;
  54158   char* line = NULL;
  54159   ssize_t read;
  54160   char **list = NULL;
  54161 
  54162   // sanity checks
  54163   if (!filePath || isBlankS(filePath)) {
  54164     return(NULL);
  54165   }
  54166   fp = fopen(filePath, "r");
  54167   if (!fp) {
  54168     pFuncError
  54169     shEPrintfS("The path was: \"%s\"\n", filePath);
  54170     return(NULL);
  54171   }
  54172   // read all lines
  54173   read = getline(&line, &len, fp);
  54174   size_t index = 0;
  54175   size_t alloc = sizeof(*list);
  54176   list         = MALLOC(alloc);
  54177   if (!list) {
  54178     goto end;
  54179   }
  54180   *list        = NULL;
  54181   while (read != -1) {
  54182     {
  54183         char* pos = NULL;
  54184         pos = strchr(line, '\n');
  54185         if (pos != NULL)
  54186             *pos = '\0';
  54187     }
  54188     size_t newsize = makeRoom((index+1) * sizeof(*list), alloc, sizeof(*list));
  54189     if (newsize != alloc) {
  54190       char **tmp = REALLOC(list, newsize);
  54191       if (!tmp) {
  54192         listFreeS(list);
  54193         list = NULL;
  54194         goto end;
  54195       }
  54196       alloc = newsize;
  54197       list  = tmp;
  54198     }
  54199     list[index]   = strdup(line);
  54200     list[++index] = NULL;
  54201     read = getline(&line, &len, fp);
  54202   }
  54203   end:
  54204   fclose(fp);
  54205   free(line);
  54206   return(list);
  54207 }
  54208 
  54209 /**
  54210  * return text from stream fp in a list
  54211  * new line characters are removed
  54212  *
  54213  * \param
  54214  *   fp: file stream
  54215  * \return
  54216  *   lines in list (you must free the pointer with listFreeS)
  54217  *   empty list when there is no data in the stream
  54218  *   NULL on failure
  54219  */
  54220 char **readStream(FILE *fp) {
  54221   size_t len;
  54222   char* line = NULL;
  54223   ssize_t read;
  54224   char **list = NULL;
  54225 
  54226   // sanity checks
  54227   if (!fp) {
  54228     return(NULL);
  54229   }
  54230   // read all lines
  54231   read = getline(&line, &len, (FILE *) fp);
  54232   while (read != -1) {
  54233     {
  54234         char* pos = NULL;
  54235         pos = strchr(line, '\n');
  54236         if (pos != NULL)
  54237             *pos = '\0';
  54238     }
  54239     pErrorNULL(iListPushS(&list, line));
  54240     line = NULL;
  54241     len  = 0;
  54242     read = getline(&line, &len, (FILE *) fp);
  54243   }
  54244   free(line);
  54245   if (!list) {
  54246     // nothing was read
  54247     listEmptyS(list);
  54248   }
  54249   return(list);
  54250 }
  54251 
  54252 /**
  54253  * write list to filePath
  54254  *
  54255  * \param
  54256  *   filePath
  54257  * \param
  54258  *   list
  54259  * \return
  54260  *   true success
  54261  *   false failed, filePath or list are NULL
  54262  */
  54263 bool writeText(const char *filePath, char **list) {
  54264   FILE *fp = NULL;
  54265 
  54266   // sanity checks
  54267   if (!filePath || isBlankS(filePath)) {
  54268     return(false);
  54269   }
  54270 
  54271   fp = fopen(filePath, "w");
  54272   if (!fp) {
  54273     pFuncError
  54274     shEPrintfS("The path was: \"%s\"\n", filePath);
  54275     return(false);
  54276   }
  54277   if (!list) {
  54278     fclose(fp);
  54279     return(false);
  54280   }
  54281   forEachCharP(list, e) {
  54282     // add new line
  54283     fprintf(fp, "%s\n", *e);
  54284   }
  54285   fclose(fp);
  54286   return(true);
  54287 }
  54288 
  54289 /**
  54290  * write const list to filePath
  54291  *
  54292  * \param
  54293  *   filePath
  54294  * \param
  54295  *   list
  54296  * \return
  54297  *   true success
  54298  *   false failed, filePath or list are NULL
  54299  */
  54300 bool writeCText(const char *filePath, const char **list) {
  54301   FILE *fp = NULL;
  54302 
  54303   // sanity checks
  54304   if (!filePath || isBlankS(filePath)) {
  54305     return(false);
  54306   }
  54307 
  54308   fp = fopen(filePath, "w");
  54309   if (!fp) {
  54310     pFuncError
  54311     shEPrintfS("The path was: \"%s\"\n", filePath);
  54312     return(false);
  54313   }
  54314   if (!list) {
  54315     fclose(fp);
  54316     return(false);
  54317   }
  54318   forEachCCharP(list, e) {
  54319     // add new line
  54320     fprintf(fp, "%s\n", *e);
  54321   }
  54322   fclose(fp);
  54323   return(true);
  54324 }
  54325 
  54326 /**
  54327  * write list to stream
  54328  *
  54329  * \param
  54330  *   fp: file stream
  54331  * \param
  54332  *   list
  54333  * \return
  54334  *   true success
  54335  *   false failed, fp or list are NULL
  54336  */
  54337 bool writeStream(FILE *fp, char **list) {
  54338 
  54339   // sanity checks
  54340   if (!fp || !list) {
  54341     return(false);
  54342   }
  54343   forEachCharP(list, e) {
  54344     // add new line
  54345     fprintf((FILE*)fp, "%s\n", *e);
  54346   }
  54347   return(true);
  54348 }
  54349 
  54350 /**
  54351  * write const list to stream
  54352  *
  54353  * \param
  54354  *   fp: file stream
  54355  * \param
  54356  *   list
  54357  * \return
  54358  *   true success
  54359  *   false failed, fp or list are NULL
  54360  */
  54361 bool writeCStream(FILE *fp, const char **list) {
  54362 
  54363   // sanity checks
  54364   if (!fp || !list) {
  54365     return(false);
  54366   }
  54367   forEachCCharP(list, e) {
  54368     // add new line
  54369     fprintf((FILE*)fp, "%s\n", *e);
  54370   }
  54371   return(true);
  54372 }
  54373 
  54374 /**
  54375  * append list to filePath
  54376  *
  54377  * \param
  54378  *   filePath
  54379  * \param
  54380  *   list
  54381  * \return
  54382  *   true success
  54383  *   false failed, filePath or list are NULL
  54384  */
  54385 bool appendText(const char *filePath, char **list) {
  54386   FILE *fp = NULL;
  54387 
  54388   // sanity checks
  54389   if (!filePath || isBlankS(filePath)) {
  54390     return(false);
  54391   }
  54392 
  54393   fp = fopen(filePath, "a");
  54394   if (!fp) {
  54395     pFuncError
  54396     shEPrintfS("The path was: \"%s\"\n", filePath);
  54397     return(false);
  54398   }
  54399   if (!list) {
  54400     fclose(fp);
  54401     return(false);
  54402   }
  54403   forEachCharP(list, e) {
  54404     // add new line
  54405     fprintf(fp, "%s\n", *e);
  54406   }
  54407   fclose(fp);
  54408   return(true);
  54409 }
  54410 
  54411 /**
  54412  * append const list to filePath
  54413  *
  54414  * \param
  54415  *   filePath
  54416  * \param
  54417  *   list
  54418  * \return
  54419  *   true success
  54420  *   false failed, filePath or list are NULL
  54421  */
  54422 bool appendCText(const char *filePath, const char **list) {
  54423   FILE *fp = NULL;
  54424 
  54425   // sanity checks
  54426   if (!filePath || isBlankS(filePath)) {
  54427     return(false);
  54428   }
  54429 
  54430   fp = fopen(filePath, "a");
  54431   if (!fp) {
  54432     pFuncError
  54433     shEPrintfS("The path was: \"%s\"\n", filePath);
  54434     return(false);
  54435   }
  54436   if (!list) {
  54437     fclose(fp);
  54438     return(false);
  54439   }
  54440   forEachCCharP(list, e) {
  54441     // add new line
  54442     fprintf(fp, "%s\n", *e);
  54443   }
  54444   fclose(fp);
  54445   return(true);
  54446 }
  54447 
  54448 /**
  54449  * execute command
  54450  * return stdout from cmd
  54451  *
  54452  * \param
  54453  *   cmd: command
  54454  * \return
  54455  *   stdout from command in a list (you must free the pointer with listFreeS)
  54456  *   empty list when command didnt produce any output
  54457  *   NULL when cmd is NULL
  54458  */
  54459 char **execOut(const char *cmd) {
  54460   FILE* fp = NULL;
  54461   char **list = NULL;
  54462 
  54463   // sanity checks
  54464   if (!cmd) {
  54465     return(NULL);
  54466   }
  54467 
  54468   fp = popen(cmd, "r");
  54469   if (!fp) {
  54470     pFuncError
  54471     shEPrintfS("The command was: \"%s\"\n", cmd);
  54472     return(NULL);//LCOV_EXCL_LINE
  54473   }
  54474 
  54475   list = readStream(fp);
  54476 
  54477   pclose(fp);
  54478   return(list);
  54479 }
  54480 
  54481 /**
  54482  * execute system command with formatting
  54483  *
  54484  * \param
  54485  *  formatting
  54486  * \return
  54487  *   stdout from command in a list (you must free the pointer with listFreeS)
  54488  *   empty list when command didnt produce any output
  54489  *   NULL when cmd is NULL
  54490  */
  54491 char **systemOutf(const char *fmt, ...) {
  54492   char *cmd = NULL;
  54493   va_list pl;
  54494 
  54495   if (!fmt) {
  54496     return(NULL);
  54497   }
  54498   va_start(pl, fmt);
  54499   if (vasprintf(&cmd, fmt, pl) == -1) {
  54500     return(NULL);
  54501   }
  54502   va_end(pl);
  54503 
  54504   char **r = execOut(cmd);
  54505   free(cmd);
  54506   return(r);
  54507 }
  54508 
  54509 /**
  54510  * execute system command with formatting
  54511  *
  54512  * \param
  54513  *  formatting
  54514  * \return
  54515  *  system return code
  54516  */
  54517 int systemf(const char *fmt, ...) {
  54518   char *cmd = NULL;
  54519   va_list pl;
  54520 
  54521   if (!fmt) {
  54522     return(-1);
  54523   }
  54524   va_start(pl, fmt);
  54525   if (vasprintf(&cmd, fmt, pl) == -1) {
  54526     va_end(pl);
  54527     return(-1);
  54528   }
  54529   va_end(pl);
  54530 
  54531   return(systemNFree(cmd));
  54532 }
  54533 
  54534 /**
  54535  * run command in default shell
  54536  *
  54537  * Exit value equals to 127 is considered an error
  54538  * because if a shell could not be executed in the child process, then
  54539  * the return value from system() is 127 (man 3 system).
  54540  *
  54541  * \param
  54542  *  cmd command string
  54543  * \return
  54544  *  command exit code
  54545  *  -1 when cmd is NULL or system exited with errors
  54546  */
  54547 int commandF(const char *cmd, int line, const char *thisFunc, const char *thisFileName) {
  54548 
  54549   if (!cmd) {
  54550     shEPrintfS("\nSystem Error at %d, %s, %s. The command was: NULL\n", line, thisFunc, thisFileName);
  54551     return(-1);
  54552   }
  54553 
  54554   int r = system(cmd);
  54555 
  54556   if (!WIFEXITED(r)) {
  54557     shEPrintfS("\nSystem Error at %d, %s, %s. The command was: \"%s\"\n", line, thisFunc, thisFileName, cmd);
  54558     return(-1);
  54559   }
  54560 
  54561   r = WEXITSTATUS(r);;
  54562 
  54563   if (r == 127) {
  54564     shEPrintfS("\nSystem Error at %d, %s, %s. The command was: \"%s\"\n", line, thisFunc, thisFileName, cmd);
  54565     return(-1);
  54566   }
  54567 
  54568   return(r);
  54569 }
  54570 
  54571 /**
  54572  * run command with formatting in default shell
  54573  *
  54574  * Exit value equals to 127 is considered an error
  54575  * because if a shell could not be executed in the child process, then
  54576  * the return value from system() is 127 (man 3 system).
  54577  *
  54578  * \param
  54579  *  formatting
  54580  * \return
  54581  *  command exit code
  54582  *  -1 when cmd is NULL or system exited with errors
  54583  */
  54584 int commandfF(int line, const char *thisFunc, const char *thisFileName, const char *fmt, ...) {
  54585   char *cmd = NULL;
  54586   va_list pl;
  54587 
  54588   if (!fmt) {
  54589     return(-1);
  54590   }
  54591   va_start(pl, fmt);
  54592   if (vasprintf(&cmd, fmt, pl) == -1) {
  54593     va_end(pl);
  54594     return(-1);
  54595   }
  54596   va_end(pl);
  54597 
  54598   return(commandNFreeF(cmd, line, thisFunc, thisFileName));
  54599 }
  54600 
  54601 /**
  54602  * run command in default shell and free the cmd parameter
  54603  *
  54604  * Exit value equals to 127 is considered an error
  54605  * because if a shell could not be executed in the child process, then
  54606  * the return value from system() is 127 (man 3 system).
  54607  *
  54608  * \param
  54609  *  cmd command string
  54610  * \return
  54611  *  command exit code
  54612  *  -1 when cmd is NULL or system exited with errors
  54613  */
  54614 int commandNFreeF(char *cmd, int line, const char *thisFunc, const char *thisFileName) {
  54615   int r;
  54616 
  54617   r = commandF(cmd, line, thisFunc, thisFileName);
  54618   free(cmd);
  54619   return(r);
  54620 }
  54621 
  54622 /**
  54623  * list Equal String
  54624  * compare each element of list1 and list2
  54625  *
  54626  * \param
  54627  *   2 lists
  54628  * \return
  54629  *   true the lists have identical elements
  54630  *   false they differ
  54631  */
  54632 bool listEqS(char **list1, char **list2) {
  54633 
  54634   // sanity checks
  54635   if (!list1 || !list2) {
  54636     return(false);
  54637   }
  54638   if (listLengthS(list1) != listLengthS(list2)) {
  54639     return(false);
  54640   }
  54641 
  54642   // compare elements
  54643   enumerateCharP(list1, e, i) {
  54644     if (!strEq(*e, list2[i])) {
  54645       return(false);
  54646   }
  54647     }
  54648 
  54649   return(true);
  54650 }
  54651 
  54652 /**
  54653  * const(list2) list Equal String
  54654  * compare each element of list1 and list2
  54655  *
  54656  * \param
  54657  *   2 lists
  54658  * \return
  54659  *   true the lists have identical elements
  54660  *   false they differ
  54661  */
  54662 bool listEqCS(char **list1, const char **list2) {
  54663 
  54664   // sanity checks
  54665   if (!list1 || !list2) {
  54666     return(false);
  54667   }
  54668   if (listLengthS(list1) != listLengthCS(list2)) {
  54669     return(false);
  54670   }
  54671 
  54672   // compare elements
  54673   enumerateCharP(list1, e, i) {
  54674     if (!strEq(*e, list2[i])) {
  54675       return(false);
  54676   }
  54677     }
  54678 
  54679   return(true);
  54680 }
  54681 
  54682 /**
  54683  * const(list1) list Equal String
  54684  * compare each element of list1 and list2
  54685  *
  54686  * \param
  54687  *   2 lists
  54688  * \return
  54689  *   true the lists have identical elements
  54690  *   false they differ
  54691  */
  54692 bool listEqC1S(const char **list1, char **list2) {
  54693 
  54694   // sanity checks
  54695   if (!list1 || !list2) {
  54696     return(false);
  54697   }
  54698   if (listLengthCS(list1) != listLengthS(list2)) {
  54699     return(false);
  54700   }
  54701 
  54702   // compare elements
  54703   enumerateCCharP(list1, e, i) {
  54704     if (!strEq(*e, list2[i])) {
  54705       return(false);
  54706   }
  54707     }
  54708 
  54709   return(true);
  54710 }
  54711 
  54712 /**
  54713  * const(list1 and 2) list Equal String
  54714  * compare each element of list1 and list2
  54715  *
  54716  * \param
  54717  *   2 lists
  54718  * \return
  54719  *   true the lists have identical elements
  54720  *   false they differ
  54721  */
  54722 bool listEqCCS(const char **list1, const char **list2) {
  54723 
  54724   // sanity checks
  54725   if (!list1 || !list2) {
  54726     return(false);
  54727   }
  54728   if (listLengthCS(list1) != listLengthCS(list2)) {
  54729     return(false);
  54730   }
  54731 
  54732   // compare elements
  54733   enumerateCCharP(list1, e, i) {
  54734     if (!strEq(*e, list2[i])) {
  54735       return(false);
  54736   }
  54737     }
  54738 
  54739   return(true);
  54740 }
  54741 
  54742 /**
  54743  * return true when list has string
  54744  *
  54745  * \param
  54746  *   list
  54747  * \param
  54748  *   string
  54749  * \return
  54750  *   true when list has string
  54751  *   false when the string is not found
  54752  *   false when list or string are NULL
  54753  */
  54754 bool listHasS(char **list, const char *string) {
  54755 
  54756   if (!list || !string) {
  54757     return(false);
  54758   }
  54759   if (listIndexOfS(list, string) == -1) {
  54760     return(false);
  54761   }
  54762   return(true);
  54763 }
  54764 
  54765 /**
  54766  * return true when const list has string
  54767  *
  54768  * \param
  54769  *   list
  54770  * \param
  54771  *   string
  54772  * \return
  54773  *   true when list has string
  54774  *   false when the string is not found
  54775  *   false when list or string are NULL
  54776  */
  54777 bool listHasCS(const char **list, const char *string) {
  54778 
  54779   if (!list || !string) {
  54780     return(false);
  54781   }
  54782   if (listIndexOfCS(list, string) == -1) {
  54783     return(false);
  54784   }
  54785   return(true);
  54786 }
  54787 
  54788 bool listHasCharS(char **list, char c) {
  54789 
  54790   charToS(s, c);
  54791   return(listHasS(list, s));
  54792 }
  54793 
  54794 bool listHasCharCS(const char **list, char c) {
  54795 
  54796   charToS(s, c);
  54797   return(listHasCS(list, s));
  54798 }
  54799 
  54800 /**
  54801  * return index of string in list
  54802  *
  54803  * \param
  54804  *   list
  54805  * \param
  54806  *   string
  54807  * \return
  54808  *   index
  54809  *   -1 when the string is not found
  54810  *   -1 when list or string are NULL
  54811  */
  54812 ssize_t listIndexOfS(char **list, const char *string) {
  54813   bool found = false;;
  54814 
  54815   // sanity checks
  54816   if (!list || !string) {
  54817     return(-1);
  54818   }
  54819   // search string in elements
  54820   enumerateCharP(list, e, i) {
  54821     if (strEq(*e, string)) {
  54822       found = true;
  54823       break;
  54824   }
  54825     }
  54826   if (found) {
  54827      return((ssize_t)i);
  54828   }
  54829   else {
  54830      return(-1);
  54831 }
  54832   }
  54833 
  54834 /**
  54835  * return index of string in const list
  54836  *
  54837  * \param
  54838  *   list
  54839  * \param
  54840  *   string
  54841  * \return
  54842  *   index
  54843  *   -1 when the string is not found
  54844  *   -1 when list or string are NULL
  54845  */
  54846 ssize_t listIndexOfCS(const char **list, const char *string) {
  54847   bool found = false;;
  54848 
  54849   // sanity checks
  54850   if (!list || !string) {
  54851     return(-1);
  54852   }
  54853   // search string in elements
  54854   enumerateCCharP(list, e, i) {
  54855     if (strEq(*e, string)) {
  54856       found = true;
  54857       break;
  54858   }
  54859     }
  54860   if (found) {
  54861      return((ssize_t)i);
  54862   }
  54863   else {
  54864      return(-1);
  54865 }
  54866   }
  54867 
  54868 ssize_t listIndexOfCharS(char **list, char c) {
  54869 
  54870   charToS(s, c);
  54871   return(listIndexOfS(list, s));
  54872 }
  54873 
  54874 ssize_t listIndexOfCharCS(const char **list, char c) {
  54875 
  54876   charToS(s, c);
  54877   return(listIndexOfCS(list, s));
  54878 }
  54879 
  54880 /**
  54881  * list binary search string
  54882  *
  54883  * efficiently finds the index of string in list
  54884  * the list has to be sorted with for example listSortS
  54885  *
  54886  * \param
  54887  *   list
  54888  * \param
  54889  *   string to search
  54890  * \return
  54891  *   index of string
  54892  *   -1 string not found or NULL input pointers
  54893     */
  54894 ssize_t listBinarySearchS(char **list, const char *string) {
  54895   ssize_t first = 0, middle, last;;
  54896 
  54897   if (!list || !string) {
  54898     return(-1);
  54899   }
  54900 
  54901   last   = (ssize_t)(listLengthS(list) - 1);
  54902   while (first <= last) {
  54903     middle = (first+last)/2;
  54904     if (strcmp(list[middle], string) < 0) {
  54905       first = middle + 1;
  54906     }
  54907     else if (strcmp(list[middle], string) == 0) {
  54908       return(middle);
  54909     }
  54910     else {
  54911       last = middle -1;
  54912   }
  54913     }
  54914   return(-1);
  54915 }
  54916 
  54917 ssize_t listBinarySearchCharS(char **list, char c) {
  54918 
  54919   charToS(s, c);
  54920   return(listBinarySearchS(list, s));
  54921 }
  54922 
  54923 /**
  54924  * Uniquify elements of list
  54925  * duplicate list
  54926  * each elements are unique in the new list
  54927  *
  54928  * \param
  54929  *   list
  54930  * \return
  54931  *   new list with unique elements (you must free the pointer with listFreeS)
  54932  *   empty list when list is empty
  54933  *   NULL when list is NULL
  54934  */
  54935 char **listUniqS(char **list) {
  54936   char **r = NULL;
  54937 
  54938   // sanity checks
  54939   if (!list) {
  54940     return(NULL);
  54941   }
  54942 
  54943   size_t len = listLengthS(list);
  54944 
  54945   if (!len) {
  54946     listEmptyS(r);
  54947     return(r);
  54948   }
  54949   pErrorNULL(listPushS(&r, list[0]));
  54950   // one element list
  54951   if (len == 1) {
  54952     return(r);
  54953   }
  54954   // push element to new list if it is not already in new list
  54955   forEachCharP(list, e) {
  54956     if (listIndexOfS(r, *e) == -1) {
  54957       pErrorNULL(listPushS(&r, *e));
  54958   }
  54959     }
  54960   return(r);
  54961 }
  54962 
  54963 /**
  54964  * Uniquify elements of list
  54965  * each elements are unique in the list
  54966  *
  54967  * \param
  54968  *   list (this parameter is reallocated)
  54969  * \return
  54970  *   list with unique elements (you must free the pointer with listFreeS)
  54971  *   empty list when list is empty
  54972  *   unchanged list when list is NULL
  54973  *   NULL error
  54974  */
  54975 char **iListUniqS(char ***list) {
  54976   char **r = NULL;
  54977 
  54978   // sanity checks
  54979   if (!list || !*list) {
  54980     return(NULL);
  54981   }
  54982 
  54983   size_t len = listLengthS(*list);
  54984 
  54985   if (!len) {
  54986     listEmptyS(r);
  54987   }
  54988   else if (len == 1) {
  54989     // one element list
  54990     pErrorNULL(iListPushS(&r, (*list)[0]));
  54991   }
  54992   else {
  54993     // push element to new list if it is not already in new list
  54994     forEachCharP(*list, e) {
  54995       if (listIndexOfS(r, *e) == -1) {
  54996         pErrorNULL(iListPushS(&r, *e));
  54997       }
  54998       else {
  54999         free(*e);
  55000   }
  55001     }
  55002       }
  55003 
  55004   free(*list);
  55005   *list = r;
  55006   return(r);
  55007 }
  55008 
  55009 /**
  55010  * ignore case list Equal String
  55011  * compare each element of list1 and list2
  55012  *
  55013  * \param
  55014  *   2 lists
  55015  * \return
  55016  *   true the lists have identical elements
  55017  *   false they differ
  55018  */
  55019 bool icListEqS(char **list1, char **list2) {
  55020 
  55021   // sanity checks
  55022   if (!list1 || !list2) {
  55023     return(false);
  55024   }
  55025   if (listLengthS(list1) != listLengthS(list2)) {
  55026     return(false);
  55027   }
  55028 
  55029   // compare elements
  55030   enumerateCharP(list1, e, i) {
  55031     if (!icEqS(*e, list2[i])) {
  55032       return(false);
  55033   }
  55034     }
  55035 
  55036   return(true);
  55037 }
  55038 
  55039 /**
  55040  * ignore case const(list2) list Equal String
  55041  * compare each element of list1 and list2
  55042  *
  55043  * \param
  55044  *   2 lists
  55045  * \return
  55046  *   true the lists have identical elements
  55047  *   false they differ
  55048  */
  55049 bool icListEqCS(char **list1, const char **list2) {
  55050 
  55051   // sanity checks
  55052   if (!list1 || !list2) {
  55053     return(false);
  55054   }
  55055   if (listLengthS(list1) != listLengthCS(list2)) {
  55056     return(false);
  55057   }
  55058 
  55059   // compare elements
  55060   enumerateCharP(list1, e, i) {
  55061     if (!icEqS(*e, list2[i])) {
  55062       return(false);
  55063   }
  55064     }
  55065 
  55066   return(true);
  55067 }
  55068 
  55069 /**
  55070  * ignore case const(list1) list Equal String
  55071  * compare each element of list1 and list2
  55072  *
  55073  * \param
  55074  *   2 lists
  55075  * \return
  55076  *   true the lists have identical elements
  55077  *   false they differ
  55078  */
  55079 bool icListEqC1S(const char **list1, char **list2) {
  55080 
  55081   // sanity checks
  55082   if (!list1 || !list2) {
  55083     return(false);
  55084   }
  55085   if (listLengthCS(list1) != listLengthS(list2)) {
  55086     return(false);
  55087   }
  55088 
  55089   // compare elements
  55090   enumerateCCharP(list1, e, i) {
  55091     if (!icEqS(*e, list2[i])) {
  55092       return(false);
  55093   }
  55094     }
  55095 
  55096   return(true);
  55097 }
  55098 
  55099 /**
  55100  * ignore case const(list1 and 2) list Equal String
  55101  * compare each element of list1 and list2
  55102  *
  55103  * \param
  55104  *   2 lists
  55105  * \return
  55106  *   true the lists have identical elements
  55107  *   false they differ
  55108  */
  55109 bool icListEqCCS(const char **list1, const char **list2) {
  55110 
  55111   // sanity checks
  55112   if (!list1 || !list2) {
  55113     return(false);
  55114   }
  55115   if (listLengthCS(list1) != listLengthCS(list2)) {
  55116     return(false);
  55117   }
  55118 
  55119   // compare elements
  55120   enumerateCCharP(list1, e, i) {
  55121     if (!icEqS(*e, list2[i])) {
  55122       return(false);
  55123   }
  55124     }
  55125 
  55126   return(true);
  55127 }
  55128 
  55129 /**
  55130  * ignore case and return true when list has string
  55131  *
  55132  * \param
  55133  *   list
  55134  * \param
  55135  *   string
  55136  * \return
  55137  *   true when list has string
  55138  *   false when the string is not found
  55139  *   false when list or string are NULL
  55140  */
  55141 bool icListHasS(char **list, const char *string) {
  55142 
  55143   if (!list || !string) {
  55144     return(false);
  55145   }
  55146   if (icListIndexOfS(list, string) == -1) {
  55147     return(false);
  55148   }
  55149   return(true);
  55150 }
  55151 
  55152 bool icListHasCharS(char **list, char c) {
  55153 
  55154   charToS(s, c);
  55155   return(icListHasS(list, s));
  55156 }
  55157 
  55158 /**
  55159  * ignore case and return true when const list has string
  55160  *
  55161  * \param
  55162  *   list
  55163  * \param
  55164  *   string
  55165  * \return
  55166  *   true when list has string
  55167  *   false when the string is not found
  55168  *   false when list or string are NULL
  55169  */
  55170 bool icListHasCS(const char **list, const char *string) {
  55171 
  55172   if (!list || !string) {
  55173     return(false);
  55174   }
  55175   if (icListIndexOfCS(list, string) == -1) {
  55176     return(false);
  55177   }
  55178   return(true);
  55179 }
  55180 
  55181 bool icListHasCharCS(const char **list, char c) {
  55182 
  55183   charToS(s, c);
  55184   return(icListHasCS(list, s));
  55185 }
  55186 
  55187 /**
  55188  * ignore case and return index of string in list
  55189  *
  55190  * \param
  55191  *   list
  55192  * \param
  55193  *   string
  55194  * \return
  55195  *   index
  55196  *   -1 when the string is not found
  55197  *   -1 when list or string are NULL
  55198  */
  55199 ssize_t icListIndexOfS(char **list, const char *string) {
  55200   bool found = false;;
  55201 
  55202   // sanity checks
  55203   if (!list || !string) {
  55204     return(-1);
  55205   }
  55206   // search string in elements
  55207   enumerateCharP(list, e, i) {
  55208     if (icEqS(*e, string)) {
  55209       found = true;
  55210       break;
  55211   }
  55212     }
  55213   if (found) {
  55214      return((ssize_t)i);
  55215   }
  55216   else {
  55217      return(-1);
  55218 }
  55219   }
  55220 
  55221 /**
  55222  * ignore case and return index of string in const list
  55223  *
  55224  * \param
  55225  *   list
  55226  * \param
  55227  *   string
  55228  * \return
  55229  *   index
  55230  *   -1 when the string is not found
  55231  *   -1 when list or string are NULL
  55232  */
  55233 ssize_t icListIndexOfCS(const char **list, const char *string) {
  55234   bool found = false;;
  55235 
  55236   // sanity checks
  55237   if (!list || !string) {
  55238     return(-1);
  55239   }
  55240   // search string in elements
  55241   enumerateCCharP(list, e, i) {
  55242     if (icEqS(*e, string)) {
  55243       found = true;
  55244       break;
  55245   }
  55246     }
  55247   if (found) {
  55248      return((ssize_t)i);
  55249   }
  55250   else {
  55251      return(-1);
  55252 }
  55253   }
  55254 
  55255 ssize_t icListIndexOfCharS(char **list, char c) {
  55256 
  55257   charToS(s, c);
  55258   return(icListIndexOfS(list, s));
  55259 }
  55260 
  55261 ssize_t icListIndexOfCharCS(const char **list, char c) {
  55262 
  55263   charToS(s, c);
  55264   return(icListIndexOfCS(list, s));
  55265 }
  55266 
  55267 /**
  55268  * ignore case list binary search string
  55269  *
  55270  * efficiently finds the index of string in list
  55271  * the list has be sorted with for example listSortS
  55272  *
  55273  * \param
  55274  *   list
  55275  * \param
  55276  *   string to search
  55277  * \return
  55278  *   index of string
  55279  *   -1 string not found or NULL input pointers
  55280     */
  55281 ssize_t icListBinarySearchS(char **list, const char *string) {
  55282   ssize_t first = 0, middle, last;;
  55283 
  55284   if (!list || !string) {
  55285     return(-1);
  55286   }
  55287 
  55288   last   = (ssize_t)listLengthS(list) - 1;
  55289   while (first <= last) {
  55290     middle = (first+last)/2;
  55291     if (strcasecmp(list[middle], string) < 0) {
  55292       first = middle + 1;
  55293     }
  55294     else if (strcasecmp(list[middle], string) == 0) {
  55295       return(middle);
  55296     }
  55297     else {
  55298       last = middle -1;
  55299   }
  55300     }
  55301   return(-1);
  55302 }
  55303 
  55304 ssize_t icListBinarySearchCharS(char **list, char c) {
  55305 
  55306   charToS(s, c);
  55307   return(icListBinarySearchS(list, s));
  55308 }
  55309 
  55310 /**
  55311  * ignore case and uniquify elements of list
  55312  * duplicate list
  55313  * each elements are unique in the new list
  55314  *
  55315  * \param
  55316  *   list
  55317  * \return
  55318  *   new list with unique elements (you must free the pointer with listFreeS)
  55319  *   empty list when list is empty
  55320  *   NULL when list is NULL
  55321  */
  55322 char **icListUniqS(char **list) {
  55323   char **r = NULL;
  55324 
  55325   // sanity checks
  55326   if (!list) {
  55327     return(NULL);
  55328   }
  55329 
  55330   size_t len = listLengthS(list);
  55331 
  55332   if (!len) {
  55333     listEmptyS(r);
  55334     return(r);
  55335   }
  55336   pErrorNULL(listPushS(&r, list[0]));
  55337   // one element list
  55338   if (listLengthS(list) == 1) {
  55339     return(r);
  55340   }
  55341   // push element to new list if it is not already in new list
  55342   forEachCharP(list, e) {
  55343     if (icListIndexOfS(r, *e) == -1) {
  55344       pErrorNULL(listPushS(&r, *e));
  55345   }
  55346     }
  55347   return(r);
  55348 }
  55349 
  55350 /**
  55351  * ignore case and uniquify elements of list
  55352  * each elements are unique in the list
  55353  *
  55354  * \param
  55355  *   list (this parameter is reallocated)
  55356  * \return
  55357  *   list with unique elements (you must free the pointer with listFreeS)
  55358  *   empty list when list is empty
  55359  *   unchanged list when list is NULL
  55360  *   NULL error
  55361  */
  55362 char **iicListUniqS(char ***list) {
  55363   char **r = NULL;
  55364 
  55365   // sanity checks
  55366   if (!list || !*list) {
  55367     return(NULL);
  55368   }
  55369 
  55370   size_t len = listLengthS(*list);
  55371 
  55372   if (!len) {
  55373     listEmptyS(r);
  55374   }
  55375   else if (len == 1) {
  55376     // one element list
  55377     pErrorNULL(iListPushS(&r, (*list)[0]));
  55378   }
  55379   else {
  55380     // push element to new list if it is not already in new list
  55381     forEachCharP(*list, e) {
  55382       if (icListIndexOfS(r, *e) == -1) {
  55383         pErrorNULL(iListPushS(&r, *e));
  55384       }
  55385       else {
  55386         free(*e);
  55387   }
  55388     }
  55389       }
  55390 
  55391   free(*list);
  55392   *list = r;
  55393   return(r);
  55394 }
  55395 
  55396 /**
  55397  * remove empty strings from list
  55398  *
  55399  * \param
  55400  *   list
  55401  * \return
  55402  *   list without empty strings (you must free the pointer with listFreeS)
  55403  *   empty list when list is empty
  55404  *   NULL when list is NULL
  55405  */
  55406 char **listCompactS(char **list) {
  55407   char **r = NULL;
  55408 
  55409   // sanity checks
  55410   if (!list) {
  55411     return(NULL);
  55412   }
  55413 
  55414   // keep non empty elements
  55415   forEachCharP(list, e) {
  55416     char *trim = trimS(*e);
  55417     if (*trim != 0) {
  55418       pErrorNULL(listPushS(&r, *e));
  55419     }
  55420     free(trim);
  55421   }
  55422   if (!r) {
  55423     // the new list is empty
  55424     listEmptyS(r)
  55425   }
  55426   return(r);
  55427 }
  55428 
  55429 /**
  55430  * remove empty strings from list
  55431  *
  55432  * \param
  55433  *   list (this parameter is reallocated)
  55434  * \return
  55435  *   list without empty strings (you must free the pointer with listFreeS)
  55436  *   empty list when list is empty
  55437  *   unchanged list when list is NULL
  55438  *   NULL error
  55439  */
  55440 char **iListCompactS(char ***list) {
  55441   char **r = NULL;
  55442 
  55443   // sanity checks
  55444   if (!list || !*list) {
  55445     return(NULL);
  55446   }
  55447 
  55448   // keep non empty elements
  55449   forEachCharP(*list, e) {
  55450     char *trim = trimS(*e);
  55451     if (*trim != 0) {
  55452       pErrorNULL(iListPushS(&r, *e));
  55453     }
  55454     else {
  55455       free(*e);
  55456       if (!r) {
  55457         // set NULL to not free a second time in iListEmptySF
  55458         // when the input list is [""]
  55459         *e = NULL;
  55460     }
  55461       }
  55462     free(trim);
  55463   }
  55464   if (r) {
  55465     free(*list);
  55466     *list = r;
  55467   }
  55468   else {
  55469     pErrorNULL(iListEmptySF(list));
  55470   }
  55471   return(*list);
  55472 }
  55473 
  55474 void btraceEnable(void) {
  55475 
  55476   btraceCfg = true;
  55477 }
  55478 
  55479 void btraceDisable(void) {
  55480 
  55481   btraceCfg = false;
  55482 }
  55483 
  55484 bool btraceConfig(void) {
  55485 
  55486   return(btraceCfg);
  55487 }
  55488 
  55489 /**
  55490  * generate backtrace
  55491  * the program has to be linked the -rdynamic option for btrace to work
  55492  * btrace can backtrace 50 functions at most.
  55493  *
  55494  * \return
  55495  *  list of functions in the backtrace, the line format is: function name: source path:line number (you must free the pointer with listFreeS)
  55496  */
  55497 #if (__FreeBSD__ || __TERMUX__ || __OpenBSD__ || __DragonFly__ || MUSL_LIBC || __sun__ || __HAIKU__)
  55498 // libexecinfo is not installed by default
  55499 char **btrace(void) {
  55500 
  55501   return(NULL);
  55502 }
  55503 
  55504 #else // #if (__FreeBSD__ || __TERMUX__ || __OpenBSD__ || __DragonFly__ || MUSL_LIBC || __sun__ || __HAIKU__)
  55505 char **btrace(void) {
  55506   char **r = NULL;
  55507 
  55508   void *bt[51];
  55509   int count                = backtrace(bt, 51);
  55510 
  55511   if (count < 2) {
  55512     // the program must in at least one function (main is the first function)
  55513     // this should never happen
  55514     pFuncError
  55515     return(NULL);
  55516   }
  55517 
  55518   // backtrace strings
  55519   char **bts               = backtrace_symbols(bt, count);
  55520 
  55521   if (!bts) {
  55522     pFuncError
  55523     shEPrintfS("malloc failed");
  55524     return(NULL);
  55525   }
  55526 
  55527   // check that the symbols are found
  55528   if (hasS(bts[0], "(+")) {
  55529     logE(BLD RED "No symbols found. Link the program with the '-rdynamic' option" RST);
  55530     free(bts);
  55531     return(NULL);
  55532   }
  55533 
  55534   // get all function symbols
  55535   const char *realProgPath = getRealProgPath();
  55536   char *cmd                = formatS("readelf -W -s %s", realProgPath);
  55537   char **elf               = execOut(cmd);
  55538   free(cmd);
  55539 
  55540   if (!elf) {
  55541     pFuncError
  55542     shEPrintfS("readelf failed");
  55543     free(bts);
  55544     return(NULL);
  55545   }
  55546 
  55547   // dynamic array of uint64_t to store the function addresses
  55548   dArrayT(u64Ar, uint64_t);
  55549   u64Ar addresses;
  55550   dArrayInit(&addresses);
  55551 
  55552   // keep only functions
  55553   // symbols stores the function names
  55554   char **symbols = NULL;;
  55555   forEachCharP(elf, s) {
  55556     // keep only one space between columns
  55557     pErrorNULL(iUniqS(s, ' '));
  55558     // s = " 530: 000000000000b7e5 65 FUNC GLOBAL DEFAULT 14 zeroS"
  55559     size_t len = strlen(*s);
  55560     // spaces is the column number
  55561     int spaces = 0;
  55562     // _ is the symbol type
  55563     char *_    = NULL;
  55564     // addr is the function address as a string, funcName is the function identifier
  55565     char *addr, *funcName;
  55566     // scan the columns for current symbol
  55567     range(i, len) {
  55568       if (*(*s+i) == ' ') {
  55569         spaces++;
  55570         if (spaces == 2) {
  55571           // address column
  55572           addr = (*s+i+1);
  55573         }
  55574         if (spaces == 4) {
  55575           // symbol type column
  55576           _ = (*s+i+1);
  55577         }
  55578         if (spaces == 8) {
  55579           // stop scanning the symbol line when the function name is found
  55580           funcName = (*s+i+1);
  55581           break;
  55582       }
  55583         }
  55584     }
  55585     if (_  and startsWithS(_, "FUNC")) {
  55586       // this symbol is a function
  55587       // store function name and function address as a uint64_t
  55588       pErrorNULL(iListPushS(&symbols, funcName));
  55589       dArrayAppend(&addresses, parseHex(addr));
  55590   }
  55591     }
  55592 
  55593   if (!symbols) {
  55594     goto end;
  55595   }
  55596   // TODO sort and bin search symbols
  55597 
  55598   // convert addresses from backtrace_symbols to source code line numbers
  55599   // bts lines: ./exe(main+0x69) [0x556c7d39509b]
  55600   // skip btrace call
  55601   rangeFrom(i, 1, (size_t)count) {
  55602     size_t len = strlen(bts[i]);;
  55603     char *funcName = NULL;
  55604     char *offset   = NULL;
  55605     int status     = 0;
  55606     // find function name after first (
  55607     // and function address separated with + from the function name
  55608     range(j, len) {
  55609       if (status == 1) {
  55610         if (*(bts[i]+j) == '+') {
  55611           offset = bts[i]+j+1;
  55612           break;
  55613       }
  55614         }
  55615       if (*(bts[i]+j) == '(') {
  55616         funcName = bts[i]+j+1;
  55617         status   = 1;
  55618       }
  55619     }
  55620     if (!offset) {
  55621       shEPrintfS("Could not parse backtrace string, got: '%s', expected a string in the form './exe(main+0x69) [0x556c7d39509b]'");
  55622       free(bts);
  55623       return(NULL);
  55624     }
  55625     size_t funcNameLen = (size_t)((offset-1) - funcName);
  55626 
  55627     // search function in all funtions from the elf file
  55628     int symbolIndex = 0;;
  55629     enumerateCharP(symbols, l, j) {
  55630       if (strlen(*l) != funcNameLen) {
  55631         continue;
  55632       }
  55633       if (!strncmp(funcName, *l, funcNameLen)) {
  55634         // found function
  55635         symbolIndex = (int)j;
  55636         break;
  55637     }
  55638       }
  55639 
  55640     if (symbolIndex) {
  55641       // found the function
  55642       cmd = formatS("addr2line -e %s 0x%x", realProgPath, dArrayAt(&addresses, symbolIndex) + parseHex(offset));
  55643       char **cres = execOut(cmd);;
  55644       free(cmd);
  55645 
  55646       if (!cres) {
  55647         pFuncError
  55648         shEPrintfS("addr2line failed");
  55649         continue;
  55650       }
  55651 
  55652       pErrorNULL(iListPushS(&r, formatS("%s: %s", symbols[symbolIndex], cres[0])));
  55653 
  55654       listFreeS(cres);
  55655     }
  55656 
  55657     if (startsWithS(funcName, "main+")) {
  55658       break;
  55659     }
  55660   }
  55661 
  55662   end:
  55663   dArrayFree(&addresses);
  55664   free(symbols);
  55665   listFreeS(elf);
  55666   free(bts);
  55667   return(r);
  55668 }
  55669 #endif
  55670 // #if __FreeBSD__ || __TERMUX__ || __OpenBSD__ || __DragonFly__ || MUSL_LIBC || __sun__ || __HAIKU__
  55671 
  55672 // **************************
  55673 // void ** lists
  55674 // **************************
  55675 
  55676 /**
  55677  * list Empty Function
  55678  *
  55679  * \return
  55680  *   new empty list (you must free the pointer with listFreeS)
  55681  */
  55682 void **listEmptyF(void) {
  55683   void **list = NULL;
  55684 
  55685   list = MALLOC(1 * sizeof(void *));
  55686   if (list) {
  55687     list[0] = NULL;
  55688   }
  55689   return(list);
  55690 }
  55691 
  55692 /**
  55693  * list Empty Function
  55694  *
  55695  * \param
  55696  *   list list to empty (this parameter is reallocated)
  55697  * \return
  55698  *   empty list (you must free the pointer with listFreeS)
  55699  *   NULL error
  55700  */
  55701 void **iListEmptyF(void ***list) {
  55702 
  55703   // sanity checks
  55704   if (!list) {
  55705     return(NULL);
  55706   }
  55707 
  55708   if (*list) {
  55709     free(*list);
  55710   }
  55711 
  55712   *list = MALLOC(1 * sizeof(void *));
  55713   if (*list) {
  55714     (*list)[0] = NULL;
  55715   }
  55716   return(*list);
  55717 }
  55718 
  55719 /**
  55720  * list Is Empty
  55721  *
  55722  * \param
  55723  *   list
  55724  * \return
  55725  *   false when there are elements in the list
  55726  *   true when list is empty
  55727  *   true when list is NULL
  55728  */
  55729 bool listIsEmpty(void **list) {
  55730 
  55731   // sanity checks
  55732   if (!list || !*list) {
  55733     return(true);
  55734   }
  55735   return(false);
  55736 }
  55737 
  55738 /**
  55739  * list Create Function
  55740  * create a list from the list of parameters
  55741  * used from the listCreate(...) macro
  55742  *
  55743  * \param
  55744  *   list of elements seperated with commas
  55745  * \return
  55746  *   list (you must free the pointer with listFreeS)
  55747  *   NULL when first element if NULL
  55748  */
  55749 void **listCreateF(void *paramType, ...) {
  55750   va_list pl;
  55751   void **l = NULL;
  55752 
  55753   //Not needed if !paramType return NULL
  55754 
  55755   // push arguments to a list
  55756   va_start(pl, paramType);
  55757   paramType = va_arg(pl, void *);
  55758   while (paramType) {
  55759     pErrorNULL(listPush(&l, paramType));
  55760     paramType = va_arg(pl, void *);
  55761   }
  55762   va_end(pl);
  55763   return(l);
  55764 }
  55765 
  55766 /**
  55767  * list From Array
  55768  *
  55769  * copy array of 'size' to a new list
  55770  * NULL elements are not copied to the list
  55771  *
  55772  * \param
  55773  *   array
  55774  * \param
  55775  *   size - number of elements in the array
  55776  * \return
  55777  *   list (you must free the pointer with listFreeS)
  55778  *   empty list when size is 0
  55779  *   NULL when array is NULL
  55780  */
  55781 void **listFromArray(void **array, size_t size) {
  55782   void **r = NULL;
  55783 
  55784   // sanity checks
  55785   if (!array) {
  55786     return(NULL);
  55787   }
  55788   if (!size) {
  55789     listEmpty(r);
  55790     return(r);
  55791   }
  55792 
  55793   // copy array content
  55794   for (size_t i = 0 ; i < size ; i++) {
  55795     if (array[i]) {
  55796       // remove NULL elements
  55797       pErrorNULL(listPush(&r, array[i]));
  55798   }
  55799     }
  55800   return(r);
  55801 }
  55802 
  55803 /**
  55804  * list Push
  55805  *
  55806  * (like iListPushS)
  55807  *
  55808  * append s pointer at the end of the list
  55809  * when list is NULL, a new list with one element is returned
  55810  * when list and s are NULL return list with 2 NULL elements
  55811  * when s is NULL, NULL is pushed at the end of the list
  55812  *
  55813  * the list is reallocated to add extra space
  55814  *
  55815  * \param
  55816  *   pointer to list - becomes NULL when realloc fails (this parameter is reallocated)
  55817  * \param
  55818  *   s: element to push
  55819  * \return
  55820  *   list success (you must free the pointer)
  55821  *   NULL error
  55822  */
  55823 void **listPush(void ***list, void *s) {
  55824 
  55825   // sanity checks
  55826   if (!list || !s) {
  55827     return(NULL);
  55828   }
  55829 
  55830   if (!*list) {
  55831     *list      = MALLOC(2 * sizeof(void *));
  55832     if (!*list) {
  55833       return(NULL);
  55834     }
  55835     (*list)[0] = s;
  55836     (*list)[1] = NULL;
  55837   }
  55838   else {
  55839     // realloc list and copy s to last element
  55840     size_t len;
  55841     len  = listLength(*list);
  55842     void **tmp = REALLOC(*list, (len+2) * sizeof(void *));
  55843     if (!tmp) {
  55844       return(NULL);
  55845     }
  55846     else {
  55847       *list          = tmp;
  55848       (*list)[len+1] = NULL;
  55849       (*list)[len]   = s;
  55850   }
  55851     }
  55852   return(*list);
  55853 }
  55854 
  55855 /**
  55856  * list Pop
  55857  * return last element from list and remove last element from the list
  55858  *
  55859  * \param
  55860  *   pointer to list (this parameter is reallocated)
  55861  * \return
  55862  *   last element
  55863  *   NULL when the list is NULL or empty (first element is NULL)
  55864  */
  55865 void *listPop(void ***list) {
  55866   void *s = NULL;
  55867   size_t len;
  55868 
  55869   // sanity checks
  55870   if (!list) {
  55871     return(NULL);
  55872   }
  55873 
  55874   if (!*list || !**list) {
  55875     // empty list
  55876     // no element in the list
  55877     return(NULL);
  55878   }
  55879   // copy and free last non NULL element
  55880   // the number of elements including NULL element remains the same
  55881   len = listLength(*list);
  55882   s   = (*list)[len-1];
  55883   (*list)[len-1] = NULL;
  55884   return(s);
  55885 }
  55886 
  55887 /**
  55888  * list Prepend
  55889  *
  55890  * (like iListPrependS)
  55891  *
  55892  * append s pointer at the beginning of the list
  55893  * when list is NULL, a new list with one element is returned
  55894  * when list and s are NULL return list with 2 NULL elements
  55895  * when s is NULL, NULL is pushed at the end of the list
  55896  *
  55897  * the list is reallocated to add extra space
  55898  *
  55899  * \param
  55900  *   pointer to list - becomes NULL when realloc fails (this parameter is reallocated)
  55901  * \param
  55902  *   s: element to prepend
  55903  * \return
  55904  *   list success (you must free the pointer)
  55905  *   NULL error
  55906  */
  55907 void **listPrepend(void ***list, void *s) {
  55908 
  55909   // sanity checks
  55910   if (!list || !s) {
  55911     return(NULL);
  55912   }
  55913 
  55914   if (!*list) {
  55915     *list      = MALLOC(2 * sizeof(void *));
  55916     if (!*list) {
  55917       return(NULL);
  55918     }
  55919     (*list)[0] = s;
  55920     (*list)[1] = NULL;
  55921   }
  55922   else {
  55923     // realloc list and copy s to last element
  55924     size_t len;
  55925     len  = listLength(*list);
  55926     void **tmp = REALLOC(*list, (len+2) * sizeof(void *));
  55927     if (!tmp) {
  55928       return(NULL);
  55929     }
  55930     else {
  55931       *list = tmp;
  55932       (*list)[len+1] = NULL;
  55933       // shift list
  55934       for (size_t i = len; i > 0; i--) {
  55935         (*list)[i] = (*list)[i-1];
  55936       }
  55937       (*list)[0] = s;
  55938   }
  55939     }
  55940   return(*list);
  55941 }
  55942 
  55943 /**
  55944  * list Dequeue
  55945  * return first element from list and remove last element from the list
  55946  *
  55947  * \param
  55948  *   pointer to list
  55949  * \return
  55950  *   first element
  55951  *   NULL when the list is NULL or empty (first element is NULL)
  55952  */
  55953 void *listDequeue(void ***list) {
  55954   void *s = NULL;
  55955   size_t len;
  55956 
  55957   // sanity checks
  55958   if (!list) {
  55959     return(NULL);
  55960   }
  55961 
  55962   if (!*list || !**list) {
  55963     // empty list
  55964     // no element in the list
  55965     return(NULL);
  55966   }
  55967   // copy and free last non NULL element
  55968   // the number of elements including NULL element remains the same
  55969   len = listLength(*list);
  55970   s   = (*list)[0];
  55971   // shift list
  55972   for (size_t i = 1; i < len; i++) {
  55973     (*list)[i-1] = (*list)[i];
  55974   }
  55975   (*list)[len-1] = NULL;
  55976   return(s);
  55977 }
  55978 
  55979 /**
  55980  * list Free
  55981  *
  55982  * \param
  55983  *   list
  55984  * \return
  55985  *   nothing
  55986  */
  55987 void listFree(void **list) {
  55988 
  55989   // sanity checks
  55990   if (list) {
  55991     forEachType(void, list, e) {
  55992       free(*e);
  55993     }
  55994     free(list);
  55995 }
  55996   }
  55997 
  55998 /**
  55999  * list free many
  56000  *
  56001  * free variable list of pointers
  56002  * listFreeManyS(l1, l2, ...);
  56003  */
  56004 void listFreeManyF(void **paramType, ...) {
  56005   va_list pl;
  56006 
  56007   // add arguments to a list
  56008   va_start(pl, paramType);
  56009   paramType = va_arg(pl, void **);
  56010   while (paramType) {
  56011     listFree(paramType);
  56012     paramType = va_arg(pl, void **);
  56013   }
  56014   va_end(pl);
  56015 }
  56016 
  56017 /**
  56018  * list Length
  56019  * return number of elements until the first NULL element
  56020  *
  56021  * \param
  56022  *   list
  56023  * \return
  56024  *   number of element until first NULL element
  56025  *   0 when list is NULL
  56026  */
  56027 size_t listLength(void **list) {
  56028   size_t r = 0;;
  56029 
  56030   // sanity checks
  56031   if (!list) {
  56032     return(0);
  56033   }
  56034   forEachType(void, list, i) {
  56035     r++;
  56036   }
  56037   return(r);
  56038 }
  56039 
  56040 /**
  56041  * list Get
  56042  *
  56043  * (like iListGetS)
  56044  *
  56045  * index can be negative
  56046  *
  56047  * \param
  56048  *   list
  56049  * \param
  56050  *   index: index in list, must be inside the list
  56051  * \return
  56052  *   element
  56053  *   NULL when list is NULL or index is not set correctly
  56054  */
  56055 void *listGet(void **list, int64_t index) {
  56056   int64_t len;
  56057 
  56058   // sanity checks
  56059   if (!list) {
  56060     return(NULL);
  56061   }
  56062 
  56063   len = (int64_t)listLength(list);
  56064   if (index >= len) {
  56065     return(NULL);
  56066   }
  56067   if (index < -len) {
  56068     return(NULL);
  56069   }
  56070   if (index < 0) {
  56071     index = len + index;
  56072   }
  56073 
  56074   return(list[index]);
  56075 }
  56076 
  56077 /**
  56078  * list Set
  56079  *
  56080  * (like iListSetS)
  56081  *
  56082  * store element at given index
  56083  * previous element at index has to be freed before hand
  56084  * index can be negative
  56085  *
  56086  * \param
  56087  *   list
  56088  * \param
  56089  *   index: index in list, must be inside the list
  56090  * \param
  56091  *   element
  56092  * \return
  56093  *   list success
  56094  *   NULL error
  56095  *
  56096  * Does nothing when:
  56097  * when list is NULL, index is not set correctly or s is NULL
  56098  */
  56099 void **listSet(void **list, int64_t index, void *s) {
  56100   int64_t len;
  56101 
  56102   // sanity checks
  56103   if (!list) {
  56104     return(NULL);
  56105   }
  56106 
  56107   len = (int64_t)listLength(list);
  56108   if (index >= len) {
  56109     return(NULL);
  56110   }
  56111   if (index < -len) {
  56112     return(NULL);
  56113   }
  56114   if (index < 0) {
  56115     index = len + index;
  56116   }
  56117 
  56118   if (!s) {
  56119     return(list);
  56120   }
  56121 
  56122   list[index] = s;
  56123   return(list);
  56124 }
  56125 
  56126 /**
  56127  * list Duplicate
  56128  *
  56129  * (like iListDupS)
  56130  *
  56131  * copy pointers to new list
  56132  * After this function, free list with free instead of listFreeS
  56133  *
  56134  * Note: this function creates a new list, so void *** is not needed.
  56135  *   Unlike iList functions.
  56136  *
  56137  * \param
  56138  *   list
  56139  * \return
  56140  *   new list pointing to the same elements as list (you must free the pointer)
  56141  *   NULL when list is NULL
  56142  */
  56143 void **listDup(void **list) {
  56144   void **l = NULL;
  56145   size_t len;
  56146 
  56147   // sanity checks
  56148   if (!list) {
  56149     return(NULL);
  56150   }
  56151 
  56152   len    = listLength(list);
  56153   l      = MALLOC((len+1) * sizeof(void *));
  56154   if (!l) {
  56155     return(NULL);//LCOV_EXCL_LINE
  56156   }
  56157 
  56158   // last element is NULL
  56159   l[len] = NULL;
  56160 
  56161   // copy each element
  56162   enumerateType(void, list, e, i) {
  56163     l[i] = *e;
  56164   }
  56165   return(l);
  56166 }
  56167 
  56168 /**
  56169  * list Reverse
  56170  * create index list and reverse list, the last element is the first element of the new list
  56171  *
  56172  * \param
  56173  *   list
  56174  * \return
  56175  *   reversed list (you must free the pointer)
  56176  *   NULL when list is NULL
  56177  */
  56178 void **listReverse(void **list) {
  56179   void **l = NULL;
  56180   size_t len;
  56181 
  56182   // sanity checks
  56183   if (!list) {
  56184     return(NULL);
  56185   }
  56186 
  56187   len    = listLength(list);
  56188   l      = MALLOC((len+1) * sizeof(void *));
  56189   if (!l) {
  56190     return(NULL);//LCOV_EXCL_LINE
  56191   }
  56192 
  56193   // last element is NULL
  56194   l[len] = NULL;
  56195 
  56196   // copy each element in reverse order
  56197   enumerateType(void, list, e, i) {
  56198     l[len-1-i] = *e;
  56199   }
  56200   return(l);
  56201 }
  56202 
  56203 
  56204 /**
  56205  * list Reverse
  56206  * reverse list, the last element is the first element of the list
  56207  *
  56208  * \param
  56209  *   list (this parameter is reallocated)
  56210  * \return
  56211  *   reversed list (you must free the pointer)
  56212  *   nothing when list is NULL
  56213  *   NULL error
  56214  */
  56215 void **iListReverse(void ***list) {
  56216   void **l = NULL;
  56217 
  56218   if (!list) {
  56219     return(NULL);
  56220   }
  56221 
  56222   l = listReverse(*list);
  56223 
  56224   free(*list);
  56225   *list = l;
  56226   return(l);
  56227 }
  56228 
  56229 /**
  56230  * list Cat
  56231  * \param
  56232  *   arbitrary list of lists seperated by commas
  56233  * \return
  56234  *   new list with input lists concatenated (you must free the pointer)
  56235  */
  56236 void **listCatF(void **paramType, ...) {
  56237   va_list pl;
  56238   void **r = NULL;
  56239 
  56240   // add arguments to a list
  56241   va_start(pl, paramType);
  56242   paramType = va_arg(pl, void **);
  56243   while (paramType) {
  56244     pErrorNULL(listAppend(&r, paramType));
  56245     paramType = va_arg(pl, void **);
  56246   }
  56247   va_end(pl);
  56248   return(r);
  56249 }
  56250 
  56251 
  56252 /**
  56253  * list Append
  56254  *
  56255  * (like iListAppendS)
  56256  *
  56257  * Append list2 at the end of list1 by copying the pointers
  56258  * from list2 to list1.
  56259  * After this function, free list2 with free instead of listFreeS
  56260  *
  56261  * list1 is reallocated to add extra space
  56262  *
  56263  * \param
  56264  *   list1 (this parameter is reallocated)
  56265  * \param
  56266  *   list2
  56267  * \return
  56268  *   list1 and list2 (you must free the pointer)
  56269  *   list1 not modified when list1 and list2 are NULL
  56270  *     or when list1 is identical to list2 (same pointers)
  56271  *   NULL error
  56272  */
  56273 void **listAppend(void ***list1, void **list2) {
  56274   void **r = NULL;
  56275   size_t len1;
  56276   size_t len2;
  56277 
  56278   // sanity checks
  56279   if (!list1) {
  56280     // need a list to store results, abort
  56281     return(NULL);
  56282   }
  56283   if (!(*list1)) {
  56284     // copy list2
  56285     len2     = listLength(list2);
  56286     *list1   = MALLOC((len2+1) * sizeof(void *));
  56287     if (!*list1) {
  56288       return(NULL);
  56289     }
  56290     int j    = 0;
  56291     while (list2[j]) {
  56292       (*list1)[j] = list2[j];
  56293       j++;
  56294     }
  56295     (*list1)[j] = NULL;
  56296     return(*list1);
  56297   }
  56298   if (!list2) {
  56299     // list1 not modified
  56300     return(*list1);
  56301   }
  56302 
  56303   len1 = listLength(*list1);
  56304 
  56305   if ((*list1) == list2) {
  56306     // list1 and list2 identical, cancel this operations
  56307     // to avoid double free undefined behavior in listFreeS
  56308     return(NULL);
  56309   }
  56310 
  56311   len2 = listLength(list2);
  56312   r    = REALLOC((*list1), (len1+len2+1) * sizeof(void *));
  56313   if (!r) {
  56314     // realloc fails list1 not modified
  56315     return(NULL);
  56316   }
  56317   (*list1) = r;
  56318   // push list2 to new list
  56319   enumerateType(void, list2, e, i) {
  56320     r[len1+i] = *e;
  56321   }
  56322 
  56323   r[len1+len2] = NULL;
  56324 
  56325   return(r);
  56326 }
  56327 
  56328 
  56329 /**
  56330  * list Add
  56331  * add list1 and list2 in a new list
  56332  *
  56333  * \param
  56334  *   list1
  56335  * \param
  56336  *   list2
  56337  * \return
  56338  *   new list with list1 and list2 (you must free the pointer)
  56339  *   NULL when list1 and list2 are NULL
  56340  */
  56341 void **listAdd(void **list1, void **list2) {
  56342   void **l = NULL;
  56343   void **r = NULL;
  56344   size_t len1;
  56345   size_t len2;
  56346 
  56347   // sanity checks
  56348   if (!list1 && !list2) {
  56349     return(NULL);
  56350   }
  56351   if (!list1) {
  56352     // copy list2
  56353     return(listDup(list2));
  56354   }
  56355   if (!list2) {
  56356     // copy list1
  56357     return(listDup(list1));
  56358   }
  56359   // duplicate list1
  56360   l    = listDup(list1);
  56361   len1 = listLength(list1);
  56362   len2 = listLength(list2);
  56363   r    = REALLOC(l, (len1+len2+1) * sizeof(void *));
  56364   if (!r) {
  56365     // free l when realloc fails
  56366     free(l);
  56367     return(NULL);//LCOV_EXCL_LINE
  56368   }
  56369   // push list2 to new list
  56370   enumerateType(void, list2, e, i) {
  56371     r[len1+i] = *e;
  56372   }
  56373 
  56374   r[len1+len2] = NULL;
  56375 
  56376   return(r);
  56377 }
  56378 
  56379 
  56380 /**
  56381  * list Slice
  56382  *
  56383  * (like iListCopyS)
  56384  *
  56385  * return new list with element pointers from start and end in list
  56386  * negative indexes are allowed
  56387  *
  56388  * Note: this function creates a new list, so void *** is not needed.
  56389  *   Unlike iList functions.
  56390  *
  56391  * \param
  56392  *   list
  56393  * \param
  56394  *   start index, must be in the list
  56395  * \param
  56396  *   end index, must be in the list
  56397  * \return
  56398  *   new list pointing to the same elements as list (you must free the pointer)
  56399  *   empty list when start=end
  56400  *   NULL when list is empty
  56401  *   NULL when list is NULL or when start and end are not set correctly
  56402  */
  56403 void **listSlice(void **list, int64_t start, int64_t end) {
  56404   void **l = NULL;
  56405   int64_t len;
  56406 
  56407   // sanity checks
  56408   if (!list) {
  56409     return(NULL);
  56410   }
  56411 
  56412   len = (int64_t)listLength(list);
  56413 
  56414   if (start > len) {
  56415     return(NULL);
  56416   }
  56417   if (end > len) {
  56418     end = len;
  56419   }
  56420   if (start <= -len) {
  56421     start = -len;
  56422   }
  56423   if (end <= -len) {
  56424     return(NULL);
  56425   }
  56426   if (start < 0) {
  56427     start = len + start;
  56428   }
  56429   if (end <= 0) {
  56430     end = len + end;
  56431   }
  56432   if (end < start) {
  56433     return(NULL);
  56434   }
  56435 
  56436   if (start == end) {
  56437     // empty list
  56438     listEmpty(l);
  56439     return(l);
  56440   }
  56441 
  56442   // start < end < len
  56443   int64_t n;
  56444   n = end - start;
  56445   l = MALLOC((size_t)(n+1) * sizeof(void *));
  56446   if (!l) {
  56447     return(NULL);//LCOV_EXCL_LINE
  56448   }
  56449   for (int64_t i=0;i < n;i++) {
  56450     l[i] = *(list+start+i);
  56451   }
  56452   l[n] = NULL;
  56453   return(l);
  56454 }
  56455 
  56456 /**
  56457  * list Slice
  56458  * return list with elements from start and end in list
  56459  * negative indexes are allowed
  56460  *
  56461  * \param
  56462  *   list (this parameter is reallocated)
  56463  * \param
  56464  *   start index, must be in the list
  56465  * \param
  56466  *   end index, must be in the list
  56467  * \return
  56468  *   sliced list (you must free the pointer)
  56469  *   empty list when start=end
  56470  *   unchanged when list is empty
  56471  *   unchanged when list is NULL or when start and end are not set correctly
  56472  *   NULL error
  56473  */
  56474 void **iListSlice(void ***list, int64_t start, int64_t end) {
  56475   void **l = NULL;
  56476   int64_t len;
  56477 
  56478   // sanity checks
  56479   if (!list || !*list) {
  56480     return(NULL);
  56481   }
  56482 
  56483   len = (int64_t)listLength(*list);
  56484 
  56485   if (start > len) {
  56486     free(*list);
  56487     listEmpty(*list);
  56488     return(NULL);
  56489   }
  56490   if (end > len) {
  56491     end = len;
  56492   }
  56493   if (start <= -len) {
  56494     start = -len;
  56495   }
  56496   if (end <= -len) {
  56497     free(*list);
  56498     listEmpty(*list);
  56499     return(NULL);
  56500   }
  56501   if (start < 0) {
  56502     start = len + start;
  56503   }
  56504   if (end <= 0) {
  56505     end = len + end;
  56506   }
  56507   if (end < start) {
  56508     free(*list);
  56509     listEmpty(*list);
  56510     return(NULL);
  56511   }
  56512 
  56513   if (start == end) {
  56514     // empty list
  56515     listEmpty(l);
  56516   }
  56517   else {
  56518     // start < end < len
  56519     int64_t n;
  56520     n = end - start;
  56521     l = MALLOC((size_t)(n+1) * sizeof(void *));
  56522     if (!l) {
  56523       return(NULL);
  56524     }
  56525     for (int64_t i=0;i < n;i++) {
  56526       l[i] = *((*list)+start+i);
  56527     }
  56528     l[n] = NULL;
  56529   }
  56530 
  56531   free(*list);
  56532   *list = l;
  56533   return(l);
  56534 }
  56535 
  56536 /**
  56537  * list Insert
  56538  *
  56539  * insert list in list at index
  56540  *
  56541  * return new list with toInsert at index
  56542  * negative indexes are allowed
  56543  * index -1 is the end of the array and is equivalent to index len
  56544  *
  56545  * \param
  56546  *   list
  56547  * \param
  56548  *   index in list
  56549  * \param
  56550  *   toInsert list
  56551  * \return
  56552  *   new list (you must free the pointer)
  56553  *   NULL when list is NULL or invalid index
  56554  */
  56555 void **listInsert(void **list, int64_t index, void **toInsert) {
  56556   void **r = NULL;
  56557   int64_t len;
  56558 
  56559   //sanity checks
  56560   if (!list) {
  56561     if (index || !toInsert) {
  56562       return(NULL);
  56563     }
  56564     return(listDup(toInsert));
  56565   }
  56566 
  56567   if (!toInsert) {
  56568     return(NULL);
  56569   }
  56570 
  56571   len = (int64_t)listLength(list);
  56572 
  56573   if (!len && index == -1) {
  56574     // empty string, index -1 is equal to 0
  56575     index = 0;
  56576   }
  56577   bool neg = false;
  56578   if (index < 0) {
  56579     neg = true;
  56580   }
  56581 
  56582   if (index > len) {
  56583     return(NULL);
  56584   }
  56585   if (neg) {
  56586     index++;
  56587   }
  56588   if (index < -len) {
  56589     return(NULL);
  56590   }
  56591   if (neg) {
  56592     index = len + index;
  56593   }
  56594 
  56595 
  56596   if (listIsEmpty(toInsert)) {
  56597     return(listDup(list));
  56598   }
  56599 
  56600   if (index == 0) {
  56601     // insert at beginning
  56602     return(listAdd(toInsert, list));
  56603   }
  56604 
  56605   void **l1 = listSlice(list, 0, index);
  56606   void **l2 = listSlice(list, index, 0);
  56607   r         = listCat(l1, toInsert, l2);
  56608   free(l1);
  56609   free(l2);
  56610 
  56611   return(r);
  56612 }
  56613 
  56614 /**
  56615  * list Insert
  56616  *
  56617  * insert list in list at index
  56618  * After this function, free toInsert with free instead of listFreeS
  56619  *
  56620  * return list with toInsert at index
  56621  * negative indexes are allowed
  56622  * index -1 is the end of the array and is equivalent to index len
  56623  *
  56624  * \param
  56625  *   list (this parameter is reallocated)
  56626  * \param
  56627  *   index in list
  56628  * \param
  56629  *   toInsert list
  56630  * \return
  56631  *   list (you must free the pointer)
  56632  *   unchanged list when list is NULL or invalid index
  56633  *   NULL error
  56634  */
  56635 void **iListInsert(void ***list, int64_t index, void **toInsert) {
  56636   void **r = NULL;
  56637   int64_t len;
  56638 
  56639   //sanity checks
  56640   if (!list || !toInsert) {
  56641     return(NULL);
  56642   }
  56643   if (!*list) {
  56644     if (index) {
  56645       return(NULL);
  56646     }
  56647     r     = listDup(toInsert);
  56648     *list = r;
  56649     return(r);
  56650   }
  56651 
  56652   len = (int64_t)listLength(*list);
  56653 
  56654   if (!len && index == -1) {
  56655     // empty string, index -1 is equal to 0
  56656     index = 0;
  56657   }
  56658   bool neg = false;
  56659   if (index < 0) {
  56660     neg = true;
  56661   }
  56662 
  56663   if (index > len) {
  56664     return(NULL);
  56665   }
  56666   if (neg) {
  56667     index++;
  56668   }
  56669   if (index < -len) {
  56670     return(NULL);
  56671   }
  56672   if (neg) {
  56673     index = len + index;
  56674   }
  56675 
  56676 
  56677   if (listIsEmpty(toInsert)) {
  56678     return(*list);
  56679   }
  56680 
  56681   if (index == 0) {
  56682     // insert at beginning
  56683     pErrorNULL(listAppend(&r, toInsert));
  56684     pErrorNULL(listAppend(&r, *list));
  56685   }
  56686   else {
  56687 
  56688     r         = listSlice(*list, 0, index);
  56689     void **l2 = listSlice(*list, index, 0);
  56690     pErrorNULL(listAppend(&r, toInsert));
  56691     pErrorNULL(listAppend(&r, l2));
  56692     free(l2);
  56693   }
  56694 
  56695   free(*list);
  56696   *list = r;
  56697   return(r);
  56698 }
  56699 
  56700 /**
  56701  * list Delete
  56702  * return new list without elements from start and end in list
  56703  * negative indexes are allowed
  56704  *
  56705  * \param
  56706  *   list
  56707  * \param
  56708  *   start index, must be in the list
  56709  * \param
  56710  *   end index, must be in the list
  56711  * \return
  56712  *   sliced list (you must free the pointer)
  56713  *   list copy when start=end or when start and end are not set correctly
  56714  *   NULL when list is empty
  56715  *   NULL when list is NULL or when end is under start
  56716  */
  56717 void **listDel(void **list, int64_t start, int64_t end) {
  56718   void **l = NULL;
  56719   int64_t len;
  56720 
  56721   // sanity checks
  56722   if (!list) {
  56723     return(NULL);
  56724   }
  56725 
  56726   len = (int64_t)listLength(list);
  56727 
  56728   if (len == 0) {
  56729     return(NULL);
  56730   }
  56731 
  56732   if (start >= len) {
  56733     start = len;
  56734   }
  56735   if (end > len) {
  56736     end = len;
  56737   }
  56738   if (start <= -len) {
  56739     start = -len;
  56740   }
  56741   if (end <= -len) {
  56742     end = -len;
  56743   }
  56744   if (start < 0) {
  56745     start = len + start;
  56746   }
  56747   if (end <= 0) {
  56748     end = len + end;
  56749   }
  56750   if (end < start) {
  56751     return(NULL);
  56752   }
  56753 
  56754   if (start == end) {
  56755     return(listDup(list));
  56756   }
  56757 
  56758   // start < end < len
  56759   int64_t n;
  56760   n = end - start;
  56761   l = MALLOC((size_t)(len-n+1) * sizeof(void *));
  56762   if (!l) {
  56763     return(NULL);//LCOV_EXCL_LINE
  56764   }
  56765   for (int64_t i=0;i < start;i++) {
  56766     l[i] = *(list+i);
  56767   }
  56768   for (int64_t i=start ; i < len-n ; i++) {
  56769     l[i] = *(list+n+i);
  56770   }
  56771   l[len-n] = NULL;
  56772   return(l);
  56773 }
  56774 
  56775 
  56776 /**
  56777  * list Delete
  56778  * return list without elements from start and end in list
  56779  * negative indexes are allowed
  56780  *
  56781  * \param
  56782  *   list (this parameter is reallocated)
  56783  * \param
  56784  *   start index, must be in the list
  56785  * \param
  56786  *   end index, must be in the list
  56787  * \return
  56788  *   sliced list (you must free the pointer)
  56789  *   list copy when start=end or when start and end are not set correctly
  56790  *   NULL when list is empty
  56791  *   NULL when list is NULL or when end is under start
  56792  *   NULL error
  56793  */
  56794 void **iListDel(void ***list, int64_t start, int64_t end) {
  56795   void **l = NULL;
  56796   int64_t len;
  56797 
  56798   // sanity checks
  56799   if (!list || !*list) {
  56800     return(NULL);
  56801   }
  56802 
  56803   len = (int64_t)listLength(*list);
  56804 
  56805   if (len == 0) {
  56806     return(NULL);
  56807   }
  56808 
  56809   if (start >= len) {
  56810     start = len;
  56811   }
  56812   if (end > len) {
  56813     end = len;
  56814   }
  56815   if (start <= -len) {
  56816     start = -len;
  56817   }
  56818   if (end <= -len) {
  56819     end = -len;
  56820   }
  56821   if (start < 0) {
  56822     start = len + start;
  56823   }
  56824   if (end <= 0) {
  56825     end = len + end;
  56826   }
  56827   if (end < start) {
  56828     return(NULL);
  56829   }
  56830 
  56831   if (start == end) {
  56832     return(*list);
  56833   }
  56834 
  56835   // start < end < len
  56836   int64_t n;
  56837   n = end - start;
  56838   l = MALLOC((size_t)(len-n+1) * sizeof(void *));
  56839   if (!l) {
  56840     return(NULL);
  56841   }
  56842   for (int64_t i=0;i < start;i++) {
  56843     l[i] = *((*list)+i);
  56844   }
  56845   for (int64_t i=start ; i < len-n ; i++) {
  56846     l[i] = *((*list)+n+i);
  56847   }
  56848   l[len-n] = NULL;
  56849 
  56850   free(*list);
  56851   *list = l;
  56852   return(l);
  56853 }
  56854 
  56855 // TODO - add compare function as parameter
  56856 /**
  56857  * list Sort
  56858  * duplicate list and sort
  56859  *
  56860  * \param
  56861  *   list
  56862  * \return
  56863  *   new sorted list
  56864  *   empty list when list is empty
  56865  *   NULL when list is NULL
  56866  */
  56867 /* void **listSort(void **list) */
  56868 /*   size_t len */
  56869 /*   void **l */
  56870 /*  */
  56871 /*   // sanity checks */
  56872 /*   if !list */
  56873 /*     return NULL */
  56874 /*   len = listLength(list) */
  56875 /*   // duplicate */
  56876 /*   l = listDup(list) */
  56877 /*   if !len */
  56878 /*     return l */
  56879 /*   // sort */
  56880 /*   qsort(l, len, sizeof(void *), listSortSCmp); */
  56881 /*   return l */
  56882 
  56883 /**
  56884  * list Sort
  56885  *
  56886  * \param
  56887  *   list
  56888  * \return
  56889  *   sorted list
  56890  *   empty list when list is empty
  56891  *   unchanged list when list is NULL
  56892  */
  56893 /* void iListSortS(void ***list) */
  56894 /*   size_t len */
  56895 /*  */
  56896 /*   // sanity checks */
  56897 /*   if !list || !*list */
  56898 /*     return */
  56899 /*   len = listLength(*list) */
  56900 /*   if !len */
  56901 /*     return */
  56902 /*   // sort */
  56903 /*   qsort(*list, len, sizeof(void *), listSortSCmp); */
  56904 /*   return */
  56905 
  56906 
  56907 // TODO - add compare function as parameter
  56908 /**
  56909  * list Equal
  56910  * compare each element of list1 and list2
  56911  *
  56912  * \param
  56913  *   2 lists
  56914  * \return
  56915  *   true the lists have identical elements
  56916  *   false they differ
  56917  */
  56918 /* bool listEq(void **list1, void **list2) */
  56919 /*  */
  56920 /*   // sanity checks */
  56921 /*   if !list1 || !list2 */
  56922 /*     return false */
  56923 /*   if listLength(list1) != listLength(list2) */
  56924 /*     return false */
  56925 /*  */
  56926 /*   // compare elements */
  56927 /*   enumerateType(void, list1, e, i) */
  56928 /*     if !strEq(*e, list2[i]) */
  56929 /*       return false */
  56930 /*      */
  56931 /*   return true */
  56932 
  56933 // TODO - add compare function as parameter
  56934 /**
  56935  * return index of element in list
  56936  *
  56937  * \param
  56938  *   list
  56939  *   element
  56940  * \return
  56941  *   index
  56942  *   -1 when the element is not found
  56943  *   -1 when list or element are NULL
  56944  */
  56945 /* ssize_t listIndexOf(void **list, const void *string) */
  56946 /*   bool found = false */
  56947 /*  */
  56948 /*   // sanity checks */
  56949 /*   if !list */
  56950 /*     return -1 */
  56951 /*   if !string */
  56952 /*     return -1 */
  56953 /*   // search string in elements */
  56954 /*   enumerateType(void, list, e, i) */
  56955 /*     if strEq(*e, string) */
  56956 /*       found = true */
  56957 /*       break; */
  56958 /*   if found */
  56959 /*      return i */
  56960 /*   else */
  56961 /*      return -1 */
  56962 
  56963 // TODO - add compare function as parameter
  56964 /**
  56965  * list binary search
  56966  *
  56967  * efficiently finds the index of element in list
  56968  * the list has be sorted with for example listSortS
  56969  *
  56970  * \param
  56971  *   list
  56972  *   element to search
  56973  * \return
  56974  *   index of element
  56975  *   -1 element not found or NULL input pointers
  56976  */
  56977 /* ssize_t listBinarySearch(void **list, const void *string) */
  56978 /*   TODO copy listBinarySearchS */
  56979 
  56980 // TODO - add compare function as parameter
  56981 /**
  56982  * Uniquify elements of list
  56983  * duplicate list
  56984  * each elements are unique in the new list
  56985  *
  56986  * \param
  56987  *   list
  56988  * \return
  56989  *   new list with unique elements
  56990  *   empty list when list is empty
  56991  *   NULL when list is NULL
  56992  */
  56993 /* void **listUniq(void **list) */
  56994 /*   void **r */
  56995 /*  */
  56996 /*   // sanity checks */
  56997 /*   if !list */
  56998 /*     return NULL */
  56999 /*  */
  57000 /*   listPush(&r, list[0]); */
  57001 /*   // one element list */
  57002 /*   if listLength(list) = 1 */
  57003 /*     return r */
  57004 /*   // push element to new list if it is not already in new list */
  57005 /*   forEachType(void, list, e) */
  57006 /*     if listIndexOf(r, *e) = -1 */
  57007 /*       listPush(&r, *e); */
  57008 /*   return r */
  57009 
  57010 /**
  57011  * Uniquify elements of list
  57012  * each elements are unique in the list
  57013  *
  57014  * \param
  57015  *   list
  57016  * \return
  57017  *   list with unique elements
  57018  *   empty list when list is empty
  57019  *   unchanged list when list is NULL
  57020  */
  57021 /* void iListUniq(void ***list) */
  57022 /*   void **r */
  57023 /*  */
  57024 /*   // sanity checks */
  57025 /*   if !list || !*list */
  57026 /*     return */
  57027 /*  */
  57028 /*   listPush(&r, (*list)[0]); */
  57029 /*   // one element list */
  57030 /*   if listLength(*list) > 1 */
  57031 /*     // push element to new list if it is not already in new list */
  57032 /*     forEachType(void, *list, e) */
  57033 /*       if listIndexOf(r, *e) = -1 */
  57034 /*         listPushS(&r, *e); */
  57035 /*   */
  57036 /*   free *list */
  57037 /*   *list = r */
  57038 /*   return */
  57039 
  57040 // TODO - add compare function as parameter
  57041 /**
  57042  * remove empty element from list
  57043  *
  57044  * \param
  57045  *   list
  57046  * \return
  57047  *   list without empty element
  57048  *   empty list when list is empty
  57049  *   NULL when list is NULL
  57050  */
  57051 /* void **listCompact(void **list) */
  57052 /*   void **r */
  57053 /*  */
  57054 /*   // sanity checks */
  57055 /*   if !list */
  57056 /*     return NULL */
  57057 /*  */
  57058 /*   // keep non empty elements */
  57059 /*   forEachType(void, list, e) */
  57060 /*     void *trim = trimS(*e) */
  57061 /*     if *trim != 0 */
  57062 /*       listPush(&r, *e); */
  57063 /*     free trim */
  57064 /*   if !r */
  57065 /*     // the new list is empty */
  57066 /*     listEmpty(r) */
  57067 /*   return r */
  57068 
  57069 /**
  57070  * remove empty elements from list
  57071  *
  57072  * \param
  57073  *   list
  57074  * \return
  57075  *   list without empty elements
  57076  *   empty list when list is empty
  57077  *   unchanged list when list is NULL
  57078  */
  57079 /* void iListCompact(void ***list) */
  57080 /*   void **r */
  57081 /*  */
  57082 /*   // sanity checks */
  57083 /*   if !list || !*list */
  57084 /*     return */
  57085 /*  */
  57086 /*   // keep non empty elements */
  57087 /*   forEachType(void, *list, e) */
  57088 /*     void *trim = trimS(*e) */
  57089 /*     if *trim != 0 */
  57090 /*       listPush(&r, *e); */
  57091 /*     free trim */
  57092 /*   if r */
  57093 /*     free *list */
  57094 /*     *list = r */
  57095 /*   return */
  57096 
  57097 /**
  57098  * initialize ring/pointer to staticArray
  57099  * sets count and head to 0
  57100  * sets maxCount
  57101  *
  57102  * the ring is empty after this function
  57103  *
  57104  * a pointer to staticArray is also valid
  57105  * the array is empty after this function
  57106  *
  57107  * \param
  57108  *   ring pointer to initialize
  57109  * \param
  57110  *   maxCount for this ring type
  57111  * \return
  57112  *   1 success
  57113  *   0 error
  57114  */
  57115 int ringInit(void *ring, int maxCount) {
  57116 
  57117   if (!ring) {
  57118     return(0);
  57119   }
  57120 
  57121   cast(ringBase*, name, ring)
  57122 
  57123   name->last = name->head = 0;
  57124   name->maxCount = maxCount;
  57125   name->isEmpty = true;
  57126   return(1);
  57127 }
  57128 
  57129 /**
  57130  * empty ring
  57131  * Allocated buffers in the list must be freed before running staticArrayEmpty
  57132  *
  57133  * \return
  57134  *  1 success
  57135  *  0 error
  57136  */
  57137 int ringEmpty(void *ring) {
  57138 
  57139   if (!ring) {
  57140     return(0);
  57141   }
  57142 
  57143   cast(ringBase*, name, ring)
  57144   name->last = name->head = 0;
  57145   name->isEmpty = true;
  57146   return(1);
  57147 }
  57148 
  57149 /**
  57150  * 1 when empty
  57151  * 0 not empty
  57152  * -1 error
  57153  */
  57154 int ringIsEmpty(void *ring) {
  57155 
  57156   if (!ring) {
  57157     return(-1);
  57158   }
  57159 
  57160   cast(ringBase*, name, ring)
  57161 
  57162   return(name->isEmpty);
  57163 }
  57164 
  57165 /**
  57166  * 1 when full
  57167  * 0 not full
  57168  * -1 error
  57169  */
  57170 int ringIsFull(void *ring) {
  57171 
  57172   if (!ring) {
  57173     return(-1);
  57174   }
  57175 
  57176   cast(ringBase*, name, ring)
  57177 
  57178   if (((name->last+1) % name->maxCount) == name->head) {
  57179     return(1);
  57180   }
  57181   return(0);
  57182 }
  57183 
  57184 
  57185 /**
  57186  * return elements count
  57187  *
  57188  * \return
  57189  *   message count
  57190  *   -1 error
  57191  */
  57192 ssize_t ringCount(void *ring) {
  57193 
  57194   if (!ring) {
  57195     return(-1);
  57196   }
  57197 
  57198   cast(ringBase*, name, ring)
  57199 
  57200   if (name->isEmpty) {
  57201     return(0);
  57202   }
  57203 
  57204   if ((name->last) > (name->head)) {
  57205     return(name->last-name->head+1);
  57206   }
  57207   return((name->maxCount-name->head + name->last+1));
  57208 }
  57209 
  57210 /**
  57211  * push element to ring (only increases last, use ringSend)
  57212  * use ringLast to access the element
  57213  *
  57214  * \return
  57215  *   position of the element
  57216  *   -1 ring is full
  57217  *   -2 error
  57218  */
  57219 i64 ringPush(void *ring) {
  57220 
  57221   if (!ring) {
  57222     return(-2);
  57223   }
  57224   if (ringIsFull(ring)) {
  57225     return(-1);
  57226   }
  57227 
  57228   cast(ringBase*, name, ring)
  57229 
  57230   if (name->isEmpty) {
  57231     name->isEmpty = false;
  57232   }
  57233   else {
  57234     name->last++;
  57235     name->last %= name->maxCount;;
  57236   }
  57237   return(name->last);
  57238 }
  57239 
  57240 /**
  57241  * pop element from ring (only decreases last)
  57242  *
  57243  * \return
  57244  *   1 element is removed
  57245  *   0 ring is empty
  57246  *   -1 error
  57247  */
  57248 int ringPop(void *ring) {
  57249 
  57250   if (!ring) {
  57251     return(-1);
  57252   }
  57253   if (ringIsEmpty(ring)) {
  57254     return(0);
  57255   }
  57256 
  57257   cast(ringBase*, name, ring)
  57258 
  57259   if (!name->isEmpty && (name->last == name->head)) {
  57260     name->isEmpty = true;
  57261   }
  57262   else if (!name->isEmpty && (name->last != name->head)) {
  57263     if (name->last) {
  57264       name->last--;
  57265     }
  57266     else {
  57267       name->last += name->maxCount-1;
  57268   }
  57269     }
  57270   return(1);
  57271 }
  57272 
  57273 /**
  57274  * prepend element to ring (only decreases head)
  57275  * use ringFirst to access the element
  57276  *
  57277  * \return
  57278  *   position of the element
  57279  *   -1 ring is full
  57280  *   -2 error
  57281  */
  57282 i64 ringPrepend(void *ring) {
  57283 
  57284   if (!ring) {
  57285     return(-2);
  57286   }
  57287   if (ringIsFull(ring)) {
  57288     return(-1);
  57289   }
  57290 
  57291   cast(ringBase*, name, ring)
  57292 
  57293   if (name->isEmpty) {
  57294     name->isEmpty = false;
  57295   }
  57296   else {
  57297     if (name->head) {
  57298       name->head--;
  57299     }
  57300     else {
  57301       name->head += name->maxCount-1;;
  57302   }
  57303     }
  57304   return(name->head);
  57305 }
  57306 
  57307 /**
  57308  * dequeue element from ring (only increases head, use ringRecv)
  57309  *
  57310  * \return
  57311  *   1 element is removed
  57312  *   0 ring is empty
  57313  *   -1 error
  57314  */
  57315 int ringDequeue(void *ring) {
  57316 
  57317   if (!ring) {
  57318     return(-1);
  57319   }
  57320   if (ringIsEmpty(ring)) {
  57321     return(0);
  57322   }
  57323 
  57324   cast(ringBase*, name, ring)
  57325 
  57326   if (!name->isEmpty && (name->last == name->head)) {
  57327     name->isEmpty = true;
  57328   }
  57329   else if (!name->isEmpty && (name->last != name->head)) {
  57330     name->head++;
  57331     name->head %= name->maxCount;;
  57332   }
  57333   return(1);
  57334 }
  57335 
  57336 
  57337 /**
  57338  * fibers holds the necessary information to schedule fibers
  57339  */
  57340 fibersT fibers;
  57341 
  57342 /**
  57343  * add new fiber
  57344  *
  57345  * \param
  57346  * ctx context for the fiber at thisSlot
  57347  * \param
  57348  * thisSlot reserved slot for this fiber
  57349  * \param
  57350  * func fiber function
  57351  * \return
  57352  * true
  57353  */
  57354 bool fiberAdd(void *ctx, int thisSlot, fiberFT func) {
  57355 
  57356   cast(fiberBaseT*, thisCtx, ctx)
  57357   thisCtx->slot = thisSlot;
  57358   fibers.context[thisSlot] = ctx;
  57359   staticArrayPush(fibers.startL)
  57360   staticArrayLast(fibers.startL) = thisSlot;
  57361   fibers.F[thisSlot] = func;
  57362   return(true);
  57363 }
  57364 
  57365 /**
  57366  * add new fiber and start immediately after next yield
  57367  *
  57368  * \param
  57369  * ctx context for the fiber at thisSlot
  57370  * \param
  57371  * thisSlot reserved slot for this fiber
  57372  * \param
  57373  * func fiber function
  57374  * \return
  57375  * true
  57376  */
  57377 bool fiberPrepend(void *ctx, int thisSlot, fiberFT func) {
  57378 
  57379   cast(fiberBaseT*, thisCtx, ctx)
  57380   thisCtx->slot = thisSlot;
  57381   fibers.context[thisSlot] = ctx;
  57382   staticArrayPrepend(fibers.startL)
  57383   staticArrayFirst(fibers.startL) = thisSlot;
  57384   fibers.F[thisSlot] = func;
  57385   return(true);
  57386 }
  57387 
  57388 /**
  57389  * Schedule fibers
  57390  */
  57391 void scheduler(void) {
  57392   static int task;
  57393 
  57394   // Start tasks before the schedule loop
  57395   // to add fibers to fiberL
  57396   while (!staticArrayIsEmpty(fibers.startL)) {
  57397     puts(__func__);
  57398     task = staticArrayFirst(fibers.startL);
  57399     printf("Start task %d\n", task);
  57400     staticArrayDequeue(fibers.startL);
  57401     startJump(fibers.F[task](task));
  57402   }
  57403 
  57404   // Schedule Loop
  57405   while (!staticArrayIsEmpty(fibers.L)) {
  57406     // Start eventual new tasks
  57407     while (!staticArrayIsEmpty(fibers.startL)) {
  57408       puts(__func__);
  57409       task = staticArrayFirst(fibers.startL);
  57410       printf("-- Start NEW task %d\n", task);
  57411       staticArrayDequeue(fibers.startL);
  57412       startJump(fibers.F[task](task));
  57413     }
  57414     puts(__func__);
  57415     task = staticArrayFirst(fibers.L);
  57416     staticArrayDequeue(fibers.L);
  57417 
  57418     logVar(task, "d");
  57419     schedulerYield(task);
  57420 }
  57421   }
  57422 
  57423 
  57424 
  57425 
  57426 
  57427 
  57428 
  57429 
  57430 
  57431 #if ((__GNUC__ > 4))
  57432 /**
  57433  * return monotonic time in nanoseconds
  57434  */
  57435 uint64_t getMonotonicTime(void) {
  57436   struct timespec ts;
  57437 
  57438   clock_gettime(CLOCK_MONOTONIC, &ts);
  57439 
  57440   return((uint64_t)(ts.tv_sec) * 1000000000 + (uint64_t)(ts.tv_nsec));
  57441 }
  57442 #else
  57443 // not available on older platforms
  57444 uint64_t getMonotonicTime(void) {
  57445 
  57446   return(0);
  57447 }
  57448 #endif
  57449 /**
  57450  * nanosleep
  57451  *
  57452  * sleep nanoseconds
  57453  *
  57454  * \param
  57455  *   time in nanosceonds
  57456  * \return
  57457  *   1 ok
  57458  *   0 error
  57459  */
  57460 int nanoSleepF(uint64_t time) {
  57461   struct timespec ts;
  57462 
  57463   ts.tv_sec  = (time_t)(time / 1000000000);
  57464   ts.tv_nsec = (time_t)(time % 1000000000);
  57465   int r = nanosleep(&ts, NULL);;
  57466   if (r == -1) {
  57467     pFuncError
  57468     return(0);
  57469   }
  57470   return(1);
  57471 }
  57472 
  57473