@pepperi-addons/ngx-composite-lib 0.5.0-ng16.4 → 0.5.0-ng17.1

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 (100) hide show
  1. package/esm2022/color-settings/color-settings.component.mjs +5 -5
  2. package/esm2022/color-settings/color-settings.module.mjs +4 -4
  3. package/esm2022/core/common/directives/reset-configuration-field.directive.mjs +5 -5
  4. package/esm2022/core/common/services/dimx.service.mjs +4 -4
  5. package/esm2022/core/common/services/utilities.service.mjs +4 -4
  6. package/esm2022/data-view-builder/data-view-builder.component.mjs +5 -5
  7. package/esm2022/data-view-builder/data-view-builder.module.mjs +5 -5
  8. package/esm2022/data-view-builder/data-view-builder.service.mjs +4 -4
  9. package/esm2022/data-view-builder/menu-data-view/menu-data-view.component.mjs +5 -5
  10. package/esm2022/file-status-panel/file-status-panel.component.mjs +6 -6
  11. package/esm2022/file-status-panel/file-status-panel.module.mjs +5 -5
  12. package/esm2022/flow-picker-button/flow-picker-button.component.mjs +5 -5
  13. package/esm2022/flow-picker-button/flow-picker-button.module.mjs +4 -4
  14. package/esm2022/flow-picker-button/flow-picker-button.service.mjs +4 -4
  15. package/esm2022/generic-fields-builder/field-container/field-container.component.mjs +4 -4
  16. package/esm2022/generic-fields-builder/generic-fields-builder.component.mjs +5 -5
  17. package/esm2022/generic-fields-builder/generic-fields-builder.module.mjs +5 -5
  18. package/esm2022/generic-fields-builder/generic-fields-builder.service.mjs +4 -4
  19. package/esm2022/generic-form/generic-form.component.mjs +5 -5
  20. package/esm2022/generic-form/generic-form.module.mjs +4 -4
  21. package/esm2022/generic-form/generic-form.service.mjs +4 -4
  22. package/esm2022/generic-list/generic-list.component.mjs +5 -5
  23. package/esm2022/generic-list/generic-list.module.mjs +5 -5
  24. package/esm2022/generic-list/generic-list.service.mjs +4 -4
  25. package/esm2022/group-buttons-settings/group-buttons-settings.component.mjs +5 -5
  26. package/esm2022/group-buttons-settings/group-buttons-settings.module.mjs +5 -5
  27. package/esm2022/icon-picker/icon-picker.component.mjs +5 -5
  28. package/esm2022/icon-picker/icon-picker.module.mjs +4 -4
  29. package/esm2022/icon-picker/icon-picker.service.mjs +4 -4
  30. package/esm2022/layout-builder/hide-in/hide-in.component.mjs +5 -5
  31. package/esm2022/layout-builder/hide-in/hide-in.module.mjs +5 -5
  32. package/esm2022/layout-builder/layout/layout.component.mjs +6 -6
  33. package/esm2022/layout-builder/layout/layout.module.mjs +4 -4
  34. package/esm2022/layout-builder/layout-builder-editor/layout-builder-editor.component.mjs +5 -5
  35. package/esm2022/layout-builder/layout-builder-editor/layout-builder-editor.module.mjs +5 -5
  36. package/esm2022/layout-builder/layout-builder-internal.service.mjs +5 -5
  37. package/esm2022/layout-builder/layout-builder.component.mjs +5 -5
  38. package/esm2022/layout-builder/layout-builder.module.mjs +5 -5
  39. package/esm2022/layout-builder/layout-builder.service.mjs +4 -4
  40. package/esm2022/layout-builder/main-editor/main-editor.component.mjs +5 -5
  41. package/esm2022/layout-builder/main-editor/main-editor.module.mjs +5 -5
  42. package/esm2022/layout-builder/section/section.component.mjs +5 -5
  43. package/esm2022/layout-builder/section/section.module.mjs +4 -4
  44. package/esm2022/layout-builder/section-block/section-block.component.mjs +5 -5
  45. package/esm2022/layout-builder/section-block/section-block.module.mjs +4 -4
  46. package/esm2022/layout-builder/section-editor/section-editor.component.mjs +5 -5
  47. package/esm2022/layout-builder/section-editor/section-editor.module.mjs +4 -4
  48. package/esm2022/manage-parameters/manage-parameter/manage-parameter.component.mjs +5 -5
  49. package/esm2022/manage-parameters/manage-parameters.component.mjs +5 -5
  50. package/esm2022/manage-parameters/manage-parameters.module.mjs +4 -4
  51. package/esm2022/manage-parameters/manage-parameters.service.mjs +4 -4
  52. package/esm2022/mapping-parameters/mapping-parameters.component.mjs +5 -5
  53. package/esm2022/mapping-parameters/mapping-parameters.module.mjs +4 -4
  54. package/esm2022/mapping-parameters/mapping-parameters.service.mjs +3 -3
  55. package/esm2022/mapping-parameters/param-map/param-map.component.mjs +5 -5
  56. package/esm2022/ngx-composite-lib.module.mjs +5 -5
  57. package/esm2022/padding-settings/padding-settings.component.mjs +5 -5
  58. package/esm2022/padding-settings/padding-settings.module.mjs +4 -4
  59. package/esm2022/rich-text/rich-text.component.mjs +5 -5
  60. package/esm2022/rich-text/rich-text.module.mjs +5 -5
  61. package/esm2022/rich-text/rich-text.service.mjs +4 -4
  62. package/esm2022/shadow-settings/shadow-settings.component.mjs +5 -5
  63. package/esm2022/shadow-settings/shadow-settings.module.mjs +4 -4
  64. package/esm2022/show-if-badge/show-if-badge.component.mjs +5 -5
  65. package/esm2022/show-if-badge/show-if-badge.module.mjs +5 -5
  66. package/fesm2022/pepperi-addons-ngx-composite-lib-color-settings.mjs +9 -9
  67. package/fesm2022/pepperi-addons-ngx-composite-lib-color-settings.mjs.map +1 -1
  68. package/fesm2022/pepperi-addons-ngx-composite-lib-data-view-builder.mjs +18 -18
  69. package/fesm2022/pepperi-addons-ngx-composite-lib-data-view-builder.mjs.map +1 -1
  70. package/fesm2022/pepperi-addons-ngx-composite-lib-file-status-panel.mjs +11 -11
  71. package/fesm2022/pepperi-addons-ngx-composite-lib-file-status-panel.mjs.map +1 -1
  72. package/fesm2022/pepperi-addons-ngx-composite-lib-flow-picker-button.mjs +13 -13
  73. package/fesm2022/pepperi-addons-ngx-composite-lib-flow-picker-button.mjs.map +1 -1
  74. package/fesm2022/pepperi-addons-ngx-composite-lib-generic-fields-builder.mjs +18 -18
  75. package/fesm2022/pepperi-addons-ngx-composite-lib-generic-fields-builder.mjs.map +1 -1
  76. package/fesm2022/pepperi-addons-ngx-composite-lib-generic-form.mjs +13 -13
  77. package/fesm2022/pepperi-addons-ngx-composite-lib-generic-form.mjs.map +1 -1
  78. package/fesm2022/pepperi-addons-ngx-composite-lib-generic-list.mjs +14 -14
  79. package/fesm2022/pepperi-addons-ngx-composite-lib-generic-list.mjs.map +1 -1
  80. package/fesm2022/pepperi-addons-ngx-composite-lib-group-buttons-settings.mjs +10 -10
  81. package/fesm2022/pepperi-addons-ngx-composite-lib-group-buttons-settings.mjs.map +1 -1
  82. package/fesm2022/pepperi-addons-ngx-composite-lib-icon-picker.mjs +13 -13
  83. package/fesm2022/pepperi-addons-ngx-composite-lib-icon-picker.mjs.map +1 -1
  84. package/fesm2022/pepperi-addons-ngx-composite-lib-layout-builder.mjs +78 -78
  85. package/fesm2022/pepperi-addons-ngx-composite-lib-layout-builder.mjs.map +1 -1
  86. package/fesm2022/pepperi-addons-ngx-composite-lib-manage-parameters.mjs +18 -18
  87. package/fesm2022/pepperi-addons-ngx-composite-lib-manage-parameters.mjs.map +1 -1
  88. package/fesm2022/pepperi-addons-ngx-composite-lib-mapping-parameters.mjs +16 -16
  89. package/fesm2022/pepperi-addons-ngx-composite-lib-mapping-parameters.mjs.map +1 -1
  90. package/fesm2022/pepperi-addons-ngx-composite-lib-padding-settings.mjs +9 -9
  91. package/fesm2022/pepperi-addons-ngx-composite-lib-padding-settings.mjs.map +1 -1
  92. package/fesm2022/pepperi-addons-ngx-composite-lib-rich-text.mjs +14 -14
  93. package/fesm2022/pepperi-addons-ngx-composite-lib-rich-text.mjs.map +1 -1
  94. package/fesm2022/pepperi-addons-ngx-composite-lib-shadow-settings.mjs +9 -9
  95. package/fesm2022/pepperi-addons-ngx-composite-lib-shadow-settings.mjs.map +1 -1
  96. package/fesm2022/pepperi-addons-ngx-composite-lib-show-if-badge.mjs +10 -10
  97. package/fesm2022/pepperi-addons-ngx-composite-lib-show-if-badge.mjs.map +1 -1
  98. package/fesm2022/pepperi-addons-ngx-composite-lib.mjs +18 -18
  99. package/fesm2022/pepperi-addons-ngx-composite-lib.mjs.map +1 -1
  100. package/package.json +29 -29
@@ -619,10 +619,10 @@ export class LayoutBuilderInternalService {
619
619
  // Load only the layout view.
620
620
  this.notifyLayoutViewChange(layoutView);
621
621
  }
622
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LayoutBuilderInternalService, deps: [{ token: i1.TranslateService }, { token: i2.PepDialogService }, { token: i3.PepLayoutService }], target: i0.ɵɵFactoryTarget.Injectable }); }
623
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LayoutBuilderInternalService }); }
622
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LayoutBuilderInternalService, deps: [{ token: i1.TranslateService }, { token: i2.PepDialogService }, { token: i3.PepLayoutService }], target: i0.ɵɵFactoryTarget.Injectable }); }
623
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LayoutBuilderInternalService }); }
624
624
  }
