@1money/component-ui 0.0.68 → 0.0.70
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/es/components/Icons/Wrapper.js +6 -4
- package/es/components/Icons/constants.d.ts +11 -0
- package/es/components/Icons/constants.js +32 -0
- package/es/components/Icons/index.d.ts +2 -0
- package/es/components/Icons/index.js +2 -1
- package/es/components/Icons/interface.d.ts +8 -1
- package/es/components/ProForm/interface.d.ts +3 -1
- package/es/components/ProForm/layouts/QueryFilter.js +5 -1
- package/es/components/ProTable/ProTable.d.ts +5 -0
- package/es/components/ProTable/ProTable.js +309 -0
- package/es/components/ProTable/constants.d.ts +12 -0
- package/es/components/ProTable/constants.js +12 -0
- package/es/components/ProTable/core/genColumns.d.ts +10 -0
- package/es/components/ProTable/core/genColumns.js +81 -0
- package/es/components/ProTable/core/genSearchFields.d.ts +19 -0
- package/es/components/ProTable/core/genSearchFields.js +103 -0
- package/es/components/ProTable/core/useAwaitableReload.d.ts +17 -0
- package/es/components/ProTable/core/useAwaitableReload.js +39 -0
- package/es/components/ProTable/core/utils.d.ts +12 -0
- package/es/components/ProTable/core/utils.js +21 -0
- package/es/components/ProTable/index.d.ts +4 -0
- package/es/components/ProTable/index.js +5 -0
- package/es/components/ProTable/interface.d.ts +132 -0
- package/es/components/ProTable/interface.js +2 -0
- package/es/components/ProTable/style/ProTable.css +47 -0
- package/es/components/ProTable/style/css.js +6 -0
- package/es/components/ProTable/style/index.d.ts +5 -0
- package/es/components/ProTable/style/index.js +6 -0
- package/es/components/ProTable/useFetchData.d.ts +48 -0
- package/es/components/ProTable/useFetchData.js +270 -0
- package/es/index.css +1 -1
- package/es/index.d.ts +3 -1
- package/es/index.js +2 -1
- package/lib/components/Icons/Wrapper.js +6 -4
- package/lib/components/Icons/constants.d.ts +11 -0
- package/lib/components/Icons/constants.js +38 -0
- package/lib/components/Icons/index.d.ts +2 -0
- package/lib/components/Icons/index.js +10 -2
- package/lib/components/Icons/interface.d.ts +8 -1
- package/lib/components/ProForm/interface.d.ts +3 -1
- package/lib/components/ProForm/layouts/QueryFilter.js +5 -1
- package/lib/components/ProTable/ProTable.d.ts +5 -0
- package/lib/components/ProTable/ProTable.js +316 -0
- package/lib/components/ProTable/constants.d.ts +12 -0
- package/lib/components/ProTable/constants.js +18 -0
- package/lib/components/ProTable/core/genColumns.d.ts +10 -0
- package/lib/components/ProTable/core/genColumns.js +87 -0
- package/lib/components/ProTable/core/genSearchFields.d.ts +19 -0
- package/lib/components/ProTable/core/genSearchFields.js +111 -0
- package/lib/components/ProTable/core/useAwaitableReload.d.ts +17 -0
- package/lib/components/ProTable/core/useAwaitableReload.js +46 -0
- package/lib/components/ProTable/core/utils.d.ts +12 -0
- package/lib/components/ProTable/core/utils.js +28 -0
- package/lib/components/ProTable/index.d.ts +4 -0
- package/lib/components/ProTable/index.js +33 -0
- package/lib/components/ProTable/interface.d.ts +132 -0
- package/lib/components/ProTable/interface.js +6 -0
- package/lib/components/ProTable/style/ProTable.css +47 -0
- package/lib/components/ProTable/style/css.js +8 -0
- package/lib/components/ProTable/style/index.d.ts +5 -0
- package/lib/components/ProTable/style/index.js +8 -0
- package/lib/components/ProTable/useFetchData.d.ts +48 -0
- package/lib/components/ProTable/useFetchData.js +277 -0
- package/lib/index.css +1 -1
- package/lib/index.d.ts +3 -1
- package/lib/index.js +8 -1
- package/package.json +6 -1
- package/scripts/mcp-server/examples.generated.json +168 -6
- package/scripts/mcp-server/index.generated.json +778 -4
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.useFetchData = useFetchData;
|
|
8
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
|
+
var _react = require("react");
|
|
11
|
+
var _hooks = require("@1money/hooks");
|
|
12
|
+
var _useAwaitableReload = require("./core/useAwaitableReload");
|
|
13
|
+
var __awaiter = void 0 && (void 0).__awaiter || function (thisArg, _arguments, P, generator) {
|
|
14
|
+
function adopt(value) {
|
|
15
|
+
return value instanceof P ? value : new P(function (resolve) {
|
|
16
|
+
resolve(value);
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
20
|
+
function fulfilled(value) {
|
|
21
|
+
try {
|
|
22
|
+
step(generator.next(value));
|
|
23
|
+
} catch (e) {
|
|
24
|
+
reject(e);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function rejected(value) {
|
|
28
|
+
try {
|
|
29
|
+
step(generator["throw"](value));
|
|
30
|
+
} catch (e) {
|
|
31
|
+
reject(e);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function step(result) {
|
|
35
|
+
result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
|
|
36
|
+
}
|
|
37
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Owns the request lifecycle for ProTable: data, loading, and pagination.
|
|
42
|
+
*
|
|
43
|
+
* One effect is the single fetch path. It reads its query inputs from the
|
|
44
|
+
* **render closure** (never a lagging ref), so every state change — search,
|
|
45
|
+
* sort, filter, params, page — refetches with correct values. An awaitable
|
|
46
|
+
* reload signal lets imperative callers force the same effect and `await` it.
|
|
47
|
+
*
|
|
48
|
+
* `runRequest` aborts the previous in-flight request (`AbortController`, exposed
|
|
49
|
+
* to `request` as `{ signal }`), tags itself with a request id, and drops stale
|
|
50
|
+
* or aborted responses.
|
|
51
|
+
*/
|
|
52
|
+
function useFetchData(options) {
|
|
53
|
+
var _this = this;
|
|
54
|
+
var request = options.request,
|
|
55
|
+
manual = options.manual,
|
|
56
|
+
manualRequest = options.manualRequest,
|
|
57
|
+
debounceTime = options.debounceTime,
|
|
58
|
+
postData = options.postData,
|
|
59
|
+
polling = options.polling,
|
|
60
|
+
params = options.params,
|
|
61
|
+
defaultData = options.defaultData,
|
|
62
|
+
paginated = options.paginated,
|
|
63
|
+
defaultCurrent = options.defaultCurrent,
|
|
64
|
+
defaultPageSize = options.defaultPageSize,
|
|
65
|
+
searchParams = options.searchParams,
|
|
66
|
+
sort = options.sort,
|
|
67
|
+
filter = options.filter,
|
|
68
|
+
onLoad = options.onLoad,
|
|
69
|
+
onLoadingChange = options.onLoadingChange,
|
|
70
|
+
onRequestError = options.onRequestError;
|
|
71
|
+
var _useSafeState = (0, _hooks.useSafeState)(defaultData !== null && defaultData !== void 0 ? defaultData : []),
|
|
72
|
+
_useSafeState2 = (0, _slicedToArray2["default"])(_useSafeState, 2),
|
|
73
|
+
dataSource = _useSafeState2[0],
|
|
74
|
+
setDataSource = _useSafeState2[1];
|
|
75
|
+
var _useSafeState3 = (0, _hooks.useSafeState)(false),
|
|
76
|
+
_useSafeState4 = (0, _slicedToArray2["default"])(_useSafeState3, 2),
|
|
77
|
+
loading = _useSafeState4[0],
|
|
78
|
+
setLoadingState = _useSafeState4[1];
|
|
79
|
+
var _useSafeState5 = (0, _hooks.useSafeState)({
|
|
80
|
+
current: defaultCurrent,
|
|
81
|
+
pageSize: defaultPageSize,
|
|
82
|
+
total: 0
|
|
83
|
+
}),
|
|
84
|
+
_useSafeState6 = (0, _slicedToArray2["default"])(_useSafeState5, 2),
|
|
85
|
+
pageInfo = _useSafeState6[0],
|
|
86
|
+
setPageInfoState = _useSafeState6[1];
|
|
87
|
+
var reloadSignal = (0, _useAwaitableReload.useAwaitableReload)();
|
|
88
|
+
var reqRef = (0, _hooks.useLatest)(request);
|
|
89
|
+
var callbacks = (0, _hooks.useLatest)({
|
|
90
|
+
onLoad: onLoad,
|
|
91
|
+
onLoadingChange: onLoadingChange,
|
|
92
|
+
onRequestError: onRequestError,
|
|
93
|
+
postData: postData
|
|
94
|
+
});
|
|
95
|
+
var loadingRef = (0, _hooks.useLatest)(loading);
|
|
96
|
+
var requestIdRef = (0, _react.useRef)(0);
|
|
97
|
+
var abortRef = (0, _react.useRef)(null);
|
|
98
|
+
var skipFirstRef = (0, _react.useRef)(manualRequest === true);
|
|
99
|
+
var prevParamsRef = (0, _react.useRef)(undefined);
|
|
100
|
+
var debounceTimerRef = (0, _react.useRef)(undefined);
|
|
101
|
+
// Set right before a polling-triggered refetch so it can refresh silently
|
|
102
|
+
// (without flashing the main loading overlay). Consumed at the start of runRequest.
|
|
103
|
+
var silentRef = (0, _react.useRef)(false);
|
|
104
|
+
var setLoading = (0, _hooks.useMemoizedFn)(function (next) {
|
|
105
|
+
var _a, _b;
|
|
106
|
+
setLoadingState(next);
|
|
107
|
+
(_b = (_a = callbacks.current).onLoadingChange) === null || _b === void 0 ? void 0 : _b.call(_a, next);
|
|
108
|
+
});
|
|
109
|
+
var setPageInfo = (0, _hooks.useMemoizedFn)(function (info) {
|
|
110
|
+
setPageInfoState(function (prev) {
|
|
111
|
+
var merged = Object.assign(Object.assign({}, prev), info);
|
|
112
|
+
if (merged.current === prev.current && merged.pageSize === prev.pageSize && merged.total === prev.total) {
|
|
113
|
+
return prev;
|
|
114
|
+
}
|
|
115
|
+
return merged;
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
// The single network entry point: abort the previous request, then apply data
|
|
119
|
+
// while guarding against stale / aborted responses.
|
|
120
|
+
var runRequest = (0, _hooks.useMemoizedFn)(function (merged, st, ft) {
|
|
121
|
+
return __awaiter(_this, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
122
|
+
var _a, _b, _c, _d, _e, _f, req, silent, abort, requestId, result, raw, next, _t;
|
|
123
|
+
return _regenerator["default"].wrap(function (_context) {
|
|
124
|
+
while (1) switch (_context.prev = _context.next) {
|
|
125
|
+
case 0:
|
|
126
|
+
req = reqRef.current;
|
|
127
|
+
if (req) {
|
|
128
|
+
_context.next = 1;
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
return _context.abrupt("return");
|
|
132
|
+
case 1:
|
|
133
|
+
// A polling refetch refreshes silently — no loading overlay flash.
|
|
134
|
+
silent = silentRef.current;
|
|
135
|
+
silentRef.current = false;
|
|
136
|
+
(_a = abortRef.current) === null || _a === void 0 ? void 0 : _a.abort();
|
|
137
|
+
abort = new AbortController();
|
|
138
|
+
abortRef.current = abort;
|
|
139
|
+
requestId = ++requestIdRef.current;
|
|
140
|
+
if (!silent) setLoading(true);
|
|
141
|
+
_context.prev = 2;
|
|
142
|
+
_context.next = 3;
|
|
143
|
+
return req(merged, st, ft, {
|
|
144
|
+
signal: abort.signal
|
|
145
|
+
});
|
|
146
|
+
case 3:
|
|
147
|
+
result = _context.sent;
|
|
148
|
+
if (!(abort.signal.aborted || requestId !== requestIdRef.current)) {
|
|
149
|
+
_context.next = 4;
|
|
150
|
+
break;
|
|
151
|
+
}
|
|
152
|
+
return _context.abrupt("return");
|
|
153
|
+
case 4:
|
|
154
|
+
if (!(result.success === false)) {
|
|
155
|
+
_context.next = 5;
|
|
156
|
+
break;
|
|
157
|
+
}
|
|
158
|
+
return _context.abrupt("return");
|
|
159
|
+
case 5:
|
|
160
|
+
raw = (_b = result.data) !== null && _b !== void 0 ? _b : [];
|
|
161
|
+
next = callbacks.current.postData ? callbacks.current.postData(raw) : raw;
|
|
162
|
+
setDataSource(next);
|
|
163
|
+
setPageInfoState(function (prev) {
|
|
164
|
+
var _a;
|
|
165
|
+
return Object.assign(Object.assign({}, prev), {
|
|
166
|
+
total: (_a = result.total) !== null && _a !== void 0 ? _a : next.length
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
(_d = (_c = callbacks.current).onLoad) === null || _d === void 0 ? void 0 : _d.call(_c, next);
|
|
170
|
+
_context.next = 8;
|
|
171
|
+
break;
|
|
172
|
+
case 6:
|
|
173
|
+
_context.prev = 6;
|
|
174
|
+
_t = _context["catch"](2);
|
|
175
|
+
if (!(abort.signal.aborted || requestId !== requestIdRef.current)) {
|
|
176
|
+
_context.next = 7;
|
|
177
|
+
break;
|
|
178
|
+
}
|
|
179
|
+
return _context.abrupt("return");
|
|
180
|
+
case 7:
|
|
181
|
+
(_f = (_e = callbacks.current).onRequestError) === null || _f === void 0 ? void 0 : _f.call(_e, _t);
|
|
182
|
+
case 8:
|
|
183
|
+
_context.prev = 8;
|
|
184
|
+
if (!silent && requestId === requestIdRef.current) setLoading(false);
|
|
185
|
+
return _context.finish(8);
|
|
186
|
+
case 9:
|
|
187
|
+
case "end":
|
|
188
|
+
return _context.stop();
|
|
189
|
+
}
|
|
190
|
+
}, _callee, null, [[2, 6, 8, 9]]);
|
|
191
|
+
}));
|
|
192
|
+
});
|
|
193
|
+
// Build the request params from the current render closure.
|
|
194
|
+
var buildMerged = function buildMerged() {
|
|
195
|
+
return Object.assign(Object.assign(Object.assign({}, params !== null && params !== void 0 ? params : {}), searchParams), paginated ? {
|
|
196
|
+
current: pageInfo.current,
|
|
197
|
+
pageSize: pageInfo.pageSize
|
|
198
|
+
} : {});
|
|
199
|
+
};
|
|
200
|
+
// Only `params` (a consumer-owned prop, often an inline object) needs value
|
|
201
|
+
// comparison; the rest are stable internal state and compare by reference.
|
|
202
|
+
var paramsKey = JSON.stringify(params !== null && params !== void 0 ? params : null);
|
|
203
|
+
(0, _react.useEffect)(function () {
|
|
204
|
+
if (manual) {
|
|
205
|
+
reloadSignal.settle();
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
// manualRequest: swallow only the first (mount) trigger.
|
|
209
|
+
if (skipFirstRef.current) {
|
|
210
|
+
skipFirstRef.current = false;
|
|
211
|
+
prevParamsRef.current = paramsKey;
|
|
212
|
+
reloadSignal.settle();
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
// A `params` change resets to page 1 first; the page change re-runs this
|
|
216
|
+
// effect, where the actual fetch happens (so it never double-fetches).
|
|
217
|
+
if (prevParamsRef.current !== paramsKey && pageInfo.current !== defaultCurrent) {
|
|
218
|
+
prevParamsRef.current = paramsKey;
|
|
219
|
+
setPageInfo({
|
|
220
|
+
current: defaultCurrent
|
|
221
|
+
});
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
prevParamsRef.current = paramsKey;
|
|
225
|
+
var fire = function fire() {
|
|
226
|
+
return runRequest(buildMerged(), sort, filter)["finally"](reloadSignal.settle);
|
|
227
|
+
};
|
|
228
|
+
if (debounceTime && debounceTime > 0) {
|
|
229
|
+
if (debounceTimerRef.current) clearTimeout(debounceTimerRef.current);
|
|
230
|
+
debounceTimerRef.current = setTimeout(fire, debounceTime);
|
|
231
|
+
return function () {
|
|
232
|
+
if (debounceTimerRef.current) clearTimeout(debounceTimerRef.current);
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
void fire();
|
|
236
|
+
}, [paramsKey, searchParams, sort, filter, pageInfo.current, pageInfo.pageSize, reloadSignal.token, manual]);
|
|
237
|
+
var reload = (0, _hooks.useMemoizedFn)(function () {
|
|
238
|
+
return manual ? Promise.resolve() : reloadSignal.request();
|
|
239
|
+
});
|
|
240
|
+
var reset = (0, _hooks.useMemoizedFn)(function () {
|
|
241
|
+
setPageInfoState(function (prev) {
|
|
242
|
+
return Object.assign(Object.assign({}, prev), {
|
|
243
|
+
current: defaultCurrent,
|
|
244
|
+
pageSize: defaultPageSize
|
|
245
|
+
});
|
|
246
|
+
});
|
|
247
|
+
});
|
|
248
|
+
// Polling: re-trigger on an interval, skipping ticks while a request is in flight.
|
|
249
|
+
var pollingMs = typeof polling === 'function' ? polling(dataSource) : polling;
|
|
250
|
+
(0, _react.useEffect)(function () {
|
|
251
|
+
if (manual || !pollingMs || pollingMs <= 0) return;
|
|
252
|
+
var id = setInterval(function () {
|
|
253
|
+
if (loadingRef.current) return;
|
|
254
|
+
silentRef.current = true;
|
|
255
|
+
void reloadSignal.request();
|
|
256
|
+
}, pollingMs);
|
|
257
|
+
return function () {
|
|
258
|
+
return clearInterval(id);
|
|
259
|
+
};
|
|
260
|
+
}, [pollingMs, manual]);
|
|
261
|
+
// Abort any in-flight request on unmount.
|
|
262
|
+
(0, _react.useEffect)(function () {
|
|
263
|
+
return function () {
|
|
264
|
+
var _a;
|
|
265
|
+
return (_a = abortRef.current) === null || _a === void 0 ? void 0 : _a.abort();
|
|
266
|
+
};
|
|
267
|
+
}, []);
|
|
268
|
+
return {
|
|
269
|
+
dataSource: dataSource,
|
|
270
|
+
loading: loading,
|
|
271
|
+
pageInfo: pageInfo,
|
|
272
|
+
setPageInfo: setPageInfo,
|
|
273
|
+
reload: reload,
|
|
274
|
+
reset: reset
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvUHJvVGFibGUvdXNlRmV0Y2hEYXRhLnRzIiwiY29tcG9uZW50cy9Qcm9UYWJsZS91c2VGZXRjaERhdGEuanMiXSwibmFtZXMiOlsiX3JlYWN0IiwicmVxdWlyZSIsIl9ob29rcyIsIl91c2VBd2FpdGFibGVSZWxvYWQiLCJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJhZG9wdCIsInZhbHVlIiwicmVzb2x2ZSIsIlByb21pc2UiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsImUiLCJyZWplY3RlZCIsInJlc3VsdCIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJ1c2VGZXRjaERhdGEiLCJvcHRpb25zIiwiX3RoaXMiLCJyZXF1ZXN0IiwibWFudWFsIiwibWFudWFsUmVxdWVzdCIsImRlYm91bmNlVGltZSIsInBvc3REYXRhIiwicG9sbGluZyIsInBhcmFtcyIsImRlZmF1bHREYXRhIiwicGFnaW5hdGVkIiwiZGVmYXVsdEN1cnJlbnQiLCJkZWZhdWx0UGFnZVNpemUiLCJzZWFyY2hQYXJhbXMiLCJzb3J0IiwiZmlsdGVyIiwib25Mb2FkIiwib25Mb2FkaW5nQ2hhbmdlIiwib25SZXF1ZXN0RXJyb3IiLCJfdXNlU2FmZVN0YXRlIiwidXNlU2FmZVN0YXRlIiwiX3VzZVNhZmVTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheTIiLCJkYXRhU291cmNlIiwic2V0RGF0YVNvdXJjZSIsIl91c2VTYWZlU3RhdGUzIiwiX3VzZVNhZmVTdGF0ZTQiLCJsb2FkaW5nIiwic2V0TG9hZGluZ1N0YXRlIiwiX3VzZVNhZmVTdGF0ZTUiLCJjdXJyZW50IiwicGFnZVNpemUiLCJ0b3RhbCIsIl91c2VTYWZlU3RhdGU2IiwicGFnZUluZm8iLCJzZXRQYWdlSW5mb1N0YXRlIiwicmVsb2FkU2lnbmFsIiwidXNlQXdhaXRhYmxlUmVsb2FkIiwicmVxUmVmIiwidXNlTGF0ZXN0IiwiY2FsbGJhY2tzIiwibG9hZGluZ1JlZiIsInJlcXVlc3RJZFJlZiIsInVzZVJlZiIsImFib3J0UmVmIiwic2tpcEZpcnN0UmVmIiwicHJldlBhcmFtc1JlZiIsInVuZGVmaW5lZCIsImRlYm91bmNlVGltZXJSZWYiLCJzaWxlbnRSZWYiLCJzZXRMb2FkaW5nIiwidXNlTWVtb2l6ZWRGbiIsIl9hIiwiX2IiLCJjYWxsIiwic2V0UGFnZUluZm8iLCJpbmZvIiwicHJldiIsIm1lcmdlZCIsIk9iamVjdCIsImFzc2lnbiIsInJ1blJlcXVlc3QiLCJzdCIsImZ0IiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsIl9jYWxsZWUiLCJfYyIsIl9kIiwiX2UiLCJfZiIsInJlcSIsInNpbGVudCIsImFib3J0IiwicmVxdWVzdElkIiwicmF3IiwiX3QiLCJ3cmFwIiwiX2NvbnRleHQiLCJhYnJ1cHQiLCJBYm9ydENvbnRyb2xsZXIiLCJzaWduYWwiLCJzZW50IiwiYWJvcnRlZCIsInN1Y2Nlc3MiLCJkYXRhIiwibGVuZ3RoIiwiZmluaXNoIiwic3RvcCIsImJ1aWxkTWVyZ2VkIiwicGFyYW1zS2V5IiwiSlNPTiIsInN0cmluZ2lmeSIsInVzZUVmZmVjdCIsInNldHRsZSIsImZpcmUiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0IiwidG9rZW4iLCJyZWxvYWQiLCJyZXNldCIsInBvbGxpbmdNcyIsImlkIiwic2V0SW50ZXJ2YWwiLCJjbGVhckludGVydmFsIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxNQUFBLEdBQUFELE9BQUE7QUFFQSxJQUFBRSxtQkFBQSxHQUFBRixPQUFBO0FDSEEsSUFBSUcsU0FBUyxHQUFJLFVBQVEsU0FBS0EsU0FBUyxJQUFLLFVBQVVDLE9BQU8sRUFBRUMsVUFBVSxFQUFFQyxDQUFDLEVBQUVDLFNBQVMsRUFBRTtFQUNyRixTQUFTQyxLQUFLQSxDQUFDQyxLQUFLLEVBQUU7SUFBRSxPQUFPQSxLQUFLLFlBQVlILENBQUMsR0FB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Z0JBQVMsRUFBQyxZQUFLO0lBQ2IsSUFBSTFGLE1BQU0sSUFBSSxDQUFDa0csU0FBUyxJQUFJQSxTQUFTLElBQUksQ0FBQyxFQUFFO0lBQzVDLElBQU1DLEVBQUUsR0FBR0MsV0FBVyxDQUFDLFlBQUs7TUFDMUIsSUFBSTlELFVBQVUsQ0FBQ1gsT0FBTyxFQUFFO01BQ3hCbUIsU0FBUyxDQUFDbkIsT0FBTyxHQUFHLElBQUk7TUFDeEIsS0FBS00sWUFBWSxDQUFDbEMsT0FBTyxDQUFBLENBQUU7SUFDN0IsQ0FBQyxFQUFFbUcsU0FBUyxDQUFDO0lBQ2IsT0FBTztNQUFBLE9BQU1HLGFBQWEsQ0FBQ0YsRUFBRSxDQUFDO0lBQUE7RUFDaEMsQ0FBQyxFQUFFLENBQUNELFNBQVMsRUFBRWxHLE1BQU0sQ0FBQyxDQUFDO0VBRXZCO0VBQ0EsSUFBQTBGLGdCQUFTLEVBQUM7SUFBQSxPQUFNLFlBQUs7TUFBQSxJQUFBekMsRUFBQTtNQUFDLE9BQUEsQ0FBQUEsRUFBQSxHQUFBUixRQUFRLENBQUNkLE9BQU8sTUFBQSxJQUFBLElBQUFzQixFQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUFBLEVBQUEsQ0FBRXFCLEtBQUssQ0FBQSxDQUFFO0lBQUEsQ0FBQTtFQUFBLEdBQUUsRUFBRSxDQUFDO0VBRXBELE9BQU87SUFBRWxELFVBQVUsRUFBVkEsVUFBVTtJQUFFSSxPQUFPLEVBQVBBLE9BQU87SUFBRU8sUUFBUSxFQUFSQSxRQUFRO0lBQUVxQixXQUFXLEVBQVhBLFdBQVc7SUFBRTRDLE1BQU0sRUFBTkEsTUFBTTtJQUFFQyxLQUFLLEVBQUxBO0VBQUssQ0FBRTtBQUN0RSIsImZpbGUiOiJjb21wb25lbnRzL1Byb1RhYmxlL3VzZUZldGNoRGF0YS5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbCwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUxhdGVzdCwgdXNlTWVtb2l6ZWRGbiwgdXNlU2FmZVN0YXRlIH0gZnJvbSAnQDFtb25leS9ob29rcyc7XG5pbXBvcnQgeyB1c2VBd2FpdGFibGVSZWxvYWQgfSBmcm9tICcuL2NvcmUvdXNlQXdhaXRhYmxlUmVsb2FkJztcbi8qKlxuICogT3ducyB0aGUgcmVxdWVzdCBsaWZlY3ljbGUgZm9yIFByb1RhYmxlOiBkYXRhLCBsb2FkaW5nLCBhbmQgcGFnaW5hdGlvbi5cbiAqXG4gKiBPbmUgZWZmZWN0IGlzIHRoZSBzaW5nbGUgZmV0Y2ggcGF0aC4gSXQgcmVhZHMgaXRzIHF1ZXJ5IGlucHV0cyBmcm9tIHRoZVxuICogKipyZW5kZXIgY2xvc3VyZSoqIChuZXZlciBhIGxhZ2dpbmcgcmVmKSwgc28gZXZlcnkgc3RhdGUgY2hhbmdlIOKAlCBzZWFyY2gsXG4gKiBzb3J0LCBmaWx0ZXIsIHBhcmFtcywgcGFnZSDigJQgcmVmZXRjaGVzIHdpdGggY29ycmVjdCB2YWx1ZXMuIEFuIGF3YWl0YWJsZVxuICogcmVsb2FkIHNpZ25hbCBsZXRzIGltcGVyYXRpdmUgY2FsbGVycyBmb3JjZSB0aGUgc2FtZSBlZmZlY3QgYW5kIGBhd2FpdGAgaXQuXG4gKlxuICogYHJ1blJlcXVlc3RgIGFib3J0cyB0aGUgcHJldmlvdXMgaW4tZmxpZ2h0IHJlcXVlc3QgKGBBYm9ydENvbnRyb2xsZXJgLCBleHBvc2VkXG4gKiB0byBgcmVxdWVzdGAgYXMgYHsgc2lnbmFsIH1gKSwgdGFncyBpdHNlbGYgd2l0aCBhIHJlcXVlc3QgaWQsIGFuZCBkcm9wcyBzdGFsZVxuICogb3IgYWJvcnRlZCByZXNwb25zZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VGZXRjaERhdGEob3B0aW9ucykge1xuICAgIGNvbnN0IHsgcmVxdWVzdCwgbWFudWFsLCBtYW51YWxSZXF1ZXN0LCBkZWJvdW5jZVRpbWUsIHBvc3REYXRhLCBwb2xsaW5nLCBwYXJhbXMsIGRlZmF1bHREYXRhLCBwYWdpbmF0ZWQsIGRlZmF1bHRDdXJyZW50LCBkZWZhdWx0UGFnZVNpemUsIHNlYXJjaFBhcmFtcywgc29ydCwgZmlsdGVyLCBvbkxvYWQsIG9uTG9hZGluZ0NoYW5nZSwgb25SZXF1ZXN0RXJyb3IsIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IFtkYXRhU291cmNlLCBzZXREYXRhU291cmNlXSA9IHVzZVNhZmVTdGF0ZShkZWZhdWx0RGF0YSAhPT0gbnVsbCAmJiBkZWZhdWx0RGF0YSAhPT0gdm9pZCAwID8gZGVmYXVsdERhdGEgOiBbXSk7XG4gICAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmdTdGF0ZV0gPSB1c2VTYWZlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtwYWdlSW5mbywgc2V0UGFnZUluZm9TdGF0ZV0gPSB1c2VTYWZlU3RhdGUoe1xuICAgICAgICBjdXJyZW50OiBkZWZhdWx0Q3VycmVudCxcbiAgICAgICAgcGFnZVNpemU6IGRlZmF1bHRQYWdlU2l6ZSxcbiAgICAgICAgdG90YWw6IDAsXG4gICAgfSk7XG4gICAgY29uc3QgcmVsb2FkU2lnbmFsID0gdXNlQXdhaXRhYmxlUmVsb2FkKCk7XG4gICAgY29uc3QgcmVxUmVmID0gdXNlTGF0ZXN0KHJlcXVlc3QpO1xuICAgIGNvbnN0IGNhbGxiYWNrcyA9IHVzZUxhdGVzdCh7IG9uTG9hZCwgb25Mb2FkaW5nQ2hhbmdlLCBvblJlcXVlc3RFcnJvciwgcG9zdERhdGEgfSk7XG4gICAgY29uc3QgbG9hZGluZ1JlZiA9IHVzZUxhdGVzdChsb2FkaW5nKTtcbiAgICBjb25zdCByZXF1ZXN0SWRSZWYgPSB1c2VSZWYoMCk7XG4gICAgY29uc3QgYWJvcnRSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3Qgc2tpcEZpcnN0UmVmID0gdXNlUmVmKG1hbnVhbFJlcXVlc3QgPT09IHRydWUpO1xuICAgIGNvbnN0IHByZXZQYXJhbXNSZWYgPSB1c2VSZWYodW5kZWZpbmVkKTtcbiAgICBjb25zdCBkZWJvdW5jZVRpbWVyUmVmID0gdXNlUmVmKHVuZGVmaW5lZCk7XG4gICAgLy8gU2V0IHJpZ2h0IGJlZm9yZSBhIHBvbGxpbmctdHJpZ2dlcmVkIHJlZmV0Y2ggc28gaXQgY2FuIHJlZnJlc2ggc2lsZW50bHlcbiAgICAvLyAod2l0aG91dCBmbGFzaGluZyB0aGUgbWFpbiBsb2FkaW5nIG92ZXJsYXkpLiBDb25zdW1lZCBhdCB0aGUgc3RhcnQgb2YgcnVuUmVxdWVzdC5cbiAgICBjb25zdCBzaWxlbnRSZWYgPSB1c2VSZWYoZmFsc2UpO1xuICAgIGNvbnN0IHNldExvYWRpbmcgPSB1c2VNZW1vaXplZEZuKChuZXh0KSA9PiB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHNldExvYWRpbmdTdGF0ZShuZXh0KTtcbiAgICAgICAgKF9iID0gKF9hID0gY2FsbGJhY2tzLmN1cnJlbnQpLm9uTG9hZGluZ0NoYW5nZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIG5leHQpO1xuICAgIH0pO1xuICAgIGNvbnN0IHNldFBhZ2VJbmZvID0gdXNlTWVtb2l6ZWRGbigoaW5mbykgPT4ge1xuICAgICAgICBzZXRQYWdlSW5mb1N0YXRlKChwcmV2KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtZXJnZWQgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCBpbmZvKTtcbiAgICAgICAgICAgIGlmIChtZXJnZWQuY3VycmVudCA9PT0gcHJldi5jdXJyZW50ICYmIG1lcmdlZC5wYWdlU2l6ZSA9PT0gcHJldi5wYWdlU2l6ZSAmJiBtZXJnZWQudG90YWwgPT09IHByZXYudG90YWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtZXJnZWQ7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIC8vIFRoZSBzaW5nbGUgbmV0d29yayBlbnRyeSBwb2ludDogYWJvcnQgdGhlIHByZXZpb3VzIHJlcXVlc3QsIHRoZW4gYXBwbHkgZGF0YVxuICAgIC8vIHdoaWxlIGd1YXJkaW5nIGFnYWluc3Qgc3RhbGUgLyBhYm9ydGVkIHJlc3BvbnNlcy5cbiAgICBjb25zdCBydW5SZXF1ZXN0ID0gdXNlTWVtb2l6ZWRGbigobWVyZ2VkLCBzdCwgZnQpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2Y7XG4gICAgICAgIGNvbnN0IHJlcSA9IHJlcVJlZi5jdXJyZW50O1xuICAgICAgICBpZiAoIXJlcSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgLy8gQSBwb2xsaW5nIHJlZmV0Y2ggcmVmcmVzaGVzIHNpbGVudGx5IOKAlCBubyBsb2FkaW5nIG92ZXJsYXkgZmxhc2guXG4gICAgICAgIGNvbnN0IHNpbGVudCA9IHNpbGVudFJlZi5jdXJyZW50O1xuICAgICAgICBzaWxlbnRSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICAoX2EgPSBhYm9ydFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYWJvcnQoKTtcbiAgICAgICAgY29uc3QgYWJvcnQgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICAgIGFib3J0UmVmLmN1cnJlbnQgPSBhYm9ydDtcbiAgICAgICAgY29uc3QgcmVxdWVzdElkID0gKytyZXF1ZXN0SWRSZWYuY3VycmVudDtcbiAgICAgICAgaWYgKCFzaWxlbnQpXG4gICAgICAgICAgICBzZXRMb2FkaW5nKHRydWUpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0geWllbGQgcmVxKG1lcmdlZCwgc3QsIGZ0LCB7IHNpZ25hbDogYWJvcnQuc2lnbmFsIH0pO1xuICAgICAgICAgICAgaWYgKGFib3J0LnNpZ25hbC5hYm9ydGVkIHx8IHJlcXVlc3RJZCAhPT0gcmVxdWVzdElkUmVmLmN1cnJlbnQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCByYXcgPSAoX2IgPSByZXN1bHQuZGF0YSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogW107XG4gICAgICAgICAgICBjb25zdCBuZXh0ID0gY2FsbGJhY2tzLmN1cnJlbnQucG9zdERhdGEgPyBjYWxsYmFja3MuY3VycmVudC5wb3N0RGF0YShyYXcpIDogcmF3O1xuICAgICAgICAgICAgc2V0RGF0YVNvdXJjZShuZXh0KTtcbiAgICAgICAgICAgIHNldFBhZ2VJbmZvU3RhdGUoKHByZXYpID0+IHsgdmFyIF9hOyByZXR1cm4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgdG90YWw6IChfYSA9IHJlc3VsdC50b3RhbCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbmV4dC5sZW5ndGggfSkpOyB9KTtcbiAgICAgICAgICAgIChfZCA9IChfYyA9IGNhbGxiYWNrcy5jdXJyZW50KS5vbkxvYWQpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5jYWxsKF9jLCBuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChhYm9ydC5zaWduYWwuYWJvcnRlZCB8fCByZXF1ZXN0SWQgIT09IHJlcXVlc3RJZFJlZi5jdXJyZW50KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIChfZiA9IChfZSA9IGNhbGxiYWNrcy5jdXJyZW50KS5vblJlcXVlc3RFcnJvcikgPT09IG51bGwgfHwgX2YgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9mLmNhbGwoX2UsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmICghc2lsZW50ICYmIHJlcXVlc3RJZCA9PT0gcmVxdWVzdElkUmVmLmN1cnJlbnQpXG4gICAgICAgICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgLy8gQnVpbGQgdGhlIHJlcXVlc3QgcGFyYW1zIGZyb20gdGhlIGN1cnJlbnQgcmVuZGVyIGNsb3N1cmUuXG4gICAgY29uc3QgYnVpbGRNZXJnZWQgPSAoKSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIChwYXJhbXMgIT09IG51bGwgJiYgcGFyYW1zICE9PSB2b2lkIDAgPyBwYXJhbXMgOiB7fSkpLCBzZWFyY2hQYXJhbXMpLCAocGFnaW5hdGVkID8geyBjdXJyZW50OiBwYWdlSW5mby5jdXJyZW50LCBwYWdlU2l6ZTogcGFnZUluZm8ucGFnZVNpemUgfSA6IHt9KSkpO1xuICAgIC8vIE9ubHkgYHBhcmFtc2AgKGEgY29uc3VtZXItb3duZWQgcHJvcCwgb2Z0ZW4gYW4gaW5saW5lIG9iamVjdCkgbmVlZHMgdmFsdWVcbiAgICAvLyBjb21wYXJpc29uOyB0aGUgcmVzdCBhcmUgc3RhYmxlIGludGVybmFsIHN0YXRlIGFuZCBjb21wYXJlIGJ5IHJlZmVyZW5jZS5cbiAgICBjb25zdCBwYXJhbXNLZXkgPSBKU09OLnN0cmluZ2lmeShwYXJhbXMgIT09IG51bGwgJiYgcGFyYW1zICE9PSB2b2lkIDAgPyBwYXJhbXMgOiBudWxsKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAobWFudWFsKSB7XG4gICAgICAgICAgICByZWxvYWRTaWduYWwuc2V0dGxlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gbWFudWFsUmVxdWVzdDogc3dhbGxvdyBvbmx5IHRoZSBmaXJzdCAobW91bnQpIHRyaWdnZXIuXG4gICAgICAgIGlmIChza2lwRmlyc3RSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgc2tpcEZpcnN0UmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgIHByZXZQYXJhbXNSZWYuY3VycmVudCA9IHBhcmFtc0tleTtcbiAgICAgICAgICAgIHJlbG9hZFNpZ25hbC5zZXR0bGUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBBIGBwYXJhbXNgIGNoYW5nZSByZXNldHMgdG8gcGFnZSAxIGZpcnN0OyB0aGUgcGFnZSBjaGFuZ2UgcmUtcnVucyB0aGlzXG4gICAgICAgIC8vIGVmZmVjdCwgd2hlcmUgdGhlIGFjdHVhbCBmZXRjaCBoYXBwZW5zIChzbyBpdCBuZXZlciBkb3VibGUtZmV0Y2hlcykuXG4gICAgICAgIGlmIChwcmV2UGFyYW1zUmVmLmN1cnJlbnQgIT09IHBhcmFtc0tleSAmJiBwYWdlSW5mby5jdXJyZW50ICE9PSBkZWZhdWx0Q3VycmVudCkge1xuICAgICAgICAgICAgcHJldlBhcmFtc1JlZi5jdXJyZW50ID0gcGFyYW1zS2V5O1xuICAgICAgICAgICAgc2V0UGFnZUluZm8oeyBjdXJyZW50OiBkZWZhdWx0Q3VycmVudCB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBwcmV2UGFyYW1zUmVmLmN1cnJlbnQgPSBwYXJhbXNLZXk7XG4gICAgICAgIGNvbnN0IGZpcmUgPSAoKSA9PiBydW5SZXF1ZXN0KGJ1aWxkTWVyZ2VkKCksIHNvcnQsIGZpbHRlcikuZmluYWxseShyZWxvYWRTaWduYWwuc2V0dGxlKTtcbiAgICAgICAgaWYgKGRlYm91bmNlVGltZSAmJiBkZWJvdW5jZVRpbWUgPiAwKSB7XG4gICAgICAgICAgICBpZiAoZGVib3VuY2VUaW1lclJlZi5jdXJyZW50KVxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWJvdW5jZVRpbWVyUmVmLmN1cnJlbnQpO1xuICAgICAgICAgICAgZGVib3VuY2VUaW1lclJlZi5jdXJyZW50ID0gc2V0VGltZW91dChmaXJlLCBkZWJvdW5jZVRpbWUpO1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZGVib3VuY2VUaW1lclJlZi5jdXJyZW50KVxuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVib3VuY2VUaW1lclJlZi5jdXJyZW50KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdm9pZCBmaXJlKCk7XG4gICAgfSwgW3BhcmFtc0tleSwgc2VhcmNoUGFyYW1zLCBzb3J0LCBmaWx0ZXIsIHBhZ2VJbmZvLmN1cnJlbnQsIHBhZ2VJbmZvLnBhZ2VTaXplLCByZWxvYWRTaWduYWwudG9rZW4sIG1hbnVhbF0pO1xuICAgIGNvbnN0IHJlbG9hZCA9IHVzZU1lbW9pemVkRm4oKCkgPT4gKG1hbnVhbCA/IFByb21pc2UucmVzb2x2ZSgpIDogcmVsb2FkU2lnbmFsLnJlcXVlc3QoKSkpO1xuICAgIGNvbnN0IHJlc2V0ID0gdXNlTWVtb2l6ZWRGbigoKSA9PiB7XG4gICAgICAgIHNldFBhZ2VJbmZvU3RhdGUoKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IGN1cnJlbnQ6IGRlZmF1bHRDdXJyZW50LCBwYWdlU2l6ZTogZGVmYXVsdFBhZ2VTaXplIH0pKSk7XG4gICAgfSk7XG4gICAgLy8gUG9sbGluZzogcmUtdHJpZ2dlciBvbiBhbiBpbnRlcnZhbCwgc2tpcHBpbmcgdGlja3Mgd2hpbGUgYSByZXF1ZXN0IGlzIGluIGZsaWdodC5cbiAgICBjb25zdCBwb2xsaW5nTXMgPSB0eXBlb2YgcG9sbGluZyA9PT0gJ2Z1bmN0aW9uJyA/IHBvbGxpbmcoZGF0YVNvdXJjZSkgOiBwb2xsaW5nO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChtYW51YWwgfHwgIXBvbGxpbmdNcyB8fCBwb2xsaW5nTXMgPD0gMClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgaWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAobG9hZGluZ1JlZi5jdXJyZW50KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHNpbGVudFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIHZvaWQgcmVsb2FkU2lnbmFsLnJlcXVlc3QoKTtcbiAgICAgICAgfSwgcG9sbGluZ01zKTtcbiAgICAgICAgcmV0dXJuICgpID0+IGNsZWFySW50ZXJ2YWwoaWQpO1xuICAgIH0sIFtwb2xsaW5nTXMsIG1hbnVhbF0pO1xuICAgIC8vIEFib3J0IGFueSBpbi1mbGlnaHQgcmVxdWVzdCBvbiB1bm1vdW50LlxuICAgIHVzZUVmZmVjdCgoKSA9PiAoKSA9PiB7IHZhciBfYTsgcmV0dXJuIChfYSA9IGFib3J0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hYm9ydCgpOyB9LCBbXSk7XG4gICAgcmV0dXJuIHsgZGF0YVNvdXJjZSwgbG9hZGluZywgcGFnZUluZm8sIHNldFBhZ2VJbmZvLCByZWxvYWQsIHJlc2V0IH07XG59Il0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
|