@wemake4u/form-player-se 1.0.33 → 1.0.35

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.
Files changed (54) hide show
  1. package/esm2022/lib/controls/tab.mjs +47 -1
  2. package/esm2022/lib/directives/dropdown.directive.mjs +3 -2
  3. package/esm2022/lib/directives/grid.directive.mjs +3 -1
  4. package/esm2022/lib/directives/recursion.directive.mjs +18 -2
  5. package/esm2022/lib/directives/tabcontrol.directive.mjs +11 -1
  6. package/esm2022/lib/directives/text.directive.mjs +20 -2
  7. package/esm2022/lib/directives/valuesync.directive.mjs +63 -0
  8. package/esm2022/lib/dynamic-fields/dynamic-fields.component.mjs +13 -16
  9. package/esm2022/lib/dynamic-form/dynamic-form.component.mjs +47 -24
  10. package/esm2022/lib/locale/locale-de.mjs +3 -2
  11. package/esm2022/lib/locale/locale-en.mjs +3 -2
  12. package/esm2022/lib/locale/locale-es.mjs +3 -2
  13. package/esm2022/lib/locale/locale-fr.mjs +3 -2
  14. package/esm2022/lib/locale/locale-it.mjs +3 -2
  15. package/esm2022/lib/locale/locale-pt.mjs +3 -2
  16. package/esm2022/lib/services/compute.service.mjs +73 -0
  17. package/esm2022/lib/services/disable.service.mjs +19 -12
  18. package/esm2022/lib/services/event.service.mjs +2 -2
  19. package/esm2022/lib/services/form.service.mjs +1 -27
  20. package/esm2022/lib/services/function.service.mjs +7 -2
  21. package/esm2022/lib/services/grid.service.mjs +46 -3
  22. package/esm2022/lib/services/programmability.service.mjs +16 -9
  23. package/esm2022/lib/services/validation.service.mjs +2 -2
  24. package/esm2022/lib/utils/focusable.mjs +7 -2
  25. package/esm2022/lib/utils/uuid.mjs +11 -0
  26. package/fesm2022/wemake4u-form-player-se.mjs +383 -92
  27. package/fesm2022/wemake4u-form-player-se.mjs.map +1 -1
  28. package/lib/components/deleteRowRenderer/deleteRowRenderer.component.d.ts +1 -0
  29. package/lib/components/objectURLRenderer/objectURLRenderer.component.d.ts +1 -0
  30. package/lib/components/setFilter/setFilter.component.d.ts +1 -0
  31. package/lib/controls/tab.d.ts +7 -0
  32. package/lib/dialog/dialog.component.d.ts +7 -0
  33. package/lib/directives/recursion.directive.d.ts +1 -0
  34. package/lib/directives/tabcontrol.directive.d.ts +1 -0
  35. package/lib/directives/text.directive.d.ts +3 -0
  36. package/lib/directives/valuesync.directive.d.ts +15 -0
  37. package/lib/dynamic-fields/dynamic-fields.component.d.ts +10 -2
  38. package/lib/dynamic-form/dynamic-form.component.d.ts +13 -3
  39. package/lib/locale/locale-de.d.ts +1 -0
  40. package/lib/locale/locale-en.d.ts +1 -0
  41. package/lib/locale/locale-es.d.ts +1 -0
  42. package/lib/locale/locale-fr.d.ts +1 -0
  43. package/lib/locale/locale-it.d.ts +1 -0
  44. package/lib/locale/locale-pt.d.ts +1 -0
  45. package/lib/locale/locale.d.ts +7 -0
  46. package/lib/services/compute.service.d.ts +21 -0
  47. package/lib/services/disable.service.d.ts +3 -2
  48. package/lib/services/event.service.d.ts +1 -1
  49. package/lib/services/function.service.d.ts +1 -0
  50. package/lib/services/grid.service.d.ts +7 -0
  51. package/lib/services/programmability.service.d.ts +3 -1
  52. package/lib/services/validation.service.d.ts +1 -1
  53. package/lib/utils/uuid.d.ts +1 -0
  54. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  import { Injectable } from '@angular/core';
2
- import { PaginationModule, ClientSideRowModelModule, InfiniteRowModelModule, LocaleModule, CellStyleModule, RowApiModule, RowSelectionModule, TextFilterModule, NumberFilterModule, DateFilterModule, themeQuartz, iconSetAlpine, ClientSideRowModelApiModule, RowAutoHeightModule, ColumnAutoSizeModule, ColumnApiModule } from 'ag-grid-community';
2
+ import { PaginationModule, ClientSideRowModelModule, InfiniteRowModelModule, LocaleModule, CellStyleModule, RowApiModule, RowSelectionModule, TextFilterModule, NumberFilterModule, DateFilterModule, themeQuartz, iconSetAlpine, ClientSideRowModelApiModule, RowAutoHeightModule, ColumnAutoSizeModule, ColumnApiModule, HighlightChangesModule } from 'ag-grid-community';
3
3
  import { ObjectURLRendererComponent } from '../components/objectURLRenderer/objectURLRenderer.component';
4
4
  import { DeleteRowRendererComponent } from '../components/deleteRowRenderer/deleteRowRenderer.component';
5
5
  import { ActionsCellRendererComponent } from '../components/actionsCellRenderer/actionsCellRenderer.component';
@@ -42,13 +42,15 @@ export class GridService {
42
42
  ColumnApiModule,
43
43
  RowSelectionModule,
44
44
  RowApiModule,
45
- RowAutoHeightModule
45
+ RowAutoHeightModule,
46
+ HighlightChangesModule
46
47
  //, ValidationModule
47
48
  ];
48
49
  }
49
50
  ;
50
51
  getOptions(component, formGroup) {
51
52
  const selection = this.getRowSelection(component, formGroup);
53
+ const rowId = this.getRowId(component);
52
54
  const pagination = this.getPaginable(component);
53
55
  const pageSize = this.getPageSize(component);
54
56
  const texts = this.getTexts();
@@ -71,6 +73,7 @@ export class GridService {
71
73
  localeText: texts,
72
74
  enableCellTextSelection: true,
73
75
  theme: theme,
76
+ getRowId: rowId,
74
77
  onGridSizeChanged: (params) => {
75
78
  this.resizeGrid(component, params.api);
76
79
  },
@@ -110,6 +113,14 @@ export class GridService {
110
113
  invalidateOptions(component) {
111
114
  this.weak.invalidate(component, this.getCacheKey());
112
115
  }
116
+ onRowDataChanged(component, api, rowData) {
117
+ if (this.hasRowNumbers(component) && this.hasRowId(component)) {
118
+ this.refreshRowNumbers(api);
119
+ }
120
+ }
121
+ onDataSourceChanged(component, api, dataSource) {
122
+ // Nothing
123
+ }
113
124
  get language() {
114
125
  return this.languageService.getLanguage();
115
126
  }
@@ -144,6 +155,7 @@ export class GridService {
144
155
  this.setCellDataType(column, colDef);
145
156
  const map = this.getMap(column, colDef, formGroup);
146
157
  this.setCellRenderer(column, colDef, map, formGroup);
158
+ this.setStyles(column, colDef);
147
159
  this.setAutoHeight(column, colDef);
148
160
  this.setResizable(column, colDef);
149
161
  this.setSortable(column, colDef);
@@ -155,6 +167,7 @@ export class GridService {
155
167
  this.setPinned(column, colDef);
156
168
  this.setWidth(column, colDef);
157
169
  this.setValueFormatter(column, colDef, map);
170
+ this.setCellChangeFlash(column, colDef);
158
171
  return colDef;
159
172
  });
160
173
  return columnDefs;
@@ -192,10 +205,18 @@ export class GridService {
192
205
  headerClass: 'row-numbers-header',
193
206
  cellClass: 'row-numbers-cell',
194
207
  resizable: false,
208
+ sortable: false,
195
209
  valueGetter: (n) => n.node.rowIndex + 1
196
210
  });
197
211
  }
198
212
  }
