socket-function 1.2.2 → 1.2.4

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 (51) hide show
  1. package/SocketFunction.d.ts +1 -1
  2. package/SocketFunctionTypes.d.ts +1 -1
  3. package/hot/HotReloadController.d.ts +3 -3
  4. package/index.d.ts +25 -10
  5. package/package.json +1 -1
  6. package/require/CSSShim.d.ts +1 -1
  7. package/require/RequireController.d.ts +2 -2
  8. package/require/compileFlags.d.ts +1 -1
  9. package/require/require.d.ts +1 -1
  10. package/src/callManager.d.ts +1 -1
  11. package/test.ts +5 -11
  12. package/time/trueTimeShim.d.ts +16 -1
  13. package/time/trueTimeShim.ts +43 -7
  14. package/dist/SetProcessVariables.ts.cache +0 -9
  15. package/dist/SocketFunction.ts.cache +0 -467
  16. package/hot/dist/HotReloadController.ts.cache +0 -252
  17. package/require/dist/RequireController.ts.cache +0 -386
  18. package/require/dist/compileFlags.ts.cache +0 -41
  19. package/require/dist/extMapper.ts.cache +0 -368
  20. package/require/dist/require.ts.cache +0 -676
  21. package/src/JSONLACKS/dist/JSONLACKS.ts.cache +0 -469
  22. package/src/dist/CallFactory.ts.cache +0 -930
  23. package/src/dist/Zip.ts.cache +0 -156
  24. package/src/dist/batching.ts.cache +0 -377
  25. package/src/dist/bits.ts.cache +0 -121
  26. package/src/dist/buffers.ts.cache +0 -76
  27. package/src/dist/caching.ts.cache +0 -302
  28. package/src/dist/callHTTPHandler.ts.cache +0 -264
  29. package/src/dist/callManager.ts.cache +0 -159
  30. package/src/dist/certStore.ts.cache +0 -59
  31. package/src/dist/createSingleton.ts.cache +0 -62
  32. package/src/dist/fixLargeNetworkCalls.ts.cache +0 -17
  33. package/src/dist/forwardPort.ts.cache +0 -222
  34. package/src/dist/https.ts.cache +0 -141
  35. package/src/dist/misc.ts.cache +0 -499
  36. package/src/dist/nodeCache.ts.cache +0 -136
  37. package/src/dist/nodeProxy.ts.cache +0 -57
  38. package/src/dist/protocolNegotiation.ts.cache +0 -101
  39. package/src/dist/tlsParsing.ts.cache +0 -85
  40. package/src/dist/types.ts.cache +0 -9
  41. package/src/dist/webSocketServer.ts.cache +0 -365
  42. package/src/dist/websocketFactory.ts.cache +0 -53
  43. package/src/formatting/dist/colors.ts.cache +0 -98
  44. package/src/formatting/dist/format.ts.cache +0 -396
  45. package/src/formatting/dist/logColors.ts.cache +0 -28
  46. package/src/lz4/dist/LZ4.ts.cache +0 -53
  47. package/src/profiling/dist/getOwnTime.ts.cache +0 -100
  48. package/src/profiling/dist/measure.ts.cache +0 -338
  49. package/src/profiling/dist/stats.ts.cache +0 -202
  50. package/src/profiling/dist/statsFormat.ts.cache +0 -45
  51. package/time/dist/trueTimeShim.ts.cache +0 -707
