@mavogel/cdk-vscode-server 0.0.123 → 0.0.124

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 (88) hide show
  1. package/.jsii +3 -3
  2. package/lib/idle-monitor/idle-monitor.js +1 -1
  3. package/lib/vscode-server.js +1 -1
  4. package/node_modules/node-html-parser/CHANGELOG.md +79 -0
  5. package/node_modules/node-html-parser/README.md +39 -39
  6. package/node_modules/node-html-parser/dist/index.cjs +5079 -0
  7. package/node_modules/node-html-parser/dist/index.d.ts +10 -10
  8. package/node_modules/node-html-parser/dist/index.mjs +5068 -0
  9. package/node_modules/node-html-parser/dist/index.umd.js +5083 -0
  10. package/node_modules/node-html-parser/dist/matcher.d.ts +22 -6
  11. package/node_modules/node-html-parser/dist/nodes/comment.d.ts +1 -1
  12. package/node_modules/node-html-parser/dist/nodes/html.d.ts +2 -2
  13. package/node_modules/node-html-parser/dist/nodes/node.d.ts +2 -2
  14. package/node_modules/node-html-parser/dist/nodes/text.d.ts +1 -1
  15. package/node_modules/node-html-parser/dist/valid.d.ts +1 -1
  16. package/node_modules/node-html-parser/node_modules/entities/LICENSE +11 -0
  17. package/node_modules/node-html-parser/node_modules/entities/dist/decode-codepoint.d.ts +28 -0
  18. package/node_modules/node-html-parser/node_modules/entities/dist/decode-codepoint.d.ts.map +1 -0
  19. package/node_modules/node-html-parser/node_modules/entities/dist/decode-codepoint.js +61 -0
  20. package/node_modules/node-html-parser/node_modules/entities/dist/decode-codepoint.js.map +1 -0
  21. package/node_modules/node-html-parser/node_modules/entities/dist/decode.d.ts +227 -0
  22. package/node_modules/node-html-parser/node_modules/entities/dist/decode.d.ts.map +1 -0
  23. package/node_modules/node-html-parser/node_modules/entities/dist/decode.js +1132 -0
  24. package/node_modules/node-html-parser/node_modules/entities/dist/decode.js.map +1 -0
  25. package/node_modules/node-html-parser/node_modules/entities/dist/encode.d.ts +26 -0
  26. package/node_modules/node-html-parser/node_modules/entities/dist/encode.d.ts.map +1 -0
  27. package/node_modules/node-html-parser/node_modules/entities/dist/encode.js +295 -0
  28. package/node_modules/node-html-parser/node_modules/entities/dist/encode.js.map +1 -0
  29. package/node_modules/node-html-parser/node_modules/entities/dist/escape.d.ts +60 -0
  30. package/node_modules/node-html-parser/node_modules/entities/dist/escape.d.ts.map +1 -0
  31. package/node_modules/node-html-parser/node_modules/entities/dist/escape.js +172 -0
  32. package/node_modules/node-html-parser/node_modules/entities/dist/escape.js.map +1 -0
  33. package/node_modules/node-html-parser/node_modules/entities/dist/generated/decode-data-html.d.ts +3 -0
  34. package/node_modules/node-html-parser/node_modules/entities/dist/generated/decode-data-html.d.ts.map +1 -0
  35. package/node_modules/node-html-parser/node_modules/entities/dist/generated/decode-data-html.js +5 -0
  36. package/node_modules/node-html-parser/node_modules/entities/dist/generated/decode-data-html.js.map +1 -0
  37. package/node_modules/node-html-parser/node_modules/entities/dist/generated/decode-data-xml.d.ts +3 -0
  38. package/node_modules/node-html-parser/node_modules/entities/dist/generated/decode-data-xml.d.ts.map +1 -0
  39. package/node_modules/node-html-parser/node_modules/entities/dist/generated/decode-data-xml.js +7 -0
  40. package/node_modules/node-html-parser/node_modules/entities/dist/generated/decode-data-xml.js.map +1 -0
  41. package/node_modules/node-html-parser/node_modules/entities/dist/generated/encode-html.d.ts +3 -0
  42. package/node_modules/node-html-parser/node_modules/entities/dist/generated/encode-html.d.ts.map +1 -0
  43. package/node_modules/node-html-parser/node_modules/entities/dist/generated/encode-html.js +3 -0
  44. package/node_modules/node-html-parser/node_modules/entities/dist/generated/encode-html.js.map +1 -0
  45. package/node_modules/node-html-parser/node_modules/entities/dist/index.d.ts +89 -0
  46. package/node_modules/node-html-parser/node_modules/entities/dist/index.d.ts.map +1 -0
  47. package/node_modules/node-html-parser/node_modules/entities/dist/index.js +87 -0
  48. package/node_modules/node-html-parser/node_modules/entities/dist/index.js.map +1 -0
  49. package/node_modules/node-html-parser/node_modules/entities/dist/internal/bin-trie-flags.d.ts +48 -0
  50. package/node_modules/node-html-parser/node_modules/entities/dist/internal/bin-trie-flags.d.ts.map +1 -0
  51. package/node_modules/node-html-parser/node_modules/entities/dist/internal/bin-trie-flags.js +49 -0
  52. package/node_modules/node-html-parser/node_modules/entities/dist/internal/bin-trie-flags.js.map +1 -0
  53. package/node_modules/node-html-parser/node_modules/entities/dist/internal/decode-shared.d.ts +38 -0
  54. package/node_modules/node-html-parser/node_modules/entities/dist/internal/decode-shared.d.ts.map +1 -0
  55. package/node_modules/node-html-parser/node_modules/entities/dist/internal/decode-shared.js +195 -0
  56. package/node_modules/node-html-parser/node_modules/entities/dist/internal/decode-shared.js.map +1 -0
  57. package/node_modules/node-html-parser/node_modules/entities/package.json +83 -0
  58. package/node_modules/node-html-parser/node_modules/entities/readme.md +131 -0
  59. package/node_modules/node-html-parser/node_modules/entities/src/decode-codepoint.ts +69 -0
  60. package/node_modules/node-html-parser/node_modules/entities/src/decode.ts +1368 -0
  61. package/node_modules/node-html-parser/node_modules/entities/src/encode.ts +337 -0
  62. package/node_modules/node-html-parser/node_modules/entities/src/escape.ts +187 -0
  63. package/node_modules/node-html-parser/node_modules/entities/src/generated/decode-data-html.ts +12 -0
  64. package/node_modules/node-html-parser/node_modules/entities/src/generated/decode-data-xml.ts +7 -0
  65. package/node_modules/node-html-parser/node_modules/entities/src/generated/encode-html.ts +3 -0
  66. package/node_modules/node-html-parser/node_modules/entities/src/index.ts +160 -0
  67. package/node_modules/node-html-parser/node_modules/entities/src/internal/bin-trie-flags.ts +47 -0
  68. package/node_modules/node-html-parser/node_modules/entities/src/internal/decode-shared.ts +209 -0
  69. package/node_modules/node-html-parser/package.json +35 -30
  70. package/package.json +3 -3
  71. package/node_modules/he/LICENSE-MIT.txt +0 -20
  72. package/node_modules/he/README.md +0 -379
  73. package/node_modules/he/bin/he +0 -148
  74. package/node_modules/he/he.js +0 -345
  75. package/node_modules/he/man/he.1 +0 -78
  76. package/node_modules/he/package.json +0 -58
  77. package/node_modules/node-html-parser/dist/back.js +0 -6
  78. package/node_modules/node-html-parser/dist/index.js +0 -31
  79. package/node_modules/node-html-parser/dist/main.js +0 -1804
  80. package/node_modules/node-html-parser/dist/matcher.js +0 -106
  81. package/node_modules/node-html-parser/dist/nodes/comment.js +0 -33
  82. package/node_modules/node-html-parser/dist/nodes/html.js +0 -1186
  83. package/node_modules/node-html-parser/dist/nodes/node.js +0 -41
  84. package/node_modules/node-html-parser/dist/nodes/text.js +0 -105
  85. package/node_modules/node-html-parser/dist/nodes/type.js +0 -9
  86. package/node_modules/node-html-parser/dist/parse.js +0 -5
  87. package/node_modules/node-html-parser/dist/valid.js +0 -12
  88. package/node_modules/node-html-parser/dist/void-tag.js +0 -27
