@discordeno/utils 19.0.0-next.e2d86ea → 19.0.0-next.e30e5a2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/README.md +6 -143
  2. package/dist/cjs/Collection.cjs +123 -0
  3. package/dist/cjs/base64.cjs +276 -0
  4. package/dist/cjs/bucket.cjs +96 -0
  5. package/dist/cjs/builders/embeds.cjs +292 -0
  6. package/dist/cjs/builders.cjs +27 -0
  7. package/dist/cjs/casing.cjs +75 -0
  8. package/dist/cjs/colors.cjs +456 -0
  9. package/dist/cjs/hash.cjs +37 -0
  10. package/dist/cjs/images.cjs +136 -0
  11. package/dist/cjs/index.cjs +36 -0
  12. package/dist/cjs/logger.cjs +157 -0
  13. package/dist/cjs/oauth2.cjs +26 -0
  14. package/dist/cjs/permissions.cjs +35 -0
  15. package/dist/cjs/reactions.cjs +21 -0
  16. package/dist/cjs/token.cjs +39 -0
  17. package/dist/cjs/typeguards.cjs +45 -0
  18. package/dist/cjs/urlToBase64.cjs +19 -0
  19. package/dist/cjs/urls.cjs +26 -0
  20. package/dist/cjs/utils.cjs +30 -0
  21. package/dist/esm/Collection.js +113 -0
  22. package/dist/esm/base64.js +262 -0
  23. package/dist/esm/bucket.js +81 -0
  24. package/dist/esm/builders/embeds.js +295 -0
  25. package/dist/esm/builders.js +5 -0
  26. package/dist/esm/casing.js +51 -0
  27. package/dist/esm/colors.js +467 -0
  28. package/dist/esm/hash.js +19 -0
  29. package/dist/esm/images.js +179 -0
  30. package/dist/esm/index.js +19 -0
  31. package/dist/esm/logger.js +130 -0
  32. package/dist/esm/oauth2.js +16 -0
  33. package/dist/esm/permissions.js +17 -0
  34. package/dist/esm/reactions.js +11 -0
  35. package/dist/esm/token.js +21 -0
  36. package/dist/esm/typeguards.js +18 -0
  37. package/dist/esm/urlToBase64.js +9 -0
  38. package/dist/esm/urls.js +8 -0
  39. package/dist/esm/utils.js +15 -0
  40. package/dist/{Collection.d.ts → types/Collection.d.ts} +2 -3
  41. package/dist/types/Collection.d.ts.map +1 -0
  42. package/dist/types/base64.d.ts.map +1 -0
  43. package/dist/{bucket.d.ts → types/bucket.d.ts} +9 -2
  44. package/dist/types/bucket.d.ts.map +1 -0
  45. package/dist/types/builders/embeds.d.ts +146 -0
  46. package/dist/types/builders/embeds.d.ts.map +1 -0
  47. package/dist/types/builders.d.ts +4 -0
  48. package/dist/types/builders.d.ts.map +1 -0
  49. package/dist/types/casing.d.ts.map +1 -0
  50. package/dist/types/colors.d.ts.map +1 -0
  51. package/dist/types/hash.d.ts.map +1 -0
  52. package/dist/types/images.d.ts +202 -0
  53. package/dist/types/images.d.ts.map +1 -0
  54. package/dist/{index.d.ts → types/index.d.ts} +4 -1
  55. package/dist/types/index.d.ts.map +1 -0
  56. package/dist/types/logger.d.ts.map +1 -0
  57. package/dist/types/oauth2.d.ts +69 -0
  58. package/dist/types/oauth2.d.ts.map +1 -0
  59. package/dist/types/permissions.d.ts.map +1 -0
  60. package/dist/types/reactions.d.ts.map +1 -0
  61. package/dist/{token.d.ts → types/token.d.ts} +1 -1
  62. package/dist/types/token.d.ts.map +1 -0
  63. package/dist/{typeguards.d.ts → types/typeguards.d.ts} +2 -1
  64. package/dist/types/typeguards.d.ts.map +1 -0
  65. package/dist/types/urlToBase64.d.ts.map +1 -0
  66. package/dist/types/urls.d.ts +4 -0
  67. package/dist/types/urls.d.ts.map +1 -0
  68. package/dist/types/utils.d.ts.map +1 -0
  69. package/package.json +27 -22
  70. package/dist/Collection.d.ts.map +0 -1
  71. package/dist/Collection.js +0 -113
  72. package/dist/Collection.js.map +0 -1
  73. package/dist/base64.d.ts.map +0 -1
  74. package/dist/base64.js +0 -262
  75. package/dist/base64.js.map +0 -1
  76. package/dist/bucket.d.ts.map +0 -1
  77. package/dist/bucket.js +0 -74
  78. package/dist/bucket.js.map +0 -1
  79. package/dist/casing.d.ts.map +0 -1
  80. package/dist/casing.js +0 -51
  81. package/dist/casing.js.map +0 -1
  82. package/dist/colors.d.ts.map +0 -1
  83. package/dist/colors.js +0 -467
  84. package/dist/colors.js.map +0 -1
  85. package/dist/hash.d.ts.map +0 -1
  86. package/dist/hash.js +0 -19
  87. package/dist/hash.js.map +0 -1
  88. package/dist/images.d.ts +0 -68
  89. package/dist/images.d.ts.map +0 -1
  90. package/dist/images.js +0 -66
  91. package/dist/images.js.map +0 -1
  92. package/dist/index.d.ts.map +0 -1
  93. package/dist/index.js +0 -16
  94. package/dist/index.js.map +0 -1
  95. package/dist/interactions.d.ts +0 -3
  96. package/dist/interactions.d.ts.map +0 -1
  97. package/dist/interactions.js +0 -41
  98. package/dist/interactions.js.map +0 -1
  99. package/dist/logger.d.ts.map +0 -1
  100. package/dist/logger.js +0 -130
  101. package/dist/logger.js.map +0 -1
  102. package/dist/permissions.d.ts.map +0 -1
  103. package/dist/permissions.js +0 -17
  104. package/dist/permissions.js.map +0 -1
  105. package/dist/reactions.d.ts.map +0 -1
  106. package/dist/reactions.js +0 -11
  107. package/dist/reactions.js.map +0 -1
  108. package/dist/token.d.ts.map +0 -1
  109. package/dist/token.js +0 -16
  110. package/dist/token.js.map +0 -1
  111. package/dist/typeguards.d.ts.map +0 -1
  112. package/dist/typeguards.js +0 -15
  113. package/dist/typeguards.js.map +0 -1
  114. package/dist/urlToBase64.d.ts.map +0 -1
  115. package/dist/urlToBase64.js +0 -9
  116. package/dist/urlToBase64.js.map +0 -1
  117. package/dist/utils.d.ts.map +0 -1
  118. package/dist/utils.js +0 -15
  119. package/dist/utils.js.map +0 -1
  120. /package/dist/{base64.d.ts → types/base64.d.ts} +0 -0
  121. /package/dist/{casing.d.ts → types/casing.d.ts} +0 -0
  122. /package/dist/{colors.d.ts → types/colors.d.ts} +0 -0
  123. /package/dist/{hash.d.ts → types/hash.d.ts} +0 -0
  124. /package/dist/{logger.d.ts → types/logger.d.ts} +0 -0
  125. /package/dist/{permissions.d.ts → types/permissions.d.ts} +0 -0
  126. /package/dist/{reactions.d.ts → types/reactions.d.ts} +0 -0
  127. /package/dist/{urlToBase64.d.ts → types/urlToBase64.d.ts} +0 -0
  128. /package/dist/{utils.d.ts → types/utils.d.ts} +0 -0
