ontimize-web-ngx 15.2.2 → 15.3.0

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 (51) hide show
  1. package/esm2020/lib/components/o-service-base-component.class.mjs +1 -1
  2. package/esm2020/lib/components/o-service-component.class.mjs +12 -3
  3. package/esm2020/lib/components/table/column/cell-renderer/action/o-table-cell-renderer-action.component.mjs +7 -1
  4. package/esm2020/lib/components/table/column/o-column.class.mjs +4 -1
  5. package/esm2020/lib/components/table/column/o-table-column.component.mjs +1 -2
  6. package/esm2020/lib/components/table/extensions/header/table-button/o-table-button.component.mjs +10 -2
  7. package/esm2020/lib/components/table/extensions/header/table-buttons/o-table-buttons.component.mjs +3 -3
  8. package/esm2020/lib/components/table/extensions/header/table-quickfilter/o-table-quickfilter.component.mjs +3 -2
  9. package/esm2020/lib/components/table/o-table-base.class.mjs +1 -1
  10. package/esm2020/lib/components/table/o-table.component.mjs +97 -14
  11. package/esm2020/lib/components/tree/o-tree-dao.service.mjs +1 -1
  12. package/esm2020/lib/components/tree/o-tree.component.mjs +17 -24
  13. package/esm2020/lib/components/tree/o-tree.datasource.mjs +1 -1
  14. package/esm2020/lib/components/tree/tree-node/tree-node.component.mjs +27 -6
  15. package/esm2020/lib/i18n/i18n.mjs +4 -1
  16. package/esm2020/lib/interfaces/layout-manager-component.interface.mjs +1 -1
  17. package/esm2020/lib/layouts/form-layout/dialog/o-form-layout-dialog.component.mjs +5 -2
  18. package/esm2020/lib/layouts/form-layout/guards/o-form-layout-can-activate-child.guard.mjs +3 -2
  19. package/esm2020/lib/layouts/form-layout/o-form-layout-manager-base.class.mjs +1 -1
  20. package/esm2020/lib/layouts/form-layout/o-form-layout-manager.component.mjs +8 -4
  21. package/esm2020/lib/layouts/form-layout/split-pane/o-form-layout-split-pane.component.mjs +1 -1
  22. package/esm2020/lib/layouts/form-layout/tabgroup/o-form-layout-tabgroup.component.mjs +5 -2
  23. package/esm2020/lib/services/o-form-layout-manager.service.mjs +7 -1
  24. package/esm2020/lib/services/snackbar.service.mjs +1 -1
  25. package/esm2020/lib/types/form-layout-manager-context.type.mjs +2 -0
  26. package/esm2020/lib/types/table/o-table-global-config.type.mjs +1 -1
  27. package/esm2020/lib/types/tree-flat-node.type.mjs +2 -0
  28. package/esm2020/lib/util/util.mjs +8 -1
  29. package/fesm2015/ontimize-web-ngx.mjs +225 -79
  30. package/fesm2015/ontimize-web-ngx.mjs.map +1 -1
  31. package/fesm2020/ontimize-web-ngx.mjs +223 -79
  32. package/fesm2020/ontimize-web-ngx.mjs.map +1 -1
  33. package/lib/components/o-service-base-component.class.d.ts +1 -0
  34. package/lib/components/o-service-component.class.d.ts +5 -3
  35. package/lib/components/table/extensions/header/table-button/o-table-button.component.d.ts +1 -0
  36. package/lib/components/table/o-table-base.class.d.ts +13 -5
  37. package/lib/components/table/o-table.component.d.ts +11 -2
  38. package/lib/components/tree/o-tree-dao.service.d.ts +1 -1
  39. package/lib/components/tree/o-tree.component.d.ts +5 -16
  40. package/lib/components/tree/o-tree.datasource.d.ts +2 -1
  41. package/lib/components/tree/tree-node/tree-node.component.d.ts +6 -2
  42. package/lib/i18n/i18n.d.ts +3 -0
  43. package/lib/interfaces/layout-manager-component.interface.d.ts +1 -0
  44. package/lib/layouts/form-layout/o-form-layout-manager-base.class.d.ts +2 -0
  45. package/lib/layouts/form-layout/o-form-layout-manager.component.d.ts +2 -1
  46. package/lib/services/o-form-layout-manager.service.d.ts +5 -1
  47. package/lib/types/form-layout-manager-context.type.d.ts +3 -0
  48. package/lib/types/table/o-table-global-config.type.d.ts +2 -0
  49. package/lib/types/tree-flat-node.type.d.ts +14 -0
  50. package/lib/util/util.d.ts +2 -0
  51. package/package.json +1 -1
@@ -9,6 +9,7 @@ import { Codes } from '../../../util/codes';
9
9
  import { Util } from '../../../util/util';
10
10
  import { OFormLayoutManagerContentDirective } from '../directives/o-form-layout-manager-content.directive';
11
11
  import { OFormLayoutManagerBase } from '../o-form-layout-manager-base.class';
12
+ import { OFormLayoutManagerService } from '../../../services/o-form-layout-manager.service';
12
13
  import * as i0 from "@angular/core";
13
14
  import * as i1 from "@angular/common";
14
15
  import * as i2 from "@angular/flex-layout/flex";
@@ -241,7 +242,9 @@ export class OFormLayoutTabGroupComponent {
241
242
  index = this.data.findIndex((item) => Object.keys(keysValues).every(key => keysValues[key] == item.params[key]));
242
243
  }
243
244
  if (index >= 0) {
244
- let label = this.formLayoutManager.getLabelFromData(data);
245
+ const oFormLayoutManagerService = this.injector.get(OFormLayoutManagerService);
246
+ const context = oFormLayoutManagerService.context;
247
+ let label = context?.label || this.formLayoutManager.getLabelFromData(data);
245
248
  this.tabGroup.selectedIndex = (index + 1);
246
249
  label = label.length ? label : this.formLayoutManager.getLabelFromUrlParams(this.data[index].params);
247
250
  this.data[index].label = label;
@@ -382,4 +385,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
382
385
  type: ViewChildren,
383
386
  args: [OFormLayoutManagerContentDirective]
384
387
  }] } });
