summaryrefslogtreecommitdiffstats
path: root/contrib/idn/idnkit-1.0-src/lib/nameprepdata.c
blob: 35adb058ec289367f0c18a14256b18539ed04493 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
/* $Id: nameprepdata.c,v 1.1.1.1 2003/06/04 00:26:05 marka Exp $ */
/* $-Id: generate_nameprep_data.pl,v 1.9 2002/11/29 09:08:13 ishisone Exp -$ */
/*
 * Do not edit this file!
 * This file is generated from NAMEPREP specification.
 */

#define MAP_BITS_0	9
#define MAP_BITS_1	7
#define MAP_BITS_2	5

#define PROH_BITS_0	7
#define PROH_BITS_1	7
#define PROH_BITS_2	7

#define UNAS_BITS_0	7
#define UNAS_BITS_1	7
#define UNAS_BITS_2	7

#define BIDI_BITS_0	9
#define BIDI_BITS_1	7
#define BIDI_BITS_2	5

static const unsigned short nameprep_rfc3491_map_imap[] = {
	  272,   400,   528,   656,   784,   784,   784,   784, 
	  784,   784,   784,   784,   784,   784,   784,   912, 
	 1040,   784,   784,   784,   784,   784,   784,   784, 
	  784,   784,   784,   784,   784,  1168,   784,   784, 
	  784,   784,   784,   784,   784,   784,   784,   784, 
	  784,   784,   784,   784,   784,   784,   784,   784, 
	  784,   784,   784,   784,   784,   784,   784,   784, 
	  784,   784,   784,   784,   784,   784,   784,   784, 
	  784,   784,   784,   784,   784,   784,   784,   784, 
	  784,   784,   784,   784,   784,   784,   784,   784, 
	  784,   784,   784,   784,   784,   784,   784,   784, 
	  784,   784,   784,   784,   784,   784,   784,   784, 
	  784,   784,   784,   784,   784,   784,   784,   784, 
	  784,   784,   784,   784,   784,   784,   784,   784, 
	  784,   784,   784,   784,   784,   784,   784,   784, 
	  784,   784,   784,   784,   784,   784,   784,   784, 
	  784,   784,   784,   784,   784,   784,   784,   784, 
	  784,   784,   784,   784,   784,   784,   784,   784, 
	  784,   784,   784,   784,   784,   784,   784,   784, 
	  784,   784,   784,   784,   784,   784,   784,   784, 
	  784,   784,   784,   784,   784,   784,   784,   784, 
	  784,   784,   784,   784,   784,   784,   784,   784, 
	  784,   784,   784,   784,   784,   784,   784,   784, 
	  784,   784,   784,   784,   784,   784,   784,   784, 
	  784,   784,   784,   784,   784,   784,   784,   784, 
	  784,   784,   784,   784,   784,   784,   784,   784, 
	  784,   784,   784,   784,   784,   784,   784,   784, 
	  784,   784,   784,   784,   784,   784,   784,   784, 
	  784,   784,   784,   784,   784,   784,   784,   784, 
	  784,   784,   784,   784,   784,   784,   784,   784, 
	  784,   784,   784,   784,   784,   784,   784,   784, 
	  784,   784,   784,   784,   784,   784,   784,   784, 
	  784,   784,   784,   784,   784,   784,   784,   784, 
	  784,   784,   784,   784,   784,   784,   784,   784, 
	    0,     0,     1,     0,     0,     2,     3,     0, 
	    4,     5,     6,     7,     8,     9,    10,    11, 
	   12,    13,     0,     0,     0,     0,     0,     0, 
	    0,     0,    14,    15,    16,    17,    18,    19, 
	   20,    21,     0,    22,    23,    24,    25,    26, 
	   27,    28,    29,     0,    30,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	   31,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	   32,    33,    34,    35,    36,    37,    38,    39, 
	   40,    41,    42,    43,    44,    45,    46,    47, 
	   48,     0,     0,    49,     0,    50,     0,     0, 
	   51,    52,    53,    54,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,    55,    56,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,    57,    58,    59,    60,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	   61,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	   62,     0,     0,     0,     0,     0,     0,    63, 
	    0,    64,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	   65,    66,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	   67,    68,    69,    70,    71,    72,    73,    74, 
	   75,    76,    77,    78,    79,    67,    68,    69, 
	   70,    80,    81,    73,    74,    82,    83,    84, 
	   85,    86,    87,    88,    89,    90,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
};