@@ -0,0 +1,456 @@
1
+ /* eslint-disable @typescript-eslint/explicit-function-return-type */ // 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb2xvcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LWZ1bmN0aW9uLXJldHVybi10eXBlICovXG5cbi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBBIG1vZHVsZSB0byBwcmludCBBTlNJIHRlcm1pbmFsIGNvbG9ycy4gSW5zcGlyZWQgYnkgY2hhbGssIGtsZXVyLCBhbmQgY29sb3JzXG4vLyBvbiBucG0uXG4vLyBodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9mbXQvY29sb3JzLnRzP3NvdXJjZVxuXG5leHBvcnQgaW50ZXJmYWNlIENvZGUge1xuICBvcGVuOiBzdHJpbmdcbiAgY2xvc2U6IHN0cmluZ1xuICByZWdleHA6IFJlZ0V4cFxufVxuXG4vKiogUkdCIDgtYml0cyBwZXIgY2hhbm5lbC4gRWFjaCBpbiByYW5nZSBgMC0+MjU1YCBvciBgMHgwMC0+MHhmZmAgKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmdiIHtcbiAgcjogbnVtYmVyXG4gIGc6IG51bWJlclxuICBiOiBudW1iZXJcbn1cblxubGV0IGVuYWJsZWQgPSB0cnVlXG5cbi8qKlxuICogU2V0IGNoYW5naW5nIHRleHQgY29sb3IgdG8gZW5hYmxlZCBvciBkaXNhYmxlZFxuICogQHBhcmFtIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRDb2xvckVuYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgZW5hYmxlZCA9IHZhbHVlXG59XG5cbi8qKiBHZXQgd2hldGhlciB0ZXh0IGNvbG9yIGNoYW5nZSBpcyBlbmFibGVkIG9yIGRpc2FibGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbG9yRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgcmV0dXJuIGVuYWJsZWRcbn1cblxuLyoqXG4gKiBCdWlsZHMgY29sb3IgY29kZVxuICogQHBhcmFtIG9wZW5cbiAqIEBwYXJhbSBjbG9zZVxuICovXG5mdW5jdGlvbiBjb2RlKG9wZW46IG51bWJlcltdLCBjbG9zZTogbnVtYmVyKTogQ29kZSB7XG4gIHJldHVybiB7XG4gICAgb3BlbjogYFxceDFiWyR7b3Blbi5qb2luKCc7Jyl9bWAsXG4gICAgY2xvc2U6IGBcXHgxYlske2Nsb3NlfW1gLFxuICAgIHJlZ2V4cDogbmV3IFJlZ0V4cChgXFxcXHgxYlxcXFxbJHtjbG9zZX1tYCwgJ2cnKSxcbiAgfVxufVxuXG4vKipcbiAqIEFwcGxpZXMgY29sb3IgYW5kIGJhY2tncm91bmQgYmFzZWQgb24gY29sb3IgY29kZSBhbmQgaXRzIGFzc29jaWF0ZWQgdGV4dFxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIGFwcGx5IGNvbG9yIHNldHRpbmdzIHRvXG4gKiBAcGFyYW0gY29kZSBjb2xvciBjb2RlIHRvIGFwcGx5XG4gKi9cbmZ1bmN0aW9uIHJ1bihzdHI6IHN0cmluZywgY29kZTogQ29kZSk6IHN0cmluZyB7XG4gIHJldHVybiBlbmFibGVkID8gYCR7Y29kZS5vcGVufSR7c3RyLnJlcGxhY2UoY29kZS5yZWdleHAsIGNvZGUub3Blbil9JHtjb2RlLmNsb3NlfWAgOiBzdHJcbn1cblxuLyoqXG4gKiBSZXNldCB0aGUgdGV4dCBtb2RpZmllZFxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIHJlc2V0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNldChzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFswXSwgMCkpXG59XG5cbi8qKlxuICogTWFrZSB0aGUgdGV4dCBib2xkLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgYm9sZFxuICovXG5leHBvcnQgZnVuY3Rpb24gYm9sZChzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFsxXSwgMjIpKVxufVxuXG4vKipcbiAqIFRoZSB0ZXh0IGVtaXRzIG9ubHkgYSBzbWFsbCBhbW91bnQgb2YgbGlnaHQuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gZGltXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaW0oc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbMl0sIDIyKSlcbn1cblxuLyoqXG4gKiBNYWtlIHRoZSB0ZXh0IGl0YWxpYy5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGl0YWxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXRhbGljKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzNdLCAyMykpXG59XG5cbi8qKlxuICogTWFrZSB0aGUgdGV4dCB1bmRlcmxpbmUuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gdW5kZXJsaW5lXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmRlcmxpbmUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbNF0sIDI0KSlcbn1cblxuLyoqXG4gKiBJbnZlcnQgYmFja2dyb3VuZCBjb2xvciBhbmQgdGV4dCBjb2xvci5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBpbnZlcnQgaXRzIGNvbG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzddLCAyNykpXG59XG5cbi8qKlxuICogTWFrZSB0aGUgdGV4dCBoaWRkZW4uXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gaGlkZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaGlkZGVuKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzhdLCAyOCkpXG59XG5cbi8qKlxuICogUHV0IGhvcml6b250YWwgbGluZSB0aHJvdWdoIHRoZSBjZW50ZXIgb2YgdGhlIHRleHQuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gc3RyaWtlIHRocm91Z2hcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmlrZXRocm91Z2goc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbOV0sIDI5KSlcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byBibGFjay5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGJsYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBibGFjayhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFszMF0sIDM5KSlcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byByZWQuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSByZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZChzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFszMV0sIDM5KSlcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byBncmVlbi5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGdyZWVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmVlbihzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFszMl0sIDM5KSlcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byB5ZWxsb3cuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSB5ZWxsb3dcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHllbGxvdyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFszM10sIDM5KSlcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byBibHVlLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgYmx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmx1ZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFszNF0sIDM5KSlcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byBtYWdlbnRhLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgbWFnZW50YVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFnZW50YShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFszNV0sIDM5KSlcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byBjeWFuLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgY3lhblxuICovXG5leHBvcnQgZnVuY3Rpb24gY3lhbihzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFszNl0sIDM5KSlcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byB3aGl0ZS5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIHdoaXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aGl0ZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFszN10sIDM5KSlcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byBncmF5LlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgZ3JheVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JheShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBicmlnaHRCbGFjayhzdHIpXG59XG5cbi8qKlxuICogU2V0IHRleHQgY29sb3IgdG8gYnJpZ2h0IGJsYWNrLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgYnJpZ2h0LWJsYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBicmlnaHRCbGFjayhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFs5MF0sIDM5KSlcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byBicmlnaHQgcmVkLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgYnJpZ2h0LXJlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gYnJpZ2h0UmVkKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzkxXSwgMzkpKVxufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIGJyaWdodCBncmVlbi5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGJyaWdodC1ncmVlblxuICovXG5leHBvcnQgZnVuY3Rpb24gYnJpZ2h0R3JlZW4oc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbOTJdLCAzOSkpXG59XG5cbi8qKlxuICogU2V0IHRleHQgY29sb3IgdG8gYnJpZ2h0IHllbGxvdy5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGJyaWdodC15ZWxsb3dcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJyaWdodFllbGxvdyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFs5M10sIDM5KSlcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byBicmlnaHQgYmx1ZS5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGJyaWdodC1ibHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBicmlnaHRCbHVlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzk0XSwgMzkpKVxufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIGJyaWdodCBtYWdlbnRhLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgYnJpZ2h0LW1hZ2VudGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJyaWdodE1hZ2VudGEoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbOTVdLCAzOSkpXG59XG5cbi8qKlxuICogU2V0IHRleHQgY29sb3IgdG8gYnJpZ2h0IGN5YW4uXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBicmlnaHQtY3lhblxuICovXG5leHBvcnQgZnVuY3Rpb24gYnJpZ2h0Q3lhbihzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFs5Nl0sIDM5KSlcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byBicmlnaHQgd2hpdGUuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBicmlnaHQtd2hpdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJyaWdodFdoaXRlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzk3XSwgMzkpKVxufVxuXG4vKipcbiAqIFNldCBiYWNrZ3JvdW5kIGNvbG9yIHRvIGJsYWNrLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgYmxhY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJnQmxhY2soc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbNDBdLCA0OSkpXG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdG8gcmVkLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgcmVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZ1JlZChzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFs0MV0sIDQ5KSlcbn1cblxuLyoqXG4gKiBTZXQgYmFja2dyb3VuZCBjb2xvciB0byBncmVlbi5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGl0cyBiYWNrZ3JvdW5kIGdyZWVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZ0dyZWVuKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzQyXSwgNDkpKVxufVxuXG4vKipcbiAqIFNldCBiYWNrZ3JvdW5kIGNvbG9yIHRvIHllbGxvdy5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGl0cyBiYWNrZ3JvdW5kIHllbGxvd1xuICovXG5leHBvcnQgZnVuY3Rpb24gYmdZZWxsb3coc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbNDNdLCA0OSkpXG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdG8gYmx1ZS5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGl0cyBiYWNrZ3JvdW5kIGJsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJnQmx1ZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFs0NF0sIDQ5KSlcbn1cblxuLyoqXG4gKiAgU2V0IGJhY2tncm91bmQgY29sb3IgdG8gbWFnZW50YS5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGl0cyBiYWNrZ3JvdW5kIG1hZ2VudGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJnTWFnZW50YShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFs0NV0sIDQ5KSlcbn1cblxuLyoqXG4gKiBTZXQgYmFja2dyb3VuZCBjb2xvciB0byBjeWFuLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgY3lhblxuICovXG5leHBvcnQgZnVuY3Rpb24gYmdDeWFuKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzQ2XSwgNDkpKVxufVxuXG4vKipcbiAqIFNldCBiYWNrZ3JvdW5kIGNvbG9yIHRvIHdoaXRlLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgd2hpdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJnV2hpdGUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbNDddLCA0OSkpXG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdG8gYnJpZ2h0IGJsYWNrLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgYnJpZ2h0LWJsYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZ0JyaWdodEJsYWNrKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzEwMF0sIDQ5KSlcbn1cblxuLyoqXG4gKiBTZXQgYmFja2dyb3VuZCBjb2xvciB0byBicmlnaHQgcmVkLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgYnJpZ2h0LXJlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gYmdCcmlnaHRSZWQoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbMTAxXSwgNDkpKVxufVxuXG4vKipcbiAqIFNldCBiYWNrZ3JvdW5kIGNvbG9yIHRvIGJyaWdodCBncmVlbi5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGl0cyBiYWNrZ3JvdW5kIGJyaWdodC1ncmVlblxuICovXG5leHBvcnQgZnVuY3Rpb24gYmdCcmlnaHRHcmVlbihzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFsxMDJdLCA0OSkpXG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdG8gYnJpZ2h0IHllbGxvdy5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGl0cyBiYWNrZ3JvdW5kIGJyaWdodC15ZWxsb3dcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJnQnJpZ2h0WWVsbG93KHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzEwM10sIDQ5KSlcbn1cblxuLyoqXG4gKiBTZXQgYmFja2dyb3VuZCBjb2xvciB0byBicmlnaHQgYmx1ZS5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGl0cyBiYWNrZ3JvdW5kIGJyaWdodC1ibHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZ0JyaWdodEJsdWUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbMTA0XSwgNDkpKVxufVxuXG4vKipcbiAqIFNldCBiYWNrZ3JvdW5kIGNvbG9yIHRvIGJyaWdodCBtYWdlbnRhLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgYnJpZ2h0LW1hZ2VudGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJnQnJpZ2h0TWFnZW50YShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFsxMDVdLCA0OSkpXG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdG8gYnJpZ2h0IGN5YW4uXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBpdHMgYmFja2dyb3VuZCBicmlnaHQtY3lhblxuICovXG5leHBvcnQgZnVuY3Rpb24gYmdCcmlnaHRDeWFuKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzEwNl0sIDQ5KSlcbn1cblxuLyoqXG4gKiBTZXQgYmFja2dyb3VuZCBjb2xvciB0byBicmlnaHQgd2hpdGUuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBpdHMgYmFja2dyb3VuZCBicmlnaHQtd2hpdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJnQnJpZ2h0V2hpdGUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbMTA3XSwgNDkpKVxufVxuXG4vKiBTcGVjaWFsIENvbG9yIFNlcXVlbmNlcyAqL1xuXG4vKipcbiAqIENsYW0gYW5kIHRydW5jYXRlIGNvbG9yIGNvZGVzXG4gKiBAcGFyYW0gblxuICogQHBhcmFtIG1heCBudW1iZXIgdG8gdHJ1bmNhdGUgdG9cbiAqIEBwYXJhbSBtaW4gbnVtYmVyIHRvIHRydW5jYXRlIGZyb21cbiAqL1xuZnVuY3Rpb24gY2xhbXBBbmRUcnVuY2F0ZShuOiBudW1iZXIsIG1heCA9IDI1NSwgbWluID0gMCk6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLnRydW5jKE1hdGgubWF4KE1hdGgubWluKG4sIG1heCksIG1pbikpXG59XG5cbi8qKlxuICogU2V0IHRleHQgY29sb3IgdXNpbmcgcGFsZXR0ZWQgOGJpdCBjb2xvcnMuXG4gKiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9BTlNJX2VzY2FwZV9jb2RlIzgtYml0XG4gKiBAcGFyYW0gc3RyIHRleHQgY29sb3IgdG8gYXBwbHkgcGFsZXR0ZWQgOGJpdCBjb2xvcnMgdG9cbiAqIEBwYXJhbSBjb2xvciBjb2RlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZ2I4KHN0cjogc3RyaW5nLCBjb2xvcjogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzM4LCA1LCBjbGFtcEFuZFRydW5jYXRlKGNvbG9yKV0sIDM5KSlcbn1cblxuLyoqXG4gKiBTZXQgYmFja2dyb3VuZCBjb2xvciB1c2luZyBwYWxldHRlZCA4Yml0IGNvbG9ycy5cbiAqIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FOU0lfZXNjYXBlX2NvZGUjOC1iaXRcbiAqIEBwYXJhbSBzdHIgdGV4dCBjb2xvciB0byBhcHBseSBwYWxldHRlZCA4Yml0IGJhY2tncm91bmQgY29sb3JzIHRvXG4gKiBAcGFyYW0gY29sb3IgY29kZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmdSZ2I4KHN0cjogc3RyaW5nLCBjb2xvcjogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzQ4LCA1LCBjbGFtcEFuZFRydW5jYXRlKGNvbG9yKV0sIDQ5KSlcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB1c2luZyAyNGJpdCByZ2IuXG4gKiBgY29sb3JgIGNhbiBiZSBhIG51bWJlciBpbiByYW5nZSBgMHgwMDAwMDBgIHRvIGAweGZmZmZmZmAgb3JcbiAqIGFuIGBSZ2JgLlxuICpcbiAqIFRvIHByb2R1Y2UgdGhlIGNvbG9yIG1hZ2VudGE6XG4gKlxuICogYGBgdHNcbiAqICAgICAgaW1wb3J0IHsgcmdiMjQgfSBmcm9tIFwiLi9jb2xvcnMudHNcIjtcbiAqICAgICAgcmdiMjQoXCJmb29cIiwgMHhmZjAwZmYpO1xuICogICAgICByZ2IyNChcImZvb1wiLCB7cjogMjU1LCBnOiAwLCBiOiAyNTV9KTtcbiAqIGBgYFxuICogQHBhcmFtIHN0ciB0ZXh0IGNvbG9yIHRvIGFwcGx5IDI0Yml0IHJnYiB0b1xuICogQHBhcmFtIGNvbG9yIGNvZGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJnYjI0KHN0cjogc3RyaW5nLCBjb2xvcjogbnVtYmVyIHwgUmdiKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gcnVuKHN0ciwgY29kZShbMzgsIDIsIChjb2xvciA+PiAxNikgJiAweGZmLCAoY29sb3IgPj4gOCkgJiAweGZmLCBjb2xvciAmIDB4ZmZdLCAzOSkpXG4gIH1cbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzM4LCAyLCBjbGFtcEFuZFRydW5jYXRlKGNvbG9yLnIpLCBjbGFtcEFuZFRydW5jYXRlKGNvbG9yLmcpLCBjbGFtcEFuZFRydW5jYXRlKGNvbG9yLmIpXSwgMzkpKVxufVxuXG4vKipcbiAqIFNldCBiYWNrZ3JvdW5kIGNvbG9yIHVzaW5nIDI0Yml0IHJnYi5cbiAqIGBjb2xvcmAgY2FuIGJlIGEgbnVtYmVyIGluIHJhbmdlIGAweDAwMDAwMGAgdG8gYDB4ZmZmZmZmYCBvclxuICogYW4gYFJnYmAuXG4gKlxuICogVG8gcHJvZHVjZSB0aGUgY29sb3IgbWFnZW50YTpcbiAqXG4gKiBgYGB0c1xuICogICAgICBpbXBvcnQgeyBiZ1JnYjI0IH0gZnJvbSBcIi4vY29sb3JzLnRzXCI7XG4gKiAgICAgIGJnUmdiMjQoXCJmb29cIiwgMHhmZjAwZmYpO1xuICogICAgICBiZ1JnYjI0KFwiZm9vXCIsIHtyOiAyNTUsIGc6IDAsIGI6IDI1NX0pO1xuICogYGBgXG4gKiBAcGFyYW0gc3RyIHRleHQgY29sb3IgdG8gYXBwbHkgMjRiaXQgcmdiIHRvXG4gKiBAcGFyYW0gY29sb3IgY29kZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmdSZ2IyNChzdHI6IHN0cmluZywgY29sb3I6IG51bWJlciB8IFJnYik6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgY29sb3IgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzQ4LCAyLCAoY29sb3IgPj4gMTYpICYgMHhmZiwgKGNvbG9yID4+IDgpICYgMHhmZiwgY29sb3IgJiAweGZmXSwgNDkpKVxuICB9XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFs0OCwgMiwgY2xhbXBBbmRUcnVuY2F0ZShjb2xvci5yKSwgY2xhbXBBbmRUcnVuY2F0ZShjb2xvci5nKSwgY2xhbXBBbmRUcnVuY2F0ZShjb2xvci5iKV0sIDQ5KSlcbn1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL2Fuc2ktcmVnZXgvYmxvYi8wMmZhODkzZDYxOWQzZGE4NTQxMWFjYzhmZDRlMmVlYTBlOTVhOWQ5L2luZGV4LmpzXG5jb25zdCBBTlNJX1BBVFRFUk4gPSBuZXcgUmVnRXhwKFxuICBbXG4gICAgJ1tcXFxcdTAwMUJcXFxcdTAwOUJdW1tcXFxcXSgpIzs/XSooPzooPzooPzooPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10rKSp8W2EtekEtWlxcXFxkXSsoPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10qKSopP1xcXFx1MDAwNyknLFxuICAgICcoPzooPzpcXFxcZHsxLDR9KD86O1xcXFxkezAsNH0pKik/W1xcXFxkQS1QUi1UWmNmLW5xLXV5PT48fl0pKScsXG4gIF0uam9pbignfCcpLFxuICAnZycsXG4pXG5cbi8qKlxuICogUmVtb3ZlIEFOU0kgZXNjYXBlIGNvZGVzIGZyb20gdGhlIHN0cmluZy5cbiAqIEBwYXJhbSBzdHJpbmcgdG8gcmVtb3ZlIEFOU0kgZXNjYXBlIGNvZGVzIGZyb21cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwQ29sb3Ioc3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoQU5TSV9QQVRURVJOLCAnJylcbn1cbiJdLCJuYW1lcyI6WyJiZ0JsYWNrIiwiYmdCbHVlIiwiYmdCcmlnaHRCbGFjayIsImJnQnJpZ2h0Qmx1ZSIsImJnQnJpZ2h0Q3lhbiIsImJnQnJpZ2h0R3JlZW4iLCJiZ0JyaWdodE1hZ2VudGEiLCJiZ0JyaWdodFJlZCIsImJnQnJpZ2h0V2hpdGUiLCJiZ0JyaWdodFllbGxvdyIsImJnQ3lhbiIsImJnR3JlZW4iLCJiZ01hZ2VudGEiLCJiZ1JlZCIsImJnUmdiMjQiLCJiZ1JnYjgiLCJiZ1doaXRlIiwiYmdZZWxsb3ciLCJibGFjayIsImJsdWUiLCJib2xkIiwiYnJpZ2h0QmxhY2siLCJicmlnaHRCbHVlIiwiYnJpZ2h0Q3lhbiIsImJyaWdodEdyZWVuIiwiYnJpZ2h0TWFnZW50YSIsImJyaWdodFJlZCIsImJyaWdodFdoaXRlIiwiYnJpZ2h0WWVsbG93IiwiY3lhbiIsImRpbSIsImdldENvbG9yRW5hYmxlZCIsImdyYXkiLCJncmVlbiIsImhpZGRlbiIsImludmVyc2UiLCJpdGFsaWMiLCJtYWdlbnRhIiwicmVkIiwicmVzZXQiLCJyZ2IyNCIsInJnYjgiLCJzZXRDb2xvckVuYWJsZWQiLCJzdHJpa2V0aHJvdWdoIiwic3RyaXBDb2xvciIsInVuZGVybGluZSIsIndoaXRlIiwieWVsbG93IiwiZW5hYmxlZCIsInZhbHVlIiwiY29kZSIsIm9wZW4iLCJjbG9zZSIsImpvaW4iLCJyZWdleHAiLCJSZWdFeHAiLCJydW4iLCJzdHIiLCJyZXBsYWNlIiwiY2xhbXBBbmRUcnVuY2F0ZSIsIm4iLCJtYXgiLCJtaW4iLCJNYXRoIiwidHJ1bmMiLCJjb2xvciIsInIiLCJnIiwiYiIsIkFOU0lfUEFUVEVSTiIsInN0cmluZyJdLCJtYXBwaW5ncyI6IkFBQUEsbUVBQW1FLEdBRW5FLDBFQUEwRTtBQUMxRSwrRUFBK0U7QUFDL0UsVUFBVTtBQUNWLHFEQUFxRDs7Ozs7Ozs7Ozs7O0lBZ1FyQ0EsT0FBTztlQUFQQTs7SUFnQ0FDLE1BQU07ZUFBTkE7O0lBZ0NBQyxhQUFhO2VBQWJBOztJQWdDQUMsWUFB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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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9oYXNoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBpY29uSGFzaFRvQmlnSW50KGhhc2g6IHN0cmluZyk6IGJpZ2ludCB7XG4gIC8vIFRoZSBpY29uIGlzIGFuaW1hdGVkIHNvIGl0IG5lZWRzIHNwZWNpYWwgaGFuZGxpbmdcbiAgaWYgKGhhc2guc3RhcnRzV2l0aCgnYV8nKSkge1xuICAgIC8vIENoYW5nZSB0aGUgYGFfYCB0byBqdXN0IGJlIGBhYFxuICAgIGhhc2ggPSBgYSR7aGFzaC5zdWJzdHJpbmcoMil9YFxuICB9IGVsc2Uge1xuICAgIC8vIFRoZSBpY29uIGlzIG5vdCBhbmltYXRlZCBidXQgaXQgY291bGQgYmUgdGhhdCBpdCBzdGFydHMgd2l0aCBhIDAgc28gd2UganVzdCBwdXQgYSBgYmAgaW4gZnJvbnQgc28gbm90aGluZyBicmVha3NcbiAgICBoYXNoID0gYGIke2hhc2h9YFxuICB9XG5cbiAgcmV0dXJuIEJpZ0ludChgMHgke2hhc2h9YClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGljb25CaWdpbnRUb0hhc2goaWNvbjogYmlnaW50KTogc3RyaW5nIHtcbiAgLy8gQ29udmVydCB0aGUgYmlnaW50IGJhY2sgdG8gYSBoYXNoXG4gIGNvbnN0IGhhc2ggPSBpY29uLnRvU3RyaW5nKDE2KVxuICAvLyBIYXNoZXMgc3RhcnRpbmcgd2l0aCBhIGFyZSBhbmltYXRlZCBhbmQgd2l0aCBiIGFyZSBub3Qgc28gbmVlZCB0byBoYW5kbGUgdGhhdFxuICByZXR1cm4gaGFzaC5zdGFydHNXaXRoKCdhJykgPyBgYV8ke2hhc2guc3Vic3RyaW5nKDEpfWAgOiBoYXNoLnN1YnN0cmluZygxKVxufVxuIl0sIm5hbWVzIjpbImljb25CaWdpbnRUb0hhc2giLCJpY29uSGFzaFRvQmlnSW50IiwiaGFzaCIsInN0YXJ0c1dpdGgiLCJzdWJzdHJpbmciLCJCaWdJbnQiLCJpY29uIiwidG9TdHJpbmciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0lBYWdCQSxnQkFBZ0I7ZUFBaEJBOztJQWJBQyxnQkFBZ0I7ZUFBaEJBOzs7QUFBVCxTQUFTQSxpQkFBaUJDLElBQVk7SUFDM0Msb0RBQW9EO0lBQ3BELElBQUlBLEtBQUtDLFVBQVUsQ0FBQyxPQUFPO1FBQ3pCLGlDQUFpQztRQUNqQ0QsT0FBTyxDQUFDLENBQUMsRUFBRUEsS0FBS0UsU0FBUyxDQUFDLEdBQUcsQ0FBQztJQUNoQyxPQUFPO1FBQ0wsbUhBQW1IO1FBQ25IRixPQUFPLENBQUMsQ0FBQyxFQUFFQSxLQUFLLENBQUM7SUFDbkI7SUFFQSxPQUFPRyxPQUFPLENBQUMsRUFBRSxFQUFFSCxLQUFLLENBQUM7QUFDM0I7QUFFTyxTQUFTRixpQkFBaUJNLElBQVk7SUFDM0Msb0NBQW9DO0lBQ3BDLE1BQU1KLE9BQU9JLEtBQUtDLFFBQVEsQ0FBQztJQUMzQixnRkFBZ0Y7SUFDaEYsT0FBT0wsS0FBS0MsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUVELEtBQUtFLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBR0YsS0FBS0UsU0FBUyxDQUFDO0FBQzFFIn0=