igniteui-angular 13.2.2 → 13.2.5

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 (41) hide show
  1. package/esm2020/lib/directives/for-of/for_of.directive.mjs +2 -2
  2. package/esm2020/lib/grids/api.service.mjs +3 -4
  3. package/esm2020/lib/grids/columns/column-layout.component.mjs +3 -3
  4. package/esm2020/lib/grids/columns/column.component.mjs +4 -4
  5. package/esm2020/lib/grids/common/crud.service.mjs +3 -3
  6. package/esm2020/lib/grids/common/events.mjs +1 -1
  7. package/esm2020/lib/grids/filtering/advanced-filtering/advanced-filtering-dialog.component.mjs +2 -2
  8. package/esm2020/lib/grids/filtering/grid-filtering.service.mjs +7 -7
  9. package/esm2020/lib/grids/grid/grid.component.mjs +11 -11
  10. package/esm2020/lib/grids/grid-base.directive.mjs +84 -68
  11. package/esm2020/lib/grids/grid-mrl-navigation.service.mjs +2 -2
  12. package/esm2020/lib/grids/grid-public-row.mjs +3 -3
  13. package/esm2020/lib/grids/grouping/group-by-area.directive.mjs +2 -2
  14. package/esm2020/lib/grids/grouping/tree-grid-group-by-area.component.mjs +6 -6
  15. package/esm2020/lib/grids/hierarchical-grid/hierarchical-grid-base.directive.mjs +4 -5
  16. package/esm2020/lib/grids/hierarchical-grid/hierarchical-grid.component.mjs +26 -14
  17. package/esm2020/lib/grids/hierarchical-grid/row-island.component.mjs +7 -11
  18. package/esm2020/lib/grids/pivot-grid/pivot-grid.component.mjs +22 -9
  19. package/esm2020/lib/grids/state.directive.mjs +9 -9
  20. package/esm2020/lib/grids/summaries/grid-summary.service.mjs +5 -5
  21. package/esm2020/lib/grids/tree-grid/tree-grid.component.mjs +27 -9
  22. package/esm2020/lib/services/exporter-common/base-export-service.mjs +3 -3
  23. package/esm2020/lib/splitter/splitter-pane/splitter-pane.component.mjs +61 -11
  24. package/esm2020/lib/splitter/splitter.component.mjs +20 -3
  25. package/fesm2015/igniteui-angular.mjs +294 -173
  26. package/fesm2015/igniteui-angular.mjs.map +1 -1
  27. package/fesm2020/igniteui-angular.mjs +292 -173
  28. package/fesm2020/igniteui-angular.mjs.map +1 -1
  29. package/lib/core/styles/themes/schemas/dark/_stepper.scss +6 -1
  30. package/lib/grids/common/events.d.ts +1 -0
  31. package/lib/grids/grid-base.directive.d.ts +7 -1
  32. package/lib/grids/hierarchical-grid/hierarchical-grid.component.d.ts +2 -1
  33. package/lib/grids/hierarchical-grid/row-island.component.d.ts +1 -0
  34. package/lib/grids/pivot-grid/pivot-grid.component.d.ts +4 -0
  35. package/lib/grids/tree-grid/tree-grid.component.d.ts +2 -2
  36. package/lib/splitter/splitter-pane/splitter-pane.component.d.ts +19 -5
  37. package/migrations/update-13_0_0/changes/inputs.json +416 -1
  38. package/migrations/update-13_0_0/index.js +208 -0
  39. package/package.json +1 -1
  40. package/styles/igniteui-indigo-dark.css +1 -1
  41. package/styles/maps/igniteui-indigo-dark.css.map +1 -1
@@ -5,7 +5,6 @@ import { IgxColumnGroupComponent } from './columns/column-group.component';
5
5
  import { GridColumnDataType } from '../data-operations/data-util';
6
6
  import { IgxBooleanFilteringOperand, IgxNumberFilteringOperand, IgxDateFilteringOperand, IgxStringFilteringOperand, IgxDateTimeFilteringOperand } from '../data-operations/filtering-condition';
7
7
  import { IgxGridComponent } from './grid/grid.component';
8
- import { delay, take } from 'rxjs/operators';
9
8
  import { IGX_GRID_BASE } from './common/grid.interface';
10
9
  import * as i0 from "@angular/core";