static const struct {
	unsigned short tbl[32];
} nameprep_rfc3491_map_table[] = {
	{{
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	}},
	{{
	   0,    2,    4,    6,    8,   10,   12,   14,   16,   18,   20, 
	  22,   24,   26,   28,   30,   32,   34,   36,   38,   40,   42, 
	  44,   46,   48,   50,   52,    0,    0,    0,    0,    0, 
	}},
	{{
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	   0,    0,    1,    0,    0,    0,    0,    0,    0,    0,   54, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	}},
	{{
	  57,   59,   61,   63,   65,   67,   69,   71,   73,   75,   77, 
	  79,   81,   83,   85,   87,   89,   91,   93,   95,   97,   99, 
	 101,    0,  103,  105,  107,  109,  111,  113,  115,  117, 
	}},
	{{
	 123,    0,  126,    0,  129,    0,  132,    0,  135,    0,  138, 
	   0,  141,    0,  144,    0,  147,    0,  150,    0,  153,    0, 
	 156,    0,  159,    0,  162,    0,  165,    0,  168,    0, 
	}},
	{{
	 171,    0,  174,    0,  177,    0,  180,    0,  183,    0,  186, 
	   0,  189,    0,  192,    0,  195,    0,  202,    0,  205,    0, 
	 208,    0,    0,  211,    0,  214,    0,  217,    0,  220, 
	}},
	{{
	   0,  223,    0,  226,    0,  229,    0,  232,    0,  235,  241, 
	   0,  244,    0,  247,    0,  250,    0,  253,    0,  256,    0, 
	 259,    0,  262,    0,  265,    0,  268,    0,  271,    0, 
	}},
	{{
	 274,    0,  277,    0,  280,    0,  283,    0,  286,    0,  289, 
	   0,  292,    0,  295,    0,  298,    0,  301,    0,  304,    0, 
	 307,    0,  310,  312,    0,  315,    0,  318,    0,   38, 
	}},
	{{
	   0,  321,  324,    0,  327,    0,  330,  333,    0,  336,  339, 
	 342,    0,    0,  345,  348,  351,  354,    0,  357,  360,    0, 
	 363,  366,  369,    0,    0,    0,  372,  375,    0,  378, 
	}},
	{{
	 381,    0,  384,    0,  387,    0,  390,  393,    0,  396,    0, 
	   0,  399,    0,  402,  405,    0,  408,  411,  414,    0,  417, 
	   0,  420,  423,    0,    0,    0,  426,    0,    0,    0, 
	}},
	{{
	   0,    0,    0,    0,  429,  429,    0,  432,  432,    0,  435, 
	 435,    0,  438,    0,  441,    0,  444,    0,  447,    0,  450, 
	   0,  453,    0,  456,    0,  459,    0,    0,  462,    0, 
	}},
	{{
	 465,    0,  468,    0,  471,    0,  474,    0,  477,    0,  480, 
	   0,  483,    0,  486,    0,  489,  496,  496,    0,  499,    0, 
	 502,  505,  508,    0,  511,    0,  514,    0,  517,    0, 
	}},
	{{
	 520,    0,  523,    0,  526,    0,  529,    0,  532,    0,  535, 
	   0,  538,    0,  541,    0,  544,    0,  547,    0,  550,    0, 
	 553,    0,  556,    0,  559,    0,  562,    0,  565,    0, 
	}},
	{{
	 568,    0,  571,    0,  574,    0,  577,    0,  580,    0,  583, 
	   0,  586,    0,  589,    0,  592,    0,  595,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	}},
	{{
	   0,    0,    0,    0,    0,  598,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    1,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	}},
	{{
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,  601,    0,    0,    0,    0,    0, 
	}},
	{{
	   0,    0,    0,    0,    0,    0,  608,    0,  611,  614,  617, 
	   0,  620,    0,  623,  626,  629,  640,  643,  646,  649,  652, 
	 655,  658,  661,  598,  664,  667,   54,  670,  673,  676, 
	}},
	{{
	 679,  682,    0,  685,  688,  691,  694,  697,  700,  703,  706, 
	 709,    0,    0,    0,    0,  712,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	}},
	{{
	   0,    0,  685,    0,    0,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,  643,  661,  691,  623,  709,  694, 
	 679,    0,  723,    0,  726,    0,  729,    0,  732,    0, 
	}},
	{{
	 735,    0,  738,    0,  741,    0,  744,    0,  747,    0,  750, 
	   0,  753,    0,  756,    0,  664,  682,  685,    0,  661,  652, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	}},
	{{
	 759,  762,  765,  768,  771,  774,  777,  780,  783,  786,  789, 
	 792,  795,  798,  801,  804,  807,  810,  813,  816,  819,  822, 
	 825,  828,  831,  834,  837,  840,  843,  846,  849,  852, 
	}},
	{{
	 855,  858,  861,  864,  867,  870,  873,  876,  879,  882,  885, 
	 888,  891,  894,  897,  900,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	}},
	{{
	 903,    0,  906,    0,  909,    0,  912,    0,  915,    0,  918, 
	   0,  921,    0,  924,    0,  927,    0,  930,    0,  933,    0, 
	 936,    0,  939,    0,  942,    0,  945,    0,  948,    0, 
	}},
	{{
	 951,    0,    0,    0,    0,    0,    0,    0,    0,    0,  954, 
	   0,  957,    0,  960,    0,  963,    0,  966,    0,  969,    0, 
	 972,    0,  975,    0,  978,    0,  981,    0,  984,    0, 
	}},
	{{
	 987,    0,  990,    0,  993,    0,  996,    0,  999,    0, 1002, 
	   0, 1005,    0, 1008,    0, 1011,    0, 1014,    0, 1017,    0, 
	1020,    0, 1023,    0, 1026,    0, 1029,    0, 1032,    0, 
	}},
	{{
	   0, 1035,    0, 1038,    0, 1041,    0, 1044,    0, 1047,    0, 
	1050,    0, 1053,    0,    0, 1056,    0, 1059,    0, 1062,    0, 
	1065,    0, 1068,    0, 1071,    0, 1074,    0, 1077,    0, 
	}},
	{{
	1080,    0, 1083,    0, 1086,    0, 1089,    0, 1092,    0, 1095, 
	   0, 1098,    0, 1101,    0, 1104,    0, 1107,    0, 1110,    0, 
	   0,    0, 1113,    0,    0,    0,    0,    0,    0,    0, 
	}},
	{{
	1116,    0, 1119,    0, 1122,    0, 1125,    0, 1128,    0, 1131, 
	   0, 1134,    0, 1137,    0,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	}},
	{{
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0, 1140, 1143, 1146, 1149, 1152, 
	1155, 1158, 1161, 1164, 1167, 1170, 1173, 1176, 1179, 1182, 
	}},
	{{
	1185, 1188, 1191, 1194, 1197, 1200, 1203, 1206, 1209, 1212, 1215, 
	1218, 1221, 1224, 1227, 1230, 1233, 1236, 1239, 1242, 1245, 1248, 
	1251,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	}},
	{{
	   0,    0,    0,    0,    0,    0,    0, 1254,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	}},
	{{
	   0,    0,    0,    0,    0,    0,    1,    0,    0,    0,    0, 
	   1,    1,    1,    0,    0,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	}},
	{{
	1261,    0, 1264,    0, 1267,    0, 1270,    0, 1273,    0, 1276, 
	   0, 1279,    0, 1282,    0, 1285,    0, 1288,    0, 1291,    0, 
	1294,    0, 1297,    0, 1300,    0, 1303,    0, 1306,    0, 
	}},
	{{
	1309,    0, 1312,    0, 1315,    0, 1318,    0, 1321,    0, 1324, 
	   0, 1327,    0, 1330,    0, 1333,    0, 1336,    0, 1339,    0, 
	1342,    0, 1345,    0, 1348,    0, 1351,    0, 1354,    0, 
	}},
	{{
	1357,    0, 1360,    0, 1363,    0, 1366,    0, 1369,    0, 1372, 
	   0, 1375,    0, 1378,    0, 1381,    0, 1384,    0, 1387,    0, 
	1390,    0, 1393,    0, 1396,    0, 1399,    0, 1402,    0, 
	}},
	{{
	1405,    0, 1408,    0, 1411,    0, 1414,    0, 1417,    0, 1420, 
	   0, 1423,    0, 1426,    0, 1429,    0, 1432,    0, 1435,    0, 
	1438,    0, 1441,    0, 1444,    0, 1447,    0, 1450,    0, 
	}},
	{{
	1453,    0, 1456,    0, 1459,    0, 1462,    0, 1465,    0, 1468, 
	   0, 1471,    0, 1474,    0, 1477,    0, 1480,    0, 1483,    0, 
	1486, 1493, 1500, 1507, 1514, 1405,    0,    0,    0,    0, 
	}},
	{{
	1521,    0, 1524,    0, 1527,    0, 1530,    0, 1533,    0, 1536, 
	   0, 1539,    0, 1542,    0, 1545,    0, 1548,    0, 1551,    0, 
	1554,    0, 1557,    0, 1560,    0, 1563,    0, 1566,    0, 
	}},
	{{
	1569,    0, 1572,    0, 1575,    0, 1578,    0, 1581,    0, 1584, 
	   0, 1587,    0, 1590,    0, 1593,    0, 1596,    0, 1599,    0, 
	1602,    0, 1605,    0, 1608,    0, 1611,    0, 1614,    0, 
	}},
	{{
	1617,    0, 1620,    0, 1623,    0, 1626,    0, 1629,    0, 1632, 
	   0, 1635,    0, 1638,    0, 1641,    0, 1644,    0, 1647,    0, 
	1650,    0, 1653,    0,    0,    0,    0,    0,    0,    0, 
	}},
	{{
	   0,    0,    0,    0,    0,    0,    0,    0, 1656, 1659, 1662, 
	1665, 1668, 1671, 1674, 1677,    0,    0,    0,    0,    0,    0, 
	   0,    0, 1680, 1683, 1686, 1689, 1692, 1695,    0,    0, 
	}},
	{{
	   0,    0,    0,    0,    0,    0,    0,    0, 1698, 1701, 1704, 
	1707, 1710, 1713, 1716, 1719,    0,    0,    0,    0,    0,    0, 
	   0,    0, 1722, 1725, 1728, 1731, 1734, 1737, 1740, 1743, 
	}},
	{{
	   0,    0,    0,    0,    0,    0,    0,    0, 1746, 1749, 1752, 
	1755, 1758, 1761,    0,    0, 1764,    0, 1771,    0, 1782,    0, 
	1793,    0,    0, 1804,    0, 1807,    0, 1810,    0, 1813, 
	}},
	{{
	   0,    0,    0,    0,    0,    0,    0,    0, 1816, 1819, 1822, 
	1825, 1828, 1831, 1834, 1837,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	}},
	{{
	1840, 1847, 1854, 1861, 1868, 1875, 1882, 1889, 1840, 1847, 1854, 
	1861, 1868, 1875, 1882, 1889, 1896, 1903, 1910, 1917, 1924, 1931, 
	1938, 1945, 1896, 1903, 1910, 1917, 1924, 1931, 1938, 1945, 
	}},
	{{
	1952, 1959, 1966, 1973, 1980, 1987, 1994, 2001, 1952, 1959, 1966, 
	1973, 1980, 1987, 1994, 2001,    0,    0, 2008, 2015, 2022,    0, 
	2029, 2036, 2047, 2050, 2053, 2056, 2015,    0,  598,    0, 
	}},
	{{
	   0,    0, 2059, 2066, 2073,    0, 2080, 2087, 2098, 2101, 2104, 
	2107, 2066,    0,    0,    0,    0,    0, 2110,  629,    0,    0, 
	2121, 2128, 2139, 2142, 2145, 2148,    0,    0,    0,    0, 
	}},
	{{
	   0,    0, 2151,  712, 2162,    0, 2169, 2176, 2187, 2190, 2193, 
	2196, 2199,    0,    0,    0,    0,    0, 2202, 2209, 2216,    0, 
	2223, 2230, 2241, 2244, 2247, 2250, 2209,    0,    0,    0, 
	}},
	{{
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	   1,    1,    1,    0,    0,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	}},
	{{
	   1,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	}},
	{{
	   0,    0,    0,    0,    0,    0,    0,    0, 2253,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	}},
	{{
	   0,    0,    6, 2259,    0,    0,    0,  351,    0, 2265,    0, 
	  16,   16,   16,    0,    0,   18,   18,   24,    0,    0,   28, 
	2271,    0,    0,   32,   34,   36,   36,   36,    0,    0, 
	}},
	{{
	2277, 2283, 2293,    0,   52,    0,  703,    0,   52,    0,   22, 
	  67,    4,    6,    0,    0,   10,   12,    0,   26,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,  646,  679, 
	}},
	{{
	   0,    0,    0,    0,    0,    8,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	}},
	{{
	2299, 2302, 2305, 2308, 2311, 2314, 2317, 2320, 2323, 2326, 2329, 
	2332, 2335, 2338, 2341, 2344,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	}},
	{{
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	2347, 2350, 2353, 2356, 2359, 2362, 2365, 2368, 2371, 2374, 
	}},
	{{
	2377, 2380, 2383, 2386, 2389, 2392, 2395, 2398, 2401, 2404, 2407, 
	2410, 2413, 2416, 2419, 2422,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	}},
	{{
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0, 2425,    0, 2435,    0, 2441, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	}},
	{{
	2447, 2453, 2459, 2465, 2471, 2477, 2483, 2489,    0,    0, 2495, 
	2501, 2507,    0,    0,    0, 2513, 2519, 2529, 2539, 2549,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	}},
	{{
	   0,    0,    0,    0,    0,    0,    0,    0,    0, 2447, 2559, 
	2569, 2579,    0,    0,    0,    0,    0,    0,    0, 2589, 2595, 
	2601, 2607, 2613, 2607, 2619, 2625, 2631, 2637, 2643, 2637, 
	}},
	{{
	2649, 2656,    0, 2663,    0,    0, 2669, 2683, 2693, 2699,    0, 
	2705,    0, 2711, 2717,    0,    0,    0,    0,    0,    0,    0, 
	   0, 2723,    0, 2729, 2739,    0, 2745, 2751,    0,    0, 
	}},
	{{
	2757, 2763, 2769, 2775, 2785, 2795, 2795,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0, 2801, 2808, 2815, 
	2822, 2829,    0,    0,    0,    0,    0,    0,    0,    0, 
	}},
	{{
	   1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1, 
	   1,    1,    1,    1,    1,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	}},
	{{
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    1, 
	}},
	{{
	   0, 2836, 2839, 2842, 2845, 2848, 2851, 2854, 2857, 2860, 2863, 
	2866, 2869, 2872, 2875, 2878, 2881, 2884, 2887, 2890, 2893, 2896, 
	2899, 2902, 2905, 2908, 2911,    0,    0,    0,    0,    0, 
	}},
	{{
	2914, 2918, 2922, 2926, 2930, 2934, 2938, 2942, 2946, 2950, 2954, 
	2958, 2962, 2966, 2970, 2974, 2978, 2982, 2986, 2990, 2994, 2998, 
	3002, 3006, 3010, 3014, 3018, 3022, 3026, 3030, 3034, 3038, 
	}},
	{{
	3042, 3046, 3050, 3054, 3058, 3062,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	}},
	{{
	   2,    4,    6,    8,   10,   12,   14,   16,   18,   20,   22, 
	  24,   26,   28,   30,   32,   34,   36,   38,   40,   42,   44, 
	  46,   48,   50,   52,    0,    0,    0,    0,    0,    0, 
	}},
	{{
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    2,    4, 
	   6,    8,   10,   12,   14,   16,   18,   20,   22,   24, 
	}},
	{{
	  26,   28,   30,   32,   34,   36,   38,   40,   42,   44,   46, 
	  48,   50,   52,    0,    0,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	}},
	{{
	   0,    0,    0,    0,    0,    0,    0,    0,    2,    4,    6, 
	   8,   10,   12,   14,   16,   18,   20,   22,   24,   26,   28, 
	  30,   32,   34,   36,   38,   40,   42,   44,   46,   48, 
	}},
	{{
	  50,   52,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    2,    0,    6,    8, 
	}},
	{{
	   0,    0,   14,    0,    0,   20,   22,    0,    0,   28,   30, 
	  32,   34,    0,   38,   40,   42,   44,   46,   48,   50,   52, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	}},
	{{
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    2,    4,    6,    8,   10,   12, 
	  14,   16,   18,   20,   22,   24,   26,   28,   30,   32, 
	}},
	{{
	  34,   36,   38,   40,   42,   44,   46,   48,   50,   52,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	}},
	{{
	   0,    0,    0,    0,    2,    4,    0,    8,   10,   12,   14, 
	   0,    0,   20,   22,   24,   26,   28,   30,   32,   34,    0, 
	  38,   40,   42,   44,   46,   48,   50,    0,    0,    0, 
	}},
	{{
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	   0,    0,    2,    4,    0,    8,   10,   12,   14,    0, 
	}},
	{{
	  18,   20,   22,   24,   26,    0,   30,    0,    0,    0,   38, 
	  40,   42,   44,   46,   48,   50,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	}},
	{{
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	   0,    2,    4,    6,    8,   10,   12,   14,   16,   18,   20, 
	  22,   24,   26,   28,   30,   32,   34,   36,   38,   40, 
	}},
	{{
	  42,   44,   46,   48,   50,   52,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	}},
	{{
	  50,   52,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    2,    4,    6,    8, 
	}},
	{{
	  10,   12,   14,   16,   18,   20,   22,   24,   26,   28,   30, 
	  32,   34,   36,   38,   40,   42,   44,   46,   48,   50,   52, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	}},
	{{
	   0,    0,    0,    0,    0,    0,    0,    0,  640,  643,  646, 
	 649,  652,  655,  658,  661,  598,  664,  667,   54,  670,  673, 
	 676,  679,  682,  661,  685,  688,  691,  694,  697,  700, 
	}},
	{{
	 703,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,  685,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	}},
	{{
	   0,    0,  640,  643,  646,  649,  652,  655,  658,  661,  598, 
	 664,  667,   54,  670,  673,  676,  679,  682,  661,  685,  688, 
	 691,  694,  697,  700,  703,    0,    0,    0,    0,    0, 
	}},
	{{
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	   0,    0,  685,    0,    0,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,  640,  643,  646,  649, 
	}},
	{{
	 652,  655,  658,  661,  598,  664,  667,   54,  670,  673,  676, 
	 679,  682,  661,  685,  688,  691,  694,  697,  700,  703,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	}},
	{{
	   0,    0,    0,    0,    0,    0,    0,  685,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	 640,  643,  646,  649,  652,  655,  658,  661,  598,  664, 
	}},
	{{
	 667,   54,  670,  673,  676,  679,  682,  661,  685,  688,  691, 
	 694,  697,  700,  703,    0,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	}},
	{{
	   0,  685,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,  640,  643,  646,  649,  652,  655, 
	 658,  661,  598,  664,  667,   54,  670,  673,  676,  679, 
	}},
	{{
	 682,  661,  685,  688,  691,  694,  697,  700,  703,    0,    0, 
	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 
	   0,    0,    0,    0,    0,  685,    0,    0,    0,    0, 
	}},
};

