@datagrok-libraries/utils 2.2.2 → 2.3.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 +6 -5
- package/src/function-view.d.ts +0 -50
- package/src/function-view.d.ts.map +1 -1
- package/src/function-view.js +1 -155
- package/src/shared-components/history-panel.d.ts +22 -4
- package/src/shared-components/history-panel.d.ts.map +1 -1
- package/src/shared-components/history-panel.js +85 -10
- package/src/shared-components/type-ahead.d.ts +5 -0
- package/src/shared-components/type-ahead.d.ts.map +1 -0
- package/src/shared-components/type-ahead.js +28 -0
- package/src/test.d.ts +1 -0
- package/src/test.d.ts.map +1 -1
- package/src/test.js +39 -3
package/package.json
CHANGED
|
@@ -4,15 +4,16 @@
|
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
6
|
"fullName": "Utils",
|
|
7
|
-
"version": "2.
|
|
7
|
+
"version": "2.3.1",
|
|
8
8
|
"description": "Common utilities",
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"fast-sha256": "^1.3.0",
|
|
11
10
|
"cash-dom": "^8.1.1",
|
|
12
11
|
"datagrok-api": "^1.8.1",
|
|
13
12
|
"exceljs": "^4.3.0",
|
|
13
|
+
"fast-sha256": "^1.3.0",
|
|
14
14
|
"html2canvas": "^1.4.1",
|
|
15
15
|
"rxjs": "^6.5.5",
|
|
16
|
+
"typeahead-standalone": "^4.14.1",
|
|
16
17
|
"wu": "latest"
|
|
17
18
|
},
|
|
18
19
|
"devDependencies": {
|
|
@@ -34,7 +35,7 @@
|
|
|
34
35
|
"lint-fix": "eslint \"./src/**/*.ts\" --fix"
|
|
35
36
|
},
|
|
36
37
|
"sources": [
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
"common/html2canvas.min.js",
|
|
39
|
+
"common/exceljs.min.js"
|
|
40
|
+
]
|
|
40
41
|
}
|
package/src/function-view.d.ts
CHANGED
|
@@ -6,20 +6,6 @@ import * as DG from 'datagrok-api/dg';
|
|
|
6
6
|
*/
|
|
7
7
|
export declare const passErrorToShell: () => (target: any, memberName: string, descriptor: PropertyDescriptor) => void;
|
|
8
8
|
export declare const INTERACTIVE_CSS_CLASS = "cv-interactive";
|
|
9
|
-
export declare const defaultUsersIds: {
|
|
10
|
-
Test: string;
|
|
11
|
-
Admin: string;
|
|
12
|
-
System: string;
|
|
13
|
-
};
|
|
14
|
-
export declare const defaultGroupsIds: {
|
|
15
|
-
'All users': string;
|
|
16
|
-
Developers: string;
|
|
17
|
-
'Need to create': string;
|
|
18
|
-
Test: string;
|
|
19
|
-
Admin: string;
|
|
20
|
-
System: string;
|
|
21
|
-
Administrators: string;
|
|
22
|
-
};
|
|
23
9
|
export declare abstract class FunctionView extends DG.ViewBase {
|
|
24
10
|
protected _funcCall?: DG.FuncCall;
|
|
25
11
|
protected _lastCall?: DG.FuncCall;
|
|
@@ -126,42 +112,6 @@ export declare abstract class FunctionView extends DG.ViewBase {
|
|
|
126
112
|
* @stability Stable
|
|
127
113
|
*/
|
|
128
114
|
buildRibbonMenu(): void;
|
|
129
|
-
onBeforeRemoveRunFromFavorites(callToFavorite: DG.FuncCall): Promise<void>;
|
|
130
|
-
onAfterRemoveRunFromFavorites(favoriteCall: DG.FuncCall): Promise<void>;
|
|
131
|
-
/**
|
|
132
|
-
* Saves the run as usual run
|
|
133
|
-
* @param callToUnfavorite FuncCall object to remove from favorites
|
|
134
|
-
* @returns Saved FuncCall
|
|
135
|
-
* @stability Experimental
|
|
136
|
-
*/
|
|
137
|
-
removeRunFromFavorites(callToUnfavorite: DG.FuncCall): Promise<DG.FuncCall>;
|
|
138
|
-
onBeforeAddingToFavorites(callToAddToFavorites: DG.FuncCall): Promise<void>;
|
|
139
|
-
onAfterAddingToFavorites(favoriteCall: DG.FuncCall): Promise<void>;
|
|
140
|
-
/**
|
|
141
|
-
* Saves the run as favorite
|
|
142
|
-
* @param callToFavorite FuncCall object to add to favorites
|
|
143
|
-
* @returns Saved FuncCall
|
|
144
|
-
* @stability Experimental
|
|
145
|
-
*/
|
|
146
|
-
addRunToFavorites(callToFavorite: DG.FuncCall): Promise<DG.FuncCall>;
|
|
147
|
-
onBeforeRemoveRunFromShared(callToShare: DG.FuncCall): Promise<void>;
|
|
148
|
-
onAfterRemoveRunFromSahred(sharedCall: DG.FuncCall): Promise<void>;
|
|
149
|
-
/**
|
|
150
|
-
* Removes run from shared
|
|
151
|
-
* @param callToUnshare FuncCall object to remove from shared
|
|
152
|
-
* @returns Saved FuncCall
|
|
153
|
-
* @stability Experimental
|
|
154
|
-
*/
|
|
155
|
-
removeRunFromShared(callToUnshare: DG.FuncCall): Promise<DG.FuncCall>;
|
|
156
|
-
onBeforeAddingToShared(callToAddToShared: DG.FuncCall): Promise<void>;
|
|
157
|
-
onAfterAddingToShared(sharedCall: DG.FuncCall): Promise<void>;
|
|
158
|
-
/**
|
|
159
|
-
* Saves the run as shared
|
|
160
|
-
* @param callToShare FuncCall object to add to shared
|
|
161
|
-
* @returns Saved FuncCall
|
|
162
|
-
* @stability Experimental
|
|
163
|
-
*/
|
|
164
|
-
addRunToShared(callToShare: DG.FuncCall): Promise<DG.FuncCall>;
|
|
165
115
|
/**
|
|
166
116
|
* Called before saving the FUncCall results to the historical results, returns the saved call. See also {@link saveRun}.
|
|
167
117
|
* @param callToSave FuncCall object to save
|
|
@@ -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
|
@@ -12,7 +12,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
12
12
|
import * as grok from 'datagrok-api/grok';
|
|
13
13
|
import * as ui from 'datagrok-api/ui';
|
|
14
14
|
import * as DG from 'datagrok-api/dg';
|
|
15
|
-
import wu from 'wu';
|
|
16
15
|
import { historyUtils } from './history-utils';
|
|
17
16
|
import { UiUtils } from './shared-components/ui-utils';
|
|
18
17
|
/**
|
|
@@ -37,20 +36,6 @@ export const passErrorToShell = () => {
|
|
|
37
36
|
};
|
|
38
37
|
};
|
|
39
38
|
export const INTERACTIVE_CSS_CLASS = 'cv-interactive';
|
|
40
|
-
export const defaultUsersIds = {
|
|
41
|
-
'Test': 'ca1e672e-e3be-40e0-b79b-d2c68e68d380',
|
|
42
|
-
'Admin': '878c42b0-9a50-11e6-c537-6bf8e9ab02ee',
|
|
43
|
-
'System': '3e32c5fa-ac9c-4d39-8b4b-4db3e576b3c3',
|
|
44
|
-
};
|
|
45
|
-
export const defaultGroupsIds = {
|
|
46
|
-
'All users': 'a4b45840-9a50-11e6-9cc9-8546b8bf62e6',
|
|
47
|
-
'Developers': 'ba9cd191-9a50-11e6-9cc9-910bf827f0ab',
|
|
48
|
-
'Need to create': '00000000-0000-0000-0000-000000000000',
|
|
49
|
-
'Test': 'ca1e672e-e3be-40e0-b79b-8546b8bf62e6',
|
|
50
|
-
'Admin': 'a4b45840-9a50-11e6-c537-6bf8e9ab02ee',
|
|
51
|
-
'System': 'a4b45840-ac9c-4d39-8b4b-4db3e576b3c3',
|
|
52
|
-
'Administrators': '1ab8b38d-9c4e-4b1e-81c3-ae2bde3e12c5',
|
|
53
|
-
};
|
|
54
39
|
export class FunctionView extends DG.ViewBase {
|
|
55
40
|
constructor(funcCall) {
|
|
56
41
|
super();
|
|
@@ -165,44 +150,6 @@ export class FunctionView extends DG.ViewBase {
|
|
|
165
150
|
buildHistoryBlock() {
|
|
166
151
|
const newHistoryBlock = UiUtils.historyPanel(this.func);
|
|
167
152
|
newHistoryBlock.onRunChosen.subscribe((id) => __awaiter(this, void 0, void 0, function* () { return this.linkFunccall(yield this.loadRun(id)); }));
|
|
168
|
-
newHistoryBlock.beforeRunAddToFavorites.subscribe((funcCall) => __awaiter(this, void 0, void 0, function* () {
|
|
169
|
-
ui.setUpdateIndicator(newHistoryBlock.historyTab, true);
|
|
170
|
-
ui.setUpdateIndicator(newHistoryBlock.favTab, true);
|
|
171
|
-
funcCall = yield this.addRunToFavorites(funcCall);
|
|
172
|
-
newHistoryBlock.afterRunAddToFavorites.next(funcCall);
|
|
173
|
-
ui.setUpdateIndicator(newHistoryBlock.historyTab, false);
|
|
174
|
-
ui.setUpdateIndicator(newHistoryBlock.favTab, false);
|
|
175
|
-
}));
|
|
176
|
-
newHistoryBlock.beforeRunAddToShared.subscribe((funcCall) => __awaiter(this, void 0, void 0, function* () {
|
|
177
|
-
ui.setUpdateIndicator(newHistoryBlock.historyTab, true);
|
|
178
|
-
ui.setUpdateIndicator(newHistoryBlock.sharedTab, true);
|
|
179
|
-
funcCall = yield this.addRunToShared(funcCall);
|
|
180
|
-
newHistoryBlock.afterRunAddToShared.next(funcCall);
|
|
181
|
-
ui.setUpdateIndicator(newHistoryBlock.sharedTab, false);
|
|
182
|
-
ui.setUpdateIndicator(newHistoryBlock.historyTab, false);
|
|
183
|
-
}));
|
|
184
|
-
newHistoryBlock.beforeRunDeleted.subscribe((id) => __awaiter(this, void 0, void 0, function* () {
|
|
185
|
-
ui.setUpdateIndicator(newHistoryBlock.tabs.root, true);
|
|
186
|
-
yield this.deleteRun(yield historyUtils.loadRun(id, true));
|
|
187
|
-
newHistoryBlock.afterRunDeleted.next(id);
|
|
188
|
-
ui.setUpdateIndicator(newHistoryBlock.tabs.root, false);
|
|
189
|
-
}));
|
|
190
|
-
newHistoryBlock.beforeRunRemoveFromFavorites.subscribe((id) => __awaiter(this, void 0, void 0, function* () {
|
|
191
|
-
ui.setUpdateIndicator(newHistoryBlock.historyTab, true);
|
|
192
|
-
ui.setUpdateIndicator(newHistoryBlock.favTab, true);
|
|
193
|
-
yield this.removeRunFromFavorites(yield historyUtils.loadRun(id, true));
|
|
194
|
-
newHistoryBlock.afterRunRemoveFromFavorites.next(id);
|
|
195
|
-
ui.setUpdateIndicator(newHistoryBlock.favTab, false);
|
|
196
|
-
ui.setUpdateIndicator(newHistoryBlock.historyTab, false);
|
|
197
|
-
}));
|
|
198
|
-
newHistoryBlock.beforeRunRemoveFromShared.subscribe((id) => __awaiter(this, void 0, void 0, function* () {
|
|
199
|
-
ui.setUpdateIndicator(newHistoryBlock.historyTab, true);
|
|
200
|
-
ui.setUpdateIndicator(newHistoryBlock.sharedTab, true);
|
|
201
|
-
yield this.removeRunFromShared(yield historyUtils.loadRun(id, true));
|
|
202
|
-
newHistoryBlock.afterRunRemoveFromShared.next(id);
|
|
203
|
-
ui.setUpdateIndicator(newHistoryBlock.historyTab, false);
|
|
204
|
-
ui.setUpdateIndicator(newHistoryBlock.sharedTab, false);
|
|
205
|
-
}));
|
|
206
153
|
ui.empty(this.historyRoot);
|
|
207
154
|
this.historyRoot.style.removeProperty('justify-content');
|
|
208
155
|
this.historyRoot.style.width = '100%';
|
|
@@ -244,107 +191,6 @@ export class FunctionView extends DG.ViewBase {
|
|
|
244
191
|
*/
|
|
245
192
|
buildRibbonMenu() {
|
|
246
193
|
}
|
|
247
|
-
onBeforeRemoveRunFromFavorites(callToFavorite) {
|
|
248
|
-
return __awaiter(this, void 0, void 0, function* () { });
|
|
249
|
-
}
|
|
250
|
-
onAfterRemoveRunFromFavorites(favoriteCall) {
|
|
251
|
-
return __awaiter(this, void 0, void 0, function* () { });
|
|
252
|
-
}
|
|
253
|
-
/**
|
|
254
|
-
* Saves the run as usual run
|
|
255
|
-
* @param callToUnfavorite FuncCall object to remove from favorites
|
|
256
|
-
* @returns Saved FuncCall
|
|
257
|
-
* @stability Experimental
|
|
258
|
-
*/
|
|
259
|
-
removeRunFromFavorites(callToUnfavorite) {
|
|
260
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
261
|
-
callToUnfavorite.options['title'] = null;
|
|
262
|
-
callToUnfavorite.options['description'] = null;
|
|
263
|
-
callToUnfavorite.options['isFavorite'] = false;
|
|
264
|
-
yield this.onBeforeRemoveRunFromFavorites(callToUnfavorite);
|
|
265
|
-
const favoriteSave = yield grok.dapi.functions.calls.allPackageVersions().save(callToUnfavorite);
|
|
266
|
-
yield this.onAfterRemoveRunFromFavorites(favoriteSave);
|
|
267
|
-
return favoriteSave;
|
|
268
|
-
});
|
|
269
|
-
}
|
|
270
|
-
onBeforeAddingToFavorites(callToAddToFavorites) {
|
|
271
|
-
return __awaiter(this, void 0, void 0, function* () { });
|
|
272
|
-
}
|
|
273
|
-
onAfterAddingToFavorites(favoriteCall) {
|
|
274
|
-
return __awaiter(this, void 0, void 0, function* () { });
|
|
275
|
-
}
|
|
276
|
-
/**
|
|
277
|
-
* Saves the run as favorite
|
|
278
|
-
* @param callToFavorite FuncCall object to add to favorites
|
|
279
|
-
* @returns Saved FuncCall
|
|
280
|
-
* @stability Experimental
|
|
281
|
-
*/
|
|
282
|
-
addRunToFavorites(callToFavorite) {
|
|
283
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
284
|
-
callToFavorite.options['isFavorite'] = true;
|
|
285
|
-
yield this.onBeforeAddingToFavorites(callToFavorite);
|
|
286
|
-
const savedFavorite = yield grok.dapi.functions.calls.allPackageVersions().save(callToFavorite);
|
|
287
|
-
yield this.onAfterAddingToFavorites(savedFavorite);
|
|
288
|
-
return savedFavorite;
|
|
289
|
-
});
|
|
290
|
-
}
|
|
291
|
-
onBeforeRemoveRunFromShared(callToShare) {
|
|
292
|
-
return __awaiter(this, void 0, void 0, function* () { });
|
|
293
|
-
}
|
|
294
|
-
onAfterRemoveRunFromSahred(sharedCall) {
|
|
295
|
-
return __awaiter(this, void 0, void 0, function* () { });
|
|
296
|
-
}
|
|
297
|
-
/**
|
|
298
|
-
* Removes run from shared
|
|
299
|
-
* @param callToUnshare FuncCall object to remove from shared
|
|
300
|
-
* @returns Saved FuncCall
|
|
301
|
-
* @stability Experimental
|
|
302
|
-
*/
|
|
303
|
-
removeRunFromShared(callToUnshare) {
|
|
304
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
305
|
-
callToUnshare.options['title'] = null;
|
|
306
|
-
callToUnshare.options['description'] = null;
|
|
307
|
-
callToUnshare.options['isShared'] = false;
|
|
308
|
-
yield this.onBeforeRemoveRunFromFavorites(callToUnshare);
|
|
309
|
-
const savedShared = yield grok.dapi.functions.calls.allPackageVersions().save(callToUnshare);
|
|
310
|
-
yield this.onAfterRemoveRunFromFavorites(savedShared);
|
|
311
|
-
return savedShared;
|
|
312
|
-
});
|
|
313
|
-
}
|
|
314
|
-
onBeforeAddingToShared(callToAddToShared) {
|
|
315
|
-
return __awaiter(this, void 0, void 0, function* () { });
|
|
316
|
-
}
|
|
317
|
-
onAfterAddingToShared(sharedCall) {
|
|
318
|
-
return __awaiter(this, void 0, void 0, function* () { });
|
|
319
|
-
}
|
|
320
|
-
/**
|
|
321
|
-
* Saves the run as shared
|
|
322
|
-
* @param callToShare FuncCall object to add to shared
|
|
323
|
-
* @returns Saved FuncCall
|
|
324
|
-
* @stability Experimental
|
|
325
|
-
*/
|
|
326
|
-
addRunToShared(callToShare) {
|
|
327
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
328
|
-
callToShare.options['isShared'] = true;
|
|
329
|
-
yield this.onBeforeAddingToShared(callToShare);
|
|
330
|
-
const allGroup = yield grok.dapi.groups.find(defaultGroupsIds['All users']);
|
|
331
|
-
const dfOutputs = wu(callToShare.outputParams.values())
|
|
332
|
-
.filter((output) => output.property.propertyType === DG.TYPE.DATA_FRAME);
|
|
333
|
-
for (const output of dfOutputs) {
|
|
334
|
-
const df = callToShare.outputs[output.name];
|
|
335
|
-
yield grok.dapi.permissions.grant(df.getTableInfo(), allGroup, false);
|
|
336
|
-
}
|
|
337
|
-
const dfInputs = wu(callToShare.inputParams.values())
|
|
338
|
-
.filter((input) => input.property.propertyType === DG.TYPE.DATA_FRAME);
|
|
339
|
-
for (const input of dfInputs) {
|
|
340
|
-
const df = callToShare.inputs[input.name];
|
|
341
|
-
yield grok.dapi.permissions.grant(df.getTableInfo(), allGroup, false);
|
|
342
|
-
}
|
|
343
|
-
const savedShared = yield grok.dapi.functions.calls.allPackageVersions().save(callToShare);
|
|
344
|
-
yield this.onAfterAddingToShared(savedShared);
|
|
345
|
-
return savedShared;
|
|
346
|
-
});
|
|
347
|
-
}
|
|
348
194
|
/**
|
|
349
195
|
* Called before saving the FUncCall results to the historical results, returns the saved call. See also {@link saveRun}.
|
|
350
196
|
* @param callToSave FuncCall object to save
|
|
@@ -470,4 +316,4 @@ export class FunctionView extends DG.ViewBase {
|
|
|
470
316
|
});
|
|
471
317
|
}
|
|
472
318
|
}
|
|
473
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tdmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImZ1bmN0aW9uLXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsZ0NBQWdDO0FBQ2hDLDRCQUE0QjtBQUM1QixPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUVyRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxFQUFFO0lBQ25DLE9BQU8sQ0FBQyxNQUFXLEVBQUUsVUFBa0IsRUFBRSxVQUE4QixFQUFFLEVBQUU7UUFDekUsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQztRQUVsQyxVQUFVLENBQUMsS0FBSyxHQUFHLFVBQWUsR0FBRyxJQUFXOztnQkFDOUMsSUFBSTtvQkFDRixPQUFPLE1BQU0sUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztpQkFDM0M7Z0JBQUMsT0FBTyxHQUFRLEVBQUU7b0JBQ2pCLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFFLEdBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDekMsTUFBTSxHQUFHLENBQUM7aUJBQ1g7WUFDSCxDQUFDO1NBQUEsQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLGdCQUFnQixDQUFDO0FBRXRELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRztJQUM3QixNQUFNLEVB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QUFHOztZQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7WUFFbEYsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN0QyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN0QixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyw2QkFBNkI7WUFDekQsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUVyQyxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEQsQ0FBQztLQUFBO0NBaUJGIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgdmFsaWQtanNkb2MgKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgd3UgZnJvbSAnd3UnO1xuaW1wb3J0IHtoaXN0b3J5VXRpbHN9IGZyb20gJy4vaGlzdG9yeS11dGlscyc7XG5pbXBvcnQge1VpVXRpbHN9IGZyb20gJy4vc2hhcmVkLWNvbXBvbmVudHMvdWktdXRpbHMnO1xuXG4vKipcbiAgICogRGVjb3JhdG9yIHRvIHBhc3MgYWxsIHRocm93biBlcnJvcnMgdG8gZ3Jvay5zaGVsbC5lcnJvclxuICAgKiBAcmV0dXJucyBUaGUgYWN0dWFsIGZ1bmNjYWxsIGFzc29jaWF0ZWQgd2l0aCB0aGUgdmlld1xuICAgKiBAc3RhYmlsaXR5IEV4cGVyaW1lbnRhbFxuICovXG5leHBvcnQgY29uc3QgcGFzc0Vycm9yVG9TaGVsbCA9ICgpID0+IHtcbiAgcmV0dXJuICh0YXJnZXQ6IGFueSwgbWVtYmVyTmFtZTogc3RyaW5nLCBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpID0+IHtcbiAgICBjb25zdCBvcmlnaW5hbCA9IGRlc2NyaXB0b3IudmFsdWU7XG5cbiAgICBkZXNjcmlwdG9yLnZhbHVlID0gYXN5bmMgZnVuY3Rpb24oLi4uYXJnczogYW55W10pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBvcmlnaW5hbC5jYWxsKHRoaXMsIC4uLmFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgZ3Jvay5zaGVsbC5lcnJvcigoZXJyIGFzIEVycm9yKS5tZXNzYWdlKTtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH07XG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgSU5URVJBQ1RJVkVfQ1NTX0NMQVNTID0gJ2N2LWludGVyYWN0aXZlJztcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRVc2Vyc0lkcyA9IHtcbiAgJ1Rlc3QnOiAnY2ExZTY3MmUtZTNiZS00MGUwLWI3OWItZDJjNjhlNjhkMzgwJyxcbiAgJ0FkbWluJzogJzg3OGM0MmIwLTlhNTAtMTFlNi1jNTM3LTZiZjhlOWFiMDJlZScsXG4gICdTeXN0ZW0nOiAnM2UzMmM1ZmEtYWM5Yy00ZDM5LThiNGItNGRiM2U1NzZiM2MzJyxcbn07XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0R3JvdXBzSWRzID0ge1xuICAnQWxsIHVzZXJzJzogJ2E0YjQ1ODQwLTlhNTAtMTFlNi05Y2M5LTg1NDZiOGJmNjJlNicsXG4gICdEZXZlbG9wZXJzJzogJ2JhOWNkMTkxLTlhNTAtMTFlNi05Y2M5LTkxMGJmODI3ZjBhYicsXG4gICdOZWVkIHRvIGNyZWF0ZSc6ICcwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAnLFxuICAnVGVzdCc6ICdjYTFlNjcyZS1lM2JlLTQwZTAtYjc5Yi04NTQ2YjhiZjYyZTYnLFxuICAnQWRtaW4nOiAnYTRiNDU4NDAtOWE1MC0xMWU2LWM1MzctNmJmOGU5YWIwMmVlJyxcbiAgJ1N5c3RlbSc6ICdhNGI0NTg0MC1hYzljLTRkMzktOGI0Yi00ZGIzZTU3NmIzYzMnLFxuICAnQWRtaW5pc3RyYXRvcnMnOiAnMWFiOGIzOGQtOWM0ZS00YjFlLTgxYzMtYWUyYmRlM2UxMmM1Jyxcbn07XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBGdW5jdGlvblZpZXcgZXh0ZW5kcyBERy5WaWV3QmFzZSB7XG4gIHByb3RlY3RlZCBfZnVuY0NhbGw/OiBERy5GdW5jQ2FsbDtcbiAgcHJvdGVjdGVkIF9sYXN0Q2FsbD86IERHLkZ1bmNDYWxsO1xuICBwcm90ZWN0ZWQgX3R5cGU6IHN0cmluZyA9ICdmdW5jdGlvbic7XG5cbiAgY29uc3RydWN0b3IoZnVuY0NhbGw/OiBERy5GdW5jQ2FsbCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5ib3ggPSB0cnVlO1xuXG4gICAgaWYgKCFmdW5jQ2FsbCkgcmV0dXJuO1xuICAgIHRoaXMubmFtZSA9IGZ1bmNDYWxsLmZ1bmMuZnJpZW5kbHlOYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjdXJyZW50IGZ1bmN0aW9uIGNhbGwgb2YgdGhlIHZpZXdcbiAgICogQHJldHVybnMgVGhlIGFjdHVhbCBmdW5jY2FsbCBhc3NvY2lhdGVkIHdpdGggdGhlIHZpZXdcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgZ2V0IGZ1bmNDYWxsKCk6IERHLkZ1bmNDYWxsIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZnVuY0NhbGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IEZ1bmMgb2YgdGhlIHZpZXdcbiAgICogQHJldHVybnMgVGhlIGFjdHVhbCBmdW5jIGFzc29jaWF0ZWQgd2l0aCB0aGUgdmlld1xuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIGdldCBmdW5jKCkge1xuICAgIHJldHVybiB0aGlzLmZ1bmNDYWxsPy5mdW5jO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBkYXRhIG9mIGxhc3QgY2FsbCBvZiBhc3NvY2lhdGVkIGZ1bmN0aW9uXG4gICAqIEByZXR1cm5zIFRoZSBhY3R1YWwgZnVuYyBhc3NvY2lhdGVkIHdpdGggdGhlIHZpZXdcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBnZXQgbGFzdENhbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xhc3RDYWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBkYXRhIG9mIGxhc3QgY2FsbCBvZiBhc3NvY2lhdGVkIGZ1bmN0aW9uXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgc2V0IGxhc3RDYWxsKGxhc3RDYWxsOiBERy5GdW5jQ2FsbCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2xhc3RDYWxsID0gbGFzdENhbGw7XG4gIH1cblxuICAvKipcbiAgICogVmlldyB0eXBlXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGdldCB0eXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3R5cGU7XG4gIH1cblxuICAvKiogRXhwb3J0IG9wdGlvbnMuIENvdWxkIGJlIG92ZXJyaWRlbiBwYXJ0aWFsbHksIHVzaW5nIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgZWFjaCBvcHRpb24uXG4gICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICAqL1xuICBleHBvcnRDb25maWc6IHtcbiAgICAvKiogT3ZlcnJpZGUgdG8gcHJvdmlkZSBjdXN0b20gZXhwb3J0IGxvZ2ljLlxuICAgICAgKlxuICAgICAgKiAgRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB7QGxpbmsgZGVmYXVsdEV4cG9ydH0gaGVhdmlseSByZWxpZXMgb24gdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2Yge0BsaW5rIGJ1aWxkSU99LlxuICAgICAgKiBAcmV0dXJucyBCbG9iIHdpdGggZGF0YSB0byBiZSBleHBvcnRlZCBpbnRvIHRoZSBmaWxlLlxuICAgICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICAgICovXG4gICAgZXhwb3J0OiAoKGZvcm1hdDogc3RyaW5nKSA9PiBQcm9taXNlPEJsb2I+KTtcblxuXG4gICAgLyoqIEZpbGVuYW1lIGZvciBleHBvcnRlZCBmaWxlcy4gT3ZlcnJpZGUgZm9yIGN1c3RvbSBmaWxlbmFtZXMuXG4gICAgICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMge0BsaW5rIGRlZmF1bHRFeHBvcnRGaWxlbmFtZX1cbiAgICAgICogQHBhcmFtIGZvcm1hdCBGb3JtYXQgbmFtZSB0byBiZSBleHBvcnRlZFxuICAgICAgKiBAcmV0dXJucyBUaGUgYWN0dWFsIGZpbGVuYW1lIHRvIGJlIHVzZWQgZm9yIHRoZSBnZW5lcmF0ZWQgZmlsZS5cbiAgICAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAgICAqL1xuICAgIGZpbGVuYW1lOiAoKGZvcm1hdDogc3RyaW5nKSA9PiBzdHJpbmcpO1xuXG4gICAgLyoqIE92ZXJyaWRlIHRvIHByb3ZpZGUgY3VzdG9tIGxpc3Qgb2Ygc3VwcG9ydGVkIGV4cG9ydCBmb3JtYXRzLlxuICAgICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMge0BsaW5rIGRlZmF1bHRTdXBwb3J0ZWRFeHBvcnRGb3JtYXRzfVxuICAgICAqIFRoZXNlIGZvcm1hdHMgYXJlIGF2YWlsYWJsZSB1bmRlciB0aGUgXCJFeHBvcnRcIiBwb3B1cCBvbiB0aGUgcmliYm9uIHBhbmVsLlxuICAgICAqIEByZXR1cm5zIFRoZSBhcnJheSBvZiBmb3JtYXRzIGF2YWlsYWJsZSBmb3IgdGhlIGV4cG9ydC5cbiAgICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICAgICovXG4gICAgc3VwcG9ydGVkRm9ybWF0czogc3RyaW5nW107XG5cbiAgICAvKiogT3ZlcnJpZGUgdG8gcHJvdmlkZSBjdXN0b20gZmlsZSBleHRlbnNpb25zIGZvciBleHBvcnRlZCBmb3JtYXRzLlxuICAgICAgICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyB7QGxpbmsgZGVmYXVsdFN1cHBvcnRlZEV4cG9ydEV4dGVuc2lvbnN9XG4gICAgICAgKiBUaGVzZSBleHRlbnNpb25zIGFyZSB1c2VkIGluIGZpbGVuYW1lcyB7QGxpbmsgZXhwb3J0RmlsZW5hbWV9LlxuICAgICAgICogQHJldHVybnMgVGhlIG1hcHBpbmcgYmV0d2VlbiBzdXBwb3J0ZWQgZXhwb3J0IGZvcm1hdHMgYW5kIHRoZWlyIGV4dGVuc2lvbnMuXG4gICAgICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICAgICAqL1xuICAgIHN1cHBvcnRlZEV4dGVuc2lvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIH0gfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogTGluayBGdW5jQ2FsbCB0byB0aGUgdmlld1xuICAgKiBAcGFyYW0gZnVuY0NhbGwgVGhlIGFjdHVhbCBmdW5jY2FsbCB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIHZpZXdcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgbGlua0Z1bmNjYWxsKGZ1bmNDYWxsOiBERy5GdW5jQ2FsbCkge1xuICAgIGNvbnN0IGlzUHJldmlvdXNIaXN0b3JpY2FsID0gdGhpcy5fZnVuY0NhbGw/Lm9wdGlvbnNbJ2lzSGlzdG9yaWNhbCddO1xuICAgIHRoaXMuX2Z1bmNDYWxsID0gZnVuY0NhbGw7XG5cbiAgICBpZiAoZnVuY0NhbGwub3B0aW9uc1snaXNIaXN0b3JpY2FsJ10pIHtcbiAgICAgIGlmICghaXNQcmV2aW91c0hpc3RvcmljYWwpXG4gICAgICAgIHRoaXMubmFtZSA9IGAke3RoaXMubmFtZX0g4oCUICR7ZnVuY0NhbGwub3B0aW9uc1sndGl0bGUnXSA/PyBuZXcgRGF0ZShmdW5jQ2FsbC5zdGFydGVkLnRvU3RyaW5nKCkpLnRvTG9jYWxlU3RyaW5nKCdlbi11cycsIHttb250aDogJ3Nob3J0JywgZGF5OiAnbnVtZXJpYycsIGhvdXI6ICdudW1lcmljJywgbWludXRlOiAnbnVtZXJpYyd9KX1gO1xuICAgICAgZWxzZVxuICAgICAgICB0aGlzLm5hbWUgPSBgJHt0aGlzLm5hbWUuc3Vic3RyaW5nKDAsIHRoaXMubmFtZS5pbmRleE9mKCcg4oCUICcpKX0g4oCUICR7ZnVuY0NhbGwub3B0aW9uc1sndGl0bGUnXSA/PyBuZXcgRGF0ZShmdW5jQ2FsbC5zdGFydGVkLnRvU3RyaW5nKCkpLnRvTG9jYWxlU3RyaW5nKCdlbi11cycsIHttb250aDogJ3Nob3J0JywgZGF5OiAnbnVtZXJpYycsIGhvdXI6ICdudW1lcmljJywgbWludXRlOiAnbnVtZXJpYyd9KX1gO1xuXG5cbiAgICAgIC8vIEZJWCBNRTogdmlldyBuYW1lIGRvZXMgbm90IGNoYW5nZSBpbiBtb2RlbHNcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2Rpdi5kNC1yaWJib24tbmFtZScpPy5yZXBsYWNlQ2hpbGRyZW4odWkuc3BhbihbdGhpcy5uYW1lXSkpO1xuICAgICAgdGhpcy5wYXRoID0gYD9pZD0ke3RoaXMuX2Z1bmNDYWxsLmlkfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGF0aCA9IGBgO1xuXG4gICAgICB0aGlzLm5hbWUgPSBgJHt0aGlzLm5hbWUuc3Vic3RyaW5nKDAsICh0aGlzLm5hbWUuaW5kZXhPZignIOKAlCAnKSA+IDApID8gdGhpcy5uYW1lLmluZGV4T2YoJyDigJQgJykgOiB1bmRlZmluZWQpfWA7XG4gICAgfVxuICAgIHRoaXMuYnVpbGRSaWJib25QYW5lbHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgZm9yIGN1c3RvbSBsb2dpYyB0aGF0IGNvdWxkIG5vdCBiZSBwbGFjZWQgaW4gdGhlIGNvbnN0cnVjdG9yLlxuICAgKiBBbnkgYXN5bmMgbWV0aG9kcyBhbmQgbW9zdCBvZiB0aGUgbG9naWMgc2hvdWxkIGJlIHBsYWNlZCBoZXJlLlxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBhc3luYyBpbml0KCkge31cblxuICAvKipcbiAgICogT3ZlcnJpZGUgdG8gY3JlYXRlIGEgZnVsbHkgY3VzdG9tIFVJIGluY2x1ZGluZyByaWJib24gbWVudXMgYW5kIHBhbmVsc1xuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBidWlsZCgpOiB2b2lkIHtcbiAgICB1aS5lbXB0eSh0aGlzLnJvb3QpO1xuICAgIHRoaXMucm9vdC5hcHBlbmRDaGlsZCh0aGlzLmJ1aWxkSU8oKSk7XG5cbiAgICB0aGlzLmJ1aWxkSGlzdG9yeUJsb2NrKCk7XG4gICAgdGhpcy5idWlsZFJpYmJvbk1lbnUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0byBjcmVhdGUgYSBjdXN0b20gaW5wdXQtb3V0cHV0IGJsb2NrXG4gICAqIEByZXR1cm5zIFRoZSBIVE1MRWxlbWVudCB3aXRoIHdob2xlIFVJIGV4Y2x1ZGluZyByaWJib24gbWVudXMgYW5kIHBhbmVsc1xuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBhYnN0cmFjdCBidWlsZElPKCk6IEhUTUxFbGVtZW50O1xuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0byBjcmVhdGUgYSBjdXN0b20gaGlzdG9yaWNhbCBydW5zIGNvbnRyb2wuXG4gICAqIEByZXR1cm5zIFRoZSBIVE1MRWxlbWVudCB3aXRoIGhpc3RvcnkgYmxvY2sgVUlcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYnVpbGRIaXN0b3J5QmxvY2soKTogSFRNTEVsZW1lbnQge1xuICAgIGNvbnN0IG5ld0hpc3RvcnlCbG9jayA9IFVpVXRpbHMuaGlzdG9yeVBhbmVsKHRoaXMuZnVuYyEpO1xuXG4gICAgbmV3SGlzdG9yeUJsb2NrLm9uUnVuQ2hvc2VuLnN1YnNjcmliZShhc3luYyAoaWQpID0+IHRoaXMubGlua0Z1bmNjYWxsKGF3YWl0IHRoaXMubG9hZFJ1bihpZCkpKTtcblxuICAgIG5ld0hpc3RvcnlCbG9jay5iZWZvcmVSdW5BZGRUb0Zhdm9yaXRlcy5zdWJzY3JpYmUoYXN5bmMgKGZ1bmNDYWxsKSA9PiB7XG4gICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3IobmV3SGlzdG9yeUJsb2NrLmhpc3RvcnlUYWIsIHRydWUpO1xuICAgICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKG5ld0hpc3RvcnlCbG9jay5mYXZUYWIsIHRydWUpO1xuXG4gICAgICBmdW5jQ2FsbCA9IGF3YWl0IHRoaXMuYWRkUnVuVG9GYXZvcml0ZXMoZnVuY0NhbGwpO1xuXG4gICAgICBuZXdIaXN0b3J5QmxvY2suYWZ0ZXJSdW5BZGRUb0Zhdm9yaXRlcy5uZXh0KGZ1bmNDYWxsKTtcblxuICAgICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKG5ld0hpc3RvcnlCbG9jay5oaXN0b3J5VGFiLCBmYWxzZSk7XG4gICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3IobmV3SGlzdG9yeUJsb2NrLmZhdlRhYiwgZmFsc2UpO1xuICAgIH0pO1xuICAgIG5ld0hpc3RvcnlCbG9jay5iZWZvcmVSdW5BZGRUb1NoYXJlZC5zdWJzY3JpYmUoYXN5bmMgKGZ1bmNDYWxsKSA9PiB7XG4gICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3IobmV3SGlzdG9yeUJsb2NrLmhpc3RvcnlUYWIsIHRydWUpO1xuICAgICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKG5ld0hpc3RvcnlCbG9jay5zaGFyZWRUYWIsIHRydWUpO1xuXG4gICAgICBmdW5jQ2FsbCA9IGF3YWl0IHRoaXMuYWRkUnVuVG9TaGFyZWQoZnVuY0NhbGwpO1xuXG4gICAgICBuZXdIaXN0b3J5QmxvY2suYWZ0ZXJSdW5BZGRUb1NoYXJlZC5uZXh0KGZ1bmNDYWxsKTtcblxuICAgICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKG5ld0hpc3RvcnlCbG9jay5zaGFyZWRUYWIsIGZhbHNlKTtcbiAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcihuZXdIaXN0b3J5QmxvY2suaGlzdG9yeVRhYiwgZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgbmV3SGlzdG9yeUJsb2NrLmJlZm9yZVJ1bkRlbGV0ZWQuc3Vic2NyaWJlKGFzeW5jIChpZCkgPT4ge1xuICAgICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKG5ld0hpc3RvcnlCbG9jay50YWJzLnJvb3QsIHRydWUpO1xuICAgICAgYXdhaXQgdGhpcy5kZWxldGVSdW4oYXdhaXQgaGlzdG9yeVV0aWxzLmxvYWRSdW4oaWQsIHRydWUpKTtcblxuICAgICAgbmV3SGlzdG9yeUJsb2NrLmFmdGVyUnVuRGVsZXRlZC5uZXh0KGlkKTtcbiAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcihuZXdIaXN0b3J5QmxvY2sudGFicy5yb290LCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBuZXdIaXN0b3J5QmxvY2suYmVmb3JlUnVuUmVtb3ZlRnJvbUZhdm9yaXRlcy5zdWJzY3JpYmUoYXN5bmMgKGlkKSA9PiB7XG4gICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3IobmV3SGlzdG9yeUJsb2NrLmhpc3RvcnlUYWIsIHRydWUpO1xuICAgICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKG5ld0hpc3RvcnlCbG9jay5mYXZUYWIsIHRydWUpO1xuICAgICAgYXdhaXQgdGhpcy5yZW1vdmVSdW5Gcm9tRmF2b3JpdGVzKGF3YWl0IGhpc3RvcnlVdGlscy5sb2FkUnVuKGlkLCB0cnVlKSk7XG5cbiAgICAgIG5ld0hpc3RvcnlCbG9jay5hZnRlclJ1blJlbW92ZUZyb21GYXZvcml0ZXMubmV4dChpZCk7XG5cbiAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcihuZXdIaXN0b3J5QmxvY2suZmF2VGFiLCBmYWxzZSk7XG4gICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3IobmV3SGlzdG9yeUJsb2NrLmhpc3RvcnlUYWIsIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIG5ld0hpc3RvcnlCbG9jay5iZWZvcmVSdW5SZW1vdmVGcm9tU2hhcmVkLnN1YnNjcmliZShhc3luYyAoaWQpID0+IHtcbiAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcihuZXdIaXN0b3J5QmxvY2suaGlzdG9yeVRhYiwgdHJ1ZSk7XG4gICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3IobmV3SGlzdG9yeUJsb2NrLnNoYXJlZFRhYiwgdHJ1ZSk7XG5cbiAgICAgIGF3YWl0IHRoaXMucmVtb3ZlUnVuRnJvbVNoYXJlZChhd2FpdCBoaXN0b3J5VXRpbHMubG9hZFJ1bihpZCwgdHJ1ZSkpO1xuXG4gICAgICBuZXdIaXN0b3J5QmxvY2suYWZ0ZXJSdW5SZW1vdmVGcm9tU2hhcmVkLm5leHQoaWQpO1xuXG4gICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3IobmV3SGlzdG9yeUJsb2NrLmhpc3RvcnlUYWIsIGZhbHNlKTtcbiAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcihuZXdIaXN0b3J5QmxvY2suc2hhcmVkVGFiLCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICB1aS5lbXB0eSh0aGlzLmhpc3RvcnlSb290KTtcbiAgICB0aGlzLmhpc3RvcnlSb290LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdqdXN0aWZ5LWNvbnRlbnQnKTtcbiAgICB0aGlzLmhpc3RvcnlSb290LnN0eWxlLndpZHRoID0gJzEwMCUnO1xuICAgIHRoaXMuaGlzdG9yeVJvb3QuYXBwZW5kKG5ld0hpc3RvcnlCbG9jay5yb290KTtcbiAgICByZXR1cm4gbmV3SGlzdG9yeUJsb2NrLnJvb3Q7XG4gIH1cblxuICAvKipcbiAgICogTG9va3MgZm9yIHtAbGluayBzdXBwb3J0ZWRFeHBvcnRGb3JtYXRzfSBtZW1iZXJzIGFuZCBjcmVhdGVzIHJpYmJvbiBwYW5lbFxuICAgKiBAcmV0dXJucyBUaGUgSFRNTEVsZW1lbnRzIG9mIHJpYmJvblBhbmVsc1xuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIGJ1aWxkUmliYm9uUGFuZWxzKCk6IEhUTUxFbGVtZW50W11bXSB7XG4gICAgY29uc3QgbmV3UmliYm9uUGFuZWxzOiBIVE1MRWxlbWVudFtdW10gPSBbXG4gICAgICBbLi4uKHRoaXMuZXhwb3J0Q29uZmlnICYmIHRoaXMuZXhwb3J0Q29uZmlnLnN1cHBvcnRlZEZvcm1hdHMubGVuZ3RoID4gMCkgPyBbdWkuZGl2SChbXG4gICAgICAgIHVpLmNvbWJvUG9wdXAoXG4gICAgICAgICAgdWkuaWNvbkZBKCdhcnJvdy10by1ib3R0b20nKSxcbiAgICAgICAgICB0aGlzLmV4cG9ydENvbmZpZy5zdXBwb3J0ZWRGb3JtYXRzLFxuICAgICAgICAgIGFzeW5jIChmb3JtYXQ6IHN0cmluZykgPT4gREcuVXRpbHMuZG93bmxvYWQodGhpcy5leHBvcnRDb25maWchLmZpbGVuYW1lKGZvcm1hdCksIGF3YWl0IHRoaXMuZXhwb3J0Q29uZmlnIS5leHBvcnQoZm9ybWF0KSkpLFxuICAgICAgXSldOiBbXVxuICAgICAgXV07XG5cbiAgICBpZiAodGhpcy5mdW5jPy5pZCkge1xuICAgICAgY29uc3QgaGlzdG9yeUJ1dHRvbiA9IHVpLmljb25GQSgnaGlzdG9yeScsICgpID0+IHtcbiAgICAgICAgZ3Jvay5zaGVsbC53aW5kb3dzLnNob3dQcm9wZXJ0aWVzID0gIWdyb2suc2hlbGwud2luZG93cy5zaG93UHJvcGVydGllcztcbiAgICAgICAgaGlzdG9yeUJ1dHRvbi5jbGFzc0xpc3QudG9nZ2xlKCdkNC1jdXJyZW50Jyk7XG4gICAgICAgIGdyb2suc2hlbGwubyA9IHRoaXMuaGlzdG9yeVJvb3Q7XG4gICAgICB9KTtcblxuICAgICAgaGlzdG9yeUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdkNC10b2dnbGUtYnV0dG9uJyk7XG4gICAgICBpZiAoZ3Jvay5zaGVsbC53aW5kb3dzLnNob3dQcm9wZXJ0aWVzKSBoaXN0b3J5QnV0dG9uLmNsYXNzTGlzdC5hZGQoJ2Q0LWN1cnJlbnQnKTtcblxuICAgICAgbmV3UmliYm9uUGFuZWxzLnB1c2goW1xuICAgICAgICBoaXN0b3J5QnV0dG9uXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFJpYmJvblBhbmVscyhuZXdSaWJib25QYW5lbHMpO1xuICAgIHJldHVybiBuZXdSaWJib25QYW5lbHM7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgdG8gY3JlYXRlIGEgY3VzdG9tIHJpYmJvbiBtZW51IG9uIHRoZSB0b3AuXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGJ1aWxkUmliYm9uTWVudSgpIHtcblxuICB9XG5cbiAgcHVibGljIGFzeW5jIG9uQmVmb3JlUmVtb3ZlUnVuRnJvbUZhdm9yaXRlcyhjYWxsVG9GYXZvcml0ZTogREcuRnVuY0NhbGwpIHsgfVxuXG4gIHB1YmxpYyBhc3luYyBvbkFmdGVyUmVtb3ZlUnVuRnJvbUZhdm9yaXRlcyhmYXZvcml0ZUNhbGw6IERHLkZ1bmNDYWxsKSB7IH1cblxuICAvKipcbiAgICogU2F2ZXMgdGhlIHJ1biBhcyB1c3VhbCBydW5cbiAgICogQHBhcmFtIGNhbGxUb1VuZmF2b3JpdGUgRnVuY0NhbGwgb2JqZWN0IHRvIHJlbW92ZSBmcm9tIGZhdm9yaXRlc1xuICAgKiBAcmV0dXJucyBTYXZlZCBGdW5jQ2FsbFxuICAgKiBAc3RhYmlsaXR5IEV4cGVyaW1lbnRhbFxuICovXG4gIHB1YmxpYyBhc3luYyByZW1vdmVSdW5Gcm9tRmF2b3JpdGVzKGNhbGxUb1VuZmF2b3JpdGU6IERHLkZ1bmNDYWxsKTogUHJvbWlzZTxERy5GdW5jQ2FsbD4ge1xuICAgIGNhbGxUb1VuZmF2b3JpdGUub3B0aW9uc1sndGl0bGUnXSA9IG51bGw7XG4gICAgY2FsbFRvVW5mYXZvcml0ZS5vcHRpb25zWydkZXNjcmlwdGlvbiddID0gbnVsbDtcbiAgICBjYWxsVG9VbmZhdm9yaXRlLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSA9IGZhbHNlO1xuICAgIGF3YWl0IHRoaXMub25CZWZvcmVSZW1vdmVSdW5Gcm9tRmF2b3JpdGVzKGNhbGxUb1VuZmF2b3JpdGUpO1xuICAgIGNvbnN0IGZhdm9yaXRlU2F2ZSA9IGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHMuYWxsUGFja2FnZVZlcnNpb25zKCkuc2F2ZShjYWxsVG9VbmZhdm9yaXRlKTtcbiAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJSZW1vdmVSdW5Gcm9tRmF2b3JpdGVzKGZhdm9yaXRlU2F2ZSk7XG4gICAgcmV0dXJuIGZhdm9yaXRlU2F2ZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBvbkJlZm9yZUFkZGluZ1RvRmF2b3JpdGVzKGNhbGxUb0FkZFRvRmF2b3JpdGVzOiBERy5GdW5jQ2FsbCkgeyB9XG5cbiAgcHVibGljIGFzeW5jIG9uQWZ0ZXJBZGRpbmdUb0Zhdm9yaXRlcyhmYXZvcml0ZUNhbGw6IERHLkZ1bmNDYWxsKSB7IH1cblxuICAvKipcbiAgICogU2F2ZXMgdGhlIHJ1biBhcyBmYXZvcml0ZVxuICAgKiBAcGFyYW0gY2FsbFRvRmF2b3JpdGUgRnVuY0NhbGwgb2JqZWN0IHRvIGFkZCB0byBmYXZvcml0ZXNcbiAgICogQHJldHVybnMgU2F2ZWQgRnVuY0NhbGxcbiAgICogQHN0YWJpbGl0eSBFeHBlcmltZW50YWxcbiAqL1xuXG4gIHB1YmxpYyBhc3luYyBhZGRSdW5Ub0Zhdm9yaXRlcyhjYWxsVG9GYXZvcml0ZTogREcuRnVuY0NhbGwpOiBQcm9taXNlPERHLkZ1bmNDYWxsPiB7XG4gICAgY2FsbFRvRmF2b3JpdGUub3B0aW9uc1snaXNGYXZvcml0ZSddID0gdHJ1ZTtcbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlQWRkaW5nVG9GYXZvcml0ZXMoY2FsbFRvRmF2b3JpdGUpO1xuICAgIGNvbnN0IHNhdmVkRmF2b3JpdGUgPSBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLmFsbFBhY2thZ2VWZXJzaW9ucygpLnNhdmUoY2FsbFRvRmF2b3JpdGUpO1xuICAgIGF3YWl0IHRoaXMub25BZnRlckFkZGluZ1RvRmF2b3JpdGVzKHNhdmVkRmF2b3JpdGUpO1xuICAgIHJldHVybiBzYXZlZEZhdm9yaXRlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIG9uQmVmb3JlUmVtb3ZlUnVuRnJvbVNoYXJlZChjYWxsVG9TaGFyZTogREcuRnVuY0NhbGwpIHsgfVxuXG4gIHB1YmxpYyBhc3luYyBvbkFmdGVyUmVtb3ZlUnVuRnJvbVNhaHJlZChzaGFyZWRDYWxsOiBERy5GdW5jQ2FsbCkgeyB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgcnVuIGZyb20gc2hhcmVkXG4gICAqIEBwYXJhbSBjYWxsVG9VbnNoYXJlIEZ1bmNDYWxsIG9iamVjdCB0byByZW1vdmUgZnJvbSBzaGFyZWRcbiAgICogQHJldHVybnMgU2F2ZWQgRnVuY0NhbGxcbiAgICogQHN0YWJpbGl0eSBFeHBlcmltZW50YWxcbiAqL1xuXG4gIHB1YmxpYyBhc3luYyByZW1vdmVSdW5Gcm9tU2hhcmVkKGNhbGxUb1Vuc2hhcmU6IERHLkZ1bmNDYWxsKTogUHJvbWlzZTxERy5GdW5jQ2FsbD4ge1xuICAgIGNhbGxUb1Vuc2hhcmUub3B0aW9uc1sndGl0bGUnXSA9IG51bGw7XG4gICAgY2FsbFRvVW5zaGFyZS5vcHRpb25zWydkZXNjcmlwdGlvbiddID0gbnVsbDtcbiAgICBjYWxsVG9VbnNoYXJlLm9wdGlvbnNbJ2lzU2hhcmVkJ10gPSBmYWxzZTtcbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlUmVtb3ZlUnVuRnJvbUZhdm9yaXRlcyhjYWxsVG9VbnNoYXJlKTtcbiAgICBjb25zdCBzYXZlZFNoYXJlZCA9IGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHMuYWxsUGFja2FnZVZlcnNpb25zKCkuc2F2ZShjYWxsVG9VbnNoYXJlKTtcbiAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJSZW1vdmVSdW5Gcm9tRmF2b3JpdGVzKHNhdmVkU2hhcmVkKTtcbiAgICByZXR1cm4gc2F2ZWRTaGFyZWQ7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb25CZWZvcmVBZGRpbmdUb1NoYXJlZChjYWxsVG9BZGRUb1NoYXJlZDogREcuRnVuY0NhbGwpIHsgfVxuXG4gIHB1YmxpYyBhc3luYyBvbkFmdGVyQWRkaW5nVG9TaGFyZWQoc2hhcmVkQ2FsbDogREcuRnVuY0NhbGwpIHsgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgcnVuIGFzIHNoYXJlZFxuICAgKiBAcGFyYW0gY2FsbFRvU2hhcmUgRnVuY0NhbGwgb2JqZWN0IHRvIGFkZCB0byBzaGFyZWRcbiAgICogQHJldHVybnMgU2F2ZWQgRnVuY0NhbGxcbiAgICogQHN0YWJpbGl0eSBFeHBlcmltZW50YWxcbiAqL1xuXG4gIHB1YmxpYyBhc3luYyBhZGRSdW5Ub1NoYXJlZChjYWxsVG9TaGFyZTogREcuRnVuY0NhbGwpOiBQcm9taXNlPERHLkZ1bmNDYWxsPiB7XG4gICAgY2FsbFRvU2hhcmUub3B0aW9uc1snaXNTaGFyZWQnXSA9IHRydWU7XG4gICAgYXdhaXQgdGhpcy5vbkJlZm9yZUFkZGluZ1RvU2hhcmVkKGNhbGxUb1NoYXJlKTtcblxuICAgIGNvbnN0IGFsbEdyb3VwID0gYXdhaXQgZ3Jvay5kYXBpLmdyb3Vwcy5maW5kKGRlZmF1bHRHcm91cHNJZHNbJ0FsbCB1c2VycyddKTtcblxuICAgIGNvbnN0IGRmT3V0cHV0cyA9IHd1KGNhbGxUb1NoYXJlLm91dHB1dFBhcmFtcy52YWx1ZXMoKSBhcyBERy5GdW5jQ2FsbFBhcmFtW10pXG4gICAgICAuZmlsdGVyKChvdXRwdXQpID0+IG91dHB1dC5wcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IERHLlRZUEUuREFUQV9GUkFNRSk7XG5cbiAgICBmb3IgKGNvbnN0IG91dHB1dCBvZiBkZk91dHB1dHMpIHtcbiAgICAgIGNvbnN0IGRmID0gY2FsbFRvU2hhcmUub3V0cHV0c1tvdXRwdXQubmFtZV0gYXMgREcuRGF0YUZyYW1lO1xuICAgICAgYXdhaXQgZ3Jvay5kYXBpLnBlcm1pc3Npb25zLmdyYW50KGRmLmdldFRhYmxlSW5mbygpLCBhbGxHcm91cCwgZmFsc2UpO1xuICAgIH1cblxuICAgIGNvbnN0IGRmSW5wdXRzID0gd3UoY2FsbFRvU2hhcmUuaW5wdXRQYXJhbXMudmFsdWVzKCkgYXMgREcuRnVuY0NhbGxQYXJhbVtdKVxuICAgICAgLmZpbHRlcigoaW5wdXQpID0+IGlucHV0LnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKTtcbiAgICBmb3IgKGNvbnN0IGlucHV0IG9mIGRmSW5wdXRzKSB7XG4gICAgICBjb25zdCBkZiA9IGNhbGxUb1NoYXJlLmlucHV0c1tpbnB1dC5uYW1lXSBhcyBERy5EYXRhRnJhbWU7XG4gICAgICBhd2FpdCBncm9rLmRhcGkucGVybWlzc2lvbnMuZ3JhbnQoZGYuZ2V0VGFibGVJbmZvKCksIGFsbEdyb3VwLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2F2ZWRTaGFyZWQgPSBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLmFsbFBhY2thZ2VWZXJzaW9ucygpLnNhdmUoY2FsbFRvU2hhcmUpO1xuICAgIGF3YWl0IHRoaXMub25BZnRlckFkZGluZ1RvU2hhcmVkKHNhdmVkU2hhcmVkKTtcbiAgICByZXR1cm4gc2F2ZWRTaGFyZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGJlZm9yZSBzYXZpbmcgdGhlIEZVbmNDYWxsIHJlc3VsdHMgdG8gdGhlIGhpc3RvcmljYWwgcmVzdWx0cywgcmV0dXJucyB0aGUgc2F2ZWQgY2FsbC4gU2VlIGFsc28ge0BsaW5rIHNhdmVSdW59LlxuICAgKiBAcGFyYW0gY2FsbFRvU2F2ZSBGdW5jQ2FsbCBvYmplY3QgdG8gc2F2ZVxuICAgKiBAcmV0dXJucyBTYXZlZCBGdW5jQ2FsbFxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBhc3luYyBvbkJlZm9yZVNhdmVSdW4oY2FsbFRvU2F2ZTogREcuRnVuY0NhbGwpIHsgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgY29tcHV0YXRpb24gcmVzdWx0cyB0byB0aGUgaGlzdG9yaWNhbCByZXN1bHRzLCByZXR1cm5zIHRoZSBzYXZlZCBjYWxsLiBTZWUgYWxzbyB7QGxpbmsgc2F2ZVJ1bn0uXG4gICAqIEBwYXJhbSBzYXZlZENhbGwgRnVuY0NhbGwgb2JqZWN0IHRvIHNhdmVcbiAgICogQHJldHVybnMgU2F2ZWQgRnVuY0NhbGxcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYXN5bmMgb25BZnRlclNhdmVSdW4oc2F2ZWRDYWxsOiBERy5GdW5jQ2FsbCkgeyB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIHRoZSBjb21wdXRhdGlvbiByZXN1bHRzIHRvIHRoZSBoaXN0b3JpY2FsIHJlc3VsdHMsIHJldHVybnMgdGhlIHNhdmVkIGNhbGwuIFNlZSBhbHNvIHtAbGluayBsb2FkUnVufS5cbiAgICogQHBhcmFtIGNhbGxUb1NhdmUgRnVuY0NhbGwgb2JqZWN0IHRvIHNhdmVcbiAgICogQHJldHVybnMgU2F2ZWQgRnVuY0NhbGxcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYXN5bmMgc2F2ZVJ1bihjYWxsVG9TYXZlOiBERy5GdW5jQ2FsbCk6IFByb21pc2U8REcuRnVuY0NhbGw+IHtcbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlU2F2ZVJ1bihjYWxsVG9TYXZlKTtcbiAgICBjb25zdCBzYXZlZENhbGwgPSBhd2FpdCBoaXN0b3J5VXRpbHMuc2F2ZVJ1bihjYWxsVG9TYXZlKTtcbiAgICBzYXZlZENhbGwub3B0aW9uc1snaXNIaXN0b3JpY2FsJ10gPSBmYWxzZTtcbiAgICB0aGlzLmxpbmtGdW5jY2FsbChzYXZlZENhbGwpO1xuICAgIHRoaXMuYnVpbGRIaXN0b3J5QmxvY2soKTtcbiAgICB0aGlzLnBhdGggPSBgP2lkPSR7c2F2ZWRDYWxsLmlkfWA7XG4gICAgYXdhaXQgdGhpcy5vbkFmdGVyU2F2ZVJ1bihzYXZlZENhbGwpO1xuICAgIHJldHVybiBzYXZlZENhbGw7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGJlZm9yZSBkZWxldGluZyB0aGUgY29tcHV0YXRpb24gcmVzdWx0cyBmcm9tIGhpc3RvcnksIHJldHVybnMgaXRzIGlkLiBTZWUgYWxzbyB7QGxpbmsgbG9hZFJ1bn0uXG4gICAqIEBwYXJhbSBjYWxsVG9EZWxldGUgRnVuY0NhbGwgb2JqZWN0IHRvIGJlIGRlbGV0ZWRcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYXN5bmMgb25CZWZvcmVEZWxldGVSdW4oY2FsbFRvRGVsZXRlOiBERy5GdW5jQ2FsbCkgeyB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBhZnRlciBkZWxldGluZyB0aGUgY29tcHV0YXRpb24gcmVzdWx0cyBmcm9tIGhpc3RvcnksIHJldHVybnMgaXRzIGlkLiBTZWUgYWxzbyB7QGxpbmsgbG9hZFJ1bn0uXG4gICAqIEBwYXJhbSBkZWxldGVkQ2FsbCBkZWxldGVkIEZ1bmNDYWxsIHZhbHVlXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGFzeW5jIG9uQWZ0ZXJEZWxldGVSdW4oZGVsZXRlZENhbGw6IERHLkZ1bmNDYWxsKSB7IH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgY29tcHV0YXRpb24gcmVzdWx0cyBmcm9tIGhpc3RvcnksIHJldHVybnMgaXRzIGlkLiBTZWUgYWxzbyB7QGxpbmsgbG9hZFJ1bn0uXG4gICAqIEBwYXJhbSBjYWxsVG9EZWxldGUgRnVuY0NhbGwgb2JqZWN0IHRvIGRlbGV0ZVxuICAgKiBAcmV0dXJucyBJRCBvZiBkZWxldGVkIGhpc3RvcmljYWwgcnVuXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlUnVuKGNhbGxUb0RlbGV0ZTogREcuRnVuY0NhbGwpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGF3YWl0IHRoaXMub25CZWZvcmVEZWxldGVSdW4oY2FsbFRvRGVsZXRlKTtcbiAgICBhd2FpdCBoaXN0b3J5VXRpbHMuZGVsZXRlUnVuKGNhbGxUb0RlbGV0ZSk7XG4gICAgYXdhaXQgdGhpcy5vbkFmdGVyRGVsZXRlUnVuKGNhbGxUb0RlbGV0ZSk7XG4gICAgcmV0dXJuIGNhbGxUb0RlbGV0ZS5pZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYmVmb3JlIGZldGNoaW5nIHRoZSBoaXN0b3JpY2FsIHJ1biBkYXRhIGluIHtAbGluayBsb2FkUnVufS5cbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYXN5bmMgb25CZWZvcmVMb2FkUnVuKCkge31cblxuICAvKipcbiAgICogQ2FsbGVkIGFmdGVyIGZldGNoaW5nIHRoZSBoaXN0b3JpY2FsIHJ1biBkYXRhIGluIHtAbGluayBsb2FkUnVufS5cbiAgICogQHBhcmFtIGZ1bmNDYWxsIEZ1bmNDYWxsIGZldGNoZWQgZnJvbSBzZXJ2ZXIgZHVyaW5nIHtAbGluayBsb2FkUnVufVxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBhc3luYyBvbkFmdGVyTG9hZFJ1bihmdW5jQ2FsbDogREcuRnVuY0NhbGwpIHt9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBzcGVjaWZpZWQgaGlzdG9yaWNhbCBydW4uIFNlZSBhbHNvIHtAbGluayBzYXZlUnVufS5cbiAgICogQHBhcmFtIGZ1bmNDYWxsSWQgSUQgb2YgRnVuY0NhbGwgdG8gbG9vayBmb3IuIEdldCBpdCB1c2luZyB7QHNlZSBmdW5jQ2FsbC5pZH0gZmllbGRcbiAgICogQHJldHVybnMgRnVuY0NhbGwgYXVnZW1lbnRlZCB3aXRoIGlucHV0cycgYW5kIG91dHB1dHMnIHZhbHVlc1xuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG5cbiAgcHVibGljIGFzeW5jIGxvYWRSdW4oZnVuY0NhbGxJZDogc3RyaW5nKTogUHJvbWlzZTxERy5GdW5jQ2FsbD4ge1xuICAgIGF3YWl0IHRoaXMub25CZWZvcmVMb2FkUnVuKCk7XG4gICAgY29uc3QgcHVsbGVkUnVuID0gYXdhaXQgaGlzdG9yeVV0aWxzLmxvYWRSdW4oZnVuY0NhbGxJZCk7XG4gICAgYXdhaXQgdGhpcy5vbkFmdGVyTG9hZFJ1bihwdWxsZWRSdW4pO1xuICAgIHJldHVybiBwdWxsZWRSdW47XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGJlZm9yZSBhY3R1YWwgY29tcHV0YXRpb25zIGFyZSBtYWRlIHtAbGluayBydW59LlxuICAgKiBAcGFyYW0gZnVuY1RvQ2FsbCBGdW5jQ2FsbCBvYmplY3QgdG8gYmUgY2FsbGVkIHtAc2VlIERHLkZ1bmNDYWxsLmNhbGwoKX1cbiAgICogQHN0YWJpbGl0eSBFeHBlcmltZW50YWxcbiAgKi9cbiAgcHVibGljIGFzeW5jIG9uQmVmb3JlUnVuKGZ1bmNUb0NhbGw6IERHLkZ1bmNDYWxsKSB7fVxuXG4gIC8qKlxuICAgICogQ2FsbGVkIGFmdGVyIGFjdHVhbCBjb21wdXRhdGlvbnMgYXJlIG1hZGUge0BsaW5rIHJ1bn0uXG4gICAgKiBAcGFyYW0gcnVuRnVuYyBGdW5jQ2FsbCBvYmplY3QgYWZ0ZXIgY2FsbCBtZXRob2Qge0BzZWUgREcuRnVuY0NhbGwuY2FsbCgpfVxuICAgICogQHN0YWJpbGl0eSBFeHBlcmltZW50YWxcbiAgICovXG4gIHB1YmxpYyBhc3luYyBvbkFmdGVyUnVuKHJ1bkZ1bmM6IERHLkZ1bmNDYWxsKSB7fVxuXG4gIHB1YmxpYyBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmZ1bmNDYWxsKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBjb3JyZXNwb2RpbmcgZnVuY3Rpb24gaXMgbm90IHNwZWNpZmllZCcpO1xuXG4gICAgYXdhaXQgdGhpcy5vbkJlZm9yZVJ1bih0aGlzLmZ1bmNDYWxsKTtcbiAgICBjb25zdCBwaSA9IERHLlRhc2tCYXJQcm9ncmVzc0luZGljYXRvci5jcmVhdGUoJ0NhbGN1bGF0aW5nLi4uJyk7XG4gICAgdGhpcy5mdW5jQ2FsbC5uZXdJZCgpO1xuICAgIGF3YWl0IHRoaXMuZnVuY0NhbGwuY2FsbCgpOyAvLyBtdXRhdGVzIHRoZSBmdW5jQ2FsbCBmaWVsZFxuICAgIHBpLmNsb3NlKCk7XG4gICAgYXdhaXQgdGhpcy5vbkFmdGVyUnVuKHRoaXMuZnVuY0NhbGwpO1xuXG4gICAgdGhpcy5sYXN0Q2FsbCA9IGF3YWl0IHRoaXMuc2F2ZVJ1bih0aGlzLmZ1bmNDYWxsKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoaXN0b3J5Um9vdDogSFRNTERpdkVsZW1lbnQgPSB1aS5kaXZWKFtdLCB7c3R5bGU6IHsnanVzdGlmeS1jb250ZW50JzogJ2NlbnRlcid9fSk7XG5cbiAgcHJvdGVjdGVkIGRlZmF1bHRFeHBvcnRGaWxlbmFtZSA9IChmb3JtYXQ6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBgJHt0aGlzLm5hbWV9IC0gJHtuZXcgRGF0ZSgpLnRvTG9jYWxlU3RyaW5nKCl9LiR7dGhpcy5leHBvcnRDb25maWchLnN1cHBvcnRlZEV4dGVuc2lvbnNbZm9ybWF0XX1gO1xuICB9O1xuXG4gIHByb3RlY3RlZCBkZWZhdWx0U3VwcG9ydGVkRXhwb3J0RXh0ZW5zaW9ucyA9ICgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ0V4Y2VsJzogJ3hsc3gnXG4gICAgfTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgZGVmYXVsdFN1cHBvcnRlZEV4cG9ydEZvcm1hdHMgPSAoKSA9PiB7XG4gICAgcmV0dXJuIFsnRXhjZWwnXTtcbiAgfTtcbn1cbiJdfQ==
|
|
319
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tdmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImZ1bmN0aW9uLXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsZ0NBQWdDO0FBQ2hDLDRCQUE0QjtBQUM1QixPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBRXJEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLEVBQUU7SUFDbkMsT0FBTyxDQUFDLE1BQVcsRUFBRSxVQUFrQixFQUFFLFVBQThCLEVBQUUsRUFBRTtRQUN6RSxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO1FBRWxDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsVUFBZSxHQUFHLElBQVc7O2dCQUM5QyxJQUFJO29CQUNGLE9BQU8sTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO2lCQUMzQztnQkFBQyxPQUFPLEdBQVEsRUFBRTtvQkFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUUsR0FBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUN6QyxNQUFNLEdBQUcsQ0FBQztpQkFDWDtZQUNILENBQUM7U0FBQSxDQUFDO0lBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsZ0JBQWdCLENBQUM7QUFFdEQsTUFBTSxPQUFnQixZQUFhLFNBQVEsRUFBRSxDQUFDLFFBQVE7SUFLcEQsWUFBWSxRQUFzQjtRQUNoQyxLQUFLLEVBQUUs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QixDQUFDO0tBQUE7SUFFRDs7OztNQUlFO0lBQ1csV0FBVyxDQUFDLFVBQXVCOzhEQUFHLENBQUM7S0FBQTtJQUVwRDs7OztPQUlHO0lBQ1UsVUFBVSxDQUFDLE9BQW9COzhEQUFHLENBQUM7S0FBQTtJQUVuQyxHQUFHOztZQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7WUFFbEYsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN0QyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN0QixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyw2QkFBNkI7WUFDekQsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUVyQyxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEQsQ0FBQztLQUFBO0NBaUJGIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgdmFsaWQtanNkb2MgKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQge2hpc3RvcnlVdGlsc30gZnJvbSAnLi9oaXN0b3J5LXV0aWxzJztcbmltcG9ydCB7VWlVdGlsc30gZnJvbSAnLi9zaGFyZWQtY29tcG9uZW50cy91aS11dGlscyc7XG5cbi8qKlxuICAgKiBEZWNvcmF0b3IgdG8gcGFzcyBhbGwgdGhyb3duIGVycm9ycyB0byBncm9rLnNoZWxsLmVycm9yXG4gICAqIEByZXR1cm5zIFRoZSBhY3R1YWwgZnVuY2NhbGwgYXNzb2NpYXRlZCB3aXRoIHRoZSB2aWV3XG4gICAqIEBzdGFiaWxpdHkgRXhwZXJpbWVudGFsXG4gKi9cbmV4cG9ydCBjb25zdCBwYXNzRXJyb3JUb1NoZWxsID0gKCkgPT4ge1xuICByZXR1cm4gKHRhcmdldDogYW55LCBtZW1iZXJOYW1lOiBzdHJpbmcsIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsID0gZGVzY3JpcHRvci52YWx1ZTtcblxuICAgIGRlc2NyaXB0b3IudmFsdWUgPSBhc3luYyBmdW5jdGlvbiguLi5hcmdzOiBhbnlbXSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IG9yaWdpbmFsLmNhbGwodGhpcywgLi4uYXJncyk7XG4gICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICBncm9rLnNoZWxsLmVycm9yKChlcnIgYXMgRXJyb3IpLm1lc3NhZ2UpO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBJTlRFUkFDVElWRV9DU1NfQ0xBU1MgPSAnY3YtaW50ZXJhY3RpdmUnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRnVuY3Rpb25WaWV3IGV4dGVuZHMgREcuVmlld0Jhc2Uge1xuICBwcm90ZWN0ZWQgX2Z1bmNDYWxsPzogREcuRnVuY0NhbGw7XG4gIHByb3RlY3RlZCBfbGFzdENhbGw/OiBERy5GdW5jQ2FsbDtcbiAgcHJvdGVjdGVkIF90eXBlOiBzdHJpbmcgPSAnZnVuY3Rpb24nO1xuXG4gIGNvbnN0cnVjdG9yKGZ1bmNDYWxsPzogREcuRnVuY0NhbGwpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYm94ID0gdHJ1ZTtcblxuICAgIGlmICghZnVuY0NhbGwpIHJldHVybjtcbiAgICB0aGlzLm5hbWUgPSBmdW5jQ2FsbC5mdW5jLmZyaWVuZGx5TmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCBmdW5jdGlvbiBjYWxsIG9mIHRoZSB2aWV3XG4gICAqIEByZXR1cm5zIFRoZSBhY3R1YWwgZnVuY2NhbGwgYXNzb2NpYXRlZCB3aXRoIHRoZSB2aWV3XG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGdldCBmdW5jQ2FsbCgpOiBERy5GdW5jQ2FsbCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2Z1bmNDYWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBGdW5jIG9mIHRoZSB2aWV3XG4gICAqIEByZXR1cm5zIFRoZSBhY3R1YWwgZnVuYyBhc3NvY2lhdGVkIHdpdGggdGhlIHZpZXdcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBnZXQgZnVuYygpIHtcbiAgICByZXR1cm4gdGhpcy5mdW5jQ2FsbD8uZnVuYztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGF0YSBvZiBsYXN0IGNhbGwgb2YgYXNzb2NpYXRlZCBmdW5jdGlvblxuICAgKiBAcmV0dXJucyBUaGUgYWN0dWFsIGZ1bmMgYXNzb2NpYXRlZCB3aXRoIHRoZSB2aWV3XG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgZ2V0IGxhc3RDYWxsKCkge1xuICAgIHJldHVybiB0aGlzLl9sYXN0Q2FsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZGF0YSBvZiBsYXN0IGNhbGwgb2YgYXNzb2NpYXRlZCBmdW5jdGlvblxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHNldCBsYXN0Q2FsbChsYXN0Q2FsbDogREcuRnVuY0NhbGwgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9sYXN0Q2FsbCA9IGxhc3RDYWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFZpZXcgdHlwZVxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBnZXQgdHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90eXBlO1xuICB9XG5cbiAgLyoqIEV4cG9ydCBvcHRpb25zLiBDb3VsZCBiZSBvdmVycmlkZW4gcGFydGlhbGx5LCB1c2luZyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIGVhY2ggb3B0aW9uLlxuICAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAgKi9cbiAgZXhwb3J0Q29uZmlnOiB7XG4gICAgLyoqIE92ZXJyaWRlIHRvIHByb3ZpZGUgY3VzdG9tIGV4cG9ydCBsb2dpYy5cbiAgICAgICpcbiAgICAgICogIERlZmF1bHQgaW1wbGVtZW50YXRpb24ge0BsaW5rIGRlZmF1bHRFeHBvcnR9IGhlYXZpbHkgcmVsaWVzIG9uIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBidWlsZElPfS5cbiAgICAgICogQHJldHVybnMgQmxvYiB3aXRoIGRhdGEgdG8gYmUgZXhwb3J0ZWQgaW50byB0aGUgZmlsZS5cbiAgICAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAgICAqL1xuICAgIGV4cG9ydDogKChmb3JtYXQ6IHN0cmluZykgPT4gUHJvbWlzZTxCbG9iPik7XG5cblxuICAgIC8qKiBGaWxlbmFtZSBmb3IgZXhwb3J0ZWQgZmlsZXMuIE92ZXJyaWRlIGZvciBjdXN0b20gZmlsZW5hbWVzLlxuICAgICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIHtAbGluayBkZWZhdWx0RXhwb3J0RmlsZW5hbWV9XG4gICAgICAqIEBwYXJhbSBmb3JtYXQgRm9ybWF0IG5hbWUgdG8gYmUgZXhwb3J0ZWRcbiAgICAgICogQHJldHVybnMgVGhlIGFjdHVhbCBmaWxlbmFtZSB0byBiZSB1c2VkIGZvciB0aGUgZ2VuZXJhdGVkIGZpbGUuXG4gICAgICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gICAgKi9cbiAgICBmaWxlbmFtZTogKChmb3JtYXQ6IHN0cmluZykgPT4gc3RyaW5nKTtcblxuICAgIC8qKiBPdmVycmlkZSB0byBwcm92aWRlIGN1c3RvbSBsaXN0IG9mIHN1cHBvcnRlZCBleHBvcnQgZm9ybWF0cy5cbiAgICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIHtAbGluayBkZWZhdWx0U3VwcG9ydGVkRXhwb3J0Rm9ybWF0c31cbiAgICAgKiBUaGVzZSBmb3JtYXRzIGFyZSBhdmFpbGFibGUgdW5kZXIgdGhlIFwiRXhwb3J0XCIgcG9wdXAgb24gdGhlIHJpYmJvbiBwYW5lbC5cbiAgICAgKiBAcmV0dXJucyBUaGUgYXJyYXkgb2YgZm9ybWF0cyBhdmFpbGFibGUgZm9yIHRoZSBleHBvcnQuXG4gICAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAgICAqL1xuICAgIHN1cHBvcnRlZEZvcm1hdHM6IHN0cmluZ1tdO1xuXG4gICAgLyoqIE92ZXJyaWRlIHRvIHByb3ZpZGUgY3VzdG9tIGZpbGUgZXh0ZW5zaW9ucyBmb3IgZXhwb3J0ZWQgZm9ybWF0cy5cbiAgICAgICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMge0BsaW5rIGRlZmF1bHRTdXBwb3J0ZWRFeHBvcnRFeHRlbnNpb25zfVxuICAgICAgICogVGhlc2UgZXh0ZW5zaW9ucyBhcmUgdXNlZCBpbiBmaWxlbmFtZXMge0BsaW5rIGV4cG9ydEZpbGVuYW1lfS5cbiAgICAgICAqIEByZXR1cm5zIFRoZSBtYXBwaW5nIGJldHdlZW4gc3VwcG9ydGVkIGV4cG9ydCBmb3JtYXRzIGFuZCB0aGVpciBleHRlbnNpb25zLlxuICAgICAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAgICAgKi9cbiAgICBzdXBwb3J0ZWRFeHRlbnNpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICB9IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIExpbmsgRnVuY0NhbGwgdG8gdGhlIHZpZXdcbiAgICogQHBhcmFtIGZ1bmNDYWxsIFRoZSBhY3R1YWwgZnVuY2NhbGwgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB2aWV3XG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGxpbmtGdW5jY2FsbChmdW5jQ2FsbDogREcuRnVuY0NhbGwpIHtcbiAgICBjb25zdCBpc1ByZXZpb3VzSGlzdG9yaWNhbCA9IHRoaXMuX2Z1bmNDYWxsPy5vcHRpb25zWydpc0hpc3RvcmljYWwnXTtcbiAgICB0aGlzLl9mdW5jQ2FsbCA9IGZ1bmNDYWxsO1xuXG4gICAgaWYgKGZ1bmNDYWxsLm9wdGlvbnNbJ2lzSGlzdG9yaWNhbCddKSB7XG4gICAgICBpZiAoIWlzUHJldmlvdXNIaXN0b3JpY2FsKVxuICAgICAgICB0aGlzLm5hbWUgPSBgJHt0aGlzLm5hbWV9IOKAlCAke2Z1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ10gPz8gbmV3IERhdGUoZnVuY0NhbGwuc3RhcnRlZC50b1N0cmluZygpKS50b0xvY2FsZVN0cmluZygnZW4tdXMnLCB7bW9udGg6ICdzaG9ydCcsIGRheTogJ251bWVyaWMnLCBob3VyOiAnbnVtZXJpYycsIG1pbnV0ZTogJ251bWVyaWMnfSl9YDtcbiAgICAgIGVsc2VcbiAgICAgICAgdGhpcy5uYW1lID0gYCR7dGhpcy5uYW1lLnN1YnN0cmluZygwLCB0aGlzLm5hbWUuaW5kZXhPZignIOKAlCAnKSl9IOKAlCAke2Z1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ10gPz8gbmV3IERhdGUoZnVuY0NhbGwuc3RhcnRlZC50b1N0cmluZygpKS50b0xvY2FsZVN0cmluZygnZW4tdXMnLCB7bW9udGg6ICdzaG9ydCcsIGRheTogJ251bWVyaWMnLCBob3VyOiAnbnVtZXJpYycsIG1pbnV0ZTogJ251bWVyaWMnfSl9YDtcblxuXG4gICAgICAvLyBGSVggTUU6IHZpZXcgbmFtZSBkb2VzIG5vdCBjaGFuZ2UgaW4gbW9kZWxzXG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdkaXYuZDQtcmliYm9uLW5hbWUnKT8ucmVwbGFjZUNoaWxkcmVuKHVpLnNwYW4oW3RoaXMubmFtZV0pKTtcbiAgICAgIHRoaXMucGF0aCA9IGA/aWQ9JHt0aGlzLl9mdW5jQ2FsbC5pZH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhdGggPSBgYDtcblxuICAgICAgdGhpcy5uYW1lID0gYCR7dGhpcy5uYW1lLnN1YnN0cmluZygwLCAodGhpcy5uYW1lLmluZGV4T2YoJyDigJQgJykgPiAwKSA/IHRoaXMubmFtZS5pbmRleE9mKCcg4oCUICcpIDogdW5kZWZpbmVkKX1gO1xuICAgIH1cbiAgICB0aGlzLmJ1aWxkUmliYm9uUGFuZWxzKCk7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIGZvciBjdXN0b20gbG9naWMgdGhhdCBjb3VsZCBub3QgYmUgcGxhY2VkIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICogQW55IGFzeW5jIG1ldGhvZHMgYW5kIG1vc3Qgb2YgdGhlIGxvZ2ljIHNob3VsZCBiZSBwbGFjZWQgaGVyZS5cbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYXN5bmMgaW5pdCgpIHt9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRvIGNyZWF0ZSBhIGZ1bGx5IGN1c3RvbSBVSSBpbmNsdWRpbmcgcmliYm9uIG1lbnVzIGFuZCBwYW5lbHNcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYnVpbGQoKTogdm9pZCB7XG4gICAgdWkuZW1wdHkodGhpcy5yb290KTtcbiAgICB0aGlzLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy5idWlsZElPKCkpO1xuXG4gICAgdGhpcy5idWlsZEhpc3RvcnlCbG9jaygpO1xuICAgIHRoaXMuYnVpbGRSaWJib25NZW51KCk7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgdG8gY3JlYXRlIGEgY3VzdG9tIGlucHV0LW91dHB1dCBibG9ja1xuICAgKiBAcmV0dXJucyBUaGUgSFRNTEVsZW1lbnQgd2l0aCB3aG9sZSBVSSBleGNsdWRpbmcgcmliYm9uIG1lbnVzIGFuZCBwYW5lbHNcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYWJzdHJhY3QgYnVpbGRJTygpOiBIVE1MRWxlbWVudDtcblxuICAvKipcbiAgICogT3ZlcnJpZGUgdG8gY3JlYXRlIGEgY3VzdG9tIGhpc3RvcmljYWwgcnVucyBjb250cm9sLlxuICAgKiBAcmV0dXJucyBUaGUgSFRNTEVsZW1lbnQgd2l0aCBoaXN0b3J5IGJsb2NrIFVJXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGJ1aWxkSGlzdG9yeUJsb2NrKCk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBuZXdIaXN0b3J5QmxvY2sgPSBVaVV0aWxzLmhpc3RvcnlQYW5lbCh0aGlzLmZ1bmMhKTtcblxuICAgIG5ld0hpc3RvcnlCbG9jay5vblJ1bkNob3Nlbi5zdWJzY3JpYmUoYXN5bmMgKGlkKSA9PiB0aGlzLmxpbmtGdW5jY2FsbChhd2FpdCB0aGlzLmxvYWRSdW4oaWQpKSk7XG5cbiAgICB1aS5lbXB0eSh0aGlzLmhpc3RvcnlSb290KTtcbiAgICB0aGlzLmhpc3RvcnlSb290LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdqdXN0aWZ5LWNvbnRlbnQnKTtcbiAgICB0aGlzLmhpc3RvcnlSb290LnN0eWxlLndpZHRoID0gJzEwMCUnO1xuICAgIHRoaXMuaGlzdG9yeVJvb3QuYXBwZW5kKG5ld0hpc3RvcnlCbG9jay5yb290KTtcbiAgICByZXR1cm4gbmV3SGlzdG9yeUJsb2NrLnJvb3Q7XG4gIH1cblxuICAvKipcbiAgICogTG9va3MgZm9yIHtAbGluayBzdXBwb3J0ZWRFeHBvcnRGb3JtYXRzfSBtZW1iZXJzIGFuZCBjcmVhdGVzIHJpYmJvbiBwYW5lbFxuICAgKiBAcmV0dXJucyBUaGUgSFRNTEVsZW1lbnRzIG9mIHJpYmJvblBhbmVsc1xuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIGJ1aWxkUmliYm9uUGFuZWxzKCk6IEhUTUxFbGVtZW50W11bXSB7XG4gICAgY29uc3QgbmV3UmliYm9uUGFuZWxzOiBIVE1MRWxlbWVudFtdW10gPSBbXG4gICAgICBbLi4uKHRoaXMuZXhwb3J0Q29uZmlnICYmIHRoaXMuZXhwb3J0Q29uZmlnLnN1cHBvcnRlZEZvcm1hdHMubGVuZ3RoID4gMCkgPyBbdWkuZGl2SChbXG4gICAgICAgIHVpLmNvbWJvUG9wdXAoXG4gICAgICAgICAgdWkuaWNvbkZBKCdhcnJvdy10by1ib3R0b20nKSxcbiAgICAgICAgICB0aGlzLmV4cG9ydENvbmZpZy5zdXBwb3J0ZWRGb3JtYXRzLFxuICAgICAgICAgIGFzeW5jIChmb3JtYXQ6IHN0cmluZykgPT4gREcuVXRpbHMuZG93bmxvYWQodGhpcy5leHBvcnRDb25maWchLmZpbGVuYW1lKGZvcm1hdCksIGF3YWl0IHRoaXMuZXhwb3J0Q29uZmlnIS5leHBvcnQoZm9ybWF0KSkpLFxuICAgICAgXSldOiBbXVxuICAgICAgXV07XG5cbiAgICBpZiAodGhpcy5mdW5jPy5pZCkge1xuICAgICAgY29uc3QgaGlzdG9yeUJ1dHRvbiA9IHVpLmljb25GQSgnaGlzdG9yeScsICgpID0+IHtcbiAgICAgICAgZ3Jvay5zaGVsbC53aW5kb3dzLnNob3dQcm9wZXJ0aWVzID0gIWdyb2suc2hlbGwud2luZG93cy5zaG93UHJvcGVydGllcztcbiAgICAgICAgaGlzdG9yeUJ1dHRvbi5jbGFzc0xpc3QudG9nZ2xlKCdkNC1jdXJyZW50Jyk7XG4gICAgICAgIGdyb2suc2hlbGwubyA9IHRoaXMuaGlzdG9yeVJvb3Q7XG4gICAgICB9KTtcblxuICAgICAgaGlzdG9yeUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdkNC10b2dnbGUtYnV0dG9uJyk7XG4gICAgICBpZiAoZ3Jvay5zaGVsbC53aW5kb3dzLnNob3dQcm9wZXJ0aWVzKSBoaXN0b3J5QnV0dG9uLmNsYXNzTGlzdC5hZGQoJ2Q0LWN1cnJlbnQnKTtcblxuICAgICAgbmV3UmliYm9uUGFuZWxzLnB1c2goW1xuICAgICAgICBoaXN0b3J5QnV0dG9uXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFJpYmJvblBhbmVscyhuZXdSaWJib25QYW5lbHMpO1xuICAgIHJldHVybiBuZXdSaWJib25QYW5lbHM7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgdG8gY3JlYXRlIGEgY3VzdG9tIHJpYmJvbiBtZW51IG9uIHRoZSB0b3AuXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGJ1aWxkUmliYm9uTWVudSgpIHtcblxuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBiZWZvcmUgc2F2aW5nIHRoZSBGVW5jQ2FsbCByZXN1bHRzIHRvIHRoZSBoaXN0b3JpY2FsIHJlc3VsdHMsIHJldHVybnMgdGhlIHNhdmVkIGNhbGwuIFNlZSBhbHNvIHtAbGluayBzYXZlUnVufS5cbiAgICogQHBhcmFtIGNhbGxUb1NhdmUgRnVuY0NhbGwgb2JqZWN0IHRvIHNhdmVcbiAgICogQHJldHVybnMgU2F2ZWQgRnVuY0NhbGxcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYXN5bmMgb25CZWZvcmVTYXZlUnVuKGNhbGxUb1NhdmU6IERHLkZ1bmNDYWxsKSB7IH1cblxuICAvKipcbiAgICogU2F2ZXMgdGhlIGNvbXB1dGF0aW9uIHJlc3VsdHMgdG8gdGhlIGhpc3RvcmljYWwgcmVzdWx0cywgcmV0dXJucyB0aGUgc2F2ZWQgY2FsbC4gU2VlIGFsc28ge0BsaW5rIHNhdmVSdW59LlxuICAgKiBAcGFyYW0gc2F2ZWRDYWxsIEZ1bmNDYWxsIG9iamVjdCB0byBzYXZlXG4gICAqIEByZXR1cm5zIFNhdmVkIEZ1bmNDYWxsXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGFzeW5jIG9uQWZ0ZXJTYXZlUnVuKHNhdmVkQ2FsbDogREcuRnVuY0NhbGwpIHsgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgY29tcHV0YXRpb24gcmVzdWx0cyB0byB0aGUgaGlzdG9yaWNhbCByZXN1bHRzLCByZXR1cm5zIHRoZSBzYXZlZCBjYWxsLiBTZWUgYWxzbyB7QGxpbmsgbG9hZFJ1bn0uXG4gICAqIEBwYXJhbSBjYWxsVG9TYXZlIEZ1bmNDYWxsIG9iamVjdCB0byBzYXZlXG4gICAqIEByZXR1cm5zIFNhdmVkIEZ1bmNDYWxsXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGFzeW5jIHNhdmVSdW4oY2FsbFRvU2F2ZTogREcuRnVuY0NhbGwpOiBQcm9taXNlPERHLkZ1bmNDYWxsPiB7XG4gICAgYXdhaXQgdGhpcy5vbkJlZm9yZVNhdmVSdW4oY2FsbFRvU2F2ZSk7XG4gICAgY29uc3Qgc2F2ZWRDYWxsID0gYXdhaXQgaGlzdG9yeVV0aWxzLnNhdmVSdW4oY2FsbFRvU2F2ZSk7XG4gICAgc2F2ZWRDYWxsLm9wdGlvbnNbJ2lzSGlzdG9yaWNhbCddID0gZmFsc2U7XG4gICAgdGhpcy5saW5rRnVuY2NhbGwoc2F2ZWRDYWxsKTtcbiAgICB0aGlzLmJ1aWxkSGlzdG9yeUJsb2NrKCk7XG4gICAgdGhpcy5wYXRoID0gYD9pZD0ke3NhdmVkQ2FsbC5pZH1gO1xuICAgIGF3YWl0IHRoaXMub25BZnRlclNhdmVSdW4oc2F2ZWRDYWxsKTtcbiAgICByZXR1cm4gc2F2ZWRDYWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBiZWZvcmUgZGVsZXRpbmcgdGhlIGNvbXB1dGF0aW9uIHJlc3VsdHMgZnJvbSBoaXN0b3J5LCByZXR1cm5zIGl0cyBpZC4gU2VlIGFsc28ge0BsaW5rIGxvYWRSdW59LlxuICAgKiBAcGFyYW0gY2FsbFRvRGVsZXRlIEZ1bmNDYWxsIG9iamVjdCB0byBiZSBkZWxldGVkXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGFzeW5jIG9uQmVmb3JlRGVsZXRlUnVuKGNhbGxUb0RlbGV0ZTogREcuRnVuY0NhbGwpIHsgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYWZ0ZXIgZGVsZXRpbmcgdGhlIGNvbXB1dGF0aW9uIHJlc3VsdHMgZnJvbSBoaXN0b3J5LCByZXR1cm5zIGl0cyBpZC4gU2VlIGFsc28ge0BsaW5rIGxvYWRSdW59LlxuICAgKiBAcGFyYW0gZGVsZXRlZENhbGwgZGVsZXRlZCBGdW5jQ2FsbCB2YWx1ZVxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBhc3luYyBvbkFmdGVyRGVsZXRlUnVuKGRlbGV0ZWRDYWxsOiBERy5GdW5jQ2FsbCkgeyB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIGNvbXB1dGF0aW9uIHJlc3VsdHMgZnJvbSBoaXN0b3J5LCByZXR1cm5zIGl0cyBpZC4gU2VlIGFsc28ge0BsaW5rIGxvYWRSdW59LlxuICAgKiBAcGFyYW0gY2FsbFRvRGVsZXRlIEZ1bmNDYWxsIG9iamVjdCB0byBkZWxldGVcbiAgICogQHJldHVybnMgSUQgb2YgZGVsZXRlZCBoaXN0b3JpY2FsIHJ1blxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG5cbiAgcHVibGljIGFzeW5jIGRlbGV0ZVJ1bihjYWxsVG9EZWxldGU6IERHLkZ1bmNDYWxsKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlRGVsZXRlUnVuKGNhbGxUb0RlbGV0ZSk7XG4gICAgYXdhaXQgaGlzdG9yeVV0aWxzLmRlbGV0ZVJ1bihjYWxsVG9EZWxldGUpO1xuICAgIGF3YWl0IHRoaXMub25BZnRlckRlbGV0ZVJ1bihjYWxsVG9EZWxldGUpO1xuICAgIHJldHVybiBjYWxsVG9EZWxldGUuaWQ7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGJlZm9yZSBmZXRjaGluZyB0aGUgaGlzdG9yaWNhbCBydW4gZGF0YSBpbiB7QGxpbmsgbG9hZFJ1bn0uXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGFzeW5jIG9uQmVmb3JlTG9hZFJ1bigpIHt9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBhZnRlciBmZXRjaGluZyB0aGUgaGlzdG9yaWNhbCBydW4gZGF0YSBpbiB7QGxpbmsgbG9hZFJ1bn0uXG4gICAqIEBwYXJhbSBmdW5jQ2FsbCBGdW5jQ2FsbCBmZXRjaGVkIGZyb20gc2VydmVyIGR1cmluZyB7QGxpbmsgbG9hZFJ1bn1cbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYXN5bmMgb25BZnRlckxvYWRSdW4oZnVuY0NhbGw6IERHLkZ1bmNDYWxsKSB7fVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0aGUgc3BlY2lmaWVkIGhpc3RvcmljYWwgcnVuLiBTZWUgYWxzbyB7QGxpbmsgc2F2ZVJ1bn0uXG4gICAqIEBwYXJhbSBmdW5jQ2FsbElkIElEIG9mIEZ1bmNDYWxsIHRvIGxvb2sgZm9yLiBHZXQgaXQgdXNpbmcge0BzZWUgZnVuY0NhbGwuaWR9IGZpZWxkXG4gICAqIEByZXR1cm5zIEZ1bmNDYWxsIGF1Z2VtZW50ZWQgd2l0aCBpbnB1dHMnIGFuZCBvdXRwdXRzJyB2YWx1ZXNcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuXG4gIHB1YmxpYyBhc3luYyBsb2FkUnVuKGZ1bmNDYWxsSWQ6IHN0cmluZyk6IFByb21pc2U8REcuRnVuY0NhbGw+IHtcbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlTG9hZFJ1bigpO1xuICAgIGNvbnN0IHB1bGxlZFJ1biA9IGF3YWl0IGhpc3RvcnlVdGlscy5sb2FkUnVuKGZ1bmNDYWxsSWQpO1xuICAgIGF3YWl0IHRoaXMub25BZnRlckxvYWRSdW4ocHVsbGVkUnVuKTtcbiAgICByZXR1cm4gcHVsbGVkUnVuO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBiZWZvcmUgYWN0dWFsIGNvbXB1dGF0aW9ucyBhcmUgbWFkZSB7QGxpbmsgcnVufS5cbiAgICogQHBhcmFtIGZ1bmNUb0NhbGwgRnVuY0NhbGwgb2JqZWN0IHRvIGJlIGNhbGxlZCB7QHNlZSBERy5GdW5jQ2FsbC5jYWxsKCl9XG4gICAqIEBzdGFiaWxpdHkgRXhwZXJpbWVudGFsXG4gICovXG4gIHB1YmxpYyBhc3luYyBvbkJlZm9yZVJ1bihmdW5jVG9DYWxsOiBERy5GdW5jQ2FsbCkge31cblxuICAvKipcbiAgICAqIENhbGxlZCBhZnRlciBhY3R1YWwgY29tcHV0YXRpb25zIGFyZSBtYWRlIHtAbGluayBydW59LlxuICAgICogQHBhcmFtIHJ1bkZ1bmMgRnVuY0NhbGwgb2JqZWN0IGFmdGVyIGNhbGwgbWV0aG9kIHtAc2VlIERHLkZ1bmNDYWxsLmNhbGwoKX1cbiAgICAqIEBzdGFiaWxpdHkgRXhwZXJpbWVudGFsXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgb25BZnRlclJ1bihydW5GdW5jOiBERy5GdW5jQ2FsbCkge31cblxuICBwdWJsaWMgYXN5bmMgcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5mdW5jQ2FsbCkgdGhyb3cgbmV3IEVycm9yKCdUaGUgY29ycmVzcG9kaW5nIGZ1bmN0aW9uIGlzIG5vdCBzcGVjaWZpZWQnKTtcblxuICAgIGF3YWl0IHRoaXMub25CZWZvcmVSdW4odGhpcy5mdW5jQ2FsbCk7XG4gICAgY29uc3QgcGkgPSBERy5UYXNrQmFyUHJvZ3Jlc3NJbmRpY2F0b3IuY3JlYXRlKCdDYWxjdWxhdGluZy4uLicpO1xuICAgIHRoaXMuZnVuY0NhbGwubmV3SWQoKTtcbiAgICBhd2FpdCB0aGlzLmZ1bmNDYWxsLmNhbGwoKTsgLy8gbXV0YXRlcyB0aGUgZnVuY0NhbGwgZmllbGRcbiAgICBwaS5jbG9zZSgpO1xuICAgIGF3YWl0IHRoaXMub25BZnRlclJ1bih0aGlzLmZ1bmNDYWxsKTtcblxuICAgIHRoaXMubGFzdENhbGwgPSBhd2FpdCB0aGlzLnNhdmVSdW4odGhpcy5mdW5jQ2FsbCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGlzdG9yeVJvb3Q6IEhUTUxEaXZFbGVtZW50ID0gdWkuZGl2VihbXSwge3N0eWxlOiB7J2p1c3RpZnktY29udGVudCc6ICdjZW50ZXInfX0pO1xuXG4gIHByb3RlY3RlZCBkZWZhdWx0RXhwb3J0RmlsZW5hbWUgPSAoZm9ybWF0OiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gYCR7dGhpcy5uYW1lfSAtICR7bmV3IERhdGUoKS50b0xvY2FsZVN0cmluZygpfS4ke3RoaXMuZXhwb3J0Q29uZmlnIS5zdXBwb3J0ZWRFeHRlbnNpb25zW2Zvcm1hdF19YDtcbiAgfTtcblxuICBwcm90ZWN0ZWQgZGVmYXVsdFN1cHBvcnRlZEV4cG9ydEV4dGVuc2lvbnMgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdFeGNlbCc6ICd4bHN4J1xuICAgIH07XG4gIH07XG5cbiAgcHJvdGVjdGVkIGRlZmF1bHRTdXBwb3J0ZWRFeHBvcnRGb3JtYXRzID0gKCkgPT4ge1xuICAgIHJldHVybiBbJ0V4Y2VsJ107XG4gIH07XG59XG4iXX0=
|
|
@@ -1,18 +1,32 @@
|
|
|
1
1
|
import * as DG from 'datagrok-api/dg';
|
|
2
2
|
import { Subject } from 'rxjs';
|
|
3
3
|
import '../../css/history-panel.css';
|
|
4
|
+
export declare const defaultUsersIds: {
|
|
5
|
+
Test: string;
|
|
6
|
+
Admin: string;
|
|
7
|
+
System: string;
|
|
8
|
+
};
|
|
9
|
+
export declare const defaultGroupsIds: {
|
|
10
|
+
'All users': string;
|
|
11
|
+
Developers: string;
|
|
12
|
+
'Need to create': string;
|
|
13
|
+
Test: string;
|
|
14
|
+
Admin: string;
|
|
15
|
+
System: string;
|
|
16
|
+
Administrators: string;
|
|
17
|
+
};
|
|
4
18
|
export declare class HistoryPanel {
|
|
5
19
|
private func;
|
|
6
20
|
onRunChosen: Subject<string>;
|
|
7
21
|
beforeRunAddToFavorites: Subject<DG.FuncCall>;
|
|
8
22
|
beforeRunAddToShared: Subject<DG.FuncCall>;
|
|
9
|
-
beforeRunRemoveFromFavorites: Subject<
|
|
10
|
-
beforeRunRemoveFromShared: Subject<
|
|
23
|
+
beforeRunRemoveFromFavorites: Subject<DG.FuncCall>;
|
|
24
|
+
beforeRunRemoveFromShared: Subject<DG.FuncCall>;
|
|
11
25
|
beforeRunDeleted: Subject<string>;
|
|
12
26
|
afterRunAddToFavorites: Subject<DG.FuncCall>;
|
|
13
27
|
afterRunAddToShared: Subject<DG.FuncCall>;
|
|
14
|
-
afterRunRemoveFromFavorites: Subject<
|
|
15
|
-
afterRunRemoveFromShared: Subject<
|
|
28
|
+
afterRunRemoveFromFavorites: Subject<DG.FuncCall>;
|
|
29
|
+
afterRunRemoveFromShared: Subject<DG.FuncCall>;
|
|
16
30
|
afterRunDeleted: Subject<string>;
|
|
17
31
|
private store;
|
|
18
32
|
private myRunsFilter;
|
|
@@ -39,6 +53,10 @@ export declare class HistoryPanel {
|
|
|
39
53
|
renderSharedCards(funcCalls: DG.FuncCall[]): HTMLDivElement;
|
|
40
54
|
renderHistoryCards(funcCalls: DG.FuncCall[]): HTMLDivElement;
|
|
41
55
|
constructor(func: DG.Func);
|
|
56
|
+
private addRunToFavorites;
|
|
57
|
+
private removeRunFromFavorites;
|
|
58
|
+
private addRunToShared;
|
|
59
|
+
private removeRunFromShared;
|
|
42
60
|
get root(): HTMLDivElement;
|
|
43
61
|
}
|
|
44
62
|
//# sourceMappingURL=history-panel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history-panel.d.ts","sourceRoot":"","sources":["history-panel.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"history-panel.d.ts","sourceRoot":"","sources":["history-panel.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGtC,OAAO,EAAkB,OAAO,EAAC,MAAM,MAAM,CAAC;AAE9C,OAAO,6BAA6B,CAAC;AAErC,eAAO,MAAM,eAAe;;;;CAI3B,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;CAQ5B,CAAC;AAiDF,qBAAa,YAAY;IAsTrB,OAAO,CAAC,IAAI;IApTP,WAAW,kBAAyB;IAGpC,uBAAuB,uBAA8B;IAGrD,oBAAoB,uBAA8B;IAGlD,4BAA4B,uBAA8B;IAG1D,yBAAyB,uBAA8B;IAGvD,gBAAgB,kBAAyB;IAGzC,sBAAsB,uBAA8B;IAGpD,mBAAmB,uBAA8B;IAGjD,2BAA2B,uBAA8B;IAGzD,wBAAwB,uBAA8B;IAGtD,eAAe,kBAAyB;IAE/C,OAAO,CAAC,KAAK,CAA2B;IAExC,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,gBAAgB,CAAuB;IAExC,YAAY,gBAAuB;IAE1C,UAAU,iBAAY;IACtB,MAAM,iBAAY;IAClB,SAAS,iBAAY;IACrB,IAAI,gBAID;IACH,UAAU,iBAAY;IAEtB,OAAO,CAAC,KAAK,CAOgC;IAE7C,OAAO,gBAAuB;IAC9B,aAAa,gBAAuB;IACpC,WAAW,gBAAuB;IAElC,gBAAgB;IAkEhB,mBAAmB,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ;IASzC,gBAAgB,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,EAAE;IAM1C,mBAAmB,CAAC,YAAY,EAAE,EAAE,CAAC,QAAQ,EAAE;IAM/C,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,EAAE;IAMlC,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ;IA8DhC,cAAc,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ;IA0EpC,mBAAmB,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE;IAK5C,iBAAiB,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE;IAK1C,kBAAkB,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE;gBAMjC,IAAI,EAAE,EAAE,CAAC,IAAI;YAiET,iBAAiB;YASjB,sBAAsB;YAWtB,cAAc;YA4Bd,mBAAmB;IAWjC,IAAW,IAAI,mBAEd;CACF"}
|
|
@@ -12,10 +12,24 @@ import * as grok from 'datagrok-api/grok';
|
|
|
12
12
|
import * as ui from 'datagrok-api/ui';
|
|
13
13
|
import * as DG from 'datagrok-api/dg';
|
|
14
14
|
import dayjs from 'dayjs';
|
|
15
|
+
import wu from 'wu';
|
|
15
16
|
import { BehaviorSubject, Subject } from 'rxjs';
|
|
16
|
-
import { defaultUsersIds } from '../function-view';
|
|
17
17
|
import { historyUtils } from '../history-utils';
|
|
18
18
|
import '../../css/history-panel.css';
|
|
19
|
+
export const defaultUsersIds = {
|
|
20
|
+
'Test': 'ca1e672e-e3be-40e0-b79b-d2c68e68d380',
|
|
21
|
+
'Admin': '878c42b0-9a50-11e6-c537-6bf8e9ab02ee',
|
|
22
|
+
'System': '3e32c5fa-ac9c-4d39-8b4b-4db3e576b3c3',
|
|
23
|
+
};
|
|
24
|
+
export const defaultGroupsIds = {
|
|
25
|
+
'All users': 'a4b45840-9a50-11e6-9cc9-8546b8bf62e6',
|
|
26
|
+
'Developers': 'ba9cd191-9a50-11e6-9cc9-910bf827f0ab',
|
|
27
|
+
'Need to create': '00000000-0000-0000-0000-000000000000',
|
|
28
|
+
'Test': 'ca1e672e-e3be-40e0-b79b-8546b8bf62e6',
|
|
29
|
+
'Admin': 'a4b45840-9a50-11e6-c537-6bf8e9ab02ee',
|
|
30
|
+
'System': 'a4b45840-ac9c-4d39-8b4b-4db3e576b3c3',
|
|
31
|
+
'Administrators': '1ab8b38d-9c4e-4b1e-81c3-ae2bde3e12c5',
|
|
32
|
+
};
|
|
19
33
|
class HistoryPanelStore {
|
|
20
34
|
constructor() {
|
|
21
35
|
this.filteringOptions = { text: '' };
|
|
@@ -135,14 +149,14 @@ export class HistoryPanel {
|
|
|
135
149
|
editedRun.options['isShared'] = true;
|
|
136
150
|
this.store.allRuns.next(this.store.allRuns.value);
|
|
137
151
|
});
|
|
138
|
-
this.afterRunRemoveFromFavorites.subscribe((
|
|
139
|
-
const editedRun = this.store.allRuns.value.find((call) => call.id === id);
|
|
152
|
+
this.afterRunRemoveFromFavorites.subscribe((removed) => {
|
|
153
|
+
const editedRun = this.store.allRuns.value.find((call) => call.id === removed.id);
|
|
140
154
|
editedRun.options['isFavorite'] = false;
|
|
141
155
|
clearMetadata(editedRun);
|
|
142
156
|
this.store.allRuns.next(this.store.allRuns.value);
|
|
143
157
|
});
|
|
144
|
-
this.afterRunRemoveFromShared.subscribe((
|
|
145
|
-
const editedRun = this.store.allRuns.value.find((call) => call.id === id);
|
|
158
|
+
this.afterRunRemoveFromShared.subscribe((removed) => {
|
|
159
|
+
const editedRun = this.store.allRuns.value.find((call) => call.id === removed.id);
|
|
146
160
|
editedRun.options['isShared'] = false;
|
|
147
161
|
clearMetadata(editedRun);
|
|
148
162
|
this.store.allRuns.next(this.store.allRuns.value);
|
|
@@ -326,19 +340,27 @@ export class HistoryPanel {
|
|
|
326
340
|
}
|
|
327
341
|
if (isShared && !funcCall.options['isShared']) {
|
|
328
342
|
funcCall.options['isShared'] = isShared;
|
|
329
|
-
this.
|
|
343
|
+
ui.setUpdateIndicator(this.tabs.root, true);
|
|
344
|
+
yield this.addRunToShared(funcCall);
|
|
345
|
+
ui.setUpdateIndicator(this.tabs.root, false);
|
|
330
346
|
}
|
|
331
347
|
if (!isShared && funcCall.options['isShared']) {
|
|
332
348
|
funcCall.options['isShared'] = isShared;
|
|
333
|
-
this.
|
|
349
|
+
ui.setUpdateIndicator(this.tabs.root, true);
|
|
350
|
+
yield this.removeRunFromShared(funcCall);
|
|
351
|
+
ui.setUpdateIndicator(this.tabs.root, false);
|
|
334
352
|
}
|
|
335
353
|
if (isFavorite && !funcCall.options['isFavorite']) {
|
|
336
354
|
funcCall.options['isFavorite'] = isFavorite;
|
|
337
|
-
this.
|
|
355
|
+
ui.setUpdateIndicator(this.tabs.root, true);
|
|
356
|
+
yield this.addRunToFavorites(funcCall);
|
|
357
|
+
ui.setUpdateIndicator(this.tabs.root, false);
|
|
338
358
|
}
|
|
339
359
|
if (!isFavorite && funcCall.options['isFavorite']) {
|
|
340
360
|
funcCall.options['isFavorite'] = isFavorite;
|
|
341
|
-
this.
|
|
361
|
+
ui.setUpdateIndicator(this.tabs.root, true);
|
|
362
|
+
yield this.removeRunFromFavorites(funcCall);
|
|
363
|
+
ui.setUpdateIndicator(this.tabs.root, false);
|
|
342
364
|
}
|
|
343
365
|
}))
|
|
344
366
|
.show({ center: true });
|
|
@@ -359,8 +381,61 @@ export class HistoryPanel {
|
|
|
359
381
|
return ui.divV(this.myCards, { style: { height: '100%' } });
|
|
360
382
|
}
|
|
361
383
|
;
|
|
384
|
+
addRunToFavorites(callToFavorite) {
|
|
385
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
386
|
+
callToFavorite.options['isFavorite'] = true;
|
|
387
|
+
this.beforeRunAddToFavorites.next(callToFavorite);
|
|
388
|
+
const savedFavorite = yield grok.dapi.functions.calls.allPackageVersions().save(callToFavorite);
|
|
389
|
+
this.afterRunAddToFavorites.next(savedFavorite);
|
|
390
|
+
return savedFavorite;
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
removeRunFromFavorites(callToUnfavorite) {
|
|
394
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
395
|
+
callToUnfavorite.options['title'] = null;
|
|
396
|
+
callToUnfavorite.options['description'] = null;
|
|
397
|
+
callToUnfavorite.options['isFavorite'] = false;
|
|
398
|
+
this.beforeRunRemoveFromFavorites.next(callToUnfavorite);
|
|
399
|
+
const favoriteSave = yield grok.dapi.functions.calls.allPackageVersions().save(callToUnfavorite);
|
|
400
|
+
this.afterRunRemoveFromFavorites.next(favoriteSave);
|
|
401
|
+
return favoriteSave;
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
addRunToShared(callToShare) {
|
|
405
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
406
|
+
callToShare.options['isShared'] = true;
|
|
407
|
+
this.beforeRunAddToShared.next(callToShare);
|
|
408
|
+
const allGroup = yield grok.dapi.groups.find(defaultGroupsIds['All users']);
|
|
409
|
+
const dfOutputs = wu(callToShare.outputParams.values())
|
|
410
|
+
.filter((output) => output.property.propertyType === DG.TYPE.DATA_FRAME);
|
|
411
|
+
for (const output of dfOutputs) {
|
|
412
|
+
const df = callToShare.outputs[output.name];
|
|
413
|
+
yield grok.dapi.permissions.grant(df.getTableInfo(), allGroup, false);
|
|
414
|
+
}
|
|
415
|
+
const dfInputs = wu(callToShare.inputParams.values())
|
|
416
|
+
.filter((input) => input.property.propertyType === DG.TYPE.DATA_FRAME);
|
|
417
|
+
for (const input of dfInputs) {
|
|
418
|
+
const df = callToShare.inputs[input.name];
|
|
419
|
+
yield grok.dapi.permissions.grant(df.getTableInfo(), allGroup, false);
|
|
420
|
+
}
|
|
421
|
+
const savedShared = yield grok.dapi.functions.calls.allPackageVersions().save(callToShare);
|
|
422
|
+
this.afterRunAddToShared.next(savedShared);
|
|
423
|
+
return savedShared;
|
|
424
|
+
});
|
|
425
|
+
}
|
|
426
|
+
removeRunFromShared(callToUnshare) {
|
|
427
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
428
|
+
callToUnshare.options['title'] = null;
|
|
429
|
+
callToUnshare.options['description'] = null;
|
|
430
|
+
callToUnshare.options['isShared'] = false;
|
|
431
|
+
this.beforeRunRemoveFromShared.next(callToUnshare);
|
|
432
|
+
const savedShared = yield grok.dapi.functions.calls.allPackageVersions().save(callToUnshare);
|
|
433
|
+
this.afterRunRemoveFromShared.next(savedShared);
|
|
434
|
+
return savedShared;
|
|
435
|
+
});
|
|
436
|
+
}
|
|
362
437
|
get root() {
|
|
363
438
|
return this._root;
|
|
364
439
|
}
|
|
365
440
|
}
|
|
366
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeS1wYW5lbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhpc3RvcnktcGFuZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsNEJBQTRCO0FBQzVCLE9BQU8sS0FBSyxJQUFJLE1BQU0sbUJBQW1CLENBQUM7QUFDMUMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUMsZUFBZSxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sNkJBQTZCLENBQUM7QUFFckMsTUFBTSxpQkFBaUI7SUFBdkI7UUFDRSxxQkFBZ0IsR0FBRyxFQUFDLElBQUksRUFBRSxFQUFFLEVBSTNCLENBQUM7UUFFRixZQUFPLEdBQUcsSUFBSSxlQUFlLENBQWdCLEVBQUUsQ0FBQyxDQUFDO0lBc0NuRCxDQUFDO0lBcENDLElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FB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LFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQzVFLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUFBLENBQUM7SUFFRixpQkFBaUIsQ0FBQyxTQUF3QjtRQUN4QyxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMxRSxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFBQSxDQUFDO0lBRUYsa0JBQWtCLENBQUMsU0FBd0I7UUFDekMsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDdEUsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBQyxLQUFLLEVBQUUsRUFBQyxNQUFNLEVBQUUsTUFBTSxFQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFBQSxDQUFDO0lBb0VGLElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZGVmYXVsdFVzZXJzSWRzfSBmcm9tICcuLi9mdW5jdGlvbi12aWV3JztcbmltcG9ydCB7aGlzdG9yeVV0aWxzfSBmcm9tICcuLi9oaXN0b3J5LXV0aWxzJztcbmltcG9ydCAnLi4vLi4vY3NzL2hpc3RvcnktcGFuZWwuY3NzJztcblxuY2xhc3MgSGlzdG9yeVBhbmVsU3RvcmUge1xuICBmaWx0ZXJpbmdPcHRpb25zID0ge3RleHQ6ICcnfSBhcyB7XG4gICAgdGV4dDogc3RyaW5nLFxuICAgIGF1dGhvcj86IERHLlVzZXIsXG4gICAgc3RhcnRlZEFmdGVyPzogZGF5anMuRGF5anMsXG4gIH07XG5cbiAgYWxsUnVucyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8REcuRnVuY0NhbGxbXT4oW10pO1xuXG4gIGdldCBteVJ1bnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWxsUnVucy52YWx1ZS5maWx0ZXIoKHJ1bikgPT4gcnVuLmF1dGhvci5pZCA9PT0gZ3Jvay5zaGVsbC51c2VyLmlkKTtcbiAgfVxuXG4gIGdldCBmYXZvcml0ZVJ1bnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWxsUnVucy52YWx1ZS5maWx0ZXIoKHJ1bikgPT4gcnVuLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSAmJiAhcnVuLm9wdGlvbnNbJ2lzSW1wb3J0ZWQnXSk7XG4gIH1cblxuICBnZXQgc2hhcmVkUnVucygpIHtcbiAgICByZXR1cm4gdGhpcy5hbGxSdW5zLnZhbHVlLmZpbHRlcigocnVuKSA9PiBydW4ub3B0aW9uc1snaXNTaGFyZWQnXSk7XG4gIH1cblxuICBnZXQgZmlsdGVyZWRNeVJ1bnMoKSB7XG4gICAgcmV0dXJuIHRoaXMubXlSdW5zLmZpbHRlcigodmFsKSA9PiAodGhpcy5maWx0ZXJpbmdPcHRpb25zLnN0YXJ0ZWRBZnRlciA/IHZhbC5zdGFydGVkID4gdGhpcy5maWx0ZXJpbmdPcHRpb25zLnN0YXJ0ZWRBZnRlciA6IHRydWUpKTtcbiAgfVxuXG4gIGdldCBmaWx0ZXJlZEZhdm9yaXRlUnVucygpIHtcbiAgICByZXR1cm4gdGhpcy5mYXZvcml0ZVJ1bnMuZmlsdGVyKCh2YWwpID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0ZWRBZnRlciA9ICh0aGlzLmZpbHRlcmluZ09wdGlvbnMuc3RhcnRlZEFmdGVyID8gdmFsLnN0YXJ0ZWQgPiB0aGlzLmZpbHRlcmluZ09wdGlvbnMuc3RhcnRlZEFmdGVyIDogdHJ1ZSk7XG4gICAgICBjb25zdCB0aXRsZUNvbnRhaW5zVGV4dCA9ICghdGhpcy5maWx0ZXJpbmdPcHRpb25zLnRleHQubGVuZ3RoKSA/IHRydWUgOiAoISF2YWwub3B0aW9uc1sndGl0bGUnXSkgPyB2YWwub3B0aW9uc1sndGl0bGUnXS5pbmNsdWRlcyh0aGlzLmZpbHRlcmluZ09wdGlvbnMudGV4dCk6IGZhbHNlO1xuICAgICAgY29uc3QgZGVzY0NvbnRhaW5zVGV4dCA9ICghdGhpcy5maWx0ZXJpbmdPcHRpb25zLnRleHQubGVuZ3RoKSA/IHRydWUgOiAoISF2YWwub3B0aW9uc1snZGVzY3JpcHRpb24nXSkgPyB2YWwub3B0aW9uc1snZGVzY3JpcHRpb24nXS5pbmNsdWRlcyh0aGlzLmZpbHRlcmluZ09wdGlvbnMudGV4dCk6IGZhbHNlO1xuXG4gICAgICByZXR1cm4gKHRpdGxlQ29udGFpbnNUZXh0IHx8IGRlc2NDb250YWluc1RleHQpICYmIHN0YXJ0ZWRBZnRlcjtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBmaWx0ZXJlZFNoYXJlZFJ1bnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hhcmVkUnVucy5maWx0ZXIoKHZhbCkgPT4ge1xuICAgICAgY29uc3QgaXNBdXRob3JlZCA9IHRoaXMuZmlsdGVyaW5nT3B0aW9ucy5hdXRob3IgPyB2YWwuYXV0aG9yLmlkID09PSB0aGlzLmZpbHRlcmluZ09wdGlvbnMuYXV0aG9yLmlkOiB0cnVlO1xuICAgICAgY29uc3Qgc3RhcnRlZEFmdGVyID0gKHRoaXMuZmlsdGVyaW5nT3B0aW9ucy5zdGFydGVkQWZ0ZXIgPyB2YWwuc3RhcnRlZCA+IHRoaXMuZmlsdGVyaW5nT3B0aW9ucy5zdGFydGVkQWZ0ZXIgOiB0cnVlKTtcbiAgICAgIGNvbnN0IHRpdGxlQ29udGFpbnNUZXh0ID0gKCF0aGlzLmZpbHRlcmluZ09wdGlvbnMudGV4dC5sZW5ndGgpID8gdHJ1ZSA6ICghIXZhbC5vcHRpb25zWyd0aXRsZSddKSA/IHZhbC5vcHRpb25zWyd0aXRsZSddLmluY2x1ZGVzKHRoaXMuZmlsdGVyaW5nT3B0aW9ucy50ZXh0KTogZmFsc2U7XG4gICAgICBjb25zdCBkZXNjQ29udGFpbnNUZXh0ID0gKCF0aGlzLmZpbHRlcmluZ09wdGlvbnMudGV4dC5sZW5ndGgpID8gdHJ1ZSA6ICghIXZhbC5vcHRpb25zWydkZXNjcmlwdGlvbiddKSA/IHZhbC5vcHRpb25zWydkZXNjcmlwdGlvbiddLmluY2x1ZGVzKHRoaXMuZmlsdGVyaW5nT3B0aW9ucy50ZXh0KTogZmFsc2U7XG5cbiAgICAgIHJldHVybiAodGl0bGVDb250YWluc1RleHQgfHwgZGVzY0NvbnRhaW5zVGV4dCkgJiYgc3RhcnRlZEFmdGVyICYmIGlzQXV0aG9yZWQ7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEhpc3RvcnlQYW5lbCB7XG4gIC8vIEVtaXR0ZWQgd2hlbiBGdW5jQ2FsbCBzaG91bGQgaXMgY2hvc2VuLiBDb250YWlucyBGdW5jQ2FsbCBJRFxuICBwdWJsaWMgb25SdW5DaG9zZW4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG5cbiAgLy8gRW1pdHRlZCB3aGVuIEZ1bmNDYWxsIGlzIGFkZGVkIHRvIGZhdm9yaXRlc1xuICBwdWJsaWMgYmVmb3JlUnVuQWRkVG9GYXZvcml0ZXMgPSBuZXcgU3ViamVjdDxERy5GdW5jQ2FsbD4oKTtcblxuICAvLyBFbWl0dGVkIHdoZW4gRnVuY0NhbGwgaXMgYWRkZWQgdG8gc2hhcmVkXG4gIHB1YmxpYyBiZWZvcmVSdW5BZGRUb1NoYXJlZCA9IG5ldyBTdWJqZWN0PERHLkZ1bmNDYWxsPigpO1xuXG4gIC8vIEVtaXR0ZWQgd2hlbiBGdW5jQ2FsbCBpcyByZW1vdmVkIGZyb20gZmF2b3JpdGVzXG4gIHB1YmxpYyBiZWZvcmVSdW5SZW1vdmVGcm9tRmF2b3JpdGVzID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gIC8vIEVtaXR0ZWQgd2hlbiBGdW5jQ2FsbCBpcyByZW1vdmVkIGZyb20gc2hhcmVkXG4gIHB1YmxpYyBiZWZvcmVSdW5SZW1vdmVGcm9tU2hhcmVkID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gIC8vIEVtaXR0ZWQgd2hlbiBGdW5jQ2FsbCBpcyBkZWxldGVkXG4gIHB1YmxpYyBiZWZvcmVSdW5EZWxldGVkID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gIC8vIEVtaXR0ZWQgd2hlbiBGdW5jQ2FsbCBpcyBhZGRlZCB0byBmYXZvcml0ZXNcbiAgcHVibGljIGFmdGVyUnVuQWRkVG9GYXZvcml0ZXMgPSBuZXcgU3ViamVjdDxERy5GdW5jQ2FsbD4oKTtcblxuICAvLyBFbWl0dGVkIHdoZW4gRnVuY0NhbGwgaXMgYWRkZWQgdG8gc2hhcmVkXG4gIHB1YmxpYyBhZnRlclJ1bkFkZFRvU2hhcmVkID0gbmV3IFN1YmplY3Q8REcuRnVuY0NhbGw+KCk7XG5cbiAgLy8gRW1pdHRlZCB3aGVuIEZ1bmNDYWxsIGlzIHJlbW92ZWQgZnJvbSBmYXZvcml0ZXNcbiAgcHVibGljIGFmdGVyUnVuUmVtb3ZlRnJvbUZhdm9yaXRlcyA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcblxuICAvLyBFbWl0dGVkIHdoZW4gRnVuY0NhbGwgaXMgcmVtb3ZlZCBmcm9tIHNoYXJlZFxuICBwdWJsaWMgYWZ0ZXJSdW5SZW1vdmVGcm9tU2hhcmVkID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gIC8vIEVtaXR0ZWQgd2hlbiBGdW5jQ2FsbCBpcyBkZWxldGVkXG4gIHB1YmxpYyBhZnRlclJ1bkRlbGV0ZWQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG5cbiAgcHJpdmF0ZSBzdG9yZSA9IG5ldyBIaXN0b3J5UGFuZWxTdG9yZSgpO1xuXG4gIHByaXZhdGUgbXlSdW5zRmlsdGVyID0gbmV3IFN1YmplY3Q8dHJ1ZT4oKTtcbiAgcHJpdmF0ZSBmYXZSdW5zRmlsdGVyID0gbmV3IFN1YmplY3Q8dHJ1ZT4oKTtcbiAgcHJpdmF0ZSBzaGFyZWRSdW5zRmlsdGVyID0gbmV3IFN1YmplY3Q8dHJ1ZT4oKTtcblxuICBwdWJsaWMgYWxsUnVuc0ZldGNoID0gbmV3IFN1YmplY3Q8dHJ1ZT4oKTtcblxuICBoaXN0b3J5VGFiID0gdWkuZGl2KCk7XG4gIGZhdlRhYiA9IHVpLmRpdigpO1xuICBzaGFyZWRUYWIgPSB1aS5kaXYoKTtcbiAgdGFicyA9IHVpLnRhYkNvbnRyb2woe1xuICAgICdISVNUT1JZJzogdWkuYm94KHRoaXMuaGlzdG9yeVRhYiksXG4gICAgJ0ZBVk9SSVRFUyc6IHVpLmJveCh0aGlzLmZhdlRhYiksXG4gICAgJ1NIQVJFRCc6IHVpLmJveCh0aGlzLnNoYXJlZFRhYiksXG4gIH0pO1xuICBmaWx0ZXJQYW5lID0gdWkuZGl2KCk7XG5cbiAgcHJpdmF0ZSBfcm9vdCA9IHVpLmRpdlYoW1xuICAgIHVpLnBhbmVsKFtcbiAgICAgIHVpLmgyKCdIaXN0b3J5JyksXG4gICAgICB0aGlzLmZpbHRlclBhbmUsXG4gICAgXSksXG4gICAgdWkuZWxlbWVudCgnZGl2JywgJ3NwbGl0YmFyLWhvcml6b250YWwnKSxcbiAgICB0aGlzLnRhYnMucm9vdCxcbiAgXSwge3N0eWxlOiB7d2lkdGg6ICcxMDAlJywgaGVpZ2h0OiAnMTAwJSd9fSk7XG5cbiAgbXlDYXJkcyA9IFtdIGFzIEhUTUxFbGVtZW50W107XG4gIGZhdm9yaXRlQ2FyZHMgPSBbXSBhcyBIVE1MRWxlbWVudFtdO1xuICBzaGFyZWRDYXJkcyA9IFtdIGFzIEhUTUxFbGVtZW50W107XG5cbiAgdXBkYXRlRmlsdGVyUGFuZSgpIHtcbiAgICBjb25zdCBidWlsZEZpbHRlclBhbmUgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gdWkud2FpdChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbHRlcmluZ1RleHQgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgICAgIGNvbnN0IHRleHRJbnB1dCA9IHVpLnN0cmluZ0lucHV0KCdTZWFyY2gnLCAnJywgKHY6IHN0cmluZykgPT4gZmlsdGVyaW5nVGV4dC5uZXh0KHYpKTtcbiAgICAgICAgdGV4dElucHV0LnJvb3Quc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgREcuZGVib3VuY2UoZmlsdGVyaW5nVGV4dC5hc09ic2VydmFibGUoKSwgNjAwKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc3RvcmUuZmlsdGVyaW5nT3B0aW9ucy50ZXh0ID0gdGV4dElucHV0LnN0cmluZ1ZhbHVlO1xuICAgICAgICAgIHRoaXMuZmF2UnVuc0ZpbHRlci5uZXh0KCk7XG4gICAgICAgICAgdGhpcy5zaGFyZWRSdW5zRmlsdGVyLm5leHQoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZGF0ZUlucHV0ID0gdWkuZGF0ZUlucHV0KCdTdGFydGVkIGFmdGVyJywgZGF5anMoKS5zdWJ0cmFjdCgxLCAnd2VlaycpLCAodjogZGF5anMuRGF5anMpID0+IHtcbiAgICAgICAgICB0aGlzLnN0b3JlLmZpbHRlcmluZ09wdGlvbnMuc3RhcnRlZEFmdGVyID0gdjtcbiAgICAgICAgICB0aGlzLm15UnVuc0ZpbHRlci5uZXh0KCk7XG4gICAgICAgICAgdGhpcy5mYXZSdW5zRmlsdGVyLm5leHQoKTtcbiAgICAgICAgICB0aGlzLnNoYXJlZFJ1bnNGaWx0ZXIubmV4dCgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBkZWZhdWx0VXNlcnMgPSBPYmplY3QudmFsdWVzKGRlZmF1bHRVc2Vyc0lkcyk7XG4gICAgICAgIGNvbnN0IGFsbFVzZXJzID0gYXdhaXQgZ3Jvay5kYXBpLnVzZXJzLmxpc3QoKSBhcyBERy5Vc2VyW107XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkVXNlcnMgPSBhbGxVc2Vycy5maWx0ZXIoKHVzZXIpID0+ICFkZWZhdWx0VXNlcnMuaW5jbHVkZXModXNlci5pZCkpO1xuXG4gICAgICAgIGNvbnN0IGF1dGhvcklucHV0ID0gdWkuY2hvaWNlSW5wdXQ8REcuVXNlciB8IHN0cmluZz4oJ0F1dGhvcicsICdBbnlvbmUnLCBbJ0FueW9uZScsIC4uLmZpbHRlcmVkVXNlcnNdLCAodjogREcuVXNlciB8IHN0cmluZykgPT4ge1xuICAgICAgICAgIHRoaXMuc3RvcmUuZmlsdGVyaW5nT3B0aW9ucy5hdXRob3IgPSAodiA9PT0gJ0FueW9uZScpID8gdW5kZWZpbmVkIDogdiBhcyBERy5Vc2VyO1xuICAgICAgICAgIHRoaXMuc2hhcmVkUnVuc0ZpbHRlci5uZXh0KCk7XG4gICAgICAgIH0pO1xuICAgICAgICBhdXRob3JJbnB1dC5yb290LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICAgICAgZGF0ZUlucHV0LmFkZFBhdHRlcm5NZW51KCdkYXRldGltZScpO1xuICAgICAgICBjb25zdCBmb3JtID0gdWkuZGl2VihbXG4gICAgICAgICAgdGV4dElucHV0LFxuICAgICAgICAgIGRhdGVJbnB1dCxcbiAgICAgICAgICBhdXRob3JJbnB1dCxcbiAgICAgICAgXSwgJ3VpLWZvcm0gdWktZm9ybS13aWRlIHVpLWZvcm0tbGVmdCcpO1xuICAgICAgICBmb3JtLnN0eWxlLnBhZGRpbmcgPSAnMHB4JztcblxuICAgICAgICB0aGlzLnRhYnMub25UYWJDaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgY3VycmVudFRhYk5hbWUgPSB0aGlzLnRhYnMuY3VycmVudFBhbmUubmFtZTtcbiAgICAgICAgICBpZiAoY3VycmVudFRhYk5hbWUgPT09ICdISVNUT1JZJykge1xuICAgICAgICAgICAgdGV4dElucHV0LnJvb3Quc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgIGRhdGVJbnB1dC5yb290LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdkaXNwbGF5Jyk7XG4gICAgICAgICAgICBhdXRob3JJbnB1dC5yb290LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjdXJyZW50VGFiTmFtZSA9PT0gJ0ZBVk9SSVRFUycpIHtcbiAgICAgICAgICAgIHRleHRJbnB1dC5yb290LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdkaXNwbGF5Jyk7XG4gICAgICAgICAgICBkYXRlSW5wdXQucm9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnZGlzcGxheScpO1xuICAgICAgICAgICAgYXV0aG9ySW5wdXQucm9vdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY3VycmVudFRhYk5hbWUgPT09ICdTSEFSRUQnKSB7XG4gICAgICAgICAgICB0ZXh0SW5wdXQucm9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnZGlzcGxheScpO1xuICAgICAgICAgICAgZGF0ZUlucHV0LnJvb3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2Rpc3BsYXknKTtcbiAgICAgICAgICAgIGF1dGhvcklucHV0LnJvb3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2Rpc3BsYXknKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBmb3JtO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG5ld0ZpbHRlclBhbmUgPSBidWlsZEZpbHRlclBhbmUoKTtcbiAgICB0aGlzLmZpbHRlclBhbmUucmVwbGFjZVdpdGgobmV3RmlsdGVyUGFuZSk7XG4gICAgdGhpcy5maWx0ZXJQYW5lID0gbmV3RmlsdGVyUGFuZTtcbiAgfTtcblxuICBzaG93RGVsZXRlUnVuRGlhbG9nKGZ1bmNDYWxsOiBERy5GdW5jQ2FsbCkge1xuICAgIHVpLmRpYWxvZyh7dGl0bGU6ICdEZWxldGUgcnVuJ30pXG4gICAgICAuYWRkKHVpLmRpdlRleHQoJ1RoZSBkZWxldGVkIHJ1biBpcyBpbXBvc3NpYmxlIHRvIHJlc3RvcmUuIEFyZSB5b3Ugc3VyZT8nKSlcbiAgICAgIC5vbk9LKGFzeW5jICgpID0+IHtcbiAgICAgICAgdGhpcy5iZWZvcmVSdW5EZWxldGVkLm5leHQoZnVuY0NhbGwuaWQpO1xuICAgICAgfSlcbiAgICAgIC5zaG93KHtjZW50ZXI6IHRydWV9KTtcbiAgfTtcblxuICB1cGRhdGVTaGFyZWRQYW5lKHNoYXJlZFJ1bnM6IERHLkZ1bmNDYWxsW10pIHtcbiAgICBjb25zdCBuZXdUYWIgPSAoc2hhcmVkUnVucy5sZW5ndGggPiAwKSA/IHRoaXMucmVuZGVyU2hhcmVkQ2FyZHMoc2hhcmVkUnVucykgOiB1aS5kaXZUZXh0KCdObyBydW5zIGFyZSBtYXJrZWQgYXMgc2hhcmVkJywgJ25vLWVsZW1lbnRzLWxhYmVsJyk7XG4gICAgdGhpcy5zaGFyZWRUYWIucmVwbGFjZVdpdGgobmV3VGFiKTtcbiAgICB0aGlzLnNoYXJlZFRhYiA9IG5ld1RhYjtcbiAgfTtcblxuICB1cGRhdGVGYXZvcml0ZXNQYW5lKGZhdm9yaXRlUnVuczogREcuRnVuY0NhbGxbXSkge1xuICAgIGNvbnN0IG5ld1RhYiA9IChmYXZvcml0ZVJ1bnMubGVuZ3RoID4gMCkgPyB0aGlzLnJlbmRlckZhdm9yaXRlQ2FyZHMoZmF2b3JpdGVSdW5zKSA6IHVpLmRpdlRleHQoJ05vIHJ1bnMgYXJlIG1hcmtlZCBhcyBmYXZvcml0ZXMnLCAnbm8tZWxlbWVudHMtbGFiZWwnKTtcbiAgICB0aGlzLmZhdlRhYi5yZXBsYWNlV2l0aChuZXdUYWIpO1xuICAgIHRoaXMuZmF2VGFiID0gbmV3VGFiO1xuICB9O1xuXG4gIHVwZGF0ZU15UGFuZShteVJ1bnM6IERHLkZ1bmNDYWxsW10pIHtcbiAgICBjb25zdCBuZXdUYWIgPSAobXlSdW5zLmxlbmd0aCA+IDApID8gdGhpcy5yZW5kZXJIaXN0b3J5Q2FyZHMobXlSdW5zKSA6IHVpLmRpdlRleHQoJ05vIHJ1bnMgYXJlIGZvdW5kIGluIGhpc3RvcnknLCAnbm8tZWxlbWVudHMtbGFiZWwnKTtcbiAgICB0aGlzLmhpc3RvcnlUYWIucmVwbGFjZVdpdGgobmV3VGFiKTtcbiAgICB0aGlzLmhpc3RvcnlUYWIgPSBuZXdUYWI7XG4gIH07XG5cbiAgcmVuZGVyQ2FyZChmdW5jQ2FsbDogREcuRnVuY0NhbGwpIHtcbiAgICBjb25zdCBpY29uID0gZnVuY0NhbGwuYXV0aG9yLnBpY3R1cmUgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWNvbi5zdHlsZS53aWR0aCA9ICcyNXB4JztcbiAgICBpY29uLnN0eWxlLmhlaWdodCA9ICcyNXB4JztcbiAgICBpY29uLnN0eWxlLmZvbnRTaXplID0gJzIwcHgnO1xuICAgIGNvbnN0IGNhcmRMYWJlbCA9IHVpLmxhYmVsKGZ1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ10gPz8gZnVuY0NhbGwuYXV0aG9yLmZyaWVuZGx5TmFtZSwge3N0eWxlOiB7J2NvbG9yJzogJ3ZhcigtLWJsdWUtMSknfX0pO1xuICAgIHVpLmJpbmQoZnVuY0NhbGwuYXV0aG9yLCBpY29uKTtcblxuICAgIGNvbnN0IGVkaXRJY29uID0gdWkuaWNvbkZBKCdlZGl0JywgKGV2KSA9PiB7XG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMuc2hvd0VkaXREaWFsb2coZnVuY0NhbGwpO1xuICAgIH0pO1xuICAgIGVkaXRJY29uLmNsYXNzTGlzdC5hZGQoJ2N2LWZ1bmNjYWxsLWNhcmQtaG92ZXItaWNvbicpO1xuXG4gICAgY29uc3QgZGVsZXRlSWNvbiA9IHVpLmljb25GQSgndHJhc2gtYWx0JywgYXN5bmMgKGV2KSA9PiB7XG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMuc2hvd0RlbGV0ZVJ1bkRpYWxvZyhmdW5jQ2FsbCk7XG4gICAgfSwgJ0RlbGV0ZSB0aGUgcnVuJyk7XG4gICAgZGVsZXRlSWNvbi5jbGFzc0xpc3QuYWRkKCdjdi1mdW5jY2FsbC1jYXJkLWhvdmVyLWljb24nKTtcblxuICAgIGNvbnN0IGZhdm9yaXRlZEljb24gPSB1aS5pY29uRkEoJ3N0YXInLCBudWxsLCAnVW5mYXZvcml0ZSB0aGUgcnVuJyk7XG4gICAgZmF2b3JpdGVkSWNvbi5jbGFzc0xpc3QuYWRkKCdmYXMnLCAnY3YtZnVuY2NhbGwtY2FyZC1kZWYtaWNvbicpO1xuXG4gICAgY29uc3Qgc2hhcmVkSWNvbiA9IHVpLmljb25GQSgnc2hhcmUtYWx0JywgbnVsbCwgJ0FkZCB0byBzaGFyZWQnKTtcbiAgICBzaGFyZWRJY29uLmNsYXNzTGlzdC5hZGQoJ2ZhcycsICdjdi1mdW5jY2FsbC1jYXJkLWRlZi1pY29uJyk7XG4gICAgc2hhcmVkSWNvbi5zdHlsZS5jb2xvciA9ICd2YXIoLS1ibHVlLTEpJztcblxuICAgIGNvbnN0IGRhdGVTdGFydGVkID0gbmV3IERhdGUoZnVuY0NhbGwuc3RhcnRlZC50b1N0cmluZygpKS50b0xvY2FsZVN0cmluZygnZW4tdXMnLCB7bW9udGg6ICdzaG9ydCcsIGRheTogJ251bWVyaWMnLCBob3VyOiAnbnVtZXJpYycsIG1pbnV0ZTogJ251bWVyaWMnfSk7XG5cbiAgICBjb25zdCBjYXJkID0gdWkuZGl2SChbXG4gICAgICB1aS5kaXZIKFtcbiAgICAgICAgaWNvbixcbiAgICAgICAgdWkuZGl2VihbXG4gICAgICAgICAgY2FyZExhYmVsLFxuICAgICAgICAgIHVpLnNwYW4oW2RhdGVTdGFydGVkXSksXG4gICAgICAgICAgLi4uKGZ1bmNDYWxsLm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10pID8gW3VpLmRpdlRleHQoZnVuY0NhbGwub3B0aW9uc1snZGVzY3JpcHRpb24nXSwgJ2Rlc2NyaXB0aW9uJyldOiBbXSxcbiAgICAgICAgXSwgJ2N2LWNhcmQtY29udGVudCcpLFxuICAgICAgXSksXG4gICAgICB1aS5kaXZIKFtcbiAgICAgICAgZWRpdEljb24sIGRlbGV0ZUljb24sXG4gICAgICAgIC4uLihmdW5jQ2FsbC5vcHRpb25zWydpc0Zhdm9yaXRlJ10pID8gW2Zhdm9yaXRlZEljb25dIDogW10sXG4gICAgICAgIC4uLihmdW5jQ2FsbC5vcHRpb25zWydpc1NoYXJlZCddKSA/IFtzaGFyZWRJY29uXTogW10sXG4gICAgICBdKVxuICAgIF0sICdjdi1mdW5jY2FsbC1jYXJkJyk7XG5cbiAgICBjYXJkLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgKCkgPT4ge1xuICAgICAgdGhpcy5vblJ1bkNob3Nlbi5uZXh0KGZ1bmNDYWxsLmlkKTtcblxuICAgICAgY29uc3QgYWxsQ2FyZHMgPSBbLi4udGhpcy5teUNhcmRzLCAuLi50aGlzLmZhdm9yaXRlQ2FyZHMsIC4uLnRoaXMuc2hhcmVkQ2FyZHNdO1xuICAgICAgYWxsQ2FyZHMuZm9yRWFjaCgoYykgPT4gYy5jbGFzc0xpc3QucmVtb3ZlKCdjbGlja2VkJykpO1xuXG4gICAgICBjYXJkLmNsYXNzTGlzdC5hZGQoJ2NsaWNrZWQnKTtcbiAgICB9KTtcbiAgICB1aS50b29sdGlwLmJpbmQoY2FyZCwgKCkgPT4gdWkudGFibGVGcm9tTWFwKHtcbiAgICAgIEF1dGhvcjogZ3Jvay5zaGVsbC51c2VyLnRvTWFya3VwKCksXG4gICAgICBEYXRlOiBkYXRlU3RhcnRlZCxcbiAgICAgIC4uLihmdW5jQ2FsbC5vcHRpb25zWyd0aXRsZSddKSA/IHsnVGl0bGUnOiBmdW5jQ2FsbC5vcHRpb25zWyd0aXRsZSddfTp7fSxcbiAgICAgIC4uLihmdW5jQ2FsbC5vcHRpb25zWydkZXNjcmlwdGlvbiddKSA/IHsnRGVzY3JpcHRpb24nOiBmdW5jQ2FsbC5vcHRpb25zWydkZXNjcmlwdGlvbiddfTp7fSxcbiAgICB9KSk7XG4gICAgcmV0dXJuIGNhcmQ7XG4gIH1cblxuICBzaG93RWRpdERpYWxvZyhmdW5jQ2FsbDogREcuRnVuY0NhbGwpIHtcbiAgICBjb25zdCBkbGcgPSB1aS5kaWFsb2coe3RpdGxlOiAnRWRpdCBydW4nfSk7XG5cbiAgICBsZXQgdGl0bGUgPSBmdW5jQ2FsbC5vcHRpb25zWyd0aXRsZSddID8/ICcnO1xuICAgIGxldCBkZXNjcmlwdGlvbiA9IGZ1bmNDYWxsLm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10gPz8gJyc7XG4gICAgY29uc3QgdGl0bGVJbnB1dCA9IHVpLnN0cmluZ0lucHV0KCdUaXRsZScsIHRpdGxlLCAoczogc3RyaW5nKSA9PiB7XG4gICAgICB0aXRsZSA9IHM7XG4gICAgICBpZiAocy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGl0bGVJbnB1dC5zZXRUb29sdGlwKCdUaXRsZSBjYW5ub3QgYmUgZW1wdHknKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aXRsZUlucHV0LmlucHV0LmNsYXNzTGlzdC5hZGQoJ2Q0LWludmFsaWQnKSwgMTAwKTtcbiAgICAgICAgZGxnLmdldEJ1dHRvbignT0snKS5kaXNhYmxlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aXRsZUlucHV0LnNldFRvb2x0aXAoJycpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRpdGxlSW5wdXQuaW5wdXQuY2xhc3NMaXN0LnJlbW92ZSgnZDQtaW52YWxpZCcpLCAxMDApO1xuICAgICAgICBkbGcuZ2V0QnV0dG9uKCdPSycpLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgbGV0IGlzU2hhcmVkID0gZnVuY0NhbGwub3B0aW9uc1snaXNTaGFyZWQnXSA/PyBmYWxzZTtcbiAgICBsZXQgaXNGYXZvcml0ZSA9IGZ1bmNDYWxsLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSA/PyBmYWxzZTtcblxuICAgIGRsZy5hZGQodWkuZm9ybShbXG4gICAgICB0aXRsZUlucHV0LFxuICAgICAgdWkuc3RyaW5nSW5wdXQoJ0Rlc2NyaXB0aW9uJywgZGVzY3JpcHRpb24sIChzOiBzdHJpbmcpID0+IHsgZGVzY3JpcHRpb24gPSBzOyB9KSxcbiAgICAgIHVpLmJvb2xJbnB1dCgnRmF2b3JpdGVzJywgaXNGYXZvcml0ZSwgKGI6IGJvb2xlYW4pID0+IGlzRmF2b3JpdGUgPSBiKSxcbiAgICAgIHVpLmJvb2xJbnB1dCgnU2hhcmUnLCBpc1NoYXJlZCwgKGI6IGJvb2xlYW4pID0+IGlzU2hhcmVkID0gYiksXG4gICAgXSkpXG4gICAgICAub25PSyhhc3luYyAoKSA9PiB7XG4gICAgICAgIGZ1bmNDYWxsID0gYXdhaXQgaGlzdG9yeVV0aWxzLmxvYWRSdW4oZnVuY0NhbGwuaWQpO1xuICAgICAgICBmdW5jQ2FsbC5vcHRpb25zWyd0aXRsZSddID0gdGl0bGU7XG4gICAgICAgIGZ1bmNDYWxsLm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10gPSBkZXNjcmlwdGlvbjtcblxuICAgICAgICBpZiAoaXNTaGFyZWQgPT09IGZ1bmNDYWxsLm9wdGlvbnNbJ2lzU2hhcmVkJ10gJiYgaXNGYXZvcml0ZSA9PT0gZnVuY0NhbGwub3B0aW9uc1snaXNGYXZvcml0ZSddKSB7XG4gICAgICAgICAgYXdhaXQgaGlzdG9yeVV0aWxzLnNhdmVSdW4oZnVuY0NhbGwpO1xuXG4gICAgICAgICAgY29uc3QgZWRpdGVkUnVuID0gdGhpcy5zdG9yZS5hbGxSdW5zLnZhbHVlLmZpbmQoKGNhbGwpID0+IGNhbGwuaWQgPT09IGZ1bmNDYWxsLmlkKTtcbiAgICAgICAgICBlZGl0ZWRSdW4hLm9wdGlvbnNbJ3RpdGxlJ10gPSBmdW5jQ2FsbC5vcHRpb25zWyd0aXRsZSddO1xuICAgICAgICAgIGVkaXRlZFJ1biEub3B0aW9uc1snZGVzY3JpcHRpb24nXSA9IGZ1bmNDYWxsLm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ107XG5cbiAgICAgICAgICB0aGlzLnN0b3JlLmFsbFJ1bnMubmV4dCh0aGlzLnN0b3JlLmFsbFJ1bnMudmFsdWUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1NoYXJlZCAmJiAhZnVuY0NhbGwub3B0aW9uc1snaXNTaGFyZWQnXSkge1xuICAgICAgICAgIGZ1bmNDYWxsLm9wdGlvbnNbJ2lzU2hhcmVkJ10gPSBpc1NoYXJlZDtcbiAgICAgICAgICB0aGlzLmJlZm9yZVJ1bkFkZFRvU2hhcmVkLm5leHQoZnVuY0NhbGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNTaGFyZWQgJiYgZnVuY0NhbGwub3B0aW9uc1snaXNTaGFyZWQnXSkge1xuICAgICAgICAgIGZ1bmNDYWxsLm9wdGlvbnNbJ2lzU2hhcmVkJ10gPSBpc1NoYXJlZDtcbiAgICAgICAgICB0aGlzLmJlZm9yZVJ1blJlbW92ZUZyb21TaGFyZWQubmV4dChmdW5jQ2FsbC5pZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNGYXZvcml0ZSAmJiAhZnVuY0NhbGwub3B0aW9uc1snaXNGYXZvcml0ZSddKSB7XG4gICAgICAgICAgZnVuY0NhbGwub3B0aW9uc1snaXNGYXZvcml0ZSddID0gaXNGYXZvcml0ZTtcbiAgICAgICAgICB0aGlzLmJlZm9yZVJ1bkFkZFRvRmF2b3JpdGVzLm5leHQoZnVuY0NhbGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNGYXZvcml0ZSAmJiBmdW5jQ2FsbC5vcHRpb25zWydpc0Zhdm9yaXRlJ10pIHtcbiAgICAgICAgICBmdW5jQ2FsbC5vcHRpb25zWydpc0Zhdm9yaXRlJ10gPSBpc0Zhdm9yaXRlO1xuICAgICAgICAgIHRoaXMuYmVmb3JlUnVuUmVtb3ZlRnJvbUZhdm9yaXRlcy5uZXh0KGZ1bmNDYWxsLmlkKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5zaG93KHtjZW50ZXI6IHRydWV9KTtcbiAgICB0aXRsZUlucHV0LmZpcmVDaGFuZ2VkKCk7XG4gIH1cblxuICByZW5kZXJGYXZvcml0ZUNhcmRzKGZ1bmNDYWxsczogREcuRnVuY0NhbGxbXSkge1xuICAgIHRoaXMuZmF2b3JpdGVDYXJkcyA9IGZ1bmNDYWxscy5tYXAoKGZ1bmNDYWxsKSA9PiB0aGlzLnJlbmRlckNhcmQoZnVuY0NhbGwpKTtcbiAgICByZXR1cm4gdWkuZGl2Vih0aGlzLmZhdm9yaXRlQ2FyZHMpO1xuICB9O1xuXG4gIHJlbmRlclNoYXJlZENhcmRzKGZ1bmNDYWxsczogREcuRnVuY0NhbGxbXSkge1xuICAgIHRoaXMuc2hhcmVkQ2FyZHMgPSBmdW5jQ2FsbHMubWFwKChmdW5jQ2FsbCkgPT4gdGhpcy5yZW5kZXJDYXJkKGZ1bmNDYWxsKSk7XG4gICAgcmV0dXJuIHVpLmRpdlYodGhpcy5zaGFyZWRDYXJkcyk7XG4gIH07XG5cbiAgcmVuZGVySGlzdG9yeUNhcmRzKGZ1bmNDYWxsczogREcuRnVuY0NhbGxbXSkge1xuICAgIHRoaXMubXlDYXJkcyA9IGZ1bmNDYWxscy5tYXAoKGZ1bmNDYWxsKSA9PiB0aGlzLnJlbmRlckNhcmQoZnVuY0NhbGwpKTtcbiAgICByZXR1cm4gdWkuZGl2Vih0aGlzLm15Q2FyZHMsIHtzdHlsZToge2hlaWdodDogJzEwMCUnfX0pO1xuICB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZnVuYzogREcuRnVuY1xuICApIHtcbiAgICB0aGlzLnRhYnMucm9vdC5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICB0aGlzLnRhYnMucm9vdC5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XG5cbiAgICB0aGlzLm15UnVuc0ZpbHRlci5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVNeVBhbmUodGhpcy5zdG9yZS5maWx0ZXJlZE15UnVucykpO1xuICAgIHRoaXMuZmF2UnVuc0ZpbHRlci5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVGYXZvcml0ZXNQYW5lKHRoaXMuc3RvcmUuZmlsdGVyZWRGYXZvcml0ZVJ1bnMpKTtcbiAgICB0aGlzLnNoYXJlZFJ1bnNGaWx0ZXIuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlU2hhcmVkUGFuZSh0aGlzLnN0b3JlLmZpbHRlcmVkU2hhcmVkUnVucykpO1xuXG4gICAgdGhpcy5zdG9yZS5hbGxSdW5zLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZU15UGFuZSh0aGlzLnN0b3JlLmZpbHRlcmVkTXlSdW5zKTtcbiAgICAgIHRoaXMudXBkYXRlRmF2b3JpdGVzUGFuZSh0aGlzLnN0b3JlLmZpbHRlcmVkRmF2b3JpdGVSdW5zKTtcbiAgICAgIHRoaXMudXBkYXRlU2hhcmVkUGFuZSh0aGlzLnN0b3JlLmZpbHRlcmVkU2hhcmVkUnVucyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmFsbFJ1bnNGZXRjaC5zdWJzY3JpYmUoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYWxsUnVucyA9IChhd2FpdCBoaXN0b3J5VXRpbHMucHVsbFJ1bnNCeU5hbWUodGhpcy5mdW5jLm5hbWUsIFtdLCB7b3JkZXI6ICdzdGFydGVkJ30sIFsnc2Vzc2lvbi51c2VyJywgJ29wdGlvbnMnXSkpLnJldmVyc2UoKTtcbiAgICAgIHRoaXMuc3RvcmUuYWxsUnVucy5uZXh0KGFsbFJ1bnMpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgY2xlYXJNZXRhZGF0YSA9IChmdW5jQ2FsbDogREcuRnVuY0NhbGwpID0+IHtcbiAgICAgIGlmICghZnVuY0NhbGwub3B0aW9uc1snaXNGYXZvcml0ZSddICYmICFmdW5jQ2FsbC5vcHRpb25zWydpc1NoYXJlZCddKSB7XG4gICAgICAgIGZ1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ10gPSBudWxsO1xuICAgICAgICBmdW5jQ2FsbC5vcHRpb25zWydkZXNjcmlwdGlvbiddID0gbnVsbDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5hZnRlclJ1bkFkZFRvRmF2b3JpdGVzLnN1YnNjcmliZSgoYWRkZWQpID0+IHtcbiAgICAgIGNvbnN0IGVkaXRlZFJ1biA9IHRoaXMuc3RvcmUuYWxsUnVucy52YWx1ZS5maW5kKChjYWxsKSA9PiBjYWxsLmlkID09PSBhZGRlZC5pZCk7XG4gICAgICBlZGl0ZWRSdW4hLm9wdGlvbnNbJ3RpdGxlJ10gPSBhZGRlZC5vcHRpb25zWyd0aXRsZSddO1xuICAgICAgZWRpdGVkUnVuIS5vcHRpb25zWydkZXNjcmlwdGlvbiddID0gYWRkZWQub3B0aW9uc1snZGVzY3JpcHRpb24nXTtcbiAgICAgIGVkaXRlZFJ1biEub3B0aW9uc1snaXNGYXZvcml0ZSddID0gdHJ1ZTtcbiAgICAgIHRoaXMuc3RvcmUuYWxsUnVucy5uZXh0KHRoaXMuc3RvcmUuYWxsUnVucy52YWx1ZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmFmdGVyUnVuQWRkVG9TaGFyZWQuc3Vic2NyaWJlKChhZGRlZCkgPT4ge1xuICAgICAgY29uc3QgZWRpdGVkUnVuID0gdGhpcy5zdG9yZS5hbGxSdW5zLnZhbHVlLmZpbmQoKGNhbGwpID0+IGNhbGwuaWQgPT09IGFkZGVkLmlkKTtcbiAgICAgIGVkaXRlZFJ1biEub3B0aW9uc1sndGl0bGUnXSA9IGFkZGVkLm9wdGlvbnNbJ3RpdGxlJ107XG4gICAgICBlZGl0ZWRSdW4hLm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10gPSBhZGRlZC5vcHRpb25zWydkZXNjcmlwdGlvbiddO1xuICAgICAgZWRpdGVkUnVuIS5vcHRpb25zWydpc1NoYXJlZCddID0gdHJ1ZTtcbiAgICAgIHRoaXMuc3RvcmUuYWxsUnVucy5uZXh0KHRoaXMuc3RvcmUuYWxsUnVucy52YWx1ZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmFmdGVyUnVuUmVtb3ZlRnJvbUZhdm9yaXRlcy5zdWJzY3JpYmUoKGlkKSA9PiB7XG4gICAgICBjb25zdCBlZGl0ZWRSdW4gPSB0aGlzLnN0b3JlLmFsbFJ1bnMudmFsdWUuZmluZCgoY2FsbCkgPT4gY2FsbC5pZCA9PT0gaWQpITtcbiAgICAgIGVkaXRlZFJ1bi5vcHRpb25zWydpc0Zhdm9yaXRlJ10gPSBmYWxzZTtcbiAgICAgIGNsZWFyTWV0YWRhdGEoZWRpdGVkUnVuKTtcbiAgICAgIHRoaXMuc3RvcmUuYWxsUnVucy5uZXh0KHRoaXMuc3RvcmUuYWxsUnVucy52YWx1ZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmFmdGVyUnVuUmVtb3ZlRnJvbVNoYXJlZC5zdWJzY3JpYmUoKGlkKSA9PiB7XG4gICAgICBjb25zdCBlZGl0ZWRSdW4gPSB0aGlzLnN0b3JlLmFsbFJ1bnMudmFsdWUuZmluZCgoY2FsbCkgPT4gY2FsbC5pZCA9PT0gaWQpITtcbiAgICAgIGVkaXRlZFJ1bi5vcHRpb25zWydpc1NoYXJlZCddID0gZmFsc2U7XG4gICAgICBjbGVhck1ldGFkYXRhKGVkaXRlZFJ1bik7XG4gICAgICB0aGlzLnN0b3JlLmFsbFJ1bnMubmV4dCh0aGlzLnN0b3JlLmFsbFJ1bnMudmFsdWUpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5hZnRlclJ1bkRlbGV0ZWQuc3Vic2NyaWJlKChpZCkgPT4ge1xuICAgICAgdGhpcy5zdG9yZS5hbGxSdW5zLm5leHQodGhpcy5zdG9yZS5hbGxSdW5zLnZhbHVlLmZpbHRlcigoY2FsbCkgPT4gY2FsbC5pZCAhPT0gaWQpKTtcbiAgICB9KTtcblxuICAgIHRoaXMuYWxsUnVuc0ZldGNoLm5leHQoKTtcbiAgICB0aGlzLnVwZGF0ZUZpbHRlclBhbmUoKTtcbiAgfVxuXG4gIGdldCByb290KCkge1xuICAgIHJldHVybiB0aGlzLl9yb290O1xuICB9XG59XG4iXX0=
|
|
441
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeS1wYW5lbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhpc3RvcnktcGFuZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsNEJBQTRCO0FBQzVCLE9BQU8sS0FBSyxJQUFJLE1BQU0sbUJBQW1CLENBQUM7QUFDMUMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxFQUFDLGVBQWUsRUFBRSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sNkJBQTZCLENBQUM7QUFFckMsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHO0lBQzdCLE1BQU0sRUFBRSxzQ0FBc0M7SUFDOUMsT0FBTyxFQUFFLHNDQUFzQztJQUMvQyxRQUFRLEVBQUUsc0NBQXNDO0NBQ2pELENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRztJQUM5QixXQUFXLEVBQUUsc0NBQXNDO0lBQ25ELFlBQVksRUFBRSxzQ0FBc0M7SUFDcEQsZ0JBQWdCLEVBQUUsc0NBQXNDO0lBQ3hELE1BQU0sRUFBRSxzQ0FBc0M7SUFDOUMsT0FBTyxFQUFFLHNDQUFzQztJQUMvQyxRQUFRLEVBQUUsc0NBQXNDO0lBQ2hELGdCQUFnQixFQUFFLHNDQUFzQztDQUN6RCxDQUFDO0FBRUYsTUFBTSxpQkFBaUI7SUFBdkI7UUFDRSxxQkFBZ0IsR0FBRyxFQUFDLElBQUksRUFBRSxFQUFFLEVBSTNCLENBQUM7UUFFRixZQUFPLEdBQUcsSUFBSSxlQUFlLENBQWdCLEVBQUUsQ0FBQyxDQUFDO0lBc0NuRCxDQUFDO0lBcENDLElBQUksTUFBTTtRQUNSLE9BQU8sSUFB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SSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNuRCxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM3RixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2hELE9BQU8sV0FBVyxDQUFDO1FBQ3JCLENBQUM7S0FBQTtJQUVELElBQVcsSUFBSTtRQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJztcbmltcG9ydCB3dSBmcm9tICd3dSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2hpc3RvcnlVdGlsc30gZnJvbSAnLi4vaGlzdG9yeS11dGlscyc7XG5pbXBvcnQgJy4uLy4uL2Nzcy9oaXN0b3J5LXBhbmVsLmNzcyc7XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0VXNlcnNJZHMgPSB7XG4gICdUZXN0JzogJ2NhMWU2NzJlLWUzYmUtNDBlMC1iNzliLWQyYzY4ZTY4ZDM4MCcsXG4gICdBZG1pbic6ICc4NzhjNDJiMC05YTUwLTExZTYtYzUzNy02YmY4ZTlhYjAyZWUnLFxuICAnU3lzdGVtJzogJzNlMzJjNWZhLWFjOWMtNGQzOS04YjRiLTRkYjNlNTc2YjNjMycsXG59O1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdEdyb3Vwc0lkcyA9IHtcbiAgJ0FsbCB1c2Vycyc6ICdhNGI0NTg0MC05YTUwLTExZTYtOWNjOS04NTQ2YjhiZjYyZTYnLFxuICAnRGV2ZWxvcGVycyc6ICdiYTljZDE5MS05YTUwLTExZTYtOWNjOS05MTBiZjgyN2YwYWInLFxuICAnTmVlZCB0byBjcmVhdGUnOiAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJyxcbiAgJ1Rlc3QnOiAnY2ExZTY3MmUtZTNiZS00MGUwLWI3OWItODU0NmI4YmY2MmU2JyxcbiAgJ0FkbWluJzogJ2E0YjQ1ODQwLTlhNTAtMTFlNi1jNTM3LTZiZjhlOWFiMDJlZScsXG4gICdTeXN0ZW0nOiAnYTRiNDU4NDAtYWM5Yy00ZDM5LThiNGItNGRiM2U1NzZiM2MzJyxcbiAgJ0FkbWluaXN0cmF0b3JzJzogJzFhYjhiMzhkLTljNGUtNGIxZS04MWMzLWFlMmJkZTNlMTJjNScsXG59O1xuXG5jbGFzcyBIaXN0b3J5UGFuZWxTdG9yZSB7XG4gIGZpbHRlcmluZ09wdGlvbnMgPSB7dGV4dDogJyd9IGFzIHtcbiAgICB0ZXh0OiBzdHJpbmcsXG4gICAgYXV0aG9yPzogREcuVXNlcixcbiAgICBzdGFydGVkQWZ0ZXI/OiBkYXlqcy5EYXlqcyxcbiAgfTtcblxuICBhbGxSdW5zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxERy5GdW5jQ2FsbFtdPihbXSk7XG5cbiAgZ2V0IG15UnVucygpIHtcbiAgICByZXR1cm4gdGhpcy5hbGxSdW5zLnZhbHVlLmZpbHRlcigocnVuKSA9PiBydW4uYXV0aG9yLmlkID09PSBncm9rLnNoZWxsLnVzZXIuaWQpO1xuICB9XG5cbiAgZ2V0IGZhdm9yaXRlUnVucygpIHtcbiAgICByZXR1cm4gdGhpcy5hbGxSdW5zLnZhbHVlLmZpbHRlcigocnVuKSA9PiBydW4ub3B0aW9uc1snaXNGYXZvcml0ZSddICYmICFydW4ub3B0aW9uc1snaXNJbXBvcnRlZCddKTtcbiAgfVxuXG4gIGdldCBzaGFyZWRSdW5zKCkge1xuICAgIHJldHVybiB0aGlzLmFsbFJ1bnMudmFsdWUuZmlsdGVyKChydW4pID0+IHJ1bi5vcHRpb25zWydpc1NoYXJlZCddKTtcbiAgfVxuXG4gIGdldCBmaWx0ZXJlZE15UnVucygpIHtcbiAgICByZXR1cm4gdGhpcy5teVJ1bnMuZmlsdGVyKCh2YWwpID0+ICh0aGlzLmZpbHRlcmluZ09wdGlvbnMuc3RhcnRlZEFmdGVyID8gdmFsLnN0YXJ0ZWQgPiB0aGlzLmZpbHRlcmluZ09wdGlvbnMuc3RhcnRlZEFmdGVyIDogdHJ1ZSkpO1xuICB9XG5cbiAgZ2V0IGZpbHRlcmVkRmF2b3JpdGVSdW5zKCkge1xuICAgIHJldHVybiB0aGlzLmZhdm9yaXRlUnVucy5maWx0ZXIoKHZhbCkgPT4ge1xuICAgICAgY29uc3Qgc3RhcnRlZEFmdGVyID0gKHRoaXMuZmlsdGVyaW5nT3B0aW9ucy5zdGFydGVkQWZ0ZXIgPyB2YWwuc3RhcnRlZCA+IHRoaXMuZmlsdGVyaW5nT3B0aW9ucy5zdGFydGVkQWZ0ZXIgOiB0cnVlKTtcbiAgICAgIGNvbnN0IHRpdGxlQ29udGFpbnNUZXh0ID0gKCF0aGlzLmZpbHRlcmluZ09wdGlvbnMudGV4dC5sZW5ndGgpID8gdHJ1ZSA6ICghIXZhbC5vcHRpb25zWyd0aXRsZSddKSA/IHZhbC5vcHRpb25zWyd0aXRsZSddLmluY2x1ZGVzKHRoaXMuZmlsdGVyaW5nT3B0aW9ucy50ZXh0KTogZmFsc2U7XG4gICAgICBjb25zdCBkZXNjQ29udGFpbnNUZXh0ID0gKCF0aGlzLmZpbHRlcmluZ09wdGlvbnMudGV4dC5sZW5ndGgpID8gdHJ1ZSA6ICghIXZhbC5vcHRpb25zWydkZXNjcmlwdGlvbiddKSA/IHZhbC5vcHRpb25zWydkZXNjcmlwdGlvbiddLmluY2x1ZGVzKHRoaXMuZmlsdGVyaW5nT3B0aW9ucy50ZXh0KTogZmFsc2U7XG5cbiAgICAgIHJldHVybiAodGl0bGVDb250YWluc1RleHQgfHwgZGVzY0NvbnRhaW5zVGV4dCkgJiYgc3RhcnRlZEFmdGVyO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGZpbHRlcmVkU2hhcmVkUnVucygpIHtcbiAgICByZXR1cm4gdGhpcy5zaGFyZWRSdW5zLmZpbHRlcigodmFsKSA9PiB7XG4gICAgICBjb25zdCBpc0F1dGhvcmVkID0gdGhpcy5maWx0ZXJpbmdPcHRpb25zLmF1dGhvciA/IHZhbC5hdXRob3IuaWQgPT09IHRoaXMuZmlsdGVyaW5nT3B0aW9ucy5hdXRob3IuaWQ6IHRydWU7XG4gICAgICBjb25zdCBzdGFydGVkQWZ0ZXIgPSAodGhpcy5maWx0ZXJpbmdPcHRpb25zLnN0YXJ0ZWRBZnRlciA/IHZhbC5zdGFydGVkID4gdGhpcy5maWx0ZXJpbmdPcHRpb25zLnN0YXJ0ZWRBZnRlciA6IHRydWUpO1xuICAgICAgY29uc3QgdGl0bGVDb250YWluc1RleHQgPSAoIXRoaXMuZmlsdGVyaW5nT3B0aW9ucy50ZXh0Lmxlbmd0aCkgPyB0cnVlIDogKCEhdmFsLm9wdGlvbnNbJ3RpdGxlJ10pID8gdmFsLm9wdGlvbnNbJ3RpdGxlJ10uaW5jbHVkZXModGhpcy5maWx0ZXJpbmdPcHRpb25zLnRleHQpOiBmYWxzZTtcbiAgICAgIGNvbnN0IGRlc2NDb250YWluc1RleHQgPSAoIXRoaXMuZmlsdGVyaW5nT3B0aW9ucy50ZXh0Lmxlbmd0aCkgPyB0cnVlIDogKCEhdmFsLm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10pID8gdmFsLm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10uaW5jbHVkZXModGhpcy5maWx0ZXJpbmdPcHRpb25zLnRleHQpOiBmYWxzZTtcblxuICAgICAgcmV0dXJuICh0aXRsZUNvbnRhaW5zVGV4dCB8fCBkZXNjQ29udGFpbnNUZXh0KSAmJiBzdGFydGVkQWZ0ZXIgJiYgaXNBdXRob3JlZDtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSGlzdG9yeVBhbmVsIHtcbiAgLy8gRW1pdHRlZCB3aGVuIEZ1bmNDYWxsIHNob3VsZCBpcyBjaG9zZW4uIENvbnRhaW5zIEZ1bmNDYWxsIElEXG4gIHB1YmxpYyBvblJ1bkNob3NlbiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcblxuICAvLyBFbWl0dGVkIHdoZW4gRnVuY0NhbGwgaXMgYWRkZWQgdG8gZmF2b3JpdGVzXG4gIHB1YmxpYyBiZWZvcmVSdW5BZGRUb0Zhdm9yaXRlcyA9IG5ldyBTdWJqZWN0PERHLkZ1bmNDYWxsPigpO1xuXG4gIC8vIEVtaXR0ZWQgd2hlbiBGdW5jQ2FsbCBpcyBhZGRlZCB0byBzaGFyZWRcbiAgcHVibGljIGJlZm9yZVJ1bkFkZFRvU2hhcmVkID0gbmV3IFN1YmplY3Q8REcuRnVuY0NhbGw+KCk7XG5cbiAgLy8gRW1pdHRlZCB3aGVuIEZ1bmNDYWxsIGlzIHJlbW92ZWQgZnJvbSBmYXZvcml0ZXNcbiAgcHVibGljIGJlZm9yZVJ1blJlbW92ZUZyb21GYXZvcml0ZXMgPSBuZXcgU3ViamVjdDxERy5GdW5jQ2FsbD4oKTtcblxuICAvLyBFbWl0dGVkIHdoZW4gRnVuY0NhbGwgaXMgcmVtb3ZlZCBmcm9tIHNoYXJlZFxuICBwdWJsaWMgYmVmb3JlUnVuUmVtb3ZlRnJvbVNoYXJlZCA9IG5ldyBTdWJqZWN0PERHLkZ1bmNDYWxsPigpO1xuXG4gIC8vIEVtaXR0ZWQgd2hlbiBGdW5jQ2FsbCBpcyBkZWxldGVkXG4gIHB1YmxpYyBiZWZvcmVSdW5EZWxldGVkID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gIC8vIEVtaXR0ZWQgd2hlbiBGdW5jQ2FsbCBpcyBhZGRlZCB0byBmYXZvcml0ZXNcbiAgcHVibGljIGFmdGVyUnVuQWRkVG9GYXZvcml0ZXMgPSBuZXcgU3ViamVjdDxERy5GdW5jQ2FsbD4oKTtcblxuICAvLyBFbWl0dGVkIHdoZW4gRnVuY0NhbGwgaXMgYWRkZWQgdG8gc2hhcmVkXG4gIHB1YmxpYyBhZnRlclJ1bkFkZFRvU2hhcmVkID0gbmV3IFN1YmplY3Q8REcuRnVuY0NhbGw+KCk7XG5cbiAgLy8gRW1pdHRlZCB3aGVuIEZ1bmNDYWxsIGlzIHJlbW92ZWQgZnJvbSBmYXZvcml0ZXNcbiAgcHVibGljIGFmdGVyUnVuUmVtb3ZlRnJvbUZhdm9yaXRlcyA9IG5ldyBTdWJqZWN0PERHLkZ1bmNDYWxsPigpO1xuXG4gIC8vIEVtaXR0ZWQgd2hlbiBGdW5jQ2FsbCBpcyByZW1vdmVkIGZyb20gc2hhcmVkXG4gIHB1YmxpYyBhZnRlclJ1blJlbW92ZUZyb21TaGFyZWQgPSBuZXcgU3ViamVjdDxERy5GdW5jQ2FsbD4oKTtcblxuICAvLyBFbWl0dGVkIHdoZW4gRnVuY0NhbGwgaXMgZGVsZXRlZFxuICBwdWJsaWMgYWZ0ZXJSdW5EZWxldGVkID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gIHByaXZhdGUgc3RvcmUgPSBuZXcgSGlzdG9yeVBhbmVsU3RvcmUoKTtcblxuICBwcml2YXRlIG15UnVuc0ZpbHRlciA9IG5ldyBTdWJqZWN0PHRydWU+KCk7XG4gIHByaXZhdGUgZmF2UnVuc0ZpbHRlciA9IG5ldyBTdWJqZWN0PHRydWU+KCk7XG4gIHByaXZhdGUgc2hhcmVkUnVuc0ZpbHRlciA9IG5ldyBTdWJqZWN0PHRydWU+KCk7XG5cbiAgcHVibGljIGFsbFJ1bnNGZXRjaCA9IG5ldyBTdWJqZWN0PHRydWU+KCk7XG5cbiAgaGlzdG9yeVRhYiA9IHVpLmRpdigpO1xuICBmYXZUYWIgPSB1aS5kaXYoKTtcbiAgc2hhcmVkVGFiID0gdWkuZGl2KCk7XG4gIHRhYnMgPSB1aS50YWJDb250cm9sKHtcbiAgICAnSElTVE9SWSc6IHVpLmJveCh0aGlzLmhpc3RvcnlUYWIpLFxuICAgICdGQVZPUklURVMnOiB1aS5ib3godGhpcy5mYXZUYWIpLFxuICAgICdTSEFSRUQnOiB1aS5ib3godGhpcy5zaGFyZWRUYWIpLFxuICB9KTtcbiAgZmlsdGVyUGFuZSA9IHVpLmRpdigpO1xuXG4gIHByaXZhdGUgX3Jvb3QgPSB1aS5kaXZWKFtcbiAgICB1aS5wYW5lbChbXG4gICAgICB1aS5oMignSGlzdG9yeScpLFxuICAgICAgdGhpcy5maWx0ZXJQYW5lLFxuICAgIF0pLFxuICAgIHVpLmVsZW1lbnQoJ2RpdicsICdzcGxpdGJhci1ob3Jpem9udGFsJyksXG4gICAgdGhpcy50YWJzLnJvb3QsXG4gIF0sIHtzdHlsZToge3dpZHRoOiAnMTAwJScsIGhlaWdodDogJzEwMCUnfX0pO1xuXG4gIG15Q2FyZHMgPSBbXSBhcyBIVE1MRWxlbWVudFtdO1xuICBmYXZvcml0ZUNhcmRzID0gW10gYXMgSFRNTEVsZW1lbnRbXTtcbiAgc2hhcmVkQ2FyZHMgPSBbXSBhcyBIVE1MRWxlbWVudFtdO1xuXG4gIHVwZGF0ZUZpbHRlclBhbmUoKSB7XG4gICAgY29uc3QgYnVpbGRGaWx0ZXJQYW5lID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIHVpLndhaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBmaWx0ZXJpbmdUZXh0ID0gbmV3IFN1YmplY3QoKTtcblxuICAgICAgICBjb25zdCB0ZXh0SW5wdXQgPSB1aS5zdHJpbmdJbnB1dCgnU2VhcmNoJywgJycsICh2OiBzdHJpbmcpID0+IGZpbHRlcmluZ1RleHQubmV4dCh2KSk7XG4gICAgICAgIHRleHRJbnB1dC5yb290LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgIERHLmRlYm91bmNlKGZpbHRlcmluZ1RleHQuYXNPYnNlcnZhYmxlKCksIDYwMCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnN0b3JlLmZpbHRlcmluZ09wdGlvbnMudGV4dCA9IHRleHRJbnB1dC5zdHJpbmdWYWx1ZTtcbiAgICAgICAgICB0aGlzLmZhdlJ1bnNGaWx0ZXIubmV4dCgpO1xuICAgICAgICAgIHRoaXMuc2hhcmVkUnVuc0ZpbHRlci5uZXh0KCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGRhdGVJbnB1dCA9IHVpLmRhdGVJbnB1dCgnU3RhcnRlZCBhZnRlcicsIGRheWpzKCkuc3VidHJhY3QoMSwgJ3dlZWsnKSwgKHY6IGRheWpzLkRheWpzKSA9PiB7XG4gICAgICAgICAgdGhpcy5zdG9yZS5maWx0ZXJpbmdPcHRpb25zLnN0YXJ0ZWRBZnRlciA9IHY7XG4gICAgICAgICAgdGhpcy5teVJ1bnNGaWx0ZXIubmV4dCgpO1xuICAgICAgICAgIHRoaXMuZmF2UnVuc0ZpbHRlci5uZXh0KCk7XG4gICAgICAgICAgdGhpcy5zaGFyZWRSdW5zRmlsdGVyLm5leHQoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZGVmYXVsdFVzZXJzID0gT2JqZWN0LnZhbHVlcyhkZWZhdWx0VXNlcnNJZHMpO1xuICAgICAgICBjb25zdCBhbGxVc2VycyA9IGF3YWl0IGdyb2suZGFwaS51c2Vycy5saXN0KCkgYXMgREcuVXNlcltdO1xuICAgICAgICBjb25zdCBmaWx0ZXJlZFVzZXJzID0gYWxsVXNlcnMuZmlsdGVyKCh1c2VyKSA9PiAhZGVmYXVsdFVzZXJzLmluY2x1ZGVzKHVzZXIuaWQpKTtcblxuICAgICAgICBjb25zdCBhdXRob3JJbnB1dCA9IHVpLmNob2ljZUlucHV0PERHLlVzZXIgfCBzdHJpbmc+KCdBdXRob3InLCAnQW55b25lJywgWydBbnlvbmUnLCAuLi5maWx0ZXJlZFVzZXJzXSwgKHY6IERHLlVzZXIgfCBzdHJpbmcpID0+IHtcbiAgICAgICAgICB0aGlzLnN0b3JlLmZpbHRlcmluZ09wdGlvbnMuYXV0aG9yID0gKHYgPT09ICdBbnlvbmUnKSA/IHVuZGVmaW5lZCA6IHYgYXMgREcuVXNlcjtcbiAgICAgICAgICB0aGlzLnNoYXJlZFJ1bnNGaWx0ZXIubmV4dCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgYXV0aG9ySW5wdXQucm9vdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG4gICAgICAgIGRhdGVJbnB1dC5hZGRQYXR0ZXJuTWVudSgnZGF0ZXRpbWUnKTtcbiAgICAgICAgY29uc3QgZm9ybSA9IHVpLmRpdlYoW1xuICAgICAgICAgIHRleHRJbnB1dCxcbiAgICAgICAgICBkYXRlSW5wdXQsXG4gICAgICAgICAgYXV0aG9ySW5wdXQsXG4gICAgICAgIF0sICd1aS1mb3JtIHVpLWZvcm0td2lkZSB1aS1mb3JtLWxlZnQnKTtcbiAgICAgICAgZm9ybS5zdHlsZS5wYWRkaW5nID0gJzBweCc7XG5cbiAgICAgICAgdGhpcy50YWJzLm9uVGFiQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRUYWJOYW1lID0gdGhpcy50YWJzLmN1cnJlbnRQYW5lLm5hbWU7XG4gICAgICAgICAgaWYgKGN1cnJlbnRUYWJOYW1lID09PSAnSElTVE9SWScpIHtcbiAgICAgICAgICAgIHRleHRJbnB1dC5yb290LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICBkYXRlSW5wdXQucm9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnZGlzcGxheScpO1xuICAgICAgICAgICAgYXV0aG9ySW5wdXQucm9vdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY3VycmVudFRhYk5hbWUgPT09ICdGQVZPUklURVMnKSB7XG4gICAgICAgICAgICB0ZXh0SW5wdXQucm9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnZGlzcGxheScpO1xuICAgICAgICAgICAgZGF0ZUlucHV0LnJvb3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2Rpc3BsYXknKTtcbiAgICAgICAgICAgIGF1dGhvcklucHV0LnJvb3Quc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGN1cnJlbnRUYWJOYW1lID09PSAnU0hBUkVEJykge1xuICAgICAgICAgICAgdGV4dElucHV0LnJvb3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2Rpc3BsYXknKTtcbiAgICAgICAgICAgIGRhdGVJbnB1dC5yb290LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdkaXNwbGF5Jyk7XG4gICAgICAgICAgICBhdXRob3JJbnB1dC5yb290LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdkaXNwbGF5Jyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZm9ybTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBuZXdGaWx0ZXJQYW5lID0gYnVpbGRGaWx0ZXJQYW5lKCk7XG4gICAgdGhpcy5maWx0ZXJQYW5lLnJlcGxhY2VXaXRoKG5ld0ZpbHRlclBhbmUpO1xuICAgIHRoaXMuZmlsdGVyUGFuZSA9IG5ld0ZpbHRlclBhbmU7XG4gIH07XG5cbiAgc2hvd0RlbGV0ZVJ1bkRpYWxvZyhmdW5jQ2FsbDogREcuRnVuY0NhbGwpIHtcbiAgICB1aS5kaWFsb2coe3RpdGxlOiAnRGVsZXRlIHJ1bid9KVxuICAgICAgLmFkZCh1aS5kaXZUZXh0KCdUaGUgZGVsZXRlZCBydW4gaXMgaW1wb3NzaWJsZSB0byByZXN0b3JlLiBBcmUgeW91IHN1cmU/JykpXG4gICAgICAub25PSyhhc3luYyAoKSA9PiB7XG4gICAgICAgIHRoaXMuYmVmb3JlUnVuRGVsZXRlZC5uZXh0KGZ1bmNDYWxsLmlkKTtcbiAgICAgIH0pXG4gICAgICAuc2hvdyh7Y2VudGVyOiB0cnVlfSk7XG4gIH07XG5cbiAgdXBkYXRlU2hhcmVkUGFuZShzaGFyZWRSdW5zOiBERy5GdW5jQ2FsbFtdKSB7XG4gICAgY29uc3QgbmV3VGFiID0gKHNoYXJlZFJ1bnMubGVuZ3RoID4gMCkgPyB0aGlzLnJlbmRlclNoYXJlZENhcmRzKHNoYXJlZFJ1bnMpIDogdWkuZGl2VGV4dCgnTm8gcnVucyBhcmUgbWFya2VkIGFzIHNoYXJlZCcsICduby1lbGVtZW50cy1sYWJlbCcpO1xuICAgIHRoaXMuc2hhcmVkVGFiLnJlcGxhY2VXaXRoKG5ld1RhYik7XG4gICAgdGhpcy5zaGFyZWRUYWIgPSBuZXdUYWI7XG4gIH07XG5cbiAgdXBkYXRlRmF2b3JpdGVzUGFuZShmYXZvcml0ZVJ1bnM6IERHLkZ1bmNDYWxsW10pIHtcbiAgICBjb25zdCBuZXdUYWIgPSAoZmF2b3JpdGVSdW5zLmxlbmd0aCA+IDApID8gdGhpcy5yZW5kZXJGYXZvcml0ZUNhcmRzKGZhdm9yaXRlUnVucykgOiB1aS5kaXZUZXh0KCdObyBydW5zIGFyZSBtYXJrZWQgYXMgZmF2b3JpdGVzJywgJ25vLWVsZW1lbnRzLWxhYmVsJyk7XG4gICAgdGhpcy5mYXZUYWIucmVwbGFjZVdpdGgobmV3VGFiKTtcbiAgICB0aGlzLmZhdlRhYiA9IG5ld1RhYjtcbiAgfTtcblxuICB1cGRhdGVNeVBhbmUobXlSdW5zOiBERy5GdW5jQ2FsbFtdKSB7XG4gICAgY29uc3QgbmV3VGFiID0gKG15UnVucy5sZW5ndGggPiAwKSA/IHRoaXMucmVuZGVySGlzdG9yeUNhcmRzKG15UnVucykgOiB1aS5kaXZUZXh0KCdObyBydW5zIGFyZSBmb3VuZCBpbiBoaXN0b3J5JywgJ25vLWVsZW1lbnRzLWxhYmVsJyk7XG4gICAgdGhpcy5oaXN0b3J5VGFiLnJlcGxhY2VXaXRoKG5ld1RhYik7XG4gICAgdGhpcy5oaXN0b3J5VGFiID0gbmV3VGFiO1xuICB9O1xuXG4gIHJlbmRlckNhcmQoZnVuY0NhbGw6IERHLkZ1bmNDYWxsKSB7XG4gICAgY29uc3QgaWNvbiA9IGZ1bmNDYWxsLmF1dGhvci5waWN0dXJlIGFzIEhUTUxFbGVtZW50O1xuICAgIGljb24uc3R5bGUud2lkdGggPSAnMjVweCc7XG4gICAgaWNvbi5zdHlsZS5oZWlnaHQgPSAnMjVweCc7XG4gICAgaWNvbi5zdHlsZS5mb250U2l6ZSA9ICcyMHB4JztcbiAgICBjb25zdCBjYXJkTGFiZWwgPSB1aS5sYWJlbChmdW5jQ2FsbC5vcHRpb25zWyd0aXRsZSddID8/IGZ1bmNDYWxsLmF1dGhvci5mcmllbmRseU5hbWUsIHtzdHlsZTogeydjb2xvcic6ICd2YXIoLS1ibHVlLTEpJ319KTtcbiAgICB1aS5iaW5kKGZ1bmNDYWxsLmF1dGhvciwgaWNvbik7XG5cbiAgICBjb25zdCBlZGl0SWNvbiA9IHVpLmljb25GQSgnZWRpdCcsIChldikgPT4ge1xuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLnNob3dFZGl0RGlhbG9nKGZ1bmNDYWxsKTtcbiAgICB9KTtcbiAgICBlZGl0SWNvbi5jbGFzc0xpc3QuYWRkKCdjdi1mdW5jY2FsbC1jYXJkLWhvdmVyLWljb24nKTtcblxuICAgIGNvbnN0IGRlbGV0ZUljb24gPSB1aS5pY29uRkEoJ3RyYXNoLWFsdCcsIGFzeW5jIChldikgPT4ge1xuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLnNob3dEZWxldGVSdW5EaWFsb2coZnVuY0NhbGwpO1xuICAgIH0sICdEZWxldGUgdGhlIHJ1bicpO1xuICAgIGRlbGV0ZUljb24uY2xhc3NMaXN0LmFkZCgnY3YtZnVuY2NhbGwtY2FyZC1ob3Zlci1pY29uJyk7XG5cbiAgICBjb25zdCBmYXZvcml0ZWRJY29uID0gdWkuaWNvbkZBKCdzdGFyJywgbnVsbCwgJ1VuZmF2b3JpdGUgdGhlIHJ1bicpO1xuICAgIGZhdm9yaXRlZEljb24uY2xhc3NMaXN0LmFkZCgnZmFzJywgJ2N2LWZ1bmNjYWxsLWNhcmQtZGVmLWljb24nKTtcblxuICAgIGNvbnN0IHNoYXJlZEljb24gPSB1aS5pY29uRkEoJ3NoYXJlLWFsdCcsIG51bGwsICdBZGQgdG8gc2hhcmVkJyk7XG4gICAgc2hhcmVkSWNvbi5jbGFzc0xpc3QuYWRkKCdmYXMnLCAnY3YtZnVuY2NhbGwtY2FyZC1kZWYtaWNvbicpO1xuICAgIHNoYXJlZEljb24uc3R5bGUuY29sb3IgPSAndmFyKC0tYmx1ZS0xKSc7XG5cbiAgICBjb25zdCBkYXRlU3RhcnRlZCA9IG5ldyBEYXRlKGZ1bmNDYWxsLnN0YXJ0ZWQudG9TdHJpbmcoKSkudG9Mb2NhbGVTdHJpbmcoJ2VuLXVzJywge21vbnRoOiAnc2hvcnQnLCBkYXk6ICdudW1lcmljJywgaG91cjogJ251bWVyaWMnLCBtaW51dGU6ICdudW1lcmljJ30pO1xuXG4gICAgY29uc3QgY2FyZCA9IHVpLmRpdkgoW1xuICAgICAgdWkuZGl2SChbXG4gICAgICAgIGljb24sXG4gICAgICAgIHVpLmRpdlYoW1xuICAgICAgICAgIGNhcmRMYWJlbCxcbiAgICAgICAgICB1aS5zcGFuKFtkYXRlU3RhcnRlZF0pLFxuICAgICAgICAgIC4uLihmdW5jQ2FsbC5vcHRpb25zWydkZXNjcmlwdGlvbiddKSA/IFt1aS5kaXZUZXh0KGZ1bmNDYWxsLm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10sICdkZXNjcmlwdGlvbicpXTogW10sXG4gICAgICAgIF0sICdjdi1jYXJkLWNvbnRlbnQnKSxcbiAgICAgIF0pLFxuICAgICAgdWkuZGl2SChbXG4gICAgICAgIGVkaXRJY29uLCBkZWxldGVJY29uLFxuICAgICAgICAuLi4oZnVuY0NhbGwub3B0aW9uc1snaXNGYXZvcml0ZSddKSA/IFtmYXZvcml0ZWRJY29uXSA6IFtdLFxuICAgICAgICAuLi4oZnVuY0NhbGwub3B0aW9uc1snaXNTaGFyZWQnXSkgPyBbc2hhcmVkSWNvbl06IFtdLFxuICAgICAgXSlcbiAgICBdLCAnY3YtZnVuY2NhbGwtY2FyZCcpO1xuXG4gICAgY2FyZC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jICgpID0+IHtcbiAgICAgIHRoaXMub25SdW5DaG9zZW4ubmV4dChmdW5jQ2FsbC5pZCk7XG5cbiAgICAgIGNvbnN0IGFsbENhcmRzID0gWy4uLnRoaXMubXlDYXJkcywgLi4udGhpcy5mYXZvcml0ZUNhcmRzLCAuLi50aGlzLnNoYXJlZENhcmRzXTtcbiAgICAgIGFsbENhcmRzLmZvckVhY2goKGMpID0+IGMuY2xhc3NMaXN0LnJlbW92ZSgnY2xpY2tlZCcpKTtcblxuICAgICAgY2FyZC5jbGFzc0xpc3QuYWRkKCdjbGlja2VkJyk7XG4gICAgfSk7XG4gICAgdWkudG9vbHRpcC5iaW5kKGNhcmQsICgpID0+IHVpLnRhYmxlRnJvbU1hcCh7XG4gICAgICBBdXRob3I6IGdyb2suc2hlbGwudXNlci50b01hcmt1cCgpLFxuICAgICAgRGF0ZTogZGF0ZVN0YXJ0ZWQsXG4gICAgICAuLi4oZnVuY0NhbGwub3B0aW9uc1sndGl0bGUnXSkgPyB7J1RpdGxlJzogZnVuY0NhbGwub3B0aW9uc1sndGl0bGUnXX06e30sXG4gICAgICAuLi4oZnVuY0NhbGwub3B0aW9uc1snZGVzY3JpcHRpb24nXSkgPyB7J0Rlc2NyaXB0aW9uJzogZnVuY0NhbGwub3B0aW9uc1snZGVzY3JpcHRpb24nXX06e30sXG4gICAgfSkpO1xuICAgIHJldHVybiBjYXJkO1xuICB9XG5cbiAgc2hvd0VkaXREaWFsb2coZnVuY0NhbGw6IERHLkZ1bmNDYWxsKSB7XG4gICAgY29uc3QgZGxnID0gdWkuZGlhbG9nKHt0aXRsZTogJ0VkaXQgcnVuJ30pO1xuXG4gICAgbGV0IHRpdGxlID0gZnVuY0NhbGwub3B0aW9uc1sndGl0bGUnXSA/PyAnJztcbiAgICBsZXQgZGVzY3JpcHRpb24gPSBmdW5jQ2FsbC5vcHRpb25zWydkZXNjcmlwdGlvbiddID8/ICcnO1xuICAgIGNvbnN0IHRpdGxlSW5wdXQgPSB1aS5zdHJpbmdJbnB1dCgnVGl0bGUnLCB0aXRsZSwgKHM6IHN0cmluZykgPT4ge1xuICAgICAgdGl0bGUgPSBzO1xuICAgICAgaWYgKHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRpdGxlSW5wdXQuc2V0VG9vbHRpcCgnVGl0bGUgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGl0bGVJbnB1dC5pbnB1dC5jbGFzc0xpc3QuYWRkKCdkNC1pbnZhbGlkJyksIDEwMCk7XG4gICAgICAgIGRsZy5nZXRCdXR0b24oJ09LJykuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGl0bGVJbnB1dC5zZXRUb29sdGlwKCcnKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aXRsZUlucHV0LmlucHV0LmNsYXNzTGlzdC5yZW1vdmUoJ2Q0LWludmFsaWQnKSwgMTAwKTtcbiAgICAgICAgZGxnLmdldEJ1dHRvbignT0snKS5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGxldCBpc1NoYXJlZCA9IGZ1bmNDYWxsLm9wdGlvbnNbJ2lzU2hhcmVkJ10gPz8gZmFsc2U7XG4gICAgbGV0IGlzRmF2b3JpdGUgPSBmdW5jQ2FsbC5vcHRpb25zWydpc0Zhdm9yaXRlJ10gPz8gZmFsc2U7XG5cbiAgICBkbGcuYWRkKHVpLmZvcm0oW1xuICAgICAgdGl0bGVJbnB1dCxcbiAgICAgIHVpLnN0cmluZ0lucHV0KCdEZXNjcmlwdGlvbicsIGRlc2NyaXB0aW9uLCAoczogc3RyaW5nKSA9PiB7IGRlc2NyaXB0aW9uID0gczsgfSksXG4gICAgICB1aS5ib29sSW5wdXQoJ0Zhdm9yaXRlcycsIGlzRmF2b3JpdGUsIChiOiBib29sZWFuKSA9PiBpc0Zhdm9yaXRlID0gYiksXG4gICAgICB1aS5ib29sSW5wdXQoJ1NoYXJlJywgaXNTaGFyZWQsIChiOiBib29sZWFuKSA9PiBpc1NoYXJlZCA9IGIpLFxuICAgIF0pKVxuICAgICAgLm9uT0soYXN5bmMgKCkgPT4ge1xuICAgICAgICBmdW5jQ2FsbCA9IGF3YWl0IGhpc3RvcnlVdGlscy5sb2FkUnVuKGZ1bmNDYWxsLmlkKTtcbiAgICAgICAgZnVuY0NhbGwub3B0aW9uc1sndGl0bGUnXSA9IHRpdGxlO1xuICAgICAgICBmdW5jQ2FsbC5vcHRpb25zWydkZXNjcmlwdGlvbiddID0gZGVzY3JpcHRpb247XG5cbiAgICAgICAgaWYgKGlzU2hhcmVkID09PSBmdW5jQ2FsbC5vcHRpb25zWydpc1NoYXJlZCddICYmIGlzRmF2b3JpdGUgPT09IGZ1bmNDYWxsLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSkge1xuICAgICAgICAgIGF3YWl0IGhpc3RvcnlVdGlscy5zYXZlUnVuKGZ1bmNDYWxsKTtcblxuICAgICAgICAgIGNvbnN0IGVkaXRlZFJ1biA9IHRoaXMuc3RvcmUuYWxsUnVucy52YWx1ZS5maW5kKChjYWxsKSA9PiBjYWxsLmlkID09PSBmdW5jQ2FsbC5pZCk7XG4gICAgICAgICAgZWRpdGVkUnVuIS5vcHRpb25zWyd0aXRsZSddID0gZnVuY0NhbGwub3B0aW9uc1sndGl0bGUnXTtcbiAgICAgICAgICBlZGl0ZWRSdW4hLm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10gPSBmdW5jQ2FsbC5vcHRpb25zWydkZXNjcmlwdGlvbiddO1xuXG4gICAgICAgICAgdGhpcy5zdG9yZS5hbGxSdW5zLm5leHQodGhpcy5zdG9yZS5hbGxSdW5zLnZhbHVlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNTaGFyZWQgJiYgIWZ1bmNDYWxsLm9wdGlvbnNbJ2lzU2hhcmVkJ10pIHtcbiAgICAgICAgICBmdW5jQ2FsbC5vcHRpb25zWydpc1NoYXJlZCddID0gaXNTaGFyZWQ7XG4gICAgICAgICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKHRoaXMudGFicy5yb290LCB0cnVlKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkZFJ1blRvU2hhcmVkKGZ1bmNDYWxsKTtcbiAgICAgICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3IodGhpcy50YWJzLnJvb3QsIGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNTaGFyZWQgJiYgZnVuY0NhbGwub3B0aW9uc1snaXNTaGFyZWQnXSkge1xuICAgICAgICAgIGZ1bmNDYWxsLm9wdGlvbnNbJ2lzU2hhcmVkJ10gPSBpc1NoYXJlZDtcbiAgICAgICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3IodGhpcy50YWJzLnJvb3QsIHRydWUpO1xuICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlUnVuRnJvbVNoYXJlZChmdW5jQ2FsbCk7XG4gICAgICAgICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKHRoaXMudGFicy5yb290LCBmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNGYXZvcml0ZSAmJiAhZnVuY0NhbGwub3B0aW9uc1snaXNGYXZvcml0ZSddKSB7XG4gICAgICAgICAgZnVuY0NhbGwub3B0aW9uc1snaXNGYXZvcml0ZSddID0gaXNGYXZvcml0ZTtcbiAgICAgICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3IodGhpcy50YWJzLnJvb3QsIHRydWUpO1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWRkUnVuVG9GYXZvcml0ZXMoZnVuY0NhbGwpO1xuICAgICAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcih0aGlzLnRhYnMucm9vdCwgZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0Zhdm9yaXRlICYmIGZ1bmNDYWxsLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSkge1xuICAgICAgICAgIGZ1bmNDYWxsLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSA9IGlzRmF2b3JpdGU7XG4gICAgICAgICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKHRoaXMudGFicy5yb290LCB0cnVlKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLnJlbW92ZVJ1bkZyb21GYXZvcml0ZXMoZnVuY0NhbGwpO1xuICAgICAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcih0aGlzLnRhYnMucm9vdCwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLnNob3coe2NlbnRlcjogdHJ1ZX0pO1xuICAgIHRpdGxlSW5wdXQuZmlyZUNoYW5nZWQoKTtcbiAgfVxuXG4gIHJlbmRlckZhdm9yaXRlQ2FyZHMoZnVuY0NhbGxzOiBERy5GdW5jQ2FsbFtdKSB7XG4gICAgdGhpcy5mYXZvcml0ZUNhcmRzID0gZnVuY0NhbGxzLm1hcCgoZnVuY0NhbGwpID0+IHRoaXMucmVuZGVyQ2FyZChmdW5jQ2FsbCkpO1xuICAgIHJldHVybiB1aS5kaXZWKHRoaXMuZmF2b3JpdGVDYXJkcyk7XG4gIH07XG5cbiAgcmVuZGVyU2hhcmVkQ2FyZHMoZnVuY0NhbGxzOiBERy5GdW5jQ2FsbFtdKSB7XG4gICAgdGhpcy5zaGFyZWRDYXJkcyA9IGZ1bmNDYWxscy5tYXAoKGZ1bmNDYWxsKSA9PiB0aGlzLnJlbmRlckNhcmQoZnVuY0NhbGwpKTtcbiAgICByZXR1cm4gdWkuZGl2Vih0aGlzLnNoYXJlZENhcmRzKTtcbiAgfTtcblxuICByZW5kZXJIaXN0b3J5Q2FyZHMoZnVuY0NhbGxzOiBERy5GdW5jQ2FsbFtdKSB7XG4gICAgdGhpcy5teUNhcmRzID0gZnVuY0NhbGxzLm1hcCgoZnVuY0NhbGwpID0+IHRoaXMucmVuZGVyQ2FyZChmdW5jQ2FsbCkpO1xuICAgIHJldHVybiB1aS5kaXZWKHRoaXMubXlDYXJkcywge3N0eWxlOiB7aGVpZ2h0OiAnMTAwJSd9fSk7XG4gIH07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmdW5jOiBERy5GdW5jXG4gICkge1xuICAgIHRoaXMudGFicy5yb290LnN0eWxlLndpZHRoID0gJzEwMCUnO1xuICAgIHRoaXMudGFicy5yb290LnN0eWxlLmhlaWdodCA9ICcxMDAlJztcblxuICAgIHRoaXMubXlSdW5zRmlsdGVyLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZU15UGFuZSh0aGlzLnN0b3JlLmZpbHRlcmVkTXlSdW5zKSk7XG4gICAgdGhpcy5mYXZSdW5zRmlsdGVyLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZUZhdm9yaXRlc1BhbmUodGhpcy5zdG9yZS5maWx0ZXJlZEZhdm9yaXRlUnVucykpO1xuICAgIHRoaXMuc2hhcmVkUnVuc0ZpbHRlci5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVTaGFyZWRQYW5lKHRoaXMuc3RvcmUuZmlsdGVyZWRTaGFyZWRSdW5zKSk7XG5cbiAgICB0aGlzLnN0b3JlLmFsbFJ1bnMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlTXlQYW5lKHRoaXMuc3RvcmUuZmlsdGVyZWRNeVJ1bnMpO1xuICAgICAgdGhpcy51cGRhdGVGYXZvcml0ZXNQYW5lKHRoaXMuc3RvcmUuZmlsdGVyZWRGYXZvcml0ZVJ1bnMpO1xuICAgICAgdGhpcy51cGRhdGVTaGFyZWRQYW5lKHRoaXMuc3RvcmUuZmlsdGVyZWRTaGFyZWRSdW5zKTtcbiAgICB9KTtcblxuICAgIHRoaXMuYWxsUnVuc0ZldGNoLnN1YnNjcmliZShhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBhbGxSdW5zID0gKGF3YWl0IGhpc3RvcnlVdGlscy5wdWxsUnVuc0J5TmFtZSh0aGlzLmZ1bmMubmFtZSwgW10sIHtvcmRlcjogJ3N0YXJ0ZWQnfSwgWydzZXNzaW9uLnVzZXInLCAnb3B0aW9ucyddKSkucmV2ZXJzZSgpO1xuICAgICAgdGhpcy5zdG9yZS5hbGxSdW5zLm5leHQoYWxsUnVucyk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBjbGVhck1ldGFkYXRhID0gKGZ1bmNDYWxsOiBERy5GdW5jQ2FsbCkgPT4ge1xuICAgICAgaWYgKCFmdW5jQ2FsbC5vcHRpb25zWydpc0Zhdm9yaXRlJ10gJiYgIWZ1bmNDYWxsLm9wdGlvbnNbJ2lzU2hhcmVkJ10pIHtcbiAgICAgICAgZnVuY0NhbGwub3B0aW9uc1sndGl0bGUnXSA9IG51bGw7XG4gICAgICAgIGZ1bmNDYWxsLm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10gPSBudWxsO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmFmdGVyUnVuQWRkVG9GYXZvcml0ZXMuc3Vic2NyaWJlKChhZGRlZCkgPT4ge1xuICAgICAgY29uc3QgZWRpdGVkUnVuID0gdGhpcy5zdG9yZS5hbGxSdW5zLnZhbHVlLmZpbmQoKGNhbGwpID0+IGNhbGwuaWQgPT09IGFkZGVkLmlkKTtcbiAgICAgIGVkaXRlZFJ1biEub3B0aW9uc1sndGl0bGUnXSA9IGFkZGVkLm9wdGlvbnNbJ3RpdGxlJ107XG4gICAgICBlZGl0ZWRSdW4hLm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10gPSBhZGRlZC5vcHRpb25zWydkZXNjcmlwdGlvbiddO1xuICAgICAgZWRpdGVkUnVuIS5vcHRpb25zWydpc0Zhdm9yaXRlJ10gPSB0cnVlO1xuICAgICAgdGhpcy5zdG9yZS5hbGxSdW5zLm5leHQodGhpcy5zdG9yZS5hbGxSdW5zLnZhbHVlKTtcbiAgICB9KTtcblxuICAgIHRoaXMuYWZ0ZXJSdW5BZGRUb1NoYXJlZC5zdWJzY3JpYmUoKGFkZGVkKSA9PiB7XG4gICAgICBjb25zdCBlZGl0ZWRSdW4gPSB0aGlzLnN0b3JlLmFsbFJ1bnMudmFsdWUuZmluZCgoY2FsbCkgPT4gY2FsbC5pZCA9PT0gYWRkZWQuaWQpO1xuICAgICAgZWRpdGVkUnVuIS5vcHRpb25zWyd0aXRsZSddID0gYWRkZWQub3B0aW9uc1sndGl0bGUnXTtcbiAgICAgIGVkaXRlZFJ1biEub3B0aW9uc1snZGVzY3JpcHRpb24nXSA9IGFkZGVkLm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ107XG4gICAgICBlZGl0ZWRSdW4hLm9wdGlvbnNbJ2lzU2hhcmVkJ10gPSB0cnVlO1xuICAgICAgdGhpcy5zdG9yZS5hbGxSdW5zLm5leHQodGhpcy5zdG9yZS5hbGxSdW5zLnZhbHVlKTtcbiAgICB9KTtcblxuICAgIHRoaXMuYWZ0ZXJSdW5SZW1vdmVGcm9tRmF2b3JpdGVzLnN1YnNjcmliZSgocmVtb3ZlZCkgPT4ge1xuICAgICAgY29uc3QgZWRpdGVkUnVuID0gdGhpcy5zdG9yZS5hbGxSdW5zLnZhbHVlLmZpbmQoKGNhbGwpID0+IGNhbGwuaWQgPT09IHJlbW92ZWQuaWQpITtcbiAgICAgIGVkaXRlZFJ1bi5vcHRpb25zWydpc0Zhdm9yaXRlJ10gPSBmYWxzZTtcbiAgICAgIGNsZWFyTWV0YWRhdGEoZWRpdGVkUnVuKTtcbiAgICAgIHRoaXMuc3RvcmUuYWxsUnVucy5uZXh0KHRoaXMuc3RvcmUuYWxsUnVucy52YWx1ZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmFmdGVyUnVuUmVtb3ZlRnJvbVNoYXJlZC5zdWJzY3JpYmUoKHJlbW92ZWQpID0+IHtcbiAgICAgIGNvbnN0IGVkaXRlZFJ1biA9IHRoaXMuc3RvcmUuYWxsUnVucy52YWx1ZS5maW5kKChjYWxsKSA9PiBjYWxsLmlkID09PSByZW1vdmVkLmlkKSE7XG4gICAgICBlZGl0ZWRSdW4ub3B0aW9uc1snaXNTaGFyZWQnXSA9IGZhbHNlO1xuICAgICAgY2xlYXJNZXRhZGF0YShlZGl0ZWRSdW4pO1xuICAgICAgdGhpcy5zdG9yZS5hbGxSdW5zLm5leHQodGhpcy5zdG9yZS5hbGxSdW5zLnZhbHVlKTtcbiAgICB9KTtcblxuICAgIHRoaXMuYWZ0ZXJSdW5EZWxldGVkLnN1YnNjcmliZSgoaWQpID0+IHtcbiAgICAgIHRoaXMuc3RvcmUuYWxsUnVucy5uZXh0KHRoaXMuc3RvcmUuYWxsUnVucy52YWx1ZS5maWx0ZXIoKGNhbGwpID0+IGNhbGwuaWQgIT09IGlkKSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmFsbFJ1bnNGZXRjaC5uZXh0KCk7XG4gICAgdGhpcy51cGRhdGVGaWx0ZXJQYW5lKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFkZFJ1blRvRmF2b3JpdGVzKGNhbGxUb0Zhdm9yaXRlOiBERy5GdW5jQ2FsbCk6IFByb21pc2U8REcuRnVuY0NhbGw+IHtcbiAgICBjYWxsVG9GYXZvcml0ZS5vcHRpb25zWydpc0Zhdm9yaXRlJ10gPSB0cnVlO1xuXG4gICAgdGhpcy5iZWZvcmVSdW5BZGRUb0Zhdm9yaXRlcy5uZXh0KGNhbGxUb0Zhdm9yaXRlKTtcbiAgICBjb25zdCBzYXZlZEZhdm9yaXRlID0gYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5jYWxscy5hbGxQYWNrYWdlVmVyc2lvbnMoKS5zYXZlKGNhbGxUb0Zhdm9yaXRlKTtcbiAgICB0aGlzLmFmdGVyUnVuQWRkVG9GYXZvcml0ZXMubmV4dChzYXZlZEZhdm9yaXRlKTtcbiAgICByZXR1cm4gc2F2ZWRGYXZvcml0ZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVtb3ZlUnVuRnJvbUZhdm9yaXRlcyhjYWxsVG9VbmZhdm9yaXRlOiBERy5GdW5jQ2FsbCk6IFByb21pc2U8REcuRnVuY0NhbGw+IHtcbiAgICBjYWxsVG9VbmZhdm9yaXRlLm9wdGlvbnNbJ3RpdGxlJ10gPSBudWxsO1xuICAgIGNhbGxUb1VuZmF2b3JpdGUub3B0aW9uc1snZGVzY3JpcHRpb24nXSA9IG51bGw7XG4gICAgY2FsbFRvVW5mYXZvcml0ZS5vcHRpb25zWydpc0Zhdm9yaXRlJ10gPSBmYWxzZTtcblxuICAgIHRoaXMuYmVmb3JlUnVuUmVtb3ZlRnJvbUZhdm9yaXRlcy5uZXh0KGNhbGxUb1VuZmF2b3JpdGUpO1xuICAgIGNvbnN0IGZhdm9yaXRlU2F2ZSA9IGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHMuYWxsUGFja2FnZVZlcnNpb25zKCkuc2F2ZShjYWxsVG9VbmZhdm9yaXRlKTtcbiAgICB0aGlzLmFmdGVyUnVuUmVtb3ZlRnJvbUZhdm9yaXRlcy5uZXh0KGZhdm9yaXRlU2F2ZSk7XG4gICAgcmV0dXJuIGZhdm9yaXRlU2F2ZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYWRkUnVuVG9TaGFyZWQoY2FsbFRvU2hhcmU6IERHLkZ1bmNDYWxsKTogUHJvbWlzZTxERy5GdW5jQ2FsbD4ge1xuICAgIGNhbGxUb1NoYXJlLm9wdGlvbnNbJ2lzU2hhcmVkJ10gPSB0cnVlO1xuXG4gICAgdGhpcy5iZWZvcmVSdW5BZGRUb1NoYXJlZC5uZXh0KGNhbGxUb1NoYXJlKTtcblxuICAgIGNvbnN0IGFsbEdyb3VwID0gYXdhaXQgZ3Jvay5kYXBpLmdyb3Vwcy5maW5kKGRlZmF1bHRHcm91cHNJZHNbJ0FsbCB1c2VycyddKTtcblxuICAgIGNvbnN0IGRmT3V0cHV0cyA9IHd1KGNhbGxUb1NoYXJlLm91dHB1dFBhcmFtcy52YWx1ZXMoKSBhcyBERy5GdW5jQ2FsbFBhcmFtW10pXG4gICAgICAuZmlsdGVyKChvdXRwdXQpID0+IG91dHB1dC5wcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IERHLlRZUEUuREFUQV9GUkFNRSk7XG5cbiAgICBmb3IgKGNvbnN0IG91dHB1dCBvZiBkZk91dHB1dHMpIHtcbiAgICAgIGNvbnN0IGRmID0gY2FsbFRvU2hhcmUub3V0cHV0c1tvdXRwdXQubmFtZV0gYXMgREcuRGF0YUZyYW1lO1xuICAgICAgYXdhaXQgZ3Jvay5kYXBpLnBlcm1pc3Npb25zLmdyYW50KGRmLmdldFRhYmxlSW5mbygpLCBhbGxHcm91cCwgZmFsc2UpO1xuICAgIH1cblxuICAgIGNvbnN0IGRmSW5wdXRzID0gd3UoY2FsbFRvU2hhcmUuaW5wdXRQYXJhbXMudmFsdWVzKCkgYXMgREcuRnVuY0NhbGxQYXJhbVtdKVxuICAgICAgLmZpbHRlcigoaW5wdXQpID0+IGlucHV0LnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKTtcbiAgICBmb3IgKGNvbnN0IGlucHV0IG9mIGRmSW5wdXRzKSB7XG4gICAgICBjb25zdCBkZiA9IGNhbGxUb1NoYXJlLmlucHV0c1tpbnB1dC5uYW1lXSBhcyBERy5EYXRhRnJhbWU7XG4gICAgICBhd2FpdCBncm9rLmRhcGkucGVybWlzc2lvbnMuZ3JhbnQoZGYuZ2V0VGFibGVJbmZvKCksIGFsbEdyb3VwLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2F2ZWRTaGFyZWQgPSBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLmFsbFBhY2thZ2VWZXJzaW9ucygpLnNhdmUoY2FsbFRvU2hhcmUpO1xuXG4gICAgdGhpcy5hZnRlclJ1bkFkZFRvU2hhcmVkLm5leHQoc2F2ZWRTaGFyZWQpO1xuICAgIHJldHVybiBzYXZlZFNoYXJlZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVtb3ZlUnVuRnJvbVNoYXJlZChjYWxsVG9VbnNoYXJlOiBERy5GdW5jQ2FsbCk6IFByb21pc2U8REcuRnVuY0NhbGw+IHtcbiAgICBjYWxsVG9VbnNoYXJlLm9wdGlvbnNbJ3RpdGxlJ10gPSBudWxsO1xuICAgIGNhbGxUb1Vuc2hhcmUub3B0aW9uc1snZGVzY3JpcHRpb24nXSA9IG51bGw7XG4gICAgY2FsbFRvVW5zaGFyZS5vcHRpb25zWydpc1NoYXJlZCddID0gZmFsc2U7XG5cbiAgICB0aGlzLmJlZm9yZVJ1blJlbW92ZUZyb21TaGFyZWQubmV4dChjYWxsVG9VbnNoYXJlKTtcbiAgICBjb25zdCBzYXZlZFNoYXJlZCA9IGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHMuYWxsUGFja2FnZVZlcnNpb25zKCkuc2F2ZShjYWxsVG9VbnNoYXJlKTtcbiAgICB0aGlzLmFmdGVyUnVuUmVtb3ZlRnJvbVNoYXJlZC5uZXh0KHNhdmVkU2hhcmVkKTtcbiAgICByZXR1cm4gc2F2ZWRTaGFyZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJvb3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Jvb3Q7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import 'typeahead-standalone/dist/basic.css';
|
|
2
|
+
export declare namespace u2 {
|
|
3
|
+
function typeAhead(source: string[], minLength?: number, limit?: number, highlight?: boolean, autoSelect?: boolean, hint?: boolean, diacritics?: boolean, debounceRemote?: number): HTMLDivElement;
|
|
4
|
+
}
|
|
5
|
+
//# sourceMappingURL=type-ahead.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-ahead.d.ts","sourceRoot":"","sources":["type-ahead.ts"],"names":[],"mappings":"AAGA,OAAO,qCAAqC,CAAC;AAG7C,yBAAiB,EAAE,CAAC;IAChB,SAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,GAAE,MAAU,EAAE,KAAK,GAAE,MAAU,EAAE,SAAS,GAAE,OAAe,EAC9G,UAAU,GAAE,OAAe,EAAE,IAAI,GAAE,OAAe,EAAE,UAAU,GAAE,OAAe,EAAE,cAAc,GAAE,MAAY,GAC7G,cAAc,CAqBf;CACJ"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import * as ui from 'datagrok-api/ui';
|
|
2
|
+
import typeahead from 'typeahead-standalone'; // imports library (js)
|
|
3
|
+
import 'typeahead-standalone/dist/basic.css'; // imports basic styles (css)
|
|
4
|
+
export var u2;
|
|
5
|
+
(function (u2) {
|
|
6
|
+
function typeAhead(source, minLength = 1, limit = 5, highlight = false, autoSelect = false, hint = false, diacritics = false, debounceRemote = 100) {
|
|
7
|
+
const inputElement = ui.searchInput('', '');
|
|
8
|
+
typeahead({
|
|
9
|
+
input: inputElement.input,
|
|
10
|
+
source: {
|
|
11
|
+
local: source,
|
|
12
|
+
// prefetch: {...}
|
|
13
|
+
// remote: {...}
|
|
14
|
+
},
|
|
15
|
+
minLength: minLength,
|
|
16
|
+
limit: limit,
|
|
17
|
+
highlight: highlight,
|
|
18
|
+
autoSelect: autoSelect,
|
|
19
|
+
hint: hint,
|
|
20
|
+
diacritics: diacritics,
|
|
21
|
+
debounceRemote: debounceRemote,
|
|
22
|
+
});
|
|
23
|
+
const element = inputElement.root.getElementsByClassName('typeahead-standalone')[0];
|
|
24
|
+
return ui.div([element]);
|
|
25
|
+
}
|
|
26
|
+
u2.typeAhead = typeAhead;
|
|
27
|
+
})(u2 || (u2 = {}));
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS1haGVhZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInR5cGUtYWhlYWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV0QyxPQUFPLFNBQVMsTUFBTSxzQkFBc0IsQ0FBQyxDQUFDLHVCQUF1QjtBQUNyRSxPQUFPLHFDQUFxQyxDQUFDLENBQUMsNkJBQTZCO0FBRzNFLE1BQU0sS0FBVyxFQUFFLENBeUJsQjtBQXpCRCxXQUFpQixFQUFFO0lBQ2YsU0FBZ0IsU0FBUyxDQUFDLE1BQWdCLEVBQUUsWUFBb0IsQ0FBQyxFQUFFLFFBQWdCLENBQUMsRUFBRSxZQUFxQixLQUFLLEVBQzlHLGFBQXNCLEtBQUssRUFBRSxPQUFnQixLQUFLLEVBQUUsYUFBc0IsS0FBSyxFQUFFLGlCQUF5QixHQUFHO1FBRTdHLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTVDLFNBQVMsQ0FBQztZQUNSLEtBQUssRUFBb0IsWUFBWSxDQUFDLEtBQUs7WUFDM0MsTUFBTSxFQUFFO2dCQUNOLEtBQUssRUFBRSxNQUFNO2dCQUNiLGtCQUFrQjtnQkFDbEIsZ0JBQWdCO2FBQ2pCO1lBQ0QsU0FBUyxFQUFFLFNBQVM7WUFDcEIsS0FBSyxFQUFFLEtBQUs7WUFDWixTQUFTLEVBQUUsU0FBUztZQUNwQixVQUFVLEVBQUUsVUFBVTtZQUN0QixJQUFJLEVBQUUsSUFBSTtZQUNWLFVBQVUsRUFBRSxVQUFVO1lBQ3RCLGNBQWMsRUFBRSxjQUFjO1NBQy9CLENBQUMsQ0FBQztRQUVILE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwRixPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUF2QmUsWUFBUyxZQXVCeEIsQ0FBQTtBQUNMLENBQUMsRUF6QmdCLEVBQUUsS0FBRixFQUFFLFFBeUJsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5cbmltcG9ydCB0eXBlYWhlYWQgZnJvbSAndHlwZWFoZWFkLXN0YW5kYWxvbmUnOyAvLyBpbXBvcnRzIGxpYnJhcnkgKGpzKVxuaW1wb3J0ICd0eXBlYWhlYWQtc3RhbmRhbG9uZS9kaXN0L2Jhc2ljLmNzcyc7IC8vIGltcG9ydHMgYmFzaWMgc3R5bGVzIChjc3MpXG5cblxuZXhwb3J0IG5hbWVzcGFjZSB1MiB7XG4gICAgZXhwb3J0IGZ1bmN0aW9uIHR5cGVBaGVhZChzb3VyY2U6IHN0cmluZ1tdLCBtaW5MZW5ndGg6IG51bWJlciA9IDEsIGxpbWl0OiBudW1iZXIgPSA1LCBoaWdobGlnaHQ6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICAgIGF1dG9TZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZSwgaGludDogYm9vbGVhbiA9IGZhbHNlLCBkaWFjcml0aWNzOiBib29sZWFuID0gZmFsc2UsIGRlYm91bmNlUmVtb3RlOiBudW1iZXIgPSAxMDApOlxuICAgICAgSFRNTERpdkVsZW1lbnQge1xuICAgICAgY29uc3QgaW5wdXRFbGVtZW50ID0gdWkuc2VhcmNoSW5wdXQoJycsICcnKTtcblxuICAgICAgdHlwZWFoZWFkKHtcbiAgICAgICAgaW5wdXQ6IDxIVE1MSW5wdXRFbGVtZW50PmlucHV0RWxlbWVudC5pbnB1dCxcbiAgICAgICAgc291cmNlOiB7XG4gICAgICAgICAgbG9jYWw6IHNvdXJjZSxcbiAgICAgICAgICAvLyBwcmVmZXRjaDogey4uLn1cbiAgICAgICAgICAvLyByZW1vdGU6IHsuLi59XG4gICAgICAgIH0sXG4gICAgICAgIG1pbkxlbmd0aDogbWluTGVuZ3RoLFxuICAgICAgICBsaW1pdDogbGltaXQsXG4gICAgICAgIGhpZ2hsaWdodDogaGlnaGxpZ2h0LFxuICAgICAgICBhdXRvU2VsZWN0OiBhdXRvU2VsZWN0LFxuICAgICAgICBoaW50OiBoaW50LFxuICAgICAgICBkaWFjcml0aWNzOiBkaWFjcml0aWNzLFxuICAgICAgICBkZWJvdW5jZVJlbW90ZTogZGVib3VuY2VSZW1vdGUsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgZWxlbWVudCA9IGlucHV0RWxlbWVudC5yb290LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3R5cGVhaGVhZC1zdGFuZGFsb25lJylbMF07XG4gICAgICByZXR1cm4gdWkuZGl2KFtlbGVtZW50XSk7XG4gICAgfVxufVxuIl19
|
package/src/test.d.ts
CHANGED
|
@@ -43,6 +43,7 @@ export declare function expectArray(actual: ArrayLike<any>, expected: ArrayLike<
|
|
|
43
43
|
export declare function category(category: string, tests: () => void): void;
|
|
44
44
|
export declare function before(before: () => Promise<void>): void;
|
|
45
45
|
export declare function after(after: () => Promise<void>): void;
|
|
46
|
+
export declare function initAutoTests(packageId: string, module?: any): Promise<void>;
|
|
46
47
|
export declare function runTests(options?: {
|
|
47
48
|
category?: string;
|
|
48
49
|
test?: string;
|
package/src/test.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["test.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAC,UAAU,EAAe,MAAM,MAAM,CAAC;AAG9C,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;
|
|
1
|
+
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["test.ts"],"names":[],"mappings":"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"}
|
package/src/test.js
CHANGED
|
@@ -10,6 +10,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
import * as grok from 'datagrok-api/grok';
|
|
11
11
|
import * as DG from 'datagrok-api/dg';
|
|
12
12
|
export const tests = {};
|
|
13
|
+
const autoTestsCatName = 'Auto Tests';
|
|
14
|
+
const wasRegistered = {};
|
|
13
15
|
export let currentCategory;
|
|
14
16
|
export var assure;
|
|
15
17
|
(function (assure) {
|
|
@@ -140,12 +142,46 @@ export function after(after) {
|
|
|
140
142
|
tests[currentCategory] = {};
|
|
141
143
|
tests[currentCategory].after = after;
|
|
142
144
|
}
|
|
145
|
+
function addNamespace(s, f) {
|
|
146
|
+
return s.replace(new RegExp(f.name, 'gi'), f.nqName);
|
|
147
|
+
}
|
|
148
|
+
export function initAutoTests(packageId, module) {
|
|
149
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
150
|
+
if (wasRegistered[packageId])
|
|
151
|
+
return;
|
|
152
|
+
const moduleTests = module ? module.tests : tests;
|
|
153
|
+
if (moduleTests[autoTestsCatName] !== undefined) {
|
|
154
|
+
wasRegistered[packageId] = true;
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
const moduleAutoTests = [];
|
|
158
|
+
const packFunctions = yield grok.dapi.functions.filter(`package.id = "${packageId}"`).list();
|
|
159
|
+
for (const f of packFunctions) {
|
|
160
|
+
const tests = f.options['test'];
|
|
161
|
+
if (!(tests && Array.isArray(tests) && tests.length))
|
|
162
|
+
continue;
|
|
163
|
+
for (let i = 0; i < tests.length; i++) {
|
|
164
|
+
moduleAutoTests.push(new Test(autoTestsCatName, tests.length === 1 ? f.name : `${f.name} ${i + 1}`, () => __awaiter(this, void 0, void 0, function* () {
|
|
165
|
+
const res = yield grok.functions.eval(addNamespace(tests[i], f));
|
|
166
|
+
// eslint-disable-next-line no-throw-literal
|
|
167
|
+
if (res !== true)
|
|
168
|
+
throw `Failed: ${tests[i]}`;
|
|
169
|
+
})));
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
wasRegistered[packageId] = true;
|
|
173
|
+
if (!moduleAutoTests.length)
|
|
174
|
+
return;
|
|
175
|
+
moduleTests[autoTestsCatName] = { tests: moduleAutoTests };
|
|
176
|
+
});
|
|
177
|
+
}
|
|
143
178
|
export function runTests(options) {
|
|
144
179
|
var _a, _b, _c, _d;
|
|
145
180
|
var _e;
|
|
146
181
|
return __awaiter(this, void 0, void 0, function* () {
|
|
182
|
+
const package_ = (_b = (_a = grok.functions.getCurrentCall()) === null || _a === void 0 ? void 0 : _a.func) === null || _b === void 0 ? void 0 : _b.package;
|
|
183
|
+
yield initAutoTests(package_.id);
|
|
147
184
|
const results = [];
|
|
148
|
-
const packageName = (_b = (_a = grok.functions.getCurrentCall()) === null || _a === void 0 ? void 0 : _a.func) === null || _b === void 0 ? void 0 : _b.package;
|
|
149
185
|
console.log(`Running tests`);
|
|
150
186
|
options !== null && options !== void 0 ? options : (options = {});
|
|
151
187
|
(_c = (_e = options).testContext) !== null && _c !== void 0 ? _c : (_e.testContext = new TestContext());
|
|
@@ -201,7 +237,7 @@ export function runTests(options) {
|
|
|
201
237
|
successful: successful,
|
|
202
238
|
skipped: skipped,
|
|
203
239
|
failed: failed.length,
|
|
204
|
-
package:
|
|
240
|
+
package: package_
|
|
205
241
|
};
|
|
206
242
|
for (const r of failed)
|
|
207
243
|
Object.assign(params, { [`${r.category} | ${r.name}`]: r.result });
|
|
@@ -310,4 +346,4 @@ export function testViewer(v, df, detectSemanticTypes = false) {
|
|
|
310
346
|
}
|
|
311
347
|
});
|
|
312
348
|
}
|
|
313
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLElBQUksTUFBTSxtQkFBbUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBSXRDLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FLZCxFQUFFLENBQUM7QUFFUCxNQUFNLENBQUMsSUFBSSxlQUF1QixDQUFDO0FBRW5DLE1BQU0sS0FBVyxNQUFNLENBTXRCO0FBTkQsV0FBaUIsTUFBTTtJQUVyQixTQUFnQixPQUFPLENBQUMsS0FBVSxFQUFFLElBQWE7UUFDL0MsSUFBSSxLQUFLLElBQUksSUFBSTtZQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksY0FBYyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUhlLGNBQU8sVUFHdEIsQ0FBQTtBQUNILENBQUMsRUFOZ0IsTUFBTSxLQUFOLE1BQU0sUUFNdEI7QUFRRCxNQUFNLE9BQU8sV0FBVztJQUl0QixZQUFZLGNBQXdCLEVBQUUsTUFBZ0I7UUFIdEQsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFDdEIsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUdiLElBQUksY0FBYyxLQUFLLFNBQVM7WUFBRSxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUN2RSxJQUFJLE1BQU0sS0FBSyxTQUFTO1lBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDakQsQ0FBQztJQUFBLENBQUM7Q0FDSDtBQUVELE1BQU0sT0FBTyxJQUFJO0lBTWYsWUFBWSxRQUFnQixFQUFFLElBQVksRUFBRSxJQUF3QixFQUFFLE9BQXFCOztRQUN6RixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSSxHQUFH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SyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pCLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEMsTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUUsQ0FBQztZQUNoRSxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVCLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7U0FDNUU7Z0JBQVM7WUFDUixFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUMzQjtJQUNILENBQUM7Q0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCBUaW1lb3V0ID0gTm9kZUpTLlRpbWVvdXQ7XG5cbmV4cG9ydCBjb25zdCB0ZXN0czoge1xuICBba2V5OiBzdHJpbmddOiB7XG4gICAgdGVzdHM/OiBUZXN0W10sIGJlZm9yZT86ICgpID0+IFByb21pc2U8dm9pZD4sIGFmdGVyPzogKCkgPT4gUHJvbWlzZTx2b2lkPixcbiAgICBiZWZvcmVTdGF0dXM/OiBzdHJpbmcsIGFmdGVyU3RhdHVzPzogc3RyaW5nXG4gIH1cbn0gPSB7fTtcblxuZXhwb3J0IGxldCBjdXJyZW50Q2F0ZWdvcnk6IHN0cmluZztcblxuZXhwb3J0IG5hbWVzcGFjZSBhc3N1cmUge1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBub3ROdWxsKHZhbHVlOiBhbnksIG5hbWU/OiBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtuYW1lID09IG51bGwgPyAnVmFsdWUnIDogbmFtZX0gbm90IGRlZmluZWRgKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlc3RPcHRpb25zIHtcbiAgdGltZW91dD86IG51bWJlcjtcbiAgdW5oYW5kbGVkRXhjZXB0aW9uVGltZW91dD86IG51bWJlcjtcbiAgc2tpcFJlYXNvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFRlc3RDb250ZXh0IHtcbiAgY2F0Y2hVbmhhbmRsZWQgPSB0cnVlO1xuICByZXBvcnQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihjYXRjaFVuaGFuZGxlZD86IGJvb2xlYW4sIHJlcG9ydD86IGJvb2xlYW4pIHtcbiAgICBpZiAoY2F0Y2hVbmhhbmRsZWQgIT09IHVuZGVmaW5lZCkgdGhpcy5jYXRjaFVuaGFuZGxlZCA9IGNhdGNoVW5oYW5kbGVkO1xuICAgIGlmIChyZXBvcnQgIT09IHVuZGVmaW5lZCkgdGhpcy5yZXBvcnQgPSByZXBvcnQ7XG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBUZXN0IHtcbiAgdGVzdDogKCkgPT4gUHJvbWlzZTxhbnk+O1xuICBuYW1lOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIG9wdGlvbnM/OiBUZXN0T3B0aW9ucztcblxuICBjb25zdHJ1Y3RvcihjYXRlZ29yeTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHRlc3Q6ICgpID0+IFByb21pc2U8YW55Piwgb3B0aW9ucz86IFRlc3RPcHRpb25zKSB7XG4gICAgdGhpcy5jYXRlZ29yeSA9IGNhdGVnb3J5O1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgb3B0aW9ucyA/Pz0ge307XG4gICAgb3B0aW9ucy50aW1lb3V0ID8/PSAzMDAwMDtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMudGVzdCA9IGFzeW5jICgpOiBQcm9taXNlPGFueT4gPT4ge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IHRlc3QoKTtcbiAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlc3RFdmVudDxUPihldmVudDogT2JzZXJ2YWJsZTxUPixcbiAgaGFuZGxlcjogKGFyZ3M6IFQpID0+IHZvaWQsIHRyaWdnZXI6ICgpID0+IHZvaWQsIG1zOiBudW1iZXIgPSAwKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgbGV0IHN1YjogU3Vic2NyaXB0aW9uO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHN1YiA9IGV2ZW50LnN1YnNjcmliZSgoYXJncykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaGFuZGxlcihhcmdzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICByZXNvbHZlKCdPSycpO1xuICAgIH0pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXByb21pc2UtcmVqZWN0LWVycm9yc1xuICAgICAgcmVqZWN0KCd0aW1lb3V0Jyk7XG4gICAgfSwgbXMpO1xuICAgIHRyaWdnZXIoKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0KG5hbWU6IHN0cmluZywgdGVzdDogKCkgPT4gUHJvbWlzZTxhbnk+LCBvcHRpb25zPzogVGVzdE9wdGlvbnMpOiB2b2lkIHtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMgPT0gdW5kZWZpbmVkKVxuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMgPSBbXTtcbiAgdGVzdHNbY3VycmVudENhdGVnb3J5XS50ZXN0cyEucHVzaChuZXcgVGVzdChjdXJyZW50Q2F0ZWdvcnksIG5hbWUsIHRlc3QsIG9wdGlvbnMpKTtcbn1cblxuLyogVGVzdHMgdHdvIG9iamVjdHMgZm9yIGVxdWFsaXR5LCB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZXkgYXJlIG5vdCBlcXVhbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3QoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkpOiB2b2lkIHtcbiAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBcIiR7ZXhwZWN0ZWR9XCIsIGdvdCBcIiR7YWN0dWFsfVwiYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RGbG9hdChhY3R1YWw6IG51bWJlciwgZXhwZWN0ZWQ6IG51bWJlciwgdG9sZXJhbmNlID0gMC4wMDEpOiB2b2lkIHtcbiAgY29uc3QgYXJlRXF1YWwgPSBNYXRoLmFicyhhY3R1YWwgLSBleHBlY3RlZCkgPCB0b2xlcmFuY2U7XG4gIGlmICghYXJlRXF1YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke2V4cGVjdGVkfSwgZ290ICR7YWN0dWFsfSAodG9sZXJhbmNlID0gJHt0b2xlcmFuY2V9KWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0T2JqZWN0KGFjdHVhbDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgZXhwZWN0ZWQ6IHsgW2tleTogc3RyaW5nXTogYW55IH0pIHtcbiAgZm9yIChjb25zdCBbZXhwZWN0ZWRLZXksIGV4cGVjdGVkVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGV4cGVjdGVkKSkge1xuICAgIGlmICghYWN0dWFsLmhhc093blByb3BlcnR5KGV4cGVjdGVkS2V5KSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgcHJvcGVydHkgXCIke2V4cGVjdGVkS2V5fVwiIG5vdCBmb3VuZGApO1xuXG4gICAgY29uc3QgYWN0dWFsVmFsdWUgPSBhY3R1YWxbZXhwZWN0ZWRLZXldO1xuICAgIGlmIChhY3R1YWxWYWx1ZSBpbnN0YW5jZW9mIEFycmF5ICYmIGV4cGVjdGVkVmFsdWUgaW5zdGFuY2VvZiBBcnJheSlcbiAgICAgIGV4cGVjdEFycmF5KGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKTtcbiAgICBlbHNlIGlmIChhY3R1YWxWYWx1ZSBpbnN0YW5jZW9mIE9iamVjdCAmJiBleHBlY3RlZFZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KVxuICAgICAgZXhwZWN0T2JqZWN0KGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKTtcbiAgICBlbHNlIGlmIChOdW1iZXIuaXNGaW5pdGUoYWN0dWFsVmFsdWUpICYmIE51bWJlci5pc0Zpbml0ZShleHBlY3RlZFZhbHVlKSlcbiAgICAgIGV4cGVjdEZsb2F0KGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKTtcbiAgICBlbHNlIGlmIChhY3R1YWxWYWx1ZSAhPSBleHBlY3RlZFZhbHVlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAoJHtleHBlY3RlZFZhbHVlfSkgZm9yIGtleSAnJHtleHBlY3RlZEtleX0nLCBnb3QgKCR7YWN0dWFsVmFsdWV9KWApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RBcnJheShhY3R1YWw6IEFycmF5TGlrZTxhbnk+LCBleHBlY3RlZDogQXJyYXlMaWtlPGFueT4pIHtcbiAgY29uc3QgYWN0dWFsTGVuZ3RoID0gYWN0dWFsLmxlbmd0aDtcbiAgY29uc3QgZXhwZWN0ZWRMZW5ndGggPSBleHBlY3RlZC5sZW5ndGg7XG5cbiAgaWYgKGFjdHVhbExlbmd0aCAhPSBleHBlY3RlZExlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQXJyYXlzIGFyZSBvZiBkaWZmZXJlbnQgbGVuZ3RoOiBhY3R1YWwgYXJyYXkgbGVuZ3RoIGlzICR7YWN0dWFsTGVuZ3RofSBgICtcbiAgICAgIGBhbmQgZXhwZWN0ZWQgYXJyYXkgbGVuZ3RoIGlzICR7ZXhwZWN0ZWRMZW5ndGh9YCk7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdHVhbExlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGFjdHVhbFtpXSBpbnN0YW5jZW9mIEFycmF5ICYmIGV4cGVjdGVkW2ldIGluc3RhbmNlb2YgQXJyYXkpXG4gICAgICBleHBlY3RBcnJheShhY3R1YWxbaV0sIGV4cGVjdGVkW2ldKTtcbiAgICBlbHNlIGlmIChhY3R1YWxbaV0gaW5zdGFuY2VvZiBPYmplY3QgJiYgZXhwZWN0ZWRbaV0gaW5zdGFuY2VvZiBPYmplY3QpXG4gICAgICBleHBlY3RPYmplY3QoYWN0dWFsW2ldLCBleHBlY3RlZFtpXSk7XG4gICAgZWxzZSBpZiAoYWN0dWFsW2ldICE9IGV4cGVjdGVkW2ldKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke2V4cGVjdGVkW2ldfSBhdCBwb3NpdGlvbiAke2l9LCBnb3QgJHthY3R1YWxbaV19YCk7XG4gIH1cbn1cblxuLyogRGVmaW5lcyBhIHRlc3Qgc3VpdGUuICovXG5leHBvcnQgZnVuY3Rpb24gY2F0ZWdvcnkoY2F0ZWdvcnk6IHN0cmluZywgdGVzdHM6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgY3VycmVudENhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gIHRlc3RzKCk7XG59XG5cbi8qIERlZmluZXMgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIHRlc3RzIGluIHRoaXMgY2F0ZWdvcnkgYXJlIGV4ZWN1dGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJlZm9yZShiZWZvcmU6ICgpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5iZWZvcmUgPSBiZWZvcmU7XG59XG5cbi8qIERlZmluZXMgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBhZnRlciB0aGUgdGVzdHMgaW4gdGhpcyBjYXRlZ29yeSBhcmUgZXhlY3V0ZWQuICovXG5leHBvcnQgZnVuY3Rpb24gYWZ0ZXIoYWZ0ZXI6ICgpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5hZnRlciA9IGFmdGVyO1xufVxuXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5UZXN0cyhvcHRpb25zPzogeyBjYXRlZ29yeT86IHN0cmluZywgdGVzdD86IHN0cmluZywgdGVzdENvbnRleHQ/OiBUZXN0Q29udGV4dCB9KSB7XG4gIGNvbnN0IHJlc3VsdHM6IHsgY2F0ZWdvcnk/OiBzdHJpbmcsIG5hbWU/OiBzdHJpbmcsIHN1Y2Nlc3M6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgcmVzdWx0OiBzdHJpbmcsIG1zOiBudW1iZXIsIHNraXBwZWQ6IGJvb2xlYW4gfVtdID0gW107XG4gIGNvbnN0IHBhY2thZ2VOYW1lID0gZ3Jvay5mdW5jdGlvbnMuZ2V0Q3VycmVudENhbGwoKT8uZnVuYz8ucGFja2FnZTtcbiAgY29uc29sZS5sb2coYFJ1bm5pbmcgdGVzdHNgKTtcbiAgb3B0aW9ucyA/Pz0ge307XG4gIG9wdGlvbnMhLnRlc3RDb250ZXh0ID8/PSBuZXcgVGVzdENvbnRleHQoKTtcbiAgZ3Jvay5zaGVsbC5sYXN0RXJyb3IgPSAnJztcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGVzdHMpKSB7XG4gICAgaWYgKG9wdGlvbnM/LmNhdGVnb3J5ICE9IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFrZXkudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKG9wdGlvbnM/LmNhdGVnb3J5LnRvTG93ZXJDYXNlKCkpKVxuICAgICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc29sZS5sb2coYFN0YXJ0ZWQgJHtrZXl9IGNhdGVnb3J5YCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh2YWx1ZS5iZWZvcmUpXG4gICAgICAgIGF3YWl0IHZhbHVlLmJlZm9yZSgpO1xuICAgIH0gY2F0Y2ggKHg6IGFueSkge1xuICAgICAgdmFsdWUuYmVmb3JlU3RhdHVzID0geC50b1N0cmluZygpO1xuICAgIH1cbiAgICBjb25zdCB0ID0gdmFsdWUudGVzdHMgPz8gW107XG4gICAgY29uc3QgcmVzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0Lmxlbmd0aDsgaSsrKVxuICAgICAgcmVzLnB1c2goYXdhaXQgZXhlY1Rlc3QodFtpXSwgb3B0aW9ucz8udGVzdCkpO1xuXG4gICAgY29uc3QgZGF0YSA9IChhd2FpdCBQcm9taXNlLmFsbChyZXMpKS5maWx0ZXIoKGQpID0+IGQucmVzdWx0ICE9ICdza2lwcGVkJyk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh2YWx1ZS5hZnRlcilcbiAgICAgICAgYXdhaXQgdmFsdWUuYWZ0ZXIoKTtcbiAgICB9IGNhdGNoICh4OiBhbnkpIHtcbiAgICAgIHZhbHVlLmFmdGVyU3RhdHVzID0geC50b1N0cmluZygpO1xuICAgIH1cbiAgICBpZiAodmFsdWUuYWZ0ZXJTdGF0dXMpXG4gICAgICBkYXRhLnB1c2goe2NhdGVnb3J5OiBrZXksIG5hbWU6ICdpbml0JywgcmVzdWx0OiB2YWx1ZS5hZnRlclN0YXR1cywgc3VjY2VzczogZmFsc2UsIG1zOiAwLCBza2lwcGVkOiBmYWxzZX0pO1xuICAgIGlmICh2YWx1ZS5iZWZvcmVTdGF0dXMpXG4gICAgICBkYXRhLnB1c2goe2NhdGVnb3J5OiBrZXksIG5hbWU6ICdpbml0JywgcmVzdWx0OiB2YWx1ZS5iZWZvcmVTdGF0dXMsIHN1Y2Nlc3M6IGZhbHNlLCBtczogMCwgc2tpcHBlZDogZmFsc2V9KTtcbiAgICByZXN1bHRzLnB1c2goLi4uZGF0YSk7XG4gIH1cbiAgaWYgKG9wdGlvbnMudGVzdENvbnRleHQuY2F0Y2hVbmhhbmRsZWQpIHtcbiAgICBhd2FpdCBkZWxheSgxMDAwKTtcbiAgICBpZiAoZ3Jvay5zaGVsbC5sYXN0RXJyb3IubGVuZ3RoID4gMCkge1xuICAgICAgcmVzdWx0cy5wdXNoKHtcbiAgICAgICAgY2F0ZWdvcnk6ICdVbmhhbmRsZWQgZXhjZXB0aW9ucycsXG4gICAgICAgIG5hbWU6ICdleGNlcHRpb25zJyxcbiAgICAgICAgcmVzdWx0OiBncm9rLnNoZWxsLmxhc3RFcnJvciwgc3VjY2VzczogZmFsc2UsIG1zOiAwLCBza2lwcGVkOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGlmIChvcHRpb25zLnRlc3RDb250ZXh0LnJlcG9ydCkge1xuICAgIGNvbnN0IGxvZ2dlciA9IG5ldyBERy5Mb2dnZXIoKTtcbiAgICBjb25zdCBzdWNjZXNzZnVsID0gcmVzdWx0cy5maWx0ZXIoKHIpID0+IHIuc3VjY2VzcykubGVuZ3RoO1xuICAgIGNvbnN0IHNraXBwZWQgPSByZXN1bHRzLmZpbHRlcigocikgPT4gci5za2lwcGVkKS5sZW5ndGg7XG4gICAgY29uc3QgZmFpbGVkID0gcmVzdWx0cy5maWx0ZXIoKHIpID0+ICFyLnN1Y2Nlc3MpO1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gJ1BhY2thZ2UgQHBhY2thZ2UgdGVzdGVkOiBAc3VjY2Vzc2Z1bCBzdWNjZXNzZnVsLCBAc2tpcHBlZCBza2lwcGVkLCBAZmFpbGVkIGZhaWxlZCB0ZXN0cyc7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgc3VjY2Vzc2Z1bDogc3VjY2Vzc2Z1bCxcbiAgICAgIHNraXBwZWQ6IHNraXBwZWQsXG4gICAgICBmYWlsZWQ6IGZhaWxlZC5sZW5ndGgsXG4gICAgICBwYWNrYWdlOiBwYWNrYWdlTmFtZVxuICAgIH07XG4gICAgZm9yIChjb25zdCByIG9mIGZhaWxlZCkgT2JqZWN0LmFzc2lnbihwYXJhbXMsIHtbYCR7ci5jYXRlZ29yeX0gfCAke3IubmFtZX1gXTogci5yZXN1bHR9KTtcbiAgICBsb2dnZXIubG9nKGRlc2NyaXB0aW9uLCBwYXJhbXMsICdwYWNrYWdlLXRlc3RlZCcpO1xuICB9XG4gIHJldHVybiByZXN1bHRzO1xufVxuXG5hc3luYyBmdW5jdGlvbiBleGVjVGVzdCh0OiBUZXN0LCBwcmVkaWNhdGU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICBsZXQgcjogeyBjYXRlZ29yeT86IHN0cmluZywgbmFtZT86IHN0cmluZywgc3VjY2VzczogYm9vbGVhbiwgcmVzdWx0OiBzdHJpbmcsIG1zOiBudW1iZXIsIHNraXBwZWQ6IGJvb2xlYW4gfTtcbiAgY29uc3QgZmlsdGVyID0gcHJlZGljYXRlICE9IHVuZGVmaW5lZCAmJiAoIXQubmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgocHJlZGljYXRlLnRvTG93ZXJDYXNlKCkpKTtcbiAgY29uc3Qgc2tpcCA9IHQub3B0aW9ucz8uc2tpcFJlYXNvbiB8fCBmaWx0ZXI7XG4gIGNvbnN0IHNraXBSZWFzb24gPSBmaWx0ZXIgPyAnc2tpcHBlZCcgOiB0Lm9wdGlvbnM/LnNraXBSZWFzb247XG4gIGlmICghc2tpcClcbiAgICBjb25zb2xlLmxvZyhgU3RhcnRlZCAke3QuY2F0ZWdvcnl9ICR7dC5uYW1lfWApO1xuICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKCk7XG5cbiAgdHJ5IHtcbiAgICBpZiAoc2tpcClcbiAgICAgIHIgPSB7c3VjY2VzczogdHJ1ZSwgcmVzdWx0OiBza2lwUmVhc29uISwgbXM6IDAsIHNraXBwZWQ6IHRydWV9O1xuICAgIGVsc2VcbiAgICAgIHIgPSB7c3VjY2VzczogdHJ1ZSwgcmVzdWx0OiBhd2FpdCB0LnRlc3QoKSA/PyAnT0snLCBtczogMCwgc2tpcHBlZDogZmFsc2V9O1xuICB9IGNhdGNoICh4OiBhbnkpIHtcbiAgICByID0ge3N1Y2Nlc3M6IGZhbHNlLCByZXN1bHQ6IHgudG9TdHJpbmcoKSwgbXM6IDAsIHNraXBwZWQ6IGZhbHNlfTtcbiAgfVxuICBjb25zdCBzdG9wID0gbmV3IERhdGUoKTtcbiAgLy8gQHRzLWlnbm9yZVxuICByLm1zID0gc3RvcCAtIHN0YXJ0O1xuICBpZiAoIXNraXApXG4gICAgY29uc29sZS5sb2coYEZpbmlzaGVkICR7dC5jYXRlZ29yeX0gJHt0Lm5hbWV9IGZvciAke3IubXN9IG1zYCk7XG5cbiAgci5jYXRlZ29yeSA9IHQuY2F0ZWdvcnk7XG4gIHIubmFtZSA9IHQubmFtZTtcbiAgcmV0dXJuIHI7XG59XG5cbi8qIFdhaXRzIFttc10gbWlsbGlzZWNvbmRzICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVsYXkobXM6IG51bWJlcikge1xuICBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCBtcykpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXdhaXRDaGVjayhjaGVja0hhbmRsZXI6ICgpID0+IGJvb2xlYW4sXG4gIGVycm9yOiBzdHJpbmcgPSAnVGltZW91dCBleGNlZWRlZCcsIHdhaXQ6IG51bWJlciA9IDUwMCk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgICByZWplY3QobmV3IEVycm9yKGVycm9yKSk7XG4gICAgfSwgd2FpdCk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGludGVydmFsOiBUaW1lb3V0ID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgaWYgKGNoZWNrSGFuZGxlcigpKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfSwgNTApO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGlhbG9nUHJlc2VudChkaWFsb2dUaXRsZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgREcuRGlhbG9nLmdldE9wZW5EaWFsb2dzKCkubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoREcuRGlhbG9nLmdldE9wZW5EaWFsb2dzKClbaV0udGl0bGUgPT0gZGlhbG9nVGl0bGUpXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0ZXN0Vmlld2VyKHY6IHN0cmluZywgZGY6IERHLkRhdGFGcmFtZSwgZGV0ZWN0U2VtYW50aWNUeXBlczogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChkZXRlY3RTZW1hbnRpY1R5cGVzKSBhd2FpdCBncm9rLmRhdGEuZGV0ZWN0U2VtYW50aWNUeXBlcyhkZik7XG4gIGNvbnN0IHR2ID0gZ3Jvay5zaGVsbC5hZGRUYWJsZVZpZXcoZGYpO1xuICBjb25zdCB2aWV3ZXJOYW1lID0gYFtuYW1lPXZpZXdlci0ke3YucmVwbGFjZSgvXFxzKy9nLCAnLScpfSBpXWA7XG4gIGNvbnN0IHNlbGVjdG9yID0gYCR7dmlld2VyTmFtZX0gY2FudmFzLCR7dmlld2VyTmFtZX0gc3ZnLCR7dmlld2VyTmFtZX0gaW1nLFxuICAgICR7dmlld2VyTmFtZX0gaW5wdXQsJHt2aWV3ZXJOYW1lfSBoMSwke3ZpZXdlck5hbWV9IGFgO1xuICBjb25zdCByZXMgPSBbXTtcbiAgdHJ5IHtcbiAgICBsZXQgdmlld2VyID0gdHYuYWRkVmlld2VyKHYpO1xuICAgIGF3YWl0IGF3YWl0Q2hlY2soKCkgPT4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcikgIT09IG51bGwsXG4gICAgICAnY2Fubm90IGxvYWQgdmlld2VyJywgMzAwMCk7XG4gICAgcmVzLnB1c2goQXJyYXkuZnJvbSh0di52aWV3ZXJzKS5sZW5ndGgpO1xuICAgIEFycmF5LmZyb20oZGYucm93KDApLmNlbGxzKS5mb3JFYWNoKChjKSA9PiBjLnZhbHVlID0gbnVsbCk7XG4gICAgZGYucm93cy5zZWxlY3QoKHJvdykgPT4gcm93LmlkeCA+IDEgJiYgcm93LmlkeCA8IDcpO1xuICAgIGZvciAobGV0IGkgPSA3OyBpIDwgMTI7IGkrKykgZGYuZmlsdGVyLnNldChpLCBmYWxzZSk7XG4gICAgZGYuY3VycmVudFJvd0lkeCA9IDE7XG4gICAgY29uc3QgcHJvcHMgPSB2aWV3ZXIuZ2V0T3B0aW9ucyh0cnVlKS5sb29rO1xuICAgIGNvbnN0IG5ld1Byb3BzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuICAgIE9iamVjdC5rZXlzKHByb3BzKS5maWx0ZXIoKGspID0+IHR5cGVvZiBwcm9wc1trXSA9PT0gJ2Jvb2xlYW4nKS5mb3JFYWNoKChrKSA9PiBuZXdQcm9wc1trXSA9ICFwcm9wc1trXSk7XG4gICAgdmlld2VyLnNldE9wdGlvbnMobmV3UHJvcHMpO1xuICAgIGF3YWl0IGRlbGF5KDI1MCk7XG4gICAgY29uc3QgbGF5b3V0ID0gdHYuc2F2ZUxheW91dCgpO1xuICAgIGNvbnN0IG9sZFByb3BzID0gdmlld2VyLmdldE9wdGlvbnMoKS5sb29rO1xuICAgIHR2LnJlc2V0TGF5b3V0KCk7XG4gICAgcmVzLnB1c2goQXJyYXkuZnJvbSh0di52aWV3ZXJzKS5sZW5ndGgpO1xuICAgIHR2LmxvYWRMYXlvdXQobGF5b3V0KTtcbiAgICBhd2FpdCBhd2FpdENoZWNrKCgpID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpICE9PSBudWxsLFxuICAgICAgJ2Nhbm5vdCBsb2FkIHZpZXdlciBmcm9tIGxheW91dCcsIDMwMDApO1xuICAgIGF3YWl0IGRlbGF5KDI1MCk7XG4gICAgcmVzLnB1c2goQXJyYXkuZnJvbSh0di52aWV3ZXJzKS5sZW5ndGgpO1xuICAgIHZpZXdlciA9IEFycmF5LmZyb20odHYudmlld2VycykuZmluZCgodikgPT4gdi50eXBlICE9PSAnR3JpZCcpITtcbiAgICBleHBlY3RBcnJheShyZXMsIFsyLCAxLCAyXSk7XG4gICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KHZpZXdlci5nZXRPcHRpb25zKCkubG9vayksIEpTT04uc3RyaW5naWZ5KG9sZFByb3BzKSk7XG4gIH0gZmluYWxseSB7XG4gICAgdHYuY2xvc2UoKTtcbiAgICBncm9rLnNoZWxsLmNsb3NlVGFibGUoZGYpO1xuICB9XG59XG4iXX0=
|
|
349
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLElBQUksTUFBTSxtQkFBbUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBSXRDLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FLZCxFQUFFLENBQUM7QUFFUCxNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQztBQUN0QyxNQUFNLGFBQWEsR0FBNkIsRUFBRSxDQUFDO0FBQ25ELE1BQU0sQ0FBQyxJQUFJLGVBQXVCLENBQUM7QUFFbkMsTUFBTSxLQUFXLE1BQU0sQ0FLdEI7QUFMRCxXQUFpQixNQUFNO0lBQ3JCLFNBQWdCLE9BQU8sQ0FBQyxLQUFVLEVBQUUsSUFBYTtRQUMvQyxJQUFJLEtBQUssSUFBSSxJQUFJO1lBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxjQUFjLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBSGUsY0FBTyxVQUd0QixDQUFBO0FBQ0gsQ0FBQyxFQUxnQixNQUFNLEtBQU4sTUFBTSxRQUt0QjtBQVFELE1BQU0sT0FBTyxXQUFXO0lBSXRCLFlBQVksY0FBd0IsRUFBRSxNQUFnQjtRQUh0RCxtQkFBYyxHQUFHLElBQUksQ0FBQztRQUN0QixXQUFNLEdBQUcsS0FBSyxDQUFDO1FBR2IsSUFBSSxjQUFjLEtBQUssU0FBUztZQUFFLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1FBQ3ZFLElBQUksTUFBTSxLQUFLLFNBQVM7WUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUNqRCxDQUFDO0lBQUEsQ0FBQztDQUNIO0FBRUQsTUFBTSxPQUFPLElBQUk7SUFNZixZQUFZLFFBQWdCLEVBQUUsSUFBWSxFQUFFLElBQXdCLEVBQUUsT0FB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LEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUIsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUM1RTtnQkFBUztZQUNSLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzNCO0lBQ0gsQ0FBQztDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IFRpbWVvdXQgPSBOb2RlSlMuVGltZW91dDtcblxuZXhwb3J0IGNvbnN0IHRlc3RzOiB7XG4gIFtrZXk6IHN0cmluZ106IHtcbiAgICB0ZXN0cz86IFRlc3RbXSwgYmVmb3JlPzogKCkgPT4gUHJvbWlzZTx2b2lkPiwgYWZ0ZXI/OiAoKSA9PiBQcm9taXNlPHZvaWQ+LFxuICAgIGJlZm9yZVN0YXR1cz86IHN0cmluZywgYWZ0ZXJTdGF0dXM/OiBzdHJpbmdcbiAgfVxufSA9IHt9O1xuXG5jb25zdCBhdXRvVGVzdHNDYXROYW1lID0gJ0F1dG8gVGVzdHMnO1xuY29uc3Qgd2FzUmVnaXN0ZXJlZDoge1trZXk6IHN0cmluZ106IGJvb2xlYW59ID0ge307XG5leHBvcnQgbGV0IGN1cnJlbnRDYXRlZ29yeTogc3RyaW5nO1xuXG5leHBvcnQgbmFtZXNwYWNlIGFzc3VyZSB7XG4gIGV4cG9ydCBmdW5jdGlvbiBub3ROdWxsKHZhbHVlOiBhbnksIG5hbWU/OiBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtuYW1lID09IG51bGwgPyAnVmFsdWUnIDogbmFtZX0gbm90IGRlZmluZWRgKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlc3RPcHRpb25zIHtcbiAgdGltZW91dD86IG51bWJlcjtcbiAgdW5oYW5kbGVkRXhjZXB0aW9uVGltZW91dD86IG51bWJlcjtcbiAgc2tpcFJlYXNvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFRlc3RDb250ZXh0IHtcbiAgY2F0Y2hVbmhhbmRsZWQgPSB0cnVlO1xuICByZXBvcnQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihjYXRjaFVuaGFuZGxlZD86IGJvb2xlYW4sIHJlcG9ydD86IGJvb2xlYW4pIHtcbiAgICBpZiAoY2F0Y2hVbmhhbmRsZWQgIT09IHVuZGVmaW5lZCkgdGhpcy5jYXRjaFVuaGFuZGxlZCA9IGNhdGNoVW5oYW5kbGVkO1xuICAgIGlmIChyZXBvcnQgIT09IHVuZGVmaW5lZCkgdGhpcy5yZXBvcnQgPSByZXBvcnQ7XG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBUZXN0IHtcbiAgdGVzdDogKCkgPT4gUHJvbWlzZTxhbnk+O1xuICBuYW1lOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIG9wdGlvbnM/OiBUZXN0T3B0aW9ucztcblxuICBjb25zdHJ1Y3RvcihjYXRlZ29yeTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHRlc3Q6ICgpID0+IFByb21pc2U8YW55Piwgb3B0aW9ucz86IFRlc3RPcHRpb25zKSB7XG4gICAgdGhpcy5jYXRlZ29yeSA9IGNhdGVnb3J5O1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgb3B0aW9ucyA/Pz0ge307XG4gICAgb3B0aW9ucy50aW1lb3V0ID8/PSAzMDAwMDtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMudGVzdCA9IGFzeW5jICgpOiBQcm9taXNlPGFueT4gPT4ge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IHRlc3QoKTtcbiAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlc3RFdmVudDxUPihldmVudDogT2JzZXJ2YWJsZTxUPixcbiAgaGFuZGxlcjogKGFyZ3M6IFQpID0+IHZvaWQsIHRyaWdnZXI6ICgpID0+IHZvaWQsIG1zOiBudW1iZXIgPSAwKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgbGV0IHN1YjogU3Vic2NyaXB0aW9uO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHN1YiA9IGV2ZW50LnN1YnNjcmliZSgoYXJncykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaGFuZGxlcihhcmdzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICByZXNvbHZlKCdPSycpO1xuICAgIH0pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXByb21pc2UtcmVqZWN0LWVycm9yc1xuICAgICAgcmVqZWN0KCd0aW1lb3V0Jyk7XG4gICAgfSwgbXMpO1xuICAgIHRyaWdnZXIoKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0KG5hbWU6IHN0cmluZywgdGVzdDogKCkgPT4gUHJvbWlzZTxhbnk+LCBvcHRpb25zPzogVGVzdE9wdGlvbnMpOiB2b2lkIHtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMgPT0gdW5kZWZpbmVkKVxuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMgPSBbXTtcbiAgdGVzdHNbY3VycmVudENhdGVnb3J5XS50ZXN0cyEucHVzaChuZXcgVGVzdChjdXJyZW50Q2F0ZWdvcnksIG5hbWUsIHRlc3QsIG9wdGlvbnMpKTtcbn1cblxuLyogVGVzdHMgdHdvIG9iamVjdHMgZm9yIGVxdWFsaXR5LCB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZXkgYXJlIG5vdCBlcXVhbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3QoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkpOiB2b2lkIHtcbiAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBcIiR7ZXhwZWN0ZWR9XCIsIGdvdCBcIiR7YWN0dWFsfVwiYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RGbG9hdChhY3R1YWw6IG51bWJlciwgZXhwZWN0ZWQ6IG51bWJlciwgdG9sZXJhbmNlID0gMC4wMDEpOiB2b2lkIHtcbiAgY29uc3QgYXJlRXF1YWwgPSBNYXRoLmFicyhhY3R1YWwgLSBleHBlY3RlZCkgPCB0b2xlcmFuY2U7XG4gIGlmICghYXJlRXF1YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke2V4cGVjdGVkfSwgZ290ICR7YWN0dWFsfSAodG9sZXJhbmNlID0gJHt0b2xlcmFuY2V9KWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0T2JqZWN0KGFjdHVhbDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgZXhwZWN0ZWQ6IHsgW2tleTogc3RyaW5nXTogYW55IH0pIHtcbiAgZm9yIChjb25zdCBbZXhwZWN0ZWRLZXksIGV4cGVjdGVkVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGV4cGVjdGVkKSkge1xuICAgIGlmICghYWN0dWFsLmhhc093blByb3BlcnR5KGV4cGVjdGVkS2V5KSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgcHJvcGVydHkgXCIke2V4cGVjdGVkS2V5fVwiIG5vdCBmb3VuZGApO1xuXG4gICAgY29uc3QgYWN0dWFsVmFsdWUgPSBhY3R1YWxbZXhwZWN0ZWRLZXldO1xuICAgIGlmIChhY3R1YWxWYWx1ZSBpbnN0YW5jZW9mIEFycmF5ICYmIGV4cGVjdGVkVmFsdWUgaW5zdGFuY2VvZiBBcnJheSlcbiAgICAgIGV4cGVjdEFycmF5KGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKTtcbiAgICBlbHNlIGlmIChhY3R1YWxWYWx1ZSBpbnN0YW5jZW9mIE9iamVjdCAmJiBleHBlY3RlZFZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KVxuICAgICAgZXhwZWN0T2JqZWN0KGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKTtcbiAgICBlbHNlIGlmIChOdW1iZXIuaXNGaW5pdGUoYWN0dWFsVmFsdWUpICYmIE51bWJlci5pc0Zpbml0ZShleHBlY3RlZFZhbHVlKSlcbiAgICAgIGV4cGVjdEZsb2F0KGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKTtcbiAgICBlbHNlIGlmIChhY3R1YWxWYWx1ZSAhPSBleHBlY3RlZFZhbHVlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAoJHtleHBlY3RlZFZhbHVlfSkgZm9yIGtleSAnJHtleHBlY3RlZEtleX0nLCBnb3QgKCR7YWN0dWFsVmFsdWV9KWApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RBcnJheShhY3R1YWw6IEFycmF5TGlrZTxhbnk+LCBleHBlY3RlZDogQXJyYXlMaWtlPGFueT4pIHtcbiAgY29uc3QgYWN0dWFsTGVuZ3RoID0gYWN0dWFsLmxlbmd0aDtcbiAgY29uc3QgZXhwZWN0ZWRMZW5ndGggPSBleHBlY3RlZC5sZW5ndGg7XG5cbiAgaWYgKGFjdHVhbExlbmd0aCAhPSBleHBlY3RlZExlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQXJyYXlzIGFyZSBvZiBkaWZmZXJlbnQgbGVuZ3RoOiBhY3R1YWwgYXJyYXkgbGVuZ3RoIGlzICR7YWN0dWFsTGVuZ3RofSBgICtcbiAgICAgIGBhbmQgZXhwZWN0ZWQgYXJyYXkgbGVuZ3RoIGlzICR7ZXhwZWN0ZWRMZW5ndGh9YCk7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdHVhbExlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGFjdHVhbFtpXSBpbnN0YW5jZW9mIEFycmF5ICYmIGV4cGVjdGVkW2ldIGluc3RhbmNlb2YgQXJyYXkpXG4gICAgICBleHBlY3RBcnJheShhY3R1YWxbaV0sIGV4cGVjdGVkW2ldKTtcbiAgICBlbHNlIGlmIChhY3R1YWxbaV0gaW5zdGFuY2VvZiBPYmplY3QgJiYgZXhwZWN0ZWRbaV0gaW5zdGFuY2VvZiBPYmplY3QpXG4gICAgICBleHBlY3RPYmplY3QoYWN0dWFsW2ldLCBleHBlY3RlZFtpXSk7XG4gICAgZWxzZSBpZiAoYWN0dWFsW2ldICE9IGV4cGVjdGVkW2ldKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke2V4cGVjdGVkW2ldfSBhdCBwb3NpdGlvbiAke2l9LCBnb3QgJHthY3R1YWxbaV19YCk7XG4gIH1cbn1cblxuLyogRGVmaW5lcyBhIHRlc3Qgc3VpdGUuICovXG5leHBvcnQgZnVuY3Rpb24gY2F0ZWdvcnkoY2F0ZWdvcnk6IHN0cmluZywgdGVzdHM6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgY3VycmVudENhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gIHRlc3RzKCk7XG59XG5cbi8qIERlZmluZXMgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIHRlc3RzIGluIHRoaXMgY2F0ZWdvcnkgYXJlIGV4ZWN1dGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJlZm9yZShiZWZvcmU6ICgpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5iZWZvcmUgPSBiZWZvcmU7XG59XG5cbi8qIERlZmluZXMgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBhZnRlciB0aGUgdGVzdHMgaW4gdGhpcyBjYXRlZ29yeSBhcmUgZXhlY3V0ZWQuICovXG5leHBvcnQgZnVuY3Rpb24gYWZ0ZXIoYWZ0ZXI6ICgpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5hZnRlciA9IGFmdGVyO1xufVxuXG5mdW5jdGlvbiBhZGROYW1lc3BhY2Uoczogc3RyaW5nLCBmOiBERy5GdW5jKTogc3RyaW5nIHtcbiAgcmV0dXJuIHMucmVwbGFjZShuZXcgUmVnRXhwKGYubmFtZSwgJ2dpJyksIGYubnFOYW1lKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluaXRBdXRvVGVzdHMocGFja2FnZUlkOiBzdHJpbmcsIG1vZHVsZT86IGFueSkge1xuICBpZiAod2FzUmVnaXN0ZXJlZFtwYWNrYWdlSWRdKSByZXR1cm47XG4gIGNvbnN0IG1vZHVsZVRlc3RzID0gbW9kdWxlID8gbW9kdWxlLnRlc3RzIDogdGVzdHM7XG4gIGlmIChtb2R1bGVUZXN0c1thdXRvVGVzdHNDYXROYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgd2FzUmVnaXN0ZXJlZFtwYWNrYWdlSWRdID0gdHJ1ZTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgbW9kdWxlQXV0b1Rlc3RzID0gW107XG4gIGNvbnN0IHBhY2tGdW5jdGlvbnMgPSBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmZpbHRlcihgcGFja2FnZS5pZCA9IFwiJHtwYWNrYWdlSWR9XCJgKS5saXN0KCk7XG4gIGZvciAoY29uc3QgZiBvZiBwYWNrRnVuY3Rpb25zKSB7XG4gICAgY29uc3QgdGVzdHM6IHN0cmluZ1tdID0gZi5vcHRpb25zWyd0ZXN0J107XG4gICAgaWYgKCEodGVzdHMgJiYgQXJyYXkuaXNBcnJheSh0ZXN0cykgJiYgdGVzdHMubGVuZ3RoKSkgY29udGludWU7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgbW9kdWxlQXV0b1Rlc3RzLnB1c2gobmV3IFRlc3QoYXV0b1Rlc3RzQ2F0TmFtZSwgdGVzdHMubGVuZ3RoID09PSAxID8gZi5uYW1lIDogYCR7Zi5uYW1lfSAke2kgKyAxfWAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZ3Jvay5mdW5jdGlvbnMuZXZhbChhZGROYW1lc3BhY2UodGVzdHNbaV0sIGYpKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcbiAgICAgICAgaWYgKHJlcyAhPT0gdHJ1ZSkgdGhyb3cgYEZhaWxlZDogJHt0ZXN0c1tpXX1gO1xuICAgICAgfSkpO1xuICAgIH1cbiAgfVxuICB3YXNSZWdpc3RlcmVkW3BhY2thZ2VJZF0gPSB0cnVlO1xuICBpZiAoIW1vZHVsZUF1dG9UZXN0cy5sZW5ndGgpIHJldHVybjtcbiAgbW9kdWxlVGVzdHNbYXV0b1Rlc3RzQ2F0TmFtZV0gPSB7dGVzdHM6IG1vZHVsZUF1dG9UZXN0c307XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5UZXN0cyhvcHRpb25zPzoge2NhdGVnb3J5Pzogc3RyaW5nLCB0ZXN0Pzogc3RyaW5nLCB0ZXN0Q29udGV4dD86IFRlc3RDb250ZXh0fSkge1xuICBjb25zdCBwYWNrYWdlXyA9IGdyb2suZnVuY3Rpb25zLmdldEN1cnJlbnRDYWxsKCk/LmZ1bmM/LnBhY2thZ2U7XG4gIGF3YWl0IGluaXRBdXRvVGVzdHMocGFja2FnZV8uaWQpO1xuICBjb25zdCByZXN1bHRzOiB7IGNhdGVnb3J5Pzogc3RyaW5nLCBuYW1lPzogc3RyaW5nLCBzdWNjZXNzOiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgIHJlc3VsdDogc3RyaW5nLCBtczogbnVtYmVyLCBza2lwcGVkOiBib29sZWFuIH1bXSA9IFtdO1xuICBjb25zb2xlLmxvZyhgUnVubmluZyB0ZXN0c2ApO1xuICBvcHRpb25zID8/PSB7fTtcbiAgb3B0aW9ucyEudGVzdENvbnRleHQgPz89IG5ldyBUZXN0Q29udGV4dCgpO1xuICBncm9rLnNoZWxsLmxhc3RFcnJvciA9ICcnO1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0ZXN0cykpIHtcbiAgICBpZiAob3B0aW9ucz8uY2F0ZWdvcnkgIT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIWtleS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgob3B0aW9ucz8uY2F0ZWdvcnkudG9Mb3dlckNhc2UoKSkpXG4gICAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyhgU3RhcnRlZCAke2tleX0gY2F0ZWdvcnlgKTtcbiAgICB0cnkge1xuICAgICAgaWYgKHZhbHVlLmJlZm9yZSlcbiAgICAgICAgYXdhaXQgdmFsdWUuYmVmb3JlKCk7XG4gICAgfSBjYXRjaCAoeDogYW55KSB7XG4gICAgICB2YWx1ZS5iZWZvcmVTdGF0dXMgPSB4LnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIGNvbnN0IHQgPSB2YWx1ZS50ZXN0cyA/PyBbXTtcbiAgICBjb25zdCByZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHQubGVuZ3RoOyBpKyspXG4gICAgICByZXMucHVzaChhd2FpdCBleGVjVGVzdCh0W2ldLCBvcHRpb25zPy50ZXN0KSk7XG4gICAgY29uc3QgZGF0YSA9IChhd2FpdCBQcm9taXNlLmFsbChyZXMpKS5maWx0ZXIoKGQpID0+IGQucmVzdWx0ICE9ICdza2lwcGVkJyk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh2YWx1ZS5hZnRlcilcbiAgICAgICAgYXdhaXQgdmFsdWUuYWZ0ZXIoKTtcbiAgICB9IGNhdGNoICh4OiBhbnkpIHtcbiAgICAgIHZhbHVlLmFmdGVyU3RhdHVzID0geC50b1N0cmluZygpO1xuICAgIH1cbiAgICBpZiAodmFsdWUuYWZ0ZXJTdGF0dXMpXG4gICAgICBkYXRhLnB1c2goe2NhdGVnb3J5OiBrZXksIG5hbWU6ICdpbml0JywgcmVzdWx0OiB2YWx1ZS5hZnRlclN0YXR1cywgc3VjY2VzczogZmFsc2UsIG1zOiAwLCBza2lwcGVkOiBmYWxzZX0pO1xuICAgIGlmICh2YWx1ZS5iZWZvcmVTdGF0dXMpXG4gICAgICBkYXRhLnB1c2goe2NhdGVnb3J5OiBrZXksIG5hbWU6ICdpbml0JywgcmVzdWx0OiB2YWx1ZS5iZWZvcmVTdGF0dXMsIHN1Y2Nlc3M6IGZhbHNlLCBtczogMCwgc2tpcHBlZDogZmFsc2V9KTtcbiAgICByZXN1bHRzLnB1c2goLi4uZGF0YSk7XG4gIH1cbiAgaWYgKG9wdGlvbnMudGVzdENvbnRleHQuY2F0Y2hVbmhhbmRsZWQpIHtcbiAgICBhd2FpdCBkZWxheSgxMDAwKTtcbiAgICBpZiAoZ3Jvay5zaGVsbC5sYXN0RXJyb3IubGVuZ3RoID4gMCkge1xuICAgICAgcmVzdWx0cy5wdXNoKHtcbiAgICAgICAgY2F0ZWdvcnk6ICdVbmhhbmRsZWQgZXhjZXB0aW9ucycsXG4gICAgICAgIG5hbWU6ICdleGNlcHRpb25zJyxcbiAgICAgICAgcmVzdWx0OiBncm9rLnNoZWxsLmxhc3RFcnJvciwgc3VjY2VzczogZmFsc2UsIG1zOiAwLCBza2lwcGVkOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGlmIChvcHRpb25zLnRlc3RDb250ZXh0LnJlcG9ydCkge1xuICAgIGNvbnN0IGxvZ2dlciA9IG5ldyBERy5Mb2dnZXIoKTtcbiAgICBjb25zdCBzdWNjZXNzZnVsID0gcmVzdWx0cy5maWx0ZXIoKHIpID0+IHIuc3VjY2VzcykubGVuZ3RoO1xuICAgIGNvbnN0IHNraXBwZWQgPSByZXN1bHRzLmZpbHRlcigocikgPT4gci5za2lwcGVkKS5sZW5ndGg7XG4gICAgY29uc3QgZmFpbGVkID0gcmVzdWx0cy5maWx0ZXIoKHIpID0+ICFyLnN1Y2Nlc3MpO1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gJ1BhY2thZ2UgQHBhY2thZ2UgdGVzdGVkOiBAc3VjY2Vzc2Z1bCBzdWNjZXNzZnVsLCBAc2tpcHBlZCBza2lwcGVkLCBAZmFpbGVkIGZhaWxlZCB0ZXN0cyc7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgc3VjY2Vzc2Z1bDogc3VjY2Vzc2Z1bCxcbiAgICAgIHNraXBwZWQ6IHNraXBwZWQsXG4gICAgICBmYWlsZWQ6IGZhaWxlZC5sZW5ndGgsXG4gICAgICBwYWNrYWdlOiBwYWNrYWdlX1xuICAgIH07XG4gICAgZm9yIChjb25zdCByIG9mIGZhaWxlZCkgT2JqZWN0LmFzc2lnbihwYXJhbXMsIHtbYCR7ci5jYXRlZ29yeX0gfCAke3IubmFtZX1gXTogci5yZXN1bHR9KTtcbiAgICBsb2dnZXIubG9nKGRlc2NyaXB0aW9uLCBwYXJhbXMsICdwYWNrYWdlLXRlc3RlZCcpO1xuICB9XG4gIHJldHVybiByZXN1bHRzO1xufVxuXG5hc3luYyBmdW5jdGlvbiBleGVjVGVzdCh0OiBUZXN0LCBwcmVkaWNhdGU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICBsZXQgcjogeyBjYXRlZ29yeT86IHN0cmluZywgbmFtZT86IHN0cmluZywgc3VjY2VzczogYm9vbGVhbiwgcmVzdWx0OiBzdHJpbmcsIG1zOiBudW1iZXIsIHNraXBwZWQ6IGJvb2xlYW4gfTtcbiAgY29uc3QgZmlsdGVyID0gcHJlZGljYXRlICE9IHVuZGVmaW5lZCAmJiAoIXQubmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgocHJlZGljYXRlLnRvTG93ZXJDYXNlKCkpKTtcbiAgY29uc3Qgc2tpcCA9IHQub3B0aW9ucz8uc2tpcFJlYXNvbiB8fCBmaWx0ZXI7XG4gIGNvbnN0IHNraXBSZWFzb24gPSBmaWx0ZXIgPyAnc2tpcHBlZCcgOiB0Lm9wdGlvbnM/LnNraXBSZWFzb247XG4gIGlmICghc2tpcClcbiAgICBjb25zb2xlLmxvZyhgU3RhcnRlZCAke3QuY2F0ZWdvcnl9ICR7dC5uYW1lfWApO1xuICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKCk7XG4gIHRyeSB7XG4gICAgaWYgKHNraXApXG4gICAgICByID0ge3N1Y2Nlc3M6IHRydWUsIHJlc3VsdDogc2tpcFJlYXNvbiEsIG1zOiAwLCBza2lwcGVkOiB0cnVlfTtcbiAgICBlbHNlXG4gICAgICByID0ge3N1Y2Nlc3M6IHRydWUsIHJlc3VsdDogYXdhaXQgdC50ZXN0KCkgPz8gJ09LJywgbXM6IDAsIHNraXBwZWQ6IGZhbHNlfTtcbiAgfSBjYXRjaCAoeDogYW55KSB7XG4gICAgciA9IHtzdWNjZXNzOiBmYWxzZSwgcmVzdWx0OiB4LnRvU3RyaW5nKCksIG1zOiAwLCBza2lwcGVkOiBmYWxzZX07XG4gIH1cbiAgY29uc3Qgc3RvcCA9IG5ldyBEYXRlKCk7XG4gIC8vIEB0cy1pZ25vcmVcbiAgci5tcyA9IHN0b3AgLSBzdGFydDtcbiAgaWYgKCFza2lwKVxuICAgIGNvbnNvbGUubG9nKGBGaW5pc2hlZCAke3QuY2F0ZWdvcnl9ICR7dC5uYW1lfSBmb3IgJHtyLm1zfSBtc2ApO1xuICByLmNhdGVnb3J5ID0gdC5jYXRlZ29yeTtcbiAgci5uYW1lID0gdC5uYW1lO1xuICByZXR1cm4gcjtcbn1cblxuLyogV2FpdHMgW21zXSBtaWxsaXNlY29uZHMgKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxheShtczogbnVtYmVyKSB7XG4gIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIG1zKSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhd2FpdENoZWNrKGNoZWNrSGFuZGxlcjogKCkgPT4gYm9vbGVhbixcbiAgZXJyb3I6IHN0cmluZyA9ICdUaW1lb3V0IGV4Y2VlZGVkJywgd2FpdDogbnVtYmVyID0gNTAwKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoZXJyb3IpKTtcbiAgICB9LCB3YWl0KTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgaW50ZXJ2YWw6IFRpbWVvdXQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBpZiAoY2hlY2tIYW5kbGVyKCkpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9LCA1MCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEaWFsb2dQcmVzZW50KGRpYWxvZ1RpdGxlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBERy5EaWFsb2cuZ2V0T3BlbkRpYWxvZ3MoKS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChERy5EaWFsb2cuZ2V0T3BlbkRpYWxvZ3MoKVtpXS50aXRsZSA9PSBkaWFsb2dUaXRsZSlcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlc3RWaWV3ZXIodjogc3RyaW5nLCBkZjogREcuRGF0YUZyYW1lLCBkZXRlY3RTZW1hbnRpY1R5cGVzOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKGRldGVjdFNlbWFudGljVHlwZXMpIGF3YWl0IGdyb2suZGF0YS5kZXRlY3RTZW1hbnRpY1R5cGVzKGRmKTtcbiAgY29uc3QgdHYgPSBncm9rLnNoZWxsLmFkZFRhYmxlVmlldyhkZik7XG4gIGNvbnN0IHZpZXdlck5hbWUgPSBgW25hbWU9dmlld2VyLSR7di5yZXBsYWNlKC9cXHMrL2csICctJyl9IGldYDtcbiAgY29uc3Qgc2VsZWN0b3IgPSBgJHt2aWV3ZXJOYW1lfSBjYW52YXMsJHt2aWV3ZXJOYW1lfSBzdmcsJHt2aWV3ZXJOYW1lfSBpbWcsXG4gICAgJHt2aWV3ZXJOYW1lfSBpbnB1dCwke3ZpZXdlck5hbWV9IGgxLCR7dmlld2VyTmFtZX0gYWA7XG4gIGNvbnN0IHJlcyA9IFtdO1xuICB0cnkge1xuICAgIGxldCB2aWV3ZXIgPSB0di5hZGRWaWV3ZXIodik7XG4gICAgYXdhaXQgYXdhaXRDaGVjaygoKSA9PiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKSAhPT0gbnVsbCxcbiAgICAgICdjYW5ub3QgbG9hZCB2aWV3ZXInLCAzMDAwKTtcbiAgICByZXMucHVzaChBcnJheS5mcm9tKHR2LnZpZXdlcnMpLmxlbmd0aCk7XG4gICAgQXJyYXkuZnJvbShkZi5yb3coMCkuY2VsbHMpLmZvckVhY2goKGMpID0+IGMudmFsdWUgPSBudWxsKTtcbiAgICBkZi5yb3dzLnNlbGVjdCgocm93KSA9PiByb3cuaWR4ID4gMSAmJiByb3cuaWR4IDwgNyk7XG4gICAgZm9yIChsZXQgaSA9IDc7IGkgPCAxMjsgaSsrKSBkZi5maWx0ZXIuc2V0KGksIGZhbHNlKTtcbiAgICBkZi5jdXJyZW50Um93SWR4ID0gMTtcbiAgICBjb25zdCBwcm9wcyA9IHZpZXdlci5nZXRPcHRpb25zKHRydWUpLmxvb2s7XG4gICAgY29uc3QgbmV3UHJvcHM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG4gICAgT2JqZWN0LmtleXMocHJvcHMpLmZpbHRlcigoaykgPT4gdHlwZW9mIHByb3BzW2tdID09PSAnYm9vbGVhbicpLmZvckVhY2goKGspID0+IG5ld1Byb3BzW2tdID0gIXByb3BzW2tdKTtcbiAgICB2aWV3ZXIuc2V0T3B0aW9ucyhuZXdQcm9wcyk7XG4gICAgYXdhaXQgZGVsYXkoMjUwKTtcbiAgICBjb25zdCBsYXlvdXQgPSB0di5zYXZlTGF5b3V0KCk7XG4gICAgY29uc3Qgb2xkUHJvcHMgPSB2aWV3ZXIuZ2V0T3B0aW9ucygpLmxvb2s7XG4gICAgdHYucmVzZXRMYXlvdXQoKTtcbiAgICByZXMucHVzaChBcnJheS5mcm9tKHR2LnZpZXdlcnMpLmxlbmd0aCk7XG4gICAgdHYubG9hZExheW91dChsYXlvdXQpO1xuICAgIGF3YWl0IGF3YWl0Q2hlY2soKCkgPT4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcikgIT09IG51bGwsXG4gICAgICAnY2Fubm90IGxvYWQgdmlld2VyIGZyb20gbGF5b3V0JywgMzAwMCk7XG4gICAgYXdhaXQgZGVsYXkoMjUwKTtcbiAgICByZXMucHVzaChBcnJheS5mcm9tKHR2LnZpZXdlcnMpLmxlbmd0aCk7XG4gICAgdmlld2VyID0gQXJyYXkuZnJvbSh0di52aWV3ZXJzKS5maW5kKCh2KSA9PiB2LnR5cGUgIT09ICdHcmlkJykhO1xuICAgIGV4cGVjdEFycmF5KHJlcywgWzIsIDEsIDJdKTtcbiAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkodmlld2VyLmdldE9wdGlvbnMoKS5sb29rKSwgSlNPTi5zdHJpbmdpZnkob2xkUHJvcHMpKTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0di5jbG9zZSgpO1xuICAgIGdyb2suc2hlbGwuY2xvc2VUYWJsZShkZik7XG4gIH1cbn1cbiJdfQ==
|