625
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LayoutBuilderInternalService, decorators: [{
625
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LayoutBuilderInternalService, decorators: [{
626
626
  type: Injectable
627
- }], ctorParameters: function () { return [{ type: i1.TranslateService }, { type: i2.PepDialogService }, { type: i3.PepLayoutService }]; } });
628
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LWJ1aWxkZXItaW50ZXJuYWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21wb3NpdGUtbGliL2xheW91dC1idWlsZGVyL2xheW91dC1idWlsZGVyLWludGVybmFsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFPLEVBQXdELGVBQWUsRUFBcUIsTUFBTSx3QkFBd0IsQ0FBQztBQUVsSSxPQUFPLEVBQW1CLE9BQU8sRUFBb0MsaUJBQWlCLEVBQTBDLE1BQU0seUJBQXlCLENBQUM7QUFHaEssT0FBTyxFQUFjLGVBQWUsRUFBVyxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQWdCLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTVFLE9BQU8sRUFBRSxhQUFhLEVBQW9CLE1BQU0sZ0NBQWdDLENBQUM7QUFDakYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7Ozs7O0FBMEJ4RixNQUFNLE9BQU8sNEJBQTRCO2FBQ3JCLGtDQUE2QixHQUFHLGlCQUFpQixDQUFDO2FBQ2xELG1CQUFjLEdBQUcsTUFBTSxDQUFDO0lBUXhDLGVBQWUsQ0FBQyxLQUE0QjtRQUN4QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixJQUFJLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsZ0NBQWdDLEdBQUcsS0FBSyxDQUFDLCtCQUErQixJQUFJLEtBQUssQ0FBQztRQUN2RixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFF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QkFBTSxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksS0FBSyxHQUFHLElBQUksRUFBRTtnQkFDckMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ3JEO2lCQUFNLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxLQUFLLEdBQUcsR0FBRyxFQUFFO2dCQUNwQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDckQ7aUJBQU0sSUFBSSxLQUFLLEdBQUcsR0FBRyxFQUFFO2dCQUNwQixJQUFJLENBQUMsc0JBQXNCLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDckQ7U0FDSjtJQUNMLENBQUM7SUFFRCxzQ0FBc0M7SUFDdEMsNENBQTRDO0lBQzVDLElBQUk7SUFFSixxQ0FBcUM7SUFDckMsb0NBQW9DO0lBQ3BDLElBQUk7SUFFSixpQkFBaUIsQ0FBQyxVQUEwQjtRQUN4QyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDakIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDdEMsMEJBQTBCO2dCQUMxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDdEM7U0FDSjtRQUVELDZCQUE2QjtRQUM3QixJQUFJLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDNUMsQ0FBQzsrR0FsdEJRLDRCQUE0QjttSEFBNUIsNEJBQTRCOzs0RkFBNUIsNEJBQTRCO2tCQUx4QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBjb2VyY2VOdW1iZXJQcm9wZXJ0eSB9IGZyb20gXCJAYW5ndWxhci9jZGsvY29lcmNpb25cIjtcbmltcG9ydCB7IENka0RyYWdEcm9wLCBDZGtEcmFnRW5kLCBDZGtEcmFnU3RhcnQsIGNvcHlBcnJheUl0ZW0sIG1vdmVJdGVtSW5BcnJheSwgdHJhbnNmZXJBcnJheUl0ZW0gfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2RyYWctZHJvcFwiO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5pbXBvcnQgeyBQZXBBZGRvblNlcnZpY2UsIFBlcEd1aWQsIFBlcEh0dHBTZXJ2aWNlLCBQZXBMYXlvdXRTZXJ2aWNlLCBQZXBTY3JlZW5TaXplVHlwZSwgUGVwU2Vzc2lvblNlcnZpY2UsIFBlcFV0aWxpdGllc1NlcnZpY2UgfSBmcm9tIFwiQHBlcHBlcmktYWRkb25zL25neC1saWJcIjtcbmltcG9ydCB7IElQZXBEcmFnZ2FibGVJdGVtIH0gZnJvbSBcIkBwZXBwZXJpLWFkZG9ucy9uZ3gtbGliL2RyYWdnYWJsZS1pdGVtc1wiO1xuaW1wb3J0IHsgRGF0YVZpZXdTY3JlZW5TaXplLCBTcGxpdFR5cGUgfSBmcm9tIFwiQHBlcHBlcmktYWRkb25zL3BhcGktc2RrXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFBlcExheW91dEVkaXRvclR5cGUsIElQZXBMYXlvdXRCbG9ja0FkZGVkRXZlbnQsIElQZXBMYXlvdXRTZWN0aW9uLCBJUGVwTGF5b3V0U2VjdGlvbkNvbHVtbiwgSVBlcExheW91dFZpZXcsIElQZXBMYXlvdXRCbG9ja0NvbmZpZywgUGVwTGF5b3V0U2l6ZVR5cGUsIElFZGl0b3IgfSBmcm9tIFwiLi9sYXlvdXQtYnVpbGRlci5tb2RlbFwiO1xuaW1wb3J0IHsgUGVwRGlhbG9nRGF0YSwgUGVwRGlhbG9nU2VydmljZSB9IGZyb20gXCJAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYi9kaWFsb2dcIjtcbmltcG9ydCB7IFBlcFBhZGRpbmdTZXR0aW5ncyB9IGZyb20gXCJAcGVwcGVyaS1hZGRvbnMvbmd4LWNvbXBvc2l0ZS1saWIvcGFkZGluZy1zZXR0aW5nc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElMYXlvdXRFZGl0b3Ige1xuICAgIG1heFdpZHRoOiBudW1iZXIsXG4gICAgaG9yaXpvbnRhbFNwYWNpbmc/OiBQZXBMYXlvdXRTaXplVHlwZSxcbiAgICB2ZXJ0aWNhbFNwYWNpbmc/OiBQZXBMYXlvdXRTaXplVHlwZSxcbiAgICBzZWN0aW9uc0dhcD86IFBlcExheW91dFNpemVUeXBlLFxuICAgIGNvbHVtbnNHYXA/OiBQZXBMYXlvdXRTaXplVHlwZSxcbiAgICByb3VuZGVkQ29ybmVycz86IFBlcExheW91dFNpemVUeXBlLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMYXlvdXRTZWN0aW9uRWRpdG9yIHtcbiAgICBpZDogc3RyaW5nLFxuICAgIHNlY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgc3BsaXQ6IFNwbGl0VHlwZSB8IHVuZGVmaW5lZCxcbiAgICBoZWlnaHQ6IG51bWJlcixcbiAgICBjb2xsYXBzZU9uVGFibGV0OiBib29sZWFuLFxuICAgIGZpbGxIZWlnaHQ6IGJvb2xlYW5cbiAgICBwYWRkaW5nOiBQZXBQYWRkaW5nU2V0dGluZ3M7XG59XG5cbkBJbmplY3RhYmxlKFxuLy8gICAgIHtcbi8vICAgICBwcm92aWRlZEluOiAncm9vdCcsXG4vLyB9XG4pXG5leHBvcnQgY2xhc3MgTGF5b3V0QnVpbGRlckludGVybmFsU2VydmljZSB7XG4gICAgc3RhdGljIHJlYWRvbmx5IEFWQUlMQUJMRV9CTE9DS1NfQ09OVEFJTkVSX0lEID0gJ2F2YWlsYWJsZUJsb2Nrcyc7XG4gICAgc3RhdGljIHJlYWRvbmx5IE1BSU5fRURJVE9SX0lEID0gJ21haW4nO1xuXG4gICAgcHJpdmF0ZSBfZGVmYXVsdFNlY3Rpb25UaXRsZSA9ICcnO1xuICAgIFxuICAgIC8vIFRoaXMgY29uZmlndXJhdGlvbiBpcyBmb3IgYmxvY2tzIGJlaGF2aW9yLlxuICAgIHByaXZhdGUgX2Jsb2Nrc0xpbWl0TnVtYmVyID0gMDtcbiAgICBwcml2YXRlIF9uYXZpZ2F0ZVRvRWRpdG9yQWZ0ZXJCbG9ja0FkZGVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfZ2V0QmxvY2tUaXRsZTogKGJsb2NrS2V5OiBzdHJpbmcpID0+IHN0cmluZyA9IChibG9ja0tleSkgPT4geyByZXR1cm4gYmxvY2tLZXkgfTtcbiAgICBzZXRCbG9ja3NDb25maWcodmFsdWU6IElQZXBMYXlvdXRCbG9ja0NvbmZpZykge1xuICAgICAgICB0aGlzLl9ibG9ja3NMaW1pdE51bWJlciA9IHZhbHVlLmJsb2Nrc0xpbWl0TnVtYmVyIHx8IDA7XG4gICAgICAgIHRoaXMuX25hdmlnYXRlVG9FZGl0b3JBZnRlckJsb2NrQWRkZWQgPSB2YWx1ZS5uYXZpZ2F0ZVRvRWRpdG9yQWZ0ZXJCbG9ja0FkZGVkID8/IGZhbHNlO1xuICAgICAgICB0aGlzLl9nZXRCbG9ja1RpdGxlID0gdmFsdWUuZ2V0QmxvY2tUaXRsZSA/IHZhbHVlLmdldEJsb2NrVGl0bGUgOiAoYmxvY2tLZXkpID0+IHsgcmV0dXJuIGJsb2NrS2V5IH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZWRpdG9yc0JyZWFkQ3J1bWIgPSBBcnJheTxJRWRpdG9yPigpO1xuXG4gICAgcHJpdmF0ZSBfZWRpdG9yTW9kZSA9IGZhbHNlO1xuICAgIGdldCBlZGl0b3JNb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWRpdG9yTW9kZTtcbiAgICB9XG4gICAgc2V0RWRpdG9yTW9kZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9lZGl0b3JNb2RlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2V0RWRpdGFibGVTdGF0ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2VkaXRhYmxlU3RhdGUgPSBmYWxzZTtcbiAgICBnZXQgZWRpdGFibGVTdGF0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VkaXRhYmxlU3RhdGU7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBzdWJqZWN0IGlzIGZvciB0aGUgc2NyZWVuIHNpemUgY2hhbmdlIGV2ZW50cy5cbiAgICBwcml2YXRlIF9zY3JlZW5TaXplU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PFBlcFNjcmVlblNpemVUeXBlIHwgdW5kZWZpbmVkPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UGVwU2NyZWVuU2l6ZVR5cGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gICAgZ2V0IHNjcmVlblNpemVDaGFuZ2UkKCk6IE9ic2VydmFibGU8UGVwU2NyZWVuU2l6ZVR5cGUgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NjcmVlblNpemVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgfVxuICAgIFxuICAgIC8vIFRoaXMgc3ViamVjdCBpcyBmb3IgZGVtb3N0cmF0ZSB0aGUgY29udGFpbmVyIHNpemUgKFVzYWdlIG9ubHkgaW4gZWRpdCBtb2RlKS5cbiAgICBwcml2YXRlIF9zY3JlZW5XaWR0aFN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcxMDAlJyk7XG4gICAgZ2V0IHNjcmVlbldpZHRoQ2hhbmdlJCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2NyZWVuV2lkdGhTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBzdWJqZWN0IGlzIGZvciBsb2FkIHRoZSBjdXJyZW50IGVkaXRvciAoVXNhZ2Ugb25seSBpbiBlZGl0IG1vZGUpLlxuICAgIHByaXZhdGUgX2VkaXRvclN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxJRWRpdG9yIHwgbnVsbD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElFZGl0b3IgfCBudWxsPihudWxsKTtcbiAgICBnZXQgZWRpdG9yQ2hhbmdlJCgpOiBPYnNlcnZhYmxlPElFZGl0b3IgfCBudWxsPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lZGl0b3JTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyB0aGUgc2VjdGlvbnMgY29sdW1ucyBkcm9wIGxpc3Qgc3ViamVjdC5cbiAgICBwcml2YXRlIF9zZWN0aW9uc0NvbHVtbnNEcm9wTGlzdFN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPihbXSk7XG4gICAgZ2V0IHNlY3Rpb25zQ29sdW1uc0Ryb3BMaXN0Q2hhbmdlJCgpOiBPYnNlcnZhYmxlPGFueVtdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWN0aW9uc0NvbHVtbnNEcm9wTGlzdFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyB0aGUgc2VjdGlvbnMgc3ViamVjdCAoYSBwYXJlIGZyb20gdGhlIGxheW91dCB2aWV3IG9iamVjdClcbiAgICBwcml2YXRlIF9zZWN0aW9uc1ZpZXdTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8SVBlcExheW91dFNlY3Rpb25bXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElQZXBMYXlvdXRTZWN0aW9uW10+KFtdKTtcbiAgICBnZXQgc2VjdGlvbnNDaGFuZ2UkKCk6IE9ic2VydmFibGU8SVBlcExheW91dFNlY3Rpb25bXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VjdGlvbnNWaWV3U3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICAgICAgLy8gKHByZXZTZWN0aW9ucywgbmV4dFNlY3Rpb25zKSA9PiBKU09OLnN0cmluZ2lmeShwcmV2U2VjdGlvbnMpID09PSBKU09OLnN0cmluZ2lmeShuZXh0U2VjdGlvbnMpKSk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBzdWJqZWN0IGlzIGZvciBsYXlvdXQgdmlldyBjaGFuZ2UuXG4gICAgcHJpdmF0ZSBfbGF5b3V0Vmlld1N1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxJUGVwTGF5b3V0VmlldyB8IG51bGw+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJUGVwTGF5b3V0VmlldyB8IG51bGw+KG51bGwpO1xuICAgIGdldCBsYXlvdXRWaWV3Q2hhbmdlJCgpOiBPYnNlcnZhYmxlPElQZXBMYXlvdXRWaWV3IHwgbnVsbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGF5b3V0Vmlld1N1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShmaWx0ZXIobGF5b3V0ID0+ICEhbGF5b3V0KSk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBzdWJqZWN0IGlzIGZvciBlZGl0IG1vZGUgd2hlbiBibG9jayBpcyBkcmFnZ2luZyBub3cgb3Igbm90LlxuICAgIHByaXZhdGUgX2RyYWdnaW5nQmxvY2tLZXk6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCgnJyk7XG4gICAgZ2V0IGRyYWdnaW5nQmxvY2tLZXkoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RyYWdnaW5nQmxvY2tLZXkuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIHN1YmplY3QgaXMgZm9yIGVkaXQgbW9kZSB3aGVuIHNlY3Rpb24gaXMgZHJhZ2dpbmcgbm93IG9yIG5vdC5cbiAgICBwcml2YXRlIF9kcmFnZ2luZ1NlY3Rpb25LZXk6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCgnJyk7XG4gICAgZ2V0IGRyYWdnaW5nU2VjdGlvbktleSgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZHJhZ2dpbmdTZWN0aW9uS2V5LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgfVxuXG4gICAgLy8gLy8gVGhpcyBzdWJqZWN0IGlzIGZvciBsb2NrIG9yIHVubG9jayB0aGUgc2NyZWVuIChVc2FnZSBvbmx5IGluIGVkaXQgbW9kZSkuXG4gICAgLy8gcHJpdmF0ZSBfbG9ja1NjcmVlblN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIC8vIGdldCBsb2NrU2NyZWVuQ2hhbmdlJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAvLyAgICAgcmV0dXJuIHRoaXMuX2xvY2tTY3JlZW5TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgLy8gfVxuXG4gICAgLy8gVGhpcyBpcyBmb3IgY29udHJvbCB0aGUgcHJldmlldyBtb2RlIChmb3IgbG9hZCB0aGUgYmxvY2tzIHdpdGggdGhlIENQSSBldmVudHMpIFxuICAgIHByaXZhdGUgX3ByZXZpZXdNb2RlU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgZ2V0IHByZXZpZXdNb2RlQ2hhbmdlJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByZXZpZXdNb2RlU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgZm9yIGVkaXRvciBtb2RlIGZvciBibG9jayBhZGRlZC5cbiAgICBwcml2YXRlIF9ibG9ja0FkZGVkRXZlbnRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJUGVwTGF5b3V0QmxvY2tBZGRlZEV2ZW50IHwgbnVsbD4obnVsbCk7XG4gICAgZ2V0IGJsb2NrQWRkZWRFdmVudFN1YmplY3QkKCk6IE9ic2VydmFibGU8SVBlcExheW91dEJsb2NrQWRkZWRFdmVudCB8IG51bGw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Jsb2NrQWRkZWRFdmVudFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIC8vIFRoaXMgaXMgZm9yIGVkaXRvciBtb2RlIGZvciBibG9ja3MgcmVtb3ZlZC5cbiAgICBwcml2YXRlIF9ibG9ja3NSZW1vdmVkRXZlbnRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4oW10pO1xuICAgIGdldCBibG9ja3NSZW1vdmVkRXZlbnRTdWJqZWN0JCgpOiBPYnNlcnZhYmxlPHN0cmluZ1tdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ibG9ja3NSZW1vdmVkRXZlbnRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8vIC8vIFRoaXMgc3ViamVjdCBpcyBmb3Igc2tlbGV0b24uXG4gICAgLy8gcHJpdmF0ZSBfc2hvd1NrZWxldG9uU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICAvLyBnZXQgc2hvd1NrZWxldG9uQ2hhbmdlJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAvLyAgICAgcmV0dXJuIHRoaXMuX3Nob3dTa2VsZXRvblN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgICAvLyB9XG4gICAgXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBkaWFsb2dTZXJ2aWNlOiBQZXBEaWFsb2dTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGxheW91dFNlcnZpY2U6IFBlcExheW91dFNlcnZpY2UsXG4gICAgKSB7XG4gICAgICAgIC8vXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmdldCgnTEFZT1VUX0JVSUxERVIuU0VDVElPTicpLnN1YnNjcmliZSgocmVzOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIC8vIFNldCB0aGUgZGVmYXVsdCBzZWN0aW9uIG5hbWUuXG4gICAgICAgICAgICB0aGlzLl9kZWZhdWx0U2VjdGlvblRpdGxlID0gcmVzO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmxheW91dFNlcnZpY2Uub25SZXNpemUkLnN1YnNjcmliZSgoc2l6ZTogUGVwU2NyZWVuU2l6ZVR5cGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5U2NyZWVuU2l6ZUNoYW5nZShzaXplKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIFxuICAgIHByaXZhdGUgc2V0RWRpdGFibGVTdGF0ZSgpIHtcbiAgICAgICAgdGhpcy5fZWRpdGFibGVTdGF0ZSA9IHRoaXMuZWRpdG9yTW9kZSAmJiAhdGhpcy5fcHJldmlld01vZGVTdWJqZWN0LmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBub3RpZnlMYXlvdXRWaWV3Q2hhbmdlKGxheW91dFZpZXdUb1VwZGF0ZTogSVBlcExheW91dFZpZXcgfCBudWxsKSB7XG4gICAgICAgIGlmIChsYXlvdXRWaWV3VG9VcGRhdGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmVkaXRvck1vZGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUxheW91dEVkaXRvclByb3BlcnRpZXMobGF5b3V0Vmlld1RvVXBkYXRlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBsYXlvdXQgZm9yIHRoZSB2aWV3LlxuICAgICAgICAgICAgdGhpcy5fbGF5b3V0Vmlld1N1YmplY3QubmV4dChsYXlvdXRWaWV3VG9VcGRhdGUpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHNlY3Rpb25zIGZvciB0aGUgdmlldy5cbiAgICAgICAgICAgIHRoaXMuX3NlY3Rpb25zVmlld1N1YmplY3QubmV4dChsYXlvdXRWaWV3VG9VcGRhdGU/LkxheW91dC5TZWN0aW9ucyB8fCBbXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG5vdGlmeUJsb2NrQWRkZWQoYmxvY2tBZGRlZEV2ZW50RGF0YTogSVBlcExheW91dEJsb2NrQWRkZWRFdmVudCkge1xuICAgICAgICAvLyBOb3RpZnkgdGhhdCB0aGUgYmxvY2sgaXMgYWRkZWQgKHRvIHJhaXNlIHRoZSBldmVudCBmb3IgdGhlIGNsaWVudCkuXG4gICAgICAgIHRoaXMuX2Jsb2NrQWRkZWRFdmVudFN1YmplY3QubmV4dChibG9ja0FkZGVkRXZlbnREYXRhKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG5vdGlmeUJsb2Nrc1JlbW92ZWQoa2V5czogc3RyaW5nW10gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGtleXMpIHtcbiAgICAgICAgICAgIC8vIE5vdGlmeSB0aGF0IHRoZSBibG9ja3MgYXJlIHJlbW92ZWQgKHRvIHJhaXNlIHRoZSBldmVudCBmb3IgdGhlIGNsaWVudCkuXG4gICAgICAgICAgICB0aGlzLl9ibG9ja3NSZW1vdmVkRXZlbnRTdWJqZWN0Lm5leHQoa2V5cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG5vdGlmeUVkaXRvckNoYW5nZShlZGl0b3I6IElFZGl0b3IgfCBudWxsKSB7XG4gICAgICAgIHRoaXMuX2VkaXRvclN1YmplY3QubmV4dChlZGl0b3IpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbm90aWZ5UHJldmlld01vZGVDaGFuZ2UodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fcHJldmlld01vZGVTdWJqZWN0Lm5leHQodmFsdWUpO1xuICAgICAgICB0aGlzLnNldEVkaXRhYmxlU3RhdGUoKTtcbiAgICB9XG5cbiAgICAvLyBwcml2YXRlIG5vdGlmeUxvY2tTY3JlZW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICAvLyAgICAgdGhpcy5fbG9ja1NjcmVlblN1YmplY3QubmV4dCh2YWx1ZSk7XG4gICAgLy8gfVxuXG4gICAgcHJpdmF0ZSBub3RpZnlTZWN0aW9uc0NvbHVtbnNEcm9wTGlzdENoYW5nZShzZWN0aW9uc0NvbHVtbnNEcm9wTGlzdDogYW55W10pIHtcbiAgICAgICAgdGhpcy5fc2VjdGlvbnNDb2x1bW5zRHJvcExpc3RTdWJqZWN0Lm5leHQoc2VjdGlvbnNDb2x1bW5zRHJvcExpc3QpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbm90aWZ5U2NyZWVuU2l6ZUNoYW5nZShzaXplOiBQZXBTY3JlZW5TaXplVHlwZSkge1xuICAgICAgICB0aGlzLl9zY3JlZW5TaXplU3ViamVjdC5uZXh0KHNpemUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlTGF5b3V0RWRpdG9yUHJvcGVydGllcyhsYXlvdXRWaWV3OiBJUGVwTGF5b3V0Vmlldykge1xuICAgICAgICBpZiAodGhpcy5fZWRpdG9yc0JyZWFkQ3J1bWJbMF0pIHtcbiAgICAgICAgICAgIGNvbnN0IGxheW91dEVkaXRvcjogSUxheW91dEVkaXRvciA9IHtcbiAgICAgICAgICAgICAgICBtYXhXaWR0aDogbGF5b3V0Vmlldz8uTGF5b3V0Lk1heFdpZHRoIHx8IDAsXG4gICAgICAgICAgICAgICAgdmVydGljYWxTcGFjaW5nOiBsYXlvdXRWaWV3Py5MYXlvdXQuVmVydGljYWxTcGFjaW5nLFxuICAgICAgICAgICAgICAgIGhvcml6b250YWxTcGFjaW5nOiBsYXlvdXRWaWV3Py5MYXlvdXQuSG9yaXpvbnRhbFNwYWNpbmcsXG4gICAgICAgICAgICAgICAgc2VjdGlvbnNHYXA6IGxheW91dFZpZXc/LkxheW91dC5TZWN0aW9uc0dhcCxcbiAgICAgICAgICAgICAgICBjb2x1bW5zR2FwOiBsYXlvdXRWaWV3Py5MYXlvdXQuQ29sdW1uc0dhcCxcbiAgICAgICAgICAgICAgICAvLyByb3VuZGVkQ29ybmVyczogbGF5b3V0Vmlldz8uTGF5b3V0LlJvdW5kZWRDb3JuZXJzXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLl9lZGl0b3JzQnJlYWRDcnVtYlswXS5ob3N0T2JqZWN0ID0gbGF5b3V0RWRpdG9yO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkRGVmYXVsdEVkaXRvcihsYXlvdXRWaWV3OiBJUGVwTGF5b3V0Vmlldykge1xuICAgICAgICB0aGlzLl9lZGl0b3JzQnJlYWRDcnVtYiA9IG5ldyBBcnJheTxJRWRpdG9yPigpO1xuXG4gICAgICAgIGlmIChsYXlvdXRWaWV3KSB7XG4gICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZS5nZXQoJ0xBWU9VVF9CVUlMREVSLkRFRkFVTFRfVElUTEUnKS5zdWJzY3JpYmUoKHRpdGxlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lZGl0b3JzQnJlYWRDcnVtYi5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IExheW91dEJ1aWxkZXJJbnRlcm5hbFNlcnZpY2UuTUFJTl9FRElUT1JfSUQsXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgOiAnbGF5b3V0LWJ1aWxkZXInLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIC8vIGhvc3RPYmplY3Q6IHt9IC8vIFVwZGF0ZXMgaW4gdXBkYXRlTGF5b3V0RWRpdG9yUHJvcGVydGllcyBmdW5jdGlvbiBhYm92ZS5cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTGF5b3V0RWRpdG9yUHJvcGVydGllcyhsYXlvdXRWaWV3KTtcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeUVkaXRvckNoYW5nZSh0aGlzLl9lZGl0b3JzQnJlYWRDcnVtYlswXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5RWRpdG9yQ2hhbmdlKG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGFuZ2VDdXJyZW50RWRpdG9yKCkge1xuICAgICAgICBpZiAodGhpcy5fZWRpdG9yc0JyZWFkQ3J1bWIubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlFZGl0b3JDaGFuZ2UodGhpcy5fZWRpdG9yc0JyZWFkQ3J1bWJbdGhpcy5fZWRpdG9yc0JyZWFkQ3J1bWIubGVuZ3RoIC0gMV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFZGl0b3JCeVR5cGUoZWRpdG9yVHlwZTogUGVwTGF5b3V0RWRpdG9yVHlwZSwgaWQ6IHN0cmluZywgdGl0bGUgPSAnJyk6IElFZGl0b3IgfCBudWxsIHtcbiAgICAgICAgLy8gQnVpbGQgZWRpdG9yIG9iamVjdC5cbiAgICAgICAgbGV0IGVkaXRvcjogSUVkaXRvciB8IG51bGwgPSBudWxsO1xuXG4gICAgICAgIGlmIChlZGl0b3JUeXBlID09PSAnc2VjdGlvbicpIHtcbiAgICAgICAgICAgIGVkaXRvciA9IHRoaXMuZ2V0U2VjdGlvbkVkaXRvcihpZCwgdGl0bGUpO1xuICAgICAgICB9IGVsc2UgaWYgKGVkaXRvclR5cGUgPT09ICdibG9jaycpIHtcbiAgICAgICAgICAgIGVkaXRvciA9IHRoaXMuZ2V0QmxvY2tFZGl0b3IoaWQsIHRpdGxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlZGl0b3I7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRCbG9ja0VkaXRvcihibG9ja0tleTogc3RyaW5nLCB0aXRsZTogc3RyaW5nKTogSUVkaXRvciB7XG4gICAgICAgIC8vIEdldCBibG9jayBlZGl0b3IgdGl0bGUuXG4gICAgICAgIGNvbnN0IGJsb2NrVGl0bGUgPSB0aXRsZSB8fCB0aGlzLmdldEJsb2NrVGl0bGUoYmxvY2tLZXkpOyBcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IGJsb2NrS2V5LFxuICAgICAgICAgICAgdHlwZTogJ2Jsb2NrJyxcbiAgICAgICAgICAgIHRpdGxlOiBibG9ja1RpdGxlXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlY3Rpb25FZGl0b3JUaXRsZShzZWN0aW9uOiBJUGVwTGF5b3V0U2VjdGlvbiwgc2VjdGlvbkluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gc2VjdGlvbi5OYW1lIHx8IGAke3RoaXMuX2RlZmF1bHRTZWN0aW9uVGl0bGV9ICR7c2VjdGlvbkluZGV4ICsgMX1gO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2VjdGlvbkVkaXRvcihzZWN0aW9uSWQ6IHN0cmluZywgdGl0bGU6IHN0cmluZyk6IElFZGl0b3IgfCBudWxsIHtcbiAgICAgICAgY29uc3QgbGF5b3V0VmlldyA9IHRoaXMuX2xheW91dFZpZXdTdWJqZWN0LmdldFZhbHVlKCk7XG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gbGF5b3V0Vmlldz8uTGF5b3V0LlNlY3Rpb25zIHx8IFtdO1xuICAgICAgICBjb25zdCBzZWN0aW9uSW5kZXggPSBzZWN0aW9ucy5maW5kSW5kZXgoc2VjdGlvbiA9PiBzZWN0aW9uLktleSA9PT0gc2VjdGlvbklkKTtcblxuICAgICAgICBpZiAoc2VjdGlvbkluZGV4ID49IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb24gPSBzZWN0aW9uc1tzZWN0aW9uSW5kZXhdO1xuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbkVkaXRvcjogSUxheW91dFNlY3Rpb25FZGl0b3IgPSB7XG4gICAgICAgICAgICAgICAgaWQ6IHNlY3Rpb24uS2V5LFxuICAgICAgICAgICAgICAgIHNlY3Rpb25OYW1lOiBzZWN0aW9uLk5hbWUgfHwgJycsXG4gICAgICAgICAgICAgICAgc3BsaXQ6IHNlY3Rpb24uU3BsaXQgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGhlaWdodDogc2VjdGlvbi5IZWlnaHQgfHwgMCxcbiAgICAgICAgICAgICAgICBjb2xsYXBzZU9uVGFibGV0OiBzZWN0aW9uLkNvbGxhcHNlT25UYWJsZXQgPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgZmlsbEhlaWdodDogc2VjdGlvbi5GaWxsSGVpZ2h0ID8/IGZhbHNlLFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IHNlY3Rpb24uUGFkZGluZyB8fCBuZXcgUGVwUGFkZGluZ1NldHRpbmdzKHRydWUsICcwJylcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpZDogc2VjdGlvbklkLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdzZWN0aW9uJyxcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUgfHwgdGhpcy5nZXRTZWN0aW9uRWRpdG9yVGl0bGUoc2VjdGlvbiwgc2VjdGlvbkluZGV4KSxcbiAgICAgICAgICAgICAgICBob3N0T2JqZWN0OiBzZWN0aW9uRWRpdG9yXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2VjdGlvbkNvbHVtbkJ5SWRGb3JFZGl0b3Ioc2VjdGlvbkNvbHVtbklkOiBzdHJpbmcpOiBJUGVwTGF5b3V0U2VjdGlvbkNvbHVtbiB8IG51bGwge1xuICAgICAgICBsZXQgY3VycmVudENvbHVtbiA9IG51bGw7XG5cbiAgICAgICAgLy8gR2V0IHRoZSBzZWN0aW9uIGFuZCBjb2x1bW4gYXJyYXkgYnkgdGhlIHBhdHRlcm4gb2YgdGhlIHNlY3Rpb24gY29sdW1uIGtleS5cbiAgICAgICAgY29uc3Qgc2VjdGlvbkNvbHVtblBhdHRlcm5TZXBhcmF0b3IgPSB0aGlzLmdldFNlY3Rpb25Db2x1bW5LZXkoKTtcbiAgICAgICAgY29uc3Qgc2VjdGlvbkNvbHVtbkFyciA9IHNlY3Rpb25Db2x1bW5JZC5zcGxpdChzZWN0aW9uQ29sdW1uUGF0dGVyblNlcGFyYXRvcik7XG5cbiAgICAgICAgaWYgKHNlY3Rpb25Db2x1bW5BcnIubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICBjb25zdCBsYXlvdXRWaWV3ID0gdGhpcy5fbGF5b3V0Vmlld1N1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25zID0gbGF5b3V0Vmlldz8uTGF5b3V0LlNlY3Rpb25zIHx8IFtdO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBHZXQgdGhlIHNlY3Rpb24gaWQgdG8gZ2V0IHRoZSBzZWN0aW9uIGluZGV4LlxuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbklkID0gc2VjdGlvbkNvbHVtbkFyclswXTtcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25JbmRleCA9IHNlY3Rpb25zLmZpbmRJbmRleChzZWN0aW9uID0+IHNlY3Rpb24uS2V5ID09PSBzZWN0aW9uSWQpO1xuICAgICAgICAgICAgLy8gR2V0IHRoZSBjb2x1bW4gaW5kZXguXG4gICAgICAgICAgICBjb25zdCBjb2x1bW5JbmRleCA9IGNvZXJjZU51bWJlclByb3BlcnR5KHNlY3Rpb25Db2x1bW5BcnJbMV0sIC0xKTtcbiAgICAgICAgICAgIGlmIChzZWN0aW9uSW5kZXggPj0gMCAmJiBjb2x1bW5JbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudENvbHVtbiA9IHNlY3Rpb25zW3NlY3Rpb25JbmRleF0uQ29sdW1uc1tjb2x1bW5JbmRleF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY3VycmVudENvbHVtbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENzc1NjcmVlbldpZGgoc2NyZWVuVHlwZTogRGF0YVZpZXdTY3JlZW5TaXplKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHdpZHRoVG9TZXQgPSAnMTAwJSc7XG5cbiAgICAgICAgaWYgKHNjcmVlblR5cGUgPT09ICdUYWJsZXQnKSB7XG4gICAgICAgICAgICB3aWR0aFRvU2V0ID0gJzcyMCc7XG4gICAgICAgIH0gZWxzZSBpZiAoc2NyZWVuVHlwZSA9PT0gJ1BoYWJsZXQnKSB7XG4gICAgICAgICAgICB3aWR0aFRvU2V0ID0gJzM2MCc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gd2lkdGhUb1NldDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEJsb2Nrc051bWJlcigpOiBudW1iZXIge1xuICAgICAgICBsZXQgYmxvY2tzTnVtYmVyID0gMDtcbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSB0aGlzLl9sYXlvdXRWaWV3U3ViamVjdC5nZXRWYWx1ZSgpPy5MYXlvdXQuU2VjdGlvbnMgfHwgW107XG5cbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHNlY3Rpb25zLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbiA9IHNlY3Rpb25zW2luZGV4XTtcbiAgICAgICAgXG4gICAgICAgICAgICBmb3IgKGxldCBjb2x1bW5JbmRleCA9IDA7IGNvbHVtbkluZGV4IDwgc2VjdGlvbi5Db2x1bW5zLmxlbmd0aDsgY29sdW1uSW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHNlY3Rpb24uQ29sdW1uc1tjb2x1bW5JbmRleF07XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbi5CbG9ja0NvbnRhaW5lciAmJiBjb2x1bW4uQmxvY2tDb250YWluZXIuQmxvY2tLZXk/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYmxvY2tzTnVtYmVyKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGJsb2Nrc051bWJlcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoYW5nZUN1cnNvck9uRHJhZ1N0YXJ0KCkge1xuICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2luaGVyaXRDdXJzb3JzJyk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gJ2dyYWJiaW5nJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoYW5nZUN1cnNvck9uRHJhZ0VuZCgpIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdpbmhlcml0Q3Vyc29ycycpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9ICd1bnNldCc7XG4gICAgfVxuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpYyBmdW5jdGlvbnNcbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICBnZXRCbG9ja1RpdGxlKGJsb2NrS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0QmxvY2tUaXRsZShibG9ja0tleSkgfHwgYmxvY2tLZXk7XG4gICAgfVxuXG4gICAgc2V0U2VjdGlvbnNDb2x1bW5zRHJvcExpc3RDaGFuZ2Uoc2VjdGlvbnNDb2x1bW5zRHJvcExpc3Q6IGFueVtdKSB7XG4gICAgICAgIHRoaXMubm90aWZ5U2VjdGlvbnNDb2x1bW5zRHJvcExpc3RDaGFuZ2Uoc2VjdGlvbnNDb2x1bW5zRHJvcExpc3QpO1xuICAgIH1cblxuICAgIGNoYW5nZVByZXZpZXdNb2RlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMubm90aWZ5UHJldmlld01vZGVDaGFuZ2UodmFsdWUpO1xuICAgIH1cblxuICAgIGdldEN1cnJlbnRTY3JlZW5UeXBlKCk6IERhdGFWaWV3U2NyZWVuU2l6ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFNjcmVlblR5cGUodGhpcy5fc2NyZWVuU2l6ZVN1YmplY3Q/LmdldFZhbHVlKCkgfHwgUGVwU2NyZWVuU2l6ZVR5cGUuTEcpO1xuICAgIH1cblxuICAgIGdldFNjcmVlblR5cGUoc2l6ZTogUGVwU2NyZWVuU2l6ZVR5cGUpOiBEYXRhVmlld1NjcmVlblNpemUge1xuICAgICAgICBjb25zdCBzY3JlZW5UeXBlOiBEYXRhVmlld1NjcmVlblNpemUgPVxuICAgICAgICAgICAgc2l6ZSA8IFBlcFNjcmVlblNpemVUeXBlLk1EID8gJ0xhbmRzY2FwZScgOlxuICAgICAgICAgICAgKHNpemUgPT09IFBlcFNjcmVlblNpemVUeXBlLk1EIHx8IHNpemUgPT09IFBlcFNjcmVlblNpemVUeXBlLlNNID8gJ1RhYmxldCcgOiAnUGhhYmxldCcpO1xuXG4gICAgICAgIHJldHVybiBzY3JlZW5UeXBlO1xuICAgIH1cblxuICAgIGdldFNlY3Rpb25Db2x1bW5LZXkoc2VjdGlvbktleSA9ICcnLCBpbmRleCA9ICcnKSB7XG4gICAgICAgIHJldHVybiBgJHtzZWN0aW9uS2V5fV9jb2x1bW5fJHtpbmRleH1gO1xuICAgIH1cblxuICAgIGdldElzSGlkZGVuKGhpZGVJbjogRGF0YVZpZXdTY3JlZW5TaXplW10gfCB1bmRlZmluZWQsIGN1cnJlbnRTY3JlZW5UeXBlOiBEYXRhVmlld1NjcmVlblNpemUpIHtcbiAgICAgICAgcmV0dXJuIChoaWRlSW4gJiYgaGlkZUluPy5sZW5ndGggPiAwKSA/IGhpZGVJbi5zb21lKGhpID0+IGhpID09PSBjdXJyZW50U2NyZWVuVHlwZSkgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBuYXZpZ2F0ZVRvRWRpdG9yKGVkaXRvclR5cGU6IFBlcExheW91dEVkaXRvclR5cGUsIGlkOiBzdHJpbmcsIHRpdGxlID0gJycpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAvLyBDYW5ub3QgbmF2aWdhdGUgaW50byAnbGF5b3V0LWJ1aWxkZXInIGJlY2F1c2UgdGhpcyBpcyBmaXJzdCBhbmQgY29uc3QgaW4gdGhlIGVkaXRvcnNCcmVhZENydW1icy5cbiAgICAgICAgaWYgKGVkaXRvclR5cGUgIT09ICdsYXlvdXQtYnVpbGRlcicgJiYgaWQ/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIENoZWNrIHdoaWNoIGVkaXRvciB3ZSBoYXZlIG5vd1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEVkaXRvciA9IHRoaXMuX2VkaXRvcnNCcmVhZENydW1iW3RoaXMuX2VkaXRvcnNCcmVhZENydW1iLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgICAgICAvLyBPbmx5IGlmIGl0J3MgYW5vdGhlciBlZGl0b3IuXG4gICAgICAgICAgICBpZihjdXJyZW50RWRpdG9yLmlkICE9PSBpZCkge1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50RWRpdG9yLnR5cGUgIT09ICdsYXlvdXQtYnVpbGRlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQWx3YXlzIHBvcCB0aGUgbGFzdCBhbmQgaW5zZXJ0IHRoZSBjdXJyZW50LlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lZGl0b3JzQnJlYWRDcnVtYi5wb3AoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmdldEVkaXRvckJ5VHlwZShlZGl0b3JUeXBlLCBpZCwgdGl0bGUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGVkaXRvcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lZGl0b3JzQnJlYWRDcnVtYi5wdXNoKGVkaXRvcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlQ3VycmVudEVkaXRvcigpO1xuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgfVxuXG4gICAgbmF2aWdhdGVCYWNrRnJvbUVkaXRvcigpIHtcbiAgICAgICAgLy8gS2VlcCB0aGUgbGF5b3V0IGJ1aWxkZXIgZWRpdG9yLlxuICAgICAgICBpZiAodGhpcy5fZWRpdG9yc0JyZWFkQ3J1bWIubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgLy8gTWF5YmUgd2Ugd2FudCB0byBjb21wYXJlIHRoZSBsYXN0IGVkaXRvciBmb3IgdmFsaWRhdGlvbiA/XG4gICAgICAgICAgICBjb25zdCBsYXN0RWRpdG9yID0gdGhpcy5fZWRpdG9yc0JyZWFkQ3J1bWIucG9wKCk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZUN1cnJlbnRFZGl0b3IoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZUxheW91dEZyb21FZGl0b3IoZWRpdG9yRGF0YTogSUxheW91dEVkaXRvcikge1xuICAgICAgICBjb25zdCBsYXlvdXRWaWV3ID0gdGhpcy5fbGF5b3V0Vmlld1N1YmplY3QuZ2V0VmFsdWUoKTtcblxuICAgICAgICBpZiAobGF5b3V0Vmlldykge1xuICAgICAgICAgICAgbGF5b3V0Vmlldy5MYXlvdXQuTWF4V2lkdGggPSBlZGl0b3JEYXRhLm1heFdpZHRoO1xuICAgICAgICAgICAgbGF5b3V0Vmlldy5MYXlvdXQuSG9yaXpvbnRhbFNwYWNpbmcgPSBlZGl0b3JEYXRhLmhvcml6b250YWxTcGFjaW5nO1xuICAgICAgICAgICAgbGF5b3V0Vmlldy5MYXlvdXQuVmVydGljYWxTcGFjaW5nID0gZWRpdG9yRGF0YS52ZXJ0aWNhbFNwYWNpbmc7XG4gICAgICAgICAgICBsYXlvdXRWaWV3LkxheW91dC5TZWN0aW9uc0dhcCA9IGVkaXRvckRhdGEuc2VjdGlvbnNHYXA7XG4gICAgICAgICAgICBsYXlvdXRWaWV3LkxheW91dC5Db2x1bW5zR2FwID0gZWRpdG9yRGF0YS5jb2x1bW5zR2FwO1xuICAgICAgICAgICAgLy8gbGF5b3V0Vmlldy5MYXlvdXQuUm91bmRlZENvcm5lcnMgPSBlZGl0b3JEYXRhLnJvdW5kZWRDb3JuZXJzO1xuXG4gICAgICAgICAgICB0aGlzLm5vdGlmeUxheW91dFZpZXdDaGFuZ2UobGF5b3V0Vmlldyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgdXBkYXRlU2VjdGlvbkZyb21FZGl0b3Ioc2VjdGlvbkRhdGE6IElMYXlvdXRTZWN0aW9uRWRpdG9yKSB7XG4gICAgICAgIGNvbnN0IGxheW91dFZpZXcgPSB0aGlzLl9sYXlvdXRWaWV3U3ViamVjdC5nZXRWYWx1ZSgpO1xuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IGxheW91dFZpZXc/LkxheW91dC5TZWN0aW9ucyB8fCBbXTtcbiAgICAgICAgY29uc3Qgc2VjdGlvbkluZGV4ID0gc2VjdGlvbnMuZmluZEluZGV4KHNlY3Rpb24gPT4gc2VjdGlvbi5LZXkgPT09IHNlY3Rpb25EYXRhLmlkKTtcblxuICAgICAgICAvLyBVcGRhdGUgc2VjdGlvbiBkZXRhaWxzLlxuICAgICAgICBpZiAoc2VjdGlvbkluZGV4ID49IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGJsb2Nrc0lkc1RvUmVtb3ZlID0gW107XG5cbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTZWN0aW9uID0gc2VjdGlvbnNbc2VjdGlvbkluZGV4XTtcbiAgICAgICAgICAgIGN1cnJlbnRTZWN0aW9uLk5hbWUgPSBzZWN0aW9uRGF0YS5zZWN0aW9uTmFtZTtcbiAgICAgICAgICAgIGN1cnJlbnRTZWN0aW9uLlNwbGl0ID0gc2VjdGlvbkRhdGEuc3BsaXQ7XG4gICAgICAgICAgICBjdXJyZW50U2VjdGlvbi5IZWlnaHQgPSBzZWN0aW9uRGF0YS5oZWlnaHQ7XG4gICAgICAgICAgICBjdXJyZW50U2VjdGlvbi5Db2xsYXBzZU9uVGFibGV0ID0gc2VjdGlvbkRhdGEuY29sbGFwc2VPblRhYmxldDtcbiAgICAgICAgICAgIGN1cnJlbnRTZWN0aW9uLkZpbGxIZWlnaHQgPSBzZWN0aW9uRGF0YS5maWxsSGVpZ2h0O1xuICAgICAgICAgICAgY3VycmVudFNlY3Rpb24uUGFkZGluZyA9IHNlY3Rpb25EYXRhLnBhZGRpbmc7XG5cbiAgICAgICAgICAgIC8vIEdldCB0aGUgbmV3IGNvbHVtbnMgbnVtYmVyIGZyb20gY3VycmVudFNlY3Rpb24uU3BsaXQsIGlmIGl0cyB1bmRlZmluZWQgcHV0IGEgZGVmYXVsdCAxLlxuICAgICAgICAgICAgY29uc3QgbmV3Q29sdW1uc0xlbmd0aCA9IGN1cnJlbnRTZWN0aW9uLlNwbGl0Py5zcGxpdCgnICcpLmxlbmd0aCB8fCAxO1xuICAgICAgICAgICAgaWYgKG5ld0NvbHVtbnNMZW5ndGggPiBjdXJyZW50U2VjdGlvbi5Db2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHdoaWxlIChuZXdDb2x1bW5zTGVuZ3RoID4gY3VycmVudFNlY3Rpb24uQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFNlY3Rpb24uQ29sdW1ucy5wdXNoKHt9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG5ld0NvbHVtbnNMZW5ndGggPCBjdXJyZW50U2VjdGlvbi5Db2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHdoaWxlIChuZXdDb2x1bW5zTGVuZ3RoIDwgY3VycmVudFNlY3Rpb24uQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW5tID0gY3VycmVudFNlY3Rpb24uQ29sdW1ucy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYmxvY2sgaW4gdGhpcyBjb2x1bW4gZGVsZXRlIGl0LlxuICAgICAgICAgICAgICAgICAgICBpZiAoY29sdW5tICYmIGNvbHVubS5CbG9ja0NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzSWRzVG9SZW1vdmUucHVzaChjb2x1bm0uQmxvY2tDb250YWluZXIuQmxvY2tLZXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBVcGRhdGUgZWRpdG9yIHRpdGxlXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50RWRpdG9yID0gdGhpcy5fZWRpdG9yU3ViamVjdC5nZXRWYWx1ZSgpO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRFZGl0b3IgJiYgY3VycmVudEVkaXRvci50eXBlID09PSAnc2VjdGlvbicgJiYgY3VycmVudEVkaXRvci5pZCA9PT0gY3VycmVudFNlY3Rpb24uS2V5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGl0bGUgPSB0aGlzLmdldFNlY3Rpb25FZGl0b3JUaXRsZShjdXJyZW50U2VjdGlvbiwgc2VjdGlvbkluZGV4KTtcbiAgICAgICAgICAgICAgICBjdXJyZW50RWRpdG9yLnRpdGxlID0gdGl0bGU7XG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlFZGl0b3JDaGFuZ2UoY3VycmVudEVkaXRvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFVwZGF0ZSBzZWN0aW9ucyBjaGFuZ2UuXG4gICAgICAgICAgICB0aGlzLm5vdGlmeUxheW91dFZpZXdDaGFuZ2UobGF5b3V0Vmlldyk7XG5cbiAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBibG9ja3MgdG8gcmVtb3ZlLCBub3RpZnkgdGhlIGJsb2NrcyByZW1vdmVkLlxuICAgICAgICAgICAgaWYgKGJsb2Nrc0lkc1RvUmVtb3ZlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeUJsb2Nrc1JlbW92ZWQoYmxvY2tzSWRzVG9SZW1vdmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkU2VjdGlvbihzZWN0aW9uOiBJUGVwTGF5b3V0U2VjdGlvbiB8IG51bGwgPSBudWxsKSB7XG4gICAgICAgIC8vIENyZWF0ZSBuZXcgc2VjdGlvblxuICAgICAgICBpZiAoIXNlY3Rpb24pIHtcbiAgICAgICAgICAgIHNlY3Rpb24gPSB7XG4gICAgICAgICAgICAgICAgS2V5OiBQZXBHdWlkLm5ld0d1aWQoKSxcbiAgICAgICAgICAgICAgICBDb2x1bW5zOiBbe31dLCAvLyBBZGQgZW1wdHkgc2VjdGlvbiBjb2x1bW5cbiAgICAgICAgICAgICAgICBIaWRlOiBbXVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWRkIHRoZSBuZXcgc2VjdGlvbiB0byBsYXlvdXQgdmlldy5cbiAgICAgICAgY29uc3QgbGF5b3V0VmlldyA9IHRoaXMuX2xheW91dFZpZXdTdWJqZWN0LmdldFZhbHVlKCk7XG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gbGF5b3V0Vmlldz8uTGF5b3V0LlNlY3Rpb25zIHx8IFtdO1xuICAgICAgICBzZWN0aW9ucy5wdXNoKHNlY3Rpb24pO1xuICAgICAgICB0aGlzLm5vdGlmeUxheW91dFZpZXdDaGFuZ2UobGF5b3V0Vmlldyk7XG4gICAgfVxuXG4gICAgcmVtb3ZlU2VjdGlvbihzZWN0aW9uSWQ6IHN0cmluZykge1xuICAgICAgICBjb25zdCBsYXlvdXRWaWV3ID0gdGhpcy5fbGF5b3V0Vmlld1N1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBsYXlvdXRWaWV3Py5MYXlvdXQuU2VjdGlvbnMgfHwgW107XG4gICAgICAgIGNvbnN0IGluZGV4ID0gc2VjdGlvbnMuZmluZEluZGV4KHNlY3Rpb24gPT4gc2VjdGlvbi5LZXkgPT09IHNlY3Rpb25JZCk7XG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAvLyBHZXQgdGhlIGJsb2NrcyBpZCdzIHRvIHJlbW92ZS5cbiAgICAgICAgICAgIGNvbnN0IGJsb2Nrc0lkc1RvUmVtb3ZlOiBhbnkgPSBzZWN0aW9uc1tpbmRleF0uQ29sdW1ucy5tYXAoY29sdW1uID0+IGNvbHVtbj8uQmxvY2tDb250YWluZXI/LkJsb2NrS2V5KTtcblxuICAgICAgICAgICAgLy8gUmVtb3ZlIHNlY3Rpb24uXG4gICAgICAgICAgICBzZWN0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlMYXlvdXRWaWV3Q2hhbmdlKGxheW91dFZpZXcpO1xuXG4gICAgICAgICAgICAvLyBJZiB0aGVyZSBhcmUgYmxvY2tzIHRvIHJlbW92ZSwgbm90aWZ5IHRoZSBibG9ja3MgcmVtb3ZlZC5cbiAgICAgICAgICAgIGlmIChibG9ja3NJZHNUb1JlbW92ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlCbG9ja3NSZW1vdmVkKGJsb2Nrc0lkc1RvUmVtb3ZlKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGlkZVNlY3Rpb24oc2VjdGlvbklkOiBzdHJpbmcsIGhpZGVJbjogRGF0YVZpZXdTY3JlZW5TaXplW10pIHtcbiAgICAgICAgY29uc3QgbGF5b3V0VmlldyA9IHRoaXMuX2xheW91dFZpZXdTdWJqZWN0LmdldFZhbHVlKCk7XG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gbGF5b3V0Vmlldz8uTGF5b3V0LlNlY3Rpb25zIHx8IFtdO1xuICAgICAgICBjb25zdCBpbmRleCA9IHNlY3Rpb25zLmZpbmRJbmRleChzZWN0aW9uID0+IHNlY3Rpb24uS2V5ID09PSBzZWN0aW9uSWQpO1xuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgc2VjdGlvbnNbaW5kZXhdLkhpZGUgPSBoaWRlSW47XG4gICAgICAgICAgICB0aGlzLm5vdGlmeUxheW91dFZpZXdDaGFuZ2UobGF5b3V0Vmlldyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblNlY3Rpb25Ecm9wcGVkKGV2ZW50OiBDZGtEcmFnRHJvcDxhbnlbXT4pIHtcbiAgICAgICAgY29uc3QgbGF5b3V0VmlldyA9IHRoaXMuX2xheW91dFZpZXdTdWJqZWN0LmdldFZhbHVlKCk7XG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gbGF5b3V0Vmlldz8uTGF5b3V0LlNlY3Rpb25zIHx8IFtdO1xuICAgICAgICBtb3ZlSXRlbUluQXJyYXkoc2VjdGlvbnMsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XG4gICAgICAgIHRoaXMubm90aWZ5TGF5b3V0Vmlld0NoYW5nZShsYXlvdXRWaWV3KTtcbiAgICB9XG5cbiAgICBvblNlY3Rpb25EcmFnU3RhcnQoZXZlbnQ6IENka0RyYWdTdGFydCkge1xuICAgICAgICB0aGlzLmNoYW5nZUN1cnNvck9uRHJhZ1N0YXJ0KCk7XG4gICAgICAgIHRoaXMuX2RyYWdnaW5nU2VjdGlvbktleS5uZXh0KGV2ZW50LnNvdXJjZS5kYXRhKTtcbiAgICB9XG5cbiAgICBvblNlY3Rpb25EcmFnRW5kKGV2ZW50OiBDZGtEcmFnRW5kKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlQ3Vyc29yT25EcmFnRW5kKCk7XG4gICAgICAgIHRoaXMuX2RyYWdnaW5nU2VjdGlvbktleS5uZXh0KCcnKTtcbiAgICB9XG5cbiAgICByZW1vdmVCbG9ja0Zyb21TZWN0aW9uKGJsb2NrSWQ6IHN0cmluZykge1xuICAgICAgICBsZXQgYmxvY2tSZW1vdmVkID0gZmFsc2U7XG5cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBibG9jayBmcm9tIHNlY3Rpb24gY29sdW1uLlxuICAgICAgICBjb25zdCBsYXlvdXRWaWV3ID0gdGhpcy5fbGF5b3V0Vmlld1N1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBsYXlvdXRWaWV3Py5MYXlvdXQuU2VjdGlvbnMgfHwgW107XG4gICAgICAgIFxuICAgICAgICBmb3IgKGxldCBzZWN0aW9uSW5kZXggPSAwOyBzZWN0aW9uSW5kZXggPCBzZWN0aW9ucy5sZW5ndGg7IHNlY3Rpb25JbmRleCsrKSB7XG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uID0gc2VjdGlvbnNbc2VjdGlvbkluZGV4XTtcblxuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBibG9jayBjb250YWluZXIuXG4gICAgICAgICAgICBjb25zdCBjb2x1bW5JbmRleCA9IHNlY3Rpb24uQ29sdW1ucy5maW5kSW5kZXgoY29sdW1uID0+IGNvbHVtbi5CbG9ja0NvbnRhaW5lcj8uQmxvY2tLZXkgPT09IGJsb2NrSWQpO1xuICAgICAgICAgICAgaWYgKGNvbHVtbkluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgc2VjdGlvbi5Db2x1bW5zW2NvbHVtbkluZGV4XS5CbG9ja0NvbnRhaW5lcjtcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeUxheW91dFZpZXdDaGFuZ2UobGF5b3V0Vmlldyk7XG4gICAgICAgICAgICAgICAgYmxvY2tSZW1vdmVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlIGJsb2NrIHdhcyByZW1vdmVkLCBub3RpZnkgdGhlIGJsb2NrIHJlbW92ZWQuXG4gICAgICAgIGlmIChibG9ja1JlbW92ZWQpIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5QmxvY2tzUmVtb3ZlZChbYmxvY2tJZF0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGlkZUJsb2NrKHNlY3Rpb25JZDogc3RyaW5nLCBibG9ja0lkOiBzdHJpbmcsIGhpZGVJbjogRGF0YVZpZXdTY3JlZW5TaXplW10pIHtcbiAgICAgICAgY29uc3QgbGF5b3V0VmlldyA9IHRoaXMuX2xheW91dFZpZXdTdWJqZWN0LmdldFZhbHVlKCk7XG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gbGF5b3V0Vmlldz8uTGF5b3V0LlNlY3Rpb25zIHx8IFtdO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgaW5kZXggPSBzZWN0aW9ucy5maW5kSW5kZXgoc2VjdGlvbiA9PiBzZWN0aW9uLktleSA9PT0gc2VjdGlvbklkKTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbkluZGV4ID0gc2VjdGlvbnNbaW5kZXhdLkNvbHVtbnMuZmluZEluZGV4KGNvbHVtbiA9PiBjb2x1bW4uQmxvY2tDb250YWluZXI/LkJsb2NrS2V5ID09PSBibG9ja0lkKTtcbiAgICAgICAgICAgIGlmIChjb2x1bW5JbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2tDb250YWluZXIgPSBzZWN0aW9uc1tpbmRleF0uQ29sdW1uc1tjb2x1bW5JbmRleF0uQmxvY2tDb250YWluZXI7XG4gICAgICAgICAgICAgICAgaWYgKGJsb2NrQ29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGJsb2NrQ29udGFpbmVyLkhpZGUgPSBoaWRlSW47XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5TGF5b3V0Vmlld0NoYW5nZShsYXlvdXRWaWV3KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkJsb2NrRHJvcHBlZChldmVudDogQ2RrRHJhZ0Ryb3A8SVBlcExheW91dFNlY3Rpb25Db2x1bW4sIGFueSwgYW55Piwgc2VjdGlvbklkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgbGF5b3V0VmlldyA9IHRoaXMuX2xheW91dFZpZXdTdWJqZWN0LmdldFZhbHVlKCk7XG5cbiAgICAgICAgaWYgKGV2ZW50LnByZXZpb3VzQ29udGFpbmVyLmlkID09PSBMYXlvdXRCdWlsZGVySW50ZXJuYWxTZXJ2aWNlLkFWQUlMQUJMRV9CTE9DS1NfQ09OVEFJTkVSX0lEKSB7XG4gICAgICAgICAgICAvLyBWYWxpZGF0ZSBpZiBibG9ja3MgbnVtYmVyIGFsbG93LlxuICAgICAgICAgICAgaWYgKHRoaXMuX2Jsb2Nrc0xpbWl0TnVtYmVyID4gMCAmJiB0aGlzLmdldEJsb2Nrc051bWJlcigpID49IHRoaXMuX2Jsb2Nrc0xpbWl0TnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IG5ldyBQZXBEaWFsb2dEYXRhKHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ01FU1NBR0VTLkRJQUxPR19OT1RJQ0VfVElUTEUnKSxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnTEFZT1VUX0JVSUxERVIuQkxPQ0tTX0NPVU5UX0xJTUlUX01FU1NBR0UnKSxcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuRGVmYXVsdERpYWxvZyhkYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBibG9jayByZWxhdGlvbiAocHJldmlvdXNDb250YWluZXIuZGF0YSBpcyBJUGVwRHJhZ2dhYmxlSXRlbSBhbmQgaW5zaWRlIHdlIGhhdmUgQXZhaWxhYmxlQmxvY2sgb2JqZWN0KS5cbiAgICAgICAgICAgICAgICBjb25zdCBkcmFnZ2FibGVJdGVtOiBJUGVwRHJhZ2dhYmxlSXRlbSA9IGV2ZW50LnByZXZpb3VzQ29udGFpbmVyLmRhdGFbZXZlbnQucHJldmlvdXNJbmRleF0gYXMgSVBlcERyYWdnYWJsZUl0ZW07XG5cbiAgICAgICAgICAgICAgICBpZiAoZHJhZ2dhYmxlSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBsb2NrIHRoZSBzY3JlZW4gdW50aWxsIHRoZSBlZGl0b3Igd2lsbCBiZSBsb2FkZWQuXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuX2xvY2tTY3JlZW5TdWJqZWN0Lm5leHQodHJ1ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBjb2x1bW4uXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDb2x1bW4gPSB0aGlzLmdldFNlY3Rpb25Db2x1bW5CeUlkRm9yRWRpdG9yKGV2ZW50LmNvbnRhaW5lci5pZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBibG9jayBrZXkgaW4gdGhlIHNlY3Rpb24gYmxvY2sgb25seSBpZiB0aGVyZSBpcyBhIGJsYW5rIGNvbHVtbi5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRDb2x1bW4gJiYgIWN1cnJlbnRDb2x1bW4uQmxvY2tDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdlbmVyYXRlIHRoZSBibG9jayB1dWlkLlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2tLZXkgPSBQZXBHdWlkLm5ld0d1aWQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENvbHVtbi5CbG9ja0NvbnRhaW5lciA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCbG9ja0tleTogYmxvY2tLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBIZXJlIHdlIHVwZGF0ZSB0aGUgbGF5b3V0IHZpZXcgY2F1c2UgdGhlIGxheW91dCBpcyB1cGRhdGVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlMYXlvdXRWaWV3Q2hhbmdlKGxheW91dFZpZXcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBSYWlzZSBibG9jayBhZGRlZCBldmVudC5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrQWRkZWRFdmVudERhdGE6IElQZXBMYXlvdXRCbG9ja0FkZGVkRXZlbnQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQmxvY2tLZXk6IGJsb2NrS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERyYWdnYWJsZUl0ZW06IGRyYWdnYWJsZUl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5QmxvY2tBZGRlZChibG9ja0FkZGVkRXZlbnREYXRhKTsgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fbmF2aWdhdGVUb0VkaXRvckFmdGVyQmxvY2tBZGRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5hdmlnYXRlIHRvIHRoZSBibG9jayBlZGl0b3IuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvRWRpdG9yKCdibG9jaycsIGJsb2NrS2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZHJhZ2dhYmxlSXRlbSBpcyBub3QgYSBJUGVwRHJhZ2dhYmxlSXRlbSB0eXBlXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBibG9jayBtb3ZlZCBiZXR3ZWVuIGNvbHVtbnMgaW4gdGhlIHNhbWUgc2VjdGlvbiBvciBiZXR3ZWVuIGRpZmZlcmVudCBzZWN0aW9ucyBidXQgbm90IGluIHRoZSBzYW1lIGNvbHVtbi5cbiAgICAgICAgICAgIGlmIChldmVudC5jb250YWluZXIuaWQgIT09IGV2ZW50LnByZXZpb3VzQ29udGFpbmVyLmlkKSB7XG4gICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBjb2x1bW4uXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudENvbHVtbiA9IHRoaXMuZ2V0U2VjdGlvbkNvbHVtbkJ5SWRGb3JFZGl0b3IoZXZlbnQuY29udGFpbmVyLmlkKTtcbiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIHByZXZpb3VzIGNvbHVtbi5cbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aXVvc0NvbHVtbiA9IHRoaXMuZ2V0U2VjdGlvbkNvbHVtbkJ5SWRGb3JFZGl0b3IoZXZlbnQucHJldmlvdXNDb250YWluZXIuaWQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRDb2x1bW4gJiYgcHJldml1b3NDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudENvbHVtbi5CbG9ja0NvbnRhaW5lciA9IHByZXZpdW9zQ29sdW1uLkJsb2NrQ29udGFpbmVyO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcHJldml1b3NDb2x1bW4uQmxvY2tDb250YWluZXI7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5TGF5b3V0Vmlld0NoYW5nZShsYXlvdXRWaWV3KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkJsb2NrRHJhZ1N0YXJ0KGV2ZW50OiBDZGtEcmFnU3RhcnQpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VDdXJzb3JPbkRyYWdTdGFydCgpO1xuICAgICAgICAvLyBUYWtlIHRoZSBibG9jayBrZXkgaWYgZXhpc3QsIGVsc2UgdGFrZSB0aGUgYXZhaWxhYmxlIGJsb2NrIGtleSAocmVsYXRpb24ga2V5KS5cbiAgICAgICAgY29uc3QgYmxvY2tLZXkgPSBldmVudC5zb3VyY2UuZGF0YT8uQmxvY2tLZXkgfHwgZXZlbnQuc291cmNlLmRhdGE/LktleTtcbiAgICAgICAgdGhpcy5fZHJhZ2dpbmdCbG9ja0tleS5uZXh0KGJsb2NrS2V5KTtcbiAgICB9XG5cbiAgICBvbkJsb2NrRHJhZ0VuZChldmVudDogQ2RrRHJhZ0VuZCkge1xuICAgICAgICB0aGlzLmNoYW5nZUN1cnNvck9uRHJhZ0VuZCgpO1xuICAgICAgICB0aGlzLl9kcmFnZ2luZ0Jsb2NrS2V5Lm5leHQoJycpO1xuICAgIH1cbiAgICBcbiAgICBkb2VzQ29sdW1uQ29udGFpbkJsb2NrKHNlY3Rpb25JZDogc3RyaW5nLCBjb2x1bW5JbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIGxldCByZXMgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgbGF5b3V0VmlldyA9IHRoaXMuX2xheW91dFZpZXdTdWJqZWN0LmdldFZhbHVlKCk7XG4gICAgICAgIGNvbnN0IHNlY3Rpb24gPSBsYXlvdXRWaWV3Py5MYXlvdXQuU2VjdGlvbnMuZmluZChzZWN0aW9uID0+IHNlY3Rpb24uS2V5ID09PSBzZWN0aW9uSWQpO1xuXG4gICAgICAgIGlmIChzZWN0aW9uICYmIGNvbHVtbkluZGV4ID49IDAgJiYgc2VjdGlvbi5Db2x1bW5zLmxlbmd0aCA+IGNvbHVtbkluZGV4KSB7XG4gICAgICAgICAgICByZXMgPSAhIXNlY3Rpb24uQ29sdW1uc1tjb2x1bW5JbmRleF0uQmxvY2tDb250YWluZXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIHNldFNjcmVlbldpZHRoKHNjcmVlblR5cGU6IERhdGFWaWV3U2NyZWVuU2l6ZSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0Q3NzU2NyZWVuV2lkaChzY3JlZW5UeXBlKVxuXG4gICAgICAgIGNvbnN0IHdpZHRoID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUsIDApO1xuICAgICAgICBpZiAod2lkdGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3NjcmVlbldpZHRoU3ViamVjdC5uZXh0KCcxMDAlJyk7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeVNjcmVlblNpemVDaGFuZ2UoUGVwU2NyZWVuU2l6ZVR5cGUuWEwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fc2NyZWVuV2lkdGhTdWJqZWN0Lm5leHQoYCR7d2lkdGh9cHhgKTtcblxuICAgICAgICAgICAgLy8gQ2hhbmdlIHRoZSBzaXplIGFjY29yZGluZyB0aGUgd2lkdGguXG4gICAgICAgICAgICBpZiAod2lkdGggPj0gMTkyMCkge1xuICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5U2NyZWVuU2l6ZUNoYW5nZShQZXBTY3JlZW5TaXplVHlwZS5YTCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHdpZHRoID49IDEyODAgJiYgd2lkdGggPCAxOTIwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlTY3JlZW5TaXplQ2hhbmdlKFBlcFNjcmVlblNpemVUeXBlLkxHKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAod2lkdGggPj0gOTYwICYmIHdpZHRoIDwgMTI4MCkge1xuICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5U2NyZWVuU2l6ZUNoYW5nZShQZXBTY3JlZW5TaXplVHlwZS5NRCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHdpZHRoID49IDYwMCAmJiB3aWR0aCA8IDk2MCkge1xuICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5U2NyZWVuU2l6ZUNoYW5nZShQZXBTY3JlZW5TaXplVHlwZS5TTSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHdpZHRoIDwgNjAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlTY3JlZW5TaXplQ2hhbmdlKFBlcFNjcmVlblNpemVUeXBlLlhTKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNob3dTa2VsZXRvbihzaG93OiBib29sZWFuKTogdm9pZCB7XG4gICAgLy8gICAgIHRoaXMuX3Nob3dTa2VsZXRvblN1YmplY3QubmV4dChzaG93KTtcbiAgICAvLyB9XG4gICAgXG4gICAgLy8gbG9ja1NjcmVlbih2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIC8vICAgICB0aGlzLm5vdGlmeUxvY2tTY3JlZW4odmFsdWUpO1xuICAgIC8vIH1cblxuICAgIGxvYWRMYXlvdXRCdWlsZGVyKGxheW91dFZpZXc6IElQZXBMYXlvdXRWaWV3KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmVkaXRvck1vZGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9lZGl0b3JzQnJlYWRDcnVtYi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBMb2FkIHRoZSBsYXlvdXQgZWRpdG9yLlxuICAgICAgICAgICAgICAgIHRoaXMubG9hZERlZmF1bHRFZGl0b3IobGF5b3V0Vmlldyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBMb2FkIG9ubHkgdGhlIGxheW91dCB2aWV3LlxuICAgICAgICB0aGlzLm5vdGlmeUxheW91dFZpZXdDaGFuZ2UobGF5b3V0Vmlldyk7XG4gICAgfVxufVxuIl19
627
+ }], ctorParameters: () => [{ type: i1.TranslateService }, { type: i2.PepDialogService }, { type: i3.PepLayoutService }] });
628
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LWJ1aWxkZXItaW50ZXJuYWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21wb3NpdGUtbGliL2xheW91dC1idWlsZGVyL2xheW91dC1idWlsZGVyLWludGVybmFsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFPLEVBQXdELGVBQWUsRUFBcUIsTUFBTSx3QkFBd0IsQ0FBQztBQUVsSSxPQUFPLEVBQW1CLE9BQU8sRUFBb0MsaUJBQWlCLEVBQTBDLE1BQU0seUJBQXlCLENBQUM7QUFHaEssT0FBTyxFQUFjLGVBQWUsRUFBVyxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQWdCLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTVFLE9BQU8sRUFBRSxhQUFhLEVBQW9CLE1BQU0sZ0NBQWdDLENBQUM7QUFDakYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7Ozs7O0FBMEJ4RixNQUFNLE9BQU8sNEJBQTRCO2FBQ3JCLGtDQUE2QixHQUFHLGlCQUFpQixBQUFwQixDQUFxQjthQUNsRCxtQkFBYyxHQUFHLE1BQU0sQUFBVCxDQUFVO0lBUXhDLGVBQWUsQ0FBQyxLQUE0QjtRQUN4QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixJQUFJLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsZ0NBQWdDLEdBQUcsS0FBSyxDQUFDLCtCQUErQixJQUFJLEtBQUssQ0FBQztRQUN2RixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENB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Q0FBQzthQUNyRDtpQkFBTSxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksS0FBSyxHQUFHLElBQUksRUFBRTtnQkFDckMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ3JEO2lCQUFNLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxLQUFLLEdBQUcsR0FBRyxFQUFFO2dCQUNwQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDckQ7aUJBQU0sSUFBSSxLQUFLLEdBQUcsR0FBRyxFQUFFO2dCQUNwQixJQUFJLENBQUMsc0JBQXNCLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDckQ7U0FDSjtJQUNMLENBQUM7SUFFRCxzQ0FBc0M7SUFDdEMsNENBQTRDO0lBQzVDLElBQUk7SUFFSixxQ0FBcUM7SUFDckMsb0NBQW9DO0lBQ3BDLElBQUk7SUFFSixpQkFBaUIsQ0FBQyxVQUEwQjtRQUN4QyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDakIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDdEMsMEJBQTBCO2dCQUMxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDdEM7U0FDSjtRQUVELDZCQUE2QjtRQUM3QixJQUFJLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDNUMsQ0FBQzsrR0FsdEJRLDRCQUE0QjttSEFBNUIsNEJBQTRCOzs0RkFBNUIsNEJBQTRCO2tCQUx4QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBjb2VyY2VOdW1iZXJQcm9wZXJ0eSB9IGZyb20gXCJAYW5ndWxhci9jZGsvY29lcmNpb25cIjtcbmltcG9ydCB7IENka0RyYWdEcm9wLCBDZGtEcmFnRW5kLCBDZGtEcmFnU3RhcnQsIGNvcHlBcnJheUl0ZW0sIG1vdmVJdGVtSW5BcnJheSwgdHJhbnNmZXJBcnJheUl0ZW0gfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2RyYWctZHJvcFwiO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5pbXBvcnQgeyBQZXBBZGRvblNlcnZpY2UsIFBlcEd1aWQsIFBlcEh0dHBTZXJ2aWNlLCBQZXBMYXlvdXRTZXJ2aWNlLCBQZXBTY3JlZW5TaXplVHlwZSwgUGVwU2Vzc2lvblNlcnZpY2UsIFBlcFV0aWxpdGllc1NlcnZpY2UgfSBmcm9tIFwiQHBlcHBlcmktYWRkb25zL25neC1saWJcIjtcbmltcG9ydCB7IElQZXBEcmFnZ2FibGVJdGVtIH0gZnJvbSBcIkBwZXBwZXJpLWFkZG9ucy9uZ3gtbGliL2RyYWdnYWJsZS1pdGVtc1wiO1xuaW1wb3J0IHsgRGF0YVZpZXdTY3JlZW5TaXplLCBTcGxpdFR5cGUgfSBmcm9tIFwiQHBlcHBlcmktYWRkb25zL3BhcGktc2RrXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFBlcExheW91dEVkaXRvclR5cGUsIElQZXBMYXlvdXRCbG9ja0FkZGVkRXZlbnQsIElQZXBMYXlvdXRTZWN0aW9uLCBJUGVwTGF5b3V0U2VjdGlvbkNvbHVtbiwgSVBlcExheW91dFZpZXcsIElQZXBMYXlvdXRCbG9ja0NvbmZpZywgUGVwTGF5b3V0U2l6ZVR5cGUsIElFZGl0b3IgfSBmcm9tIFwiLi9sYXlvdXQtYnVpbGRlci5tb2RlbFwiO1xuaW1wb3J0IHsgUGVwRGlhbG9nRGF0YSwgUGVwRGlhbG9nU2VydmljZSB9IGZyb20gXCJAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYi9kaWFsb2dcIjtcbmltcG9ydCB7IFBlcFBhZGRpbmdTZXR0aW5ncyB9IGZyb20gXCJAcGVwcGVyaS1hZGRvbnMvbmd4LWNvbXBvc2l0ZS1saWIvcGFkZGluZy1zZXR0aW5nc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElMYXlvdXRFZGl0b3Ige1xuICAgIG1heFdpZHRoOiBudW1iZXIsXG4gICAgaG9yaXpvbnRhbFNwYWNpbmc/OiBQZXBMYXlvdXRTaXplVHlwZSxcbiAgICB2ZXJ0aWNhbFNwYWNpbmc/OiBQZXBMYXlvdXRTaXplVHlwZSxcbiAgICBzZWN0aW9uc0dhcD86IFBlcExheW91dFNpemVUeXBlLFxuICAgIGNvbHVtbnNHYXA/OiBQZXBMYXlvdXRTaXplVHlwZSxcbiAgICByb3VuZGVkQ29ybmVycz86IFBlcExheW91dFNpemVUeXBlLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMYXlvdXRTZWN0aW9uRWRpdG9yIHtcbiAgICBpZDogc3RyaW5nLFxuICAgIHNlY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgc3BsaXQ6IFNwbGl0VHlwZSB8IHVuZGVmaW5lZCxcbiAgICBoZWlnaHQ6IG51bWJlcixcbiAgICBjb2xsYXBzZU9uVGFibGV0OiBib29sZWFuLFxuICAgIGZpbGxIZWlnaHQ6IGJvb2xlYW5cbiAgICBwYWRkaW5nOiBQZXBQYWRkaW5nU2V0dGluZ3M7XG59XG5cbkBJbmplY3RhYmxlKFxuLy8gICAgIHtcbi8vICAgICBwcm92aWRlZEluOiAncm9vdCcsXG4vLyB9XG4pXG5leHBvcnQgY2xhc3MgTGF5b3V0QnVpbGRlckludGVybmFsU2VydmljZSB7XG4gICAgc3RhdGljIHJlYWRvbmx5IEFWQUlMQUJMRV9CTE9DS1NfQ09OVEFJTkVSX0lEID0gJ2F2YWlsYWJsZUJsb2Nrcyc7XG4gICAgc3RhdGljIHJlYWRvbmx5IE1BSU5fRURJVE9SX0lEID0gJ21haW4nO1xuXG4gICAgcHJpdmF0ZSBfZGVmYXVsdFNlY3Rpb25UaXRsZSA9ICcnO1xuICAgIFxuICAgIC8vIFRoaXMgY29uZmlndXJhdGlvbiBpcyBmb3IgYmxvY2tzIGJlaGF2aW9yLlxuICAgIHByaXZhdGUgX2Jsb2Nrc0xpbWl0TnVtYmVyID0gMDtcbiAgICBwcml2YXRlIF9uYXZpZ2F0ZVRvRWRpdG9yQWZ0ZXJCbG9ja0FkZGVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfZ2V0QmxvY2tUaXRsZTogKGJsb2NrS2V5OiBzdHJpbmcpID0+IHN0cmluZyA9IChibG9ja0tleSkgPT4geyByZXR1cm4gYmxvY2tLZXkgfTtcbiAgICBzZXRCbG9ja3NDb25maWcodmFsdWU6IElQZXBMYXlvdXRCbG9ja0NvbmZpZykge1xuICAgICAgICB0aGlzLl9ibG9ja3NMaW1pdE51bWJlciA9IHZhbHVlLmJsb2Nrc0xpbWl0TnVtYmVyIHx8IDA7XG4gICAgICAgIHRoaXMuX25hdmlnYXRlVG9FZGl0b3JBZnRlckJsb2NrQWRkZWQgPSB2YWx1ZS5uYXZpZ2F0ZVRvRWRpdG9yQWZ0ZXJCbG9ja0FkZGVkID8/IGZhbHNlO1xuICAgICAgICB0aGlzLl9nZXRCbG9ja1RpdGxlID0gdmFsdWUuZ2V0QmxvY2tUaXRsZSA/IHZhbHVlLmdldEJsb2NrVGl0bGUgOiAoYmxvY2tLZXkpID0+IHsgcmV0dXJuIGJsb2NrS2V5IH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZWRpdG9yc0JyZWFkQ3J1bWIgPSBBcnJheTxJRWRpdG9yPigpO1xuXG4gICAgcHJpdmF0ZSBfZWRpdG9yTW9kZSA9IGZhbHNlO1xuICAgIGdldCBlZGl0b3JNb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWRpdG9yTW9kZTtcbiAgICB9XG4gICAgc2V0RWRpdG9yTW9kZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9lZGl0b3JNb2RlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2V0RWRpdGFibGVTdGF0ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2VkaXRhYmxlU3RhdGUgPSBmYWxzZTtcbiAgICBnZXQgZWRpdGFibGVTdGF0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VkaXRhYmxlU3RhdGU7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBzdWJqZWN0IGlzIGZvciB0aGUgc2NyZWVuIHNpemUgY2hhbmdlIGV2ZW50cy5cbiAgICBwcml2YXRlIF9zY3JlZW5TaXplU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PFBlcFNjcmVlblNpemVUeXBlIHwgdW5kZWZpbmVkPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UGVwU2NyZWVuU2l6ZVR5cGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gICAgZ2V0IHNjcmVlblNpemVDaGFuZ2UkKCk6IE9ic2VydmFibGU8UGVwU2NyZWVuU2l6ZVR5cGUgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NjcmVlblNpemVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgfVxuICAgIFxuICAgIC8vIFRoaXMgc3ViamVjdCBpcyBmb3IgZGVtb3N0cmF0ZSB0aGUgY29udGFpbmVyIHNpemUgKFVzYWdlIG9ubHkgaW4gZWRpdCBtb2RlKS5cbiAgICBwcml2YXRlIF9zY3JlZW5XaWR0aFN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcxMDAlJyk7XG4gICAgZ2V0IHNjcmVlbldpZHRoQ2hhbmdlJCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2NyZWVuV2lkdGhTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBzdWJqZWN0IGlzIGZvciBsb2FkIHRoZSBjdXJyZW50IGVkaXRvciAoVXNhZ2Ugb25seSBpbiBlZGl0IG1vZGUpLlxuICAgIHByaXZhdGUgX2VkaXRvclN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxJRWRpdG9yIHwgbnVsbD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElFZGl0b3IgfCBudWxsPihudWxsKTtcbiAgICBnZXQgZWRpdG9yQ2hhbmdlJCgpOiBPYnNlcnZhYmxlPElFZGl0b3IgfCBudWxsPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lZGl0b3JTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyB0aGUgc2VjdGlvbnMgY29sdW1ucyBkcm9wIGxpc3Qgc3ViamVjdC5cbiAgICBwcml2YXRlIF9zZWN0aW9uc0NvbHVtbnNEcm9wTGlzdFN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPihbXSk7XG4gICAgZ2V0IHNlY3Rpb25zQ29sdW1uc0Ryb3BMaXN0Q2hhbmdlJCgpOiBPYnNlcnZhYmxlPGFueVtdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWN0aW9uc0NvbHVtbnNEcm9wTGlzdFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyB0aGUgc2VjdGlvbnMgc3ViamVjdCAoYSBwYXJlIGZyb20gdGhlIGxheW91dCB2aWV3IG9iamVjdClcbiAgICBwcml2YXRlIF9zZWN0aW9uc1ZpZXdTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8SVBlcExheW91dFNlY3Rpb25bXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElQZXBMYXlvdXRTZWN0aW9uW10+KFtdKTtcbiAgICBnZXQgc2VjdGlvbnNDaGFuZ2UkKCk6IE9ic2VydmFibGU8SVBlcExheW91dFNlY3Rpb25bXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VjdGlvbnNWaWV3U3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICAgICAgLy8gKHByZXZTZWN0aW9ucywgbmV4dFNlY3Rpb25zKSA9PiBKU09OLnN0cmluZ2lmeShwcmV2U2VjdGlvbnMpID09PSBKU09OLnN0cmluZ2lmeShuZXh0U2VjdGlvbnMpKSk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBzdWJqZWN0IGlzIGZvciBsYXlvdXQgdmlldyBjaGFuZ2UuXG4gICAgcHJpdmF0ZSBfbGF5b3V0Vmlld1N1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxJUGVwTGF5b3V0VmlldyB8IG51bGw+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJUGVwTGF5b3V0VmlldyB8IG51bGw+KG51bGwpO1xuICAgIGdldCBsYXlvdXRWaWV3Q2hhbmdlJCgpOiBPYnNlcnZhYmxlPElQZXBMYXlvdXRWaWV3IHwgbnVsbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGF5b3V0Vmlld1N1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShmaWx0ZXIobGF5b3V0ID0+ICEhbGF5b3V0KSk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBzdWJqZWN0IGlzIGZvciBlZGl0IG1vZGUgd2hlbiBibG9jayBpcyBkcmFnZ2luZyBub3cgb3Igbm90LlxuICAgIHByaXZhdGUgX2RyYWdnaW5nQmxvY2tLZXk6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCgnJyk7XG4gICAgZ2V0IGRyYWdnaW5nQmxvY2tLZXkoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RyYWdnaW5nQmxvY2tLZXkuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIHN1YmplY3QgaXMgZm9yIGVkaXQgbW9kZSB3aGVuIHNlY3Rpb24gaXMgZHJhZ2dpbmcgbm93IG9yIG5vdC5cbiAgICBwcml2YXRlIF9kcmFnZ2luZ1NlY3Rpb25LZXk6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCgnJyk7XG4gICAgZ2V0IGRyYWdnaW5nU2VjdGlvbktleSgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZHJhZ2dpbmdTZWN0aW9uS2V5LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgfVxuXG4gICAgLy8gLy8gVGhpcyBzdWJqZWN0IGlzIGZvciBsb2NrIG9yIHVubG9jayB0aGUgc2NyZWVuIChVc2FnZSBvbmx5IGluIGVkaXQgbW9kZSkuXG4gICAgLy8gcHJpdmF0ZSBfbG9ja1NjcmVlblN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIC8vIGdldCBsb2NrU2NyZWVuQ2hhbmdlJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAvLyAgICAgcmV0dXJuIHRoaXMuX2xvY2tTY3JlZW5TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgLy8gfVxuXG4gICAgLy8gVGhpcyBpcyBmb3IgY29udHJvbCB0aGUgcHJldmlldyBtb2RlIChmb3IgbG9hZCB0aGUgYmxvY2tzIHdpdGggdGhlIENQSSBldmVudHMpIFxuICAgIHByaXZhdGUgX3ByZXZpZXdNb2RlU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgZ2V0IHByZXZpZXdNb2RlQ2hhbmdlJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByZXZpZXdNb2RlU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgZm9yIGVkaXRvciBtb2RlIGZvciBibG9jayBhZGRlZC5cbiAgICBwcml2YXRlIF9ibG9ja0FkZGVkRXZlbnRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJUGVwTGF5b3V0QmxvY2tBZGRlZEV2ZW50IHwgbnVsbD4obnVsbCk7XG4gICAgZ2V0IGJsb2NrQWRkZWRFdmVudFN1YmplY3QkKCk6IE9ic2VydmFibGU8SVBlcExheW91dEJsb2NrQWRkZWRFdmVudCB8IG51bGw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Jsb2NrQWRkZWRFdmVudFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIC8vIFRoaXMgaXMgZm9yIGVkaXRvciBtb2RlIGZvciBibG9ja3MgcmVtb3ZlZC5cbiAgICBwcml2YXRlIF9ibG9ja3NSZW1vdmVkRXZlbnRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4oW10pO1xuICAgIGdldCBibG9ja3NSZW1vdmVkRXZlbnRTdWJqZWN0JCgpOiBPYnNlcnZhYmxlPHN0cmluZ1tdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ibG9ja3NSZW1vdmVkRXZlbnRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8vIC8vIFRoaXMgc3ViamVjdCBpcyBmb3Igc2tlbGV0b24uXG4gICAgLy8gcHJpdmF0ZSBfc2hvd1NrZWxldG9uU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICAvLyBnZXQgc2hvd1NrZWxldG9uQ2hhbmdlJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAvLyAgICAgcmV0dXJuIHRoaXMuX3Nob3dTa2VsZXRvblN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgICAvLyB9XG4gICAgXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBkaWFsb2dTZXJ2aWNlOiBQZXBEaWFsb2dTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGxheW91dFNlcnZpY2U6IFBlcExheW91dFNlcnZpY2UsXG4gICAgKSB7XG4gICAgICAgIC8vXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmdldCgnTEFZT1VUX0JVSUxERVIuU0VDVElPTicpLnN1YnNjcmliZSgocmVzOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIC8vIFNldCB0aGUgZGVmYXVsdCBzZWN0aW9uIG5hbWUuXG4gICAgICAgICAgICB0aGlzLl9kZWZhdWx0U2VjdGlvblRpdGxlID0gcmVzO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmxheW91dFNlcnZpY2Uub25SZXNpemUkLnN1YnNjcmliZSgoc2l6ZTogUGVwU2NyZWVuU2l6ZVR5cGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5U2NyZWVuU2l6ZUNoYW5nZShzaXplKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIFxuICAgIHByaXZhdGUgc2V0RWRpdGFibGVTdGF0ZSgpIHtcbiAgICAgICAgdGhpcy5fZWRpdGFibGVTdGF0ZSA9IHRoaXMuZWRpdG9yTW9kZSAmJiAhdGhpcy5fcHJldmlld01vZGVTdWJqZWN0LmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBub3RpZnlMYXlvdXRWaWV3Q2hhbmdlKGxheW91dFZpZXdUb1VwZGF0ZTogSVBlcExheW91dFZpZXcgfCBudWxsKSB7XG4gICAgICAgIGlmIChsYXlvdXRWaWV3VG9VcGRhdGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmVkaXRvck1vZGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUxheW91dEVkaXRvclByb3BlcnRpZXMobGF5b3V0Vmlld1RvVXBkYXRlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBsYXlvdXQgZm9yIHRoZSB2aWV3LlxuICAgICAgICAgICAgdGhpcy5fbGF5b3V0Vmlld1N1YmplY3QubmV4dChsYXlvdXRWaWV3VG9VcGRhdGUpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHNlY3Rpb25zIGZvciB0aGUgdmlldy5cbiAgICAgICAgICAgIHRoaXMuX3NlY3Rpb25zVmlld1N1YmplY3QubmV4dChsYXlvdXRWaWV3VG9VcGRhdGU/LkxheW91dC5TZWN0aW9ucyB8fCBbXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG5vdGlmeUJsb2NrQWRkZWQoYmxvY2tBZGRlZEV2ZW50RGF0YTogSVBlcExheW91dEJsb2NrQWRkZWRFdmVudCkge1xuICAgICAgICAvLyBOb3RpZnkgdGhhdCB0aGUgYmxvY2sgaXMgYWRkZWQgKHRvIHJhaXNlIHRoZSBldmVudCBmb3IgdGhlIGNsaWVudCkuXG4gICAgICAgIHRoaXMuX2Jsb2NrQWRkZWRFdmVudFN1YmplY3QubmV4dChibG9ja0FkZGVkRXZlbnREYXRhKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG5vdGlmeUJsb2Nrc1JlbW92ZWQoa2V5czogc3RyaW5nW10gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGtleXMpIHtcbiAgICAgICAgICAgIC8vIE5vdGlmeSB0aGF0IHRoZSBibG9ja3MgYXJlIHJlbW92ZWQgKHRvIHJhaXNlIHRoZSBldmVudCBmb3IgdGhlIGNsaWVudCkuXG4gICAgICAgICAgICB0aGlzLl9ibG9ja3NSZW1vdmVkRXZlbnRTdWJqZWN0Lm5leHQoa2V5cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG5vdGlmeUVkaXRvckNoYW5nZShlZGl0b3I6IElFZGl0b3IgfCBudWxsKSB7XG4gICAgICAgIHRoaXMuX2VkaXRvclN1YmplY3QubmV4dChlZGl0b3IpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbm90aWZ5UHJldmlld01vZGVDaGFuZ2UodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fcHJldmlld01vZGVTdWJqZWN0Lm5leHQodmFsdWUpO1xuICAgICAgICB0aGlzLnNldEVkaXRhYmxlU3RhdGUoKTtcbiAgICB9XG5cbiAgICAvLyBwcml2YXRlIG5vdGlmeUxvY2tTY3JlZW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICAvLyAgICAgdGhpcy5fbG9ja1NjcmVlblN1YmplY3QubmV4dCh2YWx1ZSk7XG4gICAgLy8gfVxuXG4gICAgcHJpdmF0ZSBub3RpZnlTZWN0aW9uc0NvbHVtbnNEcm9wTGlzdENoYW5nZShzZWN0aW9uc0NvbHVtbnNEcm9wTGlzdDogYW55W10pIHtcbiAgICAgICAgdGhpcy5fc2VjdGlvbnNDb2x1bW5zRHJvcExpc3RTdWJqZWN0Lm5leHQoc2VjdGlvbnNDb2x1bW5zRHJvcExpc3QpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbm90aWZ5U2NyZWVuU2l6ZUNoYW5nZShzaXplOiBQZXBTY3JlZW5TaXplVHlwZSkge1xuICAgICAgICB0aGlzLl9zY3JlZW5TaXplU3ViamVjdC5uZXh0KHNpemUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlTGF5b3V0RWRpdG9yUHJvcGVydGllcyhsYXlvdXRWaWV3OiBJUGVwTGF5b3V0Vmlldykge1xuICAgICAgICBpZiAodGhpcy5fZWRpdG9yc0JyZWFkQ3J1bWJbMF0pIHtcbiAgICAgICAgICAgIGNvbnN0IGxheW91dEVkaXRvcjogSUxheW91dEVkaXRvciA9IHtcbiAgICAgICAgICAgICAgICBtYXhXaWR0aDogbGF5b3V0Vmlldz8uTGF5b3V0Lk1heFdpZHRoIHx8IDAsXG4gICAgICAgICAgICAgICAgdmVydGljYWxTcGFjaW5nOiBsYXlvdXRWaWV3Py5MYXlvdXQuVmVydGljYWxTcGFjaW5nLFxuICAgICAgICAgICAgICAgIGhvcml6b250YWxTcGFjaW5nOiBsYXlvdXRWaWV3Py5MYXlvdXQuSG9yaXpvbnRhbFNwYWNpbmcsXG4gICAgICAgICAgICAgICAgc2VjdGlvbnNHYXA6IGxheW91dFZpZXc/LkxheW91dC5TZWN0aW9uc0dhcCxcbiAgICAgICAgICAgICAgICBjb2x1bW5zR2FwOiBsYXlvdXRWaWV3Py5MYXlvdXQuQ29sdW1uc0dhcCxcbiAgICAgICAgICAgICAgICAvLyByb3VuZGVkQ29ybmVyczogbGF5b3V0Vmlldz8uTGF5b3V0LlJvdW5kZWRDb3JuZXJzXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLl9lZGl0b3JzQnJlYWRDcnVtYlswXS5ob3N0T2JqZWN0ID0gbGF5b3V0RWRpdG9yO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkRGVmYXVsdEVkaXRvcihsYXlvdXRWaWV3OiBJUGVwTGF5b3V0Vmlldykge1xuICAgICAgICB0aGlzLl9lZGl0b3JzQnJlYWRDcnVtYiA9IG5ldyBBcnJheTxJRWRpdG9yPigpO1xuXG4gICAgICAgIGlmIChsYXlvdXRWaWV3KSB7XG4gICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZS5nZXQoJ0xBWU9VVF9CVUlMREVSLkRFRkFVTFRfVElUTEUnKS5zdWJzY3JpYmUoKHRpdGxlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lZGl0b3JzQnJlYWRDcnVtYi5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IExheW91dEJ1aWxkZXJJbnRlcm5hbFNlcnZpY2UuTUFJTl9FRElUT1JfSUQsXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgOiAnbGF5b3V0LWJ1aWxkZXInLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIC8vIGhvc3RPYmplY3Q6IHt9IC8vIFVwZGF0ZXMgaW4gdXBkYXRlTGF5b3V0RWRpdG9yUHJvcGVydGllcyBmdW5jdGlvbiBhYm92ZS5cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTGF5b3V0RWRpdG9yUHJvcGVydGllcyhsYXlvdXRWaWV3KTtcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeUVkaXRvckNoYW5nZSh0aGlzLl9lZGl0b3JzQnJlYWRDcnVtYlswXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5RWRpdG9yQ2hhbmdlKG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGFuZ2VDdXJyZW50RWRpdG9yKCkge1xuICAgICAgICBpZiAodGhpcy5fZWRpdG9yc0JyZWFkQ3J1bWIubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlFZGl0b3JDaGFuZ2UodGhpcy5fZWRpdG9yc0JyZWFkQ3J1bWJbdGhpcy5fZWRpdG9yc0JyZWFkQ3J1bWIubGVuZ3RoIC0gMV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFZGl0b3JCeVR5cGUoZWRpdG9yVHlwZTogUGVwTGF5b3V0RWRpdG9yVHlwZSwgaWQ6IHN0cmluZywgdGl0bGUgPSAnJyk6IElFZGl0b3IgfCBudWxsIHtcbiAgICAgICAgLy8gQnVpbGQgZWRpdG9yIG9iamVjdC5cbiAgICAgICAgbGV0IGVkaXRvcjogSUVkaXRvciB8IG51bGwgPSBudWxsO1xuXG4gICAgICAgIGlmIChlZGl0b3JUeXBlID09PSAnc2VjdGlvbicpIHtcbiAgICAgICAgICAgIGVkaXRvciA9IHRoaXMuZ2V0U2VjdGlvbkVkaXRvcihpZCwgdGl0bGUpO1xuICAgICAgICB9IGVsc2UgaWYgKGVkaXRvclR5cGUgPT09ICdibG9jaycpIHtcbiAgICAgICAgICAgIGVkaXRvciA9IHRoaXMuZ2V0QmxvY2tFZGl0b3IoaWQsIHRpdGxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlZGl0b3I7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRCbG9ja0VkaXRvcihibG9ja0tleTogc3RyaW5nLCB0aXRsZTogc3RyaW5nKTogSUVkaXRvciB7XG4gICAgICAgIC8vIEdldCBibG9jayBlZGl0b3IgdGl0bGUuXG4gICAgICAgIGNvbnN0IGJsb2NrVGl0bGUgPSB0aXRsZSB8fCB0aGlzLmdldEJsb2NrVGl0bGUoYmxvY2tLZXkpOyBcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IGJsb2NrS2V5LFxuICAgICAgICAgICAgdHlwZTogJ2Jsb2NrJyxcbiAgICAgICAgICAgIHRpdGxlOiBibG9ja1RpdGxlXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlY3Rpb25FZGl0b3JUaXRsZShzZWN0aW9uOiBJUGVwTGF5b3V0U2VjdGlvbiwgc2VjdGlvbkluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gc2VjdGlvbi5OYW1lIHx8IGAke3RoaXMuX2RlZmF1bHRTZWN0aW9uVGl0bGV9ICR7c2VjdGlvbkluZGV4ICsgMX1gO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2VjdGlvbkVkaXRvcihzZWN0aW9uSWQ6IHN0cmluZywgdGl0bGU6IHN0cmluZyk6IElFZGl0b3IgfCBudWxsIHtcbiAgICAgICAgY29uc3QgbGF5b3V0VmlldyA9IHRoaXMuX2xheW91dFZpZXdTdWJqZWN0LmdldFZhbHVlKCk7XG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gbGF5b3V0Vmlldz8uTGF5b3V0LlNlY3Rpb25zIHx8IFtdO1xuICAgICAgICBjb25zdCBzZWN0aW9uSW5kZXggPSBzZWN0aW9ucy5maW5kSW5kZXgoc2VjdGlvbiA9PiBzZWN0aW9uLktleSA9PT0gc2VjdGlvbklkKTtcblxuICAgICAgICBpZiAoc2VjdGlvbkluZGV4ID49IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb24gPSBzZWN0aW9uc1tzZWN0aW9uSW5kZXhdO1xuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbkVkaXRvcjogSUxheW91dFNlY3Rpb25FZGl0b3IgPSB7XG4gICAgICAgICAgICAgICAgaWQ6IHNlY3Rpb24uS2V5LFxuICAgICAgICAgICAgICAgIHNlY3Rpb25OYW1lOiBzZWN0aW9uLk5hbWUgfHwgJycsXG4gICAgICAgICAgICAgICAgc3BsaXQ6IHNlY3Rpb24uU3BsaXQgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGhlaWdodDogc2VjdGlvbi5IZWlnaHQgfHwgMCxcbiAgICAgICAgICAgICAgICBjb2xsYXBzZU9uVGFibGV0OiBzZWN0aW9uLkNvbGxhcHNlT25UYWJsZXQgPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgZmlsbEhlaWdodDogc2VjdGlvbi5GaWxsSGVpZ2h0ID8/IGZhbHNlLFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IHNlY3Rpb24uUGFkZGluZyB8fCBuZXcgUGVwUGFkZGluZ1NldHRpbmdzKHRydWUsICcwJylcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpZDogc2VjdGlvbklkLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdzZWN0aW9uJyxcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUgfHwgdGhpcy5nZXRTZWN0aW9uRWRpdG9yVGl0bGUoc2VjdGlvbiwgc2VjdGlvbkluZGV4KSxcbiAgICAgICAgICAgICAgICBob3N0T2JqZWN0OiBzZWN0aW9uRWRpdG9yXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2VjdGlvbkNvbHVtbkJ5SWRGb3JFZGl0b3Ioc2VjdGlvbkNvbHVtbklkOiBzdHJpbmcpOiBJUGVwTGF5b3V0U2VjdGlvbkNvbHVtbiB8IG51bGwge1xuICAgICAgICBsZXQgY3VycmVudENvbHVtbiA9IG51bGw7XG5cbiAgICAgICAgLy8gR2V0IHRoZSBzZWN0aW9uIGFuZCBjb2x1bW4gYXJyYXkgYnkgdGhlIHBhdHRlcm4gb2YgdGhlIHNlY3Rpb24gY29sdW1uIGtleS5cbiAgICAgICAgY29uc3Qgc2VjdGlvbkNvbHVtblBhdHRlcm5TZXBhcmF0b3IgPSB0aGlzLmdldFNlY3Rpb25Db2x1bW5LZXkoKTtcbiAgICAgICAgY29uc3Qgc2VjdGlvbkNvbHVtbkFyciA9IHNlY3Rpb25Db2x1bW5JZC5zcGxpdChzZWN0aW9uQ29sdW1uUGF0dGVyblNlcGFyYXRvcik7XG5cbiAgICAgICAgaWYgKHNlY3Rpb25Db2x1bW5BcnIubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICBjb25zdCBsYXlvdXRWaWV3ID0gdGhpcy5fbGF5b3V0Vmlld1N1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25zID0gbGF5b3V0Vmlldz8uTGF5b3V0LlNlY3Rpb25zIHx8IFtdO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBHZXQgdGhlIHNlY3Rpb24gaWQgdG8gZ2V0IHRoZSBzZWN0aW9uIGluZGV4LlxuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbklkID0gc2VjdGlvbkNvbHVtbkFyclswXTtcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25JbmRleCA9IHNlY3Rpb25zLmZpbmRJbmRleChzZWN0aW9uID0+IHNlY3Rpb24uS2V5ID09PSBzZWN0aW9uSWQpO1xuICAgICAgICAgICAgLy8gR2V0IHRoZSBjb2x1bW4gaW5kZXguXG4gICAgICAgICAgICBjb25zdCBjb2x1bW5JbmRleCA9IGNvZXJjZU51bWJlclByb3BlcnR5KHNlY3Rpb25Db2x1bW5BcnJbMV0sIC0xKTtcbiAgICAgICAgICAgIGlmIChzZWN0aW9uSW5kZXggPj0gMCAmJiBjb2x1bW5JbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudENvbHVtbiA9IHNlY3Rpb25zW3NlY3Rpb25JbmRleF0uQ29sdW1uc1tjb2x1bW5JbmRleF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY3VycmVudENvbHVtbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENzc1NjcmVlbldpZGgoc2NyZWVuVHlwZTogRGF0YVZpZXdTY3JlZW5TaXplKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHdpZHRoVG9TZXQgPSAnMTAwJSc7XG5cbiAgICAgICAgaWYgKHNjcmVlblR5cGUgPT09ICdUYWJsZXQnKSB7XG4gICAgICAgICAgICB3aWR0aFRvU2V0ID0gJzcyMCc7XG4gICAgICAgIH0gZWxzZSBpZiAoc2NyZWVuVHlwZSA9PT0gJ1BoYWJsZXQnKSB7XG4gICAgICAgICAgICB3aWR0aFRvU2V0ID0gJzM2MCc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gd2lkdGhUb1NldDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEJsb2Nrc051bWJlcigpOiBudW1iZXIge1xuICAgICAgICBsZXQgYmxvY2tzTnVtYmVyID0gMDtcbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSB0aGlzLl9sYXlvdXRWaWV3U3ViamVjdC5nZXRWYWx1ZSgpPy5MYXlvdXQuU2VjdGlvbnMgfHwgW107XG5cbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHNlY3Rpb25zLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbiA9IHNlY3Rpb25zW2luZGV4XTtcbiAgICAgICAgXG4gICAgICAgICAgICBmb3IgKGxldCBjb2x1bW5JbmRleCA9IDA7IGNvbHVtbkluZGV4IDwgc2VjdGlvbi5Db2x1bW5zLmxlbmd0aDsgY29sdW1uSW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHNlY3Rpb24uQ29sdW1uc1tjb2x1bW5JbmRleF07XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbi5CbG9ja0NvbnRhaW5lciAmJiBjb2x1bW4uQmxvY2tDb250YWluZXIuQmxvY2tLZXk/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYmxvY2tzTnVtYmVyKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGJsb2Nrc051bWJlcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoYW5nZUN1cnNvck9uRHJhZ1N0YXJ0KCkge1xuICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2luaGVyaXRDdXJzb3JzJyk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gJ2dyYWJiaW5nJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoYW5nZUN1cnNvck9uRHJhZ0VuZCgpIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdpbmhlcml0Q3Vyc29ycycpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9ICd1bnNldCc7XG4gICAgfVxuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpYyBmdW5jdGlvbnNcbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICBnZXRCbG9ja1RpdGxlKGJsb2NrS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0QmxvY2tUaXRsZShibG9ja0tleSkgfHwgYmxvY2tLZXk7XG4gICAgfVxuXG4gICAgc2V0U2VjdGlvbnNDb2x1bW5zRHJvcExpc3RDaGFuZ2Uoc2VjdGlvbnNDb2x1bW5zRHJvcExpc3Q6IGFueVtdKSB7XG4gICAgICAgIHRoaXMubm90aWZ5U2VjdGlvbnNDb2x1bW5zRHJvcExpc3RDaGFuZ2Uoc2VjdGlvbnNDb2x1bW5zRHJvcExpc3QpO1xuICAgIH1cblxuICAgIGNoYW5nZVByZXZpZXdNb2RlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMubm90aWZ5UHJldmlld01vZGVDaGFuZ2UodmFsdWUpO1xuICAgIH1cblxuICAgIGdldEN1cnJlbnRTY3JlZW5UeXBlKCk6IERhdGFWaWV3U2NyZWVuU2l6ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFNjcmVlblR5cGUodGhpcy5fc2NyZWVuU2l6ZVN1YmplY3Q/LmdldFZhbHVlKCkgfHwgUGVwU2NyZWVuU2l6ZVR5cGUuTEcpO1xuICAgIH1cblxuICAgIGdldFNjcmVlblR5cGUoc2l6ZTogUGVwU2NyZWVuU2l6ZVR5cGUpOiBEYXRhVmlld1NjcmVlblNpemUge1xuICAgICAgICBjb25zdCBzY3JlZW5UeXBlOiBEYXRhVmlld1NjcmVlblNpemUgPVxuICAgICAgICAgICAgc2l6ZSA8IFBlcFNjcmVlblNpemVUeXBlLk1EID8gJ0xhbmRzY2FwZScgOlxuICAgICAgICAgICAgKHNpemUgPT09IFBlcFNjcmVlblNpemVUeXBlLk1EIHx8IHNpemUgPT09IFBlcFNjcmVlblNpemVUeXBlLlNNID8gJ1RhYmxldCcgOiAnUGhhYmxldCcpO1xuXG4gICAgICAgIHJldHVybiBzY3JlZW5UeXBlO1xuICAgIH1cblxuICAgIGdldFNlY3Rpb25Db2x1bW5LZXkoc2VjdGlvbktleSA9ICcnLCBpbmRleCA9ICcnKSB7XG4gICAgICAgIHJldHVybiBgJHtzZWN0aW9uS2V5fV9jb2x1bW5fJHtpbmRleH1gO1xuICAgIH1cblxuICAgIGdldElzSGlkZGVuKGhpZGVJbjogRGF0YVZpZXdTY3JlZW5TaXplW10gfCB1bmRlZmluZWQsIGN1cnJlbnRTY3JlZW5UeXBlOiBEYXRhVmlld1NjcmVlblNpemUpIHtcbiAgICAgICAgcmV0dXJuIChoaWRlSW4gJiYgaGlkZUluPy5sZW5ndGggPiAwKSA/IGhpZGVJbi5zb21lKGhpID0+IGhpID09PSBjdXJyZW50U2NyZWVuVHlwZSkgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBuYXZpZ2F0ZVRvRWRpdG9yKGVkaXRvclR5cGU6IFBlcExheW91dEVkaXRvclR5cGUsIGlkOiBzdHJpbmcsIHRpdGxlID0gJycpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAvLyBDYW5ub3QgbmF2aWdhdGUgaW50byAnbGF5b3V0LWJ1aWxkZXInIGJlY2F1c2UgdGhpcyBpcyBmaXJzdCBhbmQgY29uc3QgaW4gdGhlIGVkaXRvcnNCcmVhZENydW1icy5cbiAgICAgICAgaWYgKGVkaXRvclR5cGUgIT09ICdsYXlvdXQtYnVpbGRlcicgJiYgaWQ/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIENoZWNrIHdoaWNoIGVkaXRvciB3ZSBoYXZlIG5vd1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEVkaXRvciA9IHRoaXMuX2VkaXRvcnNCcmVhZENydW1iW3RoaXMuX2VkaXRvcnNCcmVhZENydW1iLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgICAgICAvLyBPbmx5IGlmIGl0J3MgYW5vdGhlciBlZGl0b3IuXG4gICAgICAgICAgICBpZihjdXJyZW50RWRpdG9yLmlkICE9PSBpZCkge1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50RWRpdG9yLnR5cGUgIT09ICdsYXlvdXQtYnVpbGRlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQWx3YXlzIHBvcCB0aGUgbGFzdCBhbmQgaW5zZXJ0IHRoZSBjdXJyZW50LlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lZGl0b3JzQnJlYWRDcnVtYi5wb3AoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmdldEVkaXRvckJ5VHlwZShlZGl0b3JUeXBlLCBpZCwgdGl0bGUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGVkaXRvcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lZGl0b3JzQnJlYWRDcnVtYi5wdXNoKGVkaXRvcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlQ3VycmVudEVkaXRvcigpO1xuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgfVxuXG4gICAgbmF2aWdhdGVCYWNrRnJvbUVkaXRvcigpIHtcbiAgICAgICAgLy8gS2VlcCB0aGUgbGF5b3V0IGJ1aWxkZXIgZWRpdG9yLlxuICAgICAgICBpZiAodGhpcy5fZWRpdG9yc0JyZWFkQ3J1bWIubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgLy8gTWF5YmUgd2Ugd2FudCB0byBjb21wYXJlIHRoZSBsYXN0IGVkaXRvciBmb3IgdmFsaWRhdGlvbiA/XG4gICAgICAgICAgICBjb25zdCBsYXN0RWRpdG9yID0gdGhpcy5fZWRpdG9yc0JyZWFkQ3J1bWIucG9wKCk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZUN1cnJlbnRFZGl0b3IoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZUxheW91dEZyb21FZGl0b3IoZWRpdG9yRGF0YTogSUxheW91dEVkaXRvcikge1xuICAgICAgICBjb25zdCBsYXlvdXRWaWV3ID0gdGhpcy5fbGF5b3V0Vmlld1N1YmplY3QuZ2V0VmFsdWUoKTtcblxuICAgICAgICBpZiAobGF5b3V0Vmlldykge1xuICAgICAgICAgICAgbGF5b3V0Vmlldy5MYXlvdXQuTWF4V2lkdGggPSBlZGl0b3JEYXRhLm1heFdpZHRoO1xuICAgICAgICAgICAgbGF5b3V0Vmlldy5MYXlvdXQuSG9yaXpvbnRhbFNwYWNpbmcgPSBlZGl0b3JEYXRhLmhvcml6b250YWxTcGFjaW5nO1xuICAgICAgICAgICAgbGF5b3V0Vmlldy5MYXlvdXQuVmVydGljYWxTcGFjaW5nID0gZWRpdG9yRGF0YS52ZXJ0aWNhbFNwYWNpbmc7XG4gICAgICAgICAgICBsYXlvdXRWaWV3LkxheW91dC5TZWN0aW9uc0dhcCA9IGVkaXRvckRhdGEuc2VjdGlvbnNHYXA7XG4gICAgICAgICAgICBsYXlvdXRWaWV3LkxheW91dC5Db2x1bW5zR2FwID0gZWRpdG9yRGF0YS5jb2x1bW5zR2FwO1xuICAgICAgICAgICAgLy8gbGF5b3V0Vmlldy5MYXlvdXQuUm91bmRlZENvcm5lcnMgPSBlZGl0b3JEYXRhLnJvdW5kZWRDb3JuZXJzO1xuXG4gICAgICAgICAgICB0aGlzLm5vdGlmeUxheW91dFZpZXdDaGFuZ2UobGF5b3V0Vmlldyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgdXBkYXRlU2VjdGlvbkZyb21FZGl0b3Ioc2VjdGlvbkRhdGE6IElMYXlvdXRTZWN0aW9uRWRpdG9yKSB7XG4gICAgICAgIGNvbnN0IGxheW91dFZpZXcgPSB0aGlzLl9sYXlvdXRWaWV3U3ViamVjdC5nZXRWYWx1ZSgpO1xuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IGxheW91dFZpZXc/LkxheW91dC5TZWN0aW9ucyB8fCBbXTtcbiAgICAgICAgY29uc3Qgc2VjdGlvbkluZGV4ID0gc2VjdGlvbnMuZmluZEluZGV4KHNlY3Rpb24gPT4gc2VjdGlvbi5LZXkgPT09IHNlY3Rpb25EYXRhLmlkKTtcblxuICAgICAgICAvLyBVcGRhdGUgc2VjdGlvbiBkZXRhaWxzLlxuICAgICAgICBpZiAoc2VjdGlvbkluZGV4ID49IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGJsb2Nrc0lkc1RvUmVtb3ZlID0gW107XG5cbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTZWN0aW9uID0gc2VjdGlvbnNbc2VjdGlvbkluZGV4XTtcbiAgICAgICAgICAgIGN1cnJlbnRTZWN0aW9uLk5hbWUgPSBzZWN0aW9uRGF0YS5zZWN0aW9uTmFtZTtcbiAgICAgICAgICAgIGN1cnJlbnRTZWN0aW9uLlNwbGl0ID0gc2VjdGlvbkRhdGEuc3BsaXQ7XG4gICAgICAgICAgICBjdXJyZW50U2VjdGlvbi5IZWlnaHQgPSBzZWN0aW9uRGF0YS5oZWlnaHQ7XG4gICAgICAgICAgICBjdXJyZW50U2VjdGlvbi5Db2xsYXBzZU9uVGFibGV0ID0gc2VjdGlvbkRhdGEuY29sbGFwc2VPblRhYmxldDtcbiAgICAgICAgICAgIGN1cnJlbnRTZWN0aW9uLkZpbGxIZWlnaHQgPSBzZWN0aW9uRGF0YS5maWxsSGVpZ2h0O1xuICAgICAgICAgICAgY3VycmVudFNlY3Rpb24uUGFkZGluZyA9IHNlY3Rpb25EYXRhLnBhZGRpbmc7XG5cbiAgICAgICAgICAgIC8vIEdldCB0aGUgbmV3IGNvbHVtbnMgbnVtYmVyIGZyb20gY3VycmVudFNlY3Rpb24uU3BsaXQsIGlmIGl0cyB1bmRlZmluZWQgcHV0IGEgZGVmYXVsdCAxLlxuICAgICAgICAgICAgY29uc3QgbmV3Q29sdW1uc0xlbmd0aCA9IGN1cnJlbnRTZWN0aW9uLlNwbGl0Py5zcGxpdCgnICcpLmxlbmd0aCB8fCAxO1xuICAgICAgICAgICAgaWYgKG5ld0NvbHVtbnNMZW5ndGggPiBjdXJyZW50U2VjdGlvbi5Db2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHdoaWxlIChuZXdDb2x1bW5zTGVuZ3RoID4gY3VycmVudFNlY3Rpb24uQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFNlY3Rpb24uQ29sdW1ucy5wdXNoKHt9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG5ld0NvbHVtbnNMZW5ndGggPCBjdXJyZW50U2VjdGlvbi5Db2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHdoaWxlIChuZXdDb2x1bW5zTGVuZ3RoIDwgY3VycmVudFNlY3Rpb24uQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW5tID0gY3VycmVudFNlY3Rpb24uQ29sdW1ucy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYmxvY2sgaW4gdGhpcyBjb2x1bW4gZGVsZXRlIGl0LlxuICAgICAgICAgICAgICAgICAgICBpZiAoY29sdW5tICYmIGNvbHVubS5CbG9ja0NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzSWRzVG9SZW1vdmUucHVzaChjb2x1bm0uQmxvY2tDb250YWluZXIuQmxvY2tLZXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBVcGRhdGUgZWRpdG9yIHRpdGxlXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50RWRpdG9yID0gdGhpcy5fZWRpdG9yU3ViamVjdC5nZXRWYWx1ZSgpO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRFZGl0b3IgJiYgY3VycmVudEVkaXRvci50eXBlID09PSAnc2VjdGlvbicgJiYgY3VycmVudEVkaXRvci5pZCA9PT0gY3VycmVudFNlY3Rpb24uS2V5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGl0bGUgPSB0aGlzLmdldFNlY3Rpb25FZGl0b3JUaXRsZShjdXJyZW50U2VjdGlvbiwgc2VjdGlvbkluZGV4KTtcbiAgICAgICAgICAgICAgICBjdXJyZW50RWRpdG9yLnRpdGxlID0gdGl0bGU7XG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlFZGl0b3JDaGFuZ2UoY3VycmVudEVkaXRvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFVwZGF0ZSBzZWN0aW9ucyBjaGFuZ2UuXG4gICAgICAgICAgICB0aGlzLm5vdGlmeUxheW91dFZpZXdDaGFuZ2UobGF5b3V0Vmlldyk7XG5cbiAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBibG9ja3MgdG8gcmVtb3ZlLCBub3RpZnkgdGhlIGJsb2NrcyByZW1vdmVkLlxuICAgICAgICAgICAgaWYgKGJsb2Nrc0lkc1RvUmVtb3ZlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeUJsb2Nrc1JlbW92ZWQoYmxvY2tzSWRzVG9SZW1vdmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkU2VjdGlvbihzZWN0aW9uOiBJUGVwTGF5b3V0U2VjdGlvbiB8IG51bGwgPSBudWxsKSB7XG4gICAgICAgIC8vIENyZWF0ZSBuZXcgc2VjdGlvblxuICAgICAgICBpZiAoIXNlY3Rpb24pIHtcbiAgICAgICAgICAgIHNlY3Rpb24gPSB7XG4gICAgICAgICAgICAgICAgS2V5OiBQZXBHdWlkLm5ld0d1aWQoKSxcbiAgICAgICAgICAgICAgICBDb2x1bW5zOiBbe31dLCAvLyBBZGQgZW1wdHkgc2VjdGlvbiBjb2x1bW5cbiAgICAgICAgICAgICAgICBIaWRlOiBbXVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWRkIHRoZSBuZXcgc2VjdGlvbiB0byBsYXlvdXQgdmlldy5cbiAgICAgICAgY29uc3QgbGF5b3V0VmlldyA9IHRoaXMuX2xheW91dFZpZXdTdWJqZWN0LmdldFZhbHVlKCk7XG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gbGF5b3V0Vmlldz8uTGF5b3V0LlNlY3Rpb25zIHx8IFtdO1xuICAgICAgICBzZWN0aW9ucy5wdXNoKHNlY3Rpb24pO1xuICAgICAgICB0aGlzLm5vdGlmeUxheW91dFZpZXdDaGFuZ2UobGF5b3V0Vmlldyk7XG4gICAgfVxuXG4gICAgcmVtb3ZlU2VjdGlvbihzZWN0aW9uSWQ6IHN0cmluZykge1xuICAgICAgICBjb25zdCBsYXlvdXRWaWV3ID0gdGhpcy5fbGF5b3V0Vmlld1N1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBsYXlvdXRWaWV3Py5MYXlvdXQuU2VjdGlvbnMgfHwgW107XG4gICAgICAgIGNvbnN0IGluZGV4ID0gc2VjdGlvbnMuZmluZEluZGV4KHNlY3Rpb24gPT4gc2VjdGlvbi5LZXkgPT09IHNlY3Rpb25JZCk7XG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAvLyBHZXQgdGhlIGJsb2NrcyBpZCdzIHRvIHJlbW92ZS5cbiAgICAgICAgICAgIGNvbnN0IGJsb2Nrc0lkc1RvUmVtb3ZlOiBhbnkgPSBzZWN0aW9uc1tpbmRleF0uQ29sdW1ucy5tYXAoY29sdW1uID0+IGNvbHVtbj8uQmxvY2tDb250YWluZXI/LkJsb2NrS2V5KTtcblxuICAgICAgICAgICAgLy8gUmVtb3ZlIHNlY3Rpb24uXG4gICAgICAgICAgICBzZWN0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlMYXlvdXRWaWV3Q2hhbmdlKGxheW91dFZpZXcpO1xuXG4gICAgICAgICAgICAvLyBJZiB0aGVyZSBhcmUgYmxvY2tzIHRvIHJlbW92ZSwgbm90aWZ5IHRoZSBibG9ja3MgcmVtb3ZlZC5cbiAgICAgICAgICAgIGlmIChibG9ja3NJZHNUb1JlbW92ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlCbG9ja3NSZW1vdmVkKGJsb2Nrc0lkc1RvUmVtb3ZlKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGlkZVNlY3Rpb24oc2VjdGlvbklkOiBzdHJpbmcsIGhpZGVJbjogRGF0YVZpZXdTY3JlZW5TaXplW10pIHtcbiAgICAgICAgY29uc3QgbGF5b3V0VmlldyA9IHRoaXMuX2xheW91dFZpZXdTdWJqZWN0LmdldFZhbHVlKCk7XG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gbGF5b3V0Vmlldz8uTGF5b3V0LlNlY3Rpb25zIHx8IFtdO1xuICAgICAgICBjb25zdCBpbmRleCA9IHNlY3Rpb25zLmZpbmRJbmRleChzZWN0aW9uID0+IHNlY3Rpb24uS2V5ID09PSBzZWN0aW9uSWQpO1xuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgc2VjdGlvbnNbaW5kZXhdLkhpZGUgPSBoaWRlSW47XG4gICAgICAgICAgICB0aGlzLm5vdGlmeUxheW91dFZpZXdDaGFuZ2UobGF5b3V0Vmlldyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblNlY3Rpb25Ecm9wcGVkKGV2ZW50OiBDZGtEcmFnRHJvcDxhbnlbXT4pIHtcbiAgICAgICAgY29uc3QgbGF5b3V0VmlldyA9IHRoaXMuX2xheW91dFZpZXdTdWJqZWN0LmdldFZhbHVlKCk7XG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gbGF5b3V0Vmlldz8uTGF5b3V0LlNlY3Rpb25zIHx8IFtdO1xuICAgICAgICBtb3ZlSXRlbUluQXJyYXkoc2VjdGlvbnMsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XG4gICAgICAgIHRoaXMubm90aWZ5TGF5b3V0Vmlld0NoYW5nZShsYXlvdXRWaWV3KTtcbiAgICB9XG5cbiAgICBvblNlY3Rpb25EcmFnU3RhcnQoZXZlbnQ6IENka0RyYWdTdGFydCkge1xuICAgICAgICB0aGlzLmNoYW5nZUN1cnNvck9uRHJhZ1N0YXJ0KCk7XG4gICAgICAgIHRoaXMuX2RyYWdnaW5nU2VjdGlvbktleS5uZXh0KGV2ZW50LnNvdXJjZS5kYXRhKTtcbiAgICB9XG5cbiAgICBvblNlY3Rpb25EcmFnRW5kKGV2ZW50OiBDZGtEcmFnRW5kKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlQ3Vyc29yT25EcmFnRW5kKCk7XG4gICAgICAgIHRoaXMuX2RyYWdnaW5nU2VjdGlvbktleS5uZXh0KCcnKTtcbiAgICB9XG5cbiAgICByZW1vdmVCbG9ja0Zyb21TZWN0aW9uKGJsb2NrSWQ6IHN0cmluZykge1xuICAgICAgICBsZXQgYmxvY2tSZW1vdmVkID0gZmFsc2U7XG5cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBibG9jayBmcm9tIHNlY3Rpb24gY29sdW1uLlxuICAgICAgICBjb25zdCBsYXlvdXRWaWV3ID0gdGhpcy5fbGF5b3V0Vmlld1N1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBsYXlvdXRWaWV3Py5MYXlvdXQuU2VjdGlvbnMgfHwgW107XG4gICAgICAgIFxuICAgICAgICBmb3IgKGxldCBzZWN0aW9uSW5kZXggPSAwOyBzZWN0aW9uSW5kZXggPCBzZWN0aW9ucy5sZW5ndGg7IHNlY3Rpb25JbmRleCsrKSB7XG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uID0gc2VjdGlvbnNbc2VjdGlvbkluZGV4XTtcblxuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBibG9jayBjb250YWluZXIuXG4gICAgICAgICAgICBjb25zdCBjb2x1bW5JbmRleCA9IHNlY3Rpb24uQ29sdW1ucy5maW5kSW5kZXgoY29sdW1uID0+IGNvbHVtbi5CbG9ja0NvbnRhaW5lcj8uQmxvY2tLZXkgPT09IGJsb2NrSWQpO1xuICAgICAgICAgICAgaWYgKGNvbHVtbkluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgc2VjdGlvbi5Db2x1bW5zW2NvbHVtbkluZGV4XS5CbG9ja0NvbnRhaW5lcjtcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeUxheW91dFZpZXdDaGFuZ2UobGF5b3V0Vmlldyk7XG4gICAgICAgICAgICAgICAgYmxvY2tSZW1vdmVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlIGJsb2NrIHdhcyByZW1vdmVkLCBub3RpZnkgdGhlIGJsb2NrIHJlbW92ZWQuXG4gICAgICAgIGlmIChibG9ja1JlbW92ZWQpIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5QmxvY2tzUmVtb3ZlZChbYmxvY2tJZF0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGlkZUJsb2NrKHNlY3Rpb25JZDogc3RyaW5nLCBibG9ja0lkOiBzdHJpbmcsIGhpZGVJbjogRGF0YVZpZXdTY3JlZW5TaXplW10pIHtcbiAgICAgICAgY29uc3QgbGF5b3V0VmlldyA9IHRoaXMuX2xheW91dFZpZXdTdWJqZWN0LmdldFZhbHVlKCk7XG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gbGF5b3V0Vmlldz8uTGF5b3V0LlNlY3Rpb25zIHx8IFtdO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgaW5kZXggPSBzZWN0aW9ucy5maW5kSW5kZXgoc2VjdGlvbiA9PiBzZWN0aW9uLktleSA9PT0gc2VjdGlvbklkKTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbkluZGV4ID0gc2VjdGlvbnNbaW5kZXhdLkNvbHVtbnMuZmluZEluZGV4KGNvbHVtbiA9PiBjb2x1bW4uQmxvY2tDb250YWluZXI/LkJsb2NrS2V5ID09PSBibG9ja0lkKTtcbiAgICAgICAgICAgIGlmIChjb2x1bW5JbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2tDb250YWluZXIgPSBzZWN0aW9uc1tpbmRleF0uQ29sdW1uc1tjb2x1bW5JbmRleF0uQmxvY2tDb250YWluZXI7XG4gICAgICAgICAgICAgICAgaWYgKGJsb2NrQ29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGJsb2NrQ29udGFpbmVyLkhpZGUgPSBoaWRlSW47XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5TGF5b3V0Vmlld0NoYW5nZShsYXlvdXRWaWV3KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkJsb2NrRHJvcHBlZChldmVudDogQ2RrRHJhZ0Ryb3A8SVBlcExheW91dFNlY3Rpb25Db2x1bW4sIGFueSwgYW55Piwgc2VjdGlvbklkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgbGF5b3V0VmlldyA9IHRoaXMuX2xheW91dFZpZXdTdWJqZWN0LmdldFZhbHVlKCk7XG5cbiAgICAgICAgaWYgKGV2ZW50LnByZXZpb3VzQ29udGFpbmVyLmlkID09PSBMYXlvdXRCdWlsZGVySW50ZXJuYWxTZXJ2aWNlLkFWQUlMQUJMRV9CTE9DS1NfQ09OVEFJTkVSX0lEKSB7XG4gICAgICAgICAgICAvLyBWYWxpZGF0ZSBpZiBibG9ja3MgbnVtYmVyIGFsbG93LlxuICAgICAgICAgICAgaWYgKHRoaXMuX2Jsb2Nrc0xpbWl0TnVtYmVyID4gMCAmJiB0aGlzLmdldEJsb2Nrc051bWJlcigpID49IHRoaXMuX2Jsb2Nrc0xpbWl0TnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IG5ldyBQZXBEaWFsb2dEYXRhKHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ01FU1NBR0VTLkRJQUxPR19OT1RJQ0VfVElUTEUnKSxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnTEFZT1VUX0JVSUxERVIuQkxPQ0tTX0NPVU5UX0xJTUlUX01FU1NBR0UnKSxcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuRGVmYXVsdERpYWxvZyhkYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBibG9jayByZWxhdGlvbiAocHJldmlvdXNDb250YWluZXIuZGF0YSBpcyBJUGVwRHJhZ2dhYmxlSXRlbSBhbmQgaW5zaWRlIHdlIGhhdmUgQXZhaWxhYmxlQmxvY2sgb2JqZWN0KS5cbiAgICAgICAgICAgICAgICBjb25zdCBkcmFnZ2FibGVJdGVtOiBJUGVwRHJhZ2dhYmxlSXRlbSA9IGV2ZW50LnByZXZpb3VzQ29udGFpbmVyLmRhdGFbZXZlbnQucHJldmlvdXNJbmRleF0gYXMgSVBlcERyYWdnYWJsZUl0ZW07XG5cbiAgICAgICAgICAgICAgICBpZiAoZHJhZ2dhYmxlSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBsb2NrIHRoZSBzY3JlZW4gdW50aWxsIHRoZSBlZGl0b3Igd2lsbCBiZSBsb2FkZWQuXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuX2xvY2tTY3JlZW5TdWJqZWN0Lm5leHQodHJ1ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBjb2x1bW4uXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDb2x1bW4gPSB0aGlzLmdldFNlY3Rpb25Db2x1bW5CeUlkRm9yRWRpdG9yKGV2ZW50LmNvbnRhaW5lci5pZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBibG9jayBrZXkgaW4gdGhlIHNlY3Rpb24gYmxvY2sgb25seSBpZiB0aGVyZSBpcyBhIGJsYW5rIGNvbHVtbi5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRDb2x1bW4gJiYgIWN1cnJlbnRDb2x1bW4uQmxvY2tDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdlbmVyYXRlIHRoZSBibG9jayB1dWlkLlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2tLZXkgPSBQZXBHdWlkLm5ld0d1aWQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENvbHVtbi5CbG9ja0NvbnRhaW5lciA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCbG9ja0tleTogYmxvY2tLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBIZXJlIHdlIHVwZGF0ZSB0aGUgbGF5b3V0IHZpZXcgY2F1c2UgdGhlIGxheW91dCBpcyB1cGRhdGVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlMYXlvdXRWaWV3Q2hhbmdlKGxheW91dFZpZXcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBSYWlzZSBibG9jayBhZGRlZCBldmVudC5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrQWRkZWRFdmVudERhdGE6IElQZXBMYXlvdXRCbG9ja0FkZGVkRXZlbnQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQmxvY2tLZXk6IGJsb2NrS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERyYWdnYWJsZUl0ZW06IGRyYWdnYWJsZUl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5QmxvY2tBZGRlZChibG9ja0FkZGVkRXZlbnREYXRhKTsgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fbmF2aWdhdGVUb0VkaXRvckFmdGVyQmxvY2tBZGRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5hdmlnYXRlIHRvIHRoZSBibG9jayBlZGl0b3IuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvRWRpdG9yKCdibG9jaycsIGJsb2NrS2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZHJhZ2dhYmxlSXRlbSBpcyBub3QgYSBJUGVwRHJhZ2dhYmxlSXRlbSB0eXBlXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBibG9jayBtb3ZlZCBiZXR3ZWVuIGNvbHVtbnMgaW4gdGhlIHNhbWUgc2VjdGlvbiBvciBiZXR3ZWVuIGRpZmZlcmVudCBzZWN0aW9ucyBidXQgbm90IGluIHRoZSBzYW1lIGNvbHVtbi5cbiAgICAgICAgICAgIGlmIChldmVudC5jb250YWluZXIuaWQgIT09IGV2ZW50LnByZXZpb3VzQ29udGFpbmVyLmlkKSB7XG4gICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBjb2x1bW4uXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudENvbHVtbiA9IHRoaXMuZ2V0U2VjdGlvbkNvbHVtbkJ5SWRGb3JFZGl0b3IoZXZlbnQuY29udGFpbmVyLmlkKTtcbiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIHByZXZpb3VzIGNvbHVtbi5cbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aXVvc0NvbHVtbiA9IHRoaXMuZ2V0U2VjdGlvbkNvbHVtbkJ5SWRGb3JFZGl0b3IoZXZlbnQucHJldmlvdXNDb250YWluZXIuaWQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRDb2x1bW4gJiYgcHJldml1b3NDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudENvbHVtbi5CbG9ja0NvbnRhaW5lciA9IHByZXZpdW9zQ29sdW1uLkJsb2NrQ29udGFpbmVyO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcHJldml1b3NDb2x1bW4uQmxvY2tDb250YWluZXI7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5TGF5b3V0Vmlld0NoYW5nZShsYXlvdXRWaWV3KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkJsb2NrRHJhZ1N0YXJ0KGV2ZW50OiBDZGtEcmFnU3RhcnQpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VDdXJzb3JPbkRyYWdTdGFydCgpO1xuICAgICAgICAvLyBUYWtlIHRoZSBibG9jayBrZXkgaWYgZXhpc3QsIGVsc2UgdGFrZSB0aGUgYXZhaWxhYmxlIGJsb2NrIGtleSAocmVsYXRpb24ga2V5KS5cbiAgICAgICAgY29uc3QgYmxvY2tLZXkgPSBldmVudC5zb3VyY2UuZGF0YT8uQmxvY2tLZXkgfHwgZXZlbnQuc291cmNlLmRhdGE/LktleTtcbiAgICAgICAgdGhpcy5fZHJhZ2dpbmdCbG9ja0tleS5uZXh0KGJsb2NrS2V5KTtcbiAgICB9XG5cbiAgICBvbkJsb2NrRHJhZ0VuZChldmVudDogQ2RrRHJhZ0VuZCkge1xuICAgICAgICB0aGlzLmNoYW5nZUN1cnNvck9uRHJhZ0VuZCgpO1xuICAgICAgICB0aGlzLl9kcmFnZ2luZ0Jsb2NrS2V5Lm5leHQoJycpO1xuICAgIH1cbiAgICBcbiAgICBkb2VzQ29sdW1uQ29udGFpbkJsb2NrKHNlY3Rpb25JZDogc3RyaW5nLCBjb2x1bW5JbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIGxldCByZXMgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgbGF5b3V0VmlldyA9IHRoaXMuX2xheW91dFZpZXdTdWJqZWN0LmdldFZhbHVlKCk7XG4gICAgICAgIGNvbnN0IHNlY3Rpb24gPSBsYXlvdXRWaWV3Py5MYXlvdXQuU2VjdGlvbnMuZmluZChzZWN0aW9uID0+IHNlY3Rpb24uS2V5ID09PSBzZWN0aW9uSWQpO1xuXG4gICAgICAgIGlmIChzZWN0aW9uICYmIGNvbHVtbkluZGV4ID49IDAgJiYgc2VjdGlvbi5Db2x1bW5zLmxlbmd0aCA+IGNvbHVtbkluZGV4KSB7XG4gICAgICAgICAgICByZXMgPSAhIXNlY3Rpb24uQ29sdW1uc1tjb2x1bW5JbmRleF0uQmxvY2tDb250YWluZXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIHNldFNjcmVlbldpZHRoKHNjcmVlblR5cGU6IERhdGFWaWV3U2NyZWVuU2l6ZSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0Q3NzU2NyZWVuV2lkaChzY3JlZW5UeXBlKVxuXG4gICAgICAgIGNvbnN0IHdpZHRoID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUsIDApO1xuICAgICAgICBpZiAod2lkdGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3NjcmVlbldpZHRoU3ViamVjdC5uZXh0KCcxMDAlJyk7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeVNjcmVlblNpemVDaGFuZ2UoUGVwU2NyZWVuU2l6ZVR5cGUuWEwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fc2NyZWVuV2lkdGhTdWJqZWN0Lm5leHQoYCR7d2lkdGh9cHhgKTtcblxuICAgICAgICAgICAgLy8gQ2hhbmdlIHRoZSBzaXplIGFjY29yZGluZyB0aGUgd2lkdGguXG4gICAgICAgICAgICBpZiAod2lkdGggPj0gMTkyMCkge1xuICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5U2NyZWVuU2l6ZUNoYW5nZShQZXBTY3JlZW5TaXplVHlwZS5YTCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHdpZHRoID49IDEyODAgJiYgd2lkdGggPCAxOTIwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlTY3JlZW5TaXplQ2hhbmdlKFBlcFNjcmVlblNpemVUeXBlLkxHKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAod2lkdGggPj0gOTYwICYmIHdpZHRoIDwgMTI4MCkge1xuICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5U2NyZWVuU2l6ZUNoYW5nZShQZXBTY3JlZW5TaXplVHlwZS5NRCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHdpZHRoID49IDYwMCAmJiB3aWR0aCA8IDk2MCkge1xuICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5U2NyZWVuU2l6ZUNoYW5nZShQZXBTY3JlZW5TaXplVHlwZS5TTSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHdpZHRoIDwgNjAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlTY3JlZW5TaXplQ2hhbmdlKFBlcFNjcmVlblNpemVUeXBlLlhTKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNob3dTa2VsZXRvbihzaG93OiBib29sZWFuKTogdm9pZCB7XG4gICAgLy8gICAgIHRoaXMuX3Nob3dTa2VsZXRvblN1YmplY3QubmV4dChzaG93KTtcbiAgICAvLyB9XG4gICAgXG4gICAgLy8gbG9ja1NjcmVlbih2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIC8vICAgICB0aGlzLm5vdGlmeUxvY2tTY3JlZW4odmFsdWUpO1xuICAgIC8vIH1cblxuICAgIGxvYWRMYXlvdXRCdWlsZGVyKGxheW91dFZpZXc6IElQZXBMYXlvdXRWaWV3KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmVkaXRvck1vZGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9lZGl0b3JzQnJlYWRDcnVtYi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBMb2FkIHRoZSBsYXlvdXQgZWRpdG9yLlxuICAgICAgICAgICAgICAgIHRoaXMubG9hZERlZmF1bHRFZGl0b3IobGF5b3V0Vmlldyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBMb2FkIG9ubHkgdGhlIGxheW91dCB2aWV3LlxuICAgICAgICB0aGlzLm5vdGlmeUxheW91dFZpZXdDaGFuZ2UobGF5b3V0Vmlldyk7XG4gICAgfVxufVxuIl19