@datagrok-libraries/utils 1.16.2 → 1.17.0

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 CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public"
5
5
  },
6
6
  "fullName": "Utils",
7
- "version": "1.16.2",
7
+ "version": "1.17.0",
8
8
  "description": "Common utilities",
9
9
  "dependencies": {
10
10
  "fast-sha256": "^1.3.0",
@@ -0,0 +1,25 @@
1
+ import * as DG from 'datagrok-api/dg';
2
+ import { BehaviorSubject, Subject } from 'rxjs';
3
+ export declare class HistoryInput {
4
+ private label;
5
+ private _funcName;
6
+ private _stringValueFunc;
7
+ private _visibleColumnsForGrid;
8
+ private _visibleColumnsForFilter;
9
+ onHistoricalRunChosen: BehaviorSubject<DG.FuncCall | null>;
10
+ experimentRunsUpdate: Subject<boolean>;
11
+ private store;
12
+ private _historyGrid;
13
+ private _historyFilters;
14
+ private _visibleInput;
15
+ constructor(label: string, _funcName: string, _stringValueFunc: (currentRun: DG.FuncCall) => string, _visibleColumnsForGrid: Record<string, (currentRun: DG.FuncCall) => string>, _visibleColumnsForFilter?: string[]);
16
+ get historyGrid(): DG.Grid<DG.IGridLookSettings>;
17
+ get historyFilters(): DG.Viewer<DG.IFiltersLookSettings>;
18
+ get root(): HTMLElement;
19
+ set value(val: DG.FuncCall | null);
20
+ get value(): DG.FuncCall | null;
21
+ set stringValue(val: string);
22
+ get stringValue(): string;
23
+ toggleLoaderExpRuns(newState: boolean): void;
24
+ }
25
+ //# sourceMappingURL=history-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history-input.d.ts","sourceRoot":"","sources":["history-input.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAC,eAAe,EAAqB,OAAO,EAAO,MAAM,MAAM,CAAC;AAkBvE,qBAAa,YAAY;IAuBrB,OAAO,CAAC,KAAK;IAEb,OAAO,CAAC,SAAS;IAEjB,OAAO,CAAC,gBAAgB;IAExB,OAAO,CAAC,sBAAsB;IAE9B,OAAO,CAAC,wBAAwB;IA7B3B,qBAAqB,sCAAiD;IAGtE,oBAAoB,mBAA0B;IAErD,OAAO,CAAC,KAAK,CAQX;IACF,OAAO,CAAC,YAAY,CAA2H;IAC/I,OAAO,CAAC,eAAe,CAA4E;IAEnG,OAAO,CAAC,aAAa,CAAwC;gBAInD,KAAK,EAAE,MAAM,EAEb,SAAS,EAAE,MAAM,EAEjB,gBAAgB,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,KAAK,MAAM,EAErD,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,KAAK,MAAM,CAAC,EAE3E,wBAAwB,GAAE,MAAM,EAAO;IAyGjD,IAAI,WAAW,kCAEd;IAGD,IAAI,cAAc,uCAEjB;IAGD,IAAI,IAAI,gBAEP;IAED,IAAI,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,GAAG,IAAI,EAKhC;IAED,IAAI,KAAK,IAPM,EAAE,CAAC,QAAQ,GAAG,IAAI,CAShC;IAED,IAAI,WAAW,CAAC,GAAG,EAAE,MAAM,EAE1B;IAED,IAAI,WAAW,IAJM,MAAM,CAM1B;IAEM,mBAAmB,CAAC,QAAQ,EAAE,OAAO;CAG7C"}
@@ -0,0 +1,168 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ /* eslint-disable max-len */
11
+ import * as grok from 'datagrok-api/grok';
12
+ import * as ui from 'datagrok-api/ui';
13
+ import * as DG from 'datagrok-api/dg';
14
+ import { BehaviorSubject, EMPTY, Observable, Subject, from } from 'rxjs';
15
+ import { catchError, finalize, shareReplay, switchMap, tap, takeUntil } from 'rxjs/operators';
16
+ import $ from 'cash-dom';
17
+ import { historyUtils } from '../history-utils';
18
+ class DatabaseService {
19
+ static getHistoryRuns(funcName) {
20
+ return from((() => __awaiter(this, void 0, void 0, function* () {
21
+ const res = yield historyUtils.pullRunsByName(funcName, [
22
+ { isShared: true }, { author: grok.shell.user },
23
+ ], { order: 'started' }, ['func.params', 'session.user', 'options']);
24
+ return res;
25
+ }))());
26
+ }
27
+ }
28
+ export class HistoryInput {
29
+ constructor(
30
+ // Label placed before next to the input
31
+ label,
32
+ // Function to look history for
33
+ _funcName,
34
+ // String value to be displayed in the input field
35
+ _stringValueFunc,
36
+ // Map of grid columns and functions to retrieve their actual values from DG.FuncCall
37
+ _visibleColumnsForGrid,
38
+ // Array of grid columns visible in the filter viever
39
+ _visibleColumnsForFilter = []) {
40
+ this.label = label;
41
+ this._funcName = _funcName;
42
+ this._stringValueFunc = _stringValueFunc;
43
+ this._visibleColumnsForGrid = _visibleColumnsForGrid;
44
+ this._visibleColumnsForFilter = _visibleColumnsForFilter;
45
+ // emitted when parictular historical run is chosen
46
+ this.onHistoricalRunChosen = new BehaviorSubject(null);
47
+ // Toggle to force historical runs udpate
48
+ this.experimentRunsUpdate = new Subject();
49
+ this.store = {
50
+ experimentRuns: new Observable(),
51
+ experimentRunsDf: new BehaviorSubject(DG.DataFrame.fromColumns([
52
+ DG.Column.fromStrings('Pick', []),
53
+ ...Object.keys(this._visibleColumnsForGrid).map((col) => DG.Column.fromStrings(col, []))
54
+ ])),
55
+ isExperimentRunsLoading: new Subject(),
56
+ experimentRunData: new BehaviorSubject(''),
57
+ };
58
+ this._historyGrid = DG.Viewer.grid(this.store.experimentRunsDf.value, { showRowHeader: false, showColumnGridlines: false, allowEdit: false });
59
+ this._historyFilters = DG.Viewer.filters(this.store.experimentRunsDf.value, { title: 'Filters' });
60
+ this._visibleInput = ui.stringInput(this.label, '', null);
61
+ this._visibleInput.input.addEventListener('click', () => {
62
+ const _historyDialog = ui.dialog();
63
+ $(_historyDialog.root).addClass('arrow-box');
64
+ _historyDialog.onOK(() => { });
65
+ _historyDialog.onCancel(() => { });
66
+ $(_historyDialog.root).find('.d4-dialog-header').hide();
67
+ _historyDialog.root.style.boxShadow = '';
68
+ $(_historyDialog.root).removeClass('ui-form');
69
+ const newHistoryFilters = DG.Viewer.filters(this.store.experimentRunsDf.value, { title: 'Filters' });
70
+ this._historyFilters.root.replaceWith(newHistoryFilters.root);
71
+ this._historyFilters = newHistoryFilters;
72
+ const newHistoryGrid = DG.Viewer.grid(this.store.experimentRunsDf.value, { showRowHeader: false, showColumnGridlines: false, allowEdit: false });
73
+ this._historyGrid.root.replaceWith(newHistoryGrid.root);
74
+ this._historyGrid = newHistoryGrid;
75
+ this._historyGrid.columns.byName('Pick').cellType = 'html';
76
+ this._historyGrid.columns.byName('Pick').width = 30;
77
+ this._historyGrid.onCellPrepare((cell) => {
78
+ var _a;
79
+ if (((_a = cell.tableColumn) === null || _a === void 0 ? void 0 : _a.name) === 'Pick') {
80
+ if (cell.isColHeader)
81
+ cell.customText = '';
82
+ if (cell.cell.value === true)
83
+ cell.element = ui.div([ui.iconFA('check')], { style: { 'text-align': 'center', 'margin': '6px' } });
84
+ else
85
+ cell.element = ui.div();
86
+ }
87
+ });
88
+ this._historyGrid.columns.setVisible(['Pick', ...Object.keys(this._visibleColumnsForGrid).map((colName) => colName)]);
89
+ this._historyFilters.setOptions({ columnNames: this._visibleColumnsForFilter });
90
+ $(this._historyFilters.root).find('.d4-filter-group-header').hide();
91
+ this._historyGrid.columns.byName('Pick').cellType = 'html';
92
+ this._historyGrid.columns.byName('Pick').width = 30;
93
+ if (!this._visibleColumnsForFilter.length)
94
+ $(this._historyFilters.root.parentElement).hide();
95
+ _historyDialog.add(ui.divH([
96
+ ui.block([this._historyGrid.root]),
97
+ ui.block([this._historyFilters.root], { style: { 'margin-left': '10px', 'width': '225px' } }),
98
+ ]));
99
+ _historyDialog.show({
100
+ x: this._visibleInput.input.getBoundingClientRect().x + this._visibleInput.input.clientWidth + 10,
101
+ y: this._visibleInput.input.getBoundingClientRect().y - 30,
102
+ width: Math.max(this._historyGrid.root.clientWidth + this._historyFilters.root.clientWidth + 30, 600),
103
+ });
104
+ });
105
+ this._visibleInput.readOnly = true;
106
+ this.store.experimentRuns = this.experimentRunsUpdate.pipe(tap(() => this.toggleLoaderExpRuns(true)), switchMap(() => DatabaseService.getHistoryRuns(this._funcName).pipe(catchError(() => EMPTY), finalize(() => this.toggleLoaderExpRuns(false)))), shareReplay(1));
107
+ this.store.experimentRuns.pipe(takeUntil(from(new Subject()))).subscribe((newRuns) => {
108
+ const newRunsGridDf = DG.DataFrame.fromColumns([
109
+ DG.Column.bool('Pick', newRuns.length).init(false),
110
+ ...Object.entries(this._visibleColumnsForGrid).map((entry) => DG.Column.fromStrings(entry[0], newRuns.map(entry[1]))),
111
+ DG.Column.fromStrings('ID', newRuns.map((newRun) => newRun.id))
112
+ ]);
113
+ newRunsGridDf.onCurrentRowChanged.subscribe(() => {
114
+ newRunsGridDf.getCol('Pick').init(false);
115
+ newRunsGridDf.set('Pick', newRunsGridDf.currentRow.idx, true);
116
+ const newId = newRunsGridDf.getCol('ID').get(newRunsGridDf.currentRow.idx);
117
+ const chosenRun = newRuns.find((run) => run.id === newId);
118
+ if (chosenRun)
119
+ this.onHistoricalRunChosen.next(chosenRun);
120
+ });
121
+ this.store.experimentRunsDf.next(newRunsGridDf);
122
+ });
123
+ this.store.experimentRunsDf.subscribe((newDf) => {
124
+ this.historyGrid.dataFrame = newDf;
125
+ this.historyFilters.dataFrame = newDf;
126
+ });
127
+ this.onHistoricalRunChosen.subscribe((val) => {
128
+ if (val)
129
+ this._visibleInput.value = this._stringValueFunc(val);
130
+ else
131
+ this._visibleInput.value = '';
132
+ });
133
+ this.store.isExperimentRunsLoading.subscribe((newValue) => {
134
+ ui.setUpdateIndicator(this._visibleInput.root, newValue);
135
+ });
136
+ }
137
+ // Viever object of grid
138
+ get historyGrid() {
139
+ return this._historyGrid;
140
+ }
141
+ // Viever object of filters
142
+ get historyFilters() {
143
+ return this._historyFilters;
144
+ }
145
+ // HTML root of component
146
+ get root() {
147
+ return this._visibleInput.root;
148
+ }
149
+ set value(val) {
150
+ if (val)
151
+ this._visibleInput.value = this._stringValueFunc(val);
152
+ else
153
+ this._visibleInput.value = '';
154
+ }
155
+ get value() {
156
+ return this.onHistoricalRunChosen.value;
157
+ }
158
+ set stringValue(val) {
159
+ this._visibleInput.value = val;
160
+ }
161
+ get stringValue() {
162
+ return this._visibleInput.value;
163
+ }
164
+ toggleLoaderExpRuns(newState) {
165
+ this.store.isExperimentRunsLoading.next(newState);
166
+ }
167
+ }
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeS1pbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhpc3RvcnktaW5wdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsNEJBQTRCO0FBQzVCLE9BQU8sS0FBSyxJQUFJLE1BQU0sbUJBQW1CLENBQUM7QUFDMUMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RDLE9BQU8sRUFBQyxlQUFlLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzVGLE9BQU8sQ0FBQyxNQUFNLFVBQVUsQ0FBQztBQUN6QixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFFOUMsTUFBTSxlQUFlO0lBQ25CLE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBZ0I7UUFDcEMsT0FBTyxJQUFJLENBQUMsQ0FBQyxHQUFTLEVBQUU7WUFDdEIsTUFBTSxHQUFHLEdBQUcsTUFBTSxZQUFZLENBQUMsY0FBYyxDQUMzQyxRQUFRLEVBQUU7Z0JBQ1IsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUM7YUFDNUMsRUFBRSxFQUFDLEtBQUssRUFBRSxTQUFTLEVBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxjQUFjLEVBQUUsU0FBUyxDQUFDLENBQ2xFLENBQUM7WUFDRixPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLFlBQVk7SUFxQnZCO0lB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d0I7SUFDeEIsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCwyQkFBMkI7SUFDM0IsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBRUQseUJBQXlCO0lBQ3pCLElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7SUFDakMsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLEdBQXVCO1FBQy9CLElBQUksR0FBRztZQUNMLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7WUFFdEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUM7SUFDMUMsQ0FBQztJQUVELElBQUksV0FBVyxDQUFDLEdBQVc7UUFDekIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO0lBQ2xDLENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxRQUFpQjtRQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwRCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIEVNUFRZLCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBmcm9tfSBmcm9tICdyeGpzJztcbmltcG9ydCB7Y2F0Y2hFcnJvciwgZmluYWxpemUsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAsIHRhcCwgdGFrZVVudGlsfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgJCBmcm9tICdjYXNoLWRvbSc7XG5pbXBvcnQge2hpc3RvcnlVdGlsc30gZnJvbSAnLi4vaGlzdG9yeS11dGlscyc7XG5cbmNsYXNzIERhdGFiYXNlU2VydmljZSB7XG4gIHN0YXRpYyBnZXRIaXN0b3J5UnVucyhmdW5jTmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxERy5GdW5jQ2FsbFtdPiB7XG4gICAgcmV0dXJuIGZyb20oKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGhpc3RvcnlVdGlscy5wdWxsUnVuc0J5TmFtZShcbiAgICAgICAgZnVuY05hbWUsIFtcbiAgICAgICAgICB7aXNTaGFyZWQ6IHRydWV9LCB7YXV0aG9yOiBncm9rLnNoZWxsLnVzZXJ9LFxuICAgICAgICBdLCB7b3JkZXI6ICdzdGFydGVkJ30sIFsnZnVuYy5wYXJhbXMnLCAnc2Vzc2lvbi51c2VyJywgJ29wdGlvbnMnXVxuICAgICAgKTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSkoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEhpc3RvcnlJbnB1dCB7XG4gIC8vIGVtaXR0ZWQgd2hlbiBwYXJpY3R1bGFyIGhpc3RvcmljYWwgcnVuIGlzIGNob3NlblxuICBwdWJsaWMgb25IaXN0b3JpY2FsUnVuQ2hvc2VuID0gbmV3IEJlaGF2aW9yU3ViamVjdDxERy5GdW5jQ2FsbCB8IG51bGw+KG51bGwpO1xuXG4gIC8vIFRvZ2dsZSB0byBmb3JjZSBoaXN0b3JpY2FsIHJ1bnMgdWRwYXRlXG4gIHB1YmxpYyBleHBlcmltZW50UnVuc1VwZGF0ZSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgcHJpdmF0ZSBzdG9yZSA9IHtcbiAgICBleHBlcmltZW50UnVuczogbmV3IE9ic2VydmFibGU8REcuRnVuY0NhbGxbXT4oKSxcbiAgICBleHBlcmltZW50UnVuc0RmOiBuZXcgQmVoYXZpb3JTdWJqZWN0KERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhbXG4gICAgICBERy5Db2x1bW4uZnJvbVN0cmluZ3MoJ1BpY2snLCBbXSksXG4gICAgICAuLi5PYmplY3Qua2V5cyh0aGlzLl92aXNpYmxlQ29sdW1uc0ZvckdyaWQpLm1hcCgoY29sKSA9PiBERy5Db2x1bW4uZnJvbVN0cmluZ3MoY29sLCBbXSkpXG4gICAgXSkpLFxuICAgIGlzRXhwZXJpbWVudFJ1bnNMb2FkaW5nOiBuZXcgU3ViamVjdDxib29sZWFuPigpLFxuICAgIGV4cGVyaW1lbnRSdW5EYXRhOiBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpLFxuICB9O1xuICBwcml2YXRlIF9oaXN0b3J5R3JpZCA9IERHLlZpZXdlci5ncmlkKHRoaXMuc3RvcmUuZXhwZXJpbWVudFJ1bnNEZi52YWx1ZSwge3Nob3dSb3dIZWFkZXI6IGZhbHNlLCBzaG93Q29sdW1uR3JpZGxpbmVzOiBmYWxzZSwgYWxsb3dFZGl0OiBmYWxzZX0pO1xuICBwcml2YXRlIF9oaXN0b3J5RmlsdGVycyA9IERHLlZpZXdlci5maWx0ZXJzKHRoaXMuc3RvcmUuZXhwZXJpbWVudFJ1bnNEZi52YWx1ZSwge3RpdGxlOiAnRmlsdGVycyd9KTtcblxuICBwcml2YXRlIF92aXNpYmxlSW5wdXQgPSB1aS5zdHJpbmdJbnB1dCh0aGlzLmxhYmVsLCAnJywgbnVsbCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgLy8gTGFiZWwgcGxhY2VkIGJlZm9yZSBuZXh0IHRvIHRoZSBpbnB1dFxuICAgIHByaXZhdGUgbGFiZWw6IHN0cmluZyxcbiAgICAvLyBGdW5jdGlvbiB0byBsb29rIGhpc3RvcnkgZm9yXG4gICAgcHJpdmF0ZSBfZnVuY05hbWU6IHN0cmluZyxcbiAgICAvLyBTdHJpbmcgdmFsdWUgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBpbnB1dCBmaWVsZFxuICAgIHByaXZhdGUgX3N0cmluZ1ZhbHVlRnVuYzogKGN1cnJlbnRSdW46IERHLkZ1bmNDYWxsKSA9PiBzdHJpbmcsXG4gICAgLy8gTWFwIG9mIGdyaWQgY29sdW1ucyBhbmQgZnVuY3Rpb25zIHRvIHJldHJpZXZlIHRoZWlyIGFjdHVhbCB2YWx1ZXMgZnJvbSBERy5GdW5jQ2FsbFxuICAgIHByaXZhdGUgX3Zpc2libGVDb2x1bW5zRm9yR3JpZDogUmVjb3JkPHN0cmluZywgKGN1cnJlbnRSdW46IERHLkZ1bmNDYWxsKSA9PiBzdHJpbmc+LFxuICAgIC8vIEFycmF5IG9mIGdyaWQgY29sdW1ucyB2aXNpYmxlIGluIHRoZSBmaWx0ZXIgdmlldmVyXG4gICAgcHJpdmF0ZSBfdmlzaWJsZUNvbHVtbnNGb3JGaWx0ZXI6IHN0cmluZ1tdID0gW11cbiAgKSB7XG4gICAgdGhpcy5fdmlzaWJsZUlucHV0LmlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgY29uc3QgX2hpc3RvcnlEaWFsb2cgPSB1aS5kaWFsb2coKTtcblxuICAgICAgJChfaGlzdG9yeURpYWxvZy5yb290KS5hZGRDbGFzcygnYXJyb3ctYm94Jyk7XG5cbiAgICAgIF9oaXN0b3J5RGlhbG9nLm9uT0soKCkgPT4geyB9KTtcbiAgICAgIF9oaXN0b3J5RGlhbG9nLm9uQ2FuY2VsKCgpID0+IHsgfSk7XG5cbiAgICAgICQoX2hpc3RvcnlEaWFsb2cucm9vdCkuZmluZCgnLmQ0LWRpYWxvZy1oZWFkZXInKS5oaWRlKCk7XG4gICAgICBfaGlzdG9yeURpYWxvZy5yb290LnN0eWxlLmJveFNoYWRvdyA9ICcnO1xuICAgICAgJChfaGlzdG9yeURpYWxvZy5yb290KS5yZW1vdmVDbGFzcygndWktZm9ybScpO1xuXG4gICAgICBjb25zdCBuZXdIaXN0b3J5RmlsdGVycyA9IERHLlZpZXdlci5maWx0ZXJzKHRoaXMuc3RvcmUuZXhwZXJpbWVudFJ1bnNEZi52YWx1ZSwge3RpdGxlOiAnRmlsdGVycyd9KTtcbiAgICAgIHRoaXMuX2hpc3RvcnlGaWx0ZXJzLnJvb3QucmVwbGFjZVdpdGgobmV3SGlzdG9yeUZpbHRlcnMucm9vdCk7XG4gICAgICB0aGlzLl9oaXN0b3J5RmlsdGVycyA9IG5ld0hpc3RvcnlGaWx0ZXJzO1xuXG4gICAgICBjb25zdCBuZXdIaXN0b3J5R3JpZCA9IERHLlZpZXdlci5ncmlkKHRoaXMuc3RvcmUuZXhwZXJpbWVudFJ1bnNEZi52YWx1ZSwge3Nob3dSb3dIZWFkZXI6IGZhbHNlLCBzaG93Q29sdW1uR3JpZGxpbmVzOiBmYWxzZSwgYWxsb3dFZGl0OiBmYWxzZX0pO1xuICAgICAgdGhpcy5faGlzdG9yeUdyaWQucm9vdC5yZXBsYWNlV2l0aChuZXdIaXN0b3J5R3JpZC5yb290KTtcbiAgICAgIHRoaXMuX2hpc3RvcnlHcmlkID0gbmV3SGlzdG9yeUdyaWQ7XG5cbiAgICAgIHRoaXMuX2hpc3RvcnlHcmlkLmNvbHVtbnMuYnlOYW1lKCdQaWNrJykhLmNlbGxUeXBlID0gJ2h0bWwnO1xuICAgICAgdGhpcy5faGlzdG9yeUdyaWQuY29sdW1ucy5ieU5hbWUoJ1BpY2snKSEud2lkdGggPSAzMDtcblxuICAgICAgdGhpcy5faGlzdG9yeUdyaWQub25DZWxsUHJlcGFyZSgoY2VsbCkgPT4ge1xuICAgICAgICBpZiAoY2VsbC50YWJsZUNvbHVtbj8ubmFtZSA9PT0gJ1BpY2snKSB7XG4gICAgICAgICAgaWYgKGNlbGwuaXNDb2xIZWFkZXIpXG4gICAgICAgICAgICBjZWxsLmN1c3RvbVRleHQgPSAnJztcblxuICAgICAgICAgIGlmIChjZWxsLmNlbGwudmFsdWUgPT09IHRydWUpXG4gICAgICAgICAgICBjZWxsLmVsZW1lbnQgPSB1aS5kaXYoW3VpLmljb25GQSgnY2hlY2snKV0sIHtzdHlsZTogeyd0ZXh0LWFsaWduJzogJ2NlbnRlcicsICdtYXJnaW4nOiAnNnB4J319KTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBjZWxsLmVsZW1lbnQgPSB1aS5kaXYoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuX2hpc3RvcnlHcmlkLmNvbHVtbnMuc2V0VmlzaWJsZShbJ1BpY2snLCAuLi5PYmplY3Qua2V5cyh0aGlzLl92aXNpYmxlQ29sdW1uc0ZvckdyaWQpLm1hcCgoY29sTmFtZSkgPT4gY29sTmFtZSldKTtcbiAgICAgIHRoaXMuX2hpc3RvcnlGaWx0ZXJzLnNldE9wdGlvbnMoe2NvbHVtbk5hbWVzOiB0aGlzLl92aXNpYmxlQ29sdW1uc0ZvckZpbHRlcn0pO1xuICAgICAgJCh0aGlzLl9oaXN0b3J5RmlsdGVycy5yb290KS5maW5kKCcuZDQtZmlsdGVyLWdyb3VwLWhlYWRlcicpLmhpZGUoKTtcblxuICAgICAgdGhpcy5faGlzdG9yeUdyaWQuY29sdW1ucy5ieU5hbWUoJ1BpY2snKSEuY2VsbFR5cGUgPSAnaHRtbCc7XG4gICAgICB0aGlzLl9oaXN0b3J5R3JpZC5jb2x1bW5zLmJ5TmFtZSgnUGljaycpIS53aWR0aCA9IDMwO1xuXG4gICAgICBpZiAoIXRoaXMuX3Zpc2libGVDb2x1bW5zRm9yRmlsdGVyLmxlbmd0aCkgJCh0aGlzLl9oaXN0b3J5RmlsdGVycy5yb290LnBhcmVudEVsZW1lbnQpLmhpZGUoKTtcblxuICAgICAgX2hpc3RvcnlEaWFsb2cuYWRkKFxuICAgICAgICB1aS5kaXZIKFtcbiAgICAgICAgICB1aS5ibG9jayhbdGhpcy5faGlzdG9yeUdyaWQucm9vdF0pLFxuICAgICAgICAgIHVpLmJsb2NrKFt0aGlzLl9oaXN0b3J5RmlsdGVycy5yb290XSwge3N0eWxlOiB7J21hcmdpbi1sZWZ0JzogJzEwcHgnLCAnd2lkdGgnOiAnMjI1cHgnfX0pLFxuICAgICAgICBdKVxuICAgICAgKTtcblxuICAgICAgX2hpc3RvcnlEaWFsb2cuc2hvdyh7XG4gICAgICAgIHg6IHRoaXMuX3Zpc2libGVJbnB1dC5pbnB1dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS54ICsgdGhpcy5fdmlzaWJsZUlucHV0LmlucHV0LmNsaWVudFdpZHRoICsgMTAsXG4gICAgICAgIHk6IHRoaXMuX3Zpc2libGVJbnB1dC5pbnB1dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS55IC0gMzAsXG4gICAgICAgIHdpZHRoOiBNYXRoLm1heCh0aGlzLl9oaXN0b3J5R3JpZC5yb290LmNsaWVudFdpZHRoICsgdGhpcy5faGlzdG9yeUZpbHRlcnMucm9vdC5jbGllbnRXaWR0aCArIDMwLCA2MDApLFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5fdmlzaWJsZUlucHV0LnJlYWRPbmx5ID0gdHJ1ZTtcblxuICAgIHRoaXMuc3RvcmUuZXhwZXJpbWVudFJ1bnMgPSB0aGlzLmV4cGVyaW1lbnRSdW5zVXBkYXRlLnBpcGUoXG4gICAgICB0YXAoKCkgPT4gdGhpcy50b2dnbGVMb2FkZXJFeHBSdW5zKHRydWUpKSxcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiBEYXRhYmFzZVNlcnZpY2UuZ2V0SGlzdG9yeVJ1bnModGhpcy5fZnVuY05hbWUpLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gRU1QVFkpLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLnRvZ2dsZUxvYWRlckV4cFJ1bnMoZmFsc2UpKVxuICAgICAgKSksXG4gICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG5cbiAgICB0aGlzLnN0b3JlLmV4cGVyaW1lbnRSdW5zLnBpcGUodGFrZVVudGlsKGZyb20obmV3IFN1YmplY3Q8Ym9vbGVhbj4oKSkpKS5zdWJzY3JpYmUoKG5ld1J1bnMpID0+IHtcbiAgICAgIGNvbnN0IG5ld1J1bnNHcmlkRGYgPSBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoW1xuICAgICAgICBERy5Db2x1bW4uYm9vbCgnUGljaycsIG5ld1J1bnMubGVuZ3RoKS5pbml0KGZhbHNlKSxcbiAgICAgICAgLi4uT2JqZWN0LmVudHJpZXModGhpcy5fdmlzaWJsZUNvbHVtbnNGb3JHcmlkKS5tYXAoKGVudHJ5KSA9PiBERy5Db2x1bW4uZnJvbVN0cmluZ3MoZW50cnlbMF0sIG5ld1J1bnMubWFwKGVudHJ5WzFdKSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbVN0cmluZ3MoJ0lEJywgbmV3UnVucy5tYXAoKG5ld1J1bikgPT4gbmV3UnVuLmlkKSlcbiAgICAgIF0pO1xuICAgICAgbmV3UnVuc0dyaWREZi5vbkN1cnJlbnRSb3dDaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIG5ld1J1bnNHcmlkRGYuZ2V0Q29sKCdQaWNrJykuaW5pdChmYWxzZSk7XG4gICAgICAgIG5ld1J1bnNHcmlkRGYuc2V0KCdQaWNrJywgbmV3UnVuc0dyaWREZi5jdXJyZW50Um93LmlkeCwgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IG5ld0lkID0gbmV3UnVuc0dyaWREZi5nZXRDb2woJ0lEJykuZ2V0KG5ld1J1bnNHcmlkRGYuY3VycmVudFJvdy5pZHgpO1xuICAgICAgICBjb25zdCBjaG9zZW5SdW4gPSBuZXdSdW5zLmZpbmQoKHJ1bikgPT4gcnVuLmlkID09PSBuZXdJZCk7XG4gICAgICAgIGlmIChjaG9zZW5SdW4pXG4gICAgICAgICAgdGhpcy5vbkhpc3RvcmljYWxSdW5DaG9zZW4ubmV4dChjaG9zZW5SdW4pO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnN0b3JlLmV4cGVyaW1lbnRSdW5zRGYubmV4dChuZXdSdW5zR3JpZERmKTtcbiAgICB9KTtcblxuICAgIHRoaXMuc3RvcmUuZXhwZXJpbWVudFJ1bnNEZi5zdWJzY3JpYmUoKG5ld0RmKSA9PiB7XG4gICAgICB0aGlzLmhpc3RvcnlHcmlkLmRhdGFGcmFtZSA9IG5ld0RmO1xuICAgICAgdGhpcy5oaXN0b3J5RmlsdGVycy5kYXRhRnJhbWUgPSBuZXdEZjtcbiAgICB9KTtcblxuICAgIHRoaXMub25IaXN0b3JpY2FsUnVuQ2hvc2VuLnN1YnNjcmliZSgodmFsKSA9PiB7XG4gICAgICBpZiAodmFsKVxuICAgICAgICB0aGlzLl92aXNpYmxlSW5wdXQudmFsdWUgPSB0aGlzLl9zdHJpbmdWYWx1ZUZ1bmModmFsKTtcbiAgICAgIGVsc2VcbiAgICAgICAgdGhpcy5fdmlzaWJsZUlucHV0LnZhbHVlID0gJyc7XG4gICAgfSk7XG5cbiAgICB0aGlzLnN0b3JlLmlzRXhwZXJpbWVudFJ1bnNMb2FkaW5nLnN1YnNjcmliZSgobmV3VmFsdWUpID0+IHtcbiAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcih0aGlzLl92aXNpYmxlSW5wdXQucm9vdCwgbmV3VmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gVmlldmVyIG9iamVjdCBvZiBncmlkXG4gIGdldCBoaXN0b3J5R3JpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5faGlzdG9yeUdyaWQ7XG4gIH1cblxuICAvLyBWaWV2ZXIgb2JqZWN0IG9mIGZpbHRlcnNcbiAgZ2V0IGhpc3RvcnlGaWx0ZXJzKCkge1xuICAgIHJldHVybiB0aGlzLl9oaXN0b3J5RmlsdGVycztcbiAgfVxuXG4gIC8vIEhUTUwgcm9vdCBvZiBjb21wb25lbnRcbiAgZ2V0IHJvb3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Zpc2libGVJbnB1dC5yb290O1xuICB9XG5cbiAgc2V0IHZhbHVlKHZhbDogREcuRnVuY0NhbGwgfCBudWxsKSB7XG4gICAgaWYgKHZhbClcbiAgICAgIHRoaXMuX3Zpc2libGVJbnB1dC52YWx1ZSA9IHRoaXMuX3N0cmluZ1ZhbHVlRnVuYyh2YWwpO1xuICAgIGVsc2VcbiAgICAgIHRoaXMuX3Zpc2libGVJbnB1dC52YWx1ZSA9ICcnO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLm9uSGlzdG9yaWNhbFJ1bkNob3Nlbi52YWx1ZTtcbiAgfVxuXG4gIHNldCBzdHJpbmdWYWx1ZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuX3Zpc2libGVJbnB1dC52YWx1ZSA9IHZhbDtcbiAgfVxuXG4gIGdldCBzdHJpbmdWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmlzaWJsZUlucHV0LnZhbHVlO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZUxvYWRlckV4cFJ1bnMobmV3U3RhdGU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnN0b3JlLmlzRXhwZXJpbWVudFJ1bnNMb2FkaW5nLm5leHQobmV3U3RhdGUpO1xuICB9XG59XG4iXX0=
@@ -1,5 +1,8 @@
1
+ import * as DG from 'datagrok-api/dg';
1
2
  import { FileInput } from './file-input';
3
+ import { HistoryInput } from './history-input';
2
4
  export declare namespace UiUtils {
3
5
  function fileInput(initialText?: string, initialValue?: File | null, onValueChanged?: Function | null, fileType?: string): FileInput;
6
+ function historyInput(label: string, _funcName: string, _stringValueFunc: (currentRun: DG.FuncCall) => string, _visibleColumnsForGrid: Record<string, (currentRun: DG.FuncCall) => string>, _visibleColumnsForFilter?: string[]): HistoryInput;
4
7
  }
5
8
  //# sourceMappingURL=ui-utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ui-utils.d.ts","sourceRoot":"","sources":["ui-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,SAAS,EAAC,MAAM,cAAc,CAAC;AAExD,yBAAiB,OAAO,CAAC;IACvB,SAAgB,SAAS,CACvB,WAAW,SAAqB,EAChC,YAAY,GAAE,IAAI,GAAG,IAAW,EAChC,cAAc,GAAE,QAAQ,GAAG,IAAW,EACtC,QAAQ,SAAkB,aAG3B;CACF"}
1
+ {"version":3,"file":"ui-utils.d.ts","sourceRoot":"","sources":["ui-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAkB,SAAS,EAAC,MAAM,cAAc,CAAC;AACxD,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAE7C,yBAAiB,OAAO,CAAC;IACvB,SAAgB,SAAS,CACvB,WAAW,SAAqB,EAChC,YAAY,GAAE,IAAI,GAAG,IAAW,EAChC,cAAc,GAAE,QAAQ,GAAG,IAAW,EACtC,QAAQ,SAAkB,aAG3B;IAED,SAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,KAAK,MAAM,EACrD,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,KAAK,MAAM,CAAC,EAC3E,wBAAwB,GAAE,MAAM,EAAO,gBAGxC;CACF"}
@@ -1,9 +1,14 @@
1
1
  import { EXCEL_BLOB_TYPE, FileInput } from './file-input';
2
+ import { HistoryInput } from './history-input';
2
3
  export var UiUtils;
3
4
  (function (UiUtils) {
4
5
  function fileInput(initialText = 'Drag-n-drop here', initialValue = null, onValueChanged = null, fileType = EXCEL_BLOB_TYPE) {
5
6
  return new FileInput(initialText, initialValue, onValueChanged, fileType);
6
7
  }
7
8
  UiUtils.fileInput = fileInput;
9
+ function historyInput(label, _funcName, _stringValueFunc, _visibleColumnsForGrid, _visibleColumnsForFilter = []) {
10
+ return new HistoryInput(label, _funcName, _stringValueFunc, _visibleColumnsForGrid, _visibleColumnsForFilter);
11
+ }
12
+ UiUtils.historyInput = historyInput;
8
13
  })(UiUtils || (UiUtils = {}));
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1aS11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsZUFBZSxFQUFFLFNBQVMsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUV4RCxNQUFNLEtBQVcsT0FBTyxDQVN2QjtBQVRELFdBQWlCLE9BQU87SUFDdEIsU0FBZ0IsU0FBUyxDQUN2QixXQUFXLEdBQUcsa0JBQWtCLEVBQ2hDLGVBQTRCLElBQUksRUFDaEMsaUJBQWtDLElBQUksRUFDdEMsUUFBUSxHQUFHLGVBQWU7UUFFMUIsT0FBTyxJQUFJLFNBQVMsQ0FBQyxXQUFXLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBUGUsaUJBQVMsWUFPeEIsQ0FBQTtBQUNILENBQUMsRUFUZ0IsT0FBTyxLQUFQLE9BQU8sUUFTdkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0VYQ0VMX0JMT0JfVFlQRSwgRmlsZUlucHV0fSBmcm9tICcuL2ZpbGUtaW5wdXQnO1xuXG5leHBvcnQgbmFtZXNwYWNlIFVpVXRpbHMge1xuICBleHBvcnQgZnVuY3Rpb24gZmlsZUlucHV0KFxuICAgIGluaXRpYWxUZXh0ID0gJ0RyYWctbi1kcm9wIGhlcmUnLFxuICAgIGluaXRpYWxWYWx1ZTogRmlsZSB8IG51bGwgPSBudWxsLFxuICAgIG9uVmFsdWVDaGFuZ2VkOiBGdW5jdGlvbiB8IG51bGwgPSBudWxsLFxuICAgIGZpbGVUeXBlID0gRVhDRUxfQkxPQl9UWVBFXG4gICkge1xuICAgIHJldHVybiBuZXcgRmlsZUlucHV0KGluaXRpYWxUZXh0LCBpbml0aWFsVmFsdWUsIG9uVmFsdWVDaGFuZ2VkLCBmaWxlVHlwZSk7XG4gIH1cbn1cbiJdfQ==
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1aS11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsZUFBZSxFQUFFLFNBQVMsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUN4RCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFN0MsTUFBTSxLQUFXLE9BQU8sQ0FtQnZCO0FBbkJELFdBQWlCLE9BQU87SUFDdEIsU0FBZ0IsU0FBUyxDQUN2QixXQUFXLEdBQUcsa0JBQWtCLEVBQ2hDLGVBQTRCLElBQUksRUFDaEMsaUJBQWtDLElBQUksRUFDdEMsUUFBUSxHQUFHLGVBQWU7UUFFMUIsT0FBTyxJQUFJLFNBQVMsQ0FBQyxXQUFXLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBUGUsaUJBQVMsWUFPeEIsQ0FBQTtJQUVELFNBQWdCLFlBQVksQ0FDMUIsS0FBYSxFQUNiLFNBQWlCLEVBQ2pCLGdCQUFxRCxFQUNyRCxzQkFBMkUsRUFDM0UsMkJBQXFDLEVBQUU7UUFFdkMsT0FBTyxJQUFJLFlBQVksQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixFQUFFLHdCQUF3QixDQUFDLENBQUM7SUFDaEgsQ0FBQztJQVJlLG9CQUFZLGVBUTNCLENBQUE7QUFDSCxDQUFDLEVBbkJnQixPQUFPLEtBQVAsT0FBTyxRQW1CdkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHtFWENFTF9CTE9CX1RZUEUsIEZpbGVJbnB1dH0gZnJvbSAnLi9maWxlLWlucHV0JztcbmltcG9ydCB7SGlzdG9yeUlucHV0fSBmcm9tICcuL2hpc3RvcnktaW5wdXQnO1xuXG5leHBvcnQgbmFtZXNwYWNlIFVpVXRpbHMge1xuICBleHBvcnQgZnVuY3Rpb24gZmlsZUlucHV0KFxuICAgIGluaXRpYWxUZXh0ID0gJ0RyYWctbi1kcm9wIGhlcmUnLFxuICAgIGluaXRpYWxWYWx1ZTogRmlsZSB8IG51bGwgPSBudWxsLFxuICAgIG9uVmFsdWVDaGFuZ2VkOiBGdW5jdGlvbiB8IG51bGwgPSBudWxsLFxuICAgIGZpbGVUeXBlID0gRVhDRUxfQkxPQl9UWVBFXG4gICkge1xuICAgIHJldHVybiBuZXcgRmlsZUlucHV0KGluaXRpYWxUZXh0LCBpbml0aWFsVmFsdWUsIG9uVmFsdWVDaGFuZ2VkLCBmaWxlVHlwZSk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gaGlzdG9yeUlucHV0KFxuICAgIGxhYmVsOiBzdHJpbmcsXG4gICAgX2Z1bmNOYW1lOiBzdHJpbmcsXG4gICAgX3N0cmluZ1ZhbHVlRnVuYzogKGN1cnJlbnRSdW46IERHLkZ1bmNDYWxsKSA9PiBzdHJpbmcsXG4gICAgX3Zpc2libGVDb2x1bW5zRm9yR3JpZDogUmVjb3JkPHN0cmluZywgKGN1cnJlbnRSdW46IERHLkZ1bmNDYWxsKSA9PiBzdHJpbmc+LFxuICAgIF92aXNpYmxlQ29sdW1uc0ZvckZpbHRlcjogc3RyaW5nW10gPSBbXVxuICApIHtcbiAgICByZXR1cm4gbmV3IEhpc3RvcnlJbnB1dChsYWJlbCwgX2Z1bmNOYW1lLCBfc3RyaW5nVmFsdWVGdW5jLCBfdmlzaWJsZUNvbHVtbnNGb3JHcmlkLCBfdmlzaWJsZUNvbHVtbnNGb3JGaWx0ZXIpO1xuICB9XG59XG4iXX0=
package/src/test.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,UAAU,EAAe,MAAM,MAAM,CAAC;AAE9C,eAAO,MAAM,KAAK,EAAE;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG;QACb,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1E,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAC5C,CAAA;CACG,CAAC;AAEP,eAAO,IAAI,eAAe,EAAE,MAAM,CAAC;AAEnC,yBAAiB,MAAM,CAAC;IAEtB,SAAgB,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,MAAM,QAGhD;CACF;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,WAAW;IACtB,cAAc,UAAQ;IACtB,MAAM,UAAS;gBAEH,cAAc,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO;CAIvD;AAED,qBAAa,IAAI;IACf,IAAI,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,WAAW,CAAC;gBAEV,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,WAAW;CAkB5F;AAED,wBAAsB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,OAAO,EAAE,MAAM,IAAI,EAAE,EAAE,GAAE,MAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAmBzI;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,CAMxF;AAGD,wBAAgB,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,GAAG,IAAI,CAGvD;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,SAAQ,GAAG,IAAI,CAIrF;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAAE,QAAQ,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,QAe5F;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC,QAiB3E;AAGD,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,GAAG,IAAI,CAGlE;AAGD,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAIxD;AAGD,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAItD;AAGD,wBAAsB,QAAQ,CAAC,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,WAAW,CAAA;CAAE;;;aAC1C,OAAO;YAC1C,MAAM;QAAM,MAAM;aAAW,OAAO;KA8D9D;AA+BD,wBAAsB,KAAK,CAAC,EAAE,EAAE,MAAM,iBAErC;AAED,wBAAsB,UAAU,CAAC,YAAY,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB3E;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAM5D"}
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["test.ts"],"names":[],"mappings":"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"}
package/src/test.js CHANGED
@@ -248,21 +248,17 @@ export function delay(ms) {
248
248
  export function awaitCheck(checkHandler) {
249
249
  return __awaiter(this, void 0, void 0, function* () {
250
250
  return new Promise((resolve, reject) => {
251
- let stop = false;
252
251
  setTimeout(() => {
253
- stop = true;
252
+ clearInterval(interval);
254
253
  // eslint-disable-next-line prefer-promise-reject-errors
255
254
  reject('Timeout exceeded');
256
255
  }, 500);
257
- function check() {
256
+ const interval = setInterval(() => {
258
257
  if (checkHandler()) {
259
- stop = false;
258
+ clearInterval(interval);
260
259
  resolve();
261
260
  }
262
- if (!stop)
263
- setTimeout(check, 50);
264
- }
265
- check();
261
+ }, 50);
266
262
  });
267
263
  });
268
264
  }
@@ -273,4 +269,4 @@ export function isDialogPresent(dialogTitle) {
273
269
  }
274
270
  return false;
275
271
  }
276
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLElBQUksTUFBTSxtQkFBbUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR3RDLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FLZCxFQUFFLENBQUM7QUFFUCxNQUFNLENBQUMsSUFBSSxlQUF1QixDQUFDO0FBRW5DLE1BQU0sS0FBVyxNQUFNLENBTXRCO0FBTkQsV0FBaUIsTUFBTTtJQUVyQixTQUFnQixPQUFPLENBQUMsS0FBVSxFQUFFLElBQWE7UUFDL0MsSUFBSSxLQUFLLElBQUksSUFBSTtZQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksY0FBYyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUhlLGNBQU8sVUFHdEIsQ0FBQTtBQUNILENBQUMsRUFOZ0IsTUFBTSxLQUFOLE1BQU0sUUFNdEI7QUFRRCxNQUFNLE9BQU8sV0FBVztJQUl0QixZQUFZLGNBQXdCLEVBQUUsTUFBZ0I7UUFIdEQsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFDdEIsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUdiLElBQUksY0FBYyxLQUFLLFNBQVM7WUFBRSxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUN2RSxJQUFJLE1BQU0sS0FBSyxTQUFTO1lBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDakQsQ0FBQztJQUFBLENBQUM7Q0FDSDtBQUVELE1BQU0sT0FBTyxJQUFJO0lBTWYsWUFBWSxRQUFnQixFQUFFLElBQVksRUFBRSxJQUF3QixFQUFFLE9BQXFCOztRQUN6RixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSSxHQUFH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aW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGNvbnN0IHRlc3RzOiB7XG4gIFtrZXk6IHN0cmluZ106IHtcbiAgICB0ZXN0cz86IFRlc3RbXSwgYmVmb3JlPzogKCkgPT4gUHJvbWlzZTx2b2lkPiwgYWZ0ZXI/OiAoKSA9PiBQcm9taXNlPHZvaWQ+LFxuICAgIGJlZm9yZVN0YXR1cz86IHN0cmluZywgYWZ0ZXJTdGF0dXM/OiBzdHJpbmdcbiAgfVxufSA9IHt9O1xuXG5leHBvcnQgbGV0IGN1cnJlbnRDYXRlZ29yeTogc3RyaW5nO1xuXG5leHBvcnQgbmFtZXNwYWNlIGFzc3VyZSB7XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIG5vdE51bGwodmFsdWU6IGFueSwgbmFtZT86IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke25hbWUgPT0gbnVsbCA/ICdWYWx1ZScgOiBuYW1lfSBub3QgZGVmaW5lZGApO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdE9wdGlvbnMge1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICB1bmhhbmRsZWRFeGNlcHRpb25UaW1lb3V0PzogbnVtYmVyO1xuICBza2lwUmVhc29uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgVGVzdENvbnRleHQge1xuICBjYXRjaFVuaGFuZGxlZCA9IHRydWU7XG4gIHJlcG9ydCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKGNhdGNoVW5oYW5kbGVkPzogYm9vbGVhbiwgcmVwb3J0PzogYm9vbGVhbikge1xuICAgIGlmIChjYXRjaFVuaGFuZGxlZCAhPT0gdW5kZWZpbmVkKSB0aGlzLmNhdGNoVW5oYW5kbGVkID0gY2F0Y2hVbmhhbmRsZWQ7XG4gICAgaWYgKHJlcG9ydCAhPT0gdW5kZWZpbmVkKSB0aGlzLnJlcG9ydCA9IHJlcG9ydDtcbiAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIFRlc3Qge1xuICB0ZXN0OiAoKSA9PiBQcm9taXNlPGFueT47XG4gIG5hbWU6IHN0cmluZztcbiAgY2F0ZWdvcnk6IHN0cmluZztcbiAgb3B0aW9ucz86IFRlc3RPcHRpb25zO1xuXG4gIGNvbnN0cnVjdG9yKGNhdGVnb3J5OiBzdHJpbmcsIG5hbWU6IHN0cmluZywgdGVzdDogKCkgPT4gUHJvbWlzZTxhbnk+LCBvcHRpb25zPzogVGVzdE9wdGlvbnMpIHtcbiAgICB0aGlzLmNhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICBvcHRpb25zID8/PSB7fTtcbiAgICBvcHRpb25zLnRpbWVvdXQgPz89IDMwMDAwO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy50ZXN0ID0gYXN5bmMgKCk6IFByb21pc2U8YW55PiA9PiB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmVzdWx0ID0gYXdhaXQgdGVzdCgpO1xuICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdEV2ZW50PFQ+KGV2ZW50OiBPYnNlcnZhYmxlPFQ+LCBoYW5kbGVyOiAoYXJnczogVCkgPT4gdm9pZCwgdHJpZ2dlcjogKCkgPT4gdm9pZCwgbXM6IG51bWJlciA9IDApOiBQcm9taXNlPHN0cmluZz4ge1xuICBsZXQgc3ViOiBTdWJzY3JpcHRpb247XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgc3ViID0gZXZlbnQuc3Vic2NyaWJlKChhcmdzKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBoYW5kbGVyKGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgIHJlc29sdmUoJ09LJyk7XG4gICAgfSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcHJvbWlzZS1yZWplY3QtZXJyb3JzXG4gICAgICByZWplY3QoJ3RpbWVvdXQnKTtcbiAgICB9LCBtcyk7XG4gICAgdHJpZ2dlcigpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlc3QobmFtZTogc3RyaW5nLCB0ZXN0OiAoKSA9PiBQcm9taXNlPGFueT4sIG9wdGlvbnM/OiBUZXN0T3B0aW9ucyk6IHZvaWQge1xuICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSA9PSB1bmRlZmluZWQpXG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XSA9IHt9O1xuICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XS50ZXN0cyA9PSB1bmRlZmluZWQpXG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS50ZXN0cyA9IFtdO1xuICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnRlc3RzIS5wdXNoKG5ldyBUZXN0KGN1cnJlbnRDYXRlZ29yeSwgbmFtZSwgdGVzdCwgb3B0aW9ucykpO1xufVxuXG4vKiBUZXN0cyB0d28gb2JqZWN0cyBmb3IgZXF1YWxpdHksIHRocm93cyBhbiBleGNlcHRpb24gaWYgdGhleSBhcmUgbm90IGVxdWFsLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdChhY3R1YWw6IGFueSwgZXhwZWN0ZWQ6IGFueSk6IHZvaWQge1xuICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIFwiJHtleHBlY3RlZH1cIiwgZ290IFwiJHthY3R1YWx9XCJgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdEZsb2F0KGFjdHVhbDogbnVtYmVyLCBleHBlY3RlZDogbnVtYmVyLCB0b2xlcmFuY2UgPSAwLjAwMSk6IHZvaWQge1xuICBjb25zdCBhcmVFcXVhbCA9IE1hdGguYWJzKGFjdHVhbCAtIGV4cGVjdGVkKSA8IHRvbGVyYW5jZTtcbiAgaWYgKCFhcmVFcXVhbClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7ZXhwZWN0ZWR9LCBnb3QgJHthY3R1YWx9ICh0b2xlcmFuY2UgPSAke3RvbGVyYW5jZX0pYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RPYmplY3QoYWN0dWFsOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBleHBlY3RlZDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkge1xuICBmb3IgKGNvbnN0IFtleHBlY3RlZEtleSwgZXhwZWN0ZWRWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZXhwZWN0ZWQpKSB7XG4gICAgaWYgKCFhY3R1YWwuaGFzT3duUHJvcGVydHkoZXhwZWN0ZWRLZXkpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBwcm9wZXJ0eSBcIiR7ZXhwZWN0ZWRLZXl9XCIgbm90IGZvdW5kYCk7XG5cbiAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IGFjdHVhbFtleHBlY3RlZEtleV07XG4gICAgaWYgKGFjdHVhbFZhbHVlIGluc3RhbmNlb2YgQXJyYXkgJiYgZXhwZWN0ZWRWYWx1ZSBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgZXhwZWN0QXJyYXkoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpO1xuICAgIGVsc2UgaWYgKGFjdHVhbFZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICYmIGV4cGVjdGVkVmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpXG4gICAgICBleHBlY3RPYmplY3QoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpO1xuICAgIGVsc2UgaWYgKE51bWJlci5pc0Zpbml0ZShhY3R1YWxWYWx1ZSkgJiYgTnVtYmVyLmlzRmluaXRlKGV4cGVjdGVkVmFsdWUpKVxuICAgICAgZXhwZWN0RmxvYXQoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpO1xuICAgIGVsc2UgaWYgKGFjdHVhbFZhbHVlICE9IGV4cGVjdGVkVmFsdWUpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICgke2V4cGVjdGVkVmFsdWV9KSBmb3Iga2V5ICcke2V4cGVjdGVkS2V5fScsIGdvdCAoJHthY3R1YWxWYWx1ZX0pYCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdEFycmF5KGFjdHVhbDogQXJyYXlMaWtlPGFueT4sIGV4cGVjdGVkOiBBcnJheUxpa2U8YW55Pikge1xuICBjb25zdCBhY3R1YWxMZW5ndGggPSBhY3R1YWwubGVuZ3RoO1xuICBjb25zdCBleHBlY3RlZExlbmd0aCA9IGV4cGVjdGVkLmxlbmd0aDtcblxuICBpZiAoYWN0dWFsTGVuZ3RoICE9IGV4cGVjdGVkTGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheXMgYXJlIG9mIGRpZmZlcmVudCBsZW5ndGg6IGFjdHVhbCBhcnJheSBsZW5ndGggaXMgJHthY3R1YWxMZW5ndGh9IGAgK1xuICAgICAgYGFuZCBleHBlY3RlZCBhcnJheSBsZW5ndGggaXMgJHtleHBlY3RlZExlbmd0aH1gKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0dWFsTGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYWN0dWFsW2ldIGluc3RhbmNlb2YgQXJyYXkgJiYgZXhwZWN0ZWRbaV0gaW5zdGFuY2VvZiBBcnJheSlcbiAgICAgIGV4cGVjdEFycmF5KGFjdHVhbFtpXSwgZXhwZWN0ZWRbaV0pO1xuICAgIGVsc2UgaWYgKGFjdHVhbFtpXSBpbnN0YW5jZW9mIE9iamVjdCAmJiBleHBlY3RlZFtpXSBpbnN0YW5jZW9mIE9iamVjdClcbiAgICAgIGV4cGVjdE9iamVjdChhY3R1YWxbaV0sIGV4cGVjdGVkW2ldKTtcbiAgICBlbHNlIGlmIChhY3R1YWxbaV0gIT0gZXhwZWN0ZWRbaV0pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7ZXhwZWN0ZWRbaV19IGF0IHBvc2l0aW9uICR7aX0sIGdvdCAke2FjdHVhbFtpXX1gKTtcbiAgfVxufVxuXG4vKiBEZWZpbmVzIGEgdGVzdCBzdWl0ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXRlZ29yeShjYXRlZ29yeTogc3RyaW5nLCB0ZXN0czogKCkgPT4gdm9pZCk6IHZvaWQge1xuICBjdXJyZW50Q2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgdGVzdHMoKTtcbn1cblxuLyogRGVmaW5lcyBhIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGJlZm9yZSB0aGUgdGVzdHMgaW4gdGhpcyBjYXRlZ29yeSBhcmUgZXhlY3V0ZWQuICovXG5leHBvcnQgZnVuY3Rpb24gYmVmb3JlKGJlZm9yZTogKCkgPT4gUHJvbWlzZTx2b2lkPik6IHZvaWQge1xuICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSA9PSB1bmRlZmluZWQpXG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XSA9IHt9O1xuICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLmJlZm9yZSA9IGJlZm9yZTtcbn1cblxuLyogRGVmaW5lcyBhIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSB0ZXN0cyBpbiB0aGlzIGNhdGVnb3J5IGFyZSBleGVjdXRlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZnRlcihhZnRlcjogKCkgPT4gUHJvbWlzZTx2b2lkPik6IHZvaWQge1xuICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSA9PSB1bmRlZmluZWQpXG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XSA9IHt9O1xuICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLmFmdGVyID0gYWZ0ZXI7XG59XG5cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blRlc3RzKG9wdGlvbnM/OiB7IGNhdGVnb3J5Pzogc3RyaW5nLCB0ZXN0Pzogc3RyaW5nLCB0ZXN0Q29udGV4dD86IFRlc3RDb250ZXh0IH0pIHtcbiAgY29uc3QgcmVzdWx0czogeyBjYXRlZ29yeT86IHN0cmluZywgbmFtZT86IHN0cmluZywgc3VjY2VzczogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHN0cmluZywgbXM6IG51bWJlciwgc2tpcHBlZDogYm9vbGVhbiB9W10gPSBbXTtcbiAgY29uc3QgcGFja2FnZU5hbWUgPSBncm9rLmZ1bmN0aW9ucy5nZXRDdXJyZW50Q2FsbCgpPy5mdW5jPy5wYWNrYWdlO1xuICBjb25zb2xlLmxvZyhgUnVubmluZyB0ZXN0c2ApO1xuICBvcHRpb25zID8/PSB7fTtcbiAgb3B0aW9ucyEudGVzdENvbnRleHQgPz89IG5ldyBUZXN0Q29udGV4dCgpO1xuICBncm9rLnNoZWxsLmxhc3RFcnJvciA9ICcnO1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0ZXN0cykpIHtcbiAgICBpZiAob3B0aW9ucz8uY2F0ZWdvcnkgIT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIWtleS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgob3B0aW9ucz8uY2F0ZWdvcnkudG9Mb3dlckNhc2UoKSkpXG4gICAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyhgU3RhcnRlZCAke2tleX0gY2F0ZWdvcnlgKTtcbiAgICB0cnkge1xuICAgICAgaWYgKHZhbHVlLmJlZm9yZSlcbiAgICAgICAgYXdhaXQgdmFsdWUuYmVmb3JlKCk7XG4gICAgfSBjYXRjaCAoeDogYW55KSB7XG4gICAgICB2YWx1ZS5iZWZvcmVTdGF0dXMgPSB4LnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIGNvbnN0IHQgPSB2YWx1ZS50ZXN0cyA/PyBbXTtcbiAgICBjb25zdCByZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHQubGVuZ3RoOyBpKyspXG4gICAgICByZXMucHVzaChhd2FpdCBleGVjVGVzdCh0W2ldLCBvcHRpb25zPy50ZXN0KSk7XG5cbiAgICBjb25zdCBkYXRhID0gKGF3YWl0IFByb21pc2UuYWxsKHJlcykpLmZpbHRlcigoZCkgPT4gZC5yZXN1bHQgIT0gJ3NraXBwZWQnKTtcbiAgICB0cnkge1xuICAgICAgaWYgKHZhbHVlLmFmdGVyKVxuICAgICAgICBhd2FpdCB2YWx1ZS5hZnRlcigpO1xuICAgIH0gY2F0Y2ggKHg6IGFueSkge1xuICAgICAgdmFsdWUuYWZ0ZXJTdGF0dXMgPSB4LnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIGlmICh2YWx1ZS5hZnRlclN0YXR1cylcbiAgICAgIGRhdGEucHVzaCh7Y2F0ZWdvcnk6IGtleSwgbmFtZTogJ2luaXQnLCByZXN1bHQ6IHZhbHVlLmFmdGVyU3RhdHVzLCBzdWNjZXNzOiBmYWxzZSwgbXM6IDAsIHNraXBwZWQ6IGZhbHNlfSk7XG4gICAgaWYgKHZhbHVlLmJlZm9yZVN0YXR1cylcbiAgICAgIGRhdGEucHVzaCh7Y2F0ZWdvcnk6IGtleSwgbmFtZTogJ2luaXQnLCByZXN1bHQ6IHZhbHVlLmJlZm9yZVN0YXR1cywgc3VjY2VzczogZmFsc2UsIG1zOiAwLCBza2lwcGVkOiBmYWxzZX0pO1xuICAgIHJlc3VsdHMucHVzaCguLi5kYXRhKTtcbiAgfVxuICBpZiAob3B0aW9ucy50ZXN0Q29udGV4dC5jYXRjaFVuaGFuZGxlZCkge1xuICAgIGF3YWl0IGRlbGF5KDEwMDApO1xuICAgIGlmIChncm9rLnNoZWxsLmxhc3RFcnJvci5sZW5ndGggPiAwKSB7XG4gICAgICByZXN1bHRzLnB1c2goe1xuICAgICAgICBjYXRlZ29yeTogJ1VuaGFuZGxlZCBleGNlcHRpb25zJyxcbiAgICAgICAgbmFtZTogJ2V4Y2VwdGlvbnMnLFxuICAgICAgICByZXN1bHQ6IGdyb2suc2hlbGwubGFzdEVycm9yLCBzdWNjZXNzOiBmYWxzZSwgbXM6IDAsIHNraXBwZWQ6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgaWYgKG9wdGlvbnMudGVzdENvbnRleHQucmVwb3J0KSB7XG4gICAgY29uc3QgbG9nZ2VyID0gbmV3IERHLkxvZ2dlcigpO1xuICAgIGNvbnN0IHN1Y2Nlc3NmdWwgPSByZXN1bHRzLmZpbHRlcigocikgPT4gci5zdWNjZXNzKS5sZW5ndGg7XG4gICAgY29uc3Qgc2tpcHBlZCA9IHJlc3VsdHMuZmlsdGVyKChyKSA9PiByLnNraXBwZWQpLmxlbmd0aDtcbiAgICBjb25zdCBmYWlsZWQgPSByZXN1bHRzLmZpbHRlcigocikgPT4gIXIuc3VjY2Vzcyk7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSAnUGFja2FnZSBAcGFja2FnZSB0ZXN0ZWQ6IEBzdWNjZXNzZnVsIHN1Y2Nlc3NmdWwsIEBza2lwcGVkIHNraXBwZWQsIEBmYWlsZWQgZmFpbGVkIHRlc3RzJztcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBzdWNjZXNzZnVsOiBzdWNjZXNzZnVsLFxuICAgICAgc2tpcHBlZDogc2tpcHBlZCxcbiAgICAgIGZhaWxlZDogZmFpbGVkLmxlbmd0aCxcbiAgICAgIHBhY2thZ2U6IHBhY2thZ2VOYW1lXG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IHIgb2YgZmFpbGVkKSBPYmplY3QuYXNzaWduKHBhcmFtcywge1tgJHtyLmNhdGVnb3J5fSB8ICR7ci5uYW1lfWBdOiByLnJlc3VsdH0pO1xuICAgIGxvZ2dlci5sb2coZGVzY3JpcHRpb24sIHBhcmFtcywgJ3BhY2thZ2UtdGVzdGVkJyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4ZWNUZXN0KHQ6IFRlc3QsIHByZWRpY2F0ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gIGxldCByOiB7IGNhdGVnb3J5Pzogc3RyaW5nLCBuYW1lPzogc3RyaW5nLCBzdWNjZXNzOiBib29sZWFuLCByZXN1bHQ6IHN0cmluZywgbXM6IG51bWJlciwgc2tpcHBlZDogYm9vbGVhbiB9O1xuICBjb25zdCBmaWx0ZXIgPSBwcmVkaWNhdGUgIT0gdW5kZWZpbmVkICYmICghdC5uYW1lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChwcmVkaWNhdGUudG9Mb3dlckNhc2UoKSkpO1xuICBjb25zdCBza2lwID0gdC5vcHRpb25zPy5za2lwUmVhc29uIHx8IGZpbHRlcjtcbiAgY29uc3Qgc2tpcFJlYXNvbiA9IGZpbHRlciA/ICdza2lwcGVkJyA6IHQub3B0aW9ucz8uc2tpcFJlYXNvbjtcbiAgaWYgKCFza2lwKVxuICAgIGNvbnNvbGUubG9nKGBTdGFydGVkICR7dC5jYXRlZ29yeX0gJHt0Lm5hbWV9YCk7XG4gIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUoKTtcblxuICB0cnkge1xuICAgIGlmIChza2lwKVxuICAgICAgciA9IHtzdWNjZXNzOiB0cnVlLCByZXN1bHQ6IHNraXBSZWFzb24hLCBtczogMCwgc2tpcHBlZDogdHJ1ZX07XG4gICAgZWxzZVxuICAgICAgciA9IHtzdWNjZXNzOiB0cnVlLCByZXN1bHQ6IGF3YWl0IHQudGVzdCgpID8/ICdPSycsIG1zOiAwLCBza2lwcGVkOiBmYWxzZX07XG4gIH0gY2F0Y2ggKHg6IGFueSkge1xuICAgIHIgPSB7c3VjY2VzczogZmFsc2UsIHJlc3VsdDogeC50b1N0cmluZygpLCBtczogMCwgc2tpcHBlZDogZmFsc2V9O1xuICB9XG4gIGNvbnN0IHN0b3AgPSBuZXcgRGF0ZSgpO1xuICAvLyBAdHMtaWdub3JlXG4gIHIubXMgPSBzdG9wIC0gc3RhcnQ7XG4gIGlmICghc2tpcClcbiAgICBjb25zb2xlLmxvZyhgRmluaXNoZWQgJHt0LmNhdGVnb3J5fSAke3QubmFtZX0gZm9yICR7ci5tc30gbXNgKTtcblxuICByLmNhdGVnb3J5ID0gdC5jYXRlZ29yeTtcbiAgci5uYW1lID0gdC5uYW1lO1xuICByZXR1cm4gcjtcbn1cblxuLyogV2FpdHMgW21zXSBtaWxsaXNlY29uZHMgKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxheShtczogbnVtYmVyKSB7XG4gIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIG1zKSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhd2FpdENoZWNrKGNoZWNrSGFuZGxlcjogKCkgPT4gYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBzdG9wOiBib29sZWFuID0gZmFsc2U7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcHJvbWlzZS1yZWplY3QtZXJyb3JzXG4gICAgICByZWplY3QoJ1RpbWVvdXQgZXhjZWVkZWQnKTtcbiAgICB9LCA1MDApO1xuXG4gICAgZnVuY3Rpb24gY2hlY2soKSB7XG4gICAgICBpZiAoY2hlY2tIYW5kbGVyKCkpIHtcbiAgICAgICAgc3RvcCA9IGZhbHNlO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgICBpZiAoIXN0b3ApXG4gICAgICAgIHNldFRpbWVvdXQoY2hlY2ssIDUwKTtcbiAgICB9XG5cbiAgICBjaGVjaygpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGlhbG9nUHJlc2VudChkaWFsb2dUaXRsZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgREcuRGlhbG9nLmdldE9wZW5EaWFsb2dzKCkubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoREcuRGlhbG9nLmdldE9wZW5EaWFsb2dzKClbaV0udGl0bGUgPT0gZGlhbG9nVGl0bGUpXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG4iXX0=
272
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLElBQUksTUFBTSxtQkFBbUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBSXRDLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FLZCxFQUFFLENBQUM7QUFFUCxNQUFNLENBQUMsSUFBSSxlQUF1QixDQUFDO0FBRW5DLE1BQU0sS0FBVyxNQUFNLENBTXRCO0FBTkQsV0FBaUIsTUFBTTtJQUVyQixTQUFnQixPQUFPLENBQUMsS0FBVSxFQUFFLElBQWE7UUFDL0MsSUFBSSxLQUFLLElBQUksSUFBSTtZQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksY0FBYyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUhlLGNBQU8sVUFHdEIsQ0FBQTtBQUNILENBQUMsRUFOZ0IsTUFBTSxLQUFOLE1BQU0sUUFNdEI7QUFRRCxNQUFNLE9BQU8sV0FBVztJQUl0QixZQUFZLGNBQXdCLEVBQUUsTUFBZ0I7UUFIdEQsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFDdEIsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUdiLElBQUksY0FBYyxLQUFLLFNBQVM7WUFBRSxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUN2RSxJQUFJLE1BQU0sS0FBSyxTQUFTO1lBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDakQsQ0FBQztJQUFBLENBQUM7Q0FDSDtBQUVELE1BQU0sT0FBTyxJQUFJO0lBTWYsWUFBWSxRQUFnQixFQUFFLElBQVksRUFBRSxJQUF3QixFQUFFLE9BQXFCOztRQUN6RixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSSxHQUFH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QUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQztDQUFBO0FBRUQsTUFBTSxVQUFnQixVQUFVLENBQUMsWUFBMkI7O1FBQzFELE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3hCLHdEQUF3RDtnQkFDeEQsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDN0IsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ1IsTUFBTSxRQUFRLEdBQVksV0FBVyxDQUFDLEdBQUcsRUFBRTtnQkFDekMsSUFBSSxZQUFZLEVBQUUsRUFBRTtvQkFDbEIsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN4QixPQUFPLEVBQUUsQ0FBQztpQkFDWDtZQUNILENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNULENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUFBO0FBRUQsTUFBTSxVQUFVLGVBQWUsQ0FBQyxXQUFtQjtJQUNqRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDMUQsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxXQUFXO1lBQ3BELE9BQU8sSUFBSSxDQUFDO0tBQ2Y7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQge09ic2VydmFibGUsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgVGltZW91dCA9IE5vZGVKUy5UaW1lb3V0O1xuXG5leHBvcnQgY29uc3QgdGVzdHM6IHtcbiAgW2tleTogc3RyaW5nXToge1xuICAgIHRlc3RzPzogVGVzdFtdLCBiZWZvcmU/OiAoKSA9PiBQcm9taXNlPHZvaWQ+LCBhZnRlcj86ICgpID0+IFByb21pc2U8dm9pZD4sXG4gICAgYmVmb3JlU3RhdHVzPzogc3RyaW5nLCBhZnRlclN0YXR1cz86IHN0cmluZ1xuICB9XG59ID0ge307XG5cbmV4cG9ydCBsZXQgY3VycmVudENhdGVnb3J5OiBzdHJpbmc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgYXNzdXJlIHtcblxuICBleHBvcnQgZnVuY3Rpb24gbm90TnVsbCh2YWx1ZTogYW55LCBuYW1lPzogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bmFtZSA9PSBudWxsID8gJ1ZhbHVlJyA6IG5hbWV9IG5vdCBkZWZpbmVkYCk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZXN0T3B0aW9ucyB7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIHVuaGFuZGxlZEV4Y2VwdGlvblRpbWVvdXQ/OiBudW1iZXI7XG4gIHNraXBSZWFzb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBUZXN0Q29udGV4dCB7XG4gIGNhdGNoVW5oYW5kbGVkID0gdHJ1ZTtcbiAgcmVwb3J0ID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoY2F0Y2hVbmhhbmRsZWQ/OiBib29sZWFuLCByZXBvcnQ/OiBib29sZWFuKSB7XG4gICAgaWYgKGNhdGNoVW5oYW5kbGVkICE9PSB1bmRlZmluZWQpIHRoaXMuY2F0Y2hVbmhhbmRsZWQgPSBjYXRjaFVuaGFuZGxlZDtcbiAgICBpZiAocmVwb3J0ICE9PSB1bmRlZmluZWQpIHRoaXMucmVwb3J0ID0gcmVwb3J0O1xuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgVGVzdCB7XG4gIHRlc3Q6ICgpID0+IFByb21pc2U8YW55PjtcbiAgbmFtZTogc3RyaW5nO1xuICBjYXRlZ29yeTogc3RyaW5nO1xuICBvcHRpb25zPzogVGVzdE9wdGlvbnM7XG5cbiAgY29uc3RydWN0b3IoY2F0ZWdvcnk6IHN0cmluZywgbmFtZTogc3RyaW5nLCB0ZXN0OiAoKSA9PiBQcm9taXNlPGFueT4sIG9wdGlvbnM/OiBUZXN0T3B0aW9ucykge1xuICAgIHRoaXMuY2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIG9wdGlvbnMgPz89IHt9O1xuICAgIG9wdGlvbnMudGltZW91dCA/Pz0gMzAwMDA7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnRlc3QgPSBhc3luYyAoKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXN1bHQgPSBhd2FpdCB0ZXN0KCk7XG4gICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0ZXN0RXZlbnQ8VD4oZXZlbnQ6IE9ic2VydmFibGU8VD4sIGhhbmRsZXI6IChhcmdzOiBUKSA9PiB2b2lkLCB0cmlnZ2VyOiAoKSA9PiB2b2lkLCBtczogbnVtYmVyID0gMCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGxldCBzdWI6IFN1YnNjcmlwdGlvbjtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBzdWIgPSBldmVudC5zdWJzY3JpYmUoKGFyZ3MpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGhhbmRsZXIoYXJncyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH1cbiAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgcmVzb2x2ZSgnT0snKTtcbiAgICB9KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1wcm9taXNlLXJlamVjdC1lcnJvcnNcbiAgICAgIHJlamVjdCgndGltZW91dCcpO1xuICAgIH0sIG1zKTtcbiAgICB0cmlnZ2VyKCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVzdChuYW1lOiBzdHJpbmcsIHRlc3Q6ICgpID0+IFByb21pc2U8YW55Piwgb3B0aW9ucz86IFRlc3RPcHRpb25zKTogdm9pZCB7XG4gIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID09IHVuZGVmaW5lZClcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID0ge307XG4gIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnRlc3RzID09IHVuZGVmaW5lZClcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnRlc3RzID0gW107XG4gIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMhLnB1c2gobmV3IFRlc3QoY3VycmVudENhdGVnb3J5LCBuYW1lLCB0ZXN0LCBvcHRpb25zKSk7XG59XG5cbi8qIFRlc3RzIHR3byBvYmplY3RzIGZvciBlcXVhbGl0eSwgdGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGV5IGFyZSBub3QgZXF1YWwuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0KGFjdHVhbDogYW55LCBleHBlY3RlZDogYW55KTogdm9pZCB7XG4gIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgXCIke2V4cGVjdGVkfVwiLCBnb3QgXCIke2FjdHVhbH1cImApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0RmxvYXQoYWN0dWFsOiBudW1iZXIsIGV4cGVjdGVkOiBudW1iZXIsIHRvbGVyYW5jZSA9IDAuMDAxKTogdm9pZCB7XG4gIGNvbnN0IGFyZUVxdWFsID0gTWF0aC5hYnMoYWN0dWFsIC0gZXhwZWN0ZWQpIDwgdG9sZXJhbmNlO1xuICBpZiAoIWFyZUVxdWFsKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtleHBlY3RlZH0sIGdvdCAke2FjdHVhbH0gKHRvbGVyYW5jZSA9ICR7dG9sZXJhbmNlfSlgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdE9iamVjdChhY3R1YWw6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIGV4cGVjdGVkOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSB7XG4gIGZvciAoY29uc3QgW2V4cGVjdGVkS2V5LCBleHBlY3RlZFZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhleHBlY3RlZCkpIHtcbiAgICBpZiAoIWFjdHVhbC5oYXNPd25Qcm9wZXJ0eShleHBlY3RlZEtleSkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHByb3BlcnR5IFwiJHtleHBlY3RlZEtleX1cIiBub3QgZm91bmRgKTtcblxuICAgIGNvbnN0IGFjdHVhbFZhbHVlID0gYWN0dWFsW2V4cGVjdGVkS2V5XTtcbiAgICBpZiAoYWN0dWFsVmFsdWUgaW5zdGFuY2VvZiBBcnJheSAmJiBleHBlY3RlZFZhbHVlIGluc3RhbmNlb2YgQXJyYXkpXG4gICAgICBleHBlY3RBcnJheShhY3R1YWxWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSk7XG4gICAgZWxzZSBpZiAoYWN0dWFsVmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgJiYgZXhwZWN0ZWRWYWx1ZSBpbnN0YW5jZW9mIE9iamVjdClcbiAgICAgIGV4cGVjdE9iamVjdChhY3R1YWxWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSk7XG4gICAgZWxzZSBpZiAoTnVtYmVyLmlzRmluaXRlKGFjdHVhbFZhbHVlKSAmJiBOdW1iZXIuaXNGaW5pdGUoZXhwZWN0ZWRWYWx1ZSkpXG4gICAgICBleHBlY3RGbG9hdChhY3R1YWxWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSk7XG4gICAgZWxzZSBpZiAoYWN0dWFsVmFsdWUgIT0gZXhwZWN0ZWRWYWx1ZSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgKCR7ZXhwZWN0ZWRWYWx1ZX0pIGZvciBrZXkgJyR7ZXhwZWN0ZWRLZXl9JywgZ290ICgke2FjdHVhbFZhbHVlfSlgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0QXJyYXkoYWN0dWFsOiBBcnJheUxpa2U8YW55PiwgZXhwZWN0ZWQ6IEFycmF5TGlrZTxhbnk+KSB7XG4gIGNvbnN0IGFjdHVhbExlbmd0aCA9IGFjdHVhbC5sZW5ndGg7XG4gIGNvbnN0IGV4cGVjdGVkTGVuZ3RoID0gZXhwZWN0ZWQubGVuZ3RoO1xuXG4gIGlmIChhY3R1YWxMZW5ndGggIT0gZXhwZWN0ZWRMZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5cyBhcmUgb2YgZGlmZmVyZW50IGxlbmd0aDogYWN0dWFsIGFycmF5IGxlbmd0aCBpcyAke2FjdHVhbExlbmd0aH0gYCArXG4gICAgICBgYW5kIGV4cGVjdGVkIGFycmF5IGxlbmd0aCBpcyAke2V4cGVjdGVkTGVuZ3RofWApO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3R1YWxMZW5ndGg7IGkrKykge1xuICAgIGlmIChhY3R1YWxbaV0gaW5zdGFuY2VvZiBBcnJheSAmJiBleHBlY3RlZFtpXSBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgZXhwZWN0QXJyYXkoYWN0dWFsW2ldLCBleHBlY3RlZFtpXSk7XG4gICAgZWxzZSBpZiAoYWN0dWFsW2ldIGluc3RhbmNlb2YgT2JqZWN0ICYmIGV4cGVjdGVkW2ldIGluc3RhbmNlb2YgT2JqZWN0KVxuICAgICAgZXhwZWN0T2JqZWN0KGFjdHVhbFtpXSwgZXhwZWN0ZWRbaV0pO1xuICAgIGVsc2UgaWYgKGFjdHVhbFtpXSAhPSBleHBlY3RlZFtpXSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtleHBlY3RlZFtpXX0gYXQgcG9zaXRpb24gJHtpfSwgZ290ICR7YWN0dWFsW2ldfWApO1xuICB9XG59XG5cbi8qIERlZmluZXMgYSB0ZXN0IHN1aXRlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhdGVnb3J5KGNhdGVnb3J5OiBzdHJpbmcsIHRlc3RzOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gIGN1cnJlbnRDYXRlZ29yeSA9IGNhdGVnb3J5O1xuICB0ZXN0cygpO1xufVxuXG4vKiBEZWZpbmVzIGEgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYmVmb3JlIHRoZSB0ZXN0cyBpbiB0aGlzIGNhdGVnb3J5IGFyZSBleGVjdXRlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZWZvcmUoYmVmb3JlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogdm9pZCB7XG4gIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID09IHVuZGVmaW5lZClcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID0ge307XG4gIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0uYmVmb3JlID0gYmVmb3JlO1xufVxuXG4vKiBEZWZpbmVzIGEgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIHRlc3RzIGluIHRoaXMgY2F0ZWdvcnkgYXJlIGV4ZWN1dGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFmdGVyKGFmdGVyOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogdm9pZCB7XG4gIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID09IHVuZGVmaW5lZClcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID0ge307XG4gIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0uYWZ0ZXIgPSBhZnRlcjtcbn1cblxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuVGVzdHMob3B0aW9ucz86IHsgY2F0ZWdvcnk/OiBzdHJpbmcsIHRlc3Q/OiBzdHJpbmcsIHRlc3RDb250ZXh0PzogVGVzdENvbnRleHQgfSkge1xuICBjb25zdCByZXN1bHRzOiB7IGNhdGVnb3J5Pzogc3RyaW5nLCBuYW1lPzogc3RyaW5nLCBzdWNjZXNzOiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgIHJlc3VsdDogc3RyaW5nLCBtczogbnVtYmVyLCBza2lwcGVkOiBib29sZWFuIH1bXSA9IFtdO1xuICBjb25zdCBwYWNrYWdlTmFtZSA9IGdyb2suZnVuY3Rpb25zLmdldEN1cnJlbnRDYWxsKCk/LmZ1bmM/LnBhY2thZ2U7XG4gIGNvbnNvbGUubG9nKGBSdW5uaW5nIHRlc3RzYCk7XG4gIG9wdGlvbnMgPz89IHt9O1xuICBvcHRpb25zIS50ZXN0Q29udGV4dCA/Pz0gbmV3IFRlc3RDb250ZXh0KCk7XG4gIGdyb2suc2hlbGwubGFzdEVycm9yID0gJyc7XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRlc3RzKSkge1xuICAgIGlmIChvcHRpb25zPy5jYXRlZ29yeSAhPSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICgha2V5LnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChvcHRpb25zPy5jYXRlZ29yeS50b0xvd2VyQ2FzZSgpKSlcbiAgICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKGBTdGFydGVkICR7a2V5fSBjYXRlZ29yeWApO1xuICAgIHRyeSB7XG4gICAgICBpZiAodmFsdWUuYmVmb3JlKVxuICAgICAgICBhd2FpdCB2YWx1ZS5iZWZvcmUoKTtcbiAgICB9IGNhdGNoICh4OiBhbnkpIHtcbiAgICAgIHZhbHVlLmJlZm9yZVN0YXR1cyA9IHgudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgY29uc3QgdCA9IHZhbHVlLnRlc3RzID8/IFtdO1xuICAgIGNvbnN0IHJlcyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdC5sZW5ndGg7IGkrKylcbiAgICAgIHJlcy5wdXNoKGF3YWl0IGV4ZWNUZXN0KHRbaV0sIG9wdGlvbnM/LnRlc3QpKTtcblxuICAgIGNvbnN0IGRhdGEgPSAoYXdhaXQgUHJvbWlzZS5hbGwocmVzKSkuZmlsdGVyKChkKSA9PiBkLnJlc3VsdCAhPSAnc2tpcHBlZCcpO1xuICAgIHRyeSB7XG4gICAgICBpZiAodmFsdWUuYWZ0ZXIpXG4gICAgICAgIGF3YWl0IHZhbHVlLmFmdGVyKCk7XG4gICAgfSBjYXRjaCAoeDogYW55KSB7XG4gICAgICB2YWx1ZS5hZnRlclN0YXR1cyA9IHgudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlLmFmdGVyU3RhdHVzKVxuICAgICAgZGF0YS5wdXNoKHtjYXRlZ29yeToga2V5LCBuYW1lOiAnaW5pdCcsIHJlc3VsdDogdmFsdWUuYWZ0ZXJTdGF0dXMsIHN1Y2Nlc3M6IGZhbHNlLCBtczogMCwgc2tpcHBlZDogZmFsc2V9KTtcbiAgICBpZiAodmFsdWUuYmVmb3JlU3RhdHVzKVxuICAgICAgZGF0YS5wdXNoKHtjYXRlZ29yeToga2V5LCBuYW1lOiAnaW5pdCcsIHJlc3VsdDogdmFsdWUuYmVmb3JlU3RhdHVzLCBzdWNjZXNzOiBmYWxzZSwgbXM6IDAsIHNraXBwZWQ6IGZhbHNlfSk7XG4gICAgcmVzdWx0cy5wdXNoKC4uLmRhdGEpO1xuICB9XG4gIGlmIChvcHRpb25zLnRlc3RDb250ZXh0LmNhdGNoVW5oYW5kbGVkKSB7XG4gICAgYXdhaXQgZGVsYXkoMTAwMCk7XG4gICAgaWYgKGdyb2suc2hlbGwubGFzdEVycm9yLmxlbmd0aCA+IDApIHtcbiAgICAgIHJlc3VsdHMucHVzaCh7XG4gICAgICAgIGNhdGVnb3J5OiAnVW5oYW5kbGVkIGV4Y2VwdGlvbnMnLFxuICAgICAgICBuYW1lOiAnZXhjZXB0aW9ucycsXG4gICAgICAgIHJlc3VsdDogZ3Jvay5zaGVsbC5sYXN0RXJyb3IsIHN1Y2Nlc3M6IGZhbHNlLCBtczogMCwgc2tpcHBlZDogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBpZiAob3B0aW9ucy50ZXN0Q29udGV4dC5yZXBvcnQpIHtcbiAgICBjb25zdCBsb2dnZXIgPSBuZXcgREcuTG9nZ2VyKCk7XG4gICAgY29uc3Qgc3VjY2Vzc2Z1bCA9IHJlc3VsdHMuZmlsdGVyKChyKSA9PiByLnN1Y2Nlc3MpLmxlbmd0aDtcbiAgICBjb25zdCBza2lwcGVkID0gcmVzdWx0cy5maWx0ZXIoKHIpID0+IHIuc2tpcHBlZCkubGVuZ3RoO1xuICAgIGNvbnN0IGZhaWxlZCA9IHJlc3VsdHMuZmlsdGVyKChyKSA9PiAhci5zdWNjZXNzKTtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9ICdQYWNrYWdlIEBwYWNrYWdlIHRlc3RlZDogQHN1Y2Nlc3NmdWwgc3VjY2Vzc2Z1bCwgQHNraXBwZWQgc2tpcHBlZCwgQGZhaWxlZCBmYWlsZWQgdGVzdHMnO1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIHN1Y2Nlc3NmdWw6IHN1Y2Nlc3NmdWwsXG4gICAgICBza2lwcGVkOiBza2lwcGVkLFxuICAgICAgZmFpbGVkOiBmYWlsZWQubGVuZ3RoLFxuICAgICAgcGFja2FnZTogcGFja2FnZU5hbWVcbiAgICB9O1xuICAgIGZvciAoY29uc3QgciBvZiBmYWlsZWQpIE9iamVjdC5hc3NpZ24ocGFyYW1zLCB7W2Ake3IuY2F0ZWdvcnl9IHwgJHtyLm5hbWV9YF06IHIucmVzdWx0fSk7XG4gICAgbG9nZ2VyLmxvZyhkZXNjcmlwdGlvbiwgcGFyYW1zLCAncGFja2FnZS10ZXN0ZWQnKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY1Rlc3QodDogVGVzdCwgcHJlZGljYXRlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgbGV0IHI6IHsgY2F0ZWdvcnk/OiBzdHJpbmcsIG5hbWU/OiBzdHJpbmcsIHN1Y2Nlc3M6IGJvb2xlYW4sIHJlc3VsdDogc3RyaW5nLCBtczogbnVtYmVyLCBza2lwcGVkOiBib29sZWFuIH07XG4gIGNvbnN0IGZpbHRlciA9IHByZWRpY2F0ZSAhPSB1bmRlZmluZWQgJiYgKCF0Lm5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHByZWRpY2F0ZS50b0xvd2VyQ2FzZSgpKSk7XG4gIGNvbnN0IHNraXAgPSB0Lm9wdGlvbnM/LnNraXBSZWFzb24gfHwgZmlsdGVyO1xuICBjb25zdCBza2lwUmVhc29uID0gZmlsdGVyID8gJ3NraXBwZWQnIDogdC5vcHRpb25zPy5za2lwUmVhc29uO1xuICBpZiAoIXNraXApXG4gICAgY29uc29sZS5sb2coYFN0YXJ0ZWQgJHt0LmNhdGVnb3J5fSAke3QubmFtZX1gKTtcbiAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSgpO1xuXG4gIHRyeSB7XG4gICAgaWYgKHNraXApXG4gICAgICByID0ge3N1Y2Nlc3M6IHRydWUsIHJlc3VsdDogc2tpcFJlYXNvbiEsIG1zOiAwLCBza2lwcGVkOiB0cnVlfTtcbiAgICBlbHNlXG4gICAgICByID0ge3N1Y2Nlc3M6IHRydWUsIHJlc3VsdDogYXdhaXQgdC50ZXN0KCkgPz8gJ09LJywgbXM6IDAsIHNraXBwZWQ6IGZhbHNlfTtcbiAgfSBjYXRjaCAoeDogYW55KSB7XG4gICAgciA9IHtzdWNjZXNzOiBmYWxzZSwgcmVzdWx0OiB4LnRvU3RyaW5nKCksIG1zOiAwLCBza2lwcGVkOiBmYWxzZX07XG4gIH1cbiAgY29uc3Qgc3RvcCA9IG5ldyBEYXRlKCk7XG4gIC8vIEB0cy1pZ25vcmVcbiAgci5tcyA9IHN0b3AgLSBzdGFydDtcbiAgaWYgKCFza2lwKVxuICAgIGNvbnNvbGUubG9nKGBGaW5pc2hlZCAke3QuY2F0ZWdvcnl9ICR7dC5uYW1lfSBmb3IgJHtyLm1zfSBtc2ApO1xuXG4gIHIuY2F0ZWdvcnkgPSB0LmNhdGVnb3J5O1xuICByLm5hbWUgPSB0Lm5hbWU7XG4gIHJldHVybiByO1xufVxuXG4vKiBXYWl0cyBbbXNdIG1pbGxpc2Vjb25kcyAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlbGF5KG1zOiBudW1iZXIpIHtcbiAgYXdhaXQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgbXMpKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGF3YWl0Q2hlY2soY2hlY2tIYW5kbGVyOiAoKSA9PiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcHJvbWlzZS1yZWplY3QtZXJyb3JzXG4gICAgICByZWplY3QoJ1RpbWVvdXQgZXhjZWVkZWQnKTtcbiAgICB9LCA1MDApO1xuICAgIGNvbnN0IGludGVydmFsOiBUaW1lb3V0ID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgaWYgKGNoZWNrSGFuZGxlcigpKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfSwgNTApO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGlhbG9nUHJlc2VudChkaWFsb2dUaXRsZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgREcuRGlhbG9nLmdldE9wZW5EaWFsb2dzKCkubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoREcuRGlhbG9nLmdldE9wZW5EaWFsb2dzKClbaV0udGl0bGUgPT0gZGlhbG9nVGl0bGUpXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG4iXX0=