1 /* Copyright (c) 2000, 2013, Oracle and/or its affiliates.
2    Copyright (c) 2009, 2017, MariaDB
3 
4    This library is free software; you can redistribute it and/or
5    modify it under the terms of the GNU Library General Public
6    License as published by the Free Software Foundation; version 2
7    of the License.
8 
9    This library is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12    Library General Public License for more details.
13 
14    You should have received a copy of the GNU Library General Public
15    License along with this library; if not, write to the Free
16    Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
17    MA 02110-1335  USA */
18 
19 /* UTF8 according RFC 2279 */
20 /* Written by Alexander Barkov <bar@udm.net> */
21 
22 #include "strings_def.h"
23 #include <m_ctype.h>
24 
25 #ifndef EILSEQ
26 #define EILSEQ ENOENT
27 #endif
28 
29 
30 #include "ctype-utf8.h"
31 #include "ctype-unidata.h"
32 
33 
34 /* Definitions for strcoll.inl */
35 #define IS_MB1_CHAR(x)              ((uchar) (x) < 0x80)
36 #define IS_MB1_MBHEAD_UNUSED_GAP(x) ((uchar) (x) < 0xC2)
37 #define IS_MB2_CHAR(x,y)            IS_UTF8MB2_STEP2(x,y)
38 #define IS_MB3_CHAR(x,y,z)          IS_UTF8MB3_STEP3(x,y,z)
39 
40 /* Collation names */
41 #define MY_UTF8MB3_GENERAL_CI MY_UTF8MB3 "_general_ci"
42 #define MY_UTF8MB3_GENERAL_CS MY_UTF8MB3 "_general_cs"
43 #define MY_UTF8MB3_BIN        MY_UTF8MB3 "_bin"
44 #define MY_UTF8MB4_GENERAL_CI MY_UTF8MB4 "_general_ci"
45 #define MY_UTF8MB4_GENERAL_CS MY_UTF8MB4 "_general_cs"
46 #define MY_UTF8MB4_GENERAL_NOPAD_CI MY_UTF8MB4 "_general_nopad_ci"
47 #define MY_UTF8MB4_BIN        MY_UTF8MB4 "_bin"
48 #define MY_UTF8MB4_NOPAD_BIN  MY_UTF8MB4 "_nopad_bin"
49 
50 
51 
52 #ifndef HAVE_CHARSET_utf8
53 #define HAVE_CHARSET_utf8
54 #endif
55 
56 #ifdef HAVE_CHARSET_utf8
57 #define HAVE_UNIDATA
58 #endif
59 
60 #ifdef HAVE_CHARSET_ucs2
61 #define HAVE_UNIDATA
62 #endif
63 
64 #ifdef HAVE_CHARSET_utf16
65 #define HAVE_UNIDATA
66 #endif
67 
68 #ifdef HAVE_CHARSET_utf32
69 #define HAVE_UNIDATA
70 #endif
71 
72 
73 #if defined(HAVE_CHARSET_utf8) || defined(HAVE_CHARSET_utf8mb4)
74 
75 static inline
my_valid_mbcharlen_utf8mb3(const uchar * s,const uchar * e)76 int my_valid_mbcharlen_utf8mb3(const uchar *s, const uchar *e)
77 {
78   uchar c;
79 
80   DBUG_ASSERT(s < e);
81   c= s[0];
82   if (c < 0x80)
83     return 1;
84 
85   if (c < 0xc2)
86     return MY_CS_ILSEQ;
87 
88   if (c < 0xe0)
89   {
90     if (s+2 > e) /* We need 2 characters */
91       return MY_CS_TOOSMALL2;
92 
93     if (!(IS_CONTINUATION_BYTE(s[1])))
94       return MY_CS_ILSEQ;
95 
96     return 2;
97   }
98 
99   DBUG_ASSERT(c < 0xf0);
100   if (s+3 > e) /* We need 3 characters */
101     return MY_CS_TOOSMALL3;
102 
103   if (!IS_UTF8MB3_STEP2(c, s[1], s[2]))
104     return MY_CS_ILSEQ;
105 
106   return 3;
107 }
108 
109 #endif  /*HAVE_CHARSET_utf8 || HAVE_CHARSET_utf8mb4*/
110 
111 #ifdef HAVE_UNIDATA
112 
113 #include "my_uctype.h"
114 
115 MY_UNICASE_CHARACTER my_unicase_default_page00[]={
116   {0x0000,0x0000,0x0000},  {0x0001,0x0001,0x0001},
117   {0x0002,0x0002,0x0002},  {0x0003,0x0003,0x0003},
118   {0x0004,0x0004,0x0004},  {0x0005,0x0005,0x0005},
119   {0x0006,0x0006,0x0006},  {0x0007,0x0007,0x0007},
120   {0x0008,0x0008,0x0008},  {0x0009,0x0009,0x0009},
121   {0x000A,0x000A,0x000A},  {0x000B,0x000B,0x000B},
122   {0x000C,0x000C,0x000C},  {0x000D,0x000D,0x000D},
123   {0x000E,0x000E,0x000E},  {0x000F,0x000F,0x000F},
124   {0x0010,0x0010,0x0010},  {0x0011,0x0011,0x0011},
125   {0x0012,0x0012,0x0012},  {0x0013,0x0013,0x0013},
126   {0x0014,0x0014,0x0014},  {0x0015,0x0015,0x0015},
127   {0x0016,0x0016,0x0016},  {0x0017,0x0017,0x0017},
128   {0x0018,0x0018,0x0018},  {0x0019,0x0019,0x0019},
129   {0x001A,0x001A,0x001A},  {0x001B,0x001B,0x001B},
130   {0x001C,0x001C,0x001C},  {0x001D,0x001D,0x001D},
131   {0x001E,0x001E,0x001E},  {0x001F,0x001F,0x001F},
132   {0x0020,0x0020,0x0020},  {0x0021,0x0021,0x0021},
133   {0x0022,0x0022,0x0022},  {0x0023,0x0023,0x0023},
134   {0x0024,0x0024,0x0024},  {0x0025,0x0025,0x0025},
135   {0x0026,0x0026,0x0026},  {0x0027,0x0027,0x0027},
136   {0x0028,0x0028,0x0028},  {0x0029,0x0029,0x0029},
137   {0x002A,0x002A,0x002A},  {0x002B,0x002B,0x002B},
138   {0x002C,0x002C,0x002C},  {0x002D,0x002D,0x002D},
139   {0x002E,0x002E,0x002E},  {0x002F,0x002F,0x002F},
140   {0x0030,0x0030,0x0030},  {0x0031,0x0031,0x0031},
141   {0x0032,0x0032,0x0032},  {0x0033,0x0033,0x0033},
142   {0x0034,0x0034,0x0034},  {0x0035,0x0035,0x0035},
143   {0x0036,0x0036,0x0036},  {0x0037,0x0037,0x0037},
144   {0x0038,0x0038,0x0038},  {0x0039,0x0039,0x0039},
145   {0x003A,0x003A,0x003A},  {0x003B,0x003B,0x003B},
146   {0x003C,0x003C,0x003C},  {0x003D,0x003D,0x003D},
147   {0x003E,0x003E,0x003E},  {0x003F,0x003F,0x003F},
148   {0x0040,0x0040,0x0040},  {0x0041,0x0061,0x0041},
149   {0x0042,0x0062,0x0042},  {0x0043,0x0063,0x0043},
150   {0x0044,0x0064,0x0044},  {0x0045,0x0065,0x0045},
151   {0x0046,0x0066,0x0046},  {0x0047,0x0067,0x0047},
152   {0x0048,0x0068,0x0048},  {0x0049,0x0069,0x0049},
153   {0x004A,0x006A,0x004A},  {0x004B,0x006B,0x004B},
154   {0x004C,0x006C,0x004C},  {0x004D,0x006D,0x004D},
155   {0x004E,0x006E,0x004E},  {0x004F,0x006F,0x004F},
156   {0x0050,0x0070,0x0050},  {0x0051,0x0071,0x0051},
157   {0x0052,0x0072,0x0052},  {0x0053,0x0073,0x0053},
158   {0x0054,0x0074,0x0054},  {0x0055,0x0075,0x0055},
159   {0x0056,0x0076,0x0056},  {0x0057,0x0077,0x0057},
160   {0x0058,0x0078,0x0058},  {0x0059,0x0079,0x0059},
161   {0x005A,0x007A,0x005A},  {0x005B,0x005B,0x005B},
162   {0x005C,0x005C,0x005C},  {0x005D,0x005D,0x005D},
163   {0x005E,0x005E,0x005E},  {0x005F,0x005F,0x005F},
164   {0x0060,0x0060,0x0060},  {0x0041,0x0061,0x0041},
165   {0x0042,0x0062,0x0042},  {0x0043,0x0063,0x0043},
166   {0x0044,0x0064,0x0044},  {0x0045,0x0065,0x0045},
167   {0x0046,0x0066,0x0046},  {0x0047,0x0067,0x0047},
168   {0x0048,0x0068,0x0048},  {0x0049,0x0069,0x0049},
169   {0x004A,0x006A,0x004A},  {0x004B,0x006B,0x004B},
170   {0x004C,0x006C,0x004C},  {0x004D,0x006D,0x004D},
171   {0x004E,0x006E,0x004E},  {0x004F,0x006F,0x004F},
172   {0x0050,0x0070,0x0050},  {0x0051,0x0071,0x0051},
173   {0x0052,0x0072,0x0052},  {0x0053,0x0073,0x0053},
174   {0x0054,0x0074,0x0054},  {0x0055,0x0075,0x0055},
175   {0x0056,0x0076,0x0056},  {0x0057,0x0077,0x0057},
176   {0x0058,0x0078,0x0058},  {0x0059,0x0079,0x0059},
177   {0x005A,0x007A,0x005A},  {0x007B,0x007B,0x007B},
178   {0x007C,0x007C,0x007C},  {0x007D,0x007D,0x007D},
179   {0x007E,0x007E,0x007E},  {0x007F,0x007F,0x007F},
180   {0x0080,0x0080,0x0080},  {0x0081,0x0081,0x0081},
181   {0x0082,0x0082,0x0082},  {0x0083,0x0083,0x0083},
182   {0x0084,0x0084,0x0084},  {0x0085,0x0085,0x0085},
183   {0x0086,0x0086,0x0086},  {0x0087,0x0087,0x0087},
184   {0x0088,0x0088,0x0088},  {0x0089,0x0089,0x0089},
185   {0x008A,0x008A,0x008A},  {0x008B,0x008B,0x008B},
186   {0x008C,0x008C,0x008C},  {0x008D,0x008D,0x008D},
187   {0x008E,0x008E,0x008E},  {0x008F,0x008F,0x008F},
188   {0x0090,0x0090,0x0090},  {0x0091,0x0091,0x0091},
189   {0x0092,0x0092,0x0092},  {0x0093,0x0093,0x0093},
190   {0x0094,0x0094,0x0094},  {0x0095,0x0095,0x0095},
191   {0x0096,0x0096,0x0096},  {0x0097,0x0097,0x0097},
192   {0x0098,0x0098,0x0098},  {0x0099,0x0099,0x0099},
193   {0x009A,0x009A,0x009A},  {0x009B,0x009B,0x009B},
194   {0x009C,0x009C,0x009C},  {0x009D,0x009D,0x009D},
195   {0x009E,0x009E,0x009E},  {0x009F,0x009F,0x009F},
196   {0x00A0,0x00A0,0x00A0},  {0x00A1,0x00A1,0x00A1},
197   {0x00A2,0x00A2,0x00A2},  {0x00A3,0x00A3,0x00A3},
198   {0x00A4,0x00A4,0x00A4},  {0x00A5,0x00A5,0x00A5},
199   {0x00A6,0x00A6,0x00A6},  {0x00A7,0x00A7,0x00A7},
200   {0x00A8,0x00A8,0x00A8},  {0x00A9,0x00A9,0x00A9},
201   {0x00AA,0x00AA,0x00AA},  {0x00AB,0x00AB,0x00AB},
202   {0x00AC,0x00AC,0x00AC},  {0x00AD,0x00AD,0x00AD},
203   {0x00AE,0x00AE,0x00AE},  {0x00AF,0x00AF,0x00AF},
204   {0x00B0,0x00B0,0x00B0},  {0x00B1,0x00B1,0x00B1},
205   {0x00B2,0x00B2,0x00B2},  {0x00B3,0x00B3,0x00B3},
206   {0x00B4,0x00B4,0x00B4},  {0x039C,0x00B5,0x039C},
207   {0x00B6,0x00B6,0x00B6},  {0x00B7,0x00B7,0x00B7},
208   {0x00B8,0x00B8,0x00B8},  {0x00B9,0x00B9,0x00B9},
209   {0x00BA,0x00BA,0x00BA},  {0x00BB,0x00BB,0x00BB},
210   {0x00BC,0x00BC,0x00BC},  {0x00BD,0x00BD,0x00BD},
211   {0x00BE,0x00BE,0x00BE},  {0x00BF,0x00BF,0x00BF},
212   {0x00C0,0x00E0,0x0041},  {0x00C1,0x00E1,0x0041},
213   {0x00C2,0x00E2,0x0041},  {0x00C3,0x00E3,0x0041},
214   {0x00C4,0x00E4,0x0041},  {0x00C5,0x00E5,0x0041},
215   {0x00C6,0x00E6,0x00C6},  {0x00C7,0x00E7,0x0043},
216   {0x00C8,0x00E8,0x0045},  {0x00C9,0x00E9,0x0045},
217   {0x00CA,0x00EA,0x0045},  {0x00CB,0x00EB,0x0045},
218   {0x00CC,0x00EC,0x0049},  {0x00CD,0x00ED,0x0049},
219   {0x00CE,0x00EE,0x0049},  {0x00CF,0x00EF,0x0049},
220   {0x00D0,0x00F0,0x00D0},  {0x00D1,0x00F1,0x004E},
221   {0x00D2,0x00F2,0x004F},  {0x00D3,0x00F3,0x004F},
222   {0x00D4,0x00F4,0x004F},  {0x00D5,0x00F5,0x004F},
223   {0x00D6,0x00F6,0x004F},  {0x00D7,0x00D7,0x00D7},
224   {0x00D8,0x00F8,0x00D8},  {0x00D9,0x00F9,0x0055},
225   {0x00DA,0x00FA,0x0055},  {0x00DB,0x00FB,0x0055},
226   {0x00DC,0x00FC,0x0055},  {0x00DD,0x00FD,0x0059},
227   {0x00DE,0x00FE,0x00DE},  {0x00DF,0x00DF,0x0053},
228   {0x00C0,0x00E0,0x0041},  {0x00C1,0x00E1,0x0041},
229   {0x00C2,0x00E2,0x0041},  {0x00C3,0x00E3,0x0041},
230   {0x00C4,0x00E4,0x0041},  {0x00C5,0x00E5,0x0041},
231   {0x00C6,0x00E6,0x00C6},  {0x00C7,0x00E7,0x0043},
232   {0x00C8,0x00E8,0x0045},  {0x00C9,0x00E9,0x0045},
233   {0x00CA,0x00EA,0x0045},  {0x00CB,0x00EB,0x0045},
234   {0x00CC,0x00EC,0x0049},  {0x00CD,0x00ED,0x0049},
235   {0x00CE,0x00EE,0x0049},  {0x00CF,0x00EF,0x0049},
236   {0x00D0,0x00F0,0x00D0},  {0x00D1,0x00F1,0x004E},
237   {0x00D2,0x00F2,0x004F},  {0x00D3,0x00F3,0x004F},
238   {0x00D4,0x00F4,0x004F},  {0x00D5,0x00F5,0x004F},
239   {0x00D6,0x00F6,0x004F},  {0x00F7,0x00F7,0x00F7},
240   {0x00D8,0x00F8,0x00D8},  {0x00D9,0x00F9,0x0055},
241   {0x00DA,0x00FA,0x0055},  {0x00DB,0x00FB,0x0055},
242   {0x00DC,0x00FC,0x0055},  {0x00DD,0x00FD,0x0059},
243   {0x00DE,0x00FE,0x00DE},  {0x0178,0x00FF,0x0059}
244 };
245 
246 
247 /*
248   Almost similar to my_unicase_default_page00, but maps sorting order
249   for U+00DF to 0x00DF instead of 0x0053.
250 */
251 static MY_UNICASE_CHARACTER plane00_mysql500[]={
252   {0x0000,0x0000,0x0000},  {0x0001,0x0001,0x0001},
253   {0x0002,0x0002,0x0002},  {0x0003,0x0003,0x0003},
254   {0x0004,0x0004,0x0004},  {0x0005,0x0005,0x0005},
255   {0x0006,0x0006,0x0006},  {0x0007,0x0007,0x0007},
256   {0x0008,0x0008,0x0008},  {0x0009,0x0009,0x0009},
257   {0x000A,0x000A,0x000A},  {0x000B,0x000B,0x000B},
258   {0x000C,0x000C,0x000C},  {0x000D,0x000D,0x000D},
259   {0x000E,0x000E,0x000E},  {0x000F,0x000F,0x000F},
260   {0x0010,0x0010,0x0010},  {0x0011,0x0011,0x0011},
261   {0x0012,0x0012,0x0012},  {0x0013,0x0013,0x0013},
262   {0x0014,0x0014,0x0014},  {0x0015,0x0015,0x0015},
263   {0x0016,0x0016,0x0016},  {0x0017,0x0017,0x0017},
264   {0x0018,0x0018,0x0018},  {0x0019,0x0019,0x0019},
265   {0x001A,0x001A,0x001A},  {0x001B,0x001B,0x001B},
266   {0x001C,0x001C,0x001C},  {0x001D,0x001D,0x001D},
267   {0x001E,0x001E,0x001E},  {0x001F,0x001F,0x001F},
268   {0x0020,0x0020,0x0020},  {0x0021,0x0021,0x0021},
269   {0x0022,0x0022,0x0022},  {0x0023,0x0023,0x0023},
270   {0x0024,0x0024,0x0024},  {0x0025,0x0025,0x0025},
271   {0x0026,0x0026,0x0026},  {0x0027,0x0027,0x0027},
272   {0x0028,0x0028,0x0028},  {0x0029,0x0029,0x0029},
273   {0x002A,0x002A,0x002A},  {0x002B,0x002B,0x002B},
274   {0x002C,0x002C,0x002C},  {0x002D,0x002D,0x002D},
275   {0x002E,0x002E,0x002E},  {0x002F,0x002F,0x002F},
276   {0x0030,0x0030,0x0030},  {0x0031,0x0031,0x0031},
277   {0x0032,0x0032,0x0032},  {0x0033,0x0033,0x0033},
278   {0x0034,0x0034,0x0034},  {0x0035,0x0035,0x0035},
279   {0x0036,0x0036,0x0036},  {0x0037,0x0037,0x0037},
280   {0x0038,0x0038,0x0038},  {0x0039,0x0039,0x0039},
281   {0x003A,0x003A,0x003A},  {0x003B,0x003B,0x003B},
282   {0x003C,0x003C,0x003C},  {0x003D,0x003D,0x003D},
283   {0x003E,0x003E,0x003E},  {0x003F,0x003F,0x003F},
284   {0x0040,0x0040,0x0040},  {0x0041,0x0061,0x0041},
285   {0x0042,0x0062,0x0042},  {0x0043,0x0063,0x0043},
286   {0x0044,0x0064,0x0044},  {0x0045,0x0065,0x0045},
287   {0x0046,0x0066,0x0046},  {0x0047,0x0067,0x0047},
288   {0x0048,0x0068,0x0048},  {0x0049,0x0069,0x0049},
289   {0x004A,0x006A,0x004A},  {0x004B,0x006B,0x004B},
290   {0x004C,0x006C,0x004C},  {0x004D,0x006D,0x004D},
291   {0x004E,0x006E,0x004E},  {0x004F,0x006F,0x004F},
292   {0x0050,0x0070,0x0050},  {0x0051,0x0071,0x0051},
293   {0x0052,0x0072,0x0052},  {0x0053,0x0073,0x0053},
294   {0x0054,0x0074,0x0054},  {0x0055,0x0075,0x0055},
295   {0x0056,0x0076,0x0056},  {0x0057,0x0077,0x0057},
296   {0x0058,0x0078,0x0058},  {0x0059,0x0079,0x0059},
297   {0x005A,0x007A,0x005A},  {0x005B,0x005B,0x005B},
298   {0x005C,0x005C,0x005C},  {0x005D,0x005D,0x005D},
299   {0x005E,0x005E,0x005E},  {0x005F,0x005F,0x005F},
300   {0x0060,0x0060,0x0060},  {0x0041,0x0061,0x0041},
301   {0x0042,0x0062,0x0042},  {0x0043,0x0063,0x0043},
302   {0x0044,0x0064,0x0044},  {0x0045,0x0065,0x0045},
303   {0x0046,0x0066,0x0046},  {0x0047,0x0067,0x0047},
304   {0x0048,0x0068,0x0048},  {0x0049,0x0069,0x0049},
305   {0x004A,0x006A,0x004A},  {0x004B,0x006B,0x004B},
306   {0x004C,0x006C,0x004C},  {0x004D,0x006D,0x004D},
307   {0x004E,0x006E,0x004E},  {0x004F,0x006F,0x004F},
308   {0x0050,0x0070,0x0050},  {0x0051,0x0071,0x0051},
309   {0x0052,0x0072,0x0052},  {0x0053,0x0073,0x0053},
310   {0x0054,0x0074,0x0054},  {0x0055,0x0075,0x0055},
311   {0x0056,0x0076,0x0056},  {0x0057,0x0077,0x0057},
312   {0x0058,0x0078,0x0058},  {0x0059,0x0079,0x0059},
313   {0x005A,0x007A,0x005A},  {0x007B,0x007B,0x007B},
314   {0x007C,0x007C,0x007C},  {0x007D,0x007D,0x007D},
315   {0x007E,0x007E,0x007E},  {0x007F,0x007F,0x007F},
316   {0x0080,0x0080,0x0080},  {0x0081,0x0081,0x0081},
317   {0x0082,0x0082,0x0082},  {0x0083,0x0083,0x0083},
318   {0x0084,0x0084,0x0084},  {0x0085,0x0085,0x0085},
319   {0x0086,0x0086,0x0086},  {0x0087,0x0087,0x0087},
320   {0x0088,0x0088,0x0088},  {0x0089,0x0089,0x0089},
321   {0x008A,0x008A,0x008A},  {0x008B,0x008B,0x008B},
322   {0x008C,0x008C,0x008C},  {0x008D,0x008D,0x008D},
323   {0x008E,0x008E,0x008E},  {0x008F,0x008F,0x008F},
324   {0x0090,0x0090,0x0090},  {0x0091,0x0091,0x0091},
325   {0x0092,0x0092,0x0092},  {0x0093,0x0093,0x0093},
326   {0x0094,0x0094,0x0094},  {0x0095,0x0095,0x0095},
327   {0x0096,0x0096,0x0096},  {0x0097,0x0097,0x0097},
328   {0x0098,0x0098,0x0098},  {0x0099,0x0099,0x0099},
329   {0x009A,0x009A,0x009A},  {0x009B,0x009B,0x009B},
330   {0x009C,0x009C,0x009C},  {0x009D,0x009D,0x009D},
331   {0x009E,0x009E,0x009E},  {0x009F,0x009F,0x009F},
332   {0x00A0,0x00A0,0x00A0},  {0x00A1,0x00A1,0x00A1},
333   {0x00A2,0x00A2,0x00A2},  {0x00A3,0x00A3,0x00A3},
334   {0x00A4,0x00A4,0x00A4},  {0x00A5,0x00A5,0x00A5},
335   {0x00A6,0x00A6,0x00A6},  {0x00A7,0x00A7,0x00A7},
336   {0x00A8,0x00A8,0x00A8},  {0x00A9,0x00A9,0x00A9},
337   {0x00AA,0x00AA,0x00AA},  {0x00AB,0x00AB,0x00AB},
338   {0x00AC,0x00AC,0x00AC},  {0x00AD,0x00AD,0x00AD},
339   {0x00AE,0x00AE,0x00AE},  {0x00AF,0x00AF,0x00AF},
340   {0x00B0,0x00B0,0x00B0},  {0x00B1,0x00B1,0x00B1},
341   {0x00B2,0x00B2,0x00B2},  {0x00B3,0x00B3,0x00B3},
342   {0x00B4,0x00B4,0x00B4},  {0x039C,0x00B5,0x039C},
343   {0x00B6,0x00B6,0x00B6},  {0x00B7,0x00B7,0x00B7},
344   {0x00B8,0x00B8,0x00B8},  {0x00B9,0x00B9,0x00B9},
345   {0x00BA,0x00BA,0x00BA},  {0x00BB,0x00BB,0x00BB},
346   {0x00BC,0x00BC,0x00BC},  {0x00BD,0x00BD,0x00BD},
347   {0x00BE,0x00BE,0x00BE},  {0x00BF,0x00BF,0x00BF},
348   {0x00C0,0x00E0,0x0041},  {0x00C1,0x00E1,0x0041},
349   {0x00C2,0x00E2,0x0041},  {0x00C3,0x00E3,0x0041},
350   {0x00C4,0x00E4,0x0041},  {0x00C5,0x00E5,0x0041},
351   {0x00C6,0x00E6,0x00C6},  {0x00C7,0x00E7,0x0043},
352   {0x00C8,0x00E8,0x0045},  {0x00C9,0x00E9,0x0045},
353   {0x00CA,0x00EA,0x0045},  {0x00CB,0x00EB,0x0045},
354   {0x00CC,0x00EC,0x0049},  {0x00CD,0x00ED,0x0049},
355   {0x00CE,0x00EE,0x0049},  {0x00CF,0x00EF,0x0049},
356   {0x00D0,0x00F0,0x00D0},  {0x00D1,0x00F1,0x004E},
357   {0x00D2,0x00F2,0x004F},  {0x00D3,0x00F3,0x004F},
358   {0x00D4,0x00F4,0x004F},  {0x00D5,0x00F5,0x004F},
359   {0x00D6,0x00F6,0x004F},  {0x00D7,0x00D7,0x00D7},
360   {0x00D8,0x00F8,0x00D8},  {0x00D9,0x00F9,0x0055},
361   {0x00DA,0x00FA,0x0055},  {0x00DB,0x00FB,0x0055},
362   {0x00DC,0x00FC,0x0055},  {0x00DD,0x00FD,0x0059},
363   {0x00DE,0x00FE,0x00DE},  {0x00DF,0x00DF,0x00DF},
364   {0x00C0,0x00E0,0x0041},  {0x00C1,0x00E1,0x0041},
365   {0x00C2,0x00E2,0x0041},  {0x00C3,0x00E3,0x0041},
366   {0x00C4,0x00E4,0x0041},  {0x00C5,0x00E5,0x0041},
367   {0x00C6,0x00E6,0x00C6},  {0x00C7,0x00E7,0x0043},
368   {0x00C8,0x00E8,0x0045},  {0x00C9,0x00E9,0x0045},
369   {0x00CA,0x00EA,0x0045},  {0x00CB,0x00EB,0x0045},
370   {0x00CC,0x00EC,0x0049},  {0x00CD,0x00ED,0x0049},
371   {0x00CE,0x00EE,0x0049},  {0x00CF,0x00EF,0x0049},
372   {0x00D0,0x00F0,0x00D0},  {0x00D1,0x00F1,0x004E},
373   {0x00D2,0x00F2,0x004F},  {0x00D3,0x00F3,0x004F},
374   {0x00D4,0x00F4,0x004F},  {0x00D5,0x00F5,0x004F},
375   {0x00D6,0x00F6,0x004F},  {0x00F7,0x00F7,0x00F7},
376   {0x00D8,0x00F8,0x00D8},  {0x00D9,0x00F9,0x0055},
377   {0x00DA,0x00FA,0x0055},  {0x00DB,0x00FB,0x0055},
378   {0x00DC,0x00FC,0x0055},  {0x00DD,0x00FD,0x0059},
379   {0x00DE,0x00FE,0x00DE},  {0x0178,0x00FF,0x0059}
380 };
381 
382 
383 static MY_UNICASE_CHARACTER plane01[]={
384   {0x0100,0x0101,0x0041},  {0x0100,0x0101,0x0041},
385   {0x0102,0x0103,0x0041},  {0x0102,0x0103,0x0041},
386   {0x0104,0x0105,0x0041},  {0x0104,0x0105,0x0041},
387   {0x0106,0x0107,0x0043},  {0x0106,0x0107,0x0043},
388   {0x0108,0x0109,0x0043},  {0x0108,0x0109,0x0043},
389   {0x010A,0x010B,0x0043},  {0x010A,0x010B,0x0043},
390   {0x010C,0x010D,0x0043},  {0x010C,0x010D,0x0043},
391   {0x010E,0x010F,0x0044},  {0x010E,0x010F,0x0044},
392   {0x0110,0x0111,0x0110},  {0x0110,0x0111,0x0110},
393   {0x0112,0x0113,0x0045},  {0x0112,0x0113,0x0045},
394   {0x0114,0x0115,0x0045},  {0x0114,0x0115,0x0045},
395   {0x0116,0x0117,0x0045},  {0x0116,0x0117,0x0045},
396   {0x0118,0x0119,0x0045},  {0x0118,0x0119,0x0045},
397   {0x011A,0x011B,0x0045},  {0x011A,0x011B,0x0045},
398   {0x011C,0x011D,0x0047},  {0x011C,0x011D,0x0047},
399   {0x011E,0x011F,0x0047},  {0x011E,0x011F,0x0047},
400   {0x0120,0x0121,0x0047},  {0x0120,0x0121,0x0047},
401   {0x0122,0x0123,0x0047},  {0x0122,0x0123,0x0047},
402   {0x0124,0x0125,0x0048},  {0x0124,0x0125,0x0048},
403   {0x0126,0x0127,0x0126},  {0x0126,0x0127,0x0126},
404   {0x0128,0x0129,0x0049},  {0x0128,0x0129,0x0049},
405   {0x012A,0x012B,0x0049},  {0x012A,0x012B,0x0049},
406   {0x012C,0x012D,0x0049},  {0x012C,0x012D,0x0049},
407   {0x012E,0x012F,0x0049},  {0x012E,0x012F,0x0049},
408   {0x0130,0x0069,0x0049},  {0x0049,0x0131,0x0049},
409   {0x0132,0x0133,0x0132},  {0x0132,0x0133,0x0132},
410   {0x0134,0x0135,0x004A},  {0x0134,0x0135,0x004A},
411   {0x0136,0x0137,0x004B},  {0x0136,0x0137,0x004B},
412   {0x0138,0x0138,0x0138},  {0x0139,0x013A,0x004C},
413   {0x0139,0x013A,0x004C},  {0x013B,0x013C,0x004C},
414   {0x013B,0x013C,0x004C},  {0x013D,0x013E,0x004C},
415   {0x013D,0x013E,0x004C},  {0x013F,0x0140,0x013F},
416   {0x013F,0x0140,0x013F},  {0x0141,0x0142,0x0141},
417   {0x0141,0x0142,0x0141},  {0x0143,0x0144,0x004E},
418   {0x0143,0x0144,0x004E},  {0x0145,0x0146,0x004E},
419   {0x0145,0x0146,0x004E},  {0x0147,0x0148,0x004E},
420   {0x0147,0x0148,0x004E},  {0x0149,0x0149,0x0149},
421   {0x014A,0x014B,0x014A},  {0x014A,0x014B,0x014A},
422   {0x014C,0x014D,0x004F},  {0x014C,0x014D,0x004F},
423   {0x014E,0x014F,0x004F},  {0x014E,0x014F,0x004F},
424   {0x0150,0x0151,0x004F},  {0x0150,0x0151,0x004F},
425   {0x0152,0x0153,0x0152},  {0x0152,0x0153,0x0152},
426   {0x0154,0x0155,0x0052},  {0x0154,0x0155,0x0052},
427   {0x0156,0x0157,0x0052},  {0x0156,0x0157,0x0052},
428   {0x0158,0x0159,0x0052},  {0x0158,0x0159,0x0052},
429   {0x015A,0x015B,0x0053},  {0x015A,0x015B,0x0053},
430   {0x015C,0x015D,0x0053},  {0x015C,0x015D,0x0053},
431   {0x015E,0x015F,0x0053},  {0x015E,0x015F,0x0053},
432   {0x0160,0x0161,0x0053},  {0x0160,0x0161,0x0053},
433   {0x0162,0x0163,0x0054},  {0x0162,0x0163,0x0054},
434   {0x0164,0x0165,0x0054},  {0x0164,0x0165,0x0054},
435   {0x0166,0x0167,0x0166},  {0x0166,0x0167,0x0166},
436   {0x0168,0x0169,0x0055},  {0x0168,0x0169,0x0055},
437   {0x016A,0x016B,0x0055},  {0x016A,0x016B,0x0055},
438   {0x016C,0x016D,0x0055},  {0x016C,0x016D,0x0055},
439   {0x016E,0x016F,0x0055},  {0x016E,0x016F,0x0055},
440   {0x0170,0x0171,0x0055},  {0x0170,0x0171,0x0055},
441   {0x0172,0x0173,0x0055},  {0x0172,0x0173,0x0055},
442   {0x0174,0x0175,0x0057},  {0x0174,0x0175,0x0057},
443   {0x0176,0x0177,0x0059},  {0x0176,0x0177,0x0059},
444   {0x0178,0x00FF,0x0059},  {0x0179,0x017A,0x005A},
445   {0x0179,0x017A,0x005A},  {0x017B,0x017C,0x005A},
446   {0x017B,0x017C,0x005A},  {0x017D,0x017E,0x005A},
447   {0x017D,0x017E,0x005A},  {0x0053,0x017F,0x0053},
448   {0x0180,0x0180,0x0180},  {0x0181,0x0253,0x0181},
449   {0x0182,0x0183,0x0182},  {0x0182,0x0183,0x0182},
450   {0x0184,0x0185,0x0184},  {0x0184,0x0185,0x0184},
451   {0x0186,0x0254,0x0186},  {0x0187,0x0188,0x0187},
452   {0x0187,0x0188,0x0187},  {0x0189,0x0256,0x0189},
453   {0x018A,0x0257,0x018A},  {0x018B,0x018C,0x018B},
454   {0x018B,0x018C,0x018B},  {0x018D,0x018D,0x018D},
455   {0x018E,0x01DD,0x018E},  {0x018F,0x0259,0x018F},
456   {0x0190,0x025B,0x0190},  {0x0191,0x0192,0x0191},
457   {0x0191,0x0192,0x0191},  {0x0193,0x0260,0x0193},
458   {0x0194,0x0263,0x0194},  {0x01F6,0x0195,0x01F6},
459   {0x0196,0x0269,0x0196},  {0x0197,0x0268,0x0197},
460   {0x0198,0x0199,0x0198},  {0x0198,0x0199,0x0198},
461   {0x019A,0x019A,0x019A},  {0x019B,0x019B,0x019B},
462   {0x019C,0x026F,0x019C},  {0x019D,0x0272,0x019D},
463   {0x019E,0x019E,0x019E},  {0x019F,0x0275,0x019F},
464   {0x01A0,0x01A1,0x004F},  {0x01A0,0x01A1,0x004F},
465   {0x01A2,0x01A3,0x01A2},  {0x01A2,0x01A3,0x01A2},
466   {0x01A4,0x01A5,0x01A4},  {0x01A4,0x01A5,0x01A4},
467   {0x01A6,0x0280,0x01A6},  {0x01A7,0x01A8,0x01A7},
468   {0x01A7,0x01A8,0x01A7},  {0x01A9,0x0283,0x01A9},
469   {0x01AA,0x01AA,0x01AA},  {0x01AB,0x01AB,0x01AB},
470   {0x01AC,0x01AD,0x01AC},  {0x01AC,0x01AD,0x01AC},
471   {0x01AE,0x0288,0x01AE},  {0x01AF,0x01B0,0x0055},
472   {0x01AF,0x01B0,0x0055},  {0x01B1,0x028A,0x01B1},
473   {0x01B2,0x028B,0x01B2},  {0x01B3,0x01B4,0x01B3},
474   {0x01B3,0x01B4,0x01B3},  {0x01B5,0x01B6,0x01B5},
475   {0x01B5,0x01B6,0x01B5},  {0x01B7,0x0292,0x01B7},
476   {0x01B8,0x01B9,0x01B8},  {0x01B8,0x01B9,0x01B8},
477   {0x01BA,0x01BA,0x01BA},  {0x01BB,0x01BB,0x01BB},
478   {0x01BC,0x01BD,0x01BC},  {0x01BC,0x01BD,0x01BC},
479   {0x01BE,0x01BE,0x01BE},  {0x01F7,0x01BF,0x01F7},
480   {0x01C0,0x01C0,0x01C0},  {0x01C1,0x01C1,0x01C1},
481   {0x01C2,0x01C2,0x01C2},  {0x01C3,0x01C3,0x01C3},
482   {0x01C4,0x01C6,0x01C4},  {0x01C4,0x01C6,0x01C4},
483   {0x01C4,0x01C6,0x01C4},  {0x01C7,0x01C9,0x01C7},
484   {0x01C7,0x01C9,0x01C7},  {0x01C7,0x01C9,0x01C7},
485   {0x01CA,0x01CC,0x01CA},  {0x01CA,0x01CC,0x01CA},
486   {0x01CA,0x01CC,0x01CA},  {0x01CD,0x01CE,0x0041},
487   {0x01CD,0x01CE,0x0041},  {0x01CF,0x01D0,0x0049},
488   {0x01CF,0x01D0,0x0049},  {0x01D1,0x01D2,0x004F},
489   {0x01D1,0x01D2,0x004F},  {0x01D3,0x01D4,0x0055},
490   {0x01D3,0x01D4,0x0055},  {0x01D5,0x01D6,0x0055},
491   {0x01D5,0x01D6,0x0055},  {0x01D7,0x01D8,0x0055},
492   {0x01D7,0x01D8,0x0055},  {0x01D9,0x01DA,0x0055},
493   {0x01D9,0x01DA,0x0055},  {0x01DB,0x01DC,0x0055},
494   {0x01DB,0x01DC,0x0055},  {0x018E,0x01DD,0x018E},
495   {0x01DE,0x01DF,0x0041},  {0x01DE,0x01DF,0x0041},
496   {0x01E0,0x01E1,0x0041},  {0x01E0,0x01E1,0x0041},
497   {0x01E2,0x01E3,0x00C6},  {0x01E2,0x01E3,0x00C6},
498   {0x01E4,0x01E5,0x01E4},  {0x01E4,0x01E5,0x01E4},
499   {0x01E6,0x01E7,0x0047},  {0x01E6,0x01E7,0x0047},
500   {0x01E8,0x01E9,0x004B},  {0x01E8,0x01E9,0x004B},
501   {0x01EA,0x01EB,0x004F},  {0x01EA,0x01EB,0x004F},
502   {0x01EC,0x01ED,0x004F},  {0x01EC,0x01ED,0x004F},
503   {0x01EE,0x01EF,0x01B7},  {0x01EE,0x01EF,0x01B7},
504   {0x01F0,0x01F0,0x004A},  {0x01F1,0x01F3,0x01F1},
505   {0x01F1,0x01F3,0x01F1},  {0x01F1,0x01F3,0x01F1},
506   {0x01F4,0x01F5,0x0047},  {0x01F4,0x01F5,0x0047},
507   {0x01F6,0x0195,0x01F6},  {0x01F7,0x01BF,0x01F7},
508   {0x01F8,0x01F9,0x004E},  {0x01F8,0x01F9,0x004E},
509   {0x01FA,0x01FB,0x0041},  {0x01FA,0x01FB,0x0041},
510   {0x01FC,0x01FD,0x00C6},  {0x01FC,0x01FD,0x00C6},
511   {0x01FE,0x01FF,0x00D8},  {0x01FE,0x01FF,0x00D8}
512 };
513 
514 static MY_UNICASE_CHARACTER plane02[]={
515   {0x0200,0x0201,0x0041},  {0x0200,0x0201,0x0041},
516   {0x0202,0x0203,0x0041},  {0x0202,0x0203,0x0041},
517   {0x0204,0x0205,0x0045},  {0x0204,0x0205,0x0045},
518   {0x0206,0x0207,0x0045},  {0x0206,0x0207,0x0045},
519   {0x0208,0x0209,0x0049},  {0x0208,0x0209,0x0049},
520   {0x020A,0x020B,0x0049},  {0x020A,0x020B,0x0049},
521   {0x020C,0x020D,0x004F},  {0x020C,0x020D,0x004F},
522   {0x020E,0x020F,0x004F},  {0x020E,0x020F,0x004F},
523   {0x0210,0x0211,0x0052},  {0x0210,0x0211,0x0052},
524   {0x0212,0x0213,0x0052},  {0x0212,0x0213,0x0052},
525   {0x0214,0x0215,0x0055},  {0x0214,0x0215,0x0055},
526   {0x0216,0x0217,0x0055},  {0x0216,0x0217,0x0055},
527   {0x0218,0x0219,0x0053},  {0x0218,0x0219,0x0053},
528   {0x021A,0x021B,0x0054},  {0x021A,0x021B,0x0054},
529   {0x021C,0x021D,0x021C},  {0x021C,0x021D,0x021C},
530   {0x021E,0x021F,0x0048},  {0x021E,0x021F,0x0048},
531   {0x0220,0x0220,0x0220},  {0x0221,0x0221,0x0221},
532   {0x0222,0x0223,0x0222},  {0x0222,0x0223,0x0222},
533   {0x0224,0x0225,0x0224},  {0x0224,0x0225,0x0224},
534   {0x0226,0x0227,0x0041},  {0x0226,0x0227,0x0041},
535   {0x0228,0x0229,0x0045},  {0x0228,0x0229,0x0045},
536   {0x022A,0x022B,0x004F},  {0x022A,0x022B,0x004F},
537   {0x022C,0x022D,0x004F},  {0x022C,0x022D,0x004F},
538   {0x022E,0x022F,0x004F},  {0x022E,0x022F,0x004F},
539   {0x0230,0x0231,0x004F},  {0x0230,0x0231,0x004F},
540   {0x0232,0x0233,0x0059},  {0x0232,0x0233,0x0059},
541   {0x0234,0x0234,0x0234},  {0x0235,0x0235,0x0235},
542   {0x0236,0x0236,0x0236},  {0x0237,0x0237,0x0237},
543   {0x0238,0x0238,0x0238},  {0x0239,0x0239,0x0239},
544   {0x023A,0x023A,0x023A},  {0x023B,0x023B,0x023B},
545   {0x023C,0x023C,0x023C},  {0x023D,0x023D,0x023D},
546   {0x023E,0x023E,0x023E},  {0x023F,0x023F,0x023F},
547   {0x0240,0x0240,0x0240},  {0x0241,0x0241,0x0241},
548   {0x0242,0x0242,0x0242},  {0x0243,0x0243,0x0243},
549   {0x0244,0x0244,0x0244},  {0x0245,0x0245,0x0245},
550   {0x0246,0x0246,0x0246},  {0x0247,0x0247,0x0247},
551   {0x0248,0x0248,0x0248},  {0x0249,0x0249,0x0249},
552   {0x024A,0x024A,0x024A},  {0x024B,0x024B,0x024B},
553   {0x024C,0x024C,0x024C},  {0x024D,0x024D,0x024D},
554   {0x024E,0x024E,0x024E},  {0x024F,0x024F,0x024F},
555   {0x0250,0x0250,0x0250},  {0x0251,0x0251,0x0251},
556   {0x0252,0x0252,0x0252},  {0x0181,0x0253,0x0181},
557   {0x0186,0x0254,0x0186},  {0x0255,0x0255,0x0255},
558   {0x0189,0x0256,0x0189},  {0x018A,0x0257,0x018A},
559   {0x0258,0x0258,0x0258},  {0x018F,0x0259,0x018F},
560   {0x025A,0x025A,0x025A},  {0x0190,0x025B,0x0190},
561   {0x025C,0x025C,0x025C},  {0x025D,0x025D,0x025D},
562   {0x025E,0x025E,0x025E},  {0x025F,0x025F,0x025F},
563   {0x0193,0x0260,0x0193},  {0x0261,0x0261,0x0261},
564   {0x0262,0x0262,0x0262},  {0x0194,0x0263,0x0194},
565   {0x0264,0x0264,0x0264},  {0x0265,0x0265,0x0265},
566   {0x0266,0x0266,0x0266},  {0x0267,0x0267,0x0267},
567   {0x0197,0x0268,0x0197},  {0x0196,0x0269,0x0196},
568   {0x026A,0x026A,0x026A},  {0x026B,0x026B,0x026B},
569   {0x026C,0x026C,0x026C},  {0x026D,0x026D,0x026D},
570   {0x026E,0x026E,0x026E},  {0x019C,0x026F,0x019C},
571   {0x0270,0x0270,0x0270},  {0x0271,0x0271,0x0271},
572   {0x019D,0x0272,0x019D},  {0x0273,0x0273,0x0273},
573   {0x0274,0x0274,0x0274},  {0x019F,0x0275,0x019F},
574   {0x0276,0x0276,0x0276},  {0x0277,0x0277,0x0277},
575   {0x0278,0x0278,0x0278},  {0x0279,0x0279,0x0279},
576   {0x027A,0x027A,0x027A},  {0x027B,0x027B,0x027B},
577   {0x027C,0x027C,0x027C},  {0x027D,0x027D,0x027D},
578   {0x027E,0x027E,0x027E},  {0x027F,0x027F,0x027F},
579   {0x01A6,0x0280,0x01A6},  {0x0281,0x0281,0x0281},
580   {0x0282,0x0282,0x0282},  {0x01A9,0x0283,0x01A9},
581   {0x0284,0x0284,0x0284},  {0x0285,0x0285,0x0285},
582   {0x0286,0x0286,0x0286},  {0x0287,0x0287,0x0287},
583   {0x01AE,0x0288,0x01AE},  {0x0289,0x0289,0x0289},
584   {0x01B1,0x028A,0x01B1},  {0x01B2,0x028B,0x01B2},
585   {0x028C,0x028C,0x028C},  {0x028D,0x028D,0x028D},
586   {0x028E,0x028E,0x028E},  {0x028F,0x028F,0x028F},
587   {0x0290,0x0290,0x0290},  {0x0291,0x0291,0x0291},
588   {0x01B7,0x0292,0x01B7},  {0x0293,0x0293,0x0293},
589   {0x0294,0x0294,0x0294},  {0x0295,0x0295,0x0295},
590   {0x0296,0x0296,0x0296},  {0x0297,0x0297,0x0297},
591   {0x0298,0x0298,0x0298},  {0x0299,0x0299,0x0299},
592   {0x029A,0x029A,0x029A},  {0x029B,0x029B,0x029B},
593   {0x029C,0x029C,0x029C},  {0x029D,0x029D,0x029D},
594   {0x029E,0x029E,0x029E},  {0x029F,0x029F,0x029F},
595   {0x02A0,0x02A0,0x02A0},  {0x02A1,0x02A1,0x02A1},
596   {0x02A2,0x02A2,0x02A2},  {0x02A3,0x02A3,0x02A3},
597   {0x02A4,0x02A4,0x02A4},  {0x02A5,0x02A5,0x02A5},
598   {0x02A6,0x02A6,0x02A6},  {0x02A7,0x02A7,0x02A7},
599   {0x02A8,0x02A8,0x02A8},  {0x02A9,0x02A9,0x02A9},
600   {0x02AA,0x02AA,0x02AA},  {0x02AB,0x02AB,0x02AB},
601   {0x02AC,0x02AC,0x02AC},  {0x02AD,0x02AD,0x02AD},
602   {0x02AE,0x02AE,0x02AE},  {0x02AF,0x02AF,0x02AF},
603   {0x02B0,0x02B0,0x02B0},  {0x02B1,0x02B1,0x02B1},
604   {0x02B2,0x02B2,0x02B2},  {0x02B3,0x02B3,0x02B3},
605   {0x02B4,0x02B4,0x02B4},  {0x02B5,0x02B5,0x02B5},
606   {0x02B6,0x02B6,0x02B6},  {0x02B7,0x02B7,0x02B7},
607   {0x02B8,0x02B8,0x02B8},  {0x02B9,0x02B9,0x02B9},
608   {0x02BA,0x02BA,0x02BA},  {0x02BB,0x02BB,0x02BB},
609   {0x02BC,0x02BC,0x02BC},  {0x02BD,0x02BD,0x02BD},
610   {0x02BE,0x02BE,0x02BE},  {0x02BF,0x02BF,0x02BF},
611   {0x02C0,0x02C0,0x02C0},  {0x02C1,0x02C1,0x02C1},
612   {0x02C2,0x02C2,0x02C2},  {0x02C3,0x02C3,0x02C3},
613   {0x02C4,0x02C4,0x02C4},  {0x02C5,0x02C5,0x02C5},
614   {0x02C6,0x02C6,0x02C6},  {0x02C7,0x02C7,0x02C7},
615   {0x02C8,0x02C8,0x02C8},  {0x02C9,0x02C9,0x02C9},
616   {0x02CA,0x02CA,0x02CA},  {0x02CB,0x02CB,0x02CB},
617   {0x02CC,0x02CC,0x02CC},  {0x02CD,0x02CD,0x02CD},
618   {0x02CE,0x02CE,0x02CE},  {0x02CF,0x02CF,0x02CF},
619   {0x02D0,0x02D0,0x02D0},  {0x02D1,0x02D1,0x02D1},
620   {0x02D2,0x02D2,0x02D2},  {0x02D3,0x02D3,0x02D3},
621   {0x02D4,0x02D4,0x02D4},  {0x02D5,0x02D5,0x02D5},
622   {0x02D6,0x02D6,0x02D6},  {0x02D7,0x02D7,0x02D7},
623   {0x02D8,0x02D8,0x02D8},  {0x02D9,0x02D9,0x02D9},
624   {0x02DA,0x02DA,0x02DA},  {0x02DB,0x02DB,0x02DB},
625   {0x02DC,0x02DC,0x02DC},  {0x02DD,0x02DD,0x02DD},
626   {0x02DE,0x02DE,0x02DE},  {0x02DF,0x02DF,0x02DF},
627   {0x02E0,0x02E0,0x02E0},  {0x02E1,0x02E1,0x02E1},
628   {0x02E2,0x02E2,0x02E2},  {0x02E3,0x02E3,0x02E3},
629   {0x02E4,0x02E4,0x02E4},  {0x02E5,0x02E5,0x02E5},
630   {0x02E6,0x02E6,0x02E6},  {0x02E7,0x02E7,0x02E7},
631   {0x02E8,0x02E8,0x02E8},  {0x02E9,0x02E9,0x02E9},
632   {0x02EA,0x02EA,0x02EA},  {0x02EB,0x02EB,0x02EB},
633   {0x02EC,0x02EC,0x02EC},  {0x02ED,0x02ED,0x02ED},
634   {0x02EE,0x02EE,0x02EE},  {0x02EF,0x02EF,0x02EF},
635   {0x02F0,0x02F0,0x02F0},  {0x02F1,0x02F1,0x02F1},
636   {0x02F2,0x02F2,0x02F2},  {0x02F3,0x02F3,0x02F3},
637   {0x02F4,0x02F4,0x02F4},  {0x02F5,0x02F5,0x02F5},
638   {0x02F6,0x02F6,0x02F6},  {0x02F7,0x02F7,0x02F7},
639   {0x02F8,0x02F8,0x02F8},  {0x02F9,0x02F9,0x02F9},
640   {0x02FA,0x02FA,0x02FA},  {0x02FB,0x02FB,0x02FB},
641   {0x02FC,0x02FC,0x02FC},  {0x02FD,0x02FD,0x02FD},
642   {0x02FE,0x02FE,0x02FE},  {0x02FF,0x02FF,0x02FF}
643 };
644 
645 static MY_UNICASE_CHARACTER plane03[]={
646   {0x0300,0x0300,0x0300},  {0x0301,0x0301,0x0301},
647   {0x0302,0x0302,0x0302},  {0x0303,0x0303,0x0303},
648   {0x0304,0x0304,0x0304},  {0x0305,0x0305,0x0305},
649   {0x0306,0x0306,0x0306},  {0x0307,0x0307,0x0307},
650   {0x0308,0x0308,0x0308},  {0x0309,0x0309,0x0309},
651   {0x030A,0x030A,0x030A},  {0x030B,0x030B,0x030B},
652   {0x030C,0x030C,0x030C},  {0x030D,0x030D,0x030D},
653   {0x030E,0x030E,0x030E},  {0x030F,0x030F,0x030F},
654   {0x0310,0x0310,0x0310},  {0x0311,0x0311,0x0311},
655   {0x0312,0x0312,0x0312},  {0x0313,0x0313,0x0313},
656   {0x0314,0x0314,0x0314},  {0x0315,0x0315,0x0315},
657   {0x0316,0x0316,0x0316},  {0x0317,0x0317,0x0317},
658   {0x0318,0x0318,0x0318},  {0x0319,0x0319,0x0319},
659   {0x031A,0x031A,0x031A},  {0x031B,0x031B,0x031B},
660   {0x031C,0x031C,0x031C},  {0x031D,0x031D,0x031D},
661   {0x031E,0x031E,0x031E},  {0x031F,0x031F,0x031F},
662   {0x0320,0x0320,0x0320},  {0x0321,0x0321,0x0321},
663   {0x0322,0x0322,0x0322},  {0x0323,0x0323,0x0323},
664   {0x0324,0x0324,0x0324},  {0x0325,0x0325,0x0325},
665   {0x0326,0x0326,0x0326},  {0x0327,0x0327,0x0327},
666   {0x0328,0x0328,0x0328},  {0x0329,0x0329,0x0329},
667   {0x032A,0x032A,0x032A},  {0x032B,0x032B,0x032B},
668   {0x032C,0x032C,0x032C},  {0x032D,0x032D,0x032D},
669   {0x032E,0x032E,0x032E},  {0x032F,0x032F,0x032F},
670   {0x0330,0x0330,0x0330},  {0x0331,0x0331,0x0331},
671   {0x0332,0x0332,0x0332},  {0x0333,0x0333,0x0333},
672   {0x0334,0x0334,0x0334},  {0x0335,0x0335,0x0335},
673   {0x0336,0x0336,0x0336},  {0x0337,0x0337,0x0337},
674   {0x0338,0x0338,0x0338},  {0x0339,0x0339,0x0339},
675   {0x033A,0x033A,0x033A},  {0x033B,0x033B,0x033B},
676   {0x033C,0x033C,0x033C},  {0x033D,0x033D,0x033D},
677   {0x033E,0x033E,0x033E},  {0x033F,0x033F,0x033F},
678   {0x0340,0x0340,0x0340},  {0x0341,0x0341,0x0341},
679   {0x0342,0x0342,0x0342},  {0x0343,0x0343,0x0343},
680   {0x0344,0x0344,0x0344},  {0x0399,0x0345,0x0399},
681   {0x0346,0x0346,0x0346},  {0x0347,0x0347,0x0347},
682   {0x0348,0x0348,0x0348},  {0x0349,0x0349,0x0349},
683   {0x034A,0x034A,0x034A},  {0x034B,0x034B,0x034B},
684   {0x034C,0x034C,0x034C},  {0x034D,0x034D,0x034D},
685   {0x034E,0x034E,0x034E},  {0x034F,0x034F,0x034F},
686   {0x0350,0x0350,0x0350},  {0x0351,0x0351,0x0351},
687   {0x0352,0x0352,0x0352},  {0x0353,0x0353,0x0353},
688   {0x0354,0x0354,0x0354},  {0x0355,0x0355,0x0355},
689   {0x0356,0x0356,0x0356},  {0x0357,0x0357,0x0357},
690   {0x0358,0x0358,0x0358},  {0x0359,0x0359,0x0359},
691   {0x035A,0x035A,0x035A},  {0x035B,0x035B,0x035B},
692   {0x035C,0x035C,0x035C},  {0x035D,0x035D,0x035D},
693   {0x035E,0x035E,0x035E},  {0x035F,0x035F,0x035F},
694   {0x0360,0x0360,0x0360},  {0x0361,0x0361,0x0361},
695   {0x0362,0x0362,0x0362},  {0x0363,0x0363,0x0363},
696   {0x0364,0x0364,0x0364},  {0x0365,0x0365,0x0365},
697   {0x0366,0x0366,0x0366},  {0x0367,0x0367,0x0367},
698   {0x0368,0x0368,0x0368},  {0x0369,0x0369,0x0369},
699   {0x036A,0x036A,0x036A},  {0x036B,0x036B,0x036B},
700   {0x036C,0x036C,0x036C},  {0x036D,0x036D,0x036D},
701   {0x036E,0x036E,0x036E},  {0x036F,0x036F,0x036F},
702   {0x0370,0x0370,0x0370},  {0x0371,0x0371,0x0371},
703   {0x0372,0x0372,0x0372},  {0x0373,0x0373,0x0373},
704   {0x0374,0x0374,0x0374},  {0x0375,0x0375,0x0375},
705   {0x0376,0x0376,0x0376},  {0x0377,0x0377,0x0377},
706   {0x0378,0x0378,0x0378},  {0x0379,0x0379,0x0379},
707   {0x037A,0x037A,0x037A},  {0x037B,0x037B,0x037B},
708   {0x037C,0x037C,0x037C},  {0x037D,0x037D,0x037D},
709   {0x037E,0x037E,0x037E},  {0x037F,0x037F,0x037F},
710   {0x0380,0x0380,0x0380},  {0x0381,0x0381,0x0381},
711   {0x0382,0x0382,0x0382},  {0x0383,0x0383,0x0383},
712   {0x0384,0x0384,0x0384},  {0x0385,0x0385,0x0385},
713   {0x0386,0x03AC,0x0391},  {0x0387,0x0387,0x0387},
714   {0x0388,0x03AD,0x0395},  {0x0389,0x03AE,0x0397},
715   {0x038A,0x03AF,0x0399},  {0x038B,0x038B,0x038B},
716   {0x038C,0x03CC,0x039F},  {0x038D,0x038D,0x038D},
717   {0x038E,0x03CD,0x03A5},  {0x038F,0x03CE,0x03A9},
718   {0x0390,0x0390,0x0399},  {0x0391,0x03B1,0x0391},
719   {0x0392,0x03B2,0x0392},  {0x0393,0x03B3,0x0393},
720   {0x0394,0x03B4,0x0394},  {0x0395,0x03B5,0x0395},
721   {0x0396,0x03B6,0x0396},  {0x0397,0x03B7,0x0397},
722   {0x0398,0x03B8,0x0398},  {0x0399,0x03B9,0x0399},
723   {0x039A,0x03BA,0x039A},  {0x039B,0x03BB,0x039B},
724   {0x039C,0x03BC,0x039C},  {0x039D,0x03BD,0x039D},
725   {0x039E,0x03BE,0x039E},  {0x039F,0x03BF,0x039F},
726   {0x03A0,0x03C0,0x03A0},  {0x03A1,0x03C1,0x03A1},
727   {0x03A2,0x03A2,0x03A2},  {0x03A3,0x03C3,0x03A3},
728   {0x03A4,0x03C4,0x03A4},  {0x03A5,0x03C5,0x03A5},
729   {0x03A6,0x03C6,0x03A6},  {0x03A7,0x03C7,0x03A7},
730   {0x03A8,0x03C8,0x03A8},  {0x03A9,0x03C9,0x03A9},
731   {0x03AA,0x03CA,0x0399},  {0x03AB,0x03CB,0x03A5},
732   {0x0386,0x03AC,0x0391},  {0x0388,0x03AD,0x0395},
733   {0x0389,0x03AE,0x0397},  {0x038A,0x03AF,0x0399},
734   {0x03B0,0x03B0,0x03A5},  {0x0391,0x03B1,0x0391},
735   {0x0392,0x03B2,0x0392},  {0x0393,0x03B3,0x0393},
736   {0x0394,0x03B4,0x0394},  {0x0395,0x03B5,0x0395},
737   {0x0396,0x03B6,0x0396},  {0x0397,0x03B7,0x0397},
738   {0x0398,0x03B8,0x0398},  {0x0399,0x03B9,0x0399},
739   {0x039A,0x03BA,0x039A},  {0x039B,0x03BB,0x039B},
740   {0x039C,0x03BC,0x039C},  {0x039D,0x03BD,0x039D},
741   {0x039E,0x03BE,0x039E},  {0x039F,0x03BF,0x039F},
742   {0x03A0,0x03C0,0x03A0},  {0x03A1,0x03C1,0x03A1},
743   {0x03A3,0x03C2,0x03A3},  {0x03A3,0x03C3,0x03A3},
744   {0x03A4,0x03C4,0x03A4},  {0x03A5,0x03C5,0x03A5},
745   {0x03A6,0x03C6,0x03A6},  {0x03A7,0x03C7,0x03A7},
746   {0x03A8,0x03C8,0x03A8},  {0x03A9,0x03C9,0x03A9},
747   {0x03AA,0x03CA,0x0399},  {0x03AB,0x03CB,0x03A5},
748   {0x038C,0x03CC,0x039F},  {0x038E,0x03CD,0x03A5},
749   {0x038F,0x03CE,0x03A9},  {0x03CF,0x03CF,0x03CF},
750   {0x0392,0x03D0,0x0392},  {0x0398,0x03D1,0x0398},
751   {0x03D2,0x03D2,0x03D2},  {0x03D3,0x03D3,0x03D2},
752   {0x03D4,0x03D4,0x03D2},  {0x03A6,0x03D5,0x03A6},
753   {0x03A0,0x03D6,0x03A0},  {0x03D7,0x03D7,0x03D7},
754   {0x03D8,0x03D8,0x03D8},  {0x03D9,0x03D9,0x03D9},
755   {0x03DA,0x03DB,0x03DA},  {0x03DA,0x03DB,0x03DA},
756   {0x03DC,0x03DD,0x03DC},  {0x03DC,0x03DD,0x03DC},
757   {0x03DE,0x03DF,0x03DE},  {0x03DE,0x03DF,0x03DE},
758   {0x03E0,0x03E1,0x03E0},  {0x03E0,0x03E1,0x03E0},
759   {0x03E2,0x03E3,0x03E2},  {0x03E2,0x03E3,0x03E2},
760   {0x03E4,0x03E5,0x03E4},  {0x03E4,0x03E5,0x03E4},
761   {0x03E6,0x03E7,0x03E6},  {0x03E6,0x03E7,0x03E6},
762   {0x03E8,0x03E9,0x03E8},  {0x03E8,0x03E9,0x03E8},
763   {0x03EA,0x03EB,0x03EA},  {0x03EA,0x03EB,0x03EA},
764   {0x03EC,0x03ED,0x03EC},  {0x03EC,0x03ED,0x03EC},
765   {0x03EE,0x03EF,0x03EE},  {0x03EE,0x03EF,0x03EE},
766   {0x039A,0x03F0,0x039A},  {0x03A1,0x03F1,0x03A1},
767   {0x03A3,0x03F2,0x03A3},  {0x03F3,0x03F3,0x03F3},
768   {0x03F4,0x03F4,0x03F4},  {0x03F5,0x03F5,0x03F5},
769   {0x03F6,0x03F6,0x03F6},  {0x03F7,0x03F7,0x03F7},
770   {0x03F8,0x03F8,0x03F8},  {0x03F9,0x03F9,0x03F9},
771   {0x03FA,0x03FA,0x03FA},  {0x03FB,0x03FB,0x03FB},
772   {0x03FC,0x03FC,0x03FC},  {0x03FD,0x03FD,0x03FD},
773   {0x03FE,0x03FE,0x03FE},  {0x03FF,0x03FF,0x03FF}
774 };
775 
776 static MY_UNICASE_CHARACTER plane04[]={
777   {0x0400,0x0450,0x0415},  {0x0401,0x0451,0x0415},
778   {0x0402,0x0452,0x0402},  {0x0403,0x0453,0x0413},
779   {0x0404,0x0454,0x0404},  {0x0405,0x0455,0x0405},
780   {0x0406,0x0456,0x0406},  {0x0407,0x0457,0x0406},
781   {0x0408,0x0458,0x0408},  {0x0409,0x0459,0x0409},
782   {0x040A,0x045A,0x040A},  {0x040B,0x045B,0x040B},
783   {0x040C,0x045C,0x041A},  {0x040D,0x045D,0x0418},
784   {0x040E,0x045E,0x0423},  {0x040F,0x045F,0x040F},
785   {0x0410,0x0430,0x0410},  {0x0411,0x0431,0x0411},
786   {0x0412,0x0432,0x0412},  {0x0413,0x0433,0x0413},
787   {0x0414,0x0434,0x0414},  {0x0415,0x0435,0x0415},
788   {0x0416,0x0436,0x0416},  {0x0417,0x0437,0x0417},
789   {0x0418,0x0438,0x0418},  {0x0419,0x0439,0x0419},
790   {0x041A,0x043A,0x041A},  {0x041B,0x043B,0x041B},
791   {0x041C,0x043C,0x041C},  {0x041D,0x043D,0x041D},
792   {0x041E,0x043E,0x041E},  {0x041F,0x043F,0x041F},
793   {0x0420,0x0440,0x0420},  {0x0421,0x0441,0x0421},
794   {0x0422,0x0442,0x0422},  {0x0423,0x0443,0x0423},
795   {0x0424,0x0444,0x0424},  {0x0425,0x0445,0x0425},
796   {0x0426,0x0446,0x0426},  {0x0427,0x0447,0x0427},
797   {0x0428,0x0448,0x0428},  {0x0429,0x0449,0x0429},
798   {0x042A,0x044A,0x042A},  {0x042B,0x044B,0x042B},
799   {0x042C,0x044C,0x042C},  {0x042D,0x044D,0x042D},
800   {0x042E,0x044E,0x042E},  {0x042F,0x044F,0x042F},
801   {0x0410,0x0430,0x0410},  {0x0411,0x0431,0x0411},
802   {0x0412,0x0432,0x0412},  {0x0413,0x0433,0x0413},
803   {0x0414,0x0434,0x0414},  {0x0415,0x0435,0x0415},
804   {0x0416,0x0436,0x0416},  {0x0417,0x0437,0x0417},
805   {0x0418,0x0438,0x0418},  {0x0419,0x0439,0x0419},
806   {0x041A,0x043A,0x041A},  {0x041B,0x043B,0x041B},
807   {0x041C,0x043C,0x041C},  {0x041D,0x043D,0x041D},
808   {0x041E,0x043E,0x041E},  {0x041F,0x043F,0x041F},
809   {0x0420,0x0440,0x0420},  {0x0421,0x0441,0x0421},
810   {0x0422,0x0442,0x0422},  {0x0423,0x0443,0x0423},
811   {0x0424,0x0444,0x0424},  {0x0425,0x0445,0x0425},
812   {0x0426,0x0446,0x0426},  {0x0427,0x0447,0x0427},
813   {0x0428,0x0448,0x0428},  {0x0429,0x0449,0x0429},
814   {0x042A,0x044A,0x042A},  {0x042B,0x044B,0x042B},
815   {0x042C,0x044C,0x042C},  {0x042D,0x044D,0x042D},
816   {0x042E,0x044E,0x042E},  {0x042F,0x044F,0x042F},
817   {0x0400,0x0450,0x0415},  {0x0401,0x0451,0x0415},
818   {0x0402,0x0452,0x0402},  {0x0403,0x0453,0x0413},
819   {0x0404,0x0454,0x0404},  {0x0405,0x0455,0x0405},
820   {0x0406,0x0456,0x0406},  {0x0407,0x0457,0x0406},
821   {0x0408,0x0458,0x0408},  {0x0409,0x0459,0x0409},
822   {0x040A,0x045A,0x040A},  {0x040B,0x045B,0x040B},
823   {0x040C,0x045C,0x041A},  {0x040D,0x045D,0x0418},
824   {0x040E,0x045E,0x0423},  {0x040F,0x045F,0x040F},
825   {0x0460,0x0461,0x0460},  {0x0460,0x0461,0x0460},
826   {0x0462,0x0463,0x0462},  {0x0462,0x0463,0x0462},
827   {0x0464,0x0465,0x0464},  {0x0464,0x0465,0x0464},
828   {0x0466,0x0467,0x0466},  {0x0466,0x0467,0x0466},
829   {0x0468,0x0469,0x0468},  {0x0468,0x0469,0x0468},
830   {0x046A,0x046B,0x046A},  {0x046A,0x046B,0x046A},
831   {0x046C,0x046D,0x046C},  {0x046C,0x046D,0x046C},
832   {0x046E,0x046F,0x046E},  {0x046E,0x046F,0x046E},
833   {0x0470,0x0471,0x0470},  {0x0470,0x0471,0x0470},
834   {0x0472,0x0473,0x0472},  {0x0472,0x0473,0x0472},
835   {0x0474,0x0475,0x0474},  {0x0474,0x0475,0x0474},
836   {0x0476,0x0477,0x0474},  {0x0476,0x0477,0x0474},
837   {0x0478,0x0479,0x0478},  {0x0478,0x0479,0x0478},
838   {0x047A,0x047B,0x047A},  {0x047A,0x047B,0x047A},
839   {0x047C,0x047D,0x047C},  {0x047C,0x047D,0x047C},
840   {0x047E,0x047F,0x047E},  {0x047E,0x047F,0x047E},
841   {0x0480,0x0481,0x0480},  {0x0480,0x0481,0x0480},
842   {0x0482,0x0482,0x0482},  {0x0483,0x0483,0x0483},
843   {0x0484,0x0484,0x0484},  {0x0485,0x0485,0x0485},
844   {0x0486,0x0486,0x0486},  {0x0487,0x0487,0x0487},
845   {0x0488,0x0488,0x0488},  {0x0489,0x0489,0x0489},
846   {0x048A,0x048A,0x048A},  {0x048B,0x048B,0x048B},
847   {0x048C,0x048D,0x048C},  {0x048C,0x048D,0x048C},
848   {0x048E,0x048F,0x048E},  {0x048E,0x048F,0x048E},
849   {0x0490,0x0491,0x0490},  {0x0490,0x0491,0x0490},
850   {0x0492,0x0493,0x0492},  {0x0492,0x0493,0x0492},
851   {0x0494,0x0495,0x0494},  {0x0494,0x0495,0x0494},
852   {0x0496,0x0497,0x0496},  {0x0496,0x0497,0x0496},
853   {0x0498,0x0499,0x0498},  {0x0498,0x0499,0x0498},
854   {0x049A,0x049B,0x049A},  {0x049A,0x049B,0x049A},
855   {0x049C,0x049D,0x049C},  {0x049C,0x049D,0x049C},
856   {0x049E,0x049F,0x049E},  {0x049E,0x049F,0x049E},
857   {0x04A0,0x04A1,0x04A0},  {0x04A0,0x04A1,0x04A0},
858   {0x04A2,0x04A3,0x04A2},  {0x04A2,0x04A3,0x04A2},
859   {0x04A4,0x04A5,0x04A4},  {0x04A4,0x04A5,0x04A4},
860   {0x04A6,0x04A7,0x04A6},  {0x04A6,0x04A7,0x04A6},
861   {0x04A8,0x04A9,0x04A8},  {0x04A8,0x04A9,0x04A8},
862   {0x04AA,0x04AB,0x04AA},  {0x04AA,0x04AB,0x04AA},
863   {0x04AC,0x04AD,0x04AC},  {0x04AC,0x04AD,0x04AC},
864   {0x04AE,0x04AF,0x04AE},  {0x04AE,0x04AF,0x04AE},
865   {0x04B0,0x04B1,0x04B0},  {0x04B0,0x04B1,0x04B0},
866   {0x04B2,0x04B3,0x04B2},  {0x04B2,0x04B3,0x04B2},
867   {0x04B4,0x04B5,0x04B4},  {0x04B4,0x04B5,0x04B4},
868   {0x04B6,0x04B7,0x04B6},  {0x04B6,0x04B7,0x04B6},
869   {0x04B8,0x04B9,0x04B8},  {0x04B8,0x04B9,0x04B8},
870   {0x04BA,0x04BB,0x04BA},  {0x04BA,0x04BB,0x04BA},
871   {0x04BC,0x04BD,0x04BC},  {0x04BC,0x04BD,0x04BC},
872   {0x04BE,0x04BF,0x04BE},  {0x04BE,0x04BF,0x04BE},
873   {0x04C0,0x04C0,0x04C0},  {0x04C1,0x04C2,0x0416},
874   {0x04C1,0x04C2,0x0416},  {0x04C3,0x04C4,0x04C3},
875   {0x04C3,0x04C4,0x04C3},  {0x04C5,0x04C5,0x04C5},
876   {0x04C6,0x04C6,0x04C6},  {0x04C7,0x04C8,0x04C7},
877   {0x04C7,0x04C8,0x04C7},  {0x04C9,0x04C9,0x04C9},
878   {0x04CA,0x04CA,0x04CA},  {0x04CB,0x04CC,0x04CB},
879   {0x04CB,0x04CC,0x04CB},  {0x04CD,0x04CD,0x04CD},
880   {0x04CE,0x04CE,0x04CE},  {0x04CF,0x04CF,0x04CF},
881   {0x04D0,0x04D1,0x0410},  {0x04D0,0x04D1,0x0410},
882   {0x04D2,0x04D3,0x0410},  {0x04D2,0x04D3,0x0410},
883   {0x04D4,0x04D5,0x04D4},  {0x04D4,0x04D5,0x04D4},
884   {0x04D6,0x04D7,0x0415},  {0x04D6,0x04D7,0x0415},
885   {0x04D8,0x04D9,0x04D8},  {0x04D8,0x04D9,0x04D8},
886   {0x04DA,0x04DB,0x04D8},  {0x04DA,0x04DB,0x04D8},
887   {0x04DC,0x04DD,0x0416},  {0x04DC,0x04DD,0x0416},
888   {0x04DE,0x04DF,0x0417},  {0x04DE,0x04DF,0x0417},
889   {0x04E0,0x04E1,0x04E0},  {0x04E0,0x04E1,0x04E0},
890   {0x04E2,0x04E3,0x0418},  {0x04E2,0x04E3,0x0418},
891   {0x04E4,0x04E5,0x0418},  {0x04E4,0x04E5,0x0418},
892   {0x04E6,0x04E7,0x041E},  {0x04E6,0x04E7,0x041E},
893   {0x04E8,0x04E9,0x04E8},  {0x04E8,0x04E9,0x04E8},
894   {0x04EA,0x04EB,0x04E8},  {0x04EA,0x04EB,0x04E8},
895   {0x04EC,0x04ED,0x042D},  {0x04EC,0x04ED,0x042D},
896   {0x04EE,0x04EF,0x0423},  {0x04EE,0x04EF,0x0423},
897   {0x04F0,0x04F1,0x0423},  {0x04F0,0x04F1,0x0423},
898   {0x04F2,0x04F3,0x0423},  {0x04F2,0x04F3,0x0423},
899   {0x04F4,0x04F5,0x0427},  {0x04F4,0x04F5,0x0427},
900   {0x04F6,0x04F6,0x04F6},  {0x04F7,0x04F7,0x04F7},
901   {0x04F8,0x04F9,0x042B},  {0x04F8,0x04F9,0x042B},
902   {0x04FA,0x04FA,0x04FA},  {0x04FB,0x04FB,0x04FB},
903   {0x04FC,0x04FC,0x04FC},  {0x04FD,0x04FD,0x04FD},
904   {0x04FE,0x04FE,0x04FE},  {0x04FF,0x04FF,0x04FF}
905 };
906 
907 static MY_UNICASE_CHARACTER plane05[]={
908   {0x0500,0x0500,0x0500},  {0x0501,0x0501,0x0501},
909   {0x0502,0x0502,0x0502},  {0x0503,0x0503,0x0503},
910   {0x0504,0x0504,0x0504},  {0x0505,0x0505,0x0505},
911   {0x0506,0x0506,0x0506},  {0x0507,0x0507,0x0507},
912   {0x0508,0x0508,0x0508},  {0x0509,0x0509,0x0509},
913   {0x050A,0x050A,0x050A},  {0x050B,0x050B,0x050B},
914   {0x050C,0x050C,0x050C},  {0x050D,0x050D,0x050D},
915   {0x050E,0x050E,0x050E},  {0x050F,0x050F,0x050F},
916   {0x0510,0x0510,0x0510},  {0x0511,0x0511,0x0511},
917   {0x0512,0x0512,0x0512},  {0x0513,0x0513,0x0513},
918   {0x0514,0x0514,0x0514},  {0x0515,0x0515,0x0515},
919   {0x0516,0x0516,0x0516},  {0x0517,0x0517,0x0517},
920   {0x0518,0x0518,0x0518},  {0x0519,0x0519,0x0519},
921   {0x051A,0x051A,0x051A},  {0x051B,0x051B,0x051B},
922   {0x051C,0x051C,0x051C},  {0x051D,0x051D,0x051D},
923   {0x051E,0x051E,0x051E},  {0x051F,0x051F,0x051F},
924   {0x0520,0x0520,0x0520},  {0x0521,0x0521,0x0521},
925   {0x0522,0x0522,0x0522},  {0x0523,0x0523,0x0523},
926   {0x0524,0x0524,0x0524},  {0x0525,0x0525,0x0525},
927   {0x0526,0x0526,0x0526},  {0x0527,0x0527,0x0527},
928   {0x0528,0x0528,0x0528},  {0x0529,0x0529,0x0529},
929   {0x052A,0x052A,0x052A},  {0x052B,0x052B,0x052B},
930   {0x052C,0x052C,0x052C},  {0x052D,0x052D,0x052D},
931   {0x052E,0x052E,0x052E},  {0x052F,0x052F,0x052F},
932   {0x0530,0x0530,0x0530},  {0x0531,0x0561,0x0531},
933   {0x0532,0x0562,0x0532},  {0x0533,0x0563,0x0533},
934   {0x0534,0x0564,0x0534},  {0x0535,0x0565,0x0535},
935   {0x0536,0x0566,0x0536},  {0x0537,0x0567,0x0537},
936   {0x0538,0x0568,0x0538},  {0x0539,0x0569,0x0539},
937   {0x053A,0x056A,0x053A},  {0x053B,0x056B,0x053B},
938   {0x053C,0x056C,0x053C},  {0x053D,0x056D,0x053D},
939   {0x053E,0x056E,0x053E},  {0x053F,0x056F,0x053F},
940   {0x0540,0x0570,0x0540},  {0x0541,0x0571,0x0541},
941   {0x0542,0x0572,0x0542},  {0x0543,0x0573,0x0543},
942   {0x0544,0x0574,0x0544},  {0x0545,0x0575,0x0545},
943   {0x0546,0x0576,0x0546},  {0x0547,0x0577,0x0547},
944   {0x0548,0x0578,0x0548},  {0x0549,0x0579,0x0549},
945   {0x054A,0x057A,0x054A},  {0x054B,0x057B,0x054B},
946   {0x054C,0x057C,0x054C},  {0x054D,0x057D,0x054D},
947   {0x054E,0x057E,0x054E},  {0x054F,0x057F,0x054F},
948   {0x0550,0x0580,0x0550},  {0x0551,0x0581,0x0551},
949   {0x0552,0x0582,0x0552},  {0x0553,0x0583,0x0553},
950   {0x0554,0x0584,0x0554},  {0x0555,0x0585,0x0555},
951   {0x0556,0x0586,0x0556},  {0x0557,0x0557,0x0557},
952   {0x0558,0x0558,0x0558},  {0x0559,0x0559,0x0559},
953   {0x055A,0x055A,0x055A},  {0x055B,0x055B,0x055B},
954   {0x055C,0x055C,0x055C},  {0x055D,0x055D,0x055D},
955   {0x055E,0x055E,0x055E},  {0x055F,0x055F,0x055F},
956   {0x0560,0x0560,0x0560},  {0x0531,0x0561,0x0531},
957   {0x0532,0x0562,0x0532},  {0x0533,0x0563,0x0533},
958   {0x0534,0x0564,0x0534},  {0x0535,0x0565,0x0535},
959   {0x0536,0x0566,0x0536},  {0x0537,0x0567,0x0537},
960   {0x0538,0x0568,0x0538},  {0x0539,0x0569,0x0539},
961   {0x053A,0x056A,0x053A},  {0x053B,0x056B,0x053B},
962   {0x053C,0x056C,0x053C},  {0x053D,0x056D,0x053D},
963   {0x053E,0x056E,0x053E},  {0x053F,0x056F,0x053F},
964   {0x0540,0x0570,0x0540},  {0x0541,0x0571,0x0541},
965   {0x0542,0x0572,0x0542},  {0x0543,0x0573,0x0543},
966   {0x0544,0x0574,0x0544},  {0x0545,0x0575,0x0545},
967   {0x0546,0x0576,0x0546},  {0x0547,0x0577,0x0547},
968   {0x0548,0x0578,0x0548},  {0x0549,0x0579,0x0549},
969   {0x054A,0x057A,0x054A},  {0x054B,0x057B,0x054B},
970   {0x054C,0x057C,0x054C},  {0x054D,0x057D,0x054D},
971   {0x054E,0x057E,0x054E},  {0x054F,0x057F,0x054F},
972   {0x0550,0x0580,0x0550},  {0x0551,0x0581,0x0551},
973   {0x0552,0x0582,0x0552},  {0x0553,0x0583,0x0553},
974   {0x0554,0x0584,0x0554},  {0x0555,0x0585,0x0555},
975   {0x0556,0x0586,0x0556},  {0x0587,0x0587,0x0587},
976   {0x0588,0x0588,0x0588},  {0x0589,0x0589,0x0589},
977   {0x058A,0x058A,0x058A},  {0x058B,0x058B,0x058B},
978   {0x058C,0x058C,0x058C},  {0x058D,0x058D,0x058D},
979   {0x058E,0x058E,0x058E},  {0x058F,0x058F,0x058F},
980   {0x0590,0x0590,0x0590},  {0x0591,0x0591,0x0591},
981   {0x0592,0x0592,0x0592},  {0x0593,0x0593,0x0593},
982   {0x0594,0x0594,0x0594},  {0x0595,0x0595,0x0595},
983   {0x0596,0x0596,0x0596},  {0x0597,0x0597,0x0597},
984   {0x0598,0x0598,0x0598},  {0x0599,0x0599,0x0599},
985   {0x059A,0x059A,0x059A},  {0x059B,0x059B,0x059B},
986   {0x059C,0x059C,0x059C},  {0x059D,0x059D,0x059D},
987   {0x059E,0x059E,0x059E},  {0x059F,0x059F,0x059F},
988   {0x05A0,0x05A0,0x05A0},  {0x05A1,0x05A1,0x05A1},
989   {0x05A2,0x05A2,0x05A2},  {0x05A3,0x05A3,0x05A3},
990   {0x05A4,0x05A4,0x05A4},  {0x05A5,0x05A5,0x05A5},
991   {0x05A6,0x05A6,0x05A6},  {0x05A7,0x05A7,0x05A7},
992   {0x05A8,0x05A8,0x05A8},  {0x05A9,0x05A9,0x05A9},
993   {0x05AA,0x05AA,0x05AA},  {0x05AB,0x05AB,0x05AB},
994   {0x05AC,0x05AC,0x05AC},  {0x05AD,0x05AD,0x05AD},
995   {0x05AE,0x05AE,0x05AE},  {0x05AF,0x05AF,0x05AF},
996   {0x05B0,0x05B0,0x05B0},  {0x05B1,0x05B1,0x05B1},
997   {0x05B2,0x05B2,0x05B2},  {0x05B3,0x05B3,0x05B3},
998   {0x05B4,0x05B4,0x05B4},  {0x05B5,0x05B5,0x05B5},
999   {0x05B6,0x05B6,0x05B6},  {0x05B7,0x05B7,0x05B7},
1000   {0x05B8,0x05B8,0x05B8},  {0x05B9,0x05B9,0x05B9},
1001   {0x05BA,0x05BA,0x05BA},  {0x05BB,0x05BB,0x05BB},
1002   {0x05BC,0x05BC,0x05BC},  {0x05BD,0x05BD,0x05BD},
1003   {0x05BE,0x05BE,0x05BE},  {0x05BF,0x05BF,0x05BF},
1004   {0x05C0,0x05C0,0x05C0},  {0x05C1,0x05C1,0x05C1},
1005   {0x05C2,0x05C2,0x05C2},  {0x05C3,0x05C3,0x05C3},
1006   {0x05C4,0x05C4,0x05C4},  {0x05C5,0x05C5,0x05C5},
1007   {0x05C6,0x05C6,0x05C6},  {0x05C7,0x05C7,0x05C7},
1008   {0x05C8,0x05C8,0x05C8},  {0x05C9,0x05C9,0x05C9},
1009   {0x05CA,0x05CA,0x05CA},  {0x05CB,0x05CB,0x05CB},
1010   {0x05CC,0x05CC,0x05CC},  {0x05CD,0x05CD,0x05CD},
1011   {0x05CE,0x05CE,0x05CE},  {0x05CF,0x05CF,0x05CF},
1012   {0x05D0,0x05D0,0x05D0},  {0x05D1,0x05D1,0x05D1},
1013   {0x05D2,0x05D2,0x05D2},  {0x05D3,0x05D3,0x05D3},
1014   {0x05D4,0x05D4,0x05D4},  {0x05D5,0x05D5,0x05D5},
1015   {0x05D6,0x05D6,0x05D6},  {0x05D7,0x05D7,0x05D7},
1016   {0x05D8,0x05D8,0x05D8},  {0x05D9,0x05D9,0x05D9},
1017   {0x05DA,0x05DA,0x05DA},  {0x05DB,0x05DB,0x05DB},
1018   {0x05DC,0x05DC,0x05DC},  {0x05DD,0x05DD,0x05DD},
1019   {0x05DE,0x05DE,0x05DE},  {0x05DF,0x05DF,0x05DF},
1020   {0x05E0,0x05E0,0x05E0},  {0x05E1,0x05E1,0x05E1},
1021   {0x05E2,0x05E2,0x05E2},  {0x05E3,0x05E3,0x05E3},
1022   {0x05E4,0x05E4,0x05E4},  {0x05E5,0x05E5,0x05E5},
1023   {0x05E6,0x05E6,0x05E6},  {0x05E7,0x05E7,0x05E7},
1024   {0x05E8,0x05E8,0x05E8},  {0x05E9,0x05E9,0x05E9},
1025   {0x05EA,0x05EA,0x05EA},  {0x05EB,0x05EB,0x05EB},
1026   {0x05EC,0x05EC,0x05EC},  {0x05ED,0x05ED,0x05ED},
1027   {0x05EE,0x05EE,0x05EE},  {0x05EF,0x05EF,0x05EF},
1028   {0x05F0,0x05F0,0x05F0},  {0x05F1,0x05F1,0x05F1},
1029   {0x05F2,0x05F2,0x05F2},  {0x05F3,0x05F3,0x05F3},
1030   {0x05F4,0x05F4,0x05F4},  {0x05F5,0x05F5,0x05F5},
1031   {0x05F6,0x05F6,0x05F6},  {0x05F7,0x05F7,0x05F7},
1032   {0x05F8,0x05F8,0x05F8},  {0x05F9,0x05F9,0x05F9},
1033   {0x05FA,0x05FA,0x05FA},  {0x05FB,0x05FB,0x05FB},
1034   {0x05FC,0x05FC,0x05FC},  {0x05FD,0x05FD,0x05FD},
1035   {0x05FE,0x05FE,0x05FE},  {0x05FF,0x05FF,0x05FF}
1036 };
1037 
1038 static MY_UNICASE_CHARACTER plane1E[]={
1039   {0x1E00,0x1E01,0x0041},  {0x1E00,0x1E01,0x0041},
1040   {0x1E02,0x1E03,0x0042},  {0x1E02,0x1E03,0x0042},
1041   {0x1E04,0x1E05,0x0042},  {0x1E04,0x1E05,0x0042},
1042   {0x1E06,0x1E07,0x0042},  {0x1E06,0x1E07,0x0042},
1043   {0x1E08,0x1E09,0x0043},  {0x1E08,0x1E09,0x0043},
1044   {0x1E0A,0x1E0B,0x0044},  {0x1E0A,0x1E0B,0x0044},
1045   {0x1E0C,0x1E0D,0x0044},  {0x1E0C,0x1E0D,0x0044},
1046   {0x1E0E,0x1E0F,0x0044},  {0x1E0E,0x1E0F,0x0044},
1047   {0x1E10,0x1E11,0x0044},  {0x1E10,0x1E11,0x0044},
1048   {0x1E12,0x1E13,0x0044},  {0x1E12,0x1E13,0x0044},
1049   {0x1E14,0x1E15,0x0045},  {0x1E14,0x1E15,0x0045},
1050   {0x1E16,0x1E17,0x0045},  {0x1E16,0x1E17,0x0045},
1051   {0x1E18,0x1E19,0x0045},  {0x1E18,0x1E19,0x0045},
1052   {0x1E1A,0x1E1B,0x0045},  {0x1E1A,0x1E1B,0x0045},
1053   {0x1E1C,0x1E1D,0x0045},  {0x1E1C,0x1E1D,0x0045},
1054   {0x1E1E,0x1E1F,0x0046},  {0x1E1E,0x1E1F,0x0046},
1055   {0x1E20,0x1E21,0x0047},  {0x1E20,0x1E21,0x0047},
1056   {0x1E22,0x1E23,0x0048},  {0x1E22,0x1E23,0x0048},
1057   {0x1E24,0x1E25,0x0048},  {0x1E24,0x1E25,0x0048},
1058   {0x1E26,0x1E27,0x0048},  {0x1E26,0x1E27,0x0048},
1059   {0x1E28,0x1E29,0x0048},  {0x1E28,0x1E29,0x0048},
1060   {0x1E2A,0x1E2B,0x0048},  {0x1E2A,0x1E2B,0x0048},
1061   {0x1E2C,0x1E2D,0x0049},  {0x1E2C,0x1E2D,0x0049},
1062   {0x1E2E,0x1E2F,0x0049},  {0x1E2E,0x1E2F,0x0049},
1063   {0x1E30,0x1E31,0x004B},  {0x1E30,0x1E31,0x004B},
1064   {0x1E32,0x1E33,0x004B},  {0x1E32,0x1E33,0x004B},
1065   {0x1E34,0x1E35,0x004B},  {0x1E34,0x1E35,0x004B},
1066   {0x1E36,0x1E37,0x004C},  {0x1E36,0x1E37,0x004C},
1067   {0x1E38,0x1E39,0x004C},  {0x1E38,0x1E39,0x004C},
1068   {0x1E3A,0x1E3B,0x004C},  {0x1E3A,0x1E3B,0x004C},
1069   {0x1E3C,0x1E3D,0x004C},  {0x1E3C,0x1E3D,0x004C},
1070   {0x1E3E,0x1E3F,0x004D},  {0x1E3E,0x1E3F,0x004D},
1071   {0x1E40,0x1E41,0x004D},  {0x1E40,0x1E41,0x004D},
1072   {0x1E42,0x1E43,0x004D},  {0x1E42,0x1E43,0x004D},
1073   {0x1E44,0x1E45,0x004E},  {0x1E44,0x1E45,0x004E},
1074   {0x1E46,0x1E47,0x004E},  {0x1E46,0x1E47,0x004E},
1075   {0x1E48,0x1E49,0x004E},  {0x1E48,0x1E49,0x004E},
1076   {0x1E4A,0x1E4B,0x004E},  {0x1E4A,0x1E4B,0x004E},
1077   {0x1E4C,0x1E4D,0x004F},  {0x1E4C,0x1E4D,0x004F},
1078   {0x1E4E,0x1E4F,0x004F},  {0x1E4E,0x1E4F,0x004F},
1079   {0x1E50,0x1E51,0x004F},  {0x1E50,0x1E51,0x004F},
1080   {0x1E52,0x1E53,0x004F},  {0x1E52,0x1E53,0x004F},
1081   {0x1E54,0x1E55,0x0050},  {0x1E54,0x1E55,0x0050},
1082   {0x1E56,0x1E57,0x0050},  {0x1E56,0x1E57,0x0050},
1083   {0x1E58,0x1E59,0x0052},  {0x1E58,0x1E59,0x0052},
1084   {0x1E5A,0x1E5B,0x0052},  {0x1E5A,0x1E5B,0x0052},
1085   {0x1E5C,0x1E5D,0x0052},  {0x1E5C,0x1E5D,0x0052},
1086   {0x1E5E,0x1E5F,0x0052},  {0x1E5E,0x1E5F,0x0052},
1087   {0x1E60,0x1E61,0x0053},  {0x1E60,0x1E61,0x0053},
1088   {0x1E62,0x1E63,0x0053},  {0x1E62,0x1E63,0x0053},
1089   {0x1E64,0x1E65,0x0053},  {0x1E64,0x1E65,0x0053},
1090   {0x1E66,0x1E67,0x0053},  {0x1E66,0x1E67,0x0053},
1091   {0x1E68,0x1E69,0x0053},  {0x1E68,0x1E69,0x0053},
1092   {0x1E6A,0x1E6B,0x0054},  {0x1E6A,0x1E6B,0x0054},
1093   {0x1E6C,0x1E6D,0x0054},  {0x1E6C,0x1E6D,0x0054},
1094   {0x1E6E,0x1E6F,0x0054},  {0x1E6E,0x1E6F,0x0054},
1095   {0x1E70,0x1E71,0x0054},  {0x1E70,0x1E71,0x0054},
1096   {0x1E72,0x1E73,0x0055},  {0x1E72,0x1E73,0x0055},
1097   {0x1E74,0x1E75,0x0055},  {0x1E74,0x1E75,0x0055},
1098   {0x1E76,0x1E77,0x0055},  {0x1E76,0x1E77,0x0055},
1099   {0x1E78,0x1E79,0x0055},  {0x1E78,0x1E79,0x0055},
1100   {0x1E7A,0x1E7B,0x0055},  {0x1E7A,0x1E7B,0x0055},
1101   {0x1E7C,0x1E7D,0x0056},  {0x1E7C,0x1E7D,0x0056},
1102   {0x1E7E,0x1E7F,0x0056},  {0x1E7E,0x1E7F,0x0056},
1103   {0x1E80,0x1E81,0x0057},  {0x1E80,0x1E81,0x0057},
1104   {0x1E82,0x1E83,0x0057},  {0x1E82,0x1E83,0x0057},
1105   {0x1E84,0x1E85,0x0057},  {0x1E84,0x1E85,0x0057},
1106   {0x1E86,0x1E87,0x0057},  {0x1E86,0x1E87,0x0057},
1107   {0x1E88,0x1E89,0x0057},  {0x1E88,0x1E89,0x0057},
1108   {0x1E8A,0x1E8B,0x0058},  {0x1E8A,0x1E8B,0x0058},
1109   {0x1E8C,0x1E8D,0x0058},  {0x1E8C,0x1E8D,0x0058},
1110   {0x1E8E,0x1E8F,0x0059},  {0x1E8E,0x1E8F,0x0059},
1111   {0x1E90,0x1E91,0x005A},  {0x1E90,0x1E91,0x005A},
1112   {0x1E92,0x1E93,0x005A},  {0x1E92,0x1E93,0x005A},
1113   {0x1E94,0x1E95,0x005A},  {0x1E94,0x1E95,0x005A},
1114   {0x1E96,0x1E96,0x0048},  {0x1E97,0x1E97,0x0054},
1115   {0x1E98,0x1E98,0x0057},  {0x1E99,0x1E99,0x0059},
1116   {0x1E9A,0x1E9A,0x1E9A},  {0x1E60,0x1E9B,0x0053},
1117   {0x1E9C,0x1E9C,0x1E9C},  {0x1E9D,0x1E9D,0x1E9D},
1118   {0x1E9E,0x1E9E,0x1E9E},  {0x1E9F,0x1E9F,0x1E9F},
1119   {0x1EA0,0x1EA1,0x0041},  {0x1EA0,0x1EA1,0x0041},
1120   {0x1EA2,0x1EA3,0x0041},  {0x1EA2,0x1EA3,0x0041},
1121   {0x1EA4,0x1EA5,0x0041},  {0x1EA4,0x1EA5,0x0041},
1122   {0x1EA6,0x1EA7,0x0041},  {0x1EA6,0x1EA7,0x0041},
1123   {0x1EA8,0x1EA9,0x0041},  {0x1EA8,0x1EA9,0x0041},
1124   {0x1EAA,0x1EAB,0x0041},  {0x1EAA,0x1EAB,0x0041},
1125   {0x1EAC,0x1EAD,0x0041},  {0x1EAC,0x1EAD,0x0041},
1126   {0x1EAE,0x1EAF,0x0041},  {0x1EAE,0x1EAF,0x0041},
1127   {0x1EB0,0x1EB1,0x0041},  {0x1EB0,0x1EB1,0x0041},
1128   {0x1EB2,0x1EB3,0x0041},  {0x1EB2,0x1EB3,0x0041},
1129   {0x1EB4,0x1EB5,0x0041},  {0x1EB4,0x1EB5,0x0041},
1130   {0x1EB6,0x1EB7,0x0041},  {0x1EB6,0x1EB7,0x0041},
1131   {0x1EB8,0x1EB9,0x0045},  {0x1EB8,0x1EB9,0x0045},
1132   {0x1EBA,0x1EBB,0x0045},  {0x1EBA,0x1EBB,0x0045},
1133   {0x1EBC,0x1EBD,0x0045},  {0x1EBC,0x1EBD,0x0045},
1134   {0x1EBE,0x1EBF,0x0045},  {0x1EBE,0x1EBF,0x0045},
1135   {0x1EC0,0x1EC1,0x0045},  {0x1EC0,0x1EC1,0x0045},
1136   {0x1EC2,0x1EC3,0x0045},  {0x1EC2,0x1EC3,0x0045},
1137   {0x1EC4,0x1EC5,0x0045},  {0x1EC4,0x1EC5,0x0045},
1138   {0x1EC6,0x1EC7,0x0045},  {0x1EC6,0x1EC7,0x0045},
1139   {0x1EC8,0x1EC9,0x0049},  {0x1EC8,0x1EC9,0x0049},
1140   {0x1ECA,0x1ECB,0x0049},  {0x1ECA,0x1ECB,0x0049},
1141   {0x1ECC,0x1ECD,0x004F},  {0x1ECC,0x1ECD,0x004F},
1142   {0x1ECE,0x1ECF,0x004F},  {0x1ECE,0x1ECF,0x004F},
1143   {0x1ED0,0x1ED1,0x004F},  {0x1ED0,0x1ED1,0x004F},
1144   {0x1ED2,0x1ED3,0x004F},  {0x1ED2,0x1ED3,0x004F},
1145   {0x1ED4,0x1ED5,0x004F},  {0x1ED4,0x1ED5,0x004F},
1146   {0x1ED6,0x1ED7,0x004F},  {0x1ED6,0x1ED7,0x004F},
1147   {0x1ED8,0x1ED9,0x004F},  {0x1ED8,0x1ED9,0x004F},
1148   {0x1EDA,0x1EDB,0x004F},  {0x1EDA,0x1EDB,0x004F},
1149   {0x1EDC,0x1EDD,0x004F},  {0x1EDC,0x1EDD,0x004F},
1150   {0x1EDE,0x1EDF,0x004F},  {0x1EDE,0x1EDF,0x004F},
1151   {0x1EE0,0x1EE1,0x004F},  {0x1EE0,0x1EE1,0x004F},
1152   {0x1EE2,0x1EE3,0x004F},  {0x1EE2,0x1EE3,0x004F},
1153   {0x1EE4,0x1EE5,0x0055},  {0x1EE4,0x1EE5,0x0055},
1154   {0x1EE6,0x1EE7,0x0055},  {0x1EE6,0x1EE7,0x0055},
1155   {0x1EE8,0x1EE9,0x0055},  {0x1EE8,0x1EE9,0x0055},
1156   {0x1EEA,0x1EEB,0x0055},  {0x1EEA,0x1EEB,0x0055},
1157   {0x1EEC,0x1EED,0x0055},  {0x1EEC,0x1EED,0x0055},
1158   {0x1EEE,0x1EEF,0x0055},  {0x1EEE,0x1EEF,0x0055},
1159   {0x1EF0,0x1EF1,0x0055},  {0x1EF0,0x1EF1,0x0055},
1160   {0x1EF2,0x1EF3,0x0059},  {0x1EF2,0x1EF3,0x0059},
1161   {0x1EF4,0x1EF5,0x0059},  {0x1EF4,0x1EF5,0x0059},
1162   {0x1EF6,0x1EF7,0x0059},  {0x1EF6,0x1EF7,0x0059},
1163   {0x1EF8,0x1EF9,0x0059},  {0x1EF8,0x1EF9,0x0059},
1164   {0x1EFA,0x1EFA,0x1EFA},  {0x1EFB,0x1EFB,0x1EFB},
1165   {0x1EFC,0x1EFC,0x1EFC},  {0x1EFD,0x1EFD,0x1EFD},
1166   {0x1EFE,0x1EFE,0x1EFE},  {0x1EFF,0x1EFF,0x1EFF}
1167 };
1168 
1169 static MY_UNICASE_CHARACTER plane1F[]={
1170   {0x1F08,0x1F00,0x0391},  {0x1F09,0x1F01,0x0391},
1171   {0x1F0A,0x1F02,0x0391},  {0x1F0B,0x1F03,0x0391},
1172   {0x1F0C,0x1F04,0x0391},  {0x1F0D,0x1F05,0x0391},
1173   {0x1F0E,0x1F06,0x0391},  {0x1F0F,0x1F07,0x0391},
1174   {0x1F08,0x1F00,0x0391},  {0x1F09,0x1F01,0x0391},
1175   {0x1F0A,0x1F02,0x0391},  {0x1F0B,0x1F03,0x0391},
1176   {0x1F0C,0x1F04,0x0391},  {0x1F0D,0x1F05,0x0391},
1177   {0x1F0E,0x1F06,0x0391},  {0x1F0F,0x1F07,0x0391},
1178   {0x1F18,0x1F10,0x0395},  {0x1F19,0x1F11,0x0395},
1179   {0x1F1A,0x1F12,0x0395},  {0x1F1B,0x1F13,0x0395},
1180   {0x1F1C,0x1F14,0x0395},  {0x1F1D,0x1F15,0x0395},
1181   {0x1F16,0x1F16,0x1F16},  {0x1F17,0x1F17,0x1F17},
1182   {0x1F18,0x1F10,0x0395},  {0x1F19,0x1F11,0x0395},
1183   {0x1F1A,0x1F12,0x0395},  {0x1F1B,0x1F13,0x0395},
1184   {0x1F1C,0x1F14,0x0395},  {0x1F1D,0x1F15,0x0395},
1185   {0x1F1E,0x1F1E,0x1F1E},  {0x1F1F,0x1F1F,0x1F1F},
1186   {0x1F28,0x1F20,0x0397},  {0x1F29,0x1F21,0x0397},
1187   {0x1F2A,0x1F22,0x0397},  {0x1F2B,0x1F23,0x0397},
1188   {0x1F2C,0x1F24,0x0397},  {0x1F2D,0x1F25,0x0397},
1189   {0x1F2E,0x1F26,0x0397},  {0x1F2F,0x1F27,0x0397},
1190   {0x1F28,0x1F20,0x0397},  {0x1F29,0x1F21,0x0397},
1191   {0x1F2A,0x1F22,0x0397},  {0x1F2B,0x1F23,0x0397},
1192   {0x1F2C,0x1F24,0x0397},  {0x1F2D,0x1F25,0x0397},
1193   {0x1F2E,0x1F26,0x0397},  {0x1F2F,0x1F27,0x0397},
1194   {0x1F38,0x1F30,0x0399},  {0x1F39,0x1F31,0x0399},
1195   {0x1F3A,0x1F32,0x0399},  {0x1F3B,0x1F33,0x0399},
1196   {0x1F3C,0x1F34,0x0399},  {0x1F3D,0x1F35,0x0399},
1197   {0x1F3E,0x1F36,0x0399},  {0x1F3F,0x1F37,0x0399},
1198   {0x1F38,0x1F30,0x0399},  {0x1F39,0x1F31,0x0399},
1199   {0x1F3A,0x1F32,0x0399},  {0x1F3B,0x1F33,0x0399},
1200   {0x1F3C,0x1F34,0x0399},  {0x1F3D,0x1F35,0x0399},
1201   {0x1F3E,0x1F36,0x0399},  {0x1F3F,0x1F37,0x0399},
1202   {0x1F48,0x1F40,0x039F},  {0x1F49,0x1F41,0x039F},
1203   {0x1F4A,0x1F42,0x039F},  {0x1F4B,0x1F43,0x039F},
1204   {0x1F4C,0x1F44,0x039F},  {0x1F4D,0x1F45,0x039F},
1205   {0x1F46,0x1F46,0x1F46},  {0x1F47,0x1F47,0x1F47},
1206   {0x1F48,0x1F40,0x039F},  {0x1F49,0x1F41,0x039F},
1207   {0x1F4A,0x1F42,0x039F},  {0x1F4B,0x1F43,0x039F},
1208   {0x1F4C,0x1F44,0x039F},  {0x1F4D,0x1F45,0x039F},
1209   {0x1F4E,0x1F4E,0x1F4E},  {0x1F4F,0x1F4F,0x1F4F},
1210   {0x1F50,0x1F50,0x03A5},  {0x1F59,0x1F51,0x03A5},
1211   {0x1F52,0x1F52,0x03A5},  {0x1F5B,0x1F53,0x03A5},
1212   {0x1F54,0x1F54,0x03A5},  {0x1F5D,0x1F55,0x03A5},
1213   {0x1F56,0x1F56,0x03A5},  {0x1F5F,0x1F57,0x03A5},
1214   {0x1F58,0x1F58,0x1F58},  {0x1F59,0x1F51,0x03A5},
1215   {0x1F5A,0x1F5A,0x1F5A},  {0x1F5B,0x1F53,0x03A5},
1216   {0x1F5C,0x1F5C,0x1F5C},  {0x1F5D,0x1F55,0x03A5},
1217   {0x1F5E,0x1F5E,0x1F5E},  {0x1F5F,0x1F57,0x03A5},
1218   {0x1F68,0x1F60,0x03A9},  {0x1F69,0x1F61,0x03A9},
1219   {0x1F6A,0x1F62,0x03A9},  {0x1F6B,0x1F63,0x03A9},
1220   {0x1F6C,0x1F64,0x03A9},  {0x1F6D,0x1F65,0x03A9},
1221   {0x1F6E,0x1F66,0x03A9},  {0x1F6F,0x1F67,0x03A9},
1222   {0x1F68,0x1F60,0x03A9},  {0x1F69,0x1F61,0x03A9},
1223   {0x1F6A,0x1F62,0x03A9},  {0x1F6B,0x1F63,0x03A9},
1224   {0x1F6C,0x1F64,0x03A9},  {0x1F6D,0x1F65,0x03A9},
1225   {0x1F6E,0x1F66,0x03A9},  {0x1F6F,0x1F67,0x03A9},
1226   {0x1FBA,0x1F70,0x0391},  {0x1FBB,0x1F71,0x1FBB},
1227   {0x1FC8,0x1F72,0x0395},  {0x1FC9,0x1F73,0x1FC9},
1228   {0x1FCA,0x1F74,0x0397},  {0x1FCB,0x1F75,0x1FCB},
1229   {0x1FDA,0x1F76,0x0399},  {0x1FDB,0x1F77,0x1FDB},
1230   {0x1FF8,0x1F78,0x039F},  {0x1FF9,0x1F79,0x1FF9},
1231   {0x1FEA,0x1F7A,0x03A5},  {0x1FEB,0x1F7B,0x1FEB},
1232   {0x1FFA,0x1F7C,0x03A9},  {0x1FFB,0x1F7D,0x1FFB},
1233   {0x1F7E,0x1F7E,0x1F7E},  {0x1F7F,0x1F7F,0x1F7F},
1234   {0x1F88,0x1F80,0x0391},  {0x1F89,0x1F81,0x0391},
1235   {0x1F8A,0x1F82,0x0391},  {0x1F8B,0x1F83,0x0391},
1236   {0x1F8C,0x1F84,0x0391},  {0x1F8D,0x1F85,0x0391},
1237   {0x1F8E,0x1F86,0x0391},  {0x1F8F,0x1F87,0x0391},
1238   {0x1F88,0x1F80,0x0391},  {0x1F89,0x1F81,0x0391},
1239   {0x1F8A,0x1F82,0x0391},  {0x1F8B,0x1F83,0x0391},
1240   {0x1F8C,0x1F84,0x0391},  {0x1F8D,0x1F85,0x0391},
1241   {0x1F8E,0x1F86,0x0391},  {0x1F8F,0x1F87,0x0391},
1242   {0x1F98,0x1F90,0x0397},  {0x1F99,0x1F91,0x0397},
1243   {0x1F9A,0x1F92,0x0397},  {0x1F9B,0x1F93,0x0397},
1244   {0x1F9C,0x1F94,0x0397},  {0x1F9D,0x1F95,0x0397},
1245   {0x1F9E,0x1F96,0x0397},  {0x1F9F,0x1F97,0x0397},
1246   {0x1F98,0x1F90,0x0397},  {0x1F99,0x1F91,0x0397},
1247   {0x1F9A,0x1F92,0x0397},  {0x1F9B,0x1F93,0x0397},
1248   {0x1F9C,0x1F94,0x0397},  {0x1F9D,0x1F95,0x0397},
1249   {0x1F9E,0x1F96,0x0397},  {0x1F9F,0x1F97,0x0397},
1250   {0x1FA8,0x1FA0,0x03A9},  {0x1FA9,0x1FA1,0x03A9},
1251   {0x1FAA,0x1FA2,0x03A9},  {0x1FAB,0x1FA3,0x03A9},
1252   {0x1FAC,0x1FA4,0x03A9},  {0x1FAD,0x1FA5,0x03A9},
1253   {0x1FAE,0x1FA6,0x03A9},  {0x1FAF,0x1FA7,0x03A9},
1254   {0x1FA8,0x1FA0,0x03A9},  {0x1FA9,0x1FA1,0x03A9},
1255   {0x1FAA,0x1FA2,0x03A9},  {0x1FAB,0x1FA3,0x03A9},
1256   {0x1FAC,0x1FA4,0x03A9},  {0x1FAD,0x1FA5,0x03A9},
1257   {0x1FAE,0x1FA6,0x03A9},  {0x1FAF,0x1FA7,0x03A9},
1258   {0x1FB8,0x1FB0,0x0391},  {0x1FB9,0x1FB1,0x0391},
1259   {0x1FB2,0x1FB2,0x0391},  {0x1FBC,0x1FB3,0x0391},
1260   {0x1FB4,0x1FB4,0x0391},  {0x1FB5,0x1FB5,0x1FB5},
1261   {0x1FB6,0x1FB6,0x0391},  {0x1FB7,0x1FB7,0x0391},
1262   {0x1FB8,0x1FB0,0x0391},  {0x1FB9,0x1FB1,0x0391},
1263   {0x1FBA,0x1F70,0x0391},  {0x1FBB,0x1F71,0x1FBB},
1264   {0x1FBC,0x1FB3,0x0391},  {0x1FBD,0x1FBD,0x1FBD},
1265   {0x0399,0x1FBE,0x0399},  {0x1FBF,0x1FBF,0x1FBF},
1266   {0x1FC0,0x1FC0,0x1FC0},  {0x1FC1,0x1FC1,0x1FC1},
1267   {0x1FC2,0x1FC2,0x0397},  {0x1FCC,0x1FC3,0x0397},
1268   {0x1FC4,0x1FC4,0x0397},  {0x1FC5,0x1FC5,0x1FC5},
1269   {0x1FC6,0x1FC6,0x0397},  {0x1FC7,0x1FC7,0x0397},
1270   {0x1FC8,0x1F72,0x0395},  {0x1FC9,0x1F73,0x1FC9},
1271   {0x1FCA,0x1F74,0x0397},  {0x1FCB,0x1F75,0x1FCB},
1272   {0x1FCC,0x1FC3,0x0397},  {0x1FCD,0x1FCD,0x1FCD},
1273   {0x1FCE,0x1FCE,0x1FCE},  {0x1FCF,0x1FCF,0x1FCF},
1274   {0x1FD8,0x1FD0,0x0399},  {0x1FD9,0x1FD1,0x0399},
1275   {0x1FD2,0x1FD2,0x0399},  {0x1FD3,0x1FD3,0x1FD3},
1276   {0x1FD4,0x1FD4,0x1FD4},  {0x1FD5,0x1FD5,0x1FD5},
1277   {0x1FD6,0x1FD6,0x0399},  {0x1FD7,0x1FD7,0x0399},
1278   {0x1FD8,0x1FD0,0x0399},  {0x1FD9,0x1FD1,0x0399},
1279   {0x1FDA,0x1F76,0x0399},  {0x1FDB,0x1F77,0x1FDB},
1280   {0x1FDC,0x1FDC,0x1FDC},  {0x1FDD,0x1FDD,0x1FDD},
1281   {0x1FDE,0x1FDE,0x1FDE},  {0x1FDF,0x1FDF,0x1FDF},
1282   {0x1FE8,0x1FE0,0x03A5},  {0x1FE9,0x1FE1,0x03A5},
1283   {0x1FE2,0x1FE2,0x03A5},  {0x1FE3,0x1FE3,0x1FE3},
1284   {0x1FE4,0x1FE4,0x03A1},  {0x1FEC,0x1FE5,0x03A1},
1285   {0x1FE6,0x1FE6,0x03A5},  {0x1FE7,0x1FE7,0x03A5},
1286   {0x1FE8,0x1FE0,0x03A5},  {0x1FE9,0x1FE1,0x03A5},
1287   {0x1FEA,0x1F7A,0x03A5},  {0x1FEB,0x1F7B,0x1FEB},
1288   {0x1FEC,0x1FE5,0x03A1},  {0x1FED,0x1FED,0x1FED},
1289   {0x1FEE,0x1FEE,0x1FEE},  {0x1FEF,0x1FEF,0x1FEF},
1290   {0x1FF0,0x1FF0,0x1FF0},  {0x1FF1,0x1FF1,0x1FF1},
1291   {0x1FF2,0x1FF2,0x03A9},  {0x1FFC,0x1FF3,0x03A9},
1292   {0x1FF4,0x1FF4,0x03A9},  {0x1FF5,0x1FF5,0x1FF5},
1293   {0x1FF6,0x1FF6,0x03A9},  {0x1FF7,0x1FF7,0x03A9},
1294   {0x1FF8,0x1F78,0x039F},  {0x1FF9,0x1F79,0x1FF9},
1295   {0x1FFA,0x1F7C,0x03A9},  {0x1FFB,0x1F7D,0x1FFB},
1296   {0x1FFC,0x1FF3,0x03A9},  {0x1FFD,0x1FFD,0x1FFD},
1297   {0x1FFE,0x1FFE,0x1FFE},  {0x1FFF,0x1FFF,0x1FFF}
1298 };
1299 
1300 static MY_UNICASE_CHARACTER plane21[]={
1301   {0x2100,0x2100,0x2100},  {0x2101,0x2101,0x2101},
1302   {0x2102,0x2102,0x2102},  {0x2103,0x2103,0x2103},
1303   {0x2104,0x2104,0x2104},  {0x2105,0x2105,0x2105},
1304   {0x2106,0x2106,0x2106},  {0x2107,0x2107,0x2107},
1305   {0x2108,0x2108,0x2108},  {0x2109,0x2109,0x2109},
1306   {0x210A,0x210A,0x210A},  {0x210B,0x210B,0x210B},
1307   {0x210C,0x210C,0x210C},  {0x210D,0x210D,0x210D},
1308   {0x210E,0x210E,0x210E},  {0x210F,0x210F,0x210F},
1309   {0x2110,0x2110,0x2110},  {0x2111,0x2111,0x2111},
1310   {0x2112,0x2112,0x2112},  {0x2113,0x2113,0x2113},
1311   {0x2114,0x2114,0x2114},  {0x2115,0x2115,0x2115},
1312   {0x2116,0x2116,0x2116},  {0x2117,0x2117,0x2117},
1313   {0x2118,0x2118,0x2118},  {0x2119,0x2119,0x2119},
1314   {0x211A,0x211A,0x211A},  {0x211B,0x211B,0x211B},
1315   {0x211C,0x211C,0x211C},  {0x211D,0x211D,0x211D},
1316   {0x211E,0x211E,0x211E},  {0x211F,0x211F,0x211F},
1317   {0x2120,0x2120,0x2120},  {0x2121,0x2121,0x2121},
1318   {0x2122,0x2122,0x2122},  {0x2123,0x2123,0x2123},
1319   {0x2124,0x2124,0x2124},  {0x2125,0x2125,0x2125},
1320   {0x2126,0x03C9,0x2126},  {0x2127,0x2127,0x2127},
1321   {0x2128,0x2128,0x2128},  {0x2129,0x2129,0x2129},
1322   {0x212A,0x006B,0x212A},  {0x212B,0x00E5,0x212B},
1323   {0x212C,0x212C,0x212C},  {0x212D,0x212D,0x212D},
1324   {0x212E,0x212E,0x212E},  {0x212F,0x212F,0x212F},
1325   {0x2130,0x2130,0x2130},  {0x2131,0x2131,0x2131},
1326   {0x2132,0x2132,0x2132},  {0x2133,0x2133,0x2133},
1327   {0x2134,0x2134,0x2134},  {0x2135,0x2135,0x2135},
1328   {0x2136,0x2136,0x2136},  {0x2137,0x2137,0x2137},
1329   {0x2138,0x2138,0x2138},  {0x2139,0x2139,0x2139},
1330   {0x213A,0x213A,0x213A},  {0x213B,0x213B,0x213B},
1331   {0x213C,0x213C,0x213C},  {0x213D,0x213D,0x213D},
1332   {0x213E,0x213E,0x213E},  {0x213F,0x213F,0x213F},
1333   {0x2140,0x2140,0x2140},  {0x2141,0x2141,0x2141},
1334   {0x2142,0x2142,0x2142},  {0x2143,0x2143,0x2143},
1335   {0x2144,0x2144,0x2144},  {0x2145,0x2145,0x2145},
1336   {0x2146,0x2146,0x2146},  {0x2147,0x2147,0x2147},
1337   {0x2148,0x2148,0x2148},  {0x2149,0x2149,0x2149},
1338   {0x214A,0x214A,0x214A},  {0x214B,0x214B,0x214B},
1339   {0x214C,0x214C,0x214C},  {0x214D,0x214D,0x214D},
1340   {0x214E,0x214E,0x214E},  {0x214F,0x214F,0x214F},
1341   {0x2150,0x2150,0x2150},  {0x2151,0x2151,0x2151},
1342   {0x2152,0x2152,0x2152},  {0x2153,0x2153,0x2153},
1343   {0x2154,0x2154,0x2154},  {0x2155,0x2155,0x2155},
1344   {0x2156,0x2156,0x2156},  {0x2157,0x2157,0x2157},
1345   {0x2158,0x2158,0x2158},  {0x2159,0x2159,0x2159},
1346   {0x215A,0x215A,0x215A},  {0x215B,0x215B,0x215B},
1347   {0x215C,0x215C,0x215C},  {0x215D,0x215D,0x215D},
1348   {0x215E,0x215E,0x215E},  {0x215F,0x215F,0x215F},
1349   {0x2160,0x2170,0x2160},  {0x2161,0x2171,0x2161},
1350   {0x2162,0x2172,0x2162},  {0x2163,0x2173,0x2163},
1351   {0x2164,0x2174,0x2164},  {0x2165,0x2175,0x2165},
1352   {0x2166,0x2176,0x2166},  {0x2167,0x2177,0x2167},
1353   {0x2168,0x2178,0x2168},  {0x2169,0x2179,0x2169},
1354   {0x216A,0x217A,0x216A},  {0x216B,0x217B,0x216B},
1355   {0x216C,0x217C,0x216C},  {0x216D,0x217D,0x216D},
1356   {0x216E,0x217E,0x216E},  {0x216F,0x217F,0x216F},
1357   {0x2160,0x2170,0x2160},  {0x2161,0x2171,0x2161},
1358   {0x2162,0x2172,0x2162},  {0x2163,0x2173,0x2163},
1359   {0x2164,0x2174,0x2164},  {0x2165,0x2175,0x2165},
1360   {0x2166,0x2176,0x2166},  {0x2167,0x2177,0x2167},
1361   {0x2168,0x2178,0x2168},  {0x2169,0x2179,0x2169},
1362   {0x216A,0x217A,0x216A},  {0x216B,0x217B,0x216B},
1363   {0x216C,0x217C,0x216C},  {0x216D,0x217D,0x216D},
1364   {0x216E,0x217E,0x216E},  {0x216F,0x217F,0x216F},
1365   {0x2180,0x2180,0x2180},  {0x2181,0x2181,0x2181},
1366   {0x2182,0x2182,0x2182},  {0x2183,0x2183,0x2183},
1367   {0x2184,0x2184,0x2184},  {0x2185,0x2185,0x2185},
1368   {0x2186,0x2186,0x2186},  {0x2187,0x2187,0x2187},
1369   {0x2188,0x2188,0x2188},  {0x2189,0x2189,0x2189},
1370   {0x218A,0x218A,0x218A},  {0x218B,0x218B,0x218B},
1371   {0x218C,0x218C,0x218C},  {0x218D,0x218D,0x218D},
1372   {0x218E,0x218E,0x218E},  {0x218F,0x218F,0x218F},
1373   {0x2190,0x2190,0x2190},  {0x2191,0x2191,0x2191},
1374   {0x2192,0x2192,0x2192},  {0x2193,0x2193,0x2193},
1375   {0x2194,0x2194,0x2194},  {0x2195,0x2195,0x2195},
1376   {0x2196,0x2196,0x2196},  {0x2197,0x2197,0x2197},
1377   {0x2198,0x2198,0x2198},  {0x2199,0x2199,0x2199},
1378   {0x219A,0x219A,0x219A},  {0x219B,0x219B,0x219B},
1379   {0x219C,0x219C,0x219C},  {0x219D,0x219D,0x219D},
1380   {0x219E,0x219E,0x219E},  {0x219F,0x219F,0x219F},
1381   {0x21A0,0x21A0,0x21A0},  {0x21A1,0x21A1,0x21A1},
1382   {0x21A2,0x21A2,0x21A2},  {0x21A3,0x21A3,0x21A3},
1383   {0x21A4,0x21A4,0x21A4},  {0x21A5,0x21A5,0x21A5},
1384   {0x21A6,0x21A6,0x21A6},  {0x21A7,0x21A7,0x21A7},
1385   {0x21A8,0x21A8,0x21A8},  {0x21A9,0x21A9,0x21A9},
1386   {0x21AA,0x21AA,0x21AA},  {0x21AB,0x21AB,0x21AB},
1387   {0x21AC,0x21AC,0x21AC},  {0x21AD,0x21AD,0x21AD},
1388   {0x21AE,0x21AE,0x21AE},  {0x21AF,0x21AF,0x21AF},
1389   {0x21B0,0x21B0,0x21B0},  {0x21B1,0x21B1,0x21B1},
1390   {0x21B2,0x21B2,0x21B2},  {0x21B3,0x21B3,0x21B3},
1391   {0x21B4,0x21B4,0x21B4},  {0x21B5,0x21B5,0x21B5},
1392   {0x21B6,0x21B6,0x21B6},  {0x21B7,0x21B7,0x21B7},
1393   {0x21B8,0x21B8,0x21B8},  {0x21B9,0x21B9,0x21B9},
1394   {0x21BA,0x21BA,0x21BA},  {0x21BB,0x21BB,0x21BB},
1395   {0x21BC,0x21BC,0x21BC},  {0x21BD,0x21BD,0x21BD},
1396   {0x21BE,0x21BE,0x21BE},  {0x21BF,0x21BF,0x21BF},
1397   {0x21C0,0x21C0,0x21C0},  {0x21C1,0x21C1,0x21C1},
1398   {0x21C2,0x21C2,0x21C2},  {0x21C3,0x21C3,0x21C3},
1399   {0x21C4,0x21C4,0x21C4},  {0x21C5,0x21C5,0x21C5},
1400   {0x21C6,0x21C6,0x21C6},  {0x21C7,0x21C7,0x21C7},
1401   {0x21C8,0x21C8,0x21C8},  {0x21C9,0x21C9,0x21C9},
1402   {0x21CA,0x21CA,0x21CA},  {0x21CB,0x21CB,0x21CB},
1403   {0x21CC,0x21CC,0x21CC},  {0x21CD,0x21CD,0x21CD},
1404   {0x21CE,0x21CE,0x21CE},  {0x21CF,0x21CF,0x21CF},
1405   {0x21D0,0x21D0,0x21D0},  {0x21D1,0x21D1,0x21D1},
1406   {0x21D2,0x21D2,0x21D2},  {0x21D3,0x21D3,0x21D3},
1407   {0x21D4,0x21D4,0x21D4},  {0x21D5,0x21D5,0x21D5},
1408   {0x21D6,0x21D6,0x21D6},  {0x21D7,0x21D7,0x21D7},
1409   {0x21D8,0x21D8,0x21D8},  {0x21D9,0x21D9,0x21D9},
1410   {0x21DA,0x21DA,0x21DA},  {0x21DB,0x21DB,0x21DB},
1411   {0x21DC,0x21DC,0x21DC},  {0x21DD,0x21DD,0x21DD},
1412   {0x21DE,0x21DE,0x21DE},  {0x21DF,0x21DF,0x21DF},
1413   {0x21E0,0x21E0,0x21E0},  {0x21E1,0x21E1,0x21E1},
1414   {0x21E2,0x21E2,0x21E2},  {0x21E3,0x21E3,0x21E3},
1415   {0x21E4,0x21E4,0x21E4},  {0x21E5,0x21E5,0x21E5},
1416   {0x21E6,0x21E6,0x21E6},  {0x21E7,0x21E7,0x21E7},
1417   {0x21E8,0x21E8,0x21E8},  {0x21E9,0x21E9,0x21E9},
1418   {0x21EA,0x21EA,0x21EA},  {0x21EB,0x21EB,0x21EB},
1419   {0x21EC,0x21EC,0x21EC},  {0x21ED,0x21ED,0x21ED},
1420   {0x21EE,0x21EE,0x21EE},  {0x21EF,0x21EF,0x21EF},
1421   {0x21F0,0x21F0,0x21F0},  {0x21F1,0x21F1,0x21F1},
1422   {0x21F2,0x21F2,0x21F2},  {0x21F3,0x21F3,0x21F3},
1423   {0x21F4,0x21F4,0x21F4},  {0x21F5,0x21F5,0x21F5},
1424   {0x21F6,0x21F6,0x21F6},  {0x21F7,0x21F7,0x21F7},
1425   {0x21F8,0x21F8,0x21F8},  {0x21F9,0x21F9,0x21F9},
1426   {0x21FA,0x21FA,0x21FA},  {0x21FB,0x21FB,0x21FB},
1427   {0x21FC,0x21FC,0x21FC},  {0x21FD,0x21FD,0x21FD},
1428   {0x21FE,0x21FE,0x21FE},  {0x21FF,0x21FF,0x21FF}
1429 };
1430 
1431 static MY_UNICASE_CHARACTER plane24[]={
1432   {0x2400,0x2400,0x2400},  {0x2401,0x2401,0x2401},
1433   {0x2402,0x2402,0x2402},  {0x2403,0x2403,0x2403},
1434   {0x2404,0x2404,0x2404},  {0x2405,0x2405,0x2405},
1435   {0x2406,0x2406,0x2406},  {0x2407,0x2407,0x2407},
1436   {0x2408,0x2408,0x2408},  {0x2409,0x2409,0x2409},
1437   {0x240A,0x240A,0x240A},  {0x240B,0x240B,0x240B},
1438   {0x240C,0x240C,0x240C},  {0x240D,0x240D,0x240D},
1439   {0x240E,0x240E,0x240E},  {0x240F,0x240F,0x240F},
1440   {0x2410,0x2410,0x2410},  {0x2411,0x2411,0x2411},
1441   {0x2412,0x2412,0x2412},  {0x2413,0x2413,0x2413},
1442   {0x2414,0x2414,0x2414},  {0x2415,0x2415,0x2415},
1443   {0x2416,0x2416,0x2416},  {0x2417,0x2417,0x2417},
1444   {0x2418,0x2418,0x2418},  {0x2419,0x2419,0x2419},
1445   {0x241A,0x241A,0x241A},  {0x241B,0x241B,0x241B},
1446   {0x241C,0x241C,0x241C},  {0x241D,0x241D,0x241D},
1447   {0x241E,0x241E,0x241E},  {0x241F,0x241F,0x241F},
1448   {0x2420,0x2420,0x2420},  {0x2421,0x2421,0x2421},
1449   {0x2422,0x2422,0x2422},  {0x2423,0x2423,0x2423},
1450   {0x2424,0x2424,0x2424},  {0x2425,0x2425,0x2425},
1451   {0x2426,0x2426,0x2426},  {0x2427,0x2427,0x2427},
1452   {0x2428,0x2428,0x2428},  {0x2429,0x2429,0x2429},
1453   {0x242A,0x242A,0x242A},  {0x242B,0x242B,0x242B},
1454   {0x242C,0x242C,0x242C},  {0x242D,0x242D,0x242D},
1455   {0x242E,0x242E,0x242E},  {0x242F,0x242F,0x242F},
1456   {0x2430,0x2430,0x2430},  {0x2431,0x2431,0x2431},
1457   {0x2432,0x2432,0x2432},  {0x2433,0x2433,0x2433},
1458   {0x2434,0x2434,0x2434},  {0x2435,0x2435,0x2435},
1459   {0x2436,0x2436,0x2436},  {0x2437,0x2437,0x2437},
1460   {0x2438,0x2438,0x2438},  {0x2439,0x2439,0x2439},
1461   {0x243A,0x243A,0x243A},  {0x243B,0x243B,0x243B},
1462   {0x243C,0x243C,0x243C},  {0x243D,0x243D,0x243D},
1463   {0x243E,0x243E,0x243E},  {0x243F,0x243F,0x243F},
1464   {0x2440,0x2440,0x2440},  {0x2441,0x2441,0x2441},
1465   {0x2442,0x2442,0x2442},  {0x2443,0x2443,0x2443},
1466   {0x2444,0x2444,0x2444},  {0x2445,0x2445,0x2445},
1467   {0x2446,0x2446,0x2446},  {0x2447,0x2447,0x2447},
1468   {0x2448,0x2448,0x2448},  {0x2449,0x2449,0x2449},
1469   {0x244A,0x244A,0x244A},  {0x244B,0x244B,0x244B},
1470   {0x244C,0x244C,0x244C},  {0x244D,0x244D,0x244D},
1471   {0x244E,0x244E,0x244E},  {0x244F,0x244F,0x244F},
1472   {0x2450,0x2450,0x2450},  {0x2451,0x2451,0x2451},
1473   {0x2452,0x2452,0x2452},  {0x2453,0x2453,0x2453},
1474   {0x2454,0x2454,0x2454},  {0x2455,0x2455,0x2455},
1475   {0x2456,0x2456,0x2456},  {0x2457,0x2457,0x2457},
1476   {0x2458,0x2458,0x2458},  {0x2459,0x2459,0x2459},
1477   {0x245A,0x245A,0x245A},  {0x245B,0x245B,0x245B},
1478   {0x245C,0x245C,0x245C},  {0x245D,0x245D,0x245D},
1479   {0x245E,0x245E,0x245E},  {0x245F,0x245F,0x245F},
1480   {0x2460,0x2460,0x2460},  {0x2461,0x2461,0x2461},
1481   {0x2462,0x2462,0x2462},  {0x2463,0x2463,0x2463},
1482   {0x2464,0x2464,0x2464},  {0x2465,0x2465,0x2465},
1483   {0x2466,0x2466,0x2466},  {0x2467,0x2467,0x2467},
1484   {0x2468,0x2468,0x2468},  {0x2469,0x2469,0x2469},
1485   {0x246A,0x246A,0x246A},  {0x246B,0x246B,0x246B},
1486   {0x246C,0x246C,0x246C},  {0x246D,0x246D,0x246D},
1487   {0x246E,0x246E,0x246E},  {0x246F,0x246F,0x246F},
1488   {0x2470,0x2470,0x2470},  {0x2471,0x2471,0x2471},
1489   {0x2472,0x2472,0x2472},  {0x2473,0x2473,0x2473},
1490   {0x2474,0x2474,0x2474},  {0x2475,0x2475,0x2475},
1491   {0x2476,0x2476,0x2476},  {0x2477,0x2477,0x2477},
1492   {0x2478,0x2478,0x2478},  {0x2479,0x2479,0x2479},
1493   {0x247A,0x247A,0x247A},  {0x247B,0x247B,0x247B},
1494   {0x247C,0x247C,0x247C},  {0x247D,0x247D,0x247D},
1495   {0x247E,0x247E,0x247E},  {0x247F,0x247F,0x247F},
1496   {0x2480,0x2480,0x2480},  {0x2481,0x2481,0x2481},
1497   {0x2482,0x2482,0x2482},  {0x2483,0x2483,0x2483},
1498   {0x2484,0x2484,0x2484},  {0x2485,0x2485,0x2485},
1499   {0x2486,0x2486,0x2486},  {0x2487,0x2487,0x2487},
1500   {0x2488,0x2488,0x2488},  {0x2489,0x2489,0x2489},
1501   {0x248A,0x248A,0x248A},  {0x248B,0x248B,0x248B},
1502   {0x248C,0x248C,0x248C},  {0x248D,0x248D,0x248D},
1503   {0x248E,0x248E,0x248E},  {0x248F,0x248F,0x248F},
1504   {0x2490,0x2490,0x2490},  {0x2491,0x2491,0x2491},
1505   {0x2492,0x2492,0x2492},  {0x2493,0x2493,0x2493},
1506   {0x2494,0x2494,0x2494},  {0x2495,0x2495,0x2495},
1507   {0x2496,0x2496,0x2496},  {0x2497,0x2497,0x2497},
1508   {0x2498,0x2498,0x2498},  {0x2499,0x2499,0x2499},
1509   {0x249A,0x249A,0x249A},  {0x249B,0x249B,0x249B},
1510   {0x249C,0x249C,0x249C},  {0x249D,0x249D,0x249D},
1511   {0x249E,0x249E,0x249E},  {0x249F,0x249F,0x249F},
1512   {0x24A0,0x24A0,0x24A0},  {0x24A1,0x24A1,0x24A1},
1513   {0x24A2,0x24A2,0x24A2},  {0x24A3,0x24A3,0x24A3},
1514   {0x24A4,0x24A4,0x24A4},  {0x24A5,0x24A5,0x24A5},
1515   {0x24A6,0x24A6,0x24A6},  {0x24A7,0x24A7,0x24A7},
1516   {0x24A8,0x24A8,0x24A8},  {0x24A9,0x24A9,0x24A9},
1517   {0x24AA,0x24AA,0x24AA},  {0x24AB,0x24AB,0x24AB},
1518   {0x24AC,0x24AC,0x24AC},  {0x24AD,0x24AD,0x24AD},
1519   {0x24AE,0x24AE,0x24AE},  {0x24AF,0x24AF,0x24AF},
1520   {0x24B0,0x24B0,0x24B0},  {0x24B1,0x24B1,0x24B1},
1521   {0x24B2,0x24B2,0x24B2},  {0x24B3,0x24B3,0x24B3},
1522   {0x24B4,0x24B4,0x24B4},  {0x24B5,0x24B5,0x24B5},
1523   {0x24B6,0x24D0,0x24B6},  {0x24B7,0x24D1,0x24B7},
1524   {0x24B8,0x24D2,0x24B8},  {0x24B9,0x24D3,0x24B9},
1525   {0x24BA,0x24D4,0x24BA},  {0x24BB,0x24D5,0x24BB},
1526   {0x24BC,0x24D6,0x24BC},  {0x24BD,0x24D7,0x24BD},
1527   {0x24BE,0x24D8,0x24BE},  {0x24BF,0x24D9,0x24BF},
1528   {0x24C0,0x24DA,0x24C0},  {0x24C1,0x24DB,0x24C1},
1529   {0x24C2,0x24DC,0x24C2},  {0x24C3,0x24DD,0x24C3},
1530   {0x24C4,0x24DE,0x24C4},  {0x24C5,0x24DF,0x24C5},
1531   {0x24C6,0x24E0,0x24C6},  {0x24C7,0x24E1,0x24C7},
1532   {0x24C8,0x24E2,0x24C8},  {0x24C9,0x24E3,0x24C9},
1533   {0x24CA,0x24E4,0x24CA},  {0x24CB,0x24E5,0x24CB},
1534   {0x24CC,0x24E6,0x24CC},  {0x24CD,0x24E7,0x24CD},
1535   {0x24CE,0x24E8,0x24CE},  {0x24CF,0x24E9,0x24CF},
1536   {0x24B6,0x24D0,0x24B6},  {0x24B7,0x24D1,0x24B7},
1537   {0x24B8,0x24D2,0x24B8},  {0x24B9,0x24D3,0x24B9},
1538   {0x24BA,0x24D4,0x24BA},  {0x24BB,0x24D5,0x24BB},
1539   {0x24BC,0x24D6,0x24BC},  {0x24BD,0x24D7,0x24BD},
1540   {0x24BE,0x24D8,0x24BE},  {0x24BF,0x24D9,0x24BF},
1541   {0x24C0,0x24DA,0x24C0},  {0x24C1,0x24DB,0x24C1},
1542   {0x24C2,0x24DC,0x24C2},  {0x24C3,0x24DD,0x24C3},
1543   {0x24C4,0x24DE,0x24C4},  {0x24C5,0x24DF,0x24C5},
1544   {0x24C6,0x24E0,0x24C6},  {0x24C7,0x24E1,0x24C7},
1545   {0x24C8,0x24E2,0x24C8},  {0x24C9,0x24E3,0x24C9},
1546   {0x24CA,0x24E4,0x24CA},  {0x24CB,0x24E5,0x24CB},
1547   {0x24CC,0x24E6,0x24CC},  {0x24CD,0x24E7,0x24CD},
1548   {0x24CE,0x24E8,0x24CE},  {0x24CF,0x24E9,0x24CF},
1549   {0x24EA,0x24EA,0x24EA},  {0x24EB,0x24EB,0x24EB},
1550   {0x24EC,0x24EC,0x24EC},  {0x24ED,0x24ED,0x24ED},
1551   {0x24EE,0x24EE,0x24EE},  {0x24EF,0x24EF,0x24EF},
1552   {0x24F0,0x24F0,0x24F0},  {0x24F1,0x24F1,0x24F1},
1553   {0x24F2,0x24F2,0x24F2},  {0x24F3,0x24F3,0x24F3},
1554   {0x24F4,0x24F4,0x24F4},  {0x24F5,0x24F5,0x24F5},
1555   {0x24F6,0x24F6,0x24F6},  {0x24F7,0x24F7,0x24F7},
1556   {0x24F8,0x24F8,0x24F8},  {0x24F9,0x24F9,0x24F9},
1557   {0x24FA,0x24FA,0x24FA},  {0x24FB,0x24FB,0x24FB},
1558   {0x24FC,0x24FC,0x24FC},  {0x24FD,0x24FD,0x24FD},
1559   {0x24FE,0x24FE,0x24FE},  {0x24FF,0x24FF,0x24FF}
1560 };
1561 
1562 static MY_UNICASE_CHARACTER planeFF[]={
1563   {0xFF00,0xFF00,0xFF00},  {0xFF01,0xFF01,0xFF01},
1564   {0xFF02,0xFF02,0xFF02},  {0xFF03,0xFF03,0xFF03},
1565   {0xFF04,0xFF04,0xFF04},  {0xFF05,0xFF05,0xFF05},
1566   {0xFF06,0xFF06,0xFF06},  {0xFF07,0xFF07,0xFF07},
1567   {0xFF08,0xFF08,0xFF08},  {0xFF09,0xFF09,0xFF09},
1568   {0xFF0A,0xFF0A,0xFF0A},  {0xFF0B,0xFF0B,0xFF0B},
1569   {0xFF0C,0xFF0C,0xFF0C},  {0xFF0D,0xFF0D,0xFF0D},
1570   {0xFF0E,0xFF0E,0xFF0E},  {0xFF0F,0xFF0F,0xFF0F},
1571   {0xFF10,0xFF10,0xFF10},  {0xFF11,0xFF11,0xFF11},
1572   {0xFF12,0xFF12,0xFF12},  {0xFF13,0xFF13,0xFF13},
1573   {0xFF14,0xFF14,0xFF14},  {0xFF15,0xFF15,0xFF15},
1574   {0xFF16,0xFF16,0xFF16},  {0xFF17,0xFF17,0xFF17},
1575   {0xFF18,0xFF18,0xFF18},  {0xFF19,0xFF19,0xFF19},
1576   {0xFF1A,0xFF1A,0xFF1A},  {0xFF1B,0xFF1B,0xFF1B},
1577   {0xFF1C,0xFF1C,0xFF1C},  {0xFF1D,0xFF1D,0xFF1D},
1578   {0xFF1E,0xFF1E,0xFF1E},  {0xFF1F,0xFF1F,0xFF1F},
1579   {0xFF20,0xFF20,0xFF20},  {0xFF21,0xFF41,0xFF21},
1580   {0xFF22,0xFF42,0xFF22},  {0xFF23,0xFF43,0xFF23},
1581   {0xFF24,0xFF44,0xFF24},  {0xFF25,0xFF45,0xFF25},
1582   {0xFF26,0xFF46,0xFF26},  {0xFF27,0xFF47,0xFF27},
1583   {0xFF28,0xFF48,0xFF28},  {0xFF29,0xFF49,0xFF29},
1584   {0xFF2A,0xFF4A,0xFF2A},  {0xFF2B,0xFF4B,0xFF2B},
1585   {0xFF2C,0xFF4C,0xFF2C},  {0xFF2D,0xFF4D,0xFF2D},
1586   {0xFF2E,0xFF4E,0xFF2E},  {0xFF2F,0xFF4F,0xFF2F},
1587   {0xFF30,0xFF50,0xFF30},  {0xFF31,0xFF51,0xFF31},
1588   {0xFF32,0xFF52,0xFF32},  {0xFF33,0xFF53,0xFF33},
1589   {0xFF34,0xFF54,0xFF34},  {0xFF35,0xFF55,0xFF35},
1590   {0xFF36,0xFF56,0xFF36},  {0xFF37,0xFF57,0xFF37},
1591   {0xFF38,0xFF58,0xFF38},  {0xFF39,0xFF59,0xFF39},
1592   {0xFF3A,0xFF5A,0xFF3A},  {0xFF3B,0xFF3B,0xFF3B},
1593   {0xFF3C,0xFF3C,0xFF3C},  {0xFF3D,0xFF3D,0xFF3D},
1594   {0xFF3E,0xFF3E,0xFF3E},  {0xFF3F,0xFF3F,0xFF3F},
1595   {0xFF40,0xFF40,0xFF40},  {0xFF21,0xFF41,0xFF21},
1596   {0xFF22,0xFF42,0xFF22},  {0xFF23,0xFF43,0xFF23},
1597   {0xFF24,0xFF44,0xFF24},  {0xFF25,0xFF45,0xFF25},
1598   {0xFF26,0xFF46,0xFF26},  {0xFF27,0xFF47,0xFF27},
1599   {0xFF28,0xFF48,0xFF28},  {0xFF29,0xFF49,0xFF29},
1600   {0xFF2A,0xFF4A,0xFF2A},  {0xFF2B,0xFF4B,0xFF2B},
1601   {0xFF2C,0xFF4C,0xFF2C},  {0xFF2D,0xFF4D,0xFF2D},
1602   {0xFF2E,0xFF4E,0xFF2E},  {0xFF2F,0xFF4F,0xFF2F},
1603   {0xFF30,0xFF50,0xFF30},  {0xFF31,0xFF51,0xFF31},
1604   {0xFF32,0xFF52,0xFF32},  {0xFF33,0xFF53,0xFF33},
1605   {0xFF34,0xFF54,0xFF34},  {0xFF35,0xFF55,0xFF35},
1606   {0xFF36,0xFF56,0xFF36},  {0xFF37,0xFF57,0xFF37},
1607   {0xFF38,0xFF58,0xFF38},  {0xFF39,0xFF59,0xFF39},
1608   {0xFF3A,0xFF5A,0xFF3A},  {0xFF5B,0xFF5B,0xFF5B},
1609   {0xFF5C,0xFF5C,0xFF5C},  {0xFF5D,0xFF5D,0xFF5D},
1610   {0xFF5E,0xFF5E,0xFF5E},  {0xFF5F,0xFF5F,0xFF5F},
1611   {0xFF60,0xFF60,0xFF60},  {0xFF61,0xFF61,0xFF61},
1612   {0xFF62,0xFF62,0xFF62},  {0xFF63,0xFF63,0xFF63},
1613   {0xFF64,0xFF64,0xFF64},  {0xFF65,0xFF65,0xFF65},
1614   {0xFF66,0xFF66,0xFF66},  {0xFF67,0xFF67,0xFF67},
1615   {0xFF68,0xFF68,0xFF68},  {0xFF69,0xFF69,0xFF69},
1616   {0xFF6A,0xFF6A,0xFF6A},  {0xFF6B,0xFF6B,0xFF6B},
1617   {0xFF6C,0xFF6C,0xFF6C},  {0xFF6D,0xFF6D,0xFF6D},
1618   {0xFF6E,0xFF6E,0xFF6E},  {0xFF6F,0xFF6F,0xFF6F},
1619   {0xFF70,0xFF70,0xFF70},  {0xFF71,0xFF71,0xFF71},
1620   {0xFF72,0xFF72,0xFF72},  {0xFF73,0xFF73,0xFF73},
1621   {0xFF74,0xFF74,0xFF74},  {0xFF75,0xFF75,0xFF75},
1622   {0xFF76,0xFF76,0xFF76},  {0xFF77,0xFF77,0xFF77},
1623   {0xFF78,0xFF78,0xFF78},  {0xFF79,0xFF79,0xFF79},
1624   {0xFF7A,0xFF7A,0xFF7A},  {0xFF7B,0xFF7B,0xFF7B},
1625   {0xFF7C,0xFF7C,0xFF7C},  {0xFF7D,0xFF7D,0xFF7D},
1626   {0xFF7E,0xFF7E,0xFF7E},  {0xFF7F,0xFF7F,0xFF7F},
1627   {0xFF80,0xFF80,0xFF80},  {0xFF81,0xFF81,0xFF81},
1628   {0xFF82,0xFF82,0xFF82},  {0xFF83,0xFF83,0xFF83},
1629   {0xFF84,0xFF84,0xFF84},  {0xFF85,0xFF85,0xFF85},
1630   {0xFF86,0xFF86,0xFF86},  {0xFF87,0xFF87,0xFF87},
1631   {0xFF88,0xFF88,0xFF88},  {0xFF89,0xFF89,0xFF89},
1632   {0xFF8A,0xFF8A,0xFF8A},  {0xFF8B,0xFF8B,0xFF8B},
1633   {0xFF8C,0xFF8C,0xFF8C},  {0xFF8D,0xFF8D,0xFF8D},
1634   {0xFF8E,0xFF8E,0xFF8E},  {0xFF8F,0xFF8F,0xFF8F},
1635   {0xFF90,0xFF90,0xFF90},  {0xFF91,0xFF91,0xFF91},
1636   {0xFF92,0xFF92,0xFF92},  {0xFF93,0xFF93,0xFF93},
1637   {0xFF94,0xFF94,0xFF94},  {0xFF95,0xFF95,0xFF95},
1638   {0xFF96,0xFF96,0xFF96},  {0xFF97,0xFF97,0xFF97},
1639   {0xFF98,0xFF98,0xFF98},  {0xFF99,0xFF99,0xFF99},
1640   {0xFF9A,0xFF9A,0xFF9A},  {0xFF9B,0xFF9B,0xFF9B},
1641   {0xFF9C,0xFF9C,0xFF9C},  {0xFF9D,0xFF9D,0xFF9D},
1642   {0xFF9E,0xFF9E,0xFF9E},  {0xFF9F,0xFF9F,0xFF9F},
1643   {0xFFA0,0xFFA0,0xFFA0},  {0xFFA1,0xFFA1,0xFFA1},
1644   {0xFFA2,0xFFA2,0xFFA2},  {0xFFA3,0xFFA3,0xFFA3},
1645   {0xFFA4,0xFFA4,0xFFA4},  {0xFFA5,0xFFA5,0xFFA5},
1646   {0xFFA6,0xFFA6,0xFFA6},  {0xFFA7,0xFFA7,0xFFA7},
1647   {0xFFA8,0xFFA8,0xFFA8},  {0xFFA9,0xFFA9,0xFFA9},
1648   {0xFFAA,0xFFAA,0xFFAA},  {0xFFAB,0xFFAB,0xFFAB},
1649   {0xFFAC,0xFFAC,0xFFAC},  {0xFFAD,0xFFAD,0xFFAD},
1650   {0xFFAE,0xFFAE,0xFFAE},  {0xFFAF,0xFFAF,0xFFAF},
1651   {0xFFB0,0xFFB0,0xFFB0},  {0xFFB1,0xFFB1,0xFFB1},
1652   {0xFFB2,0xFFB2,0xFFB2},  {0xFFB3,0xFFB3,0xFFB3},
1653   {0xFFB4,0xFFB4,0xFFB4},  {0xFFB5,0xFFB5,0xFFB5},
1654   {0xFFB6,0xFFB6,0xFFB6},  {0xFFB7,0xFFB7,0xFFB7},
1655   {0xFFB8,0xFFB8,0xFFB8},  {0xFFB9,0xFFB9,0xFFB9},
1656   {0xFFBA,0xFFBA,0xFFBA},  {0xFFBB,0xFFBB,0xFFBB},
1657   {0xFFBC,0xFFBC,0xFFBC},  {0xFFBD,0xFFBD,0xFFBD},
1658   {0xFFBE,0xFFBE,0xFFBE},  {0xFFBF,0xFFBF,0xFFBF},
1659   {0xFFC0,0xFFC0,0xFFC0},  {0xFFC1,0xFFC1,0xFFC1},
1660   {0xFFC2,0xFFC2,0xFFC2},  {0xFFC3,0xFFC3,0xFFC3},
1661   {0xFFC4,0xFFC4,0xFFC4},  {0xFFC5,0xFFC5,0xFFC5},
1662   {0xFFC6,0xFFC6,0xFFC6},  {0xFFC7,0xFFC7,0xFFC7},
1663   {0xFFC8,0xFFC8,0xFFC8},  {0xFFC9,0xFFC9,0xFFC9},
1664   {0xFFCA,0xFFCA,0xFFCA},  {0xFFCB,0xFFCB,0xFFCB},
1665   {0xFFCC,0xFFCC,0xFFCC},  {0xFFCD,0xFFCD,0xFFCD},
1666   {0xFFCE,0xFFCE,0xFFCE},  {0xFFCF,0xFFCF,0xFFCF},
1667   {0xFFD0,0xFFD0,0xFFD0},  {0xFFD1,0xFFD1,0xFFD1},
1668   {0xFFD2,0xFFD2,0xFFD2},  {0xFFD3,0xFFD3,0xFFD3},
1669   {0xFFD4,0xFFD4,0xFFD4},  {0xFFD5,0xFFD5,0xFFD5},
1670   {0xFFD6,0xFFD6,0xFFD6},  {0xFFD7,0xFFD7,0xFFD7},
1671   {0xFFD8,0xFFD8,0xFFD8},  {0xFFD9,0xFFD9,0xFFD9},
1672   {0xFFDA,0xFFDA,0xFFDA},  {0xFFDB,0xFFDB,0xFFDB},
1673   {0xFFDC,0xFFDC,0xFFDC},  {0xFFDD,0xFFDD,0xFFDD},
1674   {0xFFDE,0xFFDE,0xFFDE},  {0xFFDF,0xFFDF,0xFFDF},
1675   {0xFFE0,0xFFE0,0xFFE0},  {0xFFE1,0xFFE1,0xFFE1},
1676   {0xFFE2,0xFFE2,0xFFE2},  {0xFFE3,0xFFE3,0xFFE3},
1677   {0xFFE4,0xFFE4,0xFFE4},  {0xFFE5,0xFFE5,0xFFE5},
1678   {0xFFE6,0xFFE6,0xFFE6},  {0xFFE7,0xFFE7,0xFFE7},
1679   {0xFFE8,0xFFE8,0xFFE8},  {0xFFE9,0xFFE9,0xFFE9},
1680   {0xFFEA,0xFFEA,0xFFEA},  {0xFFEB,0xFFEB,0xFFEB},
1681   {0xFFEC,0xFFEC,0xFFEC},  {0xFFED,0xFFED,0xFFED},
1682   {0xFFEE,0xFFEE,0xFFEE},  {0xFFEF,0xFFEF,0xFFEF},
1683   {0xFFF0,0xFFF0,0xFFF0},  {0xFFF1,0xFFF1,0xFFF1},
1684   {0xFFF2,0xFFF2,0xFFF2},  {0xFFF3,0xFFF3,0xFFF3},
1685   {0xFFF4,0xFFF4,0xFFF4},  {0xFFF5,0xFFF5,0xFFF5},
1686   {0xFFF6,0xFFF6,0xFFF6},  {0xFFF7,0xFFF7,0xFFF7},
1687   {0xFFF8,0xFFF8,0xFFF8},  {0xFFF9,0xFFF9,0xFFF9},
1688   {0xFFFA,0xFFFA,0xFFFA},  {0xFFFB,0xFFFB,0xFFFB},
1689   {0xFFFC,0xFFFC,0xFFFC},  {0xFFFD,0xFFFD,0xFFFD},
1690   {0xFFFE,0xFFFE,0xFFFE},  {0xFFFF,0xFFFF,0xFFFF}
1691 };
1692 
1693 
1694 MY_UNICASE_CHARACTER *my_unicase_default_pages[256]=
1695 {
1696     my_unicase_default_page00,
1697              plane01, plane02, plane03, plane04, plane05, NULL,    NULL,
1698     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1699     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1700     NULL,    NULL,    NULL,    NULL,    NULL,    NULL, plane1E, plane1F,
1701     NULL, plane21,    NULL,    NULL, plane24,    NULL,    NULL,    NULL,
1702     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1703     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1704     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1705     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1706     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1707     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1708     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1709     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1710     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1711     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1712     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1713     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1714     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1715     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1716     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1717     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1718     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1719     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1720     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1721     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1722     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1723     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1724     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1725     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1726     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1727     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1728     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL, planeFF
1729 };
1730 
1731 
1732 MY_UNICASE_INFO my_unicase_default=
1733 {
1734   MY_UNICASE_INFO_DEFAULT_MAXCHAR,
1735   my_unicase_default_pages
1736 };
1737 
1738 
1739 /*
1740   Reproduce old utf8_general_ci behaviour before we fixed Bug#27877.
1741 */
1742 MY_UNICASE_CHARACTER *my_unicase_pages_mysql500[256]={
1743  plane00_mysql500,
1744           plane01, plane02, plane03, plane04, plane05,    NULL,    NULL,
1745     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1746     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1747     NULL,    NULL,    NULL,    NULL,    NULL,    NULL, plane1E, plane1F,
1748     NULL, plane21,    NULL,    NULL, plane24,    NULL,    NULL,    NULL,
1749     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1750     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1751     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1752     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1753     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1754     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1755     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1756     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1757     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1758     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1759     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1760     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1761     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1762     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1763     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1764     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1765     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1766     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1767     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1768     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1769     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1770     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1771     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1772     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1773     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1774     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1775     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL, planeFF
1776 
1777 };
1778 
1779 
1780 MY_UNICASE_INFO my_unicase_mysql500=
1781 {
1782   0xFFFF,
1783   my_unicase_pages_mysql500
1784 };
1785 
1786 
1787 /*
1788   Turkish lower/upper mapping:
1789   1. LOWER(0x0049 LATIN CAPITAL LETTER I) ->
1790            0x0131 LATIN SMALL   LETTER DOTLESS I
1791   2. UPPER(0x0069 LATIN SMALL   LETTER I) ->
1792            0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE
1793 */
1794 
1795 static MY_UNICASE_CHARACTER turk00[]=
1796 {
1797   {0x0000,0x0000,0x0000},  {0x0001,0x0001,0x0001},
1798   {0x0002,0x0002,0x0002},  {0x0003,0x0003,0x0003},
1799   {0x0004,0x0004,0x0004},  {0x0005,0x0005,0x0005},
1800   {0x0006,0x0006,0x0006},  {0x0007,0x0007,0x0007},
1801   {0x0008,0x0008,0x0008},  {0x0009,0x0009,0x0009},
1802   {0x000A,0x000A,0x000A},  {0x000B,0x000B,0x000B},
1803   {0x000C,0x000C,0x000C},  {0x000D,0x000D,0x000D},
1804   {0x000E,0x000E,0x000E},  {0x000F,0x000F,0x000F},
1805   {0x0010,0x0010,0x0010},  {0x0011,0x0011,0x0011},
1806   {0x0012,0x0012,0x0012},  {0x0013,0x0013,0x0013},
1807   {0x0014,0x0014,0x0014},  {0x0015,0x0015,0x0015},
1808   {0x0016,0x0016,0x0016},  {0x0017,0x0017,0x0017},
1809   {0x0018,0x0018,0x0018},  {0x0019,0x0019,0x0019},
1810   {0x001A,0x001A,0x001A},  {0x001B,0x001B,0x001B},
1811   {0x001C,0x001C,0x001C},  {0x001D,0x001D,0x001D},
1812   {0x001E,0x001E,0x001E},  {0x001F,0x001F,0x001F},
1813   {0x0020,0x0020,0x0020},  {0x0021,0x0021,0x0021},
1814   {0x0022,0x0022,0x0022},  {0x0023,0x0023,0x0023},
1815   {0x0024,0x0024,0x0024},  {0x0025,0x0025,0x0025},
1816   {0x0026,0x0026,0x0026},  {0x0027,0x0027,0x0027},
1817   {0x0028,0x0028,0x0028},  {0x0029,0x0029,0x0029},
1818   {0x002A,0x002A,0x002A},  {0x002B,0x002B,0x002B},
1819   {0x002C,0x002C,0x002C},  {0x002D,0x002D,0x002D},
1820   {0x002E,0x002E,0x002E},  {0x002F,0x002F,0x002F},
1821   {0x0030,0x0030,0x0030},  {0x0031,0x0031,0x0031},
1822   {0x0032,0x0032,0x0032},  {0x0033,0x0033,0x0033},
1823   {0x0034,0x0034,0x0034},  {0x0035,0x0035,0x0035},
1824   {0x0036,0x0036,0x0036},  {0x0037,0x0037,0x0037},
1825   {0x0038,0x0038,0x0038},  {0x0039,0x0039,0x0039},
1826   {0x003A,0x003A,0x003A},  {0x003B,0x003B,0x003B},
1827   {0x003C,0x003C,0x003C},  {0x003D,0x003D,0x003D},
1828   {0x003E,0x003E,0x003E},  {0x003F,0x003F,0x003F},
1829   {0x0040,0x0040,0x0040},  {0x0041,0x0061,0x0041},
1830   {0x0042,0x0062,0x0042},  {0x0043,0x0063,0x0043},
1831   {0x0044,0x0064,0x0044},  {0x0045,0x0065,0x0045},
1832   {0x0046,0x0066,0x0046},  {0x0047,0x0067,0x0047},
1833   {0x0048,0x0068,0x0048},  {0x0049,0x0131,0x0049},
1834   {0x004A,0x006A,0x004A},  {0x004B,0x006B,0x004B},
1835   {0x004C,0x006C,0x004C},  {0x004D,0x006D,0x004D},
1836   {0x004E,0x006E,0x004E},  {0x004F,0x006F,0x004F},
1837   {0x0050,0x0070,0x0050},  {0x0051,0x0071,0x0051},
1838   {0x0052,0x0072,0x0052},  {0x0053,0x0073,0x0053},
1839   {0x0054,0x0074,0x0054},  {0x0055,0x0075,0x0055},
1840   {0x0056,0x0076,0x0056},  {0x0057,0x0077,0x0057},
1841   {0x0058,0x0078,0x0058},  {0x0059,0x0079,0x0059},
1842   {0x005A,0x007A,0x005A},  {0x005B,0x005B,0x005B},
1843   {0x005C,0x005C,0x005C},  {0x005D,0x005D,0x005D},
1844   {0x005E,0x005E,0x005E},  {0x005F,0x005F,0x005F},
1845   {0x0060,0x0060,0x0060},  {0x0041,0x0061,0x0041},
1846   {0x0042,0x0062,0x0042},  {0x0043,0x0063,0x0043},
1847   {0x0044,0x0064,0x0044},  {0x0045,0x0065,0x0045},
1848   {0x0046,0x0066,0x0046},  {0x0047,0x0067,0x0047},
1849   {0x0048,0x0068,0x0048},  {0x0130,0x0069,0x0049},
1850   {0x004A,0x006A,0x004A},  {0x004B,0x006B,0x004B},
1851   {0x004C,0x006C,0x004C},  {0x004D,0x006D,0x004D},
1852   {0x004E,0x006E,0x004E},  {0x004F,0x006F,0x004F},
1853   {0x0050,0x0070,0x0050},  {0x0051,0x0071,0x0051},
1854   {0x0052,0x0072,0x0052},  {0x0053,0x0073,0x0053},
1855   {0x0054,0x0074,0x0054},  {0x0055,0x0075,0x0055},
1856   {0x0056,0x0076,0x0056},  {0x0057,0x0077,0x0057},
1857   {0x0058,0x0078,0x0058},  {0x0059,0x0079,0x0059},
1858   {0x005A,0x007A,0x005A},  {0x007B,0x007B,0x007B},
1859   {0x007C,0x007C,0x007C},  {0x007D,0x007D,0x007D},
1860   {0x007E,0x007E,0x007E},  {0x007F,0x007F,0x007F},
1861   {0x0080,0x0080,0x0080},  {0x0081,0x0081,0x0081},
1862   {0x0082,0x0082,0x0082},  {0x0083,0x0083,0x0083},
1863   {0x0084,0x0084,0x0084},  {0x0085,0x0085,0x0085},
1864   {0x0086,0x0086,0x0086},  {0x0087,0x0087,0x0087},
1865   {0x0088,0x0088,0x0088},  {0x0089,0x0089,0x0089},
1866   {0x008A,0x008A,0x008A},  {0x008B,0x008B,0x008B},
1867   {0x008C,0x008C,0x008C},  {0x008D,0x008D,0x008D},
1868   {0x008E,0x008E,0x008E},  {0x008F,0x008F,0x008F},
1869   {0x0090,0x0090,0x0090},  {0x0091,0x0091,0x0091},
1870   {0x0092,0x0092,0x0092},  {0x0093,0x0093,0x0093},
1871   {0x0094,0x0094,0x0094},  {0x0095,0x0095,0x0095},
1872   {0x0096,0x0096,0x0096},  {0x0097,0x0097,0x0097},
1873   {0x0098,0x0098,0x0098},  {0x0099,0x0099,0x0099},
1874   {0x009A,0x009A,0x009A},  {0x009B,0x009B,0x009B},
1875   {0x009C,0x009C,0x009C},  {0x009D,0x009D,0x009D},
1876   {0x009E,0x009E,0x009E},  {0x009F,0x009F,0x009F},
1877   {0x00A0,0x00A0,0x00A0},  {0x00A1,0x00A1,0x00A1},
1878   {0x00A2,0x00A2,0x00A2},  {0x00A3,0x00A3,0x00A3},
1879   {0x00A4,0x00A4,0x00A4},  {0x00A5,0x00A5,0x00A5},
1880   {0x00A6,0x00A6,0x00A6},  {0x00A7,0x00A7,0x00A7},
1881   {0x00A8,0x00A8,0x00A8},  {0x00A9,0x00A9,0x00A9},
1882   {0x00AA,0x00AA,0x00AA},  {0x00AB,0x00AB,0x00AB},
1883   {0x00AC,0x00AC,0x00AC},  {0x00AD,0x00AD,0x00AD},
1884   {0x00AE,0x00AE,0x00AE},  {0x00AF,0x00AF,0x00AF},
1885   {0x00B0,0x00B0,0x00B0},  {0x00B1,0x00B1,0x00B1},
1886   {0x00B2,0x00B2,0x00B2},  {0x00B3,0x00B3,0x00B3},
1887   {0x00B4,0x00B4,0x00B4},  {0x039C,0x00B5,0x039C},
1888   {0x00B6,0x00B6,0x00B6},  {0x00B7,0x00B7,0x00B7},
1889   {0x00B8,0x00B8,0x00B8},  {0x00B9,0x00B9,0x00B9},
1890   {0x00BA,0x00BA,0x00BA},  {0x00BB,0x00BB,0x00BB},
1891   {0x00BC,0x00BC,0x00BC},  {0x00BD,0x00BD,0x00BD},
1892   {0x00BE,0x00BE,0x00BE},  {0x00BF,0x00BF,0x00BF},
1893   {0x00C0,0x00E0,0x0041},  {0x00C1,0x00E1,0x0041},
1894   {0x00C2,0x00E2,0x0041},  {0x00C3,0x00E3,0x0041},
1895   {0x00C4,0x00E4,0x0041},  {0x00C5,0x00E5,0x0041},
1896   {0x00C6,0x00E6,0x00C6},  {0x00C7,0x00E7,0x0043},
1897   {0x00C8,0x00E8,0x0045},  {0x00C9,0x00E9,0x0045},
1898   {0x00CA,0x00EA,0x0045},  {0x00CB,0x00EB,0x0045},
1899   {0x00CC,0x00EC,0x0049},  {0x00CD,0x00ED,0x0049},
1900   {0x00CE,0x00EE,0x0049},  {0x00CF,0x00EF,0x0049},
1901   {0x00D0,0x00F0,0x00D0},  {0x00D1,0x00F1,0x004E},
1902   {0x00D2,0x00F2,0x004F},  {0x00D3,0x00F3,0x004F},
1903   {0x00D4,0x00F4,0x004F},  {0x00D5,0x00F5,0x004F},
1904   {0x00D6,0x00F6,0x004F},  {0x00D7,0x00D7,0x00D7},
1905   {0x00D8,0x00F8,0x00D8},  {0x00D9,0x00F9,0x0055},
1906   {0x00DA,0x00FA,0x0055},  {0x00DB,0x00FB,0x0055},
1907   {0x00DC,0x00FC,0x0055},  {0x00DD,0x00FD,0x0059},
1908   {0x00DE,0x00FE,0x00DE},  {0x00DF,0x00DF,0x00DF},
1909   {0x00C0,0x00E0,0x0041},  {0x00C1,0x00E1,0x0041},
1910   {0x00C2,0x00E2,0x0041},  {0x00C3,0x00E3,0x0041},
1911   {0x00C4,0x00E4,0x0041},  {0x00C5,0x00E5,0x0041},
1912   {0x00C6,0x00E6,0x00C6},  {0x00C7,0x00E7,0x0043},
1913   {0x00C8,0x00E8,0x0045},  {0x00C9,0x00E9,0x0045},
1914   {0x00CA,0x00EA,0x0045},  {0x00CB,0x00EB,0x0045},
1915   {0x00CC,0x00EC,0x0049},  {0x00CD,0x00ED,0x0049},
1916   {0x00CE,0x00EE,0x0049},  {0x00CF,0x00EF,0x0049},
1917   {0x00D0,0x00F0,0x00D0},  {0x00D1,0x00F1,0x004E},
1918   {0x00D2,0x00F2,0x004F},  {0x00D3,0x00F3,0x004F},
1919   {0x00D4,0x00F4,0x004F},  {0x00D5,0x00F5,0x004F},
1920   {0x00D6,0x00F6,0x004F},  {0x00F7,0x00F7,0x00F7},
1921   {0x00D8,0x00F8,0x00D8},  {0x00D9,0x00F9,0x0055},
1922   {0x00DA,0x00FA,0x0055},  {0x00DB,0x00FB,0x0055},
1923   {0x00DC,0x00FC,0x0055},  {0x00DD,0x00FD,0x0059},
1924   {0x00DE,0x00FE,0x00DE},  {0x0178,0x00FF,0x0059}
1925 };
1926 
1927 
1928 
1929 static MY_UNICASE_CHARACTER *my_unicase_pages_turkish[256]=
1930 {
1931   turk00, plane01, plane02, plane03, plane04, plane05,    NULL,    NULL,
1932     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1933     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1934     NULL,    NULL,    NULL,    NULL,    NULL,    NULL, plane1E, plane1F,
1935     NULL, plane21,    NULL,    NULL, plane24,    NULL,    NULL,    NULL,
1936     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1937     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1938     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1939     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1940     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1941     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1942     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1943     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1944     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1945     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1946     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1947     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1948     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1949     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1950     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1951     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1952     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1953     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1954     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1955     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1956     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1957     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1958     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1959     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1960     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1961     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
1962     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL, planeFF
1963 };
1964 
1965 
1966 MY_UNICASE_INFO my_unicase_turkish=
1967 {
1968   0xFFFF,
1969   my_unicase_pages_turkish
1970 };
1971 
1972 
1973 /* Unicode-5.2.0 case folding information */
1974 static MY_UNICASE_CHARACTER u520p00[]={
1975   {0x0000,0x0000,0x0000},  {0x0001,0x0001,0x0001}, /* 0000 */
1976   {0x0002,0x0002,0x0002},  {0x0003,0x0003,0x0003}, /* 0002 */
1977   {0x0004,0x0004,0x0004},  {0x0005,0x0005,0x0005}, /* 0004 */
1978   {0x0006,0x0006,0x0006},  {0x0007,0x0007,0x0007}, /* 0006 */
1979   {0x0008,0x0008,0x0008},  {0x0009,0x0009,0x0009}, /* 0008 */
1980   {0x000A,0x000A,0x000A},  {0x000B,0x000B,0x000B}, /* 000A */
1981   {0x000C,0x000C,0x000C},  {0x000D,0x000D,0x000D}, /* 000C */
1982   {0x000E,0x000E,0x000E},  {0x000F,0x000F,0x000F}, /* 000E */
1983   {0x0010,0x0010,0x0010},  {0x0011,0x0011,0x0011}, /* 0010 */
1984   {0x0012,0x0012,0x0012},  {0x0013,0x0013,0x0013}, /* 0012 */
1985   {0x0014,0x0014,0x0014},  {0x0015,0x0015,0x0015}, /* 0014 */
1986   {0x0016,0x0016,0x0016},  {0x0017,0x0017,0x0017}, /* 0016 */
1987   {0x0018,0x0018,0x0018},  {0x0019,0x0019,0x0019}, /* 0018 */
1988   {0x001A,0x001A,0x001A},  {0x001B,0x001B,0x001B}, /* 001A */
1989   {0x001C,0x001C,0x001C},  {0x001D,0x001D,0x001D}, /* 001C */
1990   {0x001E,0x001E,0x001E},  {0x001F,0x001F,0x001F}, /* 001E */
1991   {0x0020,0x0020,0x0020},  {0x0021,0x0021,0x0021}, /* 0020 */
1992   {0x0022,0x0022,0x0022},  {0x0023,0x0023,0x0023}, /* 0022 */
1993   {0x0024,0x0024,0x0024},  {0x0025,0x0025,0x0025}, /* 0024 */
1994   {0x0026,0x0026,0x0026},  {0x0027,0x0027,0x0027}, /* 0026 */
1995   {0x0028,0x0028,0x0028},  {0x0029,0x0029,0x0029}, /* 0028 */
1996   {0x002A,0x002A,0x002A},  {0x002B,0x002B,0x002B}, /* 002A */
1997   {0x002C,0x002C,0x002C},  {0x002D,0x002D,0x002D}, /* 002C */
1998   {0x002E,0x002E,0x002E},  {0x002F,0x002F,0x002F}, /* 002E */
1999   {0x0030,0x0030,0x0030},  {0x0031,0x0031,0x0031}, /* 0030 */
2000   {0x0032,0x0032,0x0032},  {0x0033,0x0033,0x0033}, /* 0032 */
2001   {0x0034,0x0034,0x0034},  {0x0035,0x0035,0x0035}, /* 0034 */
2002   {0x0036,0x0036,0x0036},  {0x0037,0x0037,0x0037}, /* 0036 */
2003   {0x0038,0x0038,0x0038},  {0x0039,0x0039,0x0039}, /* 0038 */
2004   {0x003A,0x003A,0x003A},  {0x003B,0x003B,0x003B}, /* 003A */
2005   {0x003C,0x003C,0x003C},  {0x003D,0x003D,0x003D}, /* 003C */
2006   {0x003E,0x003E,0x003E},  {0x003F,0x003F,0x003F}, /* 003E */
2007   {0x0040,0x0040,0x0040},  {0x0041,0x0061,0x0041}, /* 0040 */
2008   {0x0042,0x0062,0x0042},  {0x0043,0x0063,0x0043}, /* 0042 */
2009   {0x0044,0x0064,0x0044},  {0x0045,0x0065,0x0045}, /* 0044 */
2010   {0x0046,0x0066,0x0046},  {0x0047,0x0067,0x0047}, /* 0046 */
2011   {0x0048,0x0068,0x0048},  {0x0049,0x0069,0x0049}, /* 0048 */
2012   {0x004A,0x006A,0x004A},  {0x004B,0x006B,0x004B}, /* 004A */
2013   {0x004C,0x006C,0x004C},  {0x004D,0x006D,0x004D}, /* 004C */
2014   {0x004E,0x006E,0x004E},  {0x004F,0x006F,0x004F}, /* 004E */
2015   {0x0050,0x0070,0x0050},  {0x0051,0x0071,0x0051}, /* 0050 */
2016   {0x0052,0x0072,0x0052},  {0x0053,0x0073,0x0053}, /* 0052 */
2017   {0x0054,0x0074,0x0054},  {0x0055,0x0075,0x0055}, /* 0054 */
2018   {0x0056,0x0076,0x0056},  {0x0057,0x0077,0x0057}, /* 0056 */
2019   {0x0058,0x0078,0x0058},  {0x0059,0x0079,0x0059}, /* 0058 */
2020   {0x005A,0x007A,0x005A},  {0x005B,0x005B,0x005B}, /* 005A */
2021   {0x005C,0x005C,0x005C},  {0x005D,0x005D,0x005D}, /* 005C */
2022   {0x005E,0x005E,0x005E},  {0x005F,0x005F,0x005F}, /* 005E */
2023   {0x0060,0x0060,0x0060},  {0x0041,0x0061,0x0041}, /* 0060 */
2024   {0x0042,0x0062,0x0042},  {0x0043,0x0063,0x0043}, /* 0062 */
2025   {0x0044,0x0064,0x0044},  {0x0045,0x0065,0x0045}, /* 0064 */
2026   {0x0046,0x0066,0x0046},  {0x0047,0x0067,0x0047}, /* 0066 */
2027   {0x0048,0x0068,0x0048},  {0x0049,0x0069,0x0049}, /* 0068 */
2028   {0x004A,0x006A,0x004A},  {0x004B,0x006B,0x004B}, /* 006A */
2029   {0x004C,0x006C,0x004C},  {0x004D,0x006D,0x004D}, /* 006C */
2030   {0x004E,0x006E,0x004E},  {0x004F,0x006F,0x004F}, /* 006E */
2031   {0x0050,0x0070,0x0050},  {0x0051,0x0071,0x0051}, /* 0070 */
2032   {0x0052,0x0072,0x0052},  {0x0053,0x0073,0x0053}, /* 0072 */
2033   {0x0054,0x0074,0x0054},  {0x0055,0x0075,0x0055}, /* 0074 */
2034   {0x0056,0x0076,0x0056},  {0x0057,0x0077,0x0057}, /* 0076 */
2035   {0x0058,0x0078,0x0058},  {0x0059,0x0079,0x0059}, /* 0078 */
2036   {0x005A,0x007A,0x005A},  {0x007B,0x007B,0x007B}, /* 007A */
2037   {0x007C,0x007C,0x007C},  {0x007D,0x007D,0x007D}, /* 007C */
2038   {0x007E,0x007E,0x007E},  {0x007F,0x007F,0x007F}, /* 007E */
2039   {0x0080,0x0080,0x0080},  {0x0081,0x0081,0x0081}, /* 0080 */
2040   {0x0082,0x0082,0x0082},  {0x0083,0x0083,0x0083}, /* 0082 */
2041   {0x0084,0x0084,0x0084},  {0x0085,0x0085,0x0085}, /* 0084 */
2042   {0x0086,0x0086,0x0086},  {0x0087,0x0087,0x0087}, /* 0086 */
2043   {0x0088,0x0088,0x0088},  {0x0089,0x0089,0x0089}, /* 0088 */
2044   {0x008A,0x008A,0x008A},  {0x008B,0x008B,0x008B}, /* 008A */
2045   {0x008C,0x008C,0x008C},  {0x008D,0x008D,0x008D}, /* 008C */
2046   {0x008E,0x008E,0x008E},  {0x008F,0x008F,0x008F}, /* 008E */
2047   {0x0090,0x0090,0x0090},  {0x0091,0x0091,0x0091}, /* 0090 */
2048   {0x0092,0x0092,0x0092},  {0x0093,0x0093,0x0093}, /* 0092 */
2049   {0x0094,0x0094,0x0094},  {0x0095,0x0095,0x0095}, /* 0094 */
2050   {0x0096,0x0096,0x0096},  {0x0097,0x0097,0x0097}, /* 0096 */
2051   {0x0098,0x0098,0x0098},  {0x0099,0x0099,0x0099}, /* 0098 */
2052   {0x009A,0x009A,0x009A},  {0x009B,0x009B,0x009B}, /* 009A */
2053   {0x009C,0x009C,0x009C},  {0x009D,0x009D,0x009D}, /* 009C */
2054   {0x009E,0x009E,0x009E},  {0x009F,0x009F,0x009F}, /* 009E */
2055   {0x00A0,0x00A0,0x00A0},  {0x00A1,0x00A1,0x00A1}, /* 00A0 */
2056   {0x00A2,0x00A2,0x00A2},  {0x00A3,0x00A3,0x00A3}, /* 00A2 */
2057   {0x00A4,0x00A4,0x00A4},  {0x00A5,0x00A5,0x00A5}, /* 00A4 */
2058   {0x00A6,0x00A6,0x00A6},  {0x00A7,0x00A7,0x00A7}, /* 00A6 */
2059   {0x00A8,0x00A8,0x00A8},  {0x00A9,0x00A9,0x00A9}, /* 00A8 */
2060   {0x00AA,0x00AA,0x00AA},  {0x00AB,0x00AB,0x00AB}, /* 00AA */
2061   {0x00AC,0x00AC,0x00AC},  {0x00AD,0x00AD,0x00AD}, /* 00AC */
2062   {0x00AE,0x00AE,0x00AE},  {0x00AF,0x00AF,0x00AF}, /* 00AE */
2063   {0x00B0,0x00B0,0x00B0},  {0x00B1,0x00B1,0x00B1}, /* 00B0 */
2064   {0x00B2,0x00B2,0x00B2},  {0x00B3,0x00B3,0x00B3}, /* 00B2 */
2065   {0x00B4,0x00B4,0x00B4},  {0x039C,0x00B5,0x039C}, /* 00B4 */
2066   {0x00B6,0x00B6,0x00B6},  {0x00B7,0x00B7,0x00B7}, /* 00B6 */
2067   {0x00B8,0x00B8,0x00B8},  {0x00B9,0x00B9,0x00B9}, /* 00B8 */
2068   {0x00BA,0x00BA,0x00BA},  {0x00BB,0x00BB,0x00BB}, /* 00BA */
2069   {0x00BC,0x00BC,0x00BC},  {0x00BD,0x00BD,0x00BD}, /* 00BC */
2070   {0x00BE,0x00BE,0x00BE},  {0x00BF,0x00BF,0x00BF}, /* 00BE */
2071   {0x00C0,0x00E0,0x0041},  {0x00C1,0x00E1,0x0041}, /* 00C0 */
2072   {0x00C2,0x00E2,0x0041},  {0x00C3,0x00E3,0x0041}, /* 00C2 */
2073   {0x00C4,0x00E4,0x0041},  {0x00C5,0x00E5,0x0041}, /* 00C4 */
2074   {0x00C6,0x00E6,0x00C6},  {0x00C7,0x00E7,0x0043}, /* 00C6 */
2075   {0x00C8,0x00E8,0x0045},  {0x00C9,0x00E9,0x0045}, /* 00C8 */
2076   {0x00CA,0x00EA,0x0045},  {0x00CB,0x00EB,0x0045}, /* 00CA */
2077   {0x00CC,0x00EC,0x0049},  {0x00CD,0x00ED,0x0049}, /* 00CC */
2078   {0x00CE,0x00EE,0x0049},  {0x00CF,0x00EF,0x0049}, /* 00CE */
2079   {0x00D0,0x00F0,0x00D0},  {0x00D1,0x00F1,0x004E}, /* 00D0 */
2080   {0x00D2,0x00F2,0x004F},  {0x00D3,0x00F3,0x004F}, /* 00D2 */
2081   {0x00D4,0x00F4,0x004F},  {0x00D5,0x00F5,0x004F}, /* 00D4 */
2082   {0x00D6,0x00F6,0x004F},  {0x00D7,0x00D7,0x00D7}, /* 00D6 */
2083   {0x00D8,0x00F8,0x00D8},  {0x00D9,0x00F9,0x0055}, /* 00D8 */
2084   {0x00DA,0x00FA,0x0055},  {0x00DB,0x00FB,0x0055}, /* 00DA */
2085   {0x00DC,0x00FC,0x0055},  {0x00DD,0x00FD,0x0059}, /* 00DC */
2086   {0x00DE,0x00FE,0x00DE},  {0x00DF,0x00DF,0x0053}, /* 00DE */
2087   {0x00C0,0x00E0,0x0041},  {0x00C1,0x00E1,0x0041}, /* 00E0 */
2088   {0x00C2,0x00E2,0x0041},  {0x00C3,0x00E3,0x0041}, /* 00E2 */
2089   {0x00C4,0x00E4,0x0041},  {0x00C5,0x00E5,0x0041}, /* 00E4 */
2090   {0x00C6,0x00E6,0x00C6},  {0x00C7,0x00E7,0x0043}, /* 00E6 */
2091   {0x00C8,0x00E8,0x0045},  {0x00C9,0x00E9,0x0045}, /* 00E8 */
2092   {0x00CA,0x00EA,0x0045},  {0x00CB,0x00EB,0x0045}, /* 00EA */
2093   {0x00CC,0x00EC,0x0049},  {0x00CD,0x00ED,0x0049}, /* 00EC */
2094   {0x00CE,0x00EE,0x0049},  {0x00CF,0x00EF,0x0049}, /* 00EE */
2095   {0x00D0,0x00F0,0x00D0},  {0x00D1,0x00F1,0x004E}, /* 00F0 */
2096   {0x00D2,0x00F2,0x004F},  {0x00D3,0x00F3,0x004F}, /* 00F2 */
2097   {0x00D4,0x00F4,0x004F},  {0x00D5,0x00F5,0x004F}, /* 00F4 */
2098   {0x00D6,0x00F6,0x004F},  {0x00F7,0x00F7,0x00F7}, /* 00F6 */
2099   {0x00D8,0x00F8,0x00D8},  {0x00D9,0x00F9,0x0055}, /* 00F8 */
2100   {0x00DA,0x00FA,0x0055},  {0x00DB,0x00FB,0x0055}, /* 00FA */
2101   {0x00DC,0x00FC,0x0055},  {0x00DD,0x00FD,0x0059}, /* 00FC */
2102   {0x00DE,0x00FE,0x00DE},  {0x0178,0x00FF,0x0059} /* 00FE */
2103 };
2104 
2105 static MY_UNICASE_CHARACTER u520p01[]={
2106   {0x0100,0x0101,0x0041},  {0x0100,0x0101,0x0041}, /* 0100 */
2107   {0x0102,0x0103,0x0041},  {0x0102,0x0103,0x0041}, /* 0102 */
2108   {0x0104,0x0105,0x0041},  {0x0104,0x0105,0x0041}, /* 0104 */
2109   {0x0106,0x0107,0x0043},  {0x0106,0x0107,0x0043}, /* 0106 */
2110   {0x0108,0x0109,0x0043},  {0x0108,0x0109,0x0043}, /* 0108 */
2111   {0x010A,0x010B,0x0043},  {0x010A,0x010B,0x0043}, /* 010A */
2112   {0x010C,0x010D,0x0043},  {0x010C,0x010D,0x0043}, /* 010C */
2113   {0x010E,0x010F,0x0044},  {0x010E,0x010F,0x0044}, /* 010E */
2114   {0x0110,0x0111,0x0110},  {0x0110,0x0111,0x0110}, /* 0110 */
2115   {0x0112,0x0113,0x0045},  {0x0112,0x0113,0x0045}, /* 0112 */
2116   {0x0114,0x0115,0x0045},  {0x0114,0x0115,0x0045}, /* 0114 */
2117   {0x0116,0x0117,0x0045},  {0x0116,0x0117,0x0045}, /* 0116 */
2118   {0x0118,0x0119,0x0045},  {0x0118,0x0119,0x0045}, /* 0118 */
2119   {0x011A,0x011B,0x0045},  {0x011A,0x011B,0x0045}, /* 011A */
2120   {0x011C,0x011D,0x0047},  {0x011C,0x011D,0x0047}, /* 011C */
2121   {0x011E,0x011F,0x0047},  {0x011E,0x011F,0x0047}, /* 011E */
2122   {0x0120,0x0121,0x0047},  {0x0120,0x0121,0x0047}, /* 0120 */
2123   {0x0122,0x0123,0x0047},  {0x0122,0x0123,0x0047}, /* 0122 */
2124   {0x0124,0x0125,0x0048},  {0x0124,0x0125,0x0048}, /* 0124 */
2125   {0x0126,0x0127,0x0126},  {0x0126,0x0127,0x0126}, /* 0126 */
2126   {0x0128,0x0129,0x0049},  {0x0128,0x0129,0x0049}, /* 0128 */
2127   {0x012A,0x012B,0x0049},  {0x012A,0x012B,0x0049}, /* 012A */
2128   {0x012C,0x012D,0x0049},  {0x012C,0x012D,0x0049}, /* 012C */
2129   {0x012E,0x012F,0x0049},  {0x012E,0x012F,0x0049}, /* 012E */
2130   {0x0130,0x0069,0x0049},  {0x0049,0x0131,0x0049}, /* 0130 */
2131   {0x0132,0x0133,0x0132},  {0x0132,0x0133,0x0132}, /* 0132 */
2132   {0x0134,0x0135,0x004A},  {0x0134,0x0135,0x004A}, /* 0134 */
2133   {0x0136,0x0137,0x004B},  {0x0136,0x0137,0x004B}, /* 0136 */
2134   {0x0138,0x0138,0x0138},  {0x0139,0x013A,0x004C}, /* 0138 */
2135   {0x0139,0x013A,0x004C},  {0x013B,0x013C,0x004C}, /* 013A */
2136   {0x013B,0x013C,0x004C},  {0x013D,0x013E,0x004C}, /* 013C */
2137   {0x013D,0x013E,0x004C},  {0x013F,0x0140,0x013F}, /* 013E */
2138   {0x013F,0x0140,0x013F},  {0x0141,0x0142,0x0141}, /* 0140 */
2139   {0x0141,0x0142,0x0141},  {0x0143,0x0144,0x004E}, /* 0142 */
2140   {0x0143,0x0144,0x004E},  {0x0145,0x0146,0x004E}, /* 0144 */
2141   {0x0145,0x0146,0x004E},  {0x0147,0x0148,0x004E}, /* 0146 */
2142   {0x0147,0x0148,0x004E},  {0x0149,0x0149,0x0149}, /* 0148 */
2143   {0x014A,0x014B,0x014A},  {0x014A,0x014B,0x014A}, /* 014A */
2144   {0x014C,0x014D,0x004F},  {0x014C,0x014D,0x004F}, /* 014C */
2145   {0x014E,0x014F,0x004F},  {0x014E,0x014F,0x004F}, /* 014E */
2146   {0x0150,0x0151,0x004F},  {0x0150,0x0151,0x004F}, /* 0150 */
2147   {0x0152,0x0153,0x0152},  {0x0152,0x0153,0x0152}, /* 0152 */
2148   {0x0154,0x0155,0x0052},  {0x0154,0x0155,0x0052}, /* 0154 */
2149   {0x0156,0x0157,0x0052},  {0x0156,0x0157,0x0052}, /* 0156 */
2150   {0x0158,0x0159,0x0052},  {0x0158,0x0159,0x0052}, /* 0158 */
2151   {0x015A,0x015B,0x0053},  {0x015A,0x015B,0x0053}, /* 015A */
2152   {0x015C,0x015D,0x0053},  {0x015C,0x015D,0x0053}, /* 015C */
2153   {0x015E,0x015F,0x0053},  {0x015E,0x015F,0x0053}, /* 015E */
2154   {0x0160,0x0161,0x0053},  {0x0160,0x0161,0x0053}, /* 0160 */
2155   {0x0162,0x0163,0x0054},  {0x0162,0x0163,0x0054}, /* 0162 */
2156   {0x0164,0x0165,0x0054},  {0x0164,0x0165,0x0054}, /* 0164 */
2157   {0x0166,0x0167,0x0166},  {0x0166,0x0167,0x0166}, /* 0166 */
2158   {0x0168,0x0169,0x0055},  {0x0168,0x0169,0x0055}, /* 0168 */
2159   {0x016A,0x016B,0x0055},  {0x016A,0x016B,0x0055}, /* 016A */
2160   {0x016C,0x016D,0x0055},  {0x016C,0x016D,0x0055}, /* 016C */
2161   {0x016E,0x016F,0x0055},  {0x016E,0x016F,0x0055}, /* 016E */
2162   {0x0170,0x0171,0x0055},  {0x0170,0x0171,0x0055}, /* 0170 */
2163   {0x0172,0x0173,0x0055},  {0x0172,0x0173,0x0055}, /* 0172 */
2164   {0x0174,0x0175,0x0057},  {0x0174,0x0175,0x0057}, /* 0174 */
2165   {0x0176,0x0177,0x0059},  {0x0176,0x0177,0x0059}, /* 0176 */
2166   {0x0178,0x00FF,0x0059},  {0x0179,0x017A,0x005A}, /* 0178 */
2167   {0x0179,0x017A,0x005A},  {0x017B,0x017C,0x005A}, /* 017A */
2168   {0x017B,0x017C,0x005A},  {0x017D,0x017E,0x005A}, /* 017C */
2169   {0x017D,0x017E,0x005A},  {0x0053,0x017F,0x0053}, /* 017E */
2170   {0x0243,0x0180,0x0243},  {0x0181,0x0253,0x0181}, /* 0180 */
2171   {0x0182,0x0183,0x0182},  {0x0182,0x0183,0x0182}, /* 0182 */
2172   {0x0184,0x0185,0x0184},  {0x0184,0x0185,0x0184}, /* 0184 */
2173   {0x0186,0x0254,0x0186},  {0x0187,0x0188,0x0187}, /* 0186 */
2174   {0x0187,0x0188,0x0187},  {0x0189,0x0256,0x0189}, /* 0188 */
2175   {0x018A,0x0257,0x018A},  {0x018B,0x018C,0x018B}, /* 018A */
2176   {0x018B,0x018C,0x018B},  {0x018D,0x018D,0x018D}, /* 018C */
2177   {0x018E,0x01DD,0x018E},  {0x018F,0x0259,0x018F}, /* 018E */
2178   {0x0190,0x025B,0x0190},  {0x0191,0x0192,0x0191}, /* 0190 */
2179   {0x0191,0x0192,0x0191},  {0x0193,0x0260,0x0193}, /* 0192 */
2180   {0x0194,0x0263,0x0194},  {0x01F6,0x0195,0x01F6}, /* 0194 */
2181   {0x0196,0x0269,0x0196},  {0x0197,0x0268,0x0197}, /* 0196 */
2182   {0x0198,0x0199,0x0198},  {0x0198,0x0199,0x0198}, /* 0198 */
2183   {0x023D,0x019A,0x023D},  {0x019B,0x019B,0x019B}, /* 019A */
2184   {0x019C,0x026F,0x019C},  {0x019D,0x0272,0x019D}, /* 019C */
2185   {0x0220,0x019E,0x0220},  {0x019F,0x0275,0x019F}, /* 019E */
2186   {0x01A0,0x01A1,0x004F},  {0x01A0,0x01A1,0x004F}, /* 01A0 */
2187   {0x01A2,0x01A3,0x01A2},  {0x01A2,0x01A3,0x01A2}, /* 01A2 */
2188   {0x01A4,0x01A5,0x01A4},  {0x01A4,0x01A5,0x01A4}, /* 01A4 */
2189   {0x01A6,0x0280,0x01A6},  {0x01A7,0x01A8,0x01A7}, /* 01A6 */
2190   {0x01A7,0x01A8,0x01A7},  {0x01A9,0x0283,0x01A9}, /* 01A8 */
2191   {0x01AA,0x01AA,0x01AA},  {0x01AB,0x01AB,0x01AB}, /* 01AA */
2192   {0x01AC,0x01AD,0x01AC},  {0x01AC,0x01AD,0x01AC}, /* 01AC */
2193   {0x01AE,0x0288,0x01AE},  {0x01AF,0x01B0,0x0055}, /* 01AE */
2194   {0x01AF,0x01B0,0x0055},  {0x01B1,0x028A,0x01B1}, /* 01B0 */
2195   {0x01B2,0x028B,0x01B2},  {0x01B3,0x01B4,0x01B3}, /* 01B2 */
2196   {0x01B3,0x01B4,0x01B3},  {0x01B5,0x01B6,0x01B5}, /* 01B4 */
2197   {0x01B5,0x01B6,0x01B5},  {0x01B7,0x0292,0x01B7}, /* 01B6 */
2198   {0x01B8,0x01B9,0x01B8},  {0x01B8,0x01B9,0x01B8}, /* 01B8 */
2199   {0x01BA,0x01BA,0x01BA},  {0x01BB,0x01BB,0x01BB}, /* 01BA */
2200   {0x01BC,0x01BD,0x01BC},  {0x01BC,0x01BD,0x01BC}, /* 01BC */
2201   {0x01BE,0x01BE,0x01BE},  {0x01F7,0x01BF,0x01F7}, /* 01BE */
2202   {0x01C0,0x01C0,0x01C0},  {0x01C1,0x01C1,0x01C1}, /* 01C0 */
2203   {0x01C2,0x01C2,0x01C2},  {0x01C3,0x01C3,0x01C3}, /* 01C2 */
2204   {0x01C4,0x01C6,0x01C4},  {0x01C4,0x01C6,0x01C4}, /* 01C4 */
2205   {0x01C4,0x01C6,0x01C4},  {0x01C7,0x01C9,0x01C7}, /* 01C6 */
2206   {0x01C7,0x01C9,0x01C7},  {0x01C7,0x01C9,0x01C7}, /* 01C8 */
2207   {0x01CA,0x01CC,0x01CA},  {0x01CA,0x01CC,0x01CA}, /* 01CA */
2208   {0x01CA,0x01CC,0x01CA},  {0x01CD,0x01CE,0x0041}, /* 01CC */
2209   {0x01CD,0x01CE,0x0041},  {0x01CF,0x01D0,0x0049}, /* 01CE */
2210   {0x01CF,0x01D0,0x0049},  {0x01D1,0x01D2,0x004F}, /* 01D0 */
2211   {0x01D1,0x01D2,0x004F},  {0x01D3,0x01D4,0x0055}, /* 01D2 */
2212   {0x01D3,0x01D4,0x0055},  {0x01D5,0x01D6,0x0055}, /* 01D4 */
2213   {0x01D5,0x01D6,0x0055},  {0x01D7,0x01D8,0x0055}, /* 01D6 */
2214   {0x01D7,0x01D8,0x0055},  {0x01D9,0x01DA,0x0055}, /* 01D8 */
2215   {0x01D9,0x01DA,0x0055},  {0x01DB,0x01DC,0x0055}, /* 01DA */
2216   {0x01DB,0x01DC,0x0055},  {0x018E,0x01DD,0x018E}, /* 01DC */
2217   {0x01DE,0x01DF,0x0041},  {0x01DE,0x01DF,0x0041}, /* 01DE */
2218   {0x01E0,0x01E1,0x0041},  {0x01E0,0x01E1,0x0041}, /* 01E0 */
2219   {0x01E2,0x01E3,0x00C6},  {0x01E2,0x01E3,0x00C6}, /* 01E2 */
2220   {0x01E4,0x01E5,0x01E4},  {0x01E4,0x01E5,0x01E4}, /* 01E4 */
2221   {0x01E6,0x01E7,0x0047},  {0x01E6,0x01E7,0x0047}, /* 01E6 */
2222   {0x01E8,0x01E9,0x004B},  {0x01E8,0x01E9,0x004B}, /* 01E8 */
2223   {0x01EA,0x01EB,0x004F},  {0x01EA,0x01EB,0x004F}, /* 01EA */
2224   {0x01EC,0x01ED,0x004F},  {0x01EC,0x01ED,0x004F}, /* 01EC */
2225   {0x01EE,0x01EF,0x01B7},  {0x01EE,0x01EF,0x01B7}, /* 01EE */
2226   {0x01F0,0x01F0,0x004A},  {0x01F1,0x01F3,0x01F1}, /* 01F0 */
2227   {0x01F1,0x01F3,0x01F1},  {0x01F1,0x01F3,0x01F1}, /* 01F2 */
2228   {0x01F4,0x01F5,0x0047},  {0x01F4,0x01F5,0x0047}, /* 01F4 */
2229   {0x01F6,0x0195,0x01F6},  {0x01F7,0x01BF,0x01F7}, /* 01F6 */
2230   {0x01F8,0x01F9,0x004E},  {0x01F8,0x01F9,0x004E}, /* 01F8 */
2231   {0x01FA,0x01FB,0x0041},  {0x01FA,0x01FB,0x0041}, /* 01FA */
2232   {0x01FC,0x01FD,0x00C6},  {0x01FC,0x01FD,0x00C6}, /* 01FC */
2233   {0x01FE,0x01FF,0x00D8},  {0x01FE,0x01FF,0x00D8} /* 01FE */
2234 };
2235 
2236 static MY_UNICASE_CHARACTER u520p02[]={
2237   {0x0200,0x0201,0x0041},  {0x0200,0x0201,0x0041}, /* 0200 */
2238   {0x0202,0x0203,0x0041},  {0x0202,0x0203,0x0041}, /* 0202 */
2239   {0x0204,0x0205,0x0045},  {0x0204,0x0205,0x0045}, /* 0204 */
2240   {0x0206,0x0207,0x0045},  {0x0206,0x0207,0x0045}, /* 0206 */
2241   {0x0208,0x0209,0x0049},  {0x0208,0x0209,0x0049}, /* 0208 */
2242   {0x020A,0x020B,0x0049},  {0x020A,0x020B,0x0049}, /* 020A */
2243   {0x020C,0x020D,0x004F},  {0x020C,0x020D,0x004F}, /* 020C */
2244   {0x020E,0x020F,0x004F},  {0x020E,0x020F,0x004F}, /* 020E */
2245   {0x0210,0x0211,0x0052},  {0x0210,0x0211,0x0052}, /* 0210 */
2246   {0x0212,0x0213,0x0052},  {0x0212,0x0213,0x0052}, /* 0212 */
2247   {0x0214,0x0215,0x0055},  {0x0214,0x0215,0x0055}, /* 0214 */
2248   {0x0216,0x0217,0x0055},  {0x0216,0x0217,0x0055}, /* 0216 */
2249   {0x0218,0x0219,0x0053},  {0x0218,0x0219,0x0053}, /* 0218 */
2250   {0x021A,0x021B,0x0054},  {0x021A,0x021B,0x0054}, /* 021A */
2251   {0x021C,0x021D,0x021C},  {0x021C,0x021D,0x021C}, /* 021C */
2252   {0x021E,0x021F,0x0048},  {0x021E,0x021F,0x0048}, /* 021E */
2253   {0x0220,0x019E,0x0220},  {0x0221,0x0221,0x0221}, /* 0220 */
2254   {0x0222,0x0223,0x0222},  {0x0222,0x0223,0x0222}, /* 0222 */
2255   {0x0224,0x0225,0x0224},  {0x0224,0x0225,0x0224}, /* 0224 */
2256   {0x0226,0x0227,0x0041},  {0x0226,0x0227,0x0041}, /* 0226 */
2257   {0x0228,0x0229,0x0045},  {0x0228,0x0229,0x0045}, /* 0228 */
2258   {0x022A,0x022B,0x004F},  {0x022A,0x022B,0x004F}, /* 022A */
2259   {0x022C,0x022D,0x004F},  {0x022C,0x022D,0x004F}, /* 022C */
2260   {0x022E,0x022F,0x004F},  {0x022E,0x022F,0x004F}, /* 022E */
2261   {0x0230,0x0231,0x004F},  {0x0230,0x0231,0x004F}, /* 0230 */
2262   {0x0232,0x0233,0x0059},  {0x0232,0x0233,0x0059}, /* 0232 */
2263   {0x0234,0x0234,0x0234},  {0x0235,0x0235,0x0235}, /* 0234 */
2264   {0x0236,0x0236,0x0236},  {0x0237,0x0237,0x0237}, /* 0236 */
2265   {0x0238,0x0238,0x0238},  {0x0239,0x0239,0x0239}, /* 0238 */
2266   {0x023A,0x2C65,0x023A},  {0x023B,0x023C,0x023B}, /* 023A */
2267   {0x023B,0x023C,0x023B},  {0x023D,0x019A,0x023D}, /* 023C */
2268   {0x023E,0x2C66,0x023E},  {0x2C7E,0x023F,0x2C7E}, /* 023E */
2269   {0x2C7F,0x0240,0x2C7F},  {0x0241,0x0242,0x0241}, /* 0240 */
2270   {0x0241,0x0242,0x0241},  {0x0243,0x0180,0x0243}, /* 0242 */
2271   {0x0244,0x0289,0x0244},  {0x0245,0x028C,0x0245}, /* 0244 */
2272   {0x0246,0x0247,0x0246},  {0x0246,0x0247,0x0246}, /* 0246 */
2273   {0x0248,0x0249,0x0248},  {0x0248,0x0249,0x0248}, /* 0248 */
2274   {0x024A,0x024B,0x024A},  {0x024A,0x024B,0x024A}, /* 024A */
2275   {0x024C,0x024D,0x024C},  {0x024C,0x024D,0x024C}, /* 024C */
2276   {0x024E,0x024F,0x024E},  {0x024E,0x024F,0x024E}, /* 024E */
2277   {0x2C6F,0x0250,0x2C6F},  {0x2C6D,0x0251,0x2C6D}, /* 0250 */
2278   {0x2C70,0x0252,0x2C70},  {0x0181,0x0253,0x0181}, /* 0252 */
2279   {0x0186,0x0254,0x0186},  {0x0255,0x0255,0x0255}, /* 0254 */
2280   {0x0189,0x0256,0x0189},  {0x018A,0x0257,0x018A}, /* 0256 */
2281   {0x0258,0x0258,0x0258},  {0x018F,0x0259,0x018F}, /* 0258 */
2282   {0x025A,0x025A,0x025A},  {0x0190,0x025B,0x0190}, /* 025A */
2283   {0x025C,0x025C,0x025C},  {0x025D,0x025D,0x025D}, /* 025C */
2284   {0x025E,0x025E,0x025E},  {0x025F,0x025F,0x025F}, /* 025E */
2285   {0x0193,0x0260,0x0193},  {0x0261,0x0261,0x0261}, /* 0260 */
2286   {0x0262,0x0262,0x0262},  {0x0194,0x0263,0x0194}, /* 0262 */
2287   {0x0264,0x0264,0x0264},  {0x0265,0x0265,0x0265}, /* 0264 */
2288   {0x0266,0x0266,0x0266},  {0x0267,0x0267,0x0267}, /* 0266 */
2289   {0x0197,0x0268,0x0197},  {0x0196,0x0269,0x0196}, /* 0268 */
2290   {0x026A,0x026A,0x026A},  {0x2C62,0x026B,0x2C62}, /* 026A */
2291   {0x026C,0x026C,0x026C},  {0x026D,0x026D,0x026D}, /* 026C */
2292   {0x026E,0x026E,0x026E},  {0x019C,0x026F,0x019C}, /* 026E */
2293   {0x0270,0x0270,0x0270},  {0x2C6E,0x0271,0x2C6E}, /* 0270 */
2294   {0x019D,0x0272,0x019D},  {0x0273,0x0273,0x0273}, /* 0272 */
2295   {0x0274,0x0274,0x0274},  {0x019F,0x0275,0x019F}, /* 0274 */
2296   {0x0276,0x0276,0x0276},  {0x0277,0x0277,0x0277}, /* 0276 */
2297   {0x0278,0x0278,0x0278},  {0x0279,0x0279,0x0279}, /* 0278 */
2298   {0x027A,0x027A,0x027A},  {0x027B,0x027B,0x027B}, /* 027A */
2299   {0x027C,0x027C,0x027C},  {0x2C64,0x027D,0x2C64}, /* 027C */
2300   {0x027E,0x027E,0x027E},  {0x027F,0x027F,0x027F}, /* 027E */
2301   {0x01A6,0x0280,0x01A6},  {0x0281,0x0281,0x0281}, /* 0280 */
2302   {0x0282,0x0282,0x0282},  {0x01A9,0x0283,0x01A9}, /* 0282 */
2303   {0x0284,0x0284,0x0284},  {0x0285,0x0285,0x0285}, /* 0284 */
2304   {0x0286,0x0286,0x0286},  {0x0287,0x0287,0x0287}, /* 0286 */
2305   {0x01AE,0x0288,0x01AE},  {0x0244,0x0289,0x0244}, /* 0288 */
2306   {0x01B1,0x028A,0x01B1},  {0x01B2,0x028B,0x01B2}, /* 028A */
2307   {0x0245,0x028C,0x0245},  {0x028D,0x028D,0x028D}, /* 028C */
2308   {0x028E,0x028E,0x028E},  {0x028F,0x028F,0x028F}, /* 028E */
2309   {0x0290,0x0290,0x0290},  {0x0291,0x0291,0x0291}, /* 0290 */
2310   {0x01B7,0x0292,0x01B7},  {0x0293,0x0293,0x0293}, /* 0292 */
2311   {0x0294,0x0294,0x0294},  {0x0295,0x0295,0x0295}, /* 0294 */
2312   {0x0296,0x0296,0x0296},  {0x0297,0x0297,0x0297}, /* 0296 */
2313   {0x0298,0x0298,0x0298},  {0x0299,0x0299,0x0299}, /* 0298 */
2314   {0x029A,0x029A,0x029A},  {0x029B,0x029B,0x029B}, /* 029A */
2315   {0x029C,0x029C,0x029C},  {0x029D,0x029D,0x029D}, /* 029C */
2316   {0x029E,0x029E,0x029E},  {0x029F,0x029F,0x029F}, /* 029E */
2317   {0x02A0,0x02A0,0x02A0},  {0x02A1,0x02A1,0x02A1}, /* 02A0 */
2318   {0x02A2,0x02A2,0x02A2},  {0x02A3,0x02A3,0x02A3}, /* 02A2 */
2319   {0x02A4,0x02A4,0x02A4},  {0x02A5,0x02A5,0x02A5}, /* 02A4 */
2320   {0x02A6,0x02A6,0x02A6},  {0x02A7,0x02A7,0x02A7}, /* 02A6 */
2321   {0x02A8,0x02A8,0x02A8},  {0x02A9,0x02A9,0x02A9}, /* 02A8 */
2322   {0x02AA,0x02AA,0x02AA},  {0x02AB,0x02AB,0x02AB}, /* 02AA */
2323   {0x02AC,0x02AC,0x02AC},  {0x02AD,0x02AD,0x02AD}, /* 02AC */
2324   {0x02AE,0x02AE,0x02AE},  {0x02AF,0x02AF,0x02AF}, /* 02AE */
2325   {0x02B0,0x02B0,0x02B0},  {0x02B1,0x02B1,0x02B1}, /* 02B0 */
2326   {0x02B2,0x02B2,0x02B2},  {0x02B3,0x02B3,0x02B3}, /* 02B2 */
2327   {0x02B4,0x02B4,0x02B4},  {0x02B5,0x02B5,0x02B5}, /* 02B4 */
2328   {0x02B6,0x02B6,0x02B6},  {0x02B7,0x02B7,0x02B7}, /* 02B6 */
2329   {0x02B8,0x02B8,0x02B8},  {0x02B9,0x02B9,0x02B9}, /* 02B8 */
2330   {0x02BA,0x02BA,0x02BA},  {0x02BB,0x02BB,0x02BB}, /* 02BA */
2331   {0x02BC,0x02BC,0x02BC},  {0x02BD,0x02BD,0x02BD}, /* 02BC */
2332   {0x02BE,0x02BE,0x02BE},  {0x02BF,0x02BF,0x02BF}, /* 02BE */
2333   {0x02C0,0x02C0,0x02C0},  {0x02C1,0x02C1,0x02C1}, /* 02C0 */
2334   {0x02C2,0x02C2,0x02C2},  {0x02C3,0x02C3,0x02C3}, /* 02C2 */
2335   {0x02C4,0x02C4,0x02C4},  {0x02C5,0x02C5,0x02C5}, /* 02C4 */
2336   {0x02C6,0x02C6,0x02C6},  {0x02C7,0x02C7,0x02C7}, /* 02C6 */
2337   {0x02C8,0x02C8,0x02C8},  {0x02C9,0x02C9,0x02C9}, /* 02C8 */
2338   {0x02CA,0x02CA,0x02CA},  {0x02CB,0x02CB,0x02CB}, /* 02CA */
2339   {0x02CC,0x02CC,0x02CC},  {0x02CD,0x02CD,0x02CD}, /* 02CC */
2340   {0x02CE,0x02CE,0x02CE},  {0x02CF,0x02CF,0x02CF}, /* 02CE */
2341   {0x02D0,0x02D0,0x02D0},  {0x02D1,0x02D1,0x02D1}, /* 02D0 */
2342   {0x02D2,0x02D2,0x02D2},  {0x02D3,0x02D3,0x02D3}, /* 02D2 */
2343   {0x02D4,0x02D4,0x02D4},  {0x02D5,0x02D5,0x02D5}, /* 02D4 */
2344   {0x02D6,0x02D6,0x02D6},  {0x02D7,0x02D7,0x02D7}, /* 02D6 */
2345   {0x02D8,0x02D8,0x02D8},  {0x02D9,0x02D9,0x02D9}, /* 02D8 */
2346   {0x02DA,0x02DA,0x02DA},  {0x02DB,0x02DB,0x02DB}, /* 02DA */
2347   {0x02DC,0x02DC,0x02DC},  {0x02DD,0x02DD,0x02DD}, /* 02DC */
2348   {0x02DE,0x02DE,0x02DE},  {0x02DF,0x02DF,0x02DF}, /* 02DE */
2349   {0x02E0,0x02E0,0x02E0},  {0x02E1,0x02E1,0x02E1}, /* 02E0 */
2350   {0x02E2,0x02E2,0x02E2},  {0x02E3,0x02E3,0x02E3}, /* 02E2 */
2351   {0x02E4,0x02E4,0x02E4},  {0x02E5,0x02E5,0x02E5}, /* 02E4 */
2352   {0x02E6,0x02E6,0x02E6},  {0x02E7,0x02E7,0x02E7}, /* 02E6 */
2353   {0x02E8,0x02E8,0x02E8},  {0x02E9,0x02E9,0x02E9}, /* 02E8 */
2354   {0x02EA,0x02EA,0x02EA},  {0x02EB,0x02EB,0x02EB}, /* 02EA */
2355   {0x02EC,0x02EC,0x02EC},  {0x02ED,0x02ED,0x02ED}, /* 02EC */
2356   {0x02EE,0x02EE,0x02EE},  {0x02EF,0x02EF,0x02EF}, /* 02EE */
2357   {0x02F0,0x02F0,0x02F0},  {0x02F1,0x02F1,0x02F1}, /* 02F0 */
2358   {0x02F2,0x02F2,0x02F2},  {0x02F3,0x02F3,0x02F3}, /* 02F2 */
2359   {0x02F4,0x02F4,0x02F4},  {0x02F5,0x02F5,0x02F5}, /* 02F4 */
2360   {0x02F6,0x02F6,0x02F6},  {0x02F7,0x02F7,0x02F7}, /* 02F6 */
2361   {0x02F8,0x02F8,0x02F8},  {0x02F9,0x02F9,0x02F9}, /* 02F8 */
2362   {0x02FA,0x02FA,0x02FA},  {0x02FB,0x02FB,0x02FB}, /* 02FA */
2363   {0x02FC,0x02FC,0x02FC},  {0x02FD,0x02FD,0x02FD}, /* 02FC */
2364   {0x02FE,0x02FE,0x02FE},  {0x02FF,0x02FF,0x02FF} /* 02FE */
2365 };
2366 
2367 static MY_UNICASE_CHARACTER u520p03[]={
2368   {0x0300,0x0300,0x0300},  {0x0301,0x0301,0x0301}, /* 0300 */
2369   {0x0302,0x0302,0x0302},  {0x0303,0x0303,0x0303}, /* 0302 */
2370   {0x0304,0x0304,0x0304},  {0x0305,0x0305,0x0305}, /* 0304 */
2371   {0x0306,0x0306,0x0306},  {0x0307,0x0307,0x0307}, /* 0306 */
2372   {0x0308,0x0308,0x0308},  {0x0309,0x0309,0x0309}, /* 0308 */
2373   {0x030A,0x030A,0x030A},  {0x030B,0x030B,0x030B}, /* 030A */
2374   {0x030C,0x030C,0x030C},  {0x030D,0x030D,0x030D}, /* 030C */
2375   {0x030E,0x030E,0x030E},  {0x030F,0x030F,0x030F}, /* 030E */
2376   {0x0310,0x0310,0x0310},  {0x0311,0x0311,0x0311}, /* 0310 */
2377   {0x0312,0x0312,0x0312},  {0x0313,0x0313,0x0313}, /* 0312 */
2378   {0x0314,0x0314,0x0314},  {0x0315,0x0315,0x0315}, /* 0314 */
2379   {0x0316,0x0316,0x0316},  {0x0317,0x0317,0x0317}, /* 0316 */
2380   {0x0318,0x0318,0x0318},  {0x0319,0x0319,0x0319}, /* 0318 */
2381   {0x031A,0x031A,0x031A},  {0x031B,0x031B,0x031B}, /* 031A */
2382   {0x031C,0x031C,0x031C},  {0x031D,0x031D,0x031D}, /* 031C */
2383   {0x031E,0x031E,0x031E},  {0x031F,0x031F,0x031F}, /* 031E */
2384   {0x0320,0x0320,0x0320},  {0x0321,0x0321,0x0321}, /* 0320 */
2385   {0x0322,0x0322,0x0322},  {0x0323,0x0323,0x0323}, /* 0322 */
2386   {0x0324,0x0324,0x0324},  {0x0325,0x0325,0x0325}, /* 0324 */
2387   {0x0326,0x0326,0x0326},  {0x0327,0x0327,0x0327}, /* 0326 */
2388   {0x0328,0x0328,0x0328},  {0x0329,0x0329,0x0329}, /* 0328 */
2389   {0x032A,0x032A,0x032A},  {0x032B,0x032B,0x032B}, /* 032A */
2390   {0x032C,0x032C,0x032C},  {0x032D,0x032D,0x032D}, /* 032C */
2391   {0x032E,0x032E,0x032E},  {0x032F,0x032F,0x032F}, /* 032E */
2392   {0x0330,0x0330,0x0330},  {0x0331,0x0331,0x0331}, /* 0330 */
2393   {0x0332,0x0332,0x0332},  {0x0333,0x0333,0x0333}, /* 0332 */
2394   {0x0334,0x0334,0x0334},  {0x0335,0x0335,0x0335}, /* 0334 */
2395   {0x0336,0x0336,0x0336},  {0x0337,0x0337,0x0337}, /* 0336 */
2396   {0x0338,0x0338,0x0338},  {0x0339,0x0339,0x0339}, /* 0338 */
2397   {0x033A,0x033A,0x033A},  {0x033B,0x033B,0x033B}, /* 033A */
2398   {0x033C,0x033C,0x033C},  {0x033D,0x033D,0x033D}, /* 033C */
2399   {0x033E,0x033E,0x033E},  {0x033F,0x033F,0x033F}, /* 033E */
2400   {0x0340,0x0340,0x0340},  {0x0341,0x0341,0x0341}, /* 0340 */
2401   {0x0342,0x0342,0x0342},  {0x0343,0x0343,0x0343}, /* 0342 */
2402   {0x0344,0x0344,0x0344},  {0x0399,0x0345,0x0399}, /* 0344 */
2403   {0x0346,0x0346,0x0346},  {0x0347,0x0347,0x0347}, /* 0346 */
2404   {0x0348,0x0348,0x0348},  {0x0349,0x0349,0x0349}, /* 0348 */
2405   {0x034A,0x034A,0x034A},  {0x034B,0x034B,0x034B}, /* 034A */
2406   {0x034C,0x034C,0x034C},  {0x034D,0x034D,0x034D}, /* 034C */
2407   {0x034E,0x034E,0x034E},  {0x034F,0x034F,0x034F}, /* 034E */
2408   {0x0350,0x0350,0x0350},  {0x0351,0x0351,0x0351}, /* 0350 */
2409   {0x0352,0x0352,0x0352},  {0x0353,0x0353,0x0353}, /* 0352 */
2410   {0x0354,0x0354,0x0354},  {0x0355,0x0355,0x0355}, /* 0354 */
2411   {0x0356,0x0356,0x0356},  {0x0357,0x0357,0x0357}, /* 0356 */
2412   {0x0358,0x0358,0x0358},  {0x0359,0x0359,0x0359}, /* 0358 */
2413   {0x035A,0x035A,0x035A},  {0x035B,0x035B,0x035B}, /* 035A */
2414   {0x035C,0x035C,0x035C},  {0x035D,0x035D,0x035D}, /* 035C */
2415   {0x035E,0x035E,0x035E},  {0x035F,0x035F,0x035F}, /* 035E */
2416   {0x0360,0x0360,0x0360},  {0x0361,0x0361,0x0361}, /* 0360 */
2417   {0x0362,0x0362,0x0362},  {0x0363,0x0363,0x0363}, /* 0362 */
2418   {0x0364,0x0364,0x0364},  {0x0365,0x0365,0x0365}, /* 0364 */
2419   {0x0366,0x0366,0x0366},  {0x0367,0x0367,0x0367}, /* 0366 */
2420   {0x0368,0x0368,0x0368},  {0x0369,0x0369,0x0369}, /* 0368 */
2421   {0x036A,0x036A,0x036A},  {0x036B,0x036B,0x036B}, /* 036A */
2422   {0x036C,0x036C,0x036C},  {0x036D,0x036D,0x036D}, /* 036C */
2423   {0x036E,0x036E,0x036E},  {0x036F,0x036F,0x036F}, /* 036E */
2424   {0x0370,0x0371,0x0370},  {0x0370,0x0371,0x0370}, /* 0370 */
2425   {0x0372,0x0373,0x0372},  {0x0372,0x0373,0x0372}, /* 0372 */
2426   {0x0374,0x0374,0x0374},  {0x0375,0x0375,0x0375}, /* 0374 */
2427   {0x0376,0x0377,0x0376},  {0x0376,0x0377,0x0376}, /* 0376 */
2428   {0x0378,0x0378,0x0378},  {0x0379,0x0379,0x0379}, /* 0378 */
2429   {0x037A,0x037A,0x037A},  {0x03FD,0x037B,0x03FD}, /* 037A */
2430   {0x03FE,0x037C,0x03FE},  {0x03FF,0x037D,0x03FF}, /* 037C */
2431   {0x037E,0x037E,0x037E},  {0x037F,0x037F,0x037F}, /* 037E */
2432   {0x0380,0x0380,0x0380},  {0x0381,0x0381,0x0381}, /* 0380 */
2433   {0x0382,0x0382,0x0382},  {0x0383,0x0383,0x0383}, /* 0382 */
2434   {0x0384,0x0384,0x0384},  {0x0385,0x0385,0x0385}, /* 0384 */
2435   {0x0386,0x03AC,0x0391},  {0x0387,0x0387,0x0387}, /* 0386 */
2436   {0x0388,0x03AD,0x0395},  {0x0389,0x03AE,0x0397}, /* 0388 */
2437   {0x038A,0x03AF,0x0399},  {0x038B,0x038B,0x038B}, /* 038A */
2438   {0x038C,0x03CC,0x039F},  {0x038D,0x038D,0x038D}, /* 038C */
2439   {0x038E,0x03CD,0x03A5},  {0x038F,0x03CE,0x03A9}, /* 038E */
2440   {0x0390,0x0390,0x0399},  {0x0391,0x03B1,0x0391}, /* 0390 */
2441   {0x0392,0x03B2,0x0392},  {0x0393,0x03B3,0x0393}, /* 0392 */
2442   {0x0394,0x03B4,0x0394},  {0x0395,0x03B5,0x0395}, /* 0394 */
2443   {0x0396,0x03B6,0x0396},  {0x0397,0x03B7,0x0397}, /* 0396 */
2444   {0x0398,0x03B8,0x0398},  {0x0399,0x03B9,0x0399}, /* 0398 */
2445   {0x039A,0x03BA,0x039A},  {0x039B,0x03BB,0x039B}, /* 039A */
2446   {0x039C,0x03BC,0x039C},  {0x039D,0x03BD,0x039D}, /* 039C */
2447   {0x039E,0x03BE,0x039E},  {0x039F,0x03BF,0x039F}, /* 039E */
2448   {0x03A0,0x03C0,0x03A0},  {0x03A1,0x03C1,0x03A1}, /* 03A0 */
2449   {0x03A2,0x03A2,0x03A2},  {0x03A3,0x03C3,0x03A3}, /* 03A2 */
2450   {0x03A4,0x03C4,0x03A4},  {0x03A5,0x03C5,0x03A5}, /* 03A4 */
2451   {0x03A6,0x03C6,0x03A6},  {0x03A7,0x03C7,0x03A7}, /* 03A6 */
2452   {0x03A8,0x03C8,0x03A8},  {0x03A9,0x03C9,0x03A9}, /* 03A8 */
2453   {0x03AA,0x03CA,0x0399},  {0x03AB,0x03CB,0x03A5}, /* 03AA */
2454   {0x0386,0x03AC,0x0391},  {0x0388,0x03AD,0x0395}, /* 03AC */
2455   {0x0389,0x03AE,0x0397},  {0x038A,0x03AF,0x0399}, /* 03AE */
2456   {0x03B0,0x03B0,0x03A5},  {0x0391,0x03B1,0x0391}, /* 03B0 */
2457   {0x0392,0x03B2,0x0392},  {0x0393,0x03B3,0x0393}, /* 03B2 */
2458   {0x0394,0x03B4,0x0394},  {0x0395,0x03B5,0x0395}, /* 03B4 */
2459   {0x0396,0x03B6,0x0396},  {0x0397,0x03B7,0x0397}, /* 03B6 */
2460   {0x0398,0x03B8,0x0398},  {0x0399,0x03B9,0x0399}, /* 03B8 */
2461   {0x039A,0x03BA,0x039A},  {0x039B,0x03BB,0x039B}, /* 03BA */
2462   {0x039C,0x03BC,0x039C},  {0x039D,0x03BD,0x039D}, /* 03BC */
2463   {0x039E,0x03BE,0x039E},  {0x039F,0x03BF,0x039F}, /* 03BE */
2464   {0x03A0,0x03C0,0x03A0},  {0x03A1,0x03C1,0x03A1}, /* 03C0 */
2465   {0x03A3,0x03C2,0x03A3},  {0x03A3,0x03C3,0x03A3}, /* 03C2 */
2466   {0x03A4,0x03C4,0x03A4},  {0x03A5,0x03C5,0x03A5}, /* 03C4 */
2467   {0x03A6,0x03C6,0x03A6},  {0x03A7,0x03C7,0x03A7}, /* 03C6 */
2468   {0x03A8,0x03C8,0x03A8},  {0x03A9,0x03C9,0x03A9}, /* 03C8 */
2469   {0x03AA,0x03CA,0x0399},  {0x03AB,0x03CB,0x03A5}, /* 03CA */
2470   {0x038C,0x03CC,0x039F},  {0x038E,0x03CD,0x03A5}, /* 03CC */
2471   {0x038F,0x03CE,0x03A9},  {0x03CF,0x03D7,0x03CF}, /* 03CE */
2472   {0x0392,0x03D0,0x0392},  {0x0398,0x03D1,0x0398}, /* 03D0 */
2473   {0x03D2,0x03D2,0x03D2},  {0x03D3,0x03D3,0x03D2}, /* 03D2 */
2474   {0x03D4,0x03D4,0x03D2},  {0x03A6,0x03D5,0x03A6}, /* 03D4 */
2475   {0x03A0,0x03D6,0x03A0},  {0x03CF,0x03D7,0x03CF}, /* 03D6 */
2476   {0x03D8,0x03D9,0x03D8},  {0x03D8,0x03D9,0x03D8}, /* 03D8 */
2477   {0x03DA,0x03DB,0x03DA},  {0x03DA,0x03DB,0x03DA}, /* 03DA */
2478   {0x03DC,0x03DD,0x03DC},  {0x03DC,0x03DD,0x03DC}, /* 03DC */
2479   {0x03DE,0x03DF,0x03DE},  {0x03DE,0x03DF,0x03DE}, /* 03DE */
2480   {0x03E0,0x03E1,0x03E0},  {0x03E0,0x03E1,0x03E0}, /* 03E0 */
2481   {0x03E2,0x03E3,0x03E2},  {0x03E2,0x03E3,0x03E2}, /* 03E2 */
2482   {0x03E4,0x03E5,0x03E4},  {0x03E4,0x03E5,0x03E4}, /* 03E4 */
2483   {0x03E6,0x03E7,0x03E6},  {0x03E6,0x03E7,0x03E6}, /* 03E6 */
2484   {0x03E8,0x03E9,0x03E8},  {0x03E8,0x03E9,0x03E8}, /* 03E8 */
2485   {0x03EA,0x03EB,0x03EA},  {0x03EA,0x03EB,0x03EA}, /* 03EA */
2486   {0x03EC,0x03ED,0x03EC},  {0x03EC,0x03ED,0x03EC}, /* 03EC */
2487   {0x03EE,0x03EF,0x03EE},  {0x03EE,0x03EF,0x03EE}, /* 03EE */
2488   {0x039A,0x03F0,0x039A},  {0x03A1,0x03F1,0x03A1}, /* 03F0 */
2489   {0x03F9,0x03F2,0x03F9},  {0x03F3,0x03F3,0x03F3}, /* 03F2 */
2490   {0x03F4,0x03B8,0x03F4},  {0x0395,0x03F5,0x0395}, /* 03F4 */
2491   {0x03F6,0x03F6,0x03F6},  {0x03F7,0x03F8,0x03F7}, /* 03F6 */
2492   {0x03F7,0x03F8,0x03F7},  {0x03F9,0x03F2,0x03F9}, /* 03F8 */
2493   {0x03FA,0x03FB,0x03FA},  {0x03FA,0x03FB,0x03FA}, /* 03FA */
2494   {0x03FC,0x03FC,0x03FC},  {0x03FD,0x037B,0x03FD}, /* 03FC */
2495   {0x03FE,0x037C,0x03FE},  {0x03FF,0x037D,0x03FF} /* 03FE */
2496 };
2497 
2498 static MY_UNICASE_CHARACTER u520p04[]={
2499   {0x0400,0x0450,0x0415},  {0x0401,0x0451,0x0415}, /* 0400 */
2500   {0x0402,0x0452,0x0402},  {0x0403,0x0453,0x0413}, /* 0402 */
2501   {0x0404,0x0454,0x0404},  {0x0405,0x0455,0x0405}, /* 0404 */
2502   {0x0406,0x0456,0x0406},  {0x0407,0x0457,0x0406}, /* 0406 */
2503   {0x0408,0x0458,0x0408},  {0x0409,0x0459,0x0409}, /* 0408 */
2504   {0x040A,0x045A,0x040A},  {0x040B,0x045B,0x040B}, /* 040A */
2505   {0x040C,0x045C,0x041A},  {0x040D,0x045D,0x0418}, /* 040C */
2506   {0x040E,0x045E,0x0423},  {0x040F,0x045F,0x040F}, /* 040E */
2507   {0x0410,0x0430,0x0410},  {0x0411,0x0431,0x0411}, /* 0410 */
2508   {0x0412,0x0432,0x0412},  {0x0413,0x0433,0x0413}, /* 0412 */
2509   {0x0414,0x0434,0x0414},  {0x0415,0x0435,0x0415}, /* 0414 */
2510   {0x0416,0x0436,0x0416},  {0x0417,0x0437,0x0417}, /* 0416 */
2511   {0x0418,0x0438,0x0418},  {0x0419,0x0439,0x0419}, /* 0418 */
2512   {0x041A,0x043A,0x041A},  {0x041B,0x043B,0x041B}, /* 041A */
2513   {0x041C,0x043C,0x041C},  {0x041D,0x043D,0x041D}, /* 041C */
2514   {0x041E,0x043E,0x041E},  {0x041F,0x043F,0x041F}, /* 041E */
2515   {0x0420,0x0440,0x0420},  {0x0421,0x0441,0x0421}, /* 0420 */
2516   {0x0422,0x0442,0x0422},  {0x0423,0x0443,0x0423}, /* 0422 */
2517   {0x0424,0x0444,0x0424},  {0x0425,0x0445,0x0425}, /* 0424 */
2518   {0x0426,0x0446,0x0426},  {0x0427,0x0447,0x0427}, /* 0426 */
2519   {0x0428,0x0448,0x0428},  {0x0429,0x0449,0x0429}, /* 0428 */
2520   {0x042A,0x044A,0x042A},  {0x042B,0x044B,0x042B}, /* 042A */
2521   {0x042C,0x044C,0x042C},  {0x042D,0x044D,0x042D}, /* 042C */
2522   {0x042E,0x044E,0x042E},  {0x042F,0x044F,0x042F}, /* 042E */
2523   {0x0410,0x0430,0x0410},  {0x0411,0x0431,0x0411}, /* 0430 */
2524   {0x0412,0x0432,0x0412},  {0x0413,0x0433,0x0413}, /* 0432 */
2525   {0x0414,0x0434,0x0414},  {0x0415,0x0435,0x0415}, /* 0434 */
2526   {0x0416,0x0436,0x0416},  {0x0417,0x0437,0x0417}, /* 0436 */
2527   {0x0418,0x0438,0x0418},  {0x0419,0x0439,0x0419}, /* 0438 */
2528   {0x041A,0x043A,0x041A},  {0x041B,0x043B,0x041B}, /* 043A */
2529   {0x041C,0x043C,0x041C},  {0x041D,0x043D,0x041D}, /* 043C */
2530   {0x041E,0x043E,0x041E},  {0x041F,0x043F,0x041F}, /* 043E */
2531   {0x0420,0x0440,0x0420},  {0x0421,0x0441,0x0421}, /* 0440 */
2532   {0x0422,0x0442,0x0422},  {0x0423,0x0443,0x0423}, /* 0442 */
2533   {0x0424,0x0444,0x0424},  {0x0425,0x0445,0x0425}, /* 0444 */
2534   {0x0426,0x0446,0x0426},  {0x0427,0x0447,0x0427}, /* 0446 */
2535   {0x0428,0x0448,0x0428},  {0x0429,0x0449,0x0429}, /* 0448 */
2536   {0x042A,0x044A,0x042A},  {0x042B,0x044B,0x042B}, /* 044A */
2537   {0x042C,0x044C,0x042C},  {0x042D,0x044D,0x042D}, /* 044C */
2538   {0x042E,0x044E,0x042E},  {0x042F,0x044F,0x042F}, /* 044E */
2539   {0x0400,0x0450,0x0415},  {0x0401,0x0451,0x0415}, /* 0450 */
2540   {0x0402,0x0452,0x0402},  {0x0403,0x0453,0x0413}, /* 0452 */
2541   {0x0404,0x0454,0x0404},  {0x0405,0x0455,0x0405}, /* 0454 */
2542   {0x0406,0x0456,0x0406},  {0x0407,0x0457,0x0406}, /* 0456 */
2543   {0x0408,0x0458,0x0408},  {0x0409,0x0459,0x0409}, /* 0458 */
2544   {0x040A,0x045A,0x040A},  {0x040B,0x045B,0x040B}, /* 045A */
2545   {0x040C,0x045C,0x041A},  {0x040D,0x045D,0x0418}, /* 045C */
2546   {0x040E,0x045E,0x0423},  {0x040F,0x045F,0x040F}, /* 045E */
2547   {0x0460,0x0461,0x0460},  {0x0460,0x0461,0x0460}, /* 0460 */
2548   {0x0462,0x0463,0x0462},  {0x0462,0x0463,0x0462}, /* 0462 */
2549   {0x0464,0x0465,0x0464},  {0x0464,0x0465,0x0464}, /* 0464 */
2550   {0x0466,0x0467,0x0466},  {0x0466,0x0467,0x0466}, /* 0466 */
2551   {0x0468,0x0469,0x0468},  {0x0468,0x0469,0x0468}, /* 0468 */
2552   {0x046A,0x046B,0x046A},  {0x046A,0x046B,0x046A}, /* 046A */
2553   {0x046C,0x046D,0x046C},  {0x046C,0x046D,0x046C}, /* 046C */
2554   {0x046E,0x046F,0x046E},  {0x046E,0x046F,0x046E}, /* 046E */
2555   {0x0470,0x0471,0x0470},  {0x0470,0x0471,0x0470}, /* 0470 */
2556   {0x0472,0x0473,0x0472},  {0x0472,0x0473,0x0472}, /* 0472 */
2557   {0x0474,0x0475,0x0474},  {0x0474,0x0475,0x0474}, /* 0474 */
2558   {0x0476,0x0477,0x0474},  {0x0476,0x0477,0x0474}, /* 0476 */
2559   {0x0478,0x0479,0x0478},  {0x0478,0x0479,0x0478}, /* 0478 */
2560   {0x047A,0x047B,0x047A},  {0x047A,0x047B,0x047A}, /* 047A */
2561   {0x047C,0x047D,0x047C},  {0x047C,0x047D,0x047C}, /* 047C */
2562   {0x047E,0x047F,0x047E},  {0x047E,0x047F,0x047E}, /* 047E */
2563   {0x0480,0x0481,0x0480},  {0x0480,0x0481,0x0480}, /* 0480 */
2564   {0x0482,0x0482,0x0482},  {0x0483,0x0483,0x0483}, /* 0482 */
2565   {0x0484,0x0484,0x0484},  {0x0485,0x0485,0x0485}, /* 0484 */
2566   {0x0486,0x0486,0x0486},  {0x0487,0x0487,0x0487}, /* 0486 */
2567   {0x0488,0x0488,0x0488},  {0x0489,0x0489,0x0489}, /* 0488 */
2568   {0x048A,0x048B,0x048A},  {0x048A,0x048B,0x048A}, /* 048A */
2569   {0x048C,0x048D,0x048C},  {0x048C,0x048D,0x048C}, /* 048C */
2570   {0x048E,0x048F,0x048E},  {0x048E,0x048F,0x048E}, /* 048E */
2571   {0x0490,0x0491,0x0490},  {0x0490,0x0491,0x0490}, /* 0490 */
2572   {0x0492,0x0493,0x0492},  {0x0492,0x0493,0x0492}, /* 0492 */
2573   {0x0494,0x0495,0x0494},  {0x0494,0x0495,0x0494}, /* 0494 */
2574   {0x0496,0x0497,0x0496},  {0x0496,0x0497,0x0496}, /* 0496 */
2575   {0x0498,0x0499,0x0498},  {0x0498,0x0499,0x0498}, /* 0498 */
2576   {0x049A,0x049B,0x049A},  {0x049A,0x049B,0x049A}, /* 049A */
2577   {0x049C,0x049D,0x049C},  {0x049C,0x049D,0x049C}, /* 049C */
2578   {0x049E,0x049F,0x049E},  {0x049E,0x049F,0x049E}, /* 049E */
2579   {0x04A0,0x04A1,0x04A0},  {0x04A0,0x04A1,0x04A0}, /* 04A0 */
2580   {0x04A2,0x04A3,0x04A2},  {0x04A2,0x04A3,0x04A2}, /* 04A2 */
2581   {0x04A4,0x04A5,0x04A4},  {0x04A4,0x04A5,0x04A4}, /* 04A4 */
2582   {0x04A6,0x04A7,0x04A6},  {0x04A6,0x04A7,0x04A6}, /* 04A6 */
2583   {0x04A8,0x04A9,0x04A8},  {0x04A8,0x04A9,0x04A8}, /* 04A8 */
2584   {0x04AA,0x04AB,0x04AA},  {0x04AA,0x04AB,0x04AA}, /* 04AA */
2585   {0x04AC,0x04AD,0x04AC},  {0x04AC,0x04AD,0x04AC}, /* 04AC */
2586   {0x04AE,0x04AF,0x04AE},  {0x04AE,0x04AF,0x04AE}, /* 04AE */
2587   {0x04B0,0x04B1,0x04B0},  {0x04B0,0x04B1,0x04B0}, /* 04B0 */
2588   {0x04B2,0x04B3,0x04B2},  {0x04B2,0x04B3,0x04B2}, /* 04B2 */
2589   {0x04B4,0x04B5,0x04B4},  {0x04B4,0x04B5,0x04B4}, /* 04B4 */
2590   {0x04B6,0x04B7,0x04B6},  {0x04B6,0x04B7,0x04B6}, /* 04B6 */
2591   {0x04B8,0x04B9,0x04B8},  {0x04B8,0x04B9,0x04B8}, /* 04B8 */
2592   {0x04BA,0x04BB,0x04BA},  {0x04BA,0x04BB,0x04BA}, /* 04BA */
2593   {0x04BC,0x04BD,0x04BC},  {0x04BC,0x04BD,0x04BC}, /* 04BC */
2594   {0x04BE,0x04BF,0x04BE},  {0x04BE,0x04BF,0x04BE}, /* 04BE */
2595   {0x04C0,0x04CF,0x04C0},  {0x04C1,0x04C2,0x0416}, /* 04C0 */
2596   {0x04C1,0x04C2,0x0416},  {0x04C3,0x04C4,0x04C3}, /* 04C2 */
2597   {0x04C3,0x04C4,0x04C3},  {0x04C5,0x04C6,0x04C5}, /* 04C4 */
2598   {0x04C5,0x04C6,0x04C5},  {0x04C7,0x04C8,0x04C7}, /* 04C6 */
2599   {0x04C7,0x04C8,0x04C7},  {0x04C9,0x04CA,0x04C9}, /* 04C8 */
2600   {0x04C9,0x04CA,0x04C9},  {0x04CB,0x04CC,0x04CB}, /* 04CA */
2601   {0x04CB,0x04CC,0x04CB},  {0x04CD,0x04CE,0x04CD}, /* 04CC */
2602   {0x04CD,0x04CE,0x04CD},  {0x04C0,0x04CF,0x04C0}, /* 04CE */
2603   {0x04D0,0x04D1,0x0410},  {0x04D0,0x04D1,0x0410}, /* 04D0 */
2604   {0x04D2,0x04D3,0x0410},  {0x04D2,0x04D3,0x0410}, /* 04D2 */
2605   {0x04D4,0x04D5,0x04D4},  {0x04D4,0x04D5,0x04D4}, /* 04D4 */
2606   {0x04D6,0x04D7,0x0415},  {0x04D6,0x04D7,0x0415}, /* 04D6 */
2607   {0x04D8,0x04D9,0x04D8},  {0x04D8,0x04D9,0x04D8}, /* 04D8 */
2608   {0x04DA,0x04DB,0x04D8},  {0x04DA,0x04DB,0x04D8}, /* 04DA */
2609   {0x04DC,0x04DD,0x0416},  {0x04DC,0x04DD,0x0416}, /* 04DC */
2610   {0x04DE,0x04DF,0x0417},  {0x04DE,0x04DF,0x0417}, /* 04DE */
2611   {0x04E0,0x04E1,0x04E0},  {0x04E0,0x04E1,0x04E0}, /* 04E0 */
2612   {0x04E2,0x04E3,0x0418},  {0x04E2,0x04E3,0x0418}, /* 04E2 */
2613   {0x04E4,0x04E5,0x0418},  {0x04E4,0x04E5,0x0418}, /* 04E4 */
2614   {0x04E6,0x04E7,0x041E},  {0x04E6,0x04E7,0x041E}, /* 04E6 */
2615   {0x04E8,0x04E9,0x04E8},  {0x04E8,0x04E9,0x04E8}, /* 04E8 */
2616   {0x04EA,0x04EB,0x04E8},  {0x04EA,0x04EB,0x04E8}, /* 04EA */
2617   {0x04EC,0x04ED,0x042D},  {0x04EC,0x04ED,0x042D}, /* 04EC */
2618   {0x04EE,0x04EF,0x0423},  {0x04EE,0x04EF,0x0423}, /* 04EE */
2619   {0x04F0,0x04F1,0x0423},  {0x04F0,0x04F1,0x0423}, /* 04F0 */
2620   {0x04F2,0x04F3,0x0423},  {0x04F2,0x04F3,0x0423}, /* 04F2 */
2621   {0x04F4,0x04F5,0x0427},  {0x04F4,0x04F5,0x0427}, /* 04F4 */
2622   {0x04F6,0x04F7,0x04F6},  {0x04F6,0x04F7,0x04F6}, /* 04F6 */
2623   {0x04F8,0x04F9,0x042B},  {0x04F8,0x04F9,0x042B}, /* 04F8 */
2624   {0x04FA,0x04FB,0x04FA},  {0x04FA,0x04FB,0x04FA}, /* 04FA */
2625   {0x04FC,0x04FD,0x04FC},  {0x04FC,0x04FD,0x04FC}, /* 04FC */
2626   {0x04FE,0x04FF,0x04FE},  {0x04FE,0x04FF,0x04FE} /* 04FE */
2627 };
2628 
2629 static MY_UNICASE_CHARACTER u520p05[]={
2630   {0x0500,0x0501,0x0500},  {0x0500,0x0501,0x0500}, /* 0500 */
2631   {0x0502,0x0503,0x0502},  {0x0502,0x0503,0x0502}, /* 0502 */
2632   {0x0504,0x0505,0x0504},  {0x0504,0x0505,0x0504}, /* 0504 */
2633   {0x0506,0x0507,0x0506},  {0x0506,0x0507,0x0506}, /* 0506 */
2634   {0x0508,0x0509,0x0508},  {0x0508,0x0509,0x0508}, /* 0508 */
2635   {0x050A,0x050B,0x050A},  {0x050A,0x050B,0x050A}, /* 050A */
2636   {0x050C,0x050D,0x050C},  {0x050C,0x050D,0x050C}, /* 050C */
2637   {0x050E,0x050F,0x050E},  {0x050E,0x050F,0x050E}, /* 050E */
2638   {0x0510,0x0511,0x0510},  {0x0510,0x0511,0x0510}, /* 0510 */
2639   {0x0512,0x0513,0x0512},  {0x0512,0x0513,0x0512}, /* 0512 */
2640   {0x0514,0x0515,0x0514},  {0x0514,0x0515,0x0514}, /* 0514 */
2641   {0x0516,0x0517,0x0516},  {0x0516,0x0517,0x0516}, /* 0516 */
2642   {0x0518,0x0519,0x0518},  {0x0518,0x0519,0x0518}, /* 0518 */
2643   {0x051A,0x051B,0x051A},  {0x051A,0x051B,0x051A}, /* 051A */
2644   {0x051C,0x051D,0x051C},  {0x051C,0x051D,0x051C}, /* 051C */
2645   {0x051E,0x051F,0x051E},  {0x051E,0x051F,0x051E}, /* 051E */
2646   {0x0520,0x0521,0x0520},  {0x0520,0x0521,0x0520}, /* 0520 */
2647   {0x0522,0x0523,0x0522},  {0x0522,0x0523,0x0522}, /* 0522 */
2648   {0x0524,0x0525,0x0524},  {0x0524,0x0525,0x0524}, /* 0524 */
2649   {0x0526,0x0526,0x0526},  {0x0527,0x0527,0x0527}, /* 0526 */
2650   {0x0528,0x0528,0x0528},  {0x0529,0x0529,0x0529}, /* 0528 */
2651   {0x052A,0x052A,0x052A},  {0x052B,0x052B,0x052B}, /* 052A */
2652   {0x052C,0x052C,0x052C},  {0x052D,0x052D,0x052D}, /* 052C */
2653   {0x052E,0x052E,0x052E},  {0x052F,0x052F,0x052F}, /* 052E */
2654   {0x0530,0x0530,0x0530},  {0x0531,0x0561,0x0531}, /* 0530 */
2655   {0x0532,0x0562,0x0532},  {0x0533,0x0563,0x0533}, /* 0532 */
2656   {0x0534,0x0564,0x0534},  {0x0535,0x0565,0x0535}, /* 0534 */
2657   {0x0536,0x0566,0x0536},  {0x0537,0x0567,0x0537}, /* 0536 */
2658   {0x0538,0x0568,0x0538},  {0x0539,0x0569,0x0539}, /* 0538 */
2659   {0x053A,0x056A,0x053A},  {0x053B,0x056B,0x053B}, /* 053A */
2660   {0x053C,0x056C,0x053C},  {0x053D,0x056D,0x053D}, /* 053C */
2661   {0x053E,0x056E,0x053E},  {0x053F,0x056F,0x053F}, /* 053E */
2662   {0x0540,0x0570,0x0540},  {0x0541,0x0571,0x0541}, /* 0540 */
2663   {0x0542,0x0572,0x0542},  {0x0543,0x0573,0x0543}, /* 0542 */
2664   {0x0544,0x0574,0x0544},  {0x0545,0x0575,0x0545}, /* 0544 */
2665   {0x0546,0x0576,0x0546},  {0x0547,0x0577,0x0547}, /* 0546 */
2666   {0x0548,0x0578,0x0548},  {0x0549,0x0579,0x0549}, /* 0548 */
2667   {0x054A,0x057A,0x054A},  {0x054B,0x057B,0x054B}, /* 054A */
2668   {0x054C,0x057C,0x054C},  {0x054D,0x057D,0x054D}, /* 054C */
2669   {0x054E,0x057E,0x054E},  {0x054F,0x057F,0x054F}, /* 054E */
2670   {0x0550,0x0580,0x0550},  {0x0551,0x0581,0x0551}, /* 0550 */
2671   {0x0552,0x0582,0x0552},  {0x0553,0x0583,0x0553}, /* 0552 */
2672   {0x0554,0x0584,0x0554},  {0x0555,0x0585,0x0555}, /* 0554 */
2673   {0x0556,0x0586,0x0556},  {0x0557,0x0557,0x0557}, /* 0556 */
2674   {0x0558,0x0558,0x0558},  {0x0559,0x0559,0x0559}, /* 0558 */
2675   {0x055A,0x055A,0x055A},  {0x055B,0x055B,0x055B}, /* 055A */
2676   {0x055C,0x055C,0x055C},  {0x055D,0x055D,0x055D}, /* 055C */
2677   {0x055E,0x055E,0x055E},  {0x055F,0x055F,0x055F}, /* 055E */
2678   {0x0560,0x0560,0x0560},  {0x0531,0x0561,0x0531}, /* 0560 */
2679   {0x0532,0x0562,0x0532},  {0x0533,0x0563,0x0533}, /* 0562 */
2680   {0x0534,0x0564,0x0534},  {0x0535,0x0565,0x0535}, /* 0564 */
2681   {0x0536,0x0566,0x0536},  {0x0537,0x0567,0x0537}, /* 0566 */
2682   {0x0538,0x0568,0x0538},  {0x0539,0x0569,0x0539}, /* 0568 */
2683   {0x053A,0x056A,0x053A},  {0x053B,0x056B,0x053B}, /* 056A */
2684   {0x053C,0x056C,0x053C},  {0x053D,0x056D,0x053D}, /* 056C */
2685   {0x053E,0x056E,0x053E},  {0x053F,0x056F,0x053F}, /* 056E */
2686   {0x0540,0x0570,0x0540},  {0x0541,0x0571,0x0541}, /* 0570 */
2687   {0x0542,0x0572,0x0542},  {0x0543,0x0573,0x0543}, /* 0572 */
2688   {0x0544,0x0574,0x0544},  {0x0545,0x0575,0x0545}, /* 0574 */
2689   {0x0546,0x0576,0x0546},  {0x0547,0x0577,0x0547}, /* 0576 */
2690   {0x0548,0x0578,0x0548},  {0x0549,0x0579,0x0549}, /* 0578 */
2691   {0x054A,0x057A,0x054A},  {0x054B,0x057B,0x054B}, /* 057A */
2692   {0x054C,0x057C,0x054C},  {0x054D,0x057D,0x054D}, /* 057C */
2693   {0x054E,0x057E,0x054E},  {0x054F,0x057F,0x054F}, /* 057E */
2694   {0x0550,0x0580,0x0550},  {0x0551,0x0581,0x0551}, /* 0580 */
2695   {0x0552,0x0582,0x0552},  {0x0553,0x0583,0x0553}, /* 0582 */
2696   {0x0554,0x0584,0x0554},  {0x0555,0x0585,0x0555}, /* 0584 */
2697   {0x0556,0x0586,0x0556},  {0x0587,0x0587,0x0587}, /* 0586 */
2698   {0x0588,0x0588,0x0588},  {0x0589,0x0589,0x0589}, /* 0588 */
2699   {0x058A,0x058A,0x058A},  {0x058B,0x058B,0x058B}, /* 058A */
2700   {0x058C,0x058C,0x058C},  {0x058D,0x058D,0x058D}, /* 058C */
2701   {0x058E,0x058E,0x058E},  {0x058F,0x058F,0x058F}, /* 058E */
2702   {0x0590,0x0590,0x0590},  {0x0591,0x0591,0x0591}, /* 0590 */
2703   {0x0592,0x0592,0x0592},  {0x0593,0x0593,0x0593}, /* 0592 */
2704   {0x0594,0x0594,0x0594},  {0x0595,0x0595,0x0595}, /* 0594 */
2705   {0x0596,0x0596,0x0596},  {0x0597,0x0597,0x0597}, /* 0596 */
2706   {0x0598,0x0598,0x0598},  {0x0599,0x0599,0x0599}, /* 0598 */
2707   {0x059A,0x059A,0x059A},  {0x059B,0x059B,0x059B}, /* 059A */
2708   {0x059C,0x059C,0x059C},  {0x059D,0x059D,0x059D}, /* 059C */
2709   {0x059E,0x059E,0x059E},  {0x059F,0x059F,0x059F}, /* 059E */
2710   {0x05A0,0x05A0,0x05A0},  {0x05A1,0x05A1,0x05A1}, /* 05A0 */
2711   {0x05A2,0x05A2,0x05A2},  {0x05A3,0x05A3,0x05A3}, /* 05A2 */
2712   {0x05A4,0x05A4,0x05A4},  {0x05A5,0x05A5,0x05A5}, /* 05A4 */
2713   {0x05A6,0x05A6,0x05A6},  {0x05A7,0x05A7,0x05A7}, /* 05A6 */
2714   {0x05A8,0x05A8,0x05A8},  {0x05A9,0x05A9,0x05A9}, /* 05A8 */
2715   {0x05AA,0x05AA,0x05AA},  {0x05AB,0x05AB,0x05AB}, /* 05AA */
2716   {0x05AC,0x05AC,0x05AC},  {0x05AD,0x05AD,0x05AD}, /* 05AC */
2717   {0x05AE,0x05AE,0x05AE},  {0x05AF,0x05AF,0x05AF}, /* 05AE */
2718   {0x05B0,0x05B0,0x05B0},  {0x05B1,0x05B1,0x05B1}, /* 05B0 */
2719   {0x05B2,0x05B2,0x05B2},  {0x05B3,0x05B3,0x05B3}, /* 05B2 */
2720   {0x05B4,0x05B4,0x05B4},  {0x05B5,0x05B5,0x05B5}, /* 05B4 */
2721   {0x05B6,0x05B6,0x05B6},  {0x05B7,0x05B7,0x05B7}, /* 05B6 */
2722   {0x05B8,0x05B8,0x05B8},  {0x05B9,0x05B9,0x05B9}, /* 05B8 */
2723   {0x05BA,0x05BA,0x05BA},  {0x05BB,0x05BB,0x05BB}, /* 05BA */
2724   {0x05BC,0x05BC,0x05BC},  {0x05BD,0x05BD,0x05BD}, /* 05BC */
2725   {0x05BE,0x05BE,0x05BE},  {0x05BF,0x05BF,0x05BF}, /* 05BE */
2726   {0x05C0,0x05C0,0x05C0},  {0x05C1,0x05C1,0x05C1}, /* 05C0 */
2727   {0x05C2,0x05C2,0x05C2},  {0x05C3,0x05C3,0x05C3}, /* 05C2 */
2728   {0x05C4,0x05C4,0x05C4},  {0x05C5,0x05C5,0x05C5}, /* 05C4 */
2729   {0x05C6,0x05C6,0x05C6},  {0x05C7,0x05C7,0x05C7}, /* 05C6 */
2730   {0x05C8,0x05C8,0x05C8},  {0x05C9,0x05C9,0x05C9}, /* 05C8 */
2731   {0x05CA,0x05CA,0x05CA},  {0x05CB,0x05CB,0x05CB}, /* 05CA */
2732   {0x05CC,0x05CC,0x05CC},  {0x05CD,0x05CD,0x05CD}, /* 05CC */
2733   {0x05CE,0x05CE,0x05CE},  {0x05CF,0x05CF,0x05CF}, /* 05CE */
2734   {0x05D0,0x05D0,0x05D0},  {0x05D1,0x05D1,0x05D1}, /* 05D0 */
2735   {0x05D2,0x05D2,0x05D2},  {0x05D3,0x05D3,0x05D3}, /* 05D2 */
2736   {0x05D4,0x05D4,0x05D4},  {0x05D5,0x05D5,0x05D5}, /* 05D4 */
2737   {0x05D6,0x05D6,0x05D6},  {0x05D7,0x05D7,0x05D7}, /* 05D6 */
2738   {0x05D8,0x05D8,0x05D8},  {0x05D9,0x05D9,0x05D9}, /* 05D8 */
2739   {0x05DA,0x05DA,0x05DA},  {0x05DB,0x05DB,0x05DB}, /* 05DA */
2740   {0x05DC,0x05DC,0x05DC},  {0x05DD,0x05DD,0x05DD}, /* 05DC */
2741   {0x05DE,0x05DE,0x05DE},  {0x05DF,0x05DF,0x05DF}, /* 05DE */
2742   {0x05E0,0x05E0,0x05E0},  {0x05E1,0x05E1,0x05E1}, /* 05E0 */
2743   {0x05E2,0x05E2,0x05E2},  {0x05E3,0x05E3,0x05E3}, /* 05E2 */
2744   {0x05E4,0x05E4,0x05E4},  {0x05E5,0x05E5,0x05E5}, /* 05E4 */
2745   {0x05E6,0x05E6,0x05E6},  {0x05E7,0x05E7,0x05E7}, /* 05E6 */
2746   {0x05E8,0x05E8,0x05E8},  {0x05E9,0x05E9,0x05E9}, /* 05E8 */
2747   {0x05EA,0x05EA,0x05EA},  {0x05EB,0x05EB,0x05EB}, /* 05EA */
2748   {0x05EC,0x05EC,0x05EC},  {0x05ED,0x05ED,0x05ED}, /* 05EC */
2749   {0x05EE,0x05EE,0x05EE},  {0x05EF,0x05EF,0x05EF}, /* 05EE */
2750   {0x05F0,0x05F0,0x05F0},  {0x05F1,0x05F1,0x05F1}, /* 05F0 */
2751   {0x05F2,0x05F2,0x05F2},  {0x05F3,0x05F3,0x05F3}, /* 05F2 */
2752   {0x05F4,0x05F4,0x05F4},  {0x05F5,0x05F5,0x05F5}, /* 05F4 */
2753   {0x05F6,0x05F6,0x05F6},  {0x05F7,0x05F7,0x05F7}, /* 05F6 */
2754   {0x05F8,0x05F8,0x05F8},  {0x05F9,0x05F9,0x05F9}, /* 05F8 */
2755   {0x05FA,0x05FA,0x05FA},  {0x05FB,0x05FB,0x05FB}, /* 05FA */
2756   {0x05FC,0x05FC,0x05FC},  {0x05FD,0x05FD,0x05FD}, /* 05FC */
2757   {0x05FE,0x05FE,0x05FE},  {0x05FF,0x05FF,0x05FF} /* 05FE */
2758 };
2759 
2760 static MY_UNICASE_CHARACTER u520p10[]={
2761   {0x1000,0x1000,0x1000},  {0x1001,0x1001,0x1001}, /* 1000 */
2762   {0x1002,0x1002,0x1002},  {0x1003,0x1003,0x1003}, /* 1002 */
2763   {0x1004,0x1004,0x1004},  {0x1005,0x1005,0x1005}, /* 1004 */
2764   {0x1006,0x1006,0x1006},  {0x1007,0x1007,0x1007}, /* 1006 */
2765   {0x1008,0x1008,0x1008},  {0x1009,0x1009,0x1009}, /* 1008 */
2766   {0x100A,0x100A,0x100A},  {0x100B,0x100B,0x100B}, /* 100A */
2767   {0x100C,0x100C,0x100C},  {0x100D,0x100D,0x100D}, /* 100C */
2768   {0x100E,0x100E,0x100E},  {0x100F,0x100F,0x100F}, /* 100E */
2769   {0x1010,0x1010,0x1010},  {0x1011,0x1011,0x1011}, /* 1010 */
2770   {0x1012,0x1012,0x1012},  {0x1013,0x1013,0x1013}, /* 1012 */
2771   {0x1014,0x1014,0x1014},  {0x1015,0x1015,0x1015}, /* 1014 */
2772   {0x1016,0x1016,0x1016},  {0x1017,0x1017,0x1017}, /* 1016 */
2773   {0x1018,0x1018,0x1018},  {0x1019,0x1019,0x1019}, /* 1018 */
2774   {0x101A,0x101A,0x101A},  {0x101B,0x101B,0x101B}, /* 101A */
2775   {0x101C,0x101C,0x101C},  {0x101D,0x101D,0x101D}, /* 101C */
2776   {0x101E,0x101E,0x101E},  {0x101F,0x101F,0x101F}, /* 101E */
2777   {0x1020,0x1020,0x1020},  {0x1021,0x1021,0x1021}, /* 1020 */
2778   {0x1022,0x1022,0x1022},  {0x1023,0x1023,0x1023}, /* 1022 */
2779   {0x1024,0x1024,0x1024},  {0x1025,0x1025,0x1025}, /* 1024 */
2780   {0x1026,0x1026,0x1026},  {0x1027,0x1027,0x1027}, /* 1026 */
2781   {0x1028,0x1028,0x1028},  {0x1029,0x1029,0x1029}, /* 1028 */
2782   {0x102A,0x102A,0x102A},  {0x102B,0x102B,0x102B}, /* 102A */
2783   {0x102C,0x102C,0x102C},  {0x102D,0x102D,0x102D}, /* 102C */
2784   {0x102E,0x102E,0x102E},  {0x102F,0x102F,0x102F}, /* 102E */
2785   {0x1030,0x1030,0x1030},  {0x1031,0x1031,0x1031}, /* 1030 */
2786   {0x1032,0x1032,0x1032},  {0x1033,0x1033,0x1033}, /* 1032 */
2787   {0x1034,0x1034,0x1034},  {0x1035,0x1035,0x1035}, /* 1034 */
2788   {0x1036,0x1036,0x1036},  {0x1037,0x1037,0x1037}, /* 1036 */
2789   {0x1038,0x1038,0x1038},  {0x1039,0x1039,0x1039}, /* 1038 */
2790   {0x103A,0x103A,0x103A},  {0x103B,0x103B,0x103B}, /* 103A */
2791   {0x103C,0x103C,0x103C},  {0x103D,0x103D,0x103D}, /* 103C */
2792   {0x103E,0x103E,0x103E},  {0x103F,0x103F,0x103F}, /* 103E */
2793   {0x1040,0x1040,0x1040},  {0x1041,0x1041,0x1041}, /* 1040 */
2794   {0x1042,0x1042,0x1042},  {0x1043,0x1043,0x1043}, /* 1042 */
2795   {0x1044,0x1044,0x1044},  {0x1045,0x1045,0x1045}, /* 1044 */
2796   {0x1046,0x1046,0x1046},  {0x1047,0x1047,0x1047}, /* 1046 */
2797   {0x1048,0x1048,0x1048},  {0x1049,0x1049,0x1049}, /* 1048 */
2798   {0x104A,0x104A,0x104A},  {0x104B,0x104B,0x104B}, /* 104A */
2799   {0x104C,0x104C,0x104C},  {0x104D,0x104D,0x104D}, /* 104C */
2800   {0x104E,0x104E,0x104E},  {0x104F,0x104F,0x104F}, /* 104E */
2801   {0x1050,0x1050,0x1050},  {0x1051,0x1051,0x1051}, /* 1050 */
2802   {0x1052,0x1052,0x1052},  {0x1053,0x1053,0x1053}, /* 1052 */
2803   {0x1054,0x1054,0x1054},  {0x1055,0x1055,0x1055}, /* 1054 */
2804   {0x1056,0x1056,0x1056},  {0x1057,0x1057,0x1057}, /* 1056 */
2805   {0x1058,0x1058,0x1058},  {0x1059,0x1059,0x1059}, /* 1058 */
2806   {0x105A,0x105A,0x105A},  {0x105B,0x105B,0x105B}, /* 105A */
2807   {0x105C,0x105C,0x105C},  {0x105D,0x105D,0x105D}, /* 105C */
2808   {0x105E,0x105E,0x105E},  {0x105F,0x105F,0x105F}, /* 105E */
2809   {0x1060,0x1060,0x1060},  {0x1061,0x1061,0x1061}, /* 1060 */
2810   {0x1062,0x1062,0x1062},  {0x1063,0x1063,0x1063}, /* 1062 */
2811   {0x1064,0x1064,0x1064},  {0x1065,0x1065,0x1065}, /* 1064 */
2812   {0x1066,0x1066,0x1066},  {0x1067,0x1067,0x1067}, /* 1066 */
2813   {0x1068,0x1068,0x1068},  {0x1069,0x1069,0x1069}, /* 1068 */
2814   {0x106A,0x106A,0x106A},  {0x106B,0x106B,0x106B}, /* 106A */
2815   {0x106C,0x106C,0x106C},  {0x106D,0x106D,0x106D}, /* 106C */
2816   {0x106E,0x106E,0x106E},  {0x106F,0x106F,0x106F}, /* 106E */
2817   {0x1070,0x1070,0x1070},  {0x1071,0x1071,0x1071}, /* 1070 */
2818   {0x1072,0x1072,0x1072},  {0x1073,0x1073,0x1073}, /* 1072 */
2819   {0x1074,0x1074,0x1074},  {0x1075,0x1075,0x1075}, /* 1074 */
2820   {0x1076,0x1076,0x1076},  {0x1077,0x1077,0x1077}, /* 1076 */
2821   {0x1078,0x1078,0x1078},  {0x1079,0x1079,0x1079}, /* 1078 */
2822   {0x107A,0x107A,0x107A},  {0x107B,0x107B,0x107B}, /* 107A */
2823   {0x107C,0x107C,0x107C},  {0x107D,0x107D,0x107D}, /* 107C */
2824   {0x107E,0x107E,0x107E},  {0x107F,0x107F,0x107F}, /* 107E */
2825   {0x1080,0x1080,0x1080},  {0x1081,0x1081,0x1081}, /* 1080 */
2826   {0x1082,0x1082,0x1082},  {0x1083,0x1083,0x1083}, /* 1082 */
2827   {0x1084,0x1084,0x1084},  {0x1085,0x1085,0x1085}, /* 1084 */
2828   {0x1086,0x1086,0x1086},  {0x1087,0x1087,0x1087}, /* 1086 */
2829   {0x1088,0x1088,0x1088},  {0x1089,0x1089,0x1089}, /* 1088 */
2830   {0x108A,0x108A,0x108A},  {0x108B,0x108B,0x108B}, /* 108A */
2831   {0x108C,0x108C,0x108C},  {0x108D,0x108D,0x108D}, /* 108C */
2832   {0x108E,0x108E,0x108E},  {0x108F,0x108F,0x108F}, /* 108E */
2833   {0x1090,0x1090,0x1090},  {0x1091,0x1091,0x1091}, /* 1090 */
2834   {0x1092,0x1092,0x1092},  {0x1093,0x1093,0x1093}, /* 1092 */
2835   {0x1094,0x1094,0x1094},  {0x1095,0x1095,0x1095}, /* 1094 */
2836   {0x1096,0x1096,0x1096},  {0x1097,0x1097,0x1097}, /* 1096 */
2837   {0x1098,0x1098,0x1098},  {0x1099,0x1099,0x1099}, /* 1098 */
2838   {0x109A,0x109A,0x109A},  {0x109B,0x109B,0x109B}, /* 109A */
2839   {0x109C,0x109C,0x109C},  {0x109D,0x109D,0x109D}, /* 109C */
2840   {0x109E,0x109E,0x109E},  {0x109F,0x109F,0x109F}, /* 109E */
2841   {0x10A0,0x2D00,0x10A0},  {0x10A1,0x2D01,0x10A1}, /* 10A0 */
2842   {0x10A2,0x2D02,0x10A2},  {0x10A3,0x2D03,0x10A3}, /* 10A2 */
2843   {0x10A4,0x2D04,0x10A4},  {0x10A5,0x2D05,0x10A5}, /* 10A4 */
2844   {0x10A6,0x2D06,0x10A6},  {0x10A7,0x2D07,0x10A7}, /* 10A6 */
2845   {0x10A8,0x2D08,0x10A8},  {0x10A9,0x2D09,0x10A9}, /* 10A8 */
2846   {0x10AA,0x2D0A,0x10AA},  {0x10AB,0x2D0B,0x10AB}, /* 10AA */
2847   {0x10AC,0x2D0C,0x10AC},  {0x10AD,0x2D0D,0x10AD}, /* 10AC */
2848   {0x10AE,0x2D0E,0x10AE},  {0x10AF,0x2D0F,0x10AF}, /* 10AE */
2849   {0x10B0,0x2D10,0x10B0},  {0x10B1,0x2D11,0x10B1}, /* 10B0 */
2850   {0x10B2,0x2D12,0x10B2},  {0x10B3,0x2D13,0x10B3}, /* 10B2 */
2851   {0x10B4,0x2D14,0x10B4},  {0x10B5,0x2D15,0x10B5}, /* 10B4 */
2852   {0x10B6,0x2D16,0x10B6},  {0x10B7,0x2D17,0x10B7}, /* 10B6 */
2853   {0x10B8,0x2D18,0x10B8},  {0x10B9,0x2D19,0x10B9}, /* 10B8 */
2854   {0x10BA,0x2D1A,0x10BA},  {0x10BB,0x2D1B,0x10BB}, /* 10BA */
2855   {0x10BC,0x2D1C,0x10BC},  {0x10BD,0x2D1D,0x10BD}, /* 10BC */
2856   {0x10BE,0x2D1E,0x10BE},  {0x10BF,0x2D1F,0x10BF}, /* 10BE */
2857   {0x10C0,0x2D20,0x10C0},  {0x10C1,0x2D21,0x10C1}, /* 10C0 */
2858   {0x10C2,0x2D22,0x10C2},  {0x10C3,0x2D23,0x10C3}, /* 10C2 */
2859   {0x10C4,0x2D24,0x10C4},  {0x10C5,0x2D25,0x10C5}, /* 10C4 */
2860   {0x10C6,0x10C6,0x10C6},  {0x10C7,0x10C7,0x10C7}, /* 10C6 */
2861   {0x10C8,0x10C8,0x10C8},  {0x10C9,0x10C9,0x10C9}, /* 10C8 */
2862   {0x10CA,0x10CA,0x10CA},  {0x10CB,0x10CB,0x10CB}, /* 10CA */
2863   {0x10CC,0x10CC,0x10CC},  {0x10CD,0x10CD,0x10CD}, /* 10CC */
2864   {0x10CE,0x10CE,0x10CE},  {0x10CF,0x10CF,0x10CF}, /* 10CE */
2865   {0x10D0,0x10D0,0x10D0},  {0x10D1,0x10D1,0x10D1}, /* 10D0 */
2866   {0x10D2,0x10D2,0x10D2},  {0x10D3,0x10D3,0x10D3}, /* 10D2 */
2867   {0x10D4,0x10D4,0x10D4},  {0x10D5,0x10D5,0x10D5}, /* 10D4 */
2868   {0x10D6,0x10D6,0x10D6},  {0x10D7,0x10D7,0x10D7}, /* 10D6 */
2869   {0x10D8,0x10D8,0x10D8},  {0x10D9,0x10D9,0x10D9}, /* 10D8 */
2870   {0x10DA,0x10DA,0x10DA},  {0x10DB,0x10DB,0x10DB}, /* 10DA */
2871   {0x10DC,0x10DC,0x10DC},  {0x10DD,0x10DD,0x10DD}, /* 10DC */
2872   {0x10DE,0x10DE,0x10DE},  {0x10DF,0x10DF,0x10DF}, /* 10DE */
2873   {0x10E0,0x10E0,0x10E0},  {0x10E1,0x10E1,0x10E1}, /* 10E0 */
2874   {0x10E2,0x10E2,0x10E2},  {0x10E3,0x10E3,0x10E3}, /* 10E2 */
2875   {0x10E4,0x10E4,0x10E4},  {0x10E5,0x10E5,0x10E5}, /* 10E4 */
2876   {0x10E6,0x10E6,0x10E6},  {0x10E7,0x10E7,0x10E7}, /* 10E6 */
2877   {0x10E8,0x10E8,0x10E8},  {0x10E9,0x10E9,0x10E9}, /* 10E8 */
2878   {0x10EA,0x10EA,0x10EA},  {0x10EB,0x10EB,0x10EB}, /* 10EA */
2879   {0x10EC,0x10EC,0x10EC},  {0x10ED,0x10ED,0x10ED}, /* 10EC */
2880   {0x10EE,0x10EE,0x10EE},  {0x10EF,0x10EF,0x10EF}, /* 10EE */
2881   {0x10F0,0x10F0,0x10F0},  {0x10F1,0x10F1,0x10F1}, /* 10F0 */
2882   {0x10F2,0x10F2,0x10F2},  {0x10F3,0x10F3,0x10F3}, /* 10F2 */
2883   {0x10F4,0x10F4,0x10F4},  {0x10F5,0x10F5,0x10F5}, /* 10F4 */
2884   {0x10F6,0x10F6,0x10F6},  {0x10F7,0x10F7,0x10F7}, /* 10F6 */
2885   {0x10F8,0x10F8,0x10F8},  {0x10F9,0x10F9,0x10F9}, /* 10F8 */
2886   {0x10FA,0x10FA,0x10FA},  {0x10FB,0x10FB,0x10FB}, /* 10FA */
2887   {0x10FC,0x10FC,0x10FC},  {0x10FD,0x10FD,0x10FD}, /* 10FC */
2888   {0x10FE,0x10FE,0x10FE},  {0x10FF,0x10FF,0x10FF} /* 10FE */
2889 };
2890 
2891 static MY_UNICASE_CHARACTER u520p1D[]={
2892   {0x1D00,0x1D00,0x1D00},  {0x1D01,0x1D01,0x1D01}, /* 1D00 */
2893   {0x1D02,0x1D02,0x1D02},  {0x1D03,0x1D03,0x1D03}, /* 1D02 */
2894   {0x1D04,0x1D04,0x1D04},  {0x1D05,0x1D05,0x1D05}, /* 1D04 */
2895   {0x1D06,0x1D06,0x1D06},  {0x1D07,0x1D07,0x1D07}, /* 1D06 */
2896   {0x1D08,0x1D08,0x1D08},  {0x1D09,0x1D09,0x1D09}, /* 1D08 */
2897   {0x1D0A,0x1D0A,0x1D0A},  {0x1D0B,0x1D0B,0x1D0B}, /* 1D0A */
2898   {0x1D0C,0x1D0C,0x1D0C},  {0x1D0D,0x1D0D,0x1D0D}, /* 1D0C */
2899   {0x1D0E,0x1D0E,0x1D0E},  {0x1D0F,0x1D0F,0x1D0F}, /* 1D0E */
2900   {0x1D10,0x1D10,0x1D10},  {0x1D11,0x1D11,0x1D11}, /* 1D10 */
2901   {0x1D12,0x1D12,0x1D12},  {0x1D13,0x1D13,0x1D13}, /* 1D12 */
2902   {0x1D14,0x1D14,0x1D14},  {0x1D15,0x1D15,0x1D15}, /* 1D14 */
2903   {0x1D16,0x1D16,0x1D16},  {0x1D17,0x1D17,0x1D17}, /* 1D16 */
2904   {0x1D18,0x1D18,0x1D18},  {0x1D19,0x1D19,0x1D19}, /* 1D18 */
2905   {0x1D1A,0x1D1A,0x1D1A},  {0x1D1B,0x1D1B,0x1D1B}, /* 1D1A */
2906   {0x1D1C,0x1D1C,0x1D1C},  {0x1D1D,0x1D1D,0x1D1D}, /* 1D1C */
2907   {0x1D1E,0x1D1E,0x1D1E},  {0x1D1F,0x1D1F,0x1D1F}, /* 1D1E */
2908   {0x1D20,0x1D20,0x1D20},  {0x1D21,0x1D21,0x1D21}, /* 1D20 */
2909   {0x1D22,0x1D22,0x1D22},  {0x1D23,0x1D23,0x1D23}, /* 1D22 */
2910   {0x1D24,0x1D24,0x1D24},  {0x1D25,0x1D25,0x1D25}, /* 1D24 */
2911   {0x1D26,0x1D26,0x1D26},  {0x1D27,0x1D27,0x1D27}, /* 1D26 */
2912   {0x1D28,0x1D28,0x1D28},  {0x1D29,0x1D29,0x1D29}, /* 1D28 */
2913   {0x1D2A,0x1D2A,0x1D2A},  {0x1D2B,0x1D2B,0x1D2B}, /* 1D2A */
2914   {0x1D2C,0x1D2C,0x1D2C},  {0x1D2D,0x1D2D,0x1D2D}, /* 1D2C */
2915   {0x1D2E,0x1D2E,0x1D2E},  {0x1D2F,0x1D2F,0x1D2F}, /* 1D2E */
2916   {0x1D30,0x1D30,0x1D30},  {0x1D31,0x1D31,0x1D31}, /* 1D30 */
2917   {0x1D32,0x1D32,0x1D32},  {0x1D33,0x1D33,0x1D33}, /* 1D32 */
2918   {0x1D34,0x1D34,0x1D34},  {0x1D35,0x1D35,0x1D35}, /* 1D34 */
2919   {0x1D36,0x1D36,0x1D36},  {0x1D37,0x1D37,0x1D37}, /* 1D36 */
2920   {0x1D38,0x1D38,0x1D38},  {0x1D39,0x1D39,0x1D39}, /* 1D38 */
2921   {0x1D3A,0x1D3A,0x1D3A},  {0x1D3B,0x1D3B,0x1D3B}, /* 1D3A */
2922   {0x1D3C,0x1D3C,0x1D3C},  {0x1D3D,0x1D3D,0x1D3D}, /* 1D3C */
2923   {0x1D3E,0x1D3E,0x1D3E},  {0x1D3F,0x1D3F,0x1D3F}, /* 1D3E */
2924   {0x1D40,0x1D40,0x1D40},  {0x1D41,0x1D41,0x1D41}, /* 1D40 */
2925   {0x1D42,0x1D42,0x1D42},  {0x1D43,0x1D43,0x1D43}, /* 1D42 */
2926   {0x1D44,0x1D44,0x1D44},  {0x1D45,0x1D45,0x1D45}, /* 1D44 */
2927   {0x1D46,0x1D46,0x1D46},  {0x1D47,0x1D47,0x1D47}, /* 1D46 */
2928   {0x1D48,0x1D48,0x1D48},  {0x1D49,0x1D49,0x1D49}, /* 1D48 */
2929   {0x1D4A,0x1D4A,0x1D4A},  {0x1D4B,0x1D4B,0x1D4B}, /* 1D4A */
2930   {0x1D4C,0x1D4C,0x1D4C},  {0x1D4D,0x1D4D,0x1D4D}, /* 1D4C */
2931   {0x1D4E,0x1D4E,0x1D4E},  {0x1D4F,0x1D4F,0x1D4F}, /* 1D4E */
2932   {0x1D50,0x1D50,0x1D50},  {0x1D51,0x1D51,0x1D51}, /* 1D50 */
2933   {0x1D52,0x1D52,0x1D52},  {0x1D53,0x1D53,0x1D53}, /* 1D52 */
2934   {0x1D54,0x1D54,0x1D54},  {0x1D55,0x1D55,0x1D55}, /* 1D54 */
2935   {0x1D56,0x1D56,0x1D56},  {0x1D57,0x1D57,0x1D57}, /* 1D56 */
2936   {0x1D58,0x1D58,0x1D58},  {0x1D59,0x1D59,0x1D59}, /* 1D58 */
2937   {0x1D5A,0x1D5A,0x1D5A},  {0x1D5B,0x1D5B,0x1D5B}, /* 1D5A */
2938   {0x1D5C,0x1D5C,0x1D5C},  {0x1D5D,0x1D5D,0x1D5D}, /* 1D5C */
2939   {0x1D5E,0x1D5E,0x1D5E},  {0x1D5F,0x1D5F,0x1D5F}, /* 1D5E */
2940   {0x1D60,0x1D60,0x1D60},  {0x1D61,0x1D61,0x1D61}, /* 1D60 */
2941   {0x1D62,0x1D62,0x1D62},  {0x1D63,0x1D63,0x1D63}, /* 1D62 */
2942   {0x1D64,0x1D64,0x1D64},  {0x1D65,0x1D65,0x1D65}, /* 1D64 */
2943   {0x1D66,0x1D66,0x1D66},  {0x1D67,0x1D67,0x1D67}, /* 1D66 */
2944   {0x1D68,0x1D68,0x1D68},  {0x1D69,0x1D69,0x1D69}, /* 1D68 */
2945   {0x1D6A,0x1D6A,0x1D6A},  {0x1D6B,0x1D6B,0x1D6B}, /* 1D6A */
2946   {0x1D6C,0x1D6C,0x1D6C},  {0x1D6D,0x1D6D,0x1D6D}, /* 1D6C */
2947   {0x1D6E,0x1D6E,0x1D6E},  {0x1D6F,0x1D6F,0x1D6F}, /* 1D6E */
2948   {0x1D70,0x1D70,0x1D70},  {0x1D71,0x1D71,0x1D71}, /* 1D70 */
2949   {0x1D72,0x1D72,0x1D72},  {0x1D73,0x1D73,0x1D73}, /* 1D72 */
2950   {0x1D74,0x1D74,0x1D74},  {0x1D75,0x1D75,0x1D75}, /* 1D74 */
2951   {0x1D76,0x1D76,0x1D76},  {0x1D77,0x1D77,0x1D77}, /* 1D76 */
2952   {0x1D78,0x1D78,0x1D78},  {0xA77D,0x1D79,0xA77D}, /* 1D78 */
2953   {0x1D7A,0x1D7A,0x1D7A},  {0x1D7B,0x1D7B,0x1D7B}, /* 1D7A */
2954   {0x1D7C,0x1D7C,0x1D7C},  {0x2C63,0x1D7D,0x2C63}, /* 1D7C */
2955   {0x1D7E,0x1D7E,0x1D7E},  {0x1D7F,0x1D7F,0x1D7F}, /* 1D7E */
2956   {0x1D80,0x1D80,0x1D80},  {0x1D81,0x1D81,0x1D81}, /* 1D80 */
2957   {0x1D82,0x1D82,0x1D82},  {0x1D83,0x1D83,0x1D83}, /* 1D82 */
2958   {0x1D84,0x1D84,0x1D84},  {0x1D85,0x1D85,0x1D85}, /* 1D84 */
2959   {0x1D86,0x1D86,0x1D86},  {0x1D87,0x1D87,0x1D87}, /* 1D86 */
2960   {0x1D88,0x1D88,0x1D88},  {0x1D89,0x1D89,0x1D89}, /* 1D88 */
2961   {0x1D8A,0x1D8A,0x1D8A},  {0x1D8B,0x1D8B,0x1D8B}, /* 1D8A */
2962   {0x1D8C,0x1D8C,0x1D8C},  {0x1D8D,0x1D8D,0x1D8D}, /* 1D8C */
2963   {0x1D8E,0x1D8E,0x1D8E},  {0x1D8F,0x1D8F,0x1D8F}, /* 1D8E */
2964   {0x1D90,0x1D90,0x1D90},  {0x1D91,0x1D91,0x1D91}, /* 1D90 */
2965   {0x1D92,0x1D92,0x1D92},  {0x1D93,0x1D93,0x1D93}, /* 1D92 */
2966   {0x1D94,0x1D94,0x1D94},  {0x1D95,0x1D95,0x1D95}, /* 1D94 */
2967   {0x1D96,0x1D96,0x1D96},  {0x1D97,0x1D97,0x1D97}, /* 1D96 */
2968   {0x1D98,0x1D98,0x1D98},  {0x1D99,0x1D99,0x1D99}, /* 1D98 */
2969   {0x1D9A,0x1D9A,0x1D9A},  {0x1D9B,0x1D9B,0x1D9B}, /* 1D9A */
2970   {0x1D9C,0x1D9C,0x1D9C},  {0x1D9D,0x1D9D,0x1D9D}, /* 1D9C */
2971   {0x1D9E,0x1D9E,0x1D9E},  {0x1D9F,0x1D9F,0x1D9F}, /* 1D9E */
2972   {0x1DA0,0x1DA0,0x1DA0},  {0x1DA1,0x1DA1,0x1DA1}, /* 1DA0 */
2973   {0x1DA2,0x1DA2,0x1DA2},  {0x1DA3,0x1DA3,0x1DA3}, /* 1DA2 */
2974   {0x1DA4,0x1DA4,0x1DA4},  {0x1DA5,0x1DA5,0x1DA5}, /* 1DA4 */
2975   {0x1DA6,0x1DA6,0x1DA6},  {0x1DA7,0x1DA7,0x1DA7}, /* 1DA6 */
2976   {0x1DA8,0x1DA8,0x1DA8},  {0x1DA9,0x1DA9,0x1DA9}, /* 1DA8 */
2977   {0x1DAA,0x1DAA,0x1DAA},  {0x1DAB,0x1DAB,0x1DAB}, /* 1DAA */
2978   {0x1DAC,0x1DAC,0x1DAC},  {0x1DAD,0x1DAD,0x1DAD}, /* 1DAC */
2979   {0x1DAE,0x1DAE,0x1DAE},  {0x1DAF,0x1DAF,0x1DAF}, /* 1DAE */
2980   {0x1DB0,0x1DB0,0x1DB0},  {0x1DB1,0x1DB1,0x1DB1}, /* 1DB0 */
2981   {0x1DB2,0x1DB2,0x1DB2},  {0x1DB3,0x1DB3,0x1DB3}, /* 1DB2 */
2982   {0x1DB4,0x1DB4,0x1DB4},  {0x1DB5,0x1DB5,0x1DB5}, /* 1DB4 */
2983   {0x1DB6,0x1DB6,0x1DB6},  {0x1DB7,0x1DB7,0x1DB7}, /* 1DB6 */
2984   {0x1DB8,0x1DB8,0x1DB8},  {0x1DB9,0x1DB9,0x1DB9}, /* 1DB8 */
2985   {0x1DBA,0x1DBA,0x1DBA},  {0x1DBB,0x1DBB,0x1DBB}, /* 1DBA */
2986   {0x1DBC,0x1DBC,0x1DBC},  {0x1DBD,0x1DBD,0x1DBD}, /* 1DBC */
2987   {0x1DBE,0x1DBE,0x1DBE},  {0x1DBF,0x1DBF,0x1DBF}, /* 1DBE */
2988   {0x1DC0,0x1DC0,0x1DC0},  {0x1DC1,0x1DC1,0x1DC1}, /* 1DC0 */
2989   {0x1DC2,0x1DC2,0x1DC2},  {0x1DC3,0x1DC3,0x1DC3}, /* 1DC2 */
2990   {0x1DC4,0x1DC4,0x1DC4},  {0x1DC5,0x1DC5,0x1DC5}, /* 1DC4 */
2991   {0x1DC6,0x1DC6,0x1DC6},  {0x1DC7,0x1DC7,0x1DC7}, /* 1DC6 */
2992   {0x1DC8,0x1DC8,0x1DC8},  {0x1DC9,0x1DC9,0x1DC9}, /* 1DC8 */
2993   {0x1DCA,0x1DCA,0x1DCA},  {0x1DCB,0x1DCB,0x1DCB}, /* 1DCA */
2994   {0x1DCC,0x1DCC,0x1DCC},  {0x1DCD,0x1DCD,0x1DCD}, /* 1DCC */
2995   {0x1DCE,0x1DCE,0x1DCE},  {0x1DCF,0x1DCF,0x1DCF}, /* 1DCE */
2996   {0x1DD0,0x1DD0,0x1DD0},  {0x1DD1,0x1DD1,0x1DD1}, /* 1DD0 */
2997   {0x1DD2,0x1DD2,0x1DD2},  {0x1DD3,0x1DD3,0x1DD3}, /* 1DD2 */
2998   {0x1DD4,0x1DD4,0x1DD4},  {0x1DD5,0x1DD5,0x1DD5}, /* 1DD4 */
2999   {0x1DD6,0x1DD6,0x1DD6},  {0x1DD7,0x1DD7,0x1DD7}, /* 1DD6 */
3000   {0x1DD8,0x1DD8,0x1DD8},  {0x1DD9,0x1DD9,0x1DD9}, /* 1DD8 */
3001   {0x1DDA,0x1DDA,0x1DDA},  {0x1DDB,0x1DDB,0x1DDB}, /* 1DDA */
3002   {0x1DDC,0x1DDC,0x1DDC},  {0x1DDD,0x1DDD,0x1DDD}, /* 1DDC */
3003   {0x1DDE,0x1DDE,0x1DDE},  {0x1DDF,0x1DDF,0x1DDF}, /* 1DDE */
3004   {0x1DE0,0x1DE0,0x1DE0},  {0x1DE1,0x1DE1,0x1DE1}, /* 1DE0 */
3005   {0x1DE2,0x1DE2,0x1DE2},  {0x1DE3,0x1DE3,0x1DE3}, /* 1DE2 */
3006   {0x1DE4,0x1DE4,0x1DE4},  {0x1DE5,0x1DE5,0x1DE5}, /* 1DE4 */
3007   {0x1DE6,0x1DE6,0x1DE6},  {0x1DE7,0x1DE7,0x1DE7}, /* 1DE6 */
3008   {0x1DE8,0x1DE8,0x1DE8},  {0x1DE9,0x1DE9,0x1DE9}, /* 1DE8 */
3009   {0x1DEA,0x1DEA,0x1DEA},  {0x1DEB,0x1DEB,0x1DEB}, /* 1DEA */
3010   {0x1DEC,0x1DEC,0x1DEC},  {0x1DED,0x1DED,0x1DED}, /* 1DEC */
3011   {0x1DEE,0x1DEE,0x1DEE},  {0x1DEF,0x1DEF,0x1DEF}, /* 1DEE */
3012   {0x1DF0,0x1DF0,0x1DF0},  {0x1DF1,0x1DF1,0x1DF1}, /* 1DF0 */
3013   {0x1DF2,0x1DF2,0x1DF2},  {0x1DF3,0x1DF3,0x1DF3}, /* 1DF2 */
3014   {0x1DF4,0x1DF4,0x1DF4},  {0x1DF5,0x1DF5,0x1DF5}, /* 1DF4 */
3015   {0x1DF6,0x1DF6,0x1DF6},  {0x1DF7,0x1DF7,0x1DF7}, /* 1DF6 */
3016   {0x1DF8,0x1DF8,0x1DF8},  {0x1DF9,0x1DF9,0x1DF9}, /* 1DF8 */
3017   {0x1DFA,0x1DFA,0x1DFA},  {0x1DFB,0x1DFB,0x1DFB}, /* 1DFA */
3018   {0x1DFC,0x1DFC,0x1DFC},  {0x1DFD,0x1DFD,0x1DFD}, /* 1DFC */
3019   {0x1DFE,0x1DFE,0x1DFE},  {0x1DFF,0x1DFF,0x1DFF} /* 1DFE */
3020 };
3021 
3022 static MY_UNICASE_CHARACTER u520p1E[]={
3023   {0x1E00,0x1E01,0x0041},  {0x1E00,0x1E01,0x0041}, /* 1E00 */
3024   {0x1E02,0x1E03,0x0042},  {0x1E02,0x1E03,0x0042}, /* 1E02 */
3025   {0x1E04,0x1E05,0x0042},  {0x1E04,0x1E05,0x0042}, /* 1E04 */
3026   {0x1E06,0x1E07,0x0042},  {0x1E06,0x1E07,0x0042}, /* 1E06 */
3027   {0x1E08,0x1E09,0x0043},  {0x1E08,0x1E09,0x0043}, /* 1E08 */
3028   {0x1E0A,0x1E0B,0x0044},  {0x1E0A,0x1E0B,0x0044}, /* 1E0A */
3029   {0x1E0C,0x1E0D,0x0044},  {0x1E0C,0x1E0D,0x0044}, /* 1E0C */
3030   {0x1E0E,0x1E0F,0x0044},  {0x1E0E,0x1E0F,0x0044}, /* 1E0E */
3031   {0x1E10,0x1E11,0x0044},  {0x1E10,0x1E11,0x0044}, /* 1E10 */
3032   {0x1E12,0x1E13,0x0044},  {0x1E12,0x1E13,0x0044}, /* 1E12 */
3033   {0x1E14,0x1E15,0x0045},  {0x1E14,0x1E15,0x0045}, /* 1E14 */
3034   {0x1E16,0x1E17,0x0045},  {0x1E16,0x1E17,0x0045}, /* 1E16 */
3035   {0x1E18,0x1E19,0x0045},  {0x1E18,0x1E19,0x0045}, /* 1E18 */
3036   {0x1E1A,0x1E1B,0x0045},  {0x1E1A,0x1E1B,0x0045}, /* 1E1A */
3037   {0x1E1C,0x1E1D,0x0045},  {0x1E1C,0x1E1D,0x0045}, /* 1E1C */
3038   {0x1E1E,0x1E1F,0x0046},  {0x1E1E,0x1E1F,0x0046}, /* 1E1E */
3039   {0x1E20,0x1E21,0x0047},  {0x1E20,0x1E21,0x0047}, /* 1E20 */
3040   {0x1E22,0x1E23,0x0048},  {0x1E22,0x1E23,0x0048}, /* 1E22 */
3041   {0x1E24,0x1E25,0x0048},  {0x1E24,0x1E25,0x0048}, /* 1E24 */
3042   {0x1E26,0x1E27,0x0048},  {0x1E26,0x1E27,0x0048}, /* 1E26 */
3043   {0x1E28,0x1E29,0x0048},  {0x1E28,0x1E29,0x0048}, /* 1E28 */
3044   {0x1E2A,0x1E2B,0x0048},  {0x1E2A,0x1E2B,0x0048}, /* 1E2A */
3045   {0x1E2C,0x1E2D,0x0049},  {0x1E2C,0x1E2D,0x0049}, /* 1E2C */
3046   {0x1E2E,0x1E2F,0x0049},  {0x1E2E,0x1E2F,0x0049}, /* 1E2E */
3047   {0x1E30,0x1E31,0x004B},  {0x1E30,0x1E31,0x004B}, /* 1E30 */
3048   {0x1E32,0x1E33,0x004B},  {0x1E32,0x1E33,0x004B}, /* 1E32 */
3049   {0x1E34,0x1E35,0x004B},  {0x1E34,0x1E35,0x004B}, /* 1E34 */
3050   {0x1E36,0x1E37,0x004C},  {0x1E36,0x1E37,0x004C}, /* 1E36 */
3051   {0x1E38,0x1E39,0x004C},  {0x1E38,0x1E39,0x004C}, /* 1E38 */
3052   {0x1E3A,0x1E3B,0x004C},  {0x1E3A,0x1E3B,0x004C}, /* 1E3A */
3053   {0x1E3C,0x1E3D,0x004C},  {0x1E3C,0x1E3D,0x004C}, /* 1E3C */
3054   {0x1E3E,0x1E3F,0x004D},  {0x1E3E,0x1E3F,0x004D}, /* 1E3E */
3055   {0x1E40,0x1E41,0x004D},  {0x1E40,0x1E41,0x004D}, /* 1E40 */
3056   {0x1E42,0x1E43,0x004D},  {0x1E42,0x1E43,0x004D}, /* 1E42 */
3057   {0x1E44,0x1E45,0x004E},  {0x1E44,0x1E45,0x004E}, /* 1E44 */
3058   {0x1E46,0x1E47,0x004E},  {0x1E46,0x1E47,0x004E}, /* 1E46 */
3059   {0x1E48,0x1E49,0x004E},  {0x1E48,0x1E49,0x004E}, /* 1E48 */
3060   {0x1E4A,0x1E4B,0x004E},  {0x1E4A,0x1E4B,0x004E}, /* 1E4A */
3061   {0x1E4C,0x1E4D,0x004F},  {0x1E4C,0x1E4D,0x004F}, /* 1E4C */
3062   {0x1E4E,0x1E4F,0x004F},  {0x1E4E,0x1E4F,0x004F}, /* 1E4E */
3063   {0x1E50,0x1E51,0x004F},  {0x1E50,0x1E51,0x004F}, /* 1E50 */
3064   {0x1E52,0x1E53,0x004F},  {0x1E52,0x1E53,0x004F}, /* 1E52 */
3065   {0x1E54,0x1E55,0x0050},  {0x1E54,0x1E55,0x0050}, /* 1E54 */
3066   {0x1E56,0x1E57,0x0050},  {0x1E56,0x1E57,0x0050}, /* 1E56 */
3067   {0x1E58,0x1E59,0x0052},  {0x1E58,0x1E59,0x0052}, /* 1E58 */
3068   {0x1E5A,0x1E5B,0x0052},  {0x1E5A,0x1E5B,0x0052}, /* 1E5A */
3069   {0x1E5C,0x1E5D,0x0052},  {0x1E5C,0x1E5D,0x0052}, /* 1E5C */
3070   {0x1E5E,0x1E5F,0x0052},  {0x1E5E,0x1E5F,0x0052}, /* 1E5E */
3071   {0x1E60,0x1E61,0x0053},  {0x1E60,0x1E61,0x0053}, /* 1E60 */
3072   {0x1E62,0x1E63,0x0053},  {0x1E62,0x1E63,0x0053}, /* 1E62 */
3073   {0x1E64,0x1E65,0x0053},  {0x1E64,0x1E65,0x0053}, /* 1E64 */
3074   {0x1E66,0x1E67,0x0053},  {0x1E66,0x1E67,0x0053}, /* 1E66 */
3075   {0x1E68,0x1E69,0x0053},  {0x1E68,0x1E69,0x0053}, /* 1E68 */
3076   {0x1E6A,0x1E6B,0x0054},  {0x1E6A,0x1E6B,0x0054}, /* 1E6A */
3077   {0x1E6C,0x1E6D,0x0054},  {0x1E6C,0x1E6D,0x0054}, /* 1E6C */
3078   {0x1E6E,0x1E6F,0x0054},  {0x1E6E,0x1E6F,0x0054}, /* 1E6E */
3079   {0x1E70,0x1E71,0x0054},  {0x1E70,0x1E71,0x0054}, /* 1E70 */
3080   {0x1E72,0x1E73,0x0055},  {0x1E72,0x1E73,0x0055}, /* 1E72 */
3081   {0x1E74,0x1E75,0x0055},  {0x1E74,0x1E75,0x0055}, /* 1E74 */
3082   {0x1E76,0x1E77,0x0055},  {0x1E76,0x1E77,0x0055}, /* 1E76 */
3083   {0x1E78,0x1E79,0x0055},  {0x1E78,0x1E79,0x0055}, /* 1E78 */
3084   {0x1E7A,0x1E7B,0x0055},  {0x1E7A,0x1E7B,0x0055}, /* 1E7A */
3085   {0x1E7C,0x1E7D,0x0056},  {0x1E7C,0x1E7D,0x0056}, /* 1E7C */
3086   {0x1E7E,0x1E7F,0x0056},  {0x1E7E,0x1E7F,0x0056}, /* 1E7E */
3087   {0x1E80,0x1E81,0x0057},  {0x1E80,0x1E81,0x0057}, /* 1E80 */
3088   {0x1E82,0x1E83,0x0057},  {0x1E82,0x1E83,0x0057}, /* 1E82 */
3089   {0x1E84,0x1E85,0x0057},  {0x1E84,0x1E85,0x0057}, /* 1E84 */
3090   {0x1E86,0x1E87,0x0057},  {0x1E86,0x1E87,0x0057}, /* 1E86 */
3091   {0x1E88,0x1E89,0x0057},  {0x1E88,0x1E89,0x0057}, /* 1E88 */
3092   {0x1E8A,0x1E8B,0x0058},  {0x1E8A,0x1E8B,0x0058}, /* 1E8A */
3093   {0x1E8C,0x1E8D,0x0058},  {0x1E8C,0x1E8D,0x0058}, /* 1E8C */
3094   {0x1E8E,0x1E8F,0x0059},  {0x1E8E,0x1E8F,0x0059}, /* 1E8E */
3095   {0x1E90,0x1E91,0x005A},  {0x1E90,0x1E91,0x005A}, /* 1E90 */
3096   {0x1E92,0x1E93,0x005A},  {0x1E92,0x1E93,0x005A}, /* 1E92 */
3097   {0x1E94,0x1E95,0x005A},  {0x1E94,0x1E95,0x005A}, /* 1E94 */
3098   {0x1E96,0x1E96,0x0048},  {0x1E97,0x1E97,0x0054}, /* 1E96 */
3099   {0x1E98,0x1E98,0x0057},  {0x1E99,0x1E99,0x0059}, /* 1E98 */
3100   {0x1E9A,0x1E9A,0x1E9A},  {0x1E60,0x1E9B,0x0053}, /* 1E9A */
3101   {0x1E9C,0x1E9C,0x1E9C},  {0x1E9D,0x1E9D,0x1E9D}, /* 1E9C */
3102   {0x1E9E,0x00DF,0x1E9E},  {0x1E9F,0x1E9F,0x1E9F}, /* 1E9E */
3103   {0x1EA0,0x1EA1,0x0041},  {0x1EA0,0x1EA1,0x0041}, /* 1EA0 */
3104   {0x1EA2,0x1EA3,0x0041},  {0x1EA2,0x1EA3,0x0041}, /* 1EA2 */
3105   {0x1EA4,0x1EA5,0x0041},  {0x1EA4,0x1EA5,0x0041}, /* 1EA4 */
3106   {0x1EA6,0x1EA7,0x0041},  {0x1EA6,0x1EA7,0x0041}, /* 1EA6 */
3107   {0x1EA8,0x1EA9,0x0041},  {0x1EA8,0x1EA9,0x0041}, /* 1EA8 */
3108   {0x1EAA,0x1EAB,0x0041},  {0x1EAA,0x1EAB,0x0041}, /* 1EAA */
3109   {0x1EAC,0x1EAD,0x0041},  {0x1EAC,0x1EAD,0x0041}, /* 1EAC */
3110   {0x1EAE,0x1EAF,0x0041},  {0x1EAE,0x1EAF,0x0041}, /* 1EAE */
3111   {0x1EB0,0x1EB1,0x0041},  {0x1EB0,0x1EB1,0x0041}, /* 1EB0 */
3112   {0x1EB2,0x1EB3,0x0041},  {0x1EB2,0x1EB3,0x0041}, /* 1EB2 */
3113   {0x1EB4,0x1EB5,0x0041},  {0x1EB4,0x1EB5,0x0041}, /* 1EB4 */
3114   {0x1EB6,0x1EB7,0x0041},  {0x1EB6,0x1EB7,0x0041}, /* 1EB6 */
3115   {0x1EB8,0x1EB9,0x0045},  {0x1EB8,0x1EB9,0x0045}, /* 1EB8 */
3116   {0x1EBA,0x1EBB,0x0045},  {0x1EBA,0x1EBB,0x0045}, /* 1EBA */
3117   {0x1EBC,0x1EBD,0x0045},  {0x1EBC,0x1EBD,0x0045}, /* 1EBC */
3118   {0x1EBE,0x1EBF,0x0045},  {0x1EBE,0x1EBF,0x0045}, /* 1EBE */
3119   {0x1EC0,0x1EC1,0x0045},  {0x1EC0,0x1EC1,0x0045}, /* 1EC0 */
3120   {0x1EC2,0x1EC3,0x0045},  {0x1EC2,0x1EC3,0x0045}, /* 1EC2 */
3121   {0x1EC4,0x1EC5,0x0045},  {0x1EC4,0x1EC5,0x0045}, /* 1EC4 */
3122   {0x1EC6,0x1EC7,0x0045},  {0x1EC6,0x1EC7,0x0045}, /* 1EC6 */
3123   {0x1EC8,0x1EC9,0x0049},  {0x1EC8,0x1EC9,0x0049}, /* 1EC8 */
3124   {0x1ECA,0x1ECB,0x0049},  {0x1ECA,0x1ECB,0x0049}, /* 1ECA */
3125   {0x1ECC,0x1ECD,0x004F},  {0x1ECC,0x1ECD,0x004F}, /* 1ECC */
3126   {0x1ECE,0x1ECF,0x004F},  {0x1ECE,0x1ECF,0x004F}, /* 1ECE */
3127   {0x1ED0,0x1ED1,0x004F},  {0x1ED0,0x1ED1,0x004F}, /* 1ED0 */
3128   {0x1ED2,0x1ED3,0x004F},  {0x1ED2,0x1ED3,0x004F}, /* 1ED2 */
3129   {0x1ED4,0x1ED5,0x004F},  {0x1ED4,0x1ED5,0x004F}, /* 1ED4 */
3130   {0x1ED6,0x1ED7,0x004F},  {0x1ED6,0x1ED7,0x004F}, /* 1ED6 */
3131   {0x1ED8,0x1ED9,0x004F},  {0x1ED8,0x1ED9,0x004F}, /* 1ED8 */
3132   {0x1EDA,0x1EDB,0x004F},  {0x1EDA,0x1EDB,0x004F}, /* 1EDA */
3133   {0x1EDC,0x1EDD,0x004F},  {0x1EDC,0x1EDD,0x004F}, /* 1EDC */
3134   {0x1EDE,0x1EDF,0x004F},  {0x1EDE,0x1EDF,0x004F}, /* 1EDE */
3135   {0x1EE0,0x1EE1,0x004F},  {0x1EE0,0x1EE1,0x004F}, /* 1EE0 */
3136   {0x1EE2,0x1EE3,0x004F},  {0x1EE2,0x1EE3,0x004F}, /* 1EE2 */
3137   {0x1EE4,0x1EE5,0x0055},  {0x1EE4,0x1EE5,0x0055}, /* 1EE4 */
3138   {0x1EE6,0x1EE7,0x0055},  {0x1EE6,0x1EE7,0x0055}, /* 1EE6 */
3139   {0x1EE8,0x1EE9,0x0055},  {0x1EE8,0x1EE9,0x0055}, /* 1EE8 */
3140   {0x1EEA,0x1EEB,0x0055},  {0x1EEA,0x1EEB,0x0055}, /* 1EEA */
3141   {0x1EEC,0x1EED,0x0055},  {0x1EEC,0x1EED,0x0055}, /* 1EEC */
3142   {0x1EEE,0x1EEF,0x0055},  {0x1EEE,0x1EEF,0x0055}, /* 1EEE */
3143   {0x1EF0,0x1EF1,0x0055},  {0x1EF0,0x1EF1,0x0055}, /* 1EF0 */
3144   {0x1EF2,0x1EF3,0x0059},  {0x1EF2,0x1EF3,0x0059}, /* 1EF2 */
3145   {0x1EF4,0x1EF5,0x0059},  {0x1EF4,0x1EF5,0x0059}, /* 1EF4 */
3146   {0x1EF6,0x1EF7,0x0059},  {0x1EF6,0x1EF7,0x0059}, /* 1EF6 */
3147   {0x1EF8,0x1EF9,0x0059},  {0x1EF8,0x1EF9,0x0059}, /* 1EF8 */
3148   {0x1EFA,0x1EFB,0x1EFA},  {0x1EFA,0x1EFB,0x1EFA}, /* 1EFA */
3149   {0x1EFC,0x1EFD,0x1EFC},  {0x1EFC,0x1EFD,0x1EFC}, /* 1EFC */
3150   {0x1EFE,0x1EFF,0x1EFE},  {0x1EFE,0x1EFF,0x1EFE} /* 1EFE */
3151 };
3152 
3153 static MY_UNICASE_CHARACTER u520p1F[]={
3154   {0x1F08,0x1F00,0x0391},  {0x1F09,0x1F01,0x0391}, /* 1F00 */
3155   {0x1F0A,0x1F02,0x0391},  {0x1F0B,0x1F03,0x0391}, /* 1F02 */
3156   {0x1F0C,0x1F04,0x0391},  {0x1F0D,0x1F05,0x0391}, /* 1F04 */
3157   {0x1F0E,0x1F06,0x0391},  {0x1F0F,0x1F07,0x0391}, /* 1F06 */
3158   {0x1F08,0x1F00,0x0391},  {0x1F09,0x1F01,0x0391}, /* 1F08 */
3159   {0x1F0A,0x1F02,0x0391},  {0x1F0B,0x1F03,0x0391}, /* 1F0A */
3160   {0x1F0C,0x1F04,0x0391},  {0x1F0D,0x1F05,0x0391}, /* 1F0C */
3161   {0x1F0E,0x1F06,0x0391},  {0x1F0F,0x1F07,0x0391}, /* 1F0E */
3162   {0x1F18,0x1F10,0x0395},  {0x1F19,0x1F11,0x0395}, /* 1F10 */
3163   {0x1F1A,0x1F12,0x0395},  {0x1F1B,0x1F13,0x0395}, /* 1F12 */
3164   {0x1F1C,0x1F14,0x0395},  {0x1F1D,0x1F15,0x0395}, /* 1F14 */
3165   {0x1F16,0x1F16,0x1F16},  {0x1F17,0x1F17,0x1F17}, /* 1F16 */
3166   {0x1F18,0x1F10,0x0395},  {0x1F19,0x1F11,0x0395}, /* 1F18 */
3167   {0x1F1A,0x1F12,0x0395},  {0x1F1B,0x1F13,0x0395}, /* 1F1A */
3168   {0x1F1C,0x1F14,0x0395},  {0x1F1D,0x1F15,0x0395}, /* 1F1C */
3169   {0x1F1E,0x1F1E,0x1F1E},  {0x1F1F,0x1F1F,0x1F1F}, /* 1F1E */
3170   {0x1F28,0x1F20,0x0397},  {0x1F29,0x1F21,0x0397}, /* 1F20 */
3171   {0x1F2A,0x1F22,0x0397},  {0x1F2B,0x1F23,0x0397}, /* 1F22 */
3172   {0x1F2C,0x1F24,0x0397},  {0x1F2D,0x1F25,0x0397}, /* 1F24 */
3173   {0x1F2E,0x1F26,0x0397},  {0x1F2F,0x1F27,0x0397}, /* 1F26 */
3174   {0x1F28,0x1F20,0x0397},  {0x1F29,0x1F21,0x0397}, /* 1F28 */
3175   {0x1F2A,0x1F22,0x0397},  {0x1F2B,0x1F23,0x0397}, /* 1F2A */
3176   {0x1F2C,0x1F24,0x0397},  {0x1F2D,0x1F25,0x0397}, /* 1F2C */
3177   {0x1F2E,0x1F26,0x0397},  {0x1F2F,0x1F27,0x0397}, /* 1F2E */
3178   {0x1F38,0x1F30,0x0399},  {0x1F39,0x1F31,0x0399}, /* 1F30 */
3179   {0x1F3A,0x1F32,0x0399},  {0x1F3B,0x1F33,0x0399}, /* 1F32 */
3180   {0x1F3C,0x1F34,0x0399},  {0x1F3D,0x1F35,0x0399}, /* 1F34 */
3181   {0x1F3E,0x1F36,0x0399},  {0x1F3F,0x1F37,0x0399}, /* 1F36 */
3182   {0x1F38,0x1F30,0x0399},  {0x1F39,0x1F31,0x0399}, /* 1F38 */
3183   {0x1F3A,0x1F32,0x0399},  {0x1F3B,0x1F33,0x0399}, /* 1F3A */
3184   {0x1F3C,0x1F34,0x0399},  {0x1F3D,0x1F35,0x0399}, /* 1F3C */
3185   {0x1F3E,0x1F36,0x0399},  {0x1F3F,0x1F37,0x0399}, /* 1F3E */
3186   {0x1F48,0x1F40,0x039F},  {0x1F49,0x1F41,0x039F}, /* 1F40 */
3187   {0x1F4A,0x1F42,0x039F},  {0x1F4B,0x1F43,0x039F}, /* 1F42 */
3188   {0x1F4C,0x1F44,0x039F},  {0x1F4D,0x1F45,0x039F}, /* 1F44 */
3189   {0x1F46,0x1F46,0x1F46},  {0x1F47,0x1F47,0x1F47}, /* 1F46 */
3190   {0x1F48,0x1F40,0x039F},  {0x1F49,0x1F41,0x039F}, /* 1F48 */
3191   {0x1F4A,0x1F42,0x039F},  {0x1F4B,0x1F43,0x039F}, /* 1F4A */
3192   {0x1F4C,0x1F44,0x039F},  {0x1F4D,0x1F45,0x039F}, /* 1F4C */
3193   {0x1F4E,0x1F4E,0x1F4E},  {0x1F4F,0x1F4F,0x1F4F}, /* 1F4E */
3194   {0x1F50,0x1F50,0x03A5},  {0x1F59,0x1F51,0x03A5}, /* 1F50 */
3195   {0x1F52,0x1F52,0x03A5},  {0x1F5B,0x1F53,0x03A5}, /* 1F52 */
3196   {0x1F54,0x1F54,0x03A5},  {0x1F5D,0x1F55,0x03A5}, /* 1F54 */
3197   {0x1F56,0x1F56,0x03A5},  {0x1F5F,0x1F57,0x03A5}, /* 1F56 */
3198   {0x1F58,0x1F58,0x1F58},  {0x1F59,0x1F51,0x03A5}, /* 1F58 */
3199   {0x1F5A,0x1F5A,0x1F5A},  {0x1F5B,0x1F53,0x03A5}, /* 1F5A */
3200   {0x1F5C,0x1F5C,0x1F5C},  {0x1F5D,0x1F55,0x03A5}, /* 1F5C */
3201   {0x1F5E,0x1F5E,0x1F5E},  {0x1F5F,0x1F57,0x03A5}, /* 1F5E */
3202   {0x1F68,0x1F60,0x03A9},  {0x1F69,0x1F61,0x03A9}, /* 1F60 */
3203   {0x1F6A,0x1F62,0x03A9},  {0x1F6B,0x1F63,0x03A9}, /* 1F62 */
3204   {0x1F6C,0x1F64,0x03A9},  {0x1F6D,0x1F65,0x03A9}, /* 1F64 */
3205   {0x1F6E,0x1F66,0x03A9},  {0x1F6F,0x1F67,0x03A9}, /* 1F66 */
3206   {0x1F68,0x1F60,0x03A9},  {0x1F69,0x1F61,0x03A9}, /* 1F68 */
3207   {0x1F6A,0x1F62,0x03A9},  {0x1F6B,0x1F63,0x03A9}, /* 1F6A */
3208   {0x1F6C,0x1F64,0x03A9},  {0x1F6D,0x1F65,0x03A9}, /* 1F6C */
3209   {0x1F6E,0x1F66,0x03A9},  {0x1F6F,0x1F67,0x03A9}, /* 1F6E */
3210   {0x1FBA,0x1F70,0x0391},  {0x1FBB,0x1F71,0x1FBB}, /* 1F70 */
3211   {0x1FC8,0x1F72,0x0395},  {0x1FC9,0x1F73,0x1FC9}, /* 1F72 */
3212   {0x1FCA,0x1F74,0x0397},  {0x1FCB,0x1F75,0x1FCB}, /* 1F74 */
3213   {0x1FDA,0x1F76,0x0399},  {0x1FDB,0x1F77,0x1FDB}, /* 1F76 */
3214   {0x1FF8,0x1F78,0x039F},  {0x1FF9,0x1F79,0x1FF9}, /* 1F78 */
3215   {0x1FEA,0x1F7A,0x03A5},  {0x1FEB,0x1F7B,0x1FEB}, /* 1F7A */
3216   {0x1FFA,0x1F7C,0x03A9},  {0x1FFB,0x1F7D,0x1FFB}, /* 1F7C */
3217   {0x1F7E,0x1F7E,0x1F7E},  {0x1F7F,0x1F7F,0x1F7F}, /* 1F7E */
3218   {0x1F88,0x1F80,0x0391},  {0x1F89,0x1F81,0x0391}, /* 1F80 */
3219   {0x1F8A,0x1F82,0x0391},  {0x1F8B,0x1F83,0x0391}, /* 1F82 */
3220   {0x1F8C,0x1F84,0x0391},  {0x1F8D,0x1F85,0x0391}, /* 1F84 */
3221   {0x1F8E,0x1F86,0x0391},  {0x1F8F,0x1F87,0x0391}, /* 1F86 */
3222   {0x1F88,0x1F80,0x0391},  {0x1F89,0x1F81,0x0391}, /* 1F88 */
3223   {0x1F8A,0x1F82,0x0391},  {0x1F8B,0x1F83,0x0391}, /* 1F8A */
3224   {0x1F8C,0x1F84,0x0391},  {0x1F8D,0x1F85,0x0391}, /* 1F8C */
3225   {0x1F8E,0x1F86,0x0391},  {0x1F8F,0x1F87,0x0391}, /* 1F8E */
3226   {0x1F98,0x1F90,0x0397},  {0x1F99,0x1F91,0x0397}, /* 1F90 */
3227   {0x1F9A,0x1F92,0x0397},  {0x1F9B,0x1F93,0x0397}, /* 1F92 */
3228   {0x1F9C,0x1F94,0x0397},  {0x1F9D,0x1F95,0x0397}, /* 1F94 */
3229   {0x1F9E,0x1F96,0x0397},  {0x1F9F,0x1F97,0x0397}, /* 1F96 */
3230   {0x1F98,0x1F90,0x0397},  {0x1F99,0x1F91,0x0397}, /* 1F98 */
3231   {0x1F9A,0x1F92,0x0397},  {0x1F9B,0x1F93,0x0397}, /* 1F9A */
3232   {0x1F9C,0x1F94,0x0397},  {0x1F9D,0x1F95,0x0397}, /* 1F9C */
3233   {0x1F9E,0x1F96,0x0397},  {0x1F9F,0x1F97,0x0397}, /* 1F9E */
3234   {0x1FA8,0x1FA0,0x03A9},  {0x1FA9,0x1FA1,0x03A9}, /* 1FA0 */
3235   {0x1FAA,0x1FA2,0x03A9},  {0x1FAB,0x1FA3,0x03A9}, /* 1FA2 */
3236   {0x1FAC,0x1FA4,0x03A9},  {0x1FAD,0x1FA5,0x03A9}, /* 1FA4 */
3237   {0x1FAE,0x1FA6,0x03A9},  {0x1FAF,0x1FA7,0x03A9}, /* 1FA6 */
3238   {0x1FA8,0x1FA0,0x03A9},  {0x1FA9,0x1FA1,0x03A9}, /* 1FA8 */
3239   {0x1FAA,0x1FA2,0x03A9},  {0x1FAB,0x1FA3,0x03A9}, /* 1FAA */
3240   {0x1FAC,0x1FA4,0x03A9},  {0x1FAD,0x1FA5,0x03A9}, /* 1FAC */
3241   {0x1FAE,0x1FA6,0x03A9},  {0x1FAF,0x1FA7,0x03A9}, /* 1FAE */
3242   {0x1FB8,0x1FB0,0x0391},  {0x1FB9,0x1FB1,0x0391}, /* 1FB0 */
3243   {0x1FB2,0x1FB2,0x0391},  {0x1FBC,0x1FB3,0x0391}, /* 1FB2 */
3244   {0x1FB4,0x1FB4,0x0391},  {0x1FB5,0x1FB5,0x1FB5}, /* 1FB4 */
3245   {0x1FB6,0x1FB6,0x0391},  {0x1FB7,0x1FB7,0x0391}, /* 1FB6 */
3246   {0x1FB8,0x1FB0,0x0391},  {0x1FB9,0x1FB1,0x0391}, /* 1FB8 */
3247   {0x1FBA,0x1F70,0x0391},  {0x1FBB,0x1F71,0x1FBB}, /* 1FBA */
3248   {0x1FBC,0x1FB3,0x0391},  {0x1FBD,0x1FBD,0x1FBD}, /* 1FBC */
3249   {0x0399,0x1FBE,0x0399},  {0x1FBF,0x1FBF,0x1FBF}, /* 1FBE */
3250   {0x1FC0,0x1FC0,0x1FC0},  {0x1FC1,0x1FC1,0x1FC1}, /* 1FC0 */
3251   {0x1FC2,0x1FC2,0x0397},  {0x1FCC,0x1FC3,0x0397}, /* 1FC2 */
3252   {0x1FC4,0x1FC4,0x0397},  {0x1FC5,0x1FC5,0x1FC5}, /* 1FC4 */
3253   {0x1FC6,0x1FC6,0x0397},  {0x1FC7,0x1FC7,0x0397}, /* 1FC6 */
3254   {0x1FC8,0x1F72,0x0395},  {0x1FC9,0x1F73,0x1FC9}, /* 1FC8 */
3255   {0x1FCA,0x1F74,0x0397},  {0x1FCB,0x1F75,0x1FCB}, /* 1FCA */
3256   {0x1FCC,0x1FC3,0x0397},  {0x1FCD,0x1FCD,0x1FCD}, /* 1FCC */
3257   {0x1FCE,0x1FCE,0x1FCE},  {0x1FCF,0x1FCF,0x1FCF}, /* 1FCE */
3258   {0x1FD8,0x1FD0,0x0399},  {0x1FD9,0x1FD1,0x0399}, /* 1FD0 */
3259   {0x1FD2,0x1FD2,0x0399},  {0x1FD3,0x1FD3,0x1FD3}, /* 1FD2 */
3260   {0x1FD4,0x1FD4,0x1FD4},  {0x1FD5,0x1FD5,0x1FD5}, /* 1FD4 */
3261   {0x1FD6,0x1FD6,0x0399},  {0x1FD7,0x1FD7,0x0399}, /* 1FD6 */
3262   {0x1FD8,0x1FD0,0x0399},  {0x1FD9,0x1FD1,0x0399}, /* 1FD8 */
3263   {0x1FDA,0x1F76,0x0399},  {0x1FDB,0x1F77,0x1FDB}, /* 1FDA */
3264   {0x1FDC,0x1FDC,0x1FDC},  {0x1FDD,0x1FDD,0x1FDD}, /* 1FDC */
3265   {0x1FDE,0x1FDE,0x1FDE},  {0x1FDF,0x1FDF,0x1FDF}, /* 1FDE */
3266   {0x1FE8,0x1FE0,0x03A5},  {0x1FE9,0x1FE1,0x03A5}, /* 1FE0 */
3267   {0x1FE2,0x1FE2,0x03A5},  {0x1FE3,0x1FE3,0x1FE3}, /* 1FE2 */
3268   {0x1FE4,0x1FE4,0x03A1},  {0x1FEC,0x1FE5,0x03A1}, /* 1FE4 */
3269   {0x1FE6,0x1FE6,0x03A5},  {0x1FE7,0x1FE7,0x03A5}, /* 1FE6 */
3270   {0x1FE8,0x1FE0,0x03A5},  {0x1FE9,0x1FE1,0x03A5}, /* 1FE8 */
3271   {0x1FEA,0x1F7A,0x03A5},  {0x1FEB,0x1F7B,0x1FEB}, /* 1FEA */
3272   {0x1FEC,0x1FE5,0x03A1},  {0x1FED,0x1FED,0x1FED}, /* 1FEC */
3273   {0x1FEE,0x1FEE,0x1FEE},  {0x1FEF,0x1FEF,0x1FEF}, /* 1FEE */
3274   {0x1FF0,0x1FF0,0x1FF0},  {0x1FF1,0x1FF1,0x1FF1}, /* 1FF0 */
3275   {0x1FF2,0x1FF2,0x03A9},  {0x1FFC,0x1FF3,0x03A9}, /* 1FF2 */
3276   {0x1FF4,0x1FF4,0x03A9},  {0x1FF5,0x1FF5,0x1FF5}, /* 1FF4 */
3277   {0x1FF6,0x1FF6,0x03A9},  {0x1FF7,0x1FF7,0x03A9}, /* 1FF6 */
3278   {0x1FF8,0x1F78,0x039F},  {0x1FF9,0x1F79,0x1FF9}, /* 1FF8 */
3279   {0x1FFA,0x1F7C,0x03A9},  {0x1FFB,0x1F7D,0x1FFB}, /* 1FFA */
3280   {0x1FFC,0x1FF3,0x03A9},  {0x1FFD,0x1FFD,0x1FFD}, /* 1FFC */
3281   {0x1FFE,0x1FFE,0x1FFE},  {0x1FFF,0x1FFF,0x1FFF} /* 1FFE */
3282 };
3283 
3284 static MY_UNICASE_CHARACTER u520p21[]={
3285   {0x2100,0x2100,0x2100},  {0x2101,0x2101,0x2101}, /* 2100 */
3286   {0x2102,0x2102,0x2102},  {0x2103,0x2103,0x2103}, /* 2102 */
3287   {0x2104,0x2104,0x2104},  {0x2105,0x2105,0x2105}, /* 2104 */
3288   {0x2106,0x2106,0x2106},  {0x2107,0x2107,0x2107}, /* 2106 */
3289   {0x2108,0x2108,0x2108},  {0x2109,0x2109,0x2109}, /* 2108 */
3290   {0x210A,0x210A,0x210A},  {0x210B,0x210B,0x210B}, /* 210A */
3291   {0x210C,0x210C,0x210C},  {0x210D,0x210D,0x210D}, /* 210C */
3292   {0x210E,0x210E,0x210E},  {0x210F,0x210F,0x210F}, /* 210E */
3293   {0x2110,0x2110,0x2110},  {0x2111,0x2111,0x2111}, /* 2110 */
3294   {0x2112,0x2112,0x2112},  {0x2113,0x2113,0x2113}, /* 2112 */
3295   {0x2114,0x2114,0x2114},  {0x2115,0x2115,0x2115}, /* 2114 */
3296   {0x2116,0x2116,0x2116},  {0x2117,0x2117,0x2117}, /* 2116 */
3297   {0x2118,0x2118,0x2118},  {0x2119,0x2119,0x2119}, /* 2118 */
3298   {0x211A,0x211A,0x211A},  {0x211B,0x211B,0x211B}, /* 211A */
3299   {0x211C,0x211C,0x211C},  {0x211D,0x211D,0x211D}, /* 211C */
3300   {0x211E,0x211E,0x211E},  {0x211F,0x211F,0x211F}, /* 211E */
3301   {0x2120,0x2120,0x2120},  {0x2121,0x2121,0x2121}, /* 2120 */
3302   {0x2122,0x2122,0x2122},  {0x2123,0x2123,0x2123}, /* 2122 */
3303   {0x2124,0x2124,0x2124},  {0x2125,0x2125,0x2125}, /* 2124 */
3304   {0x2126,0x03C9,0x2126},  {0x2127,0x2127,0x2127}, /* 2126 */
3305   {0x2128,0x2128,0x2128},  {0x2129,0x2129,0x2129}, /* 2128 */
3306   {0x212A,0x006B,0x212A},  {0x212B,0x00E5,0x212B}, /* 212A */
3307   {0x212C,0x212C,0x212C},  {0x212D,0x212D,0x212D}, /* 212C */
3308   {0x212E,0x212E,0x212E},  {0x212F,0x212F,0x212F}, /* 212E */
3309   {0x2130,0x2130,0x2130},  {0x2131,0x2131,0x2131}, /* 2130 */
3310   {0x2132,0x214E,0x2132},  {0x2133,0x2133,0x2133}, /* 2132 */
3311   {0x2134,0x2134,0x2134},  {0x2135,0x2135,0x2135}, /* 2134 */
3312   {0x2136,0x2136,0x2136},  {0x2137,0x2137,0x2137}, /* 2136 */
3313   {0x2138,0x2138,0x2138},  {0x2139,0x2139,0x2139}, /* 2138 */
3314   {0x213A,0x213A,0x213A},  {0x213B,0x213B,0x213B}, /* 213A */
3315   {0x213C,0x213C,0x213C},  {0x213D,0x213D,0x213D}, /* 213C */
3316   {0x213E,0x213E,0x213E},  {0x213F,0x213F,0x213F}, /* 213E */
3317   {0x2140,0x2140,0x2140},  {0x2141,0x2141,0x2141}, /* 2140 */
3318   {0x2142,0x2142,0x2142},  {0x2143,0x2143,0x2143}, /* 2142 */
3319   {0x2144,0x2144,0x2144},  {0x2145,0x2145,0x2145}, /* 2144 */
3320   {0x2146,0x2146,0x2146},  {0x2147,0x2147,0x2147}, /* 2146 */
3321   {0x2148,0x2148,0x2148},  {0x2149,0x2149,0x2149}, /* 2148 */
3322   {0x214A,0x214A,0x214A},  {0x214B,0x214B,0x214B}, /* 214A */
3323   {0x214C,0x214C,0x214C},  {0x214D,0x214D,0x214D}, /* 214C */
3324   {0x2132,0x214E,0x2132},  {0x214F,0x214F,0x214F}, /* 214E */
3325   {0x2150,0x2150,0x2150},  {0x2151,0x2151,0x2151}, /* 2150 */
3326   {0x2152,0x2152,0x2152},  {0x2153,0x2153,0x2153}, /* 2152 */
3327   {0x2154,0x2154,0x2154},  {0x2155,0x2155,0x2155}, /* 2154 */
3328   {0x2156,0x2156,0x2156},  {0x2157,0x2157,0x2157}, /* 2156 */
3329   {0x2158,0x2158,0x2158},  {0x2159,0x2159,0x2159}, /* 2158 */
3330   {0x215A,0x215A,0x215A},  {0x215B,0x215B,0x215B}, /* 215A */
3331   {0x215C,0x215C,0x215C},  {0x215D,0x215D,0x215D}, /* 215C */
3332   {0x215E,0x215E,0x215E},  {0x215F,0x215F,0x215F}, /* 215E */
3333   {0x2160,0x2170,0x2160},  {0x2161,0x2171,0x2161}, /* 2160 */
3334   {0x2162,0x2172,0x2162},  {0x2163,0x2173,0x2163}, /* 2162 */
3335   {0x2164,0x2174,0x2164},  {0x2165,0x2175,0x2165}, /* 2164 */
3336   {0x2166,0x2176,0x2166},  {0x2167,0x2177,0x2167}, /* 2166 */
3337   {0x2168,0x2178,0x2168},  {0x2169,0x2179,0x2169}, /* 2168 */
3338   {0x216A,0x217A,0x216A},  {0x216B,0x217B,0x216B}, /* 216A */
3339   {0x216C,0x217C,0x216C},  {0x216D,0x217D,0x216D}, /* 216C */
3340   {0x216E,0x217E,0x216E},  {0x216F,0x217F,0x216F}, /* 216E */
3341   {0x2160,0x2170,0x2160},  {0x2161,0x2171,0x2161}, /* 2170 */
3342   {0x2162,0x2172,0x2162},  {0x2163,0x2173,0x2163}, /* 2172 */
3343   {0x2164,0x2174,0x2164},  {0x2165,0x2175,0x2165}, /* 2174 */
3344   {0x2166,0x2176,0x2166},  {0x2167,0x2177,0x2167}, /* 2176 */
3345   {0x2168,0x2178,0x2168},  {0x2169,0x2179,0x2169}, /* 2178 */
3346   {0x216A,0x217A,0x216A},  {0x216B,0x217B,0x216B}, /* 217A */
3347   {0x216C,0x217C,0x216C},  {0x216D,0x217D,0x216D}, /* 217C */
3348   {0x216E,0x217E,0x216E},  {0x216F,0x217F,0x216F}, /* 217E */
3349   {0x2180,0x2180,0x2180},  {0x2181,0x2181,0x2181}, /* 2180 */
3350   {0x2182,0x2182,0x2182},  {0x2183,0x2184,0x2183}, /* 2182 */
3351   {0x2183,0x2184,0x2183},  {0x2185,0x2185,0x2185}, /* 2184 */
3352   {0x2186,0x2186,0x2186},  {0x2187,0x2187,0x2187}, /* 2186 */
3353   {0x2188,0x2188,0x2188},  {0x2189,0x2189,0x2189}, /* 2188 */
3354   {0x218A,0x218A,0x218A},  {0x218B,0x218B,0x218B}, /* 218A */
3355   {0x218C,0x218C,0x218C},  {0x218D,0x218D,0x218D}, /* 218C */
3356   {0x218E,0x218E,0x218E},  {0x218F,0x218F,0x218F}, /* 218E */
3357   {0x2190,0x2190,0x2190},  {0x2191,0x2191,0x2191}, /* 2190 */
3358   {0x2192,0x2192,0x2192},  {0x2193,0x2193,0x2193}, /* 2192 */
3359   {0x2194,0x2194,0x2194},  {0x2195,0x2195,0x2195}, /* 2194 */
3360   {0x2196,0x2196,0x2196},  {0x2197,0x2197,0x2197}, /* 2196 */
3361   {0x2198,0x2198,0x2198},  {0x2199,0x2199,0x2199}, /* 2198 */
3362   {0x219A,0x219A,0x219A},  {0x219B,0x219B,0x219B}, /* 219A */
3363   {0x219C,0x219C,0x219C},  {0x219D,0x219D,0x219D}, /* 219C */
3364   {0x219E,0x219E,0x219E},  {0x219F,0x219F,0x219F}, /* 219E */
3365   {0x21A0,0x21A0,0x21A0},  {0x21A1,0x21A1,0x21A1}, /* 21A0 */
3366   {0x21A2,0x21A2,0x21A2},  {0x21A3,0x21A3,0x21A3}, /* 21A2 */
3367   {0x21A4,0x21A4,0x21A4},  {0x21A5,0x21A5,0x21A5}, /* 21A4 */
3368   {0x21A6,0x21A6,0x21A6},  {0x21A7,0x21A7,0x21A7}, /* 21A6 */
3369   {0x21A8,0x21A8,0x21A8},  {0x21A9,0x21A9,0x21A9}, /* 21A8 */
3370   {0x21AA,0x21AA,0x21AA},  {0x21AB,0x21AB,0x21AB}, /* 21AA */
3371   {0x21AC,0x21AC,0x21AC},  {0x21AD,0x21AD,0x21AD}, /* 21AC */
3372   {0x21AE,0x21AE,0x21AE},  {0x21AF,0x21AF,0x21AF}, /* 21AE */
3373   {0x21B0,0x21B0,0x21B0},  {0x21B1,0x21B1,0x21B1}, /* 21B0 */
3374   {0x21B2,0x21B2,0x21B2},  {0x21B3,0x21B3,0x21B3}, /* 21B2 */
3375   {0x21B4,0x21B4,0x21B4},  {0x21B5,0x21B5,0x21B5}, /* 21B4 */
3376   {0x21B6,0x21B6,0x21B6},  {0x21B7,0x21B7,0x21B7}, /* 21B6 */
3377   {0x21B8,0x21B8,0x21B8},  {0x21B9,0x21B9,0x21B9}, /* 21B8 */
3378   {0x21BA,0x21BA,0x21BA},  {0x21BB,0x21BB,0x21BB}, /* 21BA */
3379   {0x21BC,0x21BC,0x21BC},  {0x21BD,0x21BD,0x21BD}, /* 21BC */
3380   {0x21BE,0x21BE,0x21BE},  {0x21BF,0x21BF,0x21BF}, /* 21BE */
3381   {0x21C0,0x21C0,0x21C0},  {0x21C1,0x21C1,0x21C1}, /* 21C0 */
3382   {0x21C2,0x21C2,0x21C2},  {0x21C3,0x21C3,0x21C3}, /* 21C2 */
3383   {0x21C4,0x21C4,0x21C4},  {0x21C5,0x21C5,0x21C5}, /* 21C4 */
3384   {0x21C6,0x21C6,0x21C6},  {0x21C7,0x21C7,0x21C7}, /* 21C6 */
3385   {0x21C8,0x21C8,0x21C8},  {0x21C9,0x21C9,0x21C9}, /* 21C8 */
3386   {0x21CA,0x21CA,0x21CA},  {0x21CB,0x21CB,0x21CB}, /* 21CA */
3387   {0x21CC,0x21CC,0x21CC},  {0x21CD,0x21CD,0x21CD}, /* 21CC */
3388   {0x21CE,0x21CE,0x21CE},  {0x21CF,0x21CF,0x21CF}, /* 21CE */
3389   {0x21D0,0x21D0,0x21D0},  {0x21D1,0x21D1,0x21D1}, /* 21D0 */
3390   {0x21D2,0x21D2,0x21D2},  {0x21D3,0x21D3,0x21D3}, /* 21D2 */
3391   {0x21D4,0x21D4,0x21D4},  {0x21D5,0x21D5,0x21D5}, /* 21D4 */
3392   {0x21D6,0x21D6,0x21D6},  {0x21D7,0x21D7,0x21D7}, /* 21D6 */
3393   {0x21D8,0x21D8,0x21D8},  {0x21D9,0x21D9,0x21D9}, /* 21D8 */
3394   {0x21DA,0x21DA,0x21DA},  {0x21DB,0x21DB,0x21DB}, /* 21DA */
3395   {0x21DC,0x21DC,0x21DC},  {0x21DD,0x21DD,0x21DD}, /* 21DC */
3396   {0x21DE,0x21DE,0x21DE},  {0x21DF,0x21DF,0x21DF}, /* 21DE */
3397   {0x21E0,0x21E0,0x21E0},  {0x21E1,0x21E1,0x21E1}, /* 21E0 */
3398   {0x21E2,0x21E2,0x21E2},  {0x21E3,0x21E3,0x21E3}, /* 21E2 */
3399   {0x21E4,0x21E4,0x21E4},  {0x21E5,0x21E5,0x21E5}, /* 21E4 */
3400   {0x21E6,0x21E6,0x21E6},  {0x21E7,0x21E7,0x21E7}, /* 21E6 */
3401   {0x21E8,0x21E8,0x21E8},  {0x21E9,0x21E9,0x21E9}, /* 21E8 */
3402   {0x21EA,0x21EA,0x21EA},  {0x21EB,0x21EB,0x21EB}, /* 21EA */
3403   {0x21EC,0x21EC,0x21EC},  {0x21ED,0x21ED,0x21ED}, /* 21EC */
3404   {0x21EE,0x21EE,0x21EE},  {0x21EF,0x21EF,0x21EF}, /* 21EE */
3405   {0x21F0,0x21F0,0x21F0},  {0x21F1,0x21F1,0x21F1}, /* 21F0 */
3406   {0x21F2,0x21F2,0x21F2},  {0x21F3,0x21F3,0x21F3}, /* 21F2 */
3407   {0x21F4,0x21F4,0x21F4},  {0x21F5,0x21F5,0x21F5}, /* 21F4 */
3408   {0x21F6,0x21F6,0x21F6},  {0x21F7,0x21F7,0x21F7}, /* 21F6 */
3409   {0x21F8,0x21F8,0x21F8},  {0x21F9,0x21F9,0x21F9}, /* 21F8 */
3410   {0x21FA,0x21FA,0x21FA},  {0x21FB,0x21FB,0x21FB}, /* 21FA */
3411   {0x21FC,0x21FC,0x21FC},  {0x21FD,0x21FD,0x21FD}, /* 21FC */
3412   {0x21FE,0x21FE,0x21FE},  {0x21FF,0x21FF,0x21FF} /* 21FE */
3413 };
3414 
3415 static MY_UNICASE_CHARACTER u520p24[]={
3416   {0x2400,0x2400,0x2400},  {0x2401,0x2401,0x2401}, /* 2400 */
3417   {0x2402,0x2402,0x2402},  {0x2403,0x2403,0x2403}, /* 2402 */
3418   {0x2404,0x2404,0x2404},  {0x2405,0x2405,0x2405}, /* 2404 */
3419   {0x2406,0x2406,0x2406},  {0x2407,0x2407,0x2407}, /* 2406 */
3420   {0x2408,0x2408,0x2408},  {0x2409,0x2409,0x2409}, /* 2408 */
3421   {0x240A,0x240A,0x240A},  {0x240B,0x240B,0x240B}, /* 240A */
3422   {0x240C,0x240C,0x240C},  {0x240D,0x240D,0x240D}, /* 240C */
3423   {0x240E,0x240E,0x240E},  {0x240F,0x240F,0x240F}, /* 240E */
3424   {0x2410,0x2410,0x2410},  {0x2411,0x2411,0x2411}, /* 2410 */
3425   {0x2412,0x2412,0x2412},  {0x2413,0x2413,0x2413}, /* 2412 */
3426   {0x2414,0x2414,0x2414},  {0x2415,0x2415,0x2415}, /* 2414 */
3427   {0x2416,0x2416,0x2416},  {0x2417,0x2417,0x2417}, /* 2416 */
3428   {0x2418,0x2418,0x2418},  {0x2419,0x2419,0x2419}, /* 2418 */
3429   {0x241A,0x241A,0x241A},  {0x241B,0x241B,0x241B}, /* 241A */
3430   {0x241C,0x241C,0x241C},  {0x241D,0x241D,0x241D}, /* 241C */
3431   {0x241E,0x241E,0x241E},  {0x241F,0x241F,0x241F}, /* 241E */
3432   {0x2420,0x2420,0x2420},  {0x2421,0x2421,0x2421}, /* 2420 */
3433   {0x2422,0x2422,0x2422},  {0x2423,0x2423,0x2423}, /* 2422 */
3434   {0x2424,0x2424,0x2424},  {0x2425,0x2425,0x2425}, /* 2424 */
3435   {0x2426,0x2426,0x2426},  {0x2427,0x2427,0x2427}, /* 2426 */
3436   {0x2428,0x2428,0x2428},  {0x2429,0x2429,0x2429}, /* 2428 */
3437   {0x242A,0x242A,0x242A},  {0x242B,0x242B,0x242B}, /* 242A */
3438   {0x242C,0x242C,0x242C},  {0x242D,0x242D,0x242D}, /* 242C */
3439   {0x242E,0x242E,0x242E},  {0x242F,0x242F,0x242F}, /* 242E */
3440   {0x2430,0x2430,0x2430},  {0x2431,0x2431,0x2431}, /* 2430 */
3441   {0x2432,0x2432,0x2432},  {0x2433,0x2433,0x2433}, /* 2432 */
3442   {0x2434,0x2434,0x2434},  {0x2435,0x2435,0x2435}, /* 2434 */
3443   {0x2436,0x2436,0x2436},  {0x2437,0x2437,0x2437}, /* 2436 */
3444   {0x2438,0x2438,0x2438},  {0x2439,0x2439,0x2439}, /* 2438 */
3445   {0x243A,0x243A,0x243A},  {0x243B,0x243B,0x243B}, /* 243A */
3446   {0x243C,0x243C,0x243C},  {0x243D,0x243D,0x243D}, /* 243C */
3447   {0x243E,0x243E,0x243E},  {0x243F,0x243F,0x243F}, /* 243E */
3448   {0x2440,0x2440,0x2440},  {0x2441,0x2441,0x2441}, /* 2440 */
3449   {0x2442,0x2442,0x2442},  {0x2443,0x2443,0x2443}, /* 2442 */
3450   {0x2444,0x2444,0x2444},  {0x2445,0x2445,0x2445}, /* 2444 */
3451   {0x2446,0x2446,0x2446},  {0x2447,0x2447,0x2447}, /* 2446 */
3452   {0x2448,0x2448,0x2448},  {0x2449,0x2449,0x2449}, /* 2448 */
3453   {0x244A,0x244A,0x244A},  {0x244B,0x244B,0x244B}, /* 244A */
3454   {0x244C,0x244C,0x244C},  {0x244D,0x244D,0x244D}, /* 244C */
3455   {0x244E,0x244E,0x244E},  {0x244F,0x244F,0x244F}, /* 244E */
3456   {0x2450,0x2450,0x2450},  {0x2451,0x2451,0x2451}, /* 2450 */
3457   {0x2452,0x2452,0x2452},  {0x2453,0x2453,0x2453}, /* 2452 */
3458   {0x2454,0x2454,0x2454},  {0x2455,0x2455,0x2455}, /* 2454 */
3459   {0x2456,0x2456,0x2456},  {0x2457,0x2457,0x2457}, /* 2456 */
3460   {0x2458,0x2458,0x2458},  {0x2459,0x2459,0x2459}, /* 2458 */
3461   {0x245A,0x245A,0x245A},  {0x245B,0x245B,0x245B}, /* 245A */
3462   {0x245C,0x245C,0x245C},  {0x245D,0x245D,0x245D}, /* 245C */
3463   {0x245E,0x245E,0x245E},  {0x245F,0x245F,0x245F}, /* 245E */
3464   {0x2460,0x2460,0x2460},  {0x2461,0x2461,0x2461}, /* 2460 */
3465   {0x2462,0x2462,0x2462},  {0x2463,0x2463,0x2463}, /* 2462 */
3466   {0x2464,0x2464,0x2464},  {0x2465,0x2465,0x2465}, /* 2464 */
3467   {0x2466,0x2466,0x2466},  {0x2467,0x2467,0x2467}, /* 2466 */
3468   {0x2468,0x2468,0x2468},  {0x2469,0x2469,0x2469}, /* 2468 */
3469   {0x246A,0x246A,0x246A},  {0x246B,0x246B,0x246B}, /* 246A */
3470   {0x246C,0x246C,0x246C},  {0x246D,0x246D,0x246D}, /* 246C */
3471   {0x246E,0x246E,0x246E},  {0x246F,0x246F,0x246F}, /* 246E */
3472   {0x2470,0x2470,0x2470},  {0x2471,0x2471,0x2471}, /* 2470 */
3473   {0x2472,0x2472,0x2472},  {0x2473,0x2473,0x2473}, /* 2472 */
3474   {0x2474,0x2474,0x2474},  {0x2475,0x2475,0x2475}, /* 2474 */
3475   {0x2476,0x2476,0x2476},  {0x2477,0x2477,0x2477}, /* 2476 */
3476   {0x2478,0x2478,0x2478},  {0x2479,0x2479,0x2479}, /* 2478 */
3477   {0x247A,0x247A,0x247A},  {0x247B,0x247B,0x247B}, /* 247A */
3478   {0x247C,0x247C,0x247C},  {0x247D,0x247D,0x247D}, /* 247C */
3479   {0x247E,0x247E,0x247E},  {0x247F,0x247F,0x247F}, /* 247E */
3480   {0x2480,0x2480,0x2480},  {0x2481,0x2481,0x2481}, /* 2480 */
3481   {0x2482,0x2482,0x2482},  {0x2483,0x2483,0x2483}, /* 2482 */
3482   {0x2484,0x2484,0x2484},  {0x2485,0x2485,0x2485}, /* 2484 */
3483   {0x2486,0x2486,0x2486},  {0x2487,0x2487,0x2487}, /* 2486 */
3484   {0x2488,0x2488,0x2488},  {0x2489,0x2489,0x2489}, /* 2488 */
3485   {0x248A,0x248A,0x248A},  {0x248B,0x248B,0x248B}, /* 248A */
3486   {0x248C,0x248C,0x248C},  {0x248D,0x248D,0x248D}, /* 248C */
3487   {0x248E,0x248E,0x248E},  {0x248F,0x248F,0x248F}, /* 248E */
3488   {0x2490,0x2490,0x2490},  {0x2491,0x2491,0x2491}, /* 2490 */
3489   {0x2492,0x2492,0x2492},  {0x2493,0x2493,0x2493}, /* 2492 */
3490   {0x2494,0x2494,0x2494},  {0x2495,0x2495,0x2495}, /* 2494 */
3491   {0x2496,0x2496,0x2496},  {0x2497,0x2497,0x2497}, /* 2496 */
3492   {0x2498,0x2498,0x2498},  {0x2499,0x2499,0x2499}, /* 2498 */
3493   {0x249A,0x249A,0x249A},  {0x249B,0x249B,0x249B}, /* 249A */
3494   {0x249C,0x249C,0x249C},  {0x249D,0x249D,0x249D}, /* 249C */
3495   {0x249E,0x249E,0x249E},  {0x249F,0x249F,0x249F}, /* 249E */
3496   {0x24A0,0x24A0,0x24A0},  {0x24A1,0x24A1,0x24A1}, /* 24A0 */
3497   {0x24A2,0x24A2,0x24A2},  {0x24A3,0x24A3,0x24A3}, /* 24A2 */
3498   {0x24A4,0x24A4,0x24A4},  {0x24A5,0x24A5,0x24A5}, /* 24A4 */
3499   {0x24A6,0x24A6,0x24A6},  {0x24A7,0x24A7,0x24A7}, /* 24A6 */
3500   {0x24A8,0x24A8,0x24A8},  {0x24A9,0x24A9,0x24A9}, /* 24A8 */
3501   {0x24AA,0x24AA,0x24AA},  {0x24AB,0x24AB,0x24AB}, /* 24AA */
3502   {0x24AC,0x24AC,0x24AC},  {0x24AD,0x24AD,0x24AD}, /* 24AC */
3503   {0x24AE,0x24AE,0x24AE},  {0x24AF,0x24AF,0x24AF}, /* 24AE */
3504   {0x24B0,0x24B0,0x24B0},  {0x24B1,0x24B1,0x24B1}, /* 24B0 */
3505   {0x24B2,0x24B2,0x24B2},  {0x24B3,0x24B3,0x24B3}, /* 24B2 */
3506   {0x24B4,0x24B4,0x24B4},  {0x24B5,0x24B5,0x24B5}, /* 24B4 */
3507   {0x24B6,0x24D0,0x24B6},  {0x24B7,0x24D1,0x24B7}, /* 24B6 */
3508   {0x24B8,0x24D2,0x24B8},  {0x24B9,0x24D3,0x24B9}, /* 24B8 */
3509   {0x24BA,0x24D4,0x24BA},  {0x24BB,0x24D5,0x24BB}, /* 24BA */
3510   {0x24BC,0x24D6,0x24BC},  {0x24BD,0x24D7,0x24BD}, /* 24BC */
3511   {0x24BE,0x24D8,0x24BE},  {0x24BF,0x24D9,0x24BF}, /* 24BE */
3512   {0x24C0,0x24DA,0x24C0},  {0x24C1,0x24DB,0x24C1}, /* 24C0 */
3513   {0x24C2,0x24DC,0x24C2},  {0x24C3,0x24DD,0x24C3}, /* 24C2 */
3514   {0x24C4,0x24DE,0x24C4},  {0x24C5,0x24DF,0x24C5}, /* 24C4 */
3515   {0x24C6,0x24E0,0x24C6},  {0x24C7,0x24E1,0x24C7}, /* 24C6 */
3516   {0x24C8,0x24E2,0x24C8},  {0x24C9,0x24E3,0x24C9}, /* 24C8 */
3517   {0x24CA,0x24E4,0x24CA},  {0x24CB,0x24E5,0x24CB}, /* 24CA */
3518   {0x24CC,0x24E6,0x24CC},  {0x24CD,0x24E7,0x24CD}, /* 24CC */
3519   {0x24CE,0x24E8,0x24CE},  {0x24CF,0x24E9,0x24CF}, /* 24CE */
3520   {0x24B6,0x24D0,0x24B6},  {0x24B7,0x24D1,0x24B7}, /* 24D0 */
3521   {0x24B8,0x24D2,0x24B8},  {0x24B9,0x24D3,0x24B9}, /* 24D2 */
3522   {0x24BA,0x24D4,0x24BA},  {0x24BB,0x24D5,0x24BB}, /* 24D4 */
3523   {0x24BC,0x24D6,0x24BC},  {0x24BD,0x24D7,0x24BD}, /* 24D6 */
3524   {0x24BE,0x24D8,0x24BE},  {0x24BF,0x24D9,0x24BF}, /* 24D8 */
3525   {0x24C0,0x24DA,0x24C0},  {0x24C1,0x24DB,0x24C1}, /* 24DA */
3526   {0x24C2,0x24DC,0x24C2},  {0x24C3,0x24DD,0x24C3}, /* 24DC */
3527   {0x24C4,0x24DE,0x24C4},  {0x24C5,0x24DF,0x24C5}, /* 24DE */
3528   {0x24C6,0x24E0,0x24C6},  {0x24C7,0x24E1,0x24C7}, /* 24E0 */
3529   {0x24C8,0x24E2,0x24C8},  {0x24C9,0x24E3,0x24C9}, /* 24E2 */
3530   {0x24CA,0x24E4,0x24CA},  {0x24CB,0x24E5,0x24CB}, /* 24E4 */
3531   {0x24CC,0x24E6,0x24CC},  {0x24CD,0x24E7,0x24CD}, /* 24E6 */
3532   {0x24CE,0x24E8,0x24CE},  {0x24CF,0x24E9,0x24CF}, /* 24E8 */
3533   {0x24EA,0x24EA,0x24EA},  {0x24EB,0x24EB,0x24EB}, /* 24EA */
3534   {0x24EC,0x24EC,0x24EC},  {0x24ED,0x24ED,0x24ED}, /* 24EC */
3535   {0x24EE,0x24EE,0x24EE},  {0x24EF,0x24EF,0x24EF}, /* 24EE */
3536   {0x24F0,0x24F0,0x24F0},  {0x24F1,0x24F1,0x24F1}, /* 24F0 */
3537   {0x24F2,0x24F2,0x24F2},  {0x24F3,0x24F3,0x24F3}, /* 24F2 */
3538   {0x24F4,0x24F4,0x24F4},  {0x24F5,0x24F5,0x24F5}, /* 24F4 */
3539   {0x24F6,0x24F6,0x24F6},  {0x24F7,0x24F7,0x24F7}, /* 24F6 */
3540   {0x24F8,0x24F8,0x24F8},  {0x24F9,0x24F9,0x24F9}, /* 24F8 */
3541   {0x24FA,0x24FA,0x24FA},  {0x24FB,0x24FB,0x24FB}, /* 24FA */
3542   {0x24FC,0x24FC,0x24FC},  {0x24FD,0x24FD,0x24FD}, /* 24FC */
3543   {0x24FE,0x24FE,0x24FE},  {0x24FF,0x24FF,0x24FF} /* 24FE */
3544 };
3545 
3546 static MY_UNICASE_CHARACTER u520p2C[]={
3547   {0x2C00,0x2C30,0x2C00},  {0x2C01,0x2C31,0x2C01}, /* 2C00 */
3548   {0x2C02,0x2C32,0x2C02},  {0x2C03,0x2C33,0x2C03}, /* 2C02 */
3549   {0x2C04,0x2C34,0x2C04},  {0x2C05,0x2C35,0x2C05}, /* 2C04 */
3550   {0x2C06,0x2C36,0x2C06},  {0x2C07,0x2C37,0x2C07}, /* 2C06 */
3551   {0x2C08,0x2C38,0x2C08},  {0x2C09,0x2C39,0x2C09}, /* 2C08 */
3552   {0x2C0A,0x2C3A,0x2C0A},  {0x2C0B,0x2C3B,0x2C0B}, /* 2C0A */
3553   {0x2C0C,0x2C3C,0x2C0C},  {0x2C0D,0x2C3D,0x2C0D}, /* 2C0C */
3554   {0x2C0E,0x2C3E,0x2C0E},  {0x2C0F,0x2C3F,0x2C0F}, /* 2C0E */
3555   {0x2C10,0x2C40,0x2C10},  {0x2C11,0x2C41,0x2C11}, /* 2C10 */
3556   {0x2C12,0x2C42,0x2C12},  {0x2C13,0x2C43,0x2C13}, /* 2C12 */
3557   {0x2C14,0x2C44,0x2C14},  {0x2C15,0x2C45,0x2C15}, /* 2C14 */
3558   {0x2C16,0x2C46,0x2C16},  {0x2C17,0x2C47,0x2C17}, /* 2C16 */
3559   {0x2C18,0x2C48,0x2C18},  {0x2C19,0x2C49,0x2C19}, /* 2C18 */
3560   {0x2C1A,0x2C4A,0x2C1A},  {0x2C1B,0x2C4B,0x2C1B}, /* 2C1A */
3561   {0x2C1C,0x2C4C,0x2C1C},  {0x2C1D,0x2C4D,0x2C1D}, /* 2C1C */
3562   {0x2C1E,0x2C4E,0x2C1E},  {0x2C1F,0x2C4F,0x2C1F}, /* 2C1E */
3563   {0x2C20,0x2C50,0x2C20},  {0x2C21,0x2C51,0x2C21}, /* 2C20 */
3564   {0x2C22,0x2C52,0x2C22},  {0x2C23,0x2C53,0x2C23}, /* 2C22 */
3565   {0x2C24,0x2C54,0x2C24},  {0x2C25,0x2C55,0x2C25}, /* 2C24 */
3566   {0x2C26,0x2C56,0x2C26},  {0x2C27,0x2C57,0x2C27}, /* 2C26 */
3567   {0x2C28,0x2C58,0x2C28},  {0x2C29,0x2C59,0x2C29}, /* 2C28 */
3568   {0x2C2A,0x2C5A,0x2C2A},  {0x2C2B,0x2C5B,0x2C2B}, /* 2C2A */
3569   {0x2C2C,0x2C5C,0x2C2C},  {0x2C2D,0x2C5D,0x2C2D}, /* 2C2C */
3570   {0x2C2E,0x2C5E,0x2C2E},  {0x2C2F,0x2C2F,0x2C2F}, /* 2C2E */
3571   {0x2C00,0x2C30,0x2C00},  {0x2C01,0x2C31,0x2C01}, /* 2C30 */
3572   {0x2C02,0x2C32,0x2C02},  {0x2C03,0x2C33,0x2C03}, /* 2C32 */
3573   {0x2C04,0x2C34,0x2C04},  {0x2C05,0x2C35,0x2C05}, /* 2C34 */
3574   {0x2C06,0x2C36,0x2C06},  {0x2C07,0x2C37,0x2C07}, /* 2C36 */
3575   {0x2C08,0x2C38,0x2C08},  {0x2C09,0x2C39,0x2C09}, /* 2C38 */
3576   {0x2C0A,0x2C3A,0x2C0A},  {0x2C0B,0x2C3B,0x2C0B}, /* 2C3A */
3577   {0x2C0C,0x2C3C,0x2C0C},  {0x2C0D,0x2C3D,0x2C0D}, /* 2C3C */
3578   {0x2C0E,0x2C3E,0x2C0E},  {0x2C0F,0x2C3F,0x2C0F}, /* 2C3E */
3579   {0x2C10,0x2C40,0x2C10},  {0x2C11,0x2C41,0x2C11}, /* 2C40 */
3580   {0x2C12,0x2C42,0x2C12},  {0x2C13,0x2C43,0x2C13}, /* 2C42 */
3581   {0x2C14,0x2C44,0x2C14},  {0x2C15,0x2C45,0x2C15}, /* 2C44 */
3582   {0x2C16,0x2C46,0x2C16},  {0x2C17,0x2C47,0x2C17}, /* 2C46 */
3583   {0x2C18,0x2C48,0x2C18},  {0x2C19,0x2C49,0x2C19}, /* 2C48 */
3584   {0x2C1A,0x2C4A,0x2C1A},  {0x2C1B,0x2C4B,0x2C1B}, /* 2C4A */
3585   {0x2C1C,0x2C4C,0x2C1C},  {0x2C1D,0x2C4D,0x2C1D}, /* 2C4C */
3586   {0x2C1E,0x2C4E,0x2C1E},  {0x2C1F,0x2C4F,0x2C1F}, /* 2C4E */
3587   {0x2C20,0x2C50,0x2C20},  {0x2C21,0x2C51,0x2C21}, /* 2C50 */
3588   {0x2C22,0x2C52,0x2C22},  {0x2C23,0x2C53,0x2C23}, /* 2C52 */
3589   {0x2C24,0x2C54,0x2C24},  {0x2C25,0x2C55,0x2C25}, /* 2C54 */
3590   {0x2C26,0x2C56,0x2C26},  {0x2C27,0x2C57,0x2C27}, /* 2C56 */
3591   {0x2C28,0x2C58,0x2C28},  {0x2C29,0x2C59,0x2C29}, /* 2C58 */
3592   {0x2C2A,0x2C5A,0x2C2A},  {0x2C2B,0x2C5B,0x2C2B}, /* 2C5A */
3593   {0x2C2C,0x2C5C,0x2C2C},  {0x2C2D,0x2C5D,0x2C2D}, /* 2C5C */
3594   {0x2C2E,0x2C5E,0x2C2E},  {0x2C5F,0x2C5F,0x2C5F}, /* 2C5E */
3595   {0x2C60,0x2C61,0x2C60},  {0x2C60,0x2C61,0x2C60}, /* 2C60 */
3596   {0x2C62,0x026B,0x2C62},  {0x2C63,0x1D7D,0x2C63}, /* 2C62 */
3597   {0x2C64,0x027D,0x2C64},  {0x023A,0x2C65,0x023A}, /* 2C64 */
3598   {0x023E,0x2C66,0x023E},  {0x2C67,0x2C68,0x2C67}, /* 2C66 */
3599   {0x2C67,0x2C68,0x2C67},  {0x2C69,0x2C6A,0x2C69}, /* 2C68 */
3600   {0x2C69,0x2C6A,0x2C69},  {0x2C6B,0x2C6C,0x2C6B}, /* 2C6A */
3601   {0x2C6B,0x2C6C,0x2C6B},  {0x2C6D,0x0251,0x2C6D}, /* 2C6C */
3602   {0x2C6E,0x0271,0x2C6E},  {0x2C6F,0x0250,0x2C6F}, /* 2C6E */
3603   {0x2C70,0x0252,0x2C70},  {0x2C71,0x2C71,0x2C71}, /* 2C70 */
3604   {0x2C72,0x2C73,0x2C72},  {0x2C72,0x2C73,0x2C72}, /* 2C72 */
3605   {0x2C74,0x2C74,0x2C74},  {0x2C75,0x2C76,0x2C75}, /* 2C74 */
3606   {0x2C75,0x2C76,0x2C75},  {0x2C77,0x2C77,0x2C77}, /* 2C76 */
3607   {0x2C78,0x2C78,0x2C78},  {0x2C79,0x2C79,0x2C79}, /* 2C78 */
3608   {0x2C7A,0x2C7A,0x2C7A},  {0x2C7B,0x2C7B,0x2C7B}, /* 2C7A */
3609   {0x2C7C,0x2C7C,0x2C7C},  {0x2C7D,0x2C7D,0x2C7D}, /* 2C7C */
3610   {0x2C7E,0x023F,0x2C7E},  {0x2C7F,0x0240,0x2C7F}, /* 2C7E */
3611   {0x2C80,0x2C81,0x2C80},  {0x2C80,0x2C81,0x2C80}, /* 2C80 */
3612   {0x2C82,0x2C83,0x2C82},  {0x2C82,0x2C83,0x2C82}, /* 2C82 */
3613   {0x2C84,0x2C85,0x2C84},  {0x2C84,0x2C85,0x2C84}, /* 2C84 */
3614   {0x2C86,0x2C87,0x2C86},  {0x2C86,0x2C87,0x2C86}, /* 2C86 */
3615   {0x2C88,0x2C89,0x2C88},  {0x2C88,0x2C89,0x2C88}, /* 2C88 */
3616   {0x2C8A,0x2C8B,0x2C8A},  {0x2C8A,0x2C8B,0x2C8A}, /* 2C8A */
3617   {0x2C8C,0x2C8D,0x2C8C},  {0x2C8C,0x2C8D,0x2C8C}, /* 2C8C */
3618   {0x2C8E,0x2C8F,0x2C8E},  {0x2C8E,0x2C8F,0x2C8E}, /* 2C8E */
3619   {0x2C90,0x2C91,0x2C90},  {0x2C90,0x2C91,0x2C90}, /* 2C90 */
3620   {0x2C92,0x2C93,0x2C92},  {0x2C92,0x2C93,0x2C92}, /* 2C92 */
3621   {0x2C94,0x2C95,0x2C94},  {0x2C94,0x2C95,0x2C94}, /* 2C94 */
3622   {0x2C96,0x2C97,0x2C96},  {0x2C96,0x2C97,0x2C96}, /* 2C96 */
3623   {0x2C98,0x2C99,0x2C98},  {0x2C98,0x2C99,0x2C98}, /* 2C98 */
3624   {0x2C9A,0x2C9B,0x2C9A},  {0x2C9A,0x2C9B,0x2C9A}, /* 2C9A */
3625   {0x2C9C,0x2C9D,0x2C9C},  {0x2C9C,0x2C9D,0x2C9C}, /* 2C9C */
3626   {0x2C9E,0x2C9F,0x2C9E},  {0x2C9E,0x2C9F,0x2C9E}, /* 2C9E */
3627   {0x2CA0,0x2CA1,0x2CA0},  {0x2CA0,0x2CA1,0x2CA0}, /* 2CA0 */
3628   {0x2CA2,0x2CA3,0x2CA2},  {0x2CA2,0x2CA3,0x2CA2}, /* 2CA2 */
3629   {0x2CA4,0x2CA5,0x2CA4},  {0x2CA4,0x2CA5,0x2CA4}, /* 2CA4 */
3630   {0x2CA6,0x2CA7,0x2CA6},  {0x2CA6,0x2CA7,0x2CA6}, /* 2CA6 */
3631   {0x2CA8,0x2CA9,0x2CA8},  {0x2CA8,0x2CA9,0x2CA8}, /* 2CA8 */
3632   {0x2CAA,0x2CAB,0x2CAA},  {0x2CAA,0x2CAB,0x2CAA}, /* 2CAA */
3633   {0x2CAC,0x2CAD,0x2CAC},  {0x2CAC,0x2CAD,0x2CAC}, /* 2CAC */
3634   {0x2CAE,0x2CAF,0x2CAE},  {0x2CAE,0x2CAF,0x2CAE}, /* 2CAE */
3635   {0x2CB0,0x2CB1,0x2CB0},  {0x2CB0,0x2CB1,0x2CB0}, /* 2CB0 */
3636   {0x2CB2,0x2CB3,0x2CB2},  {0x2CB2,0x2CB3,0x2CB2}, /* 2CB2 */
3637   {0x2CB4,0x2CB5,0x2CB4},  {0x2CB4,0x2CB5,0x2CB4}, /* 2CB4 */
3638   {0x2CB6,0x2CB7,0x2CB6},  {0x2CB6,0x2CB7,0x2CB6}, /* 2CB6 */
3639   {0x2CB8,0x2CB9,0x2CB8},  {0x2CB8,0x2CB9,0x2CB8}, /* 2CB8 */
3640   {0x2CBA,0x2CBB,0x2CBA},  {0x2CBA,0x2CBB,0x2CBA}, /* 2CBA */
3641   {0x2CBC,0x2CBD,0x2CBC},  {0x2CBC,0x2CBD,0x2CBC}, /* 2CBC */
3642   {0x2CBE,0x2CBF,0x2CBE},  {0x2CBE,0x2CBF,0x2CBE}, /* 2CBE */
3643   {0x2CC0,0x2CC1,0x2CC0},  {0x2CC0,0x2CC1,0x2CC0}, /* 2CC0 */
3644   {0x2CC2,0x2CC3,0x2CC2},  {0x2CC2,0x2CC3,0x2CC2}, /* 2CC2 */
3645   {0x2CC4,0x2CC5,0x2CC4},  {0x2CC4,0x2CC5,0x2CC4}, /* 2CC4 */
3646   {0x2CC6,0x2CC7,0x2CC6},  {0x2CC6,0x2CC7,0x2CC6}, /* 2CC6 */
3647   {0x2CC8,0x2CC9,0x2CC8},  {0x2CC8,0x2CC9,0x2CC8}, /* 2CC8 */
3648   {0x2CCA,0x2CCB,0x2CCA},  {0x2CCA,0x2CCB,0x2CCA}, /* 2CCA */
3649   {0x2CCC,0x2CCD,0x2CCC},  {0x2CCC,0x2CCD,0x2CCC}, /* 2CCC */
3650   {0x2CCE,0x2CCF,0x2CCE},  {0x2CCE,0x2CCF,0x2CCE}, /* 2CCE */
3651   {0x2CD0,0x2CD1,0x2CD0},  {0x2CD0,0x2CD1,0x2CD0}, /* 2CD0 */
3652   {0x2CD2,0x2CD3,0x2CD2},  {0x2CD2,0x2CD3,0x2CD2}, /* 2CD2 */
3653   {0x2CD4,0x2CD5,0x2CD4},  {0x2CD4,0x2CD5,0x2CD4}, /* 2CD4 */
3654   {0x2CD6,0x2CD7,0x2CD6},  {0x2CD6,0x2CD7,0x2CD6}, /* 2CD6 */
3655   {0x2CD8,0x2CD9,0x2CD8},  {0x2CD8,0x2CD9,0x2CD8}, /* 2CD8 */
3656   {0x2CDA,0x2CDB,0x2CDA},  {0x2CDA,0x2CDB,0x2CDA}, /* 2CDA */
3657   {0x2CDC,0x2CDD,0x2CDC},  {0x2CDC,0x2CDD,0x2CDC}, /* 2CDC */
3658   {0x2CDE,0x2CDF,0x2CDE},  {0x2CDE,0x2CDF,0x2CDE}, /* 2CDE */
3659   {0x2CE0,0x2CE1,0x2CE0},  {0x2CE0,0x2CE1,0x2CE0}, /* 2CE0 */
3660   {0x2CE2,0x2CE3,0x2CE2},  {0x2CE2,0x2CE3,0x2CE2}, /* 2CE2 */
3661   {0x2CE4,0x2CE4,0x2CE4},  {0x2CE5,0x2CE5,0x2CE5}, /* 2CE4 */
3662   {0x2CE6,0x2CE6,0x2CE6},  {0x2CE7,0x2CE7,0x2CE7}, /* 2CE6 */
3663   {0x2CE8,0x2CE8,0x2CE8},  {0x2CE9,0x2CE9,0x2CE9}, /* 2CE8 */
3664   {0x2CEA,0x2CEA,0x2CEA},  {0x2CEB,0x2CEC,0x2CEB}, /* 2CEA */
3665   {0x2CEB,0x2CEC,0x2CEB},  {0x2CED,0x2CEE,0x2CED}, /* 2CEC */
3666   {0x2CED,0x2CEE,0x2CED},  {0x2CEF,0x2CEF,0x2CEF}, /* 2CEE */
3667   {0x2CF0,0x2CF0,0x2CF0},  {0x2CF1,0x2CF1,0x2CF1}, /* 2CF0 */
3668   {0x2CF2,0x2CF2,0x2CF2},  {0x2CF3,0x2CF3,0x2CF3}, /* 2CF2 */
3669   {0x2CF4,0x2CF4,0x2CF4},  {0x2CF5,0x2CF5,0x2CF5}, /* 2CF4 */
3670   {0x2CF6,0x2CF6,0x2CF6},  {0x2CF7,0x2CF7,0x2CF7}, /* 2CF6 */
3671   {0x2CF8,0x2CF8,0x2CF8},  {0x2CF9,0x2CF9,0x2CF9}, /* 2CF8 */
3672   {0x2CFA,0x2CFA,0x2CFA},  {0x2CFB,0x2CFB,0x2CFB}, /* 2CFA */
3673   {0x2CFC,0x2CFC,0x2CFC},  {0x2CFD,0x2CFD,0x2CFD}, /* 2CFC */
3674   {0x2CFE,0x2CFE,0x2CFE},  {0x2CFF,0x2CFF,0x2CFF} /* 2CFE */
3675 };
3676 
3677 static MY_UNICASE_CHARACTER u520p2D[]={
3678   {0x10A0,0x2D00,0x10A0},  {0x10A1,0x2D01,0x10A1}, /* 2D00 */
3679   {0x10A2,0x2D02,0x10A2},  {0x10A3,0x2D03,0x10A3}, /* 2D02 */
3680   {0x10A4,0x2D04,0x10A4},  {0x10A5,0x2D05,0x10A5}, /* 2D04 */
3681   {0x10A6,0x2D06,0x10A6},  {0x10A7,0x2D07,0x10A7}, /* 2D06 */
3682   {0x10A8,0x2D08,0x10A8},  {0x10A9,0x2D09,0x10A9}, /* 2D08 */
3683   {0x10AA,0x2D0A,0x10AA},  {0x10AB,0x2D0B,0x10AB}, /* 2D0A */
3684   {0x10AC,0x2D0C,0x10AC},  {0x10AD,0x2D0D,0x10AD}, /* 2D0C */
3685   {0x10AE,0x2D0E,0x10AE},  {0x10AF,0x2D0F,0x10AF}, /* 2D0E */
3686   {0x10B0,0x2D10,0x10B0},  {0x10B1,0x2D11,0x10B1}, /* 2D10 */
3687   {0x10B2,0x2D12,0x10B2},  {0x10B3,0x2D13,0x10B3}, /* 2D12 */
3688   {0x10B4,0x2D14,0x10B4},  {0x10B5,0x2D15,0x10B5}, /* 2D14 */
3689   {0x10B6,0x2D16,0x10B6},  {0x10B7,0x2D17,0x10B7}, /* 2D16 */
3690   {0x10B8,0x2D18,0x10B8},  {0x10B9,0x2D19,0x10B9}, /* 2D18 */
3691   {0x10BA,0x2D1A,0x10BA},  {0x10BB,0x2D1B,0x10BB}, /* 2D1A */
3692   {0x10BC,0x2D1C,0x10BC},  {0x10BD,0x2D1D,0x10BD}, /* 2D1C */
3693   {0x10BE,0x2D1E,0x10BE},  {0x10BF,0x2D1F,0x10BF}, /* 2D1E */
3694   {0x10C0,0x2D20,0x10C0},  {0x10C1,0x2D21,0x10C1}, /* 2D20 */
3695   {0x10C2,0x2D22,0x10C2},  {0x10C3,0x2D23,0x10C3}, /* 2D22 */
3696   {0x10C4,0x2D24,0x10C4},  {0x10C5,0x2D25,0x10C5}, /* 2D24 */
3697   {0x2D26,0x2D26,0x2D26},  {0x2D27,0x2D27,0x2D27}, /* 2D26 */
3698   {0x2D28,0x2D28,0x2D28},  {0x2D29,0x2D29,0x2D29}, /* 2D28 */
3699   {0x2D2A,0x2D2A,0x2D2A},  {0x2D2B,0x2D2B,0x2D2B}, /* 2D2A */
3700   {0x2D2C,0x2D2C,0x2D2C},  {0x2D2D,0x2D2D,0x2D2D}, /* 2D2C */
3701   {0x2D2E,0x2D2E,0x2D2E},  {0x2D2F,0x2D2F,0x2D2F}, /* 2D2E */
3702   {0x2D30,0x2D30,0x2D30},  {0x2D31,0x2D31,0x2D31}, /* 2D30 */
3703   {0x2D32,0x2D32,0x2D32},  {0x2D33,0x2D33,0x2D33}, /* 2D32 */
3704   {0x2D34,0x2D34,0x2D34},  {0x2D35,0x2D35,0x2D35}, /* 2D34 */
3705   {0x2D36,0x2D36,0x2D36},  {0x2D37,0x2D37,0x2D37}, /* 2D36 */
3706   {0x2D38,0x2D38,0x2D38},  {0x2D39,0x2D39,0x2D39}, /* 2D38 */
3707   {0x2D3A,0x2D3A,0x2D3A},  {0x2D3B,0x2D3B,0x2D3B}, /* 2D3A */
3708   {0x2D3C,0x2D3C,0x2D3C},  {0x2D3D,0x2D3D,0x2D3D}, /* 2D3C */
3709   {0x2D3E,0x2D3E,0x2D3E},  {0x2D3F,0x2D3F,0x2D3F}, /* 2D3E */
3710   {0x2D40,0x2D40,0x2D40},  {0x2D41,0x2D41,0x2D41}, /* 2D40 */
3711   {0x2D42,0x2D42,0x2D42},  {0x2D43,0x2D43,0x2D43}, /* 2D42 */
3712   {0x2D44,0x2D44,0x2D44},  {0x2D45,0x2D45,0x2D45}, /* 2D44 */
3713   {0x2D46,0x2D46,0x2D46},  {0x2D47,0x2D47,0x2D47}, /* 2D46 */
3714   {0x2D48,0x2D48,0x2D48},  {0x2D49,0x2D49,0x2D49}, /* 2D48 */
3715   {0x2D4A,0x2D4A,0x2D4A},  {0x2D4B,0x2D4B,0x2D4B}, /* 2D4A */
3716   {0x2D4C,0x2D4C,0x2D4C},  {0x2D4D,0x2D4D,0x2D4D}, /* 2D4C */
3717   {0x2D4E,0x2D4E,0x2D4E},  {0x2D4F,0x2D4F,0x2D4F}, /* 2D4E */
3718   {0x2D50,0x2D50,0x2D50},  {0x2D51,0x2D51,0x2D51}, /* 2D50 */
3719   {0x2D52,0x2D52,0x2D52},  {0x2D53,0x2D53,0x2D53}, /* 2D52 */
3720   {0x2D54,0x2D54,0x2D54},  {0x2D55,0x2D55,0x2D55}, /* 2D54 */
3721   {0x2D56,0x2D56,0x2D56},  {0x2D57,0x2D57,0x2D57}, /* 2D56 */
3722   {0x2D58,0x2D58,0x2D58},  {0x2D59,0x2D59,0x2D59}, /* 2D58 */
3723   {0x2D5A,0x2D5A,0x2D5A},  {0x2D5B,0x2D5B,0x2D5B}, /* 2D5A */
3724   {0x2D5C,0x2D5C,0x2D5C},  {0x2D5D,0x2D5D,0x2D5D}, /* 2D5C */
3725   {0x2D5E,0x2D5E,0x2D5E},  {0x2D5F,0x2D5F,0x2D5F}, /* 2D5E */
3726   {0x2D60,0x2D60,0x2D60},  {0x2D61,0x2D61,0x2D61}, /* 2D60 */
3727   {0x2D62,0x2D62,0x2D62},  {0x2D63,0x2D63,0x2D63}, /* 2D62 */
3728   {0x2D64,0x2D64,0x2D64},  {0x2D65,0x2D65,0x2D65}, /* 2D64 */
3729   {0x2D66,0x2D66,0x2D66},  {0x2D67,0x2D67,0x2D67}, /* 2D66 */
3730   {0x2D68,0x2D68,0x2D68},  {0x2D69,0x2D69,0x2D69}, /* 2D68 */
3731   {0x2D6A,0x2D6A,0x2D6A},  {0x2D6B,0x2D6B,0x2D6B}, /* 2D6A */
3732   {0x2D6C,0x2D6C,0x2D6C},  {0x2D6D,0x2D6D,0x2D6D}, /* 2D6C */
3733   {0x2D6E,0x2D6E,0x2D6E},  {0x2D6F,0x2D6F,0x2D6F}, /* 2D6E */
3734   {0x2D70,0x2D70,0x2D70},  {0x2D71,0x2D71,0x2D71}, /* 2D70 */
3735   {0x2D72,0x2D72,0x2D72},  {0x2D73,0x2D73,0x2D73}, /* 2D72 */
3736   {0x2D74,0x2D74,0x2D74},  {0x2D75,0x2D75,0x2D75}, /* 2D74 */
3737   {0x2D76,0x2D76,0x2D76},  {0x2D77,0x2D77,0x2D77}, /* 2D76 */
3738   {0x2D78,0x2D78,0x2D78},  {0x2D79,0x2D79,0x2D79}, /* 2D78 */
3739   {0x2D7A,0x2D7A,0x2D7A},  {0x2D7B,0x2D7B,0x2D7B}, /* 2D7A */
3740   {0x2D7C,0x2D7C,0x2D7C},  {0x2D7D,0x2D7D,0x2D7D}, /* 2D7C */
3741   {0x2D7E,0x2D7E,0x2D7E},  {0x2D7F,0x2D7F,0x2D7F}, /* 2D7E */
3742   {0x2D80,0x2D80,0x2D80},  {0x2D81,0x2D81,0x2D81}, /* 2D80 */
3743   {0x2D82,0x2D82,0x2D82},  {0x2D83,0x2D83,0x2D83}, /* 2D82 */
3744   {0x2D84,0x2D84,0x2D84},  {0x2D85,0x2D85,0x2D85}, /* 2D84 */
3745   {0x2D86,0x2D86,0x2D86},  {0x2D87,0x2D87,0x2D87}, /* 2D86 */
3746   {0x2D88,0x2D88,0x2D88},  {0x2D89,0x2D89,0x2D89}, /* 2D88 */
3747   {0x2D8A,0x2D8A,0x2D8A},  {0x2D8B,0x2D8B,0x2D8B}, /* 2D8A */
3748   {0x2D8C,0x2D8C,0x2D8C},  {0x2D8D,0x2D8D,0x2D8D}, /* 2D8C */
3749   {0x2D8E,0x2D8E,0x2D8E},  {0x2D8F,0x2D8F,0x2D8F}, /* 2D8E */
3750   {0x2D90,0x2D90,0x2D90},  {0x2D91,0x2D91,0x2D91}, /* 2D90 */
3751   {0x2D92,0x2D92,0x2D92},  {0x2D93,0x2D93,0x2D93}, /* 2D92 */
3752   {0x2D94,0x2D94,0x2D94},  {0x2D95,0x2D95,0x2D95}, /* 2D94 */
3753   {0x2D96,0x2D96,0x2D96},  {0x2D97,0x2D97,0x2D97}, /* 2D96 */
3754   {0x2D98,0x2D98,0x2D98},  {0x2D99,0x2D99,0x2D99}, /* 2D98 */
3755   {0x2D9A,0x2D9A,0x2D9A},  {0x2D9B,0x2D9B,0x2D9B}, /* 2D9A */
3756   {0x2D9C,0x2D9C,0x2D9C},  {0x2D9D,0x2D9D,0x2D9D}, /* 2D9C */
3757   {0x2D9E,0x2D9E,0x2D9E},  {0x2D9F,0x2D9F,0x2D9F}, /* 2D9E */
3758   {0x2DA0,0x2DA0,0x2DA0},  {0x2DA1,0x2DA1,0x2DA1}, /* 2DA0 */
3759   {0x2DA2,0x2DA2,0x2DA2},  {0x2DA3,0x2DA3,0x2DA3}, /* 2DA2 */
3760   {0x2DA4,0x2DA4,0x2DA4},  {0x2DA5,0x2DA5,0x2DA5}, /* 2DA4 */
3761   {0x2DA6,0x2DA6,0x2DA6},  {0x2DA7,0x2DA7,0x2DA7}, /* 2DA6 */
3762   {0x2DA8,0x2DA8,0x2DA8},  {0x2DA9,0x2DA9,0x2DA9}, /* 2DA8 */
3763   {0x2DAA,0x2DAA,0x2DAA},  {0x2DAB,0x2DAB,0x2DAB}, /* 2DAA */
3764   {0x2DAC,0x2DAC,0x2DAC},  {0x2DAD,0x2DAD,0x2DAD}, /* 2DAC */
3765   {0x2DAE,0x2DAE,0x2DAE},  {0x2DAF,0x2DAF,0x2DAF}, /* 2DAE */
3766   {0x2DB0,0x2DB0,0x2DB0},  {0x2DB1,0x2DB1,0x2DB1}, /* 2DB0 */
3767   {0x2DB2,0x2DB2,0x2DB2},  {0x2DB3,0x2DB3,0x2DB3}, /* 2DB2 */
3768   {0x2DB4,0x2DB4,0x2DB4},  {0x2DB5,0x2DB5,0x2DB5}, /* 2DB4 */
3769   {0x2DB6,0x2DB6,0x2DB6},  {0x2DB7,0x2DB7,0x2DB7}, /* 2DB6 */
3770   {0x2DB8,0x2DB8,0x2DB8},  {0x2DB9,0x2DB9,0x2DB9}, /* 2DB8 */
3771   {0x2DBA,0x2DBA,0x2DBA},  {0x2DBB,0x2DBB,0x2DBB}, /* 2DBA */
3772   {0x2DBC,0x2DBC,0x2DBC},  {0x2DBD,0x2DBD,0x2DBD}, /* 2DBC */
3773   {0x2DBE,0x2DBE,0x2DBE},  {0x2DBF,0x2DBF,0x2DBF}, /* 2DBE */
3774   {0x2DC0,0x2DC0,0x2DC0},  {0x2DC1,0x2DC1,0x2DC1}, /* 2DC0 */
3775   {0x2DC2,0x2DC2,0x2DC2},  {0x2DC3,0x2DC3,0x2DC3}, /* 2DC2 */
3776   {0x2DC4,0x2DC4,0x2DC4},  {0x2DC5,0x2DC5,0x2DC5}, /* 2DC4 */
3777   {0x2DC6,0x2DC6,0x2DC6},  {0x2DC7,0x2DC7,0x2DC7}, /* 2DC6 */
3778   {0x2DC8,0x2DC8,0x2DC8},  {0x2DC9,0x2DC9,0x2DC9}, /* 2DC8 */
3779   {0x2DCA,0x2DCA,0x2DCA},  {0x2DCB,0x2DCB,0x2DCB}, /* 2DCA */
3780   {0x2DCC,0x2DCC,0x2DCC},  {0x2DCD,0x2DCD,0x2DCD}, /* 2DCC */
3781   {0x2DCE,0x2DCE,0x2DCE},  {0x2DCF,0x2DCF,0x2DCF}, /* 2DCE */
3782   {0x2DD0,0x2DD0,0x2DD0},  {0x2DD1,0x2DD1,0x2DD1}, /* 2DD0 */
3783   {0x2DD2,0x2DD2,0x2DD2},  {0x2DD3,0x2DD3,0x2DD3}, /* 2DD2 */
3784   {0x2DD4,0x2DD4,0x2DD4},  {0x2DD5,0x2DD5,0x2DD5}, /* 2DD4 */
3785   {0x2DD6,0x2DD6,0x2DD6},  {0x2DD7,0x2DD7,0x2DD7}, /* 2DD6 */
3786   {0x2DD8,0x2DD8,0x2DD8},  {0x2DD9,0x2DD9,0x2DD9}, /* 2DD8 */
3787   {0x2DDA,0x2DDA,0x2DDA},  {0x2DDB,0x2DDB,0x2DDB}, /* 2DDA */
3788   {0x2DDC,0x2DDC,0x2DDC},  {0x2DDD,0x2DDD,0x2DDD}, /* 2DDC */
3789   {0x2DDE,0x2DDE,0x2DDE},  {0x2DDF,0x2DDF,0x2DDF}, /* 2DDE */
3790   {0x2DE0,0x2DE0,0x2DE0},  {0x2DE1,0x2DE1,0x2DE1}, /* 2DE0 */
3791   {0x2DE2,0x2DE2,0x2DE2},  {0x2DE3,0x2DE3,0x2DE3}, /* 2DE2 */
3792   {0x2DE4,0x2DE4,0x2DE4},  {0x2DE5,0x2DE5,0x2DE5}, /* 2DE4 */
3793   {0x2DE6,0x2DE6,0x2DE6},  {0x2DE7,0x2DE7,0x2DE7}, /* 2DE6 */
3794   {0x2DE8,0x2DE8,0x2DE8},  {0x2DE9,0x2DE9,0x2DE9}, /* 2DE8 */
3795   {0x2DEA,0x2DEA,0x2DEA},  {0x2DEB,0x2DEB,0x2DEB}, /* 2DEA */
3796   {0x2DEC,0x2DEC,0x2DEC},  {0x2DED,0x2DED,0x2DED}, /* 2DEC */
3797   {0x2DEE,0x2DEE,0x2DEE},  {0x2DEF,0x2DEF,0x2DEF}, /* 2DEE */
3798   {0x2DF0,0x2DF0,0x2DF0},  {0x2DF1,0x2DF1,0x2DF1}, /* 2DF0 */
3799   {0x2DF2,0x2DF2,0x2DF2},  {0x2DF3,0x2DF3,0x2DF3}, /* 2DF2 */
3800   {0x2DF4,0x2DF4,0x2DF4},  {0x2DF5,0x2DF5,0x2DF5}, /* 2DF4 */
3801   {0x2DF6,0x2DF6,0x2DF6},  {0x2DF7,0x2DF7,0x2DF7}, /* 2DF6 */
3802   {0x2DF8,0x2DF8,0x2DF8},  {0x2DF9,0x2DF9,0x2DF9}, /* 2DF8 */
3803   {0x2DFA,0x2DFA,0x2DFA},  {0x2DFB,0x2DFB,0x2DFB}, /* 2DFA */
3804   {0x2DFC,0x2DFC,0x2DFC},  {0x2DFD,0x2DFD,0x2DFD}, /* 2DFC */
3805   {0x2DFE,0x2DFE,0x2DFE},  {0x2DFF,0x2DFF,0x2DFF} /* 2DFE */
3806 };
3807 
3808 static MY_UNICASE_CHARACTER u520pA6[]={
3809   {0xA600,0xA600,0xA600},  {0xA601,0xA601,0xA601}, /* A600 */
3810   {0xA602,0xA602,0xA602},  {0xA603,0xA603,0xA603}, /* A602 */
3811   {0xA604,0xA604,0xA604},  {0xA605,0xA605,0xA605}, /* A604 */
3812   {0xA606,0xA606,0xA606},  {0xA607,0xA607,0xA607}, /* A606 */
3813   {0xA608,0xA608,0xA608},  {0xA609,0xA609,0xA609}, /* A608 */
3814   {0xA60A,0xA60A,0xA60A},  {0xA60B,0xA60B,0xA60B}, /* A60A */
3815   {0xA60C,0xA60C,0xA60C},  {0xA60D,0xA60D,0xA60D}, /* A60C */
3816   {0xA60E,0xA60E,0xA60E},  {0xA60F,0xA60F,0xA60F}, /* A60E */
3817   {0xA610,0xA610,0xA610},  {0xA611,0xA611,0xA611}, /* A610 */
3818   {0xA612,0xA612,0xA612},  {0xA613,0xA613,0xA613}, /* A612 */
3819   {0xA614,0xA614,0xA614},  {0xA615,0xA615,0xA615}, /* A614 */
3820   {0xA616,0xA616,0xA616},  {0xA617,0xA617,0xA617}, /* A616 */
3821   {0xA618,0xA618,0xA618},  {0xA619,0xA619,0xA619}, /* A618 */
3822   {0xA61A,0xA61A,0xA61A},  {0xA61B,0xA61B,0xA61B}, /* A61A */
3823   {0xA61C,0xA61C,0xA61C},  {0xA61D,0xA61D,0xA61D}, /* A61C */
3824   {0xA61E,0xA61E,0xA61E},  {0xA61F,0xA61F,0xA61F}, /* A61E */
3825   {0xA620,0xA620,0xA620},  {0xA621,0xA621,0xA621}, /* A620 */
3826   {0xA622,0xA622,0xA622},  {0xA623,0xA623,0xA623}, /* A622 */
3827   {0xA624,0xA624,0xA624},  {0xA625,0xA625,0xA625}, /* A624 */
3828   {0xA626,0xA626,0xA626},  {0xA627,0xA627,0xA627}, /* A626 */
3829   {0xA628,0xA628,0xA628},  {0xA629,0xA629,0xA629}, /* A628 */
3830   {0xA62A,0xA62A,0xA62A},  {0xA62B,0xA62B,0xA62B}, /* A62A */
3831   {0xA62C,0xA62C,0xA62C},  {0xA62D,0xA62D,0xA62D}, /* A62C */
3832   {0xA62E,0xA62E,0xA62E},  {0xA62F,0xA62F,0xA62F}, /* A62E */
3833   {0xA630,0xA630,0xA630},  {0xA631,0xA631,0xA631}, /* A630 */
3834   {0xA632,0xA632,0xA632},  {0xA633,0xA633,0xA633}, /* A632 */
3835   {0xA634,0xA634,0xA634},  {0xA635,0xA635,0xA635}, /* A634 */
3836   {0xA636,0xA636,0xA636},  {0xA637,0xA637,0xA637}, /* A636 */
3837   {0xA638,0xA638,0xA638},  {0xA639,0xA639,0xA639}, /* A638 */
3838   {0xA63A,0xA63A,0xA63A},  {0xA63B,0xA63B,0xA63B}, /* A63A */
3839   {0xA63C,0xA63C,0xA63C},  {0xA63D,0xA63D,0xA63D}, /* A63C */
3840   {0xA63E,0xA63E,0xA63E},  {0xA63F,0xA63F,0xA63F}, /* A63E */
3841   {0xA640,0xA641,0xA640},  {0xA640,0xA641,0xA640}, /* A640 */
3842   {0xA642,0xA643,0xA642},  {0xA642,0xA643,0xA642}, /* A642 */
3843   {0xA644,0xA645,0xA644},  {0xA644,0xA645,0xA644}, /* A644 */
3844   {0xA646,0xA647,0xA646},  {0xA646,0xA647,0xA646}, /* A646 */
3845   {0xA648,0xA649,0xA648},  {0xA648,0xA649,0xA648}, /* A648 */
3846   {0xA64A,0xA64B,0xA64A},  {0xA64A,0xA64B,0xA64A}, /* A64A */
3847   {0xA64C,0xA64D,0xA64C},  {0xA64C,0xA64D,0xA64C}, /* A64C */
3848   {0xA64E,0xA64F,0xA64E},  {0xA64E,0xA64F,0xA64E}, /* A64E */
3849   {0xA650,0xA651,0xA650},  {0xA650,0xA651,0xA650}, /* A650 */
3850   {0xA652,0xA653,0xA652},  {0xA652,0xA653,0xA652}, /* A652 */
3851   {0xA654,0xA655,0xA654},  {0xA654,0xA655,0xA654}, /* A654 */
3852   {0xA656,0xA657,0xA656},  {0xA656,0xA657,0xA656}, /* A656 */
3853   {0xA658,0xA659,0xA658},  {0xA658,0xA659,0xA658}, /* A658 */
3854   {0xA65A,0xA65B,0xA65A},  {0xA65A,0xA65B,0xA65A}, /* A65A */
3855   {0xA65C,0xA65D,0xA65C},  {0xA65C,0xA65D,0xA65C}, /* A65C */
3856   {0xA65E,0xA65F,0xA65E},  {0xA65E,0xA65F,0xA65E}, /* A65E */
3857   {0xA660,0xA660,0xA660},  {0xA661,0xA661,0xA661}, /* A660 */
3858   {0xA662,0xA663,0xA662},  {0xA662,0xA663,0xA662}, /* A662 */
3859   {0xA664,0xA665,0xA664},  {0xA664,0xA665,0xA664}, /* A664 */
3860   {0xA666,0xA667,0xA666},  {0xA666,0xA667,0xA666}, /* A666 */
3861   {0xA668,0xA669,0xA668},  {0xA668,0xA669,0xA668}, /* A668 */
3862   {0xA66A,0xA66B,0xA66A},  {0xA66A,0xA66B,0xA66A}, /* A66A */
3863   {0xA66C,0xA66D,0xA66C},  {0xA66C,0xA66D,0xA66C}, /* A66C */
3864   {0xA66E,0xA66E,0xA66E},  {0xA66F,0xA66F,0xA66F}, /* A66E */
3865   {0xA670,0xA670,0xA670},  {0xA671,0xA671,0xA671}, /* A670 */
3866   {0xA672,0xA672,0xA672},  {0xA673,0xA673,0xA673}, /* A672 */
3867   {0xA674,0xA674,0xA674},  {0xA675,0xA675,0xA675}, /* A674 */
3868   {0xA676,0xA676,0xA676},  {0xA677,0xA677,0xA677}, /* A676 */
3869   {0xA678,0xA678,0xA678},  {0xA679,0xA679,0xA679}, /* A678 */
3870   {0xA67A,0xA67A,0xA67A},  {0xA67B,0xA67B,0xA67B}, /* A67A */
3871   {0xA67C,0xA67C,0xA67C},  {0xA67D,0xA67D,0xA67D}, /* A67C */
3872   {0xA67E,0xA67E,0xA67E},  {0xA67F,0xA67F,0xA67F}, /* A67E */
3873   {0xA680,0xA681,0xA680},  {0xA680,0xA681,0xA680}, /* A680 */
3874   {0xA682,0xA683,0xA682},  {0xA682,0xA683,0xA682}, /* A682 */
3875   {0xA684,0xA685,0xA684},  {0xA684,0xA685,0xA684}, /* A684 */
3876   {0xA686,0xA687,0xA686},  {0xA686,0xA687,0xA686}, /* A686 */
3877   {0xA688,0xA689,0xA688},  {0xA688,0xA689,0xA688}, /* A688 */
3878   {0xA68A,0xA68B,0xA68A},  {0xA68A,0xA68B,0xA68A}, /* A68A */
3879   {0xA68C,0xA68D,0xA68C},  {0xA68C,0xA68D,0xA68C}, /* A68C */
3880   {0xA68E,0xA68F,0xA68E},  {0xA68E,0xA68F,0xA68E}, /* A68E */
3881   {0xA690,0xA691,0xA690},  {0xA690,0xA691,0xA690}, /* A690 */
3882   {0xA692,0xA693,0xA692},  {0xA692,0xA693,0xA692}, /* A692 */
3883   {0xA694,0xA695,0xA694},  {0xA694,0xA695,0xA694}, /* A694 */
3884   {0xA696,0xA697,0xA696},  {0xA696,0xA697,0xA696}, /* A696 */
3885   {0xA698,0xA698,0xA698},  {0xA699,0xA699,0xA699}, /* A698 */
3886   {0xA69A,0xA69A,0xA69A},  {0xA69B,0xA69B,0xA69B}, /* A69A */
3887   {0xA69C,0xA69C,0xA69C},  {0xA69D,0xA69D,0xA69D}, /* A69C */
3888   {0xA69E,0xA69E,0xA69E},  {0xA69F,0xA69F,0xA69F}, /* A69E */
3889   {0xA6A0,0xA6A0,0xA6A0},  {0xA6A1,0xA6A1,0xA6A1}, /* A6A0 */
3890   {0xA6A2,0xA6A2,0xA6A2},  {0xA6A3,0xA6A3,0xA6A3}, /* A6A2 */
3891   {0xA6A4,0xA6A4,0xA6A4},  {0xA6A5,0xA6A5,0xA6A5}, /* A6A4 */
3892   {0xA6A6,0xA6A6,0xA6A6},  {0xA6A7,0xA6A7,0xA6A7}, /* A6A6 */
3893   {0xA6A8,0xA6A8,0xA6A8},  {0xA6A9,0xA6A9,0xA6A9}, /* A6A8 */
3894   {0xA6AA,0xA6AA,0xA6AA},  {0xA6AB,0xA6AB,0xA6AB}, /* A6AA */
3895   {0xA6AC,0xA6AC,0xA6AC},  {0xA6AD,0xA6AD,0xA6AD}, /* A6AC */
3896   {0xA6AE,0xA6AE,0xA6AE},  {0xA6AF,0xA6AF,0xA6AF}, /* A6AE */
3897   {0xA6B0,0xA6B0,0xA6B0},  {0xA6B1,0xA6B1,0xA6B1}, /* A6B0 */
3898   {0xA6B2,0xA6B2,0xA6B2},  {0xA6B3,0xA6B3,0xA6B3}, /* A6B2 */
3899   {0xA6B4,0xA6B4,0xA6B4},  {0xA6B5,0xA6B5,0xA6B5}, /* A6B4 */
3900   {0xA6B6,0xA6B6,0xA6B6},  {0xA6B7,0xA6B7,0xA6B7}, /* A6B6 */
3901   {0xA6B8,0xA6B8,0xA6B8},  {0xA6B9,0xA6B9,0xA6B9}, /* A6B8 */
3902   {0xA6BA,0xA6BA,0xA6BA},  {0xA6BB,0xA6BB,0xA6BB}, /* A6BA */
3903   {0xA6BC,0xA6BC,0xA6BC},  {0xA6BD,0xA6BD,0xA6BD}, /* A6BC */
3904   {0xA6BE,0xA6BE,0xA6BE},  {0xA6BF,0xA6BF,0xA6BF}, /* A6BE */
3905   {0xA6C0,0xA6C0,0xA6C0},  {0xA6C1,0xA6C1,0xA6C1}, /* A6C0 */
3906   {0xA6C2,0xA6C2,0xA6C2},  {0xA6C3,0xA6C3,0xA6C3}, /* A6C2 */
3907   {0xA6C4,0xA6C4,0xA6C4},  {0xA6C5,0xA6C5,0xA6C5}, /* A6C4 */
3908   {0xA6C6,0xA6C6,0xA6C6},  {0xA6C7,0xA6C7,0xA6C7}, /* A6C6 */
3909   {0xA6C8,0xA6C8,0xA6C8},  {0xA6C9,0xA6C9,0xA6C9}, /* A6C8 */
3910   {0xA6CA,0xA6CA,0xA6CA},  {0xA6CB,0xA6CB,0xA6CB}, /* A6CA */
3911   {0xA6CC,0xA6CC,0xA6CC},  {0xA6CD,0xA6CD,0xA6CD}, /* A6CC */
3912   {0xA6CE,0xA6CE,0xA6CE},  {0xA6CF,0xA6CF,0xA6CF}, /* A6CE */
3913   {0xA6D0,0xA6D0,0xA6D0},  {0xA6D1,0xA6D1,0xA6D1}, /* A6D0 */
3914   {0xA6D2,0xA6D2,0xA6D2},  {0xA6D3,0xA6D3,0xA6D3}, /* A6D2 */
3915   {0xA6D4,0xA6D4,0xA6D4},  {0xA6D5,0xA6D5,0xA6D5}, /* A6D4 */
3916   {0xA6D6,0xA6D6,0xA6D6},  {0xA6D7,0xA6D7,0xA6D7}, /* A6D6 */
3917   {0xA6D8,0xA6D8,0xA6D8},  {0xA6D9,0xA6D9,0xA6D9}, /* A6D8 */
3918   {0xA6DA,0xA6DA,0xA6DA},  {0xA6DB,0xA6DB,0xA6DB}, /* A6DA */
3919   {0xA6DC,0xA6DC,0xA6DC},  {0xA6DD,0xA6DD,0xA6DD}, /* A6DC */
3920   {0xA6DE,0xA6DE,0xA6DE},  {0xA6DF,0xA6DF,0xA6DF}, /* A6DE */
3921   {0xA6E0,0xA6E0,0xA6E0},  {0xA6E1,0xA6E1,0xA6E1}, /* A6E0 */
3922   {0xA6E2,0xA6E2,0xA6E2},  {0xA6E3,0xA6E3,0xA6E3}, /* A6E2 */
3923   {0xA6E4,0xA6E4,0xA6E4},  {0xA6E5,0xA6E5,0xA6E5}, /* A6E4 */
3924   {0xA6E6,0xA6E6,0xA6E6},  {0xA6E7,0xA6E7,0xA6E7}, /* A6E6 */
3925   {0xA6E8,0xA6E8,0xA6E8},  {0xA6E9,0xA6E9,0xA6E9}, /* A6E8 */
3926   {0xA6EA,0xA6EA,0xA6EA},  {0xA6EB,0xA6EB,0xA6EB}, /* A6EA */
3927   {0xA6EC,0xA6EC,0xA6EC},  {0xA6ED,0xA6ED,0xA6ED}, /* A6EC */
3928   {0xA6EE,0xA6EE,0xA6EE},  {0xA6EF,0xA6EF,0xA6EF}, /* A6EE */
3929   {0xA6F0,0xA6F0,0xA6F0},  {0xA6F1,0xA6F1,0xA6F1}, /* A6F0 */
3930   {0xA6F2,0xA6F2,0xA6F2},  {0xA6F3,0xA6F3,0xA6F3}, /* A6F2 */
3931   {0xA6F4,0xA6F4,0xA6F4},  {0xA6F5,0xA6F5,0xA6F5}, /* A6F4 */
3932   {0xA6F6,0xA6F6,0xA6F6},  {0xA6F7,0xA6F7,0xA6F7}, /* A6F6 */
3933   {0xA6F8,0xA6F8,0xA6F8},  {0xA6F9,0xA6F9,0xA6F9}, /* A6F8 */
3934   {0xA6FA,0xA6FA,0xA6FA},  {0xA6FB,0xA6FB,0xA6FB}, /* A6FA */
3935   {0xA6FC,0xA6FC,0xA6FC},  {0xA6FD,0xA6FD,0xA6FD}, /* A6FC */
3936   {0xA6FE,0xA6FE,0xA6FE},  {0xA6FF,0xA6FF,0xA6FF} /* A6FE */
3937 };
3938 
3939 static MY_UNICASE_CHARACTER u520pA7[]={
3940   {0xA700,0xA700,0xA700},  {0xA701,0xA701,0xA701}, /* A700 */
3941   {0xA702,0xA702,0xA702},  {0xA703,0xA703,0xA703}, /* A702 */
3942   {0xA704,0xA704,0xA704},  {0xA705,0xA705,0xA705}, /* A704 */
3943   {0xA706,0xA706,0xA706},  {0xA707,0xA707,0xA707}, /* A706 */
3944   {0xA708,0xA708,0xA708},  {0xA709,0xA709,0xA709}, /* A708 */
3945   {0xA70A,0xA70A,0xA70A},  {0xA70B,0xA70B,0xA70B}, /* A70A */
3946   {0xA70C,0xA70C,0xA70C},  {0xA70D,0xA70D,0xA70D}, /* A70C */
3947   {0xA70E,0xA70E,0xA70E},  {0xA70F,0xA70F,0xA70F}, /* A70E */
3948   {0xA710,0xA710,0xA710},  {0xA711,0xA711,0xA711}, /* A710 */
3949   {0xA712,0xA712,0xA712},  {0xA713,0xA713,0xA713}, /* A712 */
3950   {0xA714,0xA714,0xA714},  {0xA715,0xA715,0xA715}, /* A714 */
3951   {0xA716,0xA716,0xA716},  {0xA717,0xA717,0xA717}, /* A716 */
3952   {0xA718,0xA718,0xA718},  {0xA719,0xA719,0xA719}, /* A718 */
3953   {0xA71A,0xA71A,0xA71A},  {0xA71B,0xA71B,0xA71B}, /* A71A */
3954   {0xA71C,0xA71C,0xA71C},  {0xA71D,0xA71D,0xA71D}, /* A71C */
3955   {0xA71E,0xA71E,0xA71E},  {0xA71F,0xA71F,0xA71F}, /* A71E */
3956   {0xA720,0xA720,0xA720},  {0xA721,0xA721,0xA721}, /* A720 */
3957   {0xA722,0xA723,0xA722},  {0xA722,0xA723,0xA722}, /* A722 */
3958   {0xA724,0xA725,0xA724},  {0xA724,0xA725,0xA724}, /* A724 */
3959   {0xA726,0xA727,0xA726},  {0xA726,0xA727,0xA726}, /* A726 */
3960   {0xA728,0xA729,0xA728},  {0xA728,0xA729,0xA728}, /* A728 */
3961   {0xA72A,0xA72B,0xA72A},  {0xA72A,0xA72B,0xA72A}, /* A72A */
3962   {0xA72C,0xA72D,0xA72C},  {0xA72C,0xA72D,0xA72C}, /* A72C */
3963   {0xA72E,0xA72F,0xA72E},  {0xA72E,0xA72F,0xA72E}, /* A72E */
3964   {0xA730,0xA730,0xA730},  {0xA731,0xA731,0xA731}, /* A730 */
3965   {0xA732,0xA733,0xA732},  {0xA732,0xA733,0xA732}, /* A732 */
3966   {0xA734,0xA735,0xA734},  {0xA734,0xA735,0xA734}, /* A734 */
3967   {0xA736,0xA737,0xA736},  {0xA736,0xA737,0xA736}, /* A736 */
3968   {0xA738,0xA739,0xA738},  {0xA738,0xA739,0xA738}, /* A738 */
3969   {0xA73A,0xA73B,0xA73A},  {0xA73A,0xA73B,0xA73A}, /* A73A */
3970   {0xA73C,0xA73D,0xA73C},  {0xA73C,0xA73D,0xA73C}, /* A73C */
3971   {0xA73E,0xA73F,0xA73E},  {0xA73E,0xA73F,0xA73E}, /* A73E */
3972   {0xA740,0xA741,0xA740},  {0xA740,0xA741,0xA740}, /* A740 */
3973   {0xA742,0xA743,0xA742},  {0xA742,0xA743,0xA742}, /* A742 */
3974   {0xA744,0xA745,0xA744},  {0xA744,0xA745,0xA744}, /* A744 */
3975   {0xA746,0xA747,0xA746},  {0xA746,0xA747,0xA746}, /* A746 */
3976   {0xA748,0xA749,0xA748},  {0xA748,0xA749,0xA748}, /* A748 */
3977   {0xA74A,0xA74B,0xA74A},  {0xA74A,0xA74B,0xA74A}, /* A74A */
3978   {0xA74C,0xA74D,0xA74C},  {0xA74C,0xA74D,0xA74C}, /* A74C */
3979   {0xA74E,0xA74F,0xA74E},  {0xA74E,0xA74F,0xA74E}, /* A74E */
3980   {0xA750,0xA751,0xA750},  {0xA750,0xA751,0xA750}, /* A750 */
3981   {0xA752,0xA753,0xA752},  {0xA752,0xA753,0xA752}, /* A752 */
3982   {0xA754,0xA755,0xA754},  {0xA754,0xA755,0xA754}, /* A754 */
3983   {0xA756,0xA757,0xA756},  {0xA756,0xA757,0xA756}, /* A756 */
3984   {0xA758,0xA759,0xA758},  {0xA758,0xA759,0xA758}, /* A758 */
3985   {0xA75A,0xA75B,0xA75A},  {0xA75A,0xA75B,0xA75A}, /* A75A */
3986   {0xA75C,0xA75D,0xA75C},  {0xA75C,0xA75D,0xA75C}, /* A75C */
3987   {0xA75E,0xA75F,0xA75E},  {0xA75E,0xA75F,0xA75E}, /* A75E */
3988   {0xA760,0xA761,0xA760},  {0xA760,0xA761,0xA760}, /* A760 */
3989   {0xA762,0xA763,0xA762},  {0xA762,0xA763,0xA762}, /* A762 */
3990   {0xA764,0xA765,0xA764},  {0xA764,0xA765,0xA764}, /* A764 */
3991   {0xA766,0xA767,0xA766},  {0xA766,0xA767,0xA766}, /* A766 */
3992   {0xA768,0xA769,0xA768},  {0xA768,0xA769,0xA768}, /* A768 */
3993   {0xA76A,0xA76B,0xA76A},  {0xA76A,0xA76B,0xA76A}, /* A76A */
3994   {0xA76C,0xA76D,0xA76C},  {0xA76C,0xA76D,0xA76C}, /* A76C */
3995   {0xA76E,0xA76F,0xA76E},  {0xA76E,0xA76F,0xA76E}, /* A76E */
3996   {0xA770,0xA770,0xA770},  {0xA771,0xA771,0xA771}, /* A770 */
3997   {0xA772,0xA772,0xA772},  {0xA773,0xA773,0xA773}, /* A772 */
3998   {0xA774,0xA774,0xA774},  {0xA775,0xA775,0xA775}, /* A774 */
3999   {0xA776,0xA776,0xA776},  {0xA777,0xA777,0xA777}, /* A776 */
4000   {0xA778,0xA778,0xA778},  {0xA779,0xA77A,0xA779}, /* A778 */
4001   {0xA779,0xA77A,0xA779},  {0xA77B,0xA77C,0xA77B}, /* A77A */
4002   {0xA77B,0xA77C,0xA77B},  {0xA77D,0x1D79,0xA77D}, /* A77C */
4003   {0xA77E,0xA77F,0xA77E},  {0xA77E,0xA77F,0xA77E}, /* A77E */
4004   {0xA780,0xA781,0xA780},  {0xA780,0xA781,0xA780}, /* A780 */
4005   {0xA782,0xA783,0xA782},  {0xA782,0xA783,0xA782}, /* A782 */
4006   {0xA784,0xA785,0xA784},  {0xA784,0xA785,0xA784}, /* A784 */
4007   {0xA786,0xA787,0xA786},  {0xA786,0xA787,0xA786}, /* A786 */
4008   {0xA788,0xA788,0xA788},  {0xA789,0xA789,0xA789}, /* A788 */
4009   {0xA78A,0xA78A,0xA78A},  {0xA78B,0xA78C,0xA78B}, /* A78A */
4010   {0xA78B,0xA78C,0xA78B},  {0xA78D,0xA78D,0xA78D}, /* A78C */
4011   {0xA78E,0xA78E,0xA78E},  {0xA78F,0xA78F,0xA78F}, /* A78E */
4012   {0xA790,0xA790,0xA790},  {0xA791,0xA791,0xA791}, /* A790 */
4013   {0xA792,0xA792,0xA792},  {0xA793,0xA793,0xA793}, /* A792 */
4014   {0xA794,0xA794,0xA794},  {0xA795,0xA795,0xA795}, /* A794 */
4015   {0xA796,0xA796,0xA796},  {0xA797,0xA797,0xA797}, /* A796 */
4016   {0xA798,0xA798,0xA798},  {0xA799,0xA799,0xA799}, /* A798 */
4017   {0xA79A,0xA79A,0xA79A},  {0xA79B,0xA79B,0xA79B}, /* A79A */
4018   {0xA79C,0xA79C,0xA79C},  {0xA79D,0xA79D,0xA79D}, /* A79C */
4019   {0xA79E,0xA79E,0xA79E},  {0xA79F,0xA79F,0xA79F}, /* A79E */
4020   {0xA7A0,0xA7A0,0xA7A0},  {0xA7A1,0xA7A1,0xA7A1}, /* A7A0 */
4021   {0xA7A2,0xA7A2,0xA7A2},  {0xA7A3,0xA7A3,0xA7A3}, /* A7A2 */
4022   {0xA7A4,0xA7A4,0xA7A4},  {0xA7A5,0xA7A5,0xA7A5}, /* A7A4 */
4023   {0xA7A6,0xA7A6,0xA7A6},  {0xA7A7,0xA7A7,0xA7A7}, /* A7A6 */
4024   {0xA7A8,0xA7A8,0xA7A8},  {0xA7A9,0xA7A9,0xA7A9}, /* A7A8 */
4025   {0xA7AA,0xA7AA,0xA7AA},  {0xA7AB,0xA7AB,0xA7AB}, /* A7AA */
4026   {0xA7AC,0xA7AC,0xA7AC},  {0xA7AD,0xA7AD,0xA7AD}, /* A7AC */
4027   {0xA7AE,0xA7AE,0xA7AE},  {0xA7AF,0xA7AF,0xA7AF}, /* A7AE */
4028   {0xA7B0,0xA7B0,0xA7B0},  {0xA7B1,0xA7B1,0xA7B1}, /* A7B0 */
4029   {0xA7B2,0xA7B2,0xA7B2},  {0xA7B3,0xA7B3,0xA7B3}, /* A7B2 */
4030   {0xA7B4,0xA7B4,0xA7B4},  {0xA7B5,0xA7B5,0xA7B5}, /* A7B4 */
4031   {0xA7B6,0xA7B6,0xA7B6},  {0xA7B7,0xA7B7,0xA7B7}, /* A7B6 */
4032   {0xA7B8,0xA7B8,0xA7B8},  {0xA7B9,0xA7B9,0xA7B9}, /* A7B8 */
4033   {0xA7BA,0xA7BA,0xA7BA},  {0xA7BB,0xA7BB,0xA7BB}, /* A7BA */
4034   {0xA7BC,0xA7BC,0xA7BC},  {0xA7BD,0xA7BD,0xA7BD}, /* A7BC */
4035   {0xA7BE,0xA7BE,0xA7BE},  {0xA7BF,0xA7BF,0xA7BF}, /* A7BE */
4036   {0xA7C0,0xA7C0,0xA7C0},  {0xA7C1,0xA7C1,0xA7C1}, /* A7C0 */
4037   {0xA7C2,0xA7C2,0xA7C2},  {0xA7C3,0xA7C3,0xA7C3}, /* A7C2 */
4038   {0xA7C4,0xA7C4,0xA7C4},  {0xA7C5,0xA7C5,0xA7C5}, /* A7C4 */
4039   {0xA7C6,0xA7C6,0xA7C6},  {0xA7C7,0xA7C7,0xA7C7}, /* A7C6 */
4040   {0xA7C8,0xA7C8,0xA7C8},  {0xA7C9,0xA7C9,0xA7C9}, /* A7C8 */
4041   {0xA7CA,0xA7CA,0xA7CA},  {0xA7CB,0xA7CB,0xA7CB}, /* A7CA */
4042   {0xA7CC,0xA7CC,0xA7CC},  {0xA7CD,0xA7CD,0xA7CD}, /* A7CC */
4043   {0xA7CE,0xA7CE,0xA7CE},  {0xA7CF,0xA7CF,0xA7CF}, /* A7CE */
4044   {0xA7D0,0xA7D0,0xA7D0},  {0xA7D1,0xA7D1,0xA7D1}, /* A7D0 */
4045   {0xA7D2,0xA7D2,0xA7D2},  {0xA7D3,0xA7D3,0xA7D3}, /* A7D2 */
4046   {0xA7D4,0xA7D4,0xA7D4},  {0xA7D5,0xA7D5,0xA7D5}, /* A7D4 */
4047   {0xA7D6,0xA7D6,0xA7D6},  {0xA7D7,0xA7D7,0xA7D7}, /* A7D6 */
4048   {0xA7D8,0xA7D8,0xA7D8},  {0xA7D9,0xA7D9,0xA7D9}, /* A7D8 */
4049   {0xA7DA,0xA7DA,0xA7DA},  {0xA7DB,0xA7DB,0xA7DB}, /* A7DA */
4050   {0xA7DC,0xA7DC,0xA7DC},  {0xA7DD,0xA7DD,0xA7DD}, /* A7DC */
4051   {0xA7DE,0xA7DE,0xA7DE},  {0xA7DF,0xA7DF,0xA7DF}, /* A7DE */
4052   {0xA7E0,0xA7E0,0xA7E0},  {0xA7E1,0xA7E1,0xA7E1}, /* A7E0 */
4053   {0xA7E2,0xA7E2,0xA7E2},  {0xA7E3,0xA7E3,0xA7E3}, /* A7E2 */
4054   {0xA7E4,0xA7E4,0xA7E4},  {0xA7E5,0xA7E5,0xA7E5}, /* A7E4 */
4055   {0xA7E6,0xA7E6,0xA7E6},  {0xA7E7,0xA7E7,0xA7E7}, /* A7E6 */
4056   {0xA7E8,0xA7E8,0xA7E8},  {0xA7E9,0xA7E9,0xA7E9}, /* A7E8 */
4057   {0xA7EA,0xA7EA,0xA7EA},  {0xA7EB,0xA7EB,0xA7EB}, /* A7EA */
4058   {0xA7EC,0xA7EC,0xA7EC},  {0xA7ED,0xA7ED,0xA7ED}, /* A7EC */
4059   {0xA7EE,0xA7EE,0xA7EE},  {0xA7EF,0xA7EF,0xA7EF}, /* A7EE */
4060   {0xA7F0,0xA7F0,0xA7F0},  {0xA7F1,0xA7F1,0xA7F1}, /* A7F0 */
4061   {0xA7F2,0xA7F2,0xA7F2},  {0xA7F3,0xA7F3,0xA7F3}, /* A7F2 */
4062   {0xA7F4,0xA7F4,0xA7F4},  {0xA7F5,0xA7F5,0xA7F5}, /* A7F4 */
4063   {0xA7F6,0xA7F6,0xA7F6},  {0xA7F7,0xA7F7,0xA7F7}, /* A7F6 */
4064   {0xA7F8,0xA7F8,0xA7F8},  {0xA7F9,0xA7F9,0xA7F9}, /* A7F8 */
4065   {0xA7FA,0xA7FA,0xA7FA},  {0xA7FB,0xA7FB,0xA7FB}, /* A7FA */
4066   {0xA7FC,0xA7FC,0xA7FC},  {0xA7FD,0xA7FD,0xA7FD}, /* A7FC */
4067   {0xA7FE,0xA7FE,0xA7FE},  {0xA7FF,0xA7FF,0xA7FF} /* A7FE */
4068 };
4069 
4070 static MY_UNICASE_CHARACTER u520pFF[]={
4071   {0xFF00,0xFF00,0xFF00},  {0xFF01,0xFF01,0xFF01}, /* FF00 */
4072   {0xFF02,0xFF02,0xFF02},  {0xFF03,0xFF03,0xFF03}, /* FF02 */
4073   {0xFF04,0xFF04,0xFF04},  {0xFF05,0xFF05,0xFF05}, /* FF04 */
4074   {0xFF06,0xFF06,0xFF06},  {0xFF07,0xFF07,0xFF07}, /* FF06 */
4075   {0xFF08,0xFF08,0xFF08},  {0xFF09,0xFF09,0xFF09}, /* FF08 */
4076   {0xFF0A,0xFF0A,0xFF0A},  {0xFF0B,0xFF0B,0xFF0B}, /* FF0A */
4077   {0xFF0C,0xFF0C,0xFF0C},  {0xFF0D,0xFF0D,0xFF0D}, /* FF0C */
4078   {0xFF0E,0xFF0E,0xFF0E},  {0xFF0F,0xFF0F,0xFF0F}, /* FF0E */
4079   {0xFF10,0xFF10,0xFF10},  {0xFF11,0xFF11,0xFF11}, /* FF10 */
4080   {0xFF12,0xFF12,0xFF12},  {0xFF13,0xFF13,0xFF13}, /* FF12 */
4081   {0xFF14,0xFF14,0xFF14},  {0xFF15,0xFF15,0xFF15}, /* FF14 */
4082   {0xFF16,0xFF16,0xFF16},  {0xFF17,0xFF17,0xFF17}, /* FF16 */
4083   {0xFF18,0xFF18,0xFF18},  {0xFF19,0xFF19,0xFF19}, /* FF18 */
4084   {0xFF1A,0xFF1A,0xFF1A},  {0xFF1B,0xFF1B,0xFF1B}, /* FF1A */
4085   {0xFF1C,0xFF1C,0xFF1C},  {0xFF1D,0xFF1D,0xFF1D}, /* FF1C */
4086   {0xFF1E,0xFF1E,0xFF1E},  {0xFF1F,0xFF1F,0xFF1F}, /* FF1E */
4087   {0xFF20,0xFF20,0xFF20},  {0xFF21,0xFF41,0xFF21}, /* FF20 */
4088   {0xFF22,0xFF42,0xFF22},  {0xFF23,0xFF43,0xFF23}, /* FF22 */
4089   {0xFF24,0xFF44,0xFF24},  {0xFF25,0xFF45,0xFF25}, /* FF24 */
4090   {0xFF26,0xFF46,0xFF26},  {0xFF27,0xFF47,0xFF27}, /* FF26 */
4091   {0xFF28,0xFF48,0xFF28},  {0xFF29,0xFF49,0xFF29}, /* FF28 */
4092   {0xFF2A,0xFF4A,0xFF2A},  {0xFF2B,0xFF4B,0xFF2B}, /* FF2A */
4093   {0xFF2C,0xFF4C,0xFF2C},  {0xFF2D,0xFF4D,0xFF2D}, /* FF2C */
4094   {0xFF2E,0xFF4E,0xFF2E},  {0xFF2F,0xFF4F,0xFF2F}, /* FF2E */
4095   {0xFF30,0xFF50,0xFF30},  {0xFF31,0xFF51,0xFF31}, /* FF30 */
4096   {0xFF32,0xFF52,0xFF32},  {0xFF33,0xFF53,0xFF33}, /* FF32 */
4097   {0xFF34,0xFF54,0xFF34},  {0xFF35,0xFF55,0xFF35}, /* FF34 */
4098   {0xFF36,0xFF56,0xFF36},  {0xFF37,0xFF57,0xFF37}, /* FF36 */
4099   {0xFF38,0xFF58,0xFF38},  {0xFF39,0xFF59,0xFF39}, /* FF38 */
4100   {0xFF3A,0xFF5A,0xFF3A},  {0xFF3B,0xFF3B,0xFF3B}, /* FF3A */
4101   {0xFF3C,0xFF3C,0xFF3C},  {0xFF3D,0xFF3D,0xFF3D}, /* FF3C */
4102   {0xFF3E,0xFF3E,0xFF3E},  {0xFF3F,0xFF3F,0xFF3F}, /* FF3E */
4103   {0xFF40,0xFF40,0xFF40},  {0xFF21,0xFF41,0xFF21}, /* FF40 */
4104   {0xFF22,0xFF42,0xFF22},  {0xFF23,0xFF43,0xFF23}, /* FF42 */
4105   {0xFF24,0xFF44,0xFF24},  {0xFF25,0xFF45,0xFF25}, /* FF44 */
4106   {0xFF26,0xFF46,0xFF26},  {0xFF27,0xFF47,0xFF27}, /* FF46 */
4107   {0xFF28,0xFF48,0xFF28},  {0xFF29,0xFF49,0xFF29}, /* FF48 */
4108   {0xFF2A,0xFF4A,0xFF2A},  {0xFF2B,0xFF4B,0xFF2B}, /* FF4A */
4109   {0xFF2C,0xFF4C,0xFF2C},  {0xFF2D,0xFF4D,0xFF2D}, /* FF4C */
4110   {0xFF2E,0xFF4E,0xFF2E},  {0xFF2F,0xFF4F,0xFF2F}, /* FF4E */
4111   {0xFF30,0xFF50,0xFF30},  {0xFF31,0xFF51,0xFF31}, /* FF50 */
4112   {0xFF32,0xFF52,0xFF32},  {0xFF33,0xFF53,0xFF33}, /* FF52 */
4113   {0xFF34,0xFF54,0xFF34},  {0xFF35,0xFF55,0xFF35}, /* FF54 */
4114   {0xFF36,0xFF56,0xFF36},  {0xFF37,0xFF57,0xFF37}, /* FF56 */
4115   {0xFF38,0xFF58,0xFF38},  {0xFF39,0xFF59,0xFF39}, /* FF58 */
4116   {0xFF3A,0xFF5A,0xFF3A},  {0xFF5B,0xFF5B,0xFF5B}, /* FF5A */
4117   {0xFF5C,0xFF5C,0xFF5C},  {0xFF5D,0xFF5D,0xFF5D}, /* FF5C */
4118   {0xFF5E,0xFF5E,0xFF5E},  {0xFF5F,0xFF5F,0xFF5F}, /* FF5E */
4119   {0xFF60,0xFF60,0xFF60},  {0xFF61,0xFF61,0xFF61}, /* FF60 */
4120   {0xFF62,0xFF62,0xFF62},  {0xFF63,0xFF63,0xFF63}, /* FF62 */
4121   {0xFF64,0xFF64,0xFF64},  {0xFF65,0xFF65,0xFF65}, /* FF64 */
4122   {0xFF66,0xFF66,0xFF66},  {0xFF67,0xFF67,0xFF67}, /* FF66 */
4123   {0xFF68,0xFF68,0xFF68},  {0xFF69,0xFF69,0xFF69}, /* FF68 */
4124   {0xFF6A,0xFF6A,0xFF6A},  {0xFF6B,0xFF6B,0xFF6B}, /* FF6A */
4125   {0xFF6C,0xFF6C,0xFF6C},  {0xFF6D,0xFF6D,0xFF6D}, /* FF6C */
4126   {0xFF6E,0xFF6E,0xFF6E},  {0xFF6F,0xFF6F,0xFF6F}, /* FF6E */
4127   {0xFF70,0xFF70,0xFF70},  {0xFF71,0xFF71,0xFF71}, /* FF70 */
4128   {0xFF72,0xFF72,0xFF72},  {0xFF73,0xFF73,0xFF73}, /* FF72 */
4129   {0xFF74,0xFF74,0xFF74},  {0xFF75,0xFF75,0xFF75}, /* FF74 */
4130   {0xFF76,0xFF76,0xFF76},  {0xFF77,0xFF77,0xFF77}, /* FF76 */
4131   {0xFF78,0xFF78,0xFF78},  {0xFF79,0xFF79,0xFF79}, /* FF78 */
4132   {0xFF7A,0xFF7A,0xFF7A},  {0xFF7B,0xFF7B,0xFF7B}, /* FF7A */
4133   {0xFF7C,0xFF7C,0xFF7C},  {0xFF7D,0xFF7D,0xFF7D}, /* FF7C */
4134   {0xFF7E,0xFF7E,0xFF7E},  {0xFF7F,0xFF7F,0xFF7F}, /* FF7E */
4135   {0xFF80,0xFF80,0xFF80},  {0xFF81,0xFF81,0xFF81}, /* FF80 */
4136   {0xFF82,0xFF82,0xFF82},  {0xFF83,0xFF83,0xFF83}, /* FF82 */
4137   {0xFF84,0xFF84,0xFF84},  {0xFF85,0xFF85,0xFF85}, /* FF84 */
4138   {0xFF86,0xFF86,0xFF86},  {0xFF87,0xFF87,0xFF87}, /* FF86 */
4139   {0xFF88,0xFF88,0xFF88},  {0xFF89,0xFF89,0xFF89}, /* FF88 */
4140   {0xFF8A,0xFF8A,0xFF8A},  {0xFF8B,0xFF8B,0xFF8B}, /* FF8A */
4141   {0xFF8C,0xFF8C,0xFF8C},  {0xFF8D,0xFF8D,0xFF8D}, /* FF8C */
4142   {0xFF8E,0xFF8E,0xFF8E},  {0xFF8F,0xFF8F,0xFF8F}, /* FF8E */
4143   {0xFF90,0xFF90,0xFF90},  {0xFF91,0xFF91,0xFF91}, /* FF90 */
4144   {0xFF92,0xFF92,0xFF92},  {0xFF93,0xFF93,0xFF93}, /* FF92 */
4145   {0xFF94,0xFF94,0xFF94},  {0xFF95,0xFF95,0xFF95}, /* FF94 */
4146   {0xFF96,0xFF96,0xFF96},  {0xFF97,0xFF97,0xFF97}, /* FF96 */
4147   {0xFF98,0xFF98,0xFF98},  {0xFF99,0xFF99,0xFF99}, /* FF98 */
4148   {0xFF9A,0xFF9A,0xFF9A},  {0xFF9B,0xFF9B,0xFF9B}, /* FF9A */
4149   {0xFF9C,0xFF9C,0xFF9C},  {0xFF9D,0xFF9D,0xFF9D}, /* FF9C */
4150   {0xFF9E,0xFF9E,0xFF9E},  {0xFF9F,0xFF9F,0xFF9F}, /* FF9E */
4151   {0xFFA0,0xFFA0,0xFFA0},  {0xFFA1,0xFFA1,0xFFA1}, /* FFA0 */
4152   {0xFFA2,0xFFA2,0xFFA2},  {0xFFA3,0xFFA3,0xFFA3}, /* FFA2 */
4153   {0xFFA4,0xFFA4,0xFFA4},  {0xFFA5,0xFFA5,0xFFA5}, /* FFA4 */
4154   {0xFFA6,0xFFA6,0xFFA6},  {0xFFA7,0xFFA7,0xFFA7}, /* FFA6 */
4155   {0xFFA8,0xFFA8,0xFFA8},  {0xFFA9,0xFFA9,0xFFA9}, /* FFA8 */
4156   {0xFFAA,0xFFAA,0xFFAA},  {0xFFAB,0xFFAB,0xFFAB}, /* FFAA */
4157   {0xFFAC,0xFFAC,0xFFAC},  {0xFFAD,0xFFAD,0xFFAD}, /* FFAC */
4158   {0xFFAE,0xFFAE,0xFFAE},  {0xFFAF,0xFFAF,0xFFAF}, /* FFAE */
4159   {0xFFB0,0xFFB0,0xFFB0},  {0xFFB1,0xFFB1,0xFFB1}, /* FFB0 */
4160   {0xFFB2,0xFFB2,0xFFB2},  {0xFFB3,0xFFB3,0xFFB3}, /* FFB2 */
4161   {0xFFB4,0xFFB4,0xFFB4},  {0xFFB5,0xFFB5,0xFFB5}, /* FFB4 */
4162   {0xFFB6,0xFFB6,0xFFB6},  {0xFFB7,0xFFB7,0xFFB7}, /* FFB6 */
4163   {0xFFB8,0xFFB8,0xFFB8},  {0xFFB9,0xFFB9,0xFFB9}, /* FFB8 */
4164   {0xFFBA,0xFFBA,0xFFBA},  {0xFFBB,0xFFBB,0xFFBB}, /* FFBA */
4165   {0xFFBC,0xFFBC,0xFFBC},  {0xFFBD,0xFFBD,0xFFBD}, /* FFBC */
4166   {0xFFBE,0xFFBE,0xFFBE},  {0xFFBF,0xFFBF,0xFFBF}, /* FFBE */
4167   {0xFFC0,0xFFC0,0xFFC0},  {0xFFC1,0xFFC1,0xFFC1}, /* FFC0 */
4168   {0xFFC2,0xFFC2,0xFFC2},  {0xFFC3,0xFFC3,0xFFC3}, /* FFC2 */
4169   {0xFFC4,0xFFC4,0xFFC4},  {0xFFC5,0xFFC5,0xFFC5}, /* FFC4 */
4170   {0xFFC6,0xFFC6,0xFFC6},  {0xFFC7,0xFFC7,0xFFC7}, /* FFC6 */
4171   {0xFFC8,0xFFC8,0xFFC8},  {0xFFC9,0xFFC9,0xFFC9}, /* FFC8 */
4172   {0xFFCA,0xFFCA,0xFFCA},  {0xFFCB,0xFFCB,0xFFCB}, /* FFCA */
4173   {0xFFCC,0xFFCC,0xFFCC},  {0xFFCD,0xFFCD,0xFFCD}, /* FFCC */
4174   {0xFFCE,0xFFCE,0xFFCE},  {0xFFCF,0xFFCF,0xFFCF}, /* FFCE */
4175   {0xFFD0,0xFFD0,0xFFD0},  {0xFFD1,0xFFD1,0xFFD1}, /* FFD0 */
4176   {0xFFD2,0xFFD2,0xFFD2},  {0xFFD3,0xFFD3,0xFFD3}, /* FFD2 */
4177   {0xFFD4,0xFFD4,0xFFD4},  {0xFFD5,0xFFD5,0xFFD5}, /* FFD4 */
4178   {0xFFD6,0xFFD6,0xFFD6},  {0xFFD7,0xFFD7,0xFFD7}, /* FFD6 */
4179   {0xFFD8,0xFFD8,0xFFD8},  {0xFFD9,0xFFD9,0xFFD9}, /* FFD8 */
4180   {0xFFDA,0xFFDA,0xFFDA},  {0xFFDB,0xFFDB,0xFFDB}, /* FFDA */
4181   {0xFFDC,0xFFDC,0xFFDC},  {0xFFDD,0xFFDD,0xFFDD}, /* FFDC */
4182   {0xFFDE,0xFFDE,0xFFDE},  {0xFFDF,0xFFDF,0xFFDF}, /* FFDE */
4183   {0xFFE0,0xFFE0,0xFFE0},  {0xFFE1,0xFFE1,0xFFE1}, /* FFE0 */
4184   {0xFFE2,0xFFE2,0xFFE2},  {0xFFE3,0xFFE3,0xFFE3}, /* FFE2 */
4185   {0xFFE4,0xFFE4,0xFFE4},  {0xFFE5,0xFFE5,0xFFE5}, /* FFE4 */
4186   {0xFFE6,0xFFE6,0xFFE6},  {0xFFE7,0xFFE7,0xFFE7}, /* FFE6 */
4187   {0xFFE8,0xFFE8,0xFFE8},  {0xFFE9,0xFFE9,0xFFE9}, /* FFE8 */
4188   {0xFFEA,0xFFEA,0xFFEA},  {0xFFEB,0xFFEB,0xFFEB}, /* FFEA */
4189   {0xFFEC,0xFFEC,0xFFEC},  {0xFFED,0xFFED,0xFFED}, /* FFEC */
4190   {0xFFEE,0xFFEE,0xFFEE},  {0xFFEF,0xFFEF,0xFFEF}, /* FFEE */
4191   {0xFFF0,0xFFF0,0xFFF0},  {0xFFF1,0xFFF1,0xFFF1}, /* FFF0 */
4192   {0xFFF2,0xFFF2,0xFFF2},  {0xFFF3,0xFFF3,0xFFF3}, /* FFF2 */
4193   {0xFFF4,0xFFF4,0xFFF4},  {0xFFF5,0xFFF5,0xFFF5}, /* FFF4 */
4194   {0xFFF6,0xFFF6,0xFFF6},  {0xFFF7,0xFFF7,0xFFF7}, /* FFF6 */
4195   {0xFFF8,0xFFF8,0xFFF8},  {0xFFF9,0xFFF9,0xFFF9}, /* FFF8 */
4196   {0xFFFA,0xFFFA,0xFFFA},  {0xFFFB,0xFFFB,0xFFFB}, /* FFFA */
4197   {0xFFFC,0xFFFC,0xFFFC},  {0xFFFD,0xFFFD,0xFFFD}, /* FFFC */
4198   {0xFFFE,0xFFFE,0xFFFE},  {0xFFFF,0xFFFF,0xFFFF} /* FFFE */
4199 };
4200 
4201 static MY_UNICASE_CHARACTER u520p104[]={
4202   {0x10400,0x10428,0x10400},  {0x10401,0x10429,0x10401}, /* 10400 */
4203   {0x10402,0x1042A,0x10402},  {0x10403,0x1042B,0x10403}, /* 10402 */
4204   {0x10404,0x1042C,0x10404},  {0x10405,0x1042D,0x10405}, /* 10404 */
4205   {0x10406,0x1042E,0x10406},  {0x10407,0x1042F,0x10407}, /* 10406 */
4206   {0x10408,0x10430,0x10408},  {0x10409,0x10431,0x10409}, /* 10408 */
4207   {0x1040A,0x10432,0x1040A},  {0x1040B,0x10433,0x1040B}, /* 1040A */
4208   {0x1040C,0x10434,0x1040C},  {0x1040D,0x10435,0x1040D}, /* 1040C */
4209   {0x1040E,0x10436,0x1040E},  {0x1040F,0x10437,0x1040F}, /* 1040E */
4210   {0x10410,0x10438,0x10410},  {0x10411,0x10439,0x10411}, /* 10410 */
4211   {0x10412,0x1043A,0x10412},  {0x10413,0x1043B,0x10413}, /* 10412 */
4212   {0x10414,0x1043C,0x10414},  {0x10415,0x1043D,0x10415}, /* 10414 */
4213   {0x10416,0x1043E,0x10416},  {0x10417,0x1043F,0x10417}, /* 10416 */
4214   {0x10418,0x10440,0x10418},  {0x10419,0x10441,0x10419}, /* 10418 */
4215   {0x1041A,0x10442,0x1041A},  {0x1041B,0x10443,0x1041B}, /* 1041A */
4216   {0x1041C,0x10444,0x1041C},  {0x1041D,0x10445,0x1041D}, /* 1041C */
4217   {0x1041E,0x10446,0x1041E},  {0x1041F,0x10447,0x1041F}, /* 1041E */
4218   {0x10420,0x10448,0x10420},  {0x10421,0x10449,0x10421}, /* 10420 */
4219   {0x10422,0x1044A,0x10422},  {0x10423,0x1044B,0x10423}, /* 10422 */
4220   {0x10424,0x1044C,0x10424},  {0x10425,0x1044D,0x10425}, /* 10424 */
4221   {0x10426,0x1044E,0x10426},  {0x10427,0x1044F,0x10427}, /* 10426 */
4222   {0x10400,0x10428,0x10400},  {0x10401,0x10429,0x10401}, /* 10428 */
4223   {0x10402,0x1042A,0x10402},  {0x10403,0x1042B,0x10403}, /* 1042A */
4224   {0x10404,0x1042C,0x10404},  {0x10405,0x1042D,0x10405}, /* 1042C */
4225   {0x10406,0x1042E,0x10406},  {0x10407,0x1042F,0x10407}, /* 1042E */
4226   {0x10408,0x10430,0x10408},  {0x10409,0x10431,0x10409}, /* 10430 */
4227   {0x1040A,0x10432,0x1040A},  {0x1040B,0x10433,0x1040B}, /* 10432 */
4228   {0x1040C,0x10434,0x1040C},  {0x1040D,0x10435,0x1040D}, /* 10434 */
4229   {0x1040E,0x10436,0x1040E},  {0x1040F,0x10437,0x1040F}, /* 10436 */
4230   {0x10410,0x10438,0x10410},  {0x10411,0x10439,0x10411}, /* 10438 */
4231   {0x10412,0x1043A,0x10412},  {0x10413,0x1043B,0x10413}, /* 1043A */
4232   {0x10414,0x1043C,0x10414},  {0x10415,0x1043D,0x10415}, /* 1043C */
4233   {0x10416,0x1043E,0x10416},  {0x10417,0x1043F,0x10417}, /* 1043E */
4234   {0x10418,0x10440,0x10418},  {0x10419,0x10441,0x10419}, /* 10440 */
4235   {0x1041A,0x10442,0x1041A},  {0x1041B,0x10443,0x1041B}, /* 10442 */
4236   {0x1041C,0x10444,0x1041C},  {0x1041D,0x10445,0x1041D}, /* 10444 */
4237   {0x1041E,0x10446,0x1041E},  {0x1041F,0x10447,0x1041F}, /* 10446 */
4238   {0x10420,0x10448,0x10420},  {0x10421,0x10449,0x10421}, /* 10448 */
4239   {0x10422,0x1044A,0x10422},  {0x10423,0x1044B,0x10423}, /* 1044A */
4240   {0x10424,0x1044C,0x10424},  {0x10425,0x1044D,0x10425}, /* 1044C */
4241   {0x10426,0x1044E,0x10426},  {0x10427,0x1044F,0x10427}, /* 1044E */
4242   {0x10450,0x10450,0x10450},  {0x10451,0x10451,0x10451}, /* 10450 */
4243   {0x10452,0x10452,0x10452},  {0x10453,0x10453,0x10453}, /* 10452 */
4244   {0x10454,0x10454,0x10454},  {0x10455,0x10455,0x10455}, /* 10454 */
4245   {0x10456,0x10456,0x10456},  {0x10457,0x10457,0x10457}, /* 10456 */
4246   {0x10458,0x10458,0x10458},  {0x10459,0x10459,0x10459}, /* 10458 */
4247   {0x1045A,0x1045A,0x1045A},  {0x1045B,0x1045B,0x1045B}, /* 1045A */
4248   {0x1045C,0x1045C,0x1045C},  {0x1045D,0x1045D,0x1045D}, /* 1045C */
4249   {0x1045E,0x1045E,0x1045E},  {0x1045F,0x1045F,0x1045F}, /* 1045E */
4250   {0x10460,0x10460,0x10460},  {0x10461,0x10461,0x10461}, /* 10460 */
4251   {0x10462,0x10462,0x10462},  {0x10463,0x10463,0x10463}, /* 10462 */
4252   {0x10464,0x10464,0x10464},  {0x10465,0x10465,0x10465}, /* 10464 */
4253   {0x10466,0x10466,0x10466},  {0x10467,0x10467,0x10467}, /* 10466 */
4254   {0x10468,0x10468,0x10468},  {0x10469,0x10469,0x10469}, /* 10468 */
4255   {0x1046A,0x1046A,0x1046A},  {0x1046B,0x1046B,0x1046B}, /* 1046A */
4256   {0x1046C,0x1046C,0x1046C},  {0x1046D,0x1046D,0x1046D}, /* 1046C */
4257   {0x1046E,0x1046E,0x1046E},  {0x1046F,0x1046F,0x1046F}, /* 1046E */
4258   {0x10470,0x10470,0x10470},  {0x10471,0x10471,0x10471}, /* 10470 */
4259   {0x10472,0x10472,0x10472},  {0x10473,0x10473,0x10473}, /* 10472 */
4260   {0x10474,0x10474,0x10474},  {0x10475,0x10475,0x10475}, /* 10474 */
4261   {0x10476,0x10476,0x10476},  {0x10477,0x10477,0x10477}, /* 10476 */
4262   {0x10478,0x10478,0x10478},  {0x10479,0x10479,0x10479}, /* 10478 */
4263   {0x1047A,0x1047A,0x1047A},  {0x1047B,0x1047B,0x1047B}, /* 1047A */
4264   {0x1047C,0x1047C,0x1047C},  {0x1047D,0x1047D,0x1047D}, /* 1047C */
4265   {0x1047E,0x1047E,0x1047E},  {0x1047F,0x1047F,0x1047F}, /* 1047E */
4266   {0x10480,0x10480,0x10480},  {0x10481,0x10481,0x10481}, /* 10480 */
4267   {0x10482,0x10482,0x10482},  {0x10483,0x10483,0x10483}, /* 10482 */
4268   {0x10484,0x10484,0x10484},  {0x10485,0x10485,0x10485}, /* 10484 */
4269   {0x10486,0x10486,0x10486},  {0x10487,0x10487,0x10487}, /* 10486 */
4270   {0x10488,0x10488,0x10488},  {0x10489,0x10489,0x10489}, /* 10488 */
4271   {0x1048A,0x1048A,0x1048A},  {0x1048B,0x1048B,0x1048B}, /* 1048A */
4272   {0x1048C,0x1048C,0x1048C},  {0x1048D,0x1048D,0x1048D}, /* 1048C */
4273   {0x1048E,0x1048E,0x1048E},  {0x1048F,0x1048F,0x1048F}, /* 1048E */
4274   {0x10490,0x10490,0x10490},  {0x10491,0x10491,0x10491}, /* 10490 */
4275   {0x10492,0x10492,0x10492},  {0x10493,0x10493,0x10493}, /* 10492 */
4276   {0x10494,0x10494,0x10494},  {0x10495,0x10495,0x10495}, /* 10494 */
4277   {0x10496,0x10496,0x10496},  {0x10497,0x10497,0x10497}, /* 10496 */
4278   {0x10498,0x10498,0x10498},  {0x10499,0x10499,0x10499}, /* 10498 */
4279   {0x1049A,0x1049A,0x1049A},  {0x1049B,0x1049B,0x1049B}, /* 1049A */
4280   {0x1049C,0x1049C,0x1049C},  {0x1049D,0x1049D,0x1049D}, /* 1049C */
4281   {0x1049E,0x1049E,0x1049E},  {0x1049F,0x1049F,0x1049F}, /* 1049E */
4282   {0x104A0,0x104A0,0x104A0},  {0x104A1,0x104A1,0x104A1}, /* 104A0 */
4283   {0x104A2,0x104A2,0x104A2},  {0x104A3,0x104A3,0x104A3}, /* 104A2 */
4284   {0x104A4,0x104A4,0x104A4},  {0x104A5,0x104A5,0x104A5}, /* 104A4 */
4285   {0x104A6,0x104A6,0x104A6},  {0x104A7,0x104A7,0x104A7}, /* 104A6 */
4286   {0x104A8,0x104A8,0x104A8},  {0x104A9,0x104A9,0x104A9}, /* 104A8 */
4287   {0x104AA,0x104AA,0x104AA},  {0x104AB,0x104AB,0x104AB}, /* 104AA */
4288   {0x104AC,0x104AC,0x104AC},  {0x104AD,0x104AD,0x104AD}, /* 104AC */
4289   {0x104AE,0x104AE,0x104AE},  {0x104AF,0x104AF,0x104AF}, /* 104AE */
4290   {0x104B0,0x104B0,0x104B0},  {0x104B1,0x104B1,0x104B1}, /* 104B0 */
4291   {0x104B2,0x104B2,0x104B2},  {0x104B3,0x104B3,0x104B3}, /* 104B2 */
4292   {0x104B4,0x104B4,0x104B4},  {0x104B5,0x104B5,0x104B5}, /* 104B4 */
4293   {0x104B6,0x104B6,0x104B6},  {0x104B7,0x104B7,0x104B7}, /* 104B6 */
4294   {0x104B8,0x104B8,0x104B8},  {0x104B9,0x104B9,0x104B9}, /* 104B8 */
4295   {0x104BA,0x104BA,0x104BA},  {0x104BB,0x104BB,0x104BB}, /* 104BA */
4296   {0x104BC,0x104BC,0x104BC},  {0x104BD,0x104BD,0x104BD}, /* 104BC */
4297   {0x104BE,0x104BE,0x104BE},  {0x104BF,0x104BF,0x104BF}, /* 104BE */
4298   {0x104C0,0x104C0,0x104C0},  {0x104C1,0x104C1,0x104C1}, /* 104C0 */
4299   {0x104C2,0x104C2,0x104C2},  {0x104C3,0x104C3,0x104C3}, /* 104C2 */
4300   {0x104C4,0x104C4,0x104C4},  {0x104C5,0x104C5,0x104C5}, /* 104C4 */
4301   {0x104C6,0x104C6,0x104C6},  {0x104C7,0x104C7,0x104C7}, /* 104C6 */
4302   {0x104C8,0x104C8,0x104C8},  {0x104C9,0x104C9,0x104C9}, /* 104C8 */
4303   {0x104CA,0x104CA,0x104CA},  {0x104CB,0x104CB,0x104CB}, /* 104CA */
4304   {0x104CC,0x104CC,0x104CC},  {0x104CD,0x104CD,0x104CD}, /* 104CC */
4305   {0x104CE,0x104CE,0x104CE},  {0x104CF,0x104CF,0x104CF}, /* 104CE */
4306   {0x104D0,0x104D0,0x104D0},  {0x104D1,0x104D1,0x104D1}, /* 104D0 */
4307   {0x104D2,0x104D2,0x104D2},  {0x104D3,0x104D3,0x104D3}, /* 104D2 */
4308   {0x104D4,0x104D4,0x104D4},  {0x104D5,0x104D5,0x104D5}, /* 104D4 */
4309   {0x104D6,0x104D6,0x104D6},  {0x104D7,0x104D7,0x104D7}, /* 104D6 */
4310   {0x104D8,0x104D8,0x104D8},  {0x104D9,0x104D9,0x104D9}, /* 104D8 */
4311   {0x104DA,0x104DA,0x104DA},  {0x104DB,0x104DB,0x104DB}, /* 104DA */
4312   {0x104DC,0x104DC,0x104DC},  {0x104DD,0x104DD,0x104DD}, /* 104DC */
4313   {0x104DE,0x104DE,0x104DE},  {0x104DF,0x104DF,0x104DF}, /* 104DE */
4314   {0x104E0,0x104E0,0x104E0},  {0x104E1,0x104E1,0x104E1}, /* 104E0 */
4315   {0x104E2,0x104E2,0x104E2},  {0x104E3,0x104E3,0x104E3}, /* 104E2 */
4316   {0x104E4,0x104E4,0x104E4},  {0x104E5,0x104E5,0x104E5}, /* 104E4 */
4317   {0x104E6,0x104E6,0x104E6},  {0x104E7,0x104E7,0x104E7}, /* 104E6 */
4318   {0x104E8,0x104E8,0x104E8},  {0x104E9,0x104E9,0x104E9}, /* 104E8 */
4319   {0x104EA,0x104EA,0x104EA},  {0x104EB,0x104EB,0x104EB}, /* 104EA */
4320   {0x104EC,0x104EC,0x104EC},  {0x104ED,0x104ED,0x104ED}, /* 104EC */
4321   {0x104EE,0x104EE,0x104EE},  {0x104EF,0x104EF,0x104EF}, /* 104EE */
4322   {0x104F0,0x104F0,0x104F0},  {0x104F1,0x104F1,0x104F1}, /* 104F0 */
4323   {0x104F2,0x104F2,0x104F2},  {0x104F3,0x104F3,0x104F3}, /* 104F2 */
4324   {0x104F4,0x104F4,0x104F4},  {0x104F5,0x104F5,0x104F5}, /* 104F4 */
4325   {0x104F6,0x104F6,0x104F6},  {0x104F7,0x104F7,0x104F7}, /* 104F6 */
4326   {0x104F8,0x104F8,0x104F8},  {0x104F9,0x104F9,0x104F9}, /* 104F8 */
4327   {0x104FA,0x104FA,0x104FA},  {0x104FB,0x104FB,0x104FB}, /* 104FA */
4328   {0x104FC,0x104FC,0x104FC},  {0x104FD,0x104FD,0x104FD}, /* 104FC */
4329   {0x104FE,0x104FE,0x104FE},  {0x104FF,0x104FF,0x104FF} /* 104FE */
4330 };
4331 
4332 
4333 MY_UNICASE_CHARACTER *my_unicase_pages_unicode520[4352]=
4334 {
4335  u520p00, u520p01, u520p02, u520p03, u520p04, u520p05,    NULL,    NULL,
4336     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4337  u520p10,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4338     NULL,    NULL,    NULL,    NULL,    NULL, u520p1D, u520p1E, u520p1F,
4339     NULL, u520p21,    NULL,    NULL, u520p24,    NULL,    NULL,    NULL,
4340     NULL,    NULL,    NULL,    NULL, u520p2C, u520p2D,    NULL,    NULL,
4341     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4342     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4343     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4344     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4345     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4346     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4347     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4348     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4349     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4350     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4351     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4352     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4353     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4354     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4355     NULL,    NULL,    NULL,    NULL,    NULL,    NULL, u520pA6, u520pA7,
4356     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4357     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4358     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4359     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4360     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4361     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4362     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4363     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4364     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4365     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
4366     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL, u520pFF,
4367     NULL,    NULL,    NULL,    NULL,u520p104,    NULL,    NULL,    NULL,
4368 };
4369 
4370 
4371 MY_UNICASE_INFO my_unicase_unicode520=
4372 {
4373   0x104FF,
4374   my_unicase_pages_unicode520
4375 };
4376 
4377 
4378 static inline void
my_tosort_unicode(MY_UNICASE_INFO * uni_plane,my_wc_t * wc,uint flags)4379 my_tosort_unicode(MY_UNICASE_INFO *uni_plane, my_wc_t *wc, uint flags)
4380 {
4381   if (*wc <= uni_plane->maxchar)
4382   {
4383     MY_UNICASE_CHARACTER *page;
4384     if ((page= uni_plane->page[*wc >> 8]))
4385       *wc= (flags & MY_CS_LOWER_SORT) ?
4386            page[*wc & 0xFF].tolower :
4387            page[*wc & 0xFF].sort;
4388   }
4389   else
4390   {
4391     *wc= MY_CS_REPLACEMENT_CHARACTER;
4392   }
4393 }
4394 
4395 
4396 /*
4397 ** Compare string against string with wildcard
4398 ** This function is used in UTF8 and UCS2
4399 **
4400 **	0 if matched
4401 **	-1 if not matched with wildcard
4402 **	 1 if matched with wildcard
4403 */
4404 
4405 static
my_wildcmp_unicode_impl(CHARSET_INFO * cs,const char * str,const char * str_end,const char * wildstr,const char * wildend,int escape,int w_one,int w_many,MY_UNICASE_INFO * weights,int recurse_level)4406 int my_wildcmp_unicode_impl(CHARSET_INFO *cs,
4407                             const char *str,const char *str_end,
4408                             const char *wildstr,const char *wildend,
4409                             int escape, int w_one, int w_many,
4410                             MY_UNICASE_INFO *weights, int recurse_level)
4411 {
4412   int result= -1;                             /* Not found, using wildcards */
4413   my_wc_t s_wc, w_wc;
4414   int scan;
4415   my_charset_conv_mb_wc mb_wc= cs->cset->mb_wc;
4416 
4417   if (my_string_stack_guard && my_string_stack_guard(recurse_level))
4418     return 1;
4419   while (wildstr != wildend)
4420   {
4421     while (1)
4422     {
4423       my_bool escaped= 0;
4424       if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr,
4425                        (const uchar*)wildend)) <= 0)
4426         return 1;
4427 
4428       if (w_wc == (my_wc_t) w_many)
4429       {
4430         result= 1;                                /* Found an anchor char */
4431         break;
4432       }
4433 
4434       wildstr+= scan;
4435       if (w_wc ==  (my_wc_t) escape && wildstr < wildend)
4436       {
4437         if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr,
4438                          (const uchar*)wildend)) <= 0)
4439           return 1;
4440         wildstr+= scan;
4441         escaped= 1;
4442       }
4443 
4444       if ((scan= mb_wc(cs, &s_wc, (const uchar*)str,
4445                        (const uchar*)str_end)) <= 0)
4446         return 1;
4447       str+= scan;
4448 
4449       if (!escaped && w_wc == (my_wc_t) w_one)
4450       {
4451         result= 1;                                /* Found an anchor char */
4452       }
4453       else
4454       {
4455         if (weights)
4456         {
4457           my_tosort_unicode(weights, &s_wc, cs->state);
4458           my_tosort_unicode(weights, &w_wc, cs->state);
4459         }
4460         if (s_wc != w_wc)
4461           return 1;                               /* No match */
4462       }
4463       if (wildstr == wildend)
4464         return (str != str_end);                  /* Match if both are at end */
4465     }
4466 
4467     if (w_wc == (my_wc_t) w_many)
4468     {                                             /* Found w_many */
4469       /* Remove any '%' and '_' from the wild search string */
4470       for ( ; wildstr != wildend ; )
4471       {
4472         if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr,
4473                          (const uchar*)wildend)) <= 0)
4474           return 1;
4475 
4476         if (w_wc == (my_wc_t) w_many)
4477         {
4478           wildstr+= scan;
4479           continue;
4480         }
4481 
4482         if (w_wc == (my_wc_t) w_one)
4483         {
4484           wildstr+= scan;
4485           if ((scan= mb_wc(cs, &s_wc, (const uchar*)str,
4486                            (const uchar*)str_end)) <= 0)
4487             return 1;
4488           str+= scan;
4489           continue;
4490         }
4491         break;                                        /* Not a wild character */
4492       }
4493 
4494       if (wildstr == wildend)
4495         return 0;                                /* Ok if w_many is last */
4496 
4497       if (str == str_end)
4498         return -1;
4499 
4500       if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr,
4501                        (const uchar*)wildend)) <= 0)
4502         return 1;
4503       wildstr+= scan;
4504 
4505       if (w_wc ==  (my_wc_t) escape)
4506       {
4507         if (wildstr < wildend)
4508         {
4509           if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr,
4510                            (const uchar*)wildend)) <= 0)
4511             return 1;
4512           wildstr+= scan;
4513         }
4514       }
4515 
4516       while (1)
4517       {
4518         /* Skip until the first character from wildstr is found */
4519         while (str != str_end)
4520         {
4521           if ((scan= mb_wc(cs, &s_wc, (const uchar*)str,
4522                            (const uchar*)str_end)) <= 0)
4523             return 1;
4524           if (weights)
4525           {
4526             my_tosort_unicode(weights, &s_wc, cs->state);
4527             my_tosort_unicode(weights, &w_wc, cs->state);
4528           }
4529 
4530           if (s_wc == w_wc)
4531             break;
4532           str+= scan;
4533         }
4534         if (str == str_end)
4535           return -1;
4536 
4537         str+= scan;
4538         result= my_wildcmp_unicode_impl(cs, str, str_end, wildstr, wildend,
4539                                         escape, w_one, w_many,
4540                                         weights, recurse_level + 1);
4541         if (result <= 0)
4542           return result;
4543       }
4544     }
4545   }
4546   return (str != str_end ? 1 : 0);
4547 }
4548 
4549 
4550 int
my_wildcmp_unicode(CHARSET_INFO * cs,const char * str,const char * str_end,const char * wildstr,const char * wildend,int escape,int w_one,int w_many,MY_UNICASE_INFO * weights)4551 my_wildcmp_unicode(CHARSET_INFO *cs,
4552                    const char *str,const char *str_end,
4553                    const char *wildstr,const char *wildend,
4554                    int escape, int w_one, int w_many,
4555                    MY_UNICASE_INFO *weights)
4556 {
4557   return my_wildcmp_unicode_impl(cs, str, str_end,
4558                                  wildstr, wildend,
4559                                  escape, w_one, w_many, weights, 1);
4560 }
4561 
4562 
4563 /**
4564   Pad buffer with weights for space characters.
4565 
4566   @details
4567   This functions fills the buffer pointed by "str"
4568   with weights of space character. Not more than
4569   "nweights" weights are put. If at some iteration
4570   step only a half of weight can fit
4571   (which is possible if buffer length is an odd number)
4572   then a half of this weight is put - this gives
4573   a little bit better ORDER BY result for long strings.
4574 
4575   @str      Buffer
4576   @strend   End of buffer
4577   @nweights Number of weights
4578 
4579   @return Result length
4580 */
4581 
4582 size_t
my_strxfrm_pad_nweights_unicode(uchar * str,uchar * strend,size_t nweights)4583 my_strxfrm_pad_nweights_unicode(uchar *str, uchar *strend, size_t nweights)
4584 {
4585   uchar *str0;
4586   DBUG_ASSERT(str && str <= strend);
4587   for (str0= str; str < strend && nweights; nweights--)
4588   {
4589     *str++= 0x00;
4590     if (str < strend)
4591       *str++= 0x20;
4592   }
4593   return str - str0;
4594 }
4595 
4596 
4597 /**
4598   Pad buffer with weights for space characters.
4599 
4600   @details
4601   This functions fills the buffer pointed by "str"
4602   with weights of space character. Putting half of weight
4603   (when buffer length is an odd number) is OK.
4604 
4605   @str      Buffer
4606   @strend   End of buffer
4607 
4608   @return Result length
4609 */
4610 
4611 size_t
my_strxfrm_pad_unicode(uchar * str,uchar * strend)4612 my_strxfrm_pad_unicode(uchar *str, uchar *strend)
4613 {
4614   uchar *str0= str;
4615   DBUG_ASSERT(str && str <= strend);
4616   for ( ; str < strend ; )
4617   {
4618     *str++= 0x00;
4619     if (str < strend)
4620       *str++= 0x20;
4621   }
4622   return str - str0;
4623 }
4624 
4625 
4626 /*
4627   For BMP-only collations that use 2 bytes per weight.
4628 */
4629 size_t
my_strnxfrmlen_unicode(CHARSET_INFO * cs,size_t len)4630 my_strnxfrmlen_unicode(CHARSET_INFO *cs, size_t len)
4631 {
4632 
4633   return ((len + cs->mbmaxlen - 1) / cs->mbmaxlen) * 2;
4634 }
4635 
4636 size_t
my_strnxfrm_unicode_full_bin_internal(CHARSET_INFO * cs,uchar * dst,uchar * de,uint * nweights,const uchar * src,const uchar * se)4637 my_strnxfrm_unicode_full_bin_internal(CHARSET_INFO *cs,
4638                                       uchar *dst, uchar *de, uint *nweights,
4639                                       const uchar *src, const uchar *se)
4640 {
4641   my_wc_t UNINIT_VAR(wc);
4642   uchar *dst0= dst;
4643 
4644   DBUG_ASSERT(src || !se);
4645   DBUG_ASSERT(cs->state & MY_CS_BINSORT);
4646 
4647   for (; dst < de && *nweights; (*nweights)--)
4648   {
4649     int res;
4650     if ((res= cs->cset->mb_wc(cs, &wc, src, se)) <= 0)
4651       break;
4652     src+= res;
4653     *dst++= (uchar) (wc >> 16);
4654     if (dst < de)
4655     {
4656       *dst++= (uchar) ((wc >> 8) & 0xFF);
4657       if (dst < de)
4658         *dst++= (uchar) (wc & 0xFF);
4659     }
4660   }
4661   return dst - dst0;
4662 }
4663 
4664 
4665 /*
4666   Store sorting weights using 3 bytes per character.
4667   This function is shared between utf8mb4_bin, utf16_bin, utf32_bin.
4668 */
4669 size_t
my_strnxfrm_unicode_full_bin(CHARSET_INFO * cs,uchar * dst,size_t dstlen,uint nweights,const uchar * src,size_t srclen,uint flags)4670 my_strnxfrm_unicode_full_bin(CHARSET_INFO *cs,
4671                              uchar *dst, size_t dstlen, uint nweights,
4672                              const uchar *src, size_t srclen, uint flags)
4673 {
4674   uchar *dst0= dst;
4675   uchar *de= dst + dstlen;
4676 
4677   dst+= my_strnxfrm_unicode_full_bin_internal(cs, dst, de, &nweights,
4678                                                   src, src + srclen);
4679   DBUG_ASSERT(dst <= de); /* Safety */
4680 
4681   if (flags & MY_STRXFRM_PAD_WITH_SPACE)
4682   {
4683     for ( ; dst < de && nweights; nweights--)
4684     {
4685       *dst++= 0x00;
4686       if (dst < de)
4687       {
4688         *dst++= 0x00;
4689         if (dst < de)
4690           *dst++= 0x20;
4691       }
4692     }
4693   }
4694 
4695   my_strxfrm_desc_and_reverse(dst0, dst, flags, 0);
4696 
4697   if (flags & MY_STRXFRM_PAD_TO_MAXLEN)
4698   {
4699     while (dst < de)
4700     {
4701       *dst++= 0x00;
4702       if (dst < de)
4703       {
4704         *dst++= 0x00;
4705         if (dst < de)
4706           *dst++= 0x20;
4707       }
4708     }
4709   }
4710   return dst - dst0;
4711 }
4712 
4713 
4714 size_t
my_strnxfrm_unicode_full_nopad_bin(CHARSET_INFO * cs,uchar * dst,size_t dstlen,uint nweights,const uchar * src,size_t srclen,uint flags)4715 my_strnxfrm_unicode_full_nopad_bin(CHARSET_INFO *cs,
4716                                    uchar *dst, size_t dstlen, uint nweights,
4717                                    const uchar *src, size_t srclen, uint flags)
4718 {
4719   uchar *dst0= dst;
4720   uchar *de= dst + dstlen;
4721 
4722   dst+= my_strnxfrm_unicode_full_bin_internal(cs, dst, de, &nweights,
4723                                                   src, src + srclen);
4724   DBUG_ASSERT(dst <= de); /* Safety */
4725 
4726   if (dst < de && nweights && (flags & MY_STRXFRM_PAD_WITH_SPACE))
4727   {
4728     size_t len= de - dst;
4729     set_if_smaller(len, nweights * 3);
4730     memset(dst, 0x00, len);
4731     dst+= len;
4732   }
4733 
4734   my_strxfrm_desc_and_reverse(dst0, dst, flags, 0);
4735 
4736   if ((flags & MY_STRXFRM_PAD_TO_MAXLEN) && dst < de)
4737   {
4738     memset(dst, 0x00, de - dst);
4739     dst= de;
4740   }
4741   return dst - dst0;
4742 }
4743 
4744 
4745 size_t
my_strnxfrmlen_unicode_full_bin(CHARSET_INFO * cs,size_t len)4746 my_strnxfrmlen_unicode_full_bin(CHARSET_INFO *cs, size_t len)
4747 {
4748   return ((len + 3) / cs->mbmaxlen) * 3;
4749 }
4750 #endif /* HAVE_UNIDATA */
4751 
4752 
4753 #ifdef HAVE_CHARSET_utf8
4754 
4755 /*
4756   We consider bytes with code more than 127 as a letter.
4757   This guarantees that word boundaries work fine with regular
4758   expressions. Note, there is no need to mark byte 255  as a
4759   letter, it is illegal byte in UTF8.
4760 */
4761 static const uchar ctype_utf8[] = {
4762     0,
4763    32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32,
4764    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
4765    72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
4766   132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16,
4767    16,129,129,129,129,129,129,  1,  1,  1,  1,  1,  1,  1,  1,  1,
4768     1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 16, 16, 16, 16, 16,
4769    16,130,130,130,130,130,130,  2,  2,  2,  2,  2,  2,  2,  2,  2,
4770     2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 16, 16, 16, 16, 32,
4771     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
4772     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
4773     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
4774     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
4775     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
4776     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
4777     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
4778     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  0
4779 };
4780 
4781 /* The below are taken from usa7 implementation */
4782 
4783 static const uchar to_lower_utf8[] = {
4784     0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
4785    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
4786    32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
4787    48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
4788    64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,
4789   112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95,
4790    96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,
4791   112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
4792   128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
4793   144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
4794   160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
4795   176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
4796   192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
4797   208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
4798   224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
4799   240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
4800 };
4801 
4802 static const uchar to_upper_utf8[] = {
4803     0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
4804    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
4805    32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
4806    48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
4807    64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
4808    80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
4809    96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
4810    80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127,
4811   128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
4812   144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
4813   160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
4814   176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
4815   192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
4816   208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
4817   224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
4818   240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
4819 };
4820 
my_utf8_uni(CHARSET_INFO * cs,my_wc_t * pwc,const uchar * s,const uchar * e)4821 static int my_utf8_uni(CHARSET_INFO *cs __attribute__((unused)),
4822                        my_wc_t * pwc, const uchar *s, const uchar *e)
4823 {
4824   return my_mb_wc_utf8mb3_quick(pwc, s, e);
4825 }
4826 
4827 
4828 /*
4829   The same as above, but without range check
4830   for example, for a null-terminated string
4831 */
my_utf8_uni_no_range(CHARSET_INFO * cs,my_wc_t * pwc,const uchar * s)4832 static int my_utf8_uni_no_range(CHARSET_INFO *cs __attribute__((unused)),
4833                                 my_wc_t * pwc, const uchar *s)
4834 {
4835   uchar c;
4836 
4837   c= s[0];
4838   if (c < 0x80)
4839   {
4840     *pwc = c;
4841     return 1;
4842   }
4843 
4844   if (c < 0xc2)
4845     return MY_CS_ILSEQ;
4846 
4847   if (c < 0xe0)
4848   {
4849     if (!((s[1] ^ 0x80) < 0x40))
4850       return MY_CS_ILSEQ;
4851 
4852     *pwc= UTF8MB2_CODE(c, s[1]);
4853     return 2;
4854   }
4855 
4856   if (c < 0xf0)
4857   {
4858     if (!IS_UTF8MB3_STEP2(c, s[1], s[2]))
4859       return MY_CS_ILSEQ;
4860 
4861     *pwc= UTF8MB3_CODE(c, s[1], s[2]);
4862     return 3;
4863   }
4864   return MY_CS_ILSEQ;
4865 }
4866 
4867 
my_uni_utf8(CHARSET_INFO * cs,my_wc_t wc,uchar * r,uchar * e)4868 static int my_uni_utf8 (CHARSET_INFO *cs __attribute__((unused)),
4869                         my_wc_t wc, uchar *r, uchar *e)
4870 {
4871   if (wc < 0x80)
4872   {
4873     if (r >= e)
4874       return MY_CS_TOOSMALL;
4875     *r= (uchar) wc;
4876     return 1;
4877   }
4878   if (wc < 0x800)
4879   {
4880     if (r + 2 > e)
4881       return MY_CS_TOOSMALLN(2);
4882     /* U+0080..U+07FF:  00000xxx.xxyyyyyy -> 110xxxxx 10yyyyyy */
4883     *r++= (uchar) (0xC0 | (wc >> 6));
4884     *r=   (uchar) (0x80 | (wc & 0x3F));
4885     return 2;
4886   }
4887   if (wc < 0x10000)
4888   {
4889     if (r + 3 > e)
4890       return MY_CS_TOOSMALLN(3);
4891     /* U+0800..U+FFFF: xxxxyyyy.yyzzzzzz  -> 1110xxxx 10yyyyyy 10zzzzzz */
4892     *r++= (uchar) (0xE0 | (wc >> 12));
4893     *r++= (uchar) (0x80 | ((wc >> 6) & 0x3f));
4894     *r=   (uchar) (0x80 | (wc & 0x3f));
4895     return 3;
4896   }
4897   return MY_CS_ILUNI;
4898 }
4899 
4900 
4901 /*
4902   The same as above, but without range check.
4903 */
my_uni_utf8_no_range(CHARSET_INFO * cs,my_wc_t wc,uchar * r)4904 static int my_uni_utf8_no_range(CHARSET_INFO *cs __attribute__((unused)),
4905                                 my_wc_t wc, uchar *r)
4906 {
4907   int count;
4908 
4909   if (wc < 0x80)
4910     count= 1;
4911   else if (wc < 0x800)
4912     count= 2;
4913   else if (wc < 0x10000)
4914     count= 3;
4915   else
4916     return MY_CS_ILUNI;
4917 
4918   switch (count)
4919   {
4920     case 3: r[2]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0x800;
4921       /* fall through */
4922     case 2: r[1]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0xc0;
4923       /* fall through */
4924     case 1: r[0]= (uchar) wc;
4925   }
4926   return count;
4927 }
4928 
4929 
4930 static inline void
my_tolower_utf8mb3(MY_UNICASE_INFO * uni_plane,my_wc_t * wc)4931 my_tolower_utf8mb3(MY_UNICASE_INFO *uni_plane, my_wc_t *wc)
4932 {
4933   MY_UNICASE_CHARACTER *page;
4934   if ((page= uni_plane->page[(*wc >> 8) & 0xFF]))
4935     *wc= page[*wc & 0xFF].tolower;
4936 }
4937 
4938 
4939 static inline void
my_toupper_utf8mb3(MY_UNICASE_INFO * uni_plane,my_wc_t * wc)4940 my_toupper_utf8mb3(MY_UNICASE_INFO *uni_plane, my_wc_t *wc)
4941 {
4942   MY_UNICASE_CHARACTER *page;
4943   if ((page= uni_plane->page[(*wc >> 8) & 0xFF]))
4944     *wc= page[*wc & 0xFF].toupper;
4945 }
4946 
4947 
my_caseup_utf8(CHARSET_INFO * cs,const char * src,size_t srclen,char * dst,size_t dstlen)4948 static size_t my_caseup_utf8(CHARSET_INFO *cs, const char *src, size_t srclen,
4949                              char *dst, size_t dstlen)
4950 {
4951   my_wc_t wc;
4952   int srcres, dstres;
4953   const char *srcend= src + srclen;
4954   char *dstend= dst + dstlen, *dst0= dst;
4955   MY_UNICASE_INFO *uni_plane= cs->caseinfo;
4956   DBUG_ASSERT(src != dst || cs->caseup_multiply == 1);
4957 
4958   while ((src < srcend) &&
4959          (srcres= my_utf8_uni(cs, &wc, (uchar *) src, (uchar*) srcend)) > 0)
4960   {
4961     my_toupper_utf8mb3(uni_plane, &wc);
4962     if ((dstres= my_uni_utf8(cs, wc, (uchar*) dst, (uchar*) dstend)) <= 0)
4963       break;
4964     src+= srcres;
4965     dst+= dstres;
4966   }
4967   return (size_t) (dst - dst0);
4968 }
4969 
4970 
my_hash_sort_utf8mb3_nopad(CHARSET_INFO * cs,const uchar * s,size_t slen,ulong * nr1,ulong * nr2)4971 static void my_hash_sort_utf8mb3_nopad(CHARSET_INFO *cs, const uchar *s, size_t slen,
4972                                        ulong *nr1, ulong *nr2)
4973 {
4974   my_wc_t wc;
4975   int res;
4976   const uchar *e= s+slen;
4977   MY_UNICASE_INFO *uni_plane= cs->caseinfo;
4978   register ulong m1= *nr1, m2= *nr2;
4979 
4980   while ((s < e) && (res=my_utf8_uni(cs,&wc, (uchar *)s, (uchar*)e))>0 )
4981   {
4982     my_tosort_unicode(uni_plane, &wc, cs->state);
4983     MY_HASH_ADD_16(m1, m2, wc);
4984     s+= res;
4985   }
4986   *nr1= m1;
4987   *nr2= m2;
4988 }
4989 
4990 
my_hash_sort_utf8mb3(CHARSET_INFO * cs,const uchar * s,size_t slen,ulong * nr1,ulong * nr2)4991 static void my_hash_sort_utf8mb3(CHARSET_INFO *cs, const uchar *s, size_t slen,
4992                                  ulong *nr1, ulong *nr2)
4993 {
4994   /*
4995     Remove end space. We have to do this to be able to compare
4996     'A ' and 'A' as identical
4997   */
4998   const uchar *e= skip_trailing_space(s, slen);
4999   my_hash_sort_utf8mb3_nopad(cs, s, e - s, nr1, nr2);
5000 }
5001 
5002 
my_caseup_str_utf8(CHARSET_INFO * cs,char * src)5003 static size_t my_caseup_str_utf8(CHARSET_INFO *cs, char *src)
5004 {
5005   my_wc_t wc;
5006   int srcres, dstres;
5007   char *dst= src, *dst0= src;
5008   MY_UNICASE_INFO *uni_plane= cs->caseinfo;
5009   DBUG_ASSERT(cs->caseup_multiply == 1);
5010 
5011   while (*src &&
5012          (srcres= my_utf8_uni_no_range(cs, &wc, (uchar *) src)) > 0)
5013   {
5014     my_toupper_utf8mb3(uni_plane, &wc);
5015     if ((dstres= my_uni_utf8_no_range(cs, wc, (uchar*) dst)) <= 0)
5016       break;
5017     src+= srcres;
5018     dst+= dstres;
5019   }
5020   *dst= '\0';
5021   return (size_t) (dst - dst0);
5022 }
5023 
5024 
my_casedn_utf8(CHARSET_INFO * cs,const char * src,size_t srclen,char * dst,size_t dstlen)5025 static size_t my_casedn_utf8(CHARSET_INFO *cs, const char *src, size_t srclen,
5026                              char *dst, size_t dstlen)
5027 {
5028   my_wc_t wc;
5029   int srcres, dstres;
5030   const char *srcend= src + srclen;
5031   char *dstend= dst + dstlen, *dst0= dst;
5032   MY_UNICASE_INFO *uni_plane= cs->caseinfo;
5033   DBUG_ASSERT(src != dst || cs->casedn_multiply == 1);
5034 
5035   while ((src < srcend) &&
5036          (srcres= my_utf8_uni(cs, &wc, (uchar*) src, (uchar*)srcend)) > 0)
5037   {
5038     my_tolower_utf8mb3(uni_plane, &wc);
5039     if ((dstres= my_uni_utf8(cs, wc, (uchar*) dst, (uchar*) dstend)) <= 0)
5040       break;
5041     src+= srcres;
5042     dst+= dstres;
5043   }
5044   return (size_t) (dst - dst0);
5045 }
5046 
5047 
my_casedn_str_utf8(CHARSET_INFO * cs,char * src)5048 static size_t my_casedn_str_utf8(CHARSET_INFO *cs, char *src)
5049 {
5050   my_wc_t wc;
5051   int srcres, dstres;
5052   char *dst= src, *dst0= src;
5053   MY_UNICASE_INFO *uni_plane= cs->caseinfo;
5054   DBUG_ASSERT(cs->casedn_multiply == 1);
5055 
5056   while (*src &&
5057          (srcres= my_utf8_uni_no_range(cs, &wc, (uchar *) src)) > 0)
5058   {
5059     my_tolower_utf8mb3(uni_plane, &wc);
5060     if ((dstres= my_uni_utf8_no_range(cs, wc, (uchar*) dst)) <= 0)
5061       break;
5062     src+= srcres;
5063     dst+= dstres;
5064   }
5065 
5066   /*
5067    In rare cases lower string can be shorter than
5068    the original string, for example:
5069 
5070    "U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE"
5071    (which is 0xC4B0 in utf8, i.e. two bytes)
5072 
5073    is converted into
5074 
5075    "U+0069 LATIN SMALL LETTER I"
5076    (which is 0x69 in utf8, i.e. one byte)
5077 
5078    So, we need to put '\0' terminator after converting.
5079   */
5080 
5081   *dst= '\0';
5082   return (size_t) (dst - dst0);
5083 }
5084 
5085 
5086 /*
5087   Compare 0-terminated UTF8 strings.
5088 
5089   SYNOPSIS
5090     my_strcasecmp_utf8()
5091     cs                  character set handler
5092     s                   First 0-terminated string to compare
5093     t                   Second 0-terminated string to compare
5094 
5095   IMPLEMENTATION
5096 
5097   RETURN
5098     - negative number if s < t
5099     - positive number if s > t
5100     - 0 is the strings are equal
5101 */
5102 
5103 static
my_strcasecmp_utf8(CHARSET_INFO * cs,const char * s,const char * t)5104 int my_strcasecmp_utf8(CHARSET_INFO *cs, const char *s, const char *t)
5105 {
5106   MY_UNICASE_INFO *uni_plane= cs->caseinfo;
5107   while (s[0] && t[0])
5108   {
5109     my_wc_t s_wc,t_wc;
5110 
5111     if ((uchar) s[0] < 128)
5112     {
5113       /*
5114         s[0] is between 0 and 127.
5115         It represents a single byte character.
5116         Convert it into weight according to collation.
5117       */
5118       s_wc= my_unicase_default_page00[(uchar) s[0]].tolower;
5119       s++;
5120     }
5121     else
5122     {
5123       int res;
5124 
5125       /*
5126         Scan a multibyte character.
5127 
5128         In the future it is worth to write a special version of my_utf8_uni()
5129         for 0-terminated strings which will not take in account length. Now
5130         we call the regular version of my_utf8_uni() with s+3 in the
5131         last argument. s+3 is enough to scan any multibyte sequence.
5132 
5133         Calling the regular version of my_utf8_uni is safe for 0-terminated
5134         strings: we will never lose the end of the string:
5135         If we have 0 character in the middle of a multibyte sequence,
5136         then my_utf8_uni will always return a negative number, so the
5137         loop with finish.
5138       */
5139 
5140       res= my_utf8_uni(cs,&s_wc, (const uchar*)s, (const uchar*) s + 3);
5141 
5142       /*
5143          In the case of wrong multibyte sequence we will
5144          call strcmp() for byte-to-byte comparison.
5145       */
5146       if (res <= 0)
5147         return strcmp(s, t);
5148       s+= res;
5149 
5150       /* Convert Unicode code into weight according to collation */
5151       my_tolower_utf8mb3(uni_plane, &s_wc);
5152     }
5153 
5154 
5155     /* Do the same for the second string */
5156 
5157     if ((uchar) t[0] < 128)
5158     {
5159       /* Convert single byte character into weight */
5160       t_wc= my_unicase_default_page00[(uchar) t[0]].tolower;
5161       t++;
5162     }
5163     else
5164     {
5165       int res=my_utf8_uni(cs,&t_wc, (const uchar*)t, (const uchar*) t + 3);
5166       if (res <= 0)
5167         return strcmp(s, t);
5168       t+= res;
5169 
5170       /* Convert code into weight */
5171       my_tolower_utf8mb3(uni_plane, &t_wc);
5172     }
5173 
5174     /* Now we have two weights, let's compare them */
5175     if ( s_wc != t_wc )
5176       return  ((int) s_wc) - ((int) t_wc);
5177   }
5178   return ((int)(uchar)s[0]) - ((int) (uchar) t[0]);
5179 }
5180 
5181 
5182 static
my_wildcmp_utf8(CHARSET_INFO * cs,const char * str,const char * str_end,const char * wildstr,const char * wildend,int escape,int w_one,int w_many)5183 int my_wildcmp_utf8(CHARSET_INFO *cs,
5184 		    const char *str,const char *str_end,
5185 		    const char *wildstr,const char *wildend,
5186 		    int escape, int w_one, int w_many)
5187 {
5188   MY_UNICASE_INFO *uni_plane= cs->caseinfo;
5189   return my_wildcmp_unicode(cs,str,str_end,wildstr,wildend,
5190                             escape,w_one,w_many,uni_plane);
5191 }
5192 
5193 
5194 static
my_charlen_utf8(CHARSET_INFO * cs,const uchar * s,const uchar * e)5195 int my_charlen_utf8(CHARSET_INFO *cs __attribute__((unused)),
5196                     const uchar *s, const uchar *e)
5197 {
5198   uchar c;
5199 
5200   if (s >= e)
5201     return MY_CS_TOOSMALL;
5202 
5203   c= s[0];
5204   if (c < 0xf0)
5205     return my_valid_mbcharlen_utf8mb3(s, e);
5206 
5207   return MY_CS_ILSEQ;
5208 }
5209 
5210 
5211 #define MY_FUNCTION_NAME(x)       my_ ## x ## _utf8
5212 #define CHARLEN(cs,str,end)       my_charlen_utf8(cs,str,end)
5213 #define DEFINE_WELL_FORMED_CHAR_LENGTH_USING_CHARLEN
5214 #include "ctype-mb.inl"
5215 #undef MY_FUNCTION_NAME
5216 #undef CHARLEN
5217 #undef DEFINE_WELL_FORMED_CHAR_LENGTH_USING_CHARLEN
5218 /* my_well_formed_char_length_utf8 */
5219 
5220 
my_weight_mb1_utf8_general_ci(uchar b)5221 static inline int my_weight_mb1_utf8_general_ci(uchar b)
5222 {
5223   return (int) my_unicase_default_page00[b & 0xFF].sort;
5224 }
5225 
5226 
my_weight_mb2_utf8_general_ci(uchar b0,uchar b1)5227 static inline int my_weight_mb2_utf8_general_ci(uchar b0, uchar b1)
5228 {
5229   my_wc_t wc= UTF8MB2_CODE(b0, b1);
5230   MY_UNICASE_CHARACTER *page= my_unicase_default_pages[wc >> 8];
5231   return (int) (page ? page[wc & 0xFF].sort : wc);
5232 }
5233 
5234 
my_weight_mb3_utf8_general_ci(uchar b0,uchar b1,uchar b2)5235 static inline int my_weight_mb3_utf8_general_ci(uchar b0, uchar b1, uchar b2)
5236 {
5237   my_wc_t wc= UTF8MB3_CODE(b0, b1, b2);
5238   MY_UNICASE_CHARACTER *page= my_unicase_default_pages[wc >> 8];
5239   return (int) (page ? page[wc & 0xFF].sort : wc);
5240 }
5241 
5242 
5243 #define MY_FUNCTION_NAME(x)      my_ ## x ## _utf8_general_ci
5244 #define DEFINE_STRNXFRM_UNICODE
5245 #define DEFINE_STRNXFRM_UNICODE_NOPAD
5246 #define MY_MB_WC(cs, pwc, s, e)  my_mb_wc_utf8mb3_quick(pwc, s, e)
5247 #define OPTIMIZE_ASCII           1
5248 #define UNICASE_MAXCHAR          MY_UNICASE_INFO_DEFAULT_MAXCHAR
5249 #define UNICASE_PAGE0            my_unicase_default_page00
5250 #define UNICASE_PAGES            my_unicase_default_pages
5251 #define WEIGHT_ILSEQ(x)          (0xFF0000 + (uchar) (x))
5252 #define WEIGHT_MB1(x)            my_weight_mb1_utf8_general_ci(x)
5253 #define WEIGHT_MB2(x,y)          my_weight_mb2_utf8_general_ci(x,y)
5254 #define WEIGHT_MB3(x,y,z)        my_weight_mb3_utf8_general_ci(x,y,z)
5255 #include "strcoll.inl"
5256 
5257 
5258 #define DEFINE_STRNNCOLLSP_NOPAD
5259 #define MY_FUNCTION_NAME(x)    my_ ## x ## _utf8_general_nopad_ci
5260 #define WEIGHT_ILSEQ(x)        (0xFF0000 + (uchar) (x))
5261 #define WEIGHT_MB1(x)          my_weight_mb1_utf8_general_ci(x)
5262 #define WEIGHT_MB2(x,y)        my_weight_mb2_utf8_general_ci(x,y)
5263 #define WEIGHT_MB3(x,y,z)      my_weight_mb3_utf8_general_ci(x,y,z)
5264 #include "strcoll.inl"
5265 
5266 
my_weight_mb1_utf8_general_mysql500_ci(uchar b)5267 static inline int my_weight_mb1_utf8_general_mysql500_ci(uchar b)
5268 {
5269   return (int) plane00_mysql500[b & 0xFF].sort;
5270 }
5271 
5272 
my_weight_mb2_utf8_general_mysql500_ci(uchar b0,uchar b1)5273 static inline int my_weight_mb2_utf8_general_mysql500_ci(uchar b0, uchar b1)
5274 {
5275   my_wc_t wc= UTF8MB2_CODE(b0, b1);
5276   MY_UNICASE_CHARACTER *page= my_unicase_pages_mysql500[wc >> 8];
5277   return (int) (page ? page[wc & 0xFF].sort : wc);
5278 }
5279 
5280 
5281 static inline int
my_weight_mb3_utf8_general_mysql500_ci(uchar b0,uchar b1,uchar b2)5282 my_weight_mb3_utf8_general_mysql500_ci(uchar b0, uchar b1, uchar b2)
5283 {
5284   my_wc_t wc= UTF8MB3_CODE(b0, b1, b2);
5285   MY_UNICASE_CHARACTER *page= my_unicase_pages_mysql500[wc >> 8];
5286   return (int) (page ? page[wc & 0xFF].sort : wc);
5287 }
5288 
5289 
5290 #define MY_FUNCTION_NAME(x)      my_ ## x ## _utf8_general_mysql500_ci
5291 #define DEFINE_STRNXFRM_UNICODE
5292 #define MY_MB_WC(cs, pwc, s, e)  my_mb_wc_utf8mb3_quick(pwc, s, e)
5293 #define OPTIMIZE_ASCII           1
5294 #define UNICASE_MAXCHAR          MY_UNICASE_INFO_DEFAULT_MAXCHAR
5295 #define UNICASE_PAGE0            plane00_mysql500
5296 #define UNICASE_PAGES            my_unicase_pages_mysql500
5297 #define WEIGHT_ILSEQ(x)          (0xFF0000 + (uchar) (x))
5298 #define WEIGHT_MB1(x)            my_weight_mb1_utf8_general_mysql500_ci(x)
5299 #define WEIGHT_MB2(x,y)          my_weight_mb2_utf8_general_mysql500_ci(x,y)
5300 #define WEIGHT_MB3(x,y,z)        my_weight_mb3_utf8_general_mysql500_ci(x,y,z)
5301 #include "strcoll.inl"
5302 
5303 
5304 #define MY_FUNCTION_NAME(x)      my_ ## x ## _utf8_bin
5305 #define DEFINE_STRNXFRM_UNICODE_BIN2
5306 #define MY_MB_WC(cs, pwc, s, e)  my_mb_wc_utf8mb3_quick(pwc, s, e)
5307 #define OPTIMIZE_ASCII           1
5308 #define WEIGHT_ILSEQ(x)          (0xFF0000 + (uchar) (x))
5309 #define WEIGHT_MB1(x)            ((int) (uchar) (x))
5310 #define WEIGHT_MB2(x,y)          ((int) UTF8MB2_CODE(x,y))
5311 #define WEIGHT_MB3(x,y,z)        ((int) UTF8MB3_CODE(x,y,z))
5312 #include "strcoll.inl"
5313 
5314 
5315 #define DEFINE_STRNNCOLLSP_NOPAD
5316 #define MY_FUNCTION_NAME(x)    my_ ## x ## _utf8_nopad_bin
5317 #define WEIGHT_ILSEQ(x)        (0xFF0000 + (uchar) (x))
5318 #define WEIGHT_MB1(x)          ((int) (uchar) (x))
5319 #define WEIGHT_MB2(x,y)        ((int) UTF8MB2_CODE(x,y))
5320 #define WEIGHT_MB3(x,y,z)      ((int) UTF8MB3_CODE(x,y,z))
5321 #include "strcoll.inl"
5322 
5323 /*
5324   TODO-10.2: join this with pad_max_char() in ctype-mb.c
5325 */
5326 static void
my_fill_utf8_mb(CHARSET_INFO * cs,char * str,size_t length,int fill)5327 my_fill_utf8_mb(CHARSET_INFO *cs, char *str, size_t length, int fill)
5328 {
5329   char *end= str + length;
5330   char buf[10];
5331   char buflen= cs->cset->native_to_mb(cs, (my_wc_t) fill, (uchar*) buf,
5332                                       (uchar*) buf + sizeof(buf));
5333   DBUG_ASSERT(buflen > 0);
5334   for ( ; str + buflen <= end ; )
5335   {
5336     memcpy(str, buf, buflen);
5337     str+= buflen;
5338   }
5339 
5340   for ( ; str < end; )
5341     *str++= ' ';
5342 }
5343 
5344 
5345 static void
my_fill_utf8(CHARSET_INFO * cs,char * str,size_t length,int fill)5346 my_fill_utf8(CHARSET_INFO *cs, char *str, size_t length, int fill)
5347 {
5348   if (fill < 0x80)
5349     my_fill_8bit(cs, str, length, fill);
5350   else
5351     my_fill_utf8_mb(cs, str, length, fill);
5352 }
5353 
5354 
5355 static MY_COLLATION_HANDLER my_collation_utf8_general_ci_handler =
5356 {
5357     NULL,               /* init */
5358     my_strnncoll_utf8_general_ci,
5359     my_strnncollsp_utf8_general_ci,
5360     my_strnncollsp_nchars_utf8_general_ci,
5361     my_strnxfrm_utf8_general_ci,
5362     my_strnxfrmlen_unicode,
5363     my_like_range_mb,
5364     my_wildcmp_utf8,
5365     my_strcasecmp_utf8,
5366     my_instr_mb,
5367     my_hash_sort_utf8mb3,
5368     my_propagate_complex
5369 };
5370 
5371 
5372 static MY_COLLATION_HANDLER my_collation_utf8_general_mysql500_ci_handler =
5373 {
5374     NULL,               /* init */
5375     my_strnncoll_utf8_general_mysql500_ci,
5376     my_strnncollsp_utf8_general_mysql500_ci,
5377     my_strnncollsp_nchars_utf8_general_mysql500_ci,
5378     my_strnxfrm_utf8_general_mysql500_ci,
5379     my_strnxfrmlen_unicode,
5380     my_like_range_mb,
5381     my_wildcmp_utf8,
5382     my_strcasecmp_utf8,
5383     my_instr_mb,
5384     my_hash_sort_utf8mb3,
5385     my_propagate_complex
5386 };
5387 
5388 
5389 static MY_COLLATION_HANDLER my_collation_utf8_bin_handler =
5390 {
5391     NULL,		/* init */
5392     my_strnncoll_utf8_bin,
5393     my_strnncollsp_utf8_bin,
5394     my_strnncollsp_nchars_utf8_bin,
5395     my_strnxfrm_utf8_bin,
5396     my_strnxfrmlen_unicode,
5397     my_like_range_mb,
5398     my_wildcmp_mb_bin,
5399     my_strcasecmp_mb_bin,
5400     my_instr_mb,
5401     my_hash_sort_mb_bin,
5402     my_propagate_simple
5403 };
5404 
5405 
5406 static MY_COLLATION_HANDLER my_collation_utf8_general_nopad_ci_handler =
5407 {
5408   NULL,               /* init */
5409   my_strnncoll_utf8_general_ci,
5410   my_strnncollsp_utf8_general_nopad_ci,
5411   my_strnncollsp_nchars_utf8_general_nopad_ci,
5412   my_strnxfrm_nopad_utf8_general_ci,
5413   my_strnxfrmlen_unicode,
5414   my_like_range_mb,
5415   my_wildcmp_utf8,
5416   my_strcasecmp_utf8,
5417   my_instr_mb,
5418   my_hash_sort_utf8mb3_nopad,
5419   my_propagate_complex
5420 };
5421 
5422 
5423 static MY_COLLATION_HANDLER my_collation_utf8_nopad_bin_handler =
5424 {
5425   NULL,		/* init */
5426   my_strnncoll_utf8_bin,
5427   my_strnncollsp_utf8_nopad_bin,
5428   my_strnncollsp_nchars_utf8_nopad_bin,
5429   my_strnxfrm_nopad_utf8_bin,
5430   my_strnxfrmlen_unicode,
5431   my_like_range_mb,
5432   my_wildcmp_mb_bin,
5433   my_strcasecmp_mb_bin,
5434   my_instr_mb,
5435   my_hash_sort_mb_nopad_bin,
5436   my_propagate_simple
5437 };
5438 
5439 
5440 MY_CHARSET_HANDLER my_charset_utf8_handler=
5441 {
5442     NULL,               /* init */
5443     my_numchars_mb,
5444     my_charpos_mb,
5445     my_lengthsp_8bit,
5446     my_numcells_mb,
5447     my_utf8_uni,
5448     my_uni_utf8,
5449     my_mb_ctype_mb,
5450     my_caseup_str_utf8,
5451     my_casedn_str_utf8,
5452     my_caseup_utf8,
5453     my_casedn_utf8,
5454     my_snprintf_8bit,
5455     my_long10_to_str_8bit,
5456     my_longlong10_to_str_8bit,
5457     my_fill_utf8,
5458     my_strntol_8bit,
5459     my_strntoul_8bit,
5460     my_strntoll_8bit,
5461     my_strntoull_8bit,
5462     my_strntod_8bit,
5463     my_strtoll10_8bit,
5464     my_strntoull10rnd_8bit,
5465     my_scan_8bit,
5466     my_charlen_utf8,
5467     my_well_formed_char_length_utf8,
5468     my_copy_fix_mb,
5469     my_uni_utf8,
5470 };
5471 
5472 
5473 
5474 struct charset_info_st my_charset_utf8_general_ci=
5475 {
5476     33,0,0,             /* number       */
5477     MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM|MY_CS_UNICODE,  /* state  */
5478     "utf8",             /* cs name      */
5479     "utf8_general_ci",  /* name         */
5480     "",                 /* comment      */
5481     NULL,               /* tailoring    */
5482     ctype_utf8,         /* ctype        */
5483     to_lower_utf8,      /* to_lower     */
5484     to_upper_utf8,      /* to_upper     */
5485     to_upper_utf8,      /* sort_order   */
5486     NULL,               /* uca          */
5487     NULL,               /* tab_to_uni   */
5488     NULL,               /* tab_from_uni */
5489     &my_unicase_default,/* caseinfo     */
5490     NULL,               /* state_map    */
5491     NULL,               /* ident_map    */
5492     1,                  /* strxfrm_multiply */
5493     1,                  /* caseup_multiply  */
5494     1,                  /* casedn_multiply  */
5495     1,                  /* mbminlen     */
5496     3,                  /* mbmaxlen     */
5497     0,                  /* min_sort_char */
5498     0xFFFF,             /* max_sort_char */
5499     ' ',                /* pad char      */
5500     0,                  /* escape_with_backslash_is_dangerous */
5501     1,                  /* levels_for_order   */
5502     &my_charset_utf8_handler,
5503     &my_collation_utf8_general_ci_handler
5504 };
5505 
5506 
5507 struct charset_info_st my_charset_utf8_general_mysql500_ci=
5508 {
5509   223,0,0,                                      /* number           */
5510   MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE,  /* state            */
5511   "utf8",                                       /* cs name          */
5512   "utf8_general_mysql500_ci",                   /* name             */
5513   "",                                           /* comment          */
5514   NULL,                                         /* tailoring        */
5515   ctype_utf8,                                   /* ctype            */
5516   to_lower_utf8,                                /* to_lower         */
5517   to_upper_utf8,                                /* to_upper         */
5518   to_upper_utf8,                                /* sort_order       */
5519   NULL,                                         /* uca              */
5520   NULL,                                         /* tab_to_uni       */
5521   NULL,                                         /* tab_from_uni     */
5522   &my_unicase_mysql500,                         /* caseinfo         */
5523   NULL,                                         /* state_map        */
5524   NULL,                                         /* ident_map        */
5525   1,                                            /* strxfrm_multiply */
5526   1,                                            /* caseup_multiply  */
5527   1,                                            /* casedn_multiply  */
5528   1,                                            /* mbminlen         */
5529   3,                                            /* mbmaxlen         */
5530   0,                                            /* min_sort_char    */
5531   0xFFFF,                                       /* max_sort_char    */
5532   ' ',                                          /* pad char         */
5533   0,                          /* escape_with_backslash_is_dangerous */
5534   1,                                            /* levels_for_order   */
5535   &my_charset_utf8_handler,
5536   &my_collation_utf8_general_mysql500_ci_handler
5537 };
5538 
5539 
5540 struct charset_info_st my_charset_utf8_bin=
5541 {
5542     83,0,0,             /* number       */
5543     MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_BINSORT|MY_CS_UNICODE, /* state  */
5544     "utf8",             /* cs name      */
5545     "utf8_bin",         /* name         */
5546     "",                 /* comment      */
5547     NULL,               /* tailoring    */
5548     ctype_utf8,         /* ctype        */
5549     to_lower_utf8,      /* to_lower     */
5550     to_upper_utf8,      /* to_upper     */
5551     NULL,               /* sort_order   */
5552     NULL,               /* uca          */
5553     NULL,               /* tab_to_uni   */
5554     NULL,               /* tab_from_uni */
5555     &my_unicase_default,/* caseinfo     */
5556     NULL,               /* state_map    */
5557     NULL,               /* ident_map    */
5558     1,                  /* strxfrm_multiply */
5559     1,                  /* caseup_multiply  */
5560     1,                  /* casedn_multiply  */
5561     1,                  /* mbminlen     */
5562     3,                  /* mbmaxlen     */
5563     0,                  /* min_sort_char */
5564     0xFFFF,             /* max_sort_char */
5565     ' ',                /* pad char      */
5566     0,                  /* escape_with_backslash_is_dangerous */
5567     1,                  /* levels_for_order   */
5568     &my_charset_utf8_handler,
5569     &my_collation_utf8_bin_handler
5570 };
5571 
5572 
5573 struct charset_info_st my_charset_utf8_general_nopad_ci=
5574 {
5575     MY_NOPAD_ID(33),0,0,      /* number           */
5576     MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NOPAD, /* state */
5577     "utf8",                   /* cs name          */
5578     "utf8_general_nopad_ci",  /* name             */
5579     "",                       /* comment          */
5580     NULL,                     /* tailoring        */
5581     ctype_utf8,               /* ctype            */
5582     to_lower_utf8,            /* to_lower         */
5583     to_upper_utf8,            /* to_upper         */
5584     to_upper_utf8,            /* sort_order       */
5585     NULL,                     /* uca              */
5586     NULL,                     /* tab_to_uni       */
5587     NULL,                     /* tab_from_uni     */
5588     &my_unicase_default,      /* caseinfo         */
5589     NULL,                     /* state_map        */
5590     NULL,                     /* ident_map        */
5591     1,                        /* strxfrm_multiply */
5592     1,                        /* caseup_multiply  */
5593     1,                        /* casedn_multiply  */
5594     1,                        /* mbminlen         */
5595     3,                        /* mbmaxlen         */
5596     0,                        /* min_sort_char    */
5597     0xFFFF,                   /* max_sort_char    */
5598     ' ',                      /* pad char         */
5599     0,                        /* escape_with_backslash_is_dangerous */
5600     1,                        /* levels_for_order */
5601     &my_charset_utf8_handler,
5602     &my_collation_utf8_general_nopad_ci_handler
5603 };
5604 
5605 
5606 struct charset_info_st my_charset_utf8_nopad_bin=
5607 {
5608     MY_NOPAD_ID(83),0,0,/* number           */
5609     MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_BINSORT|MY_CS_UNICODE|MY_CS_NOPAD,
5610     "utf8",             /* cs name          */
5611     "utf8_nopad_bin",   /* name             */
5612     "",                 /* comment          */
5613     NULL,               /* tailoring        */
5614     ctype_utf8,         /* ctype            */
5615     to_lower_utf8,      /* to_lower         */
5616     to_upper_utf8,      /* to_upper         */
5617     NULL,               /* sort_order       */
5618     NULL,               /* uca              */
5619     NULL,               /* tab_to_uni       */
5620     NULL,               /* tab_from_uni     */
5621     &my_unicase_default,/* caseinfo         */
5622     NULL,               /* state_map        */
5623     NULL,               /* ident_map        */
5624     1,                  /* strxfrm_multiply */
5625     1,                  /* caseup_multiply  */
5626     1,                  /* casedn_multiply  */
5627     1,                  /* mbminlen         */
5628     3,                  /* mbmaxlen         */
5629     0,                  /* min_sort_char    */
5630     0xFFFF,             /* max_sort_char    */
5631     ' ',                /* pad char         */
5632     0,                  /* escape_with_backslash_is_dangerous */
5633     1,                  /* levels_for_order */
5634     &my_charset_utf8_handler,
5635     &my_collation_utf8_nopad_bin_handler
5636 };
5637 
5638 
5639 #ifdef HAVE_UTF8_GENERAL_CS
5640 
5641 /*
5642  * These functions bacically do the same as their original, except
5643  * that they return 0 only when two comparing unicode strings are
5644  * strictly the same in case-sensitive way.  See "save_diff" local
5645  * variable to what they actually do.
5646  */
5647 
my_strnncoll_utf8_cs(CHARSET_INFO * cs,const uchar * s,size_t slen,const uchar * t,size_t tlen,my_bool t_is_prefix)5648 static int my_strnncoll_utf8_cs(CHARSET_INFO *cs,
5649                                 const uchar *s, size_t slen,
5650                                 const uchar *t, size_t tlen,
5651                                 my_bool t_is_prefix)
5652 {
5653   int s_res,t_res;
5654   my_wc_t s_wc,t_wc;
5655   const uchar *se=s+slen;
5656   const uchar *te=t+tlen;
5657   int save_diff = 0;
5658   int diff;
5659   MY_UNICASE_INFO *const *uni_plane= cs->caseinfo;
5660 
5661   while ( s < se && t < te )
5662   {
5663     s_res=my_utf8_uni(cs,&s_wc, s, se);
5664     t_res=my_utf8_uni(cs,&t_wc, t, te);
5665 
5666     if ( s_res <= 0 || t_res <= 0 )
5667 
5668     {
5669       /* Incorrect string, compare by char value */
5670       return ((int)s[0]-(int)t[0]);
5671     }
5672 
5673     if ( save_diff == 0 )
5674     {
5675       save_diff = ((int)s_wc) - ((int)t_wc);
5676     }
5677 
5678     my_tosort_unicode(uni_plane, &s_wc, cs->state);
5679     my_tosort_unicode(uni_plane, &t_wc, cs->state);
5680 
5681     if ( s_wc != t_wc )
5682     {
5683       return  ((int) s_wc) - ((int) t_wc);
5684     }
5685 
5686     s+=s_res;
5687     t+=t_res;
5688   }
5689   diff = ( (se-s) - (te-t) );
5690   return t_is_prefix ? t-te : ((diff == 0) ? save_diff : diff);
5691 }
5692 
my_strnncollsp_utf8_cs(CHARSET_INFO * cs,const uchar * s,size_t slen,const uchar * t,size_t tlen)5693 static int my_strnncollsp_utf8_cs(CHARSET_INFO *cs,
5694                                   const uchar *s, size_t slen,
5695                                   const uchar *t, size_t tlen)
5696 {
5697   int s_res, t_res, res;
5698   my_wc_t s_wc, t_wc;
5699   const uchar *se= s + slen;
5700   const uchar *te= t + tlen;
5701   int save_diff= 0;
5702   MY_UNICASE_INFO *uni_plane= cs->caseinfo;
5703 
5704   while ( s < se && t < te )
5705   {
5706     s_res=my_utf8_uni(cs,&s_wc, s, se);
5707     t_res=my_utf8_uni(cs,&t_wc, t, te);
5708 
5709     if ( s_res <= 0 || t_res <= 0 )
5710     {
5711       /* Incorrect string, compare by char value */
5712       return ((int)s[0]-(int)t[0]);
5713     }
5714 
5715     if ( save_diff == 0 )
5716     {
5717       save_diff = ((int)s_wc) - ((int)t_wc);
5718     }
5719 
5720     my_tosort_unicode(uni_plane, &s_wc, cs->state);
5721     my_tosort_unicode(uni_plane, &t_wc, cs->state);
5722 
5723     if ( s_wc != t_wc )
5724     {
5725       return  ((int) s_wc) - ((int) t_wc);
5726     }
5727 
5728     s+=s_res;
5729     t+=t_res;
5730   }
5731 
5732   slen= se-s;
5733   tlen= te-t;
5734 
5735   /*
5736     The following code uses the fact that in UTF-8
5737     all multibyte characters are greater than space,
5738     and all multibyte head characters are greater than
5739     space. It means if we meet a character greater
5740     than space, it always means that the longer string
5741     is greater. So we can reuse the same loop from the
5742     8bit version, without having to process full multibute
5743     sequences.
5744   */
5745   if ((res= slen == tlen ? 0 :
5746             slen < tlen  ?
5747               -my_strnncollsp_padspace_bin(t, tlen) :
5748               my_strnncollsp_padspace_bin(s, slen)))
5749     return res;
5750   return save_diff;
5751 }
5752 
5753 static MY_COLLATION_HANDLER my_collation_cs_handler =
5754 {
5755     NULL,		/* init */
5756     my_strnncoll_utf8_cs,
5757     my_strnncollsp_utf8_cs,
5758     my_strnncollsp_nchars_generic,
5759     my_strnxfrm_utf8_general_ci,
5760     my_strnxfrmlen_unicode,
5761     my_like_range_simple,
5762     my_wildcmp_mb,
5763     my_strcasecmp_utf8,
5764     my_instr_mb,
5765     my_hash_sort_utf8,
5766     my_propagate_simple
5767 };
5768 
5769 struct charset_info_st my_charset_utf8_general_cs=
5770 {
5771     254,0,0,		/* number       */
5772     MY_CS_COMPILED|MY_CS_UNICODE,	/* state  */
5773     "utf8",		/* cs name      */
5774     "utf8_general_cs",	/* name         */
5775     "",			/* comment      */
5776     NULL,		/* tailoring    */
5777     ctype_utf8,		/* ctype        */
5778     to_lower_utf8,	/* to_lower     */
5779     to_upper_utf8,	/* to_upper     */
5780     to_upper_utf8,	/* sort_order   */
5781     NULL,		/* uca          */
5782     NULL,		/* tab_to_uni   */
5783     NULL,		/* tab_from_uni */
5784     &my_unicase_default,/* caseinfo     */
5785     NULL,		/* state_map    */
5786     NULL,		/* ident_map    */
5787     1,			/* strxfrm_multiply */
5788     1,                  /* caseup_multiply  */
5789     1,                  /* casedn_multiply  */
5790     1,			/* mbminlen     */
5791     3,			/* mbmaxlen     */
5792     0,			/* min_sort_char */
5793     255,		/* max_sort_char */
5794     ' ',                /* pad char      */
5795     0,                  /* escape_with_backslash_is_dangerous */
5796     1,                  /* levels_for_order   */
5797     &my_charset_utf8_handler,
5798     &my_collation_cs_handler
5799 };
5800 #endif	/* Cybozu Hack */
5801 
5802 
5803 /*
5804   File system encoding components:
5805 
5806 Code range Pattern            Number   Used Unused  Blocks
5807 -----------------------------------------------------------------------------
5808 00C0..017F [.][0..4][g..z] 5*20= 100   97     3  Latin1 Supplement + Ext A
5809 0370..03FF [.][5..9][g..z] 5*20= 100   88    12  Greek + Coptic
5810 0400..052F [.][g..z][0..6] 20*7= 140  140   137  Cyrillic
5811 0530..058F [.][g..z][7..8] 20*2=  40   38     2  Armenian
5812 2160..217F [.][g..z][9]    20*1=  20   16     4  Number Forms
5813 0180..02AF [.][g..z][a..k] 28*11=220  203    17  Latin Ext B + IPA
5814 1E00..0EFF [.][g..z][l..r] 20*7= 140  136     4  Latin Additional Extended
5815 1F00..1FFF [.][g..z][s..z] 20*8= 160  144    16  Greek Extended
5816 ....  .... [.][a..f][g..z] 6*20= 120    0   120  RESERVED
5817 24B6..24E9 [.][@][a..z]           26   26     0  Enclosed Alphanumerics
5818 FF21..FF5A [.][a..z][@]           26   26     0  Full Width forms
5819 
5820 All other characters are encoded using five bytes:
5821 
5822 [.][0..9a..z][0..9a..z][0..9a..z][0..9a..z]
5823 
5824 */
5825 
5826 
5827 static const uint16 touni[5994]=
5828 {
5829   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5830   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5831   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x00C0,
5832   0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7,0x00C8,
5833   0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF,0x00D0,
5834   0x00D1,0x00D2,0x00D3,0x0000,0x0000,0x0000,0x0000,0x0000,
5835   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x00E0,
5836   0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7,0x00E8,
5837   0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF,0x00F0,
5838   0x00F1,0x00F2,0x00F3,0x0000,0x0000,0x0000,0x0000,0x0000,
5839   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5840   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5841   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x00D4,
5842   0x00D5,0x00D6,0x0000,0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,
5843   0x00DD,0x00DE,0x0178,0x0100,0x0102,0x0104,0x0106,0x0108,
5844   0x010A,0x010C,0x010E,0x0000,0x0000,0x0000,0x0000,0x0000,
5845   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x00F4,
5846   0x00F5,0x00F6,0x00DF,0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,
5847   0x00FD,0x00FE,0x00FF,0x0101,0x0103,0x0105,0x0107,0x0109,
5848   0x010B,0x010D,0x010F,0x0000,0x0000,0x0000,0x0000,0x0000,
5849   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5850   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5851   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0110,
5852   0x0112,0x0114,0x0116,0x0118,0x011A,0x011C,0x011E,0x0120,
5853   0x0122,0x0124,0x0126,0x0128,0x012A,0x012C,0x012E,0x0000,
5854   0x0132,0x0134,0x0136,0x0000,0x0000,0x0000,0x0000,0x0000,
5855   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0111,
5856   0x0113,0x0115,0x0117,0x0119,0x011B,0x011D,0x011F,0x0121,
5857   0x0123,0x0125,0x0127,0x0129,0x012B,0x012D,0x012F,0x0131,
5858   0x0133,0x0135,0x0137,0x0000,0x0000,0x0000,0x0000,0x0000,
5859   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5860   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5861   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5862   0x0139,0x013B,0x013D,0x013F,0x0141,0x0143,0x0145,0x0147,
5863   0x0000,0x014A,0x014C,0x014E,0x0150,0x0152,0x0154,0x0156,
5864   0x0158,0x015A,0x015C,0x0000,0x0000,0x0000,0x0000,0x0000,
5865   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0138,
5866   0x013A,0x013C,0x013E,0x0140,0x0142,0x0144,0x0146,0x0148,
5867   0x0149,0x014B,0x014D,0x014F,0x0151,0x0153,0x0155,0x0157,
5868   0x0159,0x015B,0x015D,0x0000,0x0000,0x0000,0x0000,0x0000,
5869   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5870   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5871   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x015E,
5872   0x0160,0x0162,0x0164,0x0166,0x0168,0x016A,0x016C,0x016E,
5873   0x0170,0x0172,0x0174,0x0176,0x0179,0x017B,0x017D,0x0000,
5874   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5875   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x015F,
5876   0x0161,0x0163,0x0165,0x0167,0x0169,0x016B,0x016D,0x016F,
5877   0x0171,0x0173,0x0175,0x0177,0x017A,0x017C,0x017E,0x017F,
5878   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5879   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5880   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5881   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5882   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5883   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5884   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5885   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5886   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5887   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5888   0x0000,0x0390,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5889   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5890   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5891   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0386,
5892   0x0388,0x0389,0x038A,0x0000,0x0391,0x0000,0x0393,0x0394,
5893   0x0395,0x0396,0x0397,0x0000,0x0399,0x0000,0x039B,0x039C,
5894   0x039D,0x039E,0x039F,0x0000,0x0000,0x0000,0x0000,0x0000,
5895   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03AC,
5896   0x03AD,0x03AE,0x03AF,0x03B0,0x03B1,0x03B2,0x03B3,0x03B4,
5897   0x03B5,0x03B6,0x03B7,0x03B8,0x03B9,0x03BA,0x03BB,0x03BC,
5898   0x03BD,0x03BE,0x03BF,0x0000,0x0000,0x0000,0x0000,0x0000,
5899   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5900   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5901   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5902   0x03A1,0x0000,0x0000,0x03A4,0x03A5,0x0000,0x03A7,0x03A8,
5903   0x03A9,0x03AA,0x03AB,0x038C,0x038E,0x038F,0x0000,0x0392,
5904   0x0398,0x03D2,0x03D3,0x0000,0x0000,0x0000,0x0000,0x0000,
5905   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03C0,
5906   0x03C1,0x03C2,0x03C3,0x03C4,0x03C5,0x03C6,0x03C7,0x03C8,
5907   0x03C9,0x03CA,0x03CB,0x03CC,0x03CD,0x03CE,0x0000,0x03D0,
5908   0x03D1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5909   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5910   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5911   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03D4,
5912   0x03A6,0x03A0,0x0000,0x0000,0x03DA,0x03DC,0x03DE,0x03E0,
5913   0x03E2,0x03E4,0x03E6,0x03E8,0x03EA,0x03EC,0x03EE,0x039A,
5914   0x0000,0x03A3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5915   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5916   0x03D5,0x03D6,0x03D7,0x03D9,0x03DB,0x03DD,0x03DF,0x03E1,
5917   0x03E3,0x03E5,0x03E7,0x03E9,0x03EB,0x03ED,0x03EF,0x03F0,
5918   0x03F1,0x03F2,0x03F3,0x0000,0x0000,0x0000,0x0000,0x0000,
5919   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5920   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5921   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5922   0x0000,0x0000,0x0000,0x0000,0x03FD,0x03FE,0x03FF,0x0000,
5923   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5924   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5925   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03F5,
5926   0x03F6,0x03F8,0x03FB,0x03FC,0x0000,0x0000,0x0000,0x0000,
5927   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5928   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5929   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5930   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5931   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5932   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5933   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5934   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5935   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5936   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5937   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5938   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5939   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5940   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5941   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5942   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5943   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5944   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5945   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5946   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5947   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5948   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5949   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5950   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5951   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5952   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5953   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5954   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5955   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5956   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5957   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5958   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5959   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5960   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5961   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5962   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5963   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5964   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5965   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5966   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5967   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5968   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5969   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5970   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5971   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5972   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5973   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5974   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5975   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5976   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5977   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5978   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5979   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5980   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5981   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5982   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5983   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5984   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5985   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5986   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5987   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5988   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5989   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5990   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
5991   0x0000,0x24B6,0x24B7,0x24B8,0x24B9,0x24BA,0x24BB,0x24BC,
5992   0x24BD,0x24BE,0x24BF,0x24C0,0x24C1,0x24C2,0x24C3,0x24C4,
5993   0x24C5,0x24C6,0x24C7,0x24C8,0x24C9,0x24CA,0x24CB,0x24CC,
5994   0x24CD,0x24CE,0x24CF,0x0000,0x0000,0x0000,0x0000,0x0000,
5995   0x0000,0x24D0,0x24D1,0x24D2,0x24D3,0x24D4,0x24D5,0x24D6,
5996   0x24D7,0x24D8,0x24D9,0x24DA,0x24DB,0x24DC,0x24DD,0x24DE,
5997   0x24DF,0x24E0,0x24E1,0x24E2,0x24E3,0x24E4,0x24E5,0x24E6,
5998   0x24E7,0x24E8,0x24E9,0x0000,0x0000,0x0000,0x0000,0x0000,
5999   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6000   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6001   0xFF21,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6002   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6003   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6004   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6005   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6006   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6007   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6008   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6009   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6010   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6011   0xFF22,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6012   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6013   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6014   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6015   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6016   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6017   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6018   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6019   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6020   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6021   0xFF23,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6022   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6023   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6024   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6025   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6026   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6027   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6028   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6029   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6030   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6031   0xFF24,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6032   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6033   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6034   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6035   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6036   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6037   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6038   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6039   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6040   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6041   0xFF25,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6042   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6043   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6044   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6045   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6046   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6047   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6048   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6049   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6050   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6051   0xFF26,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6052   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6053   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6054   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6055   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6056   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6057   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6058   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6059   0x0410,0x0424,0x0408,0x0478,0x04A6,0x04CD,0x04F4,0x0000,
6060   0x0544,0x2160,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6061   0xFF27,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6062   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6063   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6064   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6065   0x0000,0x0000,0x01B3,0x01DE,0x0208,0x0230,0x0000,0x0000,
6066   0x0000,0x0000,0x0000,0x0000,0x1E00,0x1E28,0x1E50,0x1E78,
6067   0x1E60,0x1EBE,0x1EE6,0x1F08,0x1F2A,0x0000,0x1F6C,0x1F88,
6068   0x1FAC,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6069   0x0411,0x0425,0x0409,0x047A,0x04A8,0x0000,0x04F6,0x0531,
6070   0x0545,0x2161,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6071   0xFF28,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6072   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6073   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6074   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6075   0x0000,0x0182,0x01B5,0x01E0,0x020A,0x0232,0x0000,0x0000,
6076   0x019D,0x0000,0x0000,0x0000,0x1E02,0x1E2A,0x1E52,0x1E7A,
6077   0x0000,0x1EC0,0x1EE8,0x1F09,0x1F2B,0x0000,0x1F6D,0x1F89,
6078   0x1FAD,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6079   0x0412,0x0426,0x040A,0x047C,0x04AA,0x04D0,0x04F8,0x0532,
6080   0x0546,0x2162,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6081   0xFF29,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6082   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6083   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6084   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6085   0x0000,0x0184,0x01B8,0x01E2,0x020C,0x0000,0x0000,0x0000,
6086   0x0000,0x0000,0x0000,0x0000,0x1E04,0x1E2C,0x1E54,0x1E7C,
6087   0x0000,0x1EC2,0x1EEA,0x1F0A,0x1F2C,0x0000,0x1F6E,0x1F8A,
6088   0x1FAE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6089   0x0413,0x0427,0x040B,0x047E,0x04AC,0x04D2,0x0000,0x0533,
6090   0x0547,0x2163,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6091   0xFF2A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6092   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6093   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6094   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6095   0x0000,0x0187,0x0000,0x01E4,0x020E,0x0000,0x0000,0x0193,
6096   0x0000,0x01AE,0x0000,0x0000,0x1E06,0x1E2E,0x1E56,0x1E7E,
6097   0x0000,0x1EC4,0x1EEC,0x1F0B,0x1F2D,0x0000,0x1F6F,0x1F8B,
6098   0x1FAF,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6099   0x0414,0x0428,0x040C,0x0480,0x04AE,0x04D4,0x0000,0x0534,
6100   0x0548,0x2164,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6101   0xFF2B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6102   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6103   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6104   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6105   0x0000,0x018B,0x0000,0x01E6,0x0210,0x0000,0x0000,0x0000,
6106   0x019F,0x0000,0x0000,0x0000,0x1E08,0x1E30,0x1E58,0x1E80,
6107   0x0000,0x1EC6,0x1EEE,0x1F0C,0x1F2E,0x0000,0x1FBA,0x1F8C,
6108   0x1FB8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6109   0x0415,0x0429,0x040D,0x0000,0x04B0,0x04D6,0x0000,0x0535,
6110   0x0549,0x2165,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6111   0xFF2C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6112   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6113   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6114   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6115   0x0000,0x0000,0x0000,0x01E8,0x0212,0x0000,0x0000,0x0000,
6116   0x0000,0x01B1,0x0000,0x0000,0x1E0A,0x1E32,0x1E5A,0x1E82,
6117   0x1EA0,0x1EC8,0x1EF0,0x1F0D,0x1F2F,0x1F59,0x1FBB,0x1F8D,
6118   0x1FB9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6119   0x0416,0x042A,0x040E,0x048A,0x04B2,0x04D8,0x0000,0x0536,
6120   0x054A,0x2166,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6121   0xFF2D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6122   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6123   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6124   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6125   0x0000,0x0191,0x0000,0x01EA,0x0214,0x0000,0x0000,0x0194,
6126   0x0000,0x01B2,0x0000,0x0000,0x1E0C,0x1E34,0x1E5C,0x1E84,
6127   0x1EA2,0x1ECA,0x1EF2,0x1F0E,0x1F38,0x0000,0x1FC8,0x1F8E,
6128   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6129   0x0417,0x042B,0x040F,0x048C,0x04B4,0x04DA,0x0000,0x0537,
6130   0x054B,0x2167,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6131   0xFF2E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6132   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6133   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6134   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6135   0x0000,0x01F6,0x01BC,0x01EC,0x0216,0x0000,0x0000,0x0000,
6136   0x0000,0x0000,0x0000,0x0000,0x1E0E,0x1E36,0x1E5E,0x1E86,
6137   0x1EA4,0x1ECC,0x1EF4,0x1F0F,0x1F39,0x1F5B,0x1FC9,0x1F8F,
6138   0x1FBC,0x1FE8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6139   0x0418,0x042C,0x0460,0x048E,0x04B6,0x04DC,0x0000,0x0538,
6140   0x054C,0x2168,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6141   0xFF2F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6142   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6143   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6144   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6145   0x0000,0x0198,0x01C4,0x01EE,0x0218,0x023A,0x0000,0x0000,
6146   0x0000,0x0000,0x0000,0x0000,0x1E10,0x1E38,0x0000,0x1E88,
6147   0x1EA6,0x1ECE,0x1EF6,0x1F18,0x1F3A,0x0000,0x1FCA,0x1F98,
6148   0x0000,0x1FE9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6149   0x0419,0x042D,0x0462,0x0490,0x04B8,0x04DE,0x0500,0x0539,
6150   0x054D,0x2169,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6151   0xFF30,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6152   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6153   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6154   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6155   0x0000,0x023D,0x01C7,0x0000,0x021A,0x023B,0x0000,0x0000,
6156   0x0000,0x0000,0x0000,0x0000,0x1E12,0x1E3A,0x1E62,0x1E8A,
6157   0x1EA8,0x1ED0,0x1EF8,0x1F19,0x1F3B,0x1F5D,0x1FCB,0x1F99,
6158   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6159   0x041A,0x042E,0x0464,0x0492,0x04BA,0x04E0,0x0502,0x053A,
6160   0x054E,0x216A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6161   0xFF31,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6162   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6163   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6164   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6165   0x0000,0x0000,0x01CA,0x01F1,0x021C,0x023E,0x0181,0x0000,
6166   0x0000,0x0000,0x0000,0x0000,0x1E14,0x1E3C,0x1E64,0x1E8C,
6167   0x1EAA,0x1ED2,0x0000,0x1F1A,0x1F3C,0x0000,0x1FDA,0x1F9A,
6168   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6169   0x041B,0x042F,0x0466,0x0494,0x04BC,0x04E2,0x0504,0x053B,
6170   0x054F,0x216B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6171   0xFF32,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6172   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6173   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6174   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6175   0x0000,0x0220,0x01CD,0x01F4,0x021E,0x0000,0x0186,0x0197,
6176   0x0000,0x0000,0x0000,0x0000,0x1E16,0x1E3E,0x1E66,0x1E8E,
6177   0x1EAC,0x1ED4,0x0000,0x1F1B,0x1F3D,0x1F5F,0x1FDB,0x1F9B,
6178   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6179   0x041C,0x0400,0x0468,0x0496,0x04BE,0x04E4,0x0506,0x053C,
6180   0x0550,0x216C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6181   0xFF33,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6182   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6183   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6184   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6185   0x0000,0x01A0,0x01CF,0x01F8,0x0000,0x0000,0x0000,0x0196,
6186   0x0000,0x0000,0x0000,0x0000,0x1E18,0x1E40,0x1E68,0x1E90,
6187   0x1EAE,0x1ED6,0x0000,0x1F1C,0x1F3E,0x0000,0x1FF8,0x1F9C,
6188   0x0000,0x1FEC,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6189   0x041D,0x0401,0x046A,0x0498,0x04C0,0x04E6,0x0508,0x053D,
6190   0x0551,0x216D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6191   0xFF34,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6192   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6193   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6194   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6195   0x0000,0x01A2,0x01D1,0x01FA,0x0222,0x0000,0x0189,0x0000,
6196   0x0000,0x01B7,0x0000,0x0000,0x1E1A,0x1E42,0x1E6A,0x1E92,
6197   0x1EB0,0x1ED8,0x0000,0x1F1D,0x1F3F,0x0000,0x1FF9,0x1F9D,
6198   0x1FCC,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6199   0x041E,0x0402,0x046C,0x049A,0x04C1,0x04E8,0x050A,0x053E,
6200   0x0552,0x216E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6201   0xFF35,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6202   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6203   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6204   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6205   0x0000,0x01A4,0x01D3,0x01FC,0x0224,0x0000,0x018A,0x0000,
6206   0x0000,0x0000,0x0000,0x0000,0x1E1C,0x1E44,0x1E6C,0x1E94,
6207   0x1EB2,0x1EDA,0x0000,0x0000,0x1F48,0x0000,0x1FEA,0x1F9E,
6208   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6209   0x041F,0x0403,0x046E,0x049C,0x04C3,0x04EA,0x050C,0x053F,
6210   0x0553,0x216F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6211   0xFF36,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6212   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6213   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6214   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6215   0x0000,0x01A7,0x01D5,0x01FE,0x0226,0x0000,0x0000,0x0000,
6216   0x01A6,0x0241,0x0000,0x0000,0x1E1E,0x1E46,0x1E6E,0x0000,
6217   0x1EB4,0x1EDC,0x0000,0x0000,0x1F49,0x0000,0x1FEB,0x1F9F,
6218   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6219   0x0420,0x0404,0x0470,0x049E,0x04C5,0x04EC,0x050E,0x0540,
6220   0x0554,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6221   0xFF37,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6222   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6223   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6224   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6225   0x0000,0x0000,0x01D7,0x0200,0x0228,0x0000,0x018F,0x0000,
6226   0x0000,0x0000,0x0000,0x0000,0x1E20,0x1E48,0x1E70,0x0000,
6227   0x1EB6,0x1EDE,0x0000,0x0000,0x1F4A,0x1F68,0x1FFA,0x1FA8,
6228   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6229   0x0421,0x0405,0x0472,0x04A0,0x04C7,0x04EE,0x0000,0x0541,
6230   0x0555,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6231   0xFF38,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6232   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6233   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6234   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6235   0x0000,0x0000,0x01D9,0x0202,0x022A,0x0000,0x0000,0x0000,
6236   0x0000,0x0000,0x0000,0x0000,0x1E22,0x1E4A,0x1E72,0x0000,
6237   0x1EB8,0x1EE0,0x0000,0x0000,0x1F4B,0x1F69,0x1FFB,0x1FA9,
6238   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6239   0x0422,0x0406,0x0474,0x04A2,0x04C9,0x04F0,0x0000,0x0542,
6240   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6241   0xFF39,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6242   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6243   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6244   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6245   0x0000,0x01AC,0x01DB,0x0204,0x022C,0x0000,0x0190,0x019C,
6246   0x01A9,0x0000,0x0000,0x0000,0x1E24,0x1E4C,0x1E74,0x0000,
6247   0x1EBA,0x1EE2,0x0000,0x1F28,0x1F4C,0x1F6A,0x0000,0x1FAA,
6248   0x1FD8,0x1FFC,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6249   0x0423,0x0407,0x0476,0x04A4,0x04CB,0x04F2,0x0000,0x0543,
6250   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6251   0xFF3A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6252   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6253   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6254   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6255   0x0000,0x01AF,0x018E,0x0206,0x022E,0x0000,0x0000,0x0000,
6256   0x0000,0x0000,0x0000,0x0000,0x1E26,0x1E4E,0x1E76,0x0000,
6257   0x1EBC,0x1EE4,0x0000,0x1F29,0x1F4D,0x1F6B,0x0000,0x1FAB,
6258   0x1FD9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6259   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6260   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6261   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6262   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6263   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6264   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6265   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6266   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6267   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6268   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6269   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6270   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6271   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6272   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6273   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6274   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6275   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6276   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6277   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6278   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6279   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6280   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6281   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6282   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6283   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6284   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6285   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6286   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6287   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6288   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6289   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6290   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6291   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6292   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6293   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6294   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6295   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6296   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6297   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6298   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6299   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6300   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6301   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6302   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6303   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6304   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6305   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6306   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6307   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6308   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6309   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6310   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6311   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6312   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6313   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6314   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6315   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6316   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6317   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6318   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6319   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6320   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6321   0xFF41,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6322   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6323   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6324   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6325   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6326   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6327   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6328   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6329   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6330   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6331   0xFF42,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6332   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6333   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6334   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6335   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6336   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6337   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6338   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6339   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6340   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6341   0xFF43,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6342   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6343   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6344   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6345   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6346   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6347   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6348   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6349   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6350   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6351   0xFF44,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6352   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6353   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6354   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6355   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6356   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6357   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6358   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6359   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6360   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6361   0xFF45,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6362   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6363   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6364   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6365   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6366   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6367   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6368   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6369   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6370   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6371   0xFF46,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6372   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6373   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6374   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6375   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6376   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6377   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6378   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6379   0x0430,0x0444,0x0458,0x0479,0x04A7,0x04CE,0x04F5,0x0000,
6380   0x0574,0x2170,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6381   0xFF47,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6382   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6383   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6384   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6385   0x0000,0x0180,0x01B4,0x01DF,0x0209,0x0231,0x0000,0x025D,
6386   0x0271,0x0285,0x0299,0x02AD,0x1E01,0x1E29,0x1E51,0x1E79,
6387   0x1E9B,0x1EBF,0x1EE7,0x1F00,0x1F22,0x0000,0x1F64,0x1F80,
6388   0x1FA4,0x1FD2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6389   0x0431,0x0445,0x0459,0x047B,0x04A9,0x0000,0x04F7,0x0561,
6390   0x0575,0x2171,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6391   0xFF48,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6392   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6393   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6394   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6395   0x0000,0x0183,0x01B6,0x01E1,0x020B,0x0233,0x0000,0x025E,
6396   0x0272,0x0286,0x029A,0x02AE,0x1E03,0x1E2B,0x1E53,0x1E7B,
6397   0x0000,0x1EC1,0x1EE9,0x1F01,0x1F23,0x0000,0x1F65,0x1F81,
6398   0x1FA5,0x1FD3,0x1FF6,0x0000,0x0000,0x0000,0x0000,0x0000,
6399   0x0432,0x0446,0x045A,0x047D,0x04AB,0x04D1,0x04F9,0x0562,
6400   0x0576,0x2172,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6401   0xFF49,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6402   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6403   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6404   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6405   0x0000,0x0185,0x01B9,0x01E3,0x020D,0x0234,0x0000,0x025F,
6406   0x0273,0x0287,0x029B,0x02AF,0x1E05,0x1E2D,0x1E55,0x1E7D,
6407   0x0000,0x1EC3,0x1EEB,0x1F02,0x1F24,0x0000,0x1F66,0x1F82,
6408   0x1FA6,0x0000,0x1FF7,0x0000,0x0000,0x0000,0x0000,0x0000,
6409   0x0433,0x0447,0x045B,0x047F,0x04AD,0x04D3,0x0000,0x0563,
6410   0x0577,0x2173,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6411   0xFF4A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6412   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6413   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6414   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6415   0x0000,0x0188,0x01BA,0x01E5,0x020F,0x0235,0x0000,0x0260,
6416   0x0274,0x0288,0x029C,0x0000,0x1E07,0x1E2F,0x1E57,0x1E7F,
6417   0x0000,0x1EC5,0x1EED,0x1F03,0x1F25,0x0000,0x1F67,0x1F83,
6418   0x1FA7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6419   0x0434,0x0448,0x045C,0x0481,0x04AF,0x04D5,0x0000,0x0564,
6420   0x0578,0x2174,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6421   0xFF4B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6422   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6423   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6424   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6425   0x0000,0x018C,0x01BB,0x01E7,0x0211,0x0236,0x0000,0x0261,
6426   0x0275,0x0289,0x029D,0x0000,0x1E09,0x1E31,0x1E59,0x1E81,
6427   0x0000,0x1EC7,0x1EEF,0x1F04,0x1F26,0x1F50,0x1F70,0x1F84,
6428   0x1FB0,0x1FD6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6429   0x0435,0x0449,0x045D,0x0000,0x04B1,0x04D7,0x0000,0x0565,
6430   0x0579,0x2175,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6431   0xFF4C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6432   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6433   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6434   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6435   0x0000,0x018D,0x0000,0x01E9,0x0213,0x0237,0x0000,0x0262,
6436   0x0276,0x028A,0x029E,0x0000,0x1E0B,0x1E33,0x1E5B,0x1E83,
6437   0x1EA1,0x1EC9,0x1EF1,0x1F05,0x1F27,0x1F51,0x1F71,0x1F85,
6438   0x1FB1,0x1FD7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6439   0x0436,0x044A,0x045E,0x048B,0x04B3,0x04D9,0x0000,0x0566,
6440   0x057A,0x2176,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6441   0xFF4D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6442   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6443   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6444   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6445   0x0000,0x0192,0x01BE,0x01EB,0x0215,0x0238,0x0000,0x0263,
6446   0x0277,0x028B,0x029F,0x0000,0x1E0D,0x1E35,0x1E5D,0x1E85,
6447   0x1EA3,0x1ECB,0x1EF3,0x1F06,0x1F30,0x1F52,0x1F72,0x1F86,
6448   0x1FB2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6449   0x0437,0x044B,0x045F,0x048D,0x04B5,0x04DB,0x0000,0x0567,
6450   0x057B,0x2177,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6451   0xFF4E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6452   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6453   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6454   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6455   0x0000,0x0195,0x01BD,0x01ED,0x0217,0x0239,0x0250,0x0264,
6456   0x0278,0x028C,0x02A0,0x0000,0x1E0F,0x1E37,0x1E5F,0x1E87,
6457   0x1EA5,0x1ECD,0x1EF5,0x1F07,0x1F31,0x1F53,0x1F73,0x1F87,
6458   0x1FB3,0x1FE0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6459   0x0438,0x044C,0x0461,0x048F,0x04B7,0x04DD,0x0000,0x0568,
6460   0x057C,0x2178,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6461   0xFF4F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6462   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6463   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6464   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6465   0x0000,0x0199,0x01C6,0x01EF,0x0219,0x0000,0x0251,0x0265,
6466   0x0279,0x028D,0x02A1,0x0000,0x1E11,0x1E39,0x1E61,0x1E89,
6467   0x1EA7,0x1ECF,0x1EF7,0x1F10,0x1F32,0x1F54,0x1F74,0x1F90,
6468   0x1FB4,0x1FE1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6469   0x0439,0x044D,0x0463,0x0491,0x04B9,0x04DF,0x0501,0x0569,
6470   0x057D,0x2179,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6471   0xFF50,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6472   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6473   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6474   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6475   0x0000,0x019A,0x01C9,0x01F0,0x021B,0x023C,0x0252,0x0266,
6476   0x027A,0x028E,0x02A2,0x0000,0x1E13,0x1E3B,0x1E63,0x1E8B,
6477   0x1EA9,0x1ED1,0x1EF9,0x1F11,0x1F33,0x1F55,0x1F75,0x1F91,
6478   0x0000,0x1FE2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6479   0x043A,0x044E,0x0465,0x0493,0x04BB,0x04E1,0x0503,0x056A,
6480   0x057E,0x217A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6481   0xFF51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6482   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6483   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6484   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6485   0x0000,0x019B,0x01CC,0x01F3,0x021D,0x0000,0x0253,0x0267,
6486   0x027B,0x028F,0x02A3,0x0000,0x1E15,0x1E3D,0x1E65,0x1E8D,
6487   0x1EAB,0x1ED3,0x0000,0x1F12,0x1F34,0x1F56,0x1F76,0x1F92,
6488   0x1FB6,0x1FE3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6489   0x043B,0x044F,0x0467,0x0495,0x04BD,0x04E3,0x0505,0x056B,
6490   0x057F,0x217B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6491   0xFF52,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6492   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6493   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6494   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6495   0x0000,0x019E,0x01CE,0x01F5,0x021F,0x023F,0x0254,0x0268,
6496   0x027C,0x0290,0x02A4,0x0000,0x1E17,0x1E3F,0x1E67,0x1E8F,
6497   0x1EAD,0x1ED5,0x0000,0x1F13,0x1F35,0x1F57,0x1F77,0x1F93,
6498   0x1FB7,0x1FE4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6499   0x043C,0x0450,0x0469,0x0497,0x04BF,0x04E5,0x0507,0x056C,
6500   0x0580,0x217C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6501   0xFF53,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6502   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6503   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6504   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6505   0x0000,0x01A1,0x01D0,0x01F9,0x0221,0x0240,0x0255,0x0269,
6506   0x027D,0x0291,0x02A5,0x0000,0x1E19,0x1E41,0x1E69,0x1E91,
6507   0x1EAF,0x1ED7,0x0000,0x1F14,0x1F36,0x0000,0x1F78,0x1F94,
6508   0x1FC2,0x1FE5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6509   0x043D,0x0451,0x046B,0x0499,0x0000,0x04E7,0x0509,0x056D,
6510   0x0581,0x217D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6511   0xFF54,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6512   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6513   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6514   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6515   0x0000,0x01A3,0x01D2,0x01FB,0x0223,0x0000,0x0256,0x026A,
6516   0x027E,0x0292,0x02A6,0x0000,0x1E1B,0x1E43,0x1E6B,0x1E93,
6517   0x1EB1,0x1ED9,0x0000,0x1F15,0x1F37,0x0000,0x1F79,0x1F95,
6518   0x1FC3,0x1FE6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6519   0x043E,0x0452,0x046D,0x049B,0x04C2,0x04E9,0x050B,0x056E,
6520   0x0582,0x217E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6521   0xFF55,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6522   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6523   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6524   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6525   0x0000,0x01A5,0x01D4,0x01FD,0x0225,0x0000,0x0257,0x026B,
6526   0x027F,0x0293,0x02A7,0x0000,0x1E1D,0x1E45,0x1E6D,0x1E95,
6527   0x1EB3,0x1EDB,0x0000,0x0000,0x1F40,0x0000,0x1F7A,0x1F96,
6528   0x1FC4,0x1FE7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6529   0x043F,0x0453,0x046F,0x049D,0x04C4,0x04EB,0x050D,0x056F,
6530   0x0583,0x217F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6531   0xFF56,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6532   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6533   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6534   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6535   0x0000,0x01A8,0x01D6,0x01FF,0x0227,0x0000,0x0258,0x026C,
6536   0x0280,0x0294,0x02A8,0x0000,0x1E1F,0x1E47,0x1E6F,0x1E96,
6537   0x1EB5,0x1EDD,0x0000,0x0000,0x1F41,0x0000,0x1F7B,0x1F97,
6538   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6539   0x0440,0x0454,0x0471,0x049F,0x04C6,0x04ED,0x050F,0x0570,
6540   0x0584,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6541   0xFF57,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6542   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6543   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6544   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6545   0x0000,0x01AA,0x01D8,0x0201,0x0229,0x0000,0x0259,0x026D,
6546   0x0281,0x0295,0x02A9,0x0000,0x1E21,0x1E49,0x1E71,0x1E97,
6547   0x1EB7,0x1EDF,0x0000,0x0000,0x1F42,0x1F60,0x1F7C,0x1FA0,
6548   0x1FC6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6549   0x0441,0x0455,0x0473,0x04A1,0x04C8,0x04EF,0x0000,0x0571,
6550   0x0585,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6551   0xFF58,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6552   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6553   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6554   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6555   0x0000,0x01AB,0x01DA,0x0203,0x022B,0x0000,0x025A,0x026E,
6556   0x0282,0x0296,0x02AA,0x0000,0x1E23,0x1E4B,0x1E73,0x1E98,
6557   0x1EB9,0x1EE1,0x0000,0x0000,0x1F43,0x1F61,0x1F7D,0x1FA1,
6558   0x1FC7,0x1FF2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6559   0x0442,0x0456,0x0475,0x04A3,0x04CA,0x04F1,0x0000,0x0572,
6560   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6561   0xFF59,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6562   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6563   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6564   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6565   0x0000,0x01AD,0x01DC,0x0205,0x022D,0x0000,0x025B,0x026F,
6566   0x0283,0x0297,0x02AB,0x0000,0x1E25,0x1E4D,0x1E75,0x1E99,
6567   0x1EBB,0x1EE3,0x0000,0x1F20,0x1F44,0x1F62,0x0000,0x1FA2,
6568   0x1FD0,0x1FF3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6569   0x0443,0x0457,0x0477,0x04A5,0x04CC,0x04F3,0x0000,0x0573,
6570   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6571   0xFF5A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6572   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6573   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6574   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6575   0x0000,0x01B0,0x01DD,0x0207,0x022F,0x0000,0x025C,0x0270,
6576   0x0284,0x0298,0x02AC,0x0000,0x1E27,0x1E4F,0x1E77,0x1E9A,
6577   0x1EBD,0x1EE5,0x0000,0x1F21,0x1F45,0x1F63,0x0000,0x1FA3,
6578   0x1FD1,0x1FF4
6579 };
6580 
6581 
6582 /* 00C0-05FF */
6583 static const uint16 uni_0C00_05FF[1344]=
6584 {
6585   0x0017,0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,
6586   0x001F,0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,
6587   0x0027,0x0028,0x0029,0x002A,0x0067,0x0068,0x0069,0x0000,
6588   0x006B,0x006C,0x006D,0x006E,0x006F,0x0070,0x0071,0x008A,
6589   0x0037,0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,
6590   0x003F,0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,
6591   0x0047,0x0048,0x0049,0x004A,0x0087,0x0088,0x0089,0x0000,
6592   0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,0x0092,
6593   0x0073,0x0093,0x0074,0x0094,0x0075,0x0095,0x0076,0x0096,
6594   0x0077,0x0097,0x0078,0x0098,0x0079,0x0099,0x007A,0x009A,
6595   0x00B7,0x00D7,0x00B8,0x00D8,0x00B9,0x00D9,0x00BA,0x00DA,
6596   0x00BB,0x00DB,0x00BC,0x00DC,0x00BD,0x00DD,0x00BE,0x00DE,
6597   0x00BF,0x00DF,0x00C0,0x00E0,0x00C1,0x00E1,0x00C2,0x00E2,
6598   0x00C3,0x00E3,0x00C4,0x00E4,0x00C5,0x00E5,0x00C6,0x00E6,
6599   0x0000,0x00E7,0x00C8,0x00E8,0x00C9,0x00E9,0x00CA,0x00EA,
6600   0x0127,0x0108,0x0128,0x0109,0x0129,0x010A,0x012A,0x010B,
6601   0x012B,0x010C,0x012C,0x010D,0x012D,0x010E,0x012E,0x010F,
6602   0x012F,0x0130,0x0111,0x0131,0x0112,0x0132,0x0113,0x0133,
6603   0x0114,0x0134,0x0115,0x0135,0x0116,0x0136,0x0117,0x0137,
6604   0x0118,0x0138,0x0119,0x0139,0x011A,0x013A,0x0157,0x0177,
6605   0x0158,0x0178,0x0159,0x0179,0x015A,0x017A,0x015B,0x017B,
6606   0x015C,0x017C,0x015D,0x017D,0x015E,0x017E,0x015F,0x017F,
6607   0x0160,0x0180,0x0161,0x0181,0x0162,0x0182,0x0163,0x0183,
6608   0x0072,0x0164,0x0184,0x0165,0x0185,0x0166,0x0186,0x0187,
6609   0x1161,0x0A86,0x07B1,0x11B1,0x0801,0x1201,0x0AD6,0x0851,
6610   0x1251,0x0B76,0x0BC6,0x08A1,0x12A1,0x12F1,0x0D52,0x0C66,
6611   0x0D06,0x0941,0x1341,0x0857,0x0947,0x1391,0x0B27,0x0AD7,
6612   0x09E1,0x13E1,0x1431,0x1481,0x0D07,0x07B8,0x14D1,0x08A8,
6613   0x0B21,0x1521,0x0B71,0x1571,0x0BC1,0x15C1,0x0C18,0x0C11,
6614   0x1611,0x0D08,0x1661,0x16B1,0x0D01,0x1701,0x0859,0x0D51,
6615   0x1751,0x08F9,0x0949,0x0762,0x1162,0x07B2,0x11B2,0x0B79,
6616   0x0802,0x1202,0x1252,0x12A2,0x0992,0x1392,0x1342,0x0000,
6617   0x0000,0x0000,0x0000,0x0000,0x09E2,0x0000,0x13E2,0x0A32,
6618   0x0000,0x1432,0x0A82,0x0000,0x1482,0x0AD2,0x14D2,0x0B22,
6619   0x1522,0x0B72,0x1572,0x0BC2,0x15C2,0x0C12,0x1612,0x0C62,
6620   0x1662,0x0CB2,0x16B2,0x0D02,0x1702,0x1752,0x0763,0x1163,
6621   0x07B3,0x11B3,0x0803,0x1203,0x0853,0x1253,0x08A3,0x12A3,
6622   0x08F3,0x12F3,0x0943,0x1343,0x0993,0x1393,0x09E3,0x13E3,
6623   0x1433,0x0A83,0x0000,0x1483,0x0AD3,0x14D3,0x0991,0x0000,
6624   0x0B23,0x1523,0x0B73,0x1573,0x0BC3,0x15C3,0x0C13,0x1613,
6625   0x0C63,0x1663,0x0CB3,0x16B3,0x0D03,0x1703,0x0D53,0x1753,
6626   0x0764,0x1164,0x07B4,0x11B4,0x0804,0x1204,0x0854,0x1254,
6627   0x08A4,0x12A4,0x08F4,0x12F4,0x0944,0x1344,0x0994,0x1394,
6628   0x09E4,0x13E4,0x0A34,0x1434,0x0A84,0x1484,0x0AD4,0x14D4,
6629   0x0AD1,0x1524,0x0B74,0x1574,0x0BC4,0x15C4,0x0C14,0x1614,
6630   0x0C64,0x1664,0x0CB4,0x16B4,0x0D04,0x1704,0x0D54,0x1754,
6631   0x0765,0x1165,0x07B5,0x11B5,0x1205,0x1255,0x12A5,0x12F5,
6632   0x1345,0x1395,0x09E5,0x0A35,0x1435,0x0A31,0x0A85,0x14D5,
6633   0x1525,0x0C19,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6634   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6635   0x1396,0x13E6,0x1436,0x1486,0x14D6,0x1526,0x1576,0x15C6,
6636   0x1616,0x1666,0x16B6,0x1706,0x1756,0x1167,0x11B7,0x1207,
6637   0x1257,0x12A7,0x12F7,0x1347,0x1397,0x13E7,0x1437,0x1487,
6638   0x14D7,0x1527,0x1577,0x15C7,0x1617,0x1667,0x16B7,0x1707,
6639   0x1757,0x1168,0x11B8,0x1208,0x1258,0x12A8,0x12F8,0x1348,
6640   0x1398,0x13E8,0x1438,0x1488,0x14D8,0x1528,0x1578,0x15C8,
6641   0x1618,0x1668,0x16B8,0x1708,0x1758,0x1169,0x11B9,0x1209,
6642   0x1259,0x12A9,0x12F9,0x1349,0x1399,0x13E9,0x1439,0x1489,
6643   0x14D9,0x1529,0x1579,0x15C9,0x1619,0x1669,0x16B9,0x1709,
6644   0x1759,0x116A,0x11BA,0x120A,0x125A,0x12AA,0x12FA,0x134A,
6645   0x139A,0x13EA,0x143A,0x148A,0x14DA,0x152A,0x157A,0x15CA,
6646   0x161A,0x166A,0x16BA,0x170A,0x175A,0x116B,0x11BB,0x120B,
6647   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6648   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6649   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6650   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6651   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6652   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6653   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6654   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6655   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6656   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6657   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6658   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6659   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6660   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6661   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6662   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6663   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6664   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6665   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6666   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6667   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6668   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6669   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6670   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6671   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6672   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6673   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x01F7,0x0000,
6674   0x01F8,0x01F9,0x01FA,0x0000,0x0253,0x0000,0x0254,0x0255,
6675   0x01D9,0x01FC,0x0257,0x01FE,0x01FF,0x0200,0x0201,0x0202,
6676   0x0258,0x0204,0x02A7,0x0206,0x0207,0x0208,0x0209,0x020A,
6677   0x0299,0x0248,0x0000,0x02A9,0x024B,0x024C,0x0298,0x024E,
6678   0x024F,0x0250,0x0251,0x0252,0x0217,0x0218,0x0219,0x021A,
6679   0x021B,0x021C,0x021D,0x021E,0x021F,0x0220,0x0221,0x0222,
6680   0x0223,0x0224,0x0225,0x0226,0x0227,0x0228,0x0229,0x022A,
6681   0x0267,0x0268,0x0269,0x026A,0x026B,0x026C,0x026D,0x026E,
6682   0x026F,0x0270,0x0271,0x0272,0x0273,0x0274,0x0275,0x0000,
6683   0x0277,0x0278,0x0259,0x025A,0x0297,0x02B8,0x02B9,0x02BA,
6684   0x0000,0x02BB,0x029C,0x02BC,0x029D,0x02BD,0x029E,0x02BE,
6685   0x029F,0x02BF,0x02A0,0x02C0,0x02A1,0x02C1,0x02A2,0x02C2,
6686   0x02A3,0x02C3,0x02A4,0x02C4,0x02A5,0x02C5,0x02A6,0x02C6,
6687   0x02C7,0x02C8,0x02C9,0x02CA,0x0000,0x0307,0x0308,0x0000,
6688   0x0309,0x0000,0x0000,0x030A,0x030B,0x02EC,0x02ED,0x02EE,
6689   0x0AF1,0x0B41,0x0B91,0x0BE1,0x0C31,0x0C81,0x0CD1,0x0D21,
6690   0x0732,0x0782,0x07D2,0x0822,0x0872,0x08C2,0x0912,0x0962,
6691   0x0730,0x0780,0x07D0,0x0820,0x0870,0x08C0,0x0910,0x0960,
6692   0x09B0,0x0A00,0x0A50,0x0AA0,0x0AF0,0x0B40,0x0B90,0x0BE0,
6693   0x0C30,0x0C80,0x0CD0,0x0D20,0x0731,0x0781,0x07D1,0x0821,
6694   0x0871,0x08C1,0x0911,0x0961,0x09B1,0x0A01,0x0A51,0x0AA1,
6695   0x1130,0x1180,0x11D0,0x1220,0x1270,0x12C0,0x1310,0x1360,
6696   0x13B0,0x1400,0x1450,0x14A0,0x14F0,0x1540,0x1590,0x15E0,
6697   0x1630,0x1680,0x16D0,0x1720,0x1131,0x1181,0x11D1,0x1221,
6698   0x1271,0x12C1,0x1311,0x1361,0x13B1,0x1401,0x1451,0x14A1,
6699   0x14F1,0x1541,0x1591,0x15E1,0x1631,0x1681,0x16D1,0x1721,
6700   0x1132,0x1182,0x11D2,0x1222,0x1272,0x12C2,0x1312,0x1362,
6701   0x09B2,0x13B2,0x0A02,0x1402,0x0A52,0x1452,0x0AA2,0x14A2,
6702   0x0AF2,0x14F2,0x0B42,0x1542,0x0B92,0x1592,0x0BE2,0x15E2,
6703   0x0C32,0x1632,0x0C82,0x1682,0x0CD2,0x16D2,0x0D22,0x1722,
6704   0x0733,0x1133,0x0783,0x1183,0x07D3,0x11D3,0x0823,0x1223,
6705   0x0873,0x1273,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6706   0x0000,0x0000,0x0913,0x1313,0x0963,0x1363,0x09B3,0x13B3,
6707   0x0A03,0x1403,0x0A53,0x1453,0x0AA3,0x14A3,0x0AF3,0x14F3,
6708   0x0B43,0x1543,0x0B93,0x1593,0x0BE3,0x15E3,0x0C33,0x1633,
6709   0x0C83,0x1683,0x0CD3,0x16D3,0x0D23,0x1723,0x0734,0x1134,
6710   0x0784,0x1184,0x07D4,0x11D4,0x0824,0x1224,0x0874,0x1274,
6711   0x08C4,0x12C4,0x0914,0x1314,0x0964,0x1364,0x09B4,0x13B4,
6712   0x0A04,0x1404,0x0A54,0x1454,0x0AA4,0x14A4,0x0AF4,0x14F4,
6713   0x0B44,0x0B94,0x1594,0x0BE4,0x15E4,0x0C34,0x1634,0x0C84,
6714   0x1684,0x0CD4,0x16D4,0x0D24,0x1724,0x0735,0x1135,0x0000,
6715   0x07D5,0x11D5,0x0825,0x1225,0x0875,0x1275,0x08C5,0x12C5,
6716   0x0915,0x1315,0x0965,0x1365,0x09B5,0x13B5,0x0A05,0x1405,
6717   0x0A55,0x1455,0x0AA5,0x14A5,0x0AF5,0x14F5,0x0B45,0x1545,
6718   0x0B95,0x1595,0x0BE5,0x15E5,0x0C35,0x1635,0x0C85,0x1685,
6719   0x0CD5,0x16D5,0x0D25,0x1725,0x0736,0x1136,0x0786,0x1186,
6720   0x07D6,0x11D6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6721   0x0A06,0x1406,0x0A56,0x1456,0x0AA6,0x14A6,0x0AF6,0x14F6,
6722   0x0B46,0x1546,0x0B96,0x1596,0x0BE6,0x15E6,0x0C36,0x1636,
6723   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6724   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6725   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6726   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6727   0x0000,0x0787,0x07D7,0x0827,0x0877,0x08C7,0x0917,0x0967,
6728   0x09B7,0x0A07,0x0A57,0x0AA7,0x0AF7,0x0B47,0x0B97,0x0BE7,
6729   0x0C37,0x0C87,0x0CD7,0x0D27,0x0738,0x0788,0x07D8,0x0828,
6730   0x0878,0x08C8,0x0918,0x0968,0x09B8,0x0A08,0x0A58,0x0AA8,
6731   0x0AF8,0x0B48,0x0B98,0x0BE8,0x0C38,0x0C88,0x0000,0x0000,
6732   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6733   0x0000,0x1187,0x11D7,0x1227,0x1277,0x12C7,0x1317,0x1367,
6734   0x13B7,0x1407,0x1457,0x14A7,0x14F7,0x1547,0x1597,0x15E7,
6735   0x1637,0x1687,0x16D7,0x1727,0x1138,0x1188,0x11D8,0x1228,
6736   0x1278,0x12C8,0x1318,0x1368,0x13B8,0x1408,0x1458,0x14A8,
6737   0x14F8,0x1548,0x1598,0x15E8,0x1638,0x1688,0x0000,0x0000,
6738   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6739   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6740   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6741   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6742   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6743   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6744   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6745   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6746   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6747   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6748   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6749   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6750   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6751   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6752   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
6753 };
6754 
6755 
6756 /* 1E00-1FFF */
6757 static uint16 uni_1E00_1FFF[512]=
6758 {
6759   0x076C,0x116C,0x07BC,0x11BC,0x080C,0x120C,0x085C,0x125C,
6760   0x08AC,0x12AC,0x08FC,0x12FC,0x094C,0x134C,0x099C,0x139C,
6761   0x09EC,0x13EC,0x0A3C,0x143C,0x0A8C,0x148C,0x0ADC,0x14DC,
6762   0x0B2C,0x152C,0x0B7C,0x157C,0x0BCC,0x15CC,0x0C1C,0x161C,
6763   0x0C6C,0x166C,0x0CBC,0x16BC,0x0D0C,0x170C,0x0D5C,0x175C,
6764   0x076D,0x116D,0x07BD,0x11BD,0x080D,0x120D,0x085D,0x125D,
6765   0x08AD,0x12AD,0x08FD,0x12FD,0x094D,0x134D,0x099D,0x139D,
6766   0x09ED,0x13ED,0x0A3D,0x143D,0x0A8D,0x148D,0x0ADD,0x14DD,
6767   0x0B2D,0x152D,0x0B7D,0x157D,0x0BCD,0x15CD,0x0C1D,0x161D,
6768   0x0C6D,0x166D,0x0CBD,0x16BD,0x0D0D,0x170D,0x0D5D,0x175D,
6769   0x076E,0x116E,0x07BE,0x11BE,0x080E,0x120E,0x085E,0x125E,
6770   0x08AE,0x12AE,0x08FE,0x12FE,0x094E,0x134E,0x099E,0x139E,
6771   0x0770,0x13EE,0x0A3E,0x143E,0x0A8E,0x148E,0x0ADE,0x14DE,
6772   0x0B2E,0x152E,0x0B7E,0x157E,0x0BCE,0x15CE,0x0C1E,0x161E,
6773   0x0C6E,0x166E,0x0CBE,0x16BE,0x0D0E,0x170E,0x0D5E,0x175E,
6774   0x076F,0x116F,0x07BF,0x11BF,0x080F,0x120F,0x085F,0x125F,
6775   0x08AF,0x12AF,0x08FF,0x12FF,0x094F,0x134F,0x099F,0x139F,
6776   0x09EF,0x13EF,0x0A3F,0x143F,0x0A8F,0x148F,0x0ADF,0x14DF,
6777   0x0B2F,0x152F,0x0B7F,0x157F,0x0BCF,0x15CF,0x161F,0x166F,
6778   0x16BF,0x170F,0x175F,0x1170,0x0000,0x0000,0x0000,0x0000,
6779   0x0900,0x1300,0x0950,0x1350,0x09A0,0x13A0,0x09F0,0x13F0,
6780   0x0A40,0x1440,0x0A90,0x1490,0x0AE0,0x14E0,0x0B30,0x1530,
6781   0x0B80,0x1580,0x0BD0,0x15D0,0x0C20,0x1620,0x0C70,0x1670,
6782   0x0CC0,0x16C0,0x0D10,0x1710,0x0D60,0x1760,0x0771,0x1171,
6783   0x07C1,0x11C1,0x0811,0x1211,0x0861,0x1261,0x08B1,0x12B1,
6784   0x0901,0x1301,0x0951,0x1351,0x09A1,0x13A1,0x09F1,0x13F1,
6785   0x0A41,0x1441,0x0A91,0x1491,0x0AE1,0x14E1,0x0B31,0x1531,
6786   0x0B81,0x1581,0x0BD1,0x15D1,0x0C21,0x1621,0x0C71,0x1671,
6787   0x0CC1,0x16C1,0x0D11,0x1711,0x0D61,0x1761,0x0772,0x1172,
6788   0x07C2,0x11C2,0x0812,0x1212,0x0862,0x1262,0x08B2,0x12B2,
6789   0x0902,0x1302,0x0952,0x1352,0x09A2,0x13A2,0x09F2,0x13F2,
6790   0x0A42,0x1442,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
6791   0x1173,0x11C3,0x1213,0x1263,0x12B3,0x1303,0x1353,0x13A3,
6792   0x0773,0x07C3,0x0813,0x0863,0x08B3,0x0903,0x0953,0x09A3,
6793   0x13F3,0x1443,0x1493,0x14E3,0x1533,0x1583,0x0000,0x0000,
6794   0x09F3,0x0A43,0x0A93,0x0AE3,0x0B33,0x0B83,0x0000,0x0000,
6795   0x1713,0x1763,0x1174,0x11C4,0x1214,0x1264,0x12B4,0x1304,
6796   0x0D13,0x0D63,0x0774,0x07C4,0x0814,0x0864,0x08B4,0x0904,
6797   0x1354,0x13A4,0x13F4,0x1444,0x1494,0x14E4,0x1534,0x1584,
6798   0x0954,0x09A4,0x09F4,0x0A44,0x0A94,0x0AE4,0x0B34,0x0B84,
6799   0x15D4,0x1624,0x1674,0x16C4,0x1714,0x1764,0x0000,0x0000,
6800   0x0BD4,0x0C24,0x0C74,0x0CC4,0x0D14,0x0D64,0x0000,0x0000,
6801   0x12B5,0x1305,0x1355,0x13A5,0x13F5,0x1445,0x1495,0x14E5,
6802   0x0000,0x0905,0x0000,0x09A5,0x0000,0x0A45,0x0000,0x0AE5,
6803   0x1675,0x16C5,0x1715,0x1765,0x1176,0x11C6,0x1216,0x1266,
6804   0x0C75,0x0CC5,0x0D15,0x0D65,0x0776,0x07C6,0x0816,0x0866,
6805   0x12B6,0x1306,0x1356,0x13A6,0x13F6,0x1446,0x1496,0x14E6,
6806   0x1536,0x1586,0x15D6,0x1626,0x1676,0x16C6,0x0000,0x0000,
6807   0x1177,0x11C7,0x1217,0x1267,0x12B7,0x1307,0x1357,0x13A7,
6808   0x0777,0x07C7,0x0817,0x0867,0x08B7,0x0907,0x0957,0x09A7,
6809   0x13F7,0x1447,0x1497,0x14E7,0x1537,0x1587,0x15D7,0x1627,
6810   0x09F7,0x0A47,0x0A97,0x0AE7,0x0B37,0x0B87,0x0BD7,0x0C27,
6811   0x1677,0x16C7,0x1717,0x1767,0x1178,0x11C8,0x1218,0x1268,
6812   0x0C77,0x0CC7,0x0D17,0x0D67,0x0778,0x07C8,0x0818,0x0868,
6813   0x12B8,0x1308,0x1358,0x13A8,0x13F8,0x0000,0x1498,0x14E8,
6814   0x08B8,0x0908,0x08B6,0x0906,0x09A8,0x0000,0x0000,0x0000,
6815   0x0000,0x0000,0x1538,0x1588,0x15D8,0x0000,0x1678,0x16C8,
6816   0x0956,0x09A6,0x09F6,0x0A46,0x0B88,0x0000,0x0000,0x0000,
6817   0x1718,0x1768,0x1179,0x11C9,0x0000,0x0000,0x12B9,0x1309,
6818   0x0D18,0x0D68,0x0A96,0x0AE6,0x0000,0x0000,0x0000,0x0000,
6819   0x13A9,0x13F9,0x1449,0x1499,0x14E9,0x1539,0x1589,0x15D9,
6820   0x09A9,0x09F9,0x0BD6,0x0C26,0x0B39,0x0000,0x0000,0x0000,
6821   0x0000,0x0000,0x16C9,0x1719,0x0000,0x0000,0x11CA,0x121A,
6822   0x0B36,0x0B86,0x0C76,0x0CC6,0x0D19,0x0000,0x0000,0x0000
6823 };
6824 
6825 
6826 /* 2160-217F */
6827 static const uint16 uni_2160_217F[32]=
6828 {
6829   0x0739,0x0789,0x07D9,0x0829,0x0879,0x08C9,0x0919,0x0969,
6830   0x09B9,0x0A09,0x0A59,0x0AA9,0x0AF9,0x0B49,0x0B99,0x0BE9,
6831   0x1139,0x1189,0x11D9,0x1229,0x1279,0x12C9,0x1319,0x1369,
6832   0x13B9,0x1409,0x1459,0x14A9,0x14F9,0x1549,0x1599,0x15E9
6833 };
6834 
6835 
6836 /* 24B0-24EF */
6837 static const uint16 uni_24B0_24EF[64]=
6838 {
6839   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0511,0x0512,
6840   0x0513,0x0514,0x0515,0x0516,0x0517,0x0518,0x0519,0x051A,
6841   0x051B,0x051C,0x051D,0x051E,0x051F,0x0520,0x0521,0x0522,
6842   0x0523,0x0524,0x0525,0x0526,0x0527,0x0528,0x0529,0x052A,
6843   0x0531,0x0532,0x0533,0x0534,0x0535,0x0536,0x0537,0x0538,
6844   0x0539,0x053A,0x053B,0x053C,0x053D,0x053E,0x053F,0x0540,
6845   0x0541,0x0542,0x0543,0x0544,0x0545,0x0546,0x0547,0x0548,
6846   0x0549,0x054A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
6847 };
6848 
6849 
6850 /* FF20-FF5F */
6851 static const uint16 uni_FF20_FF5F[64]=
6852 {
6853   0x0000,0x0560,0x05B0,0x0600,0x0650,0x06A0,0x06F0,0x0740,
6854   0x0790,0x07E0,0x0830,0x0880,0x08D0,0x0920,0x0970,0x09C0,
6855   0x0A10,0x0A60,0x0AB0,0x0B00,0x0B50,0x0BA0,0x0BF0,0x0C40,
6856   0x0C90,0x0CE0,0x0D30,0x0000,0x0000,0x0000,0x0000,0x0000,
6857   0x0000,0x0F60,0x0FB0,0x1000,0x1050,0x10A0,0x10F0,0x1140,
6858   0x1190,0x11E0,0x1230,0x1280,0x12D0,0x1320,0x1370,0x13C0,
6859   0x1410,0x1460,0x14B0,0x1500,0x1550,0x15A0,0x15F0,0x1640,
6860   0x1690,0x16E0,0x1730,0x0000,0x0000,0x0000,0x0000,0x0000
6861 };
6862 
6863 
6864 
6865 
6866 
6867 /*
6868   Returns
6869    a number 0..15, if a valid HEX digit in lower case,
6870    -1 otherwise.
6871 */
6872 
hexlo(int x)6873 static int hexlo(int x)
6874 {
6875   static const char hex_lo_digit[256]=
6876   {
6877     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
6878     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
6879     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /*  !"#$%&'()*+,-./ */
6880      0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1,-1,-1,-1,-1,-1, /* 0123456789:;<=>? */
6881     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* @ABCDEFGHIJKLMNO */
6882     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* PQRSTUVWXYZ[\]^_ */
6883     -1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* `abcdefghijklmno */
6884     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* pqrstuvwxyz{|}~. */
6885     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
6886     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
6887     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
6888     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
6889     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
6890     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
6891     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
6892     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
6893   };
6894   return hex_lo_digit[(unsigned int) x];
6895 }
6896 
6897 
6898 /*
6899   Safe characters:
6900    '\0'  NULL
6901    A..Z  capital letters,
6902    a..z  small letters
6903    0..9  digits
6904    _     underscore
6905 */
6906 static const char filename_safe_char[128]=
6907 {
6908   1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ................ */
6909   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ................ */
6910   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /*  !"#$%&'()*+,-./ */
6911   1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0, /* 0123456789:;<=>? */
6912   0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* @ABCDEFGHIJKLMNO */
6913   1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1, /* PQRSTUVWXYZ[\]^_ */
6914   0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* `abcdefghijklmno */
6915   1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0, /* pqrstuvwxyz{|}~. */
6916 };
6917 
6918 #define MY_FILENAME_ESCAPE '@'
6919 
6920 /*
6921   note, that we cannot trust 'e' here, it's may be fake,
6922   see strconvert()
6923 */
6924 static int
my_mb_wc_filename(CHARSET_INFO * cs,my_wc_t * pwc,const uchar * s,const uchar * e)6925 my_mb_wc_filename(CHARSET_INFO *cs __attribute__((unused)),
6926                   my_wc_t *pwc, const uchar *s, const uchar *e)
6927 {
6928   int byte1, byte2;
6929   if (s >= e)
6930     return MY_CS_TOOSMALL;
6931 
6932   if (*s < 128 && filename_safe_char[*s])
6933   {
6934     *pwc= *s;
6935     return 1;
6936   }
6937 
6938   if (*s != MY_FILENAME_ESCAPE)
6939     return MY_CS_ILSEQ;
6940 
6941   if (s + 3 > e)
6942     return MY_CS_TOOSMALL3;
6943 
6944   byte1= s[1];
6945   if (byte1 == 0)
6946     return MY_CS_ILSEQ; /* avoid possible out-of-bounds read */
6947   byte2= s[2];
6948 
6949   if (byte1 >= 0x30 && byte1 <= 0x7F &&
6950       byte2 >= 0x30 && byte2 <= 0x7F)
6951   {
6952     int code= (byte1 - 0x30) * 80 + byte2 - 0x30;
6953     if (code < 5994 && touni[code])
6954     {
6955       *pwc= touni[code];
6956       return 3;
6957     }
6958     if (byte1 == '@' && byte2 == '@')
6959     {
6960      *pwc= 0;
6961       return 3;
6962     }
6963   }
6964 
6965   if (s + 4 > e)
6966     return MY_CS_TOOSMALL4;
6967 
6968   if ((byte1= hexlo(byte1)) >= 0 &&
6969       (byte2= hexlo(byte2)) >= 0)
6970   {
6971     int byte3= hexlo(s[3]);
6972     int byte4= hexlo(s[3] ? s[4] : 0);
6973     if (byte3 >=0 && byte4 >=0)
6974     {
6975       *pwc= (byte1 << 12) + (byte2 << 8) + (byte3 << 4) + byte4;
6976       return 5;
6977     }
6978   }
6979 
6980   return MY_CS_ILSEQ;
6981 }
6982 
6983 
6984 static int
my_wc_mb_filename(CHARSET_INFO * cs,my_wc_t wc,uchar * s,uchar * e)6985 my_wc_mb_filename(CHARSET_INFO *cs __attribute__((unused)),
6986                   my_wc_t wc, uchar *s, uchar *e)
6987 {
6988   int code;
6989   static const char hex[]= "0123456789abcdef";
6990 
6991   if (s >= e)
6992     return MY_CS_TOOSMALL;
6993 
6994   if (wc < 128 && filename_safe_char[wc])
6995   {
6996     *s= (uchar) wc;
6997     return 1;
6998   }
6999 
7000   if (s + 3 > e)
7001     return MY_CS_TOOSMALL3;
7002 
7003   *s++= MY_FILENAME_ESCAPE;
7004   if ((wc >= 0x00C0 && wc <= 0x05FF && (code= uni_0C00_05FF[wc - 0x00C0])) ||
7005       (wc >= 0x1E00 && wc <= 0x1FFF && (code= uni_1E00_1FFF[wc - 0x1E00])) ||
7006       (wc >= 0x2160 && wc <= 0x217F && (code= uni_2160_217F[wc - 0x2160])) ||
7007       (wc >= 0x24B0 && wc <= 0x24EF && (code= uni_24B0_24EF[wc - 0x24B0])) ||
7008       (wc >= 0xFF20 && wc <= 0xFF5F && (code= uni_FF20_FF5F[wc - 0xFF20])))
7009   {
7010     *s++= (code / 80) + 0x30;
7011     *s++= (code % 80) + 0x30;
7012     return 3;
7013   }
7014 
7015   /* Non letter */
7016   if (s + 4 > e)
7017     return MY_CS_TOOSMALL5;
7018 
7019   *s++= hex[(wc >> 12) & 15];
7020   *s++= hex[(wc >> 8) & 15];
7021   *s++= hex[(wc >> 4) & 15];
7022   *s++= hex[(wc)      & 15];
7023   return 5;
7024 }
7025 
7026 
7027 static int
my_charlen_filename(CHARSET_INFO * cs,const uchar * str,const uchar * end)7028 my_charlen_filename(CHARSET_INFO *cs, const uchar *str, const uchar *end)
7029 {
7030   my_wc_t wc;
7031   return cs->cset->mb_wc(cs, &wc, str, end);
7032 }
7033 
7034 
7035 #define MY_FUNCTION_NAME(x)       my_ ## x ## _filename
7036 #define CHARLEN(cs,str,end)       my_charlen_filename(cs,str,end)
7037 #define DEFINE_WELL_FORMED_CHAR_LENGTH_USING_CHARLEN
7038 #include "ctype-mb.inl"
7039 #undef MY_FUNCTION_NAME
7040 #undef CHARLEN
7041 #undef DEFINE_WELL_FORMED_CHAR_LENGTH_USING_CHARLEN
7042 /* my_well_formed_char_length_filename */
7043 
7044 #define MY_FUNCTION_NAME(x)      my_ ## x ## _filename
7045 #define DEFINE_STRNNCOLL         0
7046 #define DEFINE_STRNXFRM_UNICODE
7047 #define MY_MB_WC(cs, pwc, s, e)  my_mb_wc_filename(cs, pwc, s, e)
7048 #define OPTIMIZE_ASCII           0
7049 #define UNICASE_MAXCHAR          MY_UNICASE_INFO_DEFAULT_MAXCHAR
7050 #define UNICASE_PAGE0            my_unicase_default_page00
7051 #define UNICASE_PAGES            my_unicase_default_pages
7052 
7053 /*
7054 #define WEIGHT_ILSEQ(x)          (0xFF0000 + (uchar) (x))
7055 #define WEIGHT_MB1(x)            my_weight_mb1_utf8_general_ci(x)
7056 #define WEIGHT_MB2(x,y)          my_weight_mb2_utf8_general_ci(x,y)
7057 #define WEIGHT_MB3(x,y,z)        my_weight_mb3_utf8_general_ci(x,y,z)
7058 */
7059 #include "strcoll.inl"
7060 
7061 
7062 static MY_COLLATION_HANDLER my_collation_filename_handler =
7063 {
7064     NULL,               /* init */
7065     my_strnncoll_simple,
7066     my_strnncollsp_simple,
7067     my_strnncollsp_nchars_generic,
7068     my_strnxfrm_filename,
7069     my_strnxfrmlen_unicode,
7070     my_like_range_mb,
7071     my_wildcmp_utf8,
7072     my_strcasecmp_utf8,
7073     my_instr_mb,
7074     my_hash_sort_utf8mb3,
7075     my_propagate_complex
7076 };
7077 
7078 static MY_CHARSET_HANDLER my_charset_filename_handler=
7079 {
7080     NULL,               /* init */
7081     my_numchars_mb,
7082     my_charpos_mb,
7083     my_lengthsp_8bit,
7084     my_numcells_mb,
7085     my_mb_wc_filename,
7086     my_wc_mb_filename,
7087     my_mb_ctype_mb,
7088     my_caseup_str_utf8,
7089     my_casedn_str_utf8,
7090     my_caseup_utf8,
7091     my_casedn_utf8,
7092     my_snprintf_8bit,
7093     my_long10_to_str_8bit,
7094     my_longlong10_to_str_8bit,
7095     my_fill_8bit,
7096     my_strntol_8bit,
7097     my_strntoul_8bit,
7098     my_strntoll_8bit,
7099     my_strntoull_8bit,
7100     my_strntod_8bit,
7101     my_strtoll10_8bit,
7102     my_strntoull10rnd_8bit,
7103     my_scan_8bit,
7104     my_charlen_filename,
7105     my_well_formed_char_length_filename,
7106     my_copy_fix_mb,
7107     my_wc_mb_filename,
7108 };
7109 
7110 
7111 
7112 struct charset_info_st my_charset_filename=
7113 {
7114     17,0,0,             /* number       */
7115     MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_HIDDEN|MY_CS_NONASCII,
7116     "filename",         /* cs name      */
7117     "filename",         /* name         */
7118     "",                 /* comment      */
7119     NULL,               /* tailoring    */
7120     ctype_utf8,         /* ctype        */
7121     to_lower_utf8,      /* to_lower     */
7122     to_upper_utf8,      /* to_upper     */
7123     to_upper_utf8,      /* sort_order   */
7124     NULL,               /* uca          */
7125     NULL,               /* tab_to_uni   */
7126     NULL,               /* tab_from_uni */
7127     &my_unicase_default,/* caseinfo     */
7128     NULL,               /* state_map    */
7129     NULL,               /* ident_map    */
7130     1,                  /* strxfrm_multiply */
7131     1,                  /* caseup_multiply  */
7132     1,                  /* casedn_multiply  */
7133     1,                  /* mbminlen     */
7134     5,                  /* mbmaxlen     */
7135     0,                  /* min_sort_char */
7136     0xFFFF,             /* max_sort_char */
7137     ' ',                /* pad char      */
7138     0,                  /* escape_with_backslash_is_dangerous */
7139     1,                  /* levels_for_order   */
7140     &my_charset_filename_handler,
7141     &my_collation_filename_handler
7142 };
7143 
7144 
7145 #endif /* HAVE_CHARSET_UTF8 */
7146 
7147 
7148 
7149 #ifdef HAVE_CHARSET_utf8mb4
7150 
7151 /*
7152   We consider bytes with code more than 127 as a letter.
7153   This guarantees that word boundaries work fine with regular
7154   expressions. Note, there is no need to mark byte 255  as a
7155   letter, it is illegal byte in UTF8.
7156 */
7157 static uchar ctype_utf8mb4[]=
7158 {
7159     0,
7160    32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32,
7161    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
7162    72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
7163   132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16,
7164    16,129,129,129,129,129,129,  1,  1,  1,  1,  1,  1,  1,  1,  1,
7165     1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 16, 16, 16, 16, 16,
7166    16,130,130,130,130,130,130,  2,  2,  2,  2,  2,  2,  2,  2,  2,
7167     2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 16, 16, 16, 16, 32,
7168     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
7169     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
7170     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
7171     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
7172     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
7173     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
7174     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
7175     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  0
7176 };
7177 
7178 
7179 static uchar to_lower_utf8mb4[]=
7180 {
7181     0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
7182    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
7183    32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
7184    48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
7185    64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,
7186   112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95,
7187    96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,
7188   112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
7189   128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
7190   144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
7191   160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
7192   176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
7193   192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
7194   208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
7195   224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
7196   240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
7197 };
7198 
7199 
7200 static uchar to_upper_utf8mb4[]=
7201 {
7202     0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
7203    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
7204    32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
7205    48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
7206    64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
7207    80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
7208    96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
7209    80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127,
7210   128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
7211   144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
7212   160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
7213   176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
7214   192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
7215   208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
7216   224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
7217   240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
7218 };
7219 
7220 
7221 static int
my_mb_wc_utf8mb4(CHARSET_INFO * cs,my_wc_t * pwc,const uchar * s,const uchar * e)7222 my_mb_wc_utf8mb4(CHARSET_INFO *cs __attribute__((unused)),
7223                  my_wc_t * pwc, const uchar *s, const uchar *e)
7224 {
7225   return my_mb_wc_utf8mb4_quick(pwc, s, e);
7226 }
7227 
7228 
7229 /*
7230   The same as above, but without range check
7231   for example, for a null-terminated string
7232 */
7233 static int
my_mb_wc_utf8mb4_no_range(CHARSET_INFO * cs,my_wc_t * pwc,const uchar * s)7234 my_mb_wc_utf8mb4_no_range(CHARSET_INFO *cs __attribute__((unused)),
7235                           my_wc_t *pwc, const uchar *s)
7236 {
7237   uchar c;
7238 
7239   c= s[0];
7240   if (c < 0x80)
7241   {
7242     *pwc = c;
7243     return 1;
7244   }
7245 
7246   if (c < 0xc2)
7247     return MY_CS_ILSEQ;
7248 
7249   if (c < 0xe0)
7250   {
7251     if (!IS_CONTINUATION_BYTE(s[1]))
7252       return MY_CS_ILSEQ;
7253 
7254     *pwc= UTF8MB2_CODE(c, s[1]);
7255     return 2;
7256   }
7257 
7258   if (c < 0xf0)
7259   {
7260     if (!IS_UTF8MB3_STEP2(c, s[1], s[2]))
7261       return MY_CS_ILSEQ;
7262     *pwc= UTF8MB3_CODE(c, s[1], s[2]);
7263     return 3;
7264   }
7265   else if (c < 0xf5)
7266   {
7267     if (!IS_UTF8MB4_STEP2(c, s[1], s[2], s[3]))
7268       return MY_CS_ILSEQ;
7269     *pwc= UTF8MB4_CODE(c, s[1], s[2], s[3]);
7270     return 4;
7271   }
7272   return MY_CS_ILSEQ;
7273 }
7274 
7275 
7276 static int
my_wc_mb_utf8mb4(CHARSET_INFO * cs,my_wc_t wc,uchar * r,uchar * e)7277 my_wc_mb_utf8mb4(CHARSET_INFO *cs __attribute__((unused)),
7278                  my_wc_t wc, uchar *r, uchar *e)
7279 {
7280   int count;
7281 
7282   if (r >= e)
7283     return MY_CS_TOOSMALL;
7284 
7285   if (wc < 0x80)
7286     count= 1;
7287   else if (wc < 0x800)
7288     count= 2;
7289   else if (wc < 0x10000)
7290     count= 3;
7291   else if (wc < 0x200000)
7292     count= 4;
7293   else return MY_CS_ILUNI;
7294 
7295   if (r + count > e)
7296     return MY_CS_TOOSMALLN(count);
7297 
7298   switch (count) {
7299     case 4: r[3] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x10000;
7300       /* fall through */
7301     case 3: r[2] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x800;
7302       /* fall through */
7303     case 2: r[1] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0xc0;
7304       /* fall through */
7305     case 1: r[0] = (uchar) wc;
7306   }
7307   return count;
7308 }
7309 
7310 
7311 /*
7312   The same as above, but without range check.
7313 */
7314 static int
my_wc_mb_utf8mb4_no_range(CHARSET_INFO * cs,my_wc_t wc,uchar * r)7315 my_wc_mb_utf8mb4_no_range(CHARSET_INFO *cs __attribute__((unused)),
7316                           my_wc_t wc, uchar *r)
7317 {
7318   int count;
7319 
7320   if (wc < 0x80)
7321     count= 1;
7322   else if (wc < 0x800)
7323     count= 2;
7324   else if (wc < 0x10000)
7325     count= 3;
7326   else if (wc < 0x200000)
7327     count= 4;
7328   else
7329     return MY_CS_ILUNI;
7330 
7331   switch (count)
7332   {
7333     case 4: r[3]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0x10000;
7334       /* fall through */
7335     case 3: r[2]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0x800;
7336       /* fall through */
7337     case 2: r[1]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0xc0;
7338       /* fall through */
7339     case 1: r[0]= (uchar) wc;
7340   }
7341   return count;
7342 }
7343 
7344 
7345 static inline void
my_tolower_utf8mb4(MY_UNICASE_INFO * uni_plane,my_wc_t * wc)7346 my_tolower_utf8mb4(MY_UNICASE_INFO *uni_plane, my_wc_t *wc)
7347 {
7348   if (*wc <= uni_plane->maxchar)
7349   {
7350     MY_UNICASE_CHARACTER *page;
7351     if ((page= uni_plane->page[(*wc >> 8)]))
7352       *wc= page[*wc & 0xFF].tolower;
7353   }
7354 }
7355 
7356 
7357 static inline void
my_toupper_utf8mb4(MY_UNICASE_INFO * uni_plane,my_wc_t * wc)7358 my_toupper_utf8mb4(MY_UNICASE_INFO *uni_plane, my_wc_t *wc)
7359 {
7360   if (*wc <= uni_plane->maxchar)
7361   {
7362     MY_UNICASE_CHARACTER *page;
7363     if ((page= uni_plane->page[(*wc >> 8)]))
7364       *wc= page[*wc & 0xFF].toupper;
7365   }
7366 }
7367 
7368 
7369 static size_t
my_caseup_utf8mb4(CHARSET_INFO * cs,const char * src,size_t srclen,char * dst,size_t dstlen)7370 my_caseup_utf8mb4(CHARSET_INFO *cs, const char *src, size_t srclen,
7371                   char *dst, size_t dstlen)
7372 {
7373   my_wc_t wc;
7374   int srcres, dstres;
7375   const char *srcend= src + srclen;
7376   char *dstend= dst + dstlen, *dst0= dst;
7377   MY_UNICASE_INFO *uni_plane= cs->caseinfo;
7378   DBUG_ASSERT(src != dst || cs->caseup_multiply == 1);
7379 
7380   while ((src < srcend) &&
7381          (srcres= my_mb_wc_utf8mb4(cs, &wc,
7382                                    (uchar *) src, (uchar*) srcend)) > 0)
7383   {
7384     my_toupper_utf8mb4(uni_plane, &wc);
7385     if ((dstres= my_wc_mb_utf8mb4(cs, wc, (uchar*) dst, (uchar*) dstend)) <= 0)
7386       break;
7387     src+= srcres;
7388     dst+= dstres;
7389   }
7390   return (size_t) (dst - dst0);
7391 }
7392 
7393 
7394 static void
my_hash_sort_utf8mb4_nopad(CHARSET_INFO * cs,const uchar * s,size_t slen,ulong * nr1,ulong * nr2)7395 my_hash_sort_utf8mb4_nopad(CHARSET_INFO *cs, const uchar *s, size_t slen,
7396                      ulong *nr1, ulong *nr2)
7397 {
7398   my_wc_t wc;
7399   int res;
7400   const uchar *e= s + slen;
7401   MY_UNICASE_INFO *uni_plane= cs->caseinfo;
7402   register ulong m1= *nr1, m2= *nr2;
7403 
7404   while ((res= my_mb_wc_utf8mb4(cs, &wc, (uchar*) s, (uchar*) e)) > 0)
7405   {
7406     my_tosort_unicode(uni_plane, &wc, cs->state);
7407     MY_HASH_ADD_16(m1, m2, (uint) (wc & 0xFFFF));
7408     if (wc > 0xFFFF)
7409     {
7410        /*
7411         Put the highest byte only if it is non-zero,
7412         to make hash functions for utf8mb3 and utf8mb4
7413         compatible for BMP characters.
7414         This is useful to keep order of records in
7415         test results, e.g. for "SHOW GRANTS".
7416       */
7417       MY_HASH_ADD(m1, m2, (uint) ((wc >> 16) & 0xFF));
7418     }
7419     s+= res;
7420   }
7421   *nr1= m1;
7422   *nr2= m2;
7423 }
7424 
7425 
7426 static void
my_hash_sort_utf8mb4(CHARSET_INFO * cs,const uchar * s,size_t slen,ulong * nr1,ulong * nr2)7427 my_hash_sort_utf8mb4(CHARSET_INFO *cs, const uchar *s, size_t slen,
7428                      ulong *nr1, ulong *nr2)
7429 {
7430   /*
7431     Remove end space. We do this to be able to compare
7432     'A ' and 'A' as identical
7433   */
7434   const uchar *e= skip_trailing_space(s, slen);
7435   my_hash_sort_utf8mb4_nopad(cs, s, e - s, nr1, nr2);
7436 }
7437 
7438 
7439 static size_t
my_caseup_str_utf8mb4(CHARSET_INFO * cs,char * src)7440 my_caseup_str_utf8mb4(CHARSET_INFO *cs, char *src)
7441 {
7442   my_wc_t wc;
7443   int srcres, dstres;
7444   char *dst= src, *dst0= src;
7445   MY_UNICASE_INFO *uni_plane= cs->caseinfo;
7446   DBUG_ASSERT(cs->caseup_multiply == 1);
7447 
7448   while (*src &&
7449          (srcres= my_mb_wc_utf8mb4_no_range(cs, &wc, (uchar *) src)) > 0)
7450   {
7451     my_toupper_utf8mb4(uni_plane, &wc);
7452     if ((dstres= my_wc_mb_utf8mb4_no_range(cs, wc, (uchar*) dst)) <= 0)
7453       break;
7454     src+= srcres;
7455     dst+= dstres;
7456   }
7457   *dst= '\0';
7458   return (size_t) (dst - dst0);
7459 }
7460 
7461 
7462 static size_t
my_casedn_utf8mb4(CHARSET_INFO * cs,const char * src,size_t srclen,char * dst,size_t dstlen)7463 my_casedn_utf8mb4(CHARSET_INFO *cs,
7464                   const char *src, size_t srclen,
7465                   char *dst, size_t dstlen)
7466 {
7467   my_wc_t wc;
7468   int srcres, dstres;
7469   const char *srcend= src + srclen;
7470   char *dstend= dst + dstlen, *dst0= dst;
7471   MY_UNICASE_INFO *uni_plane= cs->caseinfo;
7472   DBUG_ASSERT(src != dst || cs->casedn_multiply == 1);
7473 
7474   while ((src < srcend) &&
7475          (srcres= my_mb_wc_utf8mb4(cs, &wc,
7476                                    (uchar*) src, (uchar*) srcend)) > 0)
7477   {
7478     my_tolower_utf8mb4(uni_plane, &wc);
7479     if ((dstres= my_wc_mb_utf8mb4(cs, wc, (uchar*) dst, (uchar*) dstend)) <= 0)
7480       break;
7481     src+= srcres;
7482     dst+= dstres;
7483   }
7484   return (size_t) (dst - dst0);
7485 }
7486 
7487 
7488 static size_t
my_casedn_str_utf8mb4(CHARSET_INFO * cs,char * src)7489 my_casedn_str_utf8mb4(CHARSET_INFO *cs, char *src)
7490 {
7491   my_wc_t wc;
7492   int srcres, dstres;
7493   char *dst= src, *dst0= src;
7494   MY_UNICASE_INFO *uni_plane= cs->caseinfo;
7495   DBUG_ASSERT(cs->casedn_multiply == 1);
7496 
7497   while (*src &&
7498          (srcres= my_mb_wc_utf8mb4_no_range(cs, &wc, (uchar *) src)) > 0)
7499   {
7500     my_tolower_utf8mb4(uni_plane, &wc);
7501     if ((dstres= my_wc_mb_utf8mb4_no_range(cs, wc, (uchar*) dst)) <= 0)
7502       break;
7503     src+= srcres;
7504     dst+= dstres;
7505   }
7506 
7507   /*
7508    In rare cases lower string can be shorter than
7509    the original string, for example:
7510 
7511    "U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE"
7512    (which is 0xC4B0 in utf8, i.e. two bytes)
7513 
7514    is converted into
7515 
7516    "U+0069 LATIN SMALL LETTER I"
7517    (which is 0x69 in utf8, i.e. one byte)
7518 
7519    So, we need to put '\0' terminator after converting.
7520   */
7521 
7522   *dst= '\0';
7523   return (size_t) (dst - dst0);
7524 }
7525 
7526 
7527 /**
7528   Compare 0-terminated UTF8 strings.
7529 
7530   @param  cs                  character set handler
7531   @param  s                   First 0-terminated string to compare
7532   @param  t                   Second 0-terminated string to compare
7533 
7534   @return Comparison result.
7535     @retval negative number if s < t
7536     @retval positive number if s > t
7537     @retval 0 is the strings are equal
7538 */
7539 
7540 static int
my_strcasecmp_utf8mb4(CHARSET_INFO * cs,const char * s,const char * t)7541 my_strcasecmp_utf8mb4(CHARSET_INFO *cs, const char *s, const char *t)
7542 {
7543   MY_UNICASE_INFO *uni_plane= cs->caseinfo;
7544   while (s[0] && t[0])
7545   {
7546     my_wc_t s_wc,t_wc;
7547 
7548     if ((uchar) s[0] < 128)
7549     {
7550       /*
7551         s[0] is between 0 and 127.
7552         It represents a single byte character.
7553         Convert it into weight according to collation.
7554       */
7555       s_wc= my_unicase_default_page00[(uchar) s[0]].tolower;
7556       s++;
7557     }
7558     else
7559     {
7560       int res= my_mb_wc_utf8mb4_no_range(cs, &s_wc, (const uchar*) s);
7561 
7562       /*
7563          In the case of wrong multibyte sequence we will
7564          call strcmp() for byte-to-byte comparison.
7565       */
7566       if (res <= 0)
7567         return strcmp(s, t);
7568       s+= res;
7569 
7570       my_tolower_utf8mb4(uni_plane, &s_wc);
7571     }
7572 
7573 
7574     /* Do the same for the second string */
7575 
7576     if ((uchar) t[0] < 128)
7577     {
7578       /* Convert single byte character into weight */
7579       t_wc= my_unicase_default_page00[(uchar) t[0]].tolower;
7580       t++;
7581     }
7582     else
7583     {
7584       int res= my_mb_wc_utf8mb4_no_range(cs, &t_wc, (const uchar*) t);
7585       if (res <= 0)
7586         return strcmp(s, t);
7587       t+= res;
7588 
7589       my_tolower_utf8mb4(uni_plane, &t_wc);
7590     }
7591 
7592     /* Now we have two weights, let's compare them */
7593     if ( s_wc != t_wc )
7594       return  ((int) s_wc) - ((int) t_wc);
7595   }
7596   return ((int) (uchar) s[0]) - ((int) (uchar) t[0]);
7597 }
7598 
7599 
7600 static int
my_wildcmp_utf8mb4(CHARSET_INFO * cs,const char * str,const char * strend,const char * wildstr,const char * wildend,int escape,int w_one,int w_many)7601 my_wildcmp_utf8mb4(CHARSET_INFO *cs,
7602                    const char *str, const char *strend,
7603                    const char *wildstr, const char *wildend,
7604                    int escape, int w_one, int w_many)
7605 {
7606   return my_wildcmp_unicode(cs, str, strend, wildstr, wildend,
7607                             escape, w_one, w_many, cs->caseinfo);
7608 }
7609 
7610 
7611 static int
my_charlen_utf8mb4(CHARSET_INFO * cs,const uchar * s,const uchar * e)7612 my_charlen_utf8mb4(CHARSET_INFO *cs __attribute__((unused)),
7613                    const uchar *s, const uchar *e)
7614 {
7615   uchar c;
7616 
7617   if (s >= e)
7618     return MY_CS_TOOSMALL;
7619 
7620   c= s[0];
7621   if (c < 0xf0)
7622     return my_valid_mbcharlen_utf8mb3(s, e);
7623 
7624   if (c < 0xf5)
7625   {
7626     if (s + 4 > e) /* We need 4 characters */
7627       return MY_CS_TOOSMALL4;
7628 
7629     if (!IS_UTF8MB4_STEP2(c, s[1], s[2], s[3]))
7630       return MY_CS_ILSEQ;
7631 
7632     return 4;
7633   }
7634 
7635   return MY_CS_ILSEQ;
7636 }
7637 
7638 
7639 #define MY_FUNCTION_NAME(x)       my_ ## x ## _utf8mb4
7640 #define CHARLEN(cs,str,end)       my_charlen_utf8mb4(cs,str,end)
7641 #define DEFINE_WELL_FORMED_CHAR_LENGTH_USING_CHARLEN
7642 #include "ctype-mb.inl"
7643 #undef MY_FUNCTION_NAME
7644 #undef CHARLEN
7645 #undef DEFINE_WELL_FORMED_CHAR_LENGTH_USING_CHARLEN
7646 /* my_well_formed_char_length_utf8mb4 */
7647 
7648 
7649 #define MY_FUNCTION_NAME(x)      my_ ## x ## _utf8mb4_general_ci
7650 #define DEFINE_STRNXFRM_UNICODE
7651 #define DEFINE_STRNXFRM_UNICODE_NOPAD
7652 #define MY_MB_WC(cs, pwc, s, e)  my_mb_wc_utf8mb4_quick(pwc, s, e)
7653 #define OPTIMIZE_ASCII           1
7654 #define UNICASE_MAXCHAR          MY_UNICASE_INFO_DEFAULT_MAXCHAR
7655 #define UNICASE_PAGE0            my_unicase_default_page00
7656 #define UNICASE_PAGES            my_unicase_default_pages
7657 #define IS_MB4_CHAR(b0,b1,b2,b3) IS_UTF8MB4_STEP3(b0,b1,b2,b3)
7658 #define WEIGHT_ILSEQ(x)          (0xFF0000 + (uchar) (x))
7659 #define WEIGHT_MB1(b0)           my_weight_mb1_utf8_general_ci(b0)
7660 #define WEIGHT_MB2(b0,b1)        my_weight_mb2_utf8_general_ci(b0,b1)
7661 #define WEIGHT_MB3(b0,b1,b2)     my_weight_mb3_utf8_general_ci(b0,b1,b2)
7662 /*
7663   All non-BMP characters have the same weight.
7664 */
7665 #define WEIGHT_MB4(b0,b1,b2,b3)  MY_CS_REPLACEMENT_CHARACTER
7666 #include "strcoll.inl"
7667 
7668 
7669 #define MY_FUNCTION_NAME(x)      my_ ## x ## _utf8mb4_bin
7670 #define WEIGHT_ILSEQ(x)          (0xFF0000 + (uchar) (x))
7671 #define WEIGHT_MB1(b0)           ((int) (uchar) (b0))
7672 #define WEIGHT_MB2(b0,b1)        ((int) UTF8MB2_CODE(b0,b1))
7673 #define WEIGHT_MB3(b0,b1,b2)     ((int) UTF8MB3_CODE(b0,b1,b2))
7674 #define WEIGHT_MB4(b0,b1,b2,b3)  ((int) UTF8MB4_CODE(b0,b1,b2,b3))
7675 #include "strcoll.inl"
7676 
7677 
7678 #define DEFINE_STRNNCOLLSP_NOPAD
7679 #define MY_FUNCTION_NAME(x)      my_ ## x ## _utf8mb4_general_nopad_ci
7680 #define IS_MB4_CHAR(b0,b1,b2,b3) IS_UTF8MB4_STEP3(b0,b1,b2,b3)
7681 #define WEIGHT_ILSEQ(x)          (0xFF0000 + (uchar) (x))
7682 #define WEIGHT_MB1(b0)           my_weight_mb1_utf8_general_ci(b0)
7683 #define WEIGHT_MB2(b0,b1)        my_weight_mb2_utf8_general_ci(b0,b1)
7684 #define WEIGHT_MB3(b0,b1,b2)     my_weight_mb3_utf8_general_ci(b0,b1,b2)
7685 /*
7686   All non-BMP characters have the same weight.
7687 */
7688 #define WEIGHT_MB4(b0,b1,b2,b3)  MY_CS_REPLACEMENT_CHARACTER
7689 #include "strcoll.inl"
7690 
7691 
7692 #define DEFINE_STRNNCOLLSP_NOPAD
7693 #define MY_FUNCTION_NAME(x)      my_ ## x ## _utf8mb4_nopad_bin
7694 #define WEIGHT_ILSEQ(x)          (0xFF0000 + (uchar) (x))
7695 #define WEIGHT_MB1(b0)           ((int) (uchar) (b0))
7696 #define WEIGHT_MB2(b0,b1)        ((int) UTF8MB2_CODE(b0,b1))
7697 #define WEIGHT_MB3(b0,b1,b2)     ((int) UTF8MB3_CODE(b0,b1,b2))
7698 #define WEIGHT_MB4(b0,b1,b2,b3)  ((int) UTF8MB4_CODE(b0,b1,b2,b3))
7699 #include "strcoll.inl"
7700 
7701 
7702 static MY_COLLATION_HANDLER my_collation_utf8mb4_general_ci_handler=
7703 {
7704   NULL,               /* init */
7705   my_strnncoll_utf8mb4_general_ci,
7706   my_strnncollsp_utf8mb4_general_ci,
7707   my_strnncollsp_nchars_utf8mb4_general_ci,
7708   my_strnxfrm_utf8mb4_general_ci,
7709   my_strnxfrmlen_unicode,
7710   my_like_range_mb,
7711   my_wildcmp_utf8mb4,
7712   my_strcasecmp_utf8mb4,
7713   my_instr_mb,
7714   my_hash_sort_utf8mb4,
7715   my_propagate_complex
7716 };
7717 
7718 
7719 static MY_COLLATION_HANDLER my_collation_utf8mb4_bin_handler =
7720 {
7721     NULL,              /* init */
7722     my_strnncoll_utf8mb4_bin,
7723     my_strnncollsp_utf8mb4_bin,
7724     my_strnncollsp_nchars_utf8mb4_bin,
7725     my_strnxfrm_unicode_full_bin,
7726     my_strnxfrmlen_unicode_full_bin,
7727     my_like_range_mb,
7728     my_wildcmp_mb_bin,
7729     my_strcasecmp_mb_bin,
7730     my_instr_mb,
7731     my_hash_sort_mb_bin,
7732     my_propagate_simple
7733 };
7734 
7735 
7736 static MY_COLLATION_HANDLER my_collation_utf8mb4_general_nopad_ci_handler=
7737 {
7738   NULL,               /* init */
7739   my_strnncoll_utf8mb4_general_ci,
7740   my_strnncollsp_utf8mb4_general_nopad_ci,
7741   my_strnncollsp_nchars_utf8mb4_general_nopad_ci,
7742   my_strnxfrm_nopad_utf8mb4_general_ci,
7743   my_strnxfrmlen_unicode,
7744   my_like_range_mb,
7745   my_wildcmp_utf8mb4,
7746   my_strcasecmp_utf8mb4,
7747   my_instr_mb,
7748   my_hash_sort_utf8mb4_nopad,
7749   my_propagate_complex
7750 };
7751 
7752 
7753 static MY_COLLATION_HANDLER my_collation_utf8mb4_nopad_bin_handler =
7754 {
7755   NULL,		/* init */
7756   my_strnncoll_utf8mb4_bin,
7757   my_strnncollsp_utf8mb4_nopad_bin,
7758   my_strnncollsp_nchars_utf8mb4_nopad_bin,
7759   my_strnxfrm_unicode_full_nopad_bin,
7760   my_strnxfrmlen_unicode_full_bin,
7761   my_like_range_mb,
7762   my_wildcmp_mb_bin,
7763   my_strcasecmp_mb_bin,
7764   my_instr_mb,
7765   my_hash_sort_mb_nopad_bin,
7766   my_propagate_simple
7767 };
7768 
7769 
7770 MY_CHARSET_HANDLER my_charset_utf8mb4_handler=
7771 {
7772   NULL,               /* init */
7773   my_numchars_mb,
7774   my_charpos_mb,
7775   my_lengthsp_8bit,
7776   my_numcells_mb,
7777   my_mb_wc_utf8mb4,
7778   my_wc_mb_utf8mb4,
7779   my_mb_ctype_mb,
7780   my_caseup_str_utf8mb4,
7781   my_casedn_str_utf8mb4,
7782   my_caseup_utf8mb4,
7783   my_casedn_utf8mb4,
7784   my_snprintf_8bit,
7785   my_long10_to_str_8bit,
7786   my_longlong10_to_str_8bit,
7787   my_fill_utf8,
7788   my_strntol_8bit,
7789   my_strntoul_8bit,
7790   my_strntoll_8bit,
7791   my_strntoull_8bit,
7792   my_strntod_8bit,
7793   my_strtoll10_8bit,
7794   my_strntoull10rnd_8bit,
7795   my_scan_8bit,
7796   my_charlen_utf8mb4,
7797   my_well_formed_char_length_utf8mb4,
7798   my_copy_fix_mb,
7799   my_wc_mb_utf8mb4,
7800 };
7801 
7802 
7803 
7804 struct charset_info_st my_charset_utf8mb4_general_ci=
7805 {
7806   45,0,0,              /* number       */
7807   MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_UNICODE_SUPPLEMENT,  /* state  */
7808   MY_UTF8MB4,         /* cs name      */
7809   MY_UTF8MB4_GENERAL_CI,/* name       */
7810   "UTF-8 Unicode",    /* comment      */
7811   NULL,               /* tailoring    */
7812   ctype_utf8mb4,      /* ctype        */
7813   to_lower_utf8mb4,   /* to_lower     */
7814   to_upper_utf8mb4,   /* to_upper     */
7815   to_upper_utf8mb4,   /* sort_order   */
7816   NULL,               /* uca          */
7817   NULL,               /* tab_to_uni   */
7818   NULL,               /* tab_from_uni */
7819   &my_unicase_default,/* caseinfo     */
7820   NULL,               /* state_map    */
7821   NULL,               /* ident_map    */
7822   1,                  /* strxfrm_multiply */
7823   1,                  /* caseup_multiply  */
7824   1,                  /* casedn_multiply  */
7825   1,                  /* mbminlen     */
7826   4,                  /* mbmaxlen     */
7827   0,                  /* min_sort_char */
7828   0xFFFF,             /* max_sort_char */
7829   ' ',                /* pad char      */
7830   0,                  /* escape_with_backslash_is_dangerous */
7831   1,                  /* levels_for_order   */
7832   &my_charset_utf8mb4_handler,
7833   &my_collation_utf8mb4_general_ci_handler
7834 };
7835 
7836 
7837 struct charset_info_st my_charset_utf8mb4_bin=
7838 {
7839   46,0,0,             /* number       */
7840   MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_STRNXFRM|MY_CS_UNICODE|
7841   MY_CS_UNICODE_SUPPLEMENT, /* state  */
7842   MY_UTF8MB4,         /* cs name      */
7843   MY_UTF8MB4_BIN,     /* name         */
7844   "UTF-8 Unicode",    /* comment      */
7845   NULL,               /* tailoring    */
7846   ctype_utf8mb4,      /* ctype        */
7847   to_lower_utf8mb4,   /* to_lower     */
7848   to_upper_utf8mb4,   /* to_upper     */
7849   NULL,               /* sort_order   */
7850   NULL,               /* uca          */
7851   NULL,               /* tab_to_uni   */
7852   NULL,               /* tab_from_uni */
7853   &my_unicase_default,/* caseinfo     */
7854   NULL,               /* state_map    */
7855   NULL,               /* ident_map    */
7856   1,                  /* strxfrm_multiply */
7857   1,                  /* caseup_multiply  */
7858   1,                  /* casedn_multiply  */
7859   1,                  /* mbminlen     */
7860   4,                  /* mbmaxlen     */
7861   0,                  /* min_sort_char */
7862   0xFFFF,             /* max_sort_char */
7863   ' ',                /* pad char      */
7864   0,                  /* escape_with_backslash_is_dangerous */
7865   1,                  /* levels_for_order   */
7866   &my_charset_utf8mb4_handler,
7867   &my_collation_utf8mb4_bin_handler
7868 };
7869 
7870 
7871 struct charset_info_st my_charset_utf8mb4_general_nopad_ci=
7872 {
7873   MY_NOPAD_ID(45),0,0,/* number       */
7874   MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_UNICODE_SUPPLEMENT|
7875   MY_CS_NOPAD,        /* state            */
7876   MY_UTF8MB4,         /* cs name          */
7877   MY_UTF8MB4_GENERAL_NOPAD_CI,/* name     */
7878   "UTF-8 Unicode",    /* comment          */
7879   NULL,               /* tailoring        */
7880   ctype_utf8mb4,      /* ctype            */
7881   to_lower_utf8mb4,   /* to_lower         */
7882   to_upper_utf8mb4,   /* to_upper         */
7883   to_upper_utf8mb4,   /* sort_order       */
7884   NULL,               /* uca              */
7885   NULL,               /* tab_to_uni       */
7886   NULL,               /* tab_from_uni     */
7887   &my_unicase_default,/* caseinfo         */
7888   NULL,               /* state_map        */
7889   NULL,               /* ident_map        */
7890   1,                  /* strxfrm_multiply */
7891   1,                  /* caseup_multiply  */
7892   1,                  /* casedn_multiply  */
7893   1,                  /* mbminlen         */
7894   4,                  /* mbmaxlen         */
7895   0,                  /* min_sort_char    */
7896   0xFFFF,             /* max_sort_char    */
7897   ' ',                /* pad char         */
7898   0,                  /* escape_with_backslash_is_dangerous */
7899   1,                  /* levels_for_order */
7900   &my_charset_utf8mb4_handler,
7901   &my_collation_utf8mb4_general_nopad_ci_handler
7902 };
7903 
7904 
7905 struct charset_info_st my_charset_utf8mb4_nopad_bin=
7906 {
7907   MY_NOPAD_ID(46),0,0, /* number          */
7908   MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_STRNXFRM|MY_CS_UNICODE|
7909   MY_CS_UNICODE_SUPPLEMENT|MY_CS_NOPAD, /* state  */
7910   MY_UTF8MB4,         /* cs name          */
7911   MY_UTF8MB4_NOPAD_BIN, /* name           */
7912   "UTF-8 Unicode",    /* comment          */
7913   NULL,               /* tailoring        */
7914   ctype_utf8mb4,      /* ctype            */
7915   to_lower_utf8mb4,   /* to_lower         */
7916   to_upper_utf8mb4,   /* to_upper         */
7917   NULL,               /* sort_order       */
7918   NULL,               /* uca              */
7919   NULL,               /* tab_to_uni       */
7920   NULL,               /* tab_from_uni     */
7921   &my_unicase_default,/* caseinfo         */
7922   NULL,               /* state_map        */
7923   NULL,               /* ident_map        */
7924   1,                  /* strxfrm_multiply */
7925   1,                  /* caseup_multiply  */
7926   1,                  /* casedn_multiply  */
7927   1,                  /* mbminlen         */
7928   4,                  /* mbmaxlen         */
7929   0,                  /* min_sort_char    */
7930   0xFFFF,             /* max_sort_char    */
7931   ' ',                /* pad char         */
7932   0,                  /* escape_with_backslash_is_dangerous */
7933   1,                  /* levels_for_order */
7934   &my_charset_utf8mb4_handler,
7935   &my_collation_utf8mb4_nopad_bin_handler
7936 };
7937 
7938 #endif /* HAVE_CHARSET_utf8mb4 */
7939