213
+ refreshRowNumbers(api) {
214
+ if (api) {
215
+ const rowNumbers = ["rowNumbers"];
216
+ api.setColumnsVisible(rowNumbers, false);
217
+ api.setColumnsVisible(rowNumbers, true);
218
+ }
219
+ }
199
220
  groupColumns(columns) {
200
221
  const rootItemsOrdered = [];
201
222
  function findOrCreateGroup(groups, name) {
@@ -252,6 +273,14 @@ export class GridService {
252
273
  colDef.cellDataType = column.dataType;
253
274
  }
254
275
  }
276
+ setStyles(column, colDef) {
277
+ if (column.headerClass) {
278
+ colDef.headerClass = column.headerClass;
279
+ }
280
+ if (column.headerStyle) {
281
+ colDef.headerStyle = column.headerStyle;
282
+ }
283
+ }
255
284
  setCellRenderer(column, colDef, map, formGroup) {
256
285
  if (column.format === "objectURL") {
257
286
  colDef.cellRenderer = ObjectURLRendererComponent;
@@ -274,6 +303,9 @@ export class GridService {
274
303
  colDef.cellClass = 'cell-component';
275
304
  }
276
305
  }
306
+ setCellChangeFlash(column, colDef) {
307
+ colDef.enableCellChangeFlash = true;
308
+ }
277
309
  setAutoHeight(column, colDef) {
278
310
  if (column.autoHeight) {
279
311
  colDef.autoHeight = true;
@@ -433,6 +465,17 @@ export class GridService {
433
465
  }
434
466
  return options;
435
467
  }
468
+ hasRowId(component) {
469
+ return typeof component.rowId === 'string' && component.rowId.trim() !== '';
470
+ }
471
+ getRowId(component) {
472
+ if (this.hasRowId(component)) {
473
+ return (params) => params.data[component.rowId];
474
+ }
475
+ else {
476
+ return undefined;
477
+ }
478
+ }
436
479
  onRowSelectable(component, formGroup, data) {
437
480
  if (!data)
438
481
  return false;
@@ -741,4 +784,4 @@ export class GridService {
741
784
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GridService, decorators: [{
742
785
  type: Injectable
743
786
  }], ctorParameters: () => [{ type: i1.FormatterService }, { type: i2.LanguageService }, { type: i3.ProgrammabilityService }, { type: i4.WeakService }] });
744
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvc2VydmljZXMvZ3JpZC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUNHLGdCQUFnQixFQUFFLHdCQUF3QixFQUFFLHNCQUFzQixFQUN4RSxZQUFZLEVBQUUsZUFBZSxFQUFvQixZQUFZLEVBQzdELGtCQUFrQixFQUNsQixnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFDOUMsV0FBVyxFQUFFLGFBQWEsRUFDbEMsMkJBQTJCLEVBQUUsbUJBQW1CLEVBQ1Asb0JBQW9CLEVBQUUsZUFBZSxFQUVqRixNQUFNLG1CQUFtQixDQUFDO0FBRTNCLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDZEQUE2RCxDQUFDO0FBQ3pHLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDZEQUE2RCxDQUFDO0FBQ3pHLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGlFQUFpRSxDQUFDO0FBQy9HLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBSXRHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2xCLE1BQU0sMkJBQTJCLENB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LEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQzt3QkFDdkIseUJBQXlCLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUN0RCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxZQUFZLENBQUMsS0FBWTtRQUMvQixNQUFNLElBQUksR0FBa0IsRUFBRSxDQUFDO1FBQy9CLElBQUksYUFBYSxHQUFRLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDdEMsT0FBTyxhQUFhLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3pCLGFBQWEsR0FBRyxhQUFhLENBQUMsYUFBYSxDQUFDO1FBQzlDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7d0dBM3pCVSxXQUFXOzRHQUFYLFdBQVc7OzRGQUFYLFdBQVc7a0JBRHZCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgTW9kdWxlLCBQYWdpbmF0aW9uTW9kdWxlLCBDbGllbnRTaWRlUm93TW9kZWxNb2R1bGUsIEluZmluaXRlUm93TW9kZWxNb2R1bGVcclxuICAsIExvY2FsZU1vZHVsZSwgQ2VsbFN0eWxlTW9kdWxlLCBWYWxpZGF0aW9uTW9kdWxlLCBSb3dBcGlNb2R1bGUgXHJcbiAgLCBSb3dTZWxlY3Rpb25Nb2R1bGUsIFJvd1NlbGVjdGlvbk9wdGlvbnMgXHJcbiAgLCBUZXh0RmlsdGVyTW9kdWxlLCBOdW1iZXJGaWx0ZXJNb2R1bGUsIERhdGVGaWx0ZXJNb2R1bGVcclxuICAsIENvbERlZiwgdGhlbWVRdWFydHosIGljb25TZXRBbHBpbmUsIEdyaWRPcHRpb25zLCBEYXRhVHlwZURlZmluaXRpb25cclxuICAsIENsaWVudFNpZGVSb3dNb2RlbEFwaU1vZHVsZSwgUm93QXV0b0hlaWdodE1vZHVsZVxyXG4gICwgR3JpZFNpemVDaGFuZ2VkRXZlbnQsIE1vZGVsVXBkYXRlZEV2ZW50LCBDb2x1bW5BdXRvU2l6ZU1vZHVsZSwgQ29sdW1uQXBpTW9kdWxlLCBHcmlkQXBpXHJcbiAgLCBTdXBwcmVzc0tleWJvYXJkRXZlbnRQYXJhbXNcclxufSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgT2JqZWN0VVJMUmVuZGVyZXJDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL29iamVjdFVSTFJlbmRlcmVyL29iamVjdFVSTFJlbmRlcmVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERlbGV0ZVJvd1JlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9kZWxldGVSb3dSZW5kZXJlci9kZWxldGVSb3dSZW5kZXJlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBY3Rpb25zQ2VsbFJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9hY3Rpb25zQ2VsbFJlbmRlcmVyL2FjdGlvbnNDZWxsUmVuZGVyZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2V0RmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9zZXRGaWx0ZXIvc2V0RmlsdGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEhvc3RDZWxsUmVuZGVyZXJDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2hvc3RDZWxsUmVuZGVyZXIvaG9zdENlbGxSZW5kZXJlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGb3JtYXR0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZm9ybWF0dGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcm9ncmFtbWFiaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcHJvZ3JhbW1hYmlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBXZWFrU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3dlYWsuc2VydmljZSc7XHJcbmltcG9ydCB7IGdldEZvY3VzYWJsZXMgfSBmcm9tICcuLi91dGlscy9mb2N1c2FibGUnO1xyXG5pbXBvcnQgeyBpc1JlY29yZCwgaXNMYWJlbGVkUmVjb3JkLCBpc051bWVyaWNLZXkgfSBmcm9tICcuLi9jb21tb24vcmVjb3JkJztcclxuaW1wb3J0IHsgZ2V0TGFiZWxTeW1ib2wgfSBmcm9tICcuLi9jb21tb24vc3ltYm9scyc7XHJcbmltcG9ydCB7XHJcbiAgQUdfR1JJRF9MT0NBTEVfSVQsXHJcbiAgQUdfR1JJRF9MT0NBTEVfRU4sXHJcbiAgQUdfR1JJRF9MT0NBTEVfREUsXHJcbiAgQUdfR1JJRF9MT0NBTEVfRlIsXHJcbiAgQUdfR1JJRF9MT0NBTEVfRVMsXHJcbiAgQUdfR1JJRF9MT0NBTEVfUFQgIFxyXG59IGZyb20gJ0BhZy1ncmlkLWNvbW11bml0eS9sb2NhbGUnO1xyXG5cclxuaW1wb3J0IHsgTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnQHdlbWFrZTR1L2ludGVyYWN0JztcclxuaW1wb3J0IHsgVGV4dHMgfSBmcm9tICcuLi9sb2NhbGUvbG9jYWxlJztcclxuaW1wb3J0IHsgbG9jYWxpemUgfSBmcm9tICcuLi9sb2NhbGUvbG9jYWxpemUnO1xyXG5cclxudHlwZSBNYXBUeXBlID0gUmVjb3JkPHN0cmluZyB8IG51bWJlciwgc3RyaW5nPiB8IG51bGw7XHJcblxyXG50eXBlIEdyb3VwTm9kZSA9IHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgdHlwZTogXCJncm91cFwiO1xyXG4gIGNvbHVtbnM6IChHcm91cE5vZGUgfCBhbnkpW107XHJcbn07XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBHcmlkU2VydmljZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybWF0dGVyOiBGb3JtYXR0ZXJTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBwcm9ncmFtbWFiaWxpdHk6IFByb2dyYW1tYWJpbGl0eVNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSB3ZWFrOiBXZWFrU2VydmljZSkge1xyXG4gIH1cclxuXHJcbiAgZ2V0TW9kdWxlcygpOiBNb2R1bGVbXSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICBDbGllbnRTaWRlUm93TW9kZWxNb2R1bGVcclxuICAgICAgLCBJbmZpbml0ZVJvd01vZGVsTW9kdWxlXHJcbiAgICAgICwgUGFnaW5hdGlvbk1vZHVsZVxyXG4gICAgICAsIExvY2FsZU1vZHVsZVxyXG4gICAgICAsIENlbGxTdHlsZU1vZHVsZVxyXG4gICAgICAsIENsaWVudFNpZGVSb3dNb2RlbEFwaU1vZHVsZVxyXG4gICAgICAsIFRleHRGaWx0ZXJNb2R1bGVcclxuICAgICAgLCBOdW1iZXJGaWx0ZXJNb2R1bGVcclxuICAgICAgLCBEYXRlRmlsdGVyTW9kdWxlXHJcbiAgICAgICwgQ29sdW1uQXV0b1NpemVNb2R1bGVcclxuICAgICAgLCBDb2x1bW5BcGlNb2R1bGVcclxuICAgICAgLCBSb3dTZWxlY3Rpb25Nb2R1bGVcclxuICAgICAgLCBSb3dBcGlNb2R1bGVcclxuICAgICAgLCBSb3dBdXRvSGVpZ2h0TW9kdWxlXHJcbiAgICAgIC8vLCBWYWxpZGF0aW9uTW9kdWxlXHJcbiAgICBdO1xyXG4gIH07XHJcblxyXG4gIGdldE9wdGlvbnMoY29tcG9uZW50OiBhbnksIGZvcm1Hcm91cDogRm9ybUdyb3VwKTogR3JpZE9wdGlvbnMge1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5nZXRSb3dTZWxlY3Rpb24oY29tcG9uZW50LCBmb3JtR3JvdXApO1xyXG4gICAgY29uc3QgcGFnaW5hdGlvbiA9IHRoaXMuZ2V0UGFnaW5hYmxlKGNvbXBvbmVudCk7XHJcbiAgICBjb25zdCBwYWdlU2l6ZSA9IHRoaXMuZ2V0UGFnZVNpemUoY29tcG9uZW50KTtcclxuICAgIGNvbnN0IHRleHRzID0gdGhpcy5nZXRUZXh0cygpO1xyXG4gICAgY29uc3QgdGhlbWUgPSB0aGlzLmdldFRoZW1lKCk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBkZWZhdWx0Q29sRGVmOiB7XHJcbiAgICAgICAgZmxvYXRpbmdGaWx0ZXI6IChjb21wb25lbnQuZmxvYXRpbmdGaWx0ZXIgPT09IHRydWUpLFxyXG4gICAgICAgIGhlYWRlckNsYXNzOiAoY29tcG9uZW50LmZsb2F0aW5nRmlsdGVyID09PSB0cnVlKVxyXG4gICAgICAgICAgPyAnc2hvdy1maWx0ZXInIDogJ2hpZGUtZmlsdGVyJ1xyXG4gICAgICB9LFxyXG4gICAgICBzZWxlY3Rpb25Db2x1bW5EZWY6IHtcclxuICAgICAgICBwaW5uZWQ6ICdsZWZ0J1xyXG4gICAgICB9LFxyXG4gICAgICBkYXRhVHlwZURlZmluaXRpb25zOiB0aGlzLmdldERhdGFUeXBlRGVmaW5pdGlvbnMoKSxcclxuICAgICAgcm93U2VsZWN0aW9uOiBzZWxlY3Rpb24sXHJcbiAgICAgIHBhZ2luYXRpb246IHBhZ2luYXRpb24sXHJcbiAgICAgIHBhZ2luYXRpb25QYWdlU2l6ZTogcGFnZVNpemUsXHJcbiAgICAgIGNhY2hlQmxvY2tTaXplOiBwYWdlU2l6ZSxcclxuICAgICAgcGFnaW5hdGlvblBhZ2VTaXplU2VsZWN0b3I6IFs1LCAxMCwgMjAsIDUwXSxcclxuICAgICAgbG9jYWxlVGV4dDogdGV4dHMsXHJcbiAgICAgIGVuYWJsZUNlbGxUZXh0U2VsZWN0aW9uOiB0cnVlLFxyXG4gICAgICB0aGVtZTogdGhlbWUsICAgICAgXHJcbiAgICAgIG9uR3JpZFNpemVDaGFuZ2VkOiAocGFyYW1zOiBHcmlkU2l6ZUNoYW5nZWRFdmVudCkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVzaXplR3JpZChjb21wb25lbnQsIHBhcmFtcy5hcGkpO1xyXG4gICAgICB9LFxyXG4gICAgICBvbk1vZGVsVXBkYXRlZDogKHBhcmFtczogTW9kZWxVcGRhdGVkRXZlbnQpID0+IHtcclxuICAgICAgICB0aGlzLnJlc2l6ZUdyaWQoY29tcG9uZW50LCBwYXJhbXMuYXBpKTtcclxuICAgICAgICB0aGlzLm9uUm93U2VsZWN0aW5nKGNvbXBvbmVudCwgZm9ybUdyb3VwLCBwYXJhbXMpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29sdW1uRGVmcyhjb21wb25lbnQ6IGFueSwgY29sdW1uczogYW55LCBmb3JtR3JvdXA6IEZvcm1Hcm91cCk6IENvbERlZltdIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbHVtbnMpKSB7XHJcbiAgICAgIGNvbnN0IGdyb3VwZWRDb2x1bW5zID0gdGhpcy5ncm91cENvbHVtbnMoY29sdW1ucyk7XHJcbiAgICAgIGNvbnN0IGNvbHVtbkRlZnMgPSB0aGlzLmdyb3Vwc1RvQ29sdW1uRGVmcyhncm91cGVkQ29sdW1uc1xyXG4gICAgICAgICwgKGNzKSA9PiB0aGlzLmNyZWF0ZUNvbHVtbkRlZnMoY29tcG9uZW50LCBjcywgZm9ybUdyb3VwKSk7XHJcblxyXG4gICAgICB0aGlzLmFkZEFjdGlvbkNvbHVtbkRlZihjb21wb25lbnQsIGNvbHVtbkRlZnMsIGZvcm1Hcm91cCk7XHJcbiAgICAgIHRoaXMuYWRkUm93TnVtYmVyc0NvbHVtbkRlZihjb21wb25lbnQsIGNvbHVtbkRlZnMpO1xyXG5cclxuICAgICAgcmV0dXJuIGNvbHVtbkRlZnM7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25TZWxlY3Rpb25DaGFuZ2VkKGNvbXBvbmVudDogYW55LCBmb3JtR3JvdXA6IEZvcm1Hcm91cCwgZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKGNvbXBvbmVudC5zZWxlY3Rpb25DaGFuZ2VkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnByb2dyYW1tYWJpbGl0eS5ldmFsdWF0ZShmb3JtR3JvdXAsIGNvbXBvbmVudC5zZWxlY3Rpb25DaGFuZ2VkLCB7XHJcbiAgICAgICAgY2FjaGVhYmxlOiBmYWxzZSxcclxuICAgICAgICBleHRlbmRDb250ZXh0OiAoKSA9PiAoe1xyXG4gICAgICAgICAgXCJldmVudFwiOiB7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkUm93czogZXZlbnQuYXBpLmdldFNlbGVjdGVkUm93cygpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDYWNoZUtleSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGBnZXRHcmlkT3B0aW9uc18ke3RoaXMubGFuZ3VhZ2V9YDtcclxuICB9XHJcblxyXG4gIGludmFsaWRhdGVPcHRpb25zKGNvbXBvbmVudDogYW55KSB7XHJcbiAgICB0aGlzLndlYWsuaW52YWxpZGF0ZShjb21wb25lbnQsIHRoaXMuZ2V0Q2FjaGVLZXkoKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldCBsYW5ndWFnZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLmdldExhbmd1YWdlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvY2FsZShjb21wb25lbnQ6IGFueSwga2V5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGxvY2FsaXplKHRoaXMubGFuZ3VhZ2UsIGNvbXBvbmVudCwga2V5KTtcclxuICB9XHJcblxyXG4gIHJlc2l6ZUdyaWQoY29tcG9uZW50OiBhbnksIGFwaTogR3JpZEFwaSkge1xyXG4gICAgY29uc3QgY29sdW1uc1RvUmVzaXplOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIGlmICh0aGlzLmhhc0FjdGlvbnMoY29tcG9uZW50KSkge1xyXG4gICAgICBjb2x1bW5zVG9SZXNpemUucHVzaCgnYWN0aW9ucycpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmhhc1Jvd051bWJlcnMoY29tcG9uZW50KSkge1xyXG4gICAgICBjb2x1bW5zVG9SZXNpemUucHVzaCgncm93TnVtYmVycycpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb2x1bW5zVG9SZXNpemUubGVuZ3RoID4gMCkge1xyXG4gICAgICBhcGkuYXV0b1NpemVDb2x1bW5zKGNvbHVtbnNUb1Jlc2l6ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhc0FjdGlvbnMoY29tcG9uZW50OiBhbnkpIHtcclxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGNvbXBvbmVudC5hY3Rpb25zKSAmJiBjb21wb25lbnQuYWN0aW9ucy5sZW5ndGggPiAwO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYXNSb3dOdW1iZXJzKGNvbXBvbmVudDogYW55KSB7XHJcbiAgICByZXR1cm4gKGNvbXBvbmVudC5yb3dOdW1iZXJzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlQ29sdW1uRGVmcyhjb21wb25lbnQ6IGFueSwgY29sdW1uczogYW55LCBmb3JtR3JvdXA6IEZvcm1Hcm91cCk6IENvbERlZltdIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbHVtbnMpKSB7XHJcbiAgICAgIGNvbnN0IGNvbHVtbkRlZnMgPSBjb2x1bW5zLm1hcCgoY29sdW1uOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBjb2xEZWY6IENvbERlZiA9IHtcclxuICAgICAgICAgIGZpZWxkOiBjb2x1bW4ua2V5LFxyXG4gICAgICAgICAgaGVhZGVyTmFtZTogdGhpcy5sb2NhbGUoY29sdW1uLCAnbGFiZWwnKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRDZWxsRGF0YVR5cGUoY29sdW1uLCBjb2xEZWYpO1xyXG5cclxuICAgICAgICBjb25zdCBtYXAgPSB0aGlzLmdldE1hcChjb2x1bW4sIGNvbERlZiwgZm9ybUdyb3VwKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRDZWxsUmVuZGVyZXIoY29sdW1uLCBjb2xEZWYsIG1hcCwgZm9ybUdyb3VwKTtcclxuICAgICAgICB0aGlzLnNldEF1dG9IZWlnaHQoY29sdW1uLCBjb2xEZWYpO1xyXG4gICAgICAgIHRoaXMuc2V0UmVzaXphYmxlKGNvbHVtbiwgY29sRGVmKTtcclxuICAgICAgICB0aGlzLnNldFNvcnRhYmxlKGNvbHVtbiwgY29sRGVmKTtcclxuICAgICAgICB0aGlzLnNldEZpbHRlcihjb2x1bW4sIGNvbERlZiwgbWFwKTtcclxuICAgICAgICB0aGlzLnNldEZpbHRlclBhcmFtcyhjb2x1bW4sIGNvbERlZiwgbWFwKTtcclxuICAgICAgICB0aGlzLnNldFN1cHByZXNzTW92YWJsZShjb2x1bW4sIGNvbERlZik7XHJcbiAgICAgICAgdGhpcy5zZXRGbGV4KGNvbHVtbiwgY29sRGVmKTtcclxuICAgICAgICB0aGlzLnNldEFsaWduKGNvbHVtbiwgY29sRGVmKTtcclxuICAgICAgICB0aGlzLnNldFBpbm5lZChjb2x1bW4sIGNvbERlZik7XHJcbiAgICAgICAgdGhpcy5zZXRXaWR0aChjb2x1bW4sIGNvbERlZik7XHJcbiAgICAgICAgdGhpcy5zZXRWYWx1ZUZvcm1hdHRlcihjb2x1bW4sIGNvbERlZiwgbWFwKTtcclxuICAgICAgICByZXR1cm4gY29sRGVmO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHJldHVybiBjb2x1bW5EZWZzO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkQWN0aW9uQ29sdW1uRGVmKGNvbXBvbmVudDogYW55LCBjb2x1bW5EZWZzOiBDb2xEZWZbXSwgZm9ybUdyb3VwOiBGb3JtR3JvdXApIHtcclxuICAgIGlmICh0aGlzLmhhc0FjdGlvbnMoY29tcG9uZW50KSkge1xyXG4gICAgICBjb2x1bW5EZWZzLnB1c2goe1xyXG4gICAgICAgIGNvbElkOiAnYWN0aW9ucycsXHJcbiAgICAgICAgaGVhZGVyTmFtZTogdGhpcy5sb2NhbGUoVGV4dHMsICdBY3Rpb25zJyksXHJcbiAgICAgICAgcmVzaXphYmxlOiBmYWxzZSxcclxuICAgICAgICBzb3J0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgZmlsdGVyOiBmYWxzZSxcclxuICAgICAgICBjZWxsRGF0YVR5cGU6IGZhbHNlLFxyXG4gICAgICAgIGhpZGU6IHRoaXMuc3VwcHJlc3NBY3Rpb25zKGNvbXBvbmVudCwgZm9ybUdyb3VwKSxcclxuICAgICAgICBwaW5uZWQ6IFwicmlnaHRcIiwgICAgICAgIFxyXG4gICAgICAgIGNlbGxSZW5kZXJlclBhcmFtczoge1xyXG4gICAgICAgICAgY29tcG9uZW50OiBjb21wb25lbnQsXHJcbiAgICAgICAgICBmb3JtR3JvdXA6IGZvcm1Hcm91cFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2VsbFJlbmRlcmVyOiBBY3Rpb25zQ2VsbFJlbmRlcmVyQ29tcG9uZW50LFxyXG4gICAgICAgIHN1cHByZXNzS2V5Ym9hcmRFdmVudDogdGhpcy5uYXZpZ2F0ZUluc2lkZUNlbGwuYmluZCh0aGlzKVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkUm93TnVtYmVyc0NvbHVtbkRlZihjb21wb25lbnQ6IGFueSwgY29sdW1uRGVmczogQ29sRGVmW10pIHtcclxuICAgIGlmICh0aGlzLmhhc1Jvd051bWJlcnMoY29tcG9uZW50KSkge1xyXG4gICAgICBjb2x1bW5EZWZzLnVuc2hpZnQoe1xyXG4gICAgICAgIGNvbElkOiAncm93TnVtYmVycycsXHJcbiAgICAgICAgaGVhZGVyTmFtZTogXCIjXCIsXHJcbiAgICAgICAgcGlubmVkOiBcImxlZnRcIixcclxuICAgICAgICBoZWFkZXJDbGFzczogJ3Jvdy1udW1iZXJzLWhlYWRlcicsXHJcbiAgICAgICAgY2VsbENsYXNzOiAncm93LW51bWJlcnMtY2VsbCcsXHJcbiAgICAgICAgcmVzaXphYmxlOiBmYWxzZSxcclxuICAgICAgICB2YWx1ZUdldHRlcjogKG46IGFueSkgPT4gbi5ub2RlLnJvd0luZGV4ICsgMVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ3JvdXBDb2x1bW5zKGNvbHVtbnM6IGFueVtdKTogKEdyb3VwTm9kZSB8IGFueSlbXSB7XHJcbiAgICBjb25zdCByb290SXRlbXNPcmRlcmVkOiAoR3JvdXBOb2RlIHwgYW55KVtdID0gW107XHJcblxyXG4gICAgZnVuY3Rpb24gZmluZE9yQ3JlYXRlR3JvdXAoXHJcbiAgICAgIGdyb3VwczogKEdyb3VwTm9kZSB8IGFueSlbXSxcclxuICAgICAgbmFtZTogc3RyaW5nXHJcbiAgICApOiBHcm91cE5vZGUge1xyXG4gICAgICBsZXQgZ3JvdXAgPSBncm91cHMuZmluZChcclxuICAgICAgICBpdGVtID0+IChpdGVtIGFzIEdyb3VwTm9kZSkudHlwZSA9PT0gXCJncm91cFwiICYmIChpdGVtIGFzIEdyb3VwTm9kZSkubmFtZSA9PT0gbmFtZVxyXG4gICAgICApIGFzIEdyb3VwTm9kZTtcclxuXHJcbiAgICAgIGlmICghZ3JvdXApIHtcclxuICAgICAgICBncm91cCA9IHtcclxuICAgICAgICAgIG5hbWUsXHJcbiAgICAgICAgICB0eXBlOiBcImdyb3VwXCIsXHJcbiAgICAgICAgICBjb2x1bW5zOiBbXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGdyb3Vwcy5wdXNoKGdyb3VwKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGdyb3VwO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuICAgICAgY29uc3QgZ3JvdXBQYXJ0cyA9IChjb2x1bW4uZ3JvdXAgPz8gXCJcIilcclxuICAgICAgICAuc3BsaXQoL1tcXFxcL10vKVxyXG4gICAgICAgIC5tYXAoKHBhcnQ6IHN0cmluZykgPT4gcGFydC50cmltKCkpXHJcbiAgICAgICAgLmZpbHRlcigocGFydDogc3RyaW5nKSA9PiBwYXJ0Lmxlbmd0aCA+IDApO1xyXG5cclxuICAgICAgaWYgKGdyb3VwUGFydHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcm9vdEl0ZW1zT3JkZXJlZC5wdXNoKGNvbHVtbik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRMZXZlbCA9IHJvb3RJdGVtc09yZGVyZWQ7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBncm91cFBhcnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBwYXJ0ID0gZ3JvdXBQYXJ0c1tpXTtcclxuICAgICAgICAgIGNvbnN0IGdyb3VwID0gZmluZE9yQ3JlYXRlR3JvdXAoY3VycmVudExldmVsLCBwYXJ0KTtcclxuICAgICAgICAgIGN1cnJlbnRMZXZlbCA9IGdyb3VwLmNvbHVtbnM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGN1cnJlbnRMZXZlbC5wdXNoKGNvbHVtbik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcm9vdEl0ZW1zT3JkZXJlZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ3JvdXBzVG9Db2x1bW5EZWZzKGdyb3VwZWQ6IChHcm91cE5vZGUgfCBhbnkpW10sIGdldENvbHVtbnNEZWY6IChjb2x1bW5zOiBhbnlbXSkgPT4gQ29sRGVmW10pOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gZ3JvdXBlZC5tYXAoaXRlbSA9PiB7XHJcbiAgICAgIGlmICgndHlwZScgaW4gaXRlbSAmJiBpdGVtLnR5cGUgPT09ICdncm91cCcpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgaGVhZGVyTmFtZTogaXRlbS5uYW1lLFxyXG4gICAgICAgICAgY2hpbGRyZW46IHRoaXMuZ3JvdXBzVG9Db2x1bW5EZWZzKGl0ZW0uY29sdW1ucywgZ2V0Q29sdW1uc0RlZilcclxuICAgICAgICB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBnZXRDb2x1bW5zRGVmKFtpdGVtXSlbMF07XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRDZWxsRGF0YVR5cGUoY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmKSB7XHJcbiAgICBpZiAoY29sdW1uLmRhdGFUeXBlID09PSBcImNvbXBvbmVudFwiXHJcbiAgICAgIHx8IGNvbHVtbi5kYXRhVHlwZSA9PT0gXCJhdXRvXCIpIHJldHVybjtcclxuXHJcbiAgICBpZiAodHlwZW9mIGNvbHVtbi5kYXRhVHlwZSA9PT0gXCJzdHJpbmdcIlxyXG4gICAgICAmJiBjb2x1bW4uZGF0YVR5cGUudHJpbSgpICE9PSBcIlwiKSB7XHJcbiAgICAgIGNvbERlZi5jZWxsRGF0YVR5cGUgPSBjb2x1bW4uZGF0YVR5cGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENlbGxSZW5kZXJlcihjb2x1bW46IGFueSwgY29sRGVmOiBDb2xEZWYsIG1hcDogTWFwVHlwZSwgZm9ybUdyb3VwOiBGb3JtR3JvdXApIHtcclxuICAgIGlmIChjb2x1bW4uZm9ybWF0ID09PSBcIm9iamVjdFVSTFwiKSB7XHJcbiAgICAgIGNvbERlZi5jZWxsUmVuZGVyZXIgPSBPYmplY3RVUkxSZW5kZXJlckNvbXBvbmVudDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29sdW1uLmZvcm1hdCA9PT0gXCJkZWxldGVSb3dcIikge1xyXG4gICAgICBjb2xEZWYuY2VsbFJlbmRlcmVyID0gRGVsZXRlUm93UmVuZGVyZXJDb21wb25lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbERlZi5jZWxsRGF0YVR5cGUgPT09IFwiYm9vbGVhblwiICYmIG1hcCkge1xyXG4gICAgICBjb2xEZWYuY2VsbFJlbmRlcmVyID0gKHBhcmFtczogYW55KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0TWFwKHBhcmFtcy52YWx1ZSwgbWFwKTsgXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29sdW1uLmRhdGFUeXBlID09PSBcImNvbXBvbmVudFwiKSB7XHJcbiAgICAgIGNvbERlZi5jZWxsUmVuZGVyZXIgPSBIb3N0Q2VsbFJlbmRlcmVyQ29tcG9uZW50O1xyXG4gICAgICBjb2xEZWYuY2VsbFJlbmRlcmVyUGFyYW1zID0ge1xyXG4gICAgICAgIGNvbXBvbmVudFR5cGU6IGNvbHVtbi5jb21wb25lbnQsXHJcbiAgICAgICAgcHJvcGVydGllczogY29sdW1uLnByb3BlcnRpZXMsXHJcbiAgICAgICAgZm9ybUdyb3VwOiBmb3JtR3JvdXBcclxuICAgICAgfTtcclxuICAgICAgY29sRGVmLmNlbGxDbGFzcyA9ICdjZWxsLWNvbXBvbmVudCc7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRBdXRvSGVpZ2h0KGNvbHVtbjogYW55LCBjb2xEZWY6IENvbERlZikge1xyXG4gICAgaWYgKGNvbHVtbi5hdXRvSGVpZ2h0KSB7XHJcbiAgICAgIGNvbERlZi5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuICAgICAgY29sRGVmLndyYXBUZXh0ID0gdHJ1ZTtcclxuICAgIH0gIFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRSZXNpemFibGUoY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmICkge1xyXG4gICAgY29sRGVmLnJlc2l6YWJsZSA9IChjb2x1bW4ucmVzaXplID09PSB0cnVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0U29ydGFibGUoY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmKSB7XHJcbiAgICBjb2xEZWYuc29ydGFibGUgPSAoY29sdW1uLnNvcnQgPT09IHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRGaWx0ZXIoY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmLCBtYXA6IE1hcFR5cGUpIHtcclxuICAgIGlmIChjb2x1bW4uZmlsdGVyID09PSB0cnVlKSB7XHJcbiAgICAgIGNvbERlZi5maWx0ZXIgPSB0cnVlO1xyXG4gICAgICBpZiAobWFwKSB7XHJcbiAgICAgICAgY29sRGVmLmZpbHRlciA9IFNldEZpbHRlckNvbXBvbmVudDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRGaWx0ZXJQYXJhbXMoY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmLCBtYXA6IE1hcFR5cGUpIHtcclxuXHJcbiAgICBjb25zdCBmaWx0ZXJQYXJhbXM6IGFueSA9IHt9O1xyXG5cclxuICAgIGlmIChjb2x1bW4uZGF0YVR5cGUgPT09ICd1dWlkJykge1xyXG4gICAgICB0aGlzLnNldFV1aWRGaWx0ZXJQYXJhbXMoZmlsdGVyUGFyYW1zKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2ludGVnZXInKSB7XHJcbiAgICAgIHRoaXMuc2V0SW50ZWdlckZpbHRlclBhcmFtcyhmaWx0ZXJQYXJhbXMpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY29sdW1uLmRhdGFUeXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgdGhpcy5zZXREYXRlRmlsdGVyUGFyYW1zKGZpbHRlclBhcmFtcyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjb2x1bW4uZGF0YVR5cGUgPT09ICdib29sZWFuJykge1xyXG4gICAgICB0aGlzLnNldEJvb2xlYW5GaWx0ZXJQYXJhbXMoZmlsdGVyUGFyYW1zKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgaWYgKG1hcCkge1xyXG4gICAgICBmaWx0ZXJQYXJhbXMubWFwID0gbWFwO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbERlZi5maWx0ZXJQYXJhbXMgPSBmaWx0ZXJQYXJhbXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFV1aWRGaWx0ZXJQYXJhbXMoZmlsdGVyUGFyYW1zOiBhbnkpIHtcclxuICAgIGZpbHRlclBhcmFtcy5maWx0ZXJPcHRpb25zID0gWydlcXVhbHMnLCAnbm90RXF1YWwnXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0SW50ZWdlckZpbHRlclBhcmFtcyhmaWx0ZXJQYXJhbXM6IGFueSkge1xyXG4gICAgZmlsdGVyUGFyYW1zLmFsbG93ZWRDaGFyUGF0dGVybiA9ICdcXFxcZCc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldERhdGVGaWx0ZXJQYXJhbXMoZmlsdGVyUGFyYW1zOiBhbnkpIHtcclxuICAgIGZpbHRlclBhcmFtcy5jb21wYXJhdG9yID0gKGZpbHRlckxvY2FsRGF0ZUF0TWlkbmlnaHQ6IERhdGUsIGNlbGxWYWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGlmICghY2VsbFZhbHVlKSByZXR1cm4gLTE7XHJcbiAgICAgIGNvbnN0IGNlbGxEYXRlID0gbmV3IERhdGUoY2VsbFZhbHVlKTtcclxuICAgICAgaWYgKGlzTmFOKGNlbGxEYXRlLmdldFRpbWUoKSkpIHJldHVybiAtMTtcclxuXHJcbiAgICAgIGNvbnN0IGNlbGxEYXRlTm9UaW1lID0gbmV3IERhdGUoY2VsbERhdGUuZ2V0RnVsbFllYXIoKSwgY2VsbERhdGUuZ2V0TW9udGgoKSwgY2VsbERhdGUuZ2V0RGF0ZSgpKTtcclxuXHJcbiAgICAgIGlmIChjZWxsRGF0ZU5vVGltZSA8IGZpbHRlckxvY2FsRGF0ZUF0TWlkbmlnaHQpIHJldHVybiAtMTtcclxuICAgICAgaWYgKGNlbGxEYXRlTm9UaW1lID4gZmlsdGVyTG9jYWxEYXRlQXRNaWRuaWdodCkgcmV0dXJuIDE7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRCb29sZWFuRmlsdGVyUGFyYW1zKGZpbHRlclBhcmFtczogYW55KSB7XHJcbiAgICBmaWx0ZXJQYXJhbXMuZmlsdGVyT3B0aW9ucyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGRpc3BsYXlLZXk6ICdpbmNsdWRlQWxsJyxcclxuICAgICAgICBkaXNwbGF5TmFtZTogVGV4dHMuQ2hvb3NlT25lLFxyXG4gICAgICAgIG51bWJlck9mSW5wdXRzOiAwLFxyXG4gICAgICAgIHByZWRpY2F0ZTogKFtmaWx0ZXJdOiBbYW55XSwgdmFsdWU6IGFueSkgPT4gdHJ1ZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgZGlzcGxheUtleTogJ3RydWUnLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiBUZXh0cy5UcnVlLFxyXG4gICAgICAgIG51bWJlck9mSW5wdXRzOiAwLFxyXG4gICAgICAgIHByZWRpY2F0ZTogKFtmaWx0ZXJdOiBbYW55XSwgdmFsdWU6IGFueSkgPT4gdmFsdWUgPT09IHRydWVcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGRpc3BsYXlLZXk6ICdmYWxzZScsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IFRleHRzLkZhbHNlLFxyXG4gICAgICAgIG51bWJlck9mSW5wdXRzOiAwLFxyXG4gICAgICAgIHByZWRpY2F0ZTogKFtmaWx0ZXJdOiBbYW55XSwgdmFsdWU6IGFueSkgPT4gdmFsdWUgPT09IGZhbHNlXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBkaXNwbGF5S2V5OiAnYmxhbmsnLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiBUZXh0cy5CbGFuayxcclxuICAgICAgICBudW1iZXJPZklucHV0czogMCxcclxuICAgICAgICBwcmVkaWNhdGU6IChbZmlsdGVyXTogW2FueV0sIHZhbHVlOiBhbnkpID0+IHZhbHVlID09PSBudWxsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBkaXNwbGF5S2V5OiAnbm90QmxhbmsnLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiBUZXh0cy5Ob3RCbGFuayxcclxuICAgICAgICBudW1iZXJPZklucHV0czogMCxcclxuICAgICAgICBwcmVkaWNhdGU6IChbZmlsdGVyXTogW2FueV0sIHZhbHVlOiBhbnkpID0+IHZhbHVlICE9PSBudWxsXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG4gICAgZmlsdGVyUGFyYW1zLnN1cHByZXNzQW5kT3JDb25kaXRpb24gPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRTdXBwcmVzc01vdmFibGUoY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmKSB7XHJcbiAgICBpZiAoIShjb2x1bW4ubW92ZSA9PT0gdHJ1ZSkpIHsgXHJcbiAgICAgIGNvbERlZi5zdXBwcmVzc01vdmFibGUgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRGbGV4KGNvbHVtbjogYW55LCBjb2xEZWY6IENvbERlZikge1xyXG4gICAgaWYgKGNvbHVtbi5mbGV4ID09PSB0cnVlKSB7IFxyXG4gICAgICBjb2xEZWYuZmxleCA9IDE7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEFsaWduKGNvbHVtbjogYW55LCBjb2xEZWY6IENvbERlZikge1xyXG4gICAgaWYgKGNvbHVtbi5hbGlnbiA9PT0gXCJsZWZ0XCIpIHtcclxuICAgICAgY29sRGVmLmNlbGxTdHlsZSA9IHsgdGV4dEFsaWduOiAnbGVmdCcgfTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNvbHVtbi5hbGlnbiA9PT0gXCJjZW50ZXJcIikge1xyXG4gICAgICBjb2xEZWYuY2VsbFN0eWxlID0geyB0ZXh0QWxpZ246ICdjZW50ZXInIH07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjb2x1bW4uYWxpZ24gPT09IFwicmlnaHRcIikgeyBcclxuICAgICAgY29sRGVmLmNlbGxTdHlsZSA9IHsgdGV4dEFsaWduOiAncmlnaHQnIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFBpbm5lZChjb2x1bW46IGFueSwgY29sRGVmOiBDb2xEZWYpIHtcclxuICAgIGlmICh0eXBlb2YgY29sdW1uLnBpbm5lZCA9PT0gXCJzdHJpbmdcIikgeyBcclxuICAgICAgY29sRGVmLnBpbm5lZCA9IGNvbHVtbi5waW5uZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFdpZHRoKGNvbHVtbjogYW55LCBjb2xEZWY6IENvbERlZikge1xyXG4gICAgaWYgKHR5cGVvZiBjb2x1bW4ud2lkdGggPT09IFwibnVtYmVyXCIpIHsgXHJcbiAgICAgIGNvbERlZi53aWR0aCA9IGNvbHVtbi53aWR0aDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIGNvbHVtbi5taW5XaWR0aCA9PT0gXCJudW1iZXJcIikgeyBcclxuICAgICAgY29sRGVmLm1pbldpZHRoID0gY29sdW1uLm1pbldpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgY29sdW1uLm1heFdpZHRoID09PSBcIm51bWJlclwiKSB7IFxyXG4gICAgICBjb2xEZWYubWF4V2lkdGggPSBjb2x1bW4ubWF4V2lkdGg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFZhbHVlRm9ybWF0dGVyKGNvbHVtbjogYW55LCBjb2xEZWY6IENvbERlZiwgbWFwOiBNYXBUeXBlKSB7XHJcbiAgICBpZiAobWFwKSB7XHJcbiAgICAgIGNvbERlZi52YWx1ZUZvcm1hdHRlciA9IChwYXJhbXMpID0+IHRoaXMuZm9ybWF0TWFwKHBhcmFtcy52YWx1ZSwgbWFwKTsgICAgICBcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFJvd1NlbGVjdGlvbihjb21wb25lbnQ6IGFueSwgZm9ybUdyb3VwOiBGb3JtR3JvdXApOiBSb3dTZWxlY3Rpb25PcHRpb25zIHwgdW5kZWZpbmVkICB7XHJcbiAgICBsZXQgb3B0aW9uczogUm93U2VsZWN0aW9uT3B0aW9ucyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuICAgIGlmICh0aGlzLnNlbGVjdGFibGUoY29tcG9uZW50LCBmb3JtR3JvdXApKSB7XHJcbiAgICAgIGlmICh0aGlzLm11bHRpU2VsZWN0KGNvbXBvbmVudCwgZm9ybUdyb3VwKSkge1xyXG4gICAgICAgIG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICBtb2RlOiBcIm11bHRpUm93XCIsXHJcbiAgICAgICAgICBzZWxlY3RBbGw6ICdmaWx0ZXJlZCcsXHJcbiAgICAgICAgICBoaWRlRGlzYWJsZWRDaGVja2JveGVzOiB0cnVlXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBvcHRpb25zID0geyBtb2RlOiBcInNpbmdsZVJvd1wiIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjb21wb25lbnQucm93U2VsZWN0YWJsZSkge1xyXG4gICAgICAgIG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAuLi5vcHRpb25zLFxyXG4gICAgICAgICAgaXNSb3dTZWxlY3RhYmxlOiAocm93Tm9kZSkgPT4gdGhpcy5vblJvd1NlbGVjdGFibGUoY29tcG9uZW50LCBmb3JtR3JvdXAsIHJvd05vZGUuZGF0YSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3B0aW9ucztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25Sb3dTZWxlY3RhYmxlKGNvbXBvbmVudDogYW55LCBmb3JtR3JvdXA6IEZvcm1Hcm91cCwgZGF0YTogYW55KSA6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFkYXRhKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGUoZm9ybUdyb3VwLCBjb21wb25lbnQucm93U2VsZWN0YWJsZSwge1xyXG4gICAgICBjYWNoZWFibGU6IGZhbHNlLFxyXG4gICAgICBleHRlbmRDb250ZXh0OiAoKSA9PiAoe1xyXG4gICAgICAgIFwiZXZlbnRcIjoge1xyXG4gICAgICAgICAgZGF0YTogZGF0YVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiByZXN1bHQgPT09IHRydWU7IFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvblJvd1NlbGVjdGVkKGNvbXBvbmVudDogYW55LCBmb3JtR3JvdXA6IEZvcm1Hcm91cCwgZGF0YTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIWRhdGEpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnByb2dyYW1tYWJpbGl0eS5ldmFsdWF0ZShmb3JtR3JvdXAsIGNvbXBvbmVudC5yb3dTZWxlY3RlZCwge1xyXG4gICAgICBjYWNoZWFibGU6IGZhbHNlLFxyXG4gICAgICBleHRlbmRDb250ZXh0OiAoKSA9PiAoe1xyXG4gICAgICAgIFwiZXZlbnRcIjoge1xyXG4gICAgICAgICAgZGF0YTogZGF0YVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiByZXN1bHQgPT09IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uUm93U2VsZWN0aW5nKGNvbXBvbmVudDogYW55LCBmb3JtR3JvdXA6IEZvcm1Hcm91cCwgcGFyYW1zOiBNb2RlbFVwZGF0ZWRFdmVudCkge1xyXG4gICAgaWYgKHBhcmFtcy5uZXdEYXRhICAgICAgXHJcbiAgICAgICYmIGNvbXBvbmVudC5yb3dTZWxlY3RlZFxyXG4gICAgICAmJiB0aGlzLnNlbGVjdGFibGUoY29tcG9uZW50LCBmb3JtR3JvdXApKVxyXG4gICAge1xyXG4gICAgICBwYXJhbXMuYXBpLmZvckVhY2hOb2RlKChub2RlKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMub25Sb3dTZWxlY3RlZChjb21wb25lbnQsIGZvcm1Hcm91cCwgbm9kZS5kYXRhKSkge1xyXG4gICAgICAgICAgbm9kZS5zZXRTZWxlY3RlZCh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdXBwcmVzc0FjdGlvbnMoY29tcG9uZW50OiBhbnksIGZvcm1Hcm91cDogRm9ybUdyb3VwKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGVCb29sZWFuKGZvcm1Hcm91cCwgY29tcG9uZW50LnN1cHByZXNzQWN0aW9ucywgeyBjYWNoZWFibGU6IGZhbHNlIH0pXHJcbiAgICAgID8/IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZWxlY3RhYmxlKGNvbXBvbmVudDogYW55LCBmb3JtR3JvdXA6IEZvcm1Hcm91cCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlQm9vbGVhbihmb3JtR3JvdXAsIGNvbXBvbmVudC5zZWxlY3RhYmxlLCB7IGNhY2hlYWJsZTogZmFsc2UgfSlcclxuICAgICAgPz8gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG11bHRpU2VsZWN0KGNvbXBvbmVudDogYW55LCBmb3JtR3JvdXA6IEZvcm1Hcm91cCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlQm9vbGVhbihmb3JtR3JvdXAsIGNvbXBvbmVudC5tdWx0aVNlbGVjdCwgeyBjYWNoZWFibGU6IGZhbHNlIH0pXHJcbiAgICAgID8/IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQYWdpbmFibGUoY29tcG9uZW50OiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAodHlwZW9mIGNvbXBvbmVudC5yb3dDb3VudCA9PT0gJ251bWJlcicgJiYgY29tcG9uZW50LnJvd0NvdW50ID4gMCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFBhZ2VTaXplKGNvbXBvbmVudDogYW55KSB7XHJcbiAgICBpZiAodHlwZW9mIGNvbXBvbmVudC5yb3dDb3VudCA9PT0gJ251bWJlcicpIHtcclxuICAgICAgcmV0dXJuIGNvbXBvbmVudC5yb3dDb3VudDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VGV4dHMoKTogYW55IHtcclxuICAgIGlmICh0aGlzLmxhbmd1YWdlID09PSAnaXQnKSB7XHJcbiAgICAgIHJldHVybiBBR19HUklEX0xPQ0FMRV9JVDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMubGFuZ3VhZ2UgPT09ICdlbicpIHtcclxuICAgICAgcmV0dXJuIEFHX0dSSURfTE9DQUxFX0VOO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5sYW5ndWFnZSA9PT0gJ2RlJykge1xyXG4gICAgICByZXR1cm4gQUdfR1JJRF9MT0NBTEVfREU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmxhbmd1YWdlID09PSAnZnInKSB7XHJcbiAgICAgIHJldHVybiBBR19HUklEX0xPQ0FMRV9GUjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMubGFuZ3VhZ2UgPT09ICdlcycpIHtcclxuICAgICAgcmV0dXJuIEFHX0dSSURfTE9DQUxFX0VTO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5sYW5ndWFnZSA9PT0gJ3B0Jykge1xyXG4gICAgICByZXR1cm4gQUdfR1JJRF9MT0NBTEVfUFQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmxhbmd1YWdlID09PSAnJykge1xyXG4gICAgICByZXR1cm4gQUdfR1JJRF9MT0NBTEVfSVQ7IC8vIG5ldXRyYWxcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gQUdfR1JJRF9MT0NBTEVfRU47IC8vIGZhbGxiYWNrXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFRoZW1lKCkge1xyXG4gICAgcmV0dXJuIHRoZW1lUXVhcnR6XHJcbiAgICAgIC53aXRoUGFydChpY29uU2V0QWxwaW5lKVxyXG4gICAgICAud2l0aFBhcmFtcyh7XHJcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcIiNGQUZBRkFcIixcclxuICAgICAgICBib3JkZXJDb2xvcjogXCIjRDlFNEY3XCIsXHJcbiAgICAgICAgYnJvd3NlckNvbG9yU2NoZW1lOiBcImxpZ2h0XCIsXHJcbiAgICAgICAgY2VsbFRleHRDb2xvcjogXCIjMDAxMjFBXCIsXHJcbiAgICAgICAgY29sdW1uQm9yZGVyOiB0cnVlLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiaW5oZXJpdFwiLFxyXG4gICAgICAgIGZvbnRTaXplOiAxNixcclxuICAgICAgICBoZWFkZXJCYWNrZ3JvdW5kQ29sb3I6IFwiIzAwMjQ2MFwiLFxyXG4gICAgICAgIGhlYWRlckNvbHVtbkJvcmRlcjogdHJ1ZSxcclxuICAgICAgICBoZWFkZXJDb2x1bW5SZXNpemVIYW5kbGVDb2xvcjogXCIjRjJGNkZDXCIsXHJcbiAgICAgICAgaGVhZGVyQ29sdW1uUmVzaXplSGFuZGxlV2lkdGg6IDIsXHJcbiAgICAgICAgaGVhZGVyRm9udFNpemU6IDE2LFxyXG4gICAgICAgIGhlYWRlckZvbnRXZWlnaHQ6IDYwMCxcclxuICAgICAgICBoZWFkZXJSb3dCb3JkZXI6IHRydWUsXHJcbiAgICAgICAgaGVhZGVyVGV4dENvbG9yOiBcIiNGMkY2RkNcIixcclxuICAgICAgICByb3dCb3JkZXI6IHRydWVcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldERhdGFUeXBlRGVmaW5pdGlvbnMoKTogeyBbY2VsbERhdGFUeXBlOiBzdHJpbmddOiBEYXRhVHlwZURlZmluaXRpb248YW55PjsgfSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB1dWlkOiB7XHJcbiAgICAgICAgYmFzZURhdGFUeXBlOiAndGV4dCcsXHJcbiAgICAgICAgZXh0ZW5kc0RhdGFUeXBlOiAndGV4dCdcclxuICAgICAgfSxcclxuICAgICAgZGF0ZToge1xyXG4gICAgICAgIGJhc2VEYXRhVHlwZTogJ2RhdGVTdHJpbmcnLFxyXG4gICAgICAgIGV4dGVuZHNEYXRhVHlwZTogJ2RhdGVTdHJpbmcnLFxyXG4gICAgICAgIGRhdGVQYXJzZXI6ICh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB2YWx1ZUZvcm1hdHRlcjogcGFyYW1zID0+IHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdHRlci5mb3JtYXREYXRlKHBhcmFtcy52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBkYXRlVGltZToge1xyXG4gICAgICAgIGJhc2VEYXRhVHlwZTogJ2RhdGVTdHJpbmcnLFxyXG4gICAgICAgIGV4dGVuZHNEYXRhVHlwZTogJ2RhdGVTdHJpbmcnLFxyXG4gICAgICAgIGRhdGVQYXJzZXI6ICh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB2YWx1ZUZvcm1hdHRlcjogcGFyYW1zID0+IHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdHRlci5mb3JtYXREYXRlVGltZShwYXJhbXMudmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgdGltZToge1xyXG4gICAgICAgIGJhc2VEYXRhVHlwZTogJ2RhdGVTdHJpbmcnLFxyXG4gICAgICAgIGV4dGVuZHNEYXRhVHlwZTogJ2RhdGVTdHJpbmcnLFxyXG4gICAgICAgIGRhdGVQYXJzZXI6ICh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB2YWx1ZUZvcm1hdHRlcjogcGFyYW1zID0+IHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdHRlci5mb3JtYXRUaW1lKHBhcmFtcy52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBjdXJyZW5jeToge1xyXG4gICAgICAgIGV4dGVuZHNEYXRhVHlwZTogJ251bWJlcicsXHJcbiAgICAgICAgYmFzZURhdGFUeXBlOiAnbnVtYmVyJyxcclxuICAgICAgICB2YWx1ZUZvcm1hdHRlcjogcGFyYW1zID0+IHBhcmFtcy52YWx1ZSA9PSBudWxsXHJcbiAgICAgICAgICA/ICcnXHJcbiAgICAgICAgICA6IHRoaXMuZm9ybWF0dGVyLmZvcm1hdEN1cnJlbmN5KHBhcmFtcy52YWx1ZSlcclxuICAgICAgfSxcclxuICAgICAgZGVjaW1hbDoge1xyXG4gICAgICAgIGV4dGVuZHNEYXRhVHlwZTogJ251bWJlcicsXHJcbiAgICAgICAgYmFzZURhdGFUeXBlOiAnbnVtYmVyJyxcclxuICAgICAgICB2YWx1ZUZvcm1hdHRlcjogcGFyYW1zID0+IHBhcmFtcy52YWx1ZSA9PSBudWxsXHJcbiAgICAgICAgICA/ICcnXHJcbiAgICAgICAgICA6IHRoaXMuZm9ybWF0dGVyLmZvcm1hdE51bWJlcihwYXJhbXMudmFsdWUpXHJcbiAgICAgIH0sXHJcbiAgICAgIGludGVnZXI6IHtcclxuICAgICAgICBleHRlbmRzRGF0YVR5cGU6ICdudW1iZXInLFxyXG4gICAgICAgIGJhc2VEYXRhVHlwZTogJ251bWJlcicsXHJcbiAgICAgICAgdmFsdWVGb3JtYXR0ZXI6IHBhcmFtcyA9PiBwYXJhbXMudmFsdWUgPT0gbnVsbFxyXG4gICAgICAgICAgPyAnJ1xyXG4gICAgICAgICAgOiB0aGlzLmZvcm1hdHRlci5mb3JtYXROdW1iZXIocGFyYW1zLnZhbHVlLCAwKVxyXG4gICAgICB9LFxyXG4gICAgICBwZXJjZW50YWdlOiB7XHJcbiAgICAgICAgZXh0ZW5kc0RhdGFUeXBlOiAnbnVtYmVyJyxcclxuICAgICAgICBiYXNlRGF0YVR5cGU6ICdudW1iZXInLFxyXG4gICAgICAgIHZhbHVlRm9ybWF0dGVyOiBwYXJhbXMgPT4gcGFyYW1zLnZhbHVlID09IG51bGxcclxuICAgICAgICAgID8gJydcclxuICAgICAgICAgIDogYCR7TWF0aC5yb3VuZChwYXJhbXMudmFsdWUgKiAxMDApfSVgLFxyXG4gICAgICB9LFxyXG4gICAgICBmbGFnczoge1xyXG4gICAgICAgIGV4dGVuZHNEYXRhVHlwZTogJ251bWJlcicsXHJcbiAgICAgICAgYmFzZURhdGFUeXBlOiAnbnVtYmVyJ1xyXG4gICAgICB9ICAgICAgXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRNYXAoY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmLCBmb3JtR3JvdXA6IEZvcm1Hcm91cCk6IE1hcFR5cGUge1xyXG5cclxuICAgIGNvbnN0IGFsbG93ZWQgPSAoY29sRGVmLmNlbGxEYXRhVHlwZSA9PT0gXCJib29sZWFuXCJcclxuICAgICAgfHwgY29sRGVmLmNlbGxEYXRhVHlwZSA9PT0gXCJ0ZXh0XCJcclxuICAgICAgfHwgY29sRGVmLmNlbGxEYXRhVHlwZSA9PT0gXCJudW1iZXJcIlxyXG4gICAgICB8fCBjb2xEZWYuY2VsbERhdGFUeXBlID09PSBcImZsYWdzXCIpO1xyXG5cclxuICAgIGlmIChhbGxvd2VkICYmIGNvbHVtbi5tYXApIHtcclxuICAgICAgY29uc3QgbWFwID0gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGUoZm9ybUdyb3VwLCBjb2x1bW4ubWFwVmFsdWVzKTtcclxuXHJcbiAgICAgIGNvbnN0IHZhbGlkID0gaXNSZWNvcmQoXHJcbiAgICAgICAgbWFwLFxyXG4gICAgICAgIGtleSA9PiB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyB8fCB0eXBlb2Yga2V5ID09PSAnbnVtYmVyJyxcclxuICAgICAgICB2YWwgPT4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZydcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICghdmFsaWQpXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgICBpZiAoY29sRGVmLmNlbGxEYXRhVHlwZSA9PT0gXCJmbGFnc1wiKSB7XHJcbiAgICAgICAgKG1hcCBhcyBhbnkpW2dldExhYmVsU3ltYm9sXSA9IChrZXk6IGFueSkgPT4gdGhpcy5mb3JtYXRGbGFncyhrZXksIG1hcCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBtYXA7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvcm1hdE1hcCh2YWx1ZTogYW55LCBtYXA6IE1hcFR5cGUpXHJcbiAge1xyXG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChtYXApIHtcclxuICAgICAgdmFyIHJlc3VsdCA9IG1hcFt2YWx1ZV07XHJcblxyXG4gICAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBjb25zdCBsYWJlbGVkID0gaXNMYWJlbGVkUmVjb3JkKFxyXG4gICAgICAgICAgbWFwLFxyXG4gICAgICAgICAga2V5ID0+IHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBrZXkgPT09ICdudW1iZXInLFxyXG4gICAgICAgICAgdmFsID0+IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnLFxyXG4gICAgICAgICAgZ2V0TGFiZWxTeW1ib2xcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAobGFiZWxlZCkge1xyXG4gICAgICAgICAgcmVzdWx0ID0gbWFwW2dldExhYmVsU3ltYm9sXSh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICByZXR1cm4gcmVzdWx0ID8/IHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvcm1hdEZsYWdzKHZhbHVlOiBhbnksIG1hcDogTWFwVHlwZSkge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiZcclxuICAgICAgaXNSZWNvcmQobWFwLCBpc051bWVyaWNLZXksIHZhbCA9PiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJylcclxuICAgICkge1xyXG4gICAgICBpZiAodmFsdWUgPT0gMCkge1xyXG4gICAgICAgIHJldHVybiBtYXBbMF0gPz8gXCIwXCI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGF2YWlsYWJsZUZsYWdzID0gT2JqZWN0LmtleXMobWFwKVxyXG4gICAgICAgIC5tYXAoTnVtYmVyKVxyXG4gICAgICAgIC5maWx0ZXIoZmxhZyA9PiBmbGFnICE9PSAwKTtcclxuXHJcbiAgICAgIGNvbnN0IGZsYWdzID0gYXZhaWxhYmxlRmxhZ3MuZmlsdGVyKGZsYWcgPT4gKHZhbHVlICYgZmxhZykgPT09IGZsYWcpO1xyXG5cclxuICAgICAgY29uc3Qgc3VtRmxhZ3MgPSBmbGFncy5yZWR1Y2UoKHN1bSwgZikgPT4gc3VtIHwgZiwgMCk7XHJcblxyXG4gICAgICBpZiAoKHZhbHVlICYgc3VtRmxhZ3MpICE9PSB2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gZmxhZ3NcclxuICAgICAgICAubWFwKGZsYWcgPT4gbWFwW2ZsYWddKVxyXG4gICAgICAgIC5maWx0ZXIoKGxhYmVsKTogbGFiZWwgaXMgc3RyaW5nID0+ICEhbGFiZWwpXHJcbiAgICAgICAgLmpvaW4oJywgJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbmF2aWdhdGVJbnNpZGVDZWxsKHsgZXZlbnQgfTogU3VwcHJlc3NLZXlib2FyZEV2ZW50UGFyYW1zPGFueT4pIHtcclxuICAgIGNvbnN0IEdSSURfQ0VMTF9DTEFTU05BTUUgPSBcImFnLWNlbGxcIjtcclxuICAgIGNvbnN0IHsga2V5LCBzaGlmdEtleSB9ID0gZXZlbnQ7XHJcbiAgICBjb25zdCBwYXRoID0gdGhpcy5nZXRFdmVudFBhdGgoZXZlbnQpO1xyXG4gICAgY29uc3QgaXNUYWJGb3J3YXJkID0ga2V5ID09PSBcIlRhYlwiICYmIHNoaWZ0S2V5ID09PSBmYWxzZTtcclxuICAgIGNvbnN0IGlzVGFiQmFja3dhcmQgPSBrZXkgPT09IFwiVGFiXCIgJiYgc2hpZnRLZXkgPT09IHRydWU7XHJcbiAgICBsZXQgc3VwcHJlc3NFdmVudCA9IGZhbHNlO1xyXG4gICAgLy8gSGFuZGxlIGNlbGwgY2hpbGRyZW4gdGFiYmluZ1xyXG4gICAgaWYgKGlzVGFiRm9yd2FyZCB8fCBpc1RhYkJhY2t3YXJkKSB7XHJcbiAgICAgIGNvbnN0IGVHcmlkQ2VsbCA9IHBhdGguZmluZCgoZWwpID0+IHtcclxuICAgICAgICBpZiAoZWwuY2xhc3NMaXN0ID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcclxuICAgICAgICByZXR1cm4gZWwuY2xhc3NMaXN0LmNvbnRhaW5zKEdSSURfQ0VMTF9DTEFTU05BTUUpO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKCFlR3JpZENlbGwpIHtcclxuICAgICAgICByZXR1cm4gc3VwcHJlc3NFdmVudDtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBmb2N1c2FibGVDaGlsZHJlbkVsZW1lbnRzID0gZ2V0Rm9jdXNhYmxlcyhlR3JpZENlbGwpO1xyXG4gICAgICBjb25zdCBsYXN0Q2VsbENoaWxkRWwgPVxyXG4gICAgICAgIGZvY3VzYWJsZUNoaWxkcmVuRWxlbWVudHNbZm9jdXNhYmxlQ2hpbGRyZW5FbGVtZW50cy5sZW5ndGggLSAxXTtcclxuICAgICAgY29uc3QgZmlyc3RDZWxsQ2hpbGRFbCA9IGZvY3VzYWJsZUNoaWxkcmVuRWxlbWVudHNbMF07XHJcbiAgICAgIC8vIFN1cHByZXNzIGtleWJvYXJkIGV2ZW50IGlmIHRhYmJpbmcgZm9yd2FyZCB3aXRoaW4gdGhlIGNlbGwgYW5kIHRoZSBjdXJyZW50IGZvY3VzZWQgZWxlbWVudCBpcyBub3QgdGhlIGxhc3QgY2hpbGRcclxuICAgICAgaWYgKGZvY3VzYWJsZUNoaWxkcmVuRWxlbWVudHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGZvY3VzYWJsZUNoaWxkcmVuRWxlbWVudHMuaW5kZXhPZihcclxuICAgICAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50LFxyXG4gICAgICApO1xyXG4gICAgICBpZiAoaXNUYWJGb3J3YXJkKSB7XHJcbiAgICAgICAgY29uc3QgaXNMYXN0Q2hpbGRGb2N1c2VkID1cclxuICAgICAgICAgIGxhc3RDZWxsQ2hpbGRFbCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBsYXN0Q2VsbENoaWxkRWw7XHJcbiAgICAgICAgaWYgKCFpc0xhc3RDaGlsZEZvY3VzZWQpIHtcclxuICAgICAgICAgIHN1cHByZXNzRXZlbnQgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCAhPT0gLTEgfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZUdyaWRDZWxsKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGZvY3VzYWJsZUNoaWxkcmVuRWxlbWVudHNbY3VycmVudEluZGV4ICsgMV0uZm9jdXMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gU3VwcHJlc3Mga2V5Ym9hcmQgZXZlbnQgaWYgdGFiYmluZyBiYWNrd2FyZHMgd2l0aGluIHRoZSBjZWxsLCBhbmQgdGhlIGN1cnJlbnQgZm9jdXNlZCBlbGVtZW50IGlzIG5vdCB0aGUgZmlyc3QgY2hpbGRcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc3QgY2VsbEhhc0ZvY3VzZWRDaGlsZHJlbiA9XHJcbiAgICAgICAgICBlR3JpZENlbGwuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkgJiZcclxuICAgICAgICAgIGVHcmlkQ2VsbCAhPT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcclxuICAgICAgICAvLyBNYW51YWxseSBzZXQgZm9jdXMgdG8gdGhlIGxhc3QgY2hpbGQgZWxlbWVudCBpZiBjZWxsIGRvZXNuJ3QgaGF2ZSBmb2N1c2VkIGNoaWxkcmVuXHJcbiAgICAgICAgaWYgKCFjZWxsSGFzRm9jdXNlZENoaWxkcmVuKSB7XHJcbiAgICAgICAgICBsYXN0Q2VsbENoaWxkRWwuZm9jdXMoKTtcclxuICAgICAgICAgIC8vIENhbmNlbCBrZXlib2FyZCBwcmVzcywgc28gdGhhdCBpdCBkb2Vzbid0IGZvY3VzIG9uIHRoZSBsYXN0IGNoaWxkIGFuZCB0aGVuIHBhc3MgdGhyb3VnaCB0aGUga2V5Ym9hcmQgcHJlc3MgdG9cclxuICAgICAgICAgIC8vIG1vdmUgdG8gdGhlIDJuZCBsYXN0IGNoaWxkIGVsZW1lbnRcclxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlzRmlyc3RDaGlsZEZvY3VzZWQgPVxyXG4gICAgICAgICAgZmlyc3RDZWxsQ2hpbGRFbCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBmaXJzdENlbGxDaGlsZEVsO1xyXG4gICAgICAgIGlmICghaXNGaXJzdENoaWxkRm9jdXNlZCkge1xyXG4gICAgICAgICAgc3VwcHJlc3NFdmVudCA9IHRydWU7XHJcbiAgICAgICAgICBpZiAoY3VycmVudEluZGV4ICE9PSAtMSB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBlR3JpZENlbGwpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZm9jdXNhYmxlQ2hpbGRyZW5FbGVtZW50c1tjdXJyZW50SW5kZXggLSAxXS5mb2N1cygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN1cHByZXNzRXZlbnQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEV2ZW50UGF0aChldmVudDogRXZlbnQpOiBIVE1MRWxlbWVudFtdIHtcclxuICAgIGNvbnN0IHBhdGg6IEhUTUxFbGVtZW50W10gPSBbXTtcclxuICAgIGxldCBjdXJyZW50VGFyZ2V0OiBhbnkgPSBldmVudC50YXJnZXQ7XHJcbiAgICB3aGlsZSAoY3VycmVudFRhcmdldCkge1xyXG4gICAgICBwYXRoLnB1c2goY3VycmVudFRhcmdldCk7XHJcbiAgICAgIGN1cnJlbnRUYXJnZXQgPSBjdXJyZW50VGFyZ2V0LnBhcmVudEVsZW1lbnQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGF0aDtcclxuICB9XHJcbn1cclxuIl19
787
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvc2VydmljZXMvZ3JpZC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUNHLGdCQUFnQixFQUFFLHdCQUF3QixFQUFFLHNCQUFzQixFQUN4RSxZQUFZLEVBQUUsZUFBZSxFQUFvQixZQUFZLEVBQzdELGtCQUFrQixFQUNsQixnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFDOUMsV0FBVyxFQUFFLGFBQWEsRUFDbEMsMkJBQTJCLEVBQUUsbUJBQW1CLEVBQ1Asb0JBQW9CLEVBQUUsZUFBZSxFQUVoRCxzQkFBc0IsRUFDdkQsTUFBTSxtQkFBbUIsQ0FBQztBQUUzQixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUN6RyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUN6RyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxpRUFBaUUsQ0FBQztBQUMvRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNqRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUl0RyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNsQixN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bnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIE1vZHVsZSwgUGFnaW5hdGlvbk1vZHVsZSwgQ2xpZW50U2lkZVJvd01vZGVsTW9kdWxlLCBJbmZpbml0ZVJvd01vZGVsTW9kdWxlXHJcbiAgLCBMb2NhbGVNb2R1bGUsIENlbGxTdHlsZU1vZHVsZSwgVmFsaWRhdGlvbk1vZHVsZSwgUm93QXBpTW9kdWxlIFxyXG4gICwgUm93U2VsZWN0aW9uTW9kdWxlLCBSb3dTZWxlY3Rpb25PcHRpb25zIFxyXG4gICwgVGV4dEZpbHRlck1vZHVsZSwgTnVtYmVyRmlsdGVyTW9kdWxlLCBEYXRlRmlsdGVyTW9kdWxlXHJcbiAgLCBDb2xEZWYsIHRoZW1lUXVhcnR6LCBpY29uU2V0QWxwaW5lLCBHcmlkT3B0aW9ucywgRGF0YVR5cGVEZWZpbml0aW9uXHJcbiAgLCBDbGllbnRTaWRlUm93TW9kZWxBcGlNb2R1bGUsIFJvd0F1dG9IZWlnaHRNb2R1bGVcclxuICAsIEdyaWRTaXplQ2hhbmdlZEV2ZW50LCBNb2RlbFVwZGF0ZWRFdmVudCwgQ29sdW1uQXV0b1NpemVNb2R1bGUsIENvbHVtbkFwaU1vZHVsZSwgR3JpZEFwaVxyXG4gICwgU3VwcHJlc3NLZXlib2FyZEV2ZW50UGFyYW1zXHJcbiAgLCBHZXRSb3dJZEZ1bmMsIEdldFJvd0lkUGFyYW1zLCBIaWdobGlnaHRDaGFuZ2VzTW9kdWxlXHJcbn0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE9iamVjdFVSTFJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9vYmplY3RVUkxSZW5kZXJlci9vYmplY3RVUkxSZW5kZXJlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEZWxldGVSb3dSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvZGVsZXRlUm93UmVuZGVyZXIvZGVsZXRlUm93UmVuZGVyZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQWN0aW9uc0NlbGxSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYWN0aW9uc0NlbGxSZW5kZXJlci9hY3Rpb25zQ2VsbFJlbmRlcmVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNldEZpbHRlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvc2V0RmlsdGVyL3NldEZpbHRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBIb3N0Q2VsbFJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9ob3N0Q2VsbFJlbmRlcmVyL2hvc3RDZWxsUmVuZGVyZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRm9ybWF0dGVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Zvcm1hdHRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUHJvZ3JhbW1hYmlsaXR5U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Byb2dyYW1tYWJpbGl0eS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV2Vha1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy93ZWFrLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBnZXRGb2N1c2FibGVzIH0gZnJvbSAnLi4vdXRpbHMvZm9jdXNhYmxlJztcclxuaW1wb3J0IHsgaXNSZWNvcmQsIGlzTGFiZWxlZFJlY29yZCwgaXNOdW1lcmljS2V5IH0gZnJvbSAnLi4vY29tbW9uL3JlY29yZCc7XHJcbmltcG9ydCB7IGdldExhYmVsU3ltYm9sIH0gZnJvbSAnLi4vY29tbW9uL3N5bWJvbHMnO1xyXG5pbXBvcnQge1xyXG4gIEFHX0dSSURfTE9DQUxFX0lULFxyXG4gIEFHX0dSSURfTE9DQUxFX0VOLFxyXG4gIEFHX0dSSURfTE9DQUxFX0RFLFxyXG4gIEFHX0dSSURfTE9DQUxFX0ZSLFxyXG4gIEFHX0dSSURfTE9DQUxFX0VTLFxyXG4gIEFHX0dSSURfTE9DQUxFX1BUICBcclxufSBmcm9tICdAYWctZ3JpZC1jb21tdW5pdHkvbG9jYWxlJztcclxuXHJcbmltcG9ydCB7IExhbmd1YWdlU2VydmljZSB9IGZyb20gJ0B3ZW1ha2U0dS9pbnRlcmFjdCc7XHJcbmltcG9ydCB7IFRleHRzIH0gZnJvbSAnLi4vbG9jYWxlL2xvY2FsZSc7XHJcbmltcG9ydCB7IGxvY2FsaXplIH0gZnJvbSAnLi4vbG9jYWxlL2xvY2FsaXplJztcclxuXHJcbnR5cGUgTWFwVHlwZSA9IFJlY29yZDxzdHJpbmcgfCBudW1iZXIsIHN0cmluZz4gfCBudWxsO1xyXG5cclxudHlwZSBHcm91cE5vZGUgPSB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIHR5cGU6IFwiZ3JvdXBcIjtcclxuICBjb2x1bW5zOiAoR3JvdXBOb2RlIHwgYW55KVtdO1xyXG59O1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgR3JpZFNlcnZpY2Uge1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZvcm1hdHRlcjogRm9ybWF0dGVyU2VydmljZVxyXG4gICAgLCBwcml2YXRlIGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgcHJvZ3JhbW1hYmlsaXR5OiBQcm9ncmFtbWFiaWxpdHlTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgd2VhazogV2Vha1NlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIGdldE1vZHVsZXMoKTogTW9kdWxlW10ge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgQ2xpZW50U2lkZVJvd01vZGVsTW9kdWxlXHJcbiAgICAgICwgSW5maW5pdGVSb3dNb2RlbE1vZHVsZVxyXG4gICAgICAsIFBhZ2luYXRpb25Nb2R1bGVcclxuICAgICAgLCBMb2NhbGVNb2R1bGVcclxuICAgICAgLCBDZWxsU3R5bGVNb2R1bGVcclxuICAgICAgLCBDbGllbnRTaWRlUm93TW9kZWxBcGlNb2R1bGVcclxuICAgICAgLCBUZXh0RmlsdGVyTW9kdWxlXHJcbiAgICAgICwgTnVtYmVyRmlsdGVyTW9kdWxlXHJcbiAgICAgICwgRGF0ZUZpbHRlck1vZHVsZVxyXG4gICAgICAsIENvbHVtbkF1dG9TaXplTW9kdWxlXHJcbiAgICAgICwgQ29sdW1uQXBpTW9kdWxlXHJcbiAgICAgICwgUm93U2VsZWN0aW9uTW9kdWxlXHJcbiAgICAgICwgUm93QXBpTW9kdWxlXHJcbiAgICAgICwgUm93QXV0b0hlaWdodE1vZHVsZVxyXG4gICAgICAsIEhpZ2hsaWdodENoYW5nZXNNb2R1bGVcclxuICAgICAgLy8sIFZhbGlkYXRpb25Nb2R1bGVcclxuICAgIF07XHJcbiAgfTtcclxuXHJcbiAgZ2V0T3B0aW9ucyhjb21wb25lbnQ6IGFueSwgZm9ybUdyb3VwOiBGb3JtR3JvdXApOiBHcmlkT3B0aW9ucyB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmdldFJvd1NlbGVjdGlvbihjb21wb25lbnQsIGZvcm1Hcm91cCk7XHJcbiAgICBjb25zdCByb3dJZCA9IHRoaXMuZ2V0Um93SWQoY29tcG9uZW50KTtcclxuICAgIGNvbnN0IHBhZ2luYXRpb24gPSB0aGlzLmdldFBhZ2luYWJsZShjb21wb25lbnQpO1xyXG4gICAgY29uc3QgcGFnZVNpemUgPSB0aGlzLmdldFBhZ2VTaXplKGNvbXBvbmVudCk7XHJcbiAgICBjb25zdCB0ZXh0cyA9IHRoaXMuZ2V0VGV4dHMoKTtcclxuICAgIGNvbnN0IHRoZW1lID0gdGhpcy5nZXRUaGVtZSgpO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZGVmYXVsdENvbERlZjoge1xyXG4gICAgICAgIGZsb2F0aW5nRmlsdGVyOiAoY29tcG9uZW50LmZsb2F0aW5nRmlsdGVyID09PSB0cnVlKSxcclxuICAgICAgICBoZWFkZXJDbGFzczogKGNvbXBvbmVudC5mbG9hdGluZ0ZpbHRlciA9PT0gdHJ1ZSlcclxuICAgICAgICAgID8gJ3Nob3ctZmlsdGVyJyA6ICdoaWRlLWZpbHRlcidcclxuICAgICAgfSxcclxuICAgICAgc2VsZWN0aW9uQ29sdW1uRGVmOiB7XHJcbiAgICAgICAgcGlubmVkOiAnbGVmdCdcclxuICAgICAgfSxcclxuICAgICAgZGF0YVR5cGVEZWZpbml0aW9uczogdGhpcy5nZXREYXRhVHlwZURlZmluaXRpb25zKCksXHJcbiAgICAgIHJvd1NlbGVjdGlvbjogc2VsZWN0aW9uLFxyXG4gICAgICBwYWdpbmF0aW9uOiBwYWdpbmF0aW9uLFxyXG4gICAgICBwYWdpbmF0aW9uUGFnZVNpemU6IHBhZ2VTaXplLFxyXG4gICAgICBjYWNoZUJsb2NrU2l6ZTogcGFnZVNpemUsXHJcbiAgICAgIHBhZ2luYXRpb25QYWdlU2l6ZVNlbGVjdG9yOiBbNSwgMTAsIDIwLCA1MF0sXHJcbiAgICAgIGxvY2FsZVRleHQ6IHRleHRzLFxyXG4gICAgICBlbmFibGVDZWxsVGV4dFNlbGVjdGlvbjogdHJ1ZSxcclxuICAgICAgdGhlbWU6IHRoZW1lLFxyXG4gICAgICBnZXRSb3dJZDogcm93SWQsXHJcbiAgICAgIG9uR3JpZFNpemVDaGFuZ2VkOiAocGFyYW1zOiBHcmlkU2l6ZUNoYW5nZWRFdmVudCkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVzaXplR3JpZChjb21wb25lbnQsIHBhcmFtcy5hcGkpO1xyXG4gICAgICB9LFxyXG4gICAgICBvbk1vZGVsVXBkYXRlZDogKHBhcmFtczogTW9kZWxVcGRhdGVkRXZlbnQpID0+IHtcclxuICAgICAgICB0aGlzLnJlc2l6ZUdyaWQoY29tcG9uZW50LCBwYXJhbXMuYXBpKTtcclxuICAgICAgICB0aGlzLm9uUm93U2VsZWN0aW5nKGNvbXBvbmVudCwgZm9ybUdyb3VwLCBwYXJhbXMpOyAgICAgICAgXHJcbiAgICAgIH0gICAgICBcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXRDb2x1bW5EZWZzKGNvbXBvbmVudDogYW55LCBjb2x1bW5zOiBhbnksIGZvcm1Hcm91cDogRm9ybUdyb3VwKTogQ29sRGVmW10ge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY29sdW1ucykpIHtcclxuICAgICAgY29uc3QgZ3JvdXBlZENvbHVtbnMgPSB0aGlzLmdyb3VwQ29sdW1ucyhjb2x1bW5zKTtcclxuICAgICAgY29uc3QgY29sdW1uRGVmcyA9IHRoaXMuZ3JvdXBzVG9Db2x1bW5EZWZzKGdyb3VwZWRDb2x1bW5zXHJcbiAgICAgICAgLCAoY3MpID0+IHRoaXMuY3JlYXRlQ29sdW1uRGVmcyhjb21wb25lbnQsIGNzLCBmb3JtR3JvdXApKTtcclxuXHJcbiAgICAgIHRoaXMuYWRkQWN0aW9uQ29sdW1uRGVmKGNvbXBvbmVudCwgY29sdW1uRGVmcywgZm9ybUdyb3VwKTtcclxuICAgICAgdGhpcy5hZGRSb3dOdW1iZXJzQ29sdW1uRGVmKGNvbXBvbmVudCwgY29sdW1uRGVmcyk7XHJcblxyXG4gICAgICByZXR1cm4gY29sdW1uRGVmcztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGlvbkNoYW5nZWQoY29tcG9uZW50OiBhbnksIGZvcm1Hcm91cDogRm9ybUdyb3VwLCBldmVudDogYW55KSB7XHJcbiAgICBpZiAoY29tcG9uZW50LnNlbGVjdGlvbkNoYW5nZWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlKGZvcm1Hcm91cCwgY29tcG9uZW50LnNlbGVjdGlvbkNoYW5nZWQsIHtcclxuICAgICAgICBjYWNoZWFibGU6IGZhbHNlLFxyXG4gICAgICAgIGV4dGVuZENvbnRleHQ6ICgpID0+ICh7XHJcbiAgICAgICAgICBcImV2ZW50XCI6IHtcclxuICAgICAgICAgICAgc2VsZWN0ZWRSb3dzOiBldmVudC5hcGkuZ2V0U2VsZWN0ZWRSb3dzKClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENhY2hlS2V5KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYGdldEdyaWRPcHRpb25zXyR7dGhpcy5sYW5ndWFnZX1gO1xyXG4gIH1cclxuXHJcbiAgaW52YWxpZGF0ZU9wdGlvbnMoY29tcG9uZW50OiBhbnkpIHtcclxuICAgIHRoaXMud2Vhay5pbnZhbGlkYXRlKGNvbXBvbmVudCwgdGhpcy5nZXRDYWNoZUtleSgpKTtcclxuICB9XHJcblxyXG4gIG9uUm93RGF0YUNoYW5nZWQoY29tcG9uZW50OiBhbnksIGFwaTogR3JpZEFwaSwgcm93RGF0YTogYW55KSB7ICAgIFxyXG4gICAgaWYgKHRoaXMuaGFzUm93TnVtYmVycyhjb21wb25lbnQpICYmIHRoaXMuaGFzUm93SWQoY29tcG9uZW50KSkge1xyXG4gICAgICB0aGlzLnJlZnJlc2hSb3dOdW1iZXJzKGFwaSk7XHJcbiAgICB9ICAgICAgXHJcbiAgfVxyXG5cclxuICBvbkRhdGFTb3VyY2VDaGFuZ2VkKGNvbXBvbmVudDogYW55LCBhcGk6IEdyaWRBcGksIGRhdGFTb3VyY2U6IGFueSkge1xyXG4gICAgLy8gTm90aGluZ1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXQgbGFuZ3VhZ2UoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmxhbmd1YWdlU2VydmljZS5nZXRMYW5ndWFnZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2NhbGUoY29tcG9uZW50OiBhbnksIGtleTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBsb2NhbGl6ZSh0aGlzLmxhbmd1YWdlLCBjb21wb25lbnQsIGtleSk7XHJcbiAgfVxyXG5cclxuICByZXNpemVHcmlkKGNvbXBvbmVudDogYW55LCBhcGk6IEdyaWRBcGkpIHtcclxuICAgIGNvbnN0IGNvbHVtbnNUb1Jlc2l6ZTogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBpZiAodGhpcy5oYXNBY3Rpb25zKGNvbXBvbmVudCkpIHtcclxuICAgICAgY29sdW1uc1RvUmVzaXplLnB1c2goJ2FjdGlvbnMnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5oYXNSb3dOdW1iZXJzKGNvbXBvbmVudCkpIHtcclxuICAgICAgY29sdW1uc1RvUmVzaXplLnB1c2goJ3Jvd051bWJlcnMnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29sdW1uc1RvUmVzaXplLmxlbmd0aCA+IDApIHtcclxuICAgICAgYXBpLmF1dG9TaXplQ29sdW1ucyhjb2x1bW5zVG9SZXNpemUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYXNBY3Rpb25zKGNvbXBvbmVudDogYW55KSB7XHJcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShjb21wb25lbnQuYWN0aW9ucykgJiYgY29tcG9uZW50LmFjdGlvbnMubGVuZ3RoID4gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFzUm93TnVtYmVycyhjb21wb25lbnQ6IGFueSkge1xyXG4gICAgcmV0dXJuIChjb21wb25lbnQucm93TnVtYmVycyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUNvbHVtbkRlZnMoY29tcG9uZW50OiBhbnksIGNvbHVtbnM6IGFueSwgZm9ybUdyb3VwOiBGb3JtR3JvdXApOiBDb2xEZWZbXSB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjb2x1bW5zKSkge1xyXG4gICAgICBjb25zdCBjb2x1bW5EZWZzID0gY29sdW1ucy5tYXAoKGNvbHVtbjogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgY29sRGVmOiBDb2xEZWYgPSB7XHJcbiAgICAgICAgICBmaWVsZDogY29sdW1uLmtleSxcclxuICAgICAgICAgIGhlYWRlck5hbWU6IHRoaXMubG9jYWxlKGNvbHVtbiwgJ2xhYmVsJylcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0Q2VsbERhdGFUeXBlKGNvbHVtbiwgY29sRGVmKTtcclxuXHJcbiAgICAgICAgY29uc3QgbWFwID0gdGhpcy5nZXRNYXAoY29sdW1uLCBjb2xEZWYsIGZvcm1Hcm91cCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0Q2VsbFJlbmRlcmVyKGNvbHVtbiwgY29sRGVmLCBtYXAsIGZvcm1Hcm91cCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdHlsZXMoY29sdW1uLCBjb2xEZWYpO1xyXG4gICAgICAgIHRoaXMuc2V0QXV0b0hlaWdodChjb2x1bW4sIGNvbERlZik7XHJcbiAgICAgICAgdGhpcy5zZXRSZXNpemFibGUoY29sdW1uLCBjb2xEZWYpO1xyXG4gICAgICAgIHRoaXMuc2V0U29ydGFibGUoY29sdW1uLCBjb2xEZWYpO1xyXG4gICAgICAgIHRoaXMuc2V0RmlsdGVyKGNvbHVtbiwgY29sRGVmLCBtYXApO1xyXG4gICAgICAgIHRoaXMuc2V0RmlsdGVyUGFyYW1zKGNvbHVtbiwgY29sRGVmLCBtYXApO1xyXG4gICAgICAgIHRoaXMuc2V0U3VwcHJlc3NNb3ZhYmxlKGNvbHVtbiwgY29sRGVmKTtcclxuICAgICAgICB0aGlzLnNldEZsZXgoY29sdW1uLCBjb2xEZWYpO1xyXG4gICAgICAgIHRoaXMuc2V0QWxpZ24oY29sdW1uLCBjb2xEZWYpO1xyXG4gICAgICAgIHRoaXMuc2V0UGlubmVkKGNvbHVtbiwgY29sRGVmKTtcclxuICAgICAgICB0aGlzLnNldFdpZHRoKGNvbHVtbiwgY29sRGVmKTtcclxuICAgICAgICB0aGlzLnNldFZhbHVlRm9ybWF0dGVyKGNvbHVtbiwgY29sRGVmLCBtYXApO1xyXG4gICAgICAgIHRoaXMuc2V0Q2VsbENoYW5nZUZsYXNoKGNvbHVtbiwgY29sRGVmKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNvbERlZjtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXR1cm4gY29sdW1uRGVmcztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZEFjdGlvbkNvbHVtbkRlZihjb21wb25lbnQ6IGFueSwgY29sdW1uRGVmczogQ29sRGVmW10sIGZvcm1Hcm91cDogRm9ybUdyb3VwKSB7XHJcbiAgICBpZiAodGhpcy5oYXNBY3Rpb25zKGNvbXBvbmVudCkpIHtcclxuICAgICAgY29sdW1uRGVmcy5wdXNoKHtcclxuICAgICAgICBjb2xJZDogJ2FjdGlvbnMnLFxyXG4gICAgICAgIGhlYWRlck5hbWU6IHRoaXMubG9jYWxlKFRleHRzLCAnQWN0aW9ucycpLFxyXG4gICAgICAgIHJlc2l6YWJsZTogZmFsc2UsXHJcbiAgICAgICAgc29ydGFibGU6IGZhbHNlLFxyXG4gICAgICAgIGZpbHRlcjogZmFsc2UsXHJcbiAgICAgICAgY2VsbERhdGFUeXBlOiBmYWxzZSxcclxuICAgICAgICBoaWRlOiB0aGlzLnN1cHByZXNzQWN0aW9ucyhjb21wb25lbnQsIGZvcm1Hcm91cCksXHJcbiAgICAgICAgcGlubmVkOiBcInJpZ2h0XCIsICAgICAgICBcclxuICAgICAgICBjZWxsUmVuZGVyZXJQYXJhbXM6IHtcclxuICAgICAgICAgIGNvbXBvbmVudDogY29tcG9uZW50LFxyXG4gICAgICAgICAgZm9ybUdyb3VwOiBmb3JtR3JvdXBcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNlbGxSZW5kZXJlcjogQWN0aW9uc0NlbGxSZW5kZXJlckNvbXBvbmVudCxcclxuICAgICAgICBzdXBwcmVzc0tleWJvYXJkRXZlbnQ6IHRoaXMubmF2aWdhdGVJbnNpZGVDZWxsLmJpbmQodGhpcylcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZFJvd051bWJlcnNDb2x1bW5EZWYoY29tcG9uZW50OiBhbnksIGNvbHVtbkRlZnM6IENvbERlZltdKSB7ICAgIFxyXG4gICAgaWYgKHRoaXMuaGFzUm93TnVtYmVycyhjb21wb25lbnQpKSB7XHJcbiAgICAgIGNvbHVtbkRlZnMudW5zaGlmdCh7XHJcbiAgICAgICAgY29sSWQ6ICdyb3dOdW1iZXJzJyxcclxuICAgICAgICBoZWFkZXJOYW1lOiBcIiNcIixcclxuICAgICAgICBwaW5uZWQ6IFwibGVmdFwiLFxyXG4gICAgICAgIGhlYWRlckNsYXNzOiAncm93LW51bWJlcnMtaGVhZGVyJyxcclxuICAgICAgICBjZWxsQ2xhc3M6ICdyb3ctbnVtYmVycy1jZWxsJyxcclxuICAgICAgICByZXNpemFibGU6IGZhbHNlLFxyXG4gICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcclxuICAgICAgICB2YWx1ZUdldHRlcjogKG46IGFueSkgPT4gbi5ub2RlLnJvd0luZGV4ICsgMVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVmcmVzaFJvd051bWJlcnMoYXBpOiBHcmlkQXBpKSB7XHJcbiAgICBpZiAoYXBpKSB7XHJcbiAgICAgIGNvbnN0IHJvd051bWJlcnMgPSBbXCJyb3dOdW1iZXJzXCJdO1xyXG4gICAgICBhcGkuc2V0Q29sdW1uc1Zpc2libGUocm93TnVtYmVycywgZmFsc2UpO1xyXG4gICAgICBhcGkuc2V0Q29sdW1uc1Zpc2libGUocm93TnVtYmVycywgdHJ1ZSk7ICBcclxuICAgIH0gICAgXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdyb3VwQ29sdW1ucyhjb2x1bW5zOiBhbnlbXSk6IChHcm91cE5vZGUgfCBhbnkpW10ge1xyXG4gICAgY29uc3Qgcm9vdEl0ZW1zT3JkZXJlZDogKEdyb3VwTm9kZSB8IGFueSlbXSA9IFtdO1xyXG5cclxuICAgIGZ1bmN0aW9uIGZpbmRPckNyZWF0ZUdyb3VwKFxyXG4gICAgICBncm91cHM6IChHcm91cE5vZGUgfCBhbnkpW10sXHJcbiAgICAgIG5hbWU6IHN0cmluZ1xyXG4gICAgKTogR3JvdXBOb2RlIHtcclxuICAgICAgbGV0IGdyb3VwID0gZ3JvdXBzLmZpbmQoXHJcbiAgICAgICAgaXRlbSA9PiAoaXRlbSBhcyBHcm91cE5vZGUpLnR5cGUgPT09IFwiZ3JvdXBcIiAmJiAoaXRlbSBhcyBHcm91cE5vZGUpLm5hbWUgPT09IG5hbWVcclxuICAgICAgKSBhcyBHcm91cE5vZGU7XHJcblxyXG4gICAgICBpZiAoIWdyb3VwKSB7XHJcbiAgICAgICAgZ3JvdXAgPSB7XHJcbiAgICAgICAgICBuYW1lLFxyXG4gICAgICAgICAgdHlwZTogXCJncm91cFwiLFxyXG4gICAgICAgICAgY29sdW1uczogW10sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBncm91cHMucHVzaChncm91cCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBncm91cDtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcbiAgICAgIGNvbnN0IGdyb3VwUGFydHMgPSAoY29sdW1uLmdyb3VwID8/IFwiXCIpXHJcbiAgICAgICAgLnNwbGl0KC9bXFxcXC9dLylcclxuICAgICAgICAubWFwKChwYXJ0OiBzdHJpbmcpID0+IHBhcnQudHJpbSgpKVxyXG4gICAgICAgIC5maWx0ZXIoKHBhcnQ6IHN0cmluZykgPT4gcGFydC5sZW5ndGggPiAwKTtcclxuXHJcbiAgICAgIGlmIChncm91cFBhcnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJvb3RJdGVtc09yZGVyZWQucHVzaChjb2x1bW4pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBjdXJyZW50TGV2ZWwgPSByb290SXRlbXNPcmRlcmVkO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ3JvdXBQYXJ0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgcGFydCA9IGdyb3VwUGFydHNbaV07XHJcbiAgICAgICAgICBjb25zdCBncm91cCA9IGZpbmRPckNyZWF0ZUdyb3VwKGN1cnJlbnRMZXZlbCwgcGFydCk7XHJcbiAgICAgICAgICBjdXJyZW50TGV2ZWwgPSBncm91cC5jb2x1bW5zO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjdXJyZW50TGV2ZWwucHVzaChjb2x1bW4pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJvb3RJdGVtc09yZGVyZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdyb3Vwc1RvQ29sdW1uRGVmcyhncm91cGVkOiAoR3JvdXBOb2RlIHwgYW55KVtdLCBnZXRDb2x1bW5zRGVmOiAoY29sdW1uczogYW55W10pID0+IENvbERlZltdKTogYW55W10ge1xyXG4gICAgcmV0dXJuIGdyb3VwZWQubWFwKGl0ZW0gPT4ge1xyXG4gICAgICBpZiAoJ3R5cGUnIGluIGl0ZW0gJiYgaXRlbS50eXBlID09PSAnZ3JvdXAnKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGhlYWRlck5hbWU6IGl0ZW0ubmFtZSxcclxuICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLmdyb3Vwc1RvQ29sdW1uRGVmcyhpdGVtLmNvbHVtbnMsIGdldENvbHVtbnNEZWYpXHJcbiAgICAgICAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZ2V0Q29sdW1uc0RlZihbaXRlbV0pWzBdO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Q2VsbERhdGFUeXBlKGNvbHVtbjogYW55LCBjb2xEZWY6IENvbERlZikge1xyXG4gICAgaWYgKGNvbHVtbi5kYXRhVHlwZSA9PT0gXCJjb21wb25lbnRcIlxyXG4gICAgICB8fCBjb2x1bW4uZGF0YVR5cGUgPT09IFwiYXV0b1wiKSByZXR1cm47XHJcblxyXG4gICAgaWYgKHR5cGVvZiBjb2x1bW4uZGF0YVR5cGUgPT09IFwic3RyaW5nXCJcclxuICAgICAgJiYgY29sdW1uLmRhdGFUeXBlLnRyaW0oKSAhPT0gXCJcIikge1xyXG4gICAgICBjb2xEZWYuY2VsbERhdGFUeXBlID0gY29sdW1uLmRhdGFUeXBlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRTdHlsZXMoY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmKSB7XHJcbiAgICBpZiAoY29sdW1uLmhlYWRlckNsYXNzKSB7XHJcbiAgICAgIGNvbERlZi5oZWFkZXJDbGFzcyA9IGNvbHVtbi5oZWFkZXJDbGFzcztcclxuICAgIH1cclxuICAgIGlmIChjb2x1bW4uaGVhZGVyU3R5bGUpIHtcclxuICAgICAgY29sRGVmLmhlYWRlclN0eWxlID0gY29sdW1uLmhlYWRlclN0eWxlOyAgICBcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Q2VsbFJlbmRlcmVyKGNvbHVtbjogYW55LCBjb2xEZWY6IENvbERlZiwgbWFwOiBNYXBUeXBlLCBmb3JtR3JvdXA6IEZvcm1Hcm91cCkge1xyXG4gICAgaWYgKGNvbHVtbi5mb3JtYXQgPT09IFwib2JqZWN0VVJMXCIpIHtcclxuICAgICAgY29sRGVmLmNlbGxSZW5kZXJlciA9IE9iamVjdFVSTFJlbmRlcmVyQ29tcG9uZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb2x1bW4uZm9ybWF0ID09PSBcImRlbGV0ZVJvd1wiKSB7XHJcbiAgICAgIGNvbERlZi5jZWxsUmVuZGVyZXIgPSBEZWxldGVSb3dSZW5kZXJlckNvbXBvbmVudDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29sRGVmLmNlbGxEYXRhVHlwZSA9PT0gXCJib29sZWFuXCIgJiYgbWFwKSB7XHJcbiAgICAgIGNvbERlZi5jZWxsUmVuZGVyZXIgPSAocGFyYW1zOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRNYXAocGFyYW1zLnZhbHVlLCBtYXApOyBcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb2x1bW4uZGF0YVR5cGUgPT09IFwiY29tcG9uZW50XCIpIHtcclxuICAgICAgY29sRGVmLmNlbGxSZW5kZXJlciA9IEhvc3RDZWxsUmVuZGVyZXJDb21wb25lbnQ7XHJcbiAgICAgIGNvbERlZi5jZWxsUmVuZGVyZXJQYXJhbXMgPSB7XHJcbiAgICAgICAgY29tcG9uZW50VHlwZTogY29sdW1uLmNvbXBvbmVudCxcclxuICAgICAgICBwcm9wZXJ0aWVzOiBjb2x1bW4ucHJvcGVydGllcyxcclxuICAgICAgICBmb3JtR3JvdXA6IGZvcm1Hcm91cFxyXG4gICAgICB9O1xyXG4gICAgICBjb2xEZWYuY2VsbENsYXNzID0gJ2NlbGwtY29tcG9uZW50JztcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENlbGxDaGFuZ2VGbGFzaChjb2x1bW46IGFueSwgY29sRGVmOiBDb2xEZWYpIHtcclxuICAgIGNvbERlZi5lbmFibGVDZWxsQ2hhbmdlRmxhc2ggPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRBdXRvSGVpZ2h0KGNvbHVtbjogYW55LCBjb2xEZWY6IENvbERlZikge1xyXG4gICAgaWYgKGNvbHVtbi5hdXRvSGVpZ2h0KSB7XHJcbiAgICAgIGNvbERlZi5hdXRvSGVpZ2h0ID0gdHJ1ZTtcclxuICAgICAgY29sRGVmLndyYXBUZXh0ID0gdHJ1ZTtcclxuICAgIH0gIFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRSZXNpemFibGUoY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmICkge1xyXG4gICAgY29sRGVmLnJlc2l6YWJsZSA9IChjb2x1bW4ucmVzaXplID09PSB0cnVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0U29ydGFibGUoY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmKSB7XHJcbiAgICBjb2xEZWYuc29ydGFibGUgPSAoY29sdW1uLnNvcnQgPT09IHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRGaWx0ZXIoY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmLCBtYXA6IE1hcFR5cGUpIHtcclxuICAgIGlmIChjb2x1bW4uZmlsdGVyID09PSB0cnVlKSB7XHJcbiAgICAgIGNvbERlZi5maWx0ZXIgPSB0cnVlO1xyXG4gICAgICBpZiAobWFwKSB7XHJcbiAgICAgICAgY29sRGVmLmZpbHRlciA9IFNldEZpbHRlckNvbXBvbmVudDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRGaWx0ZXJQYXJhbXMoY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmLCBtYXA6IE1hcFR5cGUpIHtcclxuXHJcbiAgICBjb25zdCBmaWx0ZXJQYXJhbXM6IGFueSA9IHt9O1xyXG5cclxuICAgIGlmIChjb2x1bW4uZGF0YVR5cGUgPT09ICd1dWlkJykge1xyXG4gICAgICB0aGlzLnNldFV1aWRGaWx0ZXJQYXJhbXMoZmlsdGVyUGFyYW1zKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2ludGVnZXInKSB7XHJcbiAgICAgIHRoaXMuc2V0SW50ZWdlckZpbHRlclBhcmFtcyhmaWx0ZXJQYXJhbXMpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY29sdW1uLmRhdGFUeXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgdGhpcy5zZXREYXRlRmlsdGVyUGFyYW1zKGZpbHRlclBhcmFtcyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjb2x1bW4uZGF0YVR5cGUgPT09ICdib29sZWFuJykge1xyXG4gICAgICB0aGlzLnNldEJvb2xlYW5GaWx0ZXJQYXJhbXMoZmlsdGVyUGFyYW1zKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgaWYgKG1hcCkge1xyXG4gICAgICBmaWx0ZXJQYXJhbXMubWFwID0gbWFwO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbERlZi5maWx0ZXJQYXJhbXMgPSBmaWx0ZXJQYXJhbXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFV1aWRGaWx0ZXJQYXJhbXMoZmlsdGVyUGFyYW1zOiBhbnkpIHtcclxuICAgIGZpbHRlclBhcmFtcy5maWx0ZXJPcHRpb25zID0gWydlcXVhbHMnLCAnbm90RXF1YWwnXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0SW50ZWdlckZpbHRlclBhcmFtcyhmaWx0ZXJQYXJhbXM6IGFueSkge1xyXG4gICAgZmlsdGVyUGFyYW1zLmFsbG93ZWRDaGFyUGF0dGVybiA9ICdcXFxcZCc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldERhdGVGaWx0ZXJQYXJhbXMoZmlsdGVyUGFyYW1zOiBhbnkpIHtcclxuICAgIGZpbHRlclBhcmFtcy5jb21wYXJhdG9yID0gKGZpbHRlckxvY2FsRGF0ZUF0TWlkbmlnaHQ6IERhdGUsIGNlbGxWYWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGlmICghY2VsbFZhbHVlKSByZXR1cm4gLTE7XHJcbiAgICAgIGNvbnN0IGNlbGxEYXRlID0gbmV3IERhdGUoY2VsbFZhbHVlKTtcclxuICAgICAgaWYgKGlzTmFOKGNlbGxEYXRlLmdldFRpbWUoKSkpIHJldHVybiAtMTtcclxuXHJcbiAgICAgIGNvbnN0IGNlbGxEYXRlTm9UaW1lID0gbmV3IERhdGUoY2VsbERhdGUuZ2V0RnVsbFllYXIoKSwgY2VsbERhdGUuZ2V0TW9udGgoKSwgY2VsbERhdGUuZ2V0RGF0ZSgpKTtcclxuXHJcbiAgICAgIGlmIChjZWxsRGF0ZU5vVGltZSA8IGZpbHRlckxvY2FsRGF0ZUF0TWlkbmlnaHQpIHJldHVybiAtMTtcclxuICAgICAgaWYgKGNlbGxEYXRlTm9UaW1lID4gZmlsdGVyTG9jYWxEYXRlQXRNaWRuaWdodCkgcmV0dXJuIDE7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRCb29sZWFuRmlsdGVyUGFyYW1zKGZpbHRlclBhcmFtczogYW55KSB7XHJcbiAgICBmaWx0ZXJQYXJhbXMuZmlsdGVyT3B0aW9ucyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGRpc3BsYXlLZXk6ICdpbmNsdWRlQWxsJyxcclxuICAgICAgICBkaXNwbGF5TmFtZTogVGV4dHMuQ2hvb3NlT25lLFxyXG4gICAgICAgIG51bWJlck9mSW5wdXRzOiAwLFxyXG4gICAgICAgIHByZWRpY2F0ZTogKFtmaWx0ZXJdOiBbYW55XSwgdmFsdWU6IGFueSkgPT4gdHJ1ZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgZGlzcGxheUtleTogJ3RydWUnLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiBUZXh0cy5UcnVlLFxyXG4gICAgICAgIG51bWJlck9mSW5wdXRzOiAwLFxyXG4gICAgICAgIHByZWRpY2F0ZTogKFtmaWx0ZXJdOiBbYW55XSwgdmFsdWU6IGFueSkgPT4gdmFsdWUgPT09IHRydWVcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGRpc3BsYXlLZXk6ICdmYWxzZScsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IFRleHRzLkZhbHNlLFxyXG4gICAgICAgIG51bWJlck9mSW5wdXRzOiAwLFxyXG4gICAgICAgIHByZWRpY2F0ZTogKFtmaWx0ZXJdOiBbYW55XSwgdmFsdWU6IGFueSkgPT4gdmFsdWUgPT09IGZhbHNlXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBkaXNwbGF5S2V5OiAnYmxhbmsnLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiBUZXh0cy5CbGFuayxcclxuICAgICAgICBudW1iZXJPZklucHV0czogMCxcclxuICAgICAgICBwcmVkaWNhdGU6IChbZmlsdGVyXTogW2FueV0sIHZhbHVlOiBhbnkpID0+IHZhbHVlID09PSBudWxsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBkaXNwbGF5S2V5OiAnbm90QmxhbmsnLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiBUZXh0cy5Ob3RCbGFuayxcclxuICAgICAgICBudW1iZXJPZklucHV0czogMCxcclxuICAgICAgICBwcmVkaWNhdGU6IChbZmlsdGVyXTogW2FueV0sIHZhbHVlOiBhbnkpID0+IHZhbHVlICE9PSBudWxsXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG4gICAgZmlsdGVyUGFyYW1zLnN1cHByZXNzQW5kT3JDb25kaXRpb24gPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRTdXBwcmVzc01vdmFibGUoY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmKSB7XHJcbiAgICBpZiAoIShjb2x1bW4ubW92ZSA9PT0gdHJ1ZSkpIHsgXHJcbiAgICAgIGNvbERlZi5zdXBwcmVzc01vdmFibGUgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRGbGV4KGNvbHVtbjogYW55LCBjb2xEZWY6IENvbERlZikge1xyXG4gICAgaWYgKGNvbHVtbi5mbGV4ID09PSB0cnVlKSB7IFxyXG4gICAgICBjb2xEZWYuZmxleCA9IDE7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEFsaWduKGNvbHVtbjogYW55LCBjb2xEZWY6IENvbERlZikge1xyXG4gICAgaWYgKGNvbHVtbi5hbGlnbiA9PT0gXCJsZWZ0XCIpIHtcclxuICAgICAgY29sRGVmLmNlbGxTdHlsZSA9IHsgdGV4dEFsaWduOiAnbGVmdCcgfTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNvbHVtbi5hbGlnbiA9PT0gXCJjZW50ZXJcIikge1xyXG4gICAgICBjb2xEZWYuY2VsbFN0eWxlID0geyB0ZXh0QWxpZ246ICdjZW50ZXInIH07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjb2x1bW4uYWxpZ24gPT09IFwicmlnaHRcIikgeyBcclxuICAgICAgY29sRGVmLmNlbGxTdHlsZSA9IHsgdGV4dEFsaWduOiAncmlnaHQnIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFBpbm5lZChjb2x1bW46IGFueSwgY29sRGVmOiBDb2xEZWYpIHtcclxuICAgIGlmICh0eXBlb2YgY29sdW1uLnBpbm5lZCA9PT0gXCJzdHJpbmdcIikgeyBcclxuICAgICAgY29sRGVmLnBpbm5lZCA9IGNvbHVtbi5waW5uZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFdpZHRoKGNvbHVtbjogYW55LCBjb2xEZWY6IENvbERlZikge1xyXG4gICAgaWYgKHR5cGVvZiBjb2x1bW4ud2lkdGggPT09IFwibnVtYmVyXCIpIHsgXHJcbiAgICAgIGNvbERlZi53aWR0aCA9IGNvbHVtbi53aWR0aDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIGNvbHVtbi5taW5XaWR0aCA9PT0gXCJudW1iZXJcIikgeyBcclxuICAgICAgY29sRGVmLm1pbldpZHRoID0gY29sdW1uLm1pbldpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgY29sdW1uLm1heFdpZHRoID09PSBcIm51bWJlclwiKSB7IFxyXG4gICAgICBjb2xEZWYubWF4V2lkdGggPSBjb2x1bW4ubWF4V2lkdGg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFZhbHVlRm9ybWF0dGVyKGNvbHVtbjogYW55LCBjb2xEZWY6IENvbERlZiwgbWFwOiBNYXBUeXBlKSB7XHJcbiAgICBpZiAobWFwKSB7XHJcbiAgICAgIGNvbERlZi52YWx1ZUZvcm1hdHRlciA9IChwYXJhbXMpID0+IHRoaXMuZm9ybWF0TWFwKHBhcmFtcy52YWx1ZSwgbWFwKTsgICAgICBcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFJvd1NlbGVjdGlvbihjb21wb25lbnQ6IGFueSwgZm9ybUdyb3VwOiBGb3JtR3JvdXApOiBSb3dTZWxlY3Rpb25PcHRpb25zIHwgdW5kZWZpbmVkICB7XHJcbiAgICBsZXQgb3B0aW9uczogUm93U2VsZWN0aW9uT3B0aW9ucyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuICAgIGlmICh0aGlzLnNlbGVjdGFibGUoY29tcG9uZW50LCBmb3JtR3JvdXApKSB7XHJcbiAgICAgIGlmICh0aGlzLm11bHRpU2VsZWN0KGNvbXBvbmVudCwgZm9ybUdyb3VwKSkge1xyXG4gICAgICAgIG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICBtb2RlOiBcIm11bHRpUm93XCIsXHJcbiAgICAgICAgICBzZWxlY3RBbGw6ICdmaWx0ZXJlZCcsXHJcbiAgICAgICAgICBoaWRlRGlzYWJsZWRDaGVja2JveGVzOiB0cnVlXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBvcHRpb25zID0geyBtb2RlOiBcInNpbmdsZVJvd1wiIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjb21wb25lbnQucm93U2VsZWN0YWJsZSkge1xyXG4gICAgICAgIG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAuLi5vcHRpb25zLFxyXG4gICAgICAgICAgaXNSb3dTZWxlY3RhYmxlOiAocm93Tm9kZSkgPT4gdGhpcy5vblJvd1NlbGVjdGFibGUoY29tcG9uZW50LCBmb3JtR3JvdXAsIHJvd05vZGUuZGF0YSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3B0aW9ucztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFzUm93SWQoY29tcG9uZW50OiBhbnkpIHtcclxuICAgIHJldHVybiB0eXBlb2YgY29tcG9uZW50LnJvd0lkID09PSAnc3RyaW5nJyAmJiBjb21wb25lbnQucm93SWQudHJpbSgpICE9PSAnJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Um93SWQoY29tcG9uZW50OiBhbnkpOiBHZXRSb3dJZEZ1bmM8YW55PiB8IHVuZGVmaW5lZFxyXG4gIHtcclxuICAgIGlmICh0aGlzLmhhc1Jvd0lkKGNvbXBvbmVudCkpIHtcclxuICAgICAgcmV0dXJuIChwYXJhbXM6IEdldFJvd0lkUGFyYW1zPGFueT4pID0+IHBhcmFtcy5kYXRhW2NvbXBvbmVudC5yb3dJZF07ICAgICAgXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25Sb3dTZWxlY3RhYmxlKGNvbXBvbmVudDogYW55LCBmb3JtR3JvdXA6IEZvcm1Hcm91cCwgZGF0YTogYW55KSA6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFkYXRhKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGUoZm9ybUdyb3VwLCBjb21wb25lbnQucm93U2VsZWN0YWJsZSwge1xyXG4gICAgICBjYWNoZWFibGU6IGZhbHNlLFxyXG4gICAgICBleHRlbmRDb250ZXh0OiAoKSA9PiAoe1xyXG4gICAgICAgIFwiZXZlbnRcIjoge1xyXG4gICAgICAgICAgZGF0YTogZGF0YVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiByZXN1bHQgPT09IHRydWU7IFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvblJvd1NlbGVjdGVkKGNvbXBvbmVudDogYW55LCBmb3JtR3JvdXA6IEZvcm1Hcm91cCwgZGF0YTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIWRhdGEpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnByb2dyYW1tYWJpbGl0eS5ldmFsdWF0ZShmb3JtR3JvdXAsIGNvbXBvbmVudC5yb3dTZWxlY3RlZCwge1xyXG4gICAgICBjYWNoZWFibGU6IGZhbHNlLFxyXG4gICAgICBleHRlbmRDb250ZXh0OiAoKSA9PiAoe1xyXG4gICAgICAgIFwiZXZlbnRcIjoge1xyXG4gICAgICAgICAgZGF0YTogZGF0YVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiByZXN1bHQgPT09IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uUm93U2VsZWN0aW5nKGNvbXBvbmVudDogYW55LCBmb3JtR3JvdXA6IEZvcm1Hcm91cCwgcGFyYW1zOiBNb2RlbFVwZGF0ZWRFdmVudCkge1xyXG4gICAgaWYgKHBhcmFtcy5uZXdEYXRhICAgICAgXHJcbiAgICAgICYmIGNvbXBvbmVudC5yb3dTZWxlY3RlZFxyXG4gICAgICAmJiB0aGlzLnNlbGVjdGFibGUoY29tcG9uZW50LCBmb3JtR3JvdXApKVxyXG4gICAge1xyXG4gICAgICBwYXJhbXMuYXBpLmZvckVhY2hOb2RlKChub2RlKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMub25Sb3dTZWxlY3RlZChjb21wb25lbnQsIGZvcm1Hcm91cCwgbm9kZS5kYXRhKSkge1xyXG4gICAgICAgICAgbm9kZS5zZXRTZWxlY3RlZCh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdXBwcmVzc0FjdGlvbnMoY29tcG9uZW50OiBhbnksIGZvcm1Hcm91cDogRm9ybUdyb3VwKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGVCb29sZWFuKGZvcm1Hcm91cCwgY29tcG9uZW50LnN1cHByZXNzQWN0aW9ucywgeyBjYWNoZWFibGU6IGZhbHNlIH0pXHJcbiAgICAgID8/IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZWxlY3RhYmxlKGNvbXBvbmVudDogYW55LCBmb3JtR3JvdXA6IEZvcm1Hcm91cCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlQm9vbGVhbihmb3JtR3JvdXAsIGNvbXBvbmVudC5zZWxlY3RhYmxlLCB7IGNhY2hlYWJsZTogZmFsc2UgfSlcclxuICAgICAgPz8gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG11bHRpU2VsZWN0KGNvbXBvbmVudDogYW55LCBmb3JtR3JvdXA6IEZvcm1Hcm91cCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlQm9vbGVhbihmb3JtR3JvdXAsIGNvbXBvbmVudC5tdWx0aVNlbGVjdCwgeyBjYWNoZWFibGU6IGZhbHNlIH0pXHJcbiAgICAgID8/IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQYWdpbmFibGUoY29tcG9uZW50OiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAodHlwZW9mIGNvbXBvbmVudC5yb3dDb3VudCA9PT0gJ251bWJlcicgJiYgY29tcG9uZW50LnJvd0NvdW50ID4gMCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFBhZ2VTaXplKGNvbXBvbmVudDogYW55KSB7XHJcbiAgICBpZiAodHlwZW9mIGNvbXBvbmVudC5yb3dDb3VudCA9PT0gJ251bWJlcicpIHtcclxuICAgICAgcmV0dXJuIGNvbXBvbmVudC5yb3dDb3VudDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VGV4dHMoKTogYW55IHtcclxuICAgIGlmICh0aGlzLmxhbmd1YWdlID09PSAnaXQnKSB7XHJcbiAgICAgIHJldHVybiBBR19HUklEX0xPQ0FMRV9JVDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMubGFuZ3VhZ2UgPT09ICdlbicpIHtcclxuICAgICAgcmV0dXJuIEFHX0dSSURfTE9DQUxFX0VOO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5sYW5ndWFnZSA9PT0gJ2RlJykge1xyXG4gICAgICByZXR1cm4gQUdfR1JJRF9MT0NBTEVfREU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmxhbmd1YWdlID09PSAnZnInKSB7XHJcbiAgICAgIHJldHVybiBBR19HUklEX0xPQ0FMRV9GUjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMubGFuZ3VhZ2UgPT09ICdlcycpIHtcclxuICAgICAgcmV0dXJuIEFHX0dSSURfTE9DQUxFX0VTO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5sYW5ndWFnZSA9PT0gJ3B0Jykge1xyXG4gICAgICByZXR1cm4gQUdfR1JJRF9MT0NBTEVfUFQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmxhbmd1YWdlID09PSAnJykge1xyXG4gICAgICByZXR1cm4gQUdfR1JJRF9MT0NBTEVfSVQ7IC8vIG5ldXRyYWxcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gQUdfR1JJRF9MT0NBTEVfRU47IC8vIGZhbGxiYWNrXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFRoZW1lKCkge1xyXG4gICAgcmV0dXJuIHRoZW1lUXVhcnR6XHJcbiAgICAgIC53aXRoUGFydChpY29uU2V0QWxwaW5lKVxyXG4gICAgICAud2l0aFBhcmFtcyh7XHJcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcIiNGQUZBRkFcIixcclxuICAgICAgICBib3JkZXJDb2xvcjogXCIjRDlFNEY3XCIsXHJcbiAgICAgICAgYnJvd3NlckNvbG9yU2NoZW1lOiBcImxpZ2h0XCIsXHJcbiAgICAgICAgY2VsbFRleHRDb2xvcjogXCIjMDAxMjFBXCIsXHJcbiAgICAgICAgY29sdW1uQm9yZGVyOiB0cnVlLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiaW5oZXJpdFwiLFxyXG4gICAgICAgIGZvbnRTaXplOiAxNixcclxuICAgICAgICBoZWFkZXJCYWNrZ3JvdW5kQ29sb3I6IFwiIzAwMjQ2MFwiLFxyXG4gICAgICAgIGhlYWRlckNvbHVtbkJvcmRlcjogdHJ1ZSxcclxuICAgICAgICBoZWFkZXJDb2x1bW5SZXNpemVIYW5kbGVDb2xvcjogXCIjRjJGNkZDXCIsXHJcbiAgICAgICAgaGVhZGVyQ29sdW1uUmVzaXplSGFuZGxlV2lkdGg6IDIsXHJcbiAgICAgICAgaGVhZGVyRm9udFNpemU6IDE2LFxyXG4gICAgICAgIGhlYWRlckZvbnRXZWlnaHQ6IDYwMCxcclxuICAgICAgICBoZWFkZXJSb3dCb3JkZXI6IHRydWUsXHJcbiAgICAgICAgaGVhZGVyVGV4dENvbG9yOiBcIiNGMkY2RkNcIixcclxuICAgICAgICByb3dCb3JkZXI6IHRydWVcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldERhdGFUeXBlRGVmaW5pdGlvbnMoKTogeyBbY2VsbERhdGFUeXBlOiBzdHJpbmddOiBEYXRhVHlwZURlZmluaXRpb248YW55PjsgfSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB1dWlkOiB7XHJcbiAgICAgICAgYmFzZURhdGFUeXBlOiAndGV4dCcsXHJcbiAgICAgICAgZXh0ZW5kc0RhdGFUeXBlOiAndGV4dCdcclxuICAgICAgfSxcclxuICAgICAgZGF0ZToge1xyXG4gICAgICAgIGJhc2VEYXRhVHlwZTogJ2RhdGVTdHJpbmcnLFxyXG4gICAgICAgIGV4dGVuZHNEYXRhVHlwZTogJ2RhdGVTdHJpbmcnLFxyXG4gICAgICAgIGRhdGVQYXJzZXI6ICh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB2YWx1ZUZvcm1hdHRlcjogcGFyYW1zID0+IHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdHRlci5mb3JtYXREYXRlKHBhcmFtcy52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBkYXRlVGltZToge1xyXG4gICAgICAgIGJhc2VEYXRhVHlwZTogJ2RhdGVTdHJpbmcnLFxyXG4gICAgICAgIGV4dGVuZHNEYXRhVHlwZTogJ2RhdGVTdHJpbmcnLFxyXG4gICAgICAgIGRhdGVQYXJzZXI6ICh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB2YWx1ZUZvcm1hdHRlcjogcGFyYW1zID0+IHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdHRlci5mb3JtYXREYXRlVGltZShwYXJhbXMudmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgdGltZToge1xyXG4gICAgICAgIGJhc2VEYXRhVHlwZTogJ2RhdGVTdHJpbmcnLFxyXG4gICAgICAgIGV4dGVuZHNEYXRhVHlwZTogJ2RhdGVTdHJpbmcnLFxyXG4gICAgICAgIGRhdGVQYXJzZXI6ICh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB2YWx1ZUZvcm1hdHRlcjogcGFyYW1zID0+IHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdHRlci5mb3JtYXRUaW1lKHBhcmFtcy52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBjdXJyZW5jeToge1xyXG4gICAgICAgIGV4dGVuZHNEYXRhVHlwZTogJ251bWJlcicsXHJcbiAgICAgICAgYmFzZURhdGFUeXBlOiAnbnVtYmVyJyxcclxuICAgICAgICB2YWx1ZUZvcm1hdHRlcjogcGFyYW1zID0+IHBhcmFtcy52YWx1ZSA9PSBudWxsXHJcbiAgICAgICAgICA/ICcnXHJcbiAgICAgICAgICA6IHRoaXMuZm9ybWF0dGVyLmZvcm1hdEN1cnJlbmN5KHBhcmFtcy52YWx1ZSlcclxuICAgICAgfSxcclxuICAgICAgZGVjaW1hbDoge1xyXG4gICAgICAgIGV4dGVuZHNEYXRhVHlwZTogJ251bWJlcicsXHJcbiAgICAgICAgYmFzZURhdGFUeXBlOiAnbnVtYmVyJyxcclxuICAgICAgICB2YWx1ZUZvcm1hdHRlcjogcGFyYW1zID0+IHBhcmFtcy52YWx1ZSA9PSBudWxsXHJcbiAgICAgICAgICA/ICcnXHJcbiAgICAgICAgICA6IHRoaXMuZm9ybWF0dGVyLmZvcm1hdE51bWJlcihwYXJhbXMudmFsdWUpXHJcbiAgICAgIH0sXHJcbiAgICAgIGludGVnZXI6IHtcclxuICAgICAgICBleHRlbmRzRGF0YVR5cGU6ICdudW1iZXInLFxyXG4gICAgICAgIGJhc2VEYXRhVHlwZTogJ251bWJlcicsXHJcbiAgICAgICAgdmFsdWVGb3JtYXR0ZXI6IHBhcmFtcyA9PiBwYXJhbXMudmFsdWUgPT0gbnVsbFxyXG4gICAgICAgICAgPyAnJ1xyXG4gICAgICAgICAgOiB0aGlzLmZvcm1hdHRlci5mb3JtYXROdW1iZXIocGFyYW1zLnZhbHVlLCAwKVxyXG4gICAgICB9LFxyXG4gICAgICBwZXJjZW50YWdlOiB7XHJcbiAgICAgICAgZXh0ZW5kc0RhdGFUeXBlOiAnbnVtYmVyJyxcclxuICAgICAgICBiYXNlRGF0YVR5cGU6ICdudW1iZXInLFxyXG4gICAgICAgIHZhbHVlRm9ybWF0dGVyOiBwYXJhbXMgPT4gcGFyYW1zLnZhbHVlID09IG51bGxcclxuICAgICAgICAgID8gJydcclxuICAgICAgICAgIDogYCR7TWF0aC5yb3VuZChwYXJhbXMudmFsdWUgKiAxMDApfSVgLFxyXG4gICAgICB9LFxyXG4gICAgICBmbGFnczoge1xyXG4gICAgICAgIGV4dGVuZHNEYXRhVHlwZTogJ251bWJlcicsXHJcbiAgICAgICAgYmFzZURhdGFUeXBlOiAnbnVtYmVyJ1xyXG4gICAgICB9ICAgICAgXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRNYXAoY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmLCBmb3JtR3JvdXA6IEZvcm1Hcm91cCk6IE1hcFR5cGUge1xyXG5cclxuICAgIGNvbnN0IGFsbG93ZWQgPSAoY29sRGVmLmNlbGxEYXRhVHlwZSA9PT0gXCJib29sZWFuXCJcclxuICAgICAgfHwgY29sRGVmLmNlbGxEYXRhVHlwZSA9PT0gXCJ0ZXh0XCJcclxuICAgICAgfHwgY29sRGVmLmNlbGxEYXRhVHlwZSA9PT0gXCJudW1iZXJcIlxyXG4gICAgICB8fCBjb2xEZWYuY2VsbERhdGFUeXBlID09PSBcImZsYWdzXCIpO1xyXG5cclxuICAgIGlmIChhbGxvd2VkICYmIGNvbHVtbi5tYXApIHtcclxuICAgICAgY29uc3QgbWFwID0gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGUoZm9ybUdyb3VwLCBjb2x1bW4ubWFwVmFsdWVzKTtcclxuXHJcbiAgICAgIGNvbnN0IHZhbGlkID0gaXNSZWNvcmQoXHJcbiAgICAgICAgbWFwLFxyXG4gICAgICAgIGtleSA9PiB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyB8fCB0eXBlb2Yga2V5ID09PSAnbnVtYmVyJyxcclxuICAgICAgICB2YWwgPT4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZydcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICghdmFsaWQpXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgICBpZiAoY29sRGVmLmNlbGxEYXRhVHlwZSA9PT0gXCJmbGFnc1wiKSB7XHJcbiAgICAgICAgKG1hcCBhcyBhbnkpW2dldExhYmVsU3ltYm9sXSA9IChrZXk6IGFueSkgPT4gdGhpcy5mb3JtYXRGbGFncyhrZXksIG1hcCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBtYXA7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvcm1hdE1hcCh2YWx1ZTogYW55LCBtYXA6IE1hcFR5cGUpXHJcbiAge1xyXG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChtYXApIHtcclxuICAgICAgdmFyIHJlc3VsdCA9IG1hcFt2YWx1ZV07XHJcblxyXG4gICAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBjb25zdCBsYWJlbGVkID0gaXNMYWJlbGVkUmVjb3JkKFxyXG4gICAgICAgICAgbWFwLFxyXG4gICAgICAgICAga2V5ID0+IHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBrZXkgPT09ICdudW1iZXInLFxyXG4gICAgICAgICAgdmFsID0+IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnLFxyXG4gICAgICAgICAgZ2V0TGFiZWxTeW1ib2xcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAobGFiZWxlZCkge1xyXG4gICAgICAgICAgcmVzdWx0ID0gbWFwW2dldExhYmVsU3ltYm9sXSh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICByZXR1cm4gcmVzdWx0ID8/IHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvcm1hdEZsYWdzKHZhbHVlOiBhbnksIG1hcDogTWFwVHlwZSkge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiZcclxuICAgICAgaXNSZWNvcmQobWFwLCBpc051bWVyaWNLZXksIHZhbCA9PiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJylcclxuICAgICkge1xyXG4gICAgICBpZiAodmFsdWUgPT0gMCkge1xyXG4gICAgICAgIHJldHVybiBtYXBbMF0gPz8gXCIwXCI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGF2YWlsYWJsZUZsYWdzID0gT2JqZWN0LmtleXMobWFwKVxyXG4gICAgICAgIC5tYXAoTnVtYmVyKVxyXG4gICAgICAgIC5maWx0ZXIoZmxhZyA9PiBmbGFnICE9PSAwKTtcclxuXHJcbiAgICAgIGNvbnN0IGZsYWdzID0gYXZhaWxhYmxlRmxhZ3MuZmlsdGVyKGZsYWcgPT4gKHZhbHVlICYgZmxhZykgPT09IGZsYWcpO1xyXG5cclxuICAgICAgY29uc3Qgc3VtRmxhZ3MgPSBmbGFncy5yZWR1Y2UoKHN1bSwgZikgPT4gc3VtIHwgZiwgMCk7XHJcblxyXG4gICAgICBpZiAoKHZhbHVlICYgc3VtRmxhZ3MpICE9PSB2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gZmxhZ3NcclxuICAgICAgICAubWFwKGZsYWcgPT4gbWFwW2ZsYWddKVxyXG4gICAgICAgIC5maWx0ZXIoKGxhYmVsKTogbGFiZWwgaXMgc3RyaW5nID0+ICEhbGFiZWwpXHJcbiAgICAgICAgLmpvaW4oJywgJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbmF2aWdhdGVJbnNpZGVDZWxsKHsgZXZlbnQgfTogU3VwcHJlc3NLZXlib2FyZEV2ZW50UGFyYW1zPGFueT4pIHtcclxuICAgIGNvbnN0IEdSSURfQ0VMTF9DTEFTU05BTUUgPSBcImFnLWNlbGxcIjtcclxuICAgIGNvbnN0IHsga2V5LCBzaGlmdEtleSB9ID0gZXZlbnQ7XHJcbiAgICBjb25zdCBwYXRoID0gdGhpcy5nZXRFdmVudFBhdGgoZXZlbnQpO1xyXG4gICAgY29uc3QgaXNUYWJGb3J3YXJkID0ga2V5ID09PSBcIlRhYlwiICYmIHNoaWZ0S2V5ID09PSBmYWxzZTtcclxuICAgIGNvbnN0IGlzVGFiQmFja3dhcmQgPSBrZXkgPT09IFwiVGFiXCIgJiYgc2hpZnRLZXkgPT09IHRydWU7XHJcbiAgICBsZXQgc3VwcHJlc3NFdmVudCA9IGZhbHNlO1xyXG4gICAgLy8gSGFuZGxlIGNlbGwgY2hpbGRyZW4gdGFiYmluZ1xyXG4gICAgaWYgKGlzVGFiRm9yd2FyZCB8fCBpc1RhYkJhY2t3YXJkKSB7XHJcbiAgICAgIGNvbnN0IGVHcmlkQ2VsbCA9IHBhdGguZmluZCgoZWwpID0+IHtcclxuICAgICAgICBpZiAoZWwuY2xhc3NMaXN0ID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcclxuICAgICAgICByZXR1cm4gZWwuY2xhc3NMaXN0LmNvbnRhaW5zKEdSSURfQ0VMTF9DTEFTU05BTUUpO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKCFlR3JpZENlbGwpIHtcclxuICAgICAgICByZXR1cm4gc3VwcHJlc3NFdmVudDtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBmb2N1c2FibGVDaGlsZHJlbkVsZW1lbnRzID0gZ2V0Rm9jdXNhYmxlcyhlR3JpZENlbGwpO1xyXG4gICAgICBjb25zdCBsYXN0Q2VsbENoaWxkRWwgPVxyXG4gICAgICAgIGZvY3VzYWJsZUNoaWxkcmVuRWxlbWVudHNbZm9jdXNhYmxlQ2hpbGRyZW5FbGVtZW50cy5sZW5ndGggLSAxXTtcclxuICAgICAgY29uc3QgZmlyc3RDZWxsQ2hpbGRFbCA9IGZvY3VzYWJsZUNoaWxkcmVuRWxlbWVudHNbMF07XHJcbiAgICAgIC8vIFN1cHByZXNzIGtleWJvYXJkIGV2ZW50IGlmIHRhYmJpbmcgZm9yd2FyZCB3aXRoaW4gdGhlIGNlbGwgYW5kIHRoZSBjdXJyZW50IGZvY3VzZWQgZWxlbWVudCBpcyBub3QgdGhlIGxhc3QgY2hpbGRcclxuICAgICAgaWYgKGZvY3VzYWJsZUNoaWxkcmVuRWxlbWVudHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGZvY3VzYWJsZUNoaWxkcmVuRWxlbWVudHMuaW5kZXhPZihcclxuICAgICAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50LFxyXG4gICAgICApO1xyXG4gICAgICBpZiAoaXNUYWJGb3J3YXJkKSB7XHJcbiAgICAgICAgY29uc3QgaXNMYXN0Q2hpbGRGb2N1c2VkID1cclxuICAgICAgICAgIGxhc3RDZWxsQ2hpbGRFbCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBsYXN0Q2VsbENoaWxkRWw7XHJcbiAgICAgICAgaWYgKCFpc0xhc3RDaGlsZEZvY3VzZWQpIHtcclxuICAgICAgICAgIHN1cHByZXNzRXZlbnQgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCAhPT0gLTEgfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZUdyaWRDZWxsKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGZvY3VzYWJsZUNoaWxkcmVuRWxlbWVudHNbY3VycmVudEluZGV4ICsgMV0uZm9jdXMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gU3VwcHJlc3Mga2V5Ym9hcmQgZXZlbnQgaWYgdGFiYmluZyBiYWNrd2FyZHMgd2l0aGluIHRoZSBjZWxsLCBhbmQgdGhlIGN1cnJlbnQgZm9jdXNlZCBlbGVtZW50IGlzIG5vdCB0aGUgZmlyc3QgY2hpbGRcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc3QgY2VsbEhhc0ZvY3VzZWRDaGlsZHJlbiA9XHJcbiAgICAgICAgICBlR3JpZENlbGwuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkgJiZcclxuICAgICAgICAgIGVHcmlkQ2VsbCAhPT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcclxuICAgICAgICAvLyBNYW51YWxseSBzZXQgZm9jdXMgdG8gdGhlIGxhc3QgY2hpbGQgZWxlbWVudCBpZiBjZWxsIGRvZXNuJ3QgaGF2ZSBmb2N1c2VkIGNoaWxkcmVuXHJcbiAgICAgICAgaWYgKCFjZWxsSGFzRm9jdXNlZENoaWxkcmVuKSB7XHJcbiAgICAgICAgICBsYXN0Q2VsbENoaWxkRWwuZm9jdXMoKTtcclxuICAgICAgICAgIC8vIENhbmNlbCBrZXlib2FyZCBwcmVzcywgc28gdGhhdCBpdCBkb2Vzbid0IGZvY3VzIG9uIHRoZSBsYXN0IGNoaWxkIGFuZCB0aGVuIHBhc3MgdGhyb3VnaCB0aGUga2V5Ym9hcmQgcHJlc3MgdG9cclxuICAgICAgICAgIC8vIG1vdmUgdG8gdGhlIDJuZCBsYXN0IGNoaWxkIGVsZW1lbnRcclxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlzRmlyc3RDaGlsZEZvY3VzZWQgPVxyXG4gICAgICAgICAgZmlyc3RDZWxsQ2hpbGRFbCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBmaXJzdENlbGxDaGlsZEVsO1xyXG4gICAgICAgIGlmICghaXNGaXJzdENoaWxkRm9jdXNlZCkge1xyXG4gICAgICAgICAgc3VwcHJlc3NFdmVudCA9IHRydWU7XHJcbiAgICAgICAgICBpZiAoY3VycmVudEluZGV4ICE9PSAtMSB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBlR3JpZENlbGwpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZm9jdXNhYmxlQ2hpbGRyZW5FbGVtZW50c1tjdXJyZW50SW5kZXggLSAxXS5mb2N1cygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN1cHByZXNzRXZlbnQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEV2ZW50UGF0aChldmVudDogRXZlbnQpOiBIVE1MRWxlbWVudFtdIHtcclxuICAgIGNvbnN0IHBhdGg6IEhUTUxFbGVtZW50W10gPSBbXTtcclxuICAgIGxldCBjdXJyZW50VGFyZ2V0OiBhbnkgPSBldmVudC50YXJnZXQ7XHJcbiAgICB3aGlsZSAoY3VycmVudFRhcmdldCkge1xyXG4gICAgICBwYXRoLnB1c2goY3VycmVudFRhcmdldCk7XHJcbiAgICAgIGN1cnJlbnRUYXJnZXQgPSBjdXJyZW50VGFyZ2V0LnBhcmVudEVsZW1lbnQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGF0aDtcclxuICB9XHJcbn1cclxuIl19