385
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1mb3JtLWxheW91dC10YWJncm91cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvbGF5b3V0cy9mb3JtLWxheW91dC90YWJncm91cC9vLWZvcm0tbGF5b3V0LXRhYmdyb3VwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9sYXlvdXRzL2Zvcm0tbGF5b3V0L3RhYmdyb3VwL28tZm9ybS1sYXlvdXQtdGFiZ3JvdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxFQUNOLFFBQVEsRUFFUixTQUFTLEVBQ1QsU0FBUyxFQUNULFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBcUIsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU5RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUc1RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHakUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUMzRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQ0FB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Q1k7NEZBUHpCLDRCQUE0QjtrQkFYeEMsU0FBUzsrQkFDRSx3QkFBd0IsVUFDMUIscUNBQXFDLFdBQ3BDLHNDQUFzQyxpQkFHaEMsaUJBQWlCLENBQUMsSUFBSSxRQUMvQjt3QkFDSixnQ0FBZ0MsRUFBRSxNQUFNO3FCQUN6Qzs7MEJBK0JFLE1BQU07MkJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHNCQUFzQixDQUFDOzRDQXRCM0MsV0FBVyxNQUVLLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVTtnQkFDNkIsY0FBYztzQkFBL0QsWUFBWTt1QkFBQyxrQ0FBa0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5qZWN0LFxuICBJbmplY3RvcixcbiAgT25EZXN0cm95LFxuICBRdWVyeUxpc3QsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFRhYkNoYW5nZUV2ZW50LCBNYXRUYWJHcm91cCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYnMnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEJvb2xlYW5JbnB1dENvbnZlcnRlciB9IGZyb20gJy4uLy4uLy4uL2RlY29yYXRvcnMvaW5wdXQtY29udmVydGVyJztcbmltcG9ydCB7IElMYXlvdXRNYW5hZ2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9sYXlvdXQtbWFuYWdlci1jb21wb25lbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IE9Gb3JtTGF5b3V0TWFuYWdlck1vZGUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL28tZm9ybS1sYXlvdXQtbWFuYWdlci1tb2RlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZGlhbG9nLnNlcnZpY2UnO1xuaW1wb3J0IHsgT0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50U3RhdGVDbGFzcyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3N0YXRlL28tZm9ybS1sYXlvdXQtbWFuYWdlci1jb21wb25lbnQtc3RhdGUuY2xhc3MnO1xuaW1wb3J0IHsgRm9ybUxheW91dENsb3NlRGV0YWlsT3B0aW9ucywgRm9ybUxheW91dERldGFpbENvbXBvbmVudERhdGEgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9mb3JtLWxheW91dC1kZXRhaWwtY29tcG9uZW50LWRhdGEudHlwZSc7XG5pbXBvcnQgeyBDb2RlcyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvY29kZXMnO1xuaW1wb3J0IHsgVXRpbCB9IGZyb20gJy4uLy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgeyBPRm9ybUxheW91dE1hbmFnZXJDb250ZW50RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9vLWZvcm0tbGF5b3V0LW1hbmFnZXItY29udGVudC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgT0Zvcm1MYXlvdXRNYW5hZ2VyQmFzZSB9IGZyb20gJy4uL28tZm9ybS1sYXlvdXQtbWFuYWdlci1iYXNlLmNsYXNzJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfSU5QVVRTX09fRk9STV9MQVlPVVRfVEFCR1JPVVAgPSBbXG4gICd0aXRsZScsXG4gICdvcHRpb25zJyxcbiAgJ3N0cmV0Y2hUYWJzOiBzdHJldGNoLXRhYnMnXG5dO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9PVVRQVVRTX09fRk9STV9MQVlPVVRfVEFCR1JPVVAgPSBbXG4gICdvbk1haW5UYWJTZWxlY3RlZCcsXG4gICdvblNlbGVjdGVkVGFiQ2hhbmdlJyxcbiAgJ29uQ2xvc2VUYWInXG5dO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvLWZvcm0tbGF5b3V0LXRhYmdyb3VwJyxcbiAgaW5wdXRzOiBERUZBVUxUX0lOUFVUU19PX0ZPUk1fTEFZT1VUX1RBQkdST1VQLFxuICBvdXRwdXRzOiBERUZBVUxUX09VVFBVVFNfT19GT1JNX0xBWU9VVF9UQUJHUk9VUCxcbiAgdGVtcGxhdGVVcmw6ICcuL28tZm9ybS1sYXlvdXQtdGFiZ3JvdXAuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vLWZvcm0tbGF5b3V0LXRhYmdyb3VwLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzLm8tZm9ybS1sYXlvdXQtdGFiZ3JvdXBdJzogJ3RydWUnXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgT0Zvcm1MYXlvdXRUYWJHcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIE9Gb3JtTGF5b3V0TWFuYWdlck1vZGUsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG5cbiAgcHVibGljIGRhdGE6IEZvcm1MYXlvdXREZXRhaWxDb21wb25lbnREYXRhW10gPSBbXTtcbiAgcHVibGljIHRpdGxlOiBzdHJpbmc7XG4gIHB1YmxpYyBvcHRpb25zOiBhbnk7XG4gIHB1YmxpYyBzaG93TG9hZGluZyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIHN0cmV0Y2hUYWJzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZCgndGFiR3JvdXAnKSB0YWJHcm91cDogTWF0VGFiR3JvdXA7XG4gIEBWaWV3Q2hpbGRyZW4oT0Zvcm1MYXlvdXRNYW5hZ2VyQ29udGVudERpcmVjdGl2ZSkgdGFic0RpcmVjdGl2ZXM6IFF1ZXJ5TGlzdDxPRm9ybUxheW91dE1hbmFnZXJDb250ZW50RGlyZWN0aXZlPjtcblxuICBwcm90ZWN0ZWQgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXI7XG4gIHByb3RlY3RlZCBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlO1xuXG4gIHB1YmxpYyBvbk1haW5UYWJTZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgcHVibGljIG9uU2VsZWN0ZWRUYWJDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIHB1YmxpYyBvbkNsb3NlVGFiOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIHByb3RlY3RlZCBwcmV2aW91c1NlbGVjdGVkSW5kZXg6IG51bWJlcjtcblxuICBwdWJsaWMgdXBkYXRlVGFiQ29tcG9uZW50c1N0YXRlID0gbmV3IFN1YmplY3Q8YW55PigpO1xuICBwdWJsaWMgdGFic01vZGlmaWNhdGlvbnNDYWNoZTogYW55W10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByb3RlY3RlZCBsb2NhdGlvbjogVmlld0NvbnRhaW5lclJlZixcbiAgICBwcm90ZWN0ZWQgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBASW5qZWN0KGZvcndhcmRSZWYoKCkgPT4gT0Zvcm1MYXlvdXRNYW5hZ2VyQmFzZSkpIHB1YmxpYyBmb3JtTGF5b3V0TWFuYWdlcjogT0Zvcm1MYXlvdXRNYW5hZ2VyQmFzZVxuICApIHtcbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2UgPSBpbmplY3Rvci5nZXQoRGlhbG9nU2VydmljZSk7XG4gICAgdGhpcy5yb3V0ZXIgPSB0aGlzLmluamVjdG9yLmdldChSb3V0ZXIpO1xuICB9XG5cbiAgZ2V0IHN0YXRlKCk6IE9Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudFN0YXRlQ2xhc3Mge1xuICAgIHJldHVybiB0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyLnN0YXRlO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuaW5pdGlhbGl6ZUNvbXBvbmVudFN0YXRlKCk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMudGFic0RpcmVjdGl2ZXMuY2hhbmdlcy5zdWJzY3JpYmUoY2hhbmdlcyA9PiB7XG4gICAgICBpZiAodGhpcy50YWJzRGlyZWN0aXZlcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgdGFiSXRlbSA9IHRoaXMudGFic0RpcmVjdGl2ZXMubGFzdDtcbiAgICAgICAgY29uc3QgdGFiRGF0YSA9IHRoaXMuZGF0YVt0YWJJdGVtLmluZGV4XTtcbiAgICAgICAgaWYgKHRhYkRhdGEgJiYgIXRhYkRhdGEucmVuZGVyZWQpIHtcbiAgICAgICAgICB0aGlzLmNyZWF0ZVRhYkNvbXBvbmVudCh0YWJEYXRhLCB0YWJJdGVtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbnMpIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgbWFpblRhYlRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLm9wdGlvbnMudGl0bGUgfHwgdGhpcy50aXRsZSB8fCAnTEFZT1VUX01BTkFOR0VSLk1BSU5fVEFCX0xBQkVMJyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRpc2FibGVBbmltYXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuZGlzYWJsZUFuaW1hdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaGVhZGVyUG9zaXRpb24oKSB7XG4gICAgbGV0IGhlYWRlclBvc2l0aW9uO1xuICAgIGlmICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmhlYWRlclBvc2l0aW9uKSB7XG4gICAgICBoZWFkZXJQb3NpdGlvbiA9IHRoaXMub3B0aW9ucy5oZWFkZXJQb3NpdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIGhlYWRlclBvc2l0aW9uO1xuICB9XG5cbiAgcHVibGljIGdldCBjb2xvcigpIHtcbiAgICBsZXQgY29sb3I7XG4gICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuY29sb3IpIHtcbiAgICAgIGNvbG9yID0gdGhpcy5vcHRpb25zLmNvbG9yO1xuICAgIH1cbiAgICByZXR1cm4gY29sb3I7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGJhY2tncm91bmRDb2xvcigpIHtcbiAgICBsZXQgYmFja2dyb3VuZENvbG9yO1xuICAgIGlmICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmJhY2tncm91bmRDb2xvcikge1xuICAgICAgYmFja2dyb3VuZENvbG9yID0gdGhpcy5vcHRpb25zLmJhY2tncm91bmRDb2xvcjtcbiAgICB9XG4gICAgcmV0dXJuIGJhY2tncm91bmRDb2xvcjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdGVtcGxhdGVNYXRUYWJMYWJlbCgpIHtcbiAgICBsZXQgdGVtcGxhdGVNYXRUYWJMYWJlbDtcbiAgICBpZiAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy50ZW1wbGF0ZU1hdFRhYkxhYmVsKSB7XG4gICAgICB0ZW1wbGF0ZU1hdFRhYkxhYmVsID0gdGhpcy5vcHRpb25zLnRlbXBsYXRlTWF0VGFiTGFiZWw7XG4gICAgfVxuICAgIHJldHVybiB0ZW1wbGF0ZU1hdFRhYkxhYmVsO1xuICB9XG5cbiAgcHVibGljIGdldCBpY29uKCkge1xuICAgIGxldCBpY29uO1xuICAgIGlmICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmljb24pIHtcbiAgICAgIGljb24gPSB0aGlzLm9wdGlvbnMuaWNvbjtcbiAgICB9XG4gICAgcmV0dXJuIGljb247XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzSWNvblBvc2l0aW9uTGVmdCgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5pY29uUG9zaXRpb24gPT09ICdsZWZ0JztcbiAgfVxuXG4gIGdldCBtYXhUYWJzKCk6IG51bWJlciB7XG4gICAgbGV0IG1heFRhYnM7XG4gICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMubWF4VGFicykge1xuICAgICAgbWF4VGFicyA9IHRoaXMub3B0aW9ucy5tYXhUYWJzO1xuICAgIH1cbiAgICByZXR1cm4gbWF4VGFicztcbiAgfVxuXG4gIGFkZFRhYihjb21wRGF0YTogRm9ybUxheW91dERldGFpbENvbXBvbmVudERhdGEpIHtcbiAgICBsZXQgYWRkTmV3Q29tcCA9IHRydWU7XG4gICAgaWYgKGNvbXBEYXRhLmluc2VydGlvbk1vZGUpIHtcbiAgICAgIGNvbnN0IGFscmVhZHlFeGlzdGluZ0luc2VydGlvblRhYiA9IFV0aWwuaXNEZWZpbmVkKHRoaXMuZGF0YS5maW5kKGl0ZW0gPT4gaXRlbS5pbnNlcnRpb25Nb2RlKSk7XG4gICAgICBhZGROZXdDb21wID0gIWFscmVhZHlFeGlzdGluZ0luc2VydGlvblRhYjtcbiAgICB9XG4gICAgY29uc3QgbmV3Q29tcFBhcmFtcyA9IGNvbXBEYXRhLnBhcmFtcztcbiAgICBpZiAoYWRkTmV3Q29tcCkge1xuICAgICAgdGhpcy5kYXRhLmZvckVhY2goY29tcCA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJQYXJhbXMgPSBjb21wLnBhcmFtcyB8fCB7fTtcbiAgICAgICAgbGV0IHNvbWVEaWZmUGFyYW1zID0gdHJ1ZTtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKGN1cnJQYXJhbXMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBzb21lRGlmZlBhcmFtcyA9IE9iamVjdC5rZXlzKGN1cnJQYXJhbXMpLnNvbWUoa2V5ID0+IGN1cnJQYXJhbXNba2V5XSAhPSBuZXdDb21wUGFyYW1zW2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIGFkZE5ld0NvbXAgPSBhZGROZXdDb21wICYmIHNvbWVEaWZmUGFyYW1zO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChhZGROZXdDb21wKSB7XG4gICAgICB0aGlzLmRhdGEucHVzaChjb21wRGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVsb2FkVGFiKGNvbXBEYXRhKTtcbiAgICB9XG4gIH1cblxuICByZWxvYWRUYWIoY29tcERhdGE6IEZvcm1MYXlvdXREZXRhaWxDb21wb25lbnREYXRhKSB7XG4gICAgbGV0IGNvbXBJbmRleCA9IC0xO1xuICAgIGNvbnN0IGNvbXBQYXJhbXMgPSBjb21wRGF0YS5wYXJhbXM7XG4gICAgdGhpcy5kYXRhLmZvckVhY2goKGNvbXAsIGkpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJQYXJhbXMgPSBjb21wLnBhcmFtcyB8fCB7fTtcbiAgICAgIGNvbnN0IHNhbWVQYXJhbXMgPSBVdGlsLmlzRXF1aXZhbGVudChjdXJyUGFyYW1zLCBjb21wUGFyYW1zKTtcbiAgICAgIGlmIChzYW1lUGFyYW1zKSB7XG4gICAgICAgIGNvbXBJbmRleCA9IGk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKGNvbXBJbmRleCA+PSAwKSB7XG4gICAgICB0aGlzLnRhYkdyb3VwLnNlbGVjdGVkSW5kZXggPSAoY29tcEluZGV4ICsgMSk7XG4gICAgfVxuICB9XG5cbiAgb25UYWJTZWxlY3RDaGFuZ2UoYXJnOiBNYXRUYWJDaGFuZ2VFdmVudCkge1xuICAgIGlmICh0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyICYmIHRoaXMudGFiR3JvdXAuc2VsZWN0ZWRJbmRleCA9PT0gMCkge1xuICAgICAgdGhpcy5mb3JtTGF5b3V0TWFuYWdlci51cGRhdGVJZk5lZWRlZCgpO1xuICAgICAgdGhpcy5vbk1haW5UYWJTZWxlY3RlZC5lbWl0KCk7XG4gICAgfVxuICAgIGNvbnN0IGlzTG9hZGluZyA9IHRoaXMuc2hvd0xvYWRpbmcuZ2V0VmFsdWUoKTtcbiAgICBpZiAoaXNMb2FkaW5nICYmIFV0aWwuaXNEZWZpbmVkKHRoaXMuc3RhdGUpICYmIFV0aWwuaXNEZWZpbmVkKHRoaXMuc3RhdGUudGFic0RhdGEpICYmXG4gICAgICBhcmcuaW5kZXggPT09IHRoaXMuc3RhdGUudGFic0RhdGEubGVuZ3RoIC0gMSkge1xuICAgICAgLy8gdGhpcyBpcyBvbmx5IHRyaWdnZXJlZCBvbmNlIHdoZW4gYWxsIHRhYnMgYXJlIGxvYWRlZFxuICAgICAgdGhpcy50YWJHcm91cC5zZWxlY3RlZEluZGV4ID0gdGhpcy5zdGF0ZS5zZWxlY3RlZEluZGV4O1xuICAgICAgdGhpcy5zaG93TG9hZGluZy5uZXh0KGZhbHNlKTtcbiAgICB9XG4gICAgaWYgKCFpc0xvYWRpbmcpIHtcbiAgICAgIHRoaXMub25TZWxlY3RlZFRhYkNoYW5nZS5lbWl0KHtcbiAgICAgICAgZGF0YTogdGhpcy5kYXRhW3RoaXMudGFiR3JvdXAuc2VsZWN0ZWRJbmRleCAtIDFdLFxuICAgICAgICBpbmRleDogdGhpcy50YWJHcm91cC5zZWxlY3RlZEluZGV4LFxuICAgICAgICBwcmV2aW91c0luZGV4OiB0aGlzLnByZXZpb3VzU2VsZWN0ZWRJbmRleFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMucHJldmlvdXNTZWxlY3RlZEluZGV4ID0gdGhpcy50YWJHcm91cC5zZWxlY3RlZEluZGV4O1xuICB9XG5cbiAgY2xvc2VUYWIoaW5kZXg6IG51bWJlciwgb3B0aW9ucz86IEZvcm1MYXlvdXRDbG9zZURldGFpbE9wdGlvbnMpIHtcbiAgICBpZiAoIXRoaXMuZm9ybUxheW91dE1hbmFnZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGFiRGF0YSA9IHRoaXMuZGF0YVtpbmRleF07XG4gICAgY29uc3Qgb25DbG9zZVRhYkFjY2VwdGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChvbkNsb3NlVGFiQWNjZXB0ZWQuYXNPYnNlcnZhYmxlKCkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICBpZiAocmVzKSB7XG4gICAgICAgIHRoaXMuZGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB0aGlzLm9uQ2xvc2VUYWIuZW1pdCh7XG4gICAgICAgICAgZGF0YTogdGFiRGF0YSxcbiAgICAgICAgICBpbmRleDogaW5kZXggKyAxXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pKTtcblxuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0YWJEYXRhKSAmJiB0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyLmhhc1RvQ29uZmlybUV4aXQodGFiRGF0YSwgb3B0aW9ucykpIHtcbiAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKCdDT05GSVJNJywgJ01FU1NBR0VTLkZPUk1fQ0hBTkdFU19XSUxMX0JFX0xPU1QnKS50aGVuKHJlcyA9PiB7XG4gICAgICAgIG9uQ2xvc2VUYWJBY2NlcHRlZC5lbWl0KHJlcyk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb25DbG9zZVRhYkFjY2VwdGVkLmVtaXQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlVGFiQ29tcG9uZW50KHRhYkRhdGE6IEZvcm1MYXlvdXREZXRhaWxDb21wb25lbnREYXRhLCBjb250ZW50OiBPRm9ybUxheW91dE1hbmFnZXJDb250ZW50RGlyZWN0aXZlKSB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gdGFiRGF0YS5jb21wb25lbnQ7XG4gICAgY29uc3Qgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZiA9IGNvbnRlbnQudmlld0NvbnRhaW5lclJlZjtcbiAgICB2aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG4gICAgdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50KTtcbiAgICB0YWJEYXRhLnJlbmRlcmVkID0gdHJ1ZTtcbiAgfVxuXG4gIGdldEZvcm1DYWNoZURhdGEoKTogRm9ybUxheW91dERldGFpbENvbXBvbmVudERhdGEge1xuICAgIHJldHVybiB0aGlzLmRhdGEubGVuZ3RoID4gMCA/IHRoaXMuZGF0YVt0aGlzLmRhdGEubGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRSb3V0ZU9mQWN0aXZlSXRlbSgpOiBhbnlbXSB7XG4gICAgY29uc3Qgcm91dGUgPSBbXTtcbiAgICBpZiAodGhpcy5kYXRhLmxlbmd0aCAmJiB0aGlzLnRhYkdyb3VwLnNlbGVjdGVkSW5kZXggPiAwKSB7XG4gICAgICBjb25zdCB1cmxTZWdtZW50cyA9IHRoaXMuZGF0YVt0aGlzLnRhYkdyb3VwLnNlbGVjdGVkSW5kZXggLSAxXS51cmxTZWdtZW50cyB8fCBbXTtcbiAgICAgIHVybFNlZ21lbnRzLmZvckVhY2goKHNlZ21lbnQpID0+IHtcbiAgICAgICAgcm91dGUucHVzaChzZWdtZW50LnBhdGgpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcm91dGU7XG4gICAgfVxuICAgIHJldHVybiByb3V0ZTtcbiAgfVxuXG4gIHNldE1vZGlmaWVkU3RhdGUoZm9ybUF0dHI6IHN0cmluZywgbW9kaWZpZWQ6IGJvb2xlYW4sIGNvbmZpcm1FeGl0OiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMudGFiR3JvdXAuc2VsZWN0ZWRJbmRleCA+IDApIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkRGF0YSA9IHRoaXMuZGF0YVt0aGlzLnRhYkdyb3VwLnNlbGVjdGVkSW5kZXggLSAxXTtcbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChzZWxlY3RlZERhdGEpKSB7XG4gICAgICAgIHNlbGVjdGVkRGF0YS5pbm5lckZvcm1zSW5mb1tmb3JtQXR0cl0gPSB7XG4gICAgICAgICAgbW9kaWZpZWQ6IG1vZGlmaWVkLFxuICAgICAgICAgIGNvbmZpcm1PbkV4aXQ6IGNvbmZpcm1FeGl0XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlTmF2aWdhdGlvbihkYXRhOiBhbnksIGtleXNWYWx1ZXM6IGFueSwgaW5zZXJ0aW9uTW9kZT86IGJvb2xlYW4pIHtcbiAgICBsZXQgaW5kZXg7XG4gICAgaWYgKGluc2VydGlvbk1vZGUpIHtcbiAgICAgIGluZGV4ID0gdGhpcy5kYXRhLmZpbmRJbmRleCgoaXRlbTogYW55KSA9PiBpdGVtLmluc2VydGlvbk1vZGUgIT09IGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5kZXggPSB0aGlzLmRhdGEuZmluZEluZGV4KChpdGVtOiBhbnkpID0+IE9iamVjdC5rZXlzKGtleXNWYWx1ZXMpLmV2ZXJ5KGtleSA9PiBrZXlzVmFsdWVzW2tleV0gPT0gaXRlbS5wYXJhbXNba2V5XSkpO1xuICAgIH1cbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgbGV0IGxhYmVsID0gdGhpcy5mb3JtTGF5b3V0TWFuYWdlci5nZXRMYWJlbEZyb21EYXRhKGRhdGEpO1xuICAgICAgdGhpcy50YWJHcm91cC5zZWxlY3RlZEluZGV4ID0gKGluZGV4ICsgMSk7XG4gICAgICBsYWJlbCA9IGxhYmVsLmxlbmd0aCA/IGxhYmVsIDogdGhpcy5mb3JtTGF5b3V0TWFuYWdlci5nZXRMYWJlbEZyb21VcmxQYXJhbXModGhpcy5kYXRhW2luZGV4XS5wYXJhbXMpO1xuICAgICAgdGhpcy5kYXRhW2luZGV4XS5sYWJlbCA9IGxhYmVsO1xuICAgICAgdGhpcy5kYXRhW2luZGV4XS5pbnNlcnRpb25Nb2RlID0gaW5zZXJ0aW9uTW9kZTtcbiAgICAgIGlmIChPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuZGF0YVtpbmRleF0uZm9ybURhdGFCeUxhYmVsQ29sdW1ucyA9IHRoaXMuZm9ybUxheW91dE1hbmFnZXIuZ2V0Rm9ybURhdGFGcm9tTGFiZWxDb2x1bW5zKGRhdGEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUFjdGl2ZURhdGEoZGF0YTogYW55KSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnRhYkdyb3VwLnNlbGVjdGVkSW5kZXggLSAxO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLmRhdGFbaW5kZXhdKSkge1xuICAgICAgdGhpcy5kYXRhW2luZGV4XSA9IE9iamVjdC5hc3NpZ24odGhpcy5kYXRhW2luZGV4XSwgZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RGF0YVRvU3RvcmUoKTogYW55IHtcbiAgICAvLyBJc3N1ZSAjODg0IGF2b2lkIHN0b3JpbmcgaW5zZXJ0aW9uTW9kZSB0YWJzXG4gICAgY29uc3QgdGFic0RhdGEgPSB0aGlzLmRhdGFcbiAgICAgIC5maWx0ZXIoKGRhdGE6IEZvcm1MYXlvdXREZXRhaWxDb21wb25lbnREYXRhKSA9PiAhZGF0YS5pbnNlcnRpb25Nb2RlKVxuICAgICAgLm1hcCgoZGF0YTogRm9ybUxheW91dERldGFpbENvbXBvbmVudERhdGEpID0+ICh7XG4gICAgICAgIHBhcmFtczogZGF0YS5wYXJhbXMsXG4gICAgICAgIHF1ZXJ5UGFyYW1zOiBkYXRhLnF1ZXJ5UGFyYW1zLFxuICAgICAgICB1cmxTZWdtZW50czogZGF0YS51cmxTZWdtZW50cyxcbiAgICAgICAgdXJsOiBkYXRhLnVybCxcbiAgICAgICAgbGFiZWw6IGRhdGEubGFiZWwsXG4gICAgICAgIGluc2VydGlvbk1vZGU6IGRhdGEuaW5zZXJ0aW9uTW9kZVxuICAgICAgfSkpO1xuICAgIHJldHVybiB7XG4gICAgICB0YWJzRGF0YTogdGFic0RhdGEsXG4gICAgICBzZWxlY3RlZEluZGV4OiB0aGlzLnRhYkdyb3VwLnNlbGVjdGVkSW5kZXhcbiAgICB9O1xuICB9XG5cbiAgaW5pdGlhbGl6ZUNvbXBvbmVudFN0YXRlKCkge1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQodGhpcy5zdGF0ZSkgfHwgIVV0aWwuaXNEZWZpbmVkKHRoaXMuc3RhdGUudGFic0RhdGEpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSXNzdWUgIzg4NCBlbnN1cmluZyB0aGF0IGEgaW5zZXJ0aW9uIG1vZGUgdGFiIHRoYXQgbWlnaHQgYmUgcHJldmlvdXNseSBzdG9yZWQgd29udCBiZSBjcmVhdGVkXG4gICAgdGhpcy5zdGF0ZS50YWJzRGF0YSA9IHRoaXMuc3RhdGUudGFic0RhdGEuZmlsdGVyKHRhYkRhdGEgPT4gIXRhYkRhdGEuaW5zZXJ0aW9uTW9kZSlcblxuICAgIGlmICh0aGlzLnN0YXRlLnRhYnNEYXRhLmxlbmd0aCA+PSAxICYmICh0aGlzLnN0YXRlLnRhYnNEYXRhWzBdLnVybCB8fCAnJykubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zaG93TG9hZGluZy5uZXh0KHRydWUpO1xuICAgICAgY29uc3QgZXh0cmFzID0ge307XG4gICAgICBleHRyYXNbQ29kZXMuUVVFUllfUEFSQU1TXSA9IHRoaXMuc3RhdGUudGFic0RhdGFbMF0ucXVlcnlQYXJhbXM7XG4gICAgICBleHRyYXNbQ29kZXMuUVVFUllfUEFSQU1TXVtDb2Rlcy5JTlNFUlRJT05fTU9ERV0gPSBgJHt0aGlzLnN0YXRlLnRhYnNEYXRhWzBdLmluc2VydGlvbk1vZGV9YFxuICAgICAgaWYgKHRoaXMuZm9ybUxheW91dE1hbmFnZXIpIHtcbiAgICAgICAgdGhpcy5mb3JtTGF5b3V0TWFuYWdlci5zZXRBc0FjdGl2ZUZvcm1MYXlvdXRNYW5hZ2VyKCk7XG4gICAgICB9XG4gICAgICAvLyBUcmlnZ2VyaW5nIGZpcnN0IHRhYiBuYXZpZ2F0aW9uXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5zdGF0ZS50YWJzRGF0YVswXS51cmxdLCBleHRyYXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5kYXRhWzBdICYmIHRoaXMuZGF0YVswXS5jb21wb25lbnQgJiYgdGhpcy5zdGF0ZS50YWJzRGF0YS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgLy8gVHJpZ2dlcmluZyByZXN0IG9mIHRoZSB0YWJzIGNyZWF0aW9uXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZVRhYnNGcm9tU3RhdGUoKTtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNob3dMb2FkaW5nLm5leHQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlVGFic0Zyb21TdGF0ZSgpIHtcbiAgICBjb25zdCB0YWJDb21wb25lbnQgPSB0aGlzLmRhdGFbMF0uY29tcG9uZW50O1xuICAgIC8vIHNraXBwaW5nIGZpcnN0IGVsZW1lbnQgKGNyZWF0ZWQgaW4gaW5pdGlhbGl6ZUNvbXBvbmVudFN0YXRlKVxuICAgIGNvbnN0IHN0YXRlVGFic0RhdGEgPSB0aGlzLnN0YXRlLnRhYnNEYXRhLnNsaWNlKDEpO1xuICAgIGlmIChzdGF0ZVRhYnNEYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgIHN0YXRlVGFic0RhdGEuZm9yRWFjaCgodGFiRGF0YTogYW55KSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld0RldGFpbERhdGEgPSB0aGlzLmNyZWF0ZURldGFpbENvbXBvbmVudCh0YWJDb21wb25lbnQsIHRhYkRhdGEpO1xuICAgICAgICAgIHRoaXMuZGF0YS5wdXNoKG5ld0RldGFpbERhdGEpO1xuICAgICAgICB9LCAwKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3dMb2FkaW5nLm5leHQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVEZXRhaWxDb21wb25lbnQoY29tcG9uZW50OiBhbnksIHBhcmFtc09iajogYW55KSB7XG4gICAgY29uc3QgbmV3RGV0YWlsQ29tcDogRm9ybUxheW91dERldGFpbENvbXBvbmVudERhdGEgPSB7XG4gICAgICBwYXJhbXM6IHBhcmFtc09iai5wYXJhbXMsXG4gICAgICBxdWVyeVBhcmFtczogcGFyYW1zT2JqLnF1ZXJ5UGFyYW1zLFxuICAgICAgdXJsU2VnbWVudHM6IHBhcmFtc09iai51cmxTZWdtZW50cyxcbiAgICAgIGNvbXBvbmVudDogY29tcG9uZW50LFxuICAgICAgdXJsOiBwYXJhbXNPYmoudXJsLFxuICAgICAgaWQ6IFV0aWwucmFuZG9tTnVtYmVyKCkudG9TdHJpbmcoKSxcbiAgICAgIGxhYmVsOiBwYXJhbXNPYmoubGFiZWwsXG4gICAgICBpbm5lckZvcm1zSW5mbzoge31cbiAgICB9O1xuICAgIHJldHVybiBuZXdEZXRhaWxDb21wO1xuICB9XG5cbiAgZ2V0UGFyYW1zKCk6IGFueSB7XG4gICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKHRoaXMuZGF0YVswXSkgPyB0aGlzLmRhdGFbMF0ucGFyYW1zIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgaXNNYWluQ29tcG9uZW50KGNvbXA6IElMYXlvdXRNYW5hZ2VyQ29tcG9uZW50KTogYm9vbGVhbiB7XG4gICAgY29uc3QgZmlyc3RUYWIgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnbWF0LXRhYi1ib2R5JylbMF07XG4gICAgcmV0dXJuIGZpcnN0VGFiICYmIGNvbXAuZWxlbWVudFJlZiAmJiBmaXJzdFRhYi5jb250YWlucyhjb21wLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBvcGVuRGV0YWlsKGRldGFpbDogRm9ybUxheW91dERldGFpbENvbXBvbmVudERhdGEpIHtcbiAgICB0aGlzLmFkZFRhYihkZXRhaWwpO1xuICB9XG5cbiAgY2xvc2VEZXRhaWwob3B0aW9ucz86IEZvcm1MYXlvdXRDbG9zZURldGFpbE9wdGlvbnMpIHtcbiAgICB0aGlzLmNsb3NlVGFiKHRoaXMudGFiR3JvdXAuc2VsZWN0ZWRJbmRleCAtIDEsIG9wdGlvbnMpO1xuICB9XG5cbiAgY2FuQWRkRGV0YWlsQ29tcG9uZW50KCk6IGJvb2xlYW4ge1xuICAgIC8vIFRoZSBtYXggdGFicyBudW1iZXIgaW5jbHVkZXMgdGhlIG1haW4gdGFiXG4gICAgY29uc3QgbWF4UmVhY2hlZCA9ICh0aGlzLmRhdGEubGVuZ3RoICsgMSkgPj0gdGhpcy5tYXhUYWJzO1xuICAgIGlmIChtYXhSZWFjaGVkKSB7XG4gICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuaW5mbygnSU5GTycsICdMQVlPVVRfTUFOQU5HRVIuTUFYX1RBQlNfTlVNQkVSX1JFQUNIRUQnKVxuICAgIH1cbiAgICByZXR1cm4gIW1heFJlYWNoZWQ7XG4gIH1cblxuICBpc1RhYkRhdGFNb2RpZmllZCh0YWJEYXRhOiBGb3JtTGF5b3V0RGV0YWlsQ29tcG9uZW50RGF0YSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0YWJEYXRhLmlubmVyRm9ybXNJbmZvKS5zb21lKGZvcm1BdHRyID0+IHRhYkRhdGEuaW5uZXJGb3Jtc0luZm9bZm9ybUF0dHJdLm1vZGlmaWVkKTtcbiAgfVxuXG4gIGNsb3NlRGV0YWlscyhkZXRhaWxzS2V5c0RhdGE6IGFueVtdID0gW10sIG9wdGlvbnM/OiBGb3JtTGF5b3V0Q2xvc2VEZXRhaWxPcHRpb25zKSB7XG4gICAgZGV0YWlsc0tleXNEYXRhLmZvckVhY2goKGRldGFpbERhdGEpID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5kYXRhLmZpbmRJbmRleCgoaXRlbSkgPT4gVXRpbC5pc0VxdWl2YWxlbnQoZGV0YWlsRGF0YSwgaXRlbS5wYXJhbXMgfHwge30pKTtcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgdGhpcy5jbG9zZVRhYihpbmRleCwgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXRJZE9mQWN0aXZlSXRlbSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGFbdGhpcy5kYXRhLmxlbmd0aCAtIDFdID8gdGhpcy5kYXRhW3RoaXMuZGF0YS5sZW5ndGggLSAxXS5pZCA6IHRoaXMuZGF0YS5sZW5ndGgudG9TdHJpbmcoKTtcbiAgfVxufVxuIiwiPG1hdC10YWItZ3JvdXAgI3RhYkdyb3VwIG9UYWJHcm91cD1cIm9udGltaXplXCIgZnhGaWxsIChzZWxlY3RlZFRhYkNoYW5nZSk9XCJvblRhYlNlbGVjdENoYW5nZSgkZXZlbnQpXCIgW2NvbG9yXT1cImNvbG9yXCJcbiAgW2JhY2tncm91bmRDb2xvcl09XCJiYWNrZ3JvdW5kQ29sb3JcIiBbaGVhZGVyUG9zaXRpb25dPVwiaGVhZGVyUG9zaXRpb25cIiBbQC5kaXNhYmxlZF09XCJkaXNhYmxlQW5pbWF0aW9uXCIgW21hdC1zdHJldGNoLXRhYnNdPVwic3RyZXRjaFRhYnNcIj5cbiAgPG1hdC10YWIgbGFiZWw9XCJ7eyBtYWluVGFiVGl0bGUgfCBvVHJhbnNsYXRlIH19XCI+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiICpuZ0Zvcj1cImxldCB0YWJEYXRhIG9mIGRhdGE7IGxldCBpID0gaW5kZXhcIj5cbiAgICA8bmctdGVtcGxhdGUgbWF0LXRhYi1sYWJlbD5cbiAgICAgIDxzcGFuIGNsYXNzPVwidGFiLWxhYmVsXCIgW2NsYXNzLm1vZGlmaWVkXT1cImlzVGFiRGF0YU1vZGlmaWVkKHRhYkRhdGEpXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpY29uICYmIGlzSWNvblBvc2l0aW9uTGVmdFwiPlxuICAgICAgICAgIDxtYXQtaWNvbj57eyBpY29uIH19PC9tYXQtaWNvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0ZW1wbGF0ZU1hdFRhYkxhYmVsICYmIHRhYkRhdGEuZm9ybURhdGFCeUxhYmVsQ29sdW1ucyAmJiAhdGFiRGF0YS5pbnNlcnRpb25Nb2RlIFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZU1hdFRhYkxhYmVsO2NvbnRleHQ6eyRpbXBsaWNpdDp0YWJEYXRhLmZvcm1EYXRhQnlMYWJlbENvbHVtbnN9XCI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXRlbXBsYXRlTWF0VGFiTGFiZWwgfHwgdGFiRGF0YS5pbnNlcnRpb25Nb2RlXCI+XG4gICAgICAgICAge3sgdGFiRGF0YS5sYWJlbCB9fVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImljb24gJiYgIWlzSWNvblBvc2l0aW9uTGVmdFwiPlxuICAgICAgICAgIDxtYXQtaWNvbj57eyBpY29uIH19PC9tYXQtaWNvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZ3JhZGllbnQtbGF5ZXJcIj48L3NwYW4+XG4gICAgICA8L3NwYW4+XG4gICAgICA8bWF0LWljb24gKGNsaWNrKT1cImNsb3NlVGFiKGkpXCIgc3ZnSWNvbj1cIm9udGltaXplOmNsb3NlXCI+PC9tYXQtaWNvbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSBvLWZvcm0tbGF5b3V0LW1hbmFnZXItY29udGVudCBbaW5kZXhdPVwiaVwiPjwvbmctdGVtcGxhdGU+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cbjxkaXYgKm5nSWY9XCJzaG93TG9hZGluZyB8IGFzeW5jXCIgY2xhc3M9XCJzcGlubmVyLWNvbnRhaW5lclwiIGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIj5cbiAgPG1hdC1wcm9ncmVzcy1zcGlubmVyIG1vZGU9XCJpbmRldGVybWluYXRlXCIgc3Ryb2tlV2lkdGg9XCIzXCI+PC9tYXQtcHJvZ3Jlc3Mtc3Bpbm5lcj5cbjwvZGl2PlxuIl19
388
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1mb3JtLWxheW91dC10YWJncm91cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvbGF5b3V0cy9mb3JtLWxheW91dC90YWJncm91cC9vLWZvcm0tbGF5b3V0LXRhYmdyb3VwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9sYXlvdXRzL2Zvcm0tbGF5b3V0L3RhYmdyb3VwL28tZm9ybS1sYXlvdXQtdGFiZ3JvdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxFQUNOLFFBQVEsRUFFUixTQUFTLEVBQ1QsU0FBUyxFQUNULFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBcUIsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU5RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUc1RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHakUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUMzRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQ0FB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SUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1RyxDQUFDOzswSEF2WVUsNEJBQTRCLG9HQTZCN0IsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHNCQUFzQixDQUFDOzhHQTdCdkMsNEJBQTRCLG1kQVV6QixrQ0FBa0MsZ0RDaEVsRCxtckRBK0JBO0FENkJFO0lBQUMscUJBQXFCLEVBQUU7O2lFQUNZOzRGQVB6Qiw0QkFBNEI7a0JBWHhDLFNBQVM7K0JBQ0Usd0JBQXdCLFVBQzFCLHFDQUFxQyxXQUNwQyxzQ0FBc0MsaUJBR2hDLGlCQUFpQixDQUFDLElBQUksUUFDL0I7d0JBQ0osZ0NBQWdDLEVBQUUsTUFBTTtxQkFDekM7OzBCQStCRSxNQUFNOzJCQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQzs0Q0F0QjNDLFdBQVcsTUFFSyxRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVU7Z0JBQzZCLGNBQWM7c0JBQS9ELFlBQVk7dUJBQUMsa0NBQWtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEluamVjdCxcbiAgSW5qZWN0b3IsXG4gIE9uRGVzdHJveSxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRUYWJDaGFuZ2VFdmVudCwgTWF0VGFiR3JvdXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJzJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBCb29sZWFuSW5wdXRDb252ZXJ0ZXIgfSBmcm9tICcuLi8uLi8uLi9kZWNvcmF0b3JzL2lucHV0LWNvbnZlcnRlcic7XG5pbXBvcnQgeyBJTGF5b3V0TWFuYWdlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvbGF5b3V0LW1hbmFnZXItY29tcG9uZW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBPRm9ybUxheW91dE1hbmFnZXJNb2RlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9vLWZvcm0tbGF5b3V0LW1hbmFnZXItbW9kZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlJztcbmltcG9ydCB7IE9Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudFN0YXRlQ2xhc3MgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zdGF0ZS9vLWZvcm0tbGF5b3V0LW1hbmFnZXItY29tcG9uZW50LXN0YXRlLmNsYXNzJztcbmltcG9ydCB7IEZvcm1MYXlvdXRDbG9zZURldGFpbE9wdGlvbnMsIEZvcm1MYXlvdXREZXRhaWxDb21wb25lbnREYXRhIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvZm9ybS1sYXlvdXQtZGV0YWlsLWNvbXBvbmVudC1kYXRhLnR5cGUnO1xuaW1wb3J0IHsgQ29kZXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL2NvZGVzJztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi8uLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHsgT0Zvcm1MYXlvdXRNYW5hZ2VyQ29udGVudERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvby1mb3JtLWxheW91dC1tYW5hZ2VyLWNvbnRlbnQuZGlyZWN0aXZlJztcbmltcG9ydCB7IE9Gb3JtTGF5b3V0TWFuYWdlckJhc2UgfSBmcm9tICcuLi9vLWZvcm0tbGF5b3V0LW1hbmFnZXItYmFzZS5jbGFzcyc7XG5pbXBvcnQgeyBPRm9ybUxheW91dE1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvby1mb3JtLWxheW91dC1tYW5hZ2VyLnNlcnZpY2UnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9JTlBVVFNfT19GT1JNX0xBWU9VVF9UQUJHUk9VUCA9IFtcbiAgJ3RpdGxlJyxcbiAgJ29wdGlvbnMnLFxuICAnc3RyZXRjaFRhYnM6IHN0cmV0Y2gtdGFicydcbl07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVFBVVFNfT19GT1JNX0xBWU9VVF9UQUJHUk9VUCA9IFtcbiAgJ29uTWFpblRhYlNlbGVjdGVkJyxcbiAgJ29uU2VsZWN0ZWRUYWJDaGFuZ2UnLFxuICAnb25DbG9zZVRhYidcbl07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ28tZm9ybS1sYXlvdXQtdGFiZ3JvdXAnLFxuICBpbnB1dHM6IERFRkFVTFRfSU5QVVRTX09fRk9STV9MQVlPVVRfVEFCR1JPVVAsXG4gIG91dHB1dHM6IERFRkFVTFRfT1VUUFVUU19PX0ZPUk1fTEFZT1VUX1RBQkdST1VQLFxuICB0ZW1wbGF0ZVVybDogJy4vby1mb3JtLWxheW91dC10YWJncm91cC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL28tZm9ybS1sYXlvdXQtdGFiZ3JvdXAuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaG9zdDoge1xuICAgICdbY2xhc3Muby1mb3JtLWxheW91dC10YWJncm91cF0nOiAndHJ1ZSdcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBPRm9ybUxheW91dFRhYkdyb3VwQ29tcG9uZW50IGltcGxlbWVudHMgT0Zvcm1MYXlvdXRNYW5hZ2VyTW9kZSwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblxuICBwdWJsaWMgZGF0YTogRm9ybUxheW91dERldGFpbENvbXBvbmVudERhdGFbXSA9IFtdO1xuICBwdWJsaWMgdGl0bGU6IHN0cmluZztcbiAgcHVibGljIG9wdGlvbnM6IGFueTtcbiAgcHVibGljIHNob3dMb2FkaW5nID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwdWJsaWMgc3RyZXRjaFRhYnM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAVmlld0NoaWxkKCd0YWJHcm91cCcpIHRhYkdyb3VwOiBNYXRUYWJHcm91cDtcbiAgQFZpZXdDaGlsZHJlbihPRm9ybUxheW91dE1hbmFnZXJDb250ZW50RGlyZWN0aXZlKSB0YWJzRGlyZWN0aXZlczogUXVlcnlMaXN0PE9Gb3JtTGF5b3V0TWFuYWdlckNvbnRlbnREaXJlY3RpdmU+O1xuXG4gIHByb3RlY3RlZCBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcjtcbiAgcHJvdGVjdGVkIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2U7XG5cbiAgcHVibGljIG9uTWFpblRhYlNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBwdWJsaWMgb25TZWxlY3RlZFRhYkNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgcHVibGljIG9uQ2xvc2VUYWI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgcHJvdGVjdGVkIHByZXZpb3VzU2VsZWN0ZWRJbmRleDogbnVtYmVyO1xuXG4gIHB1YmxpYyB1cGRhdGVUYWJDb21wb25lbnRzU3RhdGUgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gIHB1YmxpYyB0YWJzTW9kaWZpY2F0aW9uc0NhY2hlOiBhbnlbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJvdGVjdGVkIGxvY2F0aW9uOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByb3RlY3RlZCBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIEBJbmplY3QoZm9yd2FyZFJlZigoKSA9PiBPRm9ybUxheW91dE1hbmFnZXJCYXNlKSkgcHVibGljIGZvcm1MYXlvdXRNYW5hZ2VyOiBPRm9ybUxheW91dE1hbmFnZXJCYXNlXG4gICkge1xuICAgIHRoaXMuZGlhbG9nU2VydmljZSA9IGluamVjdG9yLmdldChEaWFsb2dTZXJ2aWNlKTtcbiAgICB0aGlzLnJvdXRlciA9IHRoaXMuaW5qZWN0b3IuZ2V0KFJvdXRlcik7XG4gIH1cblxuICBnZXQgc3RhdGUoKTogT0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50U3RhdGVDbGFzcyB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUxheW91dE1hbmFnZXIuc3RhdGU7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5pbml0aWFsaXplQ29tcG9uZW50U3RhdGUoKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy50YWJzRGlyZWN0aXZlcy5jaGFuZ2VzLnN1YnNjcmliZShjaGFuZ2VzID0+IHtcbiAgICAgIGlmICh0aGlzLnRhYnNEaXJlY3RpdmVzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCB0YWJJdGVtID0gdGhpcy50YWJzRGlyZWN0aXZlcy5sYXN0O1xuICAgICAgICBjb25zdCB0YWJEYXRhID0gdGhpcy5kYXRhW3RhYkl0ZW0uaW5kZXhdO1xuICAgICAgICBpZiAodGFiRGF0YSAmJiAhdGFiRGF0YS5yZW5kZXJlZCkge1xuICAgICAgICAgIHRoaXMuY3JlYXRlVGFiQ29tcG9uZW50KHRhYkRhdGEsIHRhYkl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9ucykge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBtYWluVGFiVGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKHRoaXMub3B0aW9ucy50aXRsZSB8fCB0aGlzLnRpdGxlIHx8ICdMQVlPVVRfTUFOQU5HRVIuTUFJTl9UQUJfTEFCRUwnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGlzYWJsZUFuaW1hdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5kaXNhYmxlQW5pbWF0aW9uO1xuICB9XG5cbiAgcHVibGljIGdldCBoZWFkZXJQb3NpdGlvbigpIHtcbiAgICBsZXQgaGVhZGVyUG9zaXRpb247XG4gICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaGVhZGVyUG9zaXRpb24pIHtcbiAgICAgIGhlYWRlclBvc2l0aW9uID0gdGhpcy5vcHRpb25zLmhlYWRlclBvc2l0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gaGVhZGVyUG9zaXRpb247XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvbG9yKCkge1xuICAgIGxldCBjb2xvcjtcbiAgICBpZiAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5jb2xvcikge1xuICAgICAgY29sb3IgPSB0aGlzLm9wdGlvbnMuY29sb3I7XG4gICAgfVxuICAgIHJldHVybiBjb2xvcjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYmFja2dyb3VuZENvbG9yKCkge1xuICAgIGxldCBiYWNrZ3JvdW5kQ29sb3I7XG4gICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuYmFja2dyb3VuZENvbG9yKSB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLm9wdGlvbnMuYmFja2dyb3VuZENvbG9yO1xuICAgIH1cbiAgICByZXR1cm4gYmFja2dyb3VuZENvbG9yO1xuICB9XG5cbiAgcHVibGljIGdldCB0ZW1wbGF0ZU1hdFRhYkxhYmVsKCkge1xuICAgIGxldCB0ZW1wbGF0ZU1hdFRhYkxhYmVsO1xuICAgIGlmICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnRlbXBsYXRlTWF0VGFiTGFiZWwpIHtcbiAgICAgIHRlbXBsYXRlTWF0VGFiTGFiZWwgPSB0aGlzLm9wdGlvbnMudGVtcGxhdGVNYXRUYWJMYWJlbDtcbiAgICB9XG4gICAgcmV0dXJuIHRlbXBsYXRlTWF0VGFiTGFiZWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGljb24oKSB7XG4gICAgbGV0IGljb247XG4gICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaWNvbikge1xuICAgICAgaWNvbiA9IHRoaXMub3B0aW9ucy5pY29uO1xuICAgIH1cbiAgICByZXR1cm4gaWNvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNJY29uUG9zaXRpb25MZWZ0KCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmljb25Qb3NpdGlvbiA9PT0gJ2xlZnQnO1xuICB9XG5cbiAgZ2V0IG1heFRhYnMoKTogbnVtYmVyIHtcbiAgICBsZXQgbWF4VGFicztcbiAgICBpZiAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5tYXhUYWJzKSB7XG4gICAgICBtYXhUYWJzID0gdGhpcy5vcHRpb25zLm1heFRhYnM7XG4gICAgfVxuICAgIHJldHVybiBtYXhUYWJzO1xuICB9XG5cbiAgYWRkVGFiKGNvbXBEYXRhOiBGb3JtTGF5b3V0RGV0YWlsQ29tcG9uZW50RGF0YSkge1xuICAgIGxldCBhZGROZXdDb21wID0gdHJ1ZTtcbiAgICBpZiAoY29tcERhdGEuaW5zZXJ0aW9uTW9kZSkge1xuICAgICAgY29uc3QgYWxyZWFkeUV4aXN0aW5nSW5zZXJ0aW9uVGFiID0gVXRpbC5pc0RlZmluZWQodGhpcy5kYXRhLmZpbmQoaXRlbSA9PiBpdGVtLmluc2VydGlvbk1vZGUpKTtcbiAgICAgIGFkZE5ld0NvbXAgPSAhYWxyZWFkeUV4aXN0aW5nSW5zZXJ0aW9uVGFiO1xuICAgIH1cbiAgICBjb25zdCBuZXdDb21wUGFyYW1zID0gY29tcERhdGEucGFyYW1zO1xuICAgIGlmIChhZGROZXdDb21wKSB7XG4gICAgICB0aGlzLmRhdGEuZm9yRWFjaChjb21wID0+IHtcbiAgICAgICAgY29uc3QgY3VyclBhcmFtcyA9IGNvbXAucGFyYW1zIHx8IHt9O1xuICAgICAgICBsZXQgc29tZURpZmZQYXJhbXMgPSB0cnVlO1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMoY3VyclBhcmFtcykubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHNvbWVEaWZmUGFyYW1zID0gT2JqZWN0LmtleXMoY3VyclBhcmFtcykuc29tZShrZXkgPT4gY3VyclBhcmFtc1trZXldICE9IG5ld0NvbXBQYXJhbXNba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkTmV3Q29tcCA9IGFkZE5ld0NvbXAgJiYgc29tZURpZmZQYXJhbXM7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGFkZE5ld0NvbXApIHtcbiAgICAgIHRoaXMuZGF0YS5wdXNoKGNvbXBEYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZWxvYWRUYWIoY29tcERhdGEpO1xuICAgIH1cbiAgfVxuXG4gIHJlbG9hZFRhYihjb21wRGF0YTogRm9ybUxheW91dERldGFpbENvbXBvbmVudERhdGEpIHtcbiAgICBsZXQgY29tcEluZGV4ID0gLTE7XG4gICAgY29uc3QgY29tcFBhcmFtcyA9IGNvbXBEYXRhLnBhcmFtcztcbiAgICB0aGlzLmRhdGEuZm9yRWFjaCgoY29tcCwgaSkgPT4ge1xuICAgICAgY29uc3QgY3VyclBhcmFtcyA9IGNvbXAucGFyYW1zIHx8IHt9O1xuICAgICAgY29uc3Qgc2FtZVBhcmFtcyA9IFV0aWwuaXNFcXVpdmFsZW50KGN1cnJQYXJhbXMsIGNvbXBQYXJhbXMpO1xuICAgICAgaWYgKHNhbWVQYXJhbXMpIHtcbiAgICAgICAgY29tcEluZGV4ID0gaTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoY29tcEluZGV4ID49IDApIHtcbiAgICAgIHRoaXMudGFiR3JvdXAuc2VsZWN0ZWRJbmRleCA9IChjb21wSW5kZXggKyAxKTtcbiAgICB9XG4gIH1cblxuICBvblRhYlNlbGVjdENoYW5nZShhcmc6IE1hdFRhYkNoYW5nZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMuZm9ybUxheW91dE1hbmFnZXIgJiYgdGhpcy50YWJHcm91cC5zZWxlY3RlZEluZGV4ID09PSAwKSB7XG4gICAgICB0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyLnVwZGF0ZUlmTmVlZGVkKCk7XG4gICAgICB0aGlzLm9uTWFpblRhYlNlbGVjdGVkLmVtaXQoKTtcbiAgICB9XG4gICAgY29uc3QgaXNMb2FkaW5nID0gdGhpcy5zaG93TG9hZGluZy5nZXRWYWx1ZSgpO1xuICAgIGlmIChpc0xvYWRpbmcgJiYgVXRpbC5pc0RlZmluZWQodGhpcy5zdGF0ZSkgJiYgVXRpbC5pc0RlZmluZWQodGhpcy5zdGF0ZS50YWJzRGF0YSkgJiZcbiAgICAgIGFyZy5pbmRleCA9PT0gdGhpcy5zdGF0ZS50YWJzRGF0YS5sZW5ndGggLSAxKSB7XG4gICAgICAvLyB0aGlzIGlzIG9ubHkgdHJpZ2dlcmVkIG9uY2Ugd2hlbiBhbGwgdGFicyBhcmUgbG9hZGVkXG4gICAgICB0aGlzLnRhYkdyb3VwLnNlbGVjdGVkSW5kZXggPSB0aGlzLnN0YXRlLnNlbGVjdGVkSW5kZXg7XG4gICAgICB0aGlzLnNob3dMb2FkaW5nLm5leHQoZmFsc2UpO1xuICAgIH1cbiAgICBpZiAoIWlzTG9hZGluZykge1xuICAgICAgdGhpcy5vblNlbGVjdGVkVGFiQ2hhbmdlLmVtaXQoe1xuICAgICAgICBkYXRhOiB0aGlzLmRhdGFbdGhpcy50YWJHcm91cC5zZWxlY3RlZEluZGV4IC0gMV0sXG4gICAgICAgIGluZGV4OiB0aGlzLnRhYkdyb3VwLnNlbGVjdGVkSW5kZXgsXG4gICAgICAgIHByZXZpb3VzSW5kZXg6IHRoaXMucHJldmlvdXNTZWxlY3RlZEluZGV4XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5wcmV2aW91c1NlbGVjdGVkSW5kZXggPSB0aGlzLnRhYkdyb3VwLnNlbGVjdGVkSW5kZXg7XG4gIH1cblxuICBjbG9zZVRhYihpbmRleDogbnVtYmVyLCBvcHRpb25zPzogRm9ybUxheW91dENsb3NlRGV0YWlsT3B0aW9ucykge1xuICAgIGlmICghdGhpcy5mb3JtTGF5b3V0TWFuYWdlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0YWJEYXRhID0gdGhpcy5kYXRhW2luZGV4XTtcbiAgICBjb25zdCBvbkNsb3NlVGFiQWNjZXB0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKG9uQ2xvc2VUYWJBY2NlcHRlZC5hc09ic2VydmFibGUoKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgdGhpcy5kYXRhLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHRoaXMub25DbG9zZVRhYi5lbWl0KHtcbiAgICAgICAgICBkYXRhOiB0YWJEYXRhLFxuICAgICAgICAgIGluZGV4OiBpbmRleCArIDFcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkpO1xuXG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRhYkRhdGEpICYmIHRoaXMuZm9ybUxheW91dE1hbmFnZXIuaGFzVG9Db25maXJtRXhpdCh0YWJEYXRhLCBvcHRpb25zKSkge1xuICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oJ0NPTkZJUk0nLCAnTUVTU0FHRVMuRk9STV9DSEFOR0VTX1dJTExfQkVfTE9TVCcpLnRoZW4ocmVzID0+IHtcbiAgICAgICAgb25DbG9zZVRhYkFjY2VwdGVkLmVtaXQocmVzKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbkNsb3NlVGFiQWNjZXB0ZWQuZW1pdCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBjcmVhdGVUYWJDb21wb25lbnQodGFiRGF0YTogRm9ybUxheW91dERldGFpbENvbXBvbmVudERhdGEsIGNvbnRlbnQ6IE9Gb3JtTGF5b3V0TWFuYWdlckNvbnRlbnREaXJlY3RpdmUpIHtcbiAgICBjb25zdCBjb21wb25lbnQgPSB0YWJEYXRhLmNvbXBvbmVudDtcbiAgICBjb25zdCB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmID0gY29udGVudC52aWV3Q29udGFpbmVyUmVmO1xuICAgIHZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcbiAgICB2aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnQpO1xuICAgIHRhYkRhdGEucmVuZGVyZWQgPSB0cnVlO1xuICB9XG5cbiAgZ2V0Rm9ybUNhY2hlRGF0YSgpOiBGb3JtTGF5b3V0RGV0YWlsQ29tcG9uZW50RGF0YSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5sZW5ndGggPiAwID8gdGhpcy5kYXRhW3RoaXMuZGF0YS5sZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldFJvdXRlT2ZBY3RpdmVJdGVtKCk6IGFueVtdIHtcbiAgICBjb25zdCByb3V0ZSA9IFtdO1xuICAgIGlmICh0aGlzLmRhdGEubGVuZ3RoICYmIHRoaXMudGFiR3JvdXAuc2VsZWN0ZWRJbmRleCA+IDApIHtcbiAgICAgIGNvbnN0IHVybFNlZ21lbnRzID0gdGhpcy5kYXRhW3RoaXMudGFiR3JvdXAuc2VsZWN0ZWRJbmRleCAtIDFdLnVybFNlZ21lbnRzIHx8IFtdO1xuICAgICAgdXJsU2VnbWVudHMuZm9yRWFjaCgoc2VnbWVudCkgPT4ge1xuICAgICAgICByb3V0ZS5wdXNoKHNlZ21lbnQucGF0aCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByb3V0ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJvdXRlO1xuICB9XG5cbiAgc2V0TW9kaWZpZWRTdGF0ZShmb3JtQXR0cjogc3RyaW5nLCBtb2RpZmllZDogYm9vbGVhbiwgY29uZmlybUV4aXQ6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy50YWJHcm91cC5zZWxlY3RlZEluZGV4ID4gMCkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWREYXRhID0gdGhpcy5kYXRhW3RoaXMudGFiR3JvdXAuc2VsZWN0ZWRJbmRleCAtIDFdO1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKHNlbGVjdGVkRGF0YSkpIHtcbiAgICAgICAgc2VsZWN0ZWREYXRhLmlubmVyRm9ybXNJbmZvW2Zvcm1BdHRyXSA9IHtcbiAgICAgICAgICBtb2RpZmllZDogbW9kaWZpZWQsXG4gICAgICAgICAgY29uZmlybU9uRXhpdDogY29uZmlybUV4aXRcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGVOYXZpZ2F0aW9uKGRhdGE6IGFueSwga2V5c1ZhbHVlczogYW55LCBpbnNlcnRpb25Nb2RlPzogYm9vbGVhbikge1xuICAgIGxldCBpbmRleDtcbiAgICBpZiAoaW5zZXJ0aW9uTW9kZSkge1xuICAgICAgaW5kZXggPSB0aGlzLmRhdGEuZmluZEluZGV4KChpdGVtOiBhbnkpID0+IGl0ZW0uaW5zZXJ0aW9uTW9kZSAhPT0gZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbmRleCA9IHRoaXMuZGF0YS5maW5kSW5kZXgoKGl0ZW06IGFueSkgPT4gT2JqZWN0LmtleXMoa2V5c1ZhbHVlcykuZXZlcnkoa2V5ID0+IGtleXNWYWx1ZXNba2V5XSA9PSBpdGVtLnBhcmFtc1trZXldKSk7XG4gICAgfVxuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICBjb25zdCBvRm9ybUxheW91dE1hbmFnZXJTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoT0Zvcm1MYXlvdXRNYW5hZ2VyU2VydmljZSk7XG4gICAgICAvKiogSW4gY2FzZSBvZiB0aGUgdHJlZSwgdGhlIGxhYmVsIHNob3duIGluIHRoZSBkaWFsb2cgb3IgaW4gdGhlIHRhYiBpcyB0aGUgbGFiZWwgb2YgdGhlIG5vZGUgdGhhdFxuICAgICAgICogIGlzIHN0b3JlZCBpbiBvRm9ybUxheW91dE1hbmFnZXJTZXJ2aWNlLmNvbnRleHQgKi9cbiAgICAgIGNvbnN0IGNvbnRleHQgPSBvRm9ybUxheW91dE1hbmFnZXJTZXJ2aWNlLmNvbnRleHQ7XG4gICAgICBsZXQgbGFiZWwgPSBjb250ZXh0Py5sYWJlbCB8fCB0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyLmdldExhYmVsRnJvbURhdGEoZGF0YSk7XG4gICAgICB0aGlzLnRhYkdyb3VwLnNlbGVjdGVkSW5kZXggPSAoaW5kZXggKyAxKTtcbiAgICAgIGxhYmVsID0gbGFiZWwubGVuZ3RoID8gbGFiZWwgOiB0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyLmdldExhYmVsRnJvbVVybFBhcmFtcyh0aGlzLmRhdGFbaW5kZXhdLnBhcmFtcyk7XG4gICAgICB0aGlzLmRhdGFbaW5kZXhdLmxhYmVsID0gbGFiZWw7XG4gICAgICB0aGlzLmRhdGFbaW5kZXhdLmluc2VydGlvbk1vZGUgPSBpbnNlcnRpb25Nb2RlO1xuICAgICAgaWYgKE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5kYXRhW2luZGV4XS5mb3JtRGF0YUJ5TGFiZWxDb2x1bW5zID0gdGhpcy5mb3JtTGF5b3V0TWFuYWdlci5nZXRGb3JtRGF0YUZyb21MYWJlbENvbHVtbnMoZGF0YSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlQWN0aXZlRGF0YShkYXRhOiBhbnkpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMudGFiR3JvdXAuc2VsZWN0ZWRJbmRleCAtIDE7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuZGF0YVtpbmRleF0pKSB7XG4gICAgICB0aGlzLmRhdGFbaW5kZXhdID0gT2JqZWN0LmFzc2lnbih0aGlzLmRhdGFbaW5kZXhdLCBkYXRhKTtcbiAgICB9XG4gIH1cblxuICBnZXREYXRhVG9TdG9yZSgpOiBhbnkge1xuICAgIC8vIElzc3VlICM4ODQgYXZvaWQgc3RvcmluZyBpbnNlcnRpb25Nb2RlIHRhYnNcbiAgICBjb25zdCB0YWJzRGF0YSA9IHRoaXMuZGF0YVxuICAgICAgLmZpbHRlcigoZGF0YTogRm9ybUxheW91dERldGFpbENvbXBvbmVudERhdGEpID0+ICFkYXRhLmluc2VydGlvbk1vZGUpXG4gICAgICAubWFwKChkYXRhOiBGb3JtTGF5b3V0RGV0YWlsQ29tcG9uZW50RGF0YSkgPT4gKHtcbiAgICAgICAgcGFyYW1zOiBkYXRhLnBhcmFtcyxcbiAgICAgICAgcXVlcnlQYXJhbXM6IGRhdGEucXVlcnlQYXJhbXMsXG4gICAgICAgIHVybFNlZ21lbnRzOiBkYXRhLnVybFNlZ21lbnRzLFxuICAgICAgICB1cmw6IGRhdGEudXJsLFxuICAgICAgICBsYWJlbDogZGF0YS5sYWJlbCxcbiAgICAgICAgaW5zZXJ0aW9uTW9kZTogZGF0YS5pbnNlcnRpb25Nb2RlXG4gICAgICB9KSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhYnNEYXRhOiB0YWJzRGF0YSxcbiAgICAgIHNlbGVjdGVkSW5kZXg6IHRoaXMudGFiR3JvdXAuc2VsZWN0ZWRJbmRleFxuICAgIH07XG4gIH1cblxuICBpbml0aWFsaXplQ29tcG9uZW50U3RhdGUoKSB7XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZCh0aGlzLnN0YXRlKSB8fCAhVXRpbC5pc0RlZmluZWQodGhpcy5zdGF0ZS50YWJzRGF0YSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJc3N1ZSAjODg0IGVuc3VyaW5nIHRoYXQgYSBpbnNlcnRpb24gbW9kZSB0YWIgdGhhdCBtaWdodCBiZSBwcmV2aW91c2x5IHN0b3JlZCB3b250IGJlIGNyZWF0ZWRcbiAgICB0aGlzLnN0YXRlLnRhYnNEYXRhID0gdGhpcy5zdGF0ZS50YWJzRGF0YS5maWx0ZXIodGFiRGF0YSA9PiAhdGFiRGF0YS5pbnNlcnRpb25Nb2RlKVxuXG4gICAgaWYgKHRoaXMuc3RhdGUudGFic0RhdGEubGVuZ3RoID49IDEgJiYgKHRoaXMuc3RhdGUudGFic0RhdGFbMF0udXJsIHx8ICcnKS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNob3dMb2FkaW5nLm5leHQodHJ1ZSk7XG4gICAgICBjb25zdCBleHRyYXMgPSB7fTtcbiAgICAgIGV4dHJhc1tDb2Rlcy5RVUVSWV9QQVJBTVNdID0gdGhpcy5zdGF0ZS50YWJzRGF0YVswXS5xdWVyeVBhcmFtcztcbiAgICAgIGV4dHJhc1tDb2Rlcy5RVUVSWV9QQVJBTVNdW0NvZGVzLklOU0VSVElPTl9NT0RFXSA9IGAke3RoaXMuc3RhdGUudGFic0RhdGFbMF0uaW5zZXJ0aW9uTW9kZX1gXG4gICAgICBpZiAodGhpcy5mb3JtTGF5b3V0TWFuYWdlcikge1xuICAgICAgICB0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyLnNldEFzQWN0aXZlRm9ybUxheW91dE1hbmFnZXIoKTtcbiAgICAgIH1cbiAgICAgIC8vIFRyaWdnZXJpbmcgZmlyc3QgdGFiIG5hdmlnYXRpb25cbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLnN0YXRlLnRhYnNEYXRhWzBdLnVybF0sIGV4dHJhcykudGhlbigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmRhdGFbMF0gJiYgdGhpcy5kYXRhWzBdLmNvbXBvbmVudCAmJiB0aGlzLnN0YXRlLnRhYnNEYXRhLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAvLyBUcmlnZ2VyaW5nIHJlc3Qgb2YgdGhlIHRhYnMgY3JlYXRpb25cbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlVGFic0Zyb21TdGF0ZSgpO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2hvd0xvYWRpbmcubmV4dChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVUYWJzRnJvbVN0YXRlKCkge1xuICAgIGNvbnN0IHRhYkNvbXBvbmVudCA9IHRoaXMuZGF0YVswXS5jb21wb25lbnQ7XG4gICAgLy8gc2tpcHBpbmcgZmlyc3QgZWxlbWVudCAoY3JlYXRlZCBpbiBpbml0aWFsaXplQ29tcG9uZW50U3RhdGUpXG4gICAgY29uc3Qgc3RhdGVUYWJzRGF0YSA9IHRoaXMuc3RhdGUudGFic0RhdGEuc2xpY2UoMSk7XG4gICAgaWYgKHN0YXRlVGFic0RhdGEubGVuZ3RoID4gMCkge1xuICAgICAgc3RhdGVUYWJzRGF0YS5mb3JFYWNoKCh0YWJEYXRhOiBhbnkpID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3RGV0YWlsRGF0YSA9IHRoaXMuY3JlYXRlRGV0YWlsQ29tcG9uZW50KHRhYkNvbXBvbmVudCwgdGFiRGF0YSk7XG4gICAgICAgICAgdGhpcy5kYXRhLnB1c2gobmV3RGV0YWlsRGF0YSk7XG4gICAgICAgIH0sIDApO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2hvd0xvYWRpbmcubmV4dChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZURldGFpbENvbXBvbmVudChjb21wb25lbnQ6IGFueSwgcGFyYW1zT2JqOiBhbnkpIHtcbiAgICBjb25zdCBuZXdEZXRhaWxDb21wOiBGb3JtTGF5b3V0RGV0YWlsQ29tcG9uZW50RGF0YSA9IHtcbiAgICAgIHBhcmFtczogcGFyYW1zT2JqLnBhcmFtcyxcbiAgICAgIHF1ZXJ5UGFyYW1zOiBwYXJhbXNPYmoucXVlcnlQYXJhbXMsXG4gICAgICB1cmxTZWdtZW50czogcGFyYW1zT2JqLnVybFNlZ21lbnRzLFxuICAgICAgY29tcG9uZW50OiBjb21wb25lbnQsXG4gICAgICB1cmw6IHBhcmFtc09iai51cmwsXG4gICAgICBpZDogVXRpbC5yYW5kb21OdW1iZXIoKS50b1N0cmluZygpLFxuICAgICAgbGFiZWw6IHBhcmFtc09iai5sYWJlbCxcbiAgICAgIGlubmVyRm9ybXNJbmZvOiB7fVxuICAgIH07XG4gICAgcmV0dXJuIG5ld0RldGFpbENvbXA7XG4gIH1cblxuICBnZXRQYXJhbXMoKTogYW55IHtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQodGhpcy5kYXRhWzBdKSA/IHRoaXMuZGF0YVswXS5wYXJhbXMgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBpc01haW5Db21wb25lbnQoY29tcDogSUxheW91dE1hbmFnZXJDb21wb25lbnQpOiBib29sZWFuIHtcbiAgICBjb25zdCBmaXJzdFRhYiA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdtYXQtdGFiLWJvZHknKVswXTtcbiAgICByZXR1cm4gZmlyc3RUYWIgJiYgY29tcC5lbGVtZW50UmVmICYmIGZpcnN0VGFiLmNvbnRhaW5zKGNvbXAuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIG9wZW5EZXRhaWwoZGV0YWlsOiBGb3JtTGF5b3V0RGV0YWlsQ29tcG9uZW50RGF0YSkge1xuICAgIHRoaXMuYWRkVGFiKGRldGFpbCk7XG4gIH1cblxuICBjbG9zZURldGFpbChvcHRpb25zPzogRm9ybUxheW91dENsb3NlRGV0YWlsT3B0aW9ucykge1xuICAgIHRoaXMuY2xvc2VUYWIodGhpcy50YWJHcm91cC5zZWxlY3RlZEluZGV4IC0gMSwgb3B0aW9ucyk7XG4gIH1cblxuICBjYW5BZGREZXRhaWxDb21wb25lbnQoKTogYm9vbGVhbiB7XG4gICAgLy8gVGhlIG1heCB0YWJzIG51bWJlciBpbmNsdWRlcyB0aGUgbWFpbiB0YWJcbiAgICBjb25zdCBtYXhSZWFjaGVkID0gKHRoaXMuZGF0YS5sZW5ndGggKyAxKSA+PSB0aGlzLm1heFRhYnM7XG4gICAgaWYgKG1heFJlYWNoZWQpIHtcbiAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5pbmZvKCdJTkZPJywgJ0xBWU9VVF9NQU5BTkdFUi5NQVhfVEFCU19OVU1CRVJfUkVBQ0hFRCcpXG4gICAgfVxuICAgIHJldHVybiAhbWF4UmVhY2hlZDtcbiAgfVxuXG4gIGlzVGFiRGF0YU1vZGlmaWVkKHRhYkRhdGE6IEZvcm1MYXlvdXREZXRhaWxDb21wb25lbnREYXRhKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRhYkRhdGEuaW5uZXJGb3Jtc0luZm8pLnNvbWUoZm9ybUF0dHIgPT4gdGFiRGF0YS5pbm5lckZvcm1zSW5mb1tmb3JtQXR0cl0ubW9kaWZpZWQpO1xuICB9XG5cbiAgY2xvc2VEZXRhaWxzKGRldGFpbHNLZXlzRGF0YTogYW55W10gPSBbXSwgb3B0aW9ucz86IEZvcm1MYXlvdXRDbG9zZURldGFpbE9wdGlvbnMpIHtcbiAgICBkZXRhaWxzS2V5c0RhdGEuZm9yRWFjaCgoZGV0YWlsRGF0YSkgPT4ge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmRhdGEuZmluZEluZGV4KChpdGVtKSA9PiBVdGlsLmlzRXF1aXZhbGVudChkZXRhaWxEYXRhLCBpdGVtLnBhcmFtcyB8fCB7fSkpO1xuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICB0aGlzLmNsb3NlVGFiKGluZGV4LCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldElkT2ZBY3RpdmVJdGVtKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVt0aGlzLmRhdGEubGVuZ3RoIC0gMV0gPyB0aGlzLmRhdGFbdGhpcy5kYXRhLmxlbmd0aCAtIDFdLmlkIDogdGhpcy5kYXRhLmxlbmd0aC50b1N0cmluZygpO1xuICB9XG59XG4iLCI8bWF0LXRhYi1ncm91cCAjdGFiR3JvdXAgb1RhYkdyb3VwPVwib250aW1pemVcIiBmeEZpbGwgKHNlbGVjdGVkVGFiQ2hhbmdlKT1cIm9uVGFiU2VsZWN0Q2hhbmdlKCRldmVudClcIiBbY29sb3JdPVwiY29sb3JcIlxuICBbYmFja2dyb3VuZENvbG9yXT1cImJhY2tncm91bmRDb2xvclwiIFtoZWFkZXJQb3NpdGlvbl09XCJoZWFkZXJQb3NpdGlvblwiIFtALmRpc2FibGVkXT1cImRpc2FibGVBbmltYXRpb25cIiBbbWF0LXN0cmV0Y2gtdGFic109XCJzdHJldGNoVGFic1wiPlxuICA8bWF0LXRhYiBsYWJlbD1cInt7IG1haW5UYWJUaXRsZSB8IG9UcmFuc2xhdGUgfX1cIj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgKm5nRm9yPVwibGV0IHRhYkRhdGEgb2YgZGF0YTsgbGV0IGkgPSBpbmRleFwiPlxuICAgIDxuZy10ZW1wbGF0ZSBtYXQtdGFiLWxhYmVsPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ0YWItbGFiZWxcIiBbY2xhc3MubW9kaWZpZWRdPVwiaXNUYWJEYXRhTW9kaWZpZWQodGFiRGF0YSlcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImljb24gJiYgaXNJY29uUG9zaXRpb25MZWZ0XCI+XG4gICAgICAgICAgPG1hdC1pY29uPnt7IGljb24gfX08L21hdC1pY29uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRlbXBsYXRlTWF0VGFiTGFiZWwgJiYgdGFiRGF0YS5mb3JtRGF0YUJ5TGFiZWxDb2x1bW5zICYmICF0YWJEYXRhLmluc2VydGlvbk1vZGUgXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlTWF0VGFiTGFiZWw7Y29udGV4dDp7JGltcGxpY2l0OnRhYkRhdGEuZm9ybURhdGFCeUxhYmVsQ29sdW1uc31cIj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGVtcGxhdGVNYXRUYWJMYWJlbCB8fCB0YWJEYXRhLmluc2VydGlvbk1vZGVcIj5cbiAgICAgICAgICB7eyB0YWJEYXRhLmxhYmVsIH19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaWNvbiAmJiAhaXNJY29uUG9zaXRpb25MZWZ0XCI+XG4gICAgICAgICAgPG1hdC1pY29uPnt7IGljb24gfX08L21hdC1pY29uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJncmFkaWVudC1sYXllclwiPjwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxtYXQtaWNvbiAoY2xpY2spPVwiY2xvc2VUYWIoaSlcIiBzdmdJY29uPVwib250aW1pemU6Y2xvc2VcIj48L21hdC1pY29uPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIG8tZm9ybS1sYXlvdXQtbWFuYWdlci1jb250ZW50IFtpbmRleF09XCJpXCI+PC9uZy10ZW1wbGF0ZT5cbiAgPC9tYXQtdGFiPlxuPC9tYXQtdGFiLWdyb3VwPlxuPGRpdiAqbmdJZj1cInNob3dMb2FkaW5nIHwgYXN5bmNcIiBjbGFzcz1cInNwaW5uZXItY29udGFpbmVyXCIgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiPlxuICA8bWF0LXByb2dyZXNzLXNwaW5uZXIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIiBzdHJva2VXaWR0aD1cIjNcIj48L21hdC1wcm9ncmVzcy1zcGlubmVyPlxuPC9kaXY+XG4iXX0=
@@ -17,6 +17,12 @@ export class OFormLayoutManagerService {
17
17
  set activeFormLayoutManager(arg) {
18
18
  this._activeFormLayoutManager = arg;
19
19
  }
20
+ set context(value) {
21
+ this._context = value;
22
+ }
23
+ get context() {
24
+ return this._context;
25
+ }
20
26
  }