static const unsigned char nameprep_rfc3491_map_data[] = {
	  0,   0,   1,  97,   1,  98,   1,  99,   1, 100,   1, 101, 
	  1, 102,   1, 103,   1, 104,   1, 105,   1, 106,   1, 107, 
	  1, 108,   1, 109,   1, 110,   1, 111,   1, 112,   1, 113, 
	  1, 114,   1, 115,   1, 116,   1, 117,   1, 118,   1, 119, 
	  1, 120,   1, 121,   1, 122,   2, 188,   3,   1, 224,   1, 
	225,   1, 226,   1, 227,   1, 228,   1, 229,   1, 230,   1, 
	231,   1, 232,   1, 233,   1, 234,   1, 235,   1, 236,   1, 
	237,   1, 238,   1, 239,   1, 240,   1, 241,   1, 242,   1, 
	243,   1, 244,   1, 245,   1, 246,   1, 248,   1, 249,   1, 
	250,   1, 251,   1, 252,   1, 253,   1, 254,   5, 115,   0, 
	  0,   0, 115,   2,   1,   1,   2,   3,   1,   2,   5,   1, 
	  2,   7,   1,   2,   9,   1,   2,  11,   1,   2,  13,   1, 
	  2,  15,   1,   2,  17,   1,   2,  19,   1,   2,  21,   1, 
	  2,  23,   1,   2,  25,   1,   2,  27,   1,   2,  29,   1, 
	  2,  31,   1,   2,  33,   1,   2,  35,   1,   2,  37,   1, 
	  2,  39,   1,   2,  41,   1,   2,  43,   1,   2,  45,   1, 
	  2,  47,   1,   6, 105,   0,   0,   0,   7,   3,   2,  51, 
	  1,   2,  53,   1,   2,  55,   1,   2,  58,   1,   2,  60, 
	  1,   2,  62,   1,   2,  64,   1,   2,  66,   1,   2,  68, 
	  1,   2,  70,   1,   2,  72,   1,   5, 188,   2,   0,   0, 
	110,   2,  75,   1,   2,  77,   1,   2,  79,   1,   2,  81, 
	  1,   2,  83,   1,   2,  85,   1,   2,  87,   1,   2,  89, 
	  1,   2,  91,   1,   2,  93,   1,   2,  95,   1,   2,  97, 
	  1,   2,  99,   1,   2, 101,   1,   2, 103,   1,   2, 105, 
	  1,   2, 107,   1,   2, 109,   1,   2, 111,   1,   2, 113, 
	  1,   2, 115,   1,   2, 117,   1,   2, 119,   1,   1, 255, 
	  2, 122,   1,   2, 124,   1,   2, 126,   1,   2,  83,   2, 
	  2, 131,   1,   2, 133,   1,   2,  84,   2,   2, 136,   1, 
	  2,  86,   2,   2,  87,   2,   2, 140,   1,   2, 221,   1, 
	  2,  89,   2,   2,  91,   2,   2, 146,   1,   2,  96,   2, 
	  2,  99,   2,   2, 105,   2,   2, 104,   2,   2, 153,   1, 
	  2, 111,   2,   2, 114,   2,   2, 117,   2,   2, 161,   1, 
	  2, 163,   1,   2, 165,   1,   2, 128,   2,   2, 168,   1, 
	  2, 131,   2,   2, 173,   1,   2, 136,   2,   2, 176,   1, 
	  2, 138,   2,   2, 139,   2,   2, 180,   1,   2, 182,   1, 
	  2, 146,   2,   2, 185,   1,   2, 189,   1,   2, 198,   1, 
	  2, 201,   1,   2, 204,   1,   2, 206,   1,   2, 208,   1, 
	  2, 210,   1,   2, 212,   1,   2, 214,   1,   2, 216,   1, 
	  2, 218,   1,   2, 220,   1,   2, 223,   1,   2, 225,   1, 
	  2, 227,   1,   2, 229,   1,   2, 231,   1,   2, 233,   1, 
	  2, 235,   1,   2, 237,   1,   2, 239,   1,   6, 106,   0, 
	  0,   0,  12,   3,   2, 243,   1,   2, 245,   1,   2, 149, 
	  1,   2, 191,   1,   2, 249,   1,   2, 251,   1,   2, 253, 
	  1,   2, 255,   1,   2,   1,   2,   2,   3,   2,   2,   5, 
	  2,   2,   7,   2,   2,   9,   2,   2,  11,   2,   2,  13, 
	  2,   2,  15,   2,   2,  17,   2,   2,  19,   2,   2,  21, 
	  2,   2,  23,   2,   2,  25,   2,   2,  27,   2,   2,  29, 
	  2,   2,  31,   2,   2, 158,   1,   2,  35,   2,   2,  37, 
	  2,   2,  39,   2,   2,  41,   2,   2,  43,   2,   2,  45, 
	  2,   2,  47,   2,   2,  49,   2,   2,  51,   2,   2, 185, 
	  3,   6,  32,   0,   0,   0, 185,   3,   2, 172,   3,   2, 
	173,   3,   2, 174,   3,   2, 175,   3,   2, 204,   3,   2, 
	205,   3,   2, 206,   3,  10, 185,   3,   0,   0,   8,   3, 
	  0,   0,   1,   3,   2, 177,   3,   2, 178,   3,   2, 179, 
	  3,   2, 180,   3,   2, 181,   3,   2, 182,   3,   2, 183, 
	  3,   2, 184,   3,   2, 186,   3,   2, 187,   3,   2, 189, 
	  3,   2, 190,   3,   2, 191,   3,   2, 192,   3,   2, 193, 
	  3,   2, 195,   3,   2, 196,   3,   2, 197,   3,   2, 198, 
	  3,   2, 199,   3,   2, 200,   3,   2, 201,   3,   2, 202, 
	  3,   2, 203,   3,  10, 197,   3,   0,   0,   8,   3,   0, 
	  0,   1,   3,   2, 217,   3,   2, 219,   3,   2, 221,   3, 
	  2, 223,   3,   2, 225,   3,   2, 227,   3,   2, 229,   3, 
	  2, 231,   3,   2, 233,   3,   2, 235,   3,   2, 237,   3, 
	  2, 239,   3,   2,  80,   4,   2,  81,   4,   2,  82,   4, 
	  2,  83,   4,   2,  84,   4,   2,  85,   4,   2,  86,   4, 
	  2,  87,   4,   2,  88,   4,   2,  89,   4,   2,  90,   4, 
	  2,  91,   4,   2,  92,   4,   2,  93,   4,   2,  94,   4, 
	  2,  95,   4,   2,  48,   4,   2,  49,   4,   2,  50,   4, 
	  2,  51,   4,   2,  52,   4,   2,  53,   4,   2,  54,   4, 
	  2,  55,   4,   2,  56,   4,   2,  57,   4,   2,  58,   4, 
	  2,  59,   4,   2,  60,   4,   2,  61,   4,   2,  62,   4, 
	  2,  63,   4,   2,  64,   4,   2,  65,   4,   2,  66,   4, 
	  2,  67,   4,   2,  68,   4,   2,  69,   4,   2,  70,   4, 
	  2,  71,   4,   2,  72,   4,   2,  73,   4,   2,  74,   4, 
	  2,  75,   4,   2,  76,   4,   2,  77,   4,   2,  78,   4, 
	  2,  79,   4,   2,  97,   4,   2,  99,   4,   2, 101,   4, 
	  2, 103,   4,   2, 105,   4,   2, 107,   4,   2, 109,   4, 
	  2, 111,   4,   2, 113,   4,   2, 115,   4,   2, 117,   4, 
	  2, 119,   4,   2, 121,   4,   2, 123,   4,   2, 125,   4, 
	  2, 127,   4,   2, 129,   4,   2, 139,   4,   2, 141,   4, 
	  2, 143,   4,   2, 145,   4,   2, 147,   4,   2, 149,   4, 
	  2, 151,   4,   2, 153,   4,   2, 155,   4,   2, 157,   4, 
	  2, 159,   4,   2, 161,   4,   2, 163,   4,   2, 165,   4, 
	  2, 167,   4,   2, 169,   4,   2, 171,   4,   2, 173,   4, 
	  2, 175,   4,   2, 177,   4,   2, 179,   4,   2, 181,   4, 
	  2, 183,   4,   2, 185,   4,   2, 187,   4,   2, 189,   4, 
	  2, 191,   4,   2, 194,   4,   2, 196,   4,   2, 198,   4, 
	  2, 200,   4,   2, 202,   4,   2, 204,   4,   2, 206,   4, 
	  2, 209,   4,   2, 211,   4,   2, 213,   4,   2, 215,   4, 
	  2, 217,   4,   2, 219,   4,   2, 221,   4,   2, 223,   4, 
	  2, 225,   4,   2, 227,   4,   2, 229,   4,   2, 231,   4, 
	  2, 233,   4,   2, 235,   4,   2, 237,   4,   2, 239,   4, 
	  2, 241,   4,   2, 243,   4,   2, 245,   4,   2, 249,   4, 
	  2,   1,   5,   2,   3,   5,   2,   5,   5,   2,   7,   5, 
	  2,   9,   5,   2,  11,   5,   2,  13,   5,   2,  15,   5, 
	  2,  97,   5,   2,  98,   5,   2,  99,   5,   2, 100,   5, 
	  2, 101,   5,   2, 102,   5,   2, 103,   5,   2, 104,   5, 
	  2, 105,   5,   2, 106,   5,   2, 107,   5,   2, 108,   5, 
	  2, 109,   5,   2, 110,   5,   2, 111,   5,   2, 112,   5, 
	  2, 113,   5,   2, 114,   5,   2, 115,   5,   2, 116,   5, 
	  2, 117,   5,   2, 118,   5,   2, 119,   5,   2, 120,   5, 
	  2, 121,   5,   2, 122,   5,   2, 123,   5,   2, 124,   5, 
	  2, 125,   5,   2, 126,   5,   2, 127,   5,   2, 128,   5, 
	  2, 129,   5,   2, 130,   5,   2, 131,   5,   2, 132,   5, 
	  2, 133,   5,   2, 134,   5,   6, 101,   5,   0,   0, 130, 
	  5,   2,   1,  30,   2,   3,  30,   2,   5,  30,   2,   7, 
	 30,   2,   9,  30,   2,  11,  30,   2,  13,  30,   2,  15, 
	 30,   2,  17,  30,   2,  19,  30,   2,  21,  30,   2,  23, 
	 30,   2,  25,  30,   2,  27,  30,   2,  29,  30,   2,  31, 
	 30,   2,  33,  30,   2,  35,  30,   2,  37,  30,   2,  39, 
	 30,   2,  41,  30,   2,  43,  30,   2,  45,  30,   2,  47, 
	 30,   2,  49,  30,   2,  51,  30,   2,  53,  30,   2,  55, 
	 30,   2,  57,  30,   2,  59,  30,   2,  61,  30,   2,  63, 
	 30,   2,  65,  30,   2,  67,  30,   2,  69,  30,   2,  71, 
	 30,   2,  73,  30,   2,  75,  30,   2,  77,  30,   2,  79, 
	 30,   2,  81,  30,   2,  83,  30,   2,  85,  30,   2,  87, 
	 30,   2,  89,  30,   2,  91,  30,   2,  93,  30,   2,  95, 
	 30,   2,  97,  30,   2,  99,  30,   2, 101,  30,   2, 103, 
	 30,   2, 105,  30,   2, 107,  30,   2, 109,  30,   2, 111, 
	 30,   2, 113,  30,   2, 115,  30,   2, 117,  30,   2, 119, 
	 30,   2, 121,  30,   2, 123,  30,   2, 125,  30,   2, 127, 
	 30,   2, 129,  30,   2, 131,  30,   2, 133,  30,   2, 135, 
	 30,   2, 137,  30,   2, 139,  30,   2, 141,  30,   2, 143, 
	 30,   2, 145,  30,   2, 147,  30,   2, 149,  30,   6, 104, 
	  0,   0,   0,  49,   3,   6, 116,   0,   0,   0,   8,   3, 
	  6, 119,   0,   0,   0,  10,   3,   6, 121,   0,   0,   0, 
	 10,   3,   6,  97,   0,   0,   0, 190,   2,   2, 161,  30, 
	  2, 163,  30,   2, 165,  30,   2, 167,  30,   2, 169,  30, 
	  2, 171,  30,   2, 173,  30,   2, 175,  30,   2, 177,  30, 
	  2, 179,  30,   2, 181,  30,   2, 183,  30,   2, 185,  30, 
	  2, 187,  30,   2, 189,  30,   2, 191,  30,   2, 193,  30, 
	  2, 195,  30,   2, 197,  30,   2, 199,  30,   2, 201,  30, 
	  2, 203,  30,   2, 205,  30,   2, 207,  30,   2, 209,  30, 
	  2, 211,  30,   2, 213,  30,   2, 215,  30,   2, 217,  30, 
	  2, 219,  30,   2, 221,  30,   2, 223,  30,   2, 225,  30, 
	  2, 227,  30,   2, 229,  30,   2, 231,  30,   2, 233,  30, 
	  2, 235,  30,   2, 237,  30,   2, 239,  30,   2, 241,  30, 
	  2, 243,  30,   2, 245,  30,   2, 247,  30,   2, 249,  30, 
	  2,   0,  31,   2,   1,  31,   2,   2,  31,   2,   3,  31, 
	  2,   4,  31,   2,   5,  31,   2,   6,  31,   2,   7,  31, 
	  2,  16,  31,   2,  17,  31,   2,  18,  31,   2,  19,  31, 
	  2,  20,  31,   2,  21,  31,   2,  32,  31,   2,  33,  31, 
	  2,  34,  31,   2,  35,  31,   2,  36,  31,   2,  37,  31, 
	  2,  38,  31,   2,  39,  31,   2,  48,  31,   2,  49,  31, 
	  2,  50,  31,   2,  51,  31,   2,  52,  31,   2,  53,  31, 
	  2,  54,  31,   2,  55,  31,   2,  64,  31,   2,  65,  31, 
	  2,  66,  31,   2,  67,  31,   2,  68,  31,   2,  69,  31, 
	  6, 197,   3,   0,   0,  19,   3,  10, 197,   3,   0,   0, 
	 19,   3,   0,   0,   0,   3,  10, 197,   3,   0,   0,  19, 
	  3,   0,   0,   1,   3,  10, 197,   3,   0,   0,  19,   3, 
	  0,   0,  66,   3,   2,  81,  31,   2,  83,  31,   2,  85, 
	 31,   2,  87,  31,   2,  96,  31,   2,  97,  31,   2,  98, 
	 31,   2,  99,  31,   2, 100,  31,   2, 101,  31,   2, 102, 
	 31,   2, 103,  31,   6,   0,  31,   0,   0, 185,   3,   6, 
	  1,  31,   0,   0, 185,   3,   6,   2,  31,   0,   0, 185, 
	  3,   6,   3,  31,   0,   0, 185,   3,   6,   4,  31,   0, 
	  0, 185,   3,   6,   5,  31,   0,   0, 185,   3,   6,   6, 
	 31,   0,   0, 185,   3,   6,   7,  31,   0,   0, 185,   3, 
	  6,  32,  31,   0,   0, 185,   3,   6,  33,  31,   0,   0, 
	185,   3,   6,  34,  31,   0,   0, 185,   3,   6,  35,  31, 
	  0,   0, 185,   3,   6,  36,  31,   0,   0, 185,   3,   6, 
	 37,  31,   0,   0, 185,   3,   6,  38,  31,   0,   0, 185, 
	  3,   6,  39,  31,   0,   0, 185,   3,   6,  96,  31,   0, 
	  0, 185,   3,   6,  97,  31,   0,   0, 185,   3,   6,  98, 
	 31,   0,   0, 185,   3,   6,  99,  31,   0,   0, 185,   3, 
	  6, 100,  31,   0,   0, 185,   3,   6, 101,  31,   0,   0, 
	185,   3,   6, 102,  31,   0,   0, 185,   3,   6, 103,  31, 
	  0,   0, 185,   3,   6, 112,  31,   0,   0, 185,   3,   6, 
	177,   3,   0,   0, 185,   3,   6, 172,   3,   0,   0, 185, 
	  3,   6, 177,   3,   0,   0,  66,   3,  10, 177,   3,   0, 
	  0,  66,   3,   0,   0, 185,   3,   2, 176,  31,   2, 177, 
	 31,   2, 112,  31,   2, 113,  31,   6, 116,  31,   0,   0, 
	185,   3,   6, 183,   3,   0,   0, 185,   3,   6, 174,   3, 
	  0,   0, 185,   3,   6, 183,   3,   0,   0,  66,   3,  10, 
	183,   3,   0,   0,  66,   3,   0,   0, 185,   3,   2, 114, 
	 31,   2, 115,  31,   2, 116,  31,   2, 117,  31,  10, 185, 
	  3,   0,   0,   8,   3,   0,   0,   0,   3,   6, 185,   3, 
	  0,   0,  66,   3,  10, 185,   3,   0,   0,   8,   3,   0, 
	  0,  66,   3,   2, 208,  31,   2, 209,  31,   2, 118,  31, 
	  2, 119,  31,  10, 197,   3,   0,   0,   8,   3,   0,   0, 
	  0,   3,   6, 193,   3,   0,   0,  19,   3,   6, 197,   3, 
	  0,   0,  66,   3,  10, 197,   3,   0,   0,   8,   3,   0, 
	  0,  66,   3,   2, 224,  31,   2, 225,  31,   2, 122,  31, 
	  2, 123,  31,   2, 229,  31,   6, 124,  31,   0,   0, 185, 
	  3,   6, 201,   3,   0,   0, 185,   3,   6, 206,   3,   0, 
	  0, 185,   3,   6, 201,   3,   0,   0,  66,   3,  10, 201, 
	  3,   0,   0,  66,   3,   0,   0, 185,   3,   2, 120,  31, 
	  2, 121,  31,   2, 124,  31,   2, 125,  31,   5, 114,   0, 
	  0,   0, 115,   5, 176,   0,   0,   0,  99,   5, 176,   0, 
	  0,   0, 102,   5, 110,   0,   0,   0, 111,   5, 115,   0, 
	  0,   0, 109,   9, 116,   0,   0,   0, 101,   0,   0,   0, 
	108,   5, 116,   0,   0,   0, 109,   2, 112,  33,   2, 113, 
	 33,   2, 114,  33,   2, 115,  33,   2, 116,  33,   2, 117, 
	 33,   2, 118,  33,   2, 119,  33,   2, 120,  33,   2, 121, 
	 33,   2, 122,  33,   2, 123,  33,   2, 124,  33,   2, 125, 
	 33,   2, 126,  33,   2, 127,  33,   2, 208,  36,   2, 209, 
	 36,   2, 210,  36,   2, 211,  36,   2, 212,  36,   2, 213, 
	 36,   2, 214,  36,   2, 215,  36,   2, 216,  36,   2, 217, 
	 36,   2, 218,  36,   2, 219,  36,   2, 220,  36,   2, 221, 
	 36,   2, 222,  36,   2, 223,  36,   2, 224,  36,   2, 225, 
	 36,   2, 226,  36,   2, 227,  36,   2, 228,  36,   2, 229, 
	 36,   2, 230,  36,   2, 231,  36,   2, 232,  36,   2, 233, 
	 36,   9, 104,   0,   0,   0, 112,   0,   0,   0,  97,   5, 
	 97,   0,   0,   0, 117,   5, 111,   0,   0,   0, 118,   5, 
	112,   0,   0,   0,  97,   5, 110,   0,   0,   0,  97,   5, 
	188,   3,   0,   0,  97,   5, 109,   0,   0,   0,  97,   5, 
	107,   0,   0,   0,  97,   5, 107,   0,   0,   0,  98,   5, 
	109,   0,   0,   0,  98,   5, 103,   0,   0,   0,  98,   5, 
	112,   0,   0,   0, 102,   5, 110,   0,   0,   0, 102,   5, 
	188,   3,   0,   0, 102,   5, 104,   0,   0,   0, 122,   9, 
	107,   0,   0,   0, 104,   0,   0,   0, 122,   9, 109,   0, 
	  0,   0, 104,   0,   0,   0, 122,   9, 103,   0,   0,   0, 
	104,   0,   0,   0, 122,   9, 116,   0,   0,   0, 104,   0, 
	  0,   0, 122,   9, 107,   0,   0,   0, 112,   0,   0,   0, 
	 97,   9, 109,   0,   0,   0, 112,   0,   0,   0,  97,   9, 
	103,   0,   0,   0, 112,   0,   0,   0,  97,   5, 112,   0, 
	  0,   0, 118,   5, 110,   0,   0,   0, 118,   5, 188,   3, 
	  0,   0, 118,   5, 109,   0,   0,   0, 118,   5, 107,   0, 
	  0,   0, 118,   5, 112,   0,   0,   0, 119,   5, 110,   0, 
	  0,   0, 119,   5, 188,   3,   0,   0, 119,   5, 109,   0, 
	  0,   0, 119,   5, 107,   0,   0,   0, 119,   6, 107,   0, 
	  0,   0, 201,   3,   6, 109,   0,   0,   0, 201,   3,   5, 
	 98,   0,   0,   0, 113,  13,  99,   0,   0,   0,  21,  34, 
	  0,   0, 107,   0,   0,   0, 103,   9,  99,   0,   0,   0, 
	111,   0,   0,   0,  46,   5, 100,   0,   0,   0,  98,   5, 
	103,   0,   0,   0, 121,   5, 104,   0,   0,   0, 112,   5, 
	107,   0,   0,   0, 107,   5, 107,   0,   0,   0, 109,   5, 
	112,   0,   0,   0, 104,   9, 112,   0,   0,   0, 112,   0, 
	  0,   0, 109,   5, 112,   0,   0,   0, 114,   5, 115,   0, 
	  0,   0, 118,   5, 119,   0,   0,   0,  98,   5, 102,   0, 
	  0,   0, 102,   5, 102,   0,   0,   0, 105,   5, 102,   0, 
	  0,   0, 108,   9, 102,   0,   0,   0, 102,   0,   0,   0, 
	105,   9, 102,   0,   0,   0, 102,   0,   0,   0, 108,   5, 
	115,   0,   0,   0, 116,   6, 116,   5,   0,   0, 118,   5, 
	  6, 116,   5,   0,   0, 101,   5,   6, 116,   5,   0,   0, 
	107,   5,   6, 126,   5,   0,   0, 118,   5,   6, 116,   5, 
	  0,   0, 109,   5,   2,  65, 255,   2,  66, 255,   2,  67, 
	255,   2,  68, 255,   2,  69, 255,   2,  70, 255,   2,  71, 
	255,   2,  72, 255,   2,  73, 255,   2,  74, 255,   2,  75, 
	255,   2,  76, 255,   2,  77, 255,   2,  78, 255,   2,  79, 
	255,   2,  80, 255,   2,  81, 255,   2,  82, 255,   2,  83, 
	255,   2,  84, 255,   2,  85, 255,   2,  86, 255,   2,  87, 
	255,   2,  88, 255,   2,  89, 255,   2,  90, 255,   3,  40, 
	  4,   1,   3,  41,   4,   1,   3,  42,   4,   1,   3,  43, 
	  4,   1,   3,  44,   4,   1,   3,  45,   4,   1,   3,  46, 
	  4,   1,   3,  47,   4,   1,   3,  48,   4,   1,   3,  49, 
	  4,   1,   3,  50,   4,   1,   3,  51,   4,   1,   3,  52, 
	  4,   1,   3,  53,   4,   1,   3,  54,   4,   1,   3,  55, 
	  4,   1,   3,  56,   4,   1,   3,  57,   4,   1,   3,  58, 
	  4,   1,   3,  59,   4,   1,   3,  60,   4,   1,   3,  61, 
	  4,   1,   3,  62,   4,   1,   3,  63,   4,   1,   3,  64, 
	  4,   1,   3,  65,   4,   1,   3,  66,   4,   1,   3,  67, 
	  4,   1,   3,  68,   4,   1,   3,  69,   4,   1,   3,  70, 
	  4,   1,   3,  71,   4,   1,   3,  72,   4,   1,   3,  73, 
	  4,   1,   3,  74,   4,   1,   3,  75,   4,   1,   3,  76, 
	  4,   1,   3,  77,   4,   1, 
};

