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.
Files changed (51) hide show
  1. package/SocketFunction.d.ts +1 -1
  2. package/SocketFunctionTypes.d.ts +1 -1
  3. package/hot/HotReloadController.d.ts +3 -3
  4. package/index.d.ts +25 -10
  5. package/package.json +1 -1
  6. package/require/CSSShim.d.ts +1 -1
  7. package/require/RequireController.d.ts +2 -2
  8. package/require/compileFlags.d.ts +1 -1
  9. package/require/require.d.ts +1 -1
  10. package/src/callManager.d.ts +1 -1
  11. package/test.ts +5 -11
  12. package/time/trueTimeShim.d.ts +16 -1
  13. package/time/trueTimeShim.ts +121 -34
  14. package/dist/SetProcessVariables.ts.cache +0 -9
  15. package/dist/SocketFunction.ts.cache +0 -467
  16. package/hot/dist/HotReloadController.ts.cache +0 -252
  17. package/require/dist/RequireController.ts.cache +0 -386
  18. package/require/dist/compileFlags.ts.cache +0 -41
  19. package/require/dist/extMapper.ts.cache +0 -368
  20. package/require/dist/require.ts.cache +0 -676
  21. package/src/JSONLACKS/dist/JSONLACKS.ts.cache +0 -469
  22. package/src/dist/CallFactory.ts.cache +0 -930
  23. package/src/dist/Zip.ts.cache +0 -156
  24. package/src/dist/batching.ts.cache +0 -377
  25. package/src/dist/bits.ts.cache +0 -121
  26. package/src/dist/buffers.ts.cache +0 -76
  27. package/src/dist/caching.ts.cache +0 -302
  28. package/src/dist/callHTTPHandler.ts.cache +0 -264
  29. package/src/dist/callManager.ts.cache +0 -159
  30. package/src/dist/certStore.ts.cache +0 -59
  31. package/src/dist/createSingleton.ts.cache +0 -62
  32. package/src/dist/fixLargeNetworkCalls.ts.cache +0 -17
  33. package/src/dist/forwardPort.ts.cache +0 -222
  34. package/src/dist/https.ts.cache +0 -141
  35. package/src/dist/misc.ts.cache +0 -499
  36. package/src/dist/nodeCache.ts.cache +0 -136
  37. package/src/dist/nodeProxy.ts.cache +0 -57
  38. package/src/dist/protocolNegotiation.ts.cache +0 -101
  39. package/src/dist/tlsParsing.ts.cache +0 -85
  40. package/src/dist/types.ts.cache +0 -9
  41. package/src/dist/webSocketServer.ts.cache +0 -365
  42. package/src/dist/websocketFactory.ts.cache +0 -53
  43. package/src/formatting/dist/colors.ts.cache +0 -98
  44. package/src/formatting/dist/format.ts.cache +0 -396
  45. package/src/formatting/dist/logColors.ts.cache +0 -28
  46. package/src/lz4/dist/LZ4.ts.cache +0 -53
  47. package/src/profiling/dist/getOwnTime.ts.cache +0 -100
  48. package/src/profiling/dist/measure.ts.cache +0 -338
  49. package/src/profiling/dist/stats.ts.cache +0 -202
  50. package/src/profiling/dist/statsFormat.ts.cache +0 -45
  51. package/time/dist/trueTimeShim.ts.cache +0 -656