21
27
  OFormLayoutManagerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OFormLayoutManagerService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
22
28
  OFormLayoutManagerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OFormLayoutManagerService, providedIn: 'root' });
@@ -26,4 +32,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
26
32
  providedIn: 'root'
27
33
  }]
28
34
  }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1mb3JtLWxheW91dC1tYW5hZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvc2VydmljZXMvby1mb3JtLWxheW91dC1tYW5hZ2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBT3JELE1BQU0sT0FBTyx5QkFBeUI7SUFJcEMsWUFBc0IsUUFBa0I7UUFBbEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUg5QixpQ0FBNEIsR0FBRyxFQUFFLENBQUM7SUFJNUMsQ0FBQztJQUVELHlCQUF5QixDQUFDLElBQWlDO1FBQ3pELElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDaEUsQ0FBQztJQUVELHVCQUF1QixDQUFDLElBQWlDO1FBQ3ZELE9BQU8sSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxJQUFJLHVCQUF1QjtRQUN6QixPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBSSx1QkFBdUIsQ0FBQyxHQUFnQztRQUMxRCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsR0FBRyxDQUFDO0lBQ3RDLENBQUM7O3VIQXJCVSx5QkFBeUI7MkhBQXpCLHlCQUF5QixjQUZ4QixNQUFNOzRGQUVQLHlCQUF5QjtrQkFIckMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBPRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnQgfSBmcm9tICcuLi9sYXlvdXRzL2Zvcm0tbGF5b3V0L28tZm9ybS1sYXlvdXQtbWFuYWdlci5jb21wb25lbnQnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBPRm9ybUxheW91dE1hbmFnZXJTZXJ2aWNlIHtcbiAgcHJvdGVjdGVkIHJlZ2lzdGVyZWRGb3JtTGF5b3V0TWFuYWdlcnMgPSB7fTtcbiAgcHJvdGVjdGVkIF9hY3RpdmVGb3JtTGF5b3V0TWFuYWdlcjogT0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50O1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgfVxuXG4gIHJlZ2lzdGVyRm9ybUxheW91dE1hbmFnZXIoY29tcDogT0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50KSB7XG4gICAgdGhpcy5yZWdpc3RlcmVkRm9ybUxheW91dE1hbmFnZXJzW2NvbXAuZ2V0QXR0cmlidXRlKCldID0gY29tcDtcbiAgfVxuXG4gIHJlbW92ZUZvcm1MYXlvdXRNYW5hZ2VyKGNvbXA6IE9Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudCkge1xuICAgIGRlbGV0ZSB0aGlzLnJlZ2lzdGVyZWRGb3JtTGF5b3V0TWFuYWdlcnNbY29tcC5nZXRBdHRyaWJ1dGUoKV07XG4gIH1cblxuICBnZXQgYWN0aXZlRm9ybUxheW91dE1hbmFnZXIoKTogT0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50IHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlRm9ybUxheW91dE1hbmFnZXI7XG4gIH1cblxuICBzZXQgYWN0aXZlRm9ybUxheW91dE1hbmFnZXIoYXJnOiBPRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnQpIHtcbiAgICB0aGlzLl9hY3RpdmVGb3JtTGF5b3V0TWFuYWdlciA9IGFyZztcbiAgfVxufVxuIl19
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1mb3JtLWxheW91dC1tYW5hZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvc2VydmljZXMvby1mb3JtLWxheW91dC1tYW5hZ2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBUXJELE1BQU0sT0FBTyx5QkFBeUI7SUFLcEMsWUFBc0IsUUFBa0I7UUFBbEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUo5QixpQ0FBNEIsR0FBRyxFQUFFLENBQUM7SUFJQSxDQUFDO0lBRTdDLHlCQUF5QixDQUFDLElBQWlDO1FBQ3pELElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDaEUsQ0FBQztJQUVELHVCQUF1QixDQUFDLElBQWlDO1FBQ3ZELE9BQU8sSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxJQUFJLHVCQUF1QjtRQUN6QixPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBSSx1QkFBdUIsQ0FBQyxHQUFnQztRQUMxRCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsR0FBRyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxLQUFnQztRQUMxQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7O3VIQTdCVSx5QkFBeUI7MkhBQXpCLHlCQUF5QixjQUZ4QixNQUFNOzRGQUVQLHlCQUF5QjtrQkFIckMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgdHlwZSB7IE9Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudCB9IGZyb20gJy4uL2xheW91dHMvZm9ybS1sYXlvdXQvby1mb3JtLWxheW91dC1tYW5hZ2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPRm9ybUxheW91dE1hbmFnZXJDb250ZXh0IH0gZnJvbSAnLi4vdHlwZXMvZm9ybS1sYXlvdXQtbWFuYWdlci1jb250ZXh0LnR5cGUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBPRm9ybUxheW91dE1hbmFnZXJTZXJ2aWNlIHtcbiAgcHJvdGVjdGVkIHJlZ2lzdGVyZWRGb3JtTGF5b3V0TWFuYWdlcnMgPSB7fTtcbiAgcHJvdGVjdGVkIF9hY3RpdmVGb3JtTGF5b3V0TWFuYWdlcjogT0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50O1xuICBwcml2YXRlIF9jb250ZXh0OiBPRm9ybUxheW91dE1hbmFnZXJDb250ZXh0O1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IpIHsgfVxuXG4gIHJlZ2lzdGVyRm9ybUxheW91dE1hbmFnZXIoY29tcDogT0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50KSB7XG4gICAgdGhpcy5yZWdpc3RlcmVkRm9ybUxheW91dE1hbmFnZXJzW2NvbXAuZ2V0QXR0cmlidXRlKCldID0gY29tcDtcbiAgfVxuXG4gIHJlbW92ZUZvcm1MYXlvdXRNYW5hZ2VyKGNvbXA6IE9Gb3JtTGF5b3V0TWFuYWdlckNvbXBvbmVudCkge1xuICAgIGRlbGV0ZSB0aGlzLnJlZ2lzdGVyZWRGb3JtTGF5b3V0TWFuYWdlcnNbY29tcC5nZXRBdHRyaWJ1dGUoKV07XG4gIH1cblxuICBnZXQgYWN0aXZlRm9ybUxheW91dE1hbmFnZXIoKTogT0Zvcm1MYXlvdXRNYW5hZ2VyQ29tcG9uZW50IHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlRm9ybUxheW91dE1hbmFnZXI7XG4gIH1cblxuICBzZXQgYWN0aXZlRm9ybUxheW91dE1hbmFnZXIoYXJnOiBPRm9ybUxheW91dE1hbmFnZXJDb21wb25lbnQpIHtcbiAgICB0aGlzLl9hY3RpdmVGb3JtTGF5b3V0TWFuYWdlciA9IGFyZztcbiAgfVxuXG4gIHNldCBjb250ZXh0KHZhbHVlOiBPRm9ybUxheW91dE1hbmFnZXJDb250ZXh0KSB7XG4gICAgdGhpcy5fY29udGV4dCA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGNvbnRleHQoKTogT0Zvcm1MYXlvdXRNYW5hZ2VyQ29udGV4dCB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRleHQ7XG4gIH1cbn1cbiJdfQ==
@@ -42,4 +42,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
42
42
  providedIn: 'root'
