@volter/twin-planetscale 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +473 -0
  3. package/api/src/fetch.ts +50 -0
  4. package/api/src/generated/surface.gen.json +1 -0
  5. package/api/src/generated/ui.gen.json +1 -0
  6. package/api/src/index.ts +19 -0
  7. package/api/src/manifest.ts +136 -0
  8. package/api/src/screens/deploy-request.tsx +111 -0
  9. package/api/src/screens/service-tokens.tsx +141 -0
  10. package/api/src/screens/session.tsx +117 -0
  11. package/api/src/semantics/audit.ts +82 -0
  12. package/api/src/semantics/backups.ts +258 -0
  13. package/api/src/semantics/branches.ts +201 -0
  14. package/api/src/semantics/deploy-requests.ts +493 -0
  15. package/api/src/semantics/index.ts +371 -0
  16. package/api/src/semantics/shared.ts +141 -0
  17. package/api/src/semantics/time.ts +77 -0
  18. package/api/src/token-gate.ts +96 -0
  19. package/dist/api/src/fetch.d.ts +8 -0
  20. package/dist/api/src/fetch.js +51 -0
  21. package/dist/api/src/fetch.ts +50 -0
  22. package/dist/api/src/generated/surface.gen.json +1 -0
  23. package/dist/api/src/generated/ui.gen.json +1 -0
  24. package/dist/api/src/index.ts +19 -0
  25. package/dist/api/src/manifest.d.ts +2 -0
  26. package/dist/api/src/manifest.js +113 -0
  27. package/dist/api/src/manifest.ts +136 -0
  28. package/dist/api/src/screens/deploy-request.d.ts +7 -0
  29. package/dist/api/src/screens/deploy-request.js +106 -0
  30. package/dist/api/src/screens/deploy-request.tsx +111 -0
  31. package/dist/api/src/screens/service-tokens.d.ts +3 -0
  32. package/dist/api/src/screens/service-tokens.js +134 -0
  33. package/dist/api/src/screens/service-tokens.tsx +141 -0
  34. package/dist/api/src/screens/session.d.ts +11 -0
  35. package/dist/api/src/screens/session.js +108 -0
  36. package/dist/api/src/screens/session.tsx +117 -0
  37. package/dist/api/src/semantics/audit.d.ts +31 -0
  38. package/dist/api/src/semantics/audit.js +80 -0
  39. package/dist/api/src/semantics/audit.ts +82 -0
  40. package/dist/api/src/semantics/backups.d.ts +37 -0
  41. package/dist/api/src/semantics/backups.js +264 -0
  42. package/dist/api/src/semantics/backups.ts +258 -0
  43. package/dist/api/src/semantics/branches.d.ts +53 -0
  44. package/dist/api/src/semantics/branches.js +197 -0
  45. package/dist/api/src/semantics/branches.ts +201 -0
  46. package/dist/api/src/semantics/deploy-requests.d.ts +47 -0
  47. package/dist/api/src/semantics/deploy-requests.js +491 -0
  48. package/dist/api/src/semantics/deploy-requests.ts +493 -0
  49. package/dist/api/src/semantics/index.d.ts +20 -0
  50. package/dist/api/src/semantics/index.js +381 -0
  51. package/dist/api/src/semantics/index.ts +371 -0
  52. package/dist/api/src/semantics/shared.d.ts +36 -0
  53. package/dist/api/src/semantics/shared.js +132 -0
  54. package/dist/api/src/semantics/shared.ts +141 -0
  55. package/dist/api/src/semantics/time.d.ts +2 -0
  56. package/dist/api/src/semantics/time.js +81 -0
  57. package/dist/api/src/semantics/time.ts +77 -0
  58. package/dist/api/src/token-gate.d.ts +9 -0
  59. package/dist/api/src/token-gate.js +97 -0
  60. package/dist/api/src/token-gate.ts +96 -0
  61. package/dist/src/cli.d.ts +2 -0
  62. package/dist/src/cli.js +61 -0
  63. package/dist/src/generated/surface.gen.json +1 -0
  64. package/dist/src/generated/ui.gen.json +1 -0
  65. package/dist/src/index.d.ts +26 -0
  66. package/dist/src/index.js +156 -0
  67. package/dist/src/manifest.d.ts +2 -0
  68. package/dist/src/manifest.js +41 -0
  69. package/dist/src/planetscale-budget.d.ts +78 -0
  70. package/dist/src/planetscale-budget.js +305 -0
  71. package/dist/src/planetscale-capabilities.d.ts +10 -0
  72. package/dist/src/planetscale-capabilities.js +3977 -0
  73. package/dist/src/planetscale-collation-weights.gen.d.ts +4 -0
  74. package/dist/src/planetscale-collation-weights.gen.js +12 -0
  75. package/dist/src/planetscale-collation.d.ts +70 -0
  76. package/dist/src/planetscale-collation.js +391 -0
  77. package/dist/src/planetscale-conformance.d.ts +8 -0
  78. package/dist/src/planetscale-conformance.js +213 -0
  79. package/dist/src/planetscale-connector.d.ts +150 -0
  80. package/dist/src/planetscale-connector.js +532 -0
  81. package/dist/src/planetscale-deploy.d.ts +26 -0
  82. package/dist/src/planetscale-deploy.js +235 -0
  83. package/dist/src/planetscale-information-schema.d.ts +32 -0
  84. package/dist/src/planetscale-information-schema.js +299 -0
  85. package/dist/src/planetscale-mysql.d.ts +33 -0
  86. package/dist/src/planetscale-mysql.js +547 -0
  87. package/dist/src/planetscale-roles.d.ts +11 -0
  88. package/dist/src/planetscale-roles.js +60 -0
  89. package/dist/src/planetscale-row.d.ts +12 -0
  90. package/dist/src/planetscale-row.js +39 -0
  91. package/dist/src/planetscale-server.d.ts +42 -0
  92. package/dist/src/planetscale-server.js +137 -0
  93. package/dist/src/planetscale-sql.d.ts +701 -0
  94. package/dist/src/planetscale-sql.js +7167 -0
  95. package/dist/src/planetscale-store.d.ts +126 -0
  96. package/dist/src/planetscale-store.js +827 -0
  97. package/dist/src/planetscale-twin.d.ts +48 -0
  98. package/dist/src/planetscale-twin.js +290 -0
  99. package/dist/src/planetscale-values.d.ts +139 -0
  100. package/dist/src/planetscale-values.js +719 -0
  101. package/dist/src/planetscale-wire.d.ts +110 -0
  102. package/dist/src/planetscale-wire.js +188 -0
  103. package/dist/src/semantics/psdb.d.ts +18 -0
  104. package/dist/src/semantics/psdb.js +30 -0
  105. package/package.json +58 -0
  106. package/src/cli.ts +58 -0
  107. package/src/generated/surface.gen.json +1 -0
  108. package/src/generated/ui.gen.json +1 -0
  109. package/src/index.ts +267 -0
  110. package/src/manifest.ts +60 -0
  111. package/src/planetscale-budget.ts +347 -0
  112. package/src/planetscale-capabilities.ts +3862 -0
  113. package/src/planetscale-collation-weights.gen.ts +13 -0
  114. package/src/planetscale-collation.ts +378 -0
  115. package/src/planetscale-conformance.ts +237 -0
  116. package/src/planetscale-connector.ts +571 -0
  117. package/src/planetscale-deploy.ts +197 -0
  118. package/src/planetscale-information-schema.ts +322 -0
  119. package/src/planetscale-mysql.ts +339 -0
  120. package/src/planetscale-roles.ts +71 -0
  121. package/src/planetscale-row.ts +43 -0
  122. package/src/planetscale-server.ts +162 -0
  123. package/src/planetscale-sql.ts +5957 -0
  124. package/src/planetscale-store.ts +869 -0
  125. package/src/planetscale-twin.ts +338 -0
  126. package/src/planetscale-values.ts +572 -0
  127. package/src/planetscale-wire.ts +274 -0
  128. package/src/semantics/psdb.ts +57 -0
