Line | Count | Source |
1 | | #include <stdlib.h> |
2 | | #include <stdint.h> |
3 | | #include <assert.h> |
4 | | |
5 | | #include "cmark_ctype.h" |
6 | | #include "utf8.h" |
7 | | |
8 | | static const int8_t utf8proc_utf8class[256] = { |
9 | | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
10 | | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
11 | | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
12 | | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
13 | | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
14 | | 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
15 | | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
16 | | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
17 | | 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
18 | | 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, |
19 | | 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0}; |
20 | | |
21 | 4.26M | static void encode_unknown(cmark_strbuf *buf) { |
22 | 4.26M | static const uint8_t repl[] = {239, 191, 189}; |
23 | 4.26M | cmark_strbuf_put(buf, repl, 3); |
24 | 4.26M | } |
25 | | |
26 | 264M | static int utf8proc_charlen(const uint8_t *str, bufsize_t str_len) { |
27 | 264M | int length, i; |
28 | | |
29 | 264M | if (!str_len) |
30 | 312 | return 0; |
31 | | |
32 | 264M | length = utf8proc_utf8class[str[0]]; |
33 | | |
34 | 264M | if (!length) |
35 | 404k | return -1; |
36 | | |
37 | 263M | if (str_len >= 0 && (bufsize_t)length > str_len) |
38 | 9.61k | return -str_len; |
39 | | |
40 | 470M | for (i = 1; i < length; i++) { |
41 | 206M | if ((str[i] & 0xC0) != 0x80) |
42 | 166k | return -i; |
43 | 206M | } |
44 | | |
45 | 263M | return length; |
46 | 263M | } |
47 | | |
48 | | // Validate a single UTF-8 character according to RFC 3629. |
49 | 53.7M | static int utf8proc_valid(const uint8_t *str, bufsize_t str_len) { |
50 | 53.7M | int length = utf8proc_utf8class[str[0]]; |
51 | | |
52 | 53.7M | if (!length) |
53 | 2.77M | return -1; |
54 | | |
55 | 50.9M | if ((bufsize_t)length > str_len) |
56 | 10.0k | return -str_len; |
57 | | |
58 | 50.9M | switch (length) { |
59 | 792k | case 2: |
60 | 792k | if ((str[1] & 0xC0) != 0x80) |
61 | 662k | return -1; |
62 | 129k | if (str[0] < 0xC2) { |
63 | | // Overlong |
64 | 7.26k | return -length; |
65 | 7.26k | } |
66 | 122k | break; |
67 | | |
68 | 50.0M | case 3: |
69 | 50.0M | if ((str[1] & 0xC0) != 0x80) |
70 | 399k | return -1; |
71 | 49.6M | if ((str[2] & 0xC0) != 0x80) |
72 | 48.2k | return -2; |
73 | 49.5M | if (str[0] == 0xE0) { |
74 | 1.19k | if (str[1] < 0xA0) { |
75 | | // Overlong |
76 | 594 | return -length; |
77 | 594 | } |
78 | 49.5M | } else if (str[0] == 0xED) { |
79 | 1.05k | if (str[1] >= 0xA0) { |
80 | | // Surrogate |
81 | 536 | return -length; |
82 | 536 | } |
83 | 1.05k | } |
84 | 49.5M | break; |
85 | | |
86 | 49.5M | case 4: |
87 | 171k | if ((str[1] & 0xC0) != 0x80) |
88 | 126k | return -1; |
89 | 44.5k | if ((str[2] & 0xC0) != 0x80) |
90 | 24.6k | return -2; |
91 | 19.8k | if ((str[3] & 0xC0) != 0x80) |
92 | 6.82k | return -3; |
93 | 13.0k | if (str[0] == 0xF0) { |
94 | 5.70k | if (str[1] < 0x90) { |
95 | | // Overlong |
96 | 48 | return -length; |
97 | 48 | } |
98 | 7.36k | } else if (str[0] >= 0xF4) { |
99 | 1.08k | if (str[0] > 0xF4 || str[1] >= 0x90) { |
100 | | // Above 0x10FFFF |
101 | 999 | return -length; |
102 | 999 | } |
103 | 1.08k | } |
104 | 12.0k | break; |
105 | 50.9M | } |
106 | | |
107 | 49.7M | return length; |
108 | 50.9M | } |
109 | | |
110 | | void cmark_utf8proc_check(cmark_strbuf *ob, const uint8_t *line, |
111 | 594k | bufsize_t size) { |
112 | 594k | bufsize_t i = 0; |
113 | | |
114 | 4.65M | while (i < size) { |
115 | 4.63M | bufsize_t org = i; |
116 | 4.63M | int charlen = 0; |
117 | | |
118 | 68.0M | while (i < size) { |
119 | 67.4M | if (line[i] < 0x80 && line[i] != 0) { |
120 | 13.7M | i++; |
121 | 53.7M | } else if (line[i] >= 0x80) { |
122 | 53.7M | charlen = utf8proc_valid(line + i, size - i); |
123 | 53.7M | if (charlen < 0) { |
124 | 4.06M | charlen = -charlen; |
125 | 4.06M | break; |
126 | 4.06M | } |
127 | 49.7M | i += charlen; |
128 | 49.7M | } else if (line[i] == 0) { |
129 | | // ASCII NUL is technically valid but rejected |
130 | | // for security reasons. |
131 | 0 | charlen = 1; |
132 | 0 | break; |
133 | 0 | } |
134 | 67.4M | } |
135 | | |
136 | 4.63M | if (i > org) { |
137 | 1.91M | cmark_strbuf_put(ob, line + org, i - org); |
138 | 1.91M | } |
139 | | |
140 | 4.63M | if (i >= size) { |
141 | 572k | break; |
142 | 4.06M | } else { |
143 | | // Invalid UTF-8 |
144 | 4.06M | encode_unknown(ob); |
145 | 4.06M | i += charlen; |
146 | 4.06M | } |
147 | 4.63M | } |
148 | 594k | } |
149 | | |
150 | | int cmark_utf8proc_iterate(const uint8_t *str, bufsize_t str_len, |
151 | 264M | int32_t *dst) { |
152 | 264M | int length; |
153 | 264M | int32_t uc = -1; |
154 | | |
155 | 264M | *dst = -1; |
156 | 264M | length = utf8proc_charlen(str, str_len); |
157 | 264M | if (length < 0) |
158 | 580k | return -1; |
159 | | |
160 | 263M | switch (length) { |
161 | 160M | case 1: |
162 | 160M | uc = str[0]; |
163 | 160M | break; |
164 | 388k | case 2: |
165 | 388k | uc = ((str[0] & 0x1F) << 6) + (str[1] & 0x3F); |
166 | 388k | if (uc < 0x80) |
167 | 1.39k | uc = -1; |
168 | 388k | break; |
169 | 103M | case 3: |
170 | 103M | uc = ((str[0] & 0x0F) << 12) + ((str[1] & 0x3F) << 6) + (str[2] & 0x3F); |
171 | 103M | if (uc < 0x800 || (uc >= 0xD800 && uc < 0xE000)) |
172 | 163 | uc = -1; |
173 | 103M | break; |
174 | 97.6k | case 4: |
175 | 97.6k | uc = ((str[0] & 0x07) << 18) + ((str[1] & 0x3F) << 12) + |
176 | 97.6k | ((str[2] & 0x3F) << 6) + (str[3] & 0x3F); |
177 | 97.6k | if (uc < 0x10000 || uc >= 0x110000) |
178 | 205 | uc = -1; |
179 | 97.6k | break; |
180 | 263M | } |
181 | | |
182 | 263M | if (uc < 0) |
183 | 2.07k | return -1; |
184 | | |
185 | 263M | *dst = uc; |
186 | 263M | return length; |
187 | 263M | } |
188 | | |
189 | 258M | void cmark_utf8proc_encode_char(int32_t uc, cmark_strbuf *buf) { |
190 | 258M | uint8_t dst[4]; |
191 | 258M | bufsize_t len = 0; |
192 | | |
193 | 258M | assert(uc >= 0); |
194 | | |
195 | 258M | if (uc < 0x80) { |
196 | 155M | dst[0] = (uint8_t)(uc); |
197 | 155M | len = 1; |
198 | 155M | } else if (uc < 0x800) { |
199 | 367k | dst[0] = (uint8_t)(0xC0 + (uc >> 6)); |
200 | 367k | dst[1] = 0x80 + (uc & 0x3F); |
201 | 367k | len = 2; |
202 | 102M | } else if (uc < 0x10000) { |
203 | 102M | dst[0] = (uint8_t)(0xE0 + (uc >> 12)); |
204 | 102M | dst[1] = 0x80 + ((uc >> 6) & 0x3F); |
205 | 102M | dst[2] = 0x80 + (uc & 0x3F); |
206 | 102M | len = 3; |
207 | 102M | } else if (uc < 0x110000) { |
208 | 94.6k | dst[0] = (uint8_t)(0xF0 + (uc >> 18)); |
209 | 94.6k | dst[1] = 0x80 + ((uc >> 12) & 0x3F); |
210 | 94.6k | dst[2] = 0x80 + ((uc >> 6) & 0x3F); |
211 | 94.6k | dst[3] = 0x80 + (uc & 0x3F); |
212 | 94.6k | len = 4; |
213 | 94.6k | } else { |
214 | 0 | encode_unknown(buf); |
215 | 0 | return; |
216 | 0 | } |
217 | | |
218 | 258M | cmark_strbuf_put(buf, dst, len); |
219 | 258M | } |
220 | | |
221 | | #include "case_fold.inc" |
222 | | |
223 | 1.07M | int cf_compare(const void *v1, const void *v2) { |
224 | 1.07M | uint32_t entry1 = *(uint32_t *) v1; |
225 | 1.07M | uint32_t entry2 = *(uint32_t *) v2; |
226 | | |
227 | 1.07M | return (int32_t) CF_CODE_POINT(entry1) - (int32_t) CF_CODE_POINT(entry2); |
228 | 1.07M | } |
229 | | |
230 | | void cmark_utf8proc_case_fold(cmark_strbuf *dest, const uint8_t *str, |
231 | 13.4k | bufsize_t len) { |
232 | 13.4k | int32_t c; |
233 | | |
234 | 691k | while (len > 0) { |
235 | 677k | bufsize_t char_len = cmark_utf8proc_iterate(str, len, &c); |
236 | | |
237 | 677k | if (char_len == 1) { |
238 | 364k | if (c >= 'A' && c <= 'Z') |
239 | 75.8k | c += 'a' - 'A'; |
240 | 364k | cmark_strbuf_putc(dest, c); |
241 | 364k | } else if (c >= CF_MAX) { |
242 | 753 | cmark_strbuf_put(dest, str, char_len); |
243 | 312k | } else if (char_len >= 0) { |
244 | 106k | uint32_t key = c; |
245 | 106k | uint32_t *entry = bsearch(&key, cf_table, |
246 | 106k | CF_TABLE_SIZE, sizeof(uint32_t), |
247 | 106k | cf_compare); |
248 | 106k | if (entry == NULL) { |
249 | 92.5k | cmark_strbuf_put(dest, str, char_len); |
250 | 92.5k | } else { |
251 | 14.2k | cmark_strbuf_put(dest, cf_repl + CF_REPL_IDX(*entry), |
252 | 14.2k | CF_REPL_SIZE(*entry)); |
253 | 14.2k | } |
254 | 205k | } else { |
255 | 205k | encode_unknown(dest); |
256 | 205k | char_len = -char_len; |
257 | 205k | } |
258 | | |
259 | 677k | str += char_len; |
260 | 677k | len -= char_len; |
261 | 677k | } |
262 | 13.4k | } |
263 | | |
264 | | // matches anything in the Zs class, plus LF, CR, TAB, FF. |
265 | 868k | int cmark_utf8proc_is_space(int32_t uc) { |
266 | 868k | return (uc == 9 || uc == 10 || uc == 12 || uc == 13 || uc == 32 || |
267 | 837k | uc == 160 || uc == 5760 || (uc >= 8192 && uc <= 8202) || uc == 8239 || |
268 | 837k | uc == 8287 || uc == 12288); |
269 | 868k | } |
270 | | |
271 | | // matches anything in the P or S classes. |
272 | 861k | int cmark_utf8proc_is_punctuation_or_symbol(int32_t uc) { |
273 | 861k | if (uc < 128) { |
274 | 791k | return cmark_ispunct((char)uc); |
275 | 791k | } else { |
276 | 70.4k | return ( |
277 | 70.4k | uc > 128 && |
278 | 70.4k | ((uc >= 161 && uc <= 169) || (uc >= 171 && uc <= 172) || |
279 | 70.4k | (uc >= 174 && uc <= 177) || (uc == 180) || (uc >= 182 && uc <= 184) || |
280 | 70.4k | (uc == 187) || (uc == 191) || (uc == 215) || (uc == 247) || |
281 | 70.4k | (uc >= 706 && uc <= 709) || (uc >= 722 && uc <= 735) || |
282 | 70.3k | (uc >= 741 && uc <= 747) || (uc == 749) || (uc >= 751 && uc <= 767) || |
283 | 70.3k | (uc == 885) || (uc == 894) || (uc >= 900 && uc <= 901) || |
284 | 70.3k | (uc == 903) || (uc == 1014) || (uc == 1154) || |
285 | 70.3k | (uc >= 1370 && uc <= 1375) || (uc >= 1417 && uc <= 1418) || |
286 | 70.3k | (uc >= 1421 && uc <= 1423) || (uc == 1470) || (uc == 1472) || |
287 | 70.3k | (uc == 1475) || (uc == 1478) || (uc >= 1523 && uc <= 1524) || |
288 | 70.3k | (uc >= 1542 && uc <= 1551) || (uc == 1563) || |
289 | 69.9k | (uc >= 1565 && uc <= 1567) || (uc >= 1642 && uc <= 1645) || |
290 | 69.9k | (uc == 1748) || (uc == 1758) || (uc == 1769) || |
291 | 69.9k | (uc >= 1789 && uc <= 1790) || (uc >= 1792 && uc <= 1805) || |
292 | 69.9k | (uc >= 2038 && uc <= 2041) || (uc >= 2046 && uc <= 2047) || |
293 | 69.9k | (uc >= 2096 && uc <= 2110) || (uc == 2142) || (uc == 2184) || |
294 | 69.9k | (uc >= 2404 && uc <= 2405) || (uc == 2416) || |
295 | 69.9k | (uc >= 2546 && uc <= 2547) || (uc >= 2554 && uc <= 2555) || |
296 | 69.9k | (uc == 2557) || (uc == 2678) || (uc >= 2800 && uc <= 2801) || |
297 | 69.9k | (uc == 2928) || (uc >= 3059 && uc <= 3066) || (uc == 3191) || |
298 | 69.9k | (uc == 3199) || (uc == 3204) || (uc == 3407) || (uc == 3449) || |
299 | 69.9k | (uc == 3572) || (uc == 3647) || (uc == 3663) || |
300 | 69.9k | (uc >= 3674 && uc <= 3675) || (uc >= 3841 && uc <= 3863) || |
301 | 69.9k | (uc >= 3866 && uc <= 3871) || (uc == 3892) || (uc == 3894) || |
302 | 69.9k | (uc == 3896) || (uc >= 3898 && uc <= 3901) || (uc == 3973) || |
303 | 69.9k | (uc >= 4030 && uc <= 4037) || (uc >= 4039 && uc <= 4044) || |
304 | 69.9k | (uc >= 4046 && uc <= 4058) || (uc >= 4170 && uc <= 4175) || |
305 | 69.9k | (uc >= 4254 && uc <= 4255) || (uc == 4347) || |
306 | 69.9k | (uc >= 4960 && uc <= 4968) || (uc >= 5008 && uc <= 5017) || |
307 | 68.8k | (uc == 5120) || (uc >= 5741 && uc <= 5742) || |
308 | 68.8k | (uc >= 5787 && uc <= 5788) || (uc >= 5867 && uc <= 5869) || |
309 | 68.8k | (uc >= 5941 && uc <= 5942) || (uc >= 6100 && uc <= 6102) || |
310 | 68.8k | (uc >= 6104 && uc <= 6107) || (uc >= 6144 && uc <= 6154) || |
311 | 68.7k | (uc == 6464) || (uc >= 6468 && uc <= 6469) || |
312 | 68.7k | (uc >= 6622 && uc <= 6655) || (uc >= 6686 && uc <= 6687) || |
313 | 68.7k | (uc >= 6816 && uc <= 6822) || (uc >= 6824 && uc <= 6829) || |
314 | 68.7k | (uc >= 7002 && uc <= 7018) || (uc >= 7028 && uc <= 7038) || |
315 | 68.7k | (uc >= 7164 && uc <= 7167) || (uc >= 7227 && uc <= 7231) || |
316 | 68.6k | (uc >= 7294 && uc <= 7295) || (uc >= 7360 && uc <= 7367) || |
317 | 68.6k | (uc == 7379) || (uc == 8125) || (uc >= 8127 && uc <= 8129) || |
318 | 68.6k | (uc >= 8141 && uc <= 8143) || (uc >= 8157 && uc <= 8159) || |
319 | 68.6k | (uc >= 8173 && uc <= 8175) || (uc >= 8189 && uc <= 8190) || |
320 | 68.6k | (uc >= 8208 && uc <= 8231) || (uc >= 8240 && uc <= 8286) || |
321 | 68.6k | (uc >= 8314 && uc <= 8318) || (uc >= 8330 && uc <= 8334) || |
322 | 68.6k | (uc >= 8352 && uc <= 8384) || (uc >= 8448 && uc <= 8449) || |
323 | 68.6k | (uc >= 8451 && uc <= 8454) || (uc >= 8456 && uc <= 8457) || |
324 | 68.5k | (uc == 8468) || (uc >= 8470 && uc <= 8472) || |
325 | 68.5k | (uc >= 8478 && uc <= 8483) || (uc == 8485) || (uc == 8487) || |
326 | 68.5k | (uc == 8489) || (uc == 8494) || (uc >= 8506 && uc <= 8507) || |
327 | 68.5k | (uc >= 8512 && uc <= 8516) || (uc >= 8522 && uc <= 8525) || |
328 | 67.9k | (uc == 8527) || (uc >= 8586 && uc <= 8587) || |
329 | 67.9k | (uc >= 8592 && uc <= 9254) || (uc >= 9280 && uc <= 9290) || |
330 | 67.9k | (uc >= 9372 && uc <= 9449) || (uc >= 9472 && uc <= 10101) || |
331 | 67.9k | (uc >= 10132 && uc <= 11123) || (uc >= 11126 && uc <= 11157) || |
332 | 67.8k | (uc >= 11159 && uc <= 11263) || (uc >= 11493 && uc <= 11498) || |
333 | 67.8k | (uc >= 11513 && uc <= 11516) || (uc >= 11518 && uc <= 11519) || |
334 | 67.8k | (uc == 11632) || (uc >= 11776 && uc <= 11822) || |
335 | 67.8k | (uc >= 11824 && uc <= 11869) || (uc >= 11904 && uc <= 11929) || |
336 | 67.8k | (uc >= 11931 && uc <= 12019) || (uc >= 12032 && uc <= 12245) || |
337 | 67.8k | (uc >= 12272 && uc <= 12283) || (uc >= 12289 && uc <= 12292) || |
338 | 67.8k | (uc >= 12296 && uc <= 12320) || (uc == 12336) || |
339 | 67.6k | (uc >= 12342 && uc <= 12343) || (uc >= 12349 && uc <= 12351) || |
340 | 67.6k | (uc >= 12443 && uc <= 12444) || (uc == 12448) || (uc == 12539) || |
341 | 67.5k | (uc >= 12688 && uc <= 12689) || (uc >= 12694 && uc <= 12703) || |
342 | 67.5k | (uc >= 12736 && uc <= 12771) || (uc >= 12800 && uc <= 12830) || |
343 | 67.5k | (uc >= 12842 && uc <= 12871) || (uc == 12880) || |
344 | 67.5k | (uc >= 12896 && uc <= 12927) || (uc >= 12938 && uc <= 12976) || |
345 | 67.5k | (uc >= 12992 && uc <= 13311) || (uc >= 19904 && uc <= 19967) || |
346 | 67.5k | (uc >= 42128 && uc <= 42182) || (uc >= 42238 && uc <= 42239) || |
347 | 67.2k | (uc >= 42509 && uc <= 42511) || (uc == 42611) || (uc == 42622) || |
348 | 67.2k | (uc >= 42738 && uc <= 42743) || (uc >= 42752 && uc <= 42774) || |
349 | 67.2k | (uc >= 42784 && uc <= 42785) || (uc >= 42889 && uc <= 42890) || |
350 | 67.2k | (uc >= 43048 && uc <= 43051) || (uc >= 43062 && uc <= 43065) || |
351 | 67.2k | (uc >= 43124 && uc <= 43127) || (uc >= 43214 && uc <= 43215) || |
352 | 67.2k | (uc >= 43256 && uc <= 43258) || (uc == 43260) || |
353 | 67.2k | (uc >= 43310 && uc <= 43311) || (uc == 43359) || |
354 | 67.2k | (uc >= 43457 && uc <= 43469) || (uc >= 43486 && uc <= 43487) || |
355 | 67.2k | (uc >= 43612 && uc <= 43615) || (uc >= 43639 && uc <= 43641) || |
356 | 67.2k | (uc >= 43742 && uc <= 43743) || (uc >= 43760 && uc <= 43761) || |
357 | 67.2k | (uc == 43867) || (uc >= 43882 && uc <= 43883) || (uc == 44011) || |
358 | 67.2k | (uc == 64297) || (uc >= 64434 && uc <= 64450) || |
359 | 67.2k | (uc >= 64830 && uc <= 64847) || (uc == 64975) || |
360 | 67.2k | (uc >= 65020 && uc <= 65023) || (uc >= 65040 && uc <= 65049) || |
361 | 67.2k | (uc >= 65072 && uc <= 65106) || (uc >= 65108 && uc <= 65126) || |
362 | 67.2k | (uc >= 65128 && uc <= 65131) || (uc >= 65281 && uc <= 65295) || |
363 | 67.2k | (uc >= 65306 && uc <= 65312) || (uc >= 65339 && uc <= 65344) || |
364 | 67.1k | (uc >= 65371 && uc <= 65381) || (uc >= 65504 && uc <= 65510) || |
365 | 67.1k | (uc >= 65512 && uc <= 65518) || (uc >= 65532 && uc <= 65533) || |
366 | 10.4k | (uc >= 65792 && uc <= 65794) || (uc >= 65847 && uc <= 65855) || |
367 | 10.4k | (uc >= 65913 && uc <= 65929) || (uc >= 65932 && uc <= 65934) || |
368 | 10.4k | (uc >= 65936 && uc <= 65948) || (uc == 65952) || |
369 | 10.4k | (uc >= 66000 && uc <= 66044) || (uc == 66463) || (uc == 66512) || |
370 | 10.4k | (uc == 66927) || (uc == 67671) || (uc >= 67703 && uc <= 67704) || |
371 | 10.4k | (uc == 67871) || (uc == 67903) || (uc >= 68176 && uc <= 68184) || |
372 | 10.4k | (uc == 68223) || (uc == 68296) || (uc >= 68336 && uc <= 68342) || |
373 | 8.80k | (uc >= 68409 && uc <= 68415) || (uc >= 68505 && uc <= 68508) || |
374 | 8.80k | (uc == 69293) || (uc >= 69461 && uc <= 69465) || |
375 | 8.80k | (uc >= 69510 && uc <= 69513) || (uc >= 69703 && uc <= 69709) || |
376 | 8.80k | (uc >= 69819 && uc <= 69820) || (uc >= 69822 && uc <= 69825) || |
377 | 8.80k | (uc >= 69952 && uc <= 69955) || (uc >= 70004 && uc <= 70005) || |
378 | 8.80k | (uc >= 70085 && uc <= 70088) || (uc == 70093) || (uc == 70107) || |
379 | 8.80k | (uc >= 70109 && uc <= 70111) || (uc >= 70200 && uc <= 70205) || |
380 | 8.80k | (uc == 70313) || (uc >= 70731 && uc <= 70735) || |
381 | 8.80k | (uc >= 70746 && uc <= 70747) || (uc == 70749) || (uc == 70854) || |
382 | 8.80k | (uc >= 71105 && uc <= 71127) || (uc >= 71233 && uc <= 71235) || |
383 | 8.80k | (uc >= 71264 && uc <= 71276) || (uc == 71353) || |
384 | 8.80k | (uc >= 71484 && uc <= 71487) || (uc == 71739) || |
385 | 8.79k | (uc >= 72004 && uc <= 72006) || (uc == 72162) || |
386 | 8.73k | (uc >= 72255 && uc <= 72262) || (uc >= 72346 && uc <= 72348) || |
387 | 8.73k | (uc >= 72350 && uc <= 72354) || (uc >= 72448 && uc <= 72457) || |
388 | 8.73k | (uc >= 72769 && uc <= 72773) || (uc >= 72816 && uc <= 72817) || |
389 | 8.73k | (uc >= 73463 && uc <= 73464) || (uc >= 73539 && uc <= 73551) || |
390 | 8.73k | (uc >= 73685 && uc <= 73713) || (uc == 73727) || |
391 | 8.73k | (uc >= 74864 && uc <= 74868) || (uc >= 77809 && uc <= 77810) || |
392 | 8.73k | (uc >= 92782 && uc <= 92783) || (uc == 92917) || |
393 | 8.73k | (uc >= 92983 && uc <= 92991) || (uc >= 92996 && uc <= 92997) || |
394 | 8.73k | (uc >= 93847 && uc <= 93850) || (uc == 94178) || (uc == 113820) || |
395 | 8.71k | (uc == 113823) || (uc >= 118608 && uc <= 118723) || |
396 | 8.71k | (uc >= 118784 && uc <= 119029) || (uc >= 119040 && uc <= 119078) || |
397 | 8.71k | (uc >= 119081 && uc <= 119140) || (uc >= 119146 && uc <= 119148) || |
398 | 8.71k | (uc >= 119171 && uc <= 119172) || (uc >= 119180 && uc <= 119209) || |
399 | 8.71k | (uc >= 119214 && uc <= 119274) || (uc >= 119296 && uc <= 119361) || |
400 | 8.71k | (uc == 119365) || (uc >= 119552 && uc <= 119638) || (uc == 120513) || |
401 | 8.70k | (uc == 120539) || (uc == 120571) || (uc == 120597) || (uc == 120629) || |
402 | 8.70k | (uc == 120655) || (uc == 120687) || (uc == 120713) || (uc == 120745) || |
403 | 8.70k | (uc == 120771) || (uc >= 120832 && uc <= 121343) || |
404 | 8.70k | (uc >= 121399 && uc <= 121402) || (uc >= 121453 && uc <= 121460) || |
405 | 8.01k | (uc >= 121462 && uc <= 121475) || (uc >= 121477 && uc <= 121483) || |
406 | 8.01k | (uc == 123215) || (uc == 123647) || (uc >= 125278 && uc <= 125279) || |
407 | 8.01k | (uc == 126124) || (uc == 126128) || (uc == 126254) || |
408 | 8.01k | (uc >= 126704 && uc <= 126705) || (uc >= 126976 && uc <= 127019) || |
409 | 8.01k | (uc >= 127024 && uc <= 127123) || (uc >= 127136 && uc <= 127150) || |
410 | 8.01k | (uc >= 127153 && uc <= 127167) || (uc >= 127169 && uc <= 127183) || |
411 | 8.01k | (uc >= 127185 && uc <= 127221) || (uc >= 127245 && uc <= 127405) || |
412 | 8.00k | (uc >= 127462 && uc <= 127490) || (uc >= 127504 && uc <= 127547) || |
413 | 8.00k | (uc >= 127552 && uc <= 127560) || (uc >= 127568 && uc <= 127569) || |
414 | 8.00k | (uc >= 127584 && uc <= 127589) || (uc >= 127744 && uc <= 128727) || |
415 | 7.98k | (uc >= 128732 && uc <= 128748) || (uc >= 128752 && uc <= 128764) || |
416 | 7.98k | (uc >= 128768 && uc <= 128886) || (uc >= 128891 && uc <= 128985) || |
417 | 7.46k | (uc >= 128992 && uc <= 129003) || (uc == 129008) || |
418 | 7.46k | (uc >= 129024 && uc <= 129035) || (uc >= 129040 && uc <= 129095) || |
419 | 7.46k | (uc >= 129104 && uc <= 129113) || (uc >= 129120 && uc <= 129159) || |
420 | 7.46k | (uc >= 129168 && uc <= 129197) || (uc >= 129200 && uc <= 129201) || |
421 | 7.46k | (uc >= 129280 && uc <= 129619) || (uc >= 129632 && uc <= 129645) || |
422 | 7.46k | (uc >= 129648 && uc <= 129660) || (uc >= 129664 && uc <= 129672) || |
423 | 7.46k | (uc >= 129680 && uc <= 129725) || (uc >= 129727 && uc <= 129733) || |
424 | 7.46k | (uc >= 129742 && uc <= 129755) || (uc >= 129760 && uc <= 129768) || |
425 | 7.46k | (uc >= 129776 && uc <= 129784) || (uc >= 129792 && uc <= 129938) || |
426 | 7.46k | (uc >= 129940 && uc <= 129994))); |
427 | 70.4k | } |
428 | 861k | } |