43
43
  }]
44
44
  }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hY2tiYXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9zZXJ2aWNlcy9zbmFja2Jhci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxXQUFXLEVBQXFDLE1BQU0sNkJBQTZCLENBQUM7QUFDN0YsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVsQyxPQUFPLEVBQUUsa0JBQWtCLEVBQW1CLE1BQU0sb0RBQW9ELENBQUM7O0FBTXpHLE1BQU0sT0FBTyxlQUFlO0lBUTFCLFlBQ1ksUUFBa0I7UUFBbEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUU1QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTSxJQUFJLENBQUMsT0FBZSxFQUFFLE1BQXdCO1FBQ25ELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztRQUNsQixNQUFNLFVBQVUsR0FBb0IsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDNUQsTUFBTSxnQkFBZ0IsR0FBYSxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1lBQzdFLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUU7Z0JBQzdCLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDeEM7WUFFRCxNQUFNLFNBQVMsR0FBc0I7Z0JBQ25DLFFBQVEsRUFBRSxNQUFNLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLGdCQUFnQjtnQkFDaEcsVUFBVSxFQUFFLGdCQUFnQjthQUM3QixDQUFDO1lBRUYsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBRXJGLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUMxQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JCLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUMvQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBQzFCLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ2hDLENBQUM7O0FBdkNnQixnQ0FBZ0IsR0FBVyxJQUFJLENBQUM7QUFDaEMsdUNBQXVCLEdBQVcsc0JBQXNCLENBQUM7NkdBSC9ELGVBQWU7aUhBQWYsZUFBZSxjQUZkLE1BQU07NEZBRVAsZUFBZTtrQkFIM0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFNuYWNrQmFyLCBNYXRTbmFja0JhckNvbmZpZywgTWF0U25hY2tCYXJSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBPU25hY2tCYXJDb21wb25lbnQsIE9TbmFja0JhckNvbmZpZyB9IGZyb20gJy4uL3NoYXJlZC9jb21wb25lbnRzL3NuYWNrYmFyL28tc25hY2tiYXIuY29tcG9uZW50JztcbmltcG9ydCB7IE9TbmFja0JhckJhc2UgfSBmcm9tICcuLi9zaGFyZWQvY29tcG9uZW50cy9zbmFja2Jhci9vLXNuYWNrYmFyLWJhc2UuY2xhc3MnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBTbmFja0JhclNlcnZpY2Uge1xuXG4gIHByb3RlY3RlZCBzdGF0aWMgREVGQVVMVF9EVVJBVElPTjogbnVtYmVyID0gMjAwMDtcbiAgcHJvdGVjdGVkIHN0YXRpYyBERUZBVUxUX0NPTlRBSU5FUl9DTEFTUzogc3RyaW5nID0gJ28tc25hY2tiYXItY29udGFpbmVyJztcblxuICBwcm90ZWN0ZWQgbWF0U25hY2tCYXI6IE1hdFNuYWNrQmFyO1xuICBwcm90ZWN0ZWQgc25hY2tCYXJSZWY6IE1hdFNuYWNrQmFyUmVmPE9TbmFja0JhckNvbXBvbmVudD47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcixcbiAgKSB7XG4gICAgdGhpcy5tYXRTbmFja0JhciA9IHRoaXMuaW5qZWN0b3IuZ2V0KE1hdFNuYWNrQmFyKTtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuKG1lc3NhZ2U6IHN0cmluZywgY29uZmlnPzogT1NuYWNrQmFyQ29uZmlnKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBvYnNlcnZhYmxlOiBPYnNlcnZhYmxlPGFueT4gPSBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XG4gICAgICBjb25zdCBjb250YWluZXJDbGFzc2VzOiBzdHJpbmdbXSA9IFtTbmFja0JhclNlcnZpY2UuREVGQVVMVF9DT05UQUlORVJfQ0xBU1NdO1xuICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcuY3NzQ2xhc3MpIHtcbiAgICAgICAgY29udGFpbmVyQ2xhc3Nlcy5wdXNoKGNvbmZpZy5jc3NDbGFzcyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1hdENvbmZpZzogTWF0U25hY2tCYXJDb25maWcgPSB7XG4gICAgICAgIGR1cmF0aW9uOiBjb25maWcgJiYgY29uZmlnLm1pbGxpc2Vjb25kcyA/IGNvbmZpZy5taWxsaXNlY29uZHMgOiBTbmFja0JhclNlcnZpY2UuREVGQVVMVF9EVVJBVElPTixcbiAgICAgICAgcGFuZWxDbGFzczogY29udGFpbmVyQ2xhc3Nlc1xuICAgICAgfTtcblxuICAgICAgc2VsZi5zbmFja0JhclJlZiA9IHNlbGYubWF0U25hY2tCYXIub3BlbkZyb21Db21wb25lbnQoT1NuYWNrQmFyQ29tcG9uZW50LCBtYXRDb25maWcpO1xuXG4gICAgICBzZWxmLnNuYWNrQmFyUmVmLm9uQWN0aW9uKCkuc3Vic2NyaWJlKGFyZyA9PiB7XG4gICAgICAgIG9ic2VydmVyLm5leHQoYXJnKTtcbiAgICAgIH0pO1xuXG4gICAgICBzZWxmLnNuYWNrQmFyUmVmLmFmdGVyRGlzbWlzc2VkKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgc2VsZi5zbmFja0JhclJlZiA9IG51bGw7XG4gICAgICB9KTtcblxuICAgICAgc2VsZi5zbmFja0JhclJlZi5pbnN0YW5jZS5vcGVuKG1lc3NhZ2UsIGNvbmZpZyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG9ic2VydmFibGUudG9Qcm9taXNlKCk7XG4gIH1cblxuXG5cbn1cbiJdfQ==
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hY2tiYXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9zZXJ2aWNlcy9zbmFja2Jhci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxXQUFXLEVBQXFDLE1BQU0sNkJBQTZCLENBQUM7QUFDN0YsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVsQyxPQUFPLEVBQUUsa0JBQWtCLEVBQW1CLE1BQU0sb0RBQW9ELENBQUM7O0FBS3pHLE1BQU0sT0FBTyxlQUFlO0lBUTFCLFlBQ1ksUUFBa0I7UUFBbEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUU1QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTSxJQUFJLENBQUMsT0FBZSxFQUFFLE1BQXdCO1FBQ25ELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztRQUNsQixNQUFNLFVBQVUsR0FBb0IsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDNUQsTUFBTSxnQkFBZ0IsR0FBYSxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1lBQzdFLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUU7Z0JBQzdCLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDeEM7WUFFRCxNQUFNLFNBQVMsR0FBc0I7Z0JBQ25DLFFBQVEsRUFBRSxNQUFNLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLGdCQUFnQjtnQkFDaEcsVUFBVSxFQUFFLGdCQUFnQjthQUM3QixDQUFDO1lBRUYsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBRXJGLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUMxQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JCLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUMvQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBQzFCLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ2hDLENBQUM7O0FBdkNnQixnQ0FBZ0IsR0FBVyxJQUFJLENBQUM7QUFDaEMsdUNBQXVCLEdBQVcsc0JBQXNCLENBQUM7NkdBSC9ELGVBQWU7aUhBQWYsZUFBZSxjQUZkLE1BQU07NEZBRVAsZUFBZTtrQkFIM0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0U25hY2tCYXIsIE1hdFNuYWNrQmFyQ29uZmlnLCBNYXRTbmFja0JhclJlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE9TbmFja0JhckNvbXBvbmVudCwgT1NuYWNrQmFyQ29uZmlnIH0gZnJvbSAnLi4vc2hhcmVkL2NvbXBvbmVudHMvc25hY2tiYXIvby1zbmFja2Jhci5jb21wb25lbnQnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBTbmFja0JhclNlcnZpY2Uge1xuXG4gIHByb3RlY3RlZCBzdGF0aWMgREVGQVVMVF9EVVJBVElPTjogbnVtYmVyID0gMjAwMDtcbiAgcHJvdGVjdGVkIHN0YXRpYyBERUZBVUxUX0NPTlRBSU5FUl9DTEFTUzogc3RyaW5nID0gJ28tc25hY2tiYXItY29udGFpbmVyJztcblxuICBwcm90ZWN0ZWQgbWF0U25hY2tCYXI6IE1hdFNuYWNrQmFyO1xuICBwcm90ZWN0ZWQgc25hY2tCYXJSZWY6IE1hdFNuYWNrQmFyUmVmPE9TbmFja0JhckNvbXBvbmVudD47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcixcbiAgKSB7XG4gICAgdGhpcy5tYXRTbmFja0JhciA9IHRoaXMuaW5qZWN0b3IuZ2V0KE1hdFNuYWNrQmFyKTtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuKG1lc3NhZ2U6IHN0cmluZywgY29uZmlnPzogT1NuYWNrQmFyQ29uZmlnKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBvYnNlcnZhYmxlOiBPYnNlcnZhYmxlPGFueT4gPSBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XG4gICAgICBjb25zdCBjb250YWluZXJDbGFzc2VzOiBzdHJpbmdbXSA9IFtTbmFja0JhclNlcnZpY2UuREVGQVVMVF9DT05UQUlORVJfQ0xBU1NdO1xuICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcuY3NzQ2xhc3MpIHtcbiAgICAgICAgY29udGFpbmVyQ2xhc3Nlcy5wdXNoKGNvbmZpZy5jc3NDbGFzcyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1hdENvbmZpZzogTWF0U25hY2tCYXJDb25maWcgPSB7XG4gICAgICAgIGR1cmF0aW9uOiBjb25maWcgJiYgY29uZmlnLm1pbGxpc2Vjb25kcyA/IGNvbmZpZy5taWxsaXNlY29uZHMgOiBTbmFja0JhclNlcnZpY2UuREVGQVVMVF9EVVJBVElPTixcbiAgICAgICAgcGFuZWxDbGFzczogY29udGFpbmVyQ2xhc3Nlc1xuICAgICAgfTtcblxuICAgICAgc2VsZi5zbmFja0JhclJlZiA9IHNlbGYubWF0U25hY2tCYXIub3BlbkZyb21Db21wb25lbnQoT1NuYWNrQmFyQ29tcG9uZW50LCBtYXRDb25maWcpO1xuXG4gICAgICBzZWxmLnNuYWNrQmFyUmVmLm9uQWN0aW9uKCkuc3Vic2NyaWJlKGFyZyA9PiB7XG4gICAgICAgIG9ic2VydmVyLm5leHQoYXJnKTtcbiAgICAgIH0pO1xuXG4gICAgICBzZWxmLnNuYWNrQmFyUmVmLmFmdGVyRGlzbWlzc2VkKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgc2VsZi5zbmFja0JhclJlZiA9IG51bGw7XG4gICAgICB9KTtcblxuICAgICAgc2VsZi5zbmFja0JhclJlZi5pbnN0YW5jZS5vcGVuKG1lc3NhZ2UsIGNvbmZpZyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG9ic2VydmFibGUudG9Qcm9taXNlKCk7XG4gIH1cblxuXG5cbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1sYXlvdXQtbWFuYWdlci1jb250ZXh0LnR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvdHlwZXMvZm9ybS1sYXlvdXQtbWFuYWdlci1jb250ZXh0LnR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIE9Gb3JtTGF5b3V0TWFuYWdlckNvbnRleHQgPSB7XG4gIGxhYmVsOiBzdHJpbmc7XG59XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS1nbG9iYWwtY29uZmlnLnR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvdHlwZXMvdGFibGUvby10YWJsZS1nbG9iYWwtY29uZmlnLnR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9Sb3dIZWlnaHQsIE9UYWJsZURldGFpbE1vZGUsIE9UYWJsZUVkaXRpb25Nb2RlIH0gZnJvbSAnLi8uLi8uLi91dGlsL2NvZGVzJztcblxuZXhwb3J0IHR5cGUgT1RhYmxlR2xvYmFsQ29uZmlnID0ge1xuICBhdXRvQWRqdXN0OiBib29sZWFuO1xuICBhdXRvQWxpZ25UaXRsZXM6IGJvb2xlYW47XG4gIGZpbHRlckNvbHVtbkFjdGl2ZUJ5RGVmYXVsdDogYm9vbGVhbjtcbiAgZWRpdGlvbk1vZGU6IE9UYWJsZUVkaXRpb25Nb2RlO1xuICBkZXRhaWxNb2RlOiBPVGFibGVEZXRhaWxNb2RlO1xuICByb3dIZWlnaHQ6IE9Sb3dIZWlnaHRcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS1nbG9iYWwtY29uZmlnLnR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvdHlwZXMvdGFibGUvby10YWJsZS1nbG9iYWwtY29uZmlnLnR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9Sb3dIZWlnaHQsIE9UYWJsZURldGFpbE1vZGUsIE9UYWJsZUVkaXRpb25Nb2RlIH0gZnJvbSAnLi8uLi8uLi91dGlsL2NvZGVzJztcblxuZXhwb3J0IHR5cGUgT1RhYmxlR2xvYmFsQ29uZmlnID0ge1xuICBhdXRvQWRqdXN0OiBib29sZWFuO1xuICBhdXRvQWxpZ25UaXRsZXM6IGJvb2xlYW47XG4gIGZpbHRlckNvbHVtbkFjdGl2ZUJ5RGVmYXVsdDogYm9vbGVhbjtcbiAgZWRpdGlvbk1vZGU6IE9UYWJsZUVkaXRpb25Nb2RlO1xuICBkZXRhaWxNb2RlOiBPVGFibGVEZXRhaWxNb2RlO1xuICByb3dIZWlnaHQ6IE9Sb3dIZWlnaHQsXG4gIHNob3dDaGFydHNPbkRlbWFuZE9wdGlvbjogYm9vbGVhbjtcbiAgc2hvd1JlcG9ydE9uRGVtYW5kT3B0aW9uOiBib29sZWFuO1xufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1mbGF0LW5vZGUudHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi90eXBlcy90cmVlLWZsYXQtbm9kZS50eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPVHJlZUNvbXBvbmVudCB9IGZyb20gXCIuLi9jb21wb25lbnRzL3RyZWUvby10cmVlLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgT1RyZWVOb2RlQ29tcG9uZW50IH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvdHJlZS90cmVlLW5vZGUvdHJlZS1ub2RlLmNvbXBvbmVudFwiO1xuXG5leHBvcnQgdHlwZSBPVHJlZUZsYXROb2RlID0ge1xuICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICBsYWJlbDogc3RyaW5nO1xuICBsZXZlbDogbnVtYmVyLFxuICByb290Tm9kZT86IGJvb2xlYW4sXG4gIGV4cGFuZGFibGU6IGJvb2xlYW4sXG4gIG5vZGU/OiBPVHJlZUNvbXBvbmVudCB8IE9UcmVlTm9kZUNvbXBvbmVudCxcbiAgdHJlZU5vZGU/OiBPVHJlZU5vZGVDb21wb25lbnQsXG4gIGRhdGE6IGFueTtcbiAgaXNMb2FkaW5nPzogYm9vbGVhbjtcbiAgcm91dGU/OiBzdHJpbmc7XG59XG4iXX0=
@@ -428,6 +428,13 @@ export class Util {
428
428
  const clonedArray = arr.map((x) => Object.assign({}, x));
429
429
  return clonedArray;
430
430
  }