static const unsigned short nameprep_rfc3491_prohibited_imap[] = {
	   68,   196,   196,   324,   196,   196,   196,   452, 
	  196,   196,   196,   580,   196,   196,   196,   580, 
	  196,   196,   196,   580,   196,   196,   196,   580, 
	  196,   196,   196,   580,   196,   196,   196,   580, 
	  196,   196,   196,   580,   196,   196,   196,   580, 
	  196,   196,   196,   580,   196,   196,   196,   580, 
	  196,   196,   196,   580,   196,   196,   196,   580, 
	  708,   196,   196,   580,   836,   836,   836,   836, 
	  836,   836,   836,   836,     0,     1,     0,     0, 
	    0,     0,     2,     0,     0,     0,     0,     0, 
	    0,     3,     4,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     5,     0,     0,     6,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     7,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     8,     5,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     9,     9,     9,     9, 
	    9,     9,     9,     9,     9,     9,     9,     9, 
	    9,     9,     9,     9,     9,     9,     9,     9, 
	    9,     9,     9,     9,     9,     9,     9,     9, 
	    9,     9,     9,     9,     9,     9,     9,     9, 
	    9,     9,     9,     9,     9,     9,     9,     9, 
	    9,     9,     9,     9,     9,     9,     9,     9, 
	    9,     9,     9,     9,     9,     9,     9,     9, 
	    9,     9,     9,     9,     9,     9,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,    10, 
	    0,     0,     0,    11,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,    12,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,    13,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,    13,    14,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     9,     9,     9,     9, 
	    9,     9,     9,     9,     9,     9,     9,     9, 
	    9,     9,     9,     9,     9,     9,     9,     9, 
	    9,     9,     9,     9,     9,     9,     9,     9, 
	    9,     9,     9,     9,     9,     9,     9,     9, 
	    9,     9,     9,     9,     9,     9,     9,     9, 
	    9,     9,     9,     9,     9,     9,     9,     9, 
	    9,     9,     9,     9,     9,     9,     9,     9, 
	    9,     9,     9,     9,     9,     9,     9,     9, 
	    9,     9,     9,     9,     9,     9,     9,     9, 
	    9,     9,     9,     9,     9,     9,     9,     9, 
	    9,     9,     9,     9,     9,     9,     9,     9, 
	    9,     9,     9,     9,     9,     9,     9,     9, 
	    9,     9,     9,     9,     9,     9,     9,     9, 
	    9,     9,     9,     9,     9,     9,     9,     9, 
	    9,     9,     9,     9,     9,     9,     9,     9, 
	    9,     9,     9,     9, 
};