11
10
  export class IgxGridStateDirective {
@@ -85,7 +84,7 @@ export class IgxGridStateDirective {
85
84
  },
86
85
  columns: {
87
86
  getFeatureState: (context) => {
88
- const gridColumns = context.currGrid.columnList.map((c) => ({
87
+ const gridColumns = context.currGrid.columns.map((c) => ({
89
88
  pinned: c.pinned,
90
89
  sortable: c.sortable,
91
90
  filterable: c.filterable,
@@ -145,6 +144,9 @@ export class IgxGridStateDirective {
145
144
  }
146
145
  });
147
146
  context.grid.updateColumns(newColumns);
147
+ newColumns.forEach(col => {
148
+ context.grid.columnInit.emit(col);
149
+ });
148
150
  }
149
151
  },
150
152
  groupBy: {
@@ -394,13 +396,11 @@ export class IgxGridStateDirective {
394
396
  // TODO Notify the grid that columnList.changes is triggered by the state directive
395
397
  // instead of piping it like below
396
398
  const columns = 'columns';
397
- this.grid.columnList.changes.pipe(delay(0), take(1)).subscribe(() => {
398
- this.featureKeys = this.featureKeys.filter(f => f !== columns);
399
- this.restoreFeatures(state);
400
- });
401
399
  this.applyFeatures(features);
402
400
  if (this.featureKeys.includes(columns) && this.options[columns] && state[columns]) {
403
401
  this.getFeature(columns).restoreFeatureState(this, state[columns]);
402
+ this.featureKeys = this.featureKeys.filter(f => f !== columns);
403
+ this.restoreFeatures(state);
404
404
  }
405
405
  else {
406
406
  this.restoreFeatures(state);
@@ -451,8 +451,8 @@ export class IgxGridStateDirective {
451
451
  else {
452
452
  const expr = item;
453
453
  let dataType;
454
- if (this.currGrid.columnList.length > 0) {
455
- dataType = this.currGrid.columnList.find(c => c.field === expr.fieldName).dataType;
454
+ if (this.currGrid.columns.length > 0) {
455
+ dataType = this.currGrid.columns.find(c => c.field === expr.fieldName).dataType;
456
456
  }
457
457
  else if (this.state.columns) {
458
458
  dataType = this.state.columns.find(c => c.field === expr.fieldName).dataType;
@@ -544,4 +544,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
544
544
  exports: [IgxGridStateDirective]
545
545
  }]
546
546
  }] });
547
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL3N0YXRlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBOEMsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9ILE9BQU8sRUFBRSx3QkFBd0IsRUFBNkIsTUFBTSwrQ0FBK0MsQ0FBQztBQUVwSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUczRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQ0gsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUsdUJBQXVCLEVBQzlFLHlCQUF5QixFQUF1QiwyQkFBMkIsRUFDOUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUdoRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUd6RCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzdDLE9BQU8sRUFBWSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUErRWxFLE1BQU0sT0FBTyxxQkFBcUI7SUF5VDlCOztPQUVHO0lBQ0gsWUFDc0QsSUFBYyxFQUN4RCxRQUFrQyxFQUNsQyxPQUF5QjtRQUZpQixTQUFJLEdBQUosSUFBSSxDQUFVO1FBQ3hELGFBQVEsR0FBUixRQUFRLENBQTBCO1FBQ2xDLFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBNVQ3QixnQkFBVyxHQUFtQixFQUFFLENBQUM7UUFHakMsYUFBUSxHQUFzQjtZQUNsQyxPQUFPLEVBQUUsSUFB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QU8sR0FBWSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7O2tIQWhnQlEscUJBQXFCLGtCQTZURSxhQUFhO3NHQTdUcEMscUJBQXFCOzJGQUFyQixxQkFBcUI7a0JBSGpDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGdCQUFnQjtpQkFDN0I7OzBCQThUUSxJQUFJOzswQkFBSSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGFBQWE7a0hBakJsQyxPQUFPO3NCQURqQixLQUFLO3VCQUFDLGNBQWM7O0FBd056Qjs7R0FFRztBQUtILE1BQU0sT0FBTyxrQkFBa0I7OytHQUFsQixrQkFBa0I7Z0hBQWxCLGtCQUFrQixpQkExZ0JsQixxQkFBcUIsYUFBckIscUJBQXFCO2dIQTBnQnJCLGtCQUFrQjsyRkFBbEIsa0JBQWtCO2tCQUo5QixRQUFRO21CQUFDO29CQUNOLFlBQVksRUFBRSxDQUFDLHFCQUFxQixDQUFDO29CQUNyQyxPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztpQkFDbkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIE9wdGlvbmFsLCBJbnB1dCwgTmdNb2R1bGUsIEhvc3QsIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgVmlld0NvbnRhaW5lclJlZiwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUsIElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWV4cHJlc3Npb25zLXRyZWUnO1xuaW1wb3J0IHsgSUZpbHRlcmluZ0V4cHJlc3Npb24gfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWV4cHJlc3Npb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IElneENvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4vY29sdW1ucy9jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IElneENvbHVtbkdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi9jb2x1bW5zL2NvbHVtbi1ncm91cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSUdyb3VwaW5nRXhwcmVzc2lvbiB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9ncm91cGluZy1leHByZXNzaW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJUGFnaW5nU3RhdGUgfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvcGFnaW5nLXN0YXRlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBHcmlkQ29sdW1uRGF0YVR5cGUgfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS11dGlsJztcbmltcG9ydCB7XG4gICAgSWd4Qm9vbGVhbkZpbHRlcmluZ09wZXJhbmQsIElneE51bWJlckZpbHRlcmluZ09wZXJhbmQsIElneERhdGVGaWx0ZXJpbmdPcGVyYW5kLFxuICAgIElneFN0cmluZ0ZpbHRlcmluZ09wZXJhbmQsIElGaWx0ZXJpbmdPcGVyYXRpb24sIElneERhdGVUaW1lRmlsdGVyaW5nT3BlcmFuZFxufSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWNvbmRpdGlvbic7XG5pbXBvcnQgeyBJR3JvdXBCeUV4cGFuZFN0YXRlIH0gZnJvbSAnLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwYnktZXhwYW5kLXN0YXRlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJR3JvdXBpbmdTdGF0ZSB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9ncm91cGJ5LXN0YXRlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJZ3hHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi9ncmlkL2dyaWQuY29tcG9uZW50JztcbmltcG9ydCB7IElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnQgfSBmcm9tICcuL2hpZXJhcmNoaWNhbC1ncmlkL2hpZXJhcmNoaWNhbC1ncmlkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJUGlubmluZ0NvbmZpZyB9IGZyb20gJy4vZ3JpZC5jb21tb24nO1xuaW1wb3J0IHsgZGVsYXksIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBHcmlkU2VsZWN0aW9uUmFuZ2UgfSBmcm9tICcuL2NvbW1vbi90eXBlcyc7XG5pbXBvcnQgeyBJU29ydGluZ0V4cHJlc3Npb24gfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvc29ydGluZy1zdHJhdGVneSc7XG5pbXBvcnQgeyBHcmlkVHlwZSwgSUdYX0dSSURfQkFTRSB9IGZyb20gJy4vY29tbW9uL2dyaWQuaW50ZXJmYWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBJR3JpZFN0YXRlIHtcbiAgICBjb2x1bW5zPzogSUNvbHVtblN0YXRlW107XG4gICAgZmlsdGVyaW5nPzogSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTtcbiAgICBhZHZhbmNlZEZpbHRlcmluZz86IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU7XG4gICAgcGFnaW5nPzogSVBhZ2luZ1N0YXRlO1xuICAgIG1vdmluZz86IGJvb2xlYW47XG4gICAgc29ydGluZz86IElTb3J0aW5nRXhwcmVzc2lvbltdO1xuICAgIGdyb3VwQnk/OiBJR3JvdXBpbmdTdGF0ZTtcbiAgICBjZWxsU2VsZWN0aW9uPzogR3JpZFNlbGVjdGlvblJhbmdlW107XG4gICAgcm93U2VsZWN0aW9uPzogYW55W107XG4gICAgY29sdW1uU2VsZWN0aW9uPzogc3RyaW5nW107XG4gICAgcm93UGlubmluZz86IGFueVtdO1xuICAgIHBpbm5pbmdDb25maWc/OiBJUGlubmluZ0NvbmZpZztcbiAgICBleHBhbnNpb24/OiBhbnlbXTtcbiAgICByb3dJc2xhbmRzPzogSUdyaWRTdGF0ZUNvbGxlY3Rpb25bXTtcbiAgICBpZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJR3JpZFN0YXRlQ29sbGVjdGlvbiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBwYXJlbnRSb3dJRDogYW55O1xuICAgIHN0YXRlOiBJR3JpZFN0YXRlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElHcmlkU3RhdGVPcHRpb25zIHtcbiAgICBjb2x1bW5zPzogYm9vbGVhbjtcbiAgICBmaWx0ZXJpbmc/OiBib29sZWFuO1xuICAgIGFkdmFuY2VkRmlsdGVyaW5nPzogYm9vbGVhbjtcbiAgICBzb3J0aW5nPzogYm9vbGVhbjtcbiAgICBncm91cEJ5PzogYm9vbGVhbjtcbiAgICBwYWdpbmc/OiBib29sZWFuO1xuICAgIGNlbGxTZWxlY3Rpb24/OiBib29sZWFuO1xuICAgIHJvd1NlbGVjdGlvbj86IGJvb2xlYW47XG4gICAgY29sdW1uU2VsZWN0aW9uPzogYm9vbGVhbjtcbiAgICByb3dQaW5uaW5nPzogYm9vbGVhbjtcbiAgICBwaW5uaW5nQ29uZmlnPzogYm9vbGVhbjtcbiAgICBleHBhbnNpb24/OiBib29sZWFuO1xuICAgIHJvd0lzbGFuZHM/OiBib29sZWFuO1xuICAgIG1vdmluZz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbHVtblN0YXRlIHtcbiAgICBwaW5uZWQ6IGJvb2xlYW47XG4gICAgc29ydGFibGU6IGJvb2xlYW47XG4gICAgZmlsdGVyYWJsZTogYm9vbGVhbjtcbiAgICBlZGl0YWJsZTogYm9vbGVhbjtcbiAgICBzb3J0aW5nSWdub3JlQ2FzZTogYm9vbGVhbjtcbiAgICBmaWx0ZXJpbmdJZ25vcmVDYXNlOiBib29sZWFuO1xuICAgIGhlYWRlckNsYXNzZXM6IHN0cmluZztcbiAgICBoZWFkZXJHcm91cENsYXNzZXM6IHN0cmluZztcbiAgICBtYXhXaWR0aDogc3RyaW5nO1xuICAgIGdyb3VwYWJsZTogYm9vbGVhbjtcbiAgICBtb3ZhYmxlOiBib29sZWFuO1xuICAgIGhpZGRlbjogYm9vbGVhbjtcbiAgICBkYXRhVHlwZTogR3JpZENvbHVtbkRhdGFUeXBlO1xuICAgIGhhc1N1bW1hcnk6IGJvb2xlYW47XG4gICAgZmllbGQ6IHN0cmluZztcbiAgICB3aWR0aDogYW55O1xuICAgIGhlYWRlcjogc3RyaW5nO1xuICAgIHJlc2l6YWJsZTogYm9vbGVhbjtcbiAgICBzZWFyY2hhYmxlOiBib29sZWFuO1xuICAgIGNvbHVtbkdyb3VwOiBib29sZWFuO1xuICAgIHBhcmVudDogYW55O1xuICAgIGRpc2FibGVIaWRpbmc6IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIEdyaWRGZWF0dXJlcyA9IGtleW9mIElHcmlkU3RhdGVPcHRpb25zO1xuXG5pbnRlcmZhY2UgRmVhdHVyZSB7XG4gICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKSA9PiBJR3JpZFN0YXRlO1xuICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBJQ29sdW1uU3RhdGVbXSB8IElQYWdpbmdTdGF0ZSB8IGJvb2xlYW4gfCBJU29ydGluZ0V4cHJlc3Npb25bXSB8XG4gICAgICAgIElHcm91cGluZ1N0YXRlIHwgSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSB8IEdyaWRTZWxlY3Rpb25SYW5nZVtdIHwgSVBpbm5pbmdDb25maWcgfCBhbnlbXSkgPT4gdm9pZDtcbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbaWd4R3JpZFN0YXRlXSdcbn0pXG5leHBvcnQgY2xhc3MgSWd4R3JpZFN0YXRlRGlyZWN0aXZlIHtcbiAgICBwcml2YXRlIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9vcHRpb25zOiBJR3JpZFN0YXRlT3B0aW9ucyB8ICcnO1xuXG4gICAgcHJpdmF0ZSBmZWF0dXJlS2V5czogR3JpZEZlYXR1cmVzW10gPSBbXTtcbiAgICBwcml2YXRlIHN0YXRlOiBJR3JpZFN0YXRlO1xuICAgIHByaXZhdGUgY3VyckdyaWQ6IEdyaWRUeXBlO1xuICAgIHByaXZhdGUgX29wdGlvbnM6IElHcmlkU3RhdGVPcHRpb25zID0ge1xuICAgICAgICBjb2x1bW5zOiB0cnVlLFxuICAgICAgICBmaWx0ZXJpbmc6IHRydWUsXG4gICAgICAgIGFkdmFuY2VkRmlsdGVyaW5nOiB0cnVlLFxuICAgICAgICBzb3J0aW5nOiB0cnVlLFxuICAgICAgICBncm91cEJ5OiB0cnVlLFxuICAgICAgICBwYWdpbmc6IHRydWUsXG4gICAgICAgIGNlbGxTZWxlY3Rpb246IHRydWUsXG4gICAgICAgIHJvd1NlbGVjdGlvbjogdHJ1ZSxcbiAgICAgICAgY29sdW1uU2VsZWN0aW9uOiB0cnVlLFxuICAgICAgICByb3dQaW5uaW5nOiB0cnVlLFxuICAgICAgICBleHBhbnNpb246IHRydWUsXG4gICAgICAgIG1vdmluZzogdHJ1ZSxcbiAgICAgICAgcm93SXNsYW5kczogdHJ1ZVxuICAgIH07XG4gICAgcHJpdmF0ZSBGRUFUVVJFUyA9IHtcbiAgICAgICAgc29ydGluZzogIHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNvcnRpbmdTdGF0ZSA9IGNvbnRleHQuY3VyckdyaWQuc29ydGluZ0V4cHJlc3Npb25zO1xuICAgICAgICAgICAgICAgIHNvcnRpbmdTdGF0ZS5mb3JFYWNoKHMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcy5zdHJhdGVneTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHMub3duZXI7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgc29ydGluZzogc29ydGluZ1N0YXRlIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IElTb3J0aW5nRXhwcmVzc2lvbltdKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMgPSBzdGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZmlsdGVyaW5nOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJpbmdTdGF0ZSA9IGNvbnRleHQuY3VyckdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlO1xuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJpbmdTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgZmlsdGVyaW5nU3RhdGUub3duZXI7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBmaWx0ZXJpbmdTdGF0ZS5maWx0ZXJpbmdPcGVyYW5kcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIChpdGVtIGFzIElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpLm93bmVyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7IGZpbHRlcmluZzogZmlsdGVyaW5nU3RhdGUgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCBzdGF0ZTogRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyVHJlZSA9IGNvbnRleHQuY3JlYXRlRXhwcmVzc2lvbnNUcmVlRnJvbU9iamVjdChzdGF0ZSk7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgPSBmaWx0ZXJUcmVlIGFzIEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgYWR2YW5jZWRGaWx0ZXJpbmc6IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmluZ1N0YXRlID0gY29udGV4dC5jdXJyR3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTtcbiAgICAgICAgICAgICAgICBsZXQgYWR2YW5jZWRGaWx0ZXJpbmc6IGFueTtcbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyaW5nU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGZpbHRlcmluZ1N0YXRlLm93bmVyO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZmlsdGVyaW5nU3RhdGUuZmlsdGVyaW5nT3BlcmFuZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSAoaXRlbSBhcyBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKS5vd25lcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlZEZpbHRlcmluZyA9IGZpbHRlcmluZ1N0YXRlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFkdmFuY2VkRmlsdGVyaW5nID0ge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7IGFkdmFuY2VkRmlsdGVyaW5nIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlclRyZWUgPSBjb250ZXh0LmNyZWF0ZUV4cHJlc3Npb25zVHJlZUZyb21PYmplY3Qoc3RhdGUpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQuYWR2YW5jZWRGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgPSBmaWx0ZXJUcmVlIGFzIEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY29sdW1uczoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JpZENvbHVtbnM6IElDb2x1bW5TdGF0ZVtdID0gY29udGV4dC5jdXJyR3JpZC5jb2x1bW5MaXN0Lm1hcCgoYykgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgcGlubmVkOiBjLnBpbm5lZCxcbiAgICAgICAgICAgICAgICAgICAgc29ydGFibGU6IGMuc29ydGFibGUsXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcmFibGU6IGMuZmlsdGVyYWJsZSxcbiAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IGMuZWRpdGFibGUsXG4gICAgICAgICAgICAgICAgICAgIHNvcnRpbmdJZ25vcmVDYXNlOiBjLnNvcnRpbmdJZ25vcmVDYXNlLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJpbmdJZ25vcmVDYXNlOiBjLmZpbHRlcmluZ0lnbm9yZUNhc2UsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlckNsYXNzZXM6IGMuaGVhZGVyQ2xhc3NlcyxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyR3JvdXBDbGFzc2VzOiBjLmhlYWRlckdyb3VwQ2xhc3NlcyxcbiAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IGMubWF4V2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwYWJsZTogYy5ncm91cGFibGUsXG4gICAgICAgICAgICAgICAgICAgIG1vdmFibGU6IGMubW92YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuOiBjLmhpZGRlbixcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IGMuZGF0YVR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGhhc1N1bW1hcnk6IGMuaGFzU3VtbWFyeSxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGMuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBjLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXI6IGMuaGVhZGVyLFxuICAgICAgICAgICAgICAgICAgICByZXNpemFibGU6IGMucmVzaXphYmxlLFxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hhYmxlOiBjLnNlYXJjaGFibGUsXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGMuc2VsZWN0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBjLnBhcmVudCA/IGMucGFyZW50LmhlYWRlciA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkdyb3VwOiBjLmNvbHVtbkdyb3VwLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlSGlkaW5nOiBjLmRpc2FibGVIaWRpbmdcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgY29sdW1uczogZ3JpZENvbHVtbnMgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCBzdGF0ZTogSUNvbHVtblN0YXRlW10pOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdDb2x1bW5zID0gW107XG4gICAgICAgICAgICAgICAgY29uc3QgZmFjdG9yeSA9IGNvbnRleHQucmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoSWd4Q29sdW1uQ29tcG9uZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cEZhY3RvcnkgPSBjb250ZXh0LnJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KElneENvbHVtbkdyb3VwQ29tcG9uZW50KTtcbiAgICAgICAgICAgICAgICBzdGF0ZS5mb3JFYWNoKChjb2xTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNDb2x1bW5Hcm91cCA9IGNvbFN0YXRlLmNvbHVtbkdyb3VwO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgY29sU3RhdGUuY29sdW1uR3JvdXA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNDb2x1bW5Hcm91cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmMSA9IGdyb3VwRmFjdG9yeS5jcmVhdGUoY29udGV4dC52aWV3UmVmLmluamVjdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocmVmMS5pbnN0YW5jZSwgY29sU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZjEuaW5zdGFuY2UucGFyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1uR3JvdXA6IElneENvbHVtbkdyb3VwQ29tcG9uZW50ID0gbmV3Q29sdW1ucy5maW5kKGUgPT4gZS5oZWFkZXIgPT09IHJlZjEuaW5zdGFuY2UucGFyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5Hcm91cC5jaGlsZHJlbi5yZXNldChbLi4uY29sdW1uR3JvdXAuY2hpbGRyZW4udG9BcnJheSgpLCByZWYxLmluc3RhbmNlXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmMS5pbnN0YW5jZS5wYXJlbnQgPSBjb2x1bW5Hcm91cDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZjEuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29sdW1ucy5wdXNoKHJlZjEuaW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmID0gZmFjdG9yeS5jcmVhdGUoY29udGV4dC52aWV3UmVmLmluamVjdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocmVmLmluc3RhbmNlLCBjb2xTdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVmLmluc3RhbmNlLnBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbkdyb3VwOiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudCA9IG5ld0NvbHVtbnMuZmluZChlID0+IGUuaGVhZGVyID09PSByZWYuaW5zdGFuY2UucGFyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sdW1uR3JvdXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmLmluc3RhbmNlLnBhcmVudCA9IGNvbHVtbkdyb3VwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5Hcm91cC5jaGlsZHJlbi5yZXNldChbLi4uY29sdW1uR3JvdXAuY2hpbGRyZW4udG9BcnJheSgpLCByZWYuaW5zdGFuY2VdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29sdW1ucy5wdXNoKHJlZi5pbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmdyaWQudXBkYXRlQ29sdW1ucyhuZXdDb2x1bW5zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ3JvdXBCeToge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JpZCA9IGNvbnRleHQuY3VyckdyaWQgYXMgSWd4R3JpZENvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cGluZ0V4cHJlc3Npb25zID0gZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zO1xuICAgICAgICAgICAgICAgIGdyb3VwaW5nRXhwcmVzc2lvbnMuZm9yRWFjaChleHByID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGV4cHIuc3RyYXRlZ3k7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwYW5zaW9uU3RhdGUgPSBncmlkLmdyb3VwaW5nRXhwYW5zaW9uU3RhdGU7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBzRXhwYW5kZWQgPSBncmlkLmdyb3Vwc0V4cGFuZGVkO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZ3JvdXBCeTogeyBleHByZXNzaW9uczogZ3JvdXBpbmdFeHByZXNzaW9ucywgZXhwYW5zaW9uOiBleHBhbnNpb25TdGF0ZSwgZGVmYXVsdEV4cGFuZGVkOiBncm91cHNFeHBhbmRlZH0gIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IElHcm91cGluZ1N0YXRlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JpZCA9IGNvbnRleHQuY3VyckdyaWQgYXMgSWd4R3JpZENvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMgPSBzdGF0ZS5leHByZXNzaW9ucyBhcyBJR3JvdXBpbmdFeHByZXNzaW9uW107XG4gICAgICAgICAgICAgICAgaWYgKGdyaWQuZ3JvdXBzRXhwYW5kZWQgIT09IHN0YXRlLmRlZmF1bHRFeHBhbmRlZCkge1xuICAgICAgICAgICAgICAgICAgICBncmlkLnRvZ2dsZUFsbEdyb3VwUm93cygpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGdyaWQuZ3JvdXBpbmdFeHBhbnNpb25TdGF0ZSA9IHN0YXRlLmV4cGFuc2lvbiBhcyBJR3JvdXBCeUV4cGFuZFN0YXRlW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBwYWdpbmc6IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhZ2luZ1N0YXRlID0gY29udGV4dC5jdXJyR3JpZC5wYWdpbmdTdGF0ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBwYWdpbmc6IHBhZ2luZ1N0YXRlIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IElQYWdpbmdTdGF0ZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghY29udGV4dC5jdXJyR3JpZC5wYWdpbmF0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5jdXJyR3JpZC5wYWdpbmF0b3IucGVyUGFnZSAhPT0gc3RhdGUucmVjb3Jkc1BlclBhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5wYWdpbmF0b3IucGVyUGFnZSA9IHN0YXRlLnJlY29yZHNQZXJQYWdlO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQucGFnaW5hdG9yLnBhZ2UgPSBzdGF0ZS5pbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbW92aW5nOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBtb3Zpbmc6IGNvbnRleHQuY3VyckdyaWQubW92aW5nIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IGJvb2xlYW4pOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLm1vdmluZyA9IHN0YXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByb3dTZWxlY3Rpb246IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGNvbnRleHQuY3VyckdyaWQuc2VsZWN0ZWRSb3dzO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHJvd1NlbGVjdGlvbjogc2VsZWN0aW9uIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IGFueVtdKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5zZWxlY3RSb3dzKHN0YXRlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2VsbFNlbGVjdGlvbjoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gY29udGV4dC5jdXJyR3JpZC5nZXRTZWxlY3RlZFJhbmdlcygpLm1hcChyYW5nZSA9PlxuICAgICAgICAgICAgICAgICAgICAoeyByb3dTdGFydDogcmFuZ2Uucm93U3RhcnQsIHJvd0VuZDogcmFuZ2Uucm93RW5kLCBjb2x1bW5TdGFydDogcmFuZ2UuY29sdW1uU3RhcnQsIGNvbHVtbkVuZDogcmFuZ2UuY29sdW1uRW5kIH0pKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBjZWxsU2VsZWN0aW9uOiBzZWxlY3Rpb24gfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCBzdGF0ZTogR3JpZFNlbGVjdGlvblJhbmdlW10pOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5mb3JFYWNoKHIgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByYW5nZSA9IHsgcm93U3RhcnQ6IHIucm93U3RhcnQsIHJvd0VuZDogci5yb3dFbmQsIGNvbHVtblN0YXJ0OiByLmNvbHVtblN0YXJ0LCBjb2x1bW5FbmQ6IHIuY29sdW1uRW5kfTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5zZWxlY3RSYW5nZShyYW5nZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNvbHVtblNlbGVjdGlvbjoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gY29udGV4dC5jdXJyR3JpZC5zZWxlY3RlZENvbHVtbnMoKS5tYXAoYyA9PiBjLmZpZWxkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBjb2x1bW5TZWxlY3Rpb246IHNlbGVjdGlvbiB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBzdHJpbmdbXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQuZGVzZWxlY3RBbGxDb2x1bW5zKCk7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5zZWxlY3RDb2x1bW5zKHN0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcm93UGlubmluZzoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGlubmVkID0gY29udGV4dC5jdXJyR3JpZC5waW5uZWRSb3dzLm1hcCh4ID0+IHgua2V5KTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyByb3dQaW5uaW5nOiBwaW5uZWQgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCBzdGF0ZTogYW55W10pOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAvLyBjbGVhciBjdXJyZW50IHN0YXRlLlxuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQucGlubmVkUm93cy5mb3JFYWNoKHJvdyA9PiByb3cudW5waW4oKSk7XG4gICAgICAgICAgICAgICAgc3RhdGUuZm9yRWFjaChyb3dJRCA9PiBjb250ZXh0LmN1cnJHcmlkLnBpblJvdyhyb3dJRCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBwaW5uaW5nQ29uZmlnOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+ICh7IHBpbm5pbmdDb25maWc6IGNvbnRleHQuY3VyckdyaWQucGlubmluZyB9KSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBJUGlubmluZ0NvbmZpZyk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQucGlubmluZyA9IHN0YXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBleHBhbnNpb246IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGFuc2lvblN0YXRlcyA9IEFycmF5LmZyb20oY29udGV4dC5jdXJyR3JpZC5leHBhbnNpb25TdGF0ZXMpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGV4cGFuc2lvbjogZXhwYW5zaW9uU3RhdGVzIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IGFueVtdKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwYW5zaW9uU3RhdGVzID0gbmV3IE1hcDxhbnksIGJvb2xlYW4+KHN0YXRlKTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLmV4cGFuc2lvblN0YXRlcyA9IGV4cGFuc2lvblN0YXRlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcm93SXNsYW5kczoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkR3JpZFN0YXRlczogSUdyaWRTdGF0ZUNvbGxlY3Rpb25bXSA9IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd0lzbGFuZHMgPSAoY29udGV4dC5jdXJyR3JpZCBhcyBhbnkpLmFsbExheW91dExpc3Q7XG4gICAgICAgICAgICAgICAgaWYgKHJvd0lzbGFuZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcm93SXNsYW5kcy5mb3JFYWNoKHJvd0lzbGFuZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEdyaWRzID0gcm93SXNsYW5kLnJvd0lzbGFuZEFQSS5nZXRDaGlsZEdyaWRzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEdyaWRzLmZvckVhY2goY2hHcmlkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRSb3dJRCA9IHRoaXMuZ2V0UGFyZW50Um93SUQoY2hHcmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkID0gY2hHcmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmN1cnJHcmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkR3JpZFN0YXRlID0gY29udGV4dC5idWlsZFN0YXRlKGNvbnRleHQuZmVhdHVyZUtleXMpIGFzIElHcmlkU3RhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkR3JpZFN0YXRlcy5wdXNoKHsgaWQ6IGAke3Jvd0lzbGFuZC5pZH1gLCBwYXJlbnRSb3dJRCwgc3RhdGU6IGNoaWxkR3JpZFN0YXRlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZCA9IGNvbnRleHQuZ3JpZDtcbiAgICAgICAgICAgICAgICByZXR1cm4geyByb3dJc2xhbmRzOiBjaGlsZEdyaWRTdGF0ZXMgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IGFueSk6IHZvaWQge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd0lzbGFuZHMgPSAoY29udGV4dC5jdXJyR3JpZCBhcyBhbnkpLmFsbExheW91dExpc3Q7XG4gICAgICAgICAgICAgICAgaWYgKHJvd0lzbGFuZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcm93SXNsYW5kcy5mb3JFYWNoKHJvd0lzbGFuZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEdyaWRzID0gcm93SXNsYW5kLnJvd0lzbGFuZEFQSS5nZXRDaGlsZEdyaWRzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEdyaWRzLmZvckVhY2goY2hHcmlkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRSb3dJRCA9IHRoaXMuZ2V0UGFyZW50Um93SUQoY2hHcmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkID0gY2hHcmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkR3JpZFN0YXRlID0gc3RhdGUuZmluZChzdCA9PiBzdC5pZCA9PT0gcm93SXNsYW5kLmlkICYmIHN0LnBhcmVudFJvd0lEID09PSBwYXJlbnRSb3dJRCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkR3JpZFN0YXRlICYmIGNvbnRleHQuY3VyckdyaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXN0b3JlR3JpZFN0YXRlKGNoaWxkR3JpZFN0YXRlLnN0YXRlLCBjb250ZXh0LmZlYXR1cmVLZXlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQgPSBjb250ZXh0LmdyaWQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUcmF2ZXJzZXMgdGhlIGhpZXJhcmNoeSB1cCB0byB0aGUgcm9vdCBncmlkIHRvIHJldHVybiB0aGUgSUQgb2YgdGhlIGV4cGFuZGVkIHJvdy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZ2V0UGFyZW50Um93SUQ6IChncmlkOiBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGNoaWxkR3JpZDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoZ3JpZC5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRHcmlkID0gZ3JpZDtcbiAgICAgICAgICAgICAgICAgICAgZ3JpZCA9IGdyaWQucGFyZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZ3JpZC5ncmlkQVBJLmdldFBhcmVudFJvd0lkKGNoaWxkR3JpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogIEFuIG9iamVjdCB3aXRoIG9wdGlvbnMgZGV0ZXJtaW5pbmcgaWYgYSBjZXJ0YWluIGZlYXR1cmUgc3RhdGUgc2hvdWxkIGJlIHNhdmVkLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWdyaWQgW2lneEdyaWRTdGF0ZV09XCJvcHRpb25zXCI+PC9pZ3gtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogcHVibGljIG9wdGlvbnMgPSB7c2VsZWN0aW9uOiBmYWxzZSwgYWR2YW5jZWRGaWx0ZXJpbmc6IGZhbHNlfTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoJ2lneEdyaWRTdGF0ZScpXG4gICAgcHVibGljIGdldCBvcHRpb25zKCk6IElHcmlkU3RhdGVPcHRpb25zIHtcbiAgICAgICByZXR1cm4gdGhpcy5fb3B0aW9ucztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IG9wdGlvbnModmFsdWU6IElHcmlkU3RhdGVPcHRpb25zKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5fb3B0aW9ucywgdmFsdWUpO1xuICAgICAgICBpZiAoISh0aGlzLmdyaWQgaW5zdGFuY2VvZiBJZ3hHcmlkQ29tcG9uZW50KSkge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX29wdGlvbnMuZ3JvdXBCeTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9vcHRpb25zLnJvd0lzbGFuZHM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBIb3N0KCkgQE9wdGlvbmFsKCkgQEluamVjdChJR1hfR1JJRF9CQVNFKSBwdWJsaWMgZ3JpZDogR3JpZFR5cGUsXG4gICAgICAgIHByaXZhdGUgcmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICAgICAgcHJpdmF0ZSB2aWV3UmVmOiBWaWV3Q29udGFpbmVyUmVmKSB7IH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHN0YXRlIG9mIGEgZmVhdHVyZSBvciBzdGF0ZXMgb2YgYWxsIGdyaWQgZmVhdHVyZXMsIHVubGVzcyBhIGNlcnRhaW4gZmVhdHVyZSBpcyBkaXNhYmxlZCB0aHJvdWdoIHRoZSBgb3B0aW9uc2AgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYHNlcmlhbGl6ZWAgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSByZXR1cm5lZCBvYmplY3Qgd2lsbCBiZSBzZXJpYWxpemVkIHRvIEpTT04gc3RyaW5nLiBEZWZhdWx0IHZhbHVlIGlzIHRydWUuXG4gICAgICogQHBhcmFtIGBmZWF0dXJlYCBzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncyBkZXRlcm1pbmluZyB0aGUgZmVhdHVyZXMgdG8gYmUgYWRkZWQgaW4gdGhlIHN0YXRlLiBJZiBza2lwcGVkLCBhbGwgZmVhdHVyZXMgYXJlIGFkZGVkLlxuICAgICAqIEByZXR1cm5zIFJldHVybnMgdGhlIHNlcmlhbGl6ZWQgdG8gSlNPTiBzdHJpbmcgSUdyaWRTdGF0ZSBvYmplY3QsIG9yIHRoZSBub24tc2VyaWFsaXplZCBJR3JpZFN0YXRlIG9iamVjdC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1ncmlkIFtpZ3hHcmlkU3RhdGVdPVwib3B0aW9uc1wiPjwvaWd4LWdyaWQ+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgc3RhdGU7XG4gICAgICogbGV0IHN0YXRlID0gdGhpcy5zdGF0ZS5nZXRTdGF0ZSgpOyAvLyByZXR1cm5zIHN0cmluZ1xuICAgICAqIGxldCBzdGF0ZSA9IHRoaXMuc3RhdGUoZmFsc2UpIC8vIHJldHVybnMgYElHcmlkU3RhdGVgIG9iamVjdFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRTdGF0ZShzZXJpYWxpemUgPSB0cnVlLCBmZWF0dXJlcz86IEdyaWRGZWF0dXJlcyB8IEdyaWRGZWF0dXJlc1tdKTogSUdyaWRTdGF0ZSB8IHN0cmluZyAge1xuICAgICAgICBsZXQgc3RhdGU6IElHcmlkU3RhdGUgfCBzdHJpbmc7XG4gICAgICAgIHRoaXMuY3VyckdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZSA9IHRoaXMuYnVpbGRTdGF0ZShmZWF0dXJlcykgYXMgSUdyaWRTdGF0ZTtcbiAgICAgICAgaWYgKHNlcmlhbGl6ZSkge1xuICAgICAgICAgICAgc3RhdGUgPSBKU09OLnN0cmluZ2lmeShzdGF0ZSwgdGhpcy5zdHJpbmdpZnlDYWxsYmFjaykgYXMgc3RyaW5nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXN0b3JlcyBncmlkIGZlYXR1cmVzJyBzdGF0ZSBiYXNlZCBvbiB0aGUgSUdyaWRTdGF0ZSBvYmplY3QgcGFzc2VkIGFzIGFuIGFyZ3VtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIElHcmlkU3RhdGUgb2JqZWN0IHRvIHJlc3RvcmUgc3RhdGUgZnJvbS5cbiAgICAgKiBAcmV0dXJuc1xuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWdyaWQgW2lneEdyaWRTdGF0ZV09XCJvcHRpb25zXCI+PC9pZ3gtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIHB1YmxpYyBzdGF0ZTtcbiAgICAgKiB0aGlzLnN0YXRlLnNldFN0YXRlKGdyaWRTdGF0ZSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldFN0YXRlKHN0YXRlOiBJR3JpZFN0YXRlIHwgc3RyaW5nLCBmZWF0dXJlcz86IEdyaWRGZWF0dXJlcyB8IEdyaWRGZWF0dXJlc1tdKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEpTT04ucGFyc2Uoc3RhdGUpIGFzIElHcmlkU3RhdGU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICB0aGlzLmN1cnJHcmlkID0gdGhpcy5ncmlkO1xuICAgICAgICB0aGlzLnJlc3RvcmVHcmlkU3RhdGUoc3RhdGUsIGZlYXR1cmVzKTtcbiAgICAgICAgdGhpcy5ncmlkLmNkci5kZXRlY3RDaGFuZ2VzKCk7IC8vIFRPRE9cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCdWlsZHMgYW4gSUdyaWRTdGF0ZSBvYmplY3QuXG4gICAgICovXG4gICAgcHJpdmF0ZSBidWlsZFN0YXRlKGtleXM/OiBHcmlkRmVhdHVyZXMgfCBHcmlkRmVhdHVyZXNbXSk6IElHcmlkU3RhdGUge1xuICAgICAgICB0aGlzLmFwcGx5RmVhdHVyZXMoa2V5cyk7XG4gICAgICAgIGxldCBncmlkU3RhdGUgPSB7fSBhcyBJR3JpZFN0YXRlO1xuICAgICAgICB0aGlzLmZlYXR1cmVLZXlzLmZvckVhY2goZiA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zW2ZdKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEodGhpcy5ncmlkIGluc3RhbmNlb2YgSWd4R3JpZENvbXBvbmVudCkgJiYgZiA9PT0gJ2dyb3VwQnknKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZmVhdHVyZSA9IHRoaXMuZ2V0RmVhdHVyZShmKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlU3RhdGU6IElHcmlkU3RhdGUgPSBmZWF0dXJlLmdldEZlYXR1cmVTdGF0ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICBncmlkU3RhdGUgPSBPYmplY3QuYXNzaWduKGdyaWRTdGF0ZSwgZmVhdHVyZVN0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBncmlkU3RhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG1ldGhvZCB0aGF0IGNhbGxzIGNvcnJlc3BvbmRpbmcgbWV0aG9kcyB0byByZXN0b3JlIGZlYXR1cmVzIGZyb20gdGhlIHBhc3NlZCBJR3JpZFN0YXRlIG9iamVjdC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlc3RvcmVHcmlkU3RhdGUoc3RhdGU6IElHcmlkU3RhdGUsIGZlYXR1cmVzPzogR3JpZEZlYXR1cmVzIHwgR3JpZEZlYXR1cmVzW10pIHtcbiAgICAgICAgLy8gVE9ETyBOb3RpZnkgdGhlIGdyaWQgdGhhdCBjb2x1bW5MaXN0LmNoYW5nZXMgaXMgdHJpZ2dlcmVkIGJ5IHRoZSBzdGF0ZSBkaXJlY3RpdmVcbiAgICAgICAgLy8gaW5zdGVhZCBvZiBwaXBpbmcgaXQgbGlrZSBiZWxvd1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gJ2NvbHVtbnMnO1xuICAgICAgICB0aGlzLmdyaWQuY29sdW1uTGlzdC5jaGFuZ2VzLnBpcGUoZGVsYXkoMCksIHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZlYXR1cmVLZXlzID0gdGhpcy5mZWF0dXJlS2V5cy5maWx0ZXIoZiA9PiBmICE9PSBjb2x1bW5zKTtcbiAgICAgICAgICAgIHRoaXMucmVzdG9yZUZlYXR1cmVzKHN0YXRlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYXBwbHlGZWF0dXJlcyhmZWF0dXJlcyk7XG4gICAgICAgIGlmICh0aGlzLmZlYXR1cmVLZXlzLmluY2x1ZGVzKGNvbHVtbnMpICYmIHRoaXMub3B0aW9uc1tjb2x1bW5zXSAmJiBzdGF0ZVtjb2x1bW5zXSkge1xuICAgICAgICAgICAgdGhpcy5nZXRGZWF0dXJlKGNvbHVtbnMpLnJlc3RvcmVGZWF0dXJlU3RhdGUodGhpcywgc3RhdGVbY29sdW1uc10pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZXN0b3JlRmVhdHVyZXMoc3RhdGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXN0b3JlRmVhdHVyZXMoc3RhdGU6IElHcmlkU3RhdGUpIHtcbiAgICAgICAgdGhpcy5mZWF0dXJlS2V5cy5mb3JFYWNoKGYgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9uc1tmXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVTdGF0ZSA9IHN0YXRlW2ZdO1xuICAgICAgICAgICAgICAgIGlmIChmID09PSAnbW92aW5nJyB8fCBmZWF0dXJlU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmVhdHVyZSA9IHRoaXMuZ2V0RmVhdHVyZShmKTtcbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZS5yZXN0b3JlRmVhdHVyZVN0YXRlKHRoaXMsIGZlYXR1cmVTdGF0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgY29sbGVjdGlvbiBvZiBhbGwgZ3JpZCBmZWF0dXJlcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIGFwcGx5RmVhdHVyZXMoa2V5cz86IEdyaWRGZWF0dXJlcyB8IEdyaWRGZWF0dXJlc1tdKSB7XG4gICAgICAgIHRoaXMuZmVhdHVyZUtleXMgPSBbXTtcbiAgICAgICAgaWYgKCFrZXlzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzLm9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mZWF0dXJlS2V5cy5wdXNoKGtleSBhcyBHcmlkRmVhdHVyZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoa2V5cykpIHtcbiAgICAgICAgICAgIHRoaXMuZmVhdHVyZUtleXMgPSBbLi4ua2V5cyBhcyBHcmlkRmVhdHVyZXNbXV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZlYXR1cmVLZXlzLnB1c2goa2V5cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBidWlsZHMgYSBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgZnJvbSBhIHByb3ZpZGVkIG9iamVjdC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZUV4cHJlc3Npb25zVHJlZUZyb21PYmplY3QoZXhwclRyZWVPYmplY3Q6IEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSk6IEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSB7XG4gICAgICAgIGlmICghZXhwclRyZWVPYmplY3QgfHwgIWV4cHJUcmVlT2JqZWN0LmZpbHRlcmluZ09wZXJhbmRzKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb25zVHJlZSA9IG5ldyBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUoZXhwclRyZWVPYmplY3Qub3BlcmF0b3IsIGV4cHJUcmVlT2JqZWN0LmZpZWxkTmFtZSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGV4cHJUcmVlT2JqZWN0LmZpbHRlcmluZ09wZXJhbmRzKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBpdGVtIGlzIGFuIGV4cHJlc3Npb25zIHRyZWUgb3IgYSBzaW5nbGUgZXhwcmVzc2lvbi5cbiAgICAgICAgICAgIGlmICgoaXRlbSBhcyBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpLmZpbHRlcmluZ09wZXJhbmRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViVHJlZSA9IHRoaXMuY3JlYXRlRXhwcmVzc2lvbnNUcmVlRnJvbU9iamVjdCgoaXRlbSBhcyBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpKTtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uc1RyZWUuZmlsdGVyaW5nT3BlcmFuZHMucHVzaChzdWJUcmVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwciA9IGl0ZW0gYXMgSUZpbHRlcmluZ0V4cHJlc3Npb247XG4gICAgICAgICAgICAgICAgbGV0IGRhdGFUeXBlOiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VyckdyaWQuY29sdW1uTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlID0gdGhpcy5jdXJyR3JpZC5jb2x1bW5MaXN0LmZpbmQoYyA9PiBjLmZpZWxkID09PSBleHByLmZpZWxkTmFtZSkuZGF0YVR5cGU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlLmNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGUgPSB0aGlzLnN0YXRlLmNvbHVtbnMuZmluZChjID0+IGMuZmllbGQgPT09IGV4cHIuZmllbGROYW1lKS5kYXRhVHlwZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gd2hlbiBFU0YsIHZhbHVlcyBhcmUgc3RvcmVkIGluIFNldC5cbiAgICAgICAgICAgICAgICAvLyBGaXJzdCB0aG9zZSB2YWx1ZXMgYXJlIGNvbnZlcnRlZCB0byBhbiBhcnJheSBiZWZvcmUgcmV0dXJuaW5nIHN0cmluZyBpbiB0aGUgc3RyaW5naWZ5Q2FsbGJhY2tcbiAgICAgICAgICAgICAgICAvLyBub3cgd2UgbmVlZCB0byBjb252ZXJ0IHRob3NlIGJhY2sgdG8gU2V0XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXhwci5zZWFyY2hWYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cHIuc2VhcmNoVmFsID0gbmV3IFNldChleHByLnNlYXJjaFZhbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwci5zZWFyY2hWYWwgPSBleHByLnNlYXJjaFZhbCAmJiAoZGF0YVR5cGUgPT09ICdkYXRlJyB8fCBkYXRhVHlwZSA9PT0gJ2RhdGVUaW1lJykgPyBuZXcgRGF0ZShEYXRlLnBhcnNlKGV4cHIuc2VhcmNoVmFsKSkgOiBleHByLnNlYXJjaFZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZXhwci5jb25kaXRpb24gPSB0aGlzLmdlbmVyYXRlRmlsdGVyaW5nQ29uZGl0aW9uKGRhdGFUeXBlLCBleHByLmNvbmRpdGlvbi5uYW1lKTtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uc1RyZWUuZmlsdGVyaW5nT3BlcmFuZHMucHVzaChleHByKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleHByZXNzaW9uc1RyZWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZmlsdGVyaW5nIGxvZ2ljIGZ1bmN0aW9uIGZvciBhIGdpdmVuIGRhdGFUeXBlIGFuZCBjb25kaXRpb24gKGNvbnRhaW5zLCBncmVhdGVyVGhhbiwgZXRjLilcbiAgICAgKi9cbiAgICBwcml2YXRlIGdlbmVyYXRlRmlsdGVyaW5nQ29uZGl0aW9uKGRhdGFUeXBlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IElGaWx0ZXJpbmdPcGVyYXRpb24ge1xuICAgICAgICBsZXQgZmlsdGVycztcbiAgICAgICAgc3dpdGNoIChkYXRhVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuQm9vbGVhbjpcbiAgICAgICAgICAgICAgICBmaWx0ZXJzID0gSWd4Qm9vbGVhbkZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLk51bWJlcjpcbiAgICAgICAgICAgICAgICBmaWx0ZXJzID0gSWd4TnVtYmVyRmlsdGVyaW5nT3BlcmFuZC5pbnN0YW5jZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZTpcbiAgICAgICAgICAgICAgICBmaWx0ZXJzID0gSWd4RGF0ZUZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLkRhdGVUaW1lOlxuICAgICAgICAgICAgICAgIGZpbHRlcnMgPSBJZ3hEYXRlVGltZUZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLlN0cmluZzpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgZmlsdGVycyA9IElneFN0cmluZ0ZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsdGVycy5jb25kaXRpb24obmFtZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdHJpbmdpZnlDYWxsYmFjayhrZXk6IHN0cmluZywgdmFsOiBhbnkpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ3NlYXJjaFZhbCcgJiYgdmFsIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh2YWwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGZWF0dXJlKGtleTogc3RyaW5nKTogRmVhdHVyZSB7XG4gICAgICAgIGNvbnN0IGZlYXR1cmU6IEZlYXR1cmUgPSB0aGlzLkZFQVRVUkVTW2tleV07XG4gICAgICAgIHJldHVybiBmZWF0dXJlO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbSWd4R3JpZFN0YXRlRGlyZWN0aXZlXSxcbiAgICBleHBvcnRzOiBbSWd4R3JpZFN0YXRlRGlyZWN0aXZlXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkU3RhdGVNb2R1bGUgeyB9XG4iXX0=
547
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL3N0YXRlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBOEMsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9ILE9BQU8sRUFBRSx3QkFBd0IsRUFBNkIsTUFBTSwrQ0FBK0MsQ0FBQztBQUVwSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUczRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQ0gsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUsdUJBQXVCLEVBQzlFLHlCQUF5QixFQUF1QiwyQkFBMkIsRUFDOUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUdoRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQU16RCxPQUFPLEVBQVksYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBK0VsRSxNQUFNLE9BQU8scUJBQXFCO0lBNFQ5Qjs7T0FFRztJQUNILFlBQ3NELElBQWMsRUFDeEQsUUFBa0MsRUFDbEMsT0FBeUI7UUFGaUIsU0FBSSxHQUFKLElBQUksQ0FBVTtRQUN4RCxhQUFRLEdBQVIsUUFBUSxDQUEwQjtRQUNsQyxZQUFPLEdBQVAsT0FBTyxDQUFrQjtRQS9UN0IsZ0JBQVcsR0FBbUIsRUFBRSxDQUFDO1FBR2pDLGFBQVEsR0FBc0I7WUFDbEMsT0FBTyxFQUFFLElBQUk7WUFDYixTQUFTLEVBQUUsSUFBSTtZQUNmLGlCQUFpQixFQUFFLElBQUk7WUFDdkIsT0FB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amdCUSxxQkFBcUIsa0JBZ1VFLGFBQWE7c0dBaFVwQyxxQkFBcUI7MkZBQXJCLHFCQUFxQjtrQkFIakMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsZ0JBQWdCO2lCQUM3Qjs7MEJBaVVRLElBQUk7OzBCQUFJLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsYUFBYTtrSEFqQmxDLE9BQU87c0JBRGpCLEtBQUs7dUJBQUMsY0FBYzs7QUFzTnpCOztHQUVHO0FBS0gsTUFBTSxPQUFPLGtCQUFrQjs7K0dBQWxCLGtCQUFrQjtnSEFBbEIsa0JBQWtCLGlCQTNnQmxCLHFCQUFxQixhQUFyQixxQkFBcUI7Z0hBMmdCckIsa0JBQWtCOzJGQUFsQixrQkFBa0I7a0JBSjlCLFFBQVE7bUJBQUM7b0JBQ04sWUFBWSxFQUFFLENBQUMscUJBQXFCLENBQUM7b0JBQ3JDLE9BQU8sRUFBRSxDQUFDLHFCQUFxQixDQUFDO2lCQUNuQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgT3B0aW9uYWwsIElucHV0LCBOZ01vZHVsZSwgSG9zdCwgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBWaWV3Q29udGFpbmVyUmVmLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSwgSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctZXhwcmVzc2lvbnMtdHJlZSc7XG5pbXBvcnQgeyBJRmlsdGVyaW5nRXhwcmVzc2lvbiB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctZXhwcmVzc2lvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSWd4Q29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi9jb2x1bW5zL2NvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Q29sdW1uR3JvdXBDb21wb25lbnQgfSBmcm9tICcuL2NvbHVtbnMvY29sdW1uLWdyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJR3JvdXBpbmdFeHByZXNzaW9uIH0gZnJvbSAnLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwaW5nLWV4cHJlc3Npb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IElQYWdpbmdTdGF0ZSB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9wYWdpbmctc3RhdGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IEdyaWRDb2x1bW5EYXRhVHlwZSB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLXV0aWwnO1xuaW1wb3J0IHtcbiAgICBJZ3hCb29sZWFuRmlsdGVyaW5nT3BlcmFuZCwgSWd4TnVtYmVyRmlsdGVyaW5nT3BlcmFuZCwgSWd4RGF0ZUZpbHRlcmluZ09wZXJhbmQsXG4gICAgSWd4U3RyaW5nRmlsdGVyaW5nT3BlcmFuZCwgSUZpbHRlcmluZ09wZXJhdGlvbiwgSWd4RGF0ZVRpbWVGaWx0ZXJpbmdPcGVyYW5kXG59IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctY29uZGl0aW9uJztcbmltcG9ydCB7IElHcm91cEJ5RXhwYW5kU3RhdGUgfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvZ3JvdXBieS1leHBhbmQtc3RhdGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IElHcm91cGluZ1N0YXRlIH0gZnJvbSAnLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwYnktc3RhdGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IElneEdyaWRDb21wb25lbnQgfSBmcm9tICcuL2dyaWQvZ3JpZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudCB9IGZyb20gJy4vaGllcmFyY2hpY2FsLWdyaWQvaGllcmFyY2hpY2FsLWdyaWQuY29tcG9uZW50JztcbmltcG9ydCB7IElQaW5uaW5nQ29uZmlnIH0gZnJvbSAnLi9ncmlkLmNvbW1vbic7XG5pbXBvcnQgeyBkZWxheSwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEdyaWRTZWxlY3Rpb25SYW5nZSB9IGZyb20gJy4vY29tbW9uL3R5cGVzJztcbmltcG9ydCB7IElTb3J0aW5nRXhwcmVzc2lvbiB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9zb3J0aW5nLXN0cmF0ZWd5JztcbmltcG9ydCB7IEdyaWRUeXBlLCBJR1hfR1JJRF9CQVNFIH0gZnJvbSAnLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElHcmlkU3RhdGUge1xuICAgIGNvbHVtbnM/OiBJQ29sdW1uU3RhdGVbXTtcbiAgICBmaWx0ZXJpbmc/OiBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlO1xuICAgIGFkdmFuY2VkRmlsdGVyaW5nPzogSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTtcbiAgICBwYWdpbmc/OiBJUGFnaW5nU3RhdGU7XG4gICAgbW92aW5nPzogYm9vbGVhbjtcbiAgICBzb3J0aW5nPzogSVNvcnRpbmdFeHByZXNzaW9uW107XG4gICAgZ3JvdXBCeT86IElHcm91cGluZ1N0YXRlO1xuICAgIGNlbGxTZWxlY3Rpb24/OiBHcmlkU2VsZWN0aW9uUmFuZ2VbXTtcbiAgICByb3dTZWxlY3Rpb24/OiBhbnlbXTtcbiAgICBjb2x1bW5TZWxlY3Rpb24/OiBzdHJpbmdbXTtcbiAgICByb3dQaW5uaW5nPzogYW55W107XG4gICAgcGlubmluZ0NvbmZpZz86IElQaW5uaW5nQ29uZmlnO1xuICAgIGV4cGFuc2lvbj86IGFueVtdO1xuICAgIHJvd0lzbGFuZHM/OiBJR3JpZFN0YXRlQ29sbGVjdGlvbltdO1xuICAgIGlkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElHcmlkU3RhdGVDb2xsZWN0aW9uIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHBhcmVudFJvd0lEOiBhbnk7XG4gICAgc3RhdGU6IElHcmlkU3RhdGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUdyaWRTdGF0ZU9wdGlvbnMge1xuICAgIGNvbHVtbnM/OiBib29sZWFuO1xuICAgIGZpbHRlcmluZz86IGJvb2xlYW47XG4gICAgYWR2YW5jZWRGaWx0ZXJpbmc/OiBib29sZWFuO1xuICAgIHNvcnRpbmc/OiBib29sZWFuO1xuICAgIGdyb3VwQnk/OiBib29sZWFuO1xuICAgIHBhZ2luZz86IGJvb2xlYW47XG4gICAgY2VsbFNlbGVjdGlvbj86IGJvb2xlYW47XG4gICAgcm93U2VsZWN0aW9uPzogYm9vbGVhbjtcbiAgICBjb2x1bW5TZWxlY3Rpb24/OiBib29sZWFuO1xuICAgIHJvd1Bpbm5pbmc/OiBib29sZWFuO1xuICAgIHBpbm5pbmdDb25maWc/OiBib29sZWFuO1xuICAgIGV4cGFuc2lvbj86IGJvb2xlYW47XG4gICAgcm93SXNsYW5kcz86IGJvb2xlYW47XG4gICAgbW92aW5nPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ29sdW1uU3RhdGUge1xuICAgIHBpbm5lZDogYm9vbGVhbjtcbiAgICBzb3J0YWJsZTogYm9vbGVhbjtcbiAgICBmaWx0ZXJhYmxlOiBib29sZWFuO1xuICAgIGVkaXRhYmxlOiBib29sZWFuO1xuICAgIHNvcnRpbmdJZ25vcmVDYXNlOiBib29sZWFuO1xuICAgIGZpbHRlcmluZ0lnbm9yZUNhc2U6IGJvb2xlYW47XG4gICAgaGVhZGVyQ2xhc3Nlczogc3RyaW5nO1xuICAgIGhlYWRlckdyb3VwQ2xhc3Nlczogc3RyaW5nO1xuICAgIG1heFdpZHRoOiBzdHJpbmc7XG4gICAgZ3JvdXBhYmxlOiBib29sZWFuO1xuICAgIG1vdmFibGU6IGJvb2xlYW47XG4gICAgaGlkZGVuOiBib29sZWFuO1xuICAgIGRhdGFUeXBlOiBHcmlkQ29sdW1uRGF0YVR5cGU7XG4gICAgaGFzU3VtbWFyeTogYm9vbGVhbjtcbiAgICBmaWVsZDogc3RyaW5nO1xuICAgIHdpZHRoOiBhbnk7XG4gICAgaGVhZGVyOiBzdHJpbmc7XG4gICAgcmVzaXphYmxlOiBib29sZWFuO1xuICAgIHNlYXJjaGFibGU6IGJvb2xlYW47XG4gICAgY29sdW1uR3JvdXA6IGJvb2xlYW47XG4gICAgcGFyZW50OiBhbnk7XG4gICAgZGlzYWJsZUhpZGluZzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgR3JpZEZlYXR1cmVzID0ga2V5b2YgSUdyaWRTdGF0ZU9wdGlvbnM7XG5cbmludGVyZmFjZSBGZWF0dXJlIHtcbiAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpID0+IElHcmlkU3RhdGU7XG4gICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IElDb2x1bW5TdGF0ZVtdIHwgSVBhZ2luZ1N0YXRlIHwgYm9vbGVhbiB8IElTb3J0aW5nRXhwcmVzc2lvbltdIHxcbiAgICAgICAgSUdyb3VwaW5nU3RhdGUgfCBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlIHwgR3JpZFNlbGVjdGlvblJhbmdlW10gfCBJUGlubmluZ0NvbmZpZyB8IGFueVtdKSA9PiB2b2lkO1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tpZ3hHcmlkU3RhdGVdJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUge1xuICAgIHByaXZhdGUgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX29wdGlvbnM6IElHcmlkU3RhdGVPcHRpb25zIHwgJyc7XG5cbiAgICBwcml2YXRlIGZlYXR1cmVLZXlzOiBHcmlkRmVhdHVyZXNbXSA9IFtdO1xuICAgIHByaXZhdGUgc3RhdGU6IElHcmlkU3RhdGU7XG4gICAgcHJpdmF0ZSBjdXJyR3JpZDogR3JpZFR5cGU7XG4gICAgcHJpdmF0ZSBfb3B0aW9uczogSUdyaWRTdGF0ZU9wdGlvbnMgPSB7XG4gICAgICAgIGNvbHVtbnM6IHRydWUsXG4gICAgICAgIGZpbHRlcmluZzogdHJ1ZSxcbiAgICAgICAgYWR2YW5jZWRGaWx0ZXJpbmc6IHRydWUsXG4gICAgICAgIHNvcnRpbmc6IHRydWUsXG4gICAgICAgIGdyb3VwQnk6IHRydWUsXG4gICAgICAgIHBhZ2luZzogdHJ1ZSxcbiAgICAgICAgY2VsbFNlbGVjdGlvbjogdHJ1ZSxcbiAgICAgICAgcm93U2VsZWN0aW9uOiB0cnVlLFxuICAgICAgICBjb2x1bW5TZWxlY3Rpb246IHRydWUsXG4gICAgICAgIHJvd1Bpbm5pbmc6IHRydWUsXG4gICAgICAgIGV4cGFuc2lvbjogdHJ1ZSxcbiAgICAgICAgbW92aW5nOiB0cnVlLFxuICAgICAgICByb3dJc2xhbmRzOiB0cnVlXG4gICAgfTtcbiAgICBwcml2YXRlIEZFQVRVUkVTID0ge1xuICAgICAgICBzb3J0aW5nOiAge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc29ydGluZ1N0YXRlID0gY29udGV4dC5jdXJyR3JpZC5zb3J0aW5nRXhwcmVzc2lvbnM7XG4gICAgICAgICAgICAgICAgc29ydGluZ1N0YXRlLmZvckVhY2gocyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzLnN0cmF0ZWd5O1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcy5vd25lcjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBzb3J0aW5nOiBzb3J0aW5nU3RhdGUgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCBzdGF0ZTogSVNvcnRpbmdFeHByZXNzaW9uW10pOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLnNvcnRpbmdFeHByZXNzaW9ucyA9IHN0YXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBmaWx0ZXJpbmc6IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmluZ1N0YXRlID0gY29udGV4dC5jdXJyR3JpZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU7XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlcmluZ1N0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBmaWx0ZXJpbmdTdGF0ZS5vd25lcjtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGZpbHRlcmluZ1N0YXRlLmZpbHRlcmluZ09wZXJhbmRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgKGl0ZW0gYXMgSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSkub3duZXI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZmlsdGVyaW5nOiBmaWx0ZXJpbmdTdGF0ZSB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJUcmVlID0gY29udGV4dC5jcmVhdGVFeHByZXNzaW9uc1RyZWVGcm9tT2JqZWN0KHN0YXRlKTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSA9IGZpbHRlclRyZWUgYXMgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBhZHZhbmNlZEZpbHRlcmluZzoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyaW5nU3RhdGUgPSBjb250ZXh0LmN1cnJHcmlkLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlO1xuICAgICAgICAgICAgICAgIGxldCBhZHZhbmNlZEZpbHRlcmluZzogYW55O1xuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJpbmdTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgZmlsdGVyaW5nU3RhdGUub3duZXI7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBmaWx0ZXJpbmdTdGF0ZS5maWx0ZXJpbmdPcGVyYW5kcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIChpdGVtIGFzIElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpLm93bmVyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFkdmFuY2VkRmlsdGVyaW5nID0gZmlsdGVyaW5nU3RhdGU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZWRGaWx0ZXJpbmcgPSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgYWR2YW5jZWRGaWx0ZXJpbmcgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCBzdGF0ZTogRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyVHJlZSA9IGNvbnRleHQuY3JlYXRlRXhwcmVzc2lvbnNUcmVlRnJvbU9iamVjdChzdGF0ZSk7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSA9IGZpbHRlclRyZWUgYXMgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjb2x1bW5zOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBncmlkQ29sdW1uczogSUNvbHVtblN0YXRlW10gPSBjb250ZXh0LmN1cnJHcmlkLmNvbHVtbnMubWFwKChjKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICBwaW5uZWQ6IGMucGlubmVkLFxuICAgICAgICAgICAgICAgICAgICBzb3J0YWJsZTogYy5zb3J0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyYWJsZTogYy5maWx0ZXJhYmxlLFxuICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZTogYy5lZGl0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgc29ydGluZ0lnbm9yZUNhc2U6IGMuc29ydGluZ0lnbm9yZUNhc2UsXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcmluZ0lnbm9yZUNhc2U6IGMuZmlsdGVyaW5nSWdub3JlQ2FzZSxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyQ2xhc3NlczogYy5oZWFkZXJDbGFzc2VzLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJHcm91cENsYXNzZXM6IGMuaGVhZGVyR3JvdXBDbGFzc2VzLFxuICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogYy5tYXhXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBhYmxlOiBjLmdyb3VwYWJsZSxcbiAgICAgICAgICAgICAgICAgICAgbW92YWJsZTogYy5tb3ZhYmxlLFxuICAgICAgICAgICAgICAgICAgICBoaWRkZW46IGMuaGlkZGVuLFxuICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogYy5kYXRhVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgaGFzU3VtbWFyeTogYy5oYXNTdW1tYXJ5LFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogYy5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGMud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcjogYy5oZWFkZXIsXG4gICAgICAgICAgICAgICAgICAgIHJlc2l6YWJsZTogYy5yZXNpemFibGUsXG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaGFibGU6IGMuc2VhcmNoYWJsZSxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogYy5zZWxlY3RhYmxlLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGMucGFyZW50ID8gYy5wYXJlbnQuaGVhZGVyIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uR3JvdXA6IGMuY29sdW1uR3JvdXAsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVIaWRpbmc6IGMuZGlzYWJsZUhpZGluZ1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBjb2x1bW5zOiBncmlkQ29sdW1ucyB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBJQ29sdW1uU3RhdGVbXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NvbHVtbnMgPSBbXTtcbiAgICAgICAgICAgICAgICBjb25zdCBmYWN0b3J5ID0gY29udGV4dC5yZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShJZ3hDb2x1bW5Db21wb25lbnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwRmFjdG9yeSA9IGNvbnRleHQucmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoSWd4Q29sdW1uR3JvdXBDb21wb25lbnQpO1xuICAgICAgICAgICAgICAgIHN0YXRlLmZvckVhY2goKGNvbFN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc0NvbHVtbkdyb3VwID0gY29sU3RhdGUuY29sdW1uR3JvdXA7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjb2xTdGF0ZS5jb2x1bW5Hcm91cDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0NvbHVtbkdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWYxID0gZ3JvdXBGYWN0b3J5LmNyZWF0ZShjb250ZXh0LnZpZXdSZWYuaW5qZWN0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihyZWYxLmluc3RhbmNlLCBjb2xTdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVmMS5pbnN0YW5jZS5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5Hcm91cDogSWd4Q29sdW1uR3JvdXBDb21wb25lbnQgPSBuZXdDb2x1bW5zLmZpbmQoZSA9PiBlLmhlYWRlciA9PT0gcmVmMS5pbnN0YW5jZS5wYXJlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkdyb3VwLmNoaWxkcmVuLnJlc2V0KFsuLi5jb2x1bW5Hcm91cC5jaGlsZHJlbi50b0FycmF5KCksIHJlZjEuaW5zdGFuY2VdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWYxLmluc3RhbmNlLnBhcmVudCA9IGNvbHVtbkdyb3VwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmMS5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDb2x1bW5zLnB1c2gocmVmMS5pbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWYgPSBmYWN0b3J5LmNyZWF0ZShjb250ZXh0LnZpZXdSZWYuaW5qZWN0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihyZWYuaW5zdGFuY2UsIGNvbFN0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWYuaW5zdGFuY2UucGFyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1uR3JvdXA6IElneENvbHVtbkdyb3VwQ29tcG9uZW50ID0gbmV3Q29sdW1ucy5maW5kKGUgPT4gZS5oZWFkZXIgPT09IHJlZi5pbnN0YW5jZS5wYXJlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW5Hcm91cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWYuaW5zdGFuY2UucGFyZW50ID0gY29sdW1uR3JvdXA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkdyb3VwLmNoaWxkcmVuLnJlc2V0KFsuLi5jb2x1bW5Hcm91cC5jaGlsZHJlbi50b0FycmF5KCksIHJlZi5pbnN0YW5jZV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDb2x1bW5zLnB1c2gocmVmLmluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZ3JpZC51cGRhdGVDb2x1bW5zKG5ld0NvbHVtbnMpO1xuICAgICAgICAgICAgICAgIG5ld0NvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgICAgICAgICAoY29udGV4dC5ncmlkIGFzIGFueSkuY29sdW1uSW5pdC5lbWl0KGNvbCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdyb3VwQnk6IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyaWQgPSBjb250ZXh0LmN1cnJHcmlkIGFzIElneEdyaWRDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBpbmdFeHByZXNzaW9ucyA9IGdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucztcbiAgICAgICAgICAgICAgICBncm91cGluZ0V4cHJlc3Npb25zLmZvckVhY2goZXhwciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBleHByLnN0cmF0ZWd5O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGFuc2lvblN0YXRlID0gZ3JpZC5ncm91cGluZ0V4cGFuc2lvblN0YXRlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3Vwc0V4cGFuZGVkID0gZ3JpZC5ncm91cHNFeHBhbmRlZDtcblxuICAgICAgICAgICAgICAgIHJldHVybiB7IGdyb3VwQnk6IHsgZXhwcmVzc2lvbnM6IGdyb3VwaW5nRXhwcmVzc2lvbnMsIGV4cGFuc2lvbjogZXhwYW5zaW9uU3RhdGUsIGRlZmF1bHRFeHBhbmRlZDogZ3JvdXBzRXhwYW5kZWR9ICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBJR3JvdXBpbmdTdGF0ZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyaWQgPSBjb250ZXh0LmN1cnJHcmlkIGFzIElneEdyaWRDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zID0gc3RhdGUuZXhwcmVzc2lvbnMgYXMgSUdyb3VwaW5nRXhwcmVzc2lvbltdO1xuICAgICAgICAgICAgICAgIGlmIChncmlkLmdyb3Vwc0V4cGFuZGVkICE9PSBzdGF0ZS5kZWZhdWx0RXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZ3JpZC50b2dnbGVBbGxHcm91cFJvd3MoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBncmlkLmdyb3VwaW5nRXhwYW5zaW9uU3RhdGUgPSBzdGF0ZS5leHBhbnNpb24gYXMgSUdyb3VwQnlFeHBhbmRTdGF0ZVtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcGFnaW5nOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYWdpbmdTdGF0ZSA9IGNvbnRleHQuY3VyckdyaWQucGFnaW5nU3RhdGU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcGFnaW5nOiBwYWdpbmdTdGF0ZSB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBJUGFnaW5nU3RhdGUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQuY3VyckdyaWQucGFnaW5hdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuY3VyckdyaWQucGFnaW5hdG9yLnBlclBhZ2UgIT09IHN0YXRlLnJlY29yZHNQZXJQYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQucGFnaW5hdG9yLnBlclBhZ2UgPSBzdGF0ZS5yZWNvcmRzUGVyUGFnZTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLnBhZ2luYXRvci5wYWdlID0gc3RhdGUuaW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1vdmluZzoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgbW92aW5nOiBjb250ZXh0LmN1cnJHcmlkLm1vdmluZyB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBib29sZWFuKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5tb3ZpbmcgPSBzdGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcm93U2VsZWN0aW9uOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSBjb250ZXh0LmN1cnJHcmlkLnNlbGVjdGVkUm93cztcbiAgICAgICAgICAgICAgICByZXR1cm4geyByb3dTZWxlY3Rpb246IHNlbGVjdGlvbiB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBhbnlbXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQuc2VsZWN0Um93cyhzdGF0ZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNlbGxTZWxlY3Rpb246IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGNvbnRleHQuY3VyckdyaWQuZ2V0U2VsZWN0ZWRSYW5nZXMoKS5tYXAocmFuZ2UgPT5cbiAgICAgICAgICAgICAgICAgICAgKHsgcm93U3RhcnQ6IHJhbmdlLnJvd1N0YXJ0LCByb3dFbmQ6IHJhbmdlLnJvd0VuZCwgY29sdW1uU3RhcnQ6IHJhbmdlLmNvbHVtblN0YXJ0LCBjb2x1bW5FbmQ6IHJhbmdlLmNvbHVtbkVuZCB9KSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgY2VsbFNlbGVjdGlvbjogc2VsZWN0aW9uIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IEdyaWRTZWxlY3Rpb25SYW5nZVtdKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgc3RhdGUuZm9yRWFjaChyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSB7IHJvd1N0YXJ0OiByLnJvd1N0YXJ0LCByb3dFbmQ6IHIucm93RW5kLCBjb2x1bW5TdGFydDogci5jb2x1bW5TdGFydCwgY29sdW1uRW5kOiByLmNvbHVtbkVuZH07XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQuc2VsZWN0UmFuZ2UocmFuZ2UpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjb2x1bW5TZWxlY3Rpb246IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGNvbnRleHQuY3VyckdyaWQuc2VsZWN0ZWRDb2x1bW5zKCkubWFwKGMgPT4gYy5maWVsZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgY29sdW1uU2VsZWN0aW9uOiBzZWxlY3Rpb24gfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCBzdGF0ZTogc3RyaW5nW10pOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLmRlc2VsZWN0QWxsQ29sdW1ucygpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQuc2VsZWN0Q29sdW1ucyhzdGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJvd1Bpbm5pbmc6IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBpbm5lZCA9IGNvbnRleHQuY3VyckdyaWQucGlubmVkUm93cy5tYXAoeCA9PiB4LmtleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcm93UGlubmluZzogcGlubmVkIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IGFueVtdKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gY2xlYXIgY3VycmVudCBzdGF0ZS5cbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLnBpbm5lZFJvd3MuZm9yRWFjaChyb3cgPT4gcm93LnVucGluKCkpO1xuICAgICAgICAgICAgICAgIHN0YXRlLmZvckVhY2gocm93SUQgPT4gY29udGV4dC5jdXJyR3JpZC5waW5Sb3cocm93SUQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcGlubmluZ0NvbmZpZzoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiAoeyBwaW5uaW5nQ29uZmlnOiBjb250ZXh0LmN1cnJHcmlkLnBpbm5pbmcgfSksXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCBzdGF0ZTogSVBpbm5pbmdDb25maWcpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLnBpbm5pbmcgPSBzdGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXhwYW5zaW9uOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBhbnNpb25TdGF0ZXMgPSBBcnJheS5mcm9tKGNvbnRleHQuY3VyckdyaWQuZXhwYW5zaW9uU3RhdGVzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBleHBhbnNpb246IGV4cGFuc2lvblN0YXRlcyB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBhbnlbXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGFuc2lvblN0YXRlcyA9IG5ldyBNYXA8YW55LCBib29sZWFuPihzdGF0ZSk7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5leHBhbnNpb25TdGF0ZXMgPSBleHBhbnNpb25TdGF0ZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJvd0lzbGFuZHM6IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZShjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEdyaWRTdGF0ZXM6IElHcmlkU3RhdGVDb2xsZWN0aW9uW10gPSBbXTtcbiAgICAgICAgICAgICAgICBjb25zdCByb3dJc2xhbmRzID0gKGNvbnRleHQuY3VyckdyaWQgYXMgYW55KS5hbGxMYXlvdXRMaXN0O1xuICAgICAgICAgICAgICAgIGlmIChyb3dJc2xhbmRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd0lzbGFuZHMuZm9yRWFjaChyb3dJc2xhbmQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRHcmlkcyA9IHJvd0lzbGFuZC5yb3dJc2xhbmRBUEkuZ2V0Q2hpbGRHcmlkcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRHcmlkcy5mb3JFYWNoKGNoR3JpZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50Um93SUQgPSB0aGlzLmdldFBhcmVudFJvd0lEKGNoR3JpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZCA9IGNoR3JpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5jdXJyR3JpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEdyaWRTdGF0ZSA9IGNvbnRleHQuYnVpbGRTdGF0ZShjb250ZXh0LmZlYXR1cmVLZXlzKSBhcyBJR3JpZFN0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEdyaWRTdGF0ZXMucHVzaCh7IGlkOiBgJHtyb3dJc2xhbmQuaWR9YCwgcGFyZW50Um93SUQsIHN0YXRlOiBjaGlsZEdyaWRTdGF0ZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQgPSBjb250ZXh0LmdyaWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcm93SXNsYW5kczogY2hpbGRHcmlkU3RhdGVzIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZShjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgICAgICAgICBjb25zdCByb3dJc2xhbmRzID0gKGNvbnRleHQuY3VyckdyaWQgYXMgYW55KS5hbGxMYXlvdXRMaXN0O1xuICAgICAgICAgICAgICAgIGlmIChyb3dJc2xhbmRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd0lzbGFuZHMuZm9yRWFjaChyb3dJc2xhbmQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRHcmlkcyA9IHJvd0lzbGFuZC5yb3dJc2xhbmRBUEkuZ2V0Q2hpbGRHcmlkcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRHcmlkcy5mb3JFYWNoKGNoR3JpZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50Um93SUQgPSB0aGlzLmdldFBhcmVudFJvd0lEKGNoR3JpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZCA9IGNoR3JpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEdyaWRTdGF0ZSA9IHN0YXRlLmZpbmQoc3QgPT4gc3QuaWQgPT09IHJvd0lzbGFuZC5pZCAmJiBzdC5wYXJlbnRSb3dJRCA9PT0gcGFyZW50Um93SUQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZEdyaWRTdGF0ZSAmJiBjb250ZXh0LmN1cnJHcmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVzdG9yZUdyaWRTdGF0ZShjaGlsZEdyaWRTdGF0ZS5zdGF0ZSwgY29udGV4dC5mZWF0dXJlS2V5cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkID0gY29udGV4dC5ncmlkO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVHJhdmVyc2VzIHRoZSBoaWVyYXJjaHkgdXAgdG8gdGhlIHJvb3QgZ3JpZCB0byByZXR1cm4gdGhlIElEIG9mIHRoZSBleHBhbmRlZCByb3cuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGdldFBhcmVudFJvd0lEOiAoZ3JpZDogSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBjaGlsZEdyaWQ7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGdyaWQucGFyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkR3JpZCA9IGdyaWQ7XG4gICAgICAgICAgICAgICAgICAgIGdyaWQgPSBncmlkLnBhcmVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdyaWQuZ3JpZEFQSS5nZXRQYXJlbnRSb3dJZChjaGlsZEdyaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqICBBbiBvYmplY3Qgd2l0aCBvcHRpb25zIGRldGVybWluaW5nIGlmIGEgY2VydGFpbiBmZWF0dXJlIHN0YXRlIHNob3VsZCBiZSBzYXZlZC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1ncmlkIFtpZ3hHcmlkU3RhdGVdPVwib3B0aW9uc1wiPjwvaWd4LWdyaWQ+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHB1YmxpYyBvcHRpb25zID0ge3NlbGVjdGlvbjogZmFsc2UsIGFkdmFuY2VkRmlsdGVyaW5nOiBmYWxzZX07XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KCdpZ3hHcmlkU3RhdGUnKVxuICAgIHB1YmxpYyBnZXQgb3B0aW9ucygpOiBJR3JpZFN0YXRlT3B0aW9ucyB7XG4gICAgICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBvcHRpb25zKHZhbHVlOiBJR3JpZFN0YXRlT3B0aW9ucykge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuX29wdGlvbnMsIHZhbHVlKTtcbiAgICAgICAgaWYgKCEodGhpcy5ncmlkIGluc3RhbmNlb2YgSWd4R3JpZENvbXBvbmVudCkpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9vcHRpb25zLmdyb3VwQnk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fb3B0aW9ucy5yb3dJc2xhbmRzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASG9zdCgpIEBPcHRpb25hbCgpIEBJbmplY3QoSUdYX0dSSURfQkFTRSkgcHVibGljIGdyaWQ6IEdyaWRUeXBlLFxuICAgICAgICBwcml2YXRlIHJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgICAgIHByaXZhdGUgdmlld1JlZjogVmlld0NvbnRhaW5lclJlZikgeyB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBzdGF0ZSBvZiBhIGZlYXR1cmUgb3Igc3RhdGVzIG9mIGFsbCBncmlkIGZlYXR1cmVzLCB1bmxlc3MgYSBjZXJ0YWluIGZlYXR1cmUgaXMgZGlzYWJsZWQgdGhyb3VnaCB0aGUgYG9wdGlvbnNgIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQHBhcmFtIGBzZXJpYWxpemVgIGRldGVybWluZXMgd2hldGhlciB0aGUgcmV0dXJuZWQgb2JqZWN0IHdpbGwgYmUgc2VyaWFsaXplZCB0byBKU09OIHN0cmluZy4gRGVmYXVsdCB2YWx1ZSBpcyB0cnVlLlxuICAgICAqIEBwYXJhbSBgZmVhdHVyZWAgc3RyaW5nIG9yIGFycmF5IG9mIHN0cmluZ3MgZGV0ZXJtaW5pbmcgdGhlIGZlYXR1cmVzIHRvIGJlIGFkZGVkIGluIHRoZSBzdGF0ZS4gSWYgc2tpcHBlZCwgYWxsIGZlYXR1cmVzIGFyZSBhZGRlZC5cbiAgICAgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBzZXJpYWxpemVkIHRvIEpTT04gc3RyaW5nIElHcmlkU3RhdGUgb2JqZWN0LCBvciB0aGUgbm9uLXNlcmlhbGl6ZWQgSUdyaWRTdGF0ZSBvYmplY3QuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZ3JpZCBbaWd4R3JpZFN0YXRlXT1cIm9wdGlvbnNcIj48L2lneC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgcHVibGljIHN0YXRlO1xuICAgICAqIGxldCBzdGF0ZSA9IHRoaXMuc3RhdGUuZ2V0U3RhdGUoKTsgLy8gcmV0dXJucyBzdHJpbmdcbiAgICAgKiBsZXQgc3RhdGUgPSB0aGlzLnN0YXRlKGZhbHNlKSAvLyByZXR1cm5zIGBJR3JpZFN0YXRlYCBvYmplY3RcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0U3RhdGUoc2VyaWFsaXplID0gdHJ1ZSwgZmVhdHVyZXM/OiBHcmlkRmVhdHVyZXMgfCBHcmlkRmVhdHVyZXNbXSk6IElHcmlkU3RhdGUgfCBzdHJpbmcgIHtcbiAgICAgICAgbGV0IHN0YXRlOiBJR3JpZFN0YXRlIHwgc3RyaW5nO1xuICAgICAgICB0aGlzLmN1cnJHcmlkID0gdGhpcy5ncmlkO1xuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGUgPSB0aGlzLmJ1aWxkU3RhdGUoZmVhdHVyZXMpIGFzIElHcmlkU3RhdGU7XG4gICAgICAgIGlmIChzZXJpYWxpemUpIHtcbiAgICAgICAgICAgIHN0YXRlID0gSlNPTi5zdHJpbmdpZnkoc3RhdGUsIHRoaXMuc3RyaW5naWZ5Q2FsbGJhY2spIGFzIHN0cmluZztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzdG9yZXMgZ3JpZCBmZWF0dXJlcycgc3RhdGUgYmFzZWQgb24gdGhlIElHcmlkU3RhdGUgb2JqZWN0IHBhc3NlZCBhcyBhbiBhcmd1bWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBJR3JpZFN0YXRlIG9iamVjdCB0byByZXN0b3JlIHN0YXRlIGZyb20uXG4gICAgICogQHJldHVybnNcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1ncmlkIFtpZ3hHcmlkU3RhdGVdPVwib3B0aW9uc1wiPjwvaWd4LWdyaWQ+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgc3RhdGU7XG4gICAgICogdGhpcy5zdGF0ZS5zZXRTdGF0ZShncmlkU3RhdGUpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRTdGF0ZShzdGF0ZTogSUdyaWRTdGF0ZSB8IHN0cmluZywgZmVhdHVyZXM/OiBHcmlkRmVhdHVyZXMgfCBHcmlkRmVhdHVyZXNbXSkge1xuICAgICAgICBpZiAodHlwZW9mIHN0YXRlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgc3RhdGUgPSBKU09OLnBhcnNlKHN0YXRlKSBhcyBJR3JpZFN0YXRlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgdGhpcy5jdXJyR3JpZCA9IHRoaXMuZ3JpZDtcbiAgICAgICAgdGhpcy5yZXN0b3JlR3JpZFN0YXRlKHN0YXRlLCBmZWF0dXJlcyk7XG4gICAgICAgIHRoaXMuZ3JpZC5jZHIuZGV0ZWN0Q2hhbmdlcygpOyAvLyBUT0RPXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnVpbGRzIGFuIElHcmlkU3RhdGUgb2JqZWN0LlxuICAgICAqL1xuICAgIHByaXZhdGUgYnVpbGRTdGF0ZShrZXlzPzogR3JpZEZlYXR1cmVzIHwgR3JpZEZlYXR1cmVzW10pOiBJR3JpZFN0YXRlIHtcbiAgICAgICAgdGhpcy5hcHBseUZlYXR1cmVzKGtleXMpO1xuICAgICAgICBsZXQgZ3JpZFN0YXRlID0ge30gYXMgSUdyaWRTdGF0ZTtcbiAgICAgICAgdGhpcy5mZWF0dXJlS2V5cy5mb3JFYWNoKGYgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9uc1tmXSkge1xuICAgICAgICAgICAgICAgIGlmICghKHRoaXMuZ3JpZCBpbnN0YW5jZW9mIElneEdyaWRDb21wb25lbnQpICYmIGYgPT09ICdncm91cEJ5Jykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGZlYXR1cmUgPSB0aGlzLmdldEZlYXR1cmUoZik7XG4gICAgICAgICAgICAgICAgY29uc3QgZmVhdHVyZVN0YXRlOiBJR3JpZFN0YXRlID0gZmVhdHVyZS5nZXRGZWF0dXJlU3RhdGUodGhpcyk7XG4gICAgICAgICAgICAgICAgZ3JpZFN0YXRlID0gT2JqZWN0LmFzc2lnbihncmlkU3RhdGUsIGZlYXR1cmVTdGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZ3JpZFN0YXRlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBtZXRob2QgdGhhdCBjYWxscyBjb3JyZXNwb25kaW5nIG1ldGhvZHMgdG8gcmVzdG9yZSBmZWF0dXJlcyBmcm9tIHRoZSBwYXNzZWQgSUdyaWRTdGF0ZSBvYmplY3QuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZXN0b3JlR3JpZFN0YXRlKHN0YXRlOiBJR3JpZFN0YXRlLCBmZWF0dXJlcz86IEdyaWRGZWF0dXJlcyB8IEdyaWRGZWF0dXJlc1tdKSB7XG4gICAgICAgIC8vIFRPRE8gTm90aWZ5IHRoZSBncmlkIHRoYXQgY29sdW1uTGlzdC5jaGFuZ2VzIGlzIHRyaWdnZXJlZCBieSB0aGUgc3RhdGUgZGlyZWN0aXZlXG4gICAgICAgIC8vIGluc3RlYWQgb2YgcGlwaW5nIGl0IGxpa2UgYmVsb3dcbiAgICAgICAgY29uc3QgY29sdW1ucyA9ICdjb2x1bW5zJztcbiAgICAgICAgdGhpcy5hcHBseUZlYXR1cmVzKGZlYXR1cmVzKTtcbiAgICAgICAgaWYgKHRoaXMuZmVhdHVyZUtleXMuaW5jbHVkZXMoY29sdW1ucykgJiYgdGhpcy5vcHRpb25zW2NvbHVtbnNdICYmIHN0YXRlW2NvbHVtbnNdKSB7XG4gICAgICAgICAgICB0aGlzLmdldEZlYXR1cmUoY29sdW1ucykucmVzdG9yZUZlYXR1cmVTdGF0ZSh0aGlzLCBzdGF0ZVtjb2x1bW5zXSk7XG4gICAgICAgICAgICB0aGlzLmZlYXR1cmVLZXlzID0gdGhpcy5mZWF0dXJlS2V5cy5maWx0ZXIoZiA9PiBmICE9PSBjb2x1bW5zKTtcbiAgICAgICAgICAgIHRoaXMucmVzdG9yZUZlYXR1cmVzKHN0YXRlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVzdG9yZUZlYXR1cmVzKHN0YXRlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVzdG9yZUZlYXR1cmVzKHN0YXRlOiBJR3JpZFN0YXRlKSB7XG4gICAgICAgIHRoaXMuZmVhdHVyZUtleXMuZm9yRWFjaChmID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnNbZl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlU3RhdGUgPSBzdGF0ZVtmXTtcbiAgICAgICAgICAgICAgICBpZiAoZiA9PT0gJ21vdmluZycgfHwgZmVhdHVyZVN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZlYXR1cmUgPSB0aGlzLmdldEZlYXR1cmUoZik7XG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmUucmVzdG9yZUZlYXR1cmVTdGF0ZSh0aGlzLCBmZWF0dXJlU3RhdGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGNvbGxlY3Rpb24gb2YgYWxsIGdyaWQgZmVhdHVyZXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBhcHBseUZlYXR1cmVzKGtleXM/OiBHcmlkRmVhdHVyZXMgfCBHcmlkRmVhdHVyZXNbXSkge1xuICAgICAgICB0aGlzLmZlYXR1cmVLZXlzID0gW107XG4gICAgICAgIGlmICgha2V5cykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5vcHRpb25zKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZUtleXMucHVzaChrZXkgYXMgR3JpZEZlYXR1cmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGtleXMpKSB7XG4gICAgICAgICAgICB0aGlzLmZlYXR1cmVLZXlzID0gWy4uLmtleXMgYXMgR3JpZEZlYXR1cmVzW11dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mZWF0dXJlS2V5cy5wdXNoKGtleXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgYnVpbGRzIGEgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlIGZyb20gYSBwcm92aWRlZCBvYmplY3QuXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVFeHByZXNzaW9uc1RyZWVGcm9tT2JqZWN0KGV4cHJUcmVlT2JqZWN0OiBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpOiBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUge1xuICAgICAgICBpZiAoIWV4cHJUcmVlT2JqZWN0IHx8ICFleHByVHJlZU9iamVjdC5maWx0ZXJpbmdPcGVyYW5kcykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBleHByZXNzaW9uc1RyZWUgPSBuZXcgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKGV4cHJUcmVlT2JqZWN0Lm9wZXJhdG9yLCBleHByVHJlZU9iamVjdC5maWVsZE5hbWUpO1xuXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBleHByVHJlZU9iamVjdC5maWx0ZXJpbmdPcGVyYW5kcykge1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaXRlbSBpcyBhbiBleHByZXNzaW9ucyB0cmVlIG9yIGEgc2luZ2xlIGV4cHJlc3Npb24uXG4gICAgICAgICAgICBpZiAoKGl0ZW0gYXMgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKS5maWx0ZXJpbmdPcGVyYW5kcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1YlRyZWUgPSB0aGlzLmNyZWF0ZUV4cHJlc3Npb25zVHJlZUZyb21PYmplY3QoKGl0ZW0gYXMgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKSk7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbnNUcmVlLmZpbHRlcmluZ09wZXJhbmRzLnB1c2goc3ViVHJlZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cHIgPSBpdGVtIGFzIElGaWx0ZXJpbmdFeHByZXNzaW9uO1xuICAgICAgICAgICAgICAgIGxldCBkYXRhVHlwZTogc3RyaW5nO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJHcmlkLmNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZSA9IHRoaXMuY3VyckdyaWQuY29sdW1ucy5maW5kKGMgPT4gYy5maWVsZCA9PT0gZXhwci5maWVsZE5hbWUpLmRhdGFUeXBlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZS5jb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlID0gdGhpcy5zdGF0ZS5jb2x1bW5zLmZpbmQoYyA9PiBjLmZpZWxkID09PSBleHByLmZpZWxkTmFtZSkuZGF0YVR5cGU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHdoZW4gRVNGLCB2YWx1ZXMgYXJlIHN0b3JlZCBpbiBTZXQuXG4gICAgICAgICAgICAgICAgLy8gRmlyc3QgdGhvc2UgdmFsdWVzIGFyZSBjb252ZXJ0ZWQgdG8gYW4gYXJyYXkgYmVmb3JlIHJldHVybmluZyBzdHJpbmcgaW4gdGhlIHN0cmluZ2lmeUNhbGxiYWNrXG4gICAgICAgICAgICAgICAgLy8gbm93IHdlIG5lZWQgdG8gY29udmVydCB0aG9zZSBiYWNrIHRvIFNldFxuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGV4cHIuc2VhcmNoVmFsKSkge1xuICAgICAgICAgICAgICAgICAgICBleHByLnNlYXJjaFZhbCA9IG5ldyBTZXQoZXhwci5zZWFyY2hWYWwpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cHIuc2VhcmNoVmFsID0gZXhwci5zZWFyY2hWYWwgJiYgKGRhdGFUeXBlID09PSAnZGF0ZScgfHwgZGF0YVR5cGUgPT09ICdkYXRlVGltZScpID8gbmV3IERhdGUoRGF0ZS5wYXJzZShleHByLnNlYXJjaFZhbCkpIDogZXhwci5zZWFyY2hWYWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGV4cHIuY29uZGl0aW9uID0gdGhpcy5nZW5lcmF0ZUZpbHRlcmluZ0NvbmRpdGlvbihkYXRhVHlwZSwgZXhwci5jb25kaXRpb24ubmFtZSk7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbnNUcmVlLmZpbHRlcmluZ09wZXJhbmRzLnB1c2goZXhwcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXhwcmVzc2lvbnNUcmVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGZpbHRlcmluZyBsb2dpYyBmdW5jdGlvbiBmb3IgYSBnaXZlbiBkYXRhVHlwZSBhbmQgY29uZGl0aW9uIChjb250YWlucywgZ3JlYXRlclRoYW4sIGV0Yy4pXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUZpbHRlcmluZ0NvbmRpdGlvbihkYXRhVHlwZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBJRmlsdGVyaW5nT3BlcmF0aW9uIHtcbiAgICAgICAgbGV0IGZpbHRlcnM7XG4gICAgICAgIHN3aXRjaCAoZGF0YVR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLkJvb2xlYW46XG4gICAgICAgICAgICAgICAgZmlsdGVycyA9IElneEJvb2xlYW5GaWx0ZXJpbmdPcGVyYW5kLmluc3RhbmNlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5OdW1iZXI6XG4gICAgICAgICAgICAgICAgZmlsdGVycyA9IElneE51bWJlckZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLkRhdGU6XG4gICAgICAgICAgICAgICAgZmlsdGVycyA9IElneERhdGVGaWx0ZXJpbmdPcGVyYW5kLmluc3RhbmNlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlVGltZTpcbiAgICAgICAgICAgICAgICBmaWx0ZXJzID0gSWd4RGF0ZVRpbWVGaWx0ZXJpbmdPcGVyYW5kLmluc3RhbmNlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5TdHJpbmc6XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGZpbHRlcnMgPSBJZ3hTdHJpbmdGaWx0ZXJpbmdPcGVyYW5kLmluc3RhbmNlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbHRlcnMuY29uZGl0aW9uKG5hbWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RyaW5naWZ5Q2FsbGJhY2soa2V5OiBzdHJpbmcsIHZhbDogYW55KSB7XG4gICAgICAgIGlmIChrZXkgPT09ICdzZWFyY2hWYWwnICYmIHZhbCBpbnN0YW5jZW9mIFNldCkge1xuICAgICAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odmFsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RmVhdHVyZShrZXk6IHN0cmluZyk6IEZlYXR1cmUge1xuICAgICAgICBjb25zdCBmZWF0dXJlOiBGZWF0dXJlID0gdGhpcy5GRUFUVVJFU1trZXldO1xuICAgICAgICByZXR1cm4gZmVhdHVyZTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5ATmdNb2R1bGUoe1xuICAgIGRlY2xhcmF0aW9uczogW0lneEdyaWRTdGF0ZURpcmVjdGl2ZV0sXG4gICAgZXhwb3J0czogW0lneEdyaWRTdGF0ZURpcmVjdGl2ZV1cbn0pXG5leHBvcnQgY2xhc3MgSWd4R3JpZFN0YXRlTW9kdWxlIHsgfVxuIl19
@@ -33,7 +33,7 @@ export class IgxGridSummaryService {
33
33
  this.removeSummaries(rowID);
34
34
  }
35
35
  if (args.rowID !== undefined && args.rowID !== null) {
36
- let columnName = args.cellID ? this.grid.columnList.find(col => col.index === args.cellID.columnID).field : undefined;
36
+ let columnName = args.cellID ? this.grid.columns.find(col => col.index === args.cellID.columnID).field : undefined;
37
37
  if (columnName && this.grid.rowEditable) {
38
38
  return;
39
39
  }
@@ -90,7 +90,7 @@ export class IgxGridSummaryService {
90
90
  return this.summaryHeight = 0;
91
91
  }
92
92
  let maxSummaryLength = 0;
93
- this.grid.columnList.filter((col) => col.hasSummary && !col.hidden).forEach((column) => {
93
+ this.grid.columns.filter((col) => col.hasSummary && !col.hidden).forEach((column) => {
94
94
  const getCurrentSummaryColumn = column.summaries.operate([], [], column.field).length;
95
95
  if (getCurrentSummaryColumn) {
96
96
  if (maxSummaryLength < getCurrentSummaryColumn) {
@@ -111,7 +111,7 @@ export class IgxGridSummaryService {
111
111
  if (!this.hasSummarizedColumns || !data) {
112
112
  return rowSummaries;
113
113
  }
114
- this.grid.columnList.filter(col => col.hasSummary).forEach((column) => {
114
+ this.grid.columns.filter(col => col.hasSummary).forEach((column) => {
115
115
  if (!rowSummaries.get(column.field)) {
116
116
  const summaryResult = column.summaries.operate(data.map(r => resolveNestedPath(r, column.field)), data, column.field, this.grid.locale, column.pipeArgs);
117
117
  rowSummaries.set(column.field, summaryResult);
@@ -144,7 +144,7 @@ export class IgxGridSummaryService {
144
144
  this.groupingExpressions = groupingArgs.expressions.map(record => record.fieldName);
145
145
  }
146
146
  get hasSummarizedColumns() {
147
- const summarizedColumns = this.grid.columnList.filter(col => col.hasSummary && !col.hidden);
147
+ const summarizedColumns = this.grid.columns.filter(col => col.hasSummary && !col.hidden);
148
148
  return summarizedColumns.length > 0;
149
149
  }
150
150
  deleteSummaryCache(id, columnName) {
@@ -231,4 +231,4 @@ IgxGridSummaryService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0"
231
231
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: IgxGridSummaryService, decorators: [{
232
232
  type: Injectable
233
233
  }] });
234
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1zdW1tYXJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvc3VtbWFyaWVzL2dyaWQtc3VtbWFyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFMUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUFHakUsY0FBYztBQUVkLE1BQU0sT0FBTyxxQkFBcUI7SUFEbEM7UUFHVyxrQkFBYSxHQUFHLG9CQUFvQixDQUFDO1FBQ3JDLGtCQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLHVCQUFrQixHQUFHLENBQUMsQ0FBQztRQUN2Qix3QkFBbUIsR0FBRyxFQUFFLENBQUM7UUFDekIsc0JBQWlCLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBRXJCLG9CQUFlLEdBQW9DLElBQUksR0FBRyxFQUEyQyxDQUFDO0tBeU9uSDtJQXZPVSxvQkFBb0I7UUFDdkIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVNLGlCQUFpQixDQUFDLElBQUs7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFO1lBQzVCLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDUCxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzdCLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFF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QUFFLENBQUM7YUFDNUI7U0FDSjthQUFNO1lBQ0gsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3BFLElBQUksUUFBUSxLQUFLLGNBQWMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDeEMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3pCLE9BQU87YUFDVjtZQUNELFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNoRCxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRTtvQkFDeEMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO3dCQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztxQkFDbkM7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVELElBQVksVUFBVTtRQUNsQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsS0FBSyxlQUFlLENBQUM7SUFDN0UsQ0FBQztJQUVELElBQVksa0JBQWtCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLHVCQUF1QixDQUFDO0lBQ3JGLENBQUM7O2tIQWhQUSxxQkFBcUI7c0hBQXJCLHFCQUFxQjsyRkFBckIscUJBQXFCO2tCQURqQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJZ3hTdW1tYXJ5UmVzdWx0IH0gZnJvbSAnLi9ncmlkLXN1bW1hcnknO1xuaW1wb3J0IHsgRGF0YVV0aWwgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS11dGlsJztcbmltcG9ydCB7IGNsb25lQXJyYXksIHJlc29sdmVOZXN0ZWRQYXRoIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBHcmlkVHlwZSwgRmxhdEdyaWRUeXBlLCBUcmVlR3JpZFR5cGUgfSBmcm9tICcuLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuXG4vKiogQGhpZGRlbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIElneEdyaWRTdW1tYXJ5U2VydmljZSB7XG4gICAgcHVibGljIGdyaWQ6IEdyaWRUeXBlO1xuICAgIHB1YmxpYyByb290U3VtbWFyeUlEID0gJ2lneEdyaWRSb290U3VtbWFyeSc7XG4gICAgcHVibGljIHN1bW1hcnlIZWlnaHQgPSAwO1xuICAgIHB1YmxpYyBtYXhTdW1tYXJpZXNMZW5naHQgPSAwO1xuICAgIHB1YmxpYyBncm91cGluZ0V4cHJlc3Npb25zID0gW107XG4gICAgcHVibGljIHJldHJpZ2dlclJvb3RQaXBlID0gMDtcbiAgICBwdWJsaWMgZGVsZXRlT3BlcmF0aW9uID0gZmFsc2U7XG5cbiAgICBwcm90ZWN0ZWQgc3VtbWFyeUNhY2hlTWFwOiBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBhbnlbXT4+ID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIElneFN1bW1hcnlSZXN1bHRbXT4+KCk7XG5cbiAgICBwdWJsaWMgcmVjYWxjdWxhdGVTdW1tYXJpZXMoKSB7XG4gICAgICAgIHRoaXMucmVzZXRTdW1tYXJ5SGVpZ2h0KCk7XG4gICAgICAgIHRoaXMuZ3JpZC5ub3RpZnlDaGFuZ2VzKHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhclN1bW1hcnlDYWNoZShhcmdzPykge1xuICAgICAgICBpZiAoIXRoaXMuc3VtbWFyeUNhY2hlTWFwLnNpemUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFyZ3MpIHtcbiAgICAgICAgICAgIHRoaXMuc3VtbWFyeUNhY2hlTWFwLmNsZWFyKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkICYmIHRoaXMuZ3JpZC5yb290U3VtbWFyaWVzRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmV0cmlnZ2VyUm9vdFBpcGUrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJncy5kYXRhKSB7XG4gICAgICAgICAgICBjb25zdCByb3dJRCA9IHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID8gYXJncy5kYXRhW3RoaXMuZ3JpZC5wcmltYXJ5S2V5XSA6IGFyZ3MuZGF0YTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlU3VtbWFyaWVzKHJvd0lEKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJncy5yb3dJRCAhPT0gdW5kZWZpbmVkICYmIGFyZ3Mucm93SUQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxldCBjb2x1bW5OYW1lID0gYXJncy5jZWxsSUQgPyB0aGlzLmdyaWQuY29sdW1uTGlzdC5maW5kKGNvbCA9PiBjb2wuaW5kZXggPT09IGFyZ3MuY2VsbElELmNvbHVtbklEKS5maWVsZCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChjb2x1bW5OYW1lICYmIHRoaXMuZ3JpZC5yb3dFZGl0YWJsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgaXNHcm91cGVkQ29sdW1uID0gKHRoaXMuZ3JpZCBhcyBGbGF0R3JpZFR5cGUpLmdyb3VwaW5nRXhwcmVzc2lvbnMgJiZcbiAgICAgICAgICAgICh0aGlzLmdyaWQgYXMgRmxhdEdyaWRUeXBlKS5ncm91cGluZ0V4cHJlc3Npb25zLm1hcChleHByID0+IGV4cHIuZmllbGROYW1lKS5pbmRleE9mKGNvbHVtbk5hbWUpICE9PSAtMTtcbiAgICAgICAgICAgIGlmIChjb2x1bW5OYW1lICYmIGlzR3JvdXBlZENvbHVtbiApIHtcbiAgICAgICAgICAgICAgICBjb2x1bW5OYW1lID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZW1vdmVTdW1tYXJpZXMoYXJncy5yb3dJRCwgY29sdW1uTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlU3VtbWFyaWVzKHJvd0lELCBjb2x1bW5OYW1lPykge1xuICAgICAgICB0aGlzLmRlbGV0ZVN1bW1hcnlDYWNoZSh0aGlzLnJvb3RTdW1tYXJ5SUQsIGNvbHVtbk5hbWUpO1xuICAgICAgICBpZiAodGhpcy5zdW1tYXJ5Q2FjaGVNYXAuc2l6ZSA9PT0gMSAmJiB0aGlzLnN1bW1hcnlDYWNoZU1hcC5oYXModGhpcy5yb290U3VtbWFyeUlEKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzVHJlZUdyaWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQgJiYgdGhpcy5kZWxldGVPcGVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZU9wZXJhdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IHRoaXMucmVtb3ZlQ2hpbGRSb3dTdW1tYXJpZXMocm93SUQsIGNvbHVtbk5hbWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3VtbWFyeUNhY2hlTWFwLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZW1vdmVBbGxUcmVlR3JpZFN1bW1hcmllcyhyb3dJRCwgY29sdW1uTmFtZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0hpZXJhcmNoaWNhbEdyaWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQgJiYgdGhpcy5kZWxldGVPcGVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZU9wZXJhdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc3VtbWFyeUNhY2hlTWFwLmNsZWFyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgIGNvbnN0IHN1bW1hcnlJZHMgPSB0aGlzLmdldFN1bW1hcnlJRChyb3dJRCwgKHRoaXMuZ3JpZCBhcyBGbGF0R3JpZFR5cGUpLmdyb3VwaW5nRXhwcmVzc2lvbnMpO1xuICAgICAgICAgICBzdW1tYXJ5SWRzLmZvckVhY2goaWQgPT4ge1xuICAgICAgICAgICAgICAgdGhpcy5kZWxldGVTdW1tYXJ5Q2FjaGUoaWQsIGNvbHVtbk5hbWUpO1xuICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVTdW1tYXJpZXNDYWNoZVBlckNvbHVtbihjb2x1bW5OYW1lKSB7XG4gICAgICAgIHRoaXMuc3VtbWFyeUNhY2hlTWFwLmZvckVhY2goKGNhY2hlKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2FjaGUuZ2V0KGNvbHVtbk5hbWUpKSB7XG4gICAgICAgICAgICAgICAgY2FjaGUuZGVsZXRlKGNvbHVtbk5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5yb290U3VtbWFyaWVzRW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5yZXRyaWdnZXJSb290UGlwZSsrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNhbGNNYXhTdW1tYXJ5SGVpZ2h0KCkge1xuICAgICAgICBpZiAodGhpcy5zdW1tYXJ5SGVpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdW1tYXJ5SGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5ncmlkLmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN1bW1hcnlIZWlnaHQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGxldCBtYXhTdW1tYXJ5TGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy5ncmlkLmNvbHVtbkxpc3QuZmlsdGVyKChjb2wpID0+IGNvbC5oYXNTdW1tYXJ5ICYmICFjb2wuaGlkZGVuKS5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdldEN1cnJlbnRTdW1tYXJ5Q29sdW1uID0gY29sdW1uLnN1bW1hcmllcy5vcGVyYXRlKFtdLCBbXSwgY29sdW1uLmZpZWxkKS5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoZ2V0Q3VycmVudFN1bW1hcnlDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICBpZiAobWF4U3VtbWFyeUxlbmd0aCA8IGdldEN1cnJlbnRTdW1tYXJ5Q29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgIG1heFN1bW1hcnlMZW5ndGggPSBnZXRDdXJyZW50U3VtbWFyeUNvbHVtbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm1heFN1bW1hcmllc0xlbmdodCA9IG1heFN1bW1hcnlMZW5ndGg7XG4gICAgICAgIHRoaXMuc3VtbWFyeUhlaWdodCA9ICBtYXhTdW1tYXJ5TGVuZ3RoICogdGhpcy5ncmlkLmRlZmF1bHRTdW1tYXJ5SGVpZ2h0O1xuICAgICAgICByZXR1cm4gdGhpcy5zdW1tYXJ5SGVpZ2h0O1xuICAgIH1cblxuICAgIHB1YmxpYyBjYWxjdWxhdGVTdW1tYXJpZXMocm93SUQsIGRhdGEpIHtcbiAgICAgICAgbGV0IHJvd1N1bW1hcmllcyA9IHRoaXMuc3VtbWFyeUNhY2hlTWFwLmdldChyb3dJRCk7XG4gICAgICAgIGlmICghcm93U3VtbWFyaWVzKSB7XG4gICAgICAgICAgICByb3dTdW1tYXJpZXMgPSBuZXcgTWFwPHN0cmluZywgSWd4U3VtbWFyeVJlc3VsdFtdPigpO1xuICAgICAgICAgICAgdGhpcy5zdW1tYXJ5Q2FjaGVNYXAuc2V0KHJvd0lELCByb3dTdW1tYXJpZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5oYXNTdW1tYXJpemVkQ29sdW1ucyB8fCAhZGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuIHJvd1N1bW1hcmllcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyaWQuY29sdW1uTGlzdC5maWx0ZXIoY29sID0+IGNvbC5oYXNTdW1tYXJ5KS5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGlmICghcm93U3VtbWFyaWVzLmdldChjb2x1bW4uZmllbGQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3VtbWFyeVJlc3VsdCA9IGNvbHVtbi5zdW1tYXJpZXMub3BlcmF0ZShkYXRhLm1hcChyID0+IHJlc29sdmVOZXN0ZWRQYXRoKHIsIGNvbHVtbi5maWVsZCkpLFxuICAgICAgICAgICAgICAgICAgICBkYXRhLCBjb2x1bW4uZmllbGQsIHRoaXMuZ3JpZC5sb2NhbGUsIGNvbHVtbi5waXBlQXJncyk7XG4gICAgICAgICAgICAgICAgcm93U3VtbWFyaWVzLnNldChjb2x1bW4uZmllbGQsIHN1bW1hcnlSZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJvd1N1bW1hcmllcztcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzZXRTdW1tYXJ5SGVpZ2h0KCkge1xuICAgICAgICB0aGlzLnN1bW1hcnlIZWlnaHQgPSAwO1xuICAgICAgICB0aGlzLmdyaWQuc3VtbWFyeVBpcGVUcmlnZ2VyKys7XG4gICAgICAgIGlmICh0aGlzLmdyaWQucm9vdFN1bW1hcmllc0VuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmV0cmlnZ2VyUm9vdFBpcGUrKztcbiAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gdGhpcy5ncmlkLm5vdGlmeUNoYW5nZXModHJ1ZSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZVN1bW1hcnlDYWNoZShncm91cGluZ0FyZ3MpIHtcbiAgICAgICAgaWYgKHRoaXMuc3VtbWFyeUNhY2hlTWFwLnNpemUgPT09IDAgfHwgIXRoaXMuaGFzU3VtbWFyaXplZENvbHVtbnMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ncm91cGluZ0V4cHJlc3Npb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5ncm91cGluZ0V4cHJlc3Npb25zID0gZ3JvdXBpbmdBcmdzLmV4cHJlc3Npb25zLm1hcChyZWNvcmQgPT4gcmVjb3JkLmZpZWxkTmFtZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdyb3VwaW5nQXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBpbmdFeHByZXNzaW9ucyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5jbGVhclN1bW1hcnlDYWNoZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29tcGFyZUdyb3VwaW5nRXhwcmVzc2lvbnModGhpcy5ncm91cGluZ0V4cHJlc3Npb25zLCBncm91cGluZ0FyZ3MpO1xuICAgICAgICB0aGlzLmdyb3VwaW5nRXhwcmVzc2lvbnMgPSBncm91cGluZ0FyZ3MuZXhwcmVzc2lvbnMubWFwKHJlY29yZCA9PiByZWNvcmQuZmllbGROYW1lKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc1N1bW1hcml6ZWRDb2x1bW5zKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBzdW1tYXJpemVkQ29sdW1ucyA9IHRoaXMuZ3JpZC5jb2x1bW5MaXN0LmZpbHRlcihjb2wgPT4gY29sLmhhc1N1bW1hcnkgJiYgIWNvbC5oaWRkZW4pO1xuICAgICAgICByZXR1cm4gc3VtbWFyaXplZENvbHVtbnMubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlbGV0ZVN1bW1hcnlDYWNoZShpZCwgY29sdW1uTmFtZSkge1xuICAgICAgICBpZiAodGhpcy5zdW1tYXJ5Q2FjaGVNYXAuZ2V0KGlkKSkge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyaW5nQXBwbGllZCA9IGNvbHVtbk5hbWUgJiYgdGhpcy5ncmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLmZpbHRlcmluZ09wZXJhbmRzLm1hcCgoZXhwcikgPT4gZXhwci5maWVsZE5hbWUpLmluZGV4T2YoY29sdW1uTmFtZSkgIT09IC0xO1xuICAgICAgICAgICAgaWYgKGNvbHVtbk5hbWUgJiYgdGhpcy5zdW1tYXJ5Q2FjaGVNYXAuZ2V0KGlkKS5nZXQoY29sdW1uTmFtZSkgJiYgIWZpbHRlcmluZ0FwcGxpZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1bW1hcnlDYWNoZU1hcC5nZXQoaWQpLmRlbGV0ZShjb2x1bW5OYW1lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdW1tYXJ5Q2FjaGVNYXAuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpZCA9PT0gdGhpcy5yb290U3VtbWFyeUlEICYmIHRoaXMuZ3JpZC5yb290U3VtbWFyaWVzRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmV0cmlnZ2VyUm9vdFBpcGUrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U3VtbWFyeUlEKHJvd0lELCBncm91cGluZ0V4cHJlc3Npb25zKSB7XG4gICAgICAgIGlmIChncm91cGluZ0V4cHJlc3Npb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN1bW1hcnlJRHMgPSBbXTtcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLmdyaWQuZGF0YTtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZW5hYmxlZCkge1xuICAgICAgICAgICAgZGF0YSA9IERhdGFVdGlsLm1lcmdlVHJhbnNhY3Rpb25zKFxuICAgICAgICAgICAgICAgIGNsb25lQXJyYXkodGhpcy5ncmlkLmRhdGEpLFxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZ2V0QWdncmVnYXRlZENoYW5nZXModHJ1ZSksXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnByaW1hcnlLZXksXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmRhdGFDbG9uZVN0cmF0ZWd5XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvd0RhdGEgPSB0aGlzLmdyaWQucHJpbWFyeUtleSA/IGRhdGEuZmluZChyZWMgPT4gcmVjW3RoaXMuZ3JpZC5wcmltYXJ5S2V5XSA9PT0gcm93SUQpIDogcm93SUQ7XG4gICAgICAgIGxldCBpZCA9ICd7ICc7XG4gICAgICAgIGdyb3VwaW5nRXhwcmVzc2lvbnMuZm9yRWFjaChleHByID0+IHtcbiAgICAgICAgICAgIGlkICs9IGAnJHtleHByLmZpZWxkTmFtZX0nOiAnJHtyb3dEYXRhW2V4cHIuZmllbGROYW1lXX0nYDtcbiAgICAgICAgICAgICAgICBzdW1tYXJ5SURzLnB1c2goaWQuY29uY2F0KCcgfScpKTtcbiAgICAgICAgICAgICAgICBpZCArPSAnLCAnO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN1bW1hcnlJRHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVBbGxUcmVlR3JpZFN1bW1hcmllcyhyb3dJRCwgY29sdW1uTmFtZT8pIHtcbiAgICAgICAgbGV0IHJvdyA9ICh0aGlzLmdyaWQgYXMgVHJlZUdyaWRUeXBlKS5yZWNvcmRzLmdldChyb3dJRCk7XG4gICAgICAgIGlmICghcm93KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcm93ID0gcm93LmNoaWxkcmVuID8gcm93IDogcm93LnBhcmVudDtcbiAgICAgICAgd2hpbGUgKHJvdykge1xuICAgICAgICAgICAgcm93SUQgPSByb3cua2V5O1xuICAgICAgICAgICAgdGhpcy5kZWxldGVTdW1tYXJ5Q2FjaGUocm93SUQsIGNvbHVtbk5hbWUpO1xuICAgICAgICAgICAgcm93ID0gcm93LnBhcmVudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE86IHJlbW92ZSBvbmx5IGRlbGV0ZWQgcm93c1xuICAgIC8vIHByaXZhdGUgcmVtb3ZlQ2hpbGRSb3dTdW1tYXJpZXMocm93SUQsIGNvbHVtbk5hbWU/KSB7XG4gICAgLy8gfVxuXG4gICAgcHJpdmF0ZSBjb21wYXJlR3JvdXBpbmdFeHByZXNzaW9ucyhjdXJyZW50LCBncm91cGluZ0FyZ3MpIHtcbiAgICAgICAgY29uc3QgbmV3RXhwcmVzc2lvbnMgPSBncm91cGluZ0FyZ3MuZXhwcmVzc2lvbnMubWFwKHJlY29yZCA9PiByZWNvcmQuZmllbGROYW1lKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZENvbHMgPSBncm91cGluZ0FyZ3MudW5ncm91cGVkQ29sdW1ucztcbiAgICAgICAgaWYgKGN1cnJlbnQubGVuZ3RoIDw9IG5ld0V4cHJlc3Npb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgbmV3RXhwciA9IG5ld0V4cHJlc3Npb25zLnNsaWNlKDAsIGN1cnJlbnQubGVuZ3RoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnQudG9TdHJpbmcoKSAhPT0gbmV3RXhwcikge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJTdW1tYXJ5Q2FjaGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJFeHByID0gY3VycmVudC5zbGljZSgwLCBuZXdFeHByZXNzaW9ucy5sZW5ndGgpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBpZiAoY3VyckV4cHIgIT09IG5ld0V4cHJlc3Npb25zLnRvU3RyaW5nKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyU3VtbWFyeUNhY2hlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVtb3ZlZENvbHMubWFwKGNvbCA9PiBjb2wuZmllbGQpLmZvckVhY2goY29sTmFtZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdW1tYXJ5Q2FjaGVNYXAuZm9yRWFjaCgoY2FjaGUsIGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgaWYgKGlkLmluZGV4T2YoY29sTmFtZSkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VtbWFyeUNhY2hlTWFwLmRlbGV0ZShpZCk7XG4gICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBpc1RyZWVHcmlkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLm5hdGl2ZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaWd4LXRyZWUtZ3JpZCc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgaXNIaWVyYXJjaGljYWxHcmlkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLm5hdGl2ZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaWd4LWhpZXJhcmNoaWNhbC1ncmlkJztcbiAgICB9XG5cbn1cbiJdfQ==
234
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1zdW1tYXJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvc3VtbWFyaWVzL2dyaWQtc3VtbWFyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFMUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUFHakUsY0FBYztBQUVkLE1BQU0sT0FBTyxxQkFBcUI7SUFEbEM7UUFHVyxrQkFBYSxHQUFHLG9CQUFvQixDQUFDO1FBQ3JDLGtCQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLHVCQUFrQixHQUFHLENBQUMsQ0FBQztRQUN2Qix3QkFBbUIsR0FBRyxFQUFFLENBQUM7UUFDekIsc0JBQWlCLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBRXJCLG9CQUFlLEdBQW9DLElBQUksR0FBRyxFQUEyQyxDQUFDO0tBeU9uSDtJQXZPVSxvQkFBb0I7UUFDdkIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVNLGlCQUFpQixDQUFDLElBQUs7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFO1lBQzVCLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDUCxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzdCLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFF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QUFFLENBQUM7YUFDNUI7U0FDSjthQUFNO1lBQ0gsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3BFLElBQUksUUFBUSxLQUFLLGNBQWMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDeEMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3pCLE9BQU87YUFDVjtZQUNELFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNoRCxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRTtvQkFDeEMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO3dCQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztxQkFDbkM7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVELElBQVksVUFBVTtRQUNsQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsS0FBSyxlQUFlLENBQUM7SUFDN0UsQ0FBQztJQUVELElBQVksa0JBQWtCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLHVCQUF1QixDQUFDO0lBQ3JGLENBQUM7O2tIQWhQUSxxQkFBcUI7c0hBQXJCLHFCQUFxQjsyRkFBckIscUJBQXFCO2tCQURqQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJZ3hTdW1tYXJ5UmVzdWx0IH0gZnJvbSAnLi9ncmlkLXN1bW1hcnknO1xuaW1wb3J0IHsgRGF0YVV0aWwgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS11dGlsJztcbmltcG9ydCB7IGNsb25lQXJyYXksIHJlc29sdmVOZXN0ZWRQYXRoIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBHcmlkVHlwZSwgRmxhdEdyaWRUeXBlLCBUcmVlR3JpZFR5cGUgfSBmcm9tICcuLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuXG4vKiogQGhpZGRlbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIElneEdyaWRTdW1tYXJ5U2VydmljZSB7XG4gICAgcHVibGljIGdyaWQ6IEdyaWRUeXBlO1xuICAgIHB1YmxpYyByb290U3VtbWFyeUlEID0gJ2lneEdyaWRSb290U3VtbWFyeSc7XG4gICAgcHVibGljIHN1bW1hcnlIZWlnaHQgPSAwO1xuICAgIHB1YmxpYyBtYXhTdW1tYXJpZXNMZW5naHQgPSAwO1xuICAgIHB1YmxpYyBncm91cGluZ0V4cHJlc3Npb25zID0gW107XG4gICAgcHVibGljIHJldHJpZ2dlclJvb3RQaXBlID0gMDtcbiAgICBwdWJsaWMgZGVsZXRlT3BlcmF0aW9uID0gZmFsc2U7XG5cbiAgICBwcm90ZWN0ZWQgc3VtbWFyeUNhY2hlTWFwOiBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBhbnlbXT4+ID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIElneFN1bW1hcnlSZXN1bHRbXT4+KCk7XG5cbiAgICBwdWJsaWMgcmVjYWxjdWxhdGVTdW1tYXJpZXMoKSB7XG4gICAgICAgIHRoaXMucmVzZXRTdW1tYXJ5SGVpZ2h0KCk7XG4gICAgICAgIHRoaXMuZ3JpZC5ub3RpZnlDaGFuZ2VzKHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhclN1bW1hcnlDYWNoZShhcmdzPykge1xuICAgICAgICBpZiAoIXRoaXMuc3VtbWFyeUNhY2hlTWFwLnNpemUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFyZ3MpIHtcbiAgICAgICAgICAgIHRoaXMuc3VtbWFyeUNhY2hlTWFwLmNsZWFyKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkICYmIHRoaXMuZ3JpZC5yb290U3VtbWFyaWVzRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmV0cmlnZ2VyUm9vdFBpcGUrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJncy5kYXRhKSB7XG4gICAgICAgICAgICBjb25zdCByb3dJRCA9IHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID8gYXJncy5kYXRhW3RoaXMuZ3JpZC5wcmltYXJ5S2V5XSA6IGFyZ3MuZGF0YTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlU3VtbWFyaWVzKHJvd0lEKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJncy5yb3dJRCAhPT0gdW5kZWZpbmVkICYmIGFyZ3Mucm93SUQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxldCBjb2x1bW5OYW1lID0gYXJncy5jZWxsSUQgPyB0aGlzLmdyaWQuY29sdW1ucy5maW5kKGNvbCA9PiBjb2wuaW5kZXggPT09IGFyZ3MuY2VsbElELmNvbHVtbklEKS5maWVsZCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChjb2x1bW5OYW1lICYmIHRoaXMuZ3JpZC5yb3dFZGl0YWJsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgaXNHcm91cGVkQ29sdW1uID0gKHRoaXMuZ3JpZCBhcyBGbGF0R3JpZFR5cGUpLmdyb3VwaW5nRXhwcmVzc2lvbnMgJiZcbiAgICAgICAgICAgICh0aGlzLmdyaWQgYXMgRmxhdEdyaWRUeXBlKS5ncm91cGluZ0V4cHJlc3Npb25zLm1hcChleHByID0+IGV4cHIuZmllbGROYW1lKS5pbmRleE9mKGNvbHVtbk5hbWUpICE9PSAtMTtcbiAgICAgICAgICAgIGlmIChjb2x1bW5OYW1lICYmIGlzR3JvdXBlZENvbHVtbiApIHtcbiAgICAgICAgICAgICAgICBjb2x1bW5OYW1lID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZW1vdmVTdW1tYXJpZXMoYXJncy5yb3dJRCwgY29sdW1uTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlU3VtbWFyaWVzKHJvd0lELCBjb2x1bW5OYW1lPykge1xuICAgICAgICB0aGlzLmRlbGV0ZVN1bW1hcnlDYWNoZSh0aGlzLnJvb3RTdW1tYXJ5SUQsIGNvbHVtbk5hbWUpO1xuICAgICAgICBpZiAodGhpcy5zdW1tYXJ5Q2FjaGVNYXAuc2l6ZSA9PT0gMSAmJiB0aGlzLnN1bW1hcnlDYWNoZU1hcC5oYXModGhpcy5yb290U3VtbWFyeUlEKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzVHJlZUdyaWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQgJiYgdGhpcy5kZWxldGVPcGVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZU9wZXJhdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IHRoaXMucmVtb3ZlQ2hpbGRSb3dTdW1tYXJpZXMocm93SUQsIGNvbHVtbk5hbWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3VtbWFyeUNhY2hlTWFwLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZW1vdmVBbGxUcmVlR3JpZFN1bW1hcmllcyhyb3dJRCwgY29sdW1uTmFtZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0hpZXJhcmNoaWNhbEdyaWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQgJiYgdGhpcy5kZWxldGVPcGVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZU9wZXJhdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc3VtbWFyeUNhY2hlTWFwLmNsZWFyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgIGNvbnN0IHN1bW1hcnlJZHMgPSB0aGlzLmdldFN1bW1hcnlJRChyb3dJRCwgKHRoaXMuZ3JpZCBhcyBGbGF0R3JpZFR5cGUpLmdyb3VwaW5nRXhwcmVzc2lvbnMpO1xuICAgICAgICAgICBzdW1tYXJ5SWRzLmZvckVhY2goaWQgPT4ge1xuICAgICAgICAgICAgICAgdGhpcy5kZWxldGVTdW1tYXJ5Q2FjaGUoaWQsIGNvbHVtbk5hbWUpO1xuICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVTdW1tYXJpZXNDYWNoZVBlckNvbHVtbihjb2x1bW5OYW1lKSB7XG4gICAgICAgIHRoaXMuc3VtbWFyeUNhY2hlTWFwLmZvckVhY2goKGNhY2hlKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2FjaGUuZ2V0KGNvbHVtbk5hbWUpKSB7XG4gICAgICAgICAgICAgICAgY2FjaGUuZGVsZXRlKGNvbHVtbk5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5yb290U3VtbWFyaWVzRW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5yZXRyaWdnZXJSb290UGlwZSsrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNhbGNNYXhTdW1tYXJ5SGVpZ2h0KCkge1xuICAgICAgICBpZiAodGhpcy5zdW1tYXJ5SGVpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdW1tYXJ5SGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5ncmlkLmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN1bW1hcnlIZWlnaHQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGxldCBtYXhTdW1tYXJ5TGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy5ncmlkLmNvbHVtbnMuZmlsdGVyKChjb2wpID0+IGNvbC5oYXNTdW1tYXJ5ICYmICFjb2wuaGlkZGVuKS5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdldEN1cnJlbnRTdW1tYXJ5Q29sdW1uID0gY29sdW1uLnN1bW1hcmllcy5vcGVyYXRlKFtdLCBbXSwgY29sdW1uLmZpZWxkKS5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoZ2V0Q3VycmVudFN1bW1hcnlDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICBpZiAobWF4U3VtbWFyeUxlbmd0aCA8IGdldEN1cnJlbnRTdW1tYXJ5Q29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgIG1heFN1bW1hcnlMZW5ndGggPSBnZXRDdXJyZW50U3VtbWFyeUNvbHVtbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm1heFN1bW1hcmllc0xlbmdodCA9IG1heFN1bW1hcnlMZW5ndGg7XG4gICAgICAgIHRoaXMuc3VtbWFyeUhlaWdodCA9ICBtYXhTdW1tYXJ5TGVuZ3RoICogdGhpcy5ncmlkLmRlZmF1bHRTdW1tYXJ5SGVpZ2h0O1xuICAgICAgICByZXR1cm4gdGhpcy5zdW1tYXJ5SGVpZ2h0O1xuICAgIH1cblxuICAgIHB1YmxpYyBjYWxjdWxhdGVTdW1tYXJpZXMocm93SUQsIGRhdGEpIHtcbiAgICAgICAgbGV0IHJvd1N1bW1hcmllcyA9IHRoaXMuc3VtbWFyeUNhY2hlTWFwLmdldChyb3dJRCk7XG4gICAgICAgIGlmICghcm93U3VtbWFyaWVzKSB7XG4gICAgICAgICAgICByb3dTdW1tYXJpZXMgPSBuZXcgTWFwPHN0cmluZywgSWd4U3VtbWFyeVJlc3VsdFtdPigpO1xuICAgICAgICAgICAgdGhpcy5zdW1tYXJ5Q2FjaGVNYXAuc2V0KHJvd0lELCByb3dTdW1tYXJpZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5oYXNTdW1tYXJpemVkQ29sdW1ucyB8fCAhZGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuIHJvd1N1bW1hcmllcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyaWQuY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5oYXNTdW1tYXJ5KS5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGlmICghcm93U3VtbWFyaWVzLmdldChjb2x1bW4uZmllbGQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3VtbWFyeVJlc3VsdCA9IGNvbHVtbi5zdW1tYXJpZXMub3BlcmF0ZShkYXRhLm1hcChyID0+IHJlc29sdmVOZXN0ZWRQYXRoKHIsIGNvbHVtbi5maWVsZCkpLFxuICAgICAgICAgICAgICAgICAgICBkYXRhLCBjb2x1bW4uZmllbGQsIHRoaXMuZ3JpZC5sb2NhbGUsIGNvbHVtbi5waXBlQXJncyk7XG4gICAgICAgICAgICAgICAgcm93U3VtbWFyaWVzLnNldChjb2x1bW4uZmllbGQsIHN1bW1hcnlSZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJvd1N1bW1hcmllcztcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzZXRTdW1tYXJ5SGVpZ2h0KCkge1xuICAgICAgICB0aGlzLnN1bW1hcnlIZWlnaHQgPSAwO1xuICAgICAgICB0aGlzLmdyaWQuc3VtbWFyeVBpcGVUcmlnZ2VyKys7XG4gICAgICAgIGlmICh0aGlzLmdyaWQucm9vdFN1bW1hcmllc0VuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmV0cmlnZ2VyUm9vdFBpcGUrKztcbiAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gdGhpcy5ncmlkLm5vdGlmeUNoYW5nZXModHJ1ZSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZVN1bW1hcnlDYWNoZShncm91cGluZ0FyZ3MpIHtcbiAgICAgICAgaWYgKHRoaXMuc3VtbWFyeUNhY2hlTWFwLnNpemUgPT09IDAgfHwgIXRoaXMuaGFzU3VtbWFyaXplZENvbHVtbnMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ncm91cGluZ0V4cHJlc3Npb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5ncm91cGluZ0V4cHJlc3Npb25zID0gZ3JvdXBpbmdBcmdzLmV4cHJlc3Npb25zLm1hcChyZWNvcmQgPT4gcmVjb3JkLmZpZWxkTmFtZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdyb3VwaW5nQXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBpbmdFeHByZXNzaW9ucyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5jbGVhclN1bW1hcnlDYWNoZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29tcGFyZUdyb3VwaW5nRXhwcmVzc2lvbnModGhpcy5ncm91cGluZ0V4cHJlc3Npb25zLCBncm91cGluZ0FyZ3MpO1xuICAgICAgICB0aGlzLmdyb3VwaW5nRXhwcmVzc2lvbnMgPSBncm91cGluZ0FyZ3MuZXhwcmVzc2lvbnMubWFwKHJlY29yZCA9PiByZWNvcmQuZmllbGROYW1lKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc1N1bW1hcml6ZWRDb2x1bW5zKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBzdW1tYXJpemVkQ29sdW1ucyA9IHRoaXMuZ3JpZC5jb2x1bW5zLmZpbHRlcihjb2wgPT4gY29sLmhhc1N1bW1hcnkgJiYgIWNvbC5oaWRkZW4pO1xuICAgICAgICByZXR1cm4gc3VtbWFyaXplZENvbHVtbnMubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlbGV0ZVN1bW1hcnlDYWNoZShpZCwgY29sdW1uTmFtZSkge1xuICAgICAgICBpZiAodGhpcy5zdW1tYXJ5Q2FjaGVNYXAuZ2V0KGlkKSkge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyaW5nQXBwbGllZCA9IGNvbHVtbk5hbWUgJiYgdGhpcy5ncmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLmZpbHRlcmluZ09wZXJhbmRzLm1hcCgoZXhwcikgPT4gZXhwci5maWVsZE5hbWUpLmluZGV4T2YoY29sdW1uTmFtZSkgIT09IC0xO1xuICAgICAgICAgICAgaWYgKGNvbHVtbk5hbWUgJiYgdGhpcy5zdW1tYXJ5Q2FjaGVNYXAuZ2V0KGlkKS5nZXQoY29sdW1uTmFtZSkgJiYgIWZpbHRlcmluZ0FwcGxpZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1bW1hcnlDYWNoZU1hcC5nZXQoaWQpLmRlbGV0ZShjb2x1bW5OYW1lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdW1tYXJ5Q2FjaGVNYXAuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpZCA9PT0gdGhpcy5yb290U3VtbWFyeUlEICYmIHRoaXMuZ3JpZC5yb290U3VtbWFyaWVzRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmV0cmlnZ2VyUm9vdFBpcGUrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U3VtbWFyeUlEKHJvd0lELCBncm91cGluZ0V4cHJlc3Npb25zKSB7XG4gICAgICAgIGlmIChncm91cGluZ0V4cHJlc3Npb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN1bW1hcnlJRHMgPSBbXTtcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLmdyaWQuZGF0YTtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZW5hYmxlZCkge1xuICAgICAgICAgICAgZGF0YSA9IERhdGFVdGlsLm1lcmdlVHJhbnNhY3Rpb25zKFxuICAgICAgICAgICAgICAgIGNsb25lQXJyYXkodGhpcy5ncmlkLmRhdGEpLFxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZ2V0QWdncmVnYXRlZENoYW5nZXModHJ1ZSksXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnByaW1hcnlLZXksXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmRhdGFDbG9uZVN0cmF0ZWd5XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvd0RhdGEgPSB0aGlzLmdyaWQucHJpbWFyeUtleSA/IGRhdGEuZmluZChyZWMgPT4gcmVjW3RoaXMuZ3JpZC5wcmltYXJ5S2V5XSA9PT0gcm93SUQpIDogcm93SUQ7XG4gICAgICAgIGxldCBpZCA9ICd7ICc7XG4gICAgICAgIGdyb3VwaW5nRXhwcmVzc2lvbnMuZm9yRWFjaChleHByID0+IHtcbiAgICAgICAgICAgIGlkICs9IGAnJHtleHByLmZpZWxkTmFtZX0nOiAnJHtyb3dEYXRhW2V4cHIuZmllbGROYW1lXX0nYDtcbiAgICAgICAgICAgICAgICBzdW1tYXJ5SURzLnB1c2goaWQuY29uY2F0KCcgfScpKTtcbiAgICAgICAgICAgICAgICBpZCArPSAnLCAnO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN1bW1hcnlJRHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVBbGxUcmVlR3JpZFN1bW1hcmllcyhyb3dJRCwgY29sdW1uTmFtZT8pIHtcbiAgICAgICAgbGV0IHJvdyA9ICh0aGlzLmdyaWQgYXMgVHJlZUdyaWRUeXBlKS5yZWNvcmRzLmdldChyb3dJRCk7XG4gICAgICAgIGlmICghcm93KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcm93ID0gcm93LmNoaWxkcmVuID8gcm93IDogcm93LnBhcmVudDtcbiAgICAgICAgd2hpbGUgKHJvdykge1xuICAgICAgICAgICAgcm93SUQgPSByb3cua2V5O1xuICAgICAgICAgICAgdGhpcy5kZWxldGVTdW1tYXJ5Q2FjaGUocm93SUQsIGNvbHVtbk5hbWUpO1xuICAgICAgICAgICAgcm93ID0gcm93LnBhcmVudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE86IHJlbW92ZSBvbmx5IGRlbGV0ZWQgcm93c1xuICAgIC8vIHByaXZhdGUgcmVtb3ZlQ2hpbGRSb3dTdW1tYXJpZXMocm93SUQsIGNvbHVtbk5hbWU/KSB7XG4gICAgLy8gfVxuXG4gICAgcHJpdmF0ZSBjb21wYXJlR3JvdXBpbmdFeHByZXNzaW9ucyhjdXJyZW50LCBncm91cGluZ0FyZ3MpIHtcbiAgICAgICAgY29uc3QgbmV3RXhwcmVzc2lvbnMgPSBncm91cGluZ0FyZ3MuZXhwcmVzc2lvbnMubWFwKHJlY29yZCA9PiByZWNvcmQuZmllbGROYW1lKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZENvbHMgPSBncm91cGluZ0FyZ3MudW5ncm91cGVkQ29sdW1ucztcbiAgICAgICAgaWYgKGN1cnJlbnQubGVuZ3RoIDw9IG5ld0V4cHJlc3Npb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgbmV3RXhwciA9IG5ld0V4cHJlc3Npb25zLnNsaWNlKDAsIGN1cnJlbnQubGVuZ3RoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnQudG9TdHJpbmcoKSAhPT0gbmV3RXhwcikge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJTdW1tYXJ5Q2FjaGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJFeHByID0gY3VycmVudC5zbGljZSgwLCBuZXdFeHByZXNzaW9ucy5sZW5ndGgpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBpZiAoY3VyckV4cHIgIT09IG5ld0V4cHJlc3Npb25zLnRvU3RyaW5nKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyU3VtbWFyeUNhY2hlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVtb3ZlZENvbHMubWFwKGNvbCA9PiBjb2wuZmllbGQpLmZvckVhY2goY29sTmFtZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdW1tYXJ5Q2FjaGVNYXAuZm9yRWFjaCgoY2FjaGUsIGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgaWYgKGlkLmluZGV4T2YoY29sTmFtZSkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VtbWFyeUNhY2hlTWFwLmRlbGV0ZShpZCk7XG4gICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBpc1RyZWVHcmlkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLm5hdGl2ZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaWd4LXRyZWUtZ3JpZCc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgaXNIaWVyYXJjaGljYWxHcmlkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLm5hdGl2ZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaWd4LWhpZXJhcmNoaWNhbC1ncmlkJztcbiAgICB9XG5cbn1cbiJdfQ==