@@ -0,0 +1,337 @@
1
+ import { XML_BITSET_VALUE, xmlEncodeRegex } from "./escape.js";
2
+ import htmlTrieData from "./generated/encode-html.js";
3
+
4
+ /**
5
+ * A node inside the encoding trie used by `encode.ts`.
6
+ *
7
+ * There are two physical shapes to minimize allocations and lookup cost:
8
+ *
9
+ * 1. Leaf node (string)
10
+ * - A plain string (already in the form `"&name;"`).
11
+ * - Represents a terminal match with no children.
12
+ *
13
+ * 2. Branch / value node (object)
14
+ */
15
+ type EncodeTrieNode =
16
+ | string
17
+ | { value: string | null; next: Map<number, EncodeTrieNode> };
18
+
19
+ /**
20
+ * Flat lookup table for ASCII entity values (code points 0–127).
21
+ *
22
+ * Built once at startup from the full trie. For ASCII characters that need
23
+ * encoding, a direct `asciiEntities[charCode]` array index is much faster
24
+ * than `Map.get(charCode)` because it avoids hashing and bucket lookup.
25
+ *
26
+ * A few ASCII characters also start multi-code-point entities
27
+ * (e.g. `<` + U+20D2 → `&nvlt;`). For those, the table holds the branch
28
+ * node itself (children plus the single-char value), so the ASCII path
29
+ * never consults `htmlTrie`.
30
+ */
31
+ const asciiEntities: (EncodeTrieNode | null)[] = /* #__PURE__ */ Array.from(
32
+ { length: 128 },
33
+ () => null,
34
+ );
35
+
36
+ const htmlTrie: Map<number, EncodeTrieNode> = (() => {
37
+ /**
38
+ * Parse a compact encode trie string into a Map keyed by code point.
39
+ *
40
+ * The serialized format (produced by `scripts/write-encode-map.ts`) stores
41
+ * entries in ascending code-point order with delta encoding:
42
+ *
43
+ * [gap]name;[{children}]
44
+ *
45
+ * - `gap` is a base-10 integer giving `currentKey - previousKey - 1`.
46
+ * The very first entry stores the absolute key. A gap of 0 is omitted.
47
+ * - `name;` is the entity name (without `&` prefix) terminated by `;`.
48
+ * Because gaps use only digits `[0-9]` and entity names always start with
49
+ * a letter `[A-Za-z]`, no additional delimiter is needed.
50
+ * - `{…}` is an optional children block using the same scheme recursively.
51
+ * Children represent the second code unit of multi-character entities
52
+ * (e.g. `<` + U+20D2 → `&nvlt;`).
53
+ */
54
+ const trie = new Map<number, EncodeTrieNode>();
55
+ const data = htmlTrieData;
56
+ let cursor = 0;
57
+ let lastKey = -1;
58
+
59
+ function readGap(): number {
60
+ let value = 0;
61
+ let ch: number;
62
+ while (
63
+ (ch = data.charCodeAt(cursor)) >= 48 /* '0' */ &&
64
+ ch <= 57 /* '9' */
65
+ ) {
66
+ value = value * 10 + ch - 48;
67
+ cursor++;
68
+ }
69
+ return value;
70
+ }
71
+
72
+ function readEntity(): string {
73
+ const semi = data.indexOf(";", cursor);
74
+ const entity = `&${data.substring(cursor, semi)};`;
75
+ cursor = semi + 1;
76
+ return entity;
77
+ }
78
+
79
+ const astralEntries: [number, string][] = [];
80
+
81
+ while (cursor < data.length) {
82
+ lastKey += readGap() + 1;
83
+
84
+ const entityValue =
85
+ data.charCodeAt(cursor) === 123 /* '{' */ ? null : readEntity();
86
+
87
+ if (data.charCodeAt(cursor) === 123 /* '{' */) {
88
+ cursor++; // Skip '{'
89
+ const next = new Map<number, EncodeTrieNode>();
90
+ let childKey = -1;
91
+ while (data.charCodeAt(cursor) !== 125 /* '}' */) {
92
+ childKey += readGap() + 1;
93
+ next.set(childKey, readEntity());
94
+ }
95
+ const branch = { value: entityValue, next };
96
+ trie.set(lastKey, branch);
97
+ cursor++; // Skip '}'
98
+ // ASCII fast path holds the branch node itself (children + value).
99
+ if (lastKey < 0x80) {
100
+ asciiEntities[lastKey] = branch;
101
+ }
102
+ } else if (lastKey < 0x80) {
103
+ asciiEntities[lastKey] = entityValue;
104
+ } else if (lastKey > 0xff_ff) {
105
+ astralEntries.push([lastKey, entityValue!]);
106
+ } else {
107
+ trie.set(lastKey, entityValue!);
108
+ }
109
+ }
110
+
111
+ /*
112
+ * Batch-insert astral entries as surrogate-pair trie nodes.
113
+ * Entries are sorted by code point, so same-high-surrogate groups
114
+ * are contiguous — no intermediate grouping Map needed.
115
+ */
116
+ let astralIndex = 0;
117
+ while (astralIndex < astralEntries.length) {
118
+ const hi =
119
+ 0xd8_00 | ((astralEntries[astralIndex][0] - 0x1_00_00) >> 10);
120
+ const children: [number, string][] = [];
121
+ while (
122
+ astralIndex < astralEntries.length &&
123
+ (0xd8_00 | ((astralEntries[astralIndex][0] - 0x1_00_00) >> 10)) ===
124
+ hi
125
+ ) {
126
+ const lo =
127
+ 0xdc_00 |
128
+ ((astralEntries[astralIndex][0] - 0x1_00_00) & 0x3_ff);
129
+ children.push([lo, astralEntries[astralIndex][1]]);
130
+ astralIndex++;
131
+ }
132
+ trie.set(hi, { value: null, next: new Map(children) });
133
+ }
134
+
135
+ return trie;
136
+ })();
137
+
138
+ /**
139
+ * Bitset covering ASCII code points 0–127. Each of the four 32-bit words
140
+ * covers a 32-code-point range. A set bit means "this character needs
141
+ * encoding" when used with `encodeHTML`.
142
+ */
143
+ const HTML_BITSET = /* #__PURE__ */ new Uint32Array([
144
+ 0x16_00, // 09 (\t), 0A (\n), 0C (\f)
145
+ 0xfc_00_ff_fe, // 21-2D (!-.), 2E (.), 2F (/), 3A-3F (:;<=>?)
146
+ 0xf8_00_00_01, // 40 (@), 5B-5F ([\]^_)
147
+ 0x38_00_00_01, // 60 (`), 7B-7D ({|})
148
+ ]);
149
+
150
+ const XML_BITSET = /* #__PURE__ */ new Uint32Array([0, XML_BITSET_VALUE, 0, 0]);
151
+
152
+ /*
153
+ * Regex equivalent of `HTML_BITSET` (plus all non-ASCII code units, lone
154
+ * surrogates included — no `u` flag). Must stay in sync with the bitset:
155
+ * the scan uses the regex to find candidates and the bitset to re-check
156
+ * adjacent characters. The XML equivalent is `xmlEncodeRegex`, shared with
157
+ * `escape.ts`.
158
+ */
159
+ // eslint-disable-next-line unicorn/prefer-unicode-code-point-escapes -- the `\u{...}` form requires the `u` flag, which we deliberately omit so lone surrogates match by code unit
160
+ const HTML_ENCODE_RE = /[\t\n\f!-/:-@[-`{-}\u0080-\uFFFF]/g;
161
+
162
+ const numericReference = (cp: number) => `&#x${cp.toString(16)};`;
163
+
164
+ /**
165
+ * Encodes all characters in the input using HTML entities. This includes
166
+ * characters that are valid ASCII characters in HTML documents, such as `#`.
167
+ *
168
+ * To get a more compact output, consider using the `encodeNonAsciiHTML`
169
+ * function, which will only encode characters that are not valid in HTML
170
+ * documents, as well as non-ASCII characters.
171
+ *
172
+ * If a character has no equivalent entity, a numeric hexadecimal reference
173
+ * (eg. `&#xfc;`) will be used.
174
+ * @param input Input string to encode.
175
+ */
176
+ export function encodeHTML(input: string): string {
177
+ return encodeHTMLTrieRe(HTML_BITSET, HTML_ENCODE_RE, input);
178
+ }
179
+ /**
180
+ * Encodes all non-ASCII characters, as well as characters not valid in HTML
181
+ * documents using HTML entities. This function will not encode characters that
182
+ * are valid in HTML documents, such as `#`.
183
+ *
184
+ * If a character has no equivalent entity, a numeric hexadecimal reference
185
+ * (eg. `&#xfc;`) will be used.
186
+ * @param input Input string to encode.
187
+ */
188
+ export function encodeNonAsciiHTML(input: string): string {
189
+ return encodeHTMLTrieRe(XML_BITSET, xmlEncodeRegex, input);
190
+ }
191
+
192
+ /**
193
+ * Whether `code` (a UTF-16 code unit) must be encoded: any non-ASCII unit, or
194
+ * an ASCII unit flagged in `bitset`.
195
+ * @param bitset Bitset of ASCII characters to encode.
196
+ * @param code Code unit to test.
197
+ */
198
+ function isEncodable(bitset: Uint32Array, code: number): boolean {
199
+ return code >= 0x80 || ((bitset[code >>> 5] >>> code) & 1) === 1;
200
+ }
201
+
202
+ /*
203
+ * The inline scan beats the regex jump only for short gaps (measured
204
+ * break-even is ~7 characters; below it the per-call regex overhead
205
+ * dominates, above it the regex skips clean spans faster in native code).
206
+ * So we scan at most `INLINE_SCAN_WINDOW` characters inline before deferring
207
+ * to the regex. Any gap long enough to exhaust the window switches to
208
+ * long-gap mode, which skips the inline scan entirely; we stay in that mode
209
+ * while total gaps are at least `LONG_GAP_THRESHOLD` characters long and
210
+ * drop back to the inline scan as soon as a shorter gap appears. Gaps are
211
+ * always measured from where they start, so every window-exhausting gap
212
+ * enters long-gap mode and no gap length pays both scans repeatedly.
213
+ */
214
+ /** @internal Exported for tests; not re-exported from the package entry. */
215
+ export const INLINE_SCAN_WINDOW = 16;
216
+ const LONG_GAP_THRESHOLD = 8;
217
+
218
+ function encodeHTMLTrieRe(
219
+ bitset: Uint32Array,
220
+ re: RegExp,
221
+ input: string,
222
+ ): string {
223
+ const { length } = input;
224
+ let out: string | undefined;
225
+ let last = 0; // Start of the next untouched slice.
226
+ let index = 0;
227
+ let wasLongGap = false; // The previous gap was long; skip the inline scan.
228
+
229
+ while (index < length) {
230
+ let char = input.charCodeAt(index);
231
+
232
+ /*
233
+ * Find the next encodable character (one matching `bitset`, or any
234
+ * non-ASCII unit). Gaps between entities in dense text are only a
235
+ * few characters, so scan a short window inline first; the regex —
236
+ * which matches exactly the same characters and skips clean spans
237
+ * in native code — runs for longer gaps. Gap lengths cluster, so
238
+ * after a window-exhausting gap the window is skipped until a gap
239
+ * shorter than LONG_GAP_THRESHOLD reappears. Once located, the
240
+ * character is captured in `char` and control falls through to the
241
+ * encode logic below instead of re-testing it on the next loop
242
+ * iteration.
243
+ */
244
+ if (!isEncodable(bitset, char)) {
245
+ const gapStart = index;
246
+ let next = index + 1;
247
+ let wasFound = false;
248
+ if (!wasLongGap) {
249
+ const bound = Math.min(index + INLINE_SCAN_WINDOW, length);
250
+ while (
251
+ next < bound &&
252
+ !isEncodable(bitset, (char = input.charCodeAt(next)))
253
+ ) {
254
+ next++;
255
+ }
256
+ if (next < bound) {
257
+ // `char` already holds the encodable unit at `next`.
258
+ index = next;
259
+ wasFound = true;
260
+ } else if (next >= length) {
261
+ break;
262
+ }
263
+ }
264
+ if (!wasFound) {
265
+ /*
266
+ * Every match is a single code unit, so `test` pins it at
267
+ * `lastIndex - 1` without allocating a match object.
268
+ */
269
+ re.lastIndex = next;
270
+ if (!re.test(input)) break;
271
+ index = re.lastIndex - 1;
272
+ /*
273
+ * Reaching the regex from the inline scan means the gap
274
+ * exhausted the window, so it is long by definition; once
275
+ * in long-gap mode, stay until a gap shorter than the
276
+ * threshold appears.
277
+ */
278
+ wasLongGap =
279
+ !wasLongGap || index - gapStart >= LONG_GAP_THRESHOLD;
280
+ char = input.charCodeAt(index);
281
+ }
282
+ }
283
+
284
+ // Lazy-init: copy the prefix before the first character that needs encoding.
285
+ if (out == null) out = input.substring(0, index);
286
+ else if (last !== index) out += input.substring(last, index);
287
+
288
+ if (char < 0x80) {
289
+ const node = asciiEntities[char];
290
+ if (typeof node === "object" && node !== null) {
291
+ // Multi-code-point entity first (e.g. < + U+20D2 → &nvlt;).
292
+ if (index + 1 < length) {
293
+ const value = node.next.get(input.charCodeAt(index + 1));
294
+ if (value != null) {
295
+ out += value;
296
+ last = index += 2;
297
+ continue;
298
+ }
299
+ }
300
+ out += node.value ?? numericReference(char);
301
+ } else {
302
+ out += node ?? numericReference(char);
303
+ }
304
+ } else {
305
+ // Non-ASCII: full trie lookup with multi-char entity support.
306
+ let node: EncodeTrieNode | undefined | null = htmlTrie.get(char);
307
+
308
+ if (typeof node === "object") {
309
+ if (index + 1 < length) {
310
+ const value = node.next.get(input.charCodeAt(index + 1));
311
+ if (value != null) {
312
+ out += value;
313
+ last = index += 2;
314
+ continue;
315
+ }
316
+ }
317
+ node = node.value;
318
+ }
319
+
320
+ if (node == null) {
321
+ // No named entity exists; emit a hexadecimal numeric reference.
322
+ const cp = input.codePointAt(index)!;
323
+ out += numericReference(cp);
324
+ // Astral code points consume two UTF-16 code units.
325
+ if (cp !== char) index++;
326
+ } else {
327
+ out += node;
328
+ }
329
+ }
330
+ last = index += 1;
331
+ }
332
+
333
+ // If nothing needed encoding, return the original string (avoids allocation).
334
+ if (out == null) return input;
335
+ if (last < length) out += input.substr(last);
336
+ return out;
337
+ }
@@ -0,0 +1,187 @@
1
+ /**
2
+ * Get the named reference for an XML special character or U+00A0.
3
+ * @param char Code unit matched by one of the escape regexes.
4
+ */
5
+ function getEscape(char: number): string {
6
+ return char === 34
7
+ ? "&quot;"
8
+ : char === 38
9
+ ? "&amp;"
10
+ : char === 39
11
+ ? "&apos;"
12
+ : char === 60
13
+ ? "&lt;"
14
+ : char === 62
15
+ ? "&gt;"
16
+ : "&nbsp;";
17
+ }
18
+
19
+ /**
20
+ * Read a code point at a given index.
21
+ * @param input String to read the code point from.
22
+ * @param index Current read position in the input string.
23
+ * @returns The code point at `index`, or `undefined` if `index` is out of range.
24
+ * @deprecated Use `String.prototype.codePointAt` directly instead; this export
25
+ * will be removed in the next major.
26
+ */
27
+ export const getCodePoint: (input: string, index: number) => number = (
28
+ input: string,
29
+ index: number,
30
+ ): number => input.codePointAt(index)!;
31
+
32
+ /**
33
+ * Bitset for ASCII characters that need to be escaped in XML.
34
+ */
35
+ export const XML_BITSET_VALUE = 0x50_00_00_c4; // 32..63 -> 34 ("),38 (&),39 ('),60 (<),62 (>)
36
+
37
+ /**
38
+ * Matches exactly the characters `encodeXML` escapes: the five XML special
39
+ * characters plus every non-ASCII code unit (lone surrogates included — no
40
+ * `u` flag). Kept in sync with `XML_BITSET_VALUE`.
41
+ *
42
+ * Shared with `encodeNonAsciiHTML` in `encode.ts`. Because the regex is
43
+ * stateful (`g` flag), every call site must set `lastIndex` before use.
44
+ */
45
+ // eslint-disable-next-line unicorn/prefer-unicode-code-point-escapes -- the `\u{...}` form requires the `u` flag, which we deliberately omit so lone surrogates match by code unit
46
+ export const xmlEncodeRegex: RegExp = /["&'<>\u0080-\uFFFF]/g;
47
+
48
+ /**
49
+ * Whether `code` (a UTF-16 code unit) is escaped by {@link encodeXML}: a
50
+ * non-ASCII unit, or one of the five XML specials flagged in
51
+ * `XML_BITSET_VALUE` (which is only meaningful for code units 32-63).
52
+ * @param code Code unit to test.
53
+ */
54
+ function isXmlEscapable(code: number): boolean {
55
+ return (
56
+ code >= 0x80 ||
57
+ (code >= 32 && code < 64 && ((XML_BITSET_VALUE >>> code) & 1) === 1)
58
+ );
59
+ }
60
+
61
+ /**
62
+ * Encodes all non-ASCII characters, as well as characters not valid in XML
63
+ * documents using XML entities.
64
+ *
65
+ * If a character has no equivalent entity, a numeric hexadecimal reference
66
+ * (eg. `&#xfc;`) will be used.
67
+ * @param input Input string to encode.
68
+ */
69
+ export function encodeXML(input: string): string {
70
+ const { length } = input;
71
+ let out: string | undefined;
72
+ let last = 0;
73
+ let index = 0;
74
+
75
+ while (index < length) {
76
+ const char = input.charCodeAt(index);
77
+
78
+ /*
79
+ * Find the next character to escape: scan a short window inline
80
+ * (escapable characters cluster in markup-heavy input), then fall
81
+ * back to the regex, which skips clean spans in native code.
82
+ */
83
+ if (!isXmlEscapable(char)) {
84
+ const bound = Math.min(index + 32, length);
85
+ let next = index + 1;
86
+ while (next < bound && !isXmlEscapable(input.charCodeAt(next))) {
87
+ next++;
88
+ }
89
+ if (next < bound) {
90
+ index = next;
91
+ continue;
92
+ }
93
+ if (next >= length) break;
94
+ xmlEncodeRegex.lastIndex = next;
95
+ if (!xmlEncodeRegex.test(input)) break;
96
+ index = xmlEncodeRegex.lastIndex - 1;
97
+ continue;
98
+ }
99
+
100
+ if (out === undefined) out = input.substring(0, index);
101
+ else if (last !== index) out += input.substring(last, index);
102
+
103
+ if (char < 64) {
104
+ // Known replacement
105
+ out += getEscape(char);
106
+ last = index += 1;
107
+ continue;
108
+ }
109
+
110
+ // Non-ASCII: encode as numeric entity (handle surrogate pair)
111
+ const cp = input.codePointAt(index)!;
112
+ out += `&#x${cp.toString(16)};`;
113
+ if (cp !== char) index++; // Skip trailing surrogate
114
+ last = index += 1;
115
+ }
116
+
117
+ if (out === undefined) return input;
118
+ if (last < length) out += input.substr(last);
119
+ return out;
120
+ }
121
+
122
+ /**
123
+ * Encodes all non-ASCII characters, as well as characters not valid in XML
124
+ * documents using numeric hexadecimal reference (eg. `&#xfc;`).
125
+ *
126
+ * Have a look at `escapeUTF8` if you want a more concise output at the expense
127
+ * of reduced transportability.
128
+ * @param data String to escape.
129
+ */
130
+ export const escape: typeof encodeXML = encodeXML;
131
+
132
+ /**
133
+ * Escape `data` using `re`, mapping each matched character to its entity.
134
+ * Every match is one UTF-16 code unit, so its index is `lastIndex - 1`.
135
+ * @param re Global regex matching exactly the characters to escape
136
+ * (`"`, `&`, `'`, `<`, `>`, `\u00A0` at most).
137
+ * @param data String to escape.
138
+ */
139
+ function escapeWithRegex(re: RegExp, data: string): string {
140
+ re.lastIndex = 0;
141
+ if (!re.test(data)) return data;
142
+
143
+ let out = "";
144
+ let last = 0;
145
+ do {
146
+ const index = re.lastIndex - 1;
147
+ if (last !== index) out += data.substring(last, index);
148
+ const char = data.charCodeAt(index);
149
+ out += getEscape(char);
150
+ last = index + 1;
151
+ } while (re.test(data));
152
+
153
+ return out + data.substring(last);
154
+ }
155
+
156
+ const xmlEscapeRegex = /["&'<>]/g;
157
+ /**
158
+ * Encodes all characters not valid in XML documents using XML entities.
159
+ *
160
+ * Note that the output will be character-set dependent.
161
+ * @param data String to escape.
162
+ */
163
+ export function escapeUTF8(data: string): string {
164
+ return escapeWithRegex(xmlEscapeRegex, data);
165
+ }
166
+
167
+ const attributeEscapeRegex = /["&\u{A0}]/gu;
168
+
169
+ /**
170
+ * Encodes all characters that have to be escaped in HTML attributes,
171
+ * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
172
+ * @param data String to escape.
173
+ */
174
+ export function escapeAttribute(data: string): string {
175
+ return escapeWithRegex(attributeEscapeRegex, data);
176
+ }
177
+
178
+ const textEscapeRegex = /[&<>\u{A0}]/gu;
179
+
180
+ /**
181
+ * Encodes all characters that have to be escaped in HTML text,
182
+ * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
183
+ * @param data String to escape.
184
+ */
185
+ export function escapeText(data: string): string {
186
+ return escapeWithRegex(textEscapeRegex, data);
187
+ }
@@ -0,0 +1,12 @@
1
+ // Generated using scripts/write-decode-map.ts
2
+
3
+ import { decodeTrieDict } from "../internal/decode-shared.js";
4
+ /** Packed HTML decode trie data. */
5
+ export const htmlDecodeTree: Uint16Array = /* #__PURE__ */ decodeTrieDict(
6
+ "!}.&u%}'&}*'~!6*)%&,~!J~!J~%L~y<~!R,~~%Lu~~#GD~~#|)1#%}^%}2%+#.##%##%}&%##%'#%##&%#%#'%#&#%#&#'#%%#&#%##%#)%''%&%#%#'%#%%#%%}%%%#%#&(23#%%#&-%0%('1#(##%#'##+%'*.:1}#%#6-+(%'%%#%%%}#L'2351&('%}&/N'(0(/*-%(%%}#'+&T%7.2}#&%&#%#36/5##%&%%#&#%%#))2%%##%&&'0~!#*+&'%1~!%).'3q?&%'1~!.##%6(~!+%%%(Gw'rT~!E#<nA%#jZ~!H%(~!42##~!*31&~!G%U~#)5~#`3~!J~!Z~%]~%Y~%C~!q~!u~#kz~%#~!6'~!D~!U~!?~#T~!c%~!G#'~%7|~!G~!J~!G&~#pb~(Df}#%}*&}#%##%##%##&#-}&'#'&%#.++}%mI,#,@&(}*%}*'%&##&#%##%}&0}#.},U},%}+%}&%}#%##&}B%(}(%}+%)})%##%#&}&%##%&}<%}>%#%&}*%}(%}9%}/%})%}*%}*%}?&}&%}3%}&*#%})%#%#)}#&#-#+*%E%%'%'#%}#*V##&##I}#&&##%&%#&&Qf%%))w/0+&%#(#.%-''''++++7}>%4'',##1,#%#&%##&#'##&#*#9)%&%}#*}%,#+P(%A&%#'&##wSD',9E00#y#@}(+}&%&>~!#~!X}#*}(&&}(&}(,%}%&#+&}#&}I%#%}%)#(},'%#*}4%%#%}(''}#/##(##),%-##%%)#&}(.}&%#&}%%}*&#%},&&}&%}#%*'#%})%}D&}&%}-&}6&#&}-,%}#%})-(~+`~,=?~I9'9%~!,#%})%})%}@%}?%}(~!?~#<~#pP~#BG~#=1#%K+~#?#~%;)~#A~#mF1~#A'~'X%'~#lR~#N~'N~#r~#m#-~#i'?%#'%~#B%##%,%#~#_%#0%~#]732~,w~2+#:&#%&'0%&>%}#>##F+)#%&&#(+_}4&}-%}(&}@&}O7Fdf0@+/v4}&WU##&/0#&'('B#%}.%}'+#%}#%%&#&%#%##+#&#)#6#'#.},%}c%},%#%##%&#&%#&~#>'*-.%##%##%}#%%}%'~#)D1}#%*&~#_%%'(~#S2%'.}#~#=##*'*-%}&'%'##&&~'E%.#&~#M4}%%##&'%#~#O1##%&#'+~#<B%##%%'%+~#;#@%}#&%#&&%#(~#H1}'%'##&&~#?A}&'~#D#%32}'&&&&~#[}'(#%}'~#;C})&}%%#%~#=&%,3}%'(#%%~#^'#&&)#%'~#Y%-~#d-%'~#^%%&#&&&}#~#b~2t*&'~&(~&@~0%~e~3}%*''0})&}+~!9##-}#%-hD*)1fC#%/&/fB#40~!+#)*4~!+~!K'&:~!/*7~!.#~!H~!L':~%x&~!H#~!*~%1~!I#~!+A~#p'~!F~~#-#~,,(~.Z~!V~%;'B'mq-W~!N~%I%#&&#&}#%},%%}'%}+X#%}#&}(%}'%}<%}#%}%%'}'%}:~![)9@~%>~#UA%-%##&~!C%~!-.9:~!1~!-^2/:a~!y,D*J#-5)/4~%23,~#G~!L1~!0X3`~!2+~!!0-~&E~!W~!o,>Y&]~%cZx_&~#O*9#A#'#+I'%#)~!0B*-5A+-((F&*M#)(-7-5+'-3a5Vi~!Y~!?+[)%3),ERHm~!+:D,VG.+)?fB%%*(%)'(#&80%1'8`K8?`+'Z#&O&'H5#*9)A%%5&3))0%39+.*7#()&&*=4@**L)<'_&*+..;(#*+)./&0#3)%')-8(4ixD(&.}%,('aI:,)%,k2231T)I'#/-W7,/'Q#.'Y24+h')37</31&83##&0#),H(?'&?/1##%#&&#%''-%&&&#(&''&#.-'%#%%(,')*'&#&#'##%(%(#%('#&##%%%%('%#%#%%#%#&%##h>w+v<ayvyvcg.uuhKr}g/v|g>u9i[~>g5uI~=RvdwEg;v/g;uk!!TTSx]@RT!U!#!@VBRUU!'UTe-d0c`e&gSdicedFcrdTaqb.kYcAohdYd@a3e+d}dMdtd.aJ#bqcK`dle/e.e'dwdPdodddjbEb}ogd^ofdpduc6j?l%d{drdqc)d7bacOdQ%T#Y)X.sR[yH>6Vyv3[xwLu>vo'!*.[yBacahoj>6Rew3[xqdZa#!a&#^(X-[yG>6Vyu3[xvg3sEr|g.u/Ri9db0T#^(Xa)!-[y;>6Vylg4wKs{JwNZt3@3r=c4Z([xlg;wKt!cpq's@v7A'*a(a+!-a#[y<3Dt?3Dt'>6Vym3[xmg9rxsNJwLZt4~?r?db1T#`-!(Xa,!0[yS>6Vz%NuQs.g4wKtnJwNZtS@3r>c4Z([y%g;wKtrdga8!a(!#&T*Y-Xa#!a0<or[yc3Dtq>6Vz43[y3JwNZtf@3s!Ju}!%Dti:pm3c_%X#tjB5pkd6q!r]u?voC'*-a.a2!0a&a+[yI3DtI3Ds~3DtH>6Vyw3[xx;:s#~<5pKJwNZtE@3r~d`a)!a2T#a.(!+U.X1[yT3Dt`3Dtv>6Vz&3[y&g9rxwzcxstPu.<rAJwLZtT~?r@dZa%!a.&^*Za(/Reu[ya>6Vz23[y1g3sEr}wkg{NuQRg{ci(U#5@b`~,cg#U(2WnH5wugcRh7dX#T(Y,a'Ta!!a,[yZ<]mj>6Vz,3[y+Pv#5ReZKu+=,%!H}7ABwkaS?Rh:BcW(X#<]mrj:ubv/ARekdg%!(!a.*Ta(Y.X1!#sP>Rl*Dt6[y>>6Vyo3Wf*jOvuumvuRgRJuq*!:9<B@bX~3jVv&v@s@5Re[d/rQt{uAvo&a&a*)a2!,0Wf!3Dt0=Bs'>6Re}3[xy~<5s%JwJZt1~Gs)c;&!#2sJkNuXvzq7rxu,Re8dka4!a8(aEZ+a@Y.X1Xa)[yd=Bs(3DtP>6Vz53[y4cX#X&Re:avRe9~<5s&JwJZtQ~Gs*i^rzvdRg+Jv{%!2sbB@bX}kdga,!Za?&^*T1/!a'Dt+[y6>6Vyf3Wf%g/u;s4hGu6?Rh-JvZ,!c%#&RoX54Rivj7uyvf8RgTKvZB%*!2sGh<vu5Rgq<=C::9bb~#dZ#T&Ta6Y.X*Dt>[y93Wf)coZ(T,6VyifluvRgC@95@B@bX~/hFu34cC#T,k/unq8w8Q5RkUklwQuzunq8w8Q5Rk8d/rJu?v8w9)-&!a0a;a&aIWejg3sEr/h1s<DtDJvyZqY5aws3Jvy!&Wei~Hr1:au5@Bag>23E~5c:Z&bX};kKv?w&unuVu5Rjc;>bs)#~@:Rh.=ay<a]C;b`}Vd6s/t{uAvoaxa()!a,a7%-a#a2Dt,[yF2Wo[>6Vyt3[xuNuPRi&NuPwpi#RoWh?vf8Ri%Jv]!%Ri:KvxD!.'2WeAjZu`q9rxu,Re7woeAg-unLq(qA_/*2Wg_g3u5q^9:4E}/jTrxrzv=Wkkd~0UX#^^Xa-a1a5T&a=U1a'*aEa]!a*aPaA-adok[y54Rn>;:p3~Dp5g9rpsFNvZqjg3uJp4~<5p0Pw;5qlJwNZt*@3p1Pw:5p/Ou!5p2JvG'!6Vye=<qnJvh_[xhg3v,Rh3kOwOw-sDuev/Re^dha[a%!%!a+#Ta7)-5TaCaO!aka!a)sf[yb2>Rl!9ARiq5E}Qg=ucRkBE|oJrJ_@Wk~@Wk{JrJ_@Wk|@WkyJrJ_@Wk}@WkzJvO_[y2g-vMRmiKuYC!)&>Ri;>Ri<@3RkNc](X#@9Rk=g5vuRmhKvDB!+'=]meg3u4Rmgd)#Y'Vz3CARmfd`a+!%T'!+#Ta1Ta6TaM-sTDt9[yA9sYd'%Y#s[[xpj:ueunaXRgEjRq,v-vuqdd2'`#6Rev<32@5>:2<E}5xIo9a*X#Y(;5RePJvD_g>vyRgNj8w)v8<wggs:RgXiZt|vjx,hSq3ah!-(~@:Ro/Ou!5RhWj^v(pyw8unRhUdx-UY#^Ua.a3a70!)%UX1TaDa)'omRiRRhE[y:3Dsz=Br,>6Vyj3[xkg6ruwjcqsrPw;5r*Ku]D'Zt-@3r(~?r.i[vwv]dU1a--U#`a4(g/vsRhPOu!5RhLj:rmu9Wo!~@:wdh@g/vsRiTjXuvvNr}:RhBj^v(pyw8unRn]dz1UYa'a+^Y(!aETZalaRY.Ta?a4[yDJw1!#qLsW>6Vyrfzq-pLflpwRe|Js>%!Dt@3Dt&Jvy_[xs~HrnjMuwpsw'RecKu+D#'!t<~Grl~?rjg5u-x,gwp{ah!-(~@:Rg~Ou!5Rh'jXuvvNr}:Rh#cW#X/c;&!#2sLi[v7u7RgpJv)(!iLrxu,Re6j7v@s@5Se[e7d`aW!Za(a`T.a#!a3!&aDa-!9)Dt_=6s+3[x~~DR|h~DS6avhGun5RkZj3w)v-]mkKunB!&*]kb97R|i<ARk<c:Z(6Vy}Juh'!wziMRoS:F|vkLuauJv5vtvQRh1d='T+Y#VyO~DR|jcF#T'7R|g97R|kJv3'!ay<Rj,Jvh&!:ReXcsa6*a+#a#_aIRf9aLRf?c,Z&Rf5Rf7c.Z&Rf;Rf>cQ#%T'p-Rf8Rf=ct#%'(*!,p,Rf4p+Rf6Rf:Rf<d~'Ua%U*^UYa(!a,-!#a4YaTalaEX0a8a<Weo3Dt/3Dsx=Br93Wen~Dr;~<5p<JwNZt2@3p=Pw:5p;Ou!5r3c7&!#:p>3Ds}KvGB)_6Vyk2sM=<r7x'eovA(!hFu1ARf}cV#X&@r5j6rvwQa^Rf3c=Za'wkghJv__g;unRggA53B9=b^}%j6uduo5Jq;!(hIv%2Re`Ou4ARe_e%a#^^^Xa&!a*a2!&a6YaP!*ad!#a:aE/5Rn?[y@>6Vyp;:pE~DrY~<5pBJwNZt8@3pCh=rt3rWPw:5pAJup_[xoNuPpF9c!#'45pD5ARn)d8#X'X*3@rU72s]h>v<<sSjJpqvewOJq/(!hNw'5ReBk0s2u3w/w'5ReE5@Jq.!a+JQ!&WeU23d(#Y&RjG5]jBk!u7w&u0udARjEe#+^^^Ub#!a2/a`Z(agT1!a-a;|@TaG!aS[yV=Re~fow'RguNuPRe?bz#'>RoUWeL>:Cbb|?JwPZtVg6ruRmzJvD'!6Vz(g/vmRh~Jvy_[y(g9voRgyx*cy(#2>Ri2B9b]~9kIw9u7rluJu3Rg]dI#a%UY'@=p%CAx.gQZ&RhwwygtRm{x5g_Z'+ABqR9Woa=Bp&dV#^*Xa'!&@o{g4v]Rk;Jv{!%Rk[wkkiA5RkiwwfUB=x,fUuqC&*!>RfTg8v0RfV~ARfSd;rJsAuAv9wR'ae+/aO!a@aza/a#[yQ@Wg!2Wemg3sEr0JvB_g>uvReWg2v+Re=KupB_+[y!2AbY~-~Hr2AJwD!(h<~El>h<~El?Kun@+_:9b`}Kg-v/Ri3g;vtwyk_9]k_d=&T#*U.6qh@Ab`|K9:H|CJv[!&3Dtex'fDwC%!Rf[9WlMd[(^X,!a%Z06Vz!@WgBg=v~Rgvg,QRe@awd,#Y+jTv|Q~EfWj]uNr|~FRfXdy#Y&^Ua%!aO.!(a)Ua;=!a@aKap!a-,a!Ta]a[rSa]p?[y82sK=Bq~;:p:~<5p8Pw:5p7d'#Y'Wf(;RnRi[u4w&RgJJvG'!6Vyh=<r#ijuuv/sIKuYD'ZtG@3p9~Gr&d2#`(g<vtRgFj`u5w&rqpxRf2CJuY!+:wfnTOu!5Rg}jNs1ucv&RfwJvA!&3@q|BDcC#T,k/unq8w8Q5RkTklwQuzunq8w8Q5Rk9dga#!a'!a=#a0!:+Tb*b@aO.a4!aba8aFJv^}?!VyR~Dr<g;u%Rn.~<5p[x'e`wNZtR@3p]Pw:5pZhNvjBp.woe_g5u-r4JwF!%DtO3:ooc7&!#:p^3DtpLuGw(!+%)Dtk6Vz#2sd=<r8d'#Y([y#<x3gJt`w@!)%}MRiowzikRij=]ilxAf3,U(#B2Rf#g0v-Rm[ck{`U#]giKv3>)!&6Ri154s,KuGB_%@r68r:dJ|t`#X(9<E|u2@H|rx3gJu?w'!+'1Nu7Reg4=H~+9<wxgY95Rm]xLggZ-`(X}U2:Ri4h<uOawRmsJv__5@bb{jbV~3dka#a'a]!,#a+U=a>b6a3b%!/aKa/)!arwve^VyJ;:pR~DpTg3uJpS~<5pOPw;5qmPw:5pNOu!5pQJvG'!6Vyx=<qoJvA!{~Jup!%@qk7Rn/KvyD!}''[xz;>wkh'?Rh,x8gyt`w5D!&),(SgyccRgztJ@3pPB5p#d'(Y#<]mmifubw&RgoJvE&!82s^JvF&!8Rf,ADb]~;x=h'rNu]vK!,%'*0RnORh)4Rh*AqQg-vaRnNg;wHwkh'ba~4cE#Ta*x3gctyw@'!+%RnFRnD<4Rn@hFvK5RnCxWg[#`&a0Ua()`1Rm75Rg[c]%X#qi8Rg^NvdRj>BwzgZauwji7Rm6A4wgg]d1#&(*,.0a#Rm;Rm<Rm=Rm>Rm?Rm@RmARmBe%#^^^Xaea?aC/b+(,!a+a#!a/!>a&Ta<aKbD!2wphBRnk[yPw}hE|.=Br-3Dtm>6Vy~g6urRf.x,hPrNav!%'RnqRo%Ro#Nu;q[Pw;5r+JwNZtM@3r)d'#Y'Weh;xChL#`&RnmRnoKu}>%(!Rne~Bs-;2wjcussJv+'!aYSO}6@B<5?ba~8LrNvj!.%*ROwungw~ng~:9;Ri^>wtnig;wHRnixDh@|(UZ.x1h@|)!#:2<H|*xHn]#-UX'3Ro)z=iT}6ARns=Bwsn_wpnaRncw]aR(#UXa&Ua*a/=]iPd'#Y&Ro'WnXf{QRm2hNvj]nZd`'T~&1`{|`#9b]{}c:'!#Wl{>@=be}]?cl{{U#:5Abb}Jds#^YaF!a*b4a#a3aPa>&Tb!bH!*a_!Eau?/a&RjY<]gj>6Vz*;:pe~DrZg,QRj1JwNZtX@wihspcJvZ&!VyX9WmOJu|!|N2WmHJvh&!]ht~Bpbcn&T(!#RmQ<s7Nu;padH#X'`+WmJ@>RmKCARhnKup=!)&Wf+:RhqNuPpf9c!#'45pd5AwghpARn(Ls@w!%,)!RmP@Wfe<E|IJva!&WmNg8vsRmLd`*.`#Y'Xa!axRn*]hrA8Rhug5s@rXg8u!RmMd8#X'X*3@rV72smdI*#UY&RmICARho~GsgxVgd)Ta'U-Y&Xa!T#RnEWnA@Wffg1uDRi0hFvK5RnBxGnG&#`%owp)@wsf+bX}Ze-*1!a*^^^Ua|!#a.aq&Ya2!a>.a6!a:aO`aJDtL[y`@Wg#>6Vz12@wzoYRoZNuPRi!NuPRhzg=ucRi,@=b`{Yg=ucRi-ACJvB!&Sh[ebSh]ebi`wUuFRm4Jw2_[y0JvB!.<Ju(!&SoG}6Shd}6<Ju(!&SoH}6She}6Kur@._g5vHRieJvx!{L2G{Kx6gd'T#?Rh82Wi5cZ#X(g1w)Rm5dW-Y(Ta#!a)!#aYa=wnfE=su2>>bU{0j9udv:<svj8uQv-7RgHdE%#^'sq9sp=>Bb_{TJv`!&g/r|snj6v(us5d,#Y(56H}[978H}]Jw5!&g1rushJvB!+j;v{u5?zDhd}6}bj;v{u5?zDhe}6}ce*#`(^^^a[aea!=!a6a*aoXb1a.!aAbL!b>,b'aL!aV@Wf|2Wlg3[y/JwNZt^@3piPw:5pgJunZou3@rsJva&!Vy_g<v~Rm#JvG'!6Vz0=<r{Ju{%!:pj@WfsiXuJu3Rm:JvZ&!WfA~Bph@c4Z&Dtwax5rubx(#:awRk1@d,#Y&RfjRfid1#,Y(@Wfp2Wlrg5s@ryKu[@!,'=]ig9wlk?Rk>g5u-rqJvy'!@9RkQcH(T#=>Ri~@<wkj(Wj(KuZB*!&<7rw@9RkRcH(T#=>Ri}@<wkj)Wj)dg(Ta2Xa9X#`-!a*CARhg@@=I}d9x;c~#X%so=<sj>2@@=aybb}XjWv0Q~EfEj3vLv;<d,#Y(56H}`978H}_dgaPaFa'a/!#a3Y0a_a;a|!1(a7-[yE3[xt;:pJNvZrrg3uJrvJwNZt=@3pIh=rt3rxPw:5pGOu!5rpJvG'!6Vys=<rz@c4Z&Dt(ax5rtJvZ!&~BpH@wsfNg-vaRlNci*U#=<wei<F}a5@Jq.!a*JQ!%@qZ23d(#Y&RjH5]jCk!u7w&u0udARjFd/prq=tyvpaEa(a:.!a1aZ(@@=I}:9wpd%=<sX55w_h}@@=I{t=ay<aU@@=I}T=ay<2@@=I})?C9:9au@9Cb]}DP~=x-fAZ(2Wl1=ay<aU@@=I}>5@d##Y+jTv|vV~EfFj]uNpn~FRfGdgaK!Z2&!a8a-Tb({E!acTbM*!a(DtY[yYd'%Y#sl[y*hHvh>Re5x2c{Z}.j4uCvcawRiMd+#X+_x&d!},<5RkX;2Hzw@x,gavfB-!{CcF&T#Roe;RodwWbBg5urRgaKvHC*_6Vz+<4opieuew&Rmq@d]&Y)X,T#X0Rh}<BqP=4qS9:ReMg/ujReNJw0!/<Jui%!bd{kawwnemRelAxUa?a3#*.&UX(Ya+a/RhvRnQ<o}9Wmtd-#Y&RgSRmw9;Rmxay=Rmyg-vaRmuxEhSrNu,v-voC!%(aR.a(a7+1Ro1>Ro5CE{A9b]{@;5x#eO{:g;urRi+KrNA!%(Ro3>Ro79;Ri_Ku@>{;&!x%gX|{KunA_+g5QRj/g3u5Rj#g>uERj%wio/xRhS&!,!#^1U}wba{8>>@=be}qC@:D5ba{7Ku+A&!}x?ba}t>>@=be}se(aA^^^Uat!b0#{pa+awUazbGa#aLb9bgaWac'a5TbS=Br!d1#`%scp_Jvl!#rT>Re0JvX&!VyN=H{Fcm#U&:pY=ReaJv2&!]h0=]nUJvG'!6Vy|=<r%JrM_=]h2@Wlud'#)U'Wf'b]{i=]h/Jvh!&~BpWg=v]RnMx+ny#'Nu;pVwjnu=]nwxJnx,T#`&Reqwjnt=]nvieu9vrRjLLuYwP(#+!th@wih5pX~Gr'g5v/Rh4KunA'!-CARnP@wwiN:Rm_9x'cvw>!|l=<saKvAA!0&3@q}>w^e1bp#&Re2Re3BDx7gH#T|f5H|eKuZ>!%(:qNAH{]Jv6!+3B2B9=b^{X<5<B92:E{ZLvhwA(a;a%!igQuyRmad+#Y}m@3Rh5d8#X'X*:AqUAHzmaxwbh<aXRnVcF}RT#Nw&cj#U(BWnug/vsRntdka)(a3+.Zb7aYYan1!bVa@Xa}[y^@b[{G=H{+hFu73Rj&Pv#5ReQcK%T#sig1v{Rj'Ku+D#'!t]~Grm~?rkKuMB!01d5#`'Vy.ta3Dtu~Hroc8#'{^45s85AwZbP&!#Rn!wghxWn#KvEA!)&2RlA2RlBx:h|#(T,=]j09Wobz>x]z/@awRoTd+#Y(az]hFhCrm4d,#Y+jTv|Q~EfMj]uNr|~FRfOdCa!Xa9_X#@<plJvf!%b`{(9;Rgwc;.!#2x7cw#T|UDb]|T5Ju={(!=@E{&Jv)&!Ab`{'awJvf!~*>>@=be{#KuY>!+&4Ezyi[ugv&RjIdea+T)#UXa&T-T&a!Rh9auRmW=]kLg5vuRn+g3u4Rn-Ow6ARn,hHus5xNk?#UX(U~)/g8v0RkD~AwkkF?Ri.OuNBwkkA?Ri/d|a2`a*^UYa.!aBTZaTa'Xa;!(!2!-a#b2[yC>6Vyq3[xr2Wi?g1rusVh%s?DtF~<5rbJs;%!DtBfswKtCj[uvuSsEu3RgVx3o:u+wN'*Zt;@3rd~Grh~?rfg8w)Lq)qE&-a%!>bI|`jWv0vV~EfCjTv|vV~Ef@j]uNpn~FRfBcK#T']gWNu7x,k7q4ai(0!hHv8<RhmkMu9vrsBuev/RhlCJvB!,g<v{wchh~@:Rhji[vrv{wchi~@:RhkdS&a5UY#Ta!RgPwwiI5BwciI~@:Rh`x'iJvj'!5]iJPu8Bwch]~@:Rhach)U#h3rp]gLh@t|Ax,hTq3ah!-(~@:Ro0Ou!5RhXj^v(pyw8unRhVd|)`,^UYas!a?/a2Z'a^Ta{Tb7Ta(a#!a,Wf&9sZ3DtAadamov=Bqt3[xig8vsRm~>waiL2b`{QJv*_Ouv2qgj<v]v2BqfdR'X*X#Y-@3qr~Gqv~?p6hHv-]glPup5Lq+q?_%*b_{qF{n9b^{rOu4ARhpKvCD!+&~Bqp:5Dbb}nwoiKl&unuTuBv]v+ueunaXRf0=Jvh!0nKufu8v1w&w7q%w&uHrz:Rgnj5w,uxDJq/(!hNw'5ReCk0s2u3w/w'5ReFd>Za&!*UaA=<wkgsRnSJv^!%Refifw3vyRgOKu_B'!,<]gkiiu:w&Rh<=C@a^<B57@2F{[<B5@aW:=3away9A5aW=<B=C@a^<B57@2F{Ie-#`(^^^bCara.b8aza6!/bZ,!adTbnTbOb+aFaS!aAT9@Wf~2Wli3Dtl2@d,#Y&RfnRfmJwJZtN~GqyJva&!VyMg<v~Rm%iXuJu3Rm9Jv[_=]ih9wlkDRkCd1#`(@Wg>2Wls3cH#T(@<Rj*=>Ri|b~'#23s9h<~El.d'#Y&Dtxi^rzvdRl#d*#U%(o|B2s`hJwSaxRmDKv4B&!1:Rmdd5#`'Vx}to~Hq{x'f1v3(!BA5ba|bJv_&!Wfug1v]ReIdO+U/Y#&G}-8wze=Rh{g1v]ReHg/uQRf/by#)ibQwERl/cH#T(@<Rj+=>Ri{cNu+vlax-!(#a0qa9<Rii2;;bU{H;x<i=&X#Rk`<4wwi=C9H~8xAI(Y#<azRi@45wXI<B9;5bb~7dL(X#Xa(+!aL6Vy{g5QqOau:5au2@ay547EzbxOcU(UX-T#Ta#:Cbb|A?wjh/b_|SOw6ARgtihr}u7Rhy<d1#T)X1@@=I|~=ay<2@@=aybb}Sj3vLv;<d,#Y(56H}A978H}@dGpvs@uAu`vcw9*!aFa+ai%(b!aXa8.a?a[ozWey=sU2@G}Nch&U#Rf_WexKu+D#'!t:~Gr`~?r^j]uNr|~FRg*j^psurwJt|RmcKv)@&!)7Rkv~Br[@wxfO:Rl3co#U'6Rezj_q#vIuavjRltwzeyh@vr5JqD0!>aY?C9:9au@9Cb]}9cl#U*5;5<H||jbuus1ucv&Rfvg1v~d/pppzqFr^a--a~!aMat1(hFv;Wiz@@=Izoj5uuv-7Rix~Cw`fk2WlVcZ#X,k)u3vWs@u2]ktg;wEx'fBq(_2Wg/jTv|vV~EfoJv]!15x'hzqG!(P~EfU~CRl_j6v(us5x4i-#T(2WmZ?C2F|d>Kq<aj1!*jTqIsBv=Wl`~Cw`fi2WlWj`v0u*~>RlR=c>Z,k#u3vWs@u2]kr<c1Z+jTqIsBv=Wla~Cw`fm2WlXdmb3!a{(arZa`bkTa%TbQTa-a9+c'!aM!/[yL=Bqug.w'RifhFvyDRj.g>vgwyk^9]k^Jv3_@WfbAARkhJw2_[x|JvB_wkoIRoKwkoJRoLd'(Y#<]gm=<9<H|yd'%_X#skDtb3awwqkgNulRkgdB#^',9:p'hJwSaxRmEBwVb8@4=H|qLu+w50&!)@3qs~?pU>Awwn;;Rn=c:Z'ARn<=<qwKvC@!/&~BqqJv6!&]eVb^z^xRge'/a%+^`#Sge}6<4Rn3=]n0Pw2>Rn8Jw0!&>Rn:>Rn6cY#a7+!a&=<wkaNw~h3z_c5Z{=wjh#=]nLKv^D!&)Vyz=bW|swYb<WetcG#T(2wxa@qVx@gD#Y&b^|V5JwG&!5bb|pg/w&RgD@x=kHs=uAvn!a%%/'+RmSRh694Ro`g-vaRmRhHv-]mlxCcS#`&ba~.5cD#Ta)P~=d,#Y(56H{>978H{Dd_#{2^Y%_+qbbb{6g3sERhsbU{?dfa.,`a(Xa<!aiX#(55RiG54RiHcI#T'WiU3RiVNvdwtfcRlKNvdd,#Y&RlHRlExQgf.1*^T'X#Sgf}6Wn4=]hfPrk>Rn7Jw0!&>Rn5>Rn9Lunw?&a2!,5<oq@@wqfdRlJj5Q~=d,#Y(~ARfcOuN]fdDKw;ay(}i!547E}j?cI#T(@5bV}iCbV}hdv(^^Tb?a40,b##Tbo!a*bR!a<b|a/!aKai!aU[yK=]o^g:v>ReGJwPZtK<7Rh+h<~El,Pv#5ReR@awwxjCg,ulRjDJv6&!]j!z?aQeeg>w=Sh<eeJw;!&axEzOg,Qosc!#*:wkeJ]eJ>x'h-u(!%Ro.w~h.zPdNZ(X,Ya![x{;9ReY;wkgxRiF:x?ap#Y&RmUg<s2Rkod]+UY0TZ'!a&A9sw<=bczLNvuw{gqzNhJwSaxRmCKuLay!#&s_Rf-55b^{uJvZa!!c%#(55Ri654wmiu5RiuawLu,vp!+}^%b_}Y9;wkgxba}o>A9:=b^}zKuh=a''!3awRk3c*'!#aHRk6c+Z&Rk5Rk4Jv)&!awRjSawd9*`#0?C2@EzMj8u<uJ5RmbjQrquJu3x,k>uq@_+=ayb^|W~ARkEOuN]k@7dhzV^X/X&a-#zRzSb`zXcJzTT#2WkVKvDBzW!%FzY9;5bbzWjQrquJu3Jw3%!b`zU=ayb^zQd:#X(T-a!6Vyywxh}=b]{Jg=u1RiAdGp~qHtzv!w(wA+a+a;<!aJaYai'anasb(=azRmV:Cbb{MLq2vb!%')RjuRjrRjtRjqx3jnqCw3!%')Rk(Rk+Rk&Rk)Lq2vb!%')Rj{RjxRjzRjwLq2vb!%')RjsRjpRjfRjex3jcqCw3!%')Rk'Rk*RjkRjl9<CbbzfOu4ARhxLq2vb!%')RjyRjvRjhRjgx=joq*uKvb!%')+-Rk.Rk%Rj~Rk-Rk#Rj}x=jdq*uKvb!%')+-Rk,Rk!Rj|RjmRjjRjidAq&qKs@uAv8Aa.'*-a@a&0!aM@a5[y73Dsy3Ds|3Dt):wxgI2sHJwJZt.~Gqxwsf0ikrzt}Rl0Jvy_[xj~HqzKv_A|D!&WfP8axRoVcf,U#k(v]v+ueunaXRf1Ju}'!g8u#Ri=jQw!sCunLprq>!,')~<5qeGzq9F{W=c##%s5au:5aU3CBE|;d4#X(D!a&6Vygx(b;#(=]ed?C2F{N<capoq2r[a&!aPa9,'Pw;5s:@@=I|,55w_h|@@=IzcP~=x'fCqB_2Wl2>aU@@=I|1OuNBc1Z+jTqIsBv=Wlc~Cw`fl2WlZ~AcTa%!Z+jTqIsBv=Wlb~Cw`fh2WlYk+uNqJsBv=WlSg,u3dca3#UXaMYa)TaB-=cM|7T#<bI}l5@B932:aV2G{BOuNBJq:|M!5Ezt=<B=C@a^<B57@2F{v>cB{/T#=ay<bI{3Jv6!a.6BKq0ah&+!5E}HP~Ef{978BaU@@=Iza<7d#.Y#978BaU@@=IzH~AJq0!(@@=IzG978BaU@@=IzFe,aU*Y&^^^bvJb,b:bFad!a,c2Ta>aL.bo6!a#CbTa'T#Re{2Wlh2@G{yg6t~Ro_NvdRfticuRQRllJv3&!x&c|zs@Jw3!%RflwpfkRlpKuL;%(!Re<@G|C2GzdhIvuBwgjAg-u0RjAKQB%!(GzZ@G|5NuuRl7d='T+Y#Vy[g<v~Rm!==G|>JvA!)@wma=]m1ifuaw&RmnLs@vT'!|/+[y,g:v>ReTJw1!#qX=x!eC{bLu+wT&)ZtZauq_~Graci&U#F|89:r_Lupvq!.)&2RlG8RfaC=x!eF{_h?rpWlmd&'!#X|&]k::xJey#`'T|+<E|&2@H|%dE#(^,g;u.RiEg6vjRiC9xCkA{O|zY#g=ucRmXKs0@!&*@G|m@awRknJuh!,3d(}gY}eJvj!%Rm):Jw3!%Rm+Rm-Ls0w(&!a(a#@b[|6cZ#X'7RkxWgAOu4ARn'dH'U#Y*Vz-Wm'CARm}d]*#a%^a*T'aK!a<9bV{PC=p*Jw4!&SgxcbB5r]idw(wBRmF7xFkt#&`(Rm/Rm8E|!JuY_9:Rl5=wrgr2:bbxd@xXfB(a*#T+!.X0X1Ta/a'T&RlDRfL>RlyARl9b[z[>RfZ:RlL:RfRwlg/ARl;9;RlxKv,A/!%7s69<74=BA5ba{-8Bde#`a<XaKYa1,a'P~=wxfB2bZ}}?C972@@=I}r8@55B9;5bb}G978B2@@=aybb}3j3vLv;<Jw3&!>Rfk=ayb^}4~Ad1#`*@@=aybb{w2@>==<bbz]dx+UY#^UaF!a9!bB'Ya1.!ajXa#%olRhD[y=3Dt#Ov5BrHKuMB%!(Rf^Wep~HrJwkiQjKr|~FRg)Ku+D#'!t5~GrF~?rDdV)UY,Z/_7RkuG{<~BrBg,rlsO:235B@bX}|d?a1!#`(6Vyn5@d##Y+jTv|vV~EfIj]uNpn~FRfH7Lq2vb1!a9-978BaU@@=Iz9978BbU}#~AJq0!(@@=Iz8978BaU@@=Iz7~AJQ|}!978BbU}!JvkaK!AdUa21-U#`a+(g/vsRn~Ou!5RPj:rmu9WhOjXuvvNr}:RhAj^v(pyw8unRn[kPr}p|u7vwv]RiSBd;pppzq@qHQa?(b.!a.a`@.|xa(hFv;Wiyj5uuv-7Riw~Cw`fg2WlU978BbU|wOuNBJqG!(P~EfD~CRlQcZ#X,k)u3vWs@u2]ksg;wEx'f@q1_2Wg.j]uNpn~FRfqJv]!15x'h{qG!(@@=IzK~CRl^j6v(us5x4i,#T(2WmY?C2F{1>Kq<aj1!*jTqIsBv=Wld~Cw`fj2Wl[j`v0u*~>RlT=c>Z,k#u3vWs@u2]kq<c1Z+jTqIsBv=Wle~Cw`fn2Wl]dn1#c(a(b^a2!b/bAT(bj!aDa7bu,a_a{c0!2T0g:v>ReD2@G{42@G{5~DpM~<5rc=Bx6i>{RT#RnI@zCx]y]z:2Jv[!zr5Awyk]9]k]dD(Y+X#6Vz.g=wKtgwhaCwgmTWj2Lu,w%_+/[y-B;b^xeg3u3Rj-2@bX{*KrJ<!+'@Wg(g?QRlC@Jv`!%b[zIwsfII}8JQ_@w|kW|=Jv(%!AqcOuNBJvEzh!bYzjLs@wP#(0!oy@>RkdJwMZtc3Dtd@BcG#T'9bWxg2@2Fznd*#Y+;2x'c}w<zizixNgwa#Z'U+!/!a'!a+w~g~z6wcn{Rn}wcnzRn|5Rh%=]nJg5vuRmvNvdRlvcprJu}w*az*a#!%.a.'Bot9qT]kj@Wg'ay2Gzv@Jv`!%b[zEwsfHI}1;ck#Ux`<Cbbx_Lu+w!a&0*!wko*wwo,So,}6Juqxf!E}PigQuyRm`d3(`#8>Rn%:A5B;bZ~%KvhCa!a2!x>k7#Uxb@b{#xaRk7Jw0!)>wwhlShl}6>wwhmShm}6CJvB!.x'hhvj{!!5Bwkhhbaz}x'hivjz~!5Bwkhibaz|xEhTrNu,v-vpD!a%&/)a3a.,%Ro2t[CE{)@3re9b]{%wjo09:rgc:Z&Ro6=<riifuaw&RmoKrNA!%(Ro4>Ro89;Ri`dSaL'UYzxZb)7Rka3xRhT&!,!#^1U}vbaz{>>@=be}yC@:D5bazzKu+A&!}{?ba}y>>@=be}wxBh[t`u~vJvr!%a!a()a,a0a4RoC=]o;Ju(!%RoGRhdwjh`=]oAg>w#Ro?g5vuRo=NvdRl|Ku]C.!&;RoEJvB!%RoORoMBx'h[v+_?w~h`}~5?w~hd~!xKh]oiptu-utv.vp!#%&a30a@a'a+(a/aOp(o~p!RoDJu(!%RoHRhewjha=]oBNvdRl}g>w#Ro@g5vuRo>c[#X']o<CauRoRAd-#Y':RkpauRoQKu]C.!&;RoFJvB!%RoNRoPBx'h]v+_?w~ha}t5?w~he}ue!/UbhYacXaW^Tc&a;b:a-c/#b&aja1(!cL+!bKbt!bmcRc9aIc?8[yW3Dtt94Rg`Jv}!&SiRMzBhEebShEMNuPRe>x7gL#TzuwjirRipc<Z&>on;>z=h-MSh.Mwqczx'a7vj&!>Re4@=ResJt__NuPRi*NuPRi)j]uNr|~FRfzKrJ>_+@Wfy@Wf]2WocKrJ<!+'@Wg%g/QRl@@Jv`!&awRl<wsfFIzgLu(w*!.*&ShBMwvhIRhI9;RhNx1hK'!#Sn]Mx1hK~0!#:2<H~7cNu+w7D*'1ZtW>Rn1~?rOc:Z&Rn2=<rQ<7wjh&=BSnLMc]#X(6Vz)w[b=a!U#9wzgMc3#&(RgMRitRis<x,gKt`ax!&+SioM=BSilMc3#&(RgKRinRimKurB,!&SiQMzBhDebShDM6BJQ!(P~Efx978B2@@=I}WLrJw!!,a*&@G}O@9wkibRid@@x'fKwC!&SlDMSfLMjUv~Q~EfKKv3@a+!(hFv-]mpx/hYZ(C5RiWz<o/MwkhY?So/M@x,gbvfB*&!SgEM:SoeeehFu3:Rgbda(,^TZa)X/7Sg[eb:2RgI~BrMC@wgkc:wwkcRerx3h(uUvK!&*,SnOM4Sh*MArRg;wHRh(x=h;rJvPwI!a4',a'0@Wg&=BSh/Mg>w=Rh=g3w*wwgGRgGcW(X#;Sg}M2Gzk@Jv`!&awRl=wsfGIz`dKZ*T'Y-:RhR7RhQg5u-p`j6v(us5d,#Y+~Awkia?RicOuNBwkibba}Ld6p~tyu_vbAa'a+!a/'a3aEa8a!>Sh,ebJv{!&Sh@ebSaReb9;SgwebNuPRi(NvdRl)NuPRi'hHu^<Rm^Jvv_@Wl(g;u1Si/ebKu'B&!*Sh?eb@Wl'z@aPeb95Si.ebcpputyvjB)!,&a+0a%ShAMWeK@G}C@WfJ9;RhMwvhH9w{ia}ix,hJvRA1(!zAn[MRhHx1hJ~*!#hFv(BSn[MBJQ!(@@=I~'978B2@@=I}2db.Ua<'X}+T#a0XaG2G}E;wkg|wuh!Rh!x,hZu,@)!&So0MVy)C5RiXACJvB!&5RiY5RiZg8w)cG}*T#2@bU}=KsA>(!a.3wkhZba~(x,h^u(A!&(SoCMRhb5Bz=h[eb?w~hb~6x,h_u(A!&(SoDMRhc5Bz=h]eb?w~hc~6e)aA1T#T,^^^c-bMb&blcPaP(a/!0!bA=b5c@a(!bfbrc#2afwmhARnjwchORnp2Wlf3DtsNvdRl-2@wpa<]m0bx(#:awRk2@Jw3!%RfhwpfgRlnKQB%!(G{V@G|'NuuRl6d='T+Y#VyUg<v~Rl~==G|<Jv+'!aYShC}6@B<5?ba~8@Jw3'!g2QRljhLrpWlOd+#Y'g.w'rIg>w*wgj@g-u0Rj@Lu+wT&)ZtUauq]~GrGci&U#F|39:rELrNvj!.%*RhCwunfw~nf~:9;Ri]>wtnhg;wHRnhx3hDs@v~!/+'@Wfr@9RkSNu&Rlo=@<5GzoKs0@_+@Wl+@awRkmJuh!-3d(}pY#qWJvj!%Rm(:Jw3!%Rm,Rm*de&!1U-U#`)Re;@G|.@9Ri82@wjfvRlq=@<5GzpLvOvr!).&2RlF8Rf`C=x!eE{.Jw3_g2QRlkhLrpWlPde(!#U{s,UXa*Ta'[y'g:v>ReS;x0PZ&RnlRnn~HrKJw1}f!=x!eB|2w]aP(#Xa&a*Ta.Ua2a7=]iOd'#Y&Ro&WnWg;u.RiDg6vjRiBNvdRlzhNvj]nYJuW_2Wm3x)kFze{9d])!a.!,Y01!#&aC!a3RndC=ox~BrC@2b^{pg,rlse7x'ksuq!%Rm.E{xidw(wBRmGx9o+)X#wwo-So-}69:Rl4@xSf@a#XZ'X)X,Ta(/ARl8b[xc>RfY:RlI:RfQwlg.ARl:9;Rlwdn'#^XafaQa1X1TaHTa)@b[{zcZ#X'7RkwWg@Ou4ARn&x)kG#{,g7u/RkGdH'U#Y*Vz'Wm&CARm|bx#(A]gUbUzJj9Q~=d,#Y(56H}l978H{U7d,0#U*2>ABb_xZ978BbU{e~AJQ{g!978BbU{hxMh?ad{oUYZ.x1h?{l!#:2<H{mx3n[t{vl!,&a%3Ro(z=iS}6ARnr=Bwsn^wvn`Rnbd`*T}B0!#^X'BG{c9b]{a>>@=be}F?JvS!&BG{d7BG}(Bde#`a1X,Ya@!a'P~=wxf@2bZ}I56B2@@=aybb}08@55B9;5bb}<j3vLv;<Jw3&!>Rfg=ayb^}&OuNBKuLA!)a!P~=x#fD{f2@>==<bbzl?C972@@=Ix^d6rSu,v7w*C(0a)a6#B+a%!sQ[y?3Dt%3[xn~<5rLOu!5p@Ku+D#'!t7~GrP~?rNKvlaya7'!h+v-5qMg=t|cd,U#5AAaa5Abb{S@52B5@a[@52B5Gx[iXueu;d<#`a(!/549C;ag>23ExY5@Dah89b^~689Jv)!~2b[~1Lv'w(%*!a#bX|aPrmawRe]keu7uhv-q6rxu,q`xTo]/a5aU!bNaDXbi!b-!ao!b<bwA!#5@B932:aV2G|:d-)Y#hJrL>RhG<7@C5<H|_=Cau:5aj5@B932:bJ|ng>vIbs)#?C2F|9jPv0w.vISh-MKvUaz(.!9ABbb|[5;5<H|Eg>unwfh;9:4E|YjQsBt|vjx'hYq3!(?C2F|J:2<BaY?C2F|GOu!5x,g|p{ah!-(?C2F|c9:4E|OjXuvvNr}:Rh&i[w*t|cd+U#jJvsu)vsSn~Mkfrmu9p}u7vwv]So!McW#Xa!ax5@A5aY:5;5<H|>kJv~vYrquJu3x4ib#T)2@SmZM?C2F|Bj:rmu9@xPhI(a*a#U#`a3-5Abb|L~@:RhK9:4E|0@52B5G|#C::aY?C2F|-:2<BaY?C2F|.5Jvk!a)javYrquJu3x4ia#T)2@SmYM?C2F|HAxPhH(!a#U#`a*-5Abb|4~@:RhJ9:4E|R@52B5G|F:2<BaY?C2F|Sc^#Xa2j=Qq5CJvB!-g<v{z;hhM?C2F|Zi[vrv{z;hiM?C2F|XKsA>!a)-g<v{z;h[eb?C2F|]i[vrv{z;h]eb?C2F|^iZu.vix,hZq3ah!.(?C2F|QOu!5ShXM:2<BaY?C2F|P",
7
+ 13_494,
8
+ 2713,
9
+ 49,
10
+ 25,
11
+ 61,
12
+ );
@@ -0,0 +1,7 @@
1
+ // Generated using scripts/write-decode-map.ts
2
+
3
+ /** Packed XML decode trie data. */
4
+ export const xmlDecodeTree: Uint16Array = /* #__PURE__ */ new Uint16Array([
5
+ 512, 26_465, 29_036, 7, 0, 2, 4, 116, 24_638, 116, 24_636, 8693, 29_807,
6
+ 24_610, 621, 1, 0, 0, 3, 112, 24_614, 111, 115, 24_615,
7
+ ]);
@@ -0,0 +1,3 @@
1
+ // Generated using scripts/write-encode-map.ts
2
+
3
+ export default "9Tab;NewLine;22excl;quot;num;dollar;percnt;amp;apos;lpar;rpar;ast;plus;comma;1period;sol;10colon;semi;lt;{8402nvlt;}equals;{8421bne;}gt;{8402nvgt;}quest;commat;26lbrack;bsol;rbrack;Hat;lowbar;DiacriticalGrave;5{106fjlig;}20lbrace;verbar;rbrace;34nbsp;iexcl;cent;pound;curren;yen;brvbar;sect;die;copy;ordf;laquo;not;shy;circledR;macr;deg;PlusMinus;sup2;sup3;acute;micro;para;centerdot;cedil;sup1;ordm;raquo;frac14;frac12;frac34;iquest;Agrave;Aacute;Acirc;Atilde;Auml;angst;AElig;Ccedil;Egrave;Eacute;Ecirc;Euml;Igrave;Iacute;Icirc;Iuml;ETH;Ntilde;Ograve;Oacute;Ocirc;Otilde;Ouml;times;Oslash;Ugrave;Uacute;Ucirc;Uuml;Yacute;THORN;szlig;agrave;aacute;acirc;atilde;auml;aring;aelig;ccedil;egrave;eacute;ecirc;euml;igrave;iacute;icirc;iuml;eth;ntilde;ograve;oacute;ocirc;otilde;ouml;div;oslash;ugrave;uacute;ucirc;uuml;yacute;thorn;yuml;Amacr;amacr;Abreve;abreve;Aogon;aogon;Cacute;cacute;Ccirc;ccirc;Cdot;cdot;Ccaron;ccaron;Dcaron;dcaron;Dstrok;dstrok;Emacr;emacr;2Edot;edot;Eogon;eogon;Ecaron;ecaron;Gcirc;gcirc;Gbreve;gbreve;Gdot;gdot;Gcedil;1Hcirc;hcirc;Hstrok;hstrok;Itilde;itilde;Imacr;imacr;2Iogon;iogon;Idot;imath;IJlig;ijlig;Jcirc;jcirc;Kcedil;kcedil;kgreen;Lacute;lacute;Lcedil;lcedil;Lcaron;lcaron;Lmidot;lmidot;Lstrok;lstrok;Nacute;nacute;Ncedil;ncedil;Ncaron;ncaron;napos;ENG;eng;Omacr;omacr;2Odblac;odblac;OElig;oelig;Racute;racute;Rcedil;rcedil;Rcaron;rcaron;Sacute;sacute;Scirc;scirc;Scedil;scedil;Scaron;scaron;Tcedil;tcedil;Tcaron;tcaron;Tstrok;tstrok;Utilde;utilde;Umacr;umacr;Ubreve;ubreve;Uring;uring;Udblac;udblac;Uogon;uogon;Wcirc;wcirc;Ycirc;ycirc;Yuml;Zacute;zacute;Zdot;zdot;Zcaron;zcaron;19fnof;34imped;63gacute;65jmath;142circ;caron;16breve;DiacriticalDot;ring;ogon;DiacriticalTilde;dblac;51DownBreve;127Alpha;Beta;Gamma;Delta;Epsilon;Zeta;Eta;Theta;Iota;Kappa;Lambda;Mu;Nu;Xi;Omicron;Pi;Rho;1Sigma;Tau;Upsilon;Phi;Chi;Psi;ohm;7alpha;beta;gamma;delta;epsi;zeta;eta;theta;iota;kappa;lambda;mu;nu;xi;omicron;pi;rho;sigmaf;sigma;tau;upsi;phi;chi;psi;omega;7thetasym;Upsi;2phiv;piv;5Gammad;digamma;18kappav;rhov;3epsiv;backepsilon;10IOcy;DJcy;GJcy;Jukcy;DScy;Iukcy;YIcy;Jsercy;LJcy;NJcy;TSHcy;KJcy;1Ubrcy;DZcy;Acy;Bcy;Vcy;Gcy;Dcy;IEcy;ZHcy;Zcy;Icy;Jcy;Kcy;Lcy;Mcy;Ncy;Ocy;Pcy;Rcy;Scy;Tcy;Ucy;Fcy;KHcy;TScy;CHcy;SHcy;SHCHcy;HARDcy;Ycy;SOFTcy;Ecy;YUcy;YAcy;acy;bcy;vcy;gcy;dcy;iecy;zhcy;zcy;icy;jcy;kcy;lcy;mcy;ncy;ocy;pcy;rcy;scy;tcy;ucy;fcy;khcy;tscy;chcy;shcy;shchcy;hardcy;ycy;softcy;ecy;yucy;yacy;1iocy;djcy;gjcy;jukcy;dscy;iukcy;yicy;jsercy;ljcy;njcy;tshcy;kjcy;1ubrcy;dzcy;7074ensp;emsp;emsp13;emsp14;1numsp;puncsp;ThinSpace;hairsp;NegativeMediumSpace;zwnj;zwj;lrm;rlm;dash;2ndash;mdash;horbar;Verbar;1lsquo;CloseCurlyQuote;lsquor;1ldquo;CloseCurlyDoubleQuote;bdquo;1dagger;Dagger;bull;2nldr;hellip;9permil;pertenk;prime;Prime;tprime;backprime;3lsaquo;rsaquo;3oline;2caret;1hybull;frasl;10bsemi;7qprime;7MediumSpace;{8202ThickSpace;}NoBreak;af;InvisibleTimes;ic;72euro;46tdot;DotDot;37complexes;2incare;4gscr;hamilt;Hfr;Hopf;planckh;hbar;imagline;Ifr;lagran;ell;1naturals;numero;copysr;weierp;Popf;Qopf;realine;real;reals;rx;3trade;1integers;2mho;zeetrf;iiota;2bernou;Cayleys;1escr;Escr;Fouriertrf;1Mellintrf;order;alefsym;beth;gimel;daleth;12CapitalDifferentialD;dd;ee;ii;10frac13;frac23;frac15;frac25;frac35;frac45;frac16;frac56;frac18;frac38;frac58;frac78;49larr;ShortUpArrow;rarr;darr;harr;updownarrow;nwarr;nearr;LowerRightArrow;LowerLeftArrow;nlarr;nrarr;1rarrw;{824nrarrw;}Larr;Uarr;Rarr;Darr;larrtl;rarrtl;LeftTeeArrow;mapstoup;map;DownTeeArrow;1hookleftarrow;hookrightarrow;larrlp;looparrowright;harrw;nharr;1lsh;rsh;ldsh;rdsh;1crarr;cularr;curarr;2circlearrowleft;circlearrowright;leftharpoonup;DownLeftVector;RightUpVector;LeftUpVector;rharu;DownRightVector;dharr;dharl;RightArrowLeftArrow;udarr;LeftArrowRightArrow;leftleftarrows;upuparrows;rightrightarrows;ddarr;leftrightharpoons;Equilibrium;nlArr;nhArr;nrArr;DoubleLeftArrow;DoubleUpArrow;DoubleRightArrow;dArr;DoubleLeftRightArrow;DoubleUpDownArrow;nwArr;neArr;seArr;swArr;lAarr;rAarr;1zigrarr;6larrb;rarrb;15DownArrowUpArrow;7loarr;roarr;hoarr;forall;comp;part;{824npart;}exist;nexist;empty;1Del;Element;NotElement;1ni;notni;2prod;coprod;sum;minus;MinusPlus;dotplus;1Backslash;lowast;compfn;1radic;2prop;infin;angrt;ang;{8402nang;}angmsd;angsph;mid;nmid;DoubleVerticalBar;NotDoubleVerticalBar;and;or;cap;{65024caps;}cup;{65024cups;}int;Int;iiint;conint;Conint;Cconint;cwint;ClockwiseContourIntegral;awconint;there4;becaus;ratio;Colon;dotminus;1mDDot;homtht;sim;{8402nvsim;}backsim;{817race;}ac;{819acE;}acd;VerticalTilde;NotTilde;eqsim;{824nesim;}sime;NotTildeEqual;cong;simne;ncong;ap;nap;ape;apid;{824napid;}backcong;asympeq;{8402nvap;}bump;{824nbump;}bumpe;{824nbumpe;}doteq;{824nedot;}doteqdot;efDot;erDot;Assign;ecolon;ecir;circeq;1wedgeq;veeeq;1triangleq;2equest;ne;Congruent;{8421bnequiv;}nequiv;1le;{8402nvle;}ge;{8402nvge;}lE;{824nlE;}gE;{824ngE;}lnE;{65024lvertneqq;}gnE;{65024gvertneqq;}ll;{824nLtv;7577nLt;}gg;{824nGtv;7577nGt;}between;NotCupCap;nless;ngt;nle;nge;lesssim;GreaterTilde;nlsim;ngsim;LessGreater;gl;NotLessGreater;NotGreaterLess;pr;sc;prcue;sccue;PrecedesTilde;scsim;{824NotSucceedsTilde;}NotPrecedes;NotSucceeds;sub;{8402NotSubset;}sup;{8402NotSuperset;}nsub;nsup;sube;supe;NotSubsetEqual;NotSupersetEqual;subne;{65024varsubsetneq;}supne;{65024varsupsetneq;}1cupdot;UnionPlus;sqsub;{824NotSquareSubset;}sqsup;{824NotSquareSuperset;}sqsube;sqsupe;sqcap;{65024sqcaps;}sqcup;{65024sqcups;}CirclePlus;CircleMinus;CircleTimes;osol;CircleDot;circledcirc;circledast;1circleddash;boxplus;boxminus;boxtimes;dotsquare;RightTee;dashv;DownTee;bot;1models;DoubleRightTee;Vdash;Vvdash;VDash;nvdash;nvDash;nVdash;nVDash;prurel;1LeftTriangle;RightTriangle;LeftTriangleEqual;{8402nvltrie;}RightTriangleEqual;{8402nvrtrie;}origof;imof;multimap;hercon;intcal;veebar;1barvee;angrtvb;lrtri;bigwedge;bigvee;bigcap;bigcup;diam;sdot;sstarf;divideontimes;bowtie;ltimes;rtimes;leftthreetimes;rightthreetimes;backsimeq;curlyvee;curlywedge;Sub;Sup;Cap;Cup;fork;epar;lessdot;gtdot;Ll;{824nLl;}Gg;{824nGg;}leg;{65024lesg;}gel;{65024gesl;}2cuepr;cuesc;NotPrecedesSlantEqual;NotSucceedsSlantEqual;NotSquareSubsetEqual;NotSquareSupersetEqual;2lnsim;gnsim;precnsim;scnsim;nltri;NotRightTriangle;nltrie;NotRightTriangleEqual;vellip;ctdot;utdot;dtdot;disin;isinsv;isins;isindot;{824notindot;}notinvc;notinvb;1isinE;{824notinE;}nisd;xnis;nis;notnivc;notnivb;6barwed;Barwed;1lceil;rceil;LeftFloor;rfloor;drcrop;dlcrop;urcrop;ulcrop;bnot;1profline;profsurf;1telrec;target;5ulcorn;urcorn;dlcorn;drcorn;2frown;smile;9cylcty;profalar;7topbot;6ovbar;1solbar;60angzarr;51lmoustache;rmoustache;2OverBracket;bbrk;bbrktbrk;37OverParenthesis;UnderParenthesis;OverBrace;UnderBrace;2trpezium;4elinters;59blank;164circledS;55boxh;1boxv;9boxdr;3boxdl;3boxur;3boxul;3boxvr;7boxvl;7boxhd;7boxhu;7boxvh;19boxH;boxV;boxdR;boxDr;boxDR;boxdL;boxDl;boxDL;boxuR;boxUr;boxUR;boxuL;boxUl;boxUL;boxvR;boxVr;boxVR;boxvL;boxVl;boxVL;boxHd;boxhD;boxHD;boxHu;boxhU;boxHU;boxvH;boxVh;boxVH;19uhblk;3lhblk;3block;8blk14;blk12;blk34;13square;8blacksquare;EmptyVerySmallSquare;1rect;marker;2fltns;1bigtriangleup;blacktriangle;triangle;2blacktriangleright;rtri;3bigtriangledown;blacktriangledown;dtri;2blacktriangleleft;ltri;6loz;cir;32tridot;2bigcirc;8ultri;urtri;lltri;EmptySmallSquare;FilledSmallSquare;8bigstar;star;7phone;49female;1male;29spades;2clubs;1hearts;diamondsuit;3sung;2flat;natural;sharp;163check;3cross;8malt;21sext;33VerticalSeparator;25lbbrk;rbbrk;84bsolhsub;suphsol;28LeftDoubleBracket;RightDoubleBracket;lang;rang;Lang;Rang;loang;roang;7longleftarrow;longrightarrow;longleftrightarrow;DoubleLongLeftArrow;DoubleLongRightArrow;DoubleLongLeftRightArrow;1longmapsto;2dzigrarr;258nvlArr;nvrArr;nvHarr;Map;6lbarr;bkarow;lBarr;dbkarow;drbkarow;DDotrahd;UpArrowBar;DownArrowBar;2Rarrtl;2latail;ratail;lAtail;rAtail;larrfs;rarrfs;larrbfs;rarrbfs;2nwarhk;nearhk;hksearow;hkswarow;nwnear;nesear;seswar;swnwar;8rarrc;{824nrarrc;}1cudarrr;ldca;rdca;cudarrl;larrpl;2curarrm;cularrp;7rarrpl;2harrcir;Uarrocir;lurdshar;ldrushar;2LeftRightVector;RightUpDownVector;DownLeftRightVector;LeftUpDownVector;LeftVectorBar;RightVectorBar;RightUpVectorBar;RightDownVectorBar;DownLeftVectorBar;DownRightVectorBar;LeftUpVectorBar;LeftDownVectorBar;LeftTeeVector;RightTeeVector;RightUpTeeVector;RightDownTeeVector;DownLeftTeeVector;DownRightTeeVector;LeftUpTeeVector;LeftDownTeeVector;lHar;uHar;rHar;dHar;luruhar;ldrdhar;ruluhar;rdldhar;lharul;llhard;rharul;lrhard;udhar;duhar;RoundImplies;erarr;simrarr;larrsim;rarrsim;rarrap;ltlarr;1gtrarr;subrarr;1suplarr;lfisht;rfisht;ufisht;dfisht;5lopar;ropar;4lbrke;rbrke;lbrkslu;rbrksld;lbrksld;rbrkslu;langd;rangd;lparlt;rpargt;gtlPar;ltrPar;3vzigzag;1vangrt;angrtvbd;6ange;range;dwangle;uwangle;angmsdaa;angmsdab;angmsdac;angmsdad;angmsdae;angmsdaf;angmsdag;angmsdah;bemptyv;demptyv;cemptyv;raemptyv;laemptyv;ohbar;omid;opar;1operp;1olcross;odsold;1olcir;ofcir;olt;ogt;cirscir;cirE;solb;bsolb;3boxbox;3trisb;rtriltri;LeftTriangleBar;{824NotLeftTriangleBar;}RightTriangleBar;{824NotRightTriangleBar;}11iinfin;infintie;nvinfin;4eparsl;smeparsl;eqvparsl;5blacklozenge;8RuleDelayed;1dsol;9bigodot;bigoplus;bigotimes;1biguplus;1bigsqcup;5iiiint;fpartint;2cirfnint;awint;rppolint;scpolint;npolint;pointint;quatint;intlarhk;10pluscir;plusacir;simplus;plusdu;plussim;plustwo;1mcomma;minusdu;2loplus;roplus;Cross;timesd;timesbar;1smashp;lotimes;rotimes;otimesas;Otimes;odiv;triplus;triminus;tritime;intprod;2amalg;capdot;1ncup;ncap;capand;cupor;cupcap;capcup;cupbrcap;capbrcup;cupcup;capcap;ccups;ccaps;2ccupssm;2And;Or;andand;oror;orslope;andslope;1andv;orv;andd;ord;1wedbar;6sdote;3simdot;2congdot;{824ncongdot;}easter;apacir;apE;{824napE;}eplus;pluse;Esim;Colone;Equal;1ddotseq;equivDD;ltcir;gtcir;ltquest;gtquest;leqslant;{824nleqslant;}geqslant;{824ngeqslant;}lesdot;gesdot;lesdoto;gesdoto;lesdotor;gesdotol;lap;gap;lne;gne;lnap;gnap;lEg;gEl;lsime;gsime;lsimg;gsiml;lgE;glE;lesges;gesles;els;egs;elsdot;egsdot;el;eg;2siml;simg;simlE;simgE;LessLess;{824NotNestedLessLess;}GreaterGreater;{824NotNestedGreaterGreater;}1glj;gla;ltcc;gtcc;lescc;gescc;smt;lat;smte;{65024smtes;}late;{65024lates;}bumpE;PrecedesEqual;{824NotPrecedesEqual;}sce;{824NotSucceedsEqual;}2prE;scE;precneqq;scnE;prap;scap;precnapprox;scnap;Pr;Sc;subdot;supdot;subplus;supplus;submult;supmult;subedot;supedot;subE;{824nsubE;}supE;{824nsupE;}subsim;supsim;2subnE;{65024varsubsetneqq;}supnE;{65024varsupsetneqq;}2csub;csup;csube;csupe;subsup;supsub;subsub;supsup;suphsub;supdsub;forkv;topfork;mlcp;8Dashv;1Vdashl;Barv;vBar;vBarv;1Vbar;Not;bNot;rnmid;cirmid;midcir;topcir;nhpar;parsim;9parsl;{8421nparsl;}53250fflig;filig;fllig;ffilig;ffllig;55703Ascr;1Cscr;Dscr;2Gscr;2Jscr;Kscr;2Nscr;Oscr;Pscr;Qscr;1Sscr;Tscr;Uscr;Vscr;Wscr;Xscr;Yscr;Zscr;ascr;bscr;cscr;dscr;1fscr;1hscr;iscr;jscr;kscr;lscr;mscr;nscr;1pscr;qscr;rscr;sscr;tscr;uscr;vscr;wscr;xscr;yscr;zscr;52Afr;Bfr;1Dfr;Efr;Ffr;Gfr;2Jfr;Kfr;Lfr;Mfr;Nfr;Ofr;Pfr;Qfr;1Sfr;Tfr;Ufr;Vfr;Wfr;Xfr;Yfr;1afr;bfr;cfr;dfr;efr;ffr;gfr;hfr;ifr;jfr;kfr;lfr;mfr;nfr;ofr;pfr;qfr;rfr;sfr;tfr;ufr;vfr;wfr;xfr;yfr;zfr;Aopf;Bopf;1Dopf;Eopf;Fopf;Gopf;1Iopf;Jopf;Kopf;Lopf;Mopf;1Oopf;3Sopf;Topf;Uopf;Vopf;Wopf;Xopf;Yopf;1aopf;bopf;copf;dopf;eopf;fopf;gopf;hopf;iopf;jopf;kopf;lopf;mopf;nopf;oopf;popf;qopf;ropf;sopf;topf;uopf;vopf;wopf;xopf;yopf;zopf;";