1// Generated by scripts/mapgen.py
2// 2023-08-14
3
4use super::fold::Fold;
5
6use core::char;
7pub fn lookup(orig: char) -> Fold {
8 // The code below is is intended to reduce the binary size from that of a simple 1:1 lookup table.
9 // It exploits two facts:
10 // 1. Many of the mappings form ranges mapped to other ranges.
11 // To benefit from this, we match on ranges instead of single numbers.
12 // Alone, this decreases the binary size but results in performance regression over the simple 1:1 lookup.
13 // 2. Most of the mappings are from relatively small chars (0 - 0x2CFF).
14 // To benefit from this, we use a jump table based on the high byte for this range.
15 // This more than recovers the performance regression from exploting fact #1, at least in the tested benchmark.
16 let from = orig as u32;
17 if from <= 0x2CFF {
18 let from = from as u16;
19 let high_byte = (from >> 8) as u8;
20 let low_byte = (from & 0xff) as u8;
21 let single_char: u16 = match high_byte {
22 0x00 => match low_byte {
23 x @ _ if 0x41 <= x && x <= 0x5a => from.wrapping_add(0x0020),
24 0xb5 => 0x03bc,
25 x @ _ if 0xc0 <= x && x <= 0xd6 => from.wrapping_add(0x0020),
26 x @ _ if 0xd8 <= x && x <= 0xde => from.wrapping_add(0x0020),
27 0xdf => return Fold::Two('\u{0073}', '\u{0073}'),
28 _ => from,
29 },
30 0x01 => match low_byte {
31 x @ _ if x <= 0x2e => from | 1,
32 0x30 => return Fold::Two('\u{0069}', '\u{0307}'),
33 x @ _ if 0x32 <= x && x <= 0x36 => from | 1,
34 x @ _ if 0x39 <= x && x <= 0x47 => (from + 1) & !1,
35 0x49 => return Fold::Two('\u{02bc}', '\u{006e}'),
36 x @ _ if 0x4a <= x && x <= 0x76 => from | 1,
37 0x78 => 0x00ff,
38 x @ _ if 0x79 <= x && x <= 0x7d => (from + 1) & !1,
39 0x7f => 0x0073,
40 0x81 => 0x0253,
41 x @ _ if 0x82 <= x && x <= 0x84 => from | 1,
42 0x86 => 0x0254,
43 0x87 => 0x0188,
44 x @ _ if 0x89 <= x && x <= 0x8a => from.wrapping_add(0x00cd),
45 0x8b => 0x018c,
46 0x8e => 0x01dd,
47 0x8f => 0x0259,
48 0x90 => 0x025b,
49 0x91 => 0x0192,
50 0x93 => 0x0260,
51 0x94 => 0x0263,
52 0x96 => 0x0269,
53 0x97 => 0x0268,
54 0x98 => 0x0199,
55 0x9c => 0x026f,
56 0x9d => 0x0272,
57 0x9f => 0x0275,
58 x @ _ if 0xa0 <= x && x <= 0xa4 => from | 1,
59 0xa6 => 0x0280,
60 0xa7 => 0x01a8,
61 0xa9 => 0x0283,
62 0xac => 0x01ad,
63 0xae => 0x0288,
64 0xaf => 0x01b0,
65 x @ _ if 0xb1 <= x && x <= 0xb2 => from.wrapping_add(0x00d9),
66 x @ _ if 0xb3 <= x && x <= 0xb5 => (from + 1) & !1,
67 0xb7 => 0x0292,
68 0xb8 => 0x01b9,
69 0xbc => 0x01bd,
70 0xc4 => 0x01c6,
71 0xc5 => 0x01c6,
72 0xc7 => 0x01c9,
73 0xc8 => 0x01c9,
74 0xca => 0x01cc,
75 x @ _ if 0xcb <= x && x <= 0xdb => (from + 1) & !1,
76 x @ _ if 0xde <= x && x <= 0xee => from | 1,
77 0xf0 => return Fold::Two('\u{006a}', '\u{030c}'),
78 0xf1 => 0x01f3,
79 x @ _ if 0xf2 <= x && x <= 0xf4 => from | 1,
80 0xf6 => 0x0195,
81 0xf7 => 0x01bf,
82 x @ _ if 0xf8 <= x => from | 1,
83 _ => from,
84 },
85 0x02 => match low_byte {
86 x @ _ if x <= 0x1e => from | 1,
87 0x20 => 0x019e,
88 x @ _ if 0x22 <= x && x <= 0x32 => from | 1,
89 0x3a => 0x2c65,
90 0x3b => 0x023c,
91 0x3d => 0x019a,
92 0x3e => 0x2c66,
93 0x41 => 0x0242,
94 0x43 => 0x0180,
95 0x44 => 0x0289,
96 0x45 => 0x028c,
97 x @ _ if 0x46 <= x && x <= 0x4e => from | 1,
98 _ => from,
99 },
100 0x03 => match low_byte {
101 0x45 => 0x03b9,
102 x @ _ if 0x70 <= x && x <= 0x72 => from | 1,
103 0x76 => 0x0377,
104 0x7f => 0x03f3,
105 0x86 => 0x03ac,
106 x @ _ if 0x88 <= x && x <= 0x8a => from.wrapping_add(0x0025),
107 0x8c => 0x03cc,
108 x @ _ if 0x8e <= x && x <= 0x8f => from.wrapping_add(0x003f),
109 0x90 => return Fold::Three('\u{03b9}', '\u{0308}', '\u{0301}'),
110 x @ _ if 0x91 <= x && x <= 0xa1 => from.wrapping_add(0x0020),
111 x @ _ if 0xa3 <= x && x <= 0xab => from.wrapping_add(0x0020),
112 0xb0 => return Fold::Three('\u{03c5}', '\u{0308}', '\u{0301}'),
113 0xc2 => 0x03c3,
114 0xcf => 0x03d7,
115 0xd0 => 0x03b2,
116 0xd1 => 0x03b8,
117 0xd5 => 0x03c6,
118 0xd6 => 0x03c0,
119 x @ _ if 0xd8 <= x && x <= 0xee => from | 1,
120 0xf0 => 0x03ba,
121 0xf1 => 0x03c1,
122 0xf4 => 0x03b8,
123 0xf5 => 0x03b5,
124 0xf7 => 0x03f8,
125 0xf9 => 0x03f2,
126 0xfa => 0x03fb,
127 x @ _ if 0xfd <= x => from.wrapping_sub(0x0082),
128 _ => from,
129 },
130 0x04 => match low_byte {
131 x @ _ if x <= 0x0f => from.wrapping_add(0x0050),
132 x @ _ if 0x10 <= x && x <= 0x2f => from.wrapping_add(0x0020),
133 x @ _ if 0x60 <= x && x <= 0x80 => from | 1,
134 x @ _ if 0x8a <= x && x <= 0xbe => from | 1,
135 0xc0 => 0x04cf,
136 x @ _ if 0xc1 <= x && x <= 0xcd => (from + 1) & !1,
137 x @ _ if 0xd0 <= x => from | 1,
138 _ => from,
139 },
140 0x05 => match low_byte {
141 x @ _ if x <= 0x2e => from | 1,
142 x @ _ if 0x31 <= x && x <= 0x56 => from.wrapping_add(0x0030),
143 0x87 => return Fold::Two('\u{0565}', '\u{0582}'),
144 _ => from,
145 },
146 0x06 => from,
147 0x07 => from,
148 0x08 => from,
149 0x09 => from,
150 0x0a => from,
151 0x0b => from,
152 0x0c => from,
153 0x0d => from,
154 0x0e => from,
155 0x0f => from,
156 0x10 => match low_byte {
157 x @ _ if 0xa0 <= x && x <= 0xc5 => from.wrapping_add(0x1c60),
158 0xc7 => 0x2d27,
159 0xcd => 0x2d2d,
160 _ => from,
161 },
162 0x11 => from,
163 0x12 => from,
164 0x13 => match low_byte {
165 x @ _ if 0xf8 <= x && x <= 0xfd => from.wrapping_sub(0x0008),
166 _ => from,
167 },
168 0x14 => from,
169 0x15 => from,
170 0x16 => from,
171 0x17 => from,
172 0x18 => from,
173 0x19 => from,
174 0x1a => from,
175 0x1b => from,
176 0x1c => match low_byte {
177 0x80 => 0x0432,
178 0x81 => 0x0434,
179 0x82 => 0x043e,
180 x @ _ if 0x83 <= x && x <= 0x84 => from.wrapping_sub(0x1842),
181 0x85 => 0x0442,
182 0x86 => 0x044a,
183 0x87 => 0x0463,
184 0x88 => 0xa64b,
185 x @ _ if 0x90 <= x && x <= 0xba => from.wrapping_sub(0x0bc0),
186 x @ _ if 0xbd <= x && x <= 0xbf => from.wrapping_sub(0x0bc0),
187 _ => from,
188 },
189 0x1d => from,
190 0x1e => match low_byte {
191 x @ _ if x <= 0x94 => from | 1,
192 0x96 => return Fold::Two('\u{0068}', '\u{0331}'),
193 0x97 => return Fold::Two('\u{0074}', '\u{0308}'),
194 0x98 => return Fold::Two('\u{0077}', '\u{030a}'),
195 0x99 => return Fold::Two('\u{0079}', '\u{030a}'),
196 0x9a => return Fold::Two('\u{0061}', '\u{02be}'),
197 0x9b => 0x1e61,
198 0x9e => return Fold::Two('\u{0073}', '\u{0073}'),
199 x @ _ if 0xa0 <= x && x <= 0xfe => from | 1,
200 _ => from,
201 },
202 0x1f => match low_byte {
203 x @ _ if 0x08 <= x && x <= 0x0f => from.wrapping_sub(0x0008),
204 x @ _ if 0x18 <= x && x <= 0x1d => from.wrapping_sub(0x0008),
205 x @ _ if 0x28 <= x && x <= 0x2f => from.wrapping_sub(0x0008),
206 x @ _ if 0x38 <= x && x <= 0x3f => from.wrapping_sub(0x0008),
207 x @ _ if 0x48 <= x && x <= 0x4d => from.wrapping_sub(0x0008),
208 0x50 => return Fold::Two('\u{03c5}', '\u{0313}'),
209 0x52 => return Fold::Three('\u{03c5}', '\u{0313}', '\u{0300}'),
210 0x54 => return Fold::Three('\u{03c5}', '\u{0313}', '\u{0301}'),
211 0x56 => return Fold::Three('\u{03c5}', '\u{0313}', '\u{0342}'),
212 x @ _ if 0x59 <= x && x <= 0x5f => {
213 if (from & 1) == 1 {
214 from.wrapping_sub(0x0008)
215 } else {
216 from
217 }
218 }
219 x @ _ if 0x68 <= x && x <= 0x6f => from.wrapping_sub(0x0008),
220 0x80 => return Fold::Two('\u{1f00}', '\u{03b9}'),
221 0x81 => return Fold::Two('\u{1f01}', '\u{03b9}'),
222 0x82 => return Fold::Two('\u{1f02}', '\u{03b9}'),
223 0x83 => return Fold::Two('\u{1f03}', '\u{03b9}'),
224 0x84 => return Fold::Two('\u{1f04}', '\u{03b9}'),
225 0x85 => return Fold::Two('\u{1f05}', '\u{03b9}'),
226 0x86 => return Fold::Two('\u{1f06}', '\u{03b9}'),
227 0x87 => return Fold::Two('\u{1f07}', '\u{03b9}'),
228 0x88 => return Fold::Two('\u{1f00}', '\u{03b9}'),
229 0x89 => return Fold::Two('\u{1f01}', '\u{03b9}'),
230 0x8a => return Fold::Two('\u{1f02}', '\u{03b9}'),
231 0x8b => return Fold::Two('\u{1f03}', '\u{03b9}'),
232 0x8c => return Fold::Two('\u{1f04}', '\u{03b9}'),
233 0x8d => return Fold::Two('\u{1f05}', '\u{03b9}'),
234 0x8e => return Fold::Two('\u{1f06}', '\u{03b9}'),
235 0x8f => return Fold::Two('\u{1f07}', '\u{03b9}'),
236 0x90 => return Fold::Two('\u{1f20}', '\u{03b9}'),
237 0x91 => return Fold::Two('\u{1f21}', '\u{03b9}'),
238 0x92 => return Fold::Two('\u{1f22}', '\u{03b9}'),
239 0x93 => return Fold::Two('\u{1f23}', '\u{03b9}'),
240 0x94 => return Fold::Two('\u{1f24}', '\u{03b9}'),
241 0x95 => return Fold::Two('\u{1f25}', '\u{03b9}'),
242 0x96 => return Fold::Two('\u{1f26}', '\u{03b9}'),
243 0x97 => return Fold::Two('\u{1f27}', '\u{03b9}'),
244 0x98 => return Fold::Two('\u{1f20}', '\u{03b9}'),
245 0x99 => return Fold::Two('\u{1f21}', '\u{03b9}'),
246 0x9a => return Fold::Two('\u{1f22}', '\u{03b9}'),
247 0x9b => return Fold::Two('\u{1f23}', '\u{03b9}'),
248 0x9c => return Fold::Two('\u{1f24}', '\u{03b9}'),
249 0x9d => return Fold::Two('\u{1f25}', '\u{03b9}'),
250 0x9e => return Fold::Two('\u{1f26}', '\u{03b9}'),
251 0x9f => return Fold::Two('\u{1f27}', '\u{03b9}'),
252 0xa0 => return Fold::Two('\u{1f60}', '\u{03b9}'),
253 0xa1 => return Fold::Two('\u{1f61}', '\u{03b9}'),
254 0xa2 => return Fold::Two('\u{1f62}', '\u{03b9}'),
255 0xa3 => return Fold::Two('\u{1f63}', '\u{03b9}'),
256 0xa4 => return Fold::Two('\u{1f64}', '\u{03b9}'),
257 0xa5 => return Fold::Two('\u{1f65}', '\u{03b9}'),
258 0xa6 => return Fold::Two('\u{1f66}', '\u{03b9}'),
259 0xa7 => return Fold::Two('\u{1f67}', '\u{03b9}'),
260 0xa8 => return Fold::Two('\u{1f60}', '\u{03b9}'),
261 0xa9 => return Fold::Two('\u{1f61}', '\u{03b9}'),
262 0xaa => return Fold::Two('\u{1f62}', '\u{03b9}'),
263 0xab => return Fold::Two('\u{1f63}', '\u{03b9}'),
264 0xac => return Fold::Two('\u{1f64}', '\u{03b9}'),
265 0xad => return Fold::Two('\u{1f65}', '\u{03b9}'),
266 0xae => return Fold::Two('\u{1f66}', '\u{03b9}'),
267 0xaf => return Fold::Two('\u{1f67}', '\u{03b9}'),
268 0xb2 => return Fold::Two('\u{1f70}', '\u{03b9}'),
269 0xb3 => return Fold::Two('\u{03b1}', '\u{03b9}'),
270 0xb4 => return Fold::Two('\u{03ac}', '\u{03b9}'),
271 0xb6 => return Fold::Two('\u{03b1}', '\u{0342}'),
272 0xb7 => return Fold::Three('\u{03b1}', '\u{0342}', '\u{03b9}'),
273 x @ _ if 0xb8 <= x && x <= 0xb9 => from.wrapping_sub(0x0008),
274 x @ _ if 0xba <= x && x <= 0xbb => from.wrapping_sub(0x004a),
275 0xbc => return Fold::Two('\u{03b1}', '\u{03b9}'),
276 0xbe => 0x03b9,
277 0xc2 => return Fold::Two('\u{1f74}', '\u{03b9}'),
278 0xc3 => return Fold::Two('\u{03b7}', '\u{03b9}'),
279 0xc4 => return Fold::Two('\u{03ae}', '\u{03b9}'),
280 0xc6 => return Fold::Two('\u{03b7}', '\u{0342}'),
281 0xc7 => return Fold::Three('\u{03b7}', '\u{0342}', '\u{03b9}'),
282 x @ _ if 0xc8 <= x && x <= 0xcb => from.wrapping_sub(0x0056),
283 0xcc => return Fold::Two('\u{03b7}', '\u{03b9}'),
284 0xd2 => return Fold::Three('\u{03b9}', '\u{0308}', '\u{0300}'),
285 0xd3 => return Fold::Three('\u{03b9}', '\u{0308}', '\u{0301}'),
286 0xd6 => return Fold::Two('\u{03b9}', '\u{0342}'),
287 0xd7 => return Fold::Three('\u{03b9}', '\u{0308}', '\u{0342}'),
288 x @ _ if 0xd8 <= x && x <= 0xd9 => from.wrapping_sub(0x0008),
289 x @ _ if 0xda <= x && x <= 0xdb => from.wrapping_sub(0x0064),
290 0xe2 => return Fold::Three('\u{03c5}', '\u{0308}', '\u{0300}'),
291 0xe3 => return Fold::Three('\u{03c5}', '\u{0308}', '\u{0301}'),
292 0xe4 => return Fold::Two('\u{03c1}', '\u{0313}'),
293 0xe6 => return Fold::Two('\u{03c5}', '\u{0342}'),
294 0xe7 => return Fold::Three('\u{03c5}', '\u{0308}', '\u{0342}'),
295 x @ _ if 0xe8 <= x && x <= 0xe9 => from.wrapping_sub(0x0008),
296 x @ _ if 0xea <= x && x <= 0xeb => from.wrapping_sub(0x0070),
297 0xec => 0x1fe5,
298 0xf2 => return Fold::Two('\u{1f7c}', '\u{03b9}'),
299 0xf3 => return Fold::Two('\u{03c9}', '\u{03b9}'),
300 0xf4 => return Fold::Two('\u{03ce}', '\u{03b9}'),
301 0xf6 => return Fold::Two('\u{03c9}', '\u{0342}'),
302 0xf7 => return Fold::Three('\u{03c9}', '\u{0342}', '\u{03b9}'),
303 x @ _ if 0xf8 <= x && x <= 0xf9 => from.wrapping_sub(0x0080),
304 x @ _ if 0xfa <= x && x <= 0xfb => from.wrapping_sub(0x007e),
305 0xfc => return Fold::Two('\u{03c9}', '\u{03b9}'),
306 _ => from,
307 },
308 0x20 => from,
309 0x21 => match low_byte {
310 0x26 => 0x03c9,
311 0x2a => 0x006b,
312 0x2b => 0x00e5,
313 0x32 => 0x214e,
314 x @ _ if 0x60 <= x && x <= 0x6f => from.wrapping_add(0x0010),
315 0x83 => 0x2184,
316 _ => from,
317 },
318 0x22 => from,
319 0x23 => from,
320 0x24 => match low_byte {
321 x @ _ if 0xb6 <= x && x <= 0xcf => from.wrapping_add(0x001a),
322 _ => from,
323 },
324 0x25 => from,
325 0x26 => from,
326 0x27 => from,
327 0x28 => from,
328 0x29 => from,
329 0x2a => from,
330 0x2b => from,
331 0x2c => match low_byte {
332 x @ _ if x <= 0x2f => from.wrapping_add(0x0030),
333 0x60 => 0x2c61,
334 0x62 => 0x026b,
335 0x63 => 0x1d7d,
336 0x64 => 0x027d,
337 x @ _ if 0x67 <= x && x <= 0x6b => (from + 1) & !1,
338 0x6d => 0x0251,
339 0x6e => 0x0271,
340 0x6f => 0x0250,
341 0x70 => 0x0252,
342 0x72 => 0x2c73,
343 0x75 => 0x2c76,
344 x @ _ if 0x7e <= x && x <= 0x7f => from.wrapping_sub(0x2a3f),
345 x @ _ if 0x80 <= x && x <= 0xe2 => from | 1,
346 x @ _ if 0xeb <= x && x <= 0xed => (from + 1) & !1,
347 0xf2 => 0x2cf3,
348 _ => from,
349 },
350 _ => from,
351 };
352 Fold::One(char::from_u32(single_char as u32).unwrap_or(orig))
353 } else {
354 let single_char: u32 = match from {
355 x @ _ if 0xa640 <= x && x <= 0xa66c => from | 1,
356 x @ _ if 0xa680 <= x && x <= 0xa69a => from | 1,
357 x @ _ if 0xa722 <= x && x <= 0xa72e => from | 1,
358 x @ _ if 0xa732 <= x && x <= 0xa76e => from | 1,
359 x @ _ if 0xa779 <= x && x <= 0xa77b => (from + 1) & !1,
360 0xa77d => 0x1d79,
361 x @ _ if 0xa77e <= x && x <= 0xa786 => from | 1,
362 0xa78b => 0xa78c,
363 0xa78d => 0x0265,
364 x @ _ if 0xa790 <= x && x <= 0xa792 => from | 1,
365 x @ _ if 0xa796 <= x && x <= 0xa7a8 => from | 1,
366 0xa7aa => 0x0266,
367 0xa7ab => 0x025c,
368 0xa7ac => 0x0261,
369 0xa7ad => 0x026c,
370 0xa7ae => 0x026a,
371 0xa7b0 => 0x029e,
372 0xa7b1 => 0x0287,
373 0xa7b2 => 0x029d,
374 0xa7b3 => 0xab53,
375 x @ _ if 0xa7b4 <= x && x <= 0xa7c2 => from | 1,
376 0xa7c4 => 0xa794,
377 0xa7c5 => 0x0282,
378 0xa7c6 => 0x1d8e,
379 x @ _ if 0xa7c7 <= x && x <= 0xa7c9 => (from + 1) & !1,
380 0xa7d0 => 0xa7d1,
381 x @ _ if 0xa7d6 <= x && x <= 0xa7d8 => from | 1,
382 0xa7f5 => 0xa7f6,
383 x @ _ if 0xab70 <= x && x <= 0xabbf => from.wrapping_sub(0x97d0),
384 0xfb00 => return Fold::Two('\u{0066}', '\u{0066}'),
385 0xfb01 => return Fold::Two('\u{0066}', '\u{0069}'),
386 0xfb02 => return Fold::Two('\u{0066}', '\u{006c}'),
387 0xfb03 => return Fold::Three('\u{0066}', '\u{0066}', '\u{0069}'),
388 0xfb04 => return Fold::Three('\u{0066}', '\u{0066}', '\u{006c}'),
389 0xfb05 => return Fold::Two('\u{0073}', '\u{0074}'),
390 0xfb06 => return Fold::Two('\u{0073}', '\u{0074}'),
391 0xfb13 => return Fold::Two('\u{0574}', '\u{0576}'),
392 0xfb14 => return Fold::Two('\u{0574}', '\u{0565}'),
393 0xfb15 => return Fold::Two('\u{0574}', '\u{056b}'),
394 0xfb16 => return Fold::Two('\u{057e}', '\u{0576}'),
395 0xfb17 => return Fold::Two('\u{0574}', '\u{056d}'),
396 x @ _ if 0xff21 <= x && x <= 0xff3a => from.wrapping_add(0x0020),
397 x @ _ if 0x10400 <= x && x <= 0x10427 => from.wrapping_add(0x0028),
398 x @ _ if 0x104b0 <= x && x <= 0x104d3 => from.wrapping_add(0x0028),
399 x @ _ if 0x10570 <= x && x <= 0x1057a => from.wrapping_add(0x0027),
400 x @ _ if 0x1057c <= x && x <= 0x1058a => from.wrapping_add(0x0027),
401 x @ _ if 0x1058c <= x && x <= 0x10592 => from.wrapping_add(0x0027),
402 x @ _ if 0x10594 <= x && x <= 0x10595 => from.wrapping_add(0x0027),
403 x @ _ if 0x10c80 <= x && x <= 0x10cb2 => from.wrapping_add(0x0040),
404 x @ _ if 0x118a0 <= x && x <= 0x118bf => from.wrapping_add(0x0020),
405 x @ _ if 0x16e40 <= x && x <= 0x16e5f => from.wrapping_add(0x0020),
406 x @ _ if 0x1e900 <= x && x <= 0x1e921 => from.wrapping_add(0x0022),
407 _ => from,
408 };
409 Fold::One(char::from_u32(single_char).unwrap_or(orig))
410 }
411}
412
413#[test]
414fn lookup_consistency() {
415 fn lookup_naive(orig: char) -> Fold {
416 let single_char = match orig as u32 {
417 0x0041 => 0x0061,
418 0x0042 => 0x0062,
419 0x0043 => 0x0063,
420 0x0044 => 0x0064,
421 0x0045 => 0x0065,
422 0x0046 => 0x0066,
423 0x0047 => 0x0067,
424 0x0048 => 0x0068,
425 0x0049 => 0x0069,
426 0x004a => 0x006a,
427 0x004b => 0x006b,
428 0x004c => 0x006c,
429 0x004d => 0x006d,
430 0x004e => 0x006e,
431 0x004f => 0x006f,
432 0x0050 => 0x0070,
433 0x0051 => 0x0071,
434 0x0052 => 0x0072,
435 0x0053 => 0x0073,
436 0x0054 => 0x0074,
437 0x0055 => 0x0075,
438 0x0056 => 0x0076,
439 0x0057 => 0x0077,
440 0x0058 => 0x0078,
441 0x0059 => 0x0079,
442 0x005a => 0x007a,
443 0x00b5 => 0x03bc,
444 0x00c0 => 0x00e0,
445 0x00c1 => 0x00e1,
446 0x00c2 => 0x00e2,
447 0x00c3 => 0x00e3,
448 0x00c4 => 0x00e4,
449 0x00c5 => 0x00e5,
450 0x00c6 => 0x00e6,
451 0x00c7 => 0x00e7,
452 0x00c8 => 0x00e8,
453 0x00c9 => 0x00e9,
454 0x00ca => 0x00ea,
455 0x00cb => 0x00eb,
456 0x00cc => 0x00ec,
457 0x00cd => 0x00ed,
458 0x00ce => 0x00ee,
459 0x00cf => 0x00ef,
460 0x00d0 => 0x00f0,
461 0x00d1 => 0x00f1,
462 0x00d2 => 0x00f2,
463 0x00d3 => 0x00f3,
464 0x00d4 => 0x00f4,
465 0x00d5 => 0x00f5,
466 0x00d6 => 0x00f6,
467 0x00d8 => 0x00f8,
468 0x00d9 => 0x00f9,
469 0x00da => 0x00fa,
470 0x00db => 0x00fb,
471 0x00dc => 0x00fc,
472 0x00dd => 0x00fd,
473 0x00de => 0x00fe,
474 0x00df => return Fold::Two('\u{0073}', '\u{0073}'),
475 0x0100 => 0x0101,
476 0x0102 => 0x0103,
477 0x0104 => 0x0105,
478 0x0106 => 0x0107,
479 0x0108 => 0x0109,
480 0x010a => 0x010b,
481 0x010c => 0x010d,
482 0x010e => 0x010f,
483 0x0110 => 0x0111,
484 0x0112 => 0x0113,
485 0x0114 => 0x0115,
486 0x0116 => 0x0117,
487 0x0118 => 0x0119,
488 0x011a => 0x011b,
489 0x011c => 0x011d,
490 0x011e => 0x011f,
491 0x0120 => 0x0121,
492 0x0122 => 0x0123,
493 0x0124 => 0x0125,
494 0x0126 => 0x0127,
495 0x0128 => 0x0129,
496 0x012a => 0x012b,
497 0x012c => 0x012d,
498 0x012e => 0x012f,
499 0x0130 => return Fold::Two('\u{0069}', '\u{0307}'),
500 0x0132 => 0x0133,
501 0x0134 => 0x0135,
502 0x0136 => 0x0137,
503 0x0139 => 0x013a,
504 0x013b => 0x013c,
505 0x013d => 0x013e,
506 0x013f => 0x0140,
507 0x0141 => 0x0142,
508 0x0143 => 0x0144,
509 0x0145 => 0x0146,
510 0x0147 => 0x0148,
511 0x0149 => return Fold::Two('\u{02bc}', '\u{006e}'),
512 0x014a => 0x014b,
513 0x014c => 0x014d,
514 0x014e => 0x014f,
515 0x0150 => 0x0151,
516 0x0152 => 0x0153,
517 0x0154 => 0x0155,
518 0x0156 => 0x0157,
519 0x0158 => 0x0159,
520 0x015a => 0x015b,
521 0x015c => 0x015d,
522 0x015e => 0x015f,
523 0x0160 => 0x0161,
524 0x0162 => 0x0163,
525 0x0164 => 0x0165,
526 0x0166 => 0x0167,
527 0x0168 => 0x0169,
528 0x016a => 0x016b,
529 0x016c => 0x016d,
530 0x016e => 0x016f,
531 0x0170 => 0x0171,
532 0x0172 => 0x0173,
533 0x0174 => 0x0175,
534 0x0176 => 0x0177,
535 0x0178 => 0x00ff,
536 0x0179 => 0x017a,
537 0x017b => 0x017c,
538 0x017d => 0x017e,
539 0x017f => 0x0073,
540 0x0181 => 0x0253,
541 0x0182 => 0x0183,
542 0x0184 => 0x0185,
543 0x0186 => 0x0254,
544 0x0187 => 0x0188,
545 0x0189 => 0x0256,
546 0x018a => 0x0257,
547 0x018b => 0x018c,
548 0x018e => 0x01dd,
549 0x018f => 0x0259,
550 0x0190 => 0x025b,
551 0x0191 => 0x0192,
552 0x0193 => 0x0260,
553 0x0194 => 0x0263,
554 0x0196 => 0x0269,
555 0x0197 => 0x0268,
556 0x0198 => 0x0199,
557 0x019c => 0x026f,
558 0x019d => 0x0272,
559 0x019f => 0x0275,
560 0x01a0 => 0x01a1,
561 0x01a2 => 0x01a3,
562 0x01a4 => 0x01a5,
563 0x01a6 => 0x0280,
564 0x01a7 => 0x01a8,
565 0x01a9 => 0x0283,
566 0x01ac => 0x01ad,
567 0x01ae => 0x0288,
568 0x01af => 0x01b0,
569 0x01b1 => 0x028a,
570 0x01b2 => 0x028b,
571 0x01b3 => 0x01b4,
572 0x01b5 => 0x01b6,
573 0x01b7 => 0x0292,
574 0x01b8 => 0x01b9,
575 0x01bc => 0x01bd,
576 0x01c4 => 0x01c6,
577 0x01c5 => 0x01c6,
578 0x01c7 => 0x01c9,
579 0x01c8 => 0x01c9,
580 0x01ca => 0x01cc,
581 0x01cb => 0x01cc,
582 0x01cd => 0x01ce,
583 0x01cf => 0x01d0,
584 0x01d1 => 0x01d2,
585 0x01d3 => 0x01d4,
586 0x01d5 => 0x01d6,
587 0x01d7 => 0x01d8,
588 0x01d9 => 0x01da,
589 0x01db => 0x01dc,
590 0x01de => 0x01df,
591 0x01e0 => 0x01e1,
592 0x01e2 => 0x01e3,
593 0x01e4 => 0x01e5,
594 0x01e6 => 0x01e7,
595 0x01e8 => 0x01e9,
596 0x01ea => 0x01eb,
597 0x01ec => 0x01ed,
598 0x01ee => 0x01ef,
599 0x01f0 => return Fold::Two('\u{006a}', '\u{030c}'),
600 0x01f1 => 0x01f3,
601 0x01f2 => 0x01f3,
602 0x01f4 => 0x01f5,
603 0x01f6 => 0x0195,
604 0x01f7 => 0x01bf,
605 0x01f8 => 0x01f9,
606 0x01fa => 0x01fb,
607 0x01fc => 0x01fd,
608 0x01fe => 0x01ff,
609 0x0200 => 0x0201,
610 0x0202 => 0x0203,
611 0x0204 => 0x0205,
612 0x0206 => 0x0207,
613 0x0208 => 0x0209,
614 0x020a => 0x020b,
615 0x020c => 0x020d,
616 0x020e => 0x020f,
617 0x0210 => 0x0211,
618 0x0212 => 0x0213,
619 0x0214 => 0x0215,
620 0x0216 => 0x0217,
621 0x0218 => 0x0219,
622 0x021a => 0x021b,
623 0x021c => 0x021d,
624 0x021e => 0x021f,
625 0x0220 => 0x019e,
626 0x0222 => 0x0223,
627 0x0224 => 0x0225,
628 0x0226 => 0x0227,
629 0x0228 => 0x0229,
630 0x022a => 0x022b,
631 0x022c => 0x022d,
632 0x022e => 0x022f,
633 0x0230 => 0x0231,
634 0x0232 => 0x0233,
635 0x023a => 0x2c65,
636 0x023b => 0x023c,
637 0x023d => 0x019a,
638 0x023e => 0x2c66,
639 0x0241 => 0x0242,
640 0x0243 => 0x0180,
641 0x0244 => 0x0289,
642 0x0245 => 0x028c,
643 0x0246 => 0x0247,
644 0x0248 => 0x0249,
645 0x024a => 0x024b,
646 0x024c => 0x024d,
647 0x024e => 0x024f,
648 0x0345 => 0x03b9,
649 0x0370 => 0x0371,
650 0x0372 => 0x0373,
651 0x0376 => 0x0377,
652 0x037f => 0x03f3,
653 0x0386 => 0x03ac,
654 0x0388 => 0x03ad,
655 0x0389 => 0x03ae,
656 0x038a => 0x03af,
657 0x038c => 0x03cc,
658 0x038e => 0x03cd,
659 0x038f => 0x03ce,
660 0x0390 => return Fold::Three('\u{03b9}', '\u{0308}', '\u{0301}'),
661 0x0391 => 0x03b1,
662 0x0392 => 0x03b2,
663 0x0393 => 0x03b3,
664 0x0394 => 0x03b4,
665 0x0395 => 0x03b5,
666 0x0396 => 0x03b6,
667 0x0397 => 0x03b7,
668 0x0398 => 0x03b8,
669 0x0399 => 0x03b9,
670 0x039a => 0x03ba,
671 0x039b => 0x03bb,
672 0x039c => 0x03bc,
673 0x039d => 0x03bd,
674 0x039e => 0x03be,
675 0x039f => 0x03bf,
676 0x03a0 => 0x03c0,
677 0x03a1 => 0x03c1,
678 0x03a3 => 0x03c3,
679 0x03a4 => 0x03c4,
680 0x03a5 => 0x03c5,
681 0x03a6 => 0x03c6,
682 0x03a7 => 0x03c7,
683 0x03a8 => 0x03c8,
684 0x03a9 => 0x03c9,
685 0x03aa => 0x03ca,
686 0x03ab => 0x03cb,
687 0x03b0 => return Fold::Three('\u{03c5}', '\u{0308}', '\u{0301}'),
688 0x03c2 => 0x03c3,
689 0x03cf => 0x03d7,
690 0x03d0 => 0x03b2,
691 0x03d1 => 0x03b8,
692 0x03d5 => 0x03c6,
693 0x03d6 => 0x03c0,
694 0x03d8 => 0x03d9,
695 0x03da => 0x03db,
696 0x03dc => 0x03dd,
697 0x03de => 0x03df,
698 0x03e0 => 0x03e1,
699 0x03e2 => 0x03e3,
700 0x03e4 => 0x03e5,
701 0x03e6 => 0x03e7,
702 0x03e8 => 0x03e9,
703 0x03ea => 0x03eb,
704 0x03ec => 0x03ed,
705 0x03ee => 0x03ef,
706 0x03f0 => 0x03ba,
707 0x03f1 => 0x03c1,
708 0x03f4 => 0x03b8,
709 0x03f5 => 0x03b5,
710 0x03f7 => 0x03f8,
711 0x03f9 => 0x03f2,
712 0x03fa => 0x03fb,
713 0x03fd => 0x037b,
714 0x03fe => 0x037c,
715 0x03ff => 0x037d,
716 0x0400 => 0x0450,
717 0x0401 => 0x0451,
718 0x0402 => 0x0452,
719 0x0403 => 0x0453,
720 0x0404 => 0x0454,
721 0x0405 => 0x0455,
722 0x0406 => 0x0456,
723 0x0407 => 0x0457,
724 0x0408 => 0x0458,
725 0x0409 => 0x0459,
726 0x040a => 0x045a,
727 0x040b => 0x045b,
728 0x040c => 0x045c,
729 0x040d => 0x045d,
730 0x040e => 0x045e,
731 0x040f => 0x045f,
732 0x0410 => 0x0430,
733 0x0411 => 0x0431,
734 0x0412 => 0x0432,
735 0x0413 => 0x0433,
736 0x0414 => 0x0434,
737 0x0415 => 0x0435,
738 0x0416 => 0x0436,
739 0x0417 => 0x0437,
740 0x0418 => 0x0438,
741 0x0419 => 0x0439,
742 0x041a => 0x043a,
743 0x041b => 0x043b,
744 0x041c => 0x043c,
745 0x041d => 0x043d,
746 0x041e => 0x043e,
747 0x041f => 0x043f,
748 0x0420 => 0x0440,
749 0x0421 => 0x0441,
750 0x0422 => 0x0442,
751 0x0423 => 0x0443,
752 0x0424 => 0x0444,
753 0x0425 => 0x0445,
754 0x0426 => 0x0446,
755 0x0427 => 0x0447,
756 0x0428 => 0x0448,
757 0x0429 => 0x0449,
758 0x042a => 0x044a,
759 0x042b => 0x044b,
760 0x042c => 0x044c,
761 0x042d => 0x044d,
762 0x042e => 0x044e,
763 0x042f => 0x044f,
764 0x0460 => 0x0461,
765 0x0462 => 0x0463,
766 0x0464 => 0x0465,
767 0x0466 => 0x0467,
768 0x0468 => 0x0469,
769 0x046a => 0x046b,
770 0x046c => 0x046d,
771 0x046e => 0x046f,
772 0x0470 => 0x0471,
773 0x0472 => 0x0473,
774 0x0474 => 0x0475,
775 0x0476 => 0x0477,
776 0x0478 => 0x0479,
777 0x047a => 0x047b,
778 0x047c => 0x047d,
779 0x047e => 0x047f,
780 0x0480 => 0x0481,
781 0x048a => 0x048b,
782 0x048c => 0x048d,
783 0x048e => 0x048f,
784 0x0490 => 0x0491,
785 0x0492 => 0x0493,
786 0x0494 => 0x0495,
787 0x0496 => 0x0497,
788 0x0498 => 0x0499,
789 0x049a => 0x049b,
790 0x049c => 0x049d,
791 0x049e => 0x049f,
792 0x04a0 => 0x04a1,
793 0x04a2 => 0x04a3,
794 0x04a4 => 0x04a5,
795 0x04a6 => 0x04a7,
796 0x04a8 => 0x04a9,
797 0x04aa => 0x04ab,
798 0x04ac => 0x04ad,
799 0x04ae => 0x04af,
800 0x04b0 => 0x04b1,
801 0x04b2 => 0x04b3,
802 0x04b4 => 0x04b5,
803 0x04b6 => 0x04b7,
804 0x04b8 => 0x04b9,
805 0x04ba => 0x04bb,
806 0x04bc => 0x04bd,
807 0x04be => 0x04bf,
808 0x04c0 => 0x04cf,
809 0x04c1 => 0x04c2,
810 0x04c3 => 0x04c4,
811 0x04c5 => 0x04c6,
812 0x04c7 => 0x04c8,
813 0x04c9 => 0x04ca,
814 0x04cb => 0x04cc,
815 0x04cd => 0x04ce,
816 0x04d0 => 0x04d1,
817 0x04d2 => 0x04d3,
818 0x04d4 => 0x04d5,
819 0x04d6 => 0x04d7,
820 0x04d8 => 0x04d9,
821 0x04da => 0x04db,
822 0x04dc => 0x04dd,
823 0x04de => 0x04df,
824 0x04e0 => 0x04e1,
825 0x04e2 => 0x04e3,
826 0x04e4 => 0x04e5,
827 0x04e6 => 0x04e7,
828 0x04e8 => 0x04e9,
829 0x04ea => 0x04eb,
830 0x04ec => 0x04ed,
831 0x04ee => 0x04ef,
832 0x04f0 => 0x04f1,
833 0x04f2 => 0x04f3,
834 0x04f4 => 0x04f5,
835 0x04f6 => 0x04f7,
836 0x04f8 => 0x04f9,
837 0x04fa => 0x04fb,
838 0x04fc => 0x04fd,
839 0x04fe => 0x04ff,
840 0x0500 => 0x0501,
841 0x0502 => 0x0503,
842 0x0504 => 0x0505,
843 0x0506 => 0x0507,
844 0x0508 => 0x0509,
845 0x050a => 0x050b,
846 0x050c => 0x050d,
847 0x050e => 0x050f,
848 0x0510 => 0x0511,
849 0x0512 => 0x0513,
850 0x0514 => 0x0515,
851 0x0516 => 0x0517,
852 0x0518 => 0x0519,
853 0x051a => 0x051b,
854 0x051c => 0x051d,
855 0x051e => 0x051f,
856 0x0520 => 0x0521,
857 0x0522 => 0x0523,
858 0x0524 => 0x0525,
859 0x0526 => 0x0527,
860 0x0528 => 0x0529,
861 0x052a => 0x052b,
862 0x052c => 0x052d,
863 0x052e => 0x052f,
864 0x0531 => 0x0561,
865 0x0532 => 0x0562,
866 0x0533 => 0x0563,
867 0x0534 => 0x0564,
868 0x0535 => 0x0565,
869 0x0536 => 0x0566,
870 0x0537 => 0x0567,
871 0x0538 => 0x0568,
872 0x0539 => 0x0569,
873 0x053a => 0x056a,
874 0x053b => 0x056b,
875 0x053c => 0x056c,
876 0x053d => 0x056d,
877 0x053e => 0x056e,
878 0x053f => 0x056f,
879 0x0540 => 0x0570,
880 0x0541 => 0x0571,
881 0x0542 => 0x0572,
882 0x0543 => 0x0573,
883 0x0544 => 0x0574,
884 0x0545 => 0x0575,
885 0x0546 => 0x0576,
886 0x0547 => 0x0577,
887 0x0548 => 0x0578,
888 0x0549 => 0x0579,
889 0x054a => 0x057a,
890 0x054b => 0x057b,
891 0x054c => 0x057c,
892 0x054d => 0x057d,
893 0x054e => 0x057e,
894 0x054f => 0x057f,
895 0x0550 => 0x0580,
896 0x0551 => 0x0581,
897 0x0552 => 0x0582,
898 0x0553 => 0x0583,
899 0x0554 => 0x0584,
900 0x0555 => 0x0585,
901 0x0556 => 0x0586,
902 0x0587 => return Fold::Two('\u{0565}', '\u{0582}'),
903 0x10a0 => 0x2d00,
904 0x10a1 => 0x2d01,
905 0x10a2 => 0x2d02,
906 0x10a3 => 0x2d03,
907 0x10a4 => 0x2d04,
908 0x10a5 => 0x2d05,
909 0x10a6 => 0x2d06,
910 0x10a7 => 0x2d07,
911 0x10a8 => 0x2d08,
912 0x10a9 => 0x2d09,
913 0x10aa => 0x2d0a,
914 0x10ab => 0x2d0b,
915 0x10ac => 0x2d0c,
916 0x10ad => 0x2d0d,
917 0x10ae => 0x2d0e,
918 0x10af => 0x2d0f,
919 0x10b0 => 0x2d10,
920 0x10b1 => 0x2d11,
921 0x10b2 => 0x2d12,
922 0x10b3 => 0x2d13,
923 0x10b4 => 0x2d14,
924 0x10b5 => 0x2d15,
925 0x10b6 => 0x2d16,
926 0x10b7 => 0x2d17,
927 0x10b8 => 0x2d18,
928 0x10b9 => 0x2d19,
929 0x10ba => 0x2d1a,
930 0x10bb => 0x2d1b,
931 0x10bc => 0x2d1c,
932 0x10bd => 0x2d1d,
933 0x10be => 0x2d1e,
934 0x10bf => 0x2d1f,
935 0x10c0 => 0x2d20,
936 0x10c1 => 0x2d21,
937 0x10c2 => 0x2d22,
938 0x10c3 => 0x2d23,
939 0x10c4 => 0x2d24,
940 0x10c5 => 0x2d25,
941 0x10c7 => 0x2d27,
942 0x10cd => 0x2d2d,
943 0x13f8 => 0x13f0,
944 0x13f9 => 0x13f1,
945 0x13fa => 0x13f2,
946 0x13fb => 0x13f3,
947 0x13fc => 0x13f4,
948 0x13fd => 0x13f5,
949 0x1c80 => 0x0432,
950 0x1c81 => 0x0434,
951 0x1c82 => 0x043e,
952 0x1c83 => 0x0441,
953 0x1c84 => 0x0442,
954 0x1c85 => 0x0442,
955 0x1c86 => 0x044a,
956 0x1c87 => 0x0463,
957 0x1c88 => 0xa64b,
958 0x1c90 => 0x10d0,
959 0x1c91 => 0x10d1,
960 0x1c92 => 0x10d2,
961 0x1c93 => 0x10d3,
962 0x1c94 => 0x10d4,
963 0x1c95 => 0x10d5,
964 0x1c96 => 0x10d6,
965 0x1c97 => 0x10d7,
966 0x1c98 => 0x10d8,
967 0x1c99 => 0x10d9,
968 0x1c9a => 0x10da,
969 0x1c9b => 0x10db,
970 0x1c9c => 0x10dc,
971 0x1c9d => 0x10dd,
972 0x1c9e => 0x10de,
973 0x1c9f => 0x10df,
974 0x1ca0 => 0x10e0,
975 0x1ca1 => 0x10e1,
976 0x1ca2 => 0x10e2,
977 0x1ca3 => 0x10e3,
978 0x1ca4 => 0x10e4,
979 0x1ca5 => 0x10e5,
980 0x1ca6 => 0x10e6,
981 0x1ca7 => 0x10e7,
982 0x1ca8 => 0x10e8,
983 0x1ca9 => 0x10e9,
984 0x1caa => 0x10ea,
985 0x1cab => 0x10eb,
986 0x1cac => 0x10ec,
987 0x1cad => 0x10ed,
988 0x1cae => 0x10ee,
989 0x1caf => 0x10ef,
990 0x1cb0 => 0x10f0,
991 0x1cb1 => 0x10f1,
992 0x1cb2 => 0x10f2,
993 0x1cb3 => 0x10f3,
994 0x1cb4 => 0x10f4,
995 0x1cb5 => 0x10f5,
996 0x1cb6 => 0x10f6,
997 0x1cb7 => 0x10f7,
998 0x1cb8 => 0x10f8,
999 0x1cb9 => 0x10f9,
1000 0x1cba => 0x10fa,
1001 0x1cbd => 0x10fd,
1002 0x1cbe => 0x10fe,
1003 0x1cbf => 0x10ff,
1004 0x1e00 => 0x1e01,
1005 0x1e02 => 0x1e03,
1006 0x1e04 => 0x1e05,
1007 0x1e06 => 0x1e07,
1008 0x1e08 => 0x1e09,
1009 0x1e0a => 0x1e0b,
1010 0x1e0c => 0x1e0d,
1011 0x1e0e => 0x1e0f,
1012 0x1e10 => 0x1e11,
1013 0x1e12 => 0x1e13,
1014 0x1e14 => 0x1e15,
1015 0x1e16 => 0x1e17,
1016 0x1e18 => 0x1e19,
1017 0x1e1a => 0x1e1b,
1018 0x1e1c => 0x1e1d,
1019 0x1e1e => 0x1e1f,
1020 0x1e20 => 0x1e21,
1021 0x1e22 => 0x1e23,
1022 0x1e24 => 0x1e25,
1023 0x1e26 => 0x1e27,
1024 0x1e28 => 0x1e29,
1025 0x1e2a => 0x1e2b,
1026 0x1e2c => 0x1e2d,
1027 0x1e2e => 0x1e2f,
1028 0x1e30 => 0x1e31,
1029 0x1e32 => 0x1e33,
1030 0x1e34 => 0x1e35,
1031 0x1e36 => 0x1e37,
1032 0x1e38 => 0x1e39,
1033 0x1e3a => 0x1e3b,
1034 0x1e3c => 0x1e3d,
1035 0x1e3e => 0x1e3f,
1036 0x1e40 => 0x1e41,
1037 0x1e42 => 0x1e43,
1038 0x1e44 => 0x1e45,
1039 0x1e46 => 0x1e47,
1040 0x1e48 => 0x1e49,
1041 0x1e4a => 0x1e4b,
1042 0x1e4c => 0x1e4d,
1043 0x1e4e => 0x1e4f,
1044 0x1e50 => 0x1e51,
1045 0x1e52 => 0x1e53,
1046 0x1e54 => 0x1e55,
1047 0x1e56 => 0x1e57,
1048 0x1e58 => 0x1e59,
1049 0x1e5a => 0x1e5b,
1050 0x1e5c => 0x1e5d,
1051 0x1e5e => 0x1e5f,
1052 0x1e60 => 0x1e61,
1053 0x1e62 => 0x1e63,
1054 0x1e64 => 0x1e65,
1055 0x1e66 => 0x1e67,
1056 0x1e68 => 0x1e69,
1057 0x1e6a => 0x1e6b,
1058 0x1e6c => 0x1e6d,
1059 0x1e6e => 0x1e6f,
1060 0x1e70 => 0x1e71,
1061 0x1e72 => 0x1e73,
1062 0x1e74 => 0x1e75,
1063 0x1e76 => 0x1e77,
1064 0x1e78 => 0x1e79,
1065 0x1e7a => 0x1e7b,
1066 0x1e7c => 0x1e7d,
1067 0x1e7e => 0x1e7f,
1068 0x1e80 => 0x1e81,
1069 0x1e82 => 0x1e83,
1070 0x1e84 => 0x1e85,
1071 0x1e86 => 0x1e87,
1072 0x1e88 => 0x1e89,
1073 0x1e8a => 0x1e8b,
1074 0x1e8c => 0x1e8d,
1075 0x1e8e => 0x1e8f,
1076 0x1e90 => 0x1e91,
1077 0x1e92 => 0x1e93,
1078 0x1e94 => 0x1e95,
1079 0x1e96 => return Fold::Two('\u{0068}', '\u{0331}'),
1080 0x1e97 => return Fold::Two('\u{0074}', '\u{0308}'),
1081 0x1e98 => return Fold::Two('\u{0077}', '\u{030a}'),
1082 0x1e99 => return Fold::Two('\u{0079}', '\u{030a}'),
1083 0x1e9a => return Fold::Two('\u{0061}', '\u{02be}'),
1084 0x1e9b => 0x1e61,
1085 0x1e9e => return Fold::Two('\u{0073}', '\u{0073}'),
1086 0x1ea0 => 0x1ea1,
1087 0x1ea2 => 0x1ea3,
1088 0x1ea4 => 0x1ea5,
1089 0x1ea6 => 0x1ea7,
1090 0x1ea8 => 0x1ea9,
1091 0x1eaa => 0x1eab,
1092 0x1eac => 0x1ead,
1093 0x1eae => 0x1eaf,
1094 0x1eb0 => 0x1eb1,
1095 0x1eb2 => 0x1eb3,
1096 0x1eb4 => 0x1eb5,
1097 0x1eb6 => 0x1eb7,
1098 0x1eb8 => 0x1eb9,
1099 0x1eba => 0x1ebb,
1100 0x1ebc => 0x1ebd,
1101 0x1ebe => 0x1ebf,
1102 0x1ec0 => 0x1ec1,
1103 0x1ec2 => 0x1ec3,
1104 0x1ec4 => 0x1ec5,
1105 0x1ec6 => 0x1ec7,
1106 0x1ec8 => 0x1ec9,
1107 0x1eca => 0x1ecb,
1108 0x1ecc => 0x1ecd,
1109 0x1ece => 0x1ecf,
1110 0x1ed0 => 0x1ed1,
1111 0x1ed2 => 0x1ed3,
1112 0x1ed4 => 0x1ed5,
1113 0x1ed6 => 0x1ed7,
1114 0x1ed8 => 0x1ed9,
1115 0x1eda => 0x1edb,
1116 0x1edc => 0x1edd,
1117 0x1ede => 0x1edf,
1118 0x1ee0 => 0x1ee1,
1119 0x1ee2 => 0x1ee3,
1120 0x1ee4 => 0x1ee5,
1121 0x1ee6 => 0x1ee7,
1122 0x1ee8 => 0x1ee9,
1123 0x1eea => 0x1eeb,
1124 0x1eec => 0x1eed,
1125 0x1eee => 0x1eef,
1126 0x1ef0 => 0x1ef1,
1127 0x1ef2 => 0x1ef3,
1128 0x1ef4 => 0x1ef5,
1129 0x1ef6 => 0x1ef7,
1130 0x1ef8 => 0x1ef9,
1131 0x1efa => 0x1efb,
1132 0x1efc => 0x1efd,
1133 0x1efe => 0x1eff,
1134 0x1f08 => 0x1f00,
1135 0x1f09 => 0x1f01,
1136 0x1f0a => 0x1f02,
1137 0x1f0b => 0x1f03,
1138 0x1f0c => 0x1f04,
1139 0x1f0d => 0x1f05,
1140 0x1f0e => 0x1f06,
1141 0x1f0f => 0x1f07,
1142 0x1f18 => 0x1f10,
1143 0x1f19 => 0x1f11,
1144 0x1f1a => 0x1f12,
1145 0x1f1b => 0x1f13,
1146 0x1f1c => 0x1f14,
1147 0x1f1d => 0x1f15,
1148 0x1f28 => 0x1f20,
1149 0x1f29 => 0x1f21,
1150 0x1f2a => 0x1f22,
1151 0x1f2b => 0x1f23,
1152 0x1f2c => 0x1f24,
1153 0x1f2d => 0x1f25,
1154 0x1f2e => 0x1f26,
1155 0x1f2f => 0x1f27,
1156 0x1f38 => 0x1f30,
1157 0x1f39 => 0x1f31,
1158 0x1f3a => 0x1f32,
1159 0x1f3b => 0x1f33,
1160 0x1f3c => 0x1f34,
1161 0x1f3d => 0x1f35,
1162 0x1f3e => 0x1f36,
1163 0x1f3f => 0x1f37,
1164 0x1f48 => 0x1f40,
1165 0x1f49 => 0x1f41,
1166 0x1f4a => 0x1f42,
1167 0x1f4b => 0x1f43,
1168 0x1f4c => 0x1f44,
1169 0x1f4d => 0x1f45,
1170 0x1f50 => return Fold::Two('\u{03c5}', '\u{0313}'),
1171 0x1f52 => return Fold::Three('\u{03c5}', '\u{0313}', '\u{0300}'),
1172 0x1f54 => return Fold::Three('\u{03c5}', '\u{0313}', '\u{0301}'),
1173 0x1f56 => return Fold::Three('\u{03c5}', '\u{0313}', '\u{0342}'),
1174 0x1f59 => 0x1f51,
1175 0x1f5b => 0x1f53,
1176 0x1f5d => 0x1f55,
1177 0x1f5f => 0x1f57,
1178 0x1f68 => 0x1f60,
1179 0x1f69 => 0x1f61,
1180 0x1f6a => 0x1f62,
1181 0x1f6b => 0x1f63,
1182 0x1f6c => 0x1f64,
1183 0x1f6d => 0x1f65,
1184 0x1f6e => 0x1f66,
1185 0x1f6f => 0x1f67,
1186 0x1f80 => return Fold::Two('\u{1f00}', '\u{03b9}'),
1187 0x1f81 => return Fold::Two('\u{1f01}', '\u{03b9}'),
1188 0x1f82 => return Fold::Two('\u{1f02}', '\u{03b9}'),
1189 0x1f83 => return Fold::Two('\u{1f03}', '\u{03b9}'),
1190 0x1f84 => return Fold::Two('\u{1f04}', '\u{03b9}'),
1191 0x1f85 => return Fold::Two('\u{1f05}', '\u{03b9}'),
1192 0x1f86 => return Fold::Two('\u{1f06}', '\u{03b9}'),
1193 0x1f87 => return Fold::Two('\u{1f07}', '\u{03b9}'),
1194 0x1f88 => return Fold::Two('\u{1f00}', '\u{03b9}'),
1195 0x1f89 => return Fold::Two('\u{1f01}', '\u{03b9}'),
1196 0x1f8a => return Fold::Two('\u{1f02}', '\u{03b9}'),
1197 0x1f8b => return Fold::Two('\u{1f03}', '\u{03b9}'),
1198 0x1f8c => return Fold::Two('\u{1f04}', '\u{03b9}'),
1199 0x1f8d => return Fold::Two('\u{1f05}', '\u{03b9}'),
1200 0x1f8e => return Fold::Two('\u{1f06}', '\u{03b9}'),
1201 0x1f8f => return Fold::Two('\u{1f07}', '\u{03b9}'),
1202 0x1f90 => return Fold::Two('\u{1f20}', '\u{03b9}'),
1203 0x1f91 => return Fold::Two('\u{1f21}', '\u{03b9}'),
1204 0x1f92 => return Fold::Two('\u{1f22}', '\u{03b9}'),
1205 0x1f93 => return Fold::Two('\u{1f23}', '\u{03b9}'),
1206 0x1f94 => return Fold::Two('\u{1f24}', '\u{03b9}'),
1207 0x1f95 => return Fold::Two('\u{1f25}', '\u{03b9}'),
1208 0x1f96 => return Fold::Two('\u{1f26}', '\u{03b9}'),
1209 0x1f97 => return Fold::Two('\u{1f27}', '\u{03b9}'),
1210 0x1f98 => return Fold::Two('\u{1f20}', '\u{03b9}'),
1211 0x1f99 => return Fold::Two('\u{1f21}', '\u{03b9}'),
1212 0x1f9a => return Fold::Two('\u{1f22}', '\u{03b9}'),
1213 0x1f9b => return Fold::Two('\u{1f23}', '\u{03b9}'),
1214 0x1f9c => return Fold::Two('\u{1f24}', '\u{03b9}'),
1215 0x1f9d => return Fold::Two('\u{1f25}', '\u{03b9}'),
1216 0x1f9e => return Fold::Two('\u{1f26}', '\u{03b9}'),
1217 0x1f9f => return Fold::Two('\u{1f27}', '\u{03b9}'),
1218 0x1fa0 => return Fold::Two('\u{1f60}', '\u{03b9}'),
1219 0x1fa1 => return Fold::Two('\u{1f61}', '\u{03b9}'),
1220 0x1fa2 => return Fold::Two('\u{1f62}', '\u{03b9}'),
1221 0x1fa3 => return Fold::Two('\u{1f63}', '\u{03b9}'),
1222 0x1fa4 => return Fold::Two('\u{1f64}', '\u{03b9}'),
1223 0x1fa5 => return Fold::Two('\u{1f65}', '\u{03b9}'),
1224 0x1fa6 => return Fold::Two('\u{1f66}', '\u{03b9}'),
1225 0x1fa7 => return Fold::Two('\u{1f67}', '\u{03b9}'),
1226 0x1fa8 => return Fold::Two('\u{1f60}', '\u{03b9}'),
1227 0x1fa9 => return Fold::Two('\u{1f61}', '\u{03b9}'),
1228 0x1faa => return Fold::Two('\u{1f62}', '\u{03b9}'),
1229 0x1fab => return Fold::Two('\u{1f63}', '\u{03b9}'),
1230 0x1fac => return Fold::Two('\u{1f64}', '\u{03b9}'),
1231 0x1fad => return Fold::Two('\u{1f65}', '\u{03b9}'),
1232 0x1fae => return Fold::Two('\u{1f66}', '\u{03b9}'),
1233 0x1faf => return Fold::Two('\u{1f67}', '\u{03b9}'),
1234 0x1fb2 => return Fold::Two('\u{1f70}', '\u{03b9}'),
1235 0x1fb3 => return Fold::Two('\u{03b1}', '\u{03b9}'),
1236 0x1fb4 => return Fold::Two('\u{03ac}', '\u{03b9}'),
1237 0x1fb6 => return Fold::Two('\u{03b1}', '\u{0342}'),
1238 0x1fb7 => return Fold::Three('\u{03b1}', '\u{0342}', '\u{03b9}'),
1239 0x1fb8 => 0x1fb0,
1240 0x1fb9 => 0x1fb1,
1241 0x1fba => 0x1f70,
1242 0x1fbb => 0x1f71,
1243 0x1fbc => return Fold::Two('\u{03b1}', '\u{03b9}'),
1244 0x1fbe => 0x03b9,
1245 0x1fc2 => return Fold::Two('\u{1f74}', '\u{03b9}'),
1246 0x1fc3 => return Fold::Two('\u{03b7}', '\u{03b9}'),
1247 0x1fc4 => return Fold::Two('\u{03ae}', '\u{03b9}'),
1248 0x1fc6 => return Fold::Two('\u{03b7}', '\u{0342}'),
1249 0x1fc7 => return Fold::Three('\u{03b7}', '\u{0342}', '\u{03b9}'),
1250 0x1fc8 => 0x1f72,
1251 0x1fc9 => 0x1f73,
1252 0x1fca => 0x1f74,
1253 0x1fcb => 0x1f75,
1254 0x1fcc => return Fold::Two('\u{03b7}', '\u{03b9}'),
1255 0x1fd2 => return Fold::Three('\u{03b9}', '\u{0308}', '\u{0300}'),
1256 0x1fd3 => return Fold::Three('\u{03b9}', '\u{0308}', '\u{0301}'),
1257 0x1fd6 => return Fold::Two('\u{03b9}', '\u{0342}'),
1258 0x1fd7 => return Fold::Three('\u{03b9}', '\u{0308}', '\u{0342}'),
1259 0x1fd8 => 0x1fd0,
1260 0x1fd9 => 0x1fd1,
1261 0x1fda => 0x1f76,
1262 0x1fdb => 0x1f77,
1263 0x1fe2 => return Fold::Three('\u{03c5}', '\u{0308}', '\u{0300}'),
1264 0x1fe3 => return Fold::Three('\u{03c5}', '\u{0308}', '\u{0301}'),
1265 0x1fe4 => return Fold::Two('\u{03c1}', '\u{0313}'),
1266 0x1fe6 => return Fold::Two('\u{03c5}', '\u{0342}'),
1267 0x1fe7 => return Fold::Three('\u{03c5}', '\u{0308}', '\u{0342}'),
1268 0x1fe8 => 0x1fe0,
1269 0x1fe9 => 0x1fe1,
1270 0x1fea => 0x1f7a,
1271 0x1feb => 0x1f7b,
1272 0x1fec => 0x1fe5,
1273 0x1ff2 => return Fold::Two('\u{1f7c}', '\u{03b9}'),
1274 0x1ff3 => return Fold::Two('\u{03c9}', '\u{03b9}'),
1275 0x1ff4 => return Fold::Two('\u{03ce}', '\u{03b9}'),
1276 0x1ff6 => return Fold::Two('\u{03c9}', '\u{0342}'),
1277 0x1ff7 => return Fold::Three('\u{03c9}', '\u{0342}', '\u{03b9}'),
1278 0x1ff8 => 0x1f78,
1279 0x1ff9 => 0x1f79,
1280 0x1ffa => 0x1f7c,
1281 0x1ffb => 0x1f7d,
1282 0x1ffc => return Fold::Two('\u{03c9}', '\u{03b9}'),
1283 0x2126 => 0x03c9,
1284 0x212a => 0x006b,
1285 0x212b => 0x00e5,
1286 0x2132 => 0x214e,
1287 0x2160 => 0x2170,
1288 0x2161 => 0x2171,
1289 0x2162 => 0x2172,
1290 0x2163 => 0x2173,
1291 0x2164 => 0x2174,
1292 0x2165 => 0x2175,
1293 0x2166 => 0x2176,
1294 0x2167 => 0x2177,
1295 0x2168 => 0x2178,
1296 0x2169 => 0x2179,
1297 0x216a => 0x217a,
1298 0x216b => 0x217b,
1299 0x216c => 0x217c,
1300 0x216d => 0x217d,
1301 0x216e => 0x217e,
1302 0x216f => 0x217f,
1303 0x2183 => 0x2184,
1304 0x24b6 => 0x24d0,
1305 0x24b7 => 0x24d1,
1306 0x24b8 => 0x24d2,
1307 0x24b9 => 0x24d3,
1308 0x24ba => 0x24d4,
1309 0x24bb => 0x24d5,
1310 0x24bc => 0x24d6,
1311 0x24bd => 0x24d7,
1312 0x24be => 0x24d8,
1313 0x24bf => 0x24d9,
1314 0x24c0 => 0x24da,
1315 0x24c1 => 0x24db,
1316 0x24c2 => 0x24dc,
1317 0x24c3 => 0x24dd,
1318 0x24c4 => 0x24de,
1319 0x24c5 => 0x24df,
1320 0x24c6 => 0x24e0,
1321 0x24c7 => 0x24e1,
1322 0x24c8 => 0x24e2,
1323 0x24c9 => 0x24e3,
1324 0x24ca => 0x24e4,
1325 0x24cb => 0x24e5,
1326 0x24cc => 0x24e6,
1327 0x24cd => 0x24e7,
1328 0x24ce => 0x24e8,
1329 0x24cf => 0x24e9,
1330 0x2c00 => 0x2c30,
1331 0x2c01 => 0x2c31,
1332 0x2c02 => 0x2c32,
1333 0x2c03 => 0x2c33,
1334 0x2c04 => 0x2c34,
1335 0x2c05 => 0x2c35,
1336 0x2c06 => 0x2c36,
1337 0x2c07 => 0x2c37,
1338 0x2c08 => 0x2c38,
1339 0x2c09 => 0x2c39,
1340 0x2c0a => 0x2c3a,
1341 0x2c0b => 0x2c3b,
1342 0x2c0c => 0x2c3c,
1343 0x2c0d => 0x2c3d,
1344 0x2c0e => 0x2c3e,
1345 0x2c0f => 0x2c3f,
1346 0x2c10 => 0x2c40,
1347 0x2c11 => 0x2c41,
1348 0x2c12 => 0x2c42,
1349 0x2c13 => 0x2c43,
1350 0x2c14 => 0x2c44,
1351 0x2c15 => 0x2c45,
1352 0x2c16 => 0x2c46,
1353 0x2c17 => 0x2c47,
1354 0x2c18 => 0x2c48,
1355 0x2c19 => 0x2c49,
1356 0x2c1a => 0x2c4a,
1357 0x2c1b => 0x2c4b,
1358 0x2c1c => 0x2c4c,
1359 0x2c1d => 0x2c4d,
1360 0x2c1e => 0x2c4e,
1361 0x2c1f => 0x2c4f,
1362 0x2c20 => 0x2c50,
1363 0x2c21 => 0x2c51,
1364 0x2c22 => 0x2c52,
1365 0x2c23 => 0x2c53,
1366 0x2c24 => 0x2c54,
1367 0x2c25 => 0x2c55,
1368 0x2c26 => 0x2c56,
1369 0x2c27 => 0x2c57,
1370 0x2c28 => 0x2c58,
1371 0x2c29 => 0x2c59,
1372 0x2c2a => 0x2c5a,
1373 0x2c2b => 0x2c5b,
1374 0x2c2c => 0x2c5c,
1375 0x2c2d => 0x2c5d,
1376 0x2c2e => 0x2c5e,
1377 0x2c2f => 0x2c5f,
1378 0x2c60 => 0x2c61,
1379 0x2c62 => 0x026b,
1380 0x2c63 => 0x1d7d,
1381 0x2c64 => 0x027d,
1382 0x2c67 => 0x2c68,
1383 0x2c69 => 0x2c6a,
1384 0x2c6b => 0x2c6c,
1385 0x2c6d => 0x0251,
1386 0x2c6e => 0x0271,
1387 0x2c6f => 0x0250,
1388 0x2c70 => 0x0252,
1389 0x2c72 => 0x2c73,
1390 0x2c75 => 0x2c76,
1391 0x2c7e => 0x023f,
1392 0x2c7f => 0x0240,
1393 0x2c80 => 0x2c81,
1394 0x2c82 => 0x2c83,
1395 0x2c84 => 0x2c85,
1396 0x2c86 => 0x2c87,
1397 0x2c88 => 0x2c89,
1398 0x2c8a => 0x2c8b,
1399 0x2c8c => 0x2c8d,
1400 0x2c8e => 0x2c8f,
1401 0x2c90 => 0x2c91,
1402 0x2c92 => 0x2c93,
1403 0x2c94 => 0x2c95,
1404 0x2c96 => 0x2c97,
1405 0x2c98 => 0x2c99,
1406 0x2c9a => 0x2c9b,
1407 0x2c9c => 0x2c9d,
1408 0x2c9e => 0x2c9f,
1409 0x2ca0 => 0x2ca1,
1410 0x2ca2 => 0x2ca3,
1411 0x2ca4 => 0x2ca5,
1412 0x2ca6 => 0x2ca7,
1413 0x2ca8 => 0x2ca9,
1414 0x2caa => 0x2cab,
1415 0x2cac => 0x2cad,
1416 0x2cae => 0x2caf,
1417 0x2cb0 => 0x2cb1,
1418 0x2cb2 => 0x2cb3,
1419 0x2cb4 => 0x2cb5,
1420 0x2cb6 => 0x2cb7,
1421 0x2cb8 => 0x2cb9,
1422 0x2cba => 0x2cbb,
1423 0x2cbc => 0x2cbd,
1424 0x2cbe => 0x2cbf,
1425 0x2cc0 => 0x2cc1,
1426 0x2cc2 => 0x2cc3,
1427 0x2cc4 => 0x2cc5,
1428 0x2cc6 => 0x2cc7,
1429 0x2cc8 => 0x2cc9,
1430 0x2cca => 0x2ccb,
1431 0x2ccc => 0x2ccd,
1432 0x2cce => 0x2ccf,
1433 0x2cd0 => 0x2cd1,
1434 0x2cd2 => 0x2cd3,
1435 0x2cd4 => 0x2cd5,
1436 0x2cd6 => 0x2cd7,
1437 0x2cd8 => 0x2cd9,
1438 0x2cda => 0x2cdb,
1439 0x2cdc => 0x2cdd,
1440 0x2cde => 0x2cdf,
1441 0x2ce0 => 0x2ce1,
1442 0x2ce2 => 0x2ce3,
1443 0x2ceb => 0x2cec,
1444 0x2ced => 0x2cee,
1445 0x2cf2 => 0x2cf3,
1446 0xa640 => 0xa641,
1447 0xa642 => 0xa643,
1448 0xa644 => 0xa645,
1449 0xa646 => 0xa647,
1450 0xa648 => 0xa649,
1451 0xa64a => 0xa64b,
1452 0xa64c => 0xa64d,
1453 0xa64e => 0xa64f,
1454 0xa650 => 0xa651,
1455 0xa652 => 0xa653,
1456 0xa654 => 0xa655,
1457 0xa656 => 0xa657,
1458 0xa658 => 0xa659,
1459 0xa65a => 0xa65b,
1460 0xa65c => 0xa65d,
1461 0xa65e => 0xa65f,
1462 0xa660 => 0xa661,
1463 0xa662 => 0xa663,
1464 0xa664 => 0xa665,
1465 0xa666 => 0xa667,
1466 0xa668 => 0xa669,
1467 0xa66a => 0xa66b,
1468 0xa66c => 0xa66d,
1469 0xa680 => 0xa681,
1470 0xa682 => 0xa683,
1471 0xa684 => 0xa685,
1472 0xa686 => 0xa687,
1473 0xa688 => 0xa689,
1474 0xa68a => 0xa68b,
1475 0xa68c => 0xa68d,
1476 0xa68e => 0xa68f,
1477 0xa690 => 0xa691,
1478 0xa692 => 0xa693,
1479 0xa694 => 0xa695,
1480 0xa696 => 0xa697,
1481 0xa698 => 0xa699,
1482 0xa69a => 0xa69b,
1483 0xa722 => 0xa723,
1484 0xa724 => 0xa725,
1485 0xa726 => 0xa727,
1486 0xa728 => 0xa729,
1487 0xa72a => 0xa72b,
1488 0xa72c => 0xa72d,
1489 0xa72e => 0xa72f,
1490 0xa732 => 0xa733,
1491 0xa734 => 0xa735,
1492 0xa736 => 0xa737,
1493 0xa738 => 0xa739,
1494 0xa73a => 0xa73b,
1495 0xa73c => 0xa73d,
1496 0xa73e => 0xa73f,
1497 0xa740 => 0xa741,
1498 0xa742 => 0xa743,
1499 0xa744 => 0xa745,
1500 0xa746 => 0xa747,
1501 0xa748 => 0xa749,
1502 0xa74a => 0xa74b,
1503 0xa74c => 0xa74d,
1504 0xa74e => 0xa74f,
1505 0xa750 => 0xa751,
1506 0xa752 => 0xa753,
1507 0xa754 => 0xa755,
1508 0xa756 => 0xa757,
1509 0xa758 => 0xa759,
1510 0xa75a => 0xa75b,
1511 0xa75c => 0xa75d,
1512 0xa75e => 0xa75f,
1513 0xa760 => 0xa761,
1514 0xa762 => 0xa763,
1515 0xa764 => 0xa765,
1516 0xa766 => 0xa767,
1517 0xa768 => 0xa769,
1518 0xa76a => 0xa76b,
1519 0xa76c => 0xa76d,
1520 0xa76e => 0xa76f,
1521 0xa779 => 0xa77a,
1522 0xa77b => 0xa77c,
1523 0xa77d => 0x1d79,
1524 0xa77e => 0xa77f,
1525 0xa780 => 0xa781,
1526 0xa782 => 0xa783,
1527 0xa784 => 0xa785,
1528 0xa786 => 0xa787,
1529 0xa78b => 0xa78c,
1530 0xa78d => 0x0265,
1531 0xa790 => 0xa791,
1532 0xa792 => 0xa793,
1533 0xa796 => 0xa797,
1534 0xa798 => 0xa799,
1535 0xa79a => 0xa79b,
1536 0xa79c => 0xa79d,
1537 0xa79e => 0xa79f,
1538 0xa7a0 => 0xa7a1,
1539 0xa7a2 => 0xa7a3,
1540 0xa7a4 => 0xa7a5,
1541 0xa7a6 => 0xa7a7,
1542 0xa7a8 => 0xa7a9,
1543 0xa7aa => 0x0266,
1544 0xa7ab => 0x025c,
1545 0xa7ac => 0x0261,
1546 0xa7ad => 0x026c,
1547 0xa7ae => 0x026a,
1548 0xa7b0 => 0x029e,
1549 0xa7b1 => 0x0287,
1550 0xa7b2 => 0x029d,
1551 0xa7b3 => 0xab53,
1552 0xa7b4 => 0xa7b5,
1553 0xa7b6 => 0xa7b7,
1554 0xa7b8 => 0xa7b9,
1555 0xa7ba => 0xa7bb,
1556 0xa7bc => 0xa7bd,
1557 0xa7be => 0xa7bf,
1558 0xa7c0 => 0xa7c1,
1559 0xa7c2 => 0xa7c3,
1560 0xa7c4 => 0xa794,
1561 0xa7c5 => 0x0282,
1562 0xa7c6 => 0x1d8e,
1563 0xa7c7 => 0xa7c8,
1564 0xa7c9 => 0xa7ca,
1565 0xa7d0 => 0xa7d1,
1566 0xa7d6 => 0xa7d7,
1567 0xa7d8 => 0xa7d9,
1568 0xa7f5 => 0xa7f6,
1569 0xab70 => 0x13a0,
1570 0xab71 => 0x13a1,
1571 0xab72 => 0x13a2,
1572 0xab73 => 0x13a3,
1573 0xab74 => 0x13a4,
1574 0xab75 => 0x13a5,
1575 0xab76 => 0x13a6,
1576 0xab77 => 0x13a7,
1577 0xab78 => 0x13a8,
1578 0xab79 => 0x13a9,
1579 0xab7a => 0x13aa,
1580 0xab7b => 0x13ab,
1581 0xab7c => 0x13ac,
1582 0xab7d => 0x13ad,
1583 0xab7e => 0x13ae,
1584 0xab7f => 0x13af,
1585 0xab80 => 0x13b0,
1586 0xab81 => 0x13b1,
1587 0xab82 => 0x13b2,
1588 0xab83 => 0x13b3,
1589 0xab84 => 0x13b4,
1590 0xab85 => 0x13b5,
1591 0xab86 => 0x13b6,
1592 0xab87 => 0x13b7,
1593 0xab88 => 0x13b8,
1594 0xab89 => 0x13b9,
1595 0xab8a => 0x13ba,
1596 0xab8b => 0x13bb,
1597 0xab8c => 0x13bc,
1598 0xab8d => 0x13bd,
1599 0xab8e => 0x13be,
1600 0xab8f => 0x13bf,
1601 0xab90 => 0x13c0,
1602 0xab91 => 0x13c1,
1603 0xab92 => 0x13c2,
1604 0xab93 => 0x13c3,
1605 0xab94 => 0x13c4,
1606 0xab95 => 0x13c5,
1607 0xab96 => 0x13c6,
1608 0xab97 => 0x13c7,
1609 0xab98 => 0x13c8,
1610 0xab99 => 0x13c9,
1611 0xab9a => 0x13ca,
1612 0xab9b => 0x13cb,
1613 0xab9c => 0x13cc,
1614 0xab9d => 0x13cd,
1615 0xab9e => 0x13ce,
1616 0xab9f => 0x13cf,
1617 0xaba0 => 0x13d0,
1618 0xaba1 => 0x13d1,
1619 0xaba2 => 0x13d2,
1620 0xaba3 => 0x13d3,
1621 0xaba4 => 0x13d4,
1622 0xaba5 => 0x13d5,
1623 0xaba6 => 0x13d6,
1624 0xaba7 => 0x13d7,
1625 0xaba8 => 0x13d8,
1626 0xaba9 => 0x13d9,
1627 0xabaa => 0x13da,
1628 0xabab => 0x13db,
1629 0xabac => 0x13dc,
1630 0xabad => 0x13dd,
1631 0xabae => 0x13de,
1632 0xabaf => 0x13df,
1633 0xabb0 => 0x13e0,
1634 0xabb1 => 0x13e1,
1635 0xabb2 => 0x13e2,
1636 0xabb3 => 0x13e3,
1637 0xabb4 => 0x13e4,
1638 0xabb5 => 0x13e5,
1639 0xabb6 => 0x13e6,
1640 0xabb7 => 0x13e7,
1641 0xabb8 => 0x13e8,
1642 0xabb9 => 0x13e9,
1643 0xabba => 0x13ea,
1644 0xabbb => 0x13eb,
1645 0xabbc => 0x13ec,
1646 0xabbd => 0x13ed,
1647 0xabbe => 0x13ee,
1648 0xabbf => 0x13ef,
1649 0xfb00 => return Fold::Two('\u{0066}', '\u{0066}'),
1650 0xfb01 => return Fold::Two('\u{0066}', '\u{0069}'),
1651 0xfb02 => return Fold::Two('\u{0066}', '\u{006c}'),
1652 0xfb03 => return Fold::Three('\u{0066}', '\u{0066}', '\u{0069}'),
1653 0xfb04 => return Fold::Three('\u{0066}', '\u{0066}', '\u{006c}'),
1654 0xfb05 => return Fold::Two('\u{0073}', '\u{0074}'),
1655 0xfb06 => return Fold::Two('\u{0073}', '\u{0074}'),
1656 0xfb13 => return Fold::Two('\u{0574}', '\u{0576}'),
1657 0xfb14 => return Fold::Two('\u{0574}', '\u{0565}'),
1658 0xfb15 => return Fold::Two('\u{0574}', '\u{056b}'),
1659 0xfb16 => return Fold::Two('\u{057e}', '\u{0576}'),
1660 0xfb17 => return Fold::Two('\u{0574}', '\u{056d}'),
1661 0xff21 => 0xff41,
1662 0xff22 => 0xff42,
1663 0xff23 => 0xff43,
1664 0xff24 => 0xff44,
1665 0xff25 => 0xff45,
1666 0xff26 => 0xff46,
1667 0xff27 => 0xff47,
1668 0xff28 => 0xff48,
1669 0xff29 => 0xff49,
1670 0xff2a => 0xff4a,
1671 0xff2b => 0xff4b,
1672 0xff2c => 0xff4c,
1673 0xff2d => 0xff4d,
1674 0xff2e => 0xff4e,
1675 0xff2f => 0xff4f,
1676 0xff30 => 0xff50,
1677 0xff31 => 0xff51,
1678 0xff32 => 0xff52,
1679 0xff33 => 0xff53,
1680 0xff34 => 0xff54,
1681 0xff35 => 0xff55,
1682 0xff36 => 0xff56,
1683 0xff37 => 0xff57,
1684 0xff38 => 0xff58,
1685 0xff39 => 0xff59,
1686 0xff3a => 0xff5a,
1687 0x10400 => 0x10428,
1688 0x10401 => 0x10429,
1689 0x10402 => 0x1042a,
1690 0x10403 => 0x1042b,
1691 0x10404 => 0x1042c,
1692 0x10405 => 0x1042d,
1693 0x10406 => 0x1042e,
1694 0x10407 => 0x1042f,
1695 0x10408 => 0x10430,
1696 0x10409 => 0x10431,
1697 0x1040a => 0x10432,
1698 0x1040b => 0x10433,
1699 0x1040c => 0x10434,
1700 0x1040d => 0x10435,
1701 0x1040e => 0x10436,
1702 0x1040f => 0x10437,
1703 0x10410 => 0x10438,
1704 0x10411 => 0x10439,
1705 0x10412 => 0x1043a,
1706 0x10413 => 0x1043b,
1707 0x10414 => 0x1043c,
1708 0x10415 => 0x1043d,
1709 0x10416 => 0x1043e,
1710 0x10417 => 0x1043f,
1711 0x10418 => 0x10440,
1712 0x10419 => 0x10441,
1713 0x1041a => 0x10442,
1714 0x1041b => 0x10443,
1715 0x1041c => 0x10444,
1716 0x1041d => 0x10445,
1717 0x1041e => 0x10446,
1718 0x1041f => 0x10447,
1719 0x10420 => 0x10448,
1720 0x10421 => 0x10449,
1721 0x10422 => 0x1044a,
1722 0x10423 => 0x1044b,
1723 0x10424 => 0x1044c,
1724 0x10425 => 0x1044d,
1725 0x10426 => 0x1044e,
1726 0x10427 => 0x1044f,
1727 0x104b0 => 0x104d8,
1728 0x104b1 => 0x104d9,
1729 0x104b2 => 0x104da,
1730 0x104b3 => 0x104db,
1731 0x104b4 => 0x104dc,
1732 0x104b5 => 0x104dd,
1733 0x104b6 => 0x104de,
1734 0x104b7 => 0x104df,
1735 0x104b8 => 0x104e0,
1736 0x104b9 => 0x104e1,
1737 0x104ba => 0x104e2,
1738 0x104bb => 0x104e3,
1739 0x104bc => 0x104e4,
1740 0x104bd => 0x104e5,
1741 0x104be => 0x104e6,
1742 0x104bf => 0x104e7,
1743 0x104c0 => 0x104e8,
1744 0x104c1 => 0x104e9,
1745 0x104c2 => 0x104ea,
1746 0x104c3 => 0x104eb,
1747 0x104c4 => 0x104ec,
1748 0x104c5 => 0x104ed,
1749 0x104c6 => 0x104ee,
1750 0x104c7 => 0x104ef,
1751 0x104c8 => 0x104f0,
1752 0x104c9 => 0x104f1,
1753 0x104ca => 0x104f2,
1754 0x104cb => 0x104f3,
1755 0x104cc => 0x104f4,
1756 0x104cd => 0x104f5,
1757 0x104ce => 0x104f6,
1758 0x104cf => 0x104f7,
1759 0x104d0 => 0x104f8,
1760 0x104d1 => 0x104f9,
1761 0x104d2 => 0x104fa,
1762 0x104d3 => 0x104fb,
1763 0x10570 => 0x10597,
1764 0x10571 => 0x10598,
1765 0x10572 => 0x10599,
1766 0x10573 => 0x1059a,
1767 0x10574 => 0x1059b,
1768 0x10575 => 0x1059c,
1769 0x10576 => 0x1059d,
1770 0x10577 => 0x1059e,
1771 0x10578 => 0x1059f,
1772 0x10579 => 0x105a0,
1773 0x1057a => 0x105a1,
1774 0x1057c => 0x105a3,
1775 0x1057d => 0x105a4,
1776 0x1057e => 0x105a5,
1777 0x1057f => 0x105a6,
1778 0x10580 => 0x105a7,
1779 0x10581 => 0x105a8,
1780 0x10582 => 0x105a9,
1781 0x10583 => 0x105aa,
1782 0x10584 => 0x105ab,
1783 0x10585 => 0x105ac,
1784 0x10586 => 0x105ad,
1785 0x10587 => 0x105ae,
1786 0x10588 => 0x105af,
1787 0x10589 => 0x105b0,
1788 0x1058a => 0x105b1,
1789 0x1058c => 0x105b3,
1790 0x1058d => 0x105b4,
1791 0x1058e => 0x105b5,
1792 0x1058f => 0x105b6,
1793 0x10590 => 0x105b7,
1794 0x10591 => 0x105b8,
1795 0x10592 => 0x105b9,
1796 0x10594 => 0x105bb,
1797 0x10595 => 0x105bc,
1798 0x10c80 => 0x10cc0,
1799 0x10c81 => 0x10cc1,
1800 0x10c82 => 0x10cc2,
1801 0x10c83 => 0x10cc3,
1802 0x10c84 => 0x10cc4,
1803 0x10c85 => 0x10cc5,
1804 0x10c86 => 0x10cc6,
1805 0x10c87 => 0x10cc7,
1806 0x10c88 => 0x10cc8,
1807 0x10c89 => 0x10cc9,
1808 0x10c8a => 0x10cca,
1809 0x10c8b => 0x10ccb,
1810 0x10c8c => 0x10ccc,
1811 0x10c8d => 0x10ccd,
1812 0x10c8e => 0x10cce,
1813 0x10c8f => 0x10ccf,
1814 0x10c90 => 0x10cd0,
1815 0x10c91 => 0x10cd1,
1816 0x10c92 => 0x10cd2,
1817 0x10c93 => 0x10cd3,
1818 0x10c94 => 0x10cd4,
1819 0x10c95 => 0x10cd5,
1820 0x10c96 => 0x10cd6,
1821 0x10c97 => 0x10cd7,
1822 0x10c98 => 0x10cd8,
1823 0x10c99 => 0x10cd9,
1824 0x10c9a => 0x10cda,
1825 0x10c9b => 0x10cdb,
1826 0x10c9c => 0x10cdc,
1827 0x10c9d => 0x10cdd,
1828 0x10c9e => 0x10cde,
1829 0x10c9f => 0x10cdf,
1830 0x10ca0 => 0x10ce0,
1831 0x10ca1 => 0x10ce1,
1832 0x10ca2 => 0x10ce2,
1833 0x10ca3 => 0x10ce3,
1834 0x10ca4 => 0x10ce4,
1835 0x10ca5 => 0x10ce5,
1836 0x10ca6 => 0x10ce6,
1837 0x10ca7 => 0x10ce7,
1838 0x10ca8 => 0x10ce8,
1839 0x10ca9 => 0x10ce9,
1840 0x10caa => 0x10cea,
1841 0x10cab => 0x10ceb,
1842 0x10cac => 0x10cec,
1843 0x10cad => 0x10ced,
1844 0x10cae => 0x10cee,
1845 0x10caf => 0x10cef,
1846 0x10cb0 => 0x10cf0,
1847 0x10cb1 => 0x10cf1,
1848 0x10cb2 => 0x10cf2,
1849 0x118a0 => 0x118c0,
1850 0x118a1 => 0x118c1,
1851 0x118a2 => 0x118c2,
1852 0x118a3 => 0x118c3,
1853 0x118a4 => 0x118c4,
1854 0x118a5 => 0x118c5,
1855 0x118a6 => 0x118c6,
1856 0x118a7 => 0x118c7,
1857 0x118a8 => 0x118c8,
1858 0x118a9 => 0x118c9,
1859 0x118aa => 0x118ca,
1860 0x118ab => 0x118cb,
1861 0x118ac => 0x118cc,
1862 0x118ad => 0x118cd,
1863 0x118ae => 0x118ce,
1864 0x118af => 0x118cf,
1865 0x118b0 => 0x118d0,
1866 0x118b1 => 0x118d1,
1867 0x118b2 => 0x118d2,
1868 0x118b3 => 0x118d3,
1869 0x118b4 => 0x118d4,
1870 0x118b5 => 0x118d5,
1871 0x118b6 => 0x118d6,
1872 0x118b7 => 0x118d7,
1873 0x118b8 => 0x118d8,
1874 0x118b9 => 0x118d9,
1875 0x118ba => 0x118da,
1876 0x118bb => 0x118db,
1877 0x118bc => 0x118dc,
1878 0x118bd => 0x118dd,
1879 0x118be => 0x118de,
1880 0x118bf => 0x118df,
1881 0x16e40 => 0x16e60,
1882 0x16e41 => 0x16e61,
1883 0x16e42 => 0x16e62,
1884 0x16e43 => 0x16e63,
1885 0x16e44 => 0x16e64,
1886 0x16e45 => 0x16e65,
1887 0x16e46 => 0x16e66,
1888 0x16e47 => 0x16e67,
1889 0x16e48 => 0x16e68,
1890 0x16e49 => 0x16e69,
1891 0x16e4a => 0x16e6a,
1892 0x16e4b => 0x16e6b,
1893 0x16e4c => 0x16e6c,
1894 0x16e4d => 0x16e6d,
1895 0x16e4e => 0x16e6e,
1896 0x16e4f => 0x16e6f,
1897 0x16e50 => 0x16e70,
1898 0x16e51 => 0x16e71,
1899 0x16e52 => 0x16e72,
1900 0x16e53 => 0x16e73,
1901 0x16e54 => 0x16e74,
1902 0x16e55 => 0x16e75,
1903 0x16e56 => 0x16e76,
1904 0x16e57 => 0x16e77,
1905 0x16e58 => 0x16e78,
1906 0x16e59 => 0x16e79,
1907 0x16e5a => 0x16e7a,
1908 0x16e5b => 0x16e7b,
1909 0x16e5c => 0x16e7c,
1910 0x16e5d => 0x16e7d,
1911 0x16e5e => 0x16e7e,
1912 0x16e5f => 0x16e7f,
1913 0x1e900 => 0x1e922,
1914 0x1e901 => 0x1e923,
1915 0x1e902 => 0x1e924,
1916 0x1e903 => 0x1e925,
1917 0x1e904 => 0x1e926,
1918 0x1e905 => 0x1e927,
1919 0x1e906 => 0x1e928,
1920 0x1e907 => 0x1e929,
1921 0x1e908 => 0x1e92a,
1922 0x1e909 => 0x1e92b,
1923 0x1e90a => 0x1e92c,
1924 0x1e90b => 0x1e92d,
1925 0x1e90c => 0x1e92e,
1926 0x1e90d => 0x1e92f,
1927 0x1e90e => 0x1e930,
1928 0x1e90f => 0x1e931,
1929 0x1e910 => 0x1e932,
1930 0x1e911 => 0x1e933,
1931 0x1e912 => 0x1e934,
1932 0x1e913 => 0x1e935,
1933 0x1e914 => 0x1e936,
1934 0x1e915 => 0x1e937,
1935 0x1e916 => 0x1e938,
1936 0x1e917 => 0x1e939,
1937 0x1e918 => 0x1e93a,
1938 0x1e919 => 0x1e93b,
1939 0x1e91a => 0x1e93c,
1940 0x1e91b => 0x1e93d,
1941 0x1e91c => 0x1e93e,
1942 0x1e91d => 0x1e93f,
1943 0x1e91e => 0x1e940,
1944 0x1e91f => 0x1e941,
1945 0x1e920 => 0x1e942,
1946 0x1e921 => 0x1e943,
1947 _ => orig as u32,
1948 };
1949 Fold::One(char::from_u32(single_char).unwrap())
1950 }
1951
1952 for c_index in 0..126217 {
1953 if let Some(c) = char::from_u32(c_index) {
1954 let reference: Vec<char> = lookup_naive(c).collect();
1955 let actual: Vec<char> = lookup(c).collect();
1956 if actual != reference {
1957 assert!(
1958 false,
1959 "case-folding {:?} (#0x{:04x}) failed: Expected {:?}, got {:?}",
1960 c, c_index, reference, actual
1961 );
1962 }
1963 }
1964 }
1965}
1966