static const struct {
	unsigned char bm[16];
} nameprep_rfc3491_prohibited_bitmap[] = {
	{{
	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
	}},
	{{
	255,255,255,255,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
	}},
	{{
	  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  0,  0,  0,  0,  0,  0,
	}},
	{{
	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,
	}},
	{{
	  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
	}},
	{{
	  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
	}},
	{{
	  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
	}},
	{{
	255,199,  0,  0,  0,255,  0,  0,  0,  0,  0,128, 14,252,  0,  0,
	}},
	{{
	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,255, 15,
	}},
	{{
	255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
	}},
	{{
	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,255,255,255,255,  0,  0,
	}},
	{{
	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,254,
	}},
	{{
	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,248,  7,
	}},
	{{
	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192,
	}},
	{{
	  2,  0,  0,  0,255,255,255,255,255,255,255,255,255,255,255,255,
	}},
};

static const unsigned short nameprep_rfc3491_unassigned_imap[] = {
	   68,   196,   324,   452,   580,   708,   708,   836, 
	  964,   964,  1092,  1220,   708,   708,   708,  1348, 
	  708,   708,   708,  1348,   708,   708,   708,  1348, 
	  708,   708,   708,  1348,   708,   708,   708,  1348, 
	  708,   708,   708,  1348,   708,   708,   708,  1348, 
	  708,   708,   708,  1348,   708,   708,   708,  1348, 
	  708,   708,   708,  1348,   708,   708,   708,  1348, 
	 1476,   708,   708,  1348,   964,   964,   964,   964, 
	  964,   964,   964,   964,     0,     0,     0,     0, 
	    1,     2,     3,     4,     0,     5,     6,     7, 
	    8,     9,    10,    11,    12,    12,    13,    14, 
	   15,    16,    17,    18,    19,    20,    21,    22, 
	   23,    24,    25,    26,    27,    28,    29,    30, 
	   31,    32,    33,    34,    35,     0,     0,     0, 
	   36,    37,    38,    39,    40,    41,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	    0,    42,    43,    44,    45,    46,    47,    48, 
	    0,     0,     0,    49,    50,    51,     0,     0, 
	   52,    53,    54,    55,     0,     0,     0,     0, 
	    0,     0,    12,    12,    12,    12,    12,    12, 
	   12,    56,     0,    57,    58,    59,    60,    61, 
	   62,    63,    64,    65,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,    66, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,    67,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,    68,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,    69,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	   70,    12,    71,    72,     0,     0,    73,    74, 
	   75,    76,    35,    77,    12,    12,    12,    12, 
	   12,    12,    78,    12,    79,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,     0,    80,    81,    82, 
	   12,    12,    12,    12,    83,    84,    85,     0, 
	    0,    86,     0,    87,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    88,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,    89,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,     0,     0,     0,     0, 
	   90,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    88,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    88,    91,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12,    12,    12,    12,    12, 
	   12,    12,    12,    12, 
};

