socket-function 1.2.1 → 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.
- package/SocketFunction.d.ts +1 -1
- package/SocketFunctionTypes.d.ts +1 -1
- package/hot/HotReloadController.d.ts +3 -3
- package/index.d.ts +25 -10
- package/package.json +1 -1
- package/require/CSSShim.d.ts +1 -1
- package/require/RequireController.d.ts +2 -2
- package/require/compileFlags.d.ts +1 -1
- package/require/require.d.ts +1 -1
- package/src/callManager.d.ts +1 -1
- package/test.ts +5 -11
- package/time/trueTimeShim.d.ts +16 -1
- package/time/trueTimeShim.ts +121 -34
- package/dist/SetProcessVariables.ts.cache +0 -9
- package/dist/SocketFunction.ts.cache +0 -467
- package/hot/dist/HotReloadController.ts.cache +0 -252
- package/require/dist/RequireController.ts.cache +0 -386
- package/require/dist/compileFlags.ts.cache +0 -41
- package/require/dist/extMapper.ts.cache +0 -368
- package/require/dist/require.ts.cache +0 -676
- package/src/JSONLACKS/dist/JSONLACKS.ts.cache +0 -469
- package/src/dist/CallFactory.ts.cache +0 -930
- package/src/dist/Zip.ts.cache +0 -156
- package/src/dist/batching.ts.cache +0 -377
- package/src/dist/bits.ts.cache +0 -121
- package/src/dist/buffers.ts.cache +0 -76
- package/src/dist/caching.ts.cache +0 -302
- package/src/dist/callHTTPHandler.ts.cache +0 -264
- package/src/dist/callManager.ts.cache +0 -159
- package/src/dist/certStore.ts.cache +0 -59
- package/src/dist/createSingleton.ts.cache +0 -62
- package/src/dist/fixLargeNetworkCalls.ts.cache +0 -17
- package/src/dist/forwardPort.ts.cache +0 -222
- package/src/dist/https.ts.cache +0 -141
- package/src/dist/misc.ts.cache +0 -499
- package/src/dist/nodeCache.ts.cache +0 -136
- package/src/dist/nodeProxy.ts.cache +0 -57
- package/src/dist/protocolNegotiation.ts.cache +0 -101
- package/src/dist/tlsParsing.ts.cache +0 -85
- package/src/dist/types.ts.cache +0 -9
- package/src/dist/webSocketServer.ts.cache +0 -365
- package/src/dist/websocketFactory.ts.cache +0 -53
- package/src/formatting/dist/colors.ts.cache +0 -98
- package/src/formatting/dist/format.ts.cache +0 -396
- package/src/formatting/dist/logColors.ts.cache +0 -28
- package/src/lz4/dist/LZ4.ts.cache +0 -53
- package/src/profiling/dist/getOwnTime.ts.cache +0 -100
- package/src/profiling/dist/measure.ts.cache +0 -338
- package/src/profiling/dist/stats.ts.cache +0 -202
- package/src/profiling/dist/statsFormat.ts.cache +0 -45
- package/time/dist/trueTimeShim.ts.cache +0 -656
package/src/dist/bits.ts.cache
DELETED
|
@@ -1,121 +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.getTimeUnique = exports.getBufferFraction = exports.getBufferInt = exports.getShortNumber = exports.xor64BitsSafe = exports.setLowHighUint32Safe = exports.setLowHighUint32 = exports.getLowUint32 = exports.getHighUint32 = exports.addEpsilons = exports.minusEpsilon = void 0;
|
|
4
|
-
/** Subtracts the smallest possible value from a number (a double). This makes it possible to convert an exclusive range end
|
|
5
|
-
* to an inclusive range end, which is sometimes required (as in, < x is the same as <= minusEpsilon(x)).
|
|
6
|
-
*/
|
|
7
|
-
function minusEpsilon(value) {
|
|
8
|
-
let high = getHighUint32(value);
|
|
9
|
-
let low = getLowUint32(value);
|
|
10
|
-
if (low === 0) {
|
|
11
|
-
low = 2 ** 32 - 1;
|
|
12
|
-
high--;
|
|
13
|
-
}
|
|
14
|
-
else {
|
|
15
|
-
low--;
|
|
16
|
-
}
|
|
17
|
-
return setLowHighUint32(low, high);
|
|
18
|
-
}
|
|
19
|
-
exports.minusEpsilon = minusEpsilon;
|
|
20
|
-
const maxUint32 = 2 ** 32 - 1;
|
|
21
|
-
function addEpsilons(value, count) {
|
|
22
|
-
let high = getHighUint32(value);
|
|
23
|
-
let low = getLowUint32(value);
|
|
24
|
-
low += count;
|
|
25
|
-
if (low < 0) {
|
|
26
|
-
low += maxUint32;
|
|
27
|
-
high++;
|
|
28
|
-
}
|
|
29
|
-
else if (low > maxUint32) {
|
|
30
|
-
low -= maxUint32;
|
|
31
|
-
high--;
|
|
32
|
-
}
|
|
33
|
-
return setLowHighUint32(low, high);
|
|
34
|
-
}
|
|
35
|
-
exports.addEpsilons = addEpsilons;
|
|
36
|
-
let conversionBuffer = new Float64Array(1);
|
|
37
|
-
let conversionUint8Buffer = new Uint8Array(conversionBuffer.buffer);
|
|
38
|
-
let conversionUint32Buffer = new Uint32Array(conversionBuffer.buffer);
|
|
39
|
-
function getHighUint32(num) {
|
|
40
|
-
conversionBuffer[0] = num;
|
|
41
|
-
return conversionUint32Buffer[1];
|
|
42
|
-
}
|
|
43
|
-
exports.getHighUint32 = getHighUint32;
|
|
44
|
-
function getLowUint32(num) {
|
|
45
|
-
conversionBuffer[0] = num;
|
|
46
|
-
return conversionUint32Buffer[0];
|
|
47
|
-
}
|
|
48
|
-
exports.getLowUint32 = getLowUint32;
|
|
49
|
-
/** IMPORTANT! Beware of comparisons with 64 bit numbers. getFloat64_fromBytes(4294136438, 168) !== getFloat64_fromBytes(4294136438, 168).
|
|
50
|
-
* USE is64BitEqual instead, OR, ensure the 2 highest bits are always 0.
|
|
51
|
-
*/
|
|
52
|
-
function setLowHighUint32(low, high) {
|
|
53
|
-
conversionUint32Buffer[0] = low;
|
|
54
|
-
conversionUint32Buffer[1] = high;
|
|
55
|
-
return conversionBuffer[0];
|
|
56
|
-
}
|
|
57
|
-
exports.setLowHighUint32 = setLowHighUint32;
|
|
58
|
-
/** Adds protection against NaN values, changing the result if it would be NaN. This is because NaN values will compare to be not equal even if they are equal in certain cases, and in other cases, they'll always be equal, even if their bits are not equal.
|
|
59
|
-
- This means this is not a reversible operation. However, in a lot of cases, that doesn't matter.
|
|
60
|
-
*/
|
|
61
|
-
function setLowHighUint32Safe(low, high) {
|
|
62
|
-
conversionUint32Buffer[0] = low;
|
|
63
|
-
// Prevent NaN by not setting all the exponent bits to 1
|
|
64
|
-
conversionUint32Buffer[1] = high & 0xBFFFFFFF;
|
|
65
|
-
return conversionBuffer[0];
|
|
66
|
-
}
|
|
67
|
-
exports.setLowHighUint32Safe = setLowHighUint32Safe;
|
|
68
|
-
// NOTE: Not reversible, see setLowHighUint32Safe
|
|
69
|
-
function xor64BitsSafe(a, b) {
|
|
70
|
-
let high = getHighUint32(a);
|
|
71
|
-
let low = getLowUint32(a);
|
|
72
|
-
let high2 = getHighUint32(b);
|
|
73
|
-
let low2 = getLowUint32(b);
|
|
74
|
-
return setLowHighUint32Safe(low ^ low2, high ^ high2);
|
|
75
|
-
}
|
|
76
|
-
exports.xor64BitsSafe = xor64BitsSafe;
|
|
77
|
-
// Gets bits that can be stored in a number. Specifically, the first 62 bits,
|
|
78
|
-
// as 64 bits will not compare correctly when treated as a double.
|
|
79
|
-
function getShortNumber(buffer) {
|
|
80
|
-
let high = buffer.readUInt32BE(0) & 0x3FFFFFFF;
|
|
81
|
-
let low = buffer.readUInt32BE(4);
|
|
82
|
-
return setLowHighUint32(low, high);
|
|
83
|
-
}
|
|
84
|
-
exports.getShortNumber = getShortNumber;
|
|
85
|
-
/* Returns a number between 0 and 2**48 */
|
|
86
|
-
function getBufferInt(buffer) {
|
|
87
|
-
let num = 0;
|
|
88
|
-
for (let i = 0; i < Math.min(buffer.length, 6); i++) {
|
|
89
|
-
num = num * 256 + buffer[i];
|
|
90
|
-
}
|
|
91
|
-
return num;
|
|
92
|
-
}
|
|
93
|
-
exports.getBufferInt = getBufferInt;
|
|
94
|
-
const intMax = 2 ** 48;
|
|
95
|
-
/** Returns a number between 0 (inclusive) and 1 (exclusive) */
|
|
96
|
-
function getBufferFraction(buffer) {
|
|
97
|
-
let int = getBufferInt(buffer);
|
|
98
|
-
return int / intMax;
|
|
99
|
-
}
|
|
100
|
-
exports.getBufferFraction = getBufferFraction;
|
|
101
|
-
/*
|
|
102
|
-
export function numberToBase64(num: number): string {
|
|
103
|
-
conversionBuffer[0] = num;
|
|
104
|
-
return Buffer.from(conversionBuffer.buffer).toString("base64");
|
|
105
|
-
}
|
|
106
|
-
export function numberFromBase64(base64: string) {
|
|
107
|
-
return new Float64Array(Buffer.from(base64, "base64"))[0];
|
|
108
|
-
}
|
|
109
|
-
*/
|
|
110
|
-
let prevTime = 0;
|
|
111
|
-
function getTimeUnique() {
|
|
112
|
-
let time = Date.now();
|
|
113
|
-
if (time <= prevTime) {
|
|
114
|
-
time = addEpsilons(prevTime, 1);
|
|
115
|
-
}
|
|
116
|
-
prevTime = time;
|
|
117
|
-
return time;
|
|
118
|
-
}
|
|
119
|
-
exports.getTimeUnique = getTimeUnique;
|
|
120
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYml0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJpdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0E7O0dBRUc7QUFDSCxTQUFnQixZQUFZLENBQUMsS0FBYTtJQUN0QyxJQUFJLElBQUksR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsSUFBSSxHQUFHLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTlCLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ1osR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksRUFBRSxDQUFDO0lBQ1gsQ0FBQztTQUFNLENBQUM7UUFDSixHQUFHLEVBQUUsQ0FBQztJQUNWLENBQUM7SUFFRCxPQUFPLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN2QyxDQUFDO0FBWkQsb0NBWUM7QUFDRCxNQUFNLFNBQVMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM5QixTQUFnQixXQUFXLENBQUMsS0FBYSxFQUFFLEtBQWE7SUFDcEQsSUFBSSxJQUFJLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLElBQUksR0FBRyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU5QixHQUFHLElBQUksS0FBSyxDQUFDO0lBQ2IsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDVixHQUFHLElBQUksU0FBUyxDQUFDO1FBQ2pCLElBQUksRUFBRSxDQUFDO0lBQ1gsQ0FBQztTQUFNLElBQUksR0FBRyxHQUFHLFNBQVMsRUFBRSxDQUFDO1FBQ3pCLEdBQUcsSUFBSSxTQUFTLENBQUM7UUFDakIsSUFBSSxFQUFFLENBQUM7SUFDWCxDQUFDO0lBRUQsT0FBTyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdkMsQ0FBQztBQWRELGtDQWND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QyxNQUFjO0lBQzVDLElBQUksR0FBRyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQixPQUFPLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDeEIsQ0FBQztBQUhELDhDQUdDO0FBRUQ7Ozs7Ozs7O0VBUUU7QUFHRixJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDakIsU0FBZ0IsYUFBYTtJQUN6QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDdEIsSUFBSSxJQUFJLElBQUksUUFBUSxFQUFFLENBQUM7UUFDbkIsSUFBSSxHQUFHLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNELFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDaEIsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQVBELHNDQU9DIiwic291cmNlc0NvbnRlbnQiOlsiXG4vKiogU3VidHJhY3RzIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSB2YWx1ZSBmcm9tIGEgbnVtYmVyIChhIGRvdWJsZSkuIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gY29udmVydCBhbiBleGNsdXNpdmUgcmFuZ2UgZW5kXG4gKiAgICAgIHRvIGFuIGluY2x1c2l2ZSByYW5nZSBlbmQsIHdoaWNoIGlzIHNvbWV0aW1lcyByZXF1aXJlZCAoYXMgaW4sIDwgeCBpcyB0aGUgc2FtZSBhcyA8PSBtaW51c0Vwc2lsb24oeCkpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWludXNFcHNpbG9uKHZhbHVlOiBudW1iZXIpIHtcbiAgICBsZXQgaGlnaCA9IGdldEhpZ2hVaW50MzIodmFsdWUpO1xuICAgIGxldCBsb3cgPSBnZXRMb3dVaW50MzIodmFsdWUpO1xuXG4gICAgaWYgKGxvdyA9PT0gMCkge1xuICAgICAgICBsb3cgPSAyICoqIDMyIC0gMTtcbiAgICAgICAgaGlnaC0tO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxvdy0tO1xuICAgIH1cblxuICAgIHJldHVybiBzZXRMb3dIaWdoVWludDMyKGxvdywgaGlnaCk7XG59XG5jb25zdCBtYXhVaW50MzIgPSAyICoqIDMyIC0gMTtcbmV4cG9ydCBmdW5jdGlvbiBhZGRFcHNpbG9ucyh2YWx1ZTogbnVtYmVyLCBjb3VudDogbnVtYmVyKSB7XG4gICAgbGV0IGhpZ2ggPSBnZXRIaWdoVWludDMyKHZhbHVlKTtcbiAgICBsZXQgbG93ID0gZ2V0TG93VWludDMyKHZhbHVlKTtcblxuICAgIGxvdyArPSBjb3VudDtcbiAgICBpZiAobG93IDwgMCkge1xuICAgICAgICBsb3cgKz0gbWF4VWludDMyO1xuICAgICAgICBoaWdoKys7XG4gICAgfSBlbHNlIGlmIChsb3cgPiBtYXhVaW50MzIpIHtcbiAgICAgICAgbG93IC09IG1heFVpbnQzMjtcbiAgICAgICAgaGlnaC0tO1xuICAgIH1cblxuICAgIHJldHVybiBzZXRMb3dIaWdoVWludDMyKGxvdywgaGlnaCk7XG59XG5cbmxldCBjb252ZXJzaW9uQnVmZmVyID0gbmV3IEZsb2F0NjRBcnJheSgxKTtcbmxldCBjb252ZXJzaW9uVWludDhCdWZmZXIgPSBuZXcgVWludDhBcnJheShjb252ZXJzaW9uQnVmZmVyLmJ1ZmZlcik7XG5sZXQgY29udmVyc2lvblVpbnQzMkJ1ZmZlciA9IG5ldyBVaW50MzJBcnJheShjb252ZXJzaW9uQnVmZmVyLmJ1ZmZlcik7XG5leHBvcnQgZnVuY3Rpb24gZ2V0SGlnaFVpbnQzMihudW06IG51bWJlcik6IG51bWJlciB7XG4gICAgY29udmVyc2lvbkJ1ZmZlclswXSA9IG51bTtcbiAgICByZXR1cm4gY29udmVyc2lvblVpbnQzMkJ1ZmZlclsxXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRMb3dVaW50MzIobnVtOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnZlcnNpb25CdWZmZXJbMF0gPSBudW07XG4gICAgcmV0dXJuIGNvbnZlcnNpb25VaW50MzJCdWZmZXJbMF07XG59XG5cbi8qKiBJTVBPUlRBTlQhIEJld2FyZSBvZiBjb21wYXJpc29ucyB3aXRoIDY0IGJpdCBudW1iZXJzLiBnZXRGbG9hdDY0X2Zyb21CeXRlcyg0Mjk0MTM2NDM4LCAxNjgpICE9PSBnZXRGbG9hdDY0X2Zyb21CeXRlcyg0Mjk0MTM2NDM4LCAxNjgpLlxuICogICAgICBVU0UgaXM2NEJpdEVxdWFsIGluc3RlYWQsIE9SLCBlbnN1cmUgdGhlIDIgaGlnaGVzdCBiaXRzIGFyZSBhbHdheXMgMC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldExvd0hpZ2hVaW50MzIobG93OiBudW1iZXIsIGhpZ2g6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29udmVyc2lvblVpbnQzMkJ1ZmZlclswXSA9IGxvdztcbiAgICBjb252ZXJzaW9uVWludDMyQnVmZmVyWzFdID0gaGlnaDtcbiAgICByZXR1cm4gY29udmVyc2lvbkJ1ZmZlclswXTtcbn1cblxuLyoqIEFkZHMgcHJvdGVjdGlvbiBhZ2FpbnN0IE5hTiB2YWx1ZXMsIGNoYW5naW5nIHRoZSByZXN1bHQgaWYgaXQgd291bGQgYmUgTmFOLiBUaGlzIGlzIGJlY2F1c2UgTmFOIHZhbHVlcyB3aWxsIGNvbXBhcmUgdG8gYmUgbm90IGVxdWFsIGV2ZW4gaWYgdGhleSBhcmUgZXF1YWwgaW4gY2VydGFpbiBjYXNlcywgYW5kIGluIG90aGVyIGNhc2VzLCB0aGV5J2xsIGFsd2F5cyBiZSBlcXVhbCwgZXZlbiBpZiB0aGVpciBiaXRzIGFyZSBub3QgZXF1YWwuXG4gICAgLSBUaGlzIG1lYW5zIHRoaXMgaXMgbm90IGEgcmV2ZXJzaWJsZSBvcGVyYXRpb24uIEhvd2V2ZXIsIGluIGEgbG90IG9mIGNhc2VzLCB0aGF0IGRvZXNuJ3QgbWF0dGVyLiBcbiovXG5leHBvcnQgZnVuY3Rpb24gc2V0TG93SGlnaFVpbnQzMlNhZmUobG93OiBudW1iZXIsIGhpZ2g6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29udmVyc2lvblVpbnQzMkJ1ZmZlclswXSA9IGxvdztcbiAgICAvLyBQcmV2ZW50IE5hTiBieSBub3Qgc2V0dGluZyBhbGwgdGhlIGV4cG9uZW50IGJpdHMgdG8gMVxuICAgIGNvbnZlcnNpb25VaW50MzJCdWZmZXJbMV0gPSBoaWdoICYgMHhCRkZGRkZGRjtcbiAgICByZXR1cm4gY29udmVyc2lvbkJ1ZmZlclswXTtcbn1cblxuLy8gTk9URTogTm90IHJldmVyc2libGUsIHNlZSBzZXRMb3dIaWdoVWludDMyU2FmZVxuZXhwb3J0IGZ1bmN0aW9uIHhvcjY0Qml0c1NhZmUoYTogbnVtYmVyLCBiOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCBoaWdoID0gZ2V0SGlnaFVpbnQzMihhKTtcbiAgICBsZXQgbG93ID0gZ2V0TG93VWludDMyKGEpO1xuICAgIGxldCBoaWdoMiA9IGdldEhpZ2hVaW50MzIoYik7XG4gICAgbGV0IGxvdzIgPSBnZXRMb3dVaW50MzIoYik7XG4gICAgcmV0dXJuIHNldExvd0hpZ2hVaW50MzJTYWZlKGxvdyBeIGxvdzIsIGhpZ2ggXiBoaWdoMik7XG59XG5cbi8vIEdldHMgYml0cyB0aGF0IGNhbiBiZSBzdG9yZWQgaW4gYSBudW1iZXIuIFNwZWNpZmljYWxseSwgdGhlIGZpcnN0IDYyIGJpdHMsXG4vLyAgYXMgNjQgYml0cyB3aWxsIG5vdCBjb21wYXJlIGNvcnJlY3RseSB3aGVuIHRyZWF0ZWQgYXMgYSBkb3VibGUuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2hvcnROdW1iZXIoYnVmZmVyOiBCdWZmZXIpOiBudW1iZXIge1xuICAgIGxldCBoaWdoID0gYnVmZmVyLnJlYWRVSW50MzJCRSgwKSAmIDB4M0ZGRkZGRkY7XG4gICAgbGV0IGxvdyA9IGJ1ZmZlci5yZWFkVUludDMyQkUoNCk7XG4gICAgcmV0dXJuIHNldExvd0hpZ2hVaW50MzIobG93LCBoaWdoKTtcbn1cbi8qIFJldHVybnMgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAyKio0OCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1ZmZlckludChidWZmZXI6IEJ1ZmZlcik6IG51bWJlciB7XG4gICAgbGV0IG51bSA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1pbihidWZmZXIubGVuZ3RoLCA2KTsgaSsrKSB7XG4gICAgICAgIG51bSA9IG51bSAqIDI1NiArIGJ1ZmZlcltpXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bTtcbn1cbmNvbnN0IGludE1heCA9IDIgKiogNDg7XG4vKiogUmV0dXJucyBhIG51bWJlciBiZXR3ZWVuIDAgKGluY2x1c2l2ZSkgYW5kIDEgKGV4Y2x1c2l2ZSkgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCdWZmZXJGcmFjdGlvbihidWZmZXI6IEJ1ZmZlcik6IG51bWJlciB7XG4gICAgbGV0IGludCA9IGdldEJ1ZmZlckludChidWZmZXIpO1xuICAgIHJldHVybiBpbnQgLyBpbnRNYXg7XG59XG5cbi8qXG5leHBvcnQgZnVuY3Rpb24gbnVtYmVyVG9CYXNlNjQobnVtOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnZlcnNpb25CdWZmZXJbMF0gPSBudW07XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGNvbnZlcnNpb25CdWZmZXIuYnVmZmVyKS50b1N0cmluZyhcImJhc2U2NFwiKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBudW1iZXJGcm9tQmFzZTY0KGJhc2U2NDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBGbG9hdDY0QXJyYXkoQnVmZmVyLmZyb20oYmFzZTY0LCBcImJhc2U2NFwiKSlbMF07XG59XG4qL1xuXG5cbmxldCBwcmV2VGltZSA9IDA7XG5leHBvcnQgZnVuY3Rpb24gZ2V0VGltZVVuaXF1ZSgpIHtcbiAgICBsZXQgdGltZSA9IERhdGUubm93KCk7XG4gICAgaWYgKHRpbWUgPD0gcHJldlRpbWUpIHtcbiAgICAgICAgdGltZSA9IGFkZEVwc2lsb25zKHByZXZUaW1lLCAxKTtcbiAgICB9XG4gICAgcHJldlRpbWUgPSB0aW1lO1xuICAgIHJldHVybiB0aW1lO1xufSJdfQ==
|
|
121
|
-
/* _JS_SOURCE_HASH = "6fd551828fef1e8f457b997ea04889957872cb51682949d9912465695bb77ef6"; */
|
|
@@ -1,76 +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.asFloat64MaybeCopy = exports.asInt32 = exports.asUint32 = exports.asFloat32 = exports.asFloat64 = exports.asBuffer = exports.cloneBuffer = void 0;
|
|
4
|
-
const types_1 = require("./types");
|
|
5
|
-
function cloneBuffer(data) {
|
|
6
|
-
let newBuffer = Buffer.alloc(data.length);
|
|
7
|
-
data.copy(newBuffer);
|
|
8
|
-
return newBuffer;
|
|
9
|
-
}
|
|
10
|
-
exports.cloneBuffer = cloneBuffer;
|
|
11
|
-
function asBuffer(data) {
|
|
12
|
-
if (!data)
|
|
13
|
-
return data;
|
|
14
|
-
if (data instanceof Buffer)
|
|
15
|
-
return data;
|
|
16
|
-
if (!(0, types_1.canHaveChildren)(data))
|
|
17
|
-
return data;
|
|
18
|
-
if (!("buffer" in data) || !("byteOffset" in data) || !("byteLength" in data)) {
|
|
19
|
-
return Buffer.from(data);
|
|
20
|
-
}
|
|
21
|
-
let result = Buffer.from(data.buffer, data.byteOffset, data.byteLength);
|
|
22
|
-
return result;
|
|
23
|
-
}
|
|
24
|
-
exports.asBuffer = asBuffer;
|
|
25
|
-
function asFloat64(data) {
|
|
26
|
-
if (data.length % 8 !== 0) {
|
|
27
|
-
throw new Error(`Data is not 8 count aligned, received length of ${data.length}`);
|
|
28
|
-
}
|
|
29
|
-
if (data.byteOffset % 8 !== 0) {
|
|
30
|
-
throw new Error(`Data is not 8 byte aligned, received offset of ${data.byteOffset}`);
|
|
31
|
-
}
|
|
32
|
-
return new Float64Array(data.buffer, data.byteOffset, Math.floor(data.length / 8));
|
|
33
|
-
}
|
|
34
|
-
exports.asFloat64 = asFloat64;
|
|
35
|
-
function asFloat32(data) {
|
|
36
|
-
if (data.length % 4 !== 0) {
|
|
37
|
-
throw new Error(`Data is not 4 byte aligned, received length of ${data.length}`);
|
|
38
|
-
}
|
|
39
|
-
if (data.byteOffset % 4 !== 0) {
|
|
40
|
-
throw new Error(`Data is not 4 byte aligned, received offset of ${data.byteOffset}`);
|
|
41
|
-
}
|
|
42
|
-
return new Float32Array(data.buffer, data.byteOffset, Math.floor(data.length / 4));
|
|
43
|
-
}
|
|
44
|
-
exports.asFloat32 = asFloat32;
|
|
45
|
-
function asUint32(data) {
|
|
46
|
-
if (data.length % 4 !== 0) {
|
|
47
|
-
throw new Error(`Data is not 4 byte aligned, received length of ${data.length}`);
|
|
48
|
-
}
|
|
49
|
-
if (data.byteOffset % 4 !== 0) {
|
|
50
|
-
throw new Error(`Data is not 4 byte aligned, received offset of ${data.byteOffset}`);
|
|
51
|
-
}
|
|
52
|
-
return new Uint32Array(data.buffer, data.byteOffset, Math.floor(data.length / 4));
|
|
53
|
-
}
|
|
54
|
-
exports.asUint32 = asUint32;
|
|
55
|
-
function asInt32(data) {
|
|
56
|
-
if (data.length % 4 !== 0) {
|
|
57
|
-
throw new Error(`Data is not 4 byte aligned, received length of ${data.length}`);
|
|
58
|
-
}
|
|
59
|
-
if (data.byteOffset % 4 !== 0) {
|
|
60
|
-
throw new Error(`Data is not 4 byte aligned, received offset of ${data.byteOffset}`);
|
|
61
|
-
}
|
|
62
|
-
return new Int32Array(data.buffer, data.byteOffset, Math.floor(data.length / 4));
|
|
63
|
-
}
|
|
64
|
-
exports.asInt32 = asInt32;
|
|
65
|
-
function asFloat64MaybeCopy(data) {
|
|
66
|
-
if (data.length % 8 !== 0) {
|
|
67
|
-
throw new Error(`Data is not 8 count aligned, received length of ${data.length}`);
|
|
68
|
-
}
|
|
69
|
-
if (data.byteOffset % 8 !== 0) {
|
|
70
|
-
return asFloat64(cloneBuffer(data));
|
|
71
|
-
}
|
|
72
|
-
return new Float64Array(data.buffer, data.byteOffset, Math.floor(data.length / 8));
|
|
73
|
-
}
|
|
74
|
-
exports.asFloat64MaybeCopy = asFloat64MaybeCopy;
|
|
75
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVmZmVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJ1ZmZlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQTBDO0FBSzFDLFNBQWdCLFdBQVcsQ0FBQyxJQUFZO0lBQ3BDLElBQUksU0FBUyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDckIsT0FBTyxTQUFTLENBQUM7QUFDckIsQ0FBQztBQUpELGtDQUlDO0FBR0QsU0FBZ0IsUUFBUSxDQUFDLElBQWdCO0lBQ3JDLElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDdkIsSUFBSSxJQUFJLFlBQVksTUFBTTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3hDLElBQUksQ0FBQyxJQUFBLHVCQUFlLEVBQUMsSUFBSSxDQUFDO1FBQUUsT0FBTyxJQUFXLENBQUM7SUFDL0MsSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzVFLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBQ0QsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBRSxJQUFZLENBQUMsTUFBTSxFQUFHLElBQVksQ0FBQyxVQUFVLEVBQUcsSUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ25HLE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFURCw0QkFTQztBQUNELFNBQWdCLFNBQVMsQ0FBQyxJQUFZO0lBQ2xDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxt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VSxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM1QixPQUFPLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsT0FBTyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkYsQ0FBQztBQVJELGdEQVFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2FuSGF2ZUNoaWxkcmVuIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZXhwb3J0IHR5cGUgQXJyYXlCdWZmZXJWaWV3VHlwZXMgPSBVaW50OEFycmF5IHwgSW50OEFycmF5IHwgVWludDE2QXJyYXkgfCBJbnQxNkFycmF5IHwgVWludDMyQXJyYXkgfCBJbnQzMkFycmF5IHwgQmlnVWludDY0QXJyYXkgfCBCaWdJbnQ2NEFycmF5IHwgRmxvYXQ2NEFycmF5IHwgRmxvYXQzMkFycmF5IHwgVWludDhDbGFtcGVkQXJyYXk7XG5leHBvcnQgdHlwZSBCdWZmZXJUeXBlID0gQXJyYXlCdWZmZXIgfCBTaGFyZWRBcnJheUJ1ZmZlciB8IEFycmF5QnVmZmVyVmlld1R5cGVzO1xuXG5leHBvcnQgZnVuY3Rpb24gY2xvbmVCdWZmZXIoZGF0YTogQnVmZmVyKTogQnVmZmVyIHtcbiAgICBsZXQgbmV3QnVmZmVyID0gQnVmZmVyLmFsbG9jKGRhdGEubGVuZ3RoKTtcbiAgICBkYXRhLmNvcHkobmV3QnVmZmVyKTtcbiAgICByZXR1cm4gbmV3QnVmZmVyO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBhc0J1ZmZlcihkYXRhOiBCdWZmZXJUeXBlKTogQnVmZmVyIHtcbiAgICBpZiAoIWRhdGEpIHJldHVybiBkYXRhO1xuICAgIGlmIChkYXRhIGluc3RhbmNlb2YgQnVmZmVyKSByZXR1cm4gZGF0YTtcbiAgICBpZiAoIWNhbkhhdmVDaGlsZHJlbihkYXRhKSkgcmV0dXJuIGRhdGEgYXMgYW55O1xuICAgIGlmICghKFwiYnVmZmVyXCIgaW4gZGF0YSkgfHwgIShcImJ5dGVPZmZzZXRcIiBpbiBkYXRhKSB8fCAhKFwiYnl0ZUxlbmd0aFwiIGluIGRhdGEpKSB7XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShkYXRhKTtcbiAgICB9XG4gICAgbGV0IHJlc3VsdCA9IEJ1ZmZlci5mcm9tKChkYXRhIGFzIGFueSkuYnVmZmVyLCAoZGF0YSBhcyBhbnkpLmJ5dGVPZmZzZXQsIChkYXRhIGFzIGFueSkuYnl0ZUxlbmd0aCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhc0Zsb2F0NjQoZGF0YTogQnVmZmVyKTogRmxvYXQ2NEFycmF5IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggJSA4ICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRGF0YSBpcyBub3QgOCBjb3VudCBhbGlnbmVkLCByZWNlaXZlZCBsZW5ndGggb2YgJHtkYXRhLmxlbmd0aH1gKTtcbiAgICB9XG4gICAgaWYgKGRhdGEuYnl0ZU9mZnNldCAlIDggIT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEYXRhIGlzIG5vdCA4IGJ5dGUgYWxpZ25lZCwgcmVjZWl2ZWQgb2Zmc2V0IG9mICR7ZGF0YS5ieXRlT2Zmc2V0fWApO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEZsb2F0NjRBcnJheShkYXRhLmJ1ZmZlciwgZGF0YS5ieXRlT2Zmc2V0LCBNYXRoLmZsb29yKGRhdGEubGVuZ3RoIC8gOCkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFzRmxvYXQzMihkYXRhOiBCdWZmZXIpOiBGbG9hdDMyQXJyYXkge1xuICAgIGlmIChkYXRhLmxlbmd0aCAlIDQgIT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEYXRhIGlzIG5vdCA0IGJ5dGUgYWxpZ25lZCwgcmVjZWl2ZWQgbGVuZ3RoIG9mICR7ZGF0YS5sZW5ndGh9YCk7XG4gICAgfVxuICAgIGlmIChkYXRhLmJ5dGVPZmZzZXQgJSA0ICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRGF0YSBpcyBub3QgNCBieXRlIGFsaWduZWQsIHJlY2VpdmVkIG9mZnNldCBvZiAke2RhdGEuYnl0ZU9mZnNldH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoZGF0YS5idWZmZXIsIGRhdGEuYnl0ZU9mZnNldCwgTWF0aC5mbG9vcihkYXRhLmxlbmd0aCAvIDQpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhc1VpbnQzMihkYXRhOiBCdWZmZXIpOiBVaW50MzJBcnJheSB7XG4gICAgaWYgKGRhdGEubGVuZ3RoICUgNCAhPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERhdGEgaXMgbm90IDQgYnl0ZSBhbGlnbmVkLCByZWNlaXZlZCBsZW5ndGggb2YgJHtkYXRhLmxlbmd0aH1gKTtcbiAgICB9XG4gICAgaWYgKGRhdGEuYnl0ZU9mZnNldCAlIDQgIT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEYXRhIGlzIG5vdCA0IGJ5dGUgYWxpZ25lZCwgcmVjZWl2ZWQgb2Zmc2V0IG9mICR7ZGF0YS5ieXRlT2Zmc2V0fWApO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFVpbnQzMkFycmF5KGRhdGEuYnVmZmVyLCBkYXRhLmJ5dGVPZmZzZXQsIE1hdGguZmxvb3IoZGF0YS5sZW5ndGggLyA0KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gYXNJbnQzMihkYXRhOiBCdWZmZXIpOiBJbnQzMkFycmF5IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggJSA0ICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRGF0YSBpcyBub3QgNCBieXRlIGFsaWduZWQsIHJlY2VpdmVkIGxlbmd0aCBvZiAke2RhdGEubGVuZ3RofWApO1xuICAgIH1cbiAgICBpZiAoZGF0YS5ieXRlT2Zmc2V0ICUgNCAhPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERhdGEgaXMgbm90IDQgYnl0ZSBhbGlnbmVkLCByZWNlaXZlZCBvZmZzZXQgb2YgJHtkYXRhLmJ5dGVPZmZzZXR9YCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgSW50MzJBcnJheShkYXRhLmJ1ZmZlciwgZGF0YS5ieXRlT2Zmc2V0LCBNYXRoLmZsb29yKGRhdGEubGVuZ3RoIC8gNCkpO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBhc0Zsb2F0NjRNYXliZUNvcHkoZGF0YTogQnVmZmVyKSB7XG4gICAgaWYgKGRhdGEubGVuZ3RoICUgOCAhPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERhdGEgaXMgbm90IDggY291bnQgYWxpZ25lZCwgcmVjZWl2ZWQgbGVuZ3RoIG9mICR7ZGF0YS5sZW5ndGh9YCk7XG4gICAgfVxuICAgIGlmIChkYXRhLmJ5dGVPZmZzZXQgJSA4ICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBhc0Zsb2F0NjQoY2xvbmVCdWZmZXIoZGF0YSkpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEZsb2F0NjRBcnJheShkYXRhLmJ1ZmZlciwgZGF0YS5ieXRlT2Zmc2V0LCBNYXRoLmZsb29yKGRhdGEubGVuZ3RoIC8gOCkpO1xufVxuIl19
|
|
76
|
-
/* _JS_SOURCE_HASH = "5d67435fc79be050d69cf9b1ce1c39b5d7911a52ee00e73af54477e9fe10f566"; */
|
|
@@ -1,302 +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.externalCache = exports.cacheShallowConfigArgEqual = exports.cacheJSONArgsEqual = exports.cacheArgsEqual = exports.cacheArrayEqual = exports.cacheList = exports.cacheWeak = exports.cacheLimited = exports.cache = exports.cacheEmptyArray = exports.lazy = void 0;
|
|
4
|
-
const misc_1 = require("./misc");
|
|
5
|
-
const types_1 = require("./types");
|
|
6
|
-
function lazy(factory) {
|
|
7
|
-
let value = undefined;
|
|
8
|
-
function get() {
|
|
9
|
-
if (!value) {
|
|
10
|
-
value = { value: factory() };
|
|
11
|
-
}
|
|
12
|
-
return value.value;
|
|
13
|
-
}
|
|
14
|
-
;
|
|
15
|
-
get.reset = () => {
|
|
16
|
-
value = undefined;
|
|
17
|
-
};
|
|
18
|
-
get.set = (newValue) => {
|
|
19
|
-
value = { value: newValue };
|
|
20
|
-
};
|
|
21
|
-
return get;
|
|
22
|
-
}
|
|
23
|
-
exports.lazy = lazy;
|
|
24
|
-
// NOTE: Empty arrays are so common, that it is useful to represent them as the same
|
|
25
|
-
// emtpy array, to increase cache hit rates.
|
|
26
|
-
const emptyArray = [];
|
|
27
|
-
function cacheEmptyArray(array) {
|
|
28
|
-
if (array.length === 0)
|
|
29
|
-
return emptyArray;
|
|
30
|
-
return array;
|
|
31
|
-
}
|
|
32
|
-
exports.cacheEmptyArray = cacheEmptyArray;
|
|
33
|
-
function cache(getValue) {
|
|
34
|
-
let startingCalculating = new Set();
|
|
35
|
-
let values = new Map();
|
|
36
|
-
function cache(input, ...untracked) {
|
|
37
|
-
let key = input;
|
|
38
|
-
if (values.has(key)) {
|
|
39
|
-
return values.get(key);
|
|
40
|
-
}
|
|
41
|
-
if (startingCalculating.has(key)) {
|
|
42
|
-
// TODO: Fix the types here, by throwing, and then for the cases
|
|
43
|
-
// that don't throw, make our output type include undefined
|
|
44
|
-
return undefined;
|
|
45
|
-
}
|
|
46
|
-
startingCalculating.add(key);
|
|
47
|
-
let value = getValue(input, ...untracked);
|
|
48
|
-
values.set(key, value);
|
|
49
|
-
return value;
|
|
50
|
-
}
|
|
51
|
-
cache.clear = (key) => {
|
|
52
|
-
values.delete(key);
|
|
53
|
-
startingCalculating.delete(key);
|
|
54
|
-
};
|
|
55
|
-
cache.forceSet = (key, value) => {
|
|
56
|
-
values.set(key, value);
|
|
57
|
-
startingCalculating.add(key);
|
|
58
|
-
};
|
|
59
|
-
cache.getAllKeys = () => {
|
|
60
|
-
return [...values.keys()];
|
|
61
|
-
};
|
|
62
|
-
cache.get = (key) => {
|
|
63
|
-
return values.get(key);
|
|
64
|
-
};
|
|
65
|
-
cache.clearAll = () => {
|
|
66
|
-
values.clear();
|
|
67
|
-
startingCalculating.clear();
|
|
68
|
-
};
|
|
69
|
-
return cache;
|
|
70
|
-
}
|
|
71
|
-
exports.cache = cache;
|
|
72
|
-
/** Makes a cache that limits the number of entries, allowing you to put arbitrary data in it
|
|
73
|
-
* without worrying about leaking memory
|
|
74
|
-
*/
|
|
75
|
-
function cacheLimited(
|
|
76
|
-
// NOTE: We can't calculate what limit should be based on comparing the evaluation time
|
|
77
|
-
// and the time to compare against the values. Because, even if finding a match takes far longer than
|
|
78
|
-
// calculating, keeping a consistent output can save (a considerable amount of) time in downstream caches.
|
|
79
|
-
maxCount, getValue) {
|
|
80
|
-
let startingCalculating = new Set();
|
|
81
|
-
let values = new Map();
|
|
82
|
-
function get(input) {
|
|
83
|
-
let key = input;
|
|
84
|
-
if (values.has(key)) {
|
|
85
|
-
return values.get(key);
|
|
86
|
-
}
|
|
87
|
-
if (startingCalculating.has(key)) {
|
|
88
|
-
throw new Error(`Cyclic access in cache`);
|
|
89
|
-
}
|
|
90
|
-
startingCalculating.add(key);
|
|
91
|
-
// Clear when it gets too big. This is kind of like a worse
|
|
92
|
-
// least recently used cache, because entries that are accessed
|
|
93
|
-
// often will quickly get put back in. This is effective as long
|
|
94
|
-
// as accesses take similar amounts of time. If there is a very slow
|
|
95
|
-
// and very commonly accessed value, it could be evicted by many very
|
|
96
|
-
// fast accesses, which would be unfortunate.
|
|
97
|
-
if (values.size >= maxCount) {
|
|
98
|
-
values.clear();
|
|
99
|
-
startingCalculating.clear();
|
|
100
|
-
}
|
|
101
|
-
let value = getValue(input);
|
|
102
|
-
values.set(key, value);
|
|
103
|
-
return value;
|
|
104
|
-
}
|
|
105
|
-
get["forceSet"] = (key, value) => {
|
|
106
|
-
values.set(key, value);
|
|
107
|
-
startingCalculating.add(key);
|
|
108
|
-
};
|
|
109
|
-
get["clearKey"] = (key) => {
|
|
110
|
-
values.delete(key);
|
|
111
|
-
startingCalculating.delete(key);
|
|
112
|
-
};
|
|
113
|
-
get["clear"] = () => {
|
|
114
|
-
values.clear();
|
|
115
|
-
startingCalculating.clear();
|
|
116
|
-
};
|
|
117
|
-
return get;
|
|
118
|
-
}
|
|
119
|
-
exports.cacheLimited = cacheLimited;
|
|
120
|
-
function cacheWeak(getValue) {
|
|
121
|
-
let state = {
|
|
122
|
-
startingCalculating: new WeakSet(),
|
|
123
|
-
values: new WeakMap(),
|
|
124
|
-
};
|
|
125
|
-
return (input) => {
|
|
126
|
-
let key = input;
|
|
127
|
-
if (state.values.has(key)) {
|
|
128
|
-
return state.values.get(key);
|
|
129
|
-
}
|
|
130
|
-
if (state.startingCalculating.has(key)) {
|
|
131
|
-
throw new Error(`Cyclic access in cacheWeak`);
|
|
132
|
-
}
|
|
133
|
-
state.startingCalculating.add(key);
|
|
134
|
-
let value = getValue(input);
|
|
135
|
-
state.values.set(key, value);
|
|
136
|
-
return value;
|
|
137
|
-
};
|
|
138
|
-
}
|
|
139
|
-
exports.cacheWeak = cacheWeak;
|
|
140
|
-
// A list cache, which... maybe faster than a Map?
|
|
141
|
-
function cacheList(getLength, getValue) {
|
|
142
|
-
let state = {
|
|
143
|
-
cache: [],
|
|
144
|
-
length: undefined,
|
|
145
|
-
getLength,
|
|
146
|
-
};
|
|
147
|
-
function get(i) {
|
|
148
|
-
let cache = state.cache;
|
|
149
|
-
let length = state.length;
|
|
150
|
-
if (length === undefined) {
|
|
151
|
-
length = state.length = state.getLength();
|
|
152
|
-
}
|
|
153
|
-
if (i < 0 || i >= length) {
|
|
154
|
-
throw new Error(`Index out of bounds`);
|
|
155
|
-
}
|
|
156
|
-
if (!(i in cache)) {
|
|
157
|
-
cache[i] = getValue(i);
|
|
158
|
-
}
|
|
159
|
-
return cache[i];
|
|
160
|
-
}
|
|
161
|
-
;
|
|
162
|
-
return get;
|
|
163
|
-
}
|
|
164
|
-
exports.cacheList = cacheList;
|
|
165
|
-
function cacheArrayEqualCleanup(state) {
|
|
166
|
-
state.cache = [];
|
|
167
|
-
}
|
|
168
|
-
/** A cache half way between caching based on === and caching based on hash. Caches
|
|
169
|
-
* based on arrayEqual, which does === on all values in an array. Requires localized
|
|
170
|
-
* caching (as the comparisons don't scale with many candidates, unlike hashing),
|
|
171
|
-
* however works with non trival transformations (ex, resolving many persisted overrides
|
|
172
|
-
* to get a value), unlike cache().
|
|
173
|
-
* Also, limits itself, more of a performance optimization than memory optimization, as it scales
|
|
174
|
-
* very poorly with the number of candidates.
|
|
175
|
-
*
|
|
176
|
-
* TIMING: About 6us with limit = 100, array size = 294, and the cache being full.
|
|
177
|
-
*/
|
|
178
|
-
function cacheArrayEqual(map, limit = 10) {
|
|
179
|
-
let state = { cache: [] };
|
|
180
|
-
function isMatch(lhs, rhs) {
|
|
181
|
-
if (lhs === rhs) {
|
|
182
|
-
return true;
|
|
183
|
-
}
|
|
184
|
-
if (lhs === undefined || rhs === undefined) {
|
|
185
|
-
return false;
|
|
186
|
-
}
|
|
187
|
-
if ((0, misc_1.arrayEqual)(lhs, rhs)) {
|
|
188
|
-
return true;
|
|
189
|
-
}
|
|
190
|
-
return false;
|
|
191
|
-
}
|
|
192
|
-
return Object.assign((input) => {
|
|
193
|
-
let cache = state.cache;
|
|
194
|
-
for (let obj of cache) {
|
|
195
|
-
if (isMatch(obj.input, input)) {
|
|
196
|
-
return obj.output;
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
let output = map(input);
|
|
200
|
-
cache.unshift({ input, output });
|
|
201
|
-
while (cache.length > limit) {
|
|
202
|
-
cache.pop();
|
|
203
|
-
}
|
|
204
|
-
return output;
|
|
205
|
-
}, {
|
|
206
|
-
clear(array) {
|
|
207
|
-
for (let i = state.cache.length - 1; i >= 0; i--) {
|
|
208
|
-
if (isMatch(state.cache[i].input, array)) {
|
|
209
|
-
state.cache.splice(i, 1);
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
},
|
|
213
|
-
clearAll() {
|
|
214
|
-
state.cache = [];
|
|
215
|
-
},
|
|
216
|
-
});
|
|
217
|
-
}
|
|
218
|
-
exports.cacheArrayEqual = cacheArrayEqual;
|
|
219
|
-
/** Caches when arguments are ===. See cacheArrayEqual */
|
|
220
|
-
function cacheArgsEqual(fnc, limit = 10) {
|
|
221
|
-
let cache = cacheArrayEqual(function cacheArgsEqual(args) {
|
|
222
|
-
return fnc(...args);
|
|
223
|
-
}, limit);
|
|
224
|
-
return Object.assign(((...args) => {
|
|
225
|
-
return cache(args);
|
|
226
|
-
}), {
|
|
227
|
-
clear(...args) {
|
|
228
|
-
cache.clear(args);
|
|
229
|
-
},
|
|
230
|
-
});
|
|
231
|
-
}
|
|
232
|
-
exports.cacheArgsEqual = cacheArgsEqual;
|
|
233
|
-
function cacheJSONArgsEqual(fnc, limit = 10) {
|
|
234
|
-
let cache = cacheLimited(limit, (argsJSON) => {
|
|
235
|
-
return fnc(...JSON.parse(argsJSON));
|
|
236
|
-
});
|
|
237
|
-
return Object.assign(((...args) => {
|
|
238
|
-
return cache(JSON.stringify(args));
|
|
239
|
-
}), {
|
|
240
|
-
clear(...args) {
|
|
241
|
-
cache.clearKey(JSON.stringify(args));
|
|
242
|
-
},
|
|
243
|
-
clearAll() {
|
|
244
|
-
cache.clear();
|
|
245
|
-
}
|
|
246
|
-
});
|
|
247
|
-
}
|
|
248
|
-
exports.cacheJSONArgsEqual = cacheJSONArgsEqual;
|
|
249
|
-
function cacheShallowConfigArgEqual(fnc, limit = 10) {
|
|
250
|
-
let cache = cacheArrayEqual((kvpsFlat) => {
|
|
251
|
-
output.missCount++;
|
|
252
|
-
let arg;
|
|
253
|
-
if (kvpsFlat.length === 1) {
|
|
254
|
-
arg = kvpsFlat[0];
|
|
255
|
-
}
|
|
256
|
-
else {
|
|
257
|
-
let kvps = [];
|
|
258
|
-
for (let i = 0; i < kvpsFlat.length; i += 2) {
|
|
259
|
-
kvps.push([kvpsFlat[i], kvpsFlat[i + 1]]);
|
|
260
|
-
}
|
|
261
|
-
arg = Object.fromEntries(kvps);
|
|
262
|
-
}
|
|
263
|
-
return fnc(arg);
|
|
264
|
-
}, limit);
|
|
265
|
-
function getKVPs(configArg) {
|
|
266
|
-
if (!(0, types_1.canHaveChildren)(configArg) || Array.isArray(configArg)) {
|
|
267
|
-
return [configArg];
|
|
268
|
-
}
|
|
269
|
-
let keys = Object.keys(configArg);
|
|
270
|
-
keys.sort();
|
|
271
|
-
return keys.flatMap(key => [key, configArg[key]]);
|
|
272
|
-
}
|
|
273
|
-
let output = Object.assign(((configArg) => {
|
|
274
|
-
output.callCount++;
|
|
275
|
-
return cache(getKVPs(configArg));
|
|
276
|
-
}), {
|
|
277
|
-
clear(configArg) {
|
|
278
|
-
cache.clear(getKVPs(configArg));
|
|
279
|
-
},
|
|
280
|
-
clearAll() {
|
|
281
|
-
cache.clearAll();
|
|
282
|
-
},
|
|
283
|
-
callCount: 0,
|
|
284
|
-
missCount: 0,
|
|
285
|
-
});
|
|
286
|
-
return output;
|
|
287
|
-
}
|
|
288
|
-
exports.cacheShallowConfigArgEqual = cacheShallowConfigArgEqual;
|
|
289
|
-
function externalCache() {
|
|
290
|
-
let values = new Map();
|
|
291
|
-
return {
|
|
292
|
-
get: (key) => {
|
|
293
|
-
return values.get(key);
|
|
294
|
-
},
|
|
295
|
-
set: (key, value) => {
|
|
296
|
-
values.set(key, value);
|
|
297
|
-
},
|
|
298
|
-
};
|
|
299
|
-
}
|
|
300
|
-
exports.externalCache = externalCache;
|
|
301
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNhY2hpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQW9DO0FBQ3BDLG1DQUE2RDtBQUU3RCxTQUFnQixJQUFJLENBQUksT0FBZ0I7SUFDcEMsSUFBSSxLQUFLLEdBQTZCLFNBQVMsQ0FBQztJQUNoRCxTQUFTLEdBQUc7UUFDUixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDVCxLQUFLLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDO0lBQ3ZCLENBQUM7SUFBQSxDQUFDO0lBQ0YsR0FBRyxDQUFDLEtBQUssR0FBRyxHQUFHLEVBQUU7UUFDYixLQUFLLEdBQUcsU0FBUyxDQUFDO0lBQ3RCLENBQUMsQ0FBQztJQUNGLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxRQUFXLEVBQUUsRUFBRTtRQUN0QixLQUFLLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDaEMsQ0FBQyxDQUFDO0lBQ0YsT0FBTyxHQUFHLENBQUM7QUFDZixDQUFDO0FBZkQsb0JBZUM7QUFhRCxvRkFBb0Y7QUFDcEYsNkNBQTZDO0FBQzdDLE1BQU0sVUFBVSxHQUFVLEVBQUUsQ0FBQztBQUM3QixTQUFnQixlQUFlLENBQUksS0FBVTtJQUN6QyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sVUFBVSxDQUFDO0lBQzFDLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUM7QUFIRCwwQ0FHQztBQUVELFNBQWdCLEtBQUssQ0FDakIsUUFBdUQ7SUFVdkQsSUFBSSxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsRUFBTyxDQUFDO0lBQ3pDLElBQUksTUFBTSxHQUFHLElBQUksR0FBRyxFQUFlLENBQUM7SUFDcEMsU0FBUyxLQUFLLENBQUMsS0FBVSxFQUFFLEdBQUcsU0FB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Q0ksS0FBSyxDQUFDLFNBQWlCO1lBQ25CLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUNELFFBQVE7WUFDSixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDckIsQ0FBQztRQUNELFNBQVMsRUFBRSxDQUFDO1FBQ1osU0FBUyxFQUFFLENBQUM7S0FDZixDQUNKLENBQUM7SUFDRixPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBOUNELGdFQThDQztBQUdELFNBQWdCLGFBQWE7SUFJekIsSUFBSSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQWMsQ0FBQztJQUNuQyxPQUFPO1FBQ0gsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDVCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0IsQ0FBQztRQUNELEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNoQixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzQixDQUFDO0tBQ0osQ0FBQztBQUNOLENBQUM7QUFiRCxzQ0FhQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFycmF5RXF1YWwgfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgeyBBbnlGdW5jdGlvbiwgQXJncywgY2FuSGF2ZUNoaWxkcmVuIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGxhenk8VD4oZmFjdG9yeTogKCkgPT4gVCkge1xuICAgIGxldCB2YWx1ZTogeyB2YWx1ZTogVCB9IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgdmFsdWUgPSB7IHZhbHVlOiBmYWN0b3J5KCkgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWUudmFsdWU7XG4gICAgfTtcbiAgICBnZXQucmVzZXQgPSAoKSA9PiB7XG4gICAgICAgIHZhbHVlID0gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgZ2V0LnNldCA9IChuZXdWYWx1ZTogVCkgPT4ge1xuICAgICAgICB2YWx1ZSA9IHsgdmFsdWU6IG5ld1ZhbHVlIH07XG4gICAgfTtcbiAgICByZXR1cm4gZ2V0O1xufVxuXG4vLyBOT1RFOiBUaGUgcmVhc29uIHdlIG5lZWQgdG8gcGVyaW9kaWNhbGx5IGNsZWFyLCBpcyBiZWNhdXNlIHNvbWV0aW1lcyBhIHZlcnkgc21hbGxcbi8vICAgICAgcGFydCBvZiBhIGxhcmdlIHBheWxvYWQgKGV4LCBwZXJzaXN0ZWQgb3ZlcnJpZGVzKSBpcyBjYWNoZWQsIHdoaWNoIHRoZW4gcmVzdWx0c1xuLy8gICAgICBpbiB0aGUgd2hvbGUgcGF5bG9hZCBiZWluZyBjYWNoZWQsIHdoaWNoIHJlc3VsdHMgaW4gYSBsb3Qgb2YgbWVtb3J5IGJlaW5nIHVzZWQuXG5cbi8vIElNUE9SVEFOVCEgVGhlIGNsZWFudXAgZnVuY3Rpb25zIENBTk5PVCBjbG9zZSB1cG9uIGFueXRoaW5nLCBvciBlbHNlIHRoZXkgd2lsbCBjYXVzZSBsZWFrcyFcbi8vICBBbGwgZGF0YSB0aGV5IHVzZSBzaG91bGQgYmUgaW4gZGF0YS5cbmludGVyZmFjZSBDbGVhbnVwRm5jPFQgZXh0ZW5kcyBvYmplY3Q+IHtcbiAgICAoZGF0YTogVCk6IHZvaWQ7XG59XG5cblxuLy8gTk9URTogRW1wdHkgYXJyYXlzIGFyZSBzbyBjb21tb24sIHRoYXQgaXQgaXMgdXNlZnVsIHRvIHJlcHJlc2VudCB0aGVtIGFzIHRoZSBzYW1lXG4vLyAgZW10cHkgYXJyYXksIHRvIGluY3JlYXNlIGNhY2hlIGhpdCByYXRlcy5cbmNvbnN0IGVtcHR5QXJyYXk6IGFueVtdID0gW107XG5leHBvcnQgZnVuY3Rpb24gY2FjaGVFbXB0eUFycmF5PFQ+KGFycmF5OiBUW10pOiBUW10ge1xuICAgIGlmIChhcnJheS5sZW5ndGggPT09IDApIHJldHVybiBlbXB0eUFycmF5O1xuICAgIHJldHVybiBhcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhY2hlPE91dHB1dCwgS2V5LCBVbnRyYWNrZWQgZXh0ZW5kcyB1bmtub3duW10+KFxuICAgIGdldFZhbHVlOiAoa2V5OiBLZXksIC4uLnVudHJhY2tlZDogVW50cmFja2VkKSA9PiBPdXRwdXRcbik6IHtcbiAgICAoa2V5OiBLZXksIC4uLnVudHJhY2tlZDogVW50cmFja2VkKTogT3V0cHV0O1xuICAgIC8vIE5PVEU6IElmIHlvdSB3YW50IHRvIGNsZWFyIGFsbCwganVzdCBtYWtlIGEgbmV3IGNhY2hlIVxuICAgIGNsZWFyKGtleTogS2V5KTogdm9pZDtcbiAgICBjbGVhckFsbCgpOiB2b2lkO1xuICAgIGZvcmNlU2V0KGtleTogS2V5LCB2YWx1ZTogT3V0cHV0KTogdm9pZDtcbiAgICBnZXRBbGxLZXlzKCk6IEtleVtdO1xuICAgIGdldChrZXk6IEtleSk6IE91dHB1dCB8IHVuZGVmaW5lZDtcbn0ge1xuICAgIGxldCBzdGFydGluZ0NhbGN1bGF0aW5nID0gbmV3IFNldDxLZXk+KCk7XG4gICAgbGV0IHZhbHVlcyA9IG5ldyBNYXA8S2V5LCBPdXRwdXQ+KCk7XG4gICAgZnVuY3Rpb24gY2FjaGUoaW5wdXQ6IEtleSwgLi4udW50cmFja2VkOiBVbnRyYWNrZWQpIHtcbiAgICAgICAgbGV0IGtleSA9IGlucHV0O1xuICAgICAgICBpZiAodmFsdWVzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWVzLmdldChrZXkpIGFzIGFueTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhcnRpbmdDYWxjdWxhdGluZy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgLy8gVE9ETzogRml4IHRoZSB0eXBlcyBoZXJlLCBieSB0aHJvd2luZywgYW5kIHRoZW4gZm9yIHRoZSBjYXNlc1xuICAgICAgICAgICAgLy8gIHRoYXQgZG9uJ3QgdGhyb3csIG1ha2Ugb3VyIG91dHB1dCB0eXBlIGluY2x1ZGUgdW5kZWZpbmVkXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHN0YXJ0aW5nQ2FsY3VsYXRpbmcuYWRkKGtleSk7XG4gICAgICAgIGxldCB2YWx1ZSA9IGdldFZhbHVlKGlucHV0LCAuLi51bnRyYWNrZWQpO1xuICAgICAgICB2YWx1ZXMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGNhY2hlLmNsZWFyID0gKGtleTogS2V5KSA9PiB7XG4gICAgICAgIHZhbHVlcy5kZWxldGUoa2V5KTtcbiAgICAgICAgc3RhcnRpbmdDYWxjdWxhdGluZy5kZWxldGUoa2V5KTtcbiAgICB9O1xuICAgIGNhY2hlLmZvcmNlU2V0ID0gKGtleTogS2V5LCB2YWx1ZTogT3V0cHV0KSA9PiB7XG4gICAgICAgIHZhbHVlcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIHN0YXJ0aW5nQ2FsY3VsYXRpbmcuYWRkKGtleSk7XG4gICAgfTtcbiAgICBjYWNoZS5nZXRBbGxLZXlzID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gWy4uLnZhbHVlcy5rZXlzKCldO1xuICAgIH07XG4gICAgY2FjaGUuZ2V0ID0gKGtleTogS2V5KSA9PiB7XG4gICAgICAgIHJldHVybiB2YWx1ZXMuZ2V0KGtleSk7XG4gICAgfTtcbiAgICBjYWNoZS5jbGVhckFsbCA9ICgpID0+IHtcbiAgICAgICAgdmFsdWVzLmNsZWFyKCk7XG4gICAgICAgIHN0YXJ0aW5nQ2FsY3VsYXRpbmcuY2xlYXIoKTtcbiAgICB9O1xuICAgIHJldHVybiBjYWNoZTtcbn1cblxuXG4vKiogTWFrZXMgYSBjYWNoZSB0aGF0IGxpbWl0cyB0aGUgbnVtYmVyIG9mIGVudHJpZXMsIGFsbG93aW5nIHlvdSB0byBwdXQgYXJiaXRyYXJ5IGRhdGEgaW4gaXRcbiAqICAgICAgd2l0aG91dCB3b3JyeWluZyBhYm91dCBsZWFraW5nIG1lbW9yeVxuICAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhY2hlTGltaXRlZDxPdXRwdXQsIEtleT4oXG4gICAgLy8gTk9URTogV2UgY2FuJ3QgY2FsY3VsYXRlIHdoYXQgbGltaXQgc2hvdWxkIGJlIGJhc2VkIG9uIGNvbXBhcmluZyB0aGUgZXZhbHVhdGlvbiB0aW1lXG4gICAgLy8gIGFuZCB0aGUgdGltZSB0byBjb21wYXJlIGFnYWluc3QgdGhlIHZhbHVlcy4gQmVjYXVzZSwgZXZlbiBpZiBmaW5kaW5nIGEgbWF0Y2ggdGFrZXMgZmFyIGxvbmdlciB0aGFuXG4gICAgLy8gIGNhbGN1bGF0aW5nLCBrZWVwaW5nIGEgY29uc2lzdGVudCBvdXRwdXQgY2FuIHNhdmUgKGEgY29uc2lkZXJhYmxlIGFtb3VudCBvZikgdGltZSBpbiBkb3duc3RyZWFtIGNhY2hlcy5cbiAgICBtYXhDb3VudDogbnVtYmVyLFxuICAgIGdldFZhbHVlOiAoa2V5OiBLZXkpID0+IE91dHB1dFxuKSB7XG4gICAgbGV0IHN0YXJ0aW5nQ2FsY3VsYXRpbmcgPSBuZXcgU2V0PEtleT4oKTtcbiAgICBsZXQgdmFsdWVzID0gbmV3IE1hcDxLZXksIE91dHB1dD4oKTtcbiAgICBmdW5jdGlvbiBnZXQoaW5wdXQ6IEtleSk6IE91dHB1dCB7XG4gICAgICAgIGxldCBrZXkgPSBpbnB1dDtcbiAgICAgICAgaWYgKHZhbHVlcy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlcy5nZXQoa2V5KSBhcyBhbnk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXJ0aW5nQ2FsY3VsYXRpbmcuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ3ljbGljIGFjY2VzcyBpbiBjYWNoZWApO1xuICAgICAgICB9XG4gICAgICAgIHN0YXJ0aW5nQ2FsY3VsYXRpbmcuYWRkKGtleSk7XG5cbiAgICAgICAgLy8gQ2xlYXIgd2hlbiBpdCBnZXRzIHRvbyBiaWcuIFRoaXMgaXMga2luZCBvZiBsaWtlIGEgd29yc2VcbiAgICAgICAgLy8gIGxlYXN0IHJlY2VudGx5IHVzZWQgY2FjaGUsIGJlY2F1c2UgZW50cmllcyB0aGF0IGFyZSBhY2Nlc3NlZFxuICAgICAgICAvLyAgb2Z0ZW4gd2lsbCBxdWlja2x5IGdldCBwdXQgYmFjayBpbi4gVGhpcyBpcyBlZmZlY3RpdmUgYXMgbG9uZ1xuICAgICAgICAvLyAgYXMgYWNjZXNzZXMgdGFrZSBzaW1pbGFyIGFtb3VudHMgb2YgdGltZS4gSWYgdGhlcmUgaXMgYSB2ZXJ5IHNsb3dcbiAgICAgICAgLy8gIGFuZCB2ZXJ5IGNvbW1vbmx5IGFjY2Vzc2VkIHZhbHVlLCBpdCBjb3VsZCBiZSBldmljdGVkIGJ5IG1hbnkgdmVyeVxuICAgICAgICAvLyAgZmFzdCBhY2Nlc3Nlcywgd2hpY2ggd291bGQgYmUgdW5mb3J0dW5hdGUuXG4gICAgICAgIGlmICh2YWx1ZXMuc2l6ZSA+PSBtYXhDb3VudCkge1xuICAgICAgICAgICAgdmFsdWVzLmNsZWFyKCk7XG4gICAgICAgICAgICBzdGFydGluZ0NhbGN1bGF0aW5nLmNsZWFyKCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdmFsdWUgPSBnZXRWYWx1ZShpbnB1dCk7XG4gICAgICAgIHZhbHVlcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgZ2V0W1wiZm9yY2VTZXRcIl0gPSAoa2V5OiBLZXksIHZhbHVlOiBPdXRwdXQpID0+IHtcbiAgICAgICAgdmFsdWVzLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgc3RhcnRpbmdDYWxjdWxhdGluZy5hZGQoa2V5KTtcbiAgICB9O1xuICAgIGdldFtcImNsZWFyS2V5XCJdID0gKGtleTogS2V5KSA9PiB7XG4gICAgICAgIHZhbHVlcy5kZWxldGUoa2V5KTtcbiAgICAgICAgc3RhcnRpbmdDYWxjdWxhdGluZy5kZWxldGUoa2V5KTtcbiAgICB9O1xuICAgIGdldFtcImNsZWFyXCJdID0gKCkgPT4ge1xuICAgICAgICB2YWx1ZXMuY2xlYXIoKTtcbiAgICAgICAgc3RhcnRpbmdDYWxjdWxhdGluZy5jbGVhcigpO1xuICAgIH07XG5cbiAgICByZXR1cm4gZ2V0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FjaGVXZWFrPE91dHB1dCwgS2V5IGV4dGVuZHMgb2JqZWN0PihnZXRWYWx1ZTogKGtleTogS2V5KSA9PiBPdXRwdXQpOiAoa2V5OiBLZXkpID0+IE91dHB1dCB7XG4gICAgbGV0IHN0YXRlID0ge1xuICAgICAgICBzdGFydGluZ0NhbGN1bGF0aW5nOiBuZXcgV2Vha1NldDxLZXk+KCksXG4gICAgICAgIHZhbHVlczogbmV3IFdlYWtNYXA8S2V5LCBPdXRwdXQ+KCksXG4gICAgfTtcblxuICAgIHJldHVybiAoaW5wdXQpID0+IHtcbiAgICAgICAgbGV0IGtleSA9IGlucHV0O1xuICAgICAgICBpZiAoc3RhdGUudmFsdWVzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhdGUudmFsdWVzLmdldChrZXkpIGFzIGFueTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdGUuc3RhcnRpbmdDYWxjdWxhdGluZy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDeWNsaWMgYWNjZXNzIGluIGNhY2hlV2Vha2ApO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlLnN0YXJ0aW5nQ2FsY3VsYXRpbmcuYWRkKGtleSk7XG4gICAgICAgIGxldCB2YWx1ZSA9IGdldFZhbHVlKGlucHV0KTtcbiAgICAgICAgc3RhdGUudmFsdWVzLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG59XG5cbi8vIEEgbGlzdCBjYWNoZSwgd2hpY2guLi4gbWF5YmUgZmFzdGVyIHRoYW4gYSBNYXA/XG5leHBvcnQgZnVuY3Rpb24gY2FjaGVMaXN0PFZhbHVlPihcbiAgICBnZXRMZW5ndGg6ICgpID0+IG51bWJlcixcbiAgICBnZXRWYWx1ZTogKGluZGV4OiBudW1iZXIpID0+IFZhbHVlLFxuKTogeyAoaW5kZXg6IG51bWJlcik6IFZhbHVlOyB9IHtcbiAgICBsZXQgc3RhdGUgPSB7XG4gICAgICAgIGNhY2hlOiBbXSBhcyBWYWx1ZVtdLFxuICAgICAgICBsZW5ndGg6IHVuZGVmaW5lZCBhcyB1bmRlZmluZWQgfCBudW1iZXIsXG4gICAgICAgIGdldExlbmd0aCxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGdldChpOiBudW1iZXIpIHtcbiAgICAgICAgbGV0IGNhY2hlID0gc3RhdGUuY2FjaGU7XG4gICAgICAgIGxldCBsZW5ndGggPSBzdGF0ZS5sZW5ndGg7XG4gICAgICAgIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbGVuZ3RoID0gc3RhdGUubGVuZ3RoID0gc3RhdGUuZ2V0TGVuZ3RoKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgPCAwIHx8IGkgPj0gbGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEluZGV4IG91dCBvZiBib3VuZHNgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIShpIGluIGNhY2hlKSkge1xuICAgICAgICAgICAgY2FjaGVbaV0gPSBnZXRWYWx1ZShpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FjaGVbaV07XG4gICAgfTtcbiAgICByZXR1cm4gZ2V0O1xufVxuXG5mdW5jdGlvbiBjYWNoZUFycmF5RXF1YWxDbGVhbnVwKHN0YXRlOiBhbnkpIHtcbiAgICBzdGF0ZS5jYWNoZSA9IFtdO1xufVxuXG4vKiogQSBjYWNoZSBoYWxmIHdheSBiZXR3ZWVuIGNhY2hpbmcgYmFzZWQgb24gPT09IGFuZCBjYWNoaW5nIGJhc2VkIG9uIGhhc2guIENhY2hlc1xuICogICAgICBiYXNlZCBvbiBhcnJheUVxdWFsLCB3aGljaCBkb2VzID09PSBvbiBhbGwgdmFsdWVzIGluIGFuIGFycmF5LiBSZXF1aXJlcyBsb2NhbGl6ZWRcbiAqICAgICAgY2FjaGluZyAoYXMgdGhlIGNvbXBhcmlzb25zIGRvbid0IHNjYWxlIHdpdGggbWFueSBjYW5kaWRhdGVzLCB1bmxpa2UgaGFzaGluZyksXG4gKiAgICAgIGhvd2V2ZXIgd29ya3Mgd2l0aCBub24gdHJpdmFsIHRyYW5zZm9ybWF0aW9ucyAoZXgsIHJlc29sdmluZyBtYW55IHBlcnNpc3RlZCBvdmVycmlkZXNcbiAqICAgICAgdG8gZ2V0IGEgdmFsdWUpLCB1bmxpa2UgY2FjaGUoKS5cbiAqICBBbHNvLCBsaW1pdHMgaXRzZWxmLCBtb3JlIG9mIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHRoYW4gbWVtb3J5IG9wdGltaXphdGlvbiwgYXMgaXQgc2NhbGVzXG4gKiAgICAgIHZlcnkgcG9vcmx5IHdpdGggdGhlIG51bWJlciBvZiBjYW5kaWRhdGVzLlxuICogIFxuICogIFRJTUlORzogQWJvdXQgNnVzIHdpdGggbGltaXQgPSAxMDAsIGFycmF5IHNpemUgPSAyOTQsIGFuZCB0aGUgY2FjaGUgYmVpbmcgZnVsbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhY2hlQXJyYXlFcXVhbDxJbnB1dCBleHRlbmRzIHVua25vd25bXSB8IHVuZGVmaW5lZCwgT3V0cHV0PihcbiAgICBtYXA6IChhcnJheXM6IElucHV0KSA9PiBPdXRwdXQsXG4gICAgbGltaXQgPSAxMFxuKToge1xuICAgIChhcnJheTogSW5wdXQpOiBPdXRwdXQ7XG4gICAgY2xlYXIoYXJyYXk6IElucHV0KTogdm9pZDtcbiAgICBjbGVhckFsbCgpOiB2b2lkO1xufSB7XG4gICAgbGV0IHN0YXRlOiB7XG4gICAgICAgIGNhY2hlOiB7XG4gICAgICAgICAgICBpbnB1dDogSW5wdXQ7XG4gICAgICAgICAgICBvdXRwdXQ6IE91dHB1dDtcbiAgICAgICAgfVtdXG4gICAgfSA9IHsgY2FjaGU6IFtdIH07XG4gICAgZnVuY3Rpb24gaXNNYXRjaChsaHM6IElucHV0LCByaHM6IElucHV0KSB7XG4gICAgICAgIGlmIChsaHMgPT09IHJocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxocyA9PT0gdW5kZWZpbmVkIHx8IHJocyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFycmF5RXF1YWwobGhzLCByaHMpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKFxuICAgICAgICAoaW5wdXQ6IElucHV0KSA9PiB7XG4gICAgICAgICAgICBsZXQgY2FjaGUgPSBzdGF0ZS5jYWNoZTtcbiAgICAgICAgICAgIGZvciAobGV0IG9iaiBvZiBjYWNoZSkge1xuICAgICAgICAgICAgICAgIGlmIChpc01hdGNoKG9iai5pbnB1dCwgaW5wdXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmoub3V0cHV0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBvdXRwdXQgPSBtYXAoaW5wdXQpO1xuICAgICAgICAgICAgY2FjaGUudW5zaGlmdCh7IGlucHV0LCBvdXRwdXQgfSk7XG4gICAgICAgICAgICB3aGlsZSAoY2FjaGUubGVuZ3RoID4gbGltaXQpIHtcbiAgICAgICAgICAgICAgICBjYWNoZS5wb3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNsZWFyKGFycmF5OiBJbnB1dCkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBzdGF0ZS5jYWNoZS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYXRjaChzdGF0ZS5jYWNoZVtpXS5pbnB1dCwgYXJyYXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5jYWNoZS5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xlYXJBbGwoKSB7XG4gICAgICAgICAgICAgICAgc3RhdGUuY2FjaGUgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH1cbiAgICApO1xufVxuXG4vKiogQ2FjaGVzIHdoZW4gYXJndW1lbnRzIGFyZSA9PT0uIFNlZSBjYWNoZUFycmF5RXF1YWwgKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWNoZUFyZ3NFcXVhbDxGbmMgZXh0ZW5kcyBBbnlGdW5jdGlvbj4oXG4gICAgZm5jOiBGbmMsXG4gICAgbGltaXQgPSAxMFxuKTogRm5jICYgeyBjbGVhciguLi5hcmdzOiBBcmdzPEZuYz4pOiB2b2lkIH0ge1xuICAgIGxldCBjYWNoZSA9IGNhY2hlQXJyYXlFcXVhbChmdW5jdGlvbiBjYWNoZUFyZ3NFcXVhbChhcmdzOiB1bmtub3duW10pIHtcbiAgICAgICAgcmV0dXJuIGZuYyguLi5hcmdzKTtcbiAgICB9LCBsaW1pdCk7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXG4gICAgICAgICgoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGUoYXJncyk7XG4gICAgICAgIH0pIGFzIEZuYyxcbiAgICAgICAge1xuICAgICAgICAgICAgY2xlYXIoLi4uYXJnczogdW5rbm93bltdKSB7XG4gICAgICAgICAgICAgICAgY2FjaGUuY2xlYXIoYXJncyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhY2hlSlNPTkFyZ3NFcXVhbDxGbmMgZXh0ZW5kcyBBbnlGdW5jdGlvbj4oXG4gICAgZm5jOiBGbmMsXG4gICAgbGltaXQgPSAxMFxuKSB7XG4gICAgbGV0IGNhY2hlID0gY2FjaGVMaW1pdGVkKGxpbWl0LCAoYXJnc0pTT046IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4gZm5jKC4uLkpTT04ucGFyc2UoYXJnc0pTT04pKTtcbiAgICB9KTtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgKCguLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjYWNoZShKU09OLnN0cmluZ2lmeShhcmdzKSk7XG4gICAgICAgIH0pIGFzIEZuYyxcbiAgICAgICAge1xuICAgICAgICAgICAgY2xlYXIoLi4uYXJnczogdW5rbm93bltdKSB7XG4gICAgICAgICAgICAgICAgY2FjaGUuY2xlYXJLZXkoSlNPTi5zdHJpbmdpZnkoYXJncykpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsZWFyQWxsKCkge1xuICAgICAgICAgICAgICAgIGNhY2hlLmNsZWFyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FjaGVTaGFsbG93Q29uZmlnQXJnRXF1YWw8Rm5jIGV4dGVuZHMgQW55RnVuY3Rpb24+KFxuICAgIGZuYzogRm5jLFxuICAgIGxpbWl0ID0gMTBcbik6IEZuYyAmIHtcbiAgICBjbGVhcihjb25maWdPYmo6IEFyZ3M8Rm5jPlswXSk6IHZvaWQ7XG4gICAgY2xlYXJBbGwoKTogdm9pZDtcbn0ge1xuICAgIGxldCBjYWNoZSA9IGNhY2hlQXJyYXlFcXVhbCgoa3Zwc0ZsYXQ6IHVua25vd25bXSkgPT4ge1xuICAgICAgICBvdXRwdXQubWlzc0NvdW50Kys7XG4gICAgICAgIGxldCBhcmc6IGFueTtcbiAgICAgICAgaWYgKGt2cHNGbGF0Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgYXJnID0ga3Zwc0ZsYXRbMF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQga3ZwczogW3Vua25vd24sIHVua25vd25dW10gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga3Zwc0ZsYXQubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgICAgICAgICBrdnBzLnB1c2goW2t2cHNGbGF0W2ldLCBrdnBzRmxhdFtpICsgMV1dKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFyZyA9IE9iamVjdC5mcm9tRW50cmllcyhrdnBzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm5jKGFyZyk7XG4gICAgfSwgbGltaXQpO1xuICAgIGZ1bmN0aW9uIGdldEtWUHMoY29uZmlnQXJnOiBvYmplY3QpIHtcbiAgICAgICAgaWYgKCFjYW5IYXZlQ2hpbGRyZW4oY29uZmlnQXJnKSB8fCBBcnJheS5pc0FycmF5KGNvbmZpZ0FyZykpIHtcbiAgICAgICAgICAgIHJldHVybiBbY29uZmlnQXJnXTtcbiAgICAgICAgfVxuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKGNvbmZpZ0FyZyk7XG4gICAgICAgIGtleXMuc29ydCgpO1xuICAgICAgICByZXR1cm4ga2V5cy5mbGF0TWFwKGtleSA9PiBba2V5LCBjb25maWdBcmdba2V5XV0pO1xuICAgIH1cbiAgICBsZXQgb3V0cHV0ID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgKChjb25maWdBcmc6IG9iamVjdCkgPT4ge1xuICAgICAgICAgICAgb3V0cHV0LmNhbGxDb3VudCsrO1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlKGdldEtWUHMoY29uZmlnQXJnKSk7XG4gICAgICAgIH0pIGFzIEZuYyxcbiAgICAgICAge1xuICAgICAgICAgICAgY2xlYXIoY29uZmlnQXJnOiBvYmplY3QpIHtcbiAgICAgICAgICAgICAgICBjYWNoZS5jbGVhcihnZXRLVlBzKGNvbmZpZ0FyZykpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsZWFyQWxsKCkge1xuICAgICAgICAgICAgICAgIGNhY2hlLmNsZWFyQWxsKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FsbENvdW50OiAwLFxuICAgICAgICAgICAgbWlzc0NvdW50OiAwLFxuICAgICAgICB9XG4gICAgKTtcbiAgICByZXR1cm4gb3V0cHV0O1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBleHRlcm5hbENhY2hlPEtleSwgVmFsdWU+KCk6IHtcbiAgICBnZXQ6IChrZXk6IEtleSkgPT4gVmFsdWUgfCB1bmRlZmluZWQ7XG4gICAgc2V0OiAoa2V5OiBLZXksIHZhbHVlOiBWYWx1ZSkgPT4gdm9pZDtcbn0ge1xuICAgIGxldCB2YWx1ZXMgPSBuZXcgTWFwPEtleSwgVmFsdWU+KCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0OiAoa2V5KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWVzLmdldChrZXkpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IChrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB2YWx1ZXMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB9LFxuICAgIH07XG59Il19
|
|
302
|
-
/* _JS_SOURCE_HASH = "cfc19e21a28cd6de3caf3ba9b26f13ac0c827759c8cb633634a3990212104ec4"; */
|