@@ -0,0 +1,13 @@
1
+ // GENERATED by scripts/generate-collation-weights.ts — do not edit by hand.
2
+ // Sources: DUCET 9.0.0 (unicode.org/Public/UCA/9.0.0/allkeys.txt) for utf8mb4_0900_*, DUCET 4.0.0
3
+ // (unicode.org/Public/UCA/4.0.0/allkeys-4.0.0.txt) primaries for utf8mb4_unicode_ci, and MySQL 8.0's
4
+ // strings/ctype-utf8.cc my_unicase_default sort weights for utf8mb4_general_ci.
5
+ // Ranges: U+0000..U+052F, U+1E00..U+1FFF, U+2000..U+206F, U+20A0..U+20CF, U+2100..U+218F, U+FB00..U+FB06, U+FF01..U+FF5E.
6
+ // Format: "cp[+cp…]:ce,ce …" in hex, where a collation element is "p" (secondary 0x20, tertiary 0x2)
7
+ // or "p.s.t"; the unicode_ci table lists non-zero primaries only; general_ci lists "cp:sort" where
8
+ // sort differs from the code point.
9
+
10
+ export const UCA_RANGES: ReadonlyArray<readonly [number, number]> = [[0,1327],[7680,8191],[8192,8303],[8352,8399],[8448,8591],[64256,64262],[65281,65374]];
11
+ export const UCA_900 = "0:0.0.0 1:0.0.0 2:0.0.0 3:0.0.0 4:0.0.0 5:0.0.0 6:0.0.0 7:0.0.0 8:0.0.0 e:0.0.0 f:0.0.0 10:0.0.0 11:0.0.0 12:0.0.0 13:0.0.0 14:0.0.0 15:0.0.0 16:0.0.0 17:0.0.0 18:0.0.0 19:0.0.0 1a:0.0.0 1b:0.0.0 1c:0.0.0 1d:0.0.0 1e:0.0.0 1f:0.0.0 7f:0.0.0 80:0.0.0 81:0.0.0 82:0.0.0 83:0.0.0 84:0.0.0 86:0.0.0 87:0.0.0 88:0.0.0 89:0.0.0 8a:0.0.0 8b:0.0.0 8c:0.0.0 8d:0.0.0 8e:0.0.0 8f:0.0.0 90:0.0.0 91:0.0.0 92:0.0.0 93:0.0.0 94:0.0.0 95:0.0.0 96:0.0.0 97:0.0.0 98:0.0.0 99:0.0.0 9a:0.0.0 9b:0.0.0 9c:0.0.0 9d:0.0.0 9e:0.0.0 9f:0.0.0 ad:0.0.0 200b:0.0.0 200c:0.0.0 200d:0.0.0 200e:0.0.0 200f:0.0.0 202a:0.0.0 202b:0.0.0 202c:0.0.0 202d:0.0.0 202e:0.0.0 2060:0.0.0 2066:0.0.0 2067:0.0.0 2068:0.0.0 2069:0.0.0 206a:0.0.0 206b:0.0.0 206c:0.0.0 206d:0.0.0 206e:0.0.0 206f:0.0.0 9:201 a:202 b:203 c:204 d:205 20:209 21:260 22:30c 23:398 25:399 26:396 27:305 28:317 29:318 2a:38f 2b:616 2c:222 2d:20d 2e:277 2f:394 3a:239 3b:234 3c:61a 3d:61b 3e:61c 3f:266 40:38e 5b:319 5c:395 5d:31a 5e:485 5f:20b 60:482 7b:31b 7c:61e 7d:31c 7e:620 85:206 a0:209.20.1b a1:261 a6:61f a7:389 a8:489 a9:584 ab:315 ac:61d ae:585 af:486 b0:4f6 b1:617 b4:483 b6:38b b7:28b b8:48c bb:316 bf:267 d7:619 f7:618 2b9:493 2ba:495 2c2:496 2c3:497 2c4:498 2c5:499 2c6:49a 2c7:49b 2c8:49c 2c9:49d 2ca:49e 2cb:49f 2cc:4a0 2cd:4a1 2ce:4a2 2cf:4a3 2d2:4a4 2d3:4a5 2d4:4a6 2d5:4a7 2d6:4a8 2d7:4a9 2d8:487 2d9:488 2da:48a 2db:48d 2dc:484 2dd:48b 2de:4aa 2df:4ab 2e5:4ac 2e6:4ad 2e7:4ae 2e8:4af 2e9:4b0 2ea:4b1 2eb:4b2 2ec:4b3 2ed:4b4 2ef:4b5 2f0:4b6 2f1:4b7 2f2:4b8 2f3:4b9 2f4:4ba 2f5:4bb 2f6:4bc 2f7:4bd 2f8:4be 2f9:4bf 2fa:4c0 2fb:4c1 2fc:4c2 2fd:4c3 2fe:4c4 2ff:4c5 34f:0.0.0 374:493 375:494 37e:234 384:483 385:489,0.24.2 387:28b 3f6:611 482:4f7 488:0.0.0 489:0.0.0 1fbd:48e 1fbf:48e 1fc0:490 1fc1:489,0.2a.2 1fcd:48e,0.25.2 1fce:48e,0.24.2 1fcf:48e,0.2a.2 1fdd:48f,0.25.2 1fde:48f,0.24.2 1fdf:48f,0.2a.2 1fed:489,0.25.2 1fee:489,0.24.2 1fef:482 1ffd:483 1ffe:48f 2000:209.20.4 2001:209.20.4 2002:209.20.4 2003:209.20.4 2004:209.20.4 2005:209.20.4 2006:209.20.4 2007:209.20.1b 2008:209.20.4 2009:209.20.4 200a:209.20.4 2010:213 2011:213.20.1b 2012:214 2013:215 2014:216 2015:217 2016:383 2017:20c 2018:306 2019:307 201a:308 201b:309 201c:30d 201d:30e 201e:30f 201f:310 2020:39f 2021:3a0 2022:3a4 2023:3a5 2024:277.20.4 2025:277.20.4,277.20.4 2026:277.20.4,277.20.4,277.20.4 2027:3a6 2028:207 2029:208 202f:209.20.1b 2030:39b 2031:39d 2032:3aa 2033:3aa.20.4,3aa.20.4 2034:3aa.20.4,3aa.20.4,3aa.20.4 2035:3ab 2036:3ab.20.4,3ab.20.4 2037:3ab.20.4,3ab.20.4,3ab.20.4 2038:3ae 2039:30a 203a:30b 203b:3af 203c:260.20.4,260.20.4 203d:275 203e:20a 203f:3b0 2040:3b2 2041:3b4 2042:3b5 2043:3a7 2044:626 2045:323 2046:324 2047:266.20.4,266.20.4 2048:266.20.4,260.20.4 2049:260.20.4,266.20.4 204a:397 204b:38c 204c:3a8 204d:3a9 204e:390 204f:236 2050:3b3 2051:391 2052:622 2053:21a 2054:3b1 2055:2e8 2056:2e9 2057:3aa.20.4,3aa.20.4,3aa.20.4,3aa.20.4 2058:2ea 2059:2eb 205a:2ec 205b:2ed 205c:2ee 205d:2ef 205e:2f0 205f:209.20.4 2061:0.0.0 2062:0.0.0 2063:0.0.0 2064:0.0.0 2104:586 2108:587 2114:588 2117:589 2118:58a 211e:58b 211f:58c 2123:58d 2125:58e 2127:58f 2129:590 212e:591 213a:592 2140:615.20.5 2141:593 2142:594 2143:595 2144:596 214a:597 214b:6b1 214c:598 214f:599 2180:1ac6 2181:1ac7 2182:1ac8 2186:1ac9 2187:1aca 2188:1acb 218a:59a 218b:59b ff01:260.20.3 ff02:30c.20.3 ff03:398.20.3 ff05:399.20.3 ff06:396.20.3 ff07:305.20.3 ff08:317.20.3 ff09:318.20.3 ff0a:38f.20.3 ff0b:616.20.3 ff0c:222.20.3 ff0d:20d.20.3 ff0e:277.20.3 ff0f:394.20.3 ff1a:239.20.3 ff1b:234.20.3 ff1c:61a.20.3 ff1d:61b.20.3 ff1e:61c.20.3 ff1f:266.20.3 ff20:38e.20.3 ff3b:319.20.3 ff3c:395.20.3 ff3d:31a.20.3 ff3e:485.20.3 ff3f:20b.20.3 ff40:482.20.3 ff5b:31b.20.3 ff5c:61e.20.3 ff5d:31c.20.3 ff5e:620.20.3 332:0.21.2 313:0.22.2 343:0.22.2 486:0.22.2 314:0.23.2 485:0.23.2 301:0.24.2 341:0.24.2 300:0.25.2 340:0.25.2 306:0.26.2 302:0.27.2 30c:0.28.2 30a:0.29.2 342:0.2a.2 308:0.2b.2 344:0.2b.2,0.24.2 30b:0.2c.2 303:0.2d.2 307:0.2e.2 338:0.2f.2 327:0.30.2 328:0.31.2 304:0.32.2 30d:0.33.2 30e:0.33.2 312:0.33.2 315:0.33.2 31a:0.33.2 33d:0.33.2 33e:0.33.2 33f:0.33.2 346:0.33.2 34a:0.33.2 34b:0.33.2 34c:0.33.2 350:0.33.2 351:0.33.2 352:0.33.2 357:0.33.2 35b:0.33.2 35d:0.33.2 35e:0.33.2 484:0.33.2 487:0.33.2 316:0.34.2 317:0.34.2 318:0.34.2 319:0.34.2 31c:0.34.2 31d:0.34.2 31e:0.34.2 31f:0.34.2 320:0.34.2 329:0.34.2 32a:0.34.2 32b:0.34.2 32c:0.34.2 32f:0.34.2 333:0.34.2 33a:0.34.2 33b:0.34.2 33c:0.34.2 347:0.34.2 348:0.34.2 349:0.34.2 34d:0.34.2 34e:0.34.2 353:0.34.2 354:0.34.2 355:0.34.2 356:0.34.2 359:0.34.2 35a:0.34.2 35c:0.34.2 35f:0.34.2 362:0.34.2 336:0.35.2 337:0.35.2 335:0.39.2 305:0.3a.2 309:0.3b.2 30f:0.3c.2 310:0.3d.2 311:0.3e.2 31b:0.3f.2 321:0.40.2 322:0.41.2 323:0.42.2 324:0.43.2 325:0.44.2 326:0.45.2 32d:0.46.2 32e:0.47.2 330:0.48.2 331:0.49.2 334:0.4a.2 339:0.4b.2 345:0.4c.2 358:0.4d.2 360:0.4e.2 361:0.4f.2 483:0.50.2 2d0:1bf8 2d1:1bf9 a4:1c10 a2:1c11 24:1c12 ff04:1c12.20.3 a3:1c13 a5:1c14 20a0:1c1f 20a1:1c20 20a2:1c21 20a3:1c22 20a4:1c23 20a5:1c24 20a6:1c25 20a7:1c26 20a9:1c27 20aa:1c28 20ab:1c29 20ac:1c2a 20ad:1c2b 20ae:1c2c 20af:1c2d 20b0:1c2e 20b1:1c2f 20b2:1c30 20b3:1c31 20b4:1c32 20b5:1c33 20b6:1c34 20b7:1c35 20b8:1c36 20b9:1c37 20ba:1c38 20bb:1c39 20bc:1c3a 20bd:1c3b 20be:1c3c 30:1c3d ff10:1c3d.20.3 2189:1c3d.20.1e,626.20.1e,1c40.20.1e 31:1c3e ff11:1c3e.20.3 b9:1c3e.20.14 215f:1c3e.20.1e,626.20.1e 2152:1c3e.20.1e,626.20.1e,1c3e.20.1e,1c3d.20.1e bd:1c3e.20.1e,626.20.1e,1c3f.20.1e 2153:1c3e.20.1e,626.20.1e,1c40.20.1e bc:1c3e.20.1e,626.20.1e,1c41.20.1e 2155:1c3e.20.1e,626.20.1e,1c42.20.1e 2159:1c3e.20.1e,626.20.1e,1c43.20.1e 2150:1c3e.20.1e,626.20.1e,1c44.20.1e 215b:1c3e.20.1e,626.20.1e,1c45.20.1e 2151:1c3e.20.1e,626.20.1e,1c46.20.1e 32:1c3f ff12:1c3f.20.3 b2:1c3f.20.14 2154:1c3f.20.1e,626.20.1e,1c40.20.1e 2156:1c3f.20.1e,626.20.1e,1c42.20.1e 33:1c40 ff13:1c40.20.3 b3:1c40.20.14 be:1c40.20.1e,626.20.1e,1c41.20.1e 2157:1c40.20.1e,626.20.1e,1c42.20.1e 215c:1c40.20.1e,626.20.1e,1c45.20.1e 34:1c41 ff14:1c41.20.3 2158:1c41.20.1e,626.20.1e,1c42.20.1e 35:1c42 ff15:1c42.20.3 215a:1c42.20.1e,626.20.1e,1c43.20.1e 215d:1c42.20.1e,626.20.1e,1c45.20.1e 36:1c43 2185:1c43 ff16:1c43.20.3 37:1c44 ff17:1c44.20.3 215e:1c44.20.1e,626.20.1e,1c45.20.1e 38:1c45 ff18:1c45.20.3 39:1c46 ff19:1c46.20.3 61:1c47 ff41:1c47.20.3 363:1c47.20.4 41:1c47.20.8 ff21:1c47.20.9 aa:1c47.20.14 e1:1c47,0.24.2 c1:1c47.20.8,0.24.2 e0:1c47,0.25.2 c0:1c47.20.8,0.25.2 103:1c47,0.26.2 102:1c47.20.8,0.26.2 1eaf:1c47,0.26.2,0.24.2 1eae:1c47.20.8,0.26.2,0.24.2 1eb1:1c47,0.26.2,0.25.2 1eb0:1c47.20.8,0.26.2,0.25.2 1eb5:1c47,0.26.2,0.2d.2 1eb4:1c47.20.8,0.26.2,0.2d.2 1eb3:1c47,0.26.2,0.3b.2 1eb2:1c47.20.8,0.26.2,0.3b.2 e2:1c47,0.27.2 c2:1c47.20.8,0.27.2 1ea5:1c47,0.27.2,0.24.2 1ea4:1c47.20.8,0.27.2,0.24.2 1ea7:1c47,0.27.2,0.25.2 1ea6:1c47.20.8,0.27.2,0.25.2 1eab:1c47,0.27.2,0.2d.2 1eaa:1c47.20.8,0.27.2,0.2d.2 1ea9:1c47,0.27.2,0.3b.2 1ea8:1c47.20.8,0.27.2,0.3b.2 1ce:1c47,0.28.2 1cd:1c47.20.8,0.28.2 e5:1c47,0.29.2 c5:1c47.20.8,0.29.2 212b:1c47.20.8,0.29.2 1fb:1c47,0.29.2,0.24.2 1fa:1c47.20.8,0.29.2,0.24.2 e4:1c47,0.2b.2 c4:1c47.20.8,0.2b.2 1df:1c47,0.2b.2,0.32.2 1de:1c47.20.8,0.2b.2,0.32.2 e3:1c47,0.2d.2 c3:1c47.20.8,0.2d.2 227:1c47,0.2e.2 226:1c47.20.8,0.2e.2 1e1:1c47,0.2e.2,0.32.2 1e0:1c47.20.8,0.2e.2,0.32.2 105:1c47,0.31.2 104:1c47.20.8,0.31.2 101:1c47,0.32.2 100:1c47.20.8,0.32.2 1ea3:1c47,0.3b.2 1ea2:1c47.20.8,0.3b.2 201:1c47,0.3c.2 200:1c47.20.8,0.3c.2 203:1c47,0.3e.2 202:1c47.20.8,0.3e.2 1ea1:1c47,0.42.2 1ea0:1c47.20.8,0.42.2 1eb7:1c47,0.42.2,0.26.2 1eb6:1c47.20.8,0.42.2,0.26.2 1ead:1c47,0.42.2,0.27.2 1eac:1c47.20.8,0.42.2,0.27.2 1e01:1c47,0.44.2 1e00:1c47.20.8,0.44.2 2100:1c47.20.4,394.20.4,1c7a.20.4 e6:1c47.20.4,0.110.4,1caa.20.4 c6:1c47.20.a,0.110.4,1caa.20.a 1fd:1c47.20.4,0.110.4,1caa.20.4,0.24.2 1fc:1c47.20.a,0.110.4,1caa.20.a,0.24.2 1e3:1c47.20.4,0.110.4,1caa.20.4,0.32.2 1e2:1c47.20.a,0.110.4,1caa.20.a,0.32.2 2101:1c47.20.4,394.20.4,1e71.20.4 214d:1c47.20.a,394.20.4,1e71.20.a 1e9a:1c47.20.4,1f80.20.4 23a:1c4c.20.8 250:1c51 251:1c55 252:1c5b 62:1c60 ff42:1c60.20.3 42:1c60.20.8 ff22:1c60.20.9 212c:1c60.20.b 1e03:1c60,0.2e.2 1e02:1c60.20.8,0.2e.2 1e05:1c60,0.42.2 1e04:1c60.20.8,0.42.2 1e07:1c60,0.49.2 1e06:1c60.20.8,0.49.2 299:1c64 180:1c68 243:1c68.20.8 253:1c71 181:1c71.20.8 183:1c75 182:1c75.20.8 63:1c7a ff43:1c7a.20.3 368:1c7a.20.4 217d:1c7a.20.4 43:1c7a.20.8 ff23:1c7a.20.9 2103:4f6.20.4,1c7a.20.a 216d:1c7a.20.a 2102:1c7a.20.b 212d:1c7a.20.b 107:1c7a,0.24.2 106:1c7a.20.8,0.24.2 109:1c7a,0.27.2 108:1c7a.20.8,0.27.2 10d:1c7a,0.28.2 10c:1c7a.20.8,0.28.2 10b:1c7a,0.2e.2 10a:1c7a.20.8,0.2e.2 e7:1c7a,0.30.2 c7:1c7a.20.8,0.30.2 1e09:1c7a,0.30.2,0.24.2 1e08:1c7a.20.8,0.30.2,0.24.2 2105:1c7a.20.4,394.20.4,1ddd.20.4 2106:1c7a.20.4,394.20.4,1eb5.20.4 23c:1c7f 23b:1c7f.20.8 188:1c85 187:1c85.20.8 255:1c89 2184:1c8d 2183:1c8d.20.8 64:1c8f ff44:1c8f.20.3 369:1c8f.20.4 217e:1c8f.20.4 2146:1c8f.20.5 44:1c8f.20.8 ff24:1c8f.20.9 216e:1c8f.20.a 2145:1c8f.20.b 10f:1c8f,0.28.2 10e:1c8f.20.8,0.28.2 1e0b:1c8f,0.2e.2 1e0a:1c8f.20.8,0.2e.2 1e11:1c8f,0.30.2 1e10:1c8f.20.8,0.30.2 111:1c8f,0.39.2 110:1c8f.20.8,0.39.2 1e0d:1c8f,0.42.2 1e0c:1c8f.20.8,0.42.2 1e13:1c8f,0.46.2 1e12:1c8f.20.8,0.46.2 1e0f:1c8f,0.49.2 1e0e:1c8f.20.8,0.49.2 f0:1c8f.20.4,0.110.4 d0:1c8f.20.a,0.110.4 238:1c8f.20.4,1c60.20.4 1f3:1c8f.20.4,1f21.20.4 2a3:1c8f.20.4,1f21.20.4 1f2:1c8f.20.a,1f21.20.4 1f1:1c8f.20.a,1f21.20.a 1c6:1c8f.20.4,1f21.20.4,0.28.4 1c5:1c8f.20.a,1f21.20.4,0.28.4 1c4:1c8f.20.a,1f21.20.a,0.28.4 2a5:1c8f.20.4,1f34.20.4 2a4:1c8f.20.4,1f3e.20.4 256:1c97 189:1c97.20.8 257:1c9b 18a:1c9b.20.8 18c:1ca0 18b:1ca0.20.8 221:1ca4 1e9f:1ca9 65:1caa ff45:1caa.20.3 364:1caa.20.4 212f:1caa.20.5 2147:1caa.20.5 45:1caa.20.8 ff25:1caa.20.9 2130:1caa.20.b e9:1caa,0.24.2 c9:1caa.20.8,0.24.2 e8:1caa,0.25.2 c8:1caa.20.8,0.25.2 115:1caa,0.26.2 114:1caa.20.8,0.26.2 ea:1caa,0.27.2 ca:1caa.20.8,0.27.2 1ebf:1caa,0.27.2,0.24.2 1ebe:1caa.20.8,0.27.2,0.24.2 1ec1:1caa,0.27.2,0.25.2 1ec0:1caa.20.8,0.27.2,0.25.2 1ec5:1caa,0.27.2,0.2d.2 1ec4:1caa.20.8,0.27.2,0.2d.2 1ec3:1caa,0.27.2,0.3b.2 1ec2:1caa.20.8,0.27.2,0.3b.2 11b:1caa,0.28.2 11a:1caa.20.8,0.28.2 eb:1caa,0.2b.2 cb:1caa.20.8,0.2b.2 1ebd:1caa,0.2d.2 1ebc:1caa.20.8,0.2d.2 117:1caa,0.2e.2 116:1caa.20.8,0.2e.2 229:1caa,0.30.2 228:1caa.20.8,0.30.2 1e1d:1caa,0.30.2,0.26.2 1e1c:1caa.20.8,0.30.2,0.26.2 119:1caa,0.31.2 118:1caa.20.8,0.31.2 113:1caa,0.32.2 112:1caa.20.8,0.32.2 1e17:1caa,0.32.2,0.24.2 1e16:1caa.20.8,0.32.2,0.24.2 1e15:1caa,0.32.2,0.25.2 1e14:1caa.20.8,0.32.2,0.25.2 1ebb:1caa,0.3b.2 1eba:1caa.20.8,0.3b.2 205:1caa,0.3c.2 204:1caa.20.8,0.3c.2 207:1caa,0.3e.2 206:1caa.20.8,0.3e.2 1eb9:1caa,0.42.2 1eb8:1caa.20.8,0.42.2 1ec7:1caa,0.42.2,0.27.2 1ec6:1caa.20.8,0.42.2,0.27.2 1e19:1caa,0.46.2 1e18:1caa.20.8,0.46.2 1e1b:1caa,0.48.2 1e1a:1caa.20.8,0.48.2 247:1cb1 246:1cb1.20.8 1dd:1cb8 18e:1cb8.20.8 259:1cbd 18f:1cbd.20.8 25b:1cc2 190:1cc2.20.8 2107:1cc2.20.a 258:1cc7 25a:1ccb 25c:1ccf 25d:1cd5 25e:1cd9 29a:1cdd 264:1ce1 66:1ce5 ff46:1ce5.20.3 46:1ce5.20.8 ff26:1ce5.20.9 2109:4f6.20.4,1ce5.20.a 2131:1ce5.20.b 1e1f:1ce5,0.2e.2 1e1e:1ce5.20.8,0.2e.2 213b:1ce5.20.a,1c47.20.a,1eff.20.a fb00:1ce5.20.4,1ce5.20.4 fb03:1ce5.20.4,1ce5.20.4,1d32.20.4 fb04:1ce5.20.4,1ce5.20.4,1d77.20.4 fb01:1ce5.20.4,1d32.20.4 fb02:1ce5.20.4,1d77.20.4 2a9:1ce5.20.4,1dd8.20.4 192:1cee 191:1cee.20.8 214e:1cf2 2132:1cf2.20.8 67:1cf4 ff47:1cf4.20.3 210a:1cf4.20.5 47:1cf4.20.8 ff27:1cf4.20.9 1f5:1cf4,0.24.2 1f4:1cf4.20.8,0.24.2 11f:1cf4,0.26.2 11e:1cf4.20.8,0.26.2 11d:1cf4,0.27.2 11c:1cf4.20.8,0.27.2 1e7:1cf4,0.28.2 1e6:1cf4.20.8,0.28.2 121:1cf4,0.2e.2 120:1cf4.20.8,0.2e.2 123:1cf4,0.30.2 122:1cf4.20.8,0.30.2 1e21:1cf4,0.32.2 1e20:1cf4.20.8,0.32.2 261:1cf8 262:1cfd 1e5:1d01 1e4:1d01.20.8 260:1d06 193:1d06.20.8 29b:1d0a 263:1d10 194:1d10.20.8 2e0:1d10.20.14 1a3:1d14 1a2:1d14.20.8 68:1d18 ff48:1d18.20.3 36a:1d18.20.4 210e:1d18.20.5 48:1d18.20.8 ff28:1d18.20.9 210b:1d18.20.b 210c:1d18.20.b 210d:1d18.20.b 2b0:1d18.20.14 125:1d18,0.27.2 124:1d18.20.8,0.27.2 21f:1d18,0.28.2 21e:1d18.20.8,0.28.2 1e27:1d18,0.2b.2 1e26:1d18.20.8,0.2b.2 1e23:1d18,0.2e.2 1e22:1d18.20.8,0.2e.2 1e29:1d18,0.30.2 1e28:1d18.20.8,0.30.2 127:1d18,0.39.2 210f:1d18,0.39.2 126:1d18.20.8,0.39.2 1e25:1d18,0.42.2 1e24:1d18.20.8,0.42.2 1e2b:1d18,0.47.2 1e2a:1d18.20.8,0.47.2 1e96:1d18,0.49.2 29c:1d1c 195:1d20 1f6:1d20.20.8 266:1d25 2b1:1d25.20.14 267:1d2c 2bb:1d30 2bd:1d31 69:1d32 ff49:1d32.20.3 365:1d32.20.4 2170:1d32.20.4 2139:1d32.20.5 2148:1d32.20.5 49:1d32.20.8 ff29:1d32.20.9 2160:1d32.20.a 2110:1d32.20.b 2111:1d32.20.b ed:1d32,0.24.2 cd:1d32.20.8,0.24.2 ec:1d32,0.25.2 cc:1d32.20.8,0.25.2 12d:1d32,0.26.2 12c:1d32.20.8,0.26.2 ee:1d32,0.27.2 ce:1d32.20.8,0.27.2 1d0:1d32,0.28.2 1cf:1d32.20.8,0.28.2 ef:1d32,0.2b.2 cf:1d32.20.8,0.2b.2 1e2f:1d32,0.2b.2,0.24.2 1e2e:1d32.20.8,0.2b.2,0.24.2 129:1d32,0.2d.2 128:1d32.20.8,0.2d.2 130:1d32.20.8,0.2e.2 12f:1d32,0.31.2 12e:1d32.20.8,0.31.2 12b:1d32,0.32.2 12a:1d32.20.8,0.32.2 1ec9:1d32,0.3b.2 1ec8:1d32.20.8,0.3b.2 209:1d32,0.3c.2 208:1d32.20.8,0.3c.2 20b:1d32,0.3e.2 20a:1d32.20.8,0.3e.2 1ecb:1d32,0.42.2 1eca:1d32.20.8,0.42.2 1e2d:1d32,0.48.2 1e2c:1d32.20.8,0.48.2 2171:1d32.20.4,1d32.20.4 2161:1d32.20.a,1d32.20.a 2172:1d32.20.4,1d32.20.4,1d32.20.4 2162:1d32.20.a,1d32.20.a,1d32.20.a 133:1d32.20.4,1d4c.20.4 132:1d32.20.a,1d4c.20.a 2173:1d32.20.4,1ee3.20.4 2163:1d32.20.a,1ee3.20.a 2178:1d32.20.4,1eff.20.4 2168:1d32.20.a,1eff.20.a 131:1d36 26a:1d3a 268:1d41 197:1d41.20.8 269:1d47 196:1d47.20.8 6a:1d4c ff4a:1d4c.20.3 2149:1d4c.20.5 4a:1d4c.20.8 ff2a:1d4c.20.9 2b2:1d4c.20.14 135:1d4c,0.27.2 134:1d4c.20.8,0.27.2 1f0:1d4c,0.28.2 237:1d50 249:1d55 248:1d55.20.8 29d:1d59 25f:1d5d 284:1d61 6b:1d65 ff4b:1d65.20.3 4b:1d65.20.8 212a:1d65.20.8 ff2b:1d65.20.9 1e31:1d65,0.24.2 1e30:1d65.20.8,0.24.2 1e9:1d65,0.28.2 1e8:1d65.20.8,0.28.2 137:1d65,0.30.2 136:1d65.20.8,0.30.2 1e33:1d65,0.42.2 1e32:1d65.20.8,0.42.2 1e35:1d65,0.49.2 1e34:1d65.20.8,0.49.2 199:1d6b 198:1d6b.20.8 29e:1d73 6c:1d77 ff4c:1d77.20.3 217c:1d77.20.4 2113:1d77.20.5 4c:1d77.20.8 ff2c:1d77.20.9 216c:1d77.20.a 2112:1d77.20.b 2e1:1d77.20.14 13a:1d77,0.24.2 139:1d77.20.8,0.24.2 13e:1d77,0.28.2 13d:1d77.20.8,0.28.2 13c:1d77,0.30.2 13b:1d77.20.8,0.30.2 142:1d77,0.39.2 141:1d77.20.8,0.39.2 1e37:1d77,0.42.2 1e36:1d77.20.8,0.42.2 1e39:1d77,0.42.2,0.32.2 1e38:1d77.20.8,0.42.2,0.32.2 1e3d:1d77,0.46.2 1e3c:1d77.20.8,0.46.2 1e3b:1d77,0.49.2 1e3a:1d77.20.8,0.49.2 140:1d77,0.110.2 6c+b7:1d77,0.110.2 6c+387:1d77,0.110.2 13f:1d77.20.8,0.110.2 4c+b7:1d77.20.8,0.110.2 4c+387:1d77.20.8,0.110.2 1c9:1d77.20.4,1d4c.20.4 1c8:1d77.20.a,1d4c.20.4 1c7:1d77.20.a,1d4c.20.a 1efb:1d77.20.4,1d77.20.4 1efa:1d77.20.a,1d77.20.a 2aa:1d77.20.4,1e71.20.4 2ab:1d77.20.4,1f21.20.4 29f:1d7b 19a:1d82 23d:1d82.20.8 26b:1d87 26c:1d8d 26d:1d93 234:1d98 26e:1d9d 19b:1da2 28e:1da6 6d:1daa ff4d:1daa.20.3 36b:1daa.20.4 217f:1daa.20.4 4d:1daa.20.8 ff2d:1daa.20.9 216f:1daa.20.a 2133:1daa.20.b 1e3f:1daa,0.24.2 1e3e:1daa.20.8,0.24.2 1e41:1daa,0.2e.2 1e40:1daa.20.8,0.2e.2 1e43:1daa,0.42.2 1e42:1daa.20.8,0.42.2 271:1db1 6e:1db9 ff4e:1db9.20.3 4e:1db9.20.8 ff2e:1db9.20.9 2115:1db9.20.b 144:1db9,0.24.2 143:1db9.20.8,0.24.2 1f9:1db9,0.25.2 1f8:1db9.20.8,0.25.2 148:1db9,0.28.2 147:1db9.20.8,0.28.2 f1:1db9,0.2d.2 d1:1db9.20.8,0.2d.2 1e45:1db9,0.2e.2 1e44:1db9.20.8,0.2e.2 146:1db9,0.30.2 145:1db9.20.8,0.30.2 1e47:1db9,0.42.2 1e46:1db9.20.8,0.42.2 1e4b:1db9,0.46.2 1e4a:1db9.20.8,0.46.2 1e49:1db9,0.49.2 1e48:1db9.20.8,0.49.2 1cc:1db9.20.4,1d4c.20.4 1cb:1db9.20.a,1d4c.20.4 1ca:1db9.20.a,1d4c.20.a 2116:1db9.20.a,1ddd.20.4 274:1dbd 272:1dc4 19d:1dc4.20.8 19e:1dc8 220:1dc8.20.8 273:1dce 235:1dd2 14b:1dd8 14a:1dd8.20.8 6f:1ddd ff4f:1ddd.20.3 366:1ddd.20.4 2134:1ddd.20.5 4f:1ddd.20.8 ff2f:1ddd.20.9 ba:1ddd.20.14 f3:1ddd,0.24.2 d3:1ddd.20.8,0.24.2 f2:1ddd,0.25.2 d2:1ddd.20.8,0.25.2 14f:1ddd,0.26.2 14e:1ddd.20.8,0.26.2 f4:1ddd,0.27.2 d4:1ddd.20.8,0.27.2 1ed1:1ddd,0.27.2,0.24.2 1ed0:1ddd.20.8,0.27.2,0.24.2 1ed3:1ddd,0.27.2,0.25.2 1ed2:1ddd.20.8,0.27.2,0.25.2 1ed7:1ddd,0.27.2,0.2d.2 1ed6:1ddd.20.8,0.27.2,0.2d.2 1ed5:1ddd,0.27.2,0.3b.2 1ed4:1ddd.20.8,0.27.2,0.3b.2 1d2:1ddd,0.28.2 1d1:1ddd.20.8,0.28.2 f6:1ddd,0.2b.2 d6:1ddd.20.8,0.2b.2 22b:1ddd,0.2b.2,0.32.2 22a:1ddd.20.8,0.2b.2,0.32.2 151:1ddd,0.2c.2 150:1ddd.20.8,0.2c.2 f5:1ddd,0.2d.2 d5:1ddd.20.8,0.2d.2 1e4d:1ddd,0.2d.2,0.24.2 1e4c:1ddd.20.8,0.2d.2,0.24.2 1e4f:1ddd,0.2d.2,0.2b.2 1e4e:1ddd.20.8,0.2d.2,0.2b.2 22d:1ddd,0.2d.2,0.32.2 22c:1ddd.20.8,0.2d.2,0.32.2 22f:1ddd,0.2e.2 22e:1ddd.20.8,0.2e.2 231:1ddd,0.2e.2,0.32.2 230:1ddd.20.8,0.2e.2,0.32.2 f8:1ddd,0.2f.2 d8:1ddd.20.8,0.2f.2 1ff:1ddd,0.2f.2,0.24.2 1fe:1ddd.20.8,0.2f.2,0.24.2 1eb:1ddd,0.31.2 1ea:1ddd.20.8,0.31.2 1ed:1ddd,0.31.2,0.32.2 1ec:1ddd.20.8,0.31.2,0.32.2 14d:1ddd,0.32.2 14c:1ddd.20.8,0.32.2 1e53:1ddd,0.32.2,0.24.2 1e52:1ddd.20.8,0.32.2,0.24.2 1e51:1ddd,0.32.2,0.25.2 1e50:1ddd.20.8,0.32.2,0.25.2 1ecf:1ddd,0.3b.2 1ece:1ddd.20.8,0.3b.2 20d:1ddd,0.3c.2 20c:1ddd.20.8,0.3c.2 20f:1ddd,0.3e.2 20e:1ddd.20.8,0.3e.2 1a1:1ddd,0.3f.2 1a0:1ddd.20.8,0.3f.2 1edb:1ddd,0.3f.2,0.24.2 1eda:1ddd.20.8,0.3f.2,0.24.2 1edd:1ddd,0.3f.2,0.25.2 1edc:1ddd.20.8,0.3f.2,0.25.2 1ee1:1ddd,0.3f.2,0.2d.2 1ee0:1ddd.20.8,0.3f.2,0.2d.2 1edf:1ddd,0.3f.2,0.3b.2 1ede:1ddd.20.8,0.3f.2,0.3b.2 1ee3:1ddd,0.3f.2,0.42.2 1ee2:1ddd.20.8,0.3f.2,0.42.2 1ecd:1ddd,0.42.2 1ecc:1ddd.20.8,0.42.2 1ed9:1ddd,0.42.2,0.27.2 1ed8:1ddd.20.8,0.42.2,0.27.2 153:1ddd.20.4,0.110.4,1caa.20.4 152:1ddd.20.a,0.110.4,1caa.20.a 276:1de4 254:1df0 186:1df0.20.8 275:1dfd 19f:1dfd.20.8 277:1e02 223:1e07 222:1e07.20.8 70:1e0c ff50:1e0c.20.3 50:1e0c.20.8 ff30:1e0c.20.9 2119:1e0c.20.b 1e55:1e0c,0.24.2 1e54:1e0c.20.8,0.24.2 1e57:1e0c,0.2e.2 1e56:1e0c.20.8,0.2e.2 1a5:1e15 1a4:1e15.20.8 278:1e1c 71:1e21 ff51:1e21.20.3 51:1e21.20.8 ff31:1e21.20.9 211a:1e21.20.b 239:1e21.20.4,1e0c.20.4 2a0:1e27 24b:1e2b 24a:1e2b.20.8 138:1e2f 72:1e33 ff52:1e33.20.3 36c:1e33.20.4 52:1e33.20.8 ff32:1e33.20.9 211b:1e33.20.b 211c:1e33.20.b 211d:1e33.20.b 2b3:1e33.20.14 155:1e33,0.24.2 154:1e33.20.8,0.24.2 159:1e33,0.28.2 158:1e33.20.8,0.28.2 1e59:1e33,0.2e.2 1e58:1e33.20.8,0.2e.2 157:1e33,0.30.2 156:1e33.20.8,0.30.2 211:1e33,0.3c.2 210:1e33.20.8,0.3c.2 213:1e33,0.3e.2 212:1e33.20.8,0.3e.2 1e5b:1e33,0.42.2 1e5a:1e33.20.8,0.42.2 1e5d:1e33,0.42.2,0.32.2 1e5c:1e33.20.8,0.42.2,0.32.2 1e5f:1e33,0.49.2 1e5e:1e33.20.8,0.49.2 20a8:1e33.20.a,1e71.20.4 280:1e38 1a6:1e38.20.8 24d:1e3f 24c:1e3f.20.8 279:1e44 2b4:1e44.20.14 27a:1e49 27b:1e4e 2b5:1e4e.20.14 27c:1e53 27d:1e57 27e:1e5c 27f:1e61 281:1e6a 2b6:1e6a.20.14 73:1e71 ff53:1e71.20.3 53:1e71.20.8 ff33:1e71.20.9 2e2:1e71.20.14 15b:1e71,0.24.2 15a:1e71.20.8,0.24.2 1e65:1e71,0.24.2,0.2e.2 1e64:1e71.20.8,0.24.2,0.2e.2 15d:1e71,0.27.2 15c:1e71.20.8,0.27.2 161:1e71,0.28.2 160:1e71.20.8,0.28.2 1e67:1e71,0.28.2,0.2e.2 1e66:1e71.20.8,0.28.2,0.2e.2 1e61:1e71,0.2e.2 1e60:1e71.20.8,0.2e.2 15f:1e71,0.30.2 15e:1e71.20.8,0.30.2 1e63:1e71,0.42.2 1e62:1e71.20.8,0.42.2 1e69:1e71,0.42.2,0.2e.2 1e68:1e71.20.8,0.42.2,0.2e.2 219:1e71,0.45.2 218:1e71.20.8,0.45.2 17f:1e71.20.4,0.111.4 1e9b:1e71.20.4,0.111.4,0.2e.2 2120:1e71.20.14,1daa.20.14 df:1e71.20.4,0.110.4,1e71.20.4 1e9e:1e71.20.a,0.110.4,1e71.20.a fb06:1e71.20.4,1e95.20.4 fb05:1e71.20.4,0.111.4,1e95.20.4 282:1e78 23f:1e7c 1e9c:1e80 1e9d:1e81 283:1e82 1a9:1e82.20.8 1aa:1e88 285:1e8c 286:1e91 74:1e95 ff54:1e95.20.3 36d:1e95.20.4 54:1e95.20.8 ff34:1e95.20.9 165:1e95,0.28.2 164:1e95.20.8,0.28.2 1e97:1e95,0.2b.2 1e6b:1e95,0.2e.2 1e6a:1e95.20.8,0.2e.2 163:1e95,0.30.2 162:1e95.20.8,0.30.2 1e6d:1e95,0.42.2 1e6c:1e95.20.8,0.42.2 21b:1e95,0.45.2 21a:1e95.20.8,0.45.2 1e71:1e95,0.46.2 1e70:1e95.20.8,0.46.2 1e6f:1e95,0.49.2 1e6e:1e95.20.8,0.49.2 2a8:1e95.20.4,1c89.20.4 2121:1e95.20.a,1caa.20.a,1d77.20.a 2122:1e95.20.14,1daa.20.14 1be:1e95.20.4,1e71.20.4 2a6:1e95.20.4,1e71.20.4 2a7:1e95.20.4,1e82.20.4 167:1e9a 166:1e9a.20.8 23e:1e9e.20.8 1ab:1ea0 1ad:1ea4 1ac:1ea4.20.8 288:1ea8 1ae:1ea8.20.8 236:1eac 287:1eb1 75:1eb5 ff55:1eb5.20.3 367:1eb5.20.4 55:1eb5.20.8 ff35:1eb5.20.9 fa:1eb5,0.24.2 da:1eb5.20.8,0.24.2 f9:1eb5,0.25.2 d9:1eb5.20.8,0.25.2 16d:1eb5,0.26.2 16c:1eb5.20.8,0.26.2 fb:1eb5,0.27.2 db:1eb5.20.8,0.27.2 1d4:1eb5,0.28.2 1d3:1eb5.20.8,0.28.2 16f:1eb5,0.29.2 16e:1eb5.20.8,0.29.2 fc:1eb5,0.2b.2 dc:1eb5.20.8,0.2b.2 1d8:1eb5,0.2b.2,0.24.2 1d7:1eb5.20.8,0.2b.2,0.24.2 1dc:1eb5,0.2b.2,0.25.2 1db:1eb5.20.8,0.2b.2,0.25.2 1da:1eb5,0.2b.2,0.28.2 1d9:1eb5.20.8,0.2b.2,0.28.2 1d6:1eb5,0.2b.2,0.32.2 1d5:1eb5.20.8,0.2b.2,0.32.2 171:1eb5,0.2c.2 170:1eb5.20.8,0.2c.2 169:1eb5,0.2d.2 168:1eb5.20.8,0.2d.2 1e79:1eb5,0.2d.2,0.24.2 1e78:1eb5.20.8,0.2d.2,0.24.2 173:1eb5,0.31.2 172:1eb5.20.8,0.31.2 16b:1eb5,0.32.2 16a:1eb5.20.8,0.32.2 1e7b:1eb5,0.32.2,0.2b.2 1e7a:1eb5.20.8,0.32.2,0.2b.2 1ee7:1eb5,0.3b.2 1ee6:1eb5.20.8,0.3b.2 215:1eb5,0.3c.2 214:1eb5.20.8,0.3c.2 217:1eb5,0.3e.2 216:1eb5.20.8,0.3e.2 1b0:1eb5,0.3f.2 1af:1eb5.20.8,0.3f.2 1ee9:1eb5,0.3f.2,0.24.2 1ee8:1eb5.20.8,0.3f.2,0.24.2 1eeb:1eb5,0.3f.2,0.25.2 1eea:1eb5.20.8,0.3f.2,0.25.2 1eef:1eb5,0.3f.2,0.2d.2 1eee:1eb5.20.8,0.3f.2,0.2d.2 1eed:1eb5,0.3f.2,0.3b.2 1eec:1eb5.20.8,0.3f.2,0.3b.2 1ef1:1eb5,0.3f.2,0.42.2 1ef0:1eb5.20.8,0.3f.2,0.42.2 1ee5:1eb5,0.42.2 1ee4:1eb5.20.8,0.42.2 1e73:1eb5,0.43.2 1e72:1eb5.20.8,0.43.2 1e77:1eb5,0.46.2 1e76:1eb5.20.8,0.46.2 1e75:1eb5,0.48.2 1e74:1eb5.20.8,0.48.2 289:1ec0 244:1ec0.20.8 265:1ec8 2ae:1ecc 2af:1ed0 26f:1ed4 19c:1ed4.20.8 270:1eda 28a:1ede 1b1:1ede.20.8 76:1ee3 ff56:1ee3.20.3 36e:1ee3.20.4 2174:1ee3.20.4 56:1ee3.20.8 ff36:1ee3.20.9 2164:1ee3.20.a 1e7d:1ee3,0.2d.2 1e7c:1ee3.20.8,0.2d.2 1e7f:1ee3,0.42.2 1e7e:1ee3.20.8,0.42.2 2175:1ee3.20.4,1d32.20.4 2165:1ee3.20.a,1d32.20.a 2176:1ee3.20.4,1d32.20.4,1d32.20.4 2166:1ee3.20.a,1d32.20.a,1d32.20.a 2177:1ee3.20.4,1d32.20.4,1d32.20.4,1d32.20.4 2167:1ee3.20.a,1d32.20.a,1d32.20.a,1d32.20.a 28b:1eea 1b2:1eea.20.8 1efd:1ef0 1efc:1ef0.20.8 28c:1ef1 245:1ef1.20.8 77:1ef5 ff57:1ef5.20.3 57:1ef5.20.8 ff37:1ef5.20.9 2b7:1ef5.20.14 1e83:1ef5,0.24.2 1e82:1ef5.20.8,0.24.2 1e81:1ef5,0.25.2 1e80:1ef5.20.8,0.25.2 175:1ef5,0.27.2 174:1ef5.20.8,0.27.2 1e98:1ef5,0.29.2 1e85:1ef5,0.2b.2 1e84:1ef5.20.8,0.2b.2 1e87:1ef5,0.2e.2 1e86:1ef5.20.8,0.2e.2 1e89:1ef5,0.42.2 1e88:1ef5.20.8,0.42.2 28d:1efb 78:1eff ff58:1eff.20.3 36f:1eff.20.4 2179:1eff.20.4 58:1eff.20.8 ff38:1eff.20.9 2169:1eff.20.a 2e3:1eff.20.14 1e8d:1eff,0.2b.2 1e8c:1eff.20.8,0.2b.2 1e8b:1eff,0.2e.2 1e8a:1eff.20.8,0.2e.2 217a:1eff.20.4,1d32.20.4 216a:1eff.20.a,1d32.20.a 217b:1eff.20.4,1d32.20.4,1d32.20.4 216b:1eff.20.a,1d32.20.a,1d32.20.a 79:1f0b ff59:1f0b.20.3 59:1f0b.20.8 ff39:1f0b.20.9 2b8:1f0b.20.14 fd:1f0b,0.24.2 dd:1f0b.20.8,0.24.2 1ef3:1f0b,0.25.2 1ef2:1f0b.20.8,0.25.2 177:1f0b,0.27.2 176:1f0b.20.8,0.27.2 1e99:1f0b,0.29.2 ff:1f0b,0.2b.2 178:1f0b.20.8,0.2b.2 1ef9:1f0b,0.2d.2 1ef8:1f0b.20.8,0.2d.2 1e8f:1f0b,0.2e.2 1e8e:1f0b.20.8,0.2e.2 233:1f0b,0.32.2 232:1f0b.20.8,0.32.2 1ef7:1f0b,0.3b.2 1ef6:1f0b.20.8,0.3b.2 1ef5:1f0b,0.42.2 1ef4:1f0b.20.8,0.42.2 28f:1f0f 24f:1f13 24e:1f13.20.8 1b4:1f17 1b3:1f17.20.8 1eff:1f1b 1efe:1f1b.20.8 21d:1f1d 21c:1f1d.20.8 7a:1f21 ff5a:1f21.20.3 5a:1f21.20.8 ff3a:1f21.20.9 2124:1f21.20.b 2128:1f21.20.b 17a:1f21,0.24.2 179:1f21.20.8,0.24.2 1e91:1f21,0.27.2 1e90:1f21.20.8,0.27.2 17e:1f21,0.28.2 17d:1f21.20.8,0.28.2 17c:1f21,0.2e.2 17b:1f21.20.8,0.2e.2 1e93:1f21,0.42.2 1e92:1f21.20.8,0.42.2 1e95:1f21,0.49.2 1e94:1f21.20.8,0.49.2 18d:1f21.20.4,1ef5.20.4 1b6:1f26 1b5:1f26.20.8 225:1f2c 224:1f2c.20.8 290:1f30 291:1f34 240:1f38 292:1f3e 1b7:1f3e.20.8 1ef:1f3e,0.28.2 1ee:1f3e.20.8,0.28.2 1b9:1f43 1b8:1f43.20.8 1ba:1f48 293:1f4c fe:1f50 de:1f50.20.8 1bf:1f56 1f7:1f56.20.8 1bb:1f62 1a8:1f69 1a7:1f69.20.8 1bd:1f6d 1bc:1f6d.20.8 185:1f71 184:1f71.20.8 294:1f75 242:1f79 241:1f79.20.8 2c0:1f7d 2bc:1f7e 149:1f7e.20.4,1db9.20.4 2ee:1f7f 2be:1f80 295:1f84 2e4:1f84.20.14 2bf:1f88 2c1:1f89 2a1:1f8d 2a2:1f91 296:1f95 1c0:1f99 1c1:1f9d 1c2:1fa1 1c3:1fa5 297:1fa9 298:1fad 2ac:1fb1 2ad:1fb5 3b1:1fb9 391:1fb9.20.8 1f00:1fb9,0.22.2 1f08:1fb9.20.8,0.22.2 1f04:1fb9,0.22.2,0.24.2 1f0c:1fb9.20.8,0.22.2,0.24.2 1f84:1fb9,0.22.2,0.24.2,0.4c.2 1f8c:1fb9.20.8,0.22.2,0.24.2,0.4c.2 1f02:1fb9,0.22.2,0.25.2 1f0a:1fb9.20.8,0.22.2,0.25.2 1f82:1fb9,0.22.2,0.25.2,0.4c.2 1f8a:1fb9.20.8,0.22.2,0.25.2,0.4c.2 1f06:1fb9,0.22.2,0.2a.2 1f0e:1fb9.20.8,0.22.2,0.2a.2 1f86:1fb9,0.22.2,0.2a.2,0.4c.2 1f8e:1fb9.20.8,0.22.2,0.2a.2,0.4c.2 1f80:1fb9,0.22.2,0.4c.2 1f88:1fb9.20.8,0.22.2,0.4c.2 1f01:1fb9,0.23.2 1f09:1fb9.20.8,0.23.2 1f05:1fb9,0.23.2,0.24.2 1f0d:1fb9.20.8,0.23.2,0.24.2 1f85:1fb9,0.23.2,0.24.2,0.4c.2 1f8d:1fb9.20.8,0.23.2,0.24.2,0.4c.2 1f03:1fb9,0.23.2,0.25.2 1f0b:1fb9.20.8,0.23.2,0.25.2 1f83:1fb9,0.23.2,0.25.2,0.4c.2 1f8b:1fb9.20.8,0.23.2,0.25.2,0.4c.2 1f07:1fb9,0.23.2,0.2a.2 1f0f:1fb9.20.8,0.23.2,0.2a.2 1f87:1fb9,0.23.2,0.2a.2,0.4c.2 1f8f:1fb9.20.8,0.23.2,0.2a.2,0.4c.2 1f81:1fb9,0.23.2,0.4c.2 1f89:1fb9.20.8,0.23.2,0.4c.2 3ac:1fb9,0.24.2 1f71:1fb9,0.24.2 386:1fb9.20.8,0.24.2 1fbb:1fb9.20.8,0.24.2 1fb4:1fb9,0.24.2,0.4c.2 1f70:1fb9,0.25.2 1fba:1fb9.20.8,0.25.2 1fb2:1fb9,0.25.2,0.4c.2 1fb0:1fb9,0.26.2 1fb8:1fb9.20.8,0.26.2 1fb6:1fb9,0.2a.2 1fb7:1fb9,0.2a.2,0.4c.2 1fb1:1fb9,0.32.2 1fb9:1fb9.20.8,0.32.2 1fb3:1fb9,0.4c.2 1fbc:1fb9.20.8,0.4c.2 3b2:1fba 3d0:1fba.20.4 392:1fba.20.8 3b3:1fbb 213d:1fbb.20.5 393:1fbb.20.8 213e:1fbb.20.b 3b4:1fbd 394:1fbd.20.8 3b5:1fbe 3f5:1fbe.20.4 395:1fbe.20.8 1f10:1fbe,0.22.2 1f18:1fbe.20.8,0.22.2 1f14:1fbe,0.22.2,0.24.2 1f1c:1fbe.20.8,0.22.2,0.24.2 1f12:1fbe,0.22.2,0.25.2 1f1a:1fbe.20.8,0.22.2,0.25.2 1f11:1fbe,0.23.2 1f19:1fbe.20.8,0.23.2 1f15:1fbe,0.23.2,0.24.2 1f1d:1fbe.20.8,0.23.2,0.24.2 1f13:1fbe,0.23.2,0.25.2 1f1b:1fbe.20.8,0.23.2,0.25.2 3ad:1fbe,0.24.2 1f73:1fbe,0.24.2 388:1fbe.20.8,0.24.2 1fc9:1fbe.20.8,0.24.2 1f72:1fbe,0.25.2 1fc8:1fbe.20.8,0.25.2 3dd:1fbf 3dc:1fbf.20.8 377:1fc0 376:1fc0.20.8 3db:1fc1 3da:1fc1.20.8 3b6:1fc2 396:1fc2.20.8 371:1fc3 370:1fc3.20.8 3b7:1fc4 397:1fc4.20.8 1f20:1fc4,0.22.2 1f28:1fc4.20.8,0.22.2 1f24:1fc4,0.22.2,0.24.2 1f2c:1fc4.20.8,0.22.2,0.24.2 1f94:1fc4,0.22.2,0.24.2,0.4c.2 1f9c:1fc4.20.8,0.22.2,0.24.2,0.4c.2 1f22:1fc4,0.22.2,0.25.2 1f2a:1fc4.20.8,0.22.2,0.25.2 1f92:1fc4,0.22.2,0.25.2,0.4c.2 1f9a:1fc4.20.8,0.22.2,0.25.2,0.4c.2 1f26:1fc4,0.22.2,0.2a.2 1f2e:1fc4.20.8,0.22.2,0.2a.2 1f96:1fc4,0.22.2,0.2a.2,0.4c.2 1f9e:1fc4.20.8,0.22.2,0.2a.2,0.4c.2 1f90:1fc4,0.22.2,0.4c.2 1f98:1fc4.20.8,0.22.2,0.4c.2 1f21:1fc4,0.23.2 1f29:1fc4.20.8,0.23.2 1f25:1fc4,0.23.2,0.24.2 1f2d:1fc4.20.8,0.23.2,0.24.2 1f95:1fc4,0.23.2,0.24.2,0.4c.2 1f9d:1fc4.20.8,0.23.2,0.24.2,0.4c.2 1f23:1fc4,0.23.2,0.25.2 1f2b:1fc4.20.8,0.23.2,0.25.2 1f93:1fc4,0.23.2,0.25.2,0.4c.2 1f9b:1fc4.20.8,0.23.2,0.25.2,0.4c.2 1f27:1fc4,0.23.2,0.2a.2 1f2f:1fc4.20.8,0.23.2,0.2a.2 1f97:1fc4,0.23.2,0.2a.2,0.4c.2 1f9f:1fc4.20.8,0.23.2,0.2a.2,0.4c.2 1f91:1fc4,0.23.2,0.4c.2 1f99:1fc4.20.8,0.23.2,0.4c.2 3ae:1fc4,0.24.2 1f75:1fc4,0.24.2 389:1fc4.20.8,0.24.2 1fcb:1fc4.20.8,0.24.2 1fc4:1fc4,0.24.2,0.4c.2 1f74:1fc4,0.25.2 1fca:1fc4.20.8,0.25.2 1fc2:1fc4,0.25.2,0.4c.2 1fc6:1fc4,0.2a.2 1fc7:1fc4,0.2a.2,0.4c.2 1fc3:1fc4,0.4c.2 1fcc:1fc4.20.8,0.4c.2 3b8:1fc5 3d1:1fc5.20.4 398:1fc5.20.8 3f4:1fc5.20.a 3b9:1fc6 1fbe:1fc6 37a:1fc6.20.4 399:1fc6.20.8 1f30:1fc6,0.22.2 1f38:1fc6.20.8,0.22.2 1f34:1fc6,0.22.2,0.24.2 1f3c:1fc6.20.8,0.22.2,0.24.2 1f32:1fc6,0.22.2,0.25.2 1f3a:1fc6.20.8,0.22.2,0.25.2 1f36:1fc6,0.22.2,0.2a.2 1f3e:1fc6.20.8,0.22.2,0.2a.2 1f31:1fc6,0.23.2 1f39:1fc6.20.8,0.23.2 1f35:1fc6,0.23.2,0.24.2 1f3d:1fc6.20.8,0.23.2,0.24.2 1f33:1fc6,0.23.2,0.25.2 1f3b:1fc6.20.8,0.23.2,0.25.2 1f37:1fc6,0.23.2,0.2a.2 1f3f:1fc6.20.8,0.23.2,0.2a.2 3af:1fc6,0.24.2 1f77:1fc6,0.24.2 38a:1fc6.20.8,0.24.2 1fdb:1fc6.20.8,0.24.2 1f76:1fc6,0.25.2 1fda:1fc6.20.8,0.25.2 1fd0:1fc6,0.26.2 1fd8:1fc6.20.8,0.26.2 1fd6:1fc6,0.2a.2 3ca:1fc6,0.2b.2 3aa:1fc6.20.8,0.2b.2 390:1fc6,0.2b.2,0.24.2 1fd3:1fc6,0.2b.2,0.24.2 1fd2:1fc6,0.2b.2,0.25.2 1fd7:1fc6,0.2b.2,0.2a.2 1fd1:1fc6,0.32.2 1fd9:1fc6.20.8,0.32.2 3f3:1fc7 37f:1fc7.20.8 3ba:1fc8 3f0:1fc8.20.4 39a:1fc8.20.8 3d7:1fc8.20.4,1fb9.20.4,1fc6.20.4 3cf:1fc8.20.a,1fb9.20.4,1fc6.20.4 3bb:1fc9 39b:1fc9.20.8 3bc:1fcb b5:1fcb.20.4 39c:1fcb.20.8 3bd:1fcc 39d:1fcc.20.8 3be:1fcd 39e:1fcd.20.8 3bf:1fce 39f:1fce.20.8 1f40:1fce,0.22.2 1f48:1fce.20.8,0.22.2 1f44:1fce,0.22.2,0.24.2 1f4c:1fce.20.8,0.22.2,0.24.2 1f42:1fce,0.22.2,0.25.2 1f4a:1fce.20.8,0.22.2,0.25.2 1f41:1fce,0.23.2 1f49:1fce.20.8,0.23.2 1f45:1fce,0.23.2,0.24.2 1f4d:1fce.20.8,0.23.2,0.24.2 1f43:1fce,0.23.2,0.25.2 1f4b:1fce.20.8,0.23.2,0.25.2 3cc:1fce,0.24.2 1f79:1fce,0.24.2 38c:1fce.20.8,0.24.2 1ff9:1fce.20.8,0.24.2 1f78:1fce,0.25.2 1ff8:1fce.20.8,0.25.2 3c0:1fcf 3d6:1fcf.20.4 213c:1fcf.20.5 3a0:1fcf.20.8 213f:1fcf.20.b 3fb:1fd1 3fa:1fd1.20.8 3df:1fd2 3de:1fd2.20.8 3d9:1fd3 3d8:1fd3.20.8 3c1:1fd4 3f1:1fd4.20.4 3a1:1fd4.20.8 1fe4:1fd4,0.22.2 1fe5:1fd4,0.23.2 1fec:1fd4.20.8,0.23.2 3fc:1fd6 3c3:1fd7 3f2:1fd7.20.4 3a3:1fd7.20.8 3f9:1fd7.20.a 3c2:1fd7.20.19 37c:1fd8 3fe:1fd8.20.8 37b:1fd9 3fd:1fd9.20.8 37d:1fda 3ff:1fda.20.8 3c4:1fdb 3a4:1fdb.20.8 3c5:1fdc 3a5:1fdc.20.8 3d2:1fdc.20.a 1f50:1fdc,0.22.2 1f54:1fdc,0.22.2,0.24.2 1f52:1fdc,0.22.2,0.25.2 1f56:1fdc,0.22.2,0.2a.2 1f51:1fdc,0.23.2 1f59:1fdc.20.8,0.23.2 1f55:1fdc,0.23.2,0.24.2 1f5d:1fdc.20.8,0.23.2,0.24.2 1f53:1fdc,0.23.2,0.25.2 1f5b:1fdc.20.8,0.23.2,0.25.2 1f57:1fdc,0.23.2,0.2a.2 1f5f:1fdc.20.8,0.23.2,0.2a.2 3cd:1fdc,0.24.2 1f7b:1fdc,0.24.2 38e:1fdc.20.8,0.24.2 1feb:1fdc.20.8,0.24.2 3d3:1fdc.20.a,0.24.2 1f7a:1fdc,0.25.2 1fea:1fdc.20.8,0.25.2 1fe0:1fdc,0.26.2 1fe8:1fdc.20.8,0.26.2 1fe6:1fdc,0.2a.2 3cb:1fdc,0.2b.2 3ab:1fdc.20.8,0.2b.2 3d4:1fdc.20.a,0.2b.2 3b0:1fdc,0.2b.2,0.24.2 1fe3:1fdc,0.2b.2,0.24.2 1fe2:1fdc,0.2b.2,0.25.2 1fe7:1fdc,0.2b.2,0.2a.2 1fe1:1fdc,0.32.2 1fe9:1fdc.20.8,0.32.2 3c6:1fdd 3d5:1fdd.20.4 3a6:1fdd.20.8 3c7:1fde 3a7:1fde.20.8 3c8:1fdf 3a8:1fdf.20.8 3c9:1fe1 3a9:1fe1.20.8 2126:1fe1.20.8 1f60:1fe1,0.22.2 1f68:1fe1.20.8,0.22.2 1f64:1fe1,0.22.2,0.24.2 1f6c:1fe1.20.8,0.22.2,0.24.2 1fa4:1fe1,0.22.2,0.24.2,0.4c.2 1fac:1fe1.20.8,0.22.2,0.24.2,0.4c.2 1f62:1fe1,0.22.2,0.25.2 1f6a:1fe1.20.8,0.22.2,0.25.2 1fa2:1fe1,0.22.2,0.25.2,0.4c.2 1faa:1fe1.20.8,0.22.2,0.25.2,0.4c.2 1f66:1fe1,0.22.2,0.2a.2 1f6e:1fe1.20.8,0.22.2,0.2a.2 1fa6:1fe1,0.22.2,0.2a.2,0.4c.2 1fae:1fe1.20.8,0.22.2,0.2a.2,0.4c.2 1fa0:1fe1,0.22.2,0.4c.2 1fa8:1fe1.20.8,0.22.2,0.4c.2 1f61:1fe1,0.23.2 1f69:1fe1.20.8,0.23.2 1f65:1fe1,0.23.2,0.24.2 1f6d:1fe1.20.8,0.23.2,0.24.2 1fa5:1fe1,0.23.2,0.24.2,0.4c.2 1fad:1fe1.20.8,0.23.2,0.24.2,0.4c.2 1f63:1fe1,0.23.2,0.25.2 1f6b:1fe1.20.8,0.23.2,0.25.2 1fa3:1fe1,0.23.2,0.25.2,0.4c.2 1fab:1fe1.20.8,0.23.2,0.25.2,0.4c.2 1f67:1fe1,0.23.2,0.2a.2 1f6f:1fe1.20.8,0.23.2,0.2a.2 1fa7:1fe1,0.23.2,0.2a.2,0.4c.2 1faf:1fe1.20.8,0.23.2,0.2a.2,0.4c.2 1fa1:1fe1,0.23.2,0.4c.2 1fa9:1fe1.20.8,0.23.2,0.4c.2 3ce:1fe1,0.24.2 1f7d:1fe1,0.24.2 38f:1fe1.20.8,0.24.2 1ffb:1fe1.20.8,0.24.2 1ff4:1fe1,0.24.2,0.4c.2 1f7c:1fe1,0.25.2 1ffa:1fe1.20.8,0.25.2 1ff2:1fe1,0.25.2,0.4c.2 1ff6:1fe1,0.2a.2 1ff7:1fe1,0.2a.2,0.4c.2 1ff3:1fe1,0.4c.2 1ffc:1fe1.20.8,0.4c.2 3e1:1fe3 3e0:1fe3.20.8 373:1fe4 372:1fe4.20.8 3f8:1fe5 3f7:1fe5.20.8 3e3:2005 3e2:2005.20.8 3e5:200a 3e4:200a.20.8 3e7:200b 3e6:200b.20.8 3e9:200e 3e8:200e.20.8 3eb:2015 3ea:2015.20.8 3ed:2018 3ec:2018.20.8 3ef:201c 3ee:201c.20.8 430:2022 410:2022.20.8 4d1:2022,0.26.2 4d0:2022.20.8,0.26.2 4d3:2022,0.2b.2 4d2:2022.20.8,0.2b.2 4d9:2026 4d8:2026.20.8 4db:2026,0.2b.2 4da:2026.20.8,0.2b.2 4d5:202a 4d4:202a.20.8 431:202e 411:202e.20.8 432:2032 412:2032.20.8 433:2036 413:2036.20.8 453:2036,0.24.2 403:2036.20.8,0.24.2 491:2036.20.4,0.111.4 490:2036.20.a,0.111.4 493:203a 492:203a.20.8 4fb:203e 4fa:203e.20.8 495:2042 494:2042.20.8 4f7:2046 4f6:2046.20.8 434:204a 414:204a.20.8 501:204e 500:204e.20.8 452:2050 402:2050.20.8 503:2055 502:2055.20.8 499:2056 498:2056.20.8 435:205a 415:205a.20.8 450:205a,0.25.2 400:205a.20.8,0.25.2 4d7:205a,0.26.2 4d6:205a.20.8,0.26.2 451:205a,0.2b.2 401:205a.20.8,0.2b.2 454:205e 404:205e.20.8 436:2062 416:2062.20.8 4c2:2062,0.26.2 4c1:2062.20.8,0.26.2 4dd:2062,0.2b.2 4dc:2062.20.8,0.2b.2 52b:2066 52a:2066.20.8 497:2068 496:2068.20.8 437:206c 417:206c.20.8 4df:206c,0.2b.2 4de:206c.20.8,0.2b.2 505:2071 504:2071.20.8 511:2072 510:2072.20.8 455:2074 405:2074.20.8 4e1:2079 4e0:2079.20.8 507:207e 506:207e.20.8 438:2080 418:2080.20.8 45d:2080,0.25.2 40d:2080.20.8,0.25.2 4e5:2080,0.2b.2 4e4:2080.20.8,0.2b.2 4e3:2080,0.32.2 4e2:2080.20.8,0.32.2 48b:2084 48a:2084.20.8 456:2088 406:2088.20.8 457:2088,0.2b.2 407:2088.20.8,0.2b.2 439:208d 438+306:208d 419:208d.20.8 418+306:208d.20.8 458:2091 408:2091.20.8 43a:2096 41a:2096.20.8 45c:2096,0.24.2 40c:2096.20.8,0.24.2 49b:209a 49a:209a.20.8 4c4:209e 4c3:209e.20.8 4a1:20a2 4a0:20a2.20.8 49f:20a6 49e:20a6.20.8 49d:20aa 49c:20aa.20.8 51f:20ae 51e:20ae.20.8 51b:20af 51a:20af.20.8 43b:20b0 41b:20b0.20.8 4c6:20b5 4c5:20b5.20.8 52f:20b9 52e:20b9.20.8 513:20ba 512:20ba.20.8 521:20bb 520:20bb.20.8 459:20bc 409:20bc.20.8 509:20c1 508:20c1.20.8 515:20c2 514:20c2.20.8 43c:20c3 41c:20c3.20.8 4ce:20c7 4cd:20c7.20.8 43d:20cc 41d:20cc.20.8 529:20d0 528:20d0.20.8 4ca:20d1 4c9:20d1.20.8 4a3:20d5 4a2:20d5.20.8 4c8:20d9 4c7:20d9.20.8 523:20dd 522:20dd.20.8 4a5:20de 4a4:20de.20.8 45a:20e2 40a:20e2.20.8 50b:20e6 50a:20e6.20.8 43e:20e7 41e:20e7.20.8 4e7:20e7,0.2b.2 4e6:20e7.20.8,0.2b.2 4e9:20eb 4e8:20eb.20.8 4eb:20eb,0.2b.2 4ea:20eb.20.8,0.2b.2 43f:20ef 41f:20ef.20.8 525:20f3 524:20f3.20.8 4a7:20f4 4a6:20f4.20.8 481:20f8 480:20f8.20.8 440:20fc 420:20fc.20.8 48f:2100 48e:2100.20.8 517:2104 516:2104.20.8 441:2105 421:2105.20.8 50d:2109 50c:2109.20.8 4ab:210a 4aa:210a.20.8 442:210e 422:210e.20.8 50f:2113 50e:2113.20.8 4ad:2114 4ac:2114.20.8 45b:2119 40b:2119.20.8 443:211d 423:211d.20.8 45e:211d,0.26.2 40e:211d.20.8,0.26.2 4f1:211d,0.2b.2 4f0:211d.20.8,0.2b.2 4f3:211d,0.2c.2 4f2:211d.20.8,0.2c.2 4ef:211d,0.32.2 4ee:211d.20.8,0.32.2 4af:2121 4ae:2121.20.8 4b1:2125 4b0:2125.20.8 479:212a 478:212a.20.8 444:212e 424:212e.20.8 445:2132 425:2132.20.8 4fd:2136 4fc:2136.20.8 4ff:213a 4fe:213a.20.8 4b3:213e 4b2:213e.20.8 4bb:2142 4ba:2142.20.8 527:2146 526:2146.20.8 461:2148 460:2148.20.8 47f:214c 47e:214c.20.8 47d:2151 47c:2151.20.8 47b:2155 47a:2155.20.8 446:2159 426:2159.20.8 4b5:215f 4b4:215f.20.8 447:2164 427:2164.20.8 4f5:2164,0.2b.2 4f4:2164.20.8,0.2b.2 52d:2168 52c:2168.20.8 4b7:216a 4b6:216a.20.8 4cc:216e 4cb:216e.20.8 4b9:2172 4b8:2172.20.8 4bd:2177 4bc:2177.20.8 4bf:217b 4be:217b.20.8 45f:217f 40f:217f.20.8 448:2183 428:2183.20.8 449:2188 429:2188.20.8 44a:218f 42a:218f.20.8 44b:2194 42b:2194.20.8 4f9:2194,0.2b.2 4f8:2194.20.8,0.2b.2 44c:2198 42c:2198.20.8 48d:219c 48c:219c.20.8 463:21a0 462:21a0.20.8 44d:21a5 42d:21a5.20.8 4ed:21a5,0.2b.2 4ec:21a5.20.8,0.2b.2 44e:21a9 42e:21a9.20.8 44f:21af 42f:21af.20.8 519:21b3 518:21b3.20.8 465:21b4 464:21b4.20.8 467:21b8 466:21b8.20.8 46b:21bd 46a:21bd.20.8 469:21c2 468:21c2.20.8 46d:21c7 46c:21c7.20.8 46f:21cb 46e:21cb.20.8 471:21cf 470:21cf.20.8 473:21d3 472:21d3.20.8 475:21d7 474:21d7.20.8 477:21d7,0.3c.2 476:21d7.20.8,0.3c.2 4a9:21dc 4a8:21dc.20.8 51d:21e0 51c:21e0.20.8 4cf:21e1 4c0:21e1.20.8 2135:22b7.20.4 2136:22b8.20.4 2137:22b9.20.4 2138:22ba.20.4";
12
+ export const UCA_400 = "0: 1: 2: 3: 4: 5: 6: 7: 8: e: f: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 1a: 1b: 1c: 1d: 1e: 1f: 7f: 80: 81: 82: 83: 84: 86: 87: 88: 89: 8a: 8b: 8c: 8d: 8e: 8f: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 9a: 9b: 9c: 9d: 9e: 9f: 200b: 200c: 200d: 200e: 200f: 202a: 202b: 202c: 202d: 202e: 2060: 2061: 2062: 2063: 206a: 206b: 206c: 206d: 206e: 206f: 9:201 a:202 b:203 c:204 d:205 20:209 21:251 22:27e 23:2d2 25:2d3 26:2cf 27:277 28:288 29:289 2a:2c8 2b:428 2c:22f 2d:221 2e:25d 2f:2cc 3a:23d 3b:23a 3c:42c 3d:42d 3e:42e 3f:255 40:2c7 5b:28a 5c:2ce 5d:28b 5e:20f 5f:21b 60:20c 7b:28c 7c:430 7d:28d 7e:433 85:206 a0:209 a1:252 a6:431 a7:2c2 a8:214 a9:2c5 ab:286 ac:42f ad:220 ae:2c6 af:210 b0:34a b1:429 b4:20d b6:2c3 b7:267 b8:219 bb:287 bf:256 d7:42b f7:42a 2b9:317 2ba:319 2c2:31a 2c3:31b 2c4:31c 2c5:31d 2c6:31e 2c7:31f 2c8:320 2c9:321 2ca:322 2cb:323 2cc:324 2cd:325 2ce:326 2cf:327 2d2:328 2d3:329 2d4:32a 2d5:32b 2d6:32c 2d7:32d 2d8:212 2d9:213 2da:215 2db:21a 2dc:20e 2dd:216 2de:32e 2df:32f 2e5:330 2e6:331 2e7:332 2e8:333 2e9:334 2ea:335 2eb:336 2ec:337 2ed:338 2ef:339 2f0:33a 2f1:33b 2f2:33c 2f3:33d 2f4:33e 2f5:33f 2f6:340 2f7:341 2f8:342 2f9:343 2fa:344 2fb:345 2fc:346 2fd:347 2fe:348 2ff:349 34f: 374:317 375:318 37e:23a 384:20d 385:214 387:267 3f6:423 482:34b 488: 489: 1fbd:217 1fbf:217 1fc0:21d 1fc1:214 1fcd:217 1fce:217 1fcf:217 1fdd:218 1fde:218 1fdf:218 1fed:214 1fee:214 1fef:20c 1ffd:20d 1ffe:218 2000:209 2001:209 2002:209 2003:209 2004:209 2005:209 2006:209 2007:209 2008:209 2009:209 200a:209 2010:225 2011:225 2012:226 2013:227 2014:228 2015:229 2016:432 2017:21c 2018:278 2019:279 201a:27a 201b:27b 201c:27f 201d:280 201e:281 201f:282 2020:2d8 2021:2d9 2022:2da 2023:2db 2024:25d 2025:25d,25d 2026:25d,25d,25d 2027:2dc 2028:207 2029:208 202f:209 2030:2d5 2031:2d6 2032:2e0 2033:2e0,2e0 2034:2e0,2e0,2e0 2035:2e1 2036:2e1,2e1 2037:2e1,2e1,2e1 2038:2e4 2039:27c 203a:27d 203b:2e5 203c:251,251 203d:25c 203e:211 203f:2e6 2040:2e8 2041:2ea 2042:2eb 2043:2dd 2044:2cd 2045:294 2046:295 2047:255,255 2048:255,251 2049:251,255 204a:2d1 204b:2c4 204c:2de 204d:2df 204e:2c9 204f:23c 2050:2e9 2051:2ca 2052:2d7 2053:22a 2054:2e7 2057:2e0,2e0,2e0,2e0 205f:209 2104:39b 2108:39c 2114:39d 2117:39e 2118:39f 211e:3a0 211f:3a1 2123:3a2 2125:3a3 2127:3a4 2129:3a5 212e:3a6 2132:3a7 213a:3a8 2140:427 2141:3a9 2142:3aa 2143:3ab 2144:3ac 214a:3ad 214b:2d0 2180:dd7 2181:dd8 2182:dd9 2183:dda ff01:251 ff02:27e ff03:2d2 ff05:2d3 ff06:2cf ff07:277 ff08:288 ff09:289 ff0a:2c8 ff0b:428 ff0c:22f ff0d:221 ff0e:25d ff0f:2cc ff1a:23d ff1b:23a ff1c:42c ff1d:42d ff1e:42e ff1f:255 ff20:2c7 ff3b:28a ff3c:2ce ff3d:28b ff3e:20f ff3f:21b ff40:20c ff5b:28c ff5c:430 ff5d:28d ff5e:433 332: 313: 343: 314: 301: 341: 300: 340: 306: 302: 30c: 30a: 342: 308: 344: 30b: 303: 307: 338: 327: 328: 304: 305: 309: 30d: 30e: 30f: 310: 311: 312: 315: 316: 317: 318: 319: 31a: 31b: 31c: 31d: 31e: 31f: 320: 321: 322: 323: 324: 325: 326: 329: 32a: 32b: 32c: 32d: 32e: 32f: 330: 331: 333: 334: 335: 336: 337: 339: 33a: 33b: 33c: 33d: 33e: 33f: 345: 346: 347: 348: 349: 34a: 34b: 34c: 34d: 34e: 350: 351: 352: 353: 354: 355: 356: 357: 35d: 35e: 35f: 360: 361: 362: 483: 484: 485: 486: 2d0:e01 2d1:e02 a4:e0d a2:e0e 24:e0f ff04:e0f a3:e10 a5:e11 20a0:e18 20a1:e19 20a2:e1a 20a3:e1b 20a4:e1c 20a5:e1d 20a6:e1e 20a7:e1f 20a9:e20 20aa:e21 20ab:e22 20ac:e23 20ad:e24 20ae:e25 20af:e26 20b0:e27 20b1:e28 30:e29 ff10:e29 31:e2a ff11:e2a b9:e2a 215f:e2a,2cd bd:e2a,2cd,e2b 2153:e2a,2cd,e2c bc:e2a,2cd,e2d 2155:e2a,2cd,e2e 2159:e2a,2cd,e2f 215b:e2a,2cd,e31 32:e2b ff12:e2b b2:e2b 2154:e2b,2cd,e2c 2156:e2b,2cd,e2e 33:e2c ff13:e2c b3:e2c be:e2c,2cd,e2d 2157:e2c,2cd,e2e 215c:e2c,2cd,e31 34:e2d ff14:e2d 2158:e2d,2cd,e2e 35:e2e ff15:e2e 215a:e2e,2cd,e2f 215d:e2e,2cd,e31 36:e2f ff16:e2f 37:e30 ff17:e30 215e:e30,2cd,e31 38:e31 ff18:e31 39:e32 ff19:e32 61:e33 ff41:e33 363:e33 41:e33 ff21:e33 aa:e33 e1:e33 c1:e33 e0:e33 c0:e33 103:e33 102:e33 1eaf:e33 1eae:e33 1eb1:e33 1eb0:e33 1eb5:e33 1eb4:e33 1eb3:e33 1eb2:e33 e2:e33 c2:e33 1ea5:e33 1ea4:e33 1ea7:e33 1ea6:e33 1eab:e33 1eaa:e33 1ea9:e33 1ea8:e33 1ce:e33 1cd:e33 e5:e33 c5:e33 212b:e33 1fb:e33 1fa:e33 e4:e33 c4:e33 1df:e33 1de:e33 e3:e33 c3:e33 227:e33 226:e33 1e1:e33 1e0:e33 105:e33 104:e33 101:e33 100:e33 1ea3:e33 1ea2:e33 201:e33 200:e33 203:e33 202:e33 1ea1:e33 1ea0:e33 1eb7:e33 1eb6:e33 1ead:e33 1eac:e33 1e01:e33 1e00:e33 2100:e33,2cc,e60 2101:e33,2cc,fea 1e9a:e33,10b3 e6:e38 c6:e38 1fd:e38 1fc:e38 1e3:e38 1e2:e38 250:e3e 251:e42 252:e46 62:e4a ff42:e4a 42:e4a ff22:e4a 212c:e4a 1e03:e4a 1e02:e4a 1e05:e4a 1e04:e4a 1e07:e4a 1e06:e4a 299:e4e 180:e52 253:e58 181:e58 183:e5c 182:e5c 63:e60 ff43:e60 368:e60 217d:e60 43:e60 ff23:e60 2103:34a,e60 216d:e60 2102:e60 212d:e60 107:e60 106:e60 109:e60 108:e60 10d:e60 10c:e60 10b:e60 10a:e60 e7:e60 c7:e60 1e09:e60 1e08:e60 2105:e60,2cc,f82 2106:e60,2cc,101f 188:e65 187:e65 255:e69 64:e6d ff44:e6d 369:e6d 217e:e6d 2146:e6d 44:e6d ff24:e6d 216e:e6d 2145:e6d 10f:e6d 10e:e6d 1e0b:e6d 1e0a:e6d 1e11:e6d 1e10:e6d 1e0d:e6d 1e0c:e6d 1e13:e6d 1e12:e6d 1e0f:e6d 1e0e:e6d 1f3:e6d,106a 2a3:e6d,106a 1f2:e6d,106a 1f1:e6d,106a 1c6:e6d,106a 1c5:e6d,106a 1c4:e6d,106a 2a5:e6d,107b 2a4:e6d,107f 111:e72 110:e72 256:e76 189:e76 257:e7a 18a:e7a 18c:e7e 18b:e7e 221:e82 f0:e86 d0:e86 65:e8b ff45:e8b 364:e8b 212f:e8b 2147:e8b 45:e8b ff25:e8b 2130:e8b e9:e8b c9:e8b e8:e8b c8:e8b 115:e8b 114:e8b ea:e8b ca:e8b 1ebf:e8b 1ebe:e8b 1ec1:e8b 1ec0:e8b 1ec5:e8b 1ec4:e8b 1ec3:e8b 1ec2:e8b 11b:e8b 11a:e8b eb:e8b cb:e8b 1ebd:e8b 1ebc:e8b 117:e8b 116:e8b 229:e8b 228:e8b 1e1d:e8b 1e1c:e8b 119:e8b 118:e8b 113:e8b 112:e8b 1e17:e8b 1e16:e8b 1e15:e8b 1e14:e8b 1ebb:e8b 1eba:e8b 205:e8b 204:e8b 207:e8b 206:e8b 1eb9:e8b 1eb8:e8b 1ec7:e8b 1ec6:e8b 1e19:e8b 1e18:e8b 1e1b:e8b 1e1a:e8b 1dd:e90 18e:e90 259:e94 18f:e94 25b:e98 190:e98 2107:e98 258:e9c 25a:ea0 25c:ea4 25d:ea9 25e:ead 29a:eb1 264:eb5 66:eb9 ff46:eb9 46:eb9 ff26:eb9 2109:34a,eb9 2131:eb9 1e1f:eb9 1e1e:eb9 213b:eb9,e33,105a fb00:eb9,eb9 fb03:eb9,eb9,efb fb04:eb9,eb9,f2e fb01:eb9,efb fb02:eb9,f2e 2a9:eb9,f7e 192:ebd 191:ebd 67:ec1 ff47:ec1 210a:ec1 47:ec1 ff27:ec1 1f5:ec1 1f4:ec1 11f:ec1 11e:ec1 11d:ec1 11c:ec1 1e7:ec1 1e6:ec1 121:ec1 120:ec1 123:ec1 122:ec1 1e21:ec1 1e20:ec1 261:ec5 262:ec9 1e5:ecd 1e4:ecd 260:ed1 193:ed1 29b:ed5 263:ed9 194:ed9 2e0:ed9 1a3:edd 1a2:edd 68:ee1 ff48:ee1 36a:ee1 210e:ee1 48:ee1 ff28:ee1 210b:ee1 210c:ee1 210d:ee1 2b0:ee1 125:ee1 124:ee1 21f:ee1 21e:ee1 1e27:ee1 1e26:ee1 1e23:ee1 1e22:ee1 1e29:ee1 1e28:ee1 1e25:ee1 1e24:ee1 1e2b:ee1 1e2a:ee1 1e96:ee1 29c:ee5 195:ee9 1f6:ee9 127:eed 210f:eed 126:eed 266:ef1 2b1:ef1 267:ef5 2bb:ef9 2bd:efa 69:efb ff49:efb 365:efb 2170:efb 2139:efb 2148:efb 49:efb ff29:efb 2160:efb 2110:efb 2111:efb ed:efb cd:efb ec:efb cc:efb 12d:efb 12c:efb ee:efb ce:efb 1d0:efb 1cf:efb ef:efb cf:efb 1e2f:efb 1e2e:efb 129:efb 128:efb 130:efb 12f:efb 12e:efb 12b:efb 12a:efb 1ec9:efb 1ec8:efb 209:efb 208:efb 20b:efb 20a:efb 1ecb:efb 1eca:efb 1e2d:efb 1e2c:efb 2171:efb,efb 2161:efb,efb 2172:efb,efb,efb 2162:efb,efb,efb 133:efb,f10 132:efb,f10 2173:efb,1044 2163:efb,1044 2178:efb,105a 2168:efb,105a 131:eff 26a:f03 268:f08 197:f08 269:f0c 196:f0c 6a:f10 ff4a:f10 2149:f10 4a:f10 ff2a:f10 2b2:f10 135:f10 134:f10 1f0:f10 29d:f15 25f:f19 284:f1d 6b:f21 ff4b:f21 4b:f21 212a:f21 ff2b:f21 1e31:f21 1e30:f21 1e9:f21 1e8:f21 137:f21 136:f21 1e33:f21 1e32:f21 1e35:f21 1e34:f21 199:f26 198:f26 29e:f2a 6c:f2e ff4c:f2e 140:f2e,267 217c:f2e 2113:f2e 4c:f2e ff2c:f2e 13f:f2e,267 216c:f2e 2112:f2e 2e1:f2e 13a:f2e 139:f2e 13e:f2e 13d:f2e 13c:f2e 13b:f2e 1e37:f2e 1e36:f2e 1e39:f2e 1e38:f2e 1e3d:f2e 1e3c:f2e 1e3b:f2e 1e3a:f2e 1c9:f2e,f10 1c8:f2e,f10 1c7:f2e,f10 2aa:f2e,fea 2ab:f2e,106a 29f:f32 142:f36 141:f36 19a:f3b 26b:f3f 26c:f43 26d:f47 234:f4b 26e:f4f 19b:f53 28e:f57 6d:f5b ff4d:f5b 36b:f5b 217f:f5b 4d:f5b ff2d:f5b 216f:f5b 2133:f5b 1e3f:f5b 1e3e:f5b 1e41:f5b 1e40:f5b 1e43:f5b 1e42:f5b 271:f60 6e:f64 ff4e:f64 4e:f64 ff2e:f64 2115:f64 144:f64 143:f64 1f9:f64 1f8:f64 148:f64 147:f64 f1:f64 d1:f64 1e45:f64 1e44:f64 146:f64 145:f64 1e47:f64 1e46:f64 1e4b:f64 1e4a:f64 1e49:f64 1e48:f64 1cc:f64,f10 1cb:f64,f10 1ca:f64,f10 2116:f64,f82 274:f68 272:f6e 19d:f6e 19e:f72 220:f72 273:f76 235:f7a 14b:f7e 14a:f7e 6f:f82 ff4f:f82 366:f82 2134:f82 4f:f82 ff2f:f82 ba:f82 f3:f82 d3:f82 f2:f82 d2:f82 14f:f82 14e:f82 f4:f82 d4:f82 1ed1:f82 1ed0:f82 1ed3:f82 1ed2:f82 1ed7:f82 1ed6:f82 1ed5:f82 1ed4:f82 1d2:f82 1d1:f82 f6:f82 d6:f82 22b:f82 22a:f82 151:f82 150:f82 f5:f82 d5:f82 1e4d:f82 1e4c:f82 1e4f:f82 1e4e:f82 22d:f82 22c:f82 22f:f82 22e:f82 231:f82 230:f82 1eb:f82 1ea:f82 1ed:f82 1ec:f82 14d:f82 14c:f82 1e53:f82 1e52:f82 1e51:f82 1e50:f82 1ecf:f82 1ece:f82 20d:f82 20c:f82 20f:f82 20e:f82 1a1:f82 1a0:f82 1edb:f82 1eda:f82 1edd:f82 1edc:f82 1ee1:f82 1ee0:f82 1edf:f82 1ede:f82 1ee3:f82 1ee2:f82 1ecd:f82 1ecc:f82 1ed9:f82 1ed8:f82 153:f82,e8b 152:f82,e8b 276:f88 f8:f8d d8:f8d 1ff:f8d 1fe:f8d 254:f92 186:f92 275:f9a 19f:f9a 277:f9e 223:fa2 222:fa2 70:fa7 ff50:fa7 50:fa7 ff30:fa7 2119:fa7 1e55:fa7 1e54:fa7 1e57:fa7 1e56:fa7 1a5:fac 1a4:fac 278:fb0 71:fb4 ff51:fb4 51:fb4 ff31:fb4 211a:fb4 2a0:fb8 138:fbc 72:fc0 ff52:fc0 36c:fc0 52:fc0 ff32:fc0 211b:fc0 211c:fc0 211d:fc0 2b3:fc0 155:fc0 154:fc0 159:fc0 158:fc0 1e59:fc0 1e58:fc0 157:fc0 156:fc0 211:fc0 210:fc0 213:fc0 212:fc0 1e5b:fc0 1e5a:fc0 1e5d:fc0 1e5c:fc0 1e5f:fc0 1e5e:fc0 20a8:fc0,fea 280:fc4 1a6:fc4 279:fc9 2b4:fc9 27a:fce 27b:fd2 2b5:fd2 27c:fd6 27d:fda 27e:fde 27f:fe2 281:fe6 2b6:fe6 73:fea ff53:fea 53:fea ff33:fea 2e2:fea 15b:fea 15a:fea 1e65:fea 1e64:fea 15d:fea 15c:fea 161:fea 160:fea 1e67:fea 1e66:fea 1e61:fea 1e60:fea 15f:fea 15e:fea 1e63:fea 1e62:fea 1e69:fea 1e68:fea 219:fea 218:fea 17f:fea 1e9b:fea 2120:fea,f5b df:fea,fea fb06:fea,1002 fb05:fea,1002 282:fee 283:ff2 1a9:ff2 1aa:ff6 285:ffa 286:ffe 74:1002 ff54:1002 36d:1002 54:1002 ff34:1002 165:1002 164:1002 1e97:1002 1e6b:1002 1e6a:1002 163:1002 162:1002 1e6d:1002 1e6c:1002 21b:1002 21a:1002 1e71:1002 1e70:1002 1e6f:1002 1e6e:1002 2a8:1002,e69 2121:1002,e8b,f2e 2122:1002,f5b 1be:1002,fea 2a6:1002,fea 2a7:1002,ff2 167:1007 166:1007 1ab:100b 1ad:100f 1ac:100f 288:1013 1ae:1013 236:1017 287:101b 75:101f ff55:101f 367:101f 55:101f ff35:101f fa:101f da:101f f9:101f d9:101f 16d:101f 16c:101f fb:101f db:101f 1d4:101f 1d3:101f 16f:101f 16e:101f fc:101f dc:101f 1d8:101f 1d7:101f 1dc:101f 1db:101f 1da:101f 1d9:101f 1d6:101f 1d5:101f 171:101f 170:101f 169:101f 168:101f 1e79:101f 1e78:101f 173:101f 172:101f 16b:101f 16a:101f 1e7b:101f 1e7a:101f 1ee7:101f 1ee6:101f 215:101f 214:101f 217:101f 216:101f 1b0:101f 1af:101f 1ee9:101f 1ee8:101f 1eeb:101f 1eea:101f 1eef:101f 1eee:101f 1eed:101f 1eec:101f 1ef1:101f 1ef0:101f 1ee5:101f 1ee4:101f 1e73:101f 1e72:101f 1e77:101f 1e76:101f 1e75:101f 1e74:101f 289:1027 265:102b 2ae:102f 2af:1033 26f:1037 19c:1037 270:103c 28a:1040 1b1:1040 76:1044 ff56:1044 36e:1044 2174:1044 56:1044 ff36:1044 2164:1044 1e7d:1044 1e7c:1044 1e7f:1044 1e7e:1044 2175:1044,efb 2165:1044,efb 2176:1044,efb,efb 2166:1044,efb,efb 2177:1044,efb,efb,efb 2167:1044,efb,efb,efb 28b:1049 1b2:1049 28c:104d 77:1051 ff57:1051 57:1051 ff37:1051 2b7:1051 1e83:1051 1e82:1051 1e81:1051 1e80:1051 175:1051 174:1051 1e98:1051 1e85:1051 1e84:1051 1e87:1051 1e86:1051 1e89:1051 1e88:1051 28d:1056 78:105a ff58:105a 36f:105a 2179:105a 58:105a ff38:105a 2169:105a 2e3:105a 1e8d:105a 1e8c:105a 1e8b:105a 1e8a:105a 217a:105a,efb 216a:105a,efb 217b:105a,efb,efb 216b:105a,efb,efb 79:105e ff59:105e 59:105e ff39:105e 2b8:105e fd:105e dd:105e 1ef3:105e 1ef2:105e 177:105e 176:105e 1e99:105e ff:105e 178:105e 1ef9:105e 1ef8:105e 1e8f:105e 1e8e:105e 233:105e 232:105e 1ef7:105e 1ef6:105e 1ef5:105e 1ef4:105e 28f:1062 1b4:1066 1b3:1066 7a:106a ff5a:106a 5a:106a ff3a:106a 2124:106a 2128:106a 17a:106a 179:106a 1e91:106a 1e90:106a 17e:106a 17d:106a 17c:106a 17b:106a 1e93:106a 1e92:106a 1e95:106a 1e94:106a 18d:106a,1051 1b6:106f 1b5:106f 225:1073 224:1073 290:1077 291:107b 292:107f 1b7:107f 1ef:107f 1ee:107f 1b9:1084 1b8:1084 1ba:1088 293:108c 21d:1090 21c:1090 fe:1094 de:1094 1bf:1098 1f7:1098 1bb:109c 1a8:10a0 1a7:10a0 1bd:10a4 1bc:10a4 185:10a8 184:10a8 294:10ac 2c0:10b0 2bc:10b1 149:10b1,f64 2ee:10b2 2be:10b3 295:10b4 2e4:10b4 2bf:10b8 2c1:10b9 2a1:10bc 2a2:10c0 296:10c4 1c0:10c8 1c1:10cc 1c2:10d0 1c3:10d4 297:10d8 298:10dc 2ac:10e0 2ad:10e4 3b1:10e8 391:10e8 1f00:10e8 1f08:10e8 1f04:10e8 1f0c:10e8 1f84:10e8 1f8c:10e8 1f02:10e8 1f0a:10e8 1f82:10e8 1f8a:10e8 1f06:10e8 1f0e:10e8 1f86:10e8 1f8e:10e8 1f80:10e8 1f88:10e8 1f01:10e8 1f09:10e8 1f05:10e8 1f0d:10e8 1f85:10e8 1f8d:10e8 1f03:10e8 1f0b:10e8 1f83:10e8 1f8b:10e8 1f07:10e8 1f0f:10e8 1f87:10e8 1f8f:10e8 1f81:10e8 1f89:10e8 3ac:10e8 1f71:10e8 386:10e8 1fbb:10e8 1fb4:10e8 1f70:10e8 1fba:10e8 1fb2:10e8 1fb0:10e8 1fb8:10e8 1fb6:10e8 1fb7:10e8 1fb1:10e8 1fb9:10e8 1fb3:10e8 1fbc:10e8 3b2:10e9 3d0:10e9 392:10e9 3b3:10ea 213d:10ea 393:10ea 213e:10ea 3b4:10ec 394:10ec 3b5:10ed 3f5:10ed 395:10ed 1f10:10ed 1f18:10ed 1f14:10ed 1f1c:10ed 1f12:10ed 1f1a:10ed 1f11:10ed 1f19:10ed 1f15:10ed 1f1d:10ed 1f13:10ed 1f1b:10ed 3ad:10ed 1f73:10ed 388:10ed 1fc9:10ed 1f72:10ed 1fc8:10ed 3dd:10ee 3dc:10ee 3db:10ef 3da:10ef 3b6:10f0 396:10f0 3b7:10f1 397:10f1 1f20:10f1 1f28:10f1 1f24:10f1 1f2c:10f1 1f94:10f1 1f9c:10f1 1f22:10f1 1f2a:10f1 1f92:10f1 1f9a:10f1 1f26:10f1 1f2e:10f1 1f96:10f1 1f9e:10f1 1f90:10f1 1f98:10f1 1f21:10f1 1f29:10f1 1f25:10f1 1f2d:10f1 1f95:10f1 1f9d:10f1 1f23:10f1 1f2b:10f1 1f93:10f1 1f9b:10f1 1f27:10f1 1f2f:10f1 1f97:10f1 1f9f:10f1 1f91:10f1 1f99:10f1 3ae:10f1 1f75:10f1 389:10f1 1fcb:10f1 1fc4:10f1 1f74:10f1 1fca:10f1 1fc2:10f1 1fc6:10f1 1fc7:10f1 1fc3:10f1 1fcc:10f1 3b8:10f2 3d1:10f2 398:10f2 3f4:10f2 3b9:10f3 1fbe:10f3 37a:10f3 399:10f3 1f30:10f3 1f38:10f3 1f34:10f3 1f3c:10f3 1f32:10f3 1f3a:10f3 1f36:10f3 1f3e:10f3 1f31:10f3 1f39:10f3 1f35:10f3 1f3d:10f3 1f33:10f3 1f3b:10f3 1f37:10f3 1f3f:10f3 3af:10f3 1f77:10f3 38a:10f3 1fdb:10f3 1f76:10f3 1fda:10f3 1fd0:10f3 1fd8:10f3 1fd6:10f3 3ca:10f3 3aa:10f3 390:10f3 1fd3:10f3 1fd2:10f3 1fd7:10f3 1fd1:10f3 1fd9:10f3 3f3:10f4 3ba:10f5 3f0:10f5 39a:10f5 3d7:10f5,10e8,10f3 3bb:10f6 39b:10f6 3bc:10f8 b5:10f8 39c:10f8 3bd:10f9 39d:10f9 3be:10fa 39e:10fa 3bf:10fb 39f:10fb 1f40:10fb 1f48:10fb 1f44:10fb 1f4c:10fb 1f42:10fb 1f4a:10fb 1f41:10fb 1f49:10fb 1f45:10fb 1f4d:10fb 1f43:10fb 1f4b:10fb 3cc:10fb 1f79:10fb 38c:10fb 1ff9:10fb 1f78:10fb 1ff8:10fb 3c0:10fc 3d6:10fc 3a0:10fc 213f:10fc 3df:10fe 3de:10fe 3d9:10ff 3d8:10ff 3c1:1100 3f1:1100 3a1:1100 1fe4:1100 1fe5:1100 1fec:1100 3c3:1102 3f2:1102 3a3:1102 3f9:1102 3c2:1102 3c4:1103 3a4:1103 3c5:1104 3a5:1104 3d2:1104 1f50:1104 1f54:1104 1f52:1104 1f56:1104 1f51:1104 1f59:1104 1f55:1104 1f5d:1104 1f53:1104 1f5b:1104 1f57:1104 1f5f:1104 3cd:1104 1f7b:1104 38e:1104 1feb:1104 3d3:1104 1f7a:1104 1fea:1104 1fe0:1104 1fe8:1104 1fe6:1104 3cb:1104 3ab:1104 3d4:1104 3b0:1104 1fe3:1104 1fe2:1104 1fe7:1104 1fe1:1104 1fe9:1104 3c6:1105 3d5:1105 3a6:1105 3c7:1106 3a7:1106 3c8:1107 3a8:1107 3c9:1109 3a9:1109 2126:1109 1f60:1109 1f68:1109 1f64:1109 1f6c:1109 1fa4:1109 1fac:1109 1f62:1109 1f6a:1109 1fa2:1109 1faa:1109 1f66:1109 1f6e:1109 1fa6:1109 1fae:1109 1fa0:1109 1fa8:1109 1f61:1109 1f69:1109 1f65:1109 1f6d:1109 1fa5:1109 1fad:1109 1f63:1109 1f6b:1109 1fa3:1109 1fab:1109 1f67:1109 1f6f:1109 1fa7:1109 1faf:1109 1fa1:1109 1fa9:1109 3ce:1109 1f7d:1109 38f:1109 1ffb:1109 1ff4:1109 1f7c:1109 1ffa:1109 1ff2:1109 1ff6:1109 1ff7:1109 1ff3:1109 1ffc:1109 3e1:110a 3e0:110a 3f8:110b 3f7:110b 3fb:110c 3fa:110c 3e3:110d 3e2:110d 3e5:110e 3e4:110e 3e7:110f 3e6:110f 3e9:1110 3e8:1110 3eb:1111 3ea:1111 3ed:1112 3ec:1112 3ef:1113 3ee:1113 430:1114 410:1114 4d1:1118 4d0:1118 4d3:111c 4d2:111c 4d9:1120 4d8:1120 4db:1124 4da:1124 4d5:1128 4d4:1128 431:112c 411:112c 432:1130 412:1130 433:1134 413:1134 491:1134 490:1134 493:1138 492:1138 495:113c 494:113c 434:1140 414:1140 501:1144 500:1144 452:1145 402:1145 503:1149 502:1149 453:114a 403:114a 499:114e 498:114e 435:1152 415:1152 450:1152 400:1152 451:1152 401:1152 4d7:1156 4d6:1156 454:115a 404:115a 436:115e 416:115e 4c2:115e 4c1:115e 4dd:1162 4dc:1162 497:1166 496:1166 437:116a 417:116a 505:116e 504:116e 4df:116f 4de:116f 455:1173 405:1173 4e1:1177 4e0:1177 507:117b 506:117b 438:117c 418:117c 45d:117c 40d:117c 4e3:117c 4e2:117c 48b:1180 48a:1180 4e5:1184 4e4:1184 456:1188 406:1188 457:118c 407:118c 439:1190 419:1190 458:1194 408:1194 43a:1198 41a:1198 49b:119c 49a:119c 4c4:11a0 4c3:11a0 4a1:11a4 4a0:11a4 49f:11a8 49e:11a8 49d:11ac 49c:11ac 43b:11b0 41b:11b0 4c6:11b5 4c5:11b5 459:11b9 409:11b9 509:11bd 508:11bd 43c:11be 41c:11be 4ce:11c2 4cd:11c2 43d:11c6 41d:11c6 4ca:11ca 4c9:11ca 4a3:11ce 4a2:11ce 4c8:11d2 4c7:11d2 4a5:11d6 4a4:11d6 45a:11da 40a:11da 50b:11de 50a:11de 43e:11df 41e:11df 4e7:11e3 4e6:11e3 4e9:11e7 4e8:11e7 4eb:11eb 4ea:11eb 43f:11ef 41f:11ef 4a7:11f3 4a6:11f3 481:11f7 480:11f7 440:11fb 420:11fb 48f:11ff 48e:11ff 441:1203 421:1203 50d:1207 50c:1207 4ab:1208 4aa:1208 442:120c 422:120c 50f:1210 50e:1210 4ad:1211 4ac:1211 45b:1215 40b:1215 45c:1219 40c:1219 443:121d 423:121d 4ef:121d 4ee:121d 45e:1221 40e:1221 4f1:1225 4f0:1225 4f3:1229 4f2:1229 4af:122d 4ae:122d 4b1:1231 4b0:1231 479:1235 478:1235 444:1239 424:1239 445:123d 425:123d 4b3:1241 4b2:1241 4bb:1245 4ba:1245 461:1249 460:1249 47f:124d 47e:124d 47d:1251 47c:1251 47b:1255 47a:1255 446:1259 426:1259 4b5:125d 4b4:125d 447:1261 427:1261 4f5:1265 4f4:1265 4b7:1269 4b6:1269 4cc:126d 4cb:126d 4b9:1271 4b8:1271 4bd:1275 4bc:1275 4bf:1279 4be:1279 45f:127d 40f:127d 448:1281 428:1281 449:1285 429:1285 44a:1289 42a:1289 44b:128d 42b:128d 4f9:1291 4f8:1291 44c:1295 42c:1295 48d:1299 48c:1299 463:129d 462:129d 44d:12a1 42d:12a1 4ed:12a5 4ec:12a5 44e:12a9 42e:12a9 44f:12ad 42f:12ad 465:12b1 464:12b1 467:12b5 466:12b5 46b:12b9 46a:12b9 469:12bd 468:12bd 46d:12c1 46c:12c1 46f:12c5 46e:12c5 471:12c9 470:12c9 473:12cd 472:12cd 475:12d1 474:12d1 477:12d5 476:12d5 4a9:12d9 4a8:12d9 4c0:12dd 2135:1331 2136:1332 2137:1333 2138:1334";
13
+ export const GENERAL_CI = "61:41 62:42 63:43 64:44 65:45 66:46 67:47 68:48 69:49 6a:4a 6b:4b 6c:4c 6d:4d 6e:4e 6f:4f 70:50 71:51 72:52 73:53 74:54 75:55 76:56 77:57 78:58 79:59 7a:5a b5:39c c0:41 c1:41 c2:41 c3:41 c4:41 c5:41 c7:43 c8:45 c9:45 ca:45 cb:45 cc:49 cd:49 ce:49 cf:49 d1:4e d2:4f d3:4f d4:4f d5:4f d6:4f d9:55 da:55 db:55 dc:55 dd:59 df:53 e0:41 e1:41 e2:41 e3:41 e4:41 e5:41 e6:c6 e7:43 e8:45 e9:45 ea:45 eb:45 ec:49 ed:49 ee:49 ef:49 f0:d0 f1:4e f2:4f f3:4f f4:4f f5:4f f6:4f f8:d8 f9:55 fa:55 fb:55 fc:55 fd:59 fe:de ff:59 100:41 101:41 102:41 103:41 104:41 105:41 106:43 107:43 108:43 109:43 10a:43 10b:43 10c:43 10d:43 10e:44 10f:44 111:110 112:45 113:45 114:45 115:45 116:45 117:45 118:45 119:45 11a:45 11b:45 11c:47 11d:47 11e:47 11f:47 120:47 121:47 122:47 123:47 124:48 125:48 127:126 128:49 129:49 12a:49 12b:49 12c:49 12d:49 12e:49 12f:49 130:49 131:49 133:132 134:4a 135:4a 136:4b 137:4b 139:4c 13a:4c 13b:4c 13c:4c 13d:4c 13e:4c 140:13f 142:141 143:4e 144:4e 145:4e 146:4e 147:4e 148:4e 14b:14a 14c:4f 14d:4f 14e:4f 14f:4f 150:4f 151:4f 153:152 154:52 155:52 156:52 157:52 158:52 159:52 15a:53 15b:53 15c:53 15d:53 15e:53 15f:53 160:53 161:53 162:54 163:54 164:54 165:54 167:166 168:55 169:55 16a:55 16b:55 16c:55 16d:55 16e:55 16f:55 170:55 171:55 172:55 173:55 174:57 175:57 176:59 177:59 178:59 179:5a 17a:5a 17b:5a 17c:5a 17d:5a 17e:5a 17f:53 183:182 185:184 188:187 18c:18b 192:191 195:1f6 199:198 1a0:4f 1a1:4f 1a3:1a2 1a5:1a4 1a8:1a7 1ad:1ac 1af:55 1b0:55 1b4:1b3 1b6:1b5 1b9:1b8 1bd:1bc 1bf:1f7 1c5:1c4 1c6:1c4 1c8:1c7 1c9:1c7 1cb:1ca 1cc:1ca 1cd:41 1ce:41 1cf:49 1d0:49 1d1:4f 1d2:4f 1d3:55 1d4:55 1d5:55 1d6:55 1d7:55 1d8:55 1d9:55 1da:55 1db:55 1dc:55 1dd:18e 1de:41 1df:41 1e0:41 1e1:41 1e2:c6 1e3:c6 1e5:1e4 1e6:47 1e7:47 1e8:4b 1e9:4b 1ea:4f 1eb:4f 1ec:4f 1ed:4f 1ee:1b7 1ef:1b7 1f0:4a 1f2:1f1 1f3:1f1 1f4:47 1f5:47 1f8:4e 1f9:4e 1fa:41 1fb:41 1fc:c6 1fd:c6 1fe:d8 1ff:d8 200:41 201:41 202:41 203:41 204:45 205:45 206:45 207:45 208:49 209:49 20a:49 20b:49 20c:4f 20d:4f 20e:4f 20f:4f 210:52 211:52 212:52 213:52 214:55 215:55 216:55 217:55 218:53 219:53 21a:54 21b:54 21d:21c 21e:48 21f:48 223:222 225:224 226:41 227:41 228:45 229:45 22a:4f 22b:4f 22c:4f 22d:4f 22e:4f 22f:4f 230:4f 231:4f 232:59 233:59 253:181 254:186 256:189 257:18a 259:18f 25b:190 260:193 263:194 268:197 269:196 26f:19c 272:19d 275:19f 280:1a6 283:1a9 288:1ae 28a:1b1 28b:1b2 292:1b7 345:399 386:391 388:395 389:397 38a:399 38c:39f 38e:3a5 38f:3a9 390:399 3aa:399 3ab:3a5 3ac:391 3ad:395 3ae:397 3af:399 3b0:3a5 3b1:391 3b2:392 3b3:393 3b4:394 3b5:395 3b6:396 3b7:397 3b8:398 3b9:399 3ba:39a 3bb:39b 3bc:39c 3bd:39d 3be:39e 3bf:39f 3c0:3a0 3c1:3a1 3c2:3a3 3c3:3a3 3c4:3a4 3c5:3a5 3c6:3a6 3c7:3a7 3c8:3a8 3c9:3a9 3ca:399 3cb:3a5 3cc:39f 3cd:3a5 3ce:3a9 3d0:392 3d1:398 3d3:3d2 3d4:3d2 3d5:3a6 3d6:3a0 3db:3da 3dd:3dc 3df:3de 3e1:3e0 3e3:3e2 3e5:3e4 3e7:3e6 3e9:3e8 3eb:3ea 3ed:3ec 3ef:3ee 3f0:39a 3f1:3a1 3f2:3a3 400:415 401:415 403:413 407:406 40c:41a 40d:418 40e:423 430:410 431:411 432:412 433:413 434:414 435:415 436:416 437:417 438:418 439:419 43a:41a 43b:41b 43c:41c 43d:41d 43e:41e 43f:41f 440:420 441:421 442:422 443:423 444:424 445:425 446:426 447:427 448:428 449:429 44a:42a 44b:42b 44c:42c 44d:42d 44e:42e 44f:42f 450:415 451:415 452:402 453:413 454:404 455:405 456:406 457:406 458:408 459:409 45a:40a 45b:40b 45c:41a 45d:418 45e:423 45f:40f 461:460 463:462 465:464 467:466 469:468 46b:46a 46d:46c 46f:46e 471:470 473:472 475:474 476:474 477:474 479:478 47b:47a 47d:47c 47f:47e 481:480 48d:48c 48f:48e 491:490 493:492 495:494 497:496 499:498 49b:49a 49d:49c 49f:49e 4a1:4a0 4a3:4a2 4a5:4a4 4a7:4a6 4a9:4a8 4ab:4aa 4ad:4ac 4af:4ae 4b1:4b0 4b3:4b2 4b5:4b4 4b7:4b6 4b9:4b8 4bb:4ba 4bd:4bc 4bf:4be 4c1:416 4c2:416 4c4:4c3 4c8:4c7 4cc:4cb 4d0:410 4d1:410 4d2:410 4d3:410 4d5:4d4 4d6:415 4d7:415 4d9:4d8 4da:4d8 4db:4d8 4dc:416 4dd:416 4de:417 4df:417 4e1:4e0 4e2:418 4e3:418 4e4:418 4e5:418 4e6:41e 4e7:41e 4e9:4e8 4ea:4e8 4eb:4e8 4ec:42d 4ed:42d 4ee:423 4ef:423 4f0:423 4f1:423 4f2:423 4f3:423 4f4:427 4f5:427 4f8:42b 4f9:42b 561:531 562:532 563:533 564:534 565:535 566:536 567:537 568:538 569:539 56a:53a 56b:53b 56c:53c 56d:53d 56e:53e 56f:53f 570:540 571:541 572:542 573:543 574:544 575:545 576:546 577:547 578:548 579:549 57a:54a 57b:54b 57c:54c 57d:54d 57e:54e 57f:54f 580:550 581:551 582:552 583:553 584:554 585:555 586:556 1e00:41 1e01:41 1e02:42 1e03:42 1e04:42 1e05:42 1e06:42 1e07:42 1e08:43 1e09:43 1e0a:44 1e0b:44 1e0c:44 1e0d:44 1e0e:44 1e0f:44 1e10:44 1e11:44 1e12:44 1e13:44 1e14:45 1e15:45 1e16:45 1e17:45 1e18:45 1e19:45 1e1a:45 1e1b:45 1e1c:45 1e1d:45 1e1e:46 1e1f:46 1e20:47 1e21:47 1e22:48 1e23:48 1e24:48 1e25:48 1e26:48 1e27:48 1e28:48 1e29:48 1e2a:48 1e2b:48 1e2c:49 1e2d:49 1e2e:49 1e2f:49 1e30:4b 1e31:4b 1e32:4b 1e33:4b 1e34:4b 1e35:4b 1e36:4c 1e37:4c 1e38:4c 1e39:4c 1e3a:4c 1e3b:4c 1e3c:4c 1e3d:4c 1e3e:4d 1e3f:4d 1e40:4d 1e41:4d 1e42:4d 1e43:4d 1e44:4e 1e45:4e 1e46:4e 1e47:4e 1e48:4e 1e49:4e 1e4a:4e 1e4b:4e 1e4c:4f 1e4d:4f 1e4e:4f 1e4f:4f 1e50:4f 1e51:4f 1e52:4f 1e53:4f 1e54:50 1e55:50 1e56:50 1e57:50 1e58:52 1e59:52 1e5a:52 1e5b:52 1e5c:52 1e5d:52 1e5e:52 1e5f:52 1e60:53 1e61:53 1e62:53 1e63:53 1e64:53 1e65:53 1e66:53 1e67:53 1e68:53 1e69:53 1e6a:54 1e6b:54 1e6c:54 1e6d:54 1e6e:54 1e6f:54 1e70:54 1e71:54 1e72:55 1e73:55 1e74:55 1e75:55 1e76:55 1e77:55 1e78:55 1e79:55 1e7a:55 1e7b:55 1e7c:56 1e7d:56 1e7e:56 1e7f:56 1e80:57 1e81:57 1e82:57 1e83:57 1e84:57 1e85:57 1e86:57 1e87:57 1e88:57 1e89:57 1e8a:58 1e8b:58 1e8c:58 1e8d:58 1e8e:59 1e8f:59 1e90:5a 1e91:5a 1e92:5a 1e93:5a 1e94:5a 1e95:5a 1e96:48 1e97:54 1e98:57 1e99:59 1e9b:53 1ea0:41 1ea1:41 1ea2:41 1ea3:41 1ea4:41 1ea5:41 1ea6:41 1ea7:41 1ea8:41 1ea9:41 1eaa:41 1eab:41 1eac:41 1ead:41 1eae:41 1eaf:41 1eb0:41 1eb1:41 1eb2:41 1eb3:41 1eb4:41 1eb5:41 1eb6:41 1eb7:41 1eb8:45 1eb9:45 1eba:45 1ebb:45 1ebc:45 1ebd:45 1ebe:45 1ebf:45 1ec0:45 1ec1:45 1ec2:45 1ec3:45 1ec4:45 1ec5:45 1ec6:45 1ec7:45 1ec8:49 1ec9:49 1eca:49 1ecb:49 1ecc:4f 1ecd:4f 1ece:4f 1ecf:4f 1ed0:4f 1ed1:4f 1ed2:4f 1ed3:4f 1ed4:4f 1ed5:4f 1ed6:4f 1ed7:4f 1ed8:4f 1ed9:4f 1eda:4f 1edb:4f 1edc:4f 1edd:4f 1ede:4f 1edf:4f 1ee0:4f 1ee1:4f 1ee2:4f 1ee3:4f 1ee4:55 1ee5:55 1ee6:55 1ee7:55 1ee8:55 1ee9:55 1eea:55 1eeb:55 1eec:55 1eed:55 1eee:55 1eef:55 1ef0:55 1ef1:55 1ef2:59 1ef3:59 1ef4:59 1ef5:59 1ef6:59 1ef7:59 1ef8:59 1ef9:59 1f00:391 1f01:391 1f02:391 1f03:391 1f04:391 1f05:391 1f06:391 1f07:391 1f08:391 1f09:391 1f0a:391 1f0b:391 1f0c:391 1f0d:391 1f0e:391 1f0f:391 1f10:395 1f11:395 1f12:395 1f13:395 1f14:395 1f15:395 1f18:395 1f19:395 1f1a:395 1f1b:395 1f1c:395 1f1d:395 1f20:397 1f21:397 1f22:397 1f23:397 1f24:397 1f25:397 1f26:397 1f27:397 1f28:397 1f29:397 1f2a:397 1f2b:397 1f2c:397 1f2d:397 1f2e:397 1f2f:397 1f30:399 1f31:399 1f32:399 1f33:399 1f34:399 1f35:399 1f36:399 1f37:399 1f38:399 1f39:399 1f3a:399 1f3b:399 1f3c:399 1f3d:399 1f3e:399 1f3f:399 1f40:39f 1f41:39f 1f42:39f 1f43:39f 1f44:39f 1f45:39f 1f48:39f 1f49:39f 1f4a:39f 1f4b:39f 1f4c:39f 1f4d:39f 1f50:3a5 1f51:3a5 1f52:3a5 1f53:3a5 1f54:3a5 1f55:3a5 1f56:3a5 1f57:3a5 1f59:3a5 1f5b:3a5 1f5d:3a5 1f5f:3a5 1f60:3a9 1f61:3a9 1f62:3a9 1f63:3a9 1f64:3a9 1f65:3a9 1f66:3a9 1f67:3a9 1f68:3a9 1f69:3a9 1f6a:3a9 1f6b:3a9 1f6c:3a9 1f6d:3a9 1f6e:3a9 1f6f:3a9 1f70:391 1f71:1fbb 1f72:395 1f73:1fc9 1f74:397 1f75:1fcb 1f76:399 1f77:1fdb 1f78:39f 1f79:1ff9 1f7a:3a5 1f7b:1feb 1f7c:3a9 1f7d:1ffb 1f80:391 1f81:391 1f82:391 1f83:391 1f84:391 1f85:391 1f86:391 1f87:391 1f88:391 1f89:391 1f8a:391 1f8b:391 1f8c:391 1f8d:391 1f8e:391 1f8f:391 1f90:397 1f91:397 1f92:397 1f93:397 1f94:397 1f95:397 1f96:397 1f97:397 1f98:397 1f99:397 1f9a:397 1f9b:397 1f9c:397 1f9d:397 1f9e:397 1f9f:397 1fa0:3a9 1fa1:3a9 1fa2:3a9 1fa3:3a9 1fa4:3a9 1fa5:3a9 1fa6:3a9 1fa7:3a9 1fa8:3a9 1fa9:3a9 1faa:3a9 1fab:3a9 1fac:3a9 1fad:3a9 1fae:3a9 1faf:3a9 1fb0:391 1fb1:391 1fb2:391 1fb3:391 1fb4:391 1fb6:391 1fb7:391 1fb8:391 1fb9:391 1fba:391 1fbc:391 1fbe:399 1fc2:397 1fc3:397 1fc4:397 1fc6:397 1fc7:397 1fc8:395 1fca:397 1fcc:397 1fd0:399 1fd1:399 1fd2:399 1fd6:399 1fd7:399 1fd8:399 1fd9:399 1fda:399 1fe0:3a5 1fe1:3a5 1fe2:3a5 1fe4:3a1 1fe5:3a1 1fe6:3a5 1fe7:3a5 1fe8:3a5 1fe9:3a5 1fea:3a5 1fec:3a1 1ff2:3a9 1ff3:3a9 1ff4:3a9 1ff6:3a9 1ff7:3a9 1ff8:39f 1ffa:3a9 1ffc:3a9 2170:2160 2171:2161 2172:2162 2173:2163 2174:2164 2175:2165 2176:2166 2177:2167 2178:2168 2179:2169 217a:216a 217b:216b 217c:216c 217d:216d 217e:216e 217f:216f 24d0:24b6 24d1:24b7 24d2:24b8 24d3:24b9 24d4:24ba 24d5:24bb 24d6:24bc 24d7:24bd 24d8:24be 24d9:24bf 24da:24c0 24db:24c1 24dc:24c2 24dd:24c3 24de:24c4 24df:24c5 24e0:24c6 24e1:24c7 24e2:24c8 24e3:24c9 24e4:24ca 24e5:24cb 24e6:24cc 24e7:24cd 24e8:24ce 24e9:24cf ff41:ff21 ff42:ff22 ff43:ff23 ff44:ff24 ff45:ff25 ff46:ff26 ff47:ff27 ff48:ff28 ff49:ff29 ff4a:ff2a ff4b:ff2b ff4c:ff2c ff4d:ff2d ff4e:ff2e ff4f:ff2f ff50:ff30 ff51:ff31 ff52:ff32 ff53:ff33 ff54:ff34 ff55:ff35 ff56:ff36 ff57:ff37 ff58:ff38 ff59:ff39 ff5a:ff3a";
@@ -0,0 +1,378 @@
1
+ // MySQL 8 COLLATIONS — how two strings compare, sort, group and collide. Collation changes
2
+ // comparison only: stored bytes and returned values stay exactly as written.
3
+ //
4
+ // Reference: MySQL 8.0 Reference Manual, chapter 10 "Character Sets, Collations, Unicode":
5
+ // 10.3.1 Collation Naming Conventions (_ai/_as, _ci/_cs, _bin; the 0900 = UCA 9.0.0 collations),
6
+ // 10.8.4 Collation Coercibility in Expressions (derivations and the aggregation rules below),
7
+ // 10.8.5 The binary Collation Compared to _bin Collations,
8
+ // 10.10.1 Unicode Character Sets (utf8mb4_general_ci, utf8mb4_unicode_ci = UCA 4.0.0,
9
+ // utf8mb4_0900_ai_ci = UCA 9.0.0; PAD SPACE for all but the 0900 family, which is NO PAD),
10
+ // 12.8.1 String Comparison Functions (LIKE compares per character under the collation).
11
+ // The weights are the published tables those collations are built from (planetscale-collation-
12
+ // weights.gen.ts): DUCET 9.0.0 for utf8mb4_0900_*, DUCET 4.0.0 primaries for *_unicode_ci and the
13
+ // MySQL 8.0 `my_unicase_default` sort table for *_general_ci.
14
+ //
15
+ // WHAT IS MODELLED OF THE WEIGHT TABLES: the DUCET entries for U+0000..U+052F (Latin, IPA, Greek,
16
+ // Cyrillic, combining diacritics), U+1E00..U+1FFF, U+2000..U+206F, U+20A0..U+20CF, U+2100..U+218F,
17
+ // U+FB00..U+FB06 and U+FF01..U+FF5E, including DUCET's expansions (ß = ss, æ = ae, fi = fi under
18
+ // utf8mb4_0900_ai_ci) and its contractions in those ranges. Every other character takes UCA's
19
+ // implicit weight derived from its code point, which is the weight MySQL gives an UNASSIGNED
20
+ // character: it equals only itself and sorts after the modelled ranges. For assigned characters
21
+ // outside the ranges (Arabic, Hebrew, Indic, kana, Hangul, emoji, …) that is not MySQL's answer —
22
+ // their case/width/accent equivalences and their order are not modelled
23
+ // (planetscale.collation.uca_full_weight_table).
24
+ import { GENERAL_CI, UCA_400, UCA_900 } from './planetscale-collation-weights.gen.ts';
25
+
26
+ export type Charset = 'utf8mb4' | 'utf8mb3' | 'binary';
27
+
28
+ export type Collation = {
29
+ name: string;
30
+ /** MySQL's collation id (INFORMATION_SCHEMA.COLLATIONS.ID). */
31
+ id: number;
32
+ charset: Charset;
33
+ /** PAD SPACE: trailing spaces are insignificant. The 0900 collations and `binary` are NO PAD. */
34
+ pad: boolean;
35
+ /** a `_bin` collation: wins a same-coercibility tie against a non-binary one (10.8.4). */
36
+ binsort: boolean;
37
+ /** a key two strings share exactly when the collation calls them equal. */
38
+ key(s: string): string;
39
+ compare(a: string, b: string): number;
40
+ /** the key of ONE character, for LIKE's per-character matching. */
41
+ charKey(cp: number): string;
42
+ };
43
+
44
+ // ── weight tables, parsed on first use (importing this module does no work) ──────────────────
45
+
46
+ type Ducet = { single: Map<number, number[]>; contractions: Map<number, Array<{ rest: number[]; ces: number[] }>> };
47
+ let ducet900: Ducet | undefined;
48
+ let uca400: Map<number, number[]> | undefined;
49
+ let general: Map<number, number> | undefined;
50
+
51
+ function loadDucet900(): Ducet {
52
+ if (ducet900 !== undefined) return ducet900;
53
+ const single = new Map<number, number[]>();
54
+ const contractions = new Map<number, Array<{ rest: number[]; ces: number[] }>>();
55
+ for (const entry of UCA_900.split(' ')) {
56
+ const [keyText, body] = entry.split(':') as [string, string];
57
+ const cps = keyText.split('+').map((h) => parseInt(h, 16));
58
+ const ces: number[] = [];
59
+ for (const ce of body === '' ? [] : body.split(',')) {
60
+ const [p, s, t] = ce.split('.').map((h) => parseInt(h, 16));
61
+ ces.push(p!, s ?? 0x20, t ?? 0x2);
62
+ }
63
+ if (cps.length === 1) single.set(cps[0]!, ces);
64
+ else {
65
+ const list = contractions.get(cps[0]!) ?? [];
66
+ list.push({ rest: cps.slice(1), ces });
67
+ list.sort((a, b) => b.rest.length - a.rest.length);
68
+ contractions.set(cps[0]!, list);
69
+ }
70
+ }
71
+ return (ducet900 = { single, contractions });
72
+ }
73
+
74
+ function loadUca400(): Map<number, number[]> {
75
+ if (uca400 !== undefined) return uca400;
76
+ const map = new Map<number, number[]>();
77
+ for (const entry of UCA_400.split(' ')) {
78
+ const [cp, body] = entry.split(':') as [string, string];
79
+ map.set(parseInt(cp, 16), body === '' ? [] : body.split(',').map((h) => parseInt(h, 16)));
80
+ }
81
+ return (uca400 = map);
82
+ }
83
+
84
+ function loadGeneral(): Map<number, number> {
85
+ if (general !== undefined) return general;
86
+ const map = new Map<number, number>();
87
+ for (const entry of GENERAL_CI.split(' ')) {
88
+ const [cp, sort] = entry.split(':') as [string, string];
89
+ map.set(parseInt(cp, 16), parseInt(sort, 16));
90
+ }
91
+ return (general = map);
92
+ }
93
+
94
+ const codePoints = (s: string): number[] => { const out: number[] = []; for (const ch of s) out.push(ch.codePointAt(0)!); return out; };
95
+
96
+ /** The twelve CJK Compatibility Ideographs that are Unified_Ideograph (UCA "core Han"). */
97
+ const COMPAT_UNIFIED = new Set([0xfa0e, 0xfa0f, 0xfa11, 0xfa13, 0xfa14, 0xfa1f, 0xfa21, 0xfa23, 0xfa24, 0xfa27, 0xfa28, 0xfa29]);
98
+
99
+ /** UCA 9.0.0 implicit weights (UTS #10 §10.1.3): [AAAA.0020.0002][BBBB.0000.0000]. */
100
+ function implicit900(cp: number): number[] {
101
+ if (cp >= 0x17000 && cp <= 0x18aff) return [0xfb00, 0x20, 0x2, (cp - 0x17000) | 0x8000, 0, 0];
102
+ let base = 0xfbc0;
103
+ if ((cp >= 0x4e00 && cp <= 0x9fd5) || COMPAT_UNIFIED.has(cp)) base = 0xfb40;
104
+ else if ((cp >= 0x3400 && cp <= 0x4db5) || (cp >= 0x20000 && cp <= 0x2a6d6) || (cp >= 0x2a700 && cp <= 0x2b734)
105
+ || (cp >= 0x2b740 && cp <= 0x2b81d) || (cp >= 0x2b820 && cp <= 0x2cea1)) base = 0xfb80;
106
+ return [base + (cp >> 15), 0x20, 0x2, (cp & 0x7fff) | 0x8000, 0, 0];
107
+ }
108
+
109
+ /** The DUCET 9.0.0 collation elements of a string, flat [p, s, t, p, s, t, …]. */
110
+ function elements900(cps: number[]): number[] {
111
+ const { single, contractions } = loadDucet900();
112
+ const out: number[] = [];
113
+ for (let i = 0; i < cps.length; i++) {
114
+ const cp = cps[i]!;
115
+ const candidates = contractions.get(cp);
116
+ let matched = false;
117
+ if (candidates !== undefined) {
118
+ for (const c of candidates) {
119
+ if (c.rest.every((r, k) => cps[i + 1 + k] === r)) { out.push(...c.ces); i += c.rest.length; matched = true; break; }
120
+ }
121
+ }
122
+ if (matched) continue;
123
+ out.push(...(single.get(cp) ?? implicit900(cp)));
124
+ }
125
+ return out;
126
+ }
127
+
128
+ /** A multi-level UCA sort key: each level's non-zero weights, levels separated by 0x0000. One
129
+ * weight is one UTF-16 code unit, so comparing keys as strings compares the weights. */
130
+ function ucaKey(ces: number[], levels: number): string {
131
+ let key = '';
132
+ for (let level = 0; level < levels; level++) {
133
+ if (level > 0) key += '\u0000';
134
+ for (let i = level; i < ces.length; i += 3) if (ces[i] !== 0) key += String.fromCharCode(ces[i]!);
135
+ }
136
+ return key;
137
+ }
138
+
139
+ /** utf8mb4_unicode_ci's primary weights (UCA 4.0.0). MySQL gives every supplementary character
140
+ * the weight of U+FFFD; unlisted BMP characters take the UCA 4.0.0 implicit weight. */
141
+ function weights400(cps: number[]): number[] {
142
+ const table = loadUca400();
143
+ const out: number[] = [];
144
+ for (const cp of cps) {
145
+ if (cp > 0xffff) { out.push(0xfffd); continue; }
146
+ const w = table.get(cp);
147
+ if (w !== undefined) { out.push(...w); continue; }
148
+ const base = cp >= 0x3400 && cp <= 0x4db5 ? 0xfb80 : (cp >= 0x4e00 && cp <= 0x9fa5) || COMPAT_UNIFIED.has(cp) ? 0xfb40 : 0xfbc0;
149
+ out.push(base + (cp >> 15), (cp & 0x7fff) | 0x8000);
150
+ }
151
+ return out;
152
+ }
153
+
154
+ /** utf8mb4_general_ci: one weight per character from `my_unicase_default`; U+FFFD for supplementary. */
155
+ function weightsGeneral(cps: number[]): number[] {
156
+ const table = loadGeneral();
157
+ return cps.map((cp) => (cp > 0xffff ? 0xfffd : table.get(cp) ?? cp));
158
+ }
159
+
160
+ /** PAD SPACE comparison of single-level weights: the shorter string is extended with spaces
161
+ * (MySQL's strnncollsp), so trailing spaces never matter and a trailing weight below the space
162
+ * weight (a TAB) sorts BEFORE the unpadded string. */
163
+ function padCompare(a: number[], b: number[], space: number): number {
164
+ const n = Math.min(a.length, b.length);
165
+ for (let i = 0; i < n; i++) if (a[i] !== b[i]) return a[i]! < b[i]! ? -1 : 1;
166
+ if (a.length === b.length) return 0;
167
+ const longer = a.length > b.length ? a : b; const sign = a.length > b.length ? 1 : -1;
168
+ for (let i = n; i < longer.length; i++) if (longer[i] !== space) return longer[i]! < space ? -sign : sign;
169
+ return 0;
170
+ }
171
+
172
+ const padKey = (w: number[], space: number): string => {
173
+ let end = w.length;
174
+ while (end > 0 && w[end - 1] === space) end--;
175
+ let key = '';
176
+ for (let i = 0; i < end; i++) key += String.fromCodePoint(w[i]!);
177
+ return key;
178
+ };
179
+
180
+ function codePointCompare(a: string, b: string): number {
181
+ if (a === b) return 0;
182
+ const x = codePoints(a); const y = codePoints(b);
183
+ const n = Math.min(x.length, y.length);
184
+ for (let i = 0; i < n; i++) if (x[i] !== y[i]) return x[i]! < y[i]! ? -1 : 1;
185
+ return x.length === y.length ? 0 : x.length < y.length ? -1 : 1;
186
+ }
187
+
188
+ /** Bounded per-collation memo of sort keys: sorts and group-bys key the same strings repeatedly. */
189
+ function memo<T>(fn: (s: string) => T): (s: string) => T {
190
+ const cache = new Map<string, T>();
191
+ return (s) => {
192
+ const hit = cache.get(s);
193
+ if (hit !== undefined) return hit;
194
+ const k = fn(s);
195
+ if (cache.size >= 50_000) cache.clear();
196
+ cache.set(s, k);
197
+ return k;
198
+ };
199
+ }
200
+
201
+ const cmp = (a: string, b: string): number => (a < b ? -1 : a > b ? 1 : 0);
202
+
203
+ function uca900(name: string, id: number, levels: number): Collation {
204
+ const key = memo((s) => ucaKey(elements900(codePoints(s)), levels));
205
+ return { name, id, charset: 'utf8mb4', pad: false, binsort: false, key, compare: (a, b) => cmp(key(a), key(b)), charKey: (cp) => key(String.fromCodePoint(cp)) };
206
+ }
207
+
208
+ function padded(name: string, id: number, charset: Charset, weights: (cps: number[]) => number[], space: number, binsort: boolean): Collation {
209
+ const w = memo((s) => weights(codePoints(s)));
210
+ const key = memo((s) => padKey(w(s), space));
211
+ return {
212
+ name, id, charset, pad: true, binsort, key,
213
+ compare: (a, b) => (a === b ? 0 : padCompare(w(a), w(b), space)),
214
+ charKey: (cp) => weights([cp]).map((w) => String.fromCodePoint(w)).join(''),
215
+ };
216
+ }
217
+
218
+ const identity = (cps: number[]): number[] => cps;
219
+
220
+ /** The byte-wise `binary` collation of binary strings. Operands are byte strings (one char per byte). */
221
+ export const BINARY_COLLATION: Collation = {
222
+ name: 'binary', id: 63, charset: 'binary', pad: false, binsort: true,
223
+ key: (s) => s, compare: cmp, charKey: (cp) => String.fromCharCode(cp),
224
+ };
225
+
226
+ const COLLATIONS: Collation[] = [
227
+ BINARY_COLLATION,
228
+ uca900('utf8mb4_0900_ai_ci', 255, 1),
229
+ uca900('utf8mb4_0900_as_ci', 305, 2),
230
+ uca900('utf8mb4_0900_as_cs', 278, 3),
231
+ { name: 'utf8mb4_0900_bin', id: 309, charset: 'utf8mb4', pad: false, binsort: true, key: (s) => s, compare: codePointCompare, charKey: (cp) => String.fromCodePoint(cp) },
232
+ padded('utf8mb4_bin', 46, 'utf8mb4', identity, 0x20, true),
233
+ padded('utf8mb4_general_ci', 45, 'utf8mb4', weightsGeneral, 0x20, false),
234
+ padded('utf8mb4_unicode_ci', 224, 'utf8mb4', weights400, 0x209, false),
235
+ padded('utf8mb3_general_ci', 33, 'utf8mb3', weightsGeneral, 0x20, false),
236
+ padded('utf8mb3_bin', 83, 'utf8mb3', identity, 0x20, true),
237
+ padded('utf8mb3_unicode_ci', 192, 'utf8mb3', weights400, 0x209, false),
238
+ ];
239
+ const BY_NAME = new Map(COLLATIONS.map((c) => [c.name, c]));
240
+ /** Every collation the engine models (INFORMATION_SCHEMA.COLLATIONS lists them). */
241
+ export const modelledCollations = (): readonly Collation[] => COLLATIONS;
242
+ const BY_ID = new Map(COLLATIONS.map((c) => [c.id, c]));
243
+
244
+ /** MySQL 8's default collation per character set (SHOW CHARACTER SET). */
245
+ export const DEFAULT_COLLATION_OF: Record<Charset, string> = { utf8mb4: 'utf8mb4_0900_ai_ci', utf8mb3: 'utf8mb3_general_ci', binary: 'binary' };
246
+ /** The database default, and the connection collation string literals take (`SET NAMES utf8mb4`
247
+ * selects utf8mb4's default collation, `default_collation_for_utf8mb4` = utf8mb4_0900_ai_ci). */
248
+ export const DATABASE_COLLATION = 'utf8mb4_0900_ai_ci';
249
+
250
+ /** The character sets MySQL 8 ships (SHOW CHARACTER SET). Names here that are not modelled are
251
+ * refused as unmodelled surface; any other name is MySQL's unknown charset/collation error. */
252
+ const MYSQL_CHARSETS = new Set(['armscii8', 'ascii', 'big5', 'binary', 'cp1250', 'cp1251', 'cp1256', 'cp1257', 'cp850', 'cp852', 'cp866', 'cp932',
253
+ 'dec8', 'eucjpms', 'euckr', 'gb18030', 'gb2312', 'gbk', 'geostd8', 'greek', 'hebrew', 'hp8', 'keybcs2', 'koi8r', 'koi8u', 'latin1', 'latin2',
254
+ 'latin5', 'latin7', 'macce', 'macroman', 'sjis', 'swe7', 'tis620', 'ucs2', 'ujis', 'utf16', 'utf16le', 'utf32', 'utf8', 'utf8mb3', 'utf8mb4']);
255
+
256
+ /** `utf8` is MySQL 8.0's alias for utf8mb3, in charset and collation names alike. */
257
+ const canonicalName = (name: string): string => {
258
+ const n = name.toLowerCase();
259
+ return n === 'utf8' ? 'utf8mb3' : n.startsWith('utf8_') ? `utf8mb3_${n.slice(5)}` : n;
260
+ };
261
+
262
+ export type Lookup<T> = { found: T } | { unmodelled: string } | { unknown: string };
263
+
264
+ export function lookupCollation(name: string): Lookup<Collation> {
265
+ const n = canonicalName(name);
266
+ const c = BY_NAME.get(n);
267
+ return c !== undefined ? { found: c } : notModelled(n, name);
268
+ }
269
+
270
+ /** A collation name the twin does not model: one of MySQL's (named for a MySQL character set) or no collation at all. */
271
+ function notModelled(n: string, name: string): Lookup<Collation> {
272
+ const charset = n.split('_')[0]!;
273
+ return MYSQL_CHARSETS.has(charset) && n.includes('_') ? { unmodelled: n } : { unknown: name };
274
+ }
275
+
276
+ export function lookupCharset(name: string): Lookup<Charset> {
277
+ const n = canonicalName(name);
278
+ if (n === 'utf8mb4' || n === 'utf8mb3' || n === 'binary') return { found: n };
279
+ return MYSQL_CHARSETS.has(n) ? { unmodelled: n } : { unknown: name };
280
+ }
281
+
282
+ /** A modelled collation by name (canonical names only), or undefined. */
283
+ export const collationNamed = (name: string | undefined): Collation | undefined => (name === undefined ? undefined : BY_NAME.get(canonicalName(name)));
284
+ export const collationById = (id: number | undefined): Collation | undefined => (id === undefined ? undefined : BY_ID.get(id));
285
+ export const defaultCollation = (charset: Charset): Collation => BY_NAME.get(DEFAULT_COLLATION_OF[charset])!;
286
+ export const databaseCollation = (): Collation => BY_NAME.get(DATABASE_COLLATION)!;
287
+ /** The `_bin` collation of a charset (a column's `BINARY` attribute). */
288
+ export const binCollation = (charset: Charset): Collation => (charset === 'binary' ? BINARY_COLLATION : BY_NAME.get(`${charset}_bin`)!);
289
+
290
+ // ── coercibility (10.8.4) ─────────────────────────────────────────────────────────────────────
291
+
292
+ export const EXPLICIT = 0;
293
+ export const NONE = 1;
294
+ export const IMPLICIT = 2;
295
+ export const SYSCONST = 3;
296
+ export const COERCIBLE = 4;
297
+ export const NUMERIC = 5;
298
+ export const IGNORABLE = 6;
299
+ export const DERIVATION_NAMES = ['EXPLICIT', 'NONE', 'IMPLICIT', 'SYSCONST', 'COERCIBLE', 'NUMERIC', 'IGNORABLE'];
300
+
301
+ /** A string operand's collation and derivation (MySQL's DTCollation). */
302
+ export type DT = { collation: Collation; derivation: number };
303
+
304
+ const unicode = (c: Collation): boolean => c.charset !== 'binary';
305
+
306
+ /** utf8mb4 is a superset of utf8mb3; a Unicode operand of lower derivation absorbs the other. */
307
+ function leftIsSuperset(l: DT, r: DT): boolean {
308
+ return unicode(l.collation) && (l.derivation < r.derivation
309
+ || (l.derivation === r.derivation && (!unicode(r.collation) || (l.collation.charset === 'utf8mb4' && r.collation.charset === 'utf8mb3'))));
310
+ }
311
+
312
+ /**
313
+ * The collation two operands are compared under — MySQL's DTCollation::aggregate with the
314
+ * comparison flags (superset and coercible conversion allowed). A result of derivation NONE is
315
+ * "Illegal mix of collations": two different non-binary collations of equal derivation, or two
316
+ * different EXPLICIT ones. A binary string wins over a character string of equal or higher
317
+ * derivation, and a `_bin` collation wins a tie against a `_ci`/`_cs` one of the same charset.
318
+ */
319
+ export function aggregate(a: DT, b: DT): DT {
320
+ if (a.collation.charset !== b.collation.charset) return binaryOperand(a, b) ?? acrossCharsets(a, b);
321
+ if (a.derivation < b.derivation) return a;
322
+ if (b.derivation < a.derivation) return b;
323
+ return a.collation === b.collation ? a : collationTie(a, b);
324
+ }
325
+
326
+ /** Of two operands of different character sets, the binary one: it wins over a character string of equal or higher derivation. */
327
+ const binaryOperand = (a: DT, b: DT): DT | undefined =>
328
+ (a.collation.charset === 'binary' ? (a.derivation <= b.derivation ? a : b) : b.collation.charset === 'binary' ? (b.derivation <= a.derivation ? b : a) : undefined);
329
+
330
+ /** Two different collations of one character set at equal derivation: `_bin` wins, two EXPLICIT ones are an illegal mix. */
331
+ function collationTie(a: DT, b: DT): DT {
332
+ if (a.derivation === EXPLICIT) return { collation: a.collation, derivation: NONE };
333
+ if (a.collation.binsort) return a;
334
+ if (b.collation.binsort) return b;
335
+ return { collation: binCollation(a.collation.charset), derivation: NONE };
336
+ }
337
+
338
+ /** Two character strings of different character sets: the superset, else the coercible side gives way. */
339
+ function acrossCharsets(a: DT, b: DT): DT {
340
+ if (leftIsSuperset(a, b)) return a;
341
+ if (leftIsSuperset(b, a)) return b;
342
+ if (a.derivation < COERCIBLE && b.derivation === COERCIBLE) return a;
343
+ if (b.derivation < COERCIBLE && a.derivation === COERCIBLE) return b;
344
+ return { collation: BINARY_COLLATION, derivation: NONE };
345
+ }
346
+
347
+ /**
348
+ * LIKE under a collation: `%` matches any run of characters, `_` exactly one, `\` escapes, and
349
+ * every other pattern character matches one character of equal collation weight. Per character,
350
+ * so under utf8mb4_0900_ai_ci `'é' LIKE 'e'` holds while `'ß' LIKE 'ss'` does not (MySQL 8
351
+ * manual, 12.8.1: LIKE performs matching on a per-character basis). Trailing spaces are
352
+ * significant in LIKE whatever the collation's pad attribute.
353
+ */
354
+ export function likeMatch(value: string, pattern: string, collation: Collation): boolean {
355
+ type Tok = { any: true } | { one: true } | { key: string };
356
+ const toks: Tok[] = [];
357
+ const p = collation.charset === 'binary' ? [...pattern].map((c) => c.charCodeAt(0)) : codePoints(pattern);
358
+ for (let i = 0; i < p.length; i++) {
359
+ const c = p[i]!;
360
+ if (c === 0x5c && i + 1 < p.length) { toks.push({ key: collation.charKey(p[++i]!) }); continue; }
361
+ if (c === 0x25) { if (!('any' in (toks[toks.length - 1] ?? {}))) toks.push({ any: true }); continue; }
362
+ if (c === 0x5f) { toks.push({ one: true }); continue; }
363
+ toks.push({ key: collation.charKey(c) });
364
+ }
365
+ const v = (collation.charset === 'binary' ? [...value].map((c) => c.charCodeAt(0)) : codePoints(value)).map((c) => collation.charKey(c));
366
+ // Iterative wildcard match with single-star backtracking (each `%` resets the anchor).
367
+ let vi = 0; let ti = 0; let starTi = -1; let starVi = 0;
368
+ while (vi < v.length) {
369
+ const t = toks[ti];
370
+ if (t !== undefined && 'one' in t) { vi++; ti++; continue; }
371
+ if (t !== undefined && 'key' in t && t.key === v[vi]) { vi++; ti++; continue; }
372
+ if (t !== undefined && 'any' in t) { starTi = ti++; starVi = vi; continue; }
373
+ if (starTi >= 0) { ti = starTi + 1; vi = ++starVi; continue; }
374
+ return false;
375
+ }
376
+ while (ti < toks.length && 'any' in toks[ti]!) ti++;
377
+ return ti === toks.length;
378
+ }