cizgile 0.3.0 → 1.0.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.
- package/README.md +40 -7
- package/dist/idna.d.mts +60 -0
- package/dist/idna.mjs +313 -0
- package/dist/index.d.mts +1 -1
- package/dist/index.mjs +1 -1
- package/dist/shared/punycode-MAFJqHdd.mjs +180 -0
- package/dist/shared/{registry-_m94akct.mjs → registry-D787niCh.mjs} +8 -2
- package/dist/shared/{types-B3EVWvDh.d.mts → types-D5P1JMcX.d.mts} +2 -2
- package/dist/transliterate.d.mts +32 -1
- package/dist/transliterate.mjs +1431 -4
- package/dist/uri.mjs +1 -179
- package/package.json +18 -14
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<p align="center">
|
|
2
2
|
<br>
|
|
3
|
-
<img src=".github/assets/cover.svg?v=
|
|
3
|
+
<img src=".github/assets/cover.svg?v=7e268b8" alt="cizgile — Zero-dependency URL slug engine" width="100%">
|
|
4
4
|
<br><br>
|
|
5
5
|
<b style="font-size: 2em;">cizgile</b>
|
|
6
6
|
<br><br>
|
|
@@ -30,23 +30,24 @@ slugify("Straße Über Ärger", { locale: "de" }) // "strasse-ueber-aerger"
|
|
|
30
30
|
slugify("你好 World", { unicode: true }) // "你好-world"
|
|
31
31
|
```
|
|
32
32
|
|
|
33
|
-
No dependencies. ESM only. Node 20
|
|
33
|
+
No dependencies. ESM only. Node 20+ and Bun are exercised in CI; the code touches no host API, so browsers and edge workers run it as-is.
|
|
34
34
|
|
|
35
35
|
## Why cizgile
|
|
36
36
|
|
|
37
37
|
- **Slugs that are correct by construction.** Every ASCII slug is a valid URL path segment (RFC 3986 `segment-nz-nc`) — no percent-encoding needed, no `.` or `..`, no accidental scheme prefix.
|
|
38
|
-
- **Speaks your language.**
|
|
38
|
+
- **Speaks your language.** 50 locales (`tr`, `de`, `pl`, `sv`, `uk`, `hi`, `ta`, `th`, `ja`, `ko`, …) and 24 scripts (Latin, Cyrillic, Greek, Arabic, Armenian, Georgian, Dhivehi, Hebrew, Hangul, kana, Devanagari and the seven other Indic scripts, Sinhala, Thai, Lao, Khmer, Myanmar). `ß` → `ss`, `İ` → `i`, `Щ` → `shch`, `서울` → `seoul`.
|
|
39
39
|
- **Unicode slugs when you want them.** `你好-world` stays readable, and `iriToUri` gives you the exact percent-encoded form for the wire.
|
|
40
40
|
- **A real URL toolkit underneath.** Resolve, normalise, compare, validate and relativise URLs by the RFC, cross-checked against the WHATWG `URL` parser.
|
|
41
41
|
- **Small and tree-shakeable.** `import { slugify }` ships the Latin table only; other scripts load only when you import them.
|
|
42
42
|
|
|
43
|
-
##
|
|
43
|
+
## Four entry points
|
|
44
44
|
|
|
45
45
|
| import | what you get |
|
|
46
46
|
| ----------------------- | ----------------------------------------------------------------------------------------------------- |
|
|
47
47
|
| `cizgile` | `slugify`, `isSlug`, `createSlugger`, `truncateSlug`, `measure`, `decamelize`, script and bidi guards |
|
|
48
48
|
| `cizgile/transliterate` | `transliterate`, per-script tables, locales, `defineLocale` |
|
|
49
49
|
| `cizgile/uri` | percent-encoding, `resolveUri`, `normalizeUri`, `relativize`, validators, IRI ↔ URI, punycode |
|
|
50
|
+
| `cizgile/uri/idna` | full UTS #46 `idnaToAscii` / `idnaToUnicode`: status table, CONTEXTJ/CONTEXTO, RFC 5893 bidi rule |
|
|
50
51
|
|
|
51
52
|
## Slugs
|
|
52
53
|
|
|
@@ -89,7 +90,7 @@ const swiss = defineLocale(de, { id: "de-CH", table: { ß: "ss" } })
|
|
|
89
90
|
slugify("Straße", { locale: swiss }) // "strasse"
|
|
90
91
|
```
|
|
91
92
|
|
|
92
|
-
Locale ids: `az ca cs da de es et fi fr hr hu is it lt lv nb nl pl pt ro sk sl sv tr vi`. Locale objects: those plus `be bg kk mk ru sr uk` (Cyrillic) and `el he hi ja ko` (Greek, Hebrew, Devanagari, kana, Hangul), `bn pa gu or ta te kn ml` (Bengali, Gurmukhi, Gujarati, Odia, Tamil, Telugu, Kannada, Malayalam). `registerLocale(ru, uk)` makes those ids usable as strings too. Every Latin and Cyrillic locale spells `&`, `%`, `$` and `£` in its language: `slugify("50% off", { locale: "de" })` is `"50-prozent-off"`, without a locale `"50-off"`.
|
|
93
|
+
Locale ids: `az ca cs da de es et fi fr hr hu is it lt lv nb nl pl pt ro sk sl sv tr vi`. Locale objects: those plus `be bg kk mk ru sr uk` (Cyrillic) and `el he hi ja ko` (Greek, Hebrew, Devanagari, kana, Hangul), `bn pa gu or ta te kn ml si` (Bengali, Gurmukhi, Gujarati, Odia, Tamil, Telugu, Kannada, Malayalam, Sinhala) and `th lo km my` (Thai, Lao, Khmer, Burmese). `registerLocale(ru, uk)` makes those ids usable as strings too. Every Latin and Cyrillic locale spells `&`, `%`, `$` and `£` in its language: `slugify("50% off", { locale: "de" })` is `"50-prozent-off"`, without a locale `"50-off"`.
|
|
93
94
|
|
|
94
95
|
### Unicode slugs
|
|
95
96
|
|
|
@@ -172,7 +173,7 @@ transliterate("नमस्ते 你好") // "नमस्ते 你好" — un
|
|
|
172
173
|
transliterate("final x² Ⅷ", { nfkc: true }) // "final x2 VIII"
|
|
173
174
|
```
|
|
174
175
|
|
|
175
|
-
Tables: `latin symbols cyrillic cyrillicUk cyrillicBg cyrillicMk cyrillicSr greek arabic persian urdu pashto armenian georgian dhivehi hebrew devanagari bengali gurmukhi gujarati oriya tamil telugu kannada malayalam hangul kana`, plus `allScripts`. Where a letter is spelled differently at the start of a word (Armenian `ե`, Ukrainian `є ї й ю я`), the capital carries the word-initial form. Devanagari and the other Indic scripts are romanised syllable by syllable (inherent `a`, no vowel length, no schwa deletion: `भारत` is `bharata`), Hangul jamo by jamo (Revised Romanization without sound-change rules, so `한국어` is `hangukeo`), kana with Hepburn (the long-vowel mark and sokuon are dropped); kanji and Han are left as they are. `defineLocale` and `mergeTables` return new objects — nothing global is ever mutated.
|
|
176
|
+
Tables: `latin symbols cyrillic cyrillicUk cyrillicBg cyrillicMk cyrillicSr greek arabic persian urdu pashto armenian georgian dhivehi hebrew devanagari bengali gurmukhi gujarati oriya tamil telugu kannada malayalam sinhala thai lao khmer myanmar hangul kana`, plus `allScripts`. Where a letter is spelled differently at the start of a word (Armenian `ե`, Ukrainian `є ї й ю я`), the capital carries the word-initial form. Devanagari and the other Indic scripts are romanised syllable by syllable (inherent `a`, no vowel length, no schwa deletion: `भारत` is `bharata`; Sinhala `කොළඹ` is `kolamba`), Hangul jamo by jamo (Revised Romanization without sound-change rules, so `한국어` is `hangukeo`), kana with Hepburn (the long-vowel mark and sokuon are dropped); kanji and Han are left as they are. The Thai, Lao, Khmer and Myanmar tables need context, so besides letters they carry rules (a table key starting with U+0001 is a regular expression, its value the replacement). Thai follows the Royal Thai General System without tone marks or vowel length: the vowels written before the consonant (`เ แ โ ใ ไ`) move behind it, a consonant is read as initial or final from its neighbours, a bare consonant takes `a` or, before the final, `o`, and silent letters under `์` are dropped (`ไทย` is `thai`, `เมือง` is `mueang`, `โรงเรียน` is `rongrian`, `กรุงเทพ` is `krungthep`). Lao uses the same logic with a simple BGN/PCGN-style spelling (`ວຽງຈັນ` is `viangchan`), Khmer reads each vowel sign by the series of its base consonant, UNGEGN-style (`ភ្នំពេញ` is `phnumpenh`, `កម្ពុជា` is `kampuchea`), and Myanmar keeps the inherent `a` unless the asat, a vowel sign or a stacked consonant follows (`မြန်မာ` is `myanma`, `ရန်ကုန်` is `yankun`). None of them has a dictionary or word segmentation: words are not split, the repetition mark `ๆ` is dropped, and irregular spellings, linking syllables (`พัทยา` is `phatya`, not `phatthaya`), Khmer and Lao silent letters and the Myanmar rhyme and tone rules are not handled, so output is a deterministic transcription of the spelling rather than of the pronunciation. `defineLocale` and `mergeTables` return new objects — nothing global is ever mutated.
|
|
176
177
|
|
|
177
178
|
## URL toolkit
|
|
178
179
|
|
|
@@ -253,7 +254,39 @@ iriToUri("http://例え.jp/résumé", { host: "punycode" }) // "http://xn--r8jz4
|
|
|
253
254
|
`uriToIri(uri)` — decodes only what §3.2 allows, per component.
|
|
254
255
|
`punycodeEncode` `punycodeDecode` `domainToAscii` `domainToUnicode` — RFC 3492, no dependencies. `domainToAscii` maps and lowercases labels the way UTS #46 does, then rejects what no DNS name may carry: empty labels, labels over 63 octets, names over 253, leading or trailing hyphens, non-LDH characters and `xn--` labels that do not round-trip.
|
|
255
256
|
|
|
256
|
-
Deliberately not implemented: RFC 6874 IPv6 zone identifiers (reverted by RFC 9844)
|
|
257
|
+
Deliberately not implemented: RFC 6874 IPv6 zone identifiers (reverted by RFC 9844) and the network-based normalisation of §6.2.4. The UTS #46 status table, CONTEXTJ/CONTEXTO and the RFC 5893 bidi rule live in the optional `cizgile/uri/idna` entry below, so `cizgile/uri` stays small.
|
|
258
|
+
|
|
259
|
+
### Full IDNA (`cizgile/uri/idna`)
|
|
260
|
+
|
|
261
|
+
`domainToAscii` in `cizgile/uri` approximates UTS #46: it removes format characters, applies NFKC and lowercases, so it does not know which code points are disallowed, ignored or deviations, and it does not check joiners or the bidi rule. `cizgile/uri/idna` carries the real Unicode 16.0.0 table (about 45 KB minified, which is why it is a separate import) and passes every case of the official `IdnaTestV2.txt`, nontransitional and transitional, down to the error codes.
|
|
262
|
+
|
|
263
|
+
```ts
|
|
264
|
+
import { idnaToAscii, idnaToUnicode, idnaToAsciiResult } from "cizgile/uri/idna"
|
|
265
|
+
|
|
266
|
+
idnaToAscii("Bücher.DE") // "xn--bcher-kva.de"
|
|
267
|
+
idnaToAscii("faß.de", { transitionalProcessing: true }) // "fass.de"
|
|
268
|
+
idnaToUnicode("xn--r8jz45g.jp") // "例え.jp"
|
|
269
|
+
idnaToAscii("a_b.com", { beStrict: true }) // throws RangeError: "a_b.com" is not valid (U1)
|
|
270
|
+
idnaToAsciiResult("aא") // { result: "xn--a-...", errors: ["B5", "B6"] }
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
`idnaToAscii` and `idnaToUnicode` throw a `RangeError` that lists the error codes, like `domainToAscii`. `idnaToAsciiResult` and `idnaToUnicodeResult` never throw: they return `{ result, errors }` with the best-effort result and every UTS #46 code (`P4`, `V1` to `V7`, `U1`, `B1` to `B6`, `C1`, `C2`, `A3`, `A4_1`, `A4_2`, `X4_2`, and `O1` for CONTEXTO). `codePointStatus(cp)` exposes the table itself.
|
|
274
|
+
|
|
275
|
+
Options default to the WHATWG URL Standard's domain to ASCII:
|
|
276
|
+
|
|
277
|
+
| option | default | effect |
|
|
278
|
+
| ------------------------ | ------- | ---------------------------------------------------------------------------------------- |
|
|
279
|
+
| `beStrict` | `false` | turns on `useSTD3ASCIIRules`, `checkHyphens` and `verifyDnsLength` unless set explicitly |
|
|
280
|
+
| `useSTD3ASCIIRules` | `false` | only `a-z`, `0-9`, `-` among ASCII characters (`U1`) |
|
|
281
|
+
| `checkHyphens` | `false` | no `--` in positions 3 and 4, no hyphen at either end (`V2`, `V3`) |
|
|
282
|
+
| `checkBidi` | `true` | RFC 5893 rules 1 to 6 for every label of a bidi domain name (`B1` to `B6`) |
|
|
283
|
+
| `checkJoiners` | `true` | RFC 5892 CONTEXTJ for U+200C and U+200D (`C1`, `C2`) |
|
|
284
|
+
| `checkContextO` | `false` | RFC 5892 A.3 to A.9: middle dot, keraia, geresh, gershayim, katakana middle dot, digits |
|
|
285
|
+
| `transitionalProcessing` | `false` | IDNA2003 mapping of `ß`, `ς`, U+200C, U+200D (deprecated) |
|
|
286
|
+
| `verifyDnsLength` | `false` | labels 1 to 63, name 1 to 253 without the root dot (`A4_1`, `A4_2`; `X4_2` in ToUnicode) |
|
|
287
|
+
| `ignoreInvalidPunycode` | `false` | keep an undecodable `xn--` label instead of `P4` |
|
|
288
|
+
|
|
289
|
+
Unicode 16 folded the old `disallowed_STD3_*` statuses into the validity criteria, so the table has five statuses and `useSTD3ASCIIRules` is a plain check. `String.prototype.normalize` (NFC) comes from the runtime; everything else is data generated by `scripts/gen-idna.mjs`, which also refreshes the test fixture. CONTEXTO is not part of UTS #46 and `IdnaTestV2.txt` does not test it, so `checkContextO` is separate from `beStrict`.
|
|
257
290
|
|
|
258
291
|
</details>
|
|
259
292
|
|
package/dist/idna.d.mts
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
//#region src/idna/data.d.ts
|
|
2
|
+
/** The Unicode version of the tables behind `cizgile/uri/idna`. */
|
|
3
|
+
export declare const IDNA_UNICODE_VERSION = "16.0.0";
|
|
4
|
+
//#endregion
|
|
5
|
+
//#region src/idna/process.d.ts
|
|
6
|
+
/** Options of the UTS #46 processing. The defaults are those of the WHATWG URL Standard's domain to ASCII. */
|
|
7
|
+
interface IdnaOptions {
|
|
8
|
+
/** Turn on `useSTD3ASCIIRules`, `checkHyphens` and `verifyDnsLength` unless they are set explicitly. Default `false`. */
|
|
9
|
+
beStrict?: boolean;
|
|
10
|
+
/** Only `a-z`, `0-9` and `-` among ASCII characters (error `U1`). Default `false`, or `true` with `beStrict`. */
|
|
11
|
+
useSTD3ASCIIRules?: boolean;
|
|
12
|
+
/** No hyphen in positions 3 and 4 and none at either end (`V2`, `V3`); when off, a label may not start with `xn--` (`V4`). Default `false`, or `true` with `beStrict`. */
|
|
13
|
+
checkHyphens?: boolean;
|
|
14
|
+
/** The RFC 5893 bidi rule for labels of a bidi domain name (`B1` to `B6`). Default `true`. */
|
|
15
|
+
checkBidi?: boolean;
|
|
16
|
+
/** RFC 5892 CONTEXTJ: where U+200C and U+200D may appear (`C1`, `C2`). Default `true`. */
|
|
17
|
+
checkJoiners?: boolean;
|
|
18
|
+
/** RFC 5892 CONTEXTO, appendix A.3 to A.9: middle dot, keraia, geresh, gershayim, katakana middle dot, Arabic-Indic digits (`O1`). Not part of UTS #46. Default `false`. */
|
|
19
|
+
checkContextO?: boolean;
|
|
20
|
+
/** Map `ß`, `ς`, U+200C and U+200D the IDNA2003 way (deprecated). Default `false`. */
|
|
21
|
+
transitionalProcessing?: boolean;
|
|
22
|
+
/** Label length 1 to 63, name length 1 to 253 without the root dot (`A4_1`, `A4_2`), and empty labels in `idnaToUnicode` (`X4_2`). Default `false`, or `true` with `beStrict`. */
|
|
23
|
+
verifyDnsLength?: boolean;
|
|
24
|
+
/** Keep an `xn--` label whose Punycode does not decode as it is instead of reporting `P4`. Default `false`. */
|
|
25
|
+
ignoreInvalidPunycode?: boolean;
|
|
26
|
+
}
|
|
27
|
+
/** The outcome of UTS #46 processing: the converted domain, always produced, and the error codes it recorded. */
|
|
28
|
+
interface IdnaResult {
|
|
29
|
+
/** The converted domain, as far as processing got. */
|
|
30
|
+
readonly result: string;
|
|
31
|
+
/** Error codes such as `V7`, `B1`, `C1` or `A4_2`, sorted; empty when the domain is valid. */
|
|
32
|
+
readonly errors: readonly string[];
|
|
33
|
+
}
|
|
34
|
+
/** UTS #46 ToASCII: maps, normalizes, validates and Punycode-encodes `domain`, and reports every error code instead of throwing. `result` is produced even when `errors` is not empty. */
|
|
35
|
+
export declare function idnaToAsciiResult(domain: string, options?: IdnaOptions): IdnaResult;
|
|
36
|
+
/** UTS #46 ToUnicode: maps, normalizes, validates and decodes the `xn--` labels of `domain`, and reports every error code instead of throwing. */
|
|
37
|
+
export declare function idnaToUnicodeResult(domain: string, options?: IdnaOptions): IdnaResult;
|
|
38
|
+
/**
|
|
39
|
+
* UTS #46 ToASCII with the full Unicode 16 status table. Unlike `domainToAscii` in `cizgile/uri` it knows every valid, ignored, mapped, deviation and disallowed code point, and checks CONTEXTJ and the bidi rule.
|
|
40
|
+
* @throws {RangeError} when processing records an error; the message lists the codes.
|
|
41
|
+
*/
|
|
42
|
+
export declare function idnaToAscii(domain: string, options?: IdnaOptions): string;
|
|
43
|
+
/**
|
|
44
|
+
* UTS #46 ToUnicode with the full Unicode 16 status table.
|
|
45
|
+
* @throws {RangeError} when processing records an error; the message lists the codes.
|
|
46
|
+
*/
|
|
47
|
+
export declare function idnaToUnicode(domain: string, options?: IdnaOptions): string;
|
|
48
|
+
//#endregion
|
|
49
|
+
//#region src/idna/tables.d.ts
|
|
50
|
+
/** The UTS #46 status of a code point and, for `mapped` and `deviation`, what it maps to. */
|
|
51
|
+
type CodePointStatus = {
|
|
52
|
+
readonly status: "valid" | "ignored" | "disallowed";
|
|
53
|
+
} | {
|
|
54
|
+
readonly status: "mapped" | "deviation";
|
|
55
|
+
readonly to: readonly number[];
|
|
56
|
+
};
|
|
57
|
+
/** Looks up the UTS #46 status of one code point. */
|
|
58
|
+
export declare function codePointStatus(cp: number): CodePointStatus;
|
|
59
|
+
//#endregion
|
|
60
|
+
export type { CodePointStatus, IdnaOptions, IdnaResult };
|
package/dist/idna.mjs
ADDED
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
import { i as punycodeEncode, r as punycodeDecode } from "./shared/punycode-MAFJqHdd.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/idna/data.ts
|
|
4
|
+
/** The Unicode version of the tables behind `cizgile/uri/idna`. */
|
|
5
|
+
const IDNA_UNICODE_VERSION = "16.0.0";
|
|
6
|
+
const MAPPING = "V1tMq.wV11XwM1.-3kV7Tw.lkV1M1.-21V2I1V1Tw.lgV2M2.-3kTw.ldM1.ljV2Tw.mfM1.-3sM1.-23V1T1d.6dg.1gT1d.6dg.1eT1f.6dg.1gV1Mn.wV1M7.wE37.37VwPo.1T2x.ljV1T2x.2yT2x.2yP2.1V1P3.1T30.53T30.53P4.1Tjg.32Pn.1M1.-3dP3.1M1.-7gV1M1.5uP2.1M1.5qM1.1V1M2.5pM1.1V2M1.27M1.5mM1.5nM1.1V1M1.5pM1.5rV1M1.5vM1.5tM1.1V3M1.5vM1.5xV1M1.5yP3.1M1.62M1.1V1M1.62V2M1.1V1M1.62M1.1V1M2.61P2.1M1.63M1.1V3M1.1V7T2s.amT2s.amT2s.amT30.2yT30.2yT30.2yT32.2yT32.2yT32.2yP8.1V1P9.1V1T2s.3eT2s.3eT2s.3eM1.1V1M1.-2pM1.-1kPk.1M1.-3mV1P9.1V6M1.8bvM1.1V1M1.-4jM1.8bsV2M1.1V1M1.-5fM1.1xM1.1zP5.1V2oM1.-g8M1.-23M1.-g8M1.-g1M1.-1nM1.-1mM1.-1hM1.-g0M1.-fzVvTw.liTw.ljTw.lmTw.mgTw.lfTw.lnV2M1.-3hM1.-hhM1.-hbM1.-h7M1.-27V2jM2.-1sV1M1.-1cTlk.ldM1.38V9I1VwP2.1M1.-57V1M1.1V1X2Tw.qhV3M1.-n7M1.38X4Tw.ldTw.lk.ldM1.12M1.-k0M3.11X1M1.1sX1M2.1rV1Mh.wX1M9.wVmEqrVcM1.8M1.-uM1.-pM1.-dM1.-6M1.-9M1.-fM1.-mV1Pc.1M1.-1iM1.-1cM1.-1bV1M1.-1oM1.-1sV1M1.1V1M1.-1iM1.1V2M3.-3mMg.28Mw.wV1cPh.1V8Pr.1M1.fP7.1V1P1c.1X1M12.1cX2V1aT12d.136V3X2V3X1V1jX8VrX4V6XhVmX1V2gT17r.19wT18o.19wT1c7.19wT18q.19wV2sX1V1cX2V1nX2V2tXeV1nX2V1dX2VfX1VsX2V1X1VbX5VvX8V23X1V39T1sl.1toT1sm.1toT1sn.1toT1ss.1toT1sx.1toT1sy.1toT1t7.1toT1tb.1toV10X1V8X2V2X2VmX1V7X1V1X3V4X2V9X2V2X2V4X8V1X4T1wh.1x8T1wi.1x8X1T1wv.1x8V4X2VpX2V3X1V6X4V2X2VmX1V7X1V1T20i.20sX1V1T20o.20sX1V2X2V1X1V5X4V2X2V3X3V1X7T1zq.20sT1zr.20sT1zw.20sV1X1T20b.20sX7VhXaV3X1V9X1V3X1VmX1V7X1V2X1V5X2VaX1V3X1V3X2V1XfV4X2VcX7V7X1V3X1V8X2V2X2VmX1V7X1V2X1V5X2V9X2V2X2V3X7V3X4T275.27wT276.27wX1V5X2ViXaV2X1V6X3V3X1V4X3V2X1V1X1V2X3V2X3V3X3VcX4V5X3V3X1V4X2V1X6V1XeVlX5VdX1V3X1VnX1VgX2V9X1V3X1V4X7V2X1V3X2V1X2V4X2VaX7VmX1V3X1VnX1VaX1V5X2V9X1V3X1V4X7V2X6V2X1V4X2VaX1V3XcVdX1V3X1V1fX1V3X1V6X4VgX2VqX1V3X1ViX3VoX1V9X1V1X2V7X3V1X4V6X1V1X1V8X6VaX2V3XcV1eT2tp.2syV7X4VtX11V2X1V1X1V5X1VoX1V1X1VcT2x9.2wiVaX2V5X1V1X1V7X1VaX2T2wb.2vtT2wb.2w1V2XwVcM1.-1V1iT30i.33rV4X1V4T30s.33rV4T30x.33rV4T312.33rV4T317.33rVcT30g.33pV3X4V2T31t.31uV1T31t.31wT33m.328T33m.31t.328T33n.328T33n.31t.328V7T31t.328VhT32q.33rV4X1V4T330.33rV4T335.33rV4T33a.33rV4T33f.33rVcT32o.33pV3X1VfX1VdX11V4gM12.5lsX1M1.5lsX5M1.5lsX2V18M1.-wV2qI2V6gX1V4X2V7X1V1X1V4X2V15X1V4X2VxX1V4X2V7X1V1X1V4X2VfX1V1lX1V4X2V1vX2VwX3VqX6V2eX2M6.-8X2VhsX1VsX3V2hX7VmX9VoX9VkXcVdX1V3X1V2XcV1gI2V14X2VaX6VaX6VbI5VaX6V2hX7V17X5V1yXaVvX1VcX4VcX4V1X3V16X2V5XbV18X4VqX6VbX3V1qX2V1tX1VtX2VbX6VaX6VeX2VvX1dV25X1V4mX8V1oX3VfX3V1fM1.-4suM1.-4stM1.-4skM2.-4siM1.-4sjM1.-4scM1.-4roM1.r7nM1.1V1X5M17.-2bkX2M3.-2bkV8X8V17X5V18M1.-5orM1.-5l3M1.-5osV1M2.-5osM1.-5edM8.-5osV1M1.-5otM1.-5cqM1.-5ouM1.-5otM2.-5osM1.-5orM1.-5peM2.-5boM1.-1wM1.-5phM2.-5pgM1.-5blM2.-5bkM1.-5piV1M1.-5pgM1.-5pfM1.-5jaM1.-5pfM1.-5bzM2.-1qM1.-5piM2.-5pfM1.-1oM1.-5bfM1.-5phM1.-1jM3.-52jM2.-522M1.-5q1M1.-5ptM2.-5prM2.-52sM1.-52fM2.-52bVdM1.-4zfVyM1.-5e1M1.-5rtM1.-5e0M1.-5nyM1.-5dvM1.-5ruM1.-5duM1.-5dtM1.-5dqM3.-5doM1.-18M1.-5cbM1.-5doM1.-11M1.-5ccM1.-5dnM1.-5dpM4.-5doM1.-5dmM2.-5ddM1.-5jeM2.-5d9M1.-4cM2.-5daM1.-5s1M3.-5d8M1.-553V1sP23.1V4T2p.jiM1.-1mV2M1.-5vjV1P1c.1V8M8.-8V6X2M6.-8X2V8M8.-8V8M8.-8V6X2M6.-8X2V8X1M1.-8X1M1.-8X1M1.-8X1M1.-8V8M8.-8V1M1.-5hhV1M1.-5hiV1M1.-5hjV1M1.-5hkV1M1.-5gtV1M1.-5guV1M1.-5gvX2T64g.qhT64h.qhT64i.qhT64j.qhT64k.qhT64l.qhT64m.qhT64n.qhT64g.qhT64h.qhT64i.qhT64j.qhT64k.qhT64l.qhT64m.qhT64n.qhT65c.qhT65d.qhT65e.qhT65f.qhT65g.qhT65h.qhT65i.qhT65j.qhT65c.qhT65d.qhT65e.qhT65f.qhT65g.qhT65h.qhT65i.qhT65j.qhT674.qhT675.qhT676.qhT677.qhT678.qhT679.qhT67a.qhT67b.qhT674.qhT675.qhT676.qhT677.qhT678.qhT679.qhT67a.qhT67b.qhV2T67k.qhTq9.qhTq4.qhX1V1T69i.qhM2.-8M1.-22M1.-5jjTq9.qhTw.lvM1.-5j9Tw.lvTw.n6Tw.lk.n6T67o.qhTqf.qhTq6.qhX1V1T69y.qhM1.-2eM1.-5jwM1.-2eM1.-5jxTqf.qhTw.lv.lcTw.lv.ldTw.lv.n6V3M1.-5kzX2V2M2.-8M1.-2sM1.-5kcX1Tw.lw.lcTw.lw.ldTw.lw.n6V3M1.-5kjV4M2.-8M1.-34M1.-5jyM1.-7Tw.lk.lcTw.lk.ldM1.-68fX2T67w.qhTqx.qhTr2.qhX1V1T6ba.qhM1.-3kM1.-5kdM1.-3iM1.-5kdTqx.qhTw.ldTw.lwX1M1.-6aoM1.-6apM1.-6aqM1.-6arM1.-6asM1.-6atM1.-6auM1.-6avM1.-6awM1.-6axM1.-6ayI1EEX2V1M1.-1V5Tw.mrVcX3V1X7M1.-6bzV3T6cy.6cyT6cy.6cy.6cyV1T6d1.6d1T6d1.6d1.6d1V4Tx.xV1Tw.lhV8T1r.1rT1r.xTx.1rVdT6cy.6cy.6cy.6cyV7M1.-6dbI5X5I6M1.-6dcM1.-6bsX2M6.-6dcM1.-6drM1.bbM1.-6dbM2.-6dxM1.-6c1Ma.-6dsM1.-6e7M1.avM1.-6drM2.-6edX1M1.-6cvM1.-6csM1.-6cjM1.-6cbM1.-5yzM1.-6ctM4.-6crM1.-6cqM2.-6coX3V8T36.37VoXfVxXfT2p.1b.2rT2p.1b.37M1.-6fzT4w.2rV1T2r.1b.33T2r.1b.39M1.-624V1T4w.2uM2.-6g3M1.-6g4M1.-6g5M1.-6g6M1.-6awM1.-6g7M1.-6g8M1.-6g6M1.-6g7V1M1.-6g7T32.33V2M3.-6g9M1.-6gaM1.-6gbV2T37.31T38.2t.30T38.31V1M1.-6gaV1M1.-5stV1M1.-6geV1M1.-6gvM1.-6diM2.-6h6V1M1.-6h6M2.-6h7M1.sM1.-6h2M1.-6h1M4.-5etM1.-6hcV1T2u.2p.3cM1.-5toM1.-5u2M1.-5u3M1.-5trM1.5tV4M1.-6htM2.-6huM2.-6hrV6T1d.6dg.1jT1d.6dg.1lT1d.6dg.1d.1cT1d.6dg.1fT1e.6dg.1fT1d.6dg.1hT1e.6dg.1hT1f.6dg.1hT1g.6dg.1hT1d.6dg.1iT1h.6dg.1iT1d.6dg.1kT1f.6dg.1kT1h.6dg.1kT1j.6dg.1kT1d.6dgM1.-6ifT2x.2xT2x.2x.2xT2x.3aM1.-6i6T3a.2xT3a.2x.2xT3a.2x.2x.2xT2x.3cM1.-6i9T3c.2xT3c.2x.2xM1.-6ioM2.-6iyM1.-6iqM1.-6ivT2x.2xT2x.2x.2xT2x.3aM1.-6imT3a.2xT3a.2x.2xT3a.2x.2x.2xT2x.3cM1.-6ipT3c.2xT3c.2x.2xM1.-6j4M2.-6jeM1.-6j6V3M1.1V5T1c.6dg.1fV2X4V4cT6qz.6qzT6qz.6qz.6qzV1T6r2.6r2T6r2.6r2.6r2V6wM2.2jjV73XmVbXlM9.-75bT1d.1cT1d.1dT1d.1eT1d.1fT1d.1gT1d.1hT1d.1iT1d.1jT1d.1kT1d.1lT1e.1cT14.1d.15T14.1e.15T14.1f.15T14.1g.15T14.1h.15T14.1i.15T14.1j.15T14.1k.15T14.1l.15T14.1d.1c.15T14.1d.1d.15T14.1d.1e.15T14.1d.1f.15T14.1d.1g.15T14.1d.1h.15T14.1d.1i.15T14.1d.1j.15T14.1d.1k.15T14.1d.1l.15T14.1e.1c.15XkT14.2p.15T14.2q.15T14.2r.15T14.2s.15T14.2t.15T14.2u.15T14.2v.15T14.2w.15T14.2x.15T14.2y.15T14.2z.15T14.30.15T14.31.15T14.32.15T14.33.15T14.34.15T14.35.15T14.36.15T14.37.15T14.38.15T14.39.15T14.3a.15T14.3b.15T14.3c.15T14.3d.15T14.3e.15Mq.-76dMq.-773M1.-796V10hT6qz.6qz.6qz.6qzV2vT1m.1m.1pT1p.1pT1p.1p.1pV2tT8gt.mwV47X2VwX1V2xM1c.1cV1cM1.1V1M1.-8afM1.-2xyM1.-89zV2P3.1M1.-8bgM1.-8alM1.-8bjM1.-8biV1M1.1V2M1.1V6M1.-8peM1.-8p3M2.-8cfP1e.1V7P2.1V3M1.1V1X5V19X1V1X5V1X2V1kX7M1.-eV1XeVoX9V7X1V7X1V7X1V7X1V7X1V7X1V7X1V7X1V3iXyVqX1V4M1.c32V2bM1.m98XcM1.64gM1.65jM1.65wM1.664M1.66tM1.680M1.686M1.68pM1.69eM1.6raM1.6sbM1.6sgM1.6t2M1.6tlM1.6u5M1.6vlM1.6w5M1.6wfM1.70pM1.73aM1.741M1.745M1.74yM1.756M1.75wM1.768M1.76wM1.78bM1.78sM1.79iM1.7uhM1.7wgM1.897M1.89tM1.8a0M1.8aaM1.8arM1.8cuM1.8q2M1.8rdM1.8uoM1.8vaM1.8vsM1.8wdM1.8xuM1.8xwM1.97xM1.986M1.98hM1.98tM1.9c0M1.9c7M1.9cbM1.9fjM1.9fsM1.9g4M1.9gbM1.9hzM1.9ifM1.9iwM1.9l3M1.a17M1.a2gM1.a30M1.anjM1.annM1.apxM1.aqcM1.aqoM1.ar8M1.asaM1.aseM1.azsM1.b0fM1.b1aM1.bthM1.bvaM1.bvwM1.bxhM1.by4M1.bycM1.byiM1.bzxM1.c01M1.c0wM1.cuuM1.d78M1.d7jM1.d7nM1.d7qM1.d7xM1.d8eM1.d8fM1.danM1.dgmM1.dgqM1.dq4M1.dqdM1.drqM1.drwM1.ds4M1.dsbM1.dutM1.duzM1.e1aM1.e1gM1.e2sM1.e38M1.e4iM1.eb2M1.eb8M1.eboM1.ekqM1.eo7M1.eocM1.etdM1.evrM1.ex0M1.f7hM1.fb5M1.fr2M1.frsM1.ftcM1.fuqM1.fwlM1.fwvM1.fx0M1.fxwM1.fzzM1.g08M1.g9tM1.g9zM1.ga7M1.gafM1.gauM1.gb8M1.gbbM1.gdhM1.gdkM1.gdpM1.h4xM1.h5qM1.hiqM1.hj1M1.hjnM1.hrhM1.hrtM1.htrM1.hv0M1.iaqM1.ib4M1.ibiM1.icgM1.idgM1.iiyM1.ij9M1.il3M1.iryM1.issM1.iykM1.iz4M1.iz8M1.j5bM1.jaeM1.jduM1.jdzM1.je3M1.k40M1.k48M1.k8jM1.kcsM1.kcuM1.ke4M1.kh0M1.khcM1.khfM1.khlM1.kkaM1.kl7M1.klcM1.klpM1.kqbM1.krpM1.krsM1.kwuM1.kwwM1.kxeM1.l4dM1.l5oM1.l5uM1.l7rM1.l80M1.l82M1.l8bM1.l94M1.lk2M1.lv5M1.lveM1.lwfM1.lx0M1.lx7M1.lxgM1.lxjM1.lymM1.lypM1.lz5M1.lz9M1.lzlM1.m0bM1.m0pM1.m0wM1.m2iM1.m2wM1.m2zX16M1.-9ggV1M1.-9g4V1fM1.-10V1M1.6x5M2.6x7V5X1V2eX2V2Tw.9llTw.9lmV2T9l4.9l6V2nT9mb.9mwX5V17X1M2.-6cxM1.-689M1.-6cyM2.-689M3.-6d0M6.-68aM1.-6cmM3.-6d7M1.-6cjMa.-6d8Ml.-6b2I1M2.-6dtM2.-68wM1.-68tM1.-68sM1.-68oM1.-68lM1.-68kM1.-6duM1.-68iM1.-68hM2.-6dwM1.-6dvM2.-6duM1.-6drM1.-6dqM5.-6dpM1.-6dnM1.-6dkM1.-6dbM1.-6d5M1.-6d1M2.-68hM3.-6ctM2.-6bnM1.-6blM2.-6bdM1.-6bcM1.-6b3M1.-6b1X1V2M1.5m6M1.5q1M1.5mdM1.7d2M1.5mcM1.5naM1.5mbM1.dcpM1.5ofM1.5mmM1.5lxM1.7t8M1.7f6M1.5qzV1yXaVgT14.3cw.15T14.3cy.15T14.3cz.15T14.3d1.15T14.3d2.15T14.3d3.15T14.3d5.15T14.3d7.15T14.3d8.15T14.3da.15T14.3db.15T14.3dc.15T14.3dd.15T14.3de.15T14.xz4.15T14.yvs.15T14.zc4.15T14.108s.15T14.10p4.15T14.115g.15T14.1224.15T14.12ys.15T14.13f4.15T14.14bs.15T14.14s4.15T14.158g.15T14.15os.15T14.1654.15T14.13p8.15T14.1350.13ic.15T14.1350.16f8.15X1T14.feo.15T14.fik.15T14.fex.15T14.h5n.15T14.fis.15T14.g31.15T14.fer.15T14.g2z.15T14.fh9.15T14.gg1.15T14.kco.15T14.m7f.15T14.ldg.15T14.kdk.15T14.ssx.15T14.h7j.15T14.k4l.15T14.kkq.15T14.kcp.15T14.ny6.15T14.glp.15T14.mm1.15T14.rs1.15T14.nz1.15T14.gc4.15T14.fkz.15T14.gos.15T14.i1y.15T14.nhf.15T14.flt.15T14.rt3.15T14.ggk.15T14.nzh.15T14.fm9.15T14.pnu.15T14.po3.15M1.6x7M1.8qfM1.a4hM1.eh4V8T34.38.2tT1e.1dT1e.1eT1e.1fT1e.1gT1e.1hT1e.1iT1e.1jT1e.1kT1e.1lT1f.1cT1f.1dT1f.1eT1f.1fT1f.1gT1f.1hM1.-6lcM2.-6lbM3.-6laM1.-6l9M2.-6l8M5.-6l7M1.o0iM1.ox5M1.pdgM1.qa3M1.qqeM1.r6pM1.s3cM1.szzM1.tgaM1.ucxM1.ut8M1.v9jM1.vpuM1.w65T14c8.y5cT13p8.13dkM1.t9uV1M1.5fkM1.5jfM1.5frM1.76gM1.5jkM1.63sM1.5fhM1.63oM1.5hxM1.6goM1.adaM1.c80M1.be0M1.ae3M1.itfM1.780M1.a51M1.al5M1.ad3M1.dyjM1.6m1M1.cmcM1.hsbM1.dzaM1.6ccM1.e2nM1.d5pM1.7o8M1.ij1M1.619M1.6heM1.bihM1.k11M1.5m8M1.647M1.b7kM1.5euM1.5fsM1.5etM1.8jjM1.6krM1.6fmM1.831M1.81nM1.dh3M1.5lgM1.hspM1.6g5M1.7l8T1f.1iT1f.1jT1f.1kT1f.1lT1g.1cT1g.1dT1g.1eT1g.1fT1g.1gT1g.1hT1g.1iT1g.1jT1g.1kT1g.1lT1h.1cT1d.kcoT1e.kcoT1f.kcoT1g.kcoT1h.kcoT1i.kcoT1j.kcoT1k.kcoT1l.kcoT1d.1c.kcoT1d.1d.kcoT1d.1e.kcoT2w.2vT2t.36.2vT2t.3aT30.38.2sM1.-fiM1.-fhM1.-fgM1.-ffM2.-feM1.-fdM1.-fcM1.-fbM1.-faM1.-f9M1.-f8M1.-f7M1.-f6M1.-f5M1.-f4M1.-f3M1.-f1M1.-f0M1.-ezM6.-eyM1.-ewM1.-euM1.-esM1.-eqM5.-eoM1.-enM1.-emM6.-elM4.-ekTfl0.gp8T9lu.9n5.9oc.9mwT9lu.9nv.9n9.9ltT9lu.9o3.9ne.9luT9lu.9oc.9nvT9lw.9mz.9o3.9m8T9lw.9o3.9mpT9ly.9m1.9o3T9m0.9mh.9m7.9oc.9mxT9m0.9oc.9m3.9ocT9m2.9o3.9mhT9m2.9oc.9nkT9m3.9lw.9nuT9m3.9nt.9mr.9mwT9m3.9nx.9nu.9ocT9m4.9nx.9o3T9m4.9o3.9niT9m6.9m4T9m6.9mz.9ocT9m5.9np.9nu.9ocT9m6.9nv.9mo.9ocT9m5.9nxT9m5.9nx.9m8.9nt.9nkT9m5.9nx.9nl.9oc.9mw.9nvT9m5.9nx.9nz.9mr.9mwT9m8.9nt.9nkT9m8.9nt.9nk.9mw.9o3T9m7.9nv.9mk.9lw.9nxT9m7.9nx.9oc.9n1T9m9.9oc.9mhT9mb.9nv.9myT9mb.9oc.9nhT9md.9lw.9m7.9nvT9md.9o3.9mp.9oc.9nkT9mf.9nu.9o3.9m8T9mj.9o3.9mpT9mj.9o3.9mwT9mo.9oc.9mhT9mv.9mfT9mx.9nvT9mw.9o3T9my.9n2T9n2.9mr.9mwT9n3.9lw.9msT9n5.9oc.9mj.9o3.9mwT9n5.9oc.9msT9n4.9oc.9nw.9nvT9n8.9lu.9mh.9mw.9nvT9n8.9m7.9nvT9n8.9mbT9n7.9nvT9n9.9lt.9nt.9mr.9mxT9n9.9lv.9oc.9mwT9na.9mr.9mf.9lz.9nvT9n9.9nt.9o3T9nc.9m7.9mn.9oc.9nvT9ne.9mlT9ne.9mz.9n6T9nc.9nv.9msT9ne.9o3.9mhT9ne.9oc.9mgT9nd.9oc.9mnT9nh.9lw.9o3.9mwT9ng.9nv.9mwT9nf.9o3T9nh.9o3.9mxT9nf.9oc.9nvT9nf.9oc.9o3T9ni.9lw.9m7.9nxT9ni.9lw.9nvT9ni.9mr.9n3T9ni.9nv.9m7T9ni.9o3.9mf.9nr.9o3T9nj.9m7.9nx.9o3T9nj.9nuT9nj.9nu.9n4.9oc.9nvT9nl.9m4T9nl.9m4.9mw.9o3T9nl.9oc.9mw.9nvT9no.9oc.9mxT9no.9oc.9nvT9nq.9lu.9o3T9nu.9mr.9mw.9nvT9nu.9ntT9nv.9n8.9ocT9nv.9oc.9na.9nvT9nw.9nkT9nw.9o3.9mw.9ma.9o3T9nz.9mr.9mwT1c.m9lT1d.m9lT1e.m9lT1f.m9lT1g.m9lT1h.m9lT1i.m9lT1j.m9lT1k.m9lT1l.m9lT1d.1c.m9lT1d.1d.m9lT1d.1e.m9lT1d.1f.m9lT1d.1g.m9lT1d.1h.m9lT1d.1i.m9lT1d.1j.m9lT1d.1k.m9lT1d.1l.m9lT1e.1c.m9lT1e.1d.m9lT1e.1e.m9lT1e.1f.m9lT1e.1g.m9lT2w.34.2pT2s.2pT2p.39T2q.2p.36T33.3aT34.2rT2s.31T2s.31.1eT2s.31.1fT2x.39Tinn.jdcTk6l.gp8Thlz.l7nTk5q.lh7Tkkq.irz.fmi.ny6T34.2pT32.2pTqk.2pT31.2pT2z.2pT2z.2qT31.2qT2v.2qT2r.2p.30T2z.2r.2p.30T34.2uT32.2uTqk.2uTqk.2vT31.2vT2z.2vT2w.3eT2z.2w.3eT31.2w.3eT2v.2w.3eT38.2w.3eTqk.30T31.30T2s.30T2z.30T2u.31T32.31Tqk.31T31.31T2r.31T2z.31T31.31.1eT2r.31.1eT31.1eT2z.31.1eT31.31.1fT2r.31.1fT31.1fT2z.31.1fT31.6qd.37T31.6qd.37.1eT34.2pT2z.34.2pT31.34.2pT2v.34.2pT36.2p.2sT36.2p.2s.6qd.37T36.2p.2s.6qd.37.1eT34.37T32.37Tqk.37T31.37T34.3aT32.3aTqk.3aT31.3aT2z.3aT31.3aT34.3bT32.3bTqk.3bT31.3bT2z.3bT31.3bT2z.qxT31.qxX1T2q.35T2r.2rT2r.2sT2r.6qd.2z.2vX1T2s.2qT2v.3dT2w.2pT2w.34T2x.32T2z.2zT2z.31T2z.38T30.31T30.32T30.33.2vT30.3cT31.2qT31.2x.30T31.33.30T34.2wX1T34.34.31T34.36T37.36T37.3aT3b.2qT3a.6qd.31T2p.6qd.31T1d.k4lT1e.k4lT1f.k4lT1g.k4lT1h.k4lT1i.k4lT1j.k4lT1k.k4lT1l.k4lT1d.1c.k4lT1d.1d.k4lT1d.1e.k4lT1d.1f.k4lT1d.1g.k4lT1d.1h.k4lT1d.1i.k4lT1d.1j.k4lT1d.1k.k4lT1d.1l.k4lT1e.1c.k4lT1e.1d.k4lT1e.1e.k4lT1e.1f.k4lT1e.1g.k4lT1e.1h.k4lT1e.1i.k4lT1e.1j.k4lT1e.1k.k4lT1e.1l.k4lT1f.1c.k4lT1f.1d.k4lT2v.2p.30Vm8dX3V1jX9V9oXkPn.1ViPe.1M1.-w2aM1.-w29V2iX8VyP7.1V2Pv.1M1.-1V8P2.1M1.-r9gP5.1V3M1.1V1M1.-wmgV2P2.1V2Pa.1M1.-wn8M1.-wnjM1.-wnfM1.-wn5M1.-wn8V1M1.-wluM1.-wmiM1.-wlxM1.psP8.1M1.-1cM1.-wn7M1.-rawP2.1M1.-wo7M1.1V1X2M1.1V1X1V1X1V1P3.1M1.-wu9XlM1.-x3jM1.-x3hM1.-x37M1.1V2M1.-wy9M1.-wx2V1fX3VaX6V1kX8V1yX8VcX6V38XbVuX3V26X1VbX4VxX1V1jX9VeX2VaX2V2vXoVsXaV6X2V6X2V6X9V7X1V7X1V18M1.-txM1.-12M1.-xdfM1.-dV9M1.-xcsV2X4M28.-tzkV1aX2VaX6V8mcXcVnX4V1dX6isM1.-lh4M1.-sulM1.-kzcM1.-ldnM1.-rarM1.-xqrM1.-wm9M1.-hnvM1.-hnwM1.-vjsM1.-ke1M1.-wasM1.-vk4M1.-tufM1.-pt1M1.-o0aM1.-mohM1.-mdzM1.-m56M1.-kn8M1.-s9eM1.-rneM1.-qwtM1.-qbdM1.-n2zM1.-khbM1.-ispM1.-xp5M1.-wpzM1.-s2hM1.-qo3M1.-mpeM1.-hz6M1.-us1M1.-r3rM1.-ms6M1.-m2oM1.-tp8M1.-nkeM1.-mbsM1.-uhqM1.-suqM1.-rlsM1.-qi7M1.-km6M1.-xifM1.-x2vM1.-wupM1.-tbgM1.-s4eM1.-qoyM1.-pqkM1.-nxvM1.-mr3M1.-moqM1.-l6wM1.-jd2M1.-iiyM1.-i0wM1.-pf3M1.-p8dM1.-of1M1.-n79M1.-k6zM1.-hxdM1.-lt7M1.-vojM1.-ugvM1.-oo4M1.-nuvM1.-qn8M1.-pdpM1.-lfqM1.-jf6M1.-voyM1.-uztM1.-sahM1.-rjnM1.-rb3M1.-oioM1.-obdM1.-jk6M1.-ww0M1.-nuwM1.-x2wM1.-x3dM1.-p4qM1.-oexM1.-n6vM1.-jj8M1.-lp6M1.-tqkM1.-sbeM1.-lsvM1.-xt1M1.-v3sM1.-ua6M1.-qfuM1.-q2aM1.-wukM1.-pd5M1.-xieM1.-ud9M1.-xuiM1.-rrwM1.-t81M1.-ojsM1.-wq0M1.-vtaM1.-prgM1.-n51M1.-lvpM1.-rzqM1.-kw1M1.-ru2M1.-tpxM1.-nf3M1.-tlhM1.-q35M1.-xqhM1.-x73M1.-x4gM1.-smxM1.-olwM1.-nilM1.-luzM1.-khbM1.-wwaM1.-wn2M1.-vm6M1.-ujaM1.-t6mM1.-r5yM1.-pcrM1.-jq1M1.-isdM1.-hypM1.-hx7M1.-wz3M1.-szpM1.-s2dM1.-kyzM1.-umyM1.-u0vM1.-txsM1.-tfbM1.-rcfM1.-qx6M1.-qa3M1.-p8rM1.-of6M1.-nxkM1.-l0yM1.-n1nM1.-ktzM1.-k7lM1.-x39M1.-wzeM1.-wkhM1.-r13M1.-mamM1.-lx3M1.-ul5M1.-ucuM1.-tntM1.-s1jM1.-orsM1.-qiaM1.-xqcM1.-w4wM1.-v5vM1.-usxM1.-uc0M1.-qgrM1.-qbpM1.-o45M1.-nzeM1.-kfxM1.-ji4M1.-jfvM1.-ja4M1.-xm2M1.-pagM1.-kjnM1.-jk0M1.-u6wM1.-xtgM1.-xcxM1.-v66M1.-v3yM1.-t9hM1.-se5M1.-quqM1.-pz3M1.-n2eM1.-ksnM1.-htjM1.-t31M1.-jo8M1.-x1aM1.-swdM1.-st2M1.-rrdM1.-rhrM1.-qf7M1.-q5wM1.-pk3M1.-on3M1.-j8yM1.-x9gM1.-tycM1.-jmjM1.-xihM1.-uykM1.-rn0M1.-l2lM1.-uh9M1.-u51M1.-ssjM1.-qj8M1.-jmeM1.-x4kM1.-wr3M1.-v3uM1.-t71M1.-sybM1.-soqM1.-rumM1.-qfyM1.-q2rM1.-o6lM1.-mc8M1.-mbrM1.-kkdM1.-jk8M1.-wx8M1.-rhuM1.-wr4M1.-qvyM1.-qc7M1.-mwmM1.-jm6M1.-ihnM1.-i1gM1.-swtM1.-roqM1.-npqM1.-p4cM1.-p20M1.-orrM1.-qpmM1.-r4yM1.-lusM1.-xtpM1.-ngoM1.-x51M1.-x6hM1.-uorM1.-tv3M1.-oq5M1.-vb3M1.-rtzM1.-t3mM1.-l3gM1.-mgsM1.-jp8M1.-m7zM1.-unsM1.-xccM1.-wgdV2M1.-vxyV1M1.-t5qV2M1.-x87M1.-qngM1.-pxpM1.-pgcM1.-pffM1.-pf9M1.-pe4M1.-jieM1.-orjM1.-o69V1M1.-mxaV1M1.-lyiV2M1.-kx9M1.-krtV3M1.-j7fM1.-j73M1.-j5wM1.-i9lM1.-kswM1.-jncM1.-xoiM1.-xfuM1.-xd1M1.-x2iM1.-x1sM1.-wysM1.-wihM1.-wflM1.-wcwM1.-vztM1.-vwyM1.-v6fM1.-v66M1.-ucpM1.-u6uM1.-u5tM1.-u32M1.-tf6M1.-tb4M1.-t6aM1.-ssfM1.-rtaM1.-rosM1.-rhhM1.-r16M1.-qvyM1.-qi0M1.-pmiM1.-phqM1.-phgM1.-phiM1.-phbM1.-ph6M1.-ph0M2.-pfpM1.-pasM1.-p90M1.-p06M1.-okjM1.-ojzM1.-oigM1.-oa0M1.-o5yM1.-nsfM1.-nokM1.-nolM1.-nbcM1.-mdsM1.-ma3M1.-m01M1.-lyiM1.-ln5M1.-llpM1.-l2oM1.-kz3M1.-jnpM1.-jfuM1.-je7M1.-ueuM1.1sw2M1.-nrpX2M1.-y16M1.-xbwM1.-xe2M1.-xrnM1.-xf3M1.-xdhM1.-x4fM1.-x31M1.-wkbM1.-wmcM1.-wkhM1.-wihM1.-w0yM1.-vyiM1.-vuiM1.-vu3M1.-vmmM1.-vh5M1.-ur4M1.-uqyM1.-umzM1.-ul4M1.-ucuM1.-u9lM1.-ubkM1.-u7vM1.-u96M1.-u55M1.-u3cM1.-ts9M1.-tpuM1.-todM1.-th6M1.-t99M1.-t4rM1.-t4oM1.-t32M1.-s9oM1.-s7wM1.-rx2M1.-rlpM1.-rm6M1.-rjsM1.-rctM1.-r3iM1.-pvaM1.-qy1M1.-quoM1.-qraM1.-qi8M1.-qe4M1.-qcoM1.-q6fM1.-q6eM1.-q1oM1.-q18M1.-q0kM1.-py7M1.-pyiM1.-pnjM1.-pa3M1.-p2lM1.-oxfM1.-or8M1.-on0M1.-odvM1.-o8dM1.-nkxM1.-nglM1.-mrgM1.-metM1.-mcxM1.-mciM1.-m4aM1.-m2qM1.-m40M1.-m2jM1.-m2nM1.-m35M1.-m12M1.-lyuM1.-lo9M1.-l8qM1.-l01M1.-krvM1.-klrM1.-jt6M1.-jqcM1.-jn6M1.-jjiM1.-jijM1.-ji8M1.-jgxM1.-iwrM1.-i0iM1.1njvM1.1njoM1.1ptwM1.-11rpM1.-10vvM1.-10uzM1.1vucM1.1xx6M1.24n0M1.-i39M1.-i17X12T2u.2uT2u.2xT2u.30T2u.2u.2xT2u.2u.30T37.38T37.38XcT12s.12uT12s.12dT12s.12jT132.12uT12s.12lX5T15l.14kV1T16a.14nM1.-1cfyM1.-1cghM2.-1cgfM3.-1cg9M1.-1cfzM1.-1cfyM1.-1dkuT161.14xT161.14yT161.14s.14xT161.14s.14yT15c.14nT15c.14oT15c.14sT15d.14sT15e.14sT15f.14sT15g.14sT15h.14sT15i.14sX1T15k.14sT15l.14sT15m.14sT15n.14sT15o.14sX1T15q.14sX1T15s.14sT15t.14sX1T15v.14sT15w.14sX1T15y.14sT15z.14sT160.14sT161.14sT162.14sT15h.14pT15d.14vT15n.14vT15w.14vT15c.15oM1.-1cdbM1.-1cdcM1.-1cd3M1.-1cd4M1.-1cd5M1.-1cd6M1.-1cd4M1.-1cd5M1.-1cd6M1.-1cd7M1.-1cd6M1.-1cd7M1.-1cd8M1.-1cd9M1.-1cdgM1.-1cdhM1.-1cdiM1.-1cdjM1.-1cdfM1.-1cdgM1.-1cdhM1.-1cdiM1.-1cdpM1.-1cdqM1.-1cdrM1.-1cdsM1.-1ccmM1.-1ccnM1.-1ccoM1.-1ccpM1.-1ccoM1.-1ccpM1.-1ccqM1.-1ccrM1.-1cdqM1.-1cdrM1.-1cdsM1.-1cdtM1.-1cdvM1.-1cdwM1.-1cdxM1.-1cdyM1.-1cdwM1.-1cdxM1.-1cdyM2.-1cdzM1.-1ce0M1.-1ce1M1.-1ce2M1.-1cdxM1.-1cdyM1.-1ce0M1.-1ce1M1.-1ce0M1.-1ce1M1.-1ce8M1.-1ce9M1.-1cduM1.-1cdvM1.-1ce3M1.-1ce4M1.-1cdhM1.-1cdiM1.-1cdjM1.-1cdkM1.-1cdfM1.-1cdgM1.-1cdhM1.-1cdiM1.-1cdfM1.-1cdgM1.-1cdhM1.-1cdiM1.-1cdlM1.-1cdmM1.-1cdnM1.-1cdoM1.-1cdgM2.-1cdhM1.-1cdiM1.-1cdjM1.-1cdkM1.-1cdgM2.-1cdhM1.-1cdiM1.-1cdjM1.-1cdkM1.-1cdoM1.-1cdpM1.-1cdqM1.-1cdrM1.-1cd8M2.-1cd9M1.-1cdaVhXgM1.-1cfaM1.-1cfbM1.-1cfcM1.-1cfdM1.-1ceoM1.-1cepM1.-1cerM1.-1cesM1.-1cerM1.-1cesT1c7.19wM1.-1cerM1.-1cesM1.-1cezM1.-1cf0M1.-1cexM1.-1ceyM1.-1cesM1.-1cetM1.-1ceuM1.-1cevM1.-1cinM1.-1cioT17q.17rT17q.17rT17q.1clT17q.1clT17q.18oT17q.18oT17q.1c7T17q.1c7T17q.1c6T17q.1c6T17q.1c8T17q.1c8T17q.1cgT17q.1cgT17q.1cgT17q.18pT17q.18pT17q.18pM1.-1cfkM1.-1cflM1.-1cfmM1.-1cfnT17q.17wT17q.17xT17q.18lT17q.18pT17q.18qT17s.17wT17s.17xT17s.17yT17s.18lT17s.18pT17s.18qT17u.17wT17u.17xT17u.17yT17u.18lT17u.18pT17u.18qT17v.17wT17v.18lT17v.18pT17v.18qT17w.17xT17w.18lT17x.17wT17x.18lT17y.17wT17y.17xT17y.18lT183.17wT183.17xT183.17yT183.18lT185.17xT185.18lT186.17wT186.17xT186.17yT186.18lT187.17xT187.18lT188.18lT189.17wT189.18lT18a.17wT18a.18lT18h.17wT18h.17xT18h.17yT18h.18lT18h.18pT18h.18qT18i.17xT18i.18lT18i.18pT18i.18qT18j.17rT18j.17wT18j.17xT18j.17yT18j.18kT18j.18lT18j.18pT18j.18qT18k.17wT18k.17xT18k.17yT18k.18lT18k.18pT18k.18qT18l.17wT18l.17xT18l.17yT18l.18lT18l.18pT18l.18qT18m.17wT18m.17xT18m.17yT18m.18lT18m.18pT18m.18qT18n.17wT18n.18lT18n.18pT18n.18qT18q.17wT18q.17xT18q.17yT18q.18lT18q.18pT18q.18qT180.19sT181.19sT18p.19sTw.18s.18xTw.18t.18xTw.18u.18xTw.18v.18xTw.18w.18xTw.18x.19sT17q.181T17q.182T17q.18lT17q.18mT17q.18pT17q.18qT17s.181T17s.182T17s.18lT17s.18mT17s.18pT17s.18qT17u.181T17u.182T17u.18lT17u.18mT17u.18pT17u.18qT17v.181T17v.182T17v.18lT17v.18mT17v.18pT17v.18qT18h.18pT18h.18qT18i.18pT18i.18qT18j.17rT18j.18kT18j.18lT18j.18pT18j.18qT18k.18lT18k.18pT18k.18qT18l.17rT18l.18lT18m.181T18m.182T18m.18lT18m.18mT18m.18pT18m.18qT18p.19sT18q.181T18q.182T18q.18lT18q.18mT18q.18pT18q.18qT17q.17wT17q.17xT17q.17yT17q.18lT17q.18nT17s.17wT17s.17xT17s.17yT17s.18lT17s.18nT17u.17wT17u.17xT17u.17yT17u.18lT17u.18nT17v.18lT17w.17xT17w.18lT17x.17wT17x.18lT17y.17wT17y.18lT183.17wT183.17xT183.17yT183.18lT185.17xT185.17yT185.18lT186.17wT186.17xT186.17yT186.18lT187.17xT188.18lT189.17wT189.18lT18a.17wT18a.18lT18h.17wT18h.17xT18h.17yT18h.18lT18i.17xT18i.18lT18j.17wT18j.17xT18j.17yT18j.18kT18j.18lT18k.17wT18k.17xT18k.17yT18k.18lT18k.18nT18l.17wT18l.17xT18l.17yT18l.18lT18m.17wT18m.17xT18m.17yT18m.18lT18m.18nT18n.17wT18n.18lT18n.19sT18q.17wT18q.17xT18q.17yT18q.18lT18q.18nT17q.18lT17q.18nT17s.18lT17s.18nT17u.18lT17u.18nT17v.18lT17v.18nT183.18lT183.18nT184.18lT184.18nT18j.18kT18j.18lT18k.18lT18m.18lT18m.18nT18q.18lT18q.18nT18g.18u.18xT18g.18v.18xT18g.18w.18xT187.18pT187.18qT189.18pT189.18qT18a.18pT18a.18qT183.18pT183.18qT184.18pT184.18qT17x.18pT17x.18qT17w.18pT17w.18qT17y.18pT17y.18qT185.18pT185.18qT186.18pT186.18qT184.17wT184.17xT184.17yT184.18lT184.181T183.181T185.181T186.181T187.18pT187.18qT189.18pT189.18qT18a.18pT18a.18qT183.18pT183.18qT184.18pT184.18qT17x.18pT17x.18qT17w.18pT17w.18qT17y.18pT17y.18qT185.18pT185.18qT186.18pT186.18qT184.17wT184.17xT184.17yT184.18lT184.181T183.181T185.181T186.181T184.17wT184.17xT184.17yT184.18lT183.18nT184.18nT187.18lT183.17wT183.17xT183.17yT184.17wT184.17xT184.17yT187.18lT188.18lT17r.18rT17r.18rViT17u.17w.18lT17u.17x.17wT17u.17x.17wT17u.17x.18lT17u.17y.18lT17u.18l.17wT17u.18l.17xT17u.18l.17yT17w.18l.17xT17w.18l.17xT17x.18l.18qT17x.18l.18pT183.17x.17wT183.17w.17xT183.17w.18pT183.18l.17xT183.18l.17xT183.18l.17wT183.18l.18lT183.18l.18lT185.17x.17xT185.17x.17xT185.18l.18lT184.17x.18lT184.17x.18lT184.17w.18qT184.18l.17yT184.18l.17yT184.18l.18lT184.18l.18lT186.17x.18pT186.17y.18lT186.17y.18lT187.18l.17xT187.18l.17xT187.18l.18lT187.18l.18qT189.17w.18lT189.18l.18lT189.18l.18lT189.18l.18pT18a.18l.18lT18a.18l.18qT18a.18l.18pT18h.17y.18lT18h.17y.18lT18i.18l.17xT18i.18l.18lT18k.17x.18lT18k.17x.18qT18k.17x.18pT18k.17w.17wT18k.17w.17wT18k.17y.18lT18k.17y.18lT18k.18l.17xT18k.18l.17xT18l.17x.17wT18l.17x.18lT18l.17x.18qT18l.17w.17xT18l.17w.18lT18l.17y.17wT18l.17y.18lX2T18l.17w.17yT18n.18l.17wT18n.18l.18lT18m.17x.18lT18m.17x.18pT18m.17w.18lT18m.17w.18lT18m.17w.18pT18m.18l.18qT18m.18l.18pT18q.18l.18lT18q.18l.18lT17s.17y.18qT17u.17w.18qT17u.17w.18pT17u.17y.18qT17u.17y.18pT17u.18l.18qT17u.18l.18pT17w.18l.18qT17w.17x.18pT17w.18l.18pT183.17y.18pT185.17x.18qT184.17x.18qT186.17x.18qT18k.17w.18qT18k.18l.18qT18q.17x.18qT18q.17w.18qT18q.18l.18qT18l.18l.18qT18i.18l.18qT18m.17x.18qT18i.18l.17xT18k.17x.18lT189.18l.18qT18j.18l.18qT18m.17w.17xT18l.17y.18qT18k.17w.18lT18j.18l.18lT18k.17w.18lT18m.17w.17xT17w.17x.18qT17x.17w.18qT18l.17w.18qT18h.18l.18qT17s.17x.18qT18j.18l.18lT189.17w.18lT185.18l.18lT183.17y.18qT18m.17w.18qX7V1XwT185.18k.1ciT18i.18k.1ciT17r.18k.18k.18nT17r.18j.17s.181T18l.17x.18l.17zT185.18k.189.18lT181.183.18o.18kT189.18k.18q.18nT18o.183.18k.18lT185.18k.18pT185.18k.18p.w.17r.18k.18k.18n.w.189.18k.18q.18n.w.18o.183.18k.18lT17w.18k.w.17w.18k.17r.18k.18nT181.1cc.17r.18kV3IgM1.-1e5gM1.-14pcX1M2.-1e55M1.-1e5wM1.-1e53M2.-14oxX7VgX1M1.-17vhM1.-17vjM1.-1e50M1.-1e51M2.-1e6lM1.-1e4cM1.-1e4bM2.-14pxM2.-14q3M2.-14qbM2.-14qfM4.-14qdV2M1.-1e5oM1.-1e5nTw.lhTw.lhTw.lhTw.lhM1.-1e5qM1.-1e5rM1.-1e5sM1.-1e78M1.-14r4X2M1.-1e6xM1.-1e6zM1.-1e6vM1.-1e7qM1.-17wkM2.-1e7lM1.-1e5cM1.-1e5bM2.-14qxM1.-1e7wM1.-1e7uM2.-1e7rM1.-1e7qM1.-1e7cM1.-1e7bM1.-1e7dX1M1.-1e6kM2.-1e85M1.-1e7fX4Tw.18rT18g.18rTw.18sV1Tw.18tX1Tw.18uT18g.18uTw.18vT18g.18vTw.18wT18g.18wTw.18xT18g.18xTw.18yT18g.18yM2.-1d27M2.-1d28M2.-1d29M2.-1d2aM2.-1d2bM1.-1d2cM1.-1d2dM2.-1d2eM2.-1d2fM1.-1d2gM1.-1d2hM2.-1d2iM2.-1d2jM1.-1d2kM1.-1d2lM2.-1d2mM1.-1d2nM1.-1d2oM2.-1d2pM1.-1d2qM1.-1d2rM2.-1d2sM1.-1d2tM1.-1d2uM2.-1d2vM1.-1d2wM1.-1d2xM2.-1d2yM2.-1d2zM2.-1d30M2.-1d31M2.-1d32M1.-1d33M1.-1d34M2.-1d35M1.-1d36M1.-1d37M2.-1d38M1.-1d39M1.-1d3aM2.-1d3bM1.-1d3cM1.-1d3dM2.-1d3eM1.-1d3fM1.-1d3gM2.-1d3hM1.-1d3iM1.-1d3jM2.-1d3kM1.-1d3lM1.-1d3mM2.-1d3nM1.-1d3oM1.-1d3pM1.-1d3qM1.-1d3kM1.-1d3lM1.-1d3mM2.-1d3nM1.-1d3oM1.-1d3pM2.-1d3qM1.-1d3rM1.-1d3sM2.-1d3tM1.-1d3uM1.-1d3vM2.-1d3wM1.-1d3xM1.-1d3yM2.-1d3zM1.-1d40M1.-1d41M2.-1d42M1.-1d43M1.-1d44M2.-1d45M2.-1d46M2.-1d47M1.-1d48M1.-1d49M1.-1d4aT18k.17mT18k.17mT18k.17nT18k.17nT18k.17pT18k.17pT18k.17rT18k.17rX2I1X1Mw.-1ecgMq.-1ebkM10.-1ecgM2.-168qM1.-1eerM2.-14yeM1.-14yrM1.-14ruM1.-14s4M1.-14ueM1.-14udM1.-14ucM1.-14ubM1.-14uaM1.-14spM1.-14soM1.-14snM1.-14toM1.-14s4M1.-14unM1.-14umM1.-14ulM1.-14ukM2.-14ujM1.-14uiM1.-14uhM1.-14ugM1.-14ufM1.-14ueM1.-14udM1.-14ucM1.-14ubM1.-14uaM1.-14u9M1.-14u8M1.-14u6M1.-14u5M1.-14u4M6.-14u3M1.-14u1M1.-14tzM1.-14txM1.-14tvM5.-14ttM1.-14tsM1.-14trM6.-14tqM1.-14tpM1.-14tmM2.-14w5I1M2.-1b4xM1.-1b09M1.-1b4yM2.-1b09M3.-1b50M6.-1b0aM1.-1b4mM3.-1b57M1.-1b4jMa.-1b58X3M6.-1b35X2M6.-1b37X2M6.-1b39X2M3.-1b3bX3M2.-1ef2M1.-1eeuTw.lgM1.-1ef2M1.-1ef4M1.-183hX1M1.-178mM4.-17x5M1.-174dM1.-1737XhVcX1VqX1VjX1V2X1VfX2VeXyV3fX5V3X4V19X3V2gX1VdX3V1X1bV1aX3mVtX3V1dXfVsX4V10X9VuX5V17X5VuX1V11X4VeX16M14.14V3aX2VaX6M10.14X4V10X4V14X8V1gXbV1Mb.13X1Mf.13X1M7.13X1M2.13X1VbX1VfX1V7X1V2X3V1gXcV8nX9VmXaV8XoV1M2.-1fhtM1.-1fvhM1.-1fjfM1.-1fleX1M1.-1fj8M1.-i76M1.-1fj8M1.-1fjaM2.-1flhM1.-1a7wM1.-1fliM1.-1fldM1.-1fjbM1.-1fl9M1.-1flcM1.-1flfM1.-1fjtM1.-1fu6M1.-1fjuM1.-1flcM1.-1fkkM2.-1fjjM1.-1flbM1.16jsM1.-iz3M1.-1flcM1.16jqM1.-1fkiM1.16jpM1.-1fvuM2.-1fl9M1.-1fzoM1.-1fl8M1.16jlM2.-1fl7M1.-1fl6M1.-1fk3M1.-1fk6M1.-i86M1.-1fk7M1.-1fl3M1.-17b3X1M1.-1fkzM2.-1fkiM1.-1fktM3.-1fquM1.16j5M1.16joX1xV6X2V1X1V18X1V2X3V1X2VnX1V20X8V9X1cVjX1V2X5VxX3VrX5V1X1sV1kX4VkX2V1eX1V2X5V8X1V3X1VtX2V3X4VaX7V9X7V1sXwV13X4VcX9V1iX3VtX2VrX5VqX7V4XcV7X28V21X1jM1f.1sXdV1fX7V1aX8VaX6VgMm.wX3VtX8V2X5sVvX1V16X1V3X2V2XgV3X1jV18X8V16XmVqX12VsXkVnX9V26X4V10X9V1qX1V5XdVpX7VaX6V1hX1ViX8V13X9V2oX1VkXbViX1V1bX1qV7X1V1X1V4X1VfX1VbX6V1nX5VaX6V4X1V8X2V2X2VmX1V7X1V2X1V5X1VaX2V2X2V3X2V1X6V1X5V7X2V7X3V5XbVaX1V1X2V1X1V12X1VaX1V1X2V1X1V4X1VaX1V2X8V2XtV2kX1V5XuV20X8VaX4mV1iX2V12XyV1xXbVaX6VdXjV1mX6VaX6VkXsVrX2VfX4VnX55V1oX2sMw.wV1fXcV8X2V1X2V8X1V2X1VuX1V2X2VcX9VaX1yV8X2V1aX2VbXrV20X8V2bXdV21X7VaX52VyXeVaX6V9X1V19X1VeXaVtX3VwX2VmX1VeX21V7X1V2X1V18X3V1X1V2X1V9X8VaX6V6X1V2X1V11X1V2X1V6X7VaX8mVpX7VhX1V15X3VtX2dV1XfV1eXdVpnX2uV33X1V5XbV5gX218V2rXdVtsXgVmXaV32zX5Vg7X5a1V1mX1c6VftX7VvX1VaX4V29X1VaX6VuX2V6XaV1yXaVaX1V7X1VlX5VjXc0V1mX5iMw.wV1nX2tV23X4V1lX7VhX1sV5XbV2XeV4qgX8VyeX15VaX6w7V4X1V7X1V2X1V83XfV1XtV3X2V1XeV4X8Vb0X1s4V2zX5VdX3V9X7VaX2V4I4X318V5yMq.-2iydMa.-2j0gX6Vc4X24V1aX2VnX9V38X1oV6uXaV13X2V1hT2jx3.2jxhT2jx4.2jxhT2jx4.2jxh.2jxqT2jx4.2jxh.2jxrT2jx4.2jxh.2jxsT2jx4.2jxh.2jxtT2jx4.2jxh.2jxuVeI8V1sT2jzt.2jxhT2jzu.2jxhT2jzt.2jxh.2jxqT2jzu.2jxh.2jxqT2jzt.2jxh.2jxrT2jzu.2jxh.2jxrV16XlV1yX3eVkXcVkXcV2fX9VpX3rMq.-2kdbMq.-2ke1Mq.-2kerM7.-2kfhX1Mi.-2kfhMq.-2kg7Mq.-2kgxM1.-2khnX1M2.-2khnX2M1.-2khnX2M2.-2khnX2M4.-2khnX1M8.-2khnM4.-2kidX1M1.-2kidX1M7.-2kidX1Mb.-2kidMq.-2kj3Mq.-2kjtM2.-2kkjX1M4.-2kkjX2M8.-2kkjX1M7.-2kkjX1Mq.-2kl9M2.-2klzX1M4.-2klzX1M5.-2klzX1M1.-2klzX3M7.-2klzX1Mq.-2kmpMq.-2knfMq.-2ko5Mq.-2kovMq.-2kplMq.-2kqbMq.-2kr1Mq.-2krrMq.-2kshMq.-2kt7Mq.-2ktxMq.-2kunMq.-2kvdM1.-2kqbM1.-2kj2X2Mh.-2k8nM1.-2k8xM7.-2k8nM1.-2e9mMh.-2k9dM1.-2k9cM7.-2k9dM1.-2eahM1.-2k9zM1.-2k9xM1.-2k9wM1.-2k9lM1.-2k9rM1.-2k9tMh.-2ka9M1.-2kajM7.-2ka9M1.-2eb8Mh.-2kazM1.-2kayM7.-2kazM1.-2ec3M1.-2kblM1.-2kbjM1.-2kbiM1.-2kb7M1.-2kbdM1.-2kbfMh.-2kbvM1.-2kc5M7.-2kbvM1.-2ecuMh.-2kclM1.-2kckM7.-2kclM1.-2edpM1.-2kd7M1.-2kd5M1.-2kd4M1.-2kctM1.-2kczM1.-2kd1Mh.-2kdhM1.-2kdrM7.-2kdhM1.-2eegMh.-2ke7M1.-2ke6M7.-2ke7M1.-2efbM1.-2ketM1.-2kerM1.-2keqM1.-2kefM1.-2kelM1.-2kenMh.-2kf3M1.-2kfdM7.-2kf3M1.-2eg2Mh.-2kftM1.-2kfsM7.-2kftM1.-2egxM1.-2kgfM1.-2kgdM1.-2kgcM1.-2kg1M1.-2kg7M1.-2kg9M1.-2kfhM1.-2kfiX2Ma.-2l5qMa.-2l60Ma.-2l6aMa.-2l6kMa.-2l6uVi4XfV5X1VfXuoVvX6V6X5xV7X1VhX2V7X1V2X1V5X5M9.-2m0wM3.-2m0vMb.-2m0uM1.-2m0sM2.-2m0rM1.-1pz5M1.-2lwyM1.-2m0mM1.-2m0lM1.-2lwlM1.-2ly8M1.-2lxdM9.-2m1tM2.-2m1sM2.-2m1qM1.-2m1pM6.-2m1oM2.-2m1nM1.-2lzqM1.-2m1eM1.-2m1gM1.-2m17M1.-2lz4M1.-1q1nM1.-2lz0XxV1X34V19X3VeX2VaX4V2X8wVvXhV1mX5V1XcwV16X5yV17X4V1XdcV7X1V4X1V2X1VfX1V5hX2VgX15My.yV16X4VaX4V2XltV1wX24V1pX5eM2.-2od5M1.-2od2M1.-2od0X1M1.-2ocdM1.-2od0M1.-2od6M1.-2ocxM1.-2ocfM4.-2ocnM1.-2od7M1.-2od2M1.-2ocvM1.-2od8M1.-2ocwM1.-2odeM1.-2odcM2.-2odnM1.-2odlM1.-2odkM1.-2odfM1.-2odeM1.-2oddM1.-2obyM1.-2o9vM1.-2oalM1.-2oc0X1M1.-2oe1M1.-2odyX1M1.-2od9X2M1.-2oe2X1M1.-2odbM4.-2odjM1.-2oe3M1.-2odyM1.-2odrM1.-2oe4M1.-2odsX1M1.-2oe8M2.-2oejM1.-2oehX1M1.-2oebX1M1.-2oe9X6M1.-2oeuX4M1.-2oeyX1M1.-2oe7X1M1.-2oefX1M1.-2oefM1.-2oezM1.-2oeuX1M1.-2of0M1.-2oeoX1M1.-2of4X2M1.-2ofdX1M1.-2of7X1M1.-2of5X1M1.-2obnX1M1.-2odsX1M1.-2oftM1.-2ofqX1M1.-2of1X2M1.-2ofuM1.-2oflM1.-2of3M1.-2ofbX1M2.-2ofbM1.-2ofvM1.-2ofqM1.-2ofjM1.-2ofwM1.-2ofkX1M1.-2og0M2.-2ogbM1.-2og9X1M1.-2og3M1.-2og2M1.-2og1M1.-2oemX1M1.-2od9X1M2.-2ogpM1.-2ogmM1.-2ogkM2.-2ofxM1.-2ogkM1.-2ogqM1.-2oghM1.-2ofzX1M3.-2og7M1.-2ogrM1.-2ogmM1.-2ogfM1.-2ogsM1.-2oggM1.-2ogyM1.-2ogwM2.-2oh7M1.-2oh5M1.-2oh4M1.-2ogzM1.-2ogyM1.-2ogxX5M1.-2ohlM1.-2ohiM1.-2ohgX1M1.-2ogtM1.-2ohgM1.-2ohmM1.-2ohdM1.-2ogvX1M3.-2oh3M1.-2ohnM1.-2ohiM1.-2ohbM1.-2ohoM1.-2ohcM1.-2ohuM1.-2ohsM2.-2oi3M1.-2oi1M1.-2oi0M1.-2ohvM1.-2ohuM1.-2ohtX1gV2X7iV18X4V2sXcVfX2VfX1VfX1V11XbT1c.18T1d.18T1e.18T1f.18T1g.18T1h.18T1i.18T1j.18T1k.18T1l.18V5T14.2p.15T14.2q.15T14.2r.15T14.2s.15T14.2t.15T14.2u.15T14.2v.15T14.2w.15T14.2x.15T14.2y.15T14.2z.15T14.30.15T14.31.15T14.32.15T14.33.15T14.34.15T14.35.15T14.36.15T14.37.15T14.38.15T14.39.15T14.3a.15T14.3b.15T14.3c.15T14.3d.15T14.3e.15T9hw.37.9hxM1.-2q4oM1.-2q4aT2r.2sT3b.3eV1Mq.-2q4vT2w.3aT31.3aT37.2sT37.37T34.34.3aT3b.2rVqT31.2rT31.2sT31.36VzT2s.2yVtX1kVqT9kr.9jfT9mb.9mbM1.-2gr1XdM1.-26ytM1.-28caM1.-29tyM1.-2gr0M1.-2avcM1.-28sbM1.-1z5fM1.-28ryM1.-2ausM1.-267tM1.-241lM1.-26bmM1.-2a4vM1.-27ipM1.-2aa9M1.-26b3M1.-2a6bM1.-21njM1.-239fM1.-1ym2M1.-28twM1.-29rgM1.-24giM1.-26xeM1.-26s3M1.-2aztM1.-2azlM1.-1xwhM1.-27uuM1.-2ayoM1.-29tnM1.-26ugM1.-1ygwM1.-26ziM1.-22epM1.-227tM1.-29t8M1.-24l1M1.-2625M1.-2627M1.-239hM1.-2a4nM1.-29hgM1.-1xpqX4T9hw.kdo.9hxT9hw.fex.9hxT9hw.fik.9hxT9hw.i2x.9hxT9hw.m9l.9hxT9hw.jf7.9hxT9hw.nh3.9hxT9hw.gd9.9hxT9hw.k0n.9hxX7M1.-27jtM1.-29uqXeV6X4aVrcX4VhX3VdX3V3bX4V2nX6VcX4V1XfVcX4V1kX8VaX6V14X8VuX2VcX4V2X1qV9gXcVeX2VdX3VaX5V1kX7VfX2VbX6V9X7V43X1V2kMa.-2saoXsmVwyoXwV37eX6V66X2V4g2XeV5rlXfVhaX1wiM1.-3qo3M1.-3qo9M1.-3qo1M1.-1crlM1.-3qg4M1.-3qdzM1.-3qdnM1.-3qbpM1.-3q8eM1.-3q7kM1.-3q5fM1.-3q64M1.-3vqmM1.-1brnM1.-3q2pM1.-3q2jM1.-3q24M1.-3q1mM1.-1bzqM1.-3vq2M1.-3q25M1.-3q14M1.-1byjM1.-3q0wM1.-3q0kM1.-3qktM1.-3q0eM1.-3q06M1.-k71M1.-3pygM1.-3py3M1.-3vpcM1.-3pwlM1.-3pwbM1.-3pv4M1.-3pv0M1.-3vnzM1.-3psuM1.-3pstM1.-3ps3M1.-3priM2.-3pr8M1.-3pqsM1.-3ppfM1.-3pp8M1.-3pp0M1.-3pocM1.-3po3M1.-3po2M1.-3po3M1.-3po4M1.-1b0oM1.-3jydM1.-3pm4M1.-3plkM1.-1as5M1.-3plaM1.-3pl5M1.-3pklM1.-3pgeM1.-3pj9M1.-3piuM1.-3phzM1.-3pgeM1.-3pe3M1.-3pdeM1.-3pbkM1.-3pb5M1.-3pa9M1.-3paaM1.-3p9qM1.-3p99M1.-3p92M1.-3p8oM1.-3oz9M1.-3p6uM1.-3ozaM1.-3p4tM1.-3p3vM1.-3pzdM1.-3ombM1.-3oucM1.-3otbM1.-3osnM1.-3owaM1.-3oroM1.-3orqM1.-3oocM1.-18xhM1.-3omgM1.-3omcM1.-3olyM1.-3olfM1.-3ol8M1.-3ojhM1.-18l4M1.-18jbM1.-3ofqM1.-3oegM1.-3oe5M1.-3ogdM1.-3ocgM1.-3vcpM1.-3vccM1.-3o81M1.-3o6kM1.-3o6lM1.-17z8M1.-3o2yM1.-3o2eM1.-3o20M1.-3o1pM1.-17q1M1.-3o1fM1.-3o19M1.-3ndtM1.-3o0jM1.-3v91M1.-3nyvM1.-3nyiM1.-3nw9M1.-3nxpM1.-176fM1.-3nspM1.-176fM1.-3nrkM1.-3nroM1.-3nr8M2.-3nogM1.-3v4kM1.-3nnrM1.-3nmlM1.-3nm1M1.-3nkuM1.-3v3aM1.-16h2M1.-3v2mM1.-3nizM1.-3nixM1.-3nivM1.-3nicM1.-gsdM1.-3ngyM1.-165cM1.-165dM1.-3gk2M1.-3ng2M1.-3ng3M1.-3v0vM1.-1333M1.-tryM1.-3nefM1.-3ne7M1.-3v08M1.-3ncyM1.-3nbkM1.-3nbbM1.-3naeM1.-3n6nM1.-3uxzM1.-3uyuM1.-3n67M1.-15g0M1.-3n4uM1.-3n1aM1.-3n17M1.-3n16M1.-3n19M1.-3n00M1.-3mzhM1.-3myiM1.-3myxM1.-3mynM1.-3mxdM1.-3mwuM1.-3mwrM1.-3mw2M1.-3mvsM1.-3mtzM1.-3mroM1.-3mqqM1.-3mnbM1.-14mkM1.-3mnwM1.-3mpqM1.-3mmrM1.-3mm1M1.-3mjdM1.-14gdM1.-3mhpM1.-3mkbM1.-3ml4M1.-3us4M1.-3mfuM1.-3mfaM1.-3megM1.-3mfjM1.-3uqjM1.-3m9lM1.-3m8tM1.-13nkM1.-3m5kM1.-3lxwM1.-3m2sM1.-3ulxM1.-3m0uM1.-3umgM1.-3unhM1.-3q68M1.-3q66M1.-3lxwM1.-3m0pM1.-3gvdM1.-3svyM1.-3lxdM1.-3lxaM1.-3lx5M1.-3lvhM1.-3lvtM1.-12xmM1.-3ul1M1.-3lr9M1.-3lujM1.-3lovM1.-3lnhM1.-12t2M1.-3lnaM1.-3lqeM1.-3ljmM1.-3uiyM1.-3lieM1.-3lfqM1.-3ldsM1.-3l8jM1.-12dlM1.-3l76M1.-3ufqM1.-3l5aM1.-11zdM1.-3l3xM1.-3uecM1.-3l35M1.-3l1xM2.-3l17M1.-11m2M1.-17fxM1.-11j3M1.-3kx8M1.-116nM1.-3ku5M1.-3ktsM1.-3kwnM1.-3krtM1.-3kqqM1.-3kp6M1.-3kqpM1.-3kpmM1.-3kp8M1.-3kowM1.-1148M1.-3kr7M1.-3kk9M1.-3kijM1.-3u8nM1.-3kg0M1.-3kg5M1.-10scM1.-3klxM1.-3kblM1.-10oiM1.-10n7M1.-3k98M1.-3k62M1.-3k6uM1.-3k6yM1.-3u68M1.-3k5pM1.-3k4bM1.-3k4iM1.-3k31M1.-1c6uM1.-3jyvM1.-103eM1.-3jwiM1.-zucM1.-3jsoM1.-3jscM1.-3jrmM1.-zdnM1.-3jqcM1.-3jpsM1.-z5dM1.-yz7M1.-3jjiM1.-3jj2M1.-3tz2M1.-3jieM1.-3tysM1.-3tytM1.-3jdzM1.-3jdfM1.-3jcvM1.-3jccM1.-3jagM1.-3tw8M1.-3j80M1.-y67M1.-3j7cM1.-y3pM1.-3j60M1.-16l6M1.-3j1mM1.-xi2M1.-xhgM1.-xdlM1.-3tqaM1.-3tpzM1.-3ivgM1.-x8uM1.-x8wM1.-x7uM1.-x75M2.-3iufM1.-3iugM1.-3itaM1.-3towM1.-3irjM1.-3tolM1.-3tmeM1.-wmoM1.-3im8M1.-3ikjM1.-3iisM1.-3tkeM1.-w8cM1.-3if1M1.-w56M1.-w40M1.-3idjM1.-3ib0M1.-3tihM1.-3i8pM1.-3i8gM1.-3i8cM1.-vkwM1.-vcmM1.-vcnM1.-3i41M1.-3tcuM1.-v5iM1.-3hy4M1.-3hy2M1.-3tbxM1.-uzpM1.-3hqsM1.-3t8nM1.-3hq8M1.-3hqeM1.-3hpmM1.-uedM1.-3hmxM1.-3t64M1.-3hk7M1.-3hilM1.-3hgrM1.-3t4tM1.-tvuM1.-tv0M1.-3t3vM1.-tr0M1.-3h8cM1.-to9M1.-3h7nM1.-3h4vM1.-3h4lM1.-tcxM1.-taxM1.-3h25M1.-t7aM1.-3h1rM1.-134xM1.-3t0sM1.-3h00M1.-3gxsM1.-3szdM1.-3gw7M1.-3oi9M1.-stcM1.-sszM1.-133qM1.-133iM1.-3gqyM1.-3gqwM1.-3e27M1.-3swzM1.-3gn2M1.-3gn9M1.-3gmsM1.-3q3jM1.-3gmaM1.-3gm9M1.-3gm0M1.-3gkwM1.-s4bM1.-3gkzM1.-3gjgM1.-3ghjM1.-3gfiM1.-3gjdM1.-3gf4M1.-3gdzM1.-3gawM1.-3gi5M1.-3gevM1.-3geuM1.-3gefM1.-rxqM1.-rp6M1.-rtdM1.-3sscM1.-3g6vM1.-3g6uM1.-3g5wM1.-qg1M1.-3g3sM1.-rcxM1.-3sr5M1.-3sr2M1.-r9bM1.-r1bM1.-3sqvM1.-3fxfM1.-3fx4M1.-3fwuM1.-3fwtM1.-3fv2M1.-3fw0M1.-3fsbM1.-3ftkM1.-3fpeM1.-3froM1.-3fpuM1.-3fp4M1.-3so8M1.-3fmnM1.-3flsM1.-3sndM1.-3fj7M1.-3fj5M1.-py6M1.-3ffzM1.-3fftM1.-3slvM1.-3ff3M1.-3w27M1.-pi5M1.-pd2M1.-3si7M1.-3shzM1.-3f3jM1.-3f1fM1.-3ex3M1.-3erhM1.-oq3M1.-3ep5M1.-3eokM1.-3em3M1.-3ejkM1.-o89M1.-1brpM1.-3ehbM1.-3ehrM1.-3egcM1.-1blrM1.-3ea2M1.-3e7bM1.-mxaM1.-mwkM1.-3dxqM1.-3dv6M1.-3dubM1.-mnrM1.-3du3M1.-3dm7M2.-3dhtM1.-3dkeM1.-3d9uM1.-3d93M1.-lpvM1.-3cyrM1.-3ryyM1.-3cxlM1.-lfeM1.-3rwsM1.-3cq8M1.-3o02M1.-3cnmM1.-kohM1.-kilM1.-3rt6M1.-3rszM1.-3ciiM1.-k4xM1.-3rreM1.-k13M1.-3chfM1.-3chgM1.-3cgnM1.-jt7M1.-3cbkM1.-3ro0M1.-3c9nM1.-3c66M1.-3c5gM1.-3c3tM1.-3rjuM1.-iqhM1.-3bw8M1.-3bnvM1.-3binM1.-3rcvM1.-3rc1M1.-3bfsM1.-hmqM1.-3rbtM1.-hl9M1.-hdxM1.-habM1.-3b6iM1.-3r9cM1.-3b4uM1.-3b4qM1.-3b4kM1.-3b4bM1.-3b45M1.-3b35M1.-gm5X15uV3t7X5V38gXf9e8I6oX47bk";
|
|
7
|
+
const BIDI = "B9X5BeX5O2T3O5S1C1S1C2EaC1O6LqO6LqO4B6X1BqC1O1T4O4L1O2B1O2T2E2O1L1O3E1L1O5LnO1LvO1LchO2L7OeL2OeL5O9L1OhM34L4O2L8O1L5O2L1O1L32O1L3wM7L74O1L2O2T1R1M19R1M1R1M2R1M2R1M1R1kN6O2A1T2A1C1A1O2MbA1cMlNaT1N2A3M1A2tM7N1O1M6A2M2O1M4A2EaAnM1AuMrA2jMbAfR17M9R2O4R3M1RoM4R1M9R1M3R1M5R17M3R4A1cN2A5M9A16MoN1MwL1jM1L1M1L4M8L4M1L3M7LaM2LtM1L1mM1L4M4L8M1LkM2LeT2L7T1L2M1L2M2L1lM1L4M2L4M2L2M3L3M1LuM2L3M1LbM2L1lM1L4M5L1M2L4M1LkM2LdT1L8M6L1M1L1mM1L2M1L1M4L8M1L7M2LbM2LuM1L1pM1LcM1L11O6T1O1L5M1L3M1L1jM1L1M3L5M3L1M4L7M2LbM2LkO7L2M1L1mM1LfM2LkM2LsM2L1lM2L4M4L8M1LkM2LtM1L20M1L7M3L1M1L2iM1L2M7L4T1L7M8L2qM1L2M9LbM7L21M2LrM1L1M1L1M1O4L1fMeL1M5L1M2L5MbL1M10L9M1L2uM4L1M6L1M2L2M2LpM2L4M3LgM4LdM1L2M2L6M1LfM1LjjM3L1cOaL2uO1LhrX1LqO2L39M3LtM2LuM2LuM2L1sM2L1M7L8M1L2MbL7T1L1M1LiOaL6ObM3B1M1L39M2LyM1L3aM3L4M2L9M1L6M3L4O1L3O2L48OyLnM2L2M1L1mM1L1M7L1M1L1M1L2M8L6MaL2M1L1cMvL1dM4L1cM1L1M5L1M1L5M1L14M9LcM2LwM4L2M2L1M3L1kM1L1M2L3M1L1M3L1mM8L2M2L48M3L1MdL1M7L4M1L6M1L3M2L5iM1sLcdO1L1O3LbO3LdO3LdO3LdO2L1XbB3L1R1OoX7C1T5OfC1OqX1B6X4B6E1L3E6S2O3L1EaS2O3LhT1cMxLfO2L1O4L1O2LaO1L1O3L5O6L1O1L1O1L1O1L4T1LbO2L4O5L5O4L2OgL15O3L4O3mS1T1O82L1xOqL1O44LmObLlO14EkL26OciL1O9fL74OhgL2OwL1O2xL6dO6L4M3L7O7L3jM1L2oMwO2mLyOqL1O2hLcO5yLqOgX1O4L3OpL9M4L2O1L5O2L5O3L2hM2O2L3O1L2iO1L5gO12L9O1L19O2L1dOgLsO3L1eOfLcO4L4nO4L2rO2LvO1L534O1sLh3kO1jL92O3L2nM4O1MaO2LuM2L28M2LeOyL2uO1L3dM1L3M1L4M1LpM2L1O4M1LbT2L1mO4L24M2LqMiLdM1L12M8LpMbL1aM3L1cM1L2M4L2M2L13M1L1vM6L2M2L2M2LcM1L8M1L1bM1L1fM1L1M3L2M2L5M2L1M1L16M2L8M1L37O2L3dM1L2M1L4M1Lfn3R1M1RaS1R12AdqOiA3jO1BwAdO3MgOaL6MgOwC1O1C1L1O1C1O9T1O2S2O3L1O1T2O1L4A3zB1L1O2T3O5S1C1S1C2EaC1O6LqO6LqObL3eT2O3T2L1O7L1B9O5B2L75O1L1qO25L3OdL3O1L2kM1L6aM1ErL3eM5Lw5R7zO1R69M3R1M2R5M4R14M3R4M1R4lM2R2aO7RcgA10M4A8NaA6NaRvM5O1R6pNvR18M2RjA1oM4R1cAmMbAvRiM4R3eL1M1L1iMfLbOkLaM1L2M2LaM3L1dM4L2M2L7M1L1pM3L10M5L1M8L1qM1LcM2L1gM9LaM4L2M1L2nM3L2M1L1M2L6M1L2M1L4dM1L3M8LlM2L1lM2L3M1L11M7L3M5L1yM6LdM1L1M1L1M1LeM2L2dM8L2M3L1M1LnM1L2cM6L1M1L4M2L1M2L6mM4L6M2L1M2LrM2L2dM8L2M1L1M2LvOdL1qM1L1M1L2M6L1M1L2tM1L1M1L2M4L1M5L77M9L1M2L74M2L1M1L4M1L40M4L2M2L4M1LwM6L2M2L14M6L2M4L8M1L9M6L2M3L1aMdL1M2LbaM7L1M6L2cMmL2M7L1M2L1M2L3eM6L3M1L1M2L1M7L1M1L20M2L3M1L1M1L9nM2LbM2L1gM5L5M1L1M1LnM1L3eO8T4OhL40eM1L6MfL8ugMcL3M3L1xcM5L1nM7Lt4M1L1rM4L27O1L1M1Lf5kM2L1B4L318O5yLqEaL6Oc4L24M1aL2MnLf4M3L9B8M8L2M7LuM4L1nO2LlO1uM3O1L56O2fLoaO1LpO1LvO1LpO1LvO1LpO1LvO1LpO1LvO1LpO1LaE1eLe8M1jL4M1eL8M1LeM1LmM5L1MfL11sM7L1MhL2M7L1M2L1M5L2sM1L4gM7LafM1L1pM4LfT1LdoM4L72M2LeoR5sM7R31M7RmdA28R1sA28R4wA6oO2AeR74O18L4O2sLcOfL2OfL1OfL1O11LaEbO5LvO1L1mO6L1pO1L4yO6L4aOrcL4OhL3OdL3O3bL4O2nL6OcL4O1LfOcL4O1kL8OaL6O14L8OuL2OcL4O2L1qO9gLcOeL2OdL3OaL5O1kL7OfL2ObL6O9L7O43L1O2kEaLskB2L1ekeB2L1ekeB2L1ekeB2L1ekeB2L1ekeB2L1ekeB2L1ekeB2L1ekeB2L1ekeB2L1ekeB2L1ekeB2L1ekeB76M6oB2s0L1bemB2L1ekeB2L1ekeB2";
|
|
8
|
+
const JOINING = "U4tT1UgiT34U7nT7U7bT19U1T1U1T2U1T2U1T1U20TbU1T1U3D1U1R4D1R1D1R1D5R4DdC1D7R1D2TlUeD2T1R3U1R3DgRiD12R1D2R9D1R1D1R1D2R2U1R1T7U2T6U2T2U1T4R2UaD3U2D1UfT1R1T1D3R5D4R1D9R1D1R1D1R1D2R1TrU2R1DbR3DfR2D4R1D1R2D3R2D6U12TbUpDxT9U6C1U2T1UoT4U1T9U1T3U1T5UiR1D5R2D1R1DaR1D1R3T3U4D1U1D4U1R1D1R2U5RjC3D1U2D5R1U8T9DaR3U1R1D2R2D6R1DfU1ToU1TwU1jT1U1T1U4T8U4T1U3T7UaT2UtT1U1mT1U4T4U8T1UkT2UqT1U2T2U1lT1U4T2U4T2U2T3U3T1UuT2U3T1UbT2U1lT1U4T5U1T2U4T1UkT2UmT6U1T1U1mT1U2T1U1T4U8T1U7T2UbT2UuT1U1pT1UcT1U1eT1U3T1U1jT1U1T3U5T3U1T4U7T2UbT2UtT1U1mT1U2T1U6T1U5T2UkT2UsT2U1lT2U4T4U8T1UkT2UtT1U20T1U7T3U1T1U2iT1U2T7UcT8U2qT1U2T9UbT7U21T2UrT1U1T1U1T1U1jTeU1T5U1T2U5TbU1T10U9T1U2uT4U1T6U1T2U2T2UpT2U4T3UgT4UdT1U2T2U6T1UfT1UjjT3UqaT3UtT2UuT2UuT2U1sT2U1T7U8T1U2TbU9T1U15D1U2C1T3U1T1UgD2hUcT2DyT1D1U39T3U4T2U9T1U6T3U63T2U2T1U1mT1U1T7U1T1U1T1U2T8U6TaU2T1U1cTvU1dT4U1cT1U1T5U1T1U5T1U14T9UcT2UwT4U2T2U1T3U1kT1U1T2U3T1U1T3U1mT8U2T2U48T3U1TdU1T7U4T1U6T1U3T2U5iT1sUejT1U1C1T2UqT5U1dT5U5T6U2oTxU2daT3U3xT1U2oTwUfeT4U2zT2Un9wT4U1TaUwT2U28T2U7kT1U3T1U4T1UpT2U5T1UjD1eL1U29T2UqTiUdT1U12T8UpTbU1aT3U1cT1U2T4U2T2U13T1U1vT6U2T2U2T2UcT1U8T1U1bT1U1fT1U1T3U2T2U5T2U1T1U16T2U8T1U6mT1U2T1U4T1Ufn4T1UkhTgUgTgU5rT1U6xT3Ue9T1U6aT1U45T5U1aeT3U1T2U5T4U14T3U4T1U3kD5R1U1R1U1R2U2L1R5D4L1D5R1D3R1U2R1T2U4D4R1U40D1R1D1R3D3R1D2R1D1R2D1R1UnR4D2U9dL1DxR1D1T4U1tT5U8tT2UlR1D2U1jT4U1cD3R1DhU1TbD3R1UrD4R2DcT4U16D1U1D2R3U1D1R2D2R1D2U1D1R2D1U4R1D1L1U1hT1U1iTfU15T1U2T2UaT3U1dT4U2T2U7T1U1pT3U10T5U1T8U1qT1UcT2U1gT9UaT4U2T1U2nT3U2T1U1T2U6T1U2T1U4dT1U3T8UlT2U1lT2U3T1U11T7U3T5U1yT6UdT1U1T1U1T1UeT2U2dT8U2T3U1T1UnT1U2cT6U1T1U4T2U1T2U6mT4U6T2U1T2UrT2U2dT8U2T1U1T2U2yT1U1T1U2T6U1T1U2tT1U1T1U2T4U1T5U77T9U1T2U74T2U1T1U4T1U40T4U2T2U4T1UwTaU14T6U2T4U8T1U9T6U2T3U1aTdU1T2UbaT7U1T6U1T1U2aTmU2T7U1T2U1T2U3eT6U3T1U1T2U1T7U1T1U20T2U3T1U1T1U9nT2UbT2U1gT5U5T1U1T1UnT1U445ThU6TfU8ugTcU3T3U1xcT5U1nT7Ut4T1U1rT4U29T1Uf5kT2U1T4U3mkT1aU2TnUf4T3U9TgU2T7UuT4U44T3U1izT1jU4T1eU8T1UeT1UmT5U1TfU11sT7U1ThU2T7U1T2U1T5U2sT1U4gT7UafT1U1pT4Ue4T4U72T2UkgT7U15D1wT8UgzatT1UuT2oU3kT6o";
|
|
9
|
+
const VIRAMA = "N1u5V1N3jV1N3jV1N3jV1N3jV1N3jV1N3jV1N3jV1N31V2NgV1N3gV1N33V1N3jV1N5lV1N50V2N1cpV2NuV1N4dV1Ni5V1N6bV1N2tV2N1yV2N3grV1No7aV1N11V1N47V1N3yV1N30V1N8lV1N6uV1NimpV1N16uV1N15V1NeV1N1lV1N3dV2N3vV1N38V1N50V1N2qV1N3kV3N35V1N3jV1N70V1N3jV1N3aV1N38V1N7hV1N77V2N4hV1N2bV1NiV1N29V1NbpV1N78V2N29V1NbtV2Nd0sV1";
|
|
10
|
+
const MARK = "NlcM34N7nM7N7bM19N1M1N1M2N1M2N1M1N20MbN1cMlNgM1N2tM7N2M6N2M2N1M4NzM1NuMrN2jMbN1mM9N9M1NoM4N1M9N1M3N1M5N17M3N1nM9N16MoN1MxN1iM3N1MiN1M7NaM2NtM3N1kM1N1M7N2M2N2M3N9M1NaM2NqM1N2M3N1kM1N1M5N4M2N2M3N3M1NuM2N3M1NbM3N1kM1N1M8N1M3N1M3NkM2NmM6N1M3N1kM1N1M7N2M2N2M3N7M3NaM2NuM1N1nM5N3M3N1M4N9M1N14M5N1jM1N1M7N1M3N1M4N7M2NbM2NtM3N1kM1N1M7N1M3N1M4N7M2NbM2NfM1NcM4N1jM2N1M7N1M3N1M4N9M1NaM2NtM3N1yM1N4M6N1M1N1M8NiM2N1pM1N2M7NcM8N2qM1N2M9NbM7N21M2NrM1N1M1N1M1N4M2N1dMkN1M2N5MbN1M10N9M1N2sMkNnM4N4M3N1M3N2M7N3M4NdMcN1M1NaM4NjjM3NqaM4NsM3NtM2NuM2N1sMwN9M1N19M3N1M1N39M2NyM1N3aMcN4McN63M5N1lMaN1MtN2M1N1cMvN1dM5N1bMhN12M9NcM3NuMdN1kMeN1cMkN48M3N1MlN4M1N6M1N2M3N5iM1sNk0MxN2daM3N3xM1N2oMwNfeM6N2xM2Nn9wM4N1MaNwM2N28M2N7kM1N3M1N4M1NnM5N4M1N2bM2N1eMiNqMiNdM1N12M8NpMdN18M4N1bMeN10M1N1vMeNcM1N8M2N19M3N1eM1N1M3N2M2N5M2N1M1N15M5N5M2N6kM8N1M2Nfn4M1NkhMgNgMgNr1M1N6aM1N45M5N1aeM3N1M2N5M4N14M3N4M1N4lM2NfxM4N1tM5N8tM2N27M4N1yMbN1dM4N3eM3N1hMfN15M1N2M2NaM4N19MbN7M1N1pM3N10MeNgM2N18M1NcM3N1cMeN8M4N1M2N2kMcN6M1N2M1N4dMcNlM4N1jM2N1M7N2M2N2M3N9M1NaM2N2M7N3M5N1vM9N1M1N2M1N1M4N1M5N1M1NeM2N2aMiNnM1N29MkN6jM7N2M9NrM2N2aMhN2yMdN2tMfN74MfN6tM6N1M2N2M4N1M1N1M2N3xM7N2M7N3M1NsMaN14M7N1M4N8M1N9MbN1aMgNb9M8N1M8N2aMmN1MeN3eM6N3M1N1M2N1M7N1M1N1uM5N1M2N1M5N9nM4N9M2N1M1N1cM7N3M5NnM1N44lM1N6MfN8ugMiN1xcM5N1nM7Nt4M1N1M1jN7M4N29M1NbM2Nf57M2N3mpM1aN2MnNf2M5N3M6N8M8N2M7NuM4N44M3N1izM1jN4M1eN8M1NeM1NmM5N1MfN11sM7N1MhN2M7N1M2N1M5N2sM1N4gM7NafM1N1pM4Ne4M4N72M2NkgM7N31M7NgzhxM6o";
|
|
11
|
+
const SCRIPTS = "NogG4N1G3N2G4N1G1N4G1N1G1N1G3N1G1N1GkN1G1rNeGgNb5H1jN8HrN4H6N4kxG5N1eG5N4G5N2cG1N8wGmN2G6N2G12N2G6N2G8N1G1N1G1N1G1N1GvN2G1hN1GfN1GeN2G6N1GjN2G3N1G9N87G1N2mxJqN1J2hNcJ5yN1bJ1N1J1NpJ9NeJ4N5J2eN6J3N1J2iN2J3N6oJgN5sJ1bN1J2gN4oJ534N1sJg74N291G1NfbuJa6N2J2yN1vHqN1H5N1H1N1H2N1H2N1HaNt2JaN1J19NbmG27NhG1Nls1J2NcJ2Ncn2J4N1J7N1J2N1J83NfJ1NtJ3N2J1NeJ4N6fsG1yN69mJ1N2rjJwyoNwJ37eN6J66N2J4g2NeJ5rlNfJhaN1wiJf2N15uJ3t7N5J38g";
|
|
12
|
+
|
|
13
|
+
//#endregion
|
|
14
|
+
//#region src/idna/tables.ts
|
|
15
|
+
const TOKEN = /([A-Z])([^A-Z]*)/g;
|
|
16
|
+
const runCache = /* @__PURE__ */ new Map();
|
|
17
|
+
let mapping;
|
|
18
|
+
function runs(text) {
|
|
19
|
+
let cached = runCache.get(text);
|
|
20
|
+
if (cached === void 0) {
|
|
21
|
+
const starts = [];
|
|
22
|
+
const vals = [];
|
|
23
|
+
let at = 0;
|
|
24
|
+
for (const [, letter = "", length = ""] of text.matchAll(TOKEN)) {
|
|
25
|
+
starts.push(at);
|
|
26
|
+
vals.push(letter);
|
|
27
|
+
at += Number.parseInt(length, 36);
|
|
28
|
+
}
|
|
29
|
+
starts.push(at);
|
|
30
|
+
cached = {
|
|
31
|
+
starts,
|
|
32
|
+
vals
|
|
33
|
+
};
|
|
34
|
+
runCache.set(text, cached);
|
|
35
|
+
}
|
|
36
|
+
return cached;
|
|
37
|
+
}
|
|
38
|
+
function search(starts, cp) {
|
|
39
|
+
let lo = 0;
|
|
40
|
+
let hi = starts.length - 1;
|
|
41
|
+
while (lo < hi) {
|
|
42
|
+
const mid = lo + hi + 1 >> 1;
|
|
43
|
+
if ((starts[mid] ?? 0) <= cp) lo = mid;
|
|
44
|
+
else hi = mid - 1;
|
|
45
|
+
}
|
|
46
|
+
return lo;
|
|
47
|
+
}
|
|
48
|
+
function runAt(text, cp, fallback) {
|
|
49
|
+
const { starts, vals } = runs(text);
|
|
50
|
+
if (cp >= (starts[starts.length - 1] ?? 0)) return fallback;
|
|
51
|
+
return vals[search(starts, cp)] ?? fallback;
|
|
52
|
+
}
|
|
53
|
+
function numbers(text) {
|
|
54
|
+
return text === "" ? [] : text.split(".").map((n) => Number.parseInt(n, 36));
|
|
55
|
+
}
|
|
56
|
+
function mappingTable() {
|
|
57
|
+
if (mapping === void 0) {
|
|
58
|
+
const starts = [];
|
|
59
|
+
const kinds = [];
|
|
60
|
+
const data = [];
|
|
61
|
+
let at = 0;
|
|
62
|
+
for (const [, kind = "", body = ""] of MAPPING.matchAll(TOKEN)) {
|
|
63
|
+
starts.push(at);
|
|
64
|
+
kinds.push(kind);
|
|
65
|
+
if (kind === "V" || kind === "I" || kind === "X") {
|
|
66
|
+
data.push([]);
|
|
67
|
+
at += Number.parseInt(body, 36);
|
|
68
|
+
} else if (kind === "M" || kind === "P") {
|
|
69
|
+
const [length = 0, offset = 0] = numbers(body);
|
|
70
|
+
data.push([offset]);
|
|
71
|
+
at += kind === "M" ? length : length * 2;
|
|
72
|
+
} else {
|
|
73
|
+
data.push(numbers(body));
|
|
74
|
+
at += 1;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
starts.push(at);
|
|
78
|
+
mapping = {
|
|
79
|
+
starts,
|
|
80
|
+
kinds,
|
|
81
|
+
data
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
return mapping;
|
|
85
|
+
}
|
|
86
|
+
/** Looks up the UTS #46 status of one code point. */
|
|
87
|
+
function codePointStatus(cp) {
|
|
88
|
+
const { starts, kinds, data } = mappingTable();
|
|
89
|
+
const i = search(starts, cp);
|
|
90
|
+
const kind = kinds[i];
|
|
91
|
+
const values = data[i] ?? [];
|
|
92
|
+
if (kind === "V") return { status: "valid" };
|
|
93
|
+
if (kind === "I") return { status: "ignored" };
|
|
94
|
+
if (kind === "M") return {
|
|
95
|
+
status: "mapped",
|
|
96
|
+
to: [cp + (values[0] ?? 0)]
|
|
97
|
+
};
|
|
98
|
+
if (kind === "P") return (cp - (starts[i] ?? 0)) % 2 === 0 ? {
|
|
99
|
+
status: "mapped",
|
|
100
|
+
to: [cp + (values[0] ?? 0)]
|
|
101
|
+
} : { status: "valid" };
|
|
102
|
+
if (kind === "T") return {
|
|
103
|
+
status: "mapped",
|
|
104
|
+
to: values
|
|
105
|
+
};
|
|
106
|
+
if (kind === "E") return {
|
|
107
|
+
status: "deviation",
|
|
108
|
+
to: values
|
|
109
|
+
};
|
|
110
|
+
return { status: "disallowed" };
|
|
111
|
+
}
|
|
112
|
+
const bidiClass = (cp) => runAt(BIDI, cp, "L");
|
|
113
|
+
const joiningType = (cp) => runAt(JOINING, cp, "U");
|
|
114
|
+
const isVirama = (cp) => runAt(VIRAMA, cp, "N") === "V";
|
|
115
|
+
const isMark = (cp) => runAt(MARK, cp, "N") === "M";
|
|
116
|
+
const scriptOf = (cp) => runAt(SCRIPTS, cp, "N");
|
|
117
|
+
|
|
118
|
+
//#endregion
|
|
119
|
+
//#region src/idna/process.ts
|
|
120
|
+
const PREFIX = "xn--";
|
|
121
|
+
const LTR_OK = /^[LESCTOBM]*$/;
|
|
122
|
+
const RTL_OK = /^[RANESCTOBM]*$/;
|
|
123
|
+
function flagsOf(o) {
|
|
124
|
+
const strict = o.beStrict === true;
|
|
125
|
+
return {
|
|
126
|
+
std3: o.useSTD3ASCIIRules ?? strict,
|
|
127
|
+
hyphens: o.checkHyphens ?? strict,
|
|
128
|
+
bidi: o.checkBidi ?? true,
|
|
129
|
+
joiners: o.checkJoiners ?? true,
|
|
130
|
+
contextO: o.checkContextO ?? false,
|
|
131
|
+
transitional: o.transitionalProcessing ?? false,
|
|
132
|
+
dns: o.verifyDnsLength ?? strict,
|
|
133
|
+
ignorePunycode: o.ignoreInvalidPunycode ?? false
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
function isAscii(text) {
|
|
137
|
+
for (let i = 0; i < text.length; i++) if ((text.codePointAt(i) ?? 0) > 127) return false;
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
function mapDomain(domain, transitional) {
|
|
141
|
+
let out = "";
|
|
142
|
+
for (const ch of domain) {
|
|
143
|
+
const cp = ch.codePointAt(0) ?? 0;
|
|
144
|
+
if (cp < 128) {
|
|
145
|
+
out += cp >= 65 && cp <= 90 ? String.fromCodePoint(cp + 32) : ch;
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
if (transitional && cp === 7838) {
|
|
149
|
+
out += "ss";
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
const entry = codePointStatus(cp);
|
|
153
|
+
if (entry.status === "mapped" || entry.status === "deviation" && transitional) out += String.fromCodePoint(...entry.to);
|
|
154
|
+
else if (entry.status !== "ignored") out += ch;
|
|
155
|
+
}
|
|
156
|
+
return out;
|
|
157
|
+
}
|
|
158
|
+
function checkJoiners(cps, errors) {
|
|
159
|
+
for (const [i, cp] of cps.entries()) {
|
|
160
|
+
if (cp !== 8204 && cp !== 8205) continue;
|
|
161
|
+
const code = cp === 8204 ? "C1" : "C2";
|
|
162
|
+
if (i > 0 && isVirama(cps[i - 1] ?? 0)) continue;
|
|
163
|
+
if (cp === 8205) {
|
|
164
|
+
errors.add(code);
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
let before = i - 1;
|
|
168
|
+
while (before >= 0 && joiningType(cps[before] ?? 0) === "T") before -= 1;
|
|
169
|
+
let after = i + 1;
|
|
170
|
+
while (after < cps.length && joiningType(cps[after] ?? 0) === "T") after += 1;
|
|
171
|
+
const left = before >= 0 ? joiningType(cps[before] ?? 0) : "";
|
|
172
|
+
const right = after < cps.length ? joiningType(cps[after] ?? 0) : "";
|
|
173
|
+
if (!(left === "L" || left === "D") || !(right === "R" || right === "D")) errors.add(code);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
function checkBidiLabel(classes, errors) {
|
|
177
|
+
const first = classes[0];
|
|
178
|
+
const end = classes.replace(/M+$/, "").slice(-1);
|
|
179
|
+
if (first === "R" || first === "A") {
|
|
180
|
+
if (!RTL_OK.test(classes)) errors.add("B2");
|
|
181
|
+
if (!"RAEN".includes(end)) errors.add("B3");
|
|
182
|
+
if (classes.includes("E") && classes.includes("N")) errors.add("B4");
|
|
183
|
+
} else if (first === "L") {
|
|
184
|
+
if (!LTR_OK.test(classes)) errors.add("B5");
|
|
185
|
+
if (end !== "L" && end !== "E") errors.add("B6");
|
|
186
|
+
} else errors.add("B1");
|
|
187
|
+
}
|
|
188
|
+
function checkContextO(cps, errors) {
|
|
189
|
+
const hasKana = cps.some((cp) => scriptOf(cp) === "J");
|
|
190
|
+
const arabicIndic = cps.some((cp) => cp >= 1632 && cp <= 1641);
|
|
191
|
+
const extended = cps.some((cp) => cp >= 1776 && cp <= 1785);
|
|
192
|
+
if (arabicIndic && extended) errors.add("O1");
|
|
193
|
+
for (const [i, cp] of cps.entries()) {
|
|
194
|
+
const prev = cps[i - 1] ?? 0;
|
|
195
|
+
const next = cps[i + 1] ?? 0;
|
|
196
|
+
if (cp === 183 && !(prev === 108 && next === 108)) errors.add("O1");
|
|
197
|
+
else if (cp === 885 && scriptOf(next) !== "G") errors.add("O1");
|
|
198
|
+
else if ((cp === 1523 || cp === 1524) && scriptOf(prev) !== "H") errors.add("O1");
|
|
199
|
+
else if (cp === 12539 && !hasKana) errors.add("O1");
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
function validate(label, flags, nontransitional, bidiDomain, errors) {
|
|
203
|
+
if (label === "") return;
|
|
204
|
+
if (label.normalize("NFC") !== label) errors.add("V1");
|
|
205
|
+
const cps = Array.from(label, (ch) => ch.codePointAt(0) ?? 0);
|
|
206
|
+
if (flags.hyphens) {
|
|
207
|
+
if (cps[2] === 45 && cps[3] === 45) errors.add("V2");
|
|
208
|
+
if (label.startsWith("-") || label.endsWith("-")) errors.add("V3");
|
|
209
|
+
}
|
|
210
|
+
if (label.startsWith(PREFIX)) errors.add("V4");
|
|
211
|
+
if (label.includes(".")) errors.add("V5");
|
|
212
|
+
if (isMark(cps[0] ?? 0)) errors.add("V6");
|
|
213
|
+
for (const cp of cps) {
|
|
214
|
+
if (cp < 128) {
|
|
215
|
+
if (cp >= 65 && cp <= 90) errors.add("V7");
|
|
216
|
+
if (flags.std3 && !(cp === 45 || cp >= 48 && cp <= 57 || cp >= 97 && cp <= 122)) errors.add("U1");
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
const { status } = codePointStatus(cp);
|
|
220
|
+
if (status !== "valid" && !(status === "deviation" && nontransitional)) errors.add("V7");
|
|
221
|
+
}
|
|
222
|
+
if (flags.joiners) checkJoiners(cps, errors);
|
|
223
|
+
if (flags.bidi && bidiDomain) checkBidiLabel(cps.map(bidiClass).join(""), errors);
|
|
224
|
+
if (flags.contextO) checkContextO(cps, errors);
|
|
225
|
+
}
|
|
226
|
+
function decodeLabel(label, flags, errors) {
|
|
227
|
+
if (!label.text.startsWith(PREFIX)) return;
|
|
228
|
+
if (!isAscii(label.text)) {
|
|
229
|
+
errors.add("P4");
|
|
230
|
+
label.skip = true;
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
let decoded;
|
|
234
|
+
try {
|
|
235
|
+
decoded = punycodeDecode(label.text.slice(4));
|
|
236
|
+
} catch {
|
|
237
|
+
if (!flags.ignorePunycode) errors.add("P4");
|
|
238
|
+
label.skip = true;
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
label.text = decoded;
|
|
242
|
+
label.decoded = true;
|
|
243
|
+
if (decoded === "" || isAscii(decoded)) errors.add("P4");
|
|
244
|
+
}
|
|
245
|
+
function isRtl(text) {
|
|
246
|
+
for (const ch of text) {
|
|
247
|
+
const cls = bidiClass(ch.codePointAt(0) ?? 0);
|
|
248
|
+
if (cls === "R" || cls === "A" || cls === "N") return true;
|
|
249
|
+
}
|
|
250
|
+
return false;
|
|
251
|
+
}
|
|
252
|
+
function run(domain, options, ascii) {
|
|
253
|
+
const flags = flagsOf(options);
|
|
254
|
+
const errors = /* @__PURE__ */ new Set();
|
|
255
|
+
const labels = mapDomain(domain, flags.transitional).normalize("NFC").split(".").map((text) => ({
|
|
256
|
+
text,
|
|
257
|
+
decoded: false,
|
|
258
|
+
skip: false
|
|
259
|
+
}));
|
|
260
|
+
for (const label of labels) decodeLabel(label, flags, errors);
|
|
261
|
+
const bidiDomain = flags.bidi && labels.some((label) => !label.skip && isRtl(label.text));
|
|
262
|
+
for (const label of labels) if (!label.skip) validate(label.text, flags, label.decoded || !flags.transitional, bidiDomain, errors);
|
|
263
|
+
let texts = labels.map((label) => label.text);
|
|
264
|
+
if (ascii) texts = texts.map((text) => {
|
|
265
|
+
if (isAscii(text)) return text;
|
|
266
|
+
if (!text.isWellFormed()) {
|
|
267
|
+
errors.add("A3");
|
|
268
|
+
return text;
|
|
269
|
+
}
|
|
270
|
+
return PREFIX + punycodeEncode(text);
|
|
271
|
+
});
|
|
272
|
+
if (flags.dns) {
|
|
273
|
+
if (ascii) {
|
|
274
|
+
const root = texts.length > 1 && texts[texts.length - 1] === "";
|
|
275
|
+
const length = texts.slice(0, root ? -1 : void 0).join(".").length;
|
|
276
|
+
if (length < 1 || length > 253) errors.add("A4_1");
|
|
277
|
+
if (texts.some((text) => text.length < 1 || text.length > 63)) errors.add("A4_2");
|
|
278
|
+
} else if (texts.some((text, i) => text === "" && (i < texts.length - 1 || i === 0))) errors.add("X4_2");
|
|
279
|
+
}
|
|
280
|
+
return {
|
|
281
|
+
result: texts.join("."),
|
|
282
|
+
errors: [...errors].toSorted()
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
/** UTS #46 ToASCII: maps, normalizes, validates and Punycode-encodes `domain`, and reports every error code instead of throwing. `result` is produced even when `errors` is not empty. */
|
|
286
|
+
function idnaToAsciiResult(domain, options = {}) {
|
|
287
|
+
return run(domain, options, true);
|
|
288
|
+
}
|
|
289
|
+
/** UTS #46 ToUnicode: maps, normalizes, validates and decodes the `xn--` labels of `domain`, and reports every error code instead of throwing. */
|
|
290
|
+
function idnaToUnicodeResult(domain, options = {}) {
|
|
291
|
+
return run(domain, options, false);
|
|
292
|
+
}
|
|
293
|
+
function unwrap(fn, domain, { result, errors }) {
|
|
294
|
+
if (errors.length > 0) throw new RangeError(`${fn}: ${JSON.stringify(domain)} is not valid (${errors.join(", ")})`);
|
|
295
|
+
return result;
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* UTS #46 ToASCII with the full Unicode 16 status table. Unlike `domainToAscii` in `cizgile/uri` it knows every valid, ignored, mapped, deviation and disallowed code point, and checks CONTEXTJ and the bidi rule.
|
|
299
|
+
* @throws {RangeError} when processing records an error; the message lists the codes.
|
|
300
|
+
*/
|
|
301
|
+
function idnaToAscii(domain, options = {}) {
|
|
302
|
+
return unwrap("idnaToAscii", domain, idnaToAsciiResult(domain, options));
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* UTS #46 ToUnicode with the full Unicode 16 status table.
|
|
306
|
+
* @throws {RangeError} when processing records an error; the message lists the codes.
|
|
307
|
+
*/
|
|
308
|
+
function idnaToUnicode(domain, options = {}) {
|
|
309
|
+
return unwrap("idnaToUnicode", domain, idnaToUnicodeResult(domain, options));
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
//#endregion
|
|
313
|
+
export { IDNA_UNICODE_VERSION, codePointStatus, idnaToAscii, idnaToAsciiResult, idnaToUnicode, idnaToUnicodeResult };
|
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as LocaleId, n as LatinLocaleId, o as TransliterationTable, r as Locale } from "./shared/types-
|
|
1
|
+
import { i as LocaleId, n as LatinLocaleId, o as TransliterationTable, r as Locale } from "./shared/types-D5P1JMcX.mjs";
|
|
2
2
|
//#region src/slug/bidi.d.ts
|
|
3
3
|
/** RFC 3987 section 4.2: whether `text` can be a URL component without mixing text directions in a way that renders ambiguously. */
|
|
4
4
|
export declare function isBidiSafeComponent(text: string): boolean;
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { M as applyCompat, N as compileTables, P as fold, j as DEFAULT_TABLES, n as registeredLocale, r as registryVersion, v as latinLocales, z as symbols } from "./shared/registry-
|
|
1
|
+
import { M as applyCompat, N as compileTables, P as fold, j as DEFAULT_TABLES, n as registeredLocale, r as registryVersion, v as latinLocales, z as symbols } from "./shared/registry-D787niCh.mjs";
|
|
2
2
|
import { h as isSegmentNzNc, r as percentEncode } from "./shared/percent-DG-pZhJI.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/slug/bidi.ts
|