@@ -1,202 +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
- // See statsFormat.ts:formatStats for a nice way to format a stats value
3
- Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
4
- //exports.getStatsTop = exports.addToStats = exports.addToStatsValue = exports.createStatsValue = void 0;
5
- function createStatsValue() {
6
- return {
7
- count: 0,
8
- sum: 0,
9
- sumSquares: 0,
10
- logn7Value: 0, logn7Count: 0, logn6Value: 0, logn6Count: 0, logn5Value: 0, logn5Count: 0, logn4Value: 0, logn4Count: 0, logn3Value: 0, logn3Count: 0, logn2Value: 0, logn2Count: 0, logn1Value: 0, logn1Count: 0, log0Value: 0, log0VCount: 0, log1Value: 0, log1VCount: 0, log2Value: 0, log2VCount: 0, log3Value: 0, log3VCount: 0, log4Value: 0, log4VCount: 0, log5Value: 0, log5VCount: 0, log6Value: 0, log6VCount: 0, log7Value: 0, log7VCount: 0, log8Value: 0, log8VCount: 0, log9Value: 0, log9VCount: 0,
11
- };
12
- }
13
- exports.createStatsValue = createStatsValue;
14
- // TIMING: Between 5.6ns and 8ns, depending on the size of the value (smaller values are faster to add)
15
- // - A C++ implementation takes about 3.5ns, so... this is pretty fast!
16
- function addToStatsValue(stats, value) {
17
- stats.count++;
18
- stats.sum += value;
19
- stats.sumSquares += value * value;
20
- if (value < 0.000001) {
21
- stats.logn7Value += value;
22
- stats.logn7Count++;
23
- }
24
- else if (value < 0.00001) {
25
- stats.logn6Value += value;
26
- stats.logn6Count++;
27
- }
28
- else if (value < 0.0001) {
29
- stats.logn5Value += value;
30
- stats.logn5Count++;
31
- }
32
- else if (value < 0.001) {
33
- stats.logn4Value += value;
34
- stats.logn4Count++;
35
- }
36
- else if (value < 0.01) {
37
- stats.logn3Value += value;
38
- stats.logn3Count++;
39
- }
40
- else if (value < 0.1) {
41
- stats.logn2Value += value;
42
- stats.logn2Count++;
43
- }
44
- else if (value < 1) {
45
- stats.logn1Value += value;
46
- stats.logn1Count++;
47
- }
48
- else if (value < 10) {
49
- stats.log0Value += value;
50
- stats.log0VCount++;
51
- }
52
- else if (value < 100) {
53
- stats.log1Value += value;
54
- stats.log1VCount++;
55
- }
56
- else if (value < 1000) {
57
- stats.log2Value += value;
58
- stats.log2VCount++;
59
- }
60
- else if (value < 10000) {
61
- stats.log3Value += value;
62
- stats.log3VCount++;
63
- }
64
- else if (value < 100000) {
65
- stats.log4Value += value;
66
- stats.log4VCount++;
67
- }
68
- else if (value < 1000000) {
69
- stats.log5Value += value;
70
- stats.log5VCount++;
71
- }
72
- else if (value < 10000000) {
73
- stats.log6Value += value;
74
- stats.log6VCount++;
75
- }
76
- else if (value < 100000000) {
77
- stats.log7Value += value;
78
- stats.log7VCount++;
79
- }
80
- else if (value < 1000000000) {
81
- stats.log8Value += value;
82
- stats.log8VCount++;
83
- }
84
- else {
85
- stats.log9Value += value;
86
- stats.log9VCount++;
87
- }
88
- }
89
- exports.addToStatsValue = addToStatsValue;
90
- function addToStats(stats, other) {
91
- stats.count += other.count;
92
- stats.sum += other.sum;
93
- stats.sumSquares += other.sumSquares;
94
- stats.logn7Value += other.logn7Value;
95
- stats.logn7Count += other.logn7Count;
96
- stats.logn6Value += other.logn6Value;
97
- stats.logn6Count += other.logn6Count;
98
- stats.logn5Value += other.logn5Value;
99
- stats.logn5Count += other.logn5Count;
100
- stats.logn4Value += other.logn4Value;
101
- stats.logn4Count += other.logn4Count;
102
- stats.logn3Value += other.logn3Value;
103
- stats.logn3Count += other.logn3Count;
104
- stats.logn2Value += other.logn2Value;
105
- stats.logn2Count += other.logn2Count;
106
- stats.logn1Value += other.logn1Value;
107
- stats.logn1Count += other.logn1Count;
108
- stats.log0Value += other.log0Value;
109
- stats.log0VCount += other.log0VCount;
110
- stats.log1Value += other.log1Value;
111
- stats.log1VCount += other.log1VCount;
112
- stats.log2Value += other.log2Value;
113
- stats.log2VCount += other.log2VCount;
114
- stats.log3Value += other.log3Value;
115
- stats.log3VCount += other.log3VCount;
116
- stats.log4Value += other.log4Value;
117
- stats.log4VCount += other.log4VCount;
118
- stats.log5Value += other.log5Value;
119
- stats.log5VCount += other.log5VCount;
120
- stats.log6Value += other.log6Value;
121
- stats.log6VCount += other.log6VCount;
122
- stats.log7Value += other.log7Value;
123
- stats.log7VCount += other.log7VCount;
124
- stats.log8Value += other.log8Value;
125
- stats.log8VCount += other.log8VCount;
126
- stats.log9Value += other.log9Value;
127
- stats.log9VCount += other.log9VCount;
128
- }
129
- exports.addToStats = addToStats;
130
- // Ordered from lowest average to highest average
131
- function getStatsBuckets(stats) {
132
- return [
133
- { sum: stats.logn7Value, count: stats.logn7Count },
134
- { sum: stats.logn6Value, count: stats.logn6Count },
135
- { sum: stats.logn5Value, count: stats.logn5Count },
136
- { sum: stats.logn4Value, count: stats.logn4Count },
137
- { sum: stats.logn3Value, count: stats.logn3Count },
138
- { sum: stats.logn2Value, count: stats.logn2Count },
139
- { sum: stats.logn1Value, count: stats.logn1Count },
140
- { sum: stats.log0Value, count: stats.log0VCount },
141
- { sum: stats.log1Value, count: stats.log1VCount },
142
- { sum: stats.log2Value, count: stats.log2VCount },
143
- { sum: stats.log3Value, count: stats.log3VCount },
144
- { sum: stats.log4Value, count: stats.log4VCount },
145
- { sum: stats.log5Value, count: stats.log5VCount },
146
- { sum: stats.log6Value, count: stats.log6VCount },
147
- { sum: stats.log7Value, count: stats.log7VCount },
148
- { sum: stats.log8Value, count: stats.log8VCount },
149
- { sum: stats.log9Value, count: stats.log9VCount },
150
- ];
151
- }
152
- /** Identifies cases where the value is concentrated in few instances. This indicates most of the value (time)
153
- * is not spent on the common case, but on an outlier. Which isn't a problem, it just means that the measurements
154
- * should be more precise, to pull that heavy case out.
155
- */
156
- function getStatsTop(stats) {
157
- if (stats.sum === 0) {
158
- return { countFraction: 1, valueFraction: 1, count: 0, value: 0, topHeavy: false, };
159
- }
160
- const minFraction = 0.2;
161
- let totalSum = stats.sum;
162
- let totalCount = stats.count;
163
- let totalMean = totalSum / totalCount;
164
- // Find the sum above the average (with a minimum of minFraction, as sometimes there isn't really anything above the average)
165
- let buckets = getStatsBuckets(stats);
166
- buckets.reverse();
167
- let curSum = 0;
168
- let curCount = 0;
169
- for (let entry of buckets) {
170
- let mean = entry.sum / entry.count;
171
- if (curSum > totalSum * minFraction && mean < totalMean)
172
- break;
173
- curSum += entry.sum;
174
- curCount += entry.count;
175
- }
176
- let countFraction = curCount / totalCount;
177
- let valueFraction = curSum / totalSum;
178
- return {
179
- countFraction,
180
- valueFraction,
181
- count: curCount,
182
- value: curSum,
183
- // If more than 50% is above the average, it's top heavy
184
- topHeavy: valueFraction / countFraction > 2 && valueFraction > 0.4,
185
- };
186
- }
187
- exports.getStatsTop = getStatsTop;
188
- function benchmarkAddToStats() {
189
- let stats = createStatsValue();
190
- let start = Date.now();
191
- const count = 1000000;
192
- for (let i = 0; i < count; i++) {
193
- addToStatsValue(stats, 10000000000);
194
- }
195
- let end = Date.now();
196
- let time = end - start;
197
- let timePer = (time) / count * 1000 * 1000;
198
- console.log(`Time per: ${timePer}ns, in ${time}ms`);
199
- }
200
- //benchmarkAddToStats();
201
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzdGF0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsd0VBQXdFOzs7QUFZeEUsU0FBZ0IsZ0JBQWdCO0lBQzVCLE9BQU87UUFDSCxLQUFLLEVBQUUsQ0FBQztRQUNSLEdBQUcsRUFBRSxDQUFDO1FBQ04sVUFBVSxFQUFFLENBQUM7UUFDYixVQUFVLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQztLQUNyZixDQUFDO0FBQ04sQ0FBQztBQVBELDRDQU9DO0FBRUQsdUdBQXVHO0FBQ3ZHLHdFQUF3RTtBQUN4RSxTQUFnQixlQUFlLENBQUMsS0FBaUIsRUFBRSxLQUFhO0lBQzVELEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNkLEtBQUssQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDO0lBQ25CLEtBQUssQ0FBQyxVQUFVLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNsQyxJQUFJLEtBQUssR0FBRyxRQUFRLEVBQUUsQ0FBQztRQUNuQixLQUFLLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQztRQUMxQixLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdkIsQ0FBQztTQUFNLElBQUksS0FBSyxHQUFHLE9BQU8sRUFBRSxDQUFDO1FBQ3pCLEtBQUssQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDO1FBQzFCLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN2QixDQUFDO1NBQU0sSUFBSSxLQUFLLEdBQUcsTUFBTSxFQUFFLENBQUM7UUFDeEIsS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUM7UUFDMUIsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7U0FBTSxJQUFJLEtBQUssR0FBRyxLQUFLLEVBQUUsQ0FBQztRQUN2QixLQUFLLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQztRQUMxQixLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdkIsQ0FBQztTQUFNLElBQUksS0FBSyxHQUFHLElBQUksRUFBRSxDQUFDO1FBQ3RCLEtBQUssQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDO1FBQzFCLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN2QixDQUFDO1NBQU0sSUFBSSxLQUFLLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDckIsS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUM7UUFDMUIsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7U0FBTSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNuQixLQUFLLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQztRQUMxQixLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdkIsQ0FBQztTQUFNLElBQUksS0FBSyxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQ3BCLEtBQUssQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDO1FBQ3pCLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN2QixDQUFDO1NBQU0sSUFBSSxLQUFLLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDckIsS0FBSyxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUM7UUFDekIsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7U0FBTSxJQUFJLEtBQUssR0FBRyxJQUFJLEVBQUUsQ0FBQztRQUN0QixLQUFLLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQztRQUN6QixLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdkIsQ0FBQztTQUFNLElBQUksS0FBSyxHQUFHLEtBQUssRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDO1FBQ3pCLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN2QixDQUFDO1NBQU0sSUFBSSxLQUFLLEdBQUcsTUFBTSxFQUFFLENBQUM7UUFDeEIsS0FBSyxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUM7UUFDekIsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7U0FBTSxJQUFJLEtBQUssR0FBRyxPQUFPLEVBQUUsQ0FBQztRQUN6QixLQUFLLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQztRQUN6QixLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdkIsQ0FBQztTQUFNLElBQUksS0FBSyxHQUFHLFFBQVEsRUFBRSxDQUFDO1FBQzFCLEtBQUssQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDO1FBQ3pCLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN2QixDQUFDO1NBQU0sSUFBSSxLQUFLLEdBQUcsU0FBUyxFQUFFLENBQUM7UUFDM0IsS0FBSyxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUM7UUFDekIsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7U0FBTSxJQUFJLEtBQUssR0FBRyxVQUFVLEVBQUUsQ0FBQztRQUM1QixLQUFLLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQztRQUN6QixLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdkIsQ0FBQztTQUFNLENBQUM7UUFDSixLQUFLLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQztRQUN6QixLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdkIsQ0FBQztBQUNMLENBQUM7QUF4REQsMENBd0RDO0FBRUQsU0FBZ0IsVUFBVSxDQUFDLEtBQWlCLEVBQUUsS0FBaUI7SUFDM0QsS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDO0lBQzNCLEtBQUssQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQztJQUN2QixLQUFLLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUM7SUFDckMsS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO0lBQ3JDLEtBQUssQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQztJQUNyQyxLQUFLLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUM7SUFDckMsS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO0lBQ3JDLEtBQUssQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQztJQUNyQyxLQUFLLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUM7SUFDckMsS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO0lBQ3JDLEtBQUssQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQztJQUNyQyxLQUFLLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUM7SUFDckMsS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO0lBQ3JDLEtBQUssQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQztJQUNyQyxLQUFLLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUM7SUFDckMsS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO0lBQ3JDLEtBQUssQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQztJQUNyQyxLQUFLLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUM7SUFDbkMsS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO0lBQ3JDLEtBQUssQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQztJQUNuQyxLQUFLLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUM7SUFDckMsS0FBSyxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDO0lBQ25DLEtBQUssQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQztJQUNyQyxLQUFLLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUM7SUFDbkMsS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO0lBQ3JDLEtBQUssQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQztJQUNuQyxLQUFLLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUM7SUFDckMsS0FBSyxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDO0lBQ25DLEtBQUssQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQztJQUNyQyxLQUFLLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUM7SUFDbkMsS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO0lBQ3JDLEtBQUssQ0FBQyxTQUFTLElBQUksS0FBSyxD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QU8sQ0FBQztJQUN0QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDN0IsZUFBZSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7SUFDdkIsSUFBSSxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztJQUMzQyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsT0FBTyxVQUFVLElBQUksSUFBSSxDQUFDLENBQUM7QUFDeEQsQ0FBQztBQUNELHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbIi8vIFNlZSBzdGF0c0Zvcm1hdC50czpmb3JtYXRTdGF0cyBmb3IgYSBuaWNlIHdheSB0byBmb3JtYXQgYSBzdGF0cyB2YWx1ZVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRzVmFsdWUge1xuICAgIGNvdW50OiBudW1iZXI7XG4gICAgc3VtOiBudW1iZXI7XG4gICAgc3VtU3F1YXJlczogbnVtYmVyO1xuXG4gICAgLy8gQWxsIGxvZ3MgdXNlIGJhc2UgMTBcbiAgICAvLyAgVGhpcyBzdXBwb3J0cyB2YWx1ZXMgZnJvbSAwLjFucyB0byAxIHdlZWtcbiAgICBsb2duN1ZhbHVlOiBudW1iZXI7IGxvZ243Q291bnQ6IG51bWJlcjsgbG9nbjZWYWx1ZTogbnVtYmVyOyBsb2duNkNvdW50OiBudW1iZXI7IGxvZ241VmFsdWU6IG51bWJlcjsgbG9nbjVDb3VudDogbnVtYmVyOyBsb2duNFZhbHVlOiBudW1iZXI7IGxvZ240Q291bnQ6IG51bWJlcjsgbG9nbjNWYWx1ZTogbnVtYmVyOyBsb2duM0NvdW50OiBudW1iZXI7IGxvZ24yVmFsdWU6IG51bWJlcjsgbG9nbjJDb3VudDogbnVtYmVyOyBsb2duMVZhbHVlOiBudW1iZXI7IGxvZ24xQ291bnQ6IG51bWJlcjsgbG9nMFZhbHVlOiBudW1iZXI7IGxvZzBWQ291bnQ6IG51bWJlcjsgbG9nMVZhbHVlOiBudW1iZXI7IGxvZzFWQ291bnQ6IG51bWJlcjsgbG9nMlZhbHVlOiBudW1iZXI7IGxvZzJWQ291bnQ6IG51bWJlcjsgbG9nM1ZhbHVlOiBudW1iZXI7IGxvZzNWQ291bnQ6IG51bWJlcjsgbG9nNFZhbHVlOiBudW1iZXI7IGxvZzRWQ291bnQ6IG51bWJlcjsgbG9nNVZhbHVlOiBudW1iZXI7IGxvZzVWQ291bnQ6IG51bWJlcjsgbG9nNlZhbHVlOiBudW1iZXI7IGxvZzZWQ291bnQ6IG51bWJlcjsgbG9nN1ZhbHVlOiBudW1iZXI7IGxvZzdWQ291bnQ6IG51bWJlcjsgbG9nOFZhbHVlOiBudW1iZXI7IGxvZzhWQ291bnQ6IG51bWJlcjsgbG9nOVZhbHVlOiBudW1iZXI7IGxvZzlWQ291bnQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN0YXRzVmFsdWUoKTogU3RhdHNWYWx1ZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY291bnQ6IDAsXG4gICAgICAgIHN1bTogMCxcbiAgICAgICAgc3VtU3F1YXJlczogMCxcbiAgICAgICAgbG9nbjdWYWx1ZTogMCwgbG9nbjdDb3VudDogMCwgbG9nbjZWYWx1ZTogMCwgbG9nbjZDb3VudDogMCwgbG9nbjVWYWx1ZTogMCwgbG9nbjVDb3VudDogMCwgbG9nbjRWYWx1ZTogMCwgbG9nbjRDb3VudDogMCwgbG9nbjNWYWx1ZTogMCwgbG9nbjNDb3VudDogMCwgbG9nbjJWYWx1ZTogMCwgbG9nbjJDb3VudDogMCwgbG9nbjFWYWx1ZTogMCwgbG9nbjFDb3VudDogMCwgbG9nMFZhbHVlOiAwLCBsb2cwVkNvdW50OiAwLCBsb2cxVmFsdWU6IDAsIGxvZzFWQ291bnQ6IDAsIGxvZzJWYWx1ZTogMCwgbG9nMlZDb3VudDogMCwgbG9nM1ZhbHVlOiAwLCBsb2czVkNvdW50OiAwLCBsb2c0VmFsdWU6IDAsIGxvZzRWQ291bnQ6IDAsIGxvZzVWYWx1ZTogMCwgbG9nNVZDb3VudDogMCwgbG9nNlZhbHVlOiAwLCBsb2c2VkNvdW50OiAwLCBsb2c3VmFsdWU6IDAsIGxvZzdWQ291bnQ6IDAsIGxvZzhWYWx1ZTogMCwgbG9nOFZDb3VudDogMCwgbG9nOVZhbHVlOiAwLCBsb2c5VkNvdW50OiAwLFxuICAgIH07XG59XG5cbi8vIFRJTUlORzogQmV0d2VlbiA1LjZucyBhbmQgOG5zLCBkZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgdGhlIHZhbHVlIChzbWFsbGVyIHZhbHVlcyBhcmUgZmFzdGVyIHRvIGFkZClcbi8vICAtIEEgQysrIGltcGxlbWVudGF0aW9uIHRha2VzIGFib3V0IDMuNW5zLCBzby4uLiB0aGlzIGlzIHByZXR0eSBmYXN0IVxuZXhwb3J0IGZ1bmN0aW9uIGFkZFRvU3RhdHNWYWx1ZShzdGF0czogU3RhdHNWYWx1ZSwgdmFsdWU6IG51bWJlcikge1xuICAgIHN0YXRzLmNvdW50Kys7XG4gICAgc3RhdHMuc3VtICs9IHZhbHVlO1xuICAgIHN0YXRzLnN1bVNxdWFyZXMgKz0gdmFsdWUgKiB2YWx1ZTtcbiAgICBpZiAodmFsdWUgPCAwLjAwMDAwMSkge1xuICAgICAgICBzdGF0cy5sb2duN1ZhbHVlICs9IHZhbHVlO1xuICAgICAgICBzdGF0cy5sb2duN0NvdW50Kys7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA8IDAuMDAwMDEpIHtcbiAgICAgICAgc3RhdHMubG9nbjZWYWx1ZSArPSB2YWx1ZTtcbiAgICAgICAgc3RhdHMubG9nbjZDb3VudCsrO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPCAwLjAwMDEpIHtcbiAgICAgICAgc3RhdHMubG9nbjVWYWx1ZSArPSB2YWx1ZTtcbiAgICAgICAgc3RhdHMubG9nbjVDb3VudCsrO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPCAwLjAwMSkge1xuICAgICAgICBzdGF0cy5sb2duNFZhbHVlICs9IHZhbHVlO1xuICAgICAgICBzdGF0cy5sb2duNENvdW50Kys7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA8IDAuMDEpIHtcbiAgICAgICAgc3RhdHMubG9nbjNWYWx1ZSArPSB2YWx1ZTtcbiAgICAgICAgc3RhdHMubG9nbjNDb3VudCsrO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPCAwLjEpIHtcbiAgICAgICAgc3RhdHMubG9nbjJWYWx1ZSArPSB2YWx1ZTtcbiAgICAgICAgc3RhdHMubG9nbjJDb3VudCsrO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPCAxKSB7XG4gICAgICAgIHN0YXRzLmxvZ24xVmFsdWUgKz0gdmFsdWU7XG4gICAgICAgIHN0YXRzLmxvZ24xQ291bnQrKztcbiAgICB9IGVsc2UgaWYgKHZhbHVlIDwgMTApIHtcbiAgICAgICAgc3RhdHMubG9nMFZhbHVlICs9IHZhbHVlO1xuICAgICAgICBzdGF0cy5sb2cwVkNvdW50Kys7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA8IDEwMCkge1xuICAgICAgICBzdGF0cy5sb2cxVmFsdWUgKz0gdmFsdWU7XG4gICAgICAgIHN0YXRzLmxvZzFWQ291bnQrKztcbiAgICB9IGVsc2UgaWYgKHZhbHVlIDwgMTAwMCkge1xuICAgICAgICBzdGF0cy5sb2cyVmFsdWUgKz0gdmFsdWU7XG4gICAgICAgIHN0YXRzLmxvZzJWQ291bnQrKztcbiAgICB9IGVsc2UgaWYgKHZhbHVlIDwgMTAwMDApIHtcbiAgICAgICAgc3RhdHMubG9nM1ZhbHVlICs9IHZhbHVlO1xuICAgICAgICBzdGF0cy5sb2czVkNvdW50Kys7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA8IDEwMDAwMCkge1xuICAgICAgICBzdGF0cy5sb2c0VmFsdWUgKz0gdmFsdWU7XG4gICAgICAgIHN0YXRzLmxvZzRWQ291bnQrKztcbiAgICB9IGVsc2UgaWYgKHZhbHVlIDwgMTAwMDAwMCkge1xuICAgICAgICBzdGF0cy5sb2c1VmFsdWUgKz0gdmFsdWU7XG4gICAgICAgIHN0YXRzLmxvZzVWQ291bnQrKztcbiAgICB9IGVsc2UgaWYgKHZhbHVlIDwgMTAwMDAwMDApIHtcbiAgICAgICAgc3RhdHMubG9nNlZhbHVlICs9IHZhbHVlO1xuICAgICAgICBzdGF0cy5sb2c2VkNvdW50Kys7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA8IDEwMDAwMDAwMCkge1xuICAgICAgICBzdGF0cy5sb2c3VmFsdWUgKz0gdmFsdWU7XG4gICAgICAgIHN0YXRzLmxvZzdWQ291bnQrKztcbiAgICB9IGVsc2UgaWYgKHZhbHVlIDwgMTAwMDAwMDAwMCkge1xuICAgICAgICBzdGF0cy5sb2c4VmFsdWUgKz0gdmFsdWU7XG4gICAgICAgIHN0YXRzLmxvZzhWQ291bnQrKztcbiAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0cy5sb2c5VmFsdWUgKz0gdmFsdWU7XG4gICAgICAgIHN0YXRzLmxvZzlWQ291bnQrKztcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRUb1N0YXRzKHN0YXRzOiBTdGF0c1ZhbHVlLCBvdGhlcjogU3RhdHNWYWx1ZSkge1xuICAgIHN0YXRzLmNvdW50ICs9IG90aGVyLmNvdW50O1xuICAgIHN0YXRzLnN1bSArPSBvdGhlci5zdW07XG4gICAgc3RhdHMuc3VtU3F1YXJlcyArPSBvdGhlci5zdW1TcXVhcmVzO1xuICAgIHN0YXRzLmxvZ243VmFsdWUgKz0gb3RoZXIubG9nbjdWYWx1ZTtcbiAgICBzdGF0cy5sb2duN0NvdW50ICs9IG90aGVyLmxvZ243Q291bnQ7XG4gICAgc3RhdHMubG9nbjZWYWx1ZSArPSBvdGhlci5sb2duNlZhbHVlO1xuICAgIHN0YXRzLmxvZ242Q291bnQgKz0gb3RoZXIubG9nbjZDb3VudDtcbiAgICBzdGF0cy5sb2duNVZhbHVlICs9IG90aGVyLmxvZ241VmFsdWU7XG4gICAgc3RhdHMubG9nbjVDb3VudCArPSBvdGhlci5sb2duNUNvdW50O1xuICAgIHN0YXRzLmxvZ240VmFsdWUgKz0gb3RoZXIubG9nbjRWYWx1ZTtcbiAgICBzdGF0cy5sb2duNENvdW50ICs9IG90aGVyLmxvZ240Q291bnQ7XG4gICAgc3RhdHMubG9nbjNWYWx1ZSArPSBvdGhlci5sb2duM1ZhbHVlO1xuICAgIHN0YXRzLmxvZ24zQ291bnQgKz0gb3RoZXIubG9nbjNDb3VudDtcbiAgICBzdGF0cy5sb2duMlZhbHVlICs9IG90aGVyLmxvZ24yVmFsdWU7XG4gICAgc3RhdHMubG9nbjJDb3VudCArPSBvdGhlci5sb2duMkNvdW50O1xuICAgIHN0YXRzLmxvZ24xVmFsdWUgKz0gb3RoZXIubG9nbjFWYWx1ZTtcbiAgICBzdGF0cy5sb2duMUNvdW50ICs9IG90aGVyLmxvZ24xQ291bnQ7XG4gICAgc3RhdHMubG9nMFZhbHVlICs9IG90aGVyLmxvZzBWYWx1ZTtcbiAgICBzdGF0cy5sb2cwVkNvdW50ICs9IG90aGVyLmxvZzBWQ291bnQ7XG4gICAgc3RhdHMubG9nMVZhbHVlICs9IG90aGVyLmxvZzFWYWx1ZTtcbiAgICBzdGF0cy5sb2cxVkNvdW50ICs9IG90aGVyLmxvZzFWQ291bnQ7XG4gICAgc3RhdHMubG9nMlZhbHVlICs9IG90aGVyLmxvZzJWYWx1ZTtcbiAgICBzdGF0cy5sb2cyVkNvdW50ICs9IG90aGVyLmxvZzJWQ291bnQ7XG4gICAgc3RhdHMubG9nM1ZhbHVlICs9IG90aGVyLmxvZzNWYWx1ZTtcbiAgICBzdGF0cy5sb2czVkNvdW50ICs9IG90aGVyLmxvZzNWQ291bnQ7XG4gICAgc3RhdHMubG9nNFZhbHVlICs9IG90aGVyLmxvZzRWYWx1ZTtcbiAgICBzdGF0cy5sb2c0VkNvdW50ICs9IG90aGVyLmxvZzRWQ291bnQ7XG4gICAgc3RhdHMubG9nNVZhbHVlICs9IG90aGVyLmxvZzVWYWx1ZTtcbiAgICBzdGF0cy5sb2c1VkNvdW50ICs9IG90aGVyLmxvZzVWQ291bnQ7XG4gICAgc3RhdHMubG9nNlZhbHVlICs9IG90aGVyLmxvZzZWYWx1ZTtcbiAgICBzdGF0cy5sb2c2VkNvdW50ICs9IG90aGVyLmxvZzZWQ291bnQ7XG4gICAgc3RhdHMubG9nN1ZhbHVlICs9IG90aGVyLmxvZzdWYWx1ZTtcbiAgICBzdGF0cy5sb2c3VkNvdW50ICs9IG90aGVyLmxvZzdWQ291bnQ7XG4gICAgc3RhdHMubG9nOFZhbHVlICs9IG90aGVyLmxvZzhWYWx1ZTtcbiAgICBzdGF0cy5sb2c4VkNvdW50ICs9IG90aGVyLmxvZzhWQ291bnQ7XG4gICAgc3RhdHMubG9nOVZhbHVlICs9IG90aGVyLmxvZzlWYWx1ZTtcbiAgICBzdGF0cy5sb2c5VkNvdW50ICs9IG90aGVyLmxvZzlWQ291bnQ7XG59XG5cbmludGVyZmFjZSBTdGF0c0J1Y2tldCB7XG4gICAgc3VtOiBudW1iZXI7XG4gICAgY291bnQ6IG51bWJlcjtcbn1cbi8vIE9yZGVyZWQgZnJvbSBsb3dlc3QgYXZlcmFnZSB0byBoaWdoZXN0IGF2ZXJhZ2VcbmZ1bmN0aW9uIGdldFN0YXRzQnVja2V0cyhzdGF0czogU3RhdHNWYWx1ZSk6IFN0YXRzQnVja2V0W10ge1xuICAgIHJldHVybiBbXG4gICAgICAgIHsgc3VtOiBzdGF0cy5sb2duN1ZhbHVlLCBjb3VudDogc3RhdHMubG9nbjdDb3VudCB9LFxuICAgICAgICB7IHN1bTogc3RhdHMubG9nbjZWYWx1ZSwgY291bnQ6IHN0YXRzLmxvZ242Q291bnQgfSxcbiAgICAgICAgeyBzdW06IHN0YXRzLmxvZ241VmFsdWUsIGNvdW50OiBzdGF0cy5sb2duNUNvdW50IH0sXG4gICAgICAgIHsgc3VtOiBzdGF0cy5sb2duNFZhbHVlLCBjb3VudDogc3RhdHMubG9nbjRDb3VudCB9LFxuICAgICAgICB7IHN1bTogc3RhdHMubG9nbjNWYWx1ZSwgY291bnQ6IHN0YXRzLmxvZ24zQ291bnQgfSxcbiAgICAgICAgeyBzdW06IHN0YXRzLmxvZ24yVmFsdWUsIGNvdW50OiBzdGF0cy5sb2duMkNvdW50IH0sXG4gICAgICAgIHsgc3VtOiBzdGF0cy5sb2duMVZhbHVlLCBjb3VudDogc3RhdHMubG9nbjFDb3VudCB9LFxuICAgICAgICB7IHN1bTogc3RhdHMubG9nMFZhbHVlLCBjb3VudDogc3RhdHMubG9nMFZDb3VudCB9LFxuICAgICAgICB7IHN1bTogc3RhdHMubG9nMVZhbHVlLCBjb3VudDogc3RhdHMubG9nMVZDb3VudCB9LFxuICAgICAgICB7IHN1bTogc3RhdHMubG9nMlZhbHVlLCBjb3VudDogc3RhdHMubG9nMlZDb3VudCB9LFxuICAgICAgICB7IHN1bTogc3RhdHMubG9nM1ZhbHVlLCBjb3VudDogc3RhdHMubG9nM1ZDb3VudCB9LFxuICAgICAgICB7IHN1bTogc3RhdHMubG9nNFZhbHVlLCBjb3VudDogc3RhdHMubG9nNFZDb3VudCB9LFxuICAgICAgICB7IHN1bTogc3RhdHMubG9nNVZhbHVlLCBjb3VudDogc3RhdHMubG9nNVZDb3VudCB9LFxuICAgICAgICB7IHN1bTogc3RhdHMubG9nNlZhbHVlLCBjb3VudDogc3RhdHMubG9nNlZDb3VudCB9LFxuICAgICAgICB7IHN1bTogc3RhdHMubG9nN1ZhbHVlLCBjb3VudDogc3RhdHMubG9nN1ZDb3VudCB9LFxuICAgICAgICB7IHN1bTogc3RhdHMubG9nOFZhbHVlLCBjb3VudDogc3RhdHMubG9nOFZDb3VudCB9LFxuICAgICAgICB7IHN1bTogc3RhdHMubG9nOVZhbHVlLCBjb3VudDogc3RhdHMubG9nOVZDb3VudCB9LFxuICAgIF07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhdHNUb3Age1xuICAgIC8vIE5PVEU6IGNvdW50RnJhY3Rpb24gPD0gdmFsdWVGcmFjdGlvbiwgYmVjYXVzZSB3ZSB0YWtlIHRoZSBsYXJnZXN0IHZhbHVlc1xuICAgIGNvdW50RnJhY3Rpb246IG51bWJlcjtcbiAgICB2YWx1ZUZyYWN0aW9uOiBudW1iZXI7XG4gICAgY291bnQ6IG51bWJlcjtcbiAgICB2YWx1ZTogbnVtYmVyO1xuICAgIHRvcEhlYXZ5OiBib29sZWFuO1xufVxuLyoqIElkZW50aWZpZXMgY2FzZXMgd2hlcmUgdGhlIHZhbHVlIGlzIGNvbmNlbnRyYXRlZCBpbiBmZXcgaW5zdGFuY2VzLiBUaGlzIGluZGljYXRlcyBtb3N0IG9mIHRoZSB2YWx1ZSAodGltZSlcbiAqICAgICAgaXMgbm90IHNwZW50IG9uIHRoZSBjb21tb24gY2FzZSwgYnV0IG9uIGFuIG91dGxpZXIuIFdoaWNoIGlzbid0IGEgcHJvYmxlbSwgaXQganVzdCBtZWFucyB0aGF0IHRoZSBtZWFzdXJlbWVudHNcbiAqICAgICAgc2hvdWxkIGJlIG1vcmUgcHJlY2lzZSwgdG8gcHVsbCB0aGF0IGhlYXZ5IGNhc2Ugb3V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhdHNUb3Aoc3RhdHM6IFN0YXRzVmFsdWUpOiBTdGF0c1RvcCB7XG4gICAgaWYgKHN0YXRzLnN1bSA9PT0gMCkge1xuICAgICAgICByZXR1cm4geyBjb3VudEZyYWN0aW9uOiAxLCB2YWx1ZUZyYWN0aW9uOiAxLCBjb3VudDogMCwgdmFsdWU6IDAsIHRvcEhlYXZ5OiBmYWxzZSwgfTtcbiAgICB9XG5cbiAgICBjb25zdCBtaW5GcmFjdGlvbiA9IDAuMjtcblxuICAgIGxldCB0b3RhbFN1bSA9IHN0YXRzLnN1bTtcbiAgICBsZXQgdG90YWxDb3VudCA9IHN0YXRzLmNvdW50O1xuICAgIGxldCB0b3RhbE1lYW4gPSB0b3RhbFN1bSAvIHRvdGFsQ291bnQ7XG5cbiAgICAvLyBGaW5kIHRoZSBzdW0gYWJvdmUgdGhlIGF2ZXJhZ2UgKHdpdGggYSBtaW5pbXVtIG9mIG1pbkZyYWN0aW9uLCBhcyBzb21ldGltZXMgdGhlcmUgaXNuJ3QgcmVhbGx5IGFueXRoaW5nIGFib3ZlIHRoZSBhdmVyYWdlKVxuICAgIGxldCBidWNrZXRzID0gZ2V0U3RhdHNCdWNrZXRzKHN0YXRzKTtcbiAgICBidWNrZXRzLnJldmVyc2UoKTtcblxuICAgIGxldCBjdXJTdW0gPSAwO1xuICAgIGxldCBjdXJDb3VudCA9IDA7XG4gICAgZm9yIChsZXQgZW50cnkgb2YgYnVja2V0cykge1xuICAgICAgICBsZXQgbWVhbiA9IGVudHJ5LnN1bSAvIGVudHJ5LmNvdW50O1xuICAgICAgICBpZiAoY3VyU3VtID4gdG90YWxTdW0gKiBtaW5GcmFjdGlvbiAmJiBtZWFuIDwgdG90YWxNZWFuKSBicmVhaztcblxuICAgICAgICBjdXJTdW0gKz0gZW50cnkuc3VtO1xuICAgICAgICBjdXJDb3VudCArPSBlbnRyeS5jb3VudDtcbiAgICB9XG5cbiAgICBsZXQgY291bnRGcmFjdGlvbiA9IGN1ckNvdW50IC8gdG90YWxDb3VudDtcbiAgICBsZXQgdmFsdWVGcmFjdGlvbiA9IGN1clN1bSAvIHRvdGFsU3VtO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgY291bnRGcmFjdGlvbixcbiAgICAgICAgdmFsdWVGcmFjdGlvbixcbiAgICAgICAgY291bnQ6IGN1ckNvdW50LFxuICAgICAgICB2YWx1ZTogY3VyU3VtLFxuICAgICAgICAvLyBJZiBtb3JlIHRoYW4gNTAlIGlzIGFib3ZlIHRoZSBhdmVyYWdlLCBpdCdzIHRvcCBoZWF2eVxuICAgICAgICB0b3BIZWF2eTogdmFsdWVGcmFjdGlvbiAvIGNvdW50RnJhY3Rpb24gPiAyICYmIHZhbHVlRnJhY3Rpb24gPiAwLjQsXG4gICAgfTtcbn1cblxuXG5cblxuXG5mdW5jdGlvbiBiZW5jaG1hcmtBZGRUb1N0YXRzKCkge1xuICAgIGxldCBzdGF0cyA9IGNyZWF0ZVN0YXRzVmFsdWUoKTtcbiAgICBsZXQgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGNvdW50ID0gMTAwMDAwMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgYWRkVG9TdGF0c1ZhbHVlKHN0YXRzLCAxMDAwMDAwMDAwMCk7XG4gICAgfVxuICAgIGxldCBlbmQgPSBEYXRlLm5vdygpO1xuICAgIGxldCB0aW1lID0gZW5kIC0gc3RhcnQ7XG4gICAgbGV0IHRpbWVQZXIgPSAodGltZSkgLyBjb3VudCAqIDEwMDAgKiAxMDAwO1xuICAgIGNvbnNvbGUubG9nKGBUaW1lIHBlcjogJHt0aW1lUGVyfW5zLCBpbiAke3RpbWV9bXNgKTtcbn1cbi8vYmVuY2htYXJrQWRkVG9TdGF0cygpOyJdfQ==
202
- /* _JS_SOURCE_HASH = "34c3da06d9308a7411dda3bccbd852eb60775b064ebec51cc9c4b413d9ee8e47"; */
@@ -1,45 +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.formatStats = exports.percent = void 0;
4
- const format_1 = require("../formatting/format");
5
- const logColors_1 = require("../formatting/logColors");
6
- const misc_1 = require("../misc");
7
- const stats_1 = require("./stats");
8
- function percent(value) {
9
- return `${(value * 100).toFixed(2)}%`;
10
- }
11
- exports.percent = percent;
12
- function formatStats(stats, config) {
13
- function p(count, text) {
14
- return String(text).padStart(count, " ");
15
- }
16
- let perText = (0, format_1.formatTime)(stats.sum / stats.count);
17
- let countText = (0, format_1.formatNumber)(stats.count);
18
- let sumText = (0, format_1.formatTime)(stats.sum);
19
- let equation = (!(config === null || config === void 0 ? void 0 : config.noSum) && `${p(6, sumText)} = ` || "") + `${p(6, countText)} * ${p(6, perText)}`;
20
- let top = (0, stats_1.getStatsTop)(stats);
21
- if (top.topHeavy) {
22
- let topText = (0, format_1.formatTime)(top.value / top.count);
23
- let topCountText = (0, format_1.formatNumber)(top.count);
24
- let bottomText = (0, format_1.formatTime)((stats.sum - top.value) / (stats.count - top.count) || 0);
25
- let bottomCountText = (0, format_1.formatNumber)(stats.count - top.count);
26
- let topPart = `${topCountText} * ${p(6, topText)}`;
27
- let bottomPart = `${bottomCountText} * ${bottomText}`;
28
- if (!(config === null || config === void 0 ? void 0 : config.noColor)) {
29
- if ((0, misc_1.isNode)()) {
30
- topPart = (0, logColors_1.red)(topPart);
31
- }
32
- else {
33
- bottomPart = (0, logColors_1.white)(bottomPart);
34
- }
35
- }
36
- equation = (!(config === null || config === void 0 ? void 0 : config.noSum) && `${p(6, sumText)} = ` || "") + `${p(6, topPart)} + ${bottomPart}`;
37
- }
38
- if (config === null || config === void 0 ? void 0 : config.noSpaces) {
39
- equation = equation.replace(/\s+/g, " ").trim();
40
- }
41
- return equation;
42
- }
43
- exports.formatStats = formatStats;
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHNGb3JtYXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzdGF0c0Zvcm1hdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpREFBZ0U7QUFDaEUsdURBQXFEO0FBQ3JELGtDQUFpQztBQUNqQyxtQ0FBa0Q7QUFFbEQsU0FBZ0IsT0FBTyxDQUFDLEtBQWE7SUFDakMsT0FBTyxHQUFHLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQzFDLENBQUM7QUFGRCwwQkFFQztBQUVELFNBQWdCLFdBQVcsQ0FBQyxLQUFpQixFQUFFLE1BSTlDO0lBQ0csU0FBUyxDQUFDLENBQUMsS0FBYSxFQUFFLElBQXFCO1FBQzNDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELElBQUksT0FBTyxHQUFHLElBQUEsbUJBQVUsRUFBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRCxJQUFJLFNBQVMsR0FBRyxJQUFBLHFCQUFZLEVBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLElBQUksT0FBTyxHQUFHLElBQUEsbUJBQVUsRUFBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLEtBQUssQ0FBQSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7SUFFMUcsSUFBSSxHQUFHLEdBQUcsSUFBQSxtQkFBVyxFQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2YsSUFBSSxPQUFPLEdBQUcsSUFBQSxtQkFBVSxFQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hELElBQUksWUFBWSxHQUFHLElBQUEscUJBQVksRUFBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0MsSUFBSSxVQUFVLEdBQUcsSUFBQSxtQkFBVSxFQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN0RixJQUFJLGVBQWUsR0FBRyxJQUFBLHFCQUFZLEVBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUQsSUFBSSxPQUFPLEdBQUcsR0FBRyxZQUFZLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ25ELElBQUksVUFBVSxHQUFHLEdBQUcsZUFBZSxNQUFNLFVBQVUsRUFBRSxDQUFDO1FBQ3RELElBQUksQ0FBQyxDQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxPQUFPLENBQUEsRUFBRSxDQUFDO1lBQ25CLElBQUksSUFBQSxhQUFNLEdBQUUsRUFBRSxDQUFDO2dCQUNYLE9BQU8sR0FBRyxJQUFBLGVBQUcsRUFBQyxPQUFPLENBQUMsQ0FBQztZQUMzQixDQUFDO2lCQUFNLENBQUM7Z0JBQ0osVUFBVSxHQUFHLElBQUEsaUJBQUssRUFBQyxVQUFVLENBQUMsQ0FBQztZQUNuQyxDQUFDO1FBQ0wsQ0FBQztRQUNELFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsS0FBSyxDQUFBLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxTQUFTLFVBQVUsRUFBRSxDQUFDO0lBQ3ZHLENBQUM7SUFDRCxJQUFJLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxRQUFRLEVBQUUsQ0FBQztRQUNuQixRQUFRLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDO0FBQ3BCLENBQUM7QUFuQ0Qsa0NBbUNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9ybWF0VGltZSwgZm9ybWF0TnVtYmVyIH0gZnJvbSBcIi4uL2Zvcm1hdHRpbmcvZm9ybWF0XCI7XG5pbXBvcnQgeyByZWQsIHdoaXRlIH0gZnJvbSBcIi4uL2Zvcm1hdHRpbmcvbG9nQ29sb3JzXCI7XG5pbXBvcnQgeyBpc05vZGUgfSBmcm9tIFwiLi4vbWlzY1wiO1xuaW1wb3J0IHsgU3RhdHNWYWx1ZSwgZ2V0U3RhdHNUb3AgfSBmcm9tIFwiLi9zdGF0c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gcGVyY2VudCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGAkeyh2YWx1ZSAqIDEwMCkudG9GaXhlZCgyKX0lYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFN0YXRzKHN0YXRzOiBTdGF0c1ZhbHVlLCBjb25maWc/OiB7XG4gICAgbm9Db2xvcj86IGJvb2xlYW47XG4gICAgbm9TdW0/OiBib29sZWFuO1xuICAgIG5vU3BhY2VzPzogYm9vbGVhbjtcbn0pIHtcbiAgICBmdW5jdGlvbiBwKGNvdW50OiBudW1iZXIsIHRleHQ6IHN0cmluZyB8IG51bWJlcikge1xuICAgICAgICByZXR1cm4gU3RyaW5nKHRleHQpLnBhZFN0YXJ0KGNvdW50LCBcIiBcIik7XG4gICAgfVxuXG4gICAgbGV0IHBlclRleHQgPSBmb3JtYXRUaW1lKHN0YXRzLnN1bSAvIHN0YXRzLmNvdW50KTtcbiAgICBsZXQgY291bnRUZXh0ID0gZm9ybWF0TnVtYmVyKHN0YXRzLmNvdW50KTtcbiAgICBsZXQgc3VtVGV4dCA9IGZvcm1hdFRpbWUoc3RhdHMuc3VtKTtcbiAgICBsZXQgZXF1YXRpb24gPSAoIWNvbmZpZz8ubm9TdW0gJiYgYCR7cCg2LCBzdW1UZXh0KX0gPSAgYCB8fCBcIlwiKSArIGAke3AoNiwgY291bnRUZXh0KX0gKiAke3AoNiwgcGVyVGV4dCl9YDtcblxuICAgIGxldCB0b3AgPSBnZXRTdGF0c1RvcChzdGF0cyk7XG4gICAgaWYgKHRvcC50b3BIZWF2eSkge1xuICAgICAgICBsZXQgdG9wVGV4dCA9IGZvcm1hdFRpbWUodG9wLnZhbHVlIC8gdG9wLmNvdW50KTtcbiAgICAgICAgbGV0IHRvcENvdW50VGV4dCA9IGZvcm1hdE51bWJlcih0b3AuY291bnQpO1xuICAgICAgICBsZXQgYm90dG9tVGV4dCA9IGZvcm1hdFRpbWUoKHN0YXRzLnN1bSAtIHRvcC52YWx1ZSkgLyAoc3RhdHMuY291bnQgLSB0b3AuY291bnQpIHx8IDApO1xuICAgICAgICBsZXQgYm90dG9tQ291bnRUZXh0ID0gZm9ybWF0TnVtYmVyKHN0YXRzLmNvdW50IC0gdG9wLmNvdW50KTtcbiAgICAgICAgbGV0IHRvcFBhcnQgPSBgJHt0b3BDb3VudFRleHR9ICogJHtwKDYsIHRvcFRleHQpfWA7XG4gICAgICAgIGxldCBib3R0b21QYXJ0ID0gYCR7Ym90dG9tQ291bnRUZXh0fSAqICR7Ym90dG9tVGV4dH1gO1xuICAgICAgICBpZiAoIWNvbmZpZz8ubm9Db2xvcikge1xuICAgICAgICAgICAgaWYgKGlzTm9kZSgpKSB7XG4gICAgICAgICAgICAgICAgdG9wUGFydCA9IHJlZCh0b3BQYXJ0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYm90dG9tUGFydCA9IHdoaXRlKGJvdHRvbVBhcnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVxdWF0aW9uID0gKCFjb25maWc/Lm5vU3VtICYmIGAke3AoNiwgc3VtVGV4dCl9ID0gYCB8fCBcIlwiKSArIGAke3AoNiwgdG9wUGFydCl9ICAgKyAgJHtib3R0b21QYXJ0fWA7XG4gICAgfVxuICAgIGlmIChjb25maWc/Lm5vU3BhY2VzKSB7XG4gICAgICAgIGVxdWF0aW9uID0gZXF1YXRpb24ucmVwbGFjZSgvXFxzKy9nLCBcIiBcIikudHJpbSgpO1xuICAgIH1cbiAgICByZXR1cm4gZXF1YXRpb247XG59Il19
45
- /* _JS_SOURCE_HASH = "c1203d6ed964b28ac79386911e4c6e74248215339c447df4344b77d4c29e14f2"; */