@@ -1,396 +0,0 @@
1
- "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
3
- //exports.formatPercent = exports.formatDate = exports.formatVeryNiceDateTime = exports.formatNiceDateTime = exports.formatFileTimestampLocal = exports.formatDateTimeDetailed = exports.formatDateTime = exports.formatBinaryNumber = exports.formatNumber = exports.formatMaxDecimals = exports.getTargetDecimals = exports.formatTime = void 0;
4
- function formatTime(milliseconds, maxAbsoluteValue) {
5
- if (typeof milliseconds !== "number")
6
- return "";
7
- if (milliseconds === 0)
8
- return "0ms";
9
- if (milliseconds < 0) {
10
- return "-" + formatTime(-milliseconds, maxAbsoluteValue);
11
- }
12
- let scale = milliseconds;
13
- if (maxAbsoluteValue) {
14
- scale = Math.max(scale, maxAbsoluteValue);
15
- }
16
- if (scale < 1 / 1000) {
17
- return formatMaxDecimals(milliseconds * 1000 * 1000, 3) + "ns";
18
- }
19
- else if (scale < 1) {
20
- return formatMaxDecimals(milliseconds * 1000, 3) + "us";
21
- }
22
- else if (scale < 1000) {
23
- return formatMaxDecimals(milliseconds, 3) + "ms";
24
- // Use seconds until we have 10 minutes, as decimal minutes are confusing
25
- }
26
- else if (scale < 1000 * 60 * 10) {
27
- return formatMaxDecimals(milliseconds / 1000, 3) + "s";
28
- }
29
- else if (scale < 1000 * 60 * 60) {
30
- return formatMaxDecimals(milliseconds / 1000 / 60, 3) + "m";
31
- }
32
- else if (scale < 1000 * 60 * 60 * 24) {
33
- return formatMaxDecimals(milliseconds / 1000 / 60 / 60, 3) + "h";
34
- // } else if (milliseconds < 1000 * 60 * 60 * 24 * 10) {
35
- // let remaining = Math.round(milliseconds / 1000);
36
- // let seconds = remaining % 60;
37
- // remaining -= seconds;
38
- // remaining /= 60;
39
- // let minutes = remaining % 60;
40
- // remaining -= minutes;
41
- // remaining /= 60;
42
- // let hours = remaining;
43
- // remaining -= hours;
44
- // remaining /= 24;
45
- // let days = remaining;
46
- // let time = `${hours.toString().padStart(2, "0")}:${minutes.toString().padStart(2, "0")}:${seconds.toString().padStart(2, "0")}`;
47
- // if (days > 0) {
48
- // if (days === 1) {
49
- // time = `1 day ${time}`;
50
- // } else {
51
- // time = `${days} days ${time}`;
52
- // }
53
- // }
54
- // return time;
55
- }
56
- else {
57
- let days = Math.round(milliseconds / 1000 / 60 / 60 / 24);
58
- return `${days} days`;
59
- }
60
- }
61
- exports.formatTime = formatTime;
62
- function getTargetDecimals(maxAbsoluteValue, targetDigits) {
63
- let intDigits = Math.floor(Math.log10(maxAbsoluteValue) + 1);
64
- if (intDigits < 0)
65
- intDigits = 1;
66
- let decimalDigits = targetDigits - intDigits;
67
- // Happens if the number is so close to having too many digits that Math.log10 rounds it over.
68
- if (decimalDigits < 0) {
69
- decimalDigits = 0;
70
- }
71
- return decimalDigits;
72
- }
73
- exports.getTargetDecimals = getTargetDecimals;
74
- /** Adds decimal digits to reach digits. If the number is simply too large, it won't remove
75
- * digits, there will instead just be no decimal point.
76
- */
77
- function formatMaxDecimals(num, targetDigits, maxAbsoluteValue, exactDecimals) {
78
- var _a;
79
- if (typeof num !== "number")
80
- return "0";
81
- // toFixed has a max of 100 digits
82
- if (targetDigits > 100)
83
- targetDigits = 100;
84
- if (!Number.isFinite(num))
85
- return num.toFixed(targetDigits);
86
- if (num < 0)
87
- return formatMaxDecimals(-num, targetDigits, maxAbsoluteValue, exactDecimals);
88
- // TIMING:
89
- // ~50ns toString
90
- // ~400ns toLocaleString
91
- // ~500ns toLocaleString("en-us")
92
- // ~20us toLocaleString("en-us", { maximumFractionDigits: 2 })
93
- // So, we are avoiding using toLocaleString, for now.
94
- maxAbsoluteValue = maxAbsoluteValue !== null && maxAbsoluteValue !== void 0 ? maxAbsoluteValue : Math.abs(num);
95
- let targetDecimals = exactDecimals !== null && exactDecimals !== void 0 ? exactDecimals : getTargetDecimals(maxAbsoluteValue, targetDigits);
96
- let text = num.toFixed(targetDecimals);
97
- let parts = text.split(".");
98
- let integer = parts[0];
99
- let decimals = (_a = parts[1]) !== null && _a !== void 0 ? _a : "";
100
- if (exactDecimals) {
101
- while (decimals.length < exactDecimals) {
102
- decimals += "0";
103
- }
104
- }
105
- else {
106
- while (decimals[decimals.length - 1] === "0") {
107
- decimals = decimals.slice(0, -1);
108
- }
109
- }
110
- let output = "";
111
- // NOTE: ONLY add comma groups if it is > 4 digits. As 4234K is easily read, and commas
112
- // only really matter for numbers such as 4234523K, which is hard to read.
113
- if (integer.length > 4) {
114
- for (let i = integer.length; i > 0; i -= 3) {
115
- let start = i - 3;
116
- if (start < 0)
117
- start = 0;
118
- let str = integer.slice(start, i);
119
- if (output) {
120
- output = "," + output;
121
- }
122
- output = str + output;
123
- }
124
- }
125
- else {
126
- output = integer;
127
- }
128
- if (decimals) {
129
- output += "." + decimals;
130
- }
131
- return output;
132
- }
133
- exports.formatMaxDecimals = formatMaxDecimals;
134
- /** Actually formats any number, including decimals, by using K, M and B suffixes to get smaller values
135
- * TODO: Support uK, uM and uB suffixes for very small numbers?
136
- * <= 6 characters (<= 5 if positive)
137
- */
138
- function formatNumber(count, maxAbsoluteValue, noDecimal, specialCurrency) {
139
- if (typeof count !== "number")
140
- return "0";
141
- if (count < 0) {
142
- return "-" + formatNumber(-count, maxAbsoluteValue, noDecimal, specialCurrency);
143
- }
144
- maxAbsoluteValue = maxAbsoluteValue !== null && maxAbsoluteValue !== void 0 ? maxAbsoluteValue : Math.abs(count);
145
- let maxDecimals = 3;
146
- // NOTE: We don't switch units as soon as we possible can, because...
147
- // 3.594 vs 3.584 is harder to quickly distinguish compared to 3594 and 3584,
148
- // the decimal simply makes it harder to read, and larger.
149
- // NOTE: This number should prevent us from ever using 5 digits, so that we never need commas
150
- // For example, if the factor is 10 then, 9999.5 is kept with a divisor of 1, and then rounds up to
151
- // "10,000". So we want any value which rounds up at 5 digits to be put in the next group (and having
152
- // extra values put in the next group is fine, as we won't show the decimal value anyways, so it only
153
- // means 9999 wraps around to 10K a bit faster).
154
- const extraFactor = 9.99949999;
155
- let divisor = 1;
156
- let suffix = "";
157
- let currencyDecimalsNeeded = false;
158
- if (maxAbsoluteValue < 0.00000001) {
159
- maxDecimals = 12;
160
- }
161
- else if (maxAbsoluteValue < 0.0000001) {
162
- maxDecimals = 11;
163
- }
164
- else if (maxAbsoluteValue < 0.000001) {
165
- maxDecimals = 10;
166
- }
167
- else if (maxAbsoluteValue < 0.00001) {
168
- maxDecimals = 9;
169
- }
170
- else if (maxAbsoluteValue < 0.0001) {
171
- maxDecimals = 8;
172
- }
173
- else if (maxAbsoluteValue < 0.001) {
174
- maxDecimals = 7;
175
- }
176
- else if (maxAbsoluteValue < 0.01) {
177
- maxDecimals = 6;
178
- }
179
- else if (maxAbsoluteValue < 0.1) {
180
- maxDecimals = 5;
181
- }
182
- else if (maxAbsoluteValue < 1000 * extraFactor) {
183
- if (specialCurrency) {
184
- currencyDecimalsNeeded = true;
185
- }
186
- }
187
- else if (maxAbsoluteValue < 1000 * 1000 * extraFactor) {
188
- suffix = "K";
189
- divisor = 1000;
190
- }
191
- else if (maxAbsoluteValue < 1000 * 1000 * 1000 * extraFactor) {
192
- suffix = "M";
193
- divisor = 1000 * 1000;
194
- }
195
- else if (maxAbsoluteValue < 1000 * 1000 * 1000 * 1000 * extraFactor) {
196
- suffix = "B";
197
- divisor = 1000 * 1000 * 1000;
198
- }
199
- else if (maxAbsoluteValue < 1000 * 1000 * 1000 * 1000 * 1000 * extraFactor) {
200
- suffix = "T";
201
- divisor = 1000 * 1000 * 1000 * 1000;
202
- }
203
- else {
204
- suffix = "Q";
205
- divisor = 1000 * 1000 * 1000 * 1000 * 1000;
206
- }
207
- count /= divisor;
208
- maxAbsoluteValue /= divisor;
209
- if (noDecimal) {
210
- maxDecimals = 0;
211
- }
212
- return formatMaxDecimals(count, maxDecimals, maxAbsoluteValue, currencyDecimalsNeeded ? 2 : undefined) + suffix;
213
- }
214
- exports.formatNumber = formatNumber;
215
- function formatBinaryNumber(count, maxAbsoluteValue, noDecimal, specialCurrency) {
216
- if (typeof count !== "number")
217
- return "0";
218
- if (count < 0) {
219
- return "-" + formatNumber(-count, maxAbsoluteValue, noDecimal, specialCurrency);
220
- }
221
- maxAbsoluteValue = maxAbsoluteValue !== null && maxAbsoluteValue !== void 0 ? maxAbsoluteValue : Math.abs(count);
222
- // NOTE: We don't switch units as soon as we possible can, because...
223
- // 3.594 vs 3.584 is harder to quickly distinguish compared to 3594 and 3584,
224
- // the decimal simply makes it harder to read, and larger.
225
- // NOTE: This number should prevent us from ever using 5 digits, so that we never need commas
226
- // For example, if the factor is 10 then, 9999.5 is kept with a divisor of 1, and then rounds up to
227
- // "10,000". So we want any value which rounds up at 5 digits to be put in the next group (and having
228
- // extra values put in the next group is fine, as we won't show the decimal value anyways, so it only
229
- // means 9999 wraps around to 10K a bit faster).
230
- const extraFactor = 9.99949999;
231
- let divisor = 1;
232
- let suffix = "";
233
- let currencyDecimalsNeeded = false;
234
- if (maxAbsoluteValue < 1024 * extraFactor) {
235
- if (specialCurrency) {
236
- currencyDecimalsNeeded = true;
237
- }
238
- }
239
- else if (maxAbsoluteValue < 1024 * 1024 * extraFactor) {
240
- suffix = "K";
241
- divisor = 1024;
242
- }
243
- else if (maxAbsoluteValue < 1024 * 1024 * 1024 * extraFactor) {
244
- suffix = "M";
245
- divisor = 1024 * 1024;
246
- }
247
- else {
248
- suffix = "G";
249
- divisor = 1024 * 1024 * 1024;
250
- }
251
- count /= divisor;
252
- maxAbsoluteValue /= divisor;
253
- let maxDecimals = noDecimal ? 0 : 3;
254
- return formatMaxDecimals(count, maxDecimals, maxAbsoluteValue, currencyDecimalsNeeded ? 2 : undefined) + suffix;
255
- }
256
- exports.formatBinaryNumber = formatBinaryNumber;
257
- /** YYYY/MM/DD HH:MM:SS PM/AM */
258
- function formatDateTime(time) {
259
- function p(s) {
260
- return s.toString().padStart(2, "0");
261
- }
262
- let date = new Date(time);
263
- let hours = date.getHours();
264
- let minutes = date.getMinutes();
265
- let seconds = date.getSeconds();
266
- let ampm = hours >= 12 ? "PM" : "AM";
267
- hours = hours % 12;
268
- hours = hours ? hours : 12; // the hour '0' should be '12'
269
- let strTime = p(hours) + ":" + p(minutes) + ":" + p(seconds) + " " + ampm;
270
- return date.getFullYear() + "/" + p(date.getMonth() + 1) + "/" + p(date.getDate()) + " " + strTime;
271
- }
272
- exports.formatDateTime = formatDateTime;
273
- function formatDateTimeDetailed(time) {
274
- function p(s) {
275
- return s.toString().padStart(2, "0");
276
- }
277
- let date = new Date(time);
278
- let hours = date.getHours();
279
- let minutes = date.getMinutes();
280
- let seconds = date.getSeconds();
281
- let milliseconds = date.getMilliseconds();
282
- let millisecondsString = milliseconds.toString().padStart(3, "0");
283
- let timeString = time.toString();
284
- let decimalIndex = timeString.indexOf(".");
285
- if (decimalIndex !== -1) {
286
- let fractionalPart = timeString.substring(decimalIndex + 1);
287
- millisecondsString += fractionalPart;
288
- }
289
- let ampm = hours >= 12 ? "PM" : "AM";
290
- hours = hours % 12;
291
- hours = hours ? hours : 12; // the hour '0' should be '12'
292
- let strTime = p(hours) + ":" + p(minutes) + ":" + p(seconds) + "." + millisecondsString + " " + ampm;
293
- return date.getFullYear() + "/" + p(date.getMonth() + 1) + "/" + p(date.getDate()) + " " + strTime;
294
- }
295
- exports.formatDateTimeDetailed = formatDateTimeDetailed;
296
- // Lookup table for common timezone abbreviations by UTC offset (in minutes)
297
- const timezoneAbbreviations = {
298
- // UTC and GMT
299
- "0": "UTC",
300
- // US/Canada timezones
301
- "300": "EST", // UTC-5 (Eastern Standard Time)
302
- "240": "EDT", // UTC-4 (Eastern Daylight Time)
303
- "360": "CST", // UTC-6 (Central Standard Time)
304
- "420": "MST", // UTC-7 (Mountain Standard Time)
305
- "480": "PST", // UTC-8 (Pacific Standard Time)
306
- // European timezones
307
- "-60": "CET", // UTC+1 (Central European Time)
308
- "-120": "CEST", // UTC+2 (Central European Summer Time)
309
- // Other common timezones
310
- "-480": "CST", // UTC+8 (China Standard Time)
311
- "-540": "JST", // UTC+9 (Japan Standard Time)
312
- "-330": "IST", // UTC+5:30 (India Standard Time)
313
- "-570": "ACST", // UTC+9:30 (Australian Central Standard Time)
314
- "-600": "AEST", // UTC+10 (Australian Eastern Standard Time)
315
- };
316
- // YYYY-MM-DD_HH-MM-SS.mmm TIMEZONE
317
- function formatFileTimestampLocal(time) {
318
- function p(s) {
319
- return s.toString().padStart(2, "0");
320
- }
321
- let date = new Date(time);
322
- let year = date.getFullYear();
323
- let month = p(date.getMonth() + 1);
324
- let day = p(date.getDate());
325
- let hours = p(date.getHours());
326
- let minutes = p(date.getMinutes());
327
- let seconds = p(date.getSeconds());
328
- let milliseconds = date.getMilliseconds();
329
- let millisecondsString = milliseconds.toString().padStart(3, "0");
330
- let timeString = time.toString();
331
- let decimalIndex = timeString.indexOf(".");
332
- if (decimalIndex !== -1) {
333
- let fractionalPart = timeString.substring(decimalIndex + 1);
334
- millisecondsString += fractionalPart;
335
- }
336
- // Get timezone offset in minutes (negative of getTimezoneOffset because it returns opposite sign)
337
- let timezoneOffsetMinutes = date.getTimezoneOffset();
338
- // Look up the abbreviation or fallback to numeric format
339
- let timezoneString = timezoneAbbreviations[timezoneOffsetMinutes.toString()];
340
- if (!timezoneString) {
341
- // Fallback: format as ±HHMM
342
- let offsetSign = timezoneOffsetMinutes >= 0 ? "+" : "-";
343
- let offsetHours = p(Math.floor(Math.abs(timezoneOffsetMinutes) / 60));
344
- let offsetMins = p(Math.abs(timezoneOffsetMinutes) % 60);
345
- timezoneString = `${offsetSign}${offsetHours}${offsetMins}`;
346
- }
347
- return `${year}-${month}-${day}_${hours}-${minutes}-${seconds}.${millisecondsString}_${timezoneString}`;
348
- }
349
- exports.formatFileTimestampLocal = formatFileTimestampLocal;
350
- /** 2024 January 1, Monday, 12:53:02pm */
351
- function formatNiceDateTime(time) {
352
- function p(s) {
353
- return s.toString().padStart(2, "0");
354
- }
355
- let date = new Date(time);
356
- let hours = date.getHours();
357
- let minutes = date.getMinutes();
358
- let seconds = date.getSeconds();
359
- let ampm = hours >= 12 ? "pm" : "am";
360
- hours = hours % 12;
361
- hours = hours ? hours : 12; // the hour '0' should be '12'
362
- let strTime = p(hours) + ":" + p(minutes) + ":" + p(seconds) + ampm;
363
- let days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
364
- return date.getFullYear() + " " + date.toLocaleString("default", { month: "long" }) + " " + date.getDate() + ", " + days[date.getDay()] + ", " + strTime;
365
- }
366
- exports.formatNiceDateTime = formatNiceDateTime;
367
- /** 2024 January 1, Monday, 12:53:02pm (4 months ago) */
368
- function formatVeryNiceDateTime(time) {
369
- if (!time) {
370
- return "";
371
- }
372
- if (typeof time !== "number") {
373
- return String(time);
374
- }
375
- return `${formatNiceDateTime(time)} (${formatTime(Date.now() - time)})`;
376
- }
377
- exports.formatVeryNiceDateTime = formatVeryNiceDateTime;
378
- /** YYYY/MM/DD */
379
- function formatDate(time) {
380
- function p(s) {
381
- return s.toString().padStart(2, "0");
382
- }
383
- let date = new Date(time);
384
- return date.getFullYear() + "/" + p(date.getMonth() + 1) + "/" + p(date.getDate());
385
- }
386
- exports.formatDate = formatDate;
387
- /** <= 6 characters (<= 5 if positive) */
388
- function formatPercent(value) {
389
- if (Number.isNaN(value))
390
- return "0%";
391
- // 1 decimal point, so we have 5 characters (just like formatNumber returns 5 characters)
392
- return Math.round(value * 1000) / 10 + "%";
393
- }
394
- exports.formatPercent = formatPercent;
395
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZm9ybWF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLFNBQWdCLFVBQVUsQ0FBQyxZQUFnQyxFQUFFLGdCQUF5QjtJQUNsRixJQUFJLE9BQU8sWUFBWSxLQUFLLFFBQVE7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNoRCxJQUFJLFlBQVksS0FBSyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDckMsSUFBSSxZQUFZLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbkIsT0FBTyxHQUFHLEdBQUcsVUFBVSxDQUFDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUNELElBQUksS0FBSyxHQUFHLFlBQVksQ0FBQztJQUN6QixJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDbkIsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUNELElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQztRQUNuQixPQUFPLGlCQUFpQixDQUFDLFlBQVksR0FBRyxJQUFJLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNuRSxDQUFDO1NBQU0sSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbkIsT0FBTyxpQkFBaUIsQ0FBQyxZQUFZLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUM1RCxDQUFDO1NBQU0sSUFBSSxLQUFLLEdBQUcsSUFBSSxFQUFFLENBQUM7UUFDdEIsT0FBTyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ2pELHlFQUF5RTtJQUM3RSxDQUFDO1NBQU0sSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUNo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Q0FBQztBQUMvQyxDQUFDO0FBSkQsc0NBSUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZm9ybWF0VGltZShtaWxsaXNlY29uZHM6IG51bWJlciB8IHVuZGVmaW5lZCwgbWF4QWJzb2x1dGVWYWx1ZT86IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiBtaWxsaXNlY29uZHMgIT09IFwibnVtYmVyXCIpIHJldHVybiBcIlwiO1xuICAgIGlmIChtaWxsaXNlY29uZHMgPT09IDApIHJldHVybiBcIjBtc1wiO1xuICAgIGlmIChtaWxsaXNlY29uZHMgPCAwKSB7XG4gICAgICAgIHJldHVybiBcIi1cIiArIGZvcm1hdFRpbWUoLW1pbGxpc2Vjb25kcywgbWF4QWJzb2x1dGVWYWx1ZSk7XG4gICAgfVxuICAgIGxldCBzY2FsZSA9IG1pbGxpc2Vjb25kcztcbiAgICBpZiAobWF4QWJzb2x1dGVWYWx1ZSkge1xuICAgICAgICBzY2FsZSA9IE1hdGgubWF4KHNjYWxlLCBtYXhBYnNvbHV0ZVZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHNjYWxlIDwgMSAvIDEwMDApIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdE1heERlY2ltYWxzKG1pbGxpc2Vjb25kcyAqIDEwMDAgKiAxMDAwLCAzKSArIFwibnNcIjtcbiAgICB9IGVsc2UgaWYgKHNjYWxlIDwgMSkge1xuICAgICAgICByZXR1cm4gZm9ybWF0TWF4RGVjaW1hbHMobWlsbGlzZWNvbmRzICogMTAwMCwgMykgKyBcInVzXCI7XG4gICAgfSBlbHNlIGlmIChzY2FsZSA8IDEwMDApIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdE1heERlY2ltYWxzKG1pbGxpc2Vjb25kcywgMykgKyBcIm1zXCI7XG4gICAgICAgIC8vIFVzZSBzZWNvbmRzIHVudGlsIHdlIGhhdmUgMTAgbWludXRlcywgYXMgZGVjaW1hbCBtaW51dGVzIGFyZSBjb25mdXNpbmdcbiAgICB9IGVsc2UgaWYgKHNjYWxlIDwgMTAwMCAqIDYwICogMTApIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdE1heERlY2ltYWxzKG1pbGxpc2Vjb25kcyAvIDEwMDAsIDMpICsgXCJzXCI7XG4gICAgfSBlbHNlIGlmIChzY2FsZSA8IDEwMDAgKiA2MCAqIDYwKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXRNYXhEZWNpbWFscyhtaWxsaXNlY29uZHMgLyAxMDAwIC8gNjAsIDMpICsgXCJtXCI7XG4gICAgfSBlbHNlIGlmIChzY2FsZSA8IDEwMDAgKiA2MCAqIDYwICogMjQpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdE1heERlY2ltYWxzKG1pbGxpc2Vjb25kcyAvIDEwMDAgLyA2MCAvIDYwLCAzKSArIFwiaFwiO1xuICAgICAgICAvLyB9IGVsc2UgaWYgKG1pbGxpc2Vjb25kcyA8IDEwMDAgKiA2MCAqIDYwICogMjQgKiAxMCkge1xuICAgICAgICAvLyAgICAgbGV0IHJlbWFpbmluZyA9IE1hdGgucm91bmQobWlsbGlzZWNvbmRzIC8gMTAwMCk7XG4gICAgICAgIC8vICAgICBsZXQgc2Vjb25kcyA9IHJlbWFpbmluZyAlIDYwO1xuICAgICAgICAvLyAgICAgcmVtYWluaW5nIC09IHNlY29uZHM7XG4gICAgICAgIC8vICAgICByZW1haW5pbmcgLz0gNjA7XG4gICAgICAgIC8vICAgICBsZXQgbWludXRlcyA9IHJlbWFpbmluZyAlIDYwO1xuICAgICAgICAvLyAgICAgcmVtYWluaW5nIC09IG1pbnV0ZXM7XG4gICAgICAgIC8vICAgICByZW1haW5pbmcgLz0gNjA7XG4gICAgICAgIC8vICAgICBsZXQgaG91cnMgPSByZW1haW5pbmc7XG4gICAgICAgIC8vICAgICByZW1haW5pbmcgLT0gaG91cnM7XG4gICAgICAgIC8vICAgICByZW1haW5pbmcgLz0gMjQ7XG4gICAgICAgIC8vICAgICBsZXQgZGF5cyA9IHJlbWFpbmluZztcbiAgICAgICAgLy8gICAgIGxldCB0aW1lID0gYCR7aG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIil9OiR7bWludXRlcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKX06JHtzZWNvbmRzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpfWA7XG4gICAgICAgIC8vICAgICBpZiAoZGF5cyA+IDApIHtcbiAgICAgICAgLy8gICAgICAgICBpZiAoZGF5cyA9PT0gMSkge1xuICAgICAgICAvLyAgICAgICAgICAgICB0aW1lID0gYDEgZGF5ICR7dGltZX1gO1xuICAgICAgICAvLyAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vICAgICAgICAgICAgIHRpbWUgPSBgJHtkYXlzfSBkYXlzICR7dGltZX1gO1xuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gICAgIHJldHVybiB0aW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBkYXlzID0gTWF0aC5yb3VuZChtaWxsaXNlY29uZHMgLyAxMDAwIC8gNjAgLyA2MCAvIDI0KTtcbiAgICAgICAgcmV0dXJuIGAke2RheXN9IGRheXNgO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhcmdldERlY2ltYWxzKG1heEFic29sdXRlVmFsdWU6IG51bWJlciwgdGFyZ2V0RGlnaXRzOiBudW1iZXIpIHtcbiAgICBsZXQgaW50RGlnaXRzID0gTWF0aC5mbG9vcihNYXRoLmxvZzEwKG1heEFic29sdXRlVmFsdWUpICsgMSk7XG4gICAgaWYgKGludERpZ2l0cyA8IDApIGludERpZ2l0cyA9IDE7XG4gICAgbGV0IGRlY2ltYWxEaWdpdHMgPSB0YXJnZXREaWdpdHMgLSBpbnREaWdpdHM7XG4gICAgLy8gSGFwcGVucyBpZiB0aGUgbnVtYmVyIGlzIHNvIGNsb3NlIHRvIGhhdmluZyB0b28gbWFueSBkaWdpdHMgdGhhdCBNYXRoLmxvZzEwIHJvdW5kcyBpdCBvdmVyLlxuICAgIGlmIChkZWNpbWFsRGlnaXRzIDwgMCkge1xuICAgICAgICBkZWNpbWFsRGlnaXRzID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGRlY2ltYWxEaWdpdHM7XG59XG5cbi8qKiBBZGRzIGRlY2ltYWwgZGlnaXRzIHRvIHJlYWNoIGRpZ2l0cy4gSWYgdGhlIG51bWJlciBpcyBzaW1wbHkgdG9vIGxhcmdlLCBpdCB3b24ndCByZW1vdmVcbiAqICAgICAgZGlnaXRzLCB0aGVyZSB3aWxsIGluc3RlYWQganVzdCBiZSBubyBkZWNpbWFsIHBvaW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0TWF4RGVjaW1hbHMobnVtOiBudW1iZXIsIHRhcmdldERpZ2l0czogbnVtYmVyLCBtYXhBYnNvbHV0ZVZhbHVlPzogbnVtYmVyLCBleGFjdERlY2ltYWxzPzogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIG51bSAhPT0gXCJudW1iZXJcIikgcmV0dXJuIFwiMFwiO1xuICAgIC8vIHRvRml4ZWQgaGFzIGEgbWF4IG9mIDEwMCBkaWdpdHNcbiAgICBpZiAodGFyZ2V0RGlnaXRzID4gMTAwKSB0YXJnZXREaWdpdHMgPSAxMDA7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobnVtKSkgcmV0dXJuIG51bS50b0ZpeGVkKHRhcmdldERpZ2l0cyk7XG5cbiAgICBpZiAobnVtIDwgMCkgcmV0dXJuIGZvcm1hdE1heERlY2ltYWxzKC1udW0sIHRhcmdldERpZ2l0cywgbWF4QWJzb2x1dGVWYWx1ZSwgZXhhY3REZWNpbWFscyk7XG5cbiAgICAvLyBUSU1JTkc6XG4gICAgLy8gIH41MG5zICAgdG9TdHJpbmdcbiAgICAvLyAgfjQwMG5zICB0b0xvY2FsZVN0cmluZ1xuICAgIC8vICB+NTAwbnMgIHRvTG9jYWxlU3RyaW5nKFwiZW4tdXNcIilcbiAgICAvLyAgfjIwdXMgICB0b0xvY2FsZVN0cmluZyhcImVuLXVzXCIsIHsgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiAyIH0pXG4gICAgLy8gU28sIHdlIGFyZSBhdm9pZGluZyB1c2luZyB0b0xvY2FsZVN0cmluZywgZm9yIG5vdy5cblxuICAgIG1heEFic29sdXRlVmFsdWUgPSBtYXhBYnNvbHV0ZVZhbHVlID8/IE1hdGguYWJzKG51bSk7XG5cbiAgICBsZXQgdGFyZ2V0RGVjaW1hbHMgPSBleGFjdERlY2ltYWxzID8/IGdldFRhcmdldERlY2ltYWxzKG1heEFic29sdXRlVmFsdWUsIHRhcmdldERpZ2l0cyk7XG4gICAgbGV0IHRleHQgPSBudW0udG9GaXhlZCh0YXJnZXREZWNpbWFscyk7XG4gICAgbGV0IHBhcnRzID0gdGV4dC5zcGxpdChcIi5cIik7XG4gICAgbGV0IGludGVnZXIgPSBwYXJ0c1swXTtcbiAgICBsZXQgZGVjaW1hbHMgPSBwYXJ0c1sxXSA/PyBcIlwiO1xuXG4gICAgaWYgKGV4YWN0RGVjaW1hbHMpIHtcbiAgICAgICAgd2hpbGUgKGRlY2ltYWxzLmxlbmd0aCA8IGV4YWN0RGVjaW1hbHMpIHtcbiAgICAgICAgICAgIGRlY2ltYWxzICs9IFwiMFwiO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgd2hpbGUgKGRlY2ltYWxzW2RlY2ltYWxzLmxlbmd0aCAtIDFdID09PSBcIjBcIikge1xuICAgICAgICAgICAgZGVjaW1hbHMgPSBkZWNpbWFscy5zbGljZSgwLCAtMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgb3V0cHV0ID0gXCJcIjtcblxuICAgIC8vIE5PVEU6IE9OTFkgYWRkIGNvbW1hIGdyb3VwcyBpZiBpdCBpcyA+IDQgZGlnaXRzLiBBcyA0MjM0SyBpcyBlYXNpbHkgcmVhZCwgYW5kIGNvbW1hc1xuICAgIC8vICBvbmx5IHJlYWxseSBtYXR0ZXIgZm9yIG51bWJlcnMgc3VjaCBhcyA0MjM0NTIzSywgd2hpY2ggaXMgaGFyZCB0byByZWFkLlxuICAgIGlmIChpbnRlZ2VyLmxlbmd0aCA+IDQpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IGludGVnZXIubGVuZ3RoOyBpID4gMDsgaSAtPSAzKSB7XG4gICAgICAgICAgICBsZXQgc3RhcnQgPSBpIC0gMztcbiAgICAgICAgICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMDtcbiAgICAgICAgICAgIGxldCBzdHIgPSBpbnRlZ2VyLnNsaWNlKHN0YXJ0LCBpKTtcbiAgICAgICAgICAgIGlmIChvdXRwdXQpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBcIixcIiArIG91dHB1dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dHB1dCA9IHN0ciArIG91dHB1dDtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIG91dHB1dCA9IGludGVnZXI7XG4gICAgfVxuXG4gICAgaWYgKGRlY2ltYWxzKSB7XG4gICAgICAgIG91dHB1dCArPSBcIi5cIiArIGRlY2ltYWxzO1xuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQ7XG59XG5cbi8qKiBBY3R1YWxseSBmb3JtYXRzIGFueSBudW1iZXIsIGluY2x1ZGluZyBkZWNpbWFscywgYnkgdXNpbmcgSywgTSBhbmQgQiBzdWZmaXhlcyB0byBnZXQgc21hbGxlciB2YWx1ZXNcbiAqICAgICAgVE9ETzogU3VwcG9ydCB1SywgdU0gYW5kIHVCIHN1ZmZpeGVzIGZvciB2ZXJ5IHNtYWxsIG51bWJlcnM/XG4gKiAgICAgIDw9IDYgY2hhcmFjdGVycyAoPD0gNSBpZiBwb3NpdGl2ZSlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdE51bWJlcihjb3VudDogbnVtYmVyIHwgdW5kZWZpbmVkLCBtYXhBYnNvbHV0ZVZhbHVlPzogbnVtYmVyLCBub0RlY2ltYWw/OiBib29sZWFuLCBzcGVjaWFsQ3VycmVuY3k/OiBib29sZWFuKTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIGNvdW50ICE9PSBcIm51bWJlclwiKSByZXR1cm4gXCIwXCI7XG4gICAgaWYgKGNvdW50IDwgMCkge1xuICAgICAgICByZXR1cm4gXCItXCIgKyBmb3JtYXROdW1iZXIoLWNvdW50LCBtYXhBYnNvbHV0ZVZhbHVlLCBub0RlY2ltYWwsIHNwZWNpYWxDdXJyZW5jeSk7XG4gICAgfVxuXG4gICAgbWF4QWJzb2x1dGVWYWx1ZSA9IG1heEFic29sdXRlVmFsdWUgPz8gTWF0aC5hYnMoY291bnQpO1xuXG4gICAgbGV0IG1heERlY2ltYWxzID0gMztcblxuICAgIC8vIE5PVEU6IFdlIGRvbid0IHN3aXRjaCB1bml0cyBhcyBzb29uIGFzIHdlIHBvc3NpYmxlIGNhbiwgYmVjYXVzZS4uLlxuICAgIC8vICAzLjU5NCB2cyAzLjU4NCBpcyBoYXJkZXIgdG8gcXVpY2tseSBkaXN0aW5ndWlzaCBjb21wYXJlZCB0byAzNTk0IGFuZCAzNTg0LFxuICAgIC8vICB0aGUgZGVjaW1hbCBzaW1wbHkgbWFrZXMgaXQgaGFyZGVyIHRvIHJlYWQsIGFuZCBsYXJnZXIuXG4gICAgLy8gTk9URTogVGhpcyBudW1iZXIgc2hvdWxkIHByZXZlbnQgdXMgZnJvbSBldmVyIHVzaW5nIDUgZGlnaXRzLCBzbyB0aGF0IHdlIG5ldmVyIG5lZWQgY29tbWFzXG4gICAgLy8gIEZvciBleGFtcGxlLCBpZiB0aGUgZmFjdG9yIGlzIDEwIHRoZW4sIDk5OTkuNSBpcyBrZXB0IHdpdGggYSBkaXZpc29yIG9mIDEsIGFuZCB0aGVuIHJvdW5kcyB1cCB0b1xuICAgIC8vICBcIjEwLDAwMFwiLiBTbyB3ZSB3YW50IGFueSB2YWx1ZSB3aGljaCByb3VuZHMgdXAgYXQgNSBkaWdpdHMgdG8gYmUgcHV0IGluIHRoZSBuZXh0IGdyb3VwIChhbmQgaGF2aW5nXG4gICAgLy8gIGV4dHJhIHZhbHVlcyBwdXQgaW4gdGhlIG5leHQgZ3JvdXAgaXMgZmluZSwgYXMgd2Ugd29uJ3Qgc2hvdyB0aGUgZGVjaW1hbCB2YWx1ZSBhbnl3YXlzLCBzbyBpdCBvbmx5XG4gICAgLy8gIG1lYW5zIDk5OTkgd3JhcHMgYXJvdW5kIHRvIDEwSyBhIGJpdCBmYXN0ZXIpLlxuICAgIGNvbnN0IGV4dHJhRmFjdG9yID0gOS45OTk0OTk5OTtcbiAgICBsZXQgZGl2aXNvciA9IDE7XG4gICAgbGV0IHN1ZmZpeCA9IFwiXCI7XG4gICAgbGV0IGN1cnJlbmN5RGVjaW1hbHNOZWVkZWQgPSBmYWxzZTtcbiAgICBpZiAobWF4QWJzb2x1dGVWYWx1ZSA8IDAuMDAwMDAwMDEpIHtcbiAgICAgICAgbWF4RGVjaW1hbHMgPSAxMjtcbiAgICB9IGVsc2UgaWYgKG1heEFic29sdXRlVmFsdWUgPCAwLjAwMDAwMDEpIHtcbiAgICAgICAgbWF4RGVjaW1hbHMgPSAxMTtcbiAgICB9IGVsc2UgaWYgKG1heEFic29sdXRlVmFsdWUgPCAwLjAwMDAwMSkge1xuICAgICAgICBtYXhEZWNpbWFscyA9IDEwO1xuICAgIH0gZWxzZSBpZiAobWF4QWJzb2x1dGVWYWx1ZSA8IDAuMDAwMDEpIHtcbiAgICAgICAgbWF4RGVjaW1hbHMgPSA5O1xuICAgIH0gZWxzZSBpZiAobWF4QWJzb2x1dGVWYWx1ZSA8IDAuMDAwMSkge1xuICAgICAgICBtYXhEZWNpbWFscyA9IDg7XG4gICAgfSBlbHNlIGlmIChtYXhBYnNvbHV0ZVZhbHVlIDwgMC4wMDEpIHtcbiAgICAgICAgbWF4RGVjaW1hbHMgPSA3O1xuICAgIH0gZWxzZSBpZiAobWF4QWJzb2x1dGVWYWx1ZSA8IDAuMDEpIHtcbiAgICAgICAgbWF4RGVjaW1hbHMgPSA2O1xuICAgIH0gZWxzZSBpZiAobWF4QWJzb2x1dGVWYWx1ZSA8IDAuMSkge1xuICAgICAgICBtYXhEZWNpbWFscyA9IDU7XG4gICAgfSBlbHNlIGlmIChtYXhBYnNvbHV0ZVZhbHVlIDwgMTAwMCAqIGV4dHJhRmFjdG9yKSB7XG4gICAgICAgIGlmIChzcGVjaWFsQ3VycmVuY3kpIHtcbiAgICAgICAgICAgIGN1cnJlbmN5RGVjaW1hbHNOZWVkZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChtYXhBYnNvbHV0ZVZhbHVlIDwgMTAwMCAqIDEwMDAgKiBleHRyYUZhY3Rvcikge1xuICAgICAgICBzdWZmaXggPSBcIktcIjtcbiAgICAgICAgZGl2aXNvciA9IDEwMDA7XG4gICAgfSBlbHNlIGlmIChtYXhBYnNvbHV0ZVZhbHVlIDwgMTAwMCAqIDEwMDAgKiAxMDAwICogZXh0cmFGYWN0b3IpIHtcbiAgICAgICAgc3VmZml4ID0gXCJNXCI7XG4gICAgICAgIGRpdmlzb3IgPSAxMDAwICogMTAwMDtcbiAgICB9IGVsc2UgaWYgKG1heEFic29sdXRlVmFsdWUgPCAxMDAwICogMTAwMCAqIDEwMDAgKiAxMDAwICogZXh0cmFGYWN0b3IpIHtcbiAgICAgICAgc3VmZml4ID0gXCJCXCI7XG4gICAgICAgIGRpdmlzb3IgPSAxMDAwICogMTAwMCAqIDEwMDA7XG4gICAgfSBlbHNlIGlmIChtYXhBYnNvbHV0ZVZhbHVlIDwgMTAwMCAqIDEwMDAgKiAxMDAwICogMTAwMCAqIDEwMDAgKiBleHRyYUZhY3Rvcikge1xuICAgICAgICBzdWZmaXggPSBcIlRcIjtcbiAgICAgICAgZGl2aXNvciA9IDEwMDAgKiAxMDAwICogMTAwMCAqIDEwMDA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc3VmZml4ID0gXCJRXCI7XG4gICAgICAgIGRpdmlzb3IgPSAxMDAwICogMTAwMCAqIDEwMDAgKiAxMDAwICogMTAwMDtcbiAgICB9XG4gICAgY291bnQgLz0gZGl2aXNvcjtcbiAgICBtYXhBYnNvbHV0ZVZhbHVlIC89IGRpdmlzb3I7XG4gICAgaWYgKG5vRGVjaW1hbCkge1xuICAgICAgICBtYXhEZWNpbWFscyA9IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1hdE1heERlY2ltYWxzKGNvdW50LCBtYXhEZWNpbWFscywgbWF4QWJzb2x1dGVWYWx1ZSwgY3VycmVuY3lEZWNpbWFsc05lZWRlZCA/IDIgOiB1bmRlZmluZWQpICsgc3VmZml4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0QmluYXJ5TnVtYmVyKGNvdW50OiBudW1iZXIgfCB1bmRlZmluZWQsIG1heEFic29sdXRlVmFsdWU/OiBudW1iZXIsIG5vRGVjaW1hbD86IGJvb2xlYW4sIHNwZWNpYWxDdXJyZW5jeT86IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgY291bnQgIT09IFwibnVtYmVyXCIpIHJldHVybiBcIjBcIjtcbiAgICBpZiAoY291bnQgPCAwKSB7XG4gICAgICAgIHJldHVybiBcIi1cIiArIGZvcm1hdE51bWJlcigtY291bnQsIG1heEFic29sdXRlVmFsdWUsIG5vRGVjaW1hbCwgc3BlY2lhbEN1cnJlbmN5KTtcbiAgICB9XG5cbiAgICBtYXhBYnNvbHV0ZVZhbHVlID0gbWF4QWJzb2x1dGVWYWx1ZSA/PyBNYXRoLmFicyhjb3VudCk7XG5cbiAgICAvLyBOT1RFOiBXZSBkb24ndCBzd2l0Y2ggdW5pdHMgYXMgc29vbiBhcyB3ZSBwb3NzaWJsZSBjYW4sIGJlY2F1c2UuLi5cbiAgICAvLyAgMy41OTQgdnMgMy41ODQgaXMgaGFyZGVyIHRvIHF1aWNrbHkgZGlzdGluZ3Vpc2ggY29tcGFyZWQgdG8gMzU5NCBhbmQgMzU4NCxcbiAgICAvLyAgdGhlIGRlY2ltYWwgc2ltcGx5IG1ha2VzIGl0IGhhcmRlciB0byByZWFkLCBhbmQgbGFyZ2VyLlxuICAgIC8vIE5PVEU6IFRoaXMgbnVtYmVyIHNob3VsZCBwcmV2ZW50IHVzIGZyb20gZXZlciB1c2luZyA1IGRpZ2l0cywgc28gdGhhdCB3ZSBuZXZlciBuZWVkIGNvbW1hc1xuICAgIC8vICBGb3IgZXhhbXBsZSwgaWYgdGhlIGZhY3RvciBpcyAxMCB0aGVuLCA5OTk5LjUgaXMga2VwdCB3aXRoIGEgZGl2aXNvciBvZiAxLCBhbmQgdGhlbiByb3VuZHMgdXAgdG9cbiAgICAvLyAgXCIxMCwwMDBcIi4gU28gd2Ugd2FudCBhbnkgdmFsdWUgd2hpY2ggcm91bmRzIHVwIGF0IDUgZGlnaXRzIHRvIGJlIHB1dCBpbiB0aGUgbmV4dCBncm91cCAoYW5kIGhhdmluZ1xuICAgIC8vICBleHRyYSB2YWx1ZXMgcHV0IGluIHRoZSBuZXh0IGdyb3VwIGlzIGZpbmUsIGFzIHdlIHdvbid0IHNob3cgdGhlIGRlY2ltYWwgdmFsdWUgYW55d2F5cywgc28gaXQgb25seVxuICAgIC8vICBtZWFucyA5OTk5IHdyYXBzIGFyb3VuZCB0byAxMEsgYSBiaXQgZmFzdGVyKS5cbiAgICBjb25zdCBleHRyYUZhY3RvciA9IDkuOTk5NDk5OTk7XG4gICAgbGV0IGRpdmlzb3IgPSAxO1xuICAgIGxldCBzdWZmaXggPSBcIlwiO1xuICAgIGxldCBjdXJyZW5jeURlY2ltYWxzTmVlZGVkID0gZmFsc2U7XG4gICAgaWYgKG1heEFic29sdXRlVmFsdWUgPCAxMDI0ICogZXh0cmFGYWN0b3IpIHtcbiAgICAgICAgaWYgKHNwZWNpYWxDdXJyZW5jeSkge1xuICAgICAgICAgICAgY3VycmVuY3lEZWNpbWFsc05lZWRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG1heEFic29sdXRlVmFsdWUgPCAxMDI0ICogMTAyNCAqIGV4dHJhRmFjdG9yKSB7XG4gICAgICAgIHN1ZmZpeCA9IFwiS1wiO1xuICAgICAgICBkaXZpc29yID0gMTAyNDtcbiAgICB9IGVsc2UgaWYgKG1heEFic29sdXRlVmFsdWUgPCAxMDI0ICogMTAyNCAqIDEwMjQgKiBleHRyYUZhY3Rvcikge1xuICAgICAgICBzdWZmaXggPSBcIk1cIjtcbiAgICAgICAgZGl2aXNvciA9IDEwMjQgKiAxMDI0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHN1ZmZpeCA9IFwiR1wiO1xuICAgICAgICBkaXZpc29yID0gMTAyNCAqIDEwMjQgKiAxMDI0O1xuICAgIH1cbiAgICBjb3VudCAvPSBkaXZpc29yO1xuICAgIG1heEFic29sdXRlVmFsdWUgLz0gZGl2aXNvcjtcblxuICAgIGxldCBtYXhEZWNpbWFscyA9IG5vRGVjaW1hbCA/IDAgOiAzO1xuXG4gICAgcmV0dXJuIGZvcm1hdE1heERlY2ltYWxzKGNvdW50LCBtYXhEZWNpbWFscywgbWF4QWJzb2x1dGVWYWx1ZSwgY3VycmVuY3lEZWNpbWFsc05lZWRlZCA/IDIgOiB1bmRlZmluZWQpICsgc3VmZml4O1xufVxuXG4vKiogWVlZWS9NTS9ERCBISDpNTTpTUyBQTS9BTSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdERhdGVUaW1lKHRpbWU6IG51bWJlcikge1xuICAgIGZ1bmN0aW9uIHAoczogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpO1xuICAgIH1cbiAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKHRpbWUpO1xuICAgIGxldCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKTtcbiAgICBsZXQgbWludXRlcyA9IGRhdGUuZ2V0TWludXRlcygpO1xuICAgIGxldCBzZWNvbmRzID0gZGF0ZS5nZXRTZWNvbmRzKCk7XG4gICAgbGV0IGFtcG0gPSBob3VycyA+PSAxMiA/IFwiUE1cIiA6IFwiQU1cIjtcbiAgICBob3VycyA9IGhvdXJzICUgMTI7XG4gICAgaG91cnMgPSBob3VycyA/IGhvdXJzIDogMTI7IC8vIHRoZSBob3VyICcwJyBzaG91bGQgYmUgJzEyJ1xuICAgIGxldCBzdHJUaW1lID0gcChob3VycykgKyBcIjpcIiArIHAobWludXRlcykgKyBcIjpcIiArIHAoc2Vjb25kcykgKyBcIiBcIiArIGFtcG07XG4gICAgcmV0dXJuIGRhdGUuZ2V0RnVsbFllYXIoKSArIFwiL1wiICsgcChkYXRlLmdldE1vbnRoKCkgKyAxKSArIFwiL1wiICsgcChkYXRlLmdldERhdGUoKSkgKyBcIiBcIiArIHN0clRpbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXREYXRlVGltZURldGFpbGVkKHRpbWU6IG51bWJlcikge1xuICAgIGZ1bmN0aW9uIHAoczogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpO1xuICAgIH1cbiAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKHRpbWUpO1xuICAgIGxldCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKTtcbiAgICBsZXQgbWludXRlcyA9IGRhdGUuZ2V0TWludXRlcygpO1xuICAgIGxldCBzZWNvbmRzID0gZGF0ZS5nZXRTZWNvbmRzKCk7XG4gICAgbGV0IG1pbGxpc2Vjb25kcyA9IGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCk7XG4gICAgbGV0IG1pbGxpc2Vjb25kc1N0cmluZyA9IG1pbGxpc2Vjb25kcy50b1N0cmluZygpLnBhZFN0YXJ0KDMsIFwiMFwiKTtcblxuICAgIGxldCB0aW1lU3RyaW5nID0gdGltZS50b1N0cmluZygpO1xuICAgIGxldCBkZWNpbWFsSW5kZXggPSB0aW1lU3RyaW5nLmluZGV4T2YoXCIuXCIpO1xuICAgIGlmIChkZWNpbWFsSW5kZXggIT09IC0xKSB7XG4gICAgICAgIGxldCBmcmFjdGlvbmFsUGFydCA9IHRpbWVTdHJpbmcuc3Vic3RyaW5nKGRlY2ltYWxJbmRleCArIDEpO1xuICAgICAgICBtaWxsaXNlY29uZHNTdHJpbmcgKz0gZnJhY3Rpb25hbFBhcnQ7XG4gICAgfVxuXG4gICAgbGV0IGFtcG0gPSBob3VycyA+PSAxMiA/IFwiUE1cIiA6IFwiQU1cIjtcbiAgICBob3VycyA9IGhvdXJzICUgMTI7XG4gICAgaG91cnMgPSBob3VycyA/IGhvdXJzIDogMTI7IC8vIHRoZSBob3VyICcwJyBzaG91bGQgYmUgJzEyJ1xuICAgIGxldCBzdHJUaW1lID0gcChob3VycykgKyBcIjpcIiArIHAobWludXRlcykgKyBcIjpcIiArIHAoc2Vjb25kcykgKyBcIi5cIiArIG1pbGxpc2Vjb25kc1N0cmluZyArIFwiIFwiICsgYW1wbTtcbiAgICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpICsgXCIvXCIgKyBwKGRhdGUuZ2V0TW9udGgoKSArIDEpICsgXCIvXCIgKyBwKGRhdGUuZ2V0RGF0ZSgpKSArIFwiIFwiICsgc3RyVGltZTtcbn1cblxuXG4vLyBMb29rdXAgdGFibGUgZm9yIGNvbW1vbiB0aW1lem9uZSBhYmJyZXZpYXRpb25zIGJ5IFVUQyBvZmZzZXQgKGluIG1pbnV0ZXMpXG5jb25zdCB0aW1lem9uZUFiYnJldmlhdGlvbnM6IHsgW29mZnNldE1pbnV0ZXM6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgIC8vIFVUQyBhbmQgR01UXG4gICAgXCIwXCI6IFwiVVRDXCIsXG5cbiAgICAvLyBVUy9DYW5hZGEgdGltZXpvbmVzXG4gICAgXCIzMDBcIjogXCJFU1RcIiwgICAgIC8vIFVUQy01IChFYXN0ZXJuIFN0YW5kYXJkIFRpbWUpXG4gICAgXCIyNDBcIjogXCJFRFRcIiwgICAgIC8vIFVUQy00IChFYXN0ZXJuIERheWxpZ2h0IFRpbWUpXG4gICAgXCIzNjBcIjogXCJDU1RcIiwgICAgIC8vIFVUQy02IChDZW50cmFsIFN0YW5kYXJkIFRpbWUpIFxuICAgIFwiNDIwXCI6IFwiTVNUXCIsICAgICAvLyBVVEMtNyAoTW91bnRhaW4gU3RhbmRhcmQgVGltZSlcbiAgICBcIjQ4MFwiOiBcIlBTVFwiLCAgICAgLy8gVVRDLTggKFBhY2lmaWMgU3RhbmRhcmQgVGltZSlcblxuICAgIC8vIEV1cm9wZWFuIHRpbWV6b25lc1xuICAgIFwiLTYwXCI6IFwiQ0VUXCIsICAgICAvLyBVVEMrMSAoQ2VudHJhbCBFdXJvcGVhbiBUaW1lKVxuICAgIFwiLTEyMFwiOiBcIkNFU1RcIiwgICAvLyBVVEMrMiAoQ2VudHJhbCBFdXJvcGVhbiBTdW1tZXIgVGltZSlcblxuICAgIC8vIE90aGVyIGNvbW1vbiB0aW1lem9uZXNcbiAgICBcIi00ODBcIjogXCJDU1RcIiwgICAgLy8gVVRDKzggKENoaW5hIFN0YW5kYXJkIFRpbWUpXG4gICAgXCItNTQwXCI6IFwiSlNUXCIsICAgIC8vIFVUQys5IChKYXBhbiBTdGFuZGFyZCBUaW1lKVxuICAgIFwiLTMzMFwiOiBcIklTVFwiLCAgICAvLyBVVEMrNTozMCAoSW5kaWEgU3RhbmRhcmQgVGltZSlcbiAgICBcIi01NzBcIjogXCJBQ1NUXCIsICAgLy8gVVRDKzk6MzAgKEF1c3RyYWxpYW4gQ2VudHJhbCBTdGFuZGFyZCBUaW1lKVxuICAgIFwiLTYwMFwiOiBcIkFFU1RcIiwgICAvLyBVVEMrMTAgKEF1c3RyYWxpYW4gRWFzdGVybiBTdGFuZGFyZCBUaW1lKVxufTtcblxuXG4vLyBZWVlZLU1NLUREX0hILU1NLVNTLm1tbSBUSU1FWk9ORVxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEZpbGVUaW1lc3RhbXBMb2NhbCh0aW1lOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGZ1bmN0aW9uIHAoczogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpO1xuICAgIH1cblxuICAgIGxldCBkYXRlID0gbmV3IERhdGUodGltZSk7XG4gICAgbGV0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgbGV0IG1vbnRoID0gcChkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICBsZXQgZGF5ID0gcChkYXRlLmdldERhdGUoKSk7XG4gICAgbGV0IGhvdXJzID0gcChkYXRlLmdldEhvdXJzKCkpO1xuICAgIGxldCBtaW51dGVzID0gcChkYXRlLmdldE1pbnV0ZXMoKSk7XG4gICAgbGV0IHNlY29uZHMgPSBwKGRhdGUuZ2V0U2Vjb25kcygpKTtcbiAgICBsZXQgbWlsbGlzZWNvbmRzID0gZGF0ZS5nZXRNaWxsaXNlY29uZHMoKTtcbiAgICBsZXQgbWlsbGlzZWNvbmRzU3RyaW5nID0gbWlsbGlzZWNvbmRzLnRvU3RyaW5nKCkucGFkU3RhcnQoMywgXCIwXCIpO1xuXG4gICAgbGV0IHRpbWVTdHJpbmcgPSB0aW1lLnRvU3RyaW5nKCk7XG4gICAgbGV0IGRlY2ltYWxJbmRleCA9IHRpbWVTdHJpbmcuaW5kZXhPZihcIi5cIik7XG4gICAgaWYgKGRlY2ltYWxJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgbGV0IGZyYWN0aW9uYWxQYXJ0ID0gdGltZVN0cmluZy5zdWJzdHJpbmcoZGVjaW1hbEluZGV4ICsgMSk7XG4gICAgICAgIG1pbGxpc2Vjb25kc1N0cmluZyArPSBmcmFjdGlvbmFsUGFydDtcbiAgICB9XG4gICAgLy8gR2V0IHRpbWV6b25lIG9mZnNldCBpbiBtaW51dGVzIChuZWdhdGl2ZSBvZiBnZXRUaW1lem9uZU9mZnNldCBiZWNhdXNlIGl0IHJldHVybnMgb3Bwb3NpdGUgc2lnbilcbiAgICBsZXQgdGltZXpvbmVPZmZzZXRNaW51dGVzID0gZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuXG4gICAgLy8gTG9vayB1cCB0aGUgYWJicmV2aWF0aW9uIG9yIGZhbGxiYWNrIHRvIG51bWVyaWMgZm9ybWF0XG4gICAgbGV0IHRpbWV6b25lU3RyaW5nID0gdGltZXpvbmVBYmJyZXZpYXRpb25zW3RpbWV6b25lT2Zmc2V0TWludXRlcy50b1N0cmluZygpXTtcbiAgICBpZiAoIXRpbWV6b25lU3RyaW5nKSB7XG4gICAgICAgIC8vIEZhbGxiYWNrOiBmb3JtYXQgYXMgwrFISE1NXG4gICAgICAgIGxldCBvZmZzZXRTaWduID0gdGltZXpvbmVPZmZzZXRNaW51dGVzID49IDAgPyBcIitcIiA6IFwiLVwiO1xuICAgICAgICBsZXQgb2Zmc2V0SG91cnMgPSBwKE1hdGguZmxvb3IoTWF0aC5hYnModGltZXpvbmVPZmZzZXRNaW51dGVzKSAvIDYwKSk7XG4gICAgICAgIGxldCBvZmZzZXRNaW5zID0gcChNYXRoLmFicyh0aW1lem9uZU9mZnNldE1pbnV0ZXMpICUgNjApO1xuICAgICAgICB0aW1lem9uZVN0cmluZyA9IGAke29mZnNldFNpZ259JHtvZmZzZXRIb3Vyc30ke29mZnNldE1pbnN9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9XyR7aG91cnN9LSR7bWludXRlc30tJHtzZWNvbmRzfS4ke21pbGxpc2Vjb25kc1N0cmluZ31fJHt0aW1lem9uZVN0cmluZ31gO1xufVxuXG4vKiogMjAyNCBKYW51YXJ5IDEsIE1vbmRheSwgMTI6NTM6MDJwbSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdE5pY2VEYXRlVGltZSh0aW1lOiBudW1iZXIpIHtcbiAgICBmdW5jdGlvbiBwKHM6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKTtcbiAgICB9XG4gICAgbGV0IGRhdGUgPSBuZXcgRGF0ZSh0aW1lKTtcbiAgICBsZXQgaG91cnMgPSBkYXRlLmdldEhvdXJzKCk7XG4gICAgbGV0IG1pbnV0ZXMgPSBkYXRlLmdldE1pbnV0ZXMoKTtcbiAgICBsZXQgc2Vjb25kcyA9IGRhdGUuZ2V0U2Vjb25kcygpO1xuICAgIGxldCBhbXBtID0gaG91cnMgPj0gMTIgPyBcInBtXCIgOiBcImFtXCI7XG4gICAgaG91cnMgPSBob3VycyAlIDEyO1xuICAgIGhvdXJzID0gaG91cnMgPyBob3VycyA6IDEyOyAvLyB0aGUgaG91ciAnMCcgc2hvdWxkIGJlICcxMidcbiAgICBsZXQgc3RyVGltZSA9IHAoaG91cnMpICsgXCI6XCIgKyBwKG1pbnV0ZXMpICsgXCI6XCIgKyBwKHNlY29uZHMpICsgYW1wbTtcbiAgICBsZXQgZGF5cyA9IFtcIlN1bmRheVwiLCBcIk1vbmRheVwiLCBcIlR1ZXNkYXlcIiwgXCJXZWRuZXNkYXlcIiwgXCJUaHVyc2RheVwiLCBcIkZyaWRheVwiLCBcIlNhdHVyZGF5XCJdO1xuICAgIHJldHVybiBkYXRlLmdldEZ1bGxZZWFyKCkgKyBcIiBcIiArIGRhdGUudG9Mb2NhbGVTdHJpbmcoXCJkZWZhdWx0XCIsIHsgbW9udGg6IFwibG9uZ1wiIH0pICsgXCIgXCIgKyBkYXRlLmdldERhdGUoKSArIFwiLCBcIiArIGRheXNbZGF0ZS5nZXREYXkoKV0gKyBcIiwgXCIgKyBzdHJUaW1lO1xufVxuXG4vKiogMjAyNCBKYW51YXJ5IDEsIE1vbmRheSwgMTI6NTM6MDJwbSAoNCBtb250aHMgYWdvKSAgKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRWZXJ5TmljZURhdGVUaW1lKHRpbWU6IG51bWJlcikge1xuICAgIGlmICghdGltZSkge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB0aW1lICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcodGltZSk7XG4gICAgfVxuICAgIHJldHVybiBgJHtmb3JtYXROaWNlRGF0ZVRpbWUodGltZSl9ICgke2Zvcm1hdFRpbWUoRGF0ZS5ub3coKSAtIHRpbWUpfSlgO1xufVxuXG4vKiogWVlZWS9NTS9ERCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdERhdGUodGltZTogbnVtYmVyKSB7XG4gICAgZnVuY3Rpb24gcChzOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIik7XG4gICAgfVxuICAgIGxldCBkYXRlID0gbmV3IERhdGUodGltZSk7XG4gICAgcmV0dXJuIGRhdGUuZ2V0RnVsbFllYXIoKSArIFwiL1wiICsgcChkYXRlLmdldE1vbnRoKCkgKyAxKSArIFwiL1wiICsgcChkYXRlLmdldERhdGUoKSk7XG59XG5cbi8qKiA8PSA2IGNoYXJhY3RlcnMgKDw9IDUgaWYgcG9zaXRpdmUpICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UGVyY2VudCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKE51bWJlci5pc05hTih2YWx1ZSkpIHJldHVybiBcIjAlXCI7XG4gICAgLy8gMSBkZWNpbWFsIHBvaW50LCBzbyB3ZSBoYXZlIDUgY2hhcmFjdGVycyAoanVzdCBsaWtlIGZvcm1hdE51bWJlciByZXR1cm5zIDUgY2hhcmFjdGVycylcbiAgICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIDEwMDApIC8gMTAgKyBcIiVcIjtcbn0iXX0=
396
- /* _JS_SOURCE_HASH = "1a242c2d04f98b2c5c8746dc03300531a8b55c3e768824c54557a7e20934086a"; */
@@ -1,28 +0,0 @@
1
- "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
3
- //exports.magenta = exports.gray = exports.white = exports.yellow = exports.green = exports.red = exports.blue = void 0;
4
- const misc_1 = require("../misc");
5
- const colors_1 = require("./colors");
6
- function ansiHSL(h, s, l, text) {
7
- let { r, g, b } = (0, colors_1.hslToRGB)({ h, s, l });
8
- return ansiRGB(r, g, b, text);
9
- }
10
- function ansiRGB(r, g, b, text) {
11
- if ((0, misc_1.isNode)()) {
12
- return `\x1b[38;5;${16 + (36 * Math.round(r / 255 * 5)) + (6 * Math.round(g / 255 * 5)) + Math.round(b / 255 * 5)}m${text}\x1b[0m`;
13
- }
14
- return `\x1b[38;2;${r};${g};${b}m${text}\x1b[0m`;
15
- }
16
- const lightness = 68;
17
- exports.blue = ansiHSL.bind(null, 235, 100, lightness);
18
- exports.red = ansiHSL.bind(null, 0, 100, lightness);
19
- const green = (text) => `\x1b[32m${text}\x1b[0m`;
20
- exports.green = green;
21
- const yellow = (text) => `\x1b[33m${text}\x1b[0m`;
22
- exports.yellow = yellow;
23
- exports.white = ansiHSL.bind(null, 0, 0, 80);
24
- exports.gray = ansiHSL.bind(null, 0, 0, 50);
25
- const magenta = (text) => `\x1b[35m${text}\x1b[0m`;
26
- exports.magenta = magenta;
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nQ29sb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibG9nQ29sb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGtDQUFpQztBQUNqQyxxQ0FBOEM7QUFFOUMsU0FBUyxPQUFPLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTLEVBQUUsSUFBWTtJQUMxRCxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxJQUFBLGlCQUFRLEVBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDeEMsT0FBTyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbEMsQ0FBQztBQUNELFNBQVMsT0FBTyxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsQ0FBUyxFQUFFLElBQVk7SUFDMUQsSUFBSSxJQUFBLGFBQU0sR0FBRSxFQUFFLENBQUM7UUFDWCxPQUFPLGFBQWEsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLFNBQVMsQ0FBQztJQUN2SSxDQUFDO0lBQ0QsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksU0FBUyxDQUFDO0FBQ3JELENBQUM7QUFFRCxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDUixRQUFBLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQy9DLFFBQUEsR0FBRyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDbEQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLFdBQVcsSUFBSSxTQUFTLENBQUM7QUFBbkQsUUFBQSxLQUFLLFNBQThDO0FBQ3pELE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxXQUFXLElBQUksU0FBUyxDQUFDO0FBQXBELFFBQUEsTUFBTSxVQUE4QztBQUNwRCxRQUFBLEtBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3JDLFFBQUEsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFFMUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLFdBQVcsSUFBSSxTQUFTLENBQUM7QUFBckQsUUFBQSxPQUFPLFdBQThDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNOb2RlIH0gZnJvbSBcIi4uL21pc2NcIjtcbmltcG9ydCB7IGhzbFRvSGV4LCBoc2xUb1JHQiB9IGZyb20gXCIuL2NvbG9yc1wiO1xuXG5mdW5jdGlvbiBhbnNpSFNMKGg6IG51bWJlciwgczogbnVtYmVyLCBsOiBudW1iZXIsIHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IHsgciwgZywgYiB9ID0gaHNsVG9SR0IoeyBoLCBzLCBsIH0pO1xuICAgIHJldHVybiBhbnNpUkdCKHIsIGcsIGIsIHRleHQpO1xufVxuZnVuY3Rpb24gYW5zaVJHQihyOiBudW1iZXIsIGc6IG51bWJlciwgYjogbnVtYmVyLCB0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChpc05vZGUoKSkge1xuICAgICAgICByZXR1cm4gYFxceDFiWzM4OzU7JHsxNiArICgzNiAqIE1hdGgucm91bmQociAvIDI1NSAqIDUpKSArICg2ICogTWF0aC5yb3VuZChnIC8gMjU1ICogNSkpICsgTWF0aC5yb3VuZChiIC8gMjU1ICogNSl9bSR7dGV4dH1cXHgxYlswbWA7XG4gICAgfVxuICAgIHJldHVybiBgXFx4MWJbMzg7Mjske3J9OyR7Z307JHtifW0ke3RleHR9XFx4MWJbMG1gO1xufVxuXG5jb25zdCBsaWdodG5lc3MgPSA2ODtcbmV4cG9ydCBjb25zdCBibHVlID0gYW5zaUhTTC5iaW5kKG51bGwsIDIzNSwgMTAwLCBsaWdodG5lc3MpO1xuZXhwb3J0IGNvbnN0IHJlZCA9IGFuc2lIU0wuYmluZChudWxsLCAwLCAxMDAsIGxpZ2h0bmVzcyk7XG5leHBvcnQgY29uc3QgZ3JlZW4gPSAodGV4dDogc3RyaW5nKSA9PiBgXFx4MWJbMzJtJHt0ZXh0fVxceDFiWzBtYDtcbmV4cG9ydCBjb25zdCB5ZWxsb3cgPSAodGV4dDogc3RyaW5nKSA9PiBgXFx4MWJbMzNtJHt0ZXh0fVxceDFiWzBtYDtcbmV4cG9ydCBjb25zdCB3aGl0ZSA9IGFuc2lIU0wuYmluZChudWxsLCAwLCAwLCA4MCk7XG5leHBvcnQgY29uc3QgZ3JheSA9IGFuc2lIU0wuYmluZChudWxsLCAwLCAwLCA1MCk7XG5cbmV4cG9ydCBjb25zdCBtYWdlbnRhID0gKHRleHQ6IHN0cmluZykgPT4gYFxceDFiWzM1bSR7dGV4dH1cXHgxYlswbWA7Il19
28
- /* _JS_SOURCE_HASH = "6a2e2841af8c356adef89cbab8659ff16801bdc6d2121166f6d08e7f6395d393"; */
@@ -1,53 +0,0 @@
1
- "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __importDefault = (this && this.__importDefault) || function (mod) {
9
- return (mod && mod.__esModule && mod.default) ? mod : { "default": mod };
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
12
- //exports.LZ4 = void 0;
13
- // NOTE: Even if we wanted to use the production version, we couldn't because it's not compatible with the client-side code, because they decided to do a file read to load in their WebAssembly.
14
- const lz4_wasm_nodejs_1 = __importDefault(require("./lz4_wasm_nodejs"));
15
- const measure_1 = require("../profiling/measure");
16
- class LZ4 {
17
- static compress(data) {
18
- return this.compressUntracked(data);
19
- }
20
- static compressUntracked(data) {
21
- try {
22
- return Buffer.from(lz4_wasm_nodejs_1.default.compress(data));
23
- }
24
- catch (e) {
25
- // Rethrow non errors as properly wrapped errors
26
- if (!(e && e instanceof Error)) {
27
- throw new Error(`Error compressing LZ4: ${e}`);
28
- }
29
- throw e;
30
- }
31
- }
32
- static decompress(data) {
33
- try {
34
- return Buffer.from(lz4_wasm_nodejs_1.default.decompress(data));
35
- }
36
- catch (e) {
37
- // Rethrow non errors as properly wrapped errors
38
- if (!(e && e instanceof Error)) {
39
- throw new Error(`Error decompressing LZ4: ${e}`);
40
- }
41
- throw e;
42
- }
43
- }
44
- }
45
- exports.LZ4 = LZ4;
46
- __decorate([
47
- measure_1.measureFnc
48
- ], LZ4, "compress", null);
49
- __decorate([
50
- measure_1.measureFnc
51
- ], LZ4, "decompress", null);
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTFo0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiTFo0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLGtNQUFrTTtBQUNsTSx3RUFBMkM7QUFDM0Msa0RBQWtEO0FBQ2xELE1BQWEsR0FBRztJQUVMLEFBQVAsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFZO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFDRCxNQUFNLENBQUMsaUJBQWlCLENBQUMsSUFBWTtRQUNqQyxJQUFJLENBQUM7WUFDRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMseUJBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNULGdEQUFnRDtZQUNoRCxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbkQsQ0FBQztZQUNELE1BQU0sQ0FBQyxDQUFDO1FBQ1osQ0FBQztJQUNMLENBQUM7SUFFTSxBQUFQLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBWTtRQUMxQixJQUFJLENBQUM7WUFDRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMseUJBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNULGdEQUFnRDtZQUNoRCxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckQsQ0FBQztZQUNELE1BQU0sQ0FBQyxDQUFDO1FBQ1osQ0FBQztJQUNMLENBQUM7Q0FDSjtBQTVCRCxrQkE0QkM7QUExQlU7SUFETixvQkFBVTt5QkFHVjtBQWFNO0lBRE4sb0JBQVU7MkJBV1YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBOT1RFOiBFdmVuIGlmIHdlIHdhbnRlZCB0byB1c2UgdGhlIHByb2R1Y3Rpb24gdmVyc2lvbiwgd2UgY291bGRuJ3QgYmVjYXVzZSBpdCdzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIGNsaWVudC1zaWRlIGNvZGUsIGJlY2F1c2UgdGhleSBkZWNpZGVkIHRvIGRvIGEgZmlsZSByZWFkIHRvIGxvYWQgaW4gdGhlaXIgV2ViQXNzZW1ibHkuIFxuaW1wb3J0IGx6NF9zdHJlYW0gZnJvbSBcIi4vbHo0X3dhc21fbm9kZWpzXCI7XG5pbXBvcnQgeyBtZWFzdXJlRm5jIH0gZnJvbSBcIi4uL3Byb2ZpbGluZy9tZWFzdXJlXCI7XG5leHBvcnQgY2xhc3MgTFo0IHtcbiAgICBAbWVhc3VyZUZuY1xuICAgIHN0YXRpYyBjb21wcmVzcyhkYXRhOiBCdWZmZXIpOiBCdWZmZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jb21wcmVzc1VudHJhY2tlZChkYXRhKTtcbiAgICB9XG4gICAgc3RhdGljIGNvbXByZXNzVW50cmFja2VkKGRhdGE6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20obHo0X3N0cmVhbS5jb21wcmVzcyhkYXRhKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIFJldGhyb3cgbm9uIGVycm9ycyBhcyBwcm9wZXJseSB3cmFwcGVkIGVycm9yc1xuICAgICAgICAgICAgaWYgKCEoZSAmJiBlIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBjb21wcmVzc2luZyBMWjQ6ICR7ZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgQG1lYXN1cmVGbmNcbiAgICBzdGF0aWMgZGVjb21wcmVzcyhkYXRhOiBCdWZmZXIpOiBCdWZmZXIge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGx6NF9zdHJlYW0uZGVjb21wcmVzcyhkYXRhKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIFJldGhyb3cgbm9uIGVycm9ycyBhcyBwcm9wZXJseSB3cmFwcGVkIGVycm9yc1xuICAgICAgICAgICAgaWYgKCEoZSAmJiBlIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBkZWNvbXByZXNzaW5nIExaNDogJHtlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgIH1cbn0iXX0=
53
- /* _JS_SOURCE_HASH = "776265f7e500f9c06160128cb00224c3da073cfd3edd34f16317439a91d71722"; */