@discordeno/utils 19.0.0 → 20.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.
@@ -0,0 +1,456 @@
1
+ // Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
2
+ // A module to print ANSI terminal colors. Inspired by chalk, kleur, and colors
3
+ // on npm.
4
+ // https://deno.land/std@0.153.0/fmt/colors.ts?source
5
+ "use strict";
6
+ Object.defineProperty(exports, "__esModule", {
7
+ value: true
8
+ });
9
+ function _export(target, all) {
10
+ for(var name in all)Object.defineProperty(target, name, {
11
+ enumerable: true,
12
+ get: all[name]
13
+ });
14
+ }
15
+ _export(exports, {
16
+ bgBlack: function() {
17
+ return bgBlack;
18
+ },
19
+ bgBlue: function() {
20
+ return bgBlue;
21
+ },
22
+ bgBrightBlack: function() {
23
+ return bgBrightBlack;
24
+ },
25
+ bgBrightBlue: function() {
26
+ return bgBrightBlue;
27
+ },
28
+ bgBrightCyan: function() {
29
+ return bgBrightCyan;
30
+ },
31
+ bgBrightGreen: function() {
32
+ return bgBrightGreen;
33
+ },
34
+ bgBrightMagenta: function() {
35
+ return bgBrightMagenta;
36
+ },
37
+ bgBrightRed: function() {
38
+ return bgBrightRed;
39
+ },
40
+ bgBrightWhite: function() {
41
+ return bgBrightWhite;
42
+ },
43
+ bgBrightYellow: function() {
44
+ return bgBrightYellow;
45
+ },
46
+ bgCyan: function() {
47
+ return bgCyan;
48
+ },
49
+ bgGreen: function() {
50
+ return bgGreen;
51
+ },
52
+ bgMagenta: function() {
53
+ return bgMagenta;
54
+ },
55
+ bgRed: function() {
56
+ return bgRed;
57
+ },
58
+ bgRgb24: function() {
59
+ return bgRgb24;
60
+ },
61
+ bgRgb8: function() {
62
+ return bgRgb8;
63
+ },
64
+ bgWhite: function() {
65
+ return bgWhite;
66
+ },
67
+ bgYellow: function() {
68
+ return bgYellow;
69
+ },
70
+ black: function() {
71
+ return black;
72
+ },
73
+ blue: function() {
74
+ return blue;
75
+ },
76
+ bold: function() {
77
+ return bold;
78
+ },
79
+ brightBlack: function() {
80
+ return brightBlack;
81
+ },
82
+ brightBlue: function() {
83
+ return brightBlue;
84
+ },
85
+ brightCyan: function() {
86
+ return brightCyan;
87
+ },
88
+ brightGreen: function() {
89
+ return brightGreen;
90
+ },
91
+ brightMagenta: function() {
92
+ return brightMagenta;
93
+ },
94
+ brightRed: function() {
95
+ return brightRed;
96
+ },
97
+ brightWhite: function() {
98
+ return brightWhite;
99
+ },
100
+ brightYellow: function() {
101
+ return brightYellow;
102
+ },
103
+ cyan: function() {
104
+ return cyan;
105
+ },
106
+ dim: function() {
107
+ return dim;
108
+ },
109
+ getColorEnabled: function() {
110
+ return getColorEnabled;
111
+ },
112
+ gray: function() {
113
+ return gray;
114
+ },
115
+ green: function() {
116
+ return green;
117
+ },
118
+ hidden: function() {
119
+ return hidden;
120
+ },
121
+ inverse: function() {
122
+ return inverse;
123
+ },
124
+ italic: function() {
125
+ return italic;
126
+ },
127
+ magenta: function() {
128
+ return magenta;
129
+ },
130
+ red: function() {
131
+ return red;
132
+ },
133
+ reset: function() {
134
+ return reset;
135
+ },
136
+ rgb24: function() {
137
+ return rgb24;
138
+ },
139
+ rgb8: function() {
140
+ return rgb8;
141
+ },
142
+ setColorEnabled: function() {
143
+ return setColorEnabled;
144
+ },
145
+ strikethrough: function() {
146
+ return strikethrough;
147
+ },
148
+ stripColor: function() {
149
+ return stripColor;
150
+ },
151
+ underline: function() {
152
+ return underline;
153
+ },
154
+ white: function() {
155
+ return white;
156
+ },
157
+ yellow: function() {
158
+ return yellow;
159
+ }
160
+ });
161
+ let enabled = true;
162
+ function setColorEnabled(value) {
163
+ enabled = value;
164
+ }
165
+ function getColorEnabled() {
166
+ return enabled;
167
+ }
168
+ /**
169
+ * Builds color code
170
+ * @param open
171
+ * @param close
172
+ */ function code(open, close) {
173
+ return {
174
+ open: `\x1b[${open.join(';')}m`,
175
+ close: `\x1b[${close}m`,
176
+ regexp: new RegExp(`\\x1b\\[${close}m`, 'g')
177
+ };
178
+ }
179
+ /**
180
+ * Applies color and background based on color code and its associated text
181
+ * @param str text to apply color settings to
182
+ * @param code color code to apply
183
+ */ function run(str, code) {
184
+ return enabled ? `${code.open}${str.replace(code.regexp, code.open)}${code.close}` : str;
185
+ }
186
+ function reset(str) {
187
+ return run(str, code([
188
+ 0
189
+ ], 0));
190
+ }
191
+ function bold(str) {
192
+ return run(str, code([
193
+ 1
194
+ ], 22));
195
+ }
196
+ function dim(str) {
197
+ return run(str, code([
198
+ 2
199
+ ], 22));
200
+ }
201
+ function italic(str) {
202
+ return run(str, code([
203
+ 3
204
+ ], 23));
205
+ }
206
+ function underline(str) {
207
+ return run(str, code([
208
+ 4
209
+ ], 24));
210
+ }
211
+ function inverse(str) {
212
+ return run(str, code([
213
+ 7
214
+ ], 27));
215
+ }
216
+ function hidden(str) {
217
+ return run(str, code([
218
+ 8
219
+ ], 28));
220
+ }
221
+ function strikethrough(str) {
222
+ return run(str, code([
223
+ 9
224
+ ], 29));
225
+ }
226
+ function black(str) {
227
+ return run(str, code([
228
+ 30
229
+ ], 39));
230
+ }
231
+ function red(str) {
232
+ return run(str, code([
233
+ 31
234
+ ], 39));
235
+ }
236
+ function green(str) {
237
+ return run(str, code([
238
+ 32
239
+ ], 39));
240
+ }
241
+ function yellow(str) {
242
+ return run(str, code([
243
+ 33
244
+ ], 39));
245
+ }
246
+ function blue(str) {
247
+ return run(str, code([
248
+ 34
249
+ ], 39));
250
+ }
251
+ function magenta(str) {
252
+ return run(str, code([
253
+ 35
254
+ ], 39));
255
+ }
256
+ function cyan(str) {
257
+ return run(str, code([
258
+ 36
259
+ ], 39));
260
+ }
261
+ function white(str) {
262
+ return run(str, code([
263
+ 37
264
+ ], 39));
265
+ }
266
+ function gray(str) {
267
+ return brightBlack(str);
268
+ }
269
+ function brightBlack(str) {
270
+ return run(str, code([
271
+ 90
272
+ ], 39));
273
+ }
274
+ function brightRed(str) {
275
+ return run(str, code([
276
+ 91
277
+ ], 39));
278
+ }
279
+ function brightGreen(str) {
280
+ return run(str, code([
281
+ 92
282
+ ], 39));
283
+ }
284
+ function brightYellow(str) {
285
+ return run(str, code([
286
+ 93
287
+ ], 39));
288
+ }
289
+ function brightBlue(str) {
290
+ return run(str, code([
291
+ 94
292
+ ], 39));
293
+ }
294
+ function brightMagenta(str) {
295
+ return run(str, code([
296
+ 95
297
+ ], 39));
298
+ }
299
+ function brightCyan(str) {
300
+ return run(str, code([
301
+ 96
302
+ ], 39));
303
+ }
304
+ function brightWhite(str) {
305
+ return run(str, code([
306
+ 97
307
+ ], 39));
308
+ }
309
+ function bgBlack(str) {
310
+ return run(str, code([
311
+ 40
312
+ ], 49));
313
+ }
314
+ function bgRed(str) {
315
+ return run(str, code([
316
+ 41
317
+ ], 49));
318
+ }
319
+ function bgGreen(str) {
320
+ return run(str, code([
321
+ 42
322
+ ], 49));
323
+ }
324
+ function bgYellow(str) {
325
+ return run(str, code([
326
+ 43
327
+ ], 49));
328
+ }
329
+ function bgBlue(str) {
330
+ return run(str, code([
331
+ 44
332
+ ], 49));
333
+ }
334
+ function bgMagenta(str) {
335
+ return run(str, code([
336
+ 45
337
+ ], 49));
338
+ }
339
+ function bgCyan(str) {
340
+ return run(str, code([
341
+ 46
342
+ ], 49));
343
+ }
344
+ function bgWhite(str) {
345
+ return run(str, code([
346
+ 47
347
+ ], 49));
348
+ }
349
+ function bgBrightBlack(str) {
350
+ return run(str, code([
351
+ 100
352
+ ], 49));
353
+ }
354
+ function bgBrightRed(str) {
355
+ return run(str, code([
356
+ 101
357
+ ], 49));
358
+ }
359
+ function bgBrightGreen(str) {
360
+ return run(str, code([
361
+ 102
362
+ ], 49));
363
+ }
364
+ function bgBrightYellow(str) {
365
+ return run(str, code([
366
+ 103
367
+ ], 49));
368
+ }
369
+ function bgBrightBlue(str) {
370
+ return run(str, code([
371
+ 104
372
+ ], 49));
373
+ }
374
+ function bgBrightMagenta(str) {
375
+ return run(str, code([
376
+ 105
377
+ ], 49));
378
+ }
379
+ function bgBrightCyan(str) {
380
+ return run(str, code([
381
+ 106
382
+ ], 49));
383
+ }
384
+ function bgBrightWhite(str) {
385
+ return run(str, code([
386
+ 107
387
+ ], 49));
388
+ }
389
+ /* Special Color Sequences */ /**
390
+ * Clam and truncate color codes
391
+ * @param n
392
+ * @param max number to truncate to
393
+ * @param min number to truncate from
394
+ */ function clampAndTruncate(n, max = 255, min = 0) {
395
+ return Math.trunc(Math.max(Math.min(n, max), min));
396
+ }
397
+ function rgb8(str, color) {
398
+ return run(str, code([
399
+ 38,
400
+ 5,
401
+ clampAndTruncate(color)
402
+ ], 39));
403
+ }
404
+ function bgRgb8(str, color) {
405
+ return run(str, code([
406
+ 48,
407
+ 5,
408
+ clampAndTruncate(color)
409
+ ], 49));
410
+ }
411
+ function rgb24(str, color) {
412
+ if (typeof color === 'number') {
413
+ return run(str, code([
414
+ 38,
415
+ 2,
416
+ color >> 16 & 0xff,
417
+ color >> 8 & 0xff,
418
+ color & 0xff
419
+ ], 39));
420
+ }
421
+ return run(str, code([
422
+ 38,
423
+ 2,
424
+ clampAndTruncate(color.r),
425
+ clampAndTruncate(color.g),
426
+ clampAndTruncate(color.b)
427
+ ], 39));
428
+ }
429
+ function bgRgb24(str, color) {
430
+ if (typeof color === 'number') {
431
+ return run(str, code([
432
+ 48,
433
+ 2,
434
+ color >> 16 & 0xff,
435
+ color >> 8 & 0xff,
436
+ color & 0xff
437
+ ], 49));
438
+ }
439
+ return run(str, code([
440
+ 48,
441
+ 2,
442
+ clampAndTruncate(color.r),
443
+ clampAndTruncate(color.g),
444
+ clampAndTruncate(color.b)
445
+ ], 49));
446
+ }
447
+ // https://github.com/chalk/ansi-regex/blob/02fa893d619d3da85411acc8fd4e2eea0e95a9d9/index.cjs
448
+ const ANSI_PATTERN = new RegExp([
449
+ '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
450
+ '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))'
451
+ ].join('|'), 'g');
452
+ function stripColor(string) {
453
+ return string.replace(ANSI_PATTERN, '');
454
+ }
455
+
456
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb2xvcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIEEgbW9kdWxlIHRvIHByaW50IEFOU0kgdGVybWluYWwgY29sb3JzLiBJbnNwaXJlZCBieSBjaGFsaywga2xldXIsIGFuZCBjb2xvcnNcbi8vIG9uIG5wbS5cbi8vIGh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL2ZtdC9jb2xvcnMudHM/c291cmNlXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZSB7XG4gIG9wZW46IHN0cmluZ1xuICBjbG9zZTogc3RyaW5nXG4gIHJlZ2V4cDogUmVnRXhwXG59XG5cbi8qKiBSR0IgOC1iaXRzIHBlciBjaGFubmVsLiBFYWNoIGluIHJhbmdlIGAwLT4yNTVgIG9yIGAweDAwLT4weGZmYCAqL1xuZXhwb3J0IGludGVyZmFjZSBSZ2Ige1xuICByOiBudW1iZXJcbiAgZzogbnVtYmVyXG4gIGI6IG51bWJlclxufVxuXG5sZXQgZW5hYmxlZCA9IHRydWVcblxuLyoqXG4gKiBTZXQgY2hhbmdpbmcgdGV4dCBjb2xvciB0byBlbmFibGVkIG9yIGRpc2FibGVkXG4gKiBAcGFyYW0gdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldENvbG9yRW5hYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICBlbmFibGVkID0gdmFsdWVcbn1cblxuLyoqIEdldCB3aGV0aGVyIHRleHQgY29sb3IgY2hhbmdlIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29sb3JFbmFibGVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gZW5hYmxlZFxufVxuXG4vKipcbiAqIEJ1aWxkcyBjb2xvciBjb2RlXG4gKiBAcGFyYW0gb3BlblxuICogQHBhcmFtIGNsb3NlXG4gKi9cbmZ1bmN0aW9uIGNvZGUob3BlbjogbnVtYmVyW10sIGNsb3NlOiBudW1iZXIpOiBDb2RlIHtcbiAgcmV0dXJuIHtcbiAgICBvcGVuOiBgXFx4MWJbJHtvcGVuLmpvaW4oJzsnKX1tYCxcbiAgICBjbG9zZTogYFxceDFiWyR7Y2xvc2V9bWAsXG4gICAgcmVnZXhwOiBuZXcgUmVnRXhwKGBcXFxceDFiXFxcXFske2Nsb3NlfW1gLCAnZycpLFxuICB9XG59XG5cbi8qKlxuICogQXBwbGllcyBjb2xvciBhbmQgYmFja2dyb3VuZCBiYXNlZCBvbiBjb2xvciBjb2RlIGFuZCBpdHMgYXNzb2NpYXRlZCB0ZXh0XG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gYXBwbHkgY29sb3Igc2V0dGluZ3MgdG9cbiAqIEBwYXJhbSBjb2RlIGNvbG9yIGNvZGUgdG8gYXBwbHlcbiAqL1xuZnVuY3Rpb24gcnVuKHN0cjogc3RyaW5nLCBjb2RlOiBDb2RlKTogc3RyaW5nIHtcbiAgcmV0dXJuIGVuYWJsZWQgPyBgJHtjb2RlLm9wZW59JHtzdHIucmVwbGFjZShjb2RlLnJlZ2V4cCwgY29kZS5vcGVuKX0ke2NvZGUuY2xvc2V9YCA6IHN0clxufVxuXG4vKipcbiAqIFJlc2V0IHRoZSB0ZXh0IG1vZGlmaWVkXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gcmVzZXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0KHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzBdLCAwKSlcbn1cblxuLyoqXG4gKiBNYWtlIHRoZSB0ZXh0IGJvbGQuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBib2xkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBib2xkKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzFdLCAyMikpXG59XG5cbi8qKlxuICogVGhlIHRleHQgZW1pdHMgb25seSBhIHNtYWxsIGFtb3VudCBvZiBsaWdodC5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBkaW1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpbShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFsyXSwgMjIpKVxufVxuXG4vKipcbiAqIE1ha2UgdGhlIHRleHQgaXRhbGljLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgaXRhbGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpdGFsaWMoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbM10sIDIzKSlcbn1cblxuLyoqXG4gKiBNYWtlIHRoZSB0ZXh0IHVuZGVybGluZS5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byB1bmRlcmxpbmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuZGVybGluZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFs0XSwgMjQpKVxufVxuXG4vKipcbiAqIEludmVydCBiYWNrZ3JvdW5kIGNvbG9yIGFuZCB0ZXh0IGNvbG9yLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIGludmVydCBpdHMgY29sb3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludmVyc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbN10sIDI3KSlcbn1cblxuLyoqXG4gKiBNYWtlIHRoZSB0ZXh0IGhpZGRlbi5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBoaWRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoaWRkZW4oc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbOF0sIDI4KSlcbn1cblxuLyoqXG4gKiBQdXQgaG9yaXpvbnRhbCBsaW5lIHRocm91Z2ggdGhlIGNlbnRlciBvZiB0aGUgdGV4dC5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBzdHJpa2UgdGhyb3VnaFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaWtldGhyb3VnaChzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFs5XSwgMjkpKVxufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIGJsYWNrLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgYmxhY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJsYWNrKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzMwXSwgMzkpKVxufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIHJlZC5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIHJlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVkKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzMxXSwgMzkpKVxufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIGdyZWVuLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgZ3JlZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyZWVuKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzMyXSwgMzkpKVxufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIHllbGxvdy5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIHllbGxvd1xuICovXG5leHBvcnQgZnVuY3Rpb24geWVsbG93KHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzMzXSwgMzkpKVxufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIGJsdWUuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBibHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBibHVlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzM0XSwgMzkpKVxufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIG1hZ2VudGEuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBtYWdlbnRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWdlbnRhKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzM1XSwgMzkpKVxufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIGN5YW4uXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBjeWFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjeWFuKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzM2XSwgMzkpKVxufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIHdoaXRlLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2Ugd2hpdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdoaXRlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzM3XSwgMzkpKVxufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIGdyYXkuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBncmF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmF5KHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGJyaWdodEJsYWNrKHN0cilcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byBicmlnaHQgYmxhY2suXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBicmlnaHQtYmxhY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJyaWdodEJsYWNrKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzkwXSwgMzkpKVxufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIGJyaWdodCByZWQuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBicmlnaHQtcmVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBicmlnaHRSZWQoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbOTFdLCAzOSkpXG59XG5cbi8qKlxuICogU2V0IHRleHQgY29sb3IgdG8gYnJpZ2h0IGdyZWVuLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgYnJpZ2h0LWdyZWVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBicmlnaHRHcmVlbihzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFs5Ml0sIDM5KSlcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byBicmlnaHQgeWVsbG93LlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgYnJpZ2h0LXllbGxvd1xuICovXG5leHBvcnQgZnVuY3Rpb24gYnJpZ2h0WWVsbG93KHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzkzXSwgMzkpKVxufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIGJyaWdodCBibHVlLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgYnJpZ2h0LWJsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJyaWdodEJsdWUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbOTRdLCAzOSkpXG59XG5cbi8qKlxuICogU2V0IHRleHQgY29sb3IgdG8gYnJpZ2h0IG1hZ2VudGEuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBicmlnaHQtbWFnZW50YVxuICovXG5leHBvcnQgZnVuY3Rpb24gYnJpZ2h0TWFnZW50YShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFs5NV0sIDM5KSlcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byBicmlnaHQgY3lhbi5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGJyaWdodC1jeWFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBicmlnaHRDeWFuKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzk2XSwgMzkpKVxufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIGJyaWdodCB3aGl0ZS5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGJyaWdodC13aGl0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYnJpZ2h0V2hpdGUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbOTddLCAzOSkpXG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdG8gYmxhY2suXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBpdHMgYmFja2dyb3VuZCBibGFja1xuICovXG5leHBvcnQgZnVuY3Rpb24gYmdCbGFjayhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFs0MF0sIDQ5KSlcbn1cblxuLyoqXG4gKiBTZXQgYmFja2dyb3VuZCBjb2xvciB0byByZWQuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBpdHMgYmFja2dyb3VuZCByZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJnUmVkKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzQxXSwgNDkpKVxufVxuXG4vKipcbiAqIFNldCBiYWNrZ3JvdW5kIGNvbG9yIHRvIGdyZWVuLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgZ3JlZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJnR3JlZW4oc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbNDJdLCA0OSkpXG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdG8geWVsbG93LlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgeWVsbG93XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZ1llbGxvdyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFs0M10sIDQ5KSlcbn1cblxuLyoqXG4gKiBTZXQgYmFja2dyb3VuZCBjb2xvciB0byBibHVlLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgYmx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmdCbHVlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzQ0XSwgNDkpKVxufVxuXG4vKipcbiAqICBTZXQgYmFja2dyb3VuZCBjb2xvciB0byBtYWdlbnRhLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgbWFnZW50YVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmdNYWdlbnRhKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzQ1XSwgNDkpKVxufVxuXG4vKipcbiAqIFNldCBiYWNrZ3JvdW5kIGNvbG9yIHRvIGN5YW4uXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBpdHMgYmFja2dyb3VuZCBjeWFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZ0N5YW4oc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbNDZdLCA0OSkpXG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdG8gd2hpdGUuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBpdHMgYmFja2dyb3VuZCB3aGl0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmdXaGl0ZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFs0N10sIDQ5KSlcbn1cblxuLyoqXG4gKiBTZXQgYmFja2dyb3VuZCBjb2xvciB0byBicmlnaHQgYmxhY2suXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBpdHMgYmFja2dyb3VuZCBicmlnaHQtYmxhY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJnQnJpZ2h0QmxhY2soc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbMTAwXSwgNDkpKVxufVxuXG4vKipcbiAqIFNldCBiYWNrZ3JvdW5kIGNvbG9yIHRvIGJyaWdodCByZWQuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBpdHMgYmFja2dyb3VuZCBicmlnaHQtcmVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZ0JyaWdodFJlZChzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFsxMDFdLCA0OSkpXG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdG8gYnJpZ2h0IGdyZWVuLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgYnJpZ2h0LWdyZWVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZ0JyaWdodEdyZWVuKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzEwMl0sIDQ5KSlcbn1cblxuLyoqXG4gKiBTZXQgYmFja2dyb3VuZCBjb2xvciB0byBicmlnaHQgeWVsbG93LlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgYnJpZ2h0LXllbGxvd1xuICovXG5leHBvcnQgZnVuY3Rpb24gYmdCcmlnaHRZZWxsb3coc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbMTAzXSwgNDkpKVxufVxuXG4vKipcbiAqIFNldCBiYWNrZ3JvdW5kIGNvbG9yIHRvIGJyaWdodCBibHVlLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgYnJpZ2h0LWJsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJnQnJpZ2h0Qmx1ZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFsxMDRdLCA0OSkpXG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdG8gYnJpZ2h0IG1hZ2VudGEuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBpdHMgYmFja2dyb3VuZCBicmlnaHQtbWFnZW50YVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmdCcmlnaHRNYWdlbnRhKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzEwNV0sIDQ5KSlcbn1cblxuLyoqXG4gKiBTZXQgYmFja2dyb3VuZCBjb2xvciB0byBicmlnaHQgY3lhbi5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGl0cyBiYWNrZ3JvdW5kIGJyaWdodC1jeWFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZ0JyaWdodEN5YW4oc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbMTA2XSwgNDkpKVxufVxuXG4vKipcbiAqIFNldCBiYWNrZ3JvdW5kIGNvbG9yIHRvIGJyaWdodCB3aGl0ZS5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGl0cyBiYWNrZ3JvdW5kIGJyaWdodC13aGl0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmdCcmlnaHRXaGl0ZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFsxMDddLCA0OSkpXG59XG5cbi8qIFNwZWNpYWwgQ29sb3IgU2VxdWVuY2VzICovXG5cbi8qKlxuICogQ2xhbSBhbmQgdHJ1bmNhdGUgY29sb3IgY29kZXNcbiAqIEBwYXJhbSBuXG4gKiBAcGFyYW0gbWF4IG51bWJlciB0byB0cnVuY2F0ZSB0b1xuICogQHBhcmFtIG1pbiBudW1iZXIgdG8gdHJ1bmNhdGUgZnJvbVxuICovXG5mdW5jdGlvbiBjbGFtcEFuZFRydW5jYXRlKG46IG51bWJlciwgbWF4ID0gMjU1LCBtaW4gPSAwKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgudHJ1bmMoTWF0aC5tYXgoTWF0aC5taW4obiwgbWF4KSwgbWluKSlcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB1c2luZyBwYWxldHRlZCA4Yml0IGNvbG9ycy5cbiAqIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FOU0lfZXNjYXBlX2NvZGUjOC1iaXRcbiAqIEBwYXJhbSBzdHIgdGV4dCBjb2xvciB0byBhcHBseSBwYWxldHRlZCA4Yml0IGNvbG9ycyB0b1xuICogQHBhcmFtIGNvbG9yIGNvZGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJnYjgoc3RyOiBzdHJpbmcsIGNvbG9yOiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbMzgsIDUsIGNsYW1wQW5kVHJ1bmNhdGUoY29sb3IpXSwgMzkpKVxufVxuXG4vKipcbiAqIFNldCBiYWNrZ3JvdW5kIGNvbG9yIHVzaW5nIHBhbGV0dGVkIDhiaXQgY29sb3JzLlxuICogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQU5TSV9lc2NhcGVfY29kZSM4LWJpdFxuICogQHBhcmFtIHN0ciB0ZXh0IGNvbG9yIHRvIGFwcGx5IHBhbGV0dGVkIDhiaXQgYmFja2dyb3VuZCBjb2xvcnMgdG9cbiAqIEBwYXJhbSBjb2xvciBjb2RlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZ1JnYjgoc3RyOiBzdHJpbmcsIGNvbG9yOiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbNDgsIDUsIGNsYW1wQW5kVHJ1bmNhdGUoY29sb3IpXSwgNDkpKVxufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHVzaW5nIDI0Yml0IHJnYi5cbiAqIGBjb2xvcmAgY2FuIGJlIGEgbnVtYmVyIGluIHJhbmdlIGAweDAwMDAwMGAgdG8gYDB4ZmZmZmZmYCBvclxuICogYW4gYFJnYmAuXG4gKlxuICogVG8gcHJvZHVjZSB0aGUgY29sb3IgbWFnZW50YTpcbiAqXG4gKiBgYGB0c1xuICogICAgICBpbXBvcnQgeyByZ2IyNCB9IGZyb20gXCIuL2NvbG9ycy50c1wiO1xuICogICAgICByZ2IyNChcImZvb1wiLCAweGZmMDBmZik7XG4gKiAgICAgIHJnYjI0KFwiZm9vXCIsIHtyOiAyNTUsIGc6IDAsIGI6IDI1NX0pO1xuICogYGBgXG4gKiBAcGFyYW0gc3RyIHRleHQgY29sb3IgdG8gYXBwbHkgMjRiaXQgcmdiIHRvXG4gKiBAcGFyYW0gY29sb3IgY29kZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmdiMjQoc3RyOiBzdHJpbmcsIGNvbG9yOiBudW1iZXIgfCBSZ2IpOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIGNvbG9yID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBydW4oc3RyLCBjb2RlKFszOCwgMiwgKGNvbG9yID4+IDE2KSAmIDB4ZmYsIChjb2xvciA+PiA4KSAmIDB4ZmYsIGNvbG9yICYgMHhmZl0sIDM5KSlcbiAgfVxuICByZXR1cm4gcnVuKHN0ciwgY29kZShbMzgsIDIsIGNsYW1wQW5kVHJ1bmNhdGUoY29sb3IuciksIGNsYW1wQW5kVHJ1bmNhdGUoY29sb3IuZyksIGNsYW1wQW5kVHJ1bmNhdGUoY29sb3IuYildLCAzOSkpXG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdXNpbmcgMjRiaXQgcmdiLlxuICogYGNvbG9yYCBjYW4gYmUgYSBudW1iZXIgaW4gcmFuZ2UgYDB4MDAwMDAwYCB0byBgMHhmZmZmZmZgIG9yXG4gKiBhbiBgUmdiYC5cbiAqXG4gKiBUbyBwcm9kdWNlIHRoZSBjb2xvciBtYWdlbnRhOlxuICpcbiAqIGBgYHRzXG4gKiAgICAgIGltcG9ydCB7IGJnUmdiMjQgfSBmcm9tIFwiLi9jb2xvcnMudHNcIjtcbiAqICAgICAgYmdSZ2IyNChcImZvb1wiLCAweGZmMDBmZik7XG4gKiAgICAgIGJnUmdiMjQoXCJmb29cIiwge3I6IDI1NSwgZzogMCwgYjogMjU1fSk7XG4gKiBgYGBcbiAqIEBwYXJhbSBzdHIgdGV4dCBjb2xvciB0byBhcHBseSAyNGJpdCByZ2IgdG9cbiAqIEBwYXJhbSBjb2xvciBjb2RlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZ1JnYjI0KHN0cjogc3RyaW5nLCBjb2xvcjogbnVtYmVyIHwgUmdiKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gcnVuKHN0ciwgY29kZShbNDgsIDIsIChjb2xvciA+PiAxNikgJiAweGZmLCAoY29sb3IgPj4gOCkgJiAweGZmLCBjb2xvciAmIDB4ZmZdLCA0OSkpXG4gIH1cbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzQ4LCAyLCBjbGFtcEFuZFRydW5jYXRlKGNvbG9yLnIpLCBjbGFtcEFuZFRydW5jYXRlKGNvbG9yLmcpLCBjbGFtcEFuZFRydW5jYXRlKGNvbG9yLmIpXSwgNDkpKVxufVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvYW5zaS1yZWdleC9ibG9iLzAyZmE4OTNkNjE5ZDNkYTg1NDExYWNjOGZkNGUyZWVhMGU5NWE5ZDkvaW5kZXguanNcbmNvbnN0IEFOU0lfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXG4gIFtcbiAgICAnW1xcXFx1MDAxQlxcXFx1MDA5Ql1bW1xcXFxdKCkjOz9dKig/Oig/Oig/Oig/OjtbLWEtekEtWlxcXFxkXFxcXC8jJi46PT8lQH5fXSspKnxbYS16QS1aXFxcXGRdKyg/OjtbLWEtekEtWlxcXFxkXFxcXC8jJi46PT8lQH5fXSopKik/XFxcXHUwMDA3KScsXG4gICAgJyg/Oig/OlxcXFxkezEsNH0oPzo7XFxcXGR7MCw0fSkqKT9bXFxcXGRBLVBSLVRaY2YtbnEtdXk9Pjx+XSkpJyxcbiAgXS5qb2luKCd8JyksXG4gICdnJyxcbilcblxuLyoqXG4gKiBSZW1vdmUgQU5TSSBlc2NhcGUgY29kZXMgZnJvbSB0aGUgc3RyaW5nLlxuICogQHBhcmFtIHN0cmluZyB0byByZW1vdmUgQU5TSSBlc2NhcGUgY29kZXMgZnJvbVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaXBDb2xvcihzdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZShBTlNJX1BBVFRFUk4sICcnKVxufVxuIl0sIm5hbWVzIjpbImJnQmxhY2siLCJiZ0JsdWUiLCJiZ0JyaWdodEJsYWNrIiwiYmdCcmlnaHRCbHVlIiwiYmdCcmlnaHRDeWFuIiwiYmdCcmlnaHRHcmVlbiIsImJnQnJpZ2h0TWFnZW50YSIsImJnQnJpZ2h0UmVkIiwiYmdCcmlnaHRXaGl0ZSIsImJnQnJpZ2h0WWVsbG93IiwiYmdDeWFuIiwiYmdHcmVlbiIsImJnTWFnZW50YSIsImJnUmVkIiwiYmdSZ2IyNCIsImJnUmdiOCIsImJnV2hpdGUiLCJiZ1llbGxvdyIsImJsYWNrIiwiYmx1ZSIsImJvbGQiLCJicmlnaHRCbGFjayIsImJyaWdodEJsdWUiLCJicmlnaHRDeWFuIiwiYnJpZ2h0R3JlZW4iLCJicmlnaHRNYWdlbnRhIiwiYnJpZ2h0UmVkIiwiYnJpZ2h0V2hpdGUiLCJicmlnaHRZZWxsb3ciLCJjeWFuIiwiZGltIiwiZ2V0Q29sb3JFbmFibGVkIiwiZ3JheSIsImdyZWVuIiwiaGlkZGVuIiwiaW52ZXJzZSIsIml0YWxpYyIsIm1hZ2VudGEiLCJyZWQiLCJyZXNldCIsInJnYjI0IiwicmdiOCIsInNldENvbG9yRW5hYmxlZCIsInN0cmlrZXRocm91Z2giLCJzdHJpcENvbG9yIiwidW5kZXJsaW5lIiwid2hpdGUiLCJ5ZWxsb3ciLCJlbmFibGVkIiwidmFsdWUiLCJjb2RlIiwib3BlbiIsImNsb3NlIiwiam9pbiIsInJlZ2V4cCIsIlJlZ0V4cCIsInJ1biIsInN0ciIsInJlcGxhY2UiLCJjbGFtcEFuZFRydW5jYXRlIiwibiIsIm1heCIsIm1pbiIsIk1hdGgiLCJ0cnVuYyIsImNvbG9yIiwiciIsImciLCJiIiwiQU5TSV9QQVRURVJOIiwic3RyaW5nIl0sIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFDMUUsK0VBQStFO0FBQy9FLFVBQVU7QUFDVixxREFBcUQ7Ozs7Ozs7Ozs7OztJQWdRckNBLE9BQU87ZUFBUEE7O0lBZ0NBQyxNQUFNO2VBQU5BOztJQWdDQUMsYUFBYTtlQUFiQTs7SUFnQ0FDLFlBQVk7ZUFBWkE7O0lBZ0JBQyxZQUFZO2VBQVpBOztJQWhDQUMsYUFBYTtlQUFiQTs7SUF3QkFDLGVBQWU7ZUFBZkE7O0lBaENBQyxXQUFXO2VBQVhBOztJ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
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ iconBigintToHash: function() {
13
+ return iconBigintToHash;
14
+ },
15
+ iconHashToBigInt: function() {
16
+ return iconHashToBigInt;
17
+ }
18
+ });
19
+ function iconHashToBigInt(hash) {
20
+ // The icon is animated so it needs special handling
21
+ if (hash.startsWith('a_')) {
22
+ // Change the `a_` to just be `a`
23
+ hash = `a${hash.substring(2)}`;
24
+ } else {
25
+ // The icon is not animated but it could be that it starts with a 0 so we just put a `b` in front so nothing breaks
26
+ hash = `b${hash}`;
27
+ }
28
+ return BigInt(`0x${hash}`);
29
+ }
30
+ function iconBigintToHash(icon) {
31
+ // Convert the bigint back to a hash
32
+ const hash = icon.toString(16);
33
+ // Hashes starting with a are animated and with b are not so need to handle that
34
+ return hash.startsWith('a') ? `a_${hash.substring(1)}` : hash.substring(1);
35
+ }
36
+
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9oYXNoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBpY29uSGFzaFRvQmlnSW50KGhhc2g6IHN0cmluZyk6IGJpZ2ludCB7XG4gIC8vIFRoZSBpY29uIGlzIGFuaW1hdGVkIHNvIGl0IG5lZWRzIHNwZWNpYWwgaGFuZGxpbmdcbiAgaWYgKGhhc2guc3RhcnRzV2l0aCgnYV8nKSkge1xuICAgIC8vIENoYW5nZSB0aGUgYGFfYCB0byBqdXN0IGJlIGBhYFxuICAgIGhhc2ggPSBgYSR7aGFzaC5zdWJzdHJpbmcoMil9YFxuICB9IGVsc2Uge1xuICAgIC8vIFRoZSBpY29uIGlzIG5vdCBhbmltYXRlZCBidXQgaXQgY291bGQgYmUgdGhhdCBpdCBzdGFydHMgd2l0aCBhIDAgc28gd2UganVzdCBwdXQgYSBgYmAgaW4gZnJvbnQgc28gbm90aGluZyBicmVha3NcbiAgICBoYXNoID0gYGIke2hhc2h9YFxuICB9XG5cbiAgcmV0dXJuIEJpZ0ludChgMHgke2hhc2h9YClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGljb25CaWdpbnRUb0hhc2goaWNvbjogYmlnaW50KTogc3RyaW5nIHtcbiAgLy8gQ29udmVydCB0aGUgYmlnaW50IGJhY2sgdG8gYSBoYXNoXG4gIGNvbnN0IGhhc2ggPSBpY29uLnRvU3RyaW5nKDE2KVxuICAvLyBIYXNoZXMgc3RhcnRpbmcgd2l0aCBhIGFyZSBhbmltYXRlZCBhbmQgd2l0aCBiIGFyZSBub3Qgc28gbmVlZCB0byBoYW5kbGUgdGhhdFxuICByZXR1cm4gaGFzaC5zdGFydHNXaXRoKCdhJykgPyBgYV8ke2hhc2guc3Vic3RyaW5nKDEpfWAgOiBoYXNoLnN1YnN0cmluZygxKVxufVxuIl0sIm5hbWVzIjpbImljb25CaWdpbnRUb0hhc2giLCJpY29uSGFzaFRvQmlnSW50IiwiaGFzaCIsInN0YXJ0c1dpdGgiLCJzdWJzdHJpbmciLCJCaWdJbnQiLCJpY29uIiwidG9TdHJpbmciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0lBYWdCQSxnQkFBZ0I7ZUFBaEJBOztJQWJBQyxnQkFBZ0I7ZUFBaEJBOzs7QUFBVCxTQUFTQSxpQkFBaUJDLElBQVk7SUFDM0Msb0RBQW9EO0lBQ3BELElBQUlBLEtBQUtDLFVBQVUsQ0FBQyxPQUFPO1FBQ3pCLGlDQUFpQztRQUNqQ0QsT0FBTyxDQUFDLENBQUMsRUFBRUEsS0FBS0UsU0FBUyxDQUFDLElBQUk7SUFDaEMsT0FBTztRQUNMLG1IQUFtSDtRQUNuSEYsT0FBTyxDQUFDLENBQUMsRUFBRUEsTUFBTTtJQUNuQjtJQUVBLE9BQU9HLE9BQU8sQ0FBQyxFQUFFLEVBQUVILE1BQU07QUFDM0I7QUFFTyxTQUFTRixpQkFBaUJNLElBQVk7SUFDM0Msb0NBQW9DO0lBQ3BDLE1BQU1KLE9BQU9JLEtBQUtDLFFBQVEsQ0FBQztJQUMzQixnRkFBZ0Y7SUFDaEYsT0FBT0wsS0FBS0MsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUVELEtBQUtFLFNBQVMsQ0FBQyxJQUFJLEdBQUdGLEtBQUtFLFNBQVMsQ0FBQztBQUMxRSJ9