summaryrefslogtreecommitdiff
path: root/src/pal
diff options
context:
space:
mode:
authorMichal Strehovský <MichalStrehovsky@users.noreply.github.com>2019-05-16 20:23:04 -0700
committerJan Kotas <jkotas@microsoft.com>2019-05-16 20:23:04 -0700
commitc55319243ed42f8bdcb940d69f03a9c6554cc1d4 (patch)
treef3db8cfbe42ad7ab134ec7ce0de88f7853a39792 /src/pal
parenteae74b83ba12d010f40895f58857a56cdaf4860c (diff)
downloadcoreclr-c55319243ed42f8bdcb940d69f03a9c6554cc1d4.tar.gz
coreclr-c55319243ed42f8bdcb940d69f03a9c6554cc1d4.tar.bz2
coreclr-c55319243ed42f8bdcb940d69f03a9c6554cc1d4.zip
Add support for invariant casing in PAL (#24597)
unicodedata.cpp based on UnicodeData.txt v11.0.
Diffstat (limited to 'src/pal')
-rw-r--r--src/pal/inc/pal.h3
-rw-r--r--src/pal/src/CMakeLists.txt1
-rw-r--r--src/pal/src/include/pal/unicodedata.h32
-rw-r--r--src/pal/src/locale/unicode.cpp133
-rw-r--r--src/pal/src/locale/unicodedata.cpp2342
-rw-r--r--src/pal/src/locale/unicodedata.cs65
6 files changed, 2576 insertions, 0 deletions
diff --git a/src/pal/inc/pal.h b/src/pal/inc/pal.h
index 1c69c305be..97091bf3b0 100644
--- a/src/pal/inc/pal.h
+++ b/src/pal/inc/pal.h
@@ -4618,6 +4618,9 @@ PALIMPORT DLLEXPORT int __cdecl _putenv(const char *);
#define ERANGE 34
+PALIMPORT WCHAR __cdecl PAL_ToUpperInvariant(WCHAR);
+PALIMPORT WCHAR __cdecl PAL_ToLowerInvariant(WCHAR);
+
/******************* PAL-specific I/O completion port *****************/
typedef struct _PAL_IOCP_CPU_INFORMATION {
diff --git a/src/pal/src/CMakeLists.txt b/src/pal/src/CMakeLists.txt
index d0cf78900b..28f5bfb41d 100644
--- a/src/pal/src/CMakeLists.txt
+++ b/src/pal/src/CMakeLists.txt
@@ -212,6 +212,7 @@ set(SOURCES
loader/module.cpp
loader/modulename.cpp
locale/unicode.cpp
+ locale/unicodedata.cpp
locale/utf8.cpp
map/common.cpp
map/map.cpp
diff --git a/src/pal/src/include/pal/unicodedata.h b/src/pal/src/include/pal/unicodedata.h
new file mode 100644
index 0000000000..42b4139472
--- /dev/null
+++ b/src/pal/src/include/pal/unicodedata.h
@@ -0,0 +1,32 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+#ifndef _PAL_UNICODEDATA_H_
+#define _PAL_UNICODEDATA_H_
+
+#include "pal/palinternal.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif // __cplusplus
+
+#define UPPER_CASE 1
+#define LOWER_CASE 2
+
+typedef struct
+{
+ WCHAR nUnicodeValue;
+ WORD nFlag;
+ WCHAR nOpposingCase;
+} UnicodeDataRec;
+
+extern CONST UnicodeDataRec UnicodeData[];
+extern CONST UINT UNICODE_DATA_SIZE;
+
+#ifdef __cplusplus
+}
+#endif // __cplusplus
+
+#endif /* _UNICODE_DATA_H_ */
diff --git a/src/pal/src/locale/unicode.cpp b/src/pal/src/locale/unicode.cpp
index 085dbb8db1..f366b0f87c 100644
--- a/src/pal/src/locale/unicode.cpp
+++ b/src/pal/src/locale/unicode.cpp
@@ -29,6 +29,7 @@ Revision History:
#include "pal/locale.h"
#include "pal/cruntime.h"
#include "pal/stackstring.hpp"
+#include "pal/unicodedata.h"
#if !(HAVE_PTHREAD_RWLOCK_T || HAVE_COREFOUNDATION)
#error Either pthread rwlocks or Core Foundation are required for Unicode support
@@ -81,6 +82,138 @@ static const UINT PAL_ACP = 65001;
/*++
Function:
+UnicodeDataComp
+This is the comparison function used by the bsearch function to search
+for unicode characters in the UnicodeData array.
+
+Parameter:
+pnKey
+The unicode character value to search for.
+elem
+A pointer to a UnicodeDataRec.
+
+Return value:
+<0 if pnKey < elem->nUnicodeValue
+0 if pnKey == elem->nUnicodeValue
+>0 if pnKey > elem->nUnicodeValue
+--*/
+static int UnicodeDataComp(const void *pnKey, const void *elem)
+{
+ WCHAR uValue = ((UnicodeDataRec*)elem)->nUnicodeValue;
+
+ if (*((INT*)pnKey) < uValue)
+ {
+ return -1;
+ }
+ else if (*((INT*)pnKey) > uValue)
+ {
+ return 1;
+ }
+ else
+ {
+ return 0;
+ }
+}
+
+/*++
+Function:
+GetUnicodeData
+This function is used to get information about a Unicode character.
+
+Parameters:
+nUnicodeValue
+The numeric value of the Unicode character to get information about.
+pDataRec
+The UnicodeDataRec to fill in with the data for the Unicode character.
+
+Return value:
+TRUE if the Unicode character was found.
+
+--*/
+BOOL GetUnicodeData(INT nUnicodeValue, UnicodeDataRec *pDataRec)
+{
+ BOOL bRet;
+
+ UnicodeDataRec *dataRec;
+ INT nNumOfChars = UNICODE_DATA_SIZE;
+ dataRec = (UnicodeDataRec *) bsearch(&nUnicodeValue, UnicodeData, nNumOfChars,
+ sizeof(UnicodeDataRec), UnicodeDataComp);
+ if (dataRec == NULL)
+ {
+ bRet = FALSE;
+ }
+ else
+ {
+ bRet = TRUE;
+ *pDataRec = *dataRec;
+ }
+ return bRet;
+}
+
+wchar_16
+__cdecl
+PAL_ToUpperInvariant( wchar_16 c )
+{
+ UnicodeDataRec dataRec;
+
+ PERF_ENTRY(PAL_ToUpperInvariant);
+ ENTRY("PAL_ToUpperInvariant (c=%d)\n", c);
+
+ if (!GetUnicodeData(c, &dataRec))
+ {
+ TRACE( "Unable to retrieve unicode data for the character %c.\n", c );
+ LOGEXIT("PAL_ToUpperInvariant returns int %d\n", c );
+ PERF_EXIT(PAL_ToUpperInvariant);
+ return c;
+ }
+
+ if ( dataRec.nFlag != LOWER_CASE )
+ {
+ LOGEXIT("PAL_ToUpperInvariant returns int %d\n", c );
+ PERF_EXIT(PAL_ToUpperInvariant);
+ return c;
+ }
+ else
+ {
+ LOGEXIT("PAL_ToUpperInvariant returns int %d\n", dataRec.nOpposingCase );
+ PERF_EXIT(PAL_ToUpperInvariant);
+ return dataRec.nOpposingCase;
+ }
+}
+
+wchar_16
+__cdecl
+PAL_ToLowerInvariant( wchar_16 c )
+{
+ UnicodeDataRec dataRec;
+
+ PERF_ENTRY(PAL_ToLowerInvariant);
+ ENTRY("PAL_ToLowerInvariant (c=%d)\n", c);
+
+ if (!GetUnicodeData(c, &dataRec))
+ {
+ TRACE( "Unable to retrieve unicode data for the character %c.\n", c );
+ LOGEXIT("PAL_ToLowerInvariant returns int %d\n", c );
+ PERF_EXIT(PAL_ToLowerInvariant);
+ return c;
+ }
+
+ if ( dataRec.nFlag != UPPER_CASE )
+ {
+ LOGEXIT("PAL_ToLowerInvariant returns int %d\n", c );
+ PERF_EXIT(PAL_ToLowerInvariant);
+ return c;
+ }
+ else
+ {
+ LOGEXIT("PAL_ToLowerInvariant returns int %d\n", dataRec.nOpposingCase );
+ PERF_EXIT(PAL_ToLowerInvariant);
+ return dataRec.nOpposingCase;
+ }
+}
+
+/*++
+Function:
CODEPAGEGetData
IN UINT CodePage - The code page the caller
diff --git a/src/pal/src/locale/unicodedata.cpp b/src/pal/src/locale/unicodedata.cpp
new file mode 100644
index 0000000000..54b7e14d57
--- /dev/null
+++ b/src/pal/src/locale/unicodedata.cpp
@@ -0,0 +1,2342 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+#include "pal/unicodedata.h"
+
+//
+// THIS FILE IS GENERATED. DO NOT HAND EDIT.
+//
+
+CONST UnicodeDataRec UnicodeData[] = {
+ { 0x41, UPPER_CASE, 0x61 },
+ { 0x42, UPPER_CASE, 0x62 },
+ { 0x43, UPPER_CASE, 0x63 },
+ { 0x44, UPPER_CASE, 0x64 },
+ { 0x45, UPPER_CASE, 0x65 },
+ { 0x46, UPPER_CASE, 0x66 },
+ { 0x47, UPPER_CASE, 0x67 },
+ { 0x48, UPPER_CASE, 0x68 },
+ { 0x49, UPPER_CASE, 0x69 },
+ { 0x4A, UPPER_CASE, 0x6A },
+ { 0x4B, UPPER_CASE, 0x6B },
+ { 0x4C, UPPER_CASE, 0x6C },
+ { 0x4D, UPPER_CASE, 0x6D },
+ { 0x4E, UPPER_CASE, 0x6E },
+ { 0x4F, UPPER_CASE, 0x6F },
+ { 0x50, UPPER_CASE, 0x70 },
+ { 0x51, UPPER_CASE, 0x71 },
+ { 0x52, UPPER_CASE, 0x72 },
+ { 0x53, UPPER_CASE, 0x73 },
+ { 0x54, UPPER_CASE, 0x74 },
+ { 0x55, UPPER_CASE, 0x75 },
+ { 0x56, UPPER_CASE, 0x76 },
+ { 0x57, UPPER_CASE, 0x77 },
+ { 0x58, UPPER_CASE, 0x78 },
+ { 0x59, UPPER_CASE, 0x79 },
+ { 0x5A, UPPER_CASE, 0x7A },
+ { 0x61, LOWER_CASE, 0x41 },
+ { 0x62, LOWER_CASE, 0x42 },
+ { 0x63, LOWER_CASE, 0x43 },
+ { 0x64, LOWER_CASE, 0x44 },
+ { 0x65, LOWER_CASE, 0x45 },
+ { 0x66, LOWER_CASE, 0x46 },
+ { 0x67, LOWER_CASE, 0x47 },
+ { 0x68, LOWER_CASE, 0x48 },
+ { 0x69, LOWER_CASE, 0x49 },
+ { 0x6A, LOWER_CASE, 0x4A },
+ { 0x6B, LOWER_CASE, 0x4B },
+ { 0x6C, LOWER_CASE, 0x4C },
+ { 0x6D, LOWER_CASE, 0x4D },
+ { 0x6E, LOWER_CASE, 0x4E },
+ { 0x6F, LOWER_CASE, 0x4F },
+ { 0x70, LOWER_CASE, 0x50 },
+ { 0x71, LOWER_CASE, 0x51 },
+ { 0x72, LOWER_CASE, 0x52 },
+ { 0x73, LOWER_CASE, 0x53 },
+ { 0x74, LOWER_CASE, 0x54 },
+ { 0x75, LOWER_CASE, 0x55 },
+ { 0x76, LOWER_CASE, 0x56 },
+ { 0x77, LOWER_CASE, 0x57 },
+ { 0x78, LOWER_CASE, 0x58 },
+ { 0x79, LOWER_CASE, 0x59 },
+ { 0x7A, LOWER_CASE, 0x5A },
+ { 0xB5, LOWER_CASE, 0x39C },
+ { 0xC0, UPPER_CASE, 0xE0 },
+ { 0xC1, UPPER_CASE, 0xE1 },
+ { 0xC2, UPPER_CASE, 0xE2 },
+ { 0xC3, UPPER_CASE, 0xE3 },
+ { 0xC4, UPPER_CASE, 0xE4 },
+ { 0xC5, UPPER_CASE, 0xE5 },
+ { 0xC6, UPPER_CASE, 0xE6 },
+ { 0xC7, UPPER_CASE, 0xE7 },
+ { 0xC8, UPPER_CASE, 0xE8 },
+ { 0xC9, UPPER_CASE, 0xE9 },
+ { 0xCA, UPPER_CASE, 0xEA },
+ { 0xCB, UPPER_CASE, 0xEB },
+ { 0xCC, UPPER_CASE, 0xEC },
+ { 0xCD, UPPER_CASE, 0xED },
+ { 0xCE, UPPER_CASE, 0xEE },
+ { 0xCF, UPPER_CASE, 0xEF },
+ { 0xD0, UPPER_CASE, 0xF0 },
+ { 0xD1, UPPER_CASE, 0xF1 },
+ { 0xD2, UPPER_CASE, 0xF2 },
+ { 0xD3, UPPER_CASE, 0xF3 },
+ { 0xD4, UPPER_CASE, 0xF4 },
+ { 0xD5, UPPER_CASE, 0xF5 },
+ { 0xD6, UPPER_CASE, 0xF6 },
+ { 0xD8, UPPER_CASE, 0xF8 },
+ { 0xD9, UPPER_CASE, 0xF9 },
+ { 0xDA, UPPER_CASE, 0xFA },
+ { 0xDB, UPPER_CASE, 0xFB },
+ { 0xDC, UPPER_CASE, 0xFC },
+ { 0xDD, UPPER_CASE, 0xFD },
+ { 0xDE, UPPER_CASE, 0xFE },
+ { 0xE0, LOWER_CASE, 0xC0 },
+ { 0xE1, LOWER_CASE, 0xC1 },
+ { 0xE2, LOWER_CASE, 0xC2 },
+ { 0xE3, LOWER_CASE, 0xC3 },
+ { 0xE4, LOWER_CASE, 0xC4 },
+ { 0xE5, LOWER_CASE, 0xC5 },
+ { 0xE6, LOWER_CASE, 0xC6 },
+ { 0xE7, LOWER_CASE, 0xC7 },
+ { 0xE8, LOWER_CASE, 0xC8 },
+ { 0xE9, LOWER_CASE, 0xC9 },
+ { 0xEA, LOWER_CASE, 0xCA },
+ { 0xEB, LOWER_CASE, 0xCB },
+ { 0xEC, LOWER_CASE, 0xCC },
+ { 0xED, LOWER_CASE, 0xCD },
+ { 0xEE, LOWER_CASE, 0xCE },
+ { 0xEF, LOWER_CASE, 0xCF },
+ { 0xF0, LOWER_CASE, 0xD0 },
+ { 0xF1, LOWER_CASE, 0xD1 },
+ { 0xF2, LOWER_CASE, 0xD2 },
+ { 0xF3, LOWER_CASE, 0xD3 },
+ { 0xF4, LOWER_CASE, 0xD4 },
+ { 0xF5, LOWER_CASE, 0xD5 },
+ { 0xF6, LOWER_CASE, 0xD6 },
+ { 0xF8, LOWER_CASE, 0xD8 },
+ { 0xF9, LOWER_CASE, 0xD9 },
+ { 0xFA, LOWER_CASE, 0xDA },
+ { 0xFB, LOWER_CASE, 0xDB },
+ { 0xFC, LOWER_CASE, 0xDC },
+ { 0xFD, LOWER_CASE, 0xDD },
+ { 0xFE, LOWER_CASE, 0xDE },
+ { 0xFF, LOWER_CASE, 0x178 },
+ { 0x100, UPPER_CASE, 0x101 },
+ { 0x101, LOWER_CASE, 0x100 },
+ { 0x102, UPPER_CASE, 0x103 },
+ { 0x103, LOWER_CASE, 0x102 },
+ { 0x104, UPPER_CASE, 0x105 },
+ { 0x105, LOWER_CASE, 0x104 },
+ { 0x106, UPPER_CASE, 0x107 },
+ { 0x107, LOWER_CASE, 0x106 },
+ { 0x108, UPPER_CASE, 0x109 },
+ { 0x109, LOWER_CASE, 0x108 },
+ { 0x10A, UPPER_CASE, 0x10B },
+ { 0x10B, LOWER_CASE, 0x10A },
+ { 0x10C, UPPER_CASE, 0x10D },
+ { 0x10D, LOWER_CASE, 0x10C },
+ { 0x10E, UPPER_CASE, 0x10F },
+ { 0x10F, LOWER_CASE, 0x10E },
+ { 0x110, UPPER_CASE, 0x111 },
+ { 0x111, LOWER_CASE, 0x110 },
+ { 0x112, UPPER_CASE, 0x113 },
+ { 0x113, LOWER_CASE, 0x112 },
+ { 0x114, UPPER_CASE, 0x115 },
+ { 0x115, LOWER_CASE, 0x114 },
+ { 0x116, UPPER_CASE, 0x117 },
+ { 0x117, LOWER_CASE, 0x116 },
+ { 0x118, UPPER_CASE, 0x119 },
+ { 0x119, LOWER_CASE, 0x118 },
+ { 0x11A, UPPER_CASE, 0x11B },
+ { 0x11B, LOWER_CASE, 0x11A },
+ { 0x11C, UPPER_CASE, 0x11D },
+ { 0x11D, LOWER_CASE, 0x11C },
+ { 0x11E, UPPER_CASE, 0x11F },
+ { 0x11F, LOWER_CASE, 0x11E },
+ { 0x120, UPPER_CASE, 0x121 },
+ { 0x121, LOWER_CASE, 0x120 },
+ { 0x122, UPPER_CASE, 0x123 },
+ { 0x123, LOWER_CASE, 0x122 },
+ { 0x124, UPPER_CASE, 0x125 },
+ { 0x125, LOWER_CASE, 0x124 },
+ { 0x126, UPPER_CASE, 0x127 },
+ { 0x127, LOWER_CASE, 0x126 },
+ { 0x128, UPPER_CASE, 0x129 },
+ { 0x129, LOWER_CASE, 0x128 },
+ { 0x12A, UPPER_CASE, 0x12B },
+ { 0x12B, LOWER_CASE, 0x12A },
+ { 0x12C, UPPER_CASE, 0x12D },
+ { 0x12D, LOWER_CASE, 0x12C },
+ { 0x12E, UPPER_CASE, 0x12F },
+ { 0x12F, LOWER_CASE, 0x12E },
+ { 0x130, UPPER_CASE, 0x69 },
+ { 0x131, LOWER_CASE, 0x49 },
+ { 0x132, UPPER_CASE, 0x133 },
+ { 0x133, LOWER_CASE, 0x132 },
+ { 0x134, UPPER_CASE, 0x135 },
+ { 0x135, LOWER_CASE, 0x134 },
+ { 0x136, UPPER_CASE, 0x137 },
+ { 0x137, LOWER_CASE, 0x136 },
+ { 0x139, UPPER_CASE, 0x13A },
+ { 0x13A, LOWER_CASE, 0x139 },
+ { 0x13B, UPPER_CASE, 0x13C },
+ { 0x13C, LOWER_CASE, 0x13B },
+ { 0x13D, UPPER_CASE, 0x13E },
+ { 0x13E, LOWER_CASE, 0x13D },
+ { 0x13F, UPPER_CASE, 0x140 },
+ { 0x140, LOWER_CASE, 0x13F },
+ { 0x141, UPPER_CASE, 0x142 },
+ { 0x142, LOWER_CASE, 0x141 },
+ { 0x143, UPPER_CASE, 0x144 },
+ { 0x144, LOWER_CASE, 0x143 },
+ { 0x145, UPPER_CASE, 0x146 },
+ { 0x146, LOWER_CASE, 0x145 },
+ { 0x147, UPPER_CASE, 0x148 },
+ { 0x148, LOWER_CASE, 0x147 },
+ { 0x14A, UPPER_CASE, 0x14B },
+ { 0x14B, LOWER_CASE, 0x14A },
+ { 0x14C, UPPER_CASE, 0x14D },
+ { 0x14D, LOWER_CASE, 0x14C },
+ { 0x14E, UPPER_CASE, 0x14F },
+ { 0x14F, LOWER_CASE, 0x14E },
+ { 0x150, UPPER_CASE, 0x151 },
+ { 0x151, LOWER_CASE, 0x150 },
+ { 0x152, UPPER_CASE, 0x153 },
+ { 0x153, LOWER_CASE, 0x152 },
+ { 0x154, UPPER_CASE, 0x155 },
+ { 0x155, LOWER_CASE, 0x154 },
+ { 0x156, UPPER_CASE, 0x157 },
+ { 0x157, LOWER_CASE, 0x156 },
+ { 0x158, UPPER_CASE, 0x159 },
+ { 0x159, LOWER_CASE, 0x158 },
+ { 0x15A, UPPER_CASE, 0x15B },
+ { 0x15B, LOWER_CASE, 0x15A },
+ { 0x15C, UPPER_CASE, 0x15D },
+ { 0x15D, LOWER_CASE, 0x15C },
+ { 0x15E, UPPER_CASE, 0x15F },
+ { 0x15F, LOWER_CASE, 0x15E },
+ { 0x160, UPPER_CASE, 0x161 },
+ { 0x161, LOWER_CASE, 0x160 },
+ { 0x162, UPPER_CASE, 0x163 },
+ { 0x163, LOWER_CASE, 0x162 },
+ { 0x164, UPPER_CASE, 0x165 },
+ { 0x165, LOWER_CASE, 0x164 },
+ { 0x166, UPPER_CASE, 0x167 },
+ { 0x167, LOWER_CASE, 0x166 },
+ { 0x168, UPPER_CASE, 0x169 },
+ { 0x169, LOWER_CASE, 0x168 },
+ { 0x16A, UPPER_CASE, 0x16B },
+ { 0x16B, LOWER_CASE, 0x16A },
+ { 0x16C, UPPER_CASE, 0x16D },
+ { 0x16D, LOWER_CASE, 0x16C },
+ { 0x16E, UPPER_CASE, 0x16F },
+ { 0x16F, LOWER_CASE, 0x16E },
+ { 0x170, UPPER_CASE, 0x171 },
+ { 0x171, LOWER_CASE, 0x170 },
+ { 0x172, UPPER_CASE, 0x173 },
+ { 0x173, LOWER_CASE, 0x172 },
+ { 0x174, UPPER_CASE, 0x175 },
+ { 0x175, LOWER_CASE, 0x174 },
+ { 0x176, UPPER_CASE, 0x177 },
+ { 0x177, LOWER_CASE, 0x176 },
+ { 0x178, UPPER_CASE, 0xFF },
+ { 0x179, UPPER_CASE, 0x17A },
+ { 0x17A, LOWER_CASE, 0x179 },
+ { 0x17B, UPPER_CASE, 0x17C },
+ { 0x17C, LOWER_CASE, 0x17B },
+ { 0x17D, UPPER_CASE, 0x17E },
+ { 0x17E, LOWER_CASE, 0x17D },
+ { 0x17F, LOWER_CASE, 0x53 },
+ { 0x180, LOWER_CASE, 0x243 },
+ { 0x181, UPPER_CASE, 0x253 },
+ { 0x182, UPPER_CASE, 0x183 },
+ { 0x183, LOWER_CASE, 0x182 },
+ { 0x184, UPPER_CASE, 0x185 },
+ { 0x185, LOWER_CASE, 0x184 },
+ { 0x186, UPPER_CASE, 0x254 },
+ { 0x187, UPPER_CASE, 0x188 },
+ { 0x188, LOWER_CASE, 0x187 },
+ { 0x189, UPPER_CASE, 0x256 },
+ { 0x18A, UPPER_CASE, 0x257 },
+ { 0x18B, UPPER_CASE, 0x18C },
+ { 0x18C, LOWER_CASE, 0x18B },
+ { 0x18E, UPPER_CASE, 0x1DD },
+ { 0x18F, UPPER_CASE, 0x259 },
+ { 0x190, UPPER_CASE, 0x25B },
+ { 0x191, UPPER_CASE, 0x192 },
+ { 0x192, LOWER_CASE, 0x191 },
+ { 0x193, UPPER_CASE, 0x260 },
+ { 0x194, UPPER_CASE, 0x263 },
+ { 0x195, LOWER_CASE, 0x1F6 },
+ { 0x196, UPPER_CASE, 0x269 },
+ { 0x197, UPPER_CASE, 0x268 },
+ { 0x198, UPPER_CASE, 0x199 },
+ { 0x199, LOWER_CASE, 0x198 },
+ { 0x19A, LOWER_CASE, 0x23D },
+ { 0x19C, UPPER_CASE, 0x26F },
+ { 0x19D, UPPER_CASE, 0x272 },
+ { 0x19E, LOWER_CASE, 0x220 },
+ { 0x19F, UPPER_CASE, 0x275 },
+ { 0x1A0, UPPER_CASE, 0x1A1 },
+ { 0x1A1, LOWER_CASE, 0x1A0 },
+ { 0x1A2, UPPER_CASE, 0x1A3 },
+ { 0x1A3, LOWER_CASE, 0x1A2 },
+ { 0x1A4, UPPER_CASE, 0x1A5 },
+ { 0x1A5, LOWER_CASE, 0x1A4 },
+ { 0x1A6, UPPER_CASE, 0x280 },
+ { 0x1A7, UPPER_CASE, 0x1A8 },
+ { 0x1A8, LOWER_CASE, 0x1A7 },
+ { 0x1A9, UPPER_CASE, 0x283 },
+ { 0x1AC, UPPER_CASE, 0x1AD },
+ { 0x1AD, LOWER_CASE, 0x1AC },
+ { 0x1AE, UPPER_CASE, 0x288 },
+ { 0x1AF, UPPER_CASE, 0x1B0 },
+ { 0x1B0, LOWER_CASE, 0x1AF },
+ { 0x1B1, UPPER_CASE, 0x28A },
+ { 0x1B2, UPPER_CASE, 0x28B },
+ { 0x1B3, UPPER_CASE, 0x1B4 },
+ { 0x1B4, LOWER_CASE, 0x1B3 },
+ { 0x1B5, UPPER_CASE, 0x1B6 },
+ { 0x1B6, LOWER_CASE, 0x1B5 },
+ { 0x1B7, UPPER_CASE, 0x292 },
+ { 0x1B8, UPPER_CASE, 0x1B9 },
+ { 0x1B9, LOWER_CASE, 0x1B8 },
+ { 0x1BC, UPPER_CASE, 0x1BD },
+ { 0x1BD, LOWER_CASE, 0x1BC },
+ { 0x1BF, LOWER_CASE, 0x1F7 },
+ { 0x1C4, UPPER_CASE, 0x1C6 },
+ { 0x1C5, LOWER_CASE, 0x1C4 },
+ { 0x1C6, LOWER_CASE, 0x1C4 },
+ { 0x1C7, UPPER_CASE, 0x1C9 },
+ { 0x1C8, LOWER_CASE, 0x1C7 },
+ { 0x1C9, LOWER_CASE, 0x1C7 },
+ { 0x1CA, UPPER_CASE, 0x1CC },
+ { 0x1CB, LOWER_CASE, 0x1CA },
+ { 0x1CC, LOWER_CASE, 0x1CA },
+ { 0x1CD, UPPER_CASE, 0x1CE },
+ { 0x1CE, LOWER_CASE, 0x1CD },
+ { 0x1CF, UPPER_CASE, 0x1D0 },
+ { 0x1D0, LOWER_CASE, 0x1CF },
+ { 0x1D1, UPPER_CASE, 0x1D2 },
+ { 0x1D2, LOWER_CASE, 0x1D1 },
+ { 0x1D3, UPPER_CASE, 0x1D4 },
+ { 0x1D4, LOWER_CASE, 0x1D3 },
+ { 0x1D5, UPPER_CASE, 0x1D6 },
+ { 0x1D6, LOWER_CASE, 0x1D5 },
+ { 0x1D7, UPPER_CASE, 0x1D8 },
+ { 0x1D8, LOWER_CASE, 0x1D7 },
+ { 0x1D9, UPPER_CASE, 0x1DA },
+ { 0x1DA, LOWER_CASE, 0x1D9 },
+ { 0x1DB, UPPER_CASE, 0x1DC },
+ { 0x1DC, LOWER_CASE, 0x1DB },
+ { 0x1DD, LOWER_CASE, 0x18E },
+ { 0x1DE, UPPER_CASE, 0x1DF },
+ { 0x1DF, LOWER_CASE, 0x1DE },
+ { 0x1E0, UPPER_CASE, 0x1E1 },
+ { 0x1E1, LOWER_CASE, 0x1E0 },
+ { 0x1E2, UPPER_CASE, 0x1E3 },
+ { 0x1E3, LOWER_CASE, 0x1E2 },
+ { 0x1E4, UPPER_CASE, 0x1E5 },
+ { 0x1E5, LOWER_CASE, 0x1E4 },
+ { 0x1E6, UPPER_CASE, 0x1E7 },
+ { 0x1E7, LOWER_CASE, 0x1E6 },
+ { 0x1E8, UPPER_CASE, 0x1E9 },
+ { 0x1E9, LOWER_CASE, 0x1E8 },
+ { 0x1EA, UPPER_CASE, 0x1EB },
+ { 0x1EB, LOWER_CASE, 0x1EA },
+ { 0x1EC, UPPER_CASE, 0x1ED },
+ { 0x1ED, LOWER_CASE, 0x1EC },
+ { 0x1EE, UPPER_CASE, 0x1EF },
+ { 0x1EF, LOWER_CASE, 0x1EE },
+ { 0x1F1, UPPER_CASE, 0x1F3 },
+ { 0x1F2, LOWER_CASE, 0x1F1 },
+ { 0x1F3, LOWER_CASE, 0x1F1 },
+ { 0x1F4, UPPER_CASE, 0x1F5 },
+ { 0x1F5, LOWER_CASE, 0x1F4 },
+ { 0x1F6, UPPER_CASE, 0x195 },
+ { 0x1F7, UPPER_CASE, 0x1BF },
+ { 0x1F8, UPPER_CASE, 0x1F9 },
+ { 0x1F9, LOWER_CASE, 0x1F8 },
+ { 0x1FA, UPPER_CASE, 0x1FB },
+ { 0x1FB, LOWER_CASE, 0x1FA },
+ { 0x1FC, UPPER_CASE, 0x1FD },
+ { 0x1FD, LOWER_CASE, 0x1FC },
+ { 0x1FE, UPPER_CASE, 0x1FF },
+ { 0x1FF, LOWER_CASE, 0x1FE },
+ { 0x200, UPPER_CASE, 0x201 },
+ { 0x201, LOWER_CASE, 0x200 },
+ { 0x202, UPPER_CASE, 0x203 },
+ { 0x203, LOWER_CASE, 0x202 },
+ { 0x204, UPPER_CASE, 0x205 },
+ { 0x205, LOWER_CASE, 0x204 },
+ { 0x206, UPPER_CASE, 0x207 },
+ { 0x207, LOWER_CASE, 0x206 },
+ { 0x208, UPPER_CASE, 0x209 },
+ { 0x209, LOWER_CASE, 0x208 },
+ { 0x20A, UPPER_CASE, 0x20B },
+ { 0x20B, LOWER_CASE, 0x20A },
+ { 0x20C, UPPER_CASE, 0x20D },
+ { 0x20D, LOWER_CASE, 0x20C },
+ { 0x20E, UPPER_CASE, 0x20F },
+ { 0x20F, LOWER_CASE, 0x20E },
+ { 0x210, UPPER_CASE, 0x211 },
+ { 0x211, LOWER_CASE, 0x210 },
+ { 0x212, UPPER_CASE, 0x213 },
+ { 0x213, LOWER_CASE, 0x212 },
+ { 0x214, UPPER_CASE, 0x215 },
+ { 0x215, LOWER_CASE, 0x214 },
+ { 0x216, UPPER_CASE, 0x217 },
+ { 0x217, LOWER_CASE, 0x216 },
+ { 0x218, UPPER_CASE, 0x219 },
+ { 0x219, LOWER_CASE, 0x218 },
+ { 0x21A, UPPER_CASE, 0x21B },
+ { 0x21B, LOWER_CASE, 0x21A },
+ { 0x21C, UPPER_CASE, 0x21D },
+ { 0x21D, LOWER_CASE, 0x21C },
+ { 0x21E, UPPER_CASE, 0x21F },
+ { 0x21F, LOWER_CASE, 0x21E },
+ { 0x220, UPPER_CASE, 0x19E },
+ { 0x222, UPPER_CASE, 0x223 },
+ { 0x223, LOWER_CASE, 0x222 },
+ { 0x224, UPPER_CASE, 0x225 },
+ { 0x225, LOWER_CASE, 0x224 },
+ { 0x226, UPPER_CASE, 0x227 },
+ { 0x227, LOWER_CASE, 0x226 },
+ { 0x228, UPPER_CASE, 0x229 },
+ { 0x229, LOWER_CASE, 0x228 },
+ { 0x22A, UPPER_CASE, 0x22B },
+ { 0x22B, LOWER_CASE, 0x22A },
+ { 0x22C, UPPER_CASE, 0x22D },
+ { 0x22D, LOWER_CASE, 0x22C },
+ { 0x22E, UPPER_CASE, 0x22F },
+ { 0x22F, LOWER_CASE, 0x22E },
+ { 0x230, UPPER_CASE, 0x231 },
+ { 0x231, LOWER_CASE, 0x230 },
+ { 0x232, UPPER_CASE, 0x233 },
+ { 0x233, LOWER_CASE, 0x232 },
+ { 0x23A, UPPER_CASE, 0x2C65 },
+ { 0x23B, UPPER_CASE, 0x23C },
+ { 0x23C, LOWER_CASE, 0x23B },
+ { 0x23D, UPPER_CASE, 0x19A },
+ { 0x23E, UPPER_CASE, 0x2C66 },
+ { 0x23F, LOWER_CASE, 0x2C7E },
+ { 0x240, LOWER_CASE, 0x2C7F },
+ { 0x241, UPPER_CASE, 0x242 },
+ { 0x242, LOWER_CASE, 0x241 },
+ { 0x243, UPPER_CASE, 0x180 },
+ { 0x244, UPPER_CASE, 0x289 },
+ { 0x245, UPPER_CASE, 0x28C },
+ { 0x246, UPPER_CASE, 0x247 },
+ { 0x247, LOWER_CASE, 0x246 },
+ { 0x248, UPPER_CASE, 0x249 },
+ { 0x249, LOWER_CASE, 0x248 },
+ { 0x24A, UPPER_CASE, 0x24B },
+ { 0x24B, LOWER_CASE, 0x24A },
+ { 0x24C, UPPER_CASE, 0x24D },
+ { 0x24D, LOWER_CASE, 0x24C },
+ { 0x24E, UPPER_CASE, 0x24F },
+ { 0x24F, LOWER_CASE, 0x24E },
+ { 0x250, LOWER_CASE, 0x2C6F },
+ { 0x251, LOWER_CASE, 0x2C6D },
+ { 0x252, LOWER_CASE, 0x2C70 },
+ { 0x253, LOWER_CASE, 0x181 },
+ { 0x254, LOWER_CASE, 0x186 },
+ { 0x256, LOWER_CASE, 0x189 },
+ { 0x257, LOWER_CASE, 0x18A },
+ { 0x259, LOWER_CASE, 0x18F },
+ { 0x25B, LOWER_CASE, 0x190 },
+ { 0x25C, LOWER_CASE, 0xA7AB },
+ { 0x260, LOWER_CASE, 0x193 },
+ { 0x261, LOWER_CASE, 0xA7AC },
+ { 0x263, LOWER_CASE, 0x194 },
+ { 0x265, LOWER_CASE, 0xA78D },
+ { 0x266, LOWER_CASE, 0xA7AA },
+ { 0x268, LOWER_CASE, 0x197 },
+ { 0x269, LOWER_CASE, 0x196 },
+ { 0x26A, LOWER_CASE, 0xA7AE },
+ { 0x26B, LOWER_CASE, 0x2C62 },
+ { 0x26C, LOWER_CASE, 0xA7AD },
+ { 0x26F, LOWER_CASE, 0x19C },
+ { 0x271, LOWER_CASE, 0x2C6E },
+ { 0x272, LOWER_CASE, 0x19D },
+ { 0x275, LOWER_CASE, 0x19F },
+ { 0x27D, LOWER_CASE, 0x2C64 },
+ { 0x280, LOWER_CASE, 0x1A6 },
+ { 0x283, LOWER_CASE, 0x1A9 },
+ { 0x287, LOWER_CASE, 0xA7B1 },
+ { 0x288, LOWER_CASE, 0x1AE },
+ { 0x289, LOWER_CASE, 0x244 },
+ { 0x28A, LOWER_CASE, 0x1B1 },
+ { 0x28B, LOWER_CASE, 0x1B2 },
+ { 0x28C, LOWER_CASE, 0x245 },
+ { 0x292, LOWER_CASE, 0x1B7 },
+ { 0x29D, LOWER_CASE, 0xA7B2 },
+ { 0x29E, LOWER_CASE, 0xA7B0 },
+ { 0x345, LOWER_CASE, 0x399 },
+ { 0x370, UPPER_CASE, 0x371 },
+ { 0x371, LOWER_CASE, 0x370 },
+ { 0x372, UPPER_CASE, 0x373 },
+ { 0x373, LOWER_CASE, 0x372 },
+ { 0x376, UPPER_CASE, 0x377 },
+ { 0x377, LOWER_CASE, 0x376 },
+ { 0x37B, LOWER_CASE, 0x3FD },
+ { 0x37C, LOWER_CASE, 0x3FE },
+ { 0x37D, LOWER_CASE, 0x3FF },
+ { 0x37F, UPPER_CASE, 0x3F3 },
+ { 0x386, UPPER_CASE, 0x3AC },
+ { 0x388, UPPER_CASE, 0x3AD },
+ { 0x389, UPPER_CASE, 0x3AE },
+ { 0x38A, UPPER_CASE, 0x3AF },
+ { 0x38C, UPPER_CASE, 0x3CC },
+ { 0x38E, UPPER_CASE, 0x3CD },
+ { 0x38F, UPPER_CASE, 0x3CE },
+ { 0x391, UPPER_CASE, 0x3B1 },
+ { 0x392, UPPER_CASE, 0x3B2 },
+ { 0x393, UPPER_CASE, 0x3B3 },
+ { 0x394, UPPER_CASE, 0x3B4 },
+ { 0x395, UPPER_CASE, 0x3B5 },
+ { 0x396, UPPER_CASE, 0x3B6 },
+ { 0x397, UPPER_CASE, 0x3B7 },
+ { 0x398, UPPER_CASE, 0x3B8 },
+ { 0x399, UPPER_CASE, 0x3B9 },
+ { 0x39A, UPPER_CASE, 0x3BA },
+ { 0x39B, UPPER_CASE, 0x3BB },
+ { 0x39C, UPPER_CASE, 0x3BC },
+ { 0x39D, UPPER_CASE, 0x3BD },
+ { 0x39E, UPPER_CASE, 0x3BE },
+ { 0x39F, UPPER_CASE, 0x3BF },
+ { 0x3A0, UPPER_CASE, 0x3C0 },
+ { 0x3A1, UPPER_CASE, 0x3C1 },
+ { 0x3A3, UPPER_CASE, 0x3C3 },
+ { 0x3A4, UPPER_CASE, 0x3C4 },
+ { 0x3A5, UPPER_CASE, 0x3C5 },
+ { 0x3A6, UPPER_CASE, 0x3C6 },
+ { 0x3A7, UPPER_CASE, 0x3C7 },
+ { 0x3A8, UPPER_CASE, 0x3C8 },
+ { 0x3A9, UPPER_CASE, 0x3C9 },
+ { 0x3AA, UPPER_CASE, 0x3CA },
+ { 0x3AB, UPPER_CASE, 0x3CB },
+ { 0x3AC, LOWER_CASE, 0x386 },
+ { 0x3AD, LOWER_CASE, 0x388 },
+ { 0x3AE, LOWER_CASE, 0x389 },
+ { 0x3AF, LOWER_CASE, 0x38A },
+ { 0x3B1, LOWER_CASE, 0x391 },
+ { 0x3B2, LOWER_CASE, 0x392 },
+ { 0x3B3, LOWER_CASE, 0x393 },
+ { 0x3B4, LOWER_CASE, 0x394 },
+ { 0x3B5, LOWER_CASE, 0x395 },
+ { 0x3B6, LOWER_CASE, 0x396 },
+ { 0x3B7, LOWER_CASE, 0x397 },
+ { 0x3B8, LOWER_CASE, 0x398 },
+ { 0x3B9, LOWER_CASE, 0x399 },
+ { 0x3BA, LOWER_CASE, 0x39A },
+ { 0x3BB, LOWER_CASE, 0x39B },
+ { 0x3BC, LOWER_CASE, 0x39C },
+ { 0x3BD, LOWER_CASE, 0x39D },
+ { 0x3BE, LOWER_CASE, 0x39E },
+ { 0x3BF, LOWER_CASE, 0x39F },
+ { 0x3C0, LOWER_CASE, 0x3A0 },
+ { 0x3C1, LOWER_CASE, 0x3A1 },
+ { 0x3C2, LOWER_CASE, 0x3A3 },
+ { 0x3C3, LOWER_CASE, 0x3A3 },
+ { 0x3C4, LOWER_CASE, 0x3A4 },
+ { 0x3C5, LOWER_CASE, 0x3A5 },
+ { 0x3C6, LOWER_CASE, 0x3A6 },
+ { 0x3C7, LOWER_CASE, 0x3A7 },
+ { 0x3C8, LOWER_CASE, 0x3A8 },
+ { 0x3C9, LOWER_CASE, 0x3A9 },
+ { 0x3CA, LOWER_CASE, 0x3AA },
+ { 0x3CB, LOWER_CASE, 0x3AB },
+ { 0x3CC, LOWER_CASE, 0x38C },
+ { 0x3CD, LOWER_CASE, 0x38E },
+ { 0x3CE, LOWER_CASE, 0x38F },
+ { 0x3CF, UPPER_CASE, 0x3D7 },
+ { 0x3D0, LOWER_CASE, 0x392 },
+ { 0x3D1, LOWER_CASE, 0x398 },
+ { 0x3D5, LOWER_CASE, 0x3A6 },
+ { 0x3D6, LOWER_CASE, 0x3A0 },
+ { 0x3D7, LOWER_CASE, 0x3CF },
+ { 0x3D8, UPPER_CASE, 0x3D9 },
+ { 0x3D9, LOWER_CASE, 0x3D8 },
+ { 0x3DA, UPPER_CASE, 0x3DB },
+ { 0x3DB, LOWER_CASE, 0x3DA },
+ { 0x3DC, UPPER_CASE, 0x3DD },
+ { 0x3DD, LOWER_CASE, 0x3DC },
+ { 0x3DE, UPPER_CASE, 0x3DF },
+ { 0x3DF, LOWER_CASE, 0x3DE },
+ { 0x3E0, UPPER_CASE, 0x3E1 },
+ { 0x3E1, LOWER_CASE, 0x3E0 },
+ { 0x3E2, UPPER_CASE, 0x3E3 },
+ { 0x3E3, LOWER_CASE, 0x3E2 },
+ { 0x3E4, UPPER_CASE, 0x3E5 },
+ { 0x3E5, LOWER_CASE, 0x3E4 },
+ { 0x3E6, UPPER_CASE, 0x3E7 },
+ { 0x3E7, LOWER_CASE, 0x3E6 },
+ { 0x3E8, UPPER_CASE, 0x3E9 },
+ { 0x3E9, LOWER_CASE, 0x3E8 },
+ { 0x3EA, UPPER_CASE, 0x3EB },
+ { 0x3EB, LOWER_CASE, 0x3EA },
+ { 0x3EC, UPPER_CASE, 0x3ED },
+ { 0x3ED, LOWER_CASE, 0x3EC },
+ { 0x3EE, UPPER_CASE, 0x3EF },
+ { 0x3EF, LOWER_CASE, 0x3EE },
+ { 0x3F0, LOWER_CASE, 0x39A },
+ { 0x3F1, LOWER_CASE, 0x3A1 },
+ { 0x3F2, LOWER_CASE, 0x3F9 },
+ { 0x3F3, LOWER_CASE, 0x37F },
+ { 0x3F4, UPPER_CASE, 0x3B8 },
+ { 0x3F5, LOWER_CASE, 0x395 },
+ { 0x3F7, UPPER_CASE, 0x3F8 },
+ { 0x3F8, LOWER_CASE, 0x3F7 },
+ { 0x3F9, UPPER_CASE, 0x3F2 },
+ { 0x3FA, UPPER_CASE, 0x3FB },
+ { 0x3FB, LOWER_CASE, 0x3FA },
+ { 0x3FD, UPPER_CASE, 0x37B },
+ { 0x3FE, UPPER_CASE, 0x37C },
+ { 0x3FF, UPPER_CASE, 0x37D },
+ { 0x400, UPPER_CASE, 0x450 },
+ { 0x401, UPPER_CASE, 0x451 },
+ { 0x402, UPPER_CASE, 0x452 },
+ { 0x403, UPPER_CASE, 0x453 },
+ { 0x404, UPPER_CASE, 0x454 },
+ { 0x405, UPPER_CASE, 0x455 },
+ { 0x406, UPPER_CASE, 0x456 },
+ { 0x407, UPPER_CASE, 0x457 },
+ { 0x408, UPPER_CASE, 0x458 },
+ { 0x409, UPPER_CASE, 0x459 },
+ { 0x40A, UPPER_CASE, 0x45A },
+ { 0x40B, UPPER_CASE, 0x45B },
+ { 0x40C, UPPER_CASE, 0x45C },
+ { 0x40D, UPPER_CASE, 0x45D },
+ { 0x40E, UPPER_CASE, 0x45E },
+ { 0x40F, UPPER_CASE, 0x45F },
+ { 0x410, UPPER_CASE, 0x430 },
+ { 0x411, UPPER_CASE, 0x431 },
+ { 0x412, UPPER_CASE, 0x432 },
+ { 0x413, UPPER_CASE, 0x433 },
+ { 0x414, UPPER_CASE, 0x434 },
+ { 0x415, UPPER_CASE, 0x435 },
+ { 0x416, UPPER_CASE, 0x436 },
+ { 0x417, UPPER_CASE, 0x437 },
+ { 0x418, UPPER_CASE, 0x438 },
+ { 0x419, UPPER_CASE, 0x439 },
+ { 0x41A, UPPER_CASE, 0x43A },
+ { 0x41B, UPPER_CASE, 0x43B },
+ { 0x41C, UPPER_CASE, 0x43C },
+ { 0x41D, UPPER_CASE, 0x43D },
+ { 0x41E, UPPER_CASE, 0x43E },
+ { 0x41F, UPPER_CASE, 0x43F },
+ { 0x420, UPPER_CASE, 0x440 },
+ { 0x421, UPPER_CASE, 0x441 },
+ { 0x422, UPPER_CASE, 0x442 },
+ { 0x423, UPPER_CASE, 0x443 },
+ { 0x424, UPPER_CASE, 0x444 },
+ { 0x425, UPPER_CASE, 0x445 },
+ { 0x426, UPPER_CASE, 0x446 },
+ { 0x427, UPPER_CASE, 0x447 },
+ { 0x428, UPPER_CASE, 0x448 },
+ { 0x429, UPPER_CASE, 0x449 },
+ { 0x42A, UPPER_CASE, 0x44A },
+ { 0x42B, UPPER_CASE, 0x44B },
+ { 0x42C, UPPER_CASE, 0x44C },
+ { 0x42D, UPPER_CASE, 0x44D },
+ { 0x42E, UPPER_CASE, 0x44E },
+ { 0x42F, UPPER_CASE, 0x44F },
+ { 0x430, LOWER_CASE, 0x410 },
+ { 0x431, LOWER_CASE, 0x411 },
+ { 0x432, LOWER_CASE, 0x412 },
+ { 0x433, LOWER_CASE, 0x413 },
+ { 0x434, LOWER_CASE, 0x414 },
+ { 0x435, LOWER_CASE, 0x415 },
+ { 0x436, LOWER_CASE, 0x416 },
+ { 0x437, LOWER_CASE, 0x417 },
+ { 0x438, LOWER_CASE, 0x418 },
+ { 0x439, LOWER_CASE, 0x419 },
+ { 0x43A, LOWER_CASE, 0x41A },
+ { 0x43B, LOWER_CASE, 0x41B },
+ { 0x43C, LOWER_CASE, 0x41C },
+ { 0x43D, LOWER_CASE, 0x41D },
+ { 0x43E, LOWER_CASE, 0x41E },
+ { 0x43F, LOWER_CASE, 0x41F },
+ { 0x440, LOWER_CASE, 0x420 },
+ { 0x441, LOWER_CASE, 0x421 },
+ { 0x442, LOWER_CASE, 0x422 },
+ { 0x443, LOWER_CASE, 0x423 },
+ { 0x444, LOWER_CASE, 0x424 },
+ { 0x445, LOWER_CASE, 0x425 },
+ { 0x446, LOWER_CASE, 0x426 },
+ { 0x447, LOWER_CASE, 0x427 },
+ { 0x448, LOWER_CASE, 0x428 },
+ { 0x449, LOWER_CASE, 0x429 },
+ { 0x44A, LOWER_CASE, 0x42A },
+ { 0x44B, LOWER_CASE, 0x42B },
+ { 0x44C, LOWER_CASE, 0x42C },
+ { 0x44D, LOWER_CASE, 0x42D },
+ { 0x44E, LOWER_CASE, 0x42E },
+ { 0x44F, LOWER_CASE, 0x42F },
+ { 0x450, LOWER_CASE, 0x400 },
+ { 0x451, LOWER_CASE, 0x401 },
+ { 0x452, LOWER_CASE, 0x402 },
+ { 0x453, LOWER_CASE, 0x403 },
+ { 0x454, LOWER_CASE, 0x404 },
+ { 0x455, LOWER_CASE, 0x405 },
+ { 0x456, LOWER_CASE, 0x406 },
+ { 0x457, LOWER_CASE, 0x407 },
+ { 0x458, LOWER_CASE, 0x408 },
+ { 0x459, LOWER_CASE, 0x409 },
+ { 0x45A, LOWER_CASE, 0x40A },
+ { 0x45B, LOWER_CASE, 0x40B },
+ { 0x45C, LOWER_CASE, 0x40C },
+ { 0x45D, LOWER_CASE, 0x40D },
+ { 0x45E, LOWER_CASE, 0x40E },
+ { 0x45F, LOWER_CASE, 0x40F },
+ { 0x460, UPPER_CASE, 0x461 },
+ { 0x461, LOWER_CASE, 0x460 },
+ { 0x462, UPPER_CASE, 0x463 },
+ { 0x463, LOWER_CASE, 0x462 },
+ { 0x464, UPPER_CASE, 0x465 },
+ { 0x465, LOWER_CASE, 0x464 },
+ { 0x466, UPPER_CASE, 0x467 },
+ { 0x467, LOWER_CASE, 0x466 },
+ { 0x468, UPPER_CASE, 0x469 },
+ { 0x469, LOWER_CASE, 0x468 },
+ { 0x46A, UPPER_CASE, 0x46B },
+ { 0x46B, LOWER_CASE, 0x46A },
+ { 0x46C, UPPER_CASE, 0x46D },
+ { 0x46D, LOWER_CASE, 0x46C },
+ { 0x46E, UPPER_CASE, 0x46F },
+ { 0x46F, LOWER_CASE, 0x46E },
+ { 0x470, UPPER_CASE, 0x471 },
+ { 0x471, LOWER_CASE, 0x470 },
+ { 0x472, UPPER_CASE, 0x473 },
+ { 0x473, LOWER_CASE, 0x472 },
+ { 0x474, UPPER_CASE, 0x475 },
+ { 0x475, LOWER_CASE, 0x474 },
+ { 0x476, UPPER_CASE, 0x477 },
+ { 0x477, LOWER_CASE, 0x476 },
+ { 0x478, UPPER_CASE, 0x479 },
+ { 0x479, LOWER_CASE, 0x478 },
+ { 0x47A, UPPER_CASE, 0x47B },
+ { 0x47B, LOWER_CASE, 0x47A },
+ { 0x47C, UPPER_CASE, 0x47D },
+ { 0x47D, LOWER_CASE, 0x47C },
+ { 0x47E, UPPER_CASE, 0x47F },
+ { 0x47F, LOWER_CASE, 0x47E },
+ { 0x480, UPPER_CASE, 0x481 },
+ { 0x481, LOWER_CASE, 0x480 },
+ { 0x48A, UPPER_CASE, 0x48B },
+ { 0x48B, LOWER_CASE, 0x48A },
+ { 0x48C, UPPER_CASE, 0x48D },
+ { 0x48D, LOWER_CASE, 0x48C },
+ { 0x48E, UPPER_CASE, 0x48F },
+ { 0x48F, LOWER_CASE, 0x48E },
+ { 0x490, UPPER_CASE, 0x491 },
+ { 0x491, LOWER_CASE, 0x490 },
+ { 0x492, UPPER_CASE, 0x493 },
+ { 0x493, LOWER_CASE, 0x492 },
+ { 0x494, UPPER_CASE, 0x495 },
+ { 0x495, LOWER_CASE, 0x494 },
+ { 0x496, UPPER_CASE, 0x497 },
+ { 0x497, LOWER_CASE, 0x496 },
+ { 0x498, UPPER_CASE, 0x499 },
+ { 0x499, LOWER_CASE, 0x498 },
+ { 0x49A, UPPER_CASE, 0x49B },
+ { 0x49B, LOWER_CASE, 0x49A },
+ { 0x49C, UPPER_CASE, 0x49D },
+ { 0x49D, LOWER_CASE, 0x49C },
+ { 0x49E, UPPER_CASE, 0x49F },
+ { 0x49F, LOWER_CASE, 0x49E },
+ { 0x4A0, UPPER_CASE, 0x4A1 },
+ { 0x4A1, LOWER_CASE, 0x4A0 },
+ { 0x4A2, UPPER_CASE, 0x4A3 },
+ { 0x4A3, LOWER_CASE, 0x4A2 },
+ { 0x4A4, UPPER_CASE, 0x4A5 },
+ { 0x4A5, LOWER_CASE, 0x4A4 },
+ { 0x4A6, UPPER_CASE, 0x4A7 },
+ { 0x4A7, LOWER_CASE, 0x4A6 },
+ { 0x4A8, UPPER_CASE, 0x4A9 },
+ { 0x4A9, LOWER_CASE, 0x4A8 },
+ { 0x4AA, UPPER_CASE, 0x4AB },
+ { 0x4AB, LOWER_CASE, 0x4AA },
+ { 0x4AC, UPPER_CASE, 0x4AD },
+ { 0x4AD, LOWER_CASE, 0x4AC },
+ { 0x4AE, UPPER_CASE, 0x4AF },
+ { 0x4AF, LOWER_CASE, 0x4AE },
+ { 0x4B0, UPPER_CASE, 0x4B1 },
+ { 0x4B1, LOWER_CASE, 0x4B0 },
+ { 0x4B2, UPPER_CASE, 0x4B3 },
+ { 0x4B3, LOWER_CASE, 0x4B2 },
+ { 0x4B4, UPPER_CASE, 0x4B5 },
+ { 0x4B5, LOWER_CASE, 0x4B4 },
+ { 0x4B6, UPPER_CASE, 0x4B7 },
+ { 0x4B7, LOWER_CASE, 0x4B6 },
+ { 0x4B8, UPPER_CASE, 0x4B9 },
+ { 0x4B9, LOWER_CASE, 0x4B8 },
+ { 0x4BA, UPPER_CASE, 0x4BB },
+ { 0x4BB, LOWER_CASE, 0x4BA },
+ { 0x4BC, UPPER_CASE, 0x4BD },
+ { 0x4BD, LOWER_CASE, 0x4BC },
+ { 0x4BE, UPPER_CASE, 0x4BF },
+ { 0x4BF, LOWER_CASE, 0x4BE },
+ { 0x4C0, UPPER_CASE, 0x4CF },
+ { 0x4C1, UPPER_CASE, 0x4C2 },
+ { 0x4C2, LOWER_CASE, 0x4C1 },
+ { 0x4C3, UPPER_CASE, 0x4C4 },
+ { 0x4C4, LOWER_CASE, 0x4C3 },
+ { 0x4C5, UPPER_CASE, 0x4C6 },
+ { 0x4C6, LOWER_CASE, 0x4C5 },
+ { 0x4C7, UPPER_CASE, 0x4C8 },
+ { 0x4C8, LOWER_CASE, 0x4C7 },
+ { 0x4C9, UPPER_CASE, 0x4CA },
+ { 0x4CA, LOWER_CASE, 0x4C9 },
+ { 0x4CB, UPPER_CASE, 0x4CC },
+ { 0x4CC, LOWER_CASE, 0x4CB },
+ { 0x4CD, UPPER_CASE, 0x4CE },
+ { 0x4CE, LOWER_CASE, 0x4CD },
+ { 0x4CF, LOWER_CASE, 0x4C0 },
+ { 0x4D0, UPPER_CASE, 0x4D1 },
+ { 0x4D1, LOWER_CASE, 0x4D0 },
+ { 0x4D2, UPPER_CASE, 0x4D3 },
+ { 0x4D3, LOWER_CASE, 0x4D2 },
+ { 0x4D4, UPPER_CASE, 0x4D5 },
+ { 0x4D5, LOWER_CASE, 0x4D4 },
+ { 0x4D6, UPPER_CASE, 0x4D7 },
+ { 0x4D7, LOWER_CASE, 0x4D6 },
+ { 0x4D8, UPPER_CASE, 0x4D9 },
+ { 0x4D9, LOWER_CASE, 0x4D8 },
+ { 0x4DA, UPPER_CASE, 0x4DB },
+ { 0x4DB, LOWER_CASE, 0x4DA },
+ { 0x4DC, UPPER_CASE, 0x4DD },
+ { 0x4DD, LOWER_CASE, 0x4DC },
+ { 0x4DE, UPPER_CASE, 0x4DF },
+ { 0x4DF, LOWER_CASE, 0x4DE },
+ { 0x4E0, UPPER_CASE, 0x4E1 },
+ { 0x4E1, LOWER_CASE, 0x4E0 },
+ { 0x4E2, UPPER_CASE, 0x4E3 },
+ { 0x4E3, LOWER_CASE, 0x4E2 },
+ { 0x4E4, UPPER_CASE, 0x4E5 },
+ { 0x4E5, LOWER_CASE, 0x4E4 },
+ { 0x4E6, UPPER_CASE, 0x4E7 },
+ { 0x4E7, LOWER_CASE, 0x4E6 },
+ { 0x4E8, UPPER_CASE, 0x4E9 },
+ { 0x4E9, LOWER_CASE, 0x4E8 },
+ { 0x4EA, UPPER_CASE, 0x4EB },
+ { 0x4EB, LOWER_CASE, 0x4EA },
+ { 0x4EC, UPPER_CASE, 0x4ED },
+ { 0x4ED, LOWER_CASE, 0x4EC },
+ { 0x4EE, UPPER_CASE, 0x4EF },
+ { 0x4EF, LOWER_CASE, 0x4EE },
+ { 0x4F0, UPPER_CASE, 0x4F1 },
+ { 0x4F1, LOWER_CASE, 0x4F0 },
+ { 0x4F2, UPPER_CASE, 0x4F3 },
+ { 0x4F3, LOWER_CASE, 0x4F2 },
+ { 0x4F4, UPPER_CASE, 0x4F5 },
+ { 0x4F5, LOWER_CASE, 0x4F4 },
+ { 0x4F6, UPPER_CASE, 0x4F7 },
+ { 0x4F7, LOWER_CASE, 0x4F6 },
+ { 0x4F8, UPPER_CASE, 0x4F9 },
+ { 0x4F9, LOWER_CASE, 0x4F8 },
+ { 0x4FA, UPPER_CASE, 0x4FB },
+ { 0x4FB, LOWER_CASE, 0x4FA },
+ { 0x4FC, UPPER_CASE, 0x4FD },
+ { 0x4FD, LOWER_CASE, 0x4FC },
+ { 0x4FE, UPPER_CASE, 0x4FF },
+ { 0x4FF, LOWER_CASE, 0x4FE },
+ { 0x500, UPPER_CASE, 0x501 },
+ { 0x501, LOWER_CASE, 0x500 },
+ { 0x502, UPPER_CASE, 0x503 },
+ { 0x503, LOWER_CASE, 0x502 },
+ { 0x504, UPPER_CASE, 0x505 },
+ { 0x505, LOWER_CASE, 0x504 },
+ { 0x506, UPPER_CASE, 0x507 },
+ { 0x507, LOWER_CASE, 0x506 },
+ { 0x508, UPPER_CASE, 0x509 },
+ { 0x509, LOWER_CASE, 0x508 },
+ { 0x50A, UPPER_CASE, 0x50B },
+ { 0x50B, LOWER_CASE, 0x50A },
+ { 0x50C, UPPER_CASE, 0x50D },
+ { 0x50D, LOWER_CASE, 0x50C },
+ { 0x50E, UPPER_CASE, 0x50F },
+ { 0x50F, LOWER_CASE, 0x50E },
+ { 0x510, UPPER_CASE, 0x511 },
+ { 0x511, LOWER_CASE, 0x510 },
+ { 0x512, UPPER_CASE, 0x513 },
+ { 0x513, LOWER_CASE, 0x512 },
+ { 0x514, UPPER_CASE, 0x515 },
+ { 0x515, LOWER_CASE, 0x514 },
+ { 0x516, UPPER_CASE, 0x517 },
+ { 0x517, LOWER_CASE, 0x516 },
+ { 0x518, UPPER_CASE, 0x519 },
+ { 0x519, LOWER_CASE, 0x518 },
+ { 0x51A, UPPER_CASE, 0x51B },
+ { 0x51B, LOWER_CASE, 0x51A },
+ { 0x51C, UPPER_CASE, 0x51D },
+ { 0x51D, LOWER_CASE, 0x51C },
+ { 0x51E, UPPER_CASE, 0x51F },
+ { 0x51F, LOWER_CASE, 0x51E },
+ { 0x520, UPPER_CASE, 0x521 },
+ { 0x521, LOWER_CASE, 0x520 },
+ { 0x522, UPPER_CASE, 0x523 },
+ { 0x523, LOWER_CASE, 0x522 },
+ { 0x524, UPPER_CASE, 0x525 },
+ { 0x525, LOWER_CASE, 0x524 },
+ { 0x526, UPPER_CASE, 0x527 },
+ { 0x527, LOWER_CASE, 0x526 },
+ { 0x528, UPPER_CASE, 0x529 },
+ { 0x529, LOWER_CASE, 0x528 },
+ { 0x52A, UPPER_CASE, 0x52B },
+ { 0x52B, LOWER_CASE, 0x52A },
+ { 0x52C, UPPER_CASE, 0x52D },
+ { 0x52D, LOWER_CASE, 0x52C },
+ { 0x52E, UPPER_CASE, 0x52F },
+ { 0x52F, LOWER_CASE, 0x52E },
+ { 0x531, UPPER_CASE, 0x561 },
+ { 0x532, UPPER_CASE, 0x562 },
+ { 0x533, UPPER_CASE, 0x563 },
+ { 0x534, UPPER_CASE, 0x564 },
+ { 0x535, UPPER_CASE, 0x565 },
+ { 0x536, UPPER_CASE, 0x566 },
+ { 0x537, UPPER_CASE, 0x567 },
+ { 0x538, UPPER_CASE, 0x568 },
+ { 0x539, UPPER_CASE, 0x569 },
+ { 0x53A, UPPER_CASE, 0x56A },
+ { 0x53B, UPPER_CASE, 0x56B },
+ { 0x53C, UPPER_CASE, 0x56C },
+ { 0x53D, UPPER_CASE, 0x56D },
+ { 0x53E, UPPER_CASE, 0x56E },
+ { 0x53F, UPPER_CASE, 0x56F },
+ { 0x540, UPPER_CASE, 0x570 },
+ { 0x541, UPPER_CASE, 0x571 },
+ { 0x542, UPPER_CASE, 0x572 },
+ { 0x543, UPPER_CASE, 0x573 },
+ { 0x544, UPPER_CASE, 0x574 },
+ { 0x545, UPPER_CASE, 0x575 },
+ { 0x546, UPPER_CASE, 0x576 },
+ { 0x547, UPPER_CASE, 0x577 },
+ { 0x548, UPPER_CASE, 0x578 },
+ { 0x549, UPPER_CASE, 0x579 },
+ { 0x54A, UPPER_CASE, 0x57A },
+ { 0x54B, UPPER_CASE, 0x57B },
+ { 0x54C, UPPER_CASE, 0x57C },
+ { 0x54D, UPPER_CASE, 0x57D },
+ { 0x54E, UPPER_CASE, 0x57E },
+ { 0x54F, UPPER_CASE, 0x57F },
+ { 0x550, UPPER_CASE, 0x580 },
+ { 0x551, UPPER_CASE, 0x581 },
+ { 0x552, UPPER_CASE, 0x582 },
+ { 0x553, UPPER_CASE, 0x583 },
+ { 0x554, UPPER_CASE, 0x584 },
+ { 0x555, UPPER_CASE, 0x585 },
+ { 0x556, UPPER_CASE, 0x586 },
+ { 0x561, LOWER_CASE, 0x531 },
+ { 0x562, LOWER_CASE, 0x532 },
+ { 0x563, LOWER_CASE, 0x533 },
+ { 0x564, LOWER_CASE, 0x534 },
+ { 0x565, LOWER_CASE, 0x535 },
+ { 0x566, LOWER_CASE, 0x536 },
+ { 0x567, LOWER_CASE, 0x537 },
+ { 0x568, LOWER_CASE, 0x538 },
+ { 0x569, LOWER_CASE, 0x539 },
+ { 0x56A, LOWER_CASE, 0x53A },
+ { 0x56B, LOWER_CASE, 0x53B },
+ { 0x56C, LOWER_CASE, 0x53C },
+ { 0x56D, LOWER_CASE, 0x53D },
+ { 0x56E, LOWER_CASE, 0x53E },
+ { 0x56F, LOWER_CASE, 0x53F },
+ { 0x570, LOWER_CASE, 0x540 },
+ { 0x571, LOWER_CASE, 0x541 },
+ { 0x572, LOWER_CASE, 0x542 },
+ { 0x573, LOWER_CASE, 0x543 },
+ { 0x574, LOWER_CASE, 0x544 },
+ { 0x575, LOWER_CASE, 0x545 },
+ { 0x576, LOWER_CASE, 0x546 },
+ { 0x577, LOWER_CASE, 0x547 },
+ { 0x578, LOWER_CASE, 0x548 },
+ { 0x579, LOWER_CASE, 0x549 },
+ { 0x57A, LOWER_CASE, 0x54A },
+ { 0x57B, LOWER_CASE, 0x54B },
+ { 0x57C, LOWER_CASE, 0x54C },
+ { 0x57D, LOWER_CASE, 0x54D },
+ { 0x57E, LOWER_CASE, 0x54E },
+ { 0x57F, LOWER_CASE, 0x54F },
+ { 0x580, LOWER_CASE, 0x550 },
+ { 0x581, LOWER_CASE, 0x551 },
+ { 0x582, LOWER_CASE, 0x552 },
+ { 0x583, LOWER_CASE, 0x553 },
+ { 0x584, LOWER_CASE, 0x554 },
+ { 0x585, LOWER_CASE, 0x555 },
+ { 0x586, LOWER_CASE, 0x556 },
+ { 0x10A0, UPPER_CASE, 0x2D00 },
+ { 0x10A1, UPPER_CASE, 0x2D01 },
+ { 0x10A2, UPPER_CASE, 0x2D02 },
+ { 0x10A3, UPPER_CASE, 0x2D03 },
+ { 0x10A4, UPPER_CASE, 0x2D04 },
+ { 0x10A5, UPPER_CASE, 0x2D05 },
+ { 0x10A6, UPPER_CASE, 0x2D06 },
+ { 0x10A7, UPPER_CASE, 0x2D07 },
+ { 0x10A8, UPPER_CASE, 0x2D08 },
+ { 0x10A9, UPPER_CASE, 0x2D09 },
+ { 0x10AA, UPPER_CASE, 0x2D0A },
+ { 0x10AB, UPPER_CASE, 0x2D0B },
+ { 0x10AC, UPPER_CASE, 0x2D0C },
+ { 0x10AD, UPPER_CASE, 0x2D0D },
+ { 0x10AE, UPPER_CASE, 0x2D0E },
+ { 0x10AF, UPPER_CASE, 0x2D0F },
+ { 0x10B0, UPPER_CASE, 0x2D10 },
+ { 0x10B1, UPPER_CASE, 0x2D11 },
+ { 0x10B2, UPPER_CASE, 0x2D12 },
+ { 0x10B3, UPPER_CASE, 0x2D13 },
+ { 0x10B4, UPPER_CASE, 0x2D14 },
+ { 0x10B5, UPPER_CASE, 0x2D15 },
+ { 0x10B6, UPPER_CASE, 0x2D16 },
+ { 0x10B7, UPPER_CASE, 0x2D17 },
+ { 0x10B8, UPPER_CASE, 0x2D18 },
+ { 0x10B9, UPPER_CASE, 0x2D19 },
+ { 0x10BA, UPPER_CASE, 0x2D1A },
+ { 0x10BB, UPPER_CASE, 0x2D1B },
+ { 0x10BC, UPPER_CASE, 0x2D1C },
+ { 0x10BD, UPPER_CASE, 0x2D1D },
+ { 0x10BE, UPPER_CASE, 0x2D1E },
+ { 0x10BF, UPPER_CASE, 0x2D1F },
+ { 0x10C0, UPPER_CASE, 0x2D20 },
+ { 0x10C1, UPPER_CASE, 0x2D21 },
+ { 0x10C2, UPPER_CASE, 0x2D22 },
+ { 0x10C3, UPPER_CASE, 0x2D23 },
+ { 0x10C4, UPPER_CASE, 0x2D24 },
+ { 0x10C5, UPPER_CASE, 0x2D25 },
+ { 0x10C7, UPPER_CASE, 0x2D27 },
+ { 0x10CD, UPPER_CASE, 0x2D2D },
+ { 0x10D0, LOWER_CASE, 0x1C90 },
+ { 0x10D1, LOWER_CASE, 0x1C91 },
+ { 0x10D2, LOWER_CASE, 0x1C92 },
+ { 0x10D3, LOWER_CASE, 0x1C93 },
+ { 0x10D4, LOWER_CASE, 0x1C94 },
+ { 0x10D5, LOWER_CASE, 0x1C95 },
+ { 0x10D6, LOWER_CASE, 0x1C96 },
+ { 0x10D7, LOWER_CASE, 0x1C97 },
+ { 0x10D8, LOWER_CASE, 0x1C98 },
+ { 0x10D9, LOWER_CASE, 0x1C99 },
+ { 0x10DA, LOWER_CASE, 0x1C9A },
+ { 0x10DB, LOWER_CASE, 0x1C9B },
+ { 0x10DC, LOWER_CASE, 0x1C9C },
+ { 0x10DD, LOWER_CASE, 0x1C9D },
+ { 0x10DE, LOWER_CASE, 0x1C9E },
+ { 0x10DF, LOWER_CASE, 0x1C9F },
+ { 0x10E0, LOWER_CASE, 0x1CA0 },
+ { 0x10E1, LOWER_CASE, 0x1CA1 },
+ { 0x10E2, LOWER_CASE, 0x1CA2 },
+ { 0x10E3, LOWER_CASE, 0x1CA3 },
+ { 0x10E4, LOWER_CASE, 0x1CA4 },
+ { 0x10E5, LOWER_CASE, 0x1CA5 },
+ { 0x10E6, LOWER_CASE, 0x1CA6 },
+ { 0x10E7, LOWER_CASE, 0x1CA7 },
+ { 0x10E8, LOWER_CASE, 0x1CA8 },
+ { 0x10E9, LOWER_CASE, 0x1CA9 },
+ { 0x10EA, LOWER_CASE, 0x1CAA },
+ { 0x10EB, LOWER_CASE, 0x1CAB },
+ { 0x10EC, LOWER_CASE, 0x1CAC },
+ { 0x10ED, LOWER_CASE, 0x1CAD },
+ { 0x10EE, LOWER_CASE, 0x1CAE },
+ { 0x10EF, LOWER_CASE, 0x1CAF },
+ { 0x10F0, LOWER_CASE, 0x1CB0 },
+ { 0x10F1, LOWER_CASE, 0x1CB1 },
+ { 0x10F2, LOWER_CASE, 0x1CB2 },
+ { 0x10F3, LOWER_CASE, 0x1CB3 },
+ { 0x10F4, LOWER_CASE, 0x1CB4 },
+ { 0x10F5, LOWER_CASE, 0x1CB5 },
+ { 0x10F6, LOWER_CASE, 0x1CB6 },
+ { 0x10F7, LOWER_CASE, 0x1CB7 },
+ { 0x10F8, LOWER_CASE, 0x1CB8 },
+ { 0x10F9, LOWER_CASE, 0x1CB9 },
+ { 0x10FA, LOWER_CASE, 0x1CBA },
+ { 0x10FD, LOWER_CASE, 0x1CBD },
+ { 0x10FE, LOWER_CASE, 0x1CBE },
+ { 0x10FF, LOWER_CASE, 0x1CBF },
+ { 0x13A0, UPPER_CASE, 0xAB70 },
+ { 0x13A1, UPPER_CASE, 0xAB71 },
+ { 0x13A2, UPPER_CASE, 0xAB72 },
+ { 0x13A3, UPPER_CASE, 0xAB73 },
+ { 0x13A4, UPPER_CASE, 0xAB74 },
+ { 0x13A5, UPPER_CASE, 0xAB75 },
+ { 0x13A6, UPPER_CASE, 0xAB76 },
+ { 0x13A7, UPPER_CASE, 0xAB77 },
+ { 0x13A8, UPPER_CASE, 0xAB78 },
+ { 0x13A9, UPPER_CASE, 0xAB79 },
+ { 0x13AA, UPPER_CASE, 0xAB7A },
+ { 0x13AB, UPPER_CASE, 0xAB7B },
+ { 0x13AC, UPPER_CASE, 0xAB7C },
+ { 0x13AD, UPPER_CASE, 0xAB7D },
+ { 0x13AE, UPPER_CASE, 0xAB7E },
+ { 0x13AF, UPPER_CASE, 0xAB7F },
+ { 0x13B0, UPPER_CASE, 0xAB80 },
+ { 0x13B1, UPPER_CASE, 0xAB81 },
+ { 0x13B2, UPPER_CASE, 0xAB82 },
+ { 0x13B3, UPPER_CASE, 0xAB83 },
+ { 0x13B4, UPPER_CASE, 0xAB84 },
+ { 0x13B5, UPPER_CASE, 0xAB85 },
+ { 0x13B6, UPPER_CASE, 0xAB86 },
+ { 0x13B7, UPPER_CASE, 0xAB87 },
+ { 0x13B8, UPPER_CASE, 0xAB88 },
+ { 0x13B9, UPPER_CASE, 0xAB89 },
+ { 0x13BA, UPPER_CASE, 0xAB8A },
+ { 0x13BB, UPPER_CASE, 0xAB8B },
+ { 0x13BC, UPPER_CASE, 0xAB8C },
+ { 0x13BD, UPPER_CASE, 0xAB8D },
+ { 0x13BE, UPPER_CASE, 0xAB8E },
+ { 0x13BF, UPPER_CASE, 0xAB8F },
+ { 0x13C0, UPPER_CASE, 0xAB90 },
+ { 0x13C1, UPPER_CASE, 0xAB91 },
+ { 0x13C2, UPPER_CASE, 0xAB92 },
+ { 0x13C3, UPPER_CASE, 0xAB93 },
+ { 0x13C4, UPPER_CASE, 0xAB94 },
+ { 0x13C5, UPPER_CASE, 0xAB95 },
+ { 0x13C6, UPPER_CASE, 0xAB96 },
+ { 0x13C7, UPPER_CASE, 0xAB97 },
+ { 0x13C8, UPPER_CASE, 0xAB98 },
+ { 0x13C9, UPPER_CASE, 0xAB99 },
+ { 0x13CA, UPPER_CASE, 0xAB9A },
+ { 0x13CB, UPPER_CASE, 0xAB9B },
+ { 0x13CC, UPPER_CASE, 0xAB9C },
+ { 0x13CD, UPPER_CASE, 0xAB9D },
+ { 0x13CE, UPPER_CASE, 0xAB9E },
+ { 0x13CF, UPPER_CASE, 0xAB9F },
+ { 0x13D0, UPPER_CASE, 0xABA0 },
+ { 0x13D1, UPPER_CASE, 0xABA1 },
+ { 0x13D2, UPPER_CASE, 0xABA2 },
+ { 0x13D3, UPPER_CASE, 0xABA3 },
+ { 0x13D4, UPPER_CASE, 0xABA4 },
+ { 0x13D5, UPPER_CASE, 0xABA5 },
+ { 0x13D6, UPPER_CASE, 0xABA6 },
+ { 0x13D7, UPPER_CASE, 0xABA7 },
+ { 0x13D8, UPPER_CASE, 0xABA8 },
+ { 0x13D9, UPPER_CASE, 0xABA9 },
+ { 0x13DA, UPPER_CASE, 0xABAA },
+ { 0x13DB, UPPER_CASE, 0xABAB },
+ { 0x13DC, UPPER_CASE, 0xABAC },
+ { 0x13DD, UPPER_CASE, 0xABAD },
+ { 0x13DE, UPPER_CASE, 0xABAE },
+ { 0x13DF, UPPER_CASE, 0xABAF },
+ { 0x13E0, UPPER_CASE, 0xABB0 },
+ { 0x13E1, UPPER_CASE, 0xABB1 },
+ { 0x13E2, UPPER_CASE, 0xABB2 },
+ { 0x13E3, UPPER_CASE, 0xABB3 },
+ { 0x13E4, UPPER_CASE, 0xABB4 },
+ { 0x13E5, UPPER_CASE, 0xABB5 },
+ { 0x13E6, UPPER_CASE, 0xABB6 },
+ { 0x13E7, UPPER_CASE, 0xABB7 },
+ { 0x13E8, UPPER_CASE, 0xABB8 },
+ { 0x13E9, UPPER_CASE, 0xABB9 },
+ { 0x13EA, UPPER_CASE, 0xABBA },
+ { 0x13EB, UPPER_CASE, 0xABBB },
+ { 0x13EC, UPPER_CASE, 0xABBC },
+ { 0x13ED, UPPER_CASE, 0xABBD },
+ { 0x13EE, UPPER_CASE, 0xABBE },
+ { 0x13EF, UPPER_CASE, 0xABBF },
+ { 0x13F0, UPPER_CASE, 0x13F8 },
+ { 0x13F1, UPPER_CASE, 0x13F9 },
+ { 0x13F2, UPPER_CASE, 0x13FA },
+ { 0x13F3, UPPER_CASE, 0x13FB },
+ { 0x13F4, UPPER_CASE, 0x13FC },
+ { 0x13F5, UPPER_CASE, 0x13FD },
+ { 0x13F8, LOWER_CASE, 0x13F0 },
+ { 0x13F9, LOWER_CASE, 0x13F1 },
+ { 0x13FA, LOWER_CASE, 0x13F2 },
+ { 0x13FB, LOWER_CASE, 0x13F3 },
+ { 0x13FC, LOWER_CASE, 0x13F4 },
+ { 0x13FD, LOWER_CASE, 0x13F5 },
+ { 0x1C80, LOWER_CASE, 0x412 },
+ { 0x1C81, LOWER_CASE, 0x414 },
+ { 0x1C82, LOWER_CASE, 0x41E },
+ { 0x1C83, LOWER_CASE, 0x421 },
+ { 0x1C84, LOWER_CASE, 0x422 },
+ { 0x1C85, LOWER_CASE, 0x422 },
+ { 0x1C86, LOWER_CASE, 0x42A },
+ { 0x1C87, LOWER_CASE, 0x462 },
+ { 0x1C88, LOWER_CASE, 0xA64A },
+ { 0x1C90, UPPER_CASE, 0x10D0 },
+ { 0x1C91, UPPER_CASE, 0x10D1 },
+ { 0x1C92, UPPER_CASE, 0x10D2 },
+ { 0x1C93, UPPER_CASE, 0x10D3 },
+ { 0x1C94, UPPER_CASE, 0x10D4 },
+ { 0x1C95, UPPER_CASE, 0x10D5 },
+ { 0x1C96, UPPER_CASE, 0x10D6 },
+ { 0x1C97, UPPER_CASE, 0x10D7 },
+ { 0x1C98, UPPER_CASE, 0x10D8 },
+ { 0x1C99, UPPER_CASE, 0x10D9 },
+ { 0x1C9A, UPPER_CASE, 0x10DA },
+ { 0x1C9B, UPPER_CASE, 0x10DB },
+ { 0x1C9C, UPPER_CASE, 0x10DC },
+ { 0x1C9D, UPPER_CASE, 0x10DD },
+ { 0x1C9E, UPPER_CASE, 0x10DE },
+ { 0x1C9F, UPPER_CASE, 0x10DF },
+ { 0x1CA0, UPPER_CASE, 0x10E0 },
+ { 0x1CA1, UPPER_CASE, 0x10E1 },
+ { 0x1CA2, UPPER_CASE, 0x10E2 },
+ { 0x1CA3, UPPER_CASE, 0x10E3 },
+ { 0x1CA4, UPPER_CASE, 0x10E4 },
+ { 0x1CA5, UPPER_CASE, 0x10E5 },
+ { 0x1CA6, UPPER_CASE, 0x10E6 },
+ { 0x1CA7, UPPER_CASE, 0x10E7 },
+ { 0x1CA8, UPPER_CASE, 0x10E8 },
+ { 0x1CA9, UPPER_CASE, 0x10E9 },
+ { 0x1CAA, UPPER_CASE, 0x10EA },
+ { 0x1CAB, UPPER_CASE, 0x10EB },
+ { 0x1CAC, UPPER_CASE, 0x10EC },
+ { 0x1CAD, UPPER_CASE, 0x10ED },
+ { 0x1CAE, UPPER_CASE, 0x10EE },
+ { 0x1CAF, UPPER_CASE, 0x10EF },
+ { 0x1CB0, UPPER_CASE, 0x10F0 },
+ { 0x1CB1, UPPER_CASE, 0x10F1 },
+ { 0x1CB2, UPPER_CASE, 0x10F2 },
+ { 0x1CB3, UPPER_CASE, 0x10F3 },
+ { 0x1CB4, UPPER_CASE, 0x10F4 },
+ { 0x1CB5, UPPER_CASE, 0x10F5 },
+ { 0x1CB6, UPPER_CASE, 0x10F6 },
+ { 0x1CB7, UPPER_CASE, 0x10F7 },
+ { 0x1CB8, UPPER_CASE, 0x10F8 },
+ { 0x1CB9, UPPER_CASE, 0x10F9 },
+ { 0x1CBA, UPPER_CASE, 0x10FA },
+ { 0x1CBD, UPPER_CASE, 0x10FD },
+ { 0x1CBE, UPPER_CASE, 0x10FE },
+ { 0x1CBF, UPPER_CASE, 0x10FF },
+ { 0x1D79, LOWER_CASE, 0xA77D },
+ { 0x1D7D, LOWER_CASE, 0x2C63 },
+ { 0x1E00, UPPER_CASE, 0x1E01 },
+ { 0x1E01, LOWER_CASE, 0x1E00 },
+ { 0x1E02, UPPER_CASE, 0x1E03 },
+ { 0x1E03, LOWER_CASE, 0x1E02 },
+ { 0x1E04, UPPER_CASE, 0x1E05 },
+ { 0x1E05, LOWER_CASE, 0x1E04 },
+ { 0x1E06, UPPER_CASE, 0x1E07 },
+ { 0x1E07, LOWER_CASE, 0x1E06 },
+ { 0x1E08, UPPER_CASE, 0x1E09 },
+ { 0x1E09, LOWER_CASE, 0x1E08 },
+ { 0x1E0A, UPPER_CASE, 0x1E0B },
+ { 0x1E0B, LOWER_CASE, 0x1E0A },
+ { 0x1E0C, UPPER_CASE, 0x1E0D },
+ { 0x1E0D, LOWER_CASE, 0x1E0C },
+ { 0x1E0E, UPPER_CASE, 0x1E0F },
+ { 0x1E0F, LOWER_CASE, 0x1E0E },
+ { 0x1E10, UPPER_CASE, 0x1E11 },
+ { 0x1E11, LOWER_CASE, 0x1E10 },
+ { 0x1E12, UPPER_CASE, 0x1E13 },
+ { 0x1E13, LOWER_CASE, 0x1E12 },
+ { 0x1E14, UPPER_CASE, 0x1E15 },
+ { 0x1E15, LOWER_CASE, 0x1E14 },
+ { 0x1E16, UPPER_CASE, 0x1E17 },
+ { 0x1E17, LOWER_CASE, 0x1E16 },
+ { 0x1E18, UPPER_CASE, 0x1E19 },
+ { 0x1E19, LOWER_CASE, 0x1E18 },
+ { 0x1E1A, UPPER_CASE, 0x1E1B },
+ { 0x1E1B, LOWER_CASE, 0x1E1A },
+ { 0x1E1C, UPPER_CASE, 0x1E1D },
+ { 0x1E1D, LOWER_CASE, 0x1E1C },
+ { 0x1E1E, UPPER_CASE, 0x1E1F },
+ { 0x1E1F, LOWER_CASE, 0x1E1E },
+ { 0x1E20, UPPER_CASE, 0x1E21 },
+ { 0x1E21, LOWER_CASE, 0x1E20 },
+ { 0x1E22, UPPER_CASE, 0x1E23 },
+ { 0x1E23, LOWER_CASE, 0x1E22 },
+ { 0x1E24, UPPER_CASE, 0x1E25 },
+ { 0x1E25, LOWER_CASE, 0x1E24 },
+ { 0x1E26, UPPER_CASE, 0x1E27 },
+ { 0x1E27, LOWER_CASE, 0x1E26 },
+ { 0x1E28, UPPER_CASE, 0x1E29 },
+ { 0x1E29, LOWER_CASE, 0x1E28 },
+ { 0x1E2A, UPPER_CASE, 0x1E2B },
+ { 0x1E2B, LOWER_CASE, 0x1E2A },
+ { 0x1E2C, UPPER_CASE, 0x1E2D },
+ { 0x1E2D, LOWER_CASE, 0x1E2C },
+ { 0x1E2E, UPPER_CASE, 0x1E2F },
+ { 0x1E2F, LOWER_CASE, 0x1E2E },
+ { 0x1E30, UPPER_CASE, 0x1E31 },
+ { 0x1E31, LOWER_CASE, 0x1E30 },
+ { 0x1E32, UPPER_CASE, 0x1E33 },
+ { 0x1E33, LOWER_CASE, 0x1E32 },
+ { 0x1E34, UPPER_CASE, 0x1E35 },
+ { 0x1E35, LOWER_CASE, 0x1E34 },
+ { 0x1E36, UPPER_CASE, 0x1E37 },
+ { 0x1E37, LOWER_CASE, 0x1E36 },
+ { 0x1E38, UPPER_CASE, 0x1E39 },
+ { 0x1E39, LOWER_CASE, 0x1E38 },
+ { 0x1E3A, UPPER_CASE, 0x1E3B },
+ { 0x1E3B, LOWER_CASE, 0x1E3A },
+ { 0x1E3C, UPPER_CASE, 0x1E3D },
+ { 0x1E3D, LOWER_CASE, 0x1E3C },
+ { 0x1E3E, UPPER_CASE, 0x1E3F },
+ { 0x1E3F, LOWER_CASE, 0x1E3E },
+ { 0x1E40, UPPER_CASE, 0x1E41 },
+ { 0x1E41, LOWER_CASE, 0x1E40 },
+ { 0x1E42, UPPER_CASE, 0x1E43 },
+ { 0x1E43, LOWER_CASE, 0x1E42 },
+ { 0x1E44, UPPER_CASE, 0x1E45 },
+ { 0x1E45, LOWER_CASE, 0x1E44 },
+ { 0x1E46, UPPER_CASE, 0x1E47 },
+ { 0x1E47, LOWER_CASE, 0x1E46 },
+ { 0x1E48, UPPER_CASE, 0x1E49 },
+ { 0x1E49, LOWER_CASE, 0x1E48 },
+ { 0x1E4A, UPPER_CASE, 0x1E4B },
+ { 0x1E4B, LOWER_CASE, 0x1E4A },
+ { 0x1E4C, UPPER_CASE, 0x1E4D },
+ { 0x1E4D, LOWER_CASE, 0x1E4C },
+ { 0x1E4E, UPPER_CASE, 0x1E4F },
+ { 0x1E4F, LOWER_CASE, 0x1E4E },
+ { 0x1E50, UPPER_CASE, 0x1E51 },
+ { 0x1E51, LOWER_CASE, 0x1E50 },
+ { 0x1E52, UPPER_CASE, 0x1E53 },
+ { 0x1E53, LOWER_CASE, 0x1E52 },
+ { 0x1E54, UPPER_CASE, 0x1E55 },
+ { 0x1E55, LOWER_CASE, 0x1E54 },
+ { 0x1E56, UPPER_CASE, 0x1E57 },
+ { 0x1E57, LOWER_CASE, 0x1E56 },
+ { 0x1E58, UPPER_CASE, 0x1E59 },
+ { 0x1E59, LOWER_CASE, 0x1E58 },
+ { 0x1E5A, UPPER_CASE, 0x1E5B },
+ { 0x1E5B, LOWER_CASE, 0x1E5A },
+ { 0x1E5C, UPPER_CASE, 0x1E5D },
+ { 0x1E5D, LOWER_CASE, 0x1E5C },
+ { 0x1E5E, UPPER_CASE, 0x1E5F },
+ { 0x1E5F, LOWER_CASE, 0x1E5E },
+ { 0x1E60, UPPER_CASE, 0x1E61 },
+ { 0x1E61, LOWER_CASE, 0x1E60 },
+ { 0x1E62, UPPER_CASE, 0x1E63 },
+ { 0x1E63, LOWER_CASE, 0x1E62 },
+ { 0x1E64, UPPER_CASE, 0x1E65 },
+ { 0x1E65, LOWER_CASE, 0x1E64 },
+ { 0x1E66, UPPER_CASE, 0x1E67 },
+ { 0x1E67, LOWER_CASE, 0x1E66 },
+ { 0x1E68, UPPER_CASE, 0x1E69 },
+ { 0x1E69, LOWER_CASE, 0x1E68 },
+ { 0x1E6A, UPPER_CASE, 0x1E6B },
+ { 0x1E6B, LOWER_CASE, 0x1E6A },
+ { 0x1E6C, UPPER_CASE, 0x1E6D },
+ { 0x1E6D, LOWER_CASE, 0x1E6C },
+ { 0x1E6E, UPPER_CASE, 0x1E6F },
+ { 0x1E6F, LOWER_CASE, 0x1E6E },
+ { 0x1E70, UPPER_CASE, 0x1E71 },
+ { 0x1E71, LOWER_CASE, 0x1E70 },
+ { 0x1E72, UPPER_CASE, 0x1E73 },
+ { 0x1E73, LOWER_CASE, 0x1E72 },
+ { 0x1E74, UPPER_CASE, 0x1E75 },
+ { 0x1E75, LOWER_CASE, 0x1E74 },
+ { 0x1E76, UPPER_CASE, 0x1E77 },
+ { 0x1E77, LOWER_CASE, 0x1E76 },
+ { 0x1E78, UPPER_CASE, 0x1E79 },
+ { 0x1E79, LOWER_CASE, 0x1E78 },
+ { 0x1E7A, UPPER_CASE, 0x1E7B },
+ { 0x1E7B, LOWER_CASE, 0x1E7A },
+ { 0x1E7C, UPPER_CASE, 0x1E7D },
+ { 0x1E7D, LOWER_CASE, 0x1E7C },
+ { 0x1E7E, UPPER_CASE, 0x1E7F },
+ { 0x1E7F, LOWER_CASE, 0x1E7E },
+ { 0x1E80, UPPER_CASE, 0x1E81 },
+ { 0x1E81, LOWER_CASE, 0x1E80 },
+ { 0x1E82, UPPER_CASE, 0x1E83 },
+ { 0x1E83, LOWER_CASE, 0x1E82 },
+ { 0x1E84, UPPER_CASE, 0x1E85 },
+ { 0x1E85, LOWER_CASE, 0x1E84 },
+ { 0x1E86, UPPER_CASE, 0x1E87 },
+ { 0x1E87, LOWER_CASE, 0x1E86 },
+ { 0x1E88, UPPER_CASE, 0x1E89 },
+ { 0x1E89, LOWER_CASE, 0x1E88 },
+ { 0x1E8A, UPPER_CASE, 0x1E8B },
+ { 0x1E8B, LOWER_CASE, 0x1E8A },
+ { 0x1E8C, UPPER_CASE, 0x1E8D },
+ { 0x1E8D, LOWER_CASE, 0x1E8C },
+ { 0x1E8E, UPPER_CASE, 0x1E8F },
+ { 0x1E8F, LOWER_CASE, 0x1E8E },
+ { 0x1E90, UPPER_CASE, 0x1E91 },
+ { 0x1E91, LOWER_CASE, 0x1E90 },
+ { 0x1E92, UPPER_CASE, 0x1E93 },
+ { 0x1E93, LOWER_CASE, 0x1E92 },
+ { 0x1E94, UPPER_CASE, 0x1E95 },
+ { 0x1E95, LOWER_CASE, 0x1E94 },
+ { 0x1E9B, LOWER_CASE, 0x1E60 },
+ { 0x1E9E, UPPER_CASE, 0xDF },
+ { 0x1EA0, UPPER_CASE, 0x1EA1 },
+ { 0x1EA1, LOWER_CASE, 0x1EA0 },
+ { 0x1EA2, UPPER_CASE, 0x1EA3 },
+ { 0x1EA3, LOWER_CASE, 0x1EA2 },
+ { 0x1EA4, UPPER_CASE, 0x1EA5 },
+ { 0x1EA5, LOWER_CASE, 0x1EA4 },
+ { 0x1EA6, UPPER_CASE, 0x1EA7 },
+ { 0x1EA7, LOWER_CASE, 0x1EA6 },
+ { 0x1EA8, UPPER_CASE, 0x1EA9 },
+ { 0x1EA9, LOWER_CASE, 0x1EA8 },
+ { 0x1EAA, UPPER_CASE, 0x1EAB },
+ { 0x1EAB, LOWER_CASE, 0x1EAA },
+ { 0x1EAC, UPPER_CASE, 0x1EAD },
+ { 0x1EAD, LOWER_CASE, 0x1EAC },
+ { 0x1EAE, UPPER_CASE, 0x1EAF },
+ { 0x1EAF, LOWER_CASE, 0x1EAE },
+ { 0x1EB0, UPPER_CASE, 0x1EB1 },
+ { 0x1EB1, LOWER_CASE, 0x1EB0 },
+ { 0x1EB2, UPPER_CASE, 0x1EB3 },
+ { 0x1EB3, LOWER_CASE, 0x1EB2 },
+ { 0x1EB4, UPPER_CASE, 0x1EB5 },
+ { 0x1EB5, LOWER_CASE, 0x1EB4 },
+ { 0x1EB6, UPPER_CASE, 0x1EB7 },
+ { 0x1EB7, LOWER_CASE, 0x1EB6 },
+ { 0x1EB8, UPPER_CASE, 0x1EB9 },
+ { 0x1EB9, LOWER_CASE, 0x1EB8 },
+ { 0x1EBA, UPPER_CASE, 0x1EBB },
+ { 0x1EBB, LOWER_CASE, 0x1EBA },
+ { 0x1EBC, UPPER_CASE, 0x1EBD },
+ { 0x1EBD, LOWER_CASE, 0x1EBC },
+ { 0x1EBE, UPPER_CASE, 0x1EBF },
+ { 0x1EBF, LOWER_CASE, 0x1EBE },
+ { 0x1EC0, UPPER_CASE, 0x1EC1 },
+ { 0x1EC1, LOWER_CASE, 0x1EC0 },
+ { 0x1EC2, UPPER_CASE, 0x1EC3 },
+ { 0x1EC3, LOWER_CASE, 0x1EC2 },
+ { 0x1EC4, UPPER_CASE, 0x1EC5 },
+ { 0x1EC5, LOWER_CASE, 0x1EC4 },
+ { 0x1EC6, UPPER_CASE, 0x1EC7 },
+ { 0x1EC7, LOWER_CASE, 0x1EC6 },
+ { 0x1EC8, UPPER_CASE, 0x1EC9 },
+ { 0x1EC9, LOWER_CASE, 0x1EC8 },
+ { 0x1ECA, UPPER_CASE, 0x1ECB },
+ { 0x1ECB, LOWER_CASE, 0x1ECA },
+ { 0x1ECC, UPPER_CASE, 0x1ECD },
+ { 0x1ECD, LOWER_CASE, 0x1ECC },
+ { 0x1ECE, UPPER_CASE, 0x1ECF },
+ { 0x1ECF, LOWER_CASE, 0x1ECE },
+ { 0x1ED0, UPPER_CASE, 0x1ED1 },
+ { 0x1ED1, LOWER_CASE, 0x1ED0 },
+ { 0x1ED2, UPPER_CASE, 0x1ED3 },
+ { 0x1ED3, LOWER_CASE, 0x1ED2 },
+ { 0x1ED4, UPPER_CASE, 0x1ED5 },
+ { 0x1ED5, LOWER_CASE, 0x1ED4 },
+ { 0x1ED6, UPPER_CASE, 0x1ED7 },
+ { 0x1ED7, LOWER_CASE, 0x1ED6 },
+ { 0x1ED8, UPPER_CASE, 0x1ED9 },
+ { 0x1ED9, LOWER_CASE, 0x1ED8 },
+ { 0x1EDA, UPPER_CASE, 0x1EDB },
+ { 0x1EDB, LOWER_CASE, 0x1EDA },
+ { 0x1EDC, UPPER_CASE, 0x1EDD },
+ { 0x1EDD, LOWER_CASE, 0x1EDC },
+ { 0x1EDE, UPPER_CASE, 0x1EDF },
+ { 0x1EDF, LOWER_CASE, 0x1EDE },
+ { 0x1EE0, UPPER_CASE, 0x1EE1 },
+ { 0x1EE1, LOWER_CASE, 0x1EE0 },
+ { 0x1EE2, UPPER_CASE, 0x1EE3 },
+ { 0x1EE3, LOWER_CASE, 0x1EE2 },
+ { 0x1EE4, UPPER_CASE, 0x1EE5 },
+ { 0x1EE5, LOWER_CASE, 0x1EE4 },
+ { 0x1EE6, UPPER_CASE, 0x1EE7 },
+ { 0x1EE7, LOWER_CASE, 0x1EE6 },
+ { 0x1EE8, UPPER_CASE, 0x1EE9 },
+ { 0x1EE9, LOWER_CASE, 0x1EE8 },
+ { 0x1EEA, UPPER_CASE, 0x1EEB },
+ { 0x1EEB, LOWER_CASE, 0x1EEA },
+ { 0x1EEC, UPPER_CASE, 0x1EED },
+ { 0x1EED, LOWER_CASE, 0x1EEC },
+ { 0x1EEE, UPPER_CASE, 0x1EEF },
+ { 0x1EEF, LOWER_CASE, 0x1EEE },
+ { 0x1EF0, UPPER_CASE, 0x1EF1 },
+ { 0x1EF1, LOWER_CASE, 0x1EF0 },
+ { 0x1EF2, UPPER_CASE, 0x1EF3 },
+ { 0x1EF3, LOWER_CASE, 0x1EF2 },
+ { 0x1EF4, UPPER_CASE, 0x1EF5 },
+ { 0x1EF5, LOWER_CASE, 0x1EF4 },
+ { 0x1EF6, UPPER_CASE, 0x1EF7 },
+ { 0x1EF7, LOWER_CASE, 0x1EF6 },
+ { 0x1EF8, UPPER_CASE, 0x1EF9 },
+ { 0x1EF9, LOWER_CASE, 0x1EF8 },
+ { 0x1EFA, UPPER_CASE, 0x1EFB },
+ { 0x1EFB, LOWER_CASE, 0x1EFA },
+ { 0x1EFC, UPPER_CASE, 0x1EFD },
+ { 0x1EFD, LOWER_CASE, 0x1EFC },
+ { 0x1EFE, UPPER_CASE, 0x1EFF },
+ { 0x1EFF, LOWER_CASE, 0x1EFE },
+ { 0x1F00, LOWER_CASE, 0x1F08 },
+ { 0x1F01, LOWER_CASE, 0x1F09 },
+ { 0x1F02, LOWER_CASE, 0x1F0A },
+ { 0x1F03, LOWER_CASE, 0x1F0B },
+ { 0x1F04, LOWER_CASE, 0x1F0C },
+ { 0x1F05, LOWER_CASE, 0x1F0D },
+ { 0x1F06, LOWER_CASE, 0x1F0E },
+ { 0x1F07, LOWER_CASE, 0x1F0F },
+ { 0x1F08, UPPER_CASE, 0x1F00 },
+ { 0x1F09, UPPER_CASE, 0x1F01 },
+ { 0x1F0A, UPPER_CASE, 0x1F02 },
+ { 0x1F0B, UPPER_CASE, 0x1F03 },
+ { 0x1F0C, UPPER_CASE, 0x1F04 },
+ { 0x1F0D, UPPER_CASE, 0x1F05 },
+ { 0x1F0E, UPPER_CASE, 0x1F06 },
+ { 0x1F0F, UPPER_CASE, 0x1F07 },
+ { 0x1F10, LOWER_CASE, 0x1F18 },
+ { 0x1F11, LOWER_CASE, 0x1F19 },
+ { 0x1F12, LOWER_CASE, 0x1F1A },
+ { 0x1F13, LOWER_CASE, 0x1F1B },
+ { 0x1F14, LOWER_CASE, 0x1F1C },
+ { 0x1F15, LOWER_CASE, 0x1F1D },
+ { 0x1F18, UPPER_CASE, 0x1F10 },
+ { 0x1F19, UPPER_CASE, 0x1F11 },
+ { 0x1F1A, UPPER_CASE, 0x1F12 },
+ { 0x1F1B, UPPER_CASE, 0x1F13 },
+ { 0x1F1C, UPPER_CASE, 0x1F14 },
+ { 0x1F1D, UPPER_CASE, 0x1F15 },
+ { 0x1F20, LOWER_CASE, 0x1F28 },
+ { 0x1F21, LOWER_CASE, 0x1F29 },
+ { 0x1F22, LOWER_CASE, 0x1F2A },
+ { 0x1F23, LOWER_CASE, 0x1F2B },
+ { 0x1F24, LOWER_CASE, 0x1F2C },
+ { 0x1F25, LOWER_CASE, 0x1F2D },
+ { 0x1F26, LOWER_CASE, 0x1F2E },
+ { 0x1F27, LOWER_CASE, 0x1F2F },
+ { 0x1F28, UPPER_CASE, 0x1F20 },
+ { 0x1F29, UPPER_CASE, 0x1F21 },
+ { 0x1F2A, UPPER_CASE, 0x1F22 },
+ { 0x1F2B, UPPER_CASE, 0x1F23 },
+ { 0x1F2C, UPPER_CASE, 0x1F24 },
+ { 0x1F2D, UPPER_CASE, 0x1F25 },
+ { 0x1F2E, UPPER_CASE, 0x1F26 },
+ { 0x1F2F, UPPER_CASE, 0x1F27 },
+ { 0x1F30, LOWER_CASE, 0x1F38 },
+ { 0x1F31, LOWER_CASE, 0x1F39 },
+ { 0x1F32, LOWER_CASE, 0x1F3A },
+ { 0x1F33, LOWER_CASE, 0x1F3B },
+ { 0x1F34, LOWER_CASE, 0x1F3C },
+ { 0x1F35, LOWER_CASE, 0x1F3D },
+ { 0x1F36, LOWER_CASE, 0x1F3E },
+ { 0x1F37, LOWER_CASE, 0x1F3F },
+ { 0x1F38, UPPER_CASE, 0x1F30 },
+ { 0x1F39, UPPER_CASE, 0x1F31 },
+ { 0x1F3A, UPPER_CASE, 0x1F32 },
+ { 0x1F3B, UPPER_CASE, 0x1F33 },
+ { 0x1F3C, UPPER_CASE, 0x1F34 },
+ { 0x1F3D, UPPER_CASE, 0x1F35 },
+ { 0x1F3E, UPPER_CASE, 0x1F36 },
+ { 0x1F3F, UPPER_CASE, 0x1F37 },
+ { 0x1F40, LOWER_CASE, 0x1F48 },
+ { 0x1F41, LOWER_CASE, 0x1F49 },
+ { 0x1F42, LOWER_CASE, 0x1F4A },
+ { 0x1F43, LOWER_CASE, 0x1F4B },
+ { 0x1F44, LOWER_CASE, 0x1F4C },
+ { 0x1F45, LOWER_CASE, 0x1F4D },
+ { 0x1F48, UPPER_CASE, 0x1F40 },
+ { 0x1F49, UPPER_CASE, 0x1F41 },
+ { 0x1F4A, UPPER_CASE, 0x1F42 },
+ { 0x1F4B, UPPER_CASE, 0x1F43 },
+ { 0x1F4C, UPPER_CASE, 0x1F44 },
+ { 0x1F4D, UPPER_CASE, 0x1F45 },
+ { 0x1F51, LOWER_CASE, 0x1F59 },
+ { 0x1F53, LOWER_CASE, 0x1F5B },
+ { 0x1F55, LOWER_CASE, 0x1F5D },
+ { 0x1F57, LOWER_CASE, 0x1F5F },
+ { 0x1F59, UPPER_CASE, 0x1F51 },
+ { 0x1F5B, UPPER_CASE, 0x1F53 },
+ { 0x1F5D, UPPER_CASE, 0x1F55 },
+ { 0x1F5F, UPPER_CASE, 0x1F57 },
+ { 0x1F60, LOWER_CASE, 0x1F68 },
+ { 0x1F61, LOWER_CASE, 0x1F69 },
+ { 0x1F62, LOWER_CASE, 0x1F6A },
+ { 0x1F63, LOWER_CASE, 0x1F6B },
+ { 0x1F64, LOWER_CASE, 0x1F6C },
+ { 0x1F65, LOWER_CASE, 0x1F6D },
+ { 0x1F66, LOWER_CASE, 0x1F6E },
+ { 0x1F67, LOWER_CASE, 0x1F6F },
+ { 0x1F68, UPPER_CASE, 0x1F60 },
+ { 0x1F69, UPPER_CASE, 0x1F61 },
+ { 0x1F6A, UPPER_CASE, 0x1F62 },
+ { 0x1F6B, UPPER_CASE, 0x1F63 },
+ { 0x1F6C, UPPER_CASE, 0x1F64 },
+ { 0x1F6D, UPPER_CASE, 0x1F65 },
+ { 0x1F6E, UPPER_CASE, 0x1F66 },
+ { 0x1F6F, UPPER_CASE, 0x1F67 },
+ { 0x1F70, LOWER_CASE, 0x1FBA },
+ { 0x1F71, LOWER_CASE, 0x1FBB },
+ { 0x1F72, LOWER_CASE, 0x1FC8 },
+ { 0x1F73, LOWER_CASE, 0x1FC9 },
+ { 0x1F74, LOWER_CASE, 0x1FCA },
+ { 0x1F75, LOWER_CASE, 0x1FCB },
+ { 0x1F76, LOWER_CASE, 0x1FDA },
+ { 0x1F77, LOWER_CASE, 0x1FDB },
+ { 0x1F78, LOWER_CASE, 0x1FF8 },
+ { 0x1F79, LOWER_CASE, 0x1FF9 },
+ { 0x1F7A, LOWER_CASE, 0x1FEA },
+ { 0x1F7B, LOWER_CASE, 0x1FEB },
+ { 0x1F7C, LOWER_CASE, 0x1FFA },
+ { 0x1F7D, LOWER_CASE, 0x1FFB },
+ { 0x1F80, LOWER_CASE, 0x1F88 },
+ { 0x1F81, LOWER_CASE, 0x1F89 },
+ { 0x1F82, LOWER_CASE, 0x1F8A },
+ { 0x1F83, LOWER_CASE, 0x1F8B },
+ { 0x1F84, LOWER_CASE, 0x1F8C },
+ { 0x1F85, LOWER_CASE, 0x1F8D },
+ { 0x1F86, LOWER_CASE, 0x1F8E },
+ { 0x1F87, LOWER_CASE, 0x1F8F },
+ { 0x1F88, UPPER_CASE, 0x1F80 },
+ { 0x1F89, UPPER_CASE, 0x1F81 },
+ { 0x1F8A, UPPER_CASE, 0x1F82 },
+ { 0x1F8B, UPPER_CASE, 0x1F83 },
+ { 0x1F8C, UPPER_CASE, 0x1F84 },
+ { 0x1F8D, UPPER_CASE, 0x1F85 },
+ { 0x1F8E, UPPER_CASE, 0x1F86 },
+ { 0x1F8F, UPPER_CASE, 0x1F87 },
+ { 0x1F90, LOWER_CASE, 0x1F98 },
+ { 0x1F91, LOWER_CASE, 0x1F99 },
+ { 0x1F92, LOWER_CASE, 0x1F9A },
+ { 0x1F93, LOWER_CASE, 0x1F9B },
+ { 0x1F94, LOWER_CASE, 0x1F9C },
+ { 0x1F95, LOWER_CASE, 0x1F9D },
+ { 0x1F96, LOWER_CASE, 0x1F9E },
+ { 0x1F97, LOWER_CASE, 0x1F9F },
+ { 0x1F98, UPPER_CASE, 0x1F90 },
+ { 0x1F99, UPPER_CASE, 0x1F91 },
+ { 0x1F9A, UPPER_CASE, 0x1F92 },
+ { 0x1F9B, UPPER_CASE, 0x1F93 },
+ { 0x1F9C, UPPER_CASE, 0x1F94 },
+ { 0x1F9D, UPPER_CASE, 0x1F95 },
+ { 0x1F9E, UPPER_CASE, 0x1F96 },
+ { 0x1F9F, UPPER_CASE, 0x1F97 },
+ { 0x1FA0, LOWER_CASE, 0x1FA8 },
+ { 0x1FA1, LOWER_CASE, 0x1FA9 },
+ { 0x1FA2, LOWER_CASE, 0x1FAA },
+ { 0x1FA3, LOWER_CASE, 0x1FAB },
+ { 0x1FA4, LOWER_CASE, 0x1FAC },
+ { 0x1FA5, LOWER_CASE, 0x1FAD },
+ { 0x1FA6, LOWER_CASE, 0x1FAE },
+ { 0x1FA7, LOWER_CASE, 0x1FAF },
+ { 0x1FA8, UPPER_CASE, 0x1FA0 },
+ { 0x1FA9, UPPER_CASE, 0x1FA1 },
+ { 0x1FAA, UPPER_CASE, 0x1FA2 },
+ { 0x1FAB, UPPER_CASE, 0x1FA3 },
+ { 0x1FAC, UPPER_CASE, 0x1FA4 },
+ { 0x1FAD, UPPER_CASE, 0x1FA5 },
+ { 0x1FAE, UPPER_CASE, 0x1FA6 },
+ { 0x1FAF, UPPER_CASE, 0x1FA7 },
+ { 0x1FB0, LOWER_CASE, 0x1FB8 },
+ { 0x1FB1, LOWER_CASE, 0x1FB9 },
+ { 0x1FB3, LOWER_CASE, 0x1FBC },
+ { 0x1FB8, UPPER_CASE, 0x1FB0 },
+ { 0x1FB9, UPPER_CASE, 0x1FB1 },
+ { 0x1FBA, UPPER_CASE, 0x1F70 },
+ { 0x1FBB, UPPER_CASE, 0x1F71 },
+ { 0x1FBC, UPPER_CASE, 0x1FB3 },
+ { 0x1FBE, LOWER_CASE, 0x399 },
+ { 0x1FC3, LOWER_CASE, 0x1FCC },
+ { 0x1FC8, UPPER_CASE, 0x1F72 },
+ { 0x1FC9, UPPER_CASE, 0x1F73 },
+ { 0x1FCA, UPPER_CASE, 0x1F74 },
+ { 0x1FCB, UPPER_CASE, 0x1F75 },
+ { 0x1FCC, UPPER_CASE, 0x1FC3 },
+ { 0x1FD0, LOWER_CASE, 0x1FD8 },
+ { 0x1FD1, LOWER_CASE, 0x1FD9 },
+ { 0x1FD8, UPPER_CASE, 0x1FD0 },
+ { 0x1FD9, UPPER_CASE, 0x1FD1 },
+ { 0x1FDA, UPPER_CASE, 0x1F76 },
+ { 0x1FDB, UPPER_CASE, 0x1F77 },
+ { 0x1FE0, LOWER_CASE, 0x1FE8 },
+ { 0x1FE1, LOWER_CASE, 0x1FE9 },
+ { 0x1FE5, LOWER_CASE, 0x1FEC },
+ { 0x1FE8, UPPER_CASE, 0x1FE0 },
+ { 0x1FE9, UPPER_CASE, 0x1FE1 },
+ { 0x1FEA, UPPER_CASE, 0x1F7A },
+ { 0x1FEB, UPPER_CASE, 0x1F7B },
+ { 0x1FEC, UPPER_CASE, 0x1FE5 },
+ { 0x1FF3, LOWER_CASE, 0x1FFC },
+ { 0x1FF8, UPPER_CASE, 0x1F78 },
+ { 0x1FF9, UPPER_CASE, 0x1F79 },
+ { 0x1FFA, UPPER_CASE, 0x1F7C },
+ { 0x1FFB, UPPER_CASE, 0x1F7D },
+ { 0x1FFC, UPPER_CASE, 0x1FF3 },
+ { 0x2126, UPPER_CASE, 0x3C9 },
+ { 0x212A, UPPER_CASE, 0x6B },
+ { 0x212B, UPPER_CASE, 0xE5 },
+ { 0x2132, UPPER_CASE, 0x214E },
+ { 0x214E, LOWER_CASE, 0x2132 },
+ { 0x2160, UPPER_CASE, 0x2170 },
+ { 0x2161, UPPER_CASE, 0x2171 },
+ { 0x2162, UPPER_CASE, 0x2172 },
+ { 0x2163, UPPER_CASE, 0x2173 },
+ { 0x2164, UPPER_CASE, 0x2174 },
+ { 0x2165, UPPER_CASE, 0x2175 },
+ { 0x2166, UPPER_CASE, 0x2176 },
+ { 0x2167, UPPER_CASE, 0x2177 },
+ { 0x2168, UPPER_CASE, 0x2178 },
+ { 0x2169, UPPER_CASE, 0x2179 },
+ { 0x216A, UPPER_CASE, 0x217A },
+ { 0x216B, UPPER_CASE, 0x217B },
+ { 0x216C, UPPER_CASE, 0x217C },
+ { 0x216D, UPPER_CASE, 0x217D },
+ { 0x216E, UPPER_CASE, 0x217E },
+ { 0x216F, UPPER_CASE, 0x217F },
+ { 0x2170, LOWER_CASE, 0x2160 },
+ { 0x2171, LOWER_CASE, 0x2161 },
+ { 0x2172, LOWER_CASE, 0x2162 },
+ { 0x2173, LOWER_CASE, 0x2163 },
+ { 0x2174, LOWER_CASE, 0x2164 },
+ { 0x2175, LOWER_CASE, 0x2165 },
+ { 0x2176, LOWER_CASE, 0x2166 },
+ { 0x2177, LOWER_CASE, 0x2167 },
+ { 0x2178, LOWER_CASE, 0x2168 },
+ { 0x2179, LOWER_CASE, 0x2169 },
+ { 0x217A, LOWER_CASE, 0x216A },
+ { 0x217B, LOWER_CASE, 0x216B },
+ { 0x217C, LOWER_CASE, 0x216C },
+ { 0x217D, LOWER_CASE, 0x216D },
+ { 0x217E, LOWER_CASE, 0x216E },
+ { 0x217F, LOWER_CASE, 0x216F },
+ { 0x2183, UPPER_CASE, 0x2184 },
+ { 0x2184, LOWER_CASE, 0x2183 },
+ { 0x24B6, UPPER_CASE, 0x24D0 },
+ { 0x24B7, UPPER_CASE, 0x24D1 },
+ { 0x24B8, UPPER_CASE, 0x24D2 },
+ { 0x24B9, UPPER_CASE, 0x24D3 },
+ { 0x24BA, UPPER_CASE, 0x24D4 },
+ { 0x24BB, UPPER_CASE, 0x24D5 },
+ { 0x24BC, UPPER_CASE, 0x24D6 },
+ { 0x24BD, UPPER_CASE, 0x24D7 },
+ { 0x24BE, UPPER_CASE, 0x24D8 },
+ { 0x24BF, UPPER_CASE, 0x24D9 },
+ { 0x24C0, UPPER_CASE, 0x24DA },
+ { 0x24C1, UPPER_CASE, 0x24DB },
+ { 0x24C2, UPPER_CASE, 0x24DC },
+ { 0x24C3, UPPER_CASE, 0x24DD },
+ { 0x24C4, UPPER_CASE, 0x24DE },
+ { 0x24C5, UPPER_CASE, 0x24DF },
+ { 0x24C6, UPPER_CASE, 0x24E0 },
+ { 0x24C7, UPPER_CASE, 0x24E1 },
+ { 0x24C8, UPPER_CASE, 0x24E2 },
+ { 0x24C9, UPPER_CASE, 0x24E3 },
+ { 0x24CA, UPPER_CASE, 0x24E4 },
+ { 0x24CB, UPPER_CASE, 0x24E5 },
+ { 0x24CC, UPPER_CASE, 0x24E6 },
+ { 0x24CD, UPPER_CASE, 0x24E7 },
+ { 0x24CE, UPPER_CASE, 0x24E8 },
+ { 0x24CF, UPPER_CASE, 0x24E9 },
+ { 0x24D0, LOWER_CASE, 0x24B6 },
+ { 0x24D1, LOWER_CASE, 0x24B7 },
+ { 0x24D2, LOWER_CASE, 0x24B8 },
+ { 0x24D3, LOWER_CASE, 0x24B9 },
+ { 0x24D4, LOWER_CASE, 0x24BA },
+ { 0x24D5, LOWER_CASE, 0x24BB },
+ { 0x24D6, LOWER_CASE, 0x24BC },
+ { 0x24D7, LOWER_CASE, 0x24BD },
+ { 0x24D8, LOWER_CASE, 0x24BE },
+ { 0x24D9, LOWER_CASE, 0x24BF },
+ { 0x24DA, LOWER_CASE, 0x24C0 },
+ { 0x24DB, LOWER_CASE, 0x24C1 },
+ { 0x24DC, LOWER_CASE, 0x24C2 },
+ { 0x24DD, LOWER_CASE, 0x24C3 },
+ { 0x24DE, LOWER_CASE, 0x24C4 },
+ { 0x24DF, LOWER_CASE, 0x24C5 },
+ { 0x24E0, LOWER_CASE, 0x24C6 },
+ { 0x24E1, LOWER_CASE, 0x24C7 },
+ { 0x24E2, LOWER_CASE, 0x24C8 },
+ { 0x24E3, LOWER_CASE, 0x24C9 },
+ { 0x24E4, LOWER_CASE, 0x24CA },
+ { 0x24E5, LOWER_CASE, 0x24CB },
+ { 0x24E6, LOWER_CASE, 0x24CC },
+ { 0x24E7, LOWER_CASE, 0x24CD },
+ { 0x24E8, LOWER_CASE, 0x24CE },
+ { 0x24E9, LOWER_CASE, 0x24CF },
+ { 0x2C00, UPPER_CASE, 0x2C30 },
+ { 0x2C01, UPPER_CASE, 0x2C31 },
+ { 0x2C02, UPPER_CASE, 0x2C32 },
+ { 0x2C03, UPPER_CASE, 0x2C33 },
+ { 0x2C04, UPPER_CASE, 0x2C34 },
+ { 0x2C05, UPPER_CASE, 0x2C35 },
+ { 0x2C06, UPPER_CASE, 0x2C36 },
+ { 0x2C07, UPPER_CASE, 0x2C37 },
+ { 0x2C08, UPPER_CASE, 0x2C38 },
+ { 0x2C09, UPPER_CASE, 0x2C39 },
+ { 0x2C0A, UPPER_CASE, 0x2C3A },
+ { 0x2C0B, UPPER_CASE, 0x2C3B },
+ { 0x2C0C, UPPER_CASE, 0x2C3C },
+ { 0x2C0D, UPPER_CASE, 0x2C3D },
+ { 0x2C0E, UPPER_CASE, 0x2C3E },
+ { 0x2C0F, UPPER_CASE, 0x2C3F },
+ { 0x2C10, UPPER_CASE, 0x2C40 },
+ { 0x2C11, UPPER_CASE, 0x2C41 },
+ { 0x2C12, UPPER_CASE, 0x2C42 },
+ { 0x2C13, UPPER_CASE, 0x2C43 },
+ { 0x2C14, UPPER_CASE, 0x2C44 },
+ { 0x2C15, UPPER_CASE, 0x2C45 },
+ { 0x2C16, UPPER_CASE, 0x2C46 },
+ { 0x2C17, UPPER_CASE, 0x2C47 },
+ { 0x2C18, UPPER_CASE, 0x2C48 },
+ { 0x2C19, UPPER_CASE, 0x2C49 },
+ { 0x2C1A, UPPER_CASE, 0x2C4A },
+ { 0x2C1B, UPPER_CASE, 0x2C4B },
+ { 0x2C1C, UPPER_CASE, 0x2C4C },
+ { 0x2C1D, UPPER_CASE, 0x2C4D },
+ { 0x2C1E, UPPER_CASE, 0x2C4E },
+ { 0x2C1F, UPPER_CASE, 0x2C4F },
+ { 0x2C20, UPPER_CASE, 0x2C50 },
+ { 0x2C21, UPPER_CASE, 0x2C51 },
+ { 0x2C22, UPPER_CASE, 0x2C52 },
+ { 0x2C23, UPPER_CASE, 0x2C53 },
+ { 0x2C24, UPPER_CASE, 0x2C54 },
+ { 0x2C25, UPPER_CASE, 0x2C55 },
+ { 0x2C26, UPPER_CASE, 0x2C56 },
+ { 0x2C27, UPPER_CASE, 0x2C57 },
+ { 0x2C28, UPPER_CASE, 0x2C58 },
+ { 0x2C29, UPPER_CASE, 0x2C59 },
+ { 0x2C2A, UPPER_CASE, 0x2C5A },
+ { 0x2C2B, UPPER_CASE, 0x2C5B },
+ { 0x2C2C, UPPER_CASE, 0x2C5C },
+ { 0x2C2D, UPPER_CASE, 0x2C5D },
+ { 0x2C2E, UPPER_CASE, 0x2C5E },
+ { 0x2C30, LOWER_CASE, 0x2C00 },
+ { 0x2C31, LOWER_CASE, 0x2C01 },
+ { 0x2C32, LOWER_CASE, 0x2C02 },
+ { 0x2C33, LOWER_CASE, 0x2C03 },
+ { 0x2C34, LOWER_CASE, 0x2C04 },
+ { 0x2C35, LOWER_CASE, 0x2C05 },
+ { 0x2C36, LOWER_CASE, 0x2C06 },
+ { 0x2C37, LOWER_CASE, 0x2C07 },
+ { 0x2C38, LOWER_CASE, 0x2C08 },
+ { 0x2C39, LOWER_CASE, 0x2C09 },
+ { 0x2C3A, LOWER_CASE, 0x2C0A },
+ { 0x2C3B, LOWER_CASE, 0x2C0B },
+ { 0x2C3C, LOWER_CASE, 0x2C0C },
+ { 0x2C3D, LOWER_CASE, 0x2C0D },
+ { 0x2C3E, LOWER_CASE, 0x2C0E },
+ { 0x2C3F, LOWER_CASE, 0x2C0F },
+ { 0x2C40, LOWER_CASE, 0x2C10 },
+ { 0x2C41, LOWER_CASE, 0x2C11 },
+ { 0x2C42, LOWER_CASE, 0x2C12 },
+ { 0x2C43, LOWER_CASE, 0x2C13 },
+ { 0x2C44, LOWER_CASE, 0x2C14 },
+ { 0x2C45, LOWER_CASE, 0x2C15 },
+ { 0x2C46, LOWER_CASE, 0x2C16 },
+ { 0x2C47, LOWER_CASE, 0x2C17 },
+ { 0x2C48, LOWER_CASE, 0x2C18 },
+ { 0x2C49, LOWER_CASE, 0x2C19 },
+ { 0x2C4A, LOWER_CASE, 0x2C1A },
+ { 0x2C4B, LOWER_CASE, 0x2C1B },
+ { 0x2C4C, LOWER_CASE, 0x2C1C },
+ { 0x2C4D, LOWER_CASE, 0x2C1D },
+ { 0x2C4E, LOWER_CASE, 0x2C1E },
+ { 0x2C4F, LOWER_CASE, 0x2C1F },
+ { 0x2C50, LOWER_CASE, 0x2C20 },
+ { 0x2C51, LOWER_CASE, 0x2C21 },
+ { 0x2C52, LOWER_CASE, 0x2C22 },
+ { 0x2C53, LOWER_CASE, 0x2C23 },
+ { 0x2C54, LOWER_CASE, 0x2C24 },
+ { 0x2C55, LOWER_CASE, 0x2C25 },
+ { 0x2C56, LOWER_CASE, 0x2C26 },
+ { 0x2C57, LOWER_CASE, 0x2C27 },
+ { 0x2C58, LOWER_CASE, 0x2C28 },
+ { 0x2C59, LOWER_CASE, 0x2C29 },
+ { 0x2C5A, LOWER_CASE, 0x2C2A },
+ { 0x2C5B, LOWER_CASE, 0x2C2B },
+ { 0x2C5C, LOWER_CASE, 0x2C2C },
+ { 0x2C5D, LOWER_CASE, 0x2C2D },
+ { 0x2C5E, LOWER_CASE, 0x2C2E },
+ { 0x2C60, UPPER_CASE, 0x2C61 },
+ { 0x2C61, LOWER_CASE, 0x2C60 },
+ { 0x2C62, UPPER_CASE, 0x26B },
+ { 0x2C63, UPPER_CASE, 0x1D7D },
+ { 0x2C64, UPPER_CASE, 0x27D },
+ { 0x2C65, LOWER_CASE, 0x23A },
+ { 0x2C66, LOWER_CASE, 0x23E },
+ { 0x2C67, UPPER_CASE, 0x2C68 },
+ { 0x2C68, LOWER_CASE, 0x2C67 },
+ { 0x2C69, UPPER_CASE, 0x2C6A },
+ { 0x2C6A, LOWER_CASE, 0x2C69 },
+ { 0x2C6B, UPPER_CASE, 0x2C6C },
+ { 0x2C6C, LOWER_CASE, 0x2C6B },
+ { 0x2C6D, UPPER_CASE, 0x251 },
+ { 0x2C6E, UPPER_CASE, 0x271 },
+ { 0x2C6F, UPPER_CASE, 0x250 },
+ { 0x2C70, UPPER_CASE, 0x252 },
+ { 0x2C72, UPPER_CASE, 0x2C73 },
+ { 0x2C73, LOWER_CASE, 0x2C72 },
+ { 0x2C75, UPPER_CASE, 0x2C76 },
+ { 0x2C76, LOWER_CASE, 0x2C75 },
+ { 0x2C7E, UPPER_CASE, 0x23F },
+ { 0x2C7F, UPPER_CASE, 0x240 },
+ { 0x2C80, UPPER_CASE, 0x2C81 },
+ { 0x2C81, LOWER_CASE, 0x2C80 },
+ { 0x2C82, UPPER_CASE, 0x2C83 },
+ { 0x2C83, LOWER_CASE, 0x2C82 },
+ { 0x2C84, UPPER_CASE, 0x2C85 },
+ { 0x2C85, LOWER_CASE, 0x2C84 },
+ { 0x2C86, UPPER_CASE, 0x2C87 },
+ { 0x2C87, LOWER_CASE, 0x2C86 },
+ { 0x2C88, UPPER_CASE, 0x2C89 },
+ { 0x2C89, LOWER_CASE, 0x2C88 },
+ { 0x2C8A, UPPER_CASE, 0x2C8B },
+ { 0x2C8B, LOWER_CASE, 0x2C8A },
+ { 0x2C8C, UPPER_CASE, 0x2C8D },
+ { 0x2C8D, LOWER_CASE, 0x2C8C },
+ { 0x2C8E, UPPER_CASE, 0x2C8F },
+ { 0x2C8F, LOWER_CASE, 0x2C8E },
+ { 0x2C90, UPPER_CASE, 0x2C91 },
+ { 0x2C91, LOWER_CASE, 0x2C90 },
+ { 0x2C92, UPPER_CASE, 0x2C93 },
+ { 0x2C93, LOWER_CASE, 0x2C92 },
+ { 0x2C94, UPPER_CASE, 0x2C95 },
+ { 0x2C95, LOWER_CASE, 0x2C94 },
+ { 0x2C96, UPPER_CASE, 0x2C97 },
+ { 0x2C97, LOWER_CASE, 0x2C96 },
+ { 0x2C98, UPPER_CASE, 0x2C99 },
+ { 0x2C99, LOWER_CASE, 0x2C98 },
+ { 0x2C9A, UPPER_CASE, 0x2C9B },
+ { 0x2C9B, LOWER_CASE, 0x2C9A },
+ { 0x2C9C, UPPER_CASE, 0x2C9D },
+ { 0x2C9D, LOWER_CASE, 0x2C9C },
+ { 0x2C9E, UPPER_CASE, 0x2C9F },
+ { 0x2C9F, LOWER_CASE, 0x2C9E },
+ { 0x2CA0, UPPER_CASE, 0x2CA1 },
+ { 0x2CA1, LOWER_CASE, 0x2CA0 },
+ { 0x2CA2, UPPER_CASE, 0x2CA3 },
+ { 0x2CA3, LOWER_CASE, 0x2CA2 },
+ { 0x2CA4, UPPER_CASE, 0x2CA5 },
+ { 0x2CA5, LOWER_CASE, 0x2CA4 },
+ { 0x2CA6, UPPER_CASE, 0x2CA7 },
+ { 0x2CA7, LOWER_CASE, 0x2CA6 },
+ { 0x2CA8, UPPER_CASE, 0x2CA9 },
+ { 0x2CA9, LOWER_CASE, 0x2CA8 },
+ { 0x2CAA, UPPER_CASE, 0x2CAB },
+ { 0x2CAB, LOWER_CASE, 0x2CAA },
+ { 0x2CAC, UPPER_CASE, 0x2CAD },
+ { 0x2CAD, LOWER_CASE, 0x2CAC },
+ { 0x2CAE, UPPER_CASE, 0x2CAF },
+ { 0x2CAF, LOWER_CASE, 0x2CAE },
+ { 0x2CB0, UPPER_CASE, 0x2CB1 },
+ { 0x2CB1, LOWER_CASE, 0x2CB0 },
+ { 0x2CB2, UPPER_CASE, 0x2CB3 },
+ { 0x2CB3, LOWER_CASE, 0x2CB2 },
+ { 0x2CB4, UPPER_CASE, 0x2CB5 },
+ { 0x2CB5, LOWER_CASE, 0x2CB4 },
+ { 0x2CB6, UPPER_CASE, 0x2CB7 },
+ { 0x2CB7, LOWER_CASE, 0x2CB6 },
+ { 0x2CB8, UPPER_CASE, 0x2CB9 },
+ { 0x2CB9, LOWER_CASE, 0x2CB8 },
+ { 0x2CBA, UPPER_CASE, 0x2CBB },
+ { 0x2CBB, LOWER_CASE, 0x2CBA },
+ { 0x2CBC, UPPER_CASE, 0x2CBD },
+ { 0x2CBD, LOWER_CASE, 0x2CBC },
+ { 0x2CBE, UPPER_CASE, 0x2CBF },
+ { 0x2CBF, LOWER_CASE, 0x2CBE },
+ { 0x2CC0, UPPER_CASE, 0x2CC1 },
+ { 0x2CC1, LOWER_CASE, 0x2CC0 },
+ { 0x2CC2, UPPER_CASE, 0x2CC3 },
+ { 0x2CC3, LOWER_CASE, 0x2CC2 },
+ { 0x2CC4, UPPER_CASE, 0x2CC5 },
+ { 0x2CC5, LOWER_CASE, 0x2CC4 },
+ { 0x2CC6, UPPER_CASE, 0x2CC7 },
+ { 0x2CC7, LOWER_CASE, 0x2CC6 },
+ { 0x2CC8, UPPER_CASE, 0x2CC9 },
+ { 0x2CC9, LOWER_CASE, 0x2CC8 },
+ { 0x2CCA, UPPER_CASE, 0x2CCB },
+ { 0x2CCB, LOWER_CASE, 0x2CCA },
+ { 0x2CCC, UPPER_CASE, 0x2CCD },
+ { 0x2CCD, LOWER_CASE, 0x2CCC },
+ { 0x2CCE, UPPER_CASE, 0x2CCF },
+ { 0x2CCF, LOWER_CASE, 0x2CCE },
+ { 0x2CD0, UPPER_CASE, 0x2CD1 },
+ { 0x2CD1, LOWER_CASE, 0x2CD0 },
+ { 0x2CD2, UPPER_CASE, 0x2CD3 },
+ { 0x2CD3, LOWER_CASE, 0x2CD2 },
+ { 0x2CD4, UPPER_CASE, 0x2CD5 },
+ { 0x2CD5, LOWER_CASE, 0x2CD4 },
+ { 0x2CD6, UPPER_CASE, 0x2CD7 },
+ { 0x2CD7, LOWER_CASE, 0x2CD6 },
+ { 0x2CD8, UPPER_CASE, 0x2CD9 },
+ { 0x2CD9, LOWER_CASE, 0x2CD8 },
+ { 0x2CDA, UPPER_CASE, 0x2CDB },
+ { 0x2CDB, LOWER_CASE, 0x2CDA },
+ { 0x2CDC, UPPER_CASE, 0x2CDD },
+ { 0x2CDD, LOWER_CASE, 0x2CDC },
+ { 0x2CDE, UPPER_CASE, 0x2CDF },
+ { 0x2CDF, LOWER_CASE, 0x2CDE },
+ { 0x2CE0, UPPER_CASE, 0x2CE1 },
+ { 0x2CE1, LOWER_CASE, 0x2CE0 },
+ { 0x2CE2, UPPER_CASE, 0x2CE3 },
+ { 0x2CE3, LOWER_CASE, 0x2CE2 },
+ { 0x2CEB, UPPER_CASE, 0x2CEC },
+ { 0x2CEC, LOWER_CASE, 0x2CEB },
+ { 0x2CED, UPPER_CASE, 0x2CEE },
+ { 0x2CEE, LOWER_CASE, 0x2CED },
+ { 0x2CF2, UPPER_CASE, 0x2CF3 },
+ { 0x2CF3, LOWER_CASE, 0x2CF2 },
+ { 0x2D00, LOWER_CASE, 0x10A0 },
+ { 0x2D01, LOWER_CASE, 0x10A1 },
+ { 0x2D02, LOWER_CASE, 0x10A2 },
+ { 0x2D03, LOWER_CASE, 0x10A3 },
+ { 0x2D04, LOWER_CASE, 0x10A4 },
+ { 0x2D05, LOWER_CASE, 0x10A5 },
+ { 0x2D06, LOWER_CASE, 0x10A6 },
+ { 0x2D07, LOWER_CASE, 0x10A7 },
+ { 0x2D08, LOWER_CASE, 0x10A8 },
+ { 0x2D09, LOWER_CASE, 0x10A9 },
+ { 0x2D0A, LOWER_CASE, 0x10AA },
+ { 0x2D0B, LOWER_CASE, 0x10AB },
+ { 0x2D0C, LOWER_CASE, 0x10AC },
+ { 0x2D0D, LOWER_CASE, 0x10AD },
+ { 0x2D0E, LOWER_CASE, 0x10AE },
+ { 0x2D0F, LOWER_CASE, 0x10AF },
+ { 0x2D10, LOWER_CASE, 0x10B0 },
+ { 0x2D11, LOWER_CASE, 0x10B1 },
+ { 0x2D12, LOWER_CASE, 0x10B2 },
+ { 0x2D13, LOWER_CASE, 0x10B3 },
+ { 0x2D14, LOWER_CASE, 0x10B4 },
+ { 0x2D15, LOWER_CASE, 0x10B5 },
+ { 0x2D16, LOWER_CASE, 0x10B6 },
+ { 0x2D17, LOWER_CASE, 0x10B7 },
+ { 0x2D18, LOWER_CASE, 0x10B8 },
+ { 0x2D19, LOWER_CASE, 0x10B9 },
+ { 0x2D1A, LOWER_CASE, 0x10BA },
+ { 0x2D1B, LOWER_CASE, 0x10BB },
+ { 0x2D1C, LOWER_CASE, 0x10BC },
+ { 0x2D1D, LOWER_CASE, 0x10BD },
+ { 0x2D1E, LOWER_CASE, 0x10BE },
+ { 0x2D1F, LOWER_CASE, 0x10BF },
+ { 0x2D20, LOWER_CASE, 0x10C0 },
+ { 0x2D21, LOWER_CASE, 0x10C1 },
+ { 0x2D22, LOWER_CASE, 0x10C2 },
+ { 0x2D23, LOWER_CASE, 0x10C3 },
+ { 0x2D24, LOWER_CASE, 0x10C4 },
+ { 0x2D25, LOWER_CASE, 0x10C5 },
+ { 0x2D27, LOWER_CASE, 0x10C7 },
+ { 0x2D2D, LOWER_CASE, 0x10CD },
+ { 0xA640, UPPER_CASE, 0xA641 },
+ { 0xA641, LOWER_CASE, 0xA640 },
+ { 0xA642, UPPER_CASE, 0xA643 },
+ { 0xA643, LOWER_CASE, 0xA642 },
+ { 0xA644, UPPER_CASE, 0xA645 },
+ { 0xA645, LOWER_CASE, 0xA644 },
+ { 0xA646, UPPER_CASE, 0xA647 },
+ { 0xA647, LOWER_CASE, 0xA646 },
+ { 0xA648, UPPER_CASE, 0xA649 },
+ { 0xA649, LOWER_CASE, 0xA648 },
+ { 0xA64A, UPPER_CASE, 0xA64B },
+ { 0xA64B, LOWER_CASE, 0xA64A },
+ { 0xA64C, UPPER_CASE, 0xA64D },
+ { 0xA64D, LOWER_CASE, 0xA64C },
+ { 0xA64E, UPPER_CASE, 0xA64F },
+ { 0xA64F, LOWER_CASE, 0xA64E },
+ { 0xA650, UPPER_CASE, 0xA651 },
+ { 0xA651, LOWER_CASE, 0xA650 },
+ { 0xA652, UPPER_CASE, 0xA653 },
+ { 0xA653, LOWER_CASE, 0xA652 },
+ { 0xA654, UPPER_CASE, 0xA655 },
+ { 0xA655, LOWER_CASE, 0xA654 },
+ { 0xA656, UPPER_CASE, 0xA657 },
+ { 0xA657, LOWER_CASE, 0xA656 },
+ { 0xA658, UPPER_CASE, 0xA659 },
+ { 0xA659, LOWER_CASE, 0xA658 },
+ { 0xA65A, UPPER_CASE, 0xA65B },
+ { 0xA65B, LOWER_CASE, 0xA65A },
+ { 0xA65C, UPPER_CASE, 0xA65D },
+ { 0xA65D, LOWER_CASE, 0xA65C },
+ { 0xA65E, UPPER_CASE, 0xA65F },
+ { 0xA65F, LOWER_CASE, 0xA65E },
+ { 0xA660, UPPER_CASE, 0xA661 },
+ { 0xA661, LOWER_CASE, 0xA660 },
+ { 0xA662, UPPER_CASE, 0xA663 },
+ { 0xA663, LOWER_CASE, 0xA662 },
+ { 0xA664, UPPER_CASE, 0xA665 },
+ { 0xA665, LOWER_CASE, 0xA664 },
+ { 0xA666, UPPER_CASE, 0xA667 },
+ { 0xA667, LOWER_CASE, 0xA666 },
+ { 0xA668, UPPER_CASE, 0xA669 },
+ { 0xA669, LOWER_CASE, 0xA668 },
+ { 0xA66A, UPPER_CASE, 0xA66B },
+ { 0xA66B, LOWER_CASE, 0xA66A },
+ { 0xA66C, UPPER_CASE, 0xA66D },
+ { 0xA66D, LOWER_CASE, 0xA66C },
+ { 0xA680, UPPER_CASE, 0xA681 },
+ { 0xA681, LOWER_CASE, 0xA680 },
+ { 0xA682, UPPER_CASE, 0xA683 },
+ { 0xA683, LOWER_CASE, 0xA682 },
+ { 0xA684, UPPER_CASE, 0xA685 },
+ { 0xA685, LOWER_CASE, 0xA684 },
+ { 0xA686, UPPER_CASE, 0xA687 },
+ { 0xA687, LOWER_CASE, 0xA686 },
+ { 0xA688, UPPER_CASE, 0xA689 },
+ { 0xA689, LOWER_CASE, 0xA688 },
+ { 0xA68A, UPPER_CASE, 0xA68B },
+ { 0xA68B, LOWER_CASE, 0xA68A },
+ { 0xA68C, UPPER_CASE, 0xA68D },
+ { 0xA68D, LOWER_CASE, 0xA68C },
+ { 0xA68E, UPPER_CASE, 0xA68F },
+ { 0xA68F, LOWER_CASE, 0xA68E },
+ { 0xA690, UPPER_CASE, 0xA691 },
+ { 0xA691, LOWER_CASE, 0xA690 },
+ { 0xA692, UPPER_CASE, 0xA693 },
+ { 0xA693, LOWER_CASE, 0xA692 },
+ { 0xA694, UPPER_CASE, 0xA695 },
+ { 0xA695, LOWER_CASE, 0xA694 },
+ { 0xA696, UPPER_CASE, 0xA697 },
+ { 0xA697, LOWER_CASE, 0xA696 },
+ { 0xA698, UPPER_CASE, 0xA699 },
+ { 0xA699, LOWER_CASE, 0xA698 },
+ { 0xA69A, UPPER_CASE, 0xA69B },
+ { 0xA69B, LOWER_CASE, 0xA69A },
+ { 0xA722, UPPER_CASE, 0xA723 },
+ { 0xA723, LOWER_CASE, 0xA722 },
+ { 0xA724, UPPER_CASE, 0xA725 },
+ { 0xA725, LOWER_CASE, 0xA724 },
+ { 0xA726, UPPER_CASE, 0xA727 },
+ { 0xA727, LOWER_CASE, 0xA726 },
+ { 0xA728, UPPER_CASE, 0xA729 },
+ { 0xA729, LOWER_CASE, 0xA728 },
+ { 0xA72A, UPPER_CASE, 0xA72B },
+ { 0xA72B, LOWER_CASE, 0xA72A },
+ { 0xA72C, UPPER_CASE, 0xA72D },
+ { 0xA72D, LOWER_CASE, 0xA72C },
+ { 0xA72E, UPPER_CASE, 0xA72F },
+ { 0xA72F, LOWER_CASE, 0xA72E },
+ { 0xA732, UPPER_CASE, 0xA733 },
+ { 0xA733, LOWER_CASE, 0xA732 },
+ { 0xA734, UPPER_CASE, 0xA735 },
+ { 0xA735, LOWER_CASE, 0xA734 },
+ { 0xA736, UPPER_CASE, 0xA737 },
+ { 0xA737, LOWER_CASE, 0xA736 },
+ { 0xA738, UPPER_CASE, 0xA739 },
+ { 0xA739, LOWER_CASE, 0xA738 },
+ { 0xA73A, UPPER_CASE, 0xA73B },
+ { 0xA73B, LOWER_CASE, 0xA73A },
+ { 0xA73C, UPPER_CASE, 0xA73D },
+ { 0xA73D, LOWER_CASE, 0xA73C },
+ { 0xA73E, UPPER_CASE, 0xA73F },
+ { 0xA73F, LOWER_CASE, 0xA73E },
+ { 0xA740, UPPER_CASE, 0xA741 },
+ { 0xA741, LOWER_CASE, 0xA740 },
+ { 0xA742, UPPER_CASE, 0xA743 },
+ { 0xA743, LOWER_CASE, 0xA742 },
+ { 0xA744, UPPER_CASE, 0xA745 },
+ { 0xA745, LOWER_CASE, 0xA744 },
+ { 0xA746, UPPER_CASE, 0xA747 },
+ { 0xA747, LOWER_CASE, 0xA746 },
+ { 0xA748, UPPER_CASE, 0xA749 },
+ { 0xA749, LOWER_CASE, 0xA748 },
+ { 0xA74A, UPPER_CASE, 0xA74B },
+ { 0xA74B, LOWER_CASE, 0xA74A },
+ { 0xA74C, UPPER_CASE, 0xA74D },
+ { 0xA74D, LOWER_CASE, 0xA74C },
+ { 0xA74E, UPPER_CASE, 0xA74F },
+ { 0xA74F, LOWER_CASE, 0xA74E },
+ { 0xA750, UPPER_CASE, 0xA751 },
+ { 0xA751, LOWER_CASE, 0xA750 },
+ { 0xA752, UPPER_CASE, 0xA753 },
+ { 0xA753, LOWER_CASE, 0xA752 },
+ { 0xA754, UPPER_CASE, 0xA755 },
+ { 0xA755, LOWER_CASE, 0xA754 },
+ { 0xA756, UPPER_CASE, 0xA757 },
+ { 0xA757, LOWER_CASE, 0xA756 },
+ { 0xA758, UPPER_CASE, 0xA759 },
+ { 0xA759, LOWER_CASE, 0xA758 },
+ { 0xA75A, UPPER_CASE, 0xA75B },
+ { 0xA75B, LOWER_CASE, 0xA75A },
+ { 0xA75C, UPPER_CASE, 0xA75D },
+ { 0xA75D, LOWER_CASE, 0xA75C },
+ { 0xA75E, UPPER_CASE, 0xA75F },
+ { 0xA75F, LOWER_CASE, 0xA75E },
+ { 0xA760, UPPER_CASE, 0xA761 },
+ { 0xA761, LOWER_CASE, 0xA760 },
+ { 0xA762, UPPER_CASE, 0xA763 },
+ { 0xA763, LOWER_CASE, 0xA762 },
+ { 0xA764, UPPER_CASE, 0xA765 },
+ { 0xA765, LOWER_CASE, 0xA764 },
+ { 0xA766, UPPER_CASE, 0xA767 },
+ { 0xA767, LOWER_CASE, 0xA766 },
+ { 0xA768, UPPER_CASE, 0xA769 },
+ { 0xA769, LOWER_CASE, 0xA768 },
+ { 0xA76A, UPPER_CASE, 0xA76B },
+ { 0xA76B, LOWER_CASE, 0xA76A },
+ { 0xA76C, UPPER_CASE, 0xA76D },
+ { 0xA76D, LOWER_CASE, 0xA76C },
+ { 0xA76E, UPPER_CASE, 0xA76F },
+ { 0xA76F, LOWER_CASE, 0xA76E },
+ { 0xA779, UPPER_CASE, 0xA77A },
+ { 0xA77A, LOWER_CASE, 0xA779 },
+ { 0xA77B, UPPER_CASE, 0xA77C },
+ { 0xA77C, LOWER_CASE, 0xA77B },
+ { 0xA77D, UPPER_CASE, 0x1D79 },
+ { 0xA77E, UPPER_CASE, 0xA77F },
+ { 0xA77F, LOWER_CASE, 0xA77E },
+ { 0xA780, UPPER_CASE, 0xA781 },
+ { 0xA781, LOWER_CASE, 0xA780 },
+ { 0xA782, UPPER_CASE, 0xA783 },
+ { 0xA783, LOWER_CASE, 0xA782 },
+ { 0xA784, UPPER_CASE, 0xA785 },
+ { 0xA785, LOWER_CASE, 0xA784 },
+ { 0xA786, UPPER_CASE, 0xA787 },
+ { 0xA787, LOWER_CASE, 0xA786 },
+ { 0xA78B, UPPER_CASE, 0xA78C },
+ { 0xA78C, LOWER_CASE, 0xA78B },
+ { 0xA78D, UPPER_CASE, 0x265 },
+ { 0xA790, UPPER_CASE, 0xA791 },
+ { 0xA791, LOWER_CASE, 0xA790 },
+ { 0xA792, UPPER_CASE, 0xA793 },
+ { 0xA793, LOWER_CASE, 0xA792 },
+ { 0xA796, UPPER_CASE, 0xA797 },
+ { 0xA797, LOWER_CASE, 0xA796 },
+ { 0xA798, UPPER_CASE, 0xA799 },
+ { 0xA799, LOWER_CASE, 0xA798 },
+ { 0xA79A, UPPER_CASE, 0xA79B },
+ { 0xA79B, LOWER_CASE, 0xA79A },
+ { 0xA79C, UPPER_CASE, 0xA79D },
+ { 0xA79D, LOWER_CASE, 0xA79C },
+ { 0xA79E, UPPER_CASE, 0xA79F },
+ { 0xA79F, LOWER_CASE, 0xA79E },
+ { 0xA7A0, UPPER_CASE, 0xA7A1 },
+ { 0xA7A1, LOWER_CASE, 0xA7A0 },
+ { 0xA7A2, UPPER_CASE, 0xA7A3 },
+ { 0xA7A3, LOWER_CASE, 0xA7A2 },
+ { 0xA7A4, UPPER_CASE, 0xA7A5 },
+ { 0xA7A5, LOWER_CASE, 0xA7A4 },
+ { 0xA7A6, UPPER_CASE, 0xA7A7 },
+ { 0xA7A7, LOWER_CASE, 0xA7A6 },
+ { 0xA7A8, UPPER_CASE, 0xA7A9 },
+ { 0xA7A9, LOWER_CASE, 0xA7A8 },
+ { 0xA7AA, UPPER_CASE, 0x266 },
+ { 0xA7AB, UPPER_CASE, 0x25C },
+ { 0xA7AC, UPPER_CASE, 0x261 },
+ { 0xA7AD, UPPER_CASE, 0x26C },
+ { 0xA7AE, UPPER_CASE, 0x26A },
+ { 0xA7B0, UPPER_CASE, 0x29E },
+ { 0xA7B1, UPPER_CASE, 0x287 },
+ { 0xA7B2, UPPER_CASE, 0x29D },
+ { 0xA7B3, UPPER_CASE, 0xAB53 },
+ { 0xA7B4, UPPER_CASE, 0xA7B5 },
+ { 0xA7B5, LOWER_CASE, 0xA7B4 },
+ { 0xA7B6, UPPER_CASE, 0xA7B7 },
+ { 0xA7B7, LOWER_CASE, 0xA7B6 },
+ { 0xA7B8, UPPER_CASE, 0xA7B9 },
+ { 0xA7B9, LOWER_CASE, 0xA7B8 },
+ { 0xAB53, LOWER_CASE, 0xA7B3 },
+ { 0xAB70, LOWER_CASE, 0x13A0 },
+ { 0xAB71, LOWER_CASE, 0x13A1 },
+ { 0xAB72, LOWER_CASE, 0x13A2 },
+ { 0xAB73, LOWER_CASE, 0x13A3 },
+ { 0xAB74, LOWER_CASE, 0x13A4 },
+ { 0xAB75, LOWER_CASE, 0x13A5 },
+ { 0xAB76, LOWER_CASE, 0x13A6 },
+ { 0xAB77, LOWER_CASE, 0x13A7 },
+ { 0xAB78, LOWER_CASE, 0x13A8 },
+ { 0xAB79, LOWER_CASE, 0x13A9 },
+ { 0xAB7A, LOWER_CASE, 0x13AA },
+ { 0xAB7B, LOWER_CASE, 0x13AB },
+ { 0xAB7C, LOWER_CASE, 0x13AC },
+ { 0xAB7D, LOWER_CASE, 0x13AD },
+ { 0xAB7E, LOWER_CASE, 0x13AE },
+ { 0xAB7F, LOWER_CASE, 0x13AF },
+ { 0xAB80, LOWER_CASE, 0x13B0 },
+ { 0xAB81, LOWER_CASE, 0x13B1 },
+ { 0xAB82, LOWER_CASE, 0x13B2 },
+ { 0xAB83, LOWER_CASE, 0x13B3 },
+ { 0xAB84, LOWER_CASE, 0x13B4 },
+ { 0xAB85, LOWER_CASE, 0x13B5 },
+ { 0xAB86, LOWER_CASE, 0x13B6 },
+ { 0xAB87, LOWER_CASE, 0x13B7 },
+ { 0xAB88, LOWER_CASE, 0x13B8 },
+ { 0xAB89, LOWER_CASE, 0x13B9 },
+ { 0xAB8A, LOWER_CASE, 0x13BA },
+ { 0xAB8B, LOWER_CASE, 0x13BB },
+ { 0xAB8C, LOWER_CASE, 0x13BC },
+ { 0xAB8D, LOWER_CASE, 0x13BD },
+ { 0xAB8E, LOWER_CASE, 0x13BE },
+ { 0xAB8F, LOWER_CASE, 0x13BF },
+ { 0xAB90, LOWER_CASE, 0x13C0 },
+ { 0xAB91, LOWER_CASE, 0x13C1 },
+ { 0xAB92, LOWER_CASE, 0x13C2 },
+ { 0xAB93, LOWER_CASE, 0x13C3 },
+ { 0xAB94, LOWER_CASE, 0x13C4 },
+ { 0xAB95, LOWER_CASE, 0x13C5 },
+ { 0xAB96, LOWER_CASE, 0x13C6 },
+ { 0xAB97, LOWER_CASE, 0x13C7 },
+ { 0xAB98, LOWER_CASE, 0x13C8 },
+ { 0xAB99, LOWER_CASE, 0x13C9 },
+ { 0xAB9A, LOWER_CASE, 0x13CA },
+ { 0xAB9B, LOWER_CASE, 0x13CB },
+ { 0xAB9C, LOWER_CASE, 0x13CC },
+ { 0xAB9D, LOWER_CASE, 0x13CD },
+ { 0xAB9E, LOWER_CASE, 0x13CE },
+ { 0xAB9F, LOWER_CASE, 0x13CF },
+ { 0xABA0, LOWER_CASE, 0x13D0 },
+ { 0xABA1, LOWER_CASE, 0x13D1 },
+ { 0xABA2, LOWER_CASE, 0x13D2 },
+ { 0xABA3, LOWER_CASE, 0x13D3 },
+ { 0xABA4, LOWER_CASE, 0x13D4 },
+ { 0xABA5, LOWER_CASE, 0x13D5 },
+ { 0xABA6, LOWER_CASE, 0x13D6 },
+ { 0xABA7, LOWER_CASE, 0x13D7 },
+ { 0xABA8, LOWER_CASE, 0x13D8 },
+ { 0xABA9, LOWER_CASE, 0x13D9 },
+ { 0xABAA, LOWER_CASE, 0x13DA },
+ { 0xABAB, LOWER_CASE, 0x13DB },
+ { 0xABAC, LOWER_CASE, 0x13DC },
+ { 0xABAD, LOWER_CASE, 0x13DD },
+ { 0xABAE, LOWER_CASE, 0x13DE },
+ { 0xABAF, LOWER_CASE, 0x13DF },
+ { 0xABB0, LOWER_CASE, 0x13E0 },
+ { 0xABB1, LOWER_CASE, 0x13E1 },
+ { 0xABB2, LOWER_CASE, 0x13E2 },
+ { 0xABB3, LOWER_CASE, 0x13E3 },
+ { 0xABB4, LOWER_CASE, 0x13E4 },
+ { 0xABB5, LOWER_CASE, 0x13E5 },
+ { 0xABB6, LOWER_CASE, 0x13E6 },
+ { 0xABB7, LOWER_CASE, 0x13E7 },
+ { 0xABB8, LOWER_CASE, 0x13E8 },
+ { 0xABB9, LOWER_CASE, 0x13E9 },
+ { 0xABBA, LOWER_CASE, 0x13EA },
+ { 0xABBB, LOWER_CASE, 0x13EB },
+ { 0xABBC, LOWER_CASE, 0x13EC },
+ { 0xABBD, LOWER_CASE, 0x13ED },
+ { 0xABBE, LOWER_CASE, 0x13EE },
+ { 0xABBF, LOWER_CASE, 0x13EF },
+ { 0xFF21, UPPER_CASE, 0xFF41 },
+ { 0xFF22, UPPER_CASE, 0xFF42 },
+ { 0xFF23, UPPER_CASE, 0xFF43 },
+ { 0xFF24, UPPER_CASE, 0xFF44 },
+ { 0xFF25, UPPER_CASE, 0xFF45 },
+ { 0xFF26, UPPER_CASE, 0xFF46 },
+ { 0xFF27, UPPER_CASE, 0xFF47 },
+ { 0xFF28, UPPER_CASE, 0xFF48 },
+ { 0xFF29, UPPER_CASE, 0xFF49 },
+ { 0xFF2A, UPPER_CASE, 0xFF4A },
+ { 0xFF2B, UPPER_CASE, 0xFF4B },
+ { 0xFF2C, UPPER_CASE, 0xFF4C },
+ { 0xFF2D, UPPER_CASE, 0xFF4D },
+ { 0xFF2E, UPPER_CASE, 0xFF4E },
+ { 0xFF2F, UPPER_CASE, 0xFF4F },
+ { 0xFF30, UPPER_CASE, 0xFF50 },
+ { 0xFF31, UPPER_CASE, 0xFF51 },
+ { 0xFF32, UPPER_CASE, 0xFF52 },
+ { 0xFF33, UPPER_CASE, 0xFF53 },
+ { 0xFF34, UPPER_CASE, 0xFF54 },
+ { 0xFF35, UPPER_CASE, 0xFF55 },
+ { 0xFF36, UPPER_CASE, 0xFF56 },
+ { 0xFF37, UPPER_CASE, 0xFF57 },
+ { 0xFF38, UPPER_CASE, 0xFF58 },
+ { 0xFF39, UPPER_CASE, 0xFF59 },
+ { 0xFF3A, UPPER_CASE, 0xFF5A },
+ { 0xFF41, LOWER_CASE, 0xFF21 },
+ { 0xFF42, LOWER_CASE, 0xFF22 },
+ { 0xFF43, LOWER_CASE, 0xFF23 },
+ { 0xFF44, LOWER_CASE, 0xFF24 },
+ { 0xFF45, LOWER_CASE, 0xFF25 },
+ { 0xFF46, LOWER_CASE, 0xFF26 },
+ { 0xFF47, LOWER_CASE, 0xFF27 },
+ { 0xFF48, LOWER_CASE, 0xFF28 },
+ { 0xFF49, LOWER_CASE, 0xFF29 },
+ { 0xFF4A, LOWER_CASE, 0xFF2A },
+ { 0xFF4B, LOWER_CASE, 0xFF2B },
+ { 0xFF4C, LOWER_CASE, 0xFF2C },
+ { 0xFF4D, LOWER_CASE, 0xFF2D },
+ { 0xFF4E, LOWER_CASE, 0xFF2E },
+ { 0xFF4F, LOWER_CASE, 0xFF2F },
+ { 0xFF50, LOWER_CASE, 0xFF30 },
+ { 0xFF51, LOWER_CASE, 0xFF31 },
+ { 0xFF52, LOWER_CASE, 0xFF32 },
+ { 0xFF53, LOWER_CASE, 0xFF33 },
+ { 0xFF54, LOWER_CASE, 0xFF34 },
+ { 0xFF55, LOWER_CASE, 0xFF35 },
+ { 0xFF56, LOWER_CASE, 0xFF36 },
+ { 0xFF57, LOWER_CASE, 0xFF37 },
+ { 0xFF58, LOWER_CASE, 0xFF38 },
+ { 0xFF59, LOWER_CASE, 0xFF39 },
+ { 0xFF5A, LOWER_CASE, 0xFF3A },
+};
+CONST UINT UNICODE_DATA_SIZE = sizeof(UnicodeData)/sizeof(UnicodeDataRec);
diff --git a/src/pal/src/locale/unicodedata.cs b/src/pal/src/locale/unicodedata.cs
new file mode 100644
index 0000000000..1209495802
--- /dev/null
+++ b/src/pal/src/locale/unicodedata.cs
@@ -0,0 +1,65 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Globalization;
+using System.IO;
+
+class Program
+{
+ static void Main(string[] args)
+ {
+ Console.WriteLine("// Licensed to the .NET Foundation under one or more agreements.");
+ Console.WriteLine("// The .NET Foundation licenses this file to you under the MIT license.");
+ Console.WriteLine("// See the LICENSE file in the project root for more information.");
+ Console.WriteLine();
+
+ Console.WriteLine("#include \"pal/unicodedata.h\"");
+
+ Console.WriteLine();
+ Console.WriteLine("//");
+ Console.WriteLine("// THIS FILE IS GENERATED. DO NOT HAND EDIT.");
+ Console.WriteLine("//");
+ Console.WriteLine();
+
+ Console.WriteLine("CONST UnicodeDataRec UnicodeData[] = {");
+
+ string sourceFileName = args[0];
+
+ using (StreamReader sourceFile = File.OpenText(sourceFileName))
+ while (sourceFile.ReadLine() is string line)
+ {
+ var fields = line.Split(';');
+
+ var code = int.Parse(fields[0], NumberStyles.HexNumber);
+
+ bool hasUpperCaseMapping = fields[12].Length != 0;
+ bool hasLowerCaseMapping = fields[13].Length != 0;
+
+ if (!hasLowerCaseMapping && !hasUpperCaseMapping)
+ continue;
+
+
+ int opposingCase = hasUpperCaseMapping ?
+ int.Parse(fields[12], NumberStyles.HexNumber) :
+ int.Parse(fields[13], NumberStyles.HexNumber);
+
+ // These won't fit in 16 bits - no point carrying them
+ if (code > 0xFFFF)
+ continue;
+
+ Debug.Assert(opposingCase <= 0xFFFF);
+
+ string specifier = hasUpperCaseMapping ? "LOWER_CASE" : "UPPER_CASE";
+
+ Console.WriteLine($" {{ 0x{code:X}, {specifier}, 0x{opposingCase:X} }},");
+ }
+
+ Console.WriteLine("};");
+
+ Console.WriteLine("CONST UINT UNICODE_DATA_SIZE = sizeof(UnicodeData)/sizeof(UnicodeDataRec);");
+ }
+} \ No newline at end of file