socket-function 1.1.48 → 1.2.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.
- package/dist/SetProcessVariables.ts.cache +9 -0
- package/dist/SocketFunction.ts.cache +467 -0
- package/hot/dist/HotReloadController.ts.cache +252 -0
- package/package.json +1 -1
- package/require/dist/RequireController.ts.cache +386 -0
- package/require/dist/compileFlags.ts.cache +41 -0
- package/require/dist/extMapper.ts.cache +368 -0
- package/require/dist/require.ts.cache +676 -0
- package/src/JSONLACKS/dist/JSONLACKS.ts.cache +469 -0
- package/src/dist/CallFactory.ts.cache +930 -0
- package/src/dist/Zip.ts.cache +156 -0
- package/src/dist/batching.ts.cache +377 -0
- package/src/dist/bits.ts.cache +121 -0
- package/src/dist/buffers.ts.cache +76 -0
- package/src/dist/caching.ts.cache +302 -0
- package/src/dist/callHTTPHandler.ts.cache +264 -0
- package/src/dist/callManager.ts.cache +159 -0
- package/src/dist/certStore.ts.cache +59 -0
- package/src/dist/createSingleton.ts.cache +62 -0
- package/src/dist/fixLargeNetworkCalls.ts.cache +17 -0
- package/src/dist/forwardPort.ts.cache +222 -0
- package/src/dist/https.ts.cache +141 -0
- package/src/dist/misc.ts.cache +499 -0
- package/src/dist/nodeCache.ts.cache +136 -0
- package/src/dist/nodeProxy.ts.cache +57 -0
- package/src/dist/protocolNegotiation.ts.cache +101 -0
- package/src/dist/tlsParsing.ts.cache +85 -0
- package/src/dist/types.ts.cache +9 -0
- package/src/dist/webSocketServer.ts.cache +365 -0
- package/src/dist/websocketFactory.ts.cache +53 -0
- package/src/formatting/dist/colors.ts.cache +98 -0
- package/src/formatting/dist/format.ts.cache +396 -0
- package/src/formatting/dist/logColors.ts.cache +28 -0
- package/src/lz4/dist/LZ4.ts.cache +53 -0
- package/src/profiling/dist/getOwnTime.ts.cache +100 -0
- package/src/profiling/dist/measure.ts.cache +338 -0
- package/src/profiling/dist/stats.ts.cache +202 -0
- package/src/profiling/dist/statsFormat.ts.cache +45 -0
- package/src/profiling/getOwnTime.ts +7 -1
- package/src/profiling/measure.ts +25 -16
- package/time/dist/trueTimeShim.ts.cache +656 -0
|
@@ -0,0 +1,396 @@
|
|
|
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"; */
|
|
@@ -0,0 +1,28 @@
|
|
|
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"; */
|
|
@@ -0,0 +1,53 @@
|
|
|
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
|
+
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 = "d9a6623efbf85b9a38828fb6c3eee7d40e28387f215cb27e405eb1b47eb66e8d"; */
|