static const struct {
	unsigned char bm[16];
} nameprep_rfc3491_unassigned_bitmap[] = {
	{{
	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
	}},
	{{
	  0,  0,  0,  0,  2,  0,240,255,255,255,  0,  0,  0,  0,  0,  0,
	}},
	{{
	  0,  0,  0,  0,  0,192,  0,  0,  0,  0,  0,  0,  0,128,255,255,
	}},
	{{
	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,255,255,  0,  0,207,187,
	}},
	{{
	 15, 40,  0,  0,  4,  0,  0,  0,  0,128,  0,  0,  0,  0,128,255,
	}},
	{{
	128,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,192,252,
	}},
	{{
	  0,  0,255,255,255,255,  1,  0,  0,  0,128,  1,  1,  0,  0,  0,
	}},
	{{
	  0,249,  1,  0,  4,  0,  0,  4,224,255,  0,  0,  0,248,224,255,
	}},
	{{
	255,239,255,119,  1,  0,  0,248,  0,  0,192,255,  0,  0,  0,  0,
	}},
	{{
	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192,  0,128,
	}},
	{{
	  0, 64,  0,  0,  0,224,  0,  0,  0,248,255,255,255,255,255,255,
	}},
	{{
	  0,  0,  0,  0,  0,  0,252,255,255,255,255,255,255,255,255,255,
	}},
	{{
	255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
	}},
	{{
	 17,  0,  0,  0,  0,  0,  0, 12,  0,192,224,  0,  0,  0,254,255,
	}},
	{{
	 17, 96,  6,  0,  0,  2, 58, 44, 96,198,127, 79, 48,  0,  0,248,
	}},
	{{
	 27,120,  6,  0,  0,  2,146, 44,120,198,255,161, 63,  0,224,255,
	}},
	{{
	 17, 80,  4,  0,  0,  2, 18, 12, 64,196,254,255, 62,  0,255,255,
	}},
	{{
	 17, 96,  6,  0,  0,  2, 50, 12,112,198, 63, 79, 60,  0,254,255,
	}},
	{{
	 19, 56,194, 41,231, 56, 64, 60, 56,194,127,255,127,  0,248,255,
	}},
	{{
	 17, 32,  2,  0,  0,  2, 16, 60, 32,194,159,255, 60,  0,255,255,
	}},
	{{
	 19, 32,  2,  0,  0,  2, 16, 60, 32,194,159,191, 60,  0,255,255,
	}},
	{{
	 19, 32,  2,  0,  0,  2,  0, 60, 48,194,127,255, 60,  0,255,255,
	}},
	{{
	 19,  0,128,  3,  0,  0,  4,208,128,123,160,  0,255,255,227,255,
	}},
	{{
	  1,  0,  0,  0,  0,  0,  0,120,  0,  0,  0,240,255,255,255,255,
	}},
	{{
	105,218, 15,  1, 81, 19,  0,196,160,192,  0,204,255,255,255,255,
	}},
	{{
	  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,248,  1,  0,
	}},
	{{
	  0,240,  0,  1,  0,  0,  0, 32,  0, 96,255,255,255,255,255,255,
	}},
	{{
	  0,  0,  0,  0,  4,  9, 56,252,  0,  0,  0,252,255,255,255,255,
	}},
	{{
	255,255,255,255,  0,  0,  0,  0,192,255,  0,  0,  0,  0,  0,246,
	}},
	{{
	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,124,  0,  0,  0,  0,
	}},
	{{
	  0,  0,  0,  0,248,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,252,
	}},
	{{
	128,  0,  0,  0,  0,  0,  0,  0,128,194,128,194,  0,  0,  0,  0,
	}},
	{{
	128,194,  0,  0,  0,128,194,128,194,128,128,  0,  0,128,  0,  0,
	}},
	{{
	  0,128,194,128,  0,  0,  0,  0,128,  0,  0,248,  1,  0,  0,224,
	}},
	{{
	255,255,255,255,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,224,255,
	}},
	{{
	  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
	}},
	{{
	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,255,
	}},
	{{
	  0,  0,  0,224,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,254,255,
	}},
	{{
	  0, 32,224,255,  0,  0,128,255,  0,  0,240,255,  0, 32,242,255,
	}},
	{{
	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,224,  0,252,255,255,
	}},
	{{
	  0,128,  0,252,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,255,
	}},
	{{
	  0,  0,  0,  0,  0,252,255,255,255,255,255,255,255,255,255,255,
	}},
	{{
	  0,  0,  0,240,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,252,
	}},
	{{
	  0,  0,192,192,  0,  0,  0,  0,192,192,  0, 85,  0,  0,  0,192,
	}},
	{{
	  0,  0,  0,  0,  0,  0, 32,  0, 32,  0, 48, 16,  0,  0, 35,128,
	}},
	{{
	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,120,127,240,  3, 12,  0,
	}},
	{{
	  0,128,255,255,  0,  0,252,255,255,255,  0,  0,  0,248,255,255,
	}},
	{{
	  0,  0,  0,  0,  0,  0,  0, 24,  0,240,  7,  0,  0,  0,  0,  0,
	}},
	{{
	240,255,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
	}},
	{{
	  0,  0,  0,  0,  0,  0,  0,  0,  0,128,255,255,255,255,255,255,
	}},
	{{
	  0,  0,  0,  0,128,255,255,255,  0,248,255,255,  0,  0,  0,  0,
	}},
	{{
	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,
	}},
	{{
	  0,  0, 48,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192,
	}},
	{{
	  0,252,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
	}},
	{{
	 33, 12,  0,  0,  0,  1,  0,  0,  0, 80,184,128,  1,  0,  0,  0,
	}},
	{{
	  0,  0,224,  0,  0,  0,  1,128,255,255,  0,  0,  0,240,  0,  0,
	}},
	{{
	  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,240,255,
	}},
	{{
	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192,255,255,255,  0,240,
	}},
	{{
	  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,
	}},
	{{
	  0,  0,128,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
	}},
	{{
	 31,  0,  0,  0,  0,224,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,
	}},
	{{
	  0,128,  0,  0,  0,  0,  0,255,255,255,255,255,255,255,  0,  0,
	}},
	{{
	  0,  0,  0,224,  0,  0,  0,  0,240,255,  1,  0,  0,  0,  0,112,
	}},
	{{
	  0,  0,  0,  0,  0,  0,  0,  0,  0,240,  0,  0,  0,  0,  0,128,
	}},
	{{
	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  7,
	}},
	{{
	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192,  0,  0,  0,128,
	}},
	{{
	  0,  0,  0,  0,  0,  0,192,255,255,255,255,255,255,255,255,255,
	}},
	{{
	  0,  0,  0,  0,192,255,255,255,255,255,255,255,255,255,255,255,
	}},
	{{
	  0,224,  0,  0,  0,  0,  0,  0,128,255,255,255,255,255,255,255,
	}},
	{{
	  0,  0,  0,  0,240,255,255,255,255,255,255,255,255,255,255,255,
	}},
	{{
	  0,  0,  0,  0,  0,192,  0,  0,  0,  0,  0,  0,  0,248,255,255,
	}},
	{{
	128,255,  7, 31,  0,  0,128,160, 36,  0,  0,  0,  0,  0,  0,  0,
	}},
	{{
	  0,  0,  0,  0,  0,  0,252,255,255,255,  7,  0,  0,  0,  0,  0,
	}},
	{{
	  0,  0,  0,  0,  0,  0,  0,  0,255,255,  0,  0,  0,  0,  0,  0,
	}},
	{{
	  0,  0,  3,  0,  0,  0,  0,  0,  0,255,  0,  0,  0,  0,  0,224,
	}},
	{{
	  0,  0,255,255,240,255,  0,  0,128,  1,  8,  0,128,240, 32,  0,
	}},
	{{
	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96,
	}},
	{{
	  0,  0,  0,  0,  0,  0,  0,128,  3,  3,  3,227,128,128,255,  1,
	}},
	{{
	  0,  0,  0,128,240,255,  0,  0,  0,248,255,255,255,255,255,255,
	}},
	{{
	  0,  0,  0,  0,192,  0,  0,  0,  0,192,255,255,255,255,255,255,
	}},
	{{
	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192,255,
	}},
	{{
	  0,  0,  0,  0,128,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
	}},
	{{
	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192,255,255,255,255,
	}},
	{{
	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,
	}},
	{{
	  0,  0,  0, 32,155, 33,  0, 20, 18,  0,  0,  0,  0,  0,  0,  0,
	}},
	{{
	 64, 24, 32, 32,  0,  0,  0,132,160,  3,  2,  0,  0,  0,  0,  0,
	}},
	{{
	  0,  0,  0,  0,240,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
	}},
	{{
	  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,  0,  0,  0,  0,  0,  0,
	}},
	{{
	255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 63,
	}},
	{{
	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,255,255,255,255,255,
	}},
	{{
	  0,  0,  0,192,255,255,255,255,255,255,255,255,255,255,255,255,
	}},
	{{
	253,255,255,255,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
	}},
};

