@churchillliving/se-ui-toolkit 6.53.729 → 6.53.730

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.
@@ -47,39 +47,41 @@ export class GridComponent {
47
47
  * Scrolls to selected element if selection found
48
48
  */
49
49
  set rows(data) {
50
- this.loading = false;
51
- if (!this.isCheckBoxChangeEventCalled) {
52
- if (data && data.length > 0) {
53
- if (!this.dataKey) {
54
- this.dataKey = 'temp_id';
55
- }
56
- if (data?.length > 40 && !this.pagination && !this.gridService?.rowUpdate) {
57
- const rowsData = this.gridService.setDataFields(data, this.dataKey);
58
- const initializeData = [...rowsData];
59
- this.rowsData = initializeData.splice(0, 40);
60
- setTimeout(() => {
61
- this.rowsData = rowsData;
62
- }, 100);
63
- }
64
- else if (!this.gridService?.rowUpdate) {
65
- this.rowsData = this.gridService.setDataFields(data, this.dataKey);
66
- }
67
- else if (this.gridService.rowUpdate) {
68
- this.rowsData = data;
50
+ if (!this.rowUpdateChange) {
51
+ this.loading = false;
52
+ if (!this.isCheckBoxChangeEventCalled) {
53
+ if (data && data.length > 0) {
54
+ if (!this.dataKey) {
55
+ this.dataKey = 'temp_id';
56
+ }
57
+ if (data?.length > 40 && !this.pagination && !this.gridService?.rowUpdate) {
58
+ const rowsData = this.gridService.setDataFields(data, this.dataKey);
59
+ const initializeData = [...rowsData];
60
+ this.rowsData = initializeData.splice(0, 40);
61
+ setTimeout(() => {
62
+ this.rowsData = rowsData;
63
+ }, 100);
64
+ }
65
+ else if (!this.gridService?.rowUpdate) {
66
+ this.rowsData = this.gridService.setDataFields(data, this.dataKey);
67
+ }
68
+ else if (this.gridService.rowUpdate) {
69
+ this.rowsData = data;
70
+ }
71
+ this.editRowsRecords = {};
72
+ if (this.selectedRows) {
73
+ setTimeout(() => {
74
+ const selectedElementRef = this.gridRow.find((x) => x.nativeElement.id === this.selectedRows[this.dataKey]);
75
+ selectedElementRef &&
76
+ selectedElementRef.nativeElement.scrollIntoView({ behavior: 'smooth' });
77
+ }, 0);
78
+ }
79
+ //manipulate checkbox string value to true and false.
80
+ this.changeCheckboxStringValue();
69
81
  }
70
- this.editRowsRecords = {};
71
- if (this.selectedRows) {
72
- setTimeout(() => {
73
- const selectedElementRef = this.gridRow.find((x) => x.nativeElement.id === this.selectedRows[this.dataKey]);
74
- selectedElementRef &&
75
- selectedElementRef.nativeElement.scrollIntoView({ behavior: 'smooth' });
76
- }, 0);
82
+ else {
83
+ this.rowsData = [];
77
84
  }
78
- //manipulate checkbox string value to true and false.
79
- this.changeCheckboxStringValue();
80
- }
81
- else {
82
- this.rowsData = [];
83
85
  }
84
86
  }
85
87
  }
@@ -196,6 +198,7 @@ export class GridComponent {
196
198
  this.setDropdowndataValue = true;
197
199
  this.showFilterbtn = false;
198
200
  this.userSetting = {};
201
+ this.rowUpdateChange = false;
199
202
  //apply Add/Delete/Edit prop for the grid permission
200
203
  this.addRowPermission = true;
201
204
  this.deleteRowPermission = true;
@@ -1361,6 +1364,7 @@ export class GridComponent {
1361
1364
  this.dropdownInput = true;
1362
1365
  this.rowClickData = row;
1363
1366
  this.inEditMode = true;
1367
+ this.rowUpdateChange = false;
1364
1368
  this.cancelAllRecords = false;
1365
1369
  this.saveAllRecord = false;
1366
1370
  this.sortDisabled = true;
@@ -1714,6 +1718,7 @@ export class GridComponent {
1714
1718
  this.sortDisabled = false;
1715
1719
  }
1716
1720
  this.addNewRowCheck = false;
1721
+ this.rowUpdateChange = false;
1717
1722
  this.inlineRowCancel.emit(row);
1718
1723
  setTimeout(() => {
1719
1724
  if (rowInEditMode && this.setGridRefreshTime) {
@@ -1755,6 +1760,7 @@ export class GridComponent {
1755
1760
  }
1756
1761
  }
1757
1762
  this.generateRowsDataCopy = false;
1763
+ this.rowUpdateChange = false;
1758
1764
  this.rowsChange.emit(this.rowsData);
1759
1765
  this.onGridRowActions.emit(gridRowsData);
1760
1766
  }
@@ -2227,6 +2233,7 @@ export class GridComponent {
2227
2233
  if (valueChange) {
2228
2234
  this.browserCloseEvent(true);
2229
2235
  this.generateRowsDataCopy = false;
2236
+ this.rowUpdateChange = true;
2230
2237
  setTimeout(() => {
2231
2238
  this.rowsChange.emit(this.rowsData);
2232
2239
  }, 250);
@@ -2302,6 +2309,7 @@ export class GridComponent {
2302
2309
  }
2303
2310
  applyEnterEvent(filter, event, column) {
2304
2311
  this.gridService.applyFilterEvent = true;
2312
+ this.rowUpdateChange = false;
2305
2313
  this.autoLoadData = true;
2306
2314
  this.onApplyFilter.emit();
2307
2315
  this.filterObj(column);
@@ -2437,6 +2445,7 @@ export class GridComponent {
2437
2445
  this.displayFieldDropdownValue(column, row);
2438
2446
  this.onClearValue(column, row);
2439
2447
  this.browserCloseEvent(true);
2448
+ this.rowUpdateChange = true;
2440
2449
  this.rowsChange.emit(this.rowsData);
2441
2450
  if (column.onChange) {
2442
2451
  column.onChange(row);
@@ -2457,6 +2466,7 @@ export class GridComponent {
2457
2466
  }
2458
2467
  this.gridService.rowUpdate = false;
2459
2468
  this.generateRowsDataCopy = false;
2469
+ this.rowUpdateChange = true;
2460
2470
  this.rowsChange.emit(this.rowsData);
2461
2471
  }
2462
2472
  // set dropdown displayField value base on optionLabel & optionValue.
@@ -2591,6 +2601,7 @@ export class GridComponent {
2591
2601
  applyGirdFilterBtn() {
2592
2602
  this.isCheckBoxChangeEventCalled = false;
2593
2603
  this.gridService.rowUpdate = false;
2604
+ this.rowUpdateChange = false;
2594
2605
  let filterInDialog = document.getElementsByClassName('p-dialog');
2595
2606
  let globalFilterApplyBtn = document.getElementById('searchGlobalFilterBtn');
2596
2607
  if (filterInDialog && filterInDialog.length > 0) {
@@ -2893,4 +2904,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
2893
2904
  type: HostListener,
2894
2905
  args: ['window:beforeunload', ['$event']]
2895
2906
  }] } });
2896
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2dyaWQvZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2dyaWQvZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUdaLFFBQVEsRUFFUixZQUFZLEVBR1osU0FBUyxFQUNULFlBQVksRUFFWixnQkFBZ0IsR0FFakIsTUFBTSxlQUFlLENBQUM7QUFRdkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFMUIsT0FBTyxFQVNMLGtCQUFrQixFQUNsQixlQUFlLEVBQ2Ysa0JBQWtCLEVBRWxCLGNBQWMsRUFDZCxlQUFlLEVBR2YsY0FBYyxFQUNkLHFCQUFxQixHQUV0QixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxlQUFlLEVBQWUsTUFBTSxpQ0FBaUMsQ0FBQztBQUcvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFbE0sT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXpELE9BQU8sRUFBZ0IsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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TUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEtBQUssVUFBVSxJQUFJLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7NENBQ2hHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnREFDdEksR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDOzRDQUNySCxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsV0FBVztvQ0FDcEosQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQzt3Q0FDbEYsQ0FBQzs0Q0FDRCxNQUFNLENBQUMsV0FBVztnREFD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Q0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtZQUN0TCxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7WUFDL0wsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1lBQy9MLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxJQUFJLENB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QixNQUFNO2dCQU1QLFlBQVk7c0JBRFgsTUFBTTtnQkFJRyxXQUFXO3NCQUFwQixNQUFNO2dCQUdHLGVBQWU7c0JBQXhCLE1BQU07Z0JBR0csV0FBVztzQkFBcEIsTUFBTTtnQkFHRyxRQUFRO3NCQUFqQixNQUFNO2dCQUdHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFHRSxZQUFZO3NCQUFwQixLQUFLO2dCQUdHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBR0csV0FBVztzQkFBbkIsS0FBSztnQkFFRyxXQUFXO3NCQUFuQixLQUFLO2dCQUdJLGFBQWE7c0JBQXRCLE1BQU07Z0JBR0csWUFBWTtzQkFBckIsTUFBTTtnQkFxRFAsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLHFCQUFxQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIE9uQ2hhbmdlcyxcbiAgT3B0aW9uYWwsXG4gIEVsZW1lbnRSZWYsXG4gIFZpZXdDaGlsZHJlbixcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIEhvc3RMaXN0ZW5lcixcbiAgT25EZXN0cm95LFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBDb21wb25lbnRSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7XG4gIER5bmFtaWNEaWFsb2dSZWYsXG4gIER5bmFtaWNEaWFsb2dDb25maWcsXG4gIERpYWxvZ1NlcnZpY2UsXG4gIER5bmFtaWNEaWFsb2dDb21wb25lbnQsXG59IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XG5pbXBvcnQgeyBzYXZlQXMgfSBmcm9tICdmaWxlLXNhdmVyJztcbmltcG9ydCBqc1BERiBmcm9tICdqc3BkZic7XG5pbXBvcnQgeyBHcmlkU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2dyaWQuc2VydmljZSc7XG5pbXBvcnQge1xuICBJR3JpZENvbHVtbixcbiAgSUdyaWRTb3J0LFxuICBJR3JpZFNlcnZlclNpZGVFdmVudCxcbiAgSUdyaWRQYWdpbmF0aW9uRXZlbnQsXG4gIElHbG9iYWxGaWx0ZXIsXG4gIElHcmlkRmlsdGVyLFxuICBJR3JpZENvbHVtbkFjdGlvbixcbiAgSUdyaWRSb3dBY3Rpb24sXG4gIEVHcmlkU2VsZWN0aW9uVHlwZSxcbiAgRUdyaWRDb2x1bW5UeXBlLFxuICBFR3JpZFNvcnREaXJlY3Rpb24sXG4gIElHcmlkRGF0YUV4cG9ydCxcbiAgRUdyaWRBZ2dyZWdhdGUsXG4gIEVHcmlkRm9ybWF0VHlwZSxcbiAgSUdyaWRGaWx0ZXJJbmZvLFxuICBFR3JpZFJvd0FjdGlvbixcbiAgRUdyaWRWYWxpZGF0b3IsXG4gIEdyaWRGaWx0ZXJDb250cm9sVHlwZSxcbiAgdXNlclNldHRpbmcsXG59IGZyb20gJy4uLy4uLy4uL21vZGVscy9ncmlkLm1vZGVsJztcbmltcG9ydCB7IEVQZXJtaXNzaW9uVHlwZSwgSVBlcm1pc3Npb24gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdXNlci1pbmZvLm1vZGVsJztcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGhlbnRpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYWxlcnQuc2VydmljZSc7XG5pbXBvcnQgeyBJZnJhbWVDb21wb25lbnQgfSBmcm9tICcuLi9pZnJhbWUvaWZyYW1lLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBXb3JrU2hlZXQgfSBmcm9tICd4bHN4JztcbmltcG9ydCB7IERhdGVQaXBlLCBEZWNpbWFsUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBhdXRvU2V0TG9va3VwRGF0YSwgY2hhbmdlQ29sdW1uc1N0YXRlLCBjdXJyZW50VXJsLCBkcmFnZ2FibGVEaWFsb2csIG9iakNvbnZlcnRUb0xvd2VyLCBzZXREaWFsb2dSZXNwb25zZSwgc2V0TWludXRlc0ludGVydmFsLCBzZXRUaW1lSW5EYXRlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0aWVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGFibGUgfSBmcm9tICdwcmltZW5nL3RhYmxlJztcbmltcG9ydCB7IEVGb3JtYXRUeXBlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2Zvcm0ubW9kZWwnO1xuaW1wb3J0IHsgUGFnZUxvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wYWdlLWxvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgaW50ZXJ2YWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBIeXBlcmxpbmtTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaHlwZXJsaW5rLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9mb3JtLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZS1ncmlkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dyaWQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ncmlkLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEdyaWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgndmlld0NvbnRhaW5lclJlZicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiB0cnVlIH0pXG4gIHB1YmxpYyBwYW5lbE92ZXJsYXlWaWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmXG4gIHB1YmxpYyBjb21wb25lbnRSZWZzOiBDb21wb25lbnRSZWY8Q29tcG9uZW50PltdID0gW11cblxuICBAVmlld0NoaWxkcmVuKCdncmlkUm93JykgZ3JpZFJvdzogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBAT3V0cHV0KCkgaW5saW5lUm93Q2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBASW5wdXQoKSBzZXQgYWN0aXZlVGVzdE1vZGUodmFsOiBhbnkpIHtcbiAgICBpZiAodmFsID09PSB0cnVlKSB7XG4gICAgICBkZWJ1Z2dlcjtcbiAgICB9XG4gIH1cbiAgc2VydmVyRmlsdGVyczogSUdyaWRTZXJ2ZXJTaWRlRXZlbnQgPSB7fTtcbiAgcm93c0RhdGE6IGFueVtdID0gW107XG4gIHJvd3NEYXRhQ29weTogYW55W10gPSBbXTtcbiAgbnVtZXJpY1ZhbHVlOiBhbnkgPSB7fVxuICByb2xlczogc3RyaW5nW10gPSBbXTtcbiAgaXNDb2x1bW5IaWRkZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgcm93Q2xpY2tEYXRhOiBJR3JpZENvbHVtbjtcbiAgY29tcG9uZW50VGFibGVSZWY6IGFueTtcbiAgbG9va3VwRmlsdGVyT2JqOiBhbnk7XG4gIGNoZWNrbGlzdDogYW55W10gPSBbXVxuICBsb29rdXBCbHVyOiBib29sZWFuID0gdHJ1ZTtcbiAgZ2xvYmFsRmlsdGVyc0FycmF5OiBhbnlbXSA9IFtdO1xuICBjaGVja0FjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBjYWxlbmRhclByZXZpb3VzVmFsdWU6IHN0cmluZyA9ICcnO1xuICBncmlkRmlsdGVyT2JqOiBJR3JpZEZpbHRlckluZm87XG4gIGRlZmF1bHREYXRlOiBhbnk7XG4gIG92ZXJsYXlQYW5lbFN0eWxlOiB7fTtcbiAgZ3JpZGZpbHRlcjogYW55O1xuICBkcm9wRG93bkZpbHRlcjogYW55ID0ge307XG4gIGRyb3Bkb3duSW5wdXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2F2ZUFsbFJlY29yZDogYm9vbGVhbiA9IGZhbHNlO1xuICBnZW5lcmF0ZVJvd3NEYXRhQ29weTogYm9vbGVhbiA9IHRydWU7XG4gIGVkaXRBbGxSZWNvcmQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY2FuY2VsQWxsUmVjb3JkczogYm9vbGVhbiA9IGZhbHNlO1xuICBhZGROZXdSb3dDaGVjazogYm9vbGVhbiA9IGZhbHNlO1xuICBpbkVkaXRNb2RlOiBib29sZWFuID0gZmFsc2U7XG4gIHNhdmVSZWNvcmRBcnJheTogYW55W10gPSBbXTtcbiAgZGlzYWJsZWRTYXZlQnRuOiBib29sZWFuID0gZmFsc2U7XG4gIGlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1NlbGVjdGVkQWxsUm93czogYm9vbGVhbiA9IGZhbHNlO1xuICBDaGVja2VkOiBib29sZWFuID0gdHJ1ZVxuICB1bkNoZWNrZWQ6IGJvb2xlYW4gPSBmYWxzZVxuICBlZGl0TW9kZUNoZWNrZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBlZGl0TW9kZXVuQ2tlY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBjYWxlbmRhckZvcm1hdDogc3RyaW5nID0gXCJtbS9kZC95eVwiXG4gIHNldERyb3Bkb3duRmlsdGVyOiBib29sZWFuID0gdHJ1ZTtcbiAgcmVsb2FkUGFnZTogU3Vic2NyaXB0aW9uO1xuICBzZXREcm9wZG93bmRhdGFWYWx1ZTogYm9vbGVhbiA9IHRydWU7XG4gIHNob3dGaWx0ZXJidG46IGJvb2xlYW4gPSBmYWxzZTtcbiAgZGlhbG9nUmVmOiBhbnlcbiAgdXNlclNldHRpbmc6IHVzZXJTZXR0aW5nID0ge307XG5cbiAgLy9hcHBseSBBZGQvRGVsZXRlL0VkaXQgcHJvcCBmb3IgdGhlIGdyaWQgcGVybWlzc2lvblxuICBhZGRSb3dQZXJtaXNzaW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgZGVsZXRlUm93UGVybWlzc2lvbjogYm9vbGVhbiA9IHRydWU7XG4gIGVkaXRSb3dQZXJtaXNzaW9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAvLyBBcHBseSBwcm9wIHNldEFnZ3JlZ2F0ZUZvb3RlciBvbiBGb290ZXIgb2YgdGhlIFRhYmxlIGZvciBhZ2dyZWdhdGUuXG4gIHNldEFnZ3JlZ2F0ZUZvb3Rlcjogc3RyaW5nID0gJyc7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGFsbG93IEhpZGUgQWdncmVnYXRlIEZvb3RlciBXaGVuIEFnZ3JlZ2F0ZSBub3QgQXBwbHkgb24gVGFibGUuXG4gIGFnZ3JlZ2F0ZUZvb3RlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIE1haW50YWlucyBwcmV2aW91cyBzdGF0ZSBvZiByb3dzIGJlaW5nIGVkaXRlZFxuICBlZGl0Um93c1JlY29yZHM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcblxuICAvLyBNYWludGFpbnMgcmVjb3JkIG9mIHJvd3MgYmVpbmcgZWRpdGVkXG4gIGVkaXRpbmdSb3dLZXlzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gIGN1cnJlbnRVcmw6IHN0cmluZyA9IGN1cnJlbnRVcmwoKTtcblxuICBAVmlld0NoaWxkKCdkdCcpIHRhYmxlOiBUYWJsZTtcblxuICAvLyBTZWxlY3RzIGl0ZW1zIGluIHRoZSBncmlkIGJhc2VkIG9uIHBhc3NlZCBvbiBkYXRhXG4gIEBJbnB1dCgpIHNlbGVjdGVkUm93czogYW55ID0gW107XG5cbiAgQElucHV0KCkgc2V0R3JpZFJlZnJlc2hUaW1lOiBudW1iZXIgPSAwO1xuXG4gIEBJbnB1dCgpIGFkZERhdGFLZXlWYWx1ZSA9IGZhbHNlO1xuXG4gIHByaXZhdGUgZ2xvYmFsRGF0YTogSUdyaWRGaWx0ZXJbXSA9IFtdO1xuXG4gIHNvcnREaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBzaG93UmVmcmVzaEJ0bjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBoaWRlUmVmcmVzaEJ0bjogYm9vbGVhbiA9IHRydWU7XG5cbiAgLy8gU3RvcmVzIHNlbGVjdGVkIGNvbHVtbnNcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRDb2x1bW5zOiBJR3JpZENvbHVtbltdID0gW107XG4gIHZpc2libGVDb2x1bW5zOiBJR3JpZENvbHVtbltdID0gW107XG4gIC8vIEJvb2xlYW4gcHJvcCB0byBhbGxvdyBob3Jpem9udGFsIFNjcm9sbCBvbiBUYWJsZS5cbiAgQElucHV0KCkgaG9yaXpvbnRhbFNjcm9sbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBoaWRlIHRoZSBkZWxldGUgcm93IGJ1dHRvbi5cbiAgQElucHV0KCkgaGlkZURlbGV0ZUJ0biA9IGZhbHNlO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBoaWRlIHRoZSBlZGl0IHJvdyBidXR0b24uXG4gIEBJbnB1dCgpIGhpZGVFZGl0QnRuID0gZmFsc2U7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGhpZGUgdGhlIGFkZCByb3cgYnV0dG9uLlxuICBASW5wdXQoKSBoaWRlQWRkQnRuID0gZmFsc2U7XG5cbiAgLy8gUHJvcCB0byBoYW5kbGUgbG9hZGVyIG9mIGdyaWRcbiAgQElucHV0KCkgcHVibGljIGxvYWRpbmcgPSBmYWxzZTtcblxuICAvL3RoaXMgcHJvcGVydHkgaXMgdXNlZCB0byBoYW5kbGUgc2VydmVyIHNpZGUgZXZlbnQgYnkgZGVmYXVsdCBpdCBpcyB0cnVlIHdoZW4gaXQgZmFsc2Ugc2VydmVyIHNpZGUgZXZlbnQgd2lsbCBub3QgYmUgY2FsbGVkXG4gIEBJbnB1dCgpIGF1dG9Mb2FkRGF0YTogYm9vbGVhbiA9IHRydWU7XG5cblxuICAvL3RhYmxlIHJvdyBzdHlsZXNcbiAgQElucHV0KCkgcm93U3R5bGU6IHN0cmluZztcblxuICAvLyBCb29sZWFuIHByb3AgdG8gY2hlY2sgd2hlcmUgc2VsZWN0ZWQgaXMgYWxsb3dlZCBvciBub3QuXG4gIEBJbnB1dCgpIGFsbG93U2VsZWN0aW9uID0gZmFsc2U7XG5cbiAgLy8gU2V0IGNvbHVtbiB3aWR0aCBvZiBzZWxlY3RlZCByb3cuXG4gIEBJbnB1dCgpIHNlbGVjdGlvbkNvbHVtbldpZHRoOiBzdHJpbmcgPSAnODBweCc7XG5cbiAgLy8gc2V0IHNlbGVjdGlvbiBjaGVja0JveCBoZWFkZXJcbiAgQElucHV0KCkgYWxsb3dTZWxlY3Rpb25IZWFkZXI6IHN0cmluZyA9ICcnO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBoaWRlIHRoZSBzYXZlIGJ1dHRvbiBvbiB0b3Agb2YgZ3JpZC5cbiAgQElucHV0KCkgaGlkZUdyaWRTYXZlQnV0dG9uID0gZmFsc2U7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGhpZGUgdGhlIHNhdmUgYnV0dG9uIG9uIHRvcCBvZiBncmlkLlxuICBASW5wdXQoKSBoaWRlR3JpZENhbmNlbEJ1dHRvbiA9IGZhbHNlO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBhbGxvdyBleHBvcnQgdG8gcGRmLlxuICBASW5wdXQoKSBhbGxvd0V4cG9ydFRvUGRmID0gZmFsc2U7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGFsbG93IGV4cG9ydCB0byBleGNlbC5cbiAgQElucHV0KCkgYWxsb3dFeHBvcnRUb0V4Y2VsID0gZmFsc2U7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIHNldCB0aGUgYWN0aW9uIGNvbHVtbiBhcyBmaXJzdCBjb2x1bW4uXG4gIEBJbnB1dCgpIHNldEFjdGlvbkNvbHVtbkFzRmlyc3QgPSBmYWxzZTtcblxuICAvLyBJZiB0cnVlLCBlbmFibGVzIG9wdGlvbnMgdG8gcGVyZm9ybSBDUlVEIHVzaW5nIGlubGluZSByb3cgZnVuY3Rpb25hbGl0eVxuICBASW5wdXQoKSB1c2VJbmxpbmVDUlVEID0gZmFsc2U7XG5cbiAgLy8gQXJyYXkgb2Ygcm93IGFjdGlvbnNcbiAgQElucHV0KCkgcm93QWN0aW9uczogSUdyaWRSb3dBY3Rpb25bXSA9IFtdO1xuXG4gIC8vIFNldHMgc2VsZWN0aW9uIHR5cGUgaS5lOiBzaW5nbGUvbXVsdGlwbGUgc2VsZWN0aW9uXG4gIEBJbnB1dCgpIHNlbGVjdGlvblR5cGU6IEVHcmlkU2VsZWN0aW9uVHlwZSA9IEVHcmlkU2VsZWN0aW9uVHlwZS5TSU5HTEU7XG5cbiAgLy8gVW5pcXVlIGtleSByZXF1aXJlcyBmb3IgYnVpbHQtaW4gcm93IHNlbGVjdGlvbiBvZiBwcmltZU5nIGdyaWRcbiAgQElucHV0KCkgZGF0YUtleTogc3RyaW5nID0gJ3RlbXBfaWQnO1xuXG4gIC8vIEZsYWcgZm9yIGNsZWFyIGZpbHRlciB2YWx1ZXMgYnV0dG9uXG4gIEBJbnB1dCgpIGNsZWFyR3JpZEZpbHRlciA9IHRydWU7XG5cbiAgLy8gRmxhZyBmb3Igc2VhcmNoIGZpbHRlciB2YWx1ZXMgYnV0dG9uXG4gIEBJbnB1dCgpIHNlYXJjaEdyaWRGaWx0ZXIgPSB0cnVlO1xuXG4gIC8vIEZsYWcgaW4gY2FzZSB0YWJsZSBpcyBzY3JvbGxhYmxlXG4gIEBJbnB1dCgpIHNjcm9sbGFibGUgPSB0cnVlO1xuXG4gIC8vIFNldHMgc2Nyb2xsIGhlaWdodCBmb3IgdGhlIHRhYmxlXG4gIEBJbnB1dCgpIHNjcm9sbEhlaWdodCA9ICc4MHZoJztcblxuICAvLyBUYWJsZSBzdHlsZVxuICBASW5wdXQoKSB0YWJsZVN0eWxlID0gJyc7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGFsbG93IHRvIHdyYXAgb3IgdW5XcmFwIHRoZSBncmlkLlxuICBASW5wdXQoKSB3b3JkV3JhcDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIG5ld0dyaWRSb3c6IGFueSA9IHt9O1xuXG4gIEBJbnB1dCgpIGZpbHRlcmluZyA9IHRydWU7XG5cbiAgQElucHV0KCkgcmVwb3J0QnV0dG9uczogYW55W10gPSBbXTtcblxuICBASW5wdXQoKSByb3dIb3ZlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGhpZGVGaWx0ZXJPcHRpb25zOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gU2V0cyBwYWdlbmF0aW9uIGZvciB0aGUgdGFibGUgRGF0YS5cbiAgQElucHV0KCkgc2V0UGFnaW5hdGlvbkxlbmd0aDogYW55W10gPSBbNSwgMTAsIDE1LCB7IHNob3dBbGw6ICdBbGwnIH1dO1xuXG4gIC8vIHNldCB0aGUgY2hhbmdlIGluIHRoZSByb3dEYXRhXG4gIEBPdXRwdXQoKSByb3dzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogU3RvcHMgdGhlIGxvYWRlciBhbmQgc2V0cyB0aGUgZGF0YSB0byBncmlkXG4gICAqIENsZWFycyB0aGUgZWRpdGluZyBzdGFja1xuICAgKiBTY3JvbGxzIHRvIHNlbGVjdGVkIGVsZW1lbnQgaWYgc2VsZWN0aW9uIGZvdW5kXG4gICAqL1xuICBASW5wdXQoKSBzZXQgcm93cyhkYXRhOiBhbnlbXSkge1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIGlmICghdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQpIHtcbiAgICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAoIXRoaXMuZGF0YUtleSkge1xuICAgICAgICAgIHRoaXMuZGF0YUtleSA9ICd0ZW1wX2lkJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YT8ubGVuZ3RoID4gNDAgJiYgIXRoaXMucGFnaW5hdGlvbiAmJiAhdGhpcy5ncmlkU2VydmljZT8ucm93VXBkYXRlKSB7XG4gICAgICAgICAgY29uc3Qgcm93c0RhdGEgPSB0aGlzLmdyaWRTZXJ2aWNlLnNldERhdGFGaWVsZHMoZGF0YSwgdGhpcy5kYXRhS2V5KTtcbiAgICAgICAgICBjb25zdCBpbml0aWFsaXplRGF0YSA9IFsuLi5yb3dzRGF0YV07XG4gICAgICAgICAgdGhpcy5yb3dzRGF0YSA9IGluaXRpYWxpemVEYXRhLnNwbGljZSgwLCA0MCk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJvd3NEYXRhID0gcm93c0RhdGE7XG4gICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5ncmlkU2VydmljZT8ucm93VXBkYXRlKSB7XG4gICAgICAgICAgdGhpcy5yb3dzRGF0YSA9IHRoaXMuZ3JpZFNlcnZpY2Uuc2V0RGF0YUZpZWxkcyhkYXRhLCB0aGlzLmRhdGFLZXkpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ3JpZFNlcnZpY2Uucm93VXBkYXRlKSB7XG4gICAgICAgICAgdGhpcy5yb3dzRGF0YSA9IGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lZGl0Um93c1JlY29yZHMgPSB7fTtcblxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFJvd3MpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudFJlZiA9IHRoaXMuZ3JpZFJvdy5maW5kKFxuICAgICAgICAgICAgICAoeCkgPT4geC5uYXRpdmVFbGVtZW50LmlkID09PSB0aGlzLnNlbGVjdGVkUm93c1t0aGlzLmRhdGFLZXldXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50UmVmICYmXG4gICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MVGFibGVSb3dFbGVtZW50XG4gICAgICAgICAgICAgICkuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cblxuICAgICAgICAvL21hbmlwdWxhdGUgY2hlY2tib3ggc3RyaW5nIHZhbHVlIHRvIHRydWUgYW5kIGZhbHNlLlxuICAgICAgICB0aGlzLmNoYW5nZUNoZWNrYm94U3RyaW5nVmFsdWUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucm93c0RhdGEgPSBbXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBHbG9iYWwgZmlsdGVyIHNlcnZlciByZXF1ZXN0XG4gIEBJbnB1dCgpIHNldCBnbG9iYWxGaWx0ZXJEYXRhKGdsb2JhbEZpbHRlcnM6IElHbG9iYWxGaWx0ZXJbXSkge1xuICAgIHRoaXMuZ2xvYmFsRGF0YSA9IHRoaXMuZ3JpZFNlcnZpY2VcbiAgICAgIC5wcmVwYXJlR2xvYmFsRmlsdGVycyhnbG9iYWxGaWx0ZXJzKVxuICAgICAgPy5maWx0ZXIoKHgpID0+IHg/LnZhbHVlICE9PSBmYWxzZSk7XG4gICAgY29uc3Qgc2VydmVyRmlsdGVyVmFsdWVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNlcnZlckZpbHRlcnMpKTtcbiAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycyA9IHRoaXMuc2VydmVyRmlsdGVycy5maWx0ZXJzXG4gICAgICA/IHRoaXMuc2VydmVyRmlsdGVycy5maWx0ZXJzLmNvbmNhdCh0aGlzLmdsb2JhbERhdGEpXG4gICAgICA6IHRoaXMuZ2xvYmFsRGF0YTtcblxuICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXBwbHlGaWx0ZXInKSA9PT0gJ2ZhbHNlJykge1xuICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkgPSB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheT8ubGVuZ3RoID4gMFxuICAgICAgICA/IHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5LmNvbmNhdChbLi4uc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnNdKVxuICAgICAgICA6IHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5O1xuICAgIH1cbiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FwcGx5RmlsdGVyJykgPT09ICd0cnVlJykge1xuICAgICAgZ2xvYmFsRmlsdGVycy5mb3JFYWNoKChnbG9iYWxGaWx0ZXIpID0+IHtcbiAgICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkuZm9yRWFjaCgoZmlsdGVyQXJyYXkpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmaWx0ZXJBcnJheS5maWVsZCA9PT0gZ2xvYmFsRmlsdGVyLmZpZWxkICYmXG4gICAgICAgICAgICBnbG9iYWxGaWx0ZXIudmFsdWUgJiZcbiAgICAgICAgICAgIGZpbHRlckFycmF5LnZhbHVlICE9PSBnbG9iYWxGaWx0ZXIudmFsdWVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGZpbHRlckFycmF5LnZhbHVlID0gZ2xvYmFsRmlsdGVyLnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBmaW5kSW5kZXggPSB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheS5maW5kSW5kZXgoXG4gICAgICAgICAgICAoaW5kZXgpID0+IGluZGV4LmZpZWxkID09PSBnbG9iYWxGaWx0ZXIuZmllbGQgJiYgIWdsb2JhbEZpbHRlci52YWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGZpbmRJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5LnNwbGljZShmaW5kSW5kZXgsIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5sb2FkaW5nID0gdGhpcy5hdXRvTG9hZERhdGE7XG4gICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmdyaWRTZXJ2aWNlLmFwcGx5RmlsdGVyRXZlbnQgfHwgdGhpcy5hdXRvTG9hZERhdGEpIHtcbiAgICAgICAgdGhpcy5vbkFwcGx5RmlsdGVyLmVtaXQoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmdsb2JhbEZpbHRlcnNBcnJheSAmJiB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzID0gc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMuY29uY2F0KFxuICAgICAgICAgIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycyA9IEFycmF5LmZyb20oXG4gICAgICAgIG5ldyBTZXQoXG4gICAgICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnNcbiAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAgIC5tYXAoKGZpbHRlcjogYW55KSA9PiBmaWx0ZXIuZmllbGQpXG4gICAgICAgIClcbiAgICAgICkubWFwKChmaWVsZCkgPT4ge1xuICAgICAgICByZXR1cm4gc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMuZmluZCgoeDogYW55KSA9PiB4LmZpZWxkID09PSBmaWVsZCk7XG4gICAgICB9KTtcbiAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzID0gc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMuZmlsdGVyKFxuICAgICAgICAob2JqOiBhbnkpID0+XG4gICAgICAgICAgb2JqPy52YWx1ZSAmJiBvYmoudmFsdWU/LnRvU3RyaW5nKCk/Lmxlbmd0aCA+IDAgJiYgb2JqLmZpZWxkXG4gICAgICApO1xuICAgICAgdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmxdID0gc2VydmVyRmlsdGVyVmFsdWVzO1xuICAgICAgaWYgKHRoaXMuZ3JpZFNlcnZpY2UuYXBwbHlGaWx0ZXJFdmVudCB8fCB0aGlzLmF1dG9Mb2FkRGF0YSA9PT0gdHJ1ZSkge1xuICAgICAgICAvLyBzZXR0aW5nIHBhZ2luYXRpb24gcGFnZSBhcyBmaXJzdFxuICAgICAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMucGFnZSA9IDE7XG4gICAgICAgIHRoaXMuYXV0b0xvYWREYXRhID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdFJvd3MgJiYgdGhpcy5wYWdpbmF0aW9uKSB7XG4gICAgICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLnBhZ2VTaXplID0gdGhpcy5kZWZhdWx0Um93cztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ncmlkU2VydmljZS5hcHBseUZpbHRlckV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLm9uU2VydmVyU2lkZUV2ZW50Q2hhbmdlLmVtaXQoc2VydmVyRmlsdGVyVmFsdWVzKTtcbiAgICAgICAgICB0aGlzLmVkaXRpbmdSb3dLZXlzID0ge307XG4gICAgICAgIH1cbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2FwcGx5RmlsdGVyJyk7XG4gICAgICAgIC8vIHNldHRpbmcgcGFnaW5hdGlvbiBwYWdlIG51bWJlciBVSVxuICAgICAgICB0aGlzLnRhYmxlLl9maXJzdCA9IDA7XG4gICAgICB9XG4gICAgICAvLyB9LCAzMDApO1xuICAgIH1cbiAgfVxuXG4gIC8vIElucHV0IGRlY29yYXRvciB0byByZWNlaXZlIGNvbHVtbnMgdG8gYmUgZGlzcGxheWVkIGluIGhlYWRlclxuICBASW5wdXQoKSBjb2x1bW5zOiBJR3JpZENvbHVtbltdID0gW107XG5cbiAgQElucHV0KCkgcGVybWlzc2lvbnM6IElQZXJtaXNzaW9uW10gPSBbXTtcblxuICAvLyBPcHRpb25hbCBwcm9wIHRvIGhhbmRsZSB0b2dnbGluZyBvZiBjb2x1bW5zXG4gIEBJbnB1dCgpIGFsbG93Q29sdW1uVG9nZ2xlID0gZmFsc2U7XG5cbiAgLy8gT3B0aW9uYWwgcHJvcCB0byBoaWRlIGZpbHRlcmluZyBvZiBjb2x1bW5zXG4gIEBJbnB1dCgpIGhpZGVGaWx0ZXIgPSBmYWxzZTtcblxuICAvLyBPcHRpb25hbCBwcm9wIHRvIGhhbmRsZSBsb29rdXAgZmlsdGVyc1xuICBASW5wdXQoKSBsb29rdXBGaWx0ZXJzID0gZmFsc2U7XG5cbiAgLy8gT3B0aW9uYWwgcHJvcCB0byBoYW5kbGUgcGFnaW5hdGlvblxuICBASW5wdXQoKSBwYWdpbmF0aW9uID0gZmFsc2U7XG5cbiAgLy8gT3B0aW9uYWwgcHJvcCB0byBoYW5kbGUgc2hvdyBDdXJyZW50UGFnZSBSZXBvcnRcbiAgQElucHV0KCkgc2hvd0N1cnJlbnRQYWdlUmVwb3J0ID0gZmFsc2U7XG5cbiAgLy8gRGlzcGxheXMgdG90YWwgbnVtYmVyIG9mIHJlY29yZHNcbiAgQElucHV0KCkgdG90YWxSZWNvcmRzID0gMDtcblxuICAvLyBEaXNwbGF5cyBhZ2dyZWdhdGUgdGhhdCBmZXRjaCBmcm9tIHJlY29yZHNcbiAgQElucHV0KCkgYWdncmVnYXRlZFJlc3VsdDogYW55W10gPSBbXTtcblxuICBASW5wdXQoKSBzaG93Y29uZmlybURpYWxvZzogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KCkgc2F2ZUFsbERhdGE6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBTZXRzIG51bWJlciBvZiByb3dzIHRvIGJlIHNob3duIHRoZSBncmlkXG4gIEBJbnB1dCgpIGRlZmF1bHRSb3dzOiBudW1iZXIgPSAwO1xuXG4gIEBJbnB1dCgpIGNvbHVtbkFjdGlvbnM6IElHcmlkQ29sdW1uQWN0aW9uW10gPSBbXTtcblxuICAvLyBEZWNpZGVzIHRoZSBncmlkJ3MgYmVoYXZpb3IgZWl0aGVyIGZvciBjbGllbnQgc2lkZSBvciBzZXJ2ZXIgc2lkZSBldmVudHNcbiAgQElucHV0KCkgdXNlU2VydmVyU2lkZUV2ZW50cyA9IGZhbHNlO1xuXG4gIC8vIE91dHB1dCBldmVudCB0byBoYW5kbGUgcm93IGNsaWNrXG4gIEBPdXRwdXQoKSBvblJvd0NsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBPdXRwdXQgZXZlbnQgZW1pdCB3aGVuIGNsaWNrIG9uIGdyaWQgY2hlY2tib3ggZmlsdGVyXG4gIEBPdXRwdXQoKSBvbkNoZWNrQm94RmlsdGVyQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIE91dHB1dCBldmVudCB0byBoYW5kbGUgcm93IENoZWNrQm94XG4gIEBPdXRwdXQoKSBvblJvd0NoZWNrQm94OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBPdXRwdXQgZXZlbnQgdG8gdHJpZ2dlciBvbiBzb3J0IGNoYW5nZVxuICBAT3V0cHV0KCkgb25Tb3J0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8SUdyaWRTb3J0PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBPdXRwdXQgZXZlbnQgdG8gdHJpZ2dlciBvbiBmaWx0ZXIgY2hhbmdlXG4gIEBPdXRwdXQoKSBvbkZpbHRlckNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gT3V0cHV0IGV2ZW50IHRvIGludm9rZSB0aGUgbXVsdGlTZWxlY3Rpb24gY2xpY2sgZXZlbnRcbiAgQE91dHB1dCgpIG9uTXVsdGlTZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIENhbGxzIHdoZW5ldmVyIGEgZ3JpZCBhbmQgZ2xvYmFsRmlsdGVycyBjYWxsZWRcbiAgQE91dHB1dCgpIG9uQXBwbHlGaWx0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vc2V0IGhlYWRlciBjaGVja2JveCB2YWx1ZSBmb3IgZ2V0dGluZyBhbGwgY29sdW1ucyBvbiBzdGF5IGFkbWluXG4gIEBPdXRwdXQoKSBpc0luY2x1ZGVkQWxsQ29sdW1uczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gQ2FsbHMgd2hlbmV2ZXIgYSBsYXp5IGV2ZW50IGlzIGRpc3BhdGNoZWRcbiAgQE91dHB1dCgpXG4gIG9uU2VydmVyU2lkZUV2ZW50Q2hhbmdlOiBFdmVudEVtaXR0ZXI8SUdyaWRTZXJ2ZXJTaWRlRXZlbnQ+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gT3V0cHV0IGV2ZW50IHRvIHRyaWdnZXIgb24gcGFnaW5hdGlvblxuICBAT3V0cHV0KClcbiAgb25QYWdlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8SUdyaWRQYWdpbmF0aW9uRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIERpc3BhdGNoIG91dHB1dCBldmVudCB0cmlnZ2VyIG9uIGVkaXQgcm93XG4gIEBPdXRwdXQoKSBvblJvd1VwZGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBEaXNwYXRjaCBvdXRwdXQgZXZlbnQgdHJpZ2dlciBjYW5jZWwgYWxsIHJvd3NcbiAgQE91dHB1dCgpIG9uQ2FuY2VsQWxsUm93cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBEaXNwYXRjaCBvdXRwdXQgZXZlbnQgdHJpZ2dlciBvbiBkZWxldGUgcm93XG4gIEBPdXRwdXQoKSBvblJvd0RlbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvL0Rpc3BhdGNoIG91dHB1dCBldmVudCB0cmlnZ2VyIG9uIGFkZCByb3dcbiAgQE91dHB1dCgpIG9uUm93QWRkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vRGlzcGF0Y2ggb3V0cHV0IGV2ZW50IHRyaWdnZXIgb24gYWRkLCB1cGRhdGUgYW5kIGRlbGV0ZSByb3dcbiAgQE91dHB1dCgpIG9uR3JpZFJvd0FjdGlvbnMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gc2V0IHByb3BlcnR5IGFsbG93Q2FjaGluZyBmb3IgTG9jYWxTdG9yYWdlXG4gIEBJbnB1dCgpIGFsbG93Q2FjaGluZzogYm9vbGVhbjtcblxuICAvL3NldCBNdWx0aXNlbGVjdCBUb2dnbGUgQ29sdW1uc1xuICBASW5wdXQoKSBhbHdheXNIaWRkZW46IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBzZXQgcHJvcGVydHkgc29mdENhY2hpbmcgZm9yIHNldHRpbmcgdGhlIHZhbHVlcyBvZiBncmlkRmlsdGVyXG4gIEBJbnB1dCgpIHNvZnRDYWNoaW5nOiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoKSBlZGl0QWxsUm93czogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIHNldCB0aGUgcm93IFdoZW4gRWRpdCB0aGUgcm93IG9uIEdyaWRcbiAgQE91dHB1dCgpIG9uR3JpZFJvd0VkaXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gc2V0IHRoZSByb3cgV2hlbiBhZGRpbmcgdGhlIG5ldyBSb3cgb24gR3JpZFxuICBAT3V0cHV0KCkgb25HcmlkUm93QWRkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGlzR3JpZEhpZGRlbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHJvd3NQZXJQYWdlT3B0aW9uczogYW55W10gPSBbNSwgMTAsIDE1LCB7IHNob3dBbGw6ICdBbGwnIH1dO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwdWJsaWMgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgICBwcml2YXRlIGZvcm1TZXJ2aWNlOiBGb3JtU2VydmljZSxcbiAgICBwcml2YXRlIGdyaWRTZXJ2aWNlOiBHcmlkU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhlbnRpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHVibGljIGRlY2ltYWxQaXBlOiBEZWNpbWFsUGlwZSxcbiAgICBwcml2YXRlIHBhZ2VMb2dnZXJTZXJ2aWNlOiBQYWdlTG9nZ2VyU2VydmljZSxcbiAgICBwcml2YXRlIGh5cGVybGlua1NlcnZpY2U6IEh5cGVybGlua1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcbiAgICBwdWJsaWMgY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwdWJsaWMgY29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnLFxuICAgIEBPcHRpb25hbCgpIHB1YmxpYyByZWY6IER5bmFtaWNEaWFsb2dSZWZcbiAgKSB7IH1cblxuICBjb25zb2xlTG9nKG1lc3NhZ2U6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKG1lc3NhZ2UpO1xuICB9XG5cbiAgYXN5bmMgYWRkRHluYW1pY1BhbmVsT3ZlcmxheUNvbXBvbmVudChvbkhvdmVyOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBvbkhvdmVyPy5zdHlsZSA/IHRoaXMub3ZlcmxheVBhbmVsU3R5bGUgPSBvbkhvdmVyLnN0eWxlIDogXCJcIlxuICAgIGNvbnN0IGNvbXBvbmVudFJlZjogYW55ID0gdGhpcy5wYW5lbE92ZXJsYXlWaWV3Q29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChvbkhvdmVyLmNvbXBvbmVudClcbiAgICBpZiAob25Ib3Zlci5kYXRhKSB7XG4gICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuY29uZmlnID0gW107XG4gICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuY29uZmlnLmRhdGEgPSBvbkhvdmVyLmRhdGE7XG4gICAgfVxuICAgIHRoaXMuY29tcG9uZW50UmVmcy5wdXNoKGNvbXBvbmVudFJlZilcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKClcbiAgfVxuICBnZXQgc2VsZWN0ZWRDb2x1bW5zKCk6IElHcmlkQ29sdW1uW10ge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZENvbHVtbnM7XG4gIH1cblxuICBzZXQgc2VsZWN0ZWRDb2x1bW5zKHZhbDogSUdyaWRDb2x1bW5bXSkge1xuICAgIHRoaXMuX3NlbGVjdGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucz8uZmlsdGVyKChjb2wpID0+IHZhbC5pbmNsdWRlcyhjb2wpKTtcbiAgICBpZiAodGhpcy5hbHdheXNIaWRkZW4pIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkRmllbGRzID0gdmFsLm1hcCgoeCkgPT4geC5maWVsZCk7XG4gICAgICB0aGlzLnNldE11bHRpU2VsZWN0VG9nZ2xlQ29sdW1uKHNlbGVjdGVkRmllbGRzKTtcbiAgICB9XG4gIH1cblxuICAvLyBicm93c2VyIGNsb3NlIGV2ZW50XG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpiZWZvcmV1bmxvYWQnLCBbJyRldmVudCddKVxuICBiZWZvcmV1bmxvYWRIYW5kbGVyKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5ncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NpZ25tZW50IG9mIHNlbGVjdGVkIGNvbHVtbnMgb24gcGFnZSBsb2FkXG4gICAqL1xuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBhdXRvbWF0aWNhbGx5IHJlbG9hZCBncmlkIGFmdGVyIDkgc2Vjb25kcy5cbiAgICBpZiAodGhpcy5zZXRHcmlkUmVmcmVzaFRpbWUpIHtcbiAgICAgIHRoaXMucmVmcmVzaEdyaWQoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vblJvd1VwZGF0ZT8ub2JzZXJ2ZXJzPy5sZW5ndGggPT0gMCkge1xuICAgICAgdGhpcy5oaWRlRWRpdEJ0biA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZWRpdEFsbFJvd3MgJiYgdGhpcy5vblJvd0RlbGV0ZS5vYnNlcnZlcnMubGVuZ3RoID09IDApIHtcbiAgICAgIHRoaXMuZGlzYWJsZWRTYXZlQnRuID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbXBvbmVudFRhYmxlUmVmID0gdGhpcy50YWJsZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2V0TnVtZXJpY1ZhbHVlcygpO1xuICAgIH0sIDUwMCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5yb3dzQ2hhbmdlLm9ic2VydmVycz8ubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICAgICAgfVxuICAgIH0sIDIwMDApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5yZWZyZXNoR3JpZFRlcm1pbmF0b3IoKTtcbiAgfVxuXG4gIC8vIHNldCBNdWx0aXNlbGVjdCBUb2dnbGUgQ29sdW1uIC8vXG4gIHNldE11bHRpU2VsZWN0VG9nZ2xlQ29sdW1uKHNlbGVjdGVkRmllbGRzOiBhbnlbXSA9IFtdKSB7XG4gICAgaWYgKHRoaXMudXNlclNldHRpbmc/LnBhZ2VTZXR0aW5ncz8ubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbWF0Y2hVcmwgPSB0aGlzLnVzZXJTZXR0aW5nPy5wYWdlU2V0dGluZ3M/LmZpbmRJbmRleCgocGFnZSkgPT4gcGFnZT8udXJsID09PSB0aGlzLnJvdXRlci51cmwpXG4gICAgICBpZiAobWF0Y2hVcmwgPiAtMSkge1xuICAgICAgICBjb25zdCBtYXRjaEdyaWQgPSB0aGlzLnVzZXJTZXR0aW5nPy5wYWdlU2V0dGluZ3NbbWF0Y2hVcmxdPy5ncmlkU2V0dGluZ3M/LmZpbmRJbmRleCgoZ3JpZFNldHRpbmcpID0+IGdyaWRTZXR0aW5nPy5ncmlkSWQgPT09IHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKTtcbiAgICAgICAgaWYgKG1hdGNoR3JpZCA+IC0xKSB7XG4gICAgICAgICAgdGhpcy51c2VyU2V0dGluZz8ucGFnZVNldHRpbmdzW21hdGNoVXJsXT8uZ3JpZFNldHRpbmdzLnNwbGljZShtYXRjaEdyaWQsIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnNldGdyaWRTZXR0aW5ncyhzZWxlY3RlZEZpZWxkcywgbWF0Y2hVcmwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVzZXJTZXR0aW5nLnBhZ2VTZXR0aW5ncyA9IFtdO1xuICAgICAgdGhpcy5zZXRncmlkU2V0dGluZ3Moc2VsZWN0ZWRGaWVsZHMpO1xuICAgIH1cbiAgfVxuXG4gIGdldFNlbGVjdGVkQ29sRnJvbUxvY2FsU3Ryb3JhZ2Uoc2VsZWN0ZWRDb2x1bW4pIHtcbiAgICBsZXQgYXJyID0gW107XG4gICAgaWYgKHNlbGVjdGVkQ29sdW1uICYmIHNlbGVjdGVkQ29sdW1uPy5wYWdlU2V0dGluZ3M/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG1hdGNoVXJsID0gc2VsZWN0ZWRDb2x1bW4/LnBhZ2VTZXR0aW5ncz8uZmluZEluZGV4KChwYWdlKSA9PiBwYWdlPy51cmwgPT09IHRoaXMucm91dGVyLnVybClcbiAgICAgIGlmIChtYXRjaFVybCA+IC0xKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoR3JpZCA9IHNlbGVjdGVkQ29sdW1uPy5wYWdlU2V0dGluZ3NbbWF0Y2hVcmxdPy5ncmlkU2V0dGluZ3M/LmZpbmQoKGdyaWRTZXR0aW5nKSA9PiBncmlkU2V0dGluZz8uZ3JpZElkID09PSB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCk7XG4gICAgICAgIGlmIChtYXRjaEdyaWQgJiYgbWF0Y2hHcmlkLnNlbGVjdGVkQ29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGlmIChtYXRjaEdyaWQuc2VsZWN0ZWRDb2x1bW5zLnNvbWUoKGZpZWxkTmFtZSkgPT4gZmllbGROYW1lLnRvTG93ZXJDYXNlKCkgPT09IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICAgYXJyLnB1c2goY29sdW1uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFycj8ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGFycjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIHNldGdyaWRTZXR0aW5ncyhzZWxlY3RlZEZpZWxkczogYW55LCBtYXRjaFVybD86IGFueSkge1xuICAgIGlmIChzZWxlY3RlZEZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgZ3JpZFNldHRpbmdzOiBhbnlbXSA9IFtdO1xuICAgICAgZ3JpZFNldHRpbmdzLnB1c2goe1xuICAgICAgICBncmlkSWQ6IHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkLFxuICAgICAgICBzZWxlY3RlZENvbHVtbnM6IHNlbGVjdGVkRmllbGRzXG4gICAgICB9KVxuICAgICAgY29uc3QgcGFnZVNldHRpbmcgPSB7XG4gICAgICAgIHVybDogdGhpcy5yb3V0ZXIudXJsLFxuICAgICAgICBncmlkU2V0dGluZ3M6IGdyaWRTZXR0aW5ncyxcbiAgICAgICAgbGFzdFVwZGF0ZWQ6IG5ldyBEYXRlKClcbiAgICAgIH1cbiAgICAgIHRoaXMudXNlclNldHRpbmcubGFzdFVwZGF0ZWQgPSBuZXcgRGF0ZSgpO1xuICAgICAgaWYgKG1hdGNoVXJsID4gLTEpIHtcbiAgICAgICAgdGhpcy51c2VyU2V0dGluZy5wYWdlU2V0dGluZ3NbbWF0Y2hVcmxdID0gcGFnZVNldHRpbmc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnVzZXJTZXR0aW5nLnBhZ2VTZXR0aW5ncy5wdXNoKHBhZ2VTZXR0aW5nKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhZ2VJbmZvID0gSlNPTi5zdHJpbmdpZnkodGhpcy51c2VyU2V0dGluZyk7XG4gICAgICBjaGFuZ2VDb2x1bW5zU3RhdGUoeyBwYWdlU2V0dGluZzogcGFnZUluZm8gfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gYXBwbHkgdXNlciByb2xlIHBlcm1pc3Npb25zIG9uIGdyaWQgY29sdW1uc1xuICBhcHBseUNvbHVtbnNQZXJtaXNzaW9ucygpIHtcbiAgICBpZiAodGhpcy5jb2x1bW5zKSB7XG4gICAgICBsZXQgdG90YWxGaWVsZHM6IG51bWJlciA9IDA7XG4gICAgICBsZXQgaGlkZGVuRmllbGRzOiBudW1iZXIgPSAwO1xuXG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBJR3JpZENvbHVtbikgPT4ge1xuICAgICAgICBsZXQgcGVybWlzc2lvbnM6IElQZXJtaXNzaW9uW10gPSBjb2x1bW4ucGVybWlzc2lvbnM7XG4gICAgICAgIGxldCBoYXNWYWxpZEVkaXRQZXJtaXNzaW9uID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHBlcm1pc3Npb25zICYmIHBlcm1pc3Npb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBwZXJtaXNzaW9ucy5mb3JFYWNoKChwZXJtaXNzaW9uKSA9PiB7XG4gICAgICAgICAgICBsZXQgaXNWYWxpZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHBlcm1pc3Npb24ucm9sZXMgJiYgcGVybWlzc2lvbi5yb2xlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHBlcm1pc3Npb24ucm9sZXMuZm9yRWFjaCgocm9sZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZCAmJiB0aGlzLnJvbGVzICYmIHRoaXMucm9sZXMuaW5jbHVkZXMocm9sZSkpIHtcbiAgICAgICAgICAgICAgICAgIGlzVmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5WSUVXICYmXG4gICAgICAgICAgICAgICAgIWhhc1ZhbGlkRWRpdFBlcm1pc3Npb25cbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5FRElUKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgIGhhc1ZhbGlkRWRpdFBlcm1pc3Npb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgY29sdW1uLmhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgY29sdW1uLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdG90YWxGaWVsZHMrKztcbiAgICAgICAgaWYgKGNvbHVtbi5oaWRkZW4pIHtcbiAgICAgICAgICBoaWRkZW5GaWVsZHMrKztcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuaXNDb2x1bW5IaWRkZW4gPSB0b3RhbEZpZWxkcyA+IDAgJiYgdG90YWxGaWVsZHMgPT09IGhpZGRlbkZpZWxkcztcbiAgICB9XG4gIH1cblxuICAvLyBhcHBseSBnbG9iYWwgcGVybWlzc2lvbnMgb24gZW50aXJlIGdyaWRcbiAgYXBwbHlHcmlkUGVybWlzc2lvbnMoKSB7XG4gICAgaWYgKHRoaXMucGVybWlzc2lvbnMgJiYgdGhpcy5wZXJtaXNzaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgaGFzVmFsaWRFZGl0UGVybWlzc2lvbiA9IGZhbHNlO1xuXG4gICAgICAvLyBjaGVjayBpZiBhbnkgY29sdW1uIGhhcyBhbnkgcGVybWlzc2lvblxuICAgICAgbGV0IGhhc0NvbHVtblBlcm1pc3Npb25zID0gdGhpcy5jb2x1bW5zPy5zb21lKFxuICAgICAgICAoeCkgPT4geD8ucGVybWlzc2lvbnMgJiYgeC5wZXJtaXNzaW9ucy5sZW5ndGggPiAwXG4gICAgICApO1xuXG4gICAgICB0aGlzLnBlcm1pc3Npb25zLmZvckVhY2goKHBlcm1pc3Npb24pID0+IHtcbiAgICAgICAgbGV0IGlzVmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgICAgICBwZXJtaXNzaW9uLnJvbGVzLmZvckVhY2goKHJvbGUpID0+IHtcbiAgICAgICAgICBpZiAoIWlzVmFsaWQgJiYgdGhpcy5yb2xlcyAmJiB0aGlzLnJvbGVzLmluY2x1ZGVzKHJvbGUpKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5DUlVEICYmICFpc1ZhbGlkKSB7XG4gICAgICAgICAgdGhpcy51c2VJbmxpbmVDUlVEID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgcGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuVklFVyAmJlxuICAgICAgICAgICFoYXNWYWxpZEVkaXRQZXJtaXNzaW9uXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMudXNlSW5saW5lQ1JVRCA9IHRydWU7XG4gICAgICAgICAgaWYgKCFpc1ZhbGlkICYmICFoYXNDb2x1bW5QZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgdGhpcy5pc0dyaWRIaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy51c2VJbmxpbmVDUlVEID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLkVESVQgJiYgIWlzVmFsaWQpIHtcbiAgICAgICAgICB0aGlzLmlzR3JpZEhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgIGhhc1ZhbGlkRWRpdFBlcm1pc3Npb24gPSB0cnVlO1xuICAgICAgICAgIHRoaXMuZWRpdFJvd1Blcm1pc3Npb24gPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5ERUxFVEUgJiYgIWlzVmFsaWQpIHtcbiAgICAgICAgICB0aGlzLmRlbGV0ZVJvd1Blcm1pc3Npb24gPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5BRERST1cgJiYgIWlzVmFsaWQpIHtcbiAgICAgICAgICB0aGlzLmFkZFJvd1Blcm1pc3Npb24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9uUm93QWRkLm9ic2VydmVycy5sZW5ndGggPT0gMCkgdGhpcy5hZGRSb3dQZXJtaXNzaW9uID0gZmFsc2U7XG4gICAgaWYgKHRoaXMub25Sb3dEZWxldGUub2JzZXJ2ZXJzLmxlbmd0aCA9PSAwKSB0aGlzLmRlbGV0ZVJvd1Blcm1pc3Npb24gPSBmYWxzZTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZTogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmICghdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgJiYgIXRoaXMuZ3JpZFNlcnZpY2Uucm93VXBkYXRlKSB7XG4gICAgICBsZXQgZ2V0U2VsZWN0ZWRDb2wgPSBbXVxuICAgICAgaWYgKHRoaXMuYWxsb3dDYWNoaW5nICE9PSBmYWxzZSAmJiB0aGlzLnBhZ2luYXRpb24pIHtcbiAgICAgICAgdGhpcy5hbGxvd0NhY2hpbmcgPSB0aGlzLnBhZ2luYXRpb247XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdTZXRGaWx0ZXJzLScgKyB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHRoaXMuY3VycmVudFVybCk7XG4gICAgICB9XG4gICAgICAvLyBhZGQgZGVmYXVsdFJvdyBpbiBwYWdpbmF0aW9uIGFycmF5XG4gICAgICBpZiAoIXRoaXMuc2V0UGFnaW5hdGlvbkxlbmd0aC5pbmNsdWRlcyh0aGlzLmRlZmF1bHRSb3dzKSkge1xuICAgICAgICB0aGlzLnNldFBhZ2luYXRpb25MZW5ndGgudW5zaGlmdCh0aGlzLmRlZmF1bHRSb3dzKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhhc0NvbHVtbnM6IGJvb2xlYW4gPSB0aGlzLmNvbHVtbnMgJiYgdGhpcy5jb2x1bW5zLmxlbmd0aCA+IDA7XG4gICAgICBpZiAoaGFzQ29sdW1ucykge1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmdyaWRTZXJ2aWNlLnNldENvbHVtbkZpZWxkcyh0aGlzLmNvbHVtbnMpO1xuICAgICAgICBpZiAodGhpcy5hbHdheXNIaWRkZW4pIHtcbiAgICAgICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnM/LmZpbHRlcigoeCkgPT4gIXguaGlkZGVuKTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50VXNlckluZm8gPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdDdXJyZW50VXNlckluZm8nKSk7XG4gICAgICAgICAgaWYgKGN1cnJlbnRVc2VySW5mbykge1xuICAgICAgICAgICAgZ2V0U2VsZWN0ZWRDb2wgPSB0aGlzLmdldFNlbGVjdGVkQ29sRnJvbUxvY2FsU3Ryb3JhZ2UoSlNPTi5wYXJzZShjdXJyZW50VXNlckluZm8/LnBhZ2VTZXR0aW5nKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucm9sZXMgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJSb2xlcygpO1xuXG4gICAgICAgIC8vIGFwcGx5IHVzZXIgcm9sZSBwZXJtaXNzaW9ucyBvbiBncmlkIGNvbHVtbnNcbiAgICAgICAgdGhpcy5hcHBseUNvbHVtbnNQZXJtaXNzaW9ucygpO1xuXG4gICAgICAgIC8vIGFwcGx5IGdsb2JhbCBwZXJtaXNzaW9ucyBvbiBlbnRpcmUgZ3JpZFxuICAgICAgICB0aGlzLmFwcGx5R3JpZFBlcm1pc3Npb25zKCk7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucz8uZmlsdGVyKCh4KSA9PiAheC5oaWRkZW4pO1xuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICAvLyBjaGVja2luZyBmaWx0ZXIgZXhpc3Qgb3Igbm90XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuX3NlbGVjdGVkQ29sdW1ucy5zb21lKFxuICAgICAgICAgIChjb2x1bW4pID0+IGNvbHVtbi5maWx0ZXJpbmcgPT09IHVuZGVmaW5lZCB8fCBjb2x1bW4uZmlsdGVyaW5nID09PSB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIGlmIChmaWx0ZXIgPT09IGZhbHNlKSB7XG4gICAgICAgICAgdGhpcy5oaWRlRmlsdGVyID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xuICAgICAgICAgIC8vIHNldCBpc1JlcXVpcmVkIHRydWUgZm9yIHJlcXVpcmVkIGNvbHVtbiB0byBzaG93IGFzdHJpYyBpbiBjb2x1bW4gaGVhZGVyXG4gICAgICAgICAgaWYgKGNvbHVtbi52YWxpZGF0aW9ucz8uZmluZCh2YWxpZGF0aW9uID0+IHZhbGlkYXRpb24udHlwZSA9PSBFR3JpZFZhbGlkYXRvci5SRVFVSVJFRCkpIHtcbiAgICAgICAgICAgIGNvbHVtbi5pc1JlcXVpcmVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gc2V0IG51bWVyaWMgbnVsbCBvciB1bmRlZmluZSBkYXRhIGRlZmF1bHQgdmFsdWVcbiAgICAgICAgICBpZiAoKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTlVNRVJJQyB8fCBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4gfHwgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5URVhUIHx8IGNvbHVtbi50eXBlID09PSB1bmRlZmluZWQgfHwgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFIHx8IGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04pICYmIGNvbHVtbi52YWx1ZSAmJiB0aGlzLnJvd3NEYXRhPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgICBpZiAoY29sdW1uLnZhbHVlICYmIChyb3dbY29sdW1uLmZpZWxkXSA9PT0gbnVsbCB8fCByb3dbY29sdW1uLmZpZWxkXSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gY29sdW1uLnZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGNvbnZlcnQgc3RyaW5nIHRpbWUgaW50byB0aGUgZGF0ZVxuICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUpIHtcbiAgICAgICAgICAgIGlmIChjb2x1bW4udGltZU9ubHkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSAmJlxuICAgICAgICAgICAgICAgICAgKHJvd1tjb2x1bW4uZmllbGRdLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1BNJykgfHxcbiAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0udG9TdHJpbmcoKS5pbmNsdWRlcygnQU0nKSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gc2V0VGltZUluRGF0ZShyb3dbY29sdW1uLmZpZWxkXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNvbHVtbi5taW51dGVzSW50ZXJ2YWwpIHtcbiAgICAgICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyb3dbY29sdW1uLmZpZWxkXSkge1xuICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBuZXcgRGF0ZShyb3dbY29sdW1uLmZpZWxkXSBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHNldCBmaWx0ZXIgdmFsdWVcbiAgICAgICAgICBpZiAoY29sdW1uLmZpbHRlciAmJiBjb2x1bW4uZmlsdGVyVmFsdWUgJiYgY29sdW1uLmZpbHRlcmluZyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBzZXQgRGlzcGxheVRleHQgd2hlbiB2YWx1ZSBpcyBpbiBjdXJseSBicmFja2V0cy5cbiAgICAgICAgICB0aGlzLnNldERpc3BsYXlUZXh0VmFsdWUoY29sdW1uKTtcblxuICAgICAgICAgIC8vQWdncmVnYXRlIHNjZW5hcmlvXG4gICAgICAgICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgJiYgY29sdW1uLmFnZ3JlZ2F0ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmFnZ3JlZ2F0ZUZvb3RlciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNldEFnZ3JlZ2F0ZVRleHQoY29sdW1uKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgc2VhcmNoRmlsdGVycztcbiAgICAgICAgICBpZiAoIXRoaXMuc29mdENhY2hpbmcgJiYgdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQpIHtcbiAgICAgICAgICAgIHNlYXJjaEZpbHRlcnMgPSBKU09OLnBhcnNlKFxuICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnU2V0RmlsdGVycy0nICsgdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmwpIGFzIGFueVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgICAgICBzZWFyY2hGaWx0ZXJzID0gdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmxdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5oaWRlRmlsdGVyICYmXG4gICAgICAgICAgICBzZWFyY2hGaWx0ZXJzICYmXG4gICAgICAgICAgICBzZWFyY2hGaWx0ZXJzLmZpbHRlcnMgJiZcbiAgICAgICAgICAgIHNlYXJjaEZpbHRlcnMuZmlsdGVycz8ubGVuZ3RoID4gMFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgc2VhcmNoRmlsdGVycy5maWx0ZXJzLmZvckVhY2goKHg6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoeC5maWVsZCA9PT0gY29sdW1uLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbj8uZmlsdGVyPy50eXBlID09PSAnY2FsZW5kYXInICYmIHgudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZSA9IG5ldyBEYXRlKHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHgudmFsdWUsICdNTS1kZC1ZWScpIGFzIHN0cmluZyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4pIHtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZSA9IHgudmFsdWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh4LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4uZmlsdGVyVmFsdWUgPSB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGNvbnZlcnRpbmcgZGlzcGxheUZpZWxkIHRvTG93ZXJjYXNlXG4gICAgICAgICAgaWYgKGNvbHVtbi5kaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICAgIGNvbHVtbi5kaXNwbGF5RmllbGQgPSBjb2x1bW4uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHNldCBBdXRvQ29tcGxldGUgRGF0YVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQVVUT0NPTVBMRVRFICYmXG4gICAgICAgICAgICB0aGlzLnJvd3NEYXRhICYmXG4gICAgICAgICAgICB0aGlzLnJvd3NEYXRhPy5sZW5ndGggPiAwXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgICAvLyBjb252ZXJ0IHN0cmluZyB0aGF0IGNvbnRhaW5zIGNvbW1hIGludG8gYXJyYXlzXG4gICAgICAgICAgICAgIGlmIChyb3dbY29sdW1uLmZpZWxkXT8udG9TdHJpbmcoKS5pbmNsdWRlcygnOycpKSB7XG4gICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXVxuICAgICAgICAgICAgICAgICAgPy50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAuc3BsaXQoJzsnKVxuICAgICAgICAgICAgICAgICAgPy5tYXAoKHZhbHVlOiBhbnkpID0+ICh7IFtjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXTogcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdLCBbY29sdW1uLm9wdGlvbkxhYmVsPy50b0xvd2VyQ2FzZSgpXTogdmFsdWUsIFtjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldOiB2YWx1ZSB9KSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qga2V5OiBhbnkgPSBPYmplY3Qua2V5cyhyb3cpLmZpbmQoKHgpID0+IHggPT09IGNvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgLy8gY29udmVydCBzaW1wbGUgc3RyaW5nIGludG8gYXJyYXlcbiAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJvd1trZXldKSAmJiByb3dba2V5XSkge1xuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4uZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICByb3dba2V5XSA9IFt7IFtjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXTogcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdLCBbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXTogcm93W2tleV0gfV07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW4ub3B0aW9uTGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcm93W2tleV0gPSBbeyBbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXTogcm93W2tleV0sIFtjb2x1bW4ub3B0aW9uTGFiZWw/LnRvTG93ZXJDYXNlKCldOiByb3dba2V5XSB9XTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd1trZXldID0gW3sgW2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV06IHJvd1trZXldIH1dO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy93aGVuIHdlIGFkZCBhIG5ldyByb3csIGl0IHNldCB0aGUgZGVmYXVsdCB2YWx1ZVxuICAgICAgICAgIGlmIChjb2x1bW4udmFsdWUpIHtcbiAgICAgICAgICAgIGxldCBrZXkgPSBPYmplY3Qua2V5cyh0aGlzLm5ld0dyaWRSb3cpLmZpbmQoKHgpID0+IHg/LnRvTG93ZXJDYXNlKCkgPT09IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgIGlmICgha2V5KSB7XG4gICAgICAgICAgICAgIHRoaXMubmV3R3JpZFJvd1tjb2x1bW4uZmllbGRdID0gY29sdW1uLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuYWx3YXlzSGlkZGVuICYmIGdldFNlbGVjdGVkQ29sPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5zZXRTZWxlY3RDb2x1bW5zKGdldFNlbGVjdGVkQ29sKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldFNlbGVjdENvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2Uucm93cykge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ2xvYmFsRmlsdGVyQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlYXJjaEdsb2JhbEZpbHRlckJ0bicpO1xuICAgICAgICAgICAgaWYgKGdsb2JhbEZpbHRlckJ0bikge1xuICAgICAgICAgICAgICB0aGlzLnNob3dGaWx0ZXJidG4gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY2xhc3NFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaGlnaGxpZ2h0ZWQtcm93Jyk7XG4gICAgICAgICAgICBpZiAoY2xhc3NFbGVtZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgY2xhc3NFbGVtZW50WzBdLnNjcm9sbEludG9WaWV3KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgNTAwKTtcblxuICAgICAgICAgIGlmICh0aGlzLmVkaXRBbGxSb3dzICYmIHRoaXMucm93c0RhdGE/Lmxlbmd0aCA+IDAgJiYgdGhpcy5jb2x1bW5zPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRBbGxSb3dzQXRPbmNlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnNldERyb3Bkb3duZGF0YVZhbHVlID0gdHJ1ZTtcbiAgICAgIGNvbnN0IGdsb2JhbFNlYXJjaGJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnbG9iYWxTZWFyY2hidG4nKTtcbiAgICAgIGlmIChnbG9iYWxTZWFyY2hidG4pIHtcbiAgICAgICAgdGhpcy5zZWFyY2hHcmlkRmlsdGVyID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5yb3dzRGF0YT8ubGVuZ3RoID4gMCAmJiB0aGlzLmdlbmVyYXRlUm93c0RhdGFDb3B5KSB7XG4gICAgICAgIHRoaXMucm93c0RhdGFDb3B5ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnJvd3NEYXRhKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHNldFNlbGVjdENvbHVtbnMoY29sdW1ucykge1xuICAgIHRoaXMuX3NlbGVjdGVkQ29sdW1ucyA9IFtdO1xuICAgIGNvbHVtbnM/LmZvckVhY2goKHgsIGkpID0+IHtcbiAgICAgIGlmICgheC5oaWRkZW4pIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zW2ldKSB7XG4gICAgICAgICAgeC52YWx1ZSA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zW2ldLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkQ29sdW1ucy5wdXNoKHgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXV0b0NvbXBsZXRlU2VsZWN0ZWRWYWx1ZShyb3c6IGFueSwgY29sdW1uOiBJR3JpZENvbHVtbiwgdmFsdWUpIHtcbiAgICBpZiAoY29sdW1uLm9wdGlvbkxhYmVsKSB7XG4gICAgICBjb25zdCB2YWx1ZUtleSA9IGNvbHVtbi5vcHRpb25WYWx1ZSA/IGNvbHVtbi5vcHRpb25WYWx1ZSA6IGNvbHVtbi5maWVsZDtcbiAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gWy4uLnJvd1tjb2x1bW4uZmllbGRdLCB7XG4gICAgICAgIFtjb2x1bW4ub3B0aW9uTGFiZWw/LnRvTG93ZXJDYXNlKCldOiB2YWx1ZVtjb2x1bW4ub3B0aW9uTGFiZWw/LnRvTG93ZXJDYXNlKCldLCBbdmFsdWVLZXk/LnRvTG93ZXJDYXNlKCldOiB2YWx1ZVt2YWx1ZUtleT8udG9Mb3dlckNhc2UoKV0sXG4gICAgICAgIFtjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldOiB2YWx1ZVt2YWx1ZUtleT8udG9Mb3dlckNhc2UoKV1cbiAgICAgIH1dO1xuICAgICAgY29uc3QgaW5kZXggPSByb3dbY29sdW1uLmZpZWxkXT8uZmluZEluZGV4KCh4KSA9PiBKU09OLnN0cmluZ2lmeSh4KSA9PT0gSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcbiAgICAgIHJvd1tjb2x1bW4uZmllbGRdLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgLy8gc2V0IERpc3BsYXlUZXh0IHdoZW4gdmFsdWUgaXMgaW4gY3VybHkgYnJhY2tldHMuXG4gIHNldERpc3BsYXlUZXh0VmFsdWUoY29sdW1uOiBJR3JpZENvbHVtbikge1xuICAgIHRoaXMucm93c0RhdGE/LmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxJTksgfHxcbiAgICAgICAgRUdyaWRDb2x1bW5UeXBlLkRJQUxPRyB8fFxuICAgICAgICBFR3JpZENvbHVtblR5cGUuSUZSQU1FXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXTtcbiAgICAgICAgaWYgKGNvbHVtbi5kaXNwbGF5VGV4dCAmJiBjb2x1bW4uZGlzcGxheVRleHQuaW5jbHVkZXMoJ3snKSkge1xuICAgICAgICAgIGNvbnN0IGRpc3BsYXlUZXh0ID0gY29sdW1uLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAucmVwbGFjZSgneycsICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoJ30nLCAnJyk7XG4gICAgICAgICAgaWYgKGRpc3BsYXlUZXh0ICYmIGZpZWxkKSB7XG4gICAgICAgICAgICBmaWVsZC5kaXNwbGF5VGV4dCA9IHJvd1tkaXNwbGF5VGV4dC50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmRpc3BsYXlUZXh0ICYmIGZpZWxkKSB7XG4gICAgICAgICAgZmllbGQuZGlzcGxheVRleHQgPSBjb2x1bW4uZGlzcGxheVRleHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNldE51bWVyaWNNaW5NeEZyYWN0aW9uKGNvbHVtbjogYW55KSB7XG4gICAgbGV0IGRpZ2l0SW5mbyA9ICcyJztcbiAgICBpZiAoY29sdW1uPy5mb3JtYXQudHlwZSA9PT0gJ3BlcmNlbnQnICYmICFjb2x1bW4/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvKSB7XG4gICAgICBkaWdpdEluZm8gPSAnMCdcbiAgICB9IGVsc2UgaWYgKGNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm8pIHtcbiAgICAgIGRpZ2l0SW5mbyA9IGNvbHVtbi5mb3JtYXQuZm9ybWF0UGFyYW1zLmRpZ2l0c0luZm87XG4gICAgfVxuICAgIHJldHVybiBkaWdpdEluZm87XG4gIH1cblxuICAvLyBzZXQgdGhlIGZvcm1hdCBvZiBjdXJyZW5jeSAmJiBudW1iZXIgJiYgZGVjaW1hbCAmJiBwZXJjZW50XG4gIHNldE51bWVyaWNGb3JtYXQoY29sdW1uOiBhbnksIHJvdzogYW55KSB7XG4gICAgcm93ID0gb2JqQ29udmVydFRvTG93ZXIocm93KTtcbiAgICBsZXQgdmFsdWU6IGFueSA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxuICAgICAgPyByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHRcbiAgICAgIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKVxuICAgICAgICA/IHJvd1tyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXVxuICAgICAgICA6IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXVxuICAgICAgICAgID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICA6IChyb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8udGV4dCB8fCByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8udGV4dCA9PT0gMCB8fCByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8udGV4dCA9PT0gbnVsbClcbiAgICAgICAgICAgID8gcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/LnRleHQgOiByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXTtcbiAgICBpZiAodGhpcy50eXBlT2YodmFsdWUpID09PSAnbnVtYmVyJyAmJiB2YWx1ZSA9PT0gMCkge1xuICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgIH1cbiAgICBsZXQgZm9ybWF0UGFyYW1zID0gY29sdW1uLmZvcm1hdD8uZm9ybWF0UGFyYW1zO1xuICAgIGxldCBkaWdpdHNJbmZvID0gZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvO1xuICAgIGlmIChjb2x1bW4uZm9ybWF0ICYmIHZhbHVlKSB7XG4gICAgICBzd2l0Y2ggKGNvbHVtbi5mb3JtYXQ/LnR5cGUpIHtcbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuQ1VSUkVOQ1k6XG4gICAgICAgICAgdmFsdWUgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoXG4gICAgICAgICAgICBmb3JtYXRQYXJhbXM/LmxvY2FsZSA/IGZvcm1hdFBhcmFtcy5sb2NhbGUgOiAnZW4tVVMnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdHlsZTogJ2N1cnJlbmN5JyxcbiAgICAgICAgICAgICAgY3VycmVuY3k6IGZvcm1hdFBhcmFtcz8uY3VycmVuY3kgPyBmb3JtYXRQYXJhbXMuY3VycmVuY3kgOiAnVVNEJyxcbiAgICAgICAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiBkaWdpdHNJbmZvID8gZGlnaXRzSW5mbyA6ICcyJyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApPy5mb3JtYXQodmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVHcmlkRm9ybWF0VHlwZS5ERUNJTUFMOlxuICAgICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSkudG9GaXhlZChkaWdpdHNJbmZvID8gZGlnaXRzSW5mbyA6ICcyJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRUdyaWRGb3JtYXRUeXBlLlBFUkNFTlQ6XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZSArICclJztcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLy9DaGFuZ2UgZHJvcGRvd24gdmx1ZSBiYXNlZCBvbiBvcHRpb24gbGFiZWwgYW5kIG9wdGlvbnZhbHVlXG4gIHNldERyb3Bkb3duVmFsdWUoY29sdW1uOiBJR3JpZENvbHVtbiwgc2VsZWN0ZWRSb3c/OiBhbnksIGNoYW5nZT86IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5yb3dzRGF0YSAmJiB0aGlzLnJvd3NEYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhyb3cpPy5maW5kKChrZXkpID0+IGtleSA9PT0gY29sdW1uLmZpZWxkKSkge1xuICAgICAgICAgIGlmIChjb2x1bW4pIHtcbiAgICAgICAgICAgIGNvbHVtbi5vcHRpb25MYWJlbCA9IGNvbHVtbi5vcHRpb25MYWJlbFxuICAgICAgICAgICAgICA/IGNvbHVtbi5vcHRpb25MYWJlbFxuICAgICAgICAgICAgICA6ICdsYWJlbCc7XG4gICAgICAgICAgICBjb2x1bW4ub3B0aW9uVmFsdWUgPSBjb2x1bW4ub3B0aW9uVmFsdWVcbiAgICAgICAgICAgICAgPyBjb2x1bW4ub3B0aW9uVmFsdWVcbiAgICAgICAgICAgICAgOiAndmFsdWUnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbHVtbi5kYXRhPy5maW5kKFxuICAgICAgICAgICAgKHJlY29yZDogYW55KSA9PlxuICAgICAgICAgICAgICByZWNvcmRbY29sdW1uLm9wdGlvblZhbHVlXT8udG9TdHJpbmcoKSA9PT1cbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKClcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGVkaXRlZFJvdyA9IHNlbGVjdGVkUm93ICYmIE9iamVjdC5rZXlzKHNlbGVjdGVkUm93KS5sZW5ndGggPiAwID8gc2VsZWN0ZWRSb3dbdGhpcy5kYXRhS2V5XSA9PT0gcm93W3RoaXMuZGF0YUtleV0gOiBmYWxzZTtcbiAgICAgICAgICBpZiAodmFsdWUgJiYgZWRpdGVkUm93KSB7XG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHZhbHVlW2NvbHVtbi5vcHRpb25WYWx1ZV07XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSAmJiBjaGFuZ2UgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHZhbHVlW2NvbHVtbi5vcHRpb25MYWJlbF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvL21hbmlwdWxhdGUgY2hlY2tib3ggc3RyaW5nIHZhbHVlIHRvIHRydWUgYW5kIGZhbHNlLlxuICBjaGFuZ2VDaGVja2JveFN0cmluZ1ZhbHVlKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuY29sdW1ucyAmJlxuICAgICAgdGhpcy5yb3dzRGF0YSAmJlxuICAgICAgdGhpcy5yb3dzRGF0YS5sZW5ndGggPiAwICYmXG4gICAgICB0aGlzLmNvbHVtbnMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOICYmIHRoaXMuc2V0RHJvcGRvd25kYXRhVmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnNldERyb3Bkb3duVmFsdWUoY29sdW1uLCB7fSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICh0eXBlb2YgKHJvd1tjb2x1bW4uZmllbGRdID09PSAnc3RyaW5nJykgJiZcbiAgICAgICAgICAgICAgICAocm93W2NvbHVtbi5maWVsZF0gPT09ICcxJyB8fCByb3dbY29sdW1uLmZpZWxkXSA9PT0gJzAnKSkgfHxcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPT09ICdZJyB8fFxuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9PT0gJ04nXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPVxuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID09PSAnMScgfHwgcm93W2NvbHVtbi5maWVsZF0gPT09ICdZJ1xuICAgICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHJvd0RhdGFcbiAgICogUGFzc2VzIGRhdGEgb2YgY2xpY2tlZCByb3cgdG8gcGFyZW50XG4gICAqL1xuICBoYW5kbGVSb3dDbGljayhyb3dEYXRhOiBhbnkpIHtcbiAgICB0aGlzLnJvd0NsaWNrRGF0YSA9IHJvd0RhdGE7XG4gICAgaWYgKCF0aGlzLmVkaXRBbGxSb3dzKSB7XG4gICAgICB0aGlzLm9uUm93Q2xpY2suZW1pdChyb3dEYXRhKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGNvbHVtbkRhdGFcbiAgICogUGFzc2VzIHNvcnRpbmcgaW5mb3JtYXRpb24gdG8gcGFyZW50IG9uIHNvcnQgY2hhbmdlXG4gICAqL1xuICBoYW5kbGVTb3J0Q2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICBsZXQgc29ydERpcmVjdGlvbiA9IG51bGw7XG4gICAgbGV0IHNvcnRGaWVsZDogc3RyaW5nID0gJyc7XG4gICAgaWYgKGV2ZW50Lm11bHRpc29ydG1ldGEgJiYgZXZlbnQubXVsdGlzb3J0bWV0YVswXS5vcmRlcikge1xuICAgICAgc29ydERpcmVjdGlvbiA9XG4gICAgICAgIGV2ZW50Lm11bHRpc29ydG1ldGFbMF0ub3JkZXIgPT0gMVxuICAgICAgICAgID8gRUdyaWRTb3J0RGlyZWN0aW9uLkFTQ1xuICAgICAgICAgIDogRUdyaWRTb3J0RGlyZWN0aW9uLkRFU0M7XG4gICAgICBzb3J0RmllbGQgPSBldmVudC5tdWx0aXNvcnRtZXRhWzBdLmZpZWxkO1xuICAgIH1cbiAgICBsZXQgc29ydHM6IElHcmlkU29ydCA9IHtcbiAgICAgIGZpZWxkOiBzb3J0RmllbGQsXG4gICAgICBkaXJlY3Rpb246IHNvcnREaXJlY3Rpb24gYXMgRUdyaWRTb3J0RGlyZWN0aW9uLFxuICAgICAgcHJpb3JpdHk6IDAsXG4gICAgfTtcbiAgICB0aGlzLm9uU29ydENoYW5nZS5lbWl0KHNvcnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICogUGFzc2VzIGFwcGxpZWQgZmlsdGVycyB0byBwYXJlbnQgb24gZmlsdGVyIGNoYW5nZVxuICAgKi9cbiAgaGFuZGxlRmlsdGVyQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoZmlsdGVyOiBhbnkpID0+IHtcbiAgICAgIGlmICghZXZlbnQuZmlsdGVyc1tmaWx0ZXIuZmllbGRdPy52YWx1ZSAmJiAhZmlsdGVyLnZhbHVlKSB7XG4gICAgICAgIGZpbHRlci52YWx1ZSA9ICcnO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMub25GaWx0ZXJDaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IDogRXZlbnRcbiAgICogQHBhcmFtIGNvbHVtbkFjdGlvbiA6IElHcmlkQ29sdW1uQWN0aW9uXG4gICAqIEBwYXJhbSByb3cgOiBhbnlcbiAgICogU3RvcCB0aGUgY2xpY2sgZXZlbnQgcHJvcGFnYXRpb24gdG8gcGFyZW50XG4gICAqIENhbGxiYWNrcyB0aGUgcm93IGRhdGEgdG8gcGFyZW50XG4gICAqL1xuXG4gIC8qKlxuICAgKiBpbnZva2Ugb25DbGljayBldmVudCAmIG9wZW4gSWZyYW1lIGluIGdyaWRcbiAgICovXG4gIGdyaWRJRnJhbWUoY29sdW1uOiBhbnksIHJvd3M6IGFueSwgcm93OiBhbnkpIHtcbiAgICB0aGlzLm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdyk7XG4gICAgY29uc3QgcmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oSWZyYW1lQ29tcG9uZW50LCB7XG4gICAgICBoZWFkZXI6IGNvbHVtbi5oZWFkZXIsXG4gICAgICB3aWR0aDogJzgwJScsXG4gICAgICBoZWlnaHQ6ICc4MCUnLFxuICAgICAgZGF0YToge1xuICAgICAgICB2YWx1ZTogcm93cyxcbiAgICAgICAgaUZyYW1lSWQ6IGNvbHVtbi5kaXNwbGF5VGV4dCA/IGNvbHVtbi5kaXNwbGF5VGV4dCA6IGNvbHVtbi5maWVsZCxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgdGhpcy5zZXREeW5hbWljRGlhbG9nUmVmKHJlZik7XG4gICAgY29uc3QgY29tcG9uZW50TmFtZSA9IGNvbHVtbi5jb21wb25lbnQ/Lm5hbWU7XG4gICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgIHRoaXMucGFnZUxvZ2dlclNlcnZpY2Uuc2F2ZVBhZ2VMb2dnZXJJbmZvKHRoaXMucm91dGVyLnVybD8uc3Vic3RyaW5nKDEpLCBjb21wb25lbnROYW1lKTtcbiAgICB9XG4gICAgZHJhZ2dhYmxlRGlhbG9nKGNvbHVtbj8uZmllbGQgPyBjb2x1bW4/LmZpZWxkIDogY29sdW1uPy5oZWFkZXIpXG4gICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgIGlmIChyZXMgJiYgY29sdW1uLm9uUmV0dXJuKSB7XG4gICAgICAgIGNvbHVtbi5vblJldHVybihyZXMpO1xuICAgICAgfSBlbHNlIGlmIChyZXMgJiYgY29sdW1uLm9uQ2hhbmdlKSB7XG4gICAgICAgIGNvbHVtbi5vbkNoYW5nZShyZXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYWRkTmV3Um93KHJvdzogYW55LCBhZGRSb3c6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHRoaXMucmVmcmVzaEdyaWRUZXJtaW5hdG9yKClcbiAgICB0aGlzLmNvbXBvbmVudFRhYmxlUmVmID0gdGhpcy50YWJsZTtcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi5maWx0ZXIgJiZcbiAgICAgICAgY29sdW1uLmNvbXBvbmVudCAmJlxuICAgICAgICBjb2x1bW4uZmlsdGVyLnR5cGUgPT09ICdjYWxlbmRhcidcbiAgICAgICkge1xuICAgICAgICBpZiAoYWRkUm93KSB7XG4gICAgICAgICAgdGhpcy5yb3dzRGF0YVswXVtjb2x1bW4uZmllbGQgKyAnX3NlY29uZFR5cGUnXSA9IEVHcmlkQ29sdW1uVHlwZS5EQVRFO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX3NlY29uZFR5cGUnXSA9IEVHcmlkQ29sdW1uVHlwZS5EQVRFO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSAmJiBjb2x1bW4uYWdncmVnYXRlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5hZ2dyZWdhdGVGb290ZXIgPSB0cnVlO1xuICAgICAgICB0aGlzLnNldEFnZ3JlZ2F0ZVRleHQoY29sdW1uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnJvd0NsaWNrRGF0YSA9IHJvdztcbiAgICB0aGlzLmFkZE5ld1Jvd0NoZWNrID0gdHJ1ZTtcbiAgICB0aGlzLmRyb3Bkb3duSW5wdXQgPSBmYWxzZTtcbiAgICB0aGlzLnNvcnREaXNhYmxlZCA9IHRydWU7XG4gICAgdGhpcy5vbkdyaWRSb3dBZGQuZW1pdChyb3cpO1xuICB9XG5cbiAgLyoqXG4gICAqIG9wZW4gRGlhbG9nIGluIGdyaWRcbiAgICovXG4gIG9wZW5HcmlkRGlhbG9nKGNvbHVtbjogSUdyaWRDb2x1bW4gfCBhbnksIHJvdzogYW55LCBldmVudD86IGFueSkge1xuICAgIGlmIChldmVudCAmJiBldmVudC5jdHJsS2V5ICYmIGNvbHVtbi5jb21wb25lbnQpIHtcbiAgICAgIGxldCBkYXRhUGFyYW1zID0gY29sdW1uLmRhdGE/LmRhdGEgPyBjb2x1bW4uZGF0YT8uZGF0YSA6IHt9O1xuICAgICAgdGhpcy5oeXBlcmxpbmtTZXJ2aWNlLm9wZW5EaWFsb2dJbk5ld1RhYihjb2x1bW4uY29tcG9uZW50LCBkYXRhUGFyYW1zLCByb3cpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wZW5Db21wb25lbnRJbkRpYWxvZyhjb2x1bW4sIHJvdyk7XG4gICAgfVxuICB9XG5cbiAgb3BlbkNvbXBvbmVudEluRGlhbG9nKGNvbHVtbjogSUdyaWRDb2x1bW4gfCBhbnksIHJvdzogYW55KSB7XG4gICAgdmFyIGlzRGlzYWJsZWQgPSBjb2x1bW4uZGlzYWJsZWRcbiAgICAgID8gdHJ1ZVxuICAgICAgOiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzYWJsZWRcbiAgICAgICAgPyB0cnVlXG4gICAgICAgIDogZmFsc2U7XG4gICAgdGhpcy5vbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5yb3dDbGlja0RhdGEgPSByb3c7XG4gICAgICBpZiAoY29sdW1uLmRhdGEgJiYgY29sdW1uLmRhdGEuZGF0YSAmJiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSkge1xuICAgICAgICBjb2x1bW4uZGF0YS5kYXRhID0gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpYWxvZ0RhdGE/LmRhdGEgPyByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlhbG9nRGF0YS5kYXRhIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpYWxvZ0RhdGE7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2x1bW4uY29tcG9uZW50ICYmIGNvbHVtbi5kYXRhICYmIHRoaXMucm93Q2xpY2tEYXRhICYmICFpc0Rpc2FibGVkKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7IC4uLmNvbHVtbi5kYXRhIH07XG4gICAgICAgIGRhdGEuZGF0YSA9IGF1dG9TZXRMb29rdXBEYXRhKFxuICAgICAgICAgIGNvbHVtbi5kYXRhLmRhdGEsXG4gICAgICAgICAgdGhpcy5yb3dDbGlja0RhdGFcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3Blbihjb2x1bW4uY29tcG9uZW50LCBkYXRhKTtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UgPSB0aGlzLmludGVyY2VwdERpYWxvZ0Nsb3NlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc2V0RHluYW1pY0RpYWxvZ1JlZih0aGlzLmRpYWxvZ1JlZik7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBjb2x1bW4uY29tcG9uZW50Py5uYW1lO1xuICAgICAgICBpZiAoY29tcG9uZW50TmFtZSkge1xuICAgICAgICAgIHRoaXMucGFnZUxvZ2dlclNlcnZpY2Uuc2F2ZVBhZ2VMb2dnZXJJbmZvKHRoaXMucm91dGVyLnVybD8uc3Vic3RyaW5nKDEpLCBjb21wb25lbnROYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBkcmFnZ2FibGVEaWFsb2coY29sdW1uPy5maWVsZCA/IGNvbHVtbj8uZmllbGQgOiBjb2x1bW4/LmhlYWRlcilcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYub25DbG9zZS5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChkYXRhICYmIGNvbHVtbi5vblJldHVybikge1xuICAgICAgICAgICAgY29sdW1uLm9uUmV0dXJuKGRhdGEsIHRoaXMucm93Q2xpY2tEYXRhKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuYnJvd3NlckNsb3NlRXZlbnQodHJ1ZSk7XG4gICAgICAgICAgICBpZiAoY29sdW1uLm9uQ2hhbmdlKSB7XG4gICAgICAgICAgICAgIGNvbHVtbi5vbkNoYW5nZShkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sIDEwKTtcbiAgfVxuXG4gIGJyb3dzZXJDbG9zZUV2ZW50KGV2ZW50OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQgPSBldmVudDtcbiAgfVxuXG4gIHNldE11bHRpU2VsZWN0RGF0YShjb2x1bW46IElHcmlkQ29sdW1uLCBzZWxlY3RlZFZhbHVlOiBhbnkpIHtcbiAgICBpZiAoc2VsZWN0ZWRWYWx1ZSAmJiBjb2x1bW4udHlwZSA9PSBFR3JpZENvbHVtblR5cGUuTVVMVElTRUxFQ1QpIHtcbiAgICAgIGlmIChzZWxlY3RlZFZhbHVlICYmIHNlbGVjdGVkVmFsdWU/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCcsJykpIHtcbiAgICAgICAgc2VsZWN0ZWRWYWx1ZSA9IHNlbGVjdGVkVmFsdWU/LnRvU3RyaW5nKCk/LnNwbGl0KCcsJyk/Lm1hcCgodmFsdWUpID0+IGNvbHVtbi5kYXRhPy5maW5kKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZT8udG9TdHJpbmcoKSA9PT0gdmFsdWU/LnRvU3RyaW5nKCkpPy5sYWJlbCk/LnRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxlY3RlZFZhbHVlID0gY29sdW1uLmRhdGE/LmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlPy50b1N0cmluZygpID09PSBzZWxlY3RlZFZhbHVlPy50b1N0cmluZygpKT8ubGFiZWw7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3RlZFZhbHVlO1xuICB9XG5cbiAgc2V0VGV4dEJveFJlYWRPbmx5VmFsdWUocm93OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgbGV0IHZhbHVlOiBhbnk7XG4gICAgaWYgKGNvbHVtbi5kaXNwbGF5VGV4dCkge1xuICAgICAgdmFsdWUgPSBjb2x1bW4uZGlzcGxheVRleHQ7XG4gICAgfSBlbHNlIGlmIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHQpIHtcbiAgICAgIHZhbHVlID0gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlUZXh0O1xuICAgIH0gZWxzZSBpZiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZCkge1xuICAgICAgdmFsdWUgPSByb3dbcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV07XG4gICAgfSBlbHNlIGlmIChjb2x1bW4uZGlzcGxheUZpZWxkKSB7XG4gICAgICB2YWx1ZSA9IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSByb3dbY29sdW1uLmZpZWxkXTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIHJldHVybiBjb25kaXRpb25hbCBiYXNlIHZhbHVlIGFuZCB0aXRsZVxuICAgKi9cbiAgc2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdzogYW55LCBjb2x1bW46IGFueSkge1xuICAgIGRlbGV0ZSByb3dbJ3VuZGVmaW5lZCddO1xuICAgIGxldCB2YWx1ZTogYW55O1xuICAgIGlmIChjb2x1bW4udHlwZSA9PSBFR3JpZENvbHVtblR5cGUuREFURSkge1xuICAgICAgbGV0IG5ld1ZhbHVlOiBhbnk7XG4gICAgICBpZiAodHlwZW9mIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSkgPT09IFwib2JqZWN0XCIgJiYgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10pIHtcbiAgICAgICAgbmV3VmFsdWUgPSByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHRcbiAgICAgICAgICA/IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxuICAgICAgICAgIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgPyByb3dbcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICAgIDogcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/LnRleHRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1ZhbHVlID0gcm93W2NvbHVtbi5maWVsZF07XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXdWYWx1ZSkge1xuICAgICAgICBpZiAoY29sdW1uLnRpbWVPbmx5KSB7XG4gICAgICAgICAgdmFsdWUgPSB0aGlzLnNldFRpbWVGb3JtYXQobmV3VmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBmb3JtYXQgPSB0aGlzLnNldEZvcm1hdChjb2x1bW4pO1xuICAgICAgICAgIHZhbHVlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0obmV3VmFsdWU/LnRvU3RyaW5nKCkgPT09IFwiSW52YWxpZCBEYXRlXCIgPyBudWxsIDogbmV3VmFsdWUsIGZvcm1hdCA/IGZvcm1hdCA6IGNvbHVtbi5zaG93VGltZSA/IFwiTU0vZGQvWVlZWSwgaDptbSBhXCIgOiBcIk1NL2RkL1lZWVlcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPVxuICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHRcbiAgICAgICAgICA/IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5mb3JtYXQgPyB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dCwgdGhpcy5zZXRGb3JtYXQoY29sdW1uKSkgOlxuICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlUZXh0XG4gICAgICAgICAgOiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICA/IHJvd1tyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXVxuICAgICAgICAgICAgOiByb3dbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICAgICAgPyByb3dbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICAgICAgOiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSAmJlxuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0ID09PSBudWxsXG4gICAgICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgICAgIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgICAgICA/XG4gICAgICAgICAgICAgICAgICBjb2x1bW4/LmZpbHRlcj8udHlwZSA9PT0gJ2NhbGVuZGFyJyAmJiBjb2x1bW4udGltZU9ubHkgJiYgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgP1xuICAgICAgICAgICAgICAgICAgICAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQudG9TdHJpbmcoKS5pbmNsdWRlcygnQU0nKSB8fCByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dC50b1N0cmluZygpLmluY2x1ZGVzKCdQTScpKSA/XG4gICAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQgOiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dCwgJ2hoOm1tIGEnKVxuICAgICAgICAgICAgICAgICAgICA6IGNvbHVtbi5mb3JtYXQgPyB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dCwgdGhpcy5zZXRGb3JtYXQoY29sdW1uKSkgOiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgOiBjb2x1bW4uZm9ybWF0ID8gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocm93W2NvbHVtbi5maWVsZF0sIHRoaXMuc2V0Rm9ybWF0KGNvbHVtbikpXG4gICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgPyBjb2x1bW4uZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICAgICAgICA6IGNvbHVtbi5pY29uID8gY29sdW1uLmhlYWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF07XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHNldEZvcm1hdChjb2x1bW4pIHtcbiAgICBsZXQgZm9ybWF0ID0gJyc7XG4gICAgaWYgKGNvbHVtbj8uZm9ybWF0KSB7XG4gICAgICBjb2x1bW4uZm9ybWF0ID0gY29sdW1uLmZvcm1hdD8udHlwZSA/IGNvbHVtbi5mb3JtYXQudHlwZSA6IGNvbHVtbi5mb3JtYXQ7XG4gICAgICBzd2l0Y2ggKGNvbHVtbi5mb3JtYXQpIHtcbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuU01BTExEQVRFOiB7XG4gICAgICAgICAgZm9ybWF0ID0gJ01NL2RkL3l5JztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIEVHcmlkRm9ybWF0VHlwZS5TSE9SVERBVEU6IHtcbiAgICAgICAgICBmb3JtYXQgPSAnTU0vZGQveXl5eSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuTUVESVVNREFURToge1xuICAgICAgICAgIGZvcm1hdCA9ICdNIGQsIHl5JztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIEVHcmlkRm9ybWF0VHlwZS5MT05HREFURToge1xuICAgICAgICAgIGZvcm1hdCA9ICdNTS9kZC9ZWSwgaDptbSBhJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIEVHcmlkRm9ybWF0VHlwZS5QRVJJT0Q6IHtcbiAgICAgICAgICBmb3JtYXQgPSAnTU0veXknO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICBmb3JtYXQgPSBjb2x1bW4uZm9ybWF0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmb3JtYXRcbiAgfVxuXG4gIHNldERyb3Bkd29uUmVhZE9ubHlWYWx1ZShyb3c6IGFueSwgY29sdW1uOiBhbnkpIHtcbiAgICBkZWxldGUgcm93Wyd1bmRlZmluZWQnXTtcbiAgICBjb25zdCB2YWx1ZSA9IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXVxuICAgICAgPyByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF1cbiAgICAgIDogY29sdW1uLmRhdGE/LmZpbmQoZHJvcGRvd25WYWwgPT4gZHJvcGRvd25WYWw/LnZhbHVlID09IHJvd1tjb2x1bW4uZmllbGRdKVxuICAgICAgICA/IGNvbHVtbi5kYXRhPy5maW5kKGRyb3Bkb3duVmFsID0+IGRyb3Bkb3duVmFsPy52YWx1ZSA9PSByb3dbY29sdW1uLmZpZWxkXSk/LmxhYmVsXG4gICAgICAgIDogcm93W2NvbHVtbi5maWVsZF07XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cblxuICAvKipcbiAgICogb3BlbiBEZWxldGUgQ29uZmlybWF0aW9uIGRpYWxvZyB3aGVuIGNsaWNrIG9uIGRlbGV0ZSBpY29uIGluIEFjdGlvbiBjb2x1bW5cbiAgICovXG4gIGhhbmRsZUFjdGlvbkNsaWNrKGV2ZW50OiBFdmVudCwgY29sdW1uQWN0aW9uOiBJR3JpZENvbHVtbkFjdGlvbiwgcm93OiBhbnkpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoY29sdW1uQWN0aW9uLnRvb2x0aXAudG9Mb3dlckNhc2UoKSA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgIGlmIChjb2x1bW5BY3Rpb24uY29uZmlybURpYWxvZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgY29sdW1uQWN0aW9uLm9uQ2xpY2socm93KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgICAgICBtZXNzYWdlOiAnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgcmVjb3JkPycsXG4gICAgICAgICAgaGVhZGVyOiAnRGVsZXRlIENvbmZpcm1hdGlvbicsXG4gICAgICAgICAgaWNvbjogJ3BpIHBpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlJyxcbiAgICAgICAgICBrZXk6ICdoYW5kbGVjb2x1bW5BY3Rpb25zJyxcbiAgICAgICAgICBhY2NlcHQ6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbHVtbkFjdGlvbi5vbkNsaWNrKHJvdyk7XG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY2xvc2UoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlamVjdDogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNsb3NlKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbHVtbkFjdGlvbi5vbkNsaWNrKHJvdyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCA6IExhenlMb2FkRXZlbnRcbiAgICogVHJpZ2dlcnMgZXZlcnl0aW1lIGEgc2VydmVyIHNpZGUgZmlsdGVyIGlzIHRyaWdnZXJcbiAgICovXG4gIGhhbmRsZVNlcnZlclNpZGVFdmVudHMoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZ3JpZGZpbHRlciA9IGV2ZW50O1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zICYmIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuZm9yRWFjaCgoeDogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGV2ZW50LmZpbHRlcnNbeC5maWVsZF0pIHtcbiAgICAgICAgICAgIGV2ZW50LmZpbHRlcnNbeC5maWVsZF0udmFsdWUgPSB4LnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5NVUxUSVNFTEVDVCA/IHguZmlsdGVyVmFsdWU/LnRvU3RyaW5nKCkgOiB4LmZpbHRlclZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9hZGluZyA9IHRoaXMuYXV0b0xvYWREYXRhO1xuICAgICAgdGhpcy5zZXJ2ZXJGaWx0ZXJzID0ge1xuICAgICAgICBmaWx0ZXJzOiB0aGlzLmxvb2t1cEZpbHRlcnNcbiAgICAgICAgICA/IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0R3JpZEZpbHRlcnMoZXZlbnQsIHRoaXMuc2VsZWN0ZWRDb2x1bW5zKVxuICAgICAgICAgIDogdGhpcy5ncmlkU2VydmljZS5wcmVwYXJlQmFzaWNGaWx0ZXJzKGV2ZW50LCB0aGlzLnNlbGVjdGVkQ29sdW1ucyksXG4gICAgICAgIHNvcnRzOiB0aGlzLmdyaWRTZXJ2aWNlLmdldEdyaWRTb3J0cyhldmVudCwgdGhpcy5zZWxlY3RlZENvbHVtbnMpLFxuICAgICAgICAuLi4odGhpcy5wYWdpbmF0aW9uICYmIHtcbiAgICAgICAgICBwYWdlOiB0aGlzLmdyaWRTZXJ2aWNlLmdldEdyaWRQYWdpbmF0aW9uKGV2ZW50KSxcbiAgICAgICAgICBwYWdlU2l6ZTogZXZlbnQucm93cyB8fCAxMCxcbiAgICAgICAgfSksXG4gICAgICB9O1xuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuc2VydmVyRmlsdGVycz8uZmlsdGVycyAmJlxuICAgICAgICB0aGlzLnNlcnZlckZpbHRlcnM/LmZpbHRlcnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAodGhpcy5hbGxvd0NhY2hpbmcgfHwgdGhpcy5zb2Z0Q2FjaGluZylcbiAgICAgICkge1xuICAgICAgICBpZiAoIXRoaXMuc29mdENhY2hpbmcgJiYgdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQpIHtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnU2V0RmlsdGVycy0nICsgdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmwsIEpTT04uc3RyaW5naWZ5KHRoaXMuc2VydmVyRmlsdGVycykpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgICAgdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmxdID0gdGhpcy5zZXJ2ZXJGaWx0ZXJzO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLnNvZnRDYWNoaW5nRmlsdGVyc1t0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHRoaXMuY3VycmVudFVybF0gPSB7fTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2VydmVyRmlsdGVyVmFsdWVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNlcnZlckZpbHRlcnMpKTtcbiAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzID0gKHRoaXMuc2VydmVyRmlsdGVycy5maWx0ZXJzIHx8IFtdKS5jb25jYXQoXG4gICAgICAgIHRoaXMuZ2xvYmFsRGF0YVxuICAgICAgKTtcbiAgICAgIHRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkID0gZmFsc2U7XG4gICAgICB0aGlzLmdyaWRTZXJ2aWNlLnJvd1VwZGF0ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5vblNlcnZlclNpZGVFdmVudENoYW5nZS5lbWl0KHNlcnZlckZpbHRlclZhbHVlcyk7XG4gICAgfSwgOTUwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICogUGFzc2VzIGFwcGxpZWQgcGFnaW5hdGlvbiB0byBwYXJlbnQgb24gcGFnZSBjaGFuZ2VcbiAgICovXG4gIGhhbmRsZVNlcnZlclNpZGVQYWdpbmF0aW9uKGV2ZW50OiBJR3JpZFBhZ2luYXRpb25FdmVudCkge1xuICAgIHRoaXMuZWRpdGluZ1Jvd0tleXMgPSB7fTtcbiAgICB0aGlzLm9uUGFnZUNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy51c2VTZXJ2ZXJTaWRlRXZlbnRzICYmIHRoaXMucGFnaW5hdGlvbiAmJiB0aGlzLmRlZmF1bHRSb3dzICYmIHRoaXMuZWRpdEFsbFJvd3MgJiYgdGhpcy5yb3dzRGF0YT8ubGVuZ3RoID4gMCAmJiB0aGlzLmNvbHVtbnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5lZGl0QWxsUm93c0F0T25jZSgpO1xuICAgICAgfVxuICAgIH0sIDgwMCk7XG4gIH1cblxuICBzZWxlY3RlZFJvdyhyb3c6IGFueSkge1xuICAgIHRoaXMub25Sb3dDaGVja0JveC5lbWl0KHJvdyk7XG4gIH1cblxuICAvLyBzZXQgdGltZSBmb3JtYXRcbiAgc2V0VGltZUZvcm1hdChkYXRlOiBhbnkpIHtcbiAgICBsZXQgdmFsdWU6IGFueSA9ICcnO1xuICAgIGlmIChkYXRlPy50b1N0cmluZygpLmluY2x1ZGVzKCdBTScpIHx8IGRhdGU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1BNJykpIHtcbiAgICAgIHZhbHVlID0gc2V0VGltZUluRGF0ZShkYXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRlLCAnaGg6bW0gYScpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvL29wZW4gaHlwZXJsaW5rIGluIGVkaXQgY2FzZVxuICBvcGVuTGluayh1cmw6IGFueSkge1xuICAgIGlmICh1cmwpIHtcbiAgICAgIGNvbnN0IGxpbms6IGFueSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgIGxpbmsuaHJlZiA9IHVybDtcbiAgICAgIGxpbmsudGFyZ2V0ID0gJ19ibGFuayc7XG4gICAgICBsaW5rLmNsaWNrKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSByb3dcbiAgICogU2V0cyB2YWx1ZXMgdG8gZWRpdGFibGUgcm93XG4gICAqIFJvdydzIGRhdGEgaXMgcHJlc2V2ZWQgdG8gcHJldmVudCBtdXRhdGlvblxuICAgKiBSb3cgZGF0YUtleSBpcyBwcmVzZXJ2ZWQgdG8ga2VlcCB0aGUgcm93IHVuaXF1ZSBhbmQgaW4gZWRpdGFibGUgc3RhdGUgYXMgbG9uZyBhcyBub3Qgc2F2ZWRcbiAgICovXG5cbiAgcmVmcmVzaEdyaWRUZXJtaW5hdG9yKCkge1xuICAgIGlmICh0aGlzLnNldEdyaWRSZWZyZXNoVGltZSkge1xuICAgICAgdGhpcy5yZWxvYWRQYWdlPy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIG9uUm93RWRpdEluaXQocm93OiBhbnkpIHtcbiAgICB0aGlzLnJlZnJlc2hHcmlkVGVybWluYXRvcigpXG4gICAgbGV0IHNlbGVjdGVkUm93ID0geyAuLi5yb3cgfTtcbiAgICBPYmplY3QuZW50cmllcyhzZWxlY3RlZFJvdykuZm9yRWFjaCgoW2tleSwgdmFsdWVdOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5zZXREcm9wZG93bkZpbHRlcikge1xuICAgICAgICAgIHRoaXMuc2V0RHJvcGRvd25GaWx0ZXJWYWx1ZShjb2wsIHJvdywga2V5KTtcbiAgICAgICAgICB0aGlzLnNldERyb3Bkb3duRmlsdGVyID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2V0IHRoZSBhdXRvQ29tcGxldGUgVmFsdWUgaW4gZWRpdCBtb2RlXG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkFVVE9DT01QTEVURSAmJlxuICAgICAgICAgIGNvbC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0ga2V5Py50b0xvd2VyQ2FzZSgpICYmXG4gICAgICAgICAgdmFsdWUgJiZcbiAgICAgICAgICB2YWx1ZS5sZW5ndGggPiAwXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChjb2wuZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgICBzZWxlY3RlZFJvd1tjb2wuZmllbGRdLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgICByb3dbY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ190ZW1wJ10gPSByb3dbY29sLmRpc3BsYXlGaWVsZF07XG4gICAgICAgICAgICAgIHJvd1tjb2wuZGlzcGxheUZpZWxkXSA9IHJvd1tjb2wuZmllbGRdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBuZXdWYWx1ZSA9IHZhbHVlLm1hcCgoeDogYW55KSA9PiB4W2NvbC5kaXNwbGF5RmllbGRdKTtcbiAgICAgICAgICBpZiAobmV3VmFsdWU/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCc7JykpIHtcbiAgICAgICAgICAgIHJvd1tjb2wuZmllbGRdID0gbmV3VmFsdWVcbiAgICAgICAgICAgICAgPy50b1N0cmluZygpXG4gICAgICAgICAgICAgID8ucmVwbGFjZUFsbCgnOycsICcsJylcbiAgICAgICAgICAgICAgPy5zcGxpdCgnLCcpXG4gICAgICAgICAgICAgID8ubWFwKCh4OiBhbnkpID0+ICh7IFtjb2wuZGlzcGxheUZpZWxkID8gY29sLmRpc3BsYXlGaWVsZCA6IGNvbC5maWVsZF06IHgsIFtjb2wuZmllbGQgKyAnX3RlbXAnXTogdmFsdWVbMF1bY29sLmZpZWxkXSB9KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04pIHtcbiAgICAgICAgICBsZXQgb3B0aW9uID0gY29sPy5kYXRhPy5maW5kKFxuICAgICAgICAgICAgKHg6IGFueSkgPT4geC5sYWJlbCA9PT0gcm93W2NvbC5maWVsZF0/LnRvU3RyaW5nKClcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICAgIHJvd1tjb2wuZmllbGRdID0gb3B0aW9uLnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5NVUxUSVNFTEVDVCkge1xuICAgICAgICAgIHJvd1tjb2wuZmllbGRdID0gdGhpcy5zZXRNdWx0aVNlbGVjdFZhbHVlKGNvbCwgcm93KVxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb2wuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGtleT8udG9Mb3dlckNhc2UoKSAmJlxuICAgICAgICAgIGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAocm93W2NvbC5maWVsZF0gIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChyb3dba2V5ICsgJ19vYmonXSAmJiBPYmplY3Qua2V5cyhyb3dba2V5ICsgJ19vYmonXSk/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgcm93W2tleSArICdfb2JqJ10udGV4dCA9IG5ldyBEYXRlKHZhbHVlIGFzIHN0cmluZyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByb3dba2V5XSA9IG5ldyBEYXRlKHZhbHVlIGFzIHN0cmluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gY2hlY2sgdGhlIE1pbnV0ZXMgcGF0dGVyblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChjb2wuc2hvd1RpbWUgfHwgY29sLnRpbWVPbmx5KSAmJlxuICAgICAgICAgICAgY29sLm1pbnV0ZXNJbnRlcnZhbCAmJlxuICAgICAgICAgICAgcm93W2tleV1cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJvd1trZXldID0gbmV3IERhdGUoc2V0TWludXRlc0ludGVydmFsKHJvd1trZXldKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRyAmJlxuICAgICAgICAgIGNvbC5maWx0ZXI/LnR5cGUgPT09ICdjYWxlbmRhcicgJiZcbiAgICAgICAgICBjb2wuZmllbGQudG9Mb3dlckNhc2UoKSA9PT0ga2V5LnRvTG93ZXJDYXNlKClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICByb3dba2V5XSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJvd1tjb2wuZmllbGRdID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MSU5LICYmXG4gICAgICAgICAgY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBrZXk/LnRvTG93ZXJDYXNlKCkgJiZcbiAgICAgICAgICAoY29sLmFsbG93U2F2ZSA9PT0gdHJ1ZSB8fCBjb2wuYWxsb3dTYXZlID09PSB1bmRlZmluZWQpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChjb2wuZWRpdExpbmsgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHJvd1trZXldID0gcm93W2NvbC5maWVsZCArICdfb2JqJ10/Lmh5cGVybGluaztcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvbC5lZGl0TGluayA9PT0gZmFsc2UgfHwgY29sLmVkaXRMaW5rID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJvd1trZXldID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuZWRpdFJvd3NSZWNvcmRzW3Jvd1t0aGlzLmRhdGFLZXldXSA9IHsgLi4ucm93IH07XG4gICAgdGhpcy5lZGl0aW5nUm93S2V5c1tyb3dbdGhpcy5kYXRhS2V5XV0gPSB0cnVlO1xuICAgIHRoaXMuY2hlY2tBY3Rpb24gPSB0cnVlO1xuICAgIHRoaXMuZHJvcGRvd25JbnB1dCA9IHRydWU7XG4gICAgdGhpcy5yb3dDbGlja0RhdGEgPSByb3c7XG4gICAgdGhpcy5pbkVkaXRNb2RlID0gdHJ1ZTtcbiAgICB0aGlzLmNhbmNlbEFsbFJlY29yZHMgPSBmYWxzZTtcbiAgICB0aGlzLnNhdmVBbGxSZWNvcmQgPSBmYWxzZTtcbiAgICB0aGlzLnNvcnREaXNhYmxlZCA9IHRydWU7XG4gICAgdGhpcy5ncmlkU2VydmljZS5yb3dVcGRhdGUgPSBmYWxzZTtcbiAgICB0aGlzLm9uR3JpZFJvd0VkaXQuZW1pdChyb3cpO1xuICB9XG5cbiAgdHlwZU9mKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIHNldCBkcm9wZG93biBmaWx0ZXIgdmFsdWVcbiAgICovXG4gIHNldERyb3Bkb3duRmlsdGVyVmFsdWUoY29sOiBhbnksIHJvdzogYW55LCBrZXk6IHN0cmluZykge1xuICAgIGlmIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOICYmIGNvbC5kcm9wRG93blByb3ApIHtcbiAgICAgIGlmIChPYmplY3QudmFsdWVzKGNvbCkuc29tZSgodmFsdWUpID0+IHZhbHVlID09IGtleSkpIHtcbiAgICAgICAgbGV0IG9iaiA9IGNvbC5kcm9wRG93blByb3A7XG4gICAgICAgIGxldCBuZXdGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICAgICAgaWYgKG9iai5maWx0ZXJzICYmIG9iai5maWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBvYmouZmlsdGVycy5mb3JFYWNoKChmaWx0ZXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgbGV0IG5ld0ZpbHRlciA9IHsgLi4uZmlsdGVyIH07XG4gICAgICAgICAgICBsZXQgZmlsdGVyS2V5ID0gT2JqZWN0LmtleXMocm93KS5maW5kKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgbGV0IG1hdGNoS2V5OiBzdHJpbmcgPSAnJztcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZT8uaW5jbHVkZXMoJ3snKSAmJlxuICAgICAgICAgICAgICAgIGtleS50b0xvd2VyQ2FzZSgpID09PVxuICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZVxuICAgICAgICAgICAgICAgICAgPy50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICA/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCd7JywgJycpXG4gICAgICAgICAgICAgICAgICAucmVwbGFjZSgnfScsICcnKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBtYXRjaEtleSA9IGtleTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hLZXk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJLZXkpIHtcbiAgICAgICAgICAgICAgbmV3RmlsdGVyLnZhbHVlID0gcm93W2ZpbHRlcktleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXdGaWx0ZXJzLnB1c2gobmV3RmlsdGVyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc2V0RHJvcGRvd25EYXRhKFxuICAgICAgICAgIGNvbCxcbiAgICAgICAgICBvYmoudW5pcXVlS2V5LFxuICAgICAgICAgIG9iai52YWx1ZVByb3AsXG4gICAgICAgICAgb2JqLmxhYmVsUHJvcCxcbiAgICAgICAgICBuZXdGaWx0ZXJzLFxuICAgICAgICAgIHJvd1xuICAgICAgICApO1xuXG4gICAgICAgIGxldCBvcHRpb24gPSBjb2wuZGF0YS5maW5kKFxuICAgICAgICAgICh4OiBhbnkpID0+IHgubGFiZWwgPT09IHJvd1tjb2wuZmllbGRdPy50b1N0cmluZygpXG4gICAgICAgICk7XG4gICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IG9wdGlvbi52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcm93XG4gICAqIFBhc3NlcyB0aGUgZWRpdGVkIG9yIG5ld2x5IGNyZWF0ZWQgZGF0YSB0byBwYXJlbnRcbiAgICogSW4gY2FzZSBvZiBuZXdseSBjcmVhdGVkIGRhdGEsIGRhdGFLZXkgYW5kIGlzTmV3IHByb3AgaXMgcmVtb3ZlZFxuICAgKi9cbiAgb25Sb3dFZGl0U2F2ZShzZWxlY3RlZFJvdzogYW55KSB7XG4gICAgbGV0IGF1dG9tQ29tcGxldGVUZW1wRGF0YSA9IFtdO1xuICAgIGxldCBsb29rdXBJbmZvOiBhbnkgPSB7fTtcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xuICAgICAgZGVsZXRlIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZCArICctZGF0YSddO1xuICAgICAgZGVsZXRlIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZCArICdfc2Vjb25kVHlwZSddO1xuICAgICAgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCAmJlxuICAgICAgICAoY29sdW1uLmFsbG93U2F2ZSA9PT0gdHJ1ZSB8fCBjb2x1bW4uYWxsb3dTYXZlID09PSB1bmRlZmluZWQpXG4gICAgICApIHtcbiAgICAgICAgaWYgKHR5cGVvZiAoc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0/LnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy50ZXh0KSB7XG4gICAgICAgICAgbG9va3VwSW5mb1tjb2x1bW4uZmllbGRdID0gc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS50ZXh0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2x1bW4uZm9ybWF0dGVyKSB7XG4gICAgICAgIGxldCB2YWx1ZTogYW55ID0gc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXTtcbiAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgPT09ICdjaGFyJykge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWUgPT09IHRydWUgPyAnWScgOiAnTic7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmZvcm1hdHRlciA9PT0gJ251bWVyaWMnKSB7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZSA9PT0gdHJ1ZSA/ICcxJyA6ICcwJztcbiAgICAgICAgfVxuICAgICAgICBzZWxlY3RlZFJvdyA9IHsgLi4uc2VsZWN0ZWRSb3csIFtjb2x1bW4uZmllbGRdOiB2YWx1ZSB9O1xuICAgICAgfVxuXG4gICAgICAvL2NvbnZlcnQgZHJvcERvd24gb3B0aW9uTGFiZWwgaW50byBvcHRpb25WYWx1ZVxuICAgICAgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOICYmIGNvbHVtbi5kcm9wRG93blByb3AgJiYgY29sdW1uLmRhdGE/Lmxlbmd0aCA+IDBcbiAgICAgICkge1xuICAgICAgICBjb25zdCBvcHRpb25MYWJlbCA9IGNvbHVtbi5kYXRhLmZpbmQoKHJlY29yZCkgPT4gcmVjb3JkWydsYWJlbCddPy50b0xvd2VyQ2FzZSgpID09PSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdPy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgaWYgKG9wdGlvbkxhYmVsPy52YWx1ZSkge1xuICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBvcHRpb25MYWJlbC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvL2NvbnZlcnQgZGF0ZSBpbnRvIHRpbWUgZm9ybWF0XG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURVxuICAgICAgKSB7XG4gICAgICAgIGlmIChjb2x1bW4udGltZU9ubHkgJiYgY29sdW1uLnNhdmVBc1N0cmluZykge1xuICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdLCAnaGg6bW0gYScpO1xuICAgICAgICB9IGVsc2UgaWYgKCFjb2x1bW4udGltZU9ubHkgJiYgKGNvbHVtbi5zaG93VGltZSB8fCBjb2x1bW4uZm9ybWF0ID09PSBFR3JpZEZvcm1hdFR5cGUuTE9OR0RBVEUpKSB7XG4gICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0sICd5eXl5LU1NLWRkIEhIOm1tOnNzJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSAmJiAhY29sdW1uLnRpbWVPbmx5KSB7XG4gICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0udG9Mb2NhbGVEYXRlU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGlmIGFsbG93Q2FsY3VsYXRlPXRydWUsIGRpdmlkZSB0aGUgcGVyY2VudCBieSAxMDBcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk5VTUVSSUMpIHtcbiAgICAgICAgaWYgKHRoaXMubnVtZXJpY1ZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5udW1lcmljVmFsdWUgPSB7fVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRpZ2l0c0luZm8gPSBjb2x1bW4/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvO1xuICAgICAgICBpZiAoY29sdW1uLmZvcm1hdD8udHlwZSA9PT0gJ3BlcmNlbnQnKSB7XG4gICAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uYWxsb3dDYWxjdWxhdGUpIHtcbiAgICAgICAgICAgIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBwYXJzZUZsb2F0KChzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdIC8gMTAwKT8udG9TdHJpbmcoKSkudG9GaXhlZChkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdIC8gMTAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvL2NvbnZlcnQgbXVsdGlzZWxlY3QgYXJyYXkgaW50byBzdHJpbmdcbiAgICAgIGlmIChcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5NVUxUSVNFTEVDVCAmJiBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdXG4gICAgICApIHtcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNhdmluZyBBdXRvQ29tcGxldGUgRGF0YVxuICAgICAgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkFVVE9DT01QTEVURSAmJlxuICAgICAgICBjb2x1bW4uZGlzcGxheUZpZWxkICYmXG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0/Lmxlbmd0aCA+IDBcbiAgICAgICkge1xuICAgICAgICBhdXRvbUNvbXBsZXRlVGVtcERhdGEgPSBbLi4uc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXV07XG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdPy5tYXAoKHJvdykgPT4gY29sdW1uPy5vcHRpb25WYWx1ZSAmJiByb3dbY29sdW1uLm9wdGlvblZhbHVlPy50b0xvd2VyQ2FzZSgpXSA/XG4gICAgICAgICAgcm93W2NvbHVtbi5vcHRpb25WYWx1ZT8udG9Mb3dlckNhc2UoKV0gOiByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXSk/LnRvU3RyaW5nKCk/LnJlcGxhY2VBbGwoJywnLCAnOycpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgbGV0IHJvdzogYW55ID0geyAuLi5zZWxlY3RlZFJvdyB9O1xuICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMocm93KTtcbiAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaWYgKGtleS5pbmNsdWRlcygnX29iaicpKSB7XG4gICAgICAgIGxldCBvYmo6IGFueSA9IHJvd1trZXldXG4gICAgICAgIGlmICh0aGlzLmNoZWNrQWN0aW9uID09PSBmYWxzZSAmJiBvYmo/LnR5cGUgJiYgKG9iai50eXBlID09PSAnbGluaycgfHwgb2JqLnR5cGUgPT09ICdpZnJhbWUnIHx8IG9iai50eXBlID09PSAnZGlhbG9nJykpIHtcbiAgICAgICAgICByb3cgPSB7IC4uLnJvdywgW2tleS5zcGxpdCgnXycpWzBdXTogcm93W2tleV0uZGlzcGxheVRleHQgfTtcbiAgICAgICAgICB0aGlzLmNoZWNrQWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgb2JqICYmXG4gICAgICAgICAgKG9iai50eXBlID09PSAnbGluaycgfHxcbiAgICAgICAgICAgIG9iai50eXBlID09PSAnaWZyYW1lJyB8fFxuICAgICAgICAgICAgb2JqLnR5cGUgPT09ICdkaWFsb2cnKVxuICAgICAgICApIHtcbiAgICAgICAgICBkZWxldGUgcm93W2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBqdXN0IGVtaXQgdGhvc2UgZmllbGRzIHdobyBleGlzdCBpbiB0aGUgdGFibGVcbiAgICAgKi9cbiAgICByb3cgPSB0aGlzLmdyaWRTZXJ2aWNlLnNldFJvd1ZhbHVlKHJvdyk7XG4gICAgbGV0IG9iajogYW55ID0ge307XG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIChjb2x1bW4uYWxsb3dTYXZlID09PSB0cnVlIHx8IGNvbHVtbi5hbGxvd1NhdmUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnNhdmVBbGxEYXRhKVxuICAgICAgKSB7XG4gICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF07XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRyAmJlxuICAgICAgICAgIGNvbHVtbi5maWx0ZXI/LnR5cGUgPT09ICdjYWxlbmRhcidcbiAgICAgICAgKSB7XG4gICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShcbiAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdLFxuICAgICAgICAgICAgJ3l5eXktTU0tZGRUMDA6MDA6MDAuMDAwWidcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9TZXQgRGVjaW1hbCBGcmFjdGlvbiBWYWx1ZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sdW1uLmZvcm1hdCAmJlxuICAgICAgICAgIGNvbHVtbi5mb3JtYXQudHlwZSA9PT0gRUZvcm1hdFR5cGUuREVDSU1BTCAmJlxuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdICYmXG4gICAgICAgICAgIXJvd1tjb2x1bW4uZmllbGRdLnRvU3RyaW5nKCkuaW5jbHVkZXMoJy4nKVxuICAgICAgICApIHtcbiAgICAgICAgICBsZXQgZGlnaXRzSW5mbyA9ICcuMDAnO1xuICAgICAgICAgIGxldCB6ZXJvID0gJzAnO1xuICAgICAgICAgIGNvbnN0IGZvcm1hdFBhcmFtcyA9IGNvbHVtbi5mb3JtYXQ/LmZvcm1hdFBhcmFtcztcbiAgICAgICAgICBjb25zdCBmcmFjRGlnaXRzID0gY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbztcbiAgICAgICAgICBpZiAoZnJhY0RpZ2l0cykge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBmcmFjRGlnaXRzOyBpKyspIHtcbiAgICAgICAgICAgICAgemVybyA9IHplcm8gKyAnMCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkaWdpdHNJbmZvID0gJy4nICsgemVybztcbiAgICAgICAgICB9XG4gICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXSArIGRpZ2l0c0luZm87XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHJvdy5pc05ldyAmJlxuICAgICAgICAoY29sdW1uLmFsbG93U2F2ZSA9PT0gZmFsc2UgfHwgY29sdW1uLmVkaXRhYmxlID09PSBmYWxzZSB8fCAhdGhpcy5zYXZlQWxsRGF0YSlcbiAgICAgICkge1xuICAgICAgICBkZWxldGUgcm93W2NvbHVtbi5maWVsZF07XG4gICAgICB9XG4gICAgfSk7XG4gICAgZGVsZXRlIHNlbGVjdGVkUm93Wyd1bmRlZmluZWQnXTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmNoZWNrVmFsaWRpdHkodGhpcy5jb2x1bW5zLCByb3cpO1xuICAgIGNvbnN0IGlzVmFsaWQgPSB0aGlzLmdyaWRWYWxpZGF0aW9uKHRoaXMuY29sdW1ucywgcm93KTtcbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgLy8gc2V0IHRoZSBncmlkIHVwZGF0ZWQvaW5zZXJ0ZWQgZGF0YVxuICAgICAgdGhpcy5yb3dBY3Rpb25FdmVudHMoc2VsZWN0ZWRSb3cpO1xuICAgICAgdGhpcy5icm93c2VyQ2xvc2VFdmVudChmYWxzZSk7XG4gICAgICBpZiAocm93LmlzTmV3IHx8IHJvdy5pc25ldykge1xuICAgICAgICBsZXQgeyBpc05ldywgaXNuZXcsIC4uLm5ld1Jvd09iaiB9ID0gcm93O1xuICAgICAgICBuZXdSb3dPYmogPSB0aGlzLmdyaWRTZXJ2aWNlLnJlbW92ZUV4dHJhTmV3Um93T2JqKG5ld1Jvd09iaiwgdGhpcy5jb2x1bW5zKTtcbiAgICAgICAgaWYgKCF0aGlzLmFkZERhdGFLZXlWYWx1ZSkge1xuICAgICAgICAgIGRlbGV0ZSBuZXdSb3dPYmpbdGhpcy5kYXRhS2V5XTtcbiAgICAgICAgfVxuICAgICAgICBuZXdSb3dPYmogPSB0aGlzLnNldFJvd3NEYXRhKG5ld1Jvd09iaik7XG4gICAgICAgIGlmICh0aGlzLnNhdmVBbGxSZWNvcmQpIHtcbiAgICAgICAgICB0aGlzLnNhdmVSZWNvcmRBcnJheS5wdXNoKG5ld1Jvd09iaik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vblJvd0FkZC5lbWl0KG5ld1Jvd09iaik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLnNhdmVBbGxSZWNvcmQpIHtcbiAgICAgICAgICB0aGlzLnNhdmVSZWNvcmRBcnJheS5wdXNoKG9iaik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMuY2hlY2tsaXN0Lmxlbmd0aCA+IDApXG4gICAgICAgICAgICB0aGlzLm9uUm93VXBkYXRlLmVtaXQodGhpcy5zZXRSb3dzRGF0YSh0aGlzLmNoZWNrbGlzdCkpO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vblJvd1VwZGF0ZS5lbWl0KG9iaik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmVkaXRpbmdSb3dLZXlzW3Jvd1t0aGlzLmRhdGFLZXldXSA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgICBpZiAoY29sdW1uLmVycm9yTWVzc2FnZSkge1xuICAgICAgICAgIGlmIChzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSArICdfb2JqJ10pIHtcbiAgICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpICsgJ19vYmonXSA9IHsgLi4uc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSwgZXJyb3JNZXNzYWdlOiBjb2x1bW4uZXJyb3JNZXNzYWdlIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpICsgJ19vYmonXSA9IHsgZXJyb3JNZXNzYWdlOiBjb2x1bW4uZXJyb3JNZXNzYWdlIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgdGhpcy5lZGl0aW5nUm93S2V5c1tyb3dbdGhpcy5kYXRhS2V5XV0gPSB0cnVlO1xuICAgIH1cbiAgICAvLyBpZiBhbGwgcm93cyBpbiByZWFkIG9ubHkgbW9kZSB0aGVuIHNob3cgZWRpdEFsbFJvd3MgYnV0dG9uLiAgICBcbiAgICBpZiAoT2JqZWN0LnZhbHVlcyh0aGlzLmVkaXRpbmdSb3dLZXlzKS5ldmVyeSgodmFsdWUpID0+ICF2YWx1ZSkpIHtcbiAgICAgIHRoaXMuaW5FZGl0TW9kZSA9IGZhbHNlO1xuICAgICAgdGhpcy5zb3J0RGlzYWJsZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcbiAgICAgIC8vIGNvbnZlcnQgZGF0ZSBpbnRvIHRpbWVcbiAgICAgIGlmIChcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSAmJlxuICAgICAgICAoc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXT8udG9TdHJpbmcoKT8uaW5jbHVkZXMoJ1BNJykgfHxcbiAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdPy50b1N0cmluZygpPy5pbmNsdWRlcygnQU0nKSlcbiAgICAgICkge1xuICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gc2V0VGltZUluRGF0ZShyb3dbY29sdW1uLmZpZWxkXSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk5VTUVSSUMpIHtcbiAgICAgICAgY29uc3QgZGlnaXRzSW5mbyA9IGNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm87XG4gICAgICAgIGlmIChjb2x1bW4uZm9ybWF0Py50eXBlID09PSAncGVyY2VudCcpIHtcbiAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5hbGxvd0NhbGN1bGF0ZSkge1xuICAgICAgICAgICAgaWYgKGRpZ2l0c0luZm8pIHtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHBhcnNlRmxvYXQoKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gKiAxMDApPy50b1N0cmluZygpKS50b0ZpeGVkKGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gKiAxMDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkFVVE9DT01QTEVURSAmJlxuICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdXG4gICAgICApIHtcbiAgICAgICAgLy8gc2V0IGF1dG9jb21wZWxldCBhcnJheSBkYXRhIGFmdGVyIHNhdmUgcm93XG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBhdXRvbUNvbXBsZXRlVGVtcERhdGE7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCAmJlxuICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdICYmIChjb2x1bW4uYWxsb3dTYXZlID09PSB0cnVlIHx8IGNvbHVtbi5hbGxvd1NhdmUgPT09IHVuZGVmaW5lZClcbiAgICAgICkge1xuICAgICAgICAvLyBzZXQgTE9PS1VQX0lOUFVUIGRhdGEgYWZ0ZXIgc2F2ZSByb3dcbiAgICAgICAgaWYgKGxvb2t1cEluZm9bY29sdW1uLmZpZWxkXSkge1xuICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBsb29rdXBJbmZvW2NvbHVtbi5maWVsZF07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04gJiZcbiAgICAgICAgY29sdW1uLm9wdGlvbkxhYmVsICYmXG4gICAgICAgIGNvbHVtbi5vcHRpb25WYWx1ZVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc2V0RHJvcGRvd25WYWx1ZShjb2x1bW4sIHNlbGVjdGVkUm93KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmFkZE5ld1Jvd0NoZWNrID0gZmFsc2U7XG4gICAgaWYgKE9iamVjdC52YWx1ZXModGhpcy5lZGl0aW5nUm93S2V5cykuZXZlcnkoKHZhbHVlKSA9PiAhdmFsdWUpICYmIHRoaXMuc2V0R3JpZFJlZnJlc2hUaW1lKSB7XG4gICAgICB0aGlzLnJlZnJlc2hHcmlkKCk7XG4gICAgfVxuICAgIHRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkID0gZmFsc2U7XG4gICAgdGhpcy5ncmlkU2VydmljZS5yb3dVcGRhdGUgPSBmYWxzZTtcbiAgfVxuXG4gIC8vIGNoZWNrIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSBmaWVsZFxuICBncmlkVmFsaWRhdGlvbihjb2x1bW5zOiBhbnksIHJvdzogYW55LCBzaW5nbGVDZWxsOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuIHtcbiAgICBpZiAoc2luZ2xlQ2VsbCA9PSB0cnVlKSB7XG4gICAgICBjb2x1bW5zID0gW3sgLi4uY29sdW1ucyB9XVxuICAgIH1cbiAgICBpZiAoIXRoaXMuZ3JpZFNlcnZpY2UuY2hlY2tWYWxpZGl0eShjb2x1bW5zLCByb3csIHNpbmdsZUNlbGwpKSB7XG4gICAgICBsZXQgZXJyb3JNZXNzYWdlRGV0YWlsczogc3RyaW5nID0gJyc7XG4gICAgICBjb2x1bW5zPy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi5lcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICBlcnJvck1lc3NhZ2VEZXRhaWxzID0gZXJyb3JNZXNzYWdlRGV0YWlscyA/IGVycm9yTWVzc2FnZURldGFpbHMgKyAnICwgJyArIGNvbHVtbi5lcnJvck1lc3NhZ2UgOiBjb2x1bW4uZXJyb3JNZXNzYWdlO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgbGV0IGlzUmVxdWlyZWQgPSBjb2x1bW5zLnNvbWUoXG4gICAgICAgIChjb2x1bW46IGFueSkgPT4gY29sdW1uLmVycm9yTWVzc2FnZSAmJiAhcm93W2NvbHVtbi5maWVsZF1cbiAgICAgICk7XG4gICAgICBpZiAoaXNSZXF1aXJlZCAmJiAhc2luZ2xlQ2VsbCkge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcbiAgICAgICAgICBlcnJvck1lc3NhZ2VEZXRhaWxzLFxuICAgICAgICAgIDUwMDAsXG4gICAgICAgICAgJ1JFUVVJUkVEIEZJRUxEJ1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoZXJyb3JNZXNzYWdlRGV0YWlscywgNTAwMCwgJ0lOVkFMSUQgRklFTEQnKTtcbiAgICAgICAgaWYgKHNpbmdsZUNlbGwpIHtcbiAgICAgICAgICB0aGlzLnNldEVycm9yQ2VsbChjb2x1bW5zWzBdLCByb3cpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHNpbmdsZUNlbGwpIHtcbiAgICAgICAgdGhpcy5zZXRFcnJvckNlbGwoY29sdW1uc1swXSwgcm93KVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHNldEVycm9yQ2VsbChjb2x1bW4sIHJvdykge1xuICAgIGlmIChjb2x1bW4uZXJyb3JNZXNzYWdlKSB7XG4gICAgICBjb25zb2xlLmxvZygnZXJyb3IgbWVzc2FnZTogJywgY29sdW1uLmVycm9yTWVzc2FnZSlcbiAgICAgIGlmIChyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkgKyAnX29iaiddKSB7XG4gICAgICAgIHJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSArICdfb2JqJ10gPSB7IC4uLnJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLCBlcnJvck1lc3NhZ2U6IGNvbHVtbi5lcnJvck1lc3NhZ2UgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSArICdfb2JqJ10gPSB7IGVycm9yTWVzc2FnZTogY29sdW1uLmVycm9yTWVzc2FnZSB9O1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmIChyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkgKyAnX29iaiddKSB7XG4gICAgICAgIGRlbGV0ZSByb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkgKyAnX29iaiddLmVycm9yTWVzc2FnZVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHJvdyA6IGFueVxuICAgKiBAcGFyYW0gaW5kZXggOiBudW1iZXJcbiAgICogQ2xlYXJzIG91dCB0aGUgZWRpdCByb3cgYW5kIHJlcGxhY2Ugd2l0aCByZWFkYWJsZSBvbmVcbiAgICovXG4gIG9uUm93RWRpdENhbmNlbChyb3c6IGFueSwgaW5kZXg6IG51bWJlcikge1xuICAgIGxldCByb3dJbkVkaXRNb2RlOiBib29sZWFuID0gT2JqZWN0LnZhbHVlcyh0aGlzLmVkaXRpbmdSb3dLZXlzKS5ldmVyeSgodmFsdWUpID0+ICF2YWx1ZSk7XG4gICAgaWYgKHJvdz8uaXNOZXcpIHtcbiAgICAgIHRoaXMucm93c0RhdGEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yb3dzRGF0YVtpbmRleF0gPSB0aGlzLmVkaXRSb3dzUmVjb3Jkc1tyb3dbdGhpcy5kYXRhS2V5XV07XG4gICAgICBkZWxldGUgdGhpcy5lZGl0Um93c1JlY29yZHNbcm93W3RoaXMuZGF0YUtleV1dO1xuICAgIH1cbiAgICBkZWxldGUgdGhpcy5lZGl0aW5nUm93S2V5c1tyb3dbdGhpcy5kYXRhS2V5XV07XG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04pIHtcbiAgICAgICAgdGhpcy5zZXREcm9wZG93blZhbHVlKGNvbHVtbiwgcm93KTtcbiAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQgJiYgY29sdW1uLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICB0aGlzLnJvd3NEYXRhW2luZGV4XVtjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF0/LnZhbHVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuaW5FZGl0TW9kZSA9IGZhbHNlO1xuICAgIGlmIChyb3dJbkVkaXRNb2RlKSB7XG4gICAgICB0aGlzLnNvcnREaXNhYmxlZCA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmFkZE5ld1Jvd0NoZWNrID0gZmFsc2U7XG4gICAgdGhpcy5pbmxpbmVSb3dDYW5jZWwuZW1pdChyb3cpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHJvd0luRWRpdE1vZGUgJiYgdGhpcy5zZXRHcmlkUmVmcmVzaFRpbWUpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoR3JpZCgpO1xuICAgICAgfVxuICAgIH0sIDUwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcbiAgICpcbiAgICpcbiAgICogQHBhcmFtIHJvd1xuICAgKiBTZW5kcyB0aGUgcm93IHBheWxvYWQgdG8gcGFyZW50IGZvciBkZWxldGlvbnNcbiAgICovXG5cbiAgLyoqXG4gICpzZXQgdGhlIGdyaWREYXRhIG9uIHJvdyBhY3Rpb25zIGV2ZW50c1xuICAqL1xuICByb3dBY3Rpb25FdmVudHMocm93SW5mbywgZGVsZXRlUm93OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBsZXQgYWN0aW9uOiBzdHJpbmcgPSAnJztcbiAgICBsZXQgZ3JpZFJvd3NEYXRhOiBhbnlbXSA9IFsuLi50aGlzLnJvd3NEYXRhXTtcbiAgICBjb25zdCBpbmRleCA9IGdyaWRSb3dzRGF0YS5maW5kSW5kZXgoKHJvd0RhdGEpID0+IHJvd0luZm9bdGhpcy5kYXRhS2V5XSA9PT0gcm93RGF0YVt0aGlzLmRhdGFLZXldKTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgaWYgKGRlbGV0ZVJvdykge1xuICAgICAgICBncmlkUm93c0RhdGEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5yb3dzRGF0YSA9IFsuLi5ncmlkUm93c0RhdGFdO1xuICAgICAgICBhY3Rpb24gPSAnZGVsZXRlJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmFkZE5ld1Jvd0NoZWNrKSB7XG4gICAgICAgICAgYWN0aW9uID0gJ2luc2VydCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWN0aW9uID0gJ3VwZGF0ZSc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub25HcmlkUm93QWN0aW9ucy5vYnNlcnZlcnMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgcm93SW5mb1sncm93QWN0aW9uJ10gPSBhY3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgZ3JpZFJvd3NEYXRhW2luZGV4XSA9IHJvd0luZm87XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZ2VuZXJhdGVSb3dzRGF0YUNvcHkgPSBmYWxzZVxuICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICAgIHRoaXMub25HcmlkUm93QWN0aW9ucy5lbWl0KGdyaWRSb3dzRGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogb3BlbiBEZWxldGUgY29uZmlybWF0aW9uIGRpYWxvZyB3aGVuIHRyeWluZyB0byBkZWxldGUgcm93XG4gICAqL1xuICBkZWxldGVSZWNvcmQocm93OiBhbnkpIHtcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICBtZXNzYWdlOiAnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgcmVjb3JkPycsXG4gICAgICBoZWFkZXI6ICdEZWxldGUgQ29uZmlybWF0aW9uJyxcbiAgICAgIGljb246ICdwaSBwaS1leGNsYW1hdGlvbi10cmlhbmdsZScsXG4gICAgICBrZXk6ICdoYW5kbGVJbmxpbmVDUlVEJyxcbiAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy51c2VTZXJ2ZXJTaWRlRXZlbnRzKSB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzZXQgdGhlIGdyaWQgZGVsZXRlZCBkYXRhIFxuICAgICAgICB0aGlzLnJvd0FjdGlvbkV2ZW50cyhyb3csIHRydWUpO1xuICAgICAgICB0aGlzLm9uUm93RGVsZXRlLmVtaXQocm93KTtcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNsb3NlKCk7XG4gICAgICAgIHRoaXMuaW5FZGl0TW9kZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICByZWplY3Q6ICgpID0+IHtcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNsb3NlKCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvIHNldCBkaXNhYmxlZCB0aGUgY29udHJvbFxuICAgKi9cbiAgYWxsb3dEaXNhYmxlZChjb2x1bW46IGFueSwgcm93OiBhbnkpOiBib29sZWFuIHtcbiAgICBsZXQgdmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBpZiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gJiYgdHlwZW9mIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSkgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIE9iamVjdC5rZXlzKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddKT8uaW5jbHVkZXMoJ2Rpc2FibGVkJykgJiYgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc2FibGVkID09PSB0cnVlXG4gICAgICApIHtcbiAgICAgICAgdmFsdWUgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29sdW1uLmRpc2FibGVkKSB7XG4gICAgICB2YWx1ZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUbyBzZXQgYWdncmVnYXRlIGluIGdyaWQgZm9vdGVyXG4gICAqL1xuICBzZXRBZ2dyZWdhdGVUZXh0KGNvbHVtbjogSUdyaWRDb2x1bW4pIHtcbiAgICBpZiAoY29sdW1uPy5hZ2dyZWdhdGUpIHtcbiAgICAgIGNvbHVtbi5hZ2dyZWdhdGUuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHRoaXMucm93c0RhdGEgJiYgdGhpcy5yb3dzRGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbGV0IGNvbHVtblR5cGU6IEVHcmlkQWdncmVnYXRlID0gY29sLnR5cGU7XG4gICAgICAgICAgaWYgKGNvbHVtblR5cGUgPT09IEVHcmlkQWdncmVnYXRlLkNPVU5UKSB7XG4gICAgICAgICAgICBsZXQgY291bnQgPSB0aGlzLnJvd3NEYXRhLmxlbmd0aDtcbiAgICAgICAgICAgIGNvdW50ID0gdGhpcy5zZXRGZXRjaEFnZ3JlZ2F0ZWRWYWx1ZShjb2x1bW4sIGNvdW50LCAxKTtcbiAgICAgICAgICAgIGNvbC5hZ2dyVmFsdWUgPSB0aGlzLnNldEFnZ3JlZ2F0ZUZvb3RlclRleHQoY29sLCBjb3VudCwgJ0NvdW50Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29sdW1uVHlwZSA9PT0gRUdyaWRBZ2dyZWdhdGUuU1VNIHx8XG4gICAgICAgICAgICBjb2x1bW5UeXBlID09PSBFR3JpZEFnZ3JlZ2F0ZS5BVkVSQUdFXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBjb2xWYWx1ZXM6IG51bWJlcltdID0gdGhpcy5nZXRDb2x1bW5WYWx1ZXMoY29sdW1uKTtcbiAgICAgICAgICAgIGlmIChjb2xWYWx1ZXMgJiYgY29sVmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgbGV0IHN1bSA9IGNvbFZhbHVlcy5yZWR1Y2UoKGFjYywgY3VyKSA9PiBhY2MgKyBjdXIsIDApO1xuICAgICAgICAgICAgICBpZiAoY29sdW1uVHlwZSA9PT0gRUdyaWRBZ2dyZWdhdGUuU1VNKSB7XG4gICAgICAgICAgICAgICAgc3VtID0gdGhpcy5zZXRGZXRjaEFnZ3JlZ2F0ZWRWYWx1ZShjb2x1bW4sIHN1bSwgMik7XG4gICAgICAgICAgICAgICAgY29sLmFnZ3JWYWx1ZSA9IHRoaXMuc2V0QWdncmVnYXRlRm9vdGVyVGV4dChjb2wsIHN1bSwgJ1N1bScpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChjb2x1bW5UeXBlID09PSBFR3JpZEFnZ3JlZ2F0ZS5BVkVSQUdFKSB7XG4gICAgICAgICAgICAgICAgbGV0IGF2ZXJhZ2UgPSBzdW0gLyBjb2xWYWx1ZXMubGVuZ3RoIHx8IDA7XG4gICAgICAgICAgICAgICAgYXZlcmFnZSA9IHRoaXMuc2V0RmV0Y2hBZ2dyZWdhdGVkVmFsdWUoY29sdW1uLCBzdW0sIDMpO1xuICAgICAgICAgICAgICAgIGNvbC5hZ2dyVmFsdWUgPSB0aGlzLnNldEFnZ3JlZ2F0ZUZvb3RlclRleHQoXG4gICAgICAgICAgICAgICAgICBjb2wsXG4gICAgICAgICAgICAgICAgICBhdmVyYWdlLFxuICAgICAgICAgICAgICAgICAgJ0F2ZydcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbC5hZ2dyVmFsdWUgPSAnJztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gc2V0IHRoZSBhZ2dyZWdhdGFpb24gdmFsdWUgdGhhdCBjb21pbmcgZnJvbSBmZXRjaFxuICBzZXRGZXRjaEFnZ3JlZ2F0ZWRWYWx1ZShjb2x1bW4sIGFnZ3JlZ2F0ZVZhbHVlLCBhZ2dyZWdhdGVBY3Rpb24pIHtcbiAgICBpZiAodGhpcy5hZ2dyZWdhdGVkUmVzdWx0Py5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBhZ2dyZWdhdGVkQ29sdW1uID0gdGhpcy5hZ2dyZWdhdGVkUmVzdWx0LmZpbmQoKGFnZ3JlZ2F0ZSkgPT4gYWdncmVnYXRlLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgJiYgYWdncmVnYXRlLmFnZ3JlZ2F0aW9uT3BlcmF0aW9uID09PSBhZ2dyZWdhdGVBY3Rpb24pO1xuICAgICAgaWYgKGFnZ3JlZ2F0ZWRDb2x1bW4pIHtcbiAgICAgICAgYWdncmVnYXRlVmFsdWUgPSBhZ2dyZWdhdGVkQ29sdW1uPy52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFnZ3JlZ2F0ZVZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIHNldCBncmlkIEFnZ3JlZ2F0ZSB2YWx1ZXNcbiAgICovXG4gIHNldEFnZ3JlZ2F0ZUZvb3RlclRleHQoY29sdW1uOiBhbnksIHZhbHVlOiBudW1iZXIsIGRlZmF1bHRDYXB0aW9uOiBzdHJpbmcpIHtcbiAgICBjb25zdCBpc0RlY2ltYWxGb3JtYXQ6IGJvb2xlYW4gPSBjb2x1bW4uZm9ybWF0Py50eXBlID09PSAnZGVjaW1hbCc7XG4gICAgY29uc3QgZGlnaXRzSW5mbyA9IGNvbHVtbi5mb3JtYXQ/LmRpZ2l0c0luZm87XG4gICAgY29uc3QgY2FwdGlvbjogc3RyaW5nID1cbiAgICAgIGNvbHVtbi5jYXB0aW9uPy5sZW5ndGggPiAwID8gY29sdW1uLmNhcHRpb24gOiBkZWZhdWx0Q2FwdGlvbjtcblxuICAgIGNvbnN0IGRlY2ltYWxQb2ludCA9IGlzRGVjaW1hbEZvcm1hdFxuICAgICAgPyB2YWx1ZT8udG9GaXhlZChkaWdpdHNJbmZvID8gZGlnaXRzSW5mbyA6IDIpXG4gICAgICA6IHZhbHVlPy50b0ZpeGVkKDApO1xuICAgIHJldHVybiBgJHtjYXB0aW9ufSAke2RlY2ltYWxQb2ludFxuICAgICAgLnRvU3RyaW5nKClcbiAgICAgIC5yZXBsYWNlKC9cXEIoPz0oXFxkezN9KSsoPyFcXGQpKS9nLCAnLCcpfSA8L2JyPmA7XG4gIH1cblxuICAvKipcbiAgICogc2V0IGRlY2ltYXQgYW5kIG51bWVyaWMgdmFsdWVzXG4gICAqL1xuICBzZXROdW1lcmljVmFsdWVzKCkge1xuICAgIGlmICh0aGlzLmNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYgdGhpcy5yb3dzRGF0YT8ubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk5VTUVSSUMpIHtcbiAgICAgICAgICBjb25zdCBkaWdpdHNJbmZvID0gY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbztcbiAgICAgICAgICB0aGlzLnJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbHVtbj8uZm9ybWF0Py50eXBlID09PSAncGVyY2VudCcpIHtcbiAgICAgICAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uYWxsb3dDYWxjdWxhdGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGlnaXRzSW5mbykge1xuICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBwYXJzZUZsb2F0KChyb3dbY29sdW1uLmZpZWxkXSAqIDEwMCk/LnRvU3RyaW5nKCkpLnRvRml4ZWQoZGlnaXRzSW5mbyk7ICAgICAgICAgLy9USEVTRSBDT01NRU5URUQgT1VUIExJTkVTIFNIT1VMRCBSVU4gT04gU0FWRVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHJvd1tjb2x1bW4uZmllbGRdICogMTAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBwYXJzZUZsb2F0KHJvd1tjb2x1bW4uZmllbGRdKS50b0ZpeGVkKGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbj8uZm9ybWF0Py50eXBlID09PSAnZGVjaW1hbCcpIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBwYXJzZUZsb2F0KHJvd1tjb2x1bW4uZmllbGRdKS50b0ZpeGVkKGRpZ2l0c0luZm8gPyBkaWdpdHNJbmZvIDogMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGdldCBjb2x1bW4gdmFsdWUgYmFzZWQgb24gY29sdW1uIGZpZWxkXG4gICAqL1xuICBnZXRDb2x1bW5WYWx1ZXMoY29sdW1uOiBJR3JpZENvbHVtbikge1xuICAgIGxldCBhcnI6IGFueSA9IFtdO1xuICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKHJvdyk7XG4gICAgICBrZXlzLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgIGlmIChjb2x1bW4uZmllbGQgPT09IGtleSkge1xuICAgICAgICAgIGFyci5wdXNoKHJvd1trZXldKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFycjtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBFeHBvcnQgdG8gUERGXG4gICAqL1xuICBleHBvcnRQZGYoKSB7XG4gICAgdmFyIGV4cG9ydERhdGEgPSB0aGlzLnNldEV4cG9ydERhdGEoWy4uLnRoaXMucm93c0RhdGFdLCB0cnVlKTtcbiAgICBsZXQgZG9jID0gbmV3IGpzUERGKCdwJywgJ3B0Jyk7XG4gICAgZG9jLnRhYmxlKDEsIDEsIGV4cG9ydERhdGEucm93cywgZXhwb3J0RGF0YS5oZWFkaW5ncywgeyBhdXRvU2l6ZTogdHJ1ZSB9KTtcbiAgICBkb2Muc2F2ZSgnRXhwb3J0LnBkZicpO1xuICB9XG5cbiAgLyoqXG4gICAqICBTdWItZnVuY3Rpb24gdG8gc2V0IHJvd3MgZm9yIGV4cG9ydCB0byBQZGYsIGFuZCBFeGNlbFxuICAgKiBAcm93cyBwYXJhbSBmb3Igcm93c1xuICAgKiBAaXNFeGNlbCBwYXJhbSBmb3IgZXhwb3J0IHRvIGV4Y2VsIGluZGljYXRpb25cbiAgICovXG4gIHNldEV4cG9ydERhdGEocm93czogYW55W10gPSBbXSwgaXNQZGY6IGJvb2xlYW4gPSBmYWxzZSk6IElHcmlkRGF0YUV4cG9ydCB7XG4gICAgY29uc3QgaGVhZGluZ3M6IGFueSA9IHRoaXMuY29sdW1ucy5tYXAoKGNvbHVtbikgPT4gY29sdW1uLmZpZWxkKTtcbiAgICByb3dzLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgZm9yICh2YXIgcHJvcCBpbiByb3cpIHtcbiAgICAgICAgaWYgKCFoZWFkaW5ncy5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAgIGRlbGV0ZSByb3dbcHJvcF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUGRmKSB7XG4gICAgICAgICAgcm93W3Byb3BdID1cbiAgICAgICAgICAgICFyb3dbcHJvcF0gJiYgdHlwZW9mIHJvd1twcm9wXSAhPT0gJ2Jvb2xlYW4nXG4gICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgOiByb3dbcHJvcF0udG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB7IHJvd3MsIGhlYWRpbmdzIH07XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogRXhwb3J0IHRvIEV4Y2VsXG4gICAqL1xuICBleHBvcnRFeGNlbCgpIHtcbiAgICBsZXQgZXhwb3J0RGF0YTogYW55ID0gdGhpcy5leHBvcnREYXRhVG9FeGNlbCgpO1xuICAgIGltcG9ydCgneGxzeCcpLnRoZW4oKHhsc3gpID0+IHtcbiAgICAgIGNvbnN0IHdvcmtzaGVldDogV29ya1NoZWV0ID0geGxzeC51dGlscy5qc29uX3RvX3NoZWV0KGV4cG9ydERhdGEpO1xuICAgICAgbGV0IHJvd0luZGV4ID0gMDtcbiAgICAgIGV4cG9ydERhdGEuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgbGV0IGNvbEluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBjZWxsVmFsdWU6IHN0cmluZyA9IHJvd1tjb2wuaGVhZGVyXTtcbiAgICAgICAgICBpZiAoY2VsbFZhbHVlICYmIGNlbGxWYWx1ZS5sZW5ndGggPiAwICYmIGNlbGxWYWx1ZS5pbmRleE9mKCd8JykgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBsaW5rVGV4dDogc3RyaW5nID0gY2VsbFZhbHVlLnNwbGl0KCd8JylbMF07XG4gICAgICAgICAgICBsZXQgbGlua1VybDogc3RyaW5nID0gY2VsbFZhbHVlLnNwbGl0KCd8JylbMV07XG4gICAgICAgICAgICBpZiAobGlua1VybCAmJiAhbGlua1VybC5zdGFydHNXaXRoKCdodHRwJykpIHtcbiAgICAgICAgICAgICAgaWYgKCFsaW5rVXJsLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICAgICAgICAgIGxpbmtVcmwgPSAnLycgKyBsaW5rVXJsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGxpbmtVcmwgPVxuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArXG4gICAgICAgICAgICAgICAgJy8vJyArXG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lICtcbiAgICAgICAgICAgICAgICBsaW5rVXJsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY2VsbEFkZHJlc3MgPSB4bHN4LnV0aWxzLmVuY29kZV9jZWxsKHtcbiAgICAgICAgICAgICAgYzogY29sSW5kZXgsXG4gICAgICAgICAgICAgIHI6IHJvd0luZGV4ICsgMSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB3b3Jrc2hlZXRbY2VsbEFkZHJlc3NdID0ge1xuICAgICAgICAgICAgICBmOiBgPUhZUEVSTElOSyhcIiR7bGlua1VybH1cIiwgXCIke2xpbmtUZXh0fVwiKWAsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbEluZGV4Kys7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJvd0luZGV4Kys7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHdvcmtib29rID0ge1xuICAgICAgICBTaGVldHM6IHsgc2hlZXQxOiB3b3Jrc2hlZXQgfSxcbiAgICAgICAgU2hlZXROYW1lczogWydzaGVldDEnXSxcbiAgICAgIH07XG4gICAgICBjb25zdCBleGNlbEJ1ZmZlcjogYW55ID0geGxzeC53cml0ZSh3b3JrYm9vaywge1xuICAgICAgICBib29rVHlwZTogJ3hsc3gnLFxuICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgfSk7XG4gICAgICB0aGlzLnNhdmVBc0V4Y2VsRmlsZShleGNlbEJ1ZmZlciwgJ0V4cG9ydC54bHN4Jyk7XG4gICAgfSk7XG4gIH1cblxuICBleHBvcnREYXRhVG9FeGNlbCgpIHtcbiAgICBsZXQgYXJyOiBhbnkgPSBbXTtcbiAgICB0aGlzLnJvd3NEYXRhLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICBsZXQgb2JqOiBhbnkgPSB7fTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGdyaWRIZWFkZXIgPSBjb2x1bW4uaGVhZGVyO1xuICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MSU5LKSB7XG4gICAgICAgICAgY29uc3QgbGlua09iaiA9IHJvd1tjb2x1bW4uZGlzcGxheVRleHQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddO1xuICAgICAgICAgIG9ialtncmlkSGVhZGVyXSA9IHJvd1tjb2x1bW4uZmllbGRdICsgJ3wnICsgbGlua09iaj8uaHlwZXJsaW5rO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9ialtncmlkSGVhZGVyXSA9IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgYXJyLnB1c2gob2JqKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYXJyO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEV4cG9ydCB0byBleGNlbCAoc3ViLW1ldGhvZClcbiAgICovXG4gIHNhdmVBc0V4Y2VsRmlsZShidWZmZXI6IGFueSwgZmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGltcG9ydCgnZmlsZS1zYXZlcicpLnRoZW4oKEZpbGVTYXZlcikgPT4ge1xuICAgICAgbGV0IEVYQ0VMX1RZUEUgPVxuICAgICAgICAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQ7Y2hhcnNldD1VVEYtOCc7XG4gICAgICBjb25zdCBkYXRhOiBCbG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogRVhDRUxfVFlQRSB9KTtcbiAgICAgIHNhdmVBcyhkYXRhLCBmaWxlTmFtZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpzZXQgY29uZmlnIGRhdGEgb2YgbG9va3VwIGNvbnRyb2wgZGlhbG9nXG4gICAqL1xuICBzZXRMb29rdXBEaWFsb2dDb25maWcocm93OiBhbnksIGNvbHVtbjogYW55LCBkYXRhOiBhbnkpIHtcbiAgICBsZXQgc2VsZWN0aW9uOiBzdHJpbmcgPSAnJztcbiAgICBpZiAocm93W2NvbHVtbi5maWVsZF0gJiYgdHlwZW9mIHJvd1tjb2x1bW4uZmllbGRdID09PSAnb2JqZWN0Jykge1xuICAgICAgc2VsZWN0aW9uID0gcm93W2NvbHVtbi5maWVsZF0udGV4dDtcbiAgICB9IGVsc2UgaWYgKGNvbHVtbi5kaXNwbGF5RmllbGQgJiYgcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdKSB7XG4gICAgICBzZWxlY3Rpb24gPSByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGVjdGlvbiA9IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgIH1cblxuICAgIGlmIChjb2x1bW4uZmllbGQgJiYgdHlwZW9mIHJvd1tjb2x1bW4uZmllbGRdID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3QgbmV3Um93ID0geyAuLi5yb3cgfTtcbiAgICAgIG5ld1Jvd1tjb2x1bW4uZmllbGRdID0gbmV3Um93W2NvbHVtbi5maWVsZF0/LnZhbHVlO1xuICAgICAgcm93ID0geyAuLi5uZXdSb3cgfTtcbiAgICB9XG5cbiAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQgJiYgZGF0YSkge1xuICAgICAgbGV0IG9iaiA9IGF1dG9TZXRMb29rdXBEYXRhKGRhdGEsIHJvdyk7XG4gICAgICByb3dbY29sdW1uLmZpZWxkICsgJy1kYXRhJ10gPSBvYmo7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICByb3dEYXRhOiByb3dbY29sdW1uLmZpZWxkICsgJy1kYXRhJ10sXG4gICAgICBzZWxlY3Rpb246IHNlbGVjdGlvbixcbiAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogb3BlbiBsaW5rIG9uIGxvb2t1cENvbnRyb2wgY29udHJvbCBpbiByZWFkIG9ubHkgbW9kZSB3aGVuIGVkaXRMaW5rIHNldCB0cnVlXG4gICAqL1xuICBvcGVuTG9va3VwSHlwZXJsaW5rKGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdzogYW55KSB7XG4gICAgaWYgKGNvbHVtbi5lZGl0TGluayA9PT0gdHJ1ZSAmJiBjb2x1bW4uY29tcG9uZW50KSB7XG4gICAgICBsZXQgb2JqOiBhbnkgPSB0aGlzLnNldExvb2t1cERpYWxvZ0NvbmZpZyhyb3csIGNvbHVtbiwgY29sdW1uLmRhdGE/LmRhdGEpO1xuICAgICAgb2JqWydjb21wb25lbnQnXSA9IGNvbHVtbi5jb21wb25lbnQ7XG4gICAgICBjb25zdCByZWYgPSB0aGlzLm9wZW5Mb29rdXBEaWFsb2cob2JqKTtcbiAgICAgIGRyYWdnYWJsZURpYWxvZyhjb2x1bW4/LmZpZWxkID8gY29sdW1uPy5maWVsZCA6IGNvbHVtbj8uaGVhZGVyKVxuICAgICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgaWYgKHJlcyAmJiBjb2x1bW4ub25SZXR1cm4pIHtcbiAgICAgICAgICBjb2x1bW4ub25SZXR1cm4ocmVzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIG9wZW4gbG9va3VwIERpYWxvZ1xuICAgKi9cbiAgb3Blbkxvb2t1cERpYWxvZyhjb2x1bW4/OiBhbnksIHJvdzogYW55ID0ge30pIHtcbiAgICBjb25zdCBjb2x1bW5EYXRhID0gY29sdW1uLmNvbHVtbj8ubG9va3VwQ29udHJvbD8uZGF0YSA/IGNvbHVtbi5jb2x1bW4ubG9va3VwQ29udHJvbC5kYXRhIDogY29sdW1uLmNvbHVtbi5kYXRhO1xuICAgIGlmIChyb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2wpIHtcbiAgICAgIHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8uaGVhZGVyID8gY29sdW1uRGF0YS5oZWFkZXIgPSByb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmhlYWRlciA6ICcnXG4gICAgICByb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LndpZHRoID8gY29sdW1uRGF0YS53aWR0aCA9IHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8ud2lkdGggOiAnJ1xuICAgICAgcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy5oZWlnaHQgPyBjb2x1bW5EYXRhLmhlaWdodCA9IHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8uaGVpZ2h0IDogJydcbiAgICAgIHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8udmFsdWVQcm9wID8gY29sdW1uRGF0YS52YWx1ZVByb3AgPSByb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LnZhbHVlUHJvcCA6IFwiXCJcbiAgICAgIHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8ubGFiZWxQcm9wID8gY29sdW1uRGF0YS5sYWJlbFByb3AgPSByb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmxhYmVsUHJvcCA6IFwiXCJcbiAgICAgIHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8uZGF0YSA/IGNvbHVtbkRhdGEuZGF0YSA9IHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8uZGF0YSA6ICcnXG4gICAgfVxuXG4gICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3Blbihjb2x1bW4uY29tcG9uZW50LCB7XG4gICAgICAuLi5jb2x1bW5EYXRhLFxuICAgICAgZGF0YToge1xuICAgICAgICBzZWxlY3Rpb246IGNvbHVtbi5zZWxlY3Rpb24sXG4gICAgICAgIGZpZWxkOiBjb2x1bW4uY29sdW1uLmZpZWxkLFxuICAgICAgICBsYWJlbFByb3A6IGNvbHVtbi5jb2x1bW4ubG9va3VwQ29udHJvbD8uZGF0YT8ubGFiZWxQcm9wLFxuICAgICAgICAuLi5jb2x1bW4ucm93RGF0YSxcblxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UgPSB0aGlzLmludGVyY2VwdERpYWxvZ0Nsb3NlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5zZXREeW5hbWljRGlhbG9nUmVmKHRoaXMuZGlhbG9nUmVmKTtcbiAgICBjb25zdCBjb21wb25lbnROYW1lID0gcm93W2NvbHVtbi5jb2x1bW4uZmllbGRdPy5uYW1lO1xuICAgIGlmIChjb21wb25lbnROYW1lKSB7XG4gICAgICB0aGlzLnBhZ2VMb2dnZXJTZXJ2aWNlLnNhdmVQYWdlTG9nZ2VySW5mbyh0aGlzLnJvdXRlci51cmw/LnN1YnN0cmluZygxKSwgY29tcG9uZW50TmFtZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRpYWxvZ1JlZjtcbiAgfVxuXG4gIGludGVyY2VwdERpYWxvZ0Nsb3NlKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5ncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0IHx8IHRoaXMuZm9ybVNlcnZpY2UuZmllbGRGb2N1c2VkT3V0KSB7XG4gICAgICBpZiAoY29uZmlybShcIllvdSB3aWxsIGxvc2UgY2hhbmdlcyBub3Qgc2F2ZWQgb24gcGFnZS4gV291bGQgeW91IGxpa2UgdG8gY29udGludWU/XCIpID09IHRydWUpIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmRpYWxvZ1JlZi5kZXN0cm95KCk7XG4gICAgfVxuICB9XG5cbiAgLy8gc2V0IGRpYWxvZyByZWYgd2hlbiBwb3B1cCBvcGVuXG4gIHNldER5bmFtaWNEaWFsb2dSZWYocmVmKSB7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLmRpYWxvZ0NvbXBvbmVudFJlZk1hcC5nZXQocmVmKTtcbiAgICBjb25zdCBkeW5hbWljQ29tcG9uZW50ID0gZGlhbG9nUmVmPy5pbnN0YW5jZSBhcyBEeW5hbWljRGlhbG9nQ29tcG9uZW50O1xuICAgIGNvbnN0IGFyaWFMYWJlbGxlZEJ5ID0gZHluYW1pY0NvbXBvbmVudC5nZXRBcmlhTGFiZWxsZWRCeSgpO1xuICAgIGR5bmFtaWNDb21wb25lbnQuZ2V0QXJpYUxhYmVsbGVkQnkgPSAoKSA9PiBhcmlhTGFiZWxsZWRCeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVuIGRpYWxvZyBvbiBsb29rdXBDb250cm9sIGZpZWxkXG4gICAqL1xuICBzZWxlY3RMb29rdXBGaWVsZChjb2x1bW46IGFueSwgcm93PzogYW55KSB7XG4gICAgdGhpcy5vbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpO1xuICAgIGxldCBvYmo6IGFueSA9IHRoaXMuc2V0TG9va3VwRGlhbG9nQ29uZmlnKFxuICAgICAgcm93LFxuICAgICAgY29sdW1uLFxuICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmRhdGFcbiAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8uZGF0YSA6IGNvbHVtbj8ubG9va3VwQ29udHJvbD8uZGF0YT8uZGF0YVxuICAgICk7XG5cbiAgICBvYmpbJ2NvbXBvbmVudCddID0gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmNvbXBvbmVudCA/IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5jb21wb25lbnQgOiBjb2x1bW4ubG9va3VwQ29udHJvbD8uY29tcG9uZW50O1xuICAgIGNvbnN0IHJlZiA9IHRoaXMub3Blbkxvb2t1cERpYWxvZyhvYmosIHJvdyk7XG4gICAgZHJhZ2dhYmxlRGlhbG9nKGNvbHVtbj8uZmllbGQgPyBjb2x1bW4/LmZpZWxkIDogY29sdW1uPy5oZWFkZXIpXG4gICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKFxuICAgICAgKHJlcykgPT4ge1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgbGV0IHZhbHVlID0gc2V0RGlhbG9nUmVzcG9uc2UoXG4gICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgICBjb2x1bW4ubG9va3VwQ29udHJvbCxcbiAgICAgICAgICAgIHJlc1xuICAgICAgICAgICk7XG4gICAgICAgICAgcmVzID0gb2JqQ29udmVydFRvTG93ZXIocmVzKTtcbiAgICAgICAgICBsZXQgbGFiZWxQcm9wID0gY29sdW1uPy5sb29rdXBDb250cm9sPy5kYXRhPy5sYWJlbFByb3A/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgbGV0IHZhbHVlUHJvcCA9IGNvbHVtbj8ubG9va3VwQ29udHJvbD8uZGF0YT8udmFsdWVQcm9wPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGxldCBjb2x1bW5GaWVsZCA9IGNvbHVtbj8uZmllbGQ/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgaWYgKGNvbHVtbi5kaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICAgIGlmIChyb3c/Lmhhc093blByb3BlcnR5KGNvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW5GaWVsZF0gPSByZXNbdmFsdWVQcm9wID8gdmFsdWVQcm9wIDogY29sdW1uRmllbGRdO1xuICAgICAgICAgICAgICByb3dbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV0gPSByZXNbbGFiZWxQcm9wID8gbGFiZWxQcm9wIDogY29sdW1uLmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW5GaWVsZF0gPSB7XG4gICAgICAgICAgICAgICAgdGV4dDogcmVzW2xhYmVsUHJvcCA/IGxhYmVsUHJvcCA6IGNvbHVtbi5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKV0sXG4gICAgICAgICAgICAgICAgdmFsdWU6IHJlc1t2YWx1ZVByb3AgPyB2YWx1ZVByb3AgOiBjb2x1bW5GaWVsZF0sXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlICYmIHZhbHVlLnZhbHVlKSB7XG4gICAgICAgICAgICB2YWx1ZVsnZmllbGQnXSA9IGNvbHVtbkZpZWxkO1xuICAgICAgICAgICAgaWYgKGxhYmVsUHJvcCB8fCB2YWx1ZVByb3ApIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbkZpZWxkXSA9IHtcbiAgICAgICAgICAgICAgICB0ZXh0OiByZXNbbGFiZWxQcm9wID8gbGFiZWxQcm9wIDogcmVzW2xhYmVsUHJvcF1dLFxuICAgICAgICAgICAgICAgIHZhbHVlOiByZXNbdmFsdWVQcm9wID8gdmFsdWVQcm9wIDogcmVzW2xhYmVsUHJvcF1dLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbkZpZWxkXSA9IHZhbHVlLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAobGFiZWxQcm9wIHx8IHZhbHVlUHJvcCkge1xuICAgICAgICAgICAgICByb3dbY29sdW1uRmllbGRdID0ge1xuICAgICAgICAgICAgICAgIHRleHQ6IHJlc1tsYWJlbFByb3AgPyBsYWJlbFByb3AgOiB2YWx1ZVByb3AgPyB2YWx1ZVByb3AgOiByZXNbY29sdW1uRmllbGRdXSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogcmVzW3ZhbHVlUHJvcCA/IHZhbHVlUHJvcCA6IHJlc1tjb2x1bW5GaWVsZF1dLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbkZpZWxkXSA9IHJlc1tjb2x1bW5GaWVsZF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgKHJvd1tjb2x1bW4uZmllbGRdKSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddID0geyAuLi5yb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSwgdGV4dDogcm93W2NvbHVtbi5maWVsZF0gfTtcbiAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHJvd1tjb2x1bW4uZmllbGRdPy52YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgaWYgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddKSB7XG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSA9IHsgLi4ucm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10sIHRleHQ6IHsgdGV4dDogcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldLCB2YWx1ZTogcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0gfSB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSA9IHsgdGV4dDogeyB0ZXh0OiByb3dbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV0sIHZhbHVlOiByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXSB9IH07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHJlcykge1xuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddID0geyAuLi5yb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSwgdGV4dDogeyB0ZXh0OiByZXNbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXSwgdmFsdWU6IHJlc1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldIH0gfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sdW1uLm9uUmV0dXJuKSB7XG4gICAgICAgICAgY29sdW1uLm9uUmV0dXJuKHJlcywgcm93KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZF0gIT09IG9iai5zZWxlY3Rpb24pIHtcbiAgICAgICAgICB0aGlzLmJyb3dzZXJDbG9zZUV2ZW50KHRydWUpO1xuICAgICAgICAgIGlmIChjb2x1bW4ub25DaGFuZ2UpIHtcbiAgICAgICAgICAgIGNvbHVtbi5vbkNoYW5nZShyb3cpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgICh7IGVycm9yIH0pID0+IHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYXBpRXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBzZXRGaWx0ZXJMb29rdXAoY29sdW1uOiBhbnkpIHtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnNldExvb2tVcEZpbHRlcihjb2x1bW4sIHRoaXMuZGlhbG9nU2VydmljZSk7XG4gIH1cblxuICAvLyBzZXQgbG9va3VwIHZhbHVlIHRoYXQgZGlzcGxheSBpbiByZWFkT25seU1vZGVcbiAgc2V0TG9va3VwUmVhZE9ubHlWYWx1ZShyb3csIGNvbHVtbikge1xuICAgIGxldCB2YWx1ZSA9ICcnO1xuICAgIGlmICh0eXBlb2YgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy50ZXh0KSA9PT0gXCJvYmplY3RcIiAmJiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8udGV4dCAmJiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnRleHQpPy5oYXNPd25Qcm9wZXJ0eSgndGV4dCcpKSB7XG4gICAgICB2YWx1ZSA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy50ZXh0LnRleHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gcm93W2NvbHVtbi5maWVsZF07XG4gICAgICBpZiAoY29sdW1uLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICB2YWx1ZSA9IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gcm93W2NvbHVtbi5maWVsZF07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8vIENoZWNrIGNhbGVuZGFyIHZhbHVlIGlzIGNoYW5nZWQgb3Igbm90XG4gIGNhbGVuZGFyQ2hhbmdlRXZlbnQoY29sdW1uOiBhbnksIHJvdzogYW55KSB7XG4gICAgbGV0IHZhbHVlQ2hhbmdlOiBib29sZWFuID0gZmFsc2U7XG4gICAgaWYgKFxuICAgICAgY29sdW1uLnRpbWVPbmx5ICYmXG4gICAgICB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyb3dbY29sdW1uLmZpZWxkXSwgJ2hoOm1tJykgIT09XG4gICAgICB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLmNhbGVuZGFyUHJldmlvdXNWYWx1ZSwgJ2hoOm1tJylcbiAgICApIHtcbiAgICAgIHZhbHVlQ2hhbmdlID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgY29sdW1uLnNob3dUaW1lICYmXG4gICAgICB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyb3dbY29sdW1uLmZpZWxkXSwgJ3l5eXktTU0tZGQgaGg6bW0nKSAhPT1cbiAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuY2FsZW5kYXJQcmV2aW91c1ZhbHVlLCAneXl5eS1NTS1kZCBoaDptbScpXG4gICAgKSB7XG4gICAgICB2YWx1ZUNoYW5nZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJvd1tjb2x1bW4uZmllbGRdLCAneXl5eS1NTS1kZCcpICE9PVxuICAgICAgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5jYWxlbmRhclByZXZpb3VzVmFsdWUsICd5eXl5LU1NLWRkJylcbiAgICApIHtcbiAgICAgIHZhbHVlQ2hhbmdlID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHZhbHVlQ2hhbmdlKSB7XG4gICAgICB0aGlzLmJyb3dzZXJDbG9zZUV2ZW50KHRydWUpO1xuICAgICAgdGhpcy5nZW5lcmF0ZVJvd3NEYXRhQ29weSA9IGZhbHNlXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yb3dzQ2hhbmdlLmVtaXQodGhpcy5yb3dzRGF0YSk7XG4gICAgICB9LCAyNTApO1xuICAgICAgaWYgKGNvbHVtbi5vbkNoYW5nZSkge1xuICAgICAgICBjb2x1bW4ub25DaGFuZ2Uocm93KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jYWxlbmRhclByZXZpb3VzVmFsdWUgPSAnJztcbiAgfVxuICBvbkF1dG9Db21wbGV0ZUZvY3VzT3V0KGUsIGNvbHVtbiwgcm93KSB7XG4gICAgaWYgKGNvbHVtbi50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEUpIHtcbiAgICAgIGlmIChjb2x1bW4uYWxsb3dBdXRvQ29tcGxldGVTYXZlICYmIGUudGFyZ2V0LnZhbHVlICYmICFjb2x1bW4uZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgLy8vY2hlY2sgdGhlIGNvcnJlY3QgZm9ybWF0IGlmIGRhdGEuY29udGFpbnMgY3V6IGl0cyBhbiBhcnJheSBvZiBhcnJheXMgd2l0aCBvYmplY3RzLlxuICAgICAgICBpZiAoY29uZmlybShgRG8geW91IHdhbnQgdG8gYWRkICR7ZS50YXJnZXQudmFsdWV9IHRvIHRoZSBzZWxlY3Rpb24/YCkpIHtcbiAgICAgICAgICBpZiAoY29sdW1uLnVuaXF1ZUtleSkge1xuICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSB0aGlzLmdyaWRTZXJ2aWNlXG4gICAgICAgICAgICAgIC5hZGRBdXRvQ29tcGxldGVWYWx1ZShjb2x1bW4udW5pcXVlS2V5LCBlLnRhcmdldC52YWx1ZSwgY29sdW1uLCByb3cpXG4gICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4ub25SZXR1cm4pIHtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5vblJldHVybihlLnRhcmdldC52YWx1ZSwgY29sdW1uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBvbkZvY3VzRXZlbnQoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnkpIHtcbiAgICB0aGlzLm51bWVyaWNWYWx1ZVtjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF1cbiAgfVxuXG4gIG9uRm9jdXNPdXRFdmVudChjb2x1bW46IElHcmlkQ29sdW1uLCByb3c6IGFueSkge1xuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk5VTUVSSUMgJiYgdGhpcy5udW1lcmljVmFsdWVbY29sdW1uLmZpZWxkXSAhPT0gcm93W2NvbHVtbi5maWVsZF0pIHtcbiAgICAgIHRoaXMub25DaGFuZ2VFdmVudChjb2x1bW4sIHJvdylcbiAgICB9XG4gICAgaWYgKGNvbHVtbi50eXBlICE9PSBFR3JpZENvbHVtblR5cGUuQVVUT0NPTVBMRVRFIHx8ICghY29sdW1uLmFsbG93QXV0b0NvbXBsZXRlU2F2ZSkpIHtcbiAgICAgIHRoaXMuZ3JpZFNlcnZpY2UuY2hlY2tWYWxpZGl0eShbY29sdW1uXSwgcm93KTtcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUpIHtcbiAgICAgICAgdGhpcy5jYWxlbmRhckNoYW5nZUV2ZW50KGNvbHVtbiwgcm93KTtcbiAgICAgIH1cbiAgICAgIGlmIChjb2x1bW4ub25Gb2N1c091dCkge1xuICAgICAgICBjb2x1bW4ub25Gb2N1c091dChyb3cpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgY29sdW1uLm9uUmV0dXJuICYmXG4gICAgICAgIGNvbHVtbi50eXBlICE9PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUXG4gICAgICApIHtcbiAgICAgICAgY29sdW1uLm9uUmV0dXJuKHJvdyk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkID0gZmFsc2U7XG4gICAgdGhpcy5ncmlkU2VydmljZS5yb3dVcGRhdGUgPSBmYWxzZTtcbiAgfVxuXG4gIHNldEZpbHRlckZvY3VzT3V0KGNvbDogYW55LCBmaWx0ZXI/OiBhbnksIGV2ZW50PzogYW55KSB7XG4gICAgdGhpcy5zZXRHcmlkRmlsdGVyKGNvbCwgZmlsdGVyLCBldmVudCk7XG4gIH1cblxuICBzZXRHcmlkRmlsdGVyKGNvbDogSUdyaWRDb2x1bW4sIGZpbHRlcj86IGFueSwgZXZlbnQ/OiBhbnkpIHtcbiAgICB0aGlzLmdyaWRGaWx0ZXJPYmogPSB7IGNvbHVtbjogY29sLCBmaWx0ZXI6IGZpbHRlciwgZXZlbnQ6IGV2ZW50IH07XG4gICAgY29uc3QgbmV3Q29sdW1uOiBhbnkgPSB7IC4uLmNvbCB9O1xuICAgIC8vY2hhbmdlIGZpbHRlciBjYWxlbmRhciBmb3JtYXRcbiAgICBpZiAobmV3Q29sdW1uLnR5cGUgPT09ICdkYXRlJyAmJiBuZXdDb2x1bW4uZmlsdGVyVmFsdWUpIHtcbiAgICAgIG5ld0NvbHVtbi5maWx0ZXJWYWx1ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKFxuICAgICAgICBjb2wuZmlsdGVyVmFsdWUudG9TdHJpbmcoKS50cmltKCksXG4gICAgICAgICd5eXl5LU1NLWRkJ1xuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5maWx0ZXJPYmoobmV3Q29sdW1uKTtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYXBwbHlGaWx0ZXInLCBKU09OLnN0cmluZ2lmeShmYWxzZSkpO1xuICB9XG5cbiAgZmlsdGVyT2JqKGNvbDogYW55KSB7XG4gICAgY29uc3Qgb2JqID0ge1xuICAgICAgZmllbGQ6IGNvbC5maWVsZCxcbiAgICAgIG1hdGNoTW9kZTogY29sLm1hdGNoTW9kZSA/IGNvbC5tYXRjaE1vZGUgOiAnc3RhcnRzV2l0aCcsXG4gICAgICBvcGVyYXRvcjogY29sLm9wZXJhdG9yID8gY29sLm9wZXJhdG9yIDogJ2FuZCcsXG4gICAgICB0YWJsZUFsaWFzOiBjb2wudGFibGVBbGlhcyA/IGNvbC50YWJsZUFsaWFzIDogJycsXG4gICAgICB2YWx1ZTogY29sLmZpbHRlclZhbHVlLFxuICAgIH07XG4gICAgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkucHVzaChvYmopO1xuICB9XG5cbiAgYXBwbHlFbnRlckV2ZW50KGZpbHRlcjogYW55LCBldmVudDogYW55LCBjb2x1bW46IGFueSkge1xuICAgIHRoaXMuZ3JpZFNlcnZpY2UuYXBwbHlGaWx0ZXJFdmVudCA9IHRydWU7XG4gICAgdGhpcy5hdXRvTG9hZERhdGEgPSB0cnVlO1xuICAgIHRoaXMub25BcHBseUZpbHRlci5lbWl0KCk7XG4gICAgdGhpcy5maWx0ZXJPYmooY29sdW1uKTtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYXBwbHlGaWx0ZXInLCBKU09OLnN0cmluZ2lmeSh0cnVlKSk7XG4gICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTVVMVElTRUxFQ1QpIHtcbiAgICAgIGZpbHRlcihjb2x1bW4/LmZpbHRlclZhbHVlPy50b1N0cmluZygpKVxuICAgIH0gZWxzZSBpZiAoY29sdW1uPy5maWx0ZXI/LnR5cGUgPT09IHRoaXMuZHJvcERvd25GaWx0ZXI/LmNvbHVtbj8uZmlsdGVyPy50eXBlKSB7XG4gICAgICB0aGlzLmRyb3BEb3duRmlsdGVyLmZpbHRlcih0aGlzLmRyb3BEb3duRmlsdGVyLmV2ZW50LnRhcmdldCk7XG4gICAgfSBlbHNlIGlmIChmaWx0ZXIgJiYgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOICYmIGNvbHVtbj8uZmlsdGVyPy50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0hFQ0tCT1ggJiYgY29sdW1uLmZpbHRlcmluZyAhPT0gZmFsc2UpIHtcbiAgICAgIGZpbHRlcihldmVudD8uY2hlY2tlZCk7XG4gICAgfSBlbHNlIGlmIChmaWx0ZXIpIHtcbiAgICAgIGZpbHRlcihldmVudD8udGFyZ2V0Py52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlTnVsbENhbGVuZGFyKGNvbHVtbjogSUdyaWRDb2x1bW4sIGZpbHRlcjogYW55LCBldmVudDogYW55KSB7XG4gICAgaWYgKGNvbHVtbi5maWx0ZXJWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5yZW1vdmVOdWxsRmlsdGVycyhjb2x1bW4pO1xuICAgICAgdGhpcy5zZXRGaWx0ZXJGb2N1c091dChjb2x1bW4sIGZpbHRlciwgZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIGJhY2tzcGFjZUV2ZW50KGV2ZW50OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgaWYgKFxuICAgICAgZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJyAmJlxuICAgICAgKGNvbHVtbi5maWx0ZXJWYWx1ZT8udG9TdHJpbmcoKS5sZW5ndGggPT09IDEgfHxcbiAgICAgICAgY29sdW1uLmZpbHRlclZhbHVlPy50b1N0cmluZygpID09PSAnJyB8fFxuICAgICAgICBjb2x1bW4uZmlsdGVyVmFsdWUgPT09IG51bGwpXG4gICAgKSB7XG4gICAgICB0aGlzLnJlbW92ZU51bGxGaWx0ZXJzKGNvbHVtbik7XG4gICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUgJiYgY29sdW1uLmZpbHRlclZhbHVlID09PSBudWxsKSB7XG4gICAgICB0aGlzLnJlbW92ZU51bGxGaWx0ZXJzKGNvbHVtbik7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlTnVsbEZpbHRlcnMoY29sdW1uOiBhbnkpIHtcbiAgICBpZiAodGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkgJiYgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IGFyciA9IFsuLi50aGlzLmdsb2JhbEZpbHRlcnNBcnJheV07XG4gICAgICBsZXQgaW5kZXggPSBhcnIuZmluZEluZGV4KChpKSA9PiBpLmZpZWxkID09PSBjb2x1bW4uZmllbGQpO1xuICAgICAgYXJyLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheSA9IGFycjtcbiAgICB9XG4gIH1cblxuICAvLyBSZW1vdmluZyBIZWFkZXIgRmlsdGVyIFZhbHVlIHVzaW5nIEJhY2tzcGFjZSBrZXkgRXZlbnQgb3IgRGVsZXRlIGtleSBFdmVudC5cbiAgcmVtb3ZpbmdGaWx0ZXJzKGV2ZW50OiBhbnksIGNvbHVtbjogSUdyaWRDb2x1bW4pIHtcbiAgICBpZiAoXG4gICAgICAoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJyB8fCBldmVudC5rZXkgPT09ICdEZWxldGUnKSAmJlxuICAgICAgY29sdW1uLmZpbHRlclZhbHVlPy50b1N0cmluZygpLmxlbmd0aCA9PT0gMFxuICAgICkge1xuICAgICAgbGV0IHNlYXJjaEZpbHRlcnM7XG4gICAgICBpZiAoIXRoaXMuc29mdENhY2hpbmcgJiYgdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQpIHtcbiAgICAgICAgc2VhcmNoRmlsdGVycyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ1NldEZpbHRlcnMtJyArIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdGhpcy5jdXJyZW50VXJsKSBhcyBhbnkpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCkge1xuICAgICAgICBzZWFyY2hGaWx0ZXJzID0gdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmxdO1xuICAgICAgfVxuICAgICAgaWYgKHNlYXJjaEZpbHRlcnMgJiYgc2VhcmNoRmlsdGVycy5maWx0ZXJzKSB7XG4gICAgICAgIGlmIChzZWFyY2hGaWx0ZXJzLmZpbHRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGxldCBpbmRleCA9IHNlYXJjaEZpbHRlcnMuZmlsdGVycy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoeDogYW55KSA9PiB4LmZpZWxkID09PSBjb2x1bW4uZmllbGRcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICBpZiAoc2VhcmNoRmlsdGVycy5maWx0ZXJzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCkge1xuICAgICAgICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLnNvZnRDYWNoaW5nRmlsdGVyc1t0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHRoaXMuY3VycmVudFVybF0gPSBbXTtcbiAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ1NldEZpbHRlcnMtJyArIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdGhpcy5jdXJyZW50VXJsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNlYXJjaEZpbHRlcnMuZmlsdGVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICBpZiAoIXRoaXMuc29mdENhY2hpbmcgJiYgdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQpIHtcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnU2V0RmlsdGVycy0nICsgdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmwsIEpTT04uc3RyaW5naWZ5KHNlYXJjaEZpbHRlcnMpKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW3RoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdGhpcy5jdXJyZW50VXJsXSA9IHNlYXJjaEZpbHRlcnM7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBZGQgQ2xpY2sgQnV0dG9uIEV2ZW50IG9uIEdyaWQuXG4gIG9uQ2xpY2tCdXR0b24oY29sdW1uOiBhbnksIHJvdzogYW55KSB7XG4gICAgdGhpcy5vcGVuR3JpZERpYWxvZyhjb2x1bW4sIHJvdyk7XG4gIH1cblxuICAvLyBJbnZva2Ugb25DbGljayBFdmVudC5cbiAgb25DbGlja0V2ZW50KGNvbHVtbjogYW55LCByb3c6IGFueSkge1xuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxJTksgJiYgKGNvbHVtbi5lZGl0TGluayA9PT0gZmFsc2UgfHwgY29sdW1uLmVkaXRMaW5rID09PSB1bmRlZmluZWQpICYmIGNvbHVtbi5lZGl0YWJsZSAhPT0gdHJ1ZSAmJiBjb2x1bW4uZGlzYWJsZWQgIT09IHRydWUpIHtcbiAgICAgIGlmIChjb2x1bW4gJiYgY29sdW1uLm9uQ2xpY2sgJiYgY29sdW1uLmRpc2FibGVkICE9PSB0cnVlICYmIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5hY3Rpb24/LmRpc2FibGVkICE9PSB0cnVlKSB7XG4gICAgICAgIGNvbHVtbi5vbkNsaWNrKHJvdyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgYS5ocmVmID0gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmh5cGVybGluaztcbiAgICAgICAgYS50YXJnZXQgPSBjb2x1bW4udGFyZ2V0ID8gY29sdW1uLnRhcmdldCA6ICdfYmxhbmsnLFxuICAgICAgICAgIGEuY2xpY2soKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gaWYoY29sdW1uLnR5cGU9PT1FR3JpZENvbHVtblR5cGUuRElBTE9HICYmIHJvd1tjb2x1bW4uZmllbGRdKXtcbiAgICAvLyAgIHRoaXMub3BlbkdyaWREaWFsb2coY29sdW1uLHJvdylcbiAgICAvLyB9XG4gICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSAmJiByb3dbY29sdW1uLmZpZWxkXSkge1xuICAgICAgdGhpcy5jYWxlbmRhclByZXZpb3VzVmFsdWUgPSByb3dbY29sdW1uLmZpZWxkXTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgIXJvd1tjb2x1bW4uZmllbGRdICYmXG4gICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUgJiZcbiAgICAgIChjb2x1bW4uc2hvd1RpbWUgfHwgY29sdW1uLnRpbWVPbmx5KSAmJlxuICAgICAgY29sdW1uLm1pbnV0ZXNJbnRlcnZhbFxuICAgICkge1xuICAgICAgdGhpcy5kZWZhdWx0RGF0ZSA9IG5ldyBEYXRlKHNldE1pbnV0ZXNJbnRlcnZhbChuZXcgRGF0ZSgpKSk7XG4gICAgfVxuICAgIGlmIChjb2x1bW4gJiYgY29sdW1uLm9uQ2xpY2sgJiYgY29sdW1uLmRpc2FibGVkICE9PSB0cnVlICYmIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNhYmxlZCAhPT0gdHJ1ZSkge1xuICAgICAgY29sdW1uLm9uQ2xpY2socm93KTtcbiAgICB9XG4gIH1cblxuICBzZXRNdWx0aVNlbGVjdFZhbHVlKGNvbHVtbiwgcm93KSB7XG4gICAgaWYgKHJvd1tjb2x1bW4uZmllbGRdICYmICFBcnJheS5pc0FycmF5KHJvd1tjb2x1bW4uZmllbGRdKSkge1xuICAgICAgaWYgKHR5cGVvZiAocm93W2NvbHVtbi5maWVsZF0pID09PSBcInN0cmluZ1wiICYmICFyb3dbY29sdW1uLmZpZWxkXT8uaW5jbHVkZXMoJywnKSkge1xuICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IFtyb3dbY29sdW1uLmZpZWxkXV07XG4gICAgICB9IGVsc2UgaWYgKHJvd1tjb2x1bW4uZmllbGRdPy50b1N0cmluZygpPy5pbmNsdWRlcygnLCcpKSB7XG4gICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF0/LnNwbGl0KCcsJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByb3dbY29sdW1uLmZpZWxkXTtcbiAgfVxuXG4gIC8vIHNldCB0aGUgc2VsZWN0IHZhbHVlIG9mIG11bHRpLXNlbGVjdFxuICBzaG93T3B0aW9uKGNvbHVtbiwgcm93KSB7XG4gICAgcm93W2NvbHVtbi5maWVsZF0gPSB0aGlzLnNldE11bHRpU2VsZWN0VmFsdWUoY29sdW1uLCByb3cpO1xuICB9XG5cbiAgb25DbGVhclZhbHVlKGNvbHVtbiwgcm93KSB7XG4gICAgaWYgKGNvbHVtbj8udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOICYmICFyb3dbY29sdW1uLmZpZWxkXSkge1xuICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIEludm9rZSBvbkNoYW5nZSBFdmVudFxuICBvbkNoYW5nZUV2ZW50KGNvbHVtbjogYW55LCByb3c6IGFueSkge1xuICAgIC8vIHNldCBkcm9wZG93biBkaXNwbGF5RmllbGQgdmFsdWUgYmFzZSBvbiBvcHRpb25MYWJlbCAmIG9wdGlvblZhbHVlLlxuICAgIHRoaXMuZ3JpZFZhbGlkYXRpb24oY29sdW1uLCByb3csIHRydWUpXG4gICAgdGhpcy5kaXNwbGF5RmllbGREcm9wZG93blZhbHVlKGNvbHVtbiwgcm93KTtcbiAgICB0aGlzLm9uQ2xlYXJWYWx1ZShjb2x1bW4sIHJvdyk7XG4gICAgdGhpcy5icm93c2VyQ2xvc2VFdmVudCh0cnVlKTtcbiAgICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgICBpZiAoY29sdW1uLm9uQ2hhbmdlKSB7XG4gICAgICBjb2x1bW4ub25DaGFuZ2Uocm93KTtcbiAgICB9XG4gICAgdGhpcy5zZXREcm9wZG93bmRhdGFWYWx1ZSA9IGZhbHNlXG4gICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnJvd1VwZGF0ZSA9IGZhbHNlO1xuICAgIHRoaXMuZ2VuZXJhdGVSb3dzRGF0YUNvcHkgPSBmYWxzZVxuICAgIGlmIChjb2x1bW4uYWdncmVnYXRlICYmIGNvbHVtbi5hZ2dyZWdhdGUubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5hZ2dyZWdhdGVGb290ZXIgPSB0cnVlO1xuICAgICAgdGhpcy5zZXRBZ2dyZWdhdGVUZXh0KGNvbHVtbik7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tCb3hDaGFuZ2VFdmVudChldmVudDogYW55LCBjb2x1bW46IElHcmlkQ29sdW1uLCByb3cpIHtcbiAgICByb3dbY29sdW1uLmZpZWxkXSA9IGV2ZW50O1xuICAgIGlmICh0aGlzLnJvd3NDaGFuZ2Uub2JzZXJ2ZXJzPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5ncmlkU2VydmljZS5yb3dVcGRhdGUgPSBmYWxzZTtcbiAgICB0aGlzLmdlbmVyYXRlUm93c0RhdGFDb3B5ID0gZmFsc2VcbiAgICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgfVxuXG4gIC8vIHNldCBkcm9wZG93biBkaXNwbGF5RmllbGQgdmFsdWUgYmFzZSBvbiBvcHRpb25MYWJlbCAmIG9wdGlvblZhbHVlLlxuICBkaXNwbGF5RmllbGREcm9wZG93blZhbHVlKGNvbHVtbjogYW55LCByb3c6IGFueSkge1xuICAgIGlmIChcbiAgICAgIGNvbHVtbj8udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOICYmXG4gICAgICBjb2x1bW4uZGlzcGxheUZpZWxkICYmXG4gICAgICBjb2x1bW4uZGlzcGxheUZpZWxkPy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICBjb25zdCBrZXk6IGFueSA9IE9iamVjdC5rZXlzKHJvdyk/LmZpbmQoXG4gICAgICAgIChyb3dJbmZvKSA9PlxuICAgICAgICAgIHJvd0luZm8/LnRvTG93ZXJDYXNlKCkgPT09IGNvbHVtbi5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGRpc3BsYXlGaWVsZFZhbHVlID0gY29sdW1uLmRhdGEuZmluZChcbiAgICAgICAgKHJlY29yZDogYW55KSA9PlxuICAgICAgICAgIHJlY29yZFtjb2x1bW4ub3B0aW9uVmFsdWVdPy50b1N0cmluZygpID09PVxuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdPy50b1N0cmluZygpXG4gICAgICApO1xuICAgICAgaWYgKGtleSAmJiBkaXNwbGF5RmllbGRWYWx1ZSkge1xuICAgICAgICByb3dba2V5XSA9IGRpc3BsYXlGaWVsZFZhbHVlW2NvbHVtbi5vcHRpb25MYWJlbF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIGF1dG9TZWFyY2ggb24gR3JpZC5cbiAgYXV0b1NlYXJjaChldmVudDogYW55LCBjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcbiAgICBpZiAoZXZlbnQgJiYgY29sdW1uICYmIHJvdykge1xuICAgICAgY29sdW1uLm9uUmV0dXJuKGV2ZW50LnF1ZXJ5LCBjb2x1bW4sIHJvdyk7XG4gICAgfVxuICB9XG5cbiAgLy8gUmVmcmVzaCBncmlkXG4gIHJlZnJlc2hHcmlkKCkge1xuICAgIHRoaXMucmVsb2FkUGFnZSA9IGludGVydmFsKHRoaXMuc2V0R3JpZFJlZnJlc2hUaW1lKS5zdWJzY3JpYmUoKHgpID0+IHtcbiAgICAgIGlmICh0aGlzLmdyaWRmaWx0ZXIgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuZ3JpZGZpbHRlciA9IHsgZmlsdGVyczogW10sIHNvcnRzOiBbXSB9O1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2V0R3JpZFJlZnJlc2hUaW1lKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlU2VydmVyU2lkZUV2ZW50cyh0aGlzLmdyaWRmaWx0ZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gUmVtb3ZlIEZpbHRlclZhbHVlc1xuICBjbGVhcmdyaWRGaWx0ZXJzVmFsdWUoKSB7XG4gICAgY29uc3QgZ2xvYmFsRmlsdGVyQ2xlYXJWYWx1ZUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxuICAgICAgJ2NsZWFyR2xvYmFsRmlsdGVyQnRuJ1xuICAgICk7XG4gICAgaWYgKGdsb2JhbEZpbHRlckNsZWFyVmFsdWVCdG4pIHtcbiAgICAgIGdsb2JhbEZpbHRlckNsZWFyVmFsdWVCdG4uY2xpY2soKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zICYmIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgICBjb2wuZmlsdGVyVmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLmZpbHRlck9iaihjb2wpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZWRpdEFsbFJvd3NBdE9uY2UoKSB7XG4gICAgaWYgKHRoaXMuZWRpdFJvd1Blcm1pc3Npb24pIHtcbiAgICAgIGlmICh0aGlzLmdldENsYXNzRm9yRWRpdEFsbFJvd3MoJ2VkaXRSb3cnKSkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnMuc29tZSgoY29sdW1uKSA9PiBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4gJiYgKGNvbHVtbi5maWx0ZXJpbmcgPT09IHRydWUgfHwgY29sdW1uLmZpbHRlcmluZyA9PT0gdW5kZWZpbmVkKSkpIHtcbiAgICAgICAgICB0aGlzLmVkaXRBbGxSZWNvcmQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc29ydERpc2FibGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzYXZlQWxsUm93c0F0T25jZSgpIHtcbiAgICB0aGlzLmdldENsYXNzRm9yRWRpdEFsbFJvd3MoJ3NhdmVSb3cnKTtcbiAgfVxuXG4gIC8vIHJlc2V0IHRoZSBncmlkIHJvd3NWYWx1ZSB0byBvcmlnbmFsIHZhbHVlc1xuICBjYW5jZWxBbGxSb3dzQXRPbmNlKCkge1xuICAgIHRoaXMucm93c0RhdGEgPSBbLi4udGhpcy5yb3dzRGF0YUNvcHldO1xuICAgIHRoaXMucm93c0RhdGFDb3B5ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnJvd3NEYXRhKSk7XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnM/LmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSkge1xuICAgICAgICB0aGlzLnJvd3NEYXRhPy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZF0pIHtcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gbmV3IERhdGUocm93W2NvbHVtbi5maWVsZF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgIH0pO1xuICAgIGlmICh0aGlzLmNvbHVtbnM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSAmJiBjb2x1bW4uYWdncmVnYXRlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmFnZ3JlZ2F0ZUZvb3RlciA9IHRydWU7XG4gICAgICAgICAgdGhpcy5zZXRBZ2dyZWdhdGVUZXh0KGNvbHVtbik7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIHRoaXMub25DYW5jZWxBbGxSb3dzLmVtaXQodGhpcy5yb3dzRGF0YSk7XG4gIH1cblxuICBnZXRDbGFzc0ZvckVkaXRBbGxSb3dzKGNsYXNzTmFtZTogc3RyaW5nID0gJycpIHtcbiAgICBsZXQgc3VjY2VzczogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGNvbnN0IGdldEJ0bnM6IGFueSA9XG4gICAgICB0aGlzLmVsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQ/LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lKTtcbiAgICBpZiAoZ2V0QnRucyAmJiBnZXRCdG5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gJ3NhdmVSb3cnKSB7XG4gICAgICAgIHRoaXMuZWRpdEFsbFJlY29yZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNhdmVBbGxSZWNvcmQgPSB0cnVlO1xuICAgICAgICBjb25zdCByZWNvcmRzJCA9IFtdO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIGdldEJ0bnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd1NhdmUgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgIGl0ZW0uY2xpY2soKTtcbiAgICAgICAgICAgICAgcmVzb2x2ZShpdGVtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVjb3JkcyQucHVzaChyb3dTYXZlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgUHJvbWlzZS5hbGwocmVjb3JkcyQpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5jaGVja2xpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICB0aGlzLm9uUm93VXBkYXRlLmVtaXQodGhpcy5zZXRSb3dzRGF0YSh0aGlzLmNoZWNrbGlzdCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVSb3dzRGF0YUNvcHkgPSB0cnVlO1xuICAgICAgICAgICAgICB0aGlzLm9uUm93VXBkYXRlLmVtaXQodGhpcy5zYXZlUmVjb3JkQXJyYXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zYXZlUmVjb3JkQXJyYXkgPSBbXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgMjApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNhdmVBbGxSZWNvcmQgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBnZXRCdG5zKSB7XG4gICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PSAnY2FuY2VsUm93Jykge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIGl0ZW0uY2xpY2soKTtcbiAgICAgICAgICAgIH0sIDUwKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXRlbS5jbGljaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3VjY2VzcztcbiAgfVxuXG4gIC8vRm9jdXNlZCBjYWxlbmRhciBpbnB1dCBvbiBzZWxlY3QgZGF0ZVxuICBzZWxlY3REYXRlKGNvbHVtbjogYW55KSB7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29sdW1uLmZpZWxkKT8uZm9jdXMoKTtcbiAgfVxuXG4gIC8vYXBwbHkgZmlsdGVyIG9uIGdyaWQgd2hlbiBzZWFyY2ggYnRuIGNsaWNrZWRcbiAgYXBwbHlHaXJkRmlsdGVyQnRuKCkge1xuICAgIHRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkID0gZmFsc2U7XG4gICAgdGhpcy5ncmlkU2VydmljZS5yb3dVcGRhdGUgPSBmYWxzZTtcbiAgICBsZXQgZmlsdGVySW5EaWFsb2c6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3AtZGlhbG9nJyk7XG4gICAgbGV0IGdsb2JhbEZpbHRlckFwcGx5QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlYXJjaEdsb2JhbEZpbHRlckJ0bicpO1xuICAgIGlmIChmaWx0ZXJJbkRpYWxvZyAmJiBmaWx0ZXJJbkRpYWxvZy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBnbG9iYWxTZWFyY2hCdG4gPSBmaWx0ZXJJbkRpYWxvZ1swXT8ucXVlcnlTZWxlY3RvcignLmdsb2JhbC1zZWFyY2gnKTtcbiAgICAgIGlmIChnbG9iYWxTZWFyY2hCdG4pIHtcbiAgICAgICAgZ2xvYmFsU2VhcmNoQnRuLmNsaWNrKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChnbG9iYWxGaWx0ZXJBcHBseUJ0bikge1xuICAgICAgZ2xvYmFsRmlsdGVyQXBwbHlCdG4uY2xpY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuZ3JpZEZpbHRlck9iaiAmJiBPYmplY3Qua2V5cyh0aGlzLmdyaWRGaWx0ZXJPYmopLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5hcHBseUVudGVyRXZlbnQoXG4gICAgICAgICAgdGhpcy5ncmlkRmlsdGVyT2JqLmZpbHRlcixcbiAgICAgICAgICB0aGlzLmdyaWRGaWx0ZXJPYmouZXZlbnQsXG4gICAgICAgICAgdGhpcy5ncmlkRmlsdGVyT2JqLmNvbHVtblxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGludm9rZSBtdWx0aVNlbGVjdGlvbiBjbGljayBldmVudFxuICBtdWx0aUNoZWNrQm94T25jbGljayhyb3dJbmZvOiBhbnksIGV2ZW50OiBhbnksIHNpbmdsZVNlbGVjdGlvbjogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKCFzaW5nbGVTZWxlY3Rpb24pIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJvd0luZm8pICYmIHJvd0luZm8/Lmxlbmd0aCA+IDAgJiYgZXZlbnQ/LnRhcmdldD8uYXJpYUNoZWNrZWQpIHtcbiAgICAgICAgdGhpcy5jaGVja2xpc3QgPSBbLi4ucm93SW5mb107XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocm93SW5mbykgJiYgZXZlbnQ/LnRhcmdldD8uYXJpYUNoZWNrZWQgPT0gbnVsbCkge1xuICAgICAgICB0aGlzLmNoZWNrbGlzdCA9IFtdO1xuICAgICAgfVxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJvd0luZm8pICYmIGV2ZW50Py50YXJnZXQ/LmFyaWFDaGVja2VkICYmICF0aGlzLmNoZWNrbGlzdC5zb21lKChyb3cpID0+IHJvdy5pZCA9PSByb3dJbmZvLmlkKSkge1xuICAgICAgICB0aGlzLmNoZWNrbGlzdC5wdXNoKHJvd0luZm8pO1xuICAgICAgfSBlbHNlIGlmIChldmVudD8udGFyZ2V0Py5hcmlhQ2hlY2tlZCA9PSBudWxsKSB7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrbGlzdC5zb21lKChyb3cpID0+IHJvdz8uaWQgPT0gcm93SW5mby5pZCkpIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuY2hlY2tsaXN0LmZpbmRJbmRleCgocm93KSA9PiByb3c/LmlkID09IHJvd0luZm8/LmlkKTtcbiAgICAgICAgICB0aGlzLmNoZWNrbGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLm9uTXVsdGlTZWxlY3Rpb25DaGFuZ2UuZW1pdCh0aGlzLnNldFJvd3NEYXRhKHRoaXMuY2hlY2tsaXN0KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2hlY2tsaXN0ID0gW3Jvd0luZm9dXG4gICAgICB0aGlzLm9uTXVsdGlTZWxlY3Rpb25DaGFuZ2UuZW1pdCh0aGlzLnNldFJvd3NEYXRhKHJvd0luZm8pKTtcbiAgICB9XG4gIH1cblxuICBzZXRSb3dzRGF0YShyb3dzRGF0YSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJvd3NEYXRhKSkge1xuICAgICAgcm93c0RhdGEuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgcm93ID0gdGhpcy5yZW1vdmVSb3dPYmoocm93KTtcbiAgICAgICAgcm93ID0gdGhpcy5ncmlkU2VydmljZS5zZXRSb3dWYWx1ZShyb3cpO1xuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgcm93c0RhdGEgPSB0aGlzLnJlbW92ZVJvd09iaihyb3dzRGF0YSk7XG4gICAgICByb3dzRGF0YSA9IHRoaXMuZ3JpZFNlcnZpY2Uuc2V0Um93VmFsdWUocm93c0RhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gcm93c0RhdGE7XG4gIH1cblxuICByZW1vdmVSb3dPYmoocm93OiBhbnkpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocm93KTtcbiAgICBpZiAoa2V5cz8ubGVuZ3RoID4gMCkge1xuICAgICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgaWYgKGtleS5pbmNsdWRlcygnX29iaicpKSB7XG4gICAgICAgICAgZGVsZXRlIHJvd1trZXldO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gcm93O1xuICB9XG5cbiAgYXBwbHlEcm9wZG93bkZpbHRlcihmaWx0ZXI6IGFueSwgZXZlbnQ6IGFueSkge1xuICAgIGZpbHRlcihldmVudC50YXJnZXQpO1xuICB9XG5cbiAgc2VhcmNoRHJvcGRvd25GaWx0ZXIoZmlsdGVyOiBhbnksIGV2ZW50OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgdGhpcy5zZXRGaWx0ZXJGb2N1c091dChjb2x1bW4sIGZpbHRlciwgZXZlbnQpO1xuICAgIHRoaXMuZHJvcERvd25GaWx0ZXIgPSB7IGZpbHRlcjogZmlsdGVyLCBldmVudDogZXZlbnQsIGNvbHVtbjogY29sdW1uIH07XG4gICAgaWYgKGNvbHVtbi5hbGxvd1NlYXJjaCAhPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5hcHBseURyb3Bkb3duRmlsdGVyKGZpbHRlciwgZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIGxvb2t1cENsZWFyVmFsdWUoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93PzogYW55KSB7XG4gICAgaWYgKHJvdykge1xuICAgICAgY29sdW1uLmRpc3BsYXlGaWVsZCA/IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXSA9ICcnIDogJydcbiAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy50ZXh0ID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10udGV4dCA9ICcnIDogJydcbiAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZSA9ICcnO1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmNvbHVtbnMuZmluZEluZGV4KChjb2wpID0+IGNvbC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIHRoaXMuY29sdW1uc1tpbmRleF0uZmlsdGVyVmFsdWUgPSAnJztcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uKTtcbiAgICB9XG4gICAgdGhpcy5icm93c2VyQ2xvc2VFdmVudCh0cnVlKTtcbiAgICBpZiAoY29sdW1uLm9uQ2hhbmdlKSB7XG4gICAgICBjb2x1bW4ub25DaGFuZ2Uocm93KTtcbiAgICB9XG4gIH1cblxuICAvLyBpbnZva2Ugd2hlbiBjbGljayBoZWFkZXIgY2hlY2tib3ggZmlsdGVyXG4gIGNsaWNrQ2hlY2tCb3hGaWx0ZXIoY29sdW1uOiBJR3JpZENvbHVtbikge1xuICAgIGlmICh0aGlzLmVkaXRBbGxSZWNvcmQpIHtcbiAgICAgIGlmIChcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOXG4gICAgICAgICYmXG4gICAgICAgIGNvbHVtbj8uZmlsdGVyPy50eXBlID09PSAnY2hlY2tib3gnICYmIGNvbHVtbi5maWx0ZXJpbmcgIT0gZmFsc2VcbiAgICAgICkge1xuICAgICAgICB0aGlzLnJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgIGlmIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzYWJsZWQgIT09IHRydWUgJiYgIWNvbHVtbi5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBjb2x1bW4uZmlsdGVyVmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5vbkNoZWNrQm94RmlsdGVyQ2xpY2suZW1pdChjb2x1bW4pO1xuICB9XG4gIC8vc2V0IGhlYWRlciBjaGVja2JveCB2YWx1ZSBmb3IgZ2V0dGluZyBhbGwgY29sdW1ucyBvbiBzdGF5IGFkbWluXG4gIHNldEhlYWRlckNoZWNrQm94VmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMuaXNJbmNsdWRlZEFsbENvbHVtbnMuZW1pdCh2YWx1ZSk7XG4gIH1cblxuICAvLyBzZXQgY2FsZW5kYXIgMiBPciA0IGRpZ2l0IHllYXIgZm9ybWF0XG4gIGNhbGVuZGFySW5wdXRWYWx1ZShjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNvbHVtbi5maWVsZCArIHJvd1t0aGlzLmRhdGFLZXldKVswXT8uYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCAodmFsOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHllYXIgPSB2YWw/LnRhcmdldD8udmFsdWU/LnRvU3RyaW5nKCk/LnNwbGl0KCcvJylbMl07XG4gICAgICBpZiAoeWVhciAmJiB5ZWFyLmxlbmd0aCA9PT0gNCkge1xuICAgICAgICB0aGlzLmNhbGVuZGFyRm9ybWF0ID0gJ21tL2RkL3l5JztcbiAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBuZXcgRGF0ZSh2YWw/LnRhcmdldD8udmFsdWUpPy50b0xvY2FsZURhdGVTdHJpbmcoXCJlbi1VU1wiKTtcbiAgICAgIH0gZWxzZSBpZiAoeWVhciAmJiB5ZWFyLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmNhbGVuZGFyRm9ybWF0ID0gJ21tL2RkL3knO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59IiwiPGRpdiBjbGFzcz1cImdyaWQtY29tcG9uZW50LXdyYXBwZXJcIj5cbjxwLWNvbmZpcm1EaWFsb2cgW3N0eWxlXT1cInsgd2lkdGg6ICc1MHZ3JyB9XCIgKm5nSWY9XCJ1c2VJbmxpbmVDUlVEXCIga2V5PVwiaGFuZGxlSW5saW5lQ1JVRFwiPjwvcC1jb25maXJtRGlhbG9nPlxuPHAtY29uZmlybURpYWxvZyBjbGFzcz1cImdyaWQtY29tcG9uZW50LWNvbmZpcm0tZGlhbG9nXCIgKm5nSWY9XCJjb2x1bW5BY3Rpb25zLmxlbmd0aCA+IDBcIlxuICBrZXk9XCJoYW5kbGVjb2x1bW5BY3Rpb25zXCI+PC9wLWNvbmZpcm1EaWFsb2c+XG48ZGl2IGNsYXNzPVwiZ2xvYmFsLWZpbHRlci1idXR0b25zLXdyYXBwZXJcIj5cblxuICA8IS0tIGJ1dHRvbiBmb3IgYXBwbHkgdmFsdWUgb24gR3JpZCAtLT5cbiAgPGJ1dHRvbiAqbmdJZj1cImZpbHRlcmluZyAmJiAoIWhpZGVGaWx0ZXIgfHwgc2hvd0ZpbHRlcmJ0bilcIiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktc2VhcmNoXCIgKGNsaWNrKT1cImFwcGx5R2lyZEZpbHRlckJ0bigpXCJcbiAgICBbY2xhc3NdPVwiXG4gIHNlYXJjaEdyaWRGaWx0ZXIgPyAncC1idXR0b24tc3VjY2VzcyBhcHBseS1maWx0ZXItYnRuIGZpbHRlci1idG4nIDogJ2hpZGUtY2xlYXItZmlsdGVyLWJ1dHRvbiBhcHBseS1maWx0ZXItYnRuIGZpbHRlci1idG4nXG4gIFwiPjwvYnV0dG9uPlxuXG4gIDwhLS0gYnV0dG9uIGZvciBjbGVhciB2YWx1ZSBvbiBHcmlkIC0tPlxuICA8YnV0dG9uICpuZ0lmPVwiZmlsdGVyaW5nICYmICghaGlkZUZpbHRlciB8fCBzaG93RmlsdGVyYnRuKVwiIHBCdXR0b24gaWQ9XCJjbGVhckdyaWRGaWx0ZXJWYWx1ZXNCdXR0b25cIiB0eXBlPVwiYnV0dG9uXCJcbiAgICBpY29uPVwicGkgcGktcmVwbGF5XCIgKGNsaWNrKT1cImNsZWFyZ3JpZEZpbHRlcnNWYWx1ZSgpXCIgW2NsYXNzXT1cIlxuICAgICAgY2xlYXJHcmlkRmlsdGVyID8gJ2ZpbHRlci1idG4nIDogJ2hpZGUtY2xlYXItZmlsdGVyLWJ1dHRvbiBmaWx0ZXItYnRuJ1xuICAgICAgXCIgY2xhc3M9J2dsb2JhbC1yZWZyZXNoIGdsb2JhbC1idG4nXG4gICAgPjwvYnV0dG9uPlxuXG4gIDwhLS0gYnV0dG9uIGZvciBzYXZlIGFsbCBncmlkIGF0IG9uY2UgLS0+XG4gIDxidXR0b24gcEJ1dHRvbiAqbmdJZj1cImVkaXRBbGxSb3dzICYmIGVkaXRSb3dQZXJtaXNzaW9uXCIgaWQ9XCJzYXZlQWxsR3JpZFZhbHVlc1wiXG4gICAgaWNvbj1cInBpIHBpLWNoZWNrXCIgW2xhYmVsXT1cIidTYXZlJ1wiXG4gICAgW2NsYXNzXT1cImhpZGVHcmlkU2F2ZUJ1dHRvbiA/ICdoaWRlLWNsZWFyLWZpbHRlci1idXR0b24nIDogJ3VpLWJ1dHRvbi1pbmZvJ1wiIHR5cGU9XCJidXR0b25cIlxuICAgIChjbGljayk9XCJzYXZlQWxsUm93c0F0T25jZSgpXCI+PC9idXR0b24+XG5cbiAgPCEtLSBidXR0b24gZm9yIGNhbmNlbCBhbGwgZ3JpZCBhdCBvbmNlIC0tPlxuICA8YnV0dG9uIHBCdXR0b24gKm5nSWY9XCJlZGl0QWxsUm93cyAmJiAhaGlkZUdyaWRDYW5jZWxCdXR0b25cIiBpZD1cImVkaXRCdG5HbG9iYWx2YWx1ZXNcIiB0eXBlPVwiYnV0dG9uXCIgW2xhYmVsXT1cIidDYW5jZWwnXCJcbiAgICBpY29uPVwicGkgcGktdGltZXNcIiBjbGFzcz1cInVpLWJ1dHRvbi1pbmZvXCIgKGNsaWNrKT1cImNhbmNlbEFsbFJvd3NBdE9uY2UoKVwiPjwvYnV0dG9uPlxuXG4gIDwhLS0gaGVhZGVyIEJ1dHRvbiBmb3IgbXVsdGlTZWxlY3Qgb24gR3JpZCAtLT5cbiAgPHNwYW4gKm5nSWY9XCJhbGxvd0NvbHVtblRvZ2dsZVwiPlxuICAgIDxwLW11bHRpU2VsZWN0IFtzaG93VG9nZ2xlQWxsXT1cImZhbHNlXCIgW29wdGlvbnNdPVwiY29sdW1uc1wiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRDb2x1bW5zXCIgb3B0aW9uTGFiZWw9XCJoZWFkZXJcIlxuICAgICAgc2VsZWN0ZWRJdGVtc0xhYmVsPVwiezB9IGNvbHVtbnMgc2VsZWN0ZWRcIiAgY2xhc3M9XCJncmlkLWNvbXBvbmVudC1tdWx0aXNlbGVjdC1oZWFkZXItYnV0dG9uXCIgcGxhY2Vob2xkZXI9XCJDaG9vc2UgQ29sdW1uc1wiPlxuICAgIDwvcC1tdWx0aVNlbGVjdD5cbiAgPC9zcGFuPlxuXG4gIDwhLS0gaGVhZGVyIEJ1dHRvbiBmb3IgQWRkaW5nIG5ldyBSb3cgb24gR3JpZCAtLT5cbiAgPGJ1dHRvbiBwQnV0dG9uICpuZ0lmPVwidXNlSW5saW5lQ1JVRCAmJiBhZGRSb3dQZXJtaXNzaW9uICYmICFoaWRlQWRkQnRuXCIgdHlwZT1cImJ1dHRvblwiIFtsYWJlbF09XCInQWRkJ1wiIHBBZGRSb3dcbiAgICBbdGFibGVdPVwiY29tcG9uZW50VGFibGVSZWZcIiBbbmV3Um93XT1cIm5ld0dyaWRSb3dcIiBbaWRdPVwiZGF0YUtleVwiIHBUb29sdGlwPVwiQWRkIE5ldyBSb3dcIiB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIlxuICAgIGljb249XCJwaSBwaS1wbHVzXCIgY2xhc3M9XCJ1aS1idXR0b24taW5mbyBnbG9iYWwtYWRkLWJ0blwiIChjbGljayk9XCJhZGROZXdSb3cobmV3R3JpZFJvdywgdHJ1ZSlcIiBwUmlwcGxlPjwvYnV0dG9uPlxuXG4gICAgXG4gIDwhLS0gaGVhZGVyIEJ1dHRvbiBmb3IgRXhjZWwgRmlsZSBvbiBHcmlkIC0tPlxuICA8YnV0dG9uICpuZ0lmPVwiYWxsb3dFeHBvcnRUb0V4Y2VsXCIgdHlwZT1cImJ1dHRvblwiIHBCdXR0b24gaWNvbj1cInBpIHBpLWZpbGUtZXhjZWxcIiAoY2xpY2spPVwiZXhwb3J0RXhjZWwoKVwiXG4gIGNsYXNzPVwicC1idXR0b24tc3VjY2Vzc1wiIHBUb29sdGlwPVwiRXhwb3J0IHRvIEV4Y2VsXCIgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCIgcFJpcHBsZT48L2J1dHRvbj5cblxuPCEtLSBoZWFkZXIgQnV0dG9uIGZvciBQREYgRmlsZSBvbiBHcmlkIC0tPlxuPGJ1dHRvbiAqbmdJZj1cImFsbG93RXhwb3J0VG9QZGZcIiB0eXBlPVwiYnV0dG9uXCIgcEJ1dHRvbiBpY29uPVwicGkgcGktZmlsZS1wZGZcIiAoY2xpY2spPVwiZXhwb3J0UGRmKClcIlxuICBjbGFzcz1cInAtYnV0dG9uLXdhcm5pbmcgbXItMiBtbC0yXCIgcFRvb2x0aXA9XCJFeHBvcnQgdG8gUGRmXCIgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCIgcFJpcHBsZT48L2J1dHRvbj5cblxuICA8IS0tIDxkaXYgKm5nRm9yPVwibGV0IHJlcG9ydEJ1dHRvbiBvZiByZXBvcnRCdXR0b25zXCIgY2xhc3M9XCJ1aS1idXR0b24taW5mbyBtci0yIG1sLTJcIj5cbiAgICA8c2UtZ2VuZXJhdGUtcmVwb3J0LWJ0biAqbmdJZiA9XCIhcmVwb3J0QnV0dG9uLmhpZGRlblwiW3JlcElkXT1cInJlcG9ydEJ1dHRvbi5yZXBvcnRJZFwiIFtsYWJlbF09XCJyZXBvcnRCdXR0b24ubGFiZWxcIiBbcGFyYW1zXT1cInJlcG9ydEJ1dHRvbi5wYXJhbXNcIlxuICAgICAgW3Nob3dEaWFsb2ddPVwicmVwb3J0QnV0dG9uLnNob3dEaWFsb2dcIj48L3NlLWdlbmVyYXRlLXJlcG9ydC1idG4+XG4gIDwvZGl2PiAtLT5cblxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG5cbiAgPG5nLWNvbnRhaW5lciAgKm5nRm9yPVwibGV0IHJlcG9ydEJ1dHRvbiBvZiByZXBvcnRCdXR0b25zXCI+XG4gICAgPHNlLWdlbmVyYXRlLXJlcG9ydC1idG4gKm5nSWYgPVwiIXJlcG9ydEJ1dHRvbi5oaWRkZW5cIltyZXBJZF09XCJyZXBvcnRCdXR0b24ucmVwb3J0SWRcIiBbbGFiZWxdPVwicmVwb3J0QnV0dG9uLmxhYmVsXCIgW3BhcmFtc109XCJyZXBvcnRCdXR0b24ucGFyYW1zXCIgW2ljb25dPVwicmVwb3J0QnV0dG9uLmljb25cIiBbY2xhc3NdPVwicmVwb3J0QnV0dG9uLmNsYXNzXCJcbiAgICBbc2hvd0RpYWxvZ109XCJyZXBvcnRCdXR0b24uc2hvd0RpYWxvZ1wiPjwvc2UtZ2VuZXJhdGUtcmVwb3J0LWJ0bj5cbiAgPC9uZy1jb250YWluZXI+XG5cbjwvZGl2PlxuXG4gIDxwLXRhYmxlICpuZ0lmPVwiIWlzR3JpZEhpZGRlblwiIGlkPVwibXktdGFibGVcIiBbdmFsdWVdPVwicm93c0RhdGFcIiBbY29sdW1uc109XCJzZWxlY3RlZENvbHVtbnNcIiBzb3J0TW9kZT1cIm11bHRpcGxlXCJcbiAgICBbbGF6eV09XCJ1c2VTZXJ2ZXJTaWRlRXZlbnRzXCIgW3BhZ2luYXRvcl09XCJwYWdpbmF0aW9uXCIgW2Fsd2F5c1Nob3dQYWdpbmF0b3JdPVwicGFnaW5hdGlvbiAmJiB0b3RhbFJlY29yZHMgPiAwXCIgW2NsYXNzXT1cInBhZ2luYXRpb24gfHwgIXJvd3NEYXRhLmxlbmd0aCA/ICdwYWdpbmF0aW9uJyA6ICcnXCJcbiAgICBjbGFzcz1cImdyaWQtY29tcG9uZW50LW1haW4tdGFibGVcIlxuICAgIFtyZXNpemFibGVDb2x1bW5zXT1cInRydWVcIiBbYXV0b0xheW91dF09XCJ0cnVlXCJcbiAgICAgcmVzcG9uc2l2ZUxheW91dD1cInNjcm9sbFwiIGNvbHVtblJlc2l6ZU1vZGU9XCJleHBhbmRcIlxuICAgIFtyb3dzXT1cImRlZmF1bHRSb3dzXCIgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIiBbcm93c1BlclBhZ2VPcHRpb25zXT1cInNldFBhZ2luYXRpb25MZW5ndGhcIlxuICAgIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwic2hvd0N1cnJlbnRQYWdlUmVwb3J0XCIgY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZT1cIlNob3dpbmcge2ZpcnN0fSB0byB7bGFzdH0gb2Yge3tcbiAgICAgIHRvdGFsUmVjb3Jkc1xuICAgIH19IGVudHJpZXNcIiBbbG9hZGluZ109XCJhdXRvTG9hZERhdGEgJiYgIXNldEdyaWRSZWZyZXNoVGltZSA/IGxvYWRpbmcgOiBmYWxzZVwiXG4gICAgKG9uU29ydCk9XCJzb3J0RGlzYWJsZWQgPz8gaGFuZGxlU29ydENoYW5nZSgkZXZlbnQpXCIgKG9uRmlsdGVyKT1cImhhbmRsZUZpbHRlckNoYW5nZSgkZXZlbnQpXCJcbiAgICAob25MYXp5TG9hZCk9XCJhdXRvTG9hZERhdGEgPyBoYW5kbGVTZXJ2ZXJTaWRlRXZlbnRzKCRldmVudCkgOiAnJ1wiIChvblBhZ2UpPVwiaGFuZGxlU2VydmVyU2lkZVBhZ2luYXRpb24oJGV2ZW50KVwiICNkdFxuICAgIFtkYXRhS2V5XT1cImRhdGFLZXlcIiBbKHNlbGVjdGlvbildPVwic2VsZWN0ZWRSb3dzXCIgc2VsZWN0aW9uTW9kZT1cIm11bHRpcGxlXCIgW3Njcm9sbGFibGVdPVwic2Nyb2xsYWJsZVwiIFxuICAgIFt0YWJsZVN0eWxlXT1cInRhYmxlU3R5bGVcIlxuICAgIFtzY3JvbGxIZWlnaHRdPVwic2Nyb2xsSGVpZ2h0XCJcbiAgICBlZGl0TW9kZT1cInJvd1wiIFtlZGl0aW5nUm93S2V5c109XCJlZGl0aW5nUm93S2V5c1wiIFthdXRvTGF5b3V0XT1cInRydWVcIiBbcm93SG92ZXJdPVwicm93SG92ZXJcIlxuICAgIFtuZ0NsYXNzXT1cInsnaG9yaXpvbnRhbC1zY3JvbGwnOiBob3Jpem9udGFsU2Nyb2xsID09PSB0cnVlID8gdHJ1ZSA6IGZhbHNlfVwiPlxuICAgIDwhLS0gW3RhYmxlU3R5bGVdPVwiJ21heC1oZWlnaHQ6ICcgKyBzY3JvbGxIZWlnaHQgKyAnOyAnICsgdGFibGVTdHlsZVwiIC0tPlxuICAgIDwhLS0gW3RhYmxlU3R5bGVdPVwieyAnbWF4LWhlaWdodCc6IHNjcm9sbEhlaWdodCB9XCIgLS0+XG4gICAgPCEtLSBoZWFkZXIgQnV0dG9uIGZvciBBY3Rpb24gb24gR3JpZCAtLT5cbiAgICA8IS0tIFtzY3JvbGxIZWlnaHRdPVwiJ2ZsZXgnXCIgLS0+XG5cbiAgICA8ZGl2ICpuZ0lmPVwicm93QWN0aW9ucy5sZW5ndGggPiAwICYmIHJvd0FjdGlvbnMubGVuZ3RoID4gMFwiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XG4gICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgcm93QWN0aW9uIG9mIHJvd0FjdGlvbnNcIj5cbiAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBbbGFiZWxdPVwicm93QWN0aW9uLnRpdGxlXCIgW2NsYXNzXT1cInJvd0FjdGlvbi5jbGFzc1wiXG4gICAgICAgICAgKGNsaWNrKT1cInJvd0FjdGlvbi5vbkNsaWNrKHNlbGVjdGVkUm93cylcIj48L2J1dHRvbj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gaGVhZGVyIGNvbHVtbnMgb24gR3JpZCAtLT5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCIgbGV0LWNvbHM+XG4gICAgICA8dHI+XG4gICAgICAgIDx0aCBwUmVzaXphYmxlQ29sdW1uICpuZ0lmPVwiYWxsb3dTZWxlY3Rpb24gJiYgc2VsZWN0aW9uVHlwZSA9PT0gJ211bHRpcGxlJ1wiIGNsYXNzPVwiZ3JpZC1jb21wb25lbnQtc2VsZWN0aW9uXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aC1jb250ZW50LXdyYXBwZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkLWNvbXBvbmVudC10YWJsZS1oZWFkZXItaW5uZXItZGl2LTJcbiAgICAgICAgICAgICAgICAgIHRhYmxlLWhlYWRlci1pbm5lci1kaXYgZGl2LWxhc3QtaW5uZXItaHRtbC1pcy1pY29uXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmxleC1ncm93LTFcIj4ge3thbGxvd1NlbGVjdGlvbkhlYWRlcn19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHAtdGFibGVIZWFkZXJDaGVja2JveCAqbmdJZj1cInNlbGVjdGlvblR5cGUgPT09ICdtdWx0aXBsZSdcIiBiaW5hcnk9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwibXVsdGlDaGVja0JveE9uY2xpY2socm93c0RhdGEsICRldmVudClcIj48L3AtdGFibGVIZWFkZXJDaGVja2JveD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoIHBSZXNpemFibGVDb2x1bW4gKm5nSWY9XCJhbGxvd1NlbGVjdGlvbiAmJiBzZWxlY3Rpb25UeXBlID09PSAnc2luZ2xlJ1wiIFxuICAgICAgICAgICAgICBjbGFzcz1cImdyaWQtY29tcG9uZW50LXNlbGVjdGlvblwiPlxuICAgICAgICAgIFNlbGVjdFxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggcFJlc2l6YWJsZUNvbHVtblxuICAgICAgICAgICpuZ0lmPVwic2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiAhZGlzYWJsZWRTYXZlQnRuICYmIGNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYgKGNvbHVtbkFjdGlvbnMubGVuZ3RoID4gMCB8fCAodXNlSW5saW5lQ1JVRCAmJiAoZGVsZXRlUm93UGVybWlzc2lvbiB8fCBlZGl0Um93UGVybWlzc2lvbikpKVwiXG4gICAgICAgICAgW2NsYXNzXT1cImluRWRpdE1vZGUgPyAndGhyZWUtYWN0aW9uLWJ0bicgOiAndHdvLWFjdGlvbi1idG4nXCI+XG4gICAgICAgICAgQWN0aW9uc1xuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggcFJlc2l6YWJsZUNvbHVtbiAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHNcIiBbcFNvcnRhYmxlQ29sdW1uXT1cImNvbHVtbi5maWVsZFwiXG4gICAgICAgICAgW3N0eWxlXT1cImNvbHVtbi5zdHlsZVwiXG4gICAgICAgICAgW2NsYXNzXT1cImNvbHVtbi50eXBlID09PSAnYm9vbGVhbicgPyAnY2hlY2tib3gtdGgnIDogJydcIlxuICAgICAgICAgIFtwU29ydGFibGVDb2x1bW5EaXNhYmxlZF09XCJzb3J0RGlzYWJsZWQgJiYgdXNlU2VydmVyU2lkZUV2ZW50cyA/IHRydWUgOiBjb2x1bW4uc29ydGluZyA9PT0gZmFsc2VcIlxuICAgICAgICAgIGNsYXNzPVwiY29sdW1uPy50eXBlID09PSAnbXVsdGlwbGUnID8gJ2dyaWQtY29tcG9uZW50LXNlbGVjdC10aC1jb2x1bW4tdHlwZS1tdWx0aXBsZScgOiAnJ1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGgtY29udGVudC13cmFwcGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZC1jb21wb25lbnQtdGFibGUtaGVhZGVyLWlubmVyLWRpdi0xIHRhYmxlLWhlYWRlci1pbm5lci1kaXYgZGl2LWxhc3QtaW5uZXItaHRtbC1pcy1pY29uXCI+ICAgICAgICBcbiAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cIidmbGV4LWdyb3ctMSdcIj57eyBjb2x1bW4uaGVhZGVyIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbHVtbi5pc1JlcXVpcmVkXCIgY2xhc3M9XCJncmlkLWNvbXBvbmVudCByZXF1aXJlZC1zdGFyXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgPHAtc29ydEljb24gKm5nSWY9XCJjb2x1bW4uc29ydGluZyAhPT0gZmFsc2UgJiYgY29sdW1uPy50eXBlICE9PSAnbXVsdGlwbGUnXCJcbiAgICAgICAgICAgICAgICBbZmllbGRdPVwiY29sdW1uLmZpZWxkXCI+PC9wLXNvcnRJY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoIHBSZXNpemFibGVDb2x1bW5cbiAgICAgICAgICAqbmdJZj1cIiFzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmICFkaXNhYmxlZFNhdmVCdG4gJiYgY29sdW1ucz8ubGVuZ3RoID4gMCAmJiAoY29sdW1uQWN0aW9ucy5sZW5ndGggPiAwIHx8ICh1c2VJbmxpbmVDUlVEICYmIChkZWxldGVSb3dQZXJtaXNzaW9uIHx8IGVkaXRSb3dQZXJtaXNzaW9uKSkpXCJcbiAgICAgICAgICBbY2xhc3NdPVwiaW5FZGl0TW9kZSA/ICd0aHJlZS1hY3Rpb24tYnRuJyA6ICd0d28tYWN0aW9uLWJ0bidcIj5BY3Rpb25zPC90aD5cbiAgICAgIDwvdHI+XG4gICAgICA8dHIgKm5nSWY9XCJmaWx0ZXJpbmcgJiYgIWhpZGVGaWx0ZXJcIj5cbiAgICAgICAgPHRoIHBSZXNpemFibGVDb2x1bW4gKm5nSWY9XCJhbGxvd1NlbGVjdGlvblwiIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiPjwvdGg+XG4gICAgICAgIDx0aCBwUmVzaXphYmxlQ29sdW1uICpuZ0lmPVwic2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiAhZGlzYWJsZWRTYXZlQnRuXCJcbiAgICAgICAgICBbY2xhc3NdPVwiaW5FZGl0TW9kZSA/ICd0aHJlZS1hY3Rpb24tYnRuJyA6ICd0d28tYWN0aW9uLWJ0bidcIj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoIHBSZXNpemFibGVDb2x1bW4gKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2xzXCIgW25nU3dpdGNoXT1cImNvbHVtbj8uZmlsdGVyPy50eXBlXCIgW3N0eWxlXT1cImNvbHVtbi5zdHlsZVwiXG4gICAgICAgICAgW2NsYXNzXT1cImhpZGVGaWx0ZXJPcHRpb25zID8gJ2hpZGUtdGFibGUtZmlsdGVyJyA6ICcnXCI+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4uZmlsdGVyaW5nICE9PSBmYWxzZVwiIFtjbGFzc109XCJjb2x1bW4uZmlsdGVyPy5zaG93RmlsdGVyID8gJycgOiAnaGlkZS1maWx0ZXItaWNvbidcIj5cbiAgICAgICAgICAgIDwhLS0gVGV4dCBpbnB1dCBvbiBIZWFkZXIgRm9yIEZpbHRlci0tPlxuICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyIGNsYXNzPVwibm8tZmlsdGVyLWljb25cIiBbdHlwZV09XCIndGV4dCdcIiBbZmllbGRdPVwiY29sdW1uLmZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIidpbnB1dCdcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZpbHRlclwiIGxldC12YWx1ZSBsZXQtZmlsdGVyPVwiZmlsdGVyQ2FsbGJhY2tcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cImNvbHVtbi5maWx0ZXJWYWx1ZVwiIChrZXl1cC5lbnRlcik9XCJhcHBseUVudGVyRXZlbnQoZmlsdGVyLCAkZXZlbnQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgKGJsdXIpPVwic2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uLCBmaWx0ZXIsICRldmVudClcIiAoa2V5ZG93bik9XCJiYWNrc3BhY2VFdmVudCgkZXZlbnQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgKGtleXVwKT1cInJlbW92aW5nRmlsdGVycygkZXZlbnQsIGNvbHVtbilcIiBwSW5wdXRUZXh0IC8+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3AtY29sdW1uRmlsdGVyPlxuXG4gICAgICAgICAgICA8IS0tIE51bWVyaWMgaW5wdXQgb24gSGVhZGVyIEZvciBGaWx0ZXItLT5cbiAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlciBjbGFzcz1cIm5vLWZpbHRlci1pY29uXCIgW3R5cGVdPVwiJ251bWVyaWMnXCIgW2ZpZWxkXT1cImNvbHVtbi5maWVsZFwiICpuZ1N3aXRjaENhc2U9XCInbnVtZXJpY19pbnB1dCdcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZpbHRlclwiIGxldC12YWx1ZSBsZXQtZmlsdGVyPVwiZmlsdGVyQ2FsbGJhY2tcIj5cbiAgICAgICAgICAgICAgICA8cC1pbnB1dE51bWJlciBbKG5nTW9kZWwpXT1cImNvbHVtbi5maWx0ZXJWYWx1ZVwiIChrZXl1cC5lbnRlcik9XCJhcHBseUVudGVyRXZlbnQoZmlsdGVyLCAkZXZlbnQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgKG9uQmx1cik9XCJzZXRGaWx0ZXJGb2N1c091dChjb2x1bW4sIGZpbHRlciwgJGV2ZW50KVwiIChrZXlkb3duKT1cImJhY2tzcGFjZUV2ZW50KCRldmVudCwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAoa2V5dXApPVwicmVtb3ZpbmdGaWx0ZXJzKCRldmVudCwgY29sdW1uKVwiPjwvcC1pbnB1dE51bWJlcj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvcC1jb2x1bW5GaWx0ZXI+XG5cbiAgICAgICAgICAgICAgPCEtLSBsb29rdXAgaW5wdXQgb24gSGVhZGVyIEZvciBGaWx0ZXItLT5cbiAgICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJuby1maWx0ZXItaWNvblwiXG4gICAgICAgICAgICAgICAgW3R5cGVdPVwiJ3RleHQnXCJcbiAgICAgICAgICAgICAgICBbZmllbGRdPVwiY29sdW1uLmZpZWxkXCJcbiAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2xvb2t1cF9pbnB1dCdcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICBwVGVtcGxhdGU9XCJmaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgbGV0LXZhbHVlXG4gICAgICAgICAgICAgICAgICBsZXQtZmlsdGVyPVwiZmlsdGVyQ2FsbGJhY2tcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbG9zZS1pY29uLXdyYXBwZXIgZ3JpZC1jb21wb25lbnQgbG9va3VwLWZpbHRlci13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb29rdXAtZmlsdGVyLWlucHV0LXdyYXBwZXJcIj4gXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX2ZpbHRlcidcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZ3JpZC1jb21wb25lbnQgbG9va3VwLWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb2x1bW4uZmlsdGVyVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXRGaWx0ZXJMb29rdXAoY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImFwcGx5RW50ZXJFdmVudChmaWx0ZXIsICRldmVudCwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwic2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uLCBmaWx0ZXIsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImJhY2tzcGFjZUV2ZW50KCRldmVudCwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cInJlbW92aW5nRmlsdGVycygkZXZlbnQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgIHBJbnB1dFRleHRcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICBcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpcmVjdC13cmFwcGVyLWNsb3NlLWljb24tbG9va3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4uZmlsdGVyVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXRpbWVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImxvb2t1cENsZWFyVmFsdWUoY29sdW1uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvcC1jb2x1bW5GaWx0ZXI+XG5cbiAgICAgICAgICAgIDwhLS0gY2hlY2tib3ggb24gSGVhZGVyIEZvciBGaWx0ZXItLT5cbiAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlciBjbGFzcz1cIm5vLWZpbHRlci1pY29uXCIgdHlwZT1cImJvb2xlYW5cIiBbZmllbGRdPVwiY29sdW1uLmZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIidjaGVja2JveCdcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZpbHRlclwiIGxldC12YWx1ZSBsZXQtZmlsdGVyPVwiZmlsdGVyQ2FsbGJhY2tcIj5cbiAgICAgICAgICAgICAgICA8cC1jaGVja2JveCBbYmluYXJ5XT1cInRydWVcIiBbZGlzYWJsZWRdPVwiY29sdW1uLmRpc2FibGVkXCIgWyhuZ01vZGVsKV09XCJjb2x1bW4uZmlsdGVyVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImFwcGx5RW50ZXJFdmVudChmaWx0ZXIsICRldmVudCwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwic2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uLCBmaWx0ZXIsICRldmVudClcIiAoY2xpY2spPVwiY2xpY2tDaGVja0JveEZpbHRlcihjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImJhY2tzcGFjZUV2ZW50KCRldmVudCwgY29sdW1uKVwiPlxuICAgICAgICAgICAgICAgIDwvcC1jaGVja2JveD5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvcC1jb2x1bW5GaWx0ZXI+XG5cbiAgICAgICAgICAgIDwhLS0gbXVsdGlTZWxlY3Qgb24gSGVhZGVyIEZvciBGaWx0ZXItLT5cbiAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlciBjbGFzcz1cIm5vLWZpbHRlci1pY29uXCIgW2ZpZWxkXT1cImNvbHVtbi5maWVsZFwiIG1hdGNoTW9kZT1cImluXCIgW3Nob3dNZW51XT1cImZhbHNlXCIgKm5nU3dpdGNoQ2FzZT1cIidtdWx0aS1zZWxlY3QnXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmaWx0ZXJcIiBsZXQtdmFsdWUgbGV0LWZpbHRlcj1cImZpbHRlckNhbGxiYWNrXCI+XG4gICAgICAgICAgICAgICAgPHAtbXVsdGlTZWxlY3QgWyhuZ01vZGVsKV09XCJjb2x1bW4uZmlsdGVyVmFsdWVcIiBbb3B0aW9uc109XCJjb2x1bW4uZmlsdGVyLmRhdGEgfHwgW11cIiBcbiAgICAgICAgICAgICAgICBbYXBwZW5kVG9dPVwiJ2JvZHknXCIgW25hbWVdPVwiY29sdW1uLmZpZWxkXCJcbiAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiYXBwbHlFbnRlckV2ZW50KGZpbHRlciwgJGV2ZW50LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICBbb3B0aW9uVmFsdWVdPVwiY29sdW1uLm9wdGlvblZhbHVlXCJcbiAgICAgICAgICAgICAgICAgW29wdGlvbkxhYmVsXT1cImNvbHVtbi5vcHRpb25MYWJlbFwiXG4gICAgICAgICAgICAgICAgICAoYmx1cik9XCJzZXRGaWx0ZXJGb2N1c091dChjb2x1bW4sIGZpbHRlciwgJGV2ZW50KVwiIFxuICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiYmFja3NwYWNlRXZlbnQoJGV2ZW50LCBjb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgPC9wLW11bHRpU2VsZWN0PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9wLWNvbHVtbkZpbHRlcj5cblxuICAgICAgICAgICAgPCEtLSBkcm9wZG93biBvbiBIZWFkZXIgRm9yIEZpbHRlci0tPlxuICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyIGNsYXNzPVwibm8tZmlsdGVyLWljb25cIiBbZmllbGRdPVwiY29sdW1uLmZpZWxkXCIgbWF0Y2hNb2RlPVwiaW5cIiBbc2hvd01lbnVdPVwiZmFsc2VcIiAqbmdTd2l0Y2hDYXNlPVwiJ2Ryb3Bkb3duJ1wiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZmlsdGVyXCIgbGV0LXZhbHVlIGxldC1maWx0ZXI9XCJmaWx0ZXJDYWxsYmFja1wiPlxuICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duIFtzaG93Q2xlYXJdPVwidHJ1ZVwiIFtwbGFjZWhvbGRlcl09XCInU2VsZWN0J1wiIFtmaWx0ZXJdPVwiY29sdW1uLmFsbG93U2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29sdW1uLmZpbHRlclZhbHVlXCIgKGtleXVwLmVudGVyKT1cImFwcGx5RHJvcGRvd25GaWx0ZXIoZmlsdGVyLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImNvbHVtbi5maWx0ZXIuZGF0YSB8fCBbXVwiXG4gICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwic2VhcmNoRHJvcGRvd25GaWx0ZXIoZmlsdGVyLCAkZXZlbnQsIGNvbHVtbilcIj48L3AtZHJvcGRvd24+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3AtY29sdW1uRmlsdGVyPlxuXG4gICAgICAgICAgICA8IS0tIGNhbGVuZGFyIG9uIEhlYWRlciBGb3IgRmlsdGVyLS0+XG4gICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgY2xhc3M9XCJuby1maWx0ZXItaWNvblwiIFtmaWVsZF09XCJjb2x1bW4uZmllbGRcIiBtYXRjaE1vZGU9XCJpblwiIFtzaG93TWVudV09XCJmYWxzZVwiICpuZ1N3aXRjaENhc2U9XCInY2FsZW5kYXInXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmaWx0ZXJcIiBsZXQtdmFsdWUgbGV0LWZpbHRlcj1cImZpbHRlckNhbGxiYWNrXCI+XG4gICAgICAgICAgICAgICAgPHAtY2FsZW5kYXIgW3BsYWNlaG9sZGVyXT1cIidTZWxlY3QtRGF0ZSdcIiBbKG5nTW9kZWwpXT1cImNvbHVtbi5maWx0ZXJWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiYXBwbHlFbnRlckV2ZW50KGZpbHRlciwgJGV2ZW50LCBjb2x1bW4pXCIgYXBwZW5kVG89XCJib2R5XCIgKG9uU2VsZWN0KT1cInNlbGVjdERhdGUoY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICBbaW5wdXRJZF09XCJjb2x1bW4uZmllbGRcIiBob3VyRm9ybWF0PVwiMTJcIiAoa2V5dXAuYmFja3NwYWNlKT1cInJlbW92ZU51bGxDYWxlbmRhcihjb2x1bW4sIGZpbHRlciwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBbc2hvd0J1dHRvbkJhcl09XCJ0cnVlXCIgKG9uQ2xvc2UpPVwic2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uLCBmaWx0ZXIsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiYmFja3NwYWNlRXZlbnQoJGV2ZW50LCBjb2x1bW4pXCIgKG9uQ2xlYXJDbGljayk9XCJiYWNrc3BhY2VFdmVudCgkZXZlbnQsIGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICA8L3AtY2FsZW5kYXI+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3AtY29sdW1uRmlsdGVyPlxuXG4gICAgICAgICAgICA8IS0tIERlZmF1bHQgRmlsdGVyIEZvciBIZWFkZXIgIC0tPlxuICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyIGNsYXNzPVwibm8tZmlsdGVyLWljb25cIiBbdHlwZV09XCJcbiAgICAgICAgICAgICAgICBjb2x1bW4udHlwZSAmJiBjb2x1bW4udHlwZSAhPT0gJ2xpbmsnID8gY29sdW1uLnR5cGUgOiAndGV4dCdcbiAgICAgICAgICAgICAgXCIgW2ZpZWxkXT1cImNvbHVtbi5maWVsZFwiIGRpc3BsYXk9XCJtZW51XCIgKm5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgICAgIDwvcC1jb2x1bW5GaWx0ZXI+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggcFJlc2l6YWJsZUNvbHVtblxuICAgICAgICAgICpuZ0lmPVwiIXNldEFjdGlvbkNvbHVtbkFzRmlyc3QgJiYgIWRpc2FibGVkU2F2ZUJ0biAmJiBjb2x1bW5zPy5sZW5ndGggPiAwICYmIChjb2x1bW5BY3Rpb25zLmxlbmd0aCA+IDAgfHwgKHVzZUlubGluZUNSVUQgJiYgKGRlbGV0ZVJvd1Blcm1pc3Npb24gfHwgZWRpdFJvd1Blcm1pc3Npb24pKSlcIlxuICAgICAgICAgIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiPjwvdGg+XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8IS0tIEJvZHkgY29sdW1ucyBvbiBHcmlkIC0tPlxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXJvdyBsZXQtZWRpdGluZz1cImVkaXRpbmdcIiBsZXQtcmk9XCJyb3dJbmRleFwiPlxuICAgICAgPHRyIFxuICAgICAgW3N0eWxlXT1cInJvd1N0eWxlXCJcbiAgICAgIFtuZ0NsYXNzXT1cInJvdz8uaGlnaGxpZ2h0cm93ID8gJ2hpZ2hsaWdodGVkLXJvdycgOiAnJ1wiXG4gICAgICAgIFtjbGFzc109XCJ3b3JkV3JhcCA/ICdwLXNlbGVjdGFibGUtcm93IHdvcmRXcmFwVHJ1ZScgOiAnd29yZFdyYXBGYWxzZSBwLXNlbGVjdGFibGUtcm93J1wiIChjbGljayk9XCIhZWRpdGluZyAmJiBoYW5kbGVSb3dDbGljayhyb3cpXCJcbiAgICAgICAgW3BFZGl0YWJsZVJvd109XCJyb3dcIiAjZ3JpZFJvdyBbaWRdPVwicm93W2RhdGFLZXldXCI+XG4gICAgICAgIDx0ZCAqbmdJZj1cImFsbG93U2VsZWN0aW9uXCIgY2xhc3M9XCJncmlkLWNvbXBvbmVudC1zZWxlY3Rpb25cIj5cbiAgICAgICAgICA8cC10YWJsZVJhZGlvQnV0dG9uIFt2YWx1ZV09XCJyb3dcIiAqbmdJZj1cInNlbGVjdGlvblR5cGUgPT09ICdzaW5nbGUnXCJcbiAgICAgICAgICAgIChjbGljayk9XCJtdWx0aUNoZWNrQm94T25jbGljayhyb3cgLCAkZXZlbnQsIHRydWUpXCI+PC9wLXRhYmxlUmFkaW9CdXR0b24+XG4gICAgICAgICAgPHAtdGFibGVDaGVja2JveCBbdmFsdWVdPVwicm93XCIgKm5nSWY9XCJzZWxlY3Rpb25UeXBlID09PSAnbXVsdGlwbGUnXCJcbiAgICAgICAgICAgIChjbGljayk9XCJtdWx0aUNoZWNrQm94T25jbGljayhyb3csICRldmVudClcIj48L3AtdGFibGVDaGVja2JveD5cbiAgICAgICAgPC90ZD5cblxuICAgICAgICA8IS0tIGZpcnN0IGFjdGlvbnMgY29sdW1uIC0tPlxuICAgICAgICA8dGQgKm5nSWY9XCJzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmIGNvbHVtbkFjdGlvbnMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWN0aW9uLWJ0blwiICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgY29sdW1uQWN0aW9uc1wiPlxuICAgICAgICAgICAgPGkgW3RpdGxlXT1cImFjdGlvbi50b29sdGlwXCIgW2NsYXNzXT1cImFjdGlvbi5pY29uXCIgKGNsaWNrKT1cImhhbmRsZUFjdGlvbkNsaWNrKCRldmVudCwgYWN0aW9uLCByb3cpXCI+PC9pPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkICpuZ0lmPVwic2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiB1c2VJbmxpbmVDUlVEICYmIChkZWxldGVSb3dQZXJtaXNzaW9uIHx8IGVkaXRSb3dQZXJtaXNzaW9uKVwiXG4gICAgICAgICAgW2NsYXNzXT1cImluRWRpdE1vZGUgPyAndGhyZWUtYWN0aW9uLWJ0bicgOiAndHdvLWFjdGlvbi1idG4nXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJkaXNhYmxlZFNhdmVCdG4gPyAnaGlkZS1jbGVhci1maWx0ZXItYnV0dG9uJyA6ICcnXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZXRBY3Rpb25Db2x1bW5XaWR0aFwiPlxuICAgICAgICAgICAgPHNlLWdyaWQtcm93LWFjdGlvbnMgW2VkaXRpbmddPVwiZWRpdGluZ1wiIFtlZGl0Um93UGVybWlzc2lvbl09XCJlZGl0Um93UGVybWlzc2lvblwiXG4gICAgICAgICAgICAgIFtkZWxldGVSb3dQZXJtaXNzaW9uXT1cImRlbGV0ZVJvd1Blcm1pc3Npb25cIiBbaGlkZURlbGV0ZUJ0bl09XCJoaWRlRGVsZXRlQnRuXCIgW2hpZGVFZGl0QnRuXT1cImhpZGVFZGl0QnRuXCJcbiAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIiAob25Sb3dFZGl0SW5pdEJ0bik9XCJvblJvd0VkaXRJbml0KCRldmVudClcIiAoZGVsZXRlUmVjb3JkQnRuKT1cImRlbGV0ZVJlY29yZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKG9uUm93RWRpdFNhdmVCdG4pPVwib25Sb3dFZGl0U2F2ZSgkZXZlbnQpXCIgKG9uUm93RWRpdENhbmNlbEJ0bik9XCJvblJvd0VkaXRDYW5jZWwoJGV2ZW50LCByaSlcIlxuICAgICAgICAgICAgICBbZWRpdEFsbFJvd3NdPVwiZWRpdEFsbFJvd3NcIj5cbiAgICAgICAgICAgIDwvc2UtZ3JpZC1yb3ctYWN0aW9ucz5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGQ+XG5cbiAgICAgICAgPCEtLSBHcmlkIFJvd3MgRGF0YSBCaW5kaW5ncyBTdGFydCAtLT5cbiAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBjb2x1bW4gb2Ygc2VsZWN0ZWRDb2x1bW5zXCIgW25nU3dpdGNoXT1cImNvbHVtbi50eXBlXCIgW3N0eWxlXT1cImNvbHVtbi5zdHlsZSBcIiBcbiAgICAgICAgKG1vdXNlZW50ZXIpPVwiKGNvbHVtbi5vbkhvdmVyICYmIGNvbHVtbi5vbkhvdmVyLmNvbXBvbmVudCkgJiYgYWRkRHluYW1pY1BhbmVsT3ZlcmxheUNvbXBvbmVudChjb2x1bW4ub25Ib3ZlcikmJiBvdmVybGF5UGFuZWwuc2hvdygkZXZlbnQpXCJcbiAgICAgICAgKG1vdXNlbGVhdmUpPVwiKGNvbHVtbi5vbkhvdmVyICYmIGNvbHVtbi5vbkhvdmVyLmNvbXBvbmVudCkgICYmIG92ZXJsYXlQYW5lbC5oaWRlKClcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZC1jb250ZW50LXdyYXBwZXJcIj5cblxuICAgICAgICAgIDwhLS0gQm9vbGVhbiBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2Jvb2xlYW4nXCJcbiAgICAgICAgICA+XG4gICAgICAgIDx0ZCAqbmdJZj1cIiFlZGl0aW5nXCI+XG4gICAgICAgICAgPHAtY2hlY2tib3ggXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFjb2x1bW4uYWxsb3dFZGl0ID8/IHRydWVcIiBbYmluYXJ5XT1cInRydWVcIiAoY2xpY2spPVwib25DbGlja0V2ZW50KGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGVja0JveENoYW5nZUV2ZW50KCRldmVudCwgY29sdW1uLCByb3cpXCIgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiIFxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCIgXG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdICYmXG4gICAgICAgICAgICAgIChyb3dbY29sdW1uLmZpZWxkXS50b1N0cmluZygpID09PSAnMScgfHxcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJyB8fFxuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ3knfHxcbiAgICAgICAgICAgICAgICAoIHJvd1tjb2x1bW4uZmllbGRdLnRleHQgJiYgKHJvd1tjb2x1bW4uZmllbGRdPy50ZXh0Py50b1N0cmluZygpID09PSAnMScgfHxcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXT8udGV4dD8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnIHx8XG4gICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0/LnRleHQ/LnRvU3RyaW5nKCk/LnRvTG93ZXJDYXNlKCkgPT09ICd5JykpKVxuICAgICAgICAgICAgICAgICAgPyBDaGVja2VkXG4gICAgICAgICAgICAgICAgICA6IHVuQ2hlY2tlZFxuICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgIDwvcC1jaGVja2JveD5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkICpuZ0lmPVwiZWRpdGluZ1wiPlxuICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgPCEtLSBmb3IgZWRpdCBjaGVja0JveCAtLT5cbiAgICAgICAgICAgICAgPHAtY2hlY2tib3ggKGNsaWNrKT1cIm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdylcIiAobmdNb2RlbENoYW5nZSk9XCJjaGVja0JveENoYW5nZUV2ZW50KCRldmVudCwgY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiIFtiaW5hcnldPVwidHJ1ZVwiIFsobmdNb2RlbCldPVwiXG4gICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdICYmICAgXG4gICAgICAgICAgICAgICAgICAgIChyb3dbY29sdW1uLmZpZWxkXS50b1N0cmluZygpID09PSAnMScgfHxcbiAgICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJyB8fFxuICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ3knIHx8XG4gICAgICAgICAgICAgICAgICAgICAgKCByb3dbY29sdW1uLmZpZWxkXS50ZXh0ICYmIChyb3dbY29sdW1uLmZpZWxkXT8udGV4dD8udG9TdHJpbmcoKSA9PT0gJzEnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0/LnRleHQ/LnRvU3RyaW5nKCk/LnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJyB8fFxuICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdPy50ZXh0Py50b1N0cmluZygpPy50b0xvd2VyQ2FzZSgpID09PSAneScpKSlcbiAgICAgICAgICAgICAgICAgICAgICA/IGVkaXRNb2RlQ2hlY2tlZFxuICAgICAgICAgICAgICAgICAgICAgIDogZWRpdE1vZGV1bkNrZWNrZWRcbiAgICAgICAgICAgICAgICAgIFwiIChibHVyKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIj48L3AtY2hlY2tib3g+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICB7eyByb3dbY29sdW1uLmZpZWxkXSB9fVxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDwhLS0gbGluayBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidsaW5rJ1wiPlxuICAgICAgICAgIDwhLS0gbGluayBjb2x1bW4gZm9yIEh5cGVyTGluayBDYXNlIC0tPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uLmFsbG93U2F2ZSA9PT0gZmFsc2VcIj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uLnRhcmdldCAhPT0gJ19zZWxmJ1wiIChjbGljayk9XCJvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cInNldENvbmRpdGlvbkJhc2VWYWx1ZShyb3csIGNvbHVtbilcIiBjbGFzcz1cImN1c3RvbS1saW5rXCJcbiAgICAgICAgICAgICAgW2NsYXNzXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnZGlzYWJsZWQtbGluaycgOiAnJ1wiPlxuXG4gICAgICAgICAgICA8YSAgW2hyZWZdPVwiY29sdW1uLmRpc2FibGVkPycnOnJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5oeXBlcmxpbmtcIiB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImNvbHVtbi5pY29uICYmIXJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWU7IGVsc2Ugbm9JY29uXCIgW2NsYXNzXT1cImNvbHVtbi5pY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9JY29uPlxuICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZT8nJzpcbiAgICAgICAgICAgICAgICAgICAgc2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdywgY29sdW1uKVxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L2E+XG4gICAgICAgIFxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4udGFyZ2V0ID09PSAnX3NlbGYnXCIgKGNsaWNrKT1cIm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwic2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdywgY29sdW1uKVwiY2xhc3M9XCJjdXN0b20tbGlua1wiXG4gICAgICAgICAgICAgIFtjbGFzc109XCIgYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdkaXNhYmxlZC1saW5rJyA6ICcnXCI+XG5cbiAgICAgICAgICAgICAgPGEgIFtocmVmXT1cImNvbHVtbi5kaXNhYmxlZD8nJzpyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uaHlwZXJsaW5rXCIgW3RhcmdldF09J2NvbHVtbi50YXJnZXQnPlxuICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiY29sdW1uLmljb24gJiYhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZTsgZWxzZSBub0ljb25cIiBbY2xhc3NdPVwiY29sdW1uLmljb25cIj48L2k+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0ljb24+XG4gICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlPycnOlxuICAgICAgICAgICAgICAgICAgICBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LCBjb2x1bW4pXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvYT5cblxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8IS0tIGxpbmsgY29sdW1uIGZvciBFZGl0IENhc2UgLS0+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4uYWxsb3dTYXZlIHx8IGNvbHVtbi5hbGxvd1NhdmUgPT09IHVuZGVmaW5lZFwiPlxuICAgICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKGNvbHVtbi5lZGl0YWJsZSA9PT0gdHJ1ZSB8fCBjb2x1bW4uZWRpdGFibGUgPT09IHVuZGVmaW5lZCkgJiYgKGNvbHVtbi5lZGl0TGluayA9PT0gdHJ1ZSB8fCBjb2x1bW4uZWRpdExpbmsgPT09IHVuZGVmaW5lZClcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cIiFyb3cuaXNOZXdcIiBwSW5wdXRUZXh0IChjbGljayk9XCJvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpXCIgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKydfb2JqJ10/LmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlID8gJycgOiByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKSA/XG4gICAgICAgICAgICAgICAgICAgIHJvd1tyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXSA6IHJvd1tjb2x1bW4uZmllbGRdXCIgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2VFdmVudChjb2x1bW4sIHJvdylcIiAvPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IHBJbnB1dFRleHQgKm5nSWY9XCJyb3cuaXNOZXdcIiB0eXBlPVwidGV4dFwiIChjbGljayk9XCJvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSsnX29iaiddPy5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eScgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCkgPyByb3dbcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKV0gOlxuICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXVwiIChibHVyKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoY29sdW1uLCByb3cpXCIgLz5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4uZWRpdGFibGUgPT09IGZhbHNlXCIgPlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiY3VzdG9tLWxpbmtcIiAoY2xpY2spPVwib25DbGlja0V2ZW50KGNvbHVtbiwgcm93KVwiIFtocmVmXT1cInJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5oeXBlcmxpbmtcIiBbdGFyZ2V0XT0nY29sdW1uLnRhcmdldCdcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2Rpc2FibGVkLWxpbmsnIDogJydcIj5cbiAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiY29sdW1uLmljb24gJiYgIXJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWU7IGVsc2Ugbm9JY29uXCJbY2xhc3NdPVwiY29sdW1uLmljb25cIj48L2k+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vSWNvbj5cbiAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWU/Jyc6XG4gICAgICAgICAgICAgICAgICAgIHNldENvbmRpdGlvbkJhc2VWYWx1ZShyb3csIGNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbHVtbi5lZGl0TGluayA9PT0gZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgIDxhIChjbGljayk9XCJvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpXCIgW2hyZWZdPVwicm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmh5cGVybGlua1wiIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjb2x1bW4uZWRpdGFibGUgPT09IGZhbHNlID8gJycgOiBhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2Rpc2FibGVkLWxpbmsnIDogJydcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjb2x1bW4uaWNvbiAmJiAhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZTsgZWxzZSBub0ljb25cIltjbGFzc109XCJjb2x1bW4uaWNvblwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0ljb24+XG4gICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZT8nJzpcbiAgICAgICAgICAgICAgICAgICAgICBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LCBjb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiAgY2xhc3M9XCJjdXN0b20tbGlua1wiICBbY2xhc3NdPVwiY29sdW1uLmVkaXRhYmxlID09PSBmYWxzZSB8fCBhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2Rpc2FibGVkLWxpbmsnIDogJydcIj5cbiAgICAgICAgICAgICAgICAgIDxhICAoY2xpY2spPVwib25DbGlja0V2ZW50KGNvbHVtbiwgcm93KVwiIFtocmVmXT1cImNvbHVtbi5kaXNhYmxlZD8nJzpyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uaHlwZXJsaW5rXCIgW3RhcmdldF09XCJjb2x1bW4udGFyZ2V0XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiY29sdW1uLmljb24mJiAhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZTsgZWxzZSBub0ljb25cIltjbGFzc109XCJjb2x1bW4uaWNvblwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0ljb24+XG4gICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWU/Jyc6XG4gICAgICAgICAgICAgICAgICAgICAgc2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdywgY29sdW1uKVxuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgPC9hPlxuXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPCEtLSBJZnJhbWUgY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInaWZyYW1lJ1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWxpbmtcIiAoY2xpY2spPVwiZ3JpZElGcmFtZShjb2x1bW4sIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5oeXBlcmxpbmssIHJvdylcIiBbdGl0bGVdPVwiXG4gICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gJiZcbiAgICAgICAgICAgICAgICAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQgPT09IG51bGwgfHwgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQgPT09ICcnKVxuICAgICAgICAgICAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkXSA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgOiBjb2x1bW4uZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICAgID8gY29sdW1uLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGRdXG5cbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID4gIFxuICAgICAgICAgICAgPGkgKm5nSWY9XCJjb2x1bW4uaWNvbjsgZWxzZSBub0ljb25cIltjbGFzc109XCJjb2x1bW4uaWNvblwiPjwvaT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9JY29uPlxuICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gJiZcbiAgICAgICAgICAgICAgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0ID09PSBudWxsIHx8IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0ID09PSAnJylcbiAgICAgICAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkXSA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICA/IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgIDogY29sdW1uLmRpc3BsYXlUZXh0ID8gY29sdW1uLmRpc3BsYXlUZXh0IDogcm93W2NvbHVtbi5maWVsZF1cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgIDwhLS0gZGlhbG9nIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInZGlhbG9nJ1wiPlxuICAgICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sdW1uPy5maWx0ZXI/LnR5cGUgIT09ICdjYWxlbmRhcicgJiYgIXJvdz8uaGlkZWdyaWRidG5cIiBcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LCBjb2x1bW4pIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4uZWRpdGFibGUgPT09IHRydWUgJiYgIXJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSsnX29iaiddPy5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eScgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnaGlkZS1ib3JkZXInIDogJydcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICBwSW5wdXRUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdExvb2t1cEZpZWxkKGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZCA/XG4gICAgICAgICAgICAgICAgICAgICAgcm93W3Jvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXSA6IFxuICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJyb3dbY29sdW1uLmZpZWxkXVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sdW1uLmVkaXRhYmxlID09PSBmYWxzZSB8fCBjb2x1bW4uZWRpdGFibGUgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICBcIiBjbGFzcz1cImN1c3RvbS1saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICBhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2Rpc2FibGVkLWxpbmsnIDogJydcbiAgICAgICAgICAgICAgICAgICAgXCIgKGNsaWNrKT1cIm9wZW5HcmlkRGlhbG9nKGNvbHVtbiwgcm93LCAkZXZlbnQpXCI+XG5cbiAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiKGNvbHVtbi5pY29uIHx8IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbikgJiYgIXJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWUgOyBlbHNlIG5vSWNvblwiIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24gPyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24gOiBjb2x1bW4uaWNvblwiPjwvaT5cbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9JY29uPnt7ICghY29sdW1uLmRpc3BsYXlUZXh0ICYmIHJvdy5pc05ldyApIHx8IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWUgPyAnJyA6IHNldENvbmRpdGlvbkJhc2VWYWx1ZShyb3csIGNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgfX08L25nLXRlbXBsYXRlPlxuXG5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4/LmZpbHRlcj8udHlwZSA9PT0gJ2NhbGVuZGFyJ1wiIFt0aXRsZV09XCJcbiAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF1cbiAgICAgICAgICAgICAgICAgICAgICB8IGRhdGU6IChjb2x1bW4uZm9ybWF0ID8gY29sdW1uLmZvcm1hdCA6ICdNTS9kZC9ZWScpXG4gICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICA8cC1jYWxlbmRhciBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKydfb2JqJ10/LmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgIFtpZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2hpZGUtYm9yZGVyJyA6ICcnXCIgKG9uQ2xvc2UpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgICBbYXBwZW5kVG9dPVwiJ2JvZHknXCIgaG91ckZvcm1hdD1cIjEyXCIgW3Nob3dUaW1lXT1cImNvbHVtbi5zaG93VGltZVwiIChjbGljayk9XCJvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgIFt0aW1lT25seV09XCJjb2x1bW4udGltZU9ubHlcIlxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZCA/XG4gICAgICAgICAgICAgICAgICAgIHJvd1tyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXSA6IHJvd1tjb2x1bW4uZmllbGRdXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCI+PC9wLWNhbGVuZGFyPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWxpbmtcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93LmRpc2FibGVkICAgfHwgYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdkaXNhYmxlZC1saW5rJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5HcmlkRGlhbG9nKGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LCBjb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIihjb2x1bW4uaWNvbiB8fCByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24pICYmICFyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlIDsgZWxzZSBub0ljb25cIiBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5pY29uID8gcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5pY29uIDogY29sdW1uLmljb25cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9JY29uPnt7IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWUgPyAnJyA6IHNldENvbmRpdGlvbkJhc2VWYWx1ZShyb3csIGNvbHVtbikgfX08L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwhLS0ge3sgc2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdywgY29sdW1uKSB9fVxuICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIXJvd1tjb2x1bW4uZmllbGQgKyAnX3NlY29uZFR5cGUnXSAmJiAhcm93LmhpZGVncmlkYnRuXCIgLS0+XG5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDwhLS0gbG9va3VwIElucHV0IGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2xvb2t1cF9pbnB1dCdcIj5cbiAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbG9zZS1pY29uLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgcmVhZG9ubHkgdHlwZT1cInRleHRcIiBwSW5wdXRUZXh0XG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkICA/IHJvd1tyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV0gOlxuICAgICAgICAgICAgICAgICAgdHlwZU9mKHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8udGV4dCkgPT09ICdvYmplY3QnICYmIHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8udGV4dD8uaGFzT3duUHJvcGVydHkoJ3RleHQnKSA/IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8udGV4dD8udGV4dCA6IFxuICAgICAgICAgICAgICAgICAgY29sdW1uLmRpc3BsYXlGaWVsZCA/IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXSA6IHJvd1tjb2x1bW4uZmllbGRdXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgKGtleXVwLnRhYik9XCJzZWxlY3RMb29rdXBGaWVsZChjb2x1bW4sIHJvdylcIiBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0TG9va3VwRmllbGQoY29sdW1uLCByb3cpXCIgW2lkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnaGlkZS1ib3JkZXInIDogJydcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSsnX29iaiddPy5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eScgOiAnJ1wiIChibHVyKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIiAvPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiPjxidXR0b24gKm5nSWY9XCJyb3dbY29sdW1uLmZpZWxkXSAmJiB0eXBlT2Yocm93W2NvbHVtbi5maWVsZF0pID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkXS50ZXh0XG4gICAgICAgICAgICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGRdICYmICFjb2x1bW4uZGlzYWJsZWRcIiBpY29uPVwicGkgcGktdGltZXNcIiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibG9va3VwQ2xlYXJWYWx1ZShjb2x1bW4scm93KVwiPjwvYnV0dG9uPjwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uLmxpbmtJZFwiPlxuICAgICAgICAgICAgICAgIDxhIFtocmVmXT1cInJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5oeXBlcmxpbmtcIiBbdGFyZ2V0XT1cImNvbHVtbi50YXJnZXQgPT09ICdfc2VsZicgPyAnJyA6ICAnX2JsYW5rJ1wiPlxuICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgc2V0TG9va3VwUmVhZE9ubHlWYWx1ZShyb3csIGNvbHVtbilcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWNvbHVtbi5saW5rSWRcIiBbY2xhc3NdPVwiY29sdW1uLmNvbXBvbmVudCAmJiBjb2x1bW4uZWRpdExpbmsgPT09IHRydWUgPyAnY3VzdG9tLWxpbmsnIDogJydcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuTG9va3VwSHlwZXJsaW5rKGNvbHVtbiwgcm93KVwiPlxuICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICBzZXRMb29rdXBSZWFkT25seVZhbHVlKHJvdywgY29sdW1uKVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8IS0tIE51bWVyaWMgSW5wdXQgY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInbnVtZXJpYydcIj5cbiAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgIDwhLS0gZm9yIEN1cnJlbmN5ICYmIERlY2ltYWwgJiYgUGVyY2VudCAtLT5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1udW1iZXJcIj5cbiAgICAgICAgICAgICAgICA8cC1pbnB1dE51bWJlciBbaWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdoaWRlLWJvcmRlcicgOiAnJ1wiIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICduZy1pbnZhbGlkIG5nLWRpcnR5J1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAnZm9ybS1jb250cm9sJ1xuICAgICAgICAgICAgICAgICAgICBcIiBbc2hvd0J1dHRvbnNdPVwiIWNvbHVtbi5mb3JtYXQgPyB0cnVlIDogZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZCA/IHJvd1tyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV0gOiByb3dbY29sdW1uLmZpZWxkXVwiIFtuYW1lXT1cImNvbHVtbi5maWVsZFwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiIChvbkZvY3VzKT1cIm9uRm9jdXNFdmVudChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgKG9uQmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCIgW21vZGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdCAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQudHlwZSA9PT0gJ2N1cnJlbmN5J1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAnY3VycmVuY3knXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICdkZWNpbWFsJ1xuICAgICAgICAgICAgICAgICAgICBcIiBbY3VycmVuY3ldPVwiXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdCAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQudHlwZSA9PT0gJ2N1cnJlbmN5JyAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQuZm9ybWF0UGFyYW1zICYmXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdC5mb3JtYXRQYXJhbXMuY3VycmVuY3lcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY29sdW1uLmZvcm1hdC5mb3JtYXRQYXJhbXMuY3VycmVuY3lcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ1VTRCdcbiAgICAgICAgICAgICAgICAgICAgXCIgW2xvY2FsZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdC50eXBlID09PSAnY3VycmVuY3knICYmXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdC5mb3JtYXRQYXJhbXMgJiZcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0LmZvcm1hdFBhcmFtcy5sb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY29sdW1uLmZvcm1hdC5mb3JtYXRQYXJhbXMubG9jYWxlXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICdlbi1VUydcbiAgICAgICAgICAgICAgICAgICAgXCIgW21pbkZyYWN0aW9uRGlnaXRzXT1cImNvbHVtbi5mb3JtYXQgPyBzZXROdW1lcmljTWluTXhGcmFjdGlvbihjb2x1bW4pIDogJzAnXCJcbiAgICAgICAgICAgICAgICAgIFttYXhGcmFjdGlvbkRpZ2l0c109XCJjb2x1bW4uZm9ybWF0ID8gc2V0TnVtZXJpY01pbk14RnJhY3Rpb24oY29sdW1uKSA6ICcwJ1wiIFtzdWZmaXhdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdCAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQudHlwZSA9PT0gJ3BlcmNlbnQnICYmIFxuICAgICAgICAgICAgICAgICAgICAgICAgJyUnXG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgPC9wLWlucHV0TnVtYmVyPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbG9ja2VkX2ZpZWxkPjxzcGFuICpuZ0lmPVwiIXJvdy5pc05ld1wiIFt0aXRsZV09XCJyb3dbY29sdW1uLmZpZWxkXVwiPlxuICAgICAgICAgICAgICAgICAge3sgcm93W2NvbHVtbi5maWVsZF0gfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgIDxzcGFuIFt0aXRsZV09XCJzZXROdW1lcmljRm9ybWF0KGNvbHVtbiwgcm93KVwiPlxuICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgc2V0TnVtZXJpY0Zvcm1hdChjb2x1bW4sIHJvdylcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPCEtLSBCdXR0b24gY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInYWRkX2J1dHRvbidcIj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFyb3cuaGlkZWdyaWRidG5cIiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBbaWNvbl09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24gPyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24gOiBjb2x1bW4uaWNvblwiXG4gICAgICAgICAgICAgIFtuYW1lXT1cImNvbHVtbi5oZWFkZXJcIiBjbGFzcz1cIm1lcmdlLWJ0blwiIFtkaXNhYmxlZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheVRleHQgPyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlUZXh0IDogY29sdW1uLnZhbHVlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJncmlkLWNvbXBvbmVudC1ncmlkLWFkZC1idG5cIiAoY2xpY2spPVwib25DbGlja0J1dHRvbihjb2x1bW4sIHJvdylcIj48L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zcGFuPiAgICAgICAgXG5cbiAgICAgICAgPCEtLSBEYXRlIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGUnXCIgW3RpdGxlXT1cInNldENvbmRpdGlvbkJhc2VWYWx1ZShyb3csY29sdW1uKVwiPlxuICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgPHAtY2FsZW5kYXJcbiAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKydfb2JqJ10/LmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5ICcgKyBjb2x1bW4uZmllbGQgKyByb3dbZGF0YUtleV0gOiBjb2x1bW4uZmllbGQgKyByb3dbZGF0YUtleV1cIlxuICAgICAgICAgICAgICAgIFtpZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2hpZGUtYm9yZGVyJyA6ICcnXCIgKG9uQ2xvc2UpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgW2FwcGVuZFRvXT1cIidib2R5J1wiIGhvdXJGb3JtYXQ9XCIxMlwiIFtkZWZhdWx0RGF0ZV09XCJkZWZhdWx0RGF0ZVwiXG4gICAgICAgICAgICAgICAgW3N0ZXBNaW51dGVdPVwiY29sdW1uLm1pbnV0ZXNJbnRlcnZhbCA/IGNvbHVtbi5taW51dGVzSW50ZXJ2YWwgOiAxXCIgW3Nob3dUaW1lXT1cImNvbHVtbi5zaG93VGltZVwiXG4gICAgICAgICAgICAgICAgW3RpbWVPbmx5XT1cImNvbHVtbi50aW1lT25seVwiIFtkYXRlRm9ybWF0XT1cImNvbHVtbi5mb3JtYXQgPyBjb2x1bW4uZm9ybWF0LnR5cGUgOiBjYWxlbmRhckZvcm1hdFwiXG4gICAgICAgICAgICAgICAgKGtleXVwKT1cImNhbGVuZGFySW5wdXRWYWx1ZShjb2x1bW4sIHJvdylcIiAob25TaG93KT1cIm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQgPyByb3dbcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKV0gOlxuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdXCIgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIlxuICAgICAgICAgICAgICAgIFtzaG93QnV0dG9uQmFyXT1cIiFjb2x1bW4udGltZU9ubHlcIj48L3AtY2FsZW5kYXI+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICB7eyBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LGNvbHVtbikgfX1cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgICA8c3BhbiBbbmdTd2l0Y2hdPVwiY29sdW1uLnR5cGVcIj5cbiAgICAgICAgICAgIDwhLS0gRHJvcGRvd24gY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2Ryb3Bkb3duJ1wiIFtjbGFzc109XCJkcm9wZG93bklucHV0ID8gJycgOiAnb3V0cHV0LWRyb3Bkb3duJ1wiIFt0aXRsZV09XCJcbiAgICAgICAgICAgICAgICBzZXREcm9wZHdvblJlYWRPbmx5VmFsdWUocm93LCBjb2x1bW4pXG4gICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgICAgICA8cC1kcm9wZG93biAqbmdJZj1cIiFyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGRlblwiIFtvcHRpb25zXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCsnX2RhdGEnXVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IHJvd1tjb2x1bW4uZmllbGQrJ19kYXRhJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjb2x1bW4uZGF0YVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCkgPyByb3dbcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKV0gOiByb3dbY29sdW1uLmZpZWxkXVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCIgW3BsYWNlaG9sZGVyXT1cInJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXVxuICAgICAgICAgICAgICAgICAgICAgID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdXG4gICAgICAgICAgICAgICAgICAgICAgOiByb3dbY29sdW1uLmZpZWxkXSA/IHJvd1tjb2x1bW4uZmllbGRdIDogJ1NlbGVjdCdcIiBbc2hvd0NsZWFyXT1cInJvd1tjb2x1bW4uZmllbGRdID8gdHJ1ZSA6IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW29wdGlvbkxhYmVsXT1cImNvbHVtbi5vcHRpb25MYWJlbFwiIChjbGljayk9XCJvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgW29wdGlvblZhbHVlXT1cImNvbHVtbi5vcHRpb25WYWx1ZVwiIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHknIDogJydcIlxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdoaWRlLWJvcmRlcicgOiAnJ1wiIChibHVyKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25DaGFuZ2VFdmVudChjb2x1bW4sIHJvdylcIiBbZmlsdGVyXT1cImNvbHVtbi5hbGxvd1NlYXJjaFwiPjwvcC1kcm9wZG93bj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgIHNldERyb3Bkd29uUmVhZE9ubHlWYWx1ZShyb3csIGNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgPCEtLSBNdWx0aVNlbGVjdCBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgICAgIDwhLS0gWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKSA/IHJvd1tyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXSA6XG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXVwiIC0tPlxuICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidtdWx0aS1zZWxlY3QnXCI+XG4gICAgICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgICAgICA8cC1tdWx0aVNlbGVjdCBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKydfb2JqJ10/LmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnaGlkZS1ib3JkZXInIDogJydcIiB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5maWVsZF1cIlxuICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIlxuICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJjb2x1bW4uZGF0YVwiIFtvcHRpb25MYWJlbF09XCJjb2x1bW4ub3B0aW9uTGFiZWxcIiBbb3B0aW9uVmFsdWVdPVwiY29sdW1uLm9wdGlvblZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoY29sdW1uLCByb3cpXCIgKG9uUGFuZWxTaG93KT1cInNob3dPcHRpb24oY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdylcIiBbYXBwZW5kVG9dPVwiJ2JvZHknXCIgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiPlxuICAgICAgICAgICAgICAgICAgPC9wLW11bHRpU2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gW3RpdGxlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogc2V0TXVsdGlTZWxlY3REYXRhKGNvbHVtbiwgcm93W2NvbHVtbi5maWVsZF0pXG4gICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXVxuICAgICAgICAgICAgICAgICAgICA/IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXSA6XG4gICAgICAgICAgICAgICAgICAgIHNldE11bHRpU2VsZWN0RGF0YShjb2x1bW4sIHJvd1tjb2x1bW4uZmllbGRdKVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8IS0tIEF1dG9Db21wbGV0ZSBTZWFyY2ggLS0+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ0F1dG9Db21wbGV0ZSdcIj5cbiAgICAgICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxwLWF1dG9Db21wbGV0ZSBcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSsnX29iaiddPy5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eScgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2hpZGUtYm9yZGVyJyA6ICcnXCIgXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cImNvbHVtbi5oZWFkZXJcIlxuICAgICAgICAgICAgICAgICAgICBbc3VnZ2VzdGlvbnNdPVwiY29sdW1uLmRhdGFcIiBcbiAgICAgICAgICAgICAgICAgICAgKG9uU2VsZWN0KT1cImF1dG9Db21wbGV0ZVNlbGVjdGVkVmFsdWUocm93LCBjb2x1bW4sICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbZmllbGRdPVwiY29sdW1uLm9wdGlvbkxhYmVsID8gY29sdW1uLm9wdGlvbkxhYmVsPy50b0xvd2VyQ2FzZSgpIDogY29sdW1uLmRpc3BsYXlGaWVsZCA/IGNvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCkgOiBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKClcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkID8gcm93W3Jvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCldIDpcbiAgICAgICAgICAgICAgICAgICAgdHlwZU9mKHJvd1tjb2x1bW4uZmllbGRdKSA9PT0gJ29iamVjdCcgJiYgcm93W2NvbHVtbi5maWVsZF0/LnRleHQgP1xuICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXT8udGV4dCA6XG4gICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdXCJcbiAgICAgICAgICAgICAgICAgICAgW2Ryb3Bkb3duXT1cImNvbHVtbi5zaG93T3B0aW9uXCIgXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdylcIiBcbiAgICAgICAgICAgICAgICAgICAgKGNvbXBsZXRlTWV0aG9kKT1cImF1dG9TZWFyY2goJGV2ZW50LCBjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAob25CbHVyKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIiBcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIiBcbiAgICAgICAgICAgICAgICAgICAgW211bHRpcGxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJvbkF1dG9Db21wbGV0ZUZvY3VzT3V0KCRldmVudCwgY29sdW1uLCByb3cpXCI+XG4gICAgICAgICAgICAgICAgICA8L3AtYXV0b0NvbXBsZXRlPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyb3dbY29sdW1uLmZpZWxkXSAmJiByb3dbY29sdW1uLmZpZWxkXVswXSAmJiAgcm93W2NvbHVtbi5maWVsZF1bMF1bY29sdW1uLmRpc3BsYXlGaWVsZF1cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IHZhbHVlIG9mIHJvd1tjb2x1bW4uZmllbGRdOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgcm93W2NvbHVtbi5maWVsZF0gJiYgcm93W2NvbHVtbi5maWVsZF0ubGVuZ3RoID4gMSA/IHJvd1tjb2x1bW4uZmllbGRdLmxlbmd0aCAtMSA9PT0gaSA/XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWVbY29sdW1uLmRpc3BsYXlGaWVsZF0gOiB2YWx1ZVtjb2x1bW4uZGlzcGxheUZpZWxkXSArICc7JyA6IHZhbHVlW2NvbHVtbi5kaXNwbGF5RmllbGRdIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicm93W2NvbHVtbi5maWVsZF0gJiYgcm93W2NvbHVtbi5maWVsZF1bMF0gJiYgIHJvd1tjb2x1bW4uZmllbGRdWzBdW2NvbHVtbi5maWVsZF0gJiYgIWNvbHVtbi5kaXNwbGF5RmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IHZhbHVlIG9mIHJvd1tjb2x1bW4uZmllbGRdOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgcm93W2NvbHVtbi5maWVsZF0gJiYgcm93W2NvbHVtbi5maWVsZF0ubGVuZ3RoID4gMSA/IHJvd1tjb2x1bW4uZmllbGRdLmxlbmd0aCAtMSA9PT0gaSA/XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWVbY29sdW1uLmZpZWxkXSA6IHZhbHVlW2NvbHVtbi5maWVsZF0gKyAnOycgOiB2YWx1ZVtjb2x1bW4uZmllbGRdIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwhLS0gQWRkIEdlbmVyYXRlIFJlcG9ydCBCdXR0b24gLS0+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3JlcG9ydCdcIj5cbiAgICAgICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgICAgICA8c2UtZ2VuZXJhdGUtcmVwb3J0LWJ0biBbcmVwSWRdPVwiY29sdW1uLnJlcG9ydElkXCIgW2xhYmVsXT1cImNvbHVtbi5sYWJlbFwiIFtwYXJhbXNdPVwiY29sdW1uLnBhcmFtc1wiIFtjbGFzc109XCJjb2x1bW4uY2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd0RpYWxvZ109XCJjb2x1bW4uc2hvd0RpYWxvZ1wiIFtpY29uXT1cImNvbHVtbi5pY29uXCI+PC9zZS1nZW5lcmF0ZS1yZXBvcnQtYnRuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgICAgICA8c2UtZ2VuZXJhdGUtcmVwb3J0LWJ0biBbcmVwSWRdPVwiY29sdW1uLnJlcG9ydElkXCIgW2xhYmVsXT1cImNvbHVtbi5sYWJlbFwiIFtwYXJhbXNdPVwiY29sdW1uLnBhcmFtc1wiIFtpY29uXT1cImNvbHVtbi5pY29uXCIgW2NsYXNzXT1cImNvbHVtbi5jbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgIFtzaG93RGlhbG9nXT1cImNvbHVtbi5zaG93RGlhbG9nXCI+PC9zZS1nZW5lcmF0ZS1yZXBvcnQtYnRuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgICAgICA8IS0tIElucHV0IGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IHBJbnB1dFRleHQgdHlwZT1cInRleHRcIiBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKydfb2JqJ10/LmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnaGlkZS1ib3JkZXInIDogJydcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvdy51bmRlZmluZWQgPyAnJyA6IGFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgJiYgcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdIDogcm93W2NvbHVtbi5maWVsZF1cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiXG4gICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIiAoY2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tCdXR0b24oY29sdW1uLCByb3cpXCIgKm5nSWY9XCJjb2x1bW4uZmllbGQgIT09IGRhdGFLZXk7IGVsc2UgbG9ja2VkX2ZpZWxkXCIgLz5cbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbG9ja2VkX2ZpZWxkPjxzcGFuICpuZ0lmPVwiIXJvdy5pc05ld1wiIFt0aXRsZV09XCJyb3dbY29sdW1uLmZpZWxkXVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IHJvd1tjb2x1bW4uZmllbGRdIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cIm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdylcIiBbdGl0bGVdPVwiXG4gICAgICAgICAgICAgICAgICBzZXRUZXh0Qm94UmVhZE9ubHlWYWx1ZShyb3csIGNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgIHNldFRleHRCb3hSZWFkT25seVZhbHVlKHJvdywgY29sdW1uKVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgXG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8IS0tIEdyaWQgUm93cyBEYXRhIEJpbmRpbmdzIEVuZCAtLT5cblxuICAgICAgICA8IS0tIEFjdGlvbiBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgPHRkICpuZ0lmPVwiIXNldEFjdGlvbkNvbHVtbkFzRmlyc3QgJiYgY29sdW1ucz8ubGVuZ3RoID4gMCAmJiBjb2x1bW5BY3Rpb25zLmxlbmd0aCA+IDBcIlxuICAgICAgICAgIGNsYXNzPVwiZm9yLWJ1dHRvbnNcIlxuICAgICAgICAgIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWN0aW9uLWJ0blwiICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgY29sdW1uQWN0aW9uc1wiPlxuICAgICAgICAgICAgPGkgW3RpdGxlXT1cImFjdGlvbi50b29sdGlwXCIgW2NsYXNzXT1cImFjdGlvbi5pY29uXCIgKGNsaWNrKT1cImhhbmRsZUFjdGlvbkNsaWNrKCRldmVudCwgYWN0aW9uLCByb3cpXCI+PC9pPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkXG4gICAgICAgICAgKm5nSWY9XCIhc2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiBjb2x1bW5zPy5sZW5ndGggPiAwICYmIHVzZUlubGluZUNSVUQgJiYgKGRlbGV0ZVJvd1Blcm1pc3Npb24gfHwgZWRpdFJvd1Blcm1pc3Npb24pXCJcbiAgICAgICAgICBbY2xhc3NdPVwiaW5FZGl0TW9kZSA/ICd0aHJlZS1hY3Rpb24tYnRuJyA6ICd0d28tYWN0aW9uLWJ0bidcIlxuICAgICAgICAgIGNsYXNzPVwiZm9yLWJ1dHRvbnNcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImRpc2FibGVkU2F2ZUJ0biA/ICdoaWRlLWNsZWFyLWZpbHRlci1idXR0b24nIDogJydcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz0nc2V0QWN0aW9uQ29sdW1uV2lkdGgnPlxuICAgICAgICAgICAgPHNlLWdyaWQtcm93LWFjdGlvbnMgW2VkaXRpbmddPVwiZWRpdGluZ1wiIFtlZGl0Um93UGVybWlzc2lvbl09XCJlZGl0Um93UGVybWlzc2lvblwiXG4gICAgICAgICAgICAgIFtkZWxldGVSb3dQZXJtaXNzaW9uXT1cImRlbGV0ZVJvd1Blcm1pc3Npb25cIiBbaGlkZURlbGV0ZUJ0bl09XCJoaWRlRGVsZXRlQnRuXCIgW2hpZGVFZGl0QnRuXT1cImhpZGVFZGl0QnRuXCJcbiAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIiAob25Sb3dFZGl0SW5pdEJ0bik9XCJvblJvd0VkaXRJbml0KCRldmVudClcIiAoZGVsZXRlUmVjb3JkQnRuKT1cImRlbGV0ZVJlY29yZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKG9uUm93RWRpdFNhdmVCdG4pPVwib25Sb3dFZGl0U2F2ZSgkZXZlbnQpXCIgKG9uUm93RWRpdENhbmNlbEJ0bik9XCJvblJvd0VkaXRDYW5jZWwoJGV2ZW50LCByaSlcIlxuICAgICAgICAgICAgICBbZWRpdEFsbFJvd3NdPVwiZWRpdEFsbFJvd3NcIj5cbiAgICAgICAgICAgIDwvc2UtZ3JpZC1yb3ctYWN0aW9ucz5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8IS0tIEZvb3RlciBjb2x1bW5zIG9uIEdyaWQgLS0+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZvb3RlclwiPlxuICAgICAgPHRyICpuZ0lmPVwiYWdncmVnYXRlRm9vdGVyXCI+XG4gICAgICAgIDx0ZFxuICAgICAgICAgICpuZ0lmPVwic2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiAoY29sdW1uQWN0aW9ucy5sZW5ndGggPiAwIHx8ICh1c2VJbmxpbmVDUlVEICYmIChkZWxldGVSb3dQZXJtaXNzaW9uIHx8IGVkaXRSb3dQZXJtaXNzaW9uKSkpXCJcbiAgICAgICAgICBbY2xhc3NdPVwiaW5FZGl0TW9kZSA/ICd0aHJlZS1hY3Rpb24tYnRuJyA6ICd0d28tYWN0aW9uLWJ0bidcIj48L3RkPlxuICAgICAgICA8dGQgKm5nSWY9XCJhbGxvd1NlbGVjdGlvblwiIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiPjwvdGQ+XG4gICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgb3V0ZXJDb2x1bW4gb2Ygc2VsZWN0ZWRDb2x1bW5zXCIgY2xhc3M9XCJncmlkLWNvbXBvbmVudC1vdXRlci1jb2x1bW5cIiBbc3R5bGVdPVwib3V0ZXJDb2x1bW4uc3R5bGVcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpbm5lckNvbHVtbiBvZiBzZWxlY3RlZENvbHVtbnNcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGFnZ3Igb2YgaW5uZXJDb2x1bW4/LmFnZ3JlZ2F0ZVwiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJhZ2dyLmFnZ3JWYWx1ZT8ubGVuZ3RoICYmICgoIWFnZ3IuZGlzcGxheUZpZWxkICYmIGlubmVyQ29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBvdXRlckNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgICAgICAgICAgICAgIGFnZ3IuZGlzcGxheUZpZWxkICYmIGFnZ3IuZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBvdXRlckNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSlcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IFtpbm5lckhUTUxdPVwiYWdnci5hZ2dyVmFsdWVcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj4gIFxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGRcbiAgICAgICAgICAqbmdJZj1cIiFzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmIGNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYgdXNlSW5saW5lQ1JVRCAmJiAoZGVsZXRlUm93UGVybWlzc2lvbiB8fCBlZGl0Um93UGVybWlzc2lvbilcIlxuICAgICAgICAgIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiZGlzYWJsZWRTYXZlQnRuID8gJ2hpZGUtY2xlYXItZmlsdGVyLWJ1dHRvbicgOiAnJ1wiPjwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8IS0tIEZvb3RlciBmb3IgRW1wdHkgTWVzc2FnZSBjb2x1bW5zIG9uIEdyaWQgLS0+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxuICAgICAgPHRyIGNsYXNzPVwiZ3JpZC1jb21wb25lbnQgbm8tcmVjb3Jkcy1mb3VuZFwiPlxuICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJzZWxlY3RlZENvbHVtbnM/Lmxlbmd0aCArIDFcIj57e3RvdGFsUmVjb3Jkcz09MD8gJ05vIHJlY29yZHMgZm91bmQnOicnfX08L3RkPlxuICAgICAgPC90cj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L3AtdGFibGU+ICBcbiAgPHAtb3ZlcmxheVBhbmVsXG4gIFtzdHlsZV09XCJvdmVybGF5UGFuZWxTdHlsZVwiICNvdmVybGF5UGFuZWw+XG4gICAgPG5nLWNvbnRhaW5lciAjdmlld0NvbnRhaW5lclJlZj48L25nLWNvbnRhaW5lcj5cbiAgPC9wLW92ZXJsYXlQYW5lbD5cbjwvZGl2PiJdfQ==
2907
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2dyaWQvZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2dyaWQvZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUdaLFFBQVEsRUFFUixZQUFZLEVBR1osU0FBUyxFQUNULFlBQVksRUFFWixnQkFBZ0IsR0FFakIsTUFBTSxlQUFlLENBQUM7QUFRdkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFMUIsT0FBTyxFQVNMLGtCQUFrQixFQUNsQixlQUFlLEVBQ2Ysa0JBQWtCLEVBRWxCLGNBQWMsRUFDZCxlQUFlLEVBR2YsY0FBYyxFQUNkLHFCQUFxQixHQUV0QixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxlQUFlLEVBQWUsTUFBTSxpQ0FBaUMsQ0FBQztBQUcvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFbE0sT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXpELE9BQU8sRUFBZ0IsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QVcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7WUFDbkwsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1lBQ3RMLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtZQUMvTCxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7WUFDL0wsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFB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QixLQUFLO2dCQUdHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUdJLFVBQVU7c0JBQW5CLE1BQU07Z0JBR0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQUdHLGFBQWE7c0JBQXRCLE1BQU07Z0JBR0csWUFBWTtzQkFBckIsTUFBTTtnQkFHRyxjQUFjO3NCQUF2QixNQUFNO2dCQUdHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFHRyxhQUFhO3NCQUF0QixNQUFNO2dCQUdHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFJUCx1QkFBdUI7c0JBRHRCLE1BQU07Z0JBTVAsWUFBWTtzQkFEWCxNQUFNO2dCQUlHLFdBQVc7c0JBQXBCLE1BQU07Z0JBR0csZUFBZTtzQkFBeEIsTUFBTTtnQkFHRyxXQUFXO3NCQUFwQixNQUFNO2dCQUdHLFFBQVE7c0JBQWpCLE1BQU07Z0JBR0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUdFLFlBQVk7c0JBQXBCLEtBQUs7Z0JBR0csWUFBWTtzQkFBcEIsS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBR0ksYUFBYTtzQkFBdEIsTUFBTTtnQkFHRyxZQUFZO3NCQUFyQixNQUFNO2dCQXFEUCxtQkFBbUI7c0JBRGxCLFlBQVk7dUJBQUMscUJBQXFCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgT25DaGFuZ2VzLFxuICBPcHRpb25hbCxcbiAgRWxlbWVudFJlZixcbiAgVmlld0NoaWxkcmVuLFxuICBRdWVyeUxpc3QsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgSG9zdExpc3RlbmVyLFxuICBPbkRlc3Ryb3ksXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIENvbXBvbmVudFJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtcbiAgRHluYW1pY0RpYWxvZ1JlZixcbiAgRHluYW1pY0RpYWxvZ0NvbmZpZyxcbiAgRGlhbG9nU2VydmljZSxcbiAgRHluYW1pY0RpYWxvZ0NvbXBvbmVudCxcbn0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCB7IHNhdmVBcyB9IGZyb20gJ2ZpbGUtc2F2ZXInO1xuaW1wb3J0IGpzUERGIGZyb20gJ2pzcGRmJztcbmltcG9ydCB7IEdyaWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZ3JpZC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIElHcmlkQ29sdW1uLFxuICBJR3JpZFNvcnQsXG4gIElHcmlkU2VydmVyU2lkZUV2ZW50LFxuICBJR3JpZFBhZ2luYXRpb25FdmVudCxcbiAgSUdsb2JhbEZpbHRlcixcbiAgSUdyaWRGaWx0ZXIsXG4gIElHcmlkQ29sdW1uQWN0aW9uLFxuICBJR3JpZFJvd0FjdGlvbixcbiAgRUdyaWRTZWxlY3Rpb25UeXBlLFxuICBFR3JpZENvbHVtblR5cGUsXG4gIEVHcmlkU29ydERpcmVjdGlvbixcbiAgSUdyaWREYXRhRXhwb3J0LFxuICBFR3JpZEFnZ3JlZ2F0ZSxcbiAgRUdyaWRGb3JtYXRUeXBlLFxuICBJR3JpZEZpbHRlckluZm8sXG4gIEVHcmlkUm93QWN0aW9uLFxuICBFR3JpZFZhbGlkYXRvcixcbiAgR3JpZEZpbHRlckNvbnRyb2xUeXBlLFxuICB1c2VyU2V0dGluZyxcbn0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dyaWQubW9kZWwnO1xuaW1wb3J0IHsgRVBlcm1pc3Npb25UeXBlLCBJUGVybWlzc2lvbiB9IGZyb20gJy4uLy4uLy4uL21vZGVscy91c2VyLWluZm8ubW9kZWwnO1xuaW1wb3J0IHsgQXV0aGVudGljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aGVudGljYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hbGVydC5zZXJ2aWNlJztcbmltcG9ydCB7IElmcmFtZUNvbXBvbmVudCB9IGZyb20gJy4uL2lmcmFtZS9pZnJhbWUuY29tcG9uZW50JztcbmltcG9ydCB7IFdvcmtTaGVldCB9IGZyb20gJ3hsc3gnO1xuaW1wb3J0IHsgRGF0ZVBpcGUsIERlY2ltYWxQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGF1dG9TZXRMb29rdXBEYXRhLCBjaGFuZ2VDb2x1bW5zU3RhdGUsIGN1cnJlbnRVcmwsIGRyYWdnYWJsZURpYWxvZywgb2JqQ29udmVydFRvTG93ZXIsIHNldERpYWxvZ1Jlc3BvbnNlLCBzZXRNaW51dGVzSW50ZXJ2YWwsIHNldFRpbWVJbkRhdGUgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy91dGlsaXRpZXMuc2VydmljZSc7XG5pbXBvcnQgeyBUYWJsZSB9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xuaW1wb3J0IHsgRUZvcm1hdFR5cGUgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZm9ybS5tb2RlbCc7XG5pbXBvcnQgeyBQYWdlTG9nZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BhZ2UtbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBpbnRlcnZhbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEh5cGVybGlua1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9oeXBlcmxpbmsuc2VydmljZSc7XG5pbXBvcnQgeyBGb3JtU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Zvcm0uc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NlLWdyaWQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZ3JpZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2dyaWQuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgR3JpZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKCd2aWV3Q29udGFpbmVyUmVmJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgcHVibGljIHBhbmVsT3ZlcmxheVZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWZcbiAgcHVibGljIGNvbXBvbmVudFJlZnM6IENvbXBvbmVudFJlZjxDb21wb25lbnQ+W10gPSBbXVxuXG4gIEBWaWV3Q2hpbGRyZW4oJ2dyaWRSb3cnKSBncmlkUm93OiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG4gIEBPdXRwdXQoKSBpbmxpbmVSb3dDYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBJbnB1dCgpIHNldCBhY3RpdmVUZXN0TW9kZSh2YWw6IGFueSkge1xuICAgIGlmICh2YWwgPT09IHRydWUpIHtcbiAgICAgIGRlYnVnZ2VyO1xuICAgIH1cbiAgfVxuICBzZXJ2ZXJGaWx0ZXJzOiBJR3JpZFNlcnZlclNpZGVFdmVudCA9IHt9O1xuICByb3dzRGF0YTogYW55W10gPSBbXTtcbiAgcm93c0RhdGFDb3B5OiBhbnlbXSA9IFtdO1xuICBudW1lcmljVmFsdWU6IGFueSA9IHt9XG4gIHJvbGVzOiBzdHJpbmdbXSA9IFtdO1xuICBpc0NvbHVtbkhpZGRlbjogYm9vbGVhbiA9IGZhbHNlO1xuICByb3dDbGlja0RhdGE6IElHcmlkQ29sdW1uO1xuICBjb21wb25lbnRUYWJsZVJlZjogYW55O1xuICBsb29rdXBGaWx0ZXJPYmo6IGFueTtcbiAgY2hlY2tsaXN0OiBhbnlbXSA9IFtdXG4gIGxvb2t1cEJsdXI6IGJvb2xlYW4gPSB0cnVlO1xuICBnbG9iYWxGaWx0ZXJzQXJyYXk6IGFueVtdID0gW107XG4gIGNoZWNrQWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIGNhbGVuZGFyUHJldmlvdXNWYWx1ZTogc3RyaW5nID0gJyc7XG4gIGdyaWRGaWx0ZXJPYmo6IElHcmlkRmlsdGVySW5mbztcbiAgZGVmYXVsdERhdGU6IGFueTtcbiAgb3ZlcmxheVBhbmVsU3R5bGU6IHt9O1xuICBncmlkZmlsdGVyOiBhbnk7XG4gIGRyb3BEb3duRmlsdGVyOiBhbnkgPSB7fTtcbiAgZHJvcGRvd25JbnB1dDogYm9vbGVhbiA9IGZhbHNlO1xuICBzYXZlQWxsUmVjb3JkOiBib29sZWFuID0gZmFsc2U7XG4gIGdlbmVyYXRlUm93c0RhdGFDb3B5OiBib29sZWFuID0gdHJ1ZTtcbiAgZWRpdEFsbFJlY29yZDogYm9vbGVhbiA9IGZhbHNlO1xuICBjYW5jZWxBbGxSZWNvcmRzOiBib29sZWFuID0gZmFsc2U7XG4gIGFkZE5ld1Jvd0NoZWNrOiBib29sZWFuID0gZmFsc2U7XG4gIGluRWRpdE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2F2ZVJlY29yZEFycmF5OiBhbnlbXSA9IFtdO1xuICBkaXNhYmxlZFNhdmVCdG46IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzU2VsZWN0ZWRBbGxSb3dzOiBib29sZWFuID0gZmFsc2U7XG4gIENoZWNrZWQ6IGJvb2xlYW4gPSB0cnVlXG4gIHVuQ2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlXG4gIGVkaXRNb2RlQ2hlY2tlZDogYm9vbGVhbiA9IHRydWU7XG4gIGVkaXRNb2RldW5Da2Vja2VkOiBib29sZWFuID0gZmFsc2U7XG4gIGNhbGVuZGFyRm9ybWF0OiBzdHJpbmcgPSBcIm1tL2RkL3l5XCJcbiAgc2V0RHJvcGRvd25GaWx0ZXI6IGJvb2xlYW4gPSB0cnVlO1xuICByZWxvYWRQYWdlOiBTdWJzY3JpcHRpb247XG4gIHNldERyb3Bkb3duZGF0YVZhbHVlOiBib29sZWFuID0gdHJ1ZTtcbiAgc2hvd0ZpbHRlcmJ0bjogYm9vbGVhbiA9IGZhbHNlO1xuICBkaWFsb2dSZWY6IGFueVxuICB1c2VyU2V0dGluZzogdXNlclNldHRpbmcgPSB7fTtcbiAgcm93VXBkYXRlQ2hhbmdlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy9hcHBseSBBZGQvRGVsZXRlL0VkaXQgcHJvcCBmb3IgdGhlIGdyaWQgcGVybWlzc2lvblxuICBhZGRSb3dQZXJtaXNzaW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgZGVsZXRlUm93UGVybWlzc2lvbjogYm9vbGVhbiA9IHRydWU7XG4gIGVkaXRSb3dQZXJtaXNzaW9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAvLyBBcHBseSBwcm9wIHNldEFnZ3JlZ2F0ZUZvb3RlciBvbiBGb290ZXIgb2YgdGhlIFRhYmxlIGZvciBhZ2dyZWdhdGUuXG4gIHNldEFnZ3JlZ2F0ZUZvb3Rlcjogc3RyaW5nID0gJyc7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGFsbG93IEhpZGUgQWdncmVnYXRlIEZvb3RlciBXaGVuIEFnZ3JlZ2F0ZSBub3QgQXBwbHkgb24gVGFibGUuXG4gIGFnZ3JlZ2F0ZUZvb3RlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIE1haW50YWlucyBwcmV2aW91cyBzdGF0ZSBvZiByb3dzIGJlaW5nIGVkaXRlZFxuICBlZGl0Um93c1JlY29yZHM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcblxuICAvLyBNYWludGFpbnMgcmVjb3JkIG9mIHJvd3MgYmVpbmcgZWRpdGVkXG4gIGVkaXRpbmdSb3dLZXlzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gIGN1cnJlbnRVcmw6IHN0cmluZyA9IGN1cnJlbnRVcmwoKTtcblxuICBAVmlld0NoaWxkKCdkdCcpIHRhYmxlOiBUYWJsZTtcblxuICAvLyBTZWxlY3RzIGl0ZW1zIGluIHRoZSBncmlkIGJhc2VkIG9uIHBhc3NlZCBvbiBkYXRhXG4gIEBJbnB1dCgpIHNlbGVjdGVkUm93czogYW55ID0gW107XG5cbiAgQElucHV0KCkgc2V0R3JpZFJlZnJlc2hUaW1lOiBudW1iZXIgPSAwO1xuXG4gIEBJbnB1dCgpIGFkZERhdGFLZXlWYWx1ZSA9IGZhbHNlO1xuXG4gIHByaXZhdGUgZ2xvYmFsRGF0YTogSUdyaWRGaWx0ZXJbXSA9IFtdO1xuXG4gIHNvcnREaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBzaG93UmVmcmVzaEJ0bjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBoaWRlUmVmcmVzaEJ0bjogYm9vbGVhbiA9IHRydWU7XG5cbiAgLy8gU3RvcmVzIHNlbGVjdGVkIGNvbHVtbnNcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRDb2x1bW5zOiBJR3JpZENvbHVtbltdID0gW107XG4gIHZpc2libGVDb2x1bW5zOiBJR3JpZENvbHVtbltdID0gW107XG4gIC8vIEJvb2xlYW4gcHJvcCB0byBhbGxvdyBob3Jpem9udGFsIFNjcm9sbCBvbiBUYWJsZS5cbiAgQElucHV0KCkgaG9yaXpvbnRhbFNjcm9sbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBoaWRlIHRoZSBkZWxldGUgcm93IGJ1dHRvbi5cbiAgQElucHV0KCkgaGlkZURlbGV0ZUJ0biA9IGZhbHNlO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBoaWRlIHRoZSBlZGl0IHJvdyBidXR0b24uXG4gIEBJbnB1dCgpIGhpZGVFZGl0QnRuID0gZmFsc2U7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGhpZGUgdGhlIGFkZCByb3cgYnV0dG9uLlxuICBASW5wdXQoKSBoaWRlQWRkQnRuID0gZmFsc2U7XG5cbiAgLy8gUHJvcCB0byBoYW5kbGUgbG9hZGVyIG9mIGdyaWRcbiAgQElucHV0KCkgcHVibGljIGxvYWRpbmcgPSBmYWxzZTtcblxuICAvL3RoaXMgcHJvcGVydHkgaXMgdXNlZCB0byBoYW5kbGUgc2VydmVyIHNpZGUgZXZlbnQgYnkgZGVmYXVsdCBpdCBpcyB0cnVlIHdoZW4gaXQgZmFsc2Ugc2VydmVyIHNpZGUgZXZlbnQgd2lsbCBub3QgYmUgY2FsbGVkXG4gIEBJbnB1dCgpIGF1dG9Mb2FkRGF0YTogYm9vbGVhbiA9IHRydWU7XG5cblxuICAvL3RhYmxlIHJvdyBzdHlsZXNcbiAgQElucHV0KCkgcm93U3R5bGU6IHN0cmluZztcblxuICAvLyBCb29sZWFuIHByb3AgdG8gY2hlY2sgd2hlcmUgc2VsZWN0ZWQgaXMgYWxsb3dlZCBvciBub3QuXG4gIEBJbnB1dCgpIGFsbG93U2VsZWN0aW9uID0gZmFsc2U7XG5cbiAgLy8gU2V0IGNvbHVtbiB3aWR0aCBvZiBzZWxlY3RlZCByb3cuXG4gIEBJbnB1dCgpIHNlbGVjdGlvbkNvbHVtbldpZHRoOiBzdHJpbmcgPSAnODBweCc7XG5cbiAgLy8gc2V0IHNlbGVjdGlvbiBjaGVja0JveCBoZWFkZXJcbiAgQElucHV0KCkgYWxsb3dTZWxlY3Rpb25IZWFkZXI6IHN0cmluZyA9ICcnO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBoaWRlIHRoZSBzYXZlIGJ1dHRvbiBvbiB0b3Agb2YgZ3JpZC5cbiAgQElucHV0KCkgaGlkZUdyaWRTYXZlQnV0dG9uID0gZmFsc2U7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGhpZGUgdGhlIHNhdmUgYnV0dG9uIG9uIHRvcCBvZiBncmlkLlxuICBASW5wdXQoKSBoaWRlR3JpZENhbmNlbEJ1dHRvbiA9IGZhbHNlO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBhbGxvdyBleHBvcnQgdG8gcGRmLlxuICBASW5wdXQoKSBhbGxvd0V4cG9ydFRvUGRmID0gZmFsc2U7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGFsbG93IGV4cG9ydCB0byBleGNlbC5cbiAgQElucHV0KCkgYWxsb3dFeHBvcnRUb0V4Y2VsID0gZmFsc2U7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIHNldCB0aGUgYWN0aW9uIGNvbHVtbiBhcyBmaXJzdCBjb2x1bW4uXG4gIEBJbnB1dCgpIHNldEFjdGlvbkNvbHVtbkFzRmlyc3QgPSBmYWxzZTtcblxuICAvLyBJZiB0cnVlLCBlbmFibGVzIG9wdGlvbnMgdG8gcGVyZm9ybSBDUlVEIHVzaW5nIGlubGluZSByb3cgZnVuY3Rpb25hbGl0eVxuICBASW5wdXQoKSB1c2VJbmxpbmVDUlVEID0gZmFsc2U7XG5cbiAgLy8gQXJyYXkgb2Ygcm93IGFjdGlvbnNcbiAgQElucHV0KCkgcm93QWN0aW9uczogSUdyaWRSb3dBY3Rpb25bXSA9IFtdO1xuXG4gIC8vIFNldHMgc2VsZWN0aW9uIHR5cGUgaS5lOiBzaW5nbGUvbXVsdGlwbGUgc2VsZWN0aW9uXG4gIEBJbnB1dCgpIHNlbGVjdGlvblR5cGU6IEVHcmlkU2VsZWN0aW9uVHlwZSA9IEVHcmlkU2VsZWN0aW9uVHlwZS5TSU5HTEU7XG5cbiAgLy8gVW5pcXVlIGtleSByZXF1aXJlcyBmb3IgYnVpbHQtaW4gcm93IHNlbGVjdGlvbiBvZiBwcmltZU5nIGdyaWRcbiAgQElucHV0KCkgZGF0YUtleTogc3RyaW5nID0gJ3RlbXBfaWQnO1xuXG4gIC8vIEZsYWcgZm9yIGNsZWFyIGZpbHRlciB2YWx1ZXMgYnV0dG9uXG4gIEBJbnB1dCgpIGNsZWFyR3JpZEZpbHRlciA9IHRydWU7XG5cbiAgLy8gRmxhZyBmb3Igc2VhcmNoIGZpbHRlciB2YWx1ZXMgYnV0dG9uXG4gIEBJbnB1dCgpIHNlYXJjaEdyaWRGaWx0ZXIgPSB0cnVlO1xuXG4gIC8vIEZsYWcgaW4gY2FzZSB0YWJsZSBpcyBzY3JvbGxhYmxlXG4gIEBJbnB1dCgpIHNjcm9sbGFibGUgPSB0cnVlO1xuXG4gIC8vIFNldHMgc2Nyb2xsIGhlaWdodCBmb3IgdGhlIHRhYmxlXG4gIEBJbnB1dCgpIHNjcm9sbEhlaWdodCA9ICc4MHZoJztcblxuICAvLyBUYWJsZSBzdHlsZVxuICBASW5wdXQoKSB0YWJsZVN0eWxlID0gJyc7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGFsbG93IHRvIHdyYXAgb3IgdW5XcmFwIHRoZSBncmlkLlxuICBASW5wdXQoKSB3b3JkV3JhcDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIG5ld0dyaWRSb3c6IGFueSA9IHt9O1xuXG4gIEBJbnB1dCgpIGZpbHRlcmluZyA9IHRydWU7XG5cbiAgQElucHV0KCkgcmVwb3J0QnV0dG9uczogYW55W10gPSBbXTtcblxuICBASW5wdXQoKSByb3dIb3ZlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGhpZGVGaWx0ZXJPcHRpb25zOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gU2V0cyBwYWdlbmF0aW9uIGZvciB0aGUgdGFibGUgRGF0YS5cbiAgQElucHV0KCkgc2V0UGFnaW5hdGlvbkxlbmd0aDogYW55W10gPSBbNSwgMTAsIDE1LCB7IHNob3dBbGw6ICdBbGwnIH1dO1xuXG4gIC8vIHNldCB0aGUgY2hhbmdlIGluIHRoZSByb3dEYXRhXG4gIEBPdXRwdXQoKSByb3dzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogU3RvcHMgdGhlIGxvYWRlciBhbmQgc2V0cyB0aGUgZGF0YSB0byBncmlkXG4gICAqIENsZWFycyB0aGUgZWRpdGluZyBzdGFja1xuICAgKiBTY3JvbGxzIHRvIHNlbGVjdGVkIGVsZW1lbnQgaWYgc2VsZWN0aW9uIGZvdW5kXG4gICAqL1xuICBASW5wdXQoKSBzZXQgcm93cyhkYXRhOiBhbnlbXSkge1xuICAgIGlmKCF0aGlzLnJvd1VwZGF0ZUNoYW5nZSl7XG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIGlmICghdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQpIHtcbiAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmRhdGFLZXkpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YUtleSA9ICd0ZW1wX2lkJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGRhdGE/Lmxlbmd0aCA+IDQwICYmICF0aGlzLnBhZ2luYXRpb24gJiYgIXRoaXMuZ3JpZFNlcnZpY2U/LnJvd1VwZGF0ZSkge1xuICAgICAgICAgICAgY29uc3Qgcm93c0RhdGEgPSB0aGlzLmdyaWRTZXJ2aWNlLnNldERhdGFGaWVsZHMoZGF0YSwgdGhpcy5kYXRhS2V5KTtcbiAgICAgICAgICAgIGNvbnN0IGluaXRpYWxpemVEYXRhID0gWy4uLnJvd3NEYXRhXTtcbiAgICAgICAgICAgIHRoaXMucm93c0RhdGEgPSBpbml0aWFsaXplRGF0YS5zcGxpY2UoMCwgNDApO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMucm93c0RhdGEgPSByb3dzRGF0YTtcbiAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5ncmlkU2VydmljZT8ucm93VXBkYXRlKSB7XG4gICAgICAgICAgICB0aGlzLnJvd3NEYXRhID0gdGhpcy5ncmlkU2VydmljZS5zZXREYXRhRmllbGRzKGRhdGEsIHRoaXMuZGF0YUtleSk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdyaWRTZXJ2aWNlLnJvd1VwZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5yb3dzRGF0YSA9IGRhdGE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZWRpdFJvd3NSZWNvcmRzID0ge307XG4gIFxuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUm93cykge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudFJlZiA9IHRoaXMuZ3JpZFJvdy5maW5kKFxuICAgICAgICAgICAgICAgICh4KSA9PiB4Lm5hdGl2ZUVsZW1lbnQuaWQgPT09IHRoaXMuc2VsZWN0ZWRSb3dzW3RoaXMuZGF0YUtleV1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50UmVmICYmXG4gICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTFRhYmxlUm93RWxlbWVudFxuICAgICAgICAgICAgICAgICkuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICB9XG4gIFxuICAgICAgICAgIC8vbWFuaXB1bGF0ZSBjaGVja2JveCBzdHJpbmcgdmFsdWUgdG8gdHJ1ZSBhbmQgZmFsc2UuXG4gICAgICAgICAgdGhpcy5jaGFuZ2VDaGVja2JveFN0cmluZ1ZhbHVlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yb3dzRGF0YSA9IFtdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gR2xvYmFsIGZpbHRlciBzZXJ2ZXIgcmVxdWVzdFxuICBASW5wdXQoKSBzZXQgZ2xvYmFsRmlsdGVyRGF0YShnbG9iYWxGaWx0ZXJzOiBJR2xvYmFsRmlsdGVyW10pIHtcbiAgICB0aGlzLmdsb2JhbERhdGEgPSB0aGlzLmdyaWRTZXJ2aWNlXG4gICAgICAucHJlcGFyZUdsb2JhbEZpbHRlcnMoZ2xvYmFsRmlsdGVycylcbiAgICAgID8uZmlsdGVyKCh4KSA9PiB4Py52YWx1ZSAhPT0gZmFsc2UpO1xuICAgIGNvbnN0IHNlcnZlckZpbHRlclZhbHVlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5zZXJ2ZXJGaWx0ZXJzKSk7XG4gICAgc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMgPSB0aGlzLnNlcnZlckZpbHRlcnMuZmlsdGVyc1xuICAgICAgPyB0aGlzLnNlcnZlckZpbHRlcnMuZmlsdGVycy5jb25jYXQodGhpcy5nbG9iYWxEYXRhKVxuICAgICAgOiB0aGlzLmdsb2JhbERhdGE7XG5cbiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FwcGx5RmlsdGVyJykgPT09ICdmYWxzZScpIHtcbiAgICAgIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5ID0gdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXk/Lmxlbmd0aCA+IDBcbiAgICAgICAgPyB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheS5jb25jYXQoWy4uLnNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzXSlcbiAgICAgICAgOiB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheTtcbiAgICB9XG4gICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhcHBseUZpbHRlcicpID09PSAndHJ1ZScpIHtcbiAgICAgIGdsb2JhbEZpbHRlcnMuZm9yRWFjaCgoZ2xvYmFsRmlsdGVyKSA9PiB7XG4gICAgICAgIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5LmZvckVhY2goKGZpbHRlckFycmF5KSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZmlsdGVyQXJyYXkuZmllbGQgPT09IGdsb2JhbEZpbHRlci5maWVsZCAmJlxuICAgICAgICAgICAgZ2xvYmFsRmlsdGVyLnZhbHVlICYmXG4gICAgICAgICAgICBmaWx0ZXJBcnJheS52YWx1ZSAhPT0gZ2xvYmFsRmlsdGVyLnZhbHVlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmaWx0ZXJBcnJheS52YWx1ZSA9IGdsb2JhbEZpbHRlci52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgZmluZEluZGV4ID0gdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkuZmluZEluZGV4KFxuICAgICAgICAgICAgKGluZGV4KSA9PiBpbmRleC5maWVsZCA9PT0gZ2xvYmFsRmlsdGVyLmZpZWxkICYmICFnbG9iYWxGaWx0ZXIudmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChmaW5kSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheS5zcGxpY2UoZmluZEluZGV4LCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMubG9hZGluZyA9IHRoaXMuYXV0b0xvYWREYXRhO1xuICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5ncmlkU2VydmljZS5hcHBseUZpbHRlckV2ZW50IHx8IHRoaXMuYXV0b0xvYWREYXRhKSB7XG4gICAgICAgIHRoaXMub25BcHBseUZpbHRlci5lbWl0KCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkgJiYgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycyA9IHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzLmNvbmNhdChcbiAgICAgICAgICB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMgPSBBcnJheS5mcm9tKFxuICAgICAgICBuZXcgU2V0KFxuICAgICAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzXG4gICAgICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgICAgICAubWFwKChmaWx0ZXI6IGFueSkgPT4gZmlsdGVyLmZpZWxkKVxuICAgICAgICApXG4gICAgICApLm1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgcmV0dXJuIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzLmZpbmQoKHg6IGFueSkgPT4geC5maWVsZCA9PT0gZmllbGQpO1xuICAgICAgfSk7XG4gICAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycyA9IHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzLmZpbHRlcihcbiAgICAgICAgKG9iajogYW55KSA9PlxuICAgICAgICAgIG9iaj8udmFsdWUgJiYgb2JqLnZhbHVlPy50b1N0cmluZygpPy5sZW5ndGggPiAwICYmIG9iai5maWVsZFxuICAgICAgKTtcbiAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW3RoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdGhpcy5jdXJyZW50VXJsXSA9IHNlcnZlckZpbHRlclZhbHVlcztcbiAgICAgIGlmICh0aGlzLmdyaWRTZXJ2aWNlLmFwcGx5RmlsdGVyRXZlbnQgfHwgdGhpcy5hdXRvTG9hZERhdGEgPT09IHRydWUpIHtcbiAgICAgICAgLy8gc2V0dGluZyBwYWdpbmF0aW9uIHBhZ2UgYXMgZmlyc3RcbiAgICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLnBhZ2UgPSAxO1xuICAgICAgICB0aGlzLmF1dG9Mb2FkRGF0YSA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRSb3dzICYmIHRoaXMucGFnaW5hdGlvbikge1xuICAgICAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5wYWdlU2l6ZSA9IHRoaXMuZGVmYXVsdFJvd3M7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JpZFNlcnZpY2UuYXBwbHlGaWx0ZXJFdmVudCkge1xuICAgICAgICAgIHRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5vblNlcnZlclNpZGVFdmVudENoYW5nZS5lbWl0KHNlcnZlckZpbHRlclZhbHVlcyk7XG4gICAgICAgICAgdGhpcy5lZGl0aW5nUm93S2V5cyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdhcHBseUZpbHRlcicpO1xuICAgICAgICAvLyBzZXR0aW5nIHBhZ2luYXRpb24gcGFnZSBudW1iZXIgVUlcbiAgICAgICAgdGhpcy50YWJsZS5fZmlyc3QgPSAwO1xuICAgICAgfVxuICAgICAgLy8gfSwgMzAwKTtcbiAgICB9XG4gIH1cblxuICAvLyBJbnB1dCBkZWNvcmF0b3IgdG8gcmVjZWl2ZSBjb2x1bW5zIHRvIGJlIGRpc3BsYXllZCBpbiBoZWFkZXJcbiAgQElucHV0KCkgY29sdW1uczogSUdyaWRDb2x1bW5bXSA9IFtdO1xuXG4gIEBJbnB1dCgpIHBlcm1pc3Npb25zOiBJUGVybWlzc2lvbltdID0gW107XG5cbiAgLy8gT3B0aW9uYWwgcHJvcCB0byBoYW5kbGUgdG9nZ2xpbmcgb2YgY29sdW1uc1xuICBASW5wdXQoKSBhbGxvd0NvbHVtblRvZ2dsZSA9IGZhbHNlO1xuXG4gIC8vIE9wdGlvbmFsIHByb3AgdG8gaGlkZSBmaWx0ZXJpbmcgb2YgY29sdW1uc1xuICBASW5wdXQoKSBoaWRlRmlsdGVyID0gZmFsc2U7XG5cbiAgLy8gT3B0aW9uYWwgcHJvcCB0byBoYW5kbGUgbG9va3VwIGZpbHRlcnNcbiAgQElucHV0KCkgbG9va3VwRmlsdGVycyA9IGZhbHNlO1xuXG4gIC8vIE9wdGlvbmFsIHByb3AgdG8gaGFuZGxlIHBhZ2luYXRpb25cbiAgQElucHV0KCkgcGFnaW5hdGlvbiA9IGZhbHNlO1xuXG4gIC8vIE9wdGlvbmFsIHByb3AgdG8gaGFuZGxlIHNob3cgQ3VycmVudFBhZ2UgUmVwb3J0XG4gIEBJbnB1dCgpIHNob3dDdXJyZW50UGFnZVJlcG9ydCA9IGZhbHNlO1xuXG4gIC8vIERpc3BsYXlzIHRvdGFsIG51bWJlciBvZiByZWNvcmRzXG4gIEBJbnB1dCgpIHRvdGFsUmVjb3JkcyA9IDA7XG5cbiAgLy8gRGlzcGxheXMgYWdncmVnYXRlIHRoYXQgZmV0Y2ggZnJvbSByZWNvcmRzXG4gIEBJbnB1dCgpIGFnZ3JlZ2F0ZWRSZXN1bHQ6IGFueVtdID0gW107XG5cbiAgQElucHV0KCkgc2hvd2NvbmZpcm1EaWFsb2c6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpIHNhdmVBbGxEYXRhOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gU2V0cyBudW1iZXIgb2Ygcm93cyB0byBiZSBzaG93biB0aGUgZ3JpZFxuICBASW5wdXQoKSBkZWZhdWx0Um93czogbnVtYmVyID0gMDtcblxuICBASW5wdXQoKSBjb2x1bW5BY3Rpb25zOiBJR3JpZENvbHVtbkFjdGlvbltdID0gW107XG5cbiAgLy8gRGVjaWRlcyB0aGUgZ3JpZCdzIGJlaGF2aW9yIGVpdGhlciBmb3IgY2xpZW50IHNpZGUgb3Igc2VydmVyIHNpZGUgZXZlbnRzXG4gIEBJbnB1dCgpIHVzZVNlcnZlclNpZGVFdmVudHMgPSBmYWxzZTtcblxuICAvLyBPdXRwdXQgZXZlbnQgdG8gaGFuZGxlIHJvdyBjbGlja1xuICBAT3V0cHV0KCkgb25Sb3dDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gT3V0cHV0IGV2ZW50IGVtaXQgd2hlbiBjbGljayBvbiBncmlkIGNoZWNrYm94IGZpbHRlclxuICBAT3V0cHV0KCkgb25DaGVja0JveEZpbHRlckNsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBPdXRwdXQgZXZlbnQgdG8gaGFuZGxlIHJvdyBDaGVja0JveFxuICBAT3V0cHV0KCkgb25Sb3dDaGVja0JveDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gT3V0cHV0IGV2ZW50IHRvIHRyaWdnZXIgb24gc29ydCBjaGFuZ2VcbiAgQE91dHB1dCgpIG9uU29ydENoYW5nZTogRXZlbnRFbWl0dGVyPElHcmlkU29ydD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gT3V0cHV0IGV2ZW50IHRvIHRyaWdnZXIgb24gZmlsdGVyIGNoYW5nZVxuICBAT3V0cHV0KCkgb25GaWx0ZXJDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIE91dHB1dCBldmVudCB0byBpbnZva2UgdGhlIG11bHRpU2VsZWN0aW9uIGNsaWNrIGV2ZW50XG4gIEBPdXRwdXQoKSBvbk11bHRpU2VsZWN0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBDYWxscyB3aGVuZXZlciBhIGdyaWQgYW5kIGdsb2JhbEZpbHRlcnMgY2FsbGVkXG4gIEBPdXRwdXQoKSBvbkFwcGx5RmlsdGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvL3NldCBoZWFkZXIgY2hlY2tib3ggdmFsdWUgZm9yIGdldHRpbmcgYWxsIGNvbHVtbnMgb24gc3RheSBhZG1pblxuICBAT3V0cHV0KCkgaXNJbmNsdWRlZEFsbENvbHVtbnM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIENhbGxzIHdoZW5ldmVyIGEgbGF6eSBldmVudCBpcyBkaXNwYXRjaGVkXG4gIEBPdXRwdXQoKVxuICBvblNlcnZlclNpZGVFdmVudENoYW5nZTogRXZlbnRFbWl0dGVyPElHcmlkU2VydmVyU2lkZUV2ZW50PiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIE91dHB1dCBldmVudCB0byB0cmlnZ2VyIG9uIHBhZ2luYXRpb25cbiAgQE91dHB1dCgpXG4gIG9uUGFnZUNoYW5nZTogRXZlbnRFbWl0dGVyPElHcmlkUGFnaW5hdGlvbkV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBEaXNwYXRjaCBvdXRwdXQgZXZlbnQgdHJpZ2dlciBvbiBlZGl0IHJvd1xuICBAT3V0cHV0KCkgb25Sb3dVcGRhdGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gRGlzcGF0Y2ggb3V0cHV0IGV2ZW50IHRyaWdnZXIgY2FuY2VsIGFsbCByb3dzXG4gIEBPdXRwdXQoKSBvbkNhbmNlbEFsbFJvd3MgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gRGlzcGF0Y2ggb3V0cHV0IGV2ZW50IHRyaWdnZXIgb24gZGVsZXRlIHJvd1xuICBAT3V0cHV0KCkgb25Sb3dEZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy9EaXNwYXRjaCBvdXRwdXQgZXZlbnQgdHJpZ2dlciBvbiBhZGQgcm93XG4gIEBPdXRwdXQoKSBvblJvd0FkZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvL0Rpc3BhdGNoIG91dHB1dCBldmVudCB0cmlnZ2VyIG9uIGFkZCwgdXBkYXRlIGFuZCBkZWxldGUgcm93XG4gIEBPdXRwdXQoKSBvbkdyaWRSb3dBY3Rpb25zID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIHNldCBwcm9wZXJ0eSBhbGxvd0NhY2hpbmcgZm9yIExvY2FsU3RvcmFnZVxuICBASW5wdXQoKSBhbGxvd0NhY2hpbmc6IGJvb2xlYW47XG5cbiAgLy9zZXQgTXVsdGlzZWxlY3QgVG9nZ2xlIENvbHVtbnNcbiAgQElucHV0KCkgYWx3YXlzSGlkZGVuOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gc2V0IHByb3BlcnR5IHNvZnRDYWNoaW5nIGZvciBzZXR0aW5nIHRoZSB2YWx1ZXMgb2YgZ3JpZEZpbHRlclxuICBASW5wdXQoKSBzb2Z0Q2FjaGluZzogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KCkgZWRpdEFsbFJvd3M6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBzZXQgdGhlIHJvdyBXaGVuIEVkaXQgdGhlIHJvdyBvbiBHcmlkXG4gIEBPdXRwdXQoKSBvbkdyaWRSb3dFZGl0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIHNldCB0aGUgcm93IFdoZW4gYWRkaW5nIHRoZSBuZXcgUm93IG9uIEdyaWRcbiAgQE91dHB1dCgpIG9uR3JpZFJvd0FkZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBpc0dyaWRIaWRkZW46IGJvb2xlYW4gPSBmYWxzZTtcblxuICByb3dzUGVyUGFnZU9wdGlvbnM6IGFueVtdID0gWzUsIDEwLCAxNSwgeyBzaG93QWxsOiAnQWxsJyB9XTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHVibGljIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3JtU2VydmljZTogRm9ybVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBncmlkU2VydmljZTogR3JpZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoZW50aWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHB1YmxpYyBkZWNpbWFsUGlwZTogRGVjaW1hbFBpcGUsXG4gICAgcHJpdmF0ZSBwYWdlTG9nZ2VyU2VydmljZTogUGFnZUxvZ2dlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBoeXBlcmxpbmtTZXJ2aWNlOiBIeXBlcmxpbmtTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICAgcHVibGljIGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHVibGljIGNvbmZpZzogRHluYW1pY0RpYWxvZ0NvbmZpZyxcbiAgICBAT3B0aW9uYWwoKSBwdWJsaWMgcmVmOiBEeW5hbWljRGlhbG9nUmVmXG4gICkgeyB9XG5cbiAgY29uc29sZUxvZyhtZXNzYWdlOiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZyhtZXNzYWdlKTtcbiAgfVxuXG4gIGFzeW5jIGFkZER5bmFtaWNQYW5lbE92ZXJsYXlDb21wb25lbnQob25Ib3ZlcjogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgb25Ib3Zlcj8uc3R5bGUgPyB0aGlzLm92ZXJsYXlQYW5lbFN0eWxlID0gb25Ib3Zlci5zdHlsZSA6IFwiXCJcbiAgICBjb25zdCBjb21wb25lbnRSZWY6IGFueSA9IHRoaXMucGFuZWxPdmVybGF5Vmlld0NvbnRhaW5lci5jcmVhdGVDb21wb25lbnQob25Ib3Zlci5jb21wb25lbnQpXG4gICAgaWYgKG9uSG92ZXIuZGF0YSkge1xuICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmNvbmZpZyA9IFtdO1xuICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmNvbmZpZy5kYXRhID0gb25Ib3Zlci5kYXRhO1xuICAgIH1cbiAgICB0aGlzLmNvbXBvbmVudFJlZnMucHVzaChjb21wb25lbnRSZWYpXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpXG4gIH1cbiAgZ2V0IHNlbGVjdGVkQ29sdW1ucygpOiBJR3JpZENvbHVtbltdIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRDb2x1bW5zO1xuICB9XG5cbiAgc2V0IHNlbGVjdGVkQ29sdW1ucyh2YWw6IElHcmlkQ29sdW1uW10pIHtcbiAgICB0aGlzLl9zZWxlY3RlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnM/LmZpbHRlcigoY29sKSA9PiB2YWwuaW5jbHVkZXMoY29sKSk7XG4gICAgaWYgKHRoaXMuYWx3YXlzSGlkZGVuKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZEZpZWxkcyA9IHZhbC5tYXAoKHgpID0+IHguZmllbGQpO1xuICAgICAgdGhpcy5zZXRNdWx0aVNlbGVjdFRvZ2dsZUNvbHVtbihzZWxlY3RlZEZpZWxkcyk7XG4gICAgfVxuICB9XG5cbiAgLy8gYnJvd3NlciBjbG9zZSBldmVudFxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6YmVmb3JldW5sb2FkJywgWyckZXZlbnQnXSlcbiAgYmVmb3JldW5sb2FkSGFuZGxlcihldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQXNzaWdubWVudCBvZiBzZWxlY3RlZCBjb2x1bW5zIG9uIHBhZ2UgbG9hZFxuICAgKi9cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gYXV0b21hdGljYWxseSByZWxvYWQgZ3JpZCBhZnRlciA5IHNlY29uZHMuXG4gICAgaWYgKHRoaXMuc2V0R3JpZFJlZnJlc2hUaW1lKSB7XG4gICAgICB0aGlzLnJlZnJlc2hHcmlkKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub25Sb3dVcGRhdGU/Lm9ic2VydmVycz8ubGVuZ3RoID09IDApIHtcbiAgICAgIHRoaXMuaGlkZUVkaXRCdG4gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVkaXRBbGxSb3dzICYmIHRoaXMub25Sb3dEZWxldGUub2JzZXJ2ZXJzLmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aGlzLmRpc2FibGVkU2F2ZUJ0biA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wb25lbnRUYWJsZVJlZiA9IHRoaXMudGFibGU7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNldE51bWVyaWNWYWx1ZXMoKTtcbiAgICB9LCA1MDApO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMucm93c0NoYW5nZS5vYnNlcnZlcnM/Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgICAgIH1cbiAgICB9LCAyMDAwKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMucmVmcmVzaEdyaWRUZXJtaW5hdG9yKCk7XG4gIH1cblxuICAvLyBzZXQgTXVsdGlzZWxlY3QgVG9nZ2xlIENvbHVtbiAvL1xuICBzZXRNdWx0aVNlbGVjdFRvZ2dsZUNvbHVtbihzZWxlY3RlZEZpZWxkczogYW55W10gPSBbXSkge1xuICAgIGlmICh0aGlzLnVzZXJTZXR0aW5nPy5wYWdlU2V0dGluZ3M/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG1hdGNoVXJsID0gdGhpcy51c2VyU2V0dGluZz8ucGFnZVNldHRpbmdzPy5maW5kSW5kZXgoKHBhZ2UpID0+IHBhZ2U/LnVybCA9PT0gdGhpcy5yb3V0ZXIudXJsKVxuICAgICAgaWYgKG1hdGNoVXJsID4gLTEpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hHcmlkID0gdGhpcy51c2VyU2V0dGluZz8ucGFnZVNldHRpbmdzW21hdGNoVXJsXT8uZ3JpZFNldHRpbmdzPy5maW5kSW5kZXgoKGdyaWRTZXR0aW5nKSA9PiBncmlkU2V0dGluZz8uZ3JpZElkID09PSB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCk7XG4gICAgICAgIGlmIChtYXRjaEdyaWQgPiAtMSkge1xuICAgICAgICAgIHRoaXMudXNlclNldHRpbmc/LnBhZ2VTZXR0aW5nc1ttYXRjaFVybF0/LmdyaWRTZXR0aW5ncy5zcGxpY2UobWF0Y2hHcmlkLCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRncmlkU2V0dGluZ3Moc2VsZWN0ZWRGaWVsZHMsIG1hdGNoVXJsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51c2VyU2V0dGluZy5wYWdlU2V0dGluZ3MgPSBbXTtcbiAgICAgIHRoaXMuc2V0Z3JpZFNldHRpbmdzKHNlbGVjdGVkRmllbGRzKTtcbiAgICB9XG4gIH1cblxuICBnZXRTZWxlY3RlZENvbEZyb21Mb2NhbFN0cm9yYWdlKHNlbGVjdGVkQ29sdW1uKSB7XG4gICAgbGV0IGFyciA9IFtdO1xuICAgIGlmIChzZWxlY3RlZENvbHVtbiAmJiBzZWxlY3RlZENvbHVtbj8ucGFnZVNldHRpbmdzPy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBtYXRjaFVybCA9IHNlbGVjdGVkQ29sdW1uPy5wYWdlU2V0dGluZ3M/LmZpbmRJbmRleCgocGFnZSkgPT4gcGFnZT8udXJsID09PSB0aGlzLnJvdXRlci51cmwpXG4gICAgICBpZiAobWF0Y2hVcmwgPiAtMSkge1xuICAgICAgICBjb25zdCBtYXRjaEdyaWQgPSBzZWxlY3RlZENvbHVtbj8ucGFnZVNldHRpbmdzW21hdGNoVXJsXT8uZ3JpZFNldHRpbmdzPy5maW5kKChncmlkU2V0dGluZykgPT4gZ3JpZFNldHRpbmc/LmdyaWRJZCA9PT0gdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQpO1xuICAgICAgICBpZiAobWF0Y2hHcmlkICYmIG1hdGNoR3JpZC5zZWxlY3RlZENvbHVtbnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBpZiAobWF0Y2hHcmlkLnNlbGVjdGVkQ29sdW1ucy5zb21lKChmaWVsZE5hbWUpID0+IGZpZWxkTmFtZS50b0xvd2VyQ2FzZSgpID09PSBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAgIGFyci5wdXNoKGNvbHVtbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhcnI/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBhcnI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICBzZXRncmlkU2V0dGluZ3Moc2VsZWN0ZWRGaWVsZHM6IGFueSwgbWF0Y2hVcmw/OiBhbnkpIHtcbiAgICBpZiAoc2VsZWN0ZWRGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IGdyaWRTZXR0aW5nczogYW55W10gPSBbXTtcbiAgICAgIGdyaWRTZXR0aW5ncy5wdXNoKHtcbiAgICAgICAgZ3JpZElkOiB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCxcbiAgICAgICAgc2VsZWN0ZWRDb2x1bW5zOiBzZWxlY3RlZEZpZWxkc1xuICAgICAgfSlcbiAgICAgIGNvbnN0IHBhZ2VTZXR0aW5nID0ge1xuICAgICAgICB1cmw6IHRoaXMucm91dGVyLnVybCxcbiAgICAgICAgZ3JpZFNldHRpbmdzOiBncmlkU2V0dGluZ3MsXG4gICAgICAgIGxhc3RVcGRhdGVkOiBuZXcgRGF0ZSgpXG4gICAgICB9XG4gICAgICB0aGlzLnVzZXJTZXR0aW5nLmxhc3RVcGRhdGVkID0gbmV3IERhdGUoKTtcbiAgICAgIGlmIChtYXRjaFVybCA+IC0xKSB7XG4gICAgICAgIHRoaXMudXNlclNldHRpbmcucGFnZVNldHRpbmdzW21hdGNoVXJsXSA9IHBhZ2VTZXR0aW5nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy51c2VyU2V0dGluZy5wYWdlU2V0dGluZ3MucHVzaChwYWdlU2V0dGluZyk7XG4gICAgICB9XG4gICAgICBjb25zdCBwYWdlSW5mbyA9IEpTT04uc3RyaW5naWZ5KHRoaXMudXNlclNldHRpbmcpO1xuICAgICAgY2hhbmdlQ29sdW1uc1N0YXRlKHsgcGFnZVNldHRpbmc6IHBhZ2VJbmZvIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGFwcGx5IHVzZXIgcm9sZSBwZXJtaXNzaW9ucyBvbiBncmlkIGNvbHVtbnNcbiAgYXBwbHlDb2x1bW5zUGVybWlzc2lvbnMoKSB7XG4gICAgaWYgKHRoaXMuY29sdW1ucykge1xuICAgICAgbGV0IHRvdGFsRmllbGRzOiBudW1iZXIgPSAwO1xuICAgICAgbGV0IGhpZGRlbkZpZWxkczogbnVtYmVyID0gMDtcblxuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogSUdyaWRDb2x1bW4pID0+IHtcbiAgICAgICAgbGV0IHBlcm1pc3Npb25zOiBJUGVybWlzc2lvbltdID0gY29sdW1uLnBlcm1pc3Npb25zO1xuICAgICAgICBsZXQgaGFzVmFsaWRFZGl0UGVybWlzc2lvbiA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChwZXJtaXNzaW9ucyAmJiBwZXJtaXNzaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcGVybWlzc2lvbnMuZm9yRWFjaCgocGVybWlzc2lvbikgPT4ge1xuICAgICAgICAgICAgbGV0IGlzVmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChwZXJtaXNzaW9uLnJvbGVzICYmIHBlcm1pc3Npb24ucm9sZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBwZXJtaXNzaW9uLnJvbGVzLmZvckVhY2goKHJvbGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWQgJiYgdGhpcy5yb2xlcyAmJiB0aGlzLnJvbGVzLmluY2x1ZGVzKHJvbGUpKSB7XG4gICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuVklFVyAmJlxuICAgICAgICAgICAgICAgICFoYXNWYWxpZEVkaXRQZXJtaXNzaW9uXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4uaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuRURJVCkge1xuICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICBoYXNWYWxpZEVkaXRQZXJtaXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRvdGFsRmllbGRzKys7XG4gICAgICAgIGlmIChjb2x1bW4uaGlkZGVuKSB7XG4gICAgICAgICAgaGlkZGVuRmllbGRzKys7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmlzQ29sdW1uSGlkZGVuID0gdG90YWxGaWVsZHMgPiAwICYmIHRvdGFsRmllbGRzID09PSBoaWRkZW5GaWVsZHM7XG4gICAgfVxuICB9XG5cbiAgLy8gYXBwbHkgZ2xvYmFsIHBlcm1pc3Npb25zIG9uIGVudGlyZSBncmlkXG4gIGFwcGx5R3JpZFBlcm1pc3Npb25zKCkge1xuICAgIGlmICh0aGlzLnBlcm1pc3Npb25zICYmIHRoaXMucGVybWlzc2lvbnMubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IGhhc1ZhbGlkRWRpdFBlcm1pc3Npb24gPSBmYWxzZTtcblxuICAgICAgLy8gY2hlY2sgaWYgYW55IGNvbHVtbiBoYXMgYW55IHBlcm1pc3Npb25cbiAgICAgIGxldCBoYXNDb2x1bW5QZXJtaXNzaW9ucyA9IHRoaXMuY29sdW1ucz8uc29tZShcbiAgICAgICAgKHgpID0+IHg/LnBlcm1pc3Npb25zICYmIHgucGVybWlzc2lvbnMubGVuZ3RoID4gMFxuICAgICAgKTtcblxuICAgICAgdGhpcy5wZXJtaXNzaW9ucy5mb3JFYWNoKChwZXJtaXNzaW9uKSA9PiB7XG4gICAgICAgIGxldCBpc1ZhbGlkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAgICAgcGVybWlzc2lvbi5yb2xlcy5mb3JFYWNoKChyb2xlKSA9PiB7XG4gICAgICAgICAgaWYgKCFpc1ZhbGlkICYmIHRoaXMucm9sZXMgJiYgdGhpcy5yb2xlcy5pbmNsdWRlcyhyb2xlKSkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuQ1JVRCAmJiAhaXNWYWxpZCkge1xuICAgICAgICAgIHRoaXMudXNlSW5saW5lQ1JVRCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgIHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLlZJRVcgJiZcbiAgICAgICAgICAhaGFzVmFsaWRFZGl0UGVybWlzc2lvblxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnVzZUlubGluZUNSVUQgPSB0cnVlO1xuICAgICAgICAgIGlmICghaXNWYWxpZCAmJiAhaGFzQ29sdW1uUGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuaXNHcmlkSGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMudXNlSW5saW5lQ1JVRCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5FRElUICYmICFpc1ZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5pc0dyaWRIaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICBoYXNWYWxpZEVkaXRQZXJtaXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmVkaXRSb3dQZXJtaXNzaW9uID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuREVMRVRFICYmICFpc1ZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5kZWxldGVSb3dQZXJtaXNzaW9uID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuQUREUk9XICYmICFpc1ZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5hZGRSb3dQZXJtaXNzaW9uID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5vblJvd0FkZC5vYnNlcnZlcnMubGVuZ3RoID09IDApIHRoaXMuYWRkUm93UGVybWlzc2lvbiA9IGZhbHNlO1xuICAgIGlmICh0aGlzLm9uUm93RGVsZXRlLm9ic2VydmVycy5sZW5ndGggPT0gMCkgdGhpcy5kZWxldGVSb3dQZXJtaXNzaW9uID0gZmFsc2U7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2U6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoIXRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkICYmICF0aGlzLmdyaWRTZXJ2aWNlLnJvd1VwZGF0ZSkge1xuICAgICAgbGV0IGdldFNlbGVjdGVkQ29sID0gW11cbiAgICAgIGlmICh0aGlzLmFsbG93Q2FjaGluZyAhPT0gZmFsc2UgJiYgdGhpcy5wYWdpbmF0aW9uKSB7XG4gICAgICAgIHRoaXMuYWxsb3dDYWNoaW5nID0gdGhpcy5wYWdpbmF0aW9uO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCkge1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnU2V0RmlsdGVycy0nICsgdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmwpO1xuICAgICAgfVxuICAgICAgLy8gYWRkIGRlZmF1bHRSb3cgaW4gcGFnaW5hdGlvbiBhcnJheVxuICAgICAgaWYgKCF0aGlzLnNldFBhZ2luYXRpb25MZW5ndGguaW5jbHVkZXModGhpcy5kZWZhdWx0Um93cykpIHtcbiAgICAgICAgdGhpcy5zZXRQYWdpbmF0aW9uTGVuZ3RoLnVuc2hpZnQodGhpcy5kZWZhdWx0Um93cyk7XG4gICAgICB9XG4gICAgICBjb25zdCBoYXNDb2x1bW5zOiBib29sZWFuID0gdGhpcy5jb2x1bW5zICYmIHRoaXMuY29sdW1ucy5sZW5ndGggPiAwO1xuICAgICAgaWYgKGhhc0NvbHVtbnMpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5ncmlkU2VydmljZS5zZXRDb2x1bW5GaWVsZHModGhpcy5jb2x1bW5zKTtcbiAgICAgICAgaWYgKHRoaXMuYWx3YXlzSGlkZGVuKSB7XG4gICAgICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zPy5maWx0ZXIoKHgpID0+ICF4LmhpZGRlbik7XG4gICAgICAgICAgY29uc3QgY3VycmVudFVzZXJJbmZvID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnQ3VycmVudFVzZXJJbmZvJykpO1xuICAgICAgICAgIGlmIChjdXJyZW50VXNlckluZm8pIHtcbiAgICAgICAgICAgIGdldFNlbGVjdGVkQ29sID0gdGhpcy5nZXRTZWxlY3RlZENvbEZyb21Mb2NhbFN0cm9yYWdlKEpTT04ucGFyc2UoY3VycmVudFVzZXJJbmZvPy5wYWdlU2V0dGluZykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJvbGVzID0gdGhpcy5hdXRoU2VydmljZS5nZXRVc2VyUm9sZXMoKTtcblxuICAgICAgICAvLyBhcHBseSB1c2VyIHJvbGUgcGVybWlzc2lvbnMgb24gZ3JpZCBjb2x1bW5zXG4gICAgICAgIHRoaXMuYXBwbHlDb2x1bW5zUGVybWlzc2lvbnMoKTtcblxuICAgICAgICAvLyBhcHBseSBnbG9iYWwgcGVybWlzc2lvbnMgb24gZW50aXJlIGdyaWRcbiAgICAgICAgdGhpcy5hcHBseUdyaWRQZXJtaXNzaW9ucygpO1xuICAgICAgICB0aGlzLl9zZWxlY3RlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnM/LmZpbHRlcigoeCkgPT4gIXguaGlkZGVuKTtcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgLy8gY2hlY2tpbmcgZmlsdGVyIGV4aXN0IG9yIG5vdFxuICAgICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLl9zZWxlY3RlZENvbHVtbnMuc29tZShcbiAgICAgICAgICAoY29sdW1uKSA9PiBjb2x1bW4uZmlsdGVyaW5nID09PSB1bmRlZmluZWQgfHwgY29sdW1uLmZpbHRlcmluZyA9PT0gdHJ1ZVxuICAgICAgICApO1xuICAgICAgICBpZiAoZmlsdGVyID09PSBmYWxzZSkge1xuICAgICAgICAgIHRoaXMuaGlkZUZpbHRlciA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyBzZXQgaXNSZXF1aXJlZCB0cnVlIGZvciByZXF1aXJlZCBjb2x1bW4gdG8gc2hvdyBhc3RyaWMgaW4gY29sdW1uIGhlYWRlclxuICAgICAgICAgIGlmIChjb2x1bW4udmFsaWRhdGlvbnM/LmZpbmQodmFsaWRhdGlvbiA9PiB2YWxpZGF0aW9uLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuUkVRVUlSRUQpKSB7XG4gICAgICAgICAgICBjb2x1bW4uaXNSZXF1aXJlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHNldCBudW1lcmljIG51bGwgb3IgdW5kZWZpbmUgZGF0YSBkZWZhdWx0IHZhbHVlXG4gICAgICAgICAgaWYgKChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk5VTUVSSUMgfHwgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOIHx8IGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuVEVYVCB8fCBjb2x1bW4udHlwZSA9PT0gdW5kZWZpbmVkIHx8IGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSB8fCBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOKSAmJiBjb2x1bW4udmFsdWUgJiYgdGhpcy5yb3dzRGF0YT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGNvbHVtbi52YWx1ZSAmJiAocm93W2NvbHVtbi5maWVsZF0gPT09IG51bGwgfHwgcm93W2NvbHVtbi5maWVsZF0gPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IGNvbHVtbi52YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBjb252ZXJ0IHN0cmluZyB0aW1lIGludG8gdGhlIGRhdGVcbiAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFKSB7XG4gICAgICAgICAgICBpZiAoY29sdW1uLnRpbWVPbmx5ID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gJiZcbiAgICAgICAgICAgICAgICAgIChyb3dbY29sdW1uLmZpZWxkXS50b1N0cmluZygpLmluY2x1ZGVzKCdQTScpIHx8XG4gICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ0FNJykpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHNldFRpbWVJbkRhdGUocm93W2NvbHVtbi5maWVsZF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFjb2x1bW4ubWludXRlc0ludGVydmFsKSB7XG4gICAgICAgICAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZF0pIHtcbiAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gbmV3IERhdGUocm93W2NvbHVtbi5maWVsZF0gYXMgc3RyaW5nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBzZXQgZmlsdGVyIHZhbHVlXG4gICAgICAgICAgaWYgKGNvbHVtbi5maWx0ZXIgJiYgY29sdW1uLmZpbHRlclZhbHVlICYmIGNvbHVtbi5maWx0ZXJpbmcgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aGlzLnNldEZpbHRlckZvY3VzT3V0KGNvbHVtbik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gc2V0IERpc3BsYXlUZXh0IHdoZW4gdmFsdWUgaXMgaW4gY3VybHkgYnJhY2tldHMuXG4gICAgICAgICAgdGhpcy5zZXREaXNwbGF5VGV4dFZhbHVlKGNvbHVtbik7XG5cbiAgICAgICAgICAvL0FnZ3JlZ2F0ZSBzY2VuYXJpb1xuICAgICAgICAgIGlmIChjb2x1bW4uYWdncmVnYXRlICYmIGNvbHVtbi5hZ2dyZWdhdGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5hZ2dyZWdhdGVGb290ZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zZXRBZ2dyZWdhdGVUZXh0KGNvbHVtbik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IHNlYXJjaEZpbHRlcnM7XG4gICAgICAgICAgaWYgKCF0aGlzLnNvZnRDYWNoaW5nICYmIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgICAgICBzZWFyY2hGaWx0ZXJzID0gSlNPTi5wYXJzZShcbiAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ1NldEZpbHRlcnMtJyArIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdGhpcy5jdXJyZW50VXJsKSBhcyBhbnlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCkge1xuICAgICAgICAgICAgc2VhcmNoRmlsdGVycyA9IHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW3RoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdGhpcy5jdXJyZW50VXJsXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMuaGlkZUZpbHRlciAmJlxuICAgICAgICAgICAgc2VhcmNoRmlsdGVycyAmJlxuICAgICAgICAgICAgc2VhcmNoRmlsdGVycy5maWx0ZXJzICYmXG4gICAgICAgICAgICBzZWFyY2hGaWx0ZXJzLmZpbHRlcnM/Lmxlbmd0aCA+IDBcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHNlYXJjaEZpbHRlcnMuZmlsdGVycy5mb3JFYWNoKCh4OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHguZmllbGQgPT09IGNvbHVtbi5maWVsZCkge1xuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4/LmZpbHRlcj8udHlwZSA9PT0gJ2NhbGVuZGFyJyAmJiB4LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4uZmlsdGVyVmFsdWUgPSBuZXcgRGF0ZSh0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh4LnZhbHVlLCAnTU0tZGQtWVknKSBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOKSB7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4uZmlsdGVyVmFsdWUgPSB4LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoeC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgY29sdW1uLmZpbHRlclZhbHVlID0geC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBjb252ZXJ0aW5nIGRpc3BsYXlGaWVsZCB0b0xvd2VyY2FzZVxuICAgICAgICAgIGlmIChjb2x1bW4uZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgICBjb2x1bW4uZGlzcGxheUZpZWxkID0gY29sdW1uLmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBzZXQgQXV0b0NvbXBsZXRlIERhdGFcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkFVVE9DT01QTEVURSAmJlxuICAgICAgICAgICAgdGhpcy5yb3dzRGF0YSAmJlxuICAgICAgICAgICAgdGhpcy5yb3dzRGF0YT8ubGVuZ3RoID4gMFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgLy8gY29udmVydCBzdHJpbmcgdGhhdCBjb250YWlucyBjb21tYSBpbnRvIGFycmF5c1xuICAgICAgICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJzsnKSkge1xuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF1cbiAgICAgICAgICAgICAgICAgID8udG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgLnNwbGl0KCc7JylcbiAgICAgICAgICAgICAgICAgID8ubWFwKCh2YWx1ZTogYW55KSA9PiAoeyBbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV06IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXSwgW2NvbHVtbi5vcHRpb25MYWJlbD8udG9Mb3dlckNhc2UoKV06IHZhbHVlLCBbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXTogdmFsdWUgfSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGtleTogYW55ID0gT2JqZWN0LmtleXMocm93KS5maW5kKCh4KSA9PiB4ID09PSBjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICAgIC8vIGNvbnZlcnQgc2ltcGxlIHN0cmluZyBpbnRvIGFycmF5XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyb3dba2V5XSkgJiYgcm93W2tleV0pIHtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgICAgICAgICAgcm93W2tleV0gPSBbeyBbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV06IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXSwgW2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV06IHJvd1trZXldIH1dO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBpZiAoY29sdW1uLm9wdGlvbkxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd1trZXldID0gW3sgW2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV06IHJvd1trZXldLCBbY29sdW1uLm9wdGlvbkxhYmVsPy50b0xvd2VyQ2FzZSgpXTogcm93W2tleV0gfV07XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByb3dba2V5XSA9IFt7IFtjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldOiByb3dba2V5XSB9XTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vd2hlbiB3ZSBhZGQgYSBuZXcgcm93LCBpdCBzZXQgdGhlIGRlZmF1bHQgdmFsdWVcbiAgICAgICAgICBpZiAoY29sdW1uLnZhbHVlKSB7XG4gICAgICAgICAgICBsZXQga2V5ID0gT2JqZWN0LmtleXModGhpcy5uZXdHcmlkUm93KS5maW5kKCh4KSA9PiB4Py50b0xvd2VyQ2FzZSgpID09PSBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAgICB0aGlzLm5ld0dyaWRSb3dbY29sdW1uLmZpZWxkXSA9IGNvbHVtbi52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmFsd2F5c0hpZGRlbiAmJiBnZXRTZWxlY3RlZENvbD8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuc2V0U2VsZWN0Q29sdW1ucyhnZXRTZWxlY3RlZENvbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXRTZWxlY3RDb2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlLnJvd3MpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdsb2JhbEZpbHRlckJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWFyY2hHbG9iYWxGaWx0ZXJCdG4nKTtcbiAgICAgICAgICAgIGlmIChnbG9iYWxGaWx0ZXJCdG4pIHtcbiAgICAgICAgICAgICAgdGhpcy5zaG93RmlsdGVyYnRuID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNsYXNzRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2hpZ2hsaWdodGVkLXJvdycpO1xuICAgICAgICAgICAgaWYgKGNsYXNzRWxlbWVudC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGNsYXNzRWxlbWVudFswXS5zY3JvbGxJbnRvVmlldygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIDUwMCk7XG5cbiAgICAgICAgICBpZiAodGhpcy5lZGl0QWxsUm93cyAmJiB0aGlzLnJvd3NEYXRhPy5sZW5ndGggPiAwICYmIHRoaXMuY29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5lZGl0QWxsUm93c0F0T25jZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5zZXREcm9wZG93bmRhdGFWYWx1ZSA9IHRydWU7XG4gICAgICBjb25zdCBnbG9iYWxTZWFyY2hidG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2xvYmFsU2VhcmNoYnRuJyk7XG4gICAgICBpZiAoZ2xvYmFsU2VhcmNoYnRuKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoR3JpZEZpbHRlciA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucm93c0RhdGE/Lmxlbmd0aCA+IDAgJiYgdGhpcy5nZW5lcmF0ZVJvd3NEYXRhQ29weSkge1xuICAgICAgICB0aGlzLnJvd3NEYXRhQ29weSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5yb3dzRGF0YSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkID0gZmFsc2U7XG4gIH1cblxuICBzZXRTZWxlY3RDb2x1bW5zKGNvbHVtbnMpIHtcbiAgICB0aGlzLl9zZWxlY3RlZENvbHVtbnMgPSBbXTtcbiAgICBjb2x1bW5zPy5mb3JFYWNoKCh4LCBpKSA9PiB7XG4gICAgICBpZiAoIXguaGlkZGVuKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29sdW1uc1tpXSkge1xuICAgICAgICAgIHgudmFsdWUgPSB0aGlzLnNlbGVjdGVkQ29sdW1uc1tpXS52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zZWxlY3RlZENvbHVtbnMucHVzaCh4KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGF1dG9Db21wbGV0ZVNlbGVjdGVkVmFsdWUocm93OiBhbnksIGNvbHVtbjogSUdyaWRDb2x1bW4sIHZhbHVlKSB7XG4gICAgaWYgKGNvbHVtbi5vcHRpb25MYWJlbCkge1xuICAgICAgY29uc3QgdmFsdWVLZXkgPSBjb2x1bW4ub3B0aW9uVmFsdWUgPyBjb2x1bW4ub3B0aW9uVmFsdWUgOiBjb2x1bW4uZmllbGQ7XG4gICAgICByb3dbY29sdW1uLmZpZWxkXSA9IFsuLi5yb3dbY29sdW1uLmZpZWxkXSwge1xuICAgICAgICBbY29sdW1uLm9wdGlvbkxhYmVsPy50b0xvd2VyQ2FzZSgpXTogdmFsdWVbY29sdW1uLm9wdGlvbkxhYmVsPy50b0xvd2VyQ2FzZSgpXSwgW3ZhbHVlS2V5Py50b0xvd2VyQ2FzZSgpXTogdmFsdWVbdmFsdWVLZXk/LnRvTG93ZXJDYXNlKCldLFxuICAgICAgICBbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXTogdmFsdWVbdmFsdWVLZXk/LnRvTG93ZXJDYXNlKCldXG4gICAgICB9XTtcbiAgICAgIGNvbnN0IGluZGV4ID0gcm93W2NvbHVtbi5maWVsZF0/LmZpbmRJbmRleCgoeCkgPT4gSlNPTi5zdHJpbmdpZnkoeCkgPT09IEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgICByb3dbY29sdW1uLmZpZWxkXS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNldCBEaXNwbGF5VGV4dCB3aGVuIHZhbHVlIGlzIGluIGN1cmx5IGJyYWNrZXRzLlxuICBzZXREaXNwbGF5VGV4dFZhbHVlKGNvbHVtbjogSUdyaWRDb2x1bW4pIHtcbiAgICB0aGlzLnJvd3NEYXRhPy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MSU5LIHx8XG4gICAgICAgIEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgfHxcbiAgICAgICAgRUdyaWRDb2x1bW5UeXBlLklGUkFNRVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ107XG4gICAgICAgIGlmIChjb2x1bW4uZGlzcGxheVRleHQgJiYgY29sdW1uLmRpc3BsYXlUZXh0LmluY2x1ZGVzKCd7JykpIHtcbiAgICAgICAgICBjb25zdCBkaXNwbGF5VGV4dCA9IGNvbHVtbi5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgLnJlcGxhY2UoJ3snLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKCd9JywgJycpO1xuICAgICAgICAgIGlmIChkaXNwbGF5VGV4dCAmJiBmaWVsZCkge1xuICAgICAgICAgICAgZmllbGQuZGlzcGxheVRleHQgPSByb3dbZGlzcGxheVRleHQudG9Mb3dlckNhc2UoKV07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5kaXNwbGF5VGV4dCAmJiBmaWVsZCkge1xuICAgICAgICAgIGZpZWxkLmRpc3BsYXlUZXh0ID0gY29sdW1uLmRpc3BsYXlUZXh0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZXROdW1lcmljTWluTXhGcmFjdGlvbihjb2x1bW46IGFueSkge1xuICAgIGxldCBkaWdpdEluZm8gPSAnMic7XG4gICAgaWYgKGNvbHVtbj8uZm9ybWF0LnR5cGUgPT09ICdwZXJjZW50JyAmJiAhY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbykge1xuICAgICAgZGlnaXRJbmZvID0gJzAnXG4gICAgfSBlbHNlIGlmIChjb2x1bW4/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvKSB7XG4gICAgICBkaWdpdEluZm8gPSBjb2x1bW4uZm9ybWF0LmZvcm1hdFBhcmFtcy5kaWdpdHNJbmZvO1xuICAgIH1cbiAgICByZXR1cm4gZGlnaXRJbmZvO1xuICB9XG5cbiAgLy8gc2V0IHRoZSBmb3JtYXQgb2YgY3VycmVuY3kgJiYgbnVtYmVyICYmIGRlY2ltYWwgJiYgcGVyY2VudFxuICBzZXROdW1lcmljRm9ybWF0KGNvbHVtbjogYW55LCByb3c6IGFueSkge1xuICAgIHJvdyA9IG9iakNvbnZlcnRUb0xvd2VyKHJvdyk7XG4gICAgbGV0IHZhbHVlOiBhbnkgPSByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHRcbiAgICAgID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlUZXh0XG4gICAgICA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgPyByb3dbcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV1cbiAgICAgICAgOiByb3dbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICA/IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgOiAocm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/LnRleHQgfHwgcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/LnRleHQgPT09IDAgfHwgcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/LnRleHQgPT09IG51bGwpXG4gICAgICAgICAgICA/IHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy50ZXh0IDogcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV07XG4gICAgaWYgKHRoaXMudHlwZU9mKHZhbHVlKSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPT09IDApIHtcbiAgICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgbGV0IGZvcm1hdFBhcmFtcyA9IGNvbHVtbi5mb3JtYXQ/LmZvcm1hdFBhcmFtcztcbiAgICBsZXQgZGlnaXRzSW5mbyA9IGZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbztcbiAgICBpZiAoY29sdW1uLmZvcm1hdCAmJiB2YWx1ZSkge1xuICAgICAgc3dpdGNoIChjb2x1bW4uZm9ybWF0Py50eXBlKSB7XG4gICAgICAgIGNhc2UgRUdyaWRGb3JtYXRUeXBlLkNVUlJFTkNZOlxuICAgICAgICAgIHZhbHVlID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KFxuICAgICAgICAgICAgZm9ybWF0UGFyYW1zPy5sb2NhbGUgPyBmb3JtYXRQYXJhbXMubG9jYWxlIDogJ2VuLVVTJyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3R5bGU6ICdjdXJyZW5jeScsXG4gICAgICAgICAgICAgIGN1cnJlbmN5OiBmb3JtYXRQYXJhbXM/LmN1cnJlbmN5ID8gZm9ybWF0UGFyYW1zLmN1cnJlbmN5IDogJ1VTRCcsXG4gICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogZGlnaXRzSW5mbyA/IGRpZ2l0c0luZm8gOiAnMicsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKT8uZm9ybWF0KHZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuREVDSU1BTDpcbiAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpLnRvRml4ZWQoZGlnaXRzSW5mbyA/IGRpZ2l0c0luZm8gOiAnMicpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVHcmlkRm9ybWF0VHlwZS5QRVJDRU5UOlxuICAgICAgICAgIHZhbHVlID0gdmFsdWUgKyAnJSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8vQ2hhbmdlIGRyb3Bkb3duIHZsdWUgYmFzZWQgb24gb3B0aW9uIGxhYmVsIGFuZCBvcHRpb252YWx1ZVxuICBzZXREcm9wZG93blZhbHVlKGNvbHVtbjogSUdyaWRDb2x1bW4sIHNlbGVjdGVkUm93PzogYW55LCBjaGFuZ2U/OiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMucm93c0RhdGEgJiYgdGhpcy5yb3dzRGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMocm93KT8uZmluZCgoa2V5KSA9PiBrZXkgPT09IGNvbHVtbi5maWVsZCkpIHtcbiAgICAgICAgICBpZiAoY29sdW1uKSB7XG4gICAgICAgICAgICBjb2x1bW4ub3B0aW9uTGFiZWwgPSBjb2x1bW4ub3B0aW9uTGFiZWxcbiAgICAgICAgICAgICAgPyBjb2x1bW4ub3B0aW9uTGFiZWxcbiAgICAgICAgICAgICAgOiAnbGFiZWwnO1xuICAgICAgICAgICAgY29sdW1uLm9wdGlvblZhbHVlID0gY29sdW1uLm9wdGlvblZhbHVlXG4gICAgICAgICAgICAgID8gY29sdW1uLm9wdGlvblZhbHVlXG4gICAgICAgICAgICAgIDogJ3ZhbHVlJztcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBjb2x1bW4uZGF0YT8uZmluZChcbiAgICAgICAgICAgIChyZWNvcmQ6IGFueSkgPT5cbiAgICAgICAgICAgICAgcmVjb3JkW2NvbHVtbi5vcHRpb25WYWx1ZV0/LnRvU3RyaW5nKCkgPT09XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdPy50b1N0cmluZygpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBlZGl0ZWRSb3cgPSBzZWxlY3RlZFJvdyAmJiBPYmplY3Qua2V5cyhzZWxlY3RlZFJvdykubGVuZ3RoID4gMCA/IHNlbGVjdGVkUm93W3RoaXMuZGF0YUtleV0gPT09IHJvd1t0aGlzLmRhdGFLZXldIDogZmFsc2U7XG4gICAgICAgICAgaWYgKHZhbHVlICYmIGVkaXRlZFJvdykge1xuICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSB2YWx1ZVtjb2x1bW4ub3B0aW9uVmFsdWVdO1xuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgJiYgY2hhbmdlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSB2YWx1ZVtjb2x1bW4ub3B0aW9uTGFiZWxdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy9tYW5pcHVsYXRlIGNoZWNrYm94IHN0cmluZyB2YWx1ZSB0byB0cnVlIGFuZCBmYWxzZS5cbiAgY2hhbmdlQ2hlY2tib3hTdHJpbmdWYWx1ZSgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmNvbHVtbnMgJiZcbiAgICAgIHRoaXMucm93c0RhdGEgJiZcbiAgICAgIHRoaXMucm93c0RhdGEubGVuZ3RoID4gMCAmJlxuICAgICAgdGhpcy5jb2x1bW5zLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xuICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTiAmJiB0aGlzLnNldERyb3Bkb3duZGF0YVZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5zZXREcm9wZG93blZhbHVlKGNvbHVtbiwge30sIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJvd3NEYXRhLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQk9PTEVBTikge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAodHlwZW9mIChyb3dbY29sdW1uLmZpZWxkXSA9PT0gJ3N0cmluZycpICYmXG4gICAgICAgICAgICAgICAgKHJvd1tjb2x1bW4uZmllbGRdID09PSAnMScgfHwgcm93W2NvbHVtbi5maWVsZF0gPT09ICcwJykpIHx8XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID09PSAnWScgfHxcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPT09ICdOJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID1cbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9PT0gJzEnIHx8IHJvd1tjb2x1bW4uZmllbGRdID09PSAnWSdcbiAgICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSByb3dEYXRhXG4gICAqIFBhc3NlcyBkYXRhIG9mIGNsaWNrZWQgcm93IHRvIHBhcmVudFxuICAgKi9cbiAgaGFuZGxlUm93Q2xpY2socm93RGF0YTogYW55KSB7XG4gICAgdGhpcy5yb3dDbGlja0RhdGEgPSByb3dEYXRhO1xuICAgIGlmICghdGhpcy5lZGl0QWxsUm93cykge1xuICAgICAgdGhpcy5vblJvd0NsaWNrLmVtaXQocm93RGF0YSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBjb2x1bW5EYXRhXG4gICAqIFBhc3NlcyBzb3J0aW5nIGluZm9ybWF0aW9uIHRvIHBhcmVudCBvbiBzb3J0IGNoYW5nZVxuICAgKi9cbiAgaGFuZGxlU29ydENoYW5nZShldmVudDogYW55KSB7XG4gICAgbGV0IHNvcnREaXJlY3Rpb24gPSBudWxsO1xuICAgIGxldCBzb3J0RmllbGQ6IHN0cmluZyA9ICcnO1xuICAgIGlmIChldmVudC5tdWx0aXNvcnRtZXRhICYmIGV2ZW50Lm11bHRpc29ydG1ldGFbMF0ub3JkZXIpIHtcbiAgICAgIHNvcnREaXJlY3Rpb24gPVxuICAgICAgICBldmVudC5tdWx0aXNvcnRtZXRhWzBdLm9yZGVyID09IDFcbiAgICAgICAgICA/IEVHcmlkU29ydERpcmVjdGlvbi5BU0NcbiAgICAgICAgICA6IEVHcmlkU29ydERpcmVjdGlvbi5ERVNDO1xuICAgICAgc29ydEZpZWxkID0gZXZlbnQubXVsdGlzb3J0bWV0YVswXS5maWVsZDtcbiAgICB9XG4gICAgbGV0IHNvcnRzOiBJR3JpZFNvcnQgPSB7XG4gICAgICBmaWVsZDogc29ydEZpZWxkLFxuICAgICAgZGlyZWN0aW9uOiBzb3J0RGlyZWN0aW9uIGFzIEVHcmlkU29ydERpcmVjdGlvbixcbiAgICAgIHByaW9yaXR5OiAwLFxuICAgIH07XG4gICAgdGhpcy5vblNvcnRDaGFuZ2UuZW1pdChzb3J0cyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIFBhc3NlcyBhcHBsaWVkIGZpbHRlcnMgdG8gcGFyZW50IG9uIGZpbHRlciBjaGFuZ2VcbiAgICovXG4gIGhhbmRsZUZpbHRlckNoYW5nZShldmVudDogYW55KSB7XG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGZpbHRlcjogYW55KSA9PiB7XG4gICAgICBpZiAoIWV2ZW50LmZpbHRlcnNbZmlsdGVyLmZpZWxkXT8udmFsdWUgJiYgIWZpbHRlci52YWx1ZSkge1xuICAgICAgICBmaWx0ZXIudmFsdWUgPSAnJztcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLm9uRmlsdGVyQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCA6IEV2ZW50XG4gICAqIEBwYXJhbSBjb2x1bW5BY3Rpb24gOiBJR3JpZENvbHVtbkFjdGlvblxuICAgKiBAcGFyYW0gcm93IDogYW55XG4gICAqIFN0b3AgdGhlIGNsaWNrIGV2ZW50IHByb3BhZ2F0aW9uIHRvIHBhcmVudFxuICAgKiBDYWxsYmFja3MgdGhlIHJvdyBkYXRhIHRvIHBhcmVudFxuICAgKi9cblxuICAvKipcbiAgICogaW52b2tlIG9uQ2xpY2sgZXZlbnQgJiBvcGVuIElmcmFtZSBpbiBncmlkXG4gICAqL1xuICBncmlkSUZyYW1lKGNvbHVtbjogYW55LCByb3dzOiBhbnksIHJvdzogYW55KSB7XG4gICAgdGhpcy5vbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpO1xuICAgIGNvbnN0IHJlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKElmcmFtZUNvbXBvbmVudCwge1xuICAgICAgaGVhZGVyOiBjb2x1bW4uaGVhZGVyLFxuICAgICAgd2lkdGg6ICc4MCUnLFxuICAgICAgaGVpZ2h0OiAnODAlJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdmFsdWU6IHJvd3MsXG4gICAgICAgIGlGcmFtZUlkOiBjb2x1bW4uZGlzcGxheVRleHQgPyBjb2x1bW4uZGlzcGxheVRleHQgOiBjb2x1bW4uZmllbGQsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHRoaXMuc2V0RHluYW1pY0RpYWxvZ1JlZihyZWYpO1xuICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBjb2x1bW4uY29tcG9uZW50Py5uYW1lO1xuICAgIGlmIChjb21wb25lbnROYW1lKSB7XG4gICAgICB0aGlzLnBhZ2VMb2dnZXJTZXJ2aWNlLnNhdmVQYWdlTG9nZ2VySW5mbyh0aGlzLnJvdXRlci51cmw/LnN1YnN0cmluZygxKSwgY29tcG9uZW50TmFtZSk7XG4gICAgfVxuICAgIGRyYWdnYWJsZURpYWxvZyhjb2x1bW4/LmZpZWxkID8gY29sdW1uPy5maWVsZCA6IGNvbHVtbj8uaGVhZGVyKVxuICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICBpZiAocmVzICYmIGNvbHVtbi5vblJldHVybikge1xuICAgICAgICBjb2x1bW4ub25SZXR1cm4ocmVzKTtcbiAgICAgIH0gZWxzZSBpZiAocmVzICYmIGNvbHVtbi5vbkNoYW5nZSkge1xuICAgICAgICBjb2x1bW4ub25DaGFuZ2UocmVzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFkZE5ld1Jvdyhyb3c6IGFueSwgYWRkUm93OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0aGlzLnJlZnJlc2hHcmlkVGVybWluYXRvcigpXG4gICAgdGhpcy5jb21wb25lbnRUYWJsZVJlZiA9IHRoaXMudGFibGU7XG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBjb2x1bW4uZmlsdGVyICYmXG4gICAgICAgIGNvbHVtbi5jb21wb25lbnQgJiZcbiAgICAgICAgY29sdW1uLmZpbHRlci50eXBlID09PSAnY2FsZW5kYXInXG4gICAgICApIHtcbiAgICAgICAgaWYgKGFkZFJvdykge1xuICAgICAgICAgIHRoaXMucm93c0RhdGFbMF1bY29sdW1uLmZpZWxkICsgJ19zZWNvbmRUeXBlJ10gPSBFR3JpZENvbHVtblR5cGUuREFURTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19zZWNvbmRUeXBlJ10gPSBFR3JpZENvbHVtblR5cGUuREFURTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgJiYgY29sdW1uLmFnZ3JlZ2F0ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuYWdncmVnYXRlRm9vdGVyID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXRBZ2dyZWdhdGVUZXh0KGNvbHVtbik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5yb3dDbGlja0RhdGEgPSByb3c7XG4gICAgdGhpcy5hZGROZXdSb3dDaGVjayA9IHRydWU7XG4gICAgdGhpcy5kcm9wZG93bklucHV0ID0gZmFsc2U7XG4gICAgdGhpcy5zb3J0RGlzYWJsZWQgPSB0cnVlO1xuICAgIHRoaXMub25HcmlkUm93QWRkLmVtaXQocm93KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVuIERpYWxvZyBpbiBncmlkXG4gICAqL1xuICBvcGVuR3JpZERpYWxvZyhjb2x1bW46IElHcmlkQ29sdW1uIHwgYW55LCByb3c6IGFueSwgZXZlbnQ/OiBhbnkpIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQuY3RybEtleSAmJiBjb2x1bW4uY29tcG9uZW50KSB7XG4gICAgICBsZXQgZGF0YVBhcmFtcyA9IGNvbHVtbi5kYXRhPy5kYXRhID8gY29sdW1uLmRhdGE/LmRhdGEgOiB7fTtcbiAgICAgIHRoaXMuaHlwZXJsaW5rU2VydmljZS5vcGVuRGlhbG9nSW5OZXdUYWIoY29sdW1uLmNvbXBvbmVudCwgZGF0YVBhcmFtcywgcm93KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGVuQ29tcG9uZW50SW5EaWFsb2coY29sdW1uLCByb3cpO1xuICAgIH1cbiAgfVxuXG4gIG9wZW5Db21wb25lbnRJbkRpYWxvZyhjb2x1bW46IElHcmlkQ29sdW1uIHwgYW55LCByb3c6IGFueSkge1xuICAgIHZhciBpc0Rpc2FibGVkID0gY29sdW1uLmRpc2FibGVkXG4gICAgICA/IHRydWVcbiAgICAgIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc2FibGVkXG4gICAgICAgID8gdHJ1ZVxuICAgICAgICA6IGZhbHNlO1xuICAgIHRoaXMub25DbGlja0V2ZW50KGNvbHVtbiwgcm93KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucm93Q2xpY2tEYXRhID0gcm93O1xuICAgICAgaWYgKGNvbHVtbi5kYXRhICYmIGNvbHVtbi5kYXRhLmRhdGEgJiYgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10pIHtcbiAgICAgICAgY29sdW1uLmRhdGEuZGF0YSA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaWFsb2dEYXRhPy5kYXRhID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpYWxvZ0RhdGEuZGF0YSA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaWFsb2dEYXRhO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29sdW1uLmNvbXBvbmVudCAmJiBjb2x1bW4uZGF0YSAmJiB0aGlzLnJvd0NsaWNrRGF0YSAmJiAhaXNEaXNhYmxlZCkge1xuICAgICAgICBjb25zdCBkYXRhID0geyAuLi5jb2x1bW4uZGF0YSB9O1xuICAgICAgICBkYXRhLmRhdGEgPSBhdXRvU2V0TG9va3VwRGF0YShcbiAgICAgICAgICBjb2x1bW4uZGF0YS5kYXRhLFxuICAgICAgICAgIHRoaXMucm93Q2xpY2tEYXRhXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oY29sdW1uLmNvbXBvbmVudCwgZGF0YSk7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlID0gdGhpcy5pbnRlcmNlcHREaWFsb2dDbG9zZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNldER5bmFtaWNEaWFsb2dSZWYodGhpcy5kaWFsb2dSZWYpO1xuICAgICAgICBjb25zdCBjb21wb25lbnROYW1lID0gY29sdW1uLmNvbXBvbmVudD8ubmFtZTtcbiAgICAgICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgICAgICB0aGlzLnBhZ2VMb2dnZXJTZXJ2aWNlLnNhdmVQYWdlTG9nZ2VySW5mbyh0aGlzLnJvdXRlci51cmw/LnN1YnN0cmluZygxKSwgY29tcG9uZW50TmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgZHJhZ2dhYmxlRGlhbG9nKGNvbHVtbj8uZmllbGQgPyBjb2x1bW4/LmZpZWxkIDogY29sdW1uPy5oZWFkZXIpXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoZGF0YSAmJiBjb2x1bW4ub25SZXR1cm4pIHtcbiAgICAgICAgICAgIGNvbHVtbi5vblJldHVybihkYXRhLCB0aGlzLnJvd0NsaWNrRGF0YSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChkYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmJyb3dzZXJDbG9zZUV2ZW50KHRydWUpO1xuICAgICAgICAgICAgaWYgKGNvbHVtbi5vbkNoYW5nZSkge1xuICAgICAgICAgICAgICBjb2x1bW4ub25DaGFuZ2UoZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LCAxMCk7XG4gIH1cblxuICBicm93c2VyQ2xvc2VFdmVudChldmVudDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdGhpcy5ncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0ID0gZXZlbnQ7XG4gIH1cblxuICBzZXRNdWx0aVNlbGVjdERhdGEoY29sdW1uOiBJR3JpZENvbHVtbiwgc2VsZWN0ZWRWYWx1ZTogYW55KSB7XG4gICAgaWYgKHNlbGVjdGVkVmFsdWUgJiYgY29sdW1uLnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLk1VTFRJU0VMRUNUKSB7XG4gICAgICBpZiAoc2VsZWN0ZWRWYWx1ZSAmJiBzZWxlY3RlZFZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnLCcpKSB7XG4gICAgICAgIHNlbGVjdGVkVmFsdWUgPSBzZWxlY3RlZFZhbHVlPy50b1N0cmluZygpPy5zcGxpdCgnLCcpPy5tYXAoKHZhbHVlKSA9PiBjb2x1bW4uZGF0YT8uZmluZCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWU/LnRvU3RyaW5nKCkgPT09IHZhbHVlPy50b1N0cmluZygpKT8ubGFiZWwpPy50b1N0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZWN0ZWRWYWx1ZSA9IGNvbHVtbi5kYXRhPy5maW5kKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZT8udG9TdHJpbmcoKSA9PT0gc2VsZWN0ZWRWYWx1ZT8udG9TdHJpbmcoKSk/LmxhYmVsO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2VsZWN0ZWRWYWx1ZTtcbiAgfVxuXG4gIHNldFRleHRCb3hSZWFkT25seVZhbHVlKHJvdzogYW55LCBjb2x1bW46IGFueSkge1xuICAgIGxldCB2YWx1ZTogYW55O1xuICAgIGlmIChjb2x1bW4uZGlzcGxheVRleHQpIHtcbiAgICAgIHZhbHVlID0gY29sdW1uLmRpc3BsYXlUZXh0O1xuICAgIH0gZWxzZSBpZiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlUZXh0KSB7XG4gICAgICB2YWx1ZSA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dDtcbiAgICB9IGVsc2UgaWYgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQpIHtcbiAgICAgIHZhbHVlID0gcm93W3Jvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldO1xuICAgIH0gZWxzZSBpZiAoY29sdW1uLmRpc3BsYXlGaWVsZCkge1xuICAgICAgdmFsdWUgPSByb3dbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gcm93W2NvbHVtbi5maWVsZF07XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm4gY29uZGl0aW9uYWwgYmFzZSB2YWx1ZSBhbmQgdGl0bGVcbiAgICovXG4gIHNldENvbmRpdGlvbkJhc2VWYWx1ZShyb3c6IGFueSwgY29sdW1uOiBhbnkpIHtcbiAgICBkZWxldGUgcm93Wyd1bmRlZmluZWQnXTtcbiAgICBsZXQgdmFsdWU6IGFueTtcbiAgICBpZiAoY29sdW1uLnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUpIHtcbiAgICAgIGxldCBuZXdWYWx1ZTogYW55O1xuICAgICAgaWYgKHR5cGVvZiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10pID09PSBcIm9iamVjdFwiICYmIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlUZXh0XG4gICAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHRcbiAgICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgID8gcm93W3Jvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy50ZXh0XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdWYWx1ZSA9IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV3VmFsdWUpIHtcbiAgICAgICAgaWYgKGNvbHVtbi50aW1lT25seSkge1xuICAgICAgICAgIHZhbHVlID0gdGhpcy5zZXRUaW1lRm9ybWF0KG5ld1ZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgZm9ybWF0ID0gdGhpcy5zZXRGb3JtYXQoY29sdW1uKTtcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKG5ld1ZhbHVlPy50b1N0cmluZygpID09PSBcIkludmFsaWQgRGF0ZVwiID8gbnVsbCA6IG5ld1ZhbHVlLCBmb3JtYXQgPyBmb3JtYXQgOiBjb2x1bW4uc2hvd1RpbWUgPyBcIk1NL2RkL1lZWVksIGg6bW0gYVwiIDogXCJNTS9kZC9ZWVlZXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID1cbiAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlUZXh0XG4gICAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZm9ybWF0ID8gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQsIHRoaXMuc2V0Rm9ybWF0KGNvbHVtbikpIDpcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxuICAgICAgICAgIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgPyByb3dbcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICAgIDogcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgICAgID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgICAgIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gJiZcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dCA9PT0gbnVsbFxuICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgY29sdW1uPy5maWx0ZXI/LnR5cGUgPT09ICdjYWxlbmRhcicgJiYgY29sdW1uLnRpbWVPbmx5ICYmIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRElBTE9HID9cbiAgICAgICAgICAgICAgICAgICAgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ0FNJykgfHwgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQudG9TdHJpbmcoKS5pbmNsdWRlcygnUE0nKSkgP1xuICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0IDogdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQsICdoaDptbSBhJylcbiAgICAgICAgICAgICAgICAgICAgOiBjb2x1bW4uZm9ybWF0ID8gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQsIHRoaXMuc2V0Rm9ybWF0KGNvbHVtbikpIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICAgIDogY29sdW1uLmZvcm1hdCA/IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJvd1tjb2x1bW4uZmllbGRdLCB0aGlzLnNldEZvcm1hdChjb2x1bW4pKVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgICAgID8gY29sdW1uLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgOiBjb2x1bW4uaWNvbiA/IGNvbHVtbi5oZWFkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBzZXRGb3JtYXQoY29sdW1uKSB7XG4gICAgbGV0IGZvcm1hdCA9ICcnO1xuICAgIGlmIChjb2x1bW4/LmZvcm1hdCkge1xuICAgICAgY29sdW1uLmZvcm1hdCA9IGNvbHVtbi5mb3JtYXQ/LnR5cGUgPyBjb2x1bW4uZm9ybWF0LnR5cGUgOiBjb2x1bW4uZm9ybWF0O1xuICAgICAgc3dpdGNoIChjb2x1bW4uZm9ybWF0KSB7XG4gICAgICAgIGNhc2UgRUdyaWRGb3JtYXRUeXBlLlNNQUxMREFURToge1xuICAgICAgICAgIGZvcm1hdCA9ICdNTS9kZC95eSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuU0hPUlREQVRFOiB7XG4gICAgICAgICAgZm9ybWF0ID0gJ01NL2RkL3l5eXknO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgRUdyaWRGb3JtYXRUeXBlLk1FRElVTURBVEU6IHtcbiAgICAgICAgICBmb3JtYXQgPSAnTSBkLCB5eSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuTE9OR0RBVEU6IHtcbiAgICAgICAgICBmb3JtYXQgPSAnTU0vZGQvWVksIGg6bW0gYSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuUEVSSU9EOiB7XG4gICAgICAgICAgZm9ybWF0ID0gJ01NL3l5JztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgZm9ybWF0ID0gY29sdW1uLmZvcm1hdDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZm9ybWF0XG4gIH1cblxuICBzZXREcm9wZHdvblJlYWRPbmx5VmFsdWUocm93OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgZGVsZXRlIHJvd1sndW5kZWZpbmVkJ107XG4gICAgY29uc3QgdmFsdWUgPSByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF1cbiAgICAgID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdXG4gICAgICA6IGNvbHVtbi5kYXRhPy5maW5kKGRyb3Bkb3duVmFsID0+IGRyb3Bkb3duVmFsPy52YWx1ZSA9PSByb3dbY29sdW1uLmZpZWxkXSlcbiAgICAgICAgPyBjb2x1bW4uZGF0YT8uZmluZChkcm9wZG93blZhbCA9PiBkcm9wZG93blZhbD8udmFsdWUgPT0gcm93W2NvbHVtbi5maWVsZF0pPy5sYWJlbFxuICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIG9wZW4gRGVsZXRlIENvbmZpcm1hdGlvbiBkaWFsb2cgd2hlbiBjbGljayBvbiBkZWxldGUgaWNvbiBpbiBBY3Rpb24gY29sdW1uXG4gICAqL1xuICBoYW5kbGVBY3Rpb25DbGljayhldmVudDogRXZlbnQsIGNvbHVtbkFjdGlvbjogSUdyaWRDb2x1bW5BY3Rpb24sIHJvdzogYW55KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKGNvbHVtbkFjdGlvbi50b29sdGlwLnRvTG93ZXJDYXNlKCkgPT09ICdkZWxldGUnKSB7XG4gICAgICBpZiAoY29sdW1uQWN0aW9uLmNvbmZpcm1EaWFsb2cgPT09IGZhbHNlKSB7XG4gICAgICAgIGNvbHVtbkFjdGlvbi5vbkNsaWNrKHJvdyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICAgICAgbWVzc2FnZTogJ0FyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHJlY29yZD8nLFxuICAgICAgICAgIGhlYWRlcjogJ0RlbGV0ZSBDb25maXJtYXRpb24nLFxuICAgICAgICAgIGljb246ICdwaSBwaS1leGNsYW1hdGlvbi10cmlhbmdsZScsXG4gICAgICAgICAga2V5OiAnaGFuZGxlY29sdW1uQWN0aW9ucycsXG4gICAgICAgICAgYWNjZXB0OiAoKSA9PiB7XG4gICAgICAgICAgICBjb2x1bW5BY3Rpb24ub25DbGljayhyb3cpO1xuICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNsb3NlKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICByZWplY3Q6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jbG9zZSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb2x1bW5BY3Rpb24ub25DbGljayhyb3cpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnQgOiBMYXp5TG9hZEV2ZW50XG4gICAqIFRyaWdnZXJzIGV2ZXJ5dGltZSBhIHNlcnZlciBzaWRlIGZpbHRlciBpcyB0cmlnZ2VyXG4gICAqL1xuICBoYW5kbGVTZXJ2ZXJTaWRlRXZlbnRzKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmdyaWRmaWx0ZXIgPSBldmVudDtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29sdW1ucyAmJiB0aGlzLnNlbGVjdGVkQ29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKHg6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChldmVudC5maWx0ZXJzW3guZmllbGRdKSB7XG4gICAgICAgICAgICBldmVudC5maWx0ZXJzW3guZmllbGRdLnZhbHVlID0geC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTVVMVElTRUxFQ1QgPyB4LmZpbHRlclZhbHVlPy50b1N0cmluZygpIDogeC5maWx0ZXJWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxvYWRpbmcgPSB0aGlzLmF1dG9Mb2FkRGF0YTtcbiAgICAgIHRoaXMuc2VydmVyRmlsdGVycyA9IHtcbiAgICAgICAgZmlsdGVyczogdGhpcy5sb29rdXBGaWx0ZXJzXG4gICAgICAgICAgPyB0aGlzLmdyaWRTZXJ2aWNlLmdldEdyaWRGaWx0ZXJzKGV2ZW50LCB0aGlzLnNlbGVjdGVkQ29sdW1ucylcbiAgICAgICAgICA6IHRoaXMuZ3JpZFNlcnZpY2UucHJlcGFyZUJhc2ljRmlsdGVycyhldmVudCwgdGhpcy5zZWxlY3RlZENvbHVtbnMpLFxuICAgICAgICBzb3J0czogdGhpcy5ncmlkU2VydmljZS5nZXRHcmlkU29ydHMoZXZlbnQsIHRoaXMuc2VsZWN0ZWRDb2x1bW5zKSxcbiAgICAgICAgLi4uKHRoaXMucGFnaW5hdGlvbiAmJiB7XG4gICAgICAgICAgcGFnZTogdGhpcy5ncmlkU2VydmljZS5nZXRHcmlkUGFnaW5hdGlvbihldmVudCksXG4gICAgICAgICAgcGFnZVNpemU6IGV2ZW50LnJvd3MgfHwgMTAsXG4gICAgICAgIH0pLFxuICAgICAgfTtcblxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnNlcnZlckZpbHRlcnM/LmZpbHRlcnMgJiZcbiAgICAgICAgdGhpcy5zZXJ2ZXJGaWx0ZXJzPy5maWx0ZXJzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgKHRoaXMuYWxsb3dDYWNoaW5nIHx8IHRoaXMuc29mdENhY2hpbmcpXG4gICAgICApIHtcbiAgICAgICAgaWYgKCF0aGlzLnNvZnRDYWNoaW5nICYmIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ1NldEZpbHRlcnMtJyArIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdGhpcy5jdXJyZW50VXJsLCBKU09OLnN0cmluZ2lmeSh0aGlzLnNlcnZlckZpbHRlcnMpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCkge1xuICAgICAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW3RoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdGhpcy5jdXJyZW50VXJsXSA9IHRoaXMuc2VydmVyRmlsdGVycztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmxdID0ge307XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNlcnZlckZpbHRlclZhbHVlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5zZXJ2ZXJGaWx0ZXJzKSk7XG4gICAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycyA9ICh0aGlzLnNlcnZlckZpbHRlcnMuZmlsdGVycyB8fCBbXSkuY29uY2F0KFxuICAgICAgICB0aGlzLmdsb2JhbERhdGFcbiAgICAgICk7XG4gICAgICB0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5ncmlkU2VydmljZS5yb3dVcGRhdGUgPSBmYWxzZTtcbiAgICAgIHRoaXMub25TZXJ2ZXJTaWRlRXZlbnRDaGFuZ2UuZW1pdChzZXJ2ZXJGaWx0ZXJWYWx1ZXMpO1xuICAgIH0sIDk1MCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIFBhc3NlcyBhcHBsaWVkIHBhZ2luYXRpb24gdG8gcGFyZW50IG9uIHBhZ2UgY2hhbmdlXG4gICAqL1xuICBoYW5kbGVTZXJ2ZXJTaWRlUGFnaW5hdGlvbihldmVudDogSUdyaWRQYWdpbmF0aW9uRXZlbnQpIHtcbiAgICB0aGlzLmVkaXRpbmdSb3dLZXlzID0ge307XG4gICAgdGhpcy5vblBhZ2VDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMudXNlU2VydmVyU2lkZUV2ZW50cyAmJiB0aGlzLnBhZ2luYXRpb24gJiYgdGhpcy5kZWZhdWx0Um93cyAmJiB0aGlzLmVkaXRBbGxSb3dzICYmIHRoaXMucm93c0RhdGE/Lmxlbmd0aCA+IDAgJiYgdGhpcy5jb2x1bW5zPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuZWRpdEFsbFJvd3NBdE9uY2UoKTtcbiAgICAgIH1cbiAgICB9LCA4MDApO1xuICB9XG5cbiAgc2VsZWN0ZWRSb3cocm93OiBhbnkpIHtcbiAgICB0aGlzLm9uUm93Q2hlY2tCb3guZW1pdChyb3cpO1xuICB9XG5cbiAgLy8gc2V0IHRpbWUgZm9ybWF0XG4gIHNldFRpbWVGb3JtYXQoZGF0ZTogYW55KSB7XG4gICAgbGV0IHZhbHVlOiBhbnkgPSAnJztcbiAgICBpZiAoZGF0ZT8udG9TdHJpbmcoKS5pbmNsdWRlcygnQU0nKSB8fCBkYXRlPy50b1N0cmluZygpLmluY2x1ZGVzKCdQTScpKSB7XG4gICAgICB2YWx1ZSA9IHNldFRpbWVJbkRhdGUoZGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZSwgJ2hoOm1tIGEnKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLy9vcGVuIGh5cGVybGluayBpbiBlZGl0IGNhc2VcbiAgb3BlbkxpbmsodXJsOiBhbnkpIHtcbiAgICBpZiAodXJsKSB7XG4gICAgICBjb25zdCBsaW5rOiBhbnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICBsaW5rLmhyZWYgPSB1cmw7XG4gICAgICBsaW5rLnRhcmdldCA9ICdfYmxhbmsnO1xuICAgICAgbGluay5jbGljaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcm93XG4gICAqIFNldHMgdmFsdWVzIHRvIGVkaXRhYmxlIHJvd1xuICAgKiBSb3cncyBkYXRhIGlzIHByZXNldmVkIHRvIHByZXZlbnQgbXV0YXRpb25cbiAgICogUm93IGRhdGFLZXkgaXMgcHJlc2VydmVkIHRvIGtlZXAgdGhlIHJvdyB1bmlxdWUgYW5kIGluIGVkaXRhYmxlIHN0YXRlIGFzIGxvbmcgYXMgbm90IHNhdmVkXG4gICAqL1xuXG4gIHJlZnJlc2hHcmlkVGVybWluYXRvcigpIHtcbiAgICBpZiAodGhpcy5zZXRHcmlkUmVmcmVzaFRpbWUpIHtcbiAgICAgIHRoaXMucmVsb2FkUGFnZT8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBvblJvd0VkaXRJbml0KHJvdzogYW55KSB7XG4gICAgdGhpcy5yZWZyZXNoR3JpZFRlcm1pbmF0b3IoKVxuICAgIGxldCBzZWxlY3RlZFJvdyA9IHsgLi4ucm93IH07XG4gICAgT2JqZWN0LmVudHJpZXMoc2VsZWN0ZWRSb3cpLmZvckVhY2goKFtrZXksIHZhbHVlXTogYW55KSA9PiB7XG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuc2V0RHJvcGRvd25GaWx0ZXIpIHtcbiAgICAgICAgICB0aGlzLnNldERyb3Bkb3duRmlsdGVyVmFsdWUoY29sLCByb3csIGtleSk7XG4gICAgICAgICAgdGhpcy5zZXREcm9wZG93bkZpbHRlciA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNldCB0aGUgYXV0b0NvbXBsZXRlIFZhbHVlIGluIGVkaXQgbW9kZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEUgJiZcbiAgICAgICAgICBjb2wuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGtleT8udG9Mb3dlckNhc2UoKSAmJlxuICAgICAgICAgIHZhbHVlICYmXG4gICAgICAgICAgdmFsdWUubGVuZ3RoID4gMFxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoY29sLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sLmZpZWxkXS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgcm93W2NvbC5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfdGVtcCddID0gcm93W2NvbC5kaXNwbGF5RmllbGRdO1xuICAgICAgICAgICAgICByb3dbY29sLmRpc3BsYXlGaWVsZF0gPSByb3dbY29sLmZpZWxkXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgbmV3VmFsdWUgPSB2YWx1ZS5tYXAoKHg6IGFueSkgPT4geFtjb2wuZGlzcGxheUZpZWxkXSk7XG4gICAgICAgICAgaWYgKG5ld1ZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnOycpKSB7XG4gICAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IG5ld1ZhbHVlXG4gICAgICAgICAgICAgID8udG9TdHJpbmcoKVxuICAgICAgICAgICAgICA/LnJlcGxhY2VBbGwoJzsnLCAnLCcpXG4gICAgICAgICAgICAgID8uc3BsaXQoJywnKVxuICAgICAgICAgICAgICA/Lm1hcCgoeDogYW55KSA9PiAoeyBbY29sLmRpc3BsYXlGaWVsZCA/IGNvbC5kaXNwbGF5RmllbGQgOiBjb2wuZmllbGRdOiB4LCBbY29sLmZpZWxkICsgJ190ZW1wJ106IHZhbHVlWzBdW2NvbC5maWVsZF0gfSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOKSB7XG4gICAgICAgICAgbGV0IG9wdGlvbiA9IGNvbD8uZGF0YT8uZmluZChcbiAgICAgICAgICAgICh4OiBhbnkpID0+IHgubGFiZWwgPT09IHJvd1tjb2wuZmllbGRdPy50b1N0cmluZygpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IG9wdGlvbi52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTVVMVElTRUxFQ1QpIHtcbiAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IHRoaXMuc2V0TXVsdGlTZWxlY3RWYWx1ZShjb2wsIHJvdylcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBrZXk/LnRvTG93ZXJDYXNlKCkgJiZcbiAgICAgICAgICBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEVcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKHJvd1tjb2wuZmllbGRdICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAocm93W2tleSArICdfb2JqJ10gJiYgT2JqZWN0LmtleXMocm93W2tleSArICdfb2JqJ10pPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHJvd1trZXkgKyAnX29iaiddLnRleHQgPSBuZXcgRGF0ZSh2YWx1ZSBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm93W2tleV0gPSBuZXcgRGF0ZSh2YWx1ZSBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGNoZWNrIHRoZSBNaW51dGVzIHBhdHRlcm5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoY29sLnNob3dUaW1lIHx8IGNvbC50aW1lT25seSkgJiZcbiAgICAgICAgICAgIGNvbC5taW51dGVzSW50ZXJ2YWwgJiZcbiAgICAgICAgICAgIHJvd1trZXldXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByb3dba2V5XSA9IG5ldyBEYXRlKHNldE1pbnV0ZXNJbnRlcnZhbChyb3dba2V5XSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgJiZcbiAgICAgICAgICBjb2wuZmlsdGVyPy50eXBlID09PSAnY2FsZW5kYXInICYmXG4gICAgICAgICAgY29sLmZpZWxkLnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcm93W2tleV0gPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSyAmJlxuICAgICAgICAgIGNvbC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0ga2V5Py50b0xvd2VyQ2FzZSgpICYmXG4gICAgICAgICAgKGNvbC5hbGxvd1NhdmUgPT09IHRydWUgfHwgY29sLmFsbG93U2F2ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoY29sLmVkaXRMaW5rID09PSB0cnVlKSB7XG4gICAgICAgICAgICByb3dba2V5XSA9IHJvd1tjb2wuZmllbGQgKyAnX29iaiddPy5oeXBlcmxpbms7XG4gICAgICAgICAgfSBlbHNlIGlmIChjb2wuZWRpdExpbmsgPT09IGZhbHNlIHx8IGNvbC5lZGl0TGluayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByb3dba2V5XSA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmVkaXRSb3dzUmVjb3Jkc1tyb3dbdGhpcy5kYXRhS2V5XV0gPSB7IC4uLnJvdyB9O1xuICAgIHRoaXMuZWRpdGluZ1Jvd0tleXNbcm93W3RoaXMuZGF0YUtleV1dID0gdHJ1ZTtcbiAgICB0aGlzLmNoZWNrQWN0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLmRyb3Bkb3duSW5wdXQgPSB0cnVlO1xuICAgIHRoaXMucm93Q2xpY2tEYXRhID0gcm93O1xuICAgIHRoaXMuaW5FZGl0TW9kZSA9IHRydWU7XG4gICAgdGhpcy5yb3dVcGRhdGVDaGFuZ2UgPSBmYWxzZTtcbiAgICB0aGlzLmNhbmNlbEFsbFJlY29yZHMgPSBmYWxzZTtcbiAgICB0aGlzLnNhdmVBbGxSZWNvcmQgPSBmYWxzZTtcbiAgICB0aGlzLnNvcnREaXNhYmxlZCA9IHRydWU7XG4gICAgdGhpcy5ncmlkU2VydmljZS5yb3dVcGRhdGUgPSBmYWxzZTtcbiAgICB0aGlzLm9uR3JpZFJvd0VkaXQuZW1pdChyb3cpO1xuICB9XG5cbiAgdHlwZU9mKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIHNldCBkcm9wZG93biBmaWx0ZXIgdmFsdWVcbiAgICovXG4gIHNldERyb3Bkb3duRmlsdGVyVmFsdWUoY29sOiBhbnksIHJvdzogYW55LCBrZXk6IHN0cmluZykge1xuICAgIGlmIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOICYmIGNvbC5kcm9wRG93blByb3ApIHtcbiAgICAgIGlmIChPYmplY3QudmFsdWVzKGNvbCkuc29tZSgodmFsdWUpID0+IHZhbHVlID09IGtleSkpIHtcbiAgICAgICAgbGV0IG9iaiA9IGNvbC5kcm9wRG93blByb3A7XG4gICAgICAgIGxldCBuZXdGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICAgICAgaWYgKG9iai5maWx0ZXJzICYmIG9iai5maWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBvYmouZmlsdGVycy5mb3JFYWNoKChmaWx0ZXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgbGV0IG5ld0ZpbHRlciA9IHsgLi4uZmlsdGVyIH07XG4gICAgICAgICAgICBsZXQgZmlsdGVyS2V5ID0gT2JqZWN0LmtleXMocm93KS5maW5kKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgbGV0IG1hdGNoS2V5OiBzdHJpbmcgPSAnJztcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZT8uaW5jbHVkZXMoJ3snKSAmJlxuICAgICAgICAgICAgICAgIGtleS50b0xvd2VyQ2FzZSgpID09PVxuICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZVxuICAgICAgICAgICAgICAgICAgPy50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICA/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCd7JywgJycpXG4gICAgICAgICAgICAgICAgICAucmVwbGFjZSgnfScsICcnKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBtYXRjaEtleSA9IGtleTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hLZXk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJLZXkpIHtcbiAgICAgICAgICAgICAgbmV3RmlsdGVyLnZhbHVlID0gcm93W2ZpbHRlcktleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXdGaWx0ZXJzLnB1c2gobmV3RmlsdGVyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc2V0RHJvcGRvd25EYXRhKFxuICAgICAgICAgIGNvbCxcbiAgICAgICAgICBvYmoudW5pcXVlS2V5LFxuICAgICAgICAgIG9iai52YWx1ZVByb3AsXG4gICAgICAgICAgb2JqLmxhYmVsUHJvcCxcbiAgICAgICAgICBuZXdGaWx0ZXJzLFxuICAgICAgICAgIHJvd1xuICAgICAgICApO1xuXG4gICAgICAgIGxldCBvcHRpb24gPSBjb2wuZGF0YS5maW5kKFxuICAgICAgICAgICh4OiBhbnkpID0+IHgubGFiZWwgPT09IHJvd1tjb2wuZmllbGRdPy50b1N0cmluZygpXG4gICAgICAgICk7XG4gICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IG9wdGlvbi52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcm93XG4gICAqIFBhc3NlcyB0aGUgZWRpdGVkIG9yIG5ld2x5IGNyZWF0ZWQgZGF0YSB0byBwYXJlbnRcbiAgICogSW4gY2FzZSBvZiBuZXdseSBjcmVhdGVkIGRhdGEsIGRhdGFLZXkgYW5kIGlzTmV3IHByb3AgaXMgcmVtb3ZlZFxuICAgKi9cbiAgb25Sb3dFZGl0U2F2ZShzZWxlY3RlZFJvdzogYW55KSB7XG4gICAgbGV0IGF1dG9tQ29tcGxldGVUZW1wRGF0YSA9IFtdO1xuICAgIGxldCBsb29rdXBJbmZvOiBhbnkgPSB7fTtcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xuICAgICAgZGVsZXRlIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZCArICctZGF0YSddO1xuICAgICAgZGVsZXRlIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZCArICdfc2Vjb25kVHlwZSddO1xuICAgICAgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCAmJlxuICAgICAgICAoY29sdW1uLmFsbG93U2F2ZSA9PT0gdHJ1ZSB8fCBjb2x1bW4uYWxsb3dTYXZlID09PSB1bmRlZmluZWQpXG4gICAgICApIHtcbiAgICAgICAgaWYgKHR5cGVvZiAoc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0/LnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy50ZXh0KSB7XG4gICAgICAgICAgbG9va3VwSW5mb1tjb2x1bW4uZmllbGRdID0gc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS50ZXh0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2x1bW4uZm9ybWF0dGVyKSB7XG4gICAgICAgIGxldCB2YWx1ZTogYW55ID0gc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXTtcbiAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgPT09ICdjaGFyJykge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWUgPT09IHRydWUgPyAnWScgOiAnTic7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmZvcm1hdHRlciA9PT0gJ251bWVyaWMnKSB7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZSA9PT0gdHJ1ZSA/ICcxJyA6ICcwJztcbiAgICAgICAgfVxuICAgICAgICBzZWxlY3RlZFJvdyA9IHsgLi4uc2VsZWN0ZWRSb3csIFtjb2x1bW4uZmllbGRdOiB2YWx1ZSB9O1xuICAgICAgfVxuXG4gICAgICAvL2NvbnZlcnQgZHJvcERvd24gb3B0aW9uTGFiZWwgaW50byBvcHRpb25WYWx1ZVxuICAgICAgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOICYmIGNvbHVtbi5kcm9wRG93blByb3AgJiYgY29sdW1uLmRhdGE/Lmxlbmd0aCA+IDBcbiAgICAgICkge1xuICAgICAgICBjb25zdCBvcHRpb25MYWJlbCA9IGNvbHVtbi5kYXRhLmZpbmQoKHJlY29yZCkgPT4gcmVjb3JkWydsYWJlbCddPy50b0xvd2VyQ2FzZSgpID09PSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdPy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgaWYgKG9wdGlvbkxhYmVsPy52YWx1ZSkge1xuICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBvcHRpb25MYWJlbC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvL2NvbnZlcnQgZGF0ZSBpbnRvIHRpbWUgZm9ybWF0XG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURVxuICAgICAgKSB7XG4gICAgICAgIGlmIChjb2x1bW4udGltZU9ubHkgJiYgY29sdW1uLnNhdmVBc1N0cmluZykge1xuICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdLCAnaGg6bW0gYScpO1xuICAgICAgICB9IGVsc2UgaWYgKCFjb2x1bW4udGltZU9ubHkgJiYgKGNvbHVtbi5zaG93VGltZSB8fCBjb2x1bW4uZm9ybWF0ID09PSBFR3JpZEZvcm1hdFR5cGUuTE9OR0RBVEUpKSB7XG4gICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0sICd5eXl5LU1NLWRkIEhIOm1tOnNzJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSAmJiAhY29sdW1uLnRpbWVPbmx5KSB7XG4gICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0udG9Mb2NhbGVEYXRlU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGlmIGFsbG93Q2FsY3VsYXRlPXRydWUsIGRpdmlkZSB0aGUgcGVyY2VudCBieSAxMDBcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk5VTUVSSUMpIHtcbiAgICAgICAgaWYgKHRoaXMubnVtZXJpY1ZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5udW1lcmljVmFsdWUgPSB7fVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRpZ2l0c0luZm8gPSBjb2x1bW4/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvO1xuICAgICAgICBpZiAoY29sdW1uLmZvcm1hdD8udHlwZSA9PT0gJ3BlcmNlbnQnKSB7XG4gICAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uYWxsb3dDYWxjdWxhdGUpIHtcbiAgICAgICAgICAgIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBwYXJzZUZsb2F0KChzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdIC8gMTAwKT8udG9TdHJpbmcoKSkudG9GaXhlZChkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdIC8gMTAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvL2NvbnZlcnQgbXVsdGlzZWxlY3QgYXJyYXkgaW50byBzdHJpbmdcbiAgICAgIGlmIChcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5NVUxUSVNFTEVDVCAmJiBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdXG4gICAgICApIHtcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNhdmluZyBBdXRvQ29tcGxldGUgRGF0YVxuICAgICAgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkFVVE9DT01QTEVURSAmJlxuICAgICAgICBjb2x1bW4uZGlzcGxheUZpZWxkICYmXG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0/Lmxlbmd0aCA+IDBcbiAgICAgICkge1xuICAgICAgICBhdXRvbUNvbXBsZXRlVGVtcERhdGEgPSBbLi4uc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXV07XG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdPy5tYXAoKHJvdykgPT4gY29sdW1uPy5vcHRpb25WYWx1ZSAmJiByb3dbY29sdW1uLm9wdGlvblZhbHVlPy50b0xvd2VyQ2FzZSgpXSA/XG4gICAgICAgICAgcm93W2NvbHVtbi5vcHRpb25WYWx1ZT8udG9Mb3dlckNhc2UoKV0gOiByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXSk/LnRvU3RyaW5nKCk/LnJlcGxhY2VBbGwoJywnLCAnOycpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgbGV0IHJvdzogYW55ID0geyAuLi5zZWxlY3RlZFJvdyB9O1xuICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMocm93KTtcbiAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaWYgKGtleS5pbmNsdWRlcygnX29iaicpKSB7XG4gICAgICAgIGxldCBvYmo6IGFueSA9IHJvd1trZXldXG4gICAgICAgIGlmICh0aGlzLmNoZWNrQWN0aW9uID09PSBmYWxzZSAmJiBvYmo/LnR5cGUgJiYgKG9iai50eXBlID09PSAnbGluaycgfHwgb2JqLnR5cGUgPT09ICdpZnJhbWUnIHx8IG9iai50eXBlID09PSAnZGlhbG9nJykpIHtcbiAgICAgICAgICByb3cgPSB7IC4uLnJvdywgW2tleS5zcGxpdCgnXycpWzBdXTogcm93W2tleV0uZGlzcGxheVRleHQgfTtcbiAgICAgICAgICB0aGlzLmNoZWNrQWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgb2JqICYmXG4gICAgICAgICAgKG9iai50eXBlID09PSAnbGluaycgfHxcbiAgICAgICAgICAgIG9iai50eXBlID09PSAnaWZyYW1lJyB8fFxuICAgICAgICAgICAgb2JqLnR5cGUgPT09ICdkaWFsb2cnKVxuICAgICAgICApIHtcbiAgICAgICAgICBkZWxldGUgcm93W2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBqdXN0IGVtaXQgdGhvc2UgZmllbGRzIHdobyBleGlzdCBpbiB0aGUgdGFibGVcbiAgICAgKi9cbiAgICByb3cgPSB0aGlzLmdyaWRTZXJ2aWNlLnNldFJvd1ZhbHVlKHJvdyk7XG4gICAgbGV0IG9iajogYW55ID0ge307XG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIChjb2x1bW4uYWxsb3dTYXZlID09PSB0cnVlIHx8IGNvbHVtbi5hbGxvd1NhdmUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnNhdmVBbGxEYXRhKVxuICAgICAgKSB7XG4gICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF07XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRyAmJlxuICAgICAgICAgIGNvbHVtbi5maWx0ZXI/LnR5cGUgPT09ICdjYWxlbmRhcidcbiAgICAgICAgKSB7XG4gICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShcbiAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdLFxuICAgICAgICAgICAgJ3l5eXktTU0tZGRUMDA6MDA6MDAuMDAwWidcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9TZXQgRGVjaW1hbCBGcmFjdGlvbiBWYWx1ZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sdW1uLmZvcm1hdCAmJlxuICAgICAgICAgIGNvbHVtbi5mb3JtYXQudHlwZSA9PT0gRUZvcm1hdFR5cGUuREVDSU1BTCAmJlxuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdICYmXG4gICAgICAgICAgIXJvd1tjb2x1bW4uZmllbGRdLnRvU3RyaW5nKCkuaW5jbHVkZXMoJy4nKVxuICAgICAgICApIHtcbiAgICAgICAgICBsZXQgZGlnaXRzSW5mbyA9ICcuMDAnO1xuICAgICAgICAgIGxldCB6ZXJvID0gJzAnO1xuICAgICAgICAgIGNvbnN0IGZvcm1hdFBhcmFtcyA9IGNvbHVtbi5mb3JtYXQ/LmZvcm1hdFBhcmFtcztcbiAgICAgICAgICBjb25zdCBmcmFjRGlnaXRzID0gY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbztcbiAgICAgICAgICBpZiAoZnJhY0RpZ2l0cykge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBmcmFjRGlnaXRzOyBpKyspIHtcbiAgICAgICAgICAgICAgemVybyA9IHplcm8gKyAnMCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkaWdpdHNJbmZvID0gJy4nICsgemVybztcbiAgICAgICAgICB9XG4gICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXSArIGRpZ2l0c0luZm87XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHJvdy5pc05ldyAmJlxuICAgICAgICAoY29sdW1uLmFsbG93U2F2ZSA9PT0gZmFsc2UgfHwgY29sdW1uLmVkaXRhYmxlID09PSBmYWxzZSB8fCAhdGhpcy5zYXZlQWxsRGF0YSlcbiAgICAgICkge1xuICAgICAgICBkZWxldGUgcm93W2NvbHVtbi5maWVsZF07XG4gICAgICB9XG4gICAgfSk7XG4gICAgZGVsZXRlIHNlbGVjdGVkUm93Wyd1bmRlZmluZWQnXTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmNoZWNrVmFsaWRpdHkodGhpcy5jb2x1bW5zLCByb3cpO1xuICAgIGNvbnN0IGlzVmFsaWQgPSB0aGlzLmdyaWRWYWxpZGF0aW9uKHRoaXMuY29sdW1ucywgcm93KTtcbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgLy8gc2V0IHRoZSBncmlkIHVwZGF0ZWQvaW5zZXJ0ZWQgZGF0YVxuICAgICAgdGhpcy5yb3dBY3Rpb25FdmVudHMoc2VsZWN0ZWRSb3cpO1xuICAgICAgdGhpcy5icm93c2VyQ2xvc2VFdmVudChmYWxzZSk7XG4gICAgICBpZiAocm93LmlzTmV3IHx8IHJvdy5pc25ldykge1xuICAgICAgICBsZXQgeyBpc05ldywgaXNuZXcsIC4uLm5ld1Jvd09iaiB9ID0gcm93O1xuICAgICAgICBuZXdSb3dPYmogPSB0aGlzLmdyaWRTZXJ2aWNlLnJlbW92ZUV4dHJhTmV3Um93T2JqKG5ld1Jvd09iaiwgdGhpcy5jb2x1bW5zKTtcbiAgICAgICAgaWYgKCF0aGlzLmFkZERhdGFLZXlWYWx1ZSkge1xuICAgICAgICAgIGRlbGV0ZSBuZXdSb3dPYmpbdGhpcy5kYXRhS2V5XTtcbiAgICAgICAgfVxuICAgICAgICBuZXdSb3dPYmogPSB0aGlzLnNldFJvd3NEYXRhKG5ld1Jvd09iaik7XG4gICAgICAgIGlmICh0aGlzLnNhdmVBbGxSZWNvcmQpIHtcbiAgICAgICAgICB0aGlzLnNhdmVSZWNvcmRBcnJheS5wdXNoKG5ld1Jvd09iaik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vblJvd0FkZC5lbWl0KG5ld1Jvd09iaik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLnNhdmVBbGxSZWNvcmQpIHtcbiAgICAgICAgICB0aGlzLnNhdmVSZWNvcmRBcnJheS5wdXNoKG9iaik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMuY2hlY2tsaXN0Lmxlbmd0aCA+IDApXG4gICAgICAgICAgICB0aGlzLm9uUm93VXBkYXRlLmVtaXQodGhpcy5zZXRSb3dzRGF0YSh0aGlzLmNoZWNrbGlzdCkpO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vblJvd1VwZGF0ZS5lbWl0KG9iaik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmVkaXRpbmdSb3dLZXlzW3Jvd1t0aGlzLmRhdGFLZXldXSA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgICBpZiAoY29sdW1uLmVycm9yTWVzc2FnZSkge1xuICAgICAgICAgIGlmIChzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSArICdfb2JqJ10pIHtcbiAgICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpICsgJ19vYmonXSA9IHsgLi4uc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSwgZXJyb3JNZXNzYWdlOiBjb2x1bW4uZXJyb3JNZXNzYWdlIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpICsgJ19vYmonXSA9IHsgZXJyb3JNZXNzYWdlOiBjb2x1bW4uZXJyb3JNZXNzYWdlIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgdGhpcy5lZGl0aW5nUm93S2V5c1tyb3dbdGhpcy5kYXRhS2V5XV0gPSB0cnVlO1xuICAgIH1cbiAgICAvLyBpZiBhbGwgcm93cyBpbiByZWFkIG9ubHkgbW9kZSB0aGVuIHNob3cgZWRpdEFsbFJvd3MgYnV0dG9uLiAgICBcbiAgICBpZiAoT2JqZWN0LnZhbHVlcyh0aGlzLmVkaXRpbmdSb3dLZXlzKS5ldmVyeSgodmFsdWUpID0+ICF2YWx1ZSkpIHtcbiAgICAgIHRoaXMuaW5FZGl0TW9kZSA9IGZhbHNlO1xuICAgICAgdGhpcy5zb3J0RGlzYWJsZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcbiAgICAgIC8vIGNvbnZlcnQgZGF0ZSBpbnRvIHRpbWVcbiAgICAgIGlmIChcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSAmJlxuICAgICAgICAoc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXT8udG9TdHJpbmcoKT8uaW5jbHVkZXMoJ1BNJykgfHxcbiAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdPy50b1N0cmluZygpPy5pbmNsdWRlcygnQU0nKSlcbiAgICAgICkge1xuICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gc2V0VGltZUluRGF0ZShyb3dbY29sdW1uLmZpZWxkXSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk5VTUVSSUMpIHtcbiAgICAgICAgY29uc3QgZGlnaXRzSW5mbyA9IGNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm87XG4gICAgICAgIGlmIChjb2x1bW4uZm9ybWF0Py50eXBlID09PSAncGVyY2VudCcpIHtcbiAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5hbGxvd0NhbGN1bGF0ZSkge1xuICAgICAgICAgICAgaWYgKGRpZ2l0c0luZm8pIHtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHBhcnNlRmxvYXQoKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gKiAxMDApPy50b1N0cmluZygpKS50b0ZpeGVkKGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gKiAxMDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkFVVE9DT01QTEVURSAmJlxuICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdXG4gICAgICApIHtcbiAgICAgICAgLy8gc2V0IGF1dG9jb21wZWxldCBhcnJheSBkYXRhIGFmdGVyIHNhdmUgcm93XG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBhdXRvbUNvbXBsZXRlVGVtcERhdGE7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCAmJlxuICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdICYmIChjb2x1bW4uYWxsb3dTYXZlID09PSB0cnVlIHx8IGNvbHVtbi5hbGxvd1NhdmUgPT09IHVuZGVmaW5lZClcbiAgICAgICkge1xuICAgICAgICAvLyBzZXQgTE9PS1VQX0lOUFVUIGRhdGEgYWZ0ZXIgc2F2ZSByb3dcbiAgICAgICAgaWYgKGxvb2t1cEluZm9bY29sdW1uLmZpZWxkXSkge1xuICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBsb29rdXBJbmZvW2NvbHVtbi5maWVsZF07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04gJiZcbiAgICAgICAgY29sdW1uLm9wdGlvbkxhYmVsICYmXG4gICAgICAgIGNvbHVtbi5vcHRpb25WYWx1ZVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc2V0RHJvcGRvd25WYWx1ZShjb2x1bW4sIHNlbGVjdGVkUm93KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmFkZE5ld1Jvd0NoZWNrID0gZmFsc2U7XG4gICAgaWYgKE9iamVjdC52YWx1ZXModGhpcy5lZGl0aW5nUm93S2V5cykuZXZlcnkoKHZhbHVlKSA9PiAhdmFsdWUpICYmIHRoaXMuc2V0R3JpZFJlZnJlc2hUaW1lKSB7XG4gICAgICB0aGlzLnJlZnJlc2hHcmlkKCk7XG4gICAgfVxuICAgIHRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkID0gZmFsc2U7XG4gICAgdGhpcy5ncmlkU2VydmljZS5yb3dVcGRhdGUgPSBmYWxzZTtcbiAgfVxuXG4gIC8vIGNoZWNrIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSBmaWVsZFxuICBncmlkVmFsaWRhdGlvbihjb2x1bW5zOiBhbnksIHJvdzogYW55LCBzaW5nbGVDZWxsOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuIHtcbiAgICBpZiAoc2luZ2xlQ2VsbCA9PSB0cnVlKSB7XG4gICAgICBjb2x1bW5zID0gW3sgLi4uY29sdW1ucyB9XVxuICAgIH1cbiAgICBpZiAoIXRoaXMuZ3JpZFNlcnZpY2UuY2hlY2tWYWxpZGl0eShjb2x1bW5zLCByb3csIHNpbmdsZUNlbGwpKSB7XG4gICAgICBsZXQgZXJyb3JNZXNzYWdlRGV0YWlsczogc3RyaW5nID0gJyc7XG4gICAgICBjb2x1bW5zPy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi5lcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICBlcnJvck1lc3NhZ2VEZXRhaWxzID0gZXJyb3JNZXNzYWdlRGV0YWlscyA/IGVycm9yTWVzc2FnZURldGFpbHMgKyAnICwgJyArIGNvbHVtbi5lcnJvck1lc3NhZ2UgOiBjb2x1bW4uZXJyb3JNZXNzYWdlO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgbGV0IGlzUmVxdWlyZWQgPSBjb2x1bW5zLnNvbWUoXG4gICAgICAgIChjb2x1bW46IGFueSkgPT4gY29sdW1uLmVycm9yTWVzc2FnZSAmJiAhcm93W2NvbHVtbi5maWVsZF1cbiAgICAgICk7XG4gICAgICBpZiAoaXNSZXF1aXJlZCAmJiAhc2luZ2xlQ2VsbCkge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcbiAgICAgICAgICBlcnJvck1lc3NhZ2VEZXRhaWxzLFxuICAgICAgICAgIDUwMDAsXG4gICAgICAgICAgJ1JFUVVJUkVEIEZJRUxEJ1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoZXJyb3JNZXNzYWdlRGV0YWlscywgNTAwMCwgJ0lOVkFMSUQgRklFTEQnKTtcbiAgICAgICAgaWYgKHNpbmdsZUNlbGwpIHtcbiAgICAgICAgICB0aGlzLnNldEVycm9yQ2VsbChjb2x1bW5zWzBdLCByb3cpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHNpbmdsZUNlbGwpIHtcbiAgICAgICAgdGhpcy5zZXRFcnJvckNlbGwoY29sdW1uc1swXSwgcm93KVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHNldEVycm9yQ2VsbChjb2x1bW4sIHJvdykge1xuICAgIGlmIChjb2x1bW4uZXJyb3JNZXNzYWdlKSB7XG4gICAgICBjb25zb2xlLmxvZygnZXJyb3IgbWVzc2FnZTogJywgY29sdW1uLmVycm9yTWVzc2FnZSlcbiAgICAgIGlmIChyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkgKyAnX29iaiddKSB7XG4gICAgICAgIHJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSArICdfb2JqJ10gPSB7IC4uLnJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLCBlcnJvck1lc3NhZ2U6IGNvbHVtbi5lcnJvck1lc3NhZ2UgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSArICdfb2JqJ10gPSB7IGVycm9yTWVzc2FnZTogY29sdW1uLmVycm9yTWVzc2FnZSB9O1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmIChyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkgKyAnX29iaiddKSB7XG4gICAgICAgIGRlbGV0ZSByb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkgKyAnX29iaiddLmVycm9yTWVzc2FnZVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHJvdyA6IGFueVxuICAgKiBAcGFyYW0gaW5kZXggOiBudW1iZXJcbiAgICogQ2xlYXJzIG91dCB0aGUgZWRpdCByb3cgYW5kIHJlcGxhY2Ugd2l0aCByZWFkYWJsZSBvbmVcbiAgICovXG4gIG9uUm93RWRpdENhbmNlbChyb3c6IGFueSwgaW5kZXg6IG51bWJlcikge1xuICAgIGxldCByb3dJbkVkaXRNb2RlOiBib29sZWFuID0gT2JqZWN0LnZhbHVlcyh0aGlzLmVkaXRpbmdSb3dLZXlzKS5ldmVyeSgodmFsdWUpID0+ICF2YWx1ZSk7XG4gICAgaWYgKHJvdz8uaXNOZXcpIHtcbiAgICAgIHRoaXMucm93c0RhdGEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yb3dzRGF0YVtpbmRleF0gPSB0aGlzLmVkaXRSb3dzUmVjb3Jkc1tyb3dbdGhpcy5kYXRhS2V5XV07XG4gICAgICBkZWxldGUgdGhpcy5lZGl0Um93c1JlY29yZHNbcm93W3RoaXMuZGF0YUtleV1dO1xuICAgIH1cbiAgICBkZWxldGUgdGhpcy5lZGl0aW5nUm93S2V5c1tyb3dbdGhpcy5kYXRhS2V5XV07XG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04pIHtcbiAgICAgICAgdGhpcy5zZXREcm9wZG93blZhbHVlKGNvbHVtbiwgcm93KTtcbiAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQgJiYgY29sdW1uLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICB0aGlzLnJvd3NEYXRhW2luZGV4XVtjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF0/LnZhbHVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuaW5FZGl0TW9kZSA9IGZhbHNlO1xuICAgIGlmIChyb3dJbkVkaXRNb2RlKSB7XG4gICAgICB0aGlzLnNvcnREaXNhYmxlZCA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmFkZE5ld1Jvd0NoZWNrID0gZmFsc2U7XG4gICAgdGhpcy5yb3dVcGRhdGVDaGFuZ2UgPSBmYWxzZTtcbiAgICB0aGlzLmlubGluZVJvd0NhbmNlbC5lbWl0KHJvdyk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAocm93SW5FZGl0TW9kZSAmJiB0aGlzLnNldEdyaWRSZWZyZXNoVGltZSkge1xuICAgICAgICB0aGlzLnJlZnJlc2hHcmlkKCk7XG4gICAgICB9XG4gICAgfSwgNTApO1xuICB9XG5cbiAgLyoqXG4gICAqIFxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0gcm93XG4gICAqIFNlbmRzIHRoZSByb3cgcGF5bG9hZCB0byBwYXJlbnQgZm9yIGRlbGV0aW9uc1xuICAgKi9cblxuICAvKipcbiAgKnNldCB0aGUgZ3JpZERhdGEgb24gcm93IGFjdGlvbnMgZXZlbnRzXG4gICovXG4gIHJvd0FjdGlvbkV2ZW50cyhyb3dJbmZvLCBkZWxldGVSb3c6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGxldCBhY3Rpb246IHN0cmluZyA9ICcnO1xuICAgIGxldCBncmlkUm93c0RhdGE6IGFueVtdID0gWy4uLnRoaXMucm93c0RhdGFdO1xuICAgIGNvbnN0IGluZGV4ID0gZ3JpZFJvd3NEYXRhLmZpbmRJbmRleCgocm93RGF0YSkgPT4gcm93SW5mb1t0aGlzLmRhdGFLZXldID09PSByb3dEYXRhW3RoaXMuZGF0YUtleV0pO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICBpZiAoZGVsZXRlUm93KSB7XG4gICAgICAgIGdyaWRSb3dzRGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB0aGlzLnJvd3NEYXRhID0gWy4uLmdyaWRSb3dzRGF0YV07XG4gICAgICAgIGFjdGlvbiA9ICdkZWxldGUnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuYWRkTmV3Um93Q2hlY2spIHtcbiAgICAgICAgICBhY3Rpb24gPSAnaW5zZXJ0JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhY3Rpb24gPSAndXBkYXRlJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vbkdyaWRSb3dBY3Rpb25zLm9ic2VydmVycy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICByb3dJbmZvWydyb3dBY3Rpb24nXSA9IGFjdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBncmlkUm93c0RhdGFbaW5kZXhdID0gcm93SW5mbztcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5nZW5lcmF0ZVJvd3NEYXRhQ29weSA9IGZhbHNlO1xuICAgIHRoaXMucm93VXBkYXRlQ2hhbmdlID0gZmFsc2U7XG4gICAgdGhpcy5yb3dzQ2hhbmdlLmVtaXQodGhpcy5yb3dzRGF0YSk7XG4gICAgdGhpcy5vbkdyaWRSb3dBY3Rpb25zLmVtaXQoZ3JpZFJvd3NEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVuIERlbGV0ZSBjb25maXJtYXRpb24gZGlhbG9nIHdoZW4gdHJ5aW5nIHRvIGRlbGV0ZSByb3dcbiAgICovXG4gIGRlbGV0ZVJlY29yZChyb3c6IGFueSkge1xuICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgIG1lc3NhZ2U6ICdBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyByZWNvcmQ/JyxcbiAgICAgIGhlYWRlcjogJ0RlbGV0ZSBDb25maXJtYXRpb24nLFxuICAgICAgaWNvbjogJ3BpIHBpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlJyxcbiAgICAgIGtleTogJ2hhbmRsZUlubGluZUNSVUQnLFxuICAgICAgYWNjZXB0OiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnVzZVNlcnZlclNpZGVFdmVudHMpIHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNldCB0aGUgZ3JpZCBkZWxldGVkIGRhdGEgXG4gICAgICAgIHRoaXMucm93QWN0aW9uRXZlbnRzKHJvdywgdHJ1ZSk7XG4gICAgICAgIHRoaXMub25Sb3dEZWxldGUuZW1pdChyb3cpO1xuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5pbkVkaXRNb2RlID0gZmFsc2U7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIHJlamVjdDogKCkgPT4ge1xuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY2xvc2UoKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVG8gc2V0IGRpc2FibGVkIHRoZSBjb250cm9sXG4gICAqL1xuICBhbGxvd0Rpc2FibGVkKGNvbHVtbjogYW55LCByb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIGxldCB2YWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGlmIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSAmJiB0eXBlb2YgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChcbiAgICAgICAgT2JqZWN0LmtleXMocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10pPy5pbmNsdWRlcygnZGlzYWJsZWQnKSAmJiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzYWJsZWQgPT09IHRydWVcbiAgICAgICkge1xuICAgICAgICB2YWx1ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjb2x1bW4uZGlzYWJsZWQpIHtcbiAgICAgIHZhbHVlID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvIHNldCBhZ2dyZWdhdGUgaW4gZ3JpZCBmb290ZXJcbiAgICovXG4gIHNldEFnZ3JlZ2F0ZVRleHQoY29sdW1uOiBJR3JpZENvbHVtbikge1xuICAgIGlmIChjb2x1bW4/LmFnZ3JlZ2F0ZSkge1xuICAgICAgY29sdW1uLmFnZ3JlZ2F0ZS5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5yb3dzRGF0YSAmJiB0aGlzLnJvd3NEYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBsZXQgY29sdW1uVHlwZTogRUdyaWRBZ2dyZWdhdGUgPSBjb2wudHlwZTtcbiAgICAgICAgICBpZiAoY29sdW1uVHlwZSA9PT0gRUdyaWRBZ2dyZWdhdGUuQ09VTlQpIHtcbiAgICAgICAgICAgIGxldCBjb3VudCA9IHRoaXMucm93c0RhdGEubGVuZ3RoO1xuICAgICAgICAgICAgY291bnQgPSB0aGlzLnNldEZldGNoQWdncmVnYXRlZFZhbHVlKGNvbHVtbiwgY291bnQsIDEpO1xuICAgICAgICAgICAgY29sLmFnZ3JWYWx1ZSA9IHRoaXMuc2V0QWdncmVnYXRlRm9vdGVyVGV4dChjb2wsIGNvdW50LCAnQ291bnQnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb2x1bW5UeXBlID09PSBFR3JpZEFnZ3JlZ2F0ZS5TVU0gfHxcbiAgICAgICAgICAgIGNvbHVtblR5cGUgPT09IEVHcmlkQWdncmVnYXRlLkFWRVJBR0VcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbFZhbHVlczogbnVtYmVyW10gPSB0aGlzLmdldENvbHVtblZhbHVlcyhjb2x1bW4pO1xuICAgICAgICAgICAgaWYgKGNvbFZhbHVlcyAmJiBjb2xWYWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBsZXQgc3VtID0gY29sVmFsdWVzLnJlZHVjZSgoYWNjLCBjdXIpID0+IGFjYyArIGN1ciwgMCk7XG4gICAgICAgICAgICAgIGlmIChjb2x1bW5UeXBlID09PSBFR3JpZEFnZ3JlZ2F0ZS5TVU0pIHtcbiAgICAgICAgICAgICAgICBzdW0gPSB0aGlzLnNldEZldGNoQWdncmVnYXRlZFZhbHVlKGNvbHVtbiwgc3VtLCAyKTtcbiAgICAgICAgICAgICAgICBjb2wuYWdnclZhbHVlID0gdGhpcy5zZXRBZ2dyZWdhdGVGb290ZXJUZXh0KGNvbCwgc3VtLCAnU3VtJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGNvbHVtblR5cGUgPT09IEVHcmlkQWdncmVnYXRlLkFWRVJBR0UpIHtcbiAgICAgICAgICAgICAgICBsZXQgYXZlcmFnZSA9IHN1bSAvIGNvbFZhbHVlcy5sZW5ndGggfHwgMDtcbiAgICAgICAgICAgICAgICBhdmVyYWdlID0gdGhpcy5zZXRGZXRjaEFnZ3JlZ2F0ZWRWYWx1ZShjb2x1bW4sIHN1bSwgMyk7XG4gICAgICAgICAgICAgICAgY29sLmFnZ3JWYWx1ZSA9IHRoaXMuc2V0QWdncmVnYXRlRm9vdGVyVGV4dChcbiAgICAgICAgICAgICAgICAgIGNvbCxcbiAgICAgICAgICAgICAgICAgIGF2ZXJhZ2UsXG4gICAgICAgICAgICAgICAgICAnQXZnJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29sLmFnZ3JWYWx1ZSA9ICcnO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBzZXQgdGhlIGFnZ3JlZ2F0YWlvbiB2YWx1ZSB0aGF0IGNvbWluZyBmcm9tIGZldGNoXG4gIHNldEZldGNoQWdncmVnYXRlZFZhbHVlKGNvbHVtbiwgYWdncmVnYXRlVmFsdWUsIGFnZ3JlZ2F0ZUFjdGlvbikge1xuICAgIGlmICh0aGlzLmFnZ3JlZ2F0ZWRSZXN1bHQ/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGFnZ3JlZ2F0ZWRDb2x1bW4gPSB0aGlzLmFnZ3JlZ2F0ZWRSZXN1bHQuZmluZCgoYWdncmVnYXRlKSA9PiBhZ2dyZWdhdGUuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSAmJiBhZ2dyZWdhdGUuYWdncmVnYXRpb25PcGVyYXRpb24gPT09IGFnZ3JlZ2F0ZUFjdGlvbik7XG4gICAgICBpZiAoYWdncmVnYXRlZENvbHVtbikge1xuICAgICAgICBhZ2dyZWdhdGVWYWx1ZSA9IGFnZ3JlZ2F0ZWRDb2x1bW4/LnZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYWdncmVnYXRlVmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogc2V0IGdyaWQgQWdncmVnYXRlIHZhbHVlc1xuICAgKi9cbiAgc2V0QWdncmVnYXRlRm9vdGVyVGV4dChjb2x1bW46IGFueSwgdmFsdWU6IG51bWJlciwgZGVmYXVsdENhcHRpb246IHN0cmluZykge1xuICAgIGNvbnN0IGlzRGVjaW1hbEZvcm1hdDogYm9vbGVhbiA9IGNvbHVtbi5mb3JtYXQ/LnR5cGUgPT09ICdkZWNpbWFsJztcbiAgICBjb25zdCBkaWdpdHNJbmZvID0gY29sdW1uLmZvcm1hdD8uZGlnaXRzSW5mbztcbiAgICBjb25zdCBjYXB0aW9uOiBzdHJpbmcgPVxuICAgICAgY29sdW1uLmNhcHRpb24/Lmxlbmd0aCA+IDAgPyBjb2x1bW4uY2FwdGlvbiA6IGRlZmF1bHRDYXB0aW9uO1xuXG4gICAgY29uc3QgZGVjaW1hbFBvaW50ID0gaXNEZWNpbWFsRm9ybWF0XG4gICAgICA/IHZhbHVlPy50b0ZpeGVkKGRpZ2l0c0luZm8gPyBkaWdpdHNJbmZvIDogMilcbiAgICAgIDogdmFsdWU/LnRvRml4ZWQoMCk7XG4gICAgcmV0dXJuIGAke2NhcHRpb259ICR7ZGVjaW1hbFBvaW50XG4gICAgICAudG9TdHJpbmcoKVxuICAgICAgLnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csICcsJyl9IDwvYnI+YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgZGVjaW1hdCBhbmQgbnVtZXJpYyB2YWx1ZXNcbiAgICovXG4gIHNldE51bWVyaWNWYWx1ZXMoKSB7XG4gICAgaWYgKHRoaXMuY29sdW1ucz8ubGVuZ3RoID4gMCAmJiB0aGlzLnJvd3NEYXRhPy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTlVNRVJJQykge1xuICAgICAgICAgIGNvbnN0IGRpZ2l0c0luZm8gPSBjb2x1bW4/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvO1xuICAgICAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgICBpZiAoY29sdW1uPy5mb3JtYXQ/LnR5cGUgPT09ICdwZXJjZW50Jykge1xuICAgICAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5hbGxvd0NhbGN1bGF0ZSkge1xuICAgICAgICAgICAgICAgIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHBhcnNlRmxvYXQoKHJvd1tjb2x1bW4uZmllbGRdICogMTAwKT8udG9TdHJpbmcoKSkudG9GaXhlZChkaWdpdHNJbmZvKTsgICAgICAgICAvL1RIRVNFIENPTU1FTlRFRCBPVVQgTElORVMgU0hPVUxEIFJVTiBPTiBTQVZFXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF0gKiAxMDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRpZ2l0c0luZm8pIHtcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHBhcnNlRmxvYXQocm93W2NvbHVtbi5maWVsZF0pLnRvRml4ZWQoZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uPy5mb3JtYXQ/LnR5cGUgPT09ICdkZWNpbWFsJykge1xuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHBhcnNlRmxvYXQocm93W2NvbHVtbi5maWVsZF0pLnRvRml4ZWQoZGlnaXRzSW5mbyA/IGRpZ2l0c0luZm8gOiAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogZ2V0IGNvbHVtbiB2YWx1ZSBiYXNlZCBvbiBjb2x1bW4gZmllbGRcbiAgICovXG4gIGdldENvbHVtblZhbHVlcyhjb2x1bW46IElHcmlkQ29sdW1uKSB7XG4gICAgbGV0IGFycjogYW55ID0gW107XG4gICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMocm93KTtcbiAgICAgIGtleXMubWFwKChrZXkpID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi5maWVsZCA9PT0ga2V5KSB7XG4gICAgICAgICAgYXJyLnB1c2gocm93W2tleV0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gYXJyO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEV4cG9ydCB0byBQREZcbiAgICovXG4gIGV4cG9ydFBkZigpIHtcbiAgICB2YXIgZXhwb3J0RGF0YSA9IHRoaXMuc2V0RXhwb3J0RGF0YShbLi4udGhpcy5yb3dzRGF0YV0sIHRydWUpO1xuICAgIGxldCBkb2MgPSBuZXcganNQREYoJ3AnLCAncHQnKTtcbiAgICBkb2MudGFibGUoMSwgMSwgZXhwb3J0RGF0YS5yb3dzLCBleHBvcnREYXRhLmhlYWRpbmdzLCB7IGF1dG9TaXplOiB0cnVlIH0pO1xuICAgIGRvYy5zYXZlKCdFeHBvcnQucGRmJyk7XG4gIH1cblxuICAvKipcbiAgICogIFN1Yi1mdW5jdGlvbiB0byBzZXQgcm93cyBmb3IgZXhwb3J0IHRvIFBkZiwgYW5kIEV4Y2VsXG4gICAqIEByb3dzIHBhcmFtIGZvciByb3dzXG4gICAqIEBpc0V4Y2VsIHBhcmFtIGZvciBleHBvcnQgdG8gZXhjZWwgaW5kaWNhdGlvblxuICAgKi9cbiAgc2V0RXhwb3J0RGF0YShyb3dzOiBhbnlbXSA9IFtdLCBpc1BkZjogYm9vbGVhbiA9IGZhbHNlKTogSUdyaWREYXRhRXhwb3J0IHtcbiAgICBjb25zdCBoZWFkaW5nczogYW55ID0gdGhpcy5jb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4uZmllbGQpO1xuICAgIHJvd3MuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICBmb3IgKHZhciBwcm9wIGluIHJvdykge1xuICAgICAgICBpZiAoIWhlYWRpbmdzLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgZGVsZXRlIHJvd1twcm9wXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQZGYpIHtcbiAgICAgICAgICByb3dbcHJvcF0gPVxuICAgICAgICAgICAgIXJvd1twcm9wXSAmJiB0eXBlb2Ygcm93W3Byb3BdICE9PSAnYm9vbGVhbidcbiAgICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgICA6IHJvd1twcm9wXS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHsgcm93cywgaGVhZGluZ3MgfTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBFeHBvcnQgdG8gRXhjZWxcbiAgICovXG4gIGV4cG9ydEV4Y2VsKCkge1xuICAgIGxldCBleHBvcnREYXRhOiBhbnkgPSB0aGlzLmV4cG9ydERhdGFUb0V4Y2VsKCk7XG4gICAgaW1wb3J0KCd4bHN4JykudGhlbigoeGxzeCkgPT4ge1xuICAgICAgY29uc3Qgd29ya3NoZWV0OiBXb3JrU2hlZXQgPSB4bHN4LnV0aWxzLmpzb25fdG9fc2hlZXQoZXhwb3J0RGF0YSk7XG4gICAgICBsZXQgcm93SW5kZXggPSAwO1xuICAgICAgZXhwb3J0RGF0YS5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICBsZXQgY29sSW5kZXggPSAwO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNlbGxWYWx1ZTogc3RyaW5nID0gcm93W2NvbC5oZWFkZXJdO1xuICAgICAgICAgIGlmIChjZWxsVmFsdWUgJiYgY2VsbFZhbHVlLmxlbmd0aCA+IDAgJiYgY2VsbFZhbHVlLmluZGV4T2YoJ3wnKSA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmtUZXh0OiBzdHJpbmcgPSBjZWxsVmFsdWUuc3BsaXQoJ3wnKVswXTtcbiAgICAgICAgICAgIGxldCBsaW5rVXJsOiBzdHJpbmcgPSBjZWxsVmFsdWUuc3BsaXQoJ3wnKVsxXTtcbiAgICAgICAgICAgIGlmIChsaW5rVXJsICYmICFsaW5rVXJsLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgICAgICAgICBpZiAoIWxpbmtVcmwuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgICAgICAgICAgbGlua1VybCA9ICcvJyArIGxpbmtVcmw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbGlua1VybCA9XG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnByb3RvY29sICtcbiAgICAgICAgICAgICAgICAnLy8nICtcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgK1xuICAgICAgICAgICAgICAgIGxpbmtVcmw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjZWxsQWRkcmVzcyA9IHhsc3gudXRpbHMuZW5jb2RlX2NlbGwoe1xuICAgICAgICAgICAgICBjOiBjb2xJbmRleCxcbiAgICAgICAgICAgICAgcjogcm93SW5kZXggKyAxLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHdvcmtzaGVldFtjZWxsQWRkcmVzc10gPSB7XG4gICAgICAgICAgICAgIGY6IGA9SFlQRVJMSU5LKFwiJHtsaW5rVXJsfVwiLCBcIiR7bGlua1RleHR9XCIpYCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29sSW5kZXgrKztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcm93SW5kZXgrKztcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgd29ya2Jvb2sgPSB7XG4gICAgICAgIFNoZWV0czogeyBzaGVldDE6IHdvcmtzaGVldCB9LFxuICAgICAgICBTaGVldE5hbWVzOiBbJ3NoZWV0MSddLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGV4Y2VsQnVmZmVyOiBhbnkgPSB4bHN4LndyaXRlKHdvcmtib29rLCB7XG4gICAgICAgIGJvb2tUeXBlOiAneGxzeCcsXG4gICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2F2ZUFzRXhjZWxGaWxlKGV4Y2VsQnVmZmVyLCAnRXhwb3J0Lnhsc3gnKTtcbiAgICB9KTtcbiAgfVxuXG4gIGV4cG9ydERhdGFUb0V4Y2VsKCkge1xuICAgIGxldCBhcnI6IGFueSA9IFtdO1xuICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgIGxldCBvYmo6IGFueSA9IHt9O1xuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgZ3JpZEhlYWRlciA9IGNvbHVtbi5oZWFkZXI7XG4gICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxJTkspIHtcbiAgICAgICAgICBjb25zdCBsaW5rT2JqID0gcm93W2NvbHVtbi5kaXNwbGF5VGV4dD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ107XG4gICAgICAgICAgb2JqW2dyaWRIZWFkZXJdID0gcm93W2NvbHVtbi5maWVsZF0gKyAnfCcgKyBsaW5rT2JqPy5oeXBlcmxpbms7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2JqW2dyaWRIZWFkZXJdID0gcm93W2NvbHVtbi5maWVsZF07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBhcnIucHVzaChvYmopO1xuICAgIH0pO1xuICAgIHJldHVybiBhcnI7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogRXhwb3J0IHRvIGV4Y2VsIChzdWItbWV0aG9kKVxuICAgKi9cbiAgc2F2ZUFzRXhjZWxGaWxlKGJ1ZmZlcjogYW55LCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaW1wb3J0KCdmaWxlLXNhdmVyJykudGhlbigoRmlsZVNhdmVyKSA9PiB7XG4gICAgICBsZXQgRVhDRUxfVFlQRSA9XG4gICAgICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldDtjaGFyc2V0PVVURi04JztcbiAgICAgIGNvbnN0IGRhdGE6IEJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwgeyB0eXBlOiBFWENFTF9UWVBFIH0pO1xuICAgICAgc2F2ZUFzKGRhdGEsIGZpbGVOYW1lKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKnNldCBjb25maWcgZGF0YSBvZiBsb29rdXAgY29udHJvbCBkaWFsb2dcbiAgICovXG4gIHNldExvb2t1cERpYWxvZ0NvbmZpZyhyb3c6IGFueSwgY29sdW1uOiBhbnksIGRhdGE6IGFueSkge1xuICAgIGxldCBzZWxlY3Rpb246IHN0cmluZyA9ICcnO1xuICAgIGlmIChyb3dbY29sdW1uLmZpZWxkXSAmJiB0eXBlb2Ygcm93W2NvbHVtbi5maWVsZF0gPT09ICdvYmplY3QnKSB7XG4gICAgICBzZWxlY3Rpb24gPSByb3dbY29sdW1uLmZpZWxkXS50ZXh0O1xuICAgIH0gZWxzZSBpZiAoY29sdW1uLmRpc3BsYXlGaWVsZCAmJiByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF0pIHtcbiAgICAgIHNlbGVjdGlvbiA9IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZWN0aW9uID0gcm93W2NvbHVtbi5maWVsZF07XG4gICAgfVxuXG4gICAgaWYgKGNvbHVtbi5maWVsZCAmJiB0eXBlb2Ygcm93W2NvbHVtbi5maWVsZF0gPT09ICdvYmplY3QnKSB7XG4gICAgICBjb25zdCBuZXdSb3cgPSB7IC4uLnJvdyB9O1xuICAgICAgbmV3Um93W2NvbHVtbi5maWVsZF0gPSBuZXdSb3dbY29sdW1uLmZpZWxkXT8udmFsdWU7XG4gICAgICByb3cgPSB7IC4uLm5ld1JvdyB9O1xuICAgIH1cblxuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCAmJiBkYXRhKSB7XG4gICAgICBsZXQgb2JqID0gYXV0b1NldExvb2t1cERhdGEoZGF0YSwgcm93KTtcbiAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnLWRhdGEnXSA9IG9iajtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHJvd0RhdGE6IHJvd1tjb2x1bW4uZmllbGQgKyAnLWRhdGEnXSxcbiAgICAgIHNlbGVjdGlvbjogc2VsZWN0aW9uLFxuICAgICAgY29sdW1uOiBjb2x1bW4sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVuIGxpbmsgb24gbG9va3VwQ29udHJvbCBjb250cm9sIGluIHJlYWQgb25seSBtb2RlIHdoZW4gZWRpdExpbmsgc2V0IHRydWVcbiAgICovXG4gIG9wZW5Mb29rdXBIeXBlcmxpbmsoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnkpIHtcbiAgICBpZiAoY29sdW1uLmVkaXRMaW5rID09PSB0cnVlICYmIGNvbHVtbi5jb21wb25lbnQpIHtcbiAgICAgIGxldCBvYmo6IGFueSA9IHRoaXMuc2V0TG9va3VwRGlhbG9nQ29uZmlnKHJvdywgY29sdW1uLCBjb2x1bW4uZGF0YT8uZGF0YSk7XG4gICAgICBvYmpbJ2NvbXBvbmVudCddID0gY29sdW1uLmNvbXBvbmVudDtcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXMub3Blbkxvb2t1cERpYWxvZyhvYmopO1xuICAgICAgZHJhZ2dhYmxlRGlhbG9nKGNvbHVtbj8uZmllbGQgPyBjb2x1bW4/LmZpZWxkIDogY29sdW1uPy5oZWFkZXIpXG4gICAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICBpZiAocmVzICYmIGNvbHVtbi5vblJldHVybikge1xuICAgICAgICAgIGNvbHVtbi5vblJldHVybihyZXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogb3BlbiBsb29rdXAgRGlhbG9nXG4gICAqL1xuICBvcGVuTG9va3VwRGlhbG9nKGNvbHVtbj86IGFueSwgcm93OiBhbnkgPSB7fSkge1xuICAgIGNvbnN0IGNvbHVtbkRhdGEgPSBjb2x1bW4uY29sdW1uPy5sb29rdXBDb250cm9sPy5kYXRhID8gY29sdW1uLmNvbHVtbi5sb29rdXBDb250cm9sLmRhdGEgOiBjb2x1bW4uY29sdW1uLmRhdGE7XG4gICAgaWYgKHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbCkge1xuICAgICAgcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy5oZWFkZXIgPyBjb2x1bW5EYXRhLmhlYWRlciA9IHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8uaGVhZGVyIDogJydcbiAgICAgIHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8ud2lkdGggPyBjb2x1bW5EYXRhLndpZHRoID0gcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy53aWR0aCA6ICcnXG4gICAgICByb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmhlaWdodCA/IGNvbHVtbkRhdGEuaGVpZ2h0ID0gcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy5oZWlnaHQgOiAnJ1xuICAgICAgcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy52YWx1ZVByb3AgPyBjb2x1bW5EYXRhLnZhbHVlUHJvcCA9IHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8udmFsdWVQcm9wIDogXCJcIlxuICAgICAgcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy5sYWJlbFByb3AgPyBjb2x1bW5EYXRhLmxhYmVsUHJvcCA9IHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8ubGFiZWxQcm9wIDogXCJcIlxuICAgICAgcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy5kYXRhID8gY29sdW1uRGF0YS5kYXRhID0gcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy5kYXRhIDogJydcbiAgICB9XG5cbiAgICB0aGlzLmRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKGNvbHVtbi5jb21wb25lbnQsIHtcbiAgICAgIC4uLmNvbHVtbkRhdGEsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHNlbGVjdGlvbjogY29sdW1uLnNlbGVjdGlvbixcbiAgICAgICAgZmllbGQ6IGNvbHVtbi5jb2x1bW4uZmllbGQsXG4gICAgICAgIGxhYmVsUHJvcDogY29sdW1uLmNvbHVtbi5sb29rdXBDb250cm9sPy5kYXRhPy5sYWJlbFByb3AsXG4gICAgICAgIC4uLmNvbHVtbi5yb3dEYXRhLFxuXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSA9IHRoaXMuaW50ZXJjZXB0RGlhbG9nQ2xvc2UuYmluZCh0aGlzKTtcbiAgICB0aGlzLnNldER5bmFtaWNEaWFsb2dSZWYodGhpcy5kaWFsb2dSZWYpO1xuICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSByb3dbY29sdW1uLmNvbHVtbi5maWVsZF0/Lm5hbWU7XG4gICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgIHRoaXMucGFnZUxvZ2dlclNlcnZpY2Uuc2F2ZVBhZ2VMb2dnZXJJbmZvKHRoaXMucm91dGVyLnVybD8uc3Vic3RyaW5nKDEpLCBjb21wb25lbnROYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGlhbG9nUmVmO1xuICB9XG5cbiAgaW50ZXJjZXB0RGlhbG9nQ2xvc2UoZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQgfHwgdGhpcy5mb3JtU2VydmljZS5maWVsZEZvY3VzZWRPdXQpIHtcbiAgICAgIGlmIChjb25maXJtKFwiWW91IHdpbGwgbG9zZSBjaGFuZ2VzIG5vdCBzYXZlZCBvbiBwYWdlLiBXb3VsZCB5b3UgbGlrZSB0byBjb250aW51ZT9cIikgPT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuZGlhbG9nUmVmLmRlc3Ryb3koKTtcbiAgICB9XG4gIH1cblxuICAvLyBzZXQgZGlhbG9nIHJlZiB3aGVuIHBvcHVwIG9wZW5cbiAgc2V0RHluYW1pY0RpYWxvZ1JlZihyZWYpIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2UuZGlhbG9nQ29tcG9uZW50UmVmTWFwLmdldChyZWYpO1xuICAgIGNvbnN0IGR5bmFtaWNDb21wb25lbnQgPSBkaWFsb2dSZWY/Lmluc3RhbmNlIGFzIER5bmFtaWNEaWFsb2dDb21wb25lbnQ7XG4gICAgY29uc3QgYXJpYUxhYmVsbGVkQnkgPSBkeW5hbWljQ29tcG9uZW50LmdldEFyaWFMYWJlbGxlZEJ5KCk7XG4gICAgZHluYW1pY0NvbXBvbmVudC5nZXRBcmlhTGFiZWxsZWRCeSA9ICgpID0+IGFyaWFMYWJlbGxlZEJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIG9wZW4gZGlhbG9nIG9uIGxvb2t1cENvbnRyb2wgZmllbGRcbiAgICovXG4gIHNlbGVjdExvb2t1cEZpZWxkKGNvbHVtbjogYW55LCByb3c/OiBhbnkpIHtcbiAgICB0aGlzLm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdyk7XG4gICAgbGV0IG9iajogYW55ID0gdGhpcy5zZXRMb29rdXBEaWFsb2dDb25maWcoXG4gICAgICByb3csXG4gICAgICBjb2x1bW4sXG4gICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8uZGF0YVxuICAgICAgICA/IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy5kYXRhIDogY29sdW1uPy5sb29rdXBDb250cm9sPy5kYXRhPy5kYXRhXG4gICAgKTtcblxuICAgIG9ialsnY29tcG9uZW50J10gPSByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uY29tcG9uZW50ID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmNvbXBvbmVudCA6IGNvbHVtbi5sb29rdXBDb250cm9sPy5jb21wb25lbnQ7XG4gICAgY29uc3QgcmVmID0gdGhpcy5vcGVuTG9va3VwRGlhbG9nKG9iaiwgcm93KTtcbiAgICBkcmFnZ2FibGVEaWFsb2coY29sdW1uPy5maWVsZCA/IGNvbHVtbj8uZmllbGQgOiBjb2x1bW4/LmhlYWRlcilcbiAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoXG4gICAgICAocmVzKSA9PiB7XG4gICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICBsZXQgdmFsdWUgPSBzZXREaWFsb2dSZXNwb25zZShcbiAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICAgIGNvbHVtbi5sb29rdXBDb250cm9sLFxuICAgICAgICAgICAgcmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXMgPSBvYmpDb252ZXJ0VG9Mb3dlcihyZXMpO1xuICAgICAgICAgIGxldCBsYWJlbFByb3AgPSBjb2x1bW4/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmxhYmVsUHJvcD8udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBsZXQgdmFsdWVQcm9wID0gY29sdW1uPy5sb29rdXBDb250cm9sPy5kYXRhPy52YWx1ZVByb3A/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgbGV0IGNvbHVtbkZpZWxkID0gY29sdW1uPy5maWVsZD8udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBpZiAoY29sdW1uLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgICAgaWYgKHJvdz8uaGFzT3duUHJvcGVydHkoY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbkZpZWxkXSA9IHJlc1t2YWx1ZVByb3AgPyB2YWx1ZVByb3AgOiBjb2x1bW5GaWVsZF07XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXSA9IHJlc1tsYWJlbFByb3AgPyBsYWJlbFByb3AgOiBjb2x1bW4uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbkZpZWxkXSA9IHtcbiAgICAgICAgICAgICAgICB0ZXh0OiByZXNbbGFiZWxQcm9wID8gbGFiZWxQcm9wIDogY29sdW1uLmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogcmVzW3ZhbHVlUHJvcCA/IHZhbHVlUHJvcCA6IGNvbHVtbkZpZWxkXSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgJiYgdmFsdWUudmFsdWUpIHtcbiAgICAgICAgICAgIHZhbHVlWydmaWVsZCddID0gY29sdW1uRmllbGQ7XG4gICAgICAgICAgICBpZiAobGFiZWxQcm9wIHx8IHZhbHVlUHJvcCkge1xuICAgICAgICAgICAgICByb3dbY29sdW1uRmllbGRdID0ge1xuICAgICAgICAgICAgICAgIHRleHQ6IHJlc1tsYWJlbFByb3AgPyBsYWJlbFByb3AgOiByZXNbbGFiZWxQcm9wXV0sXG4gICAgICAgICAgICAgICAgdmFsdWU6IHJlc1t2YWx1ZVByb3AgPyB2YWx1ZVByb3AgOiByZXNbbGFiZWxQcm9wXV0sXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByb3dbY29sdW1uRmllbGRdID0gdmFsdWUudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChsYWJlbFByb3AgfHwgdmFsdWVQcm9wKSB7XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW5GaWVsZF0gPSB7XG4gICAgICAgICAgICAgICAgdGV4dDogcmVzW2xhYmVsUHJvcCA/IGxhYmVsUHJvcCA6IHZhbHVlUHJvcCA/IHZhbHVlUHJvcCA6IHJlc1tjb2x1bW5GaWVsZF1dLFxuICAgICAgICAgICAgICAgIHZhbHVlOiByZXNbdmFsdWVQcm9wID8gdmFsdWVQcm9wIDogcmVzW2NvbHVtbkZpZWxkXV0sXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByb3dbY29sdW1uRmllbGRdID0gcmVzW2NvbHVtbkZpZWxkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiAocm93W2NvbHVtbi5maWVsZF0pID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gPSB7IC4uLnJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLCB0ZXh0OiByb3dbY29sdW1uLmZpZWxkXSB9O1xuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF0/LnZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5kaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10pIHtcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddID0geyAuLi5yb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSwgdGV4dDogeyB0ZXh0OiByb3dbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV0sIHZhbHVlOiByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXSB9IH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddID0geyB0ZXh0OiB7IHRleHQ6IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXSwgdmFsdWU6IHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldIH0gfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocmVzKSB7XG4gICAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gPSB7IC4uLnJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLCB0ZXh0OiB7IHRleHQ6IHJlc1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldLCB2YWx1ZTogcmVzW2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0gfSB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2x1bW4ub25SZXR1cm4pIHtcbiAgICAgICAgICBjb2x1bW4ub25SZXR1cm4ocmVzLCByb3cpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3dbY29sdW1uLmZpZWxkXSAhPT0gb2JqLnNlbGVjdGlvbikge1xuICAgICAgICAgIHRoaXMuYnJvd3NlckNsb3NlRXZlbnQodHJ1ZSk7XG4gICAgICAgICAgaWYgKGNvbHVtbi5vbkNoYW5nZSkge1xuICAgICAgICAgICAgY29sdW1uLm9uQ2hhbmdlKHJvdyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKHsgZXJyb3IgfSkgPT4ge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHNldEZpbHRlckxvb2t1cChjb2x1bW46IGFueSkge1xuICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc2V0TG9va1VwRmlsdGVyKGNvbHVtbiwgdGhpcy5kaWFsb2dTZXJ2aWNlKTtcbiAgfVxuXG4gIC8vIHNldCBsb29rdXAgdmFsdWUgdGhhdCBkaXNwbGF5IGluIHJlYWRPbmx5TW9kZVxuICBzZXRMb29rdXBSZWFkT25seVZhbHVlKHJvdywgY29sdW1uKSB7XG4gICAgbGV0IHZhbHVlID0gJyc7XG4gICAgaWYgKHR5cGVvZiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnRleHQpID09PSBcIm9iamVjdFwiICYmIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy50ZXh0ICYmIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8udGV4dCk/Lmhhc093blByb3BlcnR5KCd0ZXh0JykpIHtcbiAgICAgIHZhbHVlID0gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnRleHQudGV4dDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSByb3dbY29sdW1uLmZpZWxkXTtcbiAgICAgIGlmIChjb2x1bW4uZGlzcGxheUZpZWxkKSB7XG4gICAgICAgIHZhbHVlID0gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSByb3dbY29sdW1uLmZpZWxkXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLy8gQ2hlY2sgY2FsZW5kYXIgdmFsdWUgaXMgY2hhbmdlZCBvciBub3RcbiAgY2FsZW5kYXJDaGFuZ2VFdmVudChjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcbiAgICBsZXQgdmFsdWVDaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBpZiAoXG4gICAgICBjb2x1bW4udGltZU9ubHkgJiZcbiAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJvd1tjb2x1bW4uZmllbGRdLCAnaGg6bW0nKSAhPT1cbiAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuY2FsZW5kYXJQcmV2aW91c1ZhbHVlLCAnaGg6bW0nKVxuICAgICkge1xuICAgICAgdmFsdWVDaGFuZ2UgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBjb2x1bW4uc2hvd1RpbWUgJiZcbiAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJvd1tjb2x1bW4uZmllbGRdLCAneXl5eS1NTS1kZCBoaDptbScpICE9PVxuICAgICAgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5jYWxlbmRhclByZXZpb3VzVmFsdWUsICd5eXl5LU1NLWRkIGhoOm1tJylcbiAgICApIHtcbiAgICAgIHZhbHVlQ2hhbmdlID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocm93W2NvbHVtbi5maWVsZF0sICd5eXl5LU1NLWRkJykgIT09XG4gICAgICB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLmNhbGVuZGFyUHJldmlvdXNWYWx1ZSwgJ3l5eXktTU0tZGQnKVxuICAgICkge1xuICAgICAgdmFsdWVDaGFuZ2UgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodmFsdWVDaGFuZ2UpIHtcbiAgICAgIHRoaXMuYnJvd3NlckNsb3NlRXZlbnQodHJ1ZSk7XG4gICAgICB0aGlzLmdlbmVyYXRlUm93c0RhdGFDb3B5ID0gZmFsc2U7XG4gICAgICB0aGlzLnJvd1VwZGF0ZUNoYW5nZSA9IHRydWU7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yb3dzQ2hhbmdlLmVtaXQodGhpcy5yb3dzRGF0YSk7XG4gICAgICB9LCAyNTApO1xuICAgICAgaWYgKGNvbHVtbi5vbkNoYW5nZSkge1xuICAgICAgICBjb2x1bW4ub25DaGFuZ2Uocm93KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jYWxlbmRhclByZXZpb3VzVmFsdWUgPSAnJztcbiAgfVxuICBvbkF1dG9Db21wbGV0ZUZvY3VzT3V0KGUsIGNvbHVtbiwgcm93KSB7XG4gICAgaWYgKGNvbHVtbi50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEUpIHtcbiAgICAgIGlmIChjb2x1bW4uYWxsb3dBdXRvQ29tcGxldGVTYXZlICYmIGUudGFyZ2V0LnZhbHVlICYmICFjb2x1bW4uZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgLy8vY2hlY2sgdGhlIGNvcnJlY3QgZm9ybWF0IGlmIGRhdGEuY29udGFpbnMgY3V6IGl0cyBhbiBhcnJheSBvZiBhcnJheXMgd2l0aCBvYmplY3RzLlxuICAgICAgICBpZiAoY29uZmlybShgRG8geW91IHdhbnQgdG8gYWRkICR7ZS50YXJnZXQudmFsdWV9IHRvIHRoZSBzZWxlY3Rpb24/YCkpIHtcbiAgICAgICAgICBpZiAoY29sdW1uLnVuaXF1ZUtleSkge1xuICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSB0aGlzLmdyaWRTZXJ2aWNlXG4gICAgICAgICAgICAgIC5hZGRBdXRvQ29tcGxldGVWYWx1ZShjb2x1bW4udW5pcXVlS2V5LCBlLnRhcmdldC52YWx1ZSwgY29sdW1uLCByb3cpXG4gICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4ub25SZXR1cm4pIHtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5vblJldHVybihlLnRhcmdldC52YWx1ZSwgY29sdW1uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBvbkZvY3VzRXZlbnQoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnkpIHtcbiAgICB0aGlzLm51bWVyaWNWYWx1ZVtjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF1cbiAgfVxuXG4gIG9uRm9jdXNPdXRFdmVudChjb2x1bW46IElHcmlkQ29sdW1uLCByb3c6IGFueSkge1xuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk5VTUVSSUMgJiYgdGhpcy5udW1lcmljVmFsdWVbY29sdW1uLmZpZWxkXSAhPT0gcm93W2NvbHVtbi5maWVsZF0pIHtcbiAgICAgIHRoaXMub25DaGFuZ2VFdmVudChjb2x1bW4sIHJvdylcbiAgICB9XG4gICAgaWYgKGNvbHVtbi50eXBlICE9PSBFR3JpZENvbHVtblR5cGUuQVVUT0NPTVBMRVRFIHx8ICghY29sdW1uLmFsbG93QXV0b0NvbXBsZXRlU2F2ZSkpIHtcbiAgICAgIHRoaXMuZ3JpZFNlcnZpY2UuY2hlY2tWYWxpZGl0eShbY29sdW1uXSwgcm93KTtcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUpIHtcbiAgICAgICAgdGhpcy5jYWxlbmRhckNoYW5nZUV2ZW50KGNvbHVtbiwgcm93KTtcbiAgICAgIH1cbiAgICAgIGlmIChjb2x1bW4ub25Gb2N1c091dCkge1xuICAgICAgICBjb2x1bW4ub25Gb2N1c091dChyb3cpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgY29sdW1uLm9uUmV0dXJuICYmXG4gICAgICAgIGNvbHVtbi50eXBlICE9PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUXG4gICAgICApIHtcbiAgICAgICAgY29sdW1uLm9uUmV0dXJuKHJvdyk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkID0gZmFsc2U7XG4gICAgdGhpcy5ncmlkU2VydmljZS5yb3dVcGRhdGUgPSBmYWxzZTtcbiAgfVxuXG4gIHNldEZpbHRlckZvY3VzT3V0KGNvbDogYW55LCBmaWx0ZXI/OiBhbnksIGV2ZW50PzogYW55KSB7XG4gICAgdGhpcy5zZXRHcmlkRmlsdGVyKGNvbCwgZmlsdGVyLCBldmVudCk7XG4gIH1cblxuICBzZXRHcmlkRmlsdGVyKGNvbDogSUdyaWRDb2x1bW4sIGZpbHRlcj86IGFueSwgZXZlbnQ/OiBhbnkpIHtcbiAgICB0aGlzLmdyaWRGaWx0ZXJPYmogPSB7IGNvbHVtbjogY29sLCBmaWx0ZXI6IGZpbHRlciwgZXZlbnQ6IGV2ZW50IH07XG4gICAgY29uc3QgbmV3Q29sdW1uOiBhbnkgPSB7IC4uLmNvbCB9O1xuICAgIC8vY2hhbmdlIGZpbHRlciBjYWxlbmRhciBmb3JtYXRcbiAgICBpZiAobmV3Q29sdW1uLnR5cGUgPT09ICdkYXRlJyAmJiBuZXdDb2x1bW4uZmlsdGVyVmFsdWUpIHtcbiAgICAgIG5ld0NvbHVtbi5maWx0ZXJWYWx1ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKFxuICAgICAgICBjb2wuZmlsdGVyVmFsdWUudG9TdHJpbmcoKS50cmltKCksXG4gICAgICAgICd5eXl5LU1NLWRkJ1xuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5maWx0ZXJPYmoobmV3Q29sdW1uKTtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYXBwbHlGaWx0ZXInLCBKU09OLnN0cmluZ2lmeShmYWxzZSkpO1xuICB9XG5cbiAgZmlsdGVyT2JqKGNvbDogYW55KSB7XG4gICAgY29uc3Qgb2JqID0ge1xuICAgICAgZmllbGQ6IGNvbC5maWVsZCxcbiAgICAgIG1hdGNoTW9kZTogY29sLm1hdGNoTW9kZSA/IGNvbC5tYXRjaE1vZGUgOiAnc3RhcnRzV2l0aCcsXG4gICAgICBvcGVyYXRvcjogY29sLm9wZXJhdG9yID8gY29sLm9wZXJhdG9yIDogJ2FuZCcsXG4gICAgICB0YWJsZUFsaWFzOiBjb2wudGFibGVBbGlhcyA/IGNvbC50YWJsZUFsaWFzIDogJycsXG4gICAgICB2YWx1ZTogY29sLmZpbHRlclZhbHVlLFxuICAgIH07XG4gICAgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkucHVzaChvYmopO1xuICB9XG5cbiAgYXBwbHlFbnRlckV2ZW50KGZpbHRlcjogYW55LCBldmVudDogYW55LCBjb2x1bW46IGFueSkge1xuICAgIHRoaXMuZ3JpZFNlcnZpY2UuYXBwbHlGaWx0ZXJFdmVudCA9IHRydWU7XG4gICAgdGhpcy5yb3dVcGRhdGVDaGFuZ2UgPSBmYWxzZTtcbiAgICB0aGlzLmF1dG9Mb2FkRGF0YSA9IHRydWU7XG4gICAgdGhpcy5vbkFwcGx5RmlsdGVyLmVtaXQoKTtcbiAgICB0aGlzLmZpbHRlck9iaihjb2x1bW4pO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdhcHBseUZpbHRlcicsIEpTT04uc3RyaW5naWZ5KHRydWUpKTtcbiAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5NVUxUSVNFTEVDVCkge1xuICAgICAgZmlsdGVyKGNvbHVtbj8uZmlsdGVyVmFsdWU/LnRvU3RyaW5nKCkpXG4gICAgfSBlbHNlIGlmIChjb2x1bW4/LmZpbHRlcj8udHlwZSA9PT0gdGhpcy5kcm9wRG93bkZpbHRlcj8uY29sdW1uPy5maWx0ZXI/LnR5cGUpIHtcbiAgICAgIHRoaXMuZHJvcERvd25GaWx0ZXIuZmlsdGVyKHRoaXMuZHJvcERvd25GaWx0ZXIuZXZlbnQudGFyZ2V0KTtcbiAgICB9IGVsc2UgaWYgKGZpbHRlciAmJiBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4gJiYgY29sdW1uPy5maWx0ZXI/LnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DSEVDS0JPWCAmJiBjb2x1bW4uZmlsdGVyaW5nICE9PSBmYWxzZSkge1xuICAgICAgZmlsdGVyKGV2ZW50Py5jaGVja2VkKTtcbiAgICB9IGVsc2UgaWYgKGZpbHRlcikge1xuICAgICAgZmlsdGVyKGV2ZW50Py50YXJnZXQ/LnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVOdWxsQ2FsZW5kYXIoY29sdW1uOiBJR3JpZENvbHVtbiwgZmlsdGVyOiBhbnksIGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoY29sdW1uLmZpbHRlclZhbHVlID09PSBudWxsKSB7XG4gICAgICB0aGlzLnJlbW92ZU51bGxGaWx0ZXJzKGNvbHVtbik7XG4gICAgICB0aGlzLnNldEZpbHRlckZvY3VzT3V0KGNvbHVtbiwgZmlsdGVyLCBldmVudCk7XG4gICAgfVxuICB9XG5cbiAgYmFja3NwYWNlRXZlbnQoZXZlbnQ6IGFueSwgY29sdW1uOiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICBldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnICYmXG4gICAgICAoY29sdW1uLmZpbHRlclZhbHVlPy50b1N0cmluZygpLmxlbmd0aCA9PT0gMSB8fFxuICAgICAgICBjb2x1bW4uZmlsdGVyVmFsdWU/LnRvU3RyaW5nKCkgPT09ICcnIHx8XG4gICAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZSA9PT0gbnVsbClcbiAgICApIHtcbiAgICAgIHRoaXMucmVtb3ZlTnVsbEZpbHRlcnMoY29sdW1uKTtcbiAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSAmJiBjb2x1bW4uZmlsdGVyVmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHRoaXMucmVtb3ZlTnVsbEZpbHRlcnMoY29sdW1uKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVOdWxsRmlsdGVycyhjb2x1bW46IGFueSkge1xuICAgIGlmICh0aGlzLmdsb2JhbEZpbHRlcnNBcnJheSAmJiB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgYXJyID0gWy4uLnRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5XTtcbiAgICAgIGxldCBpbmRleCA9IGFyci5maW5kSW5kZXgoKGkpID0+IGkuZmllbGQgPT09IGNvbHVtbi5maWVsZCk7XG4gICAgICBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5ID0gYXJyO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlbW92aW5nIEhlYWRlciBGaWx0ZXIgVmFsdWUgdXNpbmcgQmFja3NwYWNlIGtleSBFdmVudCBvciBEZWxldGUga2V5IEV2ZW50LlxuICByZW1vdmluZ0ZpbHRlcnMoZXZlbnQ6IGFueSwgY29sdW1uOiBJR3JpZENvbHVtbikge1xuICAgIGlmIChcbiAgICAgIChldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnIHx8IGV2ZW50LmtleSA9PT0gJ0RlbGV0ZScpICYmXG4gICAgICBjb2x1bW4uZmlsdGVyVmFsdWU/LnRvU3RyaW5nKCkubGVuZ3RoID09PSAwXG4gICAgKSB7XG4gICAgICBsZXQgc2VhcmNoRmlsdGVycztcbiAgICAgIGlmICghdGhpcy5zb2Z0Q2FjaGluZyAmJiB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCkge1xuICAgICAgICBzZWFyY2hGaWx0ZXJzID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnU2V0RmlsdGVycy0nICsgdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmwpIGFzIGFueSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgIHNlYXJjaEZpbHRlcnMgPSB0aGlzLmdyaWRTZXJ2aWNlLnNvZnRDYWNoaW5nRmlsdGVyc1t0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHRoaXMuY3VycmVudFVybF07XG4gICAgICB9XG4gICAgICBpZiAoc2VhcmNoRmlsdGVycyAmJiBzZWFyY2hGaWx0ZXJzLmZpbHRlcnMpIHtcbiAgICAgICAgaWYgKHNlYXJjaEZpbHRlcnMuZmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbGV0IGluZGV4ID0gc2VhcmNoRmlsdGVycy5maWx0ZXJzLmZpbmRJbmRleChcbiAgICAgICAgICAgICh4OiBhbnkpID0+IHguZmllbGQgPT09IGNvbHVtbi5maWVsZFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIGlmIChzZWFyY2hGaWx0ZXJzLmZpbHRlcnMubGVuZ3RoID09PSAxICYmIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgICAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW3RoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdGhpcy5jdXJyZW50VXJsXSA9IFtdO1xuICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnU2V0RmlsdGVycy0nICsgdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2VhcmNoRmlsdGVycy5maWx0ZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgIGlmICghdGhpcy5zb2Z0Q2FjaGluZyAmJiB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCkge1xuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdTZXRGaWx0ZXJzLScgKyB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHRoaXMuY3VycmVudFVybCwgSlNPTi5zdHJpbmdpZnkoc2VhcmNoRmlsdGVycykpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmxdID0gc2VhcmNoRmlsdGVycztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCBDbGljayBCdXR0b24gRXZlbnQgb24gR3JpZC5cbiAgb25DbGlja0J1dHRvbihjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcbiAgICB0aGlzLm9wZW5HcmlkRGlhbG9nKGNvbHVtbiwgcm93KTtcbiAgfVxuXG4gIC8vIEludm9rZSBvbkNsaWNrIEV2ZW50LlxuICBvbkNsaWNrRXZlbnQoY29sdW1uOiBhbnksIHJvdzogYW55KSB7XG4gICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSyAmJiAoY29sdW1uLmVkaXRMaW5rID09PSBmYWxzZSB8fCBjb2x1bW4uZWRpdExpbmsgPT09IHVuZGVmaW5lZCkgJiYgY29sdW1uLmVkaXRhYmxlICE9PSB0cnVlICYmIGNvbHVtbi5kaXNhYmxlZCAhPT0gdHJ1ZSkge1xuICAgICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4ub25DbGljayAmJiBjb2x1bW4uZGlzYWJsZWQgIT09IHRydWUgJiYgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmFjdGlvbj8uZGlzYWJsZWQgIT09IHRydWUpIHtcbiAgICAgICAgY29sdW1uLm9uQ2xpY2socm93KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICBhLmhyZWYgPSByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uaHlwZXJsaW5rO1xuICAgICAgICBhLnRhcmdldCA9IGNvbHVtbi50YXJnZXQgPyBjb2x1bW4udGFyZ2V0IDogJ19ibGFuaycsXG4gICAgICAgICAgYS5jbGljaygpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBpZihjb2x1bW4udHlwZT09PUVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgJiYgcm93W2NvbHVtbi5maWVsZF0pe1xuICAgIC8vICAgdGhpcy5vcGVuR3JpZERpYWxvZyhjb2x1bW4scm93KVxuICAgIC8vIH1cbiAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFICYmIHJvd1tjb2x1bW4uZmllbGRdKSB7XG4gICAgICB0aGlzLmNhbGVuZGFyUHJldmlvdXNWYWx1ZSA9IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAhcm93W2NvbHVtbi5maWVsZF0gJiZcbiAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSAmJlxuICAgICAgKGNvbHVtbi5zaG93VGltZSB8fCBjb2x1bW4udGltZU9ubHkpICYmXG4gICAgICBjb2x1bW4ubWludXRlc0ludGVydmFsXG4gICAgKSB7XG4gICAgICB0aGlzLmRlZmF1bHREYXRlID0gbmV3IERhdGUoc2V0TWludXRlc0ludGVydmFsKG5ldyBEYXRlKCkpKTtcbiAgICB9XG4gICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4ub25DbGljayAmJiBjb2x1bW4uZGlzYWJsZWQgIT09IHRydWUgJiYgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc2FibGVkICE9PSB0cnVlKSB7XG4gICAgICBjb2x1bW4ub25DbGljayhyb3cpO1xuICAgIH1cbiAgfVxuXG4gIHNldE11bHRpU2VsZWN0VmFsdWUoY29sdW1uLCByb3cpIHtcbiAgICBpZiAocm93W2NvbHVtbi5maWVsZF0gJiYgIUFycmF5LmlzQXJyYXkocm93W2NvbHVtbi5maWVsZF0pKSB7XG4gICAgICBpZiAodHlwZW9mIChyb3dbY29sdW1uLmZpZWxkXSkgPT09IFwic3RyaW5nXCIgJiYgIXJvd1tjb2x1bW4uZmllbGRdPy5pbmNsdWRlcygnLCcpKSB7XG4gICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gW3Jvd1tjb2x1bW4uZmllbGRdXTtcbiAgICAgIH0gZWxzZSBpZiAocm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCcsJykpIHtcbiAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXT8uc3BsaXQoJywnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJvd1tjb2x1bW4uZmllbGRdO1xuICB9XG5cbiAgLy8gc2V0IHRoZSBzZWxlY3QgdmFsdWUgb2YgbXVsdGktc2VsZWN0XG4gIHNob3dPcHRpb24oY29sdW1uLCByb3cpIHtcbiAgICByb3dbY29sdW1uLmZpZWxkXSA9IHRoaXMuc2V0TXVsdGlTZWxlY3RWYWx1ZShjb2x1bW4sIHJvdyk7XG4gIH1cblxuICBvbkNsZWFyVmFsdWUoY29sdW1uLCByb3cpIHtcbiAgICBpZiAoY29sdW1uPy50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04gJiYgIXJvd1tjb2x1bW4uZmllbGRdKSB7XG4gICAgICByb3dbY29sdW1uLmZpZWxkXSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gSW52b2tlIG9uQ2hhbmdlIEV2ZW50XG4gIG9uQ2hhbmdlRXZlbnQoY29sdW1uOiBhbnksIHJvdzogYW55KSB7XG4gICAgLy8gc2V0IGRyb3Bkb3duIGRpc3BsYXlGaWVsZCB2YWx1ZSBiYXNlIG9uIG9wdGlvbkxhYmVsICYgb3B0aW9uVmFsdWUuXG4gICAgdGhpcy5ncmlkVmFsaWRhdGlvbihjb2x1bW4sIHJvdywgdHJ1ZSlcbiAgICB0aGlzLmRpc3BsYXlGaWVsZERyb3Bkb3duVmFsdWUoY29sdW1uLCByb3cpO1xuICAgIHRoaXMub25DbGVhclZhbHVlKGNvbHVtbiwgcm93KTtcbiAgICB0aGlzLmJyb3dzZXJDbG9zZUV2ZW50KHRydWUpO1xuICAgIHRoaXMucm93VXBkYXRlQ2hhbmdlID0gdHJ1ZTtcbiAgICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgICBpZiAoY29sdW1uLm9uQ2hhbmdlKSB7XG4gICAgICBjb2x1bW4ub25DaGFuZ2Uocm93KTtcbiAgICB9XG4gICAgdGhpcy5zZXREcm9wZG93bmRhdGFWYWx1ZSA9IGZhbHNlXG4gICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnJvd1VwZGF0ZSA9IGZhbHNlO1xuICAgIHRoaXMuZ2VuZXJhdGVSb3dzRGF0YUNvcHkgPSBmYWxzZVxuICAgIGlmIChjb2x1bW4uYWdncmVnYXRlICYmIGNvbHVtbi5hZ2dyZWdhdGUubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5hZ2dyZWdhdGVGb290ZXIgPSB0cnVlO1xuICAgICAgdGhpcy5zZXRBZ2dyZWdhdGVUZXh0KGNvbHVtbik7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tCb3hDaGFuZ2VFdmVudChldmVudDogYW55LCBjb2x1bW46IElHcmlkQ29sdW1uLCByb3cpIHtcbiAgICByb3dbY29sdW1uLmZpZWxkXSA9IGV2ZW50O1xuICAgIGlmICh0aGlzLnJvd3NDaGFuZ2Uub2JzZXJ2ZXJzPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5ncmlkU2VydmljZS5yb3dVcGRhdGUgPSBmYWxzZTtcbiAgICB0aGlzLmdlbmVyYXRlUm93c0RhdGFDb3B5ID0gZmFsc2VcbiAgICB0aGlzLnJvd1VwZGF0ZUNoYW5nZSA9IHRydWVcbiAgICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgfVxuXG4gIC8vIHNldCBkcm9wZG93biBkaXNwbGF5RmllbGQgdmFsdWUgYmFzZSBvbiBvcHRpb25MYWJlbCAmIG9wdGlvblZhbHVlLlxuICBkaXNwbGF5RmllbGREcm9wZG93blZhbHVlKGNvbHVtbjogYW55LCByb3c6IGFueSkge1xuICAgIGlmIChcbiAgICAgIGNvbHVtbj8udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOICYmXG4gICAgICBjb2x1bW4uZGlzcGxheUZpZWxkICYmXG4gICAgICBjb2x1bW4uZGlzcGxheUZpZWxkPy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICBjb25zdCBrZXk6IGFueSA9IE9iamVjdC5rZXlzKHJvdyk/LmZpbmQoXG4gICAgICAgIChyb3dJbmZvKSA9PlxuICAgICAgICAgIHJvd0luZm8/LnRvTG93ZXJDYXNlKCkgPT09IGNvbHVtbi5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGRpc3BsYXlGaWVsZFZhbHVlID0gY29sdW1uLmRhdGEuZmluZChcbiAgICAgICAgKHJlY29yZDogYW55KSA9PlxuICAgICAgICAgIHJlY29yZFtjb2x1bW4ub3B0aW9uVmFsdWVdPy50b1N0cmluZygpID09PVxuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdPy50b1N0cmluZygpXG4gICAgICApO1xuICAgICAgaWYgKGtleSAmJiBkaXNwbGF5RmllbGRWYWx1ZSkge1xuICAgICAgICByb3dba2V5XSA9IGRpc3BsYXlGaWVsZFZhbHVlW2NvbHVtbi5vcHRpb25MYWJlbF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIGF1dG9TZWFyY2ggb24gR3JpZC5cbiAgYXV0b1NlYXJjaChldmVudDogYW55LCBjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcbiAgICBpZiAoZXZlbnQgJiYgY29sdW1uICYmIHJvdykge1xuICAgICAgY29sdW1uLm9uUmV0dXJuKGV2ZW50LnF1ZXJ5LCBjb2x1bW4sIHJvdyk7XG4gICAgfVxuICB9XG5cbiAgLy8gUmVmcmVzaCBncmlkXG4gIHJlZnJlc2hHcmlkKCkge1xuICAgIHRoaXMucmVsb2FkUGFnZSA9IGludGVydmFsKHRoaXMuc2V0R3JpZFJlZnJlc2hUaW1lKS5zdWJzY3JpYmUoKHgpID0+IHtcbiAgICAgIGlmICh0aGlzLmdyaWRmaWx0ZXIgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuZ3JpZGZpbHRlciA9IHsgZmlsdGVyczogW10sIHNvcnRzOiBbXSB9O1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2V0R3JpZFJlZnJlc2hUaW1lKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlU2VydmVyU2lkZUV2ZW50cyh0aGlzLmdyaWRmaWx0ZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gUmVtb3ZlIEZpbHRlclZhbHVlc1xuICBjbGVhcmdyaWRGaWx0ZXJzVmFsdWUoKSB7XG4gICAgY29uc3QgZ2xvYmFsRmlsdGVyQ2xlYXJWYWx1ZUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxuICAgICAgJ2NsZWFyR2xvYmFsRmlsdGVyQnRuJ1xuICAgICk7XG4gICAgaWYgKGdsb2JhbEZpbHRlckNsZWFyVmFsdWVCdG4pIHtcbiAgICAgIGdsb2JhbEZpbHRlckNsZWFyVmFsdWVCdG4uY2xpY2soKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zICYmIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgICBjb2wuZmlsdGVyVmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLmZpbHRlck9iaihjb2wpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZWRpdEFsbFJvd3NBdE9uY2UoKSB7XG4gICAgaWYgKHRoaXMuZWRpdFJvd1Blcm1pc3Npb24pIHtcbiAgICAgIGlmICh0aGlzLmdldENsYXNzRm9yRWRpdEFsbFJvd3MoJ2VkaXRSb3cnKSkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnMuc29tZSgoY29sdW1uKSA9PiBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4gJiYgKGNvbHVtbi5maWx0ZXJpbmcgPT09IHRydWUgfHwgY29sdW1uLmZpbHRlcmluZyA9PT0gdW5kZWZpbmVkKSkpIHtcbiAgICAgICAgICB0aGlzLmVkaXRBbGxSZWNvcmQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc29ydERpc2FibGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzYXZlQWxsUm93c0F0T25jZSgpIHtcbiAgICB0aGlzLmdldENsYXNzRm9yRWRpdEFsbFJvd3MoJ3NhdmVSb3cnKTtcbiAgfVxuXG4gIC8vIHJlc2V0IHRoZSBncmlkIHJvd3NWYWx1ZSB0byBvcmlnbmFsIHZhbHVlc1xuICBjYW5jZWxBbGxSb3dzQXRPbmNlKCkge1xuICAgIHRoaXMucm93c0RhdGEgPSBbLi4udGhpcy5yb3dzRGF0YUNvcHldO1xuICAgIHRoaXMucm93c0RhdGFDb3B5ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnJvd3NEYXRhKSk7XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnM/LmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSkge1xuICAgICAgICB0aGlzLnJvd3NEYXRhPy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZF0pIHtcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gbmV3IERhdGUocm93W2NvbHVtbi5maWVsZF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgIH0pO1xuICAgIGlmICh0aGlzLmNvbHVtbnM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSAmJiBjb2x1bW4uYWdncmVnYXRlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmFnZ3JlZ2F0ZUZvb3RlciA9IHRydWU7XG4gICAgICAgICAgdGhpcy5zZXRBZ2dyZWdhdGVUZXh0KGNvbHVtbik7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIHRoaXMub25DYW5jZWxBbGxSb3dzLmVtaXQodGhpcy5yb3dzRGF0YSk7XG4gIH1cblxuICBnZXRDbGFzc0ZvckVkaXRBbGxSb3dzKGNsYXNzTmFtZTogc3RyaW5nID0gJycpIHtcbiAgICBsZXQgc3VjY2VzczogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGNvbnN0IGdldEJ0bnM6IGFueSA9XG4gICAgICB0aGlzLmVsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQ/LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lKTtcbiAgICBpZiAoZ2V0QnRucyAmJiBnZXRCdG5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gJ3NhdmVSb3cnKSB7XG4gICAgICAgIHRoaXMuZWRpdEFsbFJlY29yZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNhdmVBbGxSZWNvcmQgPSB0cnVlO1xuICAgICAgICBjb25zdCByZWNvcmRzJCA9IFtdO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIGdldEJ0bnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd1NhdmUgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgIGl0ZW0uY2xpY2soKTtcbiAgICAgICAgICAgICAgcmVzb2x2ZShpdGVtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVjb3JkcyQucHVzaChyb3dTYXZlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgUHJvbWlzZS5hbGwocmVjb3JkcyQpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5jaGVja2xpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICB0aGlzLm9uUm93VXBkYXRlLmVtaXQodGhpcy5zZXRSb3dzRGF0YSh0aGlzLmNoZWNrbGlzdCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVSb3dzRGF0YUNvcHkgPSB0cnVlO1xuICAgICAgICAgICAgICB0aGlzLm9uUm93VXBkYXRlLmVtaXQodGhpcy5zYXZlUmVjb3JkQXJyYXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zYXZlUmVjb3JkQXJyYXkgPSBbXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgMjApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNhdmVBbGxSZWNvcmQgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBnZXRCdG5zKSB7XG4gICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PSAnY2FuY2VsUm93Jykge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIGl0ZW0uY2xpY2soKTtcbiAgICAgICAgICAgIH0sIDUwKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXRlbS5jbGljaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3VjY2VzcztcbiAgfVxuXG4gIC8vRm9jdXNlZCBjYWxlbmRhciBpbnB1dCBvbiBzZWxlY3QgZGF0ZVxuICBzZWxlY3REYXRlKGNvbHVtbjogYW55KSB7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29sdW1uLmZpZWxkKT8uZm9jdXMoKTtcbiAgfVxuXG4gIC8vYXBwbHkgZmlsdGVyIG9uIGdyaWQgd2hlbiBzZWFyY2ggYnRuIGNsaWNrZWRcbiAgYXBwbHlHaXJkRmlsdGVyQnRuKCkge1xuICAgIHRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkID0gZmFsc2U7XG4gICAgdGhpcy5ncmlkU2VydmljZS5yb3dVcGRhdGUgPSBmYWxzZTtcbiAgICB0aGlzLnJvd1VwZGF0ZUNoYW5nZSA9IGZhbHNlO1xuICAgIGxldCBmaWx0ZXJJbkRpYWxvZzogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncC1kaWFsb2cnKTtcbiAgICBsZXQgZ2xvYmFsRmlsdGVyQXBwbHlCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VhcmNoR2xvYmFsRmlsdGVyQnRuJyk7XG4gICAgaWYgKGZpbHRlckluRGlhbG9nICYmIGZpbHRlckluRGlhbG9nLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGdsb2JhbFNlYXJjaEJ0biA9IGZpbHRlckluRGlhbG9nWzBdPy5xdWVyeVNlbGVjdG9yKCcuZ2xvYmFsLXNlYXJjaCcpO1xuICAgICAgaWYgKGdsb2JhbFNlYXJjaEJ0bikge1xuICAgICAgICBnbG9iYWxTZWFyY2hCdG4uY2xpY2soKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGdsb2JhbEZpbHRlckFwcGx5QnRuKSB7XG4gICAgICBnbG9iYWxGaWx0ZXJBcHBseUJ0bi5jbGljaygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5ncmlkRmlsdGVyT2JqICYmIE9iamVjdC5rZXlzKHRoaXMuZ3JpZEZpbHRlck9iaikubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmFwcGx5RW50ZXJFdmVudChcbiAgICAgICAgICB0aGlzLmdyaWRGaWx0ZXJPYmouZmlsdGVyLFxuICAgICAgICAgIHRoaXMuZ3JpZEZpbHRlck9iai5ldmVudCxcbiAgICAgICAgICB0aGlzLmdyaWRGaWx0ZXJPYmouY29sdW1uXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gaW52b2tlIG11bHRpU2VsZWN0aW9uIGNsaWNrIGV2ZW50XG4gIG11bHRpQ2hlY2tCb3hPbmNsaWNrKHJvd0luZm86IGFueSwgZXZlbnQ6IGFueSwgc2luZ2xlU2VsZWN0aW9uOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAoIXNpbmdsZVNlbGVjdGlvbikge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocm93SW5mbykgJiYgcm93SW5mbz8ubGVuZ3RoID4gMCAmJiBldmVudD8udGFyZ2V0Py5hcmlhQ2hlY2tlZCkge1xuICAgICAgICB0aGlzLmNoZWNrbGlzdCA9IFsuLi5yb3dJbmZvXTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyb3dJbmZvKSAmJiBldmVudD8udGFyZ2V0Py5hcmlhQ2hlY2tlZCA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuY2hlY2tsaXN0ID0gW107XG4gICAgICB9XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocm93SW5mbykgJiYgZXZlbnQ/LnRhcmdldD8uYXJpYUNoZWNrZWQgJiYgIXRoaXMuY2hlY2tsaXN0LnNvbWUoKHJvdykgPT4gcm93LmlkID09IHJvd0luZm8uaWQpKSB7XG4gICAgICAgIHRoaXMuY2hlY2tsaXN0LnB1c2gocm93SW5mbyk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50Py50YXJnZXQ/LmFyaWFDaGVja2VkID09IG51bGwpIHtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tsaXN0LnNvbWUoKHJvdykgPT4gcm93Py5pZCA9PSByb3dJbmZvLmlkKSkge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jaGVja2xpc3QuZmluZEluZGV4KChyb3cpID0+IHJvdz8uaWQgPT0gcm93SW5mbz8uaWQpO1xuICAgICAgICAgIHRoaXMuY2hlY2tsaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMub25NdWx0aVNlbGVjdGlvbkNoYW5nZS5lbWl0KHRoaXMuc2V0Um93c0RhdGEodGhpcy5jaGVja2xpc3QpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jaGVja2xpc3QgPSBbcm93SW5mb11cbiAgICAgIHRoaXMub25NdWx0aVNlbGVjdGlvbkNoYW5nZS5lbWl0KHRoaXMuc2V0Um93c0RhdGEocm93SW5mbykpO1xuICAgIH1cbiAgfVxuXG4gIHNldFJvd3NEYXRhKHJvd3NEYXRhKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocm93c0RhdGEpKSB7XG4gICAgICByb3dzRGF0YS5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICByb3cgPSB0aGlzLnJlbW92ZVJvd09iaihyb3cpO1xuICAgICAgICByb3cgPSB0aGlzLmdyaWRTZXJ2aWNlLnNldFJvd1ZhbHVlKHJvdyk7XG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICByb3dzRGF0YSA9IHRoaXMucmVtb3ZlUm93T2JqKHJvd3NEYXRhKTtcbiAgICAgIHJvd3NEYXRhID0gdGhpcy5ncmlkU2VydmljZS5zZXRSb3dWYWx1ZShyb3dzRGF0YSk7XG4gICAgfVxuICAgIHJldHVybiByb3dzRGF0YTtcbiAgfVxuXG4gIHJlbW92ZVJvd09iaihyb3c6IGFueSkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgIGlmIChrZXlzPy5sZW5ndGggPiAwKSB7XG4gICAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCdfb2JqJykpIHtcbiAgICAgICAgICBkZWxldGUgcm93W2tleV07XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiByb3c7XG4gIH1cblxuICBhcHBseURyb3Bkb3duRmlsdGVyKGZpbHRlcjogYW55LCBldmVudDogYW55KSB7XG4gICAgZmlsdGVyKGV2ZW50LnRhcmdldCk7XG4gIH1cblxuICBzZWFyY2hEcm9wZG93bkZpbHRlcihmaWx0ZXI6IGFueSwgZXZlbnQ6IGFueSwgY29sdW1uOiBhbnkpIHtcbiAgICB0aGlzLnNldEZpbHRlckZvY3VzT3V0KGNvbHVtbiwgZmlsdGVyLCBldmVudCk7XG4gICAgdGhpcy5kcm9wRG93bkZpbHRlciA9IHsgZmlsdGVyOiBmaWx0ZXIsIGV2ZW50OiBldmVudCwgY29sdW1uOiBjb2x1bW4gfTtcbiAgICBpZiAoY29sdW1uLmFsbG93U2VhcmNoICE9PSB0cnVlKSB7XG4gICAgICB0aGlzLmFwcGx5RHJvcGRvd25GaWx0ZXIoZmlsdGVyLCBldmVudCk7XG4gICAgfVxuICB9XG5cbiAgbG9va3VwQ2xlYXJWYWx1ZShjb2x1bW46IElHcmlkQ29sdW1uLCByb3c/OiBhbnkpIHtcbiAgICBpZiAocm93KSB7XG4gICAgICBjb2x1bW4uZGlzcGxheUZpZWxkID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdID0gJycgOiAnJ1xuICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnRleHQgPyByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS50ZXh0ID0gJycgOiAnJ1xuICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgY29sdW1uLmZpbHRlclZhbHVlID0gJyc7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuY29sdW1ucy5maW5kSW5kZXgoKGNvbCkgPT4gY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zW2luZGV4XS5maWx0ZXJWYWx1ZSA9ICcnO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRGaWx0ZXJGb2N1c091dChjb2x1bW4pO1xuICAgIH1cbiAgICB0aGlzLmJyb3dzZXJDbG9zZUV2ZW50KHRydWUpO1xuICAgIGlmIChjb2x1bW4ub25DaGFuZ2UpIHtcbiAgICAgIGNvbHVtbi5vbkNoYW5nZShyb3cpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGludm9rZSB3aGVuIGNsaWNrIGhlYWRlciBjaGVja2JveCBmaWx0ZXJcbiAgY2xpY2tDaGVja0JveEZpbHRlcihjb2x1bW46IElHcmlkQ29sdW1uKSB7XG4gICAgaWYgKHRoaXMuZWRpdEFsbFJlY29yZCkge1xuICAgICAgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU5cbiAgICAgICAgJiZcbiAgICAgICAgY29sdW1uPy5maWx0ZXI/LnR5cGUgPT09ICdjaGVja2JveCcgJiYgY29sdW1uLmZpbHRlcmluZyAhPSBmYWxzZVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgaWYgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNhYmxlZCAhPT0gdHJ1ZSAmJiAhY29sdW1uLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IGNvbHVtbi5maWx0ZXJWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9uQ2hlY2tCb3hGaWx0ZXJDbGljay5lbWl0KGNvbHVtbik7XG4gIH1cbiAgLy9zZXQgaGVhZGVyIGNoZWNrYm94IHZhbHVlIGZvciBnZXR0aW5nIGFsbCBjb2x1bW5zIG9uIHN0YXkgYWRtaW5cbiAgc2V0SGVhZGVyQ2hlY2tCb3hWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5pc0luY2x1ZGVkQWxsQ29sdW1ucy5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIC8vIHNldCBjYWxlbmRhciAyIE9yIDQgZGlnaXQgeWVhciBmb3JtYXRcbiAgY2FsZW5kYXJJbnB1dFZhbHVlKGNvbHVtbjogYW55LCByb3c6IGFueSkge1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY29sdW1uLmZpZWxkICsgcm93W3RoaXMuZGF0YUtleV0pWzBdPy5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsICh2YWw6IGFueSkgPT4ge1xuICAgICAgY29uc3QgeWVhciA9IHZhbD8udGFyZ2V0Py52YWx1ZT8udG9TdHJpbmcoKT8uc3BsaXQoJy8nKVsyXTtcbiAgICAgIGlmICh5ZWFyICYmIHllYXIubGVuZ3RoID09PSA0KSB7XG4gICAgICAgIHRoaXMuY2FsZW5kYXJGb3JtYXQgPSAnbW0vZGQveXknO1xuICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IG5ldyBEYXRlKHZhbD8udGFyZ2V0Py52YWx1ZSk/LnRvTG9jYWxlRGF0ZVN0cmluZyhcImVuLVVTXCIpO1xuICAgICAgfSBlbHNlIGlmICh5ZWFyICYmIHllYXIubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuY2FsZW5kYXJGb3JtYXQgPSAnbW0vZGQveSc7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn0iLCI8ZGl2IGNsYXNzPVwiZ3JpZC1jb21wb25lbnQtd3JhcHBlclwiPlxuPHAtY29uZmlybURpYWxvZyBbc3R5bGVdPVwieyB3aWR0aDogJzUwdncnIH1cIiAqbmdJZj1cInVzZUlubGluZUNSVURcIiBrZXk9XCJoYW5kbGVJbmxpbmVDUlVEXCI+PC9wLWNvbmZpcm1EaWFsb2c+XG48cC1jb25maXJtRGlhbG9nIGNsYXNzPVwiZ3JpZC1jb21wb25lbnQtY29uZmlybS1kaWFsb2dcIiAqbmdJZj1cImNvbHVtbkFjdGlvbnMubGVuZ3RoID4gMFwiXG4gIGtleT1cImhhbmRsZWNvbHVtbkFjdGlvbnNcIj48L3AtY29uZmlybURpYWxvZz5cbjxkaXYgY2xhc3M9XCJnbG9iYWwtZmlsdGVyLWJ1dHRvbnMtd3JhcHBlclwiPlxuXG4gIDwhLS0gYnV0dG9uIGZvciBhcHBseSB2YWx1ZSBvbiBHcmlkIC0tPlxuICA8YnV0dG9uICpuZ0lmPVwiZmlsdGVyaW5nICYmICghaGlkZUZpbHRlciB8fCBzaG93RmlsdGVyYnRuKVwiIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiIGljb249XCJwaSBwaS1zZWFyY2hcIiAoY2xpY2spPVwiYXBwbHlHaXJkRmlsdGVyQnRuKClcIlxuICAgIFtjbGFzc109XCJcbiAgc2VhcmNoR3JpZEZpbHRlciA/ICdwLWJ1dHRvbi1zdWNjZXNzIGFwcGx5LWZpbHRlci1idG4gZmlsdGVyLWJ0bicgOiAnaGlkZS1jbGVhci1maWx0ZXItYnV0dG9uIGFwcGx5LWZpbHRlci1idG4gZmlsdGVyLWJ0bidcbiAgXCI+PC9idXR0b24+XG5cbiAgPCEtLSBidXR0b24gZm9yIGNsZWFyIHZhbHVlIG9uIEdyaWQgLS0+XG4gIDxidXR0b24gKm5nSWY9XCJmaWx0ZXJpbmcgJiYgKCFoaWRlRmlsdGVyIHx8IHNob3dGaWx0ZXJidG4pXCIgcEJ1dHRvbiBpZD1cImNsZWFyR3JpZEZpbHRlclZhbHVlc0J1dHRvblwiIHR5cGU9XCJidXR0b25cIlxuICAgIGljb249XCJwaSBwaS1yZXBsYXlcIiAoY2xpY2spPVwiY2xlYXJncmlkRmlsdGVyc1ZhbHVlKClcIiBbY2xhc3NdPVwiXG4gICAgICBjbGVhckdyaWRGaWx0ZXIgPyAnZmlsdGVyLWJ0bicgOiAnaGlkZS1jbGVhci1maWx0ZXItYnV0dG9uIGZpbHRlci1idG4nXG4gICAgICBcIiBjbGFzcz0nZ2xvYmFsLXJlZnJlc2ggZ2xvYmFsLWJ0bidcbiAgICA+PC9idXR0b24+XG5cbiAgPCEtLSBidXR0b24gZm9yIHNhdmUgYWxsIGdyaWQgYXQgb25jZSAtLT5cbiAgPGJ1dHRvbiBwQnV0dG9uICpuZ0lmPVwiZWRpdEFsbFJvd3MgJiYgZWRpdFJvd1Blcm1pc3Npb25cIiBpZD1cInNhdmVBbGxHcmlkVmFsdWVzXCJcbiAgICBpY29uPVwicGkgcGktY2hlY2tcIiBbbGFiZWxdPVwiJ1NhdmUnXCJcbiAgICBbY2xhc3NdPVwiaGlkZUdyaWRTYXZlQnV0dG9uID8gJ2hpZGUtY2xlYXItZmlsdGVyLWJ1dHRvbicgOiAndWktYnV0dG9uLWluZm8nXCIgdHlwZT1cImJ1dHRvblwiXG4gICAgKGNsaWNrKT1cInNhdmVBbGxSb3dzQXRPbmNlKClcIj48L2J1dHRvbj5cblxuICA8IS0tIGJ1dHRvbiBmb3IgY2FuY2VsIGFsbCBncmlkIGF0IG9uY2UgLS0+XG4gIDxidXR0b24gcEJ1dHRvbiAqbmdJZj1cImVkaXRBbGxSb3dzICYmICFoaWRlR3JpZENhbmNlbEJ1dHRvblwiIGlkPVwiZWRpdEJ0bkdsb2JhbHZhbHVlc1wiIHR5cGU9XCJidXR0b25cIiBbbGFiZWxdPVwiJ0NhbmNlbCdcIlxuICAgIGljb249XCJwaSBwaS10aW1lc1wiIGNsYXNzPVwidWktYnV0dG9uLWluZm9cIiAoY2xpY2spPVwiY2FuY2VsQWxsUm93c0F0T25jZSgpXCI+PC9idXR0b24+XG5cbiAgPCEtLSBoZWFkZXIgQnV0dG9uIGZvciBtdWx0aVNlbGVjdCBvbiBHcmlkIC0tPlxuICA8c3BhbiAqbmdJZj1cImFsbG93Q29sdW1uVG9nZ2xlXCI+XG4gICAgPHAtbXVsdGlTZWxlY3QgW3Nob3dUb2dnbGVBbGxdPVwiZmFsc2VcIiBbb3B0aW9uc109XCJjb2x1bW5zXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZENvbHVtbnNcIiBvcHRpb25MYWJlbD1cImhlYWRlclwiXG4gICAgICBzZWxlY3RlZEl0ZW1zTGFiZWw9XCJ7MH0gY29sdW1ucyBzZWxlY3RlZFwiICBjbGFzcz1cImdyaWQtY29tcG9uZW50LW11bHRpc2VsZWN0LWhlYWRlci1idXR0b25cIiBwbGFjZWhvbGRlcj1cIkNob29zZSBDb2x1bW5zXCI+XG4gICAgPC9wLW11bHRpU2VsZWN0PlxuICA8L3NwYW4+XG5cbiAgPCEtLSBoZWFkZXIgQnV0dG9uIGZvciBBZGRpbmcgbmV3IFJvdyBvbiBHcmlkIC0tPlxuICA8YnV0dG9uIHBCdXR0b24gKm5nSWY9XCJ1c2VJbmxpbmVDUlVEICYmIGFkZFJvd1Blcm1pc3Npb24gJiYgIWhpZGVBZGRCdG5cIiB0eXBlPVwiYnV0dG9uXCIgW2xhYmVsXT1cIidBZGQnXCIgcEFkZFJvd1xuICAgIFt0YWJsZV09XCJjb21wb25lbnRUYWJsZVJlZlwiIFtuZXdSb3ddPVwibmV3R3JpZFJvd1wiIFtpZF09XCJkYXRhS2V5XCIgcFRvb2x0aXA9XCJBZGQgTmV3IFJvd1wiIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiXG4gICAgaWNvbj1cInBpIHBpLXBsdXNcIiBjbGFzcz1cInVpLWJ1dHRvbi1pbmZvIGdsb2JhbC1hZGQtYnRuXCIgKGNsaWNrKT1cImFkZE5ld1JvdyhuZXdHcmlkUm93LCB0cnVlKVwiIHBSaXBwbGU+PC9idXR0b24+XG5cbiAgICBcbiAgPCEtLSBoZWFkZXIgQnV0dG9uIGZvciBFeGNlbCBGaWxlIG9uIEdyaWQgLS0+XG4gIDxidXR0b24gKm5nSWY9XCJhbGxvd0V4cG9ydFRvRXhjZWxcIiB0eXBlPVwiYnV0dG9uXCIgcEJ1dHRvbiBpY29uPVwicGkgcGktZmlsZS1leGNlbFwiIChjbGljayk9XCJleHBvcnRFeGNlbCgpXCJcbiAgY2xhc3M9XCJwLWJ1dHRvbi1zdWNjZXNzXCIgcFRvb2x0aXA9XCJFeHBvcnQgdG8gRXhjZWxcIiB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIiBwUmlwcGxlPjwvYnV0dG9uPlxuXG48IS0tIGhlYWRlciBCdXR0b24gZm9yIFBERiBGaWxlIG9uIEdyaWQgLS0+XG48YnV0dG9uICpuZ0lmPVwiYWxsb3dFeHBvcnRUb1BkZlwiIHR5cGU9XCJidXR0b25cIiBwQnV0dG9uIGljb249XCJwaSBwaS1maWxlLXBkZlwiIChjbGljayk9XCJleHBvcnRQZGYoKVwiXG4gIGNsYXNzPVwicC1idXR0b24td2FybmluZyBtci0yIG1sLTJcIiBwVG9vbHRpcD1cIkV4cG9ydCB0byBQZGZcIiB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIiBwUmlwcGxlPjwvYnV0dG9uPlxuXG4gIDwhLS0gPGRpdiAqbmdGb3I9XCJsZXQgcmVwb3J0QnV0dG9uIG9mIHJlcG9ydEJ1dHRvbnNcIiBjbGFzcz1cInVpLWJ1dHRvbi1pbmZvIG1yLTIgbWwtMlwiPlxuICAgIDxzZS1nZW5lcmF0ZS1yZXBvcnQtYnRuICpuZ0lmID1cIiFyZXBvcnRCdXR0b24uaGlkZGVuXCJbcmVwSWRdPVwicmVwb3J0QnV0dG9uLnJlcG9ydElkXCIgW2xhYmVsXT1cInJlcG9ydEJ1dHRvbi5sYWJlbFwiIFtwYXJhbXNdPVwicmVwb3J0QnV0dG9uLnBhcmFtc1wiXG4gICAgICBbc2hvd0RpYWxvZ109XCJyZXBvcnRCdXR0b24uc2hvd0RpYWxvZ1wiPjwvc2UtZ2VuZXJhdGUtcmVwb3J0LWJ0bj5cbiAgPC9kaXY+IC0tPlxuXG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cblxuICA8bmctY29udGFpbmVyICAqbmdGb3I9XCJsZXQgcmVwb3J0QnV0dG9uIG9mIHJlcG9ydEJ1dHRvbnNcIj5cbiAgICA8c2UtZ2VuZXJhdGUtcmVwb3J0LWJ0biAqbmdJZiA9XCIhcmVwb3J0QnV0dG9uLmhpZGRlblwiW3JlcElkXT1cInJlcG9ydEJ1dHRvbi5yZXBvcnRJZFwiIFtsYWJlbF09XCJyZXBvcnRCdXR0b24ubGFiZWxcIiBbcGFyYW1zXT1cInJlcG9ydEJ1dHRvbi5wYXJhbXNcIiBbaWNvbl09XCJyZXBvcnRCdXR0b24uaWNvblwiIFtjbGFzc109XCJyZXBvcnRCdXR0b24uY2xhc3NcIlxuICAgIFtzaG93RGlhbG9nXT1cInJlcG9ydEJ1dHRvbi5zaG93RGlhbG9nXCI+PC9zZS1nZW5lcmF0ZS1yZXBvcnQtYnRuPlxuICA8L25nLWNvbnRhaW5lcj5cblxuPC9kaXY+XG5cbiAgPHAtdGFibGUgKm5nSWY9XCIhaXNHcmlkSGlkZGVuXCIgaWQ9XCJteS10YWJsZVwiIFt2YWx1ZV09XCJyb3dzRGF0YVwiIFtjb2x1bW5zXT1cInNlbGVjdGVkQ29sdW1uc1wiIHNvcnRNb2RlPVwibXVsdGlwbGVcIlxuICAgIFtsYXp5XT1cInVzZVNlcnZlclNpZGVFdmVudHNcIiBbcGFnaW5hdG9yXT1cInBhZ2luYXRpb25cIiBbYWx3YXlzU2hvd1BhZ2luYXRvcl09XCJwYWdpbmF0aW9uICYmIHRvdGFsUmVjb3JkcyA+IDBcIiBbY2xhc3NdPVwicGFnaW5hdGlvbiB8fCAhcm93c0RhdGEubGVuZ3RoID8gJ3BhZ2luYXRpb24nIDogJydcIlxuICAgIGNsYXNzPVwiZ3JpZC1jb21wb25lbnQtbWFpbi10YWJsZVwiXG4gICAgW3Jlc2l6YWJsZUNvbHVtbnNdPVwidHJ1ZVwiIFthdXRvTGF5b3V0XT1cInRydWVcIlxuICAgICByZXNwb25zaXZlTGF5b3V0PVwic2Nyb2xsXCIgY29sdW1uUmVzaXplTW9kZT1cImV4cGFuZFwiXG4gICAgW3Jvd3NdPVwiZGVmYXVsdFJvd3NcIiBbdG90YWxSZWNvcmRzXT1cInRvdGFsUmVjb3Jkc1wiIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwic2V0UGFnaW5hdGlvbkxlbmd0aFwiXG4gICAgW3Nob3dDdXJyZW50UGFnZVJlcG9ydF09XCJzaG93Q3VycmVudFBhZ2VSZXBvcnRcIiBjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlPVwiU2hvd2luZyB7Zmlyc3R9IHRvIHtsYXN0fSBvZiB7e1xuICAgICAgdG90YWxSZWNvcmRzXG4gICAgfX0gZW50cmllc1wiIFtsb2FkaW5nXT1cImF1dG9Mb2FkRGF0YSAmJiAhc2V0R3JpZFJlZnJlc2hUaW1lID8gbG9hZGluZyA6IGZhbHNlXCJcbiAgICAob25Tb3J0KT1cInNvcnREaXNhYmxlZCA/PyBoYW5kbGVTb3J0Q2hhbmdlKCRldmVudClcIiAob25GaWx0ZXIpPVwiaGFuZGxlRmlsdGVyQ2hhbmdlKCRldmVudClcIlxuICAgIChvbkxhenlMb2FkKT1cImF1dG9Mb2FkRGF0YSA/IGhhbmRsZVNlcnZlclNpZGVFdmVudHMoJGV2ZW50KSA6ICcnXCIgKG9uUGFnZSk9XCJoYW5kbGVTZXJ2ZXJTaWRlUGFnaW5hdGlvbigkZXZlbnQpXCIgI2R0XG4gICAgW2RhdGFLZXldPVwiZGF0YUtleVwiIFsoc2VsZWN0aW9uKV09XCJzZWxlY3RlZFJvd3NcIiBzZWxlY3Rpb25Nb2RlPVwibXVsdGlwbGVcIiBbc2Nyb2xsYWJsZV09XCJzY3JvbGxhYmxlXCIgXG4gICAgW3RhYmxlU3R5bGVdPVwidGFibGVTdHlsZVwiXG4gICAgW3Njcm9sbEhlaWdodF09XCJzY3JvbGxIZWlnaHRcIlxuICAgIGVkaXRNb2RlPVwicm93XCIgW2VkaXRpbmdSb3dLZXlzXT1cImVkaXRpbmdSb3dLZXlzXCIgW2F1dG9MYXlvdXRdPVwidHJ1ZVwiIFtyb3dIb3Zlcl09XCJyb3dIb3ZlclwiXG4gICAgW25nQ2xhc3NdPVwieydob3Jpem9udGFsLXNjcm9sbCc6IGhvcml6b250YWxTY3JvbGwgPT09IHRydWUgPyB0cnVlIDogZmFsc2V9XCI+XG4gICAgPCEtLSBbdGFibGVTdHlsZV09XCInbWF4LWhlaWdodDogJyArIHNjcm9sbEhlaWdodCArICc7ICcgKyB0YWJsZVN0eWxlXCIgLS0+XG4gICAgPCEtLSBbdGFibGVTdHlsZV09XCJ7ICdtYXgtaGVpZ2h0Jzogc2Nyb2xsSGVpZ2h0IH1cIiAtLT5cbiAgICA8IS0tIGhlYWRlciBCdXR0b24gZm9yIEFjdGlvbiBvbiBHcmlkIC0tPlxuICAgIDwhLS0gW3Njcm9sbEhlaWdodF09XCInZmxleCdcIiAtLT5cblxuICAgIDxkaXYgKm5nSWY9XCJyb3dBY3Rpb25zLmxlbmd0aCA+IDAgJiYgcm93QWN0aW9ucy5sZW5ndGggPiAwXCIgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cbiAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCByb3dBY3Rpb24gb2Ygcm93QWN0aW9uc1wiPlxuICAgICAgICA8YnV0dG9uIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiIFtsYWJlbF09XCJyb3dBY3Rpb24udGl0bGVcIiBbY2xhc3NdPVwicm93QWN0aW9uLmNsYXNzXCJcbiAgICAgICAgICAoY2xpY2spPVwicm93QWN0aW9uLm9uQ2xpY2soc2VsZWN0ZWRSb3dzKVwiPjwvYnV0dG9uPlxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBoZWFkZXIgY29sdW1ucyBvbiBHcmlkIC0tPlxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIiBsZXQtY29scz5cbiAgICAgIDx0cj5cbiAgICAgICAgPHRoIHBSZXNpemFibGVDb2x1bW4gKm5nSWY9XCJhbGxvd1NlbGVjdGlvbiAmJiBzZWxlY3Rpb25UeXBlID09PSAnbXVsdGlwbGUnXCIgY2xhc3M9XCJncmlkLWNvbXBvbmVudC1zZWxlY3Rpb25cIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRoLWNvbnRlbnQtd3JhcHBlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQtY29tcG9uZW50LXRhYmxlLWhlYWRlci1pbm5lci1kaXYtMlxuICAgICAgICAgICAgICAgICAgdGFibGUtaGVhZGVyLWlubmVyLWRpdiBkaXYtbGFzdC1pbm5lci1odG1sLWlzLWljb25cIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmbGV4LWdyb3ctMVwiPiB7e2FsbG93U2VsZWN0aW9uSGVhZGVyfX0gPC9zcGFuPlxuICAgICAgICAgICAgICA8cC10YWJsZUhlYWRlckNoZWNrYm94ICpuZ0lmPVwic2VsZWN0aW9uVHlwZSA9PT0gJ211bHRpcGxlJ1wiIGJpbmFyeT1cInRydWVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJtdWx0aUNoZWNrQm94T25jbGljayhyb3dzRGF0YSwgJGV2ZW50KVwiPjwvcC10YWJsZUhlYWRlckNoZWNrYm94PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggcFJlc2l6YWJsZUNvbHVtbiAqbmdJZj1cImFsbG93U2VsZWN0aW9uICYmIHNlbGVjdGlvblR5cGUgPT09ICdzaW5nbGUnXCIgXG4gICAgICAgICAgICAgIGNsYXNzPVwiZ3JpZC1jb21wb25lbnQtc2VsZWN0aW9uXCI+XG4gICAgICAgICAgU2VsZWN0XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCBwUmVzaXphYmxlQ29sdW1uXG4gICAgICAgICAgKm5nSWY9XCJzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmICFkaXNhYmxlZFNhdmVCdG4gJiYgY29sdW1ucz8ubGVuZ3RoID4gMCAmJiAoY29sdW1uQWN0aW9ucy5sZW5ndGggPiAwIHx8ICh1c2VJbmxpbmVDUlVEICYmIChkZWxldGVSb3dQZXJtaXNzaW9uIHx8IGVkaXRSb3dQZXJtaXNzaW9uKSkpXCJcbiAgICAgICAgICBbY2xhc3NdPVwiaW5FZGl0TW9kZSA/ICd0aHJlZS1hY3Rpb24tYnRuJyA6ICd0d28tYWN0aW9uLWJ0bidcIj5cbiAgICAgICAgICBBY3Rpb25zXG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCBwUmVzaXphYmxlQ29sdW1uICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sc1wiIFtwU29ydGFibGVDb2x1bW5dPVwiY29sdW1uLmZpZWxkXCJcbiAgICAgICAgICBbc3R5bGVdPVwiY29sdW1uLnN0eWxlXCJcbiAgICAgICAgICBbY2xhc3NdPVwiY29sdW1uLnR5cGUgPT09ICdib29sZWFuJyA/ICdjaGVja2JveC10aCcgOiAnJ1wiXG4gICAgICAgICAgW3BTb3J0YWJsZUNvbHVtbkRpc2FibGVkXT1cInNvcnREaXNhYmxlZCAmJiB1c2VTZXJ2ZXJTaWRlRXZlbnRzID8gdHJ1ZSA6IGNvbHVtbi5zb3J0aW5nID09PSBmYWxzZVwiXG4gICAgICAgICAgY2xhc3M9XCJjb2x1bW4/LnR5cGUgPT09ICdtdWx0aXBsZScgPyAnZ3JpZC1jb21wb25lbnQtc2VsZWN0LXRoLWNvbHVtbi10eXBlLW11bHRpcGxlJyA6ICcnXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aC1jb250ZW50LXdyYXBwZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkLWNvbXBvbmVudC10YWJsZS1oZWFkZXItaW5uZXItZGl2LTEgdGFibGUtaGVhZGVyLWlubmVyLWRpdiBkaXYtbGFzdC1pbm5lci1odG1sLWlzLWljb25cIj4gICAgICAgIFxuICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiJ2ZsZXgtZ3Jvdy0xJ1wiPnt7IGNvbHVtbi5oZWFkZXIgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uLmlzUmVxdWlyZWRcIiBjbGFzcz1cImdyaWQtY29tcG9uZW50IHJlcXVpcmVkLXN0YXJcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICA8cC1zb3J0SWNvbiAqbmdJZj1cImNvbHVtbi5zb3J0aW5nICE9PSBmYWxzZSAmJiBjb2x1bW4/LnR5cGUgIT09ICdtdWx0aXBsZSdcIlxuICAgICAgICAgICAgICAgIFtmaWVsZF09XCJjb2x1bW4uZmllbGRcIj48L3Atc29ydEljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggcFJlc2l6YWJsZUNvbHVtblxuICAgICAgICAgICpuZ0lmPVwiIXNldEFjdGlvbkNvbHVtbkFzRmlyc3QgJiYgIWRpc2FibGVkU2F2ZUJ0biAmJiBjb2x1bW5zPy5sZW5ndGggPiAwICYmIChjb2x1bW5BY3Rpb25zLmxlbmd0aCA+IDAgfHwgKHVzZUlubGluZUNSVUQgJiYgKGRlbGV0ZVJvd1Blcm1pc3Npb24gfHwgZWRpdFJvd1Blcm1pc3Npb24pKSlcIlxuICAgICAgICAgIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiPkFjdGlvbnM8L3RoPlxuICAgICAgPC90cj5cbiAgICAgIDx0ciAqbmdJZj1cImZpbHRlcmluZyAmJiAhaGlkZUZpbHRlclwiPlxuICAgICAgICA8dGggcFJlc2l6YWJsZUNvbHVtbiAqbmdJZj1cImFsbG93U2VsZWN0aW9uXCIgW2NsYXNzXT1cImluRWRpdE1vZGUgPyAndGhyZWUtYWN0aW9uLWJ0bicgOiAndHdvLWFjdGlvbi1idG4nXCI+PC90aD5cbiAgICAgICAgPHRoIHBSZXNpemFibGVDb2x1bW4gKm5nSWY9XCJzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmICFkaXNhYmxlZFNhdmVCdG5cIlxuICAgICAgICAgIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggcFJlc2l6YWJsZUNvbHVtbiAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHNcIiBbbmdTd2l0Y2hdPVwiY29sdW1uPy5maWx0ZXI/LnR5cGVcIiBbc3R5bGVdPVwiY29sdW1uLnN0eWxlXCJcbiAgICAgICAgICBbY2xhc3NdPVwiaGlkZUZpbHRlck9wdGlvbnMgPyAnaGlkZS10YWJsZS1maWx0ZXInIDogJydcIj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbHVtbi5maWx0ZXJpbmcgIT09IGZhbHNlXCIgW2NsYXNzXT1cImNvbHVtbi5maWx0ZXI/LnNob3dGaWx0ZXIgPyAnJyA6ICdoaWRlLWZpbHRlci1pY29uJ1wiPlxuICAgICAgICAgICAgPCEtLSBUZXh0IGlucHV0IG9uIEhlYWRlciBGb3IgRmlsdGVyLS0+XG4gICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgY2xhc3M9XCJuby1maWx0ZXItaWNvblwiIFt0eXBlXT1cIid0ZXh0J1wiIFtmaWVsZF09XCJjb2x1bW4uZmllbGRcIiAqbmdTd2l0Y2hDYXNlPVwiJ2lucHV0J1wiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZmlsdGVyXCIgbGV0LXZhbHVlIGxldC1maWx0ZXI9XCJmaWx0ZXJDYWxsYmFja1wiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwiY29sdW1uLmZpbHRlclZhbHVlXCIgKGtleXVwLmVudGVyKT1cImFwcGx5RW50ZXJFdmVudChmaWx0ZXIsICRldmVudCwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAoYmx1cik9XCJzZXRGaWx0ZXJGb2N1c091dChjb2x1bW4sIGZpbHRlciwgJGV2ZW50KVwiIChrZXlkb3duKT1cImJhY2tzcGFjZUV2ZW50KCRldmVudCwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAoa2V5dXApPVwicmVtb3ZpbmdGaWx0ZXJzKCRldmVudCwgY29sdW1uKVwiIHBJbnB1dFRleHQgLz5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvcC1jb2x1bW5GaWx0ZXI+XG5cbiAgICAgICAgICAgIDwhLS0gTnVtZXJpYyBpbnB1dCBvbiBIZWFkZXIgRm9yIEZpbHRlci0tPlxuICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyIGNsYXNzPVwibm8tZmlsdGVyLWljb25cIiBbdHlwZV09XCInbnVtZXJpYydcIiBbZmllbGRdPVwiY29sdW1uLmZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIidudW1lcmljX2lucHV0J1wiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZmlsdGVyXCIgbGV0LXZhbHVlIGxldC1maWx0ZXI9XCJmaWx0ZXJDYWxsYmFja1wiPlxuICAgICAgICAgICAgICAgIDxwLWlucHV0TnVtYmVyIFsobmdNb2RlbCldPVwiY29sdW1uLmZpbHRlclZhbHVlXCIgKGtleXVwLmVudGVyKT1cImFwcGx5RW50ZXJFdmVudChmaWx0ZXIsICRldmVudCwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAob25CbHVyKT1cInNldEZpbHRlckZvY3VzT3V0KGNvbHVtbiwgZmlsdGVyLCAkZXZlbnQpXCIgKGtleWRvd24pPVwiYmFja3NwYWNlRXZlbnQoJGV2ZW50LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgIChrZXl1cCk9XCJyZW1vdmluZ0ZpbHRlcnMoJGV2ZW50LCBjb2x1bW4pXCI+PC9wLWlucHV0TnVtYmVyPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9wLWNvbHVtbkZpbHRlcj5cblxuICAgICAgICAgICAgICA8IS0tIGxvb2t1cCBpbnB1dCBvbiBIZWFkZXIgRm9yIEZpbHRlci0tPlxuICAgICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm5vLWZpbHRlci1pY29uXCJcbiAgICAgICAgICAgICAgICBbdHlwZV09XCIndGV4dCdcIlxuICAgICAgICAgICAgICAgIFtmaWVsZF09XCJjb2x1bW4uZmllbGRcIlxuICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInbG9va3VwX2lucHV0J1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgIHBUZW1wbGF0ZT1cImZpbHRlclwiXG4gICAgICAgICAgICAgICAgICBsZXQtdmFsdWVcbiAgICAgICAgICAgICAgICAgIGxldC1maWx0ZXI9XCJmaWx0ZXJDYWxsYmFja1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsb3NlLWljb24td3JhcHBlciBncmlkLWNvbXBvbmVudCBsb29rdXAtZmlsdGVyLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvb2t1cC1maWx0ZXItaW5wdXQtd3JhcHBlclwiPiBcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfZmlsdGVyJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJncmlkLWNvbXBvbmVudCBsb29rdXAtZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbHVtbi5maWx0ZXJWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNldEZpbHRlckxvb2t1cChjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiYXBwbHlFbnRlckV2ZW50KGZpbHRlciwgJGV2ZW50LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJzZXRGaWx0ZXJGb2N1c091dChjb2x1bW4sIGZpbHRlciwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiYmFja3NwYWNlRXZlbnQoJGV2ZW50LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwicmVtb3ZpbmdGaWx0ZXJzKCRldmVudCwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgcElucHV0VGV4dFxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gIFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGlyZWN0LXdyYXBwZXItY2xvc2UtaWNvbi1sb29rdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbHVtbi5maWx0ZXJWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktdGltZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibG9va3VwQ2xlYXJWYWx1ZShjb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9wLWNvbHVtbkZpbHRlcj5cblxuICAgICAgICAgICAgPCEtLSBjaGVja2JveCBvbiBIZWFkZXIgRm9yIEZpbHRlci0tPlxuICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyIGNsYXNzPVwibm8tZmlsdGVyLWljb25cIiB0eXBlPVwiYm9vbGVhblwiIFtmaWVsZF09XCJjb2x1bW4uZmllbGRcIiAqbmdTd2l0Y2hDYXNlPVwiJ2NoZWNrYm94J1wiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZmlsdGVyXCIgbGV0LXZhbHVlIGxldC1maWx0ZXI9XCJmaWx0ZXJDYWxsYmFja1wiPlxuICAgICAgICAgICAgICAgIDxwLWNoZWNrYm94IFtiaW5hcnldPVwidHJ1ZVwiIFtkaXNhYmxlZF09XCJjb2x1bW4uZGlzYWJsZWRcIiBbKG5nTW9kZWwpXT1cImNvbHVtbi5maWx0ZXJWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiYXBwbHlFbnRlckV2ZW50KGZpbHRlciwgJGV2ZW50LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJzZXRGaWx0ZXJGb2N1c091dChjb2x1bW4sIGZpbHRlciwgJGV2ZW50KVwiIChjbGljayk9XCJjbGlja0NoZWNrQm94RmlsdGVyKGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiYmFja3NwYWNlRXZlbnQoJGV2ZW50LCBjb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgPC9wLWNoZWNrYm94PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9wLWNvbHVtbkZpbHRlcj5cblxuICAgICAgICAgICAgPCEtLSBtdWx0aVNlbGVjdCBvbiBIZWFkZXIgRm9yIEZpbHRlci0tPlxuICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyIGNsYXNzPVwibm8tZmlsdGVyLWljb25cIiBbZmllbGRdPVwiY29sdW1uLmZpZWxkXCIgbWF0Y2hNb2RlPVwiaW5cIiBbc2hvd01lbnVdPVwiZmFsc2VcIiAqbmdTd2l0Y2hDYXNlPVwiJ211bHRpLXNlbGVjdCdcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZpbHRlclwiIGxldC12YWx1ZSBsZXQtZmlsdGVyPVwiZmlsdGVyQ2FsbGJhY2tcIj5cbiAgICAgICAgICAgICAgICA8cC1tdWx0aVNlbGVjdCBbKG5nTW9kZWwpXT1cImNvbHVtbi5maWx0ZXJWYWx1ZVwiIFtvcHRpb25zXT1cImNvbHVtbi5maWx0ZXIuZGF0YSB8fCBbXVwiIFxuICAgICAgICAgICAgICAgIFthcHBlbmRUb109XCInYm9keSdcIiBbbmFtZV09XCJjb2x1bW4uZmllbGRcIlxuICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJhcHBseUVudGVyRXZlbnQoZmlsdGVyLCAkZXZlbnQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgIFtvcHRpb25WYWx1ZV09XCJjb2x1bW4ub3B0aW9uVmFsdWVcIlxuICAgICAgICAgICAgICAgICBbb3B0aW9uTGFiZWxdPVwiY29sdW1uLm9wdGlvbkxhYmVsXCJcbiAgICAgICAgICAgICAgICAgIChibHVyKT1cInNldEZpbHRlckZvY3VzT3V0KGNvbHVtbiwgZmlsdGVyLCAkZXZlbnQpXCIgXG4gICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJiYWNrc3BhY2VFdmVudCgkZXZlbnQsIGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICA8L3AtbXVsdGlTZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3AtY29sdW1uRmlsdGVyPlxuXG4gICAgICAgICAgICA8IS0tIGRyb3Bkb3duIG9uIEhlYWRlciBGb3IgRmlsdGVyLS0+XG4gICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgY2xhc3M9XCJuby1maWx0ZXItaWNvblwiIFtmaWVsZF09XCJjb2x1bW4uZmllbGRcIiBtYXRjaE1vZGU9XCJpblwiIFtzaG93TWVudV09XCJmYWxzZVwiICpuZ1N3aXRjaENhc2U9XCInZHJvcGRvd24nXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmaWx0ZXJcIiBsZXQtdmFsdWUgbGV0LWZpbHRlcj1cImZpbHRlckNhbGxiYWNrXCI+XG4gICAgICAgICAgICAgICAgPHAtZHJvcGRvd24gW3Nob3dDbGVhcl09XCJ0cnVlXCIgW3BsYWNlaG9sZGVyXT1cIidTZWxlY3QnXCIgW2ZpbHRlcl09XCJjb2x1bW4uYWxsb3dTZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb2x1bW4uZmlsdGVyVmFsdWVcIiAoa2V5dXAuZW50ZXIpPVwiYXBwbHlEcm9wZG93bkZpbHRlcihmaWx0ZXIsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiY29sdW1uLmZpbHRlci5kYXRhIHx8IFtdXCJcbiAgICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJzZWFyY2hEcm9wZG93bkZpbHRlcihmaWx0ZXIsICRldmVudCwgY29sdW1uKVwiPjwvcC1kcm9wZG93bj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvcC1jb2x1bW5GaWx0ZXI+XG5cbiAgICAgICAgICAgIDwhLS0gY2FsZW5kYXIgb24gSGVhZGVyIEZvciBGaWx0ZXItLT5cbiAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlciBjbGFzcz1cIm5vLWZpbHRlci1pY29uXCIgW2ZpZWxkXT1cImNvbHVtbi5maWVsZFwiIG1hdGNoTW9kZT1cImluXCIgW3Nob3dNZW51XT1cImZhbHNlXCIgKm5nU3dpdGNoQ2FzZT1cIidjYWxlbmRhcidcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZpbHRlclwiIGxldC12YWx1ZSBsZXQtZmlsdGVyPVwiZmlsdGVyQ2FsbGJhY2tcIj5cbiAgICAgICAgICAgICAgICA8cC1jYWxlbmRhciBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdC1EYXRlJ1wiIFsobmdNb2RlbCldPVwiY29sdW1uLmZpbHRlclZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJhcHBseUVudGVyRXZlbnQoZmlsdGVyLCAkZXZlbnQsIGNvbHVtbilcIiBhcHBlbmRUbz1cImJvZHlcIiAob25TZWxlY3QpPVwic2VsZWN0RGF0ZShjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgIFtpbnB1dElkXT1cImNvbHVtbi5maWVsZFwiIGhvdXJGb3JtYXQ9XCIxMlwiIChrZXl1cC5iYWNrc3BhY2UpPVwicmVtb3ZlTnVsbENhbGVuZGFyKGNvbHVtbiwgZmlsdGVyLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIFtzaG93QnV0dG9uQmFyXT1cInRydWVcIiAob25DbG9zZSk9XCJzZXRGaWx0ZXJGb2N1c091dChjb2x1bW4sIGZpbHRlciwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJiYWNrc3BhY2VFdmVudCgkZXZlbnQsIGNvbHVtbilcIiAob25DbGVhckNsaWNrKT1cImJhY2tzcGFjZUV2ZW50KCRldmVudCwgY29sdW1uKVwiPlxuICAgICAgICAgICAgICAgIDwvcC1jYWxlbmRhcj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvcC1jb2x1bW5GaWx0ZXI+XG5cbiAgICAgICAgICAgIDwhLS0gRGVmYXVsdCBGaWx0ZXIgRm9yIEhlYWRlciAgLS0+XG4gICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgY2xhc3M9XCJuby1maWx0ZXItaWNvblwiIFt0eXBlXT1cIlxuICAgICAgICAgICAgICAgIGNvbHVtbi50eXBlICYmIGNvbHVtbi50eXBlICE9PSAnbGluaycgPyBjb2x1bW4udHlwZSA6ICd0ZXh0J1xuICAgICAgICAgICAgICBcIiBbZmllbGRdPVwiY29sdW1uLmZpZWxkXCIgZGlzcGxheT1cIm1lbnVcIiAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgICAgPC9wLWNvbHVtbkZpbHRlcj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCBwUmVzaXphYmxlQ29sdW1uXG4gICAgICAgICAgKm5nSWY9XCIhc2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiAhZGlzYWJsZWRTYXZlQnRuICYmIGNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYgKGNvbHVtbkFjdGlvbnMubGVuZ3RoID4gMCB8fCAodXNlSW5saW5lQ1JVRCAmJiAoZGVsZXRlUm93UGVybWlzc2lvbiB8fCBlZGl0Um93UGVybWlzc2lvbikpKVwiXG4gICAgICAgICAgW2NsYXNzXT1cImluRWRpdE1vZGUgPyAndGhyZWUtYWN0aW9uLWJ0bicgOiAndHdvLWFjdGlvbi1idG4nXCI+PC90aD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDwhLS0gQm9keSBjb2x1bW5zIG9uIEdyaWQgLS0+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtcm93IGxldC1lZGl0aW5nPVwiZWRpdGluZ1wiIGxldC1yaT1cInJvd0luZGV4XCI+XG4gICAgICA8dHIgXG4gICAgICBbc3R5bGVdPVwicm93U3R5bGVcIlxuICAgICAgW25nQ2xhc3NdPVwicm93Py5oaWdobGlnaHRyb3cgPyAnaGlnaGxpZ2h0ZWQtcm93JyA6ICcnXCJcbiAgICAgICAgW2NsYXNzXT1cIndvcmRXcmFwID8gJ3Atc2VsZWN0YWJsZS1yb3cgd29yZFdyYXBUcnVlJyA6ICd3b3JkV3JhcEZhbHNlIHAtc2VsZWN0YWJsZS1yb3cnXCIgKGNsaWNrKT1cIiFlZGl0aW5nICYmIGhhbmRsZVJvd0NsaWNrKHJvdylcIlxuICAgICAgICBbcEVkaXRhYmxlUm93XT1cInJvd1wiICNncmlkUm93IFtpZF09XCJyb3dbZGF0YUtleV1cIj5cbiAgICAgICAgPHRkICpuZ0lmPVwiYWxsb3dTZWxlY3Rpb25cIiBjbGFzcz1cImdyaWQtY29tcG9uZW50LXNlbGVjdGlvblwiPlxuICAgICAgICAgIDxwLXRhYmxlUmFkaW9CdXR0b24gW3ZhbHVlXT1cInJvd1wiICpuZ0lmPVwic2VsZWN0aW9uVHlwZSA9PT0gJ3NpbmdsZSdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm11bHRpQ2hlY2tCb3hPbmNsaWNrKHJvdyAsICRldmVudCwgdHJ1ZSlcIj48L3AtdGFibGVSYWRpb0J1dHRvbj5cbiAgICAgICAgICA8cC10YWJsZUNoZWNrYm94IFt2YWx1ZV09XCJyb3dcIiAqbmdJZj1cInNlbGVjdGlvblR5cGUgPT09ICdtdWx0aXBsZSdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm11bHRpQ2hlY2tCb3hPbmNsaWNrKHJvdywgJGV2ZW50KVwiPjwvcC10YWJsZUNoZWNrYm94PlxuICAgICAgICA8L3RkPlxuXG4gICAgICAgIDwhLS0gZmlyc3QgYWN0aW9ucyBjb2x1bW4gLS0+XG4gICAgICAgIDx0ZCAqbmdJZj1cInNldEFjdGlvbkNvbHVtbkFzRmlyc3QgJiYgY29sdW1uQWN0aW9ucy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJhY3Rpb24tYnRuXCIgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjb2x1bW5BY3Rpb25zXCI+XG4gICAgICAgICAgICA8aSBbdGl0bGVdPVwiYWN0aW9uLnRvb2x0aXBcIiBbY2xhc3NdPVwiYWN0aW9uLmljb25cIiAoY2xpY2spPVwiaGFuZGxlQWN0aW9uQ2xpY2soJGV2ZW50LCBhY3Rpb24sIHJvdylcIj48L2k+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgKm5nSWY9XCJzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmIHVzZUlubGluZUNSVUQgJiYgKGRlbGV0ZVJvd1Blcm1pc3Npb24gfHwgZWRpdFJvd1Blcm1pc3Npb24pXCJcbiAgICAgICAgICBbY2xhc3NdPVwiaW5FZGl0TW9kZSA/ICd0aHJlZS1hY3Rpb24tYnRuJyA6ICd0d28tYWN0aW9uLWJ0bidcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImRpc2FibGVkU2F2ZUJ0biA/ICdoaWRlLWNsZWFyLWZpbHRlci1idXR0b24nIDogJydcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNldEFjdGlvbkNvbHVtbldpZHRoXCI+XG4gICAgICAgICAgICA8c2UtZ3JpZC1yb3ctYWN0aW9ucyBbZWRpdGluZ109XCJlZGl0aW5nXCIgW2VkaXRSb3dQZXJtaXNzaW9uXT1cImVkaXRSb3dQZXJtaXNzaW9uXCJcbiAgICAgICAgICAgICAgW2RlbGV0ZVJvd1Blcm1pc3Npb25dPVwiZGVsZXRlUm93UGVybWlzc2lvblwiIFtoaWRlRGVsZXRlQnRuXT1cImhpZGVEZWxldGVCdG5cIiBbaGlkZUVkaXRCdG5dPVwiaGlkZUVkaXRCdG5cIlxuICAgICAgICAgICAgICBbcm93XT1cInJvd1wiIChvblJvd0VkaXRJbml0QnRuKT1cIm9uUm93RWRpdEluaXQoJGV2ZW50KVwiIChkZWxldGVSZWNvcmRCdG4pPVwiZGVsZXRlUmVjb3JkKCRldmVudClcIlxuICAgICAgICAgICAgICAob25Sb3dFZGl0U2F2ZUJ0bik9XCJvblJvd0VkaXRTYXZlKCRldmVudClcIiAob25Sb3dFZGl0Q2FuY2VsQnRuKT1cIm9uUm93RWRpdENhbmNlbCgkZXZlbnQsIHJpKVwiXG4gICAgICAgICAgICAgIFtlZGl0QWxsUm93c109XCJlZGl0QWxsUm93c1wiPlxuICAgICAgICAgICAgPC9zZS1ncmlkLXJvdy1hY3Rpb25zPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC90ZD5cblxuICAgICAgICA8IS0tIEdyaWQgUm93cyBEYXRhIEJpbmRpbmdzIFN0YXJ0IC0tPlxuICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBzZWxlY3RlZENvbHVtbnNcIiBbbmdTd2l0Y2hdPVwiY29sdW1uLnR5cGVcIiBbc3R5bGVdPVwiY29sdW1uLnN0eWxlIFwiIFxuICAgICAgICAobW91c2VlbnRlcik9XCIoY29sdW1uLm9uSG92ZXIgJiYgY29sdW1uLm9uSG92ZXIuY29tcG9uZW50KSAmJiBhZGREeW5hbWljUGFuZWxPdmVybGF5Q29tcG9uZW50KGNvbHVtbi5vbkhvdmVyKSYmIG92ZXJsYXlQYW5lbC5zaG93KCRldmVudClcIlxuICAgICAgICAobW91c2VsZWF2ZSk9XCIoY29sdW1uLm9uSG92ZXIgJiYgY29sdW1uLm9uSG92ZXIuY29tcG9uZW50KSAgJiYgb3ZlcmxheVBhbmVsLmhpZGUoKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRkLWNvbnRlbnQtd3JhcHBlclwiPlxuXG4gICAgICAgICAgPCEtLSBCb29sZWFuIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInYm9vbGVhbidcIlxuICAgICAgICAgID5cbiAgICAgICAgPHRkICpuZ0lmPVwiIWVkaXRpbmdcIj5cbiAgICAgICAgICA8cC1jaGVja2JveCBcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNvbHVtbi5hbGxvd0VkaXQgPz8gdHJ1ZVwiIFtiaW5hcnldPVwidHJ1ZVwiIChjbGljayk9XCJvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoZWNrQm94Q2hhbmdlRXZlbnQoJGV2ZW50LCBjb2x1bW4sIHJvdylcIiAoYmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCIgXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cIiBcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gJiZcbiAgICAgICAgICAgICAgKHJvd1tjb2x1bW4uZmllbGRdLnRvU3RyaW5nKCkgPT09ICcxJyB8fFxuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnIHx8XG4gICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSAneSd8fFxuICAgICAgICAgICAgICAgICggcm93W2NvbHVtbi5maWVsZF0udGV4dCAmJiAocm93W2NvbHVtbi5maWVsZF0/LnRleHQ/LnRvU3RyaW5nKCkgPT09ICcxJyB8fFxuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdPy50ZXh0Py50b1N0cmluZygpPy50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScgfHxcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXT8udGV4dD8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKSA9PT0gJ3knKSkpXG4gICAgICAgICAgICAgICAgICA/IENoZWNrZWRcbiAgICAgICAgICAgICAgICAgIDogdW5DaGVja2VkXG4gICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgPC9wLWNoZWNrYm94PlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgKm5nSWY9XCJlZGl0aW5nXCI+XG4gICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpbnB1dFwiPlxuICAgICAgICAgICAgICA8IS0tIGZvciBlZGl0IGNoZWNrQm94IC0tPlxuICAgICAgICAgICAgICA8cC1jaGVja2JveCAoY2xpY2spPVwib25DbGlja0V2ZW50KGNvbHVtbiwgcm93KVwiIChuZ01vZGVsQ2hhbmdlKT1cImNoZWNrQm94Q2hhbmdlRXZlbnQoJGV2ZW50LCBjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCIgW2JpbmFyeV09XCJ0cnVlXCIgWyhuZ01vZGVsKV09XCJcbiAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gJiYgICBcbiAgICAgICAgICAgICAgICAgICAgKHJvd1tjb2x1bW4uZmllbGRdLnRvU3RyaW5nKCkgPT09ICcxJyB8fFxuICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSAneScgfHxcbiAgICAgICAgICAgICAgICAgICAgICAoIHJvd1tjb2x1bW4uZmllbGRdLnRleHQgJiYgKHJvd1tjb2x1bW4uZmllbGRdPy50ZXh0Py50b1N0cmluZygpID09PSAnMScgfHxcbiAgICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXT8udGV4dD8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0/LnRleHQ/LnRvU3RyaW5nKCk/LnRvTG93ZXJDYXNlKCkgPT09ICd5JykpKVxuICAgICAgICAgICAgICAgICAgICAgID8gZWRpdE1vZGVDaGVja2VkXG4gICAgICAgICAgICAgICAgICAgICAgOiBlZGl0TW9kZXVuQ2tlY2tlZFxuICAgICAgICAgICAgICAgICAgXCIgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiPjwvcC1jaGVja2JveD5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgIHt7IHJvd1tjb2x1bW4uZmllbGRdIH19XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPCEtLSBsaW5rIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2xpbmsnXCI+XG4gICAgICAgICAgPCEtLSBsaW5rIGNvbHVtbiBmb3IgSHlwZXJMaW5rIENhc2UgLS0+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4uYWxsb3dTYXZlID09PSBmYWxzZVwiPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4udGFyZ2V0ICE9PSAnX3NlbGYnXCIgKGNsaWNrKT1cIm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwic2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdywgY29sdW1uKVwiIGNsYXNzPVwiY3VzdG9tLWxpbmtcIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdkaXNhYmxlZC1saW5rJyA6ICcnXCI+XG5cbiAgICAgICAgICAgIDxhICBbaHJlZl09XCJjb2x1bW4uZGlzYWJsZWQ/Jyc6cm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmh5cGVybGlua1wiIHRhcmdldD1cIl9ibGFua1wiPlxuICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiY29sdW1uLmljb24gJiYhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZTsgZWxzZSBub0ljb25cIiBbY2xhc3NdPVwiY29sdW1uLmljb25cIj48L2k+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0ljb24+XG4gICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlPycnOlxuICAgICAgICAgICAgICAgICAgICBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LCBjb2x1bW4pXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbHVtbi50YXJnZXQgPT09ICdfc2VsZidcIiAoY2xpY2spPVwib25DbGlja0V2ZW50KGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCJzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LCBjb2x1bW4pXCJjbGFzcz1cImN1c3RvbS1saW5rXCJcbiAgICAgICAgICAgICAgW2NsYXNzXT1cIiBhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2Rpc2FibGVkLWxpbmsnIDogJydcIj5cblxuICAgICAgICAgICAgICA8YSAgW2hyZWZdPVwiY29sdW1uLmRpc2FibGVkPycnOnJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5oeXBlcmxpbmtcIiBbdGFyZ2V0XT0nY29sdW1uLnRhcmdldCc+XG4gICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjb2x1bW4uaWNvbiAmJiFyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlOyBlbHNlIG5vSWNvblwiIFtjbGFzc109XCJjb2x1bW4uaWNvblwiPjwvaT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vSWNvbj5cbiAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWU/Jyc6XG4gICAgICAgICAgICAgICAgICAgIHNldENvbmRpdGlvbkJhc2VWYWx1ZShyb3csIGNvbHVtbilcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9hPlxuXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwhLS0gbGluayBjb2x1bW4gZm9yIEVkaXQgQ2FzZSAtLT5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbHVtbi5hbGxvd1NhdmUgfHwgY29sdW1uLmFsbG93U2F2ZSA9PT0gdW5kZWZpbmVkXCI+XG4gICAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCIoY29sdW1uLmVkaXRhYmxlID09PSB0cnVlIHx8IGNvbHVtbi5lZGl0YWJsZSA9PT0gdW5kZWZpbmVkKSAmJiAoY29sdW1uLmVkaXRMaW5rID09PSB0cnVlIHx8IGNvbHVtbi5lZGl0TGluayA9PT0gdW5kZWZpbmVkKVwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVwiIXJvdy5pc05ld1wiIHBJbnB1dFRleHQgKGNsaWNrKT1cIm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdylcIiB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHknIDogJydcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWUgPyAnJyA6IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpID9cbiAgICAgICAgICAgICAgICAgICAgcm93W3Jvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCldIDogcm93W2NvbHVtbi5maWVsZF1cIiAoYmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkNoYW5nZUV2ZW50KGNvbHVtbiwgcm93KVwiIC8+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgcElucHV0VGV4dCAqbmdJZj1cInJvdy5pc05ld1wiIHR5cGU9XCJ0ZXh0XCIgKGNsaWNrKT1cIm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKydfb2JqJ10/LmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKSA/IHJvd1tyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXSA6XG4gICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdXCIgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2VFdmVudChjb2x1bW4sIHJvdylcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbHVtbi5lZGl0YWJsZSA9PT0gZmFsc2VcIiA+XG4gICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJjdXN0b20tbGlua1wiIChjbGljayk9XCJvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpXCIgW2hyZWZdPVwicm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmh5cGVybGlua1wiIFt0YXJnZXRdPSdjb2x1bW4udGFyZ2V0J1xuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnZGlzYWJsZWQtbGluaycgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjb2x1bW4uaWNvbiAmJiAhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZTsgZWxzZSBub0ljb25cIltjbGFzc109XCJjb2x1bW4uaWNvblwiPjwvaT5cbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9JY29uPlxuICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZT8nJzpcbiAgICAgICAgICAgICAgICAgICAgc2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdywgY29sdW1uKVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uLmVkaXRMaW5rID09PSBmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cIm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdylcIiBbaHJlZl09XCJyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uaHlwZXJsaW5rXCIgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNvbHVtbi5lZGl0YWJsZSA9PT0gZmFsc2UgPyAnJyA6IGFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnZGlzYWJsZWQtbGluaycgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImNvbHVtbi5pY29uICYmICFyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlOyBlbHNlIG5vSWNvblwiW2NsYXNzXT1cImNvbHVtbi5pY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vSWNvbj5cbiAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlPycnOlxuICAgICAgICAgICAgICAgICAgICAgIHNldENvbmRpdGlvbkJhc2VWYWx1ZShyb3csIGNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuICBjbGFzcz1cImN1c3RvbS1saW5rXCIgIFtjbGFzc109XCJjb2x1bW4uZWRpdGFibGUgPT09IGZhbHNlIHx8IGFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnZGlzYWJsZWQtbGluaycgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgPGEgIChjbGljayk9XCJvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpXCIgW2hyZWZdPVwiY29sdW1uLmRpc2FibGVkPycnOnJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5oeXBlcmxpbmtcIiBbdGFyZ2V0XT1cImNvbHVtbi50YXJnZXRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjb2x1bW4uaWNvbiYmICFyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlOyBlbHNlIG5vSWNvblwiW2NsYXNzXT1cImNvbHVtbi5pY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vSWNvbj5cbiAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZT8nJzpcbiAgICAgICAgICAgICAgICAgICAgICBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LCBjb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICA8L2E+XG5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8IS0tIElmcmFtZSBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidpZnJhbWUnXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tbGlua1wiIChjbGljayk9XCJncmlkSUZyYW1lKGNvbHVtbiwgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmh5cGVybGluaywgcm93KVwiIFt0aXRsZV09XCJcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSAmJlxuICAgICAgICAgICAgICAgIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dCA9PT0gbnVsbCB8fCByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dCA9PT0gJycpXG4gICAgICAgICAgICAgICAgICA/IHJvd1tjb2x1bW4uZmllbGRdIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgICAgICA/IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgICAgICA6IGNvbHVtbi5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgPyBjb2x1bW4uZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICAgIDogcm93W2NvbHVtbi5maWVsZF1cblxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPiAgXG4gICAgICAgICAgICA8aSAqbmdJZj1cImNvbHVtbi5pY29uOyBlbHNlIG5vSWNvblwiW2NsYXNzXT1cImNvbHVtbi5pY29uXCI+PC9pPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0ljb24+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSAmJlxuICAgICAgICAgICAgICAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQgPT09IG51bGwgfHwgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQgPT09ICcnKVxuICAgICAgICAgICAgICA/IHJvd1tjb2x1bW4uZmllbGRdIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgOiBjb2x1bW4uZGlzcGxheVRleHQgPyBjb2x1bW4uZGlzcGxheVRleHQgOiByb3dbY29sdW1uLmZpZWxkXVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgPCEtLSBkaWFsb2cgY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidkaWFsb2cnXCI+XG4gICAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4/LmZpbHRlcj8udHlwZSAhPT0gJ2NhbGVuZGFyJyAmJiAhcm93Py5oaWRlZ3JpZGJ0blwiIFxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cInNldENvbmRpdGlvbkJhc2VWYWx1ZShyb3csIGNvbHVtbikgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbHVtbi5lZGl0YWJsZSA9PT0gdHJ1ZSAmJiAhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKydfb2JqJ10/LmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdoaWRlLWJvcmRlcicgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgIHBJbnB1dFRleHRcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0TG9va3VwRmllbGQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkID9cbiAgICAgICAgICAgICAgICAgICAgICByb3dbcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldIDogXG4gICAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF1cIlxuICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cInJvd1tjb2x1bW4uZmllbGRdXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4uZWRpdGFibGUgPT09IGZhbHNlIHx8IGNvbHVtbi5lZGl0YWJsZSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgIFwiIGNsYXNzPVwiY3VzdG9tLWxpbmtcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgIGFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnZGlzYWJsZWQtbGluaycgOiAnJ1xuICAgICAgICAgICAgICAgICAgICBcIiAoY2xpY2spPVwib3BlbkdyaWREaWFsb2coY29sdW1uLCByb3csICRldmVudClcIj5cblxuICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCIoY29sdW1uLmljb24gfHwgcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5pY29uKSAmJiAhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZSA7IGVsc2Ugbm9JY29uXCIgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbiA/IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbiA6IGNvbHVtbi5pY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0ljb24+e3sgKCFjb2x1bW4uZGlzcGxheVRleHQgJiYgcm93LmlzTmV3ICkgfHwgcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZSA/ICcnIDogc2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdywgY29sdW1uKVxuICAgICAgICAgICAgICAgICAgICB9fTwvbmctdGVtcGxhdGU+XG5cblxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbHVtbj8uZmlsdGVyPy50eXBlID09PSAnY2FsZW5kYXInXCIgW3RpdGxlXT1cIlxuICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXVxuICAgICAgICAgICAgICAgICAgICAgIHwgZGF0ZTogKGNvbHVtbi5mb3JtYXQgPyBjb2x1bW4uZm9ybWF0IDogJ01NL2RkL1lZJylcbiAgICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgIDxwLWNhbGVuZGFyIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHknIDogJydcIlxuICAgICAgICAgICAgICAgICAgW2lkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnaGlkZS1ib3JkZXInIDogJydcIiAob25DbG9zZSk9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgIFthcHBlbmRUb109XCInYm9keSdcIiBob3VyRm9ybWF0PVwiMTJcIiBbc2hvd1RpbWVdPVwiY29sdW1uLnNob3dUaW1lXCIgKGNsaWNrKT1cIm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgW3RpbWVPbmx5XT1cImNvbHVtbi50aW1lT25seVwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkID9cbiAgICAgICAgICAgICAgICAgICAgcm93W3Jvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCldIDogcm93W2NvbHVtbi5maWVsZF1cIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIj48L3AtY2FsZW5kYXI+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tbGlua1wiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3cuZGlzYWJsZWQgICB8fCBhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2Rpc2FibGVkLWxpbmsnIDogJydcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkdyaWREaWFsb2coY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cInNldENvbmRpdGlvbkJhc2VWYWx1ZShyb3csIGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiKGNvbHVtbi5pY29uIHx8IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbikgJiYgIXJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWUgOyBlbHNlIG5vSWNvblwiIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24gPyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24gOiBjb2x1bW4uaWNvblwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0ljb24+e3sgcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZSA/ICcnIDogc2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdywgY29sdW1uKSB9fTwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPCEtLSB7eyBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LCBjb2x1bW4pIH19XG4gICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhcm93W2NvbHVtbi5maWVsZCArICdfc2Vjb25kVHlwZSddICYmICFyb3cuaGlkZWdyaWRidG5cIiAtLT5cblxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPCEtLSBsb29rdXAgSW5wdXQgY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInbG9va3VwX2lucHV0J1wiPlxuICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsb3NlLWljb24td3JhcHBlclwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCByZWFkb25seSB0eXBlPVwidGV4dFwiIHBJbnB1dFRleHRcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQgID8gcm93W3Jvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXSA6XG4gICAgICAgICAgICAgICAgICB0eXBlT2Yocm93W2NvbHVtbi5maWVsZCsnX29iaiddPy50ZXh0KSA9PT0gJ29iamVjdCcgJiYgcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy50ZXh0Py5oYXNPd25Qcm9wZXJ0eSgndGV4dCcpID8gcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy50ZXh0Py50ZXh0IDogXG4gICAgICAgICAgICAgICAgICBjb2x1bW4uZGlzcGxheUZpZWxkID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldIDogcm93W2NvbHVtbi5maWVsZF1cbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAoa2V5dXAudGFiKT1cInNlbGVjdExvb2t1cEZpZWxkKGNvbHVtbiwgcm93KVwiIFtkaXNhYmxlZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RMb29rdXBGaWVsZChjb2x1bW4sIHJvdylcIiBbaWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdoaWRlLWJvcmRlcicgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKydfb2JqJ10/LmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JyA6ICcnXCIgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiIC8+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCI+PGJ1dHRvbiAqbmdJZj1cInJvd1tjb2x1bW4uZmllbGRdICYmIHR5cGVPZihyb3dbY29sdW1uLmZpZWxkXSkgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICA/IHJvd1tjb2x1bW4uZmllbGRdLnRleHRcbiAgICAgICAgICAgICAgICAgIDogcm93W2NvbHVtbi5maWVsZF0gJiYgIWNvbHVtbi5kaXNhYmxlZFwiIGljb249XCJwaSBwaS10aW1lc1wiIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJsb29rdXBDbGVhclZhbHVlKGNvbHVtbixyb3cpXCI+PC9idXR0b24+PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4ubGlua0lkXCI+XG4gICAgICAgICAgICAgICAgPGEgW2hyZWZdPVwicm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmh5cGVybGlua1wiIFt0YXJnZXRdPVwiY29sdW1uLnRhcmdldCA9PT0gJ19zZWxmJyA/ICcnIDogICdfYmxhbmsnXCI+XG4gICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICBzZXRMb29rdXBSZWFkT25seVZhbHVlKHJvdywgY29sdW1uKVxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhY29sdW1uLmxpbmtJZFwiIFtjbGFzc109XCJjb2x1bW4uY29tcG9uZW50ICYmIGNvbHVtbi5lZGl0TGluayA9PT0gdHJ1ZSA/ICdjdXN0b20tbGluaycgOiAnJ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Mb29rdXBIeXBlcmxpbmsoY29sdW1uLCByb3cpXCI+XG4gICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgIHNldExvb2t1cFJlYWRPbmx5VmFsdWUocm93LCBjb2x1bW4pXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDwhLS0gTnVtZXJpYyBJbnB1dCBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidudW1lcmljJ1wiPlxuICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgPCEtLSBmb3IgQ3VycmVuY3kgJiYgRGVjaW1hbCAmJiBQZXJjZW50IC0tPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LW51bWJlclwiPlxuICAgICAgICAgICAgICAgIDxwLWlucHV0TnVtYmVyIFtpZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2hpZGUtYm9yZGVyJyA6ICcnXCIgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSsnX29iaiddPy5lcnJvck1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ25nLWludmFsaWQgbmctZGlydHknXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICdmb3JtLWNvbnRyb2wnXG4gICAgICAgICAgICAgICAgICAgIFwiIFtzaG93QnV0dG9uc109XCIhY29sdW1uLmZvcm1hdCA/IHRydWUgOiBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkID8gcm93W3Jvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXSA6IHJvd1tjb2x1bW4uZmllbGRdXCIgW25hbWVdPVwiY29sdW1uLmZpZWxkXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCIgKG9uRm9jdXMpPVwib25Gb2N1c0V2ZW50KGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgICAob25CbHVyKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIiBbbW9kZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdC50eXBlID09PSAnY3VycmVuY3knXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdjdXJyZW5jeSdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ2RlY2ltYWwnXG4gICAgICAgICAgICAgICAgICAgIFwiIFtjdXJyZW5jeV09XCJcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdC50eXBlID09PSAnY3VycmVuY3knICYmXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdC5mb3JtYXRQYXJhbXMgJiZcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0LmZvcm1hdFBhcmFtcy5jdXJyZW5jeVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBjb2x1bW4uZm9ybWF0LmZvcm1hdFBhcmFtcy5jdXJyZW5jeVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnVVNEJ1xuICAgICAgICAgICAgICAgICAgICBcIiBbbG9jYWxlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0LnR5cGUgPT09ICdjdXJyZW5jeScgJiZcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0LmZvcm1hdFBhcmFtcyAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQuZm9ybWF0UGFyYW1zLmxvY2FsZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBjb2x1bW4uZm9ybWF0LmZvcm1hdFBhcmFtcy5sb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ2VuLVVTJ1xuICAgICAgICAgICAgICAgICAgICBcIiBbbWluRnJhY3Rpb25EaWdpdHNdPVwiY29sdW1uLmZvcm1hdCA/IHNldE51bWVyaWNNaW5NeEZyYWN0aW9uKGNvbHVtbikgOiAnMCdcIlxuICAgICAgICAgICAgICAgICAgW21heEZyYWN0aW9uRGlnaXRzXT1cImNvbHVtbi5mb3JtYXQgPyBzZXROdW1lcmljTWluTXhGcmFjdGlvbihjb2x1bW4pIDogJzAnXCIgW3N1ZmZpeF09XCJcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdC50eXBlID09PSAncGVyY2VudCcgJiYgXG4gICAgICAgICAgICAgICAgICAgICAgICAnJSdcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICA8L3AtaW5wdXROdW1iZXI+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsb2NrZWRfZmllbGQ+PHNwYW4gKm5nSWY9XCIhcm93LmlzTmV3XCIgW3RpdGxlXT1cInJvd1tjb2x1bW4uZmllbGRdXCI+XG4gICAgICAgICAgICAgICAgICB7eyByb3dbY29sdW1uLmZpZWxkXSB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgICAgPHNwYW4gW3RpdGxlXT1cInNldE51bWVyaWNGb3JtYXQoY29sdW1uLCByb3cpXCI+XG4gICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICBzZXROdW1lcmljRm9ybWF0KGNvbHVtbiwgcm93KVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8IS0tIEJ1dHRvbiBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidhZGRfYnV0dG9uJ1wiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIXJvdy5oaWRlZ3JpZGJ0blwiIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIFtpY29uXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbiA/IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbiA6IGNvbHVtbi5pY29uXCJcbiAgICAgICAgICAgICAgW25hbWVdPVwiY29sdW1uLmhlYWRlclwiIGNsYXNzPVwibWVyZ2UtYnRuXCIgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5VGV4dCA/IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheVRleHQgOiBjb2x1bW4udmFsdWVcIlxuICAgICAgICAgICAgICBjbGFzcz1cImdyaWQtY29tcG9uZW50LWdyaWQtYWRkLWJ0blwiIChjbGljayk9XCJvbkNsaWNrQnV0dG9uKGNvbHVtbiwgcm93KVwiPjwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NwYW4+ICAgICAgICBcblxuICAgICAgICA8IS0tIERhdGUgY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIiBbdGl0bGVdPVwic2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdyxjb2x1bW4pXCI+XG4gICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpbnB1dFwiPlxuICAgICAgICAgICAgICA8cC1jYWxlbmRhclxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHkgJyArIGNvbHVtbi5maWVsZCArIHJvd1tkYXRhS2V5XSA6IGNvbHVtbi5maWVsZCArIHJvd1tkYXRhS2V5XVwiXG4gICAgICAgICAgICAgICAgW2lkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnaGlkZS1ib3JkZXInIDogJydcIiAob25DbG9zZSk9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICBbYXBwZW5kVG9dPVwiJ2JvZHknXCIgaG91ckZvcm1hdD1cIjEyXCIgW2RlZmF1bHREYXRlXT1cImRlZmF1bHREYXRlXCJcbiAgICAgICAgICAgICAgICBbc3RlcE1pbnV0ZV09XCJjb2x1bW4ubWludXRlc0ludGVydmFsID8gY29sdW1uLm1pbnV0ZXNJbnRlcnZhbCA6IDFcIiBbc2hvd1RpbWVdPVwiY29sdW1uLnNob3dUaW1lXCJcbiAgICAgICAgICAgICAgICBbdGltZU9ubHldPVwiY29sdW1uLnRpbWVPbmx5XCIgW2RhdGVGb3JtYXRdPVwiY29sdW1uLmZvcm1hdCA/IGNvbHVtbi5mb3JtYXQudHlwZSA6IGNhbGVuZGFyRm9ybWF0XCJcbiAgICAgICAgICAgICAgICAoa2V5dXApPVwiY2FsZW5kYXJJbnB1dFZhbHVlKGNvbHVtbiwgcm93KVwiIChvblNob3cpPVwib25DbGlja0V2ZW50KGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZCA/IHJvd1tyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXSA6XG4gICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF1cIiBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiXG4gICAgICAgICAgICAgICAgW3Nob3dCdXR0b25CYXJdPVwiIWNvbHVtbi50aW1lT25seVwiPjwvcC1jYWxlbmRhcj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgIHt7IHNldENvbmRpdGlvbkJhc2VWYWx1ZShyb3csY29sdW1uKSB9fVxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgIDxzcGFuIFtuZ1N3aXRjaF09XCJjb2x1bW4udHlwZVwiPlxuICAgICAgICAgICAgPCEtLSBEcm9wZG93biBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInZHJvcGRvd24nXCIgW2NsYXNzXT1cImRyb3Bkb3duSW5wdXQgPyAnJyA6ICdvdXRwdXQtZHJvcGRvd24nXCIgW3RpdGxlXT1cIlxuICAgICAgICAgICAgICAgIHNldERyb3Bkd29uUmVhZE9ubHlWYWx1ZShyb3csIGNvbHVtbilcbiAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duICpuZ0lmPVwiIXJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZGVuXCIgW29wdGlvbnNdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkKydfZGF0YSddXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gcm93W2NvbHVtbi5maWVsZCsnX2RhdGEnXVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNvbHVtbi5kYXRhXG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKSA/IHJvd1tyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXSA6IHJvd1tjb2x1bW4uZmllbGRdXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIiBbcGxhY2Vob2xkZXJdPVwicm93W2NvbHVtbi5kaXNwbGF5RmllbGRdXG4gICAgICAgICAgICAgICAgICAgICAgPyByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF1cbiAgICAgICAgICAgICAgICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGRdID8gcm93W2NvbHVtbi5maWVsZF0gOiAnU2VsZWN0J1wiIFtzaG93Q2xlYXJdPVwicm93W2NvbHVtbi5maWVsZF0gPyB0cnVlIDogZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICBbb3B0aW9uTGFiZWxdPVwiY29sdW1uLm9wdGlvbkxhYmVsXCIgKGNsaWNrKT1cIm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgICBbb3B0aW9uVmFsdWVdPVwiY29sdW1uLm9wdGlvblZhbHVlXCIgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSsnX29iaiddPy5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eScgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2hpZGUtYm9yZGVyJyA6ICcnXCIgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvbkNoYW5nZUV2ZW50KGNvbHVtbiwgcm93KVwiIFtmaWx0ZXJdPVwiY29sdW1uLmFsbG93U2VhcmNoXCI+PC9wLWRyb3Bkb3duPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgc2V0RHJvcGR3b25SZWFkT25seVZhbHVlKHJvdywgY29sdW1uKVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8IS0tIE11bHRpU2VsZWN0IGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICAgICAgPCEtLSBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpID8gcm93W3Jvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCldIDpcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdXCIgLS0+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ211bHRpLXNlbGVjdCdcIj5cbiAgICAgICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0IFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHknIDogJydcIlxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdoaWRlLWJvcmRlcicgOiAnJ1wiIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmZpZWxkXVwiXG4gICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiXG4gICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImNvbHVtbi5kYXRhXCIgW29wdGlvbkxhYmVsXT1cImNvbHVtbi5vcHRpb25MYWJlbFwiIFtvcHRpb25WYWx1ZV09XCJjb2x1bW4ub3B0aW9uVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25DaGFuZ2VFdmVudChjb2x1bW4sIHJvdylcIiAob25QYW5lbFNob3cpPVwic2hvd09wdGlvbihjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja0V2ZW50KGNvbHVtbiwgcm93KVwiIFthcHBlbmRUb109XCInYm9keSdcIiAoYmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCI+XG4gICAgICAgICAgICAgICAgICA8L3AtbXVsdGlTZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBbdGl0bGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzZXRNdWx0aVNlbGVjdERhdGEoY29sdW1uLCByb3dbY29sdW1uLmZpZWxkXSlcbiAgICAgICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdXG4gICAgICAgICAgICAgICAgICAgID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdIDpcbiAgICAgICAgICAgICAgICAgICAgc2V0TXVsdGlTZWxlY3REYXRhKGNvbHVtbiwgcm93W2NvbHVtbi5maWVsZF0pXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIDwhLS0gQXV0b0NvbXBsZXRlIFNlYXJjaCAtLT5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInQXV0b0NvbXBsZXRlJ1wiPlxuICAgICAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgPHAtYXV0b0NvbXBsZXRlIFxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKydfb2JqJ10/LmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnaGlkZS1ib3JkZXInIDogJydcIiBcbiAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiY29sdW1uLmhlYWRlclwiXG4gICAgICAgICAgICAgICAgICAgIFtzdWdnZXN0aW9uc109XCJjb2x1bW4uZGF0YVwiIFxuICAgICAgICAgICAgICAgICAgICAob25TZWxlY3QpPVwiYXV0b0NvbXBsZXRlU2VsZWN0ZWRWYWx1ZShyb3csIGNvbHVtbiwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtmaWVsZF09XCJjb2x1bW4ub3B0aW9uTGFiZWwgPyBjb2x1bW4ub3B0aW9uTGFiZWw/LnRvTG93ZXJDYXNlKCkgOiBjb2x1bW4uZGlzcGxheUZpZWxkID8gY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKSA6IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKVwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQgPyByb3dbcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKV0gOlxuICAgICAgICAgICAgICAgICAgICB0eXBlT2Yocm93W2NvbHVtbi5maWVsZF0pID09PSAnb2JqZWN0JyAmJiByb3dbY29sdW1uLmZpZWxkXT8udGV4dCA/XG4gICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdPy50ZXh0IDpcbiAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF1cIlxuICAgICAgICAgICAgICAgICAgICBbZHJvcGRvd25dPVwiY29sdW1uLnNob3dPcHRpb25cIiBcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2VFdmVudChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja0V2ZW50KGNvbHVtbiwgcm93KVwiIFxuICAgICAgICAgICAgICAgICAgICAoY29tcGxldGVNZXRob2QpPVwiYXV0b1NlYXJjaCgkZXZlbnQsIGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgICAgIChvbkJsdXIpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiIFxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiIFxuICAgICAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm9uQXV0b0NvbXBsZXRlRm9jdXNPdXQoJGV2ZW50LCBjb2x1bW4sIHJvdylcIj5cbiAgICAgICAgICAgICAgICAgIDwvcC1hdXRvQ29tcGxldGU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInJvd1tjb2x1bW4uZmllbGRdICYmIHJvd1tjb2x1bW4uZmllbGRdWzBdICYmICByb3dbY29sdW1uLmZpZWxkXVswXVtjb2x1bW4uZGlzcGxheUZpZWxkXVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgdmFsdWUgb2Ygcm93W2NvbHVtbi5maWVsZF07IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyByb3dbY29sdW1uLmZpZWxkXSAmJiByb3dbY29sdW1uLmZpZWxkXS5sZW5ndGggPiAxID8gcm93W2NvbHVtbi5maWVsZF0ubGVuZ3RoIC0xID09PSBpID9cbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVtjb2x1bW4uZGlzcGxheUZpZWxkXSA6IHZhbHVlW2NvbHVtbi5kaXNwbGF5RmllbGRdICsgJzsnIDogdmFsdWVbY29sdW1uLmRpc3BsYXlGaWVsZF0gfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyb3dbY29sdW1uLmZpZWxkXSAmJiByb3dbY29sdW1uLmZpZWxkXVswXSAmJiAgcm93W2NvbHVtbi5maWVsZF1bMF1bY29sdW1uLmZpZWxkXSAmJiAhY29sdW1uLmRpc3BsYXlGaWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgdmFsdWUgb2Ygcm93W2NvbHVtbi5maWVsZF07IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyByb3dbY29sdW1uLmZpZWxkXSAmJiByb3dbY29sdW1uLmZpZWxkXS5sZW5ndGggPiAxID8gcm93W2NvbHVtbi5maWVsZF0ubGVuZ3RoIC0xID09PSBpID9cbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVtjb2x1bW4uZmllbGRdIDogdmFsdWVbY29sdW1uLmZpZWxkXSArICc7JyA6IHZhbHVlW2NvbHVtbi5maWVsZF0gfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPCEtLSBBZGQgR2VuZXJhdGUgUmVwb3J0IEJ1dHRvbiAtLT5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCIncmVwb3J0J1wiPlxuICAgICAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxzZS1nZW5lcmF0ZS1yZXBvcnQtYnRuIFtyZXBJZF09XCJjb2x1bW4ucmVwb3J0SWRcIiBbbGFiZWxdPVwiY29sdW1uLmxhYmVsXCIgW3BhcmFtc109XCJjb2x1bW4ucGFyYW1zXCIgW2NsYXNzXT1cImNvbHVtbi5jbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgIFtzaG93RGlhbG9nXT1cImNvbHVtbi5zaG93RGlhbG9nXCIgW2ljb25dPVwiY29sdW1uLmljb25cIj48L3NlLWdlbmVyYXRlLXJlcG9ydC1idG4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxzZS1nZW5lcmF0ZS1yZXBvcnQtYnRuIFtyZXBJZF09XCJjb2x1bW4ucmVwb3J0SWRcIiBbbGFiZWxdPVwiY29sdW1uLmxhYmVsXCIgW3BhcmFtc109XCJjb2x1bW4ucGFyYW1zXCIgW2ljb25dPVwiY29sdW1uLmljb25cIiBbY2xhc3NdPVwiY29sdW1uLmNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dEaWFsb2ddPVwiY29sdW1uLnNob3dEaWFsb2dcIj48L3NlLWdlbmVyYXRlLXJlcG9ydC1idG4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQ+XG4gICAgICAgICAgICAgIDwhLS0gSW5wdXQgY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgcElucHV0VGV4dCB0eXBlPVwidGV4dFwiIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHknIDogJydcIlxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdoaWRlLWJvcmRlcicgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93LnVuZGVmaW5lZCA/ICcnIDogYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSAmJiByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF0gPyByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF0gOiByb3dbY29sdW1uLmZpZWxkXVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiIChjaGFuZ2UpPVwib25DaGFuZ2VFdmVudChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja0J1dHRvbihjb2x1bW4sIHJvdylcIiAqbmdJZj1cImNvbHVtbi5maWVsZCAhPT0gZGF0YUtleTsgZWxzZSBsb2NrZWRfZmllbGRcIiAvPlxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsb2NrZWRfZmllbGQ+PHNwYW4gKm5nSWY9XCIhcm93LmlzTmV3XCIgW3RpdGxlXT1cInJvd1tjb2x1bW4uZmllbGRdXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgcm93W2NvbHVtbi5maWVsZF0gfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwib25DbGlja0V2ZW50KGNvbHVtbiwgcm93KVwiIFt0aXRsZV09XCJcbiAgICAgICAgICAgICAgICAgIHNldFRleHRCb3hSZWFkT25seVZhbHVlKHJvdywgY29sdW1uKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0VGV4dEJveFJlYWRPbmx5VmFsdWUocm93LCBjb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICBcbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDwhLS0gR3JpZCBSb3dzIERhdGEgQmluZGluZ3MgRW5kIC0tPlxuXG4gICAgICAgIDwhLS0gQWN0aW9uIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICA8dGQgKm5nSWY9XCIhc2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiBjb2x1bW5zPy5sZW5ndGggPiAwICYmIGNvbHVtbkFjdGlvbnMubGVuZ3RoID4gMFwiXG4gICAgICAgICAgY2xhc3M9XCJmb3ItYnV0dG9uc1wiXG4gICAgICAgICAgW2NsYXNzXT1cImluRWRpdE1vZGUgPyAndGhyZWUtYWN0aW9uLWJ0bicgOiAndHdvLWFjdGlvbi1idG4nXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJhY3Rpb24tYnRuXCIgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjb2x1bW5BY3Rpb25zXCI+XG4gICAgICAgICAgICA8aSBbdGl0bGVdPVwiYWN0aW9uLnRvb2x0aXBcIiBbY2xhc3NdPVwiYWN0aW9uLmljb25cIiAoY2xpY2spPVwiaGFuZGxlQWN0aW9uQ2xpY2soJGV2ZW50LCBhY3Rpb24sIHJvdylcIj48L2k+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGRcbiAgICAgICAgICAqbmdJZj1cIiFzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmIGNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYgdXNlSW5saW5lQ1JVRCAmJiAoZGVsZXRlUm93UGVybWlzc2lvbiB8fCBlZGl0Um93UGVybWlzc2lvbilcIlxuICAgICAgICAgIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiXG4gICAgICAgICAgY2xhc3M9XCJmb3ItYnV0dG9uc1wiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiZGlzYWJsZWRTYXZlQnRuID8gJ2hpZGUtY2xlYXItZmlsdGVyLWJ1dHRvbicgOiAnJ1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSdzZXRBY3Rpb25Db2x1bW5XaWR0aCc+XG4gICAgICAgICAgICA8c2UtZ3JpZC1yb3ctYWN0aW9ucyBbZWRpdGluZ109XCJlZGl0aW5nXCIgW2VkaXRSb3dQZXJtaXNzaW9uXT1cImVkaXRSb3dQZXJtaXNzaW9uXCJcbiAgICAgICAgICAgICAgW2RlbGV0ZVJvd1Blcm1pc3Npb25dPVwiZGVsZXRlUm93UGVybWlzc2lvblwiIFtoaWRlRGVsZXRlQnRuXT1cImhpZGVEZWxldGVCdG5cIiBbaGlkZUVkaXRCdG5dPVwiaGlkZUVkaXRCdG5cIlxuICAgICAgICAgICAgICBbcm93XT1cInJvd1wiIChvblJvd0VkaXRJbml0QnRuKT1cIm9uUm93RWRpdEluaXQoJGV2ZW50KVwiIChkZWxldGVSZWNvcmRCdG4pPVwiZGVsZXRlUmVjb3JkKCRldmVudClcIlxuICAgICAgICAgICAgICAob25Sb3dFZGl0U2F2ZUJ0bik9XCJvblJvd0VkaXRTYXZlKCRldmVudClcIiAob25Sb3dFZGl0Q2FuY2VsQnRuKT1cIm9uUm93RWRpdENhbmNlbCgkZXZlbnQsIHJpKVwiXG4gICAgICAgICAgICAgIFtlZGl0QWxsUm93c109XCJlZGl0QWxsUm93c1wiPlxuICAgICAgICAgICAgPC9zZS1ncmlkLXJvdy1hY3Rpb25zPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDwhLS0gRm9vdGVyIGNvbHVtbnMgb24gR3JpZCAtLT5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZm9vdGVyXCI+XG4gICAgICA8dHIgKm5nSWY9XCJhZ2dyZWdhdGVGb290ZXJcIj5cbiAgICAgICAgPHRkXG4gICAgICAgICAgKm5nSWY9XCJzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmIChjb2x1bW5BY3Rpb25zLmxlbmd0aCA+IDAgfHwgKHVzZUlubGluZUNSVUQgJiYgKGRlbGV0ZVJvd1Blcm1pc3Npb24gfHwgZWRpdFJvd1Blcm1pc3Npb24pKSlcIlxuICAgICAgICAgIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiPjwvdGQ+XG4gICAgICAgIDx0ZCAqbmdJZj1cImFsbG93U2VsZWN0aW9uXCIgW2NsYXNzXT1cImluRWRpdE1vZGUgPyAndGhyZWUtYWN0aW9uLWJ0bicgOiAndHdvLWFjdGlvbi1idG4nXCI+PC90ZD5cbiAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBvdXRlckNvbHVtbiBvZiBzZWxlY3RlZENvbHVtbnNcIiBjbGFzcz1cImdyaWQtY29tcG9uZW50LW91dGVyLWNvbHVtblwiIFtzdHlsZV09XCJvdXRlckNvbHVtbi5zdHlsZVwiPlxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGlubmVyQ29sdW1uIG9mIHNlbGVjdGVkQ29sdW1uc1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYWdnciBvZiBpbm5lckNvbHVtbj8uYWdncmVnYXRlXCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAqbmdJZj1cImFnZ3IuYWdnclZhbHVlPy5sZW5ndGggJiYgKCghYWdnci5kaXNwbGF5RmllbGQgJiYgaW5uZXJDb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IG91dGVyQ29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgICAgICAgICAgICAgYWdnci5kaXNwbGF5RmllbGQgJiYgYWdnci5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IG91dGVyQ29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpKVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgW2lubmVySFRNTF09XCJhZ2dyLmFnZ3JWYWx1ZVwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PiAgXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZFxuICAgICAgICAgICpuZ0lmPVwiIXNldEFjdGlvbkNvbHVtbkFzRmlyc3QgJiYgY29sdW1ucz8ubGVuZ3RoID4gMCAmJiB1c2VJbmxpbmVDUlVEICYmIChkZWxldGVSb3dQZXJtaXNzaW9uIHx8IGVkaXRSb3dQZXJtaXNzaW9uKVwiXG4gICAgICAgICAgW2NsYXNzXT1cImluRWRpdE1vZGUgPyAndGhyZWUtYWN0aW9uLWJ0bicgOiAndHdvLWFjdGlvbi1idG4nXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJkaXNhYmxlZFNhdmVCdG4gPyAnaGlkZS1jbGVhci1maWx0ZXItYnV0dG9uJyA6ICcnXCI+PC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDwhLS0gRm9vdGVyIGZvciBFbXB0eSBNZXNzYWdlIGNvbHVtbnMgb24gR3JpZCAtLT5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XG4gICAgICA8dHIgY2xhc3M9XCJncmlkLWNvbXBvbmVudCBuby1yZWNvcmRzLWZvdW5kXCI+XG4gICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cInNlbGVjdGVkQ29sdW1ucz8ubGVuZ3RoICsgMVwiPnt7dG90YWxSZWNvcmRzPT0wPyAnTm8gcmVjb3JkcyBmb3VuZCc6Jyd9fTwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvcC10YWJsZT4gIFxuICA8cC1vdmVybGF5UGFuZWxcbiAgW3N0eWxlXT1cIm92ZXJsYXlQYW5lbFN0eWxlXCIgI292ZXJsYXlQYW5lbD5cbiAgICA8bmctY29udGFpbmVyICN2aWV3Q29udGFpbmVyUmVmPjwvbmctY29udGFpbmVyPlxuICA8L3Atb3ZlcmxheVBhbmVsPlxuPC9kaXY+Il19