@eui/components 17.3.6-snapshot-1717504386226 → 17.3.6-snapshot-1717751602934

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.
@@ -204,12 +204,15 @@ export class EuiTreeComponent {
204
204
  }
205
205
  }
206
206
  setAllSelection(isChecked) {
207
+ this.tempSelectionModel = new SelectionModel(true, this.selectionModel.selected, true, (a, b) => a?.path === b?.path);
207
208
  this.setIsCheckedForAll(this.treeDataRunTime, isChecked);
209
+ this.selectionModel.setSelection(...this.tempSelectionModel.selected);
208
210
  this.changeDetectorRef.markForCheck();
209
211
  }
210
212
  updateTreeItem(givenTreeItem, path) {
211
213
  const treeItem = structuredClone(givenTreeItem);
212
214
  if (treeItem && path) {
215
+ this.tempSelectionModel = new SelectionModel(true, this.selectionModel.selected, true, (a, b) => a?.path === b?.path);
213
216
  this.setTreeData(path, this.processInputs([treeItem])[0]);
214
217
  const pathArr = path.split('.');
215
218
  const index = parseInt(pathArr.pop(), 10);
@@ -223,10 +226,6 @@ export class EuiTreeComponent {
223
226
  const itemRecursiveSelectionState = this.calculateItemSelectionRecursiveState(treeItem);
224
227
  this.setRunTimeSelectionRecursiveStateTree(path, itemRecursiveSelectionState);
225
228
  this.syncStateChangesAtPath(path);
226
- // Rendering
227
- this.changeDetectorRef.detectChanges();
228
- this.treeComponentInstance.renderNodeChanges([]);
229
- this.treeComponentInstance.renderNodeChanges(this.treeDataRunTime);
230
229
  if (this.cdkTreeControl.isExpanded(treeItemRuntime) && !treeItem.node.isExpanded) {
231
230
  this.cdkTreeControl.toggle(treeItemRuntime);
232
231
  }
@@ -237,7 +236,11 @@ export class EuiTreeComponent {
237
236
  this.getInitialSelection(this.getRunTimeTreeItem(path)?.children)?.forEach((runTimeItem) => {
238
237
  this.selectTreeItem(this.getRunTimeBackupTreeItem(runTimeItem.path));
239
238
  });
239
+ this.selectionModel.setSelection(...this.tempSelectionModel.selected);
240
+ // Rendering
240
241
  this.changeDetectorRef.detectChanges();
242
+ this.treeComponentInstance.renderNodeChanges([]);
243
+ this.treeComponentInstance.renderNodeChanges(this.treeDataRunTime);
241
244
  }
242
245
  }
243
246
  onNodeClick(treeRunTimeItem) {
@@ -257,10 +260,12 @@ export class EuiTreeComponent {
257
260
  const item = this.getTreeItem(path);
258
261
  const runTimeBackupTreeItem = this.getRunTimeBackupTreeItem(path);
259
262
  const renderedRunTimeTreeItem = this.getRunTimeTreeItem(path);
260
- const node = item.node;
263
+ const node = item?.node;
264
+ this.tempSelectionModel = new SelectionModel(true, this.selectionModel.selected, true, (a, b) => a?.path === b?.path);
261
265
  // console.log(path,item,runTimeTreeItem, renderedRunTimeTreeItem);
262
266
  if (this.customNodeSelectFn) {
263
267
  this.customNodeSelectFn(path, evt.target.checked, item, new CustomNodeSelectFnHelper(this));
268
+ this.selectionModel.setSelection(...this.tempSelectionModel.selected);
264
269
  }
265
270
  else if (!node?.selectConfig?.singleSelect) {
266
271
  node.isSelected = evt.target.checked;
@@ -301,6 +306,7 @@ export class EuiTreeComponent {
301
306
  else {
302
307
  this.changeDetectorRef.detectChanges();
303
308
  }
309
+ this.selectionModel.setSelection(...this.tempSelectionModel.selected);
304
310
  }
305
311
  else {
306
312
  const prevItem = this.selectionModel.selected[0];
@@ -528,26 +534,18 @@ export class EuiTreeComponent {
528
534
  node.isSelected = isChecked;
529
535
  node.isIndeterminate = false;
530
536
  if (isChecked) {
531
- this.selectTreeItem(runtimeBackupTreeItem);
537
+ this.tempSelectionModel.select(runtimeBackupTreeItem);
532
538
  }
533
539
  else {
534
- this.deselectTreeItem(runtimeBackupTreeItem);
540
+ this.tempSelectionModel.deselect(runtimeBackupTreeItem);
535
541
  }
536
542
  }
537
543
  }
538
544
  selectTreeItem(runTimeBackupTreeItem) {
539
- const indexOfItem = this.getSelectionIndexOfItem(runTimeBackupTreeItem);
540
- if (indexOfItem === -1) {
541
- this.selectionModel.select(runTimeBackupTreeItem);
542
- }
545
+ this.tempSelectionModel.select(runTimeBackupTreeItem);
543
546
  }
544
547
  deselectTreeItem(runTimeTreeItem) {
545
- const indexOfItem = this.getSelectionIndexOfItem(runTimeTreeItem);
546
- if (indexOfItem > -1) {
547
- const newSelection = [...this.selectionModel.selected];
548
- newSelection.splice(indexOfItem, 1);
549
- this.selectionModel.setSelection(...newSelection);
550
- }
548
+ this.tempSelectionModel.deselect(runTimeTreeItem);
551
549
  }
552
550
  createTreeDataRuntime(nodes) {
553
551
  return structuredClone(nodes)?.map((item, index) => {
@@ -579,13 +577,11 @@ export class EuiTreeComponent {
579
577
  const childrenSelectionRecursive = [];
580
578
  if (treeItem.children && treeItem.children.length > 0) {
581
579
  treeItem.children.forEach((child, index) => {
582
- if (child.node.selectable) {
583
- childrenSelectionRecursive[index] = this.calculateItemSelectionRecursiveState(child);
584
- }
580
+ childrenSelectionRecursive[index] = this.calculateItemSelectionRecursiveState(child);
585
581
  });
586
582
  }
587
583
  const childStates = childrenSelectionRecursive.map((_) => _.selectionRecursiveState);
588
- const itemState = this.decideSelectionRecursiveState(childStates, treeItem.node.isSelected, treeItem.node?.selectConfig?.recursive, treeItem.node?.selectConfig?.noAutoSelectParent);
584
+ const itemState = treeItem.node.selectable ? this.decideSelectionRecursiveState(childStates, treeItem.node.isSelected, treeItem.node?.selectConfig?.recursive, treeItem.node?.selectConfig?.noAutoSelectParent) : undefined;
589
585
  return {
590
586
  selectionRecursiveState: itemState,
591
587
  children: childrenSelectionRecursive,
@@ -593,16 +589,16 @@ export class EuiTreeComponent {
593
589
  }
594
590
  decideSelectionRecursiveState(childStates = [], isSelected, recursive, noAutoSelectParent) {
595
591
  let itemState = 'indeterminate';
596
- if (isSelected && childStates.every((state) => state === 'allSelected')) {
592
+ if (isSelected && childStates.filter((childStates) => childStates).every((state) => state === 'allSelected')) {
597
593
  itemState = 'allSelected';
598
594
  }
599
- else if (!isSelected && childStates.every((state) => state === 'allNotSelected')) {
595
+ else if (!isSelected && childStates.filter((childStates) => childStates).every((state) => state === 'allNotSelected')) {
600
596
  itemState = 'allNotSelected';
601
597
  }
602
- else if (recursive && childStates.every((state) => state === 'allSelected') && !isSelected && !noAutoSelectParent) {
598
+ else if (recursive && childStates.filter((childStates) => childStates).every((state) => state === 'allSelected') && !isSelected && !noAutoSelectParent) {
603
599
  itemState = 'allSelected';
604
600
  }
605
- else if (recursive && childStates.every((state) => state === 'allNotSelected') && isSelected) {
601
+ else if (recursive && childStates.filter((childStates) => childStates).every((state) => state === 'allNotSelected') && isSelected) {
606
602
  itemState = 'allNotSelected';
607
603
  }
608
604
  return itemState;
@@ -1020,4 +1016,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImpor
1020
1016
  exports: [EuiTreeComponent],
1021
1017
  }]
1022
1018
  }] });
1023
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLXRyZWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZXVpLXRyZWUvZXVpLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZXVpLXRyZWUvZXVpLXRyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBQ0wsUUFBUSxFQUNSLHVCQUF1QixFQUN2QixZQUFZLEVBQ1osTUFBTSxFQUNOLGlCQUFpQixFQU1qQixXQUFXLEVBRVgsU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQVFILGlCQUFpQixFQUVqQix3QkFBd0IsR0FDM0IsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFXLE1BQU0sbUJBQW1CLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFB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QkFVRixhQUFhO3NCQURoQixLQUFLO2dCQVVGLGFBQWE7c0JBRGhCLEtBQUs7Z0JBU0ksZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07O0FBODRCWCxNQUFNLE9BQU8sYUFBYTtpSUFBYixhQUFhO2tJQUFiLGFBQWEsaUJBNS9CYixnQkFBZ0IsYUEyK0JyQixZQUFZO1lBQ1osWUFBWTtZQUNaLFdBQVc7WUFDWCxlQUFlO1lBQ2Ysc0JBQXNCO1lBQ3RCLGFBQWE7WUFDYixlQUFlO1lBQ2YsYUFBYTtZQUNiLGNBQWM7WUFDZCxjQUFjO1lBQ2QsYUFBYTtZQUNiLGlCQUFpQjtZQUNqQixlQUFlLGFBdi9CVixnQkFBZ0I7a0lBNC9CaEIsYUFBYSxZQWpCbEIsWUFBWTtZQUNaLFlBQVk7WUFDWixXQUFXO1lBQ1gsZUFBZTtZQUNmLHNCQUFzQjtZQUN0QixhQUFhO1lBQ2IsZUFBZTtZQUNmLGFBQWE7WUFDYixjQUFjO1lBQ2QsY0FBYztZQUNkLGFBQWE7WUFDYixpQkFBaUI7WUFDakIsZUFBZTs7MkZBS1YsYUFBYTtrQkFuQnpCLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFO3dCQUNMLFlBQVk7d0JBQ1osWUFBWTt3QkFDWixXQUFXO3dCQUNYLGVBQWU7d0JBQ2Ysc0JBQXNCO3dCQUN0QixhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixjQUFjO3dCQUNkLGNBQWM7d0JBQ2QsYUFBYTt3QkFDYixpQkFBaUI7d0JBQ2pCLGVBQWU7cUJBQ2xCO29CQUNELFlBQVksRUFBRSxDQUFDLGdCQUFnQixDQUFDO29CQUNoQyxPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztpQkFDOUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBJbnB1dCxcbiAgICBOZ01vZHVsZSxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgT25Jbml0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBIb3N0QmluZGluZyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtcbiAgICBTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSxcbiAgICBUcmVlRGF0YU1vZGVsLFxuICAgIFRyZWVJdGVtTW9kZWwsXG4gICAgVHJlZURhdGFSdW5UaW1lTW9kZWwsXG4gICAgVHJlZUl0ZW1SdW5UaW1lTW9kZWwsXG4gICAgVHJlZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVNb2RlbCxcbiAgICBFdWlUcmVlU2VsZWN0aW9uQ2hhbmdlcyxcbiAgICBFdWlUcmVlUGFnaW5hdGlvbixcbiAgICBDdXN0b21Ob2RlU2VsZWN0Rm4sXG4gICAgQ3VzdG9tTm9kZVNlbGVjdEZuSGVscGVyLFxufSBmcm9tICcuL2V1aS10cmVlLm1vZGVsJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRXVpSW5wdXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9ldWktaW5wdXQtY2hlY2tib3gnO1xuaW1wb3J0IHsgRXVpQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2V1aS1idXR0b24nO1xuaW1wb3J0IHsgRXVpSWNvbk1vZHVsZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9ldWktaWNvbic7XG5pbXBvcnQgeyBFdWlMYWJlbE1vZHVsZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9ldWktbGFiZWwnO1xuaW1wb3J0IHsgRXVpQmFkZ2VNb2R1bGUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvZXVpLWJhZGdlJztcbmltcG9ydCB7IEV1aUNoaXBNb2R1bGUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvZXVpLWNoaXAnO1xuaW1wb3J0IHsgRXVpRHJvcGRvd25Nb2R1bGUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvZXVpLWRyb3Bkb3duJztcbmltcG9ydCB7IE5lc3RlZFRyZWVDb250cm9sLCBDZGtUcmVlTW9kdWxlLCBDZGtUcmVlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xuaW1wb3J0IHsgQXJyYXlEYXRhU291cmNlLCBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFNjcm9sbGluZ01vZHVsZSwgU2Nyb2xsRGlzcGF0Y2hlciwgQ2RrU2Nyb2xsYWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZXVpLXRyZWUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9ldWktdHJlZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc3R5bGVzL19pbmRleC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgRXVpVHJlZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICAgIHB1YmxpYyBnZXQgY3NzQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRDc3NDbGFzc2VzKCk7XG4gICAgfVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLWUyZScpIEBJbnB1dCgpIGUyZUF0dHIgPSAnZXVpLXRyZWUnO1xuICAgIEBJbnB1dCgpIG5vZGVzOiBUcmVlRGF0YU1vZGVsO1xuICAgIC8vIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgdHlwZSBvciB0dXJuIGludG8gYSBnZW5lcmljLCBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL2dlbmVyaWNzLmh0bWxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIEBJbnB1dCgpIG5vZGVUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcbiAgICAvLyBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IHR5cGUgb3IgdHVybiBpbnRvIGEgZ2VuZXJpYywgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9nZW5lcmljcy5odG1sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBASW5wdXQoKSBub2RlQ29udGVudE1ldGFkYXRhVGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgQElucHV0KCkgcmlnaHRDb250ZXh0TWVudVRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBJbnB1dCgpIGN1c3RvbU5vZGVTZWxlY3RGbjogQ3VzdG9tTm9kZVNlbGVjdEZuO1xuICAgIEBJbnB1dCgpIGV4cGFuZGVkSWNvbkNsYXNzOiBzdHJpbmc7XG4gICAgQElucHV0KCkgY29sbGFwc2VkSWNvbkNsYXNzOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZXhwYW5kZWRTdmdJY29uQ2xhc3MgPSAnZXVpLWNoZXZyb24tZm9yd2FyZDpldWknO1xuICAgIEBJbnB1dCgpIGNvbGxhcHNlZFN2Z0ljb25DbGFzcyA9ICdldWktY2hldnJvbi1kb3duOmV1aSc7XG5cbiAgICBAVmlld0NoaWxkKCdjZGtTY3JvbGxhYmxlUmVmJywgeyByZWFkOiBDZGtTY3JvbGxhYmxlIH0pIGNka1Njcm9sbGFibGVSZWY6IENka1Njcm9sbGFibGU7XG4gICAgQFZpZXdDaGlsZCgndHJlZUNvbXBvbmVudEluc3RhbmNlJykgcHVibGljIHRyZWVDb21wb25lbnRJbnN0YW5jZTogQ2RrVHJlZTxUcmVlSXRlbVJ1blRpbWVNb2RlbD47XG5cbiAgICAvLyBAVmlld0NoaWxkKCd0cmVlQ29tcG9uZW50SW5zdGFuY2UnKSBwdWJsaWMgdHJlZUNvbXBvbmVudEluc3RhbmNlOiBhbnk7XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBpc0NsaWNrVG9nZ2xpbmdOb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNDbGlja1RvZ2dsaW5nTm9kZTtcbiAgICB9XG5cbiAgICBzZXQgaXNDbGlja1RvZ2dsaW5nTm9kZSh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2lzQ2xpY2tUb2dnbGluZ05vZGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzTXVsdGlzZWxlY3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc011bHRpc2VsZWN0O1xuICAgIH1cblxuICAgIHNldCBpc011bHRpc2VsZWN0KHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faXNNdWx0aXNlbGVjdCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBnZXQgaXNTaW5nbGVTZWxlY3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1NpbmdsZVNlbGVjdDtcbiAgICB9XG5cbiAgICBzZXQgaXNTaW5nbGVTZWxlY3QodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc1NpbmdsZVNlbGVjdCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBnZXQgaXNSZWN1cnNpdmVTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1JlY3Vyc2l2ZVNlbGVjdGlvbjtcbiAgICB9XG5cbiAgICBzZXQgaXNSZWN1cnNpdmVTZWxlY3Rpb24odmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc1JlY3Vyc2l2ZVNlbGVjdGlvbiA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBnZXQgaXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbjtcbiAgICB9XG5cbiAgICBzZXQgaXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb24odmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbiA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBnZXQgc2hvd1VuZGVybGluZWRMaW5rcygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3dVbmRlcmxpbmVkTGlua3M7XG4gICAgfVxuXG4gICAgc2V0IHNob3dVbmRlcmxpbmVkTGlua3ModmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9zaG93VW5kZXJsaW5lZExpbmtzID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBzaG93TGluZXMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaG93TGluZXM7XG4gICAgfVxuXG4gICAgc2V0IHNob3dMaW5lcyh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX3Nob3dMaW5lcyA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBnZXQgYXV0b1RyYW5zbGF0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1dG9UcmFuc2xhdGU7XG4gICAgfVxuXG4gICAgc2V0IGF1dG9UcmFuc2xhdGUodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9hdXRvVHJhbnNsYXRlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBoaWdobGlnaHRQYXRoKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faGlnaGxpZ2h0UGF0aDtcbiAgICB9XG5cbiAgICBzZXQgaGlnaGxpZ2h0UGF0aCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2hpZ2hsaWdodFBhdGggPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEV1aVRyZWVTZWxlY3Rpb25DaGFuZ2VzPigpO1xuICAgIEBPdXRwdXQoKSBub2RlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPFRyZWVJdGVtTW9kZWw+KCk7XG4gICAgQE91dHB1dCgpIG5vZGVUb2dnbGUgPSBuZXcgRXZlbnRFbWl0dGVyPFRyZWVJdGVtTW9kZWw+KCk7XG4gICAgY2RrQXJyYXlEYXRhU291cmNlOiBBcnJheURhdGFTb3VyY2U8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+O1xuICAgIGNka1RyZWVDb250cm9sOiBOZXN0ZWRUcmVlQ29udHJvbDxUcmVlSXRlbVJ1blRpbWVNb2RlbD47XG4gICAgcmVuZGVyVHJlZTogYm9vbGVhbjtcbiAgICBwdWJsaWMgdWlkOiBzdHJpbmcgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwMDAwKS50b1N0cmluZygpO1xuICAgIHByb3RlY3RlZCBfaXNNdWx0aUxldmVsO1xuICAgIHByaXZhdGUgcHJvY2Vzc2VkTm9kZXM6IFRyZWVEYXRhTW9kZWw7XG4gICAgcHJpdmF0ZSB0cmVlRGF0YVJ1blRpbWU6IFRyZWVEYXRhUnVuVGltZU1vZGVsO1xuICAgIHByaXZhdGUgdHJlZURhdGFSdW5UaW1lQmFja3VwOiBUcmVlRGF0YVJ1blRpbWVNb2RlbDtcbiAgICBwcml2YXRlIHJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZTogQXJyYXk8VHJlZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVNb2RlbD47XG4gICAgcHJpdmF0ZSBzZWxlY3Rpb25Nb2RlbDogU2VsZWN0aW9uTW9kZWw8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+O1xuICAgIHByaXZhdGUgX2lzQ2xpY2tUb2dnbGluZ05vZGUgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9pc011bHRpc2VsZWN0ID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfaXNTaW5nbGVTZWxlY3QgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9pc1JlY3Vyc2l2ZVNlbGVjdGlvbiA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2lzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uID0gdHJ1ZTtcbiAgICBwcml2YXRlIF9zaG93VW5kZXJsaW5lZExpbmtzID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfc2hvd0xpbmVzID0gdHJ1ZTtcbiAgICBwcml2YXRlIF9hdXRvVHJhbnNsYXRlID0gdHJ1ZTtcbiAgICBwcml2YXRlIF9oaWdobGlnaHRQYXRoID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBzZWxlY3Rpb25Nb2RlbFN1YnM7XG4gICAgcHJpdmF0ZSBzY3JvbGxEaXNwYXRjaGVyU3VicztcbiAgICBwcml2YXRlIF9zZWxlY3Rpb247XG4gICAgcHJpdmF0ZSB0cmVlUGFnaW5hdGlvbjogRXVpVHJlZVBhZ2luYXRpb248VHJlZUl0ZW1SdW5UaW1lTW9kZWw+O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgc2Nyb2xsRGlzcGF0Y2hlcjogU2Nyb2xsRGlzcGF0Y2hlcikge31cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRUcmVlKCk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlc1snbm9kZXMnXT8uY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzWydub2RlcyddPy5wcmV2aW91c1ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlclRyZWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaW5pdFRyZWUoKTtcbiAgICAgICAgICAgIGlmKHRoaXMudHJlZUNvbXBvbmVudEluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmVlQ29tcG9uZW50SW5zdGFuY2U/LnJlbmRlck5vZGVDaGFuZ2VzKFtdKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVDb21wb25lbnRJbnN0YW5jZT8ucmVuZGVyTm9kZUNoYW5nZXModGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGVsU3Vicykge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbFN1YnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zY3JvbGxEaXNwYXRjaGVyU3Vicykge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxEaXNwYXRjaGVyU3Vicy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0U2VsZWN0aW9uKCk6IFRyZWVEYXRhTW9kZWwge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uO1xuICAgIH1cblxuICAgIGdldFByb2Nlc3NlZE5vZGVzKCk6IFRyZWVEYXRhTW9kZWwge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzZWROb2RlcztcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IHR5cGUgb3IgdHVybiBpbnRvIGEgZ2VuZXJpYywgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9nZW5lcmljcy5odG1sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICB0cmFja0J5KGluZGV4OiBudW1iZXIsIGl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKTogYW55IHtcbiAgICAgICAgcmV0dXJuIGl0ZW0ucGF0aDtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IHR5cGUgb3IgdHVybiBpbnRvIGEgZ2VuZXJpYywgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9nZW5lcmljcy5odG1sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICB0cmFja0J5Q29udHJvbChpdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCk6IGFueSB7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIGdldFRyZWVJdGVtKHBhdGg6IHN0cmluZyk6IFRyZWVJdGVtTW9kZWwge1xuICAgICAgICBjb25zdCBpbmRleEFycjogQXJyYXk8bnVtYmVyPiA9IHRoaXMucmVzb2x2ZVBhdGgocGF0aCk7XG4gICAgICAgIGxldCBub2RlQXJyID0gdGhpcy5wcm9jZXNzZWROb2RlcztcbiAgICAgICAgbGV0IG5vZGU7XG4gICAgICAgIGlmIChub2RlQXJyICYmIEFycmF5LmlzQXJyYXkobm9kZUFycikpIHtcbiAgICAgICAgICAgIGluZGV4QXJyPy5mb3JFYWNoKChwYXRoSW5kZXg6IG51bWJlciwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBpbmRleEFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVBcnIgPSBub2RlQXJyICYmIG5vZGVBcnJbcGF0aEluZGV4XT8uY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGVBcnJbcGF0aEluZGV4XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBleHBhbmRBbGwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wuZXhwYW5kQWxsKCk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgZXhwYW5kQXQocGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ2V0UGFyZW50UGF0aHMocGF0aCkucmV2ZXJzZSgpLmZvckVhY2goKHBhcmVudFBhdGgpPT57XG4gICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmV4cGFuZCh0aGlzLmdldFJ1blRpbWVUcmVlSXRlbShwYXJlbnRQYXRoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmV4cGFuZCh0aGlzLmdldFJ1blRpbWVUcmVlSXRlbShwYXRoKSk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIGNvbGxhcHNlQWxsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmNvbGxhcHNlQWxsKCk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgZmlsdGVyVGVybShmaWx0ZXJJbnB1dDogc3RyaW5nLCBmaWx0ZXJLZXk/OiBzdHJpbmcsIHNob3dDaGlsZHJlbk9mTWF0Y2hlZEl0ZW1zPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoZmlsdGVySW5wdXQgIT09ICcnICYmIGZpbHRlcklucHV0ICE9PSBudWxsICYmIHR5cGVvZiBmaWx0ZXJJbnB1dCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRoaXMudHJlZURhdGFSdW5UaW1lID0gdGhpcy5maWx0ZXJUcmVlRGF0YShzdHJ1Y3R1cmVkQ2xvbmUodGhpcy50cmVlRGF0YVJ1blRpbWVCYWNrdXApLCBmaWx0ZXJLZXkgfHwgJ2xhYmVsJywgZmlsdGVySW5wdXQsIHNob3dDaGlsZHJlbk9mTWF0Y2hlZEl0ZW1zKTtcbiAgICAgICAgICAgIHRoaXMudHJlZURhdGFSdW5UaW1lID0gdGhpcy5hcHBseVJ1blRpbWVMYXN0SXRlbXModGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgdGhpcy5jZGtBcnJheURhdGFTb3VyY2UgPSBuZXcgQXJyYXlEYXRhU291cmNlKHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wgPSBuZXcgTmVzdGVkVHJlZUNvbnRyb2w8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+KChub2RlKSA9PiBub2RlPy5jaGlsZHJlbiwgeyB0cmFja0J5OiB0aGlzLnRyYWNrQnlDb250cm9sIH0pO1xuICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5kYXRhTm9kZXMgPSB0aGlzLnRyZWVEYXRhUnVuVGltZTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlclRyZWUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZE1hdGNoZWQodGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgLy8gdGhpcy5leHBhbmRBbGwoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudHJlZURhdGFSdW5UaW1lID0gc3RydWN0dXJlZENsb25lKHRoaXMudHJlZURhdGFSdW5UaW1lQmFja3VwKTtcbiAgICAgICAgICAgIHRoaXMuY2RrQXJyYXlEYXRhU291cmNlID0gbmV3IEFycmF5RGF0YVNvdXJjZSh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sID0gbmV3IE5lc3RlZFRyZWVDb250cm9sPFRyZWVJdGVtUnVuVGltZU1vZGVsPigobm9kZSkgPT4gbm9kZT8uY2hpbGRyZW4sIHsgdHJhY2tCeTogdGhpcy50cmFja0J5Q29udHJvbCB9KTtcbiAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wuZGF0YU5vZGVzID0gdGhpcy50cmVlRGF0YVJ1blRpbWU7XG4gICAgICAgICAgICB0aGlzLnJlbmRlclRyZWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5leHBhbmRBbGwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldEFsbFNlbGVjdGlvbihpc0NoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRJc0NoZWNrZWRGb3JBbGwodGhpcy50cmVlRGF0YVJ1blRpbWUsIGlzQ2hlY2tlZCk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgdXBkYXRlVHJlZUl0ZW0oZ2l2ZW5UcmVlSXRlbTogVHJlZUl0ZW1Nb2RlbCwgcGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRyZWVJdGVtID0gc3RydWN0dXJlZENsb25lKGdpdmVuVHJlZUl0ZW0pO1xuICAgICAgICBpZiAodHJlZUl0ZW0gJiYgcGF0aCkge1xuICAgICAgICB0aGlzLnNldFRyZWVEYXRhKHBhdGgsIHRoaXMucHJvY2Vzc0lucHV0cyhbdHJlZUl0ZW1dKVswXSk7XG4gICAgICAgIGNvbnN0IHBhdGhBcnIgPSBwYXRoLnNwbGl0KCcuJyk7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gcGFyc2VJbnQocGF0aEFyci5wb3AoKSwgMTApO1xuICAgICAgICBjb25zdCB0cmVlSXRlbVJ1bnRpbWUgPSB0aGlzLmNhbGN1bGF0ZVJ1blRpbWVTdGF0ZSh0cmVlSXRlbSwgaW5kZXgsIHBhdGhBcnIuam9pbignLicpKTtcbiAgICAgICAgaWYgKHRyZWVJdGVtUnVudGltZT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRyZWVJdGVtUnVudGltZS5jaGlsZHJlbiA9IHRoaXMuYXBwbHlSdW5UaW1lTGFzdEl0ZW1zKHRyZWVJdGVtUnVudGltZS5jaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRUcmVlRGF0YVJ1blRpbWVCYWNrdXAocGF0aCwgdHJlZUl0ZW1SdW50aW1lKTtcbiAgICAgICAgdGhpcy5zZXRUcmVlRGF0YVJ1blRpbWUocGF0aCwgdHJlZUl0ZW1SdW50aW1lKTtcbiAgICAgICAgLy8gaXRlbVJlY3Vyc2l2ZVNlbGVjdGlvblN0YXRlXG4gICAgICAgIGNvbnN0IGl0ZW1SZWN1cnNpdmVTZWxlY3Rpb25TdGF0ZSA9IHRoaXMuY2FsY3VsYXRlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKHRyZWVJdGVtKTtcbiAgICAgICAgdGhpcy5zZXRSdW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGVUcmVlKHBhdGgsIGl0ZW1SZWN1cnNpdmVTZWxlY3Rpb25TdGF0ZSk7XG4gICAgICAgIHRoaXMuc3luY1N0YXRlQ2hhbmdlc0F0UGF0aChwYXRoKTtcbiAgICAgICAgLy8gUmVuZGVyaW5nXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLnRyZWVDb21wb25lbnRJbnN0YW5jZS5yZW5kZXJOb2RlQ2hhbmdlcyhbXSk7XG4gICAgICAgIHRoaXMudHJlZUNvbXBvbmVudEluc3RhbmNlLnJlbmRlck5vZGVDaGFuZ2VzKHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgaWYgKHRoaXMuY2RrVHJlZUNvbnRyb2wuaXNFeHBhbmRlZCh0cmVlSXRlbVJ1bnRpbWUpICYmICF0cmVlSXRlbS5ub2RlLmlzRXhwYW5kZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wudG9nZ2xlKHRyZWVJdGVtUnVudGltZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuY2RrVHJlZUNvbnRyb2wuaXNFeHBhbmRlZCh0cmVlSXRlbVJ1bnRpbWUpICYmIHRyZWVJdGVtLm5vZGUuaXNFeHBhbmRlZCkge1xuICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5leHBhbmQodHJlZUl0ZW1SdW50aW1lKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbmRlckluaXRpYWxFeHBhbmQodGhpcy5nZXRSdW5UaW1lVHJlZUl0ZW0ocGF0aCk/LmNoaWxkcmVuKTtcbiAgICAgICAgdGhpcy5nZXRJbml0aWFsU2VsZWN0aW9uKHRoaXMuZ2V0UnVuVGltZVRyZWVJdGVtKHBhdGgpPy5jaGlsZHJlbik/LmZvckVhY2goKHJ1blRpbWVJdGVtKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFRyZWVJdGVtKHRoaXMuZ2V0UnVuVGltZUJhY2t1cFRyZWVJdGVtKHJ1blRpbWVJdGVtLnBhdGgpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Ob2RlQ2xpY2sodHJlZVJ1blRpbWVJdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLm5vZGVDbGljay5lbWl0KHRoaXMuZ2V0VHJlZUl0ZW0odHJlZVJ1blRpbWVJdGVtPy5wYXRoKSk7XG4gICAgICAgIGlmICh0aGlzLmlzQ2xpY2tUb2dnbGluZ05vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wudG9nZ2xlKHRyZWVSdW5UaW1lSXRlbSk7XG4gICAgICAgICAgICB0aGlzLm9uTm9kZVRvZ2dsZSh0cmVlUnVuVGltZUl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Ob2RlVG9nZ2xlKHRyZWVSdW5UaW1lSXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5nZXRUcmVlSXRlbSh0cmVlUnVuVGltZUl0ZW0/LnBhdGgpLm5vZGUuaXNFeHBhbmRlZCA9IHRoaXMuY2RrVHJlZUNvbnRyb2wuaXNFeHBhbmRlZCh0cmVlUnVuVGltZUl0ZW0pO1xuICAgICAgICB0aGlzLm5vZGVUb2dnbGUuZW1pdCh0aGlzLmdldFRyZWVJdGVtKHRyZWVSdW5UaW1lSXRlbT8ucGF0aCkpO1xuICAgIH1cblxuICAgIC8vIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgdHlwZSBvciB0dXJuIGludG8gYSBnZW5lcmljLCBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL2dlbmVyaWNzLmh0bWxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIG5vZGVTZWxlY3RlZChldnQ6IGFueSwgcGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldFRyZWVJdGVtKHBhdGgpO1xuICAgICAgICBjb25zdCBydW5UaW1lQmFja3VwVHJlZUl0ZW0gPSB0aGlzLmdldFJ1blRpbWVCYWNrdXBUcmVlSXRlbShwYXRoKTtcbiAgICAgICAgY29uc3QgcmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0gPSB0aGlzLmdldFJ1blRpbWVUcmVlSXRlbShwYXRoKTtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGl0ZW0ubm9kZTtcbiAgICAgICAgLy8gY29uc29sZS5sb2cocGF0aCxpdGVtLHJ1blRpbWVUcmVlSXRlbSwgcmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0pO1xuICAgICAgICBpZih0aGlzLmN1c3RvbU5vZGVTZWxlY3RGbil7XG4gICAgICAgICAgICB0aGlzLmN1c3RvbU5vZGVTZWxlY3RGbihwYXRoLCBldnQudGFyZ2V0LmNoZWNrZWQsIGl0ZW0sIG5ldyBDdXN0b21Ob2RlU2VsZWN0Rm5IZWxwZXIodGhpcykpXG4gICAgICAgIH0gIGVsc2UgaWYgKCFub2RlPy5zZWxlY3RDb25maWc/LnNpbmdsZVNlbGVjdCkge1xuICAgICAgICAgICAgbm9kZS5pc1NlbGVjdGVkID0gZXZ0LnRhcmdldC5jaGVja2VkO1xuICAgICAgICAgICAgbm9kZS5pc0luZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIElmIHRoZSBub2RlIGlzIHJlY3Vyc2l2ZSBpdCBzZXRzIGV2ZXJ5IGNoaWxkcmVuIHdpdGggdGhlIGNoYW5nZS5cbiAgICAgICAgICAgIGlmIChyZW5kZXJlZFJ1blRpbWVUcmVlSXRlbT8uY2hpbGRyZW4gJiYgcmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGU/LnNlbGVjdENvbmZpZz8ucmVjdXJzaXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlcmVkUnVuVGltZVRyZWVJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRJc0NoZWNrZWRGb3JBbGwocmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0/LmNoaWxkcmVuLCBldnQudGFyZ2V0LmNoZWNrZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZXRSdW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGVUcmVlKFxuICAgICAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUoc3RydWN0dXJlZENsb25lKHRoaXMuZ2V0VHJlZUl0ZW0ocGF0aCkpKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAocmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0/LmNoaWxkcmVuICYmIHJlbmRlcmVkUnVuVGltZVRyZWVJdGVtPy5jaGlsZHJlbj8ubGVuZ3RoID49IDApIHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZT8uc2VsZWN0Q29uZmlnPy5yZWN1cnNpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5zZXRJc0NoZWNrZWRGb3JBbGwocmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0/LmNoaWxkcmVuLCBldnQudGFyZ2V0LmNoZWNrZWQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJ1blN0YXRlQ2hhbmdlc0ZvckFsbChyZW5kZXJlZFJ1blRpbWVUcmVlSXRlbT8uY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVDb21wb25lbnRJbnN0YW5jZT8ucmVuZGVyTm9kZUNoYW5nZXMoW10pO1xuICAgICAgICAgICAgICAgIHRoaXMudHJlZUNvbXBvbmVudEluc3RhbmNlPy5yZW5kZXJOb2RlQ2hhbmdlcyh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN5bmNTdGF0ZUNoYW5nZXNBdFBhdGgocGF0aCk7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXRUcmVlSXRlbShwYXRoKS5ub2RlLmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFRyZWVJdGVtKHJ1blRpbWVCYWNrdXBUcmVlSXRlbSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzZWxlY3RUcmVlSXRlbShydW5UaW1lQmFja3VwVHJlZUl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgbm9kZVBhdGhzU2VxID0gdGhpcy5nZXRQYXJlbnRQYXRocyhwYXRoKTtcbiAgICAgICAgICAgIGlmIChub2RlUGF0aHNTZXEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIG5vZGVQYXRoc1NlcS5mb3JFYWNoKChub2RlUGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyZWVJdGVtID0gdGhpcy5nZXRUcmVlSXRlbShub2RlUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkU3RhdGVzID0gdGhpcy5nZXRSdW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUobm9kZVBhdGgpLmNoaWxkcmVuLm1hcCgoXykgPT4gXy5zZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZVBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlY2lkZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkU3RhdGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWVJdGVtLm5vZGU/LmlzU2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJlZUl0ZW0ubm9kZT8uc2VsZWN0Q29uZmlnPy5yZWN1cnNpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJlZUl0ZW0ubm9kZT8uc2VsZWN0Q29uZmlnPy5ub0F1dG9TZWxlY3RQYXJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN5bmNTdGF0ZUNoYW5nZXNBdFBhdGgobm9kZVBhdGgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZJdGVtID0gdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFswXTtcbiAgICAgICAgICAgIGlmIChldnQudGFyZ2V0LmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJldkl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRUcmVlSXRlbShwcmV2SXRlbS5wYXRoKS5ub2RlLmlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdChwcmV2SXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGl0ZW0ubm9kZS5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdChydW5UaW1lQmFja3VwVHJlZUl0ZW0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdGVtLm5vZGUuaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwuZGVzZWxlY3QocnVuVGltZUJhY2t1cFRyZWVJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmhpZ2hsaWdodFBhdGgpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXZ0LnRhcmdldC5jaGVja2VkICYmIHByZXZJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZJdGVtTm9kZVBhdGhzU2VxID0gdGhpcy5nZXRQYXJlbnRQYXRocyhwcmV2SXRlbS5wYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZJdGVtTm9kZVBhdGhzU2VxLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZJdGVtTm9kZVBhdGhzU2VxLmZvckVhY2goKG5vZGVQYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShub2RlUGF0aCwgJ2FsbE5vdFNlbGVjdGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zeW5jU3RhdGVDaGFuZ2VzQXRQYXRoKG5vZGVQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVQYXRoc1NlcSA9IHRoaXMuZ2V0UGFyZW50UGF0aHMocGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGVQYXRoc1NlcT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBub2RlUGF0aHNTZXEuZm9yRWFjaCgobm9kZVBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVSdW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUobm9kZVBhdGgsIGV2dC50YXJnZXQuY2hlY2tlZCA/ICdpbmRldGVybWluYXRlJyA6ICdhbGxOb3RTZWxlY3RlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zeW5jU3RhdGVDaGFuZ2VzQXRQYXRoKG5vZGVQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhc0NoaWxkID0gKF86IG51bWJlciwgaXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiBib29sZWFuID0+ICEhaXRlbT8uY2hpbGRyZW4gJiYgaXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+PSAwO1xuXG4gICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgb25TZWxlY3RGbihwYXRoOiBzdHJpbmcpOiAoZXZ0OiBhbnkpID0+IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5nZXRUcmVlSXRlbShwYXRoKT8ubm9kZT8uc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZVNlbGVjdGVkID0gdGhpcy5ub2RlU2VsZWN0ZWQuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIC8vIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgdHlwZSBvciB0dXJuIGludG8gYSBnZW5lcmljLCBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL2dlbmVyaWNzLmh0bWxcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICByZXR1cm4gKGV2dDogYW55KSA9PiBub2RlU2VsZWN0ZWQoZXZ0LCBwYXRoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IHR5cGUgb3IgdHVybiBpbnRvIGEgZ2VuZXJpYywgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9nZW5lcmljcy5odG1sXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIHJldHVybiAoZXZ0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybigndHJlZUl0ZW1Nb2RlbC5ub2RlLnNlbGVjdGFibGUgaXMgZmFsc2UsIHlvdSBjYW4gbm90IGltcGxlbWVudCBvblNlbGVjdCcpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdldFJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShwYXRoOiBzdHJpbmcpOiBUcmVlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZU1vZGVsIHtcbiAgICAgICAgY29uc3QgaW5kZXhBcnI6IEFycmF5PG51bWJlcj4gPSB0aGlzLnJlc29sdmVQYXRoKHBhdGgpO1xuICAgICAgICBsZXQgbm9kZUFyciA9IHRoaXMucnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlO1xuICAgICAgICBsZXQgbm9kZTtcbiAgICAgICAgaW5kZXhBcnI/LmZvckVhY2goKHBhdGhJbmRleDogbnVtYmVyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgaW5kZXhBcnIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIG5vZGVBcnIgPSBub2RlQXJyW3BhdGhJbmRleF0/LmNoaWxkcmVuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBub2RlID0gbm9kZUFycltwYXRoSW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0VHJlZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubm9kZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzTXVsdGlMZXZlbCA9IHRoaXMuY2hlY2tJZk11bHRpTGV2ZWwodGhpcy5ub2Rlcyk7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NlZE5vZGVzID0gdGhpcy5wcm9jZXNzSW5wdXRzKHN0cnVjdHVyZWRDbG9uZSh0aGlzLm5vZGVzKSk7XG4gICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHRoaXMuY3JlYXRlVHJlZURhdGFSdW50aW1lKHRoaXMucHJvY2Vzc2VkTm9kZXMpO1xuICAgICAgICAgICAgdGhpcy50cmVlRGF0YVJ1blRpbWUgPSB0aGlzLmFwcGx5UnVuVGltZUxhc3RJdGVtcyh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICB0aGlzLnJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSA9IHRoaXMuY3JlYXRlUnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKHRoaXMucHJvY2Vzc2VkTm9kZXMpO1xuICAgICAgICAgICAgdGhpcy50cmVlRGF0YVJ1blRpbWVCYWNrdXAgPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgLy8gdG9kbyBJdCBzaG91bGQgYmUgY29uZmlndXJhYmxlLCA4MDAsIDIgYW5kIDQwMCBhcmUgaGFyZCBjb2RlZCByaWdodCBub3dcbiAgICAgICAgICAgIGlmICh0aGlzLnRyZWVEYXRhUnVuVGltZUJhY2t1cC5sZW5ndGggPiA4MDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVQYWdpbmF0aW9uID0gbmV3IEV1aVRyZWVQYWdpbmF0aW9uPFRyZWVJdGVtUnVuVGltZU1vZGVsPih0aGlzLnRyZWVEYXRhUnVuVGltZUJhY2t1cCwgMSwgMiwgNDAwKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYWdpbmF0ZWREYXRhID0gdGhpcy50cmVlUGFnaW5hdGlvbi5nZXRWaWV3RGF0YSgpLmRhdGE7XG4gICAgICAgICAgICAgICAgdGhpcy5jZGtBcnJheURhdGFTb3VyY2UgPSBuZXcgQXJyYXlEYXRhU291cmNlPFRyZWVJdGVtUnVuVGltZU1vZGVsPihwYWdpbmF0ZWREYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sID0gbmV3IE5lc3RlZFRyZWVDb250cm9sPFRyZWVJdGVtUnVuVGltZU1vZGVsPigobm9kZSkgPT4gbm9kZT8uY2hpbGRyZW4sIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdGhpcy50cmFja0J5Q29udHJvbCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmRhdGFOb2RlcyA9IHBhZ2luYXRlZERhdGE7XG4gICAgICAgICAgICAgICAgdGhpcy5ydW5TY3JvbGxMaXN0ZW5lcigpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNka0FycmF5RGF0YVNvdXJjZSA9IG5ldyBBcnJheURhdGFTb3VyY2U8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+KHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sID0gbmV3IE5lc3RlZFRyZWVDb250cm9sPFRyZWVJdGVtUnVuVGltZU1vZGVsPigobm9kZSkgPT4gbm9kZT8uY2hpbGRyZW4sIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdGhpcy50cmFja0J5Q29udHJvbCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmRhdGFOb2RlcyA9IHRoaXMudHJlZURhdGFSdW5UaW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZW5kZXJJbml0aWFsRXhwYW5kKHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwgPSBuZXcgU2VsZWN0aW9uTW9kZWw8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+KFxuICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRJbml0aWFsU2VsZWN0aW9uKHRoaXMudHJlZURhdGFSdW5UaW1lKSxcbiAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgIChhLCBiKSA9PiBhPy5wYXRoID09PSBiPy5wYXRoLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbiA9IFsuLi50aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkXT8ubWFwKChpdGVtKSA9PiB0aGlzLmdldFRyZWVJdGVtKGl0ZW0/LnBhdGgpKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSA9IHRydWU7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlbFN1YnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsU3Vicy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbFN1YnMgPSB0aGlzLnNlbGVjdGlvbk1vZGVsLmNoYW5nZWQucGlwZShkZWJvdW5jZVRpbWUoMSkpLnN1YnNjcmliZSgoc2MpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3Rpb25DaGFuZ2UgPSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZGVkOiBzYy5hZGRlZC5tYXAoKF8pID0+IHRoaXMuZ2V0VHJlZUl0ZW0oXy5wYXRoKSksXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZWQ6IHNjLnJlbW92ZWQubWFwKChfKSA9PiB0aGlzLmdldFRyZWVJdGVtKF8ucGF0aCkpLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsuLi50aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkXS5tYXAoKGl0ZW0pID0+IHRoaXMuZ2V0VHJlZUl0ZW0oaXRlbS5wYXRoKSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb24gPSBzZWxlY3Rpb25DaGFuZ2Uuc2VsZWN0aW9uO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoc2VsZWN0aW9uQ2hhbmdlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc0lucHV0cyh0cmVlRGF0YTogVHJlZURhdGFNb2RlbCk6IFRyZWVEYXRhTW9kZWwge1xuICAgICAgICBpZiAodGhpcy5pc011bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICB0cmVlRGF0YSA9IHRoaXMub3ZlcnJpZGVUcmVlRGF0YU1vZGVsRm9yU2VsZWN0aW9uKHRyZWVEYXRhLCB0aGlzLmlzUmVjdXJzaXZlU2VsZWN0aW9uLCAhdGhpcy5pc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNTaW5nbGVTZWxlY3QpIHtcbiAgICAgICAgICAgIHRyZWVEYXRhID0gdGhpcy5vdmVycmlkZVRyZWVEYXRhTW9kZWxGb3JTZWxlY3Rpb24odHJlZURhdGEsIGZhbHNlLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyZWVEYXRhO1xuICAgIH1cblxuICAgIHByaXZhdGUgb3ZlcnJpZGVUcmVlRGF0YU1vZGVsRm9yU2VsZWN0aW9uKFxuICAgICAgICBub2RlQXJyOiBUcmVlRGF0YU1vZGVsLFxuICAgICAgICBpc1JlY3Vyc2l2ZTogYm9vbGVhbixcbiAgICAgICAgbm9BdXRvU2VsZWN0UGFyZW50OiBib29sZWFuLFxuICAgICAgICBzaW5nbGVTZWxlY3Q/OiBib29sZWFuLFxuICAgICk6IFRyZWVEYXRhTW9kZWwge1xuICAgICAgICByZXR1cm4gbm9kZUFycj8ubWFwKChpdGVtOiBUcmVlSXRlbU1vZGVsLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbT8uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgbm9kZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbS5ub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogdHlwZW9mIGl0ZW0/Lm5vZGU/LnNlbGVjdGFibGUgPT09ICd1bmRlZmluZWQnID8gdHJ1ZSA6IGl0ZW0/Lm5vZGU/LnNlbGVjdGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpc1NlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzSW5kZXRlcm1pbmF0ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RDb25maWc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLm5vZGUuc2VsZWN0Q29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGl0ZW0/Lm5vZGU/LnNlbGVjdENvbmZpZz8ucmVjdXJzaXZlID09PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAhIWlzUmVjdXJzaXZlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGl0ZW0/Lm5vZGU/LnNlbGVjdENvbmZpZz8ucmVjdXJzaXZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vQXV0b1NlbGVjdFBhcmVudDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGl0ZW0/Lm5vZGU/LnNlbGVjdENvbmZpZz8ubm9BdXRvU2VsZWN0UGFyZW50ID09PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBub0F1dG9TZWxlY3RQYXJlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaXRlbT8ubm9kZT8uc2VsZWN0Q29uZmlnPy5ub0F1dG9TZWxlY3RQYXJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU2VsZWN0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaXRlbT8ubm9kZT8uc2VsZWN0Q29uZmlnPy5zaW5nbGVTZWxlY3QgPT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNpbmdsZVNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpdGVtPy5ub2RlPy5zZWxlY3RDb25maWc/LnNpbmdsZVNlbGVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLm92ZXJyaWRlVHJlZURhdGFNb2RlbEZvclNlbGVjdGlvbihpdGVtLmNoaWxkcmVuLCBpc1JlY3Vyc2l2ZSwgbm9BdXRvU2VsZWN0UGFyZW50LCBzaW5nbGVTZWxlY3QpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgIG5vZGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0ubm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IHR5cGVvZiBpdGVtPy5ub2RlPy5zZWxlY3RhYmxlID09PSAndW5kZWZpbmVkJyA/IHRydWUgOiBpdGVtPy5ub2RlPy5zZWxlY3RhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0Q29uZmlnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbS5ub2RlPy5zZWxlY3RDb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU2VsZWN0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaXRlbT8ubm9kZT8uc2VsZWN0Q29uZmlnPy5zaW5nbGVTZWxlY3QgPT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNpbmdsZVNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpdGVtPy5ub2RlPy5zZWxlY3RDb25maWc/LnNpbmdsZVNlbGVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBydW5TY3JvbGxMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICAgICAvKiBpZiAodGhpcy5zY3JvbGxEaXNwYXRjaGVyU3VicykgeyB0b2RvXG4gICAgICAgICAgICB0aGlzLnNjcm9sbERpc3BhdGNoZXJTdWJzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0qL1xuICAgICAgICB0aGlzLnNjcm9sbERpc3BhdGNoZXJTdWJzID0gdGhpcy5zY3JvbGxEaXNwYXRjaGVyLnNjcm9sbGVkKCkuc3Vic2NyaWJlKChzY3JvbGxhYmxlOiBDZGtTY3JvbGxhYmxlKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2Nyb2xsYWJsZSAmJiB0aGlzLmNoZWNrSWZDdXJyZW50U2Nyb2xsYWJsZShzY3JvbGxhYmxlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQXRCb3R0b20gPVxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlPy5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgKyBzY3JvbGxhYmxlPy5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQgPj1cbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZT8uZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0O1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQXRUb3AgPSBzY3JvbGxhYmxlPy5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPT09IDA7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0VsZW1lbnQ6JywgdGhpcy5jZGtTY3JvbGxhYmxlUmVmLmdldEVsZW1lbnRSZWYoKSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzQXRCb3R0b20gJiYgIXRoaXMudHJlZVBhZ2luYXRpb24uaXNBdE1heCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZURhdGFSdW5UaW1lID0gdGhpcy50cmVlUGFnaW5hdGlvbi5wYWdpbmF0ZU5leHQoKS5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlRGF0YVJ1blRpbWUgPSB0aGlzLmFwcGx5UnVuVGltZUxhc3RJdGVtcyh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNka0FycmF5RGF0YVNvdXJjZSA9IG5ldyBBcnJheURhdGFTb3VyY2UodGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbCA9IG5ldyBOZXN0ZWRUcmVlQ29udHJvbDxUcmVlSXRlbVJ1blRpbWVNb2RlbD4oKG5vZGUpID0+IG5vZGU/LmNoaWxkcmVuLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdGhpcy50cmFja0J5Q29udHJvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5kYXRhTm9kZXMgPSB0aGlzLnRyZWVEYXRhUnVuVGltZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclRyZWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZEFsbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG90YWxIZWlnaHQgPSBzY3JvbGxhYmxlLm1lYXN1cmVTY3JvbGxPZmZzZXQoJ2JvdHRvbScpICsgc2Nyb2xsYWJsZS5tZWFzdXJlU2Nyb2xsT2Zmc2V0KCd0b3AnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZpZXdwb3J0SGVpZ2h0ID0gc2Nyb2xsYWJsZS5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvblRvU2Nyb2xsID0gdG90YWxIZWlnaHQgLSB2aWV3cG9ydEhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGFibGUuc2Nyb2xsVG8oeyB0b3A6IHBvc2l0aW9uVG9TY3JvbGwgLyAyIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc0F0VG9wICYmIHRoaXMudHJlZVBhZ2luYXRpb24uZ2V0Q3VycmVudFN0YXJ0UGFnZSgpID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ub2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHRoaXMudHJlZVBhZ2luYXRpb24ucGFnaW5hdGVQcmV2KCkuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZURhdGFSdW5UaW1lID0gdGhpcy5hcHBseVJ1blRpbWVMYXN0SXRlbXModGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jZGtBcnJheURhdGFTb3VyY2UgPSBuZXcgQXJyYXlEYXRhU291cmNlKHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wgPSBuZXcgTmVzdGVkVHJlZUNvbnRyb2w8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+KChub2RlKSA9PiBub2RlPy5jaGlsZHJlbiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRoaXMudHJhY2tCeUNvbnRyb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wuZGF0YU5vZGVzID0gdGhpcy50cmVlRGF0YVJ1blRpbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclRyZWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBhbmRBbGwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsSGVpZ2h0ID0gc2Nyb2xsYWJsZS5tZWFzdXJlU2Nyb2xsT2Zmc2V0KCdib3R0b20nKSArIHNjcm9sbGFibGUubWVhc3VyZVNjcm9sbE9mZnNldCgndG9wJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IHNjcm9sbGFibGUuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb25Ub1Njcm9sbCA9IHRvdGFsSGVpZ2h0IC0gdmlld3BvcnRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlLnNjcm9sbFRvKHsgdG9wOiBwb3NpdGlvblRvU2Nyb2xsIC8gMiArIHZpZXdwb3J0SGVpZ2h0IH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlbGVjdGlvbkluZGV4T2ZJdGVtKHJ1blRpbWVUcmVlSXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZC5maW5kSW5kZXgoKGkpID0+IGk/LnBhdGggPT09IHJ1blRpbWVUcmVlSXRlbT8ucGF0aCk7XG4gICAgfVxuICAgIC8vIHRvZG8gcmUtdGhpbmsgYWJvdXQgdGhlIGFjY2VzcyBmcm9tIGN1c3RvbSBvbiBub2RlIHNlbGVjdCBoZWxwZXJcbiAgICBwcml2YXRlIHNpbGVudFNlbGVjdChwYXRoOnN0cmluZywgaXNDaGVja2VkOiBib29sZWFuKTogdm9pZHtcbiAgICAgICAgY29uc3QgcnVudGltZUJhY2t1cFRyZWVJdGVtID0gdGhpcy5nZXRSdW5UaW1lQmFja3VwVHJlZUl0ZW0ocGF0aCk7XG4gICAgICAgIGNvbnN0IHRyZWVJdGVtID0gdGhpcy5nZXRUcmVlSXRlbShwYXRoKTtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRyZWVJdGVtLm5vZGU7XG4gICAgICAgIGlmIChub2RlPy5zZWxlY3RhYmxlKSB7XG4gICAgICAgICAgICBub2RlLmlzU2VsZWN0ZWQgPSBpc0NoZWNrZWQ7XG4gICAgICAgICAgICBub2RlLmlzSW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKGlzQ2hlY2tlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0VHJlZUl0ZW0ocnVudGltZUJhY2t1cFRyZWVJdGVtKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXNlbGVjdFRyZWVJdGVtKHJ1bnRpbWVCYWNrdXBUcmVlSXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNlbGVjdFRyZWVJdGVtKHJ1blRpbWVCYWNrdXBUcmVlSXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXhPZkl0ZW0gPSB0aGlzLmdldFNlbGVjdGlvbkluZGV4T2ZJdGVtKHJ1blRpbWVCYWNrdXBUcmVlSXRlbSk7XG4gICAgICAgIGlmIChpbmRleE9mSXRlbSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KHJ1blRpbWVCYWNrdXBUcmVlSXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGRlc2VsZWN0VHJlZUl0ZW0ocnVuVGltZVRyZWVJdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleE9mSXRlbSA9IHRoaXMuZ2V0U2VsZWN0aW9uSW5kZXhPZkl0ZW0ocnVuVGltZVRyZWVJdGVtKTtcbiAgICAgICAgaWYgKGluZGV4T2ZJdGVtID4gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IFsuLi50aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkXTtcbiAgICAgICAgICAgIG5ld1NlbGVjdGlvbi5zcGxpY2UoaW5kZXhPZkl0ZW0sIDEpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZXRTZWxlY3Rpb24oLi4ubmV3U2VsZWN0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlVHJlZURhdGFSdW50aW1lKG5vZGVzOiBUcmVlRGF0YU1vZGVsKTogVHJlZURhdGFSdW5UaW1lTW9kZWwge1xuICAgICAgICByZXR1cm4gc3RydWN0dXJlZENsb25lKG5vZGVzKT8ubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FsY3VsYXRlUnVuVGltZVN0YXRlKGl0ZW0sIGluZGV4KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBseVJ1blRpbWVMYXN0SXRlbXMoaXRlbXM6IFRyZWVEYXRhUnVuVGltZU1vZGVsKTogVHJlZURhdGFSdW5UaW1lTW9kZWwge1xuICAgICAgICByZXR1cm4gaXRlbXM/Lm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtPy5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGxhc3Q6IGl0ZW1zLmxlbmd0aCA9PT0gaW5kZXggKyAxID8gdHJ1ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IGl0ZW0uY2hpbGRyZW4/Lmxlbmd0aCA+IDAgPyB0aGlzLmFwcGx5UnVuVGltZUxhc3RJdGVtcyhpdGVtLmNoaWxkcmVuKSA6IGl0ZW0/LmNoaWxkcmVuLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGxhc3Q6IGl0ZW1zLmxlbmd0aCA9PT0gaW5kZXggKyAxID8gdHJ1ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShub2RlczogVHJlZURhdGFNb2RlbCk6IEFycmF5PFRyZWVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlTW9kZWw+IHtcbiAgICAgICAgcmV0dXJuIHN0cnVjdHVyZWRDbG9uZShub2Rlcyk/Lm1hcCgoaXRlbSkgPT4gdGhpcy5jYWxjdWxhdGVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUoeyAuLi5pdGVtIH0pKTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGluZyBydW4gdGltZSBzdGF0ZSB3aGljaCBpbmNsdWRlcyBjaGlsZHJlbiBzZWxlY3Rpb24gc3RhdGUgZm9yIHNlbGVjdGlvbiB0cmVlLlxuICAgIHByaXZhdGUgY2FsY3VsYXRlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKHRyZWVJdGVtOiBUcmVlSXRlbU1vZGVsKTogVHJlZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVNb2RlbCB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuU2VsZWN0aW9uUmVjdXJzaXZlOiBBcnJheTxUcmVlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZU1vZGVsPiA9IFtdO1xuICAgICAgICBpZiAodHJlZUl0ZW0uY2hpbGRyZW4gJiYgdHJlZUl0ZW0uY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdHJlZUl0ZW0uY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYoY2hpbGQubm9kZS5zZWxlY3RhYmxlKXtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW5TZWxlY3Rpb25SZWN1cnNpdmVbaW5kZXhdID0gdGhpcy5jYWxjdWxhdGVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUoY2hpbGQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoaWxkU3RhdGVzID0gY2hpbGRyZW5TZWxlY3Rpb25SZWN1cnNpdmUubWFwKChfKSA9PiBfLnNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKTtcbiAgICAgICAgY29uc3QgaXRlbVN0YXRlOiBTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSA9IHRoaXMuZGVjaWRlU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUoXG4gICAgICAgICAgICBjaGlsZFN0YXRlcyxcbiAgICAgICAgICAgIHRyZWVJdGVtLm5vZGUuaXNTZWxlY3RlZCxcbiAgICAgICAgICAgIHRyZWVJdGVtLm5vZGU/LnNlbGVjdENvbmZpZz8ucmVjdXJzaXZlLFxuICAgICAgICAgICAgdHJlZUl0ZW0ubm9kZT8uc2VsZWN0Q29uZmlnPy5ub0F1dG9TZWxlY3RQYXJlbnQsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZTogaXRlbVN0YXRlLFxuICAgICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuU2VsZWN0aW9uUmVjdXJzaXZlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVjaWRlU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUoXG4gICAgICAgIGNoaWxkU3RhdGVzOiBBcnJheTxTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZT4gPSBbXSxcbiAgICAgICAgaXNTZWxlY3RlZDogYm9vbGVhbixcbiAgICAgICAgcmVjdXJzaXZlOiBib29sZWFuLFxuICAgICAgICBub0F1dG9TZWxlY3RQYXJlbnQ6IGJvb2xlYW4sXG4gICAgKTogU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUge1xuICAgICAgICBsZXQgaXRlbVN0YXRlOiBTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSA9ICdpbmRldGVybWluYXRlJztcbiAgICAgICAgaWYgKGlzU2VsZWN0ZWQgJiYgY2hpbGRTdGF0ZXMuZXZlcnkoKHN0YXRlKSA9PiBzdGF0ZSA9PT0gJ2FsbFNlbGVjdGVkJykpIHtcbiAgICAgICAgICAgIGl0ZW1TdGF0ZSA9ICdhbGxTZWxlY3RlZCc7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzU2VsZWN0ZWQgJiYgY2hpbGRTdGF0ZXMuZXZlcnkoKHN0YXRlKSA9PiBzdGF0ZSA9PT0gJ2FsbE5vdFNlbGVjdGVkJykpIHtcbiAgICAgICAgICAgIGl0ZW1TdGF0ZSA9ICdhbGxOb3RTZWxlY3RlZCc7XG4gICAgICAgIH0gZWxzZSBpZiAocmVjdXJzaXZlICYmIGNoaWxkU3RhdGVzLmV2ZXJ5KChzdGF0ZSkgPT4gc3RhdGUgPT09ICdhbGxTZWxlY3RlZCcpICYmICFpc1NlbGVjdGVkICYmICFub0F1dG9TZWxlY3RQYXJlbnQpIHtcbiAgICAgICAgICAgIGl0ZW1TdGF0ZSA9ICdhbGxTZWxlY3RlZCc7XG4gICAgICAgIH0gZWxzZSBpZiAocmVjdXJzaXZlICYmIGNoaWxkU3RhdGVzLmV2ZXJ5KChzdGF0ZSkgPT4gc3RhdGUgPT09ICdhbGxOb3RTZWxlY3RlZCcpICYmIGlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGl0ZW1TdGF0ZSA9ICdhbGxOb3RTZWxlY3RlZCc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW1TdGF0ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN5bmNTdGF0ZUNoYW5nZXNBdFBhdGgobm9kZVBhdGgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdHJlZUl0ZW0gPSB0aGlzLmdldFRyZWVJdGVtKG5vZGVQYXRoKTtcbiAgICAgICAgY29uc3QgcnVuVGltZUJhY2t1cFRyZWVJdGVtID0gdGhpcy5nZXRSdW5UaW1lQmFja3VwVHJlZUl0ZW0obm9kZVBhdGgpO1xuICAgICAgICBjb25zdCBydW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlSXRlbSA9IHRoaXMuZ2V0UnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKG5vZGVQYXRoKTtcbiAgICAgICAgaWYgKHRyZWVJdGVtPy5ub2RlPy5zZWxlY3RhYmxlICYmIHRyZWVJdGVtLm5vZGU/LnNlbGVjdENvbmZpZz8ucmVjdXJzaXZlKSB7XG4gICAgICAgICAgICBpZiAoIXRyZWVJdGVtLm5vZGU/LnNlbGVjdENvbmZpZz8ubm9BdXRvU2VsZWN0UGFyZW50KSB7XG4gICAgICAgICAgICAgICAgdHJlZUl0ZW0ubm9kZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4udHJlZUl0ZW0ubm9kZSxcbiAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZDogcnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZUl0ZW0uc2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUgPT09ICdhbGxTZWxlY3RlZCcsXG4gICAgICAgICAgICAgICAgICAgIGlzSW5kZXRlcm1pbmF0ZTogcnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZUl0ZW0uc2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUgPT09ICdpbmRldGVybWluYXRlJyxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0cmVlSXRlbS5ub2RlID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi50cmVlSXRlbS5ub2RlLFxuICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkOiB0cmVlSXRlbS5ub2RlLmlzU2VsZWN0ZWQgJiYgcnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZUl0ZW0uc2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUgPT09ICdhbGxTZWxlY3RlZCcsXG4gICAgICAgICAgICAgICAgICAgIGlzSW5kZXRlcm1pbmF0ZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVJdGVtLnNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlID09PSAnaW5kZXRlcm1pbmF0ZScgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICghdHJlZUl0ZW0ubm9kZS5pc1NlbGVjdGVkICYmIHJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVJdGVtLnNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlID09PSAnYWxsU2VsZWN0ZWQnKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2codHJlZUl0ZW0sIHRyZWVJdGVtLm5vZGUudHJlZUNvbnRlbnRCbG9jay5sYWJlbCwgJ2lzU2VsZWN0ZWQ6JyArIHRyZWVJdGVtLm5vZGUuaXNTZWxlY3RlZCwgJ2lzSW5kZXRlcm1pbmF0ZTonICsgdHJlZUl0ZW0ubm9kZS5pc0luZGV0ZXJtaW5hdGUpO1xuICAgICAgICAgICAgaWYgKHRyZWVJdGVtLm5vZGUuaXNTZWxlY3RlZCA9PT0gdHJ1ZSAmJiAhdGhpcy5zZWxlY3Rpb25Nb2RlbC5pc1NlbGVjdGVkKHJ1blRpbWVCYWNrdXBUcmVlSXRlbSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFRyZWVJdGVtKHJ1blRpbWVCYWNrdXBUcmVlSXRlbSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRyZWVJdGVtLm5vZGUuaXNTZWxlY3RlZCA9PT0gZmFsc2UgJiYgdGhpcy5zZWxlY3Rpb25Nb2RlbC5pc1NlbGVjdGVkKHJ1blRpbWVCYWNrdXBUcmVlSXRlbSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlc2VsZWN0VHJlZUl0ZW0ocnVuVGltZUJhY2t1cFRyZWVJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VHJlZURhdGEocGF0aDogc3RyaW5nLCBpdGVtOiBUcmVlSXRlbU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4QXJyOiBBcnJheTxudW1iZXI+ID0gdGhpcy5yZXNvbHZlUGF0aChwYXRoKTtcbiAgICAgICAgbGV0IGl0ZW1BcnIgPSB0aGlzLnByb2Nlc3NlZE5vZGVzO1xuICAgICAgICBpbmRleEFycj8uZm9yRWFjaCgocGF0aEluZGV4OiBudW1iZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCBpbmRleEFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgaXRlbUFyciA9IGl0ZW1BcnJbcGF0aEluZGV4XT8uY2hpbGRyZW47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZW1BcnJbcGF0aEluZGV4XSA9IGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VHJlZURhdGFSdW5UaW1lQmFja3VwKHBhdGg6IHN0cmluZywgaXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXhBcnI6IEFycmF5PG51bWJlcj4gPSB0aGlzLnJlc29sdmVQYXRoKHBhdGgpO1xuICAgICAgICBsZXQgaXRlbUFyciA9IHRoaXMudHJlZURhdGFSdW5UaW1lQmFja3VwO1xuICAgICAgICBpbmRleEFyci5mb3JFYWNoKChwYXRoSW5kZXg6IG51bWJlciwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChpbmRleCA8IGluZGV4QXJyLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICBpdGVtQXJyID0gaXRlbUFycltwYXRoSW5kZXhdPy5jaGlsZHJlbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXRlbUFycltwYXRoSW5kZXhdID0gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRUcmVlRGF0YVJ1blRpbWUocGF0aDogc3RyaW5nLCBpdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBvbGRJdGVtID0gdGhpcy5nZXRSdW5UaW1lVHJlZUl0ZW0ocGF0aCk7XG4gICAgICAgIGlmKG9sZEl0ZW0pe1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoaXRlbSk/LmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBvbGRJdGVtW2tleV0gPSBpdGVtW2tleV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0UnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlVHJlZShwYXRoOiBzdHJpbmcsIGl0ZW06IFRyZWVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXhBcnI6IEFycmF5PG51bWJlcj4gPSB0aGlzLnJlc29sdmVQYXRoKHBhdGgpO1xuICAgICAgICBsZXQgaXRlbUFyciA9IHRoaXMucnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlO1xuICAgICAgICBpbmRleEFyci5mb3JFYWNoKChwYXRoSW5kZXg6IG51bWJlciwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChpbmRleCA8IGluZGV4QXJyLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICBpdGVtQXJyID0gaXRlbUFycltwYXRoSW5kZXhdPy5jaGlsZHJlbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXRlbUFycltwYXRoSW5kZXhdID0gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVSdW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUocGF0aDogc3RyaW5nLCBzZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZTogU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXhBcnI6IEFycmF5PG51bWJlcj4gPSB0aGlzLnJlc29sdmVQYXRoKHBhdGgpO1xuICAgICAgICBsZXQgaXRlbUFyciA9IHRoaXMucnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlO1xuICAgICAgICBpbmRleEFyci5mb3JFYWNoKChwYXRoSW5kZXg6IG51bWJlciwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChpbmRleCA8IGluZGV4QXJyLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICBpdGVtQXJyID0gaXRlbUFycltwYXRoSW5kZXhdPy5jaGlsZHJlbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXRlbUFycltwYXRoSW5kZXhdID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi5pdGVtQXJyW3BhdGhJbmRleF0sXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0SXNDaGVja2VkRm9yQWxsKG5vZGVBcnI6IEFycmF5PFRyZWVJdGVtUnVuVGltZU1vZGVsPiwgaXNDaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIG5vZGVBcnIuZm9yRWFjaCgocnVuVGltZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBydW50aW1lQmFja3VwVHJlZUl0ZW0gPSB0aGlzLmdldFJ1blRpbWVCYWNrdXBUcmVlSXRlbShydW5UaW1lSXRlbS5wYXRoKTtcbiAgICAgICAgICAgIGNvbnN0IHRyZWVJdGVtID0gdGhpcy5nZXRUcmVlSXRlbShydW5UaW1lSXRlbS5wYXRoKTtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0cmVlSXRlbS5ub2RlO1xuICAgICAgICAgICAgaWYgKG5vZGU/LnNlbGVjdGFibGUpIHtcbiAgICAgICAgICAgICAgICBub2RlLmlzU2VsZWN0ZWQgPSBpc0NoZWNrZWQ7XG4gICAgICAgICAgICAgICAgbm9kZS5pc0luZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoaXNDaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0VHJlZUl0ZW0ocnVudGltZUJhY2t1cFRyZWVJdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlc2VsZWN0VHJlZUl0ZW0ocnVudGltZUJhY2t1cFRyZWVJdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocnVuVGltZUl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJc0NoZWNrZWRGb3JBbGwobm9kZUFycltpbmRleF0uY2hpbGRyZW4sIGlzQ2hlY2tlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcnVuU3RhdGVDaGFuZ2VzRm9yQWxsKG5vZGVBcnI6IEFycmF5PFRyZWVJdGVtUnVuVGltZU1vZGVsPik6IHZvaWQge1xuICAgICAgICBub2RlQXJyPy5mb3JFYWNoKChydW5UaW1lSXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGlmIChydW5UaW1lSXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ydW5TdGF0ZUNoYW5nZXNGb3JBbGwobm9kZUFycltpbmRleF0uY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuc3luY1NlbGVjdGlvbkF0UGF0aChydW5UaW1lSXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3luY1NlbGVjdGlvbkF0UGF0aChydW5UaW1lVHJlZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIC8vIEl0IGlzIGhlcmUgZm9yIHRoZSBmaWx0ZXIgZWRnZSBjYXNlLlxuICAgICAgICB0aGlzLnN5bmNTdGF0ZUNoYW5nZXNBdFBhdGgocnVuVGltZVRyZWVJdGVtLnBhdGgpO1xuICAgICAgICAvLyBTZXRzIGlzU2VsZWN0ZWQgY2hhbmdlIG9uIHRoZSBjb250cm9sLlxuICAgICAgICBpZiAodGhpcy5nZXRUcmVlSXRlbShydW5UaW1lVHJlZUl0ZW0ucGF0aCkubm9kZS5pc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFRyZWVJdGVtKHRoaXMuZ2V0UnVuVGltZUJhY2t1cFRyZWVJdGVtKHJ1blRpbWVUcmVlSXRlbS5wYXRoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlc2VsZWN0VHJlZUl0ZW0odGhpcy5nZXRSdW5UaW1lQmFja3VwVHJlZUl0ZW0ocnVuVGltZVRyZWVJdGVtLnBhdGgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVzb2x2ZVBhdGgocGF0aDogc3RyaW5nKTogQXJyYXk8bnVtYmVyPiB7XG4gICAgICAgIHJldHVybiBwYXRoPy5zcGxpdCgnLicpLm1hcCgoaW5kZXg6IHN0cmluZykgPT4gcGFyc2VJbnQoaW5kZXgsIDEwKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQYXJlbnRQYXRocyhwYXRoOiBzdHJpbmcpOiBBcnJheTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgcGF0aEFyciA9IHBhdGguc3BsaXQoJy4nKTtcbiAgICAgICAgY29uc3QgaGFzUGFyZW50ID0gcGF0aEFyci5sZW5ndGggPiAxO1xuICAgICAgICAvLyBTZXRzIHRoZSBoYXNQYXJlbnQgSWYgdGhlcmUgaXMgYSBwYXJlbnQsIGFuZCByZW1vdmVzIHRoZSBsYXN0IGVsZW1lbnQgZm9ybSBwYXRoQXJyLlxuICAgICAgICBpZiAoaGFzUGFyZW50KSB7XG4gICAgICAgICAgICBwYXRoQXJyLnBvcCgpO1xuICAgICAgICAgICAgLy8gQ2FsY3VsYXRlcyBwYXJlbnQgcGF0aFxuICAgICAgICAgICAgY29uc3QgcGFyZW50UGF0aCA9IHBhdGhBcnIuam9pbignLicpO1xuICAgICAgICAgICAgLy8gQ3JlYXRpbmcgbm9kZSBpbmRleCBzZXF1ZW5jZSBmLmUgSWYgcGF0aCBpcyAnMS4yJyBpdCB3aWxsIGJlIFsxLDJdXG4gICAgICAgICAgICBjb25zdCBub2RlSW5kZXhTZXEgPSBwYXJlbnRQYXRoLnNwbGl0KCcuJykubWFwKChpbmRleFN0cikgPT4gcGFyc2VJbnQoaW5kZXhTdHIsIDEwKSk7XG4gICAgICAgICAgICAvLyBDYWxjdWxhdGluZyB0aGUgbm9kZSBwYXRocyBhcnJheSB0byBiZSByZS1jYWxjdWxhdGVkIGZyb20gYm90dG9tIHRvIHRvcFxuICAgICAgICAgICAgY29uc3Qgbm9kZVBhdGhzU2VxID0gW107XG4gICAgICAgICAgICBub2RlSW5kZXhTZXEuZm9yRWFjaCgobm9kZUluZGV4LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIG5vZGVQYXRoc1NlcVtpbmRleF0gPSBub2RlSW5kZXhTZXEuc2xpY2UoMCwgaW5kZXggKyAxKS5qb2luKCcuJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBub2RlUGF0aHNTZXEucmV2ZXJzZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVSdW5UaW1lU3RhdGUodHJlZUl0ZW06IFRyZWVJdGVtTW9kZWwsIGluZGV4OiBudW1iZXIsIHBhcmVudFBhdGg/OiBzdHJpbmcpOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCB7XG4gICAgICAgIGNvbnN0IHJ1blRpbWVUcmVlSXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwgPSB7XG4gICAgICAgICAgICBwYXRoOiBwYXJlbnRQYXRoID8gcGFyZW50UGF0aCArICcuJyArIGluZGV4IDogaW5kZXgudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICB9O1xuICAgICAgICBpZiAodHJlZUl0ZW0uY2hpbGRyZW4gJiYgdHJlZUl0ZW0uY2hpbGRyZW4ubGVuZ3RoID49IDApIHtcbiAgICAgICAgICAgIHJ1blRpbWVUcmVlSXRlbS5jaGlsZHJlbiA9IFtdO1xuICAgICAgICAgICAgdHJlZUl0ZW0uY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQsIHRyZWVJdGVtSW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBydW5UaW1lVHJlZUl0ZW0uY2hpbGRyZW5bdHJlZUl0ZW1JbmRleF0gPSB0aGlzLmNhbGN1bGF0ZVJ1blRpbWVTdGF0ZShjaGlsZCwgdHJlZUl0ZW1JbmRleCwgcnVuVGltZVRyZWVJdGVtLnBhdGgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJ1blRpbWVUcmVlSXRlbTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbHRlclRyZWVEYXRhKHJ1blRpbWVUcmVlRGF0YTogVHJlZURhdGFSdW5UaW1lTW9kZWwsIGtleSA9ICdsYWJlbCcsIGZpbHRlclN0cjogc3RyaW5nLCBzaG93Q2hpbGRyZW46IGJvb2xlYW4sIHNob3c/OmJvb2xlYW4pOiBUcmVlRGF0YVJ1blRpbWVNb2RlbCB7XG4gICAgICAgIHJldHVybiBydW5UaW1lVHJlZURhdGEuZmlsdGVyKChydW5UaW1lSXRlbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0RGF0YSA9IHRoaXMuZ2V0VHJlZUl0ZW0ocnVuVGltZUl0ZW0ucGF0aCkubm9kZS50cmVlQ29udGVudEJsb2NrW2tleV07XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGFyZ2V0RGF0YSAmJiB0aGlzLm5vcm1hbGl6ZWRTdHIodGFyZ2V0RGF0YSk/LmluY2x1ZGVzKHRoaXMubm9ybWFsaXplZFN0cihmaWx0ZXJTdHIpKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaWYocnVuVGltZUl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgcnVuVGltZUl0ZW0uY2hpbGRyZW4gPSB0aGlzLmZpbHRlclRyZWVEYXRhKHJ1blRpbWVJdGVtLmNoaWxkcmVuLCBrZXksIGZpbHRlclN0ciwgc2hvd0NoaWxkcmVuLCBzaG93Q2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHJ1blRpbWVJdGVtLHsgbWF0Y2hlZDogdHJ1ZSB9KVxuICAgICAgICAgICAgICAgIC8vIHJ1blRpbWVJdGVtLm1hdGNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChydW5UaW1lSXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBydW5UaW1lSXRlbS5jaGlsZHJlbiA9IHRoaXMuZmlsdGVyVHJlZURhdGEocnVuVGltZUl0ZW0uY2hpbGRyZW4sIGtleSwgZmlsdGVyU3RyLCBzaG93Q2hpbGRyZW4sIHNob3cpO1xuICAgICAgICAgICAgICAgIHJ1blRpbWVJdGVtLmNoaWxkcmVuID0gcnVuVGltZUl0ZW0uY2hpbGRyZW4ubGVuZ3RoID4gMCA/IHJ1blRpbWVJdGVtLmNoaWxkcmVuIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHJldHVybiBydW5UaW1lSXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDAgfHwgc2hvdztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNob3c7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgbm9ybWFsaXplZFN0cihzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBzdHJcbiAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAubm9ybWFsaXplKCdORkQnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEluaXRpYWxTZWxlY3Rpb24obm9kZXM6IFRyZWVEYXRhUnVuVGltZU1vZGVsKTogQXJyYXk8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uOiBBcnJheTxUcmVlSXRlbVJ1blRpbWVNb2RlbD4gPSBbXTtcbiAgICAgICAgdGhpcy5zY2FuU2VsZWN0aW9uKG5vZGVzLCBzZWxlY3Rpb24pO1xuICAgICAgICByZXR1cm4gc2VsZWN0aW9uO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2NhblNlbGVjdGlvbihub2RlczogVHJlZURhdGFSdW5UaW1lTW9kZWwsIHNlbGVjdGlvbjogQXJyYXk8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+KTogdm9pZCB7XG4gICAgICAgIG5vZGVzLmZvckVhY2goKGl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXRUcmVlSXRlbShpdGVtLnBhdGgpLm5vZGU/LnNlbGVjdGFibGUgJiYgdGhpcy5nZXRUcmVlSXRlbShpdGVtLnBhdGgpLm5vZGUuaXNTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY2FuU2VsZWN0aW9uKGl0ZW0uY2hpbGRyZW4sIHNlbGVjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVySW5pdGlhbEV4cGFuZChub2RlczogVHJlZURhdGFSdW5UaW1lTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgbm9kZXMuZm9yRWFjaCgoaXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtPy5jaGlsZHJlbj8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVySW5pdGlhbEV4cGFuZChpdGVtLmNoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5nZXRUcmVlSXRlbShpdGVtLnBhdGgpLm5vZGUuaXNFeHBhbmRlZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmdldFRyZWVJdGVtKGl0ZW0ucGF0aCkubm9kZS5pc0V4cGFuZGVkICYmICF0aGlzLmNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQoaXRlbSkpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZEF0KGl0ZW0ucGF0aCk7XG4gICAgICAgICAgICAgICAgfWVsc2UgaWYoIXRoaXMuZ2V0VHJlZUl0ZW0oaXRlbS5wYXRoKS5ub2RlLmlzRXhwYW5kZWQgJiYgIHRoaXMuY2RrVHJlZUNvbnRyb2wuaXNFeHBhbmRlZChpdGVtKSl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wuY29sbGFwc2UoaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGV4cGFuZE1hdGNoZWQobm9kZXM6IFRyZWVEYXRhUnVuVGltZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIG5vZGVzLmZvckVhY2goKGl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbS5tYXRjaGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50UGF0aCA9IHRoaXMuZ2V0UGFyZW50UGF0aHMoaXRlbS5wYXRoKVswXTtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50UGF0aCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcGFyZW50VHJlZUl0ZW0gPSB0aGlzLmdldFRyZWVJdGVtKHBhcmVudFBhdGgpO1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRUcmVlSXRlbSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnBhcmVudFRyZWVJdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnBhcmVudFRyZWVJdGVtLm5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNFeHBhbmRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8vICBub2RlLmlzRXhwYW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcImhlcmVcIiwgcGFyZW50VHJlZUl0ZW0ubm9kZS50cmVlQ29udGVudEJsb2NrLmxhYmVsLCBwYXJlbnRQYXRoLCBpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBhbmRBdChwYXJlbnRQYXRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZE1hdGNoZWQoaXRlbS5jaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UnVuVGltZVRyZWVJdGVtKHBhdGg6IHN0cmluZyk6IFRyZWVJdGVtUnVuVGltZU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZFJ1blRpbWVUcmVlSXRlbSh0aGlzLnRyZWVEYXRhUnVuVGltZSwgcGF0aCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaW5kUnVuVGltZVRyZWVJdGVtKHRyZWVEYXRhUnVuVGltZTogVHJlZURhdGFSdW5UaW1lTW9kZWwsIHBhdGgpOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCB7XG4gICAgICAgIGZvciAoY29uc3QgcnVuVGltZUl0ZW0gb2YgdHJlZURhdGFSdW5UaW1lKSB7XG4gICAgICAgICAgICBpZiAocnVuVGltZUl0ZW0ucGF0aCA9PT0gcGF0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBydW5UaW1lSXRlbTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocnVuVGltZUl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm91bmQgPSB0aGlzLmZpbmRSdW5UaW1lVHJlZUl0ZW0ocnVuVGltZUl0ZW0uY2hpbGRyZW4sIHBhdGgpO1xuICAgICAgICAgICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UnVuVGltZUJhY2t1cFRyZWVJdGVtKHBhdGg6IHN0cmluZyk6IFRyZWVJdGVtUnVuVGltZU1vZGVsIHtcbiAgICAgICAgY29uc3QgaW5kZXhBcnI6IEFycmF5PG51bWJlcj4gPSB0aGlzLnJlc29sdmVQYXRoKHBhdGgpO1xuICAgICAgICBsZXQgbm9kZUFyciA9IHRoaXMudHJlZURhdGFSdW5UaW1lQmFja3VwO1xuICAgICAgICBsZXQgbm9kZTtcbiAgICAgICAgaWYgKG5vZGVBcnIgJiYgQXJyYXkuaXNBcnJheShub2RlQXJyKSkge1xuICAgICAgICAgICAgaW5kZXhBcnI/LmZvckVhY2goKHBhdGhJbmRleDogbnVtYmVyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IGluZGV4QXJyLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZUFyciA9IG5vZGVBcnIgJiYgbm9kZUFycltwYXRoSW5kZXhdPy5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZUFycltwYXRoSW5kZXhdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q3NzQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ2V1aS10cmVlJyxcbiAgICAgICAgICAgIHRoaXMuaXNNdWx0aXNlbGVjdCA/ICdldWktdHJlZS0tbXVsdGlzZWxlY3QnIDogJycsXG4gICAgICAgICAgICB0aGlzLl9pc011bHRpTGV2ZWwgPyAnZXVpLXRyZWUtLXdpdGgtY2hpbGRyZW4nIDogJycsXG4gICAgICAgICAgICB0aGlzLl9zaG93TGluZXMgPyAnZXVpLXRyZWUtLXNob3ctbGluZXMnIDogJycsXG4gICAgICAgIF1cbiAgICAgICAgLmpvaW4oJyAnKVxuICAgICAgICAudHJpbSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hlY2tJZk11bHRpTGV2ZWwodHJlZTogVHJlZURhdGFNb2RlbCk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgaXNNdWx0aUxldmVsID0gZmFsc2U7XG4gICAgICAgIHRyZWUuZm9yRWFjaCgoaXRlbTogVHJlZUl0ZW1Nb2RlbCkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPj0gMCkge1xuICAgICAgICAgICAgICAgIGlzTXVsdGlMZXZlbCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gaXNNdWx0aUxldmVsO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hlY2tJZkN1cnJlbnRTY3JvbGxhYmxlKHNjcm9sbGVkOiBDZGtTY3JvbGxhYmxlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBzY3JvbGxlZC5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudCA9PT0gdGhpcy5jZGtTY3JvbGxhYmxlUmVmLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50O1xuICAgIH1cbn1cblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgUm91dGVyTW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgICAgICBFdWlJbnB1dENoZWNrYm94TW9kdWxlLFxuICAgICAgICBDZGtUcmVlTW9kdWxlLFxuICAgICAgICBFdWlCdXR0b25Nb2R1bGUsXG4gICAgICAgIEV1aUljb25Nb2R1bGUsXG4gICAgICAgIEV1aUxhYmVsTW9kdWxlLFxuICAgICAgICBFdWlCYWRnZU1vZHVsZSxcbiAgICAgICAgRXVpQ2hpcE1vZHVsZSxcbiAgICAgICAgRXVpRHJvcGRvd25Nb2R1bGUsXG4gICAgICAgIFNjcm9sbGluZ01vZHVsZSxcbiAgICBdLFxuICAgIGRlY2xhcmF0aW9uczogW0V1aVRyZWVDb21wb25lbnRdLFxuICAgIGV4cG9ydHM6IFtFdWlUcmVlQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgRXVpVHJlZU1vZHVsZSB7fVxuIiwiPGRpdiBjbGFzcz1cImV1aS11bC1yZXAgZXVpLXRyZWVfX3dyYXBwZXJcIiBjZGtTY3JvbGxhYmxlICNjZGtTY3JvbGxhYmxlUmVmPlxuICAgIDxjZGstdHJlZVxuICAgICAgICAjdHJlZUNvbXBvbmVudEluc3RhbmNlXG4gICAgICAgIFtkYXRhU291cmNlXT1cImNka0FycmF5RGF0YVNvdXJjZVwiXG4gICAgICAgIFt0cmVlQ29udHJvbF09XCJjZGtUcmVlQ29udHJvbFwiXG4gICAgICAgIFt0cmFja0J5XT1cInRyYWNrQnlcIlxuICAgICAgICAqbmdJZj1cInJlbmRlclRyZWVcIlxuICAgICAgICBjbGFzcz1cImV1aS1jZGstdHJlZVwiPlxuICAgICAgICA8IS0tIFRoZXJlIGFyZSB0d28gc3RhdGVzIG9mIGdlbmVyaWMgY2RrLW5lc3RlZC10cmVlLW5vZGUgZGVjbGFyYXRpb25zLlxuICAgICAgICBGaXJzdCBvbmUgaXMgd2l0aG91dCBjaGlsZC4gTm8gc3ViIHJlbmRlcmluZy5cbiAgICAgICAgLS0+XG4gICAgICAgIDxjZGstbmVzdGVkLXRyZWUtbm9kZSAqY2RrVHJlZU5vZGVEZWY9XCJsZXQgdHJlZVJ1blRpbWVJdGVtTW9kZWxcIiBjbGFzcz1cImV1aS1jZGstbmVzdGVkLXRyZWUtbm9kZVwiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInRyZWVSdW5UaW1lSXRlbU1vZGVsXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS1saS1yZXAgZXVpLXRyZWUtbm9kZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmV1aS10cmVlLW5vZGUtLWZpcnN0XT1cInRyZWVSdW5UaW1lSXRlbU1vZGVsPy5wYXRoID09PSAnMCdcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktdHJlZS1ub2RlLS1sYXN0XT1cInRyZWVSdW5UaW1lSXRlbU1vZGVsLmxhc3RcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3tcbiAgICAgICAgICAgICAgICAgICAgZ2V0VHJlZUl0ZW0odHJlZVJ1blRpbWVJdGVtTW9kZWw/LnBhdGgpPy5ub2RlPy50cmVlQ29udGVudEJsb2NrPy50b29sdGlwTGFiZWwgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFRyZWVJdGVtKHRyZWVSdW5UaW1lSXRlbU1vZGVsPy5wYXRoKT8ubm9kZT8udHJlZUNvbnRlbnRCbG9jaz8ubGFiZWxcbiAgICAgICAgICAgICAgICB9fVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldWktdHJlZS1ub2RlLXdyYXBwZXJcIlxuICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTm9kZUNsaWNrKHRyZWVSdW5UaW1lSXRlbU1vZGVsKVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLXRyZWUtbm9kZS13cmFwcGVyX19jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlcnMgbm9kZSBpbiBkZWZhdWx0IG9yIHByb3ZpZGVkIHRlbXBsYXRlJ3MgY29udGV4dC5cbiAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlcyBvblNlbGVjdCB3aXRoIG9uU2VsZWN0Rm4gZm9yIGRldmVsb3BlcnMgdG8gc2VuZCB0aGUgZXZlbnRzIGZyb20gdGhlaXIgY3VzdG9tIGNoZWNrIGV2ZW50cy5cbiAgICAgICAgICAgICAgICAgICAgICAgIFByb3ZpZGVzIGlkIHRvIGJlIHVzZWQgb24gZ2VuZXJpYyB0ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZVRlbXBsYXRlUmVmIHx8IG5vZGVUZW1wbGF0ZURlZmF1bHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogZ2V0VHJlZUl0ZW0odHJlZVJ1blRpbWVJdGVtTW9kZWw/LnBhdGgpPy5ub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblNlbGVjdDogb25TZWxlY3RGbih0cmVlUnVuVGltZUl0ZW1Nb2RlbC5wYXRoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHVpZCArIHRyZWVSdW5UaW1lSXRlbU1vZGVsLnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IHRyZWVSdW5UaW1lSXRlbU1vZGVsLnBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9jZGstbmVzdGVkLXRyZWUtbm9kZT5cbiAgICAgICAgPCEtLSBUaGlzIGlzIHRoZSB0cmVlIG5vZGUgdGVtcGxhdGUgZm9yIGV4cGFuZGFibGUgbm9kZXMgLS0+XG4gICAgICAgIDxjZGstbmVzdGVkLXRyZWUtbm9kZVxuICAgICAgICAgICAgKmNka1RyZWVOb2RlRGVmPVwibGV0IHRyZWVSdW5UaW1lSXRlbU1vZGVsOyB3aGVuOiBoYXNDaGlsZFwiXG4gICAgICAgICAgICBjbGFzcz1cImV1aS1jZGstbmVzdGVkLXRyZWUtbm9kZSBldWktY2RrLW5lc3RlZC10cmVlLW5vZGUtLXdpdGgtY2hpbGRcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS1saS1yZXAgZXVpLXRyZWUtbm9kZSBldWktdHJlZS1ub2RlLS13aXRoLWNoaWxkXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZXVpLXRyZWUtbm9kZS0tZmlyc3RdPVwidHJlZVJ1blRpbWVJdGVtTW9kZWw/LnBhdGggPT09ICcwJ1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmV1aS10cmVlLW5vZGUtLWxhc3RdPVwidHJlZVJ1blRpbWVJdGVtTW9kZWwubGFzdFwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJ0cmVlUnVuVGltZUl0ZW1Nb2RlbFwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJ7e1xuICAgICAgICAgICAgICAgICAgICBnZXRUcmVlSXRlbSh0cmVlUnVuVGltZUl0ZW1Nb2RlbD8ucGF0aCk/Lm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnRvb2x0aXBMYWJlbCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0VHJlZUl0ZW0odHJlZVJ1blRpbWVJdGVtTW9kZWw/LnBhdGgpPy5ub2RlPy50cmVlQ29udGVudEJsb2NrPy5sYWJlbFxuICAgICAgICAgICAgICAgIH19XCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS10cmVlLW5vZGUtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tSGVyZSB3cmFwcyB0aGUgbm9kZSwgYW5kIGxpc3RlbiBmb3Igbm9kZSBjbGlja3MuLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cIm9uTm9kZUNsaWNrKHRyZWVSdW5UaW1lSXRlbU1vZGVsKVwiIGNsYXNzPVwiZXVpLXRyZWUtbm9kZS13cmFwcGVyX19jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRXhwYW5kL2NvbGxhcHNlIGFjdGlvbiBidXR0b24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXVpQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXVpSWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1aUJhc2ljQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXVpUm91bmRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1aVNpemVTXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInVG9nZ2xlICcgKyBnZXRUcmVlSXRlbSh0cmVlUnVuVGltZUl0ZW1Nb2RlbD8ucGF0aCk/Lm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Ob2RlVG9nZ2xlKHRyZWVSdW5UaW1lSXRlbU1vZGVsKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2RrVHJlZU5vZGVUb2dnbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS10cmVlLW5vZGVfX2J1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1aUljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhY2RrVHJlZUNvbnRyb2wuaXNFeHBhbmRlZCh0cmVlUnVuVGltZUl0ZW1Nb2RlbCkgJiYgY29sbGFwc2VkSWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25DbGFzc109XCJjb2xsYXBzZWRJY29uQ2xhc3NcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXVpSWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQodHJlZVJ1blRpbWVJdGVtTW9kZWwpICYmIGV4cGFuZGVkSWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25DbGFzc109XCJleHBhbmRlZEljb25DbGFzc1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQodHJlZVJ1blRpbWVJdGVtTW9kZWwpICYmICFjb2xsYXBzZWRJY29uQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJleHBhbmRlZFN2Z0ljb25DbGFzc1wiPjwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjZGtUcmVlQ29udHJvbC5pc0V4cGFuZGVkKHRyZWVSdW5UaW1lSXRlbU1vZGVsKSAmJiAhZXhwYW5kZWRJY29uQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJjb2xsYXBzZWRTdmdJY29uQ2xhc3NcIj48L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVxuICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVycyBub2RlIGluIGRlZmF1bHQgb3IgcHJvdmlkZWQgdGVtcGxhdGUncyBjb250ZXh0LlxuICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGVzIG9uU2VsZWN0IHdpdGggb25TZWxlY3RGbiBmb3IgZGV2ZWxvcGVycyB0byBzZW5kIHRoZSBldmVudHMgZnJvbSB0aGVpciBjdXN0b20gY2hlY2sgZXZlbnRzLlxuICAgICAgICAgICAgICAgICAgICAgICAgUHJvdmlkZXMgaWQgdG8gYmUgdXNlZCBvbiBnZW5lcmljIHRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJub2RlVGVtcGxhdGVSZWYgfHwgbm9kZVRlbXBsYXRlRGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBnZXRUcmVlSXRlbSh0cmVlUnVuVGltZUl0ZW1Nb2RlbC5wYXRoKT8ubm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3Q6IG9uU2VsZWN0Rm4odHJlZVJ1blRpbWVJdGVtTW9kZWwucGF0aCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB1aWQgKyB0cmVlUnVuVGltZUl0ZW1Nb2RlbC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiB0cmVlUnVuVGltZUl0ZW1Nb2RlbC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogZ2V0VHJlZUl0ZW0odHJlZVJ1blRpbWVJdGVtTW9kZWw/LnBhdGgpPy5jaGlsZHJlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tdXNlcyBjZGtUcmVlTm9kZU91dGxldCB0byByZW5kZXIgY2hpbGRyZW4gbm9kZXMsIENka1RyZWVDb250cm9sIGlzIHVzZWQgdG8gY29udHJvbCBpc0V4cGFuZGVkIHN0YXRlLi0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldWktdWwtcmVwIGV1aS10cmVlLW5vZGVcIiByb2xlPVwiZ3JvdXBcIiAqbmdJZj1cImNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQodHJlZVJ1blRpbWVJdGVtTW9kZWwpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgY2RrVHJlZU5vZGVPdXRsZXQ+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9jZGstbmVzdGVkLXRyZWUtbm9kZT5cbiAgICA8L2Nkay10cmVlPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjbm9kZVRlbXBsYXRlRGVmYXVsdCBsZXQtbm9kZSBsZXQtb25TZWxlY3Q9XCJvblNlbGVjdFwiIGxldC1pZD1cImlkXCIgbGV0LXBhdGg9XCJwYXRoXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImV1aS10cmVlLW5vZGUtd3JhcHBlcl9fY29udGFpbmVyLWxlZnRcIiBbY2xhc3MuZXVpLXRyZWUtbm9kZS13cmFwcGVyX19jb250YWluZXItbGVmdC0tc2VsZWN0ZWRdPVwibm9kZT8uaXNTZWxlY3RlZFwiPlxuICAgICAgICAgICAgPCEtLWlucHV0IGNoZWNrYm94IGFyZWEtLT5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGV1aUlucHV0Q2hlY2tCb3hcbiAgICAgICAgICAgICAgICAqbmdJZj1cIm5vZGUgJiYgbm9kZS5zZWxlY3RhYmxlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIGlkPVwie3sgaWQgfX1cIlxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIiEhbm9kZT8uaXNTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiISFub2RlPy5pc0luZGV0ZXJtaW5hdGVcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25TZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdS1tci1tXCIgLz5cblxuICAgICAgICAgICAgPCEtLWljb24gYXJlYS0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/Lmljb25DbGFzc1wiPlxuICAgICAgICAgICAgICAgIDxldWktaWNvblxuICAgICAgICAgICAgICAgICAgICBbZXVpVmFyaWFudF09XCJub2RlPy50cmVlQ29udGVudEJsb2NrPy5pY29uVHlwZUNsYXNzIHx8ICdwcmltYXJ5J1wiXG4gICAgICAgICAgICAgICAgICAgIGljb25DbGFzcz1cInt7IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/Lmljb25DbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgICAgIGV1aVNpemVTXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLXUtbXIteHNcIj5cbiAgICAgICAgICAgICAgICA8L2V1aS1pY29uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8uaWNvblN2Z05hbWVcIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJ7eyBub2RlPy50cmVlQ29udGVudEJsb2NrPy5pY29uU3ZnTmFtZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgIGZpbGxDb2xvcj1cInt7IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/Lmljb25UeXBlQ2xhc3MgfHwgJ2dyZXktMTAwJyB9fVwiXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJzXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdS1tci14c1wiPlxuICAgICAgICAgICAgICAgIDwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS1jaGlwcyBhcmVhLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8uY2hpcHNcIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWNoaXBcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNoaXAgb2Ygbm9kZS50cmVlQ29udGVudEJsb2NrLmNoaXBzXCJcbiAgICAgICAgICAgICAgICAgICAgZXVpU2l6ZVhTXG4gICAgICAgICAgICAgICAgICAgIFtldWlWYXJpYW50XT1cImNoaXAudHlwZUNsYXNzIHx8ICdzZWNvbmRhcnknXCJcbiAgICAgICAgICAgICAgICAgICAgW2V1aU91dGxpbmVdPVwiY2hpcC5pc091dGxpbmVcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS1jaGlwLS1yb3VuZGVkIGV1aS11LW1iLW5vbmUgZXVpLXUtbXIteHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gZXVpTGFiZWw+e3sgY2hpcC5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2V1aS1jaGlwPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS1iYWRnZSAodHlwZUxhYmVsICYgdHlwZUNsYXNzKSBhcmVhLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udHlwZUxhYmVsXCIgW25nU3dpdGNoXT1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnR5cGVDbGFzc1wiPlxuICAgICAgICAgICAgICAgIDxldWktYmFkZ2UgZXVpU2l6ZU0gW2V1aVZhcmlhbnRdPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udHlwZUNsYXNzIHx8ICdwcmltYXJ5J1wiIGNsYXNzPVwiZXVpLXUtZmxleC1uby1zaHJpbmsgZXVpLXUtbXIteHNcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udHlwZUxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9ldWktYmFkZ2U+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLWxhYmVsIGFyZWEtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImV1aS10cmVlLW5vZGUtd3JhcHBlcl9fY29udGFpbmVyLW1pZGRsZVwiPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udXJsICYmICFub2RlPy50cmVlQ29udGVudEJsb2NrPy51cmxFeHRlcm5hbFwiXG4gICAgICAgICAgICAgICAgZXVpTGFiZWxcbiAgICAgICAgICAgICAgICBmb3I9XCJ7eyBpZCB9fVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdS10ZXh0LXRydW5jYXRlIGV1aS11LXAtMnhzXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZXVpLWxhYmVsLS1zZWxlY3RlZF09XCJcbiAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0UGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBnZXRSdW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUocGF0aCk/LnNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlID09PSAnaW5kZXRlcm1pbmF0ZScgfHwgbm9kZT8uaXNTZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBub2RlPy5pc1NlbGVjdGVkXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZXVpLXUtY3Vyc29yLXBvaW50ZXJdPVwibm9kZT8uc2VsZWN0YWJsZVwiPlxuICAgICAgICAgICAgICAgIHt7IGF1dG9UcmFuc2xhdGUgPyAobm9kZT8udHJlZUNvbnRlbnRCbG9jaz8ubGFiZWwgfCB0cmFuc2xhdGUpIDogbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8ubGFiZWwgfX1cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8bGFiZWwgKm5nSWY9XCJub2RlPy50cmVlQ29udGVudEJsb2NrPy51cmxcIiBldWlMYWJlbCBmb3I9XCJ7eyBpZCB9fVwiIGNsYXNzPVwiZXVpLXUtdGV4dC10cnVuY2F0ZSBldWktdS1wLTJ4c1wiPlxuICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLXUtdGV4dC1saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmV1aS11LXRleHQtbGluay1zdGFuZGFsb25lXT1cIiFzaG93VW5kZXJsaW5lZExpbmtzXCJcbiAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udXJsXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGF1dG9UcmFuc2xhdGUgPyAobm9kZT8udHJlZUNvbnRlbnRCbG9jaz8ubGFiZWwgfCB0cmFuc2xhdGUpIDogbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udXJsRXh0ZXJuYWxcIiBldWlMYWJlbCBmb3I9XCJ7eyBpZCB9fVwiIGNsYXNzPVwiZXVpLXUtdGV4dC10cnVuY2F0ZSBldWktdS1wLTJ4c1wiPlxuICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLXUtdGV4dC1saW5rLWV4dGVybmFsXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmV1aS11LXRleHQtbGluay1leHRlcm5hbC1zdGFuZGFsb25lXT1cIiFzaG93VW5kZXJsaW5lZExpbmtzXCJcbiAgICAgICAgICAgICAgICAgICAgaHJlZj1cInt7IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnVybEV4dGVybmFsIH19XCJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwie3sgbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udXJsRXh0ZXJuYWxUYXJnZXQgfHwgJ2JsYW5rJyB9fVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBhdXRvVHJhbnNsYXRlID8gKG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsIHwgdHJhbnNsYXRlKSA6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnJpZ2h0Q29udGVudFwiIGNsYXNzPVwiZXVpLXRyZWUtbm9kZS13cmFwcGVyX19jb250YWluZXItcmlnaHRcIj5cbiAgICAgICAgICAgIDwhLS1iYWRnZXMgYXJlYS0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYmFkZ2Ugb2Ygbm9kZS50cmVlQ29udGVudEJsb2NrLnJpZ2h0Q29udGVudD8uYmFkZ2VzXCI+XG4gICAgICAgICAgICAgICAgPGV1aS1iYWRnZSBldWlTaXplTSBldWlPdXRsaW5lIFtldWlWYXJpYW50XT1cImJhZGdlLnR5cGVDbGFzcyB8fCAnc2Vjb25kYXJ5J1wiIGNsYXNzPVwiZXVpLXUtbWwteHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gZXVpTGFiZWw+e3sgYmFkZ2UubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9ldWktYmFkZ2U+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPCEtLWNoaXBzIGFyZWEtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNoaXAgb2Ygbm9kZS50cmVlQ29udGVudEJsb2NrLnJpZ2h0Q29udGVudD8uY2hpcHNcIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWNoaXBcbiAgICAgICAgICAgICAgICAgICAgZXVpU2l6ZVhTXG4gICAgICAgICAgICAgICAgICAgIFtldWlWYXJpYW50XT1cImNoaXAudHlwZUNsYXNzIHx8ICdzZWNvbmRhcnknXCJcbiAgICAgICAgICAgICAgICAgICAgW2V1aU91dGxpbmVdPVwiY2hpcC5pc091dGxpbmVcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS1jaGlwLS1yb3VuZGVkIGV1aS11LW1iLW5vbmUgZXVpLXUtbWwteHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gZXVpTGFiZWw+e3sgY2hpcC5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2V1aS1jaGlwPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS1Db250ZXh0IG1lbnUtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlLnRyZWVDb250ZW50QmxvY2sucmlnaHRDb250ZW50Py5jb250ZXh0TWVudU1ldGFEYXRhICYmIHJpZ2h0Q29udGV4dE1lbnVUZW1wbGF0ZVJlZlwiPlxuICAgICAgICAgICAgICAgIDxldWktZHJvcGRvd24gY2xhc3M9XCJldWktdS1tbC14c1wiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGV1aUJ1dHRvbiBldWlTaXplUyBldWlSb3VuZGVkIGV1aUljb25CdXR0b24gZXVpQmFzaWNCdXR0b24gZXVpU2Vjb25kYXJ5IFthdHRyLmFyaWEtbGFiZWxdPVwiJ09wdGlvbnMgbWVudSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmcgaWNvbj1cImV1aS1lbGxpcHNpcy12ZXJ0aWNhbFwiPjwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGV1aS1kcm9wZG93bi1jb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwicmlnaHRDb250ZXh0TWVudVRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnJpZ2h0Q29udGVudD8uY29udGV4dE1lbnVNZXRhRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnJpZ2h0Q29udGVudD8uY29udGV4dE1lbnVNZXRhRGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZXVpLWRyb3Bkb3duLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPC9ldWktZHJvcGRvd24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLW1ldGFkYXRhLCB1c2VzIHRoZSBoZWxwIG9mIG5nIHRlbXBsYXRlIHRvIGdlbmVyYXRlIGR5bmFtaWMgZXhwYW5kIHZhcmlhYmxlIHdpdGhvdXQgaGFuZGxpbmcgc3RhdGUgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwibm9kZS50cmVlQ29udGVudEJsb2NrPy5tZXRhZGF0YSAmJiBub2RlQ29udGVudE1ldGFkYXRhVGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZUNvbnRlbnRNZXRhZGF0YUNvbnRhaW5lclwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICRpbXBsaWNpdDogeyBleHBhbmRlZDogZmFsc2UgfVxuICAgICAgICAgICAgfVwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNub2RlQ29udGVudE1ldGFkYXRhQ29udGFpbmVyIGxldC1tZXRhRGF0YUNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBldWlCdXR0b25cbiAgICAgICAgICAgICAgICBldWlCYXNpY0J1dHRvblxuICAgICAgICAgICAgICAgIGV1aUljb25CdXR0b25cbiAgICAgICAgICAgICAgICBldWlSb3VuZGVkXG4gICAgICAgICAgICAgICAgZXVpU2l6ZVNcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiZXhwYW5kIGNvbGxhcHNlIHRyZWUgaXRlbVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1ldGFEYXRhQ29udGFpbmVyLmV4cGFuZGVkID0gIW1ldGFEYXRhQ29udGFpbmVyLmV4cGFuZGVkXCI+XG4gICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2ZyBbaWNvbl09XCJtZXRhRGF0YUNvbnRhaW5lci5leHBhbmRlZCA/ICdldWktY2hldnJvbi1kb3duJyA6ICdldWktY2hldnJvbi1mb3J3YXJkJ1wiPjwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibWV0YURhdGFDb250YWluZXIuZXhwYW5kZWRcIiBjbGFzcz1cImV1aS10cmVlLW5vZGVfX21ldGFjb250ZW50XCI+XG4gICAgICAgICAgICAgICAgPCEtLXBhc3NpbmcgbWV0YWRhdGEgb2YgdGhlIG5vZGUgY29udGVudCB0byBwcm92aWRlZCB0ZW1wbGF0ZS1yZWY6bm9kZUNvbnRlbnRNZXRhZGF0YVRlbXBsYXRlUmVmLS0+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5vZGVDb250ZW50TWV0YWRhdGFUZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/Lm1ldGFkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/Lm1ldGFkYXRhXG4gICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuIl19
1019
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLXRyZWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZXVpLXRyZWUvZXVpLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZXVpLXRyZWUvZXVpLXRyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBQ0wsUUFBUSxFQUNSLHVCQUF1QixFQUN2QixZQUFZLEVBQ1osTUFBTSxFQUNOLGlCQUFpQixFQU1qQixXQUFXLEVBRVgsU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQVFILGlCQUFpQixFQUVqQix3QkFBd0IsR0FDM0IsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFXLE1BQU0sbUJBQW1CLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFB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WixZQUFZO1lBQ1osV0FBVztZQUNYLGVBQWU7WUFDZixzQkFBc0I7WUFDdEIsYUFBYTtZQUNiLGVBQWU7WUFDZixhQUFhO1lBQ2IsY0FBYztZQUNkLGNBQWM7WUFDZCxhQUFhO1lBQ2IsaUJBQWlCO1lBQ2pCLGVBQWUsYUFwZ0NWLGdCQUFnQjtrSUF5Z0NoQixhQUFhLFlBakJsQixZQUFZO1lBQ1osWUFBWTtZQUNaLFdBQVc7WUFDWCxlQUFlO1lBQ2Ysc0JBQXNCO1lBQ3RCLGFBQWE7WUFDYixlQUFlO1lBQ2YsYUFBYTtZQUNiLGNBQWM7WUFDZCxjQUFjO1lBQ2QsYUFBYTtZQUNiLGlCQUFpQjtZQUNqQixlQUFlOzsyRkFLVixhQUFhO2tCQW5CekIsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUU7d0JBQ0wsWUFBWTt3QkFDWixZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsZUFBZTt3QkFDZixzQkFBc0I7d0JBQ3RCLGFBQWE7d0JBQ2IsZUFBZTt3QkFDZixhQUFhO3dCQUNiLGNBQWM7d0JBQ2QsY0FBYzt3QkFDZCxhQUFhO3dCQUNiLGlCQUFpQjt3QkFDakIsZUFBZTtxQkFDbEI7b0JBQ0QsWUFBWSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7b0JBQ2hDLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDO2lCQUM5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIElucHV0LFxuICAgIE5nTW9kdWxlLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBPdXRwdXQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIE9uRGVzdHJveSxcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICAgIFNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlLFxuICAgIFRyZWVEYXRhTW9kZWwsXG4gICAgVHJlZUl0ZW1Nb2RlbCxcbiAgICBUcmVlRGF0YVJ1blRpbWVNb2RlbCxcbiAgICBUcmVlSXRlbVJ1blRpbWVNb2RlbCxcbiAgICBUcmVlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZU1vZGVsLFxuICAgIEV1aVRyZWVTZWxlY3Rpb25DaGFuZ2VzLFxuICAgIEV1aVRyZWVQYWdpbmF0aW9uLFxuICAgIEN1c3RvbU5vZGVTZWxlY3RGbixcbiAgICBDdXN0b21Ob2RlU2VsZWN0Rm5IZWxwZXIsXG59IGZyb20gJy4vZXVpLXRyZWUubW9kZWwnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBFdWlJbnB1dENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2V1aS1pbnB1dC1jaGVja2JveCc7XG5pbXBvcnQgeyBFdWlCdXR0b25Nb2R1bGUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvZXVpLWJ1dHRvbic7XG5pbXBvcnQgeyBFdWlJY29uTW9kdWxlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2V1aS1pY29uJztcbmltcG9ydCB7IEV1aUxhYmVsTW9kdWxlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2V1aS1sYWJlbCc7XG5pbXBvcnQgeyBFdWlCYWRnZU1vZHVsZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9ldWktYmFkZ2UnO1xuaW1wb3J0IHsgRXVpQ2hpcE1vZHVsZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9ldWktY2hpcCc7XG5pbXBvcnQgeyBFdWlEcm9wZG93bk1vZHVsZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9ldWktZHJvcGRvd24nO1xuaW1wb3J0IHsgTmVzdGVkVHJlZUNvbnRyb2wsIENka1RyZWVNb2R1bGUsIENka1RyZWUgfSBmcm9tICdAYW5ndWxhci9jZGsvdHJlZSc7XG5pbXBvcnQgeyBBcnJheURhdGFTb3VyY2UsIFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCwgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgU2Nyb2xsaW5nTW9kdWxlLCBTY3JvbGxEaXNwYXRjaGVyLCBDZGtTY3JvbGxhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdldWktdHJlZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2V1aS10cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zdHlsZXMvX2luZGV4LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBFdWlUcmVlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gICAgcHVibGljIGdldCBjc3NDbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENzc0NsYXNzZXMoKTtcbiAgICB9XG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtZTJlJykgQElucHV0KCkgZTJlQXR0ciA9ICdldWktdHJlZSc7XG4gICAgQElucHV0KCkgbm9kZXM6IFRyZWVEYXRhTW9kZWw7XG4gICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgQElucHV0KCkgbm9kZVRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIC8vIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgdHlwZSBvciB0dXJuIGludG8gYSBnZW5lcmljLCBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL2dlbmVyaWNzLmh0bWxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIEBJbnB1dCgpIG5vZGVDb250ZW50TWV0YWRhdGFUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcbiAgICAvLyBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IHR5cGUgb3IgdHVybiBpbnRvIGEgZ2VuZXJpYywgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9nZW5lcmljcy5odG1sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBASW5wdXQoKSByaWdodENvbnRleHRNZW51VGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQElucHV0KCkgY3VzdG9tTm9kZVNlbGVjdEZuOiBDdXN0b21Ob2RlU2VsZWN0Rm47XG4gICAgQElucHV0KCkgZXhwYW5kZWRJY29uQ2xhc3M6IHN0cmluZztcbiAgICBASW5wdXQoKSBjb2xsYXBzZWRJY29uQ2xhc3M6IHN0cmluZztcbiAgICBASW5wdXQoKSBleHBhbmRlZFN2Z0ljb25DbGFzcyA9ICdldWktY2hldnJvbi1mb3J3YXJkOmV1aSc7XG4gICAgQElucHV0KCkgY29sbGFwc2VkU3ZnSWNvbkNsYXNzID0gJ2V1aS1jaGV2cm9uLWRvd246ZXVpJztcblxuICAgIEBWaWV3Q2hpbGQoJ2Nka1Njcm9sbGFibGVSZWYnLCB7IHJlYWQ6IENka1Njcm9sbGFibGUgfSkgY2RrU2Nyb2xsYWJsZVJlZjogQ2RrU2Nyb2xsYWJsZTtcbiAgICBAVmlld0NoaWxkKCd0cmVlQ29tcG9uZW50SW5zdGFuY2UnKSBwdWJsaWMgdHJlZUNvbXBvbmVudEluc3RhbmNlOiBDZGtUcmVlPFRyZWVJdGVtUnVuVGltZU1vZGVsPjtcblxuICAgIC8vIEBWaWV3Q2hpbGQoJ3RyZWVDb21wb25lbnRJbnN0YW5jZScpIHB1YmxpYyB0cmVlQ29tcG9uZW50SW5zdGFuY2U6IGFueTtcblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzQ2xpY2tUb2dnbGluZ05vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0NsaWNrVG9nZ2xpbmdOb2RlO1xuICAgIH1cblxuICAgIHNldCBpc0NsaWNrVG9nZ2xpbmdOb2RlKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faXNDbGlja1RvZ2dsaW5nTm9kZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBnZXQgaXNNdWx0aXNlbGVjdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzTXVsdGlzZWxlY3Q7XG4gICAgfVxuXG4gICAgc2V0IGlzTXVsdGlzZWxlY3QodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc011bHRpc2VsZWN0ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBpc1NpbmdsZVNlbGVjdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzU2luZ2xlU2VsZWN0O1xuICAgIH1cblxuICAgIHNldCBpc1NpbmdsZVNlbGVjdCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2lzU2luZ2xlU2VsZWN0ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBpc1JlY3Vyc2l2ZVNlbGVjdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzUmVjdXJzaXZlU2VsZWN0aW9uO1xuICAgIH1cblxuICAgIHNldCBpc1JlY3Vyc2l2ZVNlbGVjdGlvbih2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2lzUmVjdXJzaXZlU2VsZWN0aW9uID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBpc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uO1xuICAgIH1cblxuICAgIHNldCBpc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbih2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2lzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBzaG93VW5kZXJsaW5lZExpbmtzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2hvd1VuZGVybGluZWRMaW5rcztcbiAgICB9XG5cbiAgICBzZXQgc2hvd1VuZGVybGluZWRMaW5rcyh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX3Nob3dVbmRlcmxpbmVkTGlua3MgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHNob3dMaW5lcygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3dMaW5lcztcbiAgICB9XG5cbiAgICBzZXQgc2hvd0xpbmVzKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5fc2hvd0xpbmVzID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBhdXRvVHJhbnNsYXRlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXV0b1RyYW5zbGF0ZTtcbiAgICB9XG5cbiAgICBzZXQgYXV0b1RyYW5zbGF0ZSh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2F1dG9UcmFuc2xhdGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGhpZ2hsaWdodFBhdGgoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oaWdobGlnaHRQYXRoO1xuICAgIH1cblxuICAgIHNldCBoaWdobGlnaHRQYXRoKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faGlnaGxpZ2h0UGF0aCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RXVpVHJlZVNlbGVjdGlvbkNoYW5nZXM+KCk7XG4gICAgQE91dHB1dCgpIG5vZGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8VHJlZUl0ZW1Nb2RlbD4oKTtcbiAgICBAT3V0cHV0KCkgbm9kZVRvZ2dsZSA9IG5ldyBFdmVudEVtaXR0ZXI8VHJlZUl0ZW1Nb2RlbD4oKTtcbiAgICBjZGtBcnJheURhdGFTb3VyY2U6IEFycmF5RGF0YVNvdXJjZTxUcmVlSXRlbVJ1blRpbWVNb2RlbD47XG4gICAgY2RrVHJlZUNvbnRyb2w6IE5lc3RlZFRyZWVDb250cm9sPFRyZWVJdGVtUnVuVGltZU1vZGVsPjtcbiAgICByZW5kZXJUcmVlOiBib29sZWFuO1xuICAgIHB1YmxpYyB1aWQ6IHN0cmluZyA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDAwMDApLnRvU3RyaW5nKCk7XG4gICAgcHJvdGVjdGVkIF9pc011bHRpTGV2ZWw7XG4gICAgcHJpdmF0ZSBwcm9jZXNzZWROb2RlczogVHJlZURhdGFNb2RlbDtcbiAgICBwcml2YXRlIHRyZWVEYXRhUnVuVGltZTogVHJlZURhdGFSdW5UaW1lTW9kZWw7XG4gICAgcHJpdmF0ZSB0cmVlRGF0YVJ1blRpbWVCYWNrdXA6IFRyZWVEYXRhUnVuVGltZU1vZGVsO1xuICAgIHByaXZhdGUgcnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlOiBBcnJheTxUcmVlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZU1vZGVsPjtcbiAgICBwcml2YXRlIHNlbGVjdGlvbk1vZGVsOiBTZWxlY3Rpb25Nb2RlbDxUcmVlSXRlbVJ1blRpbWVNb2RlbD47XG4gICAgcHJpdmF0ZSB0ZW1wU2VsZWN0aW9uTW9kZWw6IFNlbGVjdGlvbk1vZGVsPFRyZWVJdGVtUnVuVGltZU1vZGVsPjtcbiAgICBwcml2YXRlIF9pc0NsaWNrVG9nZ2xpbmdOb2RlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfaXNNdWx0aXNlbGVjdCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2lzU2luZ2xlU2VsZWN0ID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfaXNSZWN1cnNpdmVTZWxlY3Rpb24gPSBmYWxzZTtcbiAgICBwcml2YXRlIF9pc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbiA9IHRydWU7XG4gICAgcHJpdmF0ZSBfc2hvd1VuZGVybGluZWRMaW5rcyA9IGZhbHNlO1xuICAgIHByaXZhdGUgX3Nob3dMaW5lcyA9IHRydWU7XG4gICAgcHJpdmF0ZSBfYXV0b1RyYW5zbGF0ZSA9IHRydWU7XG4gICAgcHJpdmF0ZSBfaGlnaGxpZ2h0UGF0aCA9IGZhbHNlO1xuICAgIHByaXZhdGUgc2VsZWN0aW9uTW9kZWxTdWJzO1xuICAgIHByaXZhdGUgc2Nyb2xsRGlzcGF0Y2hlclN1YnM7XG4gICAgcHJpdmF0ZSBfc2VsZWN0aW9uO1xuICAgIHByaXZhdGUgdHJlZVBhZ2luYXRpb246IEV1aVRyZWVQYWdpbmF0aW9uPFRyZWVJdGVtUnVuVGltZU1vZGVsPjtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIHNjcm9sbERpc3BhdGNoZXI6IFNjcm9sbERpc3BhdGNoZXIpIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbml0VHJlZSgpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ25vZGVzJ10/LmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlc1snbm9kZXMnXT8ucHJldmlvdXNWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmluaXRUcmVlKCk7XG4gICAgICAgICAgICBpZih0aGlzLnRyZWVDb21wb25lbnRJbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudHJlZUNvbXBvbmVudEluc3RhbmNlPy5yZW5kZXJOb2RlQ2hhbmdlcyhbXSk7XG4gICAgICAgICAgICAgICAgdGhpcy50cmVlQ29tcG9uZW50SW5zdGFuY2U/LnJlbmRlck5vZGVDaGFuZ2VzKHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlbFN1YnMpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWxTdWJzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsRGlzcGF0Y2hlclN1YnMpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsRGlzcGF0Y2hlclN1YnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFNlbGVjdGlvbigpOiBUcmVlRGF0YU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbjtcbiAgICB9XG5cbiAgICBnZXRQcm9jZXNzZWROb2RlcygpOiBUcmVlRGF0YU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc2VkTm9kZXM7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgdHJhY2tCeShpbmRleDogbnVtYmVyLCBpdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCk6IGFueSB7XG4gICAgICAgIHJldHVybiBpdGVtLnBhdGg7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgdHJhY2tCeUNvbnRyb2woaXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiBhbnkge1xuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICBnZXRUcmVlSXRlbShwYXRoOiBzdHJpbmcpOiBUcmVlSXRlbU1vZGVsIHtcbiAgICAgICAgY29uc3QgaW5kZXhBcnI6IEFycmF5PG51bWJlcj4gPSB0aGlzLnJlc29sdmVQYXRoKHBhdGgpO1xuICAgICAgICBsZXQgbm9kZUFyciA9IHRoaXMucHJvY2Vzc2VkTm9kZXM7XG4gICAgICAgIGxldCBub2RlO1xuICAgICAgICBpZiAobm9kZUFyciAmJiBBcnJheS5pc0FycmF5KG5vZGVBcnIpKSB7XG4gICAgICAgICAgICBpbmRleEFycj8uZm9yRWFjaCgocGF0aEluZGV4OiBudW1iZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgaW5kZXhBcnIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBub2RlQXJyID0gbm9kZUFyciAmJiBub2RlQXJyW3BhdGhJbmRleF0/LmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlQXJyW3BhdGhJbmRleF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgZXhwYW5kQWxsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmV4cGFuZEFsbCgpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIGV4cGFuZEF0KHBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmdldFBhcmVudFBhdGhzKHBhdGgpLnJldmVyc2UoKS5mb3JFYWNoKChwYXJlbnRQYXRoKT0+e1xuICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5leHBhbmQodGhpcy5nZXRSdW5UaW1lVHJlZUl0ZW0ocGFyZW50UGF0aCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5leHBhbmQodGhpcy5nZXRSdW5UaW1lVHJlZUl0ZW0ocGF0aCkpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBjb2xsYXBzZUFsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5jb2xsYXBzZUFsbCgpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIGZpbHRlclRlcm0oZmlsdGVySW5wdXQ6IHN0cmluZywgZmlsdGVyS2V5Pzogc3RyaW5nLCBzaG93Q2hpbGRyZW5PZk1hdGNoZWRJdGVtcz86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKGZpbHRlcklucHV0ICE9PSAnJyAmJiBmaWx0ZXJJbnB1dCAhPT0gbnVsbCAmJiB0eXBlb2YgZmlsdGVySW5wdXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHRoaXMuZmlsdGVyVHJlZURhdGEoc3RydWN0dXJlZENsb25lKHRoaXMudHJlZURhdGFSdW5UaW1lQmFja3VwKSwgZmlsdGVyS2V5IHx8ICdsYWJlbCcsIGZpbHRlcklucHV0LCBzaG93Q2hpbGRyZW5PZk1hdGNoZWRJdGVtcyk7XG4gICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHRoaXMuYXBwbHlSdW5UaW1lTGFzdEl0ZW1zKHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgIHRoaXMuY2RrQXJyYXlEYXRhU291cmNlID0gbmV3IEFycmF5RGF0YVNvdXJjZSh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sID0gbmV3IE5lc3RlZFRyZWVDb250cm9sPFRyZWVJdGVtUnVuVGltZU1vZGVsPigobm9kZSkgPT4gbm9kZT8uY2hpbGRyZW4sIHsgdHJhY2tCeTogdGhpcy50cmFja0J5Q29udHJvbCB9KTtcbiAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wuZGF0YU5vZGVzID0gdGhpcy50cmVlRGF0YVJ1blRpbWU7XG4gICAgICAgICAgICB0aGlzLnJlbmRlclRyZWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5leHBhbmRNYXRjaGVkKHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgIC8vIHRoaXMuZXhwYW5kQWxsKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLnRyZWVEYXRhUnVuVGltZUJhY2t1cCk7XG4gICAgICAgICAgICB0aGlzLmNka0FycmF5RGF0YVNvdXJjZSA9IG5ldyBBcnJheURhdGFTb3VyY2UodGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbCA9IG5ldyBOZXN0ZWRUcmVlQ29udHJvbDxUcmVlSXRlbVJ1blRpbWVNb2RlbD4oKG5vZGUpID0+IG5vZGU/LmNoaWxkcmVuLCB7IHRyYWNrQnk6IHRoaXMudHJhY2tCeUNvbnRyb2wgfSk7XG4gICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmRhdGFOb2RlcyA9IHRoaXMudHJlZURhdGFSdW5UaW1lO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kQWxsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRBbGxTZWxlY3Rpb24oaXNDaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGVtcFNlbGVjdGlvbk1vZGVsID0gbmV3IFNlbGVjdGlvbk1vZGVsPFRyZWVJdGVtUnVuVGltZU1vZGVsPihcbiAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkLFxuICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgIChhLCBiKSA9PiBhPy5wYXRoID09PSBiPy5wYXRoLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnNldElzQ2hlY2tlZEZvckFsbCh0aGlzLnRyZWVEYXRhUnVuVGltZSwgaXNDaGVja2VkKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZXRTZWxlY3Rpb24oLi4udGhpcy50ZW1wU2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHVwZGF0ZVRyZWVJdGVtKGdpdmVuVHJlZUl0ZW06IFRyZWVJdGVtTW9kZWwsIHBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCB0cmVlSXRlbSA9IHN0cnVjdHVyZWRDbG9uZShnaXZlblRyZWVJdGVtKTtcbiAgICAgICAgaWYgKHRyZWVJdGVtICYmIHBhdGgpIHtcbiAgICAgICAgdGhpcy50ZW1wU2VsZWN0aW9uTW9kZWwgPSBuZXcgU2VsZWN0aW9uTW9kZWw8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+KFxuICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQsXG4gICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgKGEsIGIpID0+IGE/LnBhdGggPT09IGI/LnBhdGgsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2V0VHJlZURhdGEocGF0aCwgdGhpcy5wcm9jZXNzSW5wdXRzKFt0cmVlSXRlbV0pWzBdKTtcbiAgICAgICAgY29uc3QgcGF0aEFyciA9IHBhdGguc3BsaXQoJy4nKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBwYXJzZUludChwYXRoQXJyLnBvcCgpLCAxMCk7XG4gICAgICAgIGNvbnN0IHRyZWVJdGVtUnVudGltZSA9IHRoaXMuY2FsY3VsYXRlUnVuVGltZVN0YXRlKHRyZWVJdGVtLCBpbmRleCwgcGF0aEFyci5qb2luKCcuJykpO1xuICAgICAgICBpZiAodHJlZUl0ZW1SdW50aW1lPy5jaGlsZHJlbj8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdHJlZUl0ZW1SdW50aW1lLmNoaWxkcmVuID0gdGhpcy5hcHBseVJ1blRpbWVMYXN0SXRlbXModHJlZUl0ZW1SdW50aW1lLmNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFRyZWVEYXRhUnVuVGltZUJhY2t1cChwYXRoLCB0cmVlSXRlbVJ1bnRpbWUpO1xuICAgICAgICB0aGlzLnNldFRyZWVEYXRhUnVuVGltZShwYXRoLCB0cmVlSXRlbVJ1bnRpbWUpO1xuICAgICAgICAvLyBpdGVtUmVjdXJzaXZlU2VsZWN0aW9uU3RhdGVcbiAgICAgICAgY29uc3QgaXRlbVJlY3Vyc2l2ZVNlbGVjdGlvblN0YXRlID0gdGhpcy5jYWxjdWxhdGVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUodHJlZUl0ZW0pO1xuICAgICAgICB0aGlzLnNldFJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZVRyZWUocGF0aCwgaXRlbVJlY3Vyc2l2ZVNlbGVjdGlvblN0YXRlKTtcbiAgICAgICAgdGhpcy5zeW5jU3RhdGVDaGFuZ2VzQXRQYXRoKHBhdGgpO1xuICAgICAgICBpZiAodGhpcy5jZGtUcmVlQ29udHJvbC5pc0V4cGFuZGVkKHRyZWVJdGVtUnVudGltZSkgJiYgIXRyZWVJdGVtLm5vZGUuaXNFeHBhbmRlZCkge1xuICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC50b2dnbGUodHJlZUl0ZW1SdW50aW1lKTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5jZGtUcmVlQ29udHJvbC5pc0V4cGFuZGVkKHRyZWVJdGVtUnVudGltZSkgJiYgdHJlZUl0ZW0ubm9kZS5pc0V4cGFuZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmV4cGFuZCh0cmVlSXRlbVJ1bnRpbWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVuZGVySW5pdGlhbEV4cGFuZCh0aGlzLmdldFJ1blRpbWVUcmVlSXRlbShwYXRoKT8uY2hpbGRyZW4pO1xuICAgICAgICB0aGlzLmdldEluaXRpYWxTZWxlY3Rpb24odGhpcy5nZXRSdW5UaW1lVHJlZUl0ZW0ocGF0aCk/LmNoaWxkcmVuKT8uZm9yRWFjaCgocnVuVGltZUl0ZW0pID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0VHJlZUl0ZW0odGhpcy5nZXRSdW5UaW1lQmFja3VwVHJlZUl0ZW0ocnVuVGltZUl0ZW0ucGF0aCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZXRTZWxlY3Rpb24oLi4udGhpcy50ZW1wU2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQpO1xuICAgICAgICAvLyBSZW5kZXJpbmdcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMudHJlZUNvbXBvbmVudEluc3RhbmNlLnJlbmRlck5vZGVDaGFuZ2VzKFtdKTtcbiAgICAgICAgdGhpcy50cmVlQ29tcG9uZW50SW5zdGFuY2UucmVuZGVyTm9kZUNoYW5nZXModGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Ob2RlQ2xpY2sodHJlZVJ1blRpbWVJdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLm5vZGVDbGljay5lbWl0KHRoaXMuZ2V0VHJlZUl0ZW0odHJlZVJ1blRpbWVJdGVtPy5wYXRoKSk7XG4gICAgICAgIGlmICh0aGlzLmlzQ2xpY2tUb2dnbGluZ05vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wudG9nZ2xlKHRyZWVSdW5UaW1lSXRlbSk7XG4gICAgICAgICAgICB0aGlzLm9uTm9kZVRvZ2dsZSh0cmVlUnVuVGltZUl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Ob2RlVG9nZ2xlKHRyZWVSdW5UaW1lSXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5nZXRUcmVlSXRlbSh0cmVlUnVuVGltZUl0ZW0/LnBhdGgpLm5vZGUuaXNFeHBhbmRlZCA9IHRoaXMuY2RrVHJlZUNvbnRyb2wuaXNFeHBhbmRlZCh0cmVlUnVuVGltZUl0ZW0pO1xuICAgICAgICB0aGlzLm5vZGVUb2dnbGUuZW1pdCh0aGlzLmdldFRyZWVJdGVtKHRyZWVSdW5UaW1lSXRlbT8ucGF0aCkpO1xuICAgIH1cblxuICAgIC8vIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgdHlwZSBvciB0dXJuIGludG8gYSBnZW5lcmljLCBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL2dlbmVyaWNzLmh0bWxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIG5vZGVTZWxlY3RlZChldnQ6IGFueSwgcGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldFRyZWVJdGVtKHBhdGgpO1xuICAgICAgICBjb25zdCBydW5UaW1lQmFja3VwVHJlZUl0ZW0gPSB0aGlzLmdldFJ1blRpbWVCYWNrdXBUcmVlSXRlbShwYXRoKTtcbiAgICAgICAgY29uc3QgcmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0gPSB0aGlzLmdldFJ1blRpbWVUcmVlSXRlbShwYXRoKTtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGl0ZW0/Lm5vZGU7XG4gICAgICAgIHRoaXMudGVtcFNlbGVjdGlvbk1vZGVsID0gbmV3IFNlbGVjdGlvbk1vZGVsPFRyZWVJdGVtUnVuVGltZU1vZGVsPihcbiAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkLFxuICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgIChhLCBiKSA9PiBhPy5wYXRoID09PSBiPy5wYXRoLFxuICAgICAgICApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhwYXRoLGl0ZW0scnVuVGltZVRyZWVJdGVtLCByZW5kZXJlZFJ1blRpbWVUcmVlSXRlbSk7XG4gICAgICAgIGlmKHRoaXMuY3VzdG9tTm9kZVNlbGVjdEZuKXtcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tTm9kZVNlbGVjdEZuKHBhdGgsIGV2dC50YXJnZXQuY2hlY2tlZCwgaXRlbSwgbmV3IEN1c3RvbU5vZGVTZWxlY3RGbkhlbHBlcih0aGlzKSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLnNldFNlbGVjdGlvbiguLi50aGlzLnRlbXBTZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZCk7XG4gICAgICAgIH0gIGVsc2UgaWYgKCFub2RlPy5zZWxlY3RDb25maWc/LnNpbmdsZVNlbGVjdCkge1xuICAgICAgICAgICAgbm9kZS5pc1NlbGVjdGVkID0gZXZ0LnRhcmdldC5jaGVja2VkO1xuICAgICAgICAgICAgbm9kZS5pc0luZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIElmIHRoZSBub2RlIGlzIHJlY3Vyc2l2ZSBpdCBzZXRzIGV2ZXJ5IGNoaWxkcmVuIHdpdGggdGhlIGNoYW5nZS5cbiAgICAgICAgICAgIGlmIChyZW5kZXJlZFJ1blRpbWVUcmVlSXRlbT8uY2hpbGRyZW4gJiYgcmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGU/LnNlbGVjdENvbmZpZz8ucmVjdXJzaXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlcmVkUnVuVGltZVRyZWVJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRJc0NoZWNrZWRGb3JBbGwocmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0/LmNoaWxkcmVuLCBldnQudGFyZ2V0LmNoZWNrZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZXRSdW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGVUcmVlKFxuICAgICAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUoc3RydWN0dXJlZENsb25lKHRoaXMuZ2V0VHJlZUl0ZW0ocGF0aCkpKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAocmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0/LmNoaWxkcmVuICYmIHJlbmRlcmVkUnVuVGltZVRyZWVJdGVtPy5jaGlsZHJlbj8ubGVuZ3RoID49IDApIHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZT8uc2VsZWN0Q29uZmlnPy5yZWN1cnNpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5zZXRJc0NoZWNrZWRGb3JBbGwocmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0/LmNoaWxkcmVuLCBldnQudGFyZ2V0LmNoZWNrZWQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJ1blN0YXRlQ2hhbmdlc0ZvckFsbChyZW5kZXJlZFJ1blRpbWVUcmVlSXRlbT8uY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVDb21wb25lbnRJbnN0YW5jZT8ucmVuZGVyTm9kZUNoYW5nZXMoW10pO1xuICAgICAgICAgICAgICAgIHRoaXMudHJlZUNvbXBvbmVudEluc3RhbmNlPy5yZW5kZXJOb2RlQ2hhbmdlcyh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN5bmNTdGF0ZUNoYW5nZXNBdFBhdGgocGF0aCk7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXRUcmVlSXRlbShwYXRoKS5ub2RlLmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFRyZWVJdGVtKHJ1blRpbWVCYWNrdXBUcmVlSXRlbSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzZWxlY3RUcmVlSXRlbShydW5UaW1lQmFja3VwVHJlZUl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgbm9kZVBhdGhzU2VxID0gdGhpcy5nZXRQYXJlbnRQYXRocyhwYXRoKTtcbiAgICAgICAgICAgIGlmIChub2RlUGF0aHNTZXEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIG5vZGVQYXRoc1NlcS5mb3JFYWNoKChub2RlUGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyZWVJdGVtID0gdGhpcy5nZXRUcmVlSXRlbShub2RlUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkU3RhdGVzID0gdGhpcy5nZXRSdW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUobm9kZVBhdGgpLmNoaWxkcmVuLm1hcCgoXykgPT4gXy5zZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZVBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlY2lkZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkU3RhdGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWVJdGVtLm5vZGU/LmlzU2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJlZUl0ZW0ubm9kZT8uc2VsZWN0Q29uZmlnPy5yZWN1cnNpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJlZUl0ZW0ubm9kZT8uc2VsZWN0Q29uZmlnPy5ub0F1dG9TZWxlY3RQYXJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN5bmNTdGF0ZUNoYW5nZXNBdFBhdGgobm9kZVBhdGgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwuc2V0U2VsZWN0aW9uKC4uLnRoaXMudGVtcFNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZJdGVtID0gdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFswXTtcbiAgICAgICAgICAgIGlmIChldnQudGFyZ2V0LmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJldkl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRUcmVlSXRlbShwcmV2SXRlbS5wYXRoKS5ub2RlLmlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdChwcmV2SXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGl0ZW0ubm9kZS5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdChydW5UaW1lQmFja3VwVHJlZUl0ZW0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdGVtLm5vZGUuaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwuZGVzZWxlY3QocnVuVGltZUJhY2t1cFRyZWVJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmhpZ2hsaWdodFBhdGgpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXZ0LnRhcmdldC5jaGVja2VkICYmIHByZXZJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZJdGVtTm9kZVBhdGhzU2VxID0gdGhpcy5nZXRQYXJlbnRQYXRocyhwcmV2SXRlbS5wYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZJdGVtTm9kZVBhdGhzU2VxLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZJdGVtTm9kZVBhdGhzU2VxLmZvckVhY2goKG5vZGVQYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShub2RlUGF0aCwgJ2FsbE5vdFNlbGVjdGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zeW5jU3RhdGVDaGFuZ2VzQXRQYXRoKG5vZGVQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVQYXRoc1NlcSA9IHRoaXMuZ2V0UGFyZW50UGF0aHMocGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGVQYXRoc1NlcT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBub2RlUGF0aHNTZXEuZm9yRWFjaCgobm9kZVBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVSdW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUobm9kZVBhdGgsIGV2dC50YXJnZXQuY2hlY2tlZCA/ICdpbmRldGVybWluYXRlJyA6ICdhbGxOb3RTZWxlY3RlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zeW5jU3RhdGVDaGFuZ2VzQXRQYXRoKG5vZGVQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhc0NoaWxkID0gKF86IG51bWJlciwgaXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiBib29sZWFuID0+ICEhaXRlbT8uY2hpbGRyZW4gJiYgaXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+PSAwO1xuXG4gICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgb25TZWxlY3RGbihwYXRoOiBzdHJpbmcpOiAoZXZ0OiBhbnkpID0+IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5nZXRUcmVlSXRlbShwYXRoKT8ubm9kZT8uc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZVNlbGVjdGVkID0gdGhpcy5ub2RlU2VsZWN0ZWQuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIC8vIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgdHlwZSBvciB0dXJuIGludG8gYSBnZW5lcmljLCBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL2dlbmVyaWNzLmh0bWxcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICByZXR1cm4gKGV2dDogYW55KSA9PiBub2RlU2VsZWN0ZWQoZXZ0LCBwYXRoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IHR5cGUgb3IgdHVybiBpbnRvIGEgZ2VuZXJpYywgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9nZW5lcmljcy5odG1sXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIHJldHVybiAoZXZ0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybigndHJlZUl0ZW1Nb2RlbC5ub2RlLnNlbGVjdGFibGUgaXMgZmFsc2UsIHlvdSBjYW4gbm90IGltcGxlbWVudCBvblNlbGVjdCcpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdldFJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShwYXRoOiBzdHJpbmcpOiBUcmVlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZU1vZGVsIHtcbiAgICAgICAgY29uc3QgaW5kZXhBcnI6IEFycmF5PG51bWJlcj4gPSB0aGlzLnJlc29sdmVQYXRoKHBhdGgpO1xuICAgICAgICBsZXQgbm9kZUFyciA9IHRoaXMucnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlO1xuICAgICAgICBsZXQgbm9kZTtcbiAgICAgICAgaW5kZXhBcnI/LmZvckVhY2goKHBhdGhJbmRleDogbnVtYmVyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgaW5kZXhBcnIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIG5vZGVBcnIgPSBub2RlQXJyW3BhdGhJbmRleF0/LmNoaWxkcmVuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBub2RlID0gbm9kZUFycltwYXRoSW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0VHJlZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubm9kZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzTXVsdGlMZXZlbCA9IHRoaXMuY2hlY2tJZk11bHRpTGV2ZWwodGhpcy5ub2Rlcyk7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NlZE5vZGVzID0gdGhpcy5wcm9jZXNzSW5wdXRzKHN0cnVjdHVyZWRDbG9uZSh0aGlzLm5vZGVzKSk7XG4gICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHRoaXMuY3JlYXRlVHJlZURhdGFSdW50aW1lKHRoaXMucHJvY2Vzc2VkTm9kZXMpO1xuICAgICAgICAgICAgdGhpcy50cmVlRGF0YVJ1blRpbWUgPSB0aGlzLmFwcGx5UnVuVGltZUxhc3RJdGVtcyh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICB0aGlzLnJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSA9IHRoaXMuY3JlYXRlUnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKHRoaXMucHJvY2Vzc2VkTm9kZXMpO1xuICAgICAgICAgICAgdGhpcy50cmVlRGF0YVJ1blRpbWVCYWNrdXAgPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgLy8gdG9kbyBJdCBzaG91bGQgYmUgY29uZmlndXJhYmxlLCA4MDAsIDIgYW5kIDQwMCBhcmUgaGFyZCBjb2RlZCByaWdodCBub3dcbiAgICAgICAgICAgIGlmICh0aGlzLnRyZWVEYXRhUnVuVGltZUJhY2t1cC5sZW5ndGggPiA4MDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVQYWdpbmF0aW9uID0gbmV3IEV1aVRyZWVQYWdpbmF0aW9uPFRyZWVJdGVtUnVuVGltZU1vZGVsPih0aGlzLnRyZWVEYXRhUnVuVGltZUJhY2t1cCwgMSwgMiwgNDAwKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYWdpbmF0ZWREYXRhID0gdGhpcy50cmVlUGFnaW5hdGlvbi5nZXRWaWV3RGF0YSgpLmRhdGE7XG4gICAgICAgICAgICAgICAgdGhpcy5jZGtBcnJheURhdGFTb3VyY2UgPSBuZXcgQXJyYXlEYXRhU291cmNlPFRyZWVJdGVtUnVuVGltZU1vZGVsPihwYWdpbmF0ZWREYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sID0gbmV3IE5lc3RlZFRyZWVDb250cm9sPFRyZWVJdGVtUnVuVGltZU1vZGVsPigobm9kZSkgPT4gbm9kZT8uY2hpbGRyZW4sIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdGhpcy50cmFja0J5Q29udHJvbCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmRhdGFOb2RlcyA9IHBhZ2luYXRlZERhdGE7XG4gICAgICAgICAgICAgICAgdGhpcy5ydW5TY3JvbGxMaXN0ZW5lcigpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNka0FycmF5RGF0YVNvdXJjZSA9IG5ldyBBcnJheURhdGFTb3VyY2U8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+KHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sID0gbmV3IE5lc3RlZFRyZWVDb250cm9sPFRyZWVJdGVtUnVuVGltZU1vZGVsPigobm9kZSkgPT4gbm9kZT8uY2hpbGRyZW4sIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdGhpcy50cmFja0J5Q29udHJvbCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmRhdGFOb2RlcyA9IHRoaXMudHJlZURhdGFSdW5UaW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZW5kZXJJbml0aWFsRXhwYW5kKHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwgPSBuZXcgU2VsZWN0aW9uTW9kZWw8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+KFxuICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRJbml0aWFsU2VsZWN0aW9uKHRoaXMudHJlZURhdGFSdW5UaW1lKSxcbiAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgIChhLCBiKSA9PiBhPy5wYXRoID09PSBiPy5wYXRoLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbiA9IFsuLi50aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkXT8ubWFwKChpdGVtKSA9PiB0aGlzLmdldFRyZWVJdGVtKGl0ZW0/LnBhdGgpKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSA9IHRydWU7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlbFN1YnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsU3Vicy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbFN1YnMgPSB0aGlzLnNlbGVjdGlvbk1vZGVsLmNoYW5nZWQucGlwZShkZWJvdW5jZVRpbWUoMSkpLnN1YnNjcmliZSgoc2MpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3Rpb25DaGFuZ2UgPSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZGVkOiBzYy5hZGRlZC5tYXAoKF8pID0+IHRoaXMuZ2V0VHJlZUl0ZW0oXy5wYXRoKSksXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZWQ6IHNjLnJlbW92ZWQubWFwKChfKSA9PiB0aGlzLmdldFRyZWVJdGVtKF8ucGF0aCkpLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsuLi50aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkXS5tYXAoKGl0ZW0pID0+IHRoaXMuZ2V0VHJlZUl0ZW0oaXRlbS5wYXRoKSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb24gPSBzZWxlY3Rpb25DaGFuZ2Uuc2VsZWN0aW9uO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoc2VsZWN0aW9uQ2hhbmdlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc0lucHV0cyh0cmVlRGF0YTogVHJlZURhdGFNb2RlbCk6IFRyZWVEYXRhTW9kZWwge1xuICAgICAgICBpZiAodGhpcy5pc011bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICB0cmVlRGF0YSA9IHRoaXMub3ZlcnJpZGVUcmVlRGF0YU1vZGVsRm9yU2VsZWN0aW9uKHRyZWVEYXRhLCB0aGlzLmlzUmVjdXJzaXZlU2VsZWN0aW9uLCAhdGhpcy5pc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNTaW5nbGVTZWxlY3QpIHtcbiAgICAgICAgICAgIHRyZWVEYXRhID0gdGhpcy5vdmVycmlkZVRyZWVEYXRhTW9kZWxGb3JTZWxlY3Rpb24odHJlZURhdGEsIGZhbHNlLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyZWVEYXRhO1xuICAgIH1cblxuICAgIHByaXZhdGUgb3ZlcnJpZGVUcmVlRGF0YU1vZGVsRm9yU2VsZWN0aW9uKFxuICAgICAgICBub2RlQXJyOiBUcmVlRGF0YU1vZGVsLFxuICAgICAgICBpc1JlY3Vyc2l2ZTogYm9vbGVhbixcbiAgICAgICAgbm9BdXRvU2VsZWN0UGFyZW50OiBib29sZWFuLFxuICAgICAgICBzaW5nbGVTZWxlY3Q/OiBib29sZWFuLFxuICAgICk6IFRyZWVEYXRhTW9kZWwge1xuICAgICAgICByZXR1cm4gbm9kZUFycj8ubWFwKChpdGVtOiBUcmVlSXRlbU1vZGVsLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbT8uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgbm9kZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbS5ub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogdHlwZW9mIGl0ZW0/Lm5vZGU/LnNlbGVjdGFibGUgPT09ICd1bmRlZmluZWQnID8gdHJ1ZSA6IGl0ZW0/Lm5vZGU/LnNlbGVjdGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpc1NlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzSW5kZXRlcm1pbmF0ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RDb25maWc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLm5vZGUuc2VsZWN0Q29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGl0ZW0/Lm5vZGU/LnNlbGVjdENvbmZpZz8ucmVjdXJzaXZlID09PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAhIWlzUmVjdXJzaXZlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGl0ZW0/Lm5vZGU/LnNlbGVjdENvbmZpZz8ucmVjdXJzaXZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vQXV0b1NlbGVjdFBhcmVudDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGl0ZW0/Lm5vZGU/LnNlbGVjdENvbmZpZz8ubm9BdXRvU2VsZWN0UGFyZW50ID09PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBub0F1dG9TZWxlY3RQYXJlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaXRlbT8ubm9kZT8uc2VsZWN0Q29uZmlnPy5ub0F1dG9TZWxlY3RQYXJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU2VsZWN0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaXRlbT8ubm9kZT8uc2VsZWN0Q29uZmlnPy5zaW5nbGVTZWxlY3QgPT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNpbmdsZVNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpdGVtPy5ub2RlPy5zZWxlY3RDb25maWc/LnNpbmdsZVNlbGVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLm92ZXJyaWRlVHJlZURhdGFNb2RlbEZvclNlbGVjdGlvbihpdGVtLmNoaWxkcmVuLCBpc1JlY3Vyc2l2ZSwgbm9BdXRvU2VsZWN0UGFyZW50LCBzaW5nbGVTZWxlY3QpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgIG5vZGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0ubm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IHR5cGVvZiBpdGVtPy5ub2RlPy5zZWxlY3RhYmxlID09PSAndW5kZWZpbmVkJyA/IHRydWUgOiBpdGVtPy5ub2RlPy5zZWxlY3RhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0Q29uZmlnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbS5ub2RlPy5zZWxlY3RDb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU2VsZWN0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaXRlbT8ubm9kZT8uc2VsZWN0Q29uZmlnPy5zaW5nbGVTZWxlY3QgPT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNpbmdsZVNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpdGVtPy5ub2RlPy5zZWxlY3RDb25maWc/LnNpbmdsZVNlbGVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBydW5TY3JvbGxMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICAgICAvKiBpZiAodGhpcy5zY3JvbGxEaXNwYXRjaGVyU3VicykgeyB0b2RvXG4gICAgICAgICAgICB0aGlzLnNjcm9sbERpc3BhdGNoZXJTdWJzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0qL1xuICAgICAgICB0aGlzLnNjcm9sbERpc3BhdGNoZXJTdWJzID0gdGhpcy5zY3JvbGxEaXNwYXRjaGVyLnNjcm9sbGVkKCkuc3Vic2NyaWJlKChzY3JvbGxhYmxlOiBDZGtTY3JvbGxhYmxlKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2Nyb2xsYWJsZSAmJiB0aGlzLmNoZWNrSWZDdXJyZW50U2Nyb2xsYWJsZShzY3JvbGxhYmxlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQXRCb3R0b20gPVxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlPy5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgKyBzY3JvbGxhYmxlPy5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQgPj1cbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZT8uZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0O1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQXRUb3AgPSBzY3JvbGxhYmxlPy5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPT09IDA7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0VsZW1lbnQ6JywgdGhpcy5jZGtTY3JvbGxhYmxlUmVmLmdldEVsZW1lbnRSZWYoKSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzQXRCb3R0b20gJiYgIXRoaXMudHJlZVBhZ2luYXRpb24uaXNBdE1heCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZURhdGFSdW5UaW1lID0gdGhpcy50cmVlUGFnaW5hdGlvbi5wYWdpbmF0ZU5leHQoKS5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlRGF0YVJ1blRpbWUgPSB0aGlzLmFwcGx5UnVuVGltZUxhc3RJdGVtcyh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNka0FycmF5RGF0YVNvdXJjZSA9IG5ldyBBcnJheURhdGFTb3VyY2UodGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbCA9IG5ldyBOZXN0ZWRUcmVlQ29udHJvbDxUcmVlSXRlbVJ1blRpbWVNb2RlbD4oKG5vZGUpID0+IG5vZGU/LmNoaWxkcmVuLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdGhpcy50cmFja0J5Q29udHJvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5kYXRhTm9kZXMgPSB0aGlzLnRyZWVEYXRhUnVuVGltZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclRyZWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZEFsbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG90YWxIZWlnaHQgPSBzY3JvbGxhYmxlLm1lYXN1cmVTY3JvbGxPZmZzZXQoJ2JvdHRvbScpICsgc2Nyb2xsYWJsZS5tZWFzdXJlU2Nyb2xsT2Zmc2V0KCd0b3AnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZpZXdwb3J0SGVpZ2h0ID0gc2Nyb2xsYWJsZS5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvblRvU2Nyb2xsID0gdG90YWxIZWlnaHQgLSB2aWV3cG9ydEhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGFibGUuc2Nyb2xsVG8oeyB0b3A6IHBvc2l0aW9uVG9TY3JvbGwgLyAyIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc0F0VG9wICYmIHRoaXMudHJlZVBhZ2luYXRpb24uZ2V0Q3VycmVudFN0YXJ0UGFnZSgpID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ub2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHRoaXMudHJlZVBhZ2luYXRpb24ucGFnaW5hdGVQcmV2KCkuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZURhdGFSdW5UaW1lID0gdGhpcy5hcHBseVJ1blRpbWVMYXN0SXRlbXModGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jZGtBcnJheURhdGFTb3VyY2UgPSBuZXcgQXJyYXlEYXRhU291cmNlKHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wgPSBuZXcgTmVzdGVkVHJlZUNvbnRyb2w8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+KChub2RlKSA9PiBub2RlPy5jaGlsZHJlbiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRoaXMudHJhY2tCeUNvbnRyb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wuZGF0YU5vZGVzID0gdGhpcy50cmVlRGF0YVJ1blRpbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclRyZWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBhbmRBbGwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsSGVpZ2h0ID0gc2Nyb2xsYWJsZS5tZWFzdXJlU2Nyb2xsT2Zmc2V0KCdib3R0b20nKSArIHNjcm9sbGFibGUubWVhc3VyZVNjcm9sbE9mZnNldCgndG9wJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IHNjcm9sbGFibGUuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb25Ub1Njcm9sbCA9IHRvdGFsSGVpZ2h0IC0gdmlld3BvcnRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlLnNjcm9sbFRvKHsgdG9wOiBwb3NpdGlvblRvU2Nyb2xsIC8gMiArIHZpZXdwb3J0SGVpZ2h0IH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlbGVjdGlvbkluZGV4T2ZJdGVtKHJ1blRpbWVUcmVlSXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZC5maW5kSW5kZXgoKGkpID0+IGk/LnBhdGggPT09IHJ1blRpbWVUcmVlSXRlbT8ucGF0aCk7XG4gICAgfVxuICAgIC8vIHRvZG8gcmUtdGhpbmsgYWJvdXQgdGhlIGFjY2VzcyBmcm9tIGN1c3RvbSBvbiBub2RlIHNlbGVjdCBoZWxwZXJcbiAgICBwcml2YXRlIHNpbGVudFNlbGVjdChwYXRoOnN0cmluZywgaXNDaGVja2VkOiBib29sZWFuKTogdm9pZHtcbiAgICAgICAgY29uc3QgcnVudGltZUJhY2t1cFRyZWVJdGVtID0gdGhpcy5nZXRSdW5UaW1lQmFja3VwVHJlZUl0ZW0ocGF0aCk7XG4gICAgICAgIGNvbnN0IHRyZWVJdGVtID0gdGhpcy5nZXRUcmVlSXRlbShwYXRoKTtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRyZWVJdGVtLm5vZGU7XG4gICAgICAgIGlmIChub2RlPy5zZWxlY3RhYmxlKSB7XG4gICAgICAgICAgICBub2RlLmlzU2VsZWN0ZWQgPSBpc0NoZWNrZWQ7XG4gICAgICAgICAgICBub2RlLmlzSW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKGlzQ2hlY2tlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMudGVtcFNlbGVjdGlvbk1vZGVsLnNlbGVjdChydW50aW1lQmFja3VwVHJlZUl0ZW0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBTZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdChydW50aW1lQmFja3VwVHJlZUl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZWxlY3RUcmVlSXRlbShydW5UaW1lQmFja3VwVHJlZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKTogdm9pZCB7XG4gICAgICAgICAgICB0aGlzLnRlbXBTZWxlY3Rpb25Nb2RlbC5zZWxlY3QocnVuVGltZUJhY2t1cFRyZWVJdGVtKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlc2VsZWN0VHJlZUl0ZW0ocnVuVGltZVRyZWVJdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRlbXBTZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdChydW5UaW1lVHJlZUl0ZW0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlVHJlZURhdGFSdW50aW1lKG5vZGVzOiBUcmVlRGF0YU1vZGVsKTogVHJlZURhdGFSdW5UaW1lTW9kZWwge1xuICAgICAgICByZXR1cm4gc3RydWN0dXJlZENsb25lKG5vZGVzKT8ubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FsY3VsYXRlUnVuVGltZVN0YXRlKGl0ZW0sIGluZGV4KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBseVJ1blRpbWVMYXN0SXRlbXMoaXRlbXM6IFRyZWVEYXRhUnVuVGltZU1vZGVsKTogVHJlZURhdGFSdW5UaW1lTW9kZWwge1xuICAgICAgICByZXR1cm4gaXRlbXM/Lm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtPy5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGxhc3Q6IGl0ZW1zLmxlbmd0aCA9PT0gaW5kZXggKyAxID8gdHJ1ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IGl0ZW0uY2hpbGRyZW4/Lmxlbmd0aCA+IDAgPyB0aGlzLmFwcGx5UnVuVGltZUxhc3RJdGVtcyhpdGVtLmNoaWxkcmVuKSA6IGl0ZW0/LmNoaWxkcmVuLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGxhc3Q6IGl0ZW1zLmxlbmd0aCA9PT0gaW5kZXggKyAxID8gdHJ1ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShub2RlczogVHJlZURhdGFNb2RlbCk6IEFycmF5PFRyZWVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlTW9kZWw+IHtcbiAgICAgICAgcmV0dXJuIHN0cnVjdHVyZWRDbG9uZShub2Rlcyk/Lm1hcCgoaXRlbSkgPT4gdGhpcy5jYWxjdWxhdGVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUoeyAuLi5pdGVtIH0pKTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGluZyBydW4gdGltZSBzdGF0ZSB3aGljaCBpbmNsdWRlcyBjaGlsZHJlbiBzZWxlY3Rpb24gc3RhdGUgZm9yIHNlbGVjdGlvbiB0cmVlLlxuICAgIHByaXZhdGUgY2FsY3VsYXRlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKHRyZWVJdGVtOiBUcmVlSXRlbU1vZGVsKTogVHJlZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVNb2RlbCB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuU2VsZWN0aW9uUmVjdXJzaXZlOiBBcnJheTxUcmVlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZU1vZGVsPiA9IFtdO1xuICAgICAgICBpZiAodHJlZUl0ZW0uY2hpbGRyZW4gJiYgdHJlZUl0ZW0uY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdHJlZUl0ZW0uY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW5TZWxlY3Rpb25SZWN1cnNpdmVbaW5kZXhdID0gdGhpcy5jYWxjdWxhdGVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUoY2hpbGQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hpbGRTdGF0ZXMgPSBjaGlsZHJlblNlbGVjdGlvblJlY3Vyc2l2ZS5tYXAoKF8pID0+IF8uc2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUpO1xuXG4gICAgICAgIGNvbnN0IGl0ZW1TdGF0ZTogU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUgPSAgdHJlZUl0ZW0ubm9kZS5zZWxlY3RhYmxlID8gdGhpcy5kZWNpZGVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShcbiAgICAgICAgICAgIGNoaWxkU3RhdGVzLFxuICAgICAgICAgICAgdHJlZUl0ZW0ubm9kZS5pc1NlbGVjdGVkLFxuICAgICAgICAgICAgdHJlZUl0ZW0ubm9kZT8uc2VsZWN0Q29uZmlnPy5yZWN1cnNpdmUsXG4gICAgICAgICAgICB0cmVlSXRlbS5ub2RlPy5zZWxlY3RDb25maWc/Lm5vQXV0b1NlbGVjdFBhcmVudCxcbiAgICAgICAgKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlOiBpdGVtU3RhdGUsXG4gICAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5TZWxlY3Rpb25SZWN1cnNpdmUsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZWNpZGVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShcbiAgICAgICAgY2hpbGRTdGF0ZXM6IEFycmF5PFNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlPiA9IFtdLFxuICAgICAgICBpc1NlbGVjdGVkOiBib29sZWFuLFxuICAgICAgICByZWN1cnNpdmU6IGJvb2xlYW4sXG4gICAgICAgIG5vQXV0b1NlbGVjdFBhcmVudDogYm9vbGVhbixcbiAgICApOiBTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSB7XG4gICAgICAgIGxldCBpdGVtU3RhdGU6IFNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlID0gJ2luZGV0ZXJtaW5hdGUnO1xuICAgICAgICBpZiAoaXNTZWxlY3RlZCAmJiBjaGlsZFN0YXRlcy5maWx0ZXIoKGNoaWxkU3RhdGVzKT0+Y2hpbGRTdGF0ZXMpLmV2ZXJ5KChzdGF0ZSkgPT4gc3RhdGUgPT09ICdhbGxTZWxlY3RlZCcpKSB7XG4gICAgICAgICAgICBpdGVtU3RhdGUgPSAnYWxsU2VsZWN0ZWQnO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc1NlbGVjdGVkICYmIGNoaWxkU3RhdGVzLmZpbHRlcigoY2hpbGRTdGF0ZXMpPT5jaGlsZFN0YXRlcykuZXZlcnkoKHN0YXRlKSA9PiBzdGF0ZSA9PT0gJ2FsbE5vdFNlbGVjdGVkJykpIHtcbiAgICAgICAgICAgIGl0ZW1TdGF0ZSA9ICdhbGxOb3RTZWxlY3RlZCc7XG4gICAgICAgIH0gZWxzZSBpZiAocmVjdXJzaXZlICYmIGNoaWxkU3RhdGVzLmZpbHRlcigoY2hpbGRTdGF0ZXMpPT5jaGlsZFN0YXRlcykuZXZlcnkoKHN0YXRlKSA9PiBzdGF0ZSA9PT0gJ2FsbFNlbGVjdGVkJykgJiYgIWlzU2VsZWN0ZWQgJiYgIW5vQXV0b1NlbGVjdFBhcmVudCkge1xuICAgICAgICAgICAgaXRlbVN0YXRlID0gJ2FsbFNlbGVjdGVkJztcbiAgICAgICAgfSBlbHNlIGlmIChyZWN1cnNpdmUgJiYgY2hpbGRTdGF0ZXMuZmlsdGVyKChjaGlsZFN0YXRlcyk9PmNoaWxkU3RhdGVzKS5ldmVyeSgoc3RhdGUpID0+IHN0YXRlID09PSAnYWxsTm90U2VsZWN0ZWQnKSAmJiBpc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICBpdGVtU3RhdGUgPSAnYWxsTm90U2VsZWN0ZWQnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtU3RhdGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzeW5jU3RhdGVDaGFuZ2VzQXRQYXRoKG5vZGVQYXRoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRyZWVJdGVtID0gdGhpcy5nZXRUcmVlSXRlbShub2RlUGF0aCk7XG4gICAgICAgIGNvbnN0IHJ1blRpbWVCYWNrdXBUcmVlSXRlbSA9IHRoaXMuZ2V0UnVuVGltZUJhY2t1cFRyZWVJdGVtKG5vZGVQYXRoKTtcbiAgICAgICAgY29uc3QgcnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZUl0ZW0gPSB0aGlzLmdldFJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShub2RlUGF0aCk7XG4gICAgICAgIGlmICh0cmVlSXRlbT8ubm9kZT8uc2VsZWN0YWJsZSAmJiB0cmVlSXRlbS5ub2RlPy5zZWxlY3RDb25maWc/LnJlY3Vyc2l2ZSkge1xuICAgICAgICAgICAgaWYgKCF0cmVlSXRlbS5ub2RlPy5zZWxlY3RDb25maWc/Lm5vQXV0b1NlbGVjdFBhcmVudCkge1xuICAgICAgICAgICAgICAgIHRyZWVJdGVtLm5vZGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnRyZWVJdGVtLm5vZGUsXG4gICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IHJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVJdGVtLnNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlID09PSAnYWxsU2VsZWN0ZWQnLFxuICAgICAgICAgICAgICAgICAgICBpc0luZGV0ZXJtaW5hdGU6IHJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVJdGVtLnNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlID09PSAnaW5kZXRlcm1pbmF0ZScsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJlZUl0ZW0ubm9kZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4udHJlZUl0ZW0ubm9kZSxcbiAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZDogdHJlZUl0ZW0ubm9kZS5pc1NlbGVjdGVkICYmIHJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVJdGVtLnNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlID09PSAnYWxsU2VsZWN0ZWQnLFxuICAgICAgICAgICAgICAgICAgICBpc0luZGV0ZXJtaW5hdGU6XG4gICAgICAgICAgICAgICAgICAgICAgICBydW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlSXRlbS5zZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSA9PT0gJ2luZGV0ZXJtaW5hdGUnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAoIXRyZWVJdGVtLm5vZGUuaXNTZWxlY3RlZCAmJiBydW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlSXRlbS5zZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSA9PT0gJ2FsbFNlbGVjdGVkJyksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRyZWVJdGVtLCB0cmVlSXRlbS5ub2RlLnRyZWVDb250ZW50QmxvY2subGFiZWwsICdpc1NlbGVjdGVkOicgKyB0cmVlSXRlbS5ub2RlLmlzU2VsZWN0ZWQsICdpc0luZGV0ZXJtaW5hdGU6JyArIHRyZWVJdGVtLm5vZGUuaXNJbmRldGVybWluYXRlKTtcbiAgICAgICAgICAgIGlmICh0cmVlSXRlbS5ub2RlLmlzU2VsZWN0ZWQgPT09IHRydWUgJiYgIXRoaXMuc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChydW5UaW1lQmFja3VwVHJlZUl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RUcmVlSXRlbShydW5UaW1lQmFja3VwVHJlZUl0ZW0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0cmVlSXRlbS5ub2RlLmlzU2VsZWN0ZWQgPT09IGZhbHNlICYmIHRoaXMuc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChydW5UaW1lQmFja3VwVHJlZUl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXNlbGVjdFRyZWVJdGVtKHJ1blRpbWVCYWNrdXBUcmVlSXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFRyZWVEYXRhKHBhdGg6IHN0cmluZywgaXRlbTogVHJlZUl0ZW1Nb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleEFycjogQXJyYXk8bnVtYmVyPiA9IHRoaXMucmVzb2x2ZVBhdGgocGF0aCk7XG4gICAgICAgIGxldCBpdGVtQXJyID0gdGhpcy5wcm9jZXNzZWROb2RlcztcbiAgICAgICAgaW5kZXhBcnI/LmZvckVhY2goKHBhdGhJbmRleDogbnVtYmVyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgaW5kZXhBcnIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIGl0ZW1BcnIgPSBpdGVtQXJyW3BhdGhJbmRleF0/LmNoaWxkcmVuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdGVtQXJyW3BhdGhJbmRleF0gPSBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFRyZWVEYXRhUnVuVGltZUJhY2t1cChwYXRoOiBzdHJpbmcsIGl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4QXJyOiBBcnJheTxudW1iZXI+ID0gdGhpcy5yZXNvbHZlUGF0aChwYXRoKTtcbiAgICAgICAgbGV0IGl0ZW1BcnIgPSB0aGlzLnRyZWVEYXRhUnVuVGltZUJhY2t1cDtcbiAgICAgICAgaW5kZXhBcnIuZm9yRWFjaCgocGF0aEluZGV4OiBudW1iZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCBpbmRleEFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgaXRlbUFyciA9IGl0ZW1BcnJbcGF0aEluZGV4XT8uY2hpbGRyZW47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZW1BcnJbcGF0aEluZGV4XSA9IGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VHJlZURhdGFSdW5UaW1lKHBhdGg6IHN0cmluZywgaXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb2xkSXRlbSA9IHRoaXMuZ2V0UnVuVGltZVRyZWVJdGVtKHBhdGgpO1xuICAgICAgICBpZihvbGRJdGVtKXtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGl0ZW0pPy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgb2xkSXRlbVtrZXldID0gaXRlbVtrZXldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZVRyZWUocGF0aDogc3RyaW5nLCBpdGVtOiBUcmVlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4QXJyOiBBcnJheTxudW1iZXI+ID0gdGhpcy5yZXNvbHZlUGF0aChwYXRoKTtcbiAgICAgICAgbGV0IGl0ZW1BcnIgPSB0aGlzLnJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZTtcbiAgICAgICAgaW5kZXhBcnIuZm9yRWFjaCgocGF0aEluZGV4OiBudW1iZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCBpbmRleEFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgaXRlbUFyciA9IGl0ZW1BcnJbcGF0aEluZGV4XT8uY2hpbGRyZW47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZW1BcnJbcGF0aEluZGV4XSA9IGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlUnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKHBhdGg6IHN0cmluZywgc2VsZWN0aW9uUmVjdXJzaXZlU3RhdGU6IFNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4QXJyOiBBcnJheTxudW1iZXI+ID0gdGhpcy5yZXNvbHZlUGF0aChwYXRoKTtcbiAgICAgICAgbGV0IGl0ZW1BcnIgPSB0aGlzLnJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZTtcbiAgICAgICAgaW5kZXhBcnIuZm9yRWFjaCgocGF0aEluZGV4OiBudW1iZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCBpbmRleEFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgaXRlbUFyciA9IGl0ZW1BcnJbcGF0aEluZGV4XT8uY2hpbGRyZW47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZW1BcnJbcGF0aEluZGV4XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uaXRlbUFycltwYXRoSW5kZXhdLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldElzQ2hlY2tlZEZvckFsbChub2RlQXJyOiBBcnJheTxUcmVlSXRlbVJ1blRpbWVNb2RlbD4sIGlzQ2hlY2tlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBub2RlQXJyLmZvckVhY2goKHJ1blRpbWVJdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgcnVudGltZUJhY2t1cFRyZWVJdGVtID0gdGhpcy5nZXRSdW5UaW1lQmFja3VwVHJlZUl0ZW0ocnVuVGltZUl0ZW0ucGF0aCk7XG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbSA9IHRoaXMuZ2V0VHJlZUl0ZW0ocnVuVGltZUl0ZW0ucGF0aCk7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gdHJlZUl0ZW0ubm9kZTtcbiAgICAgICAgICAgIGlmIChub2RlPy5zZWxlY3RhYmxlKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5pc1NlbGVjdGVkID0gaXNDaGVja2VkO1xuICAgICAgICAgICAgICAgIG5vZGUuaXNJbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKGlzQ2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFRyZWVJdGVtKHJ1bnRpbWVCYWNrdXBUcmVlSXRlbSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXNlbGVjdFRyZWVJdGVtKHJ1bnRpbWVCYWNrdXBUcmVlSXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJ1blRpbWVJdGVtPy5jaGlsZHJlbj8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SXNDaGVja2VkRm9yQWxsKG5vZGVBcnJbaW5kZXhdLmNoaWxkcmVuLCBpc0NoZWNrZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJ1blN0YXRlQ2hhbmdlc0ZvckFsbChub2RlQXJyOiBBcnJheTxUcmVlSXRlbVJ1blRpbWVNb2RlbD4pOiB2b2lkIHtcbiAgICAgICAgbm9kZUFycj8uZm9yRWFjaCgocnVuVGltZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBpZiAocnVuVGltZUl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPj0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMucnVuU3RhdGVDaGFuZ2VzRm9yQWxsKG5vZGVBcnJbaW5kZXhdLmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN5bmNTZWxlY3Rpb25BdFBhdGgocnVuVGltZUl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN5bmNTZWxlY3Rpb25BdFBhdGgocnVuVGltZVRyZWVJdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCk6IHZvaWQge1xuICAgICAgICAvLyBJdCBpcyBoZXJlIGZvciB0aGUgZmlsdGVyIGVkZ2UgY2FzZS5cbiAgICAgICAgdGhpcy5zeW5jU3RhdGVDaGFuZ2VzQXRQYXRoKHJ1blRpbWVUcmVlSXRlbS5wYXRoKTtcbiAgICAgICAgLy8gU2V0cyBpc1NlbGVjdGVkIGNoYW5nZSBvbiB0aGUgY29udHJvbC5cbiAgICAgICAgaWYgKHRoaXMuZ2V0VHJlZUl0ZW0ocnVuVGltZVRyZWVJdGVtLnBhdGgpLm5vZGUuaXNTZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RUcmVlSXRlbSh0aGlzLmdldFJ1blRpbWVCYWNrdXBUcmVlSXRlbShydW5UaW1lVHJlZUl0ZW0ucGF0aCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZXNlbGVjdFRyZWVJdGVtKHRoaXMuZ2V0UnVuVGltZUJhY2t1cFRyZWVJdGVtKHJ1blRpbWVUcmVlSXRlbS5wYXRoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc29sdmVQYXRoKHBhdGg6IHN0cmluZyk6IEFycmF5PG51bWJlcj4ge1xuICAgICAgICByZXR1cm4gcGF0aD8uc3BsaXQoJy4nKS5tYXAoKGluZGV4OiBzdHJpbmcpID0+IHBhcnNlSW50KGluZGV4LCAxMCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UGFyZW50UGF0aHMocGF0aDogc3RyaW5nKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IHBhdGhBcnIgPSBwYXRoLnNwbGl0KCcuJyk7XG4gICAgICAgIGNvbnN0IGhhc1BhcmVudCA9IHBhdGhBcnIubGVuZ3RoID4gMTtcbiAgICAgICAgLy8gU2V0cyB0aGUgaGFzUGFyZW50IElmIHRoZXJlIGlzIGEgcGFyZW50LCBhbmQgcmVtb3ZlcyB0aGUgbGFzdCBlbGVtZW50IGZvcm0gcGF0aEFyci5cbiAgICAgICAgaWYgKGhhc1BhcmVudCkge1xuICAgICAgICAgICAgcGF0aEFyci5wb3AoKTtcbiAgICAgICAgICAgIC8vIENhbGN1bGF0ZXMgcGFyZW50IHBhdGhcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSBwYXRoQXJyLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIC8vIENyZWF0aW5nIG5vZGUgaW5kZXggc2VxdWVuY2UgZi5lIElmIHBhdGggaXMgJzEuMicgaXQgd2lsbCBiZSBbMSwyXVxuICAgICAgICAgICAgY29uc3Qgbm9kZUluZGV4U2VxID0gcGFyZW50UGF0aC5zcGxpdCgnLicpLm1hcCgoaW5kZXhTdHIpID0+IHBhcnNlSW50KGluZGV4U3RyLCAxMCkpO1xuICAgICAgICAgICAgLy8gQ2FsY3VsYXRpbmcgdGhlIG5vZGUgcGF0aHMgYXJyYXkgdG8gYmUgcmUtY2FsY3VsYXRlZCBmcm9tIGJvdHRvbSB0byB0b3BcbiAgICAgICAgICAgIGNvbnN0IG5vZGVQYXRoc1NlcSA9IFtdO1xuICAgICAgICAgICAgbm9kZUluZGV4U2VxLmZvckVhY2goKG5vZGVJbmRleCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBub2RlUGF0aHNTZXFbaW5kZXhdID0gbm9kZUluZGV4U2VxLnNsaWNlKDAsIGluZGV4ICsgMSkuam9pbignLicpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbm9kZVBhdGhzU2VxLnJldmVyc2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2FsY3VsYXRlUnVuVGltZVN0YXRlKHRyZWVJdGVtOiBUcmVlSXRlbU1vZGVsLCBpbmRleDogbnVtYmVyLCBwYXJlbnRQYXRoPzogc3RyaW5nKTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwge1xuICAgICAgICBjb25zdCBydW5UaW1lVHJlZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsID0ge1xuICAgICAgICAgICAgcGF0aDogcGFyZW50UGF0aCA/IHBhcmVudFBhdGggKyAnLicgKyBpbmRleCA6IGluZGV4LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRyZWVJdGVtLmNoaWxkcmVuICYmIHRyZWVJdGVtLmNoaWxkcmVuLmxlbmd0aCA+PSAwKSB7XG4gICAgICAgICAgICBydW5UaW1lVHJlZUl0ZW0uY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICAgIHRyZWVJdGVtLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkLCB0cmVlSXRlbUluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgcnVuVGltZVRyZWVJdGVtLmNoaWxkcmVuW3RyZWVJdGVtSW5kZXhdID0gdGhpcy5jYWxjdWxhdGVSdW5UaW1lU3RhdGUoY2hpbGQsIHRyZWVJdGVtSW5kZXgsIHJ1blRpbWVUcmVlSXRlbS5wYXRoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBydW5UaW1lVHJlZUl0ZW07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaWx0ZXJUcmVlRGF0YShydW5UaW1lVHJlZURhdGE6IFRyZWVEYXRhUnVuVGltZU1vZGVsLCBrZXkgPSAnbGFiZWwnLCBmaWx0ZXJTdHI6IHN0cmluZywgc2hvd0NoaWxkcmVuOiBib29sZWFuLCBzaG93Pzpib29sZWFuKTogVHJlZURhdGFSdW5UaW1lTW9kZWwge1xuICAgICAgICByZXR1cm4gcnVuVGltZVRyZWVEYXRhLmZpbHRlcigocnVuVGltZUl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldERhdGEgPSB0aGlzLmdldFRyZWVJdGVtKHJ1blRpbWVJdGVtLnBhdGgpLm5vZGUudHJlZUNvbnRlbnRCbG9ja1trZXldO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRhcmdldERhdGEgJiYgdGhpcy5ub3JtYWxpemVkU3RyKHRhcmdldERhdGEpPy5pbmNsdWRlcyh0aGlzLm5vcm1hbGl6ZWRTdHIoZmlsdGVyU3RyKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmKHJ1blRpbWVJdGVtPy5jaGlsZHJlbj8ubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIHJ1blRpbWVJdGVtLmNoaWxkcmVuID0gdGhpcy5maWx0ZXJUcmVlRGF0YShydW5UaW1lSXRlbS5jaGlsZHJlbiwga2V5LCBmaWx0ZXJTdHIsIHNob3dDaGlsZHJlbiwgc2hvd0NoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihydW5UaW1lSXRlbSx7IG1hdGNoZWQ6IHRydWUgfSlcbiAgICAgICAgICAgICAgICAvLyBydW5UaW1lSXRlbS5tYXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocnVuVGltZUl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcnVuVGltZUl0ZW0uY2hpbGRyZW4gPSB0aGlzLmZpbHRlclRyZWVEYXRhKHJ1blRpbWVJdGVtLmNoaWxkcmVuLCBrZXksIGZpbHRlclN0ciwgc2hvd0NoaWxkcmVuLCBzaG93KTtcbiAgICAgICAgICAgICAgICBydW5UaW1lSXRlbS5jaGlsZHJlbiA9IHJ1blRpbWVJdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDAgPyBydW5UaW1lSXRlbS5jaGlsZHJlbiA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVuVGltZUl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPiAwIHx8IHNob3c7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBzaG93O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG5vcm1hbGl6ZWRTdHIoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gc3RyXG4gICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRJbml0aWFsU2VsZWN0aW9uKG5vZGVzOiBUcmVlRGF0YVJ1blRpbWVNb2RlbCk6IEFycmF5PFRyZWVJdGVtUnVuVGltZU1vZGVsPiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbjogQXJyYXk8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+ID0gW107XG4gICAgICAgIHRoaXMuc2NhblNlbGVjdGlvbihub2Rlcywgc2VsZWN0aW9uKTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdGlvbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNjYW5TZWxlY3Rpb24obm9kZXM6IFRyZWVEYXRhUnVuVGltZU1vZGVsLCBzZWxlY3Rpb246IEFycmF5PFRyZWVJdGVtUnVuVGltZU1vZGVsPik6IHZvaWQge1xuICAgICAgICBub2Rlcy5mb3JFYWNoKChpdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0VHJlZUl0ZW0oaXRlbS5wYXRoKS5ub2RlPy5zZWxlY3RhYmxlICYmIHRoaXMuZ2V0VHJlZUl0ZW0oaXRlbS5wYXRoKS5ub2RlLmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24ucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpdGVtPy5jaGlsZHJlbj8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhblNlbGVjdGlvbihpdGVtLmNoaWxkcmVuLCBzZWxlY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckluaXRpYWxFeHBhbmQobm9kZXM6IFRyZWVEYXRhUnVuVGltZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIG5vZGVzLmZvckVhY2goKGl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckluaXRpYWxFeHBhbmQoaXRlbS5jaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuZ2V0VHJlZUl0ZW0oaXRlbS5wYXRoKS5ub2RlLmlzRXhwYW5kZWQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5nZXRUcmVlSXRlbShpdGVtLnBhdGgpLm5vZGUuaXNFeHBhbmRlZCAmJiAhdGhpcy5jZGtUcmVlQ29udHJvbC5pc0V4cGFuZGVkKGl0ZW0pKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBhbmRBdChpdGVtLnBhdGgpO1xuICAgICAgICAgICAgICAgIH1lbHNlIGlmKCF0aGlzLmdldFRyZWVJdGVtKGl0ZW0ucGF0aCkubm9kZS5pc0V4cGFuZGVkICYmICB0aGlzLmNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQoaXRlbSkpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmNvbGxhcHNlKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleHBhbmRNYXRjaGVkKG5vZGVzOiBUcmVlRGF0YVJ1blRpbWVNb2RlbCk6IHZvaWQge1xuICAgICAgICBub2Rlcy5mb3JFYWNoKChpdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0ubWF0Y2hlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSB0aGlzLmdldFBhcmVudFBhdGhzKGl0ZW0ucGF0aClbMF07XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudFBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBhcmVudFRyZWVJdGVtID0gdGhpcy5nZXRUcmVlSXRlbShwYXJlbnRQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50VHJlZUl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5wYXJlbnRUcmVlSXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5wYXJlbnRUcmVlSXRlbS5ub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRXhwYW5kZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvLyAgbm9kZS5pc0V4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJoZXJlXCIsIHBhcmVudFRyZWVJdGVtLm5vZGUudHJlZUNvbnRlbnRCbG9jay5sYWJlbCwgcGFyZW50UGF0aCwgaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kQXQocGFyZW50UGF0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5leHBhbmRNYXRjaGVkKGl0ZW0uY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJ1blRpbWVUcmVlSXRlbShwYXRoOiBzdHJpbmcpOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRSdW5UaW1lVHJlZUl0ZW0odGhpcy50cmVlRGF0YVJ1blRpbWUsIHBhdGgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmluZFJ1blRpbWVUcmVlSXRlbSh0cmVlRGF0YVJ1blRpbWU6IFRyZWVEYXRhUnVuVGltZU1vZGVsLCBwYXRoKTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwge1xuICAgICAgICBmb3IgKGNvbnN0IHJ1blRpbWVJdGVtIG9mIHRyZWVEYXRhUnVuVGltZSkge1xuICAgICAgICAgICAgaWYgKHJ1blRpbWVJdGVtLnBhdGggPT09IHBhdGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVuVGltZUl0ZW07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJ1blRpbWVJdGVtPy5jaGlsZHJlbj8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5maW5kUnVuVGltZVRyZWVJdGVtKHJ1blRpbWVJdGVtLmNoaWxkcmVuLCBwYXRoKTtcbiAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJ1blRpbWVCYWNrdXBUcmVlSXRlbShwYXRoOiBzdHJpbmcpOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCB7XG4gICAgICAgIGNvbnN0IGluZGV4QXJyOiBBcnJheTxudW1iZXI+ID0gdGhpcy5yZXNvbHZlUGF0aChwYXRoKTtcbiAgICAgICAgbGV0IG5vZGVBcnIgPSB0aGlzLnRyZWVEYXRhUnVuVGltZUJhY2t1cDtcbiAgICAgICAgbGV0IG5vZGU7XG4gICAgICAgIGlmIChub2RlQXJyICYmIEFycmF5LmlzQXJyYXkobm9kZUFycikpIHtcbiAgICAgICAgICAgIGluZGV4QXJyPy5mb3JFYWNoKChwYXRoSW5kZXg6IG51bWJlciwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBpbmRleEFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVBcnIgPSBub2RlQXJyICYmIG5vZGVBcnJbcGF0aEluZGV4XT8uY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGVBcnJbcGF0aEluZGV4XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENzc0NsYXNzZXMoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICdldWktdHJlZScsXG4gICAgICAgICAgICB0aGlzLmlzTXVsdGlzZWxlY3QgPyAnZXVpLXRyZWUtLW11bHRpc2VsZWN0JyA6ICcnLFxuICAgICAgICAgICAgdGhpcy5faXNNdWx0aUxldmVsID8gJ2V1aS10cmVlLS13aXRoLWNoaWxkcmVuJyA6ICcnLFxuICAgICAgICAgICAgdGhpcy5fc2hvd0xpbmVzID8gJ2V1aS10cmVlLS1zaG93LWxpbmVzJyA6ICcnLFxuICAgICAgICBdXG4gICAgICAgIC5qb2luKCcgJylcbiAgICAgICAgLnRyaW0oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrSWZNdWx0aUxldmVsKHRyZWU6IFRyZWVEYXRhTW9kZWwpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IGlzTXVsdGlMZXZlbCA9IGZhbHNlO1xuICAgICAgICB0cmVlLmZvckVhY2goKGl0ZW06IFRyZWVJdGVtTW9kZWwpID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtPy5jaGlsZHJlbj8ubGVuZ3RoID49IDApIHtcbiAgICAgICAgICAgICAgICBpc011bHRpTGV2ZWwgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGlzTXVsdGlMZXZlbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrSWZDdXJyZW50U2Nyb2xsYWJsZShzY3JvbGxlZDogQ2RrU2Nyb2xsYWJsZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gc2Nyb2xsZWQuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQgPT09IHRoaXMuY2RrU2Nyb2xsYWJsZVJlZi5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudDtcbiAgICB9XG59XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIFJvdXRlck1vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICAgICAgRXVpSW5wdXRDaGVja2JveE1vZHVsZSxcbiAgICAgICAgQ2RrVHJlZU1vZHVsZSxcbiAgICAgICAgRXVpQnV0dG9uTW9kdWxlLFxuICAgICAgICBFdWlJY29uTW9kdWxlLFxuICAgICAgICBFdWlMYWJlbE1vZHVsZSxcbiAgICAgICAgRXVpQmFkZ2VNb2R1bGUsXG4gICAgICAgIEV1aUNoaXBNb2R1bGUsXG4gICAgICAgIEV1aURyb3Bkb3duTW9kdWxlLFxuICAgICAgICBTY3JvbGxpbmdNb2R1bGUsXG4gICAgXSxcbiAgICBkZWNsYXJhdGlvbnM6IFtFdWlUcmVlQ29tcG9uZW50XSxcbiAgICBleHBvcnRzOiBbRXVpVHJlZUNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIEV1aVRyZWVNb2R1bGUge31cbiIsIjxkaXYgY2xhc3M9XCJldWktdWwtcmVwIGV1aS10cmVlX193cmFwcGVyXCIgY2RrU2Nyb2xsYWJsZSAjY2RrU2Nyb2xsYWJsZVJlZj5cbiAgICA8Y2RrLXRyZWVcbiAgICAgICAgI3RyZWVDb21wb25lbnRJbnN0YW5jZVxuICAgICAgICBbZGF0YVNvdXJjZV09XCJjZGtBcnJheURhdGFTb3VyY2VcIlxuICAgICAgICBbdHJlZUNvbnRyb2xdPVwiY2RrVHJlZUNvbnRyb2xcIlxuICAgICAgICBbdHJhY2tCeV09XCJ0cmFja0J5XCJcbiAgICAgICAgKm5nSWY9XCJyZW5kZXJUcmVlXCJcbiAgICAgICAgY2xhc3M9XCJldWktY2RrLXRyZWVcIj5cbiAgICAgICAgPCEtLSBUaGVyZSBhcmUgdHdvIHN0YXRlcyBvZiBnZW5lcmljIGNkay1uZXN0ZWQtdHJlZS1ub2RlIGRlY2xhcmF0aW9ucy5cbiAgICAgICAgRmlyc3Qgb25lIGlzIHdpdGhvdXQgY2hpbGQuIE5vIHN1YiByZW5kZXJpbmcuXG4gICAgICAgIC0tPlxuICAgICAgICA8Y2RrLW5lc3RlZC10cmVlLW5vZGUgKmNka1RyZWVOb2RlRGVmPVwibGV0IHRyZWVSdW5UaW1lSXRlbU1vZGVsXCIgY2xhc3M9XCJldWktY2RrLW5lc3RlZC10cmVlLW5vZGVcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0cmVlUnVuVGltZUl0ZW1Nb2RlbFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJldWktbGktcmVwIGV1aS10cmVlLW5vZGVcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktdHJlZS1ub2RlLS1maXJzdF09XCJ0cmVlUnVuVGltZUl0ZW1Nb2RlbD8ucGF0aCA9PT0gJzAnXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZXVpLXRyZWUtbm9kZS0tbGFzdF09XCJ0cmVlUnVuVGltZUl0ZW1Nb2RlbC5sYXN0XCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cInt7XG4gICAgICAgICAgICAgICAgICAgIGdldFRyZWVJdGVtKHRyZWVSdW5UaW1lSXRlbU1vZGVsPy5wYXRoKT8ubm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udG9vbHRpcExhYmVsIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRUcmVlSXRlbSh0cmVlUnVuVGltZUl0ZW1Nb2RlbD8ucGF0aCk/Lm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsXG4gICAgICAgICAgICAgICAgfX1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLXRyZWUtbm9kZS13cmFwcGVyXCJcbiAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbk5vZGVDbGljayh0cmVlUnVuVGltZUl0ZW1Nb2RlbClcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV1aS10cmVlLW5vZGUtd3JhcHBlcl9fY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tXG4gICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJzIG5vZGUgaW4gZGVmYXVsdCBvciBwcm92aWRlZCB0ZW1wbGF0ZSdzIGNvbnRleHQuXG4gICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0ZXMgb25TZWxlY3Qgd2l0aCBvblNlbGVjdEZuIGZvciBkZXZlbG9wZXJzIHRvIHNlbmQgdGhlIGV2ZW50cyBmcm9tIHRoZWlyIGN1c3RvbSBjaGVjayBldmVudHMuXG4gICAgICAgICAgICAgICAgICAgICAgICBQcm92aWRlcyBpZCB0byBiZSB1c2VkIG9uIGdlbmVyaWMgdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5vZGVUZW1wbGF0ZVJlZiB8fCBub2RlVGVtcGxhdGVEZWZhdWx0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGdldFRyZWVJdGVtKHRyZWVSdW5UaW1lSXRlbU1vZGVsPy5wYXRoKT8ubm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3Q6IG9uU2VsZWN0Rm4odHJlZVJ1blRpbWVJdGVtTW9kZWwucGF0aCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB1aWQgKyB0cmVlUnVuVGltZUl0ZW1Nb2RlbC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiB0cmVlUnVuVGltZUl0ZW1Nb2RlbC5wYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvY2RrLW5lc3RlZC10cmVlLW5vZGU+XG4gICAgICAgIDwhLS0gVGhpcyBpcyB0aGUgdHJlZSBub2RlIHRlbXBsYXRlIGZvciBleHBhbmRhYmxlIG5vZGVzIC0tPlxuICAgICAgICA8Y2RrLW5lc3RlZC10cmVlLW5vZGVcbiAgICAgICAgICAgICpjZGtUcmVlTm9kZURlZj1cImxldCB0cmVlUnVuVGltZUl0ZW1Nb2RlbDsgd2hlbjogaGFzQ2hpbGRcIlxuICAgICAgICAgICAgY2xhc3M9XCJldWktY2RrLW5lc3RlZC10cmVlLW5vZGUgZXVpLWNkay1uZXN0ZWQtdHJlZS1ub2RlLS13aXRoLWNoaWxkXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJldWktbGktcmVwIGV1aS10cmVlLW5vZGUgZXVpLXRyZWUtbm9kZS0td2l0aC1jaGlsZFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmV1aS10cmVlLW5vZGUtLWZpcnN0XT1cInRyZWVSdW5UaW1lSXRlbU1vZGVsPy5wYXRoID09PSAnMCdcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktdHJlZS1ub2RlLS1sYXN0XT1cInRyZWVSdW5UaW1lSXRlbU1vZGVsLmxhc3RcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwidHJlZVJ1blRpbWVJdGVtTW9kZWxcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3tcbiAgICAgICAgICAgICAgICAgICAgZ2V0VHJlZUl0ZW0odHJlZVJ1blRpbWVJdGVtTW9kZWw/LnBhdGgpPy5ub2RlPy50cmVlQ29udGVudEJsb2NrPy50b29sdGlwTGFiZWwgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFRyZWVJdGVtKHRyZWVSdW5UaW1lSXRlbU1vZGVsPy5wYXRoKT8ubm9kZT8udHJlZUNvbnRlbnRCbG9jaz8ubGFiZWxcbiAgICAgICAgICAgICAgICB9fVwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdHJlZS1ub2RlLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLUhlcmUgd3JhcHMgdGhlIG5vZGUsIGFuZCBsaXN0ZW4gZm9yIG5vZGUgY2xpY2tzLi0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJvbk5vZGVDbGljayh0cmVlUnVuVGltZUl0ZW1Nb2RlbClcIiBjbGFzcz1cImV1aS10cmVlLW5vZGUtd3JhcHBlcl9fY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEV4cGFuZC9jb2xsYXBzZSBhY3Rpb24gYnV0dG9uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1aUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1aUljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldWlCYXNpY0J1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1aVJvdW5kZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldWlTaXplU1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1RvZ2dsZSAnICsgZ2V0VHJlZUl0ZW0odHJlZVJ1blRpbWVJdGVtTW9kZWw/LnBhdGgpPy5ub2RlPy50cmVlQ29udGVudEJsb2NrPy5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTm9kZVRvZ2dsZSh0cmVlUnVuVGltZUl0ZW1Nb2RlbClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNka1RyZWVOb2RlVG9nZ2xlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdHJlZS1ub2RlX19idXR0b25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldWlJY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQodHJlZVJ1blRpbWVJdGVtTW9kZWwpICYmIGNvbGxhcHNlZEljb25DbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uQ2xhc3NdPVwiY29sbGFwc2VkSWNvbkNsYXNzXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1aUljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjZGtUcmVlQ29udHJvbC5pc0V4cGFuZGVkKHRyZWVSdW5UaW1lSXRlbU1vZGVsKSAmJiBleHBhbmRlZEljb25DbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uQ2xhc3NdPVwiZXhwYW5kZWRJY29uQ2xhc3NcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2Z1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFjZGtUcmVlQ29udHJvbC5pc0V4cGFuZGVkKHRyZWVSdW5UaW1lSXRlbU1vZGVsKSAmJiAhY29sbGFwc2VkSWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiZXhwYW5kZWRTdmdJY29uQ2xhc3NcIj48L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2RrVHJlZUNvbnRyb2wuaXNFeHBhbmRlZCh0cmVlUnVuVGltZUl0ZW1Nb2RlbCkgJiYgIWV4cGFuZGVkSWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiY29sbGFwc2VkU3ZnSWNvbkNsYXNzXCI+PC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlcnMgbm9kZSBpbiBkZWZhdWx0IG9yIHByb3ZpZGVkIHRlbXBsYXRlJ3MgY29udGV4dC5cbiAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlcyBvblNlbGVjdCB3aXRoIG9uU2VsZWN0Rm4gZm9yIGRldmVsb3BlcnMgdG8gc2VuZCB0aGUgZXZlbnRzIGZyb20gdGhlaXIgY3VzdG9tIGNoZWNrIGV2ZW50cy5cbiAgICAgICAgICAgICAgICAgICAgICAgIFByb3ZpZGVzIGlkIHRvIGJlIHVzZWQgb24gZ2VuZXJpYyB0ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZVRlbXBsYXRlUmVmIHx8IG5vZGVUZW1wbGF0ZURlZmF1bHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogZ2V0VHJlZUl0ZW0odHJlZVJ1blRpbWVJdGVtTW9kZWwucGF0aCk/Lm5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0OiBvblNlbGVjdEZuKHRyZWVSdW5UaW1lSXRlbU1vZGVsLnBhdGgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogdWlkICsgdHJlZVJ1blRpbWVJdGVtTW9kZWwucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogdHJlZVJ1blRpbWVJdGVtTW9kZWwucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IGdldFRyZWVJdGVtKHRyZWVSdW5UaW1lSXRlbU1vZGVsPy5wYXRoKT8uY2hpbGRyZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLXVzZXMgY2RrVHJlZU5vZGVPdXRsZXQgdG8gcmVuZGVyIGNoaWxkcmVuIG5vZGVzLCBDZGtUcmVlQ29udHJvbCBpcyB1c2VkIHRvIGNvbnRyb2wgaXNFeHBhbmRlZCBzdGF0ZS4tLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLXVsLXJlcCBldWktdHJlZS1ub2RlXCIgcm9sZT1cImdyb3VwXCIgKm5nSWY9XCJjZGtUcmVlQ29udHJvbC5pc0V4cGFuZGVkKHRyZWVSdW5UaW1lSXRlbU1vZGVsKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIGNka1RyZWVOb2RlT3V0bGV0PjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvY2RrLW5lc3RlZC10cmVlLW5vZGU+XG4gICAgPC9jZGstdHJlZT5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI25vZGVUZW1wbGF0ZURlZmF1bHQgbGV0LW5vZGUgbGV0LW9uU2VsZWN0PVwib25TZWxlY3RcIiBsZXQtaWQ9XCJpZFwiIGxldC1wYXRoPVwicGF0aFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJldWktdHJlZS1ub2RlLXdyYXBwZXJfX2NvbnRhaW5lci1sZWZ0XCIgW2NsYXNzLmV1aS10cmVlLW5vZGUtd3JhcHBlcl9fY29udGFpbmVyLWxlZnQtLXNlbGVjdGVkXT1cIm5vZGU/LmlzU2VsZWN0ZWRcIj5cbiAgICAgICAgICAgIDwhLS1pbnB1dCBjaGVja2JveCBhcmVhLS0+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBldWlJbnB1dENoZWNrQm94XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJub2RlICYmIG5vZGUuc2VsZWN0YWJsZVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICBpZD1cInt7IGlkIH19XCJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCIhIW5vZGU/LmlzU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cIiEhbm9kZT8uaXNJbmRldGVybWluYXRlXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uU2VsZWN0KCRldmVudClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLXUtbXItbVwiIC8+XG5cbiAgICAgICAgICAgIDwhLS1pY29uIGFyZWEtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlPy50cmVlQ29udGVudEJsb2NrPy5pY29uQ2xhc3NcIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWljb25cbiAgICAgICAgICAgICAgICAgICAgW2V1aVZhcmlhbnRdPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8uaWNvblR5cGVDbGFzcyB8fCAncHJpbWFyeSdcIlxuICAgICAgICAgICAgICAgICAgICBpY29uQ2xhc3M9XCJ7eyBub2RlPy50cmVlQ29udGVudEJsb2NrPy5pY29uQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICBldWlTaXplU1xuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS11LW1yLXhzXCI+XG4gICAgICAgICAgICAgICAgPC9ldWktaWNvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/Lmljb25TdmdOYW1lXCI+XG4gICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2Z1xuICAgICAgICAgICAgICAgICAgICBpY29uPVwie3sgbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8uaWNvblN2Z05hbWUgfX1cIlxuICAgICAgICAgICAgICAgICAgICBmaWxsQ29sb3I9XCJ7eyBub2RlPy50cmVlQ29udGVudEJsb2NrPy5pY29uVHlwZUNsYXNzIHx8ICdncmV5LTEwMCcgfX1cIlxuICAgICAgICAgICAgICAgICAgICBzaXplPVwic1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLXUtbXIteHNcIj5cbiAgICAgICAgICAgICAgICA8L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8IS0tY2hpcHMgYXJlYS0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmNoaXBzXCI+XG4gICAgICAgICAgICAgICAgPGV1aS1jaGlwXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjaGlwIG9mIG5vZGUudHJlZUNvbnRlbnRCbG9jay5jaGlwc1wiXG4gICAgICAgICAgICAgICAgICAgIGV1aVNpemVYU1xuICAgICAgICAgICAgICAgICAgICBbZXVpVmFyaWFudF09XCJjaGlwLnR5cGVDbGFzcyB8fCAnc2Vjb25kYXJ5J1wiXG4gICAgICAgICAgICAgICAgICAgIFtldWlPdXRsaW5lXT1cImNoaXAuaXNPdXRsaW5lXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktY2hpcC0tcm91bmRlZCBldWktdS1tYi1ub25lIGV1aS11LW1yLXhzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGV1aUxhYmVsPnt7IGNoaXAubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9ldWktY2hpcD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8IS0tYmFkZ2UgKHR5cGVMYWJlbCAmIHR5cGVDbGFzcykgYXJlYS0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnR5cGVMYWJlbFwiIFtuZ1N3aXRjaF09XCJub2RlPy50cmVlQ29udGVudEJsb2NrPy50eXBlQ2xhc3NcIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWJhZGdlIGV1aVNpemVNIFtldWlWYXJpYW50XT1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnR5cGVDbGFzcyB8fCAncHJpbWFyeSdcIiBjbGFzcz1cImV1aS11LWZsZXgtbm8tc2hyaW5rIGV1aS11LW1yLXhzXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnR5cGVMYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvZXVpLWJhZGdlPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS1sYWJlbCBhcmVhLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJldWktdHJlZS1ub2RlLXdyYXBwZXJfX2NvbnRhaW5lci1taWRkbGVcIj5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIW5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnVybCAmJiAhbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udXJsRXh0ZXJuYWxcIlxuICAgICAgICAgICAgICAgIGV1aUxhYmVsXG4gICAgICAgICAgICAgICAgZm9yPVwie3sgaWQgfX1cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLXUtdGV4dC10cnVuY2F0ZSBldWktdS1wLTJ4c1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmV1aS1sYWJlbC0tc2VsZWN0ZWRdPVwiXG4gICAgICAgICAgICAgICAgICAgIGhpZ2hsaWdodFBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZ2V0UnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKHBhdGgpPy5zZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSA9PT0gJ2luZGV0ZXJtaW5hdGUnIHx8IG5vZGU/LmlzU2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbm9kZT8uaXNTZWxlY3RlZFxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmV1aS11LWN1cnNvci1wb2ludGVyXT1cIm5vZGU/LnNlbGVjdGFibGVcIj5cbiAgICAgICAgICAgICAgICB7eyBhdXRvVHJhbnNsYXRlID8gKG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsIHwgdHJhbnNsYXRlKSA6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsIH19XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udXJsXCIgZXVpTGFiZWwgZm9yPVwie3sgaWQgfX1cIiBjbGFzcz1cImV1aS11LXRleHQtdHJ1bmNhdGUgZXVpLXUtcC0yeHNcIj5cbiAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS11LXRleHQtbGlua1wiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktdS10ZXh0LWxpbmstc3RhbmRhbG9uZV09XCIhc2hvd1VuZGVybGluZWRMaW5rc1wiXG4gICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnVybFwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBhdXRvVHJhbnNsYXRlID8gKG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsIHwgdHJhbnNsYXRlKSA6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnVybEV4dGVybmFsXCIgZXVpTGFiZWwgZm9yPVwie3sgaWQgfX1cIiBjbGFzcz1cImV1aS11LXRleHQtdHJ1bmNhdGUgZXVpLXUtcC0yeHNcIj5cbiAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS11LXRleHQtbGluay1leHRlcm5hbFwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktdS10ZXh0LWxpbmstZXh0ZXJuYWwtc3RhbmRhbG9uZV09XCIhc2hvd1VuZGVybGluZWRMaW5rc1wiXG4gICAgICAgICAgICAgICAgICAgIGhyZWY9XCJ7eyBub2RlPy50cmVlQ29udGVudEJsb2NrPy51cmxFeHRlcm5hbCB9fVwiXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldD1cInt7IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnVybEV4dGVybmFsVGFyZ2V0IHx8ICdibGFuaycgfX1cIj5cbiAgICAgICAgICAgICAgICAgICAge3sgYXV0b1RyYW5zbGF0ZSA/IChub2RlPy50cmVlQ29udGVudEJsb2NrPy5sYWJlbCB8IHRyYW5zbGF0ZSkgOiBub2RlPy50cmVlQ29udGVudEJsb2NrPy5sYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCJub2RlPy50cmVlQ29udGVudEJsb2NrPy5yaWdodENvbnRlbnRcIiBjbGFzcz1cImV1aS10cmVlLW5vZGUtd3JhcHBlcl9fY29udGFpbmVyLXJpZ2h0XCI+XG4gICAgICAgICAgICA8IS0tYmFkZ2VzIGFyZWEtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJhZGdlIG9mIG5vZGUudHJlZUNvbnRlbnRCbG9jay5yaWdodENvbnRlbnQ/LmJhZGdlc1wiPlxuICAgICAgICAgICAgICAgIDxldWktYmFkZ2UgZXVpU2l6ZU0gZXVpT3V0bGluZSBbZXVpVmFyaWFudF09XCJiYWRnZS50eXBlQ2xhc3MgfHwgJ3NlY29uZGFyeSdcIiBjbGFzcz1cImV1aS11LW1sLXhzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGV1aUxhYmVsPnt7IGJhZGdlLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZXVpLWJhZGdlPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS1jaGlwcyBhcmVhLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjaGlwIG9mIG5vZGUudHJlZUNvbnRlbnRCbG9jay5yaWdodENvbnRlbnQ/LmNoaXBzXCI+XG4gICAgICAgICAgICAgICAgPGV1aS1jaGlwXG4gICAgICAgICAgICAgICAgICAgIGV1aVNpemVYU1xuICAgICAgICAgICAgICAgICAgICBbZXVpVmFyaWFudF09XCJjaGlwLnR5cGVDbGFzcyB8fCAnc2Vjb25kYXJ5J1wiXG4gICAgICAgICAgICAgICAgICAgIFtldWlPdXRsaW5lXT1cImNoaXAuaXNPdXRsaW5lXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktY2hpcC0tcm91bmRlZCBldWktdS1tYi1ub25lIGV1aS11LW1sLXhzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGV1aUxhYmVsPnt7IGNoaXAubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9ldWktY2hpcD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8IS0tQ29udGV4dCBtZW51LS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZS50cmVlQ29udGVudEJsb2NrLnJpZ2h0Q29udGVudD8uY29udGV4dE1lbnVNZXRhRGF0YSAmJiByaWdodENvbnRleHRNZW51VGVtcGxhdGVSZWZcIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWRyb3Bkb3duIGNsYXNzPVwiZXVpLXUtbWwteHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBldWlCdXR0b24gZXVpU2l6ZVMgZXVpUm91bmRlZCBldWlJY29uQnV0dG9uIGV1aUJhc2ljQnV0dG9uIGV1aVNlY29uZGFyeSBbYXR0ci5hcmlhLWxhYmVsXT1cIidPcHRpb25zIG1lbnUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnIGljb249XCJldWktZWxsaXBzaXMtdmVydGljYWxcIj48L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxldWktZHJvcGRvd24tY29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInJpZ2h0Q29udGV4dE1lbnVUZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBub2RlPy50cmVlQ29udGVudEJsb2NrPy5yaWdodENvbnRlbnQ/LmNvbnRleHRNZW51TWV0YURhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBub2RlPy50cmVlQ29udGVudEJsb2NrPy5yaWdodENvbnRlbnQ/LmNvbnRleHRNZW51TWV0YURhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L2V1aS1kcm9wZG93bi1jb250ZW50PlxuICAgICAgICAgICAgICAgIDwvZXVpLWRyb3Bkb3duPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS1tZXRhZGF0YSwgdXNlcyB0aGUgaGVscCBvZiBuZyB0ZW1wbGF0ZSB0byBnZW5lcmF0ZSBkeW5hbWljIGV4cGFuZCB2YXJpYWJsZSB3aXRob3V0IGhhbmRsaW5nIHN0YXRlIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdJZj1cIm5vZGUudHJlZUNvbnRlbnRCbG9jaz8ubWV0YWRhdGEgJiYgbm9kZUNvbnRlbnRNZXRhZGF0YVRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5vZGVDb250ZW50TWV0YWRhdGFDb250YWluZXJcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IHsgZXhwYW5kZWQ6IGZhbHNlIH1cbiAgICAgICAgICAgIH1cIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9kZUNvbnRlbnRNZXRhZGF0YUNvbnRhaW5lciBsZXQtbWV0YURhdGFDb250YWluZXI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgZXVpQnV0dG9uXG4gICAgICAgICAgICAgICAgZXVpQmFzaWNCdXR0b25cbiAgICAgICAgICAgICAgICBldWlJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgZXVpUm91bmRlZFxuICAgICAgICAgICAgICAgIGV1aVNpemVTXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cImV4cGFuZCBjb2xsYXBzZSB0cmVlIGl0ZW1cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJtZXRhRGF0YUNvbnRhaW5lci5leHBhbmRlZCA9ICFtZXRhRGF0YUNvbnRhaW5lci5leHBhbmRlZFwiPlxuICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmcgW2ljb25dPVwibWV0YURhdGFDb250YWluZXIuZXhwYW5kZWQgPyAnZXVpLWNoZXZyb24tZG93bicgOiAnZXVpLWNoZXZyb24tZm9yd2FyZCdcIj48L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm1ldGFEYXRhQ29udGFpbmVyLmV4cGFuZGVkXCIgY2xhc3M9XCJldWktdHJlZS1ub2RlX19tZXRhY29udGVudFwiPlxuICAgICAgICAgICAgICAgIDwhLS1wYXNzaW5nIG1ldGFkYXRhIG9mIHRoZSBub2RlIGNvbnRlbnQgdG8gcHJvdmlkZWQgdGVtcGxhdGUtcmVmOm5vZGVDb250ZW50TWV0YWRhdGFUZW1wbGF0ZVJlZi0tPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJub2RlQ29udGVudE1ldGFkYXRhVGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBub2RlPy50cmVlQ29udGVudEJsb2NrPy5tZXRhZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBub2RlPy50cmVlQ29udGVudEJsb2NrPy5tZXRhZGF0YVxuICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==