static const unsigned short nameprep_rfc3491_bidi_imap[] = {
	  272,   400,   528,   656,   784,   912,   912,   912, 
	  912,  1040,  1168,   912,   912,  1296,   912,  1424, 
	 1552,  1680,  1680,  1680,  1680,  1680,  1680,  1680, 
	 1680,  1680,  1680,  1680,  1680,  1808,  1680,  1680, 
	  912,   912,   912,   912,   912,   912,   912,   912, 
	  912,   912,  1936,  1680,  1680,  1680,  1680,  2064, 
	 1680,  1680,  1680,  1680,  1680,  1680,  1680,  1680, 
	 1680,  1680,  1680,  1680,  1680,  1680,  1680,  1680, 
	 1680,  1680,  1680,  1680,  1680,  1680,  1680,  1680, 
	 1680,  1680,  1680,  1680,  1680,  1680,  1680,  1680, 
	 1680,  1680,  1680,  1680,  1680,  1680,  1680,  1680, 
	 1680,  1680,  1680,  1680,  1680,  1680,  1680,  1680, 
	 1680,  1680,  1680,  1680,  1680,  1680,  1680,  1680, 
	 1680,  1680,  1680,  1680,  1680,  1680,  1680,  1680, 
	 1680,  1680,  1680,  1680,  1680,  1680,  1680,  1680, 
	 1680,  1680,  1680,  1680,  1680,  1680,  1680,  1680, 
	 1680,  1680,  1680,  1680,  1680,  1680,  1680,  1680, 
	 1680,  1680,  1680,  1680,  1680,  1680,  1680,  1680, 
	 1680,  1680,  1680,  1680,  1680,  1680,  1680,  1680, 
	 1680,  1680,  1680,  1680,  1680,  1680,  1680,  1680, 
	 1680,  1680,  1680,  1680,  1680,  1680,  1680,  1680, 
	 1680,  1680,  1680,  1680,  1680,  1680,  1680,  1680, 
	 1680,  1680,  1680,  1680,  1680,  1680,  1680,  1680, 
	 1680,  1680,  1680,  1680,  1680,  1680,  1680,  1680, 
	 1680,  1680,  1680,  1680,  1680,  1680,  1680,  1680, 
	 1680,  1680,  1680,  1680,  1680,  1680,  1680,  1680, 
	 1680,  1680,  1680,  1680,  1680,  1680,  1680,  1680, 
	 1680,  1680,  1680,  1680,  1680,  1680,  1680,  1680, 
	 1680,  1680,  1680,  1680,  1680,  1680,  1680,  1680, 
	 1680,  1680,  1680,  1680,  1680,  1680,  1680,  1680, 
	  912,   912,   912,   912,   912,   912,   912,   912, 
	  912,   912,   912,   912,   912,   912,   912,  2192, 
	  912,   912,   912,   912,   912,   912,   912,   912, 
	  912,   912,   912,   912,   912,   912,   912,  2192, 
	    0,     0,     1,     1,     0,     2,     3,     3, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     5,     6,     4,     4,     7,     8,     9, 
	    0,     0,     0,    10,    11,    12,    13,    14, 
	    4,     4,     4,     4,    15,     4,    13,    16, 
	   17,    18,    19,    20,    21,    22,    23,    24, 
	   25,    26,    27,    28,    29,    29,    30,    31, 
	   32,    33,     0,     0,    29,    34,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	   35,    36,    37,    38,    39,    40,    41,    42, 
	   43,    44,    45,    46,    47,    48,    49,    50, 
	   39,    51,    41,    52,    53,    54,    55,    56, 
	   57,    58,    59,    60,    61,    62,    63,    60, 
	   61,    64,    65,    60,    66,    67,    68,    69, 
	   20,    70,    71,     0,    72,    73,    74,     0, 
	   75,    76,    77,    78,    79,    80,    81,     0, 
	    4,    82,    83,     0,     0,     4,    84,    85, 
	    4,     4,    86,     4,     4,    87,     4,    88, 
	   89,     4,    90,     4,    91,    92,    93,    13, 
	   92,     4,    94,    95,     0,     4,     4,    96, 
	   20,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,    97,     1,     4,     4,    98, 
	   99,   100,   101,   102,     4,   103,   104,   105, 
	  106,     4,     4,    83,     4,   107,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    4,     4,     4,     4,   108,     4,     4,    88, 
	  109,     4,   110,   111,     4,   112,   113,   114, 
	  115,     0,     0,   116,     0,     0,     0,     0, 
	  117,   118,   119,     4,   120,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,   121,     4,   122,   123,     0,     0,     0, 
	    0,     0,     0,     0,   124,     4,     4,   105, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	  125,   126,    20,     4,   127,    20,     4,   128, 
	  129,   130,     4,     4,    13,    83,     0,     6, 
	  131,     4,   120,   132,     4,    98,   133,   134, 
	    4,     4,     4,   135,     4,     4,   111,   134, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,    14,     0,     0, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,   136,     0,     0, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,   137,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,   120,     0,     0, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,   138,     4,   139,     0,     0,     0,     0, 
	  140,   141,   142,    29,    29,   143,   144,    29, 
	   29,    29,    29,    29,    29,    29,    29,    29, 
	   29,   145,   146,    29,   147,    29,   148,   149, 
	    0,     0,     0,   150,    29,    29,    29,   151, 
	    0,     1,     1,   152,     4,   134,   153,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	  134,   154,   139,     0,     0,     0,     0,     0, 
	    4,   155,   156,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    4,     4,     4,     4,     4,     4,     4,    14, 
	    4,   157,     4,   158,   159,   160,   111,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    4,     4,   161,     4,   162,   163,   164,     4, 
	  165,   166,   167,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,   168,     4,     4, 
	    4,     4,     4,     4,     4,     4,   105,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,    97,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	  111,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    0,     0,     0,     0,     0,     0,     0,     0, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,     4, 
	    4,     4,     4,     4,     4,     4,     4,   111, 
};

