@datagrok-libraries/utils 4.5.1 → 4.5.2
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/package.json +1 -1
- package/src/test.js +11 -9
package/package.json
CHANGED
package/src/test.js
CHANGED
|
@@ -399,11 +399,11 @@ export function runTests(options) {
|
|
|
399
399
|
});
|
|
400
400
|
}
|
|
401
401
|
function invokeTestsInCategory(category, options) {
|
|
402
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1;
|
|
402
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5;
|
|
403
403
|
return __awaiter(this, void 0, void 0, function* () {
|
|
404
404
|
let t = (_a = category.tests) !== null && _a !== void 0 ? _a : [];
|
|
405
405
|
const res = [];
|
|
406
|
-
|
|
406
|
+
let memoryUsageBefore = (_c = (_b = window === null || window === void 0 ? void 0 : window.performance) === null || _b === void 0 ? void 0 : _b.memory) === null || _c === void 0 ? void 0 : _c.usedJSHeapSize;
|
|
407
407
|
const widgetsBefore = DG.Widget.getAll().length;
|
|
408
408
|
if (category.clear) {
|
|
409
409
|
for (let i = 0; i < t.length; i++) {
|
|
@@ -424,11 +424,12 @@ export function runTests(options) {
|
|
|
424
424
|
let isGBEnable = window.gc && ((_k = test.options) === null || _k === void 0 ? void 0 : _k.skipReason) == undefined;
|
|
425
425
|
if (isGBEnable)
|
|
426
426
|
window.gc();
|
|
427
|
-
|
|
427
|
+
memoryUsageBefore = (_m = (_l = window === null || window === void 0 ? void 0 : window.performance) === null || _l === void 0 ? void 0 : _l.memory) === null || _m === void 0 ? void 0 : _m.usedJSHeapSize;
|
|
428
|
+
let testRun = yield execTest(test, options === null || options === void 0 ? void 0 : options.test, logs, DG.Test.isInBenchmark ? (_p = (_o = t[i].options) === null || _o === void 0 ? void 0 : _o.benchmarkTimeout) !== null && _p !== void 0 ? _p : BENCHMARK_TIMEOUT : (_r = (_q = t[i].options) === null || _q === void 0 ? void 0 : _q.timeout) !== null && _r !== void 0 ? _r : STANDART_TIMEOUT, package_.name, options.verbose);
|
|
428
429
|
if (isGBEnable)
|
|
429
430
|
window.gc();
|
|
430
431
|
if (testRun)
|
|
431
|
-
res.push(Object.assign(Object.assign({}, testRun), { memoryDelta: ((
|
|
432
|
+
res.push(Object.assign(Object.assign({}, testRun), { memoryDelta: ((_t = (_s = window === null || window === void 0 ? void 0 : window.performance) === null || _s === void 0 ? void 0 : _s.memory) === null || _t === void 0 ? void 0 : _t.usedJSHeapSize) - memoryUsageBefore, widgetsDelta: DG.Widget.getAll().length - widgetsBefore }));
|
|
432
433
|
grok.shell.closeAll();
|
|
433
434
|
DG.Balloon.closeAll();
|
|
434
435
|
}
|
|
@@ -439,17 +440,18 @@ export function runTests(options) {
|
|
|
439
440
|
if (options.test)
|
|
440
441
|
if (options.test.toLowerCase() === test.name.toLowerCase())
|
|
441
442
|
continue;
|
|
442
|
-
let isGBEnable = window.gc && ((
|
|
443
|
+
let isGBEnable = window.gc && ((_u = test.options) === null || _u === void 0 ? void 0 : _u.skipReason) == undefined;
|
|
443
444
|
if (test === null || test === void 0 ? void 0 : test.options) {
|
|
444
|
-
test.options.owner = (
|
|
445
|
+
test.options.owner = (_y = (_x = (_w = (_v = t[i].options) === null || _v === void 0 ? void 0 : _v.owner) !== null && _w !== void 0 ? _w : category === null || category === void 0 ? void 0 : category.owner) !== null && _x !== void 0 ? _x : packageOwner) !== null && _y !== void 0 ? _y : '';
|
|
445
446
|
}
|
|
446
447
|
if (isGBEnable)
|
|
447
448
|
window.gc();
|
|
448
|
-
|
|
449
|
+
memoryUsageBefore = (_0 = (_z = window === null || window === void 0 ? void 0 : window.performance) === null || _z === void 0 ? void 0 : _z.memory) === null || _0 === void 0 ? void 0 : _0.usedJSHeapSize;
|
|
450
|
+
let testRun = yield execTest(test, options === null || options === void 0 ? void 0 : options.test, logs, DG.Test.isInBenchmark ? (_2 = (_1 = t[i].options) === null || _1 === void 0 ? void 0 : _1.benchmarkTimeout) !== null && _2 !== void 0 ? _2 : BENCHMARK_TIMEOUT : (_3 = t[i].options) === null || _3 === void 0 ? void 0 : _3.timeout, package_.name, options.verbose);
|
|
449
451
|
if (isGBEnable)
|
|
450
452
|
window.gc();
|
|
451
453
|
if (testRun)
|
|
452
|
-
res.push(Object.assign(Object.assign({}, testRun), { memoryUsed: ((
|
|
454
|
+
res.push(Object.assign(Object.assign({}, testRun), { memoryUsed: ((_5 = (_4 = window === null || window === void 0 ? void 0 : window.performance) === null || _4 === void 0 ? void 0 : _4.memory) === null || _5 === void 0 ? void 0 : _5.usedJSHeapSize) - memoryUsageBefore, widgetsDifference: DG.Widget.getAll().length - widgetsBefore }));
|
|
453
455
|
}
|
|
454
456
|
}
|
|
455
457
|
return res;
|
|
@@ -751,4 +753,4 @@ export function testViewer(v, df, options) {
|
|
|
751
753
|
}
|
|
752
754
|
});
|
|
753
755
|
}
|
|
754
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLElBQUksTUFBTSxtQkFBbUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXRDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU3QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSx5QkFBeUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRJLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0FBQy9CLE1BQU0saUJBQWlCLEdBQUcsUUFBUSxDQUFDO0FBRW5DLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzNDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzNDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRTdDLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FFZCxFQUFFLENBQUM7QUFFUCxNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQztBQUN0QyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUM7QUFDM0IsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUM7QUFDckMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDO0FBQzNCLE1BQU0sYUFBYSxHQUErQixFQUFFLENBQUM7QUFDckQsTUFBTSxDQUFDLElBQUksZUFBdUIsQ0FBQztBQUVuQyxNQUFNLEtBQVcsTUFBTSxDQUt0QjtBQUxE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O2dCQUN0QixNQUFNLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxPQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7U0FFOUc7Z0JBQVM7WUFDUixpREFBaUQ7WUFDakQseUJBQXlCO1lBQ3pCLHlCQUF5QjtTQUMxQjs7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRlc3REYXRhIH0gZnJvbSAnLi9kYXRhZnJhbWUtdXRpbHMnO1xuaW1wb3J0IFRpbWVvdXQgPSBOb2RlSlMuVGltZW91dDtcbmltcG9ydCB7IGNoYW5nZU9wdGlvbnNTYXZlTGF5b3V0LCBmaWx0ZXJBc3luYywgbG9hZExheW91dCwgc2VsZWN0RmlsdGVyQ2hhbmdlQ3VycmVudCwgdGVzdFZpZXdlckludGVybmFsIH0gZnJvbSAnLi90ZXN0LXZpZXdlci11dGlscyc7XG5cbmNvbnN0IFNUQU5EQVJUX1RJTUVPVVQgPSAzMDAwMDtcbmNvbnN0IEJFTkNITUFSS19USU1FT1VUID0gMTA4MDAwMDA7XG5cbmNvbnN0IHN0ZExvZyA9IGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSk7XG5jb25zdCBzdGRJbmZvID0gY29uc29sZS5pbmZvLmJpbmQoY29uc29sZSk7XG5jb25zdCBzdGRXYXJuID0gY29uc29sZS53YXJuLmJpbmQoY29uc29sZSk7XG5jb25zdCBzdGRFcnJvciA9IGNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlKTtcblxuZXhwb3J0IGNvbnN0IHRlc3RzOiB7XG4gIFtrZXk6IHN0cmluZ106IENhdGVnb3J5XG59ID0ge307XG5cbmNvbnN0IGF1dG9UZXN0c0NhdE5hbWUgPSAnQXV0byBUZXN0cyc7XG5jb25zdCBkZW1vQ2F0TmFtZSA9ICdEZW1vJztcbmNvbnN0IGRldGVjdG9yc0NhdE5hbWUgPSAnRGV0ZWN0b3JzJztcbmNvbnN0IGNvcmVDYXROYW1lID0gJ0NvcmUnO1xuY29uc3Qgd2FzUmVnaXN0ZXJlZDogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gPSB7fTtcbmV4cG9ydCBsZXQgY3VycmVudENhdGVnb3J5OiBzdHJpbmc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgYXNzdXJlIHtcbiAgZXhwb3J0IGZ1bmN0aW9uIG5vdE51bGwodmFsdWU6IGFueSwgbmFtZT86IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke25hbWUgPT0gbnVsbCA/ICdWYWx1ZScgOiBuYW1lfSBub3QgZGVmaW5lZGApO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdE9wdGlvbnMge1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICBiZW5jaG1hcmtXYXJuVGltZW91dD86IG51bWJlcjtcbiAgYmVuY2htYXJrVGltZW91dD86IG51bWJlcjtcbiAgdW5oYW5kbGVkRXhjZXB0aW9uVGltZW91dD86IG51bWJlcjtcbiAgc2tpcFJlYXNvbj86IHN0cmluZztcbiAgaXNBZ2dyZWdhdGVkPzogYm9vbGVhbjtcbiAgYmVuY2htYXJrPzogYm9vbGVhbjtcbiAgc3RyZXNzVGVzdD86IGJvb2xlYW47XG4gIG93bmVyPzogc3RyaW5nO1xuICB0YWdzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2F0ZWdvcnlPcHRpb25zIHtcbiAgY2xlYXI/OiBib29sZWFuO1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICBiZW5jaG1hcmtzPzogYm9vbGVhbjtcbiAgc3RyZXNzVGVzdHM/OiBib29sZWFuO1xuICBvd25lcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFRlc3RDb250ZXh0IHtcbiAgc3RyZXNzVGVzdD86IGJvb2xlYW47XG4gIGNhdGNoVW5oYW5kbGVkID0gdHJ1ZTtcbiAgcmVwb3J0ID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoY2F0Y2hVbmhhbmRsZWQ/OiBib29sZWFuLCByZXBvcnQ/OiBib29sZWFuKSB7XG4gICAgaWYgKGNhdGNoVW5oYW5kbGVkICE9PSB1bmRlZmluZWQpIHRoaXMuY2F0Y2hVbmhhbmRsZWQgPSBjYXRjaFVuaGFuZGxlZDtcbiAgICBpZiAocmVwb3J0ICE9PSB1bmRlZmluZWQpIHRoaXMucmVwb3J0ID0gcmVwb3J0O1xuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgVGVzdCB7XG4gIHRlc3Q6ICgpID0+IFByb21pc2U8YW55PjtcbiAgbmFtZTogc3RyaW5nO1xuICBjYXRlZ29yeTogc3RyaW5nO1xuICBvcHRpb25zPzogVGVzdE9wdGlvbnM7XG5cbiAgY29uc3RydWN0b3IoY2F0ZWdvcnk6IHN0cmluZywgbmFtZTogc3RyaW5nLCB0ZXN0OiAoKSA9PiBQcm9taXNlPGFueT4sIG9wdGlvbnM/OiBUZXN0T3B0aW9ucykge1xuICAgIHRoaXMuY2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIG9wdGlvbnMgPz89IHt9O1xuICAgIG9wdGlvbnMudGltZW91dCA/Pz0gU1RBTkRBUlRfVElNRU9VVDtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMudGVzdCA9IGFzeW5jICgpOiBQcm9taXNlPGFueT4gPT4ge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChERy5UZXN0LmlzSW5EZWJ1ZylcbiAgICAgICAgICAgIGRlYnVnZ2VyO1xuICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IHRlc3QoKTtcbiAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENhdGVnb3J5IHtcbiAgdGVzdHM/OiBUZXN0W107XG4gIGJlZm9yZT86ICgpID0+IFByb21pc2U8dm9pZD47XG4gIGFmdGVyPzogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICBiZWZvcmVTdGF0dXM/OiBzdHJpbmc7XG4gIGFmdGVyU3RhdHVzPzogc3RyaW5nO1xuICBjbGVhcj86IGJvb2xlYW47XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIGJlbmNobWFya3M/OiBib29sZWFuO1xuICBiZW5jaG1hcmtUaW1lb3V0PzogbnVtYmVyO1xuICBzdHJlc3NUZXN0cz86IGJvb2xlYW47XG4gIG93bmVyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgVGVzdEV4ZWN1dGlvbk9wdGlvbnMge1xuICBjYXRlZ29yeT86IHN0cmluZztcbiAgdGVzdD86IHN0cmluZztcbiAgdGVzdENvbnRleHQ/OiBUZXN0Q29udGV4dDtcbiAgZXhjbHVkZT86IHN0cmluZ1tdO1xuICB2ZXJib3NlPzogYm9vbGVhbjtcbiAgc3RyZXNzVGVzdD86IGJvb2xlYW47XG4gIHRhZ3M/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlc3RFdmVudDxUPihldmVudDogT2JzZXJ2YWJsZTxUPixcbiAgaGFuZGxlcjogKGFyZ3M6IFQpID0+IHZvaWQsIHRyaWdnZXI6ICgpID0+IHZvaWQsIG1zOiBudW1iZXIgPSAwLCByZWFzb246IHN0cmluZyA9IGB0aW1lb3V0YFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzdWIgPSBldmVudC5zdWJzY3JpYmUoKGFyZ3M6IFQpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGhhbmRsZXIoYXJncyk7XG4gICAgICAgIHJlc29sdmUoJ09LJyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXByb21pc2UtcmVqZWN0LWVycm9yc1xuICAgICAgcmVqZWN0KHJlYXNvbik7XG4gICAgfSwgbXMpO1xuICAgIHRyaWdnZXIoKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0ZXN0RXZlbnRBc3luYzxUPihldmVudDogT2JzZXJ2YWJsZTxUPixcbiAgaGFuZGxlcjogKGFyZ3M6IFQpID0+IFByb21pc2U8dm9pZD4sIHRyaWdnZXI6ICgpID0+IHZvaWQsIG1zOiBudW1iZXIgPSAwLCByZWFzb246IHN0cmluZyA9IGB0aW1lb3V0YFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzdWIgPSBldmVudC5zdWJzY3JpYmUoKGFyZ3M6IFQpID0+IHtcbiAgICAgIGhhbmRsZXIoYXJncykudGhlbigoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoJ09LJyk7XG4gICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9KS5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1wcm9taXNlLXJlamVjdC1lcnJvcnNcbiAgICAgIHJlamVjdChyZWFzb24pO1xuICAgIH0sIG1zKTtcbiAgICB0cmlnZ2VyKCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVzdChuYW1lOiBzdHJpbmcsIHRlc3Q6ICgpID0+IFByb21pc2U8YW55Piwgb3B0aW9ucz86IFRlc3RPcHRpb25zKTogdm9pZCB7XG4gIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID09IHVuZGVmaW5lZClcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID0ge307XG4gIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnRlc3RzID09IHVuZGVmaW5lZClcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnRlc3RzID0gW107XG4gIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMhLnB1c2gobmV3IFRlc3QoY3VycmVudENhdGVnb3J5LCBuYW1lLCB0ZXN0LCBvcHRpb25zKSk7XG59XG5cbi8qIFRlc3RzIHR3byBvYmplY3RzIGZvciBlcXVhbGl0eSwgdGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGV5IGFyZSBub3QgZXF1YWwuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0KGFjdHVhbDogYW55LCBleHBlY3RlZDogYW55ID0gdHJ1ZSwgZXJyb3I/OiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKGVycm9yKVxuICAgIGVycm9yID0gYCR7ZXJyb3J9LCBgO1xuICBlbHNlIGVycm9yID0gJyc7XG4gIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKVxuICAgIHRocm93IG5ldyBFcnJvcihgJHtlcnJvcn1FeHBlY3RlZCBcIiR7ZXhwZWN0ZWR9XCIsIGdvdCBcIiR7YWN0dWFsfVwiYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RGbG9hdChhY3R1YWw6IG51bWJlciwgZXhwZWN0ZWQ6IG51bWJlciwgdG9sZXJhbmNlID0gMC4wMDEsIGVycm9yPzogc3RyaW5nKTogdm9pZCB7XG4gIGlmICgoYWN0dWFsID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgJiYgZXhwZWN0ZWQgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkgfHxcbiAgICAoYWN0dWFsID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgJiYgZXhwZWN0ZWQgPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSkgfHxcbiAgICAoYWN0dWFsID09PSBOdW1iZXIuTmFOICYmIGV4cGVjdGVkID09PSBOdW1iZXIuTmFOKSB8fCAoaXNOYU4oYWN0dWFsKSAmJiBpc05hTihleHBlY3RlZCkpKVxuICAgIHJldHVybjtcbiAgY29uc3QgYXJlRXF1YWwgPSBNYXRoLmFicyhhY3R1YWwgLSBleHBlY3RlZCkgPCB0b2xlcmFuY2U7XG4gIGV4cGVjdChhcmVFcXVhbCwgdHJ1ZSwgYCR7ZXJyb3IgPz8gJyd9ICh0b2xlcmFuY2UgPSAke3RvbGVyYW5jZX0pYCk7XG4gIGlmICghYXJlRXF1YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke2V4cGVjdGVkfSwgZ290ICR7YWN0dWFsfSAodG9sZXJhbmNlID0gJHt0b2xlcmFuY2V9KWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0VGFibGUoYWN0dWFsOiBERy5EYXRhRnJhbWUsIGV4cGVjdGVkOiBERy5EYXRhRnJhbWUsIGVycm9yPzogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IGV4cGVjdGVkUm93Q291bnQgPSBleHBlY3RlZC5yb3dDb3VudDtcbiAgY29uc3QgYWN0dWFsUm93Q291bnQgPSBhY3R1YWwucm93Q291bnQ7XG4gIGV4cGVjdChhY3R1YWxSb3dDb3VudCwgZXhwZWN0ZWRSb3dDb3VudCwgYCR7ZXJyb3IgPz8gJyd9LCByb3cgY291bnRgKTtcblxuICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBleHBlY3RlZC5jb2x1bW5zKSB7XG4gICAgY29uc3QgYWN0dWFsQ29sdW1uID0gYWN0dWFsLmNvbHVtbnMuYnlOYW1lKGNvbHVtbi5uYW1lKTtcbiAgICBpZiAoYWN0dWFsQ29sdW1uID09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbHVtbiAke2NvbHVtbi5uYW1lfSBub3QgZm91bmRgKTtcbiAgICBpZiAoYWN0dWFsQ29sdW1uLnR5cGUgIT0gY29sdW1uLnR5cGUpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbHVtbiAke2NvbHVtbi5uYW1lfSB0eXBlIGV4cGVjdGVkICR7Y29sdW1uLnR5cGV9IGdvdCAke2FjdHVhbENvbHVtbi50eXBlfWApO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXhwZWN0ZWRSb3dDb3VudDsgaSsrKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGNvbHVtbi5nZXQoaSk7XG4gICAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IGFjdHVhbENvbHVtbi5nZXQoaSk7XG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT0gREcuVFlQRS5GTE9BVClcbiAgICAgICAgZXhwZWN0RmxvYXQoYWN0dWFsVmFsdWUsIHZhbHVlLCAwLjAwMDEsIGVycm9yKTtcbiAgICAgIGVsc2UgaWYgKGNvbHVtbi50eXBlID09IERHLlRZUEUuREFURV9USU1FKVxuICAgICAgICBleHBlY3QoYWN0dWFsVmFsdWUuaXNTYW1lKHZhbHVlKSwgdHJ1ZSwgZXJyb3IpO1xuICAgICAgZWxzZVxuICAgICAgICBleHBlY3QoYWN0dWFsVmFsdWUsIHZhbHVlLCBlcnJvcik7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RPYmplY3QoYWN0dWFsOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBleHBlY3RlZDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkge1xuICBmb3IgKGNvbnN0IFtleHBlY3RlZEtleSwgZXhwZWN0ZWRWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZXhwZWN0ZWQpKSB7XG4gICAgaWYgKCFhY3R1YWwuaGFzT3duUHJvcGVydHkoZXhwZWN0ZWRLZXkpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBwcm9wZXJ0eSBcIiR7ZXhwZWN0ZWRLZXl9XCIgbm90IGZvdW5kYCk7XG5cbiAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IGFjdHVhbFtleHBlY3RlZEtleV07XG4gICAgaWYgKGFjdHVhbFZhbHVlIGluc3RhbmNlb2YgQXJyYXkgJiYgZXhwZWN0ZWRWYWx1ZSBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgZXhwZWN0QXJyYXkoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpO1xuICAgIGVsc2UgaWYgKGFjdHVhbFZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICYmIGV4cGVjdGVkVmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpXG4gICAgICBleHBlY3RPYmplY3QoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpO1xuICAgIGVsc2UgaWYgKE51bWJlci5pc0Zpbml0ZShhY3R1YWxWYWx1ZSkgJiYgTnVtYmVyLmlzRmluaXRlKGV4cGVjdGVkVmFsdWUpKVxuICAgICAgZXhwZWN0RmxvYXQoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpO1xuICAgIGVsc2UgaWYgKGFjdHVhbFZhbHVlICE9IGV4cGVjdGVkVmFsdWUpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICgke2V4cGVjdGVkVmFsdWV9KSBmb3Iga2V5ICcke2V4cGVjdGVkS2V5fScsIGdvdCAoJHthY3R1YWxWYWx1ZX0pYCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdEFycmF5KGFjdHVhbDogQXJyYXlMaWtlPGFueT4sIGV4cGVjdGVkOiBBcnJheUxpa2U8YW55Pikge1xuICBjb25zdCBhY3R1YWxMZW5ndGggPSBhY3R1YWwubGVuZ3RoO1xuICBjb25zdCBleHBlY3RlZExlbmd0aCA9IGV4cGVjdGVkLmxlbmd0aDtcblxuICBpZiAoYWN0dWFsTGVuZ3RoICE9IGV4cGVjdGVkTGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheXMgYXJlIG9mIGRpZmZlcmVudCBsZW5ndGg6IGFjdHVhbCBhcnJheSBsZW5ndGggaXMgJHthY3R1YWxMZW5ndGh9IGAgK1xuICAgICAgYGFuZCBleHBlY3RlZCBhcnJheSBsZW5ndGggaXMgJHtleHBlY3RlZExlbmd0aH1gKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0dWFsTGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYWN0dWFsW2ldIGluc3RhbmNlb2YgQXJyYXkgJiYgZXhwZWN0ZWRbaV0gaW5zdGFuY2VvZiBBcnJheSlcbiAgICAgIGV4cGVjdEFycmF5KGFjdHVhbFtpXSwgZXhwZWN0ZWRbaV0pO1xuICAgIGVsc2UgaWYgKGFjdHVhbFtpXSBpbnN0YW5jZW9mIE9iamVjdCAmJiBleHBlY3RlZFtpXSBpbnN0YW5jZW9mIE9iamVjdClcbiAgICAgIGV4cGVjdE9iamVjdChhY3R1YWxbaV0sIGV4cGVjdGVkW2ldKTtcbiAgICBlbHNlIGlmIChhY3R1YWxbaV0gIT0gZXhwZWN0ZWRbaV0pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7ZXhwZWN0ZWRbaV19IGF0IHBvc2l0aW9uICR7aX0sIGdvdCAke2FjdHVhbFtpXX1gKTtcbiAgfVxufVxuXG4vKiBEZWZpbmVzIGEgdGVzdCBzdWl0ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXRlZ29yeShjYXRlZ29yeTogc3RyaW5nLCB0ZXN0c186ICgpID0+IHZvaWQsIG9wdGlvbnM/OiBDYXRlZ29yeU9wdGlvbnMpOiB2b2lkIHtcbiAgY3VycmVudENhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gIHRlc3RzXygpO1xuICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSkge1xuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0uY2xlYXIgPSBvcHRpb25zPy5jbGVhciA/PyB0cnVlO1xuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGltZW91dCA9IG9wdGlvbnM/LnRpbWVvdXQ7XG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5iZW5jaG1hcmtzID0gb3B0aW9ucz8uYmVuY2htYXJrcztcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnN0cmVzc1Rlc3RzID0gb3B0aW9ucz8uc3RyZXNzVGVzdHM7XG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5vd25lciA9IG9wdGlvbnM/Lm93bmVyO1xuICB9XG59XG5cbi8qIERlZmluZXMgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIHRlc3RzIGluIHRoaXMgY2F0ZWdvcnkgYXJlIGV4ZWN1dGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJlZm9yZShiZWZvcmU6ICgpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5iZWZvcmUgPSBiZWZvcmU7XG59XG5cbi8qIERlZmluZXMgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBhZnRlciB0aGUgdGVzdHMgaW4gdGhpcyBjYXRlZ29yeSBhcmUgZXhlY3V0ZWQuICovXG5leHBvcnQgZnVuY3Rpb24gYWZ0ZXIoYWZ0ZXI6ICgpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5hZnRlciA9IGFmdGVyO1xufVxuXG5mdW5jdGlvbiBhZGROYW1lc3BhY2Uoczogc3RyaW5nLCBmOiBERy5GdW5jKTogc3RyaW5nIHtcbiAgcmV0dXJuIHMucmVwbGFjZShuZXcgUmVnRXhwKGYubmFtZSwgJ2dpJyksIGYubnFOYW1lKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluaXRBdXRvVGVzdHMocGFja2FnZV86IERHLlBhY2thZ2UsIG1vZHVsZT86IGFueSkge1xuICBjb25zdCBwYWNrYWdlSWQgPSBwYWNrYWdlXy5pZDtcbiAgaWYgKHdhc1JlZ2lzdGVyZWRbcGFja2FnZUlkXSkgcmV0dXJuO1xuICBjb25zdCBtb2R1bGVUZXN0cyA9IG1vZHVsZSA/IG1vZHVsZS50ZXN0cyA6IHRlc3RzO1xuICBpZiAobW9kdWxlVGVzdHNbYXV0b1Rlc3RzQ2F0TmFtZV0gIT09IHVuZGVmaW5lZCB8fFxuICAgIG1vZHVsZVRlc3RzW2RlbW9DYXROYW1lXSAhPT0gdW5kZWZpbmVkIHx8XG4gICAgT2JqZWN0LmtleXMobW9kdWxlVGVzdHMpLmZpbmQoKGMpID0+IGMuc3RhcnRzV2l0aChhdXRvVGVzdHNDYXROYW1lKSB8fCBjLnN0YXJ0c1dpdGgoY29yZUNhdE5hbWUpKSkge1xuICAgIHdhc1JlZ2lzdGVyZWRbcGFja2FnZUlkXSA9IHRydWU7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChwYWNrYWdlXy5uYW1lID09PSAnRGV2VG9vbHMnIHx8ICghIW1vZHVsZSAmJiBtb2R1bGUuX3BhY2thZ2UubmFtZSA9PT0gJ0RldlRvb2xzJykpIHtcbiAgICBmb3IgKGNvbnN0IGYgb2YgKDxhbnk+d2luZG93KS5kYXJ0VGVzdHMpIHtcbiAgICAgIGNvbnN0IGFyciA9IGYubmFtZS5zcGxpdCgvXFxzKlxcfFxccyohL2cpO1xuICAgICAgbGV0IG5hbWUgPSBhcnIucG9wKCkgPz8gZi5uYW1lO1xuICAgICAgbGV0IGNhdCA9IGFyci5sZW5ndGggPyBjb3JlQ2F0TmFtZSArICc6ICcgKyBhcnIuam9pbignOiAnKSA6IGNvcmVDYXROYW1lO1xuICAgICAgbGV0IGZ1bGxOYW1lOiBzdHJpbmdbXSA9IG5hbWUuc3BsaXQoJyB8ICcpO1xuICAgICAgbmFtZSA9IGZ1bGxOYW1lW2Z1bGxOYW1lLmxlbmd0aCAtIDFdO1xuICAgICAgZnVsbE5hbWUudW5zaGlmdChjYXQpO1xuICAgICAgZnVsbE5hbWUucG9wKCk7XG4gICAgICBjYXQgPSBmdWxsTmFtZS5qb2luKCc6ICcpO1xuICAgICAgaWYgKG1vZHVsZVRlc3RzW2NhdF0gPT09IHVuZGVmaW5lZClcbiAgICAgICAgbW9kdWxlVGVzdHNbY2F0XSA9IHsgdGVzdHM6IFtdLCBjbGVhcjogdHJ1ZSB9O1xuICAgICAgbW9kdWxlVGVzdHNbY2F0XS50ZXN0cy5wdXNoKG5ldyBUZXN0KGNhdCwgbmFtZSwgZi50ZXN0LCB7IGlzQWdncmVnYXRlZDogZmFsc2UsIHRpbWVvdXQ6IGYub3B0aW9ucz8udGltZW91dCA/PyBTVEFOREFSVF9USU1FT1VULCBza2lwUmVhc29uOiBmLm9wdGlvbnM/LnNraXBSZWFzb24sIG93bmVyOiBmLm9wdGlvbnM/Lm93bmVyIH0pKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgbW9kdWxlQXV0b1Rlc3RzID0gW107XG4gIGNvbnN0IG1vZHVsZURlbW8gPSBbXTtcbiAgY29uc3QgbW9kdWxlRGV0ZWN0b3JzID0gW107XG4gIGNvbnN0IHBhY2tGdW5jdGlvbnMgPSBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmZpbHRlcihgcGFja2FnZS5pZCA9IFwiJHtwYWNrYWdlSWR9XCJgKS5saXN0KCk7XG4gIGNvbnN0IHJlZyA9IG5ldyBSZWdFeHAoL3NraXA6XFxzKihbXixcXHNdKyl8d2FpdDpcXHMqKFxcZCspfGNhdDpcXHMqKFteLFxcc10rKXx0aW1lb3V0OlxccyooXFxkKykvZyk7XG4gIGZvciAoY29uc3QgZiBvZiBwYWNrRnVuY3Rpb25zKSB7XG4gICAgY29uc3QgdGVzdHMgPSBmLm9wdGlvbnNbJ3Rlc3QnXTtcbiAgICBjb25zdCBkZW1vID0gZi5vcHRpb25zWydkZW1vUGF0aCddO1xuICAgIGlmICgodGVzdHMgJiYgQXJyYXkuaXNBcnJheSh0ZXN0cykgJiYgdGVzdHMubGVuZ3RoKSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCByZXMgPSAodGVzdHNbaV0gYXMgc3RyaW5nKS5tYXRjaEFsbChyZWcpO1xuICAgICAgICBjb25zdCBtYXA6IHsgc2tpcD86IHN0cmluZywgd2FpdD86IG51bWJlciwgY2F0Pzogc3RyaW5nLCB0aW1lb3V0PzogbnVtYmVyLCBiZW5jaG1hcmtUaW1lb3V0PzogbnVtYmVyIH0gPSB7fTtcbiAgICAgICAgQXJyYXkuZnJvbShyZXMpLmZvckVhY2goKGFycikgPT4ge1xuICAgICAgICAgIGlmIChhcnJbMF0uc3RhcnRzV2l0aCgnc2tpcCcpKSBtYXBbJ3NraXAnXSA9IGFyclsxXTtcbiAgICAgICAgICBlbHNlIGlmIChhcnJbMF0uc3RhcnRzV2l0aCgnd2FpdCcpKSBtYXBbJ3dhaXQnXSA9IHBhcnNlSW50KGFyclsyXSk7XG4gICAgICAgICAgZWxzZSBpZiAoYXJyWzBdLnN0YXJ0c1dpdGgoJ2NhdCcpKSBtYXBbJ2NhdCddID0gYXJyWzNdO1xuICAgICAgICAgIGVsc2UgaWYgKGFyclswXS5zdGFydHNXaXRoKCd0aW1lb3V0JykpIG1hcFsndGltZW91dCddID0gcGFyc2VJbnQoYXJyWzRdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHRlc3QgPSBuZXcgVGVzdChhdXRvVGVzdHNDYXROYW1lLCB0ZXN0cy5sZW5ndGggPT09IDEgPyBmLm5hbWUgOiBgJHtmLm5hbWV9ICR7aSArIDF9YCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGdyb2suZnVuY3Rpb25zLmV2YWwoYWRkTmFtZXNwYWNlKHRlc3RzW2ldLCBmKSk7XG4gICAgICAgICAgaWYgKG1hcC53YWl0KSBhd2FpdCBkZWxheShtYXAud2FpdCk7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcbiAgICAgICAgICBpZiAodHlwZW9mIHJlcyA9PT0gJ2Jvb2xlYW4nICYmICFyZXMpIHRocm93IGBGYWlsZWQ6ICR7dGVzdHNbaV19LCBleHBlY3RlZCB0cnVlLCBnb3QgJHtyZXN9YDtcbiAgICAgICAgfSwgeyBza2lwUmVhc29uOiBtYXAuc2tpcCwgdGltZW91dDogREcuVGVzdC5pc0luQmVuY2htYXJrID8gbWFwLmJlbmNobWFya1RpbWVvdXQgPz8gQkVOQ0hNQVJLX1RJTUVPVVQgOiBtYXAudGltZW91dCA/PyBTVEFOREFSVF9USU1FT1VUIH0pO1xuICAgICAgICBpZiAobWFwLmNhdCkge1xuICAgICAgICAgIGNvbnN0IGNhdDogc3RyaW5nID0gYXV0b1Rlc3RzQ2F0TmFtZSArICc6ICcgKyBtYXAuY2F0O1xuICAgICAgICAgIHRlc3QuY2F0ZWdvcnkgPSBjYXQ7XG4gICAgICAgICAgaWYgKG1vZHVsZVRlc3RzW2NhdF0gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIG1vZHVsZVRlc3RzW2NhdF0gPSB7IHRlc3RzOiBbXSwgY2xlYXI6IHRydWUgfTtcbiAgICAgICAgICBtb2R1bGVUZXN0c1tjYXRdLnRlc3RzLnB1c2godGVzdCk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIG1vZHVsZUF1dG9UZXN0cy5wdXNoKHRlc3QpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGVtbykge1xuICAgICAgY29uc3Qgd2FpdCA9IGYub3B0aW9uc1snZGVtb1dhaXQnXSA/IHBhcnNlSW50KGYub3B0aW9uc1snZGVtb1dhaXQnXSkgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCB0ZXN0ID0gbmV3IFRlc3QoZGVtb0NhdE5hbWUsIGYuZnJpZW5kbHlOYW1lLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IGRlbGF5KDMwMCk7XG4gICAgICAgIGdyb2suc2hlbGwuY2xlYXJMYXN0RXJyb3IoKTtcbiAgICAgICAgYXdhaXQgZi5hcHBseSgpO1xuICAgICAgICBhd2FpdCBkZWxheSh3YWl0ID8gd2FpdCA6IDIwMDApO1xuICAgICAgICBjb25zdCB1bmhhbmRsZWQgPSBhd2FpdCBncm9rLnNoZWxsLmxhc3RFcnJvcjtcbiAgICAgICAgaWYgKHVuaGFuZGxlZClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodW5oYW5kbGVkKTtcbiAgICAgIH0sIHsgc2tpcFJlYXNvbjogZi5vcHRpb25zWydkZW1vU2tpcCddIH0pO1xuICAgICAgbW9kdWxlRGVtby5wdXNoKHRlc3QpO1xuICAgIH1cbiAgICBpZiAoZi5oYXNUYWcoJ3NlbVR5cGVEZXRlY3RvcicpKSB7XG4gICAgICBsZXQgZGV0ZWN0b3JzVGVzdERhdGEgPSB0ZXN0RGF0YTtcbiAgICAgIGlmIChmLm9wdGlvbnNbJ3Rlc3REYXRhJ10pIHtcbiAgICAgICAgZGV0ZWN0b3JzVGVzdERhdGEgPSBhd2FpdCBncm9rLmRhdGEuZmlsZXMub3BlblRhYmxlKGBTeXN0ZW06QXBwRGF0YS8ke3BhY2thZ2VfLm5xTmFtZX0vJHtmLm9wdGlvbnNbJ3Rlc3REYXRhJ119YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRlc3QgPSBuZXcgVGVzdChkZXRlY3RvcnNDYXROYW1lLCBmLmZyaWVuZGx5TmFtZSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBhcnIgPSBbXTtcbiAgICAgICAgY29uc29sZS5sb2coYFN5c3RlbTpBcHBEYXRhLyR7cGFja2FnZV8ubnFOYW1lfS8ke2Yub3B0aW9uc1sndGVzdERhdGEnXX1gKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBkZXRlY3RvcnNUZXN0RGF0YS5jbG9uZSgpLmNvbHVtbnMpIHtcbiAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmLmFwcGx5KFtjb2xdKTtcbiAgICAgICAgICBhcnIucHVzaChyZXMgfHwgY29sLnNlbVR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc0FyciA9IGFyci5maWx0ZXIoKGkpID0+IGkpO1xuICAgICAgICBleHBlY3QocmVzQXJyLmxlbmd0aCwgMSk7XG5cbiAgICAgICAgaWYgKGYub3B0aW9uc1sndGVzdERhdGFDb2x1bW5OYW1lJ10pXG4gICAgICAgICAgZXhwZWN0KHJlc0FyclswXSwgZi5vcHRpb25zWyd0ZXN0RGF0YUNvbHVtbk5hbWUnXSk7XG5cbiAgICAgIH0sIHsgc2tpcFJlYXNvbjogZi5vcHRpb25zWydza2lwVGVzdCddIH0pO1xuICAgICAgbW9kdWxlRGV0ZWN0b3JzLnB1c2godGVzdCk7XG4gICAgfVxuICB9XG4gIHdhc1JlZ2lzdGVyZWRbcGFja2FnZUlkXSA9IHRydWU7XG4gIGlmIChtb2R1bGVBdXRvVGVzdHMubGVuZ3RoID4gMClcbiAgICBtb2R1bGVUZXN0c1thdXRvVGVzdHNDYXROYW1lXSA9IHsgdGVzdHM6IG1vZHVsZUF1dG9UZXN0cywgY2xlYXI6IHRydWUgfTtcbiAgaWYgKG1vZHVsZURlbW8ubGVuZ3RoID4gMClcbiAgICBtb2R1bGVUZXN0c1tkZW1vQ2F0TmFtZV0gPSB7IHRlc3RzOiBtb2R1bGVEZW1vLCBjbGVhcjogdHJ1ZSB9O1xuICBpZiAobW9kdWxlRGV0ZWN0b3JzLmxlbmd0aCA+IDApXG4gICAgbW9kdWxlVGVzdHNbZGV0ZWN0b3JzQ2F0TmFtZV0gPSB7IHRlc3RzOiBtb2R1bGVEZXRlY3RvcnMsIGNsZWFyOiBmYWxzZSB9O1xufVxuXG5mdW5jdGlvbiByZWRlZmluZUNvbnNvbGUoKTogYW55W10ge1xuICBjb25zdCBsb2dzOiBhbnlbXSA9IFtdO1xuICBjb25zb2xlLmxvZyA9ICguLi5hcmdzKSA9PiB7XG4gICAgbG9ncy5wdXNoKC4uLmFyZ3MpO1xuICAgIHN0ZExvZyguLi5hcmdzKTtcbiAgfTtcbiAgY29uc29sZS5pbmZvID0gKC4uLmFyZ3MpID0+IHtcbiAgICBsb2dzLnB1c2goLi4uYXJncyk7XG4gICAgc3RkSW5mbyguLi5hcmdzKTtcbiAgfTtcbiAgY29uc29sZS53YXJuID0gKC4uLmFyZ3MpID0+IHtcbiAgICBsb2dzLnB1c2goLi4uYXJncyk7XG4gICAgc3RkV2FybiguLi5hcmdzKTtcbiAgfTtcbiAgY29uc29sZS5lcnJvciA9ICguLi5hcmdzKSA9PiB7XG4gICAgbG9ncy5wdXNoKC4uLmFyZ3MpO1xuICAgIHN0ZEVycm9yKC4uLmFyZ3MpO1xuICB9O1xuICByZXR1cm4gbG9ncztcbn1cblxuZnVuY3Rpb24gcmVzZXRDb25zb2xlKCk6IHZvaWQge1xuICBjb25zb2xlLmxvZyA9IHN0ZExvZztcbiAgY29uc29sZS5pbmZvID0gc3RkSW5mbztcbiAgY29uc29sZS53YXJuID0gc3RkV2FybjtcbiAgY29uc29sZS5lcnJvciA9IHN0ZEVycm9yO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuVGVzdHMob3B0aW9ucz86IFRlc3RFeGVjdXRpb25PcHRpb25zKSB7XG4gIGNvbnN0IHBhY2thZ2VfID0gZ3Jvay5mdW5jdGlvbnMuZ2V0Q3VycmVudENhbGwoKT8uZnVuYz8ucGFja2FnZTtcbiAgY29uc3QgcGFja2FnZU93bmVyID0gKChwYWNrYWdlXz8ucGFja2FnZU93bmVyID8/ICcnKS5tYXRjaChuZXcgUmVnRXhwKCdbXjxdKjwoW14+XSopPicpKSA/PyBbJycsICcnXSlbMV07XG4gIGF3YWl0IGluaXRBdXRvVGVzdHMocGFja2FnZV8pO1xuICBjb25zdCByZXN1bHRzOiB7XG4gICAgY2F0ZWdvcnk/OiBzdHJpbmcsIG5hbWU/OiBzdHJpbmcsIHN1Y2Nlc3M6IGJvb2xlYW4sXG4gICAgcmVzdWx0OiBzdHJpbmcsIG1zOiBudW1iZXIsIHNraXBwZWQ6IGJvb2xlYW4sIGxvZ3M/OiBzdHJpbmcsIG93bmVyPzogc3RyaW5nXG4gIH1bXSA9IFtdO1xuICBjb25zb2xlLmxvZyhgUnVubmluZyB0ZXN0c2ApO1xuICBvcHRpb25zID8/PSB7fTtcbiAgb3B0aW9ucyEudGVzdENvbnRleHQgPz89IG5ldyBUZXN0Q29udGV4dCgpO1xuICBncm9rLnNoZWxsLmNsZWFyTGFzdEVycm9yKCk7XG4gIGNvbnN0IGxvZ3MgPSByZWRlZmluZUNvbnNvbGUoKTtcblxuICBhd2FpdCBpbnZva2VUZXN0cyh0ZXN0cywgb3B0aW9ucyk7XG5cbiAgZm9yIChsZXQgciBvZiByZXN1bHRzKSB7XG4gICAgci5yZXN1bHQgPSByLnJlc3VsdC50b1N0cmluZygpLnJlcGxhY2UoL1wiL2csICdcXCcnKTtcbiAgICBpZiAoci5sb2dzICE9IHVuZGVmaW5lZClcbiAgICAgIHIubG9ncyA9IHIubG9ncyEudG9TdHJpbmcoKS5yZXBsYWNlKC9cIi9nLCAnXFwnJyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdHM7XG5cbiAgYXN5bmMgZnVuY3Rpb24gaW52b2tlQ2F0ZWdvcnlNZXRob2QobWV0aG9kOiAoKCkgPT4gUHJvbWlzZTx2b2lkPikgfCB1bmRlZmluZWQsIGNhdGVnb3J5OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIHZhciBpbnZva2F0aW9uUmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBpZiAobWV0aG9kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYXdhaXQgdGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgbWV0aG9kKCk7XG4gICAgICAgIH0sIDEwMDAwMCwgYGJlZm9yZSAke2NhdGVnb3J5fTogdGltZW91dCBlcnJvcmApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKHg6IGFueSkge1xuICAgICAgaW52b2thdGlvblJlc3VsdCA9IGF3YWl0IGdldFJlc3VsdCh4KTtcbiAgICB9XG4gICAgcmV0dXJuIGludm9rYXRpb25SZXN1bHRcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGludm9rZVRlc3RzSW5DYXRlZ29yeShjYXRlZ29yeTogQ2F0ZWdvcnksIG9wdGlvbnM6IFRlc3RFeGVjdXRpb25PcHRpb25zKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgIGxldCB0ID0gY2F0ZWdvcnkudGVzdHMgPz8gW107XG4gICAgY29uc3QgcmVzID0gW107XG4gICAgY29uc3QgbWVtb3J5VXNhZ2VCZWZvcmUgPSAod2luZG93Py5wZXJmb3JtYW5jZSBhcyBhbnkpPy5tZW1vcnk/LnVzZWRKU0hlYXBTaXplO1xuICAgIGNvbnN0IHdpZGdldHNCZWZvcmUgPSBERy5XaWRnZXQuZ2V0QWxsKCkubGVuZ3RoO1xuXG4gICAgaWYgKGNhdGVnb3J5LmNsZWFyKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHQubGVuZ3RoOyBpKyspIHtcblxuICAgICAgICBpZiAodFtpXS5vcHRpb25zKSB7XG4gICAgICAgICAgaWYgKHRbaV0ub3B0aW9ucz8uYmVuY2htYXJrID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmICghdFtpXS5vcHRpb25zKVxuICAgICAgICAgICAgICB0W2ldLm9wdGlvbnMgPSB7fVxuICAgICAgICAgICAgdFtpXS5vcHRpb25zIS5iZW5jaG1hcmsgPSBjYXRlZ29yeS5iZW5jaG1hcmtzID8/IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgdGVzdCA9IHRbaV07XG4gICAgICAgIGlmIChvcHRpb25zLnRlc3QpXG4gICAgICAgICAgaWYgKG9wdGlvbnMudGVzdC50b0xvd2VyQ2FzZSgpICE9PSB0ZXN0Lm5hbWUudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAodGVzdD8ub3B0aW9ucykge1xuICAgICAgICAgIHRlc3Qub3B0aW9ucy5vd25lciA9IHRbaV0ub3B0aW9ucz8ub3duZXIgPz8gY2F0ZWdvcnk/Lm93bmVyID8/IHBhY2thZ2VPd25lciA/PyAnJztcbiAgICAgICAgfVxuICAgICAgICBsZXQgaXNHQkVuYWJsZSA9ICh3aW5kb3cgYXMgYW55KS5nYyAmJiB0ZXN0Lm9wdGlvbnM/LnNraXBSZWFzb24gPT0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoaXNHQkVuYWJsZSlcbiAgICAgICAgICAod2luZG93IGFzIGFueSkuZ2MoKTtcblxuICAgICAgICBsZXQgdGVzdFJ1biA9IGF3YWl0IGV4ZWNUZXN0KHRlc3QsIG9wdGlvbnM/LnRlc3QsIGxvZ3MsIERHLlRlc3QuaXNJbkJlbmNobWFyayA/IHRbaV0ub3B0aW9ucz8uYmVuY2htYXJrVGltZW91dCA/PyBCRU5DSE1BUktfVElNRU9VVCA6IHRbaV0ub3B0aW9ucz8udGltZW91dCA/PyBTVEFOREFSVF9USU1FT1VULCBwYWNrYWdlXy5uYW1lLCBvcHRpb25zLnZlcmJvc2UpO1xuXG4gICAgICAgIGlmIChpc0dCRW5hYmxlKVxuICAgICAgICAgICh3aW5kb3cgYXMgYW55KS5nYygpO1xuICAgICAgICBpZiAodGVzdFJ1bilcbiAgICAgICAgICByZXMucHVzaCh7IC4uLnRlc3RSdW4sIG1lbW9yeURlbHRhOiAod2luZG93Py5wZXJmb3JtYW5jZSBhcyBhbnkpPy5tZW1vcnk/LnVzZWRKU0hlYXBTaXplIC0gbWVtb3J5VXNhZ2VCZWZvcmUsIHdpZGdldHNEZWx0YTogREcuV2lkZ2V0LmdldEFsbCgpLmxlbmd0aCAtIHdpZGdldHNCZWZvcmUgfSk7XG5cbiAgICAgICAgZ3Jvay5zaGVsbC5jbG9zZUFsbCgpO1xuICAgICAgICBERy5CYWxsb29uLmNsb3NlQWxsKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdC5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgdGVzdCA9IHRbaV07XG4gICAgICAgIGlmIChvcHRpb25zLnRlc3QpXG4gICAgICAgICAgaWYgKG9wdGlvbnMudGVzdC50b0xvd2VyQ2FzZSgpID09PSB0ZXN0Lm5hbWUudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBcbiAgICAgICAgbGV0IGlzR0JFbmFibGUgPSAod2luZG93IGFzIGFueSkuZ2MgJiYgdGVzdC5vcHRpb25zPy5za2lwUmVhc29uID09IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHRlc3Q/Lm9wdGlvbnMpIHtcbiAgICAgICAgICB0ZXN0Lm9wdGlvbnMub3duZXIgPSB0W2ldLm9wdGlvbnM/Lm93bmVyID8/IGNhdGVnb3J5Py5vd25lciA/PyBwYWNrYWdlT3duZXIgPz8gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNHQkVuYWJsZSlcbiAgICAgICAgICAod2luZG93IGFzIGFueSkuZ2MoKTtcblxuICAgICAgICBsZXQgdGVzdFJ1biA9IGF3YWl0IGV4ZWNUZXN0KHRlc3QsIG9wdGlvbnM/LnRlc3QsIGxvZ3MsIERHLlRlc3QuaXNJbkJlbmNobWFyayA/IHRbaV0ub3B0aW9ucz8uYmVuY2htYXJrVGltZW91dCA/PyBCRU5DSE1BUktfVElNRU9VVCA6IHRbaV0ub3B0aW9ucz8udGltZW91dCwgcGFja2FnZV8ubmFtZSwgb3B0aW9ucy52ZXJib3NlKTtcbiAgICAgICAgXG4gICAgICAgIGlmIChpc0dCRW5hYmxlKVxuICAgICAgICAgICh3aW5kb3cgYXMgYW55KS5nYygpO1xuICAgICAgICBcbiAgICAgICAgaWYgKHRlc3RSdW4pXG4gICAgICAgICAgcmVzLnB1c2goeyAuLi50ZXN0UnVuLCBtZW1vcnlVc2VkOiAod2luZG93Py5wZXJmb3JtYW5jZSBhcyBhbnkpPy5tZW1vcnk/LnVzZWRKU0hlYXBTaXplIC0gbWVtb3J5VXNhZ2VCZWZvcmUsIHdpZGdldHNEaWZmZXJlbmNlOiBERy5XaWRnZXQuZ2V0QWxsKCkubGVuZ3RoIC0gd2lkZ2V0c0JlZm9yZSB9KTtcblxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gaW52b2tlVGVzdHMoY2F0ZWdvcmllc1RvSW52b2tlOiB7IFtrZXk6IHN0cmluZ106IENhdGVnb3J5IH0sIG9wdGlvbnM6IFRlc3RFeGVjdXRpb25PcHRpb25zKSB7XG4gICAgdHJ5IHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGNhdGVnb3JpZXNUb0ludm9rZSkpIHtcbiAgICAgICAgaWYgKCghIW9wdGlvbnM/LmNhdGVnb3J5ICYmICFrZXkudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKG9wdGlvbnM/LmNhdGVnb3J5LnRvTG93ZXJDYXNlKCkpKSB8fFxuICAgICAgICAgIG9wdGlvbnMuZXhjbHVkZT8uc29tZSgoYykgPT4ga2V5LnN0YXJ0c1dpdGgoYykpKVxuICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgIHN0ZExvZyhgU3RhcnRlZCAke2tleX0gY2F0ZWdvcnlgKTtcbiAgICAgICAgY29uc3Qgc2tpcHBlZCA9IHZhbHVlLnRlc3RzPy5ldmVyeSgodCkgPT4gdC5vcHRpb25zPy5za2lwUmVhc29uKTtcbiAgICAgICAgaWYgKCFza2lwcGVkKVxuICAgICAgICAgIHZhbHVlLmJlZm9yZVN0YXR1cyA9IGF3YWl0IGludm9rZUNhdGVnb3J5TWV0aG9kKHZhbHVlLmJlZm9yZSwgb3B0aW9ucy5jYXRlZ29yeSA/PyAnJyk7XG5cbiAgICAgICAgbGV0IHQgPSB2YWx1ZS50ZXN0cyA/PyBbXTtcblxuICAgICAgICBpZiAob3B0aW9ucy5zdHJlc3NUZXN0KSB7XG4gICAgICAgICAgdCA9IHQuZmlsdGVyKChlKSA9PiBlLm9wdGlvbnM/LnN0cmVzc1Rlc3QpO1xuICAgICAgICAgIHQgPSBzaHVmZmxlKHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKChvcHRpb25zLnRhZ3M/Lmxlbmd0aCA/PyAwKSA+IDApIHtcbiAgICAgICAgICB0ID0gdC5maWx0ZXIoKGUpID0+XG4gICAgICAgICAgICBlLm9wdGlvbnM/LnRhZ3M/LnNvbWUodGFnID0+IChvcHRpb25zPy50YWdzID8/IFtdKS5pbmNsdWRlcyh0YWcpKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzOiBhbnlbXTtcbiAgICAgICAgaWYgKHZhbHVlLmJlZm9yZVN0YXR1cykge1xuICAgICAgICAgIHJlcyA9IEFycmF5LmZyb20odC5tYXAoKHRlc3RFbGVtKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4geyBkYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksIGxvZ3M6ICcnLCBjYXRlZ29yeToga2V5LCBuYW1lOiB0ZXN0RWxlbS5uYW1lLCByZXN1bHQ6ICdiZWZvcmUoKSBmYWlsZWQnLCBzdWNjZXNzOiBmYWxzZSwgbXM6IDAsIHNraXBwZWQ6IGZhbHNlIH07XG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIHJlcy5mb3JFYWNoKGFzeW5jICh0ZXN0KSA9PiByZXBvcnRUZXN0KCdwYWNrYWdlJywgdGVzdCkpO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICByZXMgPSBhd2FpdCBpbnZva2VUZXN0c0luQ2F0ZWdvcnkodmFsdWUsIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBkYXRhID0gcmVzLmZpbHRlcigoZCkgPT4gZC5yZXN1bHQgIT0gJ3NraXBwZWQnKTtcblxuICAgICAgICBpZiAoIXNraXBwZWQpXG4gICAgICAgICAgdmFsdWUuYWZ0ZXJTdGF0dXMgPSBhd2FpdCBpbnZva2VDYXRlZ29yeU1ldGhvZCh2YWx1ZS5hZnRlciwgb3B0aW9ucy5jYXRlZ29yeSA/PyAnJyk7XG5cbiAgICAgICAgLy8gQ2xlYXIgYWZ0ZXIgY2F0ZWdvcnlcbiAgICAgICAgLy8gZ3Jvay5zaGVsbC5jbG9zZUFsbCgpO1xuICAgICAgICAvLyBERy5CYWxsb29uLmNsb3NlQWxsKCk7XG4gICAgICAgIGlmICh2YWx1ZS5hZnRlclN0YXR1cylcbiAgICAgICAgICBkYXRhLnB1c2goeyBkYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksIGxvZ3M6ICcnLCBjYXRlZ29yeToga2V5LCBuYW1lOiAnYWZ0ZXInLCByZXN1bHQ6IHZhbHVlLmFmdGVyU3RhdHVzLCBzdWNjZXNzOiBmYWxzZSwgbXM6IDAsIHNraXBwZWQ6IGZhbHNlIH0pO1xuICAgICAgICBpZiAodmFsdWUuYmVmb3JlU3RhdHVzKVxuICAgICAgICAgIGRhdGEucHVzaCh7IGRhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSwgbG9nczogJycsIGNhdGVnb3J5OiBrZXksIG5hbWU6ICdiZWZvcmUnLCByZXN1bHQ6IHZhbHVlLmJlZm9yZVN0YXR1cywgc3VjY2VzczogZmFsc2UsIG1zOiAwLCBza2lwcGVkOiBmYWxzZSB9KTtcbiAgICAgICAgcmVzdWx0cy5wdXNoKC4uLmRhdGEpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICByZXNldENvbnNvbGUoKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudGVzdENvbnRleHQhLmNhdGNoVW5oYW5kbGVkICYmICghREcuVGVzdC5pc0luQmVuY2htYXJrKSkge1xuICAgICAgYXdhaXQgZGVsYXkoMTAwMCk7XG4gICAgICBjb25zdCBlcnJvciA9IGF3YWl0IGdyb2suc2hlbGwubGFzdEVycm9yO1xuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICBsb2dzOiAnJyxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBjYXRlZ29yeTogJ1VuaGFuZGxlZCBleGNlcHRpb25zJyxcbiAgICAgICAgbmFtZTogJ0V4Y2VwdGlvbicsXG4gICAgICAgIHJlc3VsdDogZXJyb3IgPz8gJycsIHN1Y2Nlc3M6ICFlcnJvciwgbXM6IDAsIHNraXBwZWQ6IGZhbHNlLFxuICAgICAgICAnZmxha2luZyc6IERHLlRlc3QuaXNSZXByb2R1Y2luZyAmJiAhZXJyb3IsXG4gICAgICAgIG93bmVyOiBwYWNrYWdlT3duZXIgPz8gJydcbiAgICAgIH07XG4gICAgICByZXN1bHRzLnB1c2gocGFyYW1zKTtcbiAgICAgICg8YW55PnBhcmFtcykucGFja2FnZSA9IHBhY2thZ2VfLm5hbWU7XG4gICAgICBhd2FpdCByZXBvcnRUZXN0KCdwYWNrYWdlJywgcGFyYW1zKTtcbiAgICB9XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVwb3J0VGVzdCh0eXBlOiBzdHJpbmcsIHBhcmFtczogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICgoPGFueT5ncm9rLnNoZWxsKS5yZXBvcnRUZXN0ICE9IG51bGwpXG4gICAgYXdhaXQgKDxhbnk+Z3Jvay5zaGVsbCkucmVwb3J0VGVzdCh0eXBlLCBwYXJhbXMpO1xuICBlbHNlIHtcbiAgICBhd2FpdCBmZXRjaChgJHtncm9rLmRhcGkucm9vdH0vbG9nL3Rlc3RzLyR7dHlwZX1gLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJywgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJyxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHBhcmFtcylcbiAgICB9KTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRSZXN1bHQoeDogYW55KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIGAke3gudG9TdHJpbmcoKX1cXG4ke3guc3RhY2sgPyAoYXdhaXQgREcuTG9nZ2VyLnRyYW5zbGF0ZVN0YWNrVHJhY2UoeC5zdGFjaykpIDogJyd9YDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY1Rlc3QodDogVGVzdCwgcHJlZGljYXRlOiBzdHJpbmcgfCB1bmRlZmluZWQsIGxvZ3M6IGFueVtdLFxuICB0ZXN0VGltZW91dD86IG51bWJlciwgcGFja2FnZU5hbWU/OiBzdHJpbmcsIHZlcmJvc2U/OiBib29sZWFuKTogUHJvbWlzZTxhbnk+IHtcbiAgbG9ncy5sZW5ndGggPSAwO1xuICBsZXQgcjogeyBkYXRlOiBzdHJpbmcsIGNhdGVnb3J5Pzogc3RyaW5nLCBuYW1lPzogc3RyaW5nLCBzdWNjZXNzOiBib29sZWFuLCByZXN1bHQ6IGFueSwgbXM6IG51bWJlciwgc2tpcHBlZDogYm9vbGVhbiwgbG9ncz86IHN0cmluZywgb3duZXI/OiBzdHJpbmcgfTtcbiAgbGV0IHR5cGU6IHN0cmluZyA9ICdwYWNrYWdlJztcbiAgY29uc3QgZmlsdGVyID0gcHJlZGljYXRlICE9IHVuZGVmaW5lZCAmJiAodC5uYW1lLnRvTG93ZXJDYXNlKCkgIT09IHByZWRpY2F0ZS50b0xvd2VyQ2FzZSgpKTtcbiAgbGV0IHNraXAgPSB0Lm9wdGlvbnM/LnNraXBSZWFzb24gfHwgZmlsdGVyO1xuICBsZXQgc2tpcFJlYXNvbiA9IGZpbHRlciA/ICdza2lwcGVkJyA6IHQub3B0aW9ucz8uc2tpcFJlYXNvbjtcblxuICBpZiAoREcuVGVzdC5pc0luQmVuY2htYXJrICYmICF0Lm9wdGlvbnM/LmJlbmNobWFyaykge1xuICAgIHN0ZExvZyhgU0tJUFBFRDogJHt0LmNhdGVnb3J5fSAke3QubmFtZX0gZG9lc250IGF2YWlsYWJsZSBpbiBiZW5jaG1hcmsgbW9kZWApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoIXNraXApXG4gICAgc3RkTG9nKGBTdGFydGVkICR7dC5jYXRlZ29yeX0gJHt0Lm5hbWV9YCk7XG4gIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgY29uc3Qgc3RhcnREYXRlID0gbmV3IERhdGUoc3RhcnQpLnRvSVNPU3RyaW5nKCk7XG4gIHRyeSB7XG4gICAgaWYgKHNraXApXG4gICAgICByID0geyBkYXRlOiBzdGFydERhdGUsIHN1Y2Nlc3M6IHRydWUsIHJlc3VsdDogc2tpcFJlYXNvbiEsIG1zOiAwLCBza2lwcGVkOiB0cnVlIH07XG4gICAgZWxzZSB7XG4gICAgICBsZXQgdGltZW91dF8gPSB0ZXN0VGltZW91dCA/PyBTVEFOREFSVF9USU1FT1VUO1xuXG4gICAgICBpZiAoREcuVGVzdC5pc1Byb2ZpbGluZylcbiAgICAgICAgY29uc29sZS5wcm9maWxlKGAke3QuY2F0ZWdvcnl9OiAke3QubmFtZX1gKTtcblxuICAgICAgciA9IHsgZGF0ZTogc3RhcnREYXRlLCBzdWNjZXNzOiB0cnVlLCByZXN1bHQ6IGF3YWl0IHRpbWVvdXQodC50ZXN0LCB0aW1lb3V0XykgPz8gJ09LJywgbXM6IDAsIHNraXBwZWQ6IGZhbHNlIH07XG5cbiAgICAgIGlmIChERy5UZXN0LmlzUHJvZmlsaW5nKSB7XG4gICAgICAgIGNvbnNvbGUucHJvZmlsZUVuZChgJHt0LmNhdGVnb3J5fTogJHt0Lm5hbWV9YCk7XG4gICAgICAgIGdyb2suc2hlbGwuaW5mbyhgUHJvZmlsaW5nIG9mICR7dC5jYXRlZ29yeX06ICR7dC5uYW1lfSBmaW5pc2hlZCBcXG4gUGxlYXNlIGVuc3VyZSB0aGF0IHlvdSBoYXZlIG9wZW5lZCBEZXZUb29scyAoRjEyKSAvIFBlcmZvcm1hbmNlIHBhbmVsIGJlZm9yZSB0ZXN0IHN0YXJ0cy5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKHg6IGFueSkge1xuICAgIHN0ZEVycm9yKHgpO1xuICAgIHIgPSB7IGRhdGU6IHN0YXJ0RGF0ZSwgc3VjY2VzczogZmFsc2UsIHJlc3VsdDogYXdhaXQgZ2V0UmVzdWx0KHgpLCBtczogMCwgc2tpcHBlZDogZmFsc2UgfTtcbiAgfVxuICBpZiAodC5vcHRpb25zPy5pc0FnZ3JlZ2F0ZWQgJiYgci5yZXN1bHQuY29uc3RydWN0b3IgPT09IERHLkRhdGFGcmFtZSkge1xuICAgIGNvbnN0IGNvbCA9IHIucmVzdWx0LmNvbCgnc3VjY2VzcycpO1xuICAgIGlmIChjb2wpXG4gICAgICByLnN1Y2Nlc3MgPSBjb2wuc3RhdHMuc3VtID09PSBjb2wubGVuZ3RoO1xuICAgIGlmICghdmVyYm9zZSkge1xuICAgICAgY29uc3QgZGYgPSByLnJlc3VsdDtcbiAgICAgIGRmLmNvbHVtbnMucmVtb3ZlKCdzdGFjaycpO1xuICAgICAgZGYucm93cy5yZW1vdmVXaGVyZSgocikgPT4gci5nZXQoJ3N1Y2Nlc3MnKSk7XG4gICAgICByLnJlc3VsdCA9IGRmO1xuICAgIH1cbiAgICByLnJlc3VsdCA9IHIucmVzdWx0LnRvQ3N2KCk7XG4gIH1cbiAgci5sb2dzID0gbG9ncy5qb2luKCdcXG4nKTtcbiAgci5tcyA9IERhdGUubm93KCkgLSBzdGFydDtcbiAgaWYgKCFza2lwKVxuICAgIHN0ZExvZyhgRmluaXNoZWQgJHt0LmNhdGVnb3J5fSAke3QubmFtZX0gZm9yICR7ci5tc30gbXNgKTtcbiAgci5jYXRlZ29yeSA9IHQuY2F0ZWdvcnk7XG4gIHIubmFtZSA9IHQubmFtZTtcbiAgci5vd25lciA9IHQub3B0aW9ucz8ub3duZXIgPz8gJyc7XG4gIGlmICghZmlsdGVyKSB7XG4gICAgbGV0IHBhcmFtcyA9IHtcbiAgICAgICdzdWNjZXNzJzogci5zdWNjZXNzLCAncmVzdWx0Jzogci5yZXN1bHQsICdtcyc6IHIubXMsICdkYXRlJzogci5kYXRlLFxuICAgICAgJ3NraXBwZWQnOiByLnNraXBwZWQsICdwYWNrYWdlJzogcGFja2FnZU5hbWUsICdjYXRlZ29yeSc6IHQuY2F0ZWdvcnksICduYW1lJzogdC5uYW1lLCAnbG9ncyc6IHIubG9ncywgJ293bmVyJzogci5vd25lcixcbiAgICAgICdmbGFraW5nJzogREcuVGVzdC5pc1JlcHJvZHVjaW5nICYmIHIuc3VjY2VzcyxcbiAgICAgICd0aW1lb3V0V2FybmluZyc6IERHLlRlc3QuaXNJbkJlbmNobWFyayAmJiAodC5vcHRpb25zPy5iZW5jaG1hcmtXYXJuVGltZW91dCAmJiByLm1zID4gdC5vcHRpb25zPy5iZW5jaG1hcmtXYXJuVGltZW91dClcbiAgICB9O1xuICAgIGlmIChyLnJlc3VsdC5jb25zdHJ1Y3RvciA9PSBPYmplY3QpIHtcbiAgICAgIGNvbnN0IHJlcyA9IE9iamVjdC5rZXlzKHIucmVzdWx0KS5yZWR1Y2UoKGFjYywgaykgPT4gKHsgLi4uYWNjLCBbJ3Jlc3VsdC4nICsga106IHIucmVzdWx0W2tdIH0pLCB7fSk7XG4gICAgICBwYXJhbXMgPSB7IC4uLnBhcmFtcywgLi4ucmVzIH07XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5yZXN1bHQgaW5zdGFuY2VvZiBERy5EYXRhRnJhbWUpXG4gICAgICBwYXJhbXMucmVzdWx0ID0gSlNPTi5zdHJpbmdpZnkocGFyYW1zLnJlc3VsdD8udG9Kc29uKCkpIHx8ICcnO1xuXG4gICAgYXdhaXQgcmVwb3J0VGVzdCh0eXBlLCBwYXJhbXMpO1xuICB9XG4gIHJldHVybiByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2h1ZmZsZShhcnJheTogYW55W10pOiBhbnlbXSB7XG4gIGNvbnN0IG5ld0FyciA9IGFycmF5LnNsaWNlKCk7XG4gIG5ld0Fyci5zb3J0KCgpID0+IE1hdGgucmFuZG9tKCkgLSAwLjUpO1xuICByZXR1cm4gbmV3QXJyO1xufTtcblxuLyogV2FpdHMgW21zXSBtaWxsaXNlY29uZHMgKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxheShtczogbnVtYmVyKSB7XG4gIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIG1zKSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhd2FpdENoZWNrKGNoZWNrSGFuZGxlcjogKCkgPT4gYm9vbGVhbixcbiAgZXJyb3I6IHN0cmluZyA9ICdUaW1lb3V0IGV4Y2VlZGVkJywgd2FpdDogbnVtYmVyID0gNTAwLCBpbnRlcnZhbDogbnVtYmVyID0gNTApOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG4gICAgICByZWplY3QobmV3IEVycm9yKGVycm9yKSk7XG4gICAgfSwgd2FpdCk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGludGVydmFsSWQ6IFRpbWVvdXQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBpZiAoY2hlY2tIYW5kbGVyKCkpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfVxuICAgIH0sIGludGVydmFsKTtcbiAgfSk7XG59XG5cbi8vIFJldHVybnMgdGVzdCBleGVjdXRpb24gcmVzdWx0IG9yIGFuIGVycm9yIGluIGNhc2Ugb2YgdGltZW91dFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRpbWVvdXQoZnVuYzogKCkgPT4gUHJvbWlzZTxhbnk+LCB0ZXN0VGltZW91dDogbnVtYmVyLCB0aW1lb3V0UmVhc29uOiBzdHJpbmcgPSAnRVhFQ1VUSU9OIFRJTUVPVVQnKTogUHJvbWlzZTxhbnk+IHtcbiAgbGV0IHRpbWVvdXQ6IGFueSA9IG51bGw7XG4gIGNvbnN0IHRpbWVvdXRQcm9taXNlID0gbmV3IFByb21pc2U8YW55PigoXywgcmVqZWN0KSA9PiB7XG4gICAgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1wcm9taXNlLXJlamVjdC1lcnJvcnNcbiAgICAgIHJlamVjdCh0aW1lb3V0UmVhc29uKTtcbiAgICB9LCB0ZXN0VGltZW91dCk7XG4gIH0pO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBQcm9taXNlLnJhY2UoW2Z1bmMoKSwgdGltZW91dFByb21pc2VdKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAodGltZW91dClcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEaWFsb2dQcmVzZW50KGRpYWxvZ1RpdGxlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgZGlhbG9ncyA9IERHLkRpYWxvZy5nZXRPcGVuRGlhbG9ncygpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRpYWxvZ3MubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoZGlhbG9nc1tpXS50aXRsZSA9PSBkaWFsb2dUaXRsZSlcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqIEV4cGVjdHMgYW4gYXN5bmNocm9ub3VzIHtAbGluayBhY3Rpb259IHRvIHRocm93IGFuIGV4Y2VwdGlvbi4gVXNlIHtAbGluayBjaGVja30gdG8gcGVyZm9ybVxuICogZGVlcGVyIGluc3BlY3Rpb24gb2YgdGhlIGV4Y2VwdGlvbiBpZiBuZWNlc3NhcnkuXG4gKiBAcGFyYW0gIHtmdW5jdGlvbigpOiBQcm9taXNlPHZvaWQ+fSBhY3Rpb25cbiAqIEBwYXJhbSAge2Z1bmN0aW9uKGFueSk6IGJvb2xlYW59IGNoZWNrXG4gKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhwZWN0RXhjZXB0aW9uQXN5bmMoYWN0aW9uOiAoKSA9PiBQcm9taXNlPHZvaWQ+LFxuICBjaGVjaz86IChleGNlcHRpb246IGFueSkgPT4gYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICBsZXQgY2F1Z2h0OiBib29sZWFuID0gZmFsc2U7XG4gIGxldCBjaGVja2VkOiBib29sZWFuID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgYXdhaXQgYWN0aW9uKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjYXVnaHQgPSB0cnVlO1xuICAgIGNoZWNrZWQgPSAhY2hlY2sgfHwgY2hlY2soZSk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKCFjYXVnaHQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FuIGV4Y2VwdGlvbiBpcyBleHBlY3RlZCBidXQgbm90IHRocm93bicpO1xuICAgIGlmICghY2hlY2tlZClcbiAgICAgIHRocm93IG5ldyBFcnJvcignQW4gZXhwZWN0ZWQgZXhjZXB0aW9uIGlzIHRocm93biwgYnV0IGl0IGRvZXMgbm90IHNhdGlzZnkgdGhlIGNvbmRpdGlvbicpO1xuICB9XG59XG5cbmNvbnN0IGNhdERGID0gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtERy5Db2x1bW4uZnJvbVN0cmluZ3MoJ2NvbCcsIFsndmFsMScsICd2YWwyJywgJ3ZhbDMnXSldKTtcblxuLyoqXG4gKiBVbml2ZXJzYWwgdGVzdCBmb3Igdmlld2Vycy4gSXQgc2VhcmNoIHZpZXdlcnMgaW4gRE9NIGJ5IHRhZ3M6IGNhbnZhcywgc3ZnLCBpbWcsIGlucHV0LCBoMSwgYVxuICogQHBhcmFtICB7c3RyaW5nfSB2IFZpZXdlciBuYW1lXG4gKiBAcGFyYW0gIHtERy5EYXRhRnJhbWV9IGRmIERhdGFmcmFtZSB0byB1c2UuIFNob3VsZCBoYXZlIGF0IGxlYXN0IDMgcm93c1xuICogQHBhcmFtICB7Ym9vbGVhbn0gb3B0aW9ucy5kZXRlY3RTZW1hbnRpY1R5cGVzIFNwZWNpZnkgd2hldGhlciB0byBkZXRlY3Qgc2VtYW50aWMgdHlwZXMgb3Igbm90XG4gKiBAcGFyYW0gIHtib29sZWFufSBvcHRpb25zLnJlYWRPbmx5IElmIHNldCB0byB0cnVlLCB0aGUgZGF0YWZyYW1lIHdpbGwgbm90IGJlIG1vZGlmaWVkIGR1cmluZyB0aGUgdGVzdFxuICogQHBhcmFtICB7Ym9vbGVhbn0gb3B0aW9ucy5hcmJpdHJhcnlEZlRlc3QgSWYgc2V0IHRvIGZhbHNlLCB0ZXN0IG9uIGFyYml0cmFyeSBkYXRhZnJhbWVcbiAqIChvbmUgY2F0ZWdvcmljYWwgY29sdW1uKSB3aWxsIG5vdCBiZSBwZXJmb3JtZWRcbiAqIEBwYXJhbSAge29iamVjdH0gb3B0aW9ucyBMaXN0IG9mIG9wdGlvbnMgKG9wdGlvbmFsKVxuICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gVGhlIHRlc3QgaXMgY29uc2lkZXJlZCBzdWNjZXNzZnVsIGlmIGl0IGNvbXBsZXRlcyB3aXRob3V0IGVycm9yc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdFZpZXdlcih2OiBzdHJpbmcsIGRmOiBERy5EYXRhRnJhbWUsIG9wdGlvbnM/OiB7XG4gIGRldGVjdFNlbWFudGljVHlwZXM/OiBib29sZWFuLCByZWFkT25seT86IGJvb2xlYW4sIGFyYml0cmFyeURmVGVzdD86IGJvb2xlYW4sXG4gIHBhY2thZ2VOYW1lPzogc3RyaW5nLCBhd2FpdFZpZXdlcj86ICh2aWV3ZXI6IERHLlZpZXdlcikgPT4gUHJvbWlzZTx2b2lkPlxufSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwYWNrYWdlTmFtZSA9IG9wdGlvbnM/LnBhY2thZ2VOYW1lID8/ICcnO1xuICBpZiAob3B0aW9ucz8uZGV0ZWN0U2VtYW50aWNUeXBlcylcbiAgICBhd2FpdCBncm9rLmRhdGEuZGV0ZWN0U2VtYW50aWNUeXBlcyhkZik7XG4gIGNvbnN0IHR2ID0gZ3Jvay5zaGVsbC5hZGRUYWJsZVZpZXcoZGYpO1xuXG4gIHRyeSB7XG4gICAgLy8xLiBPcGVuLCBkbyBub3RoaW5nIGFuZCBjbG9zZVxuICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld2VyQWRkZWQpO1xuICAgIC8vaW4gY2FzZSB2aWV3ZXIgd2l0aCBhc3luYyByZW5kZXJpbmcgLSB3YWl0IGZvciByZW5kZXIgdG8gY29tcGxldGVcbiAgICBpZiAob3B0aW9ucz8uYXdhaXRWaWV3ZXIpXG4gICAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkLCB1bmRlZmluZWQsIG9wdGlvbnMhLmF3YWl0Vmlld2VyKTtcblxuICAgIC8vMi4gT3BlbiB2aWV3ZXIsIHJ1biBzZWxlY3Rpb24sIGZpbHRlciwgZXRjLiBhbmQgY2xvc2VcbiAgICBpZiAoIW9wdGlvbnM/LnJlYWRPbmx5KSB7XG4gICAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkLCBzZWxlY3RGaWx0ZXJDaGFuZ2VDdXJyZW50KTtcbiAgICAgIGlmIChvcHRpb25zPy5hd2FpdFZpZXdlcilcbiAgICAgICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCwgc2VsZWN0RmlsdGVyQ2hhbmdlQ3VycmVudCwgb3B0aW9ucyEuYXdhaXRWaWV3ZXIpO1xuICAgIH1cblxuICAgIC8vMi4gT3BlbiB2aWV3ZXIsIGNoYW5nZSBvcHRpb25zLCBzYXZlIGxheW91dCBhbmQgY2xvc2VcbiAgICBsZXQgcHJvcHNBbmRMYXlvdXQ6IHsgbGF5b3V0OiBhbnksIHNhdmVkUHJvcHM6IGFueSB9IHwgbnVsbCA9IG51bGw7XG4gICAgcHJvcHNBbmRMYXlvdXQgPSBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkLCBjaGFuZ2VPcHRpb25zU2F2ZUxheW91dCk7XG4gICAgaWYgKG9wdGlvbnM/LmF3YWl0Vmlld2VyKVxuICAgICAgcHJvcHNBbmRMYXlvdXQgPSBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkLFxuICAgICAgICBjaGFuZ2VPcHRpb25zU2F2ZUxheW91dCwgb3B0aW9ucyEuYXdhaXRWaWV3ZXIpXG5cbiAgICAvLzMuIExvYWQgbGF5b3V0XG4gICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3TGF5b3V0QXBwbGllZCwgbG9hZExheW91dCwgdW5kZWZpbmVkLCBwcm9wc0FuZExheW91dD8ubGF5b3V0LFxuICAgICAgeyBzYXZlZFByb3BzOiBwcm9wc0FuZExheW91dD8uc2F2ZWRQcm9wcyB9KTtcbiAgICBpZiAob3B0aW9ucz8uYXdhaXRWaWV3ZXIpXG4gICAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdMYXlvdXRBcHBsaWVkLCBsb2FkTGF5b3V0LCBvcHRpb25zIS5hd2FpdFZpZXdlcixcbiAgICAgICAgcHJvcHNBbmRMYXlvdXQ/LmxheW91dCwgeyBzYXZlZFByb3BzOiBwcm9wc0FuZExheW91dD8uc2F2ZWRQcm9wcyB9KTtcblxuICAgIC8vNC4gT3BlbiB2aWV3ZXIgb24gYXJiaXRhcnkgZGF0YXNldFxuICAgIGlmIChvcHRpb25zPy5hcmJpdHJhcnlEZlRlc3QgIT09IGZhbHNlKSB7XG4gICAgICB0di5kYXRhRnJhbWUgPSBjYXRERjtcbiAgICAgIGF3YWl0IGRlbGF5KDUwKTtcbiAgICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld2VyQWRkZWQpO1xuICAgICAgaWYgKG9wdGlvbnM/LmF3YWl0Vmlld2VyKVxuICAgICAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkLCB1bmRlZmluZWQsIG9wdGlvbnMhLmF3YWl0Vmlld2VyKTtcbiAgICB9XG5cbiAgICAvLzUuIENhbGwgcG9zdHBvbmVkIGZpbHRlcmluZ1xuICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld2VyQWRkZWQsIGZpbHRlckFzeW5jKTtcbiAgICBpZiAob3B0aW9ucz8uYXdhaXRWaWV3ZXIpXG4gICAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkLCBmaWx0ZXJBc3luYywgb3B0aW9ucyEuYXdhaXRWaWV3ZXIpO1xuXG4gIH0gZmluYWxseSB7XG4gICAgLy8gY2xvc2VBbGwoKSBpcyBoYW5kbGluZyBieSBjb21tb24gdGVzdCB3b3JrZmxvd1xuICAgIC8vIGdyb2suc2hlbGwuY2xvc2VBbGwoKTtcbiAgICAvLyBERy5CYWxsb29uLmNsb3NlQWxsKCk7XG4gIH1cbn1cbiJdfQ==
|
|
756
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLElBQUksTUFBTSxtQkFBbUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXRDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU3QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSx5QkFBeUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRJLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0FBQy9CLE1BQU0saUJBQWlCLEdBQUcsUUFBUSxDQUFDO0FBRW5DLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzNDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzNDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRTdDLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FFZCxFQUFFLENBQUM7QUFFUCxNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQztBQUN0QyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUM7QUFDM0IsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUM7QUFDckMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDO0FBQzNCLE1BQU0sYUFBYSxHQUErQixFQUFFLENBQUM7QUFDckQsTUFBTSxDQUFDLElBQUksZUFBdUIsQ0FBQztBQUVuQyxNQUFNLEtBQVcsTUFBTSxDQUt0QjtBQUxE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QUFRLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDNUc7WUFFRCw2QkFBNkI7WUFDN0IsTUFBTSxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUNyRixJQUFJLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxXQUFXO2dCQUN0QixNQUFNLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxPQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7U0FFOUc7Z0JBQVM7WUFDUixpREFBaUQ7WUFDakQseUJBQXlCO1lBQ3pCLHlCQUF5QjtTQUMxQjs7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRlc3REYXRhIH0gZnJvbSAnLi9kYXRhZnJhbWUtdXRpbHMnO1xuaW1wb3J0IFRpbWVvdXQgPSBOb2RlSlMuVGltZW91dDtcbmltcG9ydCB7IGNoYW5nZU9wdGlvbnNTYXZlTGF5b3V0LCBmaWx0ZXJBc3luYywgbG9hZExheW91dCwgc2VsZWN0RmlsdGVyQ2hhbmdlQ3VycmVudCwgdGVzdFZpZXdlckludGVybmFsIH0gZnJvbSAnLi90ZXN0LXZpZXdlci11dGlscyc7XG5cbmNvbnN0IFNUQU5EQVJUX1RJTUVPVVQgPSAzMDAwMDtcbmNvbnN0IEJFTkNITUFSS19USU1FT1VUID0gMTA4MDAwMDA7XG5cbmNvbnN0IHN0ZExvZyA9IGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSk7XG5jb25zdCBzdGRJbmZvID0gY29uc29sZS5pbmZvLmJpbmQoY29uc29sZSk7XG5jb25zdCBzdGRXYXJuID0gY29uc29sZS53YXJuLmJpbmQoY29uc29sZSk7XG5jb25zdCBzdGRFcnJvciA9IGNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlKTtcblxuZXhwb3J0IGNvbnN0IHRlc3RzOiB7XG4gIFtrZXk6IHN0cmluZ106IENhdGVnb3J5XG59ID0ge307XG5cbmNvbnN0IGF1dG9UZXN0c0NhdE5hbWUgPSAnQXV0byBUZXN0cyc7XG5jb25zdCBkZW1vQ2F0TmFtZSA9ICdEZW1vJztcbmNvbnN0IGRldGVjdG9yc0NhdE5hbWUgPSAnRGV0ZWN0b3JzJztcbmNvbnN0IGNvcmVDYXROYW1lID0gJ0NvcmUnO1xuY29uc3Qgd2FzUmVnaXN0ZXJlZDogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gPSB7fTtcbmV4cG9ydCBsZXQgY3VycmVudENhdGVnb3J5OiBzdHJpbmc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgYXNzdXJlIHtcbiAgZXhwb3J0IGZ1bmN0aW9uIG5vdE51bGwodmFsdWU6IGFueSwgbmFtZT86IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke25hbWUgPT0gbnVsbCA/ICdWYWx1ZScgOiBuYW1lfSBub3QgZGVmaW5lZGApO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdE9wdGlvbnMge1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICBiZW5jaG1hcmtXYXJuVGltZW91dD86IG51bWJlcjtcbiAgYmVuY2htYXJrVGltZW91dD86IG51bWJlcjtcbiAgdW5oYW5kbGVkRXhjZXB0aW9uVGltZW91dD86IG51bWJlcjtcbiAgc2tpcFJlYXNvbj86IHN0cmluZztcbiAgaXNBZ2dyZWdhdGVkPzogYm9vbGVhbjtcbiAgYmVuY2htYXJrPzogYm9vbGVhbjtcbiAgc3RyZXNzVGVzdD86IGJvb2xlYW47XG4gIG93bmVyPzogc3RyaW5nO1xuICB0YWdzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2F0ZWdvcnlPcHRpb25zIHtcbiAgY2xlYXI/OiBib29sZWFuO1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICBiZW5jaG1hcmtzPzogYm9vbGVhbjtcbiAgc3RyZXNzVGVzdHM/OiBib29sZWFuO1xuICBvd25lcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFRlc3RDb250ZXh0IHtcbiAgc3RyZXNzVGVzdD86IGJvb2xlYW47XG4gIGNhdGNoVW5oYW5kbGVkID0gdHJ1ZTtcbiAgcmVwb3J0ID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoY2F0Y2hVbmhhbmRsZWQ/OiBib29sZWFuLCByZXBvcnQ/OiBib29sZWFuKSB7XG4gICAgaWYgKGNhdGNoVW5oYW5kbGVkICE9PSB1bmRlZmluZWQpIHRoaXMuY2F0Y2hVbmhhbmRsZWQgPSBjYXRjaFVuaGFuZGxlZDtcbiAgICBpZiAocmVwb3J0ICE9PSB1bmRlZmluZWQpIHRoaXMucmVwb3J0ID0gcmVwb3J0O1xuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgVGVzdCB7XG4gIHRlc3Q6ICgpID0+IFByb21pc2U8YW55PjtcbiAgbmFtZTogc3RyaW5nO1xuICBjYXRlZ29yeTogc3RyaW5nO1xuICBvcHRpb25zPzogVGVzdE9wdGlvbnM7XG5cbiAgY29uc3RydWN0b3IoY2F0ZWdvcnk6IHN0cmluZywgbmFtZTogc3RyaW5nLCB0ZXN0OiAoKSA9PiBQcm9taXNlPGFueT4sIG9wdGlvbnM/OiBUZXN0T3B0aW9ucykge1xuICAgIHRoaXMuY2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIG9wdGlvbnMgPz89IHt9O1xuICAgIG9wdGlvbnMudGltZW91dCA/Pz0gU1RBTkRBUlRfVElNRU9VVDtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMudGVzdCA9IGFzeW5jICgpOiBQcm9taXNlPGFueT4gPT4ge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChERy5UZXN0LmlzSW5EZWJ1ZylcbiAgICAgICAgICAgIGRlYnVnZ2VyO1xuICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IHRlc3QoKTtcbiAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENhdGVnb3J5IHtcbiAgdGVzdHM/OiBUZXN0W107XG4gIGJlZm9yZT86ICgpID0+IFByb21pc2U8dm9pZD47XG4gIGFmdGVyPzogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICBiZWZvcmVTdGF0dXM/OiBzdHJpbmc7XG4gIGFmdGVyU3RhdHVzPzogc3RyaW5nO1xuICBjbGVhcj86IGJvb2xlYW47XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIGJlbmNobWFya3M/OiBib29sZWFuO1xuICBiZW5jaG1hcmtUaW1lb3V0PzogbnVtYmVyO1xuICBzdHJlc3NUZXN0cz86IGJvb2xlYW47XG4gIG93bmVyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgVGVzdEV4ZWN1dGlvbk9wdGlvbnMge1xuICBjYXRlZ29yeT86IHN0cmluZztcbiAgdGVzdD86IHN0cmluZztcbiAgdGVzdENvbnRleHQ/OiBUZXN0Q29udGV4dDtcbiAgZXhjbHVkZT86IHN0cmluZ1tdO1xuICB2ZXJib3NlPzogYm9vbGVhbjtcbiAgc3RyZXNzVGVzdD86IGJvb2xlYW47XG4gIHRhZ3M/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlc3RFdmVudDxUPihldmVudDogT2JzZXJ2YWJsZTxUPixcbiAgaGFuZGxlcjogKGFyZ3M6IFQpID0+IHZvaWQsIHRyaWdnZXI6ICgpID0+IHZvaWQsIG1zOiBudW1iZXIgPSAwLCByZWFzb246IHN0cmluZyA9IGB0aW1lb3V0YFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzdWIgPSBldmVudC5zdWJzY3JpYmUoKGFyZ3M6IFQpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGhhbmRsZXIoYXJncyk7XG4gICAgICAgIHJlc29sdmUoJ09LJyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXByb21pc2UtcmVqZWN0LWVycm9yc1xuICAgICAgcmVqZWN0KHJlYXNvbik7XG4gICAgfSwgbXMpO1xuICAgIHRyaWdnZXIoKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0ZXN0RXZlbnRBc3luYzxUPihldmVudDogT2JzZXJ2YWJsZTxUPixcbiAgaGFuZGxlcjogKGFyZ3M6IFQpID0+IFByb21pc2U8dm9pZD4sIHRyaWdnZXI6ICgpID0+IHZvaWQsIG1zOiBudW1iZXIgPSAwLCByZWFzb246IHN0cmluZyA9IGB0aW1lb3V0YFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzdWIgPSBldmVudC5zdWJzY3JpYmUoKGFyZ3M6IFQpID0+IHtcbiAgICAgIGhhbmRsZXIoYXJncykudGhlbigoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoJ09LJyk7XG4gICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9KS5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1wcm9taXNlLXJlamVjdC1lcnJvcnNcbiAgICAgIHJlamVjdChyZWFzb24pO1xuICAgIH0sIG1zKTtcbiAgICB0cmlnZ2VyKCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVzdChuYW1lOiBzdHJpbmcsIHRlc3Q6ICgpID0+IFByb21pc2U8YW55Piwgb3B0aW9ucz86IFRlc3RPcHRpb25zKTogdm9pZCB7XG4gIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID09IHVuZGVmaW5lZClcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID0ge307XG4gIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnRlc3RzID09IHVuZGVmaW5lZClcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnRlc3RzID0gW107XG4gIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMhLnB1c2gobmV3IFRlc3QoY3VycmVudENhdGVnb3J5LCBuYW1lLCB0ZXN0LCBvcHRpb25zKSk7XG59XG5cbi8qIFRlc3RzIHR3byBvYmplY3RzIGZvciBlcXVhbGl0eSwgdGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGV5IGFyZSBub3QgZXF1YWwuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0KGFjdHVhbDogYW55LCBleHBlY3RlZDogYW55ID0gdHJ1ZSwgZXJyb3I/OiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKGVycm9yKVxuICAgIGVycm9yID0gYCR7ZXJyb3J9LCBgO1xuICBlbHNlIGVycm9yID0gJyc7XG4gIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKVxuICAgIHRocm93IG5ldyBFcnJvcihgJHtlcnJvcn1FeHBlY3RlZCBcIiR7ZXhwZWN0ZWR9XCIsIGdvdCBcIiR7YWN0dWFsfVwiYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RGbG9hdChhY3R1YWw6IG51bWJlciwgZXhwZWN0ZWQ6IG51bWJlciwgdG9sZXJhbmNlID0gMC4wMDEsIGVycm9yPzogc3RyaW5nKTogdm9pZCB7XG4gIGlmICgoYWN0dWFsID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgJiYgZXhwZWN0ZWQgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkgfHxcbiAgICAoYWN0dWFsID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgJiYgZXhwZWN0ZWQgPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSkgfHxcbiAgICAoYWN0dWFsID09PSBOdW1iZXIuTmFOICYmIGV4cGVjdGVkID09PSBOdW1iZXIuTmFOKSB8fCAoaXNOYU4oYWN0dWFsKSAmJiBpc05hTihleHBlY3RlZCkpKVxuICAgIHJldHVybjtcbiAgY29uc3QgYXJlRXF1YWwgPSBNYXRoLmFicyhhY3R1YWwgLSBleHBlY3RlZCkgPCB0b2xlcmFuY2U7XG4gIGV4cGVjdChhcmVFcXVhbCwgdHJ1ZSwgYCR7ZXJyb3IgPz8gJyd9ICh0b2xlcmFuY2UgPSAke3RvbGVyYW5jZX0pYCk7XG4gIGlmICghYXJlRXF1YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke2V4cGVjdGVkfSwgZ290ICR7YWN0dWFsfSAodG9sZXJhbmNlID0gJHt0b2xlcmFuY2V9KWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0VGFibGUoYWN0dWFsOiBERy5EYXRhRnJhbWUsIGV4cGVjdGVkOiBERy5EYXRhRnJhbWUsIGVycm9yPzogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IGV4cGVjdGVkUm93Q291bnQgPSBleHBlY3RlZC5yb3dDb3VudDtcbiAgY29uc3QgYWN0dWFsUm93Q291bnQgPSBhY3R1YWwucm93Q291bnQ7XG4gIGV4cGVjdChhY3R1YWxSb3dDb3VudCwgZXhwZWN0ZWRSb3dDb3VudCwgYCR7ZXJyb3IgPz8gJyd9LCByb3cgY291bnRgKTtcblxuICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBleHBlY3RlZC5jb2x1bW5zKSB7XG4gICAgY29uc3QgYWN0dWFsQ29sdW1uID0gYWN0dWFsLmNvbHVtbnMuYnlOYW1lKGNvbHVtbi5uYW1lKTtcbiAgICBpZiAoYWN0dWFsQ29sdW1uID09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbHVtbiAke2NvbHVtbi5uYW1lfSBub3QgZm91bmRgKTtcbiAgICBpZiAoYWN0dWFsQ29sdW1uLnR5cGUgIT0gY29sdW1uLnR5cGUpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbHVtbiAke2NvbHVtbi5uYW1lfSB0eXBlIGV4cGVjdGVkICR7Y29sdW1uLnR5cGV9IGdvdCAke2FjdHVhbENvbHVtbi50eXBlfWApO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXhwZWN0ZWRSb3dDb3VudDsgaSsrKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGNvbHVtbi5nZXQoaSk7XG4gICAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IGFjdHVhbENvbHVtbi5nZXQoaSk7XG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT0gREcuVFlQRS5GTE9BVClcbiAgICAgICAgZXhwZWN0RmxvYXQoYWN0dWFsVmFsdWUsIHZhbHVlLCAwLjAwMDEsIGVycm9yKTtcbiAgICAgIGVsc2UgaWYgKGNvbHVtbi50eXBlID09IERHLlRZUEUuREFURV9USU1FKVxuICAgICAgICBleHBlY3QoYWN0dWFsVmFsdWUuaXNTYW1lKHZhbHVlKSwgdHJ1ZSwgZXJyb3IpO1xuICAgICAgZWxzZVxuICAgICAgICBleHBlY3QoYWN0dWFsVmFsdWUsIHZhbHVlLCBlcnJvcik7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RPYmplY3QoYWN0dWFsOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBleHBlY3RlZDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkge1xuICBmb3IgKGNvbnN0IFtleHBlY3RlZEtleSwgZXhwZWN0ZWRWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZXhwZWN0ZWQpKSB7XG4gICAgaWYgKCFhY3R1YWwuaGFzT3duUHJvcGVydHkoZXhwZWN0ZWRLZXkpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBwcm9wZXJ0eSBcIiR7ZXhwZWN0ZWRLZXl9XCIgbm90IGZvdW5kYCk7XG5cbiAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IGFjdHVhbFtleHBlY3RlZEtleV07XG4gICAgaWYgKGFjdHVhbFZhbHVlIGluc3RhbmNlb2YgQXJyYXkgJiYgZXhwZWN0ZWRWYWx1ZSBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgZXhwZWN0QXJyYXkoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpO1xuICAgIGVsc2UgaWYgKGFjdHVhbFZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICYmIGV4cGVjdGVkVmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpXG4gICAgICBleHBlY3RPYmplY3QoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpO1xuICAgIGVsc2UgaWYgKE51bWJlci5pc0Zpbml0ZShhY3R1YWxWYWx1ZSkgJiYgTnVtYmVyLmlzRmluaXRlKGV4cGVjdGVkVmFsdWUpKVxuICAgICAgZXhwZWN0RmxvYXQoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpO1xuICAgIGVsc2UgaWYgKGFjdHVhbFZhbHVlICE9IGV4cGVjdGVkVmFsdWUpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICgke2V4cGVjdGVkVmFsdWV9KSBmb3Iga2V5ICcke2V4cGVjdGVkS2V5fScsIGdvdCAoJHthY3R1YWxWYWx1ZX0pYCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdEFycmF5KGFjdHVhbDogQXJyYXlMaWtlPGFueT4sIGV4cGVjdGVkOiBBcnJheUxpa2U8YW55Pikge1xuICBjb25zdCBhY3R1YWxMZW5ndGggPSBhY3R1YWwubGVuZ3RoO1xuICBjb25zdCBleHBlY3RlZExlbmd0aCA9IGV4cGVjdGVkLmxlbmd0aDtcblxuICBpZiAoYWN0dWFsTGVuZ3RoICE9IGV4cGVjdGVkTGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheXMgYXJlIG9mIGRpZmZlcmVudCBsZW5ndGg6IGFjdHVhbCBhcnJheSBsZW5ndGggaXMgJHthY3R1YWxMZW5ndGh9IGAgK1xuICAgICAgYGFuZCBleHBlY3RlZCBhcnJheSBsZW5ndGggaXMgJHtleHBlY3RlZExlbmd0aH1gKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0dWFsTGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYWN0dWFsW2ldIGluc3RhbmNlb2YgQXJyYXkgJiYgZXhwZWN0ZWRbaV0gaW5zdGFuY2VvZiBBcnJheSlcbiAgICAgIGV4cGVjdEFycmF5KGFjdHVhbFtpXSwgZXhwZWN0ZWRbaV0pO1xuICAgIGVsc2UgaWYgKGFjdHVhbFtpXSBpbnN0YW5jZW9mIE9iamVjdCAmJiBleHBlY3RlZFtpXSBpbnN0YW5jZW9mIE9iamVjdClcbiAgICAgIGV4cGVjdE9iamVjdChhY3R1YWxbaV0sIGV4cGVjdGVkW2ldKTtcbiAgICBlbHNlIGlmIChhY3R1YWxbaV0gIT0gZXhwZWN0ZWRbaV0pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7ZXhwZWN0ZWRbaV19IGF0IHBvc2l0aW9uICR7aX0sIGdvdCAke2FjdHVhbFtpXX1gKTtcbiAgfVxufVxuXG4vKiBEZWZpbmVzIGEgdGVzdCBzdWl0ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXRlZ29yeShjYXRlZ29yeTogc3RyaW5nLCB0ZXN0c186ICgpID0+IHZvaWQsIG9wdGlvbnM/OiBDYXRlZ29yeU9wdGlvbnMpOiB2b2lkIHtcbiAgY3VycmVudENhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gIHRlc3RzXygpO1xuICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSkge1xuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0uY2xlYXIgPSBvcHRpb25zPy5jbGVhciA/PyB0cnVlO1xuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGltZW91dCA9IG9wdGlvbnM/LnRpbWVvdXQ7XG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5iZW5jaG1hcmtzID0gb3B0aW9ucz8uYmVuY2htYXJrcztcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnN0cmVzc1Rlc3RzID0gb3B0aW9ucz8uc3RyZXNzVGVzdHM7XG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5vd25lciA9IG9wdGlvbnM/Lm93bmVyO1xuICB9XG59XG5cbi8qIERlZmluZXMgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIHRlc3RzIGluIHRoaXMgY2F0ZWdvcnkgYXJlIGV4ZWN1dGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJlZm9yZShiZWZvcmU6ICgpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5iZWZvcmUgPSBiZWZvcmU7XG59XG5cbi8qIERlZmluZXMgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBhZnRlciB0aGUgdGVzdHMgaW4gdGhpcyBjYXRlZ29yeSBhcmUgZXhlY3V0ZWQuICovXG5leHBvcnQgZnVuY3Rpb24gYWZ0ZXIoYWZ0ZXI6ICgpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5hZnRlciA9IGFmdGVyO1xufVxuXG5mdW5jdGlvbiBhZGROYW1lc3BhY2Uoczogc3RyaW5nLCBmOiBERy5GdW5jKTogc3RyaW5nIHtcbiAgcmV0dXJuIHMucmVwbGFjZShuZXcgUmVnRXhwKGYubmFtZSwgJ2dpJyksIGYubnFOYW1lKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluaXRBdXRvVGVzdHMocGFja2FnZV86IERHLlBhY2thZ2UsIG1vZHVsZT86IGFueSkge1xuICBjb25zdCBwYWNrYWdlSWQgPSBwYWNrYWdlXy5pZDtcbiAgaWYgKHdhc1JlZ2lzdGVyZWRbcGFja2FnZUlkXSkgcmV0dXJuO1xuICBjb25zdCBtb2R1bGVUZXN0cyA9IG1vZHVsZSA/IG1vZHVsZS50ZXN0cyA6IHRlc3RzO1xuICBpZiAobW9kdWxlVGVzdHNbYXV0b1Rlc3RzQ2F0TmFtZV0gIT09IHVuZGVmaW5lZCB8fFxuICAgIG1vZHVsZVRlc3RzW2RlbW9DYXROYW1lXSAhPT0gdW5kZWZpbmVkIHx8XG4gICAgT2JqZWN0LmtleXMobW9kdWxlVGVzdHMpLmZpbmQoKGMpID0+IGMuc3RhcnRzV2l0aChhdXRvVGVzdHNDYXROYW1lKSB8fCBjLnN0YXJ0c1dpdGgoY29yZUNhdE5hbWUpKSkge1xuICAgIHdhc1JlZ2lzdGVyZWRbcGFja2FnZUlkXSA9IHRydWU7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChwYWNrYWdlXy5uYW1lID09PSAnRGV2VG9vbHMnIHx8ICghIW1vZHVsZSAmJiBtb2R1bGUuX3BhY2thZ2UubmFtZSA9PT0gJ0RldlRvb2xzJykpIHtcbiAgICBmb3IgKGNvbnN0IGYgb2YgKDxhbnk+d2luZG93KS5kYXJ0VGVzdHMpIHtcbiAgICAgIGNvbnN0IGFyciA9IGYubmFtZS5zcGxpdCgvXFxzKlxcfFxccyohL2cpO1xuICAgICAgbGV0IG5hbWUgPSBhcnIucG9wKCkgPz8gZi5uYW1lO1xuICAgICAgbGV0IGNhdCA9IGFyci5sZW5ndGggPyBjb3JlQ2F0TmFtZSArICc6ICcgKyBhcnIuam9pbignOiAnKSA6IGNvcmVDYXROYW1lO1xuICAgICAgbGV0IGZ1bGxOYW1lOiBzdHJpbmdbXSA9IG5hbWUuc3BsaXQoJyB8ICcpO1xuICAgICAgbmFtZSA9IGZ1bGxOYW1lW2Z1bGxOYW1lLmxlbmd0aCAtIDFdO1xuICAgICAgZnVsbE5hbWUudW5zaGlmdChjYXQpO1xuICAgICAgZnVsbE5hbWUucG9wKCk7XG4gICAgICBjYXQgPSBmdWxsTmFtZS5qb2luKCc6ICcpO1xuICAgICAgaWYgKG1vZHVsZVRlc3RzW2NhdF0gPT09IHVuZGVmaW5lZClcbiAgICAgICAgbW9kdWxlVGVzdHNbY2F0XSA9IHsgdGVzdHM6IFtdLCBjbGVhcjogdHJ1ZSB9O1xuICAgICAgbW9kdWxlVGVzdHNbY2F0XS50ZXN0cy5wdXNoKG5ldyBUZXN0KGNhdCwgbmFtZSwgZi50ZXN0LCB7IGlzQWdncmVnYXRlZDogZmFsc2UsIHRpbWVvdXQ6IGYub3B0aW9ucz8udGltZW91dCA/PyBTVEFOREFSVF9USU1FT1VULCBza2lwUmVhc29uOiBmLm9wdGlvbnM/LnNraXBSZWFzb24sIG93bmVyOiBmLm9wdGlvbnM/Lm93bmVyIH0pKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgbW9kdWxlQXV0b1Rlc3RzID0gW107XG4gIGNvbnN0IG1vZHVsZURlbW8gPSBbXTtcbiAgY29uc3QgbW9kdWxlRGV0ZWN0b3JzID0gW107XG4gIGNvbnN0IHBhY2tGdW5jdGlvbnMgPSBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmZpbHRlcihgcGFja2FnZS5pZCA9IFwiJHtwYWNrYWdlSWR9XCJgKS5saXN0KCk7XG4gIGNvbnN0IHJlZyA9IG5ldyBSZWdFeHAoL3NraXA6XFxzKihbXixcXHNdKyl8d2FpdDpcXHMqKFxcZCspfGNhdDpcXHMqKFteLFxcc10rKXx0aW1lb3V0OlxccyooXFxkKykvZyk7XG4gIGZvciAoY29uc3QgZiBvZiBwYWNrRnVuY3Rpb25zKSB7XG4gICAgY29uc3QgdGVzdHMgPSBmLm9wdGlvbnNbJ3Rlc3QnXTtcbiAgICBjb25zdCBkZW1vID0gZi5vcHRpb25zWydkZW1vUGF0aCddO1xuICAgIGlmICgodGVzdHMgJiYgQXJyYXkuaXNBcnJheSh0ZXN0cykgJiYgdGVzdHMubGVuZ3RoKSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCByZXMgPSAodGVzdHNbaV0gYXMgc3RyaW5nKS5tYXRjaEFsbChyZWcpO1xuICAgICAgICBjb25zdCBtYXA6IHsgc2tpcD86IHN0cmluZywgd2FpdD86IG51bWJlciwgY2F0Pzogc3RyaW5nLCB0aW1lb3V0PzogbnVtYmVyLCBiZW5jaG1hcmtUaW1lb3V0PzogbnVtYmVyIH0gPSB7fTtcbiAgICAgICAgQXJyYXkuZnJvbShyZXMpLmZvckVhY2goKGFycikgPT4ge1xuICAgICAgICAgIGlmIChhcnJbMF0uc3RhcnRzV2l0aCgnc2tpcCcpKSBtYXBbJ3NraXAnXSA9IGFyclsxXTtcbiAgICAgICAgICBlbHNlIGlmIChhcnJbMF0uc3RhcnRzV2l0aCgnd2FpdCcpKSBtYXBbJ3dhaXQnXSA9IHBhcnNlSW50KGFyclsyXSk7XG4gICAgICAgICAgZWxzZSBpZiAoYXJyWzBdLnN0YXJ0c1dpdGgoJ2NhdCcpKSBtYXBbJ2NhdCddID0gYXJyWzNdO1xuICAgICAgICAgIGVsc2UgaWYgKGFyclswXS5zdGFydHNXaXRoKCd0aW1lb3V0JykpIG1hcFsndGltZW91dCddID0gcGFyc2VJbnQoYXJyWzRdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHRlc3QgPSBuZXcgVGVzdChhdXRvVGVzdHNDYXROYW1lLCB0ZXN0cy5sZW5ndGggPT09IDEgPyBmLm5hbWUgOiBgJHtmLm5hbWV9ICR7aSArIDF9YCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGdyb2suZnVuY3Rpb25zLmV2YWwoYWRkTmFtZXNwYWNlKHRlc3RzW2ldLCBmKSk7XG4gICAgICAgICAgaWYgKG1hcC53YWl0KSBhd2FpdCBkZWxheShtYXAud2FpdCk7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcbiAgICAgICAgICBpZiAodHlwZW9mIHJlcyA9PT0gJ2Jvb2xlYW4nICYmICFyZXMpIHRocm93IGBGYWlsZWQ6ICR7dGVzdHNbaV19LCBleHBlY3RlZCB0cnVlLCBnb3QgJHtyZXN9YDtcbiAgICAgICAgfSwgeyBza2lwUmVhc29uOiBtYXAuc2tpcCwgdGltZW91dDogREcuVGVzdC5pc0luQmVuY2htYXJrID8gbWFwLmJlbmNobWFya1RpbWVvdXQgPz8gQkVOQ0hNQVJLX1RJTUVPVVQgOiBtYXAudGltZW91dCA/PyBTVEFOREFSVF9USU1FT1VUIH0pO1xuICAgICAgICBpZiAobWFwLmNhdCkge1xuICAgICAgICAgIGNvbnN0IGNhdDogc3RyaW5nID0gYXV0b1Rlc3RzQ2F0TmFtZSArICc6ICcgKyBtYXAuY2F0O1xuICAgICAgICAgIHRlc3QuY2F0ZWdvcnkgPSBjYXQ7XG4gICAgICAgICAgaWYgKG1vZHVsZVRlc3RzW2NhdF0gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIG1vZHVsZVRlc3RzW2NhdF0gPSB7IHRlc3RzOiBbXSwgY2xlYXI6IHRydWUgfTtcbiAgICAgICAgICBtb2R1bGVUZXN0c1tjYXRdLnRlc3RzLnB1c2godGVzdCk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIG1vZHVsZUF1dG9UZXN0cy5wdXNoKHRlc3QpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGVtbykge1xuICAgICAgY29uc3Qgd2FpdCA9IGYub3B0aW9uc1snZGVtb1dhaXQnXSA/IHBhcnNlSW50KGYub3B0aW9uc1snZGVtb1dhaXQnXSkgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCB0ZXN0ID0gbmV3IFRlc3QoZGVtb0NhdE5hbWUsIGYuZnJpZW5kbHlOYW1lLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IGRlbGF5KDMwMCk7XG4gICAgICAgIGdyb2suc2hlbGwuY2xlYXJMYXN0RXJyb3IoKTtcbiAgICAgICAgYXdhaXQgZi5hcHBseSgpO1xuICAgICAgICBhd2FpdCBkZWxheSh3YWl0ID8gd2FpdCA6IDIwMDApO1xuICAgICAgICBjb25zdCB1bmhhbmRsZWQgPSBhd2FpdCBncm9rLnNoZWxsLmxhc3RFcnJvcjtcbiAgICAgICAgaWYgKHVuaGFuZGxlZClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodW5oYW5kbGVkKTtcbiAgICAgIH0sIHsgc2tpcFJlYXNvbjogZi5vcHRpb25zWydkZW1vU2tpcCddIH0pO1xuICAgICAgbW9kdWxlRGVtby5wdXNoKHRlc3QpO1xuICAgIH1cbiAgICBpZiAoZi5oYXNUYWcoJ3NlbVR5cGVEZXRlY3RvcicpKSB7XG4gICAgICBsZXQgZGV0ZWN0b3JzVGVzdERhdGEgPSB0ZXN0RGF0YTtcbiAgICAgIGlmIChmLm9wdGlvbnNbJ3Rlc3REYXRhJ10pIHtcbiAgICAgICAgZGV0ZWN0b3JzVGVzdERhdGEgPSBhd2FpdCBncm9rLmRhdGEuZmlsZXMub3BlblRhYmxlKGBTeXN0ZW06QXBwRGF0YS8ke3BhY2thZ2VfLm5xTmFtZX0vJHtmLm9wdGlvbnNbJ3Rlc3REYXRhJ119YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRlc3QgPSBuZXcgVGVzdChkZXRlY3RvcnNDYXROYW1lLCBmLmZyaWVuZGx5TmFtZSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBhcnIgPSBbXTtcbiAgICAgICAgY29uc29sZS5sb2coYFN5c3RlbTpBcHBEYXRhLyR7cGFja2FnZV8ubnFOYW1lfS8ke2Yub3B0aW9uc1sndGVzdERhdGEnXX1gKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBkZXRlY3RvcnNUZXN0RGF0YS5jbG9uZSgpLmNvbHVtbnMpIHtcbiAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmLmFwcGx5KFtjb2xdKTtcbiAgICAgICAgICBhcnIucHVzaChyZXMgfHwgY29sLnNlbVR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc0FyciA9IGFyci5maWx0ZXIoKGkpID0+IGkpO1xuICAgICAgICBleHBlY3QocmVzQXJyLmxlbmd0aCwgMSk7XG5cbiAgICAgICAgaWYgKGYub3B0aW9uc1sndGVzdERhdGFDb2x1bW5OYW1lJ10pXG4gICAgICAgICAgZXhwZWN0KHJlc0FyclswXSwgZi5vcHRpb25zWyd0ZXN0RGF0YUNvbHVtbk5hbWUnXSk7XG5cbiAgICAgIH0sIHsgc2tpcFJlYXNvbjogZi5vcHRpb25zWydza2lwVGVzdCddIH0pO1xuICAgICAgbW9kdWxlRGV0ZWN0b3JzLnB1c2godGVzdCk7XG4gICAgfVxuICB9XG4gIHdhc1JlZ2lzdGVyZWRbcGFja2FnZUlkXSA9IHRydWU7XG4gIGlmIChtb2R1bGVBdXRvVGVzdHMubGVuZ3RoID4gMClcbiAgICBtb2R1bGVUZXN0c1thdXRvVGVzdHNDYXROYW1lXSA9IHsgdGVzdHM6IG1vZHVsZUF1dG9UZXN0cywgY2xlYXI6IHRydWUgfTtcbiAgaWYgKG1vZHVsZURlbW8ubGVuZ3RoID4gMClcbiAgICBtb2R1bGVUZXN0c1tkZW1vQ2F0TmFtZV0gPSB7IHRlc3RzOiBtb2R1bGVEZW1vLCBjbGVhcjogdHJ1ZSB9O1xuICBpZiAobW9kdWxlRGV0ZWN0b3JzLmxlbmd0aCA+IDApXG4gICAgbW9kdWxlVGVzdHNbZGV0ZWN0b3JzQ2F0TmFtZV0gPSB7IHRlc3RzOiBtb2R1bGVEZXRlY3RvcnMsIGNsZWFyOiBmYWxzZSB9O1xufVxuXG5mdW5jdGlvbiByZWRlZmluZUNvbnNvbGUoKTogYW55W10ge1xuICBjb25zdCBsb2dzOiBhbnlbXSA9IFtdO1xuICBjb25zb2xlLmxvZyA9ICguLi5hcmdzKSA9PiB7XG4gICAgbG9ncy5wdXNoKC4uLmFyZ3MpO1xuICAgIHN0ZExvZyguLi5hcmdzKTtcbiAgfTtcbiAgY29uc29sZS5pbmZvID0gKC4uLmFyZ3MpID0+IHtcbiAgICBsb2dzLnB1c2goLi4uYXJncyk7XG4gICAgc3RkSW5mbyguLi5hcmdzKTtcbiAgfTtcbiAgY29uc29sZS53YXJuID0gKC4uLmFyZ3MpID0+IHtcbiAgICBsb2dzLnB1c2goLi4uYXJncyk7XG4gICAgc3RkV2FybiguLi5hcmdzKTtcbiAgfTtcbiAgY29uc29sZS5lcnJvciA9ICguLi5hcmdzKSA9PiB7XG4gICAgbG9ncy5wdXNoKC4uLmFyZ3MpO1xuICAgIHN0ZEVycm9yKC4uLmFyZ3MpO1xuICB9O1xuICByZXR1cm4gbG9ncztcbn1cblxuZnVuY3Rpb24gcmVzZXRDb25zb2xlKCk6IHZvaWQge1xuICBjb25zb2xlLmxvZyA9IHN0ZExvZztcbiAgY29uc29sZS5pbmZvID0gc3RkSW5mbztcbiAgY29uc29sZS53YXJuID0gc3RkV2FybjtcbiAgY29uc29sZS5lcnJvciA9IHN0ZEVycm9yO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuVGVzdHMob3B0aW9ucz86IFRlc3RFeGVjdXRpb25PcHRpb25zKSB7XG4gIGNvbnN0IHBhY2thZ2VfID0gZ3Jvay5mdW5jdGlvbnMuZ2V0Q3VycmVudENhbGwoKT8uZnVuYz8ucGFja2FnZTtcbiAgY29uc3QgcGFja2FnZU93bmVyID0gKChwYWNrYWdlXz8ucGFja2FnZU93bmVyID8/ICcnKS5tYXRjaChuZXcgUmVnRXhwKCdbXjxdKjwoW14+XSopPicpKSA/PyBbJycsICcnXSlbMV07XG4gIGF3YWl0IGluaXRBdXRvVGVzdHMocGFja2FnZV8pO1xuICBjb25zdCByZXN1bHRzOiB7XG4gICAgY2F0ZWdvcnk/OiBzdHJpbmcsIG5hbWU/OiBzdHJpbmcsIHN1Y2Nlc3M6IGJvb2xlYW4sXG4gICAgcmVzdWx0OiBzdHJpbmcsIG1zOiBudW1iZXIsIHNraXBwZWQ6IGJvb2xlYW4sIGxvZ3M/OiBzdHJpbmcsIG93bmVyPzogc3RyaW5nXG4gIH1bXSA9IFtdO1xuICBjb25zb2xlLmxvZyhgUnVubmluZyB0ZXN0c2ApO1xuICBvcHRpb25zID8/PSB7fTtcbiAgb3B0aW9ucyEudGVzdENvbnRleHQgPz89IG5ldyBUZXN0Q29udGV4dCgpO1xuICBncm9rLnNoZWxsLmNsZWFyTGFzdEVycm9yKCk7XG4gIGNvbnN0IGxvZ3MgPSByZWRlZmluZUNvbnNvbGUoKTtcblxuICBhd2FpdCBpbnZva2VUZXN0cyh0ZXN0cywgb3B0aW9ucyk7XG5cbiAgZm9yIChsZXQgciBvZiByZXN1bHRzKSB7XG4gICAgci5yZXN1bHQgPSByLnJlc3VsdC50b1N0cmluZygpLnJlcGxhY2UoL1wiL2csICdcXCcnKTtcbiAgICBpZiAoci5sb2dzICE9IHVuZGVmaW5lZClcbiAgICAgIHIubG9ncyA9IHIubG9ncyEudG9TdHJpbmcoKS5yZXBsYWNlKC9cIi9nLCAnXFwnJyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdHM7XG5cbiAgYXN5bmMgZnVuY3Rpb24gaW52b2tlQ2F0ZWdvcnlNZXRob2QobWV0aG9kOiAoKCkgPT4gUHJvbWlzZTx2b2lkPikgfCB1bmRlZmluZWQsIGNhdGVnb3J5OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIHZhciBpbnZva2F0aW9uUmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBpZiAobWV0aG9kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYXdhaXQgdGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgbWV0aG9kKCk7XG4gICAgICAgIH0sIDEwMDAwMCwgYGJlZm9yZSAke2NhdGVnb3J5fTogdGltZW91dCBlcnJvcmApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKHg6IGFueSkge1xuICAgICAgaW52b2thdGlvblJlc3VsdCA9IGF3YWl0IGdldFJlc3VsdCh4KTtcbiAgICB9XG4gICAgcmV0dXJuIGludm9rYXRpb25SZXN1bHRcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGludm9rZVRlc3RzSW5DYXRlZ29yeShjYXRlZ29yeTogQ2F0ZWdvcnksIG9wdGlvbnM6IFRlc3RFeGVjdXRpb25PcHRpb25zKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgIGxldCB0ID0gY2F0ZWdvcnkudGVzdHMgPz8gW107XG4gICAgY29uc3QgcmVzID0gW107XG4gICAgbGV0IG1lbW9yeVVzYWdlQmVmb3JlID0gKHdpbmRvdz8ucGVyZm9ybWFuY2UgYXMgYW55KT8ubWVtb3J5Py51c2VkSlNIZWFwU2l6ZTtcbiAgICBjb25zdCB3aWRnZXRzQmVmb3JlID0gREcuV2lkZ2V0LmdldEFsbCgpLmxlbmd0aDtcblxuICAgIGlmIChjYXRlZ29yeS5jbGVhcikge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0Lmxlbmd0aDsgaSsrKSB7XG5cbiAgICAgICAgaWYgKHRbaV0ub3B0aW9ucykge1xuICAgICAgICAgIGlmICh0W2ldLm9wdGlvbnM/LmJlbmNobWFyayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoIXRbaV0ub3B0aW9ucylcbiAgICAgICAgICAgICAgdFtpXS5vcHRpb25zID0ge31cbiAgICAgICAgICAgIHRbaV0ub3B0aW9ucyEuYmVuY2htYXJrID0gY2F0ZWdvcnkuYmVuY2htYXJrcyA/PyBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRlc3QgPSB0W2ldO1xuICAgICAgICBpZiAob3B0aW9ucy50ZXN0KVxuICAgICAgICAgIGlmIChvcHRpb25zLnRlc3QudG9Mb3dlckNhc2UoKSAhPT0gdGVzdC5uYW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYgKHRlc3Q/Lm9wdGlvbnMpIHtcbiAgICAgICAgICB0ZXN0Lm9wdGlvbnMub3duZXIgPSB0W2ldLm9wdGlvbnM/Lm93bmVyID8/IGNhdGVnb3J5Py5vd25lciA/PyBwYWNrYWdlT3duZXIgPz8gJyc7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGlzR0JFbmFibGUgPSAod2luZG93IGFzIGFueSkuZ2MgJiYgdGVzdC5vcHRpb25zPy5za2lwUmVhc29uID09IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGlzR0JFbmFibGUpXG4gICAgICAgICAgKHdpbmRvdyBhcyBhbnkpLmdjKCk7XG4gICAgICAgIG1lbW9yeVVzYWdlQmVmb3JlID0gKHdpbmRvdz8ucGVyZm9ybWFuY2UgYXMgYW55KT8ubWVtb3J5Py51c2VkSlNIZWFwU2l6ZTtcbiAgICAgICAgbGV0IHRlc3RSdW4gPSBhd2FpdCBleGVjVGVzdCh0ZXN0LCBvcHRpb25zPy50ZXN0LCBsb2dzLCBERy5UZXN0LmlzSW5CZW5jaG1hcmsgPyB0W2ldLm9wdGlvbnM/LmJlbmNobWFya1RpbWVvdXQgPz8gQkVOQ0hNQVJLX1RJTUVPVVQgOiB0W2ldLm9wdGlvbnM/LnRpbWVvdXQgPz8gU1RBTkRBUlRfVElNRU9VVCwgcGFja2FnZV8ubmFtZSwgb3B0aW9ucy52ZXJib3NlKTtcblxuICAgICAgICBpZiAoaXNHQkVuYWJsZSlcbiAgICAgICAgICAod2luZG93IGFzIGFueSkuZ2MoKTtcbiAgICAgICAgaWYgKHRlc3RSdW4pXG4gICAgICAgICAgcmVzLnB1c2goeyAuLi50ZXN0UnVuLCBtZW1vcnlEZWx0YTogKHdpbmRvdz8ucGVyZm9ybWFuY2UgYXMgYW55KT8ubWVtb3J5Py51c2VkSlNIZWFwU2l6ZSAtIG1lbW9yeVVzYWdlQmVmb3JlLCB3aWRnZXRzRGVsdGE6IERHLldpZGdldC5nZXRBbGwoKS5sZW5ndGggLSB3aWRnZXRzQmVmb3JlIH0pO1xuXG4gICAgICAgIGdyb2suc2hlbGwuY2xvc2VBbGwoKTtcbiAgICAgICAgREcuQmFsbG9vbi5jbG9zZUFsbCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IHRlc3QgPSB0W2ldO1xuICAgICAgICBpZiAob3B0aW9ucy50ZXN0KVxuICAgICAgICAgIGlmIChvcHRpb25zLnRlc3QudG9Mb3dlckNhc2UoKSA9PT0gdGVzdC5uYW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgXG4gICAgICAgIGxldCBpc0dCRW5hYmxlID0gKHdpbmRvdyBhcyBhbnkpLmdjICYmIHRlc3Qub3B0aW9ucz8uc2tpcFJlYXNvbiA9PSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0ZXN0Py5vcHRpb25zKSB7XG4gICAgICAgICAgdGVzdC5vcHRpb25zLm93bmVyID0gdFtpXS5vcHRpb25zPy5vd25lciA/PyBjYXRlZ29yeT8ub3duZXIgPz8gcGFja2FnZU93bmVyID8/ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzR0JFbmFibGUpXG4gICAgICAgICAgKHdpbmRvdyBhcyBhbnkpLmdjKCk7XG4gICAgICAgIG1lbW9yeVVzYWdlQmVmb3JlID0gKHdpbmRvdz8ucGVyZm9ybWFuY2UgYXMgYW55KT8ubWVtb3J5Py51c2VkSlNIZWFwU2l6ZTtcbiAgICAgICAgbGV0IHRlc3RSdW4gPSBhd2FpdCBleGVjVGVzdCh0ZXN0LCBvcHRpb25zPy50ZXN0LCBsb2dzLCBERy5UZXN0LmlzSW5CZW5jaG1hcmsgPyB0W2ldLm9wdGlvbnM/LmJlbmNobWFya1RpbWVvdXQgPz8gQkVOQ0hNQVJLX1RJTUVPVVQgOiB0W2ldLm9wdGlvbnM/LnRpbWVvdXQsIHBhY2thZ2VfLm5hbWUsIG9wdGlvbnMudmVyYm9zZSk7XG4gICAgICAgIFxuICAgICAgICBpZiAoaXNHQkVuYWJsZSlcbiAgICAgICAgICAod2luZG93IGFzIGFueSkuZ2MoKTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0ZXN0UnVuKVxuICAgICAgICAgIHJlcy5wdXNoKHsgLi4udGVzdFJ1biwgbWVtb3J5VXNlZDogKHdpbmRvdz8ucGVyZm9ybWFuY2UgYXMgYW55KT8ubWVtb3J5Py51c2VkSlNIZWFwU2l6ZSAtIG1lbW9yeVVzYWdlQmVmb3JlLCB3aWRnZXRzRGlmZmVyZW5jZTogREcuV2lkZ2V0LmdldEFsbCgpLmxlbmd0aCAtIHdpZGdldHNCZWZvcmUgfSk7XG5cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGludm9rZVRlc3RzKGNhdGVnb3JpZXNUb0ludm9rZTogeyBba2V5OiBzdHJpbmddOiBDYXRlZ29yeSB9LCBvcHRpb25zOiBUZXN0RXhlY3V0aW9uT3B0aW9ucykge1xuICAgIHRyeSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhjYXRlZ29yaWVzVG9JbnZva2UpKSB7XG4gICAgICAgIGlmICgoISFvcHRpb25zPy5jYXRlZ29yeSAmJiAha2V5LnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChvcHRpb25zPy5jYXRlZ29yeS50b0xvd2VyQ2FzZSgpKSkgfHxcbiAgICAgICAgICBvcHRpb25zLmV4Y2x1ZGU/LnNvbWUoKGMpID0+IGtleS5zdGFydHNXaXRoKGMpKSlcbiAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICBzdGRMb2coYFN0YXJ0ZWQgJHtrZXl9IGNhdGVnb3J5YCk7XG4gICAgICAgIGNvbnN0IHNraXBwZWQgPSB2YWx1ZS50ZXN0cz8uZXZlcnkoKHQpID0+IHQub3B0aW9ucz8uc2tpcFJlYXNvbik7XG4gICAgICAgIGlmICghc2tpcHBlZClcbiAgICAgICAgICB2YWx1ZS5iZWZvcmVTdGF0dXMgPSBhd2FpdCBpbnZva2VDYXRlZ29yeU1ldGhvZCh2YWx1ZS5iZWZvcmUsIG9wdGlvbnMuY2F0ZWdvcnkgPz8gJycpO1xuXG4gICAgICAgIGxldCB0ID0gdmFsdWUudGVzdHMgPz8gW107XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuc3RyZXNzVGVzdCkge1xuICAgICAgICAgIHQgPSB0LmZpbHRlcigoZSkgPT4gZS5vcHRpb25zPy5zdHJlc3NUZXN0KTtcbiAgICAgICAgICB0ID0gc2h1ZmZsZSh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgob3B0aW9ucy50YWdzPy5sZW5ndGggPz8gMCkgPiAwKSB7XG4gICAgICAgICAgdCA9IHQuZmlsdGVyKChlKSA9PlxuICAgICAgICAgICAgZS5vcHRpb25zPy50YWdzPy5zb21lKHRhZyA9PiAob3B0aW9ucz8udGFncyA/PyBbXSkuaW5jbHVkZXModGFnKSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlczogYW55W107XG4gICAgICAgIGlmICh2YWx1ZS5iZWZvcmVTdGF0dXMpIHtcbiAgICAgICAgICByZXMgPSBBcnJheS5mcm9tKHQubWFwKCh0ZXN0RWxlbSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHsgZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLCBsb2dzOiAnJywgY2F0ZWdvcnk6IGtleSwgbmFtZTogdGVzdEVsZW0ubmFtZSwgcmVzdWx0OiAnYmVmb3JlKCkgZmFpbGVkJywgc3VjY2VzczogZmFsc2UsIG1zOiAwLCBza2lwcGVkOiBmYWxzZSB9O1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgICByZXMuZm9yRWFjaChhc3luYyAodGVzdCkgPT4gcmVwb3J0VGVzdCgncGFja2FnZScsIHRlc3QpKTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgcmVzID0gYXdhaXQgaW52b2tlVGVzdHNJbkNhdGVnb3J5KHZhbHVlLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHJlcy5maWx0ZXIoKGQpID0+IGQucmVzdWx0ICE9ICdza2lwcGVkJyk7XG5cbiAgICAgICAgaWYgKCFza2lwcGVkKVxuICAgICAgICAgIHZhbHVlLmFmdGVyU3RhdHVzID0gYXdhaXQgaW52b2tlQ2F0ZWdvcnlNZXRob2QodmFsdWUuYWZ0ZXIsIG9wdGlvbnMuY2F0ZWdvcnkgPz8gJycpO1xuXG4gICAgICAgIC8vIENsZWFyIGFmdGVyIGNhdGVnb3J5XG4gICAgICAgIC8vIGdyb2suc2hlbGwuY2xvc2VBbGwoKTtcbiAgICAgICAgLy8gREcuQmFsbG9vbi5jbG9zZUFsbCgpO1xuICAgICAgICBpZiAodmFsdWUuYWZ0ZXJTdGF0dXMpXG4gICAgICAgICAgZGF0YS5wdXNoKHsgZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLCBsb2dzOiAnJywgY2F0ZWdvcnk6IGtleSwgbmFtZTogJ2FmdGVyJywgcmVzdWx0OiB2YWx1ZS5hZnRlclN0YXR1cywgc3VjY2VzczogZmFsc2UsIG1zOiAwLCBza2lwcGVkOiBmYWxzZSB9KTtcbiAgICAgICAgaWYgKHZhbHVlLmJlZm9yZVN0YXR1cylcbiAgICAgICAgICBkYXRhLnB1c2goeyBkYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksIGxvZ3M6ICcnLCBjYXRlZ29yeToga2V5LCBuYW1lOiAnYmVmb3JlJywgcmVzdWx0OiB2YWx1ZS5iZWZvcmVTdGF0dXMsIHN1Y2Nlc3M6IGZhbHNlLCBtczogMCwgc2tpcHBlZDogZmFsc2UgfSk7XG4gICAgICAgIHJlc3VsdHMucHVzaCguLi5kYXRhKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgcmVzZXRDb25zb2xlKCk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnRlc3RDb250ZXh0IS5jYXRjaFVuaGFuZGxlZCAmJiAoIURHLlRlc3QuaXNJbkJlbmNobWFyaykpIHtcbiAgICAgIGF3YWl0IGRlbGF5KDEwMDApO1xuICAgICAgY29uc3QgZXJyb3IgPSBhd2FpdCBncm9rLnNoZWxsLmxhc3RFcnJvcjtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgbG9nczogJycsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgY2F0ZWdvcnk6ICdVbmhhbmRsZWQgZXhjZXB0aW9ucycsXG4gICAgICAgIG5hbWU6ICdFeGNlcHRpb24nLFxuICAgICAgICByZXN1bHQ6IGVycm9yID8/ICcnLCBzdWNjZXNzOiAhZXJyb3IsIG1zOiAwLCBza2lwcGVkOiBmYWxzZSxcbiAgICAgICAgJ2ZsYWtpbmcnOiBERy5UZXN0LmlzUmVwcm9kdWNpbmcgJiYgIWVycm9yLFxuICAgICAgICBvd25lcjogcGFja2FnZU93bmVyID8/ICcnXG4gICAgICB9O1xuICAgICAgcmVzdWx0cy5wdXNoKHBhcmFtcyk7XG4gICAgICAoPGFueT5wYXJhbXMpLnBhY2thZ2UgPSBwYWNrYWdlXy5uYW1lO1xuICAgICAgYXdhaXQgcmVwb3J0VGVzdCgncGFja2FnZScsIHBhcmFtcyk7XG4gICAgfVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlcG9ydFRlc3QodHlwZTogc3RyaW5nLCBwYXJhbXM6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoKDxhbnk+Z3Jvay5zaGVsbCkucmVwb3J0VGVzdCAhPSBudWxsKVxuICAgIGF3YWl0ICg8YW55Pmdyb2suc2hlbGwpLnJlcG9ydFRlc3QodHlwZSwgcGFyYW1zKTtcbiAgZWxzZSB7XG4gICAgYXdhaXQgZmV0Y2goYCR7Z3Jvay5kYXBpLnJvb3R9L2xvZy90ZXN0cy8ke3R5cGV9YCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicsXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShwYXJhbXMpXG4gICAgfSk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0UmVzdWx0KHg6IGFueSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBgJHt4LnRvU3RyaW5nKCl9XFxuJHt4LnN0YWNrID8gKGF3YWl0IERHLkxvZ2dlci50cmFuc2xhdGVTdGFja1RyYWNlKHguc3RhY2spKSA6ICcnfWA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4ZWNUZXN0KHQ6IFRlc3QsIHByZWRpY2F0ZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBsb2dzOiBhbnlbXSxcbiAgdGVzdFRpbWVvdXQ/OiBudW1iZXIsIHBhY2thZ2VOYW1lPzogc3RyaW5nLCB2ZXJib3NlPzogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG4gIGxvZ3MubGVuZ3RoID0gMDtcbiAgbGV0IHI6IHsgZGF0ZTogc3RyaW5nLCBjYXRlZ29yeT86IHN0cmluZywgbmFtZT86IHN0cmluZywgc3VjY2VzczogYm9vbGVhbiwgcmVzdWx0OiBhbnksIG1zOiBudW1iZXIsIHNraXBwZWQ6IGJvb2xlYW4sIGxvZ3M/OiBzdHJpbmcsIG93bmVyPzogc3RyaW5nIH07XG4gIGxldCB0eXBlOiBzdHJpbmcgPSAncGFja2FnZSc7XG4gIGNvbnN0IGZpbHRlciA9IHByZWRpY2F0ZSAhPSB1bmRlZmluZWQgJiYgKHQubmFtZS50b0xvd2VyQ2FzZSgpICE9PSBwcmVkaWNhdGUudG9Mb3dlckNhc2UoKSk7XG4gIGxldCBza2lwID0gdC5vcHRpb25zPy5za2lwUmVhc29uIHx8IGZpbHRlcjtcbiAgbGV0IHNraXBSZWFzb24gPSBmaWx0ZXIgPyAnc2tpcHBlZCcgOiB0Lm9wdGlvbnM/LnNraXBSZWFzb247XG5cbiAgaWYgKERHLlRlc3QuaXNJbkJlbmNobWFyayAmJiAhdC5vcHRpb25zPy5iZW5jaG1hcmspIHtcbiAgICBzdGRMb2coYFNLSVBQRUQ6ICR7dC5jYXRlZ29yeX0gJHt0Lm5hbWV9IGRvZXNudCBhdmFpbGFibGUgaW4gYmVuY2htYXJrIG1vZGVgKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKCFza2lwKVxuICAgIHN0ZExvZyhgU3RhcnRlZCAke3QuY2F0ZWdvcnl9ICR7dC5uYW1lfWApO1xuICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gIGNvbnN0IHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHN0YXJ0KS50b0lTT1N0cmluZygpO1xuICB0cnkge1xuICAgIGlmIChza2lwKVxuICAgICAgciA9IHsgZGF0ZTogc3RhcnREYXRlLCBzdWNjZXNzOiB0cnVlLCByZXN1bHQ6IHNraXBSZWFzb24hLCBtczogMCwgc2tpcHBlZDogdHJ1ZSB9O1xuICAgIGVsc2Uge1xuICAgICAgbGV0IHRpbWVvdXRfID0gdGVzdFRpbWVvdXQgPz8gU1RBTkRBUlRfVElNRU9VVDtcblxuICAgICAgaWYgKERHLlRlc3QuaXNQcm9maWxpbmcpXG4gICAgICAgIGNvbnNvbGUucHJvZmlsZShgJHt0LmNhdGVnb3J5fTogJHt0Lm5hbWV9YCk7XG5cbiAgICAgIHIgPSB7IGRhdGU6IHN0YXJ0RGF0ZSwgc3VjY2VzczogdHJ1ZSwgcmVzdWx0OiBhd2FpdCB0aW1lb3V0KHQudGVzdCwgdGltZW91dF8pID8/ICdPSycsIG1zOiAwLCBza2lwcGVkOiBmYWxzZSB9O1xuXG4gICAgICBpZiAoREcuVGVzdC5pc1Byb2ZpbGluZykge1xuICAgICAgICBjb25zb2xlLnByb2ZpbGVFbmQoYCR7dC5jYXRlZ29yeX06ICR7dC5uYW1lfWApO1xuICAgICAgICBncm9rLnNoZWxsLmluZm8oYFByb2ZpbGluZyBvZiAke3QuY2F0ZWdvcnl9OiAke3QubmFtZX0gZmluaXNoZWQgXFxuIFBsZWFzZSBlbnN1cmUgdGhhdCB5b3UgaGF2ZSBvcGVuZWQgRGV2VG9vbHMgKEYxMikgLyBQZXJmb3JtYW5jZSBwYW5lbCBiZWZvcmUgdGVzdCBzdGFydHMuYCk7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoICh4OiBhbnkpIHtcbiAgICBzdGRFcnJvcih4KTtcbiAgICByID0geyBkYXRlOiBzdGFydERhdGUsIHN1Y2Nlc3M6IGZhbHNlLCByZXN1bHQ6IGF3YWl0IGdldFJlc3VsdCh4KSwgbXM6IDAsIHNraXBwZWQ6IGZhbHNlIH07XG4gIH1cbiAgaWYgKHQub3B0aW9ucz8uaXNBZ2dyZWdhdGVkICYmIHIucmVzdWx0LmNvbnN0cnVjdG9yID09PSBERy5EYXRhRnJhbWUpIHtcbiAgICBjb25zdCBjb2wgPSByLnJlc3VsdC5jb2woJ3N1Y2Nlc3MnKTtcbiAgICBpZiAoY29sKVxuICAgICAgci5zdWNjZXNzID0gY29sLnN0YXRzLnN1bSA9PT0gY29sLmxlbmd0aDtcbiAgICBpZiAoIXZlcmJvc2UpIHtcbiAgICAgIGNvbnN0IGRmID0gci5yZXN1bHQ7XG4gICAgICBkZi5jb2x1bW5zLnJlbW92ZSgnc3RhY2snKTtcbiAgICAgIGRmLnJvd3MucmVtb3ZlV2hlcmUoKHIpID0+IHIuZ2V0KCdzdWNjZXNzJykpO1xuICAgICAgci5yZXN1bHQgPSBkZjtcbiAgICB9XG4gICAgci5yZXN1bHQgPSByLnJlc3VsdC50b0NzdigpO1xuICB9XG4gIHIubG9ncyA9IGxvZ3Muam9pbignXFxuJyk7XG4gIHIubXMgPSBEYXRlLm5vdygpIC0gc3RhcnQ7XG4gIGlmICghc2tpcClcbiAgICBzdGRMb2coYEZpbmlzaGVkICR7dC5jYXRlZ29yeX0gJHt0Lm5hbWV9IGZvciAke3IubXN9IG1zYCk7XG4gIHIuY2F0ZWdvcnkgPSB0LmNhdGVnb3J5O1xuICByLm5hbWUgPSB0Lm5hbWU7XG4gIHIub3duZXIgPSB0Lm9wdGlvbnM/Lm93bmVyID8/ICcnO1xuICBpZiAoIWZpbHRlcikge1xuICAgIGxldCBwYXJhbXMgPSB7XG4gICAgICAnc3VjY2Vzcyc6IHIuc3VjY2VzcywgJ3Jlc3VsdCc6IHIucmVzdWx0LCAnbXMnOiByLm1zLCAnZGF0ZSc6IHIuZGF0ZSxcbiAgICAgICdza2lwcGVkJzogci5za2lwcGVkLCAncGFja2FnZSc6IHBhY2thZ2VOYW1lLCAnY2F0ZWdvcnknOiB0LmNhdGVnb3J5LCAnbmFtZSc6IHQubmFtZSwgJ2xvZ3MnOiByLmxvZ3MsICdvd25lcic6IHIub3duZXIsXG4gICAgICAnZmxha2luZyc6IERHLlRlc3QuaXNSZXByb2R1Y2luZyAmJiByLnN1Y2Nlc3MsXG4gICAgICAndGltZW91dFdhcm5pbmcnOiBERy5UZXN0LmlzSW5CZW5jaG1hcmsgJiYgKHQub3B0aW9ucz8uYmVuY2htYXJrV2FyblRpbWVvdXQgJiYgci5tcyA+IHQub3B0aW9ucz8uYmVuY2htYXJrV2FyblRpbWVvdXQpXG4gICAgfTtcbiAgICBpZiAoci5yZXN1bHQuY29uc3RydWN0b3IgPT0gT2JqZWN0KSB7XG4gICAgICBjb25zdCByZXMgPSBPYmplY3Qua2V5cyhyLnJlc3VsdCkucmVkdWNlKChhY2MsIGspID0+ICh7IC4uLmFjYywgWydyZXN1bHQuJyArIGtdOiByLnJlc3VsdFtrXSB9KSwge30pO1xuICAgICAgcGFyYW1zID0geyAuLi5wYXJhbXMsIC4uLnJlcyB9O1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMucmVzdWx0IGluc3RhbmNlb2YgREcuRGF0YUZyYW1lKVxuICAgICAgcGFyYW1zLnJlc3VsdCA9IEpTT04uc3RyaW5naWZ5KHBhcmFtcy5yZXN1bHQ/LnRvSnNvbigpKSB8fCAnJztcblxuICAgIGF3YWl0IHJlcG9ydFRlc3QodHlwZSwgcGFyYW1zKTtcbiAgfVxuICByZXR1cm4gcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNodWZmbGUoYXJyYXk6IGFueVtdKTogYW55W10ge1xuICBjb25zdCBuZXdBcnIgPSBhcnJheS5zbGljZSgpO1xuICBuZXdBcnIuc29ydCgoKSA9PiBNYXRoLnJhbmRvbSgpIC0gMC41KTtcbiAgcmV0dXJuIG5ld0Fycjtcbn07XG5cbi8qIFdhaXRzIFttc10gbWlsbGlzZWNvbmRzICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVsYXkobXM6IG51bWJlcikge1xuICBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCBtcykpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXdhaXRDaGVjayhjaGVja0hhbmRsZXI6ICgpID0+IGJvb2xlYW4sXG4gIGVycm9yOiBzdHJpbmcgPSAnVGltZW91dCBleGNlZWRlZCcsIHdhaXQ6IG51bWJlciA9IDUwMCwgaW50ZXJ2YWw6IG51bWJlciA9IDUwKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnJvcikpO1xuICAgIH0sIHdhaXQpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBpbnRlcnZhbElkOiBUaW1lb3V0ID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgaWYgKGNoZWNrSGFuZGxlcigpKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9LCBpbnRlcnZhbCk7XG4gIH0pO1xufVxuXG4vLyBSZXR1cm5zIHRlc3QgZXhlY3V0aW9uIHJlc3VsdCBvciBhbiBlcnJvciBpbiBjYXNlIG9mIHRpbWVvdXRcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0aW1lb3V0KGZ1bmM6ICgpID0+IFByb21pc2U8YW55PiwgdGVzdFRpbWVvdXQ6IG51bWJlciwgdGltZW91dFJlYXNvbjogc3RyaW5nID0gJ0VYRUNVVElPTiBUSU1FT1VUJyk6IFByb21pc2U8YW55PiB7XG4gIGxldCB0aW1lb3V0OiBhbnkgPSBudWxsO1xuICBjb25zdCB0aW1lb3V0UHJvbWlzZSA9IG5ldyBQcm9taXNlPGFueT4oKF8sIHJlamVjdCkgPT4ge1xuICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcHJvbWlzZS1yZWplY3QtZXJyb3JzXG4gICAgICByZWplY3QodGltZW91dFJlYXNvbik7XG4gICAgfSwgdGVzdFRpbWVvdXQpO1xuICB9KTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5yYWNlKFtmdW5jKCksIHRpbWVvdXRQcm9taXNlXSk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKHRpbWVvdXQpXG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGlhbG9nUHJlc2VudChkaWFsb2dUaXRsZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IGRpYWxvZ3MgPSBERy5EaWFsb2cuZ2V0T3BlbkRpYWxvZ3MoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaWFsb2dzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGRpYWxvZ3NbaV0udGl0bGUgPT0gZGlhbG9nVGl0bGUpXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKiBFeHBlY3RzIGFuIGFzeW5jaHJvbm91cyB7QGxpbmsgYWN0aW9ufSB0byB0aHJvdyBhbiBleGNlcHRpb24uIFVzZSB7QGxpbmsgY2hlY2t9IHRvIHBlcmZvcm1cbiAqIGRlZXBlciBpbnNwZWN0aW9uIG9mIHRoZSBleGNlcHRpb24gaWYgbmVjZXNzYXJ5LlxuICogQHBhcmFtICB7ZnVuY3Rpb24oKTogUHJvbWlzZTx2b2lkPn0gYWN0aW9uXG4gKiBAcGFyYW0gIHtmdW5jdGlvbihhbnkpOiBib29sZWFufSBjaGVja1xuICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4cGVjdEV4Y2VwdGlvbkFzeW5jKGFjdGlvbjogKCkgPT4gUHJvbWlzZTx2b2lkPixcbiAgY2hlY2s/OiAoZXhjZXB0aW9uOiBhbnkpID0+IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgbGV0IGNhdWdodDogYm9vbGVhbiA9IGZhbHNlO1xuICBsZXQgY2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuICB0cnkge1xuICAgIGF3YWl0IGFjdGlvbigpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY2F1Z2h0ID0gdHJ1ZTtcbiAgICBjaGVja2VkID0gIWNoZWNrIHx8IGNoZWNrKGUpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmICghY2F1Z2h0KVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBbiBleGNlcHRpb24gaXMgZXhwZWN0ZWQgYnV0IG5vdCB0aHJvd24nKTtcbiAgICBpZiAoIWNoZWNrZWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FuIGV4cGVjdGVkIGV4Y2VwdGlvbiBpcyB0aHJvd24sIGJ1dCBpdCBkb2VzIG5vdCBzYXRpc2Z5IHRoZSBjb25kaXRpb24nKTtcbiAgfVxufVxuXG5jb25zdCBjYXRERiA9IERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhbREcuQ29sdW1uLmZyb21TdHJpbmdzKCdjb2wnLCBbJ3ZhbDEnLCAndmFsMicsICd2YWwzJ10pXSk7XG5cbi8qKlxuICogVW5pdmVyc2FsIHRlc3QgZm9yIHZpZXdlcnMuIEl0IHNlYXJjaCB2aWV3ZXJzIGluIERPTSBieSB0YWdzOiBjYW52YXMsIHN2ZywgaW1nLCBpbnB1dCwgaDEsIGFcbiAqIEBwYXJhbSAge3N0cmluZ30gdiBWaWV3ZXIgbmFtZVxuICogQHBhcmFtICB7REcuRGF0YUZyYW1lfSBkZiBEYXRhZnJhbWUgdG8gdXNlLiBTaG91bGQgaGF2ZSBhdCBsZWFzdCAzIHJvd3NcbiAqIEBwYXJhbSAge2Jvb2xlYW59IG9wdGlvbnMuZGV0ZWN0U2VtYW50aWNUeXBlcyBTcGVjaWZ5IHdoZXRoZXIgdG8gZGV0ZWN0IHNlbWFudGljIHR5cGVzIG9yIG5vdFxuICogQHBhcmFtICB7Ym9vbGVhbn0gb3B0aW9ucy5yZWFkT25seSBJZiBzZXQgdG8gdHJ1ZSwgdGhlIGRhdGFmcmFtZSB3aWxsIG5vdCBiZSBtb2RpZmllZCBkdXJpbmcgdGhlIHRlc3RcbiAqIEBwYXJhbSAge2Jvb2xlYW59IG9wdGlvbnMuYXJiaXRyYXJ5RGZUZXN0IElmIHNldCB0byBmYWxzZSwgdGVzdCBvbiBhcmJpdHJhcnkgZGF0YWZyYW1lXG4gKiAob25lIGNhdGVnb3JpY2FsIGNvbHVtbikgd2lsbCBub3QgYmUgcGVyZm9ybWVkXG4gKiBAcGFyYW0gIHtvYmplY3R9IG9wdGlvbnMgTGlzdCBvZiBvcHRpb25zIChvcHRpb25hbClcbiAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IFRoZSB0ZXN0IGlzIGNvbnNpZGVyZWQgc3VjY2Vzc2Z1bCBpZiBpdCBjb21wbGV0ZXMgd2l0aG91dCBlcnJvcnNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlc3RWaWV3ZXIodjogc3RyaW5nLCBkZjogREcuRGF0YUZyYW1lLCBvcHRpb25zPzoge1xuICBkZXRlY3RTZW1hbnRpY1R5cGVzPzogYm9vbGVhbiwgcmVhZE9ubHk/OiBib29sZWFuLCBhcmJpdHJhcnlEZlRlc3Q/OiBib29sZWFuLFxuICBwYWNrYWdlTmFtZT86IHN0cmluZywgYXdhaXRWaWV3ZXI/OiAodmlld2VyOiBERy5WaWV3ZXIpID0+IFByb21pc2U8dm9pZD5cbn0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcGFja2FnZU5hbWUgPSBvcHRpb25zPy5wYWNrYWdlTmFtZSA/PyAnJztcbiAgaWYgKG9wdGlvbnM/LmRldGVjdFNlbWFudGljVHlwZXMpXG4gICAgYXdhaXQgZ3Jvay5kYXRhLmRldGVjdFNlbWFudGljVHlwZXMoZGYpO1xuICBjb25zdCB0diA9IGdyb2suc2hlbGwuYWRkVGFibGVWaWV3KGRmKTtcblxuICB0cnkge1xuICAgIC8vMS4gT3BlbiwgZG8gbm90aGluZyBhbmQgY2xvc2VcbiAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkKTtcbiAgICAvL2luIGNhc2Ugdmlld2VyIHdpdGggYXN5bmMgcmVuZGVyaW5nIC0gd2FpdCBmb3IgcmVuZGVyIHRvIGNvbXBsZXRlXG4gICAgaWYgKG9wdGlvbnM/LmF3YWl0Vmlld2VyKVxuICAgICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCwgdW5kZWZpbmVkLCBvcHRpb25zIS5hd2FpdFZpZXdlcik7XG5cbiAgICAvLzIuIE9wZW4gdmlld2VyLCBydW4gc2VsZWN0aW9uLCBmaWx0ZXIsIGV0Yy4gYW5kIGNsb3NlXG4gICAgaWYgKCFvcHRpb25zPy5yZWFkT25seSkge1xuICAgICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCwgc2VsZWN0RmlsdGVyQ2hhbmdlQ3VycmVudCk7XG4gICAgICBpZiAob3B0aW9ucz8uYXdhaXRWaWV3ZXIpXG4gICAgICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld2VyQWRkZWQsIHNlbGVjdEZpbHRlckNoYW5nZUN1cnJlbnQsIG9wdGlvbnMhLmF3YWl0Vmlld2VyKTtcbiAgICB9XG5cbiAgICAvLzIuIE9wZW4gdmlld2VyLCBjaGFuZ2Ugb3B0aW9ucywgc2F2ZSBsYXlvdXQgYW5kIGNsb3NlXG4gICAgbGV0IHByb3BzQW5kTGF5b3V0OiB7IGxheW91dDogYW55LCBzYXZlZFByb3BzOiBhbnkgfSB8IG51bGwgPSBudWxsO1xuICAgIHByb3BzQW5kTGF5b3V0ID0gYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCwgY2hhbmdlT3B0aW9uc1NhdmVMYXlvdXQpO1xuICAgIGlmIChvcHRpb25zPy5hd2FpdFZpZXdlcilcbiAgICAgIHByb3BzQW5kTGF5b3V0ID0gYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCxcbiAgICAgICAgY2hhbmdlT3B0aW9uc1NhdmVMYXlvdXQsIG9wdGlvbnMhLmF3YWl0Vmlld2VyKVxuXG4gICAgLy8zLiBMb2FkIGxheW91dFxuICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld0xheW91dEFwcGxpZWQsIGxvYWRMYXlvdXQsIHVuZGVmaW5lZCwgcHJvcHNBbmRMYXlvdXQ/LmxheW91dCxcbiAgICAgIHsgc2F2ZWRQcm9wczogcHJvcHNBbmRMYXlvdXQ/LnNhdmVkUHJvcHMgfSk7XG4gICAgaWYgKG9wdGlvbnM/LmF3YWl0Vmlld2VyKVxuICAgICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3TGF5b3V0QXBwbGllZCwgbG9hZExheW91dCwgb3B0aW9ucyEuYXdhaXRWaWV3ZXIsXG4gICAgICAgIHByb3BzQW5kTGF5b3V0Py5sYXlvdXQsIHsgc2F2ZWRQcm9wczogcHJvcHNBbmRMYXlvdXQ/LnNhdmVkUHJvcHMgfSk7XG5cbiAgICAvLzQuIE9wZW4gdmlld2VyIG9uIGFyYml0YXJ5IGRhdGFzZXRcbiAgICBpZiAob3B0aW9ucz8uYXJiaXRyYXJ5RGZUZXN0ICE9PSBmYWxzZSkge1xuICAgICAgdHYuZGF0YUZyYW1lID0gY2F0REY7XG4gICAgICBhd2FpdCBkZWxheSg1MCk7XG4gICAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkKTtcbiAgICAgIGlmIChvcHRpb25zPy5hd2FpdFZpZXdlcilcbiAgICAgICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCwgdW5kZWZpbmVkLCBvcHRpb25zIS5hd2FpdFZpZXdlcik7XG4gICAgfVxuXG4gICAgLy81LiBDYWxsIHBvc3Rwb25lZCBmaWx0ZXJpbmdcbiAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkLCBmaWx0ZXJBc3luYyk7XG4gICAgaWYgKG9wdGlvbnM/LmF3YWl0Vmlld2VyKVxuICAgICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCwgZmlsdGVyQXN5bmMsIG9wdGlvbnMhLmF3YWl0Vmlld2VyKTtcblxuICB9IGZpbmFsbHkge1xuICAgIC8vIGNsb3NlQWxsKCkgaXMgaGFuZGxpbmcgYnkgY29tbW9uIHRlc3Qgd29ya2Zsb3dcbiAgICAvLyBncm9rLnNoZWxsLmNsb3NlQWxsKCk7XG4gICAgLy8gREcuQmFsbG9vbi5jbG9zZUFsbCgpO1xuICB9XG59XG4iXX0=
|