431
+ static getLastActivateRoute(routeSnapshot) {
432
+ let child = routeSnapshot;
433
+ while (child.firstChild) {
434
+ child = child.firstChild;
435
+ }
436
+ return child;
437
+ }
431
438
  }
432
439
  Util.columnAggregates = ['sum', 'count', 'avg', 'min', 'max'];
433
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi91dGlsL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU8xRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFHaEMsTUFBTSxPQUFPLElBQUk7SUFJZixNQUFNLENBQUMsUUFBUSxDQUFDLEdBQVE7UUFDdEIsTUFBTSxPQUFPLEdBQUcsT0FBTyxHQUFHLENBQUM7UUFDM0IsT0FBTyxPQUFPLEtBQUssUUFBUSxDQUFDO0lBQzlCLENBQUM7SUFFRCxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQVE7UUFDckIsT0FBTyxHQUFHLFlBQVksS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFFRCxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQWEsRUFBRSxZQUFzQjtRQUN2RCxJQUFJLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxLQUFLLENBQUMsRUFBRTtZQUNwRyxPQUFPLElBQUksQ0FBQztTQUNiO2FBQU0sSUFBSSxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLE9BQU8sSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUU7WUFDM0csT0FBTyxLQUFLLENBQUM7U0FDZDthQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMs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Q0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3hELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7O0FBdGlCZSxxQkFBZ0IsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBmcm9tLCBpc09ic2VydmFibGUsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IElEYXRhU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvZGF0YS1zZXJ2aWNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJRm9ybURhdGFDb21wb25lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2Zvcm0tZGF0YS1jb21wb25lbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElQZXJtaXNzaW9uc1NlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3Blcm1pc3Npb25zLXNlcnZpY2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IE9EYXRlVmFsdWVUeXBlIH0gZnJvbSAnLi4vdHlwZXMvby1kYXRlLXZhbHVlLnR5cGUnO1xuaW1wb3J0IHsgT0NvbmZpZ3VyZVNlcnZpY2VBcmdzIH0gZnJvbSAnLi4vdHlwZXMvY29uZmlndXJlLXNlcnZpY2UtYXJncy50eXBlJztcbmltcG9ydCB7IEJhc2U2NCB9IGZyb20gJy4vYmFzZTY0JztcbmltcG9ydCB7IENvZGVzIH0gZnJvbSAnLi9jb2Rlcyc7XG5pbXBvcnQgeyBPQ29uZmlndXJlTWVzc2FnZVNlcnZpY2VBcmdzIH0gZnJvbSAnLi4vdHlwZXMvY29uZmlndXJlLW1lc3NhZ2Utc2VydmljZS1hcmdzLnR5cGUnO1xuXG5leHBvcnQgY2xhc3MgVXRpbCB7XG5cbiAgc3RhdGljIHJlYWRvbmx5IGNvbHVtbkFnZ3JlZ2F0ZXMgPSBbJ3N1bScsICdjb3VudCcsICdhdmcnLCAnbWluJywgJ21heCddO1xuXG4gIHN0YXRpYyBpc09iamVjdCh2YWw6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbFR5cGUgPSB0eXBlb2YgdmFsO1xuICAgIHJldHVybiB2YWxUeXBlID09PSAnb2JqZWN0JztcbiAgfVxuXG4gIHN0YXRpYyBpc0FycmF5KHZhbDogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHZhbCBpbnN0YW5jZW9mIEFycmF5O1xuICB9XG5cbiAgc3RhdGljIHBhcnNlQm9vbGVhbih2YWx1ZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgaWYgKCh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSAmJiAodmFsdWUudG9VcHBlckNhc2UoKSA9PT0gJ1RSVUUnIHx8IHZhbHVlLnRvVXBwZXJDYXNlKCkgPT09ICdZRVMnKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICgodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgJiYgKHZhbHVlLnRvVXBwZXJDYXNlKCkgPT09ICdGQUxTRScgfHwgdmFsdWUudG9VcHBlckNhc2UoKSA9PT0gJ05PJykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKFV0aWwuaXNEZWZpbmVkKGRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0YXRpYyBwYXJzZUFycmF5KHZhbHVlOiBzdHJpbmcsIGV4Y2x1ZGVSZXBlYXRlZDogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nW10ge1xuICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHJlc3VsdCA9IHZhbHVlLnNwbGl0KENvZGVzLkFSUkFZX0lOUFVUX1NFUEFSQVRPUik7XG4gICAgfVxuICAgIGlmIChleGNsdWRlUmVwZWF0ZWQgJiYgcmVzdWx0Lmxlbmd0aCA+IDApIHtcbiAgICAgIHJlc3VsdCA9IEFycmF5LmZyb20obmV3IFNldChyZXN1bHQpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIHBhcmVudCBrZXlzIGVxdWl2YWxlbmNlcy5cbiAgICogQHBhcmFtICBwS2V5c0FycmF5IEFycmF5IG9mIHN0cmluZ3MuIEFjY2VwdGVkIGZvcm1hdDoga2V5IHwga2V5OmFsaWFzXG4gICAqIEByZXR1cm5zIE9iamVjdFxuICAgKi9cbiAgc3RhdGljIHBhcnNlUGFyZW50S2V5c0VxdWl2YWxlbmNlcyhwS2V5c0FycmF5OiBBcnJheTxzdHJpbmc+LCBzZXBhcmF0b3I6IHN0cmluZyA9ICc6Jyk6IG9iamVjdCB7XG4gICAgY29uc3QgZXF1aXZhbGVuY2VzID0ge307XG4gICAgaWYgKHBLZXlzQXJyYXkgJiYgcEtleXNBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICBwS2V5c0FycmF5LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IGF1eCA9IGl0ZW0uc3BsaXQoc2VwYXJhdG9yKTtcbiAgICAgICAgaWYgKGF1eCAmJiBhdXgubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgaWYgKC8uK1xcWy4rXFxdLy50ZXN0KGF1eFsxXSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGVxdWl2S2V5ID0gYXV4WzFdLnN1YnN0cmluZygwLCBhdXhbMV0uaW5kZXhPZignWycpKTtcbiAgICAgICAgICAgIGNvbnN0IGVxdWl2VmFsdWUgPSBhdXhbMV0uc3Vic3RyaW5nKGF1eFsxXS5pbmRleE9mKCdbJykgKyAxLCBhdXhbMV0uaW5kZXhPZignXScpKTtcbiAgICAgICAgICAgIGNvbnN0IGVxdWl2ID0ge307XG4gICAgICAgICAgICBlcXVpdltlcXVpdktleV0gPSBlcXVpdlZhbHVlO1xuICAgICAgICAgICAgZXF1aXZhbGVuY2VzW2F1eFswXV0gPSBlcXVpdjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXF1aXZhbGVuY2VzW2F1eFswXV0gPSBhdXhbMV07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGF1eCAmJiBhdXgubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgZXF1aXZhbGVuY2VzW2l0ZW1dID0gaXRlbTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBlcXVpdmFsZW5jZXM7XG4gIH1cblxuICBzdGF0aWMgZW5jb2RlUGFyZW50S2V5cyhwYXJlbnRLZXlzOiBvYmplY3QpOiBzdHJpbmcge1xuICAgIGxldCBlbmNvZGVkOiBzdHJpbmcgPSAnJztcbiAgICBpZiAocGFyZW50S2V5cykge1xuICAgICAgZW5jb2RlZCA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkocGFyZW50S2V5cykpO1xuICAgIH1cbiAgICByZXR1cm4gZW5jb2RlZDtcbiAgfVxuXG4gIHN0YXRpYyBkZWNvZGVQYXJlbnRLZXlzKHBhcmVudEtleXM6IHN0cmluZyk6IG9iamVjdCB7XG4gICAgbGV0IGRlY29kZWQgPSB7fTtcbiAgICBpZiAocGFyZW50S2V5cyAmJiBwYXJlbnRLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGQgPSBCYXNlNjQuZGVjb2RlKHBhcmVudEtleXMpO1xuICAgICAgZGVjb2RlZCA9IEpTT04ucGFyc2UoZCk7XG4gICAgfVxuICAgIHJldHVybiBkZWNvZGVkO1xuICB9XG5cbiAgc3RhdGljIGlzQXJyYXlFbXB0eShhcnJheTogYW55W10pOiBib29sZWFuIHtcbiAgICBpZiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3RhdGljIGlzT2JqZWN0RW1wdHkob2JqOiBvYmplY3QpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDA7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdldGhlciBzcGVjaWZpZWQgc2VydmljZSBhcyBhcmd1bWVudCBpbXBsZW1lbnRzICdJRGF0YVNlcnZpY2UnIGludGVyZmFjZVxuICAgKiBAcGFyYW0gYXJnIFRoZSBzZXJ2aWNlIGluc3RhbmNlIGZvciBjaGVja2luZy5cbiAgICogQHJldHVybnMgYm9vbGVhblxuICAgKi9cbiAgc3RhdGljIGlzRGF0YVNlcnZpY2UoYXJnOiBhbnkpOiBhcmcgaXMgSURhdGFTZXJ2aWNlIHtcbiAgICBpZiAoYXJnID09PSB1bmRlZmluZWQgfHwgYXJnID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAoKGFyZyBhcyBJRGF0YVNlcnZpY2UpLmdldERlZmF1bHRTZXJ2aWNlQ29uZmlndXJhdGlvbiAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAoYXJnIGFzIElEYXRhU2VydmljZSkuY29uZmlndXJlU2VydmljZSAhPT0gdW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2V0aGVyIHNwZWNpZmllZCBzZXJ2aWNlIGFzIGFyZ3VtZW50IGltcGxlbWVudHMgJ0lEYXRhU2VydmljZScgaW50ZXJmYWNlXG4gICAqIEBwYXJhbSBhcmcgVGhlIHNlcnZpY2UgaW5zdGFuY2UgZm9yIGNoZWNraW5nLlxuICAgKiBAcmV0dXJucyBib29sZWFuXG4gICAqL1xuICBzdGF0aWMgaXNQZXJtaXNzaW9uc1NlcnZpY2UoYXJnOiBhbnkpOiBhcmcgaXMgSVBlcm1pc3Npb25zU2VydmljZSB7XG4gICAgaWYgKGFyZyA9PT0gdW5kZWZpbmVkIHx8IGFyZyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gKChhcmcgYXMgSVBlcm1pc3Npb25zU2VydmljZSkubG9hZFBlcm1pc3Npb25zICE9PSB1bmRlZmluZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3ZXRoZXIgc3BlY2lmaWVkIGNvbXBvbmVudCBhcyBhcmd1bWVudCBpbXBsZW1lbnRzICdJRm9ybURhdGFDb21wb25lbnQnIGludGVyZmFjZVxuICAgKiBAcGFyYW0gYXJnIFRoZSBjb21wb25lbnQgaW5zdGFuY2UgZm9yIGNoZWNraW5nLlxuICAgKiBAcmV0dXJucyBib29sZWFuXG4gICAqL1xuICBzdGF0aWMgaXNGb3JtRGF0YUNvbXBvbmVudChhcmc6IGFueSk6IGFyZyBpcyBJRm9ybURhdGFDb21wb25lbnQge1xuICAgIGlmIChhcmcgPT09IHVuZGVmaW5lZCB8fCBhcmcgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuICgoYXJnIGFzIElGb3JtRGF0YUNvbXBvbmVudCkuaXNBdXRvbWF0aWNCaW5kaW5nICE9PSB1bmRlZmluZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBhcmUgaXMgZXF1YWwgdHdvIG9iamVjdHNcbiAgICogQHBhcmFtIGEgT2JqZWN0IDFcbiAgICogQHBhcmFtIGIgT2JqZWN0IDJcbiAgICpcbiAgICovXG4gIHN0YXRpYyBpc0VxdWl2YWxlbnQoYSwgYikge1xuICAgIC8vIENyZWF0ZSBhcnJheXMgb2YgcHJvcGVydHkgbmFtZXNcbiAgICBjb25zdCBhUHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhKTtcbiAgICBjb25zdCBiUHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhiKTtcblxuICAgIC8vIElmIG51bWJlciBvZiBwcm9wZXJ0aWVzIGlzIGRpZmZlcmVudCwgb2JqZWN0cyBhcmUgbm90IGVxdWl2YWxlbnRcbiAgICBpZiAoYVByb3BzLmxlbmd0aCAhPT0gYlByb3BzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYVByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBwcm9wTmFtZSA9IGFQcm9wc1tpXTtcbiAgICAgIC8vIElmIHZhbHVlcyBvZiBzYW1lIHByb3BlcnR5IGFyZSBub3QgZXF1YWwsIG9iamVjdHMgYXJlIG5vdCBlcXVpdmFsZW50XG4gICAgICBsZXQgYlZhbHVlID0gYltwcm9wTmFtZV07XG4gICAgICBpZiAodHlwZW9mIGFbcHJvcE5hbWVdID09PSAnbnVtYmVyJykge1xuICAgICAgICBjb25zdCBpbnRCID0gcGFyc2VJbnQoYlZhbHVlLCAxMCk7XG4gICAgICAgIGJWYWx1ZSA9IGlzTmFOKGludEIpID8gYlZhbHVlIDogaW50QjtcbiAgICAgIH1cbiAgICAgIGlmIChhW3Byb3BOYW1lXSAhPT0gYlZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBtYWRlIGl0IHRoaXMgZmFyLCBvYmplY3RzIGFyZSBjb25zaWRlcmVkIGVxdWl2YWxlbnRcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHN0YXRpYyBlcXVhbHMobzE6IGFueSwgbzI6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmIChvMSA9PT0gbzIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAobzEgPT09IG51bGwgfHwgbzIgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKG8xICE9PSBvMSAmJiBvMiAhPT0gbzIpIHtcbiAgICAgIC8vIE5hTiA9PT0gTmFOXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgdDEgPSB0eXBlb2YgbzE7XG4gICAgY29uc3QgdDIgPSB0eXBlb2YgbzI7XG4gICAgbGV0IGxlbmd0aDogbnVtYmVyO1xuICAgIGxldCBrZXk6IGFueTtcbiAgICBsZXQga2V5U2V0OiBhbnk7XG4gICAgaWYgKHQxID09PSB0MiAmJiB0MSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG8xKSkge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobzIpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGxlbmd0aCA9IG8xLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA9PT0gbzIubGVuZ3RoKSB7XG4gICAgICAgICAgZm9yIChrZXkgPSAwOyBrZXkgPCBsZW5ndGg7IGtleSsrKSB7XG4gICAgICAgICAgICBpZiAoIVV0aWwuZXF1YWxzKG8xW2tleV0sIG8yW2tleV0pKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG8yKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBrZXlTZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBmb3IgKGtleSBpbiBvMSkge1xuICAgICAgICAgIGlmICghVXRpbC5lcXVhbHMobzFba2V5XSwgbzJba2V5XSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAga2V5U2V0W2tleV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoa2V5IGluIG8yKSB7XG4gICAgICAgICAgaWYgKCEoa2V5IGluIGtleVNldCkgJiYgdHlwZW9mIG8yW2tleV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzdGF0aWMgaXNEZWZpbmVkKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSAhPT0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhIHJhbmRvbSBudW1iZXJcbiAgKi9cbiAgc3RhdGljIHJhbmRvbU51bWJlcigpIHtcbiAgICBjb25zdCByYW5kb21BcnJheSA9IG5ldyBVaW50MzJBcnJheSgxKTtcbiAgICB3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhyYW5kb21BcnJheSk7XG4gICAgcmV0dXJuIHJhbmRvbUFycmF5WzBdO1xuICB9XG5cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcHJvdmlkZWQgc3RyaW5nIGluIGxvd2VyY2FzZSBhbmQgd2l0aG91dCBhY2NlbnQgbWFya3MuXG4gICAqIEBwYXJhbSB2YWx1ZSB0aGUgdGV4dCB0byBub3JtYWxpemVcbiAgICovXG4gIHN0YXRpYyBub3JtYWxpemVTdHJpbmcodmFsdWU6IHN0cmluZywgdG9Mb3dlckNhc2U6IGJvb2xlYW4gPSB0cnVlKTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmxlbmd0aCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gdmFsdWUubm9ybWFsaXplKCdORkQnKS5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XG4gICAgICAgIGlmICh0b0xvd2VyQ2FzZSkge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwcm92aWRlZCBhcnJheSBmbGF0dGVuZC5cbiAgICogQHBhcmFtIGFycmF5IHRoZSBhcnJheSB0byBmbGF0XG4gICAqL1xuICBzdGF0aWMgZmxhdHRlbihhcnJheTogQXJyYXk8YW55Pik6IEFycmF5PGFueT4ge1xuICAgIGxldCBmbGF0dGVuZWQgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGN1cnJlbnQgb2YgYXJyYXkpIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShjdXJyZW50KSkge1xuICAgICAgICBmbGF0dGVuZWQucHVzaChjdXJyZW50KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGNoaWxkQ3VycmVudCBvZiBjdXJyZW50KSB7XG4gICAgICAgIGZsYXR0ZW5lZC5wdXNoKGNoaWxkQ3VycmVudClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZsYXR0ZW5lZFxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBsaXN0IHdpdGggYWxsIHRoZSB2YWx1ZXMgZnJvbSB0aGUgcHJvdmlkZWQgb2JqZWN0LlxuICAgKiBAcGFyYW0gb2JqIHRoZSBvYmplY3RcbiAgICovXG4gIHN0YXRpYyBnZXRWYWx1ZXNGcm9tT2JqZWN0KG9iajogb2JqZWN0ID0ge30pOiBBcnJheTxhbnk+IHtcbiAgICBjb25zdCBhcnJheTogQXJyYXk8YW55PiA9IFtdO1xuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBvYmpba2V5XSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgYXJyYXkucHVzaChVdGlsLmdldFZhbHVlc0Zyb21PYmplY3Qob2JqW2tleV0pKTtcbiAgICAgIH1cbiAgICAgIGFycmF5LnB1c2gob2JqW2tleV0pO1xuICAgIH0pO1xuICAgIHJldHVybiBVdGlsLmZsYXR0ZW4oYXJyYXkpO1xuICB9XG5cbiAgc3RhdGljIHBhcnNlSWNvblBvc2l0aW9uKHZhbHVlOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZT86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IHJlc3VsdCA9IGRlZmF1bHRWYWx1ZSB8fCBDb2Rlcy5JQ09OX1BPU0lUSU9OX0xFRlQ7XG4gICAgY29uc3QgYXZhaWxhYmxlUG9zaXRpb25zID0gW0NvZGVzLklDT05fUE9TSVRJT05fTEVGVCwgQ29kZXMuSUNPTl9QT1NJVElPTl9SSUdIVF07XG4gICAgaWYgKHZhbHVlICYmIHZhbHVlLmxlbmd0aCkge1xuICAgICAgcmVzdWx0ID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgaWYgKGF2YWlsYWJsZVBvc2l0aW9ucy5pbmRleE9mKHJlc3VsdCkgPT09IC0xKSB7XG4gICAgICByZXN1bHQgPSBkZWZhdWx0VmFsdWUgfHwgQ29kZXMuSUNPTl9QT1NJVElPTl9MRUZUO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3RhdGljIGNvcHlUb0NsaXBib2FyZChkYXRhOiBzdHJpbmcpIHtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjb3B5JywgKGU6IENsaXBib2FyZEV2ZW50KSA9PiB7XG4gICAgICBlLmNsaXBib2FyZERhdGEuc2V0RGF0YSgndGV4dC9wbGFpbicsIGRhdGEpO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY29weScsIG51bGwpO1xuICAgIH0pO1xuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7XG4gIH1cblxuICBzdGF0aWMgY2hlY2tQaXhlbHNWYWx1ZVN0cmluZyh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCdweCcpIDogZmFsc2U7XG4gIH1cblxuICBzdGF0aWMgZXh0cmFjdFBpeGVsc1ZhbHVlKHZhbHVlOiBhbnksIGRlZmF1bHRWYWx1ZT86IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IHJlc3VsdDogbnVtYmVyID0gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyA/IHZhbHVlIDogdW5kZWZpbmVkO1xuICAgIGlmIChVdGlsLmNoZWNrUGl4ZWxzVmFsdWVTdHJpbmcodmFsdWUpKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUZsb2F0KHZhbHVlLnN1YnN0cigwLCB2YWx1ZS5sZW5ndGggLSAncHgnLmxlbmd0aCkpO1xuICAgICAgcmVzdWx0ID0gaXNOYU4ocGFyc2VkKSA/IGRlZmF1bHRWYWx1ZSA6IHBhcnNlZDtcbiAgICB9XG4gICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKHJlc3VsdCkgPyByZXN1bHQgOiBkZWZhdWx0VmFsdWU7XG4gIH1cbiAgLyoqXG4gICAqIEFkZGVkIGNsYXNzICdhY2NlbnQnIGluIDxtYXQtZm9ybS1maWVsZD4gYW5kIHNldCB0aGUgY29sb3IgIGFjY2VudCBpbiB0aGUgaWNvbnNcbiAgICogQHBhcmFtIGVsUmVmXG4gICAqIEBwYXJhbSBvSW5wdXRzT3B0aW9uc1xuICAgKi9cblxuICBzdGF0aWMgcGFyc2VPSW5wdXRzT3B0aW9ucyhlbFJlZiwgb0lucHV0c09wdGlvbnMpIHtcblxuICAgIGlmIChvSW5wdXRzT3B0aW9ucy5pY29uQ29sb3IgPT09IENvZGVzLk9fSU5QVVRTX09QVElPTlNfQ09MT1JfQUNDRU5UKSB7XG4gICAgICBjb25zdCBtYXRGb3JtRmllbGRFTCA9IGVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ21hdC1mb3JtLWZpZWxkJylbMF07XG4gICAgICBpZiAoVXRpbC5pc0RlZmluZWQobWF0Rm9ybUZpZWxkRUwpKSB7XG4gICAgICAgIG1hdEZvcm1GaWVsZEVMLmNsYXNzTGlzdC5hZGQoJ2FjY2VudCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqICBSZXR1cm4gc3RyaW5nIHdpdGggZXNjYXBlZCBzcGVjaWFsIGNoYXJhY3RlclxuICAgKi9cbiAgc3RhdGljIGVzY2FwZVNwZWNpYWxDaGFyYWN0ZXIoUzogc3RyaW5nKTogc3RyaW5nIHtcblxuICAgIGNvbnN0IHN0ciA9IFN0cmluZyhTKTtcblxuICAgIGNvbnN0IGNwTGlzdCA9IEFycmF5LmZyb20oc3RyW1N5bWJvbC5pdGVyYXRvcl0oKSk7XG5cbiAgICBjb25zdCBjdUxpc3QgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGMgb2YgY3BMaXN0KSB7XG4gICAgICAvLyBpLiBJZiBjIGlzIGEgU3BlY2lhbENoYXJhY3RlciB0aGVuIGRvOlxuICAgICAgaWYgKCdeJFxcXFwuKis/KClbXXt9fCcuaW5kZXhPZihjKSAhPT0gLTEpIHtcbiAgICAgICAgLy8gYS4gQXBwZW5kIFwiXFxcIiB0byBjdUxpc3QuXG4gICAgICAgIGN1TGlzdC5wdXNoKCdcXFxcJyk7XG4gICAgICB9XG4gICAgICAvLyBBcHBlbmQgYyB0byBjcExpc3QuXG4gICAgICBjdUxpc3QucHVzaChjKTtcbiAgICB9XG4gICAgY29uc3QgTCA9IGN1TGlzdC5qb2luKCcnKTtcbiAgICByZXR1cm4gTDtcblxuICB9XG5cbiAgc3RhdGljIGlzQXJyYXlFcXVhbChhcnJheTE6IEFycmF5PGFueT4sIGFycmF5MjogQXJyYXk8YW55Pikge1xuICAgIHJldHVybiBhcnJheTEubGVuZ3RoID09PSBhcnJheTIubGVuZ3RoICYmIGFycmF5MS5ldmVyeSgodiwgaSkgPT4gdiA9PT0gYXJyYXkyW2ldKVxuICB9O1xuXG4gIHN0YXRpYyBkaWZmZXJlbmNlQXJyYXlzKGFycmF5MTogQXJyYXk8YW55PiwgYXJyYXkyOiBBcnJheTxhbnk+KTogQXJyYXk8YW55PiB7XG4gICAgY29uc3QgZGlmZmVyZW5jZSA9IGFycmF5MS5maWx0ZXIob2JqID0+IHtcbiAgICAgIHJldHVybiAhYXJyYXkyLnNvbWUob2JqMiA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVxdWFscyhvYmosIG9iajIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGRpZmZlcmVuY2U7XG4gIH1cblxuICBzdGF0aWMgY29udmVydFRvT0RhdGVWYWx1ZVR5cGUodmFsOiBhbnkpOiBPRGF0ZVZhbHVlVHlwZSB7XG4gICAgbGV0IHJlc3VsdDogT0RhdGVWYWx1ZVR5cGUgPSAndGltZXN0YW1wJztcbiAgICBjb25zdCBsb3dlclZhbCA9ICh2YWwgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGxvd2VyVmFsID09PSAnc3RyaW5nJyB8fCBsb3dlclZhbCA9PT0gJ2RhdGUnIHx8IGxvd2VyVmFsID09PSAndGltZXN0YW1wJyB8fCBsb3dlclZhbCA9PT0gJ2lzby04NjAxJykge1xuICAgICAgcmVzdWx0ID0gbG93ZXJWYWw7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuXG4gIHN0YXRpYyB1bmlxdWVCeShhOiBBcnJheTxhbnk+LCBrZXkpIHtcbiAgICBjb25zdCBzZWVuID0ge307XG4gICAgcmV0dXJuIGEuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICBjb25zdCBrID0ga2V5KGl0ZW0pO1xuICAgICAgcmV0dXJuIHNlZW4uaGFzT3duUHJvcGVydHkoaykgPyBmYWxzZSA6IChzZWVuW2tdID0gdHJ1ZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGFyZXMgdHdvIHN0cmluZ3MgYW5kIHJldHVybnMgYSBuZWdhdGl2ZSB2YWx1ZSBpZiBmaXJzdCBhcmd1bWVudCBpcyBsZXNzIHRoYW4gc2Vjb25kIGFyZ3VtZW50LCB6ZXJvIGlmIHRoZXkncmUgZXF1YWwgYW5kIGEgcG9zaXRpdmUgdmFsdWUgb3RoZXJ3aXNlLlxuICAgKi9cbiAgc3RhdGljIGNvbXBhcmUoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGlmIChhIDwgYikge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICBpZiAoYSA+IGIpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHN0YXRpYyBwYXJzZUJ5VmFsdWVUeXBlKHZhbHVlOiBhbnksIHZhbHVlVHlwZTogT0RhdGVWYWx1ZVR5cGUsIGZvcm1hdDogc3RyaW5nKSB7XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdCA9IHZhbHVlO1xuICAgIGNvbnN0IG0gPSBtb21lbnQodmFsdWUpO1xuICAgIGlmICghbS5pc1ZhbGlkKCkpIHtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICAgIHN3aXRjaCAodmFsdWVUeXBlKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICByZXN1bHQgPSBtLmZvcm1hdChmb3JtYXQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICByZXN1bHQgPSBtLnRvRGF0ZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2lzby04NjAxJzpcbiAgICAgICAgcmVzdWx0ID0gbS50b0lTT1N0cmluZygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RpbWVzdGFtcCc6XG4gICAgICAgIHJlc3VsdCA9IG0udmFsdWVPZigpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJlc3VsdCA9IHZvaWQgMDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBzdGF0aWMgd3JhcEludG9PYnNlcnZhYmxlPFQ+KHZhbHVlOiBUIHwgUHJvbWlzZTxUPiB8IE9ic2VydmFibGU8VD4pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICBpZiAoaXNPYnNlcnZhYmxlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGlmIChVdGlsLmlzUHJvbWlzZSh2YWx1ZSkpIHtcbiAgICAgIC8vIFVzZSBgUHJvbWlzZS5yZXNvbHZlKClgIHRvIHdyYXAgcHJvbWlzZS1saWtlIGluc3RhbmNlcy5cbiAgICAgIHJldHVybiBmcm9tKFByb21pc2UucmVzb2x2ZSh2YWx1ZSkpO1xuICAgIH1cblxuICAgIHJldHVybiBvZih2YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgaXNQcm9taXNlPFQgPSBhbnk+KG9iajogYW55KTogb2JqIGlzIFByb21pc2U8VD4ge1xuICAgIHJldHVybiAhIW9iaiAmJiB0eXBlb2Ygb2JqLnRoZW4gPT09ICdmdW5jdGlvbic7XG4gIH1cblxuXG4gIHN0YXRpYyBjb25maWd1cmVTZXJ2aWNlKGNvbmZpZ3VyZVNlcnZpY2VBcmdzOiBPQ29uZmlndXJlU2VydmljZUFyZ3MpOiBhbnkge1xuICAgIGxldCBkYXRhU2VydmljZSA9IGNvbmZpZ3VyZVNlcnZpY2VBcmdzLmJhc2VTZXJ2aWNlO1xuICAgIGNvbnN0IGVudGl0eSA9IGNvbmZpZ3VyZVNlcnZpY2VBcmdzLmVudGl0eTtcbiAgICBjb25zdCBzZXJ2aWNlID0gY29uZmlndXJlU2VydmljZUFyZ3Muc2VydmljZTtcbiAgICBjb25zdCBzZXJ2aWNlVHlwZSA9IGNvbmZpZ3VyZVNlcnZpY2VBcmdzLnNlcnZpY2VUeXBlO1xuICAgIGNvbnN0IGluamVjdG9yID0gY29uZmlndXJlU2VydmljZUFyZ3MuaW5qZWN0b3I7XG5cbiAgICBpZiAoc2VydmljZVR5cGUpIHtcbiAgICAgIGRhdGFTZXJ2aWNlID0gc2VydmljZVR5cGU7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBkYXRhU2VydmljZSA9IGluamVjdG9yLmdldDxhbnk+KGRhdGFTZXJ2aWNlKTtcbiAgICAgIGlmIChzZXJ2aWNlVHlwZSkge1xuICAgICAgICBkYXRhU2VydmljZSA9IFV0aWwuY3JlYXRlU2VydmljZUluc3RhbmNlKGRhdGFTZXJ2aWNlLCBpbmplY3RvcilcbiAgICAgIH1cbiAgICAgIGlmIChVdGlsLmlzRGF0YVNlcnZpY2UoZGF0YVNlcnZpY2UpKSB7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VDZmcgPSBkYXRhU2VydmljZS5nZXREZWZhdWx0U2VydmljZUNvbmZpZ3VyYXRpb24oc2VydmljZSk7XG4gICAgICAgIGlmIChlbnRpdHkpIHtcbiAgICAgICAgICBzZXJ2aWNlQ2ZnLmVudGl0eSA9IGVudGl0eTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhU2VydmljZS5jb25maWd1cmVTZXJ2aWNlKHNlcnZpY2VDZmcpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhU2VydmljZTtcbiAgfVxuXG4gIC8qKlxuICogUmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgcHJvdmlkZWQgc2VydmljZSBjbGFzc1xuICogQHBhcmFtIGNsYXp6IHRoZSBjbGFzcyByZWZlcmVuY2VcbiAqIEBwYXJhbSBpbmplY3RvciB0aGUgaW5qZWN0b3JcbiAqL1xuICBzdGF0aWMgY3JlYXRlU2VydmljZUluc3RhbmNlKGNsYXp6OiBhbnksIGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQoY2xhenopKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmV3SW5zdGFuY2UgPSBuZXcgY2xhenooaW5qZWN0b3IpO1xuICAgIHJldHVybiBuZXdJbnN0YW5jZTtcbiAgfVxuXG4gIHN0YXRpYyBjb25maWd1cmVNZXNzYWdlU2VydmljZShjb25maWd1cmVTZXJ2aWNlQXJnczogT0NvbmZpZ3VyZU1lc3NhZ2VTZXJ2aWNlQXJncyk6IGFueSB7XG4gICAgbGV0IG1lc3NhZ2VTZXJ2aWNlID0gY29uZmlndXJlU2VydmljZUFyZ3MuYmFzZVNlcnZpY2U7XG4gICAgY29uc3Qgc2VydmljZVR5cGUgPSBjb25maWd1cmVTZXJ2aWNlQXJncy5zZXJ2aWNlVHlwZTtcbiAgICBjb25zdCBpbmplY3RvciA9IGNvbmZpZ3VyZVNlcnZpY2VBcmdzLmluamVjdG9yO1xuXG4gICAgaWYgKHNlcnZpY2VUeXBlKSB7XG4gICAgICBtZXNzYWdlU2VydmljZSA9IHNlcnZpY2VUeXBlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgbWVzc2FnZVNlcnZpY2UgPSBpbmplY3Rvci5nZXQ8YW55PihtZXNzYWdlU2VydmljZSk7XG4gICAgICBpZiAoc2VydmljZVR5cGUpIHtcbiAgICAgICAgbWVzc2FnZVNlcnZpY2UgPSBVdGlsLmNyZWF0ZVNlcnZpY2VJbnN0YW5jZShtZXNzYWdlU2VydmljZSwgaW5qZWN0b3IpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VTZXJ2aWNlO1xuICB9XG5cbiAgc3RhdGljIGlzQmFzZTY0KGZpbGU6IHN0cmluZykge1xuICAgIGNvbnN0IHBhdHRlcm4gPSBuZXcgUmVnRXhwKC9eKFtBLVphLXowLTkrXFwvXXs0fSkqKFtBLVphLXowLTkrXFwvXXs0fXxbQS1aYS16MC05K1xcL117M309fFtBLVphLXowLTkrXFwvXXsyfT09KSQvZylcblxuICAgIGlmIChmaWxlLnN1YnN0cmluZygwLCA0KSA9PT0gJ2RhdGEnKSB7XG4gICAgICBmaWxlID0gZmlsZS5zdWJzdHJpbmcoZmlsZS5pbmRleE9mKCdiYXNlNjQnKSArIDcpO1xuICAgIH1cbiAgICByZXR1cm4gcGF0dGVybi50ZXN0KGZpbGUucmVwbGFjZSgvXFxzKy9nLCAnJykpO1xuXG4gIH1cbiAgLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3QgdG8gYSBKU09OIHN0cmluZywgYXZvaWRpbmcgY2lyY3VsYXIgcmVmZXJlbmNlcy5cbiAqIEBwYXJhbSBvYmogVGhlIG9iamVjdCB0byBjb252ZXJ0IHRvIEpTT04uXG4gKiBAcmV0dXJucyBBIEpTT04gc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgb2JqZWN0LlxuICovXG4gIHN0YXRpYyBzdHJpbmdpZnkob2JqOiBvYmplY3QpIHtcbiAgICBsZXQgY2FjaGUgPSBbXTtcbiAgICBsZXQgc3RyID0gSlNPTi5zdHJpbmdpZnkob2JqLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoY2FjaGUuaW5kZXhPZih2YWx1ZSkgIT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuOyAvLyBBdm9pZCBjaXJjdWxhciByZWZlcmVuY2VzXG4gICAgICAgIH1cbiAgICAgICAgY2FjaGUucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSk7XG4gICAgY2FjaGUgPSBudWxsO1xuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICBzdGF0aWMgc29ydEZ1bmN0aW9uKHByb3BlcnR5QTogc3RyaW5nIHwgbnVtYmVyLCBwcm9wZXJ0eUI6IHN0cmluZyB8IG51bWJlciwgYWN0aXZlU29ydERpcmVjdGlvbjogc3RyaW5nKSB7XG5cbiAgICBsZXQgdmFsdWVBOiBzdHJpbmcgfCBudW1iZXIgPSAnJztcbiAgICBsZXQgdmFsdWVCOiBzdHJpbmcgfCBudW1iZXIgPSAnJztcblxuICAgIGlmIChVdGlsLmlzRGVmaW5lZChwcm9wZXJ0eUEpKSB7XG4gICAgICB2YWx1ZUEgPSBpc05hTigrcHJvcGVydHlBKSA/IHByb3BlcnR5QS50b1N0cmluZygpLnRyaW0oKS50b0xvd2VyQ2FzZSgpIDogK3Byb3BlcnR5QTtcbiAgICB9XG5cbiAgICBpZiAoVXRpbC5pc0RlZmluZWQocHJvcGVydHlCKSkge1xuICAgICAgdmFsdWVCID0gaXNOYU4oK3Byb3BlcnR5QikgPyBwcm9wZXJ0eUIudG9TdHJpbmcoKS50cmltKCkudG9Mb3dlckNhc2UoKSA6ICtwcm9wZXJ0eUI7XG4gICAgfVxuICAgIHJldHVybiAodmFsdWVBIDw9IHZhbHVlQiA/IC0xIDogMSkgKiAoYWN0aXZlU29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAxIDogLTEpO1xuICB9XG5cbiAgc3RhdGljIGNsb25lQXJyYXk8VD4oYXJyOiBUW10pOiBUW10ge1xuICAgIGNvbnN0IGNsb25lZEFycmF5ID0gYXJyLm1hcCgoeCkgPT4gT2JqZWN0LmFzc2lnbih7fSwgeCkpXG4gICAgcmV0dXJuIGNsb25lZEFycmF5O1xuICB9XG5cbn1cbiJdfQ==
440
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi91dGlsL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU8xRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFJaEMsTUFBTSxPQUFPLElBQUk7SUFJZixNQUFNLENBQUMsUUFBUSxDQUFDLEdBQVE7UUFDdEIsTUFBTSxPQUFPLEdBQUcsT0FBTyxHQUFHLENBQUM7UUFDM0IsT0FBTyxPQUFPLEtBQUssUUFBUSxDQUFDO0lBQzlCLENBQUM7SUFFRCxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQVE7UUFDckIsT0FBTyxHQUFHLFlBQVksS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFFRCxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQWEsRUFBRSxZQUFzQjtRQUN2RCxJQUFJLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxLQUFLLENBQUMsRUFBRTtZQUNwRyxPQUFPLElBQUksQ0FBQztTQUNiO2FBQU0sSUFBSSxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLE9BQU8sSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUU7WUFDM0csT0FBTyxLQUFLLENBQUM7U0FDZDthQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMs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Q0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3hELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxNQUFNLENBQUMsb0JBQW9CLENBQUMsYUFBcUM7UUFDL0QsSUFBSSxLQUFLLEdBQUcsYUFBYSxDQUFDO1FBQzFCLE9BQU8sS0FBSyxDQUFDLFVBQVUsRUFBRTtZQUN2QixLQUFLLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztTQUMxQjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs7QUE5aUJlLHFCQUFnQixHQUFHLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IGZyb20sIGlzT2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgSURhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9kYXRhLXNlcnZpY2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IElGb3JtRGF0YUNvbXBvbmVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZm9ybS1kYXRhLWNvbXBvbmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSVBlcm1pc3Npb25zU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvcGVybWlzc2lvbnMtc2VydmljZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT0RhdGVWYWx1ZVR5cGUgfSBmcm9tICcuLi90eXBlcy9vLWRhdGUtdmFsdWUudHlwZSc7XG5pbXBvcnQgeyBPQ29uZmlndXJlU2VydmljZUFyZ3MgfSBmcm9tICcuLi90eXBlcy9jb25maWd1cmUtc2VydmljZS1hcmdzLnR5cGUnO1xuaW1wb3J0IHsgQmFzZTY0IH0gZnJvbSAnLi9iYXNlNjQnO1xuaW1wb3J0IHsgQ29kZXMgfSBmcm9tICcuL2NvZGVzJztcbmltcG9ydCB7IE9Db25maWd1cmVNZXNzYWdlU2VydmljZUFyZ3MgfSBmcm9tICcuLi90eXBlcy9jb25maWd1cmUtbWVzc2FnZS1zZXJ2aWNlLWFyZ3MudHlwZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuZXhwb3J0IGNsYXNzIFV0aWwge1xuXG4gIHN0YXRpYyByZWFkb25seSBjb2x1bW5BZ2dyZWdhdGVzID0gWydzdW0nLCAnY291bnQnLCAnYXZnJywgJ21pbicsICdtYXgnXTtcblxuICBzdGF0aWMgaXNPYmplY3QodmFsOiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWxUeXBlID0gdHlwZW9mIHZhbDtcbiAgICByZXR1cm4gdmFsVHlwZSA9PT0gJ29iamVjdCc7XG4gIH1cblxuICBzdGF0aWMgaXNBcnJheSh2YWw6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWwgaW5zdGFuY2VvZiBBcnJheTtcbiAgfVxuXG4gIHN0YXRpYyBwYXJzZUJvb2xlYW4odmFsdWU6IHN0cmluZywgZGVmYXVsdFZhbHVlPzogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIGlmICgodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgJiYgKHZhbHVlLnRvVXBwZXJDYXNlKCkgPT09ICdUUlVFJyB8fCB2YWx1ZS50b1VwcGVyQ2FzZSgpID09PSAnWUVTJykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpICYmICh2YWx1ZS50b1VwcGVyQ2FzZSgpID09PSAnRkFMU0UnIHx8IHZhbHVlLnRvVXBwZXJDYXNlKCkgPT09ICdOTycpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChVdGlsLmlzRGVmaW5lZChkZWZhdWx0VmFsdWUpKSB7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzdGF0aWMgcGFyc2VBcnJheSh2YWx1ZTogc3RyaW5nLCBleGNsdWRlUmVwZWF0ZWQ6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZ1tdIHtcbiAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICByZXN1bHQgPSB2YWx1ZS5zcGxpdChDb2Rlcy5BUlJBWV9JTlBVVF9TRVBBUkFUT1IpO1xuICAgIH1cbiAgICBpZiAoZXhjbHVkZVJlcGVhdGVkICYmIHJlc3VsdC5sZW5ndGggPiAwKSB7XG4gICAgICByZXN1bHQgPSBBcnJheS5mcm9tKG5ldyBTZXQocmVzdWx0KSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBvYmplY3Qgd2l0aCBwYXJlbnQga2V5cyBlcXVpdmFsZW5jZXMuXG4gICAqIEBwYXJhbSAgcEtleXNBcnJheSBBcnJheSBvZiBzdHJpbmdzLiBBY2NlcHRlZCBmb3JtYXQ6IGtleSB8IGtleTphbGlhc1xuICAgKiBAcmV0dXJucyBPYmplY3RcbiAgICovXG4gIHN0YXRpYyBwYXJzZVBhcmVudEtleXNFcXVpdmFsZW5jZXMocEtleXNBcnJheTogQXJyYXk8c3RyaW5nPiwgc2VwYXJhdG9yOiBzdHJpbmcgPSAnOicpOiBvYmplY3Qge1xuICAgIGNvbnN0IGVxdWl2YWxlbmNlcyA9IHt9O1xuICAgIGlmIChwS2V5c0FycmF5ICYmIHBLZXlzQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgcEtleXNBcnJheS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBhdXggPSBpdGVtLnNwbGl0KHNlcGFyYXRvcik7XG4gICAgICAgIGlmIChhdXggJiYgYXV4Lmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIGlmICgvLitcXFsuK1xcXS8udGVzdChhdXhbMV0pKSB7XG4gICAgICAgICAgICBjb25zdCBlcXVpdktleSA9IGF1eFsxXS5zdWJzdHJpbmcoMCwgYXV4WzFdLmluZGV4T2YoJ1snKSk7XG4gICAgICAgICAgICBjb25zdCBlcXVpdlZhbHVlID0gYXV4WzFdLnN1YnN0cmluZyhhdXhbMV0uaW5kZXhPZignWycpICsgMSwgYXV4WzFdLmluZGV4T2YoJ10nKSk7XG4gICAgICAgICAgICBjb25zdCBlcXVpdiA9IHt9O1xuICAgICAgICAgICAgZXF1aXZbZXF1aXZLZXldID0gZXF1aXZWYWx1ZTtcbiAgICAgICAgICAgIGVxdWl2YWxlbmNlc1thdXhbMF1dID0gZXF1aXY7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVxdWl2YWxlbmNlc1thdXhbMF1dID0gYXV4WzFdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChhdXggJiYgYXV4Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIGVxdWl2YWxlbmNlc1tpdGVtXSA9IGl0ZW07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZXF1aXZhbGVuY2VzO1xuICB9XG5cbiAgc3RhdGljIGVuY29kZVBhcmVudEtleXMocGFyZW50S2V5czogb2JqZWN0KTogc3RyaW5nIHtcbiAgICBsZXQgZW5jb2RlZDogc3RyaW5nID0gJyc7XG4gICAgaWYgKHBhcmVudEtleXMpIHtcbiAgICAgIGVuY29kZWQgPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHBhcmVudEtleXMpKTtcbiAgICB9XG4gICAgcmV0dXJuIGVuY29kZWQ7XG4gIH1cblxuICBzdGF0aWMgZGVjb2RlUGFyZW50S2V5cyhwYXJlbnRLZXlzOiBzdHJpbmcpOiBvYmplY3Qge1xuICAgIGxldCBkZWNvZGVkID0ge307XG4gICAgaWYgKHBhcmVudEtleXMgJiYgcGFyZW50S2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBkID0gQmFzZTY0LmRlY29kZShwYXJlbnRLZXlzKTtcbiAgICAgIGRlY29kZWQgPSBKU09OLnBhcnNlKGQpO1xuICAgIH1cbiAgICByZXR1cm4gZGVjb2RlZDtcbiAgfVxuXG4gIHN0YXRpYyBpc0FycmF5RW1wdHkoYXJyYXk6IGFueVtdKTogYm9vbGVhbiB7XG4gICAgaWYgKGFycmF5ICYmIGFycmF5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0YXRpYyBpc09iamVjdEVtcHR5KG9iajogb2JqZWN0KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3ZXRoZXIgc3BlY2lmaWVkIHNlcnZpY2UgYXMgYXJndW1lbnQgaW1wbGVtZW50cyAnSURhdGFTZXJ2aWNlJyBpbnRlcmZhY2VcbiAgICogQHBhcmFtIGFyZyBUaGUgc2VydmljZSBpbnN0YW5jZSBmb3IgY2hlY2tpbmcuXG4gICAqIEByZXR1cm5zIGJvb2xlYW5cbiAgICovXG4gIHN0YXRpYyBpc0RhdGFTZXJ2aWNlKGFyZzogYW55KTogYXJnIGlzIElEYXRhU2VydmljZSB7XG4gICAgaWYgKGFyZyA9PT0gdW5kZWZpbmVkIHx8IGFyZyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gKChhcmcgYXMgSURhdGFTZXJ2aWNlKS5nZXREZWZhdWx0U2VydmljZUNvbmZpZ3VyYXRpb24gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgKGFyZyBhcyBJRGF0YVNlcnZpY2UpLmNvbmZpZ3VyZVNlcnZpY2UgIT09IHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdldGhlciBzcGVjaWZpZWQgc2VydmljZSBhcyBhcmd1bWVudCBpbXBsZW1lbnRzICdJRGF0YVNlcnZpY2UnIGludGVyZmFjZVxuICAgKiBAcGFyYW0gYXJnIFRoZSBzZXJ2aWNlIGluc3RhbmNlIGZvciBjaGVja2luZy5cbiAgICogQHJldHVybnMgYm9vbGVhblxuICAgKi9cbiAgc3RhdGljIGlzUGVybWlzc2lvbnNTZXJ2aWNlKGFyZzogYW55KTogYXJnIGlzIElQZXJtaXNzaW9uc1NlcnZpY2Uge1xuICAgIGlmIChhcmcgPT09IHVuZGVmaW5lZCB8fCBhcmcgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuICgoYXJnIGFzIElQZXJtaXNzaW9uc1NlcnZpY2UpLmxvYWRQZXJtaXNzaW9ucyAhPT0gdW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2V0aGVyIHNwZWNpZmllZCBjb21wb25lbnQgYXMgYXJndW1lbnQgaW1wbGVtZW50cyAnSUZvcm1EYXRhQ29tcG9uZW50JyBpbnRlcmZhY2VcbiAgICogQHBhcmFtIGFyZyBUaGUgY29tcG9uZW50IGluc3RhbmNlIGZvciBjaGVja2luZy5cbiAgICogQHJldHVybnMgYm9vbGVhblxuICAgKi9cbiAgc3RhdGljIGlzRm9ybURhdGFDb21wb25lbnQoYXJnOiBhbnkpOiBhcmcgaXMgSUZvcm1EYXRhQ29tcG9uZW50IHtcbiAgICBpZiAoYXJnID09PSB1bmRlZmluZWQgfHwgYXJnID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAoKGFyZyBhcyBJRm9ybURhdGFDb21wb25lbnQpLmlzQXV0b21hdGljQmluZGluZyAhPT0gdW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wYXJlIGlzIGVxdWFsIHR3byBvYmplY3RzXG4gICAqIEBwYXJhbSBhIE9iamVjdCAxXG4gICAqIEBwYXJhbSBiIE9iamVjdCAyXG4gICAqXG4gICAqL1xuICBzdGF0aWMgaXNFcXVpdmFsZW50KGEsIGIpIHtcbiAgICAvLyBDcmVhdGUgYXJyYXlzIG9mIHByb3BlcnR5IG5hbWVzXG4gICAgY29uc3QgYVByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYSk7XG4gICAgY29uc3QgYlByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYik7XG5cbiAgICAvLyBJZiBudW1iZXIgb2YgcHJvcGVydGllcyBpcyBkaWZmZXJlbnQsIG9iamVjdHMgYXJlIG5vdCBlcXVpdmFsZW50XG4gICAgaWYgKGFQcm9wcy5sZW5ndGggIT09IGJQcm9wcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFQcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcHJvcE5hbWUgPSBhUHJvcHNbaV07XG4gICAgICAvLyBJZiB2YWx1ZXMgb2Ygc2FtZSBwcm9wZXJ0eSBhcmUgbm90IGVxdWFsLCBvYmplY3RzIGFyZSBub3QgZXF1aXZhbGVudFxuICAgICAgbGV0IGJWYWx1ZSA9IGJbcHJvcE5hbWVdO1xuICAgICAgaWYgKHR5cGVvZiBhW3Byb3BOYW1lXSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgY29uc3QgaW50QiA9IHBhcnNlSW50KGJWYWx1ZSwgMTApO1xuICAgICAgICBiVmFsdWUgPSBpc05hTihpbnRCKSA/IGJWYWx1ZSA6IGludEI7XG4gICAgICB9XG4gICAgICBpZiAoYVtwcm9wTmFtZV0gIT09IGJWYWx1ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgbWFkZSBpdCB0aGlzIGZhciwgb2JqZWN0cyBhcmUgY29uc2lkZXJlZCBlcXVpdmFsZW50XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzdGF0aWMgZXF1YWxzKG8xOiBhbnksIG8yOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAobzEgPT09IG8yKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKG8xID09PSBudWxsIHx8IG8yID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChvMSAhPT0gbzEgJiYgbzIgIT09IG8yKSB7XG4gICAgICAvLyBOYU4gPT09IE5hTlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IHQxID0gdHlwZW9mIG8xO1xuICAgIGNvbnN0IHQyID0gdHlwZW9mIG8yO1xuICAgIGxldCBsZW5ndGg6IG51bWJlcjtcbiAgICBsZXQga2V5OiBhbnk7XG4gICAgbGV0IGtleVNldDogYW55O1xuICAgIGlmICh0MSA9PT0gdDIgJiYgdDEgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvMSkpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG8yKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBsZW5ndGggPSBvMS5sZW5ndGg7XG4gICAgICAgIGlmIChsZW5ndGggPT09IG8yLmxlbmd0aCkge1xuICAgICAgICAgIGZvciAoa2V5ID0gMDsga2V5IDwgbGVuZ3RoOyBrZXkrKykge1xuICAgICAgICAgICAgaWYgKCFVdGlsLmVxdWFscyhvMVtrZXldLCBvMltrZXldKSkge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvMikpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAga2V5U2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgZm9yIChrZXkgaW4gbzEpIHtcbiAgICAgICAgICBpZiAoIVV0aWwuZXF1YWxzKG8xW2tleV0sIG8yW2tleV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGtleVNldFtrZXldID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGtleSBpbiBvMikge1xuICAgICAgICAgIGlmICghKGtleSBpbiBrZXlTZXQpICYmIHR5cGVvZiBvMltrZXldICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3RhdGljIGlzRGVmaW5lZCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgIT09IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYSByYW5kb20gbnVtYmVyXG4gICovXG4gIHN0YXRpYyByYW5kb21OdW1iZXIoKSB7XG4gICAgY29uc3QgcmFuZG9tQXJyYXkgPSBuZXcgVWludDMyQXJyYXkoMSk7XG4gICAgd2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXMocmFuZG9tQXJyYXkpO1xuICAgIHJldHVybiByYW5kb21BcnJheVswXTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHByb3ZpZGVkIHN0cmluZyBpbiBsb3dlcmNhc2UgYW5kIHdpdGhvdXQgYWNjZW50IG1hcmtzLlxuICAgKiBAcGFyYW0gdmFsdWUgdGhlIHRleHQgdG8gbm9ybWFsaXplXG4gICAqL1xuICBzdGF0aWMgbm9ybWFsaXplU3RyaW5nKHZhbHVlOiBzdHJpbmcsIHRvTG93ZXJDYXNlOiBib29sZWFuID0gdHJ1ZSk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHZhbHVlLm5vcm1hbGl6ZSgnTkZEJykucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xuICAgICAgICBpZiAodG9Mb3dlckNhc2UpIHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcHJvdmlkZWQgYXJyYXkgZmxhdHRlbmQuXG4gICAqIEBwYXJhbSBhcnJheSB0aGUgYXJyYXkgdG8gZmxhdFxuICAgKi9cbiAgc3RhdGljIGZsYXR0ZW4oYXJyYXk6IEFycmF5PGFueT4pOiBBcnJheTxhbnk+IHtcbiAgICBsZXQgZmxhdHRlbmVkID0gW107XG4gICAgZm9yIChjb25zdCBjdXJyZW50IG9mIGFycmF5KSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY3VycmVudCkpIHtcbiAgICAgICAgZmxhdHRlbmVkLnB1c2goY3VycmVudCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBjaGlsZEN1cnJlbnQgb2YgY3VycmVudCkge1xuICAgICAgICBmbGF0dGVuZWQucHVzaChjaGlsZEN1cnJlbnQpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmbGF0dGVuZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbGlzdCB3aXRoIGFsbCB0aGUgdmFsdWVzIGZyb20gdGhlIHByb3ZpZGVkIG9iamVjdC5cbiAgICogQHBhcmFtIG9iaiB0aGUgb2JqZWN0XG4gICAqL1xuICBzdGF0aWMgZ2V0VmFsdWVzRnJvbU9iamVjdChvYmo6IG9iamVjdCA9IHt9KTogQXJyYXk8YW55PiB7XG4gICAgY29uc3QgYXJyYXk6IEFycmF5PGFueT4gPSBbXTtcbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygb2JqW2tleV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGFycmF5LnB1c2goVXRpbC5nZXRWYWx1ZXNGcm9tT2JqZWN0KG9ialtrZXldKSk7XG4gICAgICB9XG4gICAgICBhcnJheS5wdXNoKG9ialtrZXldKTtcbiAgICB9KTtcbiAgICByZXR1cm4gVXRpbC5mbGF0dGVuKGFycmF5KTtcbiAgfVxuXG4gIHN0YXRpYyBwYXJzZUljb25Qb3NpdGlvbih2YWx1ZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCByZXN1bHQgPSBkZWZhdWx0VmFsdWUgfHwgQ29kZXMuSUNPTl9QT1NJVElPTl9MRUZUO1xuICAgIGNvbnN0IGF2YWlsYWJsZVBvc2l0aW9ucyA9IFtDb2Rlcy5JQ09OX1BPU0lUSU9OX0xFRlQsIENvZGVzLklDT05fUE9TSVRJT05fUklHSFRdO1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdCA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuICAgIGlmIChhdmFpbGFibGVQb3NpdGlvbnMuaW5kZXhPZihyZXN1bHQpID09PSAtMSkge1xuICAgICAgcmVzdWx0ID0gZGVmYXVsdFZhbHVlIHx8IENvZGVzLklDT05fUE9TSVRJT05fTEVGVDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHN0YXRpYyBjb3B5VG9DbGlwYm9hcmQoZGF0YTogc3RyaW5nKSB7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY29weScsIChlOiBDbGlwYm9hcmRFdmVudCkgPT4ge1xuICAgICAgZS5jbGlwYm9hcmREYXRhLnNldERhdGEoJ3RleHQvcGxhaW4nLCBkYXRhKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NvcHknLCBudWxsKTtcbiAgICB9KTtcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpO1xuICB9XG5cbiAgc3RhdGljIGNoZWNrUGl4ZWxzVmFsdWVTdHJpbmcodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgncHgnKSA6IGZhbHNlO1xuICB9XG5cbiAgc3RhdGljIGV4dHJhY3RQaXhlbHNWYWx1ZSh2YWx1ZTogYW55LCBkZWZhdWx0VmFsdWU/OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCByZXN1bHQ6IG51bWJlciA9IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbiAgICBpZiAoVXRpbC5jaGVja1BpeGVsc1ZhbHVlU3RyaW5nKHZhbHVlKSkge1xuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VGbG9hdCh2YWx1ZS5zdWJzdHIoMCwgdmFsdWUubGVuZ3RoIC0gJ3B4Jy5sZW5ndGgpKTtcbiAgICAgIHJlc3VsdCA9IGlzTmFOKHBhcnNlZCkgPyBkZWZhdWx0VmFsdWUgOiBwYXJzZWQ7XG4gICAgfVxuICAgIHJldHVybiBVdGlsLmlzRGVmaW5lZChyZXN1bHQpID8gcmVzdWx0IDogZGVmYXVsdFZhbHVlO1xuICB9XG4gIC8qKlxuICAgKiBBZGRlZCBjbGFzcyAnYWNjZW50JyBpbiA8bWF0LWZvcm0tZmllbGQ+IGFuZCBzZXQgdGhlIGNvbG9yICBhY2NlbnQgaW4gdGhlIGljb25zXG4gICAqIEBwYXJhbSBlbFJlZlxuICAgKiBAcGFyYW0gb0lucHV0c09wdGlvbnNcbiAgICovXG5cbiAgc3RhdGljIHBhcnNlT0lucHV0c09wdGlvbnMoZWxSZWYsIG9JbnB1dHNPcHRpb25zKSB7XG5cbiAgICBpZiAob0lucHV0c09wdGlvbnMuaWNvbkNvbG9yID09PSBDb2Rlcy5PX0lOUFVUU19PUFRJT05TX0NPTE9SX0FDQ0VOVCkge1xuICAgICAgY29uc3QgbWF0Rm9ybUZpZWxkRUwgPSBlbFJlZi5uYXRpdmVFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdtYXQtZm9ybS1maWVsZCcpWzBdO1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKG1hdEZvcm1GaWVsZEVMKSkge1xuICAgICAgICBtYXRGb3JtRmllbGRFTC5jbGFzc0xpc3QuYWRkKCdhY2NlbnQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiAgUmV0dXJuIHN0cmluZyB3aXRoIGVzY2FwZWQgc3BlY2lhbCBjaGFyYWN0ZXJcbiAgICovXG4gIHN0YXRpYyBlc2NhcGVTcGVjaWFsQ2hhcmFjdGVyKFM6IHN0cmluZyk6IHN0cmluZyB7XG5cbiAgICBjb25zdCBzdHIgPSBTdHJpbmcoUyk7XG5cbiAgICBjb25zdCBjcExpc3QgPSBBcnJheS5mcm9tKHN0cltTeW1ib2wuaXRlcmF0b3JdKCkpO1xuXG4gICAgY29uc3QgY3VMaXN0ID0gW107XG4gICAgZm9yIChjb25zdCBjIG9mIGNwTGlzdCkge1xuICAgICAgLy8gaS4gSWYgYyBpcyBhIFNwZWNpYWxDaGFyYWN0ZXIgdGhlbiBkbzpcbiAgICAgIGlmICgnXiRcXFxcLiorPygpW117fXwnLmluZGV4T2YoYykgIT09IC0xKSB7XG4gICAgICAgIC8vIGEuIEFwcGVuZCBcIlxcXCIgdG8gY3VMaXN0LlxuICAgICAgICBjdUxpc3QucHVzaCgnXFxcXCcpO1xuICAgICAgfVxuICAgICAgLy8gQXBwZW5kIGMgdG8gY3BMaXN0LlxuICAgICAgY3VMaXN0LnB1c2goYyk7XG4gICAgfVxuICAgIGNvbnN0IEwgPSBjdUxpc3Quam9pbignJyk7XG4gICAgcmV0dXJuIEw7XG5cbiAgfVxuXG4gIHN0YXRpYyBpc0FycmF5RXF1YWwoYXJyYXkxOiBBcnJheTxhbnk+LCBhcnJheTI6IEFycmF5PGFueT4pIHtcbiAgICByZXR1cm4gYXJyYXkxLmxlbmd0aCA9PT0gYXJyYXkyLmxlbmd0aCAmJiBhcnJheTEuZXZlcnkoKHYsIGkpID0+IHYgPT09IGFycmF5MltpXSlcbiAgfTtcblxuICBzdGF0aWMgZGlmZmVyZW5jZUFycmF5cyhhcnJheTE6IEFycmF5PGFueT4sIGFycmF5MjogQXJyYXk8YW55Pik6IEFycmF5PGFueT4ge1xuICAgIGNvbnN0IGRpZmZlcmVuY2UgPSBhcnJheTEuZmlsdGVyKG9iaiA9PiB7XG4gICAgICByZXR1cm4gIWFycmF5Mi5zb21lKG9iajIgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5lcXVhbHMob2JqLCBvYmoyKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBkaWZmZXJlbmNlO1xuICB9XG5cbiAgc3RhdGljIGNvbnZlcnRUb09EYXRlVmFsdWVUeXBlKHZhbDogYW55KTogT0RhdGVWYWx1ZVR5cGUge1xuICAgIGxldCByZXN1bHQ6IE9EYXRlVmFsdWVUeXBlID0gJ3RpbWVzdGFtcCc7XG4gICAgY29uc3QgbG93ZXJWYWwgPSAodmFsIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChsb3dlclZhbCA9PT0gJ3N0cmluZycgfHwgbG93ZXJWYWwgPT09ICdkYXRlJyB8fCBsb3dlclZhbCA9PT0gJ3RpbWVzdGFtcCcgfHwgbG93ZXJWYWwgPT09ICdpc28tODYwMScpIHtcbiAgICAgIHJlc3VsdCA9IGxvd2VyVmFsO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cblxuICBzdGF0aWMgdW5pcXVlQnkoYTogQXJyYXk8YW55Piwga2V5KSB7XG4gICAgY29uc3Qgc2VlbiA9IHt9O1xuICAgIHJldHVybiBhLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgayA9IGtleShpdGVtKTtcbiAgICAgIHJldHVybiBzZWVuLmhhc093blByb3BlcnR5KGspID8gZmFsc2UgOiAoc2VlbltrXSA9IHRydWUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBhcmVzIHR3byBzdHJpbmdzIGFuZCByZXR1cm5zIGEgbmVnYXRpdmUgdmFsdWUgaWYgZmlyc3QgYXJndW1lbnQgaXMgbGVzcyB0aGFuIHNlY29uZCBhcmd1bWVudCwgemVybyBpZiB0aGV5J3JlIGVxdWFsIGFuZCBhIHBvc2l0aXZlIHZhbHVlIG90aGVyd2lzZS5cbiAgICovXG4gIHN0YXRpYyBjb21wYXJlKGE6IHN0cmluZywgYjogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBpZiAoYSA8IGIpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgaWYgKGEgPiBiKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBzdGF0aWMgcGFyc2VCeVZhbHVlVHlwZSh2YWx1ZTogYW55LCB2YWx1ZVR5cGU6IE9EYXRlVmFsdWVUeXBlLCBmb3JtYXQ6IHN0cmluZykge1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cblxuICAgIGxldCByZXN1bHQgPSB2YWx1ZTtcbiAgICBjb25zdCBtID0gbW9tZW50KHZhbHVlKTtcbiAgICBpZiAoIW0uaXNWYWxpZCgpKSB7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgICBzd2l0Y2ggKHZhbHVlVHlwZSkge1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgcmVzdWx0ID0gbS5mb3JtYXQoZm9ybWF0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgcmVzdWx0ID0gbS50b0RhdGUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdpc28tODYwMSc6XG4gICAgICAgIHJlc3VsdCA9IG0udG9JU09TdHJpbmcoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0aW1lc3RhbXAnOlxuICAgICAgICByZXN1bHQgPSBtLnZhbHVlT2YoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXN1bHQgPSB2b2lkIDA7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3RhdGljIHdyYXBJbnRvT2JzZXJ2YWJsZTxUPih2YWx1ZTogVCB8IFByb21pc2U8VD4gfCBPYnNlcnZhYmxlPFQ+KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgaWYgKGlzT2JzZXJ2YWJsZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAoVXRpbC5pc1Byb21pc2UodmFsdWUpKSB7XG4gICAgICAvLyBVc2UgYFByb21pc2UucmVzb2x2ZSgpYCB0byB3cmFwIHByb21pc2UtbGlrZSBpbnN0YW5jZXMuXG4gICAgICByZXR1cm4gZnJvbShQcm9taXNlLnJlc29sdmUodmFsdWUpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2YodmFsdWUpO1xuICB9XG5cbiAgc3RhdGljIGlzUHJvbWlzZTxUID0gYW55PihvYmo6IGFueSk6IG9iaiBpcyBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gISFvYmogJiYgdHlwZW9mIG9iai50aGVuID09PSAnZnVuY3Rpb24nO1xuICB9XG5cblxuICBzdGF0aWMgY29uZmlndXJlU2VydmljZShjb25maWd1cmVTZXJ2aWNlQXJnczogT0NvbmZpZ3VyZVNlcnZpY2VBcmdzKTogYW55IHtcbiAgICBsZXQgZGF0YVNlcnZpY2UgPSBjb25maWd1cmVTZXJ2aWNlQXJncy5iYXNlU2VydmljZTtcbiAgICBjb25zdCBlbnRpdHkgPSBjb25maWd1cmVTZXJ2aWNlQXJncy5lbnRpdHk7XG4gICAgY29uc3Qgc2VydmljZSA9IGNvbmZpZ3VyZVNlcnZpY2VBcmdzLnNlcnZpY2U7XG4gICAgY29uc3Qgc2VydmljZVR5cGUgPSBjb25maWd1cmVTZXJ2aWNlQXJncy5zZXJ2aWNlVHlwZTtcbiAgICBjb25zdCBpbmplY3RvciA9IGNvbmZpZ3VyZVNlcnZpY2VBcmdzLmluamVjdG9yO1xuXG4gICAgaWYgKHNlcnZpY2VUeXBlKSB7XG4gICAgICBkYXRhU2VydmljZSA9IHNlcnZpY2VUeXBlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgZGF0YVNlcnZpY2UgPSBpbmplY3Rvci5nZXQ8YW55PihkYXRhU2VydmljZSk7XG4gICAgICBpZiAoc2VydmljZVR5cGUpIHtcbiAgICAgICAgZGF0YVNlcnZpY2UgPSBVdGlsLmNyZWF0ZVNlcnZpY2VJbnN0YW5jZShkYXRhU2VydmljZSwgaW5qZWN0b3IpXG4gICAgICB9XG4gICAgICBpZiAoVXRpbC5pc0RhdGFTZXJ2aWNlKGRhdGFTZXJ2aWNlKSkge1xuICAgICAgICBjb25zdCBzZXJ2aWNlQ2ZnID0gZGF0YVNlcnZpY2UuZ2V0RGVmYXVsdFNlcnZpY2VDb25maWd1cmF0aW9uKHNlcnZpY2UpO1xuICAgICAgICBpZiAoZW50aXR5KSB7XG4gICAgICAgICAgc2VydmljZUNmZy5lbnRpdHkgPSBlbnRpdHk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVNlcnZpY2UuY29uZmlndXJlU2VydmljZShzZXJ2aWNlQ2ZnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YVNlcnZpY2U7XG4gIH1cblxuICAvKipcbiAqIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIHByb3ZpZGVkIHNlcnZpY2UgY2xhc3NcbiAqIEBwYXJhbSBjbGF6eiB0aGUgY2xhc3MgcmVmZXJlbmNlXG4gKiBAcGFyYW0gaW5qZWN0b3IgdGhlIGluamVjdG9yXG4gKi9cbiAgc3RhdGljIGNyZWF0ZVNlcnZpY2VJbnN0YW5jZShjbGF6ejogYW55LCBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKGNsYXp6KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld0luc3RhbmNlID0gbmV3IGNsYXp6KGluamVjdG9yKTtcbiAgICByZXR1cm4gbmV3SW5zdGFuY2U7XG4gIH1cblxuICBzdGF0aWMgY29uZmlndXJlTWVzc2FnZVNlcnZpY2UoY29uZmlndXJlU2VydmljZUFyZ3M6IE9Db25maWd1cmVNZXNzYWdlU2VydmljZUFyZ3MpOiBhbnkge1xuICAgIGxldCBtZXNzYWdlU2VydmljZSA9IGNvbmZpZ3VyZVNlcnZpY2VBcmdzLmJhc2VTZXJ2aWNlO1xuICAgIGNvbnN0IHNlcnZpY2VUeXBlID0gY29uZmlndXJlU2VydmljZUFyZ3Muc2VydmljZVR5cGU7XG4gICAgY29uc3QgaW5qZWN0b3IgPSBjb25maWd1cmVTZXJ2aWNlQXJncy5pbmplY3RvcjtcblxuICAgIGlmIChzZXJ2aWNlVHlwZSkge1xuICAgICAgbWVzc2FnZVNlcnZpY2UgPSBzZXJ2aWNlVHlwZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIG1lc3NhZ2VTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0PGFueT4obWVzc2FnZVNlcnZpY2UpO1xuICAgICAgaWYgKHNlcnZpY2VUeXBlKSB7XG4gICAgICAgIG1lc3NhZ2VTZXJ2aWNlID0gVXRpbC5jcmVhdGVTZXJ2aWNlSW5zdGFuY2UobWVzc2FnZVNlcnZpY2UsIGluamVjdG9yKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlU2VydmljZTtcbiAgfVxuXG4gIHN0YXRpYyBpc0Jhc2U2NChmaWxlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cCgvXihbQS1aYS16MC05K1xcL117NH0pKihbQS1aYS16MC05K1xcL117NH18W0EtWmEtejAtOStcXC9dezN9PXxbQS1aYS16MC05K1xcL117Mn09PSkkL2cpXG5cbiAgICBpZiAoZmlsZS5zdWJzdHJpbmcoMCwgNCkgPT09ICdkYXRhJykge1xuICAgICAgZmlsZSA9IGZpbGUuc3Vic3RyaW5nKGZpbGUuaW5kZXhPZignYmFzZTY0JykgKyA3KTtcbiAgICB9XG4gICAgcmV0dXJuIHBhdHRlcm4udGVzdChmaWxlLnJlcGxhY2UoL1xccysvZywgJycpKTtcblxuICB9XG4gIC8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IHRvIGEgSlNPTiBzdHJpbmcsIGF2b2lkaW5nIGNpcmN1bGFyIHJlZmVyZW5jZXMuXG4gKiBAcGFyYW0gb2JqIFRoZSBvYmplY3QgdG8gY29udmVydCB0byBKU09OLlxuICogQHJldHVybnMgQSBKU09OIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIG9iamVjdC5cbiAqL1xuICBzdGF0aWMgc3RyaW5naWZ5KG9iajogb2JqZWN0KSB7XG4gICAgbGV0IGNhY2hlID0gW107XG4gICAgbGV0IHN0ciA9IEpTT04uc3RyaW5naWZ5KG9iaiwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKGNhY2hlLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuICAgICAgICAgIHJldHVybjsgLy8gQXZvaWQgY2lyY3VsYXIgcmVmZXJlbmNlc1xuICAgICAgICB9XG4gICAgICAgIGNhY2hlLnB1c2godmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0pO1xuICAgIGNhY2hlID0gbnVsbDtcbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgc3RhdGljIHNvcnRGdW5jdGlvbihwcm9wZXJ0eUE6IHN0cmluZyB8IG51bWJlciwgcHJvcGVydHlCOiBzdHJpbmcgfCBudW1iZXIsIGFjdGl2ZVNvcnREaXJlY3Rpb246IHN0cmluZykge1xuXG4gICAgbGV0IHZhbHVlQTogc3RyaW5nIHwgbnVtYmVyID0gJyc7XG4gICAgbGV0IHZhbHVlQjogc3RyaW5nIHwgbnVtYmVyID0gJyc7XG5cbiAgICBpZiAoVXRpbC5pc0RlZmluZWQocHJvcGVydHlBKSkge1xuICAgICAgdmFsdWVBID0gaXNOYU4oK3Byb3BlcnR5QSkgPyBwcm9wZXJ0eUEudG9TdHJpbmcoKS50cmltKCkudG9Mb3dlckNhc2UoKSA6ICtwcm9wZXJ0eUE7XG4gICAgfVxuXG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHByb3BlcnR5QikpIHtcbiAgICAgIHZhbHVlQiA9IGlzTmFOKCtwcm9wZXJ0eUIpID8gcHJvcGVydHlCLnRvU3RyaW5nKCkudHJpbSgpLnRvTG93ZXJDYXNlKCkgOiArcHJvcGVydHlCO1xuICAgIH1cbiAgICByZXR1cm4gKHZhbHVlQSA8PSB2YWx1ZUIgPyAtMSA6IDEpICogKGFjdGl2ZVNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gMSA6IC0xKTtcbiAgfVxuXG4gIHN0YXRpYyBjbG9uZUFycmF5PFQ+KGFycjogVFtdKTogVFtdIHtcbiAgICBjb25zdCBjbG9uZWRBcnJheSA9IGFyci5tYXAoKHgpID0+IE9iamVjdC5hc3NpZ24oe30sIHgpKVxuICAgIHJldHVybiBjbG9uZWRBcnJheTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRMYXN0QWN0aXZhdGVSb3V0ZShyb3V0ZVNuYXBzaG90OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB7XG4gICAgbGV0IGNoaWxkID0gcm91dGVTbmFwc2hvdDtcbiAgICB3aGlsZSAoY2hpbGQuZmlyc3RDaGlsZCkge1xuICAgICAgY2hpbGQgPSBjaGlsZC5maXJzdENoaWxkO1xuICAgIH1cbiAgICByZXR1cm4gY2hpbGQ7XG4gIH1cbn1cbiJdfQ==