static const struct {
	unsigned char tbl[32];
} nameprep_rfc3491_bidi_table[] = {
	{{
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0,  0, 
	}},
	{{
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0, 
	 0,  0,  0,  0,  2,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  0,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, 
	 2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0, 
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0, 
	}},
	{{
	 0,  0,  0,  0,  0,  0,  2,  0,  2,  2,  2,  0,  2,  0,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 2,  2,  2,  0,  0,  0,  0,  0,  0,  0,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  0,  0,  2,  2,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0, 
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  0,  0,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  0,  2,  0,  0,  0,  0,  0,  0,  0, 
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0, 
	}},
	{{
	 1,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1, 
	 1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 
	}},
	{{
	 1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  0,  0,  0,  0,  0,  1, 
	 1,  1,  1,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  1, 
	}},
	{{
	 0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 
	 1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  0,  0,  0,  0,  0, 
	}},
	{{
	 1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  0,  0,  0,  0,  0,  0, 
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  1,  1,  0, 
	 1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 
	}},
	{{
	 1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 
	 1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 
	}},
	{{
	 1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 
	 1,  1,  1,  1,  1,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0, 
	}},
	{{
	 0,  0,  0,  0,  0,  1,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  1,  1,  1,  1,  0, 
	}},
	{{
	 1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  0,  0,  1, 
	 0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 
	}},
	{{
	 1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  0,  0,  0,  0, 
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 1,  1,  1,  1,  1,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	 1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 0,  0,  0,  2,  0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  2,  2,  2, 
	}},
	{{
	 2,  0,  0,  0,  0,  0,  0,  0,  0,  2,  2,  2,  2,  0,  0,  0,  2, 
	 0,  0,  0,  0,  0,  0,  0,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  0,  0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 0,  0,  2,  2,  0,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  2,  2, 
	 0,  0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  2,  2,  2,  2,  2,  2,  2, 
	 0,  2,  0,  0,  0,  2,  2,  2,  2,  0,  0,  0,  0,  2,  2, 
	}},
	{{
	 2,  0,  0,  0,  0,  0,  0,  2,  2,  0,  0,  2,  2,  0,  0,  0,  0, 
	 0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  2,  2,  0,  2, 
	}},
	{{
	 2,  2,  0,  0,  0,  0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  0,  0,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0,  0, 
	}},
	{{
	 0,  0,  0,  0,  0,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0,  2,  2, 
	 0,  0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  2,  2,  2,  2,  2,  2,  2, 
	 0,  2,  2,  0,  2,  2,  0,  2,  2,  0,  0,  0,  0,  2,  2, 
	}},
	{{
	 2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	 0,  0,  0,  0,  0,  0,  0,  0,  2,  2,  2,  2,  0,  2,  0, 
	}},
	{{
	 0,  0,  0,  0,  0,  0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0, 
	 0,  2,  2,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 0,  0,  0,  2,  0,  2,  2,  2,  2,  2,  2,  2,  0,  2,  0,  2,  2, 
	 2,  0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  2,  2,  2,  2,  2,  2,  2, 
	 0,  2,  2,  0,  2,  2,  2,  2,  2,  0,  0,  0,  2,  2,  2, 
	}},
	{{
	 2,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  2,  2,  0,  0,  0,  2, 
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 2,  0,  0,  0,  0,  0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0, 
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  2,  2,  2,  2,  2,  2,  2, 
	 0,  2,  2,  0,  0,  2,  2,  2,  2,  0,  0,  0,  2,  2,  0, 
	}},
	{{
	 2,  2,  0,  0,  0,  0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 0,  0,  0,  2,  0,  2,  2,  2,  2,  2,  2,  0,  0,  0,  2,  2,  2, 
	 0,  2,  2,  2,  2,  0,  0,  0,  2,  2,  0,  2,  0,  2,  2, 
	}},
	{{
	 0,  0,  0,  2,  2,  0,  0,  0,  2,  2,  2,  0,  0,  0,  2,  2,  2, 
	 2,  2,  2,  2,  2,  0,  2,  2,  2,  0,  0,  0,  0,  2,  2, 
	}},
	{{
	 0,  2,  2,  0,  0,  0,  2,  2,  2,  0,  2,  2,  2,  0,  0,  0,  0, 
	 0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 0,  0,  0,  0,  0,  0,  0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 0,  2,  2,  2,  0,  2,  2,  2,  2,  2,  2,  2,  2,  0,  2,  2,  2, 
	 0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  0,  2,  2,  2,  2,  2,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 0,  2,  2,  2,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 2,  2,  0,  0,  0,  0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0, 
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 0,  0,  2,  2,  0,  2,  2,  2,  2,  2,  2,  2,  2,  0,  2,  2,  2, 
	 0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  0,  2,  2,  2,  2,  2,  0,  0,  0,  0,  2,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  0,  0,  2,  2,  0,  2,  2,  0,  0,  0,  0,  0, 
	 0,  0,  0,  0,  2,  2,  0,  0,  0,  0,  0,  0,  0,  2,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0,  2,  2, 
	}},
	{{
	 2,  0,  0,  0,  0,  0,  2,  2,  2,  0,  2,  2,  2,  0,  0,  0,  0, 
	 0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 0,  0,  2,  2,  0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  0,  0,  0,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  2,  0,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0,  0,  0,  0,  0,  2,  2, 
	 2,  0,  0,  0,  0,  0,  0,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	 0,  2,  2,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 0,  2,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0,  0,  0,  0,  0,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0, 
	}},
	{{
	 0,  2,  2,  0,  2,  0,  0,  2,  2,  0,  2,  0,  0,  2,  0,  0,  0, 
	 0,  0,  0,  2,  2,  2,  2,  0,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 0,  2,  2,  2,  0,  2,  0,  2,  0,  0,  2,  2,  0,  2,  2,  2,  2, 
	 0,  2,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  2,  2,  0,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  0,  0,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  0,  2,  0,  2,  0,  0,  0,  0,  0,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  0,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0,  0,  0, 
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, 
	}},
	{{
	 0,  0,  0,  0,  0,  2,  0,  0,  2,  2,  2,  2,  0,  0,  0,  0,  0, 
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  0,  2,  2,  2,  2,  2,  2,  0,  0,  2,  0, 
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 2,  2,  0,  2,  2,  2,  2,  2,  0,  2,  2,  0,  2,  0,  0,  0,  0, 
	 2,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  2,  0,  0,  0,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0,  0,  2, 
	}},
	{{
	 2,  2,  2,  0,  0,  0,  0,  0,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  0,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  0,  2,  0,  2,  2,  2,  2,  0,  0,  2, 
	 2,  2,  2,  2,  2,  2,  0,  2,  0,  2,  2,  2,  2,  0,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  0,  2,  0,  2,  2,  2,  2,  0,  0,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  2, 
	 0,  2,  2,  2,  2,  0,  0,  2,  2,  2,  2,  2,  2,  2,  0, 
	}},
	{{
	 2,  0,  2,  2,  2,  2,  0,  0,  2,  2,  2,  2,  2,  2,  2,  0,  2, 
	 2,  2,  2,  2,  2,  2,  0,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  0,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0,  0, 
	}},
	{{
	 0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  2,  2,  2, 
	 2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  0,  0,  0,  2,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  2,  2,  2, 
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  0,  0,  0,  0,  0,  0,  0,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  0,  2,  2,  0,  0,  0,  0,  0,  0,  0,  0, 
	 0,  0,  0,  2,  2,  2,  2,  2,  2,  2,  0,  2,  0,  0,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0,  0,  0,  0, 
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0,  0,  0,  0,  0, 
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  0,  0,  2,  2,  2,  2,  2,  2,  0,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  0,  0,  2,  2,  2,  2,  2,  2,  0,  0,  2, 
	 2,  2,  2,  2,  2,  2,  2,  0,  2,  0,  2,  0,  2,  0,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  0,  2,  2,  2,  2,  2,  2,  2,  0,  2,  0, 
	}},
	{{
	 0,  0,  2,  2,  2,  0,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  2, 
	 2,  2,  2,  0,  0,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0, 
	 0,  2,  2,  2,  0,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0, 
	}},
	{{
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  1,  0, 
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	 2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, 
	}},
	{{
	 0,  0,  2,  0,  0,  0,  0,  2,  0,  0,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  0,  2,  0,  0,  0,  2,  2,  2,  2,  2,  0,  0, 
	}},
	{{
	 0,  0,  0,  0,  2,  0,  2,  0,  2,  0,  2,  2,  2,  2,  0,  2,  2, 
	 2,  0,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  2,  2,  2, 
	}},
	{{
	 0,  0,  0,  0,  0,  2,  2,  2,  2,  2,  0,  0,  0,  0,  0,  0,  0, 
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 2,  2,  2,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	 0,  0,  0,  0,  0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0,  0, 
	}},
	{{
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	 0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  2,  2,  2, 
	}},
	{{
	 0,  0,  0,  0,  0,  2,  2,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0,  0,  0,  0, 
	 2,  2,  2,  2,  2,  0,  0,  2,  2,  2,  2,  2,  0,  0,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  0,  0,  0,  0,  0,  0,  2,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  2,  2,  2,  2, 
	}},
	{{
	 0,  0,  0,  0,  0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  0,  0,  0,  0,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0, 
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0,  0,  0, 
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	 0,  0,  2,  2,  2,  2,  2,  0,  0,  0,  0,  0,  1,  0,  1, 
	}},
	{{
	 1,  1,  1,  1,  1,  1,  1,  1,  1,  0,  1,  1,  1,  1,  1,  1,  1, 
	 1,  1,  1,  1,  1,  1,  0,  1,  1,  1,  1,  1,  0,  1,  0, 
	}},
	{{
	 1,  1,  0,  1,  1,  0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 
	 1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 
	}},
	{{
	 1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 
	 1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	 0,  0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 
	}},
	{{
	 1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 
	 1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  0,  0, 
	}},
	{{
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1, 
	 1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 
	}},
	{{
	 1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  0, 
	 0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 
	}},
	{{
	 1,  1,  1,  1,  1,  1,  1,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1, 
	 1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  0,  0,  0, 
	}},
	{{
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1, 
	 1,  1,  1,  1,  0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 
	}},
	{{
	 1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 
	 1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  0,  0,  0, 
	}},
	{{
	 0,  0,  0,  0,  0,  0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 0,  0,  2,  2,  2,  2,  2,  2,  0,  0,  2,  2,  2,  2,  2,  2,  0, 
	 0,  2,  2,  2,  2,  2,  2,  0,  0,  2,  2,  2,  0,  0,  0, 
	}},
	{{
	 2,  2,  2,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  0,  0,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0, 
	 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
	}},
	{{
	 0,  0,  0,  2,  2,  0,  0,  0,  0,  0,  0,  0,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  2,  2, 
	}},
	{{
	 0,  0,  2,  0,  0,  2,  2,  0,  0,  2,  2,  2,  2,  0,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  2,  0,  2,  2,  2, 
	}},
	{{
	 2,  0,  2,  2,  0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  0,  2,  2,  2,  2,  0,  0,  2,  2,  2,  2, 
	 2,  2,  2,  2,  0,  2,  2,  2,  2,  2,  2,  2,  0,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  2,  2,  2,  2,  0, 
	}},
	{{
	 2,  2,  2,  2,  2,  0,  2,  0,  0,  0,  2,  2,  2,  2,  2,  2,  2, 
	 0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
	{{
	 2,  2,  2,  2,  0,  0,  0,  0,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	 2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 
	}},
};

static const unsigned char nameprep_rfc3491_bidi_data[] = {
	idn_biditype_others, 
	idn_biditype_r_al, 
	idn_biditype_l, 
};