@datagrok-libraries/utils 1.12.2 → 1.13.1
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/function-view.d.ts.map +1 -1
- package/src/function-view.js +14 -10
- package/src/history-utils.d.ts.map +1 -1
- package/src/history-utils.js +5 -3
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"function-view.d.ts","sourceRoot":"","sources":["function-view.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"function-view.d.ts","sourceRoot":"","sources":["function-view.ts"],"names":[],"mappings":"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"}
|
package/src/function-view.js
CHANGED
|
@@ -17,6 +17,7 @@ import html2canvas from 'html2canvas';
|
|
|
17
17
|
import wu from 'wu';
|
|
18
18
|
import $ from 'cash-dom';
|
|
19
19
|
import { historyUtils } from './history-utils';
|
|
20
|
+
import { Subject } from 'rxjs';
|
|
20
21
|
/**
|
|
21
22
|
* Decorator to pass all thrown errors to grok.shell.error
|
|
22
23
|
* @returns The actual funccall associated with the view
|
|
@@ -365,10 +366,12 @@ export class FunctionView extends DG.ViewBase {
|
|
|
365
366
|
mainAcc.root.style.width = '100%';
|
|
366
367
|
mainAcc.addTitle(ui.span(['History']));
|
|
367
368
|
const filteringOptions = {};
|
|
369
|
+
const filteringText = new Subject();
|
|
368
370
|
const buildFilterPane = () => ui.wait(() => __awaiter(this, void 0, void 0, function* () {
|
|
369
|
-
const textInput = ui.stringInput('Search', '', (v) =>
|
|
370
|
-
|
|
371
|
-
|
|
371
|
+
const textInput = ui.stringInput('Search', '', (v) => filteringText.next(v));
|
|
372
|
+
DG.debounce(filteringText.asObservable(), 600).subscribe(() => {
|
|
373
|
+
filteringOptions.text = textInput.stringValue;
|
|
374
|
+
updateSharedPane();
|
|
372
375
|
});
|
|
373
376
|
const dateInput = ui.choiceInput('Date started', 'Any time', ['Any time', 'Today', 'Yesterday', 'This week', 'Last week', 'This month', 'Last month', 'This year', 'Last year'], (v) => {
|
|
374
377
|
filteringOptions.date = v;
|
|
@@ -385,7 +388,7 @@ export class FunctionView extends DG.ViewBase {
|
|
|
385
388
|
});
|
|
386
389
|
dateInput.addPatternMenu('datetime');
|
|
387
390
|
const form = ui.divV([
|
|
388
|
-
|
|
391
|
+
textInput,
|
|
389
392
|
dateInput,
|
|
390
393
|
authorInput,
|
|
391
394
|
], 'ui-form-condensed ui-form');
|
|
@@ -463,6 +466,7 @@ export class FunctionView extends DG.ViewBase {
|
|
|
463
466
|
]))
|
|
464
467
|
.onOK(() => __awaiter(this, void 0, void 0, function* () {
|
|
465
468
|
if (title.length > 0) {
|
|
469
|
+
funcCall = yield historyUtils.loadRun(funcCall.id);
|
|
466
470
|
funcCall.options['title'] = title;
|
|
467
471
|
funcCall.options['annotation'] = annotation;
|
|
468
472
|
yield this.addRunToShared(funcCall);
|
|
@@ -623,21 +627,21 @@ export class FunctionView extends DG.ViewBase {
|
|
|
623
627
|
return ui.divV(historyCards);
|
|
624
628
|
});
|
|
625
629
|
const buildSharedList = () => ui.wait(() => __awaiter(this, void 0, void 0, function* () {
|
|
626
|
-
const historicalRuns = yield
|
|
630
|
+
const historicalRuns = yield historyUtils.pullRunsByName(this.func.name, filteringOptions);
|
|
627
631
|
const sharedRuns = historicalRuns.filter((run) => run.options['isShared']);
|
|
628
632
|
if (sharedRuns.length > 0)
|
|
629
633
|
return ui.wait(() => renderSharedCards(sharedRuns));
|
|
630
634
|
else
|
|
631
635
|
return ui.divText('No runs are marked as shared', 'description');
|
|
632
636
|
}));
|
|
633
|
-
let sharedListPane = mainAcc.addPane('Shared', buildSharedList, true);
|
|
637
|
+
let sharedListPane = mainAcc.addPane('Shared', () => buildSharedList(), true);
|
|
634
638
|
const updateSharedPane = () => {
|
|
635
639
|
const isExpanded = sharedListPane.expanded;
|
|
636
640
|
mainAcc.removePane(sharedListPane);
|
|
637
|
-
sharedListPane = mainAcc.addPane('Shared', buildSharedList, isExpanded, favoritesListPane);
|
|
641
|
+
sharedListPane = mainAcc.addPane('Shared', () => buildSharedList(), isExpanded, favoritesListPane);
|
|
638
642
|
};
|
|
639
643
|
const buildFavoritesList = (filterOptions = {}) => ui.wait(() => __awaiter(this, void 0, void 0, function* () {
|
|
640
|
-
const historicalRuns = yield
|
|
644
|
+
const historicalRuns = yield historyUtils.pullRunsByName(this.func.name, filterOptions);
|
|
641
645
|
const favoriteRuns = historicalRuns.filter((run) => run.options['isFavorite'] && !run.options['isImported']);
|
|
642
646
|
if (favoriteRuns.length > 0)
|
|
643
647
|
return ui.wait(() => renderFavoriteCards(favoriteRuns));
|
|
@@ -651,7 +655,7 @@ export class FunctionView extends DG.ViewBase {
|
|
|
651
655
|
favoritesListPane = mainAcc.addPane('My favorites', () => buildFavoritesList(Object.assign(Object.assign({}, filteringOptions), { author: grok.shell.user })), isExpanded, historyPane);
|
|
652
656
|
};
|
|
653
657
|
const buildHistoryPane = (filterOptions = {}) => ui.wait(() => __awaiter(this, void 0, void 0, function* () {
|
|
654
|
-
const historicalRuns = (yield
|
|
658
|
+
const historicalRuns = (yield historyUtils.pullRunsByName(this.func.name, filterOptions));
|
|
655
659
|
if (historicalRuns.length > 0)
|
|
656
660
|
return ui.wait(() => renderHistoryCards(historicalRuns));
|
|
657
661
|
else
|
|
@@ -1198,4 +1202,4 @@ const plotToSheet = (exportWb, sheet, plot, columnForImage, rowForImage = 0) =>
|
|
|
1198
1202
|
ext: { width: canvas.width, height: canvas.height },
|
|
1199
1203
|
});
|
|
1200
1204
|
});
|
|
1201
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tdmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImZ1bmN0aW9uLXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsZ0NBQWdDO0FBQ2hDLDRCQUE0QjtBQUM1QixPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxXQUFXLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLENBQUMsTUFBTSxVQUFVLENBQUM7QUFDekIsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRTdDOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLEVBQUU7SUFDbkMsT0FBTyxDQUFDLE1BQVcsRUFBRSxVQUFrQixFQUFFLFVBQThCLEVBQUUsRUFBRTtRQUN6RSxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO1FBRWxDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsVUFBZSxHQUFHLElBQVc7O2dCQUM5QyxJQUFJO29CQUNGLE9BQU8sTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO2lCQUMzQztnQkFBQyxPQUFPLEdBQVEsRUFBRTtvQkFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUUsR0FBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUN6QyxNQUFNLEdBQUcsQ0FBQztpQkFDWDtZQUNILENBQUM7U0FBQSxDQUFDO0lBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsZ0JBQWdC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Q0FBQyxRQUFRLENBQUM7UUFDaEMsTUFBTSxFQUFFLE9BQU87UUFDZixTQUFTLEVBQUUsS0FBSztLQUNqQixDQUFDLENBQUM7SUFDSCxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRTtRQUN0QixFQUFFLEVBQUUsRUFBQyxHQUFHLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUM7UUFDM0MsR0FBRyxFQUFFLEVBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUM7S0FDbEQsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFBLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSB2YWxpZC1qc2RvYyAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCBFeGNlbEpTIGZyb20gJ2V4Y2VsanMnO1xuaW1wb3J0IGh0bWwyY2FudmFzIGZyb20gJ2h0bWwyY2FudmFzJztcbmltcG9ydCB3dSBmcm9tICd3dSc7XG5pbXBvcnQgJCBmcm9tICdjYXNoLWRvbSc7XG5pbXBvcnQge2hpc3RvcnlVdGlsc30gZnJvbSAnLi9oaXN0b3J5LXV0aWxzJztcblxuLyoqXG4gICAqIERlY29yYXRvciB0byBwYXNzIGFsbCB0aHJvd24gZXJyb3JzIHRvIGdyb2suc2hlbGwuZXJyb3JcbiAgICogQHJldHVybnMgVGhlIGFjdHVhbCBmdW5jY2FsbCBhc3NvY2lhdGVkIHdpdGggdGhlIHZpZXdcbiAgICogQHN0YWJpbGl0eSBFeHBlcmltZW50YWxcbiAqL1xuZXhwb3J0IGNvbnN0IHBhc3NFcnJvclRvU2hlbGwgPSAoKSA9PiB7XG4gIHJldHVybiAodGFyZ2V0OiBhbnksIG1lbWJlck5hbWU6IHN0cmluZywgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB7XG4gICAgY29uc3Qgb3JpZ2luYWwgPSBkZXNjcmlwdG9yLnZhbHVlO1xuXG4gICAgZGVzY3JpcHRvci52YWx1ZSA9IGFzeW5jIGZ1bmN0aW9uKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgb3JpZ2luYWwuY2FsbCh0aGlzLCAuLi5hcmdzKTtcbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGdyb2suc2hlbGwuZXJyb3IoKGVyciBhcyBFcnJvcikubWVzc2FnZSk7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IElOVEVSQUNUSVZFX0NTU19DTEFTUyA9ICdjdi1pbnRlcmFjdGl2ZSc7XG5cbmV4cG9ydCB0eXBlIERhdGVPcHRpb25zID0gJ0FueSB0aW1lJyB8ICdUb2RheScgfCAnWWVzdGVyZGF5JyB8ICdUaGlzIHdlZWsnIHwgJ0xhc3Qgd2VlaycgfCAnVGhpcyBtb250aCcgfCAnTGFzdCBtb250aCcgfCAnVGhpcyB5ZWFyJyB8ICdMYXN0IHllYXInO1xuXG5leHBvcnQgdHlwZSBGaWx0ZXJPcHRpb25zID0ge1xuICB0ZXh0Pzogc3RyaW5nLFxuICBkYXRlPzogRGF0ZU9wdGlvbnMsXG4gIGF1dGhvcj86IERHLlVzZXIsXG4gIGlzU2hhcmVkPzogYm9vbGVhbixcbn07XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0VXNlcnNJZHMgPSB7XG4gICdUZXN0JzogJ2NhMWU2NzJlLWUzYmUtNDBlMC1iNzliLWQyYzY4ZTY4ZDM4MCcsXG4gICdBZG1pbic6ICc4NzhjNDJiMC05YTUwLTExZTYtYzUzNy02YmY4ZTlhYjAyZWUnLFxuICAnU3lzdGVtJzogJzNlMzJjNWZhLWFjOWMtNGQzOS04YjRiLTRkYjNlNTc2YjNjMycsXG59O1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdEdyb3Vwc0lkcyA9IHtcbiAgJ0FsbCB1c2Vycyc6ICdhNGI0NTg0MC05YTUwLTExZTYtOWNjOS04NTQ2YjhiZjYyZTYnLFxuICAnRGV2ZWxvcGVycyc6ICdiYTljZDE5MS05YTUwLTExZTYtOWNjOS05MTBiZjgyN2YwYWInLFxuICAnTmVlZCB0byBjcmVhdGUnOiAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJyxcbiAgJ1Rlc3QnOiAnY2ExZTY3MmUtZTNiZS00MGUwLWI3OWItODU0NmI4YmY2MmU2JyxcbiAgJ0FkbWluJzogJ2E0YjQ1ODQwLTlhNTAtMTFlNi1jNTM3LTZiZjhlOWFiMDJlZScsXG4gICdTeXN0ZW0nOiAnYTRiNDU4NDAtYWM5Yy00ZDM5LThiNGItNGRiM2U1NzZiM2MzJyxcbiAgJ0FkbWluaXN0cmF0b3JzJzogJzFhYjhiMzhkLTljNGUtNGIxZS04MWMzLWFlMmJkZTNlMTJjNScsXG59O1xuXG5leHBvcnQgY2xhc3MgRnVuY3Rpb25WaWV3IGV4dGVuZHMgREcuVmlld0Jhc2Uge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29udGV4dDogREcuQ29udGV4dDtcbiAgcHJvdGVjdGVkIF9mdW5jQ2FsbD86IERHLkZ1bmNDYWxsO1xuICBwcm90ZWN0ZWQgX2xhc3RDYWxsPzogREcuRnVuY0NhbGw7XG4gIHByb3RlY3RlZCBfdHlwZTogc3RyaW5nID0gJ2Z1bmN0aW9uJztcblxuICBjb25zdHJ1Y3RvcihmdW5jQ2FsbD86IERHLkZ1bmNDYWxsKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmJveCA9IHRydWU7XG4gICAgdGhpcy5jb250ZXh0ID0gREcuQ29udGV4dC5jbG9uZURlZmF1bHQoKTtcblxuICAgIGlmICghZnVuY0NhbGwpIHJldHVybjtcblxuICAgIHRoaXMuYmFzZVBhdGggPSBgLyR7ZnVuY0NhbGwuZnVuYy5uYW1lfWA7XG4gICAgdGhpcy5saW5rRnVuY2NhbGwoZnVuY0NhbGwpO1xuICAgIHRoaXMuaW5pdCgpO1xuICAgIHRoaXMuYnVpbGQoKTtcbiAgICB0aGlzLm5hbWUgPSBmdW5jQ2FsbC5mdW5jLmZyaWVuZGx5TmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCBmdW5jdGlvbiBjYWxsIG9mIHRoZSB2aWV3XG4gICAqIEByZXR1cm5zIFRoZSBhY3R1YWwgZnVuY2NhbGwgYXNzb2NpYXRlZCB3aXRoIHRoZSB2aWV3XG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGdldCBmdW5jQ2FsbCgpOiBERy5GdW5jQ2FsbCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2Z1bmNDYWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBGdW5jIG9mIHRoZSB2aWV3XG4gICAqIEByZXR1cm5zIFRoZSBhY3R1YWwgZnVuYyBhc3NvY2lhdGVkIHdpdGggdGhlIHZpZXdcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBnZXQgZnVuYygpIHtcbiAgICByZXR1cm4gdGhpcy5mdW5jQ2FsbD8uZnVuYztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGF0YSBvZiBsYXN0IGNhbGwgb2YgYXNzb2NpYXRlZCBmdW5jdGlvblxuICAgKiBAcmV0dXJucyBUaGUgYWN0dWFsIGZ1bmMgYXNzb2NpYXRlZCB3aXRoIHRoZSB2aWV3XG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgZ2V0IGxhc3RDYWxsKCkge1xuICAgIHJldHVybiB0aGlzLl9sYXN0Q2FsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZGF0YSBvZiBsYXN0IGNhbGwgb2YgYXNzb2NpYXRlZCBmdW5jdGlvblxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHNldCBsYXN0Q2FsbChsYXN0Q2FsbDogREcuRnVuY0NhbGwgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9sYXN0Q2FsbCA9IGxhc3RDYWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFZpZXcgdHlwZVxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBnZXQgdHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90eXBlO1xuICB9XG5cbiAgLyoqIEV4cG9ydCBvcHRpb25zLiBDb3VsZCBiZSBvdmVycmlkZW4gcGFydGlhbGx5LCB1c2luZyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIGVhY2ggb3B0aW9uLlxuICAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAgKi9cbiAgZXhwb3J0Q29uZmlnOiB7XG4gICAgLyoqIE92ZXJyaWRlIHRvIHByb3ZpZGUgY3VzdG9tIGV4cG9ydCBsb2dpYy5cbiAgICAgICpcbiAgICAgICogIERlZmF1bHQgaW1wbGVtZW50YXRpb24ge0BsaW5rIGRlZmF1bHRFeHBvcnR9IGhlYXZpbHkgcmVsaWVzIG9uIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBidWlsZElPfS5cbiAgICAgICogQHJldHVybnMgQmxvYiB3aXRoIGRhdGEgdG8gYmUgZXhwb3J0ZWQgaW50byB0aGUgZmlsZS5cbiAgICAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAgICAqL1xuICAgIGV4cG9ydDogKChmb3JtYXQ6IHN0cmluZykgPT4gUHJvbWlzZTxCbG9iPik7XG5cblxuICAgIC8qKiBGaWxlbmFtZSBmb3IgZXhwb3J0ZWQgZmlsZXMuIE92ZXJyaWRlIGZvciBjdXN0b20gZmlsZW5hbWVzLlxuICAgICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIHtAbGluayBkZWZhdWx0RXhwb3J0RmlsZW5hbWV9XG4gICAgICAqIEBwYXJhbSBmb3JtYXQgRm9ybWF0IG5hbWUgdG8gYmUgZXhwb3J0ZWRcbiAgICAgICogQHJldHVybnMgVGhlIGFjdHVhbCBmaWxlbmFtZSB0byBiZSB1c2VkIGZvciB0aGUgZ2VuZXJhdGVkIGZpbGUuXG4gICAgICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gICAgKi9cbiAgICBmaWxlbmFtZTogKChmb3JtYXQ6IHN0cmluZykgPT4gc3RyaW5nKTtcblxuICAgIC8qKiBPdmVycmlkZSB0byBwcm92aWRlIGN1c3RvbSBsaXN0IG9mIHN1cHBvcnRlZCBleHBvcnQgZm9ybWF0cy5cbiAgICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIHtAbGluayBkZWZhdWx0U3VwcG9ydGVkRXhwb3J0Rm9ybWF0c31cbiAgICAgKiBUaGVzZSBmb3JtYXRzIGFyZSBhdmFpbGFibGUgdW5kZXIgdGhlIFwiRXhwb3J0XCIgcG9wdXAgb24gdGhlIHJpYmJvbiBwYW5lbC5cbiAgICAgKiBAcmV0dXJucyBUaGUgYXJyYXkgb2YgZm9ybWF0cyBhdmFpbGFibGUgZm9yIHRoZSBleHBvcnQuXG4gICAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAgICAqL1xuICAgIHN1cHBvcnRlZEZvcm1hdHM6IHN0cmluZ1tdO1xuXG4gICAgLyoqIE92ZXJyaWRlIHRvIHByb3ZpZGUgY3VzdG9tIGZpbGUgZXh0ZW5zaW9ucyBmb3IgZXhwb3J0ZWQgZm9ybWF0cy5cbiAgICAgICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMge0BsaW5rIGRlZmF1bHRTdXBwb3J0ZWRFeHBvcnRFeHRlbnNpb25zfVxuICAgICAgICogVGhlc2UgZXh0ZW5zaW9ucyBhcmUgdXNlZCBpbiBmaWxlbmFtZXMge0BsaW5rIGV4cG9ydEZpbGVuYW1lfS5cbiAgICAgICAqIEByZXR1cm5zIFRoZSBtYXBwaW5nIGJldHdlZW4gc3VwcG9ydGVkIGV4cG9ydCBmb3JtYXRzIGFuZCB0aGVpciBleHRlbnNpb25zLlxuICAgICAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAgICAgKi9cbiAgICBzdXBwb3J0ZWRFeHRlbnNpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICB9IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIExpbmsgRnVuY0NhbGwgdG8gdGhlIHZpZXdcbiAgICogQHBhcmFtIGZ1bmNDYWxsIFRoZSBhY3R1YWwgZnVuY2NhbGwgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB2aWV3XG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGxpbmtGdW5jY2FsbChmdW5jQ2FsbDogREcuRnVuY0NhbGwpIHtcbiAgICBjb25zdCBpc1ByZXZpb3VzSGlzdG9yaWNhbCA9IHRoaXMuX2Z1bmNDYWxsPy5vcHRpb25zWydpc0hpc3RvcmljYWwnXTtcbiAgICB0aGlzLl9mdW5jQ2FsbCA9IGZ1bmNDYWxsO1xuXG4gICAgaWYgKGZ1bmNDYWxsLm9wdGlvbnNbJ2lzSGlzdG9yaWNhbCddKSB7XG4gICAgICBpZiAoIWlzUHJldmlvdXNIaXN0b3JpY2FsKSB7XG4gICAgICAgIHRoaXMubmFtZSA9IGAke3RoaXMubmFtZX0g4oCUICR7ZnVuY0NhbGwub3B0aW9uc1sndGl0bGUnXSA/PyBuZXcgRGF0ZShmdW5jQ2FsbC5zdGFydGVkLnRvU3RyaW5nKCkpLnRvTG9jYWxlU3RyaW5nKCdlbi11cycsIHttb250aDogJ3Nob3J0JywgZGF5OiAnbnVtZXJpYycsIGhvdXI6ICdudW1lcmljJywgbWludXRlOiAnbnVtZXJpYyd9KX1gO1xuICAgICAgICB0aGlzLnNldFJ1blZpZXdSZWFkb25seSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5uYW1lID0gYCR7dGhpcy5uYW1lLnN1YnN0cmluZygwLCB0aGlzLm5hbWUuaW5kZXhPZignIOKAlCAnKSl9IOKAlCAke2Z1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ10gPz8gbmV3IERhdGUoZnVuY0NhbGwuc3RhcnRlZC50b1N0cmluZygpKS50b0xvY2FsZVN0cmluZygnZW4tdXMnLCB7bW9udGg6ICdzaG9ydCcsIGRheTogJ251bWVyaWMnLCBob3VyOiAnbnVtZXJpYycsIG1pbnV0ZTogJ251bWVyaWMnfSl9YDtcbiAgICAgIH1cblxuICAgICAgLy8gRklYIE1FOiB2aWV3IG5hbWUgZG9lcyBub3QgY2hhbmdlIGluIG1vZGVsc1xuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignZGl2LmQ0LXJpYmJvbi1uYW1lJyk/LnJlcGxhY2VDaGlsZHJlbih1aS5zcGFuKFt0aGlzLm5hbWVdKSk7XG4gICAgICB0aGlzLnBhdGggPSBgP2lkPSR7dGhpcy5fZnVuY0NhbGwuaWR9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRSdW5WaWV3RWRpdGFibGUoKTtcbiAgICAgIHRoaXMucGF0aCA9IGBgO1xuXG4gICAgICBpZiAoaXNQcmV2aW91c0hpc3RvcmljYWwpXG4gICAgICAgIHRoaXMubmFtZSA9IGAke3RoaXMubmFtZS5zdWJzdHJpbmcoMCwgdGhpcy5uYW1lLmluZGV4T2YoJyDigJQgJykpfWA7XG4gICAgfVxuICAgIHRoaXMuYnVpbGRSaWJib25QYW5lbHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgZm9yIGN1c3RvbSBsb2dpYyB0aGF0IGNvdWxkIG5vdCBiZSBwbGFjZWQgaW4gdGhlIGNvbnN0cnVjdG9yLlxuICAgKiBBbnkgYXN5bmMgbWV0aG9kcyBhbmQgbW9zdCBvZiB0aGUgbG9naWMgc2hvdWxkIGJlIHBsYWNlZCBoZXJlLlxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBhc3luYyBpbml0KCkge1xuICAgIGlmICh0aGlzLmZ1bmNDYWxsICYmIHRoaXMuZnVuYykge1xuICAgICAgdGhpcy5mdW5jQ2FsbC5hdXhbJ3ZpZXcnXSA9IHRoaXM7XG4gICAgICB0aGlzLmZ1bmNDYWxsLmNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG5cbiAgICAgIGZvciAoY29uc3QgaW5QYXJhbSBvZiB3dSh0aGlzLmZ1bmNDYWxsLmlucHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSlcbiAgICAgICAgLmZpbHRlcigocDogREcuRnVuY0NhbGxQYXJhbSkgPT5cbiAgICAgICAgICBwLnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PSBERy5UWVBFLkRBVEFfRlJBTUUgJiYgcC5wcm9wZXJ0eS5vcHRpb25zWyd2aWV3ZXInXSAhPSBudWxsKSkge1xuICAgICAgICB0aGlzLnN1YnMucHVzaChpblBhcmFtLm9uQ2hhbmdlZC5zdWJzY3JpYmUoYXN5bmMgKHBhcmFtOiBERy5GdW5jQ2FsbFBhcmFtKSA9PiB7XG4gICAgICAgICAgdGhpcy5jbGVhclJlc3VsdHMoZmFsc2UpO1xuICAgICAgICAgIHBhcmFtLnByb2Nlc3NPdXRwdXQoKTtcblxuICAgICAgICAgIHRoaXMuYXBwZW5kT3V0cHV0RGYocGFyYW0sIHtcbiAgICAgICAgICAgIGhlaWdodDogNDAwLFxuICAgICAgICAgICAgY2F0ZWdvcnk6ICdJbnB1dCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0byBjcmVhdGUgYSBmdWxseSBjdXN0b20gVUkgaW5jbHVkaW5nIHJpYmJvbiBtZW51cyBhbmQgcGFuZWxzXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGJ1aWxkKCk6IHZvaWQge1xuICAgIHRoaXMucm9vdC5hcHBlbmRDaGlsZCh0aGlzLmJ1aWxkSU8oKSk7XG4gICAgdGhpcy5yb290LmFwcGVuZENoaWxkKHRoaXMub3ZlcmxheURpdik7XG5cbiAgICB0aGlzLmJ1aWxkSGlzdG9yeUJsb2NrKCk7XG4gICAgdGhpcy5idWlsZFJpYmJvbk1lbnUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0byBjcmVhdGUgYSBjdXN0b20gaW5wdXQtb3V0cHV0IGJsb2NrXG4gICAqIEByZXR1cm5zIFRoZSBIVE1MRWxlbWVudCB3aXRoIHdob2xlIFVJIGV4Y2x1ZGluZyByaWJib24gbWVudXMgYW5kIHBhbmVsc1xuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBidWlsZElPKCk6IEhUTUxFbGVtZW50IHtcbiAgICB0aGlzLmV4cG9ydENvbmZpZyA9IHtcbiAgICAgIHN1cHBvcnRlZEV4dGVuc2lvbnM6IHRoaXMuZGVmYXVsdFN1cHBvcnRlZEV4cG9ydEV4dGVuc2lvbnMoKSxcbiAgICAgIHN1cHBvcnRlZEZvcm1hdHM6IHRoaXMuZGVmYXVsdFN1cHBvcnRlZEV4cG9ydEZvcm1hdHMoKSxcbiAgICAgIGV4cG9ydDogdGhpcy5kZWZhdWx0RXhwb3J0LFxuICAgICAgZmlsZW5hbWU6IHRoaXMuZGVmYXVsdEV4cG9ydEZpbGVuYW1lLFxuICAgIH07XG5cbiAgICBjb25zdCBpbnB1dEJsb2NrID0gdGhpcy5idWlsZElucHV0QmxvY2soKTtcbiAgICBjb25zdCBvdXRwdXRCbG9jayA9IHRoaXMuYnVpbGRPdXRwdXRCbG9jaygpO1xuXG4gICAgcmV0dXJuIHVpLnNwbGl0SChbaW5wdXRCbG9jaywgb3V0cHV0QmxvY2tdKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRvIGNyZWF0ZSBhIGN1c3RvbSBpbnB1dCBibG9ja1xuICAgKiBAcmV0dXJucyBUaGUgSFRNTEVsZW1lbnQgd2l0aCBpbnB1dCBibG9jayBVSSBvbiB0aGUgbGVmdCBzaWRlIGJ5IGRlZmF1bHRcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYnVpbGRJbnB1dEJsb2NrKCk6IEhUTUxFbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuZnVuY0NhbGwpIHJldHVybiB0aGlzLmNvbnRyb2xzUm9vdDtcblxuICAgIGNvbnN0IGZ1bmNEaXYgPSB1aS5kaXYoW3RoaXMucmVuZGVyUnVuU2VjdGlvbih0aGlzLmZ1bmNDYWxsKV0sICd1aS1kaXYnKTtcbiAgICB1aS5lbXB0eSh0aGlzLmNvbnRyb2xzUm9vdCk7XG4gICAgdGhpcy5jb250cm9sc1Jvb3QuYXBwZW5kQ2hpbGQoZnVuY0Rpdik7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbHNSb290O1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRvIGNyZWF0ZSBhIGN1c3RvbSBvdXRwdXQgYmxvY2suXG4gICAqIEByZXR1cm5zIFRoZSBIVE1MRWxlbWVudCB3aXRoIGlucHV0IGJsb2NrIFVJIG9uIHRoZSBsZWZ0IHNpZGUgYnkgZGVmYXVsdFxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBidWlsZE91dHB1dEJsb2NrKCk6IEhUTUxFbGVtZW50IHtcbiAgICB1aS5lbXB0eSh0aGlzLnJlc3VsdHNSb290KTtcbiAgICB0aGlzLnJlc3VsdHNSb290LmFwcGVuZENoaWxkKHRoaXMucmVzdWx0c0Rpdik7XG4gICAgcmV0dXJuIHRoaXMucmVzdWx0c1Jvb3Q7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgdG8gY3JlYXRlIGEgY3VzdG9tIGhpc3RvcmljYWwgcnVucyBjb250cm9sLlxuICAgKiBAcmV0dXJucyBUaGUgSFRNTEVsZW1lbnQgd2l0aCBoaXN0b3J5IGJsb2NrIFVJXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGJ1aWxkSGlzdG9yeUJsb2NrKCk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBtYWluQWNjID0gdWkuYWNjb3JkaW9uKCk7XG4gICAgbWFpbkFjYy5yb290LnN0eWxlLndpZHRoID0gJzEwMCUnO1xuICAgIG1haW5BY2MuYWRkVGl0bGUodWkuc3BhbihbJ0hpc3RvcnknXSkpO1xuXG4gICAgY29uc3QgZmlsdGVyaW5nT3B0aW9uczogRmlsdGVyT3B0aW9ucyA9IHt9O1xuXG4gICAgY29uc3QgYnVpbGRGaWx0ZXJQYW5lID0gKCkgPT4gdWkud2FpdChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0ZXh0SW5wdXQgPSB1aS5zdHJpbmdJbnB1dCgnU2VhcmNoJywgJycsICh2OiBzdHJpbmcpID0+IHtcbiAgICAgICAgZmlsdGVyaW5nT3B0aW9ucy50ZXh0ID0gdjtcbiAgICAgICAgdXBkYXRlSGlzdG9yeVBhbmUoZmlsdGVyaW5nT3B0aW9ucyk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRhdGVJbnB1dCA9IHVpLmNob2ljZUlucHV0KCdEYXRlIHN0YXJ0ZWQnLCAnQW55IHRpbWUnLCBbJ0FueSB0aW1lJywgJ1RvZGF5JywgJ1llc3RlcmRheScsICdUaGlzIHdlZWsnLCAnTGFzdCB3ZWVrJywgJ1RoaXMgbW9udGgnLCAnTGFzdCBtb250aCcsICdUaGlzIHllYXInLCAnTGFzdCB5ZWFyJ10sICh2OiBEYXRlT3B0aW9ucykgPT4ge1xuICAgICAgICBmaWx0ZXJpbmdPcHRpb25zLmRhdGUgPSB2O1xuICAgICAgICB1cGRhdGVIaXN0b3J5UGFuZShmaWx0ZXJpbmdPcHRpb25zKTtcbiAgICAgICAgdXBkYXRlRmF2b3JpdGVzUGFuZSgpO1xuICAgICAgICB1cGRhdGVTaGFyZWRQYW5lKCk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgZGVmYXVsdFVzZXJzID0gT2JqZWN0LnZhbHVlcyhkZWZhdWx0VXNlcnNJZHMpO1xuICAgICAgY29uc3QgYWxsVXNlcnMgPSBhd2FpdCBncm9rLmRhcGkudXNlcnMubGlzdCgpO1xuICAgICAgY29uc3QgZmlsdGVyZWRVc2VycyA9IGFsbFVzZXJzLmZpbHRlcigodXNlcikgPT4gIWRlZmF1bHRVc2Vycy5pbmNsdWRlcyh1c2VyLmlkKSk7XG5cbiAgICAgIGNvbnN0IGF1dGhvcklucHV0ID0gdWkuY2hvaWNlSW5wdXQ8REcuVXNlciB8IHN0cmluZz4oJ0F1dGhvcicsICdBbnlvbmUnLCBbJ0FueW9uZScsIC4uLmZpbHRlcmVkVXNlcnNdLCAodjogREcuVXNlciB8IHN0cmluZykgPT4ge1xuICAgICAgICBmaWx0ZXJpbmdPcHRpb25zLmF1dGhvciA9ICh2ID09PSAnQW55b25lJykgPyB1bmRlZmluZWQgOiB2IGFzIERHLlVzZXI7XG4gICAgICAgIHVwZGF0ZVNoYXJlZFBhbmUoKTtcbiAgICAgIH0pO1xuICAgICAgZGF0ZUlucHV0LmFkZFBhdHRlcm5NZW51KCdkYXRldGltZScpO1xuICAgICAgY29uc3QgZm9ybSA9IHVpLmRpdlYoW1xuICAgICAgICAvLyB0ZXh0SW5wdXQsXG4gICAgICAgIGRhdGVJbnB1dCxcbiAgICAgICAgYXV0aG9ySW5wdXQsXG4gICAgICBdLCAndWktZm9ybS1jb25kZW5zZWQgdWktZm9ybScpO1xuICAgICAgZm9ybS5zdHlsZS5tYXJnaW5MZWZ0ID0gJzBweCc7XG5cbiAgICAgIHJldHVybiBmb3JtO1xuICAgIH0pO1xuICAgIGxldCBmaWx0ZXJQYW5lID0gbWFpbkFjYy5hZGRQYW5lKCdGaWx0ZXInLCBidWlsZEZpbHRlclBhbmUpO1xuICAgIGNvbnN0IHVwZGF0ZUZpbHRlclBhbmUgPSAoKSA9PiB7XG4gICAgICBjb25zdCBpc0V4cGFuZGVkID0gZmlsdGVyUGFuZS5leHBhbmRlZDtcbiAgICAgIG1haW5BY2MucmVtb3ZlUGFuZShmaWx0ZXJQYW5lKTtcbiAgICAgIGZpbHRlclBhbmUgPSBtYWluQWNjLmFkZFBhbmUoJ0ZpbHRlcicsIGJ1aWxkRmlsdGVyUGFuZSwgaXNFeHBhbmRlZCwgZmF2b3JpdGVzTGlzdFBhbmUpO1xuICAgIH07XG5cbiAgICBjb25zdCBzaG93QWRkVG9GYXZvcml0ZXNEaWFsb2cgPSAoZnVuY0NhbGw6IERHLkZ1bmNDYWxsKSA9PiB7XG4gICAgICBsZXQgdGl0bGUgPSBmdW5jQ2FsbC5vcHRpb25zWyd0aXRsZSddID8/ICcnO1xuICAgICAgbGV0IGFubm90YXRpb24gPSBmdW5jQ2FsbC5vcHRpb25zWydhbm5vdGF0aW9uJ10gPz8gJyc7XG4gICAgICBjb25zdCB0aXRsZUlucHV0ID0gdWkuc3RyaW5nSW5wdXQoJ1RpdGxlJywgdGl0bGUsIChzOiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGl0bGUgPSBzO1xuICAgICAgICBpZiAocy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aXRsZUlucHV0LnNldFRvb2x0aXAoJ1RpdGxlIGNhbm5vdCBiZSBlbXB0eScpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGl0bGVJbnB1dC5pbnB1dC5jbGFzc0xpc3QuYWRkKCdkNC1pbnZhbGlkJyksIDEwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGl0bGVJbnB1dC5zZXRUb29sdGlwKCcnKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRpdGxlSW5wdXQuaW5wdXQuY2xhc3NMaXN0LnJlbW92ZSgnZDQtaW52YWxpZCcpLCAxMDApO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdWkuZGlhbG9nKHt0aXRsZTogJ0FkZCB0byBmYXZvcml0ZXMnfSlcbiAgICAgICAgLmFkZCh1aS5mb3JtKFtcbiAgICAgICAgICB0aXRsZUlucHV0LFxuICAgICAgICAgIHVpLnN0cmluZ0lucHV0KCdBbm5vdGF0aW9uJywgYW5ub3RhdGlvbiwgKHM6IHN0cmluZykgPT4geyBhbm5vdGF0aW9uID0gczsgfSksXG4gICAgICAgIF0pKVxuICAgICAgICAub25PSyhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpdGxlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZ1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ10gPSB0aXRsZTtcbiAgICAgICAgICAgIGZ1bmNDYWxsLm9wdGlvbnNbJ2Fubm90YXRpb24nXSA9IGFubm90YXRpb247XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkZFJ1blRvRmF2b3JpdGVzKGZ1bmNDYWxsKTtcbiAgICAgICAgICAgIHVwZGF0ZUhpc3RvcnlQYW5lKCk7XG4gICAgICAgICAgICB1cGRhdGVGYXZvcml0ZXNQYW5lKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdyb2suc2hlbGwud2FybmluZygnVGl0bGUgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuc2hvdyh7Y2VudGVyOiB0cnVlfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNob3dEZWxldGVSdW5EaWFsb2cgPSAoZnVuY0NhbGw6IERHLkZ1bmNDYWxsKSA9PiB7XG4gICAgICB1aS5kaWFsb2coe3RpdGxlOiAnRGVsZXRlIHJ1bid9KVxuICAgICAgICAuYWRkKHVpLmRpdlRleHQoJ1RoZSBkZWxldGVkIHJ1biBpcyBpbXBvc3NpYmxlIHRvIHJlc3RvcmUuIEFyZSB5b3Ugc3VyZT8nKSlcbiAgICAgICAgLm9uT0soYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlUnVuKGZ1bmNDYWxsKTtcbiAgICAgICAgICB1cGRhdGVIaXN0b3J5UGFuZSgpO1xuICAgICAgICB9KVxuICAgICAgICAuc2hvdyh7Y2VudGVyOiB0cnVlfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNob3dBZGRUb1NoYXJlZERpYWxvZyA9IChmdW5jQ2FsbDogREcuRnVuY0NhbGwpID0+IHtcbiAgICAgIGxldCB0aXRsZSA9IGZ1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ10gPz8gJyc7XG4gICAgICBsZXQgYW5ub3RhdGlvbiA9IGZ1bmNDYWxsLm9wdGlvbnNbJ2Fubm90YXRpb24nXSA/PyAnJztcbiAgICAgIGNvbnN0IHRpdGxlSW5wdXQgPSB1aS5zdHJpbmdJbnB1dCgnVGl0bGUnLCB0aXRsZSwgKHM6IHN0cmluZykgPT4ge1xuICAgICAgICB0aXRsZSA9IHM7XG4gICAgICAgIGlmIChzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRpdGxlSW5wdXQuc2V0VG9vbHRpcCgnVGl0bGUgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aXRsZUlucHV0LmlucHV0LmNsYXNzTGlzdC5hZGQoJ2Q0LWludmFsaWQnKSwgMTAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aXRsZUlucHV0LnNldFRvb2x0aXAoJycpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGl0bGVJbnB1dC5pbnB1dC5jbGFzc0xpc3QucmVtb3ZlKCdkNC1pbnZhbGlkJyksIDEwMCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB1aS5kaWFsb2coe3RpdGxlOiAnQWRkIHRvIHNoYXJlZCd9KVxuICAgICAgICAuYWRkKHVpLmZvcm0oW1xuICAgICAgICAgIHRpdGxlSW5wdXQsXG4gICAgICAgICAgdWkuc3RyaW5nSW5wdXQoJ0Fubm90YXRpb24nLCBhbm5vdGF0aW9uLCAoczogc3RyaW5nKSA9PiB7IGFubm90YXRpb24gPSBzOyB9KSxcbiAgICAgICAgXSkpXG4gICAgICAgIC5vbk9LKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBpZiAodGl0bGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZnVuY0NhbGwub3B0aW9uc1sndGl0bGUnXSA9IHRpdGxlO1xuICAgICAgICAgICAgZnVuY0NhbGwub3B0aW9uc1snYW5ub3RhdGlvbiddID0gYW5ub3RhdGlvbjtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYWRkUnVuVG9TaGFyZWQoZnVuY0NhbGwpO1xuICAgICAgICAgICAgdXBkYXRlSGlzdG9yeVBhbmUoKTtcbiAgICAgICAgICAgIHVwZGF0ZUZhdm9yaXRlc1BhbmUoKTtcbiAgICAgICAgICAgIHVwZGF0ZVNoYXJlZFBhbmUoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ3Jvay5zaGVsbC53YXJuaW5nKCdUaXRsZSBjYW5ub3QgYmUgZW1wdHknKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5zaG93KHtjZW50ZXI6IHRydWV9KTtcbiAgICB9O1xuXG4gICAgbGV0IGhpc3RvcnlDYXJkcyA9IFtdIGFzIEhUTUxFbGVtZW50W107XG4gICAgbGV0IGZhdm9yaXRlQ2FyZHMgPSBbXSBhcyBIVE1MRWxlbWVudFtdO1xuICAgIGxldCBzaGFyZWRDYXJkcyA9IFtdIGFzIEhUTUxFbGVtZW50W107XG4gICAgY29uc3QgcmVuZGVyRmF2b3JpdGVDYXJkcyA9IGFzeW5jIChmdW5jQ2FsbHM6IERHLkZ1bmNDYWxsW10pID0+IHtcbiAgICAgIGZhdm9yaXRlQ2FyZHMgPSBmdW5jQ2FsbHMubWFwKChmdW5jQ2FsbCkgPT4ge1xuICAgICAgICBjb25zdCB1bnN0YXJJY29uID0gdWkuaWNvbkZBKCdzdGFyJywgYXN5bmMgKGV2KSA9PiB7XG4gICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVSdW5Gcm9tRmF2b3JpdGVzKGZ1bmNDYWxsKTtcbiAgICAgICAgICB1cGRhdGVIaXN0b3J5UGFuZSgpO1xuICAgICAgICAgIHVwZGF0ZUZhdm9yaXRlc1BhbmUoKTtcbiAgICAgICAgfSwgJ1VuZmF2b3JpdGUgdGhlIHJ1bicpO1xuICAgICAgICB1bnN0YXJJY29uLmNsYXNzTGlzdC5hZGQoJ2ZhcycpO1xuXG4gICAgICAgIGNvbnN0IHNoYXJlSWNvbiA9IHVpLmljb25GQSgnZXllJywgYXN5bmMgKGV2KSA9PiB7XG4gICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgc2hvd0FkZFRvU2hhcmVkRGlhbG9nKGZ1bmNDYWxsKTtcbiAgICAgICAgfSwgJ0FkZCB0byBzaGFyZWQnKTtcbiAgICAgICAgc2hhcmVJY29uLmNsYXNzTGlzdC5hZGQoJ2ZhbCcpO1xuXG4gICAgICAgIGNvbnN0IGNhcmQgPSB1aS5kaXZIKFtcbiAgICAgICAgICB1aS5kaXZWKFtcbiAgICAgICAgICAgIHVpLmRpdlRleHQoZnVuY0NhbGwub3B0aW9uc1sndGl0bGUnXSA/PyAnRGVmYXVsdCB0aXRsZScsICd0aXRsZScpLFxuICAgICAgICAgICAgLi4uKGZ1bmNDYWxsLm9wdGlvbnNbJ2Fubm90YXRpb24nXSkgPyBbdWkuZGl2VGV4dChmdW5jQ2FsbC5vcHRpb25zWydhbm5vdGF0aW9uJ10sICdkZXNjcmlwdGlvbicpXTogW10sXG4gICAgICAgICAgICB1aS5kaXZIKFt1aS5yZW5kZXIoZnVuY0NhbGwuYXV0aG9yKSwgdWkuc3BhbihbbmV3IERhdGUoZnVuY0NhbGwuc3RhcnRlZC50b1N0cmluZygpKS50b0xvY2FsZVN0cmluZygnZW4tdXMnLCB7bW9udGg6ICdzaG9ydCcsIGRheTogJ251bWVyaWMnLCBob3VyOiAnbnVtZXJpYycsIG1pbnV0ZTogJ251bWVyaWMnfSldLCAnZGF0ZScpXSksXG4gICAgICAgICAgXSksXG4gICAgICAgICAgdWkuZGl2SChbXG4gICAgICAgICAgICBzaGFyZUljb24sXG4gICAgICAgICAgICB1aS5pY29uRkEoJ3BlbicsIGFzeW5jIChldikgPT4ge1xuICAgICAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgc2hvd0FkZFRvRmF2b3JpdGVzRGlhbG9nKGZ1bmNDYWxsKTtcbiAgICAgICAgICAgIH0sICdFZGl0IHJ1biBtZXRhZGF0YScpLFxuICAgICAgICAgICAgdW5zdGFySWNvblxuICAgICAgICAgIF0sICdjdi1mdW5jY2FsbC1jYXJkLWljb25zJylcbiAgICAgICAgXSwgJ2N2LWZ1bmNjYWxsLWNhcmQnKTtcblxuICAgICAgICBjYXJkLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcih0aGlzLnJvb3QsIHRydWUpO1xuICAgICAgICAgIHRoaXMubGlua0Z1bmNjYWxsKGF3YWl0IHRoaXMubG9hZFJ1bihmdW5jQ2FsbC5pZCkpO1xuICAgICAgICAgIGNhcmQuY2xhc3NMaXN0LmFkZCgnY2xpY2tlZCcpO1xuICAgICAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcih0aGlzLnJvb3QsIGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjYXJkO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGFsbENhcmRzID0gWy4uLmhpc3RvcnlDYXJkcywgLi4uZmF2b3JpdGVDYXJkcywgLi4uc2hhcmVkQ2FyZHNdO1xuICAgICAgYWxsQ2FyZHMuZm9yRWFjaCgoY2FyZCkgPT4gY2FyZC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IGFsbENhcmRzLmZvckVhY2goKGMpID0+IGMuY2xhc3NMaXN0LnJlbW92ZSgnY2xpY2tlZCcpKSkpO1xuXG4gICAgICByZXR1cm4gdWkuZGl2VihmYXZvcml0ZUNhcmRzKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVuZGVyU2hhcmVkQ2FyZHMgPSBhc3luYyAoZnVuY0NhbGxzOiBERy5GdW5jQ2FsbFtdKSA9PiB7XG4gICAgICBzaGFyZWRDYXJkcyA9IGZ1bmNDYWxscy5tYXAoKGZ1bmNDYWxsKSA9PiB7XG4gICAgICAgIGNvbnN0IHVuc2hhcmVJY29uID0gdWkuaWNvbkZBKCdleWUtc2xhc2gnLCBhc3luYyAoZXYpID0+IHtcbiAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLnJlbW92ZVJ1bkZyb21TaGFyZWQoZnVuY0NhbGwpO1xuICAgICAgICAgIHVwZGF0ZUhpc3RvcnlQYW5lKCk7XG4gICAgICAgICAgdXBkYXRlU2hhcmVkUGFuZSgpO1xuICAgICAgICB9LCAnSGlkZSBmcm9tIHNoYXJlZCcpO1xuXG4gICAgICAgIGNvbnN0IGNhcmQgPSB1aS5kaXZIKFtcbiAgICAgICAgICB1aS5kaXZWKFtcbiAgICAgICAgICAgIHVpLmRpdlRleHQoZnVuY0NhbGwub3B0aW9uc1sndGl0bGUnXSA/PyAnRGVmYXVsdCB0aXRsZScsICd0aXRsZScpLFxuICAgICAgICAgICAgLi4uKGZ1bmNDYWxsLm9wdGlvbnNbJ2Fubm90YXRpb24nXSkgPyBbdWkuZGl2VGV4dChmdW5jQ2FsbC5vcHRpb25zWydhbm5vdGF0aW9uJ10sICdkZXNjcmlwdGlvbicpXTogW10sXG4gICAgICAgICAgICB1aS5kaXZIKFt1aS5yZW5kZXIoZnVuY0NhbGwuYXV0aG9yKSwgdWkuc3BhbihbbmV3IERhdGUoZnVuY0NhbGwuc3RhcnRlZC50b1N0cmluZygpKS50b0xvY2FsZVN0cmluZygnZW4tdXMnLCB7bW9udGg6ICdzaG9ydCcsIGRheTogJ251bWVyaWMnLCBob3VyOiAnbnVtZXJpYycsIG1pbnV0ZTogJ251bWVyaWMnfSldLCAnZGF0ZScpXSksXG4gICAgICAgICAgXSksXG4gICAgICAgICAgdWkuZGl2SChbXG4gICAgICAgICAgICB1aS5pY29uRkEoJ2xpbmsnLCBhc3luYyAoZXYpID0+IHtcbiAgICAgICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGAke3dpbmRvdy5sb2NhdGlvbi5vcmlnaW59JHt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWV9P2lkPSR7ZnVuY0NhbGwuaWR9YCk7XG4gICAgICAgICAgICB9LCAnQ29weSBsaW5rIHRvIHRoZSBydW4nKSxcbiAgICAgICAgICAgIC4uLihmdW5jQ2FsbC5hdXRob3IuaWQgPT09IGdyb2suc2hlbGwudXNlci5pZCkgPyBbXG4gICAgICAgICAgICAgIHVpLmljb25GQSgncGVuJywgYXN5bmMgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgc2hvd0FkZFRvU2hhcmVkRGlhbG9nKGZ1bmNDYWxsKTtcbiAgICAgICAgICAgICAgfSwgJ0VkaXQgcnVuIG1ldGFkYXRhJyksXG4gICAgICAgICAgICAgIHVuc2hhcmVJY29uXTogW10sXG4gICAgICAgICAgXSwgJ2N2LWZ1bmNjYWxsLWNhcmQtaWNvbnMnKVxuICAgICAgICBdLCAnY3YtZnVuY2NhbGwtY2FyZCcpO1xuXG4gICAgICAgIGNhcmQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKHRoaXMucm9vdCwgdHJ1ZSk7XG4gICAgICAgICAgdGhpcy5saW5rRnVuY2NhbGwoYXdhaXQgdGhpcy5sb2FkUnVuKGZ1bmNDYWxsLmlkKSk7XG4gICAgICAgICAgY2FyZC5jbGFzc0xpc3QuYWRkKCdjbGlja2VkJyk7XG4gICAgICAgICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKHRoaXMucm9vdCwgZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNhcmQ7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgYWxsQ2FyZHMgPSBbLi4uaGlzdG9yeUNhcmRzLCAuLi5mYXZvcml0ZUNhcmRzLCAuLi5zaGFyZWRDYXJkc107XG4gICAgICBhbGxDYXJkcy5mb3JFYWNoKChjYXJkKSA9PiBjYXJkLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gYWxsQ2FyZHMuZm9yRWFjaCgoYykgPT4gYy5jbGFzc0xpc3QucmVtb3ZlKCdjbGlja2VkJykpKSk7XG5cbiAgICAgIHJldHVybiB1aS5kaXZWKHNoYXJlZENhcmRzKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVuZGVySGlzdG9yeUNhcmRzID0gYXN5bmMgKGZ1bmNDYWxsczogREcuRnVuY0NhbGxbXSkgPT4ge1xuICAgICAgaGlzdG9yeUNhcmRzID0gZnVuY0NhbGxzLm1hcCgoZnVuY0NhbGwpID0+IHtcbiAgICAgICAgY29uc3QgaWNvbiA9IGZ1bmNDYWxsLmF1dGhvci5waWN0dXJlIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpY29uLnN0eWxlLndpZHRoID0gJzI1cHgnO1xuICAgICAgICBpY29uLnN0eWxlLmhlaWdodCA9ICcyNXB4JztcbiAgICAgICAgaWNvbi5zdHlsZS5mb250U2l6ZSA9ICcyMHB4JztcbiAgICAgICAgaWNvbi5zdHlsZS5tYXJnaW5SaWdodCA9ICczcHgnO1xuICAgICAgICBpY29uLnN0eWxlLmFsaWduU2VsZiA9ICdjZW50ZXInO1xuICAgICAgICBjb25zdCB1c2VyTGFiZWwgPSB1aS5sYWJlbChmdW5jQ2FsbC5hdXRob3IuZnJpZW5kbHlOYW1lLCAnZDQtbGluay1sYWJlbCcpO1xuICAgICAgICB1aS5iaW5kKGZ1bmNDYWxsLmF1dGhvciwgaWNvbik7XG5cbiAgICAgICAgY29uc3Qgc2hhcmVJY29uID0gdWkuaWNvbkZBKCdleWUnLCBhc3luYyAoZXYpID0+IHtcbiAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBzaG93QWRkVG9TaGFyZWREaWFsb2coZnVuY0NhbGwpO1xuICAgICAgICB9LCAnQWRkIHRvIHNoYXJlZCcpO1xuICAgICAgICBzaGFyZUljb24uY2xhc3NMaXN0LmFkZCgnZmFsJyk7XG5cbiAgICAgICAgY29uc3QgdW5zaGFyZUljb24gPSB1aS5pY29uRkEoJ2V5ZS1zbGFzaCcsIGFzeW5jIChldikgPT4ge1xuICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlUnVuRnJvbVNoYXJlZChmdW5jQ2FsbCk7XG4gICAgICAgICAgdXBkYXRlSGlzdG9yeVBhbmUoKTtcbiAgICAgICAgICB1cGRhdGVTaGFyZWRQYW5lKCk7XG4gICAgICAgIH0sICdIaWRlIGZyb20gc2hhcmVkJyk7XG5cbiAgICAgICAgY29uc3QgdW5zdGFyID0gdWkuaWNvbkZBKCdzdGFyJywgYXN5bmMgKGV2KSA9PiB7XG4gICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVSdW5Gcm9tRmF2b3JpdGVzKGZ1bmNDYWxsKTtcbiAgICAgICAgICB1cGRhdGVIaXN0b3J5UGFuZSgpO1xuICAgICAgICAgIHVwZGF0ZUZhdm9yaXRlc1BhbmUoKTtcbiAgICAgICAgfSwgJ1VuZmF2b3JpdGUgdGhlIHJ1bicpO1xuICAgICAgICB1bnN0YXIuY2xhc3NMaXN0LmFkZCgnZmFzJyk7XG5cbiAgICAgICAgY29uc3QgY2FyZCA9IHVpLmRpdkgoW1xuICAgICAgICAgIHVpLmRpdkgoW1xuICAgICAgICAgICAgaWNvbixcbiAgICAgICAgICAgIHVpLmRpdlYoW1xuICAgICAgICAgICAgICB1c2VyTGFiZWwsXG4gICAgICAgICAgICAgIHVpLnNwYW4oW25ldyBEYXRlKGZ1bmNDYWxsLnN0YXJ0ZWQudG9TdHJpbmcoKSkudG9Mb2NhbGVTdHJpbmcoJ2VuLXVzJywge21vbnRoOiAnc2hvcnQnLCBkYXk6ICdudW1lcmljJywgaG91cjogJ251bWVyaWMnLCBtaW51dGU6ICdudW1lcmljJ30pXSlcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgIF0pLFxuICAgICAgICAgIHVpLmRpdkgoW1xuICAgICAgICAgICAgLi4uKGZ1bmNDYWxsLm9wdGlvbnNbJ2lzU2hhcmVkJ10pID8gW3Vuc2hhcmVJY29uXTogW3NoYXJlSWNvbl0sXG4gICAgICAgICAgICAuLi4oZnVuY0NhbGwub3B0aW9uc1snaXNGYXZvcml0ZSddKSA/IFt1bnN0YXJdIDogW3VpLmljb25GQSgnc3RhcicsIGFzeW5jIChldikgPT4ge1xuICAgICAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgc2hvd0FkZFRvRmF2b3JpdGVzRGlhbG9nKGZ1bmNDYWxsKTtcbiAgICAgICAgICAgIH0sICdBZGQgdG8gZmF2b3JpdGVzJyldLFxuICAgICAgICAgICAgdWkuaWNvbkZBKCd0cmFzaC1hbHQnLCBhc3luYyAoZXYpID0+IHtcbiAgICAgICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgIHNob3dEZWxldGVSdW5EaWFsb2coZnVuY0NhbGwpO1xuICAgICAgICAgICAgfSwgJ0RlbGV0ZSB0aGUgcnVuJyksXG4gICAgICAgICAgXSwgJ2N2LWZ1bmNjYWxsLWNhcmQtaWNvbnMnKVxuICAgICAgICBdLCAnY3YtZnVuY2NhbGwtY2FyZCcpO1xuXG4gICAgICAgIGNhcmQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKHRoaXMucm9vdCwgdHJ1ZSk7XG4gICAgICAgICAgdGhpcy5saW5rRnVuY2NhbGwoYXdhaXQgdGhpcy5sb2FkUnVuKGZ1bmNDYWxsLmlkKSk7XG4gICAgICAgICAgY2FyZC5jbGFzc0xpc3QuYWRkKCdjbGlja2VkJyk7XG4gICAgICAgICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKHRoaXMucm9vdCwgZmFsc2UpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gY2FyZDtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBhbGxDYXJkcyA9IFsuLi5oaXN0b3J5Q2FyZHMsIC4uLmZhdm9yaXRlQ2FyZHMsIC4uLnNoYXJlZENhcmRzXTtcbiAgICAgIGFsbENhcmRzLmZvckVhY2goKGNhcmQpID0+IGNhcmQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiBhbGxDYXJkcy5mb3JFYWNoKChjKSA9PiBjLmNsYXNzTGlzdC5yZW1vdmUoJ2NsaWNrZWQnKSkpKTtcblxuICAgICAgcmV0dXJuIHVpLmRpdlYoaGlzdG9yeUNhcmRzKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYnVpbGRTaGFyZWRMaXN0ID0gKCkgPT4gdWkud2FpdChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBoaXN0b3JpY2FsUnVucyA9IGF3YWl0IHRoaXMucHVsbFJ1bnModGhpcy5mdW5jIS5pZCwgZmlsdGVyaW5nT3B0aW9ucyk7XG4gICAgICBjb25zdCBzaGFyZWRSdW5zID0gaGlzdG9yaWNhbFJ1bnMuZmlsdGVyKChydW4pID0+IHJ1bi5vcHRpb25zWydpc1NoYXJlZCddKTtcbiAgICAgIGlmIChzaGFyZWRSdW5zLmxlbmd0aCA+IDApXG4gICAgICAgIHJldHVybiB1aS53YWl0KCgpID0+IHJlbmRlclNoYXJlZENhcmRzKHNoYXJlZFJ1bnMpKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIHVpLmRpdlRleHQoJ05vIHJ1bnMgYXJlIG1hcmtlZCBhcyBzaGFyZWQnLCAnZGVzY3JpcHRpb24nKTtcbiAgICB9KTtcbiAgICBsZXQgc2hhcmVkTGlzdFBhbmUgPSBtYWluQWNjLmFkZFBhbmUoJ1NoYXJlZCcsIGJ1aWxkU2hhcmVkTGlzdCwgdHJ1ZSk7XG4gICAgY29uc3QgdXBkYXRlU2hhcmVkUGFuZSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGlzRXhwYW5kZWQgPSBzaGFyZWRMaXN0UGFuZS5leHBhbmRlZDtcbiAgICAgIG1haW5BY2MucmVtb3ZlUGFuZShzaGFyZWRMaXN0UGFuZSk7XG4gICAgICBzaGFyZWRMaXN0UGFuZSA9IG1haW5BY2MuYWRkUGFuZSgnU2hhcmVkJywgYnVpbGRTaGFyZWRMaXN0LCBpc0V4cGFuZGVkLCBmYXZvcml0ZXNMaXN0UGFuZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGJ1aWxkRmF2b3JpdGVzTGlzdCA9IChmaWx0ZXJPcHRpb25zOiBGaWx0ZXJPcHRpb25zID0ge30pID0+IHVpLndhaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgaGlzdG9yaWNhbFJ1bnMgPSBhd2FpdCB0aGlzLnB1bGxSdW5zKHRoaXMuZnVuYyEuaWQsIGZpbHRlck9wdGlvbnMpO1xuICAgICAgY29uc3QgZmF2b3JpdGVSdW5zID0gaGlzdG9yaWNhbFJ1bnMuZmlsdGVyKChydW4pID0+IHJ1bi5vcHRpb25zWydpc0Zhdm9yaXRlJ10gJiYgIXJ1bi5vcHRpb25zWydpc0ltcG9ydGVkJ10pO1xuICAgICAgaWYgKGZhdm9yaXRlUnVucy5sZW5ndGggPiAwKVxuICAgICAgICByZXR1cm4gdWkud2FpdCgoKSA9PiByZW5kZXJGYXZvcml0ZUNhcmRzKGZhdm9yaXRlUnVucykpO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gdWkuZGl2VGV4dCgnTm8gcnVucyBhcmUgbWFya2VkIGFzIGZhdm9yaXRlcycsICdkZXNjcmlwdGlvbicpO1xuICAgIH0pO1xuICAgIGxldCBmYXZvcml0ZXNMaXN0UGFuZSA9IG1haW5BY2MuYWRkUGFuZSgnTXkgZmF2b3JpdGVzJywgKCkgPT4gYnVpbGRGYXZvcml0ZXNMaXN0KHtcbiAgICAgIC4uLmZpbHRlcmluZ09wdGlvbnMsXG4gICAgICBhdXRob3I6IGdyb2suc2hlbGwudXNlclxuICAgIH0pLCB0cnVlKTtcbiAgICBjb25zdCB1cGRhdGVGYXZvcml0ZXNQYW5lID0gKGZpbHRlck9wdGlvbnM6IEZpbHRlck9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgaXNFeHBhbmRlZCA9IGZhdm9yaXRlc0xpc3RQYW5lLmV4cGFuZGVkO1xuICAgICAgbWFpbkFjYy5yZW1vdmVQYW5lKGZhdm9yaXRlc0xpc3RQYW5lKTtcbiAgICAgIGZhdm9yaXRlc0xpc3RQYW5lID0gbWFpbkFjYy5hZGRQYW5lKCdNeSBmYXZvcml0ZXMnLCAoKSA9PiBidWlsZEZhdm9yaXRlc0xpc3Qoe1xuICAgICAgICAuLi5maWx0ZXJpbmdPcHRpb25zLFxuICAgICAgICBhdXRob3I6IGdyb2suc2hlbGwudXNlclxuICAgICAgfSksIGlzRXhwYW5kZWQsIGhpc3RvcnlQYW5lKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYnVpbGRIaXN0b3J5UGFuZSA9IChmaWx0ZXJPcHRpb25zOiBGaWx0ZXJPcHRpb25zID0ge30pID0+IHVpLndhaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgaGlzdG9yaWNhbFJ1bnMgPSAoYXdhaXQgdGhpcy5wdWxsUnVucyh0aGlzLmZ1bmMhLmlkLCBmaWx0ZXJPcHRpb25zKSk7XG4gICAgICBpZiAoaGlzdG9yaWNhbFJ1bnMubGVuZ3RoID4gMClcbiAgICAgICAgcmV0dXJuIHVpLndhaXQoKCkgPT4gcmVuZGVySGlzdG9yeUNhcmRzKGhpc3RvcmljYWxSdW5zKSk7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiB1aS5kaXZUZXh0KCdObyBydW5zIGFyZSBmb3VuZCBpbiBoaXN0b3J5JywgJ2Rlc2NyaXB0aW9uJyk7XG4gICAgfSk7XG4gICAgbGV0IGhpc3RvcnlQYW5lID0gbWFpbkFjYy5hZGRQYW5lKCdNeSBoaXN0b3J5JywgKCkgPT4gYnVpbGRIaXN0b3J5UGFuZSh7XG4gICAgICAuLi5maWx0ZXJpbmdPcHRpb25zLFxuICAgICAgYXV0aG9yOiBncm9rLnNoZWxsLnVzZXJcbiAgICB9KSwgdHJ1ZSk7XG4gICAgY29uc3QgdXBkYXRlSGlzdG9yeVBhbmUgPSAoZmlsdGVyT3B0aW9uczogRmlsdGVyT3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICBjb25zdCBpc0V4cGFuZGVkID0gaGlzdG9yeVBhbmUuZXhwYW5kZWQ7XG4gICAgICBtYWluQWNjLnJlbW92ZVBhbmUoaGlzdG9yeVBhbmUpO1xuICAgICAgaGlzdG9yeVBhbmUgPSBtYWluQWNjLmFkZFBhbmUoJ015IGhpc3RvcnknLCAoKSA9PiBidWlsZEhpc3RvcnlQYW5lKHtcbiAgICAgICAgLi4uZmlsdGVyT3B0aW9ucyxcbiAgICAgICAgYXV0aG9yOiBncm9rLnNoZWxsLnVzZXJcbiAgICAgIH0pLCBpc0V4cGFuZGVkKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbmV3SGlzdG9yeUJsb2NrID0gbWFpbkFjYy5yb290O1xuICAgIHVpLmVtcHR5KHRoaXMuaGlzdG9yeVJvb3QpO1xuICAgIHRoaXMuaGlzdG9yeVJvb3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2p1c3RpZnktY29udGVudCcpO1xuICAgIHRoaXMuaGlzdG9yeVJvb3Quc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gICAgdGhpcy5oaXN0b3J5Um9vdC5hcHBlbmQobmV3SGlzdG9yeUJsb2NrKTtcbiAgICByZXR1cm4gbmV3SGlzdG9yeUJsb2NrO1xuICB9XG5cbiAgLyoqXG4gICAqIExvb2tzIGZvciB7QGxpbmsgc3VwcG9ydGVkRXhwb3J0Rm9ybWF0c30gbWVtYmVycyBhbmQgY3JlYXRlcyByaWJib24gcGFuZWxcbiAgICogQHJldHVybnMgVGhlIEhUTUxFbGVtZW50cyBvZiByaWJib25QYW5lbHNcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBidWlsZFJpYmJvblBhbmVscygpOiBIVE1MRWxlbWVudFtdW10ge1xuICAgIGNvbnN0IG5ld1JpYmJvblBhbmVsczogSFRNTEVsZW1lbnRbXVtdID0gW1xuICAgICAgWy4uLih0aGlzLmV4cG9ydENvbmZpZyAmJiB0aGlzLmV4cG9ydENvbmZpZy5zdXBwb3J0ZWRGb3JtYXRzLmxlbmd0aCA+IDApID8gW3VpLmRpdkgoW1xuICAgICAgICB1aS5jb21ib1BvcHVwKFxuICAgICAgICAgIHVpLmljb25GQSgnYXJyb3ctdG8tYm90dG9tJyksXG4gICAgICAgICAgdGhpcy5leHBvcnRDb25maWcuc3VwcG9ydGVkRm9ybWF0cyxcbiAgICAgICAgICBhc3luYyAoZm9ybWF0OiBzdHJpbmcpID0+IERHLlV0aWxzLmRvd25sb2FkKHRoaXMuZXhwb3J0Q29uZmlnIS5maWxlbmFtZShmb3JtYXQpLCBhd2FpdCB0aGlzLmV4cG9ydENvbmZpZyEuZXhwb3J0KGZvcm1hdCkpKSxcbiAgICAgIF0pXTogW11cbiAgICAgIF1dO1xuXG4gICAgaWYgKHRoaXMuZnVuYz8uaWQpIHtcbiAgICAgIGNvbnN0IGhpc3RvcnlCdXR0b24gPSB1aS5pY29uRkEoJ2hpc3RvcnknLCAoKSA9PiB7XG4gICAgICAgIGdyb2suc2hlbGwud2luZG93cy5zaG93UHJvcGVydGllcyA9ICFncm9rLnNoZWxsLndpbmRvd3Muc2hvd1Byb3BlcnRpZXM7XG4gICAgICAgIGhpc3RvcnlCdXR0b24uY2xhc3NMaXN0LnRvZ2dsZSgnZDQtY3VycmVudCcpO1xuICAgICAgICBncm9rLnNoZWxsLm8gPSB0aGlzLmhpc3RvcnlSb290O1xuICAgICAgfSk7XG5cbiAgICAgIGhpc3RvcnlCdXR0b24uY2xhc3NMaXN0LmFkZCgnZDQtdG9nZ2xlLWJ1dHRvbicpO1xuICAgICAgaWYgKGdyb2suc2hlbGwud2luZG93cy5zaG93UHJvcGVydGllcykgaGlzdG9yeUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdkNC1jdXJyZW50Jyk7XG5cbiAgICAgIGNvbnN0IGNsb25lUnVuQnRuID0gdWkuYnV0dG9uKCdDbG9uZScsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5jbG9uZVJ1bkFzQ3VycmVudCgpO1xuICAgICAgfSwgJ0Nsb25lIHRoZSBydW4nKTtcblxuICAgICAgbmV3UmliYm9uUGFuZWxzLnB1c2goW1xuICAgICAgICBoaXN0b3J5QnV0dG9uLFxuICAgICAgICAuLi50aGlzLmZ1bmNDYWxsPy5vcHRpb25zWydpc0hpc3RvcmljYWwnXT8gW2Nsb25lUnVuQnRuXTogW10sXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFJpYmJvblBhbmVscyhuZXdSaWJib25QYW5lbHMpO1xuICAgIHJldHVybiBuZXdSaWJib25QYW5lbHM7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgdG8gY3JlYXRlIGEgY3VzdG9tIHJpYmJvbiBtZW51IG9uIHRoZSB0b3AuXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGJ1aWxkUmliYm9uTWVudSgpIHtcblxuICB9XG5cbiAgcHVibGljIGFzeW5jIG9uQmVmb3JlUmVtb3ZlUnVuRnJvbUZhdm9yaXRlcyhjYWxsVG9GYXZvcml0ZTogREcuRnVuY0NhbGwpIHsgfVxuXG4gIHB1YmxpYyBhc3luYyBvbkFmdGVyUmVtb3ZlUnVuRnJvbUZhdm9yaXRlcyhmYXZvcml0ZUNhbGw6IERHLkZ1bmNDYWxsKSB7IH1cblxuICAvKipcbiAgICogU2F2ZXMgdGhlIHJ1biBhcyB1c3VhbCBydW5cbiAgICogQHBhcmFtIGNhbGxUb1VuZmF2b3JpdGUgRnVuY0NhbGwgb2JqZWN0IHRvIHJlbW92ZSBmcm9tIGZhdm9yaXRlc1xuICAgKiBAcmV0dXJucyBTYXZlZCBGdW5jQ2FsbFxuICAgKiBAc3RhYmlsaXR5IEV4cGVyaW1lbnRhbFxuICovXG4gIHB1YmxpYyBhc3luYyByZW1vdmVSdW5Gcm9tRmF2b3JpdGVzKGNhbGxUb1VuZmF2b3JpdGU6IERHLkZ1bmNDYWxsKTogUHJvbWlzZTxERy5GdW5jQ2FsbD4ge1xuICAgIGNhbGxUb1VuZmF2b3JpdGUub3B0aW9uc1sndGl0bGUnXSA9IG51bGw7XG4gICAgY2FsbFRvVW5mYXZvcml0ZS5vcHRpb25zWydhbm5vdGF0aW9uJ10gPSBudWxsO1xuICAgIGNhbGxUb1VuZmF2b3JpdGUub3B0aW9uc1snaXNGYXZvcml0ZSddID0gZmFsc2U7XG4gICAgYXdhaXQgdGhpcy5vbkJlZm9yZVJlbW92ZVJ1bkZyb21GYXZvcml0ZXMoY2FsbFRvVW5mYXZvcml0ZSk7XG4gICAgY29uc3QgZmF2b3JpdGVTYXZlID0gYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5jYWxscy5zYXZlKGNhbGxUb1VuZmF2b3JpdGUpO1xuICAgIGF3YWl0IHRoaXMub25BZnRlclJlbW92ZVJ1bkZyb21GYXZvcml0ZXMoZmF2b3JpdGVTYXZlKTtcbiAgICByZXR1cm4gZmF2b3JpdGVTYXZlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIG9uQmVmb3JlQWRkaW5nVG9GYXZvcml0ZXMoY2FsbFRvQWRkVG9GYXZvcml0ZXM6IERHLkZ1bmNDYWxsKSB7IH1cblxuICBwdWJsaWMgYXN5bmMgb25BZnRlckFkZGluZ1RvRmF2b3JpdGVzKGZhdm9yaXRlQ2FsbDogREcuRnVuY0NhbGwpIHsgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgcnVuIGFzIGZhdm9yaXRlXG4gICAqIEBwYXJhbSBjYWxsVG9GYXZvcml0ZSBGdW5jQ2FsbCBvYmplY3QgdG8gYWRkIHRvIGZhdm9yaXRlc1xuICAgKiBAcmV0dXJucyBTYXZlZCBGdW5jQ2FsbFxuICAgKiBAc3RhYmlsaXR5IEV4cGVyaW1lbnRhbFxuICovXG5cbiAgcHVibGljIGFzeW5jIGFkZFJ1blRvRmF2b3JpdGVzKGNhbGxUb0Zhdm9yaXRlOiBERy5GdW5jQ2FsbCk6IFByb21pc2U8REcuRnVuY0NhbGw+IHtcbiAgICBjYWxsVG9GYXZvcml0ZS5vcHRpb25zWydpc0Zhdm9yaXRlJ10gPSB0cnVlO1xuICAgIGF3YWl0IHRoaXMub25CZWZvcmVBZGRpbmdUb0Zhdm9yaXRlcyhjYWxsVG9GYXZvcml0ZSk7XG4gICAgY29uc3Qgc2F2ZWRGYXZvcml0ZSA9IGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHMuc2F2ZShjYWxsVG9GYXZvcml0ZSk7XG4gICAgYXdhaXQgdGhpcy5vbkFmdGVyQWRkaW5nVG9GYXZvcml0ZXMoc2F2ZWRGYXZvcml0ZSk7XG4gICAgcmV0dXJuIHNhdmVkRmF2b3JpdGU7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb25CZWZvcmVSZW1vdmVSdW5Gcm9tU2hhcmVkKGNhbGxUb1NoYXJlOiBERy5GdW5jQ2FsbCkgeyB9XG5cbiAgcHVibGljIGFzeW5jIG9uQWZ0ZXJSZW1vdmVSdW5Gcm9tU2FocmVkKHNoYXJlZENhbGw6IERHLkZ1bmNDYWxsKSB7IH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBydW4gZnJvbSBzaGFyZWRcbiAgICogQHBhcmFtIGNhbGxUb1Vuc2hhcmUgRnVuY0NhbGwgb2JqZWN0IHRvIHJlbW92ZSBmcm9tIHNoYXJlZFxuICAgKiBAcmV0dXJucyBTYXZlZCBGdW5jQ2FsbFxuICAgKiBAc3RhYmlsaXR5IEV4cGVyaW1lbnRhbFxuICovXG5cbiAgcHVibGljIGFzeW5jIHJlbW92ZVJ1bkZyb21TaGFyZWQoY2FsbFRvVW5zaGFyZTogREcuRnVuY0NhbGwpOiBQcm9taXNlPERHLkZ1bmNDYWxsPiB7XG4gICAgY2FsbFRvVW5zaGFyZS5vcHRpb25zWyd0aXRsZSddID0gbnVsbDtcbiAgICBjYWxsVG9VbnNoYXJlLm9wdGlvbnNbJ2Fubm90YXRpb24nXSA9IG51bGw7XG4gICAgY2FsbFRvVW5zaGFyZS5vcHRpb25zWydpc1NoYXJlZCddID0gZmFsc2U7XG4gICAgYXdhaXQgdGhpcy5vbkJlZm9yZVJlbW92ZVJ1bkZyb21GYXZvcml0ZXMoY2FsbFRvVW5zaGFyZSk7XG4gICAgY29uc3Qgc2F2ZWRTaGFyZWQgPSBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLnNhdmUoY2FsbFRvVW5zaGFyZSk7XG4gICAgYXdhaXQgdGhpcy5vbkFmdGVyUmVtb3ZlUnVuRnJvbUZhdm9yaXRlcyhzYXZlZFNoYXJlZCk7XG4gICAgcmV0dXJuIHNhdmVkU2hhcmVkO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIG9uQmVmb3JlQWRkaW5nVG9TaGFyZWQoY2FsbFRvQWRkVG9TaGFyZWQ6IERHLkZ1bmNDYWxsKSB7IH1cblxuICBwdWJsaWMgYXN5bmMgb25BZnRlckFkZGluZ1RvU2hhcmVkKHNoYXJlZENhbGw6IERHLkZ1bmNDYWxsKSB7IH1cblxuICAvKipcbiAgICogU2F2ZXMgdGhlIHJ1biBhcyBzaGFyZWRcbiAgICogQHBhcmFtIGNhbGxUb1NoYXJlIEZ1bmNDYWxsIG9iamVjdCB0byBhZGQgdG8gc2hhcmVkXG4gICAqIEByZXR1cm5zIFNhdmVkIEZ1bmNDYWxsXG4gICAqIEBzdGFiaWxpdHkgRXhwZXJpbWVudGFsXG4gKi9cblxuICBwdWJsaWMgYXN5bmMgYWRkUnVuVG9TaGFyZWQoY2FsbFRvU2hhcmU6IERHLkZ1bmNDYWxsKTogUHJvbWlzZTxERy5GdW5jQ2FsbD4ge1xuICAgIGNhbGxUb1NoYXJlLm9wdGlvbnNbJ2lzU2hhcmVkJ10gPSB0cnVlO1xuICAgIGF3YWl0IHRoaXMub25CZWZvcmVBZGRpbmdUb1NoYXJlZChjYWxsVG9TaGFyZSk7XG5cbiAgICBjb25zdCBhbGxHcm91cCA9IGF3YWl0IGdyb2suZGFwaS5ncm91cHMuZmluZChkZWZhdWx0R3JvdXBzSWRzWydBbGwgdXNlcnMnXSk7XG5cbiAgICBjb25zdCBkZk91dHB1dHMgPSB3dShjYWxsVG9TaGFyZS5vdXRwdXRQYXJhbXMudmFsdWVzKCkgYXMgREcuRnVuY0NhbGxQYXJhbVtdKVxuICAgICAgLmZpbHRlcigob3V0cHV0KSA9PiBvdXRwdXQucHJvcGVydHkucHJvcGVydHlUeXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpO1xuXG4gICAgZm9yIChjb25zdCBvdXRwdXQgb2YgZGZPdXRwdXRzKSB7XG4gICAgICBjb25zdCBkZiA9IGNhbGxUb1NoYXJlLm91dHB1dHNbb3V0cHV0Lm5hbWVdIGFzIERHLkRhdGFGcmFtZTtcbiAgICAgIGF3YWl0IGdyb2suZGFwaS5wZXJtaXNzaW9ucy5ncmFudChkZi5nZXRUYWJsZUluZm8oKSwgYWxsR3JvdXAsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZklucHV0cyA9IHd1KGNhbGxUb1NoYXJlLmlucHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSlcbiAgICAgIC5maWx0ZXIoKGlucHV0KSA9PiBpbnB1dC5wcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IERHLlRZUEUuREFUQV9GUkFNRSk7XG4gICAgZm9yIChjb25zdCBpbnB1dCBvZiBkZklucHV0cykge1xuICAgICAgY29uc3QgZGYgPSBjYWxsVG9TaGFyZS5pbnB1dHNbaW5wdXQubmFtZV0gYXMgREcuRGF0YUZyYW1lO1xuICAgICAgYXdhaXQgZ3Jvay5kYXBpLnBlcm1pc3Npb25zLmdyYW50KGRmLmdldFRhYmxlSW5mbygpLCBhbGxHcm91cCwgZmFsc2UpO1xuICAgIH1cblxuICAgIGNvbnN0IHNhdmVkU2hhcmVkID0gYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5jYWxscy5zYXZlKGNhbGxUb1NoYXJlKTtcbiAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJBZGRpbmdUb1NoYXJlZChzYXZlZFNoYXJlZCk7XG4gICAgcmV0dXJuIHNhdmVkU2hhcmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBiZWZvcmUgc2F2aW5nIHRoZSBGVW5jQ2FsbCByZXN1bHRzIHRvIHRoZSBoaXN0b3JpY2FsIHJlc3VsdHMsIHJldHVybnMgdGhlIHNhdmVkIGNhbGwuIFNlZSBhbHNvIHtAbGluayBzYXZlUnVufS5cbiAgICogQHBhcmFtIGNhbGxUb1NhdmUgRnVuY0NhbGwgb2JqZWN0IHRvIHNhdmVcbiAgICogQHJldHVybnMgU2F2ZWQgRnVuY0NhbGxcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYXN5bmMgb25CZWZvcmVTYXZlUnVuKGNhbGxUb1NhdmU6IERHLkZ1bmNDYWxsKSB7IH1cblxuICAvKipcbiAgICogU2F2ZXMgdGhlIGNvbXB1dGF0aW9uIHJlc3VsdHMgdG8gdGhlIGhpc3RvcmljYWwgcmVzdWx0cywgcmV0dXJucyB0aGUgc2F2ZWQgY2FsbC4gU2VlIGFsc28ge0BsaW5rIHNhdmVSdW59LlxuICAgKiBAcGFyYW0gc2F2ZWRDYWxsIEZ1bmNDYWxsIG9iamVjdCB0byBzYXZlXG4gICAqIEByZXR1cm5zIFNhdmVkIEZ1bmNDYWxsXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGFzeW5jIG9uQWZ0ZXJTYXZlUnVuKHNhdmVkQ2FsbDogREcuRnVuY0NhbGwpIHsgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgY29tcHV0YXRpb24gcmVzdWx0cyB0byB0aGUgaGlzdG9yaWNhbCByZXN1bHRzLCByZXR1cm5zIHRoZSBzYXZlZCBjYWxsLiBTZWUgYWxzbyB7QGxpbmsgbG9hZFJ1bn0uXG4gICAqIEBwYXJhbSBjYWxsVG9TYXZlIEZ1bmNDYWxsIG9iamVjdCB0byBzYXZlXG4gICAqIEByZXR1cm5zIFNhdmVkIEZ1bmNDYWxsXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGFzeW5jIHNhdmVSdW4oY2FsbFRvU2F2ZTogREcuRnVuY0NhbGwpOiBQcm9taXNlPERHLkZ1bmNDYWxsPiB7XG4gICAgYXdhaXQgdGhpcy5vbkJlZm9yZVNhdmVSdW4oY2FsbFRvU2F2ZSk7XG4gICAgY29uc3Qgc2F2ZWRDYWxsID0gYXdhaXQgaGlzdG9yeVV0aWxzLnNhdmVSdW4oY2FsbFRvU2F2ZSk7XG4gICAgdGhpcy5idWlsZEhpc3RvcnlCbG9jaygpO1xuICAgIHRoaXMucGF0aCA9IGA/aWQ9JHtzYXZlZENhbGwuaWR9YDtcbiAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJTYXZlUnVuKHNhdmVkQ2FsbCk7XG4gICAgcmV0dXJuIHNhdmVkQ2FsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYmVmb3JlIGRlbGV0aW5nIHRoZSBjb21wdXRhdGlvbiByZXN1bHRzIGZyb20gaGlzdG9yeSwgcmV0dXJucyBpdHMgaWQuIFNlZSBhbHNvIHtAbGluayBsb2FkUnVufS5cbiAgICogQHBhcmFtIGNhbGxUb0RlbGV0ZSBGdW5jQ2FsbCBvYmplY3QgdG8gYmUgZGVsZXRlZFxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBhc3luYyBvbkJlZm9yZURlbGV0ZVJ1bihjYWxsVG9EZWxldGU6IERHLkZ1bmNDYWxsKSB7IH1cblxuICAvKipcbiAgICogQ2FsbGVkIGFmdGVyIGRlbGV0aW5nIHRoZSBjb21wdXRhdGlvbiByZXN1bHRzIGZyb20gaGlzdG9yeSwgcmV0dXJucyBpdHMgaWQuIFNlZSBhbHNvIHtAbGluayBsb2FkUnVufS5cbiAgICogQHBhcmFtIGRlbGV0ZWRDYWxsIGRlbGV0ZWQgRnVuY0NhbGwgdmFsdWVcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYXN5bmMgb25BZnRlckRlbGV0ZVJ1bihkZWxldGVkQ2FsbDogREcuRnVuY0NhbGwpIHsgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBjb21wdXRhdGlvbiByZXN1bHRzIGZyb20gaGlzdG9yeSwgcmV0dXJucyBpdHMgaWQuIFNlZSBhbHNvIHtAbGluayBsb2FkUnVufS5cbiAgICogQHBhcmFtIGNhbGxUb0RlbGV0ZSBGdW5jQ2FsbCBvYmplY3QgdG8gZGVsZXRlXG4gICAqIEByZXR1cm5zIElEIG9mIGRlbGV0ZWQgaGlzdG9yaWNhbCBydW5cbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuXG4gIHB1YmxpYyBhc3luYyBkZWxldGVSdW4oY2FsbFRvRGVsZXRlOiBERy5GdW5jQ2FsbCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgYXdhaXQgdGhpcy5vbkJlZm9yZURlbGV0ZVJ1bihjYWxsVG9EZWxldGUpO1xuICAgIGF3YWl0IGhpc3RvcnlVdGlscy5kZWxldGVSdW4oY2FsbFRvRGVsZXRlKTtcbiAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJEZWxldGVSdW4oY2FsbFRvRGVsZXRlKTtcbiAgICByZXR1cm4gY2FsbFRvRGVsZXRlLmlkO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBiZWZvcmUgZmV0Y2hpbmcgdGhlIGhpc3RvcmljYWwgcnVuIGRhdGEgaW4ge0BsaW5rIGxvYWRSdW59LlxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBhc3luYyBvbkJlZm9yZUxvYWRSdW4oKSB7fVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYWZ0ZXIgZmV0Y2hpbmcgdGhlIGhpc3RvcmljYWwgcnVuIGRhdGEgaW4ge0BsaW5rIGxvYWRSdW59LlxuICAgKiBAcGFyYW0gZnVuY0NhbGwgRnVuY0NhbGwgZmV0Y2hlZCBmcm9tIHNlcnZlciBkdXJpbmcge0BsaW5rIGxvYWRSdW59XG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGFzeW5jIG9uQWZ0ZXJMb2FkUnVuKGZ1bmNDYWxsOiBERy5GdW5jQ2FsbCkge31cblxuICAvKipcbiAgICogTG9hZHMgdGhlIHNwZWNpZmllZCBoaXN0b3JpY2FsIHJ1bi4gU2VlIGFsc28ge0BsaW5rIHNhdmVSdW59LlxuICAgKiBAcGFyYW0gZnVuY0NhbGxJZCBJRCBvZiBGdW5jQ2FsbCB0byBsb29rIGZvci4gR2V0IGl0IHVzaW5nIHtAc2VlIGZ1bmNDYWxsLmlkfSBmaWVsZFxuICAgKiBAcmV0dXJucyBGdW5jQ2FsbCBhdWdlbWVudGVkIHdpdGggaW5wdXRzJyBhbmQgb3V0cHV0cycgdmFsdWVzXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cblxuICBwdWJsaWMgYXN5bmMgbG9hZFJ1bihmdW5jQ2FsbElkOiBzdHJpbmcpOiBQcm9taXNlPERHLkZ1bmNDYWxsPiB7XG4gICAgYXdhaXQgdGhpcy5vbkJlZm9yZUxvYWRSdW4oKTtcbiAgICBjb25zdCBwdWxsZWRSdW4gPSBhd2FpdCBoaXN0b3J5VXRpbHMubG9hZFJ1bihmdW5jQ2FsbElkKTtcbiAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJMb2FkUnVuKHB1bGxlZFJ1bik7XG4gICAgdGhpcy5zZXRSdW5WaWV3UmVhZG9ubHkoKTtcbiAgICByZXR1cm4gcHVsbGVkUnVuO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIG9uQmVmb3JlQ2xvbmVSdW5Bc0N1cnJlbnQoKSB7IH1cblxuICBwdWJsaWMgYXN5bmMgb25BZnRlckNsb25lUnVuQXNDdXJyZW50KCkgeyB9XG5cblxuICBwdWJsaWMgYXN5bmMgY2xvbmVSdW5Bc0N1cnJlbnQoKSB7XG4gICAgaWYgKCF0aGlzLmZ1bmNDYWxsKSB0aHJvdyBuZXcgRXJyb3IoJ0N1cnJlbnQgRnVuY2NhbGwgaXMgbm90IHNldCcpO1xuXG4gICAgYXdhaXQgdGhpcy5vbkJlZm9yZUNsb25lUnVuQXNDdXJyZW50KCk7XG4gICAgY29uc3QgY2xvbmVkRnVuY2NhbGwgPSB0aGlzLmZ1bmNDYWxsLmNsb25lKCk7XG4gICAgY2xvbmVkRnVuY2NhbGwubmV3SWQoKTtcbiAgICBjbG9uZWRGdW5jY2FsbC5vcHRpb25zWydpc0hpc3RvcmljYWwnXSA9IGZhbHNlO1xuICAgIHRoaXMubGlua0Z1bmNjYWxsKGNsb25lZEZ1bmNjYWxsKTtcbiAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJDbG9uZVJ1bkFzQ3VycmVudCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBvdmVybGF5RGl2ID0gdWkuZGl2KFtdLCB7c3R5bGU6IHtcbiAgICAnYmFja2dyb3VuZC1jb2xvcic6ICdncmF5JyxcbiAgICAnb3BhY2l0eSc6ICcwLjA3JyxcbiAgICAncG9zaXRpb24nOiAnYWJzb2x1dGUnLFxuICAgICdib3R0b20nOiAnMCcsXG4gICAgJ2xlZnQnOiAnMCcsXG4gICAgJ3JpZ2h0JzogJzAnLFxuICAgICd0b3AnOiAnMCcsXG4gICAgJ2Rpc3BsYXknOiAnbm9uZScsXG4gICAgJ2N1cnNvcic6ICdub3QtYWxsb3dlZCcsXG4gICAgJ3otaW5kZXgnOiAnMScsXG4gIH19KTtcblxuICBwcml2YXRlIHJvb3RSZWFkb25seUV2ZW50TGlzdGVuZXJzID0gW1xuICAgIChldjogTW91c2VFdmVudCk9PiB7XG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLm92ZXJsYXlEaXYuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcbiAgICB9LFxuICAgICgpID0+IHtcbiAgICAgIHRoaXMub3ZlcmxheURpdi5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuICAgIH0sXG4gICAgKCkgPT4ge1xuICAgICAgZ3Jvay5zaGVsbC53YXJuaW5nKCdDbG9uZSB0aGUgcnVuIHRvIGVkaXQgaXQnKTtcbiAgICB9LFxuICBdO1xuXG4gIHByaXZhdGUgaW50ZXJhY3RpdmVFdmVudExpc3RlbmVycyA9IFtcbiAgICAoKSA9PnRoaXMucm9vdC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMucm9vdFJlYWRvbmx5RXZlbnRMaXN0ZW5lcnNbMl0pLFxuICAgICgpID0+c2V0VGltZW91dCgoKSA9PiB0aGlzLnJvb3QuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnJvb3RSZWFkb25seUV2ZW50TGlzdGVuZXJzWzJdKSwgMTAwKVxuICBdO1xuXG4gIHByaXZhdGUgc2V0UnVuVmlld1JlYWRvbmx5KCk6IHZvaWQge1xuICAgIHRoaXMub3ZlcmxheURpdi5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnZGlzcGxheScpO1xuICAgIHRoaXMucm9vdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMucm9vdFJlYWRvbmx5RXZlbnRMaXN0ZW5lcnNbMl0pO1xuICAgIHRoaXMucm9vdC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLnJvb3RSZWFkb25seUV2ZW50TGlzdGVuZXJzWzBdKTtcbiAgICB0aGlzLnJvb3QuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMucm9vdFJlYWRvbmx5RXZlbnRMaXN0ZW5lcnNbMV0pO1xuICAgIHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKGAuJHtJTlRFUkFDVElWRV9DU1NfQ0xBU1N9YCkuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgIChlbCBhcyBIVE1MRWxlbWVudCkuc3R5bGUuekluZGV4ID0gJzInO1xuICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLmludGVyYWN0aXZlRXZlbnRMaXN0ZW5lcnNbMF0pO1xuICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5pbnRlcmFjdGl2ZUV2ZW50TGlzdGVuZXJzWzFdKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UnVuVmlld0VkaXRhYmxlKCk6IHZvaWQge1xuICAgIHRoaXMub3ZlcmxheURpdi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIHRoaXMucm9vdC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMucm9vdFJlYWRvbmx5RXZlbnRMaXN0ZW5lcnNbMl0pO1xuICAgIHRoaXMucm9vdC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLnJvb3RSZWFkb25seUV2ZW50TGlzdGVuZXJzWzBdKTtcbiAgICB0aGlzLnJvb3QucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMucm9vdFJlYWRvbmx5RXZlbnRMaXN0ZW5lcnNbMV0pO1xuICAgIHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKGAuJHtJTlRFUkFDVElWRV9DU1NfQ0xBU1N9YCkuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgIChlbCBhcyBIVE1MRWxlbWVudCkuc3R5bGUucmVtb3ZlUHJvcGVydHkoJ3otaW5kZXgnKTtcbiAgICAgIChlbCBhcyBIVE1MRWxlbWVudCkucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5pbnRlcmFjdGl2ZUV2ZW50TGlzdGVuZXJzWzBdKTtcbiAgICAgIChlbCBhcyBIVE1MRWxlbWVudCkucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMuaW50ZXJhY3RpdmVFdmVudExpc3RlbmVyc1sxXSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgYWxsIHRoZSBmdW5jdGlvbiBjYWxsIG9mIHRoaXMgZnVuY3Rpb24uXG4gICAqIERlc2lnbmVkIHRvIHB1bGwgaHN0b3JpY2FsIHJ1bnMgaW4gZmFzdCBtYW5uZXIgYW5kIHRoZSBjYWxsIHtAbGluayBsb2FkUnVufSB3aXRoIHNwZWNpZmllZCBydW4gSUQuXG4gICAqIFdBUk5JTkc6IEZ1bmNDYWxsIGlucHV0cy9vdXRwdXRzIGZpZWxkcyBhcmUgbm90IGluY2x1ZGVkXG4gICAqIEBwYXJhbSBmdW5jSWQgSUQgb2YgRnVuYyB3aGljaCBjYWxscyB3ZSBhcmUgbG9va2luZyBmb3IuIEdldCBpdCB1c2luZyB7QGxpbmsgZnVuYy5pZH0gZmllbGRcbiAgICogQHJldHVybnMgUHJvbWlzZSBvbiBhcnJheSBvZiBGdW5jQ2FsbHMgY29ycmVzcG9uZGluZyB0byB0aGUgcGFzc2VkIEZ1bmMgSURcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYXN5bmMgcHVsbFJ1bnMoZnVuY0lkOiBzdHJpbmcsIGZpbHRlck9wdGlvbnM6IEZpbHRlck9wdGlvbnMgPSB7fSwgbGlzdE9wdGlvbnM6IHtwYWdlU2l6ZT86IG51bWJlciwgcGFnZU51bWJlcj86IG51bWJlciwgZmlsdGVyPzogc3RyaW5nLCBvcmRlcj86IHN0cmluZ30gPSB7fSk6IFByb21pc2U8REcuRnVuY0NhbGxbXT4ge1xuICAgIHJldHVybiBoaXN0b3J5VXRpbHMucHVsbFJ1bnMoZnVuY0lkLCBmaWx0ZXJPcHRpb25zLCBsaXN0T3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGJlZm9yZSBhY3R1YWwgY29tcHV0YXRpb25zIGFyZSBtYWRlIHtAbGluayBydW59LlxuICAgKiBAcGFyYW0gZnVuY1RvQ2FsbCBGdW5jQ2FsbCBvYmplY3QgdG8gYmUgY2FsbGVkIHtAc2VlIERHLkZ1bmNDYWxsLmNhbGwoKX1cbiAgICogQHN0YWJpbGl0eSBFeHBlcmltZW50YWxcbiAgKi9cbiAgcHVibGljIGFzeW5jIG9uQmVmb3JlUnVuKGZ1bmNUb0NhbGw6IERHLkZ1bmNDYWxsKSB7fVxuXG4gIC8qKlxuICAgICogQ2FsbGVkIGFmdGVyIGFjdHVhbCBjb21wdXRhdGlvbnMgYXJlIG1hZGUge0BsaW5rIHJ1bn0uXG4gICAgKiBAcGFyYW0gcnVuRnVuYyBGdW5jQ2FsbCBvYmplY3QgYWZ0ZXIgY2FsbCBtZXRob2Qge0BzZWUgREcuRnVuY0NhbGwuY2FsbCgpfVxuICAgICogQHN0YWJpbGl0eSBFeHBlcmltZW50YWxcbiAgICovXG4gIHB1YmxpYyBhc3luYyBvbkFmdGVyUnVuKHJ1bkZ1bmM6IERHLkZ1bmNDYWxsKSB7XG4gICAgdGhpcy5vdXRwdXRQYXJhbWV0ZXJzVG9WaWV3KHRoaXMubGFzdENhbGwhKTtcbiAgfVxuXG5cbiAgcHVibGljIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuZnVuY0NhbGwpIHRocm93IG5ldyBFcnJvcignVGhlIGNvcnJlc3BvZGluZyBmdW5jdGlvbiBpcyBub3Qgc3BlY2lmaWVkJyk7XG5cbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlUnVuKHRoaXMuZnVuY0NhbGwpO1xuICAgIGNvbnN0IHBpID0gREcuVGFza0JhclByb2dyZXNzSW5kaWNhdG9yLmNyZWF0ZSgnQ2FsY3VsYXRpbmcuLi4nKTtcbiAgICB0aGlzLmZ1bmNDYWxsLm5ld0lkKCk7XG4gICAgYXdhaXQgdGhpcy5mdW5jQ2FsbC5jYWxsKCk7IC8vIG11dGF0ZXMgdGhlIGZ1bmNDYWxsIGZpZWxkXG4gICAgcGkuY2xvc2UoKTtcbiAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJSdW4odGhpcy5mdW5jQ2FsbCk7XG5cbiAgICB0aGlzLmxhc3RDYWxsID0gYXdhaXQgdGhpcy5zYXZlUnVuKHRoaXMuZnVuY0NhbGwpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRlZmF1bHRFeHBvcnRGaWxlbmFtZSA9IChmb3JtYXQ6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBgJHt0aGlzLm5hbWV9IC0gJHtuZXcgRGF0ZSgpLnRvTG9jYWxlU3RyaW5nKCl9LiR7dGhpcy5leHBvcnRDb25maWchLnN1cHBvcnRlZEV4dGVuc2lvbnNbZm9ybWF0XX1gO1xuICB9O1xuXG4gIHByb3RlY3RlZCBkZWZhdWx0U3VwcG9ydGVkRXhwb3J0RXh0ZW5zaW9ucyA9ICgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ0V4Y2VsJzogJ3hsc3gnXG4gICAgfTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgZGVmYXVsdFN1cHBvcnRlZEV4cG9ydEZvcm1hdHMgPSAoKSA9PiB7XG4gICAgcmV0dXJuIFsnRXhjZWwnXTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgZGVmYXVsdEV4cG9ydCA9IGFzeW5jIChmb3JtYXQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGxhc3RDYWxsID0gdGhpcy5sYXN0Q2FsbDtcbiAgICBpZiAoIWxhc3RDYWxsKSB0aHJvdyBuZXcgRXJyb3IoYEZ1bmN0aW9uIHdhcyBub3QgY2FsbGVkYCk7XG5cbiAgICBpZiAoIXRoaXMuZXhwb3J0Q29uZmlnIS5zdXBwb3J0ZWRGb3JtYXRzLmluY2x1ZGVzKGZvcm1hdCkpIHRocm93IG5ldyBFcnJvcihgRm9ybWF0IFwiJHtmb3JtYXR9XCIgaXMgbm90IHN1cHBvcnRlZC5gKTtcblxuICAgIGlmICghdGhpcy5mdW5jKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBjb3JyZXNwb2RpbmcgZnVuY3Rpb24gaXMgbm90IHNwZWNpZmllZCcpO1xuXG4gICAgY29uc3QgQkxPQl9UWVBFID0gJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0O2NoYXJzZXQ9VVRGLTgnO1xuICAgIGNvbnN0IGV4cG9ydFdvcmtib29rID0gbmV3IEV4Y2VsSlMuV29ya2Jvb2soKTtcblxuICAgIGNvbnN0IGlzU2NhbGFyVHlwZSA9ICh0eXBlOiBERy5UWVBFKSA9PiAoREcuVFlQRVNfU0NBTEFSLmhhcyh0eXBlKSk7XG5cbiAgICBjb25zdCBpc0RhdGFGcmFtZSA9ICh0eXBlOiBERy5UWVBFKSA9PiAodHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKTtcblxuICAgIGNvbnN0IGRmSW5wdXRzID0gdGhpcy5mdW5jLmlucHV0cy5maWx0ZXIoKGlucHV0KSA9PiBpc0RhdGFGcmFtZShpbnB1dC5wcm9wZXJ0eVR5cGUpKTtcbiAgICBjb25zdCBzY2FsYXJJbnB1dHMgPSB0aGlzLmZ1bmMuaW5wdXRzLmZpbHRlcigoaW5wdXQpID0+IGlzU2NhbGFyVHlwZShpbnB1dC5wcm9wZXJ0eVR5cGUpKTtcbiAgICBjb25zdCBkZk91dHB1dHMgPSB0aGlzLmZ1bmMub3V0cHV0cy5maWx0ZXIoKG91dHB1dCkgPT4gaXNEYXRhRnJhbWUob3V0cHV0LnByb3BlcnR5VHlwZSkpO1xuICAgIGNvbnN0IHNjYWxhck91dHB1dHMgPSB0aGlzLmZ1bmMub3V0cHV0cy5maWx0ZXIoKG91dHB1dCkgPT4gaXNTY2FsYXJUeXBlKG91dHB1dC5wcm9wZXJ0eVR5cGUpKTtcblxuICAgIGNvbnN0IGlucHV0UGFyYW1zID0gWy4uLmxhc3RDYWxsLmlucHV0UGFyYW1zLnZhbHVlcygpXSBhcyBERy5GdW5jQ2FsbFBhcmFtW107XG4gICAgY29uc3Qgb3V0cHV0UGFyYW1zID0gWy4uLmxhc3RDYWxsLm91dHB1dFBhcmFtcy52YWx1ZXMoKV0gYXMgREcuRnVuY0NhbGxQYXJhbVtdO1xuXG4gICAgZGZJbnB1dHMuZm9yRWFjaCgoZGZJbnB1dCkgPT4ge1xuICAgICAgY29uc3QgdmlzaWJsZVRpdGxlID0gZGZJbnB1dC5vcHRpb25zLmNhcHRpb24gfHwgZGZJbnB1dC5uYW1lO1xuICAgICAgY29uc3QgY3VycmVudERmU2hlZXQgPSBleHBvcnRXb3JrYm9vay5hZGRXb3Jrc2hlZXQoZ2V0U2hlZXROYW1lKHZpc2libGVUaXRsZSwgRElSRUNUSU9OLklOUFVUKSk7XG5cbiAgICAgIGNvbnN0IGN1cnJlbnREZiA9IChsYXN0Q2FsbC5pbnB1dHNbZGZJbnB1dC5uYW1lXSBhcyBERy5EYXRhRnJhbWUpO1xuICAgICAgZGZUb1NoZWV0KGN1cnJlbnREZlNoZWV0LCBjdXJyZW50RGYpO1xuICAgIH0pO1xuXG4gICAgaWYgKHNjYWxhcklucHV0cy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGlucHV0U2NhbGFyc1NoZWV0ID0gZXhwb3J0V29ya2Jvb2suYWRkV29ya3NoZWV0KCdJbnB1dCBzY2FsYXJzJyk7XG4gICAgICBzY2FsYXJzVG9TaGVldChpbnB1dFNjYWxhcnNTaGVldCwgc2NhbGFySW5wdXRzLm1hcCgoc2NhbGFySW5wdXQpID0+ICh7XG4gICAgICAgIGNhcHRpb246IHNjYWxhcklucHV0Lm9wdGlvbnNbJ2NhcHRpb24nXSB8fCBzY2FsYXJJbnB1dC5uYW1lLFxuICAgICAgICB2YWx1ZTogbGFzdENhbGwuaW5wdXRzW3NjYWxhcklucHV0Lm5hbWVdLFxuICAgICAgICB1bml0czogc2NhbGFySW5wdXQub3B0aW9uc1sndW5pdHMnXSB8fCAnJyxcbiAgICAgIH0pKSk7XG4gICAgfVxuXG4gICAgZGZPdXRwdXRzLmZvckVhY2goKGRmT3V0cHV0KSA9PiB7XG4gICAgICBjb25zdCB2aXNpYmxlVGl0bGUgPSBkZk91dHB1dC5vcHRpb25zLmNhcHRpb24gfHwgZGZPdXRwdXQubmFtZTtcbiAgICAgIGNvbnN0IGN1cnJlbnREZlNoZWV0ID0gZXhwb3J0V29ya2Jvb2suYWRkV29ya3NoZWV0KGdldFNoZWV0TmFtZSh2aXNpYmxlVGl0bGUsIERJUkVDVElPTi5PVVRQVVQpKTtcblxuICAgICAgY29uc3QgY3VycmVudERmID0gKGxhc3RDYWxsLm91dHB1dHNbZGZPdXRwdXQubmFtZV0gYXMgREcuRGF0YUZyYW1lKTtcbiAgICAgIGRmVG9TaGVldChjdXJyZW50RGZTaGVldCwgY3VycmVudERmKTtcbiAgICB9KTtcblxuXG4gICAgaWYgKHNjYWxhck91dHB1dHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBvdXRwdXRTY2FsYXJzU2hlZXQgPSBleHBvcnRXb3JrYm9vay5hZGRXb3Jrc2hlZXQoJ091dHB1dCBzY2FsYXJzJyk7XG4gICAgICBzY2FsYXJzVG9TaGVldChvdXRwdXRTY2FsYXJzU2hlZXQsIHNjYWxhck91dHB1dHMubWFwKChzY2FsYXJPdXRwdXQpID0+ICh7XG4gICAgICAgIGNhcHRpb246IHNjYWxhck91dHB1dC5vcHRpb25zWydjYXB0aW9uJ10gfHwgc2NhbGFyT3V0cHV0Lm5hbWUsXG4gICAgICAgIHZhbHVlOiBsYXN0Q2FsbC5vdXRwdXRzW3NjYWxhck91dHB1dC5uYW1lXSxcbiAgICAgICAgdW5pdHM6IHNjYWxhck91dHB1dC5vcHRpb25zWyd1bml0cyddIHx8ICcnLFxuICAgICAgfSkpKTtcbiAgICB9XG5cbiAgICBjb25zdCB0YWJDb250cm9sID0gdGhpcy5yZXN1bHRzVGFiQ29udHJvbDtcbiAgICBpZiAodGFiQ29udHJvbCkge1xuICAgICAgZm9yIChjb25zdCB0YWJMYWJlbCBvZiB0aGlzLnRhYnNMYWJlbHMpIHtcbiAgICAgICAgdGFiQ29udHJvbC5jdXJyZW50UGFuZSA9IHRhYkNvbnRyb2wuZ2V0UGFuZSh0YWJMYWJlbCk7XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIDEwMCkpO1xuICAgICAgICBpZiAodGFiTGFiZWwgPT09ICdJbnB1dCcpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGlucHV0UGFyYW0gb2YgaW5wdXRQYXJhbXMuZmlsdGVyKChpbnB1dFBhcmFtKSA9PiBpbnB1dFBhcmFtLnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKSkge1xuICAgICAgICAgICAgY29uc3Qgbm9uR3JpZFZpZXdlcnMgPSAoaW5wdXRQYXJhbS5hdXhbJ3ZpZXdlcnMnXSBhcyBERy5WaWV3ZXJbXSkuZmlsdGVyKCh2aWV3ZXIpID0+IHZpZXdlci50eXBlICE9PSBERy5WSUVXRVIuR1JJRCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRmSW5wdXQgPSBkZklucHV0cy5maW5kKChpbnB1dCkgPT4gaW5wdXQubmFtZSA9PT0gaW5wdXRQYXJhbS5uYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IHZpc2libGVUaXRsZSA9IGRmSW5wdXQhLm9wdGlvbnMuY2FwdGlvbiB8fCBpbnB1dFBhcmFtLm5hbWU7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50RGYgPSAobGFzdENhbGwuaW5wdXRzW2RmSW5wdXQhLm5hbWVdIGFzIERHLkRhdGFGcmFtZSk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgW2luZGV4LCB2aWV3ZXJdIG9mIG5vbkdyaWRWaWV3ZXJzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgICBpZiAodmlld2VyLnJvb3QucGFyZW50RWxlbWVudD8uc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJhbUdyaWRTd2l0Y2hlcy5nZXQoaW5wdXRQYXJhbS5uYW1lKT8uY2xpY2soKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCA1MCkpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYXdhaXQgcGxvdFRvU2hlZXQoXG4gICAgICAgICAgICAgICAgZXhwb3J0V29ya2Jvb2ssXG4gICAgICAgICAgICAgICAgZXhwb3J0V29ya2Jvb2suZ2V0V29ya3NoZWV0KGdldFNoZWV0TmFtZSh2aXNpYmxlVGl0bGUsIERJUkVDVElPTi5JTlBVVCkpLFxuICAgICAgICAgICAgICAgIHZpZXdlci5yb290LFxuICAgICAgICAgICAgICAgIGN1cnJlbnREZi5jb2x1bW5zLmxlbmd0aCArIDIsXG4gICAgICAgICAgICAgICAgKGluZGV4ID4gMCkgPyBNYXRoLmNlaWwobm9uR3JpZFZpZXdlcnNbaW5kZXgtMV0ucm9vdC5jbGllbnRIZWlnaHQgLyAyMCkgKyAxIDogMFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yIChjb25zdCBvdXRwdXRQYXJhbSBvZiBvdXRwdXRQYXJhbXMuZmlsdGVyKChvdXRwdXRQYXJhbSkgPT4gb3V0cHV0UGFyYW0ucHJvcGVydHkucHJvcGVydHlUeXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUgJiYgb3V0cHV0UGFyYW0ucHJvcGVydHkuY2F0ZWdvcnkgPT09IHRhYkxhYmVsKSkge1xuICAgICAgICAgICAgY29uc3Qgbm9uR3JpZFZpZXdlcnMgPSAob3V0cHV0UGFyYW0uYXV4Wyd2aWV3ZXJzJ10gYXMgREcuVmlld2VyW10pLmZpbHRlcigodmlld2VyKSA9PiB2aWV3ZXIudHlwZSAhPT0gREcuVklFV0VSLkdSSUQpO1xuXG4gICAgICAgICAgICBjb25zdCBkZk91dHB1dCA9IGRmT3V0cHV0cy5maW5kKChpbnB1dCkgPT4gaW5wdXQubmFtZSA9PT0gb3V0cHV0UGFyYW0ubmFtZSk7XG4gICAgICAgICAgICBjb25zdCB2aXNpYmxlVGl0bGUgPSBkZk91dHB1dCEub3B0aW9ucy5jYXB0aW9uIHx8IG91dHB1dFBhcmFtLm5hbWU7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50RGYgPSAobGFzdENhbGwub3V0cHV0c1tkZk91dHB1dCEubmFtZV0gYXMgREcuRGF0YUZyYW1lKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBbaW5kZXgsIHZpZXdlcl0gb2Ygbm9uR3JpZFZpZXdlcnMuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgIGlmICh2aWV3ZXIucm9vdC5wYXJlbnRFbGVtZW50Py5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmFtR3JpZFN3aXRjaGVzLmdldChvdXRwdXRQYXJhbS5uYW1lKT8uY2xpY2soKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCA1MCkpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYXdhaXQgcGxvdFRvU2hlZXQoXG4gICAgICAgICAgICAgICAgZXhwb3J0V29ya2Jvb2ssXG4gICAgICAgICAgICAgICAgZXhwb3J0V29ya2Jvb2suZ2V0V29ya3NoZWV0KGdldFNoZWV0TmFtZSh2aXNpYmxlVGl0bGUsIERJUkVDVElPTi5PVVRQVVQpKSxcbiAgICAgICAgICAgICAgICB2aWV3ZXIucm9vdCxcbiAgICAgICAgICAgICAgICBjdXJyZW50RGYuY29sdW1ucy5sZW5ndGggKyAyLFxuICAgICAgICAgICAgICAgIChpbmRleCA+IDApID8gTWF0aC5jZWlsKG5vbkdyaWRWaWV3ZXJzW2luZGV4LTFdLnJvb3QuY2xpZW50SGVpZ2h0IC8gMjApICsgMSA6IDBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBidWZmZXIgPSBhd2FpdCBleHBvcnRXb3JrYm9vay54bHN4LndyaXRlQnVmZmVyKCk7XG5cbiAgICByZXR1cm4gbmV3IEJsb2IoW2J1ZmZlcl0sIHt0eXBlOiBCTE9CX1RZUEV9KTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgZ2V0IGlzSW5wdXRQYW5lbFJlcXVpcmVkKCkge1xuICAgIHJldHVybiB0aGlzLmZ1bmM/LmlucHV0cy5zb21lKChwKSA9PiBwLnByb3BlcnR5VHlwZSA9PSBERy5UWVBFLkRBVEFfRlJBTUUgJiYgcC5vcHRpb25zWyd2aWV3ZXInXSAhPSBudWxsKSB8fCBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgb3V0UGFyYW1DYXRlZ29yaWVzKCkge1xuICAgIHJldHVybiBbXG4gICAgICAuLi5uZXcgU2V0KHRoaXMuZnVuYyEub3V0cHV0cy5tYXAoKHApID0+IHAuY2F0ZWdvcnkpKSAvLyBnZXQgYWxsIG91dHB1dCBwYXJhbXMnIGNhdGVnb3JpZXNcbiAgICBdOyAvLyBrZWVwIG9ubHkgdW5pcXVlIG9mIHRoZW1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgb3V0cHV0VGFic0xhYmVscygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgLi4udGhpcy5vdXRQYXJhbUNhdGVnb3JpZXMsXG4gICAgICAuLi50aGlzLm91dFBhcmFtQ2F0ZWdvcmllcy5maW5kKCh2YWwpID0+IHZhbCA9PT0gJ01pc2MnKSA/IFsnT3V0cHV0J10gOiBbXSwgLy8gaWYgbm8gY2F0ZWdvcmllcyBhcmUgc3RhdGVkLCB0aGUgZGVmYXVsdCBjYXRlZ29yeSBpcyBhZGRlZFxuICAgIF07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHRhYnNMYWJlbHMoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucGFyYW1Ub0NhdGVnb3J5TWFwKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgcGFyYW1Ub0NhdGVnb3J5TWFwKCkge1xuICAgIGNvbnN0IG1hcCA9IHt9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPjtcbiAgICBpZiAodGhpcy5pc0lucHV0UGFuZWxSZXF1aXJlZClcbiAgICAgIHRoaXMuZnVuYyEuaW5wdXRzLmZvckVhY2goKHApID0+IG1hcFsnSW5wdXQnXSA/IG1hcFsnSW5wdXQnXS5wdXNoKHAubmFtZSk6IG1hcFsnSW5wdXQnXSA9IFtwLm5hbWVdKTtcblxuICAgIHRoaXMuZnVuYyEub3V0cHV0cy5mb3JFYWNoKChwKSA9PiBtYXBbcC5jYXRlZ29yeSA9PT0gJ01pc2MnID8gJ091dHB1dCc6IHAuY2F0ZWdvcnldID8gbWFwW3AuY2F0ZWdvcnkgPT09ICdNaXNjJyA/ICdPdXRwdXQnOiBwLmNhdGVnb3J5XS5wdXNoKHAubmFtZSkgOiBtYXBbcC5jYXRlZ29yeSA9PT0gJ01pc2MnID8gJ091dHB1dCc6IHAuY2F0ZWdvcnldID0gW3AubmFtZV0pO1xuXG4gICAgcmV0dXJuIG1hcDtcbiAgfVxuXG5cbiAgcHJvdGVjdGVkIHJlbmRlclJ1blNlY3Rpb24oY2FsbDogREcuRnVuY0NhbGwpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHVpLndhaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcnVuQnV0dG9uID0gdWkuYmlnQnV0dG9uKCdSdW4nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNhbGwuYXV4Wyd2aWV3J10gPSB0aGlzLmRhcnQ7XG4gICAgICAgIGF3YWl0IHRoaXMucnVuKCk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGVkaXRvciA9IHVpLmRpdigpO1xuICAgICAgY29uc3QgaW5wdXRzOiBERy5JbnB1dEJhc2VbXSA9IGF3YWl0IGNhbGwuYnVpbGRFZGl0b3IoZWRpdG9yLCB7Y29uZGVuc2VkOiB0cnVlfSk7XG4gICAgICBlZGl0b3IuY2xhc3NMaXN0LmFkZCgndWktZm9ybScpO1xuICAgICAgY29uc3QgYnV0dG9ucyA9IHVpLmRpdkgoW3J1bkJ1dHRvbl0sIHtzdHlsZTogeydqdXN0aWZ5LWNvbnRlbnQnOiAnc3BhY2UtYmV0d2Vlbid9fSk7XG4gICAgICBlZGl0b3IuYXBwZW5kQ2hpbGQoYnV0dG9ucyk7XG4gICAgICByZXR1cm4gZWRpdG9yO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclJlc3VsdHMoc3dpdGNoVG9PdXRwdXQ6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgY29uc3QgY2F0ZWdvcmllcyA9IHRoaXMudGFic0xhYmVscztcblxuICAgIGlmICgoY2F0ZWdvcmllcy5sZW5ndGggPiAxIHx8IChjYXRlZ29yaWVzLmxlbmd0aCA9PSAxICYmIGNhdGVnb3JpZXNbMF0gIT0gJ01pc2MnKSkpIHtcbiAgICAgIHRoaXMucmVzdWx0c1RhYkNvbnRyb2wgPSBERy5UYWJDb250cm9sLmNyZWF0ZSgpO1xuICAgICAgZm9yIChjb25zdCBjIG9mIGNhdGVnb3JpZXMpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJlc3VsdFRhYnMuaGFzKGMpKVxuICAgICAgICAgIHRoaXMucmVzdWx0VGFicy5zZXQoYywgdWkuZGl2KFtdLCAndWktcGFuZWwsIGdyb2stZnVuYy1yZXN1bHRzLCB1aS1ib3gnKSk7XG4gICAgICAgIGxldCBuYW1lID0gYztcbiAgICAgICAgaWYgKHRoaXMuaXNJbnB1dFBhbmVsUmVxdWlyZWQgJiYgY2F0ZWdvcmllcy5sZW5ndGggPT0gMiAmJiBjID09ICdNaXNjJylcbiAgICAgICAgICBuYW1lID0gJ09VVFBVVCc7XG4gICAgICAgIHRoaXMucmVzdWx0c1RhYkNvbnRyb2wuYWRkUGFuZShuYW1lLCAoKSA9PiB0aGlzLnJlc3VsdFRhYnMuZ2V0KGMpID8/IHVpLmRpdigpKTtcbiAgICAgIH1cbiAgICAgIGlmIChjYXRlZ29yaWVzLmxlbmd0aCA+IDEgJiYgdGhpcy5pc0lucHV0UGFuZWxSZXF1aXJlZCAmJiBzd2l0Y2hUb091dHB1dClcbiAgICAgICAgdGhpcy5yZXN1bHRzVGFiQ29udHJvbC5jdXJyZW50UGFuZSA9IHRoaXMucmVzdWx0c1RhYkNvbnRyb2wucGFuZXNbMV07XG4gICAgICB0aGlzLnJlc3VsdHNEaXYgPSB0aGlzLnJlc3VsdHNUYWJDb250cm9sLnJvb3Q7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvdXRwdXRQYXJhbWV0ZXJzVG9WaWV3KGNhbGw6IERHLkZ1bmNDYWxsKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhclJlc3VsdHModHJ1ZSk7XG4gICAgZm9yIChjb25zdCBwIG9mIGNhbGwub3V0cHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSkge1xuICAgICAgcC5wcm9jZXNzT3V0cHV0KCk7XG4gICAgICBpZiAocC5wcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT0gREcuVFlQRS5EQVRBX0ZSQU1FICYmIHAudmFsdWUgIT0gbnVsbClcbiAgICAgICAgdGhpcy5hcHBlbmRPdXRwdXREZihwLCB7Y2FwdGlvbjogcC5wcm9wZXJ0eS5uYW1lLCBjYXRlZ29yeTogcC5wcm9wZXJ0eS5jYXRlZ29yeX0pO1xuICAgICAgZWxzZSB0aGlzLmFwcGVuZFJlc3VsdFNjYWxhcihwLCB7Y2FwdGlvbjogcC5wcm9wZXJ0eS5uYW1lLCBjYXRlZ29yeTogcC5wcm9wZXJ0eS5jYXRlZ29yeX0pO1xuICAgIH1cbiAgICB0aGlzLmJ1aWxkT3V0cHV0QmxvY2soKTtcbiAgfVxuXG4gIC8vIG1hcHBwaW5nIG9mIHBhcmFtIHRvIHRoZSBzd2l0Y2hjZXMgb2YgdGhlaXIgdmlld2Vycy9ncmlkc1xuICBwcml2YXRlIHBhcmFtR3JpZFN3aXRjaGVzOiBNYXA8c3RyaW5nLCBIVE1MRWxlbWVudD4gPSBuZXcgTWFwKCk7XG4gIC8vIG1hcHBwaW5nIG9mIHBhcmFtIHRvIHRoZWlyIHZpZXdlcnMgcGxhY2VkIG9uIERPTVxuICBwcml2YXRlIGV4aXN0aW5nUGFyYW1WaWV3ZXJzOiBNYXA8c3RyaW5nLCBERy5WaWV3ZXJbXT4gPSBuZXcgTWFwKCk7XG4gIC8vIG1hcHBwaW5nIG9mIHBhcmFtIHRvIHRoZWlyIGh0bWwgZWxlbWVudHNcbiAgcHJpdmF0ZSBwYXJhbVNwYW5zOiBNYXA8c3RyaW5nLCBIVE1MRWxlbWVudD4gPSBuZXcgTWFwKCk7XG4gIC8vIG1hcHBwaW5nIG9mIHRhYiBuYW1lcyB0byB0aGVpciBjb250ZW50XG4gIHByaXZhdGUgcmVzdWx0VGFiczogTWFwPFN0cmluZywgSFRNTEVsZW1lbnQ+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIHJlc3VsdHNUYWJDb250cm9sOiBERy5UYWJDb250cm9sIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlc3VsdHNEaXY6IEhUTUxFbGVtZW50ID0gdWkucGFuZWwoW10sICdncm9rLWZ1bmMtcmVzdWx0cycpO1xuXG4gIHByb3RlY3RlZCBjb250cm9sc1Jvb3Q6IEhUTUxEaXZFbGVtZW50ID0gdWkuYm94KG51bGwsIHtzdHlsZToge21heFdpZHRoOiAnMzcwcHgnfX0pO1xuICBwcm90ZWN0ZWQgcmVzdWx0c1Jvb3Q6IEhUTUxEaXZFbGVtZW50ID0gdWkuYm94KCk7XG4gIHByb3RlY3RlZCBoaXN0b3J5Um9vdDogSFRNTERpdkVsZW1lbnQgPSB1aS5kaXZWKFtdLCB7c3R5bGU6IHsnanVzdGlmeS1jb250ZW50JzogJ2NlbnRlcid9fSk7XG4gIHByb3RlY3RlZCBpbnB1dHNSb290OiBIVE1MRGl2RWxlbWVudCA9IHVpLnBhbmVsKFtdLCAnZ3Jvay1mdW5jLXJlc3VsdHMsIHVpLWJveCcpO1xuXG4gIHByaXZhdGUgYXBwZW5kT3V0cHV0RGYocGFyYW06IERHLkZ1bmNDYWxsUGFyYW0sIG9wdGlvbnM/OiB7IGNhcHRpb24/OiBzdHJpbmcsIGNhdGVnb3J5Pzogc3RyaW5nLCBoZWlnaHQ/OiBudW1iZXIgfSkge1xuICAgIGNvbnN0IHBhcmFtRGYgPSBwYXJhbS52YWx1ZSBhcyBERy5EYXRhRnJhbWU7XG4gICAgY29uc3QgaGVpZ2h0ID0gb3B0aW9ucz8uaGVpZ2h0ID8/IDQwMDtcbiAgICBjb25zdCBwYXJhbVZpZXdlcnM6IERHLlZpZXdlcltdID0gcGFyYW0uYXV4Wyd2aWV3ZXJzJ10gPz8gW107IC8vIHN0b3JpbmcgdGhlIHZpZXdlcnMgb2YgRGZcbiAgICBjb25zdCBwYXJhbUNhcHRpb24gPSBvcHRpb25zPy5jYXB0aW9uID8/IHBhcmFtLmF1eFsndmlld2VyVGl0bGUnXSA/PyBwYXJhbS5wcm9wZXJ0eS5jYXB0aW9uID8/ICcnO1xuICAgIGxldCBleGlzdGluZ1ZpZXdlcnMgPSB0aGlzLmV4aXN0aW5nUGFyYW1WaWV3ZXJzLmdldChwYXJhbS5uYW1lKTtcbiAgICBpZiAoZXhpc3RpbmdWaWV3ZXJzICE9IG51bGwpIHtcbiAgICAgIGZvciAoY29uc3QgdiBvZiBleGlzdGluZ1ZpZXdlcnMpXG4gICAgICAgIHYuZGF0YUZyYW1lID0gcGFyYW1EZjtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBleGlzdGluZ1ZpZXdlcnMgPz89IFtdO1xuICAgIHRoaXMuZXhpc3RpbmdQYXJhbVZpZXdlcnMuc2V0KHBhcmFtLm5hbWUsIGV4aXN0aW5nVmlld2Vycyk7XG4gICAgaWYgKHBhcmFtVmlld2Vycy5sZW5ndGggPT0gMClcbiAgICAgIHBhcmFtVmlld2Vycy5wdXNoKHBhcmFtRGYucGxvdC5ncmlkKCkpO1xuXG4gICAgY29uc3Qgdmlld2Vyc1RvSGlkZTogSFRNTEVsZW1lbnRbXSA9IFtdO1xuICAgIGxldCBibG9ja3M6IG51bWJlciA9IDA7XG4gICAgbGV0IGJsb2NrV2lkdGg6IG51bWJlciA9IDA7XG4gICAgY29uc3QgZ3JpZFdyYXBwZXIgPSB1aS5ib3gobnVsbCwge3N0eWxlOiB7aGVpZ2h0OiAnMTAwJSd9fSk7XG5cbiAgICBjb25zdCBpc0dyaWRTd2l0Y2hhYmxlID0gd3UocGFyYW1WaWV3ZXJzKS5ldmVyeSgodjogREcuVmlld2VyKSA9PiB2LnR5cGUgIT09ICdHcmlkJyk7XG4gICAgJChncmlkV3JhcHBlcikuaGlkZSgpO1xuXG4gICAgY29uc3QgZ2V0SGVhZGVyID0gKCkgPT4ge1xuICAgICAgY29uc3QgaGVhZGVyTGFiZWwgPSBwYXJhbUNhcHRpb24gPz8gcGFyYW1EZi5uYW1lID8/ICcnO1xuICAgICAgY29uc3QgaGVhZGVyID0gdWkuZGl2KFtdLCAnZ3Jvay1mdW5jLXJlc3VsdHMtaGVhZGVyJyk7XG4gICAgICBpZiAoaGVhZGVyTGFiZWwgIT0gJycpIHtcbiAgICAgICAgY29uc3QgaCA9IHVpLmgxKGhlYWRlckxhYmVsKTtcbiAgICAgICAgdWkuVG9vbHRpcC5iaW5kKGgsICgpID0+IGhlYWRlckxhYmVsKTtcbiAgICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKGgpO1xuICAgICAgfVxuICAgICAgaWYgKGlzR3JpZFN3aXRjaGFibGUpIHtcbiAgICAgICAgY29uc3QgaWNvbiA9IHVpLmljb25TdmcoJ3RhYmxlJywgKGUpID0+IHtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHVpLnNldERpc3BsYXlBbGwodmlld2Vyc1RvSGlkZSwgdmlld2Vyc1RvSGlkZS5zb21lKCh2aWV3ZXIpID0+IHZpZXdlci5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpKTtcbiAgICAgICAgICB1aS5zZXREaXNwbGF5KGdyaWRXcmFwcGVyLCBncmlkV3JhcHBlci5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpO1xuICAgICAgICB9LCAnU2hvdyBncmlkJyk7XG4gICAgICAgIGhlYWRlci5hcHBlbmRDaGlsZChpY29uKTtcbiAgICAgICAgdGhpcy5wYXJhbUdyaWRTd2l0Y2hlcy5zZXQocGFyYW0ubmFtZSwgaWNvbik7XG4gICAgICB9XG4gICAgICBpZiAoIWdyb2suc2hlbGwudGFibGVzLmluY2x1ZGVzKHBhcmFtRGYpKSB7XG4gICAgICAgIGhlYWRlci5hcHBlbmRDaGlsZChcbiAgICAgICAgICB1aS5pY29ucy5hZGQoKGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGNvbnN0IHYgPSBncm9rLnNoZWxsLmFkZFRhYmxlVmlldyhwYXJhbURmKTtcbiAgICAgICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3Qgdmlld2VyIG9mIHBhcmFtVmlld2Vycykge1xuICAgICAgICAgICAgICAgIGlmICh2aWV3ZXIudHlwZSAhPSAnR3JpZCcpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZpZXdlciA9IGF3YWl0IHBhcmFtRGYucGxvdC5mcm9tVHlwZSh2aWV3ZXIudHlwZSkgYXMgREcuVmlld2VyO1xuICAgICAgICAgICAgICAgICAgbmV3Vmlld2VyLnNldE9wdGlvbnModmlld2VyLmdldE9wdGlvbnMoKSk7XG4gICAgICAgICAgICAgICAgICB2LmFkZFZpZXdlcihuZXdWaWV3ZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgICdBZGQgdG8gd29ya3NwYWNlJ1xuICAgICAgICAgICkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhlYWRlcjtcbiAgICB9O1xuXG4gICAgaWYgKGlzR3JpZFN3aXRjaGFibGUpIHtcbiAgICAgIGNvbnN0IGdyaWQgPSBwYXJhbURmLnBsb3QuZ3JpZCgpO1xuICAgICAgZ3JpZFdyYXBwZXIuYXBwZW5kQ2hpbGQoZ3JpZC5yb290KTtcbiAgICAgIGV4aXN0aW5nVmlld2Vycy5wdXNoKGdyaWQpO1xuICAgIH1cblxuICAgIGNvbnN0IGhlYWRlciA9IGdldEhlYWRlcigpO1xuICAgIGNvbnN0IHdyYXBwZXIgPSB1aS5kaXZIKFtdLCB7c3R5bGU6IHtoZWlnaHQ6ICcxMDAlJ319KTtcbiAgICBwYXJhbVZpZXdlcnMuZm9yRWFjaCgodmlld2VyKSA9PiB7XG4gICAgICBpZiAodmlld2VyPy50YWdzID09IG51bGwpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGV4aXN0aW5nVmlld2VycyEucHVzaCh2aWV3ZXIpO1xuICAgICAgY29uc3Qgdmlld2VyU2l6ZSA9IHZpZXdlci50YWdzWycuYmxvY2stc2l6ZSddID8/IDEwMDsgLy8gZ2V0dGluZyBgKGJsb2NrOiAyNSlgIHZhbHVlOyBpZiBub3QgZGVmaW5lZCwgaXQgaXMgMTAwXG5cbiAgICAgIHZpZXdlci5yb290LnN0eWxlLmhlaWdodCA9ICcxMDAlJztcbiAgICAgIHZpZXdlci5yb290LmNsYXNzTGlzdC5hZGQoYHVpLWJsb2NrLSR7dmlld2VyU2l6ZX1gKTtcbiAgICAgIGlmIChibG9ja3MgKyB2aWV3ZXJTaXplIDw9IDEwMCkge1xuICAgICAgICB2aWV3ZXJzVG9IaWRlLnB1c2god3JhcHBlcik7XG4gICAgICAgIGJsb2NrV2lkdGggKz0gdmlld2VyU2l6ZTtcbiAgICAgIH1cbiAgICAgIGJsb2NrcyArPSB2aWV3ZXJTaXplO1xuICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZCh2aWV3ZXIucm9vdCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBibG9jayA9IHVpLmRpdlYoW2hlYWRlciwgd3JhcHBlciwgZ3JpZFdyYXBwZXJdLCB7c3R5bGU6IHtoZWlnaHQ6IGAke2hlaWdodH1weGAsIHdpZHRoOiBgJHtibG9ja1dpZHRofSVgfX0pO1xuICAgIGJsb2NrLmNsYXNzTGlzdC5hZGQoJ3VpLWJveCcpO1xuICAgIHRoaXMuYXBwZW5kUmVzdWx0RWxlbWVudChibG9jaywgb3B0aW9ucz8uY2F0ZWdvcnkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBlbmRSZXN1bHRTY2FsYXIocGFyYW06IERHLkZ1bmNDYWxsUGFyYW0sIG9wdGlvbnM6IHsgY2FwdGlvbj86IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgaGVpZ2h0PzogbnVtYmVyIH0pIHtcbiAgICBjb25zdCBzcGFuID0gdWkuc3BhbihbYCR7b3B0aW9ucy5jYXB0aW9uID8/IHBhcmFtLm5hbWV9OiBgLCBgJHtwYXJhbS52YWx1ZX1gXSk7XG4gICAgaWYgKCF0aGlzLnBhcmFtU3BhbnMuZ2V0KHBhcmFtLm5hbWUpKSB7XG4gICAgICBpZiAodGhpcy5yZXN1bHRzVGFiQ29udHJvbClcbiAgICAgICAgdGhpcy5yZXN1bHRUYWJzLmdldChvcHRpb25zLmNhdGVnb3J5KSEuYXBwZW5kQ2hpbGQoc3Bhbik7XG4gICAgICBlbHNlXG4gICAgICAgIHRoaXMucmVzdWx0c0Rpdi5hcHBlbmRDaGlsZChzcGFuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYXJhbVNwYW5zLmdldChwYXJhbS5uYW1lKT8ucmVwbGFjZVdpdGgoc3Bhbik7XG4gICAgfVxuICAgIHRoaXMucGFyYW1TcGFucy5zZXQocGFyYW0ubmFtZSwgc3Bhbik7XG4gIH1cblxuICBwcml2YXRlIGFwcGVuZFJlc3VsdEVsZW1lbnQoZDogSFRNTEVsZW1lbnQsIGNhdGVnb3J5Pzogc3RyaW5nKSB7XG4gICAgaWYgKGNhdGVnb3J5ICE9IG51bGwgJiYgdGhpcy5yZXN1bHRzVGFiQ29udHJvbCAhPSB1bmRlZmluZWQgJiYgdGhpcy5yZXN1bHRUYWJzLmdldChjYXRlZ29yeSkgIT0gbnVsbClcbiAgICAgIHRoaXMucmVzdWx0VGFicy5nZXQoY2F0ZWdvcnkpIS5hcHBlbmRDaGlsZChkKTtcbiAgICBlbHNlXG4gICAgICB0aGlzLnJlc3VsdHNEaXYuYXBwZW5kQ2hpbGQoZCk7XG4gIH1cbn1cblxuY29uc3QgZ2V0U2hlZXROYW1lID0gKG5hbWU6IHN0cmluZywgZGlyZWN0aW9uOiBESVJFQ1RJT04pID0+IHtcbiAgY29uc3QgaWRlYWxOYW1lID0gYCR7ZGlyZWN0aW9ufSAtICR7bmFtZX1gO1xuICByZXR1cm4gKGlkZWFsTmFtZS5sZW5ndGggPiAzMSkgPyBuYW1lLnN1YnN0cmluZygwLCAzMikgOiBpZGVhbE5hbWU7XG59O1xuXG5lbnVtIERJUkVDVElPTiB7XG4gIElOUFVUID0gJ0lucHV0JyxcbiAgT1VUUFVUID0gJ091dHB1dCdcbn1cblxuY29uc3Qgc2NhbGFyc1RvU2hlZXQgPSAoc2hlZXQ6IEV4Y2VsSlMuV29ya3NoZWV0LCBzY2FsYXJzOiB7IGNhcHRpb246IHN0cmluZywgdmFsdWU6IHN0cmluZywgdW5pdHM6IHN0cmluZyB9W10pID0+IHtcbiAgc2hlZXQuYWRkUm93KFsnUGFyYW1ldGVyJywgJ1ZhbHVlJywgJ1VuaXRzJ10pLmZvbnQgPSB7Ym9sZDogdHJ1ZX07XG4gIHNjYWxhcnMuZm9yRWFjaCgoc2NhbGFyKSA9PiB7XG4gICAgc2hlZXQuYWRkUm93KFtzY2FsYXIuY2FwdGlvbiwgc2NhbGFyLnZhbHVlLCBzY2FsYXIudW5pdHNdKTtcbiAgfSk7XG5cbiAgc2hlZXQuZ2V0Q29sdW1uKDEpLndpZHRoID0gTWF0aC5tYXgoXG4gICAgLi4uc2NhbGFycy5tYXAoKHNjYWxhcikgPT4gc2NhbGFyLmNhcHRpb24udG9TdHJpbmcoKS5sZW5ndGgpLCAnUGFyYW1ldGVyJy5sZW5ndGhcbiAgKSAqIDEuMjtcbiAgc2hlZXQuZ2V0Q29sdW1uKDIpLndpZHRoID0gTWF0aC5tYXgoLi4uc2NhbGFycy5tYXAoKHNjYWxhcikgPT4gc2NhbGFyLnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoKSwgJ1ZhbHVlJy5sZW5ndGgpICogMS4yO1xuICBzaGVldC5nZXRDb2x1bW4oMykud2lkdGggPSBNYXRoLm1heCguLi5zY2FsYXJzLm1hcCgoc2NhbGFyKSA9PiBzY2FsYXIudW5pdHMudG9TdHJpbmcoKS5sZW5ndGgpLCAnVW5pdHMnLmxlbmd0aCkgKiAxLjI7XG59O1xuXG5jb25zdCBkZlRvU2hlZXQgPSAoc2hlZXQ6IEV4Y2VsSlMuV29ya3NoZWV0LCBkZjogREcuRGF0YUZyYW1lKSA9PiB7XG4gIHNoZWV0LmFkZFJvdyhkZi5jb2x1bW5zLm5hbWVzKCkpLmZvbnQgPSB7Ym9sZDogdHJ1ZX07XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGYucm93Q291bnQ7IGkrKylcbiAgICBzaGVldC5hZGRSb3coWy4uLmRmLnJvdyhpKS5jZWxsc10ubWFwKChjZWxsOiBERy5DZWxsKSA9PiBjZWxsLnZhbHVlKSk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZi5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgc2hlZXQuZ2V0Q29sdW1uKGkgKyAxKS53aWR0aCA9XG4gICAgICBNYXRoLm1heChcbiAgICAgICAgLi4uZGYuY29sdW1ucy5ieUluZGV4KGkpLmNhdGVnb3JpZXMubWFwKChjYXRlZ29yeSkgPT4gY2F0ZWdvcnkudG9TdHJpbmcoKS5sZW5ndGgpLFxuICAgICAgICBkZi5jb2x1bW5zLmJ5SW5kZXgoaSkubmFtZS5sZW5ndGhcbiAgICAgICkgKiAxLjI7XG4gIH1cbn07XG5cbmNvbnN0IHBsb3RUb1NoZWV0ID0gYXN5bmMgKGV4cG9ydFdiOiBFeGNlbEpTLldvcmtib29rLCBzaGVldDogRXhjZWxKUy5Xb3Jrc2hlZXQsIHBsb3Q6IEhUTUxFbGVtZW50LCBjb2x1bW5Gb3JJbWFnZTogbnVtYmVyLCByb3dGb3JJbWFnZTogbnVtYmVyID0gMCkgPT4ge1xuICBjb25zdCBjYW52YXMgPSBhd2FpdCBodG1sMmNhbnZhcyhwbG90IGFzIEhUTUxFbGVtZW50LCB7bG9nZ2luZzogZmFsc2V9KTtcbiAgY29uc3QgZGF0YVVybCA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL3BuZycpO1xuXG4gIGNvbnN0IGltYWdlSWQgPSBleHBvcnRXYi5hZGRJbWFnZSh7XG4gICAgYmFzZTY0OiBkYXRhVXJsLFxuICAgIGV4dGVuc2lvbjogJ3BuZycsXG4gIH0pO1xuICBzaGVldC5hZGRJbWFnZShpbWFnZUlkLCB7XG4gICAgdGw6IHtjb2w6IGNvbHVtbkZvckltYWdlLCByb3c6IHJvd0ZvckltYWdlfSxcbiAgICBleHQ6IHt3aWR0aDogY2FudmFzLndpZHRoLCBoZWlnaHQ6IGNhbnZhcy5oZWlnaHR9LFxuICB9KTtcbn07XG4iXX0=
|
|
1205
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tdmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImZ1bmN0aW9uLXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsZ0NBQWdDO0FBQ2hDLDRCQUE0QjtBQUM1QixPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxXQUFXLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLENBQUMsTUFBTSxVQUFVLENBQUM7QUFDekIsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFN0I7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLEdBQUcsRUFBRTtJQUNuQyxPQUFPLENBQUMsTUFBVyxFQUFFLFVBQWtCLEVBQUUsVUFBOEIsRUFBRSxFQUFFO1FBQ3pFLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFFbEMsVUFBVSxDQUFDLEtBQUssR0FBRyxVQUFlLEdBQUcsSUFBVzs7Z0JBQzlDLElBQUk7b0JBQ0YsT0FBTyxNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7aUJBQzNDO2dCQUFDLE9BQU8sR0FBUSxFQUFFO29CQUNqQixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBRSxHQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ3pDLE1BQU0sR0FBRyxDQUFDO2lCQUNYO1lBQ0gsQ0FBQztTQUFBLENBQUM7SUFDSixDQUFDLENBQUM7QUFDSixDQUFDLENB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QUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUNsQyxHQUFHLEdBQUcsQ0FBQztLQUNYO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxXQUFXLEdBQUcsQ0FBTyxRQUEwQixFQUFFLEtBQXdCLEVBQUUsSUFBaUIsRUFBRSxjQUFzQixFQUFFLGNBQXNCLENBQUMsRUFBRSxFQUFFO0lBQ3JKLE1BQU0sTUFBTSxHQUFHLE1BQU0sV0FBVyxDQUFDLElBQW1CLEVBQUUsRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztJQUN4RSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRTlDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDaEMsTUFBTSxFQUFFLE9BQU87UUFDZixTQUFTLEVBQUUsS0FBSztLQUNqQixDQUFDLENBQUM7SUFDSCxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRTtRQUN0QixFQUFFLEVBQUUsRUFBQyxHQUFHLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUM7UUFDM0MsR0FBRyxFQUFFLEVBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUM7S0FDbEQsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFBLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSB2YWxpZC1qc2RvYyAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCBFeGNlbEpTIGZyb20gJ2V4Y2VsanMnO1xuaW1wb3J0IGh0bWwyY2FudmFzIGZyb20gJ2h0bWwyY2FudmFzJztcbmltcG9ydCB3dSBmcm9tICd3dSc7XG5pbXBvcnQgJCBmcm9tICdjYXNoLWRvbSc7XG5pbXBvcnQge2hpc3RvcnlVdGlsc30gZnJvbSAnLi9oaXN0b3J5LXV0aWxzJztcbmltcG9ydCB7U3ViamVjdH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICAgKiBEZWNvcmF0b3IgdG8gcGFzcyBhbGwgdGhyb3duIGVycm9ycyB0byBncm9rLnNoZWxsLmVycm9yXG4gICAqIEByZXR1cm5zIFRoZSBhY3R1YWwgZnVuY2NhbGwgYXNzb2NpYXRlZCB3aXRoIHRoZSB2aWV3XG4gICAqIEBzdGFiaWxpdHkgRXhwZXJpbWVudGFsXG4gKi9cbmV4cG9ydCBjb25zdCBwYXNzRXJyb3JUb1NoZWxsID0gKCkgPT4ge1xuICByZXR1cm4gKHRhcmdldDogYW55LCBtZW1iZXJOYW1lOiBzdHJpbmcsIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsID0gZGVzY3JpcHRvci52YWx1ZTtcblxuICAgIGRlc2NyaXB0b3IudmFsdWUgPSBhc3luYyBmdW5jdGlvbiguLi5hcmdzOiBhbnlbXSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IG9yaWdpbmFsLmNhbGwodGhpcywgLi4uYXJncyk7XG4gICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICBncm9rLnNoZWxsLmVycm9yKChlcnIgYXMgRXJyb3IpLm1lc3NhZ2UpO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBJTlRFUkFDVElWRV9DU1NfQ0xBU1MgPSAnY3YtaW50ZXJhY3RpdmUnO1xuXG5leHBvcnQgdHlwZSBEYXRlT3B0aW9ucyA9ICdBbnkgdGltZScgfCAnVG9kYXknIHwgJ1llc3RlcmRheScgfCAnVGhpcyB3ZWVrJyB8ICdMYXN0IHdlZWsnIHwgJ1RoaXMgbW9udGgnIHwgJ0xhc3QgbW9udGgnIHwgJ1RoaXMgeWVhcicgfCAnTGFzdCB5ZWFyJztcblxuZXhwb3J0IHR5cGUgRmlsdGVyT3B0aW9ucyA9IHtcbiAgdGV4dD86IHN0cmluZyxcbiAgZGF0ZT86IERhdGVPcHRpb25zLFxuICBhdXRob3I/OiBERy5Vc2VyLFxuICBpc1NoYXJlZD86IGJvb2xlYW4sXG59O1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdFVzZXJzSWRzID0ge1xuICAnVGVzdCc6ICdjYTFlNjcyZS1lM2JlLTQwZTAtYjc5Yi1kMmM2OGU2OGQzODAnLFxuICAnQWRtaW4nOiAnODc4YzQyYjAtOWE1MC0xMWU2LWM1MzctNmJmOGU5YWIwMmVlJyxcbiAgJ1N5c3RlbSc6ICczZTMyYzVmYS1hYzljLTRkMzktOGI0Yi00ZGIzZTU3NmIzYzMnLFxufTtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRHcm91cHNJZHMgPSB7XG4gICdBbGwgdXNlcnMnOiAnYTRiNDU4NDAtOWE1MC0xMWU2LTljYzktODU0NmI4YmY2MmU2JyxcbiAgJ0RldmVsb3BlcnMnOiAnYmE5Y2QxOTEtOWE1MC0xMWU2LTljYzktOTEwYmY4MjdmMGFiJyxcbiAgJ05lZWQgdG8gY3JlYXRlJzogJzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCcsXG4gICdUZXN0JzogJ2NhMWU2NzJlLWUzYmUtNDBlMC1iNzliLTg1NDZiOGJmNjJlNicsXG4gICdBZG1pbic6ICdhNGI0NTg0MC05YTUwLTExZTYtYzUzNy02YmY4ZTlhYjAyZWUnLFxuICAnU3lzdGVtJzogJ2E0YjQ1ODQwLWFjOWMtNGQzOS04YjRiLTRkYjNlNTc2YjNjMycsXG4gICdBZG1pbmlzdHJhdG9ycyc6ICcxYWI4YjM4ZC05YzRlLTRiMWUtODFjMy1hZTJiZGUzZTEyYzUnLFxufTtcblxuZXhwb3J0IGNsYXNzIEZ1bmN0aW9uVmlldyBleHRlbmRzIERHLlZpZXdCYXNlIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbnRleHQ6IERHLkNvbnRleHQ7XG4gIHByb3RlY3RlZCBfZnVuY0NhbGw/OiBERy5GdW5jQ2FsbDtcbiAgcHJvdGVjdGVkIF9sYXN0Q2FsbD86IERHLkZ1bmNDYWxsO1xuICBwcm90ZWN0ZWQgX3R5cGU6IHN0cmluZyA9ICdmdW5jdGlvbic7XG5cbiAgY29uc3RydWN0b3IoZnVuY0NhbGw/OiBERy5GdW5jQ2FsbCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5ib3ggPSB0cnVlO1xuICAgIHRoaXMuY29udGV4dCA9IERHLkNvbnRleHQuY2xvbmVEZWZhdWx0KCk7XG5cbiAgICBpZiAoIWZ1bmNDYWxsKSByZXR1cm47XG5cbiAgICB0aGlzLmJhc2VQYXRoID0gYC8ke2Z1bmNDYWxsLmZ1bmMubmFtZX1gO1xuICAgIHRoaXMubGlua0Z1bmNjYWxsKGZ1bmNDYWxsKTtcbiAgICB0aGlzLmluaXQoKTtcbiAgICB0aGlzLmJ1aWxkKCk7XG4gICAgdGhpcy5uYW1lID0gZnVuY0NhbGwuZnVuYy5mcmllbmRseU5hbWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgZnVuY3Rpb24gY2FsbCBvZiB0aGUgdmlld1xuICAgKiBAcmV0dXJucyBUaGUgYWN0dWFsIGZ1bmNjYWxsIGFzc29jaWF0ZWQgd2l0aCB0aGUgdmlld1xuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBnZXQgZnVuY0NhbGwoKTogREcuRnVuY0NhbGwgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9mdW5jQ2FsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgRnVuYyBvZiB0aGUgdmlld1xuICAgKiBAcmV0dXJucyBUaGUgYWN0dWFsIGZ1bmMgYXNzb2NpYXRlZCB3aXRoIHRoZSB2aWV3XG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgZ2V0IGZ1bmMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnVuY0NhbGw/LmZ1bmM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRhdGEgb2YgbGFzdCBjYWxsIG9mIGFzc29jaWF0ZWQgZnVuY3Rpb25cbiAgICogQHJldHVybnMgVGhlIGFjdHVhbCBmdW5jIGFzc29jaWF0ZWQgd2l0aCB0aGUgdmlld1xuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIGdldCBsYXN0Q2FsbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbGFzdENhbGw7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGRhdGEgb2YgbGFzdCBjYWxsIG9mIGFzc29jaWF0ZWQgZnVuY3Rpb25cbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBzZXQgbGFzdENhbGwobGFzdENhbGw6IERHLkZ1bmNDYWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fbGFzdENhbGwgPSBsYXN0Q2FsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBWaWV3IHR5cGVcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgZ2V0IHR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgfVxuXG4gIC8qKiBFeHBvcnQgb3B0aW9ucy4gQ291bGQgYmUgb3ZlcnJpZGVuIHBhcnRpYWxseSwgdXNpbmcgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBlYWNoIG9wdGlvbi5cbiAgICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gICovXG4gIGV4cG9ydENvbmZpZzoge1xuICAgIC8qKiBPdmVycmlkZSB0byBwcm92aWRlIGN1c3RvbSBleHBvcnQgbG9naWMuXG4gICAgICAqXG4gICAgICAqICBEZWZhdWx0IGltcGxlbWVudGF0aW9uIHtAbGluayBkZWZhdWx0RXhwb3J0fSBoZWF2aWx5IHJlbGllcyBvbiB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgYnVpbGRJT30uXG4gICAgICAqIEByZXR1cm5zIEJsb2Igd2l0aCBkYXRhIHRvIGJlIGV4cG9ydGVkIGludG8gdGhlIGZpbGUuXG4gICAgICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gICAgKi9cbiAgICBleHBvcnQ6ICgoZm9ybWF0OiBzdHJpbmcpID0+IFByb21pc2U8QmxvYj4pO1xuXG5cbiAgICAvKiogRmlsZW5hbWUgZm9yIGV4cG9ydGVkIGZpbGVzLiBPdmVycmlkZSBmb3IgY3VzdG9tIGZpbGVuYW1lcy5cbiAgICAgICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyB7QGxpbmsgZGVmYXVsdEV4cG9ydEZpbGVuYW1lfVxuICAgICAgKiBAcGFyYW0gZm9ybWF0IEZvcm1hdCBuYW1lIHRvIGJlIGV4cG9ydGVkXG4gICAgICAqIEByZXR1cm5zIFRoZSBhY3R1YWwgZmlsZW5hbWUgdG8gYmUgdXNlZCBmb3IgdGhlIGdlbmVyYXRlZCBmaWxlLlxuICAgICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICAgICovXG4gICAgZmlsZW5hbWU6ICgoZm9ybWF0OiBzdHJpbmcpID0+IHN0cmluZyk7XG5cbiAgICAvKiogT3ZlcnJpZGUgdG8gcHJvdmlkZSBjdXN0b20gbGlzdCBvZiBzdXBwb3J0ZWQgZXhwb3J0IGZvcm1hdHMuXG4gICAgICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyB7QGxpbmsgZGVmYXVsdFN1cHBvcnRlZEV4cG9ydEZvcm1hdHN9XG4gICAgICogVGhlc2UgZm9ybWF0cyBhcmUgYXZhaWxhYmxlIHVuZGVyIHRoZSBcIkV4cG9ydFwiIHBvcHVwIG9uIHRoZSByaWJib24gcGFuZWwuXG4gICAgICogQHJldHVybnMgVGhlIGFycmF5IG9mIGZvcm1hdHMgYXZhaWxhYmxlIGZvciB0aGUgZXhwb3J0LlxuICAgICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gICAgKi9cbiAgICBzdXBwb3J0ZWRGb3JtYXRzOiBzdHJpbmdbXTtcblxuICAgIC8qKiBPdmVycmlkZSB0byBwcm92aWRlIGN1c3RvbSBmaWxlIGV4dGVuc2lvbnMgZm9yIGV4cG9ydGVkIGZvcm1hdHMuXG4gICAgICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIHtAbGluayBkZWZhdWx0U3VwcG9ydGVkRXhwb3J0RXh0ZW5zaW9uc31cbiAgICAgICAqIFRoZXNlIGV4dGVuc2lvbnMgYXJlIHVzZWQgaW4gZmlsZW5hbWVzIHtAbGluayBleHBvcnRGaWxlbmFtZX0uXG4gICAgICAgKiBAcmV0dXJucyBUaGUgbWFwcGluZyBiZXR3ZWVuIHN1cHBvcnRlZCBleHBvcnQgZm9ybWF0cyBhbmQgdGhlaXIgZXh0ZW5zaW9ucy5cbiAgICAgICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gICAgICovXG4gICAgc3VwcG9ydGVkRXh0ZW5zaW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgfSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBMaW5rIEZ1bmNDYWxsIHRvIHRoZSB2aWV3XG4gICAqIEBwYXJhbSBmdW5jQ2FsbCBUaGUgYWN0dWFsIGZ1bmNjYWxsIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgdmlld1xuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBsaW5rRnVuY2NhbGwoZnVuY0NhbGw6IERHLkZ1bmNDYWxsKSB7XG4gICAgY29uc3QgaXNQcmV2aW91c0hpc3RvcmljYWwgPSB0aGlzLl9mdW5jQ2FsbD8ub3B0aW9uc1snaXNIaXN0b3JpY2FsJ107XG4gICAgdGhpcy5fZnVuY0NhbGwgPSBmdW5jQ2FsbDtcblxuICAgIGlmIChmdW5jQ2FsbC5vcHRpb25zWydpc0hpc3RvcmljYWwnXSkge1xuICAgICAgaWYgKCFpc1ByZXZpb3VzSGlzdG9yaWNhbCkge1xuICAgICAgICB0aGlzLm5hbWUgPSBgJHt0aGlzLm5hbWV9IOKAlCAke2Z1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ10gPz8gbmV3IERhdGUoZnVuY0NhbGwuc3RhcnRlZC50b1N0cmluZygpKS50b0xvY2FsZVN0cmluZygnZW4tdXMnLCB7bW9udGg6ICdzaG9ydCcsIGRheTogJ251bWVyaWMnLCBob3VyOiAnbnVtZXJpYycsIG1pbnV0ZTogJ251bWVyaWMnfSl9YDtcbiAgICAgICAgdGhpcy5zZXRSdW5WaWV3UmVhZG9ubHkoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubmFtZSA9IGAke3RoaXMubmFtZS5zdWJzdHJpbmcoMCwgdGhpcy5uYW1lLmluZGV4T2YoJyDigJQgJykpfSDigJQgJHtmdW5jQ2FsbC5vcHRpb25zWyd0aXRsZSddID8/IG5ldyBEYXRlKGZ1bmNDYWxsLnN0YXJ0ZWQudG9TdHJpbmcoKSkudG9Mb2NhbGVTdHJpbmcoJ2VuLXVzJywge21vbnRoOiAnc2hvcnQnLCBkYXk6ICdudW1lcmljJywgaG91cjogJ251bWVyaWMnLCBtaW51dGU6ICdudW1lcmljJ30pfWA7XG4gICAgICB9XG5cbiAgICAgIC8vIEZJWCBNRTogdmlldyBuYW1lIGRvZXMgbm90IGNoYW5nZSBpbiBtb2RlbHNcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2Rpdi5kNC1yaWJib24tbmFtZScpPy5yZXBsYWNlQ2hpbGRyZW4odWkuc3BhbihbdGhpcy5uYW1lXSkpO1xuICAgICAgdGhpcy5wYXRoID0gYD9pZD0ke3RoaXMuX2Z1bmNDYWxsLmlkfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0UnVuVmlld0VkaXRhYmxlKCk7XG4gICAgICB0aGlzLnBhdGggPSBgYDtcblxuICAgICAgaWYgKGlzUHJldmlvdXNIaXN0b3JpY2FsKVxuICAgICAgICB0aGlzLm5hbWUgPSBgJHt0aGlzLm5hbWUuc3Vic3RyaW5nKDAsIHRoaXMubmFtZS5pbmRleE9mKCcg4oCUICcpKX1gO1xuICAgIH1cbiAgICB0aGlzLmJ1aWxkUmliYm9uUGFuZWxzKCk7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIGZvciBjdXN0b20gbG9naWMgdGhhdCBjb3VsZCBub3QgYmUgcGxhY2VkIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICogQW55IGFzeW5jIG1ldGhvZHMgYW5kIG1vc3Qgb2YgdGhlIGxvZ2ljIHNob3VsZCBiZSBwbGFjZWQgaGVyZS5cbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYXN5bmMgaW5pdCgpIHtcbiAgICBpZiAodGhpcy5mdW5jQ2FsbCAmJiB0aGlzLmZ1bmMpIHtcbiAgICAgIHRoaXMuZnVuY0NhbGwuYXV4Wyd2aWV3J10gPSB0aGlzO1xuICAgICAgdGhpcy5mdW5jQ2FsbC5jb250ZXh0ID0gdGhpcy5jb250ZXh0O1xuXG4gICAgICBmb3IgKGNvbnN0IGluUGFyYW0gb2Ygd3UodGhpcy5mdW5jQ2FsbC5pbnB1dFBhcmFtcy52YWx1ZXMoKSBhcyBERy5GdW5jQ2FsbFBhcmFtW10pXG4gICAgICAgIC5maWx0ZXIoKHA6IERHLkZ1bmNDYWxsUGFyYW0pID0+XG4gICAgICAgICAgcC5wcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT0gREcuVFlQRS5EQVRBX0ZSQU1FICYmIHAucHJvcGVydHkub3B0aW9uc1sndmlld2VyJ10gIT0gbnVsbCkpIHtcbiAgICAgICAgdGhpcy5zdWJzLnB1c2goaW5QYXJhbS5vbkNoYW5nZWQuc3Vic2NyaWJlKGFzeW5jIChwYXJhbTogREcuRnVuY0NhbGxQYXJhbSkgPT4ge1xuICAgICAgICAgIHRoaXMuY2xlYXJSZXN1bHRzKGZhbHNlKTtcbiAgICAgICAgICBwYXJhbS5wcm9jZXNzT3V0cHV0KCk7XG5cbiAgICAgICAgICB0aGlzLmFwcGVuZE91dHB1dERmKHBhcmFtLCB7XG4gICAgICAgICAgICBoZWlnaHQ6IDQwMCxcbiAgICAgICAgICAgIGNhdGVnb3J5OiAnSW5wdXQnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgdG8gY3JlYXRlIGEgZnVsbHkgY3VzdG9tIFVJIGluY2x1ZGluZyByaWJib24gbWVudXMgYW5kIHBhbmVsc1xuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBidWlsZCgpOiB2b2lkIHtcbiAgICB0aGlzLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy5idWlsZElPKCkpO1xuICAgIHRoaXMucm9vdC5hcHBlbmRDaGlsZCh0aGlzLm92ZXJsYXlEaXYpO1xuXG4gICAgdGhpcy5idWlsZEhpc3RvcnlCbG9jaygpO1xuICAgIHRoaXMuYnVpbGRSaWJib25NZW51KCk7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgdG8gY3JlYXRlIGEgY3VzdG9tIGlucHV0LW91dHB1dCBibG9ja1xuICAgKiBAcmV0dXJucyBUaGUgSFRNTEVsZW1lbnQgd2l0aCB3aG9sZSBVSSBleGNsdWRpbmcgcmliYm9uIG1lbnVzIGFuZCBwYW5lbHNcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYnVpbGRJTygpOiBIVE1MRWxlbWVudCB7XG4gICAgdGhpcy5leHBvcnRDb25maWcgPSB7XG4gICAgICBzdXBwb3J0ZWRFeHRlbnNpb25zOiB0aGlzLmRlZmF1bHRTdXBwb3J0ZWRFeHBvcnRFeHRlbnNpb25zKCksXG4gICAgICBzdXBwb3J0ZWRGb3JtYXRzOiB0aGlzLmRlZmF1bHRTdXBwb3J0ZWRFeHBvcnRGb3JtYXRzKCksXG4gICAgICBleHBvcnQ6IHRoaXMuZGVmYXVsdEV4cG9ydCxcbiAgICAgIGZpbGVuYW1lOiB0aGlzLmRlZmF1bHRFeHBvcnRGaWxlbmFtZSxcbiAgICB9O1xuXG4gICAgY29uc3QgaW5wdXRCbG9jayA9IHRoaXMuYnVpbGRJbnB1dEJsb2NrKCk7XG4gICAgY29uc3Qgb3V0cHV0QmxvY2sgPSB0aGlzLmJ1aWxkT3V0cHV0QmxvY2soKTtcblxuICAgIHJldHVybiB1aS5zcGxpdEgoW2lucHV0QmxvY2ssIG91dHB1dEJsb2NrXSk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0byBjcmVhdGUgYSBjdXN0b20gaW5wdXQgYmxvY2tcbiAgICogQHJldHVybnMgVGhlIEhUTUxFbGVtZW50IHdpdGggaW5wdXQgYmxvY2sgVUkgb24gdGhlIGxlZnQgc2lkZSBieSBkZWZhdWx0XG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGJ1aWxkSW5wdXRCbG9jaygpOiBIVE1MRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLmZ1bmNDYWxsKSByZXR1cm4gdGhpcy5jb250cm9sc1Jvb3Q7XG5cbiAgICBjb25zdCBmdW5jRGl2ID0gdWkuZGl2KFt0aGlzLnJlbmRlclJ1blNlY3Rpb24odGhpcy5mdW5jQ2FsbCldLCAndWktZGl2Jyk7XG4gICAgdWkuZW1wdHkodGhpcy5jb250cm9sc1Jvb3QpO1xuICAgIHRoaXMuY29udHJvbHNSb290LmFwcGVuZENoaWxkKGZ1bmNEaXYpO1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2xzUm9vdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0byBjcmVhdGUgYSBjdXN0b20gb3V0cHV0IGJsb2NrLlxuICAgKiBAcmV0dXJucyBUaGUgSFRNTEVsZW1lbnQgd2l0aCBpbnB1dCBibG9jayBVSSBvbiB0aGUgbGVmdCBzaWRlIGJ5IGRlZmF1bHRcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYnVpbGRPdXRwdXRCbG9jaygpOiBIVE1MRWxlbWVudCB7XG4gICAgdWkuZW1wdHkodGhpcy5yZXN1bHRzUm9vdCk7XG4gICAgdGhpcy5yZXN1bHRzUm9vdC5hcHBlbmRDaGlsZCh0aGlzLnJlc3VsdHNEaXYpO1xuICAgIHJldHVybiB0aGlzLnJlc3VsdHNSb290O1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRvIGNyZWF0ZSBhIGN1c3RvbSBoaXN0b3JpY2FsIHJ1bnMgY29udHJvbC5cbiAgICogQHJldHVybnMgVGhlIEhUTUxFbGVtZW50IHdpdGggaGlzdG9yeSBibG9jayBVSVxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBidWlsZEhpc3RvcnlCbG9jaygpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3QgbWFpbkFjYyA9IHVpLmFjY29yZGlvbigpO1xuICAgIG1haW5BY2Mucm9vdC5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICBtYWluQWNjLmFkZFRpdGxlKHVpLnNwYW4oWydIaXN0b3J5J10pKTtcblxuICAgIGNvbnN0IGZpbHRlcmluZ09wdGlvbnM6IEZpbHRlck9wdGlvbnMgPSB7fTtcbiAgICBjb25zdCBmaWx0ZXJpbmdUZXh0ID0gbmV3IFN1YmplY3QoKTtcblxuICAgIGNvbnN0IGJ1aWxkRmlsdGVyUGFuZSA9ICgpID0+IHVpLndhaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGV4dElucHV0ID0gdWkuc3RyaW5nSW5wdXQoJ1NlYXJjaCcsICcnLCAodjogc3RyaW5nKSA9PiBmaWx0ZXJpbmdUZXh0Lm5leHQodikpO1xuICAgICAgREcuZGVib3VuY2UoZmlsdGVyaW5nVGV4dC5hc09ic2VydmFibGUoKSwgNjAwKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBmaWx0ZXJpbmdPcHRpb25zLnRleHQgPSB0ZXh0SW5wdXQuc3RyaW5nVmFsdWU7XG4gICAgICAgIHVwZGF0ZVNoYXJlZFBhbmUoKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGF0ZUlucHV0ID0gdWkuY2hvaWNlSW5wdXQoJ0RhdGUgc3RhcnRlZCcsICdBbnkgdGltZScsIFsnQW55IHRpbWUnLCAnVG9kYXknLCAnWWVzdGVyZGF5JywgJ1RoaXMgd2VlaycsICdMYXN0IHdlZWsnLCAnVGhpcyBtb250aCcsICdMYXN0IG1vbnRoJywgJ1RoaXMgeWVhcicsICdMYXN0IHllYXInXSwgKHY6IERhdGVPcHRpb25zKSA9PiB7XG4gICAgICAgIGZpbHRlcmluZ09wdGlvbnMuZGF0ZSA9IHY7XG4gICAgICAgIHVwZGF0ZUhpc3RvcnlQYW5lKGZpbHRlcmluZ09wdGlvbnMpO1xuICAgICAgICB1cGRhdGVGYXZvcml0ZXNQYW5lKCk7XG4gICAgICAgIHVwZGF0ZVNoYXJlZFBhbmUoKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBkZWZhdWx0VXNlcnMgPSBPYmplY3QudmFsdWVzKGRlZmF1bHRVc2Vyc0lkcyk7XG4gICAgICBjb25zdCBhbGxVc2VycyA9IGF3YWl0IGdyb2suZGFwaS51c2Vycy5saXN0KCk7XG4gICAgICBjb25zdCBmaWx0ZXJlZFVzZXJzID0gYWxsVXNlcnMuZmlsdGVyKCh1c2VyKSA9PiAhZGVmYXVsdFVzZXJzLmluY2x1ZGVzKHVzZXIuaWQpKTtcblxuICAgICAgY29uc3QgYXV0aG9ySW5wdXQgPSB1aS5jaG9pY2VJbnB1dDxERy5Vc2VyIHwgc3RyaW5nPignQXV0aG9yJywgJ0FueW9uZScsIFsnQW55b25lJywgLi4uZmlsdGVyZWRVc2Vyc10sICh2OiBERy5Vc2VyIHwgc3RyaW5nKSA9PiB7XG4gICAgICAgIGZpbHRlcmluZ09wdGlvbnMuYXV0aG9yID0gKHYgPT09ICdBbnlvbmUnKSA/IHVuZGVmaW5lZCA6IHYgYXMgREcuVXNlcjtcbiAgICAgICAgdXBkYXRlU2hhcmVkUGFuZSgpO1xuICAgICAgfSk7XG4gICAgICBkYXRlSW5wdXQuYWRkUGF0dGVybk1lbnUoJ2RhdGV0aW1lJyk7XG4gICAgICBjb25zdCBmb3JtID0gdWkuZGl2VihbXG4gICAgICAgIHRleHRJbnB1dCxcbiAgICAgICAgZGF0ZUlucHV0LFxuICAgICAgICBhdXRob3JJbnB1dCxcbiAgICAgIF0sICd1aS1mb3JtLWNvbmRlbnNlZCB1aS1mb3JtJyk7XG4gICAgICBmb3JtLnN0eWxlLm1hcmdpbkxlZnQgPSAnMHB4JztcblxuICAgICAgcmV0dXJuIGZvcm07XG4gICAgfSk7XG4gICAgbGV0IGZpbHRlclBhbmUgPSBtYWluQWNjLmFkZFBhbmUoJ0ZpbHRlcicsIGJ1aWxkRmlsdGVyUGFuZSk7XG4gICAgY29uc3QgdXBkYXRlRmlsdGVyUGFuZSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGlzRXhwYW5kZWQgPSBmaWx0ZXJQYW5lLmV4cGFuZGVkO1xuICAgICAgbWFpbkFjYy5yZW1vdmVQYW5lKGZpbHRlclBhbmUpO1xuICAgICAgZmlsdGVyUGFuZSA9IG1haW5BY2MuYWRkUGFuZSgnRmlsdGVyJywgYnVpbGRGaWx0ZXJQYW5lLCBpc0V4cGFuZGVkLCBmYXZvcml0ZXNMaXN0UGFuZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNob3dBZGRUb0Zhdm9yaXRlc0RpYWxvZyA9IChmdW5jQ2FsbDogREcuRnVuY0NhbGwpID0+IHtcbiAgICAgIGxldCB0aXRsZSA9IGZ1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ10gPz8gJyc7XG4gICAgICBsZXQgYW5ub3RhdGlvbiA9IGZ1bmNDYWxsLm9wdGlvbnNbJ2Fubm90YXRpb24nXSA/PyAnJztcbiAgICAgIGNvbnN0IHRpdGxlSW5wdXQgPSB1aS5zdHJpbmdJbnB1dCgnVGl0bGUnLCB0aXRsZSwgKHM6IHN0cmluZykgPT4ge1xuICAgICAgICB0aXRsZSA9IHM7XG4gICAgICAgIGlmIChzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRpdGxlSW5wdXQuc2V0VG9vbHRpcCgnVGl0bGUgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aXRsZUlucHV0LmlucHV0LmNsYXNzTGlzdC5hZGQoJ2Q0LWludmFsaWQnKSwgMTAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aXRsZUlucHV0LnNldFRvb2x0aXAoJycpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGl0bGVJbnB1dC5pbnB1dC5jbGFzc0xpc3QucmVtb3ZlKCdkNC1pbnZhbGlkJyksIDEwMCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB1aS5kaWFsb2coe3RpdGxlOiAnQWRkIHRvIGZhdm9yaXRlcyd9KVxuICAgICAgICAuYWRkKHVpLmZvcm0oW1xuICAgICAgICAgIHRpdGxlSW5wdXQsXG4gICAgICAgICAgdWkuc3RyaW5nSW5wdXQoJ0Fubm90YXRpb24nLCBhbm5vdGF0aW9uLCAoczogc3RyaW5nKSA9PiB7IGFubm90YXRpb24gPSBzOyB9KSxcbiAgICAgICAgXSkpXG4gICAgICAgIC5vbk9LKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBpZiAodGl0bGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZnVuY0NhbGwub3B0aW9uc1sndGl0bGUnXSA9IHRpdGxlO1xuICAgICAgICAgICAgZnVuY0NhbGwub3B0aW9uc1snYW5ub3RhdGlvbiddID0gYW5ub3RhdGlvbjtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYWRkUnVuVG9GYXZvcml0ZXMoZnVuY0NhbGwpO1xuICAgICAgICAgICAgdXBkYXRlSGlzdG9yeVBhbmUoKTtcbiAgICAgICAgICAgIHVwZGF0ZUZhdm9yaXRlc1BhbmUoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ3Jvay5zaGVsbC53YXJuaW5nKCdUaXRsZSBjYW5ub3QgYmUgZW1wdHknKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5zaG93KHtjZW50ZXI6IHRydWV9KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2hvd0RlbGV0ZVJ1bkRpYWxvZyA9IChmdW5jQ2FsbDogREcuRnVuY0NhbGwpID0+IHtcbiAgICAgIHVpLmRpYWxvZyh7dGl0bGU6ICdEZWxldGUgcnVuJ30pXG4gICAgICAgIC5hZGQodWkuZGl2VGV4dCgnVGhlIGRlbGV0ZWQgcnVuIGlzIGltcG9zc2libGUgdG8gcmVzdG9yZS4gQXJlIHlvdSBzdXJlPycpKVxuICAgICAgICAub25PSyhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVSdW4oZnVuY0NhbGwpO1xuICAgICAgICAgIHVwZGF0ZUhpc3RvcnlQYW5lKCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5zaG93KHtjZW50ZXI6IHRydWV9KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2hvd0FkZFRvU2hhcmVkRGlhbG9nID0gKGZ1bmNDYWxsOiBERy5GdW5jQ2FsbCkgPT4ge1xuICAgICAgbGV0IHRpdGxlID0gZnVuY0NhbGwub3B0aW9uc1sndGl0bGUnXSA/PyAnJztcbiAgICAgIGxldCBhbm5vdGF0aW9uID0gZnVuY0NhbGwub3B0aW9uc1snYW5ub3RhdGlvbiddID8/ICcnO1xuICAgICAgY29uc3QgdGl0bGVJbnB1dCA9IHVpLnN0cmluZ0lucHV0KCdUaXRsZScsIHRpdGxlLCAoczogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRpdGxlID0gcztcbiAgICAgICAgaWYgKHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGl0bGVJbnB1dC5zZXRUb29sdGlwKCdUaXRsZSBjYW5ub3QgYmUgZW1wdHknKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRpdGxlSW5wdXQuaW5wdXQuY2xhc3NMaXN0LmFkZCgnZDQtaW52YWxpZCcpLCAxMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRpdGxlSW5wdXQuc2V0VG9vbHRpcCgnJyk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aXRsZUlucHV0LmlucHV0LmNsYXNzTGlzdC5yZW1vdmUoJ2Q0LWludmFsaWQnKSwgMTAwKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHVpLmRpYWxvZyh7dGl0bGU6ICdBZGQgdG8gc2hhcmVkJ30pXG4gICAgICAgIC5hZGQodWkuZm9ybShbXG4gICAgICAgICAgdGl0bGVJbnB1dCxcbiAgICAgICAgICB1aS5zdHJpbmdJbnB1dCgnQW5ub3RhdGlvbicsIGFubm90YXRpb24sIChzOiBzdHJpbmcpID0+IHsgYW5ub3RhdGlvbiA9IHM7IH0pLFxuICAgICAgICBdKSlcbiAgICAgICAgLm9uT0soYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGlmICh0aXRsZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmdW5jQ2FsbCA9IGF3YWl0IGhpc3RvcnlVdGlscy5sb2FkUnVuKGZ1bmNDYWxsLmlkKTtcbiAgICAgICAgICAgIGZ1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ10gPSB0aXRsZTtcbiAgICAgICAgICAgIGZ1bmNDYWxsLm9wdGlvbnNbJ2Fubm90YXRpb24nXSA9IGFubm90YXRpb247XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkZFJ1blRvU2hhcmVkKGZ1bmNDYWxsKTtcbiAgICAgICAgICAgIHVwZGF0ZUhpc3RvcnlQYW5lKCk7XG4gICAgICAgICAgICB1cGRhdGVGYXZvcml0ZXNQYW5lKCk7XG4gICAgICAgICAgICB1cGRhdGVTaGFyZWRQYW5lKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdyb2suc2hlbGwud2FybmluZygnVGl0bGUgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuc2hvdyh7Y2VudGVyOiB0cnVlfSk7XG4gICAgfTtcblxuICAgIGxldCBoaXN0b3J5Q2FyZHMgPSBbXSBhcyBIVE1MRWxlbWVudFtdO1xuICAgIGxldCBmYXZvcml0ZUNhcmRzID0gW10gYXMgSFRNTEVsZW1lbnRbXTtcbiAgICBsZXQgc2hhcmVkQ2FyZHMgPSBbXSBhcyBIVE1MRWxlbWVudFtdO1xuICAgIGNvbnN0IHJlbmRlckZhdm9yaXRlQ2FyZHMgPSBhc3luYyAoZnVuY0NhbGxzOiBERy5GdW5jQ2FsbFtdKSA9PiB7XG4gICAgICBmYXZvcml0ZUNhcmRzID0gZnVuY0NhbGxzLm1hcCgoZnVuY0NhbGwpID0+IHtcbiAgICAgICAgY29uc3QgdW5zdGFySWNvbiA9IHVpLmljb25GQSgnc3RhcicsIGFzeW5jIChldikgPT4ge1xuICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlUnVuRnJvbUZhdm9yaXRlcyhmdW5jQ2FsbCk7XG4gICAgICAgICAgdXBkYXRlSGlzdG9yeVBhbmUoKTtcbiAgICAgICAgICB1cGRhdGVGYXZvcml0ZXNQYW5lKCk7XG4gICAgICAgIH0sICdVbmZhdm9yaXRlIHRoZSBydW4nKTtcbiAgICAgICAgdW5zdGFySWNvbi5jbGFzc0xpc3QuYWRkKCdmYXMnKTtcblxuICAgICAgICBjb25zdCBzaGFyZUljb24gPSB1aS5pY29uRkEoJ2V5ZScsIGFzeW5jIChldikgPT4ge1xuICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHNob3dBZGRUb1NoYXJlZERpYWxvZyhmdW5jQ2FsbCk7XG4gICAgICAgIH0sICdBZGQgdG8gc2hhcmVkJyk7XG4gICAgICAgIHNoYXJlSWNvbi5jbGFzc0xpc3QuYWRkKCdmYWwnKTtcblxuICAgICAgICBjb25zdCBjYXJkID0gdWkuZGl2SChbXG4gICAgICAgICAgdWkuZGl2VihbXG4gICAgICAgICAgICB1aS5kaXZUZXh0KGZ1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ10gPz8gJ0RlZmF1bHQgdGl0bGUnLCAndGl0bGUnKSxcbiAgICAgICAgICAgIC4uLihmdW5jQ2FsbC5vcHRpb25zWydhbm5vdGF0aW9uJ10pID8gW3VpLmRpdlRleHQoZnVuY0NhbGwub3B0aW9uc1snYW5ub3RhdGlvbiddLCAnZGVzY3JpcHRpb24nKV06IFtdLFxuICAgICAgICAgICAgdWkuZGl2SChbdWkucmVuZGVyKGZ1bmNDYWxsLmF1dGhvciksIHVpLnNwYW4oW25ldyBEYXRlKGZ1bmNDYWxsLnN0YXJ0ZWQudG9TdHJpbmcoKSkudG9Mb2NhbGVTdHJpbmcoJ2VuLXVzJywge21vbnRoOiAnc2hvcnQnLCBkYXk6ICdudW1lcmljJywgaG91cjogJ251bWVyaWMnLCBtaW51dGU6ICdudW1lcmljJ30pXSwgJ2RhdGUnKV0pLFxuICAgICAgICAgIF0pLFxuICAgICAgICAgIHVpLmRpdkgoW1xuICAgICAgICAgICAgc2hhcmVJY29uLFxuICAgICAgICAgICAgdWkuaWNvbkZBKCdwZW4nLCBhc3luYyAoZXYpID0+IHtcbiAgICAgICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgIHNob3dBZGRUb0Zhdm9yaXRlc0RpYWxvZyhmdW5jQ2FsbCk7XG4gICAgICAgICAgICB9LCAnRWRpdCBydW4gbWV0YWRhdGEnKSxcbiAgICAgICAgICAgIHVuc3Rhckljb25cbiAgICAgICAgICBdLCAnY3YtZnVuY2NhbGwtY2FyZC1pY29ucycpXG4gICAgICAgIF0sICdjdi1mdW5jY2FsbC1jYXJkJyk7XG5cbiAgICAgICAgY2FyZC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3IodGhpcy5yb290LCB0cnVlKTtcbiAgICAgICAgICB0aGlzLmxpbmtGdW5jY2FsbChhd2FpdCB0aGlzLmxvYWRSdW4oZnVuY0NhbGwuaWQpKTtcbiAgICAgICAgICBjYXJkLmNsYXNzTGlzdC5hZGQoJ2NsaWNrZWQnKTtcbiAgICAgICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3IodGhpcy5yb290LCBmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY2FyZDtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBhbGxDYXJkcyA9IFsuLi5oaXN0b3J5Q2FyZHMsIC4uLmZhdm9yaXRlQ2FyZHMsIC4uLnNoYXJlZENhcmRzXTtcbiAgICAgIGFsbENhcmRzLmZvckVhY2goKGNhcmQpID0+IGNhcmQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiBhbGxDYXJkcy5mb3JFYWNoKChjKSA9PiBjLmNsYXNzTGlzdC5yZW1vdmUoJ2NsaWNrZWQnKSkpKTtcblxuICAgICAgcmV0dXJuIHVpLmRpdlYoZmF2b3JpdGVDYXJkcyk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlbmRlclNoYXJlZENhcmRzID0gYXN5bmMgKGZ1bmNDYWxsczogREcuRnVuY0NhbGxbXSkgPT4ge1xuICAgICAgc2hhcmVkQ2FyZHMgPSBmdW5jQ2FsbHMubWFwKChmdW5jQ2FsbCkgPT4ge1xuICAgICAgICBjb25zdCB1bnNoYXJlSWNvbiA9IHVpLmljb25GQSgnZXllLXNsYXNoJywgYXN5bmMgKGV2KSA9PiB7XG4gICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVSdW5Gcm9tU2hhcmVkKGZ1bmNDYWxsKTtcbiAgICAgICAgICB1cGRhdGVIaXN0b3J5UGFuZSgpO1xuICAgICAgICAgIHVwZGF0ZVNoYXJlZFBhbmUoKTtcbiAgICAgICAgfSwgJ0hpZGUgZnJvbSBzaGFyZWQnKTtcblxuICAgICAgICBjb25zdCBjYXJkID0gdWkuZGl2SChbXG4gICAgICAgICAgdWkuZGl2VihbXG4gICAgICAgICAgICB1aS5kaXZUZXh0KGZ1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ10gPz8gJ0RlZmF1bHQgdGl0bGUnLCAndGl0bGUnKSxcbiAgICAgICAgICAgIC4uLihmdW5jQ2FsbC5vcHRpb25zWydhbm5vdGF0aW9uJ10pID8gW3VpLmRpdlRleHQoZnVuY0NhbGwub3B0aW9uc1snYW5ub3RhdGlvbiddLCAnZGVzY3JpcHRpb24nKV06IFtdLFxuICAgICAgICAgICAgdWkuZGl2SChbdWkucmVuZGVyKGZ1bmNDYWxsLmF1dGhvciksIHVpLnNwYW4oW25ldyBEYXRlKGZ1bmNDYWxsLnN0YXJ0ZWQudG9TdHJpbmcoKSkudG9Mb2NhbGVTdHJpbmcoJ2VuLXVzJywge21vbnRoOiAnc2hvcnQnLCBkYXk6ICdudW1lcmljJywgaG91cjogJ251bWVyaWMnLCBtaW51dGU6ICdudW1lcmljJ30pXSwgJ2RhdGUnKV0pLFxuICAgICAgICAgIF0pLFxuICAgICAgICAgIHVpLmRpdkgoW1xuICAgICAgICAgICAgdWkuaWNvbkZBKCdsaW5rJywgYXN5bmMgKGV2KSA9PiB7XG4gICAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufSR7d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lfT9pZD0ke2Z1bmNDYWxsLmlkfWApO1xuICAgICAgICAgICAgfSwgJ0NvcHkgbGluayB0byB0aGUgcnVuJyksXG4gICAgICAgICAgICAuLi4oZnVuY0NhbGwuYXV0aG9yLmlkID09PSBncm9rLnNoZWxsLnVzZXIuaWQpID8gW1xuICAgICAgICAgICAgICB1aS5pY29uRkEoJ3BlbicsIGFzeW5jIChldikgPT4ge1xuICAgICAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIHNob3dBZGRUb1NoYXJlZERpYWxvZyhmdW5jQ2FsbCk7XG4gICAgICAgICAgICAgIH0sICdFZGl0IHJ1biBtZXRhZGF0YScpLFxuICAgICAgICAgICAgICB1bnNoYXJlSWNvbl06IFtdLFxuICAgICAgICAgIF0sICdjdi1mdW5jY2FsbC1jYXJkLWljb25zJylcbiAgICAgICAgXSwgJ2N2LWZ1bmNjYWxsLWNhcmQnKTtcblxuICAgICAgICBjYXJkLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcih0aGlzLnJvb3QsIHRydWUpO1xuICAgICAgICAgIHRoaXMubGlua0Z1bmNjYWxsKGF3YWl0IHRoaXMubG9hZFJ1bihmdW5jQ2FsbC5pZCkpO1xuICAgICAgICAgIGNhcmQuY2xhc3NMaXN0LmFkZCgnY2xpY2tlZCcpO1xuICAgICAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcih0aGlzLnJvb3QsIGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjYXJkO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGFsbENhcmRzID0gWy4uLmhpc3RvcnlDYXJkcywgLi4uZmF2b3JpdGVDYXJkcywgLi4uc2hhcmVkQ2FyZHNdO1xuICAgICAgYWxsQ2FyZHMuZm9yRWFjaCgoY2FyZCkgPT4gY2FyZC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IGFsbENhcmRzLmZvckVhY2goKGMpID0+IGMuY2xhc3NMaXN0LnJlbW92ZSgnY2xpY2tlZCcpKSkpO1xuXG4gICAgICByZXR1cm4gdWkuZGl2VihzaGFyZWRDYXJkcyk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlbmRlckhpc3RvcnlDYXJkcyA9IGFzeW5jIChmdW5jQ2FsbHM6IERHLkZ1bmNDYWxsW10pID0+IHtcbiAgICAgIGhpc3RvcnlDYXJkcyA9IGZ1bmNDYWxscy5tYXAoKGZ1bmNDYWxsKSA9PiB7XG4gICAgICAgIGNvbnN0IGljb24gPSBmdW5jQ2FsbC5hdXRob3IucGljdHVyZSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWNvbi5zdHlsZS53aWR0aCA9ICcyNXB4JztcbiAgICAgICAgaWNvbi5zdHlsZS5oZWlnaHQgPSAnMjVweCc7XG4gICAgICAgIGljb24uc3R5bGUuZm9udFNpemUgPSAnMjBweCc7XG4gICAgICAgIGljb24uc3R5bGUubWFyZ2luUmlnaHQgPSAnM3B4JztcbiAgICAgICAgaWNvbi5zdHlsZS5hbGlnblNlbGYgPSAnY2VudGVyJztcbiAgICAgICAgY29uc3QgdXNlckxhYmVsID0gdWkubGFiZWwoZnVuY0NhbGwuYXV0aG9yLmZyaWVuZGx5TmFtZSwgJ2Q0LWxpbmstbGFiZWwnKTtcbiAgICAgICAgdWkuYmluZChmdW5jQ2FsbC5hdXRob3IsIGljb24pO1xuXG4gICAgICAgIGNvbnN0IHNoYXJlSWNvbiA9IHVpLmljb25GQSgnZXllJywgYXN5bmMgKGV2KSA9PiB7XG4gICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgc2hvd0FkZFRvU2hhcmVkRGlhbG9nKGZ1bmNDYWxsKTtcbiAgICAgICAgfSwgJ0FkZCB0byBzaGFyZWQnKTtcbiAgICAgICAgc2hhcmVJY29uLmNsYXNzTGlzdC5hZGQoJ2ZhbCcpO1xuXG4gICAgICAgIGNvbnN0IHVuc2hhcmVJY29uID0gdWkuaWNvbkZBKCdleWUtc2xhc2gnLCBhc3luYyAoZXYpID0+IHtcbiAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLnJlbW92ZVJ1bkZyb21TaGFyZWQoZnVuY0NhbGwpO1xuICAgICAgICAgIHVwZGF0ZUhpc3RvcnlQYW5lKCk7XG4gICAgICAgICAgdXBkYXRlU2hhcmVkUGFuZSgpO1xuICAgICAgICB9LCAnSGlkZSBmcm9tIHNoYXJlZCcpO1xuXG4gICAgICAgIGNvbnN0IHVuc3RhciA9IHVpLmljb25GQSgnc3RhcicsIGFzeW5jIChldikgPT4ge1xuICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlUnVuRnJvbUZhdm9yaXRlcyhmdW5jQ2FsbCk7XG4gICAgICAgICAgdXBkYXRlSGlzdG9yeVBhbmUoKTtcbiAgICAgICAgICB1cGRhdGVGYXZvcml0ZXNQYW5lKCk7XG4gICAgICAgIH0sICdVbmZhdm9yaXRlIHRoZSBydW4nKTtcbiAgICAgICAgdW5zdGFyLmNsYXNzTGlzdC5hZGQoJ2ZhcycpO1xuXG4gICAgICAgIGNvbnN0IGNhcmQgPSB1aS5kaXZIKFtcbiAgICAgICAgICB1aS5kaXZIKFtcbiAgICAgICAgICAgIGljb24sXG4gICAgICAgICAgICB1aS5kaXZWKFtcbiAgICAgICAgICAgICAgdXNlckxhYmVsLFxuICAgICAgICAgICAgICB1aS5zcGFuKFtuZXcgRGF0ZShmdW5jQ2FsbC5zdGFydGVkLnRvU3RyaW5nKCkpLnRvTG9jYWxlU3RyaW5nKCdlbi11cycsIHttb250aDogJ3Nob3J0JywgZGF5OiAnbnVtZXJpYycsIGhvdXI6ICdudW1lcmljJywgbWludXRlOiAnbnVtZXJpYyd9KV0pXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgICB1aS5kaXZIKFtcbiAgICAgICAgICAgIC4uLihmdW5jQ2FsbC5vcHRpb25zWydpc1NoYXJlZCddKSA/IFt1bnNoYXJlSWNvbl06IFtzaGFyZUljb25dLFxuICAgICAgICAgICAgLi4uKGZ1bmNDYWxsLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSkgPyBbdW5zdGFyXSA6IFt1aS5pY29uRkEoJ3N0YXInLCBhc3luYyAoZXYpID0+IHtcbiAgICAgICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgIHNob3dBZGRUb0Zhdm9yaXRlc0RpYWxvZyhmdW5jQ2FsbCk7XG4gICAgICAgICAgICB9LCAnQWRkIHRvIGZhdm9yaXRlcycpXSxcbiAgICAgICAgICAgIHVpLmljb25GQSgndHJhc2gtYWx0JywgYXN5bmMgKGV2KSA9PiB7XG4gICAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICBzaG93RGVsZXRlUnVuRGlhbG9nKGZ1bmNDYWxsKTtcbiAgICAgICAgICAgIH0sICdEZWxldGUgdGhlIHJ1bicpLFxuICAgICAgICAgIF0sICdjdi1mdW5jY2FsbC1jYXJkLWljb25zJylcbiAgICAgICAgXSwgJ2N2LWZ1bmNjYWxsLWNhcmQnKTtcblxuICAgICAgICBjYXJkLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcih0aGlzLnJvb3QsIHRydWUpO1xuICAgICAgICAgIHRoaXMubGlua0Z1bmNjYWxsKGF3YWl0IHRoaXMubG9hZFJ1bihmdW5jQ2FsbC5pZCkpO1xuICAgICAgICAgIGNhcmQuY2xhc3NMaXN0LmFkZCgnY2xpY2tlZCcpO1xuICAgICAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcih0aGlzLnJvb3QsIGZhbHNlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGNhcmQ7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgYWxsQ2FyZHMgPSBbLi4uaGlzdG9yeUNhcmRzLCAuLi5mYXZvcml0ZUNhcmRzLCAuLi5zaGFyZWRDYXJkc107XG4gICAgICBhbGxDYXJkcy5mb3JFYWNoKChjYXJkKSA9PiBjYXJkLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gYWxsQ2FyZHMuZm9yRWFjaCgoYykgPT4gYy5jbGFzc0xpc3QucmVtb3ZlKCdjbGlja2VkJykpKSk7XG5cbiAgICAgIHJldHVybiB1aS5kaXZWKGhpc3RvcnlDYXJkcyk7XG4gICAgfTtcblxuICAgIGNvbnN0IGJ1aWxkU2hhcmVkTGlzdCA9ICgpID0+IHVpLndhaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgaGlzdG9yaWNhbFJ1bnMgPSBhd2FpdCBoaXN0b3J5VXRpbHMucHVsbFJ1bnNCeU5hbWUodGhpcy5mdW5jIS5uYW1lLCBmaWx0ZXJpbmdPcHRpb25zKTtcbiAgICAgIGNvbnN0IHNoYXJlZFJ1bnMgPSBoaXN0b3JpY2FsUnVucy5maWx0ZXIoKHJ1bikgPT4gcnVuLm9wdGlvbnNbJ2lzU2hhcmVkJ10pO1xuICAgICAgaWYgKHNoYXJlZFJ1bnMubGVuZ3RoID4gMClcbiAgICAgICAgcmV0dXJuIHVpLndhaXQoKCkgPT4gcmVuZGVyU2hhcmVkQ2FyZHMoc2hhcmVkUnVucykpO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gdWkuZGl2VGV4dCgnTm8gcnVucyBhcmUgbWFya2VkIGFzIHNoYXJlZCcsICdkZXNjcmlwdGlvbicpO1xuICAgIH0pO1xuICAgIGxldCBzaGFyZWRMaXN0UGFuZSA9IG1haW5BY2MuYWRkUGFuZSgnU2hhcmVkJywgKCkgPT4gYnVpbGRTaGFyZWRMaXN0KCksIHRydWUpO1xuICAgIGNvbnN0IHVwZGF0ZVNoYXJlZFBhbmUgPSAoKSA9PiB7XG4gICAgICBjb25zdCBpc0V4cGFuZGVkID0gc2hhcmVkTGlzdFBhbmUuZXhwYW5kZWQ7XG4gICAgICBtYWluQWNjLnJlbW92ZVBhbmUoc2hhcmVkTGlzdFBhbmUpO1xuICAgICAgc2hhcmVkTGlzdFBhbmUgPSBtYWluQWNjLmFkZFBhbmUoJ1NoYXJlZCcsICgpID0+IGJ1aWxkU2hhcmVkTGlzdCgpLCBpc0V4cGFuZGVkLCBmYXZvcml0ZXNMaXN0UGFuZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGJ1aWxkRmF2b3JpdGVzTGlzdCA9IChmaWx0ZXJPcHRpb25zOiBGaWx0ZXJPcHRpb25zID0ge30pID0+IHVpLndhaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgaGlzdG9yaWNhbFJ1bnMgPSBhd2FpdCBoaXN0b3J5VXRpbHMucHVsbFJ1bnNCeU5hbWUodGhpcy5mdW5jIS5uYW1lLCBmaWx0ZXJPcHRpb25zKTtcbiAgICAgIGNvbnN0IGZhdm9yaXRlUnVucyA9IGhpc3RvcmljYWxSdW5zLmZpbHRlcigocnVuKSA9PiBydW4ub3B0aW9uc1snaXNGYXZvcml0ZSddICYmICFydW4ub3B0aW9uc1snaXNJbXBvcnRlZCddKTtcbiAgICAgIGlmIChmYXZvcml0ZVJ1bnMubGVuZ3RoID4gMClcbiAgICAgICAgcmV0dXJuIHVpLndhaXQoKCkgPT4gcmVuZGVyRmF2b3JpdGVDYXJkcyhmYXZvcml0ZVJ1bnMpKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIHVpLmRpdlRleHQoJ05vIHJ1bnMgYXJlIG1hcmtlZCBhcyBmYXZvcml0ZXMnLCAnZGVzY3JpcHRpb24nKTtcbiAgICB9KTtcbiAgICBsZXQgZmF2b3JpdGVzTGlzdFBhbmUgPSBtYWluQWNjLmFkZFBhbmUoJ015IGZhdm9yaXRlcycsICgpID0+IGJ1aWxkRmF2b3JpdGVzTGlzdCh7XG4gICAgICAuLi5maWx0ZXJpbmdPcHRpb25zLFxuICAgICAgYXV0aG9yOiBncm9rLnNoZWxsLnVzZXJcbiAgICB9KSwgdHJ1ZSk7XG4gICAgY29uc3QgdXBkYXRlRmF2b3JpdGVzUGFuZSA9IChmaWx0ZXJPcHRpb25zOiBGaWx0ZXJPcHRpb25zID0ge30pID0+IHtcbiAgICAgIGNvbnN0IGlzRXhwYW5kZWQgPSBmYXZvcml0ZXNMaXN0UGFuZS5leHBhbmRlZDtcbiAgICAgIG1haW5BY2MucmVtb3ZlUGFuZShmYXZvcml0ZXNMaXN0UGFuZSk7XG4gICAgICBmYXZvcml0ZXNMaXN0UGFuZSA9IG1haW5BY2MuYWRkUGFuZSgnTXkgZmF2b3JpdGVzJywgKCkgPT4gYnVpbGRGYXZvcml0ZXNMaXN0KHtcbiAgICAgICAgLi4uZmlsdGVyaW5nT3B0aW9ucyxcbiAgICAgICAgYXV0aG9yOiBncm9rLnNoZWxsLnVzZXJcbiAgICAgIH0pLCBpc0V4cGFuZGVkLCBoaXN0b3J5UGFuZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGJ1aWxkSGlzdG9yeVBhbmUgPSAoZmlsdGVyT3B0aW9uczogRmlsdGVyT3B0aW9ucyA9IHt9KSA9PiB1aS53YWl0KGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGhpc3RvcmljYWxSdW5zID0gKGF3YWl0IGhpc3RvcnlVdGlscy5wdWxsUnVuc0J5TmFtZSh0aGlzLmZ1bmMhLm5hbWUsIGZpbHRlck9wdGlvbnMpKTtcbiAgICAgIGlmIChoaXN0b3JpY2FsUnVucy5sZW5ndGggPiAwKVxuICAgICAgICByZXR1cm4gdWkud2FpdCgoKSA9PiByZW5kZXJIaXN0b3J5Q2FyZHMoaGlzdG9yaWNhbFJ1bnMpKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIHVpLmRpdlRleHQoJ05vIHJ1bnMgYXJlIGZvdW5kIGluIGhpc3RvcnknLCAnZGVzY3JpcHRpb24nKTtcbiAgICB9KTtcbiAgICBsZXQgaGlzdG9yeVBhbmUgPSBtYWluQWNjLmFkZFBhbmUoJ015IGhpc3RvcnknLCAoKSA9PiBidWlsZEhpc3RvcnlQYW5lKHtcbiAgICAgIC4uLmZpbHRlcmluZ09wdGlvbnMsXG4gICAgICBhdXRob3I6IGdyb2suc2hlbGwudXNlclxuICAgIH0pLCB0cnVlKTtcbiAgICBjb25zdCB1cGRhdGVIaXN0b3J5UGFuZSA9IChmaWx0ZXJPcHRpb25zOiBGaWx0ZXJPcHRpb25zID0ge30pID0+IHtcbiAgICAgIGNvbnN0IGlzRXhwYW5kZWQgPSBoaXN0b3J5UGFuZS5leHBhbmRlZDtcbiAgICAgIG1haW5BY2MucmVtb3ZlUGFuZShoaXN0b3J5UGFuZSk7XG4gICAgICBoaXN0b3J5UGFuZSA9IG1haW5BY2MuYWRkUGFuZSgnTXkgaGlzdG9yeScsICgpID0+IGJ1aWxkSGlzdG9yeVBhbmUoe1xuICAgICAgICAuLi5maWx0ZXJPcHRpb25zLFxuICAgICAgICBhdXRob3I6IGdyb2suc2hlbGwudXNlclxuICAgICAgfSksIGlzRXhwYW5kZWQpO1xuICAgIH07XG5cbiAgICBjb25zdCBuZXdIaXN0b3J5QmxvY2sgPSBtYWluQWNjLnJvb3Q7XG4gICAgdWkuZW1wdHkodGhpcy5oaXN0b3J5Um9vdCk7XG4gICAgdGhpcy5oaXN0b3J5Um9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnanVzdGlmeS1jb250ZW50Jyk7XG4gICAgdGhpcy5oaXN0b3J5Um9vdC5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICB0aGlzLmhpc3RvcnlSb290LmFwcGVuZChuZXdIaXN0b3J5QmxvY2spO1xuICAgIHJldHVybiBuZXdIaXN0b3J5QmxvY2s7XG4gIH1cblxuICAvKipcbiAgICogTG9va3MgZm9yIHtAbGluayBzdXBwb3J0ZWRFeHBvcnRGb3JtYXRzfSBtZW1iZXJzIGFuZCBjcmVhdGVzIHJpYmJvbiBwYW5lbFxuICAgKiBAcmV0dXJucyBUaGUgSFRNTEVsZW1lbnRzIG9mIHJpYmJvblBhbmVsc1xuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIGJ1aWxkUmliYm9uUGFuZWxzKCk6IEhUTUxFbGVtZW50W11bXSB7XG4gICAgY29uc3QgbmV3UmliYm9uUGFuZWxzOiBIVE1MRWxlbWVudFtdW10gPSBbXG4gICAgICBbLi4uKHRoaXMuZXhwb3J0Q29uZmlnICYmIHRoaXMuZXhwb3J0Q29uZmlnLnN1cHBvcnRlZEZvcm1hdHMubGVuZ3RoID4gMCkgPyBbdWkuZGl2SChbXG4gICAgICAgIHVpLmNvbWJvUG9wdXAoXG4gICAgICAgICAgdWkuaWNvbkZBKCdhcnJvdy10by1ib3R0b20nKSxcbiAgICAgICAgICB0aGlzLmV4cG9ydENvbmZpZy5zdXBwb3J0ZWRGb3JtYXRzLFxuICAgICAgICAgIGFzeW5jIChmb3JtYXQ6IHN0cmluZykgPT4gREcuVXRpbHMuZG93bmxvYWQodGhpcy5leHBvcnRDb25maWchLmZpbGVuYW1lKGZvcm1hdCksIGF3YWl0IHRoaXMuZXhwb3J0Q29uZmlnIS5leHBvcnQoZm9ybWF0KSkpLFxuICAgICAgXSldOiBbXVxuICAgICAgXV07XG5cbiAgICBpZiAodGhpcy5mdW5jPy5pZCkge1xuICAgICAgY29uc3QgaGlzdG9yeUJ1dHRvbiA9IHVpLmljb25GQSgnaGlzdG9yeScsICgpID0+IHtcbiAgICAgICAgZ3Jvay5zaGVsbC53aW5kb3dzLnNob3dQcm9wZXJ0aWVzID0gIWdyb2suc2hlbGwud2luZG93cy5zaG93UHJvcGVydGllcztcbiAgICAgICAgaGlzdG9yeUJ1dHRvbi5jbGFzc0xpc3QudG9nZ2xlKCdkNC1jdXJyZW50Jyk7XG4gICAgICAgIGdyb2suc2hlbGwubyA9IHRoaXMuaGlzdG9yeVJvb3Q7XG4gICAgICB9KTtcblxuICAgICAgaGlzdG9yeUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdkNC10b2dnbGUtYnV0dG9uJyk7XG4gICAgICBpZiAoZ3Jvay5zaGVsbC53aW5kb3dzLnNob3dQcm9wZXJ0aWVzKSBoaXN0b3J5QnV0dG9uLmNsYXNzTGlzdC5hZGQoJ2Q0LWN1cnJlbnQnKTtcblxuICAgICAgY29uc3QgY2xvbmVSdW5CdG4gPSB1aS5idXR0b24oJ0Nsb25lJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLmNsb25lUnVuQXNDdXJyZW50KCk7XG4gICAgICB9LCAnQ2xvbmUgdGhlIHJ1bicpO1xuXG4gICAgICBuZXdSaWJib25QYW5lbHMucHVzaChbXG4gICAgICAgIGhpc3RvcnlCdXR0b24sXG4gICAgICAgIC4uLnRoaXMuZnVuY0NhbGw/Lm9wdGlvbnNbJ2lzSGlzdG9yaWNhbCddPyBbY2xvbmVSdW5CdG5dOiBbXSxcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIHRoaXMuc2V0UmliYm9uUGFuZWxzKG5ld1JpYmJvblBhbmVscyk7XG4gICAgcmV0dXJuIG5ld1JpYmJvblBhbmVscztcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0byBjcmVhdGUgYSBjdXN0b20gcmliYm9uIG1lbnUgb24gdGhlIHRvcC5cbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYnVpbGRSaWJib25NZW51KCkge1xuXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb25CZWZvcmVSZW1vdmVSdW5Gcm9tRmF2b3JpdGVzKGNhbGxUb0Zhdm9yaXRlOiBERy5GdW5jQ2FsbCkgeyB9XG5cbiAgcHVibGljIGFzeW5jIG9uQWZ0ZXJSZW1vdmVSdW5Gcm9tRmF2b3JpdGVzKGZhdm9yaXRlQ2FsbDogREcuRnVuY0NhbGwpIHsgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgcnVuIGFzIHVzdWFsIHJ1blxuICAgKiBAcGFyYW0gY2FsbFRvVW5mYXZvcml0ZSBGdW5jQ2FsbCBvYmplY3QgdG8gcmVtb3ZlIGZyb20gZmF2b3JpdGVzXG4gICAqIEByZXR1cm5zIFNhdmVkIEZ1bmNDYWxsXG4gICAqIEBzdGFiaWxpdHkgRXhwZXJpbWVudGFsXG4gKi9cbiAgcHVibGljIGFzeW5jIHJlbW92ZVJ1bkZyb21GYXZvcml0ZXMoY2FsbFRvVW5mYXZvcml0ZTogREcuRnVuY0NhbGwpOiBQcm9taXNlPERHLkZ1bmNDYWxsPiB7XG4gICAgY2FsbFRvVW5mYXZvcml0ZS5vcHRpb25zWyd0aXRsZSddID0gbnVsbDtcbiAgICBjYWxsVG9VbmZhdm9yaXRlLm9wdGlvbnNbJ2Fubm90YXRpb24nXSA9IG51bGw7XG4gICAgY2FsbFRvVW5mYXZvcml0ZS5vcHRpb25zWydpc0Zhdm9yaXRlJ10gPSBmYWxzZTtcbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlUmVtb3ZlUnVuRnJvbUZhdm9yaXRlcyhjYWxsVG9VbmZhdm9yaXRlKTtcbiAgICBjb25zdCBmYXZvcml0ZVNhdmUgPSBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLnNhdmUoY2FsbFRvVW5mYXZvcml0ZSk7XG4gICAgYXdhaXQgdGhpcy5vbkFmdGVyUmVtb3ZlUnVuRnJvbUZhdm9yaXRlcyhmYXZvcml0ZVNhdmUpO1xuICAgIHJldHVybiBmYXZvcml0ZVNhdmU7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb25CZWZvcmVBZGRpbmdUb0Zhdm9yaXRlcyhjYWxsVG9BZGRUb0Zhdm9yaXRlczogREcuRnVuY0NhbGwpIHsgfVxuXG4gIHB1YmxpYyBhc3luYyBvbkFmdGVyQWRkaW5nVG9GYXZvcml0ZXMoZmF2b3JpdGVDYWxsOiBERy5GdW5jQ2FsbCkgeyB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIHRoZSBydW4gYXMgZmF2b3JpdGVcbiAgICogQHBhcmFtIGNhbGxUb0Zhdm9yaXRlIEZ1bmNDYWxsIG9iamVjdCB0byBhZGQgdG8gZmF2b3JpdGVzXG4gICAqIEByZXR1cm5zIFNhdmVkIEZ1bmNDYWxsXG4gICAqIEBzdGFiaWxpdHkgRXhwZXJpbWVudGFsXG4gKi9cblxuICBwdWJsaWMgYXN5bmMgYWRkUnVuVG9GYXZvcml0ZXMoY2FsbFRvRmF2b3JpdGU6IERHLkZ1bmNDYWxsKTogUHJvbWlzZTxERy5GdW5jQ2FsbD4ge1xuICAgIGNhbGxUb0Zhdm9yaXRlLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSA9IHRydWU7XG4gICAgYXdhaXQgdGhpcy5vbkJlZm9yZUFkZGluZ1RvRmF2b3JpdGVzKGNhbGxUb0Zhdm9yaXRlKTtcbiAgICBjb25zdCBzYXZlZEZhdm9yaXRlID0gYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5jYWxscy5zYXZlKGNhbGxUb0Zhdm9yaXRlKTtcbiAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJBZGRpbmdUb0Zhdm9yaXRlcyhzYXZlZEZhdm9yaXRlKTtcbiAgICByZXR1cm4gc2F2ZWRGYXZvcml0ZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBvbkJlZm9yZVJlbW92ZVJ1bkZyb21TaGFyZWQoY2FsbFRvU2hhcmU6IERHLkZ1bmNDYWxsKSB7IH1cblxuICBwdWJsaWMgYXN5bmMgb25BZnRlclJlbW92ZVJ1bkZyb21TYWhyZWQoc2hhcmVkQ2FsbDogREcuRnVuY0NhbGwpIHsgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHJ1biBmcm9tIHNoYXJlZFxuICAgKiBAcGFyYW0gY2FsbFRvVW5zaGFyZSBGdW5jQ2FsbCBvYmplY3QgdG8gcmVtb3ZlIGZyb20gc2hhcmVkXG4gICAqIEByZXR1cm5zIFNhdmVkIEZ1bmNDYWxsXG4gICAqIEBzdGFiaWxpdHkgRXhwZXJpbWVudGFsXG4gKi9cblxuICBwdWJsaWMgYXN5bmMgcmVtb3ZlUnVuRnJvbVNoYXJlZChjYWxsVG9VbnNoYXJlOiBERy5GdW5jQ2FsbCk6IFByb21pc2U8REcuRnVuY0NhbGw+IHtcbiAgICBjYWxsVG9VbnNoYXJlLm9wdGlvbnNbJ3RpdGxlJ10gPSBudWxsO1xuICAgIGNhbGxUb1Vuc2hhcmUub3B0aW9uc1snYW5ub3RhdGlvbiddID0gbnVsbDtcbiAgICBjYWxsVG9VbnNoYXJlLm9wdGlvbnNbJ2lzU2hhcmVkJ10gPSBmYWxzZTtcbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlUmVtb3ZlUnVuRnJvbUZhdm9yaXRlcyhjYWxsVG9VbnNoYXJlKTtcbiAgICBjb25zdCBzYXZlZFNoYXJlZCA9IGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHMuc2F2ZShjYWxsVG9VbnNoYXJlKTtcbiAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJSZW1vdmVSdW5Gcm9tRmF2b3JpdGVzKHNhdmVkU2hhcmVkKTtcbiAgICByZXR1cm4gc2F2ZWRTaGFyZWQ7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb25CZWZvcmVBZGRpbmdUb1NoYXJlZChjYWxsVG9BZGRUb1NoYXJlZDogREcuRnVuY0NhbGwpIHsgfVxuXG4gIHB1YmxpYyBhc3luYyBvbkFmdGVyQWRkaW5nVG9TaGFyZWQoc2hhcmVkQ2FsbDogREcuRnVuY0NhbGwpIHsgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgcnVuIGFzIHNoYXJlZFxuICAgKiBAcGFyYW0gY2FsbFRvU2hhcmUgRnVuY0NhbGwgb2JqZWN0IHRvIGFkZCB0byBzaGFyZWRcbiAgICogQHJldHVybnMgU2F2ZWQgRnVuY0NhbGxcbiAgICogQHN0YWJpbGl0eSBFeHBlcmltZW50YWxcbiAqL1xuXG4gIHB1YmxpYyBhc3luYyBhZGRSdW5Ub1NoYXJlZChjYWxsVG9TaGFyZTogREcuRnVuY0NhbGwpOiBQcm9taXNlPERHLkZ1bmNDYWxsPiB7XG4gICAgY2FsbFRvU2hhcmUub3B0aW9uc1snaXNTaGFyZWQnXSA9IHRydWU7XG4gICAgYXdhaXQgdGhpcy5vbkJlZm9yZUFkZGluZ1RvU2hhcmVkKGNhbGxUb1NoYXJlKTtcblxuICAgIGNvbnN0IGFsbEdyb3VwID0gYXdhaXQgZ3Jvay5kYXBpLmdyb3Vwcy5maW5kKGRlZmF1bHRHcm91cHNJZHNbJ0FsbCB1c2VycyddKTtcblxuICAgIGNvbnN0IGRmT3V0cHV0cyA9IHd1KGNhbGxUb1NoYXJlLm91dHB1dFBhcmFtcy52YWx1ZXMoKSBhcyBERy5GdW5jQ2FsbFBhcmFtW10pXG4gICAgICAuZmlsdGVyKChvdXRwdXQpID0+IG91dHB1dC5wcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IERHLlRZUEUuREFUQV9GUkFNRSk7XG5cbiAgICBmb3IgKGNvbnN0IG91dHB1dCBvZiBkZk91dHB1dHMpIHtcbiAgICAgIGNvbnN0IGRmID0gY2FsbFRvU2hhcmUub3V0cHV0c1tvdXRwdXQubmFtZV0gYXMgREcuRGF0YUZyYW1lO1xuICAgICAgYXdhaXQgZ3Jvay5kYXBpLnBlcm1pc3Npb25zLmdyYW50KGRmLmdldFRhYmxlSW5mbygpLCBhbGxHcm91cCwgZmFsc2UpO1xuICAgIH1cblxuICAgIGNvbnN0IGRmSW5wdXRzID0gd3UoY2FsbFRvU2hhcmUuaW5wdXRQYXJhbXMudmFsdWVzKCkgYXMgREcuRnVuY0NhbGxQYXJhbVtdKVxuICAgICAgLmZpbHRlcigoaW5wdXQpID0+IGlucHV0LnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKTtcbiAgICBmb3IgKGNvbnN0IGlucHV0IG9mIGRmSW5wdXRzKSB7XG4gICAgICBjb25zdCBkZiA9IGNhbGxUb1NoYXJlLmlucHV0c1tpbnB1dC5uYW1lXSBhcyBERy5EYXRhRnJhbWU7XG4gICAgICBhd2FpdCBncm9rLmRhcGkucGVybWlzc2lvbnMuZ3JhbnQoZGYuZ2V0VGFibGVJbmZvKCksIGFsbEdyb3VwLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2F2ZWRTaGFyZWQgPSBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLnNhdmUoY2FsbFRvU2hhcmUpO1xuICAgIGF3YWl0IHRoaXMub25BZnRlckFkZGluZ1RvU2hhcmVkKHNhdmVkU2hhcmVkKTtcbiAgICByZXR1cm4gc2F2ZWRTaGFyZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGJlZm9yZSBzYXZpbmcgdGhlIEZVbmNDYWxsIHJlc3VsdHMgdG8gdGhlIGhpc3RvcmljYWwgcmVzdWx0cywgcmV0dXJucyB0aGUgc2F2ZWQgY2FsbC4gU2VlIGFsc28ge0BsaW5rIHNhdmVSdW59LlxuICAgKiBAcGFyYW0gY2FsbFRvU2F2ZSBGdW5jQ2FsbCBvYmplY3QgdG8gc2F2ZVxuICAgKiBAcmV0dXJucyBTYXZlZCBGdW5jQ2FsbFxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBhc3luYyBvbkJlZm9yZVNhdmVSdW4oY2FsbFRvU2F2ZTogREcuRnVuY0NhbGwpIHsgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgY29tcHV0YXRpb24gcmVzdWx0cyB0byB0aGUgaGlzdG9yaWNhbCByZXN1bHRzLCByZXR1cm5zIHRoZSBzYXZlZCBjYWxsLiBTZWUgYWxzbyB7QGxpbmsgc2F2ZVJ1bn0uXG4gICAqIEBwYXJhbSBzYXZlZENhbGwgRnVuY0NhbGwgb2JqZWN0IHRvIHNhdmVcbiAgICogQHJldHVybnMgU2F2ZWQgRnVuY0NhbGxcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYXN5bmMgb25BZnRlclNhdmVSdW4oc2F2ZWRDYWxsOiBERy5GdW5jQ2FsbCkgeyB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIHRoZSBjb21wdXRhdGlvbiByZXN1bHRzIHRvIHRoZSBoaXN0b3JpY2FsIHJlc3VsdHMsIHJldHVybnMgdGhlIHNhdmVkIGNhbGwuIFNlZSBhbHNvIHtAbGluayBsb2FkUnVufS5cbiAgICogQHBhcmFtIGNhbGxUb1NhdmUgRnVuY0NhbGwgb2JqZWN0IHRvIHNhdmVcbiAgICogQHJldHVybnMgU2F2ZWQgRnVuY0NhbGxcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYXN5bmMgc2F2ZVJ1bihjYWxsVG9TYXZlOiBERy5GdW5jQ2FsbCk6IFByb21pc2U8REcuRnVuY0NhbGw+IHtcbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlU2F2ZVJ1bihjYWxsVG9TYXZlKTtcbiAgICBjb25zdCBzYXZlZENhbGwgPSBhd2FpdCBoaXN0b3J5VXRpbHMuc2F2ZVJ1bihjYWxsVG9TYXZlKTtcbiAgICB0aGlzLmJ1aWxkSGlzdG9yeUJsb2NrKCk7XG4gICAgdGhpcy5wYXRoID0gYD9pZD0ke3NhdmVkQ2FsbC5pZH1gO1xuICAgIGF3YWl0IHRoaXMub25BZnRlclNhdmVSdW4oc2F2ZWRDYWxsKTtcbiAgICByZXR1cm4gc2F2ZWRDYWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBiZWZvcmUgZGVsZXRpbmcgdGhlIGNvbXB1dGF0aW9uIHJlc3VsdHMgZnJvbSBoaXN0b3J5LCByZXR1cm5zIGl0cyBpZC4gU2VlIGFsc28ge0BsaW5rIGxvYWRSdW59LlxuICAgKiBAcGFyYW0gY2FsbFRvRGVsZXRlIEZ1bmNDYWxsIG9iamVjdCB0byBiZSBkZWxldGVkXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGFzeW5jIG9uQmVmb3JlRGVsZXRlUnVuKGNhbGxUb0RlbGV0ZTogREcuRnVuY0NhbGwpIHsgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYWZ0ZXIgZGVsZXRpbmcgdGhlIGNvbXB1dGF0aW9uIHJlc3VsdHMgZnJvbSBoaXN0b3J5LCByZXR1cm5zIGl0cyBpZC4gU2VlIGFsc28ge0BsaW5rIGxvYWRSdW59LlxuICAgKiBAcGFyYW0gZGVsZXRlZENhbGwgZGVsZXRlZCBGdW5jQ2FsbCB2YWx1ZVxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBhc3luYyBvbkFmdGVyRGVsZXRlUnVuKGRlbGV0ZWRDYWxsOiBERy5GdW5jQ2FsbCkgeyB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIGNvbXB1dGF0aW9uIHJlc3VsdHMgZnJvbSBoaXN0b3J5LCByZXR1cm5zIGl0cyBpZC4gU2VlIGFsc28ge0BsaW5rIGxvYWRSdW59LlxuICAgKiBAcGFyYW0gY2FsbFRvRGVsZXRlIEZ1bmNDYWxsIG9iamVjdCB0byBkZWxldGVcbiAgICogQHJldHVybnMgSUQgb2YgZGVsZXRlZCBoaXN0b3JpY2FsIHJ1blxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG5cbiAgcHVibGljIGFzeW5jIGRlbGV0ZVJ1bihjYWxsVG9EZWxldGU6IERHLkZ1bmNDYWxsKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlRGVsZXRlUnVuKGNhbGxUb0RlbGV0ZSk7XG4gICAgYXdhaXQgaGlzdG9yeVV0aWxzLmRlbGV0ZVJ1bihjYWxsVG9EZWxldGUpO1xuICAgIGF3YWl0IHRoaXMub25BZnRlckRlbGV0ZVJ1bihjYWxsVG9EZWxldGUpO1xuICAgIHJldHVybiBjYWxsVG9EZWxldGUuaWQ7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGJlZm9yZSBmZXRjaGluZyB0aGUgaGlzdG9yaWNhbCBydW4gZGF0YSBpbiB7QGxpbmsgbG9hZFJ1bn0uXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGFzeW5jIG9uQmVmb3JlTG9hZFJ1bigpIHt9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBhZnRlciBmZXRjaGluZyB0aGUgaGlzdG9yaWNhbCBydW4gZGF0YSBpbiB7QGxpbmsgbG9hZFJ1bn0uXG4gICAqIEBwYXJhbSBmdW5jQ2FsbCBGdW5jQ2FsbCBmZXRjaGVkIGZyb20gc2VydmVyIGR1cmluZyB7QGxpbmsgbG9hZFJ1bn1cbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYXN5bmMgb25BZnRlckxvYWRSdW4oZnVuY0NhbGw6IERHLkZ1bmNDYWxsKSB7fVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0aGUgc3BlY2lmaWVkIGhpc3RvcmljYWwgcnVuLiBTZWUgYWxzbyB7QGxpbmsgc2F2ZVJ1bn0uXG4gICAqIEBwYXJhbSBmdW5jQ2FsbElkIElEIG9mIEZ1bmNDYWxsIHRvIGxvb2sgZm9yLiBHZXQgaXQgdXNpbmcge0BzZWUgZnVuY0NhbGwuaWR9IGZpZWxkXG4gICAqIEByZXR1cm5zIEZ1bmNDYWxsIGF1Z2VtZW50ZWQgd2l0aCBpbnB1dHMnIGFuZCBvdXRwdXRzJyB2YWx1ZXNcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuXG4gIHB1YmxpYyBhc3luYyBsb2FkUnVuKGZ1bmNDYWxsSWQ6IHN0cmluZyk6IFByb21pc2U8REcuRnVuY0NhbGw+IHtcbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlTG9hZFJ1bigpO1xuICAgIGNvbnN0IHB1bGxlZFJ1biA9IGF3YWl0IGhpc3RvcnlVdGlscy5sb2FkUnVuKGZ1bmNDYWxsSWQpO1xuICAgIGF3YWl0IHRoaXMub25BZnRlckxvYWRSdW4ocHVsbGVkUnVuKTtcbiAgICB0aGlzLnNldFJ1blZpZXdSZWFkb25seSgpO1xuICAgIHJldHVybiBwdWxsZWRSdW47XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb25CZWZvcmVDbG9uZVJ1bkFzQ3VycmVudCgpIHsgfVxuXG4gIHB1YmxpYyBhc3luYyBvbkFmdGVyQ2xvbmVSdW5Bc0N1cnJlbnQoKSB7IH1cblxuXG4gIHB1YmxpYyBhc3luYyBjbG9uZVJ1bkFzQ3VycmVudCgpIHtcbiAgICBpZiAoIXRoaXMuZnVuY0NhbGwpIHRocm93IG5ldyBFcnJvcignQ3VycmVudCBGdW5jY2FsbCBpcyBub3Qgc2V0Jyk7XG5cbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlQ2xvbmVSdW5Bc0N1cnJlbnQoKTtcbiAgICBjb25zdCBjbG9uZWRGdW5jY2FsbCA9IHRoaXMuZnVuY0NhbGwuY2xvbmUoKTtcbiAgICBjbG9uZWRGdW5jY2FsbC5uZXdJZCgpO1xuICAgIGNsb25lZEZ1bmNjYWxsLm9wdGlvbnNbJ2lzSGlzdG9yaWNhbCddID0gZmFsc2U7XG4gICAgdGhpcy5saW5rRnVuY2NhbGwoY2xvbmVkRnVuY2NhbGwpO1xuICAgIGF3YWl0IHRoaXMub25BZnRlckNsb25lUnVuQXNDdXJyZW50KCk7XG4gIH1cblxuICBwcml2YXRlIG92ZXJsYXlEaXYgPSB1aS5kaXYoW10sIHtzdHlsZToge1xuICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogJ2dyYXknLFxuICAgICdvcGFjaXR5JzogJzAuMDcnLFxuICAgICdwb3NpdGlvbic6ICdhYnNvbHV0ZScsXG4gICAgJ2JvdHRvbSc6ICcwJyxcbiAgICAnbGVmdCc6ICcwJyxcbiAgICAncmlnaHQnOiAnMCcsXG4gICAgJ3RvcCc6ICcwJyxcbiAgICAnZGlzcGxheSc6ICdub25lJyxcbiAgICAnY3Vyc29yJzogJ25vdC1hbGxvd2VkJyxcbiAgICAnei1pbmRleCc6ICcxJyxcbiAgfX0pO1xuXG4gIHByaXZhdGUgcm9vdFJlYWRvbmx5RXZlbnRMaXN0ZW5lcnMgPSBbXG4gICAgKGV2OiBNb3VzZUV2ZW50KT0+IHtcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMub3ZlcmxheURpdi5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xuICAgIH0sXG4gICAgKCkgPT4ge1xuICAgICAgdGhpcy5vdmVybGF5RGl2LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG4gICAgfSxcbiAgICAoKSA9PiB7XG4gICAgICBncm9rLnNoZWxsLndhcm5pbmcoJ0Nsb25lIHRoZSBydW4gdG8gZWRpdCBpdCcpO1xuICAgIH0sXG4gIF07XG5cbiAgcHJpdmF0ZSBpbnRlcmFjdGl2ZUV2ZW50TGlzdGVuZXJzID0gW1xuICAgICgpID0+dGhpcy5yb290LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5yb290UmVhZG9ubHlFdmVudExpc3RlbmVyc1syXSksXG4gICAgKCkgPT5zZXRUaW1lb3V0KCgpID0+IHRoaXMucm9vdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMucm9vdFJlYWRvbmx5RXZlbnRMaXN0ZW5lcnNbMl0pLCAxMDApXG4gIF07XG5cbiAgcHJpdmF0ZSBzZXRSdW5WaWV3UmVhZG9ubHkoKTogdm9pZCB7XG4gICAgdGhpcy5vdmVybGF5RGl2LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdkaXNwbGF5Jyk7XG4gICAgdGhpcy5yb290LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5yb290UmVhZG9ubHlFdmVudExpc3RlbmVyc1syXSk7XG4gICAgdGhpcy5yb290LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMucm9vdFJlYWRvbmx5RXZlbnRMaXN0ZW5lcnNbMF0pO1xuICAgIHRoaXMucm9vdC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5yb290UmVhZG9ubHlFdmVudExpc3RlbmVyc1sxXSk7XG4gICAgdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0lOVEVSQUNUSVZFX0NTU19DTEFTU31gKS5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5zdHlsZS56SW5kZXggPSAnMic7XG4gICAgICAoZWwgYXMgSFRNTEVsZW1lbnQpLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuaW50ZXJhY3RpdmVFdmVudExpc3RlbmVyc1swXSk7XG4gICAgICAoZWwgYXMgSFRNTEVsZW1lbnQpLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLmludGVyYWN0aXZlRXZlbnRMaXN0ZW5lcnNbMV0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRSdW5WaWV3RWRpdGFibGUoKTogdm9pZCB7XG4gICAgdGhpcy5vdmVybGF5RGl2LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgdGhpcy5yb290LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5yb290UmVhZG9ubHlFdmVudExpc3RlbmVyc1syXSk7XG4gICAgdGhpcy5yb290LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMucm9vdFJlYWRvbmx5RXZlbnRMaXN0ZW5lcnNbMF0pO1xuICAgIHRoaXMucm9vdC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5yb290UmVhZG9ubHlFdmVudExpc3RlbmVyc1sxXSk7XG4gICAgdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0lOVEVSQUNUSVZFX0NTU19DTEFTU31gKS5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnei1pbmRleCcpO1xuICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLmludGVyYWN0aXZlRXZlbnRMaXN0ZW5lcnNbMF0pO1xuICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5pbnRlcmFjdGl2ZUV2ZW50TGlzdGVuZXJzWzFdKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBhbGwgdGhlIGZ1bmN0aW9uIGNhbGwgb2YgdGhpcyBmdW5jdGlvbi5cbiAgICogRGVzaWduZWQgdG8gcHVsbCBoc3RvcmljYWwgcnVucyBpbiBmYXN0IG1hbm5lciBhbmQgdGhlIGNhbGwge0BsaW5rIGxvYWRSdW59IHdpdGggc3BlY2lmaWVkIHJ1biBJRC5cbiAgICogV0FSTklORzogRnVuY0NhbGwgaW5wdXRzL291dHB1dHMgZmllbGRzIGFyZSBub3QgaW5jbHVkZWRcbiAgICogQHBhcmFtIGZ1bmNJZCBJRCBvZiBGdW5jIHdoaWNoIGNhbGxzIHdlIGFyZSBsb29raW5nIGZvci4gR2V0IGl0IHVzaW5nIHtAbGluayBmdW5jLmlkfSBmaWVsZFxuICAgKiBAcmV0dXJucyBQcm9taXNlIG9uIGFycmF5IG9mIEZ1bmNDYWxscyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYXNzZWQgRnVuYyBJRFxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBhc3luYyBwdWxsUnVucyhmdW5jSWQ6IHN0cmluZywgZmlsdGVyT3B0aW9uczogRmlsdGVyT3B0aW9ucyA9IHt9LCBsaXN0T3B0aW9uczoge3BhZ2VTaXplPzogbnVtYmVyLCBwYWdlTnVtYmVyPzogbnVtYmVyLCBmaWx0ZXI/OiBzdHJpbmcsIG9yZGVyPzogc3RyaW5nfSA9IHt9KTogUHJvbWlzZTxERy5GdW5jQ2FsbFtdPiB7XG4gICAgcmV0dXJuIGhpc3RvcnlVdGlscy5wdWxsUnVucyhmdW5jSWQsIGZpbHRlck9wdGlvbnMsIGxpc3RPcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYmVmb3JlIGFjdHVhbCBjb21wdXRhdGlvbnMgYXJlIG1hZGUge0BsaW5rIHJ1bn0uXG4gICAqIEBwYXJhbSBmdW5jVG9DYWxsIEZ1bmNDYWxsIG9iamVjdCB0byBiZSBjYWxsZWQge0BzZWUgREcuRnVuY0NhbGwuY2FsbCgpfVxuICAgKiBAc3RhYmlsaXR5IEV4cGVyaW1lbnRhbFxuICAqL1xuICBwdWJsaWMgYXN5bmMgb25CZWZvcmVSdW4oZnVuY1RvQ2FsbDogREcuRnVuY0NhbGwpIHt9XG5cbiAgLyoqXG4gICAgKiBDYWxsZWQgYWZ0ZXIgYWN0dWFsIGNvbXB1dGF0aW9ucyBhcmUgbWFkZSB7QGxpbmsgcnVufS5cbiAgICAqIEBwYXJhbSBydW5GdW5jIEZ1bmNDYWxsIG9iamVjdCBhZnRlciBjYWxsIG1ldGhvZCB7QHNlZSBERy5GdW5jQ2FsbC5jYWxsKCl9XG4gICAgKiBAc3RhYmlsaXR5IEV4cGVyaW1lbnRhbFxuICAgKi9cbiAgcHVibGljIGFzeW5jIG9uQWZ0ZXJSdW4ocnVuRnVuYzogREcuRnVuY0NhbGwpIHtcbiAgICB0aGlzLm91dHB1dFBhcmFtZXRlcnNUb1ZpZXcodGhpcy5sYXN0Q2FsbCEpO1xuICB9XG5cblxuICBwdWJsaWMgYXN5bmMgcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5mdW5jQ2FsbCkgdGhyb3cgbmV3IEVycm9yKCdUaGUgY29ycmVzcG9kaW5nIGZ1bmN0aW9uIGlzIG5vdCBzcGVjaWZpZWQnKTtcblxuICAgIGF3YWl0IHRoaXMub25CZWZvcmVSdW4odGhpcy5mdW5jQ2FsbCk7XG4gICAgY29uc3QgcGkgPSBERy5UYXNrQmFyUHJvZ3Jlc3NJbmRpY2F0b3IuY3JlYXRlKCdDYWxjdWxhdGluZy4uLicpO1xuICAgIHRoaXMuZnVuY0NhbGwubmV3SWQoKTtcbiAgICBhd2FpdCB0aGlzLmZ1bmNDYWxsLmNhbGwoKTsgLy8gbXV0YXRlcyB0aGUgZnVuY0NhbGwgZmllbGRcbiAgICBwaS5jbG9zZSgpO1xuICAgIGF3YWl0IHRoaXMub25BZnRlclJ1bih0aGlzLmZ1bmNDYWxsKTtcblxuICAgIHRoaXMubGFzdENhbGwgPSBhd2FpdCB0aGlzLnNhdmVSdW4odGhpcy5mdW5jQ2FsbCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZGVmYXVsdEV4cG9ydEZpbGVuYW1lID0gKGZvcm1hdDogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIGAke3RoaXMubmFtZX0gLSAke25ldyBEYXRlKCkudG9Mb2NhbGVTdHJpbmcoKX0uJHt0aGlzLmV4cG9ydENvbmZpZyEuc3VwcG9ydGVkRXh0ZW5zaW9uc1tmb3JtYXRdfWA7XG4gIH07XG5cbiAgcHJvdGVjdGVkIGRlZmF1bHRTdXBwb3J0ZWRFeHBvcnRFeHRlbnNpb25zID0gKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAnRXhjZWwnOiAneGxzeCdcbiAgICB9O1xuICB9O1xuXG4gIHByb3RlY3RlZCBkZWZhdWx0U3VwcG9ydGVkRXhwb3J0Rm9ybWF0cyA9ICgpID0+IHtcbiAgICByZXR1cm4gWydFeGNlbCddO1xuICB9O1xuXG4gIHByb3RlY3RlZCBkZWZhdWx0RXhwb3J0ID0gYXN5bmMgKGZvcm1hdDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgbGFzdENhbGwgPSB0aGlzLmxhc3RDYWxsO1xuICAgIGlmICghbGFzdENhbGwpIHRocm93IG5ldyBFcnJvcihgRnVuY3Rpb24gd2FzIG5vdCBjYWxsZWRgKTtcblxuICAgIGlmICghdGhpcy5leHBvcnRDb25maWchLnN1cHBvcnRlZEZvcm1hdHMuaW5jbHVkZXMoZm9ybWF0KSkgdGhyb3cgbmV3IEVycm9yKGBGb3JtYXQgXCIke2Zvcm1hdH1cIiBpcyBub3Qgc3VwcG9ydGVkLmApO1xuXG4gICAgaWYgKCF0aGlzLmZ1bmMpIHRocm93IG5ldyBFcnJvcignVGhlIGNvcnJlc3BvZGluZyBmdW5jdGlvbiBpcyBub3Qgc3BlY2lmaWVkJyk7XG5cbiAgICBjb25zdCBCTE9CX1RZUEUgPSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQ7Y2hhcnNldD1VVEYtOCc7XG4gICAgY29uc3QgZXhwb3J0V29ya2Jvb2sgPSBuZXcgRXhjZWxKUy5Xb3JrYm9vaygpO1xuXG4gICAgY29uc3QgaXNTY2FsYXJUeXBlID0gKHR5cGU6IERHLlRZUEUpID0+IChERy5UWVBFU19TQ0FMQVIuaGFzKHR5cGUpKTtcblxuICAgIGNvbnN0IGlzRGF0YUZyYW1lID0gKHR5cGU6IERHLlRZUEUpID0+ICh0eXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpO1xuXG4gICAgY29uc3QgZGZJbnB1dHMgPSB0aGlzLmZ1bmMuaW5wdXRzLmZpbHRlcigoaW5wdXQpID0+IGlzRGF0YUZyYW1lKGlucHV0LnByb3BlcnR5VHlwZSkpO1xuICAgIGNvbnN0IHNjYWxhcklucHV0cyA9IHRoaXMuZnVuYy5pbnB1dHMuZmlsdGVyKChpbnB1dCkgPT4gaXNTY2FsYXJUeXBlKGlucHV0LnByb3BlcnR5VHlwZSkpO1xuICAgIGNvbnN0IGRmT3V0cHV0cyA9IHRoaXMuZnVuYy5vdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBpc0RhdGFGcmFtZShvdXRwdXQucHJvcGVydHlUeXBlKSk7XG4gICAgY29uc3Qgc2NhbGFyT3V0cHV0cyA9IHRoaXMuZnVuYy5vdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBpc1NjYWxhclR5cGUob3V0cHV0LnByb3BlcnR5VHlwZSkpO1xuXG4gICAgY29uc3QgaW5wdXRQYXJhbXMgPSBbLi4ubGFzdENhbGwuaW5wdXRQYXJhbXMudmFsdWVzKCldIGFzIERHLkZ1bmNDYWxsUGFyYW1bXTtcbiAgICBjb25zdCBvdXRwdXRQYXJhbXMgPSBbLi4ubGFzdENhbGwub3V0cHV0UGFyYW1zLnZhbHVlcygpXSBhcyBERy5GdW5jQ2FsbFBhcmFtW107XG5cbiAgICBkZklucHV0cy5mb3JFYWNoKChkZklucHV0KSA9PiB7XG4gICAgICBjb25zdCB2aXNpYmxlVGl0bGUgPSBkZklucHV0Lm9wdGlvbnMuY2FwdGlvbiB8fCBkZklucHV0Lm5hbWU7XG4gICAgICBjb25zdCBjdXJyZW50RGZTaGVldCA9IGV4cG9ydFdvcmtib29rLmFkZFdvcmtzaGVldChnZXRTaGVldE5hbWUodmlzaWJsZVRpdGxlLCBESVJFQ1RJT04uSU5QVVQpKTtcblxuICAgICAgY29uc3QgY3VycmVudERmID0gKGxhc3RDYWxsLmlucHV0c1tkZklucHV0Lm5hbWVdIGFzIERHLkRhdGFGcmFtZSk7XG4gICAgICBkZlRvU2hlZXQoY3VycmVudERmU2hlZXQsIGN1cnJlbnREZik7XG4gICAgfSk7XG5cbiAgICBpZiAoc2NhbGFySW5wdXRzLmxlbmd0aCkge1xuICAgICAgY29uc3QgaW5wdXRTY2FsYXJzU2hlZXQgPSBleHBvcnRXb3JrYm9vay5hZGRXb3Jrc2hlZXQoJ0lucHV0IHNjYWxhcnMnKTtcbiAgICAgIHNjYWxhcnNUb1NoZWV0KGlucHV0U2NhbGFyc1NoZWV0LCBzY2FsYXJJbnB1dHMubWFwKChzY2FsYXJJbnB1dCkgPT4gKHtcbiAgICAgICAgY2FwdGlvbjogc2NhbGFySW5wdXQub3B0aW9uc1snY2FwdGlvbiddIHx8IHNjYWxhcklucHV0Lm5hbWUsXG4gICAgICAgIHZhbHVlOiBsYXN0Q2FsbC5pbnB1dHNbc2NhbGFySW5wdXQubmFtZV0sXG4gICAgICAgIHVuaXRzOiBzY2FsYXJJbnB1dC5vcHRpb25zWyd1bml0cyddIHx8ICcnLFxuICAgICAgfSkpKTtcbiAgICB9XG5cbiAgICBkZk91dHB1dHMuZm9yRWFjaCgoZGZPdXRwdXQpID0+IHtcbiAgICAgIGNvbnN0IHZpc2libGVUaXRsZSA9IGRmT3V0cHV0Lm9wdGlvbnMuY2FwdGlvbiB8fCBkZk91dHB1dC5uYW1lO1xuICAgICAgY29uc3QgY3VycmVudERmU2hlZXQgPSBleHBvcnRXb3JrYm9vay5hZGRXb3Jrc2hlZXQoZ2V0U2hlZXROYW1lKHZpc2libGVUaXRsZSwgRElSRUNUSU9OLk9VVFBVVCkpO1xuXG4gICAgICBjb25zdCBjdXJyZW50RGYgPSAobGFzdENhbGwub3V0cHV0c1tkZk91dHB1dC5uYW1lXSBhcyBERy5EYXRhRnJhbWUpO1xuICAgICAgZGZUb1NoZWV0KGN1cnJlbnREZlNoZWV0LCBjdXJyZW50RGYpO1xuICAgIH0pO1xuXG5cbiAgICBpZiAoc2NhbGFyT3V0cHV0cy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IG91dHB1dFNjYWxhcnNTaGVldCA9IGV4cG9ydFdvcmtib29rLmFkZFdvcmtzaGVldCgnT3V0cHV0IHNjYWxhcnMnKTtcbiAgICAgIHNjYWxhcnNUb1NoZWV0KG91dHB1dFNjYWxhcnNTaGVldCwgc2NhbGFyT3V0cHV0cy5tYXAoKHNjYWxhck91dHB1dCkgPT4gKHtcbiAgICAgICAgY2FwdGlvbjogc2NhbGFyT3V0cHV0Lm9wdGlvbnNbJ2NhcHRpb24nXSB8fCBzY2FsYXJPdXRwdXQubmFtZSxcbiAgICAgICAgdmFsdWU6IGxhc3RDYWxsLm91dHB1dHNbc2NhbGFyT3V0cHV0Lm5hbWVdLFxuICAgICAgICB1bml0czogc2NhbGFyT3V0cHV0Lm9wdGlvbnNbJ3VuaXRzJ10gfHwgJycsXG4gICAgICB9KSkpO1xuICAgIH1cblxuICAgIGNvbnN0IHRhYkNvbnRyb2wgPSB0aGlzLnJlc3VsdHNUYWJDb250cm9sO1xuICAgIGlmICh0YWJDb250cm9sKSB7XG4gICAgICBmb3IgKGNvbnN0IHRhYkxhYmVsIG9mIHRoaXMudGFic0xhYmVscykge1xuICAgICAgICB0YWJDb250cm9sLmN1cnJlbnRQYW5lID0gdGFiQ29udHJvbC5nZXRQYW5lKHRhYkxhYmVsKTtcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgMTAwKSk7XG4gICAgICAgIGlmICh0YWJMYWJlbCA9PT0gJ0lucHV0Jykge1xuICAgICAgICAgIGZvciAoY29uc3QgaW5wdXRQYXJhbSBvZiBpbnB1dFBhcmFtcy5maWx0ZXIoKGlucHV0UGFyYW0pID0+IGlucHV0UGFyYW0ucHJvcGVydHkucHJvcGVydHlUeXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpKSB7XG4gICAgICAgICAgICBjb25zdCBub25HcmlkVmlld2VycyA9IChpbnB1dFBhcmFtLmF1eFsndmlld2VycyddIGFzIERHLlZpZXdlcltdKS5maWx0ZXIoKHZpZXdlcikgPT4gdmlld2VyLnR5cGUgIT09IERHLlZJRVdFUi5HUklEKTtcblxuICAgICAgICAgICAgY29uc3QgZGZJbnB1dCA9IGRmSW5wdXRzLmZpbmQoKGlucHV0KSA9PiBpbnB1dC5uYW1lID09PSBpbnB1dFBhcmFtLm5hbWUpO1xuICAgICAgICAgICAgY29uc3QgdmlzaWJsZVRpdGxlID0gZGZJbnB1dCEub3B0aW9ucy5jYXB0aW9uIHx8IGlucHV0UGFyYW0ubmFtZTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnREZiA9IChsYXN0Q2FsbC5pbnB1dHNbZGZJbnB1dCEubmFtZV0gYXMgREcuRGF0YUZyYW1lKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBbaW5kZXgsIHZpZXdlcl0gb2Ygbm9uR3JpZFZpZXdlcnMuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgIGlmICh2aWV3ZXIucm9vdC5wYXJlbnRFbGVtZW50Py5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmFtR3JpZFN3aXRjaGVzLmdldChpbnB1dFBhcmFtLm5hbWUpPy5jbGljaygpO1xuICAgICAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIDUwKSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBhd2FpdCBwbG90VG9TaGVldChcbiAgICAgICAgICAgICAgICBleHBvcnRXb3JrYm9vayxcbiAgICAgICAgICAgICAgICBleHBvcnRXb3JrYm9vay5nZXRXb3Jrc2hlZXQoZ2V0U2hlZXROYW1lKHZpc2libGVUaXRsZSwgRElSRUNUSU9OLklOUFVUKSksXG4gICAgICAgICAgICAgICAgdmlld2VyLnJvb3QsXG4gICAgICAgICAgICAgICAgY3VycmVudERmLmNvbHVtbnMubGVuZ3RoICsgMixcbiAgICAgICAgICAgICAgICAoaW5kZXggPiAwKSA/IE1hdGguY2VpbChub25HcmlkVmlld2Vyc1tpbmRleC0xXS5yb290LmNsaWVudEhlaWdodCAvIDIwKSArIDEgOiAwXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IG91dHB1dFBhcmFtIG9mIG91dHB1dFBhcmFtcy5maWx0ZXIoKG91dHB1dFBhcmFtKSA9PiBvdXRwdXRQYXJhbS5wcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IERHLlRZUEUuREFUQV9GUkFNRSAmJiBvdXRwdXRQYXJhbS5wcm9wZXJ0eS5jYXRlZ29yeSA9PT0gdGFiTGFiZWwpKSB7XG4gICAgICAgICAgICBjb25zdCBub25HcmlkVmlld2VycyA9IChvdXRwdXRQYXJhbS5hdXhbJ3ZpZXdlcnMnXSBhcyBERy5WaWV3ZXJbXSkuZmlsdGVyKCh2aWV3ZXIpID0+IHZpZXdlci50eXBlICE9PSBERy5WSUVXRVIuR1JJRCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRmT3V0cHV0ID0gZGZPdXRwdXRzLmZpbmQoKGlucHV0KSA9PiBpbnB1dC5uYW1lID09PSBvdXRwdXRQYXJhbS5uYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IHZpc2libGVUaXRsZSA9IGRmT3V0cHV0IS5vcHRpb25zLmNhcHRpb24gfHwgb3V0cHV0UGFyYW0ubmFtZTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnREZiA9IChsYXN0Q2FsbC5vdXRwdXRzW2RmT3V0cHV0IS5uYW1lXSBhcyBERy5EYXRhRnJhbWUpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtpbmRleCwgdmlld2VyXSBvZiBub25HcmlkVmlld2Vycy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgICAgaWYgKHZpZXdlci5yb290LnBhcmVudEVsZW1lbnQ/LnN0eWxlLmRpc3BsYXkgPT09ICdub25lJykge1xuICAgICAgICAgICAgICAgIHRoaXMucGFyYW1HcmlkU3dpdGNoZXMuZ2V0KG91dHB1dFBhcmFtLm5hbWUpPy5jbGljaygpO1xuICAgICAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIDUwKSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBhd2FpdCBwbG90VG9TaGVldChcbiAgICAgICAgICAgICAgICBleHBvcnRXb3JrYm9vayxcbiAgICAgICAgICAgICAgICBleHBvcnRXb3JrYm9vay5nZXRXb3Jrc2hlZXQoZ2V0U2hlZXROYW1lKHZpc2libGVUaXRsZSwgRElSRUNUSU9OLk9VVFBVVCkpLFxuICAgICAgICAgICAgICAgIHZpZXdlci5yb290LFxuICAgICAgICAgICAgICAgIGN1cnJlbnREZi5jb2x1bW5zLmxlbmd0aCArIDIsXG4gICAgICAgICAgICAgICAgKGluZGV4ID4gMCkgPyBNYXRoLmNlaWwobm9uR3JpZFZpZXdlcnNbaW5kZXgtMV0ucm9vdC5jbGllbnRIZWlnaHQgLyAyMCkgKyAxIDogMFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IGV4cG9ydFdvcmtib29rLnhsc3gud3JpdGVCdWZmZXIoKTtcblxuICAgIHJldHVybiBuZXcgQmxvYihbYnVmZmVyXSwge3R5cGU6IEJMT0JfVFlQRX0pO1xuICB9O1xuXG4gIHByb3RlY3RlZCBnZXQgaXNJbnB1dFBhbmVsUmVxdWlyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnVuYz8uaW5wdXRzLnNvbWUoKHApID0+IHAucHJvcGVydHlUeXBlID09IERHLlRZUEUuREFUQV9GUkFNRSAmJiBwLm9wdGlvbnNbJ3ZpZXdlciddICE9IG51bGwpIHx8IGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBvdXRQYXJhbUNhdGVnb3JpZXMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLm5ldyBTZXQodGhpcy5mdW5jIS5vdXRwdXRzLm1hcCgocCkgPT4gcC5jYXRlZ29yeSkpIC8vIGdldCBhbGwgb3V0cHV0IHBhcmFtcycgY2F0ZWdvcmllc1xuICAgIF07IC8vIGtlZXAgb25seSB1bmlxdWUgb2YgdGhlbVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBvdXRwdXRUYWJzTGFiZWxzKCkge1xuICAgIHJldHVybiBbXG4gICAgICAuLi50aGlzLm91dFBhcmFtQ2F0ZWdvcmllcyxcbiAgICAgIC4uLnRoaXMub3V0UGFyYW1DYXRlZ29yaWVzLmZpbmQoKHZhbCkgPT4gdmFsID09PSAnTWlzYycpID8gWydPdXRwdXQnXSA6IFtdLCAvLyBpZiBubyBjYXRlZ29yaWVzIGFyZSBzdGF0ZWQsIHRoZSBkZWZhdWx0IGNhdGVnb3J5IGlzIGFkZGVkXG4gICAgXTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgdGFic0xhYmVscygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5wYXJhbVRvQ2F0ZWdvcnlNYXApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBwYXJhbVRvQ2F0ZWdvcnlNYXAoKSB7XG4gICAgY29uc3QgbWFwID0ge30gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nW10+O1xuICAgIGlmICh0aGlzLmlzSW5wdXRQYW5lbFJlcXVpcmVkKVxuICAgICAgdGhpcy5mdW5jIS5pbnB1dHMuZm9yRWFjaCgocCkgPT4gbWFwWydJbnB1dCddID8gbWFwWydJbnB1dCddLnB1c2gocC5uYW1lKTogbWFwWydJbnB1dCddID0gW3AubmFtZV0pO1xuXG4gICAgdGhpcy5mdW5jIS5vdXRwdXRzLmZvckVhY2goKHApID0+IG1hcFtwLmNhdGVnb3J5ID09PSAnTWlzYycgPyAnT3V0cHV0JzogcC5jYXRlZ29yeV0gPyBtYXBbcC5jYXRlZ29yeSA9PT0gJ01pc2MnID8gJ091dHB1dCc6IHAuY2F0ZWdvcnldLnB1c2gocC5uYW1lKSA6IG1hcFtwLmNhdGVnb3J5ID09PSAnTWlzYycgPyAnT3V0cHV0JzogcC5jYXRlZ29yeV0gPSBbcC5uYW1lXSk7XG5cbiAgICByZXR1cm4gbWFwO1xuICB9XG5cblxuICBwcm90ZWN0ZWQgcmVuZGVyUnVuU2VjdGlvbihjYWxsOiBERy5GdW5jQ2FsbCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdWkud2FpdChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBydW5CdXR0b24gPSB1aS5iaWdCdXR0b24oJ1J1bicsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY2FsbC5hdXhbJ3ZpZXcnXSA9IHRoaXMuZGFydDtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW4oKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZWRpdG9yID0gdWkuZGl2KCk7XG4gICAgICBjb25zdCBpbnB1dHM6IERHLklucHV0QmFzZVtdID0gYXdhaXQgY2FsbC5idWlsZEVkaXRvcihlZGl0b3IsIHtjb25kZW5zZWQ6IHRydWV9KTtcbiAgICAgIGVkaXRvci5jbGFzc0xpc3QuYWRkKCd1aS1mb3JtJyk7XG4gICAgICBjb25zdCBidXR0b25zID0gdWkuZGl2SChbcnVuQnV0dG9uXSwge3N0eWxlOiB7J2p1c3RpZnktY29udGVudCc6ICdzcGFjZS1iZXR3ZWVuJ319KTtcbiAgICAgIGVkaXRvci5hcHBlbmRDaGlsZChidXR0b25zKTtcbiAgICAgIHJldHVybiBlZGl0b3I7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyUmVzdWx0cyhzd2l0Y2hUb091dHB1dDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBjb25zdCBjYXRlZ29yaWVzID0gdGhpcy50YWJzTGFiZWxzO1xuXG4gICAgaWYgKChjYXRlZ29yaWVzLmxlbmd0aCA+IDEgfHwgKGNhdGVnb3JpZXMubGVuZ3RoID09IDEgJiYgY2F0ZWdvcmllc1swXSAhPSAnTWlzYycpKSkge1xuICAgICAgdGhpcy5yZXN1bHRzVGFiQ29udHJvbCA9IERHLlRhYkNvbnRyb2wuY3JlYXRlKCk7XG4gICAgICBmb3IgKGNvbnN0IGMgb2YgY2F0ZWdvcmllcykge1xuICAgICAgICBpZiAoIXRoaXMucmVzdWx0VGFicy5oYXMoYykpXG4gICAgICAgICAgdGhpcy5yZXN1bHRUYWJzLnNldChjLCB1aS5kaXYoW10sICd1aS1wYW5lbCwgZ3Jvay1mdW5jLXJlc3VsdHMsIHVpLWJveCcpKTtcbiAgICAgICAgbGV0IG5hbWUgPSBjO1xuICAgICAgICBpZiAodGhpcy5pc0lucHV0UGFuZWxSZXF1aXJlZCAmJiBjYXRlZ29yaWVzLmxlbmd0aCA9PSAyICYmIGMgPT0gJ01pc2MnKVxuICAgICAgICAgIG5hbWUgPSAnT1VUUFVUJztcbiAgICAgICAgdGhpcy5yZXN1bHRzVGFiQ29udHJvbC5hZGRQYW5lKG5hbWUsICgpID0+IHRoaXMucmVzdWx0VGFicy5nZXQoYykgPz8gdWkuZGl2KCkpO1xuICAgICAgfVxuICAgICAgaWYgKGNhdGVnb3JpZXMubGVuZ3RoID4gMSAmJiB0aGlzLmlzSW5wdXRQYW5lbFJlcXVpcmVkICYmIHN3aXRjaFRvT3V0cHV0KVxuICAgICAgICB0aGlzLnJlc3VsdHNUYWJDb250cm9sLmN1cnJlbnRQYW5lID0gdGhpcy5yZXN1bHRzVGFiQ29udHJvbC5wYW5lc1sxXTtcbiAgICAgIHRoaXMucmVzdWx0c0RpdiA9IHRoaXMucmVzdWx0c1RhYkNvbnRyb2wucm9vdDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG91dHB1dFBhcmFtZXRlcnNUb1ZpZXcoY2FsbDogREcuRnVuY0NhbGwpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyUmVzdWx0cyh0cnVlKTtcbiAgICBmb3IgKGNvbnN0IHAgb2YgY2FsbC5vdXRwdXRQYXJhbXMudmFsdWVzKCkgYXMgREcuRnVuY0NhbGxQYXJhbVtdKSB7XG4gICAgICBwLnByb2Nlc3NPdXRwdXQoKTtcbiAgICAgIGlmIChwLnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PSBERy5UWVBFLkRBVEFfRlJBTUUgJiYgcC52YWx1ZSAhPSBudWxsKVxuICAgICAgICB0aGlzLmFwcGVuZE91dHB1dERmKHAsIHtjYXB0aW9uOiBwLnByb3BlcnR5Lm5hbWUsIGNhdGVnb3J5OiBwLnByb3BlcnR5LmNhdGVnb3J5fSk7XG4gICAgICBlbHNlIHRoaXMuYXBwZW5kUmVzdWx0U2NhbGFyKHAsIHtjYXB0aW9uOiBwLnByb3BlcnR5Lm5hbWUsIGNhdGVnb3J5OiBwLnByb3BlcnR5LmNhdGVnb3J5fSk7XG4gICAgfVxuICAgIHRoaXMuYnVpbGRPdXRwdXRCbG9jaygpO1xuICB9XG5cbiAgLy8gbWFwcHBpbmcgb2YgcGFyYW0gdG8gdGhlIHN3aXRjaGNlcyBvZiB0aGVpciB2aWV3ZXJzL2dyaWRzXG4gIHByaXZhdGUgcGFyYW1HcmlkU3dpdGNoZXM6IE1hcDxzdHJpbmcsIEhUTUxFbGVtZW50PiA9IG5ldyBNYXAoKTtcbiAgLy8gbWFwcHBpbmcgb2YgcGFyYW0gdG8gdGhlaXIgdmlld2VycyBwbGFjZWQgb24gRE9NXG4gIHByaXZhdGUgZXhpc3RpbmdQYXJhbVZpZXdlcnM6IE1hcDxzdHJpbmcsIERHLlZpZXdlcltdPiA9IG5ldyBNYXAoKTtcbiAgLy8gbWFwcHBpbmcgb2YgcGFyYW0gdG8gdGhlaXIgaHRtbCBlbGVtZW50c1xuICBwcml2YXRlIHBhcmFtU3BhbnM6IE1hcDxzdHJpbmcsIEhUTUxFbGVtZW50PiA9IG5ldyBNYXAoKTtcbiAgLy8gbWFwcHBpbmcgb2YgdGFiIG5hbWVzIHRvIHRoZWlyIGNvbnRlbnRcbiAgcHJpdmF0ZSByZXN1bHRUYWJzOiBNYXA8U3RyaW5nLCBIVE1MRWxlbWVudD4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgcmVzdWx0c1RhYkNvbnRyb2w6IERHLlRhYkNvbnRyb2wgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVzdWx0c0RpdjogSFRNTEVsZW1lbnQgPSB1aS5wYW5lbChbXSwgJ2dyb2stZnVuYy1yZXN1bHRzJyk7XG5cbiAgcHJvdGVjdGVkIGNvbnRyb2xzUm9vdDogSFRNTERpdkVsZW1lbnQgPSB1aS5ib3gobnVsbCwge3N0eWxlOiB7bWF4V2lkdGg6ICczNzBweCd9fSk7XG4gIHByb3RlY3RlZCByZXN1bHRzUm9vdDogSFRNTERpdkVsZW1lbnQgPSB1aS5ib3goKTtcbiAgcHJvdGVjdGVkIGhpc3RvcnlSb290OiBIVE1MRGl2RWxlbWVudCA9IHVpLmRpdlYoW10sIHtzdHlsZTogeydqdXN0aWZ5LWNvbnRlbnQnOiAnY2VudGVyJ319KTtcbiAgcHJvdGVjdGVkIGlucHV0c1Jvb3Q6IEhUTUxEaXZFbGVtZW50ID0gdWkucGFuZWwoW10sICdncm9rLWZ1bmMtcmVzdWx0cywgdWktYm94Jyk7XG5cbiAgcHJpdmF0ZSBhcHBlbmRPdXRwdXREZihwYXJhbTogREcuRnVuY0NhbGxQYXJhbSwgb3B0aW9ucz86IHsgY2FwdGlvbj86IHN0cmluZywgY2F0ZWdvcnk/OiBzdHJpbmcsIGhlaWdodD86IG51bWJlciB9KSB7XG4gICAgY29uc3QgcGFyYW1EZiA9IHBhcmFtLnZhbHVlIGFzIERHLkRhdGFGcmFtZTtcbiAgICBjb25zdCBoZWlnaHQgPSBvcHRpb25zPy5oZWlnaHQgPz8gNDAwO1xuICAgIGNvbnN0IHBhcmFtVmlld2VyczogREcuVmlld2VyW10gPSBwYXJhbS5hdXhbJ3ZpZXdlcnMnXSA/PyBbXTsgLy8gc3RvcmluZyB0aGUgdmlld2VycyBvZiBEZlxuICAgIGNvbnN0IHBhcmFtQ2FwdGlvbiA9IG9wdGlvbnM/LmNhcHRpb24gPz8gcGFyYW0uYXV4Wyd2aWV3ZXJUaXRsZSddID8/IHBhcmFtLnByb3BlcnR5LmNhcHRpb24gPz8gJyc7XG4gICAgbGV0IGV4aXN0aW5nVmlld2VycyA9IHRoaXMuZXhpc3RpbmdQYXJhbVZpZXdlcnMuZ2V0KHBhcmFtLm5hbWUpO1xuICAgIGlmIChleGlzdGluZ1ZpZXdlcnMgIT0gbnVsbCkge1xuICAgICAgZm9yIChjb25zdCB2IG9mIGV4aXN0aW5nVmlld2VycylcbiAgICAgICAgdi5kYXRhRnJhbWUgPSBwYXJhbURmO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV4aXN0aW5nVmlld2VycyA/Pz0gW107XG4gICAgdGhpcy5leGlzdGluZ1BhcmFtVmlld2Vycy5zZXQocGFyYW0ubmFtZSwgZXhpc3RpbmdWaWV3ZXJzKTtcbiAgICBpZiAocGFyYW1WaWV3ZXJzLmxlbmd0aCA9PSAwKVxuICAgICAgcGFyYW1WaWV3ZXJzLnB1c2gocGFyYW1EZi5wbG90LmdyaWQoKSk7XG5cbiAgICBjb25zdCB2aWV3ZXJzVG9IaWRlOiBIVE1MRWxlbWVudFtdID0gW107XG4gICAgbGV0IGJsb2NrczogbnVtYmVyID0gMDtcbiAgICBsZXQgYmxvY2tXaWR0aDogbnVtYmVyID0gMDtcbiAgICBjb25zdCBncmlkV3JhcHBlciA9IHVpLmJveChudWxsLCB7c3R5bGU6IHtoZWlnaHQ6ICcxMDAlJ319KTtcblxuICAgIGNvbnN0IGlzR3JpZFN3aXRjaGFibGUgPSB3dShwYXJhbVZpZXdlcnMpLmV2ZXJ5KCh2OiBERy5WaWV3ZXIpID0+IHYudHlwZSAhPT0gJ0dyaWQnKTtcbiAgICAkKGdyaWRXcmFwcGVyKS5oaWRlKCk7XG5cbiAgICBjb25zdCBnZXRIZWFkZXIgPSAoKSA9PiB7XG4gICAgICBjb25zdCBoZWFkZXJMYWJlbCA9IHBhcmFtQ2FwdGlvbiA/PyBwYXJhbURmLm5hbWUgPz8gJyc7XG4gICAgICBjb25zdCBoZWFkZXIgPSB1aS5kaXYoW10sICdncm9rLWZ1bmMtcmVzdWx0cy1oZWFkZXInKTtcbiAgICAgIGlmIChoZWFkZXJMYWJlbCAhPSAnJykge1xuICAgICAgICBjb25zdCBoID0gdWkuaDEoaGVhZGVyTGFiZWwpO1xuICAgICAgICB1aS5Ub29sdGlwLmJpbmQoaCwgKCkgPT4gaGVhZGVyTGFiZWwpO1xuICAgICAgICBoZWFkZXIuYXBwZW5kQ2hpbGQoaCk7XG4gICAgICB9XG4gICAgICBpZiAoaXNHcmlkU3dpdGNoYWJsZSkge1xuICAgICAgICBjb25zdCBpY29uID0gdWkuaWNvblN2ZygndGFibGUnLCAoZSkgPT4ge1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgdWkuc2V0RGlzcGxheUFsbCh2aWV3ZXJzVG9IaWRlLCB2aWV3ZXJzVG9IaWRlLnNvbWUoKHZpZXdlcikgPT4gdmlld2VyLnN0eWxlLmRpc3BsYXkgPT09ICdub25lJykpO1xuICAgICAgICAgIHVpLnNldERpc3BsYXkoZ3JpZFdyYXBwZXIsIGdyaWRXcmFwcGVyLnN0eWxlLmRpc3BsYXkgPT09ICdub25lJyk7XG4gICAgICAgIH0sICdTaG93IGdyaWQnKTtcbiAgICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKGljb24pO1xuICAgICAgICB0aGlzLnBhcmFtR3JpZFN3aXRjaGVzLnNldChwYXJhbS5uYW1lLCBpY29uKTtcbiAgICAgIH1cbiAgICAgIGlmICghZ3Jvay5zaGVsbC50YWJsZXMuaW5jbHVkZXMocGFyYW1EZikpIHtcbiAgICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKFxuICAgICAgICAgIHVpLmljb25zLmFkZCgoZTogYW55KSA9PiB7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgY29uc3QgdiA9IGdyb2suc2hlbGwuYWRkVGFibGVWaWV3KHBhcmFtRGYpO1xuICAgICAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCB2aWV3ZXIgb2YgcGFyYW1WaWV3ZXJzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHZpZXdlci50eXBlICE9ICdHcmlkJykge1xuICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Vmlld2VyID0gYXdhaXQgcGFyYW1EZi5wbG90LmZyb21UeXBlKHZpZXdlci50eXBlKSBhcyBERy5WaWV3ZXI7XG4gICAgICAgICAgICAgICAgICBuZXdWaWV3ZXIuc2V0T3B0aW9ucyh2aWV3ZXIuZ2V0T3B0aW9ucygpKTtcbiAgICAgICAgICAgICAgICAgIHYuYWRkVmlld2VyKG5ld1ZpZXdlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgJ0FkZCB0byB3b3Jrc3BhY2UnXG4gICAgICAgICAgKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaGVhZGVyO1xuICAgIH07XG5cbiAgICBpZiAoaXNHcmlkU3dpdGNoYWJsZSkge1xuICAgICAgY29uc3QgZ3JpZCA9IHBhcmFtRGYucGxvdC5ncmlkKCk7XG4gICAgICBncmlkV3JhcHBlci5hcHBlbmRDaGlsZChncmlkLnJvb3QpO1xuICAgICAgZXhpc3RpbmdWaWV3ZXJzLnB1c2goZ3JpZCk7XG4gICAgfVxuXG4gICAgY29uc3QgaGVhZGVyID0gZ2V0SGVhZGVyKCk7XG4gICAgY29uc3Qgd3JhcHBlciA9IHVpLmRpdkgoW10sIHtzdHlsZToge2hlaWdodDogJzEwMCUnfX0pO1xuICAgIHBhcmFtVmlld2Vycy5mb3JFYWNoKCh2aWV3ZXIpID0+IHtcbiAgICAgIGlmICh2aWV3ZXI/LnRhZ3MgPT0gbnVsbClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgZXhpc3RpbmdWaWV3ZXJzIS5wdXNoKHZpZXdlcik7XG4gICAgICBjb25zdCB2aWV3ZXJTaXplID0gdmlld2VyLnRhZ3NbJy5ibG9jay1zaXplJ10gPz8gMTAwOyAvLyBnZXR0aW5nIGAoYmxvY2s6IDI1KWAgdmFsdWU7IGlmIG5vdCBkZWZpbmVkLCBpdCBpcyAxMDBcblxuICAgICAgdmlld2VyLnJvb3Quc3R5bGUuaGVpZ2h0ID0gJzEwMCUnO1xuICAgICAgdmlld2VyLnJvb3QuY2xhc3NMaXN0LmFkZChgdWktYmxvY2stJHt2aWV3ZXJTaXplfWApO1xuICAgICAgaWYgKGJsb2NrcyArIHZpZXdlclNpemUgPD0gMTAwKSB7XG4gICAgICAgIHZpZXdlcnNUb0hpZGUucHVzaCh3cmFwcGVyKTtcbiAgICAgICAgYmxvY2tXaWR0aCArPSB2aWV3ZXJTaXplO1xuICAgICAgfVxuICAgICAgYmxvY2tzICs9IHZpZXdlclNpemU7XG4gICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKHZpZXdlci5yb290KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGJsb2NrID0gdWkuZGl2VihbaGVhZGVyLCB3cmFwcGVyLCBncmlkV3JhcHBlcl0sIHtzdHlsZToge2hlaWdodDogYCR7aGVpZ2h0fXB4YCwgd2lkdGg6IGAke2Jsb2NrV2lkdGh9JWB9fSk7XG4gICAgYmxvY2suY2xhc3NMaXN0LmFkZCgndWktYm94Jyk7XG4gICAgdGhpcy5hcHBlbmRSZXN1bHRFbGVtZW50KGJsb2NrLCBvcHRpb25zPy5jYXRlZ29yeSk7XG4gIH1cblxuICBwcml2YXRlIGFwcGVuZFJlc3VsdFNjYWxhcihwYXJhbTogREcuRnVuY0NhbGxQYXJhbSwgb3B0aW9uczogeyBjYXB0aW9uPzogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCBoZWlnaHQ/OiBudW1iZXIgfSkge1xuICAgIGNvbnN0IHNwYW4gPSB1aS5zcGFuKFtgJHtvcHRpb25zLmNhcHRpb24gPz8gcGFyYW0ubmFtZX06IGAsIGAke3BhcmFtLnZhbHVlfWBdKTtcbiAgICBpZiAoIXRoaXMucGFyYW1TcGFucy5nZXQocGFyYW0ubmFtZSkpIHtcbiAgICAgIGlmICh0aGlzLnJlc3VsdHNUYWJDb250cm9sKVxuICAgICAgICB0aGlzLnJlc3VsdFRhYnMuZ2V0KG9wdGlvbnMuY2F0ZWdvcnkpIS5hcHBlbmRDaGlsZChzcGFuKTtcbiAgICAgIGVsc2VcbiAgICAgICAgdGhpcy5yZXN1bHRzRGl2LmFwcGVuZENoaWxkKHNwYW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhcmFtU3BhbnMuZ2V0KHBhcmFtLm5hbWUpPy5yZXBsYWNlV2l0aChzcGFuKTtcbiAgICB9XG4gICAgdGhpcy5wYXJhbVNwYW5zLnNldChwYXJhbS5uYW1lLCBzcGFuKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwZW5kUmVzdWx0RWxlbWVudChkOiBIVE1MRWxlbWVudCwgY2F0ZWdvcnk/OiBzdHJpbmcpIHtcbiAgICBpZiAoY2F0ZWdvcnkgIT0gbnVsbCAmJiB0aGlzLnJlc3VsdHNUYWJDb250cm9sICE9IHVuZGVmaW5lZCAmJiB0aGlzLnJlc3VsdFRhYnMuZ2V0KGNhdGVnb3J5KSAhPSBudWxsKVxuICAgICAgdGhpcy5yZXN1bHRUYWJzLmdldChjYXRlZ29yeSkhLmFwcGVuZENoaWxkKGQpO1xuICAgIGVsc2VcbiAgICAgIHRoaXMucmVzdWx0c0Rpdi5hcHBlbmRDaGlsZChkKTtcbiAgfVxufVxuXG5jb25zdCBnZXRTaGVldE5hbWUgPSAobmFtZTogc3RyaW5nLCBkaXJlY3Rpb246IERJUkVDVElPTikgPT4ge1xuICBjb25zdCBpZGVhbE5hbWUgPSBgJHtkaXJlY3Rpb259IC0gJHtuYW1lfWA7XG4gIHJldHVybiAoaWRlYWxOYW1lLmxlbmd0aCA+IDMxKSA/IG5hbWUuc3Vic3RyaW5nKDAsIDMyKSA6IGlkZWFsTmFtZTtcbn07XG5cbmVudW0gRElSRUNUSU9OIHtcbiAgSU5QVVQgPSAnSW5wdXQnLFxuICBPVVRQVVQgPSAnT3V0cHV0J1xufVxuXG5jb25zdCBzY2FsYXJzVG9TaGVldCA9IChzaGVldDogRXhjZWxKUy5Xb3Jrc2hlZXQsIHNjYWxhcnM6IHsgY2FwdGlvbjogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCB1bml0czogc3RyaW5nIH1bXSkgPT4ge1xuICBzaGVldC5hZGRSb3coWydQYXJhbWV0ZXInLCAnVmFsdWUnLCAnVW5pdHMnXSkuZm9udCA9IHtib2xkOiB0cnVlfTtcbiAgc2NhbGFycy5mb3JFYWNoKChzY2FsYXIpID0+IHtcbiAgICBzaGVldC5hZGRSb3coW3NjYWxhci5jYXB0aW9uLCBzY2FsYXIudmFsdWUsIHNjYWxhci51bml0c10pO1xuICB9KTtcblxuICBzaGVldC5nZXRDb2x1bW4oMSkud2lkdGggPSBNYXRoLm1heChcbiAgICAuLi5zY2FsYXJzLm1hcCgoc2NhbGFyKSA9PiBzY2FsYXIuY2FwdGlvbi50b1N0cmluZygpLmxlbmd0aCksICdQYXJhbWV0ZXInLmxlbmd0aFxuICApICogMS4yO1xuICBzaGVldC5nZXRDb2x1bW4oMikud2lkdGggPSBNYXRoLm1heCguLi5zY2FsYXJzLm1hcCgoc2NhbGFyKSA9PiBzY2FsYXIudmFsdWUudG9TdHJpbmcoKS5sZW5ndGgpLCAnVmFsdWUnLmxlbmd0aCkgKiAxLjI7XG4gIHNoZWV0LmdldENvbHVtbigzKS53aWR0aCA9IE1hdGgubWF4KC4uLnNjYWxhcnMubWFwKChzY2FsYXIpID0+IHNjYWxhci51bml0cy50b1N0cmluZygpLmxlbmd0aCksICdVbml0cycubGVuZ3RoKSAqIDEuMjtcbn07XG5cbmNvbnN0IGRmVG9TaGVldCA9IChzaGVldDogRXhjZWxKUy5Xb3Jrc2hlZXQsIGRmOiBERy5EYXRhRnJhbWUpID0+IHtcbiAgc2hlZXQuYWRkUm93KGRmLmNvbHVtbnMubmFtZXMoKSkuZm9udCA9IHtib2xkOiB0cnVlfTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZi5yb3dDb3VudDsgaSsrKVxuICAgIHNoZWV0LmFkZFJvdyhbLi4uZGYucm93KGkpLmNlbGxzXS5tYXAoKGNlbGw6IERHLkNlbGwpID0+IGNlbGwudmFsdWUpKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRmLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICBzaGVldC5nZXRDb2x1bW4oaSArIDEpLndpZHRoID1cbiAgICAgIE1hdGgubWF4KFxuICAgICAgICAuLi5kZi5jb2x1bW5zLmJ5SW5kZXgoaSkuY2F0ZWdvcmllcy5tYXAoKGNhdGVnb3J5KSA9PiBjYXRlZ29yeS50b1N0cmluZygpLmxlbmd0aCksXG4gICAgICAgIGRmLmNvbHVtbnMuYnlJbmRleChpKS5uYW1lLmxlbmd0aFxuICAgICAgKSAqIDEuMjtcbiAgfVxufTtcblxuY29uc3QgcGxvdFRvU2hlZXQgPSBhc3luYyAoZXhwb3J0V2I6IEV4Y2VsSlMuV29ya2Jvb2ssIHNoZWV0OiBFeGNlbEpTLldvcmtzaGVldCwgcGxvdDogSFRNTEVsZW1lbnQsIGNvbHVtbkZvckltYWdlOiBudW1iZXIsIHJvd0ZvckltYWdlOiBudW1iZXIgPSAwKSA9PiB7XG4gIGNvbnN0IGNhbnZhcyA9IGF3YWl0IGh0bWwyY2FudmFzKHBsb3QgYXMgSFRNTEVsZW1lbnQsIHtsb2dnaW5nOiBmYWxzZX0pO1xuICBjb25zdCBkYXRhVXJsID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJyk7XG5cbiAgY29uc3QgaW1hZ2VJZCA9IGV4cG9ydFdiLmFkZEltYWdlKHtcbiAgICBiYXNlNjQ6IGRhdGFVcmwsXG4gICAgZXh0ZW5zaW9uOiAncG5nJyxcbiAgfSk7XG4gIHNoZWV0LmFkZEltYWdlKGltYWdlSWQsIHtcbiAgICB0bDoge2NvbDogY29sdW1uRm9ySW1hZ2UsIHJvdzogcm93Rm9ySW1hZ2V9LFxuICAgIGV4dDoge3dpZHRoOiBjYW52YXMud2lkdGgsIGhlaWdodDogY2FudmFzLmhlaWdodH0sXG4gIH0pO1xufTtcbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history-utils.d.ts","sourceRoot":"","sources":["history-utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAc,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAyB3D,yBAAiB,YAAY,CAAC;IAC5B,SAAsB,OAAO,CAAC,UAAU,EAAE,MAAM,wBAkB/C;IAED,SAAsB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,wBAYpD;IAED,SAAsB,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC,QAAQ,iBAExD;IAED;;;;;;;KAOC;IACD,SAAsB,QAAQ,CAC5B,MAAM,EAAE,MAAM,EACd,aAAa,GAAE,aAAkB,EACjC,WAAW,GAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAM,GAC1F,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAOxB;IAED;;;;;;;KAOC;IACD,SAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,aAAa,GAAE,aAAkB,EACjC,WAAW,GAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAM,GAC1F,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"history-utils.d.ts","sourceRoot":"","sources":["history-utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAc,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAyB3D,yBAAiB,YAAY,CAAC;IAC5B,SAAsB,OAAO,CAAC,UAAU,EAAE,MAAM,wBAkB/C;IAED,SAAsB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,wBAYpD;IAED,SAAsB,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC,QAAQ,iBAExD;IAED;;;;;;;KAOC;IACD,SAAsB,QAAQ,CAC5B,MAAM,EAAE,MAAM,EACd,aAAa,GAAE,aAAkB,EACjC,WAAW,GAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAM,GAC1F,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAOxB;IAED;;;;;;;KAOC;IACD,SAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,aAAa,GAAE,aAAkB,EACjC,WAAW,GAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAM,GAC1F,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAUxB;CACF"}
|
package/src/history-utils.js
CHANGED
|
@@ -107,12 +107,14 @@ export var historyUtils;
|
|
|
107
107
|
let filteringString = `func.name="${funcName}"`;
|
|
108
108
|
filteringString += filterOptions.author ? ` and session.user.id="${filterOptions.author.id}"` : '';
|
|
109
109
|
filteringString += filterOptions.date ? getSearchStringByPattern(filterOptions.date) : '';
|
|
110
|
-
filteringString += filterOptions.isShared ? `and options.isShared="true"` : '';
|
|
111
|
-
|
|
110
|
+
filteringString += filterOptions.isShared ? ` and options.isShared="true"` : '';
|
|
111
|
+
filteringString += filterOptions.text ?
|
|
112
|
+
` and ((options.title like "${filterOptions.text}") or (options.annotation like "${filterOptions.text}"))` : '';
|
|
113
|
+
const filter = grok.dapi.functions.calls.filter(`(${filteringString})`).include('session.user, options');
|
|
112
114
|
const list = filter.list(listOptions);
|
|
113
115
|
return list;
|
|
114
116
|
});
|
|
115
117
|
}
|
|
116
118
|
historyUtils.pullRunsByName = pullRunsByName;
|
|
117
119
|
})(historyUtils || (historyUtils = {}));
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhpc3RvcnktdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsZ0NBQWdDO0FBQ2hDLE9BQU8sS0FBSyxJQUFJLE1BQU0sbUJBQW1CLENBQUM7QUFFMUMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFHcEIsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLFdBQXdCLEVBQUUsRUFBRTtJQUM1RCxRQUFRLFdBQVcsRUFBRTtRQUNyQixLQUFLLE9BQU87WUFDVixPQUFPLG9CQUFvQixDQUFDO1FBQzlCLEtBQUssV0FBVztZQUNkLE9BQU8sc0NBQXNDLENBQUM7UUFDaEQsS0FBSyxVQUFVO1lBQ2IsT0FBTyxFQUFFLENBQUM7UUFDWixLQUFLLFdBQVc7WUFDZCxPQUFPLHFDQUFxQyxDQUFDO1FBQy9DLEtBQUssV0FBVztZQUNkLE9BQU8sb0JBQW9CLENBQUM7UUFDOUIsS0FBSyxZQUFZO1lBQ2YsT0FBTyxzQ0FBc0MsQ0FBQztRQUNoRCxLQUFLLFlBQVk7WUFDZixPQUFPLG9CQUFvQixDQUFDO1FBQzlCLEtBQUssV0FBVztZQUNkLE9BQU8sc0NBQXNDLENBQUM7UUFDaEQsS0FBSyxXQUFXO1lBQ2QsT0FBTyxvQkFBb0IsQ0FBQztLQUM3QjtBQUNILENBQUMsQ0FBQztBQUVGLE1BQU0sS0FBVyxZQUFZLENBaUY1QjtBQWpGRCxXQUFpQixZQUFZO0lBQzNCLFNBQXNCLE9BQU8sQ0FBQyxVQUFrQjs7WUFDOUMsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzlGLGtFQUFrRTtZQUNsRSxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FB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Q0FBQyx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN6RixlQUFlLElBQUksYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsNkJBQTZCLENBQUEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUM5RSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1lBQ2xHLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdEMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0tBQUE7SUFacUIsMkJBQWMsaUJBWW5DLENBQUE7QUFDSCxDQUFDLEVBakZnQixZQUFZLEtBQVosWUFBWSxRQWlGNUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSB2YWxpZC1qc2RvYyAqL1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB3dSBmcm9tICd3dSc7XG5pbXBvcnQge0RhdGVPcHRpb25zLCBGaWx0ZXJPcHRpb25zfSBmcm9tICcuL2Z1bmN0aW9uLXZpZXcnO1xuXG5jb25zdCBnZXRTZWFyY2hTdHJpbmdCeVBhdHRlcm4gPSAoZGF0ZVBhdHRlcm46IERhdGVPcHRpb25zKSA9PiB7XG4gIHN3aXRjaCAoZGF0ZVBhdHRlcm4pIHtcbiAgY2FzZSAnVG9kYXknOlxuICAgIHJldHVybiBgIGFuZCBzdGFydGVkID4gLTFkYDtcbiAgY2FzZSAnWWVzdGVyZGF5JzpcbiAgICByZXR1cm4gYCBhbmQgc3RhcnRlZCA+IC0yZCBhbmQgc3RhcnRlZCA8IC0xZGA7XG4gIGNhc2UgJ0FueSB0aW1lJzpcbiAgICByZXR1cm4gYGA7XG4gIGNhc2UgJ0xhc3QgeWVhcic6XG4gICAgcmV0dXJuIGBhbmQgc3RhcnRlZCA+IC0yeSBhbmQgc3RhcnRlZCA8IC0xeWA7XG4gIGNhc2UgJ1RoaXMgeWVhcic6XG4gICAgcmV0dXJuIGAgYW5kIHN0YXJ0ZWQgPiAtMXlgO1xuICBjYXNlICdMYXN0IG1vbnRoJzpcbiAgICByZXR1cm4gYCBhbmQgc3RhcnRlZCA+IC0ybSBhbmQgc3RhcnRlZCA8IC0xbWA7XG4gIGNhc2UgJ1RoaXMgbW9udGgnOlxuICAgIHJldHVybiBgIGFuZCBzdGFydGVkID4gLTFtYDtcbiAgY2FzZSAnTGFzdCB3ZWVrJzpcbiAgICByZXR1cm4gYCBhbmQgc3RhcnRlZCA+IC0ydyBhbmQgc3RhcnRlZCA8IC0xd2A7XG4gIGNhc2UgJ1RoaXMgd2Vlayc6XG4gICAgcmV0dXJuIGAgYW5kIHN0YXJ0ZWQgPiAtMXdgO1xuICB9XG59O1xuXG5leHBvcnQgbmFtZXNwYWNlIGhpc3RvcnlVdGlscyB7XG4gIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkUnVuKGZ1bmNDYWxsSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHB1bGxlZFJ1biA9IGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHMuaW5jbHVkZSgnaW5wdXRzLCBvdXRwdXRzJykuZmluZChmdW5jQ2FsbElkKTtcbiAgICAvLyBGSVggTUU6IG1hbnVhbGx5IGdldCBzY3JpcHQgc2luY2UgcHVsbGVkUnVuIGNvbnRhaW5zIGVtcHR5IEZ1bmNcbiAgICBjb25zdCBzY3JpcHQgPSBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmZpbmQocHVsbGVkUnVuLmZ1bmMuaWQpO1xuICAgIC8vQHRzLWlnbm9yZVxuICAgIHdpbmRvdy5ncm9rX0Z1bmNDYWxsX1NldF9GdW5jKHB1bGxlZFJ1bi5kYXJ0LCBzY3JpcHQuZGFydCk7XG4gICAgcHVsbGVkUnVuLm9wdGlvbnNbJ2lzSGlzdG9yaWNhbCddID0gdHJ1ZTtcbiAgICBjb25zdCBkZk91dHB1dHMgPSB3dShwdWxsZWRSdW4ub3V0cHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSlcbiAgICAgIC5maWx0ZXIoKG91dHB1dCkgPT4gb3V0cHV0LnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKTtcbiAgICBmb3IgKGNvbnN0IG91dHB1dCBvZiBkZk91dHB1dHMpXG4gICAgICBwdWxsZWRSdW4ub3V0cHV0c1tvdXRwdXQubmFtZV0gPSBhd2FpdCBncm9rLmRhcGkudGFibGVzLmdldFRhYmxlKHB1bGxlZFJ1bi5vdXRwdXRzW291dHB1dC5uYW1lXSk7XG5cbiAgICBjb25zdCBkZklucHV0cyA9IHd1KHB1bGxlZFJ1bi5pbnB1dFBhcmFtcy52YWx1ZXMoKSBhcyBERy5GdW5jQ2FsbFBhcmFtW10pXG4gICAgICAuZmlsdGVyKChpbnB1dCkgPT4gaW5wdXQucHJvcGVydHkucHJvcGVydHlUeXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpO1xuICAgIGZvciAoY29uc3QgaW5wdXQgb2YgZGZJbnB1dHMpXG4gICAgICBwdWxsZWRSdW4uaW5wdXRzW2lucHV0Lm5hbWVdID0gYXdhaXQgZ3Jvay5kYXBpLnRhYmxlcy5nZXRUYWJsZShwdWxsZWRSdW4uaW5wdXRzW2lucHV0Lm5hbWVdKTtcblxuICAgIHJldHVybiBwdWxsZWRSdW47XG4gIH1cblxuICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gc2F2ZVJ1bihjYWxsVG9TYXZlOiBERy5GdW5jQ2FsbCkge1xuICAgIGNvbnN0IGRmT3V0cHV0cyA9IHd1KGNhbGxUb1NhdmUub3V0cHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSlcbiAgICAgIC5maWx0ZXIoKG91dHB1dCkgPT4gb3V0cHV0LnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKTtcbiAgICBmb3IgKGNvbnN0IG91dHB1dCBvZiBkZk91dHB1dHMpXG4gICAgICBhd2FpdCBncm9rLmRhcGkudGFibGVzLnVwbG9hZERhdGFGcmFtZShjYWxsVG9TYXZlLm91dHB1dHNbb3V0cHV0Lm5hbWVdKTtcblxuICAgIGNvbnN0IGRmSW5wdXRzID0gd3UoY2FsbFRvU2F2ZS5pbnB1dFBhcmFtcy52YWx1ZXMoKSBhcyBERy5GdW5jQ2FsbFBhcmFtW10pXG4gICAgICAuZmlsdGVyKChpbnB1dCkgPT4gaW5wdXQucHJvcGVydHkucHJvcGVydHlUeXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpO1xuICAgIGZvciAoY29uc3QgaW5wdXQgb2YgZGZJbnB1dHMpXG4gICAgICBhd2FpdCBncm9rLmRhcGkudGFibGVzLnVwbG9hZERhdGFGcmFtZShjYWxsVG9TYXZlLmlucHV0c1tpbnB1dC5uYW1lXSk7XG5cbiAgICByZXR1cm4gYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5jYWxscy5zYXZlKGNhbGxUb1NhdmUpO1xuICB9XG5cbiAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZVJ1bihjYWxsVG9EZWxldGU6IERHLkZ1bmNDYWxsKSB7XG4gICAgYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5jYWxscy5kZWxldGUoY2FsbFRvRGVsZXRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBhbGwgdGhlIGZ1bmN0aW9uIGNhbGwgb2YgdGhpcyBmdW5jdGlvbi5cbiAgICogRGVzaWduZWQgdG8gcHVsbCBoc3RvcmljYWwgcnVucyBpbiBmYXN0IG1hbm5lciBhbmQgdGhlIGNhbGwge0BsaW5rIGxvYWRSdW59IHdpdGggc3BlY2lmaWVkIHJ1biBJRC5cbiAgICogV0FSTklORzogRnVuY0NhbGwgaW5wdXRzL291dHB1dHMgZmllbGRzIGFyZSBub3QgaW5jbHVkZWRcbiAgICogQHBhcmFtIGZ1bmNJZCBJRCBvZiBGdW5jIHdoaWNoIGNhbGxzIHdlIGFyZSBsb29raW5nIGZvci4gR2V0IGl0IHVzaW5nIHtAbGluayBmdW5jLmlkfSBmaWVsZFxuICAgKiBAcmV0dXJuIFByb21pc2Ugb24gYXJyYXkgb2YgRnVuY0NhbGxzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHBhc3NlZCBGdW5jIElEXG4gICAqIEBzdGFiaWxpdHkgRGVwcmVjYXRlZC4gU2NyaXB0IElEIGNoYW5nZXMgd2l0aCBldmVyeSBwYWNrYWdlIHJlbGVhc2UsIHNvIHNlYXJjaGluZyBieSBJRCBpcyB1c2VsZXNzIGluIHByYWN0aWNlLlxuICovXG4gIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBwdWxsUnVucyhcbiAgICBmdW5jSWQ6IHN0cmluZyxcbiAgICBmaWx0ZXJPcHRpb25zOiBGaWx0ZXJPcHRpb25zID0ge30sXG4gICAgbGlzdE9wdGlvbnM6IHtwYWdlU2l6ZT86IG51bWJlciwgcGFnZU51bWJlcj86IG51bWJlciwgZmlsdGVyPzogc3RyaW5nLCBvcmRlcj86IHN0cmluZ30gPSB7fVxuICApOiBQcm9taXNlPERHLkZ1bmNDYWxsW10+IHtcbiAgICBsZXQgZmlsdGVyaW5nU3RyaW5nID0gYGZ1bmMuaWQ9XCIke2Z1bmNJZH1cImA7XG4gICAgZmlsdGVyaW5nU3RyaW5nICs9IGZpbHRlck9wdGlvbnMuYXV0aG9yID8gYCBhbmQgc2Vzc2lvbi51c2VyLmlkPVwiJHtmaWx0ZXJPcHRpb25zLmF1dGhvci5pZH1cImA6Jyc7XG4gICAgZmlsdGVyaW5nU3RyaW5nICs9IGZpbHRlck9wdGlvbnMuZGF0ZSA/IGdldFNlYXJjaFN0cmluZ0J5UGF0dGVybihmaWx0ZXJPcHRpb25zLmRhdGUpOiAnJztcbiAgICBjb25zdCBmaWx0ZXIgPSBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLmZpbHRlcihmaWx0ZXJpbmdTdHJpbmcpLmluY2x1ZGUoJ3Nlc3Npb24udXNlciwgb3B0aW9ucycpO1xuICAgIGNvbnN0IGxpc3QgPSBmaWx0ZXIubGlzdChsaXN0T3B0aW9ucyk7XG4gICAgcmV0dXJuIGxpc3Q7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgYWxsIHRoZSBmdW5jdGlvbiBjYWxsIG9mIHRoaXMgZnVuY3Rpb24uXG4gICAqIERlc2lnbmVkIHRvIHB1bGwgaHN0b3JpY2FsIHJ1bnMgaW4gZmFzdCBtYW5uZXIgYW5kIHRoZSBjYWxsIHtAbGluayBsb2FkUnVufSB3aXRoIHNwZWNpZmllZCBydW4gSUQuXG4gICAqIFdBUk5JTkc6IEZ1bmNDYWxsIGlucHV0cy9vdXRwdXRzIGZpZWxkcyBhcmUgbm90IGluY2x1ZGVkXG4gICAqIEBwYXJhbSBmdW5jTmFtZSBOYW1lIG9mIEZ1bmMgd2hpY2ggY2FsbHMgd2UgYXJlIGxvb2tpbmcgZm9yLiBHZXQgaXQgdXNpbmcge0BsaW5rIGZ1bmMubmFtZX0gZmllbGRcbiAgICogQHJldHVybiBQcm9taXNlIG9uIGFycmF5IG9mIEZ1bmNDYWxscyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYXNzZWQgRnVuYyBJRFxuICAgKiBAc3RhYmlsaXR5IEV4cGVyaW1lbnRhbFxuICovXG4gIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBwdWxsUnVuc0J5TmFtZShcbiAgICBmdW5jTmFtZTogc3RyaW5nLFxuICAgIGZpbHRlck9wdGlvbnM6IEZpbHRlck9wdGlvbnMgPSB7fSxcbiAgICBsaXN0T3B0aW9uczoge3BhZ2VTaXplPzogbnVtYmVyLCBwYWdlTnVtYmVyPzogbnVtYmVyLCBmaWx0ZXI/OiBzdHJpbmcsIG9yZGVyPzogc3RyaW5nfSA9IHt9XG4gICk6IFByb21pc2U8REcuRnVuY0NhbGxbXT4ge1xuICAgIGxldCBmaWx0ZXJpbmdTdHJpbmcgPSBgZnVuYy5uYW1lPVwiJHtmdW5jTmFtZX1cImA7XG4gICAgZmlsdGVyaW5nU3RyaW5nICs9IGZpbHRlck9wdGlvbnMuYXV0aG9yID8gYCBhbmQgc2Vzc2lvbi51c2VyLmlkPVwiJHtmaWx0ZXJPcHRpb25zLmF1dGhvci5pZH1cImA6Jyc7XG4gICAgZmlsdGVyaW5nU3RyaW5nICs9IGZpbHRlck9wdGlvbnMuZGF0ZSA/IGdldFNlYXJjaFN0cmluZ0J5UGF0dGVybihmaWx0ZXJPcHRpb25zLmRhdGUpOiAnJztcbiAgICBmaWx0ZXJpbmdTdHJpbmcgKz0gZmlsdGVyT3B0aW9ucy5pc1NoYXJlZCA/IGBhbmQgb3B0aW9ucy5pc1NoYXJlZD1cInRydWVcImA6ICcnO1xuICAgIGNvbnN0IGZpbHRlciA9IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHMuZmlsdGVyKGZpbHRlcmluZ1N0cmluZykuaW5jbHVkZSgnc2Vzc2lvbi51c2VyLCBvcHRpb25zJyk7XG4gICAgY29uc3QgbGlzdCA9IGZpbHRlci5saXN0KGxpc3RPcHRpb25zKTtcbiAgICByZXR1cm4gbGlzdDtcbiAgfVxufVxuIl19
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhpc3RvcnktdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsZ0NBQWdDO0FBQ2hDLE9BQU8sS0FBSyxJQUFJLE1BQU0sbUJBQW1CLENBQUM7QUFFMUMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFHcEIsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLFdBQXdCLEVBQUUsRUFBRTtJQUM1RCxRQUFRLFdBQVcsRUFBRTtRQUNyQixLQUFLLE9BQU87WUFDVixPQUFPLG9CQUFvQixDQUFDO1FBQzlCLEtBQUssV0FBVztZQUNkLE9BQU8sc0NBQXNDLENBQUM7UUFDaEQsS0FBSyxVQUFVO1lBQ2IsT0FBTyxFQUFFLENBQUM7UUFDWixLQUFLLFdBQVc7WUFDZCxPQUFPLHFDQUFxQyxDQUFDO1FBQy9DLEtBQUssV0FBVztZQUNkLE9BQU8sb0JBQW9CLENBQUM7UUFDOUIsS0FBSyxZQUFZO1lBQ2YsT0FBTyxzQ0FBc0MsQ0FBQztRQUNoRCxLQUFLLFlBQVk7WUFDZixPQUFPLG9CQUFvQixDQUFDO1FBQzlCLEtBQUssV0FBVztZQUNkLE9BQU8sc0NBQXNDLENBQUM7UUFDaEQsS0FBSyxXQUFXO1lBQ2QsT0FBTyxvQkFBb0IsQ0FBQztLQUM3QjtBQUNILENBQUMsQ0FBQztBQUVGLE1BQU0sS0FBVyxZQUFZLENBbUY1QjtBQW5GRCxXQUFpQixZQUFZO0lBQzNCLFNBQXNCLE9BQU8sQ0FBQyxVQUFrQjs7WUFDOUMsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzlGLGtFQUFrRTtZQUNsRSxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FB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Q0FBQyx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN6RixlQUFlLElBQUksYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsOEJBQThCLENBQUEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMvRSxlQUFlLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNyQyw4QkFBOEIsYUFBYSxDQUFDLElBQUksbUNBQW1DLGFBQWEsQ0FBQyxJQUFJLEtBQUssQ0FBQSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2pILE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1lBQ3pHLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdEMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0tBQUE7SUFkcUIsMkJBQWMsaUJBY25DLENBQUE7QUFDSCxDQUFDLEVBbkZnQixZQUFZLEtBQVosWUFBWSxRQW1GNUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSB2YWxpZC1qc2RvYyAqL1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB3dSBmcm9tICd3dSc7XG5pbXBvcnQge0RhdGVPcHRpb25zLCBGaWx0ZXJPcHRpb25zfSBmcm9tICcuL2Z1bmN0aW9uLXZpZXcnO1xuXG5jb25zdCBnZXRTZWFyY2hTdHJpbmdCeVBhdHRlcm4gPSAoZGF0ZVBhdHRlcm46IERhdGVPcHRpb25zKSA9PiB7XG4gIHN3aXRjaCAoZGF0ZVBhdHRlcm4pIHtcbiAgY2FzZSAnVG9kYXknOlxuICAgIHJldHVybiBgIGFuZCBzdGFydGVkID4gLTFkYDtcbiAgY2FzZSAnWWVzdGVyZGF5JzpcbiAgICByZXR1cm4gYCBhbmQgc3RhcnRlZCA+IC0yZCBhbmQgc3RhcnRlZCA8IC0xZGA7XG4gIGNhc2UgJ0FueSB0aW1lJzpcbiAgICByZXR1cm4gYGA7XG4gIGNhc2UgJ0xhc3QgeWVhcic6XG4gICAgcmV0dXJuIGBhbmQgc3RhcnRlZCA+IC0yeSBhbmQgc3RhcnRlZCA8IC0xeWA7XG4gIGNhc2UgJ1RoaXMgeWVhcic6XG4gICAgcmV0dXJuIGAgYW5kIHN0YXJ0ZWQgPiAtMXlgO1xuICBjYXNlICdMYXN0IG1vbnRoJzpcbiAgICByZXR1cm4gYCBhbmQgc3RhcnRlZCA+IC0ybSBhbmQgc3RhcnRlZCA8IC0xbWA7XG4gIGNhc2UgJ1RoaXMgbW9udGgnOlxuICAgIHJldHVybiBgIGFuZCBzdGFydGVkID4gLTFtYDtcbiAgY2FzZSAnTGFzdCB3ZWVrJzpcbiAgICByZXR1cm4gYCBhbmQgc3RhcnRlZCA+IC0ydyBhbmQgc3RhcnRlZCA8IC0xd2A7XG4gIGNhc2UgJ1RoaXMgd2Vlayc6XG4gICAgcmV0dXJuIGAgYW5kIHN0YXJ0ZWQgPiAtMXdgO1xuICB9XG59O1xuXG5leHBvcnQgbmFtZXNwYWNlIGhpc3RvcnlVdGlscyB7XG4gIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkUnVuKGZ1bmNDYWxsSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHB1bGxlZFJ1biA9IGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHMuaW5jbHVkZSgnaW5wdXRzLCBvdXRwdXRzJykuZmluZChmdW5jQ2FsbElkKTtcbiAgICAvLyBGSVggTUU6IG1hbnVhbGx5IGdldCBzY3JpcHQgc2luY2UgcHVsbGVkUnVuIGNvbnRhaW5zIGVtcHR5IEZ1bmNcbiAgICBjb25zdCBzY3JpcHQgPSBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmZpbmQocHVsbGVkUnVuLmZ1bmMuaWQpO1xuICAgIC8vQHRzLWlnbm9yZVxuICAgIHdpbmRvdy5ncm9rX0Z1bmNDYWxsX1NldF9GdW5jKHB1bGxlZFJ1bi5kYXJ0LCBzY3JpcHQuZGFydCk7XG4gICAgcHVsbGVkUnVuLm9wdGlvbnNbJ2lzSGlzdG9yaWNhbCddID0gdHJ1ZTtcbiAgICBjb25zdCBkZk91dHB1dHMgPSB3dShwdWxsZWRSdW4ub3V0cHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSlcbiAgICAgIC5maWx0ZXIoKG91dHB1dCkgPT4gb3V0cHV0LnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKTtcbiAgICBmb3IgKGNvbnN0IG91dHB1dCBvZiBkZk91dHB1dHMpXG4gICAgICBwdWxsZWRSdW4ub3V0cHV0c1tvdXRwdXQubmFtZV0gPSBhd2FpdCBncm9rLmRhcGkudGFibGVzLmdldFRhYmxlKHB1bGxlZFJ1bi5vdXRwdXRzW291dHB1dC5uYW1lXSk7XG5cbiAgICBjb25zdCBkZklucHV0cyA9IHd1KHB1bGxlZFJ1bi5pbnB1dFBhcmFtcy52YWx1ZXMoKSBhcyBERy5GdW5jQ2FsbFBhcmFtW10pXG4gICAgICAuZmlsdGVyKChpbnB1dCkgPT4gaW5wdXQucHJvcGVydHkucHJvcGVydHlUeXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpO1xuICAgIGZvciAoY29uc3QgaW5wdXQgb2YgZGZJbnB1dHMpXG4gICAgICBwdWxsZWRSdW4uaW5wdXRzW2lucHV0Lm5hbWVdID0gYXdhaXQgZ3Jvay5kYXBpLnRhYmxlcy5nZXRUYWJsZShwdWxsZWRSdW4uaW5wdXRzW2lucHV0Lm5hbWVdKTtcblxuICAgIHJldHVybiBwdWxsZWRSdW47XG4gIH1cblxuICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gc2F2ZVJ1bihjYWxsVG9TYXZlOiBERy5GdW5jQ2FsbCkge1xuICAgIGNvbnN0IGRmT3V0cHV0cyA9IHd1KGNhbGxUb1NhdmUub3V0cHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSlcbiAgICAgIC5maWx0ZXIoKG91dHB1dCkgPT4gb3V0cHV0LnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKTtcbiAgICBmb3IgKGNvbnN0IG91dHB1dCBvZiBkZk91dHB1dHMpXG4gICAgICBhd2FpdCBncm9rLmRhcGkudGFibGVzLnVwbG9hZERhdGFGcmFtZShjYWxsVG9TYXZlLm91dHB1dHNbb3V0cHV0Lm5hbWVdKTtcblxuICAgIGNvbnN0IGRmSW5wdXRzID0gd3UoY2FsbFRvU2F2ZS5pbnB1dFBhcmFtcy52YWx1ZXMoKSBhcyBERy5GdW5jQ2FsbFBhcmFtW10pXG4gICAgICAuZmlsdGVyKChpbnB1dCkgPT4gaW5wdXQucHJvcGVydHkucHJvcGVydHlUeXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpO1xuICAgIGZvciAoY29uc3QgaW5wdXQgb2YgZGZJbnB1dHMpXG4gICAgICBhd2FpdCBncm9rLmRhcGkudGFibGVzLnVwbG9hZERhdGFGcmFtZShjYWxsVG9TYXZlLmlucHV0c1tpbnB1dC5uYW1lXSk7XG5cbiAgICByZXR1cm4gYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5jYWxscy5zYXZlKGNhbGxUb1NhdmUpO1xuICB9XG5cbiAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZVJ1bihjYWxsVG9EZWxldGU6IERHLkZ1bmNDYWxsKSB7XG4gICAgYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5jYWxscy5kZWxldGUoY2FsbFRvRGVsZXRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBhbGwgdGhlIGZ1bmN0aW9uIGNhbGwgb2YgdGhpcyBmdW5jdGlvbi5cbiAgICogRGVzaWduZWQgdG8gcHVsbCBoc3RvcmljYWwgcnVucyBpbiBmYXN0IG1hbm5lciBhbmQgdGhlIGNhbGwge0BsaW5rIGxvYWRSdW59IHdpdGggc3BlY2lmaWVkIHJ1biBJRC5cbiAgICogV0FSTklORzogRnVuY0NhbGwgaW5wdXRzL291dHB1dHMgZmllbGRzIGFyZSBub3QgaW5jbHVkZWRcbiAgICogQHBhcmFtIGZ1bmNJZCBJRCBvZiBGdW5jIHdoaWNoIGNhbGxzIHdlIGFyZSBsb29raW5nIGZvci4gR2V0IGl0IHVzaW5nIHtAbGluayBmdW5jLmlkfSBmaWVsZFxuICAgKiBAcmV0dXJuIFByb21pc2Ugb24gYXJyYXkgb2YgRnVuY0NhbGxzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHBhc3NlZCBGdW5jIElEXG4gICAqIEBzdGFiaWxpdHkgRGVwcmVjYXRlZC4gU2NyaXB0IElEIGNoYW5nZXMgd2l0aCBldmVyeSBwYWNrYWdlIHJlbGVhc2UsIHNvIHNlYXJjaGluZyBieSBJRCBpcyB1c2VsZXNzIGluIHByYWN0aWNlLlxuICovXG4gIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBwdWxsUnVucyhcbiAgICBmdW5jSWQ6IHN0cmluZyxcbiAgICBmaWx0ZXJPcHRpb25zOiBGaWx0ZXJPcHRpb25zID0ge30sXG4gICAgbGlzdE9wdGlvbnM6IHtwYWdlU2l6ZT86IG51bWJlciwgcGFnZU51bWJlcj86IG51bWJlciwgZmlsdGVyPzogc3RyaW5nLCBvcmRlcj86IHN0cmluZ30gPSB7fVxuICApOiBQcm9taXNlPERHLkZ1bmNDYWxsW10+IHtcbiAgICBsZXQgZmlsdGVyaW5nU3RyaW5nID0gYGZ1bmMuaWQ9XCIke2Z1bmNJZH1cImA7XG4gICAgZmlsdGVyaW5nU3RyaW5nICs9IGZpbHRlck9wdGlvbnMuYXV0aG9yID8gYCBhbmQgc2Vzc2lvbi51c2VyLmlkPVwiJHtmaWx0ZXJPcHRpb25zLmF1dGhvci5pZH1cImA6Jyc7XG4gICAgZmlsdGVyaW5nU3RyaW5nICs9IGZpbHRlck9wdGlvbnMuZGF0ZSA/IGdldFNlYXJjaFN0cmluZ0J5UGF0dGVybihmaWx0ZXJPcHRpb25zLmRhdGUpOiAnJztcbiAgICBjb25zdCBmaWx0ZXIgPSBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLmZpbHRlcihmaWx0ZXJpbmdTdHJpbmcpLmluY2x1ZGUoJ3Nlc3Npb24udXNlciwgb3B0aW9ucycpO1xuICAgIGNvbnN0IGxpc3QgPSBmaWx0ZXIubGlzdChsaXN0T3B0aW9ucyk7XG4gICAgcmV0dXJuIGxpc3Q7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgYWxsIHRoZSBmdW5jdGlvbiBjYWxsIG9mIHRoaXMgZnVuY3Rpb24uXG4gICAqIERlc2lnbmVkIHRvIHB1bGwgaHN0b3JpY2FsIHJ1bnMgaW4gZmFzdCBtYW5uZXIgYW5kIHRoZSBjYWxsIHtAbGluayBsb2FkUnVufSB3aXRoIHNwZWNpZmllZCBydW4gSUQuXG4gICAqIFdBUk5JTkc6IEZ1bmNDYWxsIGlucHV0cy9vdXRwdXRzIGZpZWxkcyBhcmUgbm90IGluY2x1ZGVkXG4gICAqIEBwYXJhbSBmdW5jTmFtZSBOYW1lIG9mIEZ1bmMgd2hpY2ggY2FsbHMgd2UgYXJlIGxvb2tpbmcgZm9yLiBHZXQgaXQgdXNpbmcge0BsaW5rIGZ1bmMubmFtZX0gZmllbGRcbiAgICogQHJldHVybiBQcm9taXNlIG9uIGFycmF5IG9mIEZ1bmNDYWxscyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYXNzZWQgRnVuYyBJRFxuICAgKiBAc3RhYmlsaXR5IEV4cGVyaW1lbnRhbFxuICovXG4gIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBwdWxsUnVuc0J5TmFtZShcbiAgICBmdW5jTmFtZTogc3RyaW5nLFxuICAgIGZpbHRlck9wdGlvbnM6IEZpbHRlck9wdGlvbnMgPSB7fSxcbiAgICBsaXN0T3B0aW9uczoge3BhZ2VTaXplPzogbnVtYmVyLCBwYWdlTnVtYmVyPzogbnVtYmVyLCBmaWx0ZXI/OiBzdHJpbmcsIG9yZGVyPzogc3RyaW5nfSA9IHt9XG4gICk6IFByb21pc2U8REcuRnVuY0NhbGxbXT4ge1xuICAgIGxldCBmaWx0ZXJpbmdTdHJpbmcgPSBgZnVuYy5uYW1lPVwiJHtmdW5jTmFtZX1cImA7XG4gICAgZmlsdGVyaW5nU3RyaW5nICs9IGZpbHRlck9wdGlvbnMuYXV0aG9yID8gYCBhbmQgc2Vzc2lvbi51c2VyLmlkPVwiJHtmaWx0ZXJPcHRpb25zLmF1dGhvci5pZH1cImA6Jyc7XG4gICAgZmlsdGVyaW5nU3RyaW5nICs9IGZpbHRlck9wdGlvbnMuZGF0ZSA/IGdldFNlYXJjaFN0cmluZ0J5UGF0dGVybihmaWx0ZXJPcHRpb25zLmRhdGUpOiAnJztcbiAgICBmaWx0ZXJpbmdTdHJpbmcgKz0gZmlsdGVyT3B0aW9ucy5pc1NoYXJlZCA/IGAgYW5kIG9wdGlvbnMuaXNTaGFyZWQ9XCJ0cnVlXCJgOiAnJztcbiAgICBmaWx0ZXJpbmdTdHJpbmcgKz0gZmlsdGVyT3B0aW9ucy50ZXh0ID9cbiAgICAgIGAgYW5kICgob3B0aW9ucy50aXRsZSBsaWtlIFwiJHtmaWx0ZXJPcHRpb25zLnRleHR9XCIpIG9yIChvcHRpb25zLmFubm90YXRpb24gbGlrZSBcIiR7ZmlsdGVyT3B0aW9ucy50ZXh0fVwiKSlgOiAnJztcbiAgICBjb25zdCBmaWx0ZXIgPSBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLmZpbHRlcihgKCR7ZmlsdGVyaW5nU3RyaW5nfSlgKS5pbmNsdWRlKCdzZXNzaW9uLnVzZXIsIG9wdGlvbnMnKTtcbiAgICBjb25zdCBsaXN0ID0gZmlsdGVyLmxpc3QobGlzdE9wdGlvbnMpO1xuICAgIHJldHVybiBsaXN0O1xuICB9XG59XG4iXX0=
|