Coverage Report

Created: